Ich bin Mitglied eines Teams mit mehr als 20 Entwicklern. Jeder Entwickler arbeitet an einem separaten Modul (ungefähr 10 Module). In jedem Modul haben wir möglicherweise mindestens 50 CRUD-Formulare, was bedeutet, dass wir derzeit fast 500 Schaltflächen zum Hinzufügen , Speichern von Schaltflächen , Bearbeiten von Schaltflächen usw. haben.
Da wir unsere Anwendung jedoch globalisieren möchten, müssen wir in der Lage sein, Texte in unserer Anwendung zu übersetzen. Zum Beispiel, überall, das Wort Add sollte sich ajouter für Französisch - Nutzer.
Was wir bisher getan haben, ist, dass wir für jede Ansicht in der Benutzeroberfläche oder in der Präsentationsebene ein Wörterbuch mit Schlüssel / Wert-Übersetzungspaaren haben. Während des Renderns der Ansicht übersetzen wir die erforderlichen Texte und Zeichenfolgen mit diesem Wörterbuch. Bei diesem Ansatz haben wir jedoch 500 Wörterbücher in der Nähe von 500 hinzugefügt . Dies bedeutet, dass wir gegen das DRY-Prinzip verstoßen haben.
Wenn wir andererseits allgemeine Zeichenfolgen zentralisieren, z. B. Add an einer Stelle platzieren, und Entwickler bitten, sie überall zu verwenden, tritt das Problem auf, nicht sicher zu sein, ob eine Zeichenfolge bereits im zentralisierten Wörterbuch definiert ist oder nicht.
Eine andere Möglichkeit besteht darin, kein Übersetzungswörterbuch zu haben und Online-Übersetzungsdienste wie Google Translate, Bing Translator usw. zu verwenden.
Ein weiteres Problem, auf das wir gestoßen sind, ist, dass einige Entwickler, die unter dem Stress stehen, das Projekt pünktlich zu liefern, sich nicht an die Übersetzungsschlüssel erinnern können . Für den Text der Schaltfläche "Hinzufügen" hat beispielsweise ein Entwickler " Hinzufügen" verwendet , während ein anderer Entwickler " Neu" usw. verwendet hat.
Was ist die beste Vorgehensweise oder bekannteste Methode zur Globalisierung und Lokalisierung von Zeichenfolgenressourcen einer Anwendung?
Antworten:
Soweit ich weiß, gibt es eine gute Bibliothek
localeplanet
für Lokalisierung und Internationalisierung in JavaScript. Darüber hinaus denke ich, dass es nativ ist und keine Abhängigkeiten zu anderen Bibliotheken (z. B. jQuery) hat.Hier ist die Website der Bibliothek: http://www.localeplanet.com/
Schauen Sie sich auch diesen Artikel von Mozilla an. Dort finden Sie sehr gute Methoden und Algorithmen für die clientseitige Übersetzung: http://blog.mozilla.org/webdev/2011/10/06/i18njs-internationalize-your-javascript-with- ein wenig Hilfe von json und dem Server /
Allen diesen Artikeln / Bibliotheken ist gemeinsam, dass sie eine
i18n
Klasse und eineget
Methode (in gewisser Weise auch einen kleineren Funktionsnamen wie_
) definieren, um diekey
in die zu rufen / zu konvertierenvalue
. In meiner Erklärung derkey
Mittel, die Sie übersetzen möchten, und dervalue
Mittel, die die Zeichenfolge übersetzt hat.Dann benötigen Sie nur noch ein JSON-Dokument zum Speichern von
key
's undvalue
' s.Beispielsweise:
Und hier der JSON:
Ich glaube, dass die Verwendung aktueller gängiger Bibliothekslösungen ein guter Ansatz ist.
quelle
Ich glaube, dass es in serverseitigen Sprachen wie ASP.Net/C# bereits viele Lösungen für dieses Problem gibt.
Ich habe einige der Hauptaspekte des Problems skizziert
Problem : Wir müssen nur Daten für die gewünschte Sprache laden
Lösung : Zu diesem Zweck speichern wir Daten für jede Sprache in separaten Dateien
Ex. res.de.js, res.fr.js, res.en.js, res.js (für Standardsprache)
Problem: Ressourcendateien für jede Seite sollten getrennt werden, damit wir nur die Daten erhalten, die wir benötigen
Lösung : Wir können einige bereits vorhandene Tools wie https://github.com/rgrove/lazyload verwenden
Problem: Wir benötigen eine Schlüssel / Wert-Paar-Struktur, um unsere Daten zu speichern
Lösung : Ich schlage ein Javascript-Objekt anstelle von String / String Air vor. Wir können von der Intelligenz einer IDE profitieren
Problem: Allgemeine Mitglieder sollten in einer öffentlichen Datei gespeichert sein und alle Seiten sollten darauf zugreifen
Lösung : Zu diesem Zweck erstelle ich einen Ordner im Stammverzeichnis der Webanwendung mit dem Namen Global_Resources und einen Ordner zum Speichern der globalen Datei für jeden Unterordner, den wir als "Local_Resources" bezeichnet haben.
Problem: Jedes Mitglied von Subsystemen / Unterordnern / Modulen sollte die Global_Resources-Mitglieder in ihrem Bereich überschreiben
Lösung : Ich habe für jede eine Datei in Betracht gezogen
Anwendungsstruktur
Der entsprechende Code für die Dateien:
Global_Resources / default.js
Global_Resources / default.fr.js
Die Ressourcendatei für die gewünschte Sprache sollte auf die unter Global_Resource ausgewählte Seite geladen werden. Dies sollte die erste Datei sein, die auf allen Seiten geladen wird.
UserManagementSystem / Local_Resources / default.js
UserManagementSystem / Local_Resources / default.fr.js
UserManagementSystem / Local_Resources / createUser.js
UserManagementSystem / Local_Resources / createUser.fr.js
manager.js Datei (diese Datei sollte zuletzt geladen werden)
Ich hoffe es hilft :)
quelle
"Create" : {"message": "Create", "description": "text on the button that opens the editor with a blank Foo"}
zum Lokalisieren von Chrome-Erweiterungen . Oder erstellen Sie eine separate Datei mit diesen Kommentaren.jQuery.i18n ist ein leichtes jQuery-Plugin, mit dem Sie die Internationalisierung Ihrer Webseiten ermöglichen können. Sie können benutzerdefinierte Ressourcenzeichenfolgen in ".properties" -Dateien packen, genau wie in Java-Ressourcenpaketen. Es lädt und analysiert Ressourcenpakete (.properties) basierend auf der angegebenen Sprache oder der vom Browser gemeldeten Sprache.
Weitere Informationen hierzu finden Sie unter So internationalisieren Sie Ihre Seiten mit JQuery?
quelle