2010-04-22 16 views
8

Estoy migrando un proyecto de autotools a cmake. Tengo una pregunta sobre el soporte de gettext.¿Hay una función cmake para actualizar los archivos .pot?

hay una módulos FindGettext.cmake existentes, que proporcionen una buena función:

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

en que proporciona un archivo de olla y traducida fil po; la función se ocupa de convertir los archivos po en archivos gmo y agrega los objetivos de instalación adecuados para garantizar que los archivos se puedan encontrar en tiempo de ejecución. Todo bien y bien.

Ahora viene la pregunta: ¿cómo se actualizan sus archivos pot y po archivos cuando se agregan nuevos mensajes?

Para esto, autotools generaría un objetivo "update-po", que (por lo que entiendo), lee un POTFILES.in con las listas de todos los archivos que contienen cadenas traducidas, lo mezcla con otra información, y termina llamando a xgetext para generar el po. Creo que la tarea Makefile coresponding es la que contiene algo como:

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 

Por lo tanto, antes de que reinventar la rueda, es que hay una función cmake existente para hacer lo mismo? ¿O tengo que encontrar el ejecutable xgettext, enumerar los archivos y hacer esto a mano? La versión makefile parece bastante complicada (aunque parece manejar muchos casos); No me importaría no tener que escribir el cmake equivalente;)

Gracias

PH

Respuesta

6

No deje que la hinchazón AutoTool asuste. :-)

Usted puede utilizar el siguiente código:

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} 
) 

Para programas en C, estoy usando siguiente como _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} 

Yo reinventar la rueda cuando el FindGettext no tenía la opción ALL (cuando era cmake-2.4) :-)

2

Según la página wiki de this kde, usando cmake para editarlo Urces no es una buena idea. Es mejor utilizar un script independiente para actualizar las traducciones.

De hecho, la extracción y la fusión de los mensajes no se adaptan bien al concepto de CMake fuera de la fuente se acumula, y CMake no pueden proporcionar demasiada ayuda para este paso, tampoco.

Por lo tanto, en este tutorial, manejaremos el primer paso con un script de shell independiente , y solo el segundo paso será manejado por CMake.

+0

Si bien su respuesta puede ser útil, está respondiendo una pregunta de hace 7 años. Verifique las fechas de publicación de los mensajes que desea responder antes de publicarlos. –

+3

Pero, ¿cuál es el problema que esa pregunta tiene 7 años? Las personas están buscando esta pregunta (incluyéndome a mí) y ve a esta página. Y aquí no había tal información. Después de haber explorado esta pregunta, proporcioné mis resultados aquí para futuros buscadores. – Ashark

Cuestiones relacionadas