Skip to content

Commit

Permalink
ENH: Add translation for VolumeDisplayPresets.json
Browse files Browse the repository at this point in the history
  • Loading branch information
mhdiop committed Mar 20, 2024
1 parent 5e831bc commit 824c792
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 2 deletions.
5 changes: 3 additions & 2 deletions Modules/Loadable/Volumes/Logic/vtkSlicerVolumesLogic.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "vtkSlicerVolumesLogic.h"

// MRML logic includes
#include "vtkMRMLI18N.h"
#include "vtkMRMLColorLogic.h"
#include "vtkDataIOManagerLogic.h"
#include "vtkMRMLRemoteIOLogic.h"
Expand Down Expand Up @@ -1658,7 +1659,7 @@ void vtkSlicerVolumesLogic::InitializeDefaultVolumeDisplayPresets()
}
VolumeDisplayPreset presetObj;
presetObj.id = preset["id"].GetString();
presetObj.name = preset["name"].GetString();
presetObj.name = vtkMRMLTr("VolumeDisplayPresets", preset["name"].GetString());
presetObj.level = preset["level"].GetDouble();
presetObj.window = preset["window"].GetDouble();
presetObj.valid = true;
Expand All @@ -1682,7 +1683,7 @@ void vtkSlicerVolumesLogic::InitializeDefaultVolumeDisplayPresets()
{
if (preset["description"].IsString())
{
presetObj.description = preset["description"].GetString();
presetObj.description = vtkMRMLTr("VolumeDisplayPresets", preset["description"].GetString());
}
else
{
Expand Down
49 changes: 49 additions & 0 deletions Utilities/Scripts/update_translations.py
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,49 @@ def extract_translatable_from_cli_modules(input_paths, exclude_filenames=None):
_generate_translation_header_from_cli_xml(os.path.join(root, name))


def _generate_translation_header_from_json_presets(filename):
logging.debug(f"Generating header file for Qt translation from {filename}")

with open(filename, encoding='utf8') as file:
import json

presets_raw = file.read()
try:
presets_json = json.loads(presets_raw)
except json.decoder.JSONDecodeError:
logging.warning(f"Not a valid JSON preset file: {filename}")
return False

translation_context = os.path.splitext(os.path.basename(filename))[0]

cpp_header_str = f"// Generated automatically by update_translations.py from {filename}\n\n"

for preset in presets_json['volumeDisplayPresets']:
preset_name = preset["name"].replace('\n', '\\n').replace('"', '\\"')
preset_description = preset["description"].replace('\n', '\\n').replace('"', '\\"')
cpp_header_str += f'QT_TRANSLATE_NOOP("{translation_context}", "{preset_name}")\n'
cpp_header_str += f'QT_TRANSLATE_NOOP("{translation_context}", "{preset_description}")\n'

cpp_header_path = os.path.splitext(filename)[0] + '_tr.h'

logging.info("Writing output file: " + cpp_header_path)
with open(cpp_header_path, "w", encoding="utf8") as cpp_header_file:
cpp_header_file.write(cpp_header_str)


def extract_translatable_from_presets_files(file_paths):
if type(file_paths) is not list:
file_paths = [file_paths]

for file_path in file_paths:
file_path = os.path.abspath(file_path)
if os.path.isfile(file_path):
_generate_translation_header_from_json_presets(file_path)
else:
logging.warning(f"Invalid file path: {file_path}")



def main(argv):
parser = argparse.ArgumentParser(description="Update Qt translation files")
parser.add_argument("--lupdate", default="lupdate", dest="lupdate_path",
Expand Down Expand Up @@ -405,6 +448,12 @@ def main(argv):
"DiffusionTensorTest.xml",
]
extract_translatable_from_cli_modules(cli_input_paths, cli_exclude_names)

# Slicer presets files translation
presets_files = [
os.path.join(args.source_code_dir, "Modules/Loadable/Volumes/Resources/VolumeDisplayPresets.json")
]
extract_translatable_from_presets_files(presets_files)
else:
extract_translatable_from_cli_modules([args.source_code_dir])

Expand Down

0 comments on commit 824c792

Please sign in to comment.