在Android上的HTML 5 App上检测和应用当前系统语言

时间:2012-05-17 20:05:36

标签: android html5 cordova backbone.js

我正在开发一个使用PhoneGap和Backbone JS的HTML5应用程序。

问题是Android设备上通过设置更改的语言没有进入我的HTML 5应用程序,虽然我可以看到它在独立的浏览器实例中被更改。

为了支持应用程序的全球化,我使用i18n插件为应用程序选择当前语言。我的应用程序适用于iOS。然而,当我在Android上尝试这个时,用户选择的语言没有得到反映例如,如果我从系统设置中选择法语作为我的语言并尝试查看window.navigator.language的值是什么,它仍然是 en < / strong>与 fr 相反,这在iOS上得到了完美体现。只是为了您的信息,如PhoneGap所建议,在Android上我打电话

`public class myApp extends DroidGap {
    private String pageURl = "somepath";
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.loadUrl(pageUrl); // this will load my app's main html page.
    }
}`

有人可以帮我弄清问题是什么吗?

由于 大O

2 个答案:

答案 0 :(得分:10)

尝试使用以下补丁从用户代理字符串中获取语言,它应该可以工作:

    var lang;
    if (navigator
            && navigator.userAgent
            && (lang = navigator.userAgent
                    .match(/android.*\W(\w\w)-(\w\w)\W/i))) {
        lang = lang[1];
    }

    if (!lang && navigator) {
        if (navigator.language) {
            lang = navigator.language;
        } else if (navigator.browserLanguage) {
            lang = navigator.browserLanguage;
        } else if (navigator.systemLanguage) {
            lang = navigator.systemLanguage;
        } else if (navigator.userLanguage) {
            lang = navigator.userLanguage;
        }
        lang = lang.substr(0, 2);
    }

    console.log("current language is", lang);

答案 1 :(得分:1)

选择的答案似乎不适用于Cordova-Crosswalk项目。实际上,Moto G2和Cordova-Crosswalk返回“99”因为userAgent是这样的:

userAgent with Cordova-Crosswalk and Moto G2

我建议使用Cordova Globalization plugin或使用Java方法创建自己的简单插件:Locale locale = Locale.getDefault();