如何通过PhoneGap Build获取设备区域设置或语言?

时间:2014-10-01 20:27:17

标签: android ios cordova phonegap-plugins globalization

我正在使用Phonegap Build为iOS和Android开发应用程序。

我想确定设备的区域设置(例如'en-US'),虽然我会选择当前的语言设置,甚至是我的应用程序安装的应用程序商店(这是漫长的一天) )。

按照全球化插件here的说明,我认为我已经把一切都搞定了,但似乎没有什么能用于iPhone 6或我用于测试的三星Galaxy Nexus。

我的config.xml的相关部分如下所示:

<gap:plugin name="org.apache.cordova.globalization" />

我从插件中获取语言环境的功能如下所示:

var getPhoneGapLocaleName = function() {
    var loc = 'unknown';

    if (navigator.globalization !== undefined) {
        navigator.globalization.getLocaleName(
            function (locale) {
                if (locale !== undefined) {
                        loc = locale.value;
                }
            },
            function () {
                // nothing
            }
        );
    }

    return loc;
};

注意:在两个设备上都存在navigator.globalization.getLocaleName并且显示正确,根据文档评估类似于我期望的功能。

3 个答案:

答案 0 :(得分:2)

这里的问题是变量&#39; loc&#39;被宣布在成功或失败回调的范围之外,这当然发生在几个短暂的时刻之后。

我通过更改功能来解决这个问题:

var refreshPhoneGapLocaleName = function() {
    if (navigator.globalization !== undefined) {
        navigator.globalization.getLocaleName(
            function (locale) {
                if (locale !== undefined) {
                    localStorage['pg.locale'] = locale.value;
                }
            },
            function () {
                // nothing
            }
        );
    }
};

现在在onDeviceReady中调用它,以便在应用启动时刷新值。

片刻之后(不是立即),可以使用以下函数来检索语言环境值:

var getLocale = function() {
    return localStorage['pg.locale']();
};

StackOverflow的最大优点是它可以帮助人们解决自己的愚蠢错误。 :)

答案 1 :(得分:2)

虽然之前的答案正在返回所需的结果,并提供了检索当前phonegap语言环境名称的选项,但他们没有解释主题启动器为什么他的功能不起作用,以及如何调整其功能以便工作他想要的方式(即不使用localStorage并且不在控制台中显示区域设置,而是实时给出答案)

我发布这个答案,因为我正在寻找一个快速的功能来获取设备区域设置,这篇文章是我的第一个结果。虽然开幕式给了我所需要的一切,但我想为未来的访客回答这个问题,其目的与我一样。很抱歉发布了这个旧主题,但我希望我可以帮助其他人解答。

主题启动器功能不起作用的原因如下:插件以异步方式返回语言环境。因此, loc = locale.value 行仅在函数的return语句之后执行。要解决这个问题,我们可以编写一个包装函数来简化插件输出,如下所示。请记住,我们需要异步使用此函数,因为插件结果也是异步的。

功能:

var getPhoneGapLocaleName = function ( callback ) {
    var unknownLocation = 'unknown'; //Default value
    if ( navigator.globalization !== undefined ) {
        navigator.globalization.getLocaleName(
            function ( locale ) {
                if ( locale !== undefined ) {
                    callback( locale.value );
                } else {
                    callback( unknownLocation );
                }
            },
            function () {
                callback( unknownLocation );
            }
        );
    } else {
        callback( unknownLocation );
    }
};

使用这样的功能:

getPhoneGapLocaleName( function( loc ){ console.log( 'The locale was set as follows: ' + loc ); } );

答案 2 :(得分:0)

试试此代码

当浏览器设置为en_US语言环境时,应显示一个包含文本语言的弹出对话框:英语:

navigator.globalization.getPreferredLanguage(

function (language) {alert('language: ' + language.value + '\n');},
function () {alert('Error getting language\n');}

);

完整示例

<!DOCTYPE HTML>
<html>
  <head>
    <title>getPreferredLanguage Example</title>
    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8">

    function checkLanguage() {
      navigator.globalization.getPreferredLanguage(
        function (language) {alert('language: ' + language.value + '\n');},
        function () {alert('Error getting language\n');}
      );
    }
    </script>
  </head>
  <body>
    <button onclick="checkLanguage()">Click for language</button>
  </body>
</html>