Qt Quick I18N

Generating translation files (TS and QM) for a Qt Quick application.

When you run the example application, the QML runtime automatically loads a translation from the i18n subdirectory of the directory that contains the main .qml file, based on the system language.

Marking Text as Translatable

In the Main.qml file, use the qsTr command to mark UI text as translatable:

         Text {
             text: qsTr("Hello")

Enabling Translation

In the main.cpp file, use QQmlApplicationEngine to automatically load translation files from a subdirectory called i18n in the directory that contains the main QML file:

 #include <QQmlApplicationEngine>

 int main(int argc, char *argv[])
 {
     QGuiApplication app(argc, argv);
     QQmlApplicationEngine engine;

The translation file names in the i18n subdirectory must have the prefix qml_. For example, qml_en_AU.ts.

Creating Translation Files

Add the LinguistTools module as a value of the find_package command in the CMakeLists.txt file:

 find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick Qml LinguistTools)

Define the translation files to generate in the qt_add_translations command:

 qt_add_translations(qmli18n
     RESOURCE_PREFIX /qt/qml/Translated/i18n
     TS_FILE_BASE qml
     TS_FILE_DIR i18n
 )

Build the application to generate TS and QM files.

Note: On Android, make sure to include the QM files as resources.

Adding Translations

To create translations for new languages, copy i18n/base.ts to i18n/qml_<lang>.ts. You can use Qt Linguist to translate the strings.

Example project @ code.qt.io