Files
powerfun-setting/src/i18n/index.ts
T

71 lines
1.4 KiB
TypeScript
Raw Normal View History

import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import AsyncStorage from '@react-native-async-storage/async-storage';
import zh from './locales/zh.json';
import en from './locales/en.json';
const LANGUAGE_KEY = '@app_language';
// 语言配置类型
export interface LanguageOption {
key: string;
label: string;
value: string;
}
// 语言选项
export const LANGUAGES: LanguageOption[] = [
{
key: 'zh',
label: '中文',
value: 'zh',
},
{
key: 'en',
label: 'English',
value: 'en',
},
];
// 获取存储的语言
export const getStoredLanguage = async (): Promise<string> => {
try {
const language = await AsyncStorage.getItem(LANGUAGE_KEY);
return language || 'zh';
} catch (error) {
return 'zh';
}
};
// 保存语言选择
export const saveLanguage = async (language: string): Promise<void> => {
try {
await AsyncStorage.setItem(LANGUAGE_KEY, language);
} catch (error) {
console.error('保存语言失败:', error);
}
};
// 初始化 i18n
i18n
.use(initReactI18next)
.init({
compatibilityJSON: 'v4',
resources: {
zh: { translation: zh },
en: { translation: en },
},
lng: 'zh',
fallbackLng: 'zh',
interpolation: {
escapeValue: false,
},
});
// 从存储中加载语言设置
getStoredLanguage().then((language) => {
i18n.changeLanguage(language);
});
export default i18n;