You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:46:08