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({...});

我有三个问题:

  1. 是否有另一种提供多语言页面的方法?具体来说,我不太喜欢使用window.mynamespace,但在创建我的 ember 应用程序之前我不知道如何共享这些设置。
  2. 例如scripts/languages/es.js,如何根据浏览器中的语言首选项设置(在 HTTP 请求中)提供不同的语言文件?
  3. 而这个更困难:我如何根据数据库设置(属于我的应用程序的用户配置文件)提供不同的语言文件?此设置将覆盖 HTTP 请求中的*语言首选项设置。
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 回答