I18n: disambiguate a few messages #106718

Merged
Bastien Montagne merged 2 commits from pioverfour/blender:dp_disambiguate into main 2023-04-12 15:09:32 +02:00
42 changed files with 126 additions and 74 deletions

View File

@ -3,6 +3,7 @@
from __future__ import annotations from __future__ import annotations
import bpy import bpy
from bpy.app.translations import contexts as i18n_contexts
from bpy_extras.node_utils import find_node_input from bpy_extras.node_utils import find_node_input
from bl_ui.utils import PresetPanel from bl_ui.utils import PresetPanel
@ -318,7 +319,7 @@ class CYCLES_RENDER_PT_sampling_path_guiding(CyclesButtonsPanel, Panel):
col = layout.column(align=True) col = layout.column(align=True)
col.prop(cscene, "use_surface_guiding", text="Surface") col.prop(cscene, "use_surface_guiding", text="Surface")
col.prop(cscene, "use_volume_guiding", text="Volume") col.prop(cscene, "use_volume_guiding", text="Volume", text_ctxt=i18n_contexts.id_id)

would rather use id_volume context then? Same for other cases below of course.

would rather use `id_volume` context then? Same for other cases below of course.

This reuses an existing message/context pair. I think the reason is that using "Volume" to disambiguate "Volume" is not really useful!

This reuses an existing message/context pair. I think the reason is that using "Volume" to disambiguate "Volume" is not really useful!
class CYCLES_RENDER_PT_sampling_path_guiding_debug(CyclesDebugButtonsPanel, Panel): class CYCLES_RENDER_PT_sampling_path_guiding_debug(CyclesDebugButtonsPanel, Panel):
@ -530,7 +531,7 @@ class CYCLES_RENDER_PT_light_paths_max_bounces(CyclesButtonsPanel, Panel):
col.prop(cscene, "diffuse_bounces", text="Diffuse") col.prop(cscene, "diffuse_bounces", text="Diffuse")
col.prop(cscene, "glossy_bounces", text="Glossy") col.prop(cscene, "glossy_bounces", text="Glossy")
col.prop(cscene, "transmission_bounces", text="Transmission") col.prop(cscene, "transmission_bounces", text="Transmission")
col.prop(cscene, "volume_bounces", text="Volume") col.prop(cscene, "volume_bounces", text="Volume", text_ctxt=i18n_contexts.id_id)
col = layout.column(align=True) col = layout.column(align=True)
col.prop(cscene, "transparent_max_bounces", text="Transparent") col.prop(cscene, "transparent_max_bounces", text="Transparent")
@ -980,7 +981,7 @@ class CYCLES_RENDER_PT_passes_light(CyclesButtonsPanel, Panel):
col.prop(view_layer, "use_pass_transmission_indirect", text="Indirect") col.prop(view_layer, "use_pass_transmission_indirect", text="Indirect")
col.prop(view_layer, "use_pass_transmission_color", text="Color") col.prop(view_layer, "use_pass_transmission_color", text="Color")
col = layout.column(heading="Volume", align=True) col = layout.column(heading="Volume", heading_ctxt=i18n_contexts.id_id, align=True)
col.prop(cycles_view_layer, "use_pass_volume_direct", text="Direct") col.prop(cycles_view_layer, "use_pass_volume_direct", text="Direct")
col.prop(cycles_view_layer, "use_pass_volume_indirect", text="Indirect") col.prop(cycles_view_layer, "use_pass_volume_indirect", text="Indirect")
@ -1577,6 +1578,7 @@ class CYCLES_WORLD_PT_surface(CyclesButtonsPanel, Panel):
class CYCLES_WORLD_PT_volume(CyclesButtonsPanel, Panel): class CYCLES_WORLD_PT_volume(CyclesButtonsPanel, Panel):
bl_label = "Volume" bl_label = "Volume"
bl_translation_context = i18n_contexts.id_id
bl_context = "world" bl_context = "world"
bl_options = {'DEFAULT_CLOSED'} bl_options = {'DEFAULT_CLOSED'}
@ -1696,6 +1698,7 @@ class CYCLES_WORLD_PT_settings_surface(CyclesButtonsPanel, Panel):
class CYCLES_WORLD_PT_settings_volume(CyclesButtonsPanel, Panel): class CYCLES_WORLD_PT_settings_volume(CyclesButtonsPanel, Panel):
bl_label = "Volume" bl_label = "Volume"
bl_translation_context = i18n_contexts.id_id
bl_parent_id = "CYCLES_WORLD_PT_settings" bl_parent_id = "CYCLES_WORLD_PT_settings"
bl_context = "world" bl_context = "world"
@ -1791,6 +1794,7 @@ class CYCLES_MATERIAL_PT_surface(CyclesButtonsPanel, Panel):
class CYCLES_MATERIAL_PT_volume(CyclesButtonsPanel, Panel): class CYCLES_MATERIAL_PT_volume(CyclesButtonsPanel, Panel):
bl_label = "Volume" bl_label = "Volume"
bl_translation_context = i18n_contexts.id_id
bl_context = "material" bl_context = "material"
bl_options = {'DEFAULT_CLOSED'} bl_options = {'DEFAULT_CLOSED'}
@ -1874,6 +1878,7 @@ class CYCLES_MATERIAL_PT_settings_surface(CyclesButtonsPanel, Panel):
class CYCLES_MATERIAL_PT_settings_volume(CyclesButtonsPanel, Panel): class CYCLES_MATERIAL_PT_settings_volume(CyclesButtonsPanel, Panel):
bl_label = "Volume" bl_label = "Volume"
bl_translation_context = i18n_contexts.id_id
bl_parent_id = "CYCLES_MATERIAL_PT_settings" bl_parent_id = "CYCLES_MATERIAL_PT_settings"
bl_context = "material" bl_context = "material"

View File

@ -592,6 +592,7 @@ class NODE_MT_category_GEO_VECTOR(Menu):
class NODE_MT_category_GEO_VOLUME(Menu): class NODE_MT_category_GEO_VOLUME(Menu):
bl_idname = "NODE_MT_category_GEO_VOLUME" bl_idname = "NODE_MT_category_GEO_VOLUME"
bl_label = "Volume" bl_label = "Volume"
bl_translation_context = i18n_contexts.id_id
def draw(self, context): def draw(self, context):
layout = self.layout layout = self.layout

View File

