locale.json 将所有语言的翻译,都保存到同一个 JSON 文件中
- 把不同语言的区域码设置为第一层的 key 值
- 第二层则为具体页面占位符的 key 值
{
"en-us": {
"intl.appName": "React App Pro",
"intl.dashboard": "Dashboard",
"intl.analysis": "Analysis",
},
"zh-cn": {
"intl.appName": "React 中后台应用",
"intl.dashboard": "仪表盘",
"intl.analysis": "分析页",
}
}
多语言版本切换
在同一个应用中,支持用户切换不同的语言版本
- 在运行时会用到所有不同的语言
- 将所有语言的翻译,都存在同一个 JSON 文件中
- 将不同的翻译分别存在各自的语言文件中
- 例如 en-us.json, zh-cn.json
- 统一管理不同平台之间语言文件的 key 值
en-us.json
{
"appName": "React App Pro",
"siderMenu_dashboard": "Dashboard",
"siderMenu_analysis": "Analysis",
}
zh-cn.json
{
"appName": "React 中后台应用",
"siderMenu_dashboard": "仪表盘",
"siderMenu_analysis": "分析页",
}
不要把所有的语言翻译都存在一个文件中,会导致 JSON文件太大
JSON文件拆分
自动加载多语言
module.exports = {
'en-US': {
locale: 'en-us',
},
'zh-CN': {
locale: 'zh-cn',
},
localhost: {
locale: 'zh-cn',
},
};
多语言版本构建
将同一个应用打包成不同语言的版本,分别发布到不同的生产环境中,但在应用内部不支持多语言切换。
- 将不同的翻译分别存在各自的语言文件中。
- 首先将语言文件 import 到 webpack.config.js 中,
- 然后通过 webpack 提供的 webpack.DefinePlugin 注入到应用的一个全局常量
const localeMessages = require('./src/i18n/locale.json');
new webpack.DefinePlugin({
'process.env.BUILD_LOCALE_MESSAGES': JSON.stringify(localeMessages),
})
构建多个不同语言版本,引入一个应用构建时的配置文件,称为 buildConfig.js
module.exports = {
'PROD-US': {
locale: 'en-us',
},
'PROD-CN': {
locale: 'zh-cn',
},
localhost: {
locale: 'zh-cn',
},
};
并在 package.json 中分别配置不同语言版本的构建命令
"scripts": {
"build:PROD-US": "cross-env NODE_ENV=production BUILD_DOMAIN=PROD-US webpack -p --progress --colors",
"build:PROD-CN": "cross-env NODE_ENV=production BUILD_DOMAIN=PROD-CN webpack -p --progress --colors",
}
在 webpack 的配置中读取到当前要构建的目标版本语言,然后再据此去匹配相应的语言文件,如 en-us.json
const BUILD_DOMAIN = process.env.BUILD_DOMAIN || 'localhost';
const config = buildConfig[BUILD_DOMAIN];
const localeMessages = require(`./src/locales/${config.locale}.json`);
new webpack.DefinePlugin({
'process.env.BUILD_LOCALE_MESSAGES': JSON.stringify(localeMessages),
})