[英]HTML5 Mobile app localization using javascript and PhoneGap
我正在創建一個可在所有3個移動平台(Android,iOS a和Windows Mobile 8)上運行的HTML5移動應用程序。 我正在使用javascript進行本地化( https://github.com/eligrey/l10n.js/#readme )。
該應用程序在瀏覽器上正常工作。 但是當我在移動模擬器上部署它時,本地化不起作用。
我認為問題是javascript從瀏覽器獲取語言信息,但在移動設備中我們使用PhoneGap運行HTML5。
有什么方法可以在PhoeGap中使用javascript啟用本地化。
您可以編寫自己的JavaScript來獲取本地化語言。 這是我在其他地方寫的完全相同的回復。
通常,JavaScript window.navigator.language
通常適用於iOS和更新的Androids,但早期版本的Android將其硬編碼為en
。
對於較舊的機器人,我建議從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('_', '-')
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.