本地化Meteor应用程序

时间:2014-08-09 16:24:09

标签: javascript localization meteor

我想通过检测浏览器语言本地化流星应用程序,并在主页上更改语言选项。

为此,我想我会检测浏览器语言并设置会话值,例如“current_lang”:“en-US”,并有一些帮助方法根据此会话值包含的语言环境读取文本。 所以我会有例如客户端上名为“Resources”的JS对象,包含一些数组,例如“en-US”:[res1key:res1value,res2key:res2Value]和一个帮助方法,用于通过键检索它们。

我的问题是:这是一个很好的方法来定位一个流星应用程序,或者流星已经有类似于“引擎盖下”的东西吗?我确定他们到目前为止都考虑过本地化,但我在文档中找不到任何引用它的内容。

感谢。

3 个答案:

答案 0 :(得分:1)

我会一直检查是否有任何现有软件包首先解决您的问题。在你可以尝试的气氛中似乎有不少陨石包:https://atmospherejs.com/package/jbabel-pkg?q=i18n

即使它们都没有100%解决你的问题,我通常会发现扩展这些软件包之一更容易,因为它们总是提供某些东西似乎很有用而且只是很容易分叉他们在github上。这样,如果你愿意,你也可以回馈。

答案 1 :(得分:1)

在我的流星应用程序中,我使用tap:i18n软件包,有详细记录,请参阅:https://atmospherejs.com/tap/i18n

从我在client / main.js(或客户端上的任何其他init文件)中使用的browserlanguage开始

getBrowserLanguage = function() { 
  return navigator.language || navigator.userLanguage
};

Meteor.startup(function() {
  TAPi18.setLanguage(getBrowserLanguage);
});

说你为你的语言开关创建了一个模板,如:

<template name="LanguageSwitcher">
  <ul>
    <li class="en">EN</li>
    <li class="nl">NL</li>
    <li class="fr">FR</li>
  </ul>
</template>

然后我的模板助手看起来像这样:

Template.LanguageSwitcher.Oncreated(function(){
  Session.set('language', navigator.language || navigator.userLanguage);
});

Template.LanguageSwitcher.events({
  'click .en' : function(){
    Session.set('language','en');
    TAPi18n.setLanguage('en');  
  },
  'click .nl' : function(){
    Session.set('language','nl');
    TAPi18n.setLanguage('nl');  
  },
  'click .fr' : function(){
    Session.set('language','fr');
    TAPi18n.setLanguage('fr');  
  }  
});

我正在使用额外的全局会话,因为我发现在我的馆藏中使用翻译的内容很容易。 最后要做的是创建一些带有翻译的json文件,只需在名为i18n的根文件夹中创建一个文件夹,并在此文件夹中使用以下语法创建文件:[language] .i18n.json(ex nl.i18n.json)

{
  "original string" : "translation"
}

现在您可以在模板中使用此功能,例如

<h1>{{_ "original string"}}</h1>

希望这能让您了解如何实现国际化。

答案 2 :(得分:0)

似乎这是本地化流星应用程序的一个很好的解决方案:
https://github.com/TAPevents/tap-i18n

阅读模板中的语言资源:

<template name="messages_today">
    <p>{{_ "inbox_status" "Daniel" count=18}}</p>
</template>

翻译json文件

{ 
     "inbox_status": "Hey, %s! You have received one new message today.",
     "inbox_status_plural": "Hey, %s! You have received %s new messages today." 
}