diff --git a/scripts/modules/bl_i18n_utils/bl_extract_messages.py b/scripts/modules/bl_i18n_utils/bl_extract_messages.py index 65bf9047f2a..24fed272503 100644 --- a/scripts/modules/bl_i18n_utils/bl_extract_messages.py +++ b/scripts/modules/bl_i18n_utils/bl_extract_messages.py @@ -615,6 +615,7 @@ def dump_py_messages_from_files(msgs, reports, files, settings): "msgid": ((("msgctxt",), _ctxt_to_ctxt), ), "message": (), + "label": (), "heading": ((("heading_ctxt",), _ctxt_to_ctxt),), "placeholder": ((("text_ctxt",), _ctxt_to_ctxt),), } @@ -664,6 +665,16 @@ def dump_py_messages_from_files(msgs, reports, files, settings): func_translate_args[func_id] = pgettext_variants_args for sub_func_id in func_ids: func_translate_args[sub_func_id] = pgettext_variants_args + # Manually add functions from node_add_menu.py. + for func_id, arg_pos in ( + ("add_node_type", 3), + ("add_node_type_with_outputs", 5), + ("add_simulation_zone", 1), + ("add_repeat_zone", 1), + ("add_foreach_geometry_element_zone", 1), + ("add_closure_zone", 1), + ): + func_translate_args[func_id] = {"label": (arg_pos, {})} # print(func_translate_args) # Break recursive nodes look up on some kind of nodes. @@ -710,7 +721,7 @@ def dump_py_messages_from_files(msgs, reports, files, settings): # 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: + if kw.arg == "translate" and not getattr(kw.value, "value", False): do_translate = False break if not do_translate: diff --git a/scripts/startup/bl_ui/node_add_menu.py b/scripts/startup/bl_ui/node_add_menu.py index bf54ac835a3..7789bd50101 100644 --- a/scripts/startup/bl_ui/node_add_menu.py +++ b/scripts/startup/bl_ui/node_add_menu.py @@ -11,7 +11,7 @@ from bpy.app.translations import ( ) -def add_node_type(layout, node_type, *, label=None, poll=None, search_weight=0.0): +def add_node_type(layout, node_type, *, label=None, poll=None, search_weight=0.0, translate=True): """Add a node type to a menu.""" bl_rna = bpy.types.Node.bl_rna_get_subclass(node_type) if not label: @@ -19,7 +19,12 @@ def add_node_type(layout, node_type, *, label=None, poll=None, search_weight=0.0 if poll is True or poll is None: translation_context = bl_rna.translation_context if bl_rna else i18n_contexts.default - props = layout.operator("node.add_node", text=label, text_ctxt=translation_context, search_weight=search_weight) + props = layout.operator( + "node.add_node", + text=label, + text_ctxt=translation_context, + translate=translate, + search_weight=search_weight) props.type = node_type props.use_transform = True return props @@ -94,12 +99,11 @@ def add_node_type_with_searchable_enum(context, layout, node_idname, property_na if getattr(context, "is_menu_search", False): node_type = getattr(bpy.types, node_idname) for item in node_type.bl_rna.properties[property_name].enum_items_static: + label = "{} ▸ {}".format(node_type.bl_rna.name, item.name) props = add_node_type( layout, node_idname, - label=node_type.bl_rna.name + - " ▸ " + - item.name, + label=label, search_weight=search_weight) prop = props.settings.add() prop.name = property_name @@ -115,7 +119,8 @@ def add_color_mix_node(context, layout): if getattr(context, "is_menu_search", False): for item in bpy.types.ShaderNodeMix.bl_rna.properties["blend_type"].enum_items_static: - props = node_add_menu.add_node_type(layout, "ShaderNodeMix", label=label + " ▸ " + item.name) + sublabel = "{} ▸ {}".format(label, item.name) + props = node_add_menu.add_node_type(layout, "ShaderNodeMix", label=sublabel) prop = props.settings.add() prop.name = "data_type" prop.value = "'RGBA'" diff --git a/scripts/startup/bl_ui/node_add_menu_compositor.py b/scripts/startup/bl_ui/node_add_menu_compositor.py index cb77fa08c8d..8a45bf851fa 100644 --- a/scripts/startup/bl_ui/node_add_menu_compositor.py +++ b/scripts/startup/bl_ui/node_add_menu_compositor.py @@ -5,7 +5,6 @@ from bpy.types import Menu from bl_ui import node_add_menu from bpy.app.translations import ( - pgettext_iface as iface_, contexts as i18n_contexts, ) @@ -306,7 +305,7 @@ class NODE_MT_category_compositor_utilities(Menu): node_add_menu.add_node_type(layout, "CompositorNodeSwitch") node_add_menu.add_node_type( layout, "CompositorNodeSwitchView", - label=iface_("Switch Stereo View")) + label="Switch Stereo View") layout.separator() node_add_menu.add_node_type(layout, "CompositorNodeRelativeToPixel") @@ -322,7 +321,7 @@ class NODE_MT_category_compositor_vector(Menu): node_add_menu.add_node_type(layout, "ShaderNodeCombineXYZ") node_add_menu.add_node_type(layout, "ShaderNodeSeparateXYZ") layout.separator() - props = node_add_menu.add_node_type(layout, "ShaderNodeMix", label=iface_("Mix Vector")) + props = node_add_menu.add_node_type(layout, "ShaderNodeMix", label="Mix Vector") ops = props.settings.add() ops.name = "data_type" ops.value = "'VECTOR'" diff --git a/scripts/startup/bl_ui/node_add_menu_geometry.py b/scripts/startup/bl_ui/node_add_menu_geometry.py index 55712f4c937..4ceb5a65f93 100644 --- a/scripts/startup/bl_ui/node_add_menu_geometry.py +++ b/scripts/startup/bl_ui/node_add_menu_geometry.py @@ -6,7 +6,6 @@ import bpy from bpy.types import Menu from bl_ui import node_add_menu from bpy.app.translations import ( - pgettext_iface as iface_, contexts as i18n_contexts, ) @@ -783,7 +782,7 @@ class NODE_MT_category_GEO_VECTOR(Menu): node_add_menu.add_node_type(layout, "ShaderNodeVectorRotate") layout.separator() node_add_menu.add_node_type(layout, "ShaderNodeCombineXYZ") - props = node_add_menu.add_node_type(layout, "ShaderNodeMix", label=iface_("Mix Vector")) + props = node_add_menu.add_node_type(layout, "ShaderNodeMix", label="Mix Vector") ops = props.settings.add() ops.name = "data_type" ops.value = "'VECTOR'"