6

国際的な Web アプリケーションを構築する際に非常に一般的な使用例があります。

「en_US/name.html」、「ru_RU/name.html」などの命名規則を使用して、カルチャごとにローカライズされたテンプレートがあります。

ユーザーのロケール設定は、ユーザーがログインした (またはユーザーがロケールを選択できる) 後にのみ取得できます。

したがって、私が見つけた最良のオプションは、DIを使用してローカリゼーション値を提供することです(したがって、どこからでも更新できます-または、ユーザー構成でバックエンドから応答を受け取ったとき、またはユーザーが何かを選択したとき)。

ただし、ルーティングは構成ステップでのみ構成でき、「値」を挿入できませんでした。そのため、ロケール構成を挿入して、その値に従って templateUrl を追加することはできません。

これは、私のソリューションを説明するPlnkr の例です。

私が見る他の唯一の解決策は、ルートのプライベート配列を変更することです($ route.routes []を使用)が、醜いハックのように聞こえます。

ローカライズされたテンプレートを使用するこの一般的なユースケースを実装するための他のソリューションはありますか?

4

1 に答える 1

1

templateCacheルーティングを変更する代わりにオーバーライドするなど、必要に応じてこれを行う方法があるかもしれませんが、この問題には別の方法でアプローチします。

あなたのアプローチでは、サイトが成長するにつれて、(少なくとも) 2 つのテンプレートのコピーを維持することは非常に困難になります。より多くの言語をサポートすれば、問題はずっと短くなります。

言語の辞書のようなオブジェクトを保持するサービスを作成します。

angular.module("myApp", [])
       .factory("Internationalization", function () {
           var dict: {
               en_US: {
                   hello: "Hello,"
               },
               fr_FR: {
                   salut: "Salut,"
               }
           };
           var get = function (locale, key) {
               return formatdict[locale][key];
           }
           return {get: get};
       });

次に、コントローラーにサービスを挿入してスコープにアタッチできます。

これは始めるのに役立つはずです。サポートが必要な場合は、これstring.formatを確認してください。

于 2013-01-20T15:13:33.937 に答える