I took an approach to this problem that allows others to contribute language translations for my application.
优点:
- 使用 “网络成熟的” 库
- 人群来源的翻译
- 没有本土黑客
- 使用模板
- 很容易实现HTML/JS和易于测试
- 支持语言检测
- 支持文本方向(比迪)
- 在所有所以没有原生的依赖将在Android/iOS版/ BB/WP内容十分重要工作..
- 在网页浏览器可测试
缺点:
- 你的项目需要开源和履行TranslateWiki的要求
- 如果您来自分支/合并领域,实施Gerrit的提交有点棘手。
我用模板的handlebars和提供翻译逻辑的html10n库,翻译的字符串来自社区贡献的json文件。
TranslateWiki通过众包的力量提供了实际的翻译。我执行的大部分工作都由TranslateWiki完成,WikiWiki是维基媒体基金会提供的免费开源社区服务。
把手和html10n库功能强大,为网络和广泛使用。它们被证明是这种实现非常有用的库。
没有本地代码或插件是必需的。
的index.html
<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
{
"fr":"locales/fr.json",
"en":"locales/en.json"
}
语言环境/ en.json
{
"en":{
"helloWorld":"Hello Cruel World"
}
}
语言环境/ FR。JSON
{
"fr":{
"helloWorld":"Hello Baguette World"
}
}
index.js
Handlebars.registerHelper('html10n', function(str,a){
return (html10n != undefined ? html10n.get(str) : str);
});
要语言之间进行切换打开浏览器的JavaScript控制台,输入
html10n.localize("fr");
做浏览器语言检测需要一些额外的逻辑,我使用Etherpad的实现可以实现这一点。
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.
});
就是这样,在您的Cordova应用程序中推出i18n的免费配方。
开始开发时,我一直在寻找今天同样的事情Cordova应用程序。某些手机的CPU资源有限,因此我想尽量减少JavaScript。我投票选择了模板方法 - 在客户端手机上它会轻很多。 – JustAMartin 2014-04-17 15:17:20
这个插件与语言无关,它只是返回浏览器当前的语言,但我们可以使用i18n的不同语言 – rashidnk 2015-08-28 04:31:58