我想通过检测浏览器语言本地化流星应用程序,并在主页上更改语言选项。
为此,我想我会检测浏览器语言并设置会话值,例如“current_lang”:“en-US”,并有一些帮助方法根据此会话值包含的语言环境读取文本。 所以我会有例如客户端上名为“Resources”的JS对象,包含一些数组,例如“en-US”:[res1key:res1value,res2key:res2Value]和一个帮助方法,用于通过键检索它们。
我的问题是:这是一个很好的方法来定位一个流星应用程序,或者流星已经有类似于“引擎盖下”的东西吗?我确定他们到目前为止都考虑过本地化,但我在文档中找不到任何引用它的内容。
感谢。
答案 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."
}