-
[ Vue ] vue-i18n 다국어 기능Front/Vue 2025. 7. 11. 11:30반응형
react에서도 i18n을 사용했지만
vue에서는 이전에 i18n을 사용안하고 직접 언어 변경을 구현한 적이 있었는데, 이번에는 i18n을 사용해서 한번 다시 해보았다.
Installment
vue에서는 vue에서 사용하는 vue-i18n 라이브러리를 설치한다.
npm install vue-i18n
Useage
i18n.ts 초기 생성 파일 만들기
message는 kev:value형태로 다루기 때문에 좀 더 관리를 편하게하기 위해서 각각 사용되는 곳으로 한번 더 묶어서 정리했다.
사이드바에 휴지통과 설정 버튼이 있기때문에 side안에 휴지통, 설정 두개를 묶어주었다.
이후 createI18n으로 i18n을 만들어 주면 된다.
import { createI18n } from 'vue-i18n' const messages = { en: { message: { side: { trash: 'Trash', setting: 'Setting', } }, }, ko: { message: { side: { trash: '휴지통', setting: '설정', } }, }, } const i18n = createI18n({ legacy: false, // Composition API 사용 시 false locale: 'ko', // 기본 언어 fallbackLocale: 'ko', messages, }) export default i18n
이후 만든 i18n을 main.ts에서 app.use로 i18n을 등록
app.use(i18n) app.mount('#app')
이러면 i18n 사용 준비는 끝난다.
Component
그럼 이제 각 컴포넌트에서의 사용은 vue-i18n을 가져와
t 를 사용해 해당 값을 가져오면 된다. t안에는 key:value로 저장한 message들의 값을 가져온다.
<script setup lang="ts"> import { useI18n } from 'vue-i18n' const {t} = useI18n() </script> <template> {{ t('message.side.trash') }} {{ t('message.side.setting') }} <template>
usei18n에서 locale을 가져와서 사용하면 locale에는 현재 선택되어있는 언어가 무엇인지 나오며,
이 locale값을 바꾸면 해당 언어로 바뀌게 된다.
따라서 누른 아이템에 따라서 local.value의 값을 ko 혹은 en으로 바꾸어서 영어와 한국어 둘다 언어 변경을 할 수 있도록 한다.
그리고 locale에 따라서 해당 locale에는 class를 주어 현재 활성화된 언어가 무엇인지 표시를 한다.
<script setup lang="ts"> import { useI18n } from 'vue-i18n' const { locale } = useI18n() const onClickChangeLocal = (lang: 'en' | 'ko') => { locale.value = lang } </script> <template> <div class="item" :class="{'select': locale == 'en'}" @click="onClickChangeLocal('en')" > English </div> <div class="item" :class="{'select': locale == 'ko'}" @click="onClickChangeLocal('ko')" > 한국어 </div> <template>
그럼 이제 언어 변경에서 클릭시 locale이 바뀔때마다 휴지통,설정이 한국어와 영어로 바뀌고,
현재 언어 설정이 무엇인지 나오게 된다.
728x90반응형'Front > Vue' 카테고리의 다른 글
[ Vue ] Index DB 용량 가져오기 (1) 2025.07.29 [ Vue ] Vue Draggable (0) 2025.07.15 [ Vue ] Pinia Store 이용하기 ( 전역으로 팝업 관리 ) (1) 2025.07.11 [ Vue ] FullCalendar 반응형 주입 (1) 2025.07.08 [ Vue ] IndexDB 저장 및 수정 (0) 2025.07.07