我正在使用Phonegap Build开发适用于iOS和Android的应用程序.
我想确定设备的语言环境(例如,“ en-US”),尽管我会适应当前的语言设置,甚至会安装我的应用程序所使用的应用程序商店(已经漫长了一天).
按照针对全球化插件的here的说明,我认为我没事,但似乎在我用于测试的iPhone 6或Samsung 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']();
};
*的最大优点是它多久可以帮助您解决一个自己的愚蠢错误.