NPM酷库,每天两分钟,了解一个流行NPM库。·
在开发多国语言的项目时,为了给不同国家用户显示不同语言,我们一般会为每个语言分别建立一个Map映射,在界面上依据当前语言环境不同而输出不同语言库的字符串。
const MESSAGES = {
'en':{
greeting: 'Hello'
},
'zh-CN':{
greeting: '你好'
}
}
function tr(message){
return MESSAGES[LOCALE][message];
}
tr('greeting'); // Hello
在上述代码中,我们就可以在英文环境中将greeting翻译成“Hello”。
但是在大多数时候,如此简单的机制无法满足实际需求,比如,在英语环境中名词有复数形式,上述直接输出字符串的方式就无法满足。
intl-messageformat
intl-messageformat 是一个用来辅助处理多语言的库,可以支持在字符串中输出变量,还可以支持复数形式。
const IntlMessageFormat = require('intl-messageformat');
const MESSAGES = {
'en':{
PHOTOS: 'You have {photos, plural,' +
'=0 {no photos.}' +
'=1 {one photo.}' +
'other {# photos.}}'
}
}
function tr(message,values){
let msg = new IntlMessageFormat(MESSAGES[LOCALE][message],LOCALE);
return msg.format(values);
}
tr('PHOTOS', { photos: 0 }); // You have no photos.
tr('PHOTOS', { photos: 1 }); // You have one photo.
tr('PHOTOS', { photos: 1000 }); // You have 1,000 photos.
intl-messageformat 使用的是 ICU 消息语法,支持名词复数和选择语法。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。