90 lines
3.0 KiB
TypeScript
90 lines
3.0 KiB
TypeScript
import type { LocaleObject, NuxtI18nOptions } from '@nuxtjs/i18n'
|
|
|
|
const LANG_DIR: string = '../i18n/locales'
|
|
const DEFAULT_COVERAGES: string[] = ['ko', 'en', 'ja', 'zh-tw', 'zh-cn', 'th']
|
|
const DEFAULT_LOCALES: Record<string, LocaleObject> = {
|
|
ko: { code: 'ko', name: '한국어', iso: 'ko-KR', dir: 'ltr' },
|
|
en: { code: 'en', name: 'English', iso: 'en', dir: 'ltr' },
|
|
ja: { code: 'ja', name: '日本語', iso: 'ja', dir: 'ltr' },
|
|
'zh-tw': { code: 'zh-tw', name: '繁體中文', iso: 'zh-tw', dir: 'ltr' },
|
|
'zh-cn': { code: 'zh-cn', name: '简体中文', iso: 'zh-cn', dir: 'ltr' },
|
|
th: { code: 'th', name: 'ภาษาไทย', iso: 'th', dir: 'ltr' },
|
|
}
|
|
const DEFAULT_LOCALE_CODE = 'ko'
|
|
const ISO_LANGUAGE_CODES = [
|
|
'en', // 영어
|
|
'zh', // 중국어(표준어/만다린)
|
|
'zh-tw', // 중국어(번체)
|
|
'zh-cn', // 중국어(간체)
|
|
'es', // 스페인어
|
|
'ar', // 아랍어
|
|
'id', // 인도네시아어
|
|
'pt', // 포르투갈어
|
|
'fr', // 프랑스어
|
|
'ja', // 일본어
|
|
'ru', // 러시아어
|
|
'de', // 독일어
|
|
'hi', // 힌디어
|
|
'vi', // 베트남어
|
|
'tr', // 터키어
|
|
'ko', // 한국어
|
|
'it', // 이탈리아어
|
|
'bn', // 벵골어
|
|
'pl', // 폴란드어
|
|
'th', // 태국어
|
|
'fa', // 페르시아어
|
|
'nl', // 네덜란드어
|
|
'ur', // 우르두어
|
|
'te', // 텔루구어
|
|
'mr', // 마라티어
|
|
'ta', // 타밀어
|
|
'tl', // 타갈로그어(필리핀어)
|
|
'uk', // 우크라이나어
|
|
'sw', // 스와힐리어
|
|
'ro', // 루마니아어
|
|
'hu', // 헝가리어
|
|
'ms', // 말레이어
|
|
]
|
|
|
|
// getI18n 함수가 NuxtI18nOptions 타입의 값을 반환하도록 명시적으로 타입을 지정합니다.
|
|
const getI18n = (allowedLangCodes?: string[]): NuxtI18nOptions => {
|
|
// allowedLangCodes가 제공되면 해당 언어들만 사용, 그렇지 않으면 모든 기본 언어 사용
|
|
const targetCoverages =
|
|
allowedLangCodes && allowedLangCodes.length > 0
|
|
? DEFAULT_COVERAGES.filter(code => allowedLangCodes.includes(code))
|
|
: DEFAULT_COVERAGES
|
|
|
|
const DEFAULT_LOCALE_COVERAGES_SET: LocaleObject[] = targetCoverages.map(
|
|
code => ({
|
|
code: code as LocaleObject['code'],
|
|
file: `${code}.ts`,
|
|
name: DEFAULT_LOCALES[code]?.name ?? code,
|
|
iso: DEFAULT_LOCALES[code]?.iso ?? code,
|
|
// dir 속성은 모든 로케일 객체에 공통적으로 존재하므로, 여기서 추가할 수도 있습니다.
|
|
dir: DEFAULT_LOCALES[code]?.dir ?? 'ltr',
|
|
})
|
|
)
|
|
|
|
return {
|
|
baseUrl: process.env.BASE_URL,
|
|
strategy: 'prefix',
|
|
vueI18n: 'custom',
|
|
locales: DEFAULT_LOCALE_COVERAGES_SET,
|
|
defaultLocale: DEFAULT_LOCALE_CODE,
|
|
detectBrowserLanguage: {
|
|
fallbackLocale: DEFAULT_LOCALE_CODE,
|
|
useCookie: false,
|
|
redirectOn: 'root',
|
|
},
|
|
langDir: LANG_DIR,
|
|
compilation: {
|
|
strictMessage: false,
|
|
escapeHtml: false,
|
|
},
|
|
debug: false,
|
|
// 추가적인 설정이 필요하다면 여기에 포함시킬 수 있습니다.
|
|
}
|
|
}
|
|
|
|
export { DEFAULT_LOCALE_CODE, ISO_LANGUAGE_CODES, getI18n }
|