From 4d6f5b34100a1a9192d5555daa6f81a510f26e11 Mon Sep 17 00:00:00 2001 From: ababi <albert.babi@savoirfairelinux.com> Date: Thu, 18 Feb 2021 19:15:26 +0100 Subject: [PATCH] translations: revise access to translations for GNU/Linux - correct translations (.qm) install path for cmake - use JAMI_INSTALL_PREFIX to fetch translations - create "share/ring/translations" inside build dir to store .qm files Change-Id: I127cbad1d4b00a628d79e9654ed471f456a550e8 --- CMakeLists.txt | 22 ++++++++++++---------- src/mainapplication.cpp | 41 ++++++++++++++++++++++++++++++++--------- src/utils.cpp | 8 ++++---- 3 files changed, 48 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c9de75e91..d4b076432 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -209,7 +209,7 @@ add_executable(${PROJECT_NAME} ${QML_RESOURCES_QML} ${LRC_SRC_PATH}/webresource.qrc) -set(JAMI_DATA_PATH "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}") +set(JAMI_DATA_PREFIX "${CMAKE_INSTALL_PREFIX}/share") find_library(ringclient ringclient ${LRCLIBDIR} NO_DEFAULT_PATH) find_library(qrencode qrencode) @@ -233,13 +233,13 @@ install(TARGETS jami-qt # install .desktop in XDG desktop dir so that it is recognized by the system install(FILES ${PROJECT_SOURCE_DIR}/jami-qt.desktop - DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications) + DESTINATION ${JAMI_DATA_PREFIX}/applications) # install .desktop in the jami-qt data dir, so that it can be copied to the # autostart dir by the client install(FILES ${PROJECT_SOURCE_DIR}/jami-qt.desktop DESTINATION - ${JAMI_DATA_PATH} + "${JAMI_DATA_PREFIX}/${PROJECT_NAME}" PERMISSIONS WORLD_READ OWNER_WRITE @@ -247,16 +247,16 @@ install(FILES ${PROJECT_SOURCE_DIR}/jami-qt.desktop GROUP_READ ) -# adjust JAMI_DATA_PATH for snap package +# adjust JAMI_DATA_PREFIX for snap package # (this must come after all 'install' commands that refer to -# JAMI_DATA_PATH; the following value is not meant to be used for +# JAMI_DATA_PREFIX; the following value is not meant to be used for # any install destinations) if(DEFINED ENV{SNAPCRAFT_PROJECT_NAME}) - set(JAMI_DATA_PATH "/snap/$ENV{SNAPCRAFT_PROJECT_NAME}/current/usr/share/${PROJECT_NAME}") + set(JAMI_DATA_PREFIX "/snap/$ENV{SNAPCRAFT_PROJECT_NAME}/current/usr/share") endif() -# (this must come after the above adjustment to JAMI_DATA_PATH) -target_compile_definitions(jami-qt PRIVATE JAMI_DATA_DIR="${JAMI_DATA_PATH}") +# (this must come after the above adjustment to JAMI_DATA_PREFIX) +target_compile_definitions(jami-qt PRIVATE JAMI_INSTALL_PREFIX="${JAMI_DATA_PREFIX}") # logos install(FILES images/jami.svg @@ -309,11 +309,13 @@ endif() # translations if(Qt5LinguistTools_FOUND) message("Releasing and copying translation files") + file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/share/ring/translations/") file(GLOB TS_FILES ${PROJECT_SOURCE_DIR}/translations/*.ts) + set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION "share/ring/translations") qt5_add_translation(QM_FILES ${TS_FILES}) add_custom_target(translations ALL DEPENDS ${QM_FILES}) - install(FILES ${QM_FILES} - DESTINATION "${CMAKE_INSTALL_PREFIX}/share/libringclient/translations") + install(DIRECTORY "${CMAKE_BINARY_DIR}/share/ring/translations/" + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/ring/translations) endif() # uninstall diff --git a/src/mainapplication.cpp b/src/mainapplication.cpp index 27b6aae5f..4dda5baa0 100644 --- a/src/mainapplication.cpp +++ b/src/mainapplication.cpp @@ -218,9 +218,14 @@ MainApplication::init() void MainApplication::loadTranslations() { - auto appDir = qApp->applicationDirPath() + "/"; - const auto locale_name = QLocale::system().name(); - const auto locale_lang = locale_name.split('_')[0]; +#if defined(Q_OS_LINUX) && defined(JAMI_INSTALL_PREFIX) + QString appDir = JAMI_INSTALL_PREFIX; +#else + QString appDir = qApp->applicationDirPath() + QDir::separator() + "share"; +#endif + + QString locale_name = QLocale::system().name(); + QString locale_lang = locale_name.split('_')[0]; QTranslator* qtTranslator_lang = new QTranslator(this); QTranslator* qtTranslator_name = new QTranslator(this); @@ -236,22 +241,40 @@ MainApplication::loadTranslations() QTranslator* lrcTranslator_lang = new QTranslator(this); QTranslator* lrcTranslator_name = new QTranslator(this); if (locale_name != locale_lang) { - if (lrcTranslator_lang->load(appDir + "share/libringclient/translations/lrc_" + locale_lang)) + if (lrcTranslator_lang->load(appDir + + QDir::separator() + "libringclient" + + QDir::separator() + "translations" + + QDir::separator() + "lrc_" + + locale_lang)) { installTranslator(lrcTranslator_lang); + } } - if (lrcTranslator_name->load(appDir + "share/libringclient/translations/lrc_" + locale_name)) + if (lrcTranslator_name->load(appDir + + QDir::separator() + "libringclient" + + QDir::separator() + "translations" + + QDir::separator() + "lrc_" + + locale_name)) { installTranslator(lrcTranslator_name); + } QTranslator* mainTranslator_lang = new QTranslator(this); QTranslator* mainTranslator_name = new QTranslator(this); if (locale_name != locale_lang) { - if (mainTranslator_lang->load(appDir + "share/ring/translations/ring_client_windows_" - + locale_lang)) + if (mainTranslator_lang->load(appDir + + QDir::separator() + "ring" + + QDir::separator() + "translations" + + QDir::separator() + "ring_client_windows_" + + locale_lang)) { installTranslator(mainTranslator_lang); + } } - if (mainTranslator_name->load(appDir + "share/ring/translations/ring_client_windows_" - + locale_name)) + if (mainTranslator_name->load(appDir + + QDir::separator() + "ring" + + QDir::separator() + "translations" + + QDir::separator() + "ring_client_windows_" + + locale_name)) { installTranslator(mainTranslator_name); + } } void diff --git a/src/utils.cpp b/src/utils.cpp index 595eb9b7b..6073b1d89 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -70,15 +70,15 @@ Utils::CreateStartupLink(const std::wstring& wstrAppName) return Utils::CreateLink(programPath.c_str(), linkPath.c_str()); #else QString desktopPath; - /* cmake should set JAMI_DATA_DIR, otherwise it checks the following dirs + /* cmake should set JAMI_INSTALL_PREFIX, otherwise it checks the following dirs * - /usr/<data dir> * - /usr/local/<data dir> * - default install data dir */ -#ifdef JAMI_DATA_DIR - desktopPath = JAMI_DATA_DIR; - desktopPath += "/jami-qt.desktop"; +#ifdef JAMI_INSTALL_PREFIX + desktopPath = JAMI_INSTALL_PREFIX; + desktopPath += "/jami-qt/jami-qt.desktop"; #else desktopPath = "share/jami-qt/jami-qt.desktop"; QStringList paths = { -- GitLab