2

私の ember アプリケーションでは、さまざまな言語をサポートしています。私はこのようにしています:

これは次の一部ですindex.html

<script src="scripts/vendor/ember.js"></script>
<script src="scripts/vendor/ember-i18n.js"></script>
...
<script>window.mynamespace = {};</script>
<script src="scripts/languages/en.js"></script>
<script src="scripts/ember_application.js"></script>

私はember-i18nlanguages/es.jsで期待されるように翻訳オブジェクトを設定します:

var lang = {
    key1 : 'Translation1',
    ...
};
window.mynamespace.lang = lang;

そして今、私の Ember アプリケーションでは、次のことができます。

Ember.I18n.translations = window.mynamespace.lang;
var App = Ember.Application.createWithMixins({...});

3 つの質問があります。

  1. 多言語ページを提供するための別のアプローチはありますか? 特に の使用はあまり好きではありwindow.mynamespaceませんが、ember アプリケーションを作成する前にこれらの設定を共有する方法がわかりません。
  2. たとえば、ブラウザの言語設定scripts/languages/es.jsに基づいて(HTTP 要求に含まれる)、別の言語ファイルを提供するにはどうすればよいですか?
  3. そして、これはもっと難しいです: データベースの設定 (アプリケーションのユーザー プロファイルに属している) に応じて、どのように異なる言語ファイルを提供できますか? この設定は、HTTP リクエストに含まれる *language Preferences 設定を上書きします。
4

1 に答える 1

1

私が行っている方法は、いくつかの個別の言語ファイルを保持し、ブラウザーの言語設定を把握してから、適切なファイルをロードすることです。これが私が使用している関数です(おそらく完璧ではありませんが、期待どおりの動作をします):

function loadLanguage() {
    "use strict";
    if (window.navigator.language) {
        LocalLanguage = window.navigator.language;
    } else if (window.navigator.userLanguage) {
        LocalLanguage = window.navigator.userLanguage;
    } else {
        LocalLanguage = "en";
    }

    var fileref = document.createElement('script');
    fileref.setAttribute("type", "text/javascript");

    switch (LocalLanguage) {
    case "cs-CZ":
    case "cs":
        LocalLanguage = "cs";
        fileref.setAttribute("src", "Language/cz-CZ.js");
        document.getElementsByTagName("head")[0].appendChild(fileref);
        break;
    default:
        LocalLanguage = "";
        fileref.setAttribute("src", "Language/en-EN.js");
        document.getElementsByTagName("head")[0].appendChild(fileref);
        break;
    }
}

LocalLanguage は、使用するブラウザーに関係なく、言語設定をすばやく把握するために使用するグローバル変数です。

質問 3: データベースの設定に基づいて別のファイルを提供することに関しては、実際にはかなり単純に思えます。コードでは、使用するローカリゼーションを決定する必要があるポイントがあります。ユーザー定義のローカリゼーションがあるかどうかを確認するだけです(どこかに保存するか、最初に言語設定を「なし」またはデータベース内の何かに設定し、ユーザーがそれを変更したかどうか、それらの行に沿って何かを確認します)。ローカリゼーションでは、ブラウザの言語設定をチェックするプロセス全体をスキップして、データベースに設定された値を取得するだけです。

于 2013-08-19T07:24:16.353 に答える