@ -1,6 +1,7 @@
# SPDX-License-Identifier: GPL-2.0-or-later # SPDX-License-Identifier: GPL-2.0-or-later
import bpy import bpy
from bpy.types import Panel from bpy.types import Panel
from bpy.app.translations import contexts as i18n_contexts
from rna_prop_ui import PropertyPanel from rna_prop_ui import PropertyPanel
from bl_ui.utils import PresetPanel from bl_ui.utils import PresetPanel
@ -67,6 +68,7 @@ class DATA_PT_context_camera(CameraButtonsPanel, Panel):
class DATA_PT_lens(CameraButtonsPanel, Panel): class DATA_PT_lens(CameraButtonsPanel, Panel):
bl_label = "Lens" bl_label = "Lens"
bl_translation_context = i18n_contexts.id_camera
COMPAT_ENGINES = { COMPAT_ENGINES = {
'BLENDER_RENDER', 'BLENDER_RENDER',
'BLENDER_EEVEE', 'BLENDER_EEVEE',

View File

@ -1,5 +1,6 @@
# SPDX-License-Identifier: GPL-2.0-or-later # SPDX-License-Identifier: GPL-2.0-or-later
from bpy.types import Panel from bpy.types import Panel
from bpy.app.translations import contexts as i18n_contexts
class DataButtonsPanel: class DataButtonsPanel:
@ -15,6 +16,7 @@ class DataButtonsPanel:
class DATA_PT_empty(DataButtonsPanel, Panel): class DATA_PT_empty(DataButtonsPanel, Panel):
bl_label = "Empty" bl_label = "Empty"
bl_translation_context = i18n_contexts.id_id

id_object context (and same for other cases below as well).

`id_object` context (and same for other cases below as well).

This reuses an existing message/context pair.

This reuses an existing message/context pair.
def draw(self, context): def draw(self, context):
layout = self.layout layout = self.layout

View File

@ -1,5 +1,6 @@
# SPDX-License-Identifier: GPL-2.0-or-later # SPDX-License-Identifier: GPL-2.0-or-later
import bpy import bpy
from bpy.app.translations import contexts as i18n_contexts
from bpy.types import Panel from bpy.types import Panel
from rna_prop_ui import PropertyPanel from rna_prop_ui import PropertyPanel
@ -89,7 +90,7 @@ class DATA_PT_EEVEE_light(DataButtonsPanel, Panel):
col.prop(light, "diffuse_factor", text="Diffuse") col.prop(light, "diffuse_factor", text="Diffuse")
col.prop(light, "specular_factor", text="Specular") col.prop(light, "specular_factor", text="Specular")
col.prop(light, "volume_factor", text="Volume") col.prop(light, "volume_factor", text="Volume", text_ctxt=i18n_contexts.id_id)
col.separator() col.separator()

View File

@ -1,6 +1,7 @@
# SPDX-License-Identifier: GPL-2.0-or-later # SPDX-License-Identifier: GPL-2.0-or-later
import bpy import bpy
from bpy.types import Menu, Panel, UIList from bpy.types import Menu, Panel, UIList
from bpy.app.translations import contexts as i18n_contexts
from rna_prop_ui import PropertyPanel from rna_prop_ui import PropertyPanel
from bpy_extras.node_utils import find_node_input from bpy_extras.node_utils import find_node_input
@ -176,6 +177,7 @@ class EEVEE_MATERIAL_PT_surface(MaterialButtonsPanel, Panel):
class EEVEE_MATERIAL_PT_volume(MaterialButtonsPanel, Panel): class EEVEE_MATERIAL_PT_volume(MaterialButtonsPanel, Panel):
bl_label = "Volume" bl_label = "Volume"
bl_translation_context = i18n_contexts.id_id
bl_context = "material" bl_context = "material"
bl_options = {'DEFAULT_CLOSED'} bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_EEVEE'} COMPAT_ENGINES = {'BLENDER_EEVEE'}

View File

@ -164,8 +164,8 @@ class RENDER_PT_time_stretching(RenderOutputButtonsPanel, Panel):
rd = context.scene.render rd = context.scene.render
col = layout.column(align=True) col = layout.column(align=True)
col.prop(rd, "frame_map_old", text="Old") col.prop(rd, "frame_map_old", text="Old", text_ctxt=i18n_contexts.time)
col.prop(rd, "frame_map_new", text="New") col.prop(rd, "frame_map_new", text="New", text_ctxt=i18n_contexts.time)
class RENDER_PT_post_processing(RenderOutputButtonsPanel, Panel): class RENDER_PT_post_processing(RenderOutputButtonsPanel, Panel):

View File

@ -1,5 +1,6 @@
# SPDX-License-Identifier: GPL-2.0-or-later # SPDX-License-Identifier: GPL-2.0-or-later
from bpy.types import Menu, Panel, UIList, ViewLayer from bpy.types import Menu, Panel, UIList, ViewLayer
from bpy.app.translations import contexts as i18n_contexts
from rna_prop_ui import PropertyPanel from rna_prop_ui import PropertyPanel
@ -140,7 +141,7 @@ class VIEWLAYER_PT_eevee_layer_passes_light(ViewLayerButtonsPanel, Panel):
col.prop(view_layer, "use_pass_glossy_direct", text="Light") col.prop(view_layer, "use_pass_glossy_direct", text="Light")
col.prop(view_layer, "use_pass_glossy_color", text="Color") col.prop(view_layer, "use_pass_glossy_color", text="Color")
col = layout.column(heading="Volume", align=True) col = layout.column(heading="Volume", heading_ctxt=i18n_contexts.id_id, align=True)
col.prop(view_layer_eevee, "use_pass_volume_direct", text="Light") col.prop(view_layer_eevee, "use_pass_volume_direct", text="Light")
col = layout.column(heading="Other", align=True) col = layout.column(heading="Other", align=True)

View File

@ -1,6 +1,7 @@
# SPDX-License-Identifier: GPL-2.0-or-later # SPDX-License-Identifier: GPL-2.0-or-later
import bpy import bpy
from bpy.types import Panel from bpy.types import Panel
from bpy.app.translations import contexts as i18n_contexts
from rna_prop_ui import PropertyPanel from rna_prop_ui import PropertyPanel
from bpy_extras.node_utils import find_node_input from bpy_extras.node_utils import find_node_input
@ -115,6 +116,7 @@ class EEVEE_WORLD_PT_surface(WorldButtonsPanel, Panel):
class EEVEE_WORLD_PT_volume(WorldButtonsPanel, Panel): class EEVEE_WORLD_PT_volume(WorldButtonsPanel, Panel):
bl_label = "Volume" bl_label = "Volume"
bl_translation_context = i18n_contexts.id_id
bl_options = {'DEFAULT_CLOSED'} bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_EEVEE'} COMPAT_ENGINES = {'BLENDER_EEVEE'}

View File

@ -890,6 +890,7 @@ class CLIP_PT_tracking_lens(Panel):
bl_region_type = 'UI' bl_region_type = 'UI'
bl_category = "Track" bl_category = "Track"
bl_label = "Lens" bl_label = "Lens"
bl_translation_context = i18n_contexts.id_camera
bl_parent_id = 'CLIP_PT_tracking_camera' bl_parent_id = 'CLIP_PT_tracking_camera'
bl_options = {'DEFAULT_CLOSED'} bl_options = {'DEFAULT_CLOSED'}

View File

@ -1762,7 +1762,7 @@ class SEQUENCER_PT_scene(SequencerButtonsPanel, Panel):
sub.use_property_decorate = True sub.use_property_decorate = True
split = sub.split(factor=0.4, align=True) split = sub.split(factor=0.4, align=True)
split.alignment = 'RIGHT' split.alignment = 'RIGHT'
split.label(text="Volume") split.label(text="Volume", text_ctxt=i18n_contexts.id_sound)
split.prop(scene, "audio_volume", text="") split.prop(scene, "audio_volume", text="")
sub.use_property_decorate = False sub.use_property_decorate = False
@ -1993,7 +1993,7 @@ class SEQUENCER_PT_adjust_sound(SequencerButtonsPanel, Panel):
split = col.split(factor=0.4) split = col.split(factor=0.4)
split.alignment = 'RIGHT' split.alignment = 'RIGHT'
split.label(text="Volume") split.label(text="Volume", text_ctxt=i18n_contexts.id_sound)
split.prop(strip, "volume", text="") split.prop(strip, "volume", text="")
audio_channels = context.scene.render.ffmpeg.audio_channels audio_channels = context.scene.render.ffmpeg.audio_channels

View File

@ -418,7 +418,7 @@ class USERPREF_PT_edit_objects_duplicate_data(EditingPanel, CenterAlignMixIn, Pa
col.prop(edit, "use_duplicate_surface", text="Surface") col.prop(edit, "use_duplicate_surface", text="Surface")
col.prop(edit, "use_duplicate_text", text="Text") col.prop(edit, "use_duplicate_text", text="Text")
# col.prop(edit, "use_duplicate_texture", text="Texture") # Not implemented. # col.prop(edit, "use_duplicate_texture", text="Texture") # Not implemented.
col.prop(edit, "use_duplicate_volume", text="Volume") col.prop(edit, "use_duplicate_volume", text="Volume", text_ctxt=i18n_contexts.id_id)
class USERPREF_PT_edit_cursor(EditingPanel, CenterAlignMixIn, Panel): class USERPREF_PT_edit_cursor(EditingPanel, CenterAlignMixIn, Panel):

View File

@ -2310,7 +2310,7 @@ class VIEW3D_MT_add(Menu):
layout.operator("object.text_add", text="Text", icon='OUTLINER_OB_FONT') layout.operator("object.text_add", text="Text", icon='OUTLINER_OB_FONT')
if context.preferences.experimental.use_new_point_cloud_type: if context.preferences.experimental.use_new_point_cloud_type:
layout.operator("object.pointcloud_add", text="Point Cloud", icon='OUTLINER_OB_POINTCLOUD') layout.operator("object.pointcloud_add", text="Point Cloud", icon='OUTLINER_OB_POINTCLOUD')
layout.menu("VIEW3D_MT_volume_add", text="Volume", icon='OUTLINER_OB_VOLUME') layout.menu("VIEW3D_MT_volume_add", text="Volume", text_ctxt=i18n_contexts.id_id, icon='OUTLINER_OB_VOLUME')
layout.operator_menu_enum("object.gpencil_add", "type", text="Grease Pencil", icon='OUTLINER_OB_GREASEPENCIL') layout.operator_menu_enum("object.gpencil_add", "type", text="Grease Pencil", icon='OUTLINER_OB_GREASEPENCIL')
layout.separator() layout.separator()

View File

@ -2131,16 +2131,16 @@ static const char *get_obdata_defname(int type)
case OB_POINTCLOUD: case OB_POINTCLOUD:
return DATA_("PointCloud"); return DATA_("PointCloud");
case OB_VOLUME: case OB_VOLUME:
return DATA_("Volume"); return CTX_DATA_(BLT_I18NCONTEXT_ID_ID, "Volume");
case OB_EMPTY: case OB_EMPTY:
return DATA_("Empty"); return CTX_DATA_(BLT_I18NCONTEXT_ID_ID, "Empty");
case OB_GPENCIL_LEGACY: case OB_GPENCIL_LEGACY:
return DATA_("GPencil"); return DATA_("GPencil");
case OB_LIGHTPROBE: case OB_LIGHTPROBE:
return DATA_("LightProbe"); return DATA_("LightProbe");
default: default:
CLOG_ERROR(&LOG, "Internal error, bad type: %d", type); CLOG_ERROR(&LOG, "Internal error, bad type: %d", type);
return DATA_("Empty"); return CTX_DATA_(BLT_I18NCONTEXT_ID_ID, "Empty");
} }
} }

