Frage

Wie haben Sie Internationalisierung (i18n) in konkreten Projekten umgesetzt, an denen Sie gearbeitet haben?

Nachdem ich den berühmten Beitrag von Joel gelesen hatte, interessierte ich mich dafür, Software kulturübergreifend zu gestalten: Das absolute Minimum, das jeder Softwareentwickler unbedingt über Unicode und Zeichensätze wissen muss (keine Ausreden!).Ich habe dies jedoch noch nicht in einem echten Projekt nutzen können, abgesehen davon, dass ich, wo möglich, Unicode-Strings verwendet habe.Aber alle Ihre Strings in Unicode umzuwandeln und sicherzustellen, dass Sie verstehen, in welcher Codierung sich alles befindet, mit dem Sie arbeiten, ist nur die Spitze des i18n-Eisbergs.

Alles, woran ich bisher gearbeitet habe, war für die Verwendung durch eine kontrollierte Gruppe US-amerikanischer Englisch sprechender Leute bestimmt, oder wir hatten einfach keine Zeit, an i18n zu arbeiten, bevor wir das Projekt live brachten.Deshalb suche ich nach Tipps oder Kriegsgeschichten, wie man Software in realen Projekten stärker lokalisieren kann.

Keine korrekte Lösung

Andere Tipps

Es ist schon eine Weile her, daher erhebt dies keinen Anspruch auf Vollständigkeit.

Zeichensätze

Unicode ist großartig, aber man kommt nicht damit durch, andere Zeichensätze zu ignorieren.Der Standardzeichensatz unter Windows XP (Englisch) ist Cp1252.Im Web wissen Sie nicht, was ein Browser Ihnen senden wird (obwohl Ihr Container das meiste davon hoffentlich verarbeiten kann).Und wundern Sie sich nicht, wenn in der von Ihnen verwendeten Implementierung Fehler auftreten.Zeichensätze können interessante Wechselwirkungen mit Dateinamen haben, wenn sie zwischen Computern verschoben werden.

Strings übersetzen

Übersetzer sind im Allgemeinen keine Programmierer.Wenn Sie eine Quelldatei an einen Übersetzer senden, wird diese beschädigt.Zeichenfolgen sollten in Ressourcendateien extrahiert werden (z. B.Eigenschaftendateien in Java oder Ressourcen-DLLs in Visual C++).Übersetzer sollten Dateien erhalten, die schwer zu knacken sind, und Werkzeuge, die es ihnen nicht erlauben, sie zu knacken.

Übersetzer wissen nicht, woher Zeichenfolgen in einem Produkt kommen.Es ist schwierig, eine Zeichenfolge ohne Kontext zu übersetzen.Wenn Sie keine Anleitung geben, leidet die Qualität der Übersetzung.

Apropos Kontext: Es kann sein, dass die gleiche Zeichenfolge „foo“ mehrmals auftaucht und Sie denken, dass es effizienter wäre, wenn alle Instanzen in der Benutzeroberfläche auf dieselbe Ressource verweisen würden.Das ist eine schlechte Idee.In einigen Sprachen können Wörter sehr kontextabhängig sein.

Das Übersetzen von Zeichenfolgen kostet Geld.Wenn Sie eine neue Version eines Produkts veröffentlichen, ist es sinnvoll, die alten Versionen wiederherzustellen.Verfügen Sie über Tools zum Wiederherstellen von Zeichenfolgen aus Ihren alten Ressourcendateien.

Die Verkettung von Zeichenfolgen und die manuelle Manipulation von Zeichenfolgen sollten minimiert werden.Nutzen Sie ggf. die Formatierungsfunktionen.

Übersetzer müssen in der Lage sein, Hotkeys zu ändern. Strg+P ist auf Englisch gedruckt;die Deutschen nutzen Strg+D.

Wenn Sie einen Übersetzungsprozess haben, bei dem jederzeit jemand Zeichenfolgen manuell ausschneiden und einfügen muss, ist das ein Problem.

Datum, Uhrzeit, Kalender, Währung, Zahlenformate, Zeitzonen

