gpt4 book ai didi

meteor - Meteor 中的多语言

转载 作者:行者123 更新时间:2023-12-04 14:12:21 25 4
gpt4 key购买 nike

我正在用 Meteor.js 开发一个多语言应用程序
我想知道您认为最好的方法;例如这里是我现在正在做的事情(很确定可以做得更好);

首先,我将项目保存在 mongodb 中,其属性在语言根中联网:

{
en: {
name: "english name",
content: "english content"
},
it: {
name: "italian name",
content: "italian content"
},
//since images are the same for both, are not nested
images: {
mainImage: "dataURL",
mainThumb: "dataURL"
}
}

然后我使用 currentLang session 变量发布订阅:
Meteor.publish("elementsCurrentLang", function(currentLang) {

var projection = {
images: 1
};

projection[currentLang] = 1;

return Elements.find({}, projection);
});

我使用 Iron Router 的 waitOn 钩子(Hook)订阅路由:
Router.route('/eng/elements', {
waitOn: function() {
return Meteor.subscribe("municipalitiesCurrentLang", Session.get('currentLang'));
},
action: function() {
this.layout('ApplicationLayout');
this.render('elements');
}
});

现在第一个问题:我想为每种语言重用相同的模板,但我不能简单地放入模板 {{name}} 或 {{content}} 因为订阅返回嵌套在 lang root 下的属性,所以例如,英语需要使用 {{en.name}},意大利语需要使用 {{it.name}};
为了避免这种情况,我使用了一个创建新对象的模板助手;本质上它从 lang 根中删除属性:
Template.elements.helpers({
elements: function() {
var elements = Elements.find();
var currentLang = Session.get('currentLang');
var resultList = [];

elements.forEach(function(element, index) {
var element = {
name: element[currentLang].name,
content: element[currentLang].nameUrl,
images: element.images
};

resultList.push(element);
});

return resultList;
}
});

现在在模板中,我可以访问想要的属性:
 <h1>{{name}}</h1>
<p>{{content}}</p>

在继续这种方法之前,我想听取建议,因为我不知道这是否会奏效;当 Session.currentLang 发生变化时,订阅会重新加载吗?
有没有办法避免模板助手中的 forEach 循环?

最佳答案

我也在开发一个多语言网络应用程序,我建议你使用一个包,比如这个:https://atmospherejs.com/tap/i18n

您可以被动地更改语言。根据需要,为所有语言使用相同的模板!
您可以将其作为参数放入路由中。
Personnaly 我将它用作 Session 变量并在用户配置文件中!

如果您使用这个包,您还可以更轻松地导出您的应用程序或其中的一部分,因为许多开发人员将使用相同的代码。

你把所有的话都放在 json 文件中:

en.i18n.json:
{
"hello": "hello"
}
fr.i18n.json:
{
"hello": "bonjour"
}


{{_ "hello" }}

将根据语言集写 hello 或 bonjour。你可以设置它:
TAPi18n.setLanguage(getUserLanguage())
//getUserLanguage() <- my function to get the current langage in the user profile or
the one used by the navigator

关于meteor - Meteor 中的多语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27323595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com