如何使用PhoneGap构建获取设备语言环境或语言?
我正在使用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存在并显示正确,对函数进行求值,类似于我期望的基于文档的函数。
这里的问题是变量'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上最伟大的事情是如何经常帮助一个解决自己愚蠢的错误。 :)
试试这个代码
当浏览器设置为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>
虽然以前的答案是返回所需的结果,并给予一个选项,以获取当前的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); });