Technologische Neuigkeiten, Bewertungen und Tipps!

Das Problem mit Chromium-Übersetzungen

Bei den meisten Anwendungen, die für ein breites internationales Publikum bestimmt sind, ist die Benutzeroberfläche in mehrere Sprachen übersetzt. Die Anzahl der Sprachen variiert jedoch stark und hängt von den Ressourcen des Anbieters ab, insbesondere von seiner Fähigkeit, Übersetzer zu rekrutieren.

Vivaldi wird derzeit in 91 Sprachen übersetzt, etwas mehr als Chrome.

Unter der Haube besteht das UI-String-Übersetzungssystem von Vivaldi tatsächlich aus zwei unabhängigen Systemen: dem Chromium-System und dem System, das von der nativen UI von Vivaldi verwendet wird.

Dieser Artikel behandelt nur das Chromium-System und die Herausforderungen bei seiner Verwendung.

Das Wichtigste zuerst

Das Chromium-String-/Textübersetzungs- und Ressourcensystem besteht aus zwei Arten von Dateien:

Die GRD-Dateien, die die US-englische Version der Zeichenfolgen deklarieren können, sowie den Speicherort verschiedener Dateiressourcen wie Symbole und Dokumente (HTML, JS, CSS), die von der Chromium-Benutzeroberfläche verwendet werden, und

Die XTB-Dateien, eine für jede Sprache, enthalten die verschiedenen Übersetzungen der Originalzeichenfolgen in der zugehörigen GRD-Datei.

Beim Erstellen des Produkts (in unserem Fall Vivaldi) werden diese Dateien von verschiedenen Skripten im Build-System verarbeitet und in Dateien konvertiert, die vom Chromium-Code verarbeitet werden können, der Zeichenfolgen und Ressourcen verarbeitet.

Eine der Herausforderungen für ein Produkt wie Vivaldi besteht darin, dass die vom Chromium-Projekt definierten Zeichenfolgen und Ressourcen sehr spezifisch für Chromium und Google Chrome sind, wie z. B. Logos und die in der Zeichenfolge verwendeten Firmen- und Produktnamen.

Aber natürlich möchten wir bei Vivaldi das Vivaldi-Logo verwenden und „Vivaldi“ als Namen unseres Produkts und Unternehmens nutzen.

Das bedeutet, dass wir die Ressourcendefinitionen und die Zeichenfolgen (und Übersetzungen) ändern müssen, um die bevorzugten Ressourcen und Namen von Vivaldi zu verwenden.

Wie ändert man eine Datei, ohne sie zu verändern?

Wenn Sie meine Artikel Wenn Sie über die Wartung eines Chromium-Forks sprechen, haben Sie sicher bemerkt, dass ich gesagt habe, Sie sollten die Chromium-Übersetzungsdateien ändern. Ich habe jedoch gerade oben gesagt, dass wir die Dateien ändern müssen, um unsere bevorzugten Ressourcen und Zeichenfolgen zu verwenden. Warum sollten wir die Dateien nicht ändern und wie umgehen wir das Problem, damit wir unsere ausgewählten Ressourcen verwenden können?

Es gibt zwei Gründe, warum wir die Dateien nicht ändern sollten:

  • Erstens werden die Chromium-Ressourcendateien häufig vom Chromium-Team aktualisiert. Neue Ressourcen und neue Zeichenfolgen werden hinzugefügt, alte werden geändert, um ihre Bedeutung zu verbessern, und gelegentlich werden einige entfernt. All diese Änderungen bedeuten, dass beim Aktualisieren des Chromium-Quellcodes ein erhebliches Risiko besteht, dass diese Änderungen an den spezifischen Zeilen der Datei vorgenommen werden, die wir geändert haben, oder in deren Nähe. Das bedeutet, dass wir die Konflikte zwischen dem neuen Text und unseren Änderungen lösen müssten, was die zum Abschließen der Aktualisierung erforderliche Zeit erheblich verlängern würde.
  • Zweitens müssten wir für die Zeichenfolgen nicht nur den GRD-Dateieintrag ändern, sondern auch den entsprechenden Eintrag in jeder der über 80 XTB-Übersetzungsdateien, die mit jeder Datei verknüpft sind. Und zu allem Überfluss hat jeder dieser Einträge eine numerische Kennung, die aus der Originalzeichenfolge in der GRD-Datei berechnet wird. Wenn Sie also die Originalzeichenfolge ändern, müssen Sie den Wert neu berechnen und jede XTB-Datei für diesen Eintrag aktualisieren. Autsch! Eine Menge Arbeit. Darüber hinaus ist jeder dieser aktualisierten Einträge in jeder Datei ein weiterer möglicher Update-Merge-Konflikt, der manuell gelöst werden muss. Doppelt autsch!
“.

Wie lösen wir also dieses Problem? Wie aktualisieren wir die Ressourcen, Zeichenfolgen und Übersetzungen, ohne die Chromium-Ressourcendateien zu ändern?

Die Antwort ist, dass wir sie sowohl ändern als auch nicht ändern.

