react native 国际化 react-i18next 和 i18n,运用高级组件的形式。 - 指南

news/2025/9/24 12:59:38/文章来源:https://www.cnblogs.com/tlnshuju/p/19109033

react native 国际化 react-i18next 和 i18n,运用高级组件的形式。 - 指南

2025-09-24 12:57  tlnshuju  阅读(0)  评论(0)    收藏  举报

react native 国际化

react-i18next 和 i18n,运用高级组件的形式。

import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import zh from './translation/zh.json';
import en from './translation/en.json'
import tw from './translation/tw.json';
// 语言资源 缓存
const languageResources ={};
// 异步获取翻译资源的函数
const fetchTranslations = async (lng) => {
try {
return new Promise((resolve) => {
if (languageResources[lng]) {
resolve(languageResources[lng]);
}
setTimeout(() => {
if(lng =="zh"){
resolve(zh);
}else if(lng =="en"){
resolve(en);
}else if(lng =="tw"){
resolve(tw);
}
}, 1000*8);
})
} catch (error) {
languageResources.zh=zh;
languageResources.en=en;
languageResources.tw=tw;
}
};
const initI18n = async () => {
// 并行加载所有语言资源
const [zhResources, enResources, twResources] = await Promise.all([
fetchTranslations('zh'),
fetchTranslations('en'),
fetchTranslations('tw')
]);
languageResources.zh = zhResources;
languageResources.en = enResources;
languageResources.tw = twResources;
i18n
.use(initReactI18next) // 将 i18next 与 react-i18next 结合
.init({
compatibilityJSON: 'v3', // 对安卓进行兼容
resources: {
zh: {
translation: languageResources.zh, // 中文简体翻译
},
en: { //英语
translation: languageResources.en
},
'zh-tw': { // 繁體中文
translation: languageResources.tw
},
initImmediate: false // 确保完全初始化
},
lng: 'zh', // 默认语言
fallbackLng: 'zh', // 如果当前语言没有对应的翻译,则使用默认语言
interpolation: {
escapeValue: false, // React 已经处理了转义
},
}, (err, t) => {
// 錯誤
if (err) throw err;
// 这里放多一层函数是为了方便之后切换语言的同时做一些其他的统一处理
i18n.setLocalLanguage = function (value) {
// 設置項目文本的語言
// this.changeLanguage(value);
// 做点别的,比如同时切换别的插件的语言
}
// 初始化
i18n.setLocalLanguage(i18n.language);
});
console.log("i18n========国际化初始化完成", i18n)
return i18n
}
export default initI18n;

未加载成功,的提示信息。

// withLoading.js
import React from 'react';
import { View, Text, ActivityIndicator, StyleSheet } from 'react-native';
import initI18n from './i18n';
const withLoading = (WrappedComponent) => {
return class extends React.Component {
constructor(props) {
super(props);
this.state = {
i18nLoaded: false,
i18nError: false
};
}
async componentDidMount() {
try {
// 等待i18n初始化完成
// console.log("initI18n",initI18n)
console.log("this.props======",this.props)
let a = await initI18n();
// console.log(a,"======withLoading======")
this.setState({ i18nLoaded: true });
} catch (error) {
console.error('初始化i18n失败:', error);
this.setState({ i18nError: true });
}
}
render() {
const { i18nLoaded, i18nError } = this.state;
if (i18nError) {
return (
Initialization failed, please check the network
);
}
if (!i18nLoaded) {
return (
Initializing...
);
}
return ;
}
};
};
const styles = StyleSheet.create({
center: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
});
export default withLoading;

在根目录文件引用

import './locales/i18n';
import withLoading from './locales/withLoading';
import { withTranslation } from 'react-i18next';

//高级组件的导入

export default withLoading(withTranslation()(withTheme(App)));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/915730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

godot3.6字典遍历

godot3.6字典遍历for key in Global.dataJson["game"]:if Global.dataJson["game"][key]["status"] == "在看":game_watch_count+=1

国产DevOps工具链崛起:Gitee领衔的本土化技术生态全景解读

国产DevOps工具链崛起:Gitee领衔的本土化技术生态全景解读 在全球数字化转型加速的背景下,企业技术团队正积极寻求高效、安全的软件开发与运维解决方案。DevOps(开发运维一体化)作为提升软件交付效率的关键实践,正…

安装 elasticsearch-9.1.4的 IK分词器

前提 IK 分词器的文档中描述,在 Elasticsearch 中可以使用命令来安装操作,如下图所示操作过程如下挑选主节点的机器,操作如下[es@lab10 elasticsearch-9.1.4]$ bin/elasticsearch-plugin install https://get.infin…

已收录的网站不好优化wordpress企业营销

拆分Transformer注意力,韩国团队让大模型解码提速20倍AI正在颠覆AI上市不到两年,蜗牛游戏可能要退市了?世界人工智能大会结束了,百花齐放,但也群魔乱舞“串联OLED”被苹果带火了,比OLED强在哪里&#xff1f…

免费医院网站源码静态网页效果图

