UI und Hilfe Inhalts Handbuch
TDF LibreOffice Document Liberation Project Community Blogs Weblate Nextcloud Redmine Ask LibreOffice Spende
Dieses Handbuch beschreibt den Inhalt der UI und der Hilfedateien unter Berücksichtigung der Elemente, die zu übersetzen oder eben nicht zu übersetzen sind, so wie z. Bsp. Variablennamen oder XML Elemente in den .po Dateien.
Eindeutige Begriffe
Einige Worte müssen in Deinen Übersetzungen eindeutig sein, ansonsten wird das Produkt zusammenbrechen oder Datenverlust für den Nutzer riskieren. Diese Begriffe sind:
- Vorlagennamen so wie man sie in der Datei sw/source/ui/utlui.po finden kann
- Funktionsnamen in Calc (so wie STRLIST_FUNCTION_NAME), die in der Datei formula/source/core/resource.po zu finden ist.
- mathematische Symbole aus der Datei starmath/source.po. mathematische Symbole dürfen auch keine Leerzeichen enthalten. Z. Bsp. darf perthousand nicht in per thousand oder noelement darf nicht in no element übersetzt werden.
- Index Einträge in der Online Hilfe so wie <bookmark_value\>Editing;Help Files\<\/bookmark_value\>, auch wenn sie nicht in der selben Datei sind. Dadurch bricht die Anzeige der Index Einträge zusammen.
- das | Symbol in Windows Installer Texten
Variablen und Symbole in den UI Dateien
LibreOffice nutzt einen Technologienmix in den unterschiedlichen Teilen des Quelltextes. Daher ist es schwer, harte Regeln über Variablen und Symbole in den UI-Dateien zu definieren. Dies ist ein Versuch, einige Regeln niederzuschreiben.
- Einige Dateien enthalten ein | am Ende des Testes. Dieses Zeichen ist verpflichtend, da ein Laufzeitfehler des Installers auftritt, wenn es weggelassen wird. Hier ist ein Beispiel aus instsetoo_native/inc_openoffice/windows/msi_languages.po:
Up one level| Create New Folder|
- $ und % führen meist eine Variable an, die im UI ersetzt wird. Das Wort oder die Zahl nach dem $ oder % darf nicht ersetzt werden. Beispiele:
%PRODUCTNAME ''Das zeigt den Produktnamen an'' Ersetze den Objektnamen von %1 ''%1 wird durch das Objekt ersetzt'' Interner Fehler $(ARG1). ''$(ARG1) wird durch die interne Fehlernummer ersetzt''
- Wenn $ als Währung verwendet wird, wie im folgenden Text, dann ist es keine Variable und die Währung kann frei der Situation angemessen angepasst werden:
Gibt den Preis pro $ 100 Nennwert eines Wertpapieres mit einer unvollständigen letzten Periode an.
- \n zeigt eine neue Zeile im UI an. Der Text in der Übersetzung sollte in die Zeile passen. Aber der Zeilenwechsel darf nicht entfernt werden, da der Text sonst abgeschnitten wird. Beispiel:
#1 Überprüfe, ob Impress läuft \n #2 Für Bluetooth User, schalte "Optionen"-"LibreOffice Impress"-"Allgemein"-"Fernzugriff zulassen" an\n #3 Für WiFi User, klicke "Optionen"-"LibreOffice"-"Erweitert"-"Experimentelle Funktionen aktivieren" \n
- {x}, wobei 'x' eine Zahl ist, ist eine Variable, die in Impress verwendet wird. Sie darf nicht geändert werden.
- <X>, wobei X ein Wort in GROßBUCHSTABEN ist, ist in den meisten Fällen eine Variable, die nicht übersetzt wird. Einige Beispiele sind <FIELD>, <FIELDNAME>, <LOGICOPERATOR> und <VALUE>. Frage im Zweifel unter der Mailing Liste l10n@global.libreoffice.org nach.
- [n], wobei n eine Zahl ist, zeigt einen Parameter dessen Wert im endgültigen Text eingefügt wird. Die Zahl darf nicht geändert oder übersetzt werden.
- [x], wobei x ein Wort (vielleicht mit einer Zahl am Ende) ist, zeigt oft einen Parameter, dessen Wert im endgültigen Text eingefügt wird und dessen Name nicht angepasst oder übersetzt wird (z. Bsp. [ProductName]), aber manchmal ein Text ist der tatsächlich übersetzt wird (z. Bsp. [M] oder [T] in der Benutzerschnittstelle der Autokorrektureinstellungen). Frage im Zweifel unter der Mailing Liste l10n@global.libreoffice.org nach.
- {xxx}, wobei xxx ein Text ist, markiert einen Teil eines Textes, der ignoriert wird, wenn der [parameter] Wert darin keinen anzuzeigenden Wert hat.
- Beispiel:
Die Datei [2][3] wird {vom folgenden Prozess: Name: [4], ID: [5], Window Title: [6]} verwendet. Die Anwendung schliessen und wiederholen.
- In diesem Fall, wenn entweder die Variablen [5] oder [6] keinen Inhalt zum Anzeigezeitpunkt haben, wird der Teiltext "vom folgenden Prozess: Name: [4], ID: [5], Window Title: [6]" ausgelassen und nicht angezeigt. In diesem Fall würde der endgültige Text keinen Sinn ergeben, aber das ist eine andere Geschichte. :-)
XML Elemente in Hilfe Dateien
Die Hilfedateien enthalten viele XML Elemente. Das macht es für Neueinsteiger schwierig zu übersetzen. Wir erklären sie hier, so dass für die Übersetzung keine Fragen offen bleiben. Einige Elemente sind in anderen Elemente verschachtelt. Das Element enthält auch Attribute, die wir in der Erklärung von jedem Element erwähnen.
Am Besten übernimmt man diese Elemente mit copy and paste in die Übersetzung zu übernehmen. Dadurch wird verhindert, dass etwas vergessen oder falsch geschrieben wird. Dann wird der Inhalt zwischen den Flags sowie die verschachtelten Elemente übersetzt.
<ahelp></ahelp>
Dieses Element ist in den Hilfedateien vorhanden. Die Information daraus wird in der UI als erweiterter Tipp angezeigt, wenn diese in den LibreOffice Optionen aktiviert sind. Dieses Element ist <ahelp>der erweiterte Tipp</ahelp>. Beispiel:
<ahelp hid=\".\">Dieses Menü enthält Kommandos zur Bearbeitung der Inhalte des aktuellen Dokumentes.</ahelp>
Dieses Element hat zwei Attribute, die nicht übersetzt zu werden brauchen:
- hid (wie im Beispiel oben)
- visibility
<alt></alt>
Dieses Element gibt einer Grafik einen alternativen Text. Es ist oft in das Element <image> eingebettet. Beispiel:
<alt id=\"alt_id3159119\">Symbol</alt>
- Hier muss das Wort Symbol übersetzt werden. Sonst nichts.
- Es enthält auch xml-lang=\"en-US\" für lokalisierte Grafiken. Hier muss das en-US durch den ISO-Code Deines Landes ersetzt werden.
<bookmark_value></bookmark_value>
Dieses Element wird für die Index-einträge der Online-Hilfe verwendet. Das erste Wort ist der Haupteintrag getrennt durch einen Strichpunkt. Das zweite Wort repräsentiert den Eintrag auf zweiter Ebene, z. Bsp.:
<bookmark_value>Seitenvorlage; Titel</bookmark_value><bookmark_value>Seitenvorlage; Fusszeile</bookmark_value>
<bookmark_value>Titel; Definition</bookmark_value><bookmark_value>Fusszeile; Definition</bookmark_value>
<bookmark_value>Dateinamen in Titeln/Fusszeilen</bookmark_value><bookmark_value>wechselnd; Daten, automatisch</bookmark_value>
<bookmark_value>Daten; automatische Aktualisierung</bookmark_value><bookmark_value>automatische Datenaktualisierung</bookmark_value>
- Manchmal kommt es vor, dass das Wort in den Quellen im Englischen eine andere Bedeutung hat als in Deiner Sprache, wie header und title. Wenn das als <bookmark_value>Header;Title</bookmark_value> auftaucht, kann es in der Übersetzung weggelassen werden, es hat dann nämlich keine Auswirkung,
- In den meisten Fällen werden mehrere Einträge im selben Absatz gruppiert.
- Es sollte im Heilfeverzeichnis keine zwei ähnlichen Einträge geben weil das die Indexanzeige in der Hilfemaske durcheinander bringt.
<caseinline></caseinline>
Dieses Element erlaubt den Inhalt abhängig von der Plattform (Windows, Linux oder Mac) umzuschalten. Der angezeigte Text wird dann unterschiedlich. Es ist oft in <switchinline> oder <defaultinline> Elementen eingebettet. Beispiel:
Drücke <switchinline select=\"sys\"> <caseinline select=\"MAC\">Command</caseinline><defaultinline>Strg</defaultinline></switchinline>
und klicke auf den Tab des Blattes, in das der Inhalt eingefügt werden soll.
- in diesem Beispiel muss nur der Text Command zwischen den zwei caseinline Feldern übersetzt werden. Wenn auf der Tastatur eine andere Taste als Ctrl verwendet wird, sollte das automatisch ebenfalls geändert werden (wie z. Bsp. in Deutschland, wo die Taste als "Strg" bezeichnet wird) obwohl es zum <defaultinline>-Feld gehört.
- dieses Element hat ein Attribut: select wie im Beispiel oben. Diese Attribut darf nicht übersetzt werden.
<defaultinline></defaultinline>
Dieses Element enthält den Standardtext, der erscheint wenn es eine mögliche Auswahl aufgrund der Plattform gibt. Wie im vorigen Element dargestellt, ist es oft in nowiki><switchinline></nowiki> and <caseinline> Elementen eingebettet. Beispiel:
Drücke <switchinline select=\"sys\"> <caseinline select=\"MAC\">Command</caseinline><defaultinline>Strg</defaultinline></switchinline>
- dieses Element hat kein Attribut.
<embedvar></embedvar>
Dieses Element hat keinen Inhalt der eine Lokalisierung erfordert. Aber er kann auch verschachtelt sein. Beispiel:
<embedvar href=\"text/scalc/00/00000004.xhp#optional\"/>
- dieses Element hat ein Attribut: href wie im obigen Beispiel
<emph></emph>
Dieses Element erlaubt eine Betonung des Textes zwischen den Tags, daher wird der Inhalt immer übersetzt. Beispiel:
Wähle <emph>Format - Zellen verbinden - Zellen verbinden und zentrieren</emph>
- dieses Element hat kein Attribut.
<image></image>
Diese Element ist für die Bilder, die in einer Datei eingebettet sind. Das Element selbst hat keinen lokalisierbaren Inhalt, aber andere Elemente wie <alt>, die lokalisierbaren Inhalt enthalten, sind immer darin eingebunden. Beispiel:
<image id=\"img_id3153714\" src=\"sc/res/sf01.png\" width=\"0.1665in\" height=\"0.1665in\"><alt id=\"alt_id3153714\">Symbol</alt></image>
In diesem Beispiel wird das Element <alt></alt> eingebunden, wobei Symbol übersetzt werden muss.
Dieses Element hat vier Attribute, die nicht übersetzt werden:
- id gibt die Referenz des Bildes an.
- src gibt die Lage des Bildes an.
- width gibt die Breite des Bildes an. Die verwendete Maßsystem kann unterschiedlich sein (z. Bsp. cm), aber es hat keine Auswirkung auf die Anzeige des Bildes.
- height gibt die Höhe des Bildes an. Das hier verwendete Maßsystem kann hier auch unterschiedlich sein.
<item></item>
Dieses Element beschreibt eine spezielle Formatierung für den Inhalt zwischen den Tags.
Beispiele:
Um die Vervollständigung zu akzeptieren, drücke <item type=\"keycode\">Enter</item> oder eine Pfeiltaste.
In diesem Beispiel sieht man schön, das die spezielle Formatierung die Tastatureingabe hervorgehoben wird.
In <item type=\"menuitem\"><switchinline select=\"sys\"><caseinline select=\"MAC\">
%PRODUCTNAME - Einstellungen</caseinline><defaultinline>Extras - Optionen</defaultinline>
</switchinline> - $[officename] - Allgemein </item>kann eingestellt werden, ab welchem Jahr eine zweistellige Zahla als ab 20xx erkannt wird.
In diesem komplexeren Beispiel wird die spezielle Formatierung verwendet, um einen Menüeintrag hervorzuheben.
- type ist das einzige Attribut dieses Elementes. Es bestimmt den Typ der hervorzuhebeneden Eingabe.
<link></link>
Dieses Element zeigt einen Link zu einer anderen Hilfedatei oder ins Web. Beispiele:
<variable id=\"datedif\"><link href=\"text/scalc/01/func_datedif.xhp\">DATEDIF</link></variable>
In diesem Beispiel befindet sich der angezeigte Inhalt in scalc/01/func_datedif.xhp. Hier braucht nur noch DATEDIF übersetzt zu werden.
<link href=\"text/scalc/main0210.xhp\" name=\"Seite Ansicht Objekt Balken\">Seite Ansicht Objekt Balken</link>
In diesem Beispiel muss der Inhalt nach dem Atribut name auch übersetzt werden.
Dieses Element hat vier Attribute:
- href ist der Bezug auf die Datei. Er hat keinen lokalisierbaren Inhalt.
- name ist ein komplett unübliches Attribut. Loklalisierung hat deswegen auch keinerlei Auswirkung.
- target ist das Ziel für Inhalte im Web. Es hat keinen lokalisierbaren Inhalt.
- type ist der Typ des anzuzeigenden Inhaltes. Es hat keinen lokalisierbaren Inhalt.
<switchinline></switchinline>
Wie oben bei den Elementen <caseinline></caseinline> und <defaultinline></defaultinline> gesehen, erlaubt dieses Element zwischen plattformabhängigen (Windows, Linux oder Mac) Inhalten umzuschalten. Es hat selbst keinen übersetzbaren Inhalt, beinhaltet aber immer die letzteren eingebetteten Elemente: Beispiel:
Press <switchinline select=\"sys\"> <caseinline select=\"MAC\">Command</caseinline><defaultinline>Ctrl</defaultinline>
</switchinline>
und klicke den Tab des Dokumentes, in den der Inhalt eingefügt werden soll.
- select ist sein einziges Attribut. Es hat keinen lokalisierbaren Inhalt.
<variable></variable>
Dieses Element bestimmt den Inhalt, der in der Datei wiederverwendet wird. Der Inhalt zwischen den Tags muss lokalisiert werden. Beispiel:
<variable id=\"kopfundfusszeilentext\"><ahelp hid=\".uno:EditHeaderAndFooter\">Erlaubt Kopf und Fußzeilen zu definieren und zu formatieren.</ahelp></variable>
Dieses Element hat zwei Attribute:
- id ist der Name der Variablen und darf nicht übersetzt werden. Sein Name kann Hinweise auf den Typ des Inhaltes geben, unglücklickcherweise (🤔🤔) sind sie meistens auf Deutsch.
- visibility, wobei der Inhalt nicht übersetzt werden darf.
.po-Dateien suchen und verwalten
Es gibt mehrere Operationen, die direkt auf eine .po-Datei angewendet werden können. Dies sind Textdateien und einige Skripten so wie das Translate Toolkit die zur Bearbeitung eingesetzt werden können.
Da das Suchfeld auf Weblate nicht sehr effektiv ist, sollte das grep-Kommando unter Linux verwendet werden. Es gibt viel mehr relevante Ergebnisse bei der Suche nach einem Text in mehreren Dateien. Dieser Teil enthält eine kurze Beschreibung einiger Skripten sowie Beispiele mit grep und sed-Kommandos für die Hilfe bei der Bearbeitung der Dateien.
Zuerst wird die Datei aus Weblate heruntergeladen. Mit cd wird in das Verzeichnis gewechselt, in dem gearbeitet werden soll. (ui oder Hilfe).
Toolkit übersetzen
Translate Toolkit packages sind für die meisten Distributionen erhältlich. Wenn nicht, oder bei einer alten Version kann es hier heruntergeladen werden. Bei Problemen mit der Installation oder Verwendung der Skripten zögere nicht, in der l10n Mailing Liste um Hilfe zu fragen.
Einige Skripte des Translate Toolit sind in Weblate implementiert, wie die Failing Checks, die die Übersetzung überprüfen soll. Einige könnten tatsächlich relevant sein:
- poterminology extrahiert eine Terminologie Datei aus der .po/pot Datei. Vor Beginn der Übersetzung ist es eine große Hilfe, die wichtigsten oder unklaren Wörter in einem Glossar übersetzt zu bekommen. Diese Datei kann auch in einem Weblate Projekt hochgeladen werden. Die Syntax und die Optionen werden auf dieser Seite erklärt.
- posegment erhöht die Qulität der TM durch Segmentierung der po Dateien auf Satzebene. Die Syntax und die Optionen sind auf dieser Seite.
- pocompendium erzeugt eine große po Datei aus einem Verzeichnis voller po Dateien. Das kann nützlich sein, wenn z. Bsp. eine große Datei aufgeteilt wude, um sie von mehreren Übersetzern bearbeiten zu lassen. Die Syntax und die Optionen werden auf dieser Seite erklärt.
- posplit erzeugt drei .po Dateien mit übersetzten Dateien, nicht übersetzten Dateien und verschwommenen Dateien. Die Syntax und die Optionen werden auf der Seite erklärt.
grep verwenden, um Texte zu finden
Das grep Komando wird unter Linux, MacOS oder UNIX-ähnlichen Systemen verwendet, um Textdateien zu durchsuchen, oder eine gegebene Datei auf Zeilen mit einem vorgegebenen Text oder Worten zu durchsuchen. Das Kommando zeigt die Zeilen, die mit der Suche übereinstimmen.
- Die einfachste Syntax ist:
grep 'Wort' Dateiname.po
- Beispiel:
sophie@sophie:~/libo_ui-fr$ grep 'Browse' accessibility/source/helper.po
- gibt
msgid "Browse"
- zurück. Hier sagen wir dem grep-Kommando, das Wort Browse in der Datei helper.po zu finden, welche im Unterverzeichnis source des Verzeichnisses accessibility liegt.
- Das ist nicht sehr nützlich, weil man wissen muss, in welchem Verzeichnis der Text liegt, obwohl LibreOffice so viele davon hat. Wir werden eine weitere Option kennenlernen, die rekursiv alle Verzeichnisse im Hauptverzeichnis durchsucht.
- Beispiel:
sophie@sophie:~/libo_ui-fr$ grep -r 'Browse' accessibility/
- gibt
accessibility/source/helper.po:msgid "Browse"
- zurück. Das sieht schon besser aus! Die Ausgabe zeigt den Pfad zum Text.
- Um die Schreibweise eines Wortes zu ignorieren (z. Bsp. um nicht case-sensitiv nach Browse, browse oder BROWSE zu suchen), wird die Option -i verwendet. Die Syntax ist:
grep -r -i 'Wort' Verzeichnis
- Nun wollen wir auch die Zeilennummer des Textes in der Asugabe erhalten. Das erledigt die Option -n
- Die Syntax ist:
grep -r -i -n 'Wort' Verzeichnis
- Das hier ist ein Beispiel in unserem eigenen Verzeichnis mit allen uns bekannten Optionen:
sophie@sophie:~/libo_ui-fr$ grep -r -i -n 'Browse' accessibility/
- Die Ausgabe ist:
accessibility/source/helper.po:23:"RID_STR_ACC_NAME_BROWSEBUTTON\n" accessibility/source/helper.po:25:msgid "Browse"
- Wie man sieht beinhaltet der zweite Eintrag das zu übersetzende Wort.
- Zur Suche nach genau dem Text, den Sie eingegeben haben, verwenden Sie die Option -w. Z. Bsp. um nach is zu suchen, ohne Ergebnisse für this oder his zu erhalten.
- Zur Suche nach mehreren eingegebenen Worten lautet die Syntax:
egrep -w -r -n 'word1|word2' directory/
- Beispiel:
sophie@sophie:~/libo_ui-fr$ egrep -w -r -n '~File|_File' sw/
- Die Ausgabe lautet:
sw/uiconfig/swriter/ui.po:313:msgid "_File System" sw/uiconfig/swriter/ui.po:1649:msgid "_File name" sw/source/ui/frmdlg.po:563:msgid "~File name" sw/source/ui/misc.po:591:#~ msgid "~File system" sw/source/ui/dialog.po:169:msgid "~File name" sw/source/ui/index.po:522:msgid "~File"
- Hinweis: Wir verwenden egrep zur Suche nach einem bestimmten regulären Ausdruck. Das e steht für extended grep oder erweiterter grep. Es kann aber auch die Option -E verwendet werden:
grep -E -r -n 'word1|word2' directory/
- Wenn in der Suche ein ESC-Zeichen, wie ein Apostroph (z. Bsp. child's book in Englisch oder l'Objet in Französisch) auftaucht, ist die einfachste Möglichkeit, das Suchwort in doppelten Anführungszeichen statt in einfachen anzugeben. So wie in diesem Beispiel:
sophie@sophie:~/libo_ui-fr$ grep -r -n "l'objet" sw/ sw/source/ui/utlui.po:4106:msgstr "Cliquer sur l'objet" sw/source/ui/utlui.po:4133:msgstr "Souris sur l'objet" sw/source/ui/utlui.po:4151:msgstr "Souris quitte l'objet" sw/source/ui/utlui.po:4626:#~ msgstr "Renommer l'objet : " sw/source/core/undo.po:641:msgstr "Supprimer l'objet"
- die üblichen regulären Ausdrücke in grep (*: finde keine oder mehr der folgenden Zeichen oder Ausdrücke; ^: gefundener Ausdruck steht am Anfang einer Zeile, so wie in ^A usw.)
sed verwenden, um Dateien zu bearbeiten
Wie grep ist sed ein mächtiges Kommando zur einfachen Bearbeitung des Inhaltes der .po Dateien. Sed steht für Stream EDitor. Um z. Bsp. Header durch Title in der Datei zu ersetzen, lautet die Syntax:
sed 's/Header/Title/g' <file.po
- zuerst kommt der Name des Kommandos s für substitute, also Ersetzen
- dann kommt das ursprüngliche Wort, getrennt durch /
- danach kommt das neue Wort
- g steht für global und ersetzt jedes Auftreten in der Datei und nicht nur das erste Auftreten des gesuchten Wortes
- dann kommt die Datei in der die Ersetzung stattfindet
- beachte auch die einfachen Anführungszeichen.
Sed verwendet reguläre Ausdrücke, um die Instruktionen zu verarbeiten, aber die Syntax ähnelt trotzdem dem obigen Angaben. Wir werden die ganze Syntax der unten angegebenen Zeilen nicht vertiefen. Es sind einfache Ausdrücke, die sicher auf die Datei angewendet werden können.
- Kommentare aus einer Datei entfernen
- Beispiel einer Datei, aus der der Kommentar # my comment in der utlui.po entfernt werden soll
# my comment #. dnChg #: 04180400.xhp
- Folgendes ist im Verzeichnis sw/source/ui einzugeben:
sophie@sophie:~/libo_ui-fr/sw/source/ui$ sed '/^#\ /d' utlui.po > tt
- Es wird die Datei "tt" in diesem Verzeichnis erstellt. Diese Datei enthält die Texte, wobei alle "#" am Zeilenanfang (^) gefolgt von nichts gelöscht werden (das d in der Syntax).
- Um die Datei tt wieder in utlui.po umzubenennen:
sophie@sophi:~/libo_ui-fr/sw/source/ui$ mv tt utlui.po
- jetzt ist sie eine saubere Datei!
- Die ersetzte Zeile anzeigen
Lasst uns nochmal unser erstes Beispiel nehmen. Es soll nur auf einer gegebenen Zeile, hier der 306, gearbeitet werden:
sed '306 s/Header/Title/g' <file.po
und jetzt wissen wir, wie grep zunächst auf die Datei angewendet wird, um den Text zu finden und dann sed angewendet wird, um ihn zu korrigieren.
- weitere Informationen sind auf der gnu Seite über die Begrenzer, reguläre Ausdrücke und Syntax.