HTML5移动应用程序本地化使用javascript和PhoneGap
HTML5 Mobile app localization using javascript and PhoneGap
我正在创建一个HTML5移动应用程序,它可以在所有3个移动平台(Android、iOS a、d Windows mobile 8)上运行。我正在使用javascript进行本地化(https://github.com/eligrey/l10n.js/#readme)。
该应用程序在浏览器上运行良好。但是当我在移动模拟器上部署它时,本地化就不起作用了。
我认为问题是javascript从浏览器中获取语言信息,但在移动设备中,我们使用PhoneGap运行HTML5。
有没有什么方法可以让我在PhoeGap中使用javascript实现本地化。
您可以编写自己的JavaScript来获取本地化语言。这和我在其他地方写的回复完全一样。
一般来说,JavaScript window.navigator.language
通常适用于iOS和更新的Android,但早期版本的Android将其硬编码为en
。
对于较旧的Android,我建议从UserAgent字符串中提取语言参数(是的,嗅探!),例如
if (navigator && navigator.userAgent && (androidLang = navigator.userAgent.match(/android.*'W('w'w)-('w'w)'W/i))) {
lang = androidLang[1];
}
在这里,lang可能还包含国家代码(例如"en-IE"),所以你可能也必须删除它:
if (lang.indexOf('-') != -1) lang = lang.substring(0, lang.indexOf('-'));
这是我在最近的一个应用程序中使用的,使用HTML5和PhoneGap,效果很好。
我刚刚解决了同样的问题,为每个平台创建了一个自定义的PhoneGap插件,只返回用户的当前区域设置。
例如,在Android上,插件只检查:
var message = Locale.getDefault().getLanguage();
然后在Javascript方面,当您获得该语言名称时,例如en
,您将使用它以该语言命名的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;
}
}
});
本地化有一个常见的陷阱,也许这就是您的问题:
许多设备以de_DE
、en_GB
等形式报告区域设置。-请注意下划线。
l10n(或者在我的例子中,globalize.js)使用连字符来分隔语言和国家/地区-因此找不到匹配的区域性,它会出现默认的回退。
在你的应用程序中放一个console.log
来转储你得到的区域设置字符串,然后转到控制台,用adb logcat
检查你的设备上是否存在这种情况。然后简单地修改字符串以允许匹配(例如locale.value.replace('_', '-')
)
- PhoneGap如何在更改window.location/document.location后保持Javascript的
- Phonegap/Cordova:如何添加Javascript多点触摸事件
- 如何用javascript,phonegap(cordova)将json对象插入sqlite表中
- Phonegap-Android 4.4-html5音频长度错误(javascript和媒体插件)
- 在Cordova/Phonegap中使用Google API javascript
- 使用phonegap在jquery-mobile中链接页面/加载javascript的最佳实践是什么
- 用javascript(Phonegap应用程序)加密文件
- 如何使用phonegap插件从android调用javascript函数
- 我可以'不要在eclipse中使用css,javascript文件和已安装的phonegap插件
- 在phonegap应用程序中打开软键盘时是否会触发Javascript事件
- PhoneGap-Javascript没有显示任何响应
- HTML5/JavaScript/PhoneGap onclick无法按预期运行
- 在 Javascript/Phonegap 上处理数据集
- JavaScript Phonegap 打开 PDF 文件
- javascript+phoneGap-如何在活动电话中检测
- Javascript / Phonegap与SQLite插入错误
- 在Javascript (PhoneGap)中使用循环向文件写入10行失败
- 通过Javascript/Phonegap将base64图像上传到Facebook图形API
- 如何允许用户从我的JavaScript / PhoneGap应用程序发布到Twitter
- 如何在jquery jquery或javascript phonegap中获得锚标记