본문 바로가기
TypeScript/그 외

i18n을 사용하여 다국어 처리 하기

by 1two13 2024. 6. 26.
728x90
반응형

다국어 처리를 위해 먼저 파일을 생성했다.

src/lib/i18n

svelte를 사용하고 있기 때문에 svelte-18n 공식문서를 채택했다. 

 

각각의 json 파일에는 언어를 작성해두었다. 

// en-US.json { ​​"common": { ​​​​"cancel": "Cancel", ​​​​"close": "Close", ​​​​"delete": "Delete" ​​}, } // ko-KR.json { ​​"common": { ​​​​"cancel": "취소", ​​​​"close": "닫기", ​​​​"delete": "삭제하기" ​​}, }

 

그리고 index.ts 파일에는 공식 깃헙에 나와있는 그대로를 작성해줬다. 

locale 변수는 현재 선택된 언어의 코드이다. store에 사용하고 있는 언어를 저장하는 방식으로 사용했다. 

import { init, locale, register } from 'svelte-i18n'; import { languages } from '@/types/i18n'; import { storeLanguageCode } from '@/routes/store'; import { get } from 'svelte/store'; const defaultLocale = get(storeLanguageCode); languages.forEach((language) => { ​​register(language.code, () => import(`./locales/${language.code}.json`)); }); init({ ​​fallbackLocale: defaultLocale, ​​initialLocale: defaultLocale, }); const initI18n = () => { ​​console.log('i18n initialized'); }; locale.subscribe((loc) => { ​​if (loc) { ​​​​storeLanguageCode.set(loc || ''); ​​} }); export default initI18n;

 

 

이제 그럼 작성해둔 문자열을 다국어 처리하는 과정이 필요하다. 

import { t, locale, locales } from 'svelte-i18n'; locale.subscribe(() => { ​​menuTabs = { ​​​​[APP_ROUTE.MAIN]: $t('menu.search'), ​​}; }); <select ​​class="select-bordered select h-auto min-h-fit border border-zinc-500 bg-transparent py-2 text-xs text-white focus:border focus:border-zinc-100" ​​bind:value={$locale} > ​​{#each $locales as item_locale} ​​​​<option value={item_locale}> ​​​​​​{languages.find((lang) => lang.code === item_locale)?.icon} ​​​​​​{languages.find((lang) => lang.code === item_locale)?.name} ​​​​</option> ​​{/each}

여기서 사용되는 t는 반응형으로 사용하며 주어진 key에 해당하는 다국어 문자열을 반환한다. 

locales 변수는 지원되는 모든 언어 코드의 배열이다. 

 

i18n을 사용하면 웹에서 쉽게 다국어화를 구현할 수 있고, 유지보수에도 편리하다는 장점이 있다. 

 

 

참고자료


728x90
반응형

'TypeScript > 그 외' 카테고리의 다른 글

TS와 Zode 비교하기  (0) 2024.01.17

댓글