Was wir für Vivaldi getan haben, ist, für jeden Satz Chromium-Ressourcendateien, den wir aktualisieren möchten, unsere eigenen GRD- und XTB-Ressourcendateien zu erstellen. Wir fügen unseren Dateiressourcen, Zeichenfolgen und Übersetzungen in diese Dateien ein. Die Übersetzungsdateien werden normalerweise verwendet, um die Übersetzungen für die zusätzlichen Sprachen hinzuzufügen, die wir unterstützen. In einigen Fällen schreiben wir die ursprüngliche Zeichenfolge jedoch umfassend neu, was das Hinzufügen weiterer Übersetzungen in unserer Version erfordert.

Anschließend haben wir beim Erstellen der Anwendung das Projekt und die darin verwendeten Skripts aktualisiert, um unsere aktualisierten Änderungen automatisch in die Daten einzufügen, bevor sie zum Generieren der von der Anwendung verwendeten Binärdateien verwendet werden.

Das Ergebnis ist, dass wir die Originaldateien nicht aktualisieren müssen, aber die Ressourcen, Zeichenfolgen und Übersetzungen aktualisieren können.

Dieser Prozess wird auch verwendet, um Erwähnungen von Chromium- und Google Chrome-Firmen- und Produktnamen automatisch durch den Namen Vivaldi zu ersetzen, sowohl in den ursprünglichen US-englischen Zeichenfolgen als auch in den Übersetzungen. Dieser Prozess ist nicht ohne Herausforderungen, insbesondere da „Google“ häufig in Kombination mit anderen Wörtern verwendet wird, um Produkte zu benennen, die wir nicht unterstützen, wie „Google Pay“, sodass wir solche Ersetzungen ausschließen müssen.

Gelegentlich gibt es Zeichenfolgen, in denen die Namen Google, Chrome oder Chromium erwähnt werden, wenn deren Ersetzung durch Vivaldi nicht wünschenswert ist (und ein Beispiel ist gerade in den Foren aufgetaucht, wo Informationen über ein System, an dem Google arbeitet, stattdessen „Vivaldi“ lauteten, das jetzt „behoben“ wurde). In diesen Fällen schließen wir diese bestimmte Zeichenfolge vom Ersetzen aus.

Ein weiteres aktuelles Beispiel war die Zeichenfolge „Chrome wird durch das Open-Source-Projekt Chromium ermöglicht“, die automatisch durch „Vivaldi wird durch das Open-Source-Projekt Vivaldi ermöglicht“ ersetzt wurde, nicht durch „Vivaldi wird durch das Open-Source-Projekt Chromium ermöglicht“. Ups! Dies wurde behoben, indem der Text vollständig mit der richtigen Formulierung überschrieben wurde.

Gibt es einen anderen Weg?

Könnten wir auf die Verwendung eines solchen Systems verzichten? Nun, es gibt andere Möglichkeiten, ein solches System zu implementieren.

Wir könnten einen unabhängigen Satz von Ressourcendateien hinzufügen (und wir haben diese für uns selbst) und unsere Ersetzungen in diese Dateien einfügen, indem wir unterschiedliche Bezeichner dafür verwenden und die Originale überall dort ersetzen, wo sie verwendet werden. Bei späteren Updates hätten wir jedoch immer noch das Problem, sowohl die Zeichenfolgen als auch ihre Bedeutung zu ändern und sie an anderer Stelle zu verwenden (was ermittelt und aktualisiert werden müsste). Dann gibt es das Problem weiterer potenzieller Zusammenführungskonflikte während der Updates.

Ganz einfach, die Verwendung unterschiedlicher Kennungen würde nicht besonders gut funktionieren, da ihre Verwendung kontinuierlich gepflegt werden müsste. Das bloße Ersetzen der ursprünglichen Einträge funktioniert im Allgemeinen besser.

Und dabei wird die Verwendung von Produktnamen in vielen Zeichenfolgen ignoriert. Viele dieser Namen werden im Code verwendet, und sie in einen anderen Satz von Dateien zu kopieren und zu ändern wäre ein großer Aufwand. Außerdem müssten sie bei jedem Chromium-Upgrade mit neuen Zeichenfolgen aktualisiert werden.

Die beste Möglichkeit, das Suchen und Ersetzen von Produktnamen (und damit die komischen Fälle) zu vermeiden, wäre, wenn das Chromium-Team nicht mehr „Google“, „Google Chrome“, „Chromium“ usw. fest in die Zeichenfolgen codieren würde. Stattdessen könnten sie Variablen verwenden, die den bevorzugten Namen des nachgelagerten Projekts in diese Zeichenfolgen einfügen können. Ein solches Projekt wäre jedoch ein großes Unterfangen für das Chromium-Team, und ich habe meine Zweifel, ob sie bereit wären, es zu übernehmen.

Was machen die anderen Chromium-basierten Browserteams? Ich habe absolut keine Ahnung. Vielleicht verwenden sie ein ähnliches System oder sie haben ihren eigenen Weg gefunden, das Problem zu lösen.

Your Header Sidebar area is currently empty. Hurry up and add some widgets.