방명록
- [개발자의품격][부트캠프][1기][22차시] Vue.js #13 | plugin 이용 다국어 처리2022년 03월 17일 16시 31분 56초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
다국어 처리 이해
※ i18n(internationalization): 다국어 처리
plugins/i18n.js
plugins 폴더를 생성하고 i18n.js를 작성한다. eslint가 에러가 아닌 것을 에러로 표시하기 때문에 /* eslint-disable */을 넣어 해제한다.
// src/plugins/i18n.js /* eslint-disable */ export default { install: (app, options) => { // 파라미터에 i18nPlugin, i18nStrings이 각각 들어간다. // globalProperties에 특정 키 $translate를 잡아두면 모든 컴포넌트에서 바로 접근이 가능해진다. app.config.globalProperties.$translate = (key) => { // 예를 들어 key "ko.hi"는 split() 함수에 의해 ['ko', 'hi']가 된다. // reduce() 함수를 통해 배열 ['ko', 'hi']의 'ko'를 키로하여 return key.split('.').reduce((o, i) => { // o['ko'] = {hi: '안녕하세요'}를 찾고, 'hi'를 키로 하여 if (o) return o[i] // o['hi'] = '안녕하세요'를 찾아 return하게 된다. }, options) } } }
i18n/en.js
i18n 폴더를 생성하고 en.js를 작성한다.
// src/i18n/en.js const i18nEN = { hi: 'hello' } export default i18nEN
i18n/ko.js
i18n 폴더를 생성하고 ko.js를 작성한다.
// src/i18n/ko.js const i18nKO = { hi: '안녕하세요' } export default i18nKO
main.js
main.js에 아래 코드를 추가한다. 다국어 처리를 전역화 하기 위해서이다.
... import i18nPlugin from './plugins/i18n' import en from './i18n/en' import ko from './i18n/ko' ... const i18nStrings = { en, ko } // en.js, ko.js를 i18nStrings로 합친다. ... app.use(i18nPlugin, i18nStrings) ...
views/5_advanced/PluginView.vue
<template> 태그에 아래 코드를 작성한다.
// src/views/5_advanced/PluginView.vue <template> <div> <h1>{{ $translate('en.hi') }}</h1> <h1>{{ $translate('ko.hi') }}</h1> ...
i18n/en.js
i18n 폴더를 생성하고 en.js를 작성한다.
// src/i18n/en.js const i18nEN = { ... search: 'Search', save: 'Save' } ...
i18n/ko.js
i18n 폴더를 생성하고 ko.js를 작성한다.
// src/i18n/ko.js const i18nKO = { ... search: '조회', save: '저장' } ...
views/5_advanced/PluginView.vue
PluginView.vue에서 버튼을 추가하고 $translate() 함수의 파라미터를 수정한다. data 함수의 return 객체로 lang: 'ko'를 추가한다. 임의로 사용자의 언어가 'ko'라고 본 것이며 렌더링 결과는 [그림 2]와 같다.
// src/views/5_advanced/PluginView.vue <template> <div> <h1>{{ $translate(`${lang}.hi`) }}</h1> <h1>{{ $translate(`${lang}.hi`) }}</h1> <button>{{ $translate(`${lang}.search`) }}</button> </div> </template> <script> export default { ... data() { return { lang: 'ko' } ...
실무에서 사용하는 다국어 처리
en.js와 ko.js의 {name}를 동적으로 처리하고자 한다.
i18n/en.js
i18n 폴더를 생성하고 en.js를 작성한다.
// src/i18n/en.js const i18nEN = { ... welcome: 'Hi! Welcome {name}' // {name}를 동적으로 처리하고자 한다. } ...
i18n/ko.js
i18n 폴더를 생성하고 ko.js를 작성한다.
// src/i18n/ko.js const i18nKO = { ... welcome: '안녕하세요. {name}님 환영합니다.' // {name}를 동적으로 처리하고자 한다. } ...
views/5_advanced/PluginView.vue
사용자의 데이터를 담은 userInfo를 작성한다.
<!-- src/views/5_advanced/PluginView.vue --> <template> <div> <h1> {{ $translate(`${lang}.welcome`, userInfo) }} </h1> ... <script> export default { ... data() { return { lang: 'ko' userInfo: { name: 'Sewol', email: 'sewol@gmail.com', lang: 'en' } ...
plugins/i18n.js
{} 안의 키 값을 이용해 동적으로 처리하는 코드를 추가한다.
// src/plugins/i18n.js /* eslint-disable */ export default { install: (app, options) => { app.config.globalProperties.$translate = (key, params={}) => { // userInfo를 받을 두번째 파라미터 params 추가(기본 값은 {}) return key.split('.').reduce((o, i) => { if (o) return o[i] }, options).replace(/{\w+}/g,match => params[match.slice(1,-1)]) // match를 이용해 여러개의 동적 값을 찾는다. slice로 {} 안의 키를 찾고 userInfo의 키와 같을 경우 해당 값을 replace() 함수를 이용해 바꾼다. } } }
※ 태그를 넣고 싶다면
더보기v-html을 이용하면 태그를 넣을 수 있다.
// src/views/5_advanced/PluginView.vue <template> <div> <h1 v-html="$translate(`${lang}.welcome`, userInfo)"></h1> ...
ko.js의 welcome 키의 값에 <br /> 태그를 넣어 [그림 4]와 같이 렌더링되었다.
// src/i18n/ko.js const i18nKO = { ... welcome: '안녕하세요. <br/>{name}님 환영합니다.' } ...
728x90반응형'영광의 시대! > 2022 개발자의 품격 부트캠프 1기' 카테고리의 다른 글
[개발자의품격][부트캠프][1기][23차시] Vue.js #15 | Formatter - 금액 처리 (0) 2022.03.18 [개발자의품격][부트캠프][1기][22차시] Vue.js #14 | Formatter - 날짜 처리 (0) 2022.03.17 [개발자의품격][부트캠프][1기][22차시] Vue.js #12 | excel 다운로드 (0) 2022.03.17 [개발자의품격][부트캠프][1기][22차시] Vue.js #11 | mixin, axios, 전역 처리 (0) 2022.03.15 [개발자의품격][부트캠프][1기][21차시] Vue.js #10 | 전역 컴포넌트, 커스텀 디렉티브 (0) 2022.03.15 다음글이 없습니다.이전글이 없습니다.댓글