Wie organisiere ich Ressourcen für Lokalisierungszeichenfolgen?


14

Wir entwickeln eine große Anwendung, die aus vielen kleinen Paketen besteht. Jedes Paket verfügt über einen eigenen Satz von Ressourcendateien für die Lokalisierung.

Was ist der beste Ansatz zum Organisieren und Benennen der Lokalisierungszeichenfolgen?

Hier sind meine bisherigen Gedanken:

Umgang mit Duplikaten

Derselbe Text (z. B. "Postleitzahl") kann in einem bestimmten Paket mehrmals vorkommen. Der Programmierinstinkt (DRY) fordert mich auf, eine einzelne Zeichenfolgenressource zu erstellen, die von allen Vorkommen gemeinsam genutzt wird .

Andererseits möchte ein Übersetzer möglicherweise an einigen Stellen eine lange ("Postleitzahl") und an Stellen mit weniger Platz eine kürzere ("PLZ") Übersetzung auswählen. Oder wir möchten einen Doppelpunkt an einige Vorkommen ("Postleitzahl:") anhängen, an andere jedoch nicht. Oder wir benötigen an einigen Stellen eine andere Groß- / Kleinschreibung ("Postleitzahl"). Alle diese Argumente deuten darauf hin, dass pro Nutzung eine Ressource erstellt wird, auch wenn deren Inhalt identisch ist .

Benennung

Wenn Duplikate eliminiert werden sollen, ist es sinnvoll, die Ressourcen nach Inhalten zu benennen , möglicherweise mit einem Hinweis auf die Art der Verwendung per Präfix. Also wir haben labelOK= „OK“ , messageFileTooLarge= „Die Datei überschreitet die maximale Dateigröße.“ , und labelZipCode= "Postleitzahl" .

Die Benennung nach Inhalten hat den Vorteil, dass Formatargumente auf natürliche Weise behandelt werden: Die Ressource akzeptiert messageFileHas_0_MBWhileMaximumIs_1_MBeindeutig zwei Formatierungsargumente, die tatsächliche Dateigröße und die maximale Dateigröße.

Wenn wir jedoch Duplikate zulassen, ist die Nennung nach Inhalten allein nicht sinnvoll. Um eindeutige Ressourcennamen zu erhalten, müssen wir den Verwendungsort in den Ressourcennamen aufnehmen. Das funktioniert für grafische Steuerelemente, obwohl die Bezeichner in der Regel etwas lang werden: fileSelectionConfirmationButtonText= "OK" , customerDetailsTableColumnZipCode= "Postleitzahl" . Bei nicht visuellen Codedateien wird es jedoch schwieriger. Wie benennen Sie eine bestimmte Verwendung einer Zeichenfolge, wenn Sie nicht wissen, wo sie schließlich angezeigt wird? Nach Codedatei und Funktionsname? Scheint mir eher ungeschickt und spröde.

Alles in allem neige ich dazu, Duplikate zuzulassen, aber ich bemühe mich, ein konsistentes Benennungsschema zu finden, das dies unterstützt.

Edit: Diese Frage hat zwei Aspekte: Wie organisieren Ressourcen (DRY vs. Duplikate) und wie man nennt sie. Bisher haben sich die Antworten auf den ersten Aspekt konzentriert. Ich würde mich über Feedback zu Namenskonventionen freuen!


1
Wenn Sie kleine Pakete mit jeweils loc-Sets haben, stellt sich die Frage, ob Sie viele Duplikate sehen werden. Ich würde mit den Duplikaten arbeiten und mich nicht zu sehr um die Bezeichner im Code kümmern.
Martin Ba

"Wie benennen Sie eine bestimmte Verwendung einer Zeichenfolge, wenn Sie nicht wissen, wo sie schließlich angezeigt wird?" Wäre dies nicht ein Zeichen für einen Fehler im Design, bei dem Logik (Entscheidung, wo es gezeigt werden soll) und Präsentation (tatsächlich gezeigt werden soll) vermischt werden? Es wäre sehr seltsam für Sie, einen Text mit regionalen Daten zu erstellen, ihn jedoch wie jedes andere interne Datenobjekt zu behandeln, das Sie verschieben können.
Alpha

Antworten:


8

Ich würde eine Vervielfältigung akzeptieren, wenn Sie nicht sicher sind, ob die Bedeutung in allen Fällen, in denen eine bestimmte Zeichenfolge verwendet wird, exakt gleich ist.

Auch wenn zwei Bezeichnungen immer dieselbe Zeichenfolge in Englisch (oder Ihrer Muttersprache) enthalten, müssen sie nicht in allen Sprachen gleich sein. Durch das Akzeptieren von Duplikaten erhalten Sie (oder besser gesagt die Übersetzer) die Flexibilität, die Sie benötigen, um mit solchen Situationen umzugehen.