View File

@ -82,55 +82,55 @@ const char *BLT_translate_do_new_dataname(const char *msgctxt, const char *msgid
#define BLT_I18NCONTEXT_ID_ACTION "Action" #define BLT_I18NCONTEXT_ID_ACTION "Action"
#define BLT_I18NCONTEXT_ID_ARMATURE "Armature" #define BLT_I18NCONTEXT_ID_ARMATURE "Armature"
#define BLT_I18NCONTEXT_ID_BRUSH "Brush" #define BLT_I18NCONTEXT_ID_BRUSH "Brush"
#define BLT_I18NCONTEXT_ID_CAMERA "Camera"
#define BLT_I18NCONTEXT_ID_CACHEFILE "CacheFile" #define BLT_I18NCONTEXT_ID_CACHEFILE "CacheFile"
#define BLT_I18NCONTEXT_ID_CAMERA "Camera"
#define BLT_I18NCONTEXT_ID_COLLECTION "Collection" #define BLT_I18NCONTEXT_ID_COLLECTION "Collection"
#define BLT_I18NCONTEXT_ID_CURVES "Curves"
#define BLT_I18NCONTEXT_ID_CURVE_LEGACY "Curve" #define BLT_I18NCONTEXT_ID_CURVE_LEGACY "Curve"
#define BLT_I18NCONTEXT_ID_FREESTYLELINESTYLE "FreestyleLineStyle" #define BLT_I18NCONTEXT_ID_FREESTYLELINESTYLE "FreestyleLineStyle"
#define BLT_I18NCONTEXT_ID_GPENCIL "GPencil" #define BLT_I18NCONTEXT_ID_GPENCIL "GPencil"
#define BLT_I18NCONTEXT_ID_CURVES "Curves"
#define BLT_I18NCONTEXT_ID_ID "ID" #define BLT_I18NCONTEXT_ID_ID "ID"
#define BLT_I18NCONTEXT_ID_IMAGE "Image" #define BLT_I18NCONTEXT_ID_IMAGE "Image"
// #define BLT_I18NCONTEXT_ID_IPO "Ipo" /* DEPRECATED */ // #define BLT_I18NCONTEXT_ID_IPO "Ipo" /* DEPRECATED */
#define BLT_I18NCONTEXT_ID_SHAPEKEY "Key"
#define BLT_I18NCONTEXT_ID_SIMULATION "Simulation"
#define BLT_I18NCONTEXT_ID_LIGHT "Light"
#define BLT_I18NCONTEXT_ID_LIBRARY "Library"
#define BLT_I18NCONTEXT_ID_LATTICE "Lattice" #define BLT_I18NCONTEXT_ID_LATTICE "Lattice"
#define BLT_I18NCONTEXT_ID_LIBRARY "Library"
#define BLT_I18NCONTEXT_ID_LIGHT "Light"
#define BLT_I18NCONTEXT_ID_LIGHTPROBE "LightProbe"
#define BLT_I18NCONTEXT_ID_MASK "Mask"
#define BLT_I18NCONTEXT_ID_MATERIAL "Material" #define BLT_I18NCONTEXT_ID_MATERIAL "Material"
#define BLT_I18NCONTEXT_ID_METABALL "Metaball"
#define BLT_I18NCONTEXT_ID_MESH "Mesh" #define BLT_I18NCONTEXT_ID_MESH "Mesh"
#define BLT_I18NCONTEXT_ID_METABALL "Metaball"
#define BLT_I18NCONTEXT_ID_MOVIECLIP "MovieClip"
#define BLT_I18NCONTEXT_ID_NODETREE "NodeTree" #define BLT_I18NCONTEXT_ID_NODETREE "NodeTree"
#define BLT_I18NCONTEXT_ID_OBJECT "Object" #define BLT_I18NCONTEXT_ID_OBJECT "Object"
#define BLT_I18NCONTEXT_ID_PAINTCURVE "PaintCurve" #define BLT_I18NCONTEXT_ID_PAINTCURVE "PaintCurve"
#define BLT_I18NCONTEXT_ID_PALETTE "Palette" #define BLT_I18NCONTEXT_ID_PALETTE "Palette"
#define BLT_I18NCONTEXT_ID_PARTICLESETTINGS "ParticleSettings" #define BLT_I18NCONTEXT_ID_PARTICLESETTINGS "ParticleSettings"
#define BLT_I18NCONTEXT_ID_POINTCLOUD "PointCloud" #define BLT_I18NCONTEXT_ID_POINTCLOUD "PointCloud"
#define BLT_I18NCONTEXT_ID_LIGHTPROBE "LightProbe"
#define BLT_I18NCONTEXT_ID_SCENE "Scene" #define BLT_I18NCONTEXT_ID_SCENE "Scene"
#define BLT_I18NCONTEXT_ID_SCREEN "Screen" #define BLT_I18NCONTEXT_ID_SCREEN "Screen"
#define BLT_I18NCONTEXT_ID_SEQUENCE "Sequence" #define BLT_I18NCONTEXT_ID_SEQUENCE "Sequence"
#define BLT_I18NCONTEXT_ID_SPEAKER "Speaker" #define BLT_I18NCONTEXT_ID_SHAPEKEY "Key"
#define BLT_I18NCONTEXT_ID_SIMULATION "Simulation"
#define BLT_I18NCONTEXT_ID_SOUND "Sound" #define BLT_I18NCONTEXT_ID_SOUND "Sound"
#define BLT_I18NCONTEXT_ID_TEXTURE "Texture" #define BLT_I18NCONTEXT_ID_SPEAKER "Speaker"
#define BLT_I18NCONTEXT_ID_TEXT "Text" #define BLT_I18NCONTEXT_ID_TEXT "Text"
#define BLT_I18NCONTEXT_ID_TEXTURE "Texture"
#define BLT_I18NCONTEXT_ID_VFONT "VFont" #define BLT_I18NCONTEXT_ID_VFONT "VFont"
#define BLT_I18NCONTEXT_ID_VOLUME "Volume" #define BLT_I18NCONTEXT_ID_VOLUME "Volume"
#define BLT_I18NCONTEXT_ID_WORLD "World"
#define BLT_I18NCONTEXT_ID_WORKSPACE "WorkSpace"
#define BLT_I18NCONTEXT_ID_WINDOWMANAGER "WindowManager" #define BLT_I18NCONTEXT_ID_WINDOWMANAGER "WindowManager"
#define BLT_I18NCONTEXT_ID_MOVIECLIP "MovieClip" #define BLT_I18NCONTEXT_ID_WORKSPACE "WorkSpace"
#define BLT_I18NCONTEXT_ID_MASK "Mask" #define BLT_I18NCONTEXT_ID_WORLD "World"
/* Editors-types contexts. */ /* Editors-types contexts. */
#define BLT_I18NCONTEXT_EDITOR_VIEW3D "View3D"
#define BLT_I18NCONTEXT_EDITOR_FILEBROWSER "File browser" #define BLT_I18NCONTEXT_EDITOR_FILEBROWSER "File browser"
#define BLT_I18NCONTEXT_EDITOR_VIEW3D "View3D"
/* Generic contexts. */ /* Generic contexts. */
#define BLT_I18NCONTEXT_VIRTUAL_REALITY "Virtual reality"
#define BLT_I18NCONTEXT_CONSTRAINT "Constraint"
#define BLT_I18NCONTEXT_COLOR "Color"
#define BLT_I18NCONTEXT_AMOUNT "Amount" #define BLT_I18NCONTEXT_AMOUNT "Amount"
#define BLT_I18NCONTEXT_COLOR "Color"
#define BLT_I18NCONTEXT_CONSTRAINT "Constraint"
#define BLT_I18NCONTEXT_TIME "Time"
#define BLT_I18NCONTEXT_UNIT "Unit" #define BLT_I18NCONTEXT_UNIT "Unit"
/* Helper for bpy.app.i18n object... */ /* Helper for bpy.app.i18n object... */
@ -155,25 +155,25 @@ typedef struct {
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_ACTION, "id_action"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_ACTION, "id_action"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_ARMATURE, "id_armature"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_ARMATURE, "id_armature"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_BRUSH, "id_brush"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_BRUSH, "id_brush"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_CAMERA, "id_camera"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_CACHEFILE, "id_cachefile"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_CACHEFILE, "id_cachefile"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_CAMERA, "id_camera"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_COLLECTION, "id_collection"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_COLLECTION, "id_collection"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_CURVES, "id_curves"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_CURVE_LEGACY, "id_curve"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_CURVE_LEGACY, "id_curve"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_FREESTYLELINESTYLE, "id_fs_linestyle"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_FREESTYLELINESTYLE, "id_fs_linestyle"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_GPENCIL, "id_gpencil"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_GPENCIL, "id_gpencil"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_CURVES, "id_curves"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_ID, "id_id"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_ID, "id_id"), \
BLT_I18NCONTEXTS_ITEM( \ BLT_I18NCONTEXTS_ITEM( \
BLT_I18NCONTEXT_ID_IMAGE, \ BLT_I18NCONTEXT_ID_IMAGE, \
"id_image"), /* BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_IPO, "id_ipo"), */ \ "id_image"), /* BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_IPO, "id_ipo"), */ \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SHAPEKEY, "id_shapekey"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_LIGHT, "id_light"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_LIBRARY, "id_library"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_LATTICE, "id_lattice"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_LATTICE, "id_lattice"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_LIBRARY, "id_library"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_LIGHT, "id_light"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_LIGHTPROBE, "id_lightprobe"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_MASK, "id_mask"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_MASK, "id_mask"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_MATERIAL, "id_material"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_MATERIAL, "id_material"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_METABALL, "id_metaball"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_MESH, "id_mesh"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_MESH, "id_mesh"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_METABALL, "id_metaball"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_MOVIECLIP, "id_movieclip"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_MOVIECLIP, "id_movieclip"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_NODETREE, "id_nodetree"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_NODETREE, "id_nodetree"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_OBJECT, "id_object"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_OBJECT, "id_object"), \
@ -181,26 +181,26 @@ typedef struct {
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_PALETTE, "id_palette"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_PALETTE, "id_palette"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_PARTICLESETTINGS, "id_particlesettings"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_PARTICLESETTINGS, "id_particlesettings"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_POINTCLOUD, "id_pointcloud"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_POINTCLOUD, "id_pointcloud"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_LIGHTPROBE, "id_lightprobe"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SCENE, "id_scene"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SCENE, "id_scene"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SCREEN, "id_screen"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SCREEN, "id_screen"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SEQUENCE, "id_sequence"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SEQUENCE, "id_sequence"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SHAPEKEY, "id_shapekey"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SIMULATION, "id_simulation"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SIMULATION, "id_simulation"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SPEAKER, "id_speaker"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SOUND, "id_sound"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SOUND, "id_sound"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_TEXTURE, "id_texture"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SPEAKER, "id_speaker"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_TEXT, "id_text"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_TEXT, "id_text"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_TEXTURE, "id_texture"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_VFONT, "id_vfont"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_VFONT, "id_vfont"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_VOLUME, "id_volume"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_VOLUME, "id_volume"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_WORLD, "id_world"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_WORKSPACE, "id_workspace"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_WINDOWMANAGER, "id_windowmanager"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_WINDOWMANAGER, "id_windowmanager"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_EDITOR_VIEW3D, "editor_view3d"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_WORKSPACE, "id_workspace"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_WORLD, "id_world"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_EDITOR_FILEBROWSER, "editor_filebrowser"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_EDITOR_FILEBROWSER, "editor_filebrowser"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_VIRTUAL_REALITY, "virtual_reality"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_EDITOR_VIEW3D, "editor_view3d"), \
pioverfour marked this conversation as resolved Outdated

