如何让meteor应用程序支持多种语言?例如:中文,英文。
首先,我尝试使用Handlebars.registerHelper和Session,但我失败了。
test.js代码:
Handlebars.registerHelper('language',function(arg){ var nalization = Session.get('nalization'); console.log(nalization); var language = Session.get("language")[nalization]; if (!language){ console.log("nalization"+nalization+" is undefined"); return ""; } console.log(arg); return language[arg] ? language[arg] : "undefined"; }); Template.hello.created = function(){ Session.set('nalization','cn'); } Deps.autorun(function (c) { Session.set("language",{ cn : { hello: "你好", language: "Language" }, en : { hello: "Hello", language: "语言" } }); c.stop(); }); Template.hello.events = { "click #language_cn":function(){ Session.get("nalization") !== "cn" ? Session.set("nalization","cn") : 1=1; }, "click #language_en":function(){ Session.set("nalization","en"); console.log(); } }
test.html代码:
<body>
{{> hello}}
</body>
<template name="hello">
<h1>{{#language "hello"}}{{/language}}</h1>
<label>{{#language "language"}}{{/language}}</label>
<button id="language_cn">中文</button>
<button id="language_en">English</button>
</template>
通过点击事件更改了Seesion中的'nalization'值,但是registerHeloer中的值没有变化。在html上没有发生任何事情。
关于语言全球化的任何想法?感谢。
答案 0 :(得分:1)
请查看此页面上的最后一段:https://github.com/raix/Meteor-handlebar-helpers
mrt add handlebar-helpers
Handlebars-helper包中有getText
个助手。您可以在此文件末尾看到源代码:https://github.com/raix/Meteor-handlebar-helpers/blob/master/helpers.operators.js
关于您的代码,我不会使用会话来存储语言文件/资源。会话应主要用于创建反应数据。另外,我并没有真正解释为什么要使用这个Deps.autorun
。
答案 1 :(得分:0)
Language = new Meteor.Collection();
session.setDeafault("language","EN_US");
Deps.autorun(function(c){
var languages = [
{
name:"EN_US",
value:{
username:"username",
password:"password"
}
},
{
name:"ZH_CN",
value:{
username:"yonghu",
password:"mima"
}
}
];
if(Language.find({}).fetch().length)
Language.remove({});
for(index in languages){
Language.insert(languages[index]);
}
c.stop();
});
Handlebars.helpers('language',function(){
return Language.findOne({name:Session.get("language")}).value;
});
/**
Change language by click events
for example:
"click #chooseLanguage":function(){
Session.set("language","ZH_CN");
}
in the html:
<label> {{language.username}}</label>
<label> {{language.password}}</label>
*/
答案 2 :(得分:0)
包http://messageformat.meteor.com/docs#features怎么样?
$ mrt add messageformat
它的特点是:
Reactive(字符串会在变量或语言时自行更新 更改)支持MessageFormat selectformat(例如性别),复数 和偏移扩展完全翻译Web UI,无需重新部署 您的应用程序作为新翻译到达语言数据可以发送 初始页面加载,或在需要时按需(反应就绪() 方法是为良好的UI提供的)。 示例如下:http://messageformat.meteor.com/examples