Als Beispiel: Betrachten Sie eine Bezeichnung "Bedingung", die - abhängig vom Kontext - unter vielen anderen möglichen Übersetzungen in "Bedingung" oder "Bedingung" übersetzt werden kann.


Ja. Dies.
Zanlok

2

Akzeptiere einige Duplikate.

Sie können einige Mehrfachübersetzungen vermeiden, indem Sie zusätzliche Steuerelemente erstellen. ZB ein CancelButtonund ein, OKButtondie bereits ihren Text enthalten, und jetzt Abbrechen / OK / OK müssen nur einmal übersetzt werden. Aber das ist fast ein Sonderfall.


2

So gehen wir in meiner Firma vor:

Namenskonvention: Wir benennen Labels, indem wir ihnen die Klasse / section / form / etc voranstellen. Zum Beispiel loadFile_loadButton, loadFile_fileNameLabel, loadFile_cancelsind alle Etiketten , die zu einer Datei laden Dialog. Obwohl diese unterstrichene Namenskonvention nicht die häufigste ist, bevorzugen wir sie gegenüber Standardkonventionen, da sie die Lesbarkeit und "Gruppierbarkeit" verbessert: Beachten Sie, wie einfach es ist, im Vergleich zu Labels zu erkennen, zu welchem ​​Element die Labels gehören und was jedes Label darstellt genannt loadFileLoadButton, loadFileNameLabelund loadFileCancel. Vielleicht denken Sie, dass der Unterschied nicht so groß ist, aber wenn Sie Tausende von Labels haben, lohnt sich der zusammengesetzte Effekt.

Kopfzeilenkommentare: Zusätzlich zu den vorangestellten Bezeichnungen fügen wir den Ressourcendateien "Kopfzeilenkommentare" hinzu, um die Bezeichnungsgruppierungen eindeutig zu definieren. Auf diese Weise kann jemand, der bestimmte Beschriftungen für eine bestimmte Klasse / einen bestimmten Abschnitt / ein bestimmtes Formular / usw. ändern oder hinzufügen möchte, alle Beschriftungen für dieses bestimmte Element an nur einer Stelle unter einer Überschrift finden und problemlos Beschriftungen hinzufügen oder ändern in dem Wissen, dass sie keine Übersetzungen für andere Elemente unterbrechen (IMHO, dies ist auch ein sehr wichtiger Punkt, warum Sie die Vervielfältigung zulassen müssen).

"Begründete" Duplikate sind wünschenswert: Wie oben erwähnt, werden diese Praktiken definitiv zu doppelten Etiketten führen, aber wir sehen kein Problem damit (mehr darüber, wie dies in Tools of the Trade gehandhabt wird).

Wie bereits erwähnt, kann ein Etikett in einer Sprache auf zwei oder mehr verschiedene Arten in andere Sprachen übersetzt werden, je nachdem, in welchem ​​Kontext sie dargestellt werden. Wenn Sie Labels "vereinheitlichen", fällt es dem Übersetzer sehr schwer, ein einzelnes Label zu erstellen, das allen Kontexten entspricht, in denen es gefunden wird. Wie wir also sehen, hilft das Zulassen "gerechtfertigter" Duplikate, die Qualität der Lokalisierung zu verbessern, solange sie sich nicht im selben Kontext auf dasselbe beziehen (dies ist die Bedeutung von "gerechtfertigt").

Handwerkszeug: Um bei Ihren Übersetzungen so effektiv wie möglich zu sein, können Sie Ihr eigenes Werkzeug erstellen, das nach ähnlichen Labels sucht, die in Ihren Bundles vorhanden sind, und deren Übersetzungen als Standardwerte für neue Labels anbieten, oder Sie können es sogar Verwenden Sie vorhandene Services wie diesen , die Tools wie den gerade erwähnten bereitstellen. So wird das Übersetzen neuer Etiketten zum Kinderspiel (noch mehr, wenn sie mehrmals wiederholt werden), da das Tool standardmäßig mehrere Übersetzungsoptionen für die neuen Etiketten bietet ).

Fazit: Begründete Vervielfältigung und eine kontextbezogene Gruppierung der Bezeichnungen helfen den Übersetzern bei ihrer Arbeit. Große Zeit. Denken Sie nur einmal darüber nach: Der Kontext hilft dem Übersetzer bei der Auswahl der richtigen Übersetzung. Und das Zulassen von "gerechtfertigten" Duplikaten beseitigt den Konflikt, eine Übersetzung auswählen zu müssen, die für einige Kontexte schlecht geeignet ist (die jedoch insgesamt am besten passt).

Ich hoffe das hilft!


1

Wenn ich das in der Vergangenheit getan habe, sind wir den Weg der Ressourcendatei mit vollständigen Sätzen gegangen. Wenn genau derselbe Satz wiederholt großartig verwendet würde, aber wenn es nur einzelne Wörter aus einem Satz wären, würden diese Wörter dupliziert.

