首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Phonegap/Cordova国际化支持

Phonegap/Cordova国际化支持
EN

Stack Overflow用户
提问于 2012-01-16 09:34:18
回答 9查看 25.5K关注 0票数 23

我正在用Phonegap开发一个移动应用程序,我需要国际化-用不同的语言显示一个html页面。现在我明白了,这不是Phonegap的问题--我必须将web应用程序国际化。

  • 是否有任何框架支持国际化(例如jQuery移动)?
  • 是否可以使用模板方法,例如在构建过程中使用属性文件和模板并生成HTML?
  • 如果我使用波本的方法(见答案),我如何切换每个选项设置的语言?

你好,克里斯蒂安

-- 编辑--

从2.2.0开始,Phonegap就有了一个不错的全球化插件。它涵盖了许多i18n功能。检查文档globalization.md.html#Globalization

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2012-01-16 09:40:50

Phonegap只是一个框架,可以在本地应用程序中显示网页,并使用插件连接设备的硬件传感器。国际化的支持将取决于您的html/js设计。

例如,您可以使用:

代码语言:javascript
复制
/html/en/index.html
/html/fr/index.html
...

并根据用户的语言调用好的页面。

希望这能帮到你:)

票数 9
EN

Stack Overflow用户

发布于 2014-02-15 07:31:49

我对这个问题采取了一种方法,允许其他人为我的应用程序提供语言翻译。

优点:

  • 使用“网络成熟”图书馆
  • 人群来源翻译
  • 没有本地黑客
  • 使用模板
  • 非常容易实现HTML/JS,并且易于测试
  • 支持语言检测
  • 支持文本方向(BiDi)
  • 根本没有本地依赖关系,因此将在Android/iOS/BB/WP yada上工作。
  • web浏览器中的可测试性

缺点:

  • 您的项目需要开源,并满足TranslateWiki的要求
  • 如果您来自一个分支/合并世界,实现提交到Gerrit有点棘手。

我使用工具栏进行模板化和html10n库来提供翻译逻辑,翻译的字符串来自社区贡献的json文件。

TranslateWiki通过群众性的力量提供实际的翻译。我的实现中的大部分重担都是由维基媒体基金会()的免费开源社区服务TranslateWiki完成的。

车把和html10n库是强大的,为网络而建,并广泛使用。事实证明,它们对于这个实现是非常有用的库。

不需要本机代码或插件。

index.html

代码语言:javascript
复制
<head>
  <script type="text/javascript" src="js/handlebars.js"></script>
  <script type="text/javascript" src="js/html10n.js"></script>
  <link rel="localizations" type="application/l10n+json" href="locales.json">
</head>
<body>
    {{html10n "helloWorld"}}
</body>

locales.json

代码语言:javascript
复制
{
  "fr":"locales/fr.json",
  "en":"locales/en.json"
}

地区/en.json

代码语言:javascript
复制
{
  "en":{
    "helloWorld":"Hello Cruel World"
  }
}

地区/fr.json

代码语言:javascript
复制
{
  "fr":{
    "helloWorld":"Hello Baguette World"
  }
}

index.js

代码语言:javascript
复制
Handlebars.registerHelper('html10n', function(str,a){
  return (html10n != undefined ? html10n.get(str) : str);
});

若要在语言之间切换,请打开浏览器javascript控制台并键入

代码语言:javascript
复制
html10n.localize("fr");

需要一些额外的逻辑来进行浏览器语言的检测,我使用Etherpad的实现来完成这一任务。

代码语言:javascript
复制
var language = document.cookie.match(/language=((\w{2,3})(-\w+)?)/);
if(language) language = language[1];
html10n.bind('indexed', function() {
  html10n.localize([language, navigator.language, navigator.userLanguage, 'en'])
})
html10n.bind('localized', function() {
  document.documentElement.lang = html10n.getLanguage()
  document.documentElement.dir = html10n.getDirection()
  // Then I display the index page using handlebars to render a template.
});

就是这样,在你的科多瓦应用程序中推出i18n的免费食谱。

票数 11
EN

Stack Overflow用户

发布于 2012-05-31 09:57:37

我完全按照波旁的建议做了,因为这是一个小应用程序,复制不是这个问题。然而,有一些模板框架,我认为主要使用的是八字胡

我解决了这种语言的选择:

代码语言:javascript
复制
@Override
public void onCreate(final Bundle savedInstanceState)
{
    // ...
    String language = getValue("language", "de");
    if (language.equals("de")) {
        super.loadUrl("file:///android_asset/www/de/index.html", 1);
    }
    else {
        super.loadUrl("file:///android_asset/www/en/index.html", 1);
    }
}

private String getValue(final String key, final String defaultValue)
{
    SharedPreferences prefs = getSharedPreferences(
            getApplicationInfo().packageName, MODE_PRIVATE);
    return prefs.getString(key, defaultValue);
}

如您所见,我读取了SharedPreferences的值。我还创建了一个Phonegap插件,以便在用户更改语言时从JavaScript代码中设置此值。

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

https://stackoverflow.com/questions/8878002

复制
相关文章

相似问题

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