2017-07-26 3 views
1

Ich habe ein Problem mit i18n Etiketten.Kann ich ganze i18n Etiketten eines bestimmten Wörterbuchs bekommen

Meine Anwendung liest einige i18n Etiketten an js Frontend mit Granite.I18n.get ('') -Funktion. Das gesamte Wörterbuch wird als '/libs/cq/i18n/dict.{+locale}.json' heruntergeladen, wie in '/etc/clientlibs/foundation/shared/source/init.js' vorgeschrieben.

Jetzt gibt das de-Wörterbuch nur die benutzerdefinierten Beschriftungen zurück und ist klein. Aber andere Sprachen wie fr, die Wörterbuchdatei ist Aggregation aller/libs Wörterbuch und ist sehr groß. Das habe ich auch an einigen anderen Seiten bemerkt.

tennantco.com

en dictionary-118 KB

fr dictionary - 1.4 MB

Timewarnercable.com

en dictionary-1,1 KB

fr dictionary-1,2 MB

Thermofisher

en dictionary-3 KB

fr dictionary-695 KB

Unser Schmerzpunkt dabei ist, die Kosten diese schwere Datei von Caching auf CDN erhöht und versucht, einen Weg zu finden, CDN-Kosten reduzieren.

Ich verstehe, en-Etiketten sind der Schlüssel selbst. Aber das ExportServlet kann das Render-Benutzerwörterbuch nur für en herausfiltern. Unsere Wörterbücher sind den otb-Wörterbüchern unter/libs ähnlich. Wie kommt es dann, dass ExportServlet otb-Labels unter en-Export behandelt?

Ist dieser Fehler in allen CMS-Produkten oder spezifisch für Adobe vorhanden? Außerdem benötigen Sie eine Lösung oder eine Problemumgehung, um das benutzerdefinierte Wörterbuch nur für andere Sprachen zu erhalten.

Antwort

1

Ich habe am Ende eine benutzerdefinierte Implementierung geschrieben, da ich nicht viel Hilfe von Adobe Tickets zu diesem Thema bekommen habe.

  • OTB Wörterbuch json wird durch ResourceBundleExportServlet gemacht
  • ich eine benutzerdefinierte Schlinge Servlet erstellt, die vorbereitet werde und das Rück json ähnliche
  • Modified /etc/clientlibs/granite/utils/source/I18n.js ResourceBundleExportServlet zu Rufen Sie das benutzerdefinierte Servlet und nicht das OTB-Servlet auf.
  • Das benutzerdefinierte Servlet ist so codiert, dass nur bestimmte Datenwörterbücher und nicht alle Wörterbücher zurückgegeben werden.

Das löste mein Problem. Obwohl ich nicht als richtige Lösung überzeugt bin. Es gibt eine Möglichkeit, dies sauber zu machen.

+0

ich denke, der Pfad ist jetzt '/ libs/cq/i18n' – Akash

1

Das englische Wörterbuch ist klein, weil englische Einträge die Schlüssel und nicht die Übersetzung sind. Französisch (und andere Sprachen) sind groß, weil sie den Schlüssel in Englisch und weitere Übersetzungen enthalten. Außerdem sind viele Schlüssel nur in übersetzten Sprachen verfügbar, nur weil der Schlüssel als Standardübersetzung verwendet wird.

So für Französisch, wenn Sie Granite.I18n.get('Hello world!') verwenden, wird es die französische Übersetzung zurückgeben, wenn es es andernfalls findet, wird einfach "Hallo Welt" zurückgeben, die keine Übersetzung erfordert, wenn der Sprachkontext Englisch ist.

Da JS auf der Client-Seite ausgewertet wird, ist das Produkt so konzipiert, dass das vollständige Wörterbuch mit der OOTB-Übersetzung des Produkts selbst heruntergeladen werden kann, da die i18n-Implementierung nicht kontextsensitiv ist und unerwünschte Übersetzungen nicht ausfiltern kann.

Während bequem, ist dies eine Einschränkung und Nebeneffekt der Verwendung von Granite.I18n.get('') leider.

mögliche Abhilfen

  • Granite.I18n. * Kann mit Server-Seite i18n Libs und Rendering nur dadurch verhindert werden, um die erforderlichen Übersetzungen auf Server und als Teil-HTML dient. Diese funktioniert möglicherweise nicht für SPA.
  • Wenn Sie SPA-Frameworks wie Angular (x) verwenden, unterstützen sie die i18n-Factory-Initialisierung, die in die benutzerdefinierte Servlet-Antwort eingebunden werden kann, die ein gefiltertes i18n herunterlädt. Dies kann möglicherweise eine Menge Arbeit sein und die Größe kann immer noch ein Problem sein, wenn zu viele Begriffe übersetzt werden und das Wörterbuch groß wird.
  • Die Wörterbücher komprimieren, minimieren und zwischenspeichern. Sie können dies mit Apache-Modulen oder Ausgabefiltern tun. Dies wird die Größe und Belastung des Datenverkehrs reduzieren, aber es ist nicht garantiert, dass die Größe für das gesamte Wörterbuch klein ist, wenn die Übersetzungen wachsen.

Im Allgemeinen müssen die Seiten nur das wiedergeben, was benötigt wird. Wenn Sie JS für die späte Übersetzung verwenden, erzwingen Sie einen Wörterbuch-Download, und Granite.i18n berücksichtigt keine optimierte Download-Erfahrung.

+0

Danke für die Erklärung. Ich habe die Frage bearbeitet. Ich brauche eine Lösung oder einen Workaround, um dies zu beheben. Ich verstehe, dass dies ein Produktfehler ist, aber wie löst man das? –

Verwandte Themen