2010-04-22 12 views
8

Sto migrando un progetto da autotools a cmake. Ho una domanda sul supporto gettext.Esiste una funzione cmake per aggiornare i file .pot?

C'è un moduli FindGettext.cmake esistente che fornisce una bella funzione:

GETTEXT_CREATE_TRANSLATIONS(foo.pot ALL fr.po de.po) 

in cui si fornisce un file pentola e tradotto fil Po; la funzione si occupa di trasformare i file po in file OGM e aggiungere i target di installazione corretti per assicurarsi che i file possano essere trovati in fase di runtime. Tutto bene e bene.

Ora arriva la domanda: come aggiorni i tuoi file pot e i tuoi file po quando aggiungi nuovi messaggi?

Per questo, gli autotools generano un target "update-po", che (da quello che ho capito), legge un POTFILES.in con gli elenchi di tutti i file contenenti stringhe tradotte, lo mescola con altre informazioni e finisce chiamare xgetext per generare il po. Credo che il compito coresponding Makefile è quello che contiene qualcosa come:

case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ 
    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ 
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ 
    --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ 
    --files-from=$(srcdir)/POTFILES.in \ 
    --copyright-holder='$(COPYRIGHT_HOLDER)' \ 
    --msgid-bugs-address="$$msgid_bugs_address" \ 
;; \ 
*) \ 
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ 
    --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ 
    --files-from=$(srcdir)/POTFILES.in \ 
    --copyright-holder='$(COPYRIGHT_HOLDER)' \ 
    --package-name="$${package_gnu}ube" \ 
    --package-version='0.4.0-dev' \ 
    --msgid-bugs-address="$$msgid_bugs_address" \ 
;; \ 
esac 

Quindi, prima di reinventare la ruota, c'è una funzione CMake esistente per fare la stessa cosa? O devo trovare l'eseguibile xgettext, elenca i file e farlo a mano? La versione makefile sembra abbastanza complicata (anche se sembra che gestisca molti casi); Non mi dispiacerebbe non dover scrivere il cmake equivalente;)

Grazie

PH

risposta

6

Non lasciate che l'Autotool gonfiare spaventare. :-)

È possibile utilizzare il seguente codice:

SET(_potFile ${PROJECT_NAME}.pot) 
ADD_CUSTOM_COMMAND(OUTPUT ${_potFile} 
    COMMAND ${XGETTEXT_CMD} ${_xgettext_option_list} -o ${_potFile} ${_src_list} 
    DEPENDS ${_src_list} 
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} 
    COMMENT "Extract translatable messages to ${_potFile}" 
) 

ADD_CUSTOM_TARGET(pot_file ${_all} 
DEPENDS ${_potFile} 
) 

Per i programmi in C, io sto usando segue come _xgettext_option_list

--language=C --keyword=_ --keyword=N_ --keyword=C_:1c,2 --keyword=NC_:1c,2 -s 
--package-name=${PROJECT_NAME} --package-version=${PRJ_VER} 

ho reinventato la ruota quando la FindGettext non ha avuto la opzione ALL (quando era cmake-2.4) :-)

2

Secondo la pagina wiki kde this, utilizzando cmake per la modifica in modo non è una buona idea. Meglio usare lo script standalone per aggiornare le traduzioni.

Infatti, l'estrazione e la fusione di messaggi non fa map bene sul concetto di CMake out-of-source costruisce e CMake non possono fornire troppo aiuto per questo passaggio, sia.

Quindi, in questo tutorial, gestiremo il primo passo con uno script di shell standalone e solo il secondo passo verrà gestito da CMake.

+0

Mentre la risposta potrebbe essere utile, si sta rispondendo a una domanda di 7 anni. Si prega di verificare le date di invio dei messaggi a cui si desidera rispondere prima di postare. –

+3

Ma qual è il problema che la domanda ha 7 anni? Le persone stanno cercando questa domanda (me compreso) e vanno su questa pagina. E qui non c'erano tali informazioni. Dopo aver esaminato questa domanda, ho fornito i miei risultati qui per i futuri ricercatori. – Ashark

Problemi correlati