i18next return 翻译所有语言作为对象

i18next return translation of all languages as object

在我的 Express 应用程序中,我想 return 我的前端应用程序支持的所有语言的错误描述。

有效载荷理想情况下应该是这样的:

{ errors: [messages: { de: “Passwort zu kurz”, en: “Password too short” }] }

由于我不想将依赖于语言的文本直接放在我的路由编码中,所以我考虑使用 i18n-next。但是,我不想使用 t(key) 函数取回一种语言,而是针对特定键取回相应语言 json 的所有语言。

所以理想情况下我会得到类似的东西:

{ errors: [message: functionINeed(“password_short”)] }

然后我会有 deen 两个语言文件,从中提取文本。

有人知道如何实现吗?

我认为 i18next 的 public API 中没有这样的功能。但是,您仍然可以通过以下功能实现您的最终目标:

function getTranslationsForKey(key) {
  return i18next.languages.reduce((messages, currentLang) => {
    messages[currentLang] = i18next.t(key, { lng: currentLang });
    return messages
  }, {});
}

const errors = getTranslationsForKey('password_short');

console.log(errors);

// output:
{
     en: 'Password too short',
     de: 'Passwort zu kurz'
}

它遍历每个已配置的 i18next 语言,为当前语言翻译提供的密钥,并构建一个哈希映射,其中包含该密钥的所有可能翻译。