Ansatz für AngularJS-Vorlagenübersetzungen mit dem Rails-Server

8

Ich muss eine Anwendung mit mehrsprachiger Unterstützung implementieren, die ein AngularJS-Frontend und einen Ruby-on-Rails-Server verwendet. Ich suche nach einem vernünftigen Ansatz, um übersetzte Vorlagen in mehreren Sprachen zu rendern. Ich habe einen Ansatz entwickelt, über den ich gerne Rückmeldung hätte.

Setzen Sie in den Angular routes-Definitionen die Vorlageneigenschaft auf einen HTML-Partial, der nur ein ng-include mit dem vom Controller festgelegten src-Attributwert aufweist. Dieser Ansatz wird benötigt, um den Pfad zu der Vorlage, die vom Server abgerufen werden soll, dynamisch zu ändern. es wird hier beschrieben: AngularJS - Wie kann $ routeParams beim Generieren von templateUrl verwendet werden?

Die Konfiguration der angularen Route würde also so aussehen:

%Vor%

Und der Controller würde wie folgt aussehen:

%Vor%

Hier wird $routeParams.locale verwendet, um das Gebietsschema festzulegen, aber es könnte sich um eine Variable handeln, die von einer Benutzeraktion festgelegt wurde. Der Ansatz zum dynamischen Ändern des Vorlagen-URL-Pfades, um ein Gebietsschema-Präfix hinzuzufügen, erscheint ein bisschen verschachtelt, aber ich kenne keinen anderen Weg.

Fügen Sie auf der Rails-Seite in routes.rb eine Route hinzu:

%Vor%

Die Route verwendet Routen-Globbing, sodass der params[:template] -Wert ein Pfad mit mehreren Ebenen sein kann. Die Aktion TemplateController#get macht nur das partielle Ergebnis% params[:template] Der Template-Controller-Code ist etwas wie:

%Vor%

Die Rails I18n-Unterstützung für Übersetzungen wird in den erb-Templates verwendet und entsprechend dem locale-Parameter übersetzt. In der Produktion wird das Caching aktiviert. Dies würde einen zusätzlichen Übersetzungsaufwand vermeiden. Das Gebietsschema-Präfix des URL-Pfads würde dazu führen, dass pro Sprache eine Reihe von übersetzten Vorlagen zwischengespeichert wird.

Bei diesem Ansatz wird die Übersetzungsverarbeitung so weit wie möglich auf die Serverseite verlagert.

Gibt es grundsätzliche Probleme mit diesem Ansatz?

Könnte es besser gemacht werden?

    
TsenYing 23.01.2013, 00:21
quelle

2 Antworten

2

Sie sind möglicherweise an dem Winkel-Translator -Modul interessiert.

    
PascalPrecht 29.07.2013 10:17
quelle
1

Wir haben in AngularJS mit dem Ссылка Ссылка Ссылка die Internationalisierung auf der Kundenseite erreicht

Wenn Sie die Angular-Anwendung initialisieren, initialisieren Sie das i18n-Plugin, wo Sie ein Muster angeben können, um die Datei zu finden, die Beschriftungen enthält, und in der Vorlage als Beispiel für das Binden von Beschriftungen und Werten.

{{'mynamespace:labels.firstname' | i18n}}

Dabei wird "mynamespace" verwendet, um Ihre Labels logisch zu trennen und um JSON-Dateien mit den Labels zu finden. Innerhalb von JSON-Dateien können Sie ein oder mehrere JSON-Objekte mit Beschriftungen als Eigenschaften haben. Im obigen Beispiel wurde die Datei mynamespace-i18n-de-US.js aufgerufen, wenn Sie das Muster __ns-i18n-__lng__.js

angegeben haben

Gibt es einen Grund, warum die Übersetzung auf dem Server passieren muss?

Müssen Sie wirklich die gesamte Vorlage übersetzen?

    
Ketan 31.03.2013 03:24
quelle