Skip to content

插值变量

voerkai18nt函数支持使用插值变量,用来传入一个可变内容。

插值变量有命名插值变量位置插值变量

命名插值变量

可以在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,456division(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)