Wir waren an ein Framework gebunden, in dem die Ressourcendatei nur eine Liste englischer Phrasen und anschließend die Übersetzung enthielt (mit einigen Indexdaten am Ende für eine schnelle Suche).

Bei kleinen Eingabeaufforderungen oder Schaltflächen wie dem Feldnamen "Postleitzahl" oder der Schaltfläche "OK" wird die Zeichenfolge "Postleitzahl" gefolgt von der Übersetzung gespeichert und überall dort verwendet, wo die vollständige Zeichenfolge erforderlich ist. Aber (es sei denn, wir haben eine Zeichenfolge manuell getrennt) würde sie nicht für "Postleitzahl" verwenden, die in einem Satz vorkommt.

Wenn Sie Ihr Postleitzahl-Beispiel verwenden und versuchen, es selbst zu übersetzen, und es in allen Sätzen ersetzen, die es verwenden, erhalten Sie eine sehr, sehr schlechte Übersetzung.

Beispielsweise muss "Postleitzahl muss eingegeben werden", um das wörtliche Äquivalent von "Eingegebene Postleitzahl muss" in eine andere Sprache zu übersetzen. Wenn Sie einen Satz zerlegen, erhalten Sie nicht die Umkehrung von Wörtern, die in einer anderen Sprache erforderlich sind.

Deshalb sehen einige schlecht gemachte Übersetzungen ins Englische so lächerlich aus, dass die Person, die sie macht, nur die einzelnen Wörter übersetzt hat, nicht den ganzen Satz.

Wir fanden es immer am besten, Sätze als Ganzes zu übersetzen, ohne sie zu trennen. Wir hatten Platzhalter für Daten, die eingefügt werden mussten (z. B. "Teilenummer @ 1 ist redundant"), und der Übersetzer konnte den Platzhalter an die Position verschieben, die er für eine gute Übersetzung wollte.

Wir haben jedoch festgestellt, dass das Erlauben von Stellen, die genau denselben Satz oder dieselbe Dateneingabeaufforderung oder dieselbe Schaltflächenbeschriftung usw. verwendeten, für das Teilen von Übersetzungen in Ordnung war. Das war nie ein Problem und sparte dem Übersetzer Zeit und Kosten.


Genau. Das machen wir auch. Versuchen Sie niemals, Bezeichnungen / Sätze in der Übersetzung aufzulösen.
Martin Ba

1
Ich fürchte, das spricht meine Frage nicht wirklich an. Ich stimme absolut zu, dass Sätze niemals getrennt werden sollten. Die meisten Ressourcen sind jedoch keine Sätze, sondern einfache Beschriftungen (Schaltflächentexte, Tabellenüberschriften, Formularbeschriftungen usw.).
Daniel Wolf

In diesem Fall würde ich es einmal speichern und wiederverwenden. Eine Überlegung, die möglicherweise außerhalb des Rahmens Ihrer direkten Tätigkeit liegt, sind die Kosten eines Übersetzers. Wir haben sogar unsere Wiederverkäufer auf der ganzen Welt dazu gebracht, das für sich selbst zu finanzieren und die Übersetzung innerhalb der Anwendung zu testen. Sie wollten definitiv, dass Duplikate vermieden werden.
RosieC

Ich habe mehrere große Anwendungen vom Spanischen ins Spanische übersetzt und kann Ihnen sagen, dass Duplikate kein Problem darstellen (sie sind sogar wünschenswert), wenn Sie über die richtigen Übersetzungstools verfügen. Siehe meine Antwort, wie man damit effektiv umgeht.
Carlossierra

0

Dein Denken bei der Namensgebung ist gut.

Ziele

  • Definieren Sie eine gemeinsame Bezeichnung (dh einen Variablennamen) für lokalisierten Text.
  • Das Etikett sollte "gedankengroß" sein. Das ist ... so kurz, praktisch und doch so eindeutig.
  • Die Etiketten sollten einem einheitlichen Format folgen, um die Vorhersehbarkeit und den Abruf zu maximieren.

Implementierung

  • Reduzieren Sie die kognitive Belastung durch konsequente Verwendung bekannter Abkürzungen (z. B. msg = message, lbl = label, btn = button, ...)
  • Mit den Tools werden Variablen / Bezeichnungen in alphabetischen Listen dargestellt. Daher empfiehlt sich die Suche nach Personen, wenn verwandte Bezeichnungen in Gruppen zusammengefasst werden. Machen Sie Namen hierarchisch von den allgemeinsten bis zu den spezifischsten. (dh msgFileMissing, msgFileSaved, msgFileDeleted).
  • Englisch ist eine Verb-Nomen-geordnete Sprache. Viele (die meisten?) Andere Sprachen sind Substantiv-Verb. Nomen-Verb eignet sich am besten für hierarchische Gruppierungen.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.