根据语言偏好设置提供语言文件 [英] Serving a language file depending on language preference settings

查看:94
本文介绍了根据语言偏好设置提供语言文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的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 I根据 ember-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){
casecs-CZ:
casecs:
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或数据库中的某些内容,并检查用户是否已更改,任何沿着这些行),并且如果用户定义了本地化,只需跳过检查浏览器的语言设置的整个过程,只需获取数据库中设置的值。


In my ember application I am supporting different languages. I am doing it this way:

This is part of the 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>

In my languages/es.js I configure a translations object as expected by ember-i18n:

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

And now in my Ember application, I can do:

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

I have three questions:

  1. Is there another approach for serving multi-lingual pages? Specifically I do not like very much the use of window.mynamespace, but I do not know how to share those settings before creating my ember application.
  2. How can I serve a different language file, for example scripts/languages/es.js, based on the language preference settings in the browser (comming in the HTTP request)?
  3. And this one is more difficult: how could I serve a different language file, depending on a database setting (belonging to the user profile for my application)? This setting would override the *language preference settings` coming in the HTTP request.

解决方案

The way I'm doing it is to keep several separate language files, figure out the browser's language setting and then load the appropriate file. Here's the function I'm using (most likely not perfect, but it does what you'd expect):

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 is a global variable I use to quickly figure out the language setting regardless of the used browser.

Question no.3: As for serving a different file based on a setting in the database, that sounds fairly simple actually - in your code, there's a point where you have to decide which localization you wish to use. Just check if there's a user-defined localization (store it somewhere, or initially set the language preference to 'none' or something in the database and check if the user have changed that, anything along those lines) and if the user has defined a localization, just skip the entire process of checking browser for language settings and just get the value set in the database.

这篇关于根据语言偏好设置提供语言文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