5

我正在创建一个HTML5移动应用程序,它可以在所有3个移动平台(Android、iOS a、d Windows mobile 8)上运行。我正在使用javascript进行本地化(https://github.com/eligrey/l10n.js/#自述文件).

该应用程序在浏览器上运行良好。但当我在移动模拟器上部署它时,本地化无法工作。

我认为问题是javascript从浏览器中获取语言信息,但在手机中,我们使用PhoneGap运行HTML5。

我可以在PhoeGap中使用javascript启用本地化吗。

2
  • 如果您正在使用Phonegap,请确保您正在通过以下方式阅读文化全球化.getLocaleName()全球化.getPreferredLanguage()浏览器的navigator对象,根据我的经验,在android上总是设置为“en”。另外,请参阅我下面关于连字符/下划线匹配陷阱的帖子
    – 菲尔岑
    评论 2013年5月10日16:49
  • 请看这里:github.com/EffEPi/本地化 评论 2014年9月12日1:00

3个答案

重置为默认值

您可以编写自己的JavaScript来获取本地化语言。这与我在这里其他地方写的回复完全相同。

通常,JavaScript窗口导航器语言通常适用于iOS和更新的Android,但早期版本的Android将其硬编码为英语.

对于较旧的Android,我建议从UserAgent字符串中提取语言参数(是的,嗅探!),例如。

if(导航器&&navigator.userAgent&&(androidLang=导航器.userAgenc.match(/android.*\W(\W\W)-(\W\ W)\W/i)){lang=雄激素lang[1];}

在这里,lang可能还包含国家代码(例如“en-IE”),因此您可能还必须删除该代码:

if(lang.indexOf('-')!=-1) lang=lang.substring(0,lang.indexOf('-'));

这是我在最近的一个应用程序中使用的,使用HTML5和PhoneGap,它运行良好。

1
  • 在我的Android 4.4.4上窗口导航器语言产量zz-zz公司. 评论 2015年5月1日10:18
2

我刚刚通过为每个平台创建一个自定义PhoneGap插件来解决了同样的问题,该插件只返回用户的当前语言环境。

例如,在Android上,该插件仅检查:

var message=区域设置.getDefault().getLanguage();

然后在Javascript端,当您恢复了该语言名称时,例如。英语,您将使用以该语言命名的JSON对象。JSON对象的示例如下所示:

我的应用程序。语言=英语:{'Player':'Player',“玩家”:“玩家”,“Not Set”:“Not Set”},图1:{“玩家”:“佩拉亚”,“玩家”:“Pelaajat”,“未设置”:“Ei määritetty”}

Android插件很简单:

JS文件

window.localizeMe={getDefaultLocale:function(回调){cordova.exec软件(回调,函数(err){回调(“错误:”+错误代码);},“本地化Me”,“getDefaultLocale”,[]);}}

Java文件

公共类LocalizeMe扩展了CordovaPlugin{@覆盖公共布尔执行(字符串操作、JSONArray参数、CallbackContext回调上下文)抛出JSONException{if(action.equals(“getDefaultLocale”)){字符串消息=Locale.getDefault().getLanguage();this.getDefaultLocale(消息,callbackContext);返回true;}返回false;}private void getDefaultLocale(字符串消息,CallbackContext回调上下文){if(message!=空&&message.length()>0){callbackContext.success(message);}其他{callbackContext.error(“需要一个非空字符串参数。”);}}}

最后,在主JS文件中,设置应用程序的语言:

window.localizeMe.getDefaultLocale(函数(结果){if(结果!=空&&result.length>0){if(result.toLowerCase().indexOf('fi')!==-1 ) {我的应用程序。Lang=我的应用程序。语言.fi;}其他{我的应用程序。Lang=我的应用程序。语言.en;}}});
1

本地化有一个常见的陷阱,也许这就是你的问题:
许多设备以以下形式报告区域设置数据元素(_D),en_GB(_G)等…-注意强调.

l10n(或者在我的情况下,全球化.js)使用连字符将语言和国家分开,因此找不到匹配的文化,并使用默认回退。

放置一个控制台.log在您的应用程序中转储您正在获取的区域设置字符串,然后转到控制台并使用进行检查亚行日志你的设备上是否会出现这种情况。然后只需修改字符串以允许匹配(例如。locale.value.replace('_','-'))

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.