diff --git a/scripts/startup/bl_ui/__init__.py b/scripts/startup/bl_ui/__init__.py index 0b70e84d1cb..42cdcc396d2 100644 --- a/scripts/startup/bl_ui/__init__.py +++ b/scripts/startup/bl_ui/__init__.py @@ -104,6 +104,13 @@ _modules_loaded = [_namespace[name] for name in _modules] del _namespace +# Bypass the caching mechanism in the "Format" panel to make sure it is properly translated on language update. +@bpy.app.handlers.persistent +def translation_update(_): + from .properties_output import RENDER_PT_format + RENDER_PT_format._frame_rate_args_prev = None + + def register(): from bpy.utils import register_class for mod in _modules_loaded: @@ -166,6 +173,8 @@ def register(): ) del items + bpy.app.handlers.translation_update_post.append(translation_update) + # done... @@ -176,6 +185,11 @@ def unregister(): if cls.is_registered: unregister_class(cls) + try: + bpy.app.handlers.translation_update_post.remove(translation_update) + except ValueError: + pass + # Define a default UIList, when a list does not need any custom drawing... # Keep in sync with its #defined name in UI_interface.hh diff --git a/source/blender/blenkernel/BKE_callbacks.h b/source/blender/blenkernel/BKE_callbacks.h index 4f52640d3d5..41af1c42154 100644 --- a/source/blender/blenkernel/BKE_callbacks.h +++ b/source/blender/blenkernel/BKE_callbacks.h @@ -109,6 +109,7 @@ typedef enum { BKE_CB_EVT_COMPOSITE_CANCEL, BKE_CB_EVT_ANIMATION_PLAYBACK_PRE, BKE_CB_EVT_ANIMATION_PLAYBACK_POST, + BKE_CB_EVT_TRANSLATION_UPDATE_POST, BKE_CB_EVT_EXTENSION_REPOS_UPDATE_PRE, BKE_CB_EVT_EXTENSION_REPOS_UPDATE_POST, BKE_CB_EVT_TOT, diff --git a/source/blender/makesrna/intern/rna_userdef.cc b/source/blender/makesrna/intern/rna_userdef.cc index e4a49ea4ae8..df197f18b8c 100644 --- a/source/blender/makesrna/intern/rna_userdef.cc +++ b/source/blender/makesrna/intern/rna_userdef.cc @@ -324,7 +324,7 @@ static void rna_userdef_font_update(Main * /*bmain*/, Scene * /*scene*/, Pointer UI_reinit_font(); } -static void rna_userdef_language_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA * /*ptr*/) +static void rna_userdef_language_update(Main *bmain, Scene * /*scene*/, PointerRNA * /*ptr*/) { BLT_lang_set(nullptr); @@ -336,6 +336,14 @@ static void rna_userdef_language_update(Main * /*bmain*/, Scene * /*scene*/, Poi U.transopts |= (USER_TR_IFACE | USER_TR_TOOLTIPS | USER_TR_REPORTS | USER_TR_NEWDATANAME); } + BKE_callback_exec_null(bmain, BKE_CB_EVT_TRANSLATION_UPDATE_POST); + USERDEF_TAG_DIRTY; +} + +static void rna_userdef_translation_update(Main *bmain, Scene * /*scene*/, PointerRNA * /*ptr*/) +{ + BKE_callback_exec_null(bmain, BKE_CB_EVT_TRANSLATION_UPDATE_POST); + WM_main_add_notifier(NC_WINDOW, nullptr); USERDEF_TAG_DIRTY; } @@ -5226,7 +5234,7 @@ static void rna_def_userdef_view(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Translate Tooltips", "Translate the descriptions when hovering UI elements (recommended)"); - RNA_def_property_update(prop, 0, "rna_userdef_update"); + RNA_def_property_update(prop, 0, "rna_userdef_translation_update"); prop = RNA_def_property(srna, "use_translate_interface", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, nullptr, "transopts", USER_TR_IFACE); @@ -5235,20 +5243,20 @@ static void rna_def_userdef_view(BlenderRNA *brna) "Translate Interface", "Translate all labels in menus, buttons and panels " "(note that this might make it hard to follow tutorials or the manual)"); - RNA_def_property_update(prop, 0, "rna_userdef_update"); + RNA_def_property_update(prop, 0, "rna_userdef_translation_update"); prop = RNA_def_property(srna, "use_translate_reports", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, nullptr, "transopts", USER_TR_REPORTS); RNA_def_property_ui_text( prop, "Translate Reports", "Translate additional information, such as error messages"); - RNA_def_property_update(prop, 0, "rna_userdef_update"); + RNA_def_property_update(prop, 0, "rna_userdef_translation_update"); prop = RNA_def_property(srna, "use_translate_new_dataname", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, nullptr, "transopts", USER_TR_NEWDATANAME); RNA_def_property_ui_text(prop, "Translate New Names", "Translate the names of new data-blocks (objects, materials...)"); - RNA_def_property_update(prop, 0, "rna_userdef_update"); + RNA_def_property_update(prop, 0, "rna_userdef_translation_update"); /* Status-bar. */ diff --git a/source/blender/python/intern/bpy_app_handlers.cc b/source/blender/python/intern/bpy_app_handlers.cc index c9a8dff2f17..4c9d6fa1a8d 100644 --- a/source/blender/python/intern/bpy_app_handlers.cc +++ b/source/blender/python/intern/bpy_app_handlers.cc @@ -90,6 +90,7 @@ static PyStructSequence_Field app_cb_info_fields[] = { {"composite_cancel", "on a compositing background job (cancel)"}, {"animation_playback_pre", "on starting animation playback"}, {"animation_playback_post", "on ending animation playback"}, + {"translation_update_post", "on translation settings update"}, /* NOTE(@ideasman42): This avoids bad-level calls into BPY API * but should not be considered part of the public Python API. * If there is a compelling reason to make these public, the leading `_` can be removed. */