- i18n 초기화 시 네이티브 앱 언어 설정을 확인하여 적용 - 네이티브 환경: 앱 언어를 가져와 localStorage에 저장 - 웹 환경: localStorage에서 저장된 언어 사용 - setting-page에서 언어 동기화 시 localStorage 업데이트 추가 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
57 lines
1.6 KiB
TypeScript
57 lines
1.6 KiB
TypeScript
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)
|
|
.init({
|
|
resources: {
|
|
en: {translation: en},
|
|
ko: {translation: ko},
|
|
},
|
|
lng: initialLanguage,
|
|
fallbackLng: 'ko',
|
|
debug: true,
|
|
interpolation: {
|
|
escapeValue: false,
|
|
},
|
|
detection: {
|
|
order: ['localStorage', 'navigator'],
|
|
caches: ['localStorage'],
|
|
}
|
|
});
|
|
|
|
export default i18n; |