1

Was ist der beste Weg, um die Übersetzung und Lokalisierung von dynamischen Listen zu verwalten?l10n/i18n: Wie behandelt man Sätze mit einer dynamischen Liste von Elementen?

Angenommen, ich habe die Datenbank abgefragt und eine Liste ["Foos", "Bars", "Bazes"] bekommen. Nehmen wir an, die Liste enthält immer mindestens zwei Elemente. Ich werde sicher sein, eine andere Übersetzung für den Einzelfall zu verwenden.

Was soll ich tun, wenn ich einen Satz wie brauchen „Wir haben eine große Auswahl an Foos, Bars und Bazes in unserem Code“? (Unter der Annahme, dass die Listenelemente sind dynamisch, damit ich nicht nur vorge übersetzen alle möglichen Permutationen und müssen die Dinge zur Laufzeit tun.)

ich zumindest die folgenden Probleme sehen:

  • Ich muss alle Elemente in das richtige Formular einfärben (gibt es Sprachen, in denen abhängig von der Position in der Liste verschiedene Formulare erforderlich sind?)

  • Verschiedene Gebietsschemas können drastisch unterschiedliche Regeln haben, wie Elemente verknüpft werden.

    • z. CJK-Locales brauchen "," anstelle von ",".
    • Und AFAIK auf Chinesisch gibt es "及" oder "和" - abhängig von der vollständigen Phrase - vor dem letzten Punkt, also denke ich, gibt es einige Mehrdeutigkeit mit dem Übersetzen von "und".
    • Und wie ich gelesen habe, können einige Sprachen Interpunktion vermeiden, wie es in Englisch verwendet wird, aber stattdessen andere Konzepte haben, z. Der arabische Übersetzer könnte die Verwendung "vor jedes Element bevorzugen (obwohl sie auch Kommas haben"). Ich bin mir nicht sicher, ob es wahr ist oder nicht - ich kann kein Arabisch, ich habe es nur erwähnt.

Mein Problem ist, ich weiß nicht einmal, welche Werkzeuge mir hier helfen können. Ich habe keine besonderen Anforderungen an die Programmiersprache, obwohl Python oder JavaScript die besten wären. Aber ich denke, dass ich fast alles ausführen kann, da ich wahrscheinlich einen l10n Microservice bauen und von meinem Projekt abfragen kann.

Ich habe GNU Gettext verwendet, bevor ich das gefunden habe, aber ich habe nichts gefunden, das mir in seinen APIs und Datenformaten helfen würde. Das Beste, was ich mir vorstellen kann, ist _("We have a wide choice of %s in our code", list_text) und generieren list_text mit DIY-Hacks. Ich bin nicht sicher, XLIFF-Format hat auch so etwas. Ich habe i18n-list-generator auf Npm gefunden, aber es ist way too simplicistic.

Hat sich jemand mit so etwas beschäftigt? Was haben Sie gemacht? Gibt es irgendwelche Bibliothek da draußen, die dies behandelt - so kann ich einen Blick auf seine API werfen und lernen, wie es Dinge tut?

+0

Die beste Vorgehensweise besteht darin, diese Art der Zusammenführung, wann immer möglich, zu vermeiden und den dynamischen Teil unabhängiger zu machen (und daher leichter zu übersetzen), indem z. Doppelpunkte und Klammern. Vergleichen Sie mit "Gefunden% d Dateien" vs "Gefundene Dateien:% d". – GSerg

+0

@GSerg, ja, mit den Übersetzungen überhaupt nicht fertig zu werden, wäre der einfachste Weg, mit ihnen umzugehen;) Ich schätze, ich kann nur Regeln für ausgewählte "erstklassige" Sprachen erstellen und eine langweilige maschinengenerierte Liste hinterlassen für andere (sicherlich, wäre viel besser als verlassen es überhaupt nicht übersetzt). Aber wenn jemand weiß, wie man damit gut umgehen kann - ich bin daran interessiert, etwas über das Modell zu lernen. – drdaeman

Antwort

2

Hier ist, wie ich es hätte nähern:

  1. Keine Verkettung. Der gesamte String-Beitritt muss über Formatzeichenfolgen mit Platzhaltern erfolgen.

  2. Verwenden Sie nur Formatzeichenfolgen, die benannte/nummerierte Platzhalter unterstützen. Z.B. oder $1 anstelle von %s (dies dient zur Neuanordnung von Parametern). Benannte Platzhalter sind auch besser, da sie den Übersetzern mehr Kontext geben.Nehmen wir an, wir verwenden {FOO}-style Platzhalter.

  3. eine Liste zu machen, würde ich ein paar Formatstrings verwenden, z.B .: joinItem = "{LIST}, {ITEM}" Elemente in die Liste anhängen und joinLastItem = "{LIST} and {ITEM}" das letzte Element anhängen. Dies ermöglicht es, Strings wie Foos, Bars and Bases zu rendern, Interpunktion zu ändern und sogar die Reihenfolge der Liste umzukehren, falls erforderlich.

  4. Schließlich können Sie die endgültige Formatzeichenfolge verwenden, z. weHaveTheseItems = "We have a wide choice of {ITEMS} in our code", vorausgesetzt, die {ITEMS} wird durch die zuvor gerenderte Zeichenfolge ersetzt.

Shameless Eigenwerbung: Sie können einen Blick auf die Plurr Bibliothek haben wollen, die solche {FOO} -Stil Platzhalter sowie Plurale unterstützt (etwas, das Sie wahrscheinlich für solche Nachrichten müssen). Es unterstützt JavaScript unter anderen Sprachen.

Verwandte Themen