Files
web-temp/temp/dynamic-i18n-runtime.server.ts
2025-09-09 04:09:54 +00:00

95 lines
2.9 KiB
TypeScript

export default defineNuxtPlugin(async () => {
// 서버 사이드에서 gameData를 가져와서 i18n 설정 업데이트
const { $i18n } = useNuxtApp();
// gameData에서 언어 코드 추출
const getGameDataLangCodes = () => {
try {
// 서버 사이드에서 gameData 접근
const nuxtApp = useNuxtApp();
const gameData = nuxtApp.ssrContext?.event.context.gameData;
if (gameData?.lang_codes) {
console.log("🚀 ~ dynamic-i18n-runtime.server ~ gameData.lang_codes:", gameData.lang_codes);
return Array.isArray(gameData.lang_codes) ? gameData.lang_codes : [gameData.lang_codes];
}
} catch (error) {
console.warn('Failed to get gameData lang codes on server:', error);
}
return ['ko']; // 기본값
};
// i18n 설정 업데이트
const updateI18nLocales = async () => {
const langCodes = getGameDataLangCodes();
console.log("🚀 ~77777 updateI18nLocales ~ langCodes:", langCodes)
if (langCodes && langCodes.length > 0) {
console.log("🚀 ~ dynamic-i18n-runtime.server ~ updating locales with:", langCodes);
// 새로운 로케일 설정 생성
const newLocales = langCodes.map(code => ({
code,
file: `${code}.ts`,
name: getLocaleName(code),
iso: getLocaleIso(code),
dir: 'ltr'
}));
// i18n 설정 업데이트
if ($i18n) {
// 로케일 메시지 동적 로드
for (const code of langCodes) {
try {
const messages = await import(`../../i18n/locales/${code}.ts`);
// defineI18nLocale 함수를 실행하여 실제 메시지 데이터 가져오기
const localeMessages = await messages.default(code);
console.log(`🚀 ~ loaded messages for ${code}:`, localeMessages);
($i18n as any).setLocaleMessage(code, localeMessages);
} catch (error) {
console.warn(`Failed to load locale messages for ${code}:`, error);
}
}
}
}
};
// 로케일 이름 가져오기
const getLocaleName = (code: string): string => {
const localeNames: Record<string, string> = {
en: 'English',
'zh-tw': '繁體中文',
ja: '日本語',
ko: '한국어',
fr: 'Français',
de: 'Deutsch',
es: 'Español',
pt: 'Português',
th: 'ภาษาไทย',
'zh-cn': '简体中文'
};
return localeNames[code] || code;
};
// 로케일 ISO 코드 가져오기
const getLocaleIso = (code: string): string => {
const localeIsos: Record<string, string> = {
en: 'en',
'zh-tw': 'zh-tw',
ja: 'ja',
ko: 'ko-KR',
fr: 'fr',
de: 'de',
es: 'es',
pt: 'pt',
th: 'th',
'zh-cn': 'zh-cn'
};
return localeIsos[code] || code;
};
// 서버 사이드에서 즉시 실행
await updateI18nLocales();
});