我正在创建一个可在所有3个移动平台(Android,iOS a和Windows Mobile 8)上运行的HTML5移动应用程序.我正在使用javascript进行本地化(https://github.com/eligrey/l10n.js/#readme).
该应用程序在浏览器上正常工作.但是当我在移动模拟器上部署它时,本地化不起作用.
我认为问题是javascript从浏览器获取语言信息,但在移动设备中我们使用PhoneGap运行HTML5.
有什么方法可以在PhoeGap中使用javascript启用本地化.
解决方法:
我刚刚通过为每个只返回用户当前语言环境的平台创建自定义PhoneGap插件解决了同样的问题.
例如,在Android上,该插件仅检查:
var message = Locale.getDefault().getLanguage();
然后在Javascript方面,当你有这个语言名称时,例如.你将使用它以该语言命名的JSON对象. JSON对象的示例如下所示:
MyApp.Language = en: {
'Player' : 'Player',
'Players' : 'Players',
'Not Set' : 'Not Set'
},
fi: {
'Player' : 'Pelaaja',
'Players' : 'Pelaajat',
'Not Set' : 'Ei määritetty'
}
Android的插件很简单,因为:
JS文件
window.localizeMe = {
getDefaultLocale: function( callback ) {
cordova.exec(
callback,
function(err) {
callback( 'Error: ' + err.code );
},
"LocalizeMe",
"getDefaultLocale",
[]);
}
}
Java文件
public class LocalizeMe extends CordovaPlugin {
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if (action.equals("getDefaultLocale")) {
String message = Locale.getDefault().getLanguage();
this.getDefaultLocale(message, callbackContext);
return true;
}
return false;
}
private void getDefaultLocale(String message, CallbackContext callbackContext) {
if (message != null && message.length() > 0) {
callbackContext.success(message);
} else {
callbackContext.error("Expected one non-empty string argument.");
}
}
}
最后,在您的主JS文件中,您可以设置应用程序的语言:
window.localizeMe.getDefaultLocale( function( result ) {
if ( result != null && result.length > 0 ) {
if ( result.toLowerCase().indexOf( 'fi' ) !== -1 ) {
MyApp.Lang = MyApp.Language.fi;
} else {
MyApp.Lang = MyApp.Language.en;
}
}
});