ECMPoQmTools

This module provides the ecm_process_po_files_as_qm and ecm_install_po_files_as_qm functions for generating QTranslator (.qm) catalogs from Gettext (.po) catalogs, and the ecm_create_qm_loader function for generating the necessary code to load them in a Qt application or library.

ecm_process_po_files_as_qm(<lang> [ALL]
                           [INSTALL_DESTINATION <install_destination>]
                           PO_FILES <pofile> [<pofile> [...]])

Compile .po files into .qm files for the given language.

If INSTALL_DESTINATION is given, the .qm files are installed in <install_destination>/<lang>/LC_MESSAGES. Typically, <install_destination> is set to share/locale.

ecm_process_po_files_as_qm creates a “translations” target. This target builds all .po files into .qm files. If ALL is specified, these rules are added to the “all” target (and so the .qm files will be built by default).

ecm_create_qm_loader(<source_files_var> <catalog_name>)

Generates C++ code which ensures translations are automatically loaded at startup. The generated files are appended to <source_files_var>.

It assumes that the .qm file for the language code <lang> is installed as <sharedir>/locale/<lang>/LC_MESSAGES/<catalog_name>.qm, where <sharedir> is one of the directories given by the GenericDataLocation of QStandardPaths.

Typical usage is like:

set(mylib_SRCS foo.cpp bar.cpp)
ecm_create_qm_loader(mylib_SRCS mylib)
add_library(mylib ${mylib_SRCS})
ecm_install_po_files_as_qm(<podir>)

Searches for .po files and installs them to the standard location.

This is a convenience function which relies on all .po files being kept in <podir>/<lang>/, where <lang> is the language the .po files are written in.

For example, given the following directory structure:

po/
  fr/
    mylib.po

ecm_install_po_files_as_qm(po) compiles mylib.po into mylib.qm and installs it in <install_destination>/fr/LC_MESSAGES. <install_destination> defaults to ${LOCALE_INSTALL_DIR} if defined, otherwise it uses ${CMAKE_INSTALL_LOCALEDIR} if that is defined, otherwise it uses share/locale.

Since pre-1.0.0.