Übersetzen von Linux mit `` gettext
29 gennaio 2008, 15:54 Location , Shell , Tipps & Tricks 29. Januar 2008, 15.54 UhrDie Funktion `` gettext wurde entwickelt, um die Übersetzung des gesamten Betriebssystems GNU / Linux zu ermöglichen. Genau aus diesem Grund ist es 100% kompatibel mit einer Vielzahl von Programmiersprachen und Skriptsprachen: C, C + +, C #, Bash, Python, GNU clsip, Emacs Lisp, GNU Smalltalk, Java, GNU awk, Pascal, wxWidgets, YCP , Tcl, PHP, Pike und andere.
Lassen Sie uns zunächst sehen, wie man `` gettext im Quellcode zu verwenden. Die Durchführungsbestimmungen je nach Programmiersprache für Ihr Projekt eingesetzt, aber die Syntax ist fast immer das gleiche, zumindest bei gängigen Programmiersprachen: Die Funktion enthält einfach die Nachricht String übersetzt werden. Anzumerken ist, dass fast immer verwendet die Kurzform, das entspricht einfach ein Unterstrich sein. Auf diese Weise wird der folgende Code in C:
printf(gettext("My name is %s\n"), mio_nome);
wird:
printf(_("My name is %s\n"), mio_nome);
Später wird der Befehl xgettext filtern Sie den Code, um die Funktion gettext nur eingefügt zu finden, um die Vorlage zu erstellen. Pot auf der Basis der extrahierten Strings aus dem Quellcode. . Ein Beispiel einer Datei Topf für eine Code mit der obigen Zeilen ist wie folgt:
#: include/myname.php:36
msgid "My name is %s\n"
msgstr ""
So starten Sie die Übersetzung im Programm verwendet wird `` msginit. Verschieben Sie die Datei. Kleine `auf` msginit ist möglich, eine neue Datei mit dem Skelett der neuen. Bit in der Zielsprache zu generieren. Zum Beispiel, um die Datei zu übersetzen, ins Italienische en_EN.po einfach den folgenden Befehl ausführen:
locale = de_DE-msginit-Eingang = en_EN.po
Das Programm erstellt die Datei it_IT.po, deren Inhalt sein wird wie die folgende:
#: include/myname.php:36
msgid "My name is %s\n"
msgstr "My name is %s\n"
An diesem Punkt, der Übersetzer nicht tun müssen, ist die Zeichenfolge übersetzen nach dem msgstr. Die Übersetzung kann mit einem beliebigen Editor getan werden direkt von der Kommandozeile oder über spezielle Programme wie poEdit . Das Ergebnis sieht wie folgt aus:
#: include/myname.php:36
msgid "My name is %s\n"
msgstr "Mi chiamo %s\n"
. Sobald die Übersetzung Dateien Po sollte in die Binär-Datei kompiliert werden durch die `Mo` msgfmt.:
msgfmt it_IT.po