Diese können alle von Land zu Land variieren.Zur Angabe von Dezimalstellen kann ein Komma verwendet werden.Die Zeiten können im 24-Stunden-Format angegeben werden.Nicht jeder verwendet den Gregorianischen Kalender.Sie müssen auch eindeutig sein.Wenn Sie darauf achten, auf Ihrer Website Datumsangaben als MM/TT/JJJJ für die USA und TT/MM/JJJJ für das Vereinigte Königreich anzuzeigen, sind die Daten nicht eindeutig, es sei denn, der Benutzer weiß, dass Sie es getan haben.

Vor allem Währung

Die in den Klassenbibliotheken bereitgestellten Locale-Funktionen geben Ihnen das lokale Währungssymbol, aber Sie können nicht einfach ein Pfund- (Sterling) oder Euro-Symbol vor einen Wert setzen, der einen Preis in Dollar angibt.

Benutzeroberflächen

Das Layout sollte dynamisch sein.Es ist nicht nur wahrscheinlich, dass sich die Länge von Zeichenfolgen bei der Übersetzung verdoppelt, auch die gesamte Benutzeroberfläche muss möglicherweise invertiert werden (Hebräisch;Arabisch), sodass die Steuerung von rechts nach links verläuft.Und das ist, bevor wir nach Asien kommen.

Testen vor der Übersetzung

  • Verwenden Sie die statische Analyse Ihres Codes, um Probleme zu lokalisieren.Nutzen Sie zumindest die in Ihrer IDE integrierten Tools.(Eclipse-Benutzer können zu Fenster > Einstellungen > Java > Compiler > Fehler/Warnungen gehen und nach nicht externalisierten Zeichenfolgen suchen.)
  • Rauchtest durch Simulation der Übersetzung.Es ist nicht schwierig, eine Ressourcendatei zu analysieren und Zeichenfolgen durch eine pseudoübersetzte Version zu ersetzen, die die Länge verdoppelt und ungewöhnliche Zeichen einfügt.Sie müssen keine Sprache beherrschen, um ein fremdes Betriebssystem zu verwenden.Moderne Systeme sollten es Ihnen ermöglichen, sich als ausländischer Benutzer mit übersetzten Zeichenfolgen und fremdem Gebietsschema anzumelden.Wenn Sie mit Ihrem Betriebssystem vertraut sind, können Sie herausfinden, was was tut, ohne ein einziges Wort der Sprache zu kennen.
  • Tastaturbelegungen und Zeichensatzreferenzen sind sehr nützlich.
  • Hier wäre eine Virtualisierung sehr sinnvoll.

Nichttechnische Probleme

Manchmal muss man auf kulturelle Unterschiede achten (es kann zu Beleidigungen oder Unverständnis führen).Ein Fehler, den Sie häufig sehen, ist die Verwendung von Flaggen als visueller Hinweis auf die Auswahl einer Website-Sprache oder -Geografie.Sofern Sie nicht möchten, dass Ihre Software Partei in der globalen Politik erklärt, ist das eine schlechte Idee.Wenn Sie Franzose wären und die Möglichkeit hätten, Englisch mit St.Georges Flagge (die Flagge Englands ist ein rotes Kreuz auf einem weißen Feld), könnte dies bei vielen Englischsprachigen zu Verwirrung führen – gehen Sie davon aus, dass ähnliche Probleme bei fremden Sprachen und Ländern auftreten werden.Symbole müssen auf ihre kulturelle Relevanz überprüft werden.Was bedeutet ein Daumen hoch oder ein grünes Häkchen?Die Sprache sollte relativ neutral sein – die Ansprache von Benutzern auf eine bestimmte Art kann in einer Region akzeptabel sein, in einer anderen jedoch als unhöflich angesehen werden.

Ressourcen

Für C++- und Java-Programmierer ist die ICU-Website möglicherweise hilfreich: http://www.icu-project.org/

