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 = { 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 }