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 = { 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 = { 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(); });