6

i18next の実装に成功しました。これはすばらしいライブラリです。私はまだ「ベストプラクティス」を探していますが。これは私が現在持っているセットアップで、一般的に気に入っています。

var userLanguage = 'en'; // set at runtime

i18n.init({
    lng                 : userLanguage,
    shortcutFunction    : 'defaultValue',
    fallbackLng         : false,
    load                : 'unspecific',
    resGetPath          : 'locales/__lng__/__ns__.json'
});

DOM では、次のようなことを行います。

<span data-i18n="demo.myFirstExample">My first example</span>

そしてJSでは、次のようなことをします:

return i18n.t('demo.mySecondExample', 'My second example');

これは、コード自体の中で英語の翻訳を維持することを意味します。translation.jsonただし、i18next-parser を使用して、別のファイルを使用して他の言語を維持しています。

gulp.task('i18next', function()
{
    gulp.src('app/**')
        .pipe(i18next({
            locales : ['nl','de'],
            output  : '../locales'
        }))
        .pipe(gulp.dest('locales'));
});

それはすべてうまくいきます。唯一の問題は、 に設定'en'したときに、翻訳が含まれていないにもかかわらず、ファイルを取得することuserLanguageを主張することです。404 を防ぐために、現在、そのファイルで空の json オブジェクトを提供しています。i18next/locales/en/translation.json{}

空の .json ファイルをまったく読み込まないようにする方法はありますか?

4

3 に答える 3

4

i18next-parserここで著者、私がどのように使用するかを説明しi18next、うまくいけばそれが役立つことを願っています:

defaultTranslation1/コードでは使用しません。その理由は、コードに属していないからです。実際のテキストがあることの利点は理解していますが、コードがすぐに肥大化する可能性があります。難しい部分は、わかりやすい翻訳キーを定義することです。これを行うと、defaultTranslation テキストはもう必要ありません。翻訳キーは一目瞭然です。

2/ に 404 がある場合は/locales/en/translation.json、おそらくディレクトリなどにファイルがない可能性がありますpublic。gulp を使用すると、たとえば、複数の宛先を指定して実行できdest('locales').dest('public/locales')ます。

3/ カタログに翻訳がない場合は、最初に gulp タスクを実行してください。持っている defaultTranslation をカタログに入力することに関しては、正規表現で解決するのは難しい問題です。この場合を考えてみてください<div data-i18n="key">Default <div>translation</div></div>。内部の html を解析し、すべてのコンテンツを抽出できる必要があります。私はそれを使用しないので、それを実装するのに時間をかけたことはありません。

于 2014-12-16T15:16:45.227 に答える