So erstellen Sie die Clientseite I18n mit mustache.js

9

Ich habe einige statische HTML-Dateien und möchte den statischen Text mit clientseitiger Modifikation durch mustache.js ändern.

es scheint, dass dies möglich war Twitter Schnurrbart Erweiterung auf GitHub: Ссылка

Aber in letzter Zeit wurde die spezifische I18n-Erweiterung entfernt oder geändert.

Ich stelle mir eine Lösung vor, bei der http:/server/static.html?lang=en mustache.js und eine Sprache JSON-Datei basierend auf dem lang param data_en.json lädt.

Dann ersetzt der Schnurrbart {{tags}} durch die gesendeten Daten.

Kann mir jemand ein Beispiel geben, wie man das macht?

    
mancereus 22.03.2011, 10:17
quelle

5 Antworten

6

Sie können Lambdas zusammen mit einer Bibliothek wie i18next oder etwas anderem verwenden.

%Vor%

Und die Daten wurden übergeben:

%Vor%

Das hat das Problem für mich gelöst

    
developingo 14.03.2014 18:01
quelle
2

Ich glaube nicht, dass Silent's Antwort das Problem wirklich löst / erklärt.

Das eigentliche Problem ist, dass Sie Mustache zweimal ausführen müssen (oder etwas anderes und dann Moustache verwenden).

Das ist am meisten i18n funktioniert wie zwei Schritte wie folgt:

  1. Rendert den i18n-Text mit den angegebenen Variablen.
  2. Rendern Sie den HTML-Code mit dem Post-gerenderten i18n-Text.

Option 1: Verwenden Sie Moustache-Partials

%Vor%

Die Daten für diese Schnurrbartvorlage könnten lauten:

%Vor%

Dann würden Sie alle Ihre i18n Vorlagen / Nachrichten als massives JSON-Objekt von Moustache-Vorlagen auf dem Server speichern:

Unten sind die "en" Übersetzungen:

%Vor%

Jetzt gibt es ein ziemlich großes Problem mit diesem Ansatz, da Moustache keine Logik hat, so dass die Handhabung von Dingen wie Pluralisierung unordentlich wird. Das andere Problem ist, dass die Leistung bei so vielen Teilladungen schlecht sein kann (vielleicht nicht).

Option 2: Lassen Sie den i18n des Servers die Arbeit machen.

Eine weitere Option besteht darin, den Server den ersten Erweiterungsdurchlauf durchführen zu lassen (Schritt 1). Java hat viele Optionen für die Erweiterung von i18n. Ich gehe davon aus, dass dies auch andere Sprachen tun.

Was diese Lösung nervt, ist, dass Sie Ihr Modell zweimal laden müssen. Einmal mit dem regulären Modell und das zweite Mal mit den erweiterten i18n Vorlagen. Dies ist eher ärgerlich, da Sie genau wissen müssen, welche Erweiterungen / Vorlagen Sie erweitern und in das Modell einfügen möchten (ansonsten müssten Sie alle i18n-Templates erweitern). Mit anderen Worten, Ihr werdet einige schöne Verletzungen von DRY bekommen.

Eine Möglichkeit, das vorherige Problem zu umgehen, ist die Vorverarbeitung der Moustache-Vorlagen.

    
Adam Gent 04.04.2012 02:14
quelle
1

Meine Antwort basiert auf den Entwicklern. Seine Antwort ist sehr gut. Ich werde nur die Möglichkeit hinzufügen, die Schnurrbart-Tags im Nachrichten-Schlüsselcode zu verwenden. Es ist wirklich notwendig, wenn Sie die Nachrichten nach dem aktuellen Zustand oder in loops

abrufen möchten

Es basiert auf einem einfachen Doppel-Rendering

%Vor%

Auf diese Weise werden die Aufführungen nicht getroffen, weil der Schnurrbart auf einer sehr kleinen Saite arbeitet.

Hier ein kleines Beispiel:

Json Daten:

%Vor%

Schnurrbart-Vorlage:

%Vor%

Nachrichten

%Vor%

Das Ergebnis ist:

%Vor%     
StackHola 16.06.2014 08:30
quelle
0

Das ist ziemlich einfach und ziemlich einfach.

Zuerst müssen Sie Code hinzufügen, um die Abfragezeichenfolge lang zu bestimmen. Dazu verwende ich das Snippet aus der Antwort .

%Vor%

Und dann benutze ich jQuery, um mit ajax und onReady state processing umzugehen:

%Vor%

Für diese Antwort versuche ich einfache JSON-Daten zu verwenden:

%Vor%

Holen Sie diesen GIST für eine vollständige HTML-Antwort.

    
ariefbayu 07.03.2012 07:33
quelle
0

Denken Sie daran, dass andere Sprachen sich signifikant von EN unterscheiden.

In FR und ES kommen Adjektive nach dem Nomen. "Grüne Bohnen" werden in FR zu "Haricots Verts" (Bohnen grün). Wenn Sie also Variablen einbinden, müssen Ihre übersetzten Vorlagen die Variablen in umgekehrter Reihenfolge haben. Zum Beispiel wird printf nicht funktionieren, weil die Argumente die Reihenfolge nicht ändern können. Aus diesem Grund verwenden Sie benannte Variablen wie in Option 1 oben und übersetzte Vorlagen in ganzen Sätzen und Absätzen anstatt Verkettungen von Phrasen.

Ihre Daten müssen auch übersetzt werden, also das Wort "Poop", das aus Daten stammt - irgendwie muss das übersetzt werden. Verschiedene Sprachen machen Pluralformen anders als Englisch, wie in Zähnen / Zähnen, Fuß / Fuß usw. EN hat auch Brillen und Hosen, die immer Plural sind. Andere Sprachen haben in ähnlicher Weise Ausnahmen und seltsame Idiome. In Großbritannien "ist" IBM auf der Messe, während IBM in den USA auf der Messe "ist". Russisch hat verschiedene Regeln für den Plural, abhängig davon, ob es sich um Menschen, Tiere, lange schmale Objekte usw. handelt. In anderen Ländern sind Tausendertrennzeichen Leerzeichen, Punkte oder Apostrophe und funktionieren in manchen Fällen nicht 3-stellig: 4 in Japan, uneinheitlich in Indien.

Mit mittelmäßiger Sprachunterstützung zufrieden sein; es ist einfach zu viel Arbeit.

Und nicht die wechselnde Sprache mit wechselndem Land verwechseln - die Schweiz, Belgien und Kanada haben auch FR-Sprecher, ganz zu schweigen von Tahiti, Haiti und Tschad. Österreich spricht DE, Aruba spricht NL und Macao spricht PT.

    
OsamaBinLogin 01.02.2013 20:26
quelle