diff --git a/src/locales/i18n.ts b/src/locales/i18n.ts index 390c757..7d9b0e8 100644 --- a/src/locales/i18n.ts +++ b/src/locales/i18n.ts @@ -1,10 +1,39 @@ import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; import LanguageDetector from 'i18next-browser-languagedetector'; +import appBridge from '@/utils/appBridge'; import ko from './ko.json'; import en from './en.json'; +// 초기 언어 설정 +let initialLanguage = 'ko'; + +// 네이티브 환경이 아닐 때는 localStorage에서 확인 +if (!appBridge.isNativeEnvironment()) { + const storedLanguage = localStorage.getItem('i18nextLng'); + if (storedLanguage && (storedLanguage === 'ko' || storedLanguage === 'en')) { + initialLanguage = storedLanguage; + } +} else { + // 네이티브 환경에서는 네이티브 언어를 가져와 localStorage에 설정 + try { + appBridge.getLanguage().then((language) => { + if (language && typeof language === 'string' && (language === 'ko' || language === 'en')) { + localStorage.setItem('i18nextLng', language); + // i18n이 이미 초기화된 경우 언어 변경 + if (i18n.isInitialized && i18n.language !== language) { + i18n.changeLanguage(language); + } + } + }).catch((error) => { + console.warn('Failed to get native language during init:', error); + }); + } catch (error) { + console.warn('Failed to get native language:', error); + } +} + i18n .use(LanguageDetector) .use(initReactI18next) @@ -13,7 +42,7 @@ i18n en: {translation: en}, ko: {translation: ko}, }, - lng: 'ko', + lng: initialLanguage, fallbackLng: 'ko', debug: true, interpolation: { diff --git a/src/pages/setting/setting-page.tsx b/src/pages/setting/setting-page.tsx index d31d5ed..bdc6f42 100644 --- a/src/pages/setting/setting-page.tsx +++ b/src/pages/setting/setting-page.tsx @@ -87,6 +87,7 @@ export const SettingPage = () => { // i18n 언어도 동기화 if (i18n.language !== language) { i18n.changeLanguage(language); + localStorage.setItem('i18nextLng', language); } }); }, [getLanguage, i18n]);