关于语言全球化

时间:2013-05-24 03:20:10

标签: meteor

如何让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上没有发生任何事情。

关于语言全球化的任何想法?感谢。

3 个答案:

答案 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

相关问题