Files
nice-app-web/src/locales/i18n.ts
Jay Sheen 531c6e4be6 Fix: 앱 언어 설정이 웹페이지에 자동으로 적용되도록 수정
- i18n 초기화 시 네이티브 앱 언어 설정을 확인하여 적용
- 네이티브 환경: 앱 언어를 가져와 localStorage에 저장
- 웹 환경: localStorage에서 저장된 언어 사용
- setting-page에서 언어 동기화 시 localStorage 업데이트 추가

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 14:41:14 +09:00

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;