Webpack i18n loader 可以帮助你的项目处理语言国际化问题(i18n)。
它的基本用法与require.js的i18n插件类似。
特性:
- 兼容webpack 1/2/3/4
- 使用语言包的方式支持多语言(与require.js类似)
- 语言包支持CommonJS/AMD/ESM模块,
.json
文件,以及.coffee
文件 - 支持根据
html[lang]
属性、全局变量或者浏览器/操作系统语言自动初始化语言 - 支持运行时切换语言
- 支持使用参数启用/禁用指定语言
npm install amdi18n-loader
首先在这里查看require.js i18n插件的文档。
语言包的结构如下:
lang.js
zh-cn/lang.js
zh-hk/lang.js
lang.js:
define({
// root是指不指定语言或者无法找到对应语言时的默认语言
root:{
HELLO:'hello'
},
// 指定有以下语言包
'zh-cn':true,
'zh-hk':true
});
zh-cn/lang.js示例:
define({
// 注意,此处没有包装对象
HELLO:'hello in zh-cn'
});
然后像这样使用:
define([
'amdi18n-loader!lang'
],function(amdi18n){
// 选择语言时会首先查找`window._i18n.locale`,
//
// 如果找不到,则会取html[lang]属性
// 例如: <html lang="en"> 会行使用`en`语言
//
// 如果仍然找不到,会尝试使用浏览器/操作系统语言
// navigator.languages[0] || navigator.language || navigator.userLanguage (.toLowerCase())
//
// 如果还是找不到,则使用`root`
//
// 你可以这样切换当前使用的语言
// `amdi18n.init(language)`;
console.log(amdi18n.HELLO);
});
你可以通过传递参数来启用或禁用某些语言
// 现在我们换成了commonjs模块规范,但是不影响逻辑
var lang = require('amdi18n-loader?enable=[zh-cn]!');
// 这里不能再使用zh-hk!
lang.init('zh-hk');
下面的代码效果是一样的
// 现在我们换成了commonjs模块规范,但是不影响逻辑
// 注意:使用`|`作为语言之间的分隔符
// 因为逗号在这里使用会有问题
var lang = require('amdi18n-loader?disable=[zh-hk|en-us]!');
// 这里不能再使用zh-hk!
lang.init('zh-hk');
可以同时使用enable
和disable
选项,但是如果一个语言被其中的任意一个参数禁用,这个语言将不能被使用。你可以根据语言列表的长度来决定使用哪个选项会方便一些。
在某些情况下,需要访问root
对象(#19)。你可以传expose-root
参数将root
对象暴露出来。
require('amdi18n-loader?expose-root=1!')
如果你选择使用.json
文件作为webpack 4+中的语言包,则需要指定JSON文件的类型,否则webpack会尝试将最终的JS文件当作JSON解析,导致报错。
// module.rules设置
{
// 为了不影响其它的JSON文件
// 这里最好指定规则,只影响语言包文件
test: /\.json$/,
type: 'javascript/auto'
},
- 语言包回退:支持对象嵌套层级 #35 (By cavic19)
- 允许ESM模块的语言包文件使用
export default{
语法(不带空格)。 #30 (By dlangerenken)
- Fix:
navigator.languages
在IE上不存在的问题。 #28 (By gitgrimbo)
- 从
navigator.languages
navigator.language
或navigator.userLanguage
中读取当前语言。 [#25]((#25) - 支持在Node环境中使用。 #26 (By gitgrimbo)
- 支持webpack 4。
- 语言包支持使用ESM modules。 (
export default {}
)。 #16 - 添加一个暴露
root
对象的选项。 #19 - 支持全局指定参数(e.g.
webpack.config.js
),也支持传递参数选项。 - 在Node 7/8/10及webpack 1/2/3/4下运行自动化测试。
- 支持语言包文件中写函数。 #20 (By ggriffithsIDBS)
- Fix: 回退到root语言包失败的问题。 #17
- 将语言包文件添加到webpack的依赖列表,以使它们可以被watch和live-reload。See #15. (By jou)
- 添加一种语言包格式支持(来自require.js i18n插件)。 See #14.
- Fix:
enable
/disable
选项中传多个值无效的问题。 #10 - 如果一个语言包在
enable
中指定了,则不再需要在root中指定。
- Fix: 没有工厂函数的AMD语言包失效的问题。 #8
- 支持
.coffee
语言文件。 (By Mullerzs)
- Fix: UMD模式使用的bug。 (By Rick)
- Fix: IE使用的bug。 (By Rick)
- 语言包支持加载CommonJS模块和JSON文件。 (By Rick)
- 自动初始化当前语言。
- 首次发布。