10. Oktober 2008 um 15:48 Uhr
Hallo, ich habe vor einiger Zeit servicemenus für KDE3.
Jetzt bin ich bringen sie zu kde4 und ich wollte die Unterstützung der barbarischen Sprachen hinzufügen
In der Praxis wird das Menü 'ruft ein Bash-Script und anfangs hatte ich alle Fäden bereits eingegeben' im selben Skript übersetzt:
zum Beispiel
-----------------
en_msg_savefile = "Datei speichern ..."
it_msg_savefile = "Datei speichern ..."
etc. ..
msg_SaveFile eval = \ $ $ (echo $ {lang} _msg_SaveFile)
und dann echo "$ {} msg_SaveFile"
----------------
Jetzt frage ich mich, glauben Sie, können Sie 'leicht die Prozedur, die Sie wie oben beschrieben die scriptino in bash ausfindig zu machen?
Dank
10. Oktober 2008 um 21:25 Uhr
Ich fand, was ich suchte, dank suchen.
Ich möchte Sie bitten, eine Sache, es gibt einige Wörter in Englisch ist scivono in gewisser Weise, aber nicht in Italienisch oder anderen Sprachen.
zB: Fertig
Ich schreibe in Italienisch oder Fertigfabrikate, nach der Operation durchgeführt zuvor.
Wenn ich zum Beispiel ein Bild drehen wird "ein Fenster, das" Image Rotation casa.jpg "" Completed sagt "
Schreiben Sie in englischer Sprache immer "Fertig"!
Sie wissen, wie kann ich tun, um dieses Ding zu reparieren?
Vielen Dank im Voraus.
Viele fangen an KDE4 benutzen und ich habe mehrere E-Mails, die für einen Anschluss der Skripte in der Hoffnung geschrieben wurden. Außer, dass bisher gibt es 8 Sprachen, sondern eher "out erhöhen könnte.
Grüße Goofy
13. Oktober 2008 um 10:05
Hallo Josef,
entschuldigen Sie die Verspätung, sie sind sehr beschäftigt. Erste Antwort auf Ihre zweite Frage: Wenn Sie die Anwendung gettext die Korrespondenz zwischen dem Basis-Sprache und die verschiedenen Übersetzungen müssen unbedingt auf allen Worten einzigartig und, im Fall, wo die Übersetzung Sprache ist mehr artikuliert als dem des Abgangs zu wählen, ist sein bijektiv, wenn möglich. Wenn Sie über die biunivocità reden ist unmöglich, so müssen Sie nur Blöcke von Phrasen, anstatt einzelne Wörter zu übersetzen. Oder, wie es jeder gute Übersetzer, müssen Sie nur noch einige kleine Schlauheit. In Ihrem Fall würde ich übersetzen "Done" mit "Fertig ..." anstelle von "Abgeschlossene / in". Aber ich bin sicher, dass Sie komplexere Beispiele haben, wo diese einfache Lösung ist nicht genug, girameli hier, dass wir sie gemeinsam diskutieren.
Was Ihre erste Frage, die auch weiß, Sie haben die Lösung gefunden allein, ich sage euch, dass die Verwendung von gettext ist die einfache und schnelle und spart an eval und andere "Tricks" aufrufen
Suchen Sie ein praktisches Beispiel für sehr bedeutend unter dieser Adresse:
http://tldp.org/LDP/abs/html/localization.html~~V
Aber ... ich sicher, Sie haben es schon gesehen habe, dann lade ich Sie hier veröffentlichen ein kurzes Beispiel, wie du es umgesetzt zum Nutzen aller
Bye! Ivan
13. Oktober 2008 um 10:24
Hallo Ivan, danke für die Antwort.
Gib mir Zeit, um einen guten Namen auf die Variablen zu geben und zu beheben einige andere kleine Sache und dann schreiben Sie etwas mehr als 'komplex.
Wie auch immer, wenn ich laufen sie auf kde-look.org Öffentlichkeit, wie ich mit denen für KDE3 tat sich hier: http://www.kde-look.org/content/show.php/konq-pdf?content=37321
bald
13. Oktober 2008 um 23:55 Uhr
Apropos Tricks, die Sie erwähnt ..., um eine vollständige Übersetzung aller dettaggli eine Sprache zu erhalten, verwenden Sie einfach Koma-Taste Raute-Taste, die Sie erstellt haben, und nicht die Übersetzung selber. Zum Beispiel:
in der Quelldatei "gettext (msg_saveFile_title)"
und dann erstellen wir die Datei en.po, etc. it.po
auf diese Weise die Botschaft und die einzigartige und mehr "erlaubt es mir, männlich, weiblich oder neutral, und andere Funktionen nicht nutzen.
Was denken Sie?
Hallo
15. Oktober 2008 um 12:31
Was die Skripte, die Sie auf kde-look.org veröffentlichen, lassen Sie mich wissen, wenn Sie tun, ich bin neugierig. Die zweite Nachricht (mit der Raute-Taste mit gettext) Ich bin sicher, es wäre fast unmöglich zu erreichen: die Sprachen sind sehr verschieden voneinander sowohl morphologischen und syntaktischen Standpunkt aus ist die einzige Lösung, um alle notwendigen Sätze produzieren in der Ausgangssprache und generieren die entsprechenden Sätze in den Sprachen übersetzt. Es ist eine Quelle endloser Entlassungen, aber glauben Sie mir, es gibt keine Alternative Lösung mit Hilfe eines einfachen, aber sehr effektiv als gettext. Aber er kann immer reden, vielleicht ist es mir, dass ich nicht in der vollen Bedeutung Ihrer Post gefangen.
bye
Ivan
15. Oktober 2008 um 15:40 Uhr
Drehen ein wenig zu den Kanälen der Entwickler sind sich dessen bewusst wäre i18nc Internationalisierung kontextualisiert. In der Praxis erlaubt es Ihnen, eine Nachricht auf der Basis von Kontext angeben. Ich habe keine Tiefe, weil "ich" wurde gesagt, dass es besser wäre, dass jede Software hat in sorgento soo de_de Nachrichten auf Englisch und dann, durch lacoalizzazione, andere Sprachen. Also in Anbetracht dessen, kann ich nicht verwenden die Technik bereits erwähnt.
Auf jeden Fall habe ich auch gesagt, dass sollten Sie nicht verwenden gettext direkt, also kann ich es verwenden, um bash.
Nach dieser Einleitung, beschloss ich, diese Dinge mit der Technologie "eval" zu tun, und "wie man Zeiger in der Bash verwenden
Ich habe gerade heute servicemenus und haben ein Meer von Funktionen für die Arbeit mit PDF. Ich habe einige als die vorherige Version hinzugefügt. Ich vermisse immer noch die Übersetzungen, also sollten wir 'auf mich warten verschiedene Quellen von Übersetzern übersetzten Sätzen riconsegnino und ich denke, es wird gehen' ein bisschen Zeit (es gibt rund 8 Sprachen).
Ich habe versprochen, ein bisschen mehr als ein "komplexes, dann werde nehmen" eines der servicemenus ich geschrieben habe, wird abgeschnitten "alle Funktionen bis auf einen Kommentar und weitere" summarisch nur den Teil in Bezug auf die Internationalisierung.
Betreff:
Ein Servicemenü, der die Bilder extrahiert aus einem PDF-Dokument. (Das Programm, das dies nicht genannt pdfimages und e 'in poppler-utils enthalten).
Es wird dazu dienen, eine Datei aus. Desktop, um in ~ / .kde/share/kde4/services/ServiceMenus oder den Gegenwert des Systems (alle Benutzer) setzen.
Barbatrucco: Ich habe bemerkt, dass Sie können auch einen Unterordner, so haben Sie mehr 'bestellen.
Die Datei nennen wir pdfimages.desktop (beliebiger Name) und enthält:
Wenn Sie auf einen Eintrag klicken, starten Sie KDE, dass es 's in der Zeile Exec [lang], wobei lang und "die Sprache für KDE selbst festgelegt.
Wie Sie sehen, wird als scriptino sm_pdfimages.sh benannt und bestimmte Parameter übergeben werden: die Sprache, Handlung, die Datei auf dem zu arbeiten.
Lassen Sie die scriptino, die enthält:
Nun wollen wir sehen, was passiert, wenn Sie das Skript in Frage zu stellen:
zunächst einmal muss ich sagen, dass ich den Inhalt der Variable Aktion verwenden, die direkt als Funktionsaufruf
Auf diese Weise, wenn Einsparungen bei den Häusern, etc. ... 

Beim Ausführen einer Funktion (zB alle), ersetzt die Bash die Variablen mit dem Wert. Analizziamone nur ein: "$ {} msg_imagesRootName_title"
Diese Variable enthält den Titel eines Dialogfeld geben Sie die Sprache ist jedoch nicht
Der korrekte Satz mit einem kleinen Spiel, das mich fasziniert hat auf den ersten gewonnen wird, bereitet euch! ein Zeiger Grundstufe (sehr basisch)
First things first, definieren Sie zunächst die Variablen der Meldungen in jeder Sprache, das mich interessiert, und ich rufe die Variablen selbst mit einem Namen, die die Zeichenfolge der verwendeten Sprache enthält.
Also, um den Titel:
Wie man sehen kann die Differenz der Name ist nur der Anfang.
Dann definieren Sie eine Variable, deren Name und 'Wie oben, aber ohne die "lang" in dieser Weise beschrieben:
msg_imagesRootName_title eval = \ $ $ (echo $ {lang} _msg_imagesRootName_title)Wenn wir davon ausgehen, dass die Sprache im Gebrauch ist es, mit diesem Verfahren teilt der Shell msg_imagesRootName_title, um den Wert in $ it_msg_imagesRootName_title und das Spiel und 'getan zu nehmen.
In der Praxis wird die Variable enthalten msg_imagesRootName_title 'die richtige Botschaft auf der verwendeten Sprache.
Fertig.
Nach der Evaluierung mehrerer Alternativen, und so schien die meisten "einfach, um das Skript zu internationalisieren. Natürlich, wenn jemand eine andere Idee hat, wäre willkommen zu sein.
Fiuu .. mehr "einfach zu ihm als zu erklären, zu implementieren.
Wie bereits erwähnt, wird es noch einige Zeit dauern, vor der Veröffentlichung, auch wenn ich es jetzt tun könnte und Übersetzungen werden später hinzugefügt.
PS wenn Sie den Tag für den Code, um es mehr "lesbar setzen wollen, gehen Sie voran.
Guten Tag an alle
Joseph
15. Oktober 2008 um 16:13
Auflaufform geben, dies ist nicht ein einfacher Kommentar, sondern ein Beitrag mit controfiocchi! Komplimente
Ich gebe zu, ich habe keine Zeit gehabt, den Code zu testen, aber die Logik ist da und die Erklärung ist klar.
Sie sind der Erste, der Eintrag in meiner Blogroll zu verdienen! 
Ivan
15. Oktober 2008 um 21:42 Uhr
Hallo Ivan, danke für die Blogroll.
. 
Der Kommentar erscheint wegen des langen Codes
Ich habe noch zu verstehen, warum "sollten Sie nicht verwenden gettext direkt, schien es sehr einfach und leicht erweiterbar.
In jedem Fall sind diese Service-Menüs ein Ding nicht fertig, mit wenig Kontrolle über den Fluss von Befehlen.
Jetzt, wo ich alles in einem Skript habe ich die Chance "in der Zeit auf viele weitere zählen 'prüft. Wenn man sich die Speisekarte ich getan hatte, schau, der Fluss, da jeder Befehl innerhalb der sequenziellen Dateien. Desktop konnte ich nicht nutzen, wenn oder Variablen. Ich erinnere mich eigentlich Purzelbäume, um nicht auf externe Dateien zurückgreifen
Ich hoffe, dass die Stimuli Beispiel ein wenig von Menschen, um Kontextmenüs zu erstellen veröffentlicht. Schließlich haben wir uns, dass wir verbessern unsere kde4, oder zumindest habe ich mit mir und mir geht es gut dort.
Wenn ich versuche ich, diese Arbeit auf kde.org pdf eingeben, damit kann jeder arbeiten problemlos, ohne etwas zu installieren.
An alle:
Tipps und Anregungen für neue Funktionen sind willkommen.
Ich bin kein Programmierer und Sie haben nicht einmal zu sein, daran teilzunehmen. Trotz dieser vielen Menschen auf der ganzen Welt haben sich bei mir bedankt für etwas, was ich selbst für möglich gehalten hätte.
Ich wünsche allen gute Arbeit mit ihren kde4 oder was auch immer. (Immer auf offene Systeme).
Joseph
24. November 2008 um 1:03
Obwohl mit einer gewissen Verzögerung, veröffentlichte ich gestern Servicemenü ich gearbeitet habe.
Ich legte die Anzeige ist auf kde-look.org dass der http://www.egregorion.net
Es gibt die tar.gz und deb für Intrepid.
Viel Spaß
Joseph