使用带有数组的 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"}