内容 本次入门内容是调用OpenAI的聊天机器人功能。 实现原理是使用OpenAI提供的API,通过向其发送请求来生成回复文本。 首先,导入ChatOpenAI类,这个类是用于实现与OpenAI聊天机器人交互的。 pip install langchain-openai2. 编写调试代码 …

react性能优化

memo 如下所示例子中,因为App内部状态的更新,总会牵连其无辜子组件Demo的更新。 const Demo = () => {console.log(Demo render);return (<div>我是子组件</div>); };const App = () => {console.…

从研发效能到知识中枢:Gitee Wiki如何重塑企业知识管理范式

从研发效能到知识中枢:Gitee Wiki如何重塑企业知识管理范式 在数字化浪潮席卷全球的当下,企业知识管理正经历着从简单文档存储向智能中枢的范式转变。某研发团队经过长达两年的实践探索,对Notion、Confluence和Gite…

站点建错了网页能打开吗ps做网站首页

推荐一个学习资源&#xff1a;数据结构与算法之美。主要包括以下几个学习内容&#xff1a; 20个经典数据结构与算法100个真实项目场景案例文科生都能看懂的算法手绘图解轻松搞定BAT的面试通关秘籍 作者&#xff1a;王争 前谷歌工程师 内容很强。扫描我的二维码买的话&#x…

全国房地产网站如何运营一个公众号

MySql索引(二) 转自&#xff1a; http://www.cnblogs.com/dreamhome/archive/2013/04/16/3025304.html 所有MySQL列类型可以被索引。根据存储引擎定义每个表的最大索引数和最大索引长度。 所有存储引擎支持每个表至少16个索引&#xff0c;总索引长度至少为256字节。大多数存储引…

金华建设二建哪个网站报名商洛微网站建设

搜索AI伙伴 申请到了百度的chatgpt&#xff1a; 完整的窗口布局&#xff1a; 三个哲学问题&#xff1a; 灵感中心&#xff1a; 请做一副画&#xff0c;一个渔夫&#xff0c;冬天&#xff0c;下着大雪&#xff0c;在船上为了一家的生计在钓鱼&#xff0c;远处的山上也都是白雪&a…

Gitee DevSecOps平台:军工软件研发的智能化革命

Gitee DevSecOps平台:军工软件研发的智能化革命 军工行业正经历着数字化转型的关键时期,软件研发的工业化进程已成为提升国防科技实力的重要突破口。在这一背景下,Gitee DevSecOps平台凭借其创新的智能版本管理体系…

靠谱的程序员推荐阅读-----《阿里Java开发手册》【强制】所有的覆写方法,必须加@Override注解

靠谱的程序员推荐阅读----->《阿里Java开发手册》【强制】所有的覆写方法,必须加@Override注解将程序错误前置扼杀在编译期,是这个规约对我们开发者带来的最大的收益。《阿里巴巴Java开发手册》编程规约->OOP规…

杆状病毒表达系统为何成为蛋白表达首选

杆状病毒表达系统为何成为蛋白表达首选在现代生命科学、疫苗开发、生物医药以及结构生物学等领域,获取足够量、正确折叠、具有生物活性并带有适当后翻译修饰(post-translational modifications, PTMs)的蛋白,是许多…

日记3

卡壳在ArrayList和LinkedList的区别上,查资料+写测试代码后才理清:前者查数据快(像数组翻书),后者增删快(像串珠子)。 还练了道集合遍历题,用增强for循环时少写冒号报了错,调试后才想起语法格式。最后整理了两…

Gitee如何重塑中国开发者的代码托管体验

Gitee如何重塑中国开发者的代码托管体验 在数字化转型浪潮席卷全球的今天,代码托管平台作为开发者生态的基础设施,其重要性日益凸显。作为国内领先的代码托管服务提供商,Gitee凭借其本地化创新优势,正在重新定义中…

模块化面向对象 2章

1 抽象的目的是通过把相关的属性和其他不相关的属性分开,分离关注点 2 在面向对象设计中,普遍采用的包括描述程序静态结构的类图、描述程序动态行为的活动图。他们掩藏了类中方法的实现细节,凸出来类的组成和类之间…

完整教程:ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 自定义(GLSL)修改高亮图层样式

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

css `isolation: isolate` - 详解

css `isolation: isolate` - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

南昌网站建设一般多少钱一年视差效果网站

Java NIO 一&#xff0c;介绍 Java NIO&#xff08;New IO&#xff09;是 JDK 1.4 引入的一组新的 I/O API&#xff0c;用于支持非阻塞式 I/O 操作。相比传统的 Java IO API&#xff0c;NIO 提供了更快、更灵活的 I/O 操作方式&#xff0c;可以用于构建高性能网络应用程序。 …

建设一个网站需要多久文创产品设计流程

【vue在主页中点击主页面跳转到某个页面的操作完整过程】 1.首先在主页面中加入一个卡槽用于展示弹出的窗口 代码如下&#xff1a; <el-dialog :visible.sync"dialogVisible1" :close-on-click-modal"false" :title"title" class"dial…