使用带有数组的 ngx-translate 作为插值参数
Use ngx-translate with array as interpolate parameters
我正在使用 ngx-translate 的即时方法将一些消息翻译成用户的语言。这些消息作为 JSON 传递给 ngx-translate。一些消息采用动态值:
{
"message.key": "First value is {{0}} and second value is {{1}}",
"message.key2": "Value is {{0}}"
}
为了获得带有动态插值的翻译文本,我使用了这样的即时方法
messageText = this.translateService.instant('message.key2', {0: 'Value to be interpolated'});
问题是我在字符串数组 params: string[]
中获取了这些值。所以我需要将字符串数组转换成一个看起来像 {0:params[0], 1:params[1]}
的对象
我知道我可以使用
这样的结构
myTranslationMethod(messageKey: string, params: string[]): string {
let paramsAsObject;
if (params.length === 1) {
paramsAsObject = {
0: params[0]
}
} else {
paramsAsObject = {
0: params[0],
1: params[1]
}
}
messageText = this.translateService.instant(messageKey,paramsAsObject);
return messageText;
}
但是,如果将具有三个或更多参数的消息添加到应用程序,我将需要扩展 if 构造。所以我想以通用的方式实现它,如果使用带有更多参数的消息,我不需要更改代码。
有没有办法创建独立于参数长度的 paramsAsObject 或直接通过 ngx-translate 使用数组?
感谢您的意见。
如果我理解正确的话,您基本上希望在提供 params[]
时自动构建 obj paramsAsObject
。
myTranslationMethod('', ['1', 'test', 'something']);
function myTranslationMethod(messageKey, params) {
let paramsAsObject = {};
for (let i = 0; i < params.length; i++) {
Object.assign(paramsAsObject, {
[i]: params[i]
});
}
console.log(paramsAsObject);
}
// {0: "1", 1: "test", 2: "something"}
我正在使用 ngx-translate 的即时方法将一些消息翻译成用户的语言。这些消息作为 JSON 传递给 ngx-translate。一些消息采用动态值:
{
"message.key": "First value is {{0}} and second value is {{1}}",
"message.key2": "Value is {{0}}"
}
为了获得带有动态插值的翻译文本,我使用了这样的即时方法
messageText = this.translateService.instant('message.key2', {0: 'Value to be interpolated'});
问题是我在字符串数组 params: string[]
中获取了这些值。所以我需要将字符串数组转换成一个看起来像 {0:params[0], 1:params[1]}
的对象
我知道我可以使用
myTranslationMethod(messageKey: string, params: string[]): string {
let paramsAsObject;
if (params.length === 1) {
paramsAsObject = {
0: params[0]
}
} else {
paramsAsObject = {
0: params[0],
1: params[1]
}
}
messageText = this.translateService.instant(messageKey,paramsAsObject);
return messageText;
}
但是,如果将具有三个或更多参数的消息添加到应用程序,我将需要扩展 if 构造。所以我想以通用的方式实现它,如果使用带有更多参数的消息,我不需要更改代码。
有没有办法创建独立于参数长度的 paramsAsObject 或直接通过 ngx-translate 使用数组?
感谢您的意见。
如果我理解正确的话,您基本上希望在提供 params[]
时自动构建 obj paramsAsObject
。
myTranslationMethod('', ['1', 'test', 'something']);
function myTranslationMethod(messageKey, params) {
let paramsAsObject = {};
for (let i = 0; i < params.length; i++) {
Object.assign(paramsAsObject, {
[i]: params[i]
});
}
console.log(paramsAsObject);
}
// {0: "1", 1: "test", 2: "something"}