diff --git a/rpcs3/rpcs3qt/CMakeLists.txt b/rpcs3/rpcs3qt/CMakeLists.txt index e3e3c0a264..3eb9690e6f 100644 --- a/rpcs3/rpcs3qt/CMakeLists.txt +++ b/rpcs3/rpcs3qt/CMakeLists.txt @@ -1,3 +1,57 @@ +function(copy_base_translations target) + get_target_property(MOC_EXECUTABLE_LOCATION Qt6::moc IMPORTED_LOCATION) + get_filename_component(QT_BINARY_DIRECTORY "${MOC_EXECUTABLE_LOCATION}" DIRECTORY) + find_program(LCONVERT_EXE lconvert HINTS "${QT_BINARY_DIRECTORY}") + set(BASE_TRANSLATIONS_DIR "${QT_BINARY_DIRECTORY}/../translations") + + if(NOT APPLE) + add_custom_command(TARGET ${target} POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E make_directory "$/translations") + endif() + + file(GLOB qmFiles "${BASE_TRANSLATIONS_DIR}/qt_*.qm") + foreach(path IN LISTS qmFiles) + get_filename_component(file ${path} NAME) + + # qt_help_ just has to ruin everything. + if(file MATCHES "qt_help_" OR NOT file MATCHES "qt_([^.]+).qm") + continue() + endif() + + # If qtbase_.qm exists, merge all qms for that language into a single qm. + set(lang "${CMAKE_MATCH_1}") + set(baseQmPath "${BASE_TRANSLATIONS_DIR}/qtbase_${lang}.qm") + if(EXISTS "${baseQmPath}") + set(outPath "${CMAKE_CURRENT_BINARY_DIR}/qt_${lang}.qm") + set(srcQmFiles) + file(GLOB langQmFiles "${BASE_TRANSLATIONS_DIR}/qt*${lang}.qm") + foreach(qmFile IN LISTS langQmFiles) + get_filename_component(file ${qmFile} NAME) + if(file STREQUAL "qt_${lang}.qm") + continue() + endif() + LIST(APPEND srcQmFiles "${qmFile}") + endforeach() + add_custom_command(OUTPUT ${outPath} + COMMAND "${LCONVERT_EXE}" -verbose -of qm -o "${outPath}" ${srcQmFiles} + DEPENDS ${srcQmFiles} + ) + set(path "${outPath}") + endif() + + target_sources(${target} PRIVATE ${path}) + if(APPLE) + set_source_files_properties(${path} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/translations) + elseif(ALLOW_INSTALL) + install(FILES "${path}" DESTINATION "${CMAKE_INSTALL_BINDIR}/translations") + else() + add_custom_command(TARGET ${target} POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${path}" "$/translations") + endif() + endforeach() +endfunction() + + add_library(rpcs3_ui STATIC about_dialog.cpp auto_pause_settings_dialog.cpp @@ -126,6 +180,11 @@ add_library(rpcs3_ui STATIC "../resources.qrc" ) +set(TS_FILES + translations/rpcs3_sv.ts + translations/rpcs3_pl.ts +) + if(WIN32) target_sources(rpcs3_ui PUBLIC "../windows.qrc") target_compile_definitions(rpcs3_ui PRIVATE UNICODE _UNICODE) @@ -162,3 +221,24 @@ target_link_libraries(rpcs3_ui 3rdparty::opencv 3rdparty::fusion 3rdparty::rtmidi) + +# Translation setup. +qt_add_lrelease(rpcs3 TS_FILES ${TS_FILES} QM_FILES_OUTPUT_VARIABLE QM_FILES) +if(NOT APPLE) + set(QM_OUTPUT_DIR "$/translations") + add_custom_command(TARGET rpcs3 POST_BUILD COMMAND "${CMAKE_COMMAND}" -E make_directory "${QM_OUTPUT_DIR}") + foreach (QM_FILE IN LISTS QM_FILES) + get_filename_component(QM_FILE_NAME ${QM_FILE} NAME) + add_custom_command(TARGET rpcs3 POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${QM_FILE}" "${QM_OUTPUT_DIR}/${QM_FILE_NAME}") + if(ALLOW_INSTALL) + install(FILES "${QM_FILE}" DESTINATION "${CMAKE_INSTALL_BINDIR}/translations") + endif() + endforeach() +else() + foreach (QM_FILE IN LISTS QM_FILES) + target_sources(rpcs3 PRIVATE ${QM_FILE}) + set_source_files_properties(${QM_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/translations) + endforeach() +endif() +copy_base_translations(rpcs3) +