2012-12-27 11 views
6

Es ist ein Anwendungsfall, der sehr beliebt ist, wenn internationale Erstellen von Web-Anwendung:Wie lokalisierte Vorlagen (templateUrl) in dem Routing mit AngularJS bekommen

Es gibt für jede Kultur lokalisierten Vorlagen, mit Namenskonvention wie ‚en_US/name .html ',' ru_RU/name.html 'usw.

Die Gebietseinstellung des Benutzers kann nur abgerufen werden, nachdem der Benutzer angemeldet ist (oder der Benutzer kann das Gebietsschema auswählen).

Also die beste Option, die ich gefunden habe, ist die Bereitstellung Lokalisierungswert mit DI (so könnte es überall aktualisiert werden - oder wenn ich Antwort von Backend mit Benutzerkonfiguration erhalten, oder wenn Benutzer etwas auswählen).

Routing konnte jedoch nur im Konfigurationsschritt konfiguriert werden, wo "Werte" nicht injiziert werden konnten. Sie können daher nicht die Gebietsschema-Konfiguration injizieren und TemplateUrl entsprechend diesem Wert hinzufügen.

Hier ist eine Plnkr example meine Lösung zu veranschaulichen.

Nur andere Lösung, die ich sehe, ist die private Route von Routen zu ändern (mit $ route.routes []), aber es klingt wie hässlich hacken.

Gibt es andere Lösungen, um diesen häufigen Anwendungsfall der Verwendung von lokalisierten Vorlagen zu implementieren?

Antwort

1

Es kann Möglichkeiten geben, dies zu tun, wie Sie möchten, wie templateCache überschreiben, anstatt Routing zu ändern, aber ich werde dieses Problem anders angehen.

In Ihrem Ansatz, wenn Ihre Website wächst, wäre es sehr schwierig, (mindestens) 2 Kopien von Vorlagen zu erhalten. Wenn Sie mehr Sprachen unterstützen, sind Sie viel kürzer in Schwierigkeiten.

Ich würde einen Dienst erstellen, der Wörterbuch wie Objekte für Sprachen enthält.

Dann können Sie den Dienst in den Controller injizieren und an den Bereich anschließen.

Dies sollte Ihnen helfen, zu beginnen, möchten Sie vielleicht this heraus überprüfen, wenn Sie string.format Unterstützung möchten.

+1

Tatsächlich werden alle Kopien von Vorlagen in meinem Projekt im Backend unter Verwendung des Standard-Internationalisierungsansatzes von Razor generiert. Ich habe also eine Vorlage mit Inhalt wie '

@Hello
' und XML-Dateien mit Übersetzungen. Dann haben wir hanlder geschrieben, das die Kultur mit URL ändern wird. Um die englische Übersetzung zu bekommen, müssen Sie sie per URL '/ en_US/index.html' herunterladen und zwischenspeichern. Auf diese Weise funktioniert es viel schneller (da i18n einmal auf dem Server ausgeführt wird und das Ergebnis zwischengespeichert wird) und leicht zu warten. Das einzige Problem ist mit TemplateURL ... –