ECMPoQmTools — Extra CMake Modules 5.43.0 documentation

# 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.