summaryrefslogtreecommitdiff
path: root/CMake/Translations.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'CMake/Translations.cmake')
-rw-r--r--CMake/Translations.cmake53
1 files changed, 53 insertions, 0 deletions
diff --git a/CMake/Translations.cmake b/CMake/Translations.cmake
new file mode 100644
index 000000000..2a1e03d4c
--- /dev/null
+++ b/CMake/Translations.cmake
@@ -0,0 +1,53 @@
+# translations.cmake - Translations using APT's translation system.
+# Copyright (C) 2009, 2016 Julian Andres Klode <jak@debian.org>
+
+function(apt_add_translation_domain domain)
+ set(targets ${ARGN})
+ # Build the list of source files of the target
+ set(files "")
+ foreach(target ${targets})
+ get_target_property(source_dir ${target} SOURCE_DIR)
+ get_target_property(sources ${target} SOURCES)
+ foreach(source ${sources})
+ string(SUBSTRING ${source} 0 1 init_char)
+ string(COMPARE EQUAL ${init_char} "/" is_absolute)
+ if (${is_absolute})
+ set(file "${source}")
+ else()
+ set(file "${source_dir}/${source}")
+ endif()
+ file(RELATIVE_PATH relfile ${PROJECT_SOURCE_DIR} ${file})
+ set(files ${files} ${relfile})
+ endforeach()
+
+ target_compile_definitions(${target} PRIVATE -DAPT_DOMAIN="${domain}")
+ endforeach()
+
+ # Create the template for this specific sub-domain
+ add_custom_command (OUTPUT ${PROJECT_BINARY_DIR}/${domain}.pot
+ COMMAND xgettext --add-comments --foreign -k_ -kN_
+ -o ${PROJECT_BINARY_DIR}/${domain}.pot ${files}
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ )
+
+ # Build .mo files
+ file(GLOB translations "${PROJECT_SOURCE_DIR}/po/*.po")
+ list(SORT translations)
+ foreach(file ${translations})
+ get_filename_component(langcode ${file} NAME_WE)
+ set(outdir ${PROJECT_BINARY_DIR}/locale/${langcode}/LC_MESSAGES)
+ file(MAKE_DIRECTORY ${outdir})
+ # Command to merge and compile the messages
+ add_custom_command(OUTPUT ${outdir}/${domain}.mo
+ COMMAND msgmerge -qo - ${file} ${PROJECT_BINARY_DIR}/${domain}.pot |
+ msgfmt -o ${outdir}/${domain}.mo -
+ DEPENDS ${file} ${PROJECT_BINARY_DIR}/${domain}.pot
+ )
+
+ set(mofiles ${mofiles} ${outdir}/${domain}.mo)
+ install(FILES ${outdir}/${domain}.mo
+ DESTINATION "${CMAKE_INSTALL_LOCALEDIR}/${langcode}/LC_MESSAGES")
+ endforeach(file ${translations})
+
+ add_custom_target(nls-${domain} ALL DEPENDS ${mofiles})
+endfunction()