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

时间:2017-12-10 18:09:30

标签: aurelia i18next aurelia-cli

我创建了一个名为Aurelia-Slickgrid的插件库,我正在寻找添加i18n来支持多个语言环境。我把它全部设置并在我自己的开发环境中工作但是一旦我将它全部捆绑在一起,用户将如何使用我创建的语言环境(来自node_modules/aurelia-slickgrid/locales)?用户是否必须复制&粘贴我创建的键/值?我只有十几个钥匙,不是那么大的交易,但我仍然宁愿直接使用它们。

我当前的设置是这样的

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

它仍然来自同一个端点。所以问题是关于如何处理多个后端端点/路径。

1 个答案:

答案 0 :(得分:1)

通常,插件的使用者也必须以某种方式捆绑他的应用程序。因此,对node_modules的任何引用绝对不是这样的,因为这些文件在访问prod应用程序时不可用,而不存在node_modules文件夹。

此方案与bootstrap and using their custom fonts (glyphicons)几乎相同。您可以将它们复制到明确定义的位置(在您的情况下为./locales)并保持结构不变。 您可以使用自定义ns放置它们,因为这正是i18next支持多个命名空间的原因。因此,您的结果示例如下:

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

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

标准翻译加载器不支持多个端点(请参阅here)。原因是用例过于具体。