ABOUT ME

-

  • [ 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
    반응형