我正在使用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并且显示正确,根据文档评估类似于我期望的功能。
答案 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>