如何在不滥用模板系统的情况下实现多种语言?

时间:2013-04-10 20:11:47

标签: internationalization meteor

我转换our Meteor site以支持两种语言,荷兰语和英语。为此,我为我们的模板(en和nl)创建了两个文件夹,并将所有内容连接到我们的模板系统,以便路由器根据您所在的站点正确提供服务。 main body template是动态的:

Template.body.content = function() {
  var lang = Session.get("lang") == "en" ? "en_" : "";
  var page = Session.get("page") || "home";

  // if the template for the current language doesn't exist,
  // fall back to Dutch version or show a 404
  var template = Template[lang + page] || Template[page] || Template[lang + "error404"];

  return template();
}

一切都很好,除了我必须编写以下内容以向两种语言公开模板值:

Template.en_foo.bar = Template.foo.bar = function() {}

有关生产中使用的此代码的示例,请参阅our client-side blog code

在完成多语言网站目标的同时避免这种方法的优雅方法是什么?

3 个答案:

答案 0 :(得分:1)

这个怎么样:

  • 进行自定义订阅并将语言参数传递给自定义发布
  • 自定义发布功能仅返回所选语言(如果内容不可用,您可以选择提供后备)
  • 只使用一个模板用于所有语言,并使用订阅中的正确语言
  • 使用i18n包作为UI字符串

答案 1 :(得分:0)

多语言应用程序位于Meteor roadmap,但计划很长时间......

同时您可以使用此atmosphere package

答案 2 :(得分:0)

我建议大力反对保留模板的翻译版本。除非您的网站很小。一开始可能看起来不那么糟糕,因为你只是复制它们并翻译内容。但从那时起,你必须在任何变化上维护这两个版本,测试两者。然后有人会建议在你的大脑中加入第三语言和繁荣,三重伤害。

我们正在使用meteor-messageformat进行翻译。它带有一个界面,允许创建翻译而无需查看模板代码。任何人都可以翻译。