i18n 想要加载一个未指定的翻译

i18n wants to load an unspecified translation

我目前正在从事 Aurelia 项目(Web 框架,如 Angular2)。 我遵循了他们 github account 上的指南,但遇到了问题。

首先,浏览器返回了这个错误:
GET http://localhost:9000/src/locale/nl/translation.json?_=1450946571510 404 (Not Found)

其次,我在我的申请中使用了两种语言:荷兰语 (nl-BE) 和法语 (fr-BE)。

我的文件夹结构如下:

src (inside root)
.. locale 
..... fr-BE 
........ translation.json 
..... nl-BE
........ translation.json

这是我的完整 main.js 文件的样子:

import 'bootstrap';
import {I18N} from 'aurelia-i18n';

export function configure(aurelia) {

    aurelia.use
        .standardConfiguration()
        .developmentLogging()
        .globalResources('converters/dateFormat')
        .plugin('components/index')
        .plugin('plugins/index')
        .plugin('aurelia-i18n', (instance) => {
            instance.setup({
                resGetPath: 'src/locale/__lng__/__ns__.json',
                lng: 'nl-BE',
                attributes: ['t', 'i18n'],
                getAsync: true,
                sendMissing: false,
                fallbackLng: 'fr-BE',
                debug: false
            });
        });
    aurelia.start().then(a => a.setRoot());
}

我正在尝试设置一个 hello world,我的视图和视图模型设置如下:

import {inject} from 'aurelia-framework';
import {I18N} from 'aurelia-i18n';

@inject(I18N)
export class EntryDetails {
    constructor(i18n){
        this.i18n = i18n;
        this.i18n.setLocale('nl-BE').then(() => console.log('test'));
    }
}

而我的观点:

<template>
    <span t="hello"></span> <span t="world"></span>
</template>

问题不在于它不起作用。问题是我收到一条错误消息,指出 locale 文件夹中缺少文件夹 nl。但是我从来没有在任何地方指定过..

这就是 i18next 解析翻译文件的方式。

The lookup order for keys is always:

nl-BE language + country 
nl language only
fallback thats defined in options.fallbackLng (en) (string or array of fallback language)

loaded resources:

locale/en/translation.json
locale/nl/translation.json
locale/nl-BE/translation.json

http://i18next.com/translate/#resolve

所以你需要有 nl/translation.json,即使它没有在配置中指定。它可以是空但有效的 json 文件,内容为 {}