export default defineNuxtPlugin(() => { // 클라이언트 사이드에서 gameData를 가져와서 i18n 설정 업데이트 const { $i18n } = useNuxtApp(); // gameData에서 언어 코드 추출 const getGameDataLangCodes = (gameData: any) => { try { console.log("🚀 ~ getGameDataLangCodes ~ gameData:", gameData); if (gameData?.lang_codes) { console.log("🚀 ~ getGameDataLangCodes ~ gameData.lang_codes:", gameData.lang_codes); console.log("🚀 ~ getGameDataLangCodes ~ lang_codes type:", typeof gameData.lang_codes); console.log("🚀 ~ getGameDataLangCodes ~ lang_codes isArray:", Array.isArray(gameData.lang_codes)); return Array.isArray(gameData.lang_codes) ? gameData.lang_codes : [gameData.lang_codes]; } else { console.log("🚀 ~ getGameDataLangCodes ~ gameData.lang_codes is undefined or null"); } } catch (error) { console.warn('Failed to get gameData lang codes:', error); } console.log("🚀 ~ getGameDataLangCodes ~ returning default ['ko']"); return ['ko']; // 기본값 }; // i18n 설정 업데이트 const updateI18nLocales = async (gameData?: any) => { const langCodes = getGameDataLangCodes(gameData); if (langCodes && langCodes.length > 0) { // 새로운 로케일 설정 생성 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; }; // gameData가 설정될 때까지 기다리거나 즉시 실행 const gameDataStore = useGameDataStore(); // gameData가 이미 설정되어 있으면 즉시 실행 if (gameDataStore.gameData) { updateI18nLocales(gameDataStore.gameData); } // gameData가 변경될 때마다 실행 watch(() => gameDataStore.gameData, async (newGameData) => { if (newGameData) { console.log("🚀 ~ gameData changed, updating i18n locales"); await updateI18nLocales(newGameData); } }, { immediate: true }); });