2012-04-13 40 views
0

如何根据sencha touch 2中的浏览器语言选择文件?我的项目下有3个文件app_de.js,app_en-US.js和app_es.js。 我发现浏览器语言和加载这样的文件:如何根据浏览器语言选择文件?

<script type="text/javascript" id="extlocale"> 

    var browserLang = window.navigator.language; // get the browsers language 
    alert(browserLang); 
    var locale = 'en'; // default locale 

    if(browserLang == 'de' || browserLang == 'de-de')  //called when the language is german 
    { 
     locale = 'de'; 
    } 
    else if(browserLang == 'en-US' || browserLang == 'en-us' || browserLang == 'en') 
    { 
     locale = 'en-US';       //called when the language is english 
    } 
    else if(browserLang == 'es' || browserLang == 'es-es') 
    { 
     locale = 'es';        //called when the language is spanish 
    } 
    else 
    { 
     console.log("Invalid language"); 
     locale = 'en-US'; 
    } 
    if(locale) { 

     Ext.fly('extlocale').set({src:'app_'+locale+'.js'}); 

    } 

</script> 

文件将独立工作,如果我有这样说:

<script type="text/javascript" src="app_en-US.js"></script> 

请让我知道如何根据加载的文件在浏览器的语言?

+0

你可以在服务器上做任何事,或者你坚持使用JavaScript吗? – 2012-04-13 04:05:12

回答

0

您需要更多跨浏览器的方式来检测浏览器语言。有没有为它的标准,但下面是一个很好的尝试:

function browserLanguage() { 
    if (!navigator) { return null; } 
    return navigator.language || navigator.browserLanguage || 
      navigator.systemLanguage || navigator.userLanguage || null; 
} 

你还需要的映射语言代码来那些你支持一种更好的方式。例如,不应该将de-AT识别并视为de?那么en-GB呢?最简单的方法是解析语言代码,这样你就可以做split('-')并且只带第一部分。如果您的文件需要是en-US.js,则需要将en映射到en-US。

我不知道Ext.fly(),但仅添加script元素相当容易,即使没有库。只需在文档中为它找到一个位置,执行document.createElement('script'),将它分配给src属性,并将其放入文档树中。

请注意,浏览器语言是浏览器自己的用户界面语言理念,根本不需要与用户的偏好相匹配。它通常甚至不受用户控制,除了他可能能够决定他使用哪个浏览器(及其版本)。

1

要根据Sencha Touch 2中的浏览器语言加载文件,最好的办法是加载一个通用文件,并根据浏览器语言加载内容。

<script type="text/javascript" src="locale.js"></script><!--locale.js was the file invoked--> 

而在locale.js中,根据浏览器的语言,加载内容。

实施例与一个登录表单:

var browserLang = window.navigator.language; // get the browsers language 
alert(browserLang); 

var Messages; 

switch (browserLang) { 

    case 'en-US': 
    Messages = { 
     username : 'EN-glish Username', 
     password : 'EN-glish Password', 
     login : 'EN-glish Login' 
    }; 
    break; 

    case 'hi': 
    Messages = { 
     username : 'HI-ndi Username', 
     password : 'HI-ndi Password', 
     login : 'HI-ndi Login' 
    }; 
    break; 

    ........ 

} 

由此看来,如果浏览器语言是en-US它显示的英文内容,如果语言是印地文它显示印地文内容。

这里我使用了一个简单的开关盒,但根据您的可用性,修改它以符合您的目标。

相关问题