smooth-i18n
低成本国际化(i18n)方案
功能
- CLI 脚本:
- 批量替换代码中的静态、动态文本为翻译调用 (
s18n()
)
- 根据
s18n()
调用,导出翻译资源
- 运行时:
开始
共 7 步
cd that-legacy-codebase
npm install --save smooth-i18n
git stash && git checkout -b i18n
./node_modules/.bin/s18n wrap . --write
./node_modules/.bin/s18n extract . ./locales --locales zh-CN,en --format json
{
"这句话没有翻译": null,
"表格做的真好": "nufan is cool",
"我是一个有ID的文本#some.id": "I have ID and you don't"
"%s是最棒的": "nufan is way better than %s",
}
import s18n from 'smooth-i18n'
s18n.addLocaleResource('en-US', require('./en.json'))
s18n.setLocale('en')
...other code...
开发计划
Q & A
1. 命令行工具怎么使用,有哪些参数?
see: ./node_modules/.bin/s18n --help
2. 为什么必须在 所有其他代码运行前 载入翻译资源,并指定locale?
否则某些代码中的变量可能无法更新,造成展示不正确。
例如:
const s = s18n('apple')` // s = 'apple'
s18n.addLocaleResource('zh-CN', {apple: '苹果'})
s18n.setLocale('zh-CN')
console.log(s) // s = 'apple' , 而不是期望的'苹果'
3. 有哪些场景不适用这个工具,需要其他解决方案?
- 后端返回的文本信息
- 前端使用的第三方 UI 库
- 其他可能呈现给用户的动态生成的文本
- 日期、格式、货币的展示、转换(后期可能加入这些功能的支持,当前推荐使用 JavaScript 标准:Intl.*)