私はあなたが使用していると仮定します。ember-moment
addon;あなたが言及したように既にconfig/environment.js
と
moment: {
// This will output _all_ locale scripts to assets/moment-locales
localeOutputPath: 'assets/moment-locales'
},
と設定されています。
Ember.$.getScript('/assets/moment-locales/ru.js');
必要に応じて動的にその場で瞬間ru
ロケールをロードする方法を提供します。これは、関連するロケールをアプリケーションのjavascriptファイルにインクルードする代わりに、アプリケーション内のユーザーの要求によって関連するロケールをロードすることを好みます。一般的には、ルータのフック方法(beforeModel
またはmodel
など)でこのようなローディング操作を実行することが最も適しています。
moment
から短い月の名前を取得するには、あなたは
import moment from 'moment';
を介して第一輸入ES6 moment
モジュールに必要と私の知る限り見ることができるように
moment.monthsShort()
と短い月名にアクセスします。あなたがあなたが言及したエラーを取得するようにロケールを要求している方法に問題があります。私は、実用的なコードが純粋なテキストからのより良い説明だと信じています。したがって、ルートでロケールを動的に変更する方法と、moment
から取得した短縮名を表示する方法を示すために、次のようにgit repositoryを作成しました。あなたのローカルホストで複製して実行してみてください。
このリポジトリのアプリケーションでは、application.hbs
に5つのサブルートへのリンクが含まれています。それぞれ異なる言語で月の短い名前を表示します。関連するロケールを動的にロードするトリックを行うコードは、routes/locale-route.js
ファイルのmodel
フックメソッドにあります。ロケールが既にロードされている場合(英語ではデフォルトでmoment
が含まれています)、ターゲットロケール(moment.locale(localeToLoad);
)に切り替えることで月の短縮名を返します。それ以外の場合は、サーバーへのリモート呼び出しを実行し、約束を使用して応答を待って月の名前を返します。 5つの異なる言語のすべてのルートは、この基本ルートから拡張されています。一度、ロケールがサーバーからロードされます。もう一度もう一度ロードする必要はなく、私が説明したようにlocale-route
がすでにそれを処理しています。私はそれが助けて欲しい
コメントを読んだ後。私はember-cli-mirage
を含めるようにソースコードを更新しました。ミラージュは、アプリケーションを開発、テスト、プロトタイプ作成するためのクライアント側モックサーバーです。これを依存関係として含めると、リモート呼び出し要求の代行受信が開始されます。したがって、あなたのケースでは、ミラージュは関連するロケールを要求する要求を傍受します。あなたがしなければならないことは、ロケールの蜃気楼を通り抜けることです。そのためには、あなたはとてもその蜃気楼が実行時に瞬間-ロケールを要求して干渉しないmirage/config.js
に
this.passthrough('/assets/moment-locales/**');
次を追加する必要があります。私が提供しているgitリポジトリのrelated fileを参照してください。これはあなたの問題を確実に解決します。
私の答えは明確ではありませんか?私が提供したソースコードを複製し、必要に応じてさらに質問してください。 – alptugd