插值变量
voerkai18n
的t
函数支持使用插值变量,用来传入一个可变内容。
插值变量有命名插值变量
和位置插值变量
。
命名插值变量
可以在t函数中使用{变量名称}
表示一个命名插值变量。
javascript
t("我姓名叫{name},我今年{age}岁",{name:"tom",age:12})
// 如果值是函数会自动调用
t("我姓名叫{name},我今年{age}岁",{name:"tom",age:()=>12})
仅当t
函数仅有两个参数且第2
个参数是{...}
类型时,启用字典插值变量,翻译时会自动进行插值。
位置插值变量
可以在t
函数中使用一个空的{}
表示一个位置插值变量。
javascript
t("我姓名叫{},我今年{}岁","tom",12)
// 如果值是函数会自动调用
t("我姓名叫{},我今年{}岁","tom",()=>12})
// 如果只有两个参数,且第2个参数是一个数组,会自动展开
t("我姓名叫{},我今年{}岁",["tom",12])
//如果第2个参数不是{}时就启用位置插值。
t("我姓名叫{name},我今年{age}岁","tom",()=>12)
插值变量格式化
voerka-i18n
支持强大的插值变量格式化机制,可以在插值变量中使用{变量名称 | 格式化器名称 | 格式化器名称(...参数) | ... }
类似管道操作符的语法,将上一个输出作为下一个输入,从而实现对变量值的转换。此机制是voerka-i18n
实现复数、货币、数字等多语言支持的基础。
我们假设定义以下格式化器(如果定义格式化器,详见后续)来进行示例。
- UpperCase:将字符转换为大写
- division:对数字按每n位一个逗号分割,支持一个可选参数分割位数,如
division(123456)===123,456
,division(123456,4)===12,3456
- mr : 自动添加一个先生称呼
javascript
// My name is TOM
t("My name is { name | UpperCase }",{name:"tom"})
// 我国2021年的GDP是¥14,722,730,697,890
t("我国2021年的GDP是¥{ gdp | division}",{gdp:14722730697890})
// 支持为格式化器提供参数,按4位一逗号分割
// 我国2021年的GDP是¥14,7227,3069,7890
t("我国2021年的GDP是¥{ gdp | division(4)}",{gdp:14722730697890})
// 支持连续使用多个格式化器
// My name is Mr.TOM
t("My name is { name | UpperCase | mr }",{name:"tom"})
每个格式化器本质上是一个(value)=>{...}
的函数,并且能将上一个格式化器的输出作为下一个格式化器的输入,格式化器具有如下特性:
无参数格式化器
使用无参数格式化器时只需传入名称即可。例如:My name is { name | UpperCase }
有参数格式化器
格式化器支持传入参数,如{ gdp | division(4)}
、{ date | format('yyyy/MM/DD')}
特别需要注意的是,格式化器的参数只能支持简单的类型的参数,如数字
、布尔型
、字符串
。
不支持数组、对象和函数参数,也不支持复杂的表达式参数。
连续使用多个格式化器
就如您预期的一样,将上一个格式化器的输出作为下一个格式化器的输入。
{data | f1 | f2 | f3(1)}
等效于 f3(f2(f1(data)),1)