Fix: 앱 언어 설정이 웹페이지에 자동으로 적용되도록 수정
- i18n 초기화 시 네이티브 앱 언어 설정을 확인하여 적용 - 네이티브 환경: 앱 언어를 가져와 localStorage에 저장 - 웹 환경: localStorage에서 저장된 언어 사용 - setting-page에서 언어 동기화 시 localStorage 업데이트 추가 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,10 +1,39 @@
|
|||||||
import i18n from 'i18next';
|
import i18n from 'i18next';
|
||||||
import { initReactI18next } from 'react-i18next';
|
import { initReactI18next } from 'react-i18next';
|
||||||
import LanguageDetector from 'i18next-browser-languagedetector';
|
import LanguageDetector from 'i18next-browser-languagedetector';
|
||||||
|
import appBridge from '@/utils/appBridge';
|
||||||
|
|
||||||
import ko from './ko.json';
|
import ko from './ko.json';
|
||||||
import en from './en.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
|
i18n
|
||||||
.use(LanguageDetector)
|
.use(LanguageDetector)
|
||||||
.use(initReactI18next)
|
.use(initReactI18next)
|
||||||
@@ -13,7 +42,7 @@ i18n
|
|||||||
en: {translation: en},
|
en: {translation: en},
|
||||||
ko: {translation: ko},
|
ko: {translation: ko},
|
||||||
},
|
},
|
||||||
lng: 'ko',
|
lng: initialLanguage,
|
||||||
fallbackLng: 'ko',
|
fallbackLng: 'ko',
|
||||||
debug: true,
|
debug: true,
|
||||||
interpolation: {
|
interpolation: {
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ export const SettingPage = () => {
|
|||||||
// i18n 언어도 동기화
|
// i18n 언어도 동기화
|
||||||
if (i18n.language !== language) {
|
if (i18n.language !== language) {
|
||||||
i18n.changeLanguage(language);
|
i18n.changeLanguage(language);
|
||||||
|
localStorage.setItem('i18nextLng', language);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}, [getLanguage, i18n]);
|
}, [getLanguage, i18n]);
|
||||||
|
|||||||
Reference in New Issue
Block a user