Einige lustige Dinge:

  1. Sie verfügen über eine PHP- und MySQL-Anwendung, die gut mit Deutsch und Französisch funktioniert, jetzt aber Russisch und Chinesisch unterstützen muss.Ich denke, ich verschiebe das auf .net, da die Unicode-Unterstützung von PHP meiner Meinung nach nicht wirklich gut ist.Klar, das Jonglieren mit utf8_de/encode oder den mbstring-Funktionen macht Spaß.Fast so lustig wie der nächtliche Besuch von Freddy Krüger ...

  2. Ich habe erkannt, dass einige Sprachen VIEL ausführlicher sind als andere.Deutsch ist normalerweise VIEL ausführlicher als Englisch, und zu sehen, wie die deutsche Version die Benutzeroberfläche zerstört, weil zu wenig Platz zugewiesen wurde, hat keinen Spaß gemacht.Einige Produkte wurden für ihre kreativen Wege, um das umzuarbeiten, mit Oblivions "Schw.tr.d.le.en.w." von Oblivion. Denkwürdig sein :-)

  3. Mit Datumsformaten herumspielen, woohoo!Ja, es gibt tatsächlich Menschen auf der Welt, die Datumsformate verwenden, bei denen der Tag in der Mitte steht.Sooooo viel Spaß beim Versuch herauszufinden, was der 02.07.2008 bedeuten soll, nur weil einige Benutzer vielleicht glauben, es könnte der 2. Juli sein ...Aber andererseits glauben Sie vielleicht das Gleiche über Benutzer, die den Monat in die Mitte setzen :-P, vor allem, weil auf Englisch der 2. Juli viel besser klingt als der 2. Juli, was auf andere nicht unbedingt zutrifft Sprachen (d. h.auf Deutsch würde man nie 2. Juli sagen, sondern immer Zweiter Juli).Ich verwende wann immer möglich den 07.02.2008.Es ist klar, dass es sich um den 7. Februar handelt, und es wird richtig sortiert, aber TT/MM vs.MM/TT kann ein wirklich kniffliges Problem sein.

  4. Noch eine lustige Sache, Zahlenformate!10.000,50 vs. 10.000,50 vs.10 000,50 vs.10'000,50...Das ist derzeit mein größter Albtraum: Ich muss eine multikulturelle Umgebung unterstützen, habe aber keine Möglichkeit, zuverlässig zu wissen, welches Zahlenformat der Benutzer verwenden wird.

  5. Formell oder informell.In manchen Sprachen gibt es zwei Möglichkeiten, Menschen anzusprechen: eine formelle und eine informellere.Auf Englisch sagt man einfach „You“, aber auf Deutsch muss man sich zwischen dem formellen „Sie“ und dem informellen „Du“ entscheiden, dasselbe gilt für das französische Tu/Vous.Normalerweise ist es sicherer, den formellen Weg zu wählen, aber das wird leicht übersehen.

  6. Kalender.In Europa ist der erste Tag der Woche der Montag, während es in den USA der Sonntag ist.Kalender-Widgets sind nett.Einem europäischen Benutzer einen Kalender mit Sonntag links und Samstag rechts anzuzeigen, ist nicht so schön, sondern verwirrt ihn.

Ich habe für meinen früheren Arbeitgeber an einem Projekt gearbeitet, das .NET verwendete, und wir verwendeten ein integriertes .resx-Format.Wir hatten im Grunde eine Datei, die alle Übersetzungen in der .resx-Datei enthielt, und dann mehrere Dateien mit unterschiedlichen Übersetzungen.Dies hat zur Folge, dass Sie sehr sorgfältig darauf achten müssen, dass alle in der Anwendung sichtbaren Zeichenfolgen in der .resx-Datei gespeichert werden, und dass Sie bei jeder Änderung alle von Ihnen unterstützten Sprachen aktualisieren müssen.

Wenn Sie faul werden und die für die Übersetzungen zuständigen Personen nicht benachrichtigen oder Zeichenfolgen einbetten, ohne Ihr Lokalisierungssystem zu durchlaufen, wird es ein Albtraum, das Problem später zu beheben.Wenn die Lokalisierung erst nachträglich erfolgt, wird es sehr schwierig sein, sie umzusetzen.Fazit: Wenn Sie nicht alle sichtbaren Zeichenfolgen extern an einem Standardort gespeichert haben, wird es sehr schwierig sein, alles zu finden, was lokalisiert werden muss.

Noch ein Hinweis: Vermeiden Sie unbedingt die direkte Verkettung sichtbarer Zeichenfolgen, z

String message = "The " + item + " is on sale!";

Stattdessen müssen Sie so etwas wie verwenden

String message = String.Format("The {0} is on sale!", item);

Der Grund dafür ist, dass verschiedene Sprachen die Wörter oft unterschiedlich anordnen und die direkte Verkettung von Zeichenfolgen einen neuen Build zur Behebung erfordert. Wenn Sie jedoch einen Mechanismus zum Ersetzen von Zeichenfolgen wie oben verwendet haben, können Sie Ihre .resx-Datei (oder eine andere Lokalisierung) ändern Dateien, die Sie verwenden) für die spezifische Sprache, die die Wörter neu anordnen muss.

