Was ist eine .strings-Datei?
Eine .strings-Datei ist ein Textdateiformat, das in der Softwareentwicklung für die Lokalisierung von Texten auf Apple-Plattformen wie macOS, iOS und watchOS verwendet wird. Sie enthält Schlüssel/Wertpaare, um Zeichenketten für verschiedene Sprachen zu speichern, die in der Anwendung angezeigt werden. Dies erleichtert die Lokalisierung und Übersetzung der Anwendung in verschiedene Sprachen.
Hier sind zwei einfache Beispiele einer .strings-Datei:
/* Englisch */ "welcome_message" = "Welcome to our app!"; "login_button" = "Log In";
/* Deutsch */ "welcome_message" = "Willkommen in unserer App!"; "login_button" = "Anmelden";
Die Beispiele zeigen eine .strings-Datei mit Zeichenketten für zwei Sprachen: Englisch und Deutsch.
Im ersten Beispiel sind die Schlüssel „welcome_message“ und „login_button“ definiert. Für die englische Sprache sind die Werte der Schlüssel „Welcome to our app!“ und „Log In“.
Im zweiten Beispiel sind die gleichen Schlüssel für die deutsche Sprache definiert. Die Werte der Schlüssel sind hier „Willkommen in unserer App!“ und „Anmelden“.
Wenn die Anwendung auf einem Gerät mit Englisch als Systemsprache läuft, verwendet sie die englischen Zeichenfolgen. Läuft sie jedoch auf einem Gerät mit Deutsch als Systemsprache, verwendet sie die deutschen Texte. Auf diese Weise kann die Anwendung für verschiedene Länder lokalisiert und angepasst werden.
Die Aufgabe
Wenn eine Ausgangssprache in mehrere Zielsprachen übersetzt werden soll, wird die Arbeit sehr aufwendig. Die Erfahrung zeigt, dass bei manueller Vorgehensweise viele einzelne Arbeitsschritte notwendig sind, die viel Zeit in Anspruch nehmen. Hier kommt die App Translate Files with AI ins Spiel, die es für macOS und Windows gibt.
Translate Files with AI ist ein Programm zum automatisierten Übersetzen von Text in Textdateien in eine oder mehrere Sprachen. Diese Software verwendet DeepL, um die Texte zu übersetzen. DeepL ist derzeit der weltbeste Übersetzungsdienst und liefert aussagekräftige, verständliche Übersetzungen.
Die Vorgehensweise
Definition des zu übersetzenden Textes
In Translate Files with AI gibt es 5 Eingabefelder, in die reguläre Ausdrücke eingegeben werden können, die den zu übersetzenden Text beschreiben:
- Abschnittsüberschrift und Abschnittsende
beschreiben das Format einer Nachricht oder eines Textes in der Datei. Im obigen Beispiel entspricht die Abschnittsüberschrift den Schlüsseln"welcome_message" =
und"login_button" =
und das Abschnittsende der Zeichenfolge";
. - Zu ignorierende Abschnitte und Zu übersetzende Abschnitte
beschreiben die Abschnitte bzw. Schlüssel, deren Wert bzw. Inhalt entsprechend zu behandeln ist. - Zu ignorierende Zeichenfolgen und Zeichen
Hier wird angegeben, welche Teile des Inhalts einzelner Abschnitte von der Übersetzung ausgeschlossen werden sollen.
Um den Text in einer .strings-Datei zu übersetzen, verwende ich die folgenden Werte in den einzelnen Eingabefeldern:
Eingabefeld | Inhalt | Beschreibung |
Abschnittsüberschrift | [^\n+][\S ]+= " | Der Text des Schlüssels im Format Ein oder mehrere Zeilenvorschübe, gefolgt vom Text des Schlüssels, endend mit den Zeichen =_"_ (Gleich, Leerzeichen, Gänsefüßchen, Leerzeichen) |
Abschnittsende | ";(.//.)*\n | Die Beschreibung des Endes der Schlüsselwerte im Format Gänsefüßchen, Semikolon, 0 bis beliebig viele Zeichen, Zeilenvorschub |
Zu ignorierende Abschnitte | beliebig | |
Zu übersetzende Abschnitte | beliebig | |
Zu ignorierende Zeichenfolgen und Zeichen | https://.*?[ \n] /*(.?\n)*/ [^/]*//.*$ “%@” %@ %lld | Links, Kommentare innerhalb von /* und */ ,Kommentare, die mit // beginnen,Zeichenfolgen, die im Wert eines Abschnitts in Anführungszeichen eingeschlossen sind, |
Ausführung
Wählen Sie nun die Ausgangssprache und eine oder mehrere Zielsprachen des zu übersetzenden Textes aus und ziehen Sie den Ordner mit der Ausgangsdatei in das Programm. Es ist wichtig, dass der Name der Ausgangsdatei den Code der Ausgangssprache enthält, z. B. MeineAppText-DE.strings
.
Ich habe für diesen Test die Datei https://github.com/coteditor/CotEditor/blob/main/CotEditor/en-GB.lproj/Localizable.strings von CotEditor heruntergeladen und sie in en.strings umbenannt.
Durch Anklicken der Schaltflächen Nutzung schätzen und dann Übersetzung simulieren wird das Simulationsfenster des Programms angezeigt.
Im linken Teil dieses Fensters wird der Originaltext und im rechten Teil der Text der simulierten Übersetzung angezeigt. Die Bedeutung der einzelnen Farben:
- Kommentare
- Schlüsselelemente
- Zu übersetzender Text
- Übersetzter Text
- Von der Übersetzung ausgeschlossener Text
Da es sich um eine Simulation handelt, wird der Text im rechten Teil des Fensters in der Originalsprache angezeigt. Kommentare werden nicht übersetzt und auch nicht in den übersetzten Text eingefügt, weil ☑︎ Unübersetzte Abschnitte übernehmen nicht ausgewählt wurde. Andernfalls würden die Kommentare ohne Übersetzung in den übersetzten Text eingefügt, wie in der folgenden Abbildung der Simulation zu sehen ist.
Nach dem Schließen des Fensters kann die Übersetzung durch Abwählen von ☑︎Nicht online übersetzen, nur simulieren und anschließend durch Anklicken von Übersetzen und sichern gestartet werden.
Schneller übersetzen
Die Übersetzung dieses Beispieltextes für eine Sprache dauert ca. 2 Minuten. Soll die Datei in mehrere Sprachen übersetzt werden, dauert es entsprechend länger.
Warum ist das so?
Der Grund für diese lange Übersetzungszeit liegt darin, dass jeder Absatz einzeln an den Server von DeepL geschickt, dort übersetzt und anschließend zurück gesendet wird. Da es sich um eine relativ große Anzahl von Absätzen handelt, ist das Verhältnis von Nutzdaten zum Overhead extrem ungünstig.
Wie kann man das umgehen?
Da bei der ersten Übersetzung nicht Absatz für Absatz vorgegangen werden muss, kann die gesamte Datei auf einmal übersetzt werden. Dazu wird der Inhalt der Eingabefelder Abschnittsüberschrift und Abschnittsende gelöscht und in das Eingabefeld Zu ignorierende Zeichenketten und Zeichen eingetragen. Die Übersetzung der gesamten Datei dauert nun weniger als 3 Sekunden. Das ist ein enormer Fortschritt.
Für zukünftige Änderungen an bestehenden Übersetzungen ist es jedoch sinnvoll, die oben beschriebene Methode zu verwenden und die Überschriften der zu übersetzenden Abschnitte im Eingabefeld Zu übersetzende Abschnitte anzugeben. Dadurch wird nicht der gesamte Text noch einmal übersetzt und das Kontingent bei DeepL wesentlich weniger belastet.
Einige Absätze werden nicht übersetzt
Dies geschieht bei der abschnittsweisen Übersetzung, wenn dieselben Abschnittsüberschriften mehrfach in einer Datei verwendet werden. In diesem Fall wird tatsächlich nur der letzte Abschnitt übersetzt. In der Regel sollte dies jedoch kein Problem darstellen, da die Abschnittsüberschrift als Schlüssel verwendet wird und ein mehrfaches Vorkommen daher nicht sinnvoll ist.
Fazit
Mit Translate Files with AI ist es einfach und schnell möglich, .string-Dateien in bis zu 30 verschiedene Sprachen zu übersetzen. Ebenso einfach ist es, die Übersetzungen bei späteren Änderungen auf dem neuesten Stand zu halten.