2009-10-19 7 views
9

Ich habe Programm mit mehreren Domänen, einige Quelldateien enthalten dgettext() Aufrufe mit verschiedenen Textdomänen.gettext: extrahiere dgettext() Zeichenfolgen zu domain.po Dateien

Wie extrahiert man Gettext-Zeichenfolgen in mehrere .po-Dateien? Zum Beispiel sollte der Anruf dgettext('one', 'Hello') an one.po und dgettext('two', 'Bye') an two.po gehen. xgettext ignoriert nur die Textdomäne und fügt alles in eine Datei ein.

+0

Ich fand einen [Vorschlag] (http://Stackoverflow.com/a/5354360/645186) auf, wie man jede Domäne getrennt analysiert. Dies ist jedoch eine Problemumgehung. – Shef

Antwort

0

Wenn Sie Linux verwenden, verwenden Sie das Programm gtranslator, um * .po zu manipulieren und Ihre * .po-Dateien zu testen.

2

Zuerst müssen Sie die Domänen trennen.

Zum Beispiel: Angenommen, Sie haben eine Domäne für lib und eine für App, dann eine Verknüpfung für den dgettext() Anruf erstellen;

_app(msg) -> dgettext("app", msg); 

und eine für die lib Domäne:

_lib(msg) -> dgettext("lib", msg); 

Fügen Sie diese Anrufe ganzen Code wie folgt;

show_message(_app("Choose a directory to save your work.")); 
show_message(_lib("No space left on device.")); 

Denken Sie daran, dass Sie bindtextdomain() für beide Domains aufrufen müssen, wenn die Anwendung initialisiert wird.

extrahieren sie Sie andere Suchbegriffe zu xgettext auf allen Dateinamen in der Quellbaum, der enthält diese Markierungen angeben müssen:

xgettext --keyword=_app -d domain1 filenames... 
xgettext --keyword=_lib -d domain2 filenames... 

Schließlich kompilieren beide der .po-Dateien in ihre binäre .mo Variante und kopieren/installieren Sie sie an der richtigen Stelle.

+0

Ich kannte diese Lösung bereits, wie in den Kommentaren der Frage erwähnt, aber danke für die Mühe. – Shef

+0

Wenn Sie denken, dass dies eine Problemumgehung ist, denke ich nicht, dass es Lösungen für das Problem geben wird, die keine Problemumgehungen sind. Die Alternative wäre, ein eigenes Programm zu schreiben, das die Aufrufe von dgettext() extrahiert, aber dann würde man praktisch die gesamte Logik von xgettext duplizieren. –

+1

Das ist keine Lösung, aber ich werde Ihnen das Kopfgeld geben, weil es sonst verschwendet wird. – Shef