diff --git a/translations/CMakeLists.txt b/translations/CMakeLists.txt
index 6b68afe068e6943c44cff92f9bdf223b31544e02..cc5679e18838235a2312ea23da9a1aa3caae3618 100644
--- a/translations/CMakeLists.txt
+++ b/translations/CMakeLists.txt
@@ -14,7 +14,6 @@ endfunction()
 
 function(add_ts_target target input_file output_file)
     add_custom_target(${target}
-        BYPRODUCTS ${output_file}
         COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::lupdate -locations relative -no-ui-lines -no-sort "@${input_file}" -ts ${output_file}
     )
 endfunction()
@@ -131,6 +130,8 @@ add_dependencies(check-ts ts-all)
 add_custom_target(updateqm ALL)
 
 file(GLOB ts_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.ts")
+file(GLOB en_ts_files "${en_ts_file_dir}/*.ts")
+list(APPEND ts_files ${en_ts_files})
 
 if(QT_WILL_INSTALL)
     set(qm_output_dir "${QT_BUILD_DIR}/${INSTALL_TRANSLATIONSDIR}")
@@ -138,30 +139,12 @@ else()
     set(qm_output_dir "${QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX}/${INSTALL_TRANSLATIONSDIR}")
 endif()
 
-foreach(file IN LISTS ts_files)
-    string(REGEX REPLACE "\\.ts$" ".qm" qm_file ${file})
-    set(output_file "${qm_output_dir}/${qm_file}")
-    add_custom_target(updateqm-${file}
-        BYPRODUCTS ${output_file}
-        COMMAND "${CMAKE_COMMAND}" -E make_directory "${qm_output_dir}"
-        COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::lrelease "${CMAKE_CURRENT_SOURCE_DIR}/${file}" -qm "${output_file}"
-    )
-    qt_install(FILES ${output_file} DESTINATION "${INSTALL_TRANSLATIONSDIR}")
-    add_dependencies(updateqm updateqm-${file})
-endforeach()
-
-file(GLOB ts_files RELATIVE ${en_ts_file_dir} "${en_ts_file_dir}/*.ts")
-foreach(file IN LISTS ts_files)
-    string(REGEX REPLACE "\\.ts$" ".qm" qm_file ${file})
-    set(output_file "${qm_output_dir}/${qm_file}")
-    add_custom_target(updateqm-${file}
-        BYPRODUCTS ${output_file}
-        COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::lrelease "${en_ts_file_dir}/${file}" -qm "${output_file}"
-    )
-    qt_install(FILES ${output_file} DESTINATION "${INSTALL_TRANSLATIONSDIR}")
-    add_dependencies(updateqm updateqm-${file})
-endforeach()
-
+set_source_files_properties(${ts_files} PROPERTIES OUTPUT_LOCATION "${qm_output_dir}")
+qt_add_lrelease(updateqm
+    TS_FILES ${ts_files}
+    NO_GLOBAL_TARGET
+    QM_FILES_OUTPUT_VARIABLE qm_files)
+qt_install(FILES ${qm_files} DESTINATION "${INSTALL_TRANSLATIONSDIR}")
 
 # Custom target to add modified ts files to git
 add_custom_target(stage-ts