Skip to content

Commit 5684447

Browse files
committed
ENH: i18n: Add support for generating translation templates
This commit adds GenerateSlicerTranslationTemplates target allowing to generate "<BaseName>_untranslated.ts" files. To facilitate their distribution, the files are generated in the directory "<CMAKE_BINARY_DIR>/TranslationTemplates".
1 parent 3b6e3ff commit 5684447

File tree

1 file changed

+71
-2
lines changed

1 file changed

+71
-2
lines changed

CMake/SlicerMacroTranslation.cmake

Lines changed: 71 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ function(SlicerMacroTranslation)
6767
foreach(language ${MY_TS_LANGUAGES})
6868
set(ts_file "${MY_TS_DIR}/${MY_TS_BASEFILENAME}_${language}.ts")
6969

70-
if(NOT Slicer_UPDATE_TRANSLATION AND NOT EXISTS ${ts_file})
70+
if(NOT EXISTS ${ts_file})
7171
continue()
7272
endif()
7373

@@ -79,6 +79,7 @@ function(SlicerMacroTranslation)
7979
# ---------------------------------------------------------------------------------
8080
set_property(GLOBAL APPEND PROPERTY Slicer_TS_BASEFILENAMES ${MY_TS_BASEFILENAME})
8181
set_property(GLOBAL PROPERTY Slicer_${MY_TS_BASEFILENAME}_FILES_TO_TRANSLATE "${FILES_TO_TRANSLATE}")
82+
set_property(GLOBAL PROPERTY Slicer_${MY_TS_BASEFILENAME}_TS_DIR "${MY_TS_DIR}")
8283
set_property(GLOBAL PROPERTY Slicer_${MY_TS_BASEFILENAME}_TS_FILES "${TS_FILES}")
8384
set_property(GLOBAL PROPERTY Slicer_${MY_TS_BASEFILENAME}_QM_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}")
8485

@@ -108,13 +109,15 @@ function(SlicerFunctionAddGenerateSlicerTranslationQMFilesTarget)
108109

109110
# ---------------------------------------------------------------------------------
110111
set(qm_output_dirs)
112+
set(untranslated_ts_files)
111113

112114
# ---------------------------------------------------------------------------------
113115
# UPDATE or ADD translation
114116
# ---------------------------------------------------------------------------------
115117
get_property(ts_basefilenames GLOBAL PROPERTY Slicer_TS_BASEFILENAMES)
116118
foreach(ts_basefilename IN LISTS ts_basefilenames)
117119
get_property(files_to_translate GLOBAL PROPERTY Slicer_${ts_basefilename}_FILES_TO_TRANSLATE)
120+
get_property(ts_dir GLOBAL PROPERTY Slicer_${ts_basefilename}_TS_DIR)
118121
get_property(ts_files GLOBAL PROPERTY Slicer_${ts_basefilename}_TS_FILES)
119122
get_property(qm_output_dir GLOBAL PROPERTY Slicer_${ts_basefilename}_QM_OUTPUT_DIR)
120123

@@ -147,8 +150,15 @@ function(SlicerFunctionAddGenerateSlicerTranslationQMFilesTarget)
147150
endforeach()
148151
endif()
149152

150-
set_source_files_properties(${ts_files} PROPERTIES OUTPUT_LOCATION ${qm_output_dir})
153+
# Add custom commands for creating or updating "*_untranslated.ts" files.
154+
set(untranslated_ts_dir "${CMAKE_BINARY_DIR}/TranslationTemplates")
155+
set(untranslated_ts_file ${untranslated_ts_dir}/${ts_basefilename}_untranslated.ts)
156+
SLICER_CREATE_TRANSLATION_ONLY(
157+
${srcs_to_translate} ${rewritten_scripts_to_translate_for_context} ${untranslated_ts_file}
158+
OPTIONS -source-language en_US -no-ui-lines
159+
)
151160

