Ich entwickle eine mehrsprachige App in Meteor.js Ich würde gerne über die beste Weise Ihrer Meinung nach, dies zu tun; Als Beispiel hier ist, was ich gerade mache (ziemlich sicher, dass das besser gemacht werden kann);Mehrsprachig in Meteor
Zuerst habe ich sparen Gegenstände in mongodb mit Eigenschaften in einer Sprache Wurzel neted:
{
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"
}
}
Dann veröffentliche ich ein Abonnement currentLang Sitzung Variable:
Meteor.publish("elementsCurrentLang", function(currentLang) {
var projection = {
images: 1
};
projection[currentLang] = 1;
return Elements.find({}, projection);
});
Ich abonniere auf der Strecke mit Eisen Router WaitOn haken:
Router.route('/eng/elements', {
waitOn: function() {
return Meteor.subscribe("municipalitiesCurrentLang", Session.get('currentLang'));
},
action: function() {
this.layout('ApplicationLayout');
this.render('elements');
}
});
Jetzt das erste Problem: Ich würde gerne reu Für jede Sprache die gleiche Vorlage verwenden, aber ich kann nicht einfach die Vorlage {{name}} oder {{content}} einfügen, da die Subskription die unter lang root geschachtelten Attribute zurückgibt, also z. B. {{ en.name}} für Englisch oder {{it.name}} für Italienisch; Um dies zu vermeiden, verwende ich einen Template-Helfer, der ein neues Objekt enthält; im Wesentlichen entfernen sie Attribute aus dem lang root:
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;
}
});
Und jetzt in der Vorlage I Attribute zugreifen kann wie gewünscht:
<h1>{{name}}</h1>
<p>{{content}}</p>
Bevor Sie mit diesem Ansatz fort ich für Anregungen hören will, da ich don Ich weiß nicht, ob das gut funktionieren wird. Wenn sich Session.currentLang ändert, wird das Abonnement neu geladen. gibt es eine Möglichkeit, die ForEach-Schleife in Vorlagenhelfern zu vermeiden?
Ja ich benutze bereits tap: i18n; die Sache ist das ist nützlich, um feste Zeichenfolgen in Templates zu übersetzen; hier versuche ich zu verstehen, wie man mehrsprachige Inhalte von mongodb bekommt und rendert –