Ich habe gerade einem zugehört Podcast von Scott Hanselman Heute Morgen spricht er über Internationalisierung, insbesondere über die wirklich kniffligen Dinge wie Türkisch (mit seinen vier i) und Thailändisch.Auch Jeff Atwood hatte einen Post:

Denken Sie neben all den vorherigen Tipps daran, dass es bei i18n nicht nur darum geht, Wörter durch ihre Entsprechung in anderen Sprachen zu ersetzen, insbesondere bei Alphabeten nicht-lateinischer Sprachen (Koreanisch, Arabisch), die von rechts nach links geschrieben werden, sodass die gesamte Benutzeroberfläche angepasst werden muss

  • Gegenstand 1
  • Punkt 2
  • Punkt 3

müsste sein

arabischer Text 1 -

arabischer Text 2 -

arabischer Text 3 -

(Umgekehrte Aufzählungsliste scheint nicht zu funktionieren :P)

Dies kann ein Albtraum für die Benutzeroberfläche sein, wenn Ihr System Änderungen automatisch anwenden muss, sobald der Benutzer die verwendete Sprache ändert.

Eine weitere sehr schwierige Sache besteht darin, verschiedene Sprachen zu testen, nicht nur auf die Richtigkeit von Wörtern, sondern da Sprachen wie Koreanisch normalerweise eine größere Schriftart für ihre Zeichen haben, kann dies zu sprachspezifischen Fehlern führen (z. B. dass der Text „SPEICHERN“ auf einer Schaltfläche größer ist als die Schaltfläche selbst für einige Sprachen).

Eines der lustigsten Dinge, die es zu entdecken gibt:Kursivschrift und Fettdruck funktionieren nicht mit CJK-Zeichen (Chinesisch/Japanisch/Koreanisch).Sie werden einfach unleserlich.(Okay, ich konnte sie vorher auch nicht wirklich lesen, aber vor allem Fettdruck erzeugt nur Tintenkleckse)

Ich denke, jeder, der in der Internationalisierung arbeitet, sollte mit dem Common Locale Data Repository vertraut sein, das mittlerweile ein Unterprojekt von Unicode ist:

Gemeinsames Gebietsschema-Daten-Repository

Diese Leute arbeiten hart daran, eine Standardressource für alle Arten von i18n-Problemen zu erstellen:Währung, geografische Namen, jede Menge Zeug.Jedes Projekt, das seine eigenen lokalen Kerndaten pflegt, ist meiner Meinung nach ziemlich verrückt, wenn man davon ausgeht, dass dieses Projekt existiert.

Ich schlage vor, so etwas zu verwenden 99translations.com um Ihre Übersetzungen zu pflegen.Andernfalls können Sie nicht feststellen, welche Ihrer Übersetzungen in jeder Sprache aktuell sind.

Eine weitere Herausforderung besteht darin, Eingaben von Ihren Benutzern anzunehmen.In vielen Fällen wird dies durch die vom Betriebssystem bereitgestellte Eingabeverarbeitung erleichtert, wie z. B. IME in Windows, das transparent mit gängigen Text-Widgets arbeitet, aber diese Möglichkeit wird nicht für jeden möglichen Bedarf verfügbar sein.

Eine Website, die ich verwende, verfügt über eine Übersetzungsmethode, die der Eigentümer „Wiki + maschinelle Übersetzung“ nennt.Da es sich um eine Community-basierte Website handelt, unterscheidet sie sich offensichtlich von den Bedürfnissen von Unternehmen.

http://blog.bookmooch.com/2007/09/23/how-bookmooch-does-its-translations/

Eine Sache, die noch niemand erwähnt hat, sind Saiten mit einem heftigen Teil wie in "Die Einheit wird in 5 Tagen" oder "Am Montag etwas passiert". wo 5 und Montag je nach Staat sich ändern werden.Es ist keine gute Idee, diese in zwei Teile aufzuteilen und zu verketten.Mit nur einem variierenden Teil und einer guten Dokumentation kommt man vielleicht damit durch, mit zwei variierenden Teilen wird es eine Sprache geben, die es vorzieht, deren Reihenfolge zu ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top