161+
set_source_files_properties(${ts_files} PROPERTIES OUTPUT_LOCATION ${qm_output_dir})
152162
if(Slicer_UPDATE_TRANSLATION)
153163
# Add custom command for creating or updating "*_<lang>.ts" translation files, and for
154164
# generating the associated "*_<lang>.qm" files.
@@ -161,13 +171,22 @@ function(SlicerFunctionAddGenerateSlicerTranslationQMFilesTarget)
161171
QT5_ADD_TRANSLATION(QM_OUTPUT_FILES ${ts_files})
162172
endif()
163173

174+
list(APPEND untranslated_ts_files ${untranslated_ts_file})
164175
list(APPEND qm_output_dirs ${qm_output_dir})
165176
endforeach()
166177

167178
# ---------------------------------------------------------------------------------
168179
# Targets
169180
# ---------------------------------------------------------------------------------
170181

182+
set(_all)
183+
if(Slicer_UPDATE_TRANSLATION)
184+
set(_all ALL)
185+
endif()
186+
add_custom_target(GenerateSlicerTranslationTemplates ${_all} DEPENDS
187+
${untranslated_ts_files}
188+
)
189+
171190
add_custom_target(GenerateSlicerTranslationQMFiles ALL DEPENDS
172191
${QM_OUTPUT_FILES}
173192
)
@@ -187,3 +206,53 @@ function(SlicerFunctionAddGenerateSlicerTranslationQMFilesTarget)
187206
set(${MY_QM_OUTPUT_DIRS_VAR} ${qm_output_dirs} PARENT_SCOPE)
188207

189208
endfunction()
209+
210+
211+
function(SLICER_CREATE_TRANSLATION_ONLY)
212+
# Adapted from QT5_CREATE_TRANSLATION:
213+
# - remove call to "qt5_add_translation"
214+
# - remove setting of "_qm_files" output variable
215+
set(options)
216+
set(oneValueArgs)
217+
set(multiValueArgs OPTIONS)
218+
219+
cmake_parse_arguments(_LUPDATE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
220+
set(_lupdate_files ${_LUPDATE_UNPARSED_ARGUMENTS})
221+
set(_lupdate_options ${_LUPDATE_OPTIONS})
222+
223+
set(_my_sources)
224+
set(_my_tsfiles)
225+
foreach(_file ${_lupdate_files})
226+
get_filename_component(_ext ${_file} EXT)
227+
get_filename_component(_abs_FILE ${_file} ABSOLUTE)
228+
if(_ext MATCHES "ts")
229+
list(APPEND _my_tsfiles ${_abs_FILE})
230+
else()
231+
list(APPEND _my_sources ${_abs_FILE})
232+
endif()
233+
endforeach()
234+
foreach(_ts_file ${_my_tsfiles})
235+
if(_my_sources)
236+
# make a list file to call lupdate on, so we don't make our commands too
237+
# long for some systems
238+
get_filename_component(_ts_name ${_ts_file} NAME_WE)
239+
set(_ts_lst_file "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_ts_name}_lst_file")
240+
set(_lst_file_srcs)
241+
foreach(_lst_file_src ${_my_sources})
242+
set(_lst_file_srcs "${_lst_file_src}\n${_lst_file_srcs}")
243+
endforeach()
244+
245+
get_directory_property(_inc_DIRS INCLUDE_DIRECTORIES)
246+
foreach(_pro_include ${_inc_DIRS})
247+
get_filename_component(_abs_include "${_pro_include}" ABSOLUTE)
248+
set(_lst_file_srcs "-I${_pro_include}\n${_lst_file_srcs}")
249+
endforeach()
250+
251+
file(WRITE ${_ts_lst_file} "${_lst_file_srcs}")
252+
endif()
253+
add_custom_command(OUTPUT ${_ts_file}
254+
COMMAND ${Qt5_LUPDATE_EXECUTABLE}
255+
ARGS ${_lupdate_options} "@${_ts_lst_file}" -ts ${_ts_file}
256+
DEPENDS ${_my_sources} ${_ts_lst_file} VERBATIM)
257+
endforeach()
258+
endfunction()

0 commit comments

Comments
 (0)