根据语言首选项设置提供语言文件

Serving a language file depending on language preference settings

本文关键字:语言 文件 首选项 设置      更新时间:2023-09-26

在我的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>

在我的languages/es.js中,我按照member-i18n:的预期配置了一个翻译对象

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请求中的"语言首选项设置"

我这样做的方法是保留几个单独的语言文件,找出浏览器的语言设置,然后加载适当的文件。这是我正在使用的功能(很可能不是完美的,但它能达到你的预期):

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:至于根据数据库中的设置提供不同的文件,实际上这听起来相当简单——在代码中,您必须决定要使用哪个本地化。只需检查是否有用户定义的本地化(将其存储在某个地方,或者最初将语言首选项设置为"none"或数据库中的其他内容,然后检查用户是否更改了这些内容),如果用户定义了本地化,只需跳过检查浏览器语言设置的整个过程,只需获取数据库中设置的值。