I created two simple applications using Qt Creator master of new project, one uses qmake, the other CMake.
The qmake based app translates Ok, but the CMake one does not. I started to debug and observe why QTranslator does not load qm, file which I generated using Qt Linguist.
main.cpp:
QGuiApplication app(argc, argv);
QTranslator translator;
QStringList uiLanguages = QLocale::system().uiLanguages();
for (const QString &locale : uiLanguages) {
const QString baseName = "TranslationTest_" + QLocale(locale).name();
qDebug() << "baseName: " << baseName;
if (translator.load(":/i18n/" + baseName)) {
app.installTranslator(&translator);
break;
}
else {
qDebug() << "Translator does not load. ";
}
}
QQmlApplicationEngine engine;
Console output:
QML debugging is enabled. Only use this in a safe environment.
baseName: "TranslationTest_ru_RU" Translator does not load.
baseName: "TranslationTest_en_US" Translator does not load.
CMakeLists.txt
cmake_minimum_required(VERSION 3.28)
project(TranslationTest VERSION 0.1 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(TS_FILES TranslationTest_ru_RU.ts)
set(PROJECT_SOURCES main.cpp qml.qrc ${TS_FILES})
find_package(QT NAMES Qt5 COMPONENTS Core Quick LinguistTools REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Quick LinguistTools REQUIRED)
add_executable(TranslationTest ${PROJECT_SOURCES})
qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
target_compile_definitions(TranslationTest
PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
target_link_libraries(TranslationTest
PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Quick)
Why does QTranslator not load qm files when I use CMake?