i18n plugin for egg
npm install egg-i18n[![NPM version][npm-image]][npm-url]
[![build status][travis-image]][travis-url]
[![Test coverage][codecov-image]][codecov-url]
[![David deps][david-image]][david-url]
[![Known Vulnerabilities][snyk-image]][snyk-url]
[![npm download][download-image]][download-url]
[npm-image]: https://img.shields.io/npm/v/egg-i18n.svg?style=flat-square
[npm-url]: https://npmjs.org/package/egg-i18n
[travis-image]: https://img.shields.io/travis/eggjs/egg-i18n.svg?style=flat-square
[travis-url]: https://travis-ci.org/eggjs/egg-i18n
[codecov-image]: https://codecov.io/github/eggjs/egg-i18n/coverage.svg?branch=master
[codecov-url]: https://codecov.io/github/eggjs/egg-i18n?branch=master
[david-image]: https://img.shields.io/david/eggjs/egg-i18n.svg?style=flat-square
[david-url]: https://david-dm.org/eggjs/egg-i18n
[snyk-image]: https://snyk.io/test/npm/egg-i18n/badge.svg?style=flat-square
[snyk-url]: https://snyk.io/test/npm/egg-i18n
[download-image]: https://img.shields.io/npm/dm/egg-i18n.svg?style=flat-square
[download-url]: https://npmjs.org/package/egg-i18n
可以为你的应用提供多语言的特性
- 支持多种语言独立配置,统一存放在 config/locale/\.js 下( 兼容 config/locales/.js );
- 提供 Middleware 为 View 提供 \_\_, gettext 函数获取多语言文案;
- 基于 URL 参数 locale 修改语言显示,同时会记录到 Cookie,下次请求会用 Cookie 里面的语言方案。
默认处于关闭状态,你需要在 config/plugin.js 开启它:
``js`
// config/plugin.js
exports.i18n = {
enable: true,
package: 'egg-i18n',
};
你可以修改 config/config.default.js 来设定 i18n 的配置项:
`js1y
// config/config.default.js
exports.i18n = {
// 默认语言,默认 "en_US"
defaultLocale: 'zh-CN',
// URL 参数,默认 "locale"
queryField: 'locale',
// Cookie 记录的 key, 默认:"locale"
cookieField: 'locale',
// Cookie 的 domain 配置,默认为空,代表当前域名有效
cookieDomain: '',
// Cookie 默认 一年后过期, 如果设置为 Number,则单位为 ms`
cookieMaxAge: '1y',
};
其实大部分时候,你只需要修改一下 defaultLocale 设定默认的语言。
`js`
// config/locale/zh-CN.js
module.exports = {
"Email": "邮箱",
"Welcome back, %s!": "欢迎回来,%s!",
"Hello %s, how are you today?": "你好 %s, 今天过得咋样?",
};
`js`
// config/locale/en-US.js
module.exports = {
"Email": "Email",
};
或者也可以用 JSON 格式的文件:
`json`
// config/locale/zh-CN.json
{
"email": "邮箱",
"login": "帐号",
"createdAt": "注册时间"
}
I18n 为你提供 __ (Alias: gettext) 函数,让你可以轻松获得 locale 文件夹下面的多语言文本。
> NOTE: __ 是两个下划线哦!
- ctx.__ = function (key, value[, value2, ...]): 类似 util.format 接口
- ctx.__ = function (key, values): 支持数组下标占位符方式,如
`js`
ctx.__('{0} {0} {1} {1}'), ['foo', 'bar'])
ctx.gettext('{0} {0} {1} {1}'), ['foo', 'bar'])
=>
foo foo bar bar
`js`
module.exports = function* () {
this.body = {
message: this.__('Welcome back, %s!', this.user.name)
// 或者使用 gettext,如果觉得 __ 不好看的话
// message: this.gettext('Welcome back, %s!', this.user.name)
user: this.user,
};
};
`html``
{{ __('Hello %s, how are you today?', user.name) }}
{{ __('{0} {0} {1} {1}'), ['foo', 'bar']) }}
你可以用下面几种方式修改应用的当前语言(修改或会记录到 Cookie),下次请求直接用设定好的语言。
优先级从上到下:
- query: /?locale=en-US
- cookie: locale=zh-TW
- header: Accept-Language: zh-CN,zh;q=0.5