Skip to content

Latest commit

 

History

History
220 lines (145 loc) · 6.66 KB

README_zh.md

File metadata and controls

220 lines (145 loc) · 6.66 KB

amdi18n-loader

Travis branch npm

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');

可以同时使用enabledisable选项,但是如果一个语言被其中的任意一个参数禁用,这个语言将不能被使用。你可以根据语言列表的长度来决定使用哪个选项会方便一些。

暴露root对象

在某些情况下,需要访问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'
},

版本历史

v0.9.4 (2022-09-14)

  • 语言包回退:支持对象嵌套层级 #35 (By cavic19)

v0.9.3 (2019-06-28)

  • 升级devDependencies中的mocha版本。 #32 (By umar-khan)
  • Fix: 语言定义中,某个语言的false值会被忽略的问题。 #33 (By dlangerenken)

v0.9.2 (2019-02-12)

  • 允许ESM模块的语言包文件使用export default{语法(不带空格)。 #30 (By dlangerenken)

v0.9.1 (2018-12-17)

  • Fix: navigator.languages在IE上不存在的问题。 #28 (By gitgrimbo)

v0.9.0 (2018-12-14)

  • navigator.languages navigator.languagenavigator.userLanguage中读取当前语言。 [#25]((#25)
  • 支持在Node环境中使用。 #26 (By gitgrimbo)

v0.8.0 (2018-07-01)

  • 支持webpack 4。
  • 语言包支持使用ESM modules。 (export default {})。 #16
  • 添加一个暴露root对象的选项。 #19
  • 支持全局指定参数(e.g. webpack.config.js),也支持传递参数选项。
  • 在Node 7/8/10及webpack 1/2/3/4下运行自动化测试。

v0.7.0 (2018-03-20)

  • 支持语言包文件中写函数。 #20 (By ggriffithsIDBS)

v0.6.2 (2017-10-16)

  • Fix: 回退到root语言包失败的问题。 #17

v0.6.1 (2017-06-29)

  • 将语言包文件添加到webpack的依赖列表,以使它们可以被watch和live-reload。See #15. (By jou)

v0.6.0 (2017-06-11)

  • 添加一种语言包格式支持(来自require.js i18n插件)。 See #14.

v0.5.2 (2017-02-07)

  • Fix: enable / disable 选项中传多个值无效的问题。 #10
  • 如果一个语言包在enable中指定了,则不再需要在root中指定。

v0.5.1 (2017-01-14)

  • Fix: 没有工厂函数的AMD语言包失效的问题。 #8

v0.5.0 (2017-01-13)

  • 添加enabledisable参数。 #6
  • 支持读取html[lang]属性来确定语言。 #7
  • 重写提取语言包的方法。
  • 添加自动化测试和travis CI。

v0.4.0 (2016-01-18)

  • 支持.coffee语言文件。 (By Mullerzs)

v0.3.2 (2015-12-15)

  • Fix: UMD模式使用的bug。 (By Rick)

v0.3.1 (2015-12-15)

  • Fix: IE使用的bug。 (By Rick)

v0.3.0 (2015-12-14)

  • 语言包支持加载CommonJS模块和JSON文件。 (By Rick)

v0.2.0 (2015-10-15)

  • 自动初始化当前语言。

v0.1.0 (2015-10-14)

  • 首次发布。