From 2e5452ee87b600077ce8260795fbb5544702beda Mon Sep 17 00:00:00 2001 From: Damien Picard Date: Fri, 3 Mar 2023 21:39:06 +0100 Subject: [PATCH] I18n: do not extract messages explicitly marked as not translatable Some UI functions have a "translate" argument, which if set to False specifies that the message is not to be translated. This sometimes means that it was already translated beforehands. But many messages were still getting extracted, sometimes twice in different contexts. Some featured errors because the arguments of various functions would be concatenated, such as: ``` col.label(text=iface_("Branch: %s") % bpy.app.build_branch.decode('utf-8', 'replace'), translate=False) ``` which would get extracted as: ``` msgid "Branch: %sutf-8replace" ``` Pull Request #105417 --- intern/cycles/blender/addon/properties.py | 5 +++-- scripts/modules/bl_i18n_utils/bl_extract_messages.py | 9 +++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py index 41eacb7417f..146c08ff53e 100644 --- a/intern/cycles/blender/addon/properties.py +++ b/intern/cycles/blender/addon/properties.py @@ -1673,7 +1673,7 @@ class CyclesPreferences(bpy.types.AddonPreferences): driver_version = "470" col.label(text=iface_("Requires NVIDIA GPU with compute capability %s") % compute_capability, icon='BLANK1', translate=False) - col.label(text="and NVIDIA driver version %s or newer" % driver_version, + col.label(text=iface_("and NVIDIA driver version %s or newer") % driver_version, icon='BLANK1', translate=False) elif device_type == 'HIP': import sys @@ -1716,7 +1716,8 @@ class CyclesPreferences(bpy.types.AddonPreferences): .replace('(TM)', unicodedata.lookup('TRADE MARK SIGN')) .replace('(tm)', unicodedata.lookup('TRADE MARK SIGN')) .replace('(R)', unicodedata.lookup('REGISTERED SIGN')) - .replace('(C)', unicodedata.lookup('COPYRIGHT SIGN')) + .replace('(C)', unicodedata.lookup('COPYRIGHT SIGN')), + translate=False ) def draw_impl(self, layout, context): diff --git a/scripts/modules/bl_i18n_utils/bl_extract_messages.py b/scripts/modules/bl_i18n_utils/bl_extract_messages.py index 4915ee3f47d..9ddc39bc3a4 100644 --- a/scripts/modules/bl_i18n_utils/bl_extract_messages.py +++ b/scripts/modules/bl_i18n_utils/bl_extract_messages.py @@ -692,6 +692,15 @@ def dump_py_messages_from_files(msgs, reports, files, settings): else: continue + # Skip function if it's marked as not translatable. + do_translate = True + for kw in node.keywords: + if kw.arg == "translate" and not kw.value.value: + do_translate = False + break + if not do_translate: + continue + func_args = func_translate_args.get(func_id, {}) # First try to get i18n contexts, for every possible msgid id.