This should also be re-sorted below the filebrowser one then.

This should also be re-sorted below the filebrowser one then.

I looked at the lists and actually, IDs are not sorted the same in the defines and in BLT_I18NCONTEXTS_DESC . Should I sort them both while I’m at it? Maybe revert and do another commit?

I looked at the lists and actually, IDs are not sorted the same in the `define`s and in `BLT_I18NCONTEXTS_DESC `. Should I sort them both while I’m at it? Maybe revert and do another commit?

Sounds good, but indeed would have it as a separate 'cleanup' commit then.

Sounds good, but indeed would have it as a separate 'cleanup' commit then.
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_CONSTRAINT, "constraint"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_COLOR, "color"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_AMOUNT, "amount"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_AMOUNT, "amount"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_COLOR, "color"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_CONSTRAINT, "constraint"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_TIME, "time"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_UNIT, "unit"), \ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_UNIT, "unit"), \
{ \ { \
NULL, NULL, NULL \ NULL, NULL, NULL \

View File

@ -1052,7 +1052,7 @@ static void create_inspection_string_for_geometry_socket(std::stringstream &ss,
break; break;
} }
case GEO_COMPONENT_TYPE_VOLUME: { case GEO_COMPONENT_TYPE_VOLUME: {
ss << TIP_("Volume"); ss << CTX_TIP_(BLT_I18NCONTEXT_ID_ID, "Volume");
break; break;
} }
case GEO_COMPONENT_TYPE_EDIT: { case GEO_COMPONENT_TYPE_EDIT: {

View File

@ -215,6 +215,7 @@ static void rna_def_text(BlenderRNA *brna)
prop = RNA_def_property(srna, "is_modified", PROP_BOOLEAN, PROP_NONE); prop = RNA_def_property(srna, "is_modified", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Text_modified_get", NULL); RNA_def_property_boolean_funcs(prop, "rna_Text_modified_get", NULL);
RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_TEXT);
RNA_def_property_ui_text( RNA_def_property_ui_text(
prop, "Modified", "Text file on disk is different than the one in memory"); prop, "Modified", "Text file on disk is different than the one in memory");

View File

@ -2265,6 +2265,7 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
prop = RNA_def_property(srna, "empty", PROP_FLOAT, PROP_COLOR_GAMMA); prop = RNA_def_property(srna, "empty", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3); RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Empty", ""); RNA_def_property_ui_text(prop, "Empty", "");
RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_ID);
RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "light", PROP_FLOAT, PROP_COLOR_GAMMA); prop = RNA_def_property(srna, "light", PROP_FLOAT, PROP_COLOR_GAMMA);

View File

@ -169,7 +169,7 @@ static void panel_draw(const bContext * /*C*/, Panel *panel)
uiItemR(col, ptr, "mirror_object", 0, nullptr, ICON_NONE); uiItemR(col, ptr, "mirror_object", 0, nullptr, ICON_NONE);
uiItemR(col, ptr, "use_clip", 0, IFACE_("Clipping"), ICON_NONE); uiItemR(col, ptr, "use_clip", 0, CTX_IFACE_(BLT_I18NCONTEXT_ID_MESH, "Clipping"), ICON_NONE);
pioverfour marked this conversation as resolved Outdated

While am not necessarily against a new 'MODIFIER' context, I think that this use case is a poor advocate for it. Clipping here (as opposed to camera clipping) is more related to geometry in general, so would rather (slightly) abuse BLT_I18NCONTEXT_ID_MESH here instead.

While am not necessarily against a new 'MODIFIER' context, I think that this use case is a poor advocate for it. Clipping here (as opposed to camera clipping) is more related to geometry in general, so would rather (slightly) abuse `BLT_I18NCONTEXT_ID_MESH` here instead.
row = uiLayoutRowWithHeading(col, true, IFACE_("Merge")); row = uiLayoutRowWithHeading(col, true, IFACE_("Merge"));
uiItemR(row, ptr, "use_mirror_merge", 0, "", ICON_NONE); uiItemR(row, ptr, "use_mirror_merge", 0, "", ICON_NONE);

View File

@ -32,7 +32,8 @@ static void cmp_node_huesatval_declare(NodeDeclarationBuilder &b)
.max(2.0f) .max(2.0f)
.subtype(PROP_FACTOR) .subtype(PROP_FACTOR)
.compositor_domain_priority(2); .compositor_domain_priority(2);
b.add_input<decl::Float>(N_("Value")) b.add_input<decl::Float>(CTX_N_(BLT_I18NCONTEXT_COLOR, "Value"))
.translation_context(BLT_I18NCONTEXT_COLOR)
.default_value(1.0f) .default_value(1.0f)
.min(0.0f) .min(0.0f)
.max(2.0f) .max(2.0f)

View File

@ -7,7 +7,8 @@ namespace blender::nodes::node_fn_input_special_characters_cc {
static void node_declare(NodeDeclarationBuilder &b) static void node_declare(NodeDeclarationBuilder &b)
{ {
b.add_output<decl::String>(N_("Line Break")); b.add_output<decl::String>(N_("Line Break"));
b.add_output<decl::String>(N_("Tab")); b.add_output<decl::String>(CTX_N_(BLT_I18NCONTEXT_ID_TEXT, "Tab"))
.translation_context(BLT_I18NCONTEXT_ID_TEXT);
} }
class MF_SpecialCharacters : public mf::MultiFunction { class MF_SpecialCharacters : public mf::MultiFunction {

View File

@ -25,7 +25,9 @@ NODE_STORAGE_FUNCS(NodeGeometryDistributePointsInVolume)
static void node_declare(NodeDeclarationBuilder &b) static void node_declare(NodeDeclarationBuilder &b)
{ {
b.add_input<decl::Geometry>(N_("Volume")).supported_type(GEO_COMPONENT_TYPE_VOLUME); b.add_input<decl::Geometry>(CTX_N_(BLT_I18NCONTEXT_ID_ID, "Volume"))
.supported_type(GEO_COMPONENT_TYPE_VOLUME)
.translation_context(BLT_I18NCONTEXT_ID_ID);
b.add_input<decl::Float>(N_("Density")) b.add_input<decl::Float>(N_("Density"))
.default_value(1.0f) .default_value(1.0f)
.min(0.0f) .min(0.0f)

View File

@ -5,13 +5,16 @@
#include "BKE_mesh.hh" #include "BKE_mesh.hh"
#include "BLT_translation.h"
#include "node_geometry_util.hh" #include "node_geometry_util.hh"
namespace blender::nodes::node_geo_input_mesh_face_area_cc { namespace blender::nodes::node_geo_input_mesh_face_area_cc {
static void node_declare(NodeDeclarationBuilder &b) static void node_declare(NodeDeclarationBuilder &b)
{ {
b.add_output<decl::Float>(N_("Area")) b.add_output<decl::Float>(CTX_N_(BLT_I18NCONTEXT_AMOUNT, "Area"))
.translation_context(BLT_I18NCONTEXT_AMOUNT)
.field_source() .field_source()
.description(N_("The surface area of each of the mesh's faces")); .description(N_("The surface area of each of the mesh's faces"));
} }

View File

@ -16,7 +16,7 @@ static void node_declare(NodeDeclarationBuilder &b)
{ {
b.add_input<decl::Geometry>(N_("Geometry")).supported_type(GEO_COMPONENT_TYPE_MESH); b.add_input<decl::Geometry>(N_("Geometry")).supported_type(GEO_COMPONENT_TYPE_MESH);
b.add_input<decl::Material>(N_("Old")); b.add_input<decl::Material>(N_("Old"));
b.add_input<decl::Material>(N_("New")); b.add_input<decl::Material>(N_("New")).translation_context(BLT_I18NCONTEXT_ID_MATERIAL);
b.add_output<decl::Geometry>(N_("Geometry")).propagate_all(); b.add_output<decl::Geometry>(N_("Geometry")).propagate_all();
} }

View File

@ -22,10 +22,13 @@ namespace blender::nodes::node_geo_mean_filter_sdf_volume_cc {
static void node_declare(NodeDeclarationBuilder &b) static void node_declare(NodeDeclarationBuilder &b)
{ {
b.add_input<decl::Geometry>(N_("Volume")).supported_type(GEO_COMPONENT_TYPE_VOLUME); b.add_input<decl::Geometry>(CTX_N_(BLT_I18NCONTEXT_ID_ID, "Volume"))
.supported_type(GEO_COMPONENT_TYPE_VOLUME)
.translation_context(BLT_I18NCONTEXT_ID_ID);
b.add_input<decl::Int>(N_("Iterations")).min(1).max(256).default_value(1); b.add_input<decl::Int>(N_("Iterations")).min(1).max(256).default_value(1);
b.add_input<decl::Int>(N_("Width")).min(0).default_value(1); b.add_input<decl::Int>(N_("Width")).min(0).default_value(1);
b.add_output<decl::Geometry>(N_("Volume")); b.add_output<decl::Geometry>(CTX_N_(BLT_I18NCONTEXT_ID_ID, "Volume"))
.translation_context(BLT_I18NCONTEXT_ID_ID);
} }
static void search_node_add_ops(GatherAddNodeSearchParams &params) static void search_node_add_ops(GatherAddNodeSearchParams &params)

View File

@ -39,7 +39,8 @@ static void node_declare(NodeDeclarationBuilder &b)
.default_value(3.0f) .default_value(3.0f)
.min(1.01f) .min(1.01f)
.max(10.0f); .max(10.0f);
b.add_output<decl::Geometry>(N_("Volume")); b.add_output<decl::Geometry>(CTX_N_(BLT_I18NCONTEXT_ID_ID, "Volume"))
.translation_context(BLT_I18NCONTEXT_ID_ID);
} }
static void search_node_add_ops(GatherAddNodeSearchParams &params) static void search_node_add_ops(GatherAddNodeSearchParams &params)

View File

@ -47,7 +47,8 @@ static void node_declare(NodeDeclarationBuilder &b)
b.add_input<decl::Bool>(N_("Fill Volume")) b.add_input<decl::Bool>(N_("Fill Volume"))
.default_value(true) .default_value(true)
.description(N_("Initialize the density grid in every cell inside the enclosed volume")); .description(N_("Initialize the density grid in every cell inside the enclosed volume"));
b.add_output<decl::Geometry>(N_("Volume")); b.add_output<decl::Geometry>(CTX_N_(BLT_I18NCONTEXT_ID_ID, "Volume"))
.translation_context(BLT_I18NCONTEXT_ID_ID);
} }
static void node_layout(uiLayout *layout, bContext * /*C*/, PointerRNA *ptr) static void node_layout(uiLayout *layout, bContext * /*C*/, PointerRNA *ptr)

View File

@ -22,9 +22,12 @@ namespace blender::nodes::node_geo_offset_sdf_volume_cc {
static void node_declare(NodeDeclarationBuilder &b) static void node_declare(NodeDeclarationBuilder &b)
{ {
b.add_input<decl::Geometry>(N_("Volume")).supported_type(GEO_COMPONENT_TYPE_VOLUME); b.add_input<decl::Geometry>(CTX_N_(BLT_I18NCONTEXT_ID_ID, "Volume"))
.supported_type(GEO_COMPONENT_TYPE_VOLUME)
.translation_context(BLT_I18NCONTEXT_ID_ID);
b.add_input<decl::Float>(N_("Distance")).default_value(0.1f).subtype(PROP_DISTANCE); b.add_input<decl::Float>(N_("Distance")).default_value(0.1f).subtype(PROP_DISTANCE);
b.add_output<decl::Geometry>(N_("Volume")); b.add_output<decl::Geometry>(CTX_N_(BLT_I18NCONTEXT_ID_ID, "Volume"))
.translation_context(BLT_I18NCONTEXT_ID_ID);
} }
static void search_node_add_ops(GatherAddNodeSearchParams &params) static void search_node_add_ops(GatherAddNodeSearchParams &params)

View File

@ -39,7 +39,8 @@ static void node_declare(NodeDeclarationBuilder &b)
.min(0.0f) .min(0.0f)
.subtype(PROP_DISTANCE) .subtype(PROP_DISTANCE)
.field_on_all(); .field_on_all();
b.add_output<decl::Geometry>(N_("Volume")); b.add_output<decl::Geometry>(CTX_N_(BLT_I18NCONTEXT_ID_ID, "Volume"))
.translation_context(BLT_I18NCONTEXT_ID_ID);
} }
static void search_node_add_ops(GatherAddNodeSearchParams &params) static void search_node_add_ops(GatherAddNodeSearchParams &params)

View File

@ -161,7 +161,8 @@ static void node_declare(NodeDeclarationBuilder &b)
.min(0.0f) .min(0.0f)
.subtype(PROP_DISTANCE) .subtype(PROP_DISTANCE)
.field_on_all(); .field_on_all();
b.add_output<decl::Geometry>(N_("Volume")); b.add_output<decl::Geometry>(CTX_N_(BLT_I18NCONTEXT_ID_ID, "Volume"))
.translation_context(BLT_I18NCONTEXT_ID_ID);
} }
static void node_layout(uiLayout *layout, bContext * /*C*/, PointerRNA *ptr) static void node_layout(uiLayout *layout, bContext * /*C*/, PointerRNA *ptr)

View File

@ -25,7 +25,8 @@ static void node_declare(NodeDeclarationBuilder &b)
.default_value(3.0f) .default_value(3.0f)
.min(1.01f) .min(1.01f)
.max(10.0f); .max(10.0f);
b.add_output<decl::Geometry>(N_("Volume")); b.add_output<decl::Geometry>(CTX_N_(BLT_I18NCONTEXT_ID_ID, "Volume"))
.translation_context(BLT_I18NCONTEXT_ID_ID);
} }
static void search_node_add_ops(GatherAddNodeSearchParams &params) static void search_node_add_ops(GatherAddNodeSearchParams &params)

