2014-10-01 103 views
3

我正在使用Phonegap Build为iOS和Android开发应用程序。如何使用PhoneGap构建获取设备语言环境或语言?

我想确定设备的区域设置(例如'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存在并显示正确,对函数进行求值,类似于我期望的基于文档的函数。

回答

2

这里的问题是变量'loc'被声明在成功或失败回调的范围之外,这当然发生在几个短暂的时刻之后。

我解决了这个由从而改变功能:

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上最伟大的事情是如何经常帮助一个解决自己愚蠢的错误。 :)

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>

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); }); 
相关问题