首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用javascript和PhoneGap的HTML5移动应用本地化

使用javascript和PhoneGap的HTML5移动应用本地化
EN

Stack Overflow用户
提问于 2013-02-14 16:27:11
回答 3查看 10.8K关注 0票数 5

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

这款应用在浏览器上运行良好。但是当我在移动模拟器上部署它时,本地化就不起作用了。

我认为问题在于javascript从浏览器获取语言信息,但在移动设备中我们使用PhoneGap运行HTML5。

有没有办法在PhoeGap中使用javascript启用本地化?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-14 16:42:18

我刚刚为每个平台创建了一个定制的PhoneGap插件,只返回用户的当前语言环境,从而解决了类似的问题。

例如,在Android上,插件只检查:

var message = Locale.getDefault().getLanguage();

然后在Javascript端,当你拿回那个语言名称时,例如。JSON,您将使用它以该语言命名的en对象。JSON对象的示例如下所示:

代码语言:javascript
运行
复制
MyApp.Language = en: {
    'Player'  : 'Player',
    'Players' : 'Players',
    'Not Set' : 'Not Set'
},
fi: {
    'Player'  : 'Pelaaja',
    'Players' : 'Pelaajat',
    'Not Set' : 'Ei määritetty'
}

Android的插件很简单:

JS文件

代码语言:javascript
运行
复制
window.localizeMe = {
    getDefaultLocale: function( callback ) {
        cordova.exec(
            callback,
            function(err) {
                callback( 'Error: ' + err.code );
            },
            "LocalizeMe",
            "getDefaultLocale",
            []);
    }
}

Java文件

代码语言:javascript
运行
复制
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文件中设置应用程序的语言:

代码语言:javascript
运行
复制
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;
        }
    }
});
票数 2
EN

Stack Overflow用户

发布于 2013-02-14 16:33:49

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

一般来说,JavaScript window.navigator.language通常适用于iOS和较新的安卓系统,但安卓的早期版本将其硬编码为en

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

代码语言:javascript
运行
复制
if (navigator && navigator.userAgent && (androidLang = navigator.userAgent.match(/android.*\W(\w\w)-(\w\w)\W/i))) {
   lang = androidLang[1];
}

在这里,lang可能还包含国家/地区代码(例如'en-IE'),因此您可能还需要删除该代码:

代码语言:javascript
运行
复制
if (lang.indexOf('-') != -1) lang = lang.substring(0, lang.indexOf('-'));

这是我在最近的一个应用程序中使用的,使用的是HTML5和PhoneGap,它工作得很好。

票数 3
EN

Stack Overflow用户

发布于 2013-04-15 05:16:56

本地化有一个常见的陷阱,也许这就是你的问题:

许多设备以de_DEen_GB等形式报告区域设置。-注意下划线

l10n (或者在我的例子中是globalize.js)使用连字符来分隔语言和国家-因此找不到匹配的区域性,并使用默认的后备。

在你的应用程序中添加一个console.log来转储你正在获取的区域设置字符串,然后转到控制台并与adb logcat一起检查在你的设备上是否存在这种情况。然后只需修改字符串以允许匹配(例如locale.value.replace('_', '-') )

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14870587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档