View File

@ -10,7 +10,9 @@ static void node_declare(NodeDeclarationBuilder &b)
b.add_output<decl::Geometry>(N_("Mesh")).propagate_all(); b.add_output<decl::Geometry>(N_("Mesh")).propagate_all();
b.add_output<decl::Geometry>(N_("Point Cloud")).propagate_all(); b.add_output<decl::Geometry>(N_("Point Cloud")).propagate_all();
b.add_output<decl::Geometry>(N_("Curve")).propagate_all(); b.add_output<decl::Geometry>(N_("Curve")).propagate_all();
b.add_output<decl::Geometry>(N_("Volume")).propagate_all(); b.add_output<decl::Geometry>(CTX_N_(BLT_I18NCONTEXT_ID_ID, "Volume"))
.translation_context(BLT_I18NCONTEXT_ID_ID)
.propagate_all();
b.add_output<decl::Geometry>(N_("Instances")).propagate_all(); b.add_output<decl::Geometry>(N_("Instances")).propagate_all();
} }

View File

@ -49,7 +49,8 @@ static void node_declare(NodeDeclarationBuilder &b)
.default_value(32) .default_value(32)
.min(2); .min(2);
b.add_output<decl::Geometry>(N_("Volume")); b.add_output<decl::Geometry>(CTX_N_(BLT_I18NCONTEXT_ID_ID, "Volume"))
.translation_context(BLT_I18NCONTEXT_ID_ID);
} }
static float map(const float x, static float map(const float x,

View File

@ -27,7 +27,9 @@ NODE_STORAGE_FUNCS(NodeGeometryVolumeToMesh)
static void node_declare(NodeDeclarationBuilder &b) static void node_declare(NodeDeclarationBuilder &b)
{ {
b.add_input<decl::Geometry>(N_("Volume")).supported_type(GEO_COMPONENT_TYPE_VOLUME); b.add_input<decl::Geometry>(CTX_N_(BLT_I18NCONTEXT_ID_ID, "Volume"))
.translation_context(BLT_I18NCONTEXT_ID_ID)
.supported_type(GEO_COMPONENT_TYPE_VOLUME);
b.add_input<decl::Float>(N_("Voxel Size")) b.add_input<decl::Float>(N_("Voxel Size"))
.default_value(0.3f) .default_value(0.3f)
.min(0.01f) .min(0.01f)

View File

@ -114,7 +114,7 @@ void GeoNodeExecParams::check_input_geometry_set(StringRef identifier,
break; break;
} }
case GEO_COMPONENT_TYPE_VOLUME: { case GEO_COMPONENT_TYPE_VOLUME: {
message += TIP_("Volume"); message += CTX_TIP_(BLT_I18NCONTEXT_ID_ID, "Volume");
break; break;
} }
case GEO_COMPONENT_TYPE_CURVE: { case GEO_COMPONENT_TYPE_CURVE: {

View File

@ -13,7 +13,11 @@ static void node_declare(NodeDeclarationBuilder &b)
{ {
b.add_input<decl::Float>(N_("Hue")).default_value(0.5f).min(0.0f).max(1.0f); b.add_input<decl::Float>(N_("Hue")).default_value(0.5f).min(0.0f).max(1.0f);
b.add_input<decl::Float>(N_("Saturation")).default_value(1.0f).min(0.0f).max(2.0f); b.add_input<decl::Float>(N_("Saturation")).default_value(1.0f).min(0.0f).max(2.0f);
b.add_input<decl::Float>(N_("Value")).default_value(1.0f).min(0.0f).max(2.0f); b.add_input<decl::Float>(CTX_N_(BLT_I18NCONTEXT_COLOR, "Value"))
.default_value(1.0f)
.min(0.0f)
.max(2.0f)
.translation_context(BLT_I18NCONTEXT_COLOR);
b.add_input<decl::Float>(N_("Fac")).default_value(1.0f).min(0.0f).max(1.0f).subtype(PROP_FACTOR); b.add_input<decl::Float>(N_("Fac")).default_value(1.0f).min(0.0f).max(1.0f).subtype(PROP_FACTOR);
b.add_input<decl::Color>(N_("Color")).default_value({0.8f, 0.8f, 0.8f, 1.0f}); b.add_input<decl::Color>(N_("Color")).default_value({0.8f, 0.8f, 0.8f, 1.0f});
b.add_output<decl::Color>(N_("Color")); b.add_output<decl::Color>(N_("Color"));

View File

@ -10,7 +10,8 @@ namespace blender::nodes::node_shader_output_material_cc {
static void node_declare(NodeDeclarationBuilder &b) static void node_declare(NodeDeclarationBuilder &b)
{ {
b.add_input<decl::Shader>(N_("Surface")); b.add_input<decl::Shader>(N_("Surface"));
b.add_input<decl::Shader>(N_("Volume")); b.add_input<decl::Shader>(CTX_N_(BLT_I18NCONTEXT_ID_ID, "Volume"))
.translation_context(BLT_I18NCONTEXT_ID_ID);
b.add_input<decl::Vector>(N_("Displacement")).hide_value(); b.add_input<decl::Vector>(N_("Displacement")).hide_value();
b.add_input<decl::Float>(N_("Thickness")).hide_value().unavailable(); /* Not used for now. */ b.add_input<decl::Float>(N_("Thickness")).hide_value().unavailable(); /* Not used for now. */
} }

View File

@ -8,7 +8,8 @@ namespace blender::nodes::node_shader_output_world_cc {
static void node_declare(NodeDeclarationBuilder &b) static void node_declare(NodeDeclarationBuilder &b)
{ {
b.add_input<decl::Shader>(N_("Surface")); b.add_input<decl::Shader>(N_("Surface"));
b.add_input<decl::Shader>(N_("Volume")); b.add_input<decl::Shader>(CTX_N_(BLT_I18NCONTEXT_ID_ID, "Volume"))
.translation_context(BLT_I18NCONTEXT_ID_ID);
} }
static int node_shader_gpu_output_world(GPUMaterial *mat, static int node_shader_gpu_output_world(GPUMaterial *mat,

View File

@ -10,7 +10,8 @@ static void node_declare(NodeDeclarationBuilder &b)
b.add_input<decl::Color>(N_("Color")).default_value({0.8f, 0.8f, 0.8f, 1.0f}); b.add_input<decl::Color>(N_("Color")).default_value({0.8f, 0.8f, 0.8f, 1.0f});
b.add_input<decl::Float>(N_("Density")).default_value(1.0f).min(0.0f).max(1000.0f); b.add_input<decl::Float>(N_("Density")).default_value(1.0f).min(0.0f).max(1000.0f);
b.add_input<decl::Float>(N_("Weight")).unavailable(); b.add_input<decl::Float>(N_("Weight")).unavailable();
b.add_output<decl::Shader>(N_("Volume")); b.add_output<decl::Shader>(CTX_N_(BLT_I18NCONTEXT_ID_ID, "Volume"))
.translation_context(BLT_I18NCONTEXT_ID_ID);
} }
static int node_shader_gpu_volume_absorption(GPUMaterial *mat, static int node_shader_gpu_volume_absorption(GPUMaterial *mat,

View File

@ -30,7 +30,8 @@ static void node_declare(NodeDeclarationBuilder &b)
b.add_input<decl::Float>(N_("Temperature")).default_value(1000.0f).min(0.0f).max(6500.0f); b.add_input<decl::Float>(N_("Temperature")).default_value(1000.0f).min(0.0f).max(6500.0f);
b.add_input<decl::String>(N_("Temperature Attribute")); b.add_input<decl::String>(N_("Temperature Attribute"));
b.add_input<decl::Float>(N_("Weight")).unavailable(); b.add_input<decl::Float>(N_("Weight")).unavailable();
b.add_output<decl::Shader>(N_("Volume")); b.add_output<decl::Shader>(CTX_N_(BLT_I18NCONTEXT_ID_ID, "Volume"))
.translation_context(BLT_I18NCONTEXT_ID_ID);
} }
static void node_shader_init_volume_principled(bNodeTree * /*ntree*/, bNode *node) static void node_shader_init_volume_principled(bNodeTree * /*ntree*/, bNode *node)

View File

@ -15,7 +15,8 @@ static void node_declare(NodeDeclarationBuilder &b)
.max(1.0f) .max(1.0f)
.subtype(PROP_FACTOR); .subtype(PROP_FACTOR);
b.add_input<decl::Float>(N_("Weight")).unavailable(); b.add_input<decl::Float>(N_("Weight")).unavailable();
b.add_output<decl::Shader>(N_("Volume")); b.add_output<decl::Shader>(CTX_N_(BLT_I18NCONTEXT_ID_ID, "Volume"))
.translation_context(BLT_I18NCONTEXT_ID_ID);
} }
static int node_shader_gpu_volume_scatter(GPUMaterial *mat, static int node_shader_gpu_volume_scatter(GPUMaterial *mat,

View File

@ -1099,7 +1099,8 @@ const char *WM_key_event_string(const short type, const bool compact)
return IFACE_("OS"); return IFACE_("OS");
} break; } break;
case EVT_TABKEY: case EVT_TABKEY:
return key_event_glyph_or_text(font_id, IFACE_("Tab"), "\xe2\xad\xbe"); return key_event_glyph_or_text(
font_id, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Tab"), "\xe2\xad\xbe");
case EVT_BACKSPACEKEY: case EVT_BACKSPACEKEY:
return key_event_glyph_or_text(font_id, IFACE_("Bksp"), "\xe2\x8c\xab"); return key_event_glyph_or_text(font_id, IFACE_("Bksp"), "\xe2\x8c\xab");
case EVT_ESCKEY: case EVT_ESCKEY: