Taro国际化结构,支持参数化,支持小程序
npm i --save taro-i18n
//locales.ts文件内容
export default function get(value: any={}): any{
return {
//en 和 zh是语言类型,可以新增语言或重命名
'en': {
'test': 'this is test text',
'testParam': `Resend in ${value.time} s`,
'testMultiParam': value.name+'go to'+value.school
},
'zh': {
'test': '这是测试文本',
'testParam': `${value.time}秒后重发`,
'testMultiParam': value.name+'去上'+value.school
}
}
}
//文件最上方引入组件
import i18n from 'taro-i18n'
//导入步骤2中你建的 locales.ts文件,我是放在utils文件夹下,具体以你实际位置为准
import locales from './utils/locales'
//在生命周期方法中初始化组件
componentWillMount(){
//1.使用系统语言的初始化方法,第一个参数是:语言类型 第二个参数是:词语仓库
// Taro.getSystemInfo().then((result)=>{
// i18n.t = new i18n(result.language,locales)
// })
//2.使用给定的语言初始化方法,第一个参数是:语言类型 第二个参数是:词语仓库
i18n.t = new i18n('zh',locales)
}
在页面或组件中引用 import i18n from 'taro-i18n'
在需要的地方 i18n.t._('test')
,显示效果 '这是测试文本'
同样需要在页面或组件中引用 import i18n from 'taro-i18n'
//locales.ts 中
'testParam': `${value.time}秒后重发`,
也可以用其他写法,作用一样
//locales.ts 中
'testParam': value.time+'秒后重发',
使用i18n.t._('testParam',{'time':'60'})
显示效果 '60秒后重发'
//locales.ts 中
'testMultiParam': value.name+'去上'+value.school,
使用i18n.t._('testMultiParam',{'name':'小明','school':'明珠小学'})
显示效果 '小明去上明珠小学'
i18n.t.setLocale('en')
//上方引入i18n工具,路径是你上方复制文件的真实路径
import T from './utils/i18n'
//在生命周期方法中初始化i18n工具
componentWillMount():void{
this.initLocale ()
}
async initLocale (): Promise<void> {
// 初始化语言
const systemInfo = await Taro.getSystemInfo()
// 默认使用系统语言
let locale = systemInfo.language
//初始化i18n工具
T.t = new T(locale)
}
3. 在locales.ts文件中添加国际化字段,en是'test'对应的英文是什么,zh是'test'对应的中文是什么,当然你也可以自定义其他语言或修改名称,在上一步中 T.t = new T(locale) 其中locale =='zh',代表接下来使用中文环境,之后也可以 T.t.setLocale('en') 来手动更改语言
'en': {
'test': `this is test text`,
},
'zh': {
'test': `这是测试文本`,
}
import i18n from './utils/i18n'
(引用你i18n.ts文件具体的位置),在需要的地方
i18n.t._('test')
,显示效果 '这是测试文本'
//locales.ts 中
'testParam': `${value.time}秒后重发`,
也可以用其他写法,作用一样
//locales.ts 中
'testParam': value.time+'秒后重发',
使用i18n.t._('testParam',{'time':'60'})
显示效果 '60秒后重发'
//locales.ts 中
'testMultiParam': value.name+'去上'+value.school,
使用i18n.t._('testMultiParam',{'name':'小明','school':'明珠小学'})
显示效果 '小明去上明珠小学'
//这行加在最上方
const path = require('path')
//这行加在const config = {}中
'alias': {
'@i18n': path.resolve(__dirname, '..', 'src/utils/i18n'),
},
declare module "@i18n";
- 遇到报错:thirdScriptError regeneratorRuntime is not defined 请访问官网 https://nervjs.github.io/taro/docs/migrate-to-2.html#%E4%BD%BF%E7%94%A8-async-await-%E6%97%B6%E5%87%BA%E7%8E%B0%E6%8A%A5%E9%94%99-function-is-not-a-function 如果还未解决,那就不要在app.ts中使用async和await了,改成通过回调来做 app文件中的initLocale方法改成
initLocale1(): void {
Taro.getSystemInfo().then((result)=>{
T.t = new T(result.language)
})
}
- 目前只在小程序上用了,其他平台的没试,欢迎大家来一起完善