React Native + Expo项目i18n生产环境失效问题求助
Expo React Native 生产环境i18n国际化失效问题
开发环境中基于Expo的React Native应用使用i18n实现的国际化翻译功能一切正常,但切换到生产环境后完全失效。
我使用命令npx expo start --no-dev --minify --clear模拟生产环境测试,其中--clear参数用于添加console.log等代码后重置缓存,但该命令并非每次都能生效。同时生产环境下所有console.log日志都无法显示。
以下是我的i18n.js文件代码:
import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; import AsyncStorage from '@react-native-async-storage/async-storage'; import en from './locales/en.json'; import fr from './locales/fr.json'; import es from './locales/es.json'; import it from './locales/it.json'; import * as Localization from 'expo-localization'; const LANGUAGE_KEY = 'user-language'; const deviceLanguage = Localization.locale.split('-')[0]; // 示例: 'en' 或 'fr' console.log("📱 检测到设备语言:", deviceLanguage); // 初始化i18n并设置默认语言 i18n .use(initReactI18next) .init({ resources: { en: { translation: en }, fr: { translation: fr }, es: { translation: es }, it: { translation: it }, }, lng: deviceLanguage, // 未保存语言时使用默认值 fallbackLng: 'en', // 语言不存在或出错时回退到英文 interpolation: { escapeValue: false, }, compatibilityJSON: 'v3' }) .then(() => console.log("✅ i18n初始化完成")) .catch((err) => console.error("⚠️ i18n初始化失败", err)); // 监听i18n事件 i18n.on('languageChanged', (lng) => console.log(`🌍 语言切换为: ${lng}`)); i18n.on('failedLoading', (lng) => console.error(`⚠️ 语言加载失败: ${lng}`)); // 从AsyncStorage读取保存的语言,设置检测到的语言或默认语言 const getLanguageFromStorage = async () => { try { let savedLanguage = await AsyncStorage.getItem(LANGUAGE_KEY); if (!savedLanguage) { savedLanguage = deviceLanguage; // 默认使用检测到的设备语言 } // 检测语言是否在可用资源中 const availableLanguages = Object.keys(i18n.options.resources); if (availableLanguages.includes(savedLanguage)) { i18n.changeLanguage(savedLanguage); // 语言存在则切换 } else { i18n.changeLanguage('en'); // 语言不存在则使用英文默认值 } } catch (e) { console.error('从存储读取语言失败', e); i18n.changeLanguage('en'); // 出错时回退到英文 } }; getLanguageFromStorage(); export default i18n;
业务代码中调用i18n的方式:
const { t, i18n } = useTranslation();
内容的提问来源于stack exchange,提问作者yggdraes13
相关产品推荐
相关产品推荐

