一、使用
1、创建内容
-
比如需要新增一个【繁体中文】,在
src\i18n\locales
创建对应的zh_HK.json
文件新增内容
"appModule.pageTest.title":"测试页面的标题"
- 在
src\i18n\entries
下创建zh_HK.js
,引入对应的json
文件
import hkMessages from '../locales/`zh_HK.json';
const HkLang = {
messages: hkMessages,
locale: 'hk'
};
export default HkLang;
- 在
src\i18n\index.js
引入并导出对应[KEY]:[VALUE]
import HkLang from './entries/zh_HK';
const AppLocale = {
...
// key 必须是纯英文字符串
hk: HkLang,
};
export default AppLocale;
2、录入系统
-
登录进入
http://i18nui.hairoutech.com/i18ui/entry-management
页面 -
选中对应的系统,如
IWMS
对应的智能仓储管理系统 -
填入词条编码【
appModule.pageTest.title
】 -
【语种的值】,就是切换国际化语言后展示的对应的【实际内容】
-
新增对应的【
HK
】语种以及对应的appModule.pageTest.title
内容。
3、使用IntlMessages
- 引入国际化组件
import IntlMessages from 'util/IntlMessages';
- 使用组件,展示对应国际化内容
const id = "appModule.pageTest.title";
<Title title={<IntlMessages id={id} />} />
-
测试
在页面切换国际化语言。
二、注入原理
1、创建上下文
AppContext
目录:src@jumbo\components\contextProvider\AppContextProvider\index.js
创建顶层上下文AppContext
,所有子组件可以订阅各种事件以及获取对应的值。
包括当前的locale
。
PS:init国际化数据
useInitLocales()
处理初始数据
-
Jumbo
项目本身的国际化i18.xxx.json
是内置的,现在接入国际化平台之后,对应数据除了本地需要有一份对应的代码,还需要通过请求。 -
所以在
AppContextProvider\index.js
内做了对应数据初始的更新处理,通过封装的useInitLocales
返回对应更新后的值,然后updatelocale
字段。
2、注入
AppContext
-->App
目录:src\App.js
-
创建好了上下文
AppContext
,注入到顶层APP
组件中。 -
避免【登录】数据或者【刷新页面】后无法获取新的
JSON
数据,会先清空,然后在useInitLocales
读取不到本地存储的数据时,会再次请求国际化数据。
3、国际化key
i18n\xxx\xxx.json
目录:src\i18n\index.js
-
所有的国际化内容都需在本地有一份。形式就是对应json文件的
[key]:value
-
写完对应的json后,最终会被读取到
AppLocale
对象中。
4、订阅
IntlProvider->AppWrapper->IntlMessages
src@jumbo\components\AppWrapper\index.js
-
组件
IntlProvider
会自动订阅locale
字段的更新【切换】 -
组件内的
children
就可以实时拿到对应的键,然后读取对应的messages
字段 -
messages
就是当前语言对应的JSON
5、读取value
value = messages[id]
src\util\IntlMessages.js
-
拿到
JSON
-
在
IntlMessages
组件做对应展示处理
网友评论