Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. CMake +Qt6 +lupdate
Forum Updated to NodeBB v4.3 + New Features

CMake +Qt6 +lupdate

Scheduled Pinned Locked Moved Solved General and Desktop
cmakelinguist
13 Posts 4 Posters 3.4k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • artwawA artwaw

    @SGaist Hi, long time no see!

    cmake_minimum_required(VERSION 3.5)
    
    project(CamoGenerator VERSION 0.1 LANGUAGES CXX)
    
    set(CMAKE_AUTOUIC ON)
    set(CMAKE_AUTOMOC ON)
    set(CMAKE_AUTORCC ON)
    
    set(CMAKE_CXX_STANDARD 17)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    
    find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Svg LinguistTools)
    find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Svg LinguistTools)
    
    set(DIST_FILES
        COPYING
    )
    
    set(PROJECT_SOURCES
            main.cpp res.qrc
            MainWindow.h MainWindow.cpp MainWindow.ui
            PrefsDialog.h PrefsDialog.cpp PrefsDialog.ui
            AboutDialog.h AboutDialog.cpp AboutDialog.ui
    )
    
    if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
        qt_add_executable(CamoGenerator
            MANUAL_FINALIZATION
            ${PROJECT_SOURCES}
            ${DIST_FILES}
        )
    else()
        add_executable(CamoGenerator
            ${PROJECT_SOURCES}
        )
    endif()
    
    qt_add_translations(CamoGenerator TS_FILES CamoGenerator_en.ts CamoGenerator_pl.ts
        RESOURCE_PREFIX /i18n
        SOURCES ${PROJECT_SOURCES}
        LUPDATE_OPTIONS -source-language en -target-language pl
    )
    
    target_link_libraries(CamoGenerator PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
    target_link_libraries(CamoGenerator PRIVATE Qt${QT_VERSION_MAJOR}::Svg)
    
    if(${QT_VERSION} VERSION_LESS 6.1.0)
      set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER pl.com.trollnet.CamoGenerator)
    endif()
    set_target_properties(CamoGenerator PROPERTIES
        ${BUNDLE_ID_OPTION}
        MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
        MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
        MACOSX_BUNDLE TRUE
        WIN32_EXECUTABLE TRUE
    )
    
    include(GNUInstallDirs)
    install(TARGETS CamoGenerator
        BUNDLE DESTINATION .
        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    )
    
    if(QT_VERSION_MAJOR EQUAL 6)
        qt_finalize_executable(CamoGenerator)
    endif()
    

    I also verified that if run manually, with source files specified, lupdate works.

    kkoehneK Offline
    kkoehneK Offline
    kkoehne
    Moderators
    wrote on last edited by
    #4

    @artwaw you need to run the 'update_translations' target at least once from your build system.

    Director R&D, The Qt Company

    kkoehneK 1 Reply Last reply
    1
    • kkoehneK kkoehne

      @artwaw you need to run the 'update_translations' target at least once from your build system.

      kkoehneK Offline
      kkoehneK Offline
      kkoehne
      Moderators
      wrote on last edited by
      #5

      @kkoehne

      qt_add_translations(CamoGenerator TS_FILES CamoGenerator_en.ts CamoGenerator_pl.ts
          RESOURCE_PREFIX /i18n
          SOURCES ${PROJECT_SOURCES}
          LUPDATE_OPTIONS -source-language en -target-language pl
      )
      

      The -target-language option looks wrong, as it makes no sense for CamoGenerator_en.ts. You should be able to just leave it out, actually, as lupdate should be clever enough to figure it out from the file name.

      For CamoGenerator_en.ts, consider passing it by NATIVE_QS_FILE (at least with Qt 6.6):

      qt_add_translations(CamoGenerator 
          TS_FILES CamoGenerator_pl.ts
          NATIVE_TS_FILE CamoGenerator_en.ts 
          RESOURCE_PREFIX /i18n
          SOURCES ${PROJECT_SOURCES}
          LUPDATE_OPTIONS -source-language en
      )
      

      Director R&D, The Qt Company

      artwawA 1 Reply Last reply
      1
      • kkoehneK kkoehne

        @kkoehne

        qt_add_translations(CamoGenerator TS_FILES CamoGenerator_en.ts CamoGenerator_pl.ts
            RESOURCE_PREFIX /i18n
            SOURCES ${PROJECT_SOURCES}
            LUPDATE_OPTIONS -source-language en -target-language pl
        )
        

        The -target-language option looks wrong, as it makes no sense for CamoGenerator_en.ts. You should be able to just leave it out, actually, as lupdate should be clever enough to figure it out from the file name.

        For CamoGenerator_en.ts, consider passing it by NATIVE_QS_FILE (at least with Qt 6.6):

        qt_add_translations(CamoGenerator 
            TS_FILES CamoGenerator_pl.ts
            NATIVE_TS_FILE CamoGenerator_en.ts 
            RESOURCE_PREFIX /i18n
            SOURCES ${PROJECT_SOURCES}
            LUPDATE_OPTIONS -source-language en
        )
        
        artwawA Offline
        artwawA Offline
        artwaw
        wrote on last edited by
        #6

        @kkoehne Hi and thank you for the suggestion.

        The -target-language and other options are the artefacts of me trying to make it work by specifying extra options I never had to use.

        Now with regards to building additional target - build step is:

        cmake --build [path-to-folder]build-CamoGenerator-Qt_6_6_1_for_macOS-Debug --target all
        

        Do I need to specify an additional build step now? This used to be more straightforward (and better documented) in the past.

        For more information please re-read.

        Kind Regards,
        Artur

        kkoehneK 1 Reply Last reply
        0
        • artwawA artwaw

          @kkoehne Hi and thank you for the suggestion.

          The -target-language and other options are the artefacts of me trying to make it work by specifying extra options I never had to use.

          Now with regards to building additional target - build step is:

          cmake --build [path-to-folder]build-CamoGenerator-Qt_6_6_1_for_macOS-Debug --target all
          

          Do I need to specify an additional build step now? This used to be more straightforward (and better documented) in the past.

          kkoehneK Offline
          kkoehneK Offline
          kkoehne
          Moderators
          wrote on last edited by
          #7

          Try to do a

          cmake --build [path-to-folder]build-CamoGenerator-Qt_6_6_1_for_macOS-Debug --target update_translations
          

          first. Maybe it works also in one go, though I'm not sure:

          cmake --build [path-to-folder]build-CamoGenerator-Qt_6_6_1_for_macOS-Debug --target all update_translations
          

          The idea is that you don't want to run lupdate on every call, only at certain times, when you're actually ready to do the translations. So that why the target is not a default one.

          Director R&D, The Qt Company

          artwawA 1 Reply Last reply
          1
          • kkoehneK kkoehne

            Try to do a

            cmake --build [path-to-folder]build-CamoGenerator-Qt_6_6_1_for_macOS-Debug --target update_translations
            

            first. Maybe it works also in one go, though I'm not sure:

            cmake --build [path-to-folder]build-CamoGenerator-Qt_6_6_1_for_macOS-Debug --target all update_translations
            

            The idea is that you don't want to run lupdate on every call, only at certain times, when you're actually ready to do the translations. So that why the target is not a default one.

            artwawA Offline
            artwawA Offline
            artwaw
            wrote on last edited by
            #8

            @kkoehne That did a trick, thank you. I am not sure I appreciate the extra hoops one needs to go through to have the result but I got it working.

            NATIVE_TS_FILE is something I'd need to read on, is there any documentation? I could not find it in the help system.

            At any rate, marking this as solved, thank you a thousand times!

            For more information please re-read.

            Kind Regards,
            Artur

            kkoehneK 1 Reply Last reply
            0
            • artwawA artwaw has marked this topic as solved on
            • artwawA artwaw

              @kkoehne That did a trick, thank you. I am not sure I appreciate the extra hoops one needs to go through to have the result but I got it working.

              NATIVE_TS_FILE is something I'd need to read on, is there any documentation? I could not find it in the help system.

              At any rate, marking this as solved, thank you a thousand times!

              kkoehneK Offline
              kkoehneK Offline
              kkoehne
              Moderators
              wrote on last edited by
              #9

              @artwaw said in CMake +Qt6 +lupdate:

              I am not sure I appreciate the extra hoops one needs to go through to have the result but I got it working.

              Yeah, it's a tad ugly. You should have gotten a warning like

              Translation file '`CamoGenerator_en.ts' does not exist. Consider building the target 'update_translations' to create an initial version of that file.
              

              on the first run though?

              Director R&D, The Qt Company

              artwawA 1 Reply Last reply
              0
              • kkoehneK kkoehne

                @artwaw said in CMake +Qt6 +lupdate:

                I am not sure I appreciate the extra hoops one needs to go through to have the result but I got it working.

                Yeah, it's a tad ugly. You should have gotten a warning like

                Translation file '`CamoGenerator_en.ts' does not exist. Consider building the target 'update_translations' to create an initial version of that file.
                

                on the first run though?

                artwawA Offline
                artwawA Offline
                artwaw
                wrote on last edited by
                #10

                @kkoehne Not with my initial setup. After I altered the add_translations line to match your suggestion it indeed popped up but then I was already making changes to the build command.

                For more information please re-read.

                Kind Regards,
                Artur

                kkoehneK 1 Reply Last reply
                0
                • artwawA artwaw

                  @kkoehne Not with my initial setup. After I altered the add_translations line to match your suggestion it indeed popped up but then I was already making changes to the build command.

                  kkoehneK Offline
                  kkoehneK Offline
                  kkoehne
                  Moderators
                  wrote on last edited by
                  #11

                  @artwaw said in CMake +Qt6 +lupdate:

                  Not with my initial setup. After I altered the add_translations line to match your suggestion it indeed popped up but then I was already making changes to the build command.

                  Weird. I'll try to replicate this...

                  Btw, seeing your original CMakeLists.txt file: It seems you want to keep compatibility with older Qt 6 versions, and even Qt 5. Please note that qt_add_translations() was only added to Qt 6.2, so you might need to guard it by an Qt version check. And the NATIVE_TS_FILE option only will actually appear in Qt 6.7: https://doc-snapshots.qt.io/qt6-dev/qtlinguist-cmake-qt-add-translations.html

                  Director R&D, The Qt Company

                  artwawA ekkescornerE 2 Replies Last reply
                  1
                  • kkoehneK kkoehne

                    @artwaw said in CMake +Qt6 +lupdate:

                    Not with my initial setup. After I altered the add_translations line to match your suggestion it indeed popped up but then I was already making changes to the build command.

                    Weird. I'll try to replicate this...

                    Btw, seeing your original CMakeLists.txt file: It seems you want to keep compatibility with older Qt 6 versions, and even Qt 5. Please note that qt_add_translations() was only added to Qt 6.2, so you might need to guard it by an Qt version check. And the NATIVE_TS_FILE option only will actually appear in Qt 6.7: https://doc-snapshots.qt.io/qt6-dev/qtlinguist-cmake-qt-add-translations.html

                    artwawA Offline
                    artwawA Offline
                    artwaw
                    wrote on last edited by
                    #12

                    @kkoehne Thank you for the docs link - that all makes much more sense now!

                    As for backward compatibility - no, I don't intent on keeping that, simply didn't clean the autogenerated template yet. I'll bear in mind narrowing the checks to ver=>6.2 though.

                    Again, many thanks for sharing the knowledge!

                    For more information please re-read.

                    Kind Regards,
                    Artur

                    1 Reply Last reply
                    0
                    • kkoehneK kkoehne

                      @artwaw said in CMake +Qt6 +lupdate:

                      Not with my initial setup. After I altered the add_translations line to match your suggestion it indeed popped up but then I was already making changes to the build command.

                      Weird. I'll try to replicate this...

                      Btw, seeing your original CMakeLists.txt file: It seems you want to keep compatibility with older Qt 6 versions, and even Qt 5. Please note that qt_add_translations() was only added to Qt 6.2, so you might need to guard it by an Qt version check. And the NATIVE_TS_FILE option only will actually appear in Qt 6.7: https://doc-snapshots.qt.io/qt6-dev/qtlinguist-cmake-qt-add-translations.html

                      ekkescornerE Offline
                      ekkescornerE Offline
                      ekkescorner
                      Qt Champions 2016
                      wrote on last edited by ekkescorner
                      #13

                      @kkoehne said in CMake +Qt6 +lupdate:
                      cool - sounds to become easier and more flexible in 6.7. will test with beta2

                      And the NATIVE_TS_FILE option only will actually appear in Qt 6.7: https://doc-snapshots.qt.io/qt6-dev/qtlinguist-cmake-qt-add-translations.html

                      I'm developing always in english, where in most cases german is used by customers. Because I'm writing code in 'developer-english' it may happen, that customer requests to change a translation. for these cases and to handle plural forms I always also add an en ts file, so I'm using
                      .ts / _de.ts / _en.ts / _fr.ts ...
                      this is working well because translations not found in _en.ts will come from .ts
                      seems that in this case I don't have to set the NATIVE_TS_FILE, because _en.ts not only contains plural forms ?

                      if setting QT_I18N_LANGUAGES will this work if my (from Qt 5.15 ported) .ts files are in project_dir/translations ?

                      BTW: the lrelease command is executed automatically if building in QtCreator ?
                      In 5.15 my workflow was: lupdate, Linguist, lrelease
                      Now in 6.7 I can do lupdate automatically with add_dependencies(...lupdate) or execute manually with CMD-K cm ...lupdate and lrelease is always done automagically ?

                      ekke ... Qt Champion 2016 | 2024 ... mobile business apps
                      5.15 --> 6.8 https://t1p.de/ekkeChecklist
                      QMake --> CMake https://t1p.de/ekkeCMakeMobileApps

                      1 Reply Last reply
                      0

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved