ExtJS MVC-dynamisches laden und i18n
Ich würde gerne übersetzen, mein ExtJS-Anwendung in verschiedenen Sprachen. Mein Problem ist, dass ich mit ExtJS MVC-framework, und die meisten meiner JS-Dateien heruntergeladen werden dynamisch vom framework selbst.
Die ideale Lösung (die ich gedacht) wäre eine zusätzliche option in der Ext.Loader (oder in meinem Ext.app.Anwendung), die definieren würde, die Sprache zu verwenden, und abhängig von diesem automatisch das herunterladen einer solchen Datei als "a.MyClass.fr.js" nach dem laden mein "a.MyClass.js" (was würde ein Ext.anwenden, überschreiben von mein-string-Ressourcen). Das ist wahrscheinlich nicht in der ExtJS-framework im moment.
Die alternative Lösung, die ich sehen kann, ist die Durchführung einen trick auf der server-Seite. Erste, wird ein cookie erstellt werden, auf dem client zu setzen um die Sprache. Auf der server-Seite, die ich fangen konnte alle Anfragen JS-Dateien, dann wenn ein cookie gesetzt ist (='fr' zum Beispiel), würde ich kombinieren die angeforderte JS-Datei (MyClass.js) mit seiner i18n-Freundin MyClass.fr.js dynamisch auf dem server und das Ergebnis zurückgeben. Das würde funktionieren, aber es ist wirklich schwierig, weil es impliziert, dass andere Dinge (caching,...).
Vielleicht ist der beste Weg zur Umsetzung der ersten Verhalten, das ich beschrieben in dem ExtJS framework mich...
Was denkst du? Ich bin auf der Suche für eine wirklich saubere und ordentliche Weg, es zu tun! Danke 🙂
InformationsquelleAutor TigrouMeow | 2011-08-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich vor kurzem kämpfte mit dem gleichen problem.
Finden eine saubere Art und Weise zu tun, war schon eine Herausforderung - die meisten alternativen waren entweder..
1) kopieren Sie Ihre code-Basis, die pro Ort (WTH)
2) Download der lokalisierten Dateien überschreiben jede Ihrer Komponenten (Wartung Hölle? Was über die schlechten übersetzer?)
3) Verwenden/erzeugen eine statische Datei mit den übersetzungen und verweisen (Alle Sprachen heruntergeladen werden? Zusätzliche build-Schritt, ihn zu erzeugen? Wie halten Sie Sie in Sync?)
Habe ich versucht, die beste aller Welten, und endete mit eine utility-Klasse verantwortlich für:
1) Laden der ExtJS-übersetzung Dateien (die im Grunde Außerkraftsetzungen anwenden extjs Basis-Komponenten)
2) Laden eine locale-spezifische Eigenschaft resourcebundle (mit Angabe, welche locale zu laden) vom server.
3) Prototyping-String mit translate () - Methode Abfragen-den store geladen (mit der message-bundle vom server) und gibt die übersetzung basiert auf den Wert der Zeichenfolge.
Dies ist der Kern der Dinge:
Bundle & prototyping:
Als ein Beispiel aus einer Sicht:
Bundle auf dem server (mesages_en.Eigenschaften):
DOCUMENT_LIBRARY_MENU_COPYTO_BUTTON=Datei Kopieren
etc..
Vorteile:
Nachteile:
Bisher mein Ansatz ist bisher ziemlich gut für meine Anforderungen.
Site-Belastung ist nicht spürbar langsamer und die Bündel (mit ~200 Schlüssel/Werte-pro Bündel) zu Messen, bei ~10kb beim laden.
Vielen Dank für die elegante Lösung. Wenn Ext.ux.Cache, die Nachteile können geändert Profis
InformationsquelleAutor JaySee
Gibt es derzeit keine Lösung ein, also beschloss ich, um meinen eigenen hack/addon auf die Ext.Loader. Ich habe den code auf GitHub: https://github.com/TigrouMeow/extjs-locale-loader. Es ist genau das, was ich brauchte und ich hoffe wirklich, es anderen zu helfen, wie auch!
InformationsquelleAutor TigrouMeow
Sollten Sie zuerst vervollständigen Sie Ihre Entwicklungsphase und erstellen Sie Ihr Projekt, oder verwenden Sie ext-all.js Datei I18s übersetzen der Benutzeroberfläche
InformationsquelleAutor PHPst
finden Sie unter: http://docs.sencha.com/ext-js/4-0/#!/example/locale/multi-lang.html
Die entsprechende Sprache modifier-Skript (/ext/local/ext-lang-xxx.js) geladen werden muss, nach extern geladen wird (einschließlich dynamisch geladenen Klassen). In dem Beispiel oben, ich hätte wahrscheinlich verwendet, Ext.Loader.loadScriptFile aber Sie eval heruntergeladen direkt. Die einzige andere Sache ist, dass Ihre Klassen erstellt werden müssen, die in verschiedenen Sprachen oder einfach nur die Verwendung von Variablen und verweisen Sie auf die lang-spezifische variable Datei.
könnte man auch eine variable in die Loader-Pfade:
InformationsquelleAutor Peter Hawkins