From ee985fa92577bd7df945b3a0146414209e109c29 Mon Sep 17 00:00:00 2001 From: Damien Picard Date: Mon, 22 Aug 2022 14:30:32 +0200 Subject: I18n: disambiguate a few translations - Keying (keyframe insertion) - Roughness (particle children) - New image, collection, text (in menus) - Parents (particles) - Wrap (text) - Light (add menu) - Empty (volume add menu) - Empty (empty add menu) - Cycles (f-curve modifier) - Drag (workspace tool type) - Power (light intensity) - Power (math nodes) This last change also moves all math operations in nodes to the ID_nodetree context. It's needed only for some operations, but we can't be more granular here. Also... - Fix context extraction for interpolation mode headers in F-Curves and GPencil interpolation operator - Enable new translation: "Slot %d" in image editor - Fix an English message in the node editor: "Replace the input image's alpha channels by..." -> channel Ref. T43295 Reviewed By: mont29 Differential Revision: https://developer.blender.org/D15694 --- release/scripts/startup/bl_ui/properties_particle.py | 3 ++- release/scripts/startup/bl_ui/space_image.py | 9 ++++++--- release/scripts/startup/bl_ui/space_outliner.py | 7 ++++++- release/scripts/startup/bl_ui/space_text.py | 11 ++++++++--- release/scripts/startup/bl_ui/space_time.py | 2 ++ release/scripts/startup/bl_ui/space_view3d.py | 9 +++++++-- 6 files changed, 31 insertions(+), 10 deletions(-) (limited to 'release') diff --git a/release/scripts/startup/bl_ui/properties_particle.py b/release/scripts/startup/bl_ui/properties_particle.py index cd390eee970..2bf12401f79 100644 --- a/release/scripts/startup/bl_ui/properties_particle.py +++ b/release/scripts/startup/bl_ui/properties_particle.py @@ -1654,6 +1654,7 @@ class PARTICLE_PT_children_clumping_noise(ParticleButtonsPanel, Panel): class PARTICLE_PT_children_roughness(ParticleButtonsPanel, Panel): bl_label = "Roughness" + bl_translation_context = i18n_contexts.id_particlesettings bl_parent_id = "PARTICLE_PT_children" bl_options = {'DEFAULT_CLOSED'} COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH'} @@ -1676,7 +1677,7 @@ class PARTICLE_PT_children_roughness(ParticleButtonsPanel, Panel): if part.use_roughness_curve: sub = col.column() sub.template_curve_mapping(part, "roughness_curve") - sub.prop(part, "roughness_1", text="Roughness") + sub.prop(part, "roughness_1", text=iface_("Roughness", i18n_contexts.id_particlesettings)) sub.prop(part, "roughness_1_size", text="Size") else: sub = col.column(align=True) diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py index ab3c863ea2d..6a231c74cd9 100644 --- a/release/scripts/startup/bl_ui/space_image.py +++ b/release/scripts/startup/bl_ui/space_image.py @@ -29,8 +29,10 @@ from bl_ui.space_toolsystem_common import ( ToolActivePanelHelper, ) -from bpy.app.translations import pgettext_iface as iface_ - +from bpy.app.translations import ( + contexts as i18n_contexts, + pgettext_iface as iface_, +) class ImagePaintPanel: bl_space_type = 'IMAGE_EDITOR' @@ -187,7 +189,8 @@ class IMAGE_MT_image(Menu): ima = sima.image show_render = sima.show_render - layout.operator("image.new", text="New") + layout.operator("image.new", text="New", + text_ctxt=i18n_contexts.id_image) layout.operator("image.open", text="Open...", icon='FILE_FOLDER') layout.operator("image.read_viewlayers") diff --git a/release/scripts/startup/bl_ui/space_outliner.py b/release/scripts/startup/bl_ui/space_outliner.py index 4867237f353..2a2d67d78a4 100644 --- a/release/scripts/startup/bl_ui/space_outliner.py +++ b/release/scripts/startup/bl_ui/space_outliner.py @@ -2,6 +2,10 @@ import bpy from bpy.types import Header, Menu, Panel +from bpy.app.translations import ( + contexts as i18n_contexts, + pgettext_iface as iface_, +) class OUTLINER_HT_header(Header): bl_space_type = 'OUTLINER' @@ -211,7 +215,8 @@ class OUTLINER_MT_collection(Menu): space = context.space_data - layout.operator("outliner.collection_new", text="New").nested = True + layout.operator("outliner.collection_new", text="New", + text_ctxt=i18n_contexts.id_collection).nested = True layout.operator("outliner.collection_duplicate", text="Duplicate Collection") layout.operator("outliner.collection_duplicate_linked", text="Duplicate Linked") layout.operator("outliner.id_copy", text="Copy", icon='COPYDOWN') diff --git a/release/scripts/startup/bl_ui/space_text.py b/release/scripts/startup/bl_ui/space_text.py index 52d66e48d1c..e6f4ea75189 100644 --- a/release/scripts/startup/bl_ui/space_text.py +++ b/release/scripts/startup/bl_ui/space_text.py @@ -1,7 +1,10 @@ # SPDX-License-Identifier: GPL-2.0-or-later import bpy from bpy.types import Header, Menu, Panel -from bpy.app.translations import pgettext_iface as iface_ +from bpy.app.translations import ( + contexts as i18n_contexts, + pgettext_iface as iface_, +) class TEXT_HT_header(Header): @@ -168,7 +171,8 @@ class TEXT_PT_find(Panel): if not st.text: row.active = False row.prop(st, "use_match_case", text="Case", toggle=True) - row.prop(st, "use_find_wrap", text="Wrap", toggle=True) + row.prop(st, "use_find_wrap", text="Wrap", + text_ctxt=i18n_contexts.id_text, toggle=True) row.prop(st, "use_find_all", text="All", toggle=True) @@ -234,7 +238,8 @@ class TEXT_MT_text(Menu): st = context.space_data text = st.text - layout.operator("text.new", text="New", icon='FILE_NEW') + layout.operator("text.new", text="New", + text_ctxt=i18n_contexts.id_text, icon='FILE_NEW') layout.operator("text.open", text="Open...", icon='FILE_FOLDER') if text: diff --git a/release/scripts/startup/bl_ui/space_time.py b/release/scripts/startup/bl_ui/space_time.py index 115f61a7c19..d948ea09a74 100644 --- a/release/scripts/startup/bl_ui/space_time.py +++ b/release/scripts/startup/bl_ui/space_time.py @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later import bpy from bpy.types import Menu, Panel +from bpy.app.translations import contexts as i18n_contexts # Header buttons for timeline header (play, etc.) @@ -87,6 +88,7 @@ class TIME_MT_editor_menus(Menu): sub.popover( panel="TIME_PT_keyframing_settings", text="Keying", + text_ctxt=i18n_contexts.id_windowmanager, ) # Add a separator to keep the popover button from aligning with the menu button. diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 5dcfa60665a..e0970a9708e 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -2212,6 +2212,7 @@ class VIEW3D_MT_armature_add(Menu): class VIEW3D_MT_light_add(Menu): bl_idname = "VIEW3D_MT_light_add" + bl_context = i18n_contexts.id_light bl_label = "Light" def draw(self, _context): @@ -2249,7 +2250,9 @@ class VIEW3D_MT_volume_add(Menu): def draw(self, _context): layout = self.layout layout.operator("object.volume_import", text="Import OpenVDB...", icon='OUTLINER_DATA_VOLUME') - layout.operator("object.volume_add", text="Empty", icon='OUTLINER_DATA_VOLUME') + layout.operator("object.volume_add", text="Empty", + text_ctxt=i18n_contexts.id_volume, + icon='OUTLINER_DATA_VOLUME') class VIEW3D_MT_add(Menu): @@ -2290,7 +2293,9 @@ class VIEW3D_MT_add(Menu): layout.separator() - layout.operator_menu_enum("object.empty_add", "type", text="Empty", icon='OUTLINER_OB_EMPTY') + layout.operator_menu_enum("object.empty_add", "type", text="Empty", + text_ctxt=i18n_contexts.id_id, + icon='OUTLINER_OB_EMPTY') layout.menu("VIEW3D_MT_image_add", text="Image", icon='OUTLINER_OB_IMAGE') layout.separator() -- cgit v1.2.3 From 4ad471d67fee18516a09056c6794da1e84d58cd0 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Mon, 22 Aug 2022 15:24:21 +0200 Subject: I18n: systematically tag all messages in `RNA_ENUM_ITEM_HEADING`. Add missing labels, and also add tooltips. Unfortunately there is no way currently to extract two messages from a single 'function' call, so unless those type of macros become very widely used, would keep it as manual tagging. Also disambiguate `case` in text context, pretty sure English is one of the very rare languages to use this word for character case too. --- release/scripts/startup/bl_ui/space_text.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'release') diff --git a/release/scripts/startup/bl_ui/space_text.py b/release/scripts/startup/bl_ui/space_text.py index e6f4ea75189..d2db6ca8308 100644 --- a/release/scripts/startup/bl_ui/space_text.py +++ b/release/scripts/startup/bl_ui/space_text.py @@ -170,7 +170,8 @@ class TEXT_PT_find(Panel): row = layout.row(align=True) if not st.text: row.active = False - row.prop(st, "use_match_case", text="Case", toggle=True) + row.prop(st, "use_match_case", text="Case", + text_ctxt=i18n_contexts.id_text, toggle=True) row.prop(st, "use_find_wrap", text="Wrap", text_ctxt=i18n_contexts.id_text, toggle=True) row.prop(st, "use_find_all", text="All", toggle=True) -- cgit v1.2.3 From 0b2be4fbc348c22fe4140ee8517892c44996da34 Mon Sep 17 00:00:00 2001 From: Damien Picard Date: Mon, 22 Aug 2022 15:33:39 +0200 Subject: I18n: Fix lighting preferences error messages While the current situation sort of works, a proper translation cannot be achieved in every language. Separate messages for each lighting type. --- release/scripts/startup/bl_ui/space_userpref.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'release') diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index a42c38c64c2..8af36d0bca9 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -5,8 +5,11 @@ from bpy.types import ( Menu, Panel, ) -from bpy.app.translations import pgettext_iface as iface_ -from bpy.app.translations import contexts as i18n_contexts +from bpy.app.translations import ( + contexts as i18n_contexts, + pgettext_iface as iface_, + pgettext_tip as tip_, +) # ----------------------------------------------------------------------------- @@ -2090,7 +2093,10 @@ class StudioLightPanelMixin: for studio_light in lights: self.draw_studio_light(flow, studio_light) else: - layout.label(text=iface_("No custom %s configured") % self.bl_label) + layout.label(text=self.get_error_message()) + + def get_error_message(self): + return tip_("No custom %s configured") % self.bl_label def draw_studio_light(self, layout, studio_light): box = layout.box() @@ -2117,6 +2123,9 @@ class USERPREF_PT_studiolight_matcaps(StudioLightPanel, StudioLightPanelMixin, P layout.operator("preferences.studiolight_install", icon='IMPORT', text="Install...").type = 'MATCAP' layout.separator() + def get_error_message(self): + return tip_("No custom MatCaps configured") + class USERPREF_PT_studiolight_world(StudioLightPanel, StudioLightPanelMixin, Panel): bl_label = "HDRIs" @@ -2127,6 +2136,9 @@ class USERPREF_PT_studiolight_world(StudioLightPanel, StudioLightPanelMixin, Pan layout.operator("preferences.studiolight_install", icon='IMPORT', text="Install...").type = 'WORLD' layout.separator() + def get_error_message(self): + return tip_("No custom HDRIs configured") + class USERPREF_PT_studiolight_lights(StudioLightPanel, StudioLightPanelMixin, Panel): bl_label = "Studio Lights" @@ -2139,6 +2151,9 @@ class USERPREF_PT_studiolight_lights(StudioLightPanel, StudioLightPanelMixin, Pa op.filter_glob = ".sl" layout.separator() + def get_error_message(self): + return tip_("No custom Studio Lights configured") + class USERPREF_PT_studiolight_light_editor(StudioLightPanel, Panel): bl_label = "Editor" -- cgit v1.2.3