如何在 Aurelia 中支持多个 i18n 端点?

How to support multiple i18n endpoint in Aurelia?

我制作了一个名为 Aurelia-Slickgrid and I'm looking at adding i18n 的插件库来支持多语言环境。我在自己的开发环境中进行了所有设置和工作,但是一旦我将所有内容捆绑在一起,用户将如何使用我创建的语言环境(来自 node_modules/aurelia-slickgrid/locales)?用户是否必须复制并粘贴我创建的 keys/values?我只有十几把钥匙,没什么大不了的,但我宁愿直接使用它们。

我目前的设置是这样的

import { I18N, TCustomAttribute } from 'aurelia-i18n';
import * as Backend from 'i18next-xhr-backend';

export function configure(aurelia: Aurelia) {
  aurelia.use.plugin(PLATFORM.moduleName('aurelia-i18n'), (instance) => {
    instance.i18next.use(Backend);

    return instance.setup({
      backend: {
        loadPath: './locales/{{lng}}.json',
      },
      lng: 'en',
      attributes: ['t', 'i18n'],
      fallbackLng: 'en',
      debug: false
    });
  });
}

我知道我可以在剧中添加 {{ns}},但我认为这对我没有帮助。问题更多,如何添加另一个端点?如果我像这样添加 ns

loadPath: './locales/{{lng}}/{{ns}}.json', // <-- XHR settings for where to get the files from

它仍然来自同一个端点。所以问题实际上是关于如何处理多个后端 endpoints/paths。

通常情况下,您插件的使用者也必须以某种方式捆绑他的应用程序。因此,对 node_modules 的任何引用绝对不是办法,因为如果没有 node_modules 文件夹,那么在访问产品应用程序时这些文件将不可用。

这个场景和差不多。您可以将它们复制到一个明确定义的位置(在您的例子中是 ./locales)并保持结构不变。 您可以使用自定义 ns 放置它们,因为这正是 i18next 支持多个名称空间的原因。所以你得到的例子是这样的:

./locales/en-US/aurelia-slickgrid.json
./locales/de-DE/aurelia-slickgrid.json
...

用户需要确保使用不同的命名空间来使用这些翻译。

标准翻译加载器不支持具有多个端点(参见 here)。原因可能是用例太具体了。