Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--SConstruct12
-rw-r--r--po/POTFILES.in222
-rw-r--r--po/messages.txt5433
-rwxr-xr-xpo/update_mo.py17
-rwxr-xr-xpo/update_po.py17
-rwxr-xr-xpo/update_pot.py61
-rw-r--r--release/bin/.blender/.Blanguages13
-rw-r--r--release/bin/.blender/fonts/droidsans.ttf.gzbin0 -> 1961584 bytes
-rw-r--r--release/scripts/startup/bl_operators/wm.py61
-rw-r--r--release/scripts/startup/bl_ui/properties_animviz.py36
-rw-r--r--release/scripts/startup/bl_ui/properties_data_armature.py58
-rw-r--r--release/scripts/startup/bl_ui/properties_data_bone.py86
-rw-r--r--release/scripts/startup/bl_ui/properties_data_camera.py28
-rw-r--r--release/scripts/startup/bl_ui/properties_data_curve.py108
-rw-r--r--release/scripts/startup/bl_ui/properties_data_empty.py12
-rw-r--r--release/scripts/startup/bl_ui/properties_data_lamp.py110
-rw-r--r--release/scripts/startup/bl_ui/properties_data_mesh.py32
-rw-r--r--release/scripts/startup/bl_ui/properties_data_metaball.py32
-rw-r--r--release/scripts/startup/bl_ui/properties_data_modifier.py236
-rw-r--r--release/scripts/startup/bl_ui/properties_game.py116
-rw-r--r--release/scripts/startup/bl_ui/properties_material.py150
-rw-r--r--release/scripts/startup/bl_ui/properties_object.py98
-rw-r--r--release/scripts/startup/bl_ui/properties_object_constraint.py222
-rw-r--r--release/scripts/startup/bl_ui/properties_particle.py241
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_cloth.py60
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_common.py62
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_field.py62
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_fluid.py98
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_smoke.py44
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_softbody.py58
-rw-r--r--release/scripts/startup/bl_ui/properties_render.py151
-rw-r--r--release/scripts/startup/bl_ui/properties_scene.py36
-rw-r--r--release/scripts/startup/bl_ui/properties_texture.py267
-rw-r--r--release/scripts/startup/bl_ui/properties_world.py29
-rw-r--r--release/scripts/startup/bl_ui/space_console.py3
-rw-r--r--release/scripts/startup/bl_ui/space_dopesheet.py59
-rw-r--r--release/scripts/startup/bl_ui/space_graph.py57
-rw-r--r--release/scripts/startup/bl_ui/space_image.py87
-rw-r--r--release/scripts/startup/bl_ui/space_info.py133
-rw-r--r--release/scripts/startup/bl_ui/space_logic.py9
-rw-r--r--release/scripts/startup/bl_ui/space_nla.py41
-rw-r--r--release/scripts/startup/bl_ui/space_node.py17
-rw-r--r--release/scripts/startup/bl_ui/space_sequencer.py199
-rw-r--r--release/scripts/startup/bl_ui/space_text.py23
-rw-r--r--release/scripts/startup/bl_ui/space_time.py23
-rw-r--r--release/scripts/startup/bl_ui/space_userpref.py303
-rw-r--r--release/scripts/startup/bl_ui/space_userpref_keymap.py23
-rw-r--r--release/scripts/startup/bl_ui/space_view3d.py567
-rw-r--r--release/scripts/startup/bl_ui/space_view3d_toolbar.py47
-rw-r--r--source/blender/blenfont/BLF_api.h14
-rw-r--r--source/blender/blenfont/BLF_translation.h66
-rw-r--r--source/blender/blenfont/CMakeLists.txt6
-rw-r--r--source/blender/blenfont/SConscript1
-rw-r--r--source/blender/blenfont/intern/blf_lang.c130
-rw-r--r--source/blender/blenfont/intern/blf_translation.c86
-rw-r--r--source/blender/blenlib/BLI_fileops.h1
-rw-r--r--source/blender/blenlib/intern/fileops.c41
-rw-r--r--source/blender/editors/armature/CMakeLists.txt1
-rw-r--r--source/blender/editors/armature/SConscript2
-rw-r--r--source/blender/editors/armature/poselib.c8
-rw-r--r--source/blender/editors/include/UI_interface.h8
-rw-r--r--source/blender/editors/interface/interface.c59
-rw-r--r--source/blender/editors/interface/interface_handlers.c6
-rw-r--r--source/blender/editors/interface/interface_intern.h4
-rw-r--r--source/blender/editors/interface/interface_layout.c32
-rw-r--r--source/blender/editors/interface/interface_panel.c14
-rw-r--r--source/blender/editors/interface/interface_regions.c33
-rw-r--r--source/blender/editors/interface/interface_style.c35
-rw-r--r--source/blender/editors/interface/interface_templates.c182
-rw-r--r--source/blender/editors/interface/interface_utils.c4
-rw-r--r--source/blender/editors/interface/view2d.c2
-rw-r--r--source/blender/editors/interface/view2d_ops.c3
-rw-r--r--source/blender/editors/screen/area.c13
-rw-r--r--source/blender/editors/space_buttons/CMakeLists.txt1
-rw-r--r--source/blender/editors/space_buttons/SConscript2
-rw-r--r--source/blender/editors/space_buttons/buttons_header.c30
-rw-r--r--source/blender/editors/space_file/file_draw.c15
-rw-r--r--source/blender/editors/space_file/file_panels.c4
-rw-r--r--source/blender/editors/space_file/filesel.c6
-rw-r--r--source/blender/editors/space_graph/CMakeLists.txt1
-rw-r--r--source/blender/editors/space_graph/SConscript2
-rw-r--r--source/blender/editors/space_graph/graph_buttons.c5
-rw-r--r--source/blender/editors/space_info/space_info.c4
-rw-r--r--source/blender/editors/space_logic/CMakeLists.txt3
-rw-r--r--source/blender/editors/space_logic/logic_window.c6
-rw-r--r--source/blender/editors/space_nla/CMakeLists.txt1
-rw-r--r--source/blender/editors/space_nla/SConscript2
-rw-r--r--source/blender/editors/space_nla/nla_buttons.c5
-rw-r--r--source/blender/editors/space_node/node_draw.c2
-rw-r--r--source/blender/editors/space_node/node_header.c58
-rw-r--r--source/blender/editors/space_view3d/view3d_header.c54
-rw-r--r--source/blender/editors/space_view3d/view3d_toolbar.c4
-rw-r--r--source/blender/editors/transform/CMakeLists.txt1
-rw-r--r--source/blender/editors/transform/SConscript2
-rw-r--r--source/blender/editors/transform/transform_orientations.c14
-rw-r--r--source/blender/makesdna/DNA_userdef_types.h4
-rw-r--r--source/blender/makesrna/RNA_access.h10
-rw-r--r--source/blender/makesrna/SConscript3
-rw-r--r--source/blender/makesrna/intern/CMakeLists.txt4
-rw-r--r--source/blender/makesrna/intern/SConscript3
-rw-r--r--source/blender/makesrna/intern/rna_access.c72
-rw-r--r--source/blender/makesrna/intern/rna_userdef.c72
-rw-r--r--source/blender/python/SConscript3
-rw-r--r--source/blender/python/generic/CMakeLists.txt3
-rw-r--r--source/blender/python/generic/blf_py_api.c35
-rw-r--r--source/blender/windowmanager/SConscript3
-rw-r--r--source/blender/windowmanager/intern/wm_files.c11
-rw-r--r--source/blender/windowmanager/intern/wm_init_exit.c6
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c122
-rw-r--r--source/blender/windowmanager/intern/wm_window.c10
-rw-r--r--source/creator/CMakeLists.txt23
-rw-r--r--source/gameengine/GamePlayer/ghost/CMakeLists.txt4
-rw-r--r--source/gameengine/GamePlayer/ghost/GPG_ghost.cpp7
-rw-r--r--source/gameengine/GamePlayer/ghost/SConscript3
114 files changed, 8815 insertions, 2415 deletions
diff --git a/SConstruct b/SConstruct
index 3432a7b71ba..01522b3ae29 100644
--- a/SConstruct
+++ b/SConstruct
@@ -512,8 +512,10 @@ datafilestargetlist = []
dottargetlist = []
scriptinstall = []
-if env['OURPLATFORM']!='darwin':
- for dp, dn, df in os.walk('bin/.blender'):
+if env['OURPLATFORM']!='darwin':
+ for dp, dn, df in os.walk('release/bin/.blender'):
+ dp = os.path.normpath(dp)
+
if '.svn' in dn:
dn.remove('.svn')
if '_svn' in dn:
@@ -529,14 +531,14 @@ if env['OURPLATFORM']!='darwin':
if f.endswith('.ttf'):
continue
- if 'locale' in dp:
+ if 'locale' in dp or 'fonts' in dp:
datafileslist.append(os.path.join(dp,f))
- dir= os.path.join(*([env['BF_INSTALLDIR']] + [VERSION] + ['datafiles'] + dp.split(os.sep)[1:])) # skip bin
+ dir= os.path.join(*([env['BF_INSTALLDIR']] + [VERSION] + ['datafiles'] + dp.split(os.sep)[3:])) # skip bin
datafilestargetlist.append(dir + os.sep + f)
else:
dotblendlist.append(os.path.join(dp, f))
- dir= os.path.join(*([env['BF_INSTALLDIR']] + [VERSION] + ['config'] + dp.split(os.sep)[1:])) # skip bin
+ dir= os.path.join(*([env['BF_INSTALLDIR']] + [VERSION] + ['config'] + dp.split(os.sep)[3:])) # skip bin
dottargetlist.append(dir + os.sep + f)
dotblenderinstall = []
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 00000000000..4c791dd9369
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,222 @@
+release/scripts/modules/rna_prop_ui.py
+
+release/scripts/startup/bl_operators/animsys_update.py
+release/scripts/startup/bl_operators/object.py
+release/scripts/startup/bl_operators/object_align.py
+release/scripts/startup/bl_operators/object_quick_effects.py
+release/scripts/startup/bl_operators/object_randomize_transform.py
+release/scripts/startup/bl_operators/presets.py
+release/scripts/startup/bl_operators/screen_play_rendered_anim.py
+release/scripts/startup/bl_operators/sequencer.py
+release/scripts/startup/bl_operators/wm.py
+
+release/scripts/startup/bl_ui/properties_animviz.py
+release/scripts/startup/bl_ui/properties_data_armature.py
+release/scripts/startup/bl_ui/properties_data_bone.py
+release/scripts/startup/bl_ui/properties_data_camera.py
+release/scripts/startup/bl_ui/properties_data_curve.py
+release/scripts/startup/bl_ui/properties_data_empty.py
+release/scripts/startup/bl_ui/properties_data_lamp.py
+release/scripts/startup/bl_ui/properties_data_lattice.py
+release/scripts/startup/bl_ui/properties_data_mesh.py
+release/scripts/startup/bl_ui/properties_data_metaball.py
+release/scripts/startup/bl_ui/properties_data_modifier.py
+release/scripts/startup/bl_ui/properties_game.py
+release/scripts/startup/bl_ui/properties_material.py
+release/scripts/startup/bl_ui/properties_object_constraint.py
+release/scripts/startup/bl_ui/properties_object.py
+release/scripts/startup/bl_ui/properties_particle.py
+release/scripts/startup/bl_ui/properties_physics_cloth.py
+release/scripts/startup/bl_ui/properties_physics_common.py
+release/scripts/startup/bl_ui/properties_physics_field.py
+release/scripts/startup/bl_ui/properties_physics_fluid.py
+release/scripts/startup/bl_ui/properties_physics_smoke.py
+release/scripts/startup/bl_ui/properties_physics_softbody.py
+release/scripts/startup/bl_ui/properties_render.py
+release/scripts/startup/bl_ui/properties_scene.py
+release/scripts/startup/bl_ui/properties_texture.py
+release/scripts/startup/bl_ui/properties_world.py
+
+release/scripts/startup/bl_ui/space_console.py
+release/scripts/startup/bl_ui/space_dopesheet.py
+release/scripts/startup/bl_ui/space_graph.py
+release/scripts/startup/bl_ui/space_image.py
+release/scripts/startup/bl_ui/space_info.py
+release/scripts/startup/bl_ui/space_logic.py
+release/scripts/startup/bl_ui/space_nla.py
+release/scripts/startup/bl_ui/space_node.py
+release/scripts/startup/bl_ui/space_outliner.py
+release/scripts/startup/bl_ui/space_sequencer.py
+release/scripts/startup/bl_ui/space_text.py
+release/scripts/startup/bl_ui/space_time.py
+release/scripts/startup/bl_ui/space_userpref.py
+release/scripts/startup/bl_ui/space_userpref_keymap.py
+release/scripts/startup/bl_ui/space_view3d.py
+release/scripts/startup/bl_ui/space_view3d_toolbar.py
+
+source/blender/editors/animation/anim_channels_edit.c
+source/blender/editors/animation/anim_markers.c
+source/blender/editors/animation/anim_ops.c
+source/blender/editors/animation/drivers.c
+source/blender/editors/animation/keyframing.c
+source/blender/editors/animation/keyingsets.c
+
+source/blender/editors/armature/armature_ops.c
+source/blender/editors/armature/editarmature.c
+source/blender/editors/armature/editarmature_sketch.c
+source/blender/editors/armature/poselib.c
+source/blender/editors/armature/poseobject.c
+source/blender/editors/armature/poseSlide.c
+
+source/blender/editors/curve/editcurve.c
+source/blender/editors/curve/editfont.c
+
+source/blender/editors/gpencil/gpencil_paint.c
+
+source/blender/editors/interface/interface_layout.c
+source/blender/editors/interface/interface_ops.c
+source/blender/editors/interface/interface_regions.c
+source/blender/editors/interface/interface_templates.c
+source/blender/editors/interface/interface_utils.c
+source/blender/editors/interface/view2d_ops.c
+
+source/blender/editors/mesh/editmesh.c
+source/blender/editors/mesh/editmesh_add.c
+source/blender/editors/mesh/editmesh_loop.c
+source/blender/editors/mesh/editmesh_mods.c
+source/blender/editors/mesh/editmesh_tools.c
+source/blender/editors/mesh/loopcut.c
+source/blender/editors/mesh/mesh_data.c
+source/blender/editors/mesh/mesh_ops.c
+
+source/blender/editors/metaball/mball_edit.c
+
+source/blender/editors/object/object_add.c
+source/blender/editors/object/object_constraint.c
+source/blender/editors/object/object_edit.c
+source/blender/editors/object/object_group.c
+source/blender/editors/object/object_lattice.c
+source/blender/editors/object/object_modifier.c
+source/blender/editors/object/object_ops.c
+source/blender/editors/object/object_relations.c
+source/blender/editors/object/object_select.c
+source/blender/editors/object/object_shapekey.c
+source/blender/editors/object/object_transform.c
+source/blender/editors/object/object_vgroup.c
+
+source/blender/editors/physics/particle_edit.c
+source/blender/editors/physics/particle_object.c
+source/blender/editors/physics/physics_pointcache.c
+
+source/blender/editors/render/render_internal.c
+source/blender/editors/render/render_opengl.c
+source/blender/editors/render/render_shading.c
+source/blender/editors/render/render_view.c
+
+source/blender/editors/screen/area.c
+source/blender/editors/screen/screendump.c
+source/blender/editors/screen/screen_ops.c
+
+source/blender/editors/sculpt_paint/paint_ops.c
+source/blender/editors/sculpt_paint/paint_image.c
+source/blender/editors/sculpt_paint/paint_utils.c
+source/blender/editors/sculpt_paint/paint_vertex.c
+source/blender/editors/sculpt_paint/sculpt.c
+
+source/blender/editors/sound/sound_ops.c
+
+source/blender/editors/space_action/action_edit.c
+source/blender/editors/space_action/action_ops.c
+source/blender/editors/space_action/action_select.c
+
+source/blender/editors/space_buttons/buttons_header.c
+source/blender/editors/space_buttons/buttons_ops.c
+
+source/blender/editors/space_console/console_ops.c
+
+source/blender/editors/space_file/file_draw.c
+source/blender/editors/space_file/file_ops.c
+source/blender/editors/space_file/file_panels.c
+
+source/blender/editors/space_graph/graph_buttons.c
+source/blender/editors/space_graph/graph_edit.c
+source/blender/editors/space_graph/graph_ops.c
+source/blender/editors/space_graph/graph_select.c
+
+source/blender/editors/space_image/image_buttons.c
+source/blender/editors/space_image/image_ops.c
+
+source/blender/editors/space_info/info_ops.c
+source/blender/editors/space_info/info_report.c
+source/blender/editors/space_info/space_info.c
+
+source/blender/editors/space_logic/logic_buttons.c
+
+source/blender/editors/space_nla/nla_buttons.c
+source/blender/editors/space_nla/nla_channels.c
+source/blender/editors/space_nla/nla_edit.c
+source/blender/editors/space_nla/nla_select.c
+
+source/blender/editors/space_node/node_buttons.c
+source/blender/editors/space_node/node_edit.c
+source/blender/editors/space_node/node_header.c
+source/blender/editors/space_node/node_ops.c
+source/blender/editors/space_node/node_select.c
+source/blender/editors/space_node/node_state.c
+
+source/blender/editors/space_script/script_edit.c
+
+source/blender/editors/space_sequencer/sequencer_add.c
+source/blender/editors/space_sequencer/sequencer_buttons.c
+source/blender/editors/space_sequencer/sequencer_edit.c
+source/blender/editors/space_sequencer/sequencer_select.c
+
+source/blender/editors/space_text/text_header.c
+source/blender/editors/space_text/text_ops.c
+source/blender/editors/space_time/time_ops.c
+
+source/blender/editors/space_view3d/view3d_buttons.c
+source/blender/editors/space_view3d/view3d_draw.c
+source/blender/editors/space_view3d/view3d_edit.c
+source/blender/editors/space_view3d/view3d_fly.c
+source/blender/editors/space_view3d/view3d_header.c
+source/blender/editors/space_view3d/view3d_select.c
+source/blender/editors/space_view3d/view3d_view.c
+source/blender/editors/space_view3d/view3d_toolbar.c
+
+source/blender/editors/transform/transform.c
+source/blender/editors/transform/transform_ops.c
+source/blender/editors/transform/transform_orientations.c
+
+source/blender/editors/util/undo.c
+
+source/blender/editors/uvedit/uvedit_ops.c
+source/blender/editors/uvedit/uvedit_unwrap_ops.c
+
+source/blender/makesrna/intern/rna_ID.c
+source/blender/makesrna/intern/rna_action.c
+source/blender/makesrna/intern/rna_color.c
+source/blender/makesrna/intern/rna_constraint.c
+source/blender/makesrna/intern/rna_curve.c
+source/blender/makesrna/intern/rna_fcurve.c
+source/blender/makesrna/intern/rna_material.c
+source/blender/makesrna/intern/rna_mesh.c
+source/blender/makesrna/intern/rna_modifier.c
+source/blender/makesrna/intern/rna_object.c
+source/blender/makesrna/intern/rna_object_force.c
+source/blender/makesrna/intern/rna_particle.c
+source/blender/makesrna/intern/rna_render.c
+source/blender/makesrna/intern/rna_scene.c
+source/blender/makesrna/intern/rna_space.c
+source/blender/makesrna/intern/rna_texture.c
+source/blender/makesrna/intern/rna_ui_api.c
+source/blender/makesrna/intern/rna_userdef.c
+source/blender/makesrna/intern/rna_wm.c
+source/blender/makesrna/intern/rna_wm_api.c
+source/blender/makesrna/intern/rna_world.c
+
+source/blender/windowmanager/intern/wm_files.c
+source/blender/windowmanager/intern/wm_operators.c
+source/blender/windowmanager/intern/wm_window.c
+
+
diff --git a/po/messages.txt b/po/messages.txt
new file mode 100644
index 00000000000..b491061cdc4
--- /dev/null
+++ b/po/messages.txt
@@ -0,0 +1,5433 @@
+The edited object
+Bezier curve point with two handles defining a Keyframe on an F-Curve
+Max Climb
+Media Stop
+System & OpenGL
+Strips Selected
+Active Keying Set
+Action Blending
+Bone is able to be selected
+Defines where the color of the environment light comes from
+Display files as short list
+Build 75% proxy resolution
+Right Mouse
+Cubic Catmull-Rom
+Particle system can be edited in particle mode
+UV editor data for the image editor space
+Editing hair
+Zoom using opposite direction
+Graph Editor space data
+Create obstacle
+Tiles
+Align newly added objects to the world coordinates
+Index of custom color set
+Sample point for F-Curve
+AVI Raw
+Linear Drag
+Color to display the marker with
+Channels Region
+Lower bound of envelope at this control-point
+Fluid
+Regions this area is subdivided in
+Double Click
+Disable simulation of linear motion along the X axis
+Sequencer OpenGL
+Child particles generated by the particle system
+Point in a shape key for curves
+Lock to Bone
+Sun Size
+Set modifier expanded in the user interface
+Multiple Scattering
+ID Name
+Steering
+Animation Visualisation
+Keyed States
+Fixed size vertex indices array
+Normal Size
+Track To
+Time since last access of a GL texture in seconds after which it is freed. (Set to 0 to keep textures allocated.)
+Collection of keymaps
+Texture datablocks
+Number of vertical pixels in the screen
+Fluid Simulation
+Zooms in and out like scaling the view, mouse movements relative to center
+Lattice Edit
+Snap onto its self (editmode)
+Only render what's in front of the solid z values
+True when multiple enums
+Backdrop Zoom
+Causes mesh data to be duplicated with the object
+Automatic
+Small Caps
+UV Project
+UV Sync Selection
+Cloth dynamics for hair
+File Browser Main
+Sensitivity
+Amount of rotation around side vector
+Specify how many frames the Map Old will last
+Start Still
+Unique datablock ID name
+Active pose marker for this Action
+Draw Channels
+Smoothens emitted smoke to avoid blockiness
+Tool Settings
+Text Line
+Bone Constraints
+Toggle whether the material is linked to object data or the object block
+Falloff power for transmissivity filter effect (1.0 is linear)
+Only use case sensitive matches of search string
+Screw
+Region Text
+Representation of alpha information in the RGBA pixels
+Edges receive a drag force from surrounding media
+Sequence Transform
+Over Drop
+Domain Settings
+New F-Curve Colors - XYZ to RGB
+Space that owner is evaluated in
+Frame Step
+Enumeration
+Value of the item
+Parent of this pose bone
+B-Bone Z size
+Up Arrow
+For reactor systems, the object that has the target particle system (empty if same object)
+Shift key pressed
+Auto Refresh
+Bone Color Sets
+Positive values make strands rounder, negative makes strands spiky
+Collection of images
+Show actuators of active object
+interpolate a global timestamp using the record date and time written by recording device
+Main Lattices
+Variable from some source/target for driver relationship
+Z Location
+Auto-Clamped handle selected color
+Fixed Alternate
+Game engine sensor to detect events
+Include the frame number in image metadata
+Bone does not deform any geometry
+UV Textures
+Game
+Minimal Spring length * Ball Size
+16384
+Line in which the marker is located
+Offset X
+Rasterized cell height
+Edge Threshold
+-Z
+Set audio channels to mono
+Jump Speed
+HuffYUV
+Active Bone
+View3D Fly Modal
+Sets the audio channel count
+Rotation Damping
+Max Air Acceleration
+Snap center onto target
+Spring Damping
+Compact with Milliseconds
+Maintain speed, flight level or wander
+Interpolation type
+Type Info
+SIMD QBVH
+active
+Armature
+Match case
+16 Bit
+XZY Rotation Order. Prone to Gimbal Lock
+Auto handle selected color
+Theme File Browser
+Bake the normals in object space
+Enable color range used for weight visualization in weight painting mode
+Vorticity
+Open window
+Shows sensors for this object in the user interface
+Radius of head of bone (for Envelope deform only)
+Plain diffuse energy (white.)
+Elasticity
+Cache Step
+View Sliders
+Hair
+Filter Movies
+Material datablock used by this material slot
+Smooth Emitter
+Catalan (Català)
+RVO (cells)
+Home
+Action Mouse
+Show Debug Info
+Loads a saved environment map image from disk
+is_baking
+Scene datablocks
+Wire
+Group
+On Land
+Group Objects
+Time Step
+Keep UI
+Bone inherits rotation or scale from parent bone
+Show Selected Object
+Theme settings for the Outliner
+Time of key over the simulation
+Header Text
+Health
+Similar to SMPTE (Compact), except that instead of frames, milliseconds are shown instead
+Blender Original
+Deliver texture UV pass
+Index number of the vertex
+Stepped Interpolation
+Adds diagonal springs on 4-gons
+Shear
+Tent
+Strength of force field
+Space that target is evaluated in
+F11
+Star
+Library datablocks
+Line Input
+Lighten
+In Range
+Use Blender units for widths instead of pixels
+F17
+Node Socket
+Quad-Buffer
+Sets scaling for the texture's X, Y and Z sizes
+F14
+Motion Path settings for animation visualisation
+Make hairs longer
+Set audio sample format to 32 bit float
+Amount of anti-aliasing samples per pixel
+type
+Use optimized Bullet DBVT tree for view frustum and occlusion culling
+Make this surface a closed loop in the V direction
+Alpha Over
+Media player for video & png/jpeg/sgi image sequences
+Second input for the effect strip
+Space Logic Editor
+Snap during transform
+Edit Methods
+Left Handle
+B-Bone Ease Out
+Cyclic Offset
+Subtype
+Object Base
+Vertex Group Clump
+Letterbox
+Set audio channels to 7.1 surround sound
+V
+Quaternion (WXYZ)
+Image File
+Preset configs for external animation players
+Maximum Value
+Make this nurbs curve or surface act like a Bezier spline in the U direction (Order U must be 3 or 4, Cyclic U must be disabled)
+uk_UA
+3x3 bone matrix
+Vertex Weight
+Display Material
+Use a custom transform orientation
+GLSL Shaders
+Text
+Deliver shadow pass
+From node
+Keyframes
+Main Brushes
+Deliver diffuse pass
+Header
+Level detector, trigger controllers of new states(only applicable upon logic state transition)
+Collision Compound
+Increment
+Trackball
+Active Strip
+Initial Rest Length
+User defined layer of string text values
+Edge Tag Mode
+Invert tilt Axis
+Deliver emission pass
+Face Selected
+Xor
+Voronoi Crackle
+Align the transformation axes to the window
+Line sample
+Default Goal (vertex target position) value, when no Vertex Group used
+Type of raytrace accelerator structure
+Area Spaces
+Project individual elements on the surface of other objects
+Use the angle between two bones
+Aero
+Zmask
+Set audio sample format to 32 bit signed integer
+Scene render size
+Multiplier to convert blender units to physical distance
+Free Image Textures
+Metaball datablocks
+DPI
+Fill in Z values for solid faces in invisible layers, for masking
+Active Action for this datablock
+Use turntable style rotation in the viewport
+Format
+Use a Catmull-Rom filter for anti-aliasing
+Link material to object or the object's data
+Type of participation in the fluid simulation
+face normal
+Enable
+Final 4x4 matrix after constraints and drivers are applied (object space)
+Diameter of widget, in 10 pixel units
+ID Property
+Radius of tail of bone (for Envelope deform only)
+Custom Shape Transform
+Action FCurves
+Envelope Deform Weight
+A
+Renders star shaped lines over halo
+Fade-out Color
+Syntax Built-in
+Samples below this threshold will be considered fully shadowed/unshadowed and skipped (for Raytrace Adaptive QMC)
+Camera datablocks
+Bounding Box Center
+Middle Mouse
+Framerate base
+Touch
+Vortex
+Manipulator Size
+F-Curve Colors - XYZ to RGB
+Invert Output
+Calculate heights against unsubdivided low resolution mesh
+Shrinkwrap
+Window Deactivate
+Y position of the sequence strip
+The frame on which this sketch appears
+Snap to increments of grid
+Rest Length
+All
+Serbian (Српском језику)
+Sample Method
+Text Anti-aliasing
+Only allows given density value in emitter area
+Sequencer Preview Shading
+Lower field first
+File Name
+Show timing in seconds not frames
+Display the object as wire edges
+Billboard with Z-axis constraint
+Curves
+Displays clock frequency of fullscreen display
+X Rotation
+Sphere
+Select UVs that share mesh vertex, irrespective if they are in the same location
+8 bit RAW
+0.5 means no distance at all, 1.0 is maximum distance
+Sequencer
+Max Ghost Range
+An object instance in a scene
+User Interface
+Alt
+Vertex group name
+PNG
+Animated Selected
+Blue
+Damping of the spring force, when inside the physics distance area
+Plugin Strip
+Hide
+Pose Matrix
+Guide-free time from particle life's end
+Frame is being edited (painted on)
+Large Cursors
+Limit Rotation
+Draw only faces with the currently displayed image assigned
+Record Run
+Pixel width over which the reconstruction filter combines samples
+Global Scene
+Defines the structure of the header in the UI
+Source List Text Highlight
+User-editable keyframes
+Scaling factor for action
+Inner
+Active Constraint
+Side-by-side
+Right Arrow
+Causes the 1 to 0 keys to act as the numpad (useful for laptops)
+A collection of pose channels, including settings for animating bones
+Lennard-Jones
+Use a maximum radial distance for the field to work
+Location of tail end of the bone relative to armature
+Edit All
+estimate matrix .. split to COM , ROT ,SCALE
+Use Coordinates
+Theme User Preferences
+Show line numbers next to the text
+Minimum speed in air (relative to maximum speed)
+Display keymap datablocks
+,
+Display Summary
+Channel Driver (only set for Driver F-Curves)
+Item
+In/Out Node
+Frame that modifier's influence ends (if Restrict Frame Range is in use)
+Premultiplied
+Number of frames cached
+Description of the Struct's purpose
+Tilt in 3D View
+Show Debug
+Offsets image horizontally from the world origin
+region_data
+Protect layer from further editing and/or frame changes
+File Format
+Retarget roll mode
+IK rot control
+Upper bound of envelope at this control-point
+Interaction Radius
+Syntax String
+Vertex group to control density
+Show Overexposed
+Vertices
+Kerning Style
+IK X Minimum
+Sets the factor by which the flare is larger than the halo
+Absolute ball size or factor if not manual adjusted
+Blend Opacity
+Steps
+Texture
+Settings for the visualisation of motion
+Group of vertices, used for armature deform and other purposes
+Limit Distance
+Minus
+No interpolation, fast but blocky and low quality
+Control
+Full SMPTE timecode. Format is HH:MM:SS:FF
+Open On Mouse Over
+Show sensors of active object
+Frame Server Port
+Noise patterns will remain unchanged, faster and suitable for stills
+Start
+RLE (lossless)
+True when the property is not saved in presets
+Images are rendered in new Window
+Theme Timeline
+If this is set, the header gets a custom ID, otherwise it takes the name of the class used to define the panel. For example, if the class name is "OBJECT_HT_hello", and bl_idname is not set by the script, then bl_idname = "OBJECT_HT_hello"
+The color that rays with no intersection within the Max Distance take (material color can be best for indoor scenes, sky color for outdoor)
+Show Cursor
+Goal Default
+Shape Key Point
+Object Origin Size
+Orthographic
+Invert y axis
+Unit Scale
+Collection of points for Bezier curves only
+Mouse
+Pivot Point
+UV Layer to control billboard splitting
+Only insert keyframes where they're needed in the relevant F-Curves
+IK Z Minimum
+Distance
+Key rotation quaternion
+Backscattered light
+Texture effector weight
+Volume rendering settings for a Material datablock
+Which output node to use, for node-based textures
+Handle 1 selection status
+Always render a still frame from the voxel data sequence
+Factor
++Z
+Numpad 4
+Type
+Action Groups
+Styles
+rv
+Recast data for a Game datablock
+Number of frames to show before the current frame (only for 'Around Current Frame' Onion-skinning method)
+Description of the property for tooltips
+Area in a subdivided screen, containing an editor
+IK Z Maximum
+Effect fader position
+Particle System to render as points
+Vertex Group Size Negate
+Simplify Subdivision
+Warp
+3D View center is locked to this bone's position
+Enable cluster collision between soft and rigid body
+04 - Theme Color Set
+Lamps
+Color Picker Type
+Location of the hair key in its internal coordinate system, relative to the emitting face
+Properties Space
+The view mode to use for displaying sequencer output
+Hold
+Prefetch Frames
+Pose Tail Position
+Amount of pixels to extend the baked result with, as post process filter
+Dummy
+Deliver full combined RGBA buffer
+Long Key Selected
+Extension
+Complete Matches Only
+Lines
+The external source data file to use
+The time (in minutes) to wait between automatic temporary saves
+Undo Memory Size
+Type of event mapping
+Animation Data
+Unique node identifier
+Draw white edges
+Show Menus
+W
+Inverse Kinematics
+Number of times a map will be rendered recursively (mirror effects.)
+Face Mask
+Density is calculated as a factor of default density (depends on particle size)
+Soft
+Use a maximum distance for the field to work
+Has IK
+Power of Fresnel for transparency (Ray or ZTransp)
+Name of PoseBone to use as target
+Display files as thumbnails
+Transparency blending mode
+Multiple Engines
+Bits
+Active Boid Rule Index
+Child Of
+Metric
+Proxy size 100%
+Module name
+Visible
+NLA Strip references some Action
+Average screen dimension of stars
+Converter Node
+Mirror
+Method of calculating aerodynamic interaction
+Curl
+Main Objects
+Only include channels relating to selected objects and data
+Set audio mixing buffer size to 256 samples
+Bake normals
+Uses direction of strands as normal for tangent-shading
+Textbox Width
+Pose
+Plasticity
+Object scale factor
+Boid effector weight
+Mass Vertex Group
+Fight
+Adjust the offset to the beginning/end
+Bone Solid
+NLA Strip representing a sound event for speakers
+Maximum contour edge length
+Build free run time code index using Record Date/Time
+End frame displayed in the sequence editor after offsets are applied
+NLA Strip acts as a container for adjacent strips
+Offsets image vertically from the world origin
+Block anything else from using the cursor
+Inverse Lift
+Maximum for slider
+Mode of automatic keyframe insertion for Objects and Bones (default setting used for new Scenes)
+Render Solid faces in this Layer
+Vertex Weight Edit
+Rotation style in the viewport
+Active Vertex Color Index
+Show the active object's smoke cache
+Action Extrapolation
+Resolution X
+Mesh
+Progress Bar Widget Colors
+Lock editing of rotation in the interface
+Draw faces over the image
+Press
+Weight Color Range
+Collection of vertex colors
+Thickness of strokes (in pixels)
+Resolution V
+Particle Target
+Object duplicate transformation matrix
+Luma
+Blend Out
+B
+B-Bone X size
+Anti-Aliasing Level
+Handle Vertex Size
+IK Lin Weight
+Negative
+End Still
+Y Offset
+Edge
+Amount of stickness to surface collision
+Bone Matrix
+Randomizes ring dimension and line location
+Velocity
+Respect the frame rate rather than rendering as many frames as possible
+Distance to the view location
+High res
+Object to take point data from
+Falloff type for proportional editing mode
+Region width
+Border Minimum Y
+Flash Video
+Active Section
+Channel defining pose data for a bone in a Pose
+Smoothed high quality interpolation, but slower
+Sets the audio sample rate
+Deliver raytraced refraction pass
+Land Personal Space
+Curve Splines
+Operating system key pressed
+14 - Theme Color Set
+Grease pencil data for this space
+Child particle interpolated from simulated or edited particles
+Editor header containing UI elements
+Select Head
+Catmull-Rom
+GLSL Nodes
+Make edges 'sail'
+Scattering
+Wire Select
+Unit
+Bezier Points
+Frame on which the simulation starts
+Animation Player
+Sequence Crop
+Autoname
+Dying
+Floor
+True when the property is hidden
+Cache Compression
+Keep Root
+Render Output Directory
+Multiple Caches
+External Shadows
+Points V
+Show Debug Properties
+White Level
+Framing Color
+Line Feed
+Logarithmic dissolve
+Circle
+Show movie files
+Maximum distance for the field to work
+Vertex Group Kink
+Enable anisotropic friction
+Use color management for GLSL rendering
+Exec Screen
+Render Layer
+Validity
+Show sensors of all selected objects
+Tessellation
+-
+F-Curve Modifier's effects will be tempered by a default factor
+Paths Type
+Cine-Scope 24fps 2048x858
+Use Mist
+Object Duplicate Matrix
+Repulsion force to apply on cloth when close to colliding
+Marker is temporary
+Collection of screens
+Lock X Axis
+Octree Resolution
+Control how much mist density decreases with height
+Custom Color Set
+Texture Context
+Active Vertex Group
+Disallow movement around the Y axis
+Edge Color
+Datablocks
+Channels of the image to draw
+2D Cursor
+Constant QMC
+Shape Key Curve Point
+Command output
+turbulence_strength
+Color used for active bones
+3D View center is locked to this object's position
+Vertex groups of the object
+Weights for the vertex groups this vertex is member of
+Invert Axes
+Euler Rotation
+Material to override all other materials in this render layer
+Tag Sharp
+Is part of an IK chain
+Output image in JPEG format
+Main Groups
+Slider Min
+Side
+Bone
+Square (HV + S)
+Transforms include effects of parenting/restpose and constraints
+Name of operator to call on input event
+Particle Speed
+Motion Blur
+Nurb V-lines
+Font size to use for displaying the text
+Tools
+Float
+Dynamic
+Scene
+Color curve mapping to use for displaying the image
+Set audio channels to 4 channels
+Free handle color
+16-bit Signed
+Active object for this scene
+Previous Angular Velocity
+Material Link To
+Solid Light
+Property Value
+Worldspace distance over which to blend in the surface normal
+NLA Strip is active
+Mini Axis Size
+Multiply direct lighting with ambient occlusion, darkening the result
+Moving things with a mouse drag confirms when releasing the button
+Show Render
+Camera this timeline sets to active
+Update Automatically
+Inwards component of the vortex force
+Edit texture nodes from Brush
+Current perspective matrix of the 3D region
+Opaque
+Goal (vertex target position) friction
+All rules are averaged
+Grease Pencil Stroke
+Display Object Info
+The maximum distance from which a boid can attack
+Curve interpolation at this point: Bezier or vector
+Both Z
+Textbox Y Offset
+Node group datablocks
+Ogg Theora
+Logic And
+Identifier of operator to call on input event
+Spaces contained in this area, the first being the active space. NOTE: Useful for example to restore a previously used 3d view space in a certain area to get the old view orientation
+Set audio channels to stereo
+Order V
+View & Controls
+Rec Run
+Upward spring force, when inside the physics distance area
+Mesh Texture Face Layer
+Transformation orientation
+Gives a radial field toward the center of object
+layout
+Extend
+Collision margin for soft body. Small value makes the algorithm unstable
+box radius
+Cache Index
+Free
+Inbetween Move
+Packed File
+Capsule
+UV projector used by the UV project modifier
+F-Curve Modifier has invalid settings and will not be evaluated
+Dopesheet
+Only Selected
+Replace Text
+Freq
+Sets maximum Y value for the render border
+Compositing nodes
+Waveform Opacity
+Layers that contain something
+Skip Save
+Same Types
+Include Missing NLA
+Level
+Free Unused Nodes
+Maximum distance to apply repulsion force, must be greater then minimum distance
+Display tooltips
+Hold RMB Open Toolbox Delay
+Random variation of friction
+Proportional Editing Falloff
+Object Modifiers
+Logic Xnor
+Move to center of neighbors and match their velocity
+Stretch or squeeze the viewport to fill the display window
+X
+Show frame numbers of Keyframes on Motion Paths
+Shaded
+Enhance the resolution of smoke by this factor using noise
+Backdrop
+Selected
+Refraction Exclude
+Enable bitmap text on face
+Button4 Mouse
+The direction that the OpenGL light is shining
+Images are rendered without forcing UI changes, optionally showing result
+A circular Hue/Saturation color wheel, with Value slider
+Input 3
+Input 2
+Input 1
+Engine to use for rendering
+Active UV Texture Index
+Include the render time in the stamp image
+Disabled
+Sets the amount mirror reflection for raytrace
+Game Object Settings
+Clear
+Max Physics Steps
+Find All
+3D View far clipping distance
+Activate or deactivate item
+Blobby element in a MetaBall datablock
+Only Render
+Radius of the agent
+Show Navigation Guide
+Default Colors
+Sets the dimension of the sub-flares, dots and circles
+Dynamic Friction
+fi_FI
+Viewpoint Object
+Display the object solid, lit with default OpenGL lights
+Use Global Coordinates
+Use the initial length as spring rest length instead of 2 * particle size
+Priority
+Render polygon transparent, depending on alpha channel of the texture
+Active File
+Manually determine the number of threads
+User Defined
+Vertex group to control clump
+Enable/Disable Constraint
+Object is detected by the Near and Radar sensor
+VBOs
+When false, this (sub)layout is greyed out
+Select Mouse
+The Drivers/Expressions for this datablock
+Individual Centers
+Enables automatic saving of preview images in the .blend file (Windows only)
+Shape key in a shape keys datablock
+Use left Mouse Button for selection
+Pivot around the 3D cursor
+Auto
+Registered
+Flares Sub
+Short List
+Sounds Directory
+Interpolate
+Game engine properties
+Allow drawing multiple strokes at a time with Grease Pencil
+Output image in (old!) SGI IRIS format
+Left Alt
+Sub Level Menu Open Delay
+Number of frames at start of strip to fade in influence
+Keyframe Points
+Noise algorithm - Voronoi F3: Returns distance to the 3rd closest feature point
+Display error text
+Vertex group for fine control over structural stiffness
+RNA Path (from ID-block) to property used
+Info
+User preferences space data
+C
+Emit Exclude
+Thumbnails
+Collision Sensor, detects static and dynamic objects but not the other collision sensor objects
+Lamp Sky Settings
+3D View center is locked to the cursor's position
+Manoeuvre to avoid collisions with other boids and deflector objects in near future
+Global gravity weight
+Curve or Surface subdivisions per segment
+The nominal number of game frames per second. Physics fixed timestep = 1/fps, independently of actual frame rate
+Back scattering (-1.0) to Forward scattering (1.0) and the range in between
+Library Path
+Calculate shadows while rendering
+Defines the strength of environment light
+Mux packet size (byte)
+Croatian (Hrvatski)
+Separate Colors
+Collider Friction
+Goal minimum, vertex group weights are scaled to match this range
+Gamma Cross
+Driver for the value of a setting based on an external value
+Unit System
+Highlight Line
+Constraint is the one being edited
+Draw F-Curves using Anti-Aliasing and other fancy effects. Disable for better performance
+Keying Set
+UV Local View
+Changing edges seam re-calculates UV unwrap
+View3D Move Modal
+Any Type
+Image Paint
+Set audio mixing buffer size to 16384 samples
+Creates turbulence with a noise field
+Active EditBone
+Brush
+Show only sensors connected to active states
+Disable simulation of angular motion along the Z axis
+3D View Generic
+Shape used as a relative key
+World Stars
+Use Environment Lighting
+X Location
+Auto Save Temporary Files
+Surface subdivisions per segment
+Output image in OpenEXR format
+Center
+Air has normally some thickness which slows falling things down
+Defines if the panel has to be open or collapsed at the time of its creation
+Parameters for the function
+Keep root keys unmodified
+Interpolate new particles from the existing ones
+Include visualization of Node related Animation data
+25%
+Sets the number of simulation substep per physic timestep, higher value give better physics precision
+Space in which transforms are used
+16x
+Sets the number of images of a movie to use
+Callback function defines for built-in Keying Sets
+20 - Theme Color Set
+How much heat effects smoke motion, higher value results in faster rising smoke
+Display when not linked to a visible states controller
+Collection of scenes
+256
+Smooth View
+Choose shading information to bake into the image
+Sets the number of star shaped lines rendered over the halo
+Textures
+Active spline
+Maximum bending stiffness value
+Eye Separation
+Window event timer
+Armature EditBones
+Game engine actuators to act on events
+End frame of range of paths to display/calculate (not for 'Around Current Frame' Onion-skinning method)
+Quad Split
+Auto handles clamped to not overshoot
+How much the spring has to be stretched/compressed in order to change it's rest length
+Show Brush On Surface
+.
+Defines the structure of the panel in the UI
+Handle 2 selected
+Use lights for GLSL rendering
+Groups
+Textured
+Camera rotation in horizontal axis
+Blender RNA
+Type of ID-block that can be used
+Column number to show right margin at
+Game Soft Body Settings
+Activity Culling
+Local Space
+Sets the layer as active for rendering
+Rotate From Normal
+IK Y Lock
+Amount of influence constraint will have on the final solution
+The window relative horizontal location of the mouse
+Set audio mixing buffer size to 2048 samples
+Lighting Mode
+Object to use as projector transform
+Numpad -
+Location to store the proxy files
+Add directed noise to the density at render-time
+Physics Sub Steps
+Mesh Faces
+Apply on spline
+Armature Sketch
+Render Halos in this Layer (on top of Solid)
+Nla Strips
+Weight used by the Bevel modifier
+Color range used for weight visualization in weight painting mode
+Boid Rules
+Delay between repeated pulses(in logic tics, 0=no delay)
+Billboard Time Index UV
+Game Data
+IK X Limit
+Theora
+Hook
+Collection of materials
+Lifetime mapped as 0.0 - 1.0 intensity
+Property Editor
+Vorbis
+Allow Land
+Tip select mode
+Navigation Mesh
+Limit the texture size to save graphics memory
+Game engine user defined object property
+Sticky vertex selection disabled
+Display an isolated sub-set of objects, apart from the scene visibility
+Straight Alpha
+Wheel Out
+Sequence Proxy
+Text displayed and edited in this space
+Custom Object
+Numpad +
+Menu
+Active Point Cache Index
+Starting frame of the stored range
+Panel Style
+Emphasize position of keyframes on Motion Paths
+Libraries
+Restrict Frame Range
+Quadratic Drag
+Display X Axis
+Copy of the colors associated with the group's color set
+Use a Mitchell-Netravali filter for anti-aliasing
+ID of the item
+Marker selection state
+Good smoothness and speed
+Use Onion Skinning
+Draw type for drawing UV edges
+id
+Result strip replaces the accumulated results by amount specified by influence
+Transform Space
+Speed factor
+Collection of group sockets
+Highlight Keyframes
+Hide files/datablocks that start with a dot(.*)
+Use 3D transform manipulator
+Value of shape key at the current frame
+Python
+Save tiles for all RenderLayers and SceneNodes to files in the temp directory (saves memory, required for Full Sample)
+Perspective Matrix
+Meta strip stack, last is currently edited meta strip
+Noise algorithm - Voronoi F2: Returns distance to the 2nd closest feature point
+Auto Keyframe Insert Keying Set
+2D Cursor Location
+Vertex Weight Mix
+Group Index
+Add hairs
+Bake textures
+Crop to Border
+Initial boid health when born
+When rendering animations, save JPG preview images in same directory
+The number of grid lines to display in perspective view
+Worlds
+The distance between 3D View grid lines
+Vector font datablocks
+Tag Bevel
+Negate the effect of the kink vertex group
+Use viscoelastic springs instead of Hooke's springs
+Frameserver Port for Frameserver Rendering
+Shows actuators for this object in the user interface
+Show Info
+Grease Pencil Euclidean Distance
+Pixels moved by mouse per axis when drawing stroke
+Color balance parameters for a sequence strip
+Collision Quality
+Triple Buffer
+Face is used for shadow
+Include visualization of World related Animation data
+Resolution of the voxel grid, low resolutions are faster, high resolutions use more memory
+Regular Widget Colors
+Y
+Bezier Curve Point
+To node
+Puff Mode
+Root
+Deliver Z values pass
+Coordinates of the control point
+Transforms don't include parenting/restpose or constraints
+Keying Set Path
+Friction force if a collision happened. (higher = less movement)
+Theme settings defining draw style and colors in the user interface
+MPEG-4(divx)
+Display reference images behind objects in the 3D View
+Collection of Node Links
+Follow Leader
+Hide objects on these layers when generating the Environment Map
+Line Number
+Fields per Frame
+Harmonic Damping
+Weight hair particles
+Use the Blender internal rendering engine for rendering
+Rotation/Scaling Pivot
+Minimum radial distance for the field's fall-off
+Duration
+Causes curve data to be duplicated with the object
+Absolute
+pt_BR
+Active Layer
+YCbCr (ITU 601)
+Average distance between any two stars
+Multitexture materials
+GLSL
+Current Scene
+How many keys to make new particles with
+Hide element
+Main Meshes
+Text character formatting settings
+Main Material
+Collection of object modifiers
+Maximal resolution used in the fluid domain
+Amount of light that gets emitted by the volume
+Grid
+Use For Growing Hair
+Parent edit bone (in same Armature)
+Use a column layout for toolbox
+Sort by time
+When transforming strips, changes to the animation data are flushed to other views
+Theme settings for widget color sets
+Inner Thickness
+Keying Set defines specific paths/settings to be keyframed (i.e. is not reliant on context info)
+Constant Jittered
+Weight to assign in vertex groups
+Bone Armature-Relative Matrix
+Rest length of the harmonic force
+user_preferences
+Gimbal
+Alpha Under
+RNA property definition
+YXZ Euler
+Use shadows for GLSL rendering
+IOR
+Gives the flare extra strength
+Editor menu containing buttons
+Right handle selection status
+Minimum Value
+Action referenced by this strip
+Display and edit the grease pencil freehand annotations overlay
+Path edit mode
+Smooth falloff
+Preferences related to viewing data
+Max Edge Error
+A square showing Hue/Value, with Saturation slider
+D
+Material slot in an object
+Set audio sample format to 8 bit unsigned integer
+User defined integer number value in an integer properties layer
+Output image to a frameserver
+Single Layer
+Radius of boids personal space in air (% of particle size)
+YCbCr (Jpeg)
+Length
+Specular
+Proportional Editing using connected geometry only
+Convex Hull
+Mid-range quality and speed
+Scale of the added turbulent noise
+Only use complete matches of search string
+Show Splash
+Wind
+Repulsion Force
+Method used to convert stroke to bones
+Show Pose Markers
+Frame on which the simulation stops
+Warp Data
+Key angular velocity
+select_start
+Show Linked to Controller
+Struct in which this struct is always nested, and to which it logically belongs
+Include a custom note in image metadata
+Log conversion gamma
+Transform Orientation
+Number of CPU threads to use simultaneously while rendering (for multi-core/CPU systems)
+Which style to use for font kerning
+Fall-Off
+Render voxels from a Blender smoke simulation
+Draw the points which make up the strokes (for debugging purposes)
+Frames
+Original image height
+Use face for collision and ray-sensor detection
+Around Frame
+Image Strip
+Bounding Box
+Device up/down directly controls your Z position
+The Runge-Kutta ODE solver error limit, low value gives more precision, high values speed
+Original image width
+Show Margin
+Transform Modal Map
+Stiff Quads
+System
+Spherical Panoramic
+Onion Skinning settings for animation visualisation
+KeyMap Items
+Valid
+MP2
+Handle 2 Type
+Italic
+Material Raytrace Mirror
+Object Grouped Active
+Use Frame Rate
+sv_SE
+Samples
+Name
+Material mode to use for rendering
+Cube
+Result color of the volume, after other light has been scattered/absorbed
+Use Min
+Display the center and axis during rotation
+Multiplier for intensity values
+Render Edge-enhance in this Layer (only works for Solid faces)
+Material datablocks
+/
+Arabic (العربية)
+Most compact representation. Uses '+' as separator for sub-second frame numbers, with left and right truncation of the timecode as necessary
+Filter 2D
+Lift
+Lighting for a World datablock
+External
+Collection of metaballs
+Sets the hardness of the halo
+General rotation damping
+Constraint name
+Hardness
+Syntax highlight for scripting
+Parameters and Settings for the Filebrowser
+Edit Path
+Rot Matrix
+Global Time
+Grease Pencil Manhattan Distance
+Grouping Method
+Lock view rotation in side views
+Effector Group
+Collection of armature edit bones
+Flare
+Control Point selected
+Freehand curves defining the sketch on this frame
+Make this nurbs surface act like a Bezier spline in the V direction (Order V must be 3 or 4, Cyclic V must be disabled)
+Operator
+Near
+Use the pinned context
+Display files as a detailed list
+On Selected Bones Only
+Has Reports
+Property
+Collection of related sketches
+Control point mass values
+Chance that the particle will pass through the mesh
+Sticky Selection Mode
+Font
+Key Modifier
+Clip
+Edit texture nodes from Object
+resolution_y
+Storage of an operator being executed, or registered after execution
+Image
+Density Scale
+Active Render Layer
+Space DopeSheet Editor
+Maximal
+Indirect Factor
+Pixel Filter
+Upper field first
+Static
+AVI
+Internal Friction
+Global Hair
+Level height
+Bake Specular colors
+DopeSheet space data
+Registered Optionally
+Causes actions to be duplicated with the object
+Enable collisions with other objects
+Theme settings for the Properties
+Region ID
+Strength
+Use nodes for GLSL rendering
+General Mass value
+Damping Factor
+Show Paint
+Weight of a particle dupliobject in a group
+Shows controllers for this object in the user interface
+Allow the use of colors indicating constraints/keyed status
+Target Object
+Texture Paint
+Defines how AO mixes with material shading
+Driver Variable
+Wrap words if there is not enough horizontal space
+Point in a shape key for Bezier curves
+Directory/name to save animations, # characters defines the position and length of frame numbers
+Follow Path
+Use a cubic filter for anti-aliasing
+Media First
+Use so the operator grabs the mouse focus, enables wrapping when continuous grab is enabled
+Draw Frames
+Length of rays, defines how far away other faces give occlusion effect
+Lock Scale
+Method of attenuating density by distance from the point
+8-bit Unsigned
+File Paths
+Point Source
+cs_CZ
+Pose Space
+Sort the file list alphabetically
+Provides an alternative access to loc/scale/rotation relative to the parent and own rest bone
+Collision Type
+Collection of node trees
+Occlusion Resolution
+Apply sun effect on sky
+Stamp Note Text
+Traditional Chinese (繁體中文)
+Scene layers included in this render layer
+Weight used by the Bevel modifier 'Only Vertices' option
+IK Y Stiffness
+The default directory to search for texture plugins
+Vertex Group Velocity Negate
+Modifiers
+Invoke Region Window
+Auto Perspective
+Module
+The clarity of the refraction. Values < 1.0 give diffuse, blurry refractions
+Display Camera
+Subdivisions
+Blendfile Data
+Location of custom proxy file
+Solidify
+Do a full redraw each time, slow, only use for reference or when all else fails
+Horizon Spread
+06 - Theme Color Set
+Show a visualization of physics bounds and interactions
+Z
+Quick Cache
+Show Error
+Left
+Property that stores arbitrary, user defined properties
+UV 4
+Resolution %
+Scattering color
+UV 1
+UV 3
+UV 2
+Handle 2
+Display datablocks in visible layers
+Handle 1
+Left handle selection status
+Active Keying Set Index
+SMPTE (Full)
+Use textures to affect material properties
+Draw Modified Edges
+Maximum caused damage on attack per second
+Shape Key
+Enable file compression when saving .blend files
+Script datablocks (DEPRECATED)
+Frame rate for the screencast to be played back
+MPEG-1
+Use Sketching Sessions
+MP3
+Use ObColor instead of vertex colors
+Lock X Rotation Axis
+Envelope Tail Radius
+Causes armature data to be duplicated with the object
+The menu label
+Allow Flight
+Keyed timing
+Free Run (rec date)
+Use a 3D manipulator widget for controlling transforms
+Insert Keyframes - Only Needed
+Show handles of Bezier control points
+Bone is not visible when it is not in Edit Mode (i.e. in Object or Pose Modes)
+Inverse Quadratic
+ru_RU
+Use the value from some RNA property (Default)
+Calculate point velocities automatically
+Actions
+Modifiers affecting all the F-Curves in the referenced Action
+Enables automatic saving of preview images in the .blend file
+Animation Player Preset
+16 - Theme Color Set
+Vector handle color
+Proxy render size
+Clip Max X
+Clip Max Y
+Open in thumbnail view for images and movies
+Physics Engine
+Description
+Sort files by size
+Particle Cache
+Action Influence
+Envelope
+View Perspective
+IK X Maximum
+Boid States
+Display datablocks of selected objects
+Full Sample
+Animation data for datablock
+Channel
+Interpolation mode used for first keyframe on newly added F-Curves. Subsequent keyframes take interpolation from preceeding keyframe
+Order U
+Timecode
+Distance moved by mouse when drawing stroke (in pixels) to include
+Calculate radiosity in a pre-process before rendering
+Selected to Active
+For RGB curves, the color that black is mapped to
+Mesh Texture Face
+E
+For Pose-Mode drawing, only draw ghosts for selected bones
+Landing Smoothness
+Grease Pencil Frame
+Shift
+Mouse Move
+Button 3
+Auto-detect
+Space Timeline Editor
+Only Selected Keyframes Handles
+Use smoke density as texture data
+Operator has a set of reports (warnings and errors) from last execution
+Layered
+Object Vertices
+Set audio mixing buffer size to 512 samples
+Duplicate Metaball
+Saves this datablock even if it has no users
+Cine-Scope 48fps 2048x858
+Ad-hoc correction for over-occlusion due to the approximation
+Line Info
+Filtering Group
+Choose the method used to split a quad into 2 triangles for baking
+Menu Item Colors
+Blending factor for Fresnel
+Constant
+Mitchell-Netravali
+Color
+Button 8
+IK solver for which these parameters are defined, 0 for Legacy, 1 for iTaSC
+Include visualization of Camera related Animation data
+Free Run
+Opacity of the points
+Button 9
+Collection of speakers
+Adaptive QMC
+Layers the object base is on
+NLA Generic
+Sort by size
+Friend
+Velocity Min
+The brightness of the icon
+Show the active object's cloth point cache
+Invoke Default
+Amplification
+Display warnings
+Realtime
+Size of the font used when rendering stamp text
+Refraction
+Third input for the effect strip
+Snap to vertices
+Global child particles percentage
+Faces collide too, can be very slow
+Disable collision for this object
+Disable the time difference between fields
+The default directory to search for loading fonts
+Automatic keyframe insertion in available curves
+Bake the normals in camera space
+Show Header
+layers
+Color for all strokes in this layer
+Top Level Menu Open Delay
+Exec Area
+Auto Render
+Type of periodic offset on the curve
+Key location
+Use scaled and grid-fitted kerning distances
+Stars setting for a World data-block
+Burn
+Set audio sample format to 24 bit signed integer
+Standard
+0
+Tag Crease
+Image Sequence
+Function is registered as callback as part of type registration
+UV Layer to control billboard normals
+Auto-Keying Mode
+Bitrate
+Back scattering weight
+Select where rendered images will be displayed
+The shape of the reflection, from 0.0 (circular) to 1.0 (fully stretched along the tangent
+Gamma Corrected Color
+AutoMerge Keyframes
+Hold the first frame if no previous strips in track, and always hold last frame
+Active PoseChannel constraint
+Scene Bases
+Vertex Colors
+Collection of mesh faces
+string
+Live search filtering string
+Sequencers active strip
+Number of scene samples to take with motion blur
+Vertex Group for pinning of vertices
+Display libraries
+The number of fields per rendered frame (2 fields is 1 image)
+Allow any .blend file to run scripts automatically (unsafe with blend files from an untrusted source)
+Frame of referenced Action to evaluate
+Line Error
+Plus
+Coordinates
+Roll CW
+Envelope Control Point
+Invert roll Axis
+Source List Text
+The file extension used for saving renders
+Last selected element
+Radial falloff power (real gravitational falloff = 2)
+Face Normal
+Fluid Simulation Settings
+Disable or enable the render layer
+Tap
+Active Bone Group
+Show render related properties
+Number of vertical pixels in the rendered image
+Child of this pose bone
+Location of Center of mass
+Show background image in back view
+Max Land Acceleration
+3D View
+Snap to actual frames/seconds (nla-action time)
+Two-side
+Tag
+Enables Anti-aliasing
+Smoke domain settings
+Tab
+Default Closed
+SPH Fluid Settings
+Dome physical configurations
+Theme settings for the User Preferences
+Front-Truncated
+Has the current session been saved to disk as a .blend file
+12 - Theme Color Set
+Box
+Constraint modifying the transformation of objects and bones
+Curve datablocks
+Adjustment Layer
+Velocity Scale
+Field of View of the Dome - it only works in mode Fisheye and Truncated
+Jitter
+Audio Window
+Use Grease Pencil
+Filter Blender
+Start frame displayed in the sequence editor after offsets are applied, setting this is equivalent to moving the handle, not the actual start frame
+Create springs for this number of frames since particles birth (0 is always)
+Label
+Object this base links to
+Apply channel rotation as IK constraint
+PCM
+Percentage
+Render Sky in this Layer
+Red
+pl_PL
+Datablock whose nodes are being edited
+Draw user interface text anti-aliased
+Head
+Subdivide stroke in bones of specific length
+Use the depth under the mouse to improve view pan/rotate/zoom functionality
+Texture to use as force
+RNA type definition
+PIZ (lossless)
+Bit depth per channel
+Billboard Split UV
+Pxr24 (lossy)
+Region height
+Heat
+Particle select and display mode
+Normalized
+Mux Packet Size
+Diameter in Pixels for Object/Lamp origin display
+Distance between subsequent volume depth samples
+Swap the Mouse Wheel zoom direction
+Sequence editor space data
+The context in which the panel belongs to. (TODO: explain the possible combinations bl_context/bl_region_type/bl_space_type)
+Bake from Multires
+Start size of strands in pixels or Blender units
+Shape Key datablocks
+Targa
+Particle Instance
+Bezier V
+Multiplier to bring particle speed within an acceptable range
+Collision Group
+Limit effectors to this Group
+Display datablocks of all objects of same type as selected object
+The constraint is applied relative to the local coordinate system of the object, with the parent transformation added
+Deliver normal pass
+Location of tail end of the bone
+The transformation of the target is evaluated relative to the world coordinate system
+File Path
+O
+FLAC
+UV Layer to control billboard time index (X-Y)
+Blender Units
+Vertex Group Tangent Negate
+Set color of selected color stop
+Pivot center for rotation/scaling
+Set audio sample format to 16 bit signed integer
+Zooms in and out based on horizontal mouse movement
+Invert Zoom
+Alpha Mode
+bl_use_postprocess
+Land Stick Force
+Create empty placeholder files while rendering frames (similar to Unix 'touch')
+Face Collision
+Automatic keyframe insertion for Objects and Bones
+Damp
+Disable simulation of angular motion along the X axis
+RNA Array Index
+Unsigned Number
+Output video in MPEG format
+Dead
+Text Widget Colors
+Auto Save Time
+Freehand curve defining part of a sketch
+Header Text Highlight
+Seed
+True when the Ctrl key is held
+Raytrace Acceleration Structure
+Which direction is used to calculate the effector force
+Addon Key Configuration
+Data point for freehand stroke curve
+Number of cone samples averaged for blurry reflections
+F8
+Filter Sound
+Mass of cloth material
+Matrix
+Action Group that this F-Curve belongs to
+Subdivide stroke adaptively, with more subdivision in curvier parts
+How many steps to draw the path with
+Space Text Editor
+Handle Vertex
+Render face two-sided
+Mist uses inverse quadratic progression
+DV
+Has Maximum
+Skip Quad to Triangles
+Number of times to repeat the action range
+Maximum Distance
+is_baked
+Amount of damping during collision
+F9
+8192
+X Offset
+Image Pin
+Accuracy of attack
+Continuously unwrap the selected UV island while transforming pinned vertices
+Collection of grease pencils
+Gesture Border
+Exclude raytraced reflection pass from combined
+Choose normal space for baking
+Boid state for boid physics
+Occluder for optimizing scene rendering
+Axis Angle
+Field settings for an object in physics simulation
+Rotation Mode
+Active Spline
+Buoyancy
+Element of a curve, either Nurbs, Bezier or Polyline or a character with text objects
+Start player with a visible mouse cursor
+Bars
+Armatures active edit bone
+Breakdown
+Color Mode
+Diffuse
+01 - Theme Color Set
+Start position of the marker in the line
+Consider objects as whole when finding volume center
+Iris
+Save Buffers
+Time Scale
+Split quads predictably (1,2,3) (1,3,0)
+Constraint
+Display Hidden
+Receive shadows from sources outside the volume (temporary)
+Required
+Domain
+Display Speaker
+GLSL Ramps
+Point data to use as renderable point density
+Keyframe insertion only when keyframe needed
+Audio Sample Rate
+Area width
+Time
+Texture datablock used by this texture slot
+Draw Waveform
+DPX
+Expression
+Voxel data settings
+Constraints
+State Colors
+Influence setting is controlled by an F-Curve rather than automatically determined
+Number of frames between paths shown (not for 'On Keyframes' Onion-skinning method)
+Set audio sampling rate to 48000 samples per second
+Order of video fields. Select which lines get rendered first, to create smooth motion for TV output
+Surface Diffuse
+Magnetic
+Stamp Background
+Radius of the activity bubble, in Manhattan length. Objects outside the box are activity-culled
+Show Warn
+When bone has a parent, bone's head is struck to the parent's tail
+Timer 0
+Timer 1
+Timer 2
+Display Y Axis
+Frame player from IRIDAS
+Children
+Zoom To Mouse Position
+Shadows
+Use High Quality Drawing
+Exclude emission pass from combined
+Invert rotation axis
+Plane
+Drivers
+Particle system in an object
+Shader Nodes
+Z-Buffer
+Soft to Soft Body
+Expanded in the user interface
+After Current
+Mix
+Object Color
+Fresnel
+Main Cameras
+Atmosphere Extinction
+Use Indirect Lighting
+Elastic Limit
+Material Slot
+Resolution of raytrace accelerator. Use higher resolutions for larger scenes
+Falloff Power
+Mesh Deform
+Show influence curves on strips
+Tweak timing for physics to control frequency and speed
+IK X Stiffness
+Theme settings for the File Browser
+Images are saved with RGB (color) data
+1
+Textured Fonts
+Data type of the property
+Gain
+Scale X
+Is Perspective
+Metaball
+IK Z Stiffness
+B-Bone Display X Width
+Space Console
+Handle type for handles of new keyframes
+Left Mouse
+Macro
+Average
+Curve
+Sketches for this layer on different frames
+User interface layout in a panel or header
+Error Tolerance
+Axis of mouse movement to zoom in or out on
+Disable auto (de)activation in physics simulation
+Softness
+Inherit Scale
+Graph Editor
+Method of shading, attenuating, and scattering light through the volume
+View
+Position Iterations
+H.264
+Romanian (Român)
+Still Frame Number
+Extension Filter
+Vertex Group Roughness End Negate
+Specular Colors
+Minimal Info
+Face selection mode
+Reflection Color
+Node Editor
+Proportional distance over which the light is diffused
+Use Local Coords
+Zmask Negate
+Property that gives the name of the struct
+Rotation in quaternions (keep normalized)
+On Keyframes
+Pulse False Level
+Animated
+Main Grease Pencils
+Alpha Sort
+Factor for ambient occlusion blending
+Active vertex color index
+Generator
+Author
+Restrict Animation Updates
+Lock editing of four component rotations by components (instead of as Eulers)
+NLA Track is evaluated itself (i.e. active Action and all other NLA Tracks in the same AnimData block are disabled)
+The diffuse color of the OpenGL light
+Do not calculate lighting and shadows
+Max Sample Error
+Cut
+Starting distance of the mist, measured from the camera
+Damping
+Push an undo event (needed for operator redo)
+White
+Sets the strength of the add effect
+Collection of lamps
+Animation
+Parent bone (in same Armature)
+Environment Maps
+Inputs
+Direction
+Max difference in heights of obstacles to enable their interaction
+group
+75%
+Hide this curve in editmode
+Deformed Location
+Include visualization of Lattice related Animation data
+Weighted result of strip is multiplied with the accumulated results
+Cloth Settings
+Sharp edge for the EdgeSplit modifier
+Collection of groups
+window
+Preset
+Theme Outliner
+Fast Navigate
+Draw Smooth Edges
+Collection of curves
+Star Tips
+NLA Evaluation Enabled
+3D Cursor Location
+Spline Bezier Points
+Stereo
+Page Up
+Negate the effect of the field vertex group
+Collide All
+Items Expanded
+Marker for noting points in the timeline
+Z Direction
+Causes lamp data to be duplicated with the object
+Scene Strip
+Boid state name
+Simulation value to be used as a texture
+64-bit Float
+Domain Object
+Right
+Shape of clumping
+XZY Euler
+Group Sockets
+Individual pose bones for the armature
+Min Step
+Manipulator Scale
+Main Armatures
+Die Time
+Number of frames to show after the current frame (only for 'Around Current Frame' Onion-skinning method)
+Placeholders
+name
+Unfitted
+Minimum regions size. Smaller regions will be merged
+Mesh Selection Mode
+Method to draw in the sequencer view
+Mute
+Down Arrow
+Render Strands in this Layer
+Child Particles
+Duplicate Action
+IK Param
+Main Images
+Weight for cloth simulation
+Index number of the vertex group
+Collection of NLA Tracks
+Sequence strip data for a single frame
+Sculpt/Paint Use Unified Strength
+Audio Mixing Buffer
+ID-block that the specific property used can be found from (id_type property must be set first)
+Linear physics
+Use Collision Bounds
+Passes
+Noise algorithm - Original Perlin: Smooth interpolated noise
+Additive
+Handle 2 selection status
+Trigger controllers only for an instant, even while the sensor remains true
+Loose edge
+Edit animation/keyframes displayed as 2D curves
+Sculpt/Paint Use Unified Radius
+Index to the specific property affected by F-Curve if applicable
+Main Window Managers
+Unit to use for displaying/editing rotation values
+Editmode bone in an Armature datablock
+Bending Stiffness Maximum
+Selection state of the curve point
+Enable pinning of cloth vertices to other objects/positions
+Shared
+Zoom = Up/Down
+NLA Strips
+Text to search for with the find tool
+Use a DCI Standard preset for saving jpeg2000
+Blend Mode
+Space Sequence Editor
+Textures Directory
+Bone is always drawn as Wireframe regardless of viewport draw mode. Useful for non-obstructive custom bone shapes
+Include the name of the active scene in image metadata
+F-Curve Name Filter
+Time in 1/10 seconds to hold the Right Mouse Button before opening the toolbox
+pin_id
+Fluid interaction radius
+NLA Strip 'transitions' between adjacent strips
+Editable
+Emission
+Template armature that will be retargeted to the stroke
+Selection status
+Texture slot defining the mapping and influence of a texture
+Connected
+Key
+Align the transformation axes to world space
+Transform parameters for a sequence strip
+Layer Opacity
+Use the Bullet physics engine
+Method for generating shadow samples (for Raytrace)
+Effect particles' dynamic rotation
+Show options for whether channels related to certain types of data are included
+G
+Collection of group objects
+Make hairs shorter
+Show properties marked for debugging while the game runs
+Invert x axis
+Greek (Ελληνικά)
+Smooth
+Sync view position between side views
+Used Layers
+Active File Text
+F18
+F19
+Force effector weight
+The distance over which the mist effect fades in
+Edge Select
+F12
+F13
+F10
+Display Meshes
+F16
+Options
+Grease Pencil datablocks
+F15
+Output video in AVI JPEG format
+Sky Color
+blend_data
+Temporary Directory
+Current rendering engine is a game engine
+100%
+Vertex Group Roughness 2
+IK Rot Weight
+Handle Type
+Bevel Weight
+F-Curve Modifier Type
+int
+No Sleeping
+Save TIFF with 16 bits per channel
+ID Property Group
+Island selection mode
+Collection of texts
+Edges collide too
+512
+Sets minimum Y value for the render border
+Mouse X Position
+Active screen showing in the window
+Stamp Note
+Number of horizontal tiles to use while rendering
+Tilt
+Child Particle
+Action Start Frame
+Media Last
+Pass in multilayer image
+Back Space
+Outflow
+Active Boid State Index
+Enable cluster collision between soft and soft body
+Instance support leads to effective memory reduction when using duplicates
+Xvid
+Realtime display of a modifier
+Sets the layer as active for display and editing
+Wireframe
+Grease Pencil Eraser Radius
+Accurate, but slow when noise-free results are required
+Syntax Special
+Repeat
+Global undo works by keeping a full copy of the file itself in memory, so takes extra memory
+Strength of noise
+Vertical
+Separate
+Self Friction
+Snap median onto target
+Area
+Falloff
+REC709
+Smooth the normals of the surface or beveled curve
+2D View Minimum Grid Spacing
+Font Style
+Image datablocks
+3D region in this space, in case of quad view the camera region
+Sound datablocks
+Auto Velocity
+Data
+Bake the normals in world space
+Lock Camera and Layers
+Vertex group to control rotation
+Global
+Sun Brightness
+Optional custom node label
+Align to Normal
+Directory displayed in the file browser
+Deliver speed vector pass
+Enabled
+Frame player from Tweak Software
+Weighted result of strip is removed from the accumulated results
+A animation layer containing Actions referenced as NLA strips
+Key configuration that can be extended by addons, and is added to the active configuration when handling events
+Dominant
+Line Output
+Seam edge for UV unwrapping
+Options for this panel type
+Menu Widget Colors
+Main Worlds
+Shadowed
+11
+Atmosphere
+Create representation for obstacle simulation
+Estimated rotation matrix
+16
+Pose
+Sun size
+NodeTree
+RGB
+2048
+Anaglyph
+Active Object
+Collection of curve splines
+Marker highlighting a portion of text in a Text datablock
+DopeSheet
+Magnetic effector weight
+Render face transparent and add color of face
+Previous Rotation
+Display Shapekeys
+Aggression
+en_US
+Color space to use for internal XYZ->RGB color conversion
+Numpad 7
+Sets the maximum number of physics step per game frame if graphics slows down the game, higher value allows physics to keep up with realtime
+Keying Sets All
+Boid
+Numpad 6
+Snap Element
+it_IT
+Include the name of the foreground sequence strip in image metadata
+Metaballs
+Active particle system being displayed
+Toggle between moving the viewpoint or moving the scene being viewed
+Use a Gaussian filter for anti-aliasing
+ChannelDriver Variables
+MetaBall
+Combined
+FFmpeg video codec #1
+Use Default Fade
+Numpad 3
+ZXY Rotation Order. Prone to Gimbal Lock
+Index to the specific setting if applicable
+Bake Mirror values
+Use vBVH
+Apply channel size as IK constraint if stretching is enabled
+Invert Zoom Direction
+Numpad 1
+Edge Sharp
+Unit Settings
+Stamp Frame
+Brush datablocks
+use global timestamp written by recording device
+Mapping
+Snap active onto target
+Rigid Body Joint
+Rate control: buffer size (kb)
+Scale factor along the Y for items in this (sub)layout
+RGBA
+Half
+Sets the number of rings rendered over the halo
+Turbulence
+Graph Editor instance has some ghost curves stored
+Halo
+No display
+Stiffness Scaling
+Use a custom falloff curve
+Contents Follow Opening Direction
+Off
+Seam
+Sculpt
+Sequences
+Stiff viscosity is a factor of normal viscosity
+Curve Guide
+Proportional Editing disabled
+Rotate Around Selection
+Key Maps
+Minimum
+Align newly added objects facing the active 3D View direction
+Tool Properties
+Amount of noise for the force strength
+Amount of ray samples. Higher values give smoother results and longer rendering times
+Numpad 8
+]
+Exclude specular pass from combined
+Stamp Scene
+Collection of grease pencil layers
+Choose Collision Type
+Amount to blend in the material's diffuse color in raytraced transparency (simulating absorption)
+Particle system has been edited in particle mode
+Stroke conversion method
+Properties acting as inputs for this driver
+Point Cache
+Window Manager Event
+Collection of brushes
+Don't use a physics engine
+Material Override
+Temperature difference to ambient temperature
+State determining which controllers are displayed
+All Object Origins
+Uses extreme alpha
+Node Tree
+Before Current
+Array
+Collision settings for object in physics simulation
+Stretch To
+F-Curves for controlling the strip's influence and timing
+Field Order
+Hide Dot Files/Datablocks
+Loose
+Use Game Engine
+Onion Skinning (ghosting) settings for visualisation
+Draw dashed black-white edges
+Align handle selected color
+Minimum number of pixels between each gridline in 2D Viewports
+Sky
+Spring Frames
+Location of head end of the bone
+Active key configuration (preset)
+Width
+Action Group is selected
+Collection of Texture Nodes
+Collection of add-ons
+States which are being used by controllers
+Gravity or external force vector
+NLA Track is active
+Ogg
+Roll
+Grless
+Wheel Down
+Amount of friction during particle collision
+Search in all text datablocks, instead of only the active one
+View pivot location
+Draw image with RGB colors and alpha transparency
+Resolution
+Use the scene's active camera and layers in this view, rather than local layers
+Every point is effected by multiple springs
+Vertex
+Include the filename of the .blend file in image metadata
+Maximum distance error from contour to cells
+Output video in H.264 format
+Action displayed and edited in this space
+History
+Local View
+Stamp Text Color
+Translation
+IK Y Maximum
+File Select Parameters
+Shared Vertex
+Safe Margin
+Tip Size
+Edge color
+Negate the effect of the size vertex group
+Game engine controllers to process events, connecting sensor to actuators
+Triangle Mesh
+NLA Strip is played back in reverse order (only when timing is automatically determined)
+Scale Y
+H
+Main Lamps
+Approximate
+Controllers
+Deliver specular pass
+The number of old versions to maintain in the current directory, when manually saving
+Theme settings for the NLA Editor
+Nearest Marker
+Randomize star colors
+Theme settings for the Sequence Editor
+Index of refraction (higher values are denser)
+Local Location
+Default Key Configuration
+Show background image while looking to the right
+The space where the header is going to be used in
+Max number of vertices per polygon
+Quality of JPEG images, AVI Jpeg and SGI movies, Compression for PNG's
+Averaged Value
+Use a box filter for anti-aliasing
+Spin CCW
+Color to use for stamp text
+Wheel Invert Zoom
+Lock Camera to View
+New Interpolation Type
+Main data structure representing a .blend file and all its datablocks
+Calculate bone paths from heads
+Layer of vertex colors in a Mesh datablock
+Is this keymap item user defined (doesn't just replace a builtin item)
+Main Textures
+Enable soft body shape matching goal
+How many self collision iterations should be done. (higher is better quality but slower)
+Collection of scene bases
+Show right margin
+Ambient Occlusion
+Frame this control-point occurs on
+Snap to edges
+Turbulence effector weight
+Build record run time code index
+float
+Use Edges as springs
+Rings
+Color Ramp Elements
+Charge
+Thickness
+Zmask Layers
+The panel label, shows up in the panel header at the right of the triangle used to collapse the panel
+Spread
+Cluster Iterations
+Location
+Weight Paint
+15 - Theme Color Set
+space_data
+Vertex group to control kink
+If this is set, the menu gets a custom ID, otherwise it takes the name of the class used to define the panel. For example, if the class name is "OBJECT_MT_hello", and bl_idname is not set by the script, then bl_idname = "OBJECT_MT_hello"
+Path is being edited
+ShapeKey Editor
+AC3
+Set audio channels to 5.1 surround sound
+Minimum Size
+Path to a custom animation/frame sequence player
+Smoke inherits it's velocity from the emitter particle
+Display Lists
+Maximum number of frames on either side of the active frame to show (0 = show the 'first' available sketch on either side)
+Compress File
+Bezier U
+Displace
+Velocity Max
+Use Right Mouse Button for selection
+Box Backdrop Colors
+Exec Default
+3
+Path point is selected for editing
+Bone Group
+When calculating Bone Paths, use Head or Tips
+Project Individual Elements
+Parameters for IK solver
+Show the object origin center dot for all (selected and unselected) objects
+BLI BVH
+Realtime Updates
+Shutter
+How strongly the fluid tries to keep from clustering (factor of stiffness)
+Target
+Scrollbar
+Show controllers of all selected objects
+Instead of per brush radius, the radius is shared across brushes
+screen
+Use large mouse cursors when available
+Keymap is defined by the user
+Grease Pencil Stroke Point
+48 kHz
+Use the manipulator for rotation transformations
+Bullet
+Armature Bones
+Directory
+TimeCode Style
+Identifier
+Does full Sky texture render for diffuse energy
+Items in the keymap, linking an operator to an input event
+AvMinMax
+Multiply the current speed of the sequence with this number or remap current frame to this frame
+Apply force only in 2d
+MPEG
+Is this keymap item modified by the user
+Zoom in towards the mouse pointer's position in the 3D view, rather than the 2D window center
+How smoothly the boids land
+region
+Swedish (Svenska)
+Region in a subdivided screen area
+Add indirect light bouncing of surrounding objects
+Factor Radius
+Obstacle
+Color used for selected bones
+Line Numbers
+Draw edges after modifiers are applied
+Space Info
+Multicam Selector
+Reflection Exclude
+Weight of scale constraint for IK
+Node editor space data
+Link between nodes in a node tree
+Show the entire viewport in the display window, viewing more horizontally or vertically
+Pixel distance around the handles to accept mouse clicks
+Initial State
+Sum Values
+Channel Group
+Tools can use this to tag data, (initial state is undefined)
+The default directory to search for textures
+Lin error
+F-Curve is selected for editing
+Keying Sets
+Release confirms
+64
+Title for the file browser
+Sets the audio sample format
+Invert y Axis
+Include the name of the last marker in image metadata
+Collection of keyframe points
+3D View space data
+Vortex effector weight
+Object adds fluid to the simulation
+Use smoke velocity as texture data
+Maximum Radial Distance
+The axis to display the image on
+Keying set options
+Horizon Brightness
+Render Engine
+Display Particle
+Exclude AO pass from combined
+Lights user to display objects in solid draw mode
+Textbox Height
+Point coordinates
+Axis Angle (W+XYZ). Defines a rotation around some axis defined by 3D-Vector
+Text Editor
+Use display lists to speed up rendering by keeping geometry on the GPU
+Actuators
+Make this nurbs curve or surface meet the endpoints in the U direction (Cyclic U must be disabled)
+es_ES
+Auto Run Python Scripts
+Subtract
+Screen Editing
+Properties in the struct
+Set audio sampling rate to 96000 samples per second
+Scale to use when converting between blender units and dimensions
+Mouse/Trackpad Zoom
+X Ray
+Maximum distance of reflected rays (reflections further than this range fade to sky color or material color)
+True when this property is an output value from an RNA function
+False when F-Curve could not be evaluated in past, so should be skipped when evaluating
+Fresnel Factor
+Minimum for slider
+Use Goal
+Sets how the texture is extrapolated past its original bounds
+Minimum size of strands in pixels
+Points
+Motion Path
+Emission Color
+Global maximum shadow samples
+Path
+Action
+Sets the number of sub-flares
+Used State
+Update other affected window spaces automatically to reflect changes during interactive operations such as transform
+Filter Script
+Method to interpolate/smooth values between voxel cells
+Gives halo a texture
+Show markers belonging to the active action instead of Scene markers (Action and Shape Key Editors only)
+Divide
+Proportional Editing mode, allows transforms with distance fall-off
+Angular distortion between UV and 3D angles
+Random variation of damping
+Channels Selected
+plugin
+Spline IK
+The frame on which the timeline marker appears
+Snap to 1.0 frame/second intervals
+Handle 1 selected
+Free all image texture from memory after render, to save memory before compositing
+Method used for combining Active Action's result with result of NLA stack
+If enabled, stiffness can be scaled along a weight painted vertex group
+Invert z Axis
+Minimum regions size. Smaller regions will be deleted
+Display Mode
+Text bounding box for layout
+Onion Skinning
+Open
+User Add-Ons
+Output file format
+Size
+Backdrop X offset
+Active Pose Marker Index
+Text Marker
+Number of preprocessing passes to reduce overocclusion
+Modifiers affecting the shape of the F-Curve
+Wheel In
+Mesh Face
+Rotation Angle
+Path to a setting for use in a Keying Set
+Sync Markers with keyframe edits
+Whether to use minimum clipping value
+Main Actions
+Editing context being displayed
+Raytraced refraction settings for a Material datablock
+Enable image painting mode
+Hidden
+When adding objects from a 3D View menu, either align them to that view's direction or the world coordinates
+Only show and edit handles of selected keyframes
+Cinema 48fps 2048x1080
+Max Rate
+Envelope Head Radius
+Use old Octree structure
+Global maximum subdivision level
+Use this object's coordinate system instead of global coordinate system
+Viscosity
+Theme Properties
+Boolean Property
+UV Selection Mode
+Force the curve view to fit a defined boundary
+Objects
+Default (Default)
+Shade Down
+Grease Pencil Layers
+Current Keying Set index
+Shadow Exclude
+Root Size
+Rest Shade Key
+Framerate, expressed in frames per second
+Scrollback
+Overlay Lock
+Duplicate Text
+Russian (Русский)
+10 - Theme Color Set
+Collection of texture slots
+ID Materials
+I
+The distance from which particles are affected fully
+Action Pose Markers
+Clamp velocity to this maximum speed
+English (English)
+JPEG
+L
+Display only files with extensions in the image select window
+Theme Sequence Editor
+ID From
+All Scenes
+Make hairs longer or shorter
+Handle Vertex Select
+With displacement normalize to the distance, with ambient occlusion normalize without using material settings
+Physics
+ID
+Mesh Vertex Color Layer
+Use curve weights to influence the particle influence along the curve
+Cached location on path
+Motion
+Node tree being displayed and edited
+Tangent Shading
+Mesh Vertex Color
+B-Spline
+Based on distance/falloff it adds a portion of the entire path
+Theme settings for the Audio Window
+Displacement
+Coordinates of the second handle
+Rendering settings for a Scene datablock
+Radius of boids personal space on land (% of particle size)
+Live Edit
+The length of the contents of this strip before the handles are applied
+Display Armature
+Length Mode
+Display datablocks of active object
+SDL
+Collection of Nla Strips
+Amount the Active Action contributes to the result of the NLA stack
+Show only actuators connected to active states
+Vertex group for fine control over bending stiffness
+4 Channels
+Bake displacement
+Acceleration
+Angular Velocity
+Boid Rule
+Action Group
+Split quads predictably (0,1,2) (0,2,3)
+Struct definition this is derived from
+Include the current date in image metadata
+Action Group is expanded
+Draw title safe margins in preview
+Output image in DPX format
+Include visualization of Object-level Animation data (mostly Transforms)
+Proxy size 25%
+16 bit color channels
+The default directory to search for sounds
+Log
+Redraw all overlapping regions, minimal memory usage but more redraws
+International Fonts
+5.1 Surround
+Linear
+Settings that should be keyframed together
+Factor Repulsion
+Overlap Flip
+The active face for this mesh
+Turn on SB diagnose console prints
+Dome
+Brazilian Portuguese (Português do Brasil)
+Make hairs stand up
+Uses the vertex normal to specify the dimension of the halo
+Key maps configured as part of this configuration
+Active Space
+4
+Theme Text Editor
+Method to display/shade objects in the 3D View
+Make this nurbs surface meet the endpoints in the V direction (Cyclic V must be disabled)
+Normalized Coordinates
+Glow
+Diffusion
+Enemy
+Co-ordinate system to cache vertices in
+Show state panel
+Show ghosts on keyframes
+Anti-Aliasing
+Zoom Axis
+Reactor Target Particle System
+First input for the effect strip
+Radians
+Free Nodes that are not used while compositing, to save memory
+Transform
+Free handle selected color
+Maximum depth for light to travel through the transparent material before becoming fully filtered (0.0 is disabled)
+Button 10
+Amplitude
+Show Active States
+Space Nla Editor
+Vertex group to control length
+In text window, paste with middle mouse button instead of panning
+Collection of object constraints
+Transparent RGB pixels are multiplied by the alpha channel
+Calculates environment map at each rendering
+Deform
+Choose BW for saving greyscale images, RGB for saving red, green and blue channels, AND RGBA for saving red, green, blue + alpha channels
+Tweak Right
+44.1 kHz
+Include visualization of Texture related Animation data
+Set layer Visibility
+Deliver mist factor pass (0.0-1.0)
+Sort files by modification time
+Minimal # solver steps/frame
+Have recent edits been saved to disk
+Keying Set Paths to define settings that get keyframed together
+Pressure of tablet at point when drawing it
+Show background image while looking to the left
+Sharp
+Only include F-Curves with names containing search text
+Number of spaces to display tabs with
+Puff Volume
+Video bitrate(kb/s)
+Linear Stiffness
+Vertex Group Tangent
+Amount of dithering noise added to the rendered image to break up banding
+Absorption
+Find Wrap
+Enable hair dynamics using cloth simulation
+The type of the Sequencer view (sequencer, preview or both)
+Number Widget Colors
+File Extensions
+Theme Node Editor
+Object Duplicate
+Goal Maximum
+Size of element, use of components depends on element type
+Word Wrap
+Any
+More than one rendering engine is available
+Cached positions per frame
+Control key pressed
+Collection of armatures
+Gloss Anisotropy
+Tracking by taking the shortest path
+Spherical falloff
+Objects further than this are not visible to map
+Driver could not be evaluated in past, so should be skipped
+Insert Keyframes - Visual
+Rule Evaluation
+Negate the effect of the velocity vertex group
+The frame number to always use
+ca_AD
+Visibility
+Bone associated with this PoseBone
+Envelope Deform Distance
+Invoke Area
+Theme Info
+Current Keying Set index (negative for 'builtin' and positive for 'absolute')
+Black
+Lock editing of location in the interface
+Interface
+Auto Keying Enable
+Save luminance-chrominance-chrominance channels instead of RGB colors
+Left Ctrl
+Multiplier to adjust velocity passed to smoke
+Font size and resolution for display
+Extreme
+Show Controllers
+Render engine
+Render image to two fields per frame, for interlaced TV output
+To socket
+Activate TRUE level triggering (pulse mode)
+Temp. Diff.
+Expanded
+Target particle system
+Which part to snap onto the target
+local space unit length normal vector for this face
+Keying Set Name
+Python Console
+Show Hidden
+The region relative horizontal location of the mouse
+Nurb active V-lines
+Set position of selected color stop
+Fixed size UV coordinates array
+Reactor Target Object
+Node tree type to display and edit
+Display datablocks in current scene
+Color and Alpha
+Causes texture data to be duplicated with the object
+Item in a Key Map
+3D View region data
+Display face-assigned textures in solid view
+Disable simulation of linear motion along the Z axis
+Point of a curve used for a curve mapping
+Include visualization of Metaball related Animation data
+Structural Stiffness Maximum
+Factor Density
+Simple Deform
+The default color for textures that don't return RGB or when RGB to intensity is enabled
+Name of UV unwrapping layer
+Outputs
+Images
+Message
+Ray
+Theme Bone Color Set
+Redraw all overlapping regions, minimal memory usage but more redraws (for graphics drivers that do flipping)
+IK stiffness around the Y axis
+Edge spring stiffness when shorter than rest length
+Menu Backdrop Colors
+50%
+Heads
+Stereo Mode
+Soft body simulation settings for an object in the game engine
+Show Framerate and Profile
+Right Shift
+Direct conversion of frame numbers to seconds
+Log conversion reference whitepoint
+Radius
+Linear stiffness of the soft body links
+View3D Rotate Modal
+SMPTE
+Add
+Show framerate and profiling information while the game runs
+Degrees
+Gather Method
+Output
+Set audio sampling rate to 192000 samples per second
+End
+Include visualization of Material related Animation data
+Sets the layer as active for cloning
+Save for every anti-aliasing sample the entire RenderLayer results. This solves anti-aliasing issues with compositing
+When bone doesn't have a parent, it receives cyclic offset effects
+Enable self collisions
+Property is registered as part of type registration
+Syntax Comment
+Draw Particles
+area
+Basis Matrix
+Active vertex color layer
+Image and UV editor space data
+Set metaball as negative one
+Collection
+JPEG Quality of proxies to build
+Zbuf
+Show the Z axis line in perspective view
+Tails
+Show Active Object
+Defines size of derivative offset used for calculating gradient and curl
+Color Set
+Integer
+Output image in bitmap format
+OpenAL
+Particle Systems
+Display the user preference datablocks
+Size of packed file in bytes
+Ukrainian (Український)
+Mono
+No proxy, full render
+Fullscreen
+Allow scaling of the bone for IK
+Creates viscosity for expanding fluid)
+J
+Blend mode for combining sun sky with world sky
+Global Undo
+Quicktime
+Draw frames rather than seconds
+Bake shading on the surface of selected objects to the active object
+Frame currently being displayed for this layer
+Never None
+alignment
+Bulgarian (Български)
+Light
+Maximal Spring length * Ball Size
+Emulates Middle Mouse with Alt+Left Mouse (doesn't work with Left Mouse Select option)
+Text datablocks
+Welding
+Heavy
+Quick Sketching
+Method used to determine color of F-Curve in Graph Editor
+Show UV Editor
+Cut hairs
+Expand
+Effect particles' location
+View Matrix
+Allow boids to climb goal objects
+Sequence
+Bone Name
+Seed of the noise
+Motion Path Cache Point
+Use modifier while in the edit mode
+Meshes
+For reactor systems, index of particle system on the target object
+Billboard
+Automatically set based on graphics card and driver
+Macro Operator
+DopeSheet Channel
+Render and combine multiple samples per pixel to prevent jagged edges
+Render Z-Transparent faces in this Layer (On top of Solid and Halos)
+Output image in uncompressed Targa format
+Paths
+Left Arrow
+Collection of spline bezirt points
+Layout
+Show Physics Visualization
+Number of bones in the subdivided stroke
+Vertex Group Clump Negate
+Negate the effect of the tangent vertex group
+Base type for IK solver parameters
+Active camera used in this view (when unlocked from the scene's active camera)
+Re-render and composite changed layer on 3D edits
+ISO 2
+Active Layer Index
+Esc
+Show Frame Number Indicator
+End Offset
+Use active Viewer Node output as backdrop for compositing nodes
+Blender command line animation playback - path to Blender 2.4
+Frequency
+Pivot around the median point of selected objects
+Blend vertex colors across face when vertices are shared
+Game engine logic brick to detect events
+Causes the image to repeat horizontally and vertically
+Bone location is set in local space
+User Preferences
+Show Operator
+Max Logic Steps
+Damping of the harmonic force
+Vertex of a simulated fluid mesh
+Graph Editor Generic
+18 - Theme Color Set
+Average Speed
+Console
+Total number points for the surface on the V direction
+Use the manipulator for scale transformations
+Disable
+5
+13 - Theme Color Set
+Vertex group to control field
+12
+Shared Location
+Transparent pixels are filled with sky color
+Atmosphere Turbidity
+Widget Style
+RNA function definition
+NLA Strip is not evaluated
+Recast Data
+4096
+Right Handle Selected
+Cyclic
+Color Ramp
+Self Collision Quality
+Index of active pose marker
+Vertex Group Density Negate
+Dome Mode
+Image and settings for display in the 3d View background
+Process the render (and composited) result through the video sequence editor pipeline, if sequencer strips exist
+FPS
+Normals
+SIMD SVBVH
+Minimum distance between collision objects before collision response takes in
+Color balance gamma (midtones)
+Minimum distance for the field's fall-off
+Limit fluid objects to this group
+Load UI
+Factor Stiff Viscosity
+Draw preview using full resolution or different proxy resolutions
+Paint Lock
+Sets the number of samples used by the audio mixing buffer
+Source List
+Around Current Frame
+Scroll Handle
+Add light coming from the environment
+Color of the F-Curve in the Graph Editor
+Exclude indirect pass from combined
+Selection of IK solver for IK chain, current choice is 0 for Legacy, 1 for iTaSC
+Bias
+Text Input
+Pitch
+2D
+Braid
+Modifier name
+Use extra textures like normal or specular maps for GLSL rendering
+Stamp Marker
+ZXY Euler
+Function does not pass its self as an argument (becomes a class method in python)
+Sun Intensity
+Fit
+AO Exclude
+Integer Property
+Tube
+ZYX Rotation Order. Prone to Gimbal Lock
+Default paths for external files
+Solid
+Lock the same rotation/scaling pivot in all 3D Views
+Groups of F-Curves
+Display the object solid, with face-assigned textures
+Quadratic
+ID-Block that keyframes for Keying Set should be added to (for Absolute Keying Sets only)
+Inaccurate, but faster and without noise
+Unique ID for this region
+Lock Y Axis
+Logic Nor
+Gaussian
+Euler
+Settings for filtering the channels shown in Animation Editors
+Invoke Region Channels
+Crop the rendered frame to the defined border size
+Limit Location
+Radius of the brush in pixels
+Automatically select also UVs sharing the same vertex as the ones being selected
+Title
+Histogram
+Display raw datablocks
+Bone deformation distance (for Envelope deform only)
+Forcefield based on the Lennard-Jones potential
+Action Group is locked
+XYZ Euler
+Outline Width
+Upper First
+Subdivide stroke in fixed number of bones
+Action Clip
+Use 16 bit floats instead of 32 bit floats per channel
+Stamp Camera
+Texture Nodes
+Falloff power (real gravitational falloff = 2)
+3D View near clipping distance
+Color Randomization
+Snap Peel Object
+Determine the amount of render threads used
+Amount
+F-Curve
+Zmask scene layers for solid faces
+Bone Group this pose channel belongs to (0=no group)
+Constraint's panel is expanded in UI
+Collection of Color Ramp Elements
+Grease Pencil
+Show controllers of active object
+Instead of per brush strength, the strength is shared across brushes
+Allow boids to move on land
+Negate the effect of the clump vertex group
+`
+Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis
+Highlight the current line
+Simplify Child Particles
+Lattice
+Timeline Markers
+Draw actual particles
+XYZ
+Collection of spaces
+Bake Mode
+Sub
+Enable Stereo environment
+F-Curve defining values of a period of time
+Rules are gone through top to bottom. Only the first rule that effect above fuzziness threshold is evaluated
+Constraint to stay within the image bounds while editing
+Only Selected Curve Keyframes
+Scroll Bar
+Theme settings for Font
+Allow Climbing
+Syntax Highlight
+ASCII
+Properties space data
+Lamp datablocks
+Pivot around bounding box center of selected object(s)
+Max Res
+Mouse Previous X Position
+Simplify the final stroke
+Frame is selected for editing in the DopeSheet
+OS Key
+Function is optionally registered as callback part of type registration
+Ease
+Renders halo as a star
+NLA Channels
+Use the speed vector pass to reduce AO samples in fast moving pixels. Higher values result in more aggressive sample reduction. Requires Vec pass enabled (for Raytrace Adaptive QMC)
+nl_NL
+Alt key pressed
+Limit movement around the Y axis
+Z Scale
+Actuator
+Motion Path for this element
+Slider Widget Colors
+Name of Vertex color layer
+Xnor
+Bone Group this pose channel belongs to
+Quad View Region
+Edge Split
+Noise algorithm - Voronoi Crackle: Voronoi tessellation with sharp edges
+Max Air Angular Velocity
+Use Bone Sketching
+Automatic keyframe insertion using active Keying Set only
+Colors
+Starting frame of range of paths to display/calculate (not for 'Around Current Frame' Onion-skinning method)
+Show script files
+Cloth simulation settings for self collision and collision with other objects
+Object to use as the environment map's viewpoint location
+The interpolation type for this curve element
+Vertically Open
+Show the expanded in the user interface
+Emit Object Location
+Toggle Widget Colors
+Rotation
+Current Transformation orientation
+Total number points for the curve or surface in the U direction
+Active Particle System Index
+Material Physics
+Pull
+List Item Colors
+Show a small rotating 3D axis in the bottom left corner of the 3D View
+Add-Ons
+Render face with texture
+Tilt Interpolation
+K
+Collection of particle systems
+Text editor space data
+Zoom
+Goal minimum, vertex weights are scaled to match this range
+When deforming bone, multiply effects of Vertex Group weights with Envelope influence
+F-Curve Sample
+Radius of eraser 'brush'
+Finnish (Suomi)
+Turbulent noise driven by the global current frame
+Raytraced reflection settings for a Material datablock
+Convert effector force into air flow velocity
+True when the Shift key is held
+Audio Sample Format
+Bold
+Vertex colors for a face in a Mesh
+Cursor
+Mouse/Trackpad Pan
+Display Paths of poses within specified range
+Info space data
+Duplicate Armature
+Settings for Bullet soft body simulation
+Name of the theme
+Collection of scene objects
+B-Bone Display Z Width
+Zoom using up/down on the device (otherwise forward/backward)
+Enter Edit Mode automatically after adding a new object
+Apply gravitation to point movement
+Info on current cache status
+Cone
+Lock Z Rotation Axis
+GLSL Extra Textures
+Starts player in a new fullscreen display
+Named Group
+Samplerate
+Children expanded in the user interface
+Border
+Armatures active bone
+Active Path Index
+Texture Type
+Amount of clumping
+Style
+Collection of render layers
+Show Restriction Columns
+Soft Body
+Drag effector weight
+Layers visible in this 3D View
+Top
+Quality of the simulation in steps per frame. (higher is better quality but slower)
+The constraint is applied in Pose Space, the object transformation is ignored
+View Rotation
+Gravitation
+Cardinal
+Dolly
+8 bit greyscale binary data
+Chroma Vectorscope
+Active bone group for this pose
+Repulsion Factor
+Object Constraints
+Filter Text
+Vertex group to control tangent
+Default builtin key configuration
+Show folders
+Page Down
+Elements
+View3D Zoom Modal
+Show Actuators
+Deletes smoke from simulation
+Filter File Extensions
+Control point selection status
+Left Handle Selected
+Draw Stretch
+Align rotation with the snapping target
+Cloth
+Show the name of the view's direction in each 3D View
+Display Filter
+Object does not restitute collisions, like a ghost
+Particle Velocity
+Relative time of key over hair length
+6
+Threshold for drawing outlines on geometry edges
+Lighting
+MPEG-4
+Delete
+MPEG-2
+Curve Edit
+Distance of the physics area
+Boid Settings
+Pixel resolution of the rendered environment map
+Goal maximum, vertex group weights are scaled to match this range
+Vertex Group Roughness 2 Negate
+Manipulator Rotate
+Limits
+Current Frame
+Project to Self
+Sticky texture coordinate location
+Transition
+Duplicate Texture
+Mask
+Description of the Function's purpose
+Generate voxels from a sequence of image slices
+Theme settings for the Node Editor
+Automatic time snapping settings for transformations
+Banking
+Texture Plugin Directory
+Mass
+Mist settings for a World data-block
+Show column
+Tool Widget Colors
+Clip Alpha
+Retarget
+Drag component proportional to velocity
+Blocking
+Mirror Colors
+Number of frames between ghosts shown (not for 'On Keyframes' Onion-skinning method)
+Bars Selected
+Use a minimum radial distance for the field's fall-off
+Edit Object
+Cineon
+Height
+Texture Factor
+Draw Wire
+Manipulate object centers only
+Custom color set to use
+Negate the effect of the density vertex group
+SL
+Enable Self Collision
+Correction
+Self Minimum Distance
+Keying set paths
+Invoke Region Preview
+Causes material data to be duplicated with the object
+Sample Distance
+Vertex Group Field
+Multiplier to make out-scattered light brighter or darker (non-physically correct)
+Object Selected
+Keyframe Selected
+Pose Bone
+Set sensor expanded in the user interface
+Theme Audio Window
+Strip Time
+Number of frames from start frame for influence to fade out
+Codec
+Speaker
+Image Generic
+3D Region
+Copy Scale
+Duplicate Surface
+Particle key for hair particle system
+Particle Edit
+Number of cone samples averaged for blurry refractions
+Keep from going through other boids
+Output image in DDS format
+Orig Height
+In Air
+Constraint was added in this proxy instance (i.e. did not belong to source Armature)
+OpenGL shading language shaders
+Render the stamp info text in the rendered image
+read only area of the face
+Exec Region Channels
+Smoke collides with every side
+Enable Collision
+The mouse button used for selection
+How strong a force must be to start effecting a boid on land
+Imperial
+Vertex Group Length
+SDL device - simple direct media layer, recommended for sequencer usage
+Pixel Aspect Y
+Shadow
+Show the active object's softbody point cache
+ZIP (lossless)
+Collection of Compositor Nodes
+Viewport Shading
+Mean red/green/blue scattering path length
+Ball inflating pressure
+Snap to nearest marker
+Vertical aspect ratio - for anamorphic or non-square pixel output
+Window Sliders
+Color ramp mapping a scalar value to a color
+Make hairs less puffy
+Active UV texture index
+Location of head end of the bone relative to its parent
+Display Texture
+Group Node
+Collection of meshes
+Continue
+Grease Pencil Smooth Stroke
+Set audio mixing buffer size to 4096 samples
+Transparent RGB and alpha pixels are unmodified
+Nearest Neighbor
+Gives a constant force along the force objects local Z axis
+Emit
+Bake the normals in tangent space
+Active Base
+Active UV texture
+Falloff Curve
+Sun intensity
+Collection of related sketches on a particular frame
+Vector Fonts
+Mesh Edit
+String Property
+Variables
+3D View Space
+Show the active object's particle point cache
+Cinema 24fps 2048x1080
+The default directory for rendering output, for new scenes
+Audio bitrate(kb/s)
+Font Size
+File
+Automatically converts all new tabs into spaces for new and loaded text files
+Search again from the start of the file when reaching the end
+Driver variable type
+Search term for filtering in the UI
+Show UV editing related properties
+Subdivision Surface
+Mipmaps
+Simplified Chinese (简体中文)
+Edge Length Text
+View2D
+Step Size
+All effector's weight
+GOP Size
+Bottom
+Color balance lift (shadows)
+True when this value can't be set to None
+The color of the lights specular highlight
+Free Run (Rec Date)
+How much the spring rest length can change after the elastic limit is crossed
+Nand
+Background Images
+Vertex Group Roughness 1 Negate
+Follow a boid or assigned object
+Collection of Shader Nodes
+Show Brush
+Save Preview Images
+Use Influence
+Add/Replace
+Enable direct editing of modifier control cage
+Overwrite characters when typing rather than inserting them
+Multitexture
+Full
+Modifier affecting the geometry data of an object
+Text to replace selected text with using the replace tool
+Particle Age
+Unique name used in the code and scripting
+Movie Strip
+Python Scripts Directory
+Global user preferences
+Proportional Size
+Location of the hair key in object space
+Window Manager
+Selectable
+Diffuse subsurface scattering settings for a Material datablock
+Air Personal Space
+Which axis to use for offset
+Sound
+Include Animation Data blocks with no NLA data. (NLA Editor only)
+Tree Type
+The index of particle system on the target object
+Noise algorithm - Voronoi F1-F2
+Autosplit Output
+Type of transition used to fade mist
+Logic Nand
+Enable this OpenGL light in solid draw mode
+Explode
+Tilt CW
+ID-Block
+Diffusion factor, the strength of the blurring effect
+Rate control: min rate(kb/s)
+Alter spring length to shrink/blow up (unit %) 0 to disable
+Object is made a particle system to display particles generated by a fluidsim domain object
+Alternate script path, matching the default layout with subdirs: startup, addons & modules (requires restart)
+channels
+Head Select
+Nearest Frame
+WPaint Auto-Normalize
+View3D Gesture Circle
+Active index in render layer array
+True when the Cmd key is held
+When an 'array/vector' type is chosen (Location, Rotation, Color, etc.), entire array is to be used
+Poly
+Name of the key map
+Roll bones to face the view
+Cycle the animated time within the action start & end
+Metaball Edit
+Use anti-aliasing for the 3D view (may impact redraw performance)
+Key Configuration
+NLA editor space data
+Sounds
+Noise formula used for turbulence
+Show Thumbnails
+Output video in AVI Raw format
+Shape Keys
+Cloth simulation settings for an object
+Transparency along the width of the strand
+Name of UV layer to override
+Custom animation player executable path
+Spring Vertex Group
+Luma Waveform
+Goal Damping
+French (Française)
+tool_settings
+3D Cursor
+Collection of lattices
+Display
+Center of mass
+The type of radius interpolation for Bezier curves
+Global approximate AA and SSS quality factor
+Type of data to take texture from
+Build
+Logic Xor
+Backdrop zoom factor
+Collection of worlds
+Python addons to be loaded automatically
+Proxy size 50%
+Intensity of the mist effect
+UV Editor
+Opacity
+JPEG 2000
+ID Type
+Wires
+Texture Face
+The default directory to search for sequence plugins
+Physics settings for a Material datablock
+Size of the turbulence
+Plastic
+Viscoelastic Springs
+Keyframe Insert Needed
+Threads Mode
+Exclude environment pass from combined
+Display an additional 'summary' line. (DopeSheet Editors only)
+Blend factor with sky
+BMP
+Obstacle simulation
+Relative friction coefficient in the in the X, Y and Z directions, when anisotropic friction is enabled
+7
+Enable naive vertex ball self collision
+Text Character Format
+Particle System
+Active section of the user preferences shown in the user interface
+Outliner
+Don't use any brush
+Pulldown Widget Colors
+Duplicate Lamp
+Spring rest length (factor of particle radius)
+Softens the edges of halos at intersections with other geometry
+None
+ko_KR
+Only Matching F-Curves
+Active Particle Target
+TIFF
+Keyboard
+Strand settings for a Material datablock
+"
+Material Index
+Targa Raw
+Name that will be used in exported files when format supports such feature
+F-Curve is not evaluated
+Texture Collection Rate
+Blend
+Stop ray marching early if transmission drops below this luminance - higher values give speedups in dense volumes at the expense of accuracy
+rect
+08 - Theme Color Set
+Sharp falloff
+Proxy Local
+Repulsion Distance
+Method used for combining strip's result with accumulated result
+Particle speed (absolute magnitude of velocity) mapped as 0.0-1.0 intensity
+Syntax Numbers
+Images get saved in 8 bits grayscale (only PNG, JPEG, TGA, TIF)
+Global Space
+Save the z-depth per pixel (32 bit unsigned int z-buffer)
+Curving of the noodle
+View Type
+Children Expanded
+Shape
+Background Image
+Dash
+Pass
+Snap to Pixels
+Engine
+Vertex Select
+Specular Exclude
+Color 2
+Brush strength
+Control point weight values
+Maximum memory usage in megabytes (0 means unlimited)
+Pivot around each object's own origin
+Island
+Softbody goal weight
+Exclude shadow pass from combined
+Method for driving added turbulent noise
+Sampled colors along line
+Offsets the number of the frame to use in the animation
+Maximum angular velocity on land (relative to 180 degrees)
+Start Frame
+Middle Mouse Paste
+Edge Seam
+Display UV coordinates from 0.0 to 1.0 rather than in pixels
+Find Text
+Inverse Gamma
+Smooth hairs
+Graphics driver and operating system settings
+How much density effects smoke motion, higher value results in faster rising smoke
+passes
+Boid rule name
+Maximum number of recently opened files to remember
+Path to property setting
+Level of detail in the added turbulent noise
+Screen
+Billboard Normal UV
+Selects the type of physical representation
+Clip End
+Creates a force along a curve object
+Time delay in 1/10 seconds before automatically opening top level menus
+Autosplit output at 2GB boundary
+Resolution Y
+Artificial buoyancy force in negative gravity direction based on pressure differences inside the fluid
+Gamma
+Light Cache
+Offset
+Voronoi F2-F1
+Hair keys are in global coordinate space
+Structs
+Particle system name
+Don't adjust roll
+Bevel
+UI Layout
+Movie Format
+Fast but not so effective compression
+Use linear workflow - gamma corrected imaging pipeline
+Delta
+Gravity
+Mist uses linear progression
+BSpline
+Type of element to snap to
+Set audio mixing buffer size to 32768 samples
+Show the Y axis line in perspective view
+Action End Frame
+Settings for input devices
+Joystick
+Window manager datablocks
+Left Handle Type
+Points U
+bl_description
+Collection of mesh edges
+Clip objects based on what's visible in other side views
+Object Grouped
+Backscattered Light
+Active grease pencil layer
+Animated Influence
+Atmosphere Inscatter
+Color of emitted light
+Lock Location
+Active Vertex Color Layer
+Spaces
+Properties of particle editing mode
+Area height
+Material nodes
+Collection of armature bones
+Resolution U
+Click
+Filter Files
+Display general information
+Bone Groups
+Overlay
+Muted
+Movie
+Auto Clamped
+Individual Origins
+Overlap
+Custom
+Particles
+Use Max
+Window
+File browser space data
+AVI JPEG
+Friction Coefficients
+Object base selection state
+Bone Pose
+Sequence strip in the sequence editor
+Display Background Images
+Name to use in scripted expressions/functions. (No spaces or dots are allowed. Also, must not start with a symbol or digit)
+User defined layer of floating pointer number values
+96 kHz
+Occlude
+Images are rendered in Image Editor
+States
+Saturation
+Location of this character in the text data (only for text curves)
+Users
+Scene Objects
+Goal Stiffness
+Audio Codec
+Collection of objects
+Type of NLA Strip
+Minimum distance to the camera for stars
+Main Scenes
+Clips to image size and sets exterior pixels as transparent
+Interpolation method to use for segment of the curve from this Keyframe until the next Keyframe
+Radius from the shaded sample to look for points within
+Layer of texture faces in a Mesh datablock
+Tangent
+Stamp Time
+Comb hairs
+24-bit Signed
+Show Handles
+Alpha
+Difference
+The frequency of the offset (1/total length)
+Layer Membership
+Render layer
+ro_RO
+Vector Coordinates
+Spring force
+Flare Boost
+Scopes
+Description of the item's purpose
+Camera Parent Lock
+Invert the axis of mouse movement for zooming
+Socket name
+M
+Enable diffuse subsurface scatting effects in a material
+Color Factor
+Noise algorithm - Cell Noise: Square cell tessallation
+For PoseBone paths, use the bone head location when calculating this path
+Max Land Speed
+Show linked objects to sensor/actuator
+Edit drivers
+F-Curve Modifier is the one being edited
+Channel Matrix
+Has Ghost Curves
+Threshold for adaptive sampling (if a sample contributes less than this amount [as a percentage], sampling is stopped)
+Selects which domain border will be treated as collision object
+Object that defines custom draw type for this bone
+Still Frame Only
+Invert tilt axis
+The name of the active key configuration
+Apply sun effect on atmosphere
+Spacebar
+Limit effectors to this group
+Keep paths from intersecting the emitter
+Input or output socket of a node
+Transform Channel
+Storage of a macro operator being executed, or registered after execution
+Sets the number of points on the star shaped halo
+Display the object's local bounding boxes only
+Goal (vertex target position) spring stiffness
+Boolean
+Cyclic U
+Cinema 24fps 4096x2160
+Images are saved with RGB and Alpha data (if supported)
+Cyclic V
+Indirect
+Show Points
+Speed
+Copy Location
+GLSL Lights
+resolution_x
+All available keying sets
+Specular Color
+Convert to logarithmic color space
+Show keyframes for active Object and/or its selected bones only
+Use Visual keying automatically for constrained objects
+Game Property
+Merged Region Size
+Material Halo
+Flare Seed
+No Gimbal Lock (default)
+Bending Const
+Null device - there will be no audio output
+Main Fonts
+Sensor
+Output image in Cineon format
+Set audio sample format to 64 bit float
+Whether to use maximum clipping value
+Display units in pairs
+Form factor scales the inertia tensor
+Filter Images
+Value to use for Ref, Spec, Amb, Emit, Alpha, RayMir, TransLu and Hard
+Draw UV edges anti-aliased
+Search string is sensitive to uppercase and lowercase letters
+Region Text Titles
+Flow Settings
+Texture Slot
+Enable debug visualization for obstacle simulation
+Wrinkle coefficient. (higher = less smaller but more big wrinkles)
+Action to take for gaps past the Active Action's range (when evaluating with NLA)
+Spring rest length is a factor of 2 * particle size
+Mist uses quadratic progression
+Base
+Enter Edit Mode
+Widget Label Style
+For Zmask, only render what is behind solid z values instead of in front
+Face Angle Text
+8
+Face Dot Size
+Grow
+Strips
+Vertex group to control roughness end
+Texture Slots
+Snap UVs to pixel locations while editing
+Border Minimum X
+Value
+Button5 Mouse
+Roll CCW
+Deprecation Warnings
+Source List Title
+Collection of fonts
+Effector weights for physics simulation
+2
+Input line for the interactive console
+;
+Soft body
+Display Lamp
+Tail Select
+Rotation in Quaternions
+Main MetaBall
+Right Alt
+Waveform Mode
+Audio samplerate(samples/s)
+Random
+Harmonic
+hr_HR
+Themes
+Texture scatting blend factor
+Selected File
+Cache AO results in pixels and interpolate over neighbouring pixels for speedup
+double
+Negate
+Mute this shape key
+Fgon
+RVO (rays)
+External file packed into the .blend file
+Causes text data to be duplicated with the object
+Include visualization of Speaker related Animation data
+Zoom factor
+Tweak Select
+Shape Match
+Spherical forcefield based on the charge of particles, only influences other charge force fields
+Active Boid Rule
+Active index in bone groups array
+IK stiffness around the X axis
+Go to assigned object or loudest assigned signal source
+Wait Timer (ms)
+The region relative vertical location of the mouse
+Mouse/Trackpad Rotate
+02 - Theme Color Set
+Show Control Curves
+Time taken in frames between shutter open and close
+Textured Solid
+Tail
+Lift Force
+The type of event, only applies to some
+Targets
+Main Texts
+Draw Axes
+Space data type
+Subsurface Scattering
+Mesh Vertex
+Max Slope
+Specular Intensity
+Smoke collision settings
+Cubic
+Set all state bits
+Action to take for gaps past the strip extents
+Neutral
+UV mapping, texturing and game engine data for a face
+Minimum value for clipping
+zh_CN
+Wheel Scroll Lines
+Shadow color in grey value
+The constraint is applied relative to the world coordinate system
+Icon File
+Theme Console
+Step Calculation
+Amount the strip contributes to the current result
+Shape Key Bezier Point
+Smoke doesn't collide with top and bottom sides
+Fastest and gives the most noise
+Source of input values for driver variables
+Show Keyframe Numbers
+Image opacity to blend the image against the background color
+Outline
+window_manager
+DDS
+Show key map event and property details in the user interface
+Bake ambient occlusion
+Long List
+Manual
+Kink
+Display Metaball
+View Location
+Radio Widget Colors
+Weights
+Cache of the worldspace positions of an element over a frame range
+Theme settings for the Text Editor
+Number of frames for Blending In/Out is automatically determined from overlapping strips
+Collection of Driver F-Curves
+Use SIMD QBVH
+UV/Image Editor
+Use degrees for measuring rotation
+Resolution of the voxel grid
+Physics Gravity
+bl_idname
+Name of the key configuration
+Agent Radius
+Keyed particles target is valid
+Use force fields when growing hair
+Point in the lattice grid
+The amplitude of the offset
+End Frame
+Lets halo receive light and shadows from external objects
+Pivot
+Maximum walkable slope angle in degrees
+Permeability
+User defined floating point number value in a float properties layer
+Render Result
+Objects nearer than this are not visible to map
+Pivot around active object
+Operator Node
+Local With Parent
+Blender RNA structure definitions
+Radius of bounding sphere and material physics
+Bezier
+Blend Type
+Original Perlin
+Active UV Texture
+Active Object constraint
+Armature-Relative Head
+F-Curve's settings cannot be edited
+7.1 Surround
+Fluid Mesh Vertex
+Long Key
+Do not show any ghosts
+Frame for absolute keys
+Wav
+Preview
+[
+ObData
+Emulate Numpad
+Theme settings for the Timeline
+Cell Size
+Clamp velocity to this minimum speed (except when totally still)
+Specify old mapping value in frames
+Type of texture data to display and edit
+Show ghosts for the specified frame range
+Radius for bevelling
+Maximal # solver steps/frame
+Copy Rotation
+07 - Theme Color Set
+Use object/global coordinates for texture
+If set to True, the panel shows a header, which contains a clickable arrow to collapse the panel and the label (see bl_label)
+Sequence Element
+Use rule when boid is flying
+Simplify Shadow Samples
+Deliver indirect lighting pass
+Particle Key
+Time since last step in seconds
+Properties
+Y Scale
+Minimum Radial Distance
+Sampled Points
+Theme Logic Editor
+Use Stars
+Manipulator Translate
+Brush steps
+Active Pose Marker
+F-Modifier
+N
+True when the Alt/Option key is held
+Decimate
+Use multi-sampled 3D scene motion blur
+Type of active data to display and edit
+Permanent deform
+Onion Skinning Settings
+Mode of automatic keyframe insertion for Objects and Bones
+Theme settings for bone color sets
+Scopes for statistical view of an image
+Push
+Show Seconds
+Logic Or
+Buffer Resolution
+Create a toon outline around the edges of geometry
+Regions
+Damped Track
+Active Bone Group Index
+Automatically select acceleration structure
+Specify a collision bounds type other than the default
+Auto-Clamped handle color
+Vertex Group Roughness End
+Sets the maximum number of logic frame per game frame if graphics slows down the game, higher value allows better synchronization with physics
+Control Point
+Particle count
+Turntable
+Use Weight Color Range
+Octree
+Environment Exclude
+Fuzziness while on collision, high values make collision handling faster but less stable
+Tweak
+Marker
+Shadeless
+Align handle color
+Mist
+Scene Render Layer
+Sequence editing data for a Scene datablock
+Structural Stiffness Vertex Group
+Meta Stack
+Duplicate F-Curve
+Show sound files
+Render layer name
+Index of active particle system slot
+Roll bone to original joint plane offset
+Filter Fonts
+Material Subsurface Scattering
+Tip
+Invalid
+Show Cache
+Delay
+Blend factor for SSS colors
+Fluid Group
+Causes F-curve data to be duplicated with the object
+Stationary object
+el_GR
+Compression method to be used
+Speaker datablocks
+B-Bone Ease In
+Relative Paths
+Mesh Int Property Layer
+Enable smoke to disappear over time
+Double Click Timeout
+Cell Noise
+Particle system has multiple point caches
+Human readable name
+The object that has the target particle system (empty if same object)
+Maximum acceleration on land (relative to maximum speed)
+Legacy
+Clip alpha below this threshold in the 3D textured view
+Display a preset button with the operators settings
+Force gets absorbed by collision objects
+9
+Noise method which is used for creating the high resolution
+Manipulator
+Select UVs that are at the same location and share a mesh vertex
+Shadow offset in pixels
+Bake directly from multires object
+Insert
+Wind effector weight
+DopeSheet Editor
+Entire Array
+Use smoke heat as texture data. Values from -2.0 to 2.0 are used
+Sequence Color Balance
+Disallow movement around the X axis
+Scenes
+Active KeyConfig
+Distance between two bones or objects
+Rate control: max rate(kb/s)
+Active file in the file browser
+Limit collisions to this group
+Nurbs weight
+Outline Selected
+Extrapolate the curve or extend it horizontally
+Right Handle
+Collection of mesh vertices
+Smooth the final stroke
+Current Transform Orientation
+F-Curve live filtering string
+Softness of the 'soft' falloff option
+Selection Mode
+Proportional Editing
+Collection of keying set paths
+Build 25% proxy resolution
+DBVT culling
+Armature Edit
+Show Datablock Filters
+A valid edit mode exists
+World Mist
+Default Value
+Full Screen
+Text in the line
+Quality
+A container referencing an existing Action
+Layer name
+Auto Start
+Visualization
+Show text files
+Draw faces colored according to the difference in shape between UVs and their 3D coordinates (blue for low distortion, red for high distortion)
+Snap Align Rotation
+Angle of Rotation for Axis-Angle rotation representation
+192 kHz
+From socket
+Nurb active U-lines
+Constraints that act on this PoseChannel
+Cyclic Strip Time
+Space Outliner
+Constraint has valid settings and can be evaluated
+Debug
+Pose Bones
+Show image files
+Goal maximum, vertex weights are scaled to match this range
+Puff
+Right Handle Type
+Include the name of the active cameras lens in image metadata
+Sky Color Space
+Include visualization of Armature related Animation data
+Character Index
+Pin (vertex target position) spring stiffness
+Open source frame player: http://djv.sourceforge.net
+Grab Pointer
+Bone is not able to be transformed when in Edit Mode
+Show linked objects to the controller
+Blend Distance
+Edited
+The mode used to apply the texture
+Locked Track
+File Browser
+Vertex weight group, to blend with basis shape
+The type of keyframe (for visual purposes only
+Obstacle Radius
+Drawing method used by the window manager
+Active Particle Target Index
+Front
+Enable starfield generation
+Particle datablocks
+Show an outline highlight around selected objects in non-wireframe views
+Zooms in and out based on vertical mouse movement
+Calculate sub-surface scattering in materials rendering
+Parent this node is attached to
+ar_EG
+Include the render frame as HH:MM:SS.FF in image metadata
+Line of text in a Text datablock
+Detail mesh sample spacing
+Active Theme Area
+Theme Widget Color Set
+Boid height relative to particle size
+Using 1/x
+Scene keying sets
+Show Sliders
+All Z
+Environment Color
+Position
+Buffersize
+Adapt To Speed
+Or
+World datablocks
+Effect Strip
+Group of ID properties
+Proxy size 75%
+Vertex Paint
+Hair Dynamics
+Stroke Points
+NLA Track is locked
+Which mesh elements selection works on
+Weight of rotation constraint for IK
+Always refresh image on frame changes
+Use horizon and zenith color for diffuse energy
+Extra margin around object for collision detection, small amount required for stability
+Collection of vertex groups
+Coordinates of the first handle
+Sky Blend Mode
+Mesh Edge
+Adjust simulation speed
+Bounding box of this object represents the computational domain of the fluid simulation
+Color balance gain (highlights)
+Normal Space
+Layers
+Spin CW
+Mesh Float Property Layer
+Buffer Resolution - decrease it to increase speed
+12 bit color channels
+Space Graph Editor
+Directory Path
+False when this property is an optional argument in an RNA function
+Framing Types
+Display Paths of poses within a fixed number of frames around the current frame
+Last selected point
+Cropping parameters for a sequence strip
+Min Air Speed
+Wavelet
+Color used for the surface of bones
+Window Managers
+Occlude objects with the environment color as they are further away
+Attenuation falloff strength, the higher, the less influence distant objects have
+Driven Selected
+Surface Edit
+Causes metaball data to be duplicated with the object
+Main Curves
+Japanese (日本語)
+Vertex Group Field Negate
+Collection of uv textures
+Enable simplification of scene for quicker preview renders
+String
+Randomized
+Retarget template bone chain to stroke
+Use the manipulator for movement transformations
+Command line prompt language
+How the rules in the list are evaluated
+Color of texture overlay
+Text Box
+Modifier for values of F-Curve
+Specify the number of cluster iterations
+Mass of the object
+React to force field physics settings in materials
+The window relative vertical location of the mouse
+YCbCr (ITU 709)
+Linear viscosity
+8x
+Nothing
+IK Z Limit
+Sensors
+Child Seed
+Tweak Middle
+Object represents a volume of fluid in the simulation
+Property is editable through RNA
+Theme settings for the Console
+Datablock from which the edited datablock is linked
+Particle
+Solo
+Mark controller for execution before all non-marked controllers (good for startup scripts)
+FFMpeg audio codec to use
+ZTransp
+Location (Object Space)
+IK Z Lock
+Display size for normals in the 3D view
+Use a tent filter for anti-aliasing
+Original IK solver
+Use velocities for automagic step sizes
+Multiplier
+Constraint Target
+Draw Repeated
+For RGB curves, the color that white is mapped to
+Noise algorithm - Voronoi F1: Returns distance to the closest feature point
+IK Y Minimum
+Pin Stiffness
+Cache Info
+No Ghosts
+Duplicate Material
+Nurbs order in the V direction (For surfaces only), Higher values let points influence a greater area
+Spanish (Español)
+Sets the dimension of the halo
+Vertex in a Mesh datablock
+Line Numbers Background
+Shadow Size
+Depth
+Rest Density
+Frame Server
+alert
+Meta Element
+Show actuators of all selected objects
+Calculate environment maps while rendering
+Motion Path Settings
+Interlaced
+Space type
+Display the operator log
+Show background image in front view
+Simple
+Storage of a sub operator in a macro after it has been added
+Collision Bounds
+Maximum value for clipping
+Transparency
+Armature-Relative Tail
+Display in the info window and support the redo toolbar panel
+FFMpeg codec to use
+Show frame numbers on Motion Paths
+Maximum allowed number of light inter-refractions
+Use a third buffer for minimal redraws at the cost of more memory
+Game engine logic brick to process events, connecting sensors to actuators
+Layer in multilayer image
+Depth Cutoff
+Mesh Edges
+Max Edge Length
+The number of lines scrolled at a time with the mouse wheel
+Root Texture Coordinates
+Tag Seam
+Visibility status
+Birth Time
+Mini Axis Brightness
+Environment
+Accuracy
+Driven
+Air Damping
+Use Vertex Buffer Objects (or Vertex Arrays, if unsupported) for viewport rendering
+Normal
+Keys
+The axis icon's size
+Spring Force
+Brushes
+Drag
+Emulate 3 Button Mouse
+Sculpt/Paint Overlay Color
+Collection of keymap items
+Shadow Y Offset
+Fuzzy
+Comb
+Theme settings for the 3D View
+End frame of the stored range
+Grid Subdivisions
+Layers bone exists in
+Base type for datablocks, defining a unique name, linking from other libraries and garbage collection
+Numpad 5
+face area
+Clip Start
+Numpad 2
+Tweak Action
+Numpad 0
+Use this files path when library linked into another file
+GL Texture Limit
+Only keyframes of selected F-Curves are visible and editable
+Numpad 9
+Crease
+Filter
+Minimum angles for IK Limit
+Scatter contribution factor
+Bones which are children of this bone
+Main Particle Settings
+Collection of particle settings
+Use modifier during rendering
+Numpad /
+Numpad .
+05 - Theme Color Set
+Read Only
+Include visualization of Particle related Animation data
+Numpad *
+Bone is not visible when in Edit Mode
+Width Fade
+Amount of rotation around velocity vector on turns
+Czech (Český)
+Display datablocks in all scenes
+Turbulent noise driven by the particle's age between birth and death
+Aerodynamics Type
+Best quality
+Use effector/global coordinates for turbulence
+Target particle systems
+Min Rate
+Distance to keep particles away from the emitter
+Type of information to display
+Limit movement around the Z axis
+NLA stack is evaluated when evaluating this block
+Apply puff to unselected end-points, (helps maintain hair volume when puffing root)
+Fgon edge
+Perspective
+Bone rotation around head-tail axis
+Pan/Zoom
+Add a new NLA Track + Strip for every loop/pass made over the animation to allow non-destructive tweaking
+No Auto-Snap
+Active Texture Face
+Node Backdrop
+Count
+Amount of influence F-Curve Modifier will have when not fading in/out
+Collection of points that make up this poly or nurbs spline
+Enable All Codecs
+Auto Blend In/Out
+Show Python Tooltips
+Show menus in the header
+Action datablocks
+Edit texture nodes from World
+Cross
+Particle target name
+Frame Map Old
+Collection of channel driver Variables
+Lower First
+Stamp Render Time
+Groups of the bones
+Vertex Group Velocity
+Cine-Flat 48fps 1998x1080
+Snap
+Extreme Alpha
+2x
+Group datablocks
+Overall sensitivity of the 3D Mouse
+Images are rendered in full Screen
+Activity culling is enabled
+2D cursor location for this view
+Metaball types
+F
+Show Linked to Actuator
+Square (HS + V)
+Node Groups
+Name Property
+Dither Intensity
+Reconstruction filter used for combining anti-aliasing samples
+Minimal
+Active Face
+Scripts
+Scale factor along the X for items in this (sub)layout
+Image Axis
+Orig Width
+Pose Head Position
+Cursor Y-Value
+Property is optionally registered as part of type registration
+IK stiffness around the Z axis
+NLA Tracks
+Constrain to Image Bounds
+Arrangement of the panels
+Length of second Bezier Handle (for B-Bones only)
+Median
+Indirect Exclude
+AO
+Node in a node tree
+Cast
+Save cache files to disk (.blend file must be saved first)
+Simplify AO and SSS
+Use key times
+de_DE
+Property has been dynamically created at runtime
+Ball Size
+Display sequence datablocks
+Read-only matrix calculated from the roll (armature space)
+Noise algorithm - Improved Perlin: Smooth interpolated noise
+Automatically start game at load time
+Generate point density from a particle system
+How much of effector force gets lost during collision with this object (in percent)
+Deliver AO pass
+Group that included Object should be a member of
+Cell Height
+Shear Stiffness
+Material Volume
+Maximum number of lines to store for the console buffer
+Include visualization of Mesh related Animation data
+Object Non-modal
+Maximum acceleration in air (relative to maximum speed)
+Pin ID
+Radar
+Render color of textured face as color
+Parts Y
+Parts X
+Collection of F-Curve Modifiers
+Verts Per Poly
+Lock to Cursor
+Theme Image Editor
+Graph Editor 2D-Value cursor - Y-Value component
+Automatically merge vertices moved to the same location
+Stencil
+Lock strip so that it can't be transformed
+Vertex Group Rotation
+Djv
+Use a quadratic filter for anti-aliasing
+Calculates environment map only once
+Node Links
+The number of subdivisions between grid lines
+Filter Folder
+use images in the order as they are recorded
+Collection of libraries
+Use selection as the pivot point
+Auto Snap
+The original matrix of this object before it was duplicated
+The unit system to use for button display
+Limit selection to visible (clipped with depth buffer)
+Type of field
+float_array
+Root falloff
+The quality of the anisotropic filtering (values greater than 1.0 enable anisotropic filtering)
+Dodge
+Active Vertex Group Index
+Method used for determining what ghosts get drawn
+Proportional Editing Objects
+Parent
+Particle dupliobject name
+Theme Widget State Color
+Tilt CCW
+Mirror Intensity
+Object
+Include visualization of Lamp related Animation data
+Object Location
+select_end
+FrameCycler
+Joint
+Backdrop X
+Backdrop Y
+Use Instances
+Y Rotation
+Nor
+Addon
+Anti-Aliasing Samples
+frames_skipped
+Stamp Lens
+Make hairs more puffy
+Offsets image horizontally from the view center
+Negate the effect of the roughness 2 vertex group
+Invoke Screen
+A square showing Hue/Saturation, with Value slider
+NLA Track
+Outer Thickness
+Format of Time Codes displayed when not displaying timing in terms of frames
+Display Node
+Boid will fight this times stronger enemy
+Custom Color
+P
+Negate the effect of the rotation vertex group
+Select Tail
+Settings for boid physics
+Options for this operator type
+Mouse Y Position
+Input properties of an Operator
+Fixed
+Current windowmanager and data context
+Collection of actions
+Tab Width
+Theme 3D View
+Render
+Auto Keyframe Insert Available
+Grid Scale
+Number of undo steps available (smaller values conserve memory)
+Show background image in bottom view
+Theme Graph Editor
+Surface
+Flash
+Collision
+Grid Lines
+Pre Roll
+Strand
+The transformation of the target bone is evaluated relative its local coordinate system, with the parent transformation added
+Disables non-planer quads being triangulated
+Particle Brush
+Smoke doesn't collide with any border
+Ghost frames on either side of frame
+Frame
+Select
+ID-Block representing source data, currently ID_SCE (for Dopesheet), and ID_SC (for Grease Pencil)
+Index
+Functions
+03 - Theme Color Set
+Built-In Function
+Display objects name and frame number in 3D view
+Custom text to appear in the stamp note
+Cameras
+Noise algorithm - Voronoi F4: Returns distance to the 4th closest feature point
+Estimated scale matrix
+Overall stiffness of structure
+State
+Camera
+Distance between key frames
+Image Painting
+Object is made a fluid control mesh, which influences the fluid
+Draw image with RGB colors
+Build 100% proxy resolution
+Space Type
+Transformation
+Method of calculating the steps through the volume
+Material slot name
+Number of frames between cached frames
+Repulsion is a factor of stiffness
+Edge spring friction
+Face Area Text
+Frame Map New
+Media Play/Pause
+Mux Rate
+Show background image in all views
+Slider Max
+Every Point
+Stub RNA type used for pointers to unknown or internal data
+Number of indirect diffuse light bounces
+Clip Min X
+Clip Min Y
+Link
+Record animation to fcurves
+Object removes fluid from the simulation
+The number of times this object is repeated with respect to other objects
+Line
+Method used to define which Group-name to use
+Use Material Force Field
+Multi constraint, stateful IK solver
+Texture nodes
+Locked
+Filebrowser Parameter
+Path to an image editor
+Weights for the vertex groups this point is member of
+Insert keyframes based on 'visual transforms'
+Armatures
+Nabla
+Mesh String Property
+Collection of action groups
+Keep path lengths constant
+The type of tilt interpolation for 3D, Bezier curves
+Creates a force that dampens motion
+Disable simulation of linear motion along the Y axis
+Green
+Layer is selected for editing in the DopeSheet
+Voronoi F2
+Voronoi F3
+Active F-Curve Modifier
+Cycles
+Margin
+Voronoi F4
+Theme settings for the Image Editor
+Face Dot Selected
+Damping of cloth velocity. (higher = more smooth, less jiggling)
+GLSL Color Management
+Prompt
+Length of first Bezier Handle (for B-Bones only)
+Theme settings for style sets
+Ctrl
+Show intermediate values for the driver calculations to allow debugging of drivers
+Apply this and all preceding deformation modifiers on splines' points rather than on filled curve/surface
+Vertex indices
+Lens angle (mm) in perspective view
+Back
+German (Deutsch)
+Color of light scattered out of the volume (does not affect transmission)
+Build free run time code index
+Extrapolation
+Theme settings for Info
+Collection of metaball elements
+Use face normal to rotate object, so that it points away from the surface
+Lens
+Otherwise menus, etc will always be top to bottom, left to right, no matter opening direction
+Particle Dupliobject Weight
+Use textures for drawing international fonts
+Use light for face
+The edge flag to tag when selecting the shortest path
+Vinterlace
+Cycle the images in the movie
+Display Z Axis
+Reflectivity
+Window Draw Method
+Set audio sampling rate to 44100 samples per second
+Causes particle systems to be duplicated with the object
+Scripts Window
+The space where the panel is going to be used in
+SMPTE (Compact)
+Automatically merge nearby keyframes
+Fast in high-contrast areas
+YCC
+Deliver object index pass
+Bake shadows
+Continuous Grab
+Alive State
+Input
+Adaptive
+Single texture face materials
+Color Ramp Element
+Hue
+Error tolerance (low values are slower and higher quality)
+Transforms include effects of constraints but not parenting/restpose
+Collision Settings
+Collection of cameras
+Command line prompt
+Cache file path
+Object Space
+Driver
+End size of strands in pixels or Blender units
+Weighted result of strip is added to the accumulated results
+NLA Track is selected
+Quaternion
+DOC BROKEN
+19 - Theme Color Set
+Debug State
+Active Keying Set used to insert/delete keyframes
+Lock Rotations (4D)
+Sets the audio output device
+Channels to display when drawing the histogram
+Displays bit depth of full screen display
+Sky Blend
+Reflection
+Vertex group to control roughness 1
+Bake Emit values (glow)
+Language use for translation
+Atmosphere Distance Factor
+Emit Object Space
+Motion Path Points
+IK Solver
+F-Curves
+Semantic interpretation of the property
+Partial overlay on top of the sequencer
+Unborn
+Effect in full or only positive/negative Z direction
+Format of the source data set to render
+Space UV Editor
+Solid Lights
+F1
+F2
+F3
+F4
+F5
+F6
+F7
+Fonts Directory
+Single ASCII character for this event
+Invert x Axis
+Allow boids to move in air
+Zoom Style
+Library
+Sky related settings for a sun lamp
+Inherit Rotation
+Disable Stereo and Dome environments
+KeyConfigs
+IK Stretch
+Voronoi F1
+Rigid Body
+operator_context
+Rotation Units
+Defines the structure of the menu in the UI
+idp_array
+XYZ velocity mapped to RGB colors
+Editmode
+Particle Location
+Tabs as Spaces
+Region Background
+Render Layers
+Stiff viscosity
+Scale Matrix
+Pinned
+Sequence Editor
+Vertex Normal
+Display current image regardless of object selection
+Display Lattices
+Density
+Exclude raytraced refraction pass from combined
+Charge effector weight
+Limit colliders to this Group
+Square (SV + H)
+Space currently being displayed in this area
+Show frame number beside the current frame indicator line
+Face
+Normalized quaternion rotation
+Proportional Editing enabled
+Vector handle selected color
+Scope region background color
+Show font files
+Wave
+Stickness
+Vertex Groups
+The time to animate the view in milliseconds, zero to disable
+Number of times this datablock is referenced
+Source Path
+Forcefield based on a texture
+Lattices
+Object used as the smoke simulation domain
+Parameters defining which layer, pass and frame of the image is displayed
+Vertex Size
+Italian (Italiano)
+Physics Type
+Ghost
+Audio Device
+Display Scene
+Limit Scale
+Enable Dome environment
+Vertex Group Kink Negate
+Radial Falloff Power
+Value Sliders
+collection
+Meta Elements
+Q
+Display Transforms
+Texture Time Out
+Output image in TIFF format
+Key Map
+Navigation mesh
+Fade effect using the built-in default (usually make transition as long as effect strip)
+Include visualization of ShapeKey related Animation data
+Manual adjust
+Space User Preferences
+NLA Track is not evaluated
+Use rule when boid is on land
+Anisotropic Filter
+Red Green Blue
+Radiance HDR
+Active object base in the scene
+User defined layer of integer number values
+Object Mode
+Maximum height between grid cells the agent can climb
+Texts
+Sort the file list by extension
+Settings for filtering animation data
+Number of horizontal pixels in the screen
+Path to the .blend file
+Converts texture RGB values to intensity (gray) values
+Different styles of displaying the color picker widget
+Initial state when the game starts
+Nurbs order in the U direction (For splines and surfaces), Higher values let points influence a greater area
+Show sliders beside F-Curve channels
+Fisheye
+Show View Name
+Sequencer and Image Preview
+Fake User
+Video Sequence Editor
+Struct Definition
+The directory for storing temporary save files
+Record Animation
+F-Curve Modifier will not be evaluated
+Full Render
+Only one side is rendered, with Z axis pointing in direction of image
+Show ghosts from around the current frame
+Display Channel
+Automatically switch between orthographic and perspective when changing from top/front/side views
+Print debug information for this property
+Update simulation with cache steps
+Relationship Lines
+RNA Path to property affected by F-Curve
+Median Point
+Mesh datablocks
+Sets angular index of refraction for raytraced refraction
+Node Socket type
+Outliner space data
+Shadow X Offset
+Amount of residual error in Blender space unit for constraints that work on position
+Make diffuse shading more similar to shading the surface
+Scale textures for the 3D View (looks nicer but uses more memory and slows image reloading)
+Draw white edges with black outline
+UV selection and display mode
+No
+Show linked objects to the actuator
+Key Config
+Pressure
+Render Data
+Quaternion Rotation
+Multiply
+Control point for envelope F-Modifier
+Proportion of original image source pixel lines to sample
+Avoid Collision
+Snap to volume
+Starting frame of range of Ghosts to display (not for 'Around Current Frame' Onion-skinning method)
+Automatically determine the number of threads, based on CPUs
+Curve mapping to map color, vector and scalar values to other values using a user defined curve
+Run python while editing
+Selects the collision type
+Active Vert/Edge/Face
+Tessellation level - check the generated mesh in wireframe mode
+Register
+Transform Markers
+Include visualization of Scene related Animation data
+Index number of cache files
+Text Highlight
+Halo particle effect settings for a Material datablock
+MPlayer
+Previous Particle Location
+Recent Files
+Legacy tracking constraint prone to twisting artifacts
+Edges receive a lift force when passing through surrounding media
+Optional region type keymap is associated with
+Output image in JPEG 2000 format
+Self Collision
+Enable bending constraints
+Theme DopeSheet
+Layer
+Drag Threshold
+Factor Rest Length
+Which style to use for viewport scaling
+Data to derive color results from
+3D cursor location for this view (dependent on local view setting)
+Nested
+MultiLayer
+Display Curve
+Disk Cache
+Transform markers as well as strips
+mode
+Target object for multi-target constraints
+Multiplier for the material's density
+FPS Base
+Grease Pencil Simplify Stroke
+Edit all markers of the same group as one
+Harmonic effector weight
+Location of head end of the bone relative to armature
+Texture coordinates from root particle locations
+Stereo Options
+Disallow movement around the Z axis
+Number of vertical tiles to use while rendering
+Random Friction
+Specifies an offset in the flare seed table
+Horizon brightness
+Language
+Sound Clip
+Light used for OpenGL lighting in solid draw mode
+Screen datablocks
+NLA Editor
+Vertex group to control velocity
+input_count
+Only hold last frame
+Elasticity of collisions
+Sky Texture
+Use SIMD SVBVH
+Sort alphabetically
+New Handles Type
+Display only objects which will be rendered
+Noise
+The time (in ms) for a double click
+matrix
+channel_id
+Only render the active layer
+Material
+Standard Modal Map
+No TC in use
+Output image in multilayer OpenEXR format
+Empty
+Always
+Enable filtering of files
+Template
+When the camera is locked to the view and in fly mode, transform the parent rather than the camera
+Show Sensors
+Auto handle color
+Custom Warp Mesh data file
+Audio Channels
+Available as GameObject attributes in the game engine's python API
+Offset Y
+Min Region Size
+Pre-calculate the raytrace accelerator and render raytracing effects
+For multires, show low resolution while navigating the view
+Active curve spline
+Strength of sky shading exponential exposure correction
+Print Performance to Console
+Power of Fresnel for mirror reflection
+Default binary voxel file format
+Copy Transforms
+Draw alpha transparency channel
+4x4 bone matrix relative to armature
+Edge spring stiffness when longer than rest length
+When true the format is a movie
+Read cache from an external location
+Object Index
+Print warnings when using deprecated features in the python API
+Option Widget Colors
+Auto Depth
+Goal Minimum
+Display size for proportional editing circle
+Point
+NLA Strip
+Strokes
+Lock editing of scale in the interface
+Sensor name
+Point in a shape key
+Dutch (Nederlandse taal)
+Only Objects in Group
+The shininess of the reflection (values < 1.0 give diffuse, blurry reflections)
+Default relative path option for the file selector
+Proportional editing object mode
+Sampled animation data
+Output image in PNG format
+Owner Space
+Align the transformation axes to the selected objects' local space
+If this is set, the panel gets a custom ID, otherwise it takes the name of the class used to define the panel. For example, if the class name is "OBJECT_PT_hello", and bl_idname is not set by the script, then bl_idname = "OBJECT_PT_hello"
+Lock Rotation (4D Angle)
+Overdraw Sketching
+Pause
+Maximum speed in air
+Backdrop Y offset
+Ellipsoid
+Separate Units
+Object is a fixed obstacle
+scene
+Load user interface setup when loading .blend files
+'Viscosity' inside collision target
+Bake everything
+Lamp
+Negate the effect of the length vertex group
+Invert z axis
+Armature datablocks
+Shadow size in pixels (0, 3 and 5 supported)
+Rasterized cell size
+Collection of timeline markers
+Local
+Old style zoom, continues while moving mouse up or down
+Tooltips
+Edge Collision
+Fluid rest density
+Blender Voxel
+Bezier curve point with two handles
+Runtime
+Regular key pressed as a modifier
+UV Layer
+Initial Velocity
+Sources of input data for evaluating this variable
+Timeline
+Game engine related settings for the object
+Hide Recent Locations
+Include the name of the active camera in image metadata
+Colored Constraints
+Particle Hair Key
+Y Location
+Exec Region Window
+Stereographic techniques
+UV editor settings
+General movement damping
+Estimate matrix
+Global Pivot
+IK X Lock
+Keep UV and edit mode mesh selection in sync
+Vector Handle
+Number of frames from start frame for influence to take effect
+int_array
+Key velocity
+Negate the effect of the roughness 1 vertex group
+Output Path
+Image User
+AutoMerge Editing
+Flare Subsize
+Handle 2 Location
+Edge UV Face Select
+Clamp To
+NDOF
+The transformation of the target is only evaluated in the Pose Space, the target armature object transformation is ignored
+Particle systems emitted from the object
+Wheel Up
+Linear falloff
+Show the status of cached frames in the timeline
+R
+Keyframe
+Blender Render
+Noise Basis
+How the texture effect is calculated (RGB & Curl need a RGB texture else Gradient will be used instead)
+Display Grid Floor
+Transmission Color
+Parameters defining how an Image datablock is used by another datablock
+Spline point without handles
+8 bit color channels
+Collapse summary when shown, so all other channels get hidden. (DopeSheet Editors Only)
+Draw Z-buffer associated with image (mapped from camera clip start to end)
+Filter Size
+Density is constant within lookup radius
+Clear Images before baking
+Animation Channels
+Snap closest point onto target
+Cloth Collision Settings
+Sequence Plugin Directory
+Size of widget handles as percentage of widget radius
+Friction
+Main Speakers
+Offset in the random number table, to get a different randomized result
+Keep Lengths
+Vertex Group Element
+Snap to faces
+Case Sensitive Matches Only
+Time delay in 1/10 seconds before automatically opening sub level menus
+RNA structure definition
+F-Curve Modifier is only applied for the specified frame range to help mask off effects in order to chain them
+Collection of pose bone constraints
+Angle
+Gives a spiraling force that twists the force objects local Z axis
+AAC
+The constraint is applied relative to the local coordinate sytem of the object
+Separate color channels in preview
+Absolute Density
+Target Particle System
+When transforming keyframes, changes to the animation data are flushed to other views
+Markers
+Amount of pixels you have to drag before dragging UI items happens
+Manipulator Hotspot
+Nurb U-lines
+Output video in Ogg format
+double_array
+Shape matching threshold
+Drag component proportional to the square of velocity
+Inner Selected
+Show Playback FPS
+Interpolation
+Space File Browser
+Hold LMB Open Toolbox Delay
+Vertex Group Weight
+Timeline editor space data
+Main Screens
+Improved Perlin
+The value this event translates to in a modal keymap
+Theme settings for widget state colors
+Reversed
+Mesh Float Property
+Sky Exposure
+Align each axis to the Euler rotation axis as used for input
+Show Frame Numbers
+Action Editor
+17 - Theme Color Set
+Soft body simulation settings for an object
+Mesh Vertices
+32-bit Float
+Invisible
+Number of horizontal pixels in the rendered image
+=
+Handle types
+Stricky texture coordinate
+Max Land Angular Velocity
+Struct definition used for properties assigned to this item
+RGB to Intensity
+Mapping settings
+Name of Shape Key
+Shadow Alpha
+Radius Interpolation
+Pulse True Level
+Bounces
+Exec Region Preview
+Edge Draw Type
+Color Management
+Raytrace
+Forcefield depends on the speed of the particles
+Mode
+Stiffness
+Radial
+Noise Method
+Number of seconds between each run of the GL texture garbage collector
+Gravitational constant used for physics simulation in the game engine
+Logic Editor
+Text Selected
+Point Caches
+No compression
+Vertex coordinates are stored localy on each primitive. Increases memory usage, but may have impact on speed
+Edge Crease
+Invert rotation Axis
+Use Ambient Occlusion to add shadowing based on distance between objects
+Frame that modifier's influence starts (if Restrict Frame Range is in use)
+active_strip
+Lock
+Collection of window managers
+Cine-Flat 24fps 1998x1080
+Sort by extension
+All Views
+Enum Item Definition
+Button 4
+Button 5
+Button 6
+Button 7
+Button 1
+Button 2
+Maximum angles for IK Limit
+Render Pass
+Selected Text
+Whether to draw the sound's waveform
+Data Path
+Enum Flag
+Soft Light
+Define forces for vertices to stick to animated position
+Sample every pixel of the image
+Invert roll axis
+Goal
+Dissolve Speed
+Textbox X Offset
+Sky turbidity
+A random rule is selected for each boid
+OpenAL device - supports 3D audio, recommended for game engine usage
+Console Input
+Invert the level(output) of this sensor
+Memory Cache Limit
+Point Cache List
+Motion Path settings for visualisation
+Endpoint V
+The rotation step for numerical pad keys (2 4 6 8)
+Linear and angular physics
+NLA Strip is selected
+The channel number shown in the image preview. 0 is the result of all strips combined
+Shrink
+Limit movement around the X axis
+Draw Action
+Display debug reporting info
+Collection of action fcurves
+Bone inherits scaling from parent bone
+Lock current frame displayed by layer
+Type of stretch to draw
+Friction/damping with self contact
+Undo
+ZYX Euler
+Scaling factor for the background image
+vBVH
+Axis-Angle Rotation
+Bone deformation weight (for Envelope deform only)
+Interaction radius is a factor of 4 * particle size
+Shape key to use the rest spring lengths from
+Use this texture as a blending value on the next texture
+Deliver environment lighting pass
+Show Python references in tooltips
+Theme NLA Editor
+Above-Below
+Transition Strip
+NLA Strips on this NLA-track
+Draw black edges
+Removes the operator from search results
+Light Override
+Only include channels from Objects in the specified Group
+Compositing
+128
+Random Damping
+Effector Weights
+Location of tail of the channel's bone
+Frame Number
+Image displayed and edited in this space
+Vertex group to control roughness 2
+Show background image in camera view
+How incompressible the fluid is
+Point select mode
+Panel containing UI elements
+Stamp Date
+Inverts the values of the texture to reverse its effect
+Smoke flow settings
+Active Particle System
+Channels
+Type of this region
+Intensity
+Audio Strip
+Blending
+Enable this objects as a collider for physics systems
+Tracking along a single axis
+Weight used by the Subsurf modifier for creasing
+Duplicate Mesh
+Keying Set Info
+Map Type
+Use BLI K-Dop BVH.c
+Amount of turbulence/rotation in fluid
+Add light and shadow
+Random falloff
+Script
+Edge selection mode
+Auto Handle
+Collection of bone groups
+Vertex Group Roughness 1
+Sets minimum X value to for the render border
+Coordinates of the left handle (before the control point)
+Source
+Output Node
+Groups of Pose Channels (Bones)
+Hide recent locations in the file selector
+Particle editing brush
+Show the ground plane grid in perspective view
+Snap Target
+Scripted Expression
+Shadow Brightness
+Noise algorithm - Blender original: Smooth interpolated noise
+Rot error
+Amount of damping during particle collision
+Save Versions
+Anti-aliasing
+Endpoint U
+Sub-Target
+Settings
+Use international fonts
+Show Mini Axis
+Previous Particle Velocity
+Edge in a Mesh datablock
+Function Definition
+Physics engine used for physics simulation in the game engine
+Softbody
+Theme settings for the DopeSheet
+Vertex Group Size
+Add the file format extensions to the rendered file name (eg: filename + .jpg)
+Collection of KeyConfigs
+Active Element
+Wipe
+Deliver raytraced reflection pass
+Fade paths and keys further away from current frame
+Threshold for adaptive sampling. If a sample contributes less than this amount (as a percentage), sampling is stopped
+Control point spring strength values
+Extends by repeating edge pixels of the image
+File is Saved
+Region Type
+OpenEXR
+Auto Keying
+S
+Vector
+Texture Mapping
+Cache name
+Smoke
+Boid State
+Space Node Editor
+Multiresolution
+No Preset
+Maximum allowed number of light inter-reflections
+Final key configuration that combines keymaps from the active and addon configurations, and can be edited by the user
+Allow Negative Frames
+Bending
+Group to override all other lights in this render layer
+Position solver iterations
+Exists
+Lock editing of 'angle' component of four-component rotations in the interface
+Deliver shade-less color pass
+Rear-Truncated
+RNA
+Has Minimum
+Strip has no influence past its extents
+Lennard-Jones effector weight
+Screens
+Window Background
+current_character
+Meta
+Theme settings for the Logic Editor
+Floating-Point Property
+Structural Stiffness
+Particle system settings
+Codec settings for OpenEXR
+Axis
+Forces the current Scene to be displayed in all Screens
+Indicates that a keymap is used for translate modal events for an operator
+Environment map created by the renderer and cached for subsequent renders
+Rotational Difference
+Goal Vertex Group
+Use shaders for GLSL rendering
+Multiple Springs
+Emitter Distance
+Edit Bone
+Indicates that a keyconfig was defined by the user
+Include channels from objects/bone that aren't visible
+Align dynamic game objects along the surface normal, when inside the physics distance area
+Frames Per Second
+Set the distance between the eyes - the camera focal length/30 should be fine
+Draw Other Objects
+Mouse Previous Y Position
+Flare Size
+Align the transformation axes to average normal of selected elements (bone Y axis for pose mode)
+Maintain Volume
+Display mode for the file list
+Max Step
+Activate FALSE level triggering (pulse mode)
+Active Render
+Size Y
+Size X
+Display splash screen on startup
+Size Z
+Grease Pencil Layer
+X/Y coordinates of the curve point
+Use a minimum distance for the field's fall-off
+Show 2D cursor
+Frame Locked
+Active
+Horizontal
+Editing
+Factor for how much surrounding objects contribute to light
+Blend In
+Sets the global starting frame of the movie/sequence, assuming first picture has a #1
+bg_BG
+The size of the occlusion buffer in pixel, use higher value for better precision (slower)
+Horizontal aspect ratio - for anamorphic or non-square pixel output
+4x4 matrix, before constraints
+Minimum Distance
+End frame of range of Ghosts to display (not for 'Around Current Frame' Onion-skinning method)
+Particles generated by the particle system
+Region Text Highlight
+Align
+zh_TW
+Overwrite existing files while rendering
+Cylinder
+How many frames to fade
+Driver type
+World
+Theme settings for user interface elements
+Bending Stiffness
+Draw other selected objects that share the same image
+Show dashed lines indicating parent or constraint relationships
+And
+Bevel Radius
+Extrapolated
+Force
+Active Brush
+Distance will be used to attenuate shadows
+Method used to adjust the roll of bones when retargeting
+Form Factor
+Scopes to visualize image statistics
+Number
+Shade Top
+Number of frames to render ahead during playback
+High quality interpolation, but slower
+Current view matrix of the 3D region
+Handle 1 Location
+Vertex Group Density
+Active Frame
+IK Y Limit
+Blending to inelastic collision
+Enable high resolution (using amplification)
+Simulation starts on this frame
+Properties to set when the operator is called
+Result of rendering, including all layers and passes
+iTaSC
+Mesh String Property Layer
+Tweak Left
+True if this map is ready for use, False if it needs rendering
+X Scale
+Bone in an Armature datablock
+Output image in Targa format
+Stamp Sequence Strip
+F-Curve Modifier's panel is expanded in UI
+Build 50% proxy resolution
+An object duplicate
+Start Offset
+Items
+Fluid simulation settings for an object taking part in the simulation
+Set audio mixing buffer size to 8192 samples
+Material Strand
+Inflow
+Sort
+Relative Key
+Motion Paths
+Return
+Stiffness defines how much of the element to fill
+Detail mesh simplification max sample error
+Meta Strip
+Bake Alpha values (transparency)
+Memory cache limit in sequencer (megabytes)
+Input configuration, including keymaps
+Select the type of Framing you want
+Animation data for this datablock
+Raytracing
+Key Map Item
+Split quads to give the least distortion while baking
+Show overexposed areas with zebra stripes
+1024
+Bias towards faces further away from the object (in blender units)
+Strip time is controlled by an F-Curve rather than automatically determined
+Bake Location
+sr_RS
+Panel
+Main Libraries
+Edit Edit
+Get away from assigned object or loudest assigned signal source
+Darken
+Active index in vertex group array
+Average Separation
+F-Curve Modifiers
+RNA type used for pointers to any possible data
+Space Image Editor
+UV Selected
+Handle 1 Type
+Choke
+Use Simplify
+Maximum
+YZX Euler
+No Self
+Helicopter Mode
+Rotation in Eulers
+On Cage
+Bone that defines the display transform of this custom shape
+Main Node Trees
+Undo Steps
+Cube Map
+Point cache for physics simulations
+Interactive python console
+Use environment map with six cube sides
+Show .blend files
+Kill Particles
+Sets maximum X value for the render border
+Only Seconds
+NLA Tracks (i.e. Animation Layers)
+Timer Property
+Z Rotation
+Ensure all bone-deforming vertex groups add up to 1.0 while weight painting
+Rigid to Soft Body
+Lock to Object
+Threshold
+Enable sorting of faces for correct alpha drawing (slow, use Clip Alpha instead when possible)
+Occlude Geometry
+Causes surface data to be duplicated with the object
+Use the images alpha values clipped with no blending (binary alpha)
+Hold Forward
+Set Controller state index (1 to 30)
+Amount of light that gets scattered out by the volume - the more out-scattering, the shallower the light will penetrate
+Lock Horizon
+Ignore Layers
+Object Matrix
+Pixel Aspect X
+Filename
+Use Ambient Occlusion
+The transformation of the target is evaluated relative to its local coordinate system
+The region where the panel is going to be used in
+BW
+Bake Specular values
+Tool
+Margin Column
+Maximum distance from active object to other object (in blender units
+Final transformation value of object or bone
+Group Name
+Proxy parameters for a sequence strip
+fr_FR
+Kill collided particles
+Disable simulation of angular motion along the Y axis
+Collision Margin
+SMPTE timecode showing minutes, seconds, and frames only. Hours are also shown if necessary, but not by default
+bl_use_preview
+Draw Faces
+Vertex Group Rotation Negate
+\
+New Window
+Turbulent noise driven by particle velocity
+Lock Rotation
+Color Source
+Print state debug info in the game engine
+Location of head of the channel's bone
+Timer
+Output video in Xvid format
+Enable raytraced reflections
+Image Preview
+Optional space type keymap is associated with
+Use ramps for GLSL rendering
+Motion Samples
+Vectorscope Opacity
+Element defining a color at a position in the color ramp
+All Action Keyframes
+Automatic keyframe insertion for Objects and Bones (default setting used for new Scenes)
+Align Object To
+Welding threshold: distance between nearby vertices to be considered equal => set to 0.0 to disable welding test and speed up scene loading (ok if the mesh has no duplicates)
+Limit
+T
+Diffuse Color
+Release
+User defined string text value in a string properties layer
+Histogram for viewing image statistics
+Scroll Widget Colors
+General media friction for point movements
+Lock Y Rotation Axis
+Set audio mixing buffer size to 1024 samples
+Draw the image repeated outside of the main view
+Mesh Int Property
+Noodle curving
+Unknown Type
+Add & Replace
+Border Collisions
+Add children to form a compound collision object
+Influence
+Show high resolution (using amplification)
+Collection of sounds
+Use Bone Heads
+Actuator to apply actions in the game engine
+Mp3
+Go to closest enemy and attack when in range
+Type of range to show for Motion Paths
+Use trackball style rotation in the viewport
+32768
+Overwrite
+Duplicate Particle
+32-bit Signed
+Scale
+Expression to use for Scripted Expression
+Pre-calculate the shading information into a voxel grid, speeds up shading at slightly less accuracy
+Parameters
+Material Mode
+Avoid
+Cache is outdated
+File Browser Buttons
+Actor
+Bone Group Index
+Toolbox Column Layout
+Show the frames per second screen refresh rate, while animation is played back
+Image Editor
+Mesh Vertex Sticky Texture Coordinate
+Vertex Weight Proximity
+Average Spring length * Ball Size
+Renders rings over halo
+Offset in the random number table for child particles, to get a different randomized result
+Auto Keying Mode
+B-Bone Segments
+Time in 1/10 seconds to hold the Left Mouse Button before opening the toolbox
+Visible Layers
+File format to save the rendered images as
+Enable view navigation within the camera view
+Show background image in top view
+Sun brightness
+Closest
+Make this curve or surface a closed loop in the U direction
+Command history
+XYZ Rotation Order. Prone to Gimbal Lock
+Draw Stretch Type
+Percentage scale for render resolution
+F-Curve and its keyframes are hidden in the Graph Editor graphs
+F-Curve Editor
+Area distortion between UV and 3D faces
+YXZ Rotation Order. Prone to Gimbal Lock
+Effective but slow compression
+Fields
+For bone motion paths, search whole Action for keyframes instead of in group with matching name only (is slower)
+Process the render result through the compositing pipeline, if compositing nodes are enabled
+Co-ordinate system to cache particles in
+Error Limit
+Curve guide effector weight
+Default
+Black Level
+ISO 1
+Fine tunes texture mapping X, Y and Z locations
+Single Property
+Korean (한국 언어)
+DopeSheet Sub-Channel
+Max Air Speed
+Vertex Group Length Negate
+Key location for a particle over time
+Render a user-defined border region, within the frame size. Note, this disables save_buffers and full_sample
+Range
+Materials
+Show hidden dot files
+Numpad Enter
+Polish (Polski)
+Automatic saving of temporary files in temp directory, uses process ID
+Cubic B-Spline
+Logic editor space data
+Open menu buttons and pulldowns automatically when the mouse is hovering
+Use to check if an operator is a macro
+Display zoom level
+Stamp Filename
+Weight
+Bias (in radians) to prevent smoothed faces from showing banding (for Raytrace Constant Jittered)
+Auto XYZ to RGB
+UV
+Audio volume
+Restrict the number of animation updates to the animation FPS. This is better for performance, but can cause issues with smooth playback
+Replace
+Show paint related properties
+Target Space
+Gloss Samples
+UI
+Keep horizon level while flying with 3D Mouse
+Texture Mode
+Shaded + Multiple Scattering
+Lifetime
+Settings for particle fluids physics
+Type of units for this property
+Pointer
+Field Settings
+PoseBone Constraints
+Right Ctrl
+User Key Configuration
+Color 3
+Speakers
+Color 1
+Spline Points
+Color 4
+Gradient
+Rule Fuzziness
+YZX Rotation Order. Prone to Gimbal Lock
+Amount of residual error in radiant for constraints that work on orientation
+GLSL Shadows
+Radius of object representation in obstacle simulation
+Show the entire viewport in the display window, using bar horizontally or vertically
+Dissolve Smoke
+Internal
+Library file the datablock is linked from
+Outer face thickness
+Any modifier keys pressed
+Screen aligned billboard
+Allow moving the mouse outside the view on some manipulations (transform, ui control drag)
+NLA Strips that this strip acts as a container for (if it is of type Meta)
+Pixel Cache
+Texture slot name
+Render Stamp
+bl_label
+Settings for interacting with Blender data
+Ball
+Active Clone
+Editbone Matrix
+ja_JP
+Curve in a curve mapping
+Auto Rainbow
+Maximum angular velocity in air (relative to 180 degrees)
+Operator Properties
+Material Raytrace Transparency
+Child
+Modal Keymap
+Color to use behind stamp text
+Theme settings for the graph editor
+Aligned
+Border Maximum X
+Border Maximum Y
+Type of event
+Set color of the bars
+Collapse Summary
+How many collision iterations should be done. (higher is better quality but slower)
+Consant falloff
+Fields Still
+Main Sounds
+Definition of a choice in an RNA enum property
+Translate Tooltips
+Sync Markers
+Object being duplicated
+Face in a Mesh datablock
+Calculate bone paths from tails
+Display World
+UV Pinned
+No Collision
+Active Channel Group
+Make face invisible
+Number of subdivisions of bone (for B-Bones only)
+Renders halo as a lens flare
+Only Selected Channels
+Minimum height where the agent can still walk
+Stroke data points
+Multiply Vertex Group with Envelope
+Inner face thickness
+Set actuator expanded in the user interface
+Low values are slower and higher quality
+Vertices Cache
+Lattice datablocks
+Current frame number can be manually set to a negative value
+Set controller expanded in the user interface
+Simulation used for obstacle avoidance in the game engine
+Duplicate Curve
+List of background images
+Manipulator Handle Size
+Alive
+Lock Z Axis
+Tex
+A square showing Saturation/Value, with Hue slider
+Deliver material index pass
+XXX todo
+Collection of spline points
+Flock
+Linear Light
+Live Unwrap
+Radiosity
+Turbulence Influence
+Object datablocks
+Left Shift
+The source of this force field is the zero point of a harmonic oscillator
+Driver Target
+CIE
+Show High Resolution
+Pin Cloth
+Soft Body Settings
+Threads
+Negate the effect of the roughness end vertex group
+Gloss Threshold
+World Space
+Game data for a Scene datablock
+Blender 2.4
+Coordinates of the right handle (after the control point)
+View2D Buttons List
+F-Curves in this group
+Point cache list
+3D View Region
+Show the X axis line in perspective view
+Matroska
+Node Generic
+Extinction scattering contribution factor
+Callback function defines for builtin Keying Sets
+Generate point density from an object's vertices
+Coulomb friction coefficient, when inside the physics distance area
+Temporary
+Vertex group to control size
+Time in milliseconds between each frame recorded for screencast
+Low Resolution Mesh
+Maximum structural stiffness value
+Maximum radial distance for the field to work
+Collection of point caches
+Volume
+Asymmetry
+Mux rate (bits/s(!))
+Weight value of a vertex in a vertex group
+Log conversion reference blackpoint
+Point density settings
+Show Mouse
+Name of Action Group to assign setting(s) for this path to
+Rotate
+Multiplier for multiple scattered light energy
+09 - Theme Color Set
+(Min+Max)/2 * Ball Size
+Flow
+Output image in Radiance HDR format
+Show Expanded
+11 - Theme Color Set
+Front scattering weight
+Maximum speed for jumping
+Compositor Nodes
+Particle in a particle system
+Vertex Group
+U
+Bending Stiffness Vertex Group
+Context
+Vertex selection mode
+Use scaled but un-grid-fitted kerning distances
+Gloss Amount
+3D region that defines the quad view settings
+Display groups and their datablocks
+Include visualization of Curve related Animation data
+User Modified
+Statistical view of the levels of color in an image
+Anisotropic Friction
+4x
+Inverse Gain
+Fade Time
+Visual Keying
+Agent Height
+Underline
+Translate Interface
+Property Definition
+Bake Mirror colors
+Animated Strip Time
+Friction Factor
+Space data for a screen area
+Maximum speed on land
+Theme User Interface
+Deflect Emitter
+Use Edges
+The base density of the volume
diff --git a/po/update_mo.py b/po/update_mo.py
new file mode 100755
index 00000000000..4effdc65541
--- /dev/null
+++ b/po/update_mo.py
@@ -0,0 +1,17 @@
+#!/usr/bin/python
+
+# update all mo files in the LANGS
+
+import os
+
+LOCALE_DIR="../release/bin/.blender/locale"
+PO_DIR = "."
+DOMAIN = "blender"
+
+for po in os.listdir( PO_DIR ):
+ if po.endswith(".po"):
+ lang = po[:-3]
+ # show stats
+ cmd = "msgfmt --statistics %s.po -o %s/%s/LC_MESSAGES/%s.mo" % ( lang, LOCALE_DIR, lang, DOMAIN )
+ print cmd
+ os.system( cmd )
diff --git a/po/update_po.py b/po/update_po.py
new file mode 100755
index 00000000000..50459c2b14b
--- /dev/null
+++ b/po/update_po.py
@@ -0,0 +1,17 @@
+#!/usr/bin/python
+
+# update all po files in the LANGS
+
+import os
+
+PO_DIR = "."
+DOMAIN = "blender"
+
+for po in os.listdir( PO_DIR ):
+ if po.endswith(".po"):
+ lang = po[:-3]
+ # update po file
+ cmd = "msgmerge --update --lang=%s %s.po %s.pot" % (lang, lang, DOMAIN)
+ print(cmd)
+ os.system( cmd )
+
diff --git a/po/update_pot.py b/po/update_pot.py
new file mode 100755
index 00000000000..616443edc4a
--- /dev/null
+++ b/po/update_pot.py
@@ -0,0 +1,61 @@
+#!/usr/bin/python
+
+# update the pot file according the POTFILES.in
+
+import os
+
+GETTEXT_XGETTEXT_EXECUTABLE="xgettext"
+SOURCE_DIR=".."
+DOMAIN="blender"
+
+cmd = "%s --files-from=%s/po/POTFILES.in --keyword=_ --keyword=N_ --directory=%s --output=%s/po/%s.pot --from-code=utf-8" % (
+ GETTEXT_XGETTEXT_EXECUTABLE, SOURCE_DIR, SOURCE_DIR, SOURCE_DIR, DOMAIN)
+
+os.system( cmd )
+
+def stripeol(s):
+ if line.endswith("\n"):
+ s = s[:-1]
+
+ if line.endswith("\r"):
+ s = s[:-1]
+
+ return s
+
+pot_messages = {}
+reading_message = False
+message = ""
+with open("blender.pot", 'r') as handle:
+ while True:
+ line = handle.readline()
+
+ if not line:
+ break
+
+ line = stripeol(line)
+ if line.startswith("msgid"):
+ reading_message = True
+ message = line[7:-1]
+ elif line.startswith("msgstr"):
+ reading_message = False
+ pot_messages[message] = True
+ elif reading_message:
+ message += line[1:-1]
+
+# add messages collected automatically from RNA
+with open("blender.pot", "a") as pot_handle:
+ with open("messages.txt", 'r') as handle:
+ while True:
+ line = handle.readline()
+
+ if not line:
+ break
+
+ line = stripeol(line)
+ line = line.replace("\\", "\\\\")
+ line = line.replace("\"", "\\\"")
+
+ if not pot_messages.get(line):
+ pot_handle.write("\n#: Automatically collected from RNA\n")
+ pot_handle.write("msgid \"%s\"\n" % (line))
+ pot_handle.write("msgstr \"\"\n")
diff --git a/release/bin/.blender/.Blanguages b/release/bin/.blender/.Blanguages
index 9f3b3ef80dc..1a83c46039a 100644
--- a/release/bin/.blender/.Blanguages
+++ b/release/bin/.blender/.Blanguages
@@ -11,13 +11,14 @@ Catalan:ca_ES
Czech:cs_CZ
Brazilian Portuguese:pt_BR
Simplified Chinese:zh_CN
+Traditional Chinese:zh_TW
Russian:ru_RU
Croatian:hr_HR
-Serbian:sr
+Serbian:sr_RS
Ukrainian:uk_UA
Polish:pl_PL
-Romanian:ro
-Arabic:ar
-Bulgarian:bg
-Greek:el
-Korean:ko
+Romanian:ro_RO
+Arabic:ar_SA
+Bulgarian:bg_BG
+Greek:el_GR
+Korean:ko_KR
diff --git a/release/bin/.blender/fonts/droidsans.ttf.gz b/release/bin/.blender/fonts/droidsans.ttf.gz
new file mode 100644
index 00000000000..e83aff4e899
--- /dev/null
+++ b/release/bin/.blender/fonts/droidsans.ttf.gz
Binary files differ
diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py
index 861255f167f..fae38eb1cef 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -1144,6 +1144,67 @@ class WM_OT_sysinfo(Operator):
return {'FINISHED'}
+class WM_OT_get_messages(Operator):
+ bl_idname = "wm.get_messages"
+ bl_label = "Get Messages"
+
+ def _putMessage(self, messages, msg):
+ if len(msg):
+ messages[msg] = True
+
+ def _walkProperties(self, properties, messages):
+ for prop in properties:
+ self._putMessage(messages, prop.name)
+ self._putMessage(messages, prop.description)
+
+ if isinstance(prop, bpy.types.EnumProperty):
+ for item in prop.enum_items:
+ self._putMessage(messages, item.name)
+ self._putMessage(messages, item.description)
+
+ def _walkRNA(self, bl_rna, messages):
+ if bl_rna.name and bl_rna.name != bl_rna.identifier:
+ self._putMessage(messages, bl_rna.name)
+
+ if bl_rna.description:
+ self._putMessage(messages, bl_rna.description)
+
+ self._walkProperties(bl_rna.properties, messages)
+
+ def _walkClass(self, cls, messages):
+ self._walkRNA(cls.bl_rna, messages)
+
+ def _walk_keymap_hierarchy(self, hier, messages):
+ for lvl in hier:
+ self._putMessage(messages, lvl[0])
+
+ if lvl[3]:
+ self._walk_keymap_hierarchy(lvl[3], messages)
+
+ def execute(self, context):
+ messages = {}
+
+ for cls in type(bpy.context).__base__.__subclasses__():
+ self._walkClass(cls, messages)
+
+ for cls in bpy.types.Space.__subclasses__():
+ self._walkClass(cls, messages)
+
+ for cls in bpy.types.Operator.__subclasses__():
+ self._walkClass(cls, messages)
+
+ from bl_ui.space_userpref_keymap import KM_HIERARCHY
+
+ self._walk_keymap_hierarchy(KM_HIERARCHY, messages)
+
+ text = bpy.data.texts.new(name="messages.txt")
+ for message in messages:
+ text.write(message + "\n")
+ self._walkClass(bpy.types.SpaceDopeSheetEditor, messages)
+
+ return {'FINISHED'}
+
+
class WM_OT_copy_prev_settings(Operator):
'''Copy settings from previous version'''
bl_idname = "wm.copy_prev_settings"
diff --git a/release/scripts/startup/bl_ui/properties_animviz.py b/release/scripts/startup/bl_ui/properties_animviz.py
index 3b33a7ccc61..499ea4c95d4 100644
--- a/release/scripts/startup/bl_ui/properties_animviz.py
+++ b/release/scripts/startup/bl_ui/properties_animviz.py
@@ -23,7 +23,7 @@
# NOTE:
# The specialised panel types are derived in their respective UI modules
# dont register these classes since they are only helpers.
-
+from blf import gettext as _
class MotionPathButtonsPanel():
bl_space_type = 'PROPERTIES'
@@ -43,23 +43,23 @@ class MotionPathButtonsPanel():
col = split.column()
sub = col.column(align=True)
if (mps.type == 'CURRENT_FRAME'):
- sub.prop(mps, "frame_before", text="Before")
- sub.prop(mps, "frame_after", text="After")
+ sub.prop(mps, "frame_before", text=_("Before"))
+ sub.prop(mps, "frame_after", text=_("After"))
elif (mps.type == 'RANGE'):
- sub.prop(mps, "frame_start", text="Start")
- sub.prop(mps, "frame_end", text="End")
+ sub.prop(mps, "frame_start", text=_("Start"))
+ sub.prop(mps, "frame_end", text=_("End"))
- sub.prop(mps, "frame_step", text="Step")
+ sub.prop(mps, "frame_step", text=_("Step"))
if bones:
col.row().prop(mps, "bake_location", expand=True)
col = split.column()
- col.label(text="Display:")
- col.prop(mps, "show_frame_numbers", text="Frame Numbers")
- col.prop(mps, "show_keyframe_highlight", text="Keyframes")
+ col.label(text=_("Display:"))
+ col.prop(mps, "show_frame_numbers", text=_("Frame Numbers"))
+ col.prop(mps, "show_keyframe_highlight", text=_("Keyframes"))
if bones:
- col.prop(mps, "show_keyframe_action_all", text="+ Non-Grouped Keyframes")
- col.prop(mps, "show_keyframe_numbers", text="Keyframe Numbers")
+ col.prop(mps, "show_keyframe_action_all", text=_("+ Non-Grouped Keyframes"))
+ col.prop(mps, "show_keyframe_numbers", text=_("Keyframe Numbers"))
# FIXME: this panel still needs to be ported so that it will work correctly with animviz
@@ -82,16 +82,16 @@ class OnionSkinButtonsPanel():
sub = col.column(align=True)
if arm.ghost_type == 'RANGE':
- sub.prop(arm, "ghost_frame_start", text="Start")
- sub.prop(arm, "ghost_frame_end", text="End")
- sub.prop(arm, "ghost_size", text="Step")
+ sub.prop(arm, "ghost_frame_start", text=_("Start"))
+ sub.prop(arm, "ghost_frame_end", text=_("End"))
+ sub.prop(arm, "ghost_size", text=_("Step"))
elif arm.ghost_type == 'CURRENT_FRAME':
- sub.prop(arm, "ghost_step", text="Range")
- sub.prop(arm, "ghost_size", text="Step")
+ sub.prop(arm, "ghost_step", text=_("Range"))
+ sub.prop(arm, "ghost_size", text=_("Step"))
col = split.column()
- col.label(text="Display:")
- col.prop(arm, "show_only_ghost_selected", text="Selected Only")
+ col.label(text=_("Display:"))
+ col.prop(arm, "show_only_ghost_selected", text=_("Selected Only"))
if __name__ == "__main__": # only for live edit.
import bpy
diff --git a/release/scripts/startup/bl_ui/properties_data_armature.py b/release/scripts/startup/bl_ui/properties_data_armature.py
index 61093abe814..e5729a24b91 100644
--- a/release/scripts/startup/bl_ui/properties_data_armature.py
+++ b/release/scripts/startup/bl_ui/properties_data_armature.py
@@ -20,7 +20,7 @@
import bpy
from bpy.types import Panel, Menu
from rna_prop_ui import PropertyPanel
-
+from blf import gettext as _
class ArmatureButtonsPanel():
bl_space_type = 'PROPERTIES'
@@ -60,16 +60,16 @@ class DATA_PT_skeleton(ArmatureButtonsPanel, Panel):
layout.prop(arm, "pose_position", expand=True)
col = layout.column()
- col.label(text="Layers:")
+ col.label(text=_("Layers:"))
col.prop(arm, "layers", text="")
- col.label(text="Protected Layers:")
+ col.label(text=_("Protected Layers:"))
col.prop(arm, "layers_protected", text="")
layout.label(text="Deform:")
flow = layout.column_flow()
- flow.prop(arm, "use_deform_vertex_groups", text="Vertex Groups")
- flow.prop(arm, "use_deform_envelopes", text="Envelopes")
- flow.prop(arm, "use_deform_preserve_volume", text="Quaternion")
+ flow.prop(arm, "use_deform_vertex_groups", text=_("Vertex Groups"))
+ flow.prop(arm, "use_deform_envelopes", text=_("Envelopes"))
+ flow.prop(arm, "use_deform_preserve_volume", text=_("Quaternion"))
if context.scene.render.engine == "BLENDER_GAME":
layout.row().prop(arm, "vert_deformer", expand=True)
@@ -89,15 +89,15 @@ class DATA_PT_display(ArmatureButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.prop(arm, "show_names", text="Names")
- col.prop(arm, "show_axes", text="Axes")
- col.prop(arm, "show_bone_custom_shapes", text="Shapes")
+ col.prop(arm, "show_names", text=_("Names"))
+ col.prop(arm, "show_axes", text=_("Axes"))
+ col.prop(arm, "show_bone_custom_shapes", text=_("Shapes"))
col = split.column()
- col.prop(arm, "show_group_colors", text="Colors")
+ col.prop(arm, "show_group_colors", text=_("Colors"))
if ob:
- col.prop(ob, "show_x_ray", text="X-Ray")
- col.prop(arm, "use_deform_delay", text="Delay Refresh")
+ col.prop(ob, "show_x_ray", text=_("X-Ray"))
+ col.prop(arm, "use_deform_delay", text=_("Delay Refresh"))
class DATA_PT_bone_group_specials(Menu):
@@ -161,12 +161,12 @@ class DATA_PT_bone_groups(ArmatureButtonsPanel, Panel):
row.active = (ob.proxy is None)
sub = row.row(align=True)
- sub.operator("pose.group_assign", text="Assign")
- sub.operator("pose.group_unassign", text="Remove") # row.operator("pose.bone_group_remove_from", text="Remove")
+ sub.operator("pose.group_assign", text=_("Assign"))
+ sub.operator("pose.group_unassign", text=_("Remove")) # row.operator("pose.bone_group_remove_from", text=_("Remove"))
sub = row.row(align=True)
- sub.operator("pose.group_select", text="Select")
- sub.operator("pose.group_deselect", text="Deselect")
+ sub.operator("pose.group_select", text=_("Select"))
+ sub.operator("pose.group_deselect", text=_("Deselect"))
class DATA_PT_pose_library(ArmatureButtonsPanel, Panel):
@@ -230,16 +230,16 @@ class DATA_PT_ghost(ArmatureButtonsPanel, Panel):
col = split.column(align=True)
if arm.ghost_type == 'RANGE':
- col.prop(arm, "ghost_frame_start", text="Start")
- col.prop(arm, "ghost_frame_end", text="End")
- col.prop(arm, "ghost_size", text="Step")
+ col.prop(arm, "ghost_frame_start", text=_("Start"))
+ col.prop(arm, "ghost_frame_end", text=_("End"))
+ col.prop(arm, "ghost_size", text=_("Step"))
elif arm.ghost_type == 'CURRENT_FRAME':
- col.prop(arm, "ghost_step", text="Range")
- col.prop(arm, "ghost_size", text="Step")
+ col.prop(arm, "ghost_step", text=_("Range"))
+ col.prop(arm, "ghost_size", text=_("Step"))
col = split.column()
- col.label(text="Display:")
- col.prop(arm, "show_only_ghost_selected", text="Selected Only")
+ col.label(text=_("Display:"))
+ col.prop(arm, "show_only_ghost_selected", text=_("Selected Only"))
class DATA_PT_iksolver_itasc(ArmatureButtonsPanel, Panel):
@@ -263,7 +263,7 @@ class DATA_PT_iksolver_itasc(ArmatureButtonsPanel, Panel):
layout.prop(itasc, "mode", expand=True)
simulation = (itasc.mode == 'SIMULATION')
if simulation:
- layout.label(text="Reiteration:")
+ layout.label(text=_("Reiteration:"))
layout.prop(itasc, "reiteration_method", expand=True)
row = layout.row()
@@ -275,8 +275,8 @@ class DATA_PT_iksolver_itasc(ArmatureButtonsPanel, Panel):
layout.prop(itasc, "use_auto_step")
row = layout.row()
if itasc.use_auto_step:
- row.prop(itasc, "step_min", text="Min")
- row.prop(itasc, "step_max", text="Max")
+ row.prop(itasc, "step_min", text=_("Min"))
+ row.prop(itasc, "step_max", text=_("Max"))
else:
row.prop(itasc, "step_count")
@@ -286,7 +286,7 @@ class DATA_PT_iksolver_itasc(ArmatureButtonsPanel, Panel):
layout.prop(itasc, "velocity_max")
if itasc.solver == 'DLS':
row = layout.row()
- row.prop(itasc, "damping_max", text="Damp", slider=True)
+ row.prop(itasc, "damping_max", text=_("Damp"), slider=True)
row.prop(itasc, "damping_epsilon", text="Eps", slider=True)
from bl_ui.properties_animviz import (
@@ -314,8 +314,8 @@ class DATA_PT_motion_paths(MotionPathButtonsPanel, Panel):
layout.separator()
split = layout.split()
- split.operator("pose.paths_calculate", text="Calculate Paths")
- split.operator("pose.paths_clear", text="Clear Paths")
+ split.operator("pose.paths_calculate", text=_("Calculate Paths"))
+ split.operator("pose.paths_clear", text=_("Clear Paths"))
class DATA_PT_onion_skinning(OnionSkinButtonsPanel): # , Panel): # inherit from panel when ready
diff --git a/release/scripts/startup/bl_ui/properties_data_bone.py b/release/scripts/startup/bl_ui/properties_data_bone.py
index b3eaf88d5bf..2c9b31fd88d 100644
--- a/release/scripts/startup/bl_ui/properties_data_bone.py
+++ b/release/scripts/startup/bl_ui/properties_data_bone.py
@@ -21,7 +21,7 @@
import bpy
from bpy.types import Panel
from rna_prop_ui import PropertyPanel
-
+from blf import gettext as _
class BoneButtonsPanel():
bl_space_type = 'PROPERTIES'
@@ -76,14 +76,14 @@ class BONE_PT_transform(BoneButtonsPanel, Panel):
col = row.column()
if pchan.rotation_mode == 'QUATERNION':
- col.prop(pchan, "rotation_quaternion", text="Rotation")
+ col.prop(pchan, "rotation_quaternion", text=_("Rotation"))
elif pchan.rotation_mode == 'AXIS_ANGLE':
- #col.label(text="Rotation")
- #col.prop(pchan, "rotation_angle", text="Angle")
- #col.prop(pchan, "rotation_axis", text="Axis")
- col.prop(pchan, "rotation_axis_angle", text="Rotation")
+ #col.label(text=_("Rotation"))
+ #col.prop(pchan, "rotation_angle", text=_("Angle"))
+ #col.prop(pchan, "rotation_axis", text=_("Axis"))
+ col.prop(pchan, "rotation_axis_angle", text=_("Rotation"))
else:
- col.prop(pchan, "rotation_euler", text="Rotation")
+ col.prop(pchan, "rotation_euler", text=_("Rotation"))
row.column().prop(pchan, "scale")
@@ -97,7 +97,7 @@ class BONE_PT_transform(BoneButtonsPanel, Panel):
col = row.column()
sub = col.column(align=True)
- sub.label(text="Roll:")
+ sub.label(text=_("Roll:"))
sub.prop(bone, "roll", text="")
sub.label()
sub.prop(bone, "lock")
@@ -126,12 +126,12 @@ class BONE_PT_transform_locks(BoneButtonsPanel, Panel):
col = row.column()
if pchan.rotation_mode in {'QUATERNION', 'AXIS_ANGLE'}:
- col.prop(pchan, "lock_rotations_4d", text="Lock Rotation")
+ col.prop(pchan, "lock_rotations_4d", text=_("Lock Rotation"))
if pchan.lock_rotations_4d:
col.prop(pchan, "lock_rotation_w", text="W")
col.prop(pchan, "lock_rotation", text="")
else:
- col.prop(pchan, "lock_rotation", text="Rotation")
+ col.prop(pchan, "lock_rotation", text=_("Rotation"))
row.column().prop(pchan, "lock_scale")
@@ -155,17 +155,17 @@ class BONE_PT_relations(BoneButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Layers:")
+ col.label(text=_("Layers:"))
col.prop(bone, "layers", text="")
col.separator()
if ob and pchan:
- col.label(text="Bone Group:")
+ col.label(text=_("Bone Group:"))
col.prop_search(pchan, "bone_group", ob.pose, "bone_groups", text="")
col = split.column()
- col.label(text="Parent:")
+ col.label(text=_("Parent:"))
if context.bone:
col.prop(bone, "parent", text="")
else:
@@ -174,11 +174,11 @@ class BONE_PT_relations(BoneButtonsPanel, Panel):
sub = col.column()
sub.active = (bone.parent is not None)
sub.prop(bone, "use_connect")
- sub.prop(bone, "use_inherit_rotation", text="Inherit Rotation")
- sub.prop(bone, "use_inherit_scale", text="Inherit Scale")
+ sub.prop(bone, "use_inherit_rotation", text=_("Inherit Rotation"))
+ sub.prop(bone, "use_inherit_scale", text=_("Inherit Scale"))
sub = col.column()
sub.active = (not bone.parent or not bone.use_connect)
- sub.prop(bone, "use_local_location", text="Local Location")
+ sub.prop(bone, "use_local_location", text=_("Local Location"))
class BONE_PT_display(BoneButtonsPanel, Panel):
@@ -206,16 +206,16 @@ class BONE_PT_display(BoneButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.prop(bone, "show_wire", text="Wireframe")
- col.prop(bone, "hide", text="Hide")
+ col.prop(bone, "show_wire", text=_("Wireframe"))
+ col.prop(bone, "hide", text=_("Hide"))
if pchan:
col = split.column()
- col.label(text="Custom Shape:")
+ col.label(text=_("Custom Shape:"))
col.prop(pchan, "custom_shape", text="")
if pchan.custom_shape:
- col.prop_search(pchan, "custom_shape_transform", ob.pose, "bones", text="At")
+ col.prop_search(pchan, "custom_shape_transform", ob.pose, "bones", text=_("At"))
class BONE_PT_inverse_kinematics(BoneButtonsPanel, Panel):
@@ -241,13 +241,13 @@ class BONE_PT_inverse_kinematics(BoneButtonsPanel, Panel):
split.prop(pchan, "lock_ik_x", icon='LOCKED' if pchan.lock_ik_x else 'UNLOCKED', text="X")
split.active = pchan.is_in_ik_chain
row = split.row()
- row.prop(pchan, "ik_stiffness_x", text="Stiffness", slider=True)
+ row.prop(pchan, "ik_stiffness_x", text=_("Stiffness"), slider=True)
row.active = pchan.lock_ik_x == False and pchan.is_in_ik_chain
split = layout.split(percentage=0.25)
sub = split.row()
- sub.prop(pchan, "use_ik_limit_x", text="Limit")
+ sub.prop(pchan, "use_ik_limit_x", text=_("Limit"))
sub.active = pchan.lock_ik_x == False and pchan.is_in_ik_chain
sub = split.row(align=True)
sub.prop(pchan, "ik_min_x", text="")
@@ -258,13 +258,13 @@ class BONE_PT_inverse_kinematics(BoneButtonsPanel, Panel):
split.prop(pchan, "lock_ik_y", icon='LOCKED' if pchan.lock_ik_y else 'UNLOCKED', text="Y")
split.active = pchan.is_in_ik_chain
row = split.row()
- row.prop(pchan, "ik_stiffness_y", text="Stiffness", slider=True)
+ row.prop(pchan, "ik_stiffness_y", text=_("Stiffness"), slider=True)
row.active = pchan.lock_ik_y == False and pchan.is_in_ik_chain
split = layout.split(percentage=0.25)
sub = split.row()
- sub.prop(pchan, "use_ik_limit_y", text="Limit")
+ sub.prop(pchan, "use_ik_limit_y", text=_("Limit"))
sub.active = pchan.lock_ik_y == False and pchan.is_in_ik_chain
sub = split.row(align=True)
@@ -276,13 +276,13 @@ class BONE_PT_inverse_kinematics(BoneButtonsPanel, Panel):
split.prop(pchan, "lock_ik_z", icon='LOCKED' if pchan.lock_ik_z else 'UNLOCKED', text="Z")
split.active = pchan.is_in_ik_chain
sub = split.row()
- sub.prop(pchan, "ik_stiffness_z", text="Stiffness", slider=True)
+ sub.prop(pchan, "ik_stiffness_z", text=_("Stiffness"), slider=True)
sub.active = pchan.lock_ik_z == False and pchan.is_in_ik_chain
split = layout.split(percentage=0.25)
sub = split.row()
- sub.prop(pchan, "use_ik_limit_z", text="Limit")
+ sub.prop(pchan, "use_ik_limit_z", text=_("Limit"))
sub.active = pchan.lock_ik_z == False and pchan.is_in_ik_chain
sub = split.row(align=True)
sub.prop(pchan, "ik_min_z", text="")
@@ -290,7 +290,7 @@ class BONE_PT_inverse_kinematics(BoneButtonsPanel, Panel):
sub.active = pchan.lock_ik_z == False and pchan.use_ik_limit_z and pchan.is_in_ik_chain
split = layout.split(percentage=0.25)
- split.label(text="Stretch:")
+ split.label(text=_("Stretch:"))
sub = split.row()
sub.prop(pchan, "ik_stretch", text="", slider=True)
sub.active = pchan.is_in_ik_chain
@@ -298,15 +298,15 @@ class BONE_PT_inverse_kinematics(BoneButtonsPanel, Panel):
if ob.pose.ik_solver == 'ITASC':
split = layout.split()
col = split.column()
- col.prop(pchan, "use_ik_rotation_control", text="Control Rotation")
+ col.prop(pchan, "use_ik_rotation_control", text=_("Control Rotation"))
col.active = pchan.is_in_ik_chain
col = split.column()
- col.prop(pchan, "ik_rotation_weight", text="Weight", slider=True)
+ col.prop(pchan, "ik_rotation_weight", text=_("Weight"), slider=True)
col.active = pchan.is_in_ik_chain
# not supported yet
#row = layout.row()
- #row.prop(pchan, "use_ik_linear_control", text="Joint Size")
- #row.prop(pchan, "ik_linear_weight", text="Weight", slider=True)
+ #row.prop(pchan, "use_ik_linear_control", text=_("Joint Size"))
+ #row.prop(pchan, "ik_linear_weight", text=_("Weight"), slider=True)
class BONE_PT_deform(BoneButtonsPanel, Panel):
@@ -334,27 +334,27 @@ class BONE_PT_deform(BoneButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Envelope:")
+ col.label(text=_("Envelope:"))
sub = col.column(align=True)
- sub.prop(bone, "envelope_distance", text="Distance")
- sub.prop(bone, "envelope_weight", text="Weight")
- col.prop(bone, "use_envelope_multiply", text="Multiply")
+ sub.prop(bone, "envelope_distance", text=_("Distance"))
+ sub.prop(bone, "envelope_weight", text=_("Weight"))
+ col.prop(bone, "use_envelope_multiply", text=_("Multiply"))
sub = col.column(align=True)
- sub.label(text="Radius:")
- sub.prop(bone, "head_radius", text="Head")
- sub.prop(bone, "tail_radius", text="Tail")
+ sub.label(text=_("Radius:"))
+ sub.prop(bone, "head_radius", text=_("Head"))
+ sub.prop(bone, "tail_radius", text=_("Tail"))
col = split.column()
- col.label(text="Curved Bones:")
+ col.label(text=_("Curved Bones:"))
sub = col.column(align=True)
- sub.prop(bone, "bbone_segments", text="Segments")
- sub.prop(bone, "bbone_in", text="Ease In")
- sub.prop(bone, "bbone_out", text="Ease Out")
+ sub.prop(bone, "bbone_segments", text=_("Segments"))
+ sub.prop(bone, "bbone_in", text=_("Ease In"))
+ sub.prop(bone, "bbone_out", text=_("Ease Out"))
- col.label(text="Offset:")
+ col.label(text=_("Offset:"))
col.prop(bone, "use_cyclic_offset")
diff --git a/release/scripts/startup/bl_ui/properties_data_camera.py b/release/scripts/startup/bl_ui/properties_data_camera.py
index 5255af40951..0d79ec99789 100644
--- a/release/scripts/startup/bl_ui/properties_data_camera.py
+++ b/release/scripts/startup/bl_ui/properties_data_camera.py
@@ -20,7 +20,7 @@
import bpy
from bpy.types import Panel
from rna_prop_ui import PropertyPanel
-
+from blf import gettext as _
class CameraButtonsPanel():
bl_space_type = 'PROPERTIES'
@@ -91,16 +91,16 @@ class DATA_PT_camera(CameraButtonsPanel, Panel):
split = layout.split()
col = split.column(align=True)
- col.label(text="Shift:")
+ col.label(text=_("Shift:"))
col.prop(cam, "shift_x", text="X")
col.prop(cam, "shift_y", text="Y")
col = split.column(align=True)
- col.label(text="Clipping:")
- col.prop(cam, "clip_start", text="Start")
- col.prop(cam, "clip_end", text="End")
+ col.label(text=_("Clipping:"))
+ col.prop(cam, "clip_start", text=_("Start"))
+ col.prop(cam, "clip_end", text=_("End"))
- layout.label(text="Depth of Field:")
+ layout.label(text=_("Depth of Field:"))
split = layout.split()
split.prop(cam, "dof_object", text="")
@@ -109,7 +109,7 @@ class DATA_PT_camera(CameraButtonsPanel, Panel):
if cam.dof_object is not None:
col.enabled = False
- col.prop(cam, "dof_distance", text="Distance")
+ col.prop(cam, "dof_distance", text=_("Distance"))
class DATA_PT_camera_display(CameraButtonsPanel, Panel):
@@ -124,19 +124,19 @@ class DATA_PT_camera_display(CameraButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.prop(cam, "show_limits", text="Limits")
- col.prop(cam, "show_mist", text="Mist")
- col.prop(cam, "show_title_safe", text="Title Safe")
- col.prop(cam, "show_name", text="Name")
+ col.prop(cam, "show_limits", text=_("Limits"))
+ col.prop(cam, "show_mist", text=_("Mist"))
+ col.prop(cam, "show_title_safe", text=_("Title Safe"))
+ col.prop(cam, "show_name", text=_("Name"))
col.prop_menu_enum(cam, "show_guide")
col = split.column()
- col.prop(cam, "draw_size", text="Size")
+ col.prop(cam, "draw_size", text=_("Size"))
col.separator()
- col.prop(cam, "show_passepartout", text="Passepartout")
+ col.prop(cam, "show_passepartout", text=_("Passepartout"))
sub = col.column()
sub.active = cam.show_passepartout
- sub.prop(cam, "passepartout_alpha", text="Alpha", slider=True)
+ sub.prop(cam, "passepartout_alpha", text=_("Alpha"), slider=True)
class DATA_PT_custom_props_camera(CameraButtonsPanel, PropertyPanel, Panel):
diff --git a/release/scripts/startup/bl_ui/properties_data_curve.py b/release/scripts/startup/bl_ui/properties_data_curve.py
index 2e0b36a7a75..861359fbed4 100644
--- a/release/scripts/startup/bl_ui/properties_data_curve.py
+++ b/release/scripts/startup/bl_ui/properties_data_curve.py
@@ -20,7 +20,7 @@
import bpy
from bpy.types import Panel
from rna_prop_ui import PropertyPanel
-
+from blf import gettext as _
class CurveButtonsPanel():
bl_space_type = 'PROPERTIES'
@@ -67,7 +67,7 @@ class DATA_PT_context_curve(CurveButtonsPanel, Panel):
class DATA_PT_shape_curve(CurveButtonsPanel, Panel):
- bl_label = "Shape"
+ bl_label = _("Shape")
def draw(self, context):
layout = self.layout
@@ -85,17 +85,17 @@ class DATA_PT_shape_curve(CurveButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Resolution:")
+ col.label(text=_("Resolution:"))
sub = col.column(align=True)
- sub.prop(curve, "resolution_u", text="Preview U")
- sub.prop(curve, "render_resolution_u", text="Render U")
+ sub.prop(curve, "resolution_u", text=_("Preview U"))
+ sub.prop(curve, "render_resolution_u", text=_("Render U"))
if is_curve:
- col.label(text="Twisting:")
+ col.label(text=_("Twisting:"))
col.prop(curve, "twist_mode", text="")
- col.prop(curve, "twist_smooth", text="Smooth")
+ col.prop(curve, "twist_smooth", text=_("Smooth"))
if is_text:
- col.label(text="Display:")
- col.prop(curve, "use_fast_edit", text="Fast Editing")
+ col.label(text=_("Display:"))
+ col.prop(curve, "use_fast_edit", text=_("Fast Editing"))
col = split.column()
@@ -103,15 +103,15 @@ class DATA_PT_shape_curve(CurveButtonsPanel, Panel):
sub = col.column()
sub.label(text="")
sub = col.column(align=True)
- sub.prop(curve, "resolution_v", text="Preview V")
- sub.prop(curve, "render_resolution_v", text="Render V")
+ sub.prop(curve, "resolution_v", text=_("Preview V"))
+ sub.prop(curve, "render_resolution_v", text=_("Render V"))
if (is_curve or is_text):
- col.label(text="Fill:")
+ col.label(text=_("Fill:"))
sub = col.column()
sub.active = (curve.dimensions == '2D' or (curve.bevel_object is None and curve.dimensions == '3D'))
sub.prop(curve, "fill_mode", text="")
- col.prop(curve, "use_fill_deform", text="Fill Deformed")
+ col.prop(curve, "use_fill_deform", text=_("Fill Deformed"))
class DATA_PT_curve_texture_space(CurveButtonsPanel, Panel):
@@ -129,8 +129,8 @@ class DATA_PT_curve_texture_space(CurveButtonsPanel, Panel):
row.prop(curve, "use_uv_as_generated")
row = layout.row()
- row.column().prop(curve, "texspace_location", text="Location")
- row.column().prop(curve, "texspace_size", text="Size")
+ row.column().prop(curve, "texspace_location", text=_("Location"))
+ row.column().prop(curve, "texspace_size", text=_("Size"))
class DATA_PT_geometry_curve(CurveButtonsPanel, Panel):
@@ -152,17 +152,17 @@ class DATA_PT_geometry_curve(CurveButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Modification:")
+ col.label(text=_("Modification:"))
col.prop(curve, "offset")
col.prop(curve, "extrude")
- col.label(text="Taper Object:")
+ col.label(text=_("Taper Object:"))
col.prop(curve, "taper_object", text="")
col = split.column()
- col.label(text="Bevel:")
- col.prop(curve, "bevel_depth", text="Depth")
- col.prop(curve, "bevel_resolution", text="Resolution")
- col.label(text="Bevel Object:")
+ col.label(text=_("Bevel:"))
+ col.prop(curve, "bevel_depth", text=_("Depth"))
+ col.prop(curve, "bevel_resolution", text=_("Resolution"))
+ col.label(text=_("Bevel Object:"))
col.prop(curve, "bevel_object", text="")
@@ -182,7 +182,7 @@ class DATA_PT_pathanim(CurveButtonsPanelCurve, Panel):
layout.active = curve.use_path
col = layout.column()
- layout.prop(curve, "path_duration", text="Frames")
+ layout.prop(curve, "path_duration", text=_("Frames"))
layout.prop(curve, "eval_time")
split = layout.split()
@@ -194,7 +194,7 @@ class DATA_PT_pathanim(CurveButtonsPanelCurve, Panel):
col = split.column()
col.prop(curve, "use_radius")
- col.prop(curve, "use_time_offset", text="Offset Children")
+ col.prop(curve, "use_time_offset", text=_("Offset Children"))
class DATA_PT_active_spline(CurveButtonsPanelActive, Panel):
@@ -215,20 +215,20 @@ class DATA_PT_active_spline(CurveButtonsPanelActive, Panel):
# These settings are below but its easier to have
# poly's set aside since they use so few settings
col = split.column()
- col.label(text="Cyclic:")
+ col.label(text=_("Cyclic:"))
col.prop(act_spline, "use_smooth")
col = split.column()
col.prop(act_spline, "use_cyclic_u", text="U")
else:
col = split.column()
- col.label(text="Cyclic:")
+ col.label(text=_("Cyclic:"))
if act_spline.type == 'NURBS':
- col.label(text="Bezier:")
- col.label(text="Endpoint:")
- col.label(text="Order:")
+ col.label(text=_("Bezier:"))
+ col.label(text=_("Endpoint:"))
+ col.label(text=_("Order:"))
- col.label(text="Resolution:")
+ col.label(text=_("Resolution:"))
col = split.column()
col.prop(act_spline, "use_cyclic_u", text="U")
@@ -261,9 +261,9 @@ class DATA_PT_active_spline(CurveButtonsPanelActive, Panel):
col = split.column()
col.active = (curve.dimensions == '3D')
- col.label(text="Interpolation:")
- col.prop(act_spline, "tilt_interpolation", text="Tilt")
- col.prop(act_spline, "radius_interpolation", text="Radius")
+ col.label(text=_("Interpolation:"))
+ col.prop(act_spline, "tilt_interpolation", text=_("Tilt"))
+ col.prop(act_spline, "radius_interpolation", text=_("Radius"))
layout.prop(act_spline, "use_smooth")
@@ -282,16 +282,16 @@ class DATA_PT_font(CurveButtonsPanel, Panel):
char = context.curve.edit_format
row = layout.split(percentage=0.25)
- row.label(text="Regular")
+ row.label(text=_("Regular"))
row.template_ID(text, "font", open="font.open", unlink="font.unlink")
row = layout.split(percentage=0.25)
- row.label(text="Bold")
+ row.label(text=_("Bold"))
row.template_ID(text, "font_bold", open="font.open", unlink="font.unlink")
row = layout.split(percentage=0.25)
- row.label(text="Italic")
+ row.label(text=_("Italic"))
row.template_ID(text, "font_italic", open="font.open", unlink="font.unlink")
row = layout.split(percentage=0.25)
- row.label(text="Bold & Italic")
+ row.label(text=_("Bold & Italic"))
row.template_ID(text, "font_bold_italic", open="font.open", unlink="font.unlink")
#layout.prop(text, "font")
@@ -299,36 +299,36 @@ class DATA_PT_font(CurveButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.prop(text, "size", text="Size")
+ col.prop(text, "size", text=_("Size"))
col = split.column()
col.prop(text, "shear")
split = layout.split()
col = split.column()
- col.label(text="Object Font:")
+ col.label(text=_("Object Font:"))
col.prop(text, "family", text="")
col = split.column()
- col.label(text="Text on Curve:")
+ col.label(text=_("Text on Curve:"))
col.prop(text, "follow_curve", text="")
split = layout.split()
col = split.column()
colsub = col.column(align=True)
- colsub.label(text="Underline:")
- colsub.prop(text, "underline_position", text="Position")
- colsub.prop(text, "underline_height", text="Thickness")
+ colsub.label(text=_("Underline:"))
+ colsub.prop(text, "underline_position", text=_("Position"))
+ colsub.prop(text, "underline_height", text=_("Thickness"))
col = split.column()
- col.label(text="Character:")
+ col.label(text=_("Character:"))
col.prop(char, "use_bold")
col.prop(char, "use_italic")
col.prop(char, "use_underline")
row = layout.row()
- row.prop(text, "small_caps_scale", text="Small Caps")
+ row.prop(text, "small_caps_scale", text=_("Small Caps"))
row.prop(char, "use_small_caps")
@@ -344,19 +344,19 @@ class DATA_PT_paragraph(CurveButtonsPanel, Panel):
text = context.curve
- layout.label(text="Align:")
+ layout.label(text=_("Align:"))
layout.prop(text, "align", expand=True)
split = layout.split()
col = split.column(align=True)
- col.label(text="Spacing:")
- col.prop(text, "space_character", text="Character")
- col.prop(text, "space_word", text="Word")
- col.prop(text, "space_line", text="Line")
+ col.label(text=_("Spacing:"))
+ col.prop(text, "space_character", text=_("Character"))
+ col.prop(text, "space_word", text=_("Word"))
+ col.prop(text, "space_line", text=_("Line"))
col = split.column(align=True)
- col.label(text="Offset:")
+ col.label(text=_("Offset:"))
col.prop(text, "offset_x", text="X")
col.prop(text, "offset_y", text="Y")
@@ -388,13 +388,13 @@ class DATA_PT_text_boxes(CurveButtonsPanel, Panel):
col = split.column(align=True)
- col.label(text="Dimensions:")
- col.prop(box, "width", text="Width")
- col.prop(box, "height", text="Height")
+ col.label(text=_("Dimensions:"))
+ col.prop(box, "width", text=_("Width"))
+ col.prop(box, "height", text=_("Height"))
col = split.column(align=True)
- col.label(text="Offset:")
+ col.label(text=_("Offset:"))
col.prop(box, "x", text="X")
col.prop(box, "y", text="Y")
diff --git a/release/scripts/startup/bl_ui/properties_data_empty.py b/release/scripts/startup/bl_ui/properties_data_empty.py
index c781873e16c..b6fa6d8e839 100644
--- a/release/scripts/startup/bl_ui/properties_data_empty.py
+++ b/release/scripts/startup/bl_ui/properties_data_empty.py
@@ -19,7 +19,7 @@
# <pep8 compliant>
import bpy
from bpy.types import Panel
-
+from blf import gettext as _
class DataButtonsPanel():
bl_space_type = 'PROPERTIES'
@@ -39,17 +39,17 @@ class DATA_PT_empty(DataButtonsPanel, Panel):
ob = context.object
- layout.prop(ob, "empty_draw_type", text="Display")
+ layout.prop(ob, "empty_draw_type", text=_("Display"))
if ob.empty_draw_type == 'IMAGE':
layout.template_ID(ob, "data", open="image.open", unlink="image.unlink")
- layout.prop(ob, "color", text="Transparency", index=3, slider=True)
+ layout.prop(ob, "color", text=_("Transparency"), index=3, slider=True)
row = layout.row(align=True)
- row.prop(ob, "empty_image_offset", text="Offset X", index=0)
- row.prop(ob, "empty_image_offset", text="Offset Y", index=1)
+ row.prop(ob, "empty_image_offset", text=_("Offset X"), index=0)
+ row.prop(ob, "empty_image_offset", text=_("Offset Y"), index=1)
- layout.prop(ob, "empty_draw_size", text="Size")
+ layout.prop(ob, "empty_draw_size", text=_("Size"))
if __name__ == "__main__": # only for live edit.
bpy.utils.register_module(__name__)
diff --git a/release/scripts/startup/bl_ui/properties_data_lamp.py b/release/scripts/startup/bl_ui/properties_data_lamp.py
index 4ff180f74fb..93ed8ca369b 100644
--- a/release/scripts/startup/bl_ui/properties_data_lamp.py
+++ b/release/scripts/startup/bl_ui/properties_data_lamp.py
@@ -20,10 +20,10 @@
import bpy
from bpy.types import Menu, Panel
from rna_prop_ui import PropertyPanel
-
+from blf import gettext as _
class LAMP_MT_sunsky_presets(Menu):
- bl_label = "Sun & Sky Presets"
+ bl_label = _("Sun & Sky Presets")
preset_subdir = "sunsky"
preset_operator = "script.execute_preset"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -93,15 +93,15 @@ class DATA_PT_lamp(DataButtonsPanel, Panel):
sub.prop(lamp, "energy")
if lamp.type in {'POINT', 'SPOT'}:
- sub.label(text="Falloff:")
+ sub.label(text=_("Falloff:"))
sub.prop(lamp, "falloff_type", text="")
sub.prop(lamp, "distance")
if lamp.falloff_type == 'LINEAR_QUADRATIC_WEIGHTED':
- col.label(text="Attenuation Factors:")
+ col.label(text=_("Attenuation Factors:"))
sub = col.column(align=True)
- sub.prop(lamp, "linear_attenuation", slider=True, text="Linear")
- sub.prop(lamp, "quadratic_attenuation", slider=True, text="Quadratic")
+ sub.prop(lamp, "linear_attenuation", slider=True, text=_("Linear"))
+ sub.prop(lamp, "quadratic_attenuation", slider=True, text=_("Quadratic"))
col.prop(lamp, "use_sphere")
@@ -111,7 +111,7 @@ class DATA_PT_lamp(DataButtonsPanel, Panel):
col = split.column()
col.prop(lamp, "use_negative")
- col.prop(lamp, "use_own_layer", text="This Layer Only")
+ col.prop(lamp, "use_own_layer", text=_("This Layer Only"))
col.prop(lamp, "use_specular")
col.prop(lamp, "use_diffuse")
@@ -139,34 +139,34 @@ class DATA_PT_sunsky(DataButtonsPanel, Panel):
row = layout.row()
row.active = lamp.use_sky or lamp.use_atmosphere
- row.prop(lamp, "atmosphere_turbidity", text="Turbidity")
+ row.prop(lamp, "atmosphere_turbidity", text=_("Turbidity"))
split = layout.split()
col = split.column()
col.active = lamp.use_sky
- col.label(text="Blending:")
+ col.label(text=_("Blending:"))
sub = col.column()
sub.prop(lamp, "sky_blend_type", text="")
- sub.prop(lamp, "sky_blend", text="Factor")
+ sub.prop(lamp, "sky_blend", text=_("Factor"))
- col.label(text="Color Space:")
+ col.label(text=_("Color Space:"))
sub = col.column()
sub.row().prop(lamp, "sky_color_space", expand=True)
- sub.prop(lamp, "sky_exposure", text="Exposure")
+ sub.prop(lamp, "sky_exposure", text=_("Exposure"))
col = split.column()
col.active = lamp.use_sky
- col.label(text="Horizon:")
+ col.label(text=_("Horizon:"))
sub = col.column()
- sub.prop(lamp, "horizon_brightness", text="Brightness")
- sub.prop(lamp, "spread", text="Spread")
+ sub.prop(lamp, "horizon_brightness", text=_("Brightness"))
+ sub.prop(lamp, "spread", text=_("Spread"))
- col.label(text="Sun:")
+ col.label(text=_("Sun:"))
sub = col.column()
- sub.prop(lamp, "sun_brightness", text="Brightness")
- sub.prop(lamp, "sun_size", text="Size")
- sub.prop(lamp, "backscattered_light", slider=True, text="Back Light")
+ sub.prop(lamp, "sun_brightness", text=_("Brightness"))
+ sub.prop(lamp, "sun_size", text=_("Size"))
+ sub.prop(lamp, "backscattered_light", slider=True, text=_("Back Light"))
layout.separator()
@@ -176,16 +176,16 @@ class DATA_PT_sunsky(DataButtonsPanel, Panel):
col = split.column()
col.active = lamp.use_atmosphere
- col.label(text="Intensity:")
- col.prop(lamp, "sun_intensity", text="Sun")
- col.prop(lamp, "atmosphere_distance_factor", text="Distance")
+ col.label(text=_("Intensity:"))
+ col.prop(lamp, "sun_intensity", text=_("Sun"))
+ col.prop(lamp, "atmosphere_distance_factor", text=_("Distance"))
col = split.column()
col.active = lamp.use_atmosphere
- col.label(text="Scattering:")
+ col.label(text=_("Scattering:"))
sub = col.column(align=True)
- sub.prop(lamp, "atmosphere_inscattering", slider=True, text="Inscattering")
- sub.prop(lamp, "atmosphere_extinction", slider=True, text="Extinction")
+ sub.prop(lamp, "atmosphere_inscattering", slider=True, text=_("Inscattering"))
+ sub.prop(lamp, "atmosphere_extinction", slider=True, text=_("Extinction"))
class DATA_PT_shadow(DataButtonsPanel, Panel):
@@ -209,15 +209,15 @@ class DATA_PT_shadow(DataButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Form factor sampling:")
+ col.label(text=_("Form factor sampling:"))
sub = col.row(align=True)
if lamp.shape == 'SQUARE':
- sub.prop(lamp, "shadow_ray_samples_x", text="Samples")
+ sub.prop(lamp, "shadow_ray_samples_x", text=_("Samples"))
elif lamp.shape == 'RECTANGLE':
- sub.prop(lamp, "shadow_ray_samples_x", text="Samples X")
- sub.prop(lamp, "shadow_ray_samples_y", text="Samples Y")
+ sub.prop(lamp, "shadow_ray_samples_x", text=_("Samples X"))
+ sub.prop(lamp, "shadow_ray_samples_y", text=_("Samples Y"))
if lamp.shadow_method != 'NOSHADOW':
split = layout.split()
@@ -226,34 +226,34 @@ class DATA_PT_shadow(DataButtonsPanel, Panel):
col.prop(lamp, "shadow_color", text="")
col = split.column()
- col.prop(lamp, "use_shadow_layer", text="This Layer Only")
+ col.prop(lamp, "use_shadow_layer", text=_("This Layer Only"))
col.prop(lamp, "use_only_shadow")
if lamp.shadow_method == 'RAY_SHADOW':
split = layout.split()
col = split.column()
- col.label(text="Sampling:")
+ col.label(text=_("Sampling:"))
if lamp.type in {'POINT', 'SUN', 'SPOT'}:
sub = col.row()
- sub.prop(lamp, "shadow_ray_samples", text="Samples")
- sub.prop(lamp, "shadow_soft_size", text="Soft Size")
+ sub.prop(lamp, "shadow_ray_samples", text=_("Samples"))
+ sub.prop(lamp, "shadow_soft_size", text=_("Soft Size"))
elif lamp.type == 'AREA':
sub = col.row(align=True)
if lamp.shape == 'SQUARE':
- sub.prop(lamp, "shadow_ray_samples_x", text="Samples")
+ sub.prop(lamp, "shadow_ray_samples_x", text=_("Samples"))
elif lamp.shape == 'RECTANGLE':
- sub.prop(lamp, "shadow_ray_samples_x", text="Samples X")
- sub.prop(lamp, "shadow_ray_samples_y", text="Samples Y")
+ sub.prop(lamp, "shadow_ray_samples_x", text=_("Samples X"))
+ sub.prop(lamp, "shadow_ray_samples_y", text=_("Samples Y"))
col.row().prop(lamp, "shadow_ray_sample_method", expand=True)
if lamp.shadow_ray_sample_method == 'ADAPTIVE_QMC':
- layout.prop(lamp, "shadow_adaptive_threshold", text="Threshold")
+ layout.prop(lamp, "shadow_adaptive_threshold", text=_("Threshold"))
if lamp.type == 'AREA' and lamp.shadow_ray_sample_method == 'CONSTANT_JITTERED':
row = layout.row()
@@ -263,44 +263,44 @@ class DATA_PT_shadow(DataButtonsPanel, Panel):
elif lamp.shadow_method == 'BUFFER_SHADOW':
col = layout.column()
- col.label(text="Buffer Type:")
+ col.label(text=_("Buffer Type:"))
col.row().prop(lamp, "shadow_buffer_type", expand=True)
if lamp.shadow_buffer_type in {'REGULAR', 'HALFWAY', 'DEEP'}:
split = layout.split()
col = split.column()
- col.label(text="Filter Type:")
+ col.label(text=_("Filter Type:"))
col.prop(lamp, "shadow_filter_type", text="")
sub = col.column(align=True)
- sub.prop(lamp, "shadow_buffer_soft", text="Soft")
- sub.prop(lamp, "shadow_buffer_bias", text="Bias")
+ sub.prop(lamp, "shadow_buffer_soft", text=_("Soft"))
+ sub.prop(lamp, "shadow_buffer_bias", text=_("Bias"))
col = split.column()
- col.label(text="Sample Buffers:")
+ col.label(text=_("Sample Buffers:"))
col.prop(lamp, "shadow_sample_buffers", text="")
sub = col.column(align=True)
- sub.prop(lamp, "shadow_buffer_size", text="Size")
- sub.prop(lamp, "shadow_buffer_samples", text="Samples")
+ sub.prop(lamp, "shadow_buffer_size", text=_("Size"))
+ sub.prop(lamp, "shadow_buffer_samples", text=_("Samples"))
if lamp.shadow_buffer_type == 'DEEP':
col.prop(lamp, "compression_threshold")
elif lamp.shadow_buffer_type == 'IRREGULAR':
- layout.prop(lamp, "shadow_buffer_bias", text="Bias")
+ layout.prop(lamp, "shadow_buffer_bias", text=_("Bias"))
split = layout.split()
col = split.column()
- col.prop(lamp, "use_auto_clip_start", text="Autoclip Start")
+ col.prop(lamp, "use_auto_clip_start", text=_("Autoclip Start"))
sub = col.column()
sub.active = not lamp.use_auto_clip_start
- sub.prop(lamp, "shadow_buffer_clip_start", text="Clip Start")
+ sub.prop(lamp, "shadow_buffer_clip_start", text=_("Clip Start"))
col = split.column()
- col.prop(lamp, "use_auto_clip_end", text="Autoclip End")
+ col.prop(lamp, "use_auto_clip_end", text=_("Autoclip End"))
sub = col.column()
sub.active = not lamp.use_auto_clip_end
- sub.prop(lamp, "shadow_buffer_clip_end", text=" Clip End")
+ sub.prop(lamp, "shadow_buffer_clip_end", text=_(" Clip End"))
class DATA_PT_area(DataButtonsPanel, Panel):
@@ -325,8 +325,8 @@ class DATA_PT_area(DataButtonsPanel, Panel):
if (lamp.shape == 'SQUARE'):
sub.prop(lamp, "size")
elif (lamp.shape == 'RECTANGLE'):
- sub.prop(lamp, "size", text="Size X")
- sub.prop(lamp, "size_y", text="Size Y")
+ sub.prop(lamp, "size", text=_("Size X"))
+ sub.prop(lamp, "size_y", text=_("Size Y"))
class DATA_PT_spot(DataButtonsPanel, Panel):
@@ -348,8 +348,8 @@ class DATA_PT_spot(DataButtonsPanel, Panel):
col = split.column()
sub = col.column()
- sub.prop(lamp, "spot_size", text="Size")
- sub.prop(lamp, "spot_blend", text="Blend", slider=True)
+ sub.prop(lamp, "spot_size", text=_("Size"))
+ sub.prop(lamp, "spot_blend", text=_("Blend"), slider=True)
col.prop(lamp, "use_square")
col.prop(lamp, "show_cone")
@@ -358,9 +358,9 @@ class DATA_PT_spot(DataButtonsPanel, Panel):
col.prop(lamp, "use_halo")
sub = col.column(align=True)
sub.active = lamp.use_halo
- sub.prop(lamp, "halo_intensity", text="Intensity")
+ sub.prop(lamp, "halo_intensity", text=_("Intensity"))
if lamp.shadow_method == 'BUFFER_SHADOW':
- sub.prop(lamp, "halo_step", text="Step")
+ sub.prop(lamp, "halo_step", text=_("Step"))
class DATA_PT_falloff_curve(DataButtonsPanel, Panel):
diff --git a/release/scripts/startup/bl_ui/properties_data_mesh.py b/release/scripts/startup/bl_ui/properties_data_mesh.py
index ff19ece8f94..37c91370979 100644
--- a/release/scripts/startup/bl_ui/properties_data_mesh.py
+++ b/release/scripts/startup/bl_ui/properties_data_mesh.py
@@ -20,10 +20,10 @@
import bpy
from bpy.types import Menu, Panel
from rna_prop_ui import PropertyPanel
-
+from blf import gettext as _
class MESH_MT_vertex_group_specials(Menu):
- bl_label = "Vertex Group Specials"
+ bl_label = _("Vertex Group Specials")
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
def draw(self, context):
@@ -34,7 +34,7 @@ class MESH_MT_vertex_group_specials(Menu):
layout.operator("object.vertex_group_copy_to_linked", icon='LINK_AREA')
layout.operator("object.vertex_group_copy_to_selected", icon='LINK_AREA')
layout.operator("object.vertex_group_mirror", icon='ARROW_LEFTRIGHT')
- layout.operator("object.vertex_group_remove", icon='X', text="Delete All").all = True
+ layout.operator("object.vertex_group_remove", icon='X', text=_("Delete All")).all = True
layout.separator()
layout.operator("object.vertex_group_lock", icon='LOCK', text="Lock All").action = 'SELECT'
layout.operator("object.vertex_group_lock", icon='UNLOCK', text="UnLock All").action = 'DESELECT'
@@ -51,7 +51,7 @@ class MESH_MT_shape_key_specials(Menu):
layout.operator("object.shape_key_transfer", icon='COPY_ID') # icon is not ideal
layout.operator("object.join_shapes", icon='COPY_ID') # icon is not ideal
layout.operator("object.shape_key_mirror", icon='ARROW_LEFTRIGHT')
- op = layout.operator("object.shape_key_add", icon='ZOOMIN', text="New Shape From Mix")
+ op = layout.operator("object.shape_key_add", icon='ZOOMIN', text=_("New Shape From Mix"))
op.from_mix = True
@@ -99,7 +99,7 @@ class DATA_PT_normals(MeshButtonsPanel, Panel):
col.prop(mesh, "use_auto_smooth")
sub = col.column()
sub.active = mesh.use_auto_smooth
- sub.prop(mesh, "auto_smooth_angle", text="Angle")
+ sub.prop(mesh, "auto_smooth_angle", text=_("Angle"))
split.prop(mesh, "show_double_sided")
@@ -120,8 +120,8 @@ class DATA_PT_texture_space(MeshButtonsPanel, Panel):
layout.prop(mesh, "use_auto_texspace")
row = layout.row()
- row.column().prop(mesh, "texspace_location", text="Location")
- row.column().prop(mesh, "texspace_size", text="Size")
+ row.column().prop(mesh, "texspace_location", text=_("Location"))
+ row.column().prop(mesh, "texspace_size", text=_("Size"))
class DATA_PT_vertex_groups(MeshButtonsPanel, Panel):
@@ -163,14 +163,14 @@ class DATA_PT_vertex_groups(MeshButtonsPanel, Panel):
row = layout.row()
sub = row.row(align=True)
- sub.operator("object.vertex_group_assign", text="Assign")
- sub.operator("object.vertex_group_remove_from", text="Remove")
+ sub.operator("object.vertex_group_assign", text=_("Assign"))
+ sub.operator("object.vertex_group_remove_from", text=_("Remove"))
sub = row.row(align=True)
- sub.operator("object.vertex_group_select", text="Select")
- sub.operator("object.vertex_group_deselect", text="Deselect")
+ sub.operator("object.vertex_group_select", text=_("Select"))
+ sub.operator("object.vertex_group_deselect", text=_("Deselect"))
- layout.prop(context.tool_settings, "vertex_group_weight", text="Weight")
+ layout.prop(context.tool_settings, "vertex_group_weight", text=_("Weight"))
class DATA_PT_shape_keys(MeshButtonsPanel, Panel):
@@ -250,13 +250,13 @@ class DATA_PT_shape_keys(MeshButtonsPanel, Panel):
col = split.column(align=True)
col.active = enable_edit_value
- col.label(text="Range:")
- col.prop(kb, "slider_min", text="Min")
- col.prop(kb, "slider_max", text="Max")
+ col.label(text=_("Range:"))
+ col.prop(kb, "slider_min", text=_("Min"))
+ col.prop(kb, "slider_max", text=_("Max"))
col = split.column(align=True)
col.active = enable_edit_value
- col.label(text="Blend:")
+ col.label(text=_("Blend:"))
col.prop_search(kb, "vertex_group", ob, "vertex_groups", text="")
col.prop_search(kb, "relative_key", key, "key_blocks", text="")
diff --git a/release/scripts/startup/bl_ui/properties_data_metaball.py b/release/scripts/startup/bl_ui/properties_data_metaball.py
index cd894e60dbb..693cb697544 100644
--- a/release/scripts/startup/bl_ui/properties_data_metaball.py
+++ b/release/scripts/startup/bl_ui/properties_data_metaball.py
@@ -20,7 +20,7 @@
import bpy
from bpy.types import Panel
from rna_prop_ui import PropertyPanel
-
+from blf import gettext as _
class DataButtonsPanel():
bl_space_type = 'PROPERTIES'
@@ -60,16 +60,16 @@ class DATA_PT_metaball(DataButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Resolution:")
+ col.label(text=_("Resolution:"))
sub = col.column(align=True)
- sub.prop(mball, "resolution", text="View")
- sub.prop(mball, "render_resolution", text="Render")
+ sub.prop(mball, "resolution", text=_("View"))
+ sub.prop(mball, "render_resolution", text=_("Render"))
col = split.column()
- col.label(text="Settings:")
- col.prop(mball, "threshold", text="Threshold")
+ col.label(text=_("Settings:"))
+ col.prop(mball, "threshold", text=_("Threshold"))
- layout.label(text="Update:")
+ layout.label(text=_("Update:"))
layout.prop(mball, "update_method", expand=True)
@@ -86,8 +86,8 @@ class DATA_PT_mball_texture_space(DataButtonsPanel, Panel):
layout.prop(mball, "use_auto_texspace")
row = layout.row()
- row.column().prop(mball, "texspace_location", text="Location")
- row.column().prop(mball, "texspace_size", text="Size")
+ row.column().prop(mball, "texspace_location", text=_("Location"))
+ row.column().prop(mball, "texspace_size", text=_("Size"))
class DATA_PT_metaball_element(DataButtonsPanel, Panel):
@@ -107,25 +107,25 @@ class DATA_PT_metaball_element(DataButtonsPanel, Panel):
split = layout.split()
col = split.column(align=True)
- col.label(text="Settings:")
- col.prop(metaelem, "stiffness", text="Stiffness")
- col.prop(metaelem, "use_negative", text="Negative")
- col.prop(metaelem, "hide", text="Hide")
+ col.label(text=_("Settings:"))
+ col.prop(metaelem, "stiffness", text=_("Stiffness"))
+ col.prop(metaelem, "use_negative", text=_("Negative"))
+ col.prop(metaelem, "hide", text=_("Hide"))
col = split.column(align=True)
if metaelem.type in {'CUBE', 'ELLIPSOID'}:
- col.label(text="Size:")
+ col.label(text=_("Size:"))
col.prop(metaelem, "size_x", text="X")
col.prop(metaelem, "size_y", text="Y")
col.prop(metaelem, "size_z", text="Z")
elif metaelem.type == 'TUBE':
- col.label(text="Size:")
+ col.label(text=_("Size:"))
col.prop(metaelem, "size_x", text="X")
elif metaelem.type == 'PLANE':
- col.label(text="Size:")
+ col.label(text=_("Size:"))
col.prop(metaelem, "size_x", text="X")
col.prop(metaelem, "size_y", text="Y")
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index f0904ca8976..32324411669 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -19,7 +19,7 @@
# <pep8 compliant>
import bpy
from bpy.types import Panel
-
+from blf import gettext as _
class ModifierButtonsPanel():
bl_space_type = 'PROPERTIES'
@@ -51,14 +51,14 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Object:")
+ col.label(text=_("Object:"))
col.prop(md, "object", text="")
col.prop(md, "use_deform_preserve_volume")
col = split.column()
- col.label(text="Bind To:")
- col.prop(md, "use_vertex_groups", text="Vertex Groups")
- col.prop(md, "use_bone_envelopes", text="Bone Envelopes")
+ col.label(text=_("Bind To:"))
+ col.prop(md, "use_vertex_groups", text=_("Vertex Groups"))
+ col.prop(md, "use_bone_envelopes", text=_("Bone Envelopes"))
layout.separator()
@@ -92,11 +92,11 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col.separator()
- col.prop(md, "use_merge_vertices", text="Merge")
+ col.prop(md, "use_merge_vertices", text=_("Merge"))
sub = col.column()
sub.active = md.use_merge_vertices
- sub.prop(md, "use_merge_vertices_cap", text="First Last")
- sub.prop(md, "merge_threshold", text="Distance")
+ sub.prop(md, "use_merge_vertices_cap", text=_("First Last"))
+ sub.prop(md, "merge_threshold", text=_("Distance"))
col = split.column()
col.prop(md, "use_relative_offset")
@@ -122,7 +122,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
split.prop(md, "width")
split.prop(md, "use_only_vertices")
- layout.label(text="Limit Method:")
+ layout.label(text=_("Limit Method:"))
layout.row().prop(md, "limit_method", expand=True)
if md.limit_method == 'ANGLE':
layout.prop(md, "angle_limit")
@@ -133,11 +133,11 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Operation:")
+ col.label(text=_("Operation:"))
col.prop(md, "operation", text="")
col = split.column()
- col.label(text="Object:")
+ col.label(text=_("Object:"))
col.prop(md, "object", text="")
def BUILD(self, layout, ob, md):
@@ -156,7 +156,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
def CAST(self, layout, ob, md):
split = layout.split(percentage=0.25)
- split.label(text="Cast Type:")
+ split.label(text=_("Cast Type:"))
split.prop(md, "cast_type", text="")
split = layout.split(percentage=0.25)
@@ -175,52 +175,52 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Vertex Group:")
+ col.label(text=_("Vertex Group:"))
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
col = split.column()
- col.label(text="Control Object:")
+ col.label(text=_("Control Object:"))
col.prop(md, "object", text="")
if md.object:
col.prop(md, "use_transform")
def CLOTH(self, layout, ob, md):
- layout.label(text="Settings can be found inside the Physics context")
+ layout.label(text=_("Settings can be found inside the Physics context"))
def COLLISION(self, layout, ob, md):
- layout.label(text="Settings can be found inside the Physics context")
+ layout.label(text=_("Settings can be found inside the Physics context"))
def CURVE(self, layout, ob, md):
split = layout.split()
col = split.column()
- col.label(text="Object:")
+ col.label(text=_("Object:"))
col.prop(md, "object", text="")
col = split.column()
- col.label(text="Vertex Group:")
+ col.label(text=_("Vertex Group:"))
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- layout.label(text="Deformation Axis:")
+ layout.label(text=_("Deformation Axis:"))
layout.row().prop(md, "deform_axis", expand=True)
def DECIMATE(self, layout, ob, md):
layout.prop(md, "ratio")
- layout.label(text="Face Count: %s" % str(md.face_count))
+ layout.label(text=_("Face Count")+": %s" % str(md.face_count))
def DISPLACE(self, layout, ob, md):
split = layout.split()
col = split.column()
- col.label(text="Texture:")
+ col.label(text=_("Texture:"))
col.template_ID(md, "texture", new="texture.new")
- col.label(text="Vertex Group:")
+ col.label(text=_("Vertex Group:"))
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
col = split.column()
- col.label(text="Direction:")
+ col.label(text=_("Direction:"))
col.prop(md, "direction", text="")
- col.label(text="Texture Coordinates:")
+ col.label(text=_("Texture Coordinates:"))
col.prop(md, "texture_coords", text="")
if md.texture_coords == 'OBJECT':
- layout.prop(md, "texture_coords_object", text="Object")
+ layout.prop(md, "texture_coords_object", text=_("Object"))
elif md.texture_coords == 'UV' and ob.type == 'MESH':
layout.prop_search(md, "uv_layer", ob.data, "uv_textures")
@@ -234,23 +234,23 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.prop(md, "use_edge_angle", text="Edge Angle")
+ col.prop(md, "use_edge_angle", text=_("Edge Angle"))
sub = col.column()
sub.active = md.use_edge_angle
sub.prop(md, "split_angle")
- split.prop(md, "use_edge_sharp", text="Sharp Edges")
+ split.prop(md, "use_edge_sharp", text=_("Sharp Edges"))
def EXPLODE(self, layout, ob, md):
split = layout.split()
col = split.column()
- col.label(text="Vertex group:")
+ col.label(text=_("Vertex group:"))
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
sub = col.column()
sub.active = bool(md.vertex_group)
sub.prop(md, "protect")
- col.label(text="Particle UV")
+ col.label(text=_("Particle UV"))
col.prop_search(md, "particle_uv", ob.data, "uv_textures", text="")
col = split.column()
@@ -260,22 +260,22 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col.prop(md, "show_dead")
col.prop(md, "use_size")
- layout.operator("object.explode_refresh", text="Refresh")
+ layout.operator("object.explode_refresh", text=_("Refresh"))
def FLUID_SIMULATION(self, layout, ob, md):
- layout.label(text="Settings can be found inside the Physics context")
+ layout.label(text=_("Settings can be found inside the Physics context"))
def HOOK(self, layout, ob, md):
split = layout.split()
col = split.column()
- col.label(text="Object:")
+ col.label(text=_("Object:"))
col.prop(md, "object", text="")
if md.object and md.object.type == 'ARMATURE':
- col.label(text="Bone:")
+ col.label(text=_("Bone:"))
col.prop_search(md, "subtarget", md.object.data, "bones", text="")
col = split.column()
- col.label(text="Vertex Group:")
+ col.label(text=_("Vertex Group:"))
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
layout.separator()
@@ -287,38 +287,38 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col.prop(md, "force", slider=True)
col = split.column()
- col.operator("object.hook_reset", text="Reset")
- col.operator("object.hook_recenter", text="Recenter")
+ col.operator("object.hook_reset", text=_("Reset"))
+ col.operator("object.hook_recenter", text=_("Recenter"))
if ob.mode == 'EDIT':
layout.separator()
row = layout.row()
- row.operator("object.hook_select", text="Select")
- row.operator("object.hook_assign", text="Assign")
+ row.operator("object.hook_select", text=_("Select"))
+ row.operator("object.hook_assign", text=_("Assign"))
def LATTICE(self, layout, ob, md):
split = layout.split()
col = split.column()
- col.label(text="Object:")
+ col.label(text=_("Object:"))
col.prop(md, "object", text="")
col = split.column()
- col.label(text="Vertex Group:")
+ col.label(text=_("Vertex Group:"))
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
def MASK(self, layout, ob, md):
split = layout.split()
col = split.column()
- col.label(text="Mode:")
+ col.label(text=_("Mode:"))
col.prop(md, "mode", text="")
col = split.column()
if md.mode == 'ARMATURE':
- col.label(text="Armature:")
+ col.label(text=_("Armature:"))
col.prop(md, "armature", text="")
elif md.mode == 'VERTEX_GROUP':
- col.label(text="Vertex Group:")
+ col.label(text=_("Vertex Group:"))
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
sub = col.column()
@@ -330,11 +330,11 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col = split.column()
sub = col.column()
- sub.label(text="Object:")
+ sub.label(text=_("Object:"))
sub.prop(md, "object", text="")
sub.active = not md.is_bound
col = split.column()
- col.label(text="Vertex Group:")
+ col.label(text=_("Vertex Group:"))
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
sub = col.column()
@@ -344,9 +344,9 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
layout.separator()
if md.is_bound:
- layout.operator("object.meshdeform_bind", text="Unbind")
+ layout.operator("object.meshdeform_bind", text=_("Unbind"))
else:
- layout.operator("object.meshdeform_bind", text="Bind")
+ layout.operator("object.meshdeform_bind", text=_("Bind"))
row = layout.row()
row.prop(md, "precision")
@@ -356,19 +356,19 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
split = layout.split(percentage=0.25)
col = split.column()
- col.label(text="Axis:")
+ col.label(text=_("Axis:"))
col.prop(md, "use_x")
col.prop(md, "use_y")
col.prop(md, "use_z")
col = split.column()
- col.label(text="Options:")
- col.prop(md, "use_mirror_merge", text="Merge")
- col.prop(md, "use_clip", text="Clipping")
- col.prop(md, "use_mirror_vertex_groups", text="Vertex Groups")
+ col.label(text=_("Options:"))
+ col.prop(md, "use_mirror_merge", text=_("Merge"))
+ col.prop(md, "use_clip", text=_("Clipping"))
+ col.prop(md, "use_mirror_vertex_groups", text=_("Vertex Groups"))
col = split.column()
- col.label(text="Textures:")
+ col.label(text=_("Textures:"))
col.prop(md, "use_mirror_u", text="U")
col.prop(md, "use_mirror_v", text="V")
@@ -376,7 +376,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
if md.use_mirror_merge == True:
col.prop(md, "merge_threshold")
- col.label(text="Mirror Object:")
+ col.label(text=_("Mirror Object:"))
col.prop(md, "mirror_object", text="")
def NAVMESH(self, layout, ob, md):
@@ -388,17 +388,17 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.prop(md, "levels", text="Preview")
- col.prop(md, "sculpt_levels", text="Sculpt")
- col.prop(md, "render_levels", text="Render")
+ col.prop(md, "levels", text=_("Preview"))
+ col.prop(md, "sculpt_levels", text=_("Sculpt"))
+ col.prop(md, "render_levels", text=_("Render"))
col = split.column()
col.enabled = ob.mode != 'EDIT'
- col.operator("object.multires_subdivide", text="Subdivide")
- col.operator("object.multires_higher_levels_delete", text="Delete Higher")
- col.operator("object.multires_reshape", text="Reshape")
- col.operator("object.multires_base_apply", text="Apply Base")
+ col.operator("object.multires_subdivide", text=_("Subdivide"))
+ col.operator("object.multires_higher_levels_delete", text=_("Delete Higher"))
+ col.operator("object.multires_reshape", text=_("Reshape"))
+ col.operator("object.multires_base_apply", text=_("Apply Base"))
col.prop(md, "use_subsurf_uv")
col.prop(md, "show_only_control_edges")
@@ -407,34 +407,34 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col = layout.column()
row = col.row()
if md.is_external:
- row.operator("object.multires_external_pack", text="Pack External")
+ row.operator("object.multires_external_pack", text=_("Pack External"))
row.label()
row = col.row()
row.prop(md, "filepath", text="")
else:
- row.operator("object.multires_external_save", text="Save External...")
+ row.operator("object.multires_external_save", text=_("Save External..."))
row.label()
def PARTICLE_INSTANCE(self, layout, ob, md):
layout.prop(md, "object")
- layout.prop(md, "particle_system_index", text="Particle System")
+ layout.prop(md, "particle_system_index", text=_("Particle System"))
split = layout.split()
col = split.column()
- col.label(text="Create From:")
+ col.label(text=_("Create From:"))
col.prop(md, "use_normal")
col.prop(md, "use_children")
col.prop(md, "use_size")
col = split.column()
- col.label(text="Show Particles When:")
+ col.label(text=_("Show Particles When:"))
col.prop(md, "show_alive")
col.prop(md, "show_unborn")
col.prop(md, "show_dead")
layout.separator()
- layout.prop(md, "use_path", text="Create Along Paths")
+ layout.prop(md, "use_path", text=_("Create Along Paths"))
split = layout.split()
split.active = md.use_path
@@ -444,17 +444,17 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col = split.column()
col.prop(md, "position", slider=True)
- col.prop(md, "random_position", text="Random", slider=True)
+ col.prop(md, "random_position", text=_("Random"), slider=True)
def PARTICLE_SYSTEM(self, layout, ob, md):
- layout.label(text="Settings can be found inside the Particle context")
+ layout.label(text=_("Settings can be found inside the Particle context"))
def SCREW(self, layout, ob, md):
split = layout.split()
col = split.column()
col.prop(md, "axis")
- col.prop(md, "object", text="AxisOb")
+ col.prop(md, "object", text=_("AxisOb"))
col.prop(md, "angle")
col.prop(md, "steps")
col.prop(md, "render_steps")
@@ -473,10 +473,10 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
def SHRINKWRAP(self, layout, ob, md):
split = layout.split()
col = split.column()
- col.label(text="Target:")
+ col.label(text=_("Target:"))
col.prop(md, "target", text="")
col = split.column()
- col.label(text="Vertex Group:")
+ col.label(text=_("Vertex Group:"))
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
split = layout.split()
@@ -486,28 +486,28 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col.prop(md, "subsurf_levels")
col = split.column()
- col.label(text="Mode:")
+ col.label(text=_("Mode:"))
col.prop(md, "wrap_method", text="")
if md.wrap_method == 'PROJECT':
split = layout.split(percentage=0.25)
col = split.column()
- col.label(text="Axis:")
+ col.label(text=_("Axis:"))
col.prop(md, "use_project_x")
col.prop(md, "use_project_y")
col.prop(md, "use_project_z")
col = split.column()
- col.label(text="Direction:")
+ col.label(text=_("Direction:"))
col.prop(md, "use_negative_direction")
col.prop(md, "use_positive_direction")
col = split.column()
- col.label(text="Cull Faces:")
+ col.label(text=_("Cull Faces:"))
col.prop(md, "cull_face", expand=True)
- layout.label(text="Auxiliary Target:")
+ layout.label(text=_("Auxiliary Target:"))
layout.prop(md, "auxiliary_target", text="")
elif md.wrap_method == 'NEAREST_SURFACEPOINT':
@@ -517,24 +517,24 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Mode:")
+ col.label(text=_("Mode:"))
col.prop(md, "deform_method", text="")
col = split.column()
- col.label(text="Vertex Group:")
+ col.label(text=_("Vertex Group:"))
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
split = layout.split()
col = split.column()
- col.label(text="Origin:")
+ col.label(text=_("Origin:"))
col.prop(md, "origin", text="")
sub = col.column()
sub.active = (md.origin is not None)
sub.prop(md, "use_relative")
col = split.column()
- col.label(text="Deform:")
+ col.label(text=_("Deform:"))
col.prop(md, "factor")
col.prop(md, "limits", slider=True)
if md.deform_method in {'TAPER', 'STRETCH'}:
@@ -542,13 +542,13 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col.prop(md, "lock_y")
def SMOKE(self, layout, ob, md):
- layout.label(text="Settings can be found inside the Physics context")
+ layout.label(text=_("Settings can be found inside the Physics context"))
def SMOOTH(self, layout, ob, md):
split = layout.split(percentage=0.25)
col = split.column()
- col.label(text="Axis:")
+ col.label(text=_("Axis:"))
col.prop(md, "use_x")
col.prop(md, "use_y")
col.prop(md, "use_z")
@@ -556,11 +556,11 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col = split.column()
col.prop(md, "factor")
col.prop(md, "iterations")
- col.label(text="Vertex Group:")
+ col.label(text=_("Vertex Group:"))
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
def SOFT_BODY(self, layout, ob, md):
- layout.label(text="Settings can be found inside the Physics context")
+ layout.label(text=_("Settings can be found inside the Physics context"))
def SOLIDIFY(self, layout, ob, md):
split = layout.split()
@@ -569,19 +569,19 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col.prop(md, "thickness")
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- col.label(text="Crease:")
- col.prop(md, "edge_crease_inner", text="Inner")
- col.prop(md, "edge_crease_outer", text="Outer")
- col.prop(md, "edge_crease_rim", text="Rim")
- col.label(text="Material Index Offset:")
+ col.label(text=_("Crease:"))
+ col.prop(md, "edge_crease_inner", text=_("Inner"))
+ col.prop(md, "edge_crease_outer", text=_("Outer"))
+ col.prop(md, "edge_crease_rim", text=_("Rim"))
+ col.label(text=_("Material Index Offset:"))
col = split.column()
col.prop(md, "offset")
sub = col.column()
sub.active = bool(md.vertex_group)
- sub.prop(md, "invert_vertex_group", text="Invert")
- sub.prop(md, "thickness_vertex_group", text="Factor")
+ sub.prop(md, "invert_vertex_group", text=_("Invert"))
+ sub.prop(md, "thickness_vertex_group", text=_("Factor"))
col.prop(md, "use_even_offset")
col.prop(md, "use_quality_normals")
@@ -592,64 +592,64 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
row.prop(md, "material_offset", text="")
row = row.row()
row.active = md.use_rim
- row.prop(md, "material_offset_rim", text="Rim")
+ row.prop(md, "material_offset_rim", text=_("Rim"))
def SUBSURF(self, layout, ob, md):
layout.row().prop(md, "subdivision_type", expand=True)
split = layout.split()
col = split.column()
- col.label(text="Subdivisions:")
- col.prop(md, "levels", text="View")
- col.prop(md, "render_levels", text="Render")
+ col.label(text=_("Subdivisions:"))
+ col.prop(md, "levels", text=_("View"))
+ col.prop(md, "render_levels", text=_("Render"))
col = split.column()
- col.label(text="Options:")
+ col.label(text=_("Options:"))
col.prop(md, "use_subsurf_uv")
col.prop(md, "show_only_control_edges")
def SURFACE(self, layout, ob, md):
- layout.label(text="Settings can be found inside the Physics context")
+ layout.label(text=_("Settings can be found inside the Physics context"))
def UV_PROJECT(self, layout, ob, md):
split = layout.split()
col = split.column()
- col.label(text="Image:")
+ col.label(text=_("Image:"))
col.prop(md, "image", text="")
col = split.column()
- col.label(text="UV Layer:")
+ col.label(text=_("UV Layer:"))
col.prop_search(md, "uv_layer", ob.data, "uv_textures", text="")
split = layout.split()
col = split.column()
col.prop(md, "use_image_override")
- col.prop(md, "projector_count", text="Projectors")
+ col.prop(md, "projector_count", text=_("Projectors"))
for proj in md.projectors:
col.prop(proj, "object", text="")
col = split.column()
sub = col.column(align=True)
- sub.prop(md, "aspect_x", text="Aspect X")
- sub.prop(md, "aspect_y", text="Aspect Y")
+ sub.prop(md, "aspect_x", text=_("Aspect X"))
+ sub.prop(md, "aspect_y", text=_("Aspect Y"))
sub = col.column(align=True)
- sub.prop(md, "scale_x", text="Scale X")
- sub.prop(md, "scale_y", text="Scale Y")
+ sub.prop(md, "scale_x", text=_("Scale X"))
+ sub.prop(md, "scale_y", text=_("Scale Y"))
def WARP(self, layout, ob, md):
use_falloff = (md.falloff_type != 'NONE')
split = layout.split()
col = split.column()
- col.label(text="From:")
+ col.label(text=_("From:"))
col.prop(md, "object_from", text="")
col.prop(md, "use_volume_preserve")
col = split.column()
- col.label(text="To:")
+ col.label(text=_("To:"))
col.prop(md, "object_to", text="")
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
@@ -668,15 +668,15 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
# 2 new columns
split = layout.split()
col = split.column()
- col.label(text="Texture:")
+ col.label(text=_("Texture:"))
col.prop(md, "texture", text="")
col = split.column()
- col.label(text="Texture Coordinates:")
+ col.label(text=_("Texture Coordinates:"))
col.prop(md, "texture_coords", text="")
if md.texture_coords == 'OBJECT':
- layout.prop(md, "texture_coords_object", text="Object")
+ layout.prop(md, "texture_coords_object", text=_("Object"))
elif md.texture_coords == 'UV' and ob.type == 'MESH':
layout.prop_search(md, "uv_layer", ob.data, "uv_textures")
@@ -684,7 +684,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Motion:")
+ col.label(text=_("Motion:"))
col.prop(md, "use_x")
col.prop(md, "use_y")
col.prop(md, "use_cyclic")
@@ -700,18 +700,18 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Time:")
+ col.label(text=_("Time:"))
sub = col.column(align=True)
- sub.prop(md, "time_offset", text="Offset")
- sub.prop(md, "lifetime", text="Life")
- col.prop(md, "damping_time", text="Damping")
+ sub.prop(md, "time_offset", text=_("Offset"))
+ sub.prop(md, "lifetime", text=_("Life"))
+ col.prop(md, "damping_time", text=_("Damping"))
col = split.column()
- col.label(text="Position:")
+ col.label(text=_("Position:"))
sub = col.column(align=True)
sub.prop(md, "start_position_x", text="X")
sub.prop(md, "start_position_y", text="Y")
- col.prop(md, "falloff_radius", text="Falloff")
+ col.prop(md, "falloff_radius", text=_("Falloff"))
layout.separator()
@@ -719,7 +719,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
layout.prop_search(md, "vertex_group", ob, "vertex_groups")
split = layout.split(percentage=0.33)
col = split.column()
- col.label(text="Texture")
+ col.label(text=_("Texture"))
col = split.column()
col.template_ID(md, "texture", new="texture.new")
layout.prop(md, "texture_coords")
diff --git a/release/scripts/startup/bl_ui/properties_game.py b/release/scripts/startup/bl_ui/properties_game.py
index 26b95484b28..95ae54c4597 100644
--- a/release/scripts/startup/bl_ui/properties_game.py
+++ b/release/scripts/startup/bl_ui/properties_game.py
@@ -19,7 +19,7 @@
# <pep8 compliant>
import bpy
from bpy.types import Panel
-
+from blf import gettext as _
class PhysicsButtonsPanel():
bl_space_type = 'PROPERTIES'
@@ -54,7 +54,7 @@ class PHYSICS_PT_game_physics(PhysicsButtonsPanel, Panel):
col = split.column()
col.prop(game, "use_actor")
col.prop(game, "use_ghost")
- col.prop(ob, "hide_render", text="Invisible") # out of place but useful
+ col.prop(ob, "hide_render", text=_("Invisible")) # out of place but useful
col = split.column()
col.prop(game, "use_material_physics_fh")
@@ -66,7 +66,7 @@ class PHYSICS_PT_game_physics(PhysicsButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Attributes:")
+ col.label(text=_("Attributes:"))
col.prop(game, "mass")
col.prop(game, "radius")
col.prop(game, "form_factor")
@@ -81,29 +81,29 @@ class PHYSICS_PT_game_physics(PhysicsButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Velocity:")
+ col.label(text=_("Velocity:"))
sub = col.column(align=True)
- sub.prop(game, "velocity_min", text="Minimum")
- sub.prop(game, "velocity_max", text="Maximum")
+ sub.prop(game, "velocity_min", text=_("Minimum"))
+ sub.prop(game, "velocity_max", text=_("Maximum"))
col = split.column()
- col.label(text="Damping:")
+ col.label(text=_("Damping:"))
sub = col.column(align=True)
- sub.prop(game, "damping", text="Translation", slider=True)
- sub.prop(game, "rotation_damping", text="Rotation", slider=True)
+ sub.prop(game, "damping", text=_("Translation"), slider=True)
+ sub.prop(game, "rotation_damping", text=_("Rotation"), slider=True)
layout.separator()
split = layout.split()
col = split.column()
- col.label(text="Lock Translation:")
+ col.label(text=_("Lock Translation:"))
col.prop(game, "lock_location_x", text="X")
col.prop(game, "lock_location_y", text="Y")
col.prop(game, "lock_location_z", text="Z")
col = split.column()
- col.label(text="Lock Rotation:")
+ col.label(text=_("Lock Rotation:"))
col.prop(game, "lock_rotation_x", text="X")
col.prop(game, "lock_rotation_y", text="Y")
col.prop(game, "lock_rotation_z", text="Z")
@@ -112,21 +112,21 @@ class PHYSICS_PT_game_physics(PhysicsButtonsPanel, Panel):
col = layout.column()
col.prop(game, "use_actor")
col.prop(game, "use_ghost")
- col.prop(ob, "hide_render", text="Invisible")
+ col.prop(ob, "hide_render", text=_("Invisible"))
layout.separator()
split = layout.split()
col = split.column()
- col.label(text="Attributes:")
+ col.label(text=_("Attributes:"))
col.prop(game, "mass")
col.prop(soft, "weld_threshold")
col.prop(soft, "location_iterations")
col.prop(soft, "linear_stiffness", slider=True)
col.prop(soft, "dynamic_friction", slider=True)
col.prop(soft, "collision_margin", slider=True)
- col.prop(soft, "use_bending_constraints", text="Bending Constraints")
+ col.prop(soft, "use_bending_constraints", text=_("Bending Constraints"))
col = split.column()
col.prop(soft, "use_shape_match")
@@ -136,25 +136,25 @@ class PHYSICS_PT_game_physics(PhysicsButtonsPanel, Panel):
col.separator()
- col.label(text="Cluster Collision:")
+ col.label(text=_("Cluster Collision:"))
col.prop(soft, "use_cluster_rigid_to_softbody")
col.prop(soft, "use_cluster_soft_to_softbody")
sub = col.column()
sub.active = (soft.use_cluster_rigid_to_softbody or soft.use_cluster_soft_to_softbody)
- sub.prop(soft, "cluster_iterations", text="Iterations")
+ sub.prop(soft, "cluster_iterations", text=_("Iterations"))
elif game.physics_type == 'STATIC':
col = layout.column()
col.prop(game, "use_actor")
col.prop(game, "use_ghost")
- col.prop(ob, "hide_render", text="Invisible")
+ col.prop(ob, "hide_render", text=_("Invisible"))
layout.separator()
split = layout.split()
col = split.column()
- col.label(text="Attributes:")
+ col.label(text=_("Attributes:"))
col.prop(game, "radius")
col = split.column()
@@ -165,7 +165,7 @@ class PHYSICS_PT_game_physics(PhysicsButtonsPanel, Panel):
subsub.prop(game, "friction_coefficients", text="", slider=True)
elif game.physics_type in {'SENSOR', 'INVISIBLE', 'NO_COLLISION', 'OCCLUDE'}:
- layout.prop(ob, "hide_render", text="Invisible")
+ layout.prop(ob, "hide_render", text=_("Invisible"))
class PHYSICS_PT_game_collision_bounds(PhysicsButtonsPanel, Panel):
@@ -189,11 +189,11 @@ class PHYSICS_PT_game_collision_bounds(PhysicsButtonsPanel, Panel):
game = context.active_object.game
layout.active = game.use_collision_bounds
- layout.prop(game, "collision_bounds_type", text="Bounds")
+ layout.prop(game, "collision_bounds_type", text=_("Bounds"))
row = layout.row()
- row.prop(game, "collision_margin", text="Margin", slider=True)
- row.prop(game, "use_collision_compound", text="Compound")
+ row.prop(game, "collision_margin", text=_("Margin"), slider=True)
+ row.prop(game, "use_collision_compound", text=_("Compound"))
class PHYSICS_PT_game_obstacles(PhysicsButtonsPanel, Panel):
@@ -242,7 +242,7 @@ class RENDER_PT_game(RenderButtonsPanel, Panel):
layout = self.layout
row = layout.row()
- row.operator("view3d.game_start", text="Start")
+ row.operator("view3d.game_start", text=_("Start"))
row.label()
@@ -260,20 +260,20 @@ class RENDER_PT_game_player(RenderButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Resolution:")
+ col.label(text=_("Resolution:"))
sub = col.column(align=True)
sub.prop(gs, "resolution_x", slider=False, text="X")
sub.prop(gs, "resolution_y", slider=False, text="Y")
col = split.column()
- col.label(text="Quality:")
+ col.label(text=_("Quality:"))
sub = col.column(align=True)
- sub.prop(gs, "depth", text="Bit Depth", slider=False)
- sub.prop(gs, "frequency", text="FPS", slider=False)
+ sub.prop(gs, "depth", text=_("Bit Depth"), slider=False)
+ sub.prop(gs, "frequency", text=_("FPS"), slider=False)
# framing:
col = layout.column()
- col.label(text="Framing:")
+ col.label(text=_("Framing:"))
col.row().prop(gs, "frame_type", expand=True)
if gs.frame_type == 'LETTERBOX':
col.prop(gs, "frame_color", text="")
@@ -299,7 +299,7 @@ class RENDER_PT_game_stereo(RenderButtonsPanel, Panel):
# dome:
elif stereo_mode == 'DOME':
- layout.prop(gs, "dome_mode", text="Dome Type")
+ layout.prop(gs, "dome_mode", text=_("Dome Type"))
dome_type = gs.dome_mode
@@ -310,23 +310,23 @@ class RENDER_PT_game_stereo(RenderButtonsPanel, Panel):
dome_type == 'TRUNCATED_FRONT':
col = split.column()
- col.prop(gs, "dome_buffer_resolution", text="Resolution", slider=True)
+ col.prop(gs, "dome_buffer_resolution", text=_("Resolution"), slider=True)
col.prop(gs, "dome_angle", slider=True)
col = split.column()
- col.prop(gs, "dome_tesselation", text="Tesselation")
+ col.prop(gs, "dome_tesselation", text=_("Tesselation"))
col.prop(gs, "dome_tilt")
elif dome_type == 'PANORAM_SPH':
col = split.column()
- col.prop(gs, "dome_buffer_resolution", text="Resolution", slider=True)
+ col.prop(gs, "dome_buffer_resolution", text=_("Resolution"), slider=True)
col = split.column()
- col.prop(gs, "dome_tesselation", text="Tesselation")
+ col.prop(gs, "dome_tesselation", text=_("Tesselation"))
else: # cube map
col = split.column()
- col.prop(gs, "dome_buffer_resolution", text="Resolution", slider=True)
+ col.prop(gs, "dome_buffer_resolution", text=_("Resolution"), slider=True)
col = split.column()
@@ -348,15 +348,15 @@ class RENDER_PT_game_shading(RenderButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.prop(gs, "use_glsl_lights", text="Lights")
- col.prop(gs, "use_glsl_shaders", text="Shaders")
- col.prop(gs, "use_glsl_shadows", text="Shadows")
- col.prop(gs, "use_glsl_color_management", text="Color Management")
+ col.prop(gs, "use_glsl_lights", text=_("Lights"))
+ col.prop(gs, "use_glsl_shaders", text=_("Shaders"))
+ col.prop(gs, "use_glsl_shadows", text=_("Shadows"))
+ col.prop(gs, "use_glsl_color_management", text=_("Color Management"))
col = split.column()
- col.prop(gs, "use_glsl_ramps", text="Ramps")
- col.prop(gs, "use_glsl_nodes", text="Nodes")
- col.prop(gs, "use_glsl_extra_textures", text="Extra Textures")
+ col.prop(gs, "use_glsl_ramps", text=_("Ramps"))
+ col.prop(gs, "use_glsl_nodes", text=_("Nodes"))
+ col.prop(gs, "use_glsl_extra_textures", text=_("Extra Textures"))
class RENDER_PT_game_performance(RenderButtonsPanel, Panel):
@@ -384,11 +384,11 @@ class RENDER_PT_game_display(RenderButtonsPanel, Panel):
gs = context.scene.game_settings
flow = layout.column_flow()
- flow.prop(gs, "show_debug_properties", text="Debug Properties")
- flow.prop(gs, "show_framerate_profile", text="Framerate and Profile")
- flow.prop(gs, "show_physics_visualization", text="Physics Visualization")
+ flow.prop(gs, "show_debug_properties", text=_("Debug Properties"))
+ flow.prop(gs, "show_framerate_profile", text=_("Framerate and Profile"))
+ flow.prop(gs, "show_physics_visualization", text=_("Physics Visualization"))
flow.prop(gs, "use_deprecation_warnings")
- flow.prop(gs, "show_mouse", text="Mouse Cursor")
+ flow.prop(gs, "show_mouse", text=_("Mouse Cursor"))
class SceneButtonsPanel():
@@ -546,37 +546,37 @@ class WORLD_PT_game_physics(WorldButtonsPanel, Panel):
layout.prop(gs, "physics_engine")
if gs.physics_engine != 'NONE':
- layout.prop(gs, "physics_gravity", text="Gravity")
+ layout.prop(gs, "physics_gravity", text=_("Gravity"))
split = layout.split()
col = split.column()
- col.label(text="Physics Steps:")
+ col.label(text=_("Physics Steps:"))
sub = col.column(align=True)
- sub.prop(gs, "physics_step_max", text="Max")
- sub.prop(gs, "physics_step_sub", text="Substeps")
- col.prop(gs, "fps", text="FPS")
+ sub.prop(gs, "physics_step_max", text=_("Max"))
+ sub.prop(gs, "physics_step_sub", text=_("Substeps"))
+ col.prop(gs, "fps", text=_("FPS"))
col = split.column()
- col.label(text="Logic Steps:")
- col.prop(gs, "logic_step_max", text="Max")
+ col.label(text=_("Logic Steps:"))
+ col.prop(gs, "logic_step_max", text=_("Max"))
col = layout.column()
- col.prop(gs, "use_occlusion_culling", text="Occlusion Culling")
+ col.prop(gs, "use_occlusion_culling", text=_("Occlusion Culling"))
sub = col.column()
sub.active = gs.use_occlusion_culling
- sub.prop(gs, "occlusion_culling_resolution", text="Resolution")
+ sub.prop(gs, "occlusion_culling_resolution", text=_("Resolution"))
else:
split = layout.split()
col = split.column()
- col.label(text="Physics Steps:")
- col.prop(gs, "fps", text="FPS")
+ col.label(text=_("Physics Steps:"))
+ col.prop(gs, "fps", text=_("FPS"))
col = split.column()
- col.label(text="Logic Steps:")
- col.prop(gs, "logic_step_max", text="Max")
+ col.label(text=_("Logic Steps:"))
+ col.prop(gs, "logic_step_max", text=_("Max"))
class WORLD_PT_game_physics_obstacles(WorldButtonsPanel, Panel):
diff --git a/release/scripts/startup/bl_ui/properties_material.py b/release/scripts/startup/bl_ui/properties_material.py
index 68d7d5d4615..7b04c990c6a 100644
--- a/release/scripts/startup/bl_ui/properties_material.py
+++ b/release/scripts/startup/bl_ui/properties_material.py
@@ -20,7 +20,7 @@
import bpy
from bpy.types import Menu, Panel
from rna_prop_ui import PropertyPanel
-
+from blf import gettext as _
def active_node_mat(mat):
# TODO, 2.4x has a pipeline section, for 2.5 we need to communicate
@@ -114,9 +114,9 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel, Panel):
if ob.mode == 'EDIT':
row = layout.row(align=True)
- row.operator("object.material_slot_assign", text="Assign")
- row.operator("object.material_slot_select", text="Select")
- row.operator("object.material_slot_deselect", text="Deselect")
+ row.operator("object.material_slot_assign", text=_("Assign"))
+ row.operator("object.material_slot_select", text=_("Select"))
+ row.operator("object.material_slot_deselect", text=_("Deselect"))
split = layout.split(percentage=0.65)
@@ -142,7 +142,7 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel, Panel):
if mat.active_node_material:
row.prop(mat.active_node_material, "name", text="")
else:
- row.label(text="No material node selected")
+ row.label(text=_("No material node selected"))
class MATERIAL_PT_preview(MaterialButtonsPanel, Panel):
@@ -197,8 +197,8 @@ class MATERIAL_PT_pipeline(MaterialButtonsPanel, Panel):
col = split.column()
col.active = mat_type
- col.prop(mat, "use_cast_shadows_only", text="Cast Only")
- col.prop(mat, "shadow_cast_alpha", text="Casting Alpha")
+ col.prop(mat, "use_cast_shadows_only", text=_("Cast Only"))
+ col.prop(mat, "shadow_cast_alpha", text=_("Casting Alpha"))
col.prop(mat, "use_cast_buffer_shadows")
col.prop(mat, "use_cast_approximate")
col.prop(mat, "pass_index")
@@ -225,12 +225,12 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel, Panel):
col.prop(mat, "diffuse_color", text="")
sub = col.column()
sub.active = (not mat.use_shadeless)
- sub.prop(mat, "diffuse_intensity", text="Intensity")
+ sub.prop(mat, "diffuse_intensity", text=_("Intensity"))
col = split.column()
col.active = (not mat.use_shadeless)
col.prop(mat, "diffuse_shader", text="")
- col.prop(mat, "use_diffuse_ramp", text="Ramp")
+ col.prop(mat, "use_diffuse_ramp", text=_("Ramp"))
col = layout.column()
col.active = (not mat.use_shadeless)
@@ -240,12 +240,12 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel, Panel):
col.prop(mat, "darkness")
elif mat.diffuse_shader == 'TOON':
row = col.row()
- row.prop(mat, "diffuse_toon_size", text="Size")
- row.prop(mat, "diffuse_toon_smooth", text="Smooth")
+ row.prop(mat, "diffuse_toon_size", text=_("Size"))
+ row.prop(mat, "diffuse_toon_smooth", text=_("Smooth"))
elif mat.diffuse_shader == 'FRESNEL':
row = col.row()
- row.prop(mat, "diffuse_fresnel", text="Fresnel")
- row.prop(mat, "diffuse_fresnel_factor", text="Factor")
+ row.prop(mat, "diffuse_fresnel", text=_("Fresnel"))
+ row.prop(mat, "diffuse_fresnel_factor", text=_("Factor"))
if mat.use_diffuse_ramp:
col = layout.column()
@@ -255,10 +255,10 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel, Panel):
col.separator()
row = col.row()
- row.prop(mat, "diffuse_ramp_input", text="Input")
- row.prop(mat, "diffuse_ramp_blend", text="Blend")
+ row.prop(mat, "diffuse_ramp_input", text=_("Input"))
+ row.prop(mat, "diffuse_ramp_blend", text=_("Blend"))
- col.prop(mat, "diffuse_ramp_factor", text="Factor")
+ col.prop(mat, "diffuse_ramp_factor", text=_("Factor"))
class MATERIAL_PT_specular(MaterialButtonsPanel, Panel):
@@ -282,25 +282,25 @@ class MATERIAL_PT_specular(MaterialButtonsPanel, Panel):
col = split.column()
col.prop(mat, "specular_color", text="")
- col.prop(mat, "specular_intensity", text="Intensity")
+ col.prop(mat, "specular_intensity", text=_("Intensity"))
col = split.column()
col.prop(mat, "specular_shader", text="")
- col.prop(mat, "use_specular_ramp", text="Ramp")
+ col.prop(mat, "use_specular_ramp", text=_("Ramp"))
col = layout.column()
if mat.specular_shader in {'COOKTORR', 'PHONG'}:
- col.prop(mat, "specular_hardness", text="Hardness")
+ col.prop(mat, "specular_hardness", text=_("Hardness"))
elif mat.specular_shader == 'BLINN':
row = col.row()
- row.prop(mat, "specular_hardness", text="Hardness")
- row.prop(mat, "specular_ior", text="IOR")
+ row.prop(mat, "specular_hardness", text=_("Hardness"))
+ row.prop(mat, "specular_ior", text=_("IOR"))
elif mat.specular_shader == 'WARDISO':
- col.prop(mat, "specular_slope", text="Slope")
+ col.prop(mat, "specular_slope", text=_("Slope"))
elif mat.specular_shader == 'TOON':
row = col.row()
- row.prop(mat, "specular_toon_size", text="Size")
- row.prop(mat, "specular_toon_smooth", text="Smooth")
+ row.prop(mat, "specular_toon_size", text=_("Size"))
+ row.prop(mat, "specular_toon_smooth", text=_("Smooth"))
if mat.use_specular_ramp:
layout.separator()
@@ -308,10 +308,10 @@ class MATERIAL_PT_specular(MaterialButtonsPanel, Panel):
layout.separator()
row = layout.row()
- row.prop(mat, "specular_ramp_input", text="Input")
- row.prop(mat, "specular_ramp_blend", text="Blend")
+ row.prop(mat, "specular_ramp_input", text=_("Input"))
+ row.prop(mat, "specular_ramp_blend", text=_("Blend"))
- layout.prop(mat, "specular_ramp_factor", text="Factor")
+ layout.prop(mat, "specular_ramp_factor", text=_("Factor"))
class MATERIAL_PT_shading(MaterialButtonsPanel, Panel):
@@ -384,14 +384,14 @@ class MATERIAL_PT_transp(MaterialButtonsPanel, Panel):
col.prop(mat, "alpha")
row = col.row()
row.active = (base_mat.transparency_method != 'MASK') and (not mat.use_shadeless)
- row.prop(mat, "specular_alpha", text="Specular")
+ row.prop(mat, "specular_alpha", text=_("Specular"))
col = split.column()
col.active = (not mat.use_shadeless)
col.prop(rayt, "fresnel")
sub = col.column()
sub.active = rayt.fresnel > 0
- sub.prop(rayt, "fresnel_factor", text="Blend")
+ sub.prop(rayt, "fresnel_factor", text=_("Blend"))
if base_mat.transparency_method == 'RAYTRACE':
layout.separator()
@@ -406,12 +406,12 @@ class MATERIAL_PT_transp(MaterialButtonsPanel, Panel):
col.prop(rayt, "depth")
col = split.column()
- col.label(text="Gloss:")
- col.prop(rayt, "gloss_factor", text="Amount")
+ col.label(text=_("Gloss:"))
+ col.prop(rayt, "gloss_factor", text=_("Amount"))
sub = col.column()
sub.active = rayt.gloss_factor < 1.0
- sub.prop(rayt, "gloss_threshold", text="Threshold")
- sub.prop(rayt, "gloss_samples", text="Samples")
+ sub.prop(rayt, "gloss_threshold", text=_("Threshold"))
+ sub.prop(rayt, "gloss_samples", text=_("Samples"))
class MATERIAL_PT_mirror(MaterialButtonsPanel, Panel):
@@ -448,28 +448,28 @@ class MATERIAL_PT_mirror(MaterialButtonsPanel, Panel):
col.prop(raym, "fresnel")
sub = col.column()
sub.active = raym.fresnel > 0
- sub.prop(raym, "fresnel_factor", text="Blend")
+ sub.prop(raym, "fresnel_factor", text=_("Blend"))
split = layout.split()
col = split.column()
col.separator()
col.prop(raym, "depth")
- col.prop(raym, "distance", text="Max Dist")
+ col.prop(raym, "distance", text=_("Max Dist"))
col.separator()
sub = col.split(percentage=0.4)
sub.active = raym.distance > 0.0
- sub.label(text="Fade To:")
+ sub.label(text=_("Fade To:"))
sub.prop(raym, "fade_to", text="")
col = split.column()
- col.label(text="Gloss:")
- col.prop(raym, "gloss_factor", text="Amount")
+ col.label(text=_("Gloss:"))
+ col.prop(raym, "gloss_factor", text=_("Amount"))
sub = col.column()
sub.active = raym.gloss_factor < 1.0
- sub.prop(raym, "gloss_threshold", text="Threshold")
- sub.prop(raym, "gloss_samples", text="Samples")
- sub.prop(raym, "gloss_anisotropic", text="Anisotropic")
+ sub.prop(raym, "gloss_threshold", text=_("Threshold"))
+ sub.prop(raym, "gloss_samples", text=_("Samples"))
+ sub.prop(raym, "gloss_anisotropic", text=_("Anisotropic"))
class MATERIAL_PT_sss(MaterialButtonsPanel, Panel):
@@ -510,18 +510,18 @@ class MATERIAL_PT_sss(MaterialButtonsPanel, Panel):
col.prop(sss, "ior")
col.prop(sss, "scale")
col.prop(sss, "color", text="")
- col.prop(sss, "radius", text="RGB Radius", expand=True)
+ col.prop(sss, "radius", text=_("RGB Radius"), expand=True)
col = split.column()
sub = col.column(align=True)
- sub.label(text="Blend:")
- sub.prop(sss, "color_factor", text="Color")
- sub.prop(sss, "texture_factor", text="Texture")
- sub.label(text="Scattering Weight:")
+ sub.label(text=_("Blend:"))
+ sub.prop(sss, "color_factor", text=_("Color"))
+ sub.prop(sss, "texture_factor", text=_("Texture"))
+ sub.label(text=_("Scattering Weight:"))
sub.prop(sss, "front")
sub.prop(sss, "back")
col.separator()
- col.prop(sss, "error_threshold", text="Error")
+ col.prop(sss, "error_threshold", text=_("Error"))
class MATERIAL_PT_halo(MaterialButtonsPanel, Panel):
@@ -561,7 +561,7 @@ class MATERIAL_PT_halo(MaterialButtonsPanel, Panel):
col.prop(halo, "hardness")
col.prop(halo, "add")
- layout.label(text="Options:")
+ layout.label(text=_("Options:"))
split = layout.split()
col = split.column()
@@ -603,13 +603,13 @@ class MATERIAL_PT_flare(MaterialButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.prop(halo, "flare_size", text="Size")
- col.prop(halo, "flare_boost", text="Boost")
- col.prop(halo, "flare_seed", text="Seed")
+ col.prop(halo, "flare_size", text=_("Size"))
+ col.prop(halo, "flare_boost", text=_("Boost"))
+ col.prop(halo, "flare_seed", text=_("Seed"))
col = split.column()
- col.prop(halo, "flare_subflare_count", text="Subflares")
- col.prop(halo, "flare_subflare_size", text="Subsize")
+ col.prop(halo, "flare_subflare_count", text=_("Subflares"))
+ col.prop(halo, "flare_subflare_size", text=_("Subsize"))
class MATERIAL_PT_game_settings(MaterialButtonsPanel, bpy.types.Panel):
@@ -660,7 +660,7 @@ class MATERIAL_PT_physics(MaterialButtonsPanel, bpy.types.Panel):
row.prop(phys, "elasticity", slider=True)
row = layout.row()
- row.label(text="Force Field:")
+ row.label(text=_("Force Field:"))
row = layout.row()
row.prop(phys, "fh_force")
@@ -692,10 +692,10 @@ class MATERIAL_PT_strand(MaterialButtonsPanel, Panel):
col = split.column()
sub = col.column(align=True)
- sub.label(text="Size:")
- sub.prop(tan, "root_size", text="Root")
- sub.prop(tan, "tip_size", text="Tip")
- sub.prop(tan, "size_min", text="Minimum")
+ sub.label(text=_("Size:"))
+ sub.prop(tan, "root_size", text=_("Root"))
+ sub.prop(tan, "tip_size", text=_("Tip"))
+ sub.prop(tan, "size_min", text=_("Minimum"))
sub.prop(tan, "use_blender_units")
sub = col.column()
sub.active = (not mat.use_shadeless)
@@ -703,7 +703,7 @@ class MATERIAL_PT_strand(MaterialButtonsPanel, Panel):
col.prop(tan, "shape")
col = split.column()
- col.label(text="Shading:")
+ col.label(text=_("Shading:"))
col.prop(tan, "width_fade")
ob = context.object
if ob and ob.type == 'MESH':
@@ -713,9 +713,9 @@ class MATERIAL_PT_strand(MaterialButtonsPanel, Panel):
col.separator()
sub = col.column()
sub.active = (not mat.use_shadeless)
- sub.label("Surface diffuse:")
+ sub.label(_("Surface diffuse:"))
sub = col.column()
- sub.prop(tan, "blend_distance", text="Distance")
+ sub.prop(tan, "blend_distance", text=_("Distance"))
class MATERIAL_PT_options(MaterialButtonsPanel, Panel):
@@ -748,11 +748,11 @@ class MATERIAL_PT_options(MaterialButtonsPanel, Panel):
sub.prop(mat, "offset_z")
sub.active = mat.use_transparency and mat.transparency_method == 'Z_TRANSPARENCY'
sub = col.column(align=True)
- sub.label(text="Light Group:")
+ sub.label(text=_("Light Group:"))
sub.prop(mat, "light_group", text="")
row = sub.row()
row.active = bool(mat.light_group)
- row.prop(mat, "use_light_group_exclusive", text="Exclusive")
+ row.prop(mat, "use_light_group_exclusive", text=_("Exclusive"))
col = split.column()
col.prop(mat, "use_face_texture")
@@ -787,12 +787,12 @@ class MATERIAL_PT_shadow(MaterialButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.prop(mat, "use_shadows", text="Receive")
- col.prop(mat, "use_transparent_shadows", text="Receive Transparent")
+ col.prop(mat, "use_shadows", text=_("Receive"))
+ col.prop(mat, "use_transparent_shadows", text=_("Receive Transparent"))
if simple_material(base_mat):
- col.prop(mat, "use_cast_shadows_only", text="Cast Only")
- col.prop(mat, "shadow_cast_alpha", text="Casting Alpha")
- col.prop(mat, "use_only_shadow", text="Shadows Only")
+ col.prop(mat, "use_cast_shadows_only", text=_("Cast Only"))
+ col.prop(mat, "shadow_cast_alpha", text=_("Casting Alpha"))
+ col.prop(mat, "use_only_shadow", text=_("Shadows Only"))
sub = col.column()
sub.active = mat.use_only_shadow
sub.prop(mat, "shadow_only_type", text="")
@@ -802,11 +802,11 @@ class MATERIAL_PT_shadow(MaterialButtonsPanel, Panel):
col.prop(mat, "use_cast_buffer_shadows")
sub = col.column()
sub.active = mat.use_cast_buffer_shadows
- sub.prop(mat, "shadow_buffer_bias", text="Buffer Bias")
- col.prop(mat, "use_ray_shadow_bias", text="Auto Ray Bias")
+ sub.prop(mat, "shadow_buffer_bias", text=_("Buffer Bias"))
+ col.prop(mat, "use_ray_shadow_bias", text=_("Auto Ray Bias"))
sub = col.column()
sub.active = (not mat.use_ray_shadow_bias)
- sub.prop(mat, "shadow_ray_bias", text="Ray Bias")
+ sub.prop(mat, "shadow_ray_bias", text=_("Ray Bias"))
if simple_material(base_mat):
col.prop(mat, "use_cast_approximate")
@@ -919,7 +919,7 @@ class MATERIAL_PT_volume_lighting(VolumeButtonsPanel, Panel):
sub = col.column()
sub.enabled = True
sub.active = False
- sub.label("Light Cache Enabled")
+ sub.label(_("Light Cache Enabled"))
col.prop(vol, "cache_resolution")
sub = col.column(align=True)
@@ -958,7 +958,7 @@ class MATERIAL_PT_volume_integration(VolumeButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Step Calculation:")
+ col.label(text=_("Step Calculation:"))
col.prop(vol, "step_method", text="")
col = col.column(align=True)
col.prop(vol, "step_size")
@@ -993,11 +993,11 @@ class MATERIAL_PT_volume_options(VolumeButtonsPanel, Panel):
col.prop(mat, "use_mist")
col = split.column()
- col.label(text="Light Group:")
+ col.label(text=_("Light Group:"))
col.prop(mat, "light_group", text="")
row = col.row()
row.active = bool(mat.light_group)
- row.prop(mat, "use_light_group_exclusive", text="Exclusive")
+ row.prop(mat, "use_light_group_exclusive", text=_("Exclusive"))
class MATERIAL_PT_custom_props(MaterialButtonsPanel, PropertyPanel, Panel):
diff --git a/release/scripts/startup/bl_ui/properties_object.py b/release/scripts/startup/bl_ui/properties_object.py
index 0779debb102..a099189eed6 100644
--- a/release/scripts/startup/bl_ui/properties_object.py
+++ b/release/scripts/startup/bl_ui/properties_object.py
@@ -20,7 +20,7 @@
import bpy
from bpy.types import Panel
from rna_prop_ui import PropertyPanel
-
+from blf import gettext as _
class ObjectButtonsPanel():
bl_space_type = 'PROPERTIES'
@@ -55,14 +55,14 @@ class OBJECT_PT_transform(ObjectButtonsPanel, Panel):
row.column().prop(ob, "location")
if ob.rotation_mode == 'QUATERNION':
- row.column().prop(ob, "rotation_quaternion", text="Rotation")
+ row.column().prop(ob, "rotation_quaternion", text=_("Rotation"))
elif ob.rotation_mode == 'AXIS_ANGLE':
- #row.column().label(text="Rotation")
- #row.column().prop(pchan, "rotation_angle", text="Angle")
- #row.column().prop(pchan, "rotation_axis", text="Axis")
- row.column().prop(ob, "rotation_axis_angle", text="Rotation")
+ #row.column().label(text=_("Rotation"))
+ #row.column().prop(pchan, "rotation_angle", text=_("Angle"))
+ #row.column().prop(pchan, "rotation_axis", text=_("Axis"))
+ row.column().prop(ob, "rotation_axis_angle", text=_("Rotation"))
else:
- row.column().prop(ob, "rotation_euler", text="Rotation")
+ row.column().prop(ob, "rotation_euler", text=_("Rotation"))
row.column().prop(ob, "scale")
@@ -82,15 +82,15 @@ class OBJECT_PT_delta_transform(ObjectButtonsPanel, Panel):
row.column().prop(ob, "delta_location")
if ob.rotation_mode == 'QUATERNION':
- row.column().prop(ob, "delta_rotation_quaternion", text="Rotation")
+ row.column().prop(ob, "delta_rotation_quaternion", text=_("Rotation"))
elif ob.rotation_mode == 'AXIS_ANGLE':
- #row.column().label(text="Rotation")
- #row.column().prop(pchan, "delta_rotation_angle", text="Angle")
- #row.column().prop(pchan, "delta_rotation_axis", text="Axis")
- #row.column().prop(ob, "delta_rotation_axis_angle", text="Rotation")
- row.column().label(text="Not for Axis-Angle")
+ #row.column().label(text=_("Rotation"))
+ #row.column().prop(pchan, "delta_rotation_angle", text=_("Angle"))
+ #row.column().prop(pchan, "delta_rotation_axis", text=_("Axis"))
+ #row.column().prop(ob, "delta_rotation_axis_angle", text=_("Rotation"))
+ row.column().label(text=_("Not for Axis-Angle"))
else:
- row.column().prop(ob, "delta_rotation_euler", text="Rotation")
+ row.column().prop(ob, "delta_rotation_euler", text=_("Rotation"))
row.column().prop(ob, "delta_scale")
@@ -107,18 +107,18 @@ class OBJECT_PT_transform_locks(ObjectButtonsPanel, Panel):
row = layout.row()
col = row.column()
- col.prop(ob, "lock_location", text="Location")
+ col.prop(ob, "lock_location", text=_("Location"))
col = row.column()
if ob.rotation_mode in {'QUATERNION', 'AXIS_ANGLE'}:
- col.prop(ob, "lock_rotations_4d", text="Rotation")
+ col.prop(ob, "lock_rotations_4d", text=_("Rotation"))
if ob.lock_rotations_4d:
col.prop(ob, "lock_rotation_w", text="W")
col.prop(ob, "lock_rotation", text="")
else:
- col.prop(ob, "lock_rotation", text="Rotation")
+ col.prop(ob, "lock_rotation", text=_("Rotation"))
- row.column().prop(ob, "lock_scale", text="Scale")
+ row.column().prop(ob, "lock_scale", text=_("Scale"))
class OBJECT_PT_relations(ObjectButtonsPanel, Panel):
@@ -137,7 +137,7 @@ class OBJECT_PT_relations(ObjectButtonsPanel, Panel):
col.prop(ob, "pass_index")
col = split.column()
- col.label(text="Parent:")
+ col.label(text=_("Parent:"))
col.prop(ob, "parent", text="")
sub = col.column()
@@ -157,7 +157,7 @@ class OBJECT_PT_groups(ObjectButtonsPanel, Panel):
ob = context.object
row = layout.row(align=True)
- row.operator("object.group_link", text="Add to Group")
+ row.operator("object.group_link", text=_("Add to Group"))
row.operator("object.group_add", text="", icon='ZOOMIN')
# XXX, this is bad practice, yes, I wrote it :( - campbell
@@ -176,12 +176,12 @@ class OBJECT_PT_groups(ObjectButtonsPanel, Panel):
split = col.box().split()
col = split.column()
- col.prop(group, "layers", text="Dupli")
+ col.prop(group, "layers", text=_("Dupli"))
col = split.column()
col.prop(group, "dupli_offset", text="")
- prop = col.operator("wm.context_set_value", text="From Cursor")
+ prop = col.operator("wm.context_set_value", text=_("From Cursor"))
prop.data_path = "object.users_group[%d].dupli_offset" % index
prop.value = value
index += 1
@@ -197,11 +197,11 @@ class OBJECT_PT_display(ObjectButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.prop(ob, "draw_type", text="Type")
+ col.prop(ob, "draw_type", text=_("Type"))
col = split.column()
row = col.row()
- row.prop(ob, "show_bounds", text="Bounds")
+ row.prop(ob, "show_bounds", text=_("Bounds"))
sub = row.row()
sub.active = ob.show_bounds
sub.prop(ob, "draw_bounds_type", text="")
@@ -209,16 +209,16 @@ class OBJECT_PT_display(ObjectButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.prop(ob, "show_name", text="Name")
- col.prop(ob, "show_axis", text="Axis")
- col.prop(ob, "show_wire", text="Wire")
- col.prop(ob, "color", text="Object Color")
+ col.prop(ob, "show_name", text=_("Name"))
+ col.prop(ob, "show_axis", text=_("Axis"))
+ col.prop(ob, "show_wire", text=_("Wire"))
+ col.prop(ob, "color", text=_("Object Color"))
col = split.column()
- col.prop(ob, "show_texture_space", text="Texture Space")
- col.prop(ob, "show_x_ray", text="X-Ray")
+ col.prop(ob, "show_texture_space", text=_("Texture Space"))
+ col.prop(ob, "show_x_ray", text=_("X-Ray"))
if ob.type == 'MESH':
- col.prop(ob, "show_transparent", text="Transparency")
+ col.prop(ob, "show_transparent", text=_("Transparency"))
class OBJECT_PT_duplication(ObjectButtonsPanel, Panel):
@@ -235,26 +235,26 @@ class OBJECT_PT_duplication(ObjectButtonsPanel, Panel):
split = layout.split()
col = split.column(align=True)
- col.prop(ob, "dupli_frames_start", text="Start")
- col.prop(ob, "dupli_frames_end", text="End")
+ col.prop(ob, "dupli_frames_start", text=_("Start"))
+ col.prop(ob, "dupli_frames_end", text=_("End"))
col = split.column(align=True)
- col.prop(ob, "dupli_frames_on", text="On")
- col.prop(ob, "dupli_frames_off", text="Off")
+ col.prop(ob, "dupli_frames_on", text=_("On"))
+ col.prop(ob, "dupli_frames_off", text=_("Off"))
- layout.prop(ob, "use_dupli_frames_speed", text="Speed")
+ layout.prop(ob, "use_dupli_frames_speed", text=_("Speed"))
elif ob.dupli_type == 'VERTS':
- layout.prop(ob, "use_dupli_vertices_rotation", text="Rotation")
+ layout.prop(ob, "use_dupli_vertices_rotation", text=_("Rotation"))
elif ob.dupli_type == 'FACES':
row = layout.row()
- row.prop(ob, "use_dupli_faces_scale", text="Scale")
- row.prop(ob, "dupli_faces_scale", text="Inherit Scale")
+ row.prop(ob, "use_dupli_faces_scale", text=_("Scale"))
+ row.prop(ob, "dupli_faces_scale", text=_("Inherit Scale"))
elif ob.dupli_type == 'GROUP':
- layout.prop(ob, "dupli_group", text="Group")
+ layout.prop(ob, "dupli_group", text=_("Group"))
# XXX: the following options are all quite buggy, ancient hacks that should be dropped
@@ -271,21 +271,21 @@ class OBJECT_PT_animation(ObjectButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Time Offset:")
- col.prop(ob, "use_time_offset_edit", text="Edit")
+ col.label(text=_("Time Offset:"))
+ col.prop(ob, "use_time_offset_edit", text=_("Edit"))
row = col.row()
- row.prop(ob, "use_time_offset_parent", text="Parent")
+ row.prop(ob, "use_time_offset_parent", text=_("Parent"))
row.active = (ob.parent is not None)
row = col.row()
row.prop(ob, "use_slow_parent")
row.active = (ob.parent is not None)
- col.prop(ob, "time_offset", text="Offset")
+ col.prop(ob, "time_offset", text=_("Offset"))
# XXX: these are still used for a few curve-related tracking features
col = split.column()
- col.label(text="Tracking Axes:")
- col.prop(ob, "track_axis", text="Axis")
- col.prop(ob, "up_axis", text="Up Axis")
+ col.label(text=_("Tracking Axes:"))
+ col.prop(ob, "track_axis", text=_("Axis"))
+ col.prop(ob, "up_axis", text=_("Up Axis"))
from bl_ui.properties_animviz import (
@@ -312,8 +312,8 @@ class OBJECT_PT_motion_paths(MotionPathButtonsPanel, Panel):
layout.separator()
row = layout.row()
- row.operator("object.paths_calculate", text="Calculate Paths")
- row.operator("object.paths_clear", text="Clear Paths")
+ row.operator("object.paths_calculate", text=_("Calculate Paths"))
+ row.operator("object.paths_clear", text=_("Clear Paths"))
class OBJECT_PT_onion_skinning(OnionSkinButtonsPanel): # , Panel): # inherit from panel when ready
diff --git a/release/scripts/startup/bl_ui/properties_object_constraint.py b/release/scripts/startup/bl_ui/properties_object_constraint.py
index 05fac2026a0..e7385d3926b 100644
--- a/release/scripts/startup/bl_ui/properties_object_constraint.py
+++ b/release/scripts/startup/bl_ui/properties_object_constraint.py
@@ -19,7 +19,7 @@
# <pep8 compliant>
import bpy
from bpy.types import Panel
-
+from blf import gettext as _
class ConstraintButtonsPanel():
bl_space_type = 'PROPERTIES'
@@ -43,7 +43,7 @@ class ConstraintButtonsPanel():
split = layout.split(percentage=0.2)
- split.label(text="Space:")
+ split.label(text=_("Space:"))
row = split.row()
if target:
@@ -60,21 +60,21 @@ class ConstraintButtonsPanel():
if con.target and subtargets:
if con.target.type == 'ARMATURE':
- layout.prop_search(con, "subtarget", con.target.data, "bones", text="Bone")
+ layout.prop_search(con, "subtarget", con.target.data, "bones", text=_("Bone"))
if hasattr(con, "head_tail"):
row = layout.row()
- row.label(text="Head/Tail:")
+ row.label(text=_("Head/Tail:"))
row.prop(con, "head_tail", text="")
elif con.target.type in {'MESH', 'LATTICE'}:
- layout.prop_search(con, "subtarget", con.target, "vertex_groups", text="Vertex Group")
+ layout.prop_search(con, "subtarget", con.target, "vertex_groups", text=_("Vertex Group"))
def ik_template(self, layout, con):
# only used for iTaSC
layout.prop(con, "pole_target")
if con.pole_target and con.pole_target.type == 'ARMATURE':
- layout.prop_search(con, "pole_subtarget", con.pole_target.data, "bones", text="Bone")
+ layout.prop_search(con, "pole_subtarget", con.pole_target.data, "bones", text=_("Bone"))
if con.pole_target:
row = layout.row()
@@ -96,19 +96,19 @@ class ConstraintButtonsPanel():
split = layout.split()
col = split.column()
- col.label(text="Location:")
+ col.label(text=_("Location:"))
col.prop(con, "use_location_x", text="X")
col.prop(con, "use_location_y", text="Y")
col.prop(con, "use_location_z", text="Z")
col = split.column()
- col.label(text="Rotation:")
+ col.label(text=_("Rotation:"))
col.prop(con, "use_rotation_x", text="X")
col.prop(con, "use_rotation_y", text="Y")
col.prop(con, "use_rotation_z", text="Z")
col = split.column()
- col.label(text="Scale:")
+ col.label(text=_("Scale:"))
col.prop(con, "use_scale_x", text="X")
col.prop(con, "use_scale_y", text="Y")
col.prop(con, "use_scale_z", text="Z")
@@ -121,11 +121,11 @@ class ConstraintButtonsPanel():
self.target_template(layout, con)
row = layout.row()
- row.label(text="To:")
+ row.label(text=_("To:"))
row.prop(con, "track_axis", expand=True)
row = layout.row()
- row.prop(con, "up_axis", text="Up")
+ row.prop(con, "up_axis", text=_("Up"))
row.prop(con, "use_target_z")
self.space_template(layout, con)
@@ -140,7 +140,7 @@ class ConstraintButtonsPanel():
layout.prop(con, "pole_target")
if con.pole_target and con.pole_target.type == 'ARMATURE':
- layout.prop_search(con, "pole_subtarget", con.pole_target.data, "bones", text="Bone")
+ layout.prop_search(con, "pole_subtarget", con.pole_target.data, "bones", text=_("Bone"))
if con.pole_target:
row = layout.row()
@@ -152,11 +152,11 @@ class ConstraintButtonsPanel():
col.prop(con, "iterations")
col.prop(con, "chain_count")
- col.label(text="Weight:")
- col.prop(con, "weight", text="Position", slider=True)
+ col.label(text=_("Weight:"))
+ col.prop(con, "weight", text=_("Position"), slider=True)
sub = col.column()
sub.active = con.use_rotation
- sub.prop(con, "orient_weight", text="Rotation", slider=True)
+ sub.prop(con, "orient_weight", text=_("Rotation"), slider=True)
col = split.column()
col.prop(con, "use_tail")
@@ -170,16 +170,16 @@ class ConstraintButtonsPanel():
self.ik_template(layout, con)
row = layout.row()
- row.label(text="Axis Ref:")
+ row.label(text=_("Axis Ref:"))
row.prop(con, "reference_axis", expand=True)
split = layout.split(percentage=0.33)
split.row().prop(con, "use_location")
row = split.row()
- row.prop(con, "weight", text="Weight", slider=True)
+ row.prop(con, "weight", text=_("Weight"), slider=True)
row.active = con.use_location
split = layout.split(percentage=0.33)
row = split.row()
- row.label(text="Lock:")
+ row.label(text=_("Lock:"))
row = split.row()
row.prop(con, "lock_location_x", text="X")
row.prop(con, "lock_location_y", text="Y")
@@ -189,11 +189,11 @@ class ConstraintButtonsPanel():
split = layout.split(percentage=0.33)
split.row().prop(con, "use_rotation")
row = split.row()
- row.prop(con, "orient_weight", text="Weight", slider=True)
+ row.prop(con, "orient_weight", text=_("Weight"), slider=True)
row.active = con.use_rotation
split = layout.split(percentage=0.33)
row = split.row()
- row.label(text="Lock:")
+ row.label(text=_("Lock:"))
row = split.row()
row.prop(con, "lock_rotation_x", text="X")
row.prop(con, "lock_rotation_y", text="Y")
@@ -207,8 +207,8 @@ class ConstraintButtonsPanel():
layout.prop(con, "limit_mode")
row = layout.row()
- row.prop(con, "weight", text="Weight", slider=True)
- row.prop(con, "distance", text="Distance", slider=True)
+ row.prop(con, "weight", text=_("Weight"), slider=True)
+ row.prop(con, "distance", text=_("Distance"), slider=True)
def FOLLOW_PATH(self, context, layout, con):
self.target_template(layout, con)
@@ -222,16 +222,16 @@ class ConstraintButtonsPanel():
col = split.column()
col.prop(con, "use_fixed_location")
if con.use_fixed_location:
- col.prop(con, "offset_factor", text="Offset")
+ col.prop(con, "offset_factor", text=_("Offset"))
else:
col.prop(con, "offset")
row = layout.row()
- row.label(text="Forward:")
+ row.label(text=_("Forward:"))
row.prop(con, "forward_axis", expand=True)
row = layout.row()
- row.prop(con, "up_axis", text="Up")
+ row.prop(con, "up_axis", text=_("Up"))
row.label()
def LIMIT_ROTATION(self, context, layout, con):
@@ -241,27 +241,27 @@ class ConstraintButtonsPanel():
col.prop(con, "use_limit_x")
sub = col.column()
sub.active = con.use_limit_x
- sub.prop(con, "min_x", text="Min")
- sub.prop(con, "max_x", text="Max")
+ sub.prop(con, "min_x", text=_("Min"))
+ sub.prop(con, "max_x", text=_("Max"))
col = split.column(align=True)
col.prop(con, "use_limit_y")
sub = col.column()
sub.active = con.use_limit_y
- sub.prop(con, "min_y", text="Min")
- sub.prop(con, "max_y", text="Max")
+ sub.prop(con, "min_y", text=_("Min"))
+ sub.prop(con, "max_y", text=_("Max"))
col = split.column(align=True)
col.prop(con, "use_limit_z")
sub = col.column()
sub.active = con.use_limit_z
- sub.prop(con, "min_z", text="Min")
- sub.prop(con, "max_z", text="Max")
+ sub.prop(con, "min_z", text=_("Min"))
+ sub.prop(con, "max_z", text=_("Max"))
layout.prop(con, "use_transform_limit")
row = layout.row()
- row.label(text="Convert:")
+ row.label(text=_("Convert:"))
row.prop(con, "owner_space", text="")
def LIMIT_LOCATION(self, context, layout, con):
@@ -302,7 +302,7 @@ class ConstraintButtonsPanel():
row.label()
row = layout.row()
- row.label(text="Convert:")
+ row.label(text=_("Convert:"))
row.prop(con, "owner_space", text="")
def LIMIT_SCALE(self, context, layout, con):
@@ -343,7 +343,7 @@ class ConstraintButtonsPanel():
row.label()
row = layout.row()
- row.label(text="Convert:")
+ row.label(text=_("Convert:"))
row.prop(con, "owner_space", text="")
def COPY_ROTATION(self, context, layout, con):
@@ -355,19 +355,19 @@ class ConstraintButtonsPanel():
col.prop(con, "use_x", text="X")
sub = col.column()
sub.active = con.use_x
- sub.prop(con, "invert_x", text="Invert")
+ sub.prop(con, "invert_x", text=_("Invert"))
col = split.column()
col.prop(con, "use_y", text="Y")
sub = col.column()
sub.active = con.use_y
- sub.prop(con, "invert_y", text="Invert")
+ sub.prop(con, "invert_y", text=_("Invert"))
col = split.column()
col.prop(con, "use_z", text="Z")
sub = col.column()
sub.active = con.use_z
- sub.prop(con, "invert_z", text="Invert")
+ sub.prop(con, "invert_z", text=_("Invert"))
layout.prop(con, "use_offset")
@@ -382,19 +382,19 @@ class ConstraintButtonsPanel():
col.prop(con, "use_x", text="X")
sub = col.column()
sub.active = con.use_x
- sub.prop(con, "invert_x", text="Invert")
+ sub.prop(con, "invert_x", text=_("Invert"))
col = split.column()
col.prop(con, "use_y", text="Y")
sub = col.column()
sub.active = con.use_y
- sub.prop(con, "invert_y", text="Invert")
+ sub.prop(con, "invert_y", text=_("Invert"))
col = split.column()
col.prop(con, "use_z", text="Z")
sub = col.column()
sub.active = con.use_z
- sub.prop(con, "invert_z", text="Invert")
+ sub.prop(con, "invert_z", text=_("Invert"))
layout.prop(con, "use_offset")
@@ -415,7 +415,7 @@ class ConstraintButtonsPanel():
def MAINTAIN_VOLUME(self, context, layout, con):
row = layout.row()
- row.label(text="Free:")
+ row.label(text=_("Free:"))
row.prop(con, "free_axis", expand=True)
layout.prop(con, "volume")
@@ -439,28 +439,28 @@ class ConstraintButtonsPanel():
split = layout.split()
col = split.column(align=True)
- col.label(text="Action Length:")
- col.prop(con, "frame_start", text="Start")
- col.prop(con, "frame_end", text="End")
+ col.label(text=_("Action Length:"))
+ col.prop(con, "frame_start", text=_("Start"))
+ col.prop(con, "frame_end", text=_("End"))
col = split.column(align=True)
- col.label(text="Target Range:")
- col.prop(con, "min", text="Min")
- col.prop(con, "max", text="Max")
+ col.label(text=_("Target Range:"))
+ col.prop(con, "min", text=_("Min"))
+ col.prop(con, "max", text=_("Max"))
row = layout.row()
- row.label(text="Convert:")
+ row.label(text=_("Convert:"))
row.prop(con, "target_space", text="")
def LOCKED_TRACK(self, context, layout, con):
self.target_template(layout, con)
row = layout.row()
- row.label(text="To:")
+ row.label(text=_("To:"))
row.prop(con, "track_axis", expand=True)
row = layout.row()
- row.label(text="Lock:")
+ row.label(text=_("Lock:"))
row.prop(con, "lock_axis", expand=True)
def LIMIT_DISTANCE(self, context, layout, con):
@@ -471,7 +471,7 @@ class ConstraintButtonsPanel():
col.operator("constraint.limitdistance_reset")
row = layout.row()
- row.label(text="Clamp Region:")
+ row.label(text=_("Clamp Region:"))
row.prop(con, "limit_mode", text="")
row = layout.row()
@@ -482,16 +482,16 @@ class ConstraintButtonsPanel():
self.target_template(layout, con)
row = layout.row()
- row.prop(con, "rest_length", text="Rest Length")
- row.operator("constraint.stretchto_reset", text="Reset")
+ row.prop(con, "rest_length", text=_("Rest Length"))
+ row.operator("constraint.stretchto_reset", text=_("Reset"))
- layout.prop(con, "bulge", text="Volume Variation")
+ layout.prop(con, "bulge", text=_("Volume Variation"))
row = layout.row()
- row.label(text="Volume:")
+ row.label(text=_("Volume:"))
row.prop(con, "volume", expand=True)
- row.label(text="Plane:")
+ row.label(text=_("Plane:"))
row.prop(con, "keep_axis", expand=True)
def FLOOR(self, context, layout, con):
@@ -504,7 +504,7 @@ class ConstraintButtonsPanel():
layout.prop(con, "offset")
row = layout.row()
- row.label(text="Min/Max:")
+ row.label(text=_("Min/Max:"))
row.prop(con, "floor_location", expand=True)
self.space_template(layout, con)
@@ -516,113 +516,113 @@ class ConstraintButtonsPanel():
layout.prop(con, "child")
row = layout.row()
- row.prop(con, "use_linked_collision", text="Linked Collision")
- row.prop(con, "show_pivot", text="Display Pivot")
+ row.prop(con, "use_linked_collision", text=_("Linked Collision"))
+ row.prop(con, "show_pivot", text=_("Display Pivot"))
split = layout.split()
col = split.column(align=True)
- col.label(text="Pivot:")
+ col.label(text=_("Pivot:"))
col.prop(con, "pivot_x", text="X")
col.prop(con, "pivot_y", text="Y")
col.prop(con, "pivot_z", text="Z")
col = split.column(align=True)
- col.label(text="Axis:")
+ col.label(text=_("Axis:"))
col.prop(con, "axis_x", text="X")
col.prop(con, "axis_y", text="Y")
col.prop(con, "axis_z", text="Z")
if con.pivot_type == 'CONE_TWIST':
- layout.label(text="Limits:")
+ layout.label(text=_("Limits:"))
split = layout.split()
col = split.column()
- col.prop(con, "use_angular_limit_x", text="Angle X")
+ col.prop(con, "use_angular_limit_x", text=_("Angle X"))
sub = col.column()
sub.active = con.use_angular_limit_x
sub.prop(con, "limit_angle_max_x", text="")
col = split.column()
- col.prop(con, "use_angular_limit_y", text="Angle Y")
+ col.prop(con, "use_angular_limit_y", text=_("Angle Y"))
sub = col.column()
sub.active = con.use_angular_limit_y
sub.prop(con, "limit_angle_max_y", text="")
col = split.column()
- col.prop(con, "use_angular_limit_z", text="Angle Z")
+ col.prop(con, "use_angular_limit_z", text=_("Angle Z"))
sub = col.column()
sub.active = con.use_angular_limit_z
sub.prop(con, "limit_angle_max_z", text="")
elif con.pivot_type == 'GENERIC_6_DOF':
- layout.label(text="Limits:")
+ layout.label(text=_("Limits:"))
split = layout.split()
col = split.column(align=True)
col.prop(con, "use_limit_x", text="X")
sub = col.column()
sub.active = con.use_limit_x
- sub.prop(con, "limit_min_x", text="Min")
- sub.prop(con, "limit_max_x", text="Max")
+ sub.prop(con, "limit_min_x", text=_("Min"))
+ sub.prop(con, "limit_max_x", text=_("Max"))
col = split.column(align=True)
col.prop(con, "use_limit_y", text="Y")
sub = col.column()
sub.active = con.use_limit_y
- sub.prop(con, "limit_min_y", text="Min")
- sub.prop(con, "limit_max_y", text="Max")
+ sub.prop(con, "limit_min_y", text=_("Min"))
+ sub.prop(con, "limit_max_y", text=_("Max"))
col = split.column(align=True)
col.prop(con, "use_limit_z", text="Z")
sub = col.column()
sub.active = con.use_limit_z
- sub.prop(con, "limit_min_z", text="Min")
- sub.prop(con, "limit_max_z", text="Max")
+ sub.prop(con, "limit_min_z", text=_("Min"))
+ sub.prop(con, "limit_max_z", text=_("Max"))
split = layout.split()
col = split.column(align=True)
- col.prop(con, "use_angular_limit_x", text="Angle X")
+ col.prop(con, "use_angular_limit_x", text=_("Angle X"))
sub = col.column()
sub.active = con.use_angular_limit_x
- sub.prop(con, "limit_angle_min_x", text="Min")
- sub.prop(con, "limit_angle_max_x", text="Max")
+ sub.prop(con, "limit_angle_min_x", text=_("Min"))
+ sub.prop(con, "limit_angle_max_x", text=_("Max"))
col = split.column(align=True)
- col.prop(con, "use_angular_limit_y", text="Angle Y")
+ col.prop(con, "use_angular_limit_y", text=_("Angle Y"))
sub = col.column()
sub.active = con.use_angular_limit_y
- sub.prop(con, "limit_angle_min_y", text="Min")
- sub.prop(con, "limit_angle_max_y", text="Max")
+ sub.prop(con, "limit_angle_min_y", text=_("Min"))
+ sub.prop(con, "limit_angle_max_y", text=_("Max"))
col = split.column(align=True)
- col.prop(con, "use_angular_limit_z", text="Angle Z")
+ col.prop(con, "use_angular_limit_z", text=_("Angle Z"))
sub = col.column()
sub.active = con.use_angular_limit_z
- sub.prop(con, "limit_angle_min_z", text="Min")
- sub.prop(con, "limit_angle_max_z", text="Max")
+ sub.prop(con, "limit_angle_min_z", text=_("Min"))
+ sub.prop(con, "limit_angle_max_z", text=_("Max"))
elif con.pivot_type == 'HINGE':
- layout.label(text="Limits:")
+ layout.label(text=_("Limits:"))
split = layout.split()
row = split.row(align=True)
col = row.column()
- col.prop(con, "use_angular_limit_x", text="Angle X")
+ col.prop(con, "use_angular_limit_x", text=_("Angle X"))
col = row.column()
col.active = con.use_angular_limit_x
- col.prop(con, "limit_angle_min_x", text="Min")
+ col.prop(con, "limit_angle_min_x", text=_("Min"))
col = row.column()
col.active = con.use_angular_limit_x
- col.prop(con, "limit_angle_max_x", text="Max")
+ col.prop(con, "limit_angle_max_x", text=_("Max"))
def CLAMP_TO(self, context, layout, con):
self.target_template(layout, con)
row = layout.row()
- row.label(text="Main Axis:")
+ row.label(text=_("Main Axis:"))
row.prop(con, "main_axis", expand=True)
layout.prop(con, "use_cyclic")
@@ -630,32 +630,32 @@ class ConstraintButtonsPanel():
def TRANSFORM(self, context, layout, con):
self.target_template(layout, con)
- layout.prop(con, "use_motion_extrapolate", text="Extrapolate")
+ layout.prop(con, "use_motion_extrapolate", text=_("Extrapolate"))
col = layout.column()
- col.row().label(text="Source:")
+ col.row().label(text=_("Source:"))
col.row().prop(con, "map_from", expand=True)
split = layout.split()
sub = split.column(align=True)
sub.label(text="X:")
- sub.prop(con, "from_min_x", text="Min")
- sub.prop(con, "from_max_x", text="Max")
+ sub.prop(con, "from_min_x", text=_("Min"))
+ sub.prop(con, "from_max_x", text=_("Max"))
sub = split.column(align=True)
sub.label(text="Y:")
- sub.prop(con, "from_min_y", text="Min")
- sub.prop(con, "from_max_y", text="Max")
+ sub.prop(con, "from_min_y", text=_("Min"))
+ sub.prop(con, "from_max_y", text=_("Max"))
sub = split.column(align=True)
sub.label(text="Z:")
- sub.prop(con, "from_min_z", text="Min")
- sub.prop(con, "from_max_z", text="Max")
+ sub.prop(con, "from_min_z", text=_("Min"))
+ sub.prop(con, "from_max_z", text=_("Max"))
col = layout.column()
row = col.row()
- row.label(text="Source to Destination Mapping:")
+ row.label(text=_("Source to Destination Mapping:"))
# note: chr(187) is the ASCII arrow ( >> ). Blender Text Editor can't
# open it. Thus we are using the hardcoded value instead.
@@ -674,7 +674,7 @@ class ConstraintButtonsPanel():
split = layout.split()
col = split.column()
- col.label(text="Destination:")
+ col.label(text=_("Destination:"))
col.row().prop(con, "map_to", expand=True)
split = layout.split()
@@ -683,22 +683,22 @@ class ConstraintButtonsPanel():
col.label(text="X:")
sub = col.column(align=True)
- sub.prop(con, "to_min_x", text="Min")
- sub.prop(con, "to_max_x", text="Max")
+ sub.prop(con, "to_min_x", text=_("Min"))
+ sub.prop(con, "to_max_x", text=_("Max"))
col = split.column()
col.label(text="Y:")
sub = col.column(align=True)
- sub.prop(con, "to_min_y", text="Min")
- sub.prop(con, "to_max_y", text="Max")
+ sub.prop(con, "to_min_y", text=_("Min"))
+ sub.prop(con, "to_max_y", text=_("Max"))
col = split.column()
col.label(text="Z:")
sub = col.column(align=True)
- sub.prop(con, "to_min_z", text="Min")
- sub.prop(con, "to_max_z", text="Max")
+ sub.prop(con, "to_min_z", text=_("Min"))
+ sub.prop(con, "to_max_z", text=_("Max"))
self.space_template(layout, con)
@@ -718,20 +718,20 @@ class ConstraintButtonsPanel():
self.target_template(layout, con)
row = layout.row()
- row.label(text="To:")
+ row.label(text=_("To:"))
row.prop(con, "track_axis", expand=True)
def SPLINE_IK(self, context, layout, con):
self.target_template(layout, con)
col = layout.column()
- col.label(text="Spline Fitting:")
+ col.label(text=_("Spline Fitting:"))
col.prop(con, "chain_count")
col.prop(con, "use_even_divisions")
col.prop(con, "use_chain_offset")
col = layout.column()
- col.label(text="Chain Scaling:")
+ col.label(text=_("Chain Scaling:"))
col.prop(con, "use_y_stretch")
col.prop(con, "xz_scale_mode")
col.prop(con, "use_curve_radius")
@@ -741,20 +741,20 @@ class ConstraintButtonsPanel():
if con.target:
col = layout.column()
- col.prop(con, "offset", text="Pivot Offset")
+ col.prop(con, "offset", text=_("Pivot Offset"))
else:
col = layout.column()
col.prop(con, "use_relative_location")
if con.use_relative_location:
- col.prop(con, "offset", text="Relative Pivot Point")
+ col.prop(con, "offset", text=_("Relative Pivot Point"))
else:
- col.prop(con, "offset", text="Absolute Pivot Point")
+ col.prop(con, "offset", text=_("Absolute Pivot Point"))
col = layout.column()
- col.prop(con, "rotation_range", text="Pivot When")
+ col.prop(con, "rotation_range", text=_("Pivot When"))
def SCRIPT(self, context, layout, con):
- layout.label("Blender 2.5 has no py-constraints")
+ layout.label( _("Blender 2.5 has no py-constraints") )
class OBJECT_PT_constraints(ConstraintButtonsPanel, Panel):
@@ -773,7 +773,7 @@ class OBJECT_PT_constraints(ConstraintButtonsPanel, Panel):
if ob.mode == 'POSE':
box = layout.box()
box.alert = True
- box.label(icon='INFO', text="See Bone Constraints tab to Add Constraints to active bone")
+ box.label(icon='INFO', text=_("See Bone Constraints tab to Add Constraints to active bone"))
else:
layout.operator_menu_enum("object.constraint_add", "type")
diff --git a/release/scripts/startup/bl_ui/properties_particle.py b/release/scripts/startup/bl_ui/properties_particle.py
index d4378b0d094..6424f6dca44 100644
--- a/release/scripts/startup/bl_ui/properties_particle.py
+++ b/release/scripts/startup/bl_ui/properties_particle.py
@@ -20,6 +20,7 @@
import bpy
from bpy.types import Panel
from rna_prop_ui import PropertyPanel
+from blf import gettext as _
from bl_ui.properties_physics_common import (
point_cache_ui,
@@ -108,17 +109,17 @@ class PARTICLE_PT_context_particles(ParticleButtonsPanel, Panel):
layout.template_ID(context.space_data, "pin_id")
if part.is_fluid:
- layout.label(text="Settings used for fluid")
+ layout.label(text=_("Settings used for fluid"))
return
- layout.prop(part, "type", text="Type")
+ layout.prop(part, "type", text=_("Type"))
elif not psys.settings:
split = layout.split(percentage=0.32)
col = split.column()
- col.label(text="Name:")
- col.label(text="Settings:")
+ col.label(text=_("Name:"))
+ col.label(text=_("Settings:"))
col = split.column()
col.prop(psys, "name", text="")
@@ -128,10 +129,10 @@ class PARTICLE_PT_context_particles(ParticleButtonsPanel, Panel):
split = layout.split(percentage=0.32)
col = split.column()
- col.label(text="Name:")
+ col.label(text=_("Name:"))
if part.is_fluid == False:
- col.label(text="Settings:")
- col.label(text="Type:")
+ col.label(text=_("Settings:"))
+ col.label(text=_("Type:"))
col = split.column()
col.prop(psys, "name", text="")
@@ -141,8 +142,8 @@ class PARTICLE_PT_context_particles(ParticleButtonsPanel, Panel):
row.template_ID(psys, "settings", new="particle.new")
#row = layout.row()
- #row.label(text="Viewport")
- #row.label(text="Render")
+ #row.label(text=_("Viewport"))
+ #row.label(text=_("Render"))
if part.is_fluid:
layout.label(text=str(part.count) + " fluid particles for this frame")
@@ -157,7 +158,7 @@ class PARTICLE_PT_context_particles(ParticleButtonsPanel, Panel):
split = layout.split(percentage=0.65)
if part.type == 'HAIR':
if psys is not None and psys.is_edited:
- split.operator("particle.edited_clear", text="Free Edit")
+ split.operator("particle.edited_clear", text=_("Free Edit"))
else:
row = split.row()
row.enabled = particle_panel_enabled(context, psys)
@@ -174,7 +175,7 @@ class PARTICLE_PT_context_particles(ParticleButtonsPanel, Panel):
elif psys is not None and part.type == 'REACTOR':
split.enabled = particle_panel_enabled(context, psys)
split.prop(psys, "reactor_target_object")
- split.prop(psys, "reactor_target_particle_system", text="Particle System")
+ split.prop(psys, "reactor_target_particle_system", text=_("Particle System"))
class PARTICLE_PT_emission(ParticleButtonsPanel, Panel):
@@ -221,7 +222,7 @@ class PARTICLE_PT_emission(ParticleButtonsPanel, Panel):
col.prop(part, "lifetime")
col.prop(part, "lifetime_random", slider=True)
- layout.label(text="Emit From:")
+ layout.label(text=_("Emit From:"))
layout.prop(part, "emit_from", expand=True)
row = layout.row()
@@ -239,11 +240,11 @@ class PARTICLE_PT_emission(ParticleButtonsPanel, Panel):
row = layout.row()
if part.distribution == 'JIT':
- row.prop(part, "userjit", text="Particles/Face")
- row.prop(part, "jitter_factor", text="Jittering Amount", slider=True)
+ row.prop(part, "userjit", text=_("Particles/Face"))
+ row.prop(part, "jitter_factor", text=_("Jittering Amount"), slider=True)
elif part.distribution == 'GRID':
row.prop(part, "grid_resolution")
- row.prop(part, "grid_random", text="Random", slider=True)
+ row.prop(part, "grid_random", text=_("Random"), slider=True)
class PARTICLE_PT_hair_dynamics(ParticleButtonsPanel, Panel):
@@ -284,22 +285,22 @@ class PARTICLE_PT_hair_dynamics(ParticleButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Material:")
+ col.label(text=_("Material:"))
sub = col.column(align=True)
- sub.prop(cloth, "pin_stiffness", text="Stiffness")
+ sub.prop(cloth, "pin_stiffness", text=_("Stiffness"))
sub.prop(cloth, "mass")
- sub.prop(cloth, "bending_stiffness", text="Bending")
+ sub.prop(cloth, "bending_stiffness", text=_("Bending"))
sub.prop(cloth, "internal_friction", slider=True)
sub.prop(cloth, "collider_friction", slider=True)
col = split.column()
- col.label(text="Damping:")
+ col.label(text=_("Damping:"))
sub = col.column(align=True)
- sub.prop(cloth, "spring_damping", text="Spring")
- sub.prop(cloth, "air_damping", text="Air")
+ sub.prop(cloth, "spring_damping", text=_("Spring"))
+ sub.prop(cloth, "air_damping", text=_("Air"))
- col.label(text="Quality:")
- col.prop(cloth, "quality", text="Steps", slider=True)
+ col.label(text=_("Quality:"))
+ col.prop(cloth, "quality", text=_("Steps"), slider=True)
class PARTICLE_PT_cache(ParticleButtonsPanel, Panel):
@@ -355,17 +356,17 @@ class PARTICLE_PT_velocity(ParticleButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Emitter Geometry:")
+ col.label(text=_("Emitter Geometry:"))
col.prop(part, "normal_factor")
sub = col.column(align=True)
sub.prop(part, "tangent_factor")
sub.prop(part, "tangent_phase", slider=True)
col = split.column()
- col.label(text="Emitter Object:")
+ col.label(text=_("Emitter Object:"))
col.prop(part, "object_align_factor", text="")
- layout.label(text="Other:")
+ layout.label(text=_("Other:"))
row = layout.row()
if part.emit_from == 'PARTICLE':
row.prop(part, "particle_factor")
@@ -406,21 +407,21 @@ class PARTICLE_PT_rotation(ParticleButtonsPanel, Panel):
layout.enabled = particle_panel_enabled(context, psys)
row = layout.row()
- row.label(text="Initial Rotation:")
+ row.label(text=_("Initial Rotation:"))
row.prop(part, "use_dynamic_rotation")
split = layout.split()
col = split.column(align=True)
col.prop(part, "rotation_mode", text="")
- col.prop(part, "rotation_factor_random", slider=True, text="Random")
+ col.prop(part, "rotation_factor_random", slider=True, text=_("Random"))
col = split.column(align=True)
col.prop(part, "phase_factor", slider=True)
- col.prop(part, "phase_factor_random", text="Random", slider=True)
+ col.prop(part, "phase_factor_random", text=_("Random"), slider=True)
col = layout.column()
- col.label(text="Angular Velocity:")
+ col.label(text=_("Angular Velocity:"))
col.row().prop(part, "angular_velocity_mode", expand=True)
if part.angular_velocity_mode != 'NONE':
@@ -461,19 +462,19 @@ class PARTICLE_PT_physics(ParticleButtonsPanel, Panel):
if part.physics_type != 'NO':
col = row.column(align=True)
col.prop(part, "mass")
- col.prop(part, "use_multiply_size_mass", text="Multiply mass with size")
+ col.prop(part, "use_multiply_size_mass", text=_("Multiply mass with size"))
if part.physics_type in {'NEWTON', 'FLUID'}:
split = layout.split()
col = split.column()
- col.label(text="Forces:")
+ col.label(text=_("Forces:"))
col.prop(part, "brownian_factor")
col.prop(part, "drag_factor", slider=True)
col.prop(part, "damping", slider=True)
col = split.column()
- col.label(text="Integration:")
+ col.label(text=_("Integration:"))
col.prop(part, "integrator", text="")
col.prop(part, "timestep")
col.prop(part, "subframes")
@@ -488,13 +489,13 @@ class PARTICLE_PT_physics(ParticleButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Fluid properties:")
- col.prop(fluid, "stiffness", text="Stiffness")
- col.prop(fluid, "linear_viscosity", text="Viscosity")
- col.prop(fluid, "buoyancy", text="Buoancy", slider=True)
+ col.label(text=_("Fluid properties:"))
+ col.prop(fluid, "stiffness", text=_("Stiffness"))
+ col.prop(fluid, "linear_viscosity", text=_("Viscosity"))
+ col.prop(fluid, "buoyancy", text=_("Buoancy"), slider=True)
col = split.column()
- col.label(text="Advanced:")
+ col.label(text=_("Advanced:"))
sub = col.row()
sub.prop(fluid, "repulsion", slider=fluid.factor_repulsion)
@@ -515,8 +516,8 @@ class PARTICLE_PT_physics(ParticleButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Springs:")
- col.prop(fluid, "spring_force", text="Force")
+ col.label(text=_("Springs:"))
+ col.prop(fluid, "spring_force", text=_("Force"))
col.prop(fluid, "use_viscoelastic_springs")
sub = col.column(align=True)
sub.active = fluid.use_viscoelastic_springs
@@ -524,7 +525,7 @@ class PARTICLE_PT_physics(ParticleButtonsPanel, Panel):
sub.prop(fluid, "plasticity", slider=True)
col = split.column()
- col.label(text="Advanced:")
+ col.label(text=_("Advanced:"))
sub = col.row()
sub.prop(fluid, "rest_length", slider=fluid.factor_rest_length)
sub.prop(fluid, "factor_rest_length", text="")
@@ -532,7 +533,7 @@ class PARTICLE_PT_physics(ParticleButtonsPanel, Panel):
sub = col.column()
sub.active = fluid.use_viscoelastic_springs
sub.prop(fluid, "use_initial_rest_length")
- sub.prop(fluid, "spring_frames", text="Frames")
+ sub.prop(fluid, "spring_frames", text=_("Frames"))
elif part.physics_type == 'KEYED':
split = layout.split()
@@ -541,11 +542,11 @@ class PARTICLE_PT_physics(ParticleButtonsPanel, Panel):
row = layout.row()
col = row.column()
col.active = not psys.use_keyed_timing
- col.prop(part, "keyed_loops", text="Loops")
+ col.prop(part, "keyed_loops", text=_("Loops"))
if psys:
- row.prop(psys, "use_keyed_timing", text="Use Timing")
+ row.prop(psys, "use_keyed_timing", text=_("Use Timing"))
- layout.label(text="Keys:")
+ layout.label(text=_("Keys:"))
elif part.physics_type == 'BOIDS':
boids = part.boids
@@ -581,7 +582,7 @@ class PARTICLE_PT_physics(ParticleButtonsPanel, Panel):
row = layout.row()
col = row.column(align=True)
- col.label(text="Battle:")
+ col.label(text=_("Battle:"))
col.prop(boids, "health")
col.prop(boids, "strength")
col.prop(boids, "aggression")
@@ -589,16 +590,16 @@ class PARTICLE_PT_physics(ParticleButtonsPanel, Panel):
col.prop(boids, "range")
col = row.column()
- col.label(text="Misc:")
+ col.label(text=_("Misc:"))
col.prop(boids, "bank", slider=True)
col.prop(boids, "pitch", slider=True)
col.prop(boids, "height", slider=True)
if psys and part.physics_type in {'KEYED', 'BOIDS', 'FLUID'}:
if part.physics_type == 'BOIDS':
- layout.label(text="Relations:")
+ layout.label(text=_("Relations:"))
elif part.physics_type == 'FLUID':
- layout.label(text="Fluid interaction:")
+ layout.label(text=_("Fluid interaction:"))
row = layout.row()
row.template_list(psys, "targets", psys, "active_particle_target_index")
@@ -621,7 +622,7 @@ class PARTICLE_PT_physics(ParticleButtonsPanel, Panel):
#doesn't work yet
#col.alert = key.valid
col.prop(key, "object", text="")
- col.prop(key, "system", text="System")
+ col.prop(key, "system", text=_("System"))
col = row.column()
col.active = psys.use_keyed_timing
col.prop(key, "time")
@@ -631,7 +632,7 @@ class PARTICLE_PT_physics(ParticleButtonsPanel, Panel):
#doesn't work yet
#sub.alert = key.valid
sub.prop(key, "object", text="")
- sub.prop(key, "system", text="System")
+ sub.prop(key, "system", text=_("System"))
layout.prop(key, "alliance", expand=True)
elif part.physics_type == 'FLUID':
@@ -639,7 +640,7 @@ class PARTICLE_PT_physics(ParticleButtonsPanel, Panel):
#doesn't work yet
#sub.alert = key.valid
sub.prop(key, "object", text="")
- sub.prop(key, "system", text="System")
+ sub.prop(key, "system", text=_("System"))
class PARTICLE_PT_boidbrain(ParticleButtonsPanel, Panel):
@@ -678,7 +679,7 @@ class PARTICLE_PT_boidbrain(ParticleButtonsPanel, Panel):
state = boids.active_boid_state
- #layout.prop(state, "name", text="State name")
+ #layout.prop(state, "name", text=_("State name"))
row = layout.row()
row.prop(state, "ruleset_type")
@@ -721,7 +722,7 @@ class PARTICLE_PT_boidbrain(ParticleButtonsPanel, Panel):
row.prop(rule, "use_predict")
row.prop(rule, "fear_factor")
elif rule.type == 'FOLLOW_PATH':
- row.label(text="Not yet functional")
+ row.label(text=_("Not yet functional"))
elif rule.type == 'AVOID_COLLISION':
row.prop(rule, "use_avoid")
row.prop(rule, "use_avoid_collision")
@@ -800,14 +801,14 @@ class PARTICLE_PT_render(ParticleButtonsPanel, Panel):
sub.active = (part.use_render_adaptive is True and part.use_strand_primitive is False)
sub.prop(part, "adaptive_pixel")
col.prop(part, "use_hair_bspline")
- col.prop(part, "render_step", text="Steps")
+ col.prop(part, "render_step", text=_("Steps"))
col = split.column()
- col.label(text="Timing:")
+ col.label(text=_("Timing:"))
col.prop(part, "use_absolute_path_time")
- col.prop(part, "path_start", text="Start", slider=not part.use_absolute_path_time)
- col.prop(part, "path_end", text="End", slider=not part.use_absolute_path_time)
- col.prop(part, "length_random", text="Random", slider=True)
+ col.prop(part, "path_start", text=_("Start"), slider=not part.use_absolute_path_time)
+ col.prop(part, "path_end", text=_("End"), slider=not part.use_absolute_path_time)
+ col.prop(part, "length_random", text=_("Random"), slider=True)
row = layout.row()
col = row.column()
@@ -864,30 +865,30 @@ class PARTICLE_PT_render(ParticleButtonsPanel, Panel):
elif part.render_type == 'BILLBOARD':
ob = context.object
- col.label(text="Align:")
+ col.label(text=_("Align:"))
row = layout.row()
row.prop(part, "billboard_align", expand=True)
- row.prop(part, "lock_billboard", text="Lock")
+ row.prop(part, "lock_billboard", text=_("Lock"))
row = layout.row()
row.prop(part, "billboard_object")
row = layout.row()
col = row.column(align=True)
- col.label(text="Tilt:")
- col.prop(part, "billboard_tilt", text="Angle", slider=True)
- col.prop(part, "billboard_tilt_random", text="Random", slider=True)
+ col.label(text=_("Tilt:"))
+ col.prop(part, "billboard_tilt", text=_("Angle"), slider=True)
+ col.prop(part, "billboard_tilt_random", text=_("Random"), slider=True)
col = row.column()
col.prop(part, "billboard_offset")
row = layout.row()
col = row.column()
- col.prop(part, "billboard_size", text="Scale")
+ col.prop(part, "billboard_size", text=_("Scale"))
if part.billboard_align == 'VEL':
col = row.column(align=True)
- col.label("Velocity Scale:")
- col.prop(part, "billboard_velocity_head", text="Head")
- col.prop(part, "billboard_velocity_tail", text="Tail")
+ col.label(_("Velocity Scale:"))
+ col.prop(part, "billboard_velocity_head", text=_("Head"))
+ col.prop(part, "billboard_velocity_tail", text=_("Tail"))
if psys:
col = layout.column()
@@ -895,8 +896,8 @@ class PARTICLE_PT_render(ParticleButtonsPanel, Panel):
col.prop_search(psys, "billboard_time_index_uv", ob.data, "uv_textures")
split = layout.split(percentage=0.33)
- split.label(text="Split uv's:")
- split.prop(part, "billboard_uv_split", text="Number of splits")
+ split.label(text=_("Split uv's:"))
+ split.prop(part, "billboard_uv_split", text=_("Number of splits"))
if psys:
col = layout.column()
@@ -904,9 +905,9 @@ class PARTICLE_PT_render(ParticleButtonsPanel, Panel):
col.prop_search(psys, "billboard_split_uv", ob.data, "uv_textures")
row = col.row()
- row.label(text="Animate:")
+ row.label(text=_("Animate:"))
row.prop(part, "billboard_animation", text="")
- row.label(text="Offset:")
+ row.label(text=_("Offset:"))
row.prop(part, "billboard_offset_split", text="")
if part.render_type == 'HALO' or part.render_type == 'LINE' or part.render_type == 'BILLBOARD':
@@ -914,10 +915,10 @@ class PARTICLE_PT_render(ParticleButtonsPanel, Panel):
col = row.column()
col.prop(part, "trail_count")
if part.trail_count > 1:
- col.prop(part, "use_absolute_path_time", text="Length in frames")
+ col.prop(part, "use_absolute_path_time", text=_("Length in frames"))
col = row.column()
- col.prop(part, "path_end", text="Length", slider=not part.use_absolute_path_time)
- col.prop(part, "length_random", text="Random", slider=True)
+ col.prop(part, "path_end", text=_("Length"), slider=not part.use_absolute_path_time)
+ col.prop(part, "length_random", text=_("Random"), slider=True)
else:
col = row.column()
col.label(text="")
@@ -965,11 +966,11 @@ class PARTICLE_PT_draw(ParticleButtonsPanel, Panel):
if part.draw_percentage != 100 and psys is not None:
if part.type == 'HAIR':
if psys.use_hair_dynamics and psys.point_cache.is_baked == False:
- layout.row().label(text="Display percentage makes dynamics inaccurate without baking!")
+ layout.row().label(text=_("Display percentage makes dynamics inaccurate without baking!"))
else:
phystype = part.physics_type
if phystype != 'NO' and phystype != 'KEYED' and psys.point_cache.is_baked == False:
- layout.row().label(text="Display percentage makes dynamics inaccurate without baking!")
+ layout.row().label(text=_("Display percentage makes dynamics inaccurate without baking!"))
row = layout.row()
col = row.column()
@@ -980,11 +981,11 @@ class PARTICLE_PT_draw(ParticleButtonsPanel, Panel):
col.prop(part, "show_health")
col = row.column(align=True)
- col.label(text="Color:")
+ col.label(text=_("Color:"))
col.prop(part, "draw_color", text="")
sub = col.row()
sub.active = part.draw_color in ('VELOCITY', 'ACCELERATION')
- sub.prop(part, "color_maximum", text="Max")
+ sub.prop(part, "color_maximum", text=_("Max"))
if (path):
col.prop(part, "draw_step")
@@ -1013,24 +1014,24 @@ class PARTICLE_PT_children(ParticleButtonsPanel, Panel):
row = layout.row()
col = row.column(align=True)
- col.prop(part, "child_nbr", text="Display")
- col.prop(part, "rendered_child_count", text="Render")
+ col.prop(part, "child_nbr", text=_("Display"))
+ col.prop(part, "rendered_child_count", text=_("Render"))
if part.child_type == 'INTERPOLATED':
col = row.column()
if psys:
- col.prop(psys, "child_seed", text="Seed")
+ col.prop(psys, "child_seed", text=_("Seed"))
col.prop(part, "virtual_parents", slider=True)
col.prop(part, "create_long_hair_children")
else:
col = row.column(align=True)
- col.prop(part, "child_size", text="Size")
- col.prop(part, "child_size_random", text="Random")
+ col.prop(part, "child_size", text=_("Size"))
+ col.prop(part, "child_size_random", text=_("Random"))
split = layout.split()
col = split.column()
- col.label(text="Effects:")
+ col.label(text=_("Effects:"))
sub = col.column(align=True)
sub.prop(part, "clump_factor", slider=True)
@@ -1042,38 +1043,38 @@ class PARTICLE_PT_children(ParticleButtonsPanel, Panel):
if part.child_type == 'SIMPLE':
sub = col.column(align=True)
- sub.prop(part, "child_radius", text="Radius")
- sub.prop(part, "child_roundness", text="Roundness", slider=True)
+ sub.prop(part, "child_radius", text=_("Radius"))
+ sub.prop(part, "child_roundness", text=_("Roundness"), slider=True)
if psys:
- sub.prop(psys, "child_seed", text="Seed")
+ sub.prop(psys, "child_seed", text=_("Seed"))
elif part.virtual_parents > 0.0:
sub = col.column(align=True)
- sub.label(text="Parting not")
- sub.label(text="available with")
- sub.label(text="virtual parents")
+ sub.label(text=_("Parting not"))
+ sub.label(text=_("available with"))
+ sub.label(text=_("virtual parents"))
else:
sub = col.column(align=True)
- sub.prop(part, "child_parting_factor", text="Parting", slider=True)
- sub.prop(part, "child_parting_min", text="Min")
- sub.prop(part, "child_parting_max", text="Max")
+ sub.prop(part, "child_parting_factor", text=_("Parting"), slider=True)
+ sub.prop(part, "child_parting_min", text=_("Min"))
+ sub.prop(part, "child_parting_max", text=_("Max"))
col = split.column()
- col.label(text="Roughness:")
+ col.label(text=_("Roughness:"))
sub = col.column(align=True)
- sub.prop(part, "roughness_1", text="Uniform")
- sub.prop(part, "roughness_1_size", text="Size")
+ sub.prop(part, "roughness_1", text=_("Uniform"))
+ sub.prop(part, "roughness_1_size", text=_("Size"))
sub = col.column(align=True)
sub.prop(part, "roughness_endpoint", "Endpoint")
sub.prop(part, "roughness_end_shape")
sub = col.column(align=True)
- sub.prop(part, "roughness_2", text="Random")
- sub.prop(part, "roughness_2_size", text="Size")
+ sub.prop(part, "roughness_2", text=_("Random"))
+ sub.prop(part, "roughness_2_size", text=_("Size"))
sub.prop(part, "roughness_2_threshold", slider=True)
- layout.row().label(text="Kink:")
+ layout.row().label(text=_("Kink:"))
layout.row().prop(part, "kink", expand=True)
split = layout.split()
@@ -1082,7 +1083,7 @@ class PARTICLE_PT_children(ParticleButtonsPanel, Panel):
col = split.column()
sub = col.column(align=True)
sub.prop(part, "kink_amplitude")
- sub.prop(part, "kink_amplitude_clump", text="Clump", slider=True)
+ sub.prop(part, "kink_amplitude_clump", text=_("Clump"), slider=True)
col.prop(part, "kink_flat", slider=True)
col = split.column()
sub = col.column(align=True)
@@ -1123,25 +1124,25 @@ class PARTICLE_PT_force_fields(ParticleButtonsPanel, Panel):
row = layout.row()
row.prop(part, "use_self_effect")
- row.prop(part, "effector_amount", text="Amount")
+ row.prop(part, "effector_amount", text=_("Amount"))
split = layout.split(percentage=0.2)
- split.label(text="Type 1:")
+ split.label(text=_("Type 1:"))
split.prop(part.force_field_1, "type", text="")
basic_force_field_settings_ui(self, context, part.force_field_1)
if part.force_field_1.type != 'NONE':
- layout.label(text="Falloff:")
+ layout.label(text=_("Falloff:"))
basic_force_field_falloff_ui(self, context, part.force_field_1)
if part.force_field_1.type != 'NONE':
layout.label(text="")
split = layout.split(percentage=0.2)
- split.label(text="Type 2:")
+ split.label(text=_("Type 2:"))
split.prop(part.force_field_2, "type", text="")
basic_force_field_settings_ui(self, context, part.force_field_2)
if part.force_field_2.type != 'NONE':
- layout.label(text="Falloff:")
+ layout.label(text=_("Falloff:"))
basic_force_field_falloff_ui(self, context, part.force_field_2)
@@ -1163,56 +1164,56 @@ class PARTICLE_PT_vertexgroups(ParticleButtonsPanel, Panel):
psys = context.particle_system
row = layout.row()
- row.label(text="Vertex Group")
- row.label(text="Negate")
+ row.label(text=_("Vertex Group"))
+ row.label(text=_("Negate"))
row = layout.row()
- row.prop_search(psys, "vertex_group_density", ob, "vertex_groups", text="Density")
+ row.prop_search(psys, "vertex_group_density", ob, "vertex_groups", text=_("Density"))
row.prop(psys, "invert_vertex_group_density", text="")
# Commented out vertex groups don't work and are still waiting for better implementation
# row = layout.row()
- # row.prop_search(psys, "vertex_group_velocity", ob, "vertex_groups", text="Velocity")
+ # row.prop_search(psys, "vertex_group_velocity", ob, "vertex_groups", text=_("Velocity"))
# row.prop(psys, "invert_vertex_group_velocity", text="")
row = layout.row()
- row.prop_search(psys, "vertex_group_length", ob, "vertex_groups", text="Length")
+ row.prop_search(psys, "vertex_group_length", ob, "vertex_groups", text=_("Length"))
row.prop(psys, "invert_vertex_group_length", text="")
row = layout.row()
- row.prop_search(psys, "vertex_group_clump", ob, "vertex_groups", text="Clump")
+ row.prop_search(psys, "vertex_group_clump", ob, "vertex_groups", text=_("Clump"))
row.prop(psys, "invert_vertex_group_clump", text="")
row = layout.row()
- row.prop_search(psys, "vertex_group_kink", ob, "vertex_groups", text="Kink")
+ row.prop_search(psys, "vertex_group_kink", ob, "vertex_groups", text=_("Kink"))
row.prop(psys, "invert_vertex_group_kink", text="")
row = layout.row()
- row.prop_search(psys, "vertex_group_roughness_1", ob, "vertex_groups", text="Roughness 1")
+ row.prop_search(psys, "vertex_group_roughness_1", ob, "vertex_groups", text=_("Roughness 1"))
row.prop(psys, "invert_vertex_group_roughness_1", text="")
row = layout.row()
- row.prop_search(psys, "vertex_group_roughness_2", ob, "vertex_groups", text="Roughness 2")
+ row.prop_search(psys, "vertex_group_roughness_2", ob, "vertex_groups", text=_("Roughness 2"))
row.prop(psys, "invert_vertex_group_roughness_2", text="")
row = layout.row()
- row.prop_search(psys, "vertex_group_roughness_end", ob, "vertex_groups", text="Roughness End")
+ row.prop_search(psys, "vertex_group_roughness_end", ob, "vertex_groups", text=_("Roughness End"))
row.prop(psys, "invert_vertex_group_roughness_end", text="")
# row = layout.row()
- # row.prop_search(psys, "vertex_group_size", ob, "vertex_groups", text="Size")
+ # row.prop_search(psys, "vertex_group_size", ob, "vertex_groups", text=_("Size"))
# row.prop(psys, "invert_vertex_group_size", text="")
# row = layout.row()
- # row.prop_search(psys, "vertex_group_tangent", ob, "vertex_groups", text="Tangent")
+ # row.prop_search(psys, "vertex_group_tangent", ob, "vertex_groups", text=_("Tangent"))
# row.prop(psys, "invert_vertex_group_tangent", text="")
# row = layout.row()
- # row.prop_search(psys, "vertex_group_rotation", ob, "vertex_groups", text="Rotation")
+ # row.prop_search(psys, "vertex_group_rotation", ob, "vertex_groups", text=_("Rotation"))
# row.prop(psys, "invert_vertex_group_rotation", text="")
# row = layout.row()
- # row.prop_search(psys, "vertex_group_field", ob, "vertex_groups", text="Field")
+ # row.prop_search(psys, "vertex_group_field", ob, "vertex_groups", text=_("Field"))
# row.prop(psys, "invert_vertex_group_field", text="")
diff --git a/release/scripts/startup/bl_ui/properties_physics_cloth.py b/release/scripts/startup/bl_ui/properties_physics_cloth.py
index d5427d8bae8..de74d1473c8 100644
--- a/release/scripts/startup/bl_ui/properties_physics_cloth.py
+++ b/release/scripts/startup/bl_ui/properties_physics_cloth.py
@@ -19,7 +19,7 @@
# <pep8 compliant>
import bpy
from bpy.types import Menu, Panel
-
+from blf import gettext as _
from bl_ui.properties_physics_common import (
point_cache_ui,
@@ -71,50 +71,50 @@ class PHYSICS_PT_cloth(PhysicButtonsPanel, Panel):
col = split.column()
- col.label(text="Presets:")
+ col.label(text=_("Presets:"))
sub = col.row(align=True)
sub.menu("CLOTH_MT_presets", text=bpy.types.CLOTH_MT_presets.bl_label)
sub.operator("cloth.preset_add", text="", icon="ZOOMIN")
sub.operator("cloth.preset_add", text="", icon="ZOOMOUT").remove_active = True
- col.label(text="Quality:")
- col.prop(cloth, "quality", text="Steps", slider=True)
+ col.label(text=_("Quality:"))
+ col.prop(cloth, "quality", text=_("Steps"), slider=True)
- col.label(text="Material:")
+ col.label(text=_("Material:"))
col.prop(cloth, "mass")
- col.prop(cloth, "structural_stiffness", text="Structural")
- col.prop(cloth, "bending_stiffness", text="Bending")
+ col.prop(cloth, "structural_stiffness", text=_("Structural"))
+ col.prop(cloth, "bending_stiffness", text=_("Bending"))
col = split.column()
- col.label(text="Damping:")
- col.prop(cloth, "spring_damping", text="Spring")
- col.prop(cloth, "air_damping", text="Air")
+ col.label(text=_("Damping:"))
+ col.prop(cloth, "spring_damping", text=_("Spring"))
+ col.prop(cloth, "air_damping", text=_("Air"))
- col.prop(cloth, "use_pin_cloth", text="Pinning")
+ col.prop(cloth, "use_pin_cloth", text=_("Pinning"))
sub = col.column()
sub.active = cloth.use_pin_cloth
sub.prop_search(cloth, "vertex_group_mass", ob, "vertex_groups", text="")
- sub.prop(cloth, "pin_stiffness", text="Stiffness")
+ sub.prop(cloth, "pin_stiffness", text=_("Stiffness"))
- col.label(text="Pre roll:")
- col.prop(cloth, "pre_roll", text="Frame")
+ col.label(text=_("Pre roll:"))
+ col.prop(cloth, "pre_roll", text=_("Frame"))
# Disabled for now
"""
if cloth.vertex_group_mass:
- layout.label(text="Goal:")
+ layout.label(text=_("Goal:"))
col = layout.column_flow()
- col.prop(cloth, "goal_default", text="Default")
- col.prop(cloth, "goal_spring", text="Stiffness")
- col.prop(cloth, "goal_friction", text="Friction")
+ col.prop(cloth, "goal_default", text=_("Default"))
+ col.prop(cloth, "goal_spring", text=_("Stiffness"))
+ col.prop(cloth, "goal_friction", text=_("Friction"))
"""
key = ob.data.shape_keys
if key:
- col.label(text="Rest Shape Key:")
+ col.label(text=_("Rest Shape Key:"))
col.prop_search(cloth, "rest_shape_key", key, "key_blocks", text="")
@@ -156,18 +156,18 @@ class PHYSICS_PT_cloth_collision(PhysicButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.prop(cloth, "collision_quality", slider=True, text="Quality")
- col.prop(cloth, "distance_min", slider=True, text="Distance")
- col.prop(cloth, "repel_force", slider=True, text="Repel")
- col.prop(cloth, "distance_repel", slider=True, text="Repel Distance")
+ col.prop(cloth, "collision_quality", slider=True, text=_("Quality"))
+ col.prop(cloth, "distance_min", slider=True, text=_("Distance"))
+ col.prop(cloth, "repel_force", slider=True, text=_("Repel"))
+ col.prop(cloth, "distance_repel", slider=True, text=_("Repel Distance"))
col.prop(cloth, "friction")
col = split.column()
- col.prop(cloth, "use_self_collision", text="Self Collision")
+ col.prop(cloth, "use_self_collision", text=_("Self Collision"))
sub = col.column()
sub.active = cloth.use_self_collision
- sub.prop(cloth, "self_collision_quality", slider=True, text="Quality")
- sub.prop(cloth, "self_distance_min", slider=True, text="Distance")
+ sub.prop(cloth, "self_collision_quality", slider=True, text=_("Quality"))
+ sub.prop(cloth, "self_distance_min", slider=True, text=_("Distance"))
layout.prop(cloth, "group")
@@ -198,14 +198,14 @@ class PHYSICS_PT_cloth_stiffness(PhysicButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Structural Stiffness:")
+ col.label(text=_("Structural Stiffness:"))
col.prop_search(cloth, "vertex_group_structural_stiffness", ob, "vertex_groups", text="")
- col.prop(cloth, "structural_stiffness_max", text="Max")
+ col.prop(cloth, "structural_stiffness_max", text=_("Max"))
col = split.column()
- col.label(text="Bending Stiffness:")
+ col.label(text=_("Bending Stiffness:"))
col.prop_search(cloth, "vertex_group_bending", ob, "vertex_groups", text="")
- col.prop(cloth, "bending_stiffness_max", text="Max")
+ col.prop(cloth, "bending_stiffness_max", text=_("Max"))
class PHYSICS_PT_cloth_field_weights(PhysicButtonsPanel, Panel):
diff --git a/release/scripts/startup/bl_ui/properties_physics_common.py b/release/scripts/startup/bl_ui/properties_physics_common.py
index 204e25d9f01..20b76ec0a84 100644
--- a/release/scripts/startup/bl_ui/properties_physics_common.py
+++ b/release/scripts/startup/bl_ui/properties_physics_common.py
@@ -20,7 +20,7 @@
import bpy
from bpy.types import Panel
-
+from blf import gettext as _
class PhysicButtonsPanel():
bl_space_type = 'PROPERTIES'
@@ -53,27 +53,27 @@ class PHYSICS_PT_add(PhysicButtonsPanel, Panel):
ob = context.object
layout = self.layout
- layout.label("Enable physics for:")
+ layout.label(_("Enable physics for:"))
split = layout.split()
col = split.column()
if(context.object.field.type == 'NONE'):
- col.operator("object.forcefield_toggle", text="Force Field", icon='FORCE_FORCE')
+ col.operator("object.forcefield_toggle", text=_("Force Field"), icon='FORCE_FORCE')
else:
- col.operator("object.forcefield_toggle", text="Force Field", icon='X')
+ col.operator("object.forcefield_toggle", text=_("Force Field"), icon='X')
if(ob.type == 'MESH'):
- physics_add(self, col, context.collision, "Collision", 'COLLISION', 'MOD_PHYSICS', False)
- physics_add(self, col, context.cloth, "Cloth", 'CLOTH', 'MOD_CLOTH', True)
+ physics_add(self, col, context.collision, _("Collision"), 'COLLISION', 'MOD_PHYSICS', False)
+ physics_add(self, col, context.cloth, _("Cloth"), 'CLOTH', 'MOD_CLOTH', True)
col = split.column()
if(ob.type == 'MESH' or ob.type == 'LATTICE'or ob.type == 'CURVE'):
- physics_add(self, col, context.soft_body, "Soft Body", 'SOFT_BODY', 'MOD_SOFT', True)
+ physics_add(self, col, context.soft_body, _("Soft Body"), 'SOFT_BODY', 'MOD_SOFT', True)
if(ob.type == 'MESH'):
- physics_add(self, col, context.fluid, "Fluid", 'FLUID_SIMULATION', 'MOD_FLUIDSIM', True)
- physics_add(self, col, context.smoke, "Smoke", 'SMOKE', 'MOD_SMOKE', True)
+ physics_add(self, col, context.fluid, _("Fluid"), 'FLUID_SIMULATION', 'MOD_FLUIDSIM', True)
+ physics_add(self, col, context.smoke, _("Smoke"), 'SMOKE', 'MOD_SMOKE', True)
#cachetype can be 'PSYS' 'HAIR' 'SMOKE' etc
@@ -95,11 +95,11 @@ def point_cache_ui(self, context, cache, enabled, cachetype):
if cache.use_external:
split = layout.split(percentage=0.80)
- split.prop(cache, "name", text="File Name")
+ split.prop(cache, "name", text=_("File Name"))
split.prop(cache, "index", text="")
row = layout.row()
- row.label(text="File Path:")
+ row.label(text=_("File Path:"))
row.prop(cache, "use_library_path", "Use Lib Path")
layout.prop(cache, "filepath", text="")
@@ -108,13 +108,13 @@ def point_cache_ui(self, context, cache, enabled, cachetype):
else:
if cachetype == 'SMOKE':
if not bpy.data.is_saved:
- layout.label(text="Cache is disabled until the file is saved")
+ layout.label(text=_("Cache is disabled until the file is saved"))
layout.enabled = False
if cache.use_disk_cache:
- layout.prop(cache, "name", text="File Name")
+ layout.prop(cache, "name", text=_("File Name"))
else:
- layout.prop(cache, "name", text="Cache Name")
+ layout.prop(cache, "name", text=_("Cache Name"))
row = layout.row(align=True)
@@ -142,7 +142,7 @@ def point_cache_ui(self, context, cache, enabled, cachetype):
row = layout.row()
row.enabled = enabled and bpy.data.is_saved
row.active = cache.use_disk_cache
- row.label(text="Compression:")
+ row.label(text=_("Compression:"))
row.prop(cache, "compression", expand=True)
layout.separator()
@@ -152,22 +152,22 @@ def point_cache_ui(self, context, cache, enabled, cachetype):
col = split.column()
if cache.is_baked == True:
- col.operator("ptcache.free_bake", text="Free Bake")
+ col.operator("ptcache.free_bake", text=_("Free Bake"))
else:
- col.operator("ptcache.bake", text="Bake").bake = True
+ col.operator("ptcache.bake", text=_("Bake")).bake = True
sub = col.row()
sub.enabled = (cache.frames_skipped or cache.is_outdated) and enabled
- sub.operator("ptcache.bake", text="Calculate To Frame").bake = False
+ sub.operator("ptcache.bake", text=_("Calculate To Frame")).bake = False
sub = col.column()
sub.enabled = enabled
- sub.operator("ptcache.bake_from_cache", text="Current Cache to Bake")
+ sub.operator("ptcache.bake_from_cache", text=_("Current Cache to Bake"))
col = split.column()
- col.operator("ptcache.bake_all", text="Bake All Dynamics").bake = True
- col.operator("ptcache.free_bake_all", text="Free All Bakes")
- col.operator("ptcache.bake_all", text="Update All To Frame").bake = False
+ col.operator("ptcache.bake_all", text=_("Bake All Dynamics")).bake = True
+ col.operator("ptcache.free_bake_all", text=_("Free All Bakes"))
+ col.operator("ptcache.bake_all", text=_("Update All To Frame")).bake = False
def effector_weights_ui(self, context, weights):
@@ -215,7 +215,7 @@ def basic_force_field_settings_ui(self, context, field):
col = split.column()
if field.type == 'DRAG':
- col.prop(field, "linear_drag", text="Linear")
+ col.prop(field, "linear_drag", text=_("Linear"))
else:
col.prop(field, "strength")
@@ -223,12 +223,12 @@ def basic_force_field_settings_ui(self, context, field):
col.prop(field, "size")
col.prop(field, "flow")
elif field.type == 'HARMONIC':
- col.prop(field, "harmonic_damping", text="Damping")
+ col.prop(field, "harmonic_damping", text=_("Damping"))
col.prop(field, "rest_length")
elif field.type == 'VORTEX' and field.shape != 'POINT':
col.prop(field, "inflow")
elif field.type == 'DRAG':
- col.prop(field, "quadratic_drag", text="Quadratic")
+ col.prop(field, "quadratic_drag", text=_("Quadratic"))
else:
col.prop(field, "flow")
@@ -237,19 +237,19 @@ def basic_force_field_settings_ui(self, context, field):
sub.prop(field, "noise")
sub.prop(field, "seed")
if field.type == 'TURBULENCE':
- col.prop(field, "use_global_coords", text="Global")
+ col.prop(field, "use_global_coords", text=_("Global"))
elif field.type == 'HARMONIC':
col.prop(field, "use_multiple_springs")
split = layout.split()
col = split.column()
- col.label(text="Effect point:")
+ col.label(text=_("Effect point:"))
col.prop(field, "apply_to_location")
col.prop(field, "apply_to_rotation")
col = split.column()
- col.label(text="Collision:")
+ col.label(text=_("Collision:"))
col.prop(field, "use_absorption")
@@ -265,7 +265,7 @@ def basic_force_field_falloff_ui(self, context, field):
col.prop(field, "z_direction", text="")
col = split.column()
- col.prop(field, "falloff_power", text="Power")
+ col.prop(field, "falloff_power", text=_("Power"))
split = layout.split()
col = split.column()
@@ -273,14 +273,14 @@ def basic_force_field_falloff_ui(self, context, field):
row.prop(field, "use_min_distance", text="")
sub = row.row()
sub.active = field.use_min_distance
- sub.prop(field, "distance_min", text="Minimum")
+ sub.prop(field, "distance_min", text=_("Minimum"))
col = split.column()
row = col.row(align=True)
row.prop(field, "use_max_distance", text="")
sub = row.row()
sub.active = field.use_max_distance
- sub.prop(field, "distance_max", text="Maximum")
+ sub.prop(field, "distance_max", text=_("Maximum"))
if __name__ == "__main__": # only for live edit.
bpy.utils.register_module(__name__)
diff --git a/release/scripts/startup/bl_ui/properties_physics_field.py b/release/scripts/startup/bl_ui/properties_physics_field.py
index e1dc4d04378..937df5c0ad9 100644
--- a/release/scripts/startup/bl_ui/properties_physics_field.py
+++ b/release/scripts/startup/bl_ui/properties_physics_field.py
@@ -19,7 +19,7 @@
# <pep8 compliant>
import bpy
from bpy.types import Panel
-
+from blf import gettext as _
from bl_ui.properties_physics_common import (
basic_force_field_settings_ui,
@@ -54,13 +54,13 @@ class PHYSICS_PT_field(PhysicButtonsPanel, Panel):
field = ob.field
split = layout.split(percentage=0.2)
- split.label(text="Type:")
+ split.label(text=_("Type:"))
split.prop(field, "type", text="")
if field.type not in {'NONE', 'GUIDE', 'TEXTURE'}:
split = layout.split(percentage=0.2)
- split.label(text="Shape:")
+ split.label(text=_("Shape:"))
split.prop(field, "shape", text="")
split = layout.split()
@@ -76,7 +76,7 @@ class PHYSICS_PT_field(PhysicButtonsPanel, Panel):
col.prop(field, "use_guide_path_weight")
col = split.column()
- col.label(text="Clumping:")
+ col.label(text=_("Clumping:"))
col.prop(field, "guide_clump_amount")
col.prop(field, "guide_clump_shape")
@@ -117,7 +117,7 @@ class PHYSICS_PT_field(PhysicButtonsPanel, Panel):
if field.type not in {'NONE', 'GUIDE'}:
- layout.label(text="Falloff:")
+ layout.label(text=_("Falloff:"))
layout.prop(field, "falloff_type", expand=True)
basic_force_field_falloff_ui(self, context, field)
@@ -128,20 +128,20 @@ class PHYSICS_PT_field(PhysicButtonsPanel, Panel):
split = layout.split(percentage=0.35)
col = split.column()
- col.label(text="Angular:")
- col.prop(field, "use_radial_min", text="Use Minimum")
- col.prop(field, "use_radial_max", text="Use Maximum")
+ col.label(text=_("Angular:"))
+ col.prop(field, "use_radial_min", text=_("Use Minimum"))
+ col.prop(field, "use_radial_max", text=_("Use Maximum"))
col = split.column()
- col.prop(field, "radial_falloff", text="Power")
+ col.prop(field, "radial_falloff", text=_("Power"))
sub = col.column()
sub.active = field.use_radial_min
- sub.prop(field, "radial_min", text="Angle")
+ sub.prop(field, "radial_min", text=_("Angle"))
sub = col.column()
sub.active = field.use_radial_max
- sub.prop(field, "radial_max", text="Angle")
+ sub.prop(field, "radial_max", text=_("Angle"))
elif field.falloff_type == 'TUBE':
layout.separator()
@@ -149,20 +149,20 @@ class PHYSICS_PT_field(PhysicButtonsPanel, Panel):
split = layout.split(percentage=0.35)
col = split.column()
- col.label(text="Radial:")
- col.prop(field, "use_radial_min", text="Use Minimum")
- col.prop(field, "use_radial_max", text="Use Maximum")
+ col.label(text=_("Radial:"))
+ col.prop(field, "use_radial_min", text=_("Use Minimum"))
+ col.prop(field, "use_radial_max", text=_("Use Maximum"))
col = split.column()
- col.prop(field, "radial_falloff", text="Power")
+ col.prop(field, "radial_falloff", text=_("Power"))
sub = col.column()
sub.active = field.use_radial_min
- sub.prop(field, "radial_min", text="Distance")
+ sub.prop(field, "radial_min", text=_("Distance"))
sub = col.column()
sub.active = field.use_radial_max
- sub.prop(field, "radial_max", text="Distance")
+ sub.prop(field, "radial_max", text=_("Distance"))
class PHYSICS_PT_collision(PhysicButtonsPanel, Panel):
@@ -192,31 +192,31 @@ class PHYSICS_PT_collision(PhysicButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Particle:")
+ col.label(text=_("Particle:"))
col.prop(settings, "permeability", slider=True)
col.prop(settings, "stickness")
col.prop(settings, "use_particle_kill")
- col.label(text="Particle Damping:")
+ col.label(text=_("Particle Damping:"))
sub = col.column(align=True)
- sub.prop(settings, "damping_factor", text="Factor", slider=True)
- sub.prop(settings, "damping_random", text="Random", slider=True)
+ sub.prop(settings, "damping_factor", text=_("Factor"), slider=True)
+ sub.prop(settings, "damping_random", text=_("Random"), slider=True)
- col.label(text="Particle Friction:")
+ col.label(text=_("Particle Friction:"))
sub = col.column(align=True)
- sub.prop(settings, "friction_factor", text="Factor", slider=True)
- sub.prop(settings, "friction_random", text="Random", slider=True)
+ sub.prop(settings, "friction_factor", text=_("Factor"), slider=True)
+ sub.prop(settings, "friction_random", text=_("Random"), slider=True)
col = split.column()
- col.label(text="Soft Body and Cloth:")
+ col.label(text=_("Soft Body and Cloth:"))
sub = col.column(align=True)
- sub.prop(settings, "thickness_outer", text="Outer", slider=True)
- sub.prop(settings, "thickness_inner", text="Inner", slider=True)
+ sub.prop(settings, "thickness_outer", text=_("Outer"), slider=True)
+ sub.prop(settings, "thickness_inner", text=_("Inner"), slider=True)
- col.label(text="Soft Body Damping:")
- col.prop(settings, "damping", text="Factor", slider=True)
+ col.label(text=_("Soft Body Damping:"))
+ col.prop(settings, "damping", text=_("Factor"), slider=True)
- col.label(text="Force Fields:")
- col.prop(settings, "absorption", text="Absorption")
+ col.label(text=_("Force Fields:"))
+ col.prop(settings, "absorption", text=_("Absorption"))
if __name__ == "__main__": # only for live edit.
bpy.utils.register_module(__name__)
diff --git a/release/scripts/startup/bl_ui/properties_physics_fluid.py b/release/scripts/startup/bl_ui/properties_physics_fluid.py
index 55629e6c6b9..c89d7ec9755 100644
--- a/release/scripts/startup/bl_ui/properties_physics_fluid.py
+++ b/release/scripts/startup/bl_ui/properties_physics_fluid.py
@@ -19,7 +19,7 @@
# <pep8 compliant>
import bpy
from bpy.types import Panel
-
+from blf import gettext as _
class PhysicButtonsPanel():
bl_space_type = 'PROPERTIES'
@@ -46,7 +46,7 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel, Panel):
row = layout.row()
if fluid is None:
- row.label("Built without fluids")
+ row.label(_("Built without fluids"))
return
row.prop(fluid, "type")
@@ -58,28 +58,28 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel, Panel):
layout.active = fluid.use
if fluid.type == 'DOMAIN':
- layout.operator("fluid.bake", text="Bake (Req. Memory: %s)" % fluid.memory_estimate, icon='MOD_FLUIDSIM')
+ layout.operator("fluid.bake", text=_("Bake (Req. Memory:")+" %s)" % fluid.memory_estimate, icon='MOD_FLUIDSIM')
split = layout.split()
col = split.column()
- col.label(text="Resolution:")
- col.prop(fluid, "resolution", text="Final")
- col.label(text="Render Display:")
+ col.label(text=_("Resolution:"))
+ col.prop(fluid, "resolution", text=_("Final"))
+ col.label(text=_("Render Display:"))
col.prop(fluid, "render_display_mode", text="")
col = split.column()
col.label()
- col.prop(fluid, "preview_resolution", text="Preview")
- col.label(text="Viewport Display:")
+ col.prop(fluid, "preview_resolution", text=_("Preview"))
+ col.label(text=_("Viewport Display:"))
col.prop(fluid, "viewport_display_mode", text="")
split = layout.split()
col = split.column()
- col.label(text="Time:")
+ col.label(text=_("Time:"))
sub = col.column(align=True)
- sub.prop(fluid, "start_time", text="Start")
- sub.prop(fluid, "end_time", text="End")
+ sub.prop(fluid, "start_time", text=_("Start"))
+ sub.prop(fluid, "end_time", text=_("End"))
col = split.column()
col.label()
@@ -92,36 +92,36 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Volume Initialization:")
+ col.label(text=_("Volume Initialization:"))
col.prop(fluid, "volume_initialization", text="")
col.prop(fluid, "use_animated_mesh")
col = split.column()
- col.label(text="Initial Velocity:")
+ col.label(text=_("Initial Velocity:"))
col.prop(fluid, "initial_velocity", text="")
elif fluid.type == 'OBSTACLE':
split = layout.split()
col = split.column()
- col.label(text="Volume Initialization:")
+ col.label(text=_("Volume Initialization:"))
col.prop(fluid, "volume_initialization", text="")
col.prop(fluid, "use_animated_mesh")
col = split.column()
- col.label(text="Slip Type:")
+ col.label(text=_("Slip Type:"))
col.prop(fluid, "slip_type", text="")
if fluid.slip_type == 'PARTIALSLIP':
- col.prop(fluid, "partial_slip_factor", slider=True, text="Amount")
+ col.prop(fluid, "partial_slip_factor", slider=True, text=_("Amount"))
- col.label(text="Impact:")
- col.prop(fluid, "impact_factor", text="Factor")
+ col.label(text=_("Impact:"))
+ col.prop(fluid, "impact_factor", text=_("Factor"))
elif fluid.type == 'INFLOW':
split = layout.split()
col = split.column()
- col.label(text="Volume Initialization:")
+ col.label(text=_("Volume Initialization:"))
col.prop(fluid, "volume_initialization", text="")
col.prop(fluid, "use_animated_mesh")
row = col.row()
@@ -129,14 +129,14 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel, Panel):
row.prop(fluid, "use_local_coords")
col = split.column()
- col.label(text="Inflow Velocity:")
+ col.label(text=_("Inflow Velocity:"))
col.prop(fluid, "inflow_velocity", text="")
elif fluid.type == 'OUTFLOW':
split = layout.split()
col = split.column()
- col.label(text="Volume Initialization:")
+ col.label(text=_("Volume Initialization:"))
col.prop(fluid, "volume_initialization", text="")
col.prop(fluid, "use_animated_mesh")
@@ -146,12 +146,12 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Influence:")
- col.prop(fluid, "particle_influence", text="Size")
- col.prop(fluid, "alpha_influence", text="Alpha")
+ col.label(text=_("Influence:"))
+ col.prop(fluid, "particle_influence", text=_("Size"))
+ col.prop(fluid, "alpha_influence", text=_("Alpha"))
col = split.column()
- col.label(text="Type:")
+ col.label(text=_("Type:"))
col.prop(fluid, "use_drops")
col.prop(fluid, "use_floats")
col.prop(fluid, "show_tracer")
@@ -167,24 +167,24 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel, Panel):
col.prop(fluid, "use_reverse_frames")
col = split.column()
- col.label(text="Time:")
+ col.label(text=_("Time:"))
sub = col.column(align=True)
- sub.prop(fluid, "start_time", text="Start")
- sub.prop(fluid, "end_time", text="End")
+ sub.prop(fluid, "start_time", text=_("Start"))
+ sub.prop(fluid, "end_time", text=_("End"))
split = layout.split()
col = split.column()
- col.label(text="Attraction Force:")
+ col.label(text=_("Attraction Force:"))
sub = col.column(align=True)
- sub.prop(fluid, "attraction_strength", text="Strength")
- sub.prop(fluid, "attraction_radius", text="Radius")
+ sub.prop(fluid, "attraction_strength", text=_("Strength"))
+ sub.prop(fluid, "attraction_radius", text=_("Radius"))
col = split.column()
- col.label(text="Velocity Force:")
+ col.label(text=_("Velocity Force:"))
sub = col.column(align=True)
- sub.prop(fluid, "velocity_strength", text="Strength")
- sub.prop(fluid, "velocity_radius", text="Radius")
+ sub.prop(fluid, "velocity_strength", text=_("Strength"))
+ sub.prop(fluid, "velocity_radius", text=_("Radius"))
class PHYSICS_PT_domain_gravity(PhysicButtonsPanel, Panel):
@@ -206,33 +206,33 @@ class PHYSICS_PT_domain_gravity(PhysicButtonsPanel, Panel):
col = split.column()
if scene.use_gravity:
- col.label(text="Using Scene Gravity", icon="SCENE_DATA")
+ col.label(text=_("Using Scene Gravity"), icon="SCENE_DATA")
sub = col.column()
sub.enabled = False
sub.prop(fluid, "gravity", text="")
else:
- col.label(text="Gravity:")
+ col.label(text=_("Gravity:"))
col.prop(fluid, "gravity", text="")
if scene.unit_settings.system != 'NONE':
- col.label(text="Using Scene Size Units", icon="SCENE_DATA")
+ col.label(text=_("Using Scene Size Units"), icon="SCENE_DATA")
sub = col.column()
sub.enabled = False
- sub.prop(fluid, "simulation_scale", text="Metres")
+ sub.prop(fluid, "simulation_scale", text=_("Metres"))
else:
- col.label(text="Real World Size:")
- col.prop(fluid, "simulation_scale", text="Metres")
+ col.label(text=_("Real World Size:"))
+ col.prop(fluid, "simulation_scale", text=_("Metres"))
col = split.column()
- col.label(text="Viscosity Presets:")
+ col.label(text=_("Viscosity Presets:"))
sub = col.column(align=True)
sub.prop(fluid, "viscosity_preset", text="")
if fluid.viscosity_preset == 'MANUAL':
- sub.prop(fluid, "viscosity_base", text="Base")
- sub.prop(fluid, "viscosity_exponent", text="Exponent", slider=True)
+ sub.prop(fluid, "viscosity_base", text=_("Base"))
+ sub.prop(fluid, "viscosity_exponent", text=_("Exponent"), slider=True)
- col.label(text="Optimization:")
+ col.label(text=_("Optimization:"))
col.prop(fluid, "grid_levels", slider=True)
col.prop(fluid, "compressibility", slider=True)
@@ -254,16 +254,16 @@ class PHYSICS_PT_domain_boundary(PhysicButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Slip Type:")
+ col.label(text=_("Slip Type:"))
col.prop(fluid, "slip_type", text="")
if fluid.slip_type == 'PARTIALSLIP':
- col.prop(fluid, "partial_slip_factor", slider=True, text="Amount")
+ col.prop(fluid, "partial_slip_factor", slider=True, text=_("Amount"))
col.prop(fluid, "surface_noobs")
col = split.column()
- col.label(text="Surface:")
- col.prop(fluid, "surface_smooth", text="Smoothing")
- col.prop(fluid, "surface_subdivisions", text="Subdivisions")
+ col.label(text=_("Surface:"))
+ col.prop(fluid, "surface_smooth", text=_("Smoothing"))
+ col.prop(fluid, "surface_subdivisions", text=_("Subdivisions"))
class PHYSICS_PT_domain_particles(PhysicButtonsPanel, Panel):
diff --git a/release/scripts/startup/bl_ui/properties_physics_smoke.py b/release/scripts/startup/bl_ui/properties_physics_smoke.py
index 771a778380d..61c477b6d49 100644
--- a/release/scripts/startup/bl_ui/properties_physics_smoke.py
+++ b/release/scripts/startup/bl_ui/properties_physics_smoke.py
@@ -19,7 +19,7 @@
# <pep8 compliant>
import bpy
from bpy.types import Panel
-
+from blf import gettext as _
from bl_ui.properties_physics_common import (
point_cache_ui,
@@ -59,23 +59,23 @@ class PHYSICS_PT_smoke(PhysicButtonsPanel, Panel):
split.enabled = not domain.point_cache.is_baked
col = split.column()
- col.label(text="Resolution:")
- col.prop(domain, "resolution_max", text="Divisions")
- col.label(text="Time:")
- col.prop(domain, "time_scale", text="Scale")
- col.label(text="Border Collisions:")
+ col.label(text=_("Resolution:"))
+ col.prop(domain, "resolution_max", text=_("Divisions"))
+ col.label(text=_("Time:"))
+ col.prop(domain, "time_scale", text=_("Scale"))
+ col.label(text=_("Border Collisions:"))
col.prop(domain, "collision_extents", text="")
col = split.column()
- col.label(text="Behavior:")
+ col.label(text=_("Behavior:"))
col.prop(domain, "alpha")
- col.prop(domain, "beta", text="Temp. Diff.")
+ col.prop(domain, "beta", text=_("Temp. Diff."))
col.prop(domain, "vorticity")
- col.prop(domain, "use_dissolve_smoke", text="Dissolve")
+ col.prop(domain, "use_dissolve_smoke", text=_("Dissolve"))
sub = col.column()
sub.active = domain.use_dissolve_smoke
- sub.prop(domain, "dissolve_speed", text="Time")
- sub.prop(domain, "use_dissolve_smoke_log", text="Slow")
+ sub.prop(domain, "dissolve_speed", text=_("Time"))
+ sub.prop(domain, "use_dissolve_smoke_log", text_("Slow"))
elif md.smoke_type == 'FLOW':
@@ -85,20 +85,20 @@ class PHYSICS_PT_smoke(PhysicButtonsPanel, Panel):
col = split.column()
col.prop(flow, "use_outflow")
- col.label(text="Particle System:")
+ col.label(text=_("Particle System:"))
col.prop_search(flow, "particle_system", ob, "particle_systems", text="")
sub = col.column()
sub.active = not md.flow_settings.use_outflow
- sub.prop(flow, "initial_velocity", text="Initial Velocity")
+ sub.prop(flow, "initial_velocity", text=_("Initial Velocity"))
sub = sub.column()
sub.active = flow.initial_velocity
- sub.prop(flow, "velocity_factor", text="Multiplier")
+ sub.prop(flow, "velocity_factor", text=_("Multiplier"))
sub = split.column()
sub.active = not md.flow_settings.use_outflow
- sub.label(text="Initial Values:")
+ sub.label(text=_("Initial Values:"))
sub.prop(flow, "use_absolute")
sub.prop(flow, "density")
sub.prop(flow, "temperature")
@@ -121,14 +121,14 @@ class PHYSICS_PT_smoke_groups(PhysicButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Flow Group:")
+ col.label(text=_("Flow Group:"))
col.prop(group, "fluid_group", text="")
- #col.label(text="Effector Group:")
+ #col.label(text=_("Effector Group:"))
#col.prop(group, "effector_group", text="")
col = split.column()
- col.label(text="Collision Group:")
+ col.label(text=_("Collision Group:"))
col.prop(group, "collision_group", text="")
@@ -157,12 +157,12 @@ class PHYSICS_PT_smoke_highres(PhysicButtonsPanel, Panel):
split.enabled = not md.point_cache.is_baked
col = split.column()
- col.label(text="Resolution:")
- col.prop(md, "amplify", text="Divisions")
+ col.label(text=_("Resolution:"))
+ col.prop(md, "amplify", text=_("Divisions"))
col.prop(md, "smooth_emitter")
col = split.column()
- col.label(text="Noise Method:")
+ col.label(text=_("Noise Method:"))
col.row().prop(md, "noise_type", text="")
col.prop(md, "strength")
@@ -184,7 +184,7 @@ class PHYSICS_PT_smoke_cache(PhysicButtonsPanel, Panel):
md = context.smoke.domain_settings
cache = md.point_cache
- layout.label(text="Compression:")
+ layout.label(text=_("Compression:"))
layout.prop(md, "point_cache_compress_type", expand=True)
point_cache_ui(self, context, cache, (cache.is_baked is False), 'SMOKE')
diff --git a/release/scripts/startup/bl_ui/properties_physics_softbody.py b/release/scripts/startup/bl_ui/properties_physics_softbody.py
index 0b55ccf9516..5449e54c6e6 100644
--- a/release/scripts/startup/bl_ui/properties_physics_softbody.py
+++ b/release/scripts/startup/bl_ui/properties_physics_softbody.py
@@ -19,7 +19,7 @@
# <pep8 compliant>
import bpy
from bpy.types import Panel
-
+from blf import gettext as _
from bl_ui.properties_physics_common import (
point_cache_ui,
@@ -62,13 +62,13 @@ class PHYSICS_PT_softbody(PhysicButtonsPanel, Panel):
split.enabled = softbody_panel_enabled(md)
col = split.column()
- col.label(text="Object:")
+ col.label(text=_("Object:"))
col.prop(softbody, "friction")
col.prop(softbody, "mass")
- col.prop_search(softbody, "vertex_group_mass", ob, "vertex_groups", text="Mass:")
+ col.prop_search(softbody, "vertex_group_mass", ob, "vertex_groups", text=_("Mass:"))
col = split.column()
- col.label(text="Simulation:")
+ col.label(text=_("Simulation:"))
col.prop(softbody, "speed")
@@ -114,18 +114,18 @@ class PHYSICS_PT_softbody_goal(PhysicButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Goal Strengths:")
- col.prop(softbody, "goal_default", text="Default")
+ col.label(text=_("Goal Strengths:"))
+ col.prop(softbody, "goal_default", text=_("Default"))
sub = col.column(align=True)
- sub.prop(softbody, "goal_min", text="Minimum")
- sub.prop(softbody, "goal_max", text="Maximum")
+ sub.prop(softbody, "goal_min", text=_("Minimum"))
+ sub.prop(softbody, "goal_max", text=_("Maximum"))
col = split.column()
- col.label(text="Goal Settings:")
- col.prop(softbody, "goal_spring", text="Stiffness")
- col.prop(softbody, "goal_friction", text="Damping")
+ col.label(text=_("Goal Settings:"))
+ col.prop(softbody, "goal_spring", text=_("Stiffness"))
+ col.prop(softbody, "goal_friction", text=_("Damping"))
- layout.prop_search(softbody, "vertex_group_goal", ob, "vertex_groups", text="Vertex Group")
+ layout.prop_search(softbody, "vertex_group_goal", ob, "vertex_groups", text=_("Vertex Group"))
class PHYSICS_PT_softbody_edge(PhysicButtonsPanel, Panel):
@@ -154,14 +154,14 @@ class PHYSICS_PT_softbody_edge(PhysicButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Springs:")
+ col.label(text=_("Springs:"))
col.prop(softbody, "pull")
col.prop(softbody, "push")
col.prop(softbody, "damping")
col.prop(softbody, "plastic")
col.prop(softbody, "bend")
- col.prop(softbody, "spring_length", text="Length")
- col.prop_search(softbody, "vertex_group_spring", ob, "vertex_groups", text="Springs:")
+ col.prop(softbody, "spring_length", text=_("Length"))
+ col.prop_search(softbody, "vertex_group_spring", ob, "vertex_groups", text=_("Springs:"))
col = split.column()
col.prop(softbody, "use_stiff_quads")
@@ -169,16 +169,16 @@ class PHYSICS_PT_softbody_edge(PhysicButtonsPanel, Panel):
sub.active = softbody.use_stiff_quads
sub.prop(softbody, "shear")
- col.label(text="Aerodynamics:")
+ col.label(text=_("Aerodynamics:"))
col.row().prop(softbody, "aerodynamics_type", expand=True)
- col.prop(softbody, "aero", text="Factor")
+ col.prop(softbody, "aero", text=_("Factor"))
#sub = col.column()
#sub.enabled = softbody.aero > 0
- col.label(text="Collision:")
- col.prop(softbody, "use_edge_collision", text="Edge")
- col.prop(softbody, "use_face_collision", text="Face")
+ col.label(text=_("Collision:"))
+ col.prop(softbody, "use_edge_collision", text=_("Edge"))
+ col.prop(softbody, "use_face_collision", text=_("Face"))
class PHYSICS_PT_softbody_collision(PhysicButtonsPanel, Panel):
@@ -203,14 +203,14 @@ class PHYSICS_PT_softbody_collision(PhysicButtonsPanel, Panel):
layout.active = softbody.use_self_collision and softbody_panel_enabled(md)
- layout.label(text="Collision Ball Size Calculation:")
+ layout.label(text=_("Collision Ball Size Calculation:"))
layout.prop(softbody, "collision_type", expand=True)
col = layout.column(align=True)
- col.label(text="Ball:")
- col.prop(softbody, "ball_size", text="Size")
- col.prop(softbody, "ball_stiff", text="Stiffness")
- col.prop(softbody, "ball_damp", text="Dampening")
+ col.label(text=_("Ball:"))
+ col.prop(softbody, "ball_size", text=_("Size"))
+ col.prop(softbody, "ball_stiff", text=_("Stiffness"))
+ col.prop(softbody, "ball_damp", text=_("Dampening"))
class PHYSICS_PT_softbody_solver(PhysicButtonsPanel, Panel):
@@ -233,18 +233,18 @@ class PHYSICS_PT_softbody_solver(PhysicButtonsPanel, Panel):
split = layout.split()
col = split.column(align=True)
- col.label(text="Step Size:")
+ col.label(text=_("Step Size:"))
col.prop(softbody, "step_min")
col.prop(softbody, "step_max")
- col.prop(softbody, "use_auto_step", text="Auto-Step")
+ col.prop(softbody, "use_auto_step", text=_("Auto-Step"))
col = split.column()
col.prop(softbody, "error_threshold")
- col.label(text="Helpers:")
+ col.label(text=_("Helpers:"))
col.prop(softbody, "choke")
col.prop(softbody, "fuzzy")
- layout.label(text="Diagnostics:")
+ layout.label(text=_("Diagnostics:"))
layout.prop(softbody, "use_diagnose")
layout.prop(softbody, "use_estimate_matrix")
diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py
index 395cfc6934e..1e9c15eedae 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -19,6 +19,7 @@
# <pep8 compliant>
import bpy
from bpy.types import Menu, Panel
+from blf import gettext as _
class RENDER_MT_presets(Menu):
@@ -64,10 +65,10 @@ class RENDER_PT_render(RenderButtonsPanel, Panel):
rd = context.scene.render
row = layout.row()
- row.operator("render.render", text="Image", icon='RENDER_STILL')
- row.operator("render.render", text="Animation", icon='RENDER_ANIMATION').animation = True
+ row.operator("render.render", text=_("Image"), icon='RENDER_STILL')
+ row.operator("render.render", text=_("Animation"), icon='RENDER_ANIMATION').animation = True
- layout.prop(rd, "display_mode", text="Display")
+ layout.prop(rd, "display_mode", text=_("Display"))
class RENDER_PT_layers(RenderButtonsPanel, Panel):
@@ -97,25 +98,25 @@ class RENDER_PT_layers(RenderButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.prop(scene, "layers", text="Scene")
+ col.prop(scene, "layers", text=_("Scene"))
col.label(text="")
- col.prop(rl, "light_override", text="Light")
- col.prop(rl, "material_override", text="Material")
+ col.prop(rl, "light_override", text=_("Light"))
+ col.prop(rl, "material_override", text=_("Material"))
col = split.column()
- col.prop(rl, "layers", text="Layer")
- col.label(text="Mask Layers:")
+ col.prop(rl, "layers", text=_("Layer"))
+ col.label(text=_("Mask Layers:"))
col.prop(rl, "layers_zmask", text="")
layout.separator()
- layout.label(text="Include:")
+ layout.label(text=_("Include:"))
split = layout.split()
col = split.column()
col.prop(rl, "use_zmask")
row = col.row()
- row.prop(rl, "invert_zmask", text="Negate")
+ row.prop(rl, "invert_zmask", text=_("Negate"))
row.active = rl.use_zmask
col.prop(rl, "use_all_z")
@@ -134,7 +135,7 @@ class RENDER_PT_layers(RenderButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Passes:")
+ col.label(text=_("Passes:"))
col.prop(rl, "use_pass_combined")
col.prop(rl, "use_pass_z")
col.prop(rl, "use_pass_vector")
@@ -193,29 +194,29 @@ class RENDER_PT_dimensions(RenderButtonsPanel, Panel):
col = split.column()
sub = col.column(align=True)
- sub.label(text="Resolution:")
+ sub.label(text=_("Resolution:"))
sub.prop(rd, "resolution_x", text="X")
sub.prop(rd, "resolution_y", text="Y")
sub.prop(rd, "resolution_percentage", text="")
- sub.label(text="Aspect Ratio:")
+ sub.label(text=_("Aspect Ratio:"))
sub.prop(rd, "pixel_aspect_x", text="X")
sub.prop(rd, "pixel_aspect_y", text="Y")
row = col.row()
- row.prop(rd, "use_border", text="Border")
+ row.prop(rd, "use_border", text=_("Border"))
sub = row.row()
sub.active = rd.use_border
- sub.prop(rd, "use_crop_to_border", text="Crop")
+ sub.prop(rd, "use_crop_to_border", text=_("Crop"))
col = split.column()
sub = col.column(align=True)
- sub.label(text="Frame Range:")
- sub.prop(scene, "frame_start", text="Start")
- sub.prop(scene, "frame_end", text="End")
- sub.prop(scene, "frame_step", text="Step")
+ sub.label(text=_("Frame Range:"))
+ sub.prop(scene, "frame_start")
+ sub.prop(scene, "frame_end")
+ sub.prop(scene, "frame_step")
- sub.label(text="Frame Rate:")
+ sub.label(text=_("Frame Rate:"))
if rd.fps_base == 1:
fps_rate = round(rd.fps / rd.fps_base)
else:
@@ -225,7 +226,7 @@ class RENDER_PT_dimensions(RenderButtonsPanel, Panel):
custom_framerate = (fps_rate not in {23.98, 24, 25, 29.97, 30, 50, 59.94, 60})
if custom_framerate == True:
- fps_label_text = "Custom (" + str(fps_rate) + " fps)"
+ fps_label_text = _("Custom (") + str(fps_rate) + " fps)"
else:
fps_label_text = str(fps_rate) + " fps"
@@ -235,10 +236,10 @@ class RENDER_PT_dimensions(RenderButtonsPanel, Panel):
sub.prop(rd, "fps")
sub.prop(rd, "fps_base", text="/")
subrow = sub.row(align=True)
- subrow.label(text="Time Remapping:")
+ subrow.label(text=_("Time Remapping:"))
subrow = sub.row(align=True)
- subrow.prop(rd, "frame_map_old", text="Old")
- subrow.prop(rd, "frame_map_new", text="New")
+ subrow.prop(rd, "frame_map_old", text=_("Old"))
+ subrow.prop(rd, "frame_map_new", text=_("New"))
class RENDER_PT_antialiasing(RenderButtonsPanel, Panel):
@@ -266,7 +267,7 @@ class RENDER_PT_antialiasing(RenderButtonsPanel, Panel):
col = split.column()
col.prop(rd, "pixel_filter_type", text="")
- col.prop(rd, "filter_size", text="Size")
+ col.prop(rd, "filter_size", text=_("Size"))
class RENDER_PT_motion_blur(RenderButtonsPanel, Panel):
@@ -308,15 +309,15 @@ class RENDER_PT_shading(RenderButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.prop(rd, "use_textures", text="Textures")
- col.prop(rd, "use_shadows", text="Shadows")
- col.prop(rd, "use_sss", text="Subsurface Scattering")
- col.prop(rd, "use_envmaps", text="Environment Map")
+ col.prop(rd, "use_textures", text=_("Textures"))
+ col.prop(rd, "use_shadows", text=_("Shadows"))
+ col.prop(rd, "use_sss", text=_("Subsurface Scattering"))
+ col.prop(rd, "use_envmaps", text=_("Environment Map"))
col = split.column()
- col.prop(rd, "use_raytrace", text="Ray Tracing")
+ col.prop(rd, "use_raytrace", text=_("Ray Tracing"))
col.prop(rd, "use_color_management")
- col.prop(rd, "alpha_mode", text="Alpha")
+ col.prop(rd, "alpha_mode", text=_("Alpha"))
class RENDER_PT_performance(RenderButtonsPanel, Panel):
@@ -332,18 +333,18 @@ class RENDER_PT_performance(RenderButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Threads:")
+ col.label(text=_("Threads:"))
col.row().prop(rd, "threads_mode", expand=True)
sub = col.column()
sub.enabled = rd.threads_mode == 'FIXED'
sub.prop(rd, "threads")
sub = col.column(align=True)
- sub.label(text="Tiles:")
+ sub.label(text=_("Tiles:"))
sub.prop(rd, "parts_x", text="X")
sub.prop(rd, "parts_y", text="Y")
col = split.column()
- col.label(text="Memory:")
+ col.label(text=_("Memory:"))
sub = col.column()
sub.enabled = not (rd.use_border or rd.use_full_sample)
sub.prop(rd, "use_save_buffers")
@@ -353,13 +354,13 @@ class RENDER_PT_performance(RenderButtonsPanel, Panel):
sub.prop(rd, "use_free_unused_nodes")
sub = col.column()
sub.active = rd.use_raytrace
- sub.label(text="Acceleration structure:")
+ sub.label(text=_("Acceleration structure:"))
sub.prop(rd, "raytrace_method", text="")
if rd.raytrace_method == 'OCTREE':
- sub.prop(rd, "octree_resolution", text="Resolution")
+ sub.prop(rd, "octree_resolution", text=_("Resolution"))
else:
- sub.prop(rd, "use_instances", text="Instances")
- sub.prop(rd, "use_local_coords", text="Local Coordinates")
+ sub.prop(rd, "use_instances", text=_("Instances"))
+ sub.prop(rd, "use_local_coords", text=_("Local Coordinates"))
class RENDER_PT_post_processing(RenderButtonsPanel, Panel):
@@ -378,24 +379,24 @@ class RENDER_PT_post_processing(RenderButtonsPanel, Panel):
col.prop(rd, "use_compositing")
col.prop(rd, "use_sequencer")
- split.prop(rd, "dither_intensity", text="Dither", slider=True)
+ split.prop(rd, "dither_intensity", text=_("Dither"), slider=True)
layout.separator()
split = layout.split()
col = split.column()
- col.prop(rd, "use_fields", text="Fields")
+ col.prop(rd, "use_fields", text=_("Fields"))
sub = col.column()
sub.active = rd.use_fields
sub.row().prop(rd, "field_order", expand=True)
- sub.prop(rd, "use_fields_still", text="Still")
+ sub.prop(rd, "use_fields_still", text=_("Still"))
col = split.column()
col.prop(rd, "use_edge_enhance")
sub = col.column()
sub.active = rd.use_edge_enhance
- sub.prop(rd, "edge_threshold", text="Threshold", slider=True)
+ sub.prop(rd, "edge_threshold", text=_("Threshold"), slider=True)
sub.prop(rd, "edge_color", text="")
@@ -419,26 +420,26 @@ class RENDER_PT_stamp(RenderButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.prop(rd, "use_stamp_time", text="Time")
- col.prop(rd, "use_stamp_date", text="Date")
- col.prop(rd, "use_stamp_render_time", text="RenderTime")
- col.prop(rd, "use_stamp_frame", text="Frame")
- col.prop(rd, "use_stamp_scene", text="Scene")
- col.prop(rd, "use_stamp_camera", text="Camera")
- col.prop(rd, "use_stamp_lens", text="Lens")
- col.prop(rd, "use_stamp_filename", text="Filename")
- col.prop(rd, "use_stamp_marker", text="Marker")
- col.prop(rd, "use_stamp_sequencer_strip", text="Seq. Strip")
+ col.prop(rd, "use_stamp_time", text=_("Time"))
+ col.prop(rd, "use_stamp_date", text=_("Date"))
+ col.prop(rd, "use_stamp_render_time", text=_("RenderTime"))
+ col.prop(rd, "use_stamp_frame", text=_("Frame"))
+ col.prop(rd, "use_stamp_scene", text=_("Scene"))
+ col.prop(rd, "use_stamp_camera", text=_("Camera"))
+ col.prop(rd, "use_stamp_lens", text=_("Lens"))
+ col.prop(rd, "use_stamp_filename", text=_("Filename"))
+ col.prop(rd, "use_stamp_marker", text=_("Marker"))
+ col.prop(rd, "use_stamp_sequencer_strip", text=_("Seq. Strip"))
col = split.column()
col.active = rd.use_stamp
col.prop(rd, "stamp_foreground", slider=True)
col.prop(rd, "stamp_background", slider=True)
col.separator()
- col.prop(rd, "stamp_font_size", text="Font Size")
+ col.prop(rd, "stamp_font_size", text=_("Font Size"))
row = layout.split(percentage=0.2)
- row.prop(rd, "use_stamp_note", text="Note")
+ row.prop(rd, "use_stamp_note", text=_("Note"))
sub = row.row()
sub.active = rd.use_stamp_note
sub.prop(rd, "stamp_note_text", text="")
@@ -460,7 +461,7 @@ class RENDER_PT_output(RenderButtonsPanel, Panel):
col = split.column()
col.prop(rd, "file_format", text="")
- col.row().prop(rd, "color_mode", text="Color", expand=True)
+ col.row().prop(rd, "color_mode", text=_("Color"), expand=True)
col = split.column()
col.prop(rd, "use_file_extension")
@@ -471,11 +472,11 @@ class RENDER_PT_output(RenderButtonsPanel, Panel):
layout.prop(rd, "file_quality", slider=True)
if file_format == 'PNG':
- layout.prop(rd, "file_quality", slider=True, text="Compression")
+ layout.prop(rd, "file_quality", slider=True, text=_("Compression"))
if file_format in {'OPEN_EXR', 'MULTILAYER'}:
row = layout.row()
- row.prop(rd, "exr_codec", text="Codec")
+ row.prop(rd, "exr_codec", text=_("Codec"))
if file_format == 'OPEN_EXR':
row = layout.row()
@@ -486,7 +487,7 @@ class RENDER_PT_output(RenderButtonsPanel, Panel):
elif file_format == 'JPEG2000':
split = layout.split()
col = split.column()
- col.label(text="Depth:")
+ col.label(text=_("Depth:"))
col.row().prop(rd, "jpeg2k_depth", expand=True)
col = split.column()
@@ -499,13 +500,13 @@ class RENDER_PT_output(RenderButtonsPanel, Panel):
split.label("FIXME: hard coded Non-Linear, Gamma:1.0")
'''
col = split.column()
- col.prop(rd, "use_cineon_log", text="Convert to Log")
+ col.prop(rd, "use_cineon_log", text=_("Convert to Log"))
col = split.column(align=True)
col.active = rd.use_cineon_log
- col.prop(rd, "cineon_black", text="Black")
- col.prop(rd, "cineon_white", text="White")
- col.prop(rd, "cineon_gamma", text="Gamma")
+ col.prop(rd, "cineon_black", text=_("Black"))
+ col.prop(rd, "cineon_white", text=_("White"))
+ col.prop(rd, "cineon_gamma", text=_("Gamma"))
'''
elif file_format == 'TIFF':
@@ -517,11 +518,11 @@ class RENDER_PT_output(RenderButtonsPanel, Panel):
elif file_format == 'QUICKTIME_QTKIT':
split = layout.split()
col = split.column()
- col.prop(rd, "quicktime_codec_type", text="Video Codec")
- col.prop(rd, "quicktime_codec_spatial_quality", text="Quality")
+ col.prop(rd, "quicktime_codec_type", text=_("Video Codec"))
+ col.prop(rd, "quicktime_codec_spatial_quality", text=_("Quality"))
# Audio
- col.prop(rd, "quicktime_audiocodec_type", text="Audio Codec")
+ col.prop(rd, "quicktime_audiocodec_type", text=_("Audio Codec"))
if rd.quicktime_audiocodec_type != 'No audio':
split = layout.split()
if rd.quicktime_audiocodec_type == 'LPCM':
@@ -559,7 +560,7 @@ class RENDER_PT_encoding(RenderButtonsPanel, Panel):
rd = context.scene.render
- layout.menu("RENDER_MT_ffmpeg_presets", text="Presets")
+ layout.menu("RENDER_MT_ffmpeg_presets", text=_("Presets"))
split = layout.split()
split.prop(rd, "ffmpeg_format")
@@ -575,22 +576,22 @@ class RENDER_PT_encoding(RenderButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Rate:")
- col.prop(rd, "ffmpeg_minrate", text="Minimum")
- col.prop(rd, "ffmpeg_maxrate", text="Maximum")
- col.prop(rd, "ffmpeg_buffersize", text="Buffer")
+ col.label(text=_("Rate:"))
+ col.prop(rd, "ffmpeg_minrate", text=_("Minimum"))
+ col.prop(rd, "ffmpeg_maxrate", text=_("Maximum"))
+ col.prop(rd, "ffmpeg_buffersize", text=_("Buffer"))
col = split.column()
col.prop(rd, "ffmpeg_autosplit")
- col.label(text="Mux:")
- col.prop(rd, "ffmpeg_muxrate", text="Rate")
- col.prop(rd, "ffmpeg_packetsize", text="Packet Size")
+ col.label(text=_("Mux:"))
+ col.prop(rd, "ffmpeg_muxrate", text=_("Rate"))
+ col.prop(rd, "ffmpeg_packetsize", text=_("Packet Size"))
layout.separator()
# Audio:
if rd.ffmpeg_format not in {'MP3'}:
- layout.prop(rd, "ffmpeg_audio_codec", text="Audio Codec")
+ layout.prop(rd, "ffmpeg_audio_codec", text=_("Audio Codec"))
row = layout.row()
row.prop(rd, "ffmpeg_audio_bitrate")
@@ -632,7 +633,7 @@ class RENDER_PT_bake(RenderButtonsPanel, Panel):
col = split.column()
col.prop(rd, "use_bake_clear")
col.prop(rd, "bake_margin")
- col.prop(rd, "bake_quad_split", text="Split")
+ col.prop(rd, "bake_quad_split", text=_("Split"))
col = split.column()
col.prop(rd, "use_bake_selected_to_active")
diff --git a/release/scripts/startup/bl_ui/properties_scene.py b/release/scripts/startup/bl_ui/properties_scene.py
index 5a25e608a39..c82b4ac69dc 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -20,7 +20,7 @@
import bpy
from bpy.types import Operator, Panel
from rna_prop_ui import PropertyPanel
-
+from blf import gettext as _
class SceneButtonsPanel():
bl_space_type = 'PROPERTIES'
@@ -41,7 +41,7 @@ class SCENE_PT_scene(SceneButtonsPanel, Panel):
scene = context.scene
layout.prop(scene, "camera")
- layout.prop(scene, "background_set", text="Background")
+ layout.prop(scene, "background_set", text=_("Background"))
class SCENE_PT_audio(SceneButtonsPanel, Panel):
@@ -59,15 +59,15 @@ class SCENE_PT_audio(SceneButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label("Listener:")
+ col.label(_("Listener:"))
col.prop(scene, "audio_distance_model", text="")
- col.prop(scene, "audio_doppler_speed", text="Speed")
- col.prop(scene, "audio_doppler_factor", text="Doppler")
+ col.prop(scene, "audio_doppler_speed", text=_("Speed"))
+ col.prop(scene, "audio_doppler_factor", text=_("Doppler"))
col = split.column()
- col.label("Format:")
+ col.label(_("Format:"))
col.prop(rd, "ffmpeg_audio_channels", text="")
- col.prop(rd, "ffmpeg_audio_mixrate", text="Rate")
+ col.prop(rd, "ffmpeg_audio_mixrate", text=_("Rate"))
layout.operator("sound.mixdown")
@@ -86,7 +86,7 @@ class SCENE_PT_unit(SceneButtonsPanel, Panel):
row = layout.row()
row.active = (unit.system != 'NONE')
- row.prop(unit, "scale_length", text="Scale")
+ row.prop(unit, "scale_length", text=_("Scale"))
row.prop(unit, "use_separate")
@@ -115,11 +115,11 @@ class SCENE_PT_keying_sets(SceneButtonsPanel, Panel):
subcol = col.column()
subcol.operator_context = 'INVOKE_DEFAULT'
- op = subcol.operator("anim.keying_set_export", text="Export to File")
+ op = subcol.operator("anim.keying_set_export", text=_("Export to File"))
op.filepath = "keyingset.py"
col = row.column()
- col.label(text="Keyframing Settings:")
+ col.label(text=_("Keyframing Settings:"))
col.prop(ks, "bl_options")
@@ -138,7 +138,7 @@ class SCENE_PT_keying_set_paths(SceneButtonsPanel, Panel):
ks = scene.keying_sets.active
row = layout.row()
- row.label(text="Paths:")
+ row.label(text=_("Paths:"))
row = layout.row()
@@ -152,20 +152,20 @@ class SCENE_PT_keying_set_paths(SceneButtonsPanel, Panel):
ksp = ks.paths.active
if ksp:
col = layout.column()
- col.label(text="Target:")
+ col.label(text=_("Target:"))
col.template_any_ID(ksp, "id", "id_type")
col.template_path_builder(ksp, "data_path", ksp.id)
row = layout.row()
col = row.column()
- col.label(text="Array Target:")
+ col.label(text=_("Array Target:"))
col.prop(ksp, "use_entire_array")
if ksp.use_entire_array is False:
col.prop(ksp, "array_index")
col = row.column()
- col.label(text="F-Curve Grouping:")
+ col.label(text=_("F-Curve Grouping:"))
col.prop(ksp, "group_method")
if ksp.group_method == 'NAMED':
col.prop(ksp, "group")
@@ -209,14 +209,14 @@ class SCENE_PT_simplify(SceneButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.prop(rd, "simplify_subdivision", text="Subdivision")
- col.prop(rd, "simplify_child_particles", text="Child Particles")
+ col.prop(rd, "simplify_subdivision", text=_("Subdivision"))
+ col.prop(rd, "simplify_child_particles", text=_("Child Particles"))
col.prop(rd, "use_simplify_triangulate")
col = split.column()
- col.prop(rd, "simplify_shadow_samples", text="Shadow Samples")
- col.prop(rd, "simplify_ao_sss", text="AO and SSS")
+ col.prop(rd, "simplify_shadow_samples", text=_("Shadow Samples"))
+ col.prop(rd, "simplify_ao_sss", text=_("AO and SSS"))
class SCENE_PT_custom_props(SceneButtonsPanel, PropertyPanel, Panel):
diff --git a/release/scripts/startup/bl_ui/properties_texture.py b/release/scripts/startup/bl_ui/properties_texture.py
index 34f5a948ee7..c5f8708040f 100644
--- a/release/scripts/startup/bl_ui/properties_texture.py
+++ b/release/scripts/startup/bl_ui/properties_texture.py
@@ -20,6 +20,7 @@
import bpy
from bpy.types import Menu, Panel
from rna_prop_ui import PropertyPanel
+from blf import gettext as _
class TEXTURE_MT_specials(Menu):
@@ -143,11 +144,11 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel, Panel):
if tex.use_nodes:
if slot:
- split.label(text="Output:")
+ split.label(text=_("Output:"))
split.prop(slot, "output_node", text="")
else:
- split.label(text="Type:")
+ split.label(text=_("Type:"))
split.prop(tex, "type", text="")
@@ -178,21 +179,21 @@ class TEXTURE_PT_colors(TextureButtonsPanel, Panel):
tex = context.texture
- layout.prop(tex, "use_color_ramp", text="Ramp")
+ layout.prop(tex, "use_color_ramp", text=_("Ramp"))
if tex.use_color_ramp:
layout.template_color_ramp(tex, "color_ramp", expand=True)
split = layout.split()
col = split.column()
- col.label(text="RGB Multiply:")
+ col.label(text=_("RGB Multiply:"))
sub = col.column(align=True)
sub.prop(tex, "factor_red", text="R")
sub.prop(tex, "factor_green", text="G")
sub.prop(tex, "factor_blue", text="B")
col = split.column()
- col.label(text="Adjust:")
+ col.label(text=_("Adjust:"))
col.prop(tex, "intensity")
col.prop(tex, "contrast")
col.prop(tex, "saturation")
@@ -235,17 +236,17 @@ class TEXTURE_PT_clouds(TextureTypePanel, Panel):
tex = context.texture
layout.prop(tex, "cloud_type", expand=True)
- layout.label(text="Noise:")
- layout.prop(tex, "noise_type", text="Type", expand=True)
- layout.prop(tex, "noise_basis", text="Basis")
+ layout.label(text=_("Noise:"))
+ layout.prop(tex, "noise_type", text=_("Type"), expand=True)
+ layout.prop(tex, "noise_basis", text=_("Basis"))
split = layout.split()
col = split.column()
- col.prop(tex, "noise_scale", text="Size")
- col.prop(tex, "noise_depth", text="Depth")
+ col.prop(tex, "noise_scale", text=_("Size"))
+ col.prop(tex, "noise_depth", text=_("Depth"))
- split.prop(tex, "nabla", text="Nabla")
+ split.prop(tex, "nabla", text=_("Nabla"))
class TEXTURE_PT_wood(TextureTypePanel, Panel):
@@ -263,15 +264,15 @@ class TEXTURE_PT_wood(TextureTypePanel, Panel):
col = layout.column()
col.active = tex.wood_type in {'RINGNOISE', 'BANDNOISE'}
- col.label(text="Noise:")
- col.row().prop(tex, "noise_type", text="Type", expand=True)
- layout.prop(tex, "noise_basis", text="Basis")
+ col.label(text=_("Noise:"))
+ col.row().prop(tex, "noise_type", text=_("Type"), expand=True)
+ layout.prop(tex, "noise_basis", text=_("Basis"))
split = layout.split()
split.active = tex.wood_type in {'RINGNOISE', 'BANDNOISE'}
col = split.column()
- col.prop(tex, "noise_scale", text="Size")
+ col.prop(tex, "noise_scale", text=_("Size"))
col.prop(tex, "turbulence")
split.prop(tex, "nabla")
@@ -289,15 +290,15 @@ class TEXTURE_PT_marble(TextureTypePanel, Panel):
layout.prop(tex, "marble_type", expand=True)
layout.prop(tex, "noise_basis_2", expand=True)
- layout.label(text="Noise:")
- layout.prop(tex, "noise_type", text="Type", expand=True)
- layout.prop(tex, "noise_basis", text="Basis")
+ layout.label(text=_("Noise:"))
+ layout.prop(tex, "noise_type", text=_("Type"), expand=True)
+ layout.prop(tex, "noise_basis", text=_("Basis"))
split = layout.split()
col = split.column()
- col.prop(tex, "noise_scale", text="Size")
- col.prop(tex, "noise_depth", text="Depth")
+ col.prop(tex, "noise_scale", text=_("Size"))
+ col.prop(tex, "noise_depth", text=_("Depth"))
col = split.column()
col.prop(tex, "turbulence")
@@ -315,7 +316,7 @@ class TEXTURE_PT_magic(TextureTypePanel, Panel):
tex = context.texture
row = layout.row()
- row.prop(tex, "noise_depth", text="Depth")
+ row.prop(tex, "noise_depth", text=_("Depth"))
row.prop(tex, "turbulence")
@@ -348,12 +349,12 @@ class TEXTURE_PT_stucci(TextureTypePanel, Panel):
tex = context.texture
layout.prop(tex, "stucci_type", expand=True)
- layout.label(text="Noise:")
- layout.prop(tex, "noise_type", text="Type", expand=True)
- layout.prop(tex, "noise_basis", text="Basis")
+ layout.label(text=_("Noise:"))
+ layout.prop(tex, "noise_type", text=_("Type"), expand=True)
+ layout.prop(tex, "noise_basis", text=_("Basis"))
row = layout.row()
- row.prop(tex, "noise_scale", text="Size")
+ row.prop(tex, "noise_scale", text=_("Size"))
row.prop(tex, "turbulence")
@@ -371,13 +372,13 @@ class TEXTURE_PT_image(TextureTypePanel, Panel):
def texture_filter_common(tex, layout):
- layout.label(text="Filter:")
+ layout.label(text=_("Filter:"))
layout.prop(tex, "filter_type", text="")
if tex.use_mipmap and tex.filter_type in {'AREA', 'EWA', 'FELINE'}:
if tex.filter_type == 'FELINE':
- layout.prop(tex, "filter_probes", text="Probes")
+ layout.prop(tex, "filter_probes", text=_("Probes"))
else:
- layout.prop(tex, "filter_eccentricity", text="Eccentricity")
+ layout.prop(tex, "filter_eccentricity", text=_("Eccentricity"))
layout.prop(tex, "filter_size")
layout.prop(tex, "use_filter_size_min")
@@ -399,12 +400,12 @@ class TEXTURE_PT_image_sampling(TextureTypePanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Alpha:")
- col.prop(tex, "use_alpha", text="Use")
- col.prop(tex, "use_calculate_alpha", text="Calculate")
- col.prop(tex, "invert_alpha", text="Invert")
+ col.label(text=_("Alpha:"))
+ col.prop(tex, "use_alpha", text=_("Use"))
+ col.prop(tex, "use_calculate_alpha", text=_("Calculate"))
+ col.prop(tex, "invert_alpha", text=_("Invert"))
col.separator()
- col.prop(tex, "use_flip_axis", text="Flip X/Y Axis")
+ col.prop(tex, "use_flip_axis", text=_("Flip X/Y Axis"))
col = split.column()
@@ -445,12 +446,12 @@ class TEXTURE_PT_image_mapping(TextureTypePanel, Panel):
if tex.extension == 'REPEAT':
col = split.column(align=True)
- col.label(text="Repeat:")
+ col.label(text=_("Repeat:"))
col.prop(tex, "repeat_x", text="X")
col.prop(tex, "repeat_y", text="Y")
col = split.column(align=True)
- col.label(text="Mirror:")
+ col.label(text=_("Mirror:"))
row = col.row()
row.prop(tex, "use_mirror_x", text="X")
row.active = (tex.repeat_x > 1)
@@ -462,11 +463,11 @@ class TEXTURE_PT_image_mapping(TextureTypePanel, Panel):
elif tex.extension == 'CHECKER':
col = split.column(align=True)
row = col.row()
- row.prop(tex, "use_checker_even", text="Even")
- row.prop(tex, "use_checker_odd", text="Odd")
+ row.prop(tex, "use_checker_even", text=_("Even"))
+ row.prop(tex, "use_checker_odd", text=_("Odd"))
col = split.column()
- col.prop(tex, "checker_distance", text="Distance")
+ col.prop(tex, "checker_distance", text=_("Distance"))
layout.separator()
@@ -474,12 +475,12 @@ class TEXTURE_PT_image_mapping(TextureTypePanel, Panel):
col = split.column(align=True)
#col.prop(tex, "crop_rectangle")
- col.label(text="Crop Minimum:")
+ col.label(text=_("Crop Minimum:"))
col.prop(tex, "crop_min_x", text="X")
col.prop(tex, "crop_min_y", text="Y")
col = split.column(align=True)
- col.label(text="Crop Maximum:")
+ col.label(text=_("Crop Maximum:"))
col.prop(tex, "crop_max_x", text="X")
col.prop(tex, "crop_max_y", text="Y")
@@ -517,9 +518,9 @@ class TEXTURE_PT_envmap(TextureTypePanel, Panel):
col = split.column(align=True)
- col.label(text="Clipping:")
- col.prop(env, "clip_start", text="Start")
- col.prop(env, "clip_end", text="End")
+ col.label(text=_("Clipping:"))
+ col.prop(env, "clip_start", text=_("Start"))
+ col.prop(env, "clip_end", text=_("End"))
class TEXTURE_PT_envmap_sampling(TextureTypePanel, Panel):
@@ -551,7 +552,7 @@ class TEXTURE_PT_musgrave(TextureTypePanel, Panel):
split = layout.split()
col = split.column()
- col.prop(tex, "dimension_max", text="Dimension")
+ col.prop(tex, "dimension_max", text=_("Dimension"))
col.prop(tex, "lacunarity")
col.prop(tex, "octaves")
@@ -560,16 +561,16 @@ class TEXTURE_PT_musgrave(TextureTypePanel, Panel):
if musgrave_type in {'HETERO_TERRAIN', 'RIDGED_MULTIFRACTAL', 'HYBRID_MULTIFRACTAL'}:
col.prop(tex, "offset")
if musgrave_type in {'MULTIFRACTAL', 'RIDGED_MULTIFRACTAL', 'HYBRID_MULTIFRACTAL'}:
- col.prop(tex, "noise_intensity", text="Intensity")
+ col.prop(tex, "noise_intensity", text=_("Intensity"))
if musgrave_type in {'RIDGED_MULTIFRACTAL', 'HYBRID_MULTIFRACTAL'}:
col.prop(tex, "gain")
- layout.label(text="Noise:")
+ layout.label(text=_("Noise:"))
- layout.prop(tex, "noise_basis", text="Basis")
+ layout.prop(tex, "noise_basis", text=_("Basis"))
row = layout.row()
- row.prop(tex, "noise_scale", text="Size")
+ row.prop(tex, "noise_scale", text=_("Size"))
row.prop(tex, "nabla")
@@ -586,26 +587,26 @@ class TEXTURE_PT_voronoi(TextureTypePanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Distance Metric:")
+ col.label(text=_("Distance Metric:"))
col.prop(tex, "distance_metric", text="")
sub = col.column()
sub.active = tex.distance_metric == 'MINKOVSKY'
- sub.prop(tex, "minkovsky_exponent", text="Exponent")
- col.label(text="Coloring:")
+ sub.prop(tex, "minkovsky_exponent", text=_("Exponent"))
+ col.label(text=_("Coloring:"))
col.prop(tex, "color_mode", text="")
- col.prop(tex, "noise_intensity", text="Intensity")
+ col.prop(tex, "noise_intensity", text=_("Intensity"))
col = split.column()
sub = col.column(align=True)
- sub.label(text="Feature Weights:")
+ sub.label(text=_("Feature Weights:"))
sub.prop(tex, "weight_1", text="1", slider=True)
sub.prop(tex, "weight_2", text="2", slider=True)
sub.prop(tex, "weight_3", text="3", slider=True)
sub.prop(tex, "weight_4", text="4", slider=True)
- layout.label(text="Noise:")
+ layout.label(text=_("Noise:"))
row = layout.row()
- row.prop(tex, "noise_scale", text="Size")
+ row.prop(tex, "noise_scale", text=_("Size"))
row.prop(tex, "nabla")
@@ -620,13 +621,13 @@ class TEXTURE_PT_distortednoise(TextureTypePanel, Panel):
tex = context.texture
layout.prop(tex, "noise_distortion")
- layout.prop(tex, "noise_basis", text="Basis")
+ layout.prop(tex, "noise_basis", text=_("Basis"))
split = layout.split()
col = split.column()
- col.prop(tex, "distortion", text="Distortion")
- col.prop(tex, "noise_scale", text="Size")
+ col.prop(tex, "distortion", text=_("Distortion"))
+ col.prop(tex, "noise_scale", text=_("Size"))
split.prop(tex, "nabla")
@@ -693,26 +694,26 @@ class TEXTURE_PT_pointdensity(TextureButtonsPanel, Panel):
col = split.column()
if pd.point_source == 'PARTICLE_SYSTEM':
- col.label(text="Object:")
+ col.label(text=_("Object:"))
col.prop(pd, "object", text="")
sub = col.column()
sub.enabled = bool(pd.object)
if pd.object:
- sub.label(text="System:")
+ sub.label(text=_("System:"))
sub.prop_search(pd, "particle_system", pd.object, "particle_systems", text="")
- sub.label(text="Cache:")
+ sub.label(text=_("Cache:"))
sub.prop(pd, "particle_cache_space", text="")
else:
- col.label(text="Object:")
+ col.label(text=_("Object:"))
col.prop(pd, "object", text="")
- col.label(text="Cache:")
+ col.label(text=_("Cache:"))
col.prop(pd, "vertex_cache_space", text="")
col.separator()
if pd.point_source == 'PARTICLE_SYSTEM':
- col.label(text="Color Source:")
+ col.label(text=_("Color Source:"))
col.prop(pd, "color_source", text="")
if pd.color_source in {'PARTICLE_SPEED', 'PARTICLE_VELOCITY'}:
col.prop(pd, "speed_scale")
@@ -722,7 +723,7 @@ class TEXTURE_PT_pointdensity(TextureButtonsPanel, Panel):
col = split.column()
col.label()
col.prop(pd, "radius")
- col.label(text="Falloff:")
+ col.label(text=_("Falloff:"))
col.prop(pd, "falloff", text="")
if pd.falloff == 'SOFT':
col.prop(pd, "falloff_soft")
@@ -733,7 +734,7 @@ class TEXTURE_PT_pointdensity(TextureButtonsPanel, Panel):
if pd.use_falloff_curve:
col = layout.column()
- col.label(text="Falloff Curve")
+ col.label(text=_("Falloff Curve"))
col.template_curve_mapping(pd, "falloff_curve", brush=False)
@@ -762,9 +763,9 @@ class TEXTURE_PT_pointdensity_turbulence(TextureButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Influence:")
+ col.label(text=_("Influence:"))
col.prop(pd, "turbulence_influence", text="")
- col.label(text="Noise Basis:")
+ col.label(text=_("Noise Basis:"))
col.prop(pd, "noise_basis", text="")
col = split.column()
@@ -801,7 +802,7 @@ class TEXTURE_PT_mapping(TextureSlotPanel, Panel):
if not isinstance(idblock, bpy.types.Brush):
split = layout.split(percentage=0.3)
col = split.column()
- col.label(text="Coordinates:")
+ col.label(text=_("Coordinates:"))
col = split.column()
col.prop(tex, "texture_coords", text="")
@@ -810,12 +811,12 @@ class TEXTURE_PT_mapping(TextureSlotPanel, Panel):
ob = context.object
if ob and ob.type == 'MESH':
split = layout.split(percentage=0.3)
- split.label(text="Mesh:")
+ split.label(text=_("Mesh:"))
split.prop(ob.data, "texco_mesh", text="")
"""
elif tex.texture_coords == 'UV':
split = layout.split(percentage=0.3)
- split.label(text="Layer:")
+ split.label(text=_("Layer:"))
ob = context.object
if ob and ob.type == 'MESH':
split.prop_search(tex, "uv_layer", ob.data, "uv_textures", text="")
@@ -824,12 +825,12 @@ class TEXTURE_PT_mapping(TextureSlotPanel, Panel):
elif tex.texture_coords == 'OBJECT':
split = layout.split(percentage=0.3)
- split.label(text="Object:")
+ split.label(text=_("Object:"))
split.prop(tex, "object", text="")
if isinstance(idblock, bpy.types.Brush):
if context.sculpt_object:
- layout.label(text="Brush Mapping:")
+ layout.label(text=_("Brush Mapping:"))
layout.prop(tex, "map_mode", expand=True)
row = layout.row()
@@ -838,7 +839,7 @@ class TEXTURE_PT_mapping(TextureSlotPanel, Panel):
else:
if isinstance(idblock, bpy.types.Material):
split = layout.split(percentage=0.3)
- split.label(text="Projection:")
+ split.label(text=_("Projection:"))
split.prop(tex, "mapping", text="")
split = layout.split()
@@ -900,111 +901,111 @@ class TEXTURE_PT_influence(TextureSlotPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Diffuse:")
- factor_but(col, "use_map_diffuse", "diffuse_factor", "Intensity")
- factor_but(col, "use_map_color_diffuse", "diffuse_color_factor", "Color")
- factor_but(col, "use_map_alpha", "alpha_factor", "Alpha")
- factor_but(col, "use_map_translucency", "translucency_factor", "Translucency")
+ col.label(text=_("Diffuse:"))
+ factor_but(col, "use_map_diffuse", "diffuse_factor", _("Intensity"))
+ factor_but(col, "use_map_color_diffuse", "diffuse_color_factor", _("Color"))
+ factor_but(col, "use_map_alpha", "alpha_factor", _("Alpha"))
+ factor_but(col, "use_map_translucency", "translucency_factor", _("Translucency"))
- col.label(text="Specular:")
- factor_but(col, "use_map_specular", "specular_factor", "Intensity")
- factor_but(col, "use_map_color_spec", "specular_color_factor", "Color")
- factor_but(col, "use_map_hardness", "hardness_factor", "Hardness")
+ col.label(text=_("Specular:"))
+ factor_but(col, "use_map_specular", "specular_factor", _("Intensity"))
+ factor_but(col, "use_map_color_spec", "specular_color_factor", _("Color"))
+ factor_but(col, "use_map_hardness", "hardness_factor", _("Hardness"))
col = split.column()
- col.label(text="Shading:")
- factor_but(col, "use_map_ambient", "ambient_factor", "Ambient")
- factor_but(col, "use_map_emit", "emit_factor", "Emit")
- factor_but(col, "use_map_mirror", "mirror_factor", "Mirror")
- factor_but(col, "use_map_raymir", "raymir_factor", "Ray Mirror")
+ col.label(text=_("Shading:"))
+ factor_but(col, "use_map_ambient", "ambient_factor", _("Ambient"))
+ factor_but(col, "use_map_emit", "emit_factor", _("Emit"))
+ factor_but(col, "use_map_mirror", "mirror_factor", _("Mirror"))
+ factor_but(col, "use_map_raymir", "raymir_factor", _("Ray Mirror"))
- col.label(text="Geometry:")
+ col.label(text=_("Geometry:"))
# XXX replace 'or' when displacement is fixed to not rely on normal influence value.
- sub_tmp = factor_but(col, "use_map_normal", "normal_factor", "Normal")
+ sub_tmp = factor_but(col, "use_map_normal", "normal_factor", _("Normal"))
sub_tmp.active = (tex.use_map_normal or tex.use_map_displacement)
# END XXX
- factor_but(col, "use_map_warp", "warp_factor", "Warp")
- factor_but(col, "use_map_displacement", "displacement_factor", "Displace")
+ factor_but(col, "use_map_warp", "warp_factor", _("Warp"))
+ factor_but(col, "use_map_displacement", "displacement_factor", _("Displace"))
#sub = col.column()
#sub.active = tex.use_map_translucency or tex.map_emit or tex.map_alpha or tex.map_raymir or tex.map_hardness or tex.map_ambient or tex.map_specularity or tex.map_reflection or tex.map_mirror
- #sub.prop(tex, "default_value", text="Amount", slider=True)
+ #sub.prop(tex, "default_value", text=_("Amount"), slider=True)
elif idblock.type == 'HALO':
- layout.label(text="Halo:")
+ layout.label(text=_("Halo:"))
split = layout.split()
col = split.column()
- factor_but(col, "use_map_color_diffuse", "diffuse_color_factor", "Color")
- factor_but(col, "use_map_alpha", "alpha_factor", "Alpha")
+ factor_but(col, "use_map_color_diffuse", "diffuse_color_factor", _("Color"))
+ factor_but(col, "use_map_alpha", "alpha_factor", _("Alpha"))
col = split.column()
- factor_but(col, "use_map_raymir", "raymir_factor", "Size")
- factor_but(col, "use_map_hardness", "hardness_factor", "Hardness")
- factor_but(col, "use_map_translucency", "translucency_factor", "Add")
+ factor_but(col, "use_map_raymir", "raymir_factor", _("Size"))
+ factor_but(col, "use_map_hardness", "hardness_factor", _("Hardness"))
+ factor_but(col, "use_map_translucency", "translucency_factor", _("Add"))
elif idblock.type == 'VOLUME':
split = layout.split()
col = split.column()
- factor_but(col, "use_map_density", "density_factor", "Density")
- factor_but(col, "use_map_emission", "emission_factor", "Emission")
- factor_but(col, "use_map_scatter", "scattering_factor", "Scattering")
- factor_but(col, "use_map_reflect", "reflection_factor", "Reflection")
+ factor_but(col, "use_map_density", "density_factor", _("Density"))
+ factor_but(col, "use_map_emission", "emission_factor", _("Emission"))
+ factor_but(col, "use_map_scatter", "scattering_factor", _("Scattering"))
+ factor_but(col, "use_map_reflect", "reflection_factor", _("Reflection"))
col = split.column()
col.label(text=" ")
- factor_but(col, "use_map_color_emission", "emission_color_factor", "Emission Color")
- factor_but(col, "use_map_color_transmission", "transmission_color_factor", "Transmission Color")
- factor_but(col, "use_map_color_reflection", "reflection_color_factor", "Reflection Color")
+ factor_but(col, "use_map_color_emission", "emission_color_factor", _("Emission Color"))
+ factor_but(col, "use_map_color_transmission", "transmission_color_factor", _("Transmission Color"))
+ factor_but(col, "use_map_color_reflection", "reflection_color_factor", _("Reflection Color"))
elif isinstance(idblock, bpy.types.Lamp):
split = layout.split()
col = split.column()
- factor_but(col, "use_map_color", "color_factor", "Color")
+ factor_but(col, "use_map_color", "color_factor", _("Color"))
col = split.column()
- factor_but(col, "use_map_shadow", "shadow_factor", "Shadow")
+ factor_but(col, "use_map_shadow", "shadow_factor", _("Shadow"))
elif isinstance(idblock, bpy.types.World):
split = layout.split()
col = split.column()
- factor_but(col, "use_map_blend", "blend_factor", "Blend")
- factor_but(col, "use_map_horizon", "horizon_factor", "Horizon")
+ factor_but(col, "use_map_blend", "blend_factor", _("Blend"))
+ factor_but(col, "use_map_horizon", "horizon_factor", _("Horizon"))
col = split.column()
- factor_but(col, "use_map_zenith_up", "zenith_up_factor", "Zenith Up")
- factor_but(col, "use_map_zenith_down", "zenith_down_factor", "Zenith Down")
+ factor_but(col, "use_map_zenith_up", "zenith_up_factor", _("Zenith Up"))
+ factor_but(col, "use_map_zenith_down", "zenith_down_factor", _("Zenith Down"))
elif isinstance(idblock, bpy.types.ParticleSettings):
split = layout.split()
col = split.column()
- col.label(text="General:")
- factor_but(col, "use_map_time", "time_factor", "Time")
- factor_but(col, "use_map_life", "life_factor", "Lifetime")
- factor_but(col, "use_map_density", "density_factor", "Density")
- factor_but(col, "use_map_size", "size_factor", "Size")
+ col.label(text=_("General:"))
+ factor_but(col, "use_map_time", "time_factor", _("Time"))
+ factor_but(col, "use_map_life", "life_factor", _("Lifetime"))
+ factor_but(col, "use_map_density", "density_factor", _("Density"))
+ factor_but(col, "use_map_size", "size_factor", _("Size"))
col = split.column()
- col.label(text="Physics:")
- factor_but(col, "use_map_velocity", "velocity_factor", "Velocity")
- factor_but(col, "use_map_damp", "damp_factor", "Damp")
- factor_but(col, "use_map_gravity", "gravity_factor", "Gravity")
- factor_but(col, "use_map_field", "field_factor", "Force Fields")
+ col.label(text=_("Physics:"))
+ factor_but(col, "use_map_velocity", "velocity_factor", _("Velocity"))
+ factor_but(col, "use_map_damp", "damp_factor", _("Damp"))
+ factor_but(col, "use_map_gravity", "gravity_factor", _("Gravity"))
+ factor_but(col, "use_map_field", "field_factor", _("Force Fields"))
- layout.label(text="Hair:")
+ layout.label(text=_("Hair:"))
split = layout.split()
col = split.column()
- factor_but(col, "use_map_length", "length_factor", "Length")
- factor_but(col, "use_map_clump", "clump_factor", "Clump")
+ factor_but(col, "use_map_length", "length_factor", _("Length"))
+ factor_but(col, "use_map_clump", "clump_factor", _("Clump"))
col = split.column()
- factor_but(col, "use_map_kink", "kink_factor", "Kink")
- factor_but(col, "use_map_rough", "rough_factor", "Rough")
+ factor_but(col, "use_map_kink", "kink_factor", _("Kink"))
+ factor_but(col, "use_map_rough", "rough_factor", _("Rough"))
layout.separator()
@@ -1012,32 +1013,32 @@ class TEXTURE_PT_influence(TextureSlotPanel, Panel):
split = layout.split()
col = split.column()
- col.prop(tex, "blend_type", text="Blend")
+ col.prop(tex, "blend_type", text=_("Blend"))
col.prop(tex, "use_rgb_to_intensity")
# color is used on grayscale textures even when use_rgb_to_intensity is disabled.
col.prop(tex, "color", text="")
col = split.column()
- col.prop(tex, "invert", text="Negative")
+ col.prop(tex, "invert", text=_("Negative"))
col.prop(tex, "use_stencil")
if isinstance(idblock, bpy.types.Material) or isinstance(idblock, bpy.types.World):
- col.prop(tex, "default_value", text="DVar", slider=True)
+ col.prop(tex, "default_value", text=_("DVar"), slider=True)
if isinstance(idblock, bpy.types.Material):
- layout.label(text="Bump Mapping:")
+ layout.label(text=_("Bump Mapping:"))
# only show bump settings if activated but not for normalmap images
row = layout.row()
sub = row.row()
sub.active = (tex.use_map_normal or tex.use_map_warp) and not (tex.texture.type == 'IMAGE' and (tex.texture.use_normal_map or tex.texture.use_derivative_map))
- sub.prop(tex, "bump_method", text="Method")
+ sub.prop(tex, "bump_method", text=_("Method"))
# the space setting is supported for: derivmaps + bumpmaps (DEFAULT,BEST_QUALITY), not for normalmaps
sub = row.row()
sub.active = (tex.use_map_normal or tex.use_map_warp) and not (tex.texture.type == 'IMAGE' and tex.texture.use_normal_map) and ((tex.bump_method in {'BUMP_DEFAULT', 'BUMP_BEST_QUALITY'}) or (tex.texture.type == 'IMAGE' and tex.texture.use_derivative_map))
- sub.prop(tex, "bump_objectspace", text="Space")
+ sub.prop(tex, "bump_objectspace", text=_("Space"))
class TEXTURE_PT_custom_props(TextureButtonsPanel, PropertyPanel, Panel):
diff --git a/release/scripts/startup/bl_ui/properties_world.py b/release/scripts/startup/bl_ui/properties_world.py
index 71ee03296a0..916667ea400 100644
--- a/release/scripts/startup/bl_ui/properties_world.py
+++ b/release/scripts/startup/bl_ui/properties_world.py
@@ -20,6 +20,7 @@
import bpy
from bpy.types import Panel
from rna_prop_ui import PropertyPanel
+from blf import gettext as _
class WorldButtonsPanel():
@@ -115,12 +116,12 @@ class WORLD_PT_ambient_occlusion(WorldButtonsPanel, Panel):
layout.active = light.use_ambient_occlusion
split = layout.split()
- split.prop(light, "ao_factor", text="Factor")
+ split.prop(light, "ao_factor", text=_("Factor"))
split.prop(light, "ao_blend_type", text="")
class WORLD_PT_environment_lighting(WorldButtonsPanel, Panel):
- bl_label = "Environment Lighting"
+ bl_label = _("Environment Lighting")
COMPAT_ENGINES = {'BLENDER_RENDER'}
def draw_header(self, context):
@@ -134,7 +135,7 @@ class WORLD_PT_environment_lighting(WorldButtonsPanel, Panel):
layout.active = light.use_environment_light
split = layout.split()
- split.prop(light, "environment_energy", text="Energy")
+ split.prop(light, "environment_energy", text=_("Energy"))
split.prop(light, "environment_color", text="")
@@ -153,11 +154,11 @@ class WORLD_PT_indirect_lighting(WorldButtonsPanel, Panel):
layout.active = light.use_indirect_light and light.gather_method == 'APPROXIMATE'
split = layout.split()
- split.prop(light, "indirect_factor", text="Factor")
- split.prop(light, "indirect_bounces", text="Bounces")
+ split.prop(light, "indirect_factor", text=_("Factor"))
+ split.prop(light, "indirect_bounces", text=_("Bounces"))
if light.gather_method == 'RAYTRACE':
- layout.label(text="Only works with Approximate gather method")
+ layout.label(text=_("Only works with Approximate gather method"))
class WORLD_PT_gather(WorldButtonsPanel, Panel):
@@ -175,18 +176,18 @@ class WORLD_PT_gather(WorldButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.label(text="Attenuation:")
+ col.label(text=_("Attenuation:"))
if light.gather_method == 'RAYTRACE':
col.prop(light, "distance")
col.prop(light, "use_falloff")
sub = col.row()
sub.active = light.use_falloff
- sub.prop(light, "falloff_strength", text="Strength")
+ sub.prop(light, "falloff_strength", text=_("Strength"))
if light.gather_method == 'RAYTRACE':
col = split.column()
- col.label(text="Sampling:")
+ col.label(text=_("Sampling:"))
col.prop(light, "sample_method", text="")
sub = col.column()
@@ -201,9 +202,9 @@ class WORLD_PT_gather(WorldButtonsPanel, Panel):
if light.gather_method == 'APPROXIMATE':
col = split.column()
- col.label(text="Sampling:")
+ col.label(text=_("Sampling:"))
col.prop(light, "passes")
- col.prop(light, "error_threshold", text="Error")
+ col.prop(light, "error_threshold", text=_("Error"))
col.prop(light, "use_cache")
col.prop(light, "correction")
@@ -257,11 +258,11 @@ class WORLD_PT_stars(WorldButtonsPanel, Panel):
col = split.column()
col.prop(world.star_settings, "size")
- col.prop(world.star_settings, "color_random", text="Colors")
+ col.prop(world.star_settings, "color_random", text=_("Colors"))
col = split.column()
- col.prop(world.star_settings, "distance_min", text="Min. Dist")
- col.prop(world.star_settings, "average_separation", text="Separation")
+ col.prop(world.star_settings, "distance_min", text=_("Min. Dist"))
+ col.prop(world.star_settings, "average_separation", text=_("Separation"))
class WORLD_PT_custom_props(WorldButtonsPanel, PropertyPanel, Panel):
diff --git a/release/scripts/startup/bl_ui/space_console.py b/release/scripts/startup/bl_ui/space_console.py
index cbbefa01a3c..bb0cf6eda2c 100644
--- a/release/scripts/startup/bl_ui/space_console.py
+++ b/release/scripts/startup/bl_ui/space_console.py
@@ -20,6 +20,7 @@
import bpy
from bpy.types import Header, Menu, Operator
from bpy.props import StringProperty
+from blf import gettext as _
class CONSOLE_HT_header(Header):
@@ -33,7 +34,7 @@ class CONSOLE_HT_header(Header):
if context.area.show_menus:
layout.menu("CONSOLE_MT_console")
- layout.operator("console.autocomplete", text="Autocomplete")
+ layout.operator("console.autocomplete", text=_("Autocomplete"))
class CONSOLE_MT_console(Menu):
diff --git a/release/scripts/startup/bl_ui/space_dopesheet.py b/release/scripts/startup/bl_ui/space_dopesheet.py
index 90dcc99e6d7..580a4e7f1b6 100644
--- a/release/scripts/startup/bl_ui/space_dopesheet.py
+++ b/release/scripts/startup/bl_ui/space_dopesheet.py
@@ -20,6 +20,7 @@
import bpy
from bpy.types import Header, Menu
+from blf import gettext as _
#######################################
@@ -117,7 +118,7 @@ class DOPESHEET_HT_header(Header):
row.menu("DOPESHEET_MT_gpencil_frame")
layout.prop(st, "mode", text="")
- layout.prop(st.dopesheet, "show_summary", text="Summary")
+ layout.prop(st.dopesheet, "show_summary", text=_("Summary"))
if st.mode == 'DOPESHEET':
dopesheet_filter(layout, context)
@@ -153,9 +154,9 @@ class DOPESHEET_MT_view(Menu):
layout.prop(st, "use_marker_sync")
if st.show_seconds:
- layout.operator("anim.time_toggle", text="Show Frames")
+ layout.operator("anim.time_toggle", text=_("Show Frames"))
else:
- layout.operator("anim.time_toggle", text="Show Seconds")
+ layout.operator("anim.time_toggle", text=_("Show Seconds"))
layout.separator()
layout.operator("anim.previewrange_set")
@@ -180,22 +181,22 @@ class DOPESHEET_MT_select(Menu):
# This is a bit misleading as the operator's default text is "Select All" while it actually *toggles* All/None
layout.operator("action.select_all_toggle")
- layout.operator("action.select_all_toggle", text="Invert Selection").invert = True
+ layout.operator("action.select_all_toggle", text=_("Invert Selection")).invert = True
layout.separator()
layout.operator("action.select_border")
- layout.operator("action.select_border", text="Border Axis Range").axis_range = True
+ layout.operator("action.select_border", text=_("Border Axis Range")).axis_range = True
layout.separator()
- layout.operator("action.select_column", text="Columns on Selected Keys").mode = 'KEYS'
- layout.operator("action.select_column", text="Column on Current Frame").mode = 'CFRA'
+ layout.operator("action.select_column", text=_("Columns on Selected Keys")).mode = 'KEYS'
+ layout.operator("action.select_column", text=_("Column on Current Frame")).mode = 'CFRA'
- layout.operator("action.select_column", text="Columns on Selected Markers").mode = 'MARKERS_COLUMN'
- layout.operator("action.select_column", text="Between Selected Markers").mode = 'MARKERS_BETWEEN'
+ layout.operator("action.select_column", text=_("Columns on Selected Markers")).mode = 'MARKERS_COLUMN'
+ layout.operator("action.select_column", text=_("Between Selected Markers")).mode = 'MARKERS_BETWEEN'
layout.separator()
- layout.operator("action.select_leftright", text="Before Current Frame").mode = 'LEFT'
- layout.operator("action.select_leftright", text="After Current Frame").mode = 'RIGHT'
+ layout.operator("action.select_leftright", text=_("Before Current Frame")).mode = 'LEFT'
+ layout.operator("action.select_leftright", text=_("After Current Frame")).mode = 'RIGHT'
# FIXME: grease pencil mode isn't supported for these yet, so skip for that mode only
if context.space_data.mode != 'GPENCIL':
@@ -217,14 +218,14 @@ class DOPESHEET_MT_marker(Menu):
#layout.operator_context = 'EXEC_REGION_WIN'
- layout.operator("marker.add", "Add Marker")
- layout.operator("marker.duplicate", text="Duplicate Marker")
- layout.operator("marker.delete", text="Delete Marker")
+ layout.operator("marker.add", _("Add Marker"))
+ layout.operator("marker.duplicate", text=_("Duplicate Marker"))
+ layout.operator("marker.delete", text=_("Delete Marker"))
layout.separator()
- layout.operator("marker.rename", text="Rename Marker")
- layout.operator("marker.move", text="Grab/Move Marker")
+ layout.operator("marker.rename", text=_("Rename Marker"))
+ layout.operator("marker.move", text=_("Grab/Move Marker"))
if st.mode in {'ACTION', 'SHAPEKEY'} and st.action:
layout.separator()
@@ -254,14 +255,14 @@ class DOPESHEET_MT_channel(Menu):
layout.separator()
layout.operator("anim.channels_editable_toggle")
- layout.operator_menu_enum("action.extrapolation_type", "type", text="Extrapolation Mode")
+ layout.operator_menu_enum("action.extrapolation_type", "type", text=_("Extrapolation Mode"))
layout.separator()
layout.operator("anim.channels_expand")
layout.operator("anim.channels_collapse")
layout.separator()
- layout.operator_menu_enum("anim.channels_move", "direction", text="Move...")
+ layout.operator_menu_enum("anim.channels_move", "direction", text=_("Move..."))
layout.separator()
layout.operator("anim.channels_fcurves_enable")
@@ -273,10 +274,10 @@ class DOPESHEET_MT_key(Menu):
def draw(self, context):
layout = self.layout
- layout.menu("DOPESHEET_MT_key_transform", text="Transform")
+ layout.menu("DOPESHEET_MT_key_transform", text=_("Transform"))
- layout.operator_menu_enum("action.snap", "type", text="Snap")
- layout.operator_menu_enum("action.mirror", "type", text="Mirror")
+ layout.operator_menu_enum("action.snap", "type", text=_("Snap"))
+ layout.operator_menu_enum("action.mirror", "type", text=_("Mirror"))
layout.separator()
layout.operator("action.keyframe_insert")
@@ -286,9 +287,9 @@ class DOPESHEET_MT_key(Menu):
layout.operator("action.delete")
layout.separator()
- layout.operator_menu_enum("action.keyframe_type", "type", text="Keyframe Type")
- layout.operator_menu_enum("action.handle_type", "type", text="Handle Type")
- layout.operator_menu_enum("action.interpolation_type", "type", text="Interpolation Mode")
+ layout.operator_menu_enum("action.keyframe_type", "type", text=_("Keyframe Type"))
+ layout.operator_menu_enum("action.handle_type", "type", text=_("Handle Type"))
+ layout.operator_menu_enum("action.interpolation_type", "type", text=_("Interpolation Mode"))
layout.separator()
layout.operator("action.clean")
@@ -305,10 +306,10 @@ class DOPESHEET_MT_key_transform(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("transform.transform", text="Grab/Move").mode = 'TIME_TRANSLATE'
- layout.operator("transform.transform", text="Extend").mode = 'TIME_EXTEND'
- layout.operator("transform.transform", text="Slide").mode = 'TIME_SLIDE'
- layout.operator("transform.transform", text="Scale").mode = 'TIME_SCALE'
+ layout.operator("transform.transform", text=_("Grab/Move")).mode = 'TIME_TRANSLATE'
+ layout.operator("transform.transform", text=_("Extend")).mode = 'TIME_EXTEND'
+ layout.operator("transform.transform", text=_("Slide")).mode = 'TIME_SLIDE'
+ layout.operator("transform.transform", text=_("Scale")).mode = 'TIME_SCALE'
#######################################
@@ -347,7 +348,7 @@ class DOPESHEET_MT_gpencil_frame(Menu):
def draw(self, context):
layout = self.layout
- layout.menu("DOPESHEET_MT_key_transform", text="Transform")
+ layout.menu("DOPESHEET_MT_key_transform", text=_("Transform"))
#layout.operator_menu_enum("action.snap", "type", text="Snap")
#layout.operator_menu_enum("action.mirror", "type", text="Mirror")
diff --git a/release/scripts/startup/bl_ui/space_graph.py b/release/scripts/startup/bl_ui/space_graph.py
index d4b8c415a7f..fd50d60bd45 100644
--- a/release/scripts/startup/bl_ui/space_graph.py
+++ b/release/scripts/startup/bl_ui/space_graph.py
@@ -20,6 +20,7 @@
import bpy
from bpy.types import Header, Menu
+from blf import gettext as _
class GRAPH_HT_header(Header):
@@ -82,9 +83,9 @@ class GRAPH_MT_view(Menu):
layout.separator()
if st.show_handles:
- layout.operator("graph.handles_view_toggle", icon='CHECKBOX_HLT', text="Show All Handles")
+ layout.operator("graph.handles_view_toggle", icon='CHECKBOX_HLT', text=_("Show All Handles"))
else:
- layout.operator("graph.handles_view_toggle", icon='CHECKBOX_DEHLT', text="Show All Handles")
+ layout.operator("graph.handles_view_toggle", icon='CHECKBOX_DEHLT', text=_("Show All Handles"))
layout.prop(st, "use_only_selected_curves_handles")
layout.prop(st, "use_only_selected_keyframe_handles")
layout.operator("anim.time_toggle")
@@ -112,23 +113,23 @@ class GRAPH_MT_select(Menu):
# This is a bit misleading as the operator's default text is "Select All" while it actually *toggles* All/None
layout.operator("graph.select_all_toggle")
- layout.operator("graph.select_all_toggle", text="Invert Selection").invert = True
+ layout.operator("graph.select_all_toggle", text=_("Invert Selection")).invert = True
layout.separator()
layout.operator("graph.select_border")
- layout.operator("graph.select_border", text="Border Axis Range").axis_range = True
- layout.operator("graph.select_border", text="Border (Include Handles)").include_handles = True
+ layout.operator("graph.select_border", text=_("Border Axis Range")).axis_range = True
+ layout.operator("graph.select_border", text=_("Border (Include Handles)")).include_handles = True
layout.separator()
- layout.operator("graph.select_column", text="Columns on Selected Keys").mode = 'KEYS'
- layout.operator("graph.select_column", text="Column on Current Frame").mode = 'CFRA'
+ layout.operator("graph.select_column", text=_("Columns on Selected Keys")).mode = 'KEYS'
+ layout.operator("graph.select_column", text=_("Column on Current Frame")).mode = 'CFRA'
- layout.operator("graph.select_column", text="Columns on Selected Markers").mode = 'MARKERS_COLUMN'
- layout.operator("graph.select_column", text="Between Selected Markers").mode = 'MARKERS_BETWEEN'
+ layout.operator("graph.select_column", text=_("Columns on Selected Markers")).mode = 'MARKERS_COLUMN'
+ layout.operator("graph.select_column", text=_("Between Selected Markers")).mode = 'MARKERS_BETWEEN'
layout.separator()
- layout.operator("graph.select_leftright", text="Before Current Frame").mode = 'LEFT'
- layout.operator("graph.select_leftright", text="After Current Frame").mode = 'RIGHT'
+ layout.operator("graph.select_leftright", text=_("Before Current Frame")).mode = 'LEFT'
+ layout.operator("graph.select_leftright", text=_("After Current Frame")).mode = 'RIGHT'
layout.separator()
layout.operator("graph.select_more")
@@ -146,14 +147,14 @@ class GRAPH_MT_marker(Menu):
#layout.operator_context = 'EXEC_REGION_WIN'
- layout.operator("marker.add", "Add Marker")
- layout.operator("marker.duplicate", text="Duplicate Marker")
- layout.operator("marker.delete", text="Delete Marker")
+ layout.operator("marker.add", _("Add Marker"))
+ layout.operator("marker.duplicate", text=_("Duplicate Marker"))
+ layout.operator("marker.delete", text=_("Delete Marker"))
layout.separator()
- layout.operator("marker.rename", text="Rename Marker")
- layout.operator("marker.move", text="Grab/Move Marker")
+ layout.operator("marker.rename", text=_("Rename Marker"))
+ layout.operator("marker.move", text=_("Grab/Move Marker"))
# TODO: pose markers for action edit mode only?
@@ -176,14 +177,14 @@ class GRAPH_MT_channel(Menu):
layout.separator()
layout.operator("anim.channels_editable_toggle")
layout.operator("anim.channels_visibility_set")
- layout.operator_menu_enum("graph.extrapolation_type", "type", text="Extrapolation Mode")
+ layout.operator_menu_enum("graph.extrapolation_type", "type", text=_("Extrapolation Mode"))
layout.separator()
layout.operator("anim.channels_expand")
layout.operator("anim.channels_collapse")
layout.separator()
- layout.operator_menu_enum("anim.channels_move", "direction", text="Move...")
+ layout.operator_menu_enum("anim.channels_move", "direction", text=_("Move..."))
layout.separator()
layout.operator("anim.channels_fcurves_enable")
@@ -195,10 +196,10 @@ class GRAPH_MT_key(Menu):
def draw(self, context):
layout = self.layout
- layout.menu("GRAPH_MT_key_transform", text="Transform")
+ layout.menu("GRAPH_MT_key_transform", text=_("Transform"))
- layout.operator_menu_enum("graph.snap", "type", text="Snap")
- layout.operator_menu_enum("graph.mirror", "type", text="Mirror")
+ layout.operator_menu_enum("graph.snap", "type", text=_("Snap"))
+ layout.operator_menu_enum("graph.mirror", "type", text=_("Mirror"))
layout.separator()
layout.operator("graph.keyframe_insert")
@@ -210,8 +211,8 @@ class GRAPH_MT_key(Menu):
layout.operator("graph.delete")
layout.separator()
- layout.operator_menu_enum("graph.handle_type", "type", text="Handle Type")
- layout.operator_menu_enum("graph.interpolation_type", "type", text="Interpolation Mode")
+ layout.operator_menu_enum("graph.handle_type", "type", text=_("Handle Type"))
+ layout.operator_menu_enum("graph.interpolation_type", "type", text=_("Interpolation Mode"))
layout.separator()
layout.operator("graph.clean")
@@ -224,7 +225,7 @@ class GRAPH_MT_key(Menu):
layout.operator("graph.paste")
layout.separator()
- layout.operator("graph.euler_filter", text="Discontinuity (Euler) Filter")
+ layout.operator("graph.euler_filter", text=_("Discontinuity (Euler) Filter"))
class GRAPH_MT_key_transform(Menu):
@@ -233,10 +234,10 @@ class GRAPH_MT_key_transform(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("transform.translate", text="Grab/Move")
- layout.operator("transform.transform", text="Extend").mode = 'TIME_EXTEND'
- layout.operator("transform.rotate", text="Rotate")
- layout.operator("transform.resize", text="Scale")
+ layout.operator("transform.translate", text=_("Grab/Move"))
+ layout.operator("transform.transform", text=_("Extend")).mode = 'TIME_EXTEND'
+ layout.operator("transform.rotate", text=_("Rotate"))
+ layout.operator("transform.resize", text=_("Scale"))
if __name__ == "__main__": # only for live edit.
bpy.utils.register_module(__name__)
diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py
index 97b5d8457e0..f5be25d14f6 100644
--- a/release/scripts/startup/bl_ui/space_image.py
+++ b/release/scripts/startup/bl_ui/space_image.py
@@ -19,6 +19,7 @@
# <pep8 compliant>
import bpy
from bpy.types import Header, Menu, Panel
+from blf import gettext as _
class BrushButtonsPanel():
@@ -64,7 +65,7 @@ class IMAGE_MT_view(Menu):
ratios = [[1, 8], [1, 4], [1, 2], [1, 1], [2, 1], [4, 1], [8, 1]]
for a, b in ratios:
- text = "Zoom %d:%d" % (a, b)
+ text = _("Zoom") + " %d:%d" % (a, b)
layout.operator("image.view_zoom_ratio", text=text).ratio = a / b
layout.separator()
@@ -92,7 +93,7 @@ class IMAGE_MT_select(Menu):
layout.separator()
layout.operator("uv.select_all")
- layout.operator("uv.select_all", text="Inverse").action = 'INVERT'
+ layout.operator("uv.select_all", text=_("Inverse")).action = 'INVERT'
layout.operator("uv.unlink_selected")
layout.separator()
@@ -122,12 +123,12 @@ class IMAGE_MT_image(Menu):
layout.operator("image.save")
layout.operator("image.save_as")
- layout.operator("image.save_as", text="Save a Copy").copy = True
+ layout.operator("image.save_as", text=_("Save a Copy")).copy = True
if ima.source == 'SEQUENCE':
layout.operator("image.save_sequence")
- layout.operator("image.external_edit", "Edit Externally")
+ layout.operator("image.external_edit", _("Edit Externally"))
layout.separator()
@@ -145,7 +146,7 @@ class IMAGE_MT_image(Menu):
# this could be done in operator poll too
if ima.is_dirty:
if ima.source in {'FILE', 'GENERATED'} and ima.type != 'MULTILAYER':
- layout.operator("image.pack", text="Pack As PNG").as_png = True
+ layout.operator("image.pack", text=_("Pack As PNG")).as_png = True
layout.separator()
@@ -158,23 +159,23 @@ class IMAGE_MT_image_invert(Menu):
def draw(self, context):
layout = self.layout
- op = layout.operator("image.invert", text="Invert Image Colors")
+ op = layout.operator("image.invert", text=_("Invert Image Colors"))
op.invert_r = True
op.invert_g = True
op.invert_b = True
layout.separator()
- op = layout.operator("image.invert", text="Invert Red Channel")
+ op = layout.operator("image.invert", text=_("Invert Red Channel"))
op.invert_r = True
- op = layout.operator("image.invert", text="Invert Green Channel")
+ op = layout.operator("image.invert", text=_("Invert Green Channel"))
op.invert_g = True
- op = layout.operator("image.invert", text="Invert Blue Channel")
+ op = layout.operator("image.invert", text=_("Invert Blue Channel"))
op.invert_b = True
- op = layout.operator("image.invert", text="Invert Alpha Channel")
+ op = layout.operator("image.invert", text=_("Invert Alpha Channel"))
op.invert_a = True
@@ -185,8 +186,8 @@ class IMAGE_MT_uvs_showhide(Menu):
layout = self.layout
layout.operator("uv.reveal")
- layout.operator("uv.hide", text="Hide Selected")
- layout.operator("uv.hide", text="Hide Unselected").unselected = True
+ layout.operator("uv.hide", text=_("Hide Selected"))
+ layout.operator("uv.hide", text=_("Hide Unselected")).unselected = True
class IMAGE_MT_uvs_transform(Menu):
@@ -211,14 +212,14 @@ class IMAGE_MT_uvs_snap(Menu):
layout = self.layout
layout.operator_context = 'EXEC_REGION_WIN'
- layout.operator("uv.snap_selected", text="Selected to Pixels").target = 'PIXELS'
- layout.operator("uv.snap_selected", text="Selected to Cursor").target = 'CURSOR'
- layout.operator("uv.snap_selected", text="Selected to Adjacent Unselected").target = 'ADJACENT_UNSELECTED'
+ layout.operator("uv.snap_selected", text=_("Selected to Pixels")).target = 'PIXELS'
+ layout.operator("uv.snap_selected", text=_("Selected to Cursor")).target = 'CURSOR'
+ layout.operator("uv.snap_selected", text=_("Selected to Adjacent Unselected")).target = 'ADJACENT_UNSELECTED'
layout.separator()
- layout.operator("uv.snap_cursor", text="Cursor to Pixels").target = 'PIXELS'
- layout.operator("uv.snap_cursor", text="Cursor to Selected").target = 'SELECTED'
+ layout.operator("uv.snap_cursor", text=_("Cursor to Pixels")).target = 'PIXELS'
+ layout.operator("uv.snap_cursor", text=_("Cursor to Selected")).target = 'SELECTED'
class IMAGE_MT_uvs_mirror(Menu):
@@ -228,8 +229,8 @@ class IMAGE_MT_uvs_mirror(Menu):
layout = self.layout
layout.operator_context = 'EXEC_REGION_WIN'
- layout.operator("transform.mirror", text="X Axis").constraint_axis[0] = True
- layout.operator("transform.mirror", text="Y Axis").constraint_axis[1] = True
+ layout.operator("transform.mirror", text=_("X Axis")).constraint_axis[0] = True
+ layout.operator("transform.mirror", text=_("Y Axis")).constraint_axis[1] = True
class IMAGE_MT_uvs_weldalign(Menu):
@@ -259,7 +260,7 @@ class IMAGE_MT_uvs(Menu):
layout.prop(uv, "use_live_unwrap")
layout.operator("uv.unwrap")
- layout.operator("uv.pin", text="Unpin").clear = True
+ layout.operator("uv.pin", text=_("Unpin")).clear = True
layout.operator("uv.pin")
layout.separator()
@@ -299,32 +300,32 @@ class IMAGE_MT_uvs_select_mode(Menu):
# do smart things depending on whether uv_select_sync is on
if toolsettings.use_uv_select_sync:
- prop = layout.operator("wm.context_set_value", text="Vertex", icon='VERTEXSEL')
+ prop = layout.operator("wm.context_set_value", text=_("Vertex"), icon='VERTEXSEL')
prop.value = "(True, False, False)"
prop.data_path = "tool_settings.mesh_select_mode"
- prop = layout.operator("wm.context_set_value", text="Edge", icon='EDGESEL')
+ prop = layout.operator("wm.context_set_value", text=_("Edge"), icon='EDGESEL')
prop.value = "(False, True, False)"
prop.data_path = "tool_settings.mesh_select_mode"
- prop = layout.operator("wm.context_set_value", text="Face", icon='FACESEL')
+ prop = layout.operator("wm.context_set_value", text=_("Face"), icon='FACESEL')
prop.value = "(False, False, True)"
prop.data_path = "tool_settings.mesh_select_mode"
else:
- prop = layout.operator("wm.context_set_string", text="Vertex", icon='UV_VERTEXSEL')
+ prop = layout.operator("wm.context_set_string", text=_("Vertex"), icon='UV_VERTEXSEL')
prop.value = "VERTEX"
prop.data_path = "tool_settings.uv_select_mode"
- prop = layout.operator("wm.context_set_string", text="Edge", icon='UV_EDGESEL')
+ prop = layout.operator("wm.context_set_string", text=_("Edge"), icon='UV_EDGESEL')
prop.value = "EDGE"
prop.data_path = "tool_settings.uv_select_mode"
- prop = layout.operator("wm.context_set_string", text="Face", icon='UV_FACESEL')
+ prop = layout.operator("wm.context_set_string", text=_("Face"), icon='UV_FACESEL')
prop.value = "FACE"
prop.data_path = "tool_settings.uv_select_mode"
- prop = layout.operator("wm.context_set_string", text="Island", icon='UV_ISLANDSEL')
+ prop = layout.operator("wm.context_set_string", text=_("Island"), icon='UV_ISLANDSEL')
prop.value = "ISLAND"
prop.data_path = "tool_settings.uv_select_mode"
@@ -356,9 +357,9 @@ class IMAGE_HT_header(Header):
sub.menu("IMAGE_MT_select")
if ima and ima.is_dirty:
- sub.menu("IMAGE_MT_image", text="Image*")
+ sub.menu("IMAGE_MT_image", text=_("Image*"))
else:
- sub.menu("IMAGE_MT_image", text="Image")
+ sub.menu("IMAGE_MT_image", text=_("Image"))
if show_uvedit:
sub.menu("IMAGE_MT_uvs")
@@ -596,22 +597,22 @@ class IMAGE_PT_view_properties(Panel):
col = split.column()
if ima:
- col.prop(ima, "display_aspect", text="Aspect Ratio")
+ col.prop(ima, "display_aspect", text=_("Aspect Ratio"))
col = split.column()
- col.label(text="Coordinates:")
- col.prop(sima, "show_repeat", text="Repeat")
+ col.label(text=_("Coordinates:"))
+ col.prop(sima, "show_repeat", text=_("Repeat"))
if show_uvedit:
- col.prop(uvedit, "show_normalized_coords", text="Normalized")
+ col.prop(uvedit, "show_normalized_coords", text=_("Normalized"))
elif show_uvedit:
- col.label(text="Coordinates:")
- col.prop(uvedit, "show_normalized_coords", text="Normalized")
+ col.label(text=_("Coordinates:"))
+ col.prop(uvedit, "show_normalized_coords", text=_("Normalized"))
if show_uvedit:
col = layout.column()
- col.label("Cursor Location:")
+ col.label(_("Cursor Location:"))
col.row().prop(uvedit, "cursor_location", text="")
col.separator()
@@ -623,11 +624,11 @@ class IMAGE_PT_view_properties(Panel):
col = split.column()
col.prop(uvedit, "show_faces")
- col.prop(uvedit, "show_smooth_edges", text="Smooth")
- col.prop(uvedit, "show_modified_edges", text="Modified")
+ col.prop(uvedit, "show_smooth_edges", text=_("Smooth"))
+ col.prop(uvedit, "show_modified_edges", text=_("Modified"))
col = split.column()
- col.prop(uvedit, "show_stretch", text="Stretch")
+ col.prop(uvedit, "show_stretch", text=_("Stretch"))
sub = col.column()
sub.active = uvedit.show_stretch
sub.row().prop(uvedit, "draw_stretch_type", expand=True)
@@ -669,12 +670,12 @@ class IMAGE_PT_paint(Panel):
row.prop(brush, "jitter", slider=True)
row.prop(brush, "use_pressure_jitter", toggle=True, text="")
- col.prop(brush, "blend", text="Blend")
+ col.prop(brush, "blend", text=_("Blend"))
if brush.image_tool == 'CLONE':
col.separator()
- col.prop(brush, "clone_image", text="Image")
- col.prop(brush, "clone_alpha", text="Alpha")
+ col.prop(brush, "clone_image", text=_("Image"))
+ col.prop(brush, "clone_alpha", text=_("Alpha"))
class IMAGE_PT_tools_brush_texture(BrushButtonsPanel, Panel):
@@ -728,7 +729,7 @@ class IMAGE_PT_paint_stroke(BrushButtonsPanel, Panel):
layout.prop(brush, "use_space")
row = layout.row(align=True)
row.active = brush.use_space
- row.prop(brush, "spacing", text="Distance", slider=True)
+ row.prop(brush, "spacing", text=_("Distance"), slider=True)
row.prop(brush, "use_pressure_spacing", toggle=True, text="")
layout.prop(brush, "use_wrap")
diff --git a/release/scripts/startup/bl_ui/space_info.py b/release/scripts/startup/bl_ui/space_info.py
index debe82e7ab2..3e6abaa8ea3 100644
--- a/release/scripts/startup/bl_ui/space_info.py
+++ b/release/scripts/startup/bl_ui/space_info.py
@@ -19,6 +19,7 @@
# <pep8 compliant>
import bpy
from bpy.types import Header, Menu, Operator
+from blf import gettext as _
class INFO_HT_header(Header):
@@ -45,7 +46,7 @@ class INFO_HT_header(Header):
sub.menu("INFO_MT_help")
if window.screen.show_fullscreen:
- layout.operator("screen.back_to_previous", icon='SCREEN_BACK', text="Back to Previous")
+ layout.operator("screen.back_to_previous", icon='SCREEN_BACK', text=_("Back to Previous"))
layout.separator()
else:
layout.template_ID(context.window, "screen", new="screen.new", unlink="screen.delete")
@@ -73,11 +74,11 @@ class INFO_HT_header(Header):
"""
sinfo = context.space_data
row = layout.row(align=True)
- row.prop(sinfo, "show_report_debug", text="Debug")
- row.prop(sinfo, "show_report_info", text="Info")
- row.prop(sinfo, "show_report_operator", text="Operators")
- row.prop(sinfo, "show_report_warning", text="Warnings")
- row.prop(sinfo, "show_report_error", text="Errors")
+ row.prop(sinfo, "show_report_debug", text=_("Debug"))
+ row.prop(sinfo, "show_report_info", text=_("Info"))
+ row.prop(sinfo, "show_report_operator", text=_("Operators"))
+ row.prop(sinfo, "show_report_warning", text=_("Warnings"))
+ row.prop(sinfo, "show_report_error", text=_("Errors"))
row = layout.row()
row.enabled = sinfo.show_report_operator
@@ -106,25 +107,25 @@ class INFO_MT_file(Menu):
layout = self.layout
layout.operator_context = 'EXEC_AREA'
- layout.operator("wm.read_homefile", text="New", icon='NEW')
+ layout.operator("wm.read_homefile", text=_("New"), icon='NEW')
layout.operator_context = 'INVOKE_AREA'
- layout.operator("wm.open_mainfile", text="Open...", icon='FILE_FOLDER')
+ layout.operator("wm.open_mainfile", text=_("Open..."), icon='FILE_FOLDER')
layout.menu("INFO_MT_file_open_recent")
layout.operator("wm.recover_last_session", icon='RECOVER_LAST')
- layout.operator("wm.recover_auto_save", text="Recover Auto Save...")
+ layout.operator("wm.recover_auto_save", text=_("Recover Auto Save..."))
layout.separator()
layout.operator_context = 'INVOKE_AREA'
- layout.operator("wm.save_mainfile", text="Save", icon='FILE_TICK').check_existing = False
+ layout.operator("wm.save_mainfile", text=_("Save"), icon='FILE_TICK').check_existing = False
layout.operator_context = 'INVOKE_AREA'
- layout.operator("wm.save_as_mainfile", text="Save As...")
+ layout.operator("wm.save_as_mainfile", text=_("Save As..."))
layout.operator_context = 'INVOKE_AREA'
- layout.operator("wm.save_as_mainfile", text="Save Copy...").copy = True
+ layout.operator("wm.save_as_mainfile", text=_("Save Copy...")).copy = True
layout.separator()
- layout.operator("screen.userpref_show", text="User Preferences...", icon='PREFERENCES')
+ layout.operator("screen.userpref_show", text=_("User Preferences..."), icon='PREFERENCES')
layout.operator_context = 'EXEC_AREA'
layout.operator("wm.save_homefile")
@@ -133,8 +134,8 @@ class INFO_MT_file(Menu):
layout.separator()
layout.operator_context = 'INVOKE_AREA'
- layout.operator("wm.link_append", text="Link")
- props = layout.operator("wm.link_append", text="Append")
+ layout.operator("wm.link_append", text=_("Link"))
+ props = layout.operator("wm.link_append", text=_("Append"))
props.link = False
props.instance_groups = False
@@ -150,7 +151,7 @@ class INFO_MT_file(Menu):
layout.separator()
layout.operator_context = 'EXEC_AREA'
- layout.operator("wm.quit_blender", text="Quit", icon='QUIT')
+ layout.operator("wm.quit_blender", text=_("Quit"), icon='QUIT')
class INFO_MT_file_import(Menu):
@@ -177,8 +178,8 @@ class INFO_MT_file_external_data(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("file.pack_all", text="Pack into .blend file")
- layout.operator("file.unpack_all", text="Unpack into Files")
+ layout.operator("file.pack_all", text=_("Pack into .blend file"))
+ layout.operator("file.unpack_all", text=_("Unpack into Files"))
layout.separator()
@@ -196,17 +197,17 @@ class INFO_MT_mesh_add(Menu):
layout = self.layout
layout.operator_context = 'INVOKE_REGION_WIN'
- layout.operator("mesh.primitive_plane_add", icon='MESH_PLANE', text="Plane")
- layout.operator("mesh.primitive_cube_add", icon='MESH_CUBE', text="Cube")
- layout.operator("mesh.primitive_circle_add", icon='MESH_CIRCLE', text="Circle")
- layout.operator("mesh.primitive_uv_sphere_add", icon='MESH_UVSPHERE', text="UV Sphere")
- layout.operator("mesh.primitive_ico_sphere_add", icon='MESH_ICOSPHERE', text="Icosphere")
- layout.operator("mesh.primitive_cylinder_add", icon='MESH_CYLINDER', text="Cylinder")
- layout.operator("mesh.primitive_cone_add", icon='MESH_CONE', text="Cone")
+ layout.operator("mesh.primitive_plane_add", icon='MESH_PLANE', text=_("Plane"))
+ layout.operator("mesh.primitive_cube_add", icon='MESH_CUBE', text=_("Cube"))
+ layout.operator("mesh.primitive_circle_add", icon='MESH_CIRCLE', text=_("Circle"))
+ layout.operator("mesh.primitive_uv_sphere_add", icon='MESH_UVSPHERE', text=_("UV Sphere"))
+ layout.operator("mesh.primitive_ico_sphere_add", icon='MESH_ICOSPHERE', text=_("Icosphere"))
+ layout.operator("mesh.primitive_cylinder_add", icon='MESH_CYLINDER', text=_("Cylinder"))
+ layout.operator("mesh.primitive_cone_add", icon='MESH_CONE', text=_("Cone"))
layout.separator()
- layout.operator("mesh.primitive_grid_add", icon='MESH_GRID', text="Grid")
- layout.operator("mesh.primitive_monkey_add", icon='MESH_MONKEY', text="Monkey")
- layout.operator("mesh.primitive_torus_add", text="Torus", icon='MESH_TORUS')
+ layout.operator("mesh.primitive_grid_add", icon='MESH_GRID', text=_("Grid"))
+ layout.operator("mesh.primitive_monkey_add", icon='MESH_MONKEY', text=_("Monkey"))
+ layout.operator("mesh.primitive_torus_add", text=_("Torus"), icon='MESH_TORUS')
class INFO_MT_curve_add(Menu):
@@ -217,11 +218,11 @@ class INFO_MT_curve_add(Menu):
layout = self.layout
layout.operator_context = 'INVOKE_REGION_WIN'
- layout.operator("curve.primitive_bezier_curve_add", icon='CURVE_BEZCURVE', text="Bezier")
- layout.operator("curve.primitive_bezier_circle_add", icon='CURVE_BEZCIRCLE', text="Circle")
- layout.operator("curve.primitive_nurbs_curve_add", icon='CURVE_NCURVE', text="Nurbs Curve")
- layout.operator("curve.primitive_nurbs_circle_add", icon='CURVE_NCIRCLE', text="Nurbs Circle")
- layout.operator("curve.primitive_nurbs_path_add", icon='CURVE_PATH', text="Path")
+ layout.operator("curve.primitive_bezier_curve_add", icon='CURVE_BEZCURVE', text=_("Bezier"))
+ layout.operator("curve.primitive_bezier_circle_add", icon='CURVE_BEZCIRCLE', text=_("Circle"))
+ layout.operator("curve.primitive_nurbs_curve_add", icon='CURVE_NCURVE', text=_("Nurbs Curve"))
+ layout.operator("curve.primitive_nurbs_circle_add", icon='CURVE_NCIRCLE', text=_("Nurbs Circle"))
+ layout.operator("curve.primitive_nurbs_path_add", icon='CURVE_PATH', text=_("Path"))
class INFO_MT_edit_curve_add(Menu):
@@ -248,12 +249,12 @@ class INFO_MT_surface_add(Menu):
layout = self.layout
layout.operator_context = 'INVOKE_REGION_WIN'
- layout.operator("surface.primitive_nurbs_surface_curve_add", icon='SURFACE_NCURVE', text="NURBS Curve")
- layout.operator("surface.primitive_nurbs_surface_circle_add", icon='SURFACE_NCIRCLE', text="NURBS Circle")
- layout.operator("surface.primitive_nurbs_surface_surface_add", icon='SURFACE_NSURFACE', text="NURBS Surface")
- layout.operator("surface.primitive_nurbs_surface_cylinder_add", icon='SURFACE_NCYLINDER', text="NURBS Cylinder")
- layout.operator("surface.primitive_nurbs_surface_sphere_add", icon='SURFACE_NSPHERE', text="NURBS Sphere")
- layout.operator("surface.primitive_nurbs_surface_torus_add", icon='SURFACE_NTORUS', text="NURBS Torus")
+ layout.operator("surface.primitive_nurbs_surface_curve_add", icon='SURFACE_NCURVE', text=_("NURBS Curve"))
+ layout.operator("surface.primitive_nurbs_surface_circle_add", icon='SURFACE_NCIRCLE', text=_("NURBS Circle"))
+ layout.operator("surface.primitive_nurbs_surface_surface_add", icon='SURFACE_NSURFACE', text=_("NURBS Surface"))
+ layout.operator("surface.primitive_nurbs_surface_cylinder_add", icon='SURFACE_NCYLINDER', text=_("NURBS Cylinder"))
+ layout.operator("surface.primitive_nurbs_surface_sphere_add", icon='SURFACE_NSPHERE', text=_("NURBS Sphere"))
+ layout.operator("surface.primitive_nurbs_surface_torus_add", icon='SURFACE_NTORUS', text=_("NURBS Torus"))
class INFO_MT_armature_add(Menu):
@@ -264,7 +265,7 @@ class INFO_MT_armature_add(Menu):
layout = self.layout
layout.operator_context = 'INVOKE_REGION_WIN'
- layout.operator("object.armature_add", text="Single Bone", icon='BONE_DATA')
+ layout.operator("object.armature_add", text=_("Single Bone"), icon='BONE_DATA')
class INFO_MT_add(Menu):
@@ -275,39 +276,39 @@ class INFO_MT_add(Menu):
layout.operator_context = 'EXEC_SCREEN'
- #layout.operator_menu_enum("object.mesh_add", "type", text="Mesh", icon='OUTLINER_OB_MESH')
+ #layout.operator_menu_enum("object.mesh_add", "type", text=_("Mesh"), icon='OUTLINER_OB_MESH')
layout.menu("INFO_MT_mesh_add", icon='OUTLINER_OB_MESH')
- #layout.operator_menu_enum("object.curve_add", "type", text="Curve", icon='OUTLINER_OB_CURVE')
+ #layout.operator_menu_enum("object.curve_add", "type", text=_("Curve"), icon='OUTLINER_OB_CURVE')
layout.menu("INFO_MT_curve_add", icon='OUTLINER_OB_CURVE')
- #layout.operator_menu_enum("object.surface_add", "type", text="Surface", icon='OUTLINER_OB_SURFACE')
+ #layout.operator_menu_enum("object.surface_add", "type", text=_("Surface"), icon='OUTLINER_OB_SURFACE')
layout.menu("INFO_MT_surface_add", icon='OUTLINER_OB_SURFACE')
- layout.operator_menu_enum("object.metaball_add", "type", text="Metaball", icon='OUTLINER_OB_META')
+ layout.operator_menu_enum("object.metaball_add", "type", text=_("Metaball"), icon='OUTLINER_OB_META')
layout.operator_context = 'INVOKE_REGION_WIN'
- layout.operator("object.text_add", text="Text", icon='OUTLINER_OB_FONT')
+ layout.operator("object.text_add", text=_("Text"), icon='OUTLINER_OB_FONT')
layout.separator()
layout.menu("INFO_MT_armature_add", icon='OUTLINER_OB_ARMATURE')
- layout.operator("object.add", text="Lattice", icon='OUTLINER_OB_LATTICE').type = 'LATTICE'
- layout.operator("object.add", text="Empty", icon='OUTLINER_OB_EMPTY').type = 'EMPTY'
+ layout.operator("object.add", text=_("Lattice"), icon='OUTLINER_OB_LATTICE').type = 'LATTICE'
+ layout.operator("object.add", text=_("Empty"), icon='OUTLINER_OB_EMPTY').type = 'EMPTY'
layout.separator()
- layout.operator("object.speaker_add", text="Speaker", icon='OUTLINER_OB_SPEAKER')
+ layout.operator("object.speaker_add", text=_("Speaker"), icon='OUTLINER_OB_SPEAKER')
layout.separator()
- layout.operator("object.camera_add", text="Camera", icon='OUTLINER_OB_CAMERA')
+ layout.operator("object.camera_add", text=_("Camera"), icon='OUTLINER_OB_CAMERA')
layout.operator_context = 'EXEC_SCREEN'
- layout.operator_menu_enum("object.lamp_add", "type", text="Lamp", icon='OUTLINER_OB_LAMP')
+ layout.operator_menu_enum("object.lamp_add", "type", text=_("Lamp"), icon='OUTLINER_OB_LAMP')
layout.separator()
- layout.operator_menu_enum("object.effector_add", "type", text="Force Field", icon='OUTLINER_OB_EMPTY')
+ layout.operator_menu_enum("object.effector_add", "type", text=_("Force Field"), icon='OUTLINER_OB_EMPTY')
layout.separator()
if(len(bpy.data.groups) > 10):
layout.operator_context = 'INVOKE_DEFAULT'
- layout.operator("object.group_instance_add", text="Group Instance...", icon='OUTLINER_OB_EMPTY')
+ layout.operator("object.group_instance_add", text=_("Group Instance..."), icon='OUTLINER_OB_EMPTY')
else:
- layout.operator_menu_enum("object.group_instance_add", "group", text="Group Instance", icon='OUTLINER_OB_EMPTY')
+ layout.operator_menu_enum("object.group_instance_add", "group", text=_("Group Instance"), icon='OUTLINER_OB_EMPTY')
class INFO_MT_game(Menu):
@@ -337,13 +338,13 @@ class INFO_MT_render(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("render.render", text="Render Image", icon='RENDER_STILL')
- layout.operator("render.render", text="Render Animation", icon='RENDER_ANIMATION').animation = True
+ layout.operator("render.render", text=_("Render Image"), icon='RENDER_STILL')
+ layout.operator("render.render", text=_("Render Animation"), icon='RENDER_ANIMATION').animation = True
layout.separator()
- layout.operator("render.opengl", text="OpenGL Render Image")
- layout.operator("render.opengl", text="OpenGL Render Animation").animation = True
+ layout.operator("render.opengl", text=_("OpenGL Render Image"))
+ layout.operator("render.opengl", text=_("OpenGL Render Animation")).animation = True
layout.separator()
@@ -359,27 +360,27 @@ class INFO_MT_help(Menu):
layout = self.layout
- layout.operator("wm.url_open", text="Manual", icon='HELP').url = 'http://wiki.blender.org/index.php/Doc:Manual'
- layout.operator("wm.url_open", text="Release Log", icon='URL').url = 'http://www.blender.org/development/release-logs/blender-259/'
+ layout.operator("wm.url_open", text=_("Manual"), icon='HELP').url = 'http://wiki.blender.org/index.php/Doc:Manual'
+ layout.operator("wm.url_open", text=_("Release Log"), icon='URL').url = 'http://www.blender.org/development/release-logs/blender-259/'
layout.separator()
- layout.operator("wm.url_open", text="Blender Website", icon='URL').url = 'http://www.blender.org/'
- layout.operator("wm.url_open", text="Blender e-Shop", icon='URL').url = 'http://www.blender.org/e-shop'
- layout.operator("wm.url_open", text="Developer Community", icon='URL').url = 'http://www.blender.org/community/get-involved/'
- layout.operator("wm.url_open", text="User Community", icon='URL').url = 'http://www.blender.org/community/user-community/'
+ layout.operator("wm.url_open", text=_("Blender Website"), icon='URL').url = 'http://www.blender.org/'
+ layout.operator("wm.url_open", text=_("Blender e-Shop"), icon='URL').url = 'http://www.blender.org/e-shop'
+ layout.operator("wm.url_open", text=_("Developer Community"), icon='URL').url = 'http://www.blender.org/community/get-involved/'
+ layout.operator("wm.url_open", text=_("User Community"), icon='URL').url = 'http://www.blender.org/community/user-community/'
layout.separator()
- layout.operator("wm.url_open", text="Report a Bug", icon='URL').url = 'http://projects.blender.org/tracker/?atid=498&group_id=9&func=browse'
+ layout.operator("wm.url_open", text=_("Report a Bug"), icon='URL').url = 'http://projects.blender.org/tracker/?atid=498&group_id=9&func=browse'
layout.separator()
- layout.operator("wm.url_open", text="Python API Reference", icon='URL').url = bpy.types.WM_OT_doc_view._prefix
+ layout.operator("wm.url_open", text=_("Python API Reference"), icon='URL').url = bpy.types.WM_OT_doc_view._prefix
layout.operator("help.operator_cheat_sheet", icon='TEXT')
layout.operator("wm.sysinfo", icon='TEXT')
layout.separator()
if sys.platform[:3] == "win":
layout.operator("wm.console_toggle", icon='CONSOLE')
layout.separator()
- layout.operator("anim.update_data_paths", text="FCurve/Driver Version fix", icon='HELP')
+ layout.operator("anim.update_data_paths", text=_("FCurve/Driver Version fix"), icon='HELP')
layout.operator("logic.texface_convert", text="TexFace to Material Convert", icon='GAME')
layout.separator()
layout.operator("wm.splash", icon='BLENDER')
diff --git a/release/scripts/startup/bl_ui/space_logic.py b/release/scripts/startup/bl_ui/space_logic.py
index 869a91124d3..b1149913d17 100644
--- a/release/scripts/startup/bl_ui/space_logic.py
+++ b/release/scripts/startup/bl_ui/space_logic.py
@@ -19,6 +19,7 @@
# <pep8 compliant>
import bpy
from bpy.types import Header, Menu, Panel
+from blf import gettext as _
class LOGIC_PT_properties(Panel):
@@ -37,7 +38,7 @@ class LOGIC_PT_properties(Panel):
ob = context.active_object
game = ob.game
- layout.operator("object.game_property_new", text="Add Game Property", icon='ZOOMIN')
+ layout.operator("object.game_property_new", text=_("Add Game Property"), icon='ZOOMIN')
for i, prop in enumerate(game.properties):
@@ -56,9 +57,9 @@ class LOGIC_MT_logicbricks_add(Menu):
def draw(self, context):
layout = self.layout
- layout.operator_menu_enum("logic.sensor_add", "type", text="Sensor")
- layout.operator_menu_enum("logic.controller_add", "type", text="Controller")
- layout.operator_menu_enum("logic.actuator_add", "type", text="Actuator")
+ layout.operator_menu_enum("logic.sensor_add", "type", text=_("Sensor"))
+ layout.operator_menu_enum("logic.controller_add", "type", text=_("Controller"))
+ layout.operator_menu_enum("logic.actuator_add", "type", text=_("Actuator"))
class LOGIC_HT_header(Header):
diff --git a/release/scripts/startup/bl_ui/space_nla.py b/release/scripts/startup/bl_ui/space_nla.py
index ffead81c507..8a4b0a61291 100644
--- a/release/scripts/startup/bl_ui/space_nla.py
+++ b/release/scripts/startup/bl_ui/space_nla.py
@@ -20,6 +20,7 @@
import bpy
from bpy.types import Header, Menu
+from blf import gettext as _
class NLA_HT_header(Header):
@@ -62,7 +63,7 @@ class NLA_MT_view(Menu):
layout.prop(st, "use_realtime_update")
layout.prop(st, "show_frame_indicator")
- layout.operator("anim.time_toggle", text="Show Frames" if st.show_seconds else "Show Seconds")
+ layout.operator("anim.time_toggle", text=_("Show Frames") if st.show_seconds else _("Show Seconds"))
layout.prop(st, "show_strip_curves")
@@ -87,33 +88,33 @@ class NLA_MT_select(Menu):
# This is a bit misleading as the operator's default text is "Select All" while it actually *toggles* All/None
layout.operator("nla.select_all_toggle")
- layout.operator("nla.select_all_toggle", text="Invert Selection").invert = True
+ layout.operator("nla.select_all_toggle", text=_("Invert Selection")).invert = True
layout.separator()
layout.operator("nla.select_border")
- layout.operator("nla.select_border", text="Border Axis Range").axis_range = True
+ layout.operator("nla.select_border", text=_("Border Axis Range")).axis_range = True
layout.separator()
- layout.operator("nla.select_leftright", text="Before Current Frame").mode = 'LEFT'
- layout.operator("nla.select_leftright", text="After Current Frame").mode = 'RIGHT'
+ layout.operator("nla.select_leftright", text=_("Before Current Frame")).mode = 'LEFT'
+ layout.operator("nla.select_leftright", text=_("After Current Frame")).mode = 'RIGHT'
class NLA_MT_marker(Menu):
- bl_label = "Marker"
+ bl_label = _("Marker")
def draw(self, context):
layout = self.layout
#layout.operator_context = 'EXEC_REGION_WIN'
- layout.operator("marker.add", "Add Marker")
- layout.operator("marker.duplicate", text="Duplicate Marker")
- layout.operator("marker.delete", text="Delete Marker")
+ layout.operator("marker.add", _("Add Marker"))
+ layout.operator("marker.duplicate", text=_("Duplicate Marker"))
+ layout.operator("marker.delete", text=_("Delete Marker"))
layout.separator()
- layout.operator("marker.rename", text="Rename Marker")
- layout.operator("marker.move", text="Grab/Move Marker")
+ layout.operator("marker.rename", text=_("Rename Marker"))
+ layout.operator("marker.move", text=_("Grab/Move Marker"))
class NLA_MT_edit(Menu):
@@ -124,9 +125,9 @@ class NLA_MT_edit(Menu):
scene = context.scene
- layout.menu("NLA_MT_edit_transform", text="Transform")
+ layout.menu("NLA_MT_edit_transform", text=_("Transform"))
- layout.operator_menu_enum("nla.snap", "type", text="Snap")
+ layout.operator_menu_enum("nla.snap", "type", text=_("Snap"))
layout.separator()
layout.operator("nla.duplicate")
@@ -148,14 +149,14 @@ class NLA_MT_edit(Menu):
# TODO: this really belongs more in a "channel" (or better, "track") menu
layout.separator()
- layout.operator_menu_enum("anim.channels_move", "direction", text="Track Ordering...")
+ layout.operator_menu_enum("anim.channels_move", "direction", text=_("Track Ordering..."))
layout.separator()
# TODO: names of these tools for 'tweakmode' need changing?
if scene.is_nla_tweakmode:
- layout.operator("nla.tweakmode_exit", text="Stop Tweaking Strip Actions")
+ layout.operator("nla.tweakmode_exit", text=_("Stop Tweaking Strip Actions"))
else:
- layout.operator("nla.tweakmode_enter", text="Start Tweaking Strip Actions")
+ layout.operator("nla.tweakmode_enter", text=_("Start Tweaking Strip Actions"))
class NLA_MT_add(Menu):
@@ -174,7 +175,7 @@ class NLA_MT_add(Menu):
layout.separator()
layout.operator("nla.tracks_add")
- layout.operator("nla.tracks_add", text="Add Tracks Above Selected").above_selected = True
+ layout.operator("nla.tracks_add", text=_("Add Tracks Above Selected")).above_selected = True
class NLA_MT_edit_transform(Menu):
@@ -183,9 +184,9 @@ class NLA_MT_edit_transform(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("transform.translate", text="Grab/Move")
- layout.operator("transform.transform", text="Extend").mode = 'TIME_EXTEND'
- layout.operator("transform.transform", text="Scale").mode = 'TIME_SCALE'
+ layout.operator("transform.translate", text=_("Grab/Move"))
+ layout.operator("transform.transform", text=_("Extend")).mode = 'TIME_EXTEND'
+ layout.operator("transform.transform", text=_("Scale")).mode = 'TIME_SCALE'
if __name__ == "__main__": # only for live edit.
bpy.utils.register_module(__name__)
diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py
index 708017ba749..0808ddf769a 100644
--- a/release/scripts/startup/bl_ui/space_node.py
+++ b/release/scripts/startup/bl_ui/space_node.py
@@ -19,6 +19,7 @@
# <pep8 compliant>
import bpy
from bpy.types import Header, Menu, Panel
+from blf import gettext as _
class NODE_HT_header(Header):
@@ -61,7 +62,7 @@ class NODE_HT_header(Header):
elif snode.tree_type == 'COMPOSITING':
layout.prop(snode_id, "use_nodes")
- layout.prop(snode_id.render, "use_free_unused_nodes", text="Free Unused")
+ layout.prop(snode_id.render, "use_free_unused_nodes", text=_("Free Unused"))
layout.prop(snode, "show_backdrop")
if snode.show_backdrop:
row = layout.row(align=True)
@@ -92,9 +93,9 @@ class NODE_MT_view(Menu):
if context.space_data.show_backdrop:
layout.separator()
- layout.operator("node.backimage_move", text="Backdrop move")
- layout.operator("node.backimage_zoom", text="Backdrop zoom in").factor = 1.2
- layout.operator("node.backimage_zoom", text="Backdrop zoom out").factor = 0.833
+ layout.operator("node.backimage_move", text=_("Backdrop move"))
+ layout.operator("node.backimage_zoom", text=_("Backdrop zoom in")).factor = 1.2
+ layout.operator("node.backimage_zoom", text=_("Backdrop zoom out")).factor = 0.833
layout.separator()
@@ -137,7 +138,7 @@ class NODE_MT_node(Menu):
layout.separator()
layout.operator("node.link_make")
- layout.operator("node.link_make", text="Make and Replace Links").replace = True
+ layout.operator("node.link_make", text=_("Make and Replace Links")).replace = True
layout.operator("node.links_cut")
layout.separator()
@@ -180,13 +181,13 @@ class NODE_PT_properties(Panel):
snode = context.space_data
layout.active = snode.show_backdrop
layout.prop(snode, "backdrop_channels", text="")
- layout.prop(snode, "backdrop_zoom", text="Zoom")
+ layout.prop(snode, "backdrop_zoom", text=_("Zoom"))
col = layout.column(align=True)
- col.label(text="Offset:")
+ col.label(text=_("Offset:"))
col.prop(snode, "backdrop_x", text="X")
col.prop(snode, "backdrop_y", text="Y")
- col.operator("node.backimage_move", text="Move")
+ col.operator("node.backimage_move", text=_("Move"))
if __name__ == "__main__": # only for live edit.
bpy.utils.register_module(__name__)
diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py
index 36f606da635..a9a5eae3179 100644
--- a/release/scripts/startup/bl_ui/space_sequencer.py
+++ b/release/scripts/startup/bl_ui/space_sequencer.py
@@ -19,6 +19,7 @@
# <pep8 compliant>
import bpy
from bpy.types import Header, Menu, Panel
+from blf import gettext as _
def act_strip(context):
@@ -64,9 +65,9 @@ class SEQUENCER_HT_header(Header):
elif st.view_type == 'SEQUENCER_PREVIEW':
layout.separator()
layout.operator("sequencer.refresh_all")
- layout.prop(st, "display_channel", text="Channel")
+ layout.prop(st, "display_channel", text=_("Channel"))
else:
- layout.prop(st, "display_channel", text="Channel")
+ layout.prop(st, "display_channel", text=_("Channel"))
ed = context.scene.sequence_editor
if ed:
@@ -101,11 +102,11 @@ class SEQUENCER_MT_view(Menu):
layout.separator()
if st.view_type in {'SEQUENCER', 'SEQUENCER_PREVIEW'}:
- layout.operator("sequencer.view_all", text='View all Sequences')
+ layout.operator("sequencer.view_all", text=_('View all Sequences'))
if st.view_type in {'PREVIEW', 'SEQUENCER_PREVIEW'}:
layout.operator_context = 'INVOKE_REGION_PREVIEW'
- layout.operator("sequencer.view_all_preview", text='Fit preview in window')
- layout.operator("sequencer.view_zoom_ratio", text='Show preview 1:1').ratio = 1.0
+ layout.operator("sequencer.view_all_preview", text=_('Fit preview in window'))
+ layout.operator("sequencer.view_zoom_ratio", text=_('Show preview 1:1')).ratio = 1.0
layout.operator_context = 'INVOKE_DEFAULT'
# # XXX, invokes in the header view
@@ -114,9 +115,9 @@ class SEQUENCER_MT_view(Menu):
layout.operator("sequencer.view_selected")
if st.show_frames:
- layout.operator("anim.time_toggle", text="Show Seconds")
+ layout.operator("anim.time_toggle", text=_("Show Seconds"))
else:
- layout.operator("anim.time_toggle", text="Show Frames")
+ layout.operator("anim.time_toggle", text=_("Show Frames"))
layout.prop(st, "show_frame_indicator")
if st.display_mode == 'IMAGE':
@@ -138,12 +139,12 @@ class SEQUENCER_MT_select(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("sequencer.select_active_side", text="Strips to the Left").side = 'LEFT'
- layout.operator("sequencer.select_active_side", text="Strips to the Right").side = 'RIGHT'
+ layout.operator("sequencer.select_active_side", text=_("Strips to the Left")).side = 'LEFT'
+ layout.operator("sequencer.select_active_side", text=_("Strips to the Right")).side = 'RIGHT'
layout.separator()
- layout.operator("sequencer.select_handles", text="Surrounding Handles").side = 'BOTH'
- layout.operator("sequencer.select_handles", text="Left Handle").side = 'LEFT'
- layout.operator("sequencer.select_handles", text="Right Handle").side = 'RIGHT'
+ layout.operator("sequencer.select_handles", text=_("Surrounding Handles")).side = 'BOTH'
+ layout.operator("sequencer.select_handles", text=_("Left Handle")).side = 'LEFT'
+ layout.operator("sequencer.select_handles", text=_("Right Handle")).side = 'RIGHT'
layout.separator()
layout.operator("sequencer.select_linked")
layout.operator("sequencer.select_all_toggle")
@@ -158,14 +159,14 @@ class SEQUENCER_MT_marker(Menu):
#layout.operator_context = 'EXEC_REGION_WIN'
- layout.operator("marker.add", "Add Marker")
- layout.operator("marker.duplicate", text="Duplicate Marker")
- layout.operator("marker.delete", text="Delete Marker")
+ layout.operator("marker.add", _("Add Marker"))
+ layout.operator("marker.duplicate", text=_("Duplicate Marker"))
+ layout.operator("marker.delete", text=_("Delete Marker"))
layout.separator()
- layout.operator("marker.rename", text="Rename Marker")
- layout.operator("marker.move", text="Grab/Move Marker")
+ layout.operator("marker.rename", text=_("Rename Marker"))
+ layout.operator("marker.move", text=_("Grab/Move Marker"))
#layout.operator("sequencer.sound_strip_add", text="Transform Markers") # toggle, will be rna - (sseq->flag & SEQ_MARKER_TRANS)
@@ -180,7 +181,7 @@ class SEQUENCER_MT_change(Menu):
layout.operator_menu_enum("sequencer.change_effect_input", "swap")
layout.operator_menu_enum("sequencer.change_effect_type", "type")
- layout.operator("sequencer.change_path", text="Path/Files")
+ layout.operator("sequencer.change_path", text=_("Path/Files"))
class SEQUENCER_MT_add(Menu):
@@ -192,13 +193,13 @@ class SEQUENCER_MT_add(Menu):
if len(bpy.data.scenes) > 10:
layout.operator_context = 'INVOKE_DEFAULT'
- layout.operator("sequencer.scene_strip_add", text="Scene...")
+ layout.operator("sequencer.scene_strip_add", text=_("Scene..."))
else:
- layout.operator_menu_enum("sequencer.scene_strip_add", "scene", text="Scene...")
+ layout.operator_menu_enum("sequencer.scene_strip_add", "scene", text=_("Scene..."))
- layout.operator("sequencer.movie_strip_add", text="Movie")
- layout.operator("sequencer.image_strip_add", text="Image")
- layout.operator("sequencer.sound_strip_add", text="Sound")
+ layout.operator("sequencer.movie_strip_add", text=_("Movie"))
+ layout.operator("sequencer.image_strip_add", text=_("Image"))
+ layout.operator("sequencer.sound_strip_add", text=_("Sound"))
layout.menu("SEQUENCER_MT_add_effect")
@@ -210,22 +211,22 @@ class SEQUENCER_MT_add_effect(Menu):
layout = self.layout
layout.operator_context = 'INVOKE_REGION_WIN'
- layout.operator("sequencer.effect_strip_add", text="Add").type = 'ADD'
- layout.operator("sequencer.effect_strip_add", text="Subtract").type = 'SUBTRACT'
- layout.operator("sequencer.effect_strip_add", text="Alpha Over").type = 'ALPHA_OVER'
- layout.operator("sequencer.effect_strip_add", text="Alpha Under").type = 'ALPHA_UNDER'
- layout.operator("sequencer.effect_strip_add", text="Cross").type = 'CROSS'
- layout.operator("sequencer.effect_strip_add", text="Gamma Cross").type = 'GAMMA_CROSS'
- layout.operator("sequencer.effect_strip_add", text="Multiply").type = 'MULTIPLY'
- layout.operator("sequencer.effect_strip_add", text="Over Drop").type = 'OVER_DROP'
- layout.operator("sequencer.effect_strip_add", text="Plugin").type = 'PLUGIN'
- layout.operator("sequencer.effect_strip_add", text="Wipe").type = 'WIPE'
- layout.operator("sequencer.effect_strip_add", text="Glow").type = 'GLOW'
- layout.operator("sequencer.effect_strip_add", text="Transform").type = 'TRANSFORM'
- layout.operator("sequencer.effect_strip_add", text="Color").type = 'COLOR'
- layout.operator("sequencer.effect_strip_add", text="Speed Control").type = 'SPEED'
- layout.operator("sequencer.effect_strip_add", text="Multicam Selector").type = 'MULTICAM'
- layout.operator("sequencer.effect_strip_add", text="Adjustment Layer").type = 'ADJUSTMENT'
+ layout.operator("sequencer.effect_strip_add", text=_("Add")).type = 'ADD'
+ layout.operator("sequencer.effect_strip_add", text=_("Subtract")).type = 'SUBTRACT'
+ layout.operator("sequencer.effect_strip_add", text=_("Alpha Over")).type = 'ALPHA_OVER'
+ layout.operator("sequencer.effect_strip_add", text=_("Alpha Under")).type = 'ALPHA_UNDER'
+ layout.operator("sequencer.effect_strip_add", text=_("Cross")).type = 'CROSS'
+ layout.operator("sequencer.effect_strip_add", text=_("Gamma Cross")).type = 'GAMMA_CROSS'
+ layout.operator("sequencer.effect_strip_add", text=_("Multiply")).type = 'MULTIPLY'
+ layout.operator("sequencer.effect_strip_add", text=_("Over Drop")).type = 'OVER_DROP'
+ layout.operator("sequencer.effect_strip_add", text=_("Plugin")).type = 'PLUGIN'
+ layout.operator("sequencer.effect_strip_add", text=_("Wipe")).type = 'WIPE'
+ layout.operator("sequencer.effect_strip_add", text=_("Glow")).type = 'GLOW'
+ layout.operator("sequencer.effect_strip_add", text=_("Transform")).type = 'TRANSFORM'
+ layout.operator("sequencer.effect_strip_add", text=_("Color")).type = 'COLOR'
+ layout.operator("sequencer.effect_strip_add", text=_("Speed Control")).type = 'SPEED'
+ layout.operator("sequencer.effect_strip_add", text=_("Multicam Selector")).type = 'MULTICAM'
+ layout.operator("sequencer.effect_strip_add", text=_("Adjustment Layer")).type = 'ADJUSTMENT'
class SEQUENCER_MT_strip(Menu):
@@ -236,13 +237,13 @@ class SEQUENCER_MT_strip(Menu):
layout.operator_context = 'INVOKE_REGION_WIN'
- layout.operator("transform.transform", text="Grab/Move").mode = 'TRANSLATION'
- layout.operator("transform.transform", text="Grab/Extend from frame").mode = 'TIME_EXTEND'
+ layout.operator("transform.transform", text=_("Grab/Move")).mode = 'TRANSLATION'
+ layout.operator("transform.transform", text=_("Grab/Extend from frame")).mode = 'TIME_EXTEND'
# uiItemO(layout, NULL, 0, "sequencer.strip_snap"); // TODO - add this operator
layout.separator()
- layout.operator("sequencer.cut", text="Cut (hard) at frame").type = 'HARD'
- layout.operator("sequencer.cut", text="Cut (soft) at frame").type = 'SOFT'
+ layout.operator("sequencer.cut", text=_("Cut (hard) at frame")).type = 'HARD'
+ layout.operator("sequencer.cut", text=_("Cut (soft) at frame")).type = 'SOFT'
layout.operator("sequencer.images_separate")
layout.operator("sequencer.offset_clear")
layout.operator("sequencer.deinterlace_selected_movies")
@@ -296,7 +297,7 @@ class SEQUENCER_MT_strip(Menu):
layout.operator("sequencer.mute")
layout.operator("sequencer.unmute")
- layout.operator("sequencer.mute", text="Mute Deselected Strips").unselected = True
+ layout.operator("sequencer.mute", text=_("Mute Deselected Strips")).unselected = True
layout.operator("sequencer.snap")
@@ -344,21 +345,21 @@ class SEQUENCER_PT_edit(SequencerButtonsPanel, Panel):
strip = act_strip(context)
split = layout.split(percentage=0.3)
- split.label(text="Name:")
+ split.label(text=_("Name:"))
split.prop(strip, "name", text="")
split = layout.split(percentage=0.3)
- split.label(text="Type:")
+ split.label(text=_("Type:"))
split.prop(strip, "type", text="")
split = layout.split(percentage=0.3)
- split.label(text="Blend:")
+ split.label(text=_("Blend:"))
split.prop(strip, "blend_type", text="")
row = layout.row(align=True)
sub = row.row()
sub.active = (not strip.mute)
- sub.prop(strip, "blend_alpha", text="Opacity", slider=True)
+ sub.prop(strip, "blend_alpha", text=_("Opacity"), slider=True)
row.prop(strip, "mute", toggle=True, icon='RESTRICT_VIEW_ON' if strip.mute else 'RESTRICT_VIEW_OFF', text="")
row.prop(strip, "lock", toggle=True, icon='LOCKED' if strip.lock else 'UNLOCKED', text="")
@@ -371,13 +372,13 @@ class SEQUENCER_PT_edit(SequencerButtonsPanel, Panel):
col = layout.column(align=True)
row = col.row()
- row.label(text="Final Length: %s" % bpy.utils.smpte_from_frame(strip.frame_final_duration))
+ row.label(text=_("Final Length")+": %s" % bpy.utils.smpte_from_frame(strip.frame_final_duration))
row = col.row()
row.active = (frame_current >= strip.frame_start and frame_current <= strip.frame_start + strip.frame_duration)
- row.label(text="Playhead: %d" % (frame_current - strip.frame_start))
+ row.label(text=_("Playhead")+": %d" % (frame_current - strip.frame_start))
- col.label(text="Frame Offset %d:%d" % (strip.frame_offset_start, strip.frame_offset_end))
- col.label(text="Frame Still %d:%d" % (strip.frame_still_start, strip.frame_still_end))
+ col.label(text=_("Frame Offset")+" %d:%d" % (strip.frame_offset_start, strip.frame_offset_end))
+ col.label(text=_("Frame Still")+" %d:%d" % (strip.frame_still_start, strip.frame_still_end))
elem = False
@@ -387,9 +388,9 @@ class SEQUENCER_PT_edit(SequencerButtonsPanel, Panel):
elem = strip.elements[0]
if elem and elem.orig_width > 0 and elem.orig_height > 0:
- col.label(text="Orig Dim: %dx%d" % (elem.orig_width, elem.orig_height))
+ col.label(text=_("Orig Dim")+": %dx%d" % (elem.orig_width, elem.orig_height))
else:
- col.label(text="Orig Dim: None")
+ col.label(text=_("Orig Dim: None"))
class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
@@ -429,7 +430,7 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
col = layout.column()
col.prop(strip, "transition_type")
- col.label(text="Direction:")
+ col.label(text=_("Direction:"))
col.row().prop(strip, "direction", expand=True)
col = layout.column()
@@ -449,13 +450,13 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
row.prop(strip, "use_only_boost")
elif strip.type == 'SPEED':
- layout.prop(strip, "use_default_fade", "Stretch to input strip length")
+ layout.prop(strip, "use_default_fade", _("Stretch to input strip length"))
if not strip.use_default_fade:
layout.prop(strip, "use_as_speed")
if strip.use_as_speed:
layout.prop(strip, "speed_factor")
else:
- layout.prop(strip, "speed_factor", text="Frame number")
+ layout.prop(strip, "speed_factor", text=_("Frame number"))
layout.prop(strip, "scale_to_length")
#doesn't work currently
@@ -473,7 +474,7 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
sub.operator("screen.animation_play", text="", icon='PAUSE' if context.screen.is_animation_playing else 'PLAY')
- row.label("Cut To")
+ row.label(_("Cut To"))
for i in range(1, strip.channel):
row.operator("sequencer.cut_multicam", text=str(i)).camera = i
@@ -481,17 +482,17 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
if strip.type == 'SPEED':
col.prop(strip, "multiply_speed")
elif strip.type in {'CROSS', 'GAMMA_CROSS', 'PLUGIN', 'WIPE'}:
- col.prop(strip, "use_default_fade", "Default fade")
+ col.prop(strip, "use_default_fade", _("Default fade"))
if not strip.use_default_fade:
- col.prop(strip, "effect_fader", text="Effect fader")
+ col.prop(strip, "effect_fader", text=_("Effect fader"))
- layout.prop(strip, "use_translation", text="Image Offset:")
+ layout.prop(strip, "use_translation", text=_("Image Offset:"))
if strip.use_translation:
col = layout.column(align=True)
col.prop(strip.transform, "offset_x", text="X")
col.prop(strip.transform, "offset_y", text="Y")
- layout.prop(strip, "use_crop", text="Image Crop:")
+ layout.prop(strip, "use_crop", text=_("Image Crop:"))
if strip.use_crop:
col = layout.column(align=True)
col.prop(strip.crop, "max_y")
@@ -506,7 +507,7 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
col.prop(strip, "interpolation")
col.prop(strip, "translation_unit")
col = layout.column(align=True)
- col.label(text="Position:")
+ col.label(text=_("Position:"))
col.prop(strip, "translate_start_x", text="X")
col.prop(strip, "translate_start_y", text="Y")
@@ -516,18 +517,18 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
col.prop(strip, "use_uniform_scale")
if (strip.use_uniform_scale):
col = layout.column(align=True)
- col.prop(strip, "scale_start_x", text="Scale")
+ col.prop(strip, "scale_start_x", text=_("Scale"))
else:
col = layout.column(align=True)
- col.label(text="Scale:")
+ col.label(text=_("Scale:"))
col.prop(strip, "scale_start_x", text="X")
col.prop(strip, "scale_start_y", text="Y")
layout.separator()
col = layout.column(align=True)
- col.label(text="Rotation:")
- col.prop(strip, "rotation_start", text="Rotation")
+ col.label(text=_("Rotation:"))
+ col.prop(strip, "rotation_start", text=_("Rotation"))
class SEQUENCER_PT_input(SequencerButtonsPanel, Panel):
@@ -560,7 +561,7 @@ class SEQUENCER_PT_input(SequencerButtonsPanel, Panel):
if seq_type == 'IMAGE':
split = layout.split(percentage=0.2)
col = split.column()
- col.label(text="Path:")
+ col.label(text=_("Path:"))
col = split.column()
col.prop(strip, "directory", text="")
@@ -570,7 +571,7 @@ class SEQUENCER_PT_input(SequencerButtonsPanel, Panel):
if elem:
split = layout.split(percentage=0.2)
col = split.column()
- col.label(text="File:")
+ col.label(text=_("File:"))
col = split.column()
col.prop(elem, "filename", text="") # strip.elements[0] could be a fallback
@@ -580,22 +581,22 @@ class SEQUENCER_PT_input(SequencerButtonsPanel, Panel):
elif seq_type == 'MOVIE':
split = layout.split(percentage=0.2)
col = split.column()
- col.label(text="Path:")
+ col.label(text=_("Path:"))
col = split.column()
col.prop(strip, "filepath", text="")
- col.prop(strip, "mpeg_preseek", text="MPEG Preseek")
- col.prop(strip, "streamindex", text="Stream Index")
+ col.prop(strip, "mpeg_preseek", text=_("MPEG Preseek"))
+ col.prop(strip, "streamindex", text=_("Stream Index"))
# TODO, sound???
# end drawing filename
- layout.prop(strip, "use_translation", text="Image Offset:")
+ layout.prop(strip, "use_translation", text=_("Image Offset:"))
if strip.use_translation:
col = layout.column(align=True)
col.prop(strip.transform, "offset_x", text="X")
col.prop(strip.transform, "offset_y", text="Y")
- layout.prop(strip, "use_crop", text="Image Crop:")
+ layout.prop(strip, "use_crop", text=_("Image Crop:"))
if strip.use_crop:
col = layout.column(align=True)
col.prop(strip.crop, "max_y")
@@ -605,14 +606,14 @@ class SEQUENCER_PT_input(SequencerButtonsPanel, Panel):
if not isinstance(strip, bpy.types.EffectSequence):
col = layout.column(align=True)
- col.label(text="Trim Duration (hard):")
- col.prop(strip, "animation_offset_start", text="Start")
- col.prop(strip, "animation_offset_end", text="End")
+ col.label(text=_("Trim Duration (hard):"))
+ col.prop(strip, "animation_offset_start", text=_("Start"))
+ col.prop(strip, "animation_offset_end", text=_("End"))
col = layout.column(align=True)
- col.label(text="Trim Duration (soft):")
- col.prop(strip, "frame_offset_start", text="Start")
- col.prop(strip, "frame_offset_end", text="End")
+ col.label(text=_("Trim Duration (soft):"))
+ col.prop(strip, "frame_offset_start", text=_("Start"))
+ col.prop(strip, "frame_offset_end", text=_("End"))
class SEQUENCER_PT_sound(SequencerButtonsPanel, Panel):
@@ -641,9 +642,9 @@ class SEQUENCER_PT_sound(SequencerButtonsPanel, Panel):
row = layout.row()
if strip.sound.packed_file:
- row.operator("sound.unpack", icon='PACKAGE', text="Unpack")
+ row.operator("sound.unpack", icon='PACKAGE', text=_("Unpack"))
else:
- row.operator("sound.pack", icon='UGLYPACKAGE', text="Pack")
+ row.operator("sound.pack", icon='UGLYPACKAGE', text=_("Pack"))
row.prop(strip.sound, "use_memory_cache")
@@ -654,8 +655,8 @@ class SEQUENCER_PT_sound(SequencerButtonsPanel, Panel):
col = layout.column(align=True)
col.label(text="Trim Duration:")
- col.prop(strip, "animation_offset_start", text="Start")
- col.prop(strip, "animation_offset_end", text="End")
+ col.prop(strip, "animation_offset_start", text=_("Start"))
+ col.prop(strip, "animation_offset_end", text=_("End"))
class SEQUENCER_PT_scene(SequencerButtonsPanel, Panel):
@@ -683,13 +684,13 @@ class SEQUENCER_PT_scene(SequencerButtonsPanel, Panel):
if scene:
layout.prop(scene.render, "use_sequencer")
- layout.label(text="Camera Override")
+ layout.label(text=_("Camera Override"))
layout.template_ID(strip, "scene_camera")
if scene:
sta = scene.frame_start
end = scene.frame_end
- layout.label(text="Original frame range: %d-%d (%d)" % (sta, end, end - sta + 1))
+ layout.label(text=_("Original frame range")+": %d-%d (%d)" % (sta, end, end - sta + 1))
class SEQUENCER_PT_filter(SequencerButtonsPanel, Panel):
@@ -717,22 +718,22 @@ class SEQUENCER_PT_filter(SequencerButtonsPanel, Panel):
strip = act_strip(context)
col = layout.column()
- col.label(text="Video:")
+ col.label(text=_("Video:"))
col.prop(strip, "strobe")
row = layout.row()
- row.label(text="Flip:")
+ row.label(text=_("Flip:"))
row.prop(strip, "use_flip_x", text="X")
row.prop(strip, "use_flip_y", text="Y")
col = layout.column()
- col.prop(strip, "use_reverse_frames", text="Backwards")
+ col.prop(strip, "use_reverse_frames", text=_("Backwards"))
col.prop(strip, "use_deinterlace")
col = layout.column()
- col.label(text="Colors:")
- col.prop(strip, "color_saturation", text="Saturation")
- col.prop(strip, "color_multiply", text="Multiply")
+ col.label(text=_("Colors:"))
+ col.prop(strip, "color_saturation", text=_("Saturation"))
+ col.prop(strip, "color_multiply", text=_("Multiply"))
col.prop(strip, "use_premultiply")
col.prop(strip, "use_float")
@@ -743,15 +744,15 @@ class SEQUENCER_PT_filter(SequencerButtonsPanel, Panel):
col = row.column()
col.template_color_wheel(strip.color_balance, "lift", value_slider=False, cubic=True)
col.row().prop(strip.color_balance, "lift")
- col.prop(strip.color_balance, "invert_lift", text="Inverse")
+ col.prop(strip.color_balance, "invert_lift", text=_("Inverse"))
col = row.column()
col.template_color_wheel(strip.color_balance, "gamma", value_slider=False, lock_luminosity=True, cubic=True)
col.row().prop(strip.color_balance, "gamma")
- col.prop(strip.color_balance, "invert_gamma", text="Inverse")
+ col.prop(strip.color_balance, "invert_gamma", text=_("Inverse"))
col = row.column()
col.template_color_wheel(strip.color_balance, "gain", value_slider=False, lock_luminosity=True, cubic=True)
col.row().prop(strip.color_balance, "gain")
- col.prop(strip.color_balance, "invert_gain", text="Inverse")
+ col.prop(strip.color_balance, "invert_gain", text=_("Inverse"))
class SEQUENCER_PT_proxy(SequencerButtonsPanel, Panel):
@@ -794,18 +795,18 @@ class SEQUENCER_PT_proxy(SequencerButtonsPanel, Panel):
row.prop(strip.proxy, "build_100")
col = layout.column()
- col.label(text="Build JPEG quality")
+ col.label(text=_("Build JPEG quality"))
col.prop(strip.proxy, "quality")
if strip.type == "MOVIE":
col = layout.column()
- col.label(text="Use timecode index:")
+ col.label(text=_("Use timecode index:"))
col.prop(strip.proxy, "timecode")
class SEQUENCER_PT_preview(SequencerButtonsPanel_Output, Panel):
- bl_label = "Scene Preview/Render"
+ bl_label = _("Scene Preview/Render")
bl_space_type = 'SEQUENCE_EDITOR'
bl_region_type = 'UI'
@@ -815,7 +816,7 @@ class SEQUENCER_PT_preview(SequencerButtonsPanel_Output, Panel):
col = layout.column()
col.active = False # Currently only opengl preview works!
- col.prop(render, "use_sequencer_gl_preview", text="Open GL Preview")
+ col.prop(render, "use_sequencer_gl_preview", text=_("Open GL Preview"))
col = layout.column()
#col.active = render.use_sequencer_gl_preview
col.prop(render, "sequencer_gl_preview", text="")
diff --git a/release/scripts/startup/bl_ui/space_text.py b/release/scripts/startup/bl_ui/space_text.py
index 12e07c19ca1..cd72d42857b 100644
--- a/release/scripts/startup/bl_ui/space_text.py
+++ b/release/scripts/startup/bl_ui/space_text.py
@@ -19,6 +19,7 @@
# <pep8-80 compliant>
import bpy
from bpy.types import Header, Menu, Panel
+from blf import gettext as _
class TEXT_HT_header(Header):
@@ -66,13 +67,13 @@ class TEXT_HT_header(Header):
row = layout.row()
if text.filepath:
if text.is_dirty:
- row.label(text="File: *%r (unsaved)" % text.filepath)
+ row.label(text=_("File")+": *%r " % text.filepath+_("(unsaved)"))
else:
- row.label(text="File: %r" % text.filepath)
+ row.label(text=_("File")+": %r" % text.filepath)
else:
- row.label(text="Text: External"
+ row.label(text=_("Text: External")
if text.library
- else "Text: Internal")
+ else _("Text: Internal"))
class TEXT_PT_properties(Panel):
@@ -136,8 +137,8 @@ class TEXT_PT_find(Panel):
# settings
layout.prop(st, "use_match_case")
row = layout.row()
- row.prop(st, "use_find_wrap", text="Wrap")
- row.prop(st, "use_find_all", text="All")
+ row.prop(st, "use_find_wrap", text=_("Wrap"))
+ row.prop(st, "use_find_all", text=_("All"))
class TEXT_MT_view(Menu):
@@ -156,10 +157,10 @@ class TEXT_MT_view(Menu):
layout.separator()
layout.operator("text.move",
- text="Top of File",
+ text=_("Top of File"),
).type = 'FILE_TOP'
layout.operator("text.move",
- text="Bottom of File",
+ text=_("Bottom of File"),
).type = 'FILE_BOTTOM'
@@ -248,10 +249,10 @@ class TEXT_MT_edit_to3d(Menu):
layout = self.layout
layout.operator("text.to_3d_object",
- text="One Object",
+ text=_("One Object"),
).split_lines = False
layout.operator("text.to_3d_object",
- text="One Object Per Line",
+ text=_("One Object Per Line"),
).split_lines = True
@@ -282,7 +283,7 @@ class TEXT_MT_edit(Menu):
layout.separator()
layout.operator("text.jump")
- layout.operator("text.properties", text="Find...")
+ layout.operator("text.properties", text=_("Find..."))
layout.separator()
diff --git a/release/scripts/startup/bl_ui/space_time.py b/release/scripts/startup/bl_ui/space_time.py
index db009fe43c2..d654c1e4d8b 100644
--- a/release/scripts/startup/bl_ui/space_time.py
+++ b/release/scripts/startup/bl_ui/space_time.py
@@ -19,6 +19,7 @@
# <pep8 compliant>
import bpy
from bpy.types import Header, Menu
+from blf import gettext as _
class TIME_HT_header(Header):
@@ -43,11 +44,11 @@ class TIME_HT_header(Header):
row = layout.row(align=True)
if not scene.use_preview_range:
- row.prop(scene, "frame_start", text="Start")
- row.prop(scene, "frame_end", text="End")
+ row.prop(scene, "frame_start", text=_("Start"))
+ row.prop(scene, "frame_end", text=_("End"))
else:
- row.prop(scene, "frame_preview_start", text="Start")
- row.prop(scene, "frame_preview_end", text="End")
+ row.prop(scene, "frame_preview_start", text=_("Start"))
+ row.prop(scene, "frame_preview_end", text=_("End"))
layout.prop(scene, "frame_current", text="")
@@ -142,14 +143,14 @@ class TIME_MT_frame(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("marker.add", text="Add Marker")
- layout.operator("marker.duplicate", text="Duplicate Marker")
- layout.operator("marker.delete", text="Delete Marker")
+ layout.operator("marker.add", text=_("Add Marker"))
+ layout.operator("marker.duplicate", text=_("Duplicate Marker"))
+ layout.operator("marker.delete", text=_("Delete Marker"))
layout.separator()
- layout.operator("marker.rename", text="Rename Marker")
- layout.operator("marker.move", text="Grab/Move Marker")
+ layout.operator("marker.rename", text=_("Rename Marker"))
+ layout.operator("marker.move", text=_("Grab/Move Marker"))
layout.separator()
@@ -181,8 +182,8 @@ class TIME_MT_playback(Menu):
layout.separator()
- layout.prop(scene, "use_frame_drop", text="Frame Dropping")
- layout.prop(scene, "use_audio_sync", text="AV-sync", icon='SPEAKER')
+ layout.prop(scene, "use_frame_drop", text=_("Frame Dropping"))
+ layout.prop(scene, "use_audio_sync", text=_("AV-sync"), icon='SPEAKER')
layout.prop(scene, "use_audio")
layout.prop(scene, "use_audio_scrub")
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index 3e3ca913e88..d0e7ae5e609 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -23,6 +23,7 @@ import os
import addon_utils
from bpy.props import StringProperty, BoolProperty, EnumProperty
+from blf import gettext as _
def ui_items_general(col, context):
@@ -65,10 +66,10 @@ def opengl_lamp_buttons(column, lamp):
col = split.column()
col.active = lamp.use
row = col.row()
- row.label(text="Diffuse:")
+ row.label(text=_("Diffuse:"))
row.prop(lamp, "diffuse_color", text="")
row = col.row()
- row.label(text="Specular:")
+ row.label(text=_("Specular:"))
row.prop(lamp, "specular_color", text="")
col = split.column()
@@ -86,7 +87,7 @@ class USERPREF_HT_header(Header):
userpref = context.user_preferences
layout.operator_context = 'EXEC_AREA'
- layout.operator("wm.save_homefile", text="Save As Default")
+ layout.operator("wm.save_homefile", text=_("Save As Default"))
layout.operator_context = 'INVOKE_DEFAULT'
@@ -127,7 +128,7 @@ class USERPREF_MT_appconfigs(Menu):
preset_operator = "wm.appconfig_activate"
def draw(self, context):
- self.layout.operator("wm.appconfig_default", text="Blender (default)")
+ self.layout.operator("wm.appconfig_default", text=_("Blender (default)"))
# now draw the presets
Menu.draw_preset(self, context)
@@ -142,12 +143,12 @@ class USERPREF_MT_splash(Menu):
row = split.row()
row.label("")
row = split.row()
- row.label("Interaction:")
+ row.label(_("Interaction:"))
# XXX, no redraws
# text = bpy.path.display_name(context.window_manager.keyconfigs.active.name)
# if not text:
# text = "Blender (default)"
- row.menu("USERPREF_MT_appconfigs", text="Preset")
+ row.menu("USERPREF_MT_appconfigs", text=_("Preset"))
class USERPREF_PT_interface(Panel):
@@ -170,13 +171,13 @@ class USERPREF_PT_interface(Panel):
row = layout.row()
col = row.column()
- col.label(text="Display:")
+ col.label(text=_("Display:"))
col.prop(view, "show_tooltips")
col.prop(view, "show_tooltips_python")
- col.prop(view, "show_object_info", text="Object Info")
+ col.prop(view, "show_object_info", text=_("Object Info"))
col.prop(view, "show_large_cursors")
- col.prop(view, "show_view_name", text="View Name")
- col.prop(view, "show_playback_fps", text="Playback FPS")
+ col.prop(view, "show_view_name", text=_("View Name"))
+ col.prop(view, "show_playback_fps", text=_("Playback FPS"))
col.prop(view, "use_global_scene")
col.prop(view, "object_origin_size")
@@ -184,18 +185,18 @@ class USERPREF_PT_interface(Panel):
col.separator()
col.separator()
- col.prop(view, "show_mini_axis", text="Display Mini Axis")
+ col.prop(view, "show_mini_axis", text=_("Display Mini Axis"))
sub = col.column()
sub.active = view.show_mini_axis
- sub.prop(view, "mini_axis_size", text="Size")
- sub.prop(view, "mini_axis_brightness", text="Brightness")
+ sub.prop(view, "mini_axis_size", text=_("Size"))
+ sub.prop(view, "mini_axis_brightness", text=_("Brightness"))
col.separator()
row.separator()
row.separator()
col = row.column()
- col.label(text="View Manipulation:")
+ col.label(text=_("View Manipulation:"))
col.prop(view, "use_mouse_auto_depth")
col.prop(view, "use_zoom_to_mouse")
col.prop(view, "use_rotate_around_active")
@@ -211,8 +212,8 @@ class USERPREF_PT_interface(Panel):
col.separator()
col.separator()
- col.label(text="2D Viewports:")
- col.prop(view, "view2d_grid_spacing_min", text="Minimum Grid Spacing")
+ col.label(text=_("2D Viewports:"))
+ col.prop(view, "view2d_grid_spacing_min", text=_("Minimum Grid Spacing"))
col.prop(view, "timecode_style")
row.separator()
@@ -228,19 +229,19 @@ class USERPREF_PT_interface(Panel):
col.prop(view, "show_manipulator")
sub = col.column()
sub.active = view.show_manipulator
- sub.prop(view, "manipulator_size", text="Size")
- sub.prop(view, "manipulator_handle_size", text="Handle Size")
- sub.prop(view, "manipulator_hotspot", text="Hotspot")
+ sub.prop(view, "manipulator_size", text=_("Size"))
+ sub.prop(view, "manipulator_handle_size", text=_("Handle Size"))
+ sub.prop(view, "manipulator_hotspot", text=_("Hotspot"))
col.separator()
col.separator()
col.separator()
- col.label(text="Menus:")
+ col.label(text=_("Menus:"))
col.prop(view, "use_mouse_over_open")
- col.label(text="Menu Open Delay:")
- col.prop(view, "open_toplevel_delay", text="Top Level")
- col.prop(view, "open_sublevel_delay", text="Sub Level")
+ col.label(text=_("Menu Open Delay:"))
+ col.prop(view, "open_toplevel_delay", text=_("Top Level"))
+ col.prop(view, "open_sublevel_delay", text=_("Sub Level"))
col.separator()
@@ -267,97 +268,97 @@ class USERPREF_PT_edit(Panel):
row = layout.row()
col = row.column()
- col.label(text="Link Materials To:")
+ col.label(text=_("Link Materials To:"))
col.prop(edit, "material_link", text="")
col.separator()
col.separator()
col.separator()
- col.label(text="New Objects:")
+ col.label(text=_("New Objects:"))
col.prop(edit, "use_enter_edit_mode")
- col.label(text="Align To:")
+ col.label(text=_("Align To:"))
col.prop(edit, "object_align", text="")
col.separator()
col.separator()
col.separator()
- col.label(text="Undo:")
+ col.label(text=_("Undo:"))
col.prop(edit, "use_global_undo")
- col.prop(edit, "undo_steps", text="Steps")
- col.prop(edit, "undo_memory_limit", text="Memory Limit")
+ col.prop(edit, "undo_steps", text=_("Steps"))
+ col.prop(edit, "undo_memory_limit", text=_("Memory Limit"))
row.separator()
row.separator()
col = row.column()
- col.label(text="Grease Pencil:")
- col.prop(edit, "grease_pencil_manhattan_distance", text="Manhattan Distance")
- col.prop(edit, "grease_pencil_euclidean_distance", text="Euclidean Distance")
+ col.label(text=_("Grease Pencil:"))
+ col.prop(edit, "grease_pencil_manhattan_distance", text=_("Manhattan Distance"))
+ col.prop(edit, "grease_pencil_euclidean_distance", text=_("Euclidean Distance"))
#col.prop(edit, "use_grease_pencil_simplify_stroke", text="Simplify Stroke")
- col.prop(edit, "grease_pencil_eraser_radius", text="Eraser Radius")
- col.prop(edit, "use_grease_pencil_smooth_stroke", text="Smooth Stroke")
+ col.prop(edit, "grease_pencil_eraser_radius", text=_("Eraser Radius"))
+ col.prop(edit, "use_grease_pencil_smooth_stroke", text=_("Smooth Stroke"))
col.separator()
col.separator()
col.separator()
- col.label(text="Playback:")
+ col.label(text=_("Playback:"))
col.prop(edit, "use_negative_frames")
row.separator()
row.separator()
col = row.column()
- col.label(text="Keyframing:")
+ col.label(text=_("Keyframing:"))
col.prop(edit, "use_visual_keying")
- col.prop(edit, "use_keyframe_insert_needed", text="Only Insert Needed")
+ col.prop(edit, "use_keyframe_insert_needed", text=_("Only Insert Needed"))
col.separator()
- col.prop(edit, "use_auto_keying", text="Auto Keyframing:")
+ col.prop(edit, "use_auto_keying", text=_("Auto Keyframing:"))
sub = col.column()
# sub.active = edit.use_keyframe_insert_auto # incorrect, timeline can enable
- sub.prop(edit, "use_keyframe_insert_available", text="Only Insert Available")
+ sub.prop(edit, "use_keyframe_insert_available", text=_("Only Insert Available"))
col.separator()
- col.label(text="New F-Curve Defaults:")
- col.prop(edit, "keyframe_new_interpolation_type", text="Interpolation")
- col.prop(edit, "keyframe_new_handle_type", text="Handles")
- col.prop(edit, "use_insertkey_xyz_to_rgb", text="XYZ to RGB")
+ col.label(text=_("New F-Curve Defaults:"))
+ col.prop(edit, "keyframe_new_interpolation_type", text=_("Interpolation"))
+ col.prop(edit, "keyframe_new_handle_type", text=_("Handles"))
+ col.prop(edit, "use_insertkey_xyz_to_rgb", text=_("XYZ to RGB"))
col.separator()
col.separator()
col.separator()
- col.label(text="Transform:")
+ col.label(text=_("Transform:"))
col.prop(edit, "use_drag_immediately")
row.separator()
row.separator()
col = row.column()
- col.prop(edit, "sculpt_paint_overlay_color", text="Sculpt Overlay Color")
+ col.prop(edit, "sculpt_paint_overlay_color", text=_("Sculpt Overlay Color"))
col.separator()
col.separator()
col.separator()
- col.label(text="Duplicate Data:")
- col.prop(edit, "use_duplicate_mesh", text="Mesh")
- col.prop(edit, "use_duplicate_surface", text="Surface")
- col.prop(edit, "use_duplicate_curve", text="Curve")
- col.prop(edit, "use_duplicate_text", text="Text")
- col.prop(edit, "use_duplicate_metaball", text="Metaball")
- col.prop(edit, "use_duplicate_armature", text="Armature")
- col.prop(edit, "use_duplicate_lamp", text="Lamp")
- col.prop(edit, "use_duplicate_material", text="Material")
- col.prop(edit, "use_duplicate_texture", text="Texture")
- #col.prop(edit, "use_duplicate_fcurve", text="F-Curve")
- col.prop(edit, "use_duplicate_action", text="Action")
- col.prop(edit, "use_duplicate_particle", text="Particle")
+ col.label(text=_("Duplicate Data:"))
+ col.prop(edit, "use_duplicate_mesh", text=_("Mesh"))
+ col.prop(edit, "use_duplicate_surface", text=_("Surface"))
+ col.prop(edit, "use_duplicate_curve", text=_("Curve"))
+ col.prop(edit, "use_duplicate_text", text=_("Text"))
+ col.prop(edit, "use_duplicate_metaball", text=_("Metaball"))
+ col.prop(edit, "use_duplicate_armature", text=_("Armature"))
+ col.prop(edit, "use_duplicate_lamp", text=_("Lamp"))
+ col.prop(edit, "use_duplicate_material", text=_("Material"))
+ col.prop(edit, "use_duplicate_texture", text=_("Texture"))
+ #col.prop(edit, "use_duplicate_fcurve", text=_("F-Curve"))
+ col.prop(edit, "use_duplicate_action", text=_("Action"))
+ col.prop(edit, "use_duplicate_particle", text=_("Particle"))
class USERPREF_PT_system(Panel):
@@ -384,11 +385,11 @@ class USERPREF_PT_system(Panel):
colsplit = column.split(percentage=0.85)
col = colsplit.column()
- col.label(text="General:")
+ col.label(text=_("General:"))
col.prop(system, "dpi")
col.prop(system, "frame_server_port")
- col.prop(system, "scrollback", text="Console Scrollback")
- col.prop(system, "author", text="Author")
+ col.prop(system, "scrollback", text=_("Console Scrollback"))
+ col.prop(system, "author", text=_("Author"))
col.prop(system, "use_scripts_auto_execute")
col.prop(system, "use_tabs_as_spaces")
@@ -396,80 +397,66 @@ class USERPREF_PT_system(Panel):
col.separator()
col.separator()
- col.label(text="Sound:")
+ col.label(text=_("Sound:"))
col.row().prop(system, "audio_device", expand=True)
sub = col.column()
sub.active = system.audio_device != 'NONE'
#sub.prop(system, "use_preview_images")
- sub.prop(system, "audio_channels", text="Channels")
- sub.prop(system, "audio_mixing_buffer", text="Mixing Buffer")
- sub.prop(system, "audio_sample_rate", text="Sample Rate")
- sub.prop(system, "audio_sample_format", text="Sample Format")
+ sub.prop(system, "audio_channels", text=_("Channels"))
+ sub.prop(system, "audio_mixing_buffer", text=_("Mixing Buffer"))
+ sub.prop(system, "audio_sample_rate", text=_("Sample Rate"))
+ sub.prop(system, "audio_sample_format", text=_("Sample Format"))
col.separator()
col.separator()
col.separator()
- col.label(text="Screencast:")
+ col.label(text=_("Screencast:"))
col.prop(system, "screencast_fps")
col.prop(system, "screencast_wait_time")
col.separator()
col.separator()
col.separator()
- #column = split.column()
- #colsplit = column.split(percentage=0.85)
-
- # No translation in 2.5 yet
- #col.prop(system, "language")
- #col.label(text="Translate:")
- #col.prop(system, "use_translate_tooltips", text="Tooltips")
- #col.prop(system, "use_translate_buttons", text="Labels")
- #col.prop(system, "use_translate_toolbox", text="Toolbox")
-
- #col.separator()
-
- #col.prop(system, "use_textured_fonts")
-
# 2. Column
column = split.column()
colsplit = column.split(percentage=0.85)
col = colsplit.column()
- col.label(text="OpenGL:")
+ col.label(text=_("OpenGL:"))
col.prop(system, "gl_clip_alpha", slider=True)
col.prop(system, "use_mipmaps")
- col.label(text="Anisotropic Filtering")
+ col.label(text=_("Anisotropic Filtering"))
col.prop(system, "anisotropic_filter", text="")
col.prop(system, "use_vertex_buffer_objects")
#Anti-aliasing is disabled as it breaks broder/lasso select
#col.prop(system, "use_antialiasing")
- col.label(text="Window Draw Method:")
+ col.label(text=_("Window Draw Method:"))
col.prop(system, "window_draw_method", text="")
- col.label(text="Text Draw Options:")
+ col.label(text=_("Text Draw Options:"))
col.prop(system, "use_text_antialiasing")
- col.label(text="Textures:")
- col.prop(system, "gl_texture_limit", text="Limit Size")
- col.prop(system, "texture_time_out", text="Time Out")
- col.prop(system, "texture_collection_rate", text="Collection Rate")
+ col.label(text=_("Textures:"))
+ col.prop(system, "gl_texture_limit", text=_("Limit Size"))
+ col.prop(system, "texture_time_out", text=_("Time Out"))
+ col.prop(system, "texture_collection_rate", text=_("Collection Rate"))
col.separator()
col.separator()
col.separator()
- col.label(text="Sequencer:")
+ col.label(text=_("Sequencer:"))
col.prop(system, "prefetch_frames")
col.prop(system, "memory_cache_limit")
# 3. Column
column = split.column()
- column.label(text="Solid OpenGL lights:")
+ column.label(text=_("Solid OpenGL lights:"))
split = column.split(percentage=0.1)
split.label()
- split.label(text="Colors:")
- split.label(text="Direction:")
+ split.label(text=_("Colors:"))
+ split.label(text=_("Direction:"))
lamp = system.solid_lights[0]
opengl_lamp_buttons(column, lamp)
@@ -481,21 +468,27 @@ class USERPREF_PT_system(Panel):
opengl_lamp_buttons(column, lamp)
column.separator()
- column.separator()
- column.separator()
- column.label(text="Color Picker Type:")
+ column.label(text=_("Color Picker Type:"))
column.row().prop(system, "color_picker_type", text="")
column.separator()
- column.separator()
- column.separator()
- column.prop(system, "use_weight_color_range", text="Custom Weight Paint Range")
+ column.prop(system, "use_weight_color_range", text=_("Custom Weight Paint Range"))
sub = column.column()
sub.active = system.use_weight_color_range
sub.template_color_ramp(system, "weight_color_range", expand=True)
+ column.separator()
+
+ column.prop(system, "use_international_fonts")
+ if system.use_international_fonts:
+ column.prop(system, "language")
+ row = column.row()
+ row.label(text="Translate:")
+ row.prop(system, "use_translate_interface", text="Interface")
+ row.prop(system, "use_translate_tooltips", text="Tooltips")
+
class USERPREF_PT_theme(Panel):
bl_space_type = 'USER_PREFERENCES'
@@ -557,71 +550,71 @@ class USERPREF_PT_theme(Panel):
col = split.column()
ui = theme.user_interface.wcol_regular
- col.label(text="Regular:")
+ col.label(text=_("Regular:"))
ui_items_general(col, ui)
ui = theme.user_interface.wcol_tool
- col.label(text="Tool:")
+ col.label(text=_("Tool:"))
ui_items_general(col, ui)
ui = theme.user_interface.wcol_radio
- col.label(text="Radio Buttons:")
+ col.label(text=_("Radio Buttons:"))
ui_items_general(col, ui)
ui = theme.user_interface.wcol_text
- col.label(text="Text:")
+ col.label(text=_("Text:"))
ui_items_general(col, ui)
ui = theme.user_interface.wcol_option
- col.label(text="Option:")
+ col.label(text=_("Option:"))
ui_items_general(col, ui)
ui = theme.user_interface.wcol_toggle
- col.label(text="Toggle:")
+ col.label(text=_("Toggle:"))
ui_items_general(col, ui)
ui = theme.user_interface.wcol_num
- col.label(text="Number Field:")
+ col.label(text=_("Number Field:"))
ui_items_general(col, ui)
ui = theme.user_interface.wcol_numslider
- col.label(text="Value Slider:")
+ col.label(text=_("Value Slider:"))
ui_items_general(col, ui)
ui = theme.user_interface.wcol_box
- col.label(text="Box:")
+ col.label(text=_("Box:"))
ui_items_general(col, ui)
ui = theme.user_interface.wcol_menu
- col.label(text="Menu:")
+ col.label(text=_("Menu:"))
ui_items_general(col, ui)
ui = theme.user_interface.wcol_pulldown
- col.label(text="Pulldown:")
+ col.label(text=_("Pulldown:"))
ui_items_general(col, ui)
ui = theme.user_interface.wcol_menu_back
- col.label(text="Menu Back:")
+ col.label(text=_("Menu Back:"))
ui_items_general(col, ui)
ui = theme.user_interface.wcol_menu_item
- col.label(text="Menu Item:")
+ col.label(text=_("Menu Item:"))
ui_items_general(col, ui)
ui = theme.user_interface.wcol_scroll
- col.label(text="Scroll Bar:")
+ col.label(text=_("Scroll Bar:"))
ui_items_general(col, ui)
ui = theme.user_interface.wcol_progress
- col.label(text="Progress Bar:")
+ col.label(text=_("Progress Bar:"))
ui_items_general(col, ui)
ui = theme.user_interface.wcol_list_item
- col.label(text="List Item:")
+ col.label(text=_("List Item:"))
ui_items_general(col, ui)
ui = theme.user_interface.wcol_state
- col.label(text="State:")
+ col.label(text=_("State:"))
row = col.row()
@@ -657,7 +650,7 @@ class USERPREF_PT_theme(Panel):
col = split.column()
for i, ui in enumerate(theme.bone_color_sets):
- col.label(text="Color Set %d:" % (i + 1)) # i starts from 0
+ col.label(text=_("Color Set")+" %d:" % (i + 1)) # i starts from 0
row = col.row()
@@ -700,22 +693,22 @@ class USERPREF_PT_file(Panel):
split = layout.split(percentage=0.7)
col = split.column()
- col.label(text="File Paths:")
+ col.label(text=_("File Paths:"))
colsplit = col.split(percentage=0.95)
col1 = colsplit.split(percentage=0.3)
sub = col1.column()
- sub.label(text="Fonts:")
- sub.label(text="Textures:")
- sub.label(text="Texture Plugins:")
- sub.label(text="Sequence Plugins:")
- sub.label(text="Render Output:")
- sub.label(text="Scripts:")
- sub.label(text="Sounds:")
- sub.label(text="Temp:")
- sub.label(text="Image Editor:")
- sub.label(text="Animation Player:")
+ sub.label(text=_("Fonts:"))
+ sub.label(text=_("Textures:"))
+ sub.label(text=_("Texture Plugins:"))
+ sub.label(text=_("Sequence Plugins:"))
+ sub.label(text=_("Render Output:"))
+ sub.label(text=_("Scripts:"))
+ sub.label(text=_("Sounds:"))
+ sub.label(text=_("Temp:"))
+ sub.label(text=_("Image Editor:"))
+ sub.label(text=_("Animation Player:"))
sub = col1.column()
sub.prop(paths, "font_directory", text="")
@@ -732,7 +725,7 @@ class USERPREF_PT_file(Panel):
subsplit.prop(paths, "animation_player", text="")
col = split.column()
- col.label(text="Save & Load:")
+ col.label(text=_("Save & Load:"))
col.prop(paths, "use_relative_paths")
col.prop(paths, "use_file_compression")
col.prop(paths, "use_load_ui")
@@ -747,11 +740,11 @@ class USERPREF_PT_file(Panel):
col.prop(paths, "save_version")
col.prop(paths, "recent_files")
col.prop(paths, "use_save_preview_images")
- col.label(text="Auto Save:")
+ col.label(text=_("Auto Save:"))
col.prop(paths, "use_auto_save_temporary_files")
sub = col.column()
sub.active = paths.use_auto_save_temporary_files
- sub.prop(paths, "auto_save_time", text="Timer (mins)")
+ sub.prop(paths, "auto_save_time", text=_("Timer (mins)"))
from bl_ui.space_userpref_keymap import InputKeyMapPanel
@@ -807,7 +800,7 @@ class USERPREF_PT_input(Panel, InputKeyMapPanel):
col = row.column()
sub = col.column()
- sub.label(text="Presets:")
+ sub.label(text=_("Presets:"))
subrow = sub.row(align=True)
subrow.menu("USERPREF_MT_interaction_presets", text=bpy.types.USERPREF_MT_interaction_presets.bl_label)
@@ -815,19 +808,19 @@ class USERPREF_PT_input(Panel, InputKeyMapPanel):
subrow.operator("wm.interaction_preset_add", text="", icon='ZOOMOUT').remove_active = True
sub.separator()
- sub.label(text="Mouse:")
+ sub.label(text=_("Mouse:"))
sub1 = sub.column()
sub1.active = (inputs.select_mouse == 'RIGHT')
sub1.prop(inputs, "use_mouse_emulate_3_button")
sub.prop(inputs, "use_mouse_continuous")
sub.prop(inputs, "drag_threshold")
- sub.label(text="Select With:")
+ sub.label(text=_("Select With:"))
sub.row().prop(inputs, "select_mouse", expand=True)
sub = col.column()
- sub.label(text="Double Click:")
- sub.prop(inputs, "mouse_double_click_time", text="Speed")
+ sub.label(text=_("Double Click:"))
+ sub.prop(inputs, "mouse_double_click_time", text=_("Speed"))
sub.separator()
@@ -835,10 +828,10 @@ class USERPREF_PT_input(Panel, InputKeyMapPanel):
sub.separator()
- sub.label(text="Orbit Style:")
+ sub.label(text=_("Orbit Style:"))
sub.row().prop(inputs, "view_rotate_method", expand=True)
- sub.label(text="Zoom Style:")
+ sub.label(text=_("Zoom Style:"))
sub.row().prop(inputs, "view_zoom_method", text="")
if inputs.view_zoom_method in {'DOLLY', 'CONTINUE'}:
sub.row().prop(inputs, "view_zoom_axis", expand=True)
@@ -849,8 +842,8 @@ class USERPREF_PT_input(Panel, InputKeyMapPanel):
#col.separator()
sub = col.column()
- sub.label(text="Mouse Wheel:")
- sub.prop(inputs, "invert_zoom_wheel", text="Invert Wheel Zoom Direction")
+ sub.label(text=_("Mouse Wheel:"))
+ sub.prop(inputs, "invert_zoom_wheel", text=_("Invert Wheel Zoom Direction"))
#sub.prop(view, "wheel_scroll_lines", text="Scroll Lines")
col.separator()
@@ -888,9 +881,9 @@ class USERPREF_MT_addons_dev_guides(Menu):
# menu to open webpages with addons development guides
def draw(self, context):
layout = self.layout
- layout.operator('wm.url_open', text='API Concepts', icon='URL').url = 'http://wiki.blender.org/index.php/Dev:2.5/Py/API/Intro'
- layout.operator('wm.url_open', text='Addon Guidelines', icon='URL').url = 'http://wiki.blender.org/index.php/Dev:2.5/Py/Scripts/Guidelines/Addons'
- layout.operator('wm.url_open', text='How to share your addon', icon='URL').url = 'http://wiki.blender.org/index.php/Dev:Py/Sharing'
+ layout.operator('wm.url_open', text=_('API Concepts'), icon='URL').url = 'http://wiki.blender.org/index.php/Dev:2.5/Py/API/Intro'
+ layout.operator('wm.url_open', text=_('Addon Guidelines'), icon='URL').url = 'http://wiki.blender.org/index.php/Dev:2.5/Py/Scripts/Guidelines/Addons'
+ layout.operator('wm.url_open', text=_('How to share your addon'), icon='URL').url = 'http://wiki.blender.org/index.php/Dev:Py/Sharing'
class USERPREF_PT_addons(Panel):
@@ -945,10 +938,10 @@ class USERPREF_PT_addons(Panel):
split = layout.split(percentage=0.2)
col = split.column()
col.prop(context.window_manager, "addon_search", text="", icon='VIEWZOOM')
- col.label(text="Categories")
+ col.label(text=_("Categories"))
col.prop(context.window_manager, "addon_filter", expand=True)
- col.label(text="Supported Level")
+ col.label(text=_("Supported Level"))
col.prop(context.window_manager, "addon_support", expand=True)
col = split.column()
@@ -1025,23 +1018,23 @@ class USERPREF_PT_addons(Panel):
if info["show_expanded"]:
if info["description"]:
split = colsub.row().split(percentage=0.15)
- split.label(text='Description:')
+ split.label(text=_('Description:'))
split.label(text=info["description"])
if info["location"]:
split = colsub.row().split(percentage=0.15)
- split.label(text='Location:')
+ split.label(text=_('Location:'))
split.label(text=info["location"])
if info["author"]:
split = colsub.row().split(percentage=0.15)
- split.label(text='Author:')
+ split.label(text=_('Author:'))
split.label(text=info["author"])
if info["version"]:
split = colsub.row().split(percentage=0.15)
- split.label(text='Version:')
+ split.label(text=_('Version:'))
split.label(text='.'.join(str(x) for x in info["version"]))
if info["warning"]:
split = colsub.row().split(percentage=0.15)
- split.label(text="Warning:")
+ split.label(text=_("Warning:"))
split.label(text=' ' + info["warning"], icon='ERROR')
user_addon = USERPREF_PT_addons.is_user_addon(mod, user_addon_paths)
@@ -1049,13 +1042,13 @@ class USERPREF_PT_addons(Panel):
if tot_row:
split = colsub.row().split(percentage=0.15)
- split.label(text="Internet:")
+ split.label(text=_("Internet:"))
if info["wiki_url"]:
- split.operator("wm.url_open", text="Link to the Wiki", icon='HELP').url = info["wiki_url"]
+ split.operator("wm.url_open", text=_("Link to the Wiki"), icon='HELP').url = info["wiki_url"]
if info["tracker_url"]:
- split.operator("wm.url_open", text="Report a Bug", icon='URL').url = info["tracker_url"]
+ split.operator("wm.url_open", text=_("Report a Bug"), icon='URL').url = info["tracker_url"]
if user_addon:
- split.operator("wm.addon_remove", text="Remove", icon='CANCEL').module = mod.__name__
+ split.operator("wm.addon_remove", text=_("Remove"), icon='CANCEL').module = mod.__name__
for i in range(4 - tot_row):
split.separator()
@@ -1067,7 +1060,7 @@ class USERPREF_PT_addons(Panel):
if missing_modules and filter in {"All", "Enabled"}:
col.column().separator()
- col.column().label(text="Missing script files")
+ col.column().label(text=_("Missing script files"))
module_names = {mod.__name__ for mod, info in addons}
for module_name in sorted(missing_modules):
diff --git a/release/scripts/startup/bl_ui/space_userpref_keymap.py b/release/scripts/startup/bl_ui/space_userpref_keymap.py
index 9ed1591cbf3..f8d77a1604b 100644
--- a/release/scripts/startup/bl_ui/space_userpref_keymap.py
+++ b/release/scripts/startup/bl_ui/space_userpref_keymap.py
@@ -20,6 +20,7 @@
import bpy
from bpy.types import Menu, Operator, OperatorProperties
import os
+from blf import gettext as _
KM_HIERARCHY = [
@@ -131,7 +132,7 @@ class USERPREF_MT_keyconfigs(Menu):
preset_operator = "wm.keyconfig_activate"
def draw(self, context):
- props = self.layout.operator("wm.context_set_value", text="Blender (default)")
+ props = self.layout.operator("wm.context_set_value", text=_("Blender (default)"))
props.data_path = "window_manager.keyconfigs.active"
props.value = "context.window_manager.keyconfigs.default"
@@ -182,7 +183,7 @@ class InputKeyMapPanel:
row = col.row()
row.prop(km, "show_expanded_children", text="", emboss=False)
- row.label(text=km.name)
+ row.label(text=_(km.name))
row.label()
row.label()
@@ -190,7 +191,7 @@ class InputKeyMapPanel:
if km.is_modal:
row.label(text="", icon='LINKED')
if km.is_user_modified:
- row.operator("wm.keymap_restore", text="Restore")
+ row.operator("wm.keymap_restore", text=_("Restore"))
else:
row.label()
@@ -201,7 +202,7 @@ class InputKeyMapPanel:
subcol = self.indented_layout(col, level + 1)
subrow = subcol.row()
subrow.prop(km, "show_expanded_items", text="", emboss=False)
- subrow.label(text="%s (Global)" % km.name)
+ subrow.label(text="%s " % _(km.name) + _("(Global)") )
else:
km.show_expanded_items = True
@@ -213,7 +214,7 @@ class InputKeyMapPanel:
# "Add New" at end of keymap item list
col = self.indented_layout(col, level + 1)
subcol = col.split(percentage=0.2).column()
- subcol.operator("wm.keyitem_add", text="Add New", icon='ZOOMIN')
+ subcol.operator("wm.keyitem_add", text=_("Add New"), icon='ZOOMIN')
col.separator()
@@ -261,7 +262,7 @@ class InputKeyMapPanel:
if km.is_modal:
row.prop(kmi, "propvalue", text="")
else:
- row.label(text=kmi.name)
+ row.label(text=_(kmi.name))
row = split.row()
row.prop(kmi, "map_type", text="")
@@ -350,7 +351,7 @@ class InputKeyMapPanel:
row.label()
if km.is_user_modified:
- row.operator("wm.keymap_restore", text="Restore")
+ row.operator("wm.keymap_restore", text=_("Restore"))
else:
row.label()
@@ -360,7 +361,7 @@ class InputKeyMapPanel:
# "Add New" at end of keymap item list
col = self.indented_layout(layout, 1)
subcol = col.split(percentage=0.2).column()
- subcol.operator("wm.keyitem_add", text="Add New", icon='ZOOMIN')
+ subcol.operator("wm.keyitem_add", text=_("Add New"), icon='ZOOMIN')
def draw_hierarchy(self, display_keymaps, layout):
for entry in KM_HIERARCHY:
@@ -381,7 +382,7 @@ class InputKeyMapPanel:
#row.prop_search(wm.keyconfigs, "active", wm, "keyconfigs", text="Key Config:")
text = bpy.path.display_name(context.window_manager.keyconfigs.active.name)
if not text:
- text = "Blender (default)"
+ text = _("Blender (default)")
row.menu("USERPREF_MT_keyconfigs", text=text)
row.operator("wm.keyconfig_preset_add", text="", icon="ZOOMIN")
row.operator("wm.keyconfig_preset_add", text="", icon="ZOOMOUT").remove_active = True
@@ -423,7 +424,7 @@ def export_properties(prefix, properties, lines=None):
class WM_OT_keyconfig_test(Operator):
"Test keyconfig for conflicts"
bl_idname = "wm.keyconfig_test"
- bl_label = "Test Key Configuration for Conflicts"
+ bl_label = _("Test Key Configuration for Conflicts")
def testEntry(self, kc, entry, src=None, parent=None):
result = False
@@ -597,7 +598,7 @@ class WM_OT_keyconfig_import(Operator):
class WM_OT_keyconfig_export(Operator):
"Export key configuration to a python script"
bl_idname = "wm.keyconfig_export"
- bl_label = "Export Key Configuration..."
+ bl_label = _("Export Key Configuration...")
filepath = StringProperty(
name="File Path",
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index 357c673edbd..2e86e875bab 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -19,6 +19,7 @@
# <pep8 compliant>
import bpy
from bpy.types import Header, Menu, Operator, Panel
+from blf import gettext as _
class VIEW3D_HT_header(Header):
@@ -124,9 +125,9 @@ class ShowHideMenu():
def draw(self, context):
layout = self.layout
- layout.operator("%s.reveal" % self._operator_name, text="Show Hidden")
- layout.operator("%s.hide" % self._operator_name, text="Hide Selected")
- layout.operator("%s.hide" % self._operator_name, text="Hide Unselected").unselected = True
+ layout.operator("%s.reveal" % self._operator_name, text=_("Show Hidden"))
+ layout.operator("%s.hide" % self._operator_name, text=_("Hide Selected"))
+ layout.operator("%s.hide" % self._operator_name, text=_("Hide Unselected")).unselected = True
class VIEW3D_MT_transform(Menu):
@@ -145,35 +146,35 @@ class VIEW3D_MT_transform(Menu):
layout.separator()
- layout.operator("transform.tosphere", text="To Sphere")
- layout.operator("transform.shear", text="Shear")
- layout.operator("transform.warp", text="Warp")
- layout.operator("transform.push_pull", text="Push/Pull")
+ layout.operator("transform.tosphere", text=_("To Sphere"))
+ layout.operator("transform.shear", text=_("Shear"))
+ layout.operator("transform.warp", text=_("Warp"))
+ layout.operator("transform.push_pull", text=_("Push/Pull"))
layout.separator()
- layout.operator("transform.translate", text="Move Texture Space").texture_space = True
- layout.operator("transform.resize", text="Scale Texture Space").texture_space = True
+ layout.operator("transform.translate", text=_("Move Texture Space")).texture_space = True
+ layout.operator("transform.resize", text=_("Scale Texture Space")).texture_space = True
layout.separator()
obj = context.object
if obj.type == 'ARMATURE' and obj.mode in {'EDIT', 'POSE'} and obj.data.draw_type in {'BBONE', 'ENVELOPE'}:
- layout.operator("transform.transform", text="Scale Envelope/BBone").mode = 'BONE_SIZE'
+ layout.operator("transform.transform", text=_("Scale Envelope/BBone")).mode = 'BONE_SIZE'
if context.edit_object and context.edit_object.type == 'ARMATURE':
layout.operator("armature.align")
else:
layout.operator_context = 'EXEC_REGION_WIN'
- layout.operator("transform.transform", text="Align to Transform Orientation").mode = 'ALIGN' # XXX see alignmenu() in edit.c of b2.4x to get this working
+ layout.operator("transform.transform", text=_("Align to Transform Orientation")).mode = 'ALIGN' # XXX see alignmenu() in edit.c of b2.4x to get this working
layout.separator()
layout.operator_context = 'EXEC_AREA'
- layout.operator("object.origin_set", text="Geometry to Origin").type = 'GEOMETRY_ORIGIN'
- layout.operator("object.origin_set", text="Origin to Geometry").type = 'ORIGIN_GEOMETRY'
- layout.operator("object.origin_set", text="Origin to 3D Cursor").type = 'ORIGIN_CURSOR'
+ layout.operator("object.origin_set", text=_("Geometry to Origin")).type = 'GEOMETRY_ORIGIN'
+ layout.operator("object.origin_set", text=_("Origin to Geometry")).type = 'ORIGIN_GEOMETRY'
+ layout.operator("object.origin_set", text=_("Origin to 3D Cursor")).type = 'ORIGIN_CURSOR'
layout.separator()
@@ -191,32 +192,32 @@ class VIEW3D_MT_mirror(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("transform.mirror", text="Interactive Mirror")
+ layout.operator("transform.mirror", text=_("Interactive Mirror"))
layout.separator()
layout.operator_context = 'INVOKE_REGION_WIN'
- props = layout.operator("transform.mirror", text="X Global")
+ props = layout.operator("transform.mirror", text=_("X Global"))
props.constraint_axis = (True, False, False)
props.constraint_orientation = 'GLOBAL'
- props = layout.operator("transform.mirror", text="Y Global")
+ props = layout.operator("transform.mirror", text=_("Y Global"))
props.constraint_axis = (False, True, False)
props.constraint_orientation = 'GLOBAL'
- props = layout.operator("transform.mirror", text="Z Global")
+ props = layout.operator("transform.mirror", text=_("Z Global"))
props.constraint_axis = (False, False, True)
props.constraint_orientation = 'GLOBAL'
if context.edit_object:
layout.separator()
- props = layout.operator("transform.mirror", text="X Local")
+ props = layout.operator("transform.mirror", text=_("X Local"))
props.constraint_axis = (True, False, False)
props.constraint_orientation = 'LOCAL'
- props = layout.operator("transform.mirror", text="Y Local")
+ props = layout.operator("transform.mirror", text=_("Y Local"))
props.constraint_axis = (False, True, False)
props.constraint_orientation = 'LOCAL'
- props = layout.operator("transform.mirror", text="Z Local")
+ props = layout.operator("transform.mirror", text=_("Z Local"))
props.constraint_axis = (False, False, True)
props.constraint_orientation = 'LOCAL'
@@ -229,15 +230,15 @@ class VIEW3D_MT_snap(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("view3d.snap_selected_to_grid", text="Selection to Grid")
- layout.operator("view3d.snap_selected_to_cursor", text="Selection to Cursor")
+ layout.operator("view3d.snap_selected_to_grid", text=_("Selection to Grid"))
+ layout.operator("view3d.snap_selected_to_cursor", text=_("Selection to Cursor"))
layout.separator()
- layout.operator("view3d.snap_cursor_to_selected", text="Cursor to Selected")
- layout.operator("view3d.snap_cursor_to_center", text="Cursor to Center")
- layout.operator("view3d.snap_cursor_to_grid", text="Cursor to Grid")
- layout.operator("view3d.snap_cursor_to_active", text="Cursor to Active")
+ layout.operator("view3d.snap_cursor_to_selected", text=_("Cursor to Selected"))
+ layout.operator("view3d.snap_cursor_to_center", text=_("Cursor to Center"))
+ layout.operator("view3d.snap_cursor_to_grid", text=_("Cursor to Grid"))
+ layout.operator("view3d.snap_cursor_to_active", text=_("Cursor to Active"))
class VIEW3D_MT_uv_map(Menu):
@@ -263,7 +264,7 @@ class VIEW3D_MT_uv_map(Menu):
layout.separator()
layout.operator("uv.project_from_view")
- layout.operator("uv.project_from_view", text="Project from View (Bounds)").scale_to_bounds = True
+ layout.operator("uv.project_from_view", text=_("Project from View (Bounds)")).scale_to_bounds = True
layout.separator()
@@ -284,15 +285,15 @@ class VIEW3D_MT_view(Menu):
layout.separator()
- layout.operator("view3d.viewnumpad", text="Camera").type = 'CAMERA'
- layout.operator("view3d.viewnumpad", text="Top").type = 'TOP'
- layout.operator("view3d.viewnumpad", text="Bottom").type = 'BOTTOM'
- layout.operator("view3d.viewnumpad", text="Front").type = 'FRONT'
- layout.operator("view3d.viewnumpad", text="Back").type = 'BACK'
- layout.operator("view3d.viewnumpad", text="Right").type = 'RIGHT'
- layout.operator("view3d.viewnumpad", text="Left").type = 'LEFT'
+ layout.operator("view3d.viewnumpad", text=_("Camera")).type = 'CAMERA'
+ layout.operator("view3d.viewnumpad", text=_("Top")).type = 'TOP'
+ layout.operator("view3d.viewnumpad", text=_("Bottom")).type = 'BOTTOM'
+ layout.operator("view3d.viewnumpad", text=_("Front")).type = 'FRONT'
+ layout.operator("view3d.viewnumpad", text=_("Back")).type = 'BACK'
+ layout.operator("view3d.viewnumpad", text=_("Right")).type = 'RIGHT'
+ layout.operator("view3d.viewnumpad", text=_("Left")).type = 'LEFT'
- layout.menu("VIEW3D_MT_view_cameras", text="Cameras")
+ layout.menu("VIEW3D_MT_view_cameras", text=_("Cameras"))
layout.separator()
@@ -307,22 +308,22 @@ class VIEW3D_MT_view(Menu):
layout.operator_context = 'INVOKE_REGION_WIN'
- layout.operator("view3d.clip_border", text="Clipping Border...")
- layout.operator("view3d.zoom_border", text="Zoom Border...")
+ layout.operator("view3d.clip_border", text=_("Clipping Border..."))
+ layout.operator("view3d.zoom_border", text=_("Zoom Border..."))
layout.separator()
- layout.operator("view3d.layers", text="Show All Layers").nr = 0
+ layout.operator("view3d.layers", text=_("Show All Layers")).nr = 0
layout.separator()
- layout.operator("view3d.localview", text="View Global/Local")
+ layout.operator("view3d.localview", text=_("View Global/Local"))
layout.operator("view3d.view_selected")
layout.operator("view3d.view_all")
layout.separator()
- layout.operator("screen.animation_play", text="Playback Animation")
+ layout.operator("screen.animation_play", text=_("Playback Animation"))
layout.separator()
@@ -345,9 +346,9 @@ class VIEW3D_MT_view_navigation(Menu):
layout.separator()
- layout.operator("view3d.zoom", text="Zoom In").delta = 1
- layout.operator("view3d.zoom", text="Zoom Out").delta = -1
- layout.operator("view3d.zoom_camera_1_to_1", text="Zoom Camera 1:1")
+ layout.operator("view3d.zoom", text=_("Zoom In")).delta = 1
+ layout.operator("view3d.zoom", text=_("Zoom Out")).delta = -1
+ layout.operator("view3d.zoom_camera_1_to_1", text=_("Zoom Camera 1:1"))
layout.separator()
@@ -364,8 +365,8 @@ class VIEW3D_MT_view_align(Menu):
layout.separator()
- layout.operator("view3d.view_all", text="Center Cursor and View All").center = True
- layout.operator("view3d.camera_to_view", text="Align Active Camera to View")
+ layout.operator("view3d.view_all", text=_("Center Cursor and View All")).center = True
+ layout.operator("view3d.camera_to_view", text=_("Align Active Camera to View"))
layout.operator("view3d.view_selected")
layout.operator("view3d.view_center_cursor")
@@ -376,22 +377,22 @@ class VIEW3D_MT_view_align_selected(Menu):
def draw(self, context):
layout = self.layout
- props = layout.operator("view3d.viewnumpad", text="Top")
+ props = layout.operator("view3d.viewnumpad", text=_("Top"))
props.align_active = True
props.type = 'TOP'
- props = layout.operator("view3d.viewnumpad", text="Bottom")
+ props = layout.operator("view3d.viewnumpad", text=_("Bottom"))
props.align_active = True
props.type = 'BOTTOM'
- props = layout.operator("view3d.viewnumpad", text="Front")
+ props = layout.operator("view3d.viewnumpad", text=_("Front"))
props.align_active = True
props.type = 'FRONT'
- props = layout.operator("view3d.viewnumpad", text="Back")
+ props = layout.operator("view3d.viewnumpad", text=_("Back"))
props.align_active = True
props.type = 'BACK'
- props = layout.operator("view3d.viewnumpad", text="Right")
+ props = layout.operator("view3d.viewnumpad", text=_("Right"))
props.align_active = True
props.type = 'RIGHT'
- props = layout.operator("view3d.viewnumpad", text="Left")
+ props = layout.operator("view3d.viewnumpad", text=_("Left"))
props.align_active = True
props.type = 'LEFT'
@@ -403,7 +404,7 @@ class VIEW3D_MT_view_cameras(Menu):
layout = self.layout
layout.operator("view3d.object_as_camera")
- layout.operator("view3d.viewnumpad", text="Active Camera").type = 'CAMERA'
+ layout.operator("view3d.viewnumpad", text=_("Active Camera")).type = 'CAMERA'
# ********** Select menus, suffix from context.mode **********
@@ -419,19 +420,19 @@ class VIEW3D_MT_select_object(Menu):
layout.separator()
- layout.operator("object.select_all", text="Select/Deselect All")
- layout.operator("object.select_inverse", text="Inverse")
- layout.operator("object.select_random", text="Random")
- layout.operator("object.select_mirror", text="Mirror")
- layout.operator("object.select_by_layer", text="Select All by Layer")
- layout.operator_menu_enum("object.select_by_type", "type", text="Select All by Type...")
- layout.operator("object.select_camera", text="Select Camera")
+ layout.operator("object.select_all", text=_("Select/Deselect All"))
+ layout.operator("object.select_inverse", text=_("Inverse"))
+ layout.operator("object.select_random", text=_("Random"))
+ layout.operator("object.select_mirror", text=_("Mirror"))
+ layout.operator("object.select_by_layer", text=_("Select All by Layer"))
+ layout.operator_menu_enum("object.select_by_type", "type", text=_("Select All by Type..."))
+ layout.operator("object.select_camera", text=_("Select Camera"))
layout.separator()
- layout.operator_menu_enum("object.select_grouped", "type", text="Grouped")
- layout.operator_menu_enum("object.select_linked", "type", text="Linked")
- layout.operator("object.select_pattern", text="Select Pattern...")
+ layout.operator_menu_enum("object.select_grouped", "type", text=_("Grouped"))
+ layout.operator_menu_enum("object.select_linked", "type", text=_("Linked"))
+ layout.operator("object.select_pattern", text=_("Select Pattern..."))
class VIEW3D_MT_select_pose(Menu):
@@ -444,31 +445,31 @@ class VIEW3D_MT_select_pose(Menu):
layout.separator()
- layout.operator("pose.select_all", text="Select/Deselect All")
- layout.operator("pose.select_inverse", text="Inverse")
- layout.operator("pose.select_flip_active", text="Flip Active")
- layout.operator("pose.select_constraint_target", text="Constraint Target")
- layout.operator("pose.select_linked", text="Linked")
+ layout.operator("pose.select_all", text=_("Select/Deselect All"))
+ layout.operator("pose.select_inverse", text=_("Inverse"))
+ layout.operator("pose.select_flip_active", text=_("Flip Active"))
+ layout.operator("pose.select_constraint_target", text=_("Constraint Target"))
+ layout.operator("pose.select_linked", text=_("Linked"))
layout.separator()
- layout.operator("pose.select_hierarchy", text="Parent").direction = 'PARENT'
- layout.operator("pose.select_hierarchy", text="Child").direction = 'CHILD'
+ layout.operator("pose.select_hierarchy", text=_("Parent")).direction = 'PARENT'
+ layout.operator("pose.select_hierarchy", text=_("Child")).direction = 'CHILD'
layout.separator()
- props = layout.operator("pose.select_hierarchy", text="Extend Parent")
+ props = layout.operator("pose.select_hierarchy", text=_("Extend Parent"))
props.extend = True
props.direction = 'PARENT'
- props = layout.operator("pose.select_hierarchy", text="Extend Child")
+ props = layout.operator("pose.select_hierarchy", text=_("Extend Child"))
props.extend = True
props.direction = 'CHILD'
layout.separator()
- layout.operator_menu_enum("pose.select_grouped", "type", text="Grouped")
- layout.operator("object.select_pattern", text="Select Pattern...")
+ layout.operator_menu_enum("pose.select_grouped", "type", text=_("Grouped"))
+ layout.operator("object.select_pattern", text=_("Select Pattern..."))
class VIEW3D_MT_select_particle(Menu):
@@ -481,7 +482,7 @@ class VIEW3D_MT_select_particle(Menu):
layout.separator()
- layout.operator("particle.select_all", text="Select/Deselect All")
+ layout.operator("particle.select_all", text=_("Select/Deselect All"))
layout.operator("particle.select_linked")
layout.operator("particle.select_inverse")
@@ -492,8 +493,8 @@ class VIEW3D_MT_select_particle(Menu):
layout.separator()
- layout.operator("particle.select_roots", text="Roots")
- layout.operator("particle.select_tips", text="Tips")
+ layout.operator("particle.select_roots", text=_("Roots"))
+ layout.operator("particle.select_tips", text=_("Tips"))
class VIEW3D_MT_select_edit_mesh(Menu):
@@ -507,40 +508,40 @@ class VIEW3D_MT_select_edit_mesh(Menu):
layout.separator()
- layout.operator("mesh.select_all", text="Select/Deselect All")
- layout.operator("mesh.select_inverse", text="Inverse")
+ layout.operator("mesh.select_all", text=_("Select/Deselect All"))
+ layout.operator("mesh.select_inverse", text=_("Inverse"))
layout.separator()
- layout.operator("mesh.select_random", text="Random")
- layout.operator("mesh.select_nth", text="Every N Number of Verts")
- layout.operator("mesh.edges_select_sharp", text="Sharp Edges")
- layout.operator("mesh.faces_select_linked_flat", text="Linked Flat Faces")
- layout.operator("mesh.faces_select_interior", text="Interior Faces")
- layout.operator("mesh.select_axis", text="Side of Active")
+ layout.operator("mesh.select_random", text=_("Random"))
+ layout.operator("mesh.select_nth", text=_("Every N Number of Verts"))
+ layout.operator("mesh.edges_select_sharp", text=_("Sharp Edges"))
+ layout.operator("mesh.faces_select_linked_flat", text=_("Linked Flat Faces"))
+ layout.operator("mesh.faces_select_interior", text=_("Interior Faces"))
+ layout.operator("mesh.select_axis", text=_("Side of Active"))
layout.separator()
- layout.operator("mesh.select_by_number_vertices", text="Triangles").type = 'TRIANGLES'
- layout.operator("mesh.select_by_number_vertices", text="Quads").type = 'QUADS'
+ layout.operator("mesh.select_by_number_vertices", text=_("Triangles")).type = 'TRIANGLES'
+ layout.operator("mesh.select_by_number_vertices", text=_("Quads")).type = 'QUADS'
if context.scene.tool_settings.mesh_select_mode[2] == False:
- layout.operator("mesh.select_non_manifold", text="Non Manifold")
- layout.operator("mesh.select_by_number_vertices", text="Loose Verts/Edges").type = 'OTHER'
- layout.operator("mesh.select_similar", text="Similar")
+ layout.operator("mesh.select_non_manifold", text=_("Non Manifold"))
+ layout.operator("mesh.select_by_number_vertices", text=_("Loose Verts/Edges")).type = 'OTHER'
+ layout.operator("mesh.select_similar", text=_("Similar"))
layout.separator()
- layout.operator("mesh.select_less", text="Less")
- layout.operator("mesh.select_more", text="More")
+ layout.operator("mesh.select_less", text=_("Less"))
+ layout.operator("mesh.select_more", text=_("More"))
layout.separator()
- layout.operator("mesh.select_mirror", text="Mirror")
+ layout.operator("mesh.select_mirror", text=_("Mirror"))
- layout.operator("mesh.select_linked", text="Linked")
- layout.operator("mesh.select_vertex_path", text="Vertex Path")
- layout.operator("mesh.loop_multi_select", text="Edge Loop")
- layout.operator("mesh.loop_multi_select", text="Edge Ring").ring = True
+ layout.operator("mesh.select_linked", text=_("Linked"))
+ layout.operator("mesh.select_vertex_path", text=_("Vertex Path"))
+ layout.operator("mesh.loop_multi_select", text=_("Edge Loop"))
+ layout.operator("mesh.loop_multi_select", text=_("Edge Ring")).ring = True
layout.separator()
@@ -559,10 +560,10 @@ class VIEW3D_MT_select_edit_curve(Menu):
layout.separator()
- layout.operator("curve.select_all", text="Select/Deselect All")
+ layout.operator("curve.select_all", text=_("Select/Deselect All"))
layout.operator("curve.select_inverse")
layout.operator("curve.select_random")
- layout.operator("curve.select_nth", text="Every Nth Number of Points")
+ layout.operator("curve.select_nth", text=_("Every Nth Number of Points"))
layout.separator()
@@ -588,10 +589,10 @@ class VIEW3D_MT_select_edit_surface(Menu):
layout.separator()
- layout.operator("curve.select_all", text="Select/Deselect All")
+ layout.operator("curve.select_all", text=_("Select/Deselect All"))
layout.operator("curve.select_inverse")
layout.operator("curve.select_random")
- layout.operator("curve.select_nth", text="Every Nth Number of Points")
+ layout.operator("curve.select_nth", text=_("Every Nth Number of Points"))
layout.separator()
@@ -631,7 +632,7 @@ class VIEW3D_MT_select_edit_lattice(Menu):
layout.separator()
- layout.operator("lattice.select_all", text="Select/Deselect All")
+ layout.operator("lattice.select_all", text=_("Select/Deselect All"))
class VIEW3D_MT_select_edit_armature(Menu):
@@ -644,25 +645,25 @@ class VIEW3D_MT_select_edit_armature(Menu):
layout.separator()
- layout.operator("armature.select_all", text="Select/Deselect All")
- layout.operator("armature.select_inverse", text="Inverse")
+ layout.operator("armature.select_all", text=_("Select/Deselect All"))
+ layout.operator("armature.select_inverse", text=_("Inverse"))
layout.separator()
- layout.operator("armature.select_hierarchy", text="Parent").direction = 'PARENT'
- layout.operator("armature.select_hierarchy", text="Child").direction = 'CHILD'
+ layout.operator("armature.select_hierarchy", text=_("Parent")).direction = 'PARENT'
+ layout.operator("armature.select_hierarchy", text=_("Child")).direction = 'CHILD'
layout.separator()
- props = layout.operator("armature.select_hierarchy", text="Extend Parent")
+ props = layout.operator("armature.select_hierarchy", text=_("Extend Parent"))
props.extend = True
props.direction = 'PARENT'
- props = layout.operator("armature.select_hierarchy", text="Extend Child")
+ props = layout.operator("armature.select_hierarchy", text=_("Extend Child"))
props.extend = True
props.direction = 'CHILD'
- layout.operator("object.select_pattern", text="Select Pattern...")
+ layout.operator("object.select_pattern", text=_("Select Pattern..."))
class VIEW3D_MT_select_face(Menu): # XXX no matching enum
@@ -705,11 +706,11 @@ class VIEW3D_MT_object(Menu):
layout.operator("object.duplicate_move")
layout.operator("object.duplicate_move_linked")
- layout.operator("object.delete", text="Delete...")
- layout.operator("object.proxy_make", text="Make Proxy...")
- layout.menu("VIEW3D_MT_make_links", text="Make Links...")
+ layout.operator("object.delete", text=_("Delete..."))
+ layout.operator("object.proxy_make", text=_("Make Proxy..."))
+ layout.menu("VIEW3D_MT_make_links", text=_("Make Links..."))
layout.operator("object.make_dupli_face")
- layout.operator_menu_enum("object.make_local", "type", text="Make Local...")
+ layout.operator_menu_enum("object.make_local", "type", text=_("Make Local..."))
layout.menu("VIEW3D_MT_make_single_user")
layout.separator()
@@ -730,7 +731,7 @@ class VIEW3D_MT_object(Menu):
layout.separator()
- layout.operator("object.move_to_layer", text="Move to Layer...")
+ layout.operator("object.move_to_layer", text=_("Move to Layer..."))
layout.menu("VIEW3D_MT_object_showhide")
layout.operator_menu_enum("object.convert", "target")
@@ -742,9 +743,9 @@ class VIEW3D_MT_object_animation(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("anim.keyframe_insert_menu", text="Insert Keyframe...")
- layout.operator("anim.keyframe_delete_v3d", text="Delete Keyframe...")
- layout.operator("anim.keying_set_active_set", text="Change Keying Set...")
+ layout.operator("anim.keyframe_insert_menu", text=_("Insert Keyframe..."))
+ layout.operator("anim.keyframe_delete_v3d", text=_("Delete Keyframe..."))
+ layout.operator("anim.keying_set_active_set", text=_("Change Keying Set..."))
class VIEW3D_MT_object_clear(Menu):
@@ -753,10 +754,10 @@ class VIEW3D_MT_object_clear(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("object.location_clear", text="Location")
- layout.operator("object.rotation_clear", text="Rotation")
- layout.operator("object.scale_clear", text="Scale")
- layout.operator("object.origin_clear", text="Origin")
+ layout.operator("object.location_clear", text=_("Location"))
+ layout.operator("object.rotation_clear", text=_("Rotation"))
+ layout.operator("object.scale_clear", text=_("Scale"))
+ layout.operator("object.origin_clear", text=_("Origin"))
class VIEW3D_MT_object_specials(Menu):
@@ -775,19 +776,19 @@ class VIEW3D_MT_object_specials(Menu):
layout.operator_context = 'INVOKE_REGION_WIN'
if obj.data.type == 'PERSP':
- props = layout.operator("wm.context_modal_mouse", text="Camera Lens Angle")
+ props = layout.operator("wm.context_modal_mouse", text=_("Camera Lens Angle"))
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.lens"
props.input_scale = 0.1
else:
- props = layout.operator("wm.context_modal_mouse", text="Camera Lens Scale")
+ props = layout.operator("wm.context_modal_mouse", text=_("Camera Lens Scale"))
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.ortho_scale"
props.input_scale = 0.01
if not obj.data.dof_object:
#layout.label(text="Test Has DOF obj");
- props = layout.operator("wm.context_modal_mouse", text="DOF Distance")
+ props = layout.operator("wm.context_modal_mouse", text=_("DOF Distance"))
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.dof_distance"
props.input_scale = 0.02
@@ -795,12 +796,12 @@ class VIEW3D_MT_object_specials(Menu):
if obj.type in {'CURVE', 'FONT'}:
layout.operator_context = 'INVOKE_REGION_WIN'
- props = layout.operator("wm.context_modal_mouse", text="Extrude Size")
+ props = layout.operator("wm.context_modal_mouse", text=_("Extrude Size"))
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.extrude"
props.input_scale = 0.01
- props = layout.operator("wm.context_modal_mouse", text="Width Size")
+ props = layout.operator("wm.context_modal_mouse", text=_("Width Size"))
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.offset"
props.input_scale = 0.01
@@ -808,7 +809,7 @@ class VIEW3D_MT_object_specials(Menu):
if obj.type == 'EMPTY':
layout.operator_context = 'INVOKE_REGION_WIN'
- props = layout.operator("wm.context_modal_mouse", text="Empty Draw Size")
+ props = layout.operator("wm.context_modal_mouse", text=_("Empty Draw Size"))
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "empty_draw_size"
props.input_scale = 0.01
@@ -816,34 +817,34 @@ class VIEW3D_MT_object_specials(Menu):
if obj.type == 'LAMP':
layout.operator_context = 'INVOKE_REGION_WIN'
- props = layout.operator("wm.context_modal_mouse", text="Energy")
+ props = layout.operator("wm.context_modal_mouse", text=_("Energy"))
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.energy"
if obj.data.type in {'SPOT', 'AREA', 'POINT'}:
- props = layout.operator("wm.context_modal_mouse", text="Falloff Distance")
+ props = layout.operator("wm.context_modal_mouse", text=_("Falloff Distance"))
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.distance"
props.input_scale = 0.1
if obj.data.type == 'SPOT':
layout.separator()
- props = layout.operator("wm.context_modal_mouse", text="Spot Size")
+ props = layout.operator("wm.context_modal_mouse", text=_("Spot Size"))
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.spot_size"
props.input_scale = 0.01
- props = layout.operator("wm.context_modal_mouse", text="Spot Blend")
+ props = layout.operator("wm.context_modal_mouse", text=_("Spot Blend"))
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.spot_blend"
props.input_scale = -0.01
- props = layout.operator("wm.context_modal_mouse", text="Clip Start")
+ props = layout.operator("wm.context_modal_mouse", text=_("Clip Start"))
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.shadow_buffer_clip_start"
props.input_scale = 0.05
- props = layout.operator("wm.context_modal_mouse", text="Clip End")
+ props = layout.operator("wm.context_modal_mouse", text=_("Clip End"))
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.shadow_buffer_clip_end"
props.input_scale = 0.05
@@ -860,16 +861,16 @@ class VIEW3D_MT_object_apply(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("object.transform_apply", text="Location").location = True
- layout.operator("object.transform_apply", text="Rotation").rotation = True
- layout.operator("object.transform_apply", text="Scale").scale = True
- props = layout.operator("object.transform_apply", text="Rotation & Scale")
+ layout.operator("object.transform_apply", text=_("Location")).location = True
+ layout.operator("object.transform_apply", text=_("Rotation")).rotation = True
+ layout.operator("object.transform_apply", text=_("Scale")).scale = True
+ props = layout.operator("object.transform_apply", text=_("Rotation & Scale"))
props.scale = True
props.rotation = True
layout.separator()
- layout.operator("object.visual_transform_apply", text="Visual Transform")
+ layout.operator("object.visual_transform_apply", text=_("Visual Transform"))
layout.operator("object.duplicates_make_real")
@@ -879,8 +880,8 @@ class VIEW3D_MT_object_parent(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("object.parent_set", text="Set")
- layout.operator("object.parent_clear", text="Clear")
+ layout.operator("object.parent_set", text=_("Set"))
+ layout.operator("object.parent_clear", text=_("Clear"))
class VIEW3D_MT_object_track(Menu):
@@ -889,8 +890,8 @@ class VIEW3D_MT_object_track(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("object.track_set", text="Set")
- layout.operator("object.track_clear", text="Clear")
+ layout.operator("object.track_set", text=_("Set"))
+ layout.operator("object.track_clear", text=_("Clear"))
class VIEW3D_MT_object_group(Menu):
@@ -925,9 +926,9 @@ class VIEW3D_MT_object_showhide(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("object.hide_view_clear", text="Show Hidden")
- layout.operator("object.hide_view_set", text="Hide Selected")
- layout.operator("object.hide_view_set", text="Hide Unselected").unselected = True
+ layout.operator("object.hide_view_clear", text=_("Show Hidden"))
+ layout.operator("object.hide_view_set", text=_("Hide Selected"))
+ layout.operator("object.hide_view_set", text=_("Hide Unselected")).unselected = True
class VIEW3D_MT_make_single_user(Menu):
@@ -936,19 +937,19 @@ class VIEW3D_MT_make_single_user(Menu):
def draw(self, context):
layout = self.layout
- props = layout.operator("object.make_single_user", text="Object")
+ props = layout.operator("object.make_single_user", text=_("Object"))
props.object = True
- props = layout.operator("object.make_single_user", text="Object & Data")
+ props = layout.operator("object.make_single_user", text=_("Object & Data"))
props.object = props.obdata = True
- props = layout.operator("object.make_single_user", text="Object & Data & Materials+Tex")
+ props = layout.operator("object.make_single_user", text=_("Object & Data & Materials+Tex"))
props.object = props.obdata = props.material = props.texture = True
- props = layout.operator("object.make_single_user", text="Materials+Tex")
+ props = layout.operator("object.make_single_user", text=_("Materials+Tex"))
props.material = props.texture = True
- props = layout.operator("object.make_single_user", text="Object Animation")
+ props = layout.operator("object.make_single_user", text=_("Object Animation"))
props.animation = True
@@ -960,11 +961,11 @@ class VIEW3D_MT_make_links(Menu):
if(len(bpy.data.scenes) > 10):
layout.operator_context = 'INVOKE_DEFAULT'
- layout.operator("object.make_links_scene", text="Objects to Scene...", icon='OUTLINER_OB_EMPTY')
- layout.operator("object.make_links_scene", text="Markers to Scene...", icon='OUTLINER_OB_EMPTY')
+ layout.operator("object.make_links_scene", text=_("Objects to Scene..."), icon='OUTLINER_OB_EMPTY')
+ layout.operator("object.make_links_scene", text=_("Markers to Scene..."), icon='OUTLINER_OB_EMPTY')
else:
- layout.operator_menu_enum("object.make_links_scene", "scene", text="Objects to Scene...")
- layout.operator_menu_enum("marker.make_links_scene", "scene", text="Markers to Scene...")
+ layout.operator_menu_enum("object.make_links_scene", "scene", text=_("Objects to Scene..."))
+ layout.operator_menu_enum("marker.make_links_scene", "scene", text=_("Markers to Scene..."))
layout.operator_enum("object.make_links_data", "type") # inline
@@ -975,13 +976,13 @@ class VIEW3D_MT_object_game(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("object.logic_bricks_copy", text="Copy Logic Bricks")
+ layout.operator("object.logic_bricks_copy", text=_("Copy Logic Bricks"))
layout.separator()
- layout.operator("object.game_property_copy", text="Replace Properties").operation = 'REPLACE'
- layout.operator("object.game_property_copy", text="Merge Properties").operation = 'MERGE'
- layout.operator_menu_enum("object.game_property_copy", "property", text="Copy Properties...")
+ layout.operator("object.game_property_copy", text=_("Replace Properties")).operation = 'REPLACE'
+ layout.operator("object.game_property_copy", text=_("Merge Properties")).operation = 'MERGE'
+ layout.operator_menu_enum("object.game_property_copy", "property", text=_("Copy Properties..."))
layout.separator()
@@ -1031,21 +1032,21 @@ class VIEW3D_MT_vertex_group(Menu):
def draw(self, context):
layout = self.layout
layout.operator_context = 'EXEC_AREA'
- layout.operator("object.vertex_group_assign", text="Assign to New Group").new = True
+ layout.operator("object.vertex_group_assign", text=_("Assign to New Group")).new = True
ob = context.active_object
if ob.mode == 'EDIT':
if ob.vertex_groups.active:
layout.separator()
- layout.operator("object.vertex_group_assign", text="Assign to Active Group")
- layout.operator("object.vertex_group_remove_from", text="Remove from Active Group")
- layout.operator("object.vertex_group_remove_from", text="Remove from All").all = True
+ layout.operator("object.vertex_group_assign", text=_("Assign to Active Group"))
+ layout.operator("object.vertex_group_remove_from", text=_("Remove from Active Group"))
+ layout.operator("object.vertex_group_remove_from", text=_("Remove from All")).all = True
layout.separator()
if ob.vertex_groups.active:
- layout.operator_menu_enum("object.vertex_group_set_active", "group", text="Set Active Group")
- layout.operator("object.vertex_group_remove", text="Remove Active Group")
- layout.operator("object.vertex_group_remove", text="Remove All Groups").all = True
+ layout.operator_menu_enum("object.vertex_group_set_active", "group", text=_("Set Active Group"))
+ layout.operator("object.vertex_group_remove", text=_("Remove Active Group"))
+ layout.operator("object.vertex_group_remove", text=_("Remove All Groups")).all = True
# ********** Weight paint menu **********
@@ -1062,16 +1063,16 @@ class VIEW3D_MT_paint_weight(Menu):
layout.separator()
- layout.operator("paint.weight_from_bones", text="Assign Automatic From Bones").type = 'AUTOMATIC'
- layout.operator("paint.weight_from_bones", text="Assign From Bone Envelopes").type = 'ENVELOPES'
+ layout.operator("paint.weight_from_bones", text=_("Assign Automatic From Bones")).type = 'AUTOMATIC'
+ layout.operator("paint.weight_from_bones", text=_("Assign From Bone Envelopes")).type = 'ENVELOPES'
layout.separator()
- layout.operator("object.vertex_group_normalize_all", text="Normalize All")
- layout.operator("object.vertex_group_normalize", text="Normalize")
- layout.operator("object.vertex_group_invert", text="Invert")
- layout.operator("object.vertex_group_clean", text="Clean")
- layout.operator("object.vertex_group_levels", text="Levels")
+ layout.operator("object.vertex_group_normalize_all", text=_("Normalize All"))
+ layout.operator("object.vertex_group_normalize", text=_("Normalize"))
+ layout.operator("object.vertex_group_invert", text=_("Invert"))
+ layout.operator("object.vertex_group_clean", text=_("Clean"))
+ layout.operator("object.vertex_group_levels", text=_("Levels"))
layout.operator("object.vertex_group_fix", text="Fix Deforms")
layout.separator()
@@ -1121,12 +1122,12 @@ class VIEW3D_MT_sculpt(Menu):
layout.operator("sculpt.set_persistent_base")
layout.separator()
- layout.prop(sculpt, "use_threaded", text="Threaded Sculpt")
+ layout.prop(sculpt, "use_threaded", text=_("Threaded Sculpt"))
layout.prop(sculpt, "show_brush")
# TODO, make availabel from paint menu!
- layout.prop(tool_settings, "sculpt_paint_use_unified_size", text="Unify Size")
- layout.prop(tool_settings, "sculpt_paint_use_unified_strength", text="Unify Strength")
+ layout.prop(tool_settings, "sculpt_paint_use_unified_size", text=_("Unify Size"))
+ layout.prop(tool_settings, "sculpt_paint_use_unified_strength", text=_("Unify Strength"))
# ********** Particle menu **********
@@ -1219,7 +1220,7 @@ class VIEW3D_MT_pose(Menu):
layout.operator("pose.copy")
layout.operator("pose.paste")
- layout.operator("pose.paste", text="Paste X-Flipped Pose").flipped = True
+ layout.operator("pose.paste", text=_("Paste X-Flipped Pose")).flipped = True
layout.separator()
@@ -1236,9 +1237,9 @@ class VIEW3D_MT_pose(Menu):
layout.separator()
layout.operator_context = 'EXEC_AREA'
- layout.operator("pose.autoside_names", text="AutoName Left/Right").axis = 'XAXIS'
- layout.operator("pose.autoside_names", text="AutoName Front/Back").axis = 'YAXIS'
- layout.operator("pose.autoside_names", text="AutoName Top/Bottom").axis = 'ZAXIS'
+ layout.operator("pose.autoside_names", text=_("AutoName Left/Right")).axis = 'XAXIS'
+ layout.operator("pose.autoside_names", text=_("AutoName Front/Back")).axis = 'YAXIS'
+ layout.operator("pose.autoside_names", text=_("AutoName Top/Bottom")).axis = 'ZAXIS'
layout.operator("pose.flip_names")
@@ -1247,13 +1248,13 @@ class VIEW3D_MT_pose(Menu):
layout.separator()
layout.operator_context = 'INVOKE_AREA'
- layout.operator("pose.armature_layers", text="Change Armature Layers...")
- layout.operator("pose.bone_layers", text="Change Bone Layers...")
+ layout.operator("pose.armature_layers", text=_("Change Armature Layers..."))
+ layout.operator("pose.bone_layers", text=_("Change Bone Layers..."))
layout.separator()
layout.menu("VIEW3D_MT_pose_showhide")
- layout.menu("VIEW3D_MT_bone_options_toggle", text="Bone Settings")
+ layout.menu("VIEW3D_MT_bone_options_toggle", text=_("Bone Settings"))
class VIEW3D_MT_pose_transform(Menu):
@@ -1262,17 +1263,17 @@ class VIEW3D_MT_pose_transform(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("pose.transforms_clear", text="All")
+ layout.operator("pose.transforms_clear", text=_("All"))
layout.separator()
- layout.operator("pose.loc_clear", text="Location")
- layout.operator("pose.rot_clear", text="Rotation")
- layout.operator("pose.scale_clear", text="Scale")
+ layout.operator("pose.loc_clear", text=_("Location"))
+ layout.operator("pose.rot_clear", text=_("Rotation"))
+ layout.operator("pose.scale_clear", text=_("Scale"))
layout.separator()
- layout.operator("pose.user_transforms_clear", text="Reset unkeyed")
+ layout.operator("pose.user_transforms_clear", text=_("Reset unkeyed"))
class VIEW3D_MT_pose_slide(Menu):
@@ -1296,12 +1297,12 @@ class VIEW3D_MT_pose_propagate(Menu):
layout.separator()
- layout.operator("pose.propagate", text="To Next Keyframe").mode = 'NEXT_KEY'
- layout.operator("pose.propagate", text="To Last Keyframe (Make Cyclic)").mode = 'LAST_KEY'
+ layout.operator("pose.propagate", text=_("To Next Keyframe")).mode = 'NEXT_KEY'
+ layout.operator("pose.propagate", text=_("To Last Keyframe (Make Cyclic)")).mode = 'LAST_KEY'
layout.separator()
- layout.operator("pose.propagate", text="On Selected Markers").mode = 'SELECTED_MARKERS'
+ layout.operator("pose.propagate", text=_("On Selected Markers")).mode = 'SELECTED_MARKERS'
class VIEW3D_MT_pose_library(Menu):
@@ -1310,13 +1311,13 @@ class VIEW3D_MT_pose_library(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("poselib.browse_interactive", text="Browse Poses...")
+ layout.operator("poselib.browse_interactive", text=_("Browse Poses..."))
layout.separator()
- layout.operator("poselib.pose_add", text="Add Pose...")
- layout.operator("poselib.pose_rename", text="Rename Pose...")
- layout.operator("poselib.pose_remove", text="Remove Pose...")
+ layout.operator("poselib.pose_add", text=_("Add Pose..."))
+ layout.operator("poselib.pose_rename", text=_("Rename Pose..."))
+ layout.operator("poselib.pose_remove", text=_("Remove Pose..."))
class VIEW3D_MT_pose_motion(Menu):
@@ -1325,8 +1326,8 @@ class VIEW3D_MT_pose_motion(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("pose.paths_calculate", text="Calculate")
- layout.operator("pose.paths_clear", text="Clear")
+ layout.operator("pose.paths_calculate", text=_("Calculate"))
+ layout.operator("pose.paths_clear", text=_("Clear"))
class VIEW3D_MT_pose_group(Menu):
@@ -1359,7 +1360,7 @@ class VIEW3D_MT_pose_constraints(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("pose.constraint_add_with_targets", text="Add (With Targets)...")
+ layout.operator("pose.constraint_add_with_targets", text=_("Add (With Targets)..."))
layout.operator("pose.constraints_copy")
layout.operator("pose.constraints_clear")
@@ -1369,7 +1370,7 @@ class VIEW3D_MT_pose_showhide(ShowHideMenu, Menu):
class VIEW3D_MT_pose_apply(Menu):
- bl_label = "Apply"
+ bl_label = _("Apply")
def draw(self, context):
layout = self.layout
@@ -1444,14 +1445,14 @@ class VIEW3D_MT_edit_mesh(Menu):
layout.separator()
- layout.menu("VIEW3D_MT_uv_map", text="UV Unwrap...")
+ layout.menu("VIEW3D_MT_uv_map", text=_("UV Unwrap..."))
layout.separator()
- layout.operator("view3d.edit_mesh_extrude_move_normal", text="Extrude Region")
- layout.operator("view3d.edit_mesh_extrude_individual_move", text="Extrude Individual")
+ layout.operator("view3d.edit_mesh_extrude_move_normal", text=_("Extrude Region"))
+ layout.operator("view3d.edit_mesh_extrude_individual_move", text=_("Extrude Individual"))
layout.operator("mesh.duplicate_move")
- layout.operator("mesh.delete", text="Delete...")
+ layout.operator("mesh.delete", text=_("Delete..."))
layout.separator()
@@ -1479,15 +1480,15 @@ class VIEW3D_MT_edit_mesh_specials(Menu):
layout.operator_context = 'INVOKE_REGION_WIN'
- layout.operator("mesh.subdivide", text="Subdivide")
- layout.operator("mesh.subdivide", text="Subdivide Smooth").smoothness = 1.0
- layout.operator("mesh.merge", text="Merge...")
+ layout.operator("mesh.subdivide", text=_("Subdivide"))
+ layout.operator("mesh.subdivide", text=_("Subdivide Smooth")).smoothness = 1.0
+ layout.operator("mesh.merge", text=_("Merge..."))
layout.operator("mesh.remove_doubles")
- layout.operator("mesh.hide", text="Hide")
- layout.operator("mesh.reveal", text="Reveal")
+ layout.operator("mesh.hide", text=_("Hide"))
+ layout.operator("mesh.reveal", text=_("Reveal"))
layout.operator("mesh.select_inverse")
layout.operator("mesh.flip_normals")
- layout.operator("mesh.vertices_smooth", text="Smooth")
+ layout.operator("mesh.vertices_smooth", text=_("Smooth"))
# layout.operator("mesh.bevel", text="Bevel")
layout.operator("mesh.faces_shade_smooth")
layout.operator("mesh.faces_shade_flat")
@@ -1504,15 +1505,15 @@ class VIEW3D_MT_edit_mesh_select_mode(Menu):
layout.operator_context = 'INVOKE_REGION_WIN'
- prop = layout.operator("wm.context_set_value", text="Vertex", icon='VERTEXSEL')
+ prop = layout.operator("wm.context_set_value", text=_("Vertex"), icon='VERTEXSEL')
prop.value = "(True, False, False)"
prop.data_path = "tool_settings.mesh_select_mode"
- prop = layout.operator("wm.context_set_value", text="Edge", icon='EDGESEL')
+ prop = layout.operator("wm.context_set_value", text=_("Edge"), icon='EDGESEL')
prop.value = "(False, True, False)"
prop.data_path = "tool_settings.mesh_select_mode"
- prop = layout.operator("wm.context_set_value", text="Face", icon='FACESEL')
+ prop = layout.operator("wm.context_set_value", text=_("Face"), icon='FACESEL')
prop.value = "(False, False, True)"
prop.data_path = "tool_settings.mesh_select_mode"
@@ -1521,10 +1522,10 @@ class VIEW3D_MT_edit_mesh_extrude(Menu):
bl_label = "Extrude"
_extrude_funcs = { \
- "VERT": lambda layout: layout.operator("mesh.extrude_vertices_move", text="Vertices Only"),
- "EDGE": lambda layout: layout.operator("mesh.extrude_edges_move", text="Edges Only"),
- "FACE": lambda layout: layout.operator("mesh.extrude_faces_move", text="Individual Faces"),
- "REGION": lambda layout: layout.operator("view3d.edit_mesh_extrude_move_normal", text="Region"),
+ "VERT": lambda layout: layout.operator("mesh.extrude_vertices_move", text=_("Vertices Only")),
+ "EDGE": lambda layout: layout.operator("mesh.extrude_edges_move", text=_("Edges Only")),
+ "FACE": lambda layout: layout.operator("mesh.extrude_faces_move", text=_("Individual Faces")),
+ "REGION": lambda layout: layout.operator("view3d.edit_mesh_extrude_move_normal", text=_("Region")),
}
@staticmethod
@@ -1651,28 +1652,28 @@ class VIEW3D_MT_edit_mesh_edges(Menu):
layout.separator()
layout.operator("mesh.mark_seam")
- layout.operator("mesh.mark_seam", text="Clear Seam").clear = True
+ layout.operator("mesh.mark_seam", text=_("Clear Seam")).clear = True
layout.separator()
layout.operator("mesh.mark_sharp")
- layout.operator("mesh.mark_sharp", text="Clear Sharp").clear = True
+ layout.operator("mesh.mark_sharp", text=_("Clear Sharp")).clear = True
layout.separator()
- layout.operator("mesh.edge_rotate", text="Rotate Edge CW").direction = 'CW'
- layout.operator("mesh.edge_rotate", text="Rotate Edge CCW").direction = 'CCW'
+ layout.operator("mesh.edge_rotate", text=_("Rotate Edge CW")).direction = 'CW'
+ layout.operator("mesh.edge_rotate", text=_("Rotate Edge CCW")).direction = 'CCW'
layout.separator()
layout.operator("TRANSFORM_OT_edge_slide")
layout.operator("TRANSFORM_OT_edge_crease")
- layout.operator("mesh.loop_multi_select", text="Edge Loop")
+ layout.operator("mesh.loop_multi_select", text=_("Edge Loop"))
# uiItemO(layout, "Loopcut", 0, "mesh.loop_cut"); // CutEdgeloop(em, 1);
# uiItemO(layout, "Edge Slide", 0, "mesh.edge_slide"); // EdgeSlide(em, 0,0.0);
- layout.operator("mesh.loop_multi_select", text="Edge Ring").ring = True
+ layout.operator("mesh.loop_multi_select", text=_("Edge Ring")).ring = True
layout.operator("mesh.loop_to_region")
layout.operator("mesh.region_to_loop")
@@ -1716,7 +1717,7 @@ class VIEW3D_MT_edit_mesh_faces(Menu):
# uiItemO(layout, NULL, 0, "mesh.face_mode"); // mesh_set_face_flags(em, 1);
# uiItemBooleanO(layout, NULL, 0, "mesh.face_mode", "clear", 1); // mesh_set_face_flags(em, 0);
- layout.operator("mesh.edge_rotate", text="Rotate Edge CW").direction = 'CW'
+ layout.operator("mesh.edge_rotate", text=_("Rotate Edge CW")).direction = 'CW'
layout.separator()
@@ -1732,8 +1733,8 @@ class VIEW3D_MT_edit_mesh_normals(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("mesh.normals_make_consistent", text="Recalculate Outside")
- layout.operator("mesh.normals_make_consistent", text="Recalculate Inside").inside = True
+ layout.operator("mesh.normals_make_consistent", text=_("Recalculate Outside"))
+ layout.operator("mesh.normals_make_consistent", text=_("Recalculate Inside")).inside = True
layout.separator()
@@ -1763,7 +1764,7 @@ def draw_curve(self, context):
layout.operator("curve.separate")
layout.operator("curve.make_segment")
layout.operator("curve.cyclic_toggle")
- layout.operator("curve.delete", text="Delete...")
+ layout.operator("curve.delete", text=_("Delete..."))
layout.separator()
@@ -1795,7 +1796,7 @@ class VIEW3D_MT_edit_curve_ctrlpoints(Menu):
edit_object = context.edit_object
if edit_object.type == 'CURVE':
- layout.operator("transform.transform", text="Tilt").mode = 'TILT'
+ layout.operator("transform.transform", text=_("Tilt")).mode = 'TILT'
layout.operator("curve.tilt_clear")
layout.operator("curve.separate")
@@ -1856,10 +1857,10 @@ class VIEW3D_MT_edit_font(Menu):
layout.separator()
- layout.operator("font.style_toggle", text="Toggle Bold").style = 'BOLD'
- layout.operator("font.style_toggle", text="Toggle Italic").style = 'ITALIC'
- layout.operator("font.style_toggle", text="Toggle Underline").style = 'UNDERLINE'
- layout.operator("font.style_toggle", text="Toggle Small Caps").style = 'SMALL_CAPS'
+ layout.operator("font.style_toggle", text=_("Toggle Bold")).style = 'BOLD'
+ layout.operator("font.style_toggle", text=_("Toggle Italic")).style = 'ITALIC'
+ layout.operator("font.style_toggle", text=_("Toggle Underline")).style = 'UNDERLINE'
+ layout.operator("font.style_toggle", text=_("Toggle Small Caps")).style = 'SMALL_CAPS'
class VIEW3D_MT_edit_text_chars(Menu):
@@ -1916,7 +1917,7 @@ class VIEW3D_MT_edit_meta(Menu):
layout.separator()
- layout.operator("mball.delete_metaelems", text="Delete...")
+ layout.operator("mball.delete_metaelems", text=_("Delete..."))
layout.operator("mball.duplicate_metaelems")
layout.separator()
@@ -1935,9 +1936,9 @@ class VIEW3D_MT_edit_meta_showhide(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("mball.reveal_metaelems", text="Show Hidden")
- layout.operator("mball.hide_metaelems", text="Hide Selected")
- layout.operator("mball.hide_metaelems", text="Hide Unselected").unselected = True
+ layout.operator("mball.reveal_metaelems", text=_("Show Hidden"))
+ layout.operator("mball.hide_metaelems", text=_("Hide Selected"))
+ layout.operator("mball.hide_metaelems", text=_("Hide Unselected")).unselected = True
class VIEW3D_MT_edit_lattice(Menu):
@@ -1991,15 +1992,15 @@ class VIEW3D_MT_edit_armature(Menu):
layout.separator()
- layout.operator("armature.subdivide", text="Subdivide")
- layout.operator("armature.switch_direction", text="Switch Direction")
+ layout.operator("armature.subdivide", text=_("Subdivide"))
+ layout.operator("armature.switch_direction", text=_("Switch Direction"))
layout.separator()
layout.operator_context = 'EXEC_AREA'
- layout.operator("armature.autoside_names", text="AutoName Left/Right").type = 'XAXIS'
- layout.operator("armature.autoside_names", text="AutoName Front/Back").type = 'YAXIS'
- layout.operator("armature.autoside_names", text="AutoName Top/Bottom").type = 'ZAXIS'
+ layout.operator("armature.autoside_names", text=_("AutoName Left/Right")).type = 'XAXIS'
+ layout.operator("armature.autoside_names", text=_("AutoName Front/Back")).type = 'YAXIS'
+ layout.operator("armature.autoside_names", text=_("AutoName Top/Bottom")).type = 'ZAXIS'
layout.operator("armature.flip_names")
layout.separator()
@@ -2014,7 +2015,7 @@ class VIEW3D_MT_edit_armature(Menu):
layout.separator()
- layout.menu("VIEW3D_MT_bone_options_toggle", text="Bone Settings")
+ layout.menu("VIEW3D_MT_bone_options_toggle", text=_("Bone Settings"))
class VIEW3D_MT_armature_specials(Menu):
@@ -2025,16 +2026,16 @@ class VIEW3D_MT_armature_specials(Menu):
layout.operator_context = 'INVOKE_REGION_WIN'
- layout.operator("armature.subdivide", text="Subdivide")
- layout.operator("armature.switch_direction", text="Switch Direction")
+ layout.operator("armature.subdivide", text=_("Subdivide"))
+ layout.operator("armature.switch_direction", text=_("Switch Direction"))
layout.separator()
layout.operator_context = 'EXEC_REGION_WIN'
- layout.operator("armature.autoside_names", text="AutoName Left/Right").type = 'XAXIS'
- layout.operator("armature.autoside_names", text="AutoName Front/Back").type = 'YAXIS'
- layout.operator("armature.autoside_names", text="AutoName Top/Bottom").type = 'ZAXIS'
- layout.operator("armature.flip_names", text="Flip Names")
+ layout.operator("armature.autoside_names", text=_("AutoName Left/Right")).type = 'XAXIS'
+ layout.operator("armature.autoside_names", text=_("AutoName Front/Back")).type = 'YAXIS'
+ layout.operator("armature.autoside_names", text=_("AutoName Top/Bottom")).type = 'ZAXIS'
+ layout.operator("armature.flip_names", text=_("Flip Names"))
class VIEW3D_MT_edit_armature_parent(Menu):
@@ -2043,8 +2044,8 @@ class VIEW3D_MT_edit_armature_parent(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("armature.parent_set", text="Make")
- layout.operator("armature.parent_clear", text="Clear")
+ layout.operator("armature.parent_set", text=_("Make"))
+ layout.operator("armature.parent_clear", text=_("Clear"))
class VIEW3D_MT_edit_armature_roll(Menu):
@@ -2057,7 +2058,7 @@ class VIEW3D_MT_edit_armature_roll(Menu):
layout.separator()
- layout.operator("transform.transform", text="Set Roll").mode = 'BONE_ROLL'
+ layout.operator("transform.transform", text=_("Set Roll")).mode = 'BONE_ROLL'
# ********** Panel **********
@@ -2080,26 +2081,26 @@ class VIEW3D_PT_view3d_properties(Panel):
col = layout.column()
col.active = view.region_3d.view_perspective != 'CAMERA'
col.prop(view, "lens")
- col.label(text="Lock to Object:")
+ col.label(text=_("Lock to Object:"))
col.prop(view, "lock_object", text="")
lock_object = view.lock_object
if lock_object:
if lock_object.type == 'ARMATURE':
col.prop_search(view, "lock_bone", lock_object.data, "edit_bones" if lock_object.mode == 'EDIT' else "bones", text="")
else:
- col.prop(view, "lock_cursor", text="Lock to Cursor")
+ col.prop(view, "lock_cursor", text=_("Lock to Cursor"))
col = layout.column()
col.prop(view, "lock_camera")
col = layout.column(align=True)
- col.label(text="Clip:")
- col.prop(view, "clip_start", text="Start")
- col.prop(view, "clip_end", text="End")
+ col.label(text=_("Clip:"))
+ col.prop(view, "clip_start", text=_("Start"))
+ col.prop(view, "clip_end", text=_("End"))
subcol = col.column()
subcol.enabled = not view.lock_camera_and_layers
- subcol.label(text="Local Camera:")
+ subcol.label(text=_("Local Camera:"))
subcol.prop(view, "camera", text="")
layout.column().prop(view, "cursor_location")
@@ -2165,7 +2166,7 @@ class VIEW3D_PT_view3d_display(Panel):
col = layout.column()
col.active = display_all
split = col.split(percentage=0.55)
- split.prop(view, "show_floor", text="Grid Floor")
+ split.prop(view, "show_floor", text=_("Grid Floor"))
row = split.row(align=True)
row.prop(view, "show_axis_x", text="X", toggle=True)
@@ -2174,14 +2175,14 @@ class VIEW3D_PT_view3d_display(Panel):
sub = col.column(align=True)
sub.active = (display_all and view.show_floor)
- sub.prop(view, "grid_lines", text="Lines")
- sub.prop(view, "grid_scale", text="Scale")
+ sub.prop(view, "grid_lines", text=_("Lines"))
+ sub.prop(view, "grid_scale", text=_("Scale"))
subsub = sub.column(align=True)
subsub.active = scene.unit_settings.system == 'NONE'
- subsub.prop(view, "grid_subdivisions", text="Subdivisions")
+ subsub.prop(view, "grid_subdivisions", text=_("Subdivisions"))
col = layout.column()
- col.label(text="Shading:")
+ col.label(text=_("Shading:"))
col.prop(gs, "material_mode", text="")
col.prop(view, "show_textured_solid")
@@ -2189,7 +2190,7 @@ class VIEW3D_PT_view3d_display(Panel):
region = view.region_quadview
- layout.operator("screen.region_quadview", text="Toggle Quad View")
+ layout.operator("screen.region_quadview", text=_("Toggle Quad View"))
if region:
col = layout.column()
@@ -2218,22 +2219,22 @@ class VIEW3D_PT_view3d_meshdisplay(Panel):
mesh = context.active_object.data
col = layout.column()
- col.label(text="Overlays:")
- col.prop(mesh, "show_edges", text="Edges")
- col.prop(mesh, "show_faces", text="Faces")
- col.prop(mesh, "show_edge_crease", text="Creases")
- col.prop(mesh, "show_edge_bevel_weight", text="Bevel Weights")
- col.prop(mesh, "show_edge_seams", text="Seams")
- col.prop(mesh, "show_edge_sharp", text="Sharp")
+ col.label(text=_("Overlays:"))
+ col.prop(mesh, "show_edges", text=_("Edges"))
+ col.prop(mesh, "show_faces", text=_("Faces"))
+ col.prop(mesh, "show_edge_crease", text=_("Creases"))
+ col.prop(mesh, "show_edge_bevel_weight", text=_("Bevel Weights"))
+ col.prop(mesh, "show_edge_seams", text=_("Seams"))
+ col.prop(mesh, "show_edge_sharp", text=_("Sharp"))
col.separator()
- col.label(text="Normals:")
- col.prop(mesh, "show_normal_face", text="Face")
- col.prop(mesh, "show_normal_vertex", text="Vertex")
- col.prop(context.scene.tool_settings, "normal_size", text="Normal Size")
+ col.label(text=_("Normals:"))
+ col.prop(mesh, "show_normal_face", text=_("Face"))
+ col.prop(mesh, "show_normal_vertex", text=_("Vertex"))
+ col.prop(context.scene.tool_settings, "normal_size", text=_("Normal Size"))
col.separator()
- col.label(text="Numerics:")
+ col.label(text=_("Numerics:"))
col.prop(mesh, "show_extra_edge_length")
col.prop(mesh, "show_extra_face_angle")
col.prop(mesh, "show_extra_face_area")
@@ -2255,10 +2256,10 @@ class VIEW3D_PT_view3d_curvedisplay(Panel):
curve = context.active_object.data
col = layout.column()
- col.label(text="Overlays:")
- col.prop(curve, "show_handles", text="Handles")
- col.prop(curve, "show_normal_face", text="Normals")
- col.prop(context.scene.tool_settings, "normal_size", text="Normal Size")
+ col.label(text=_("Overlays:"))
+ col.prop(curve, "show_handles", text=_("Handles"))
+ col.prop(curve, "show_normal_face", text=_("Normals"))
+ col.prop(context.scene.tool_settings, "normal_size", text=_("Normal Size"))
class VIEW3D_PT_background_image(Panel):
@@ -2285,7 +2286,7 @@ class VIEW3D_PT_background_image(Panel):
view = context.space_data
col = layout.column()
- col.operator("view3d.background_image_add", text="Add Image")
+ col.operator("view3d.background_image_add", text=_("Add Image"))
for i, bg in enumerate(view.background_images):
layout.active = view.show_background_images
@@ -2295,10 +2296,10 @@ class VIEW3D_PT_background_image(Panel):
if bg.image:
row.prop(bg.image, "name", text="", emboss=False)
else:
- row.label(text="Not Set")
+ row.label(text=_("Not Set"))
row.operator("view3d.background_image_remove", text="", emboss=False, icon='X').index = i
- box.prop(bg, "view_axis", text="Axis")
+ box.prop(bg, "view_axis", text=_("Axis"))
if bg.show_expanded:
row = box.row()
@@ -2333,13 +2334,13 @@ class VIEW3D_PT_transform_orientations(Panel):
col = layout.column()
col.prop(view, "transform_orientation")
- col.operator("transform.create_orientation", text="Create")
+ col.operator("transform.create_orientation", text=_("Create"))
orientation = view.current_orientation
if orientation:
col.prop(orientation, "name")
- col.operator("transform.delete_orientation", text="Delete")
+ col.operator("transform.delete_orientation", text=_("Delete"))
class VIEW3D_PT_etch_a_ton(Panel):
@@ -2384,7 +2385,7 @@ class VIEW3D_PT_etch_a_ton(Panel):
col.prop(toolsettings, "etch_number")
col.prop(toolsettings, "etch_side")
- col.operator("sketch.convert", text="Convert")
+ col.operator("sketch.convert", text=_("Convert"))
class VIEW3D_PT_context_properties(Panel):
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index e322a6dcd13..6bd2168dab9 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -19,6 +19,7 @@
# <pep8 compliant>
import bpy
from bpy.types import Menu, Panel
+from blf import gettext as _
class View3DPanel():
@@ -31,33 +32,33 @@ class View3DPanel():
# History/Repeat tools
def draw_repeat_tools(context, layout):
col = layout.column(align=True)
- col.label(text="Repeat:")
+ col.label(text=_("Repeat:"))
col.operator("screen.repeat_last")
- col.operator("screen.repeat_history", text="History...")
+ col.operator("screen.repeat_history", text=_("History..."))
# Keyframing tools
def draw_keyframing_tools(context, layout):
col = layout.column(align=True)
- col.label(text="Keyframes:")
+ col.label(text=_("Keyframes:"))
row = col.row()
- row.operator("anim.keyframe_insert_menu", text="Insert")
- row.operator("anim.keyframe_delete_v3d", text="Remove")
+ row.operator("anim.keyframe_insert_menu", text=_("Insert"))
+ row.operator("anim.keyframe_delete_v3d", text=_("Remove"))
# Grease Pencil tools
def draw_gpencil_tools(context, layout):
col = layout.column(align=True)
- col.label(text="Grease Pencil:")
+ col.label(text=_("Grease Pencil:"))
row = col.row()
- row.operator("gpencil.draw", text="Draw").mode = 'DRAW'
- row.operator("gpencil.draw", text="Line").mode = 'DRAW_STRAIGHT'
+ row.operator("gpencil.draw", text=_("Draw")).mode = 'DRAW'
+ row.operator("gpencil.draw", text=_("Line")).mode = 'DRAW_STRAIGHT'
row = col.row()
- row.operator("gpencil.draw", text="Poly").mode = 'DRAW_POLY'
- row.operator("gpencil.draw", text="Erase").mode = 'ERASER'
+ row.operator("gpencil.draw", text=_("Poly")).mode = 'DRAW_POLY'
+ row.operator("gpencil.draw", text=_("Erase")).mode = 'ERASER'
row = col.row()
row.prop(context.tool_settings, "use_grease_pencil_sessions")
@@ -73,16 +74,16 @@ class VIEW3D_PT_tools_objectmode(View3DPanel, Panel):
layout = self.layout
col = layout.column(align=True)
- col.label(text="Transform:")
+ col.label(text=_("Transform:"))
col.operator("transform.translate")
col.operator("transform.rotate")
- col.operator("transform.resize", text="Scale")
+ col.operator("transform.resize", text=_("Scale"))
col = layout.column(align=True)
- col.operator("object.origin_set", text="Origin")
+ col.operator("object.origin_set", text=_("Origin"))
col = layout.column(align=True)
- col.label(text="Object:")
+ col.label(text=_("Object:"))
col.operator("object.duplicate_move")
col.operator("object.delete")
col.operator("object.join")
@@ -91,17 +92,17 @@ class VIEW3D_PT_tools_objectmode(View3DPanel, Panel):
if active_object and active_object.type == 'MESH':
col = layout.column(align=True)
- col.label(text="Shading:")
+ col.label(text=_("Shading:"))
row = col.row(align=True)
- row.operator("object.shade_smooth", text="Smooth")
- row.operator("object.shade_flat", text="Flat")
+ row.operator("object.shade_smooth", text=_("Smooth"))
+ row.operator("object.shade_flat", text=_("Flat"))
draw_keyframing_tools(context, layout)
col = layout.column(align=True)
- col.label(text="Motion Paths:")
- col.operator("object.paths_calculate", text="Calculate Paths")
- col.operator("object.paths_clear", text="Clear Paths")
+ col.label(text=_("Motion Paths:"))
+ col.operator("object.paths_calculate", text=_("Calculate Paths"))
+ col.operator("object.paths_clear", text=_("Clear Paths"))
draw_repeat_tools(context, layout)
@@ -122,8 +123,8 @@ class VIEW3D_PT_tools_meshedit(View3DPanel, Panel):
col.operator("transform.translate")
col.operator("transform.rotate")
col.operator("transform.resize", text="Scale")
- col.operator("transform.shrink_fatten", text="Shrink/Fatten")
- col.operator("transform.push_pull", text="Push/Pull")
+ col.operator("transform.shrink_fatten", text=_("Shrink/Fatten"))
+ col.operator("transform.push_pull", text=_("Push/Pull"))
col = layout.column(align=True)
col.label(text="Deform:")
@@ -1016,7 +1017,7 @@ class VIEW3D_PT_tools_brush_appearance(PaintPanel, Panel):
brush = settings.brush
if brush is None: # unlikely but can happen
- layout.label(text="Brush Unset")
+ layout.label(text=_("Brush Unset"))
return
col = layout.column()
diff --git a/source/blender/blenfont/BLF_api.h b/source/blender/blenfont/BLF_api.h
index 00943ace05c..1bb61d02b78 100644
--- a/source/blender/blenfont/BLF_api.h
+++ b/source/blender/blenfont/BLF_api.h
@@ -178,20 +178,6 @@ void BLF_buffer_col(int fontid, float r, float g, float b, float a);
*/
void BLF_draw_buffer(int fontid, const char *str);
-/*
- * Search the path directory to the locale files, this try all
- * the case for Linux, Win and Mac.
- */
-void BLF_lang_init(void);
-
-/* Set the current locale. */
-void BLF_lang_set(const char *);
-
-/* Set the current encoding name. */
-void BLF_lang_encoding_name(const char *str);
-
-void BLF_lang_encoding(const char *str);
-
/* Add a path to the font dir paths. */
void BLF_dir_add(const char *path);
diff --git a/source/blender/blenfont/BLF_translation.h b/source/blender/blenfont/BLF_translation.h
new file mode 100644
index 00000000000..4377d391354
--- /dev/null
+++ b/source/blender/blenfont/BLF_translation.h
@@ -0,0 +1,66 @@
+/*
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2011 Blender Foundation.
+ * All rights reserved.
+ *
+ *
+ * Contributor(s): Blender Foundation,
+ * Sergey Sharybin
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/blenfont/BLF_translation.h
+ * \ingroup blf
+ */
+
+
+#ifndef BLF_TRANSLATION_H
+#define BLF_TRANSLATION_H
+
+/* blf_translation.c */
+
+#ifdef INTERNATIONAL
+unsigned char *BLF_get_unifont(int *unifont_size);
+void BLF_free_unifont(void);
+#endif
+
+const char* BLF_gettext(const char *msgid);
+
+/* blf_lang.c */
+
+/*
+ * Search the path directory to the locale files, this try all
+ * the case for Linux, Win and Mac.
+ */
+void BLF_lang_init(void);
+
+/* Set the current locale. */
+void BLF_lang_set(const char *);
+
+/* Set the current encoding name. */
+void BLF_lang_encoding_name(const char *str);
+
+void BLF_lang_encoding(const char *str);
+
+#define _(msgid) BLF_gettext(msgid)
+#define N_(msgid) msgid
+
+#endif /* BLF_TRANSLATION_H */
diff --git a/source/blender/blenfont/CMakeLists.txt b/source/blender/blenfont/CMakeLists.txt
index 82099d4f125..b87a3b88f07 100644
--- a/source/blender/blenfont/CMakeLists.txt
+++ b/source/blender/blenfont/CMakeLists.txt
@@ -42,9 +42,11 @@ set(SRC
intern/blf_font.c
intern/blf_glyph.c
intern/blf_lang.c
+ intern/blf_translation.c
intern/blf_util.c
BLF_api.h
+ BLF_translation.h
intern/blf_internal.h
intern/blf_internal_types.h
)
@@ -56,9 +58,5 @@ if(WITH_INTERNATIONAL)
add_definitions(-DINTERNATIONAL)
endif()
-if(WIN32 AND NOT UNIX)
- add_definitions(-DUSE_GETTEXT_DLL)
-endif()
-
blender_add_lib(bf_blenfont "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/source/blender/blenfont/SConscript b/source/blender/blenfont/SConscript
index 2763bea0da0..45a55793856 100644
--- a/source/blender/blenfont/SConscript
+++ b/source/blender/blenfont/SConscript
@@ -13,7 +13,6 @@ defs = []
if sys.platform == 'win32' or env['OURPLATFORM'] == 'linuxcross':
defs.append('_WIN32')
- defs.append('USE_GETTEXT_DLL')
if env['WITH_BF_INTERNATIONAL']:
defs.append('INTERNATIONAL')
diff --git a/source/blender/blenfont/intern/blf_lang.c b/source/blender/blenfont/intern/blf_lang.c
index 80951899040..8f745180b8b 100644
--- a/source/blender/blenfont/intern/blf_lang.c
+++ b/source/blender/blenfont/intern/blf_lang.c
@@ -39,8 +39,14 @@
#ifdef INTERNATIONAL
#include <locale.h>
+
+#if defined (_WIN32)
+#include <windows.h>
+#endif
+
#include "libintl.h"
+#include "DNA_userdef_types.h"
#include "DNA_listBase.h"
#include "DNA_vec_types.h"
@@ -60,6 +66,35 @@ static char global_messagepath[1024];
static char global_language[32];
static char global_encoding_name[32];
+/* map from the rna_userdef.c:rna_def_userdef_system(BlenderRNA *brna):language_items */
+static const char *locales[] = {
+ "", "",
+ "english", "en_US",
+ "japanese", "ja_JP",
+ "dutch", "nl_NL",
+ "italian", "it_IT",
+ "german", "de_DE",
+ "finnish", "fi_FI",
+ "swedish", "sv_SE",
+ "french", "fr_FR",
+ "spanish", "es_ES",
+ "catalan", "ca_AD",
+ "czech", "cs_CZ",
+ "ptb", "pt_BR",
+ "chs", "zh_CN",
+ "cht", "zh_TW",
+ "russian", "ru_RU",
+ "croatian", "hr_HR",
+ "serbian", "sr_RS",
+ "ukrainian", "uk_UA",
+ "polish", "pl_PL",
+ "romanian", "ro_RO",
+ "arabic", "ar_EG",
+ "bulgarian", "bg_BG",
+ "greek", "el_GR",
+ "korean", "ko_KR",
+ "nepali", "ne_NP",
+};
void BLF_lang_init(void)
{
@@ -77,34 +112,95 @@ void BLF_lang_init(void)
/* XXX WARNING!!! IN osx somehow the previous function call jumps in this one??? (ton, ppc) */
void BLF_lang_set(const char *str)
{
- if(str==NULL) {
+ char *locreturn;
+ const char *short_locale;
+ int ok= 1;
+#if defined (_WIN32)
+ char *long_locale = locales[ 2 * U.language];
+#endif
+
+ if((U.transopts&USER_DOTRANSLATE)==0)
return;
+
+ if(str)
+ short_locale = str;
+ else
+ short_locale = locales[ 2 * U.language + 1];
+
+#if defined (_WIN32)
+ if(short_locale) {
+ char *envStr;
+
+ if( U.language==0 )/* use system setting */
+ envStr = BLI_sprintfN( "LANG=%s", getenv("LANG") );
+ else
+ envStr = BLI_sprintfN( "LANG=%s", short_locale );
+
+ gettext_putenv(envStr);
+ MEM_freeN(envStr);
+ }
+
+ locreturn= setlocale(LC_ALL, long_locale);
+
+ if (locreturn == NULL) {
+ printf("Could not change locale to %s\n", long_locale);
+ ok= 0;
}
- else {
-
-#if defined (_WIN32) || defined(__APPLE__)
- BLI_setenv("LANG", str);
#else
- char *locreturn= setlocale(LC_ALL, str);
+ {
+ const char *locale;
+ static char default_locale[64]="\0";
+
+ if(default_locale[0]==0) {
+ char *env_language= getenv("LANGUAGE");
+
+ if(env_language) {
+ char *s;
+
+ /* store defaul locale */
+ strncpy(default_locale, env_language, sizeof(default_locale));
+
+ /* use first language as default */
+ s= strchr(default_locale, ':');
+ if(s) s[0]= 0;
+ }
+ }
+
+ if(short_locale[0])
+ locale= short_locale;
+ else
+ locale= default_locale;
+
+ BLI_setenv("LANG", locale);
+ BLI_setenv("LANGUAGE", locale);
+
+ locreturn= setlocale(LC_ALL, locale);
+
if (locreturn == NULL) {
- char *lang= BLI_sprintfN("%s.UTF-8", str);
+ char *short_locale_utf8= BLI_sprintfN("%s.UTF-8", short_locale);
+
+ locreturn= setlocale(LC_ALL, short_locale_utf8);
- locreturn= setlocale(LC_ALL, lang);
if (locreturn == NULL) {
- printf("could not change language to %s nor %s\n", str, lang);
+ printf("Could not change locale to %s nor %s\n", short_locale, short_locale_utf8);
+ ok= 0;
}
- MEM_freeN(lang);
+ MEM_freeN(short_locale_utf8);
}
-
- setlocale(LC_NUMERIC, "C");
+ }
#endif
- textdomain(DOMAIN_NAME);
- bindtextdomain(DOMAIN_NAME, global_messagepath);
- /* bind_textdomain_codeset(DOMAIN_NAME, global_encoding_name); */
- BLI_strncpy(global_language, str, sizeof(global_language));
-
+
+ if(ok) {
+ //printf("Change locale to %s\n", locreturn );
+ BLI_strncpy(global_language, locreturn, sizeof(global_language));
}
+
+ setlocale(LC_NUMERIC, "C");
+
+ textdomain(DOMAIN_NAME);
+ bindtextdomain(DOMAIN_NAME, global_messagepath);
+ bind_textdomain_codeset(DOMAIN_NAME, global_encoding_name);
}
void BLF_lang_encoding(const char *str)
diff --git a/source/blender/blenfont/intern/blf_translation.c b/source/blender/blenfont/intern/blf_translation.c
new file mode 100644
index 00000000000..b53f4cf7609
--- /dev/null
+++ b/source/blender/blenfont/intern/blf_translation.c
@@ -0,0 +1,86 @@
+/*
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2011 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation,
+ * Sergey Sharybin
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/blenfont/intern/blf_translation.c
+ * \ingroup blf
+ */
+
+#include <stdlib.h>
+
+#ifdef INTERNATIONAL
+#include <libintl.h>
+#endif
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_path_util.h"
+#include "BLI_string.h"
+#include "BLI_path_util.h"
+#include "BLI_fileops.h"
+
+#include "BLF_translation.h"
+
+#ifdef INTERNATIONAL
+const char unifont_filename[]="droidsans.ttf.gz";
+static unsigned char *unifont_ttf= NULL;
+static int unifont_size= 0;
+
+unsigned char *BLF_get_unifont(int *unifont_size_r)
+{
+ if(unifont_ttf==NULL) {
+ char *fontpath = BLI_get_folder(BLENDER_DATAFILES, "fonts");
+ char unifont_path[1024];
+
+ BLI_snprintf(unifont_path, sizeof(unifont_path), "%s/%s", fontpath, unifont_filename);
+
+ unifont_ttf= (unsigned char*)BLI_ungzip_to_mem(unifont_path, &unifont_size);
+ }
+
+ *unifont_size_r= unifont_size;
+
+ return unifont_ttf;
+}
+
+void BLF_free_unifont(void)
+{
+ if(unifont_ttf)
+ MEM_freeN(unifont_ttf);
+}
+
+#endif
+
+const char* BLF_gettext(const char *msgid)
+{
+#ifdef INTERNATIONAL
+ if( msgid[0] )
+ return gettext( msgid );
+ return "";
+#else
+ return msgid;
+#endif
+}
diff --git a/source/blender/blenlib/BLI_fileops.h b/source/blender/blenlib/BLI_fileops.h
index 59c01348c07..21d28ca3185 100644
--- a/source/blender/blenlib/BLI_fileops.h
+++ b/source/blender/blenlib/BLI_fileops.h
@@ -53,6 +53,7 @@ int BLI_exists(const char *file);
int BLI_copy_fileops(const char *file, const char *to);
int BLI_rename(const char *from, const char *to);
int BLI_gzip(const char *from, const char *to);
+char *BLI_ungzip_to_mem(const char *from_file, int *size_r);
int BLI_delete(const char *file, int dir, int recursive);
int BLI_move(const char *file, const char *to);
int BLI_touch(const char *file);
diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c
index 3299752646b..6b125435b31 100644
--- a/source/blender/blenlib/intern/fileops.c
+++ b/source/blender/blenlib/intern/fileops.c
@@ -52,6 +52,8 @@
#include <sys/param.h>
#endif
+#include "MEM_guardedalloc.h"
+
#include "BLI_blenlib.h"
#include "BKE_utildefines.h"
@@ -104,6 +106,45 @@ int BLI_gzip(const char *from, const char *to) {
return rval;
}
+/* gzip the file in from_file and write it to memery to_mem, at most size bytes.
+ return the unziped size
+ */
+char *BLI_ungzip_to_mem(const char *from_file, int *size_r)
+{
+ gzFile gzfile;
+ int readsize, size, alloc_size=0;
+ char *mem= NULL;
+ const int chunk_size= 512*1024;
+
+ size= 0;
+
+ gzfile = gzopen( from_file, "rb" );
+
+ for(;;) {
+ if(mem==NULL) {
+ mem= MEM_callocN(chunk_size, "BLI_ungzip_to_mem");
+ alloc_size= chunk_size;
+ } else {
+ mem= MEM_reallocN(mem, size+chunk_size);
+ alloc_size+= chunk_size;
+ }
+
+ readsize= gzread(gzfile, mem+size, chunk_size);
+ if(readsize>0) {
+ size+= readsize;
+ }
+ else break;
+ }
+
+ if(mem && alloc_size!=size)
+ mem= MEM_reallocN(mem, size);
+
+ *size_r= size;
+
+ return mem;
+}
+
+
/* return 1 when file can be written */
int BLI_is_writable(const char *filename)
{
diff --git a/source/blender/editors/armature/CMakeLists.txt b/source/blender/editors/armature/CMakeLists.txt
index 9a44525611a..7ecbdc9ebe5 100644
--- a/source/blender/editors/armature/CMakeLists.txt
+++ b/source/blender/editors/armature/CMakeLists.txt
@@ -21,6 +21,7 @@
set(INC
../include
+ ../../blenfont
../../blenkernel
../../blenlib
../../blenloader
diff --git a/source/blender/editors/armature/SConscript b/source/blender/editors/armature/SConscript
index b7f9a263bc1..ded82b3dfb7 100644
--- a/source/blender/editors/armature/SConscript
+++ b/source/blender/editors/armature/SConscript
@@ -3,7 +3,7 @@ Import ('env')
sources = env.Glob('*.c')
-incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf ../../blenloader'
+incs = '../include ../../blenfont ../../blenlib ../../blenkernel ../../makesdna ../../imbuf ../../blenloader'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
incs += ' ../../gpu ../../makesrna #/intern/opennl/extern'
diff --git a/source/blender/editors/armature/poselib.c b/source/blender/editors/armature/poselib.c
index 67c93c4c906..8a7d837d2a8 100644
--- a/source/blender/editors/armature/poselib.c
+++ b/source/blender/editors/armature/poselib.c
@@ -43,6 +43,8 @@
#include "BLI_dlrbTree.h"
#include "BLI_utildefines.h"
+#include "BLF_translation.h"
+
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
#include "DNA_object_types.h"
@@ -407,15 +409,15 @@ static int poselib_add_menu_invoke (bContext *C, wmOperator *op, wmEvent *UNUSED
uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT);
/* add new (adds to the first unoccupied frame) */
- uiItemIntO(layout, "Add New", ICON_NONE, "POSELIB_OT_pose_add", "frame", poselib_get_free_index(ob->poselib));
+ uiItemIntO(layout, UI_translate_do_iface(N_("Add New")), ICON_NONE, "POSELIB_OT_pose_add", "frame", poselib_get_free_index(ob->poselib));
/* check if we have any choices to add a new pose in any other way */
if ((ob->poselib) && (ob->poselib->markers.first)) {
/* add new (on current frame) */
- uiItemIntO(layout, "Add New (Current Frame)", ICON_NONE, "POSELIB_OT_pose_add", "frame", CFRA);
+ uiItemIntO(layout, UI_translate_do_iface(N_("Add New (Current Frame)")), ICON_NONE, "POSELIB_OT_pose_add", "frame", CFRA);
/* replace existing - submenu */
- uiItemMenuF(layout, "Replace Existing...", 0, poselib_add_menu_invoke__replacemenu, NULL);
+ uiItemMenuF(layout, UI_translate_do_iface(N_("Replace Existing...")), 0, poselib_add_menu_invoke__replacemenu, NULL);
}
uiPupMenuEnd(C, pup);
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 637940f59a6..06b44e36b69 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -799,9 +799,15 @@ void uiStyleFontDrawRotated(struct uiFontStyle *fs, struct rcti *rect, const cha
int UI_GetStringWidth(const char *str); // XXX temp
void UI_DrawString(float x, float y, const char *str); // XXX temp
void UI_DrawTriIcon(float x, float y, char dir);
-
+uiStyle* UI_GetStyle(void);
/* linker workaround ack! */
void UI_template_fix_linking(void);
+/* translation */
+int UI_translate_iface(void);
+int UI_translate_tooltips(void);
+const char *UI_translate_do_iface(const char *msgid);
+const char *UI_translate_do_tooltip(const char *msgid);
+
#endif /* UI_INTERFACE_H */
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index abc668d72dd..2ff77d255c6 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -55,6 +55,7 @@
#include "BIF_gl.h"
#include "BLF_api.h"
+#include "BLF_translation.h"
#include "UI_interface.h"
@@ -93,19 +94,46 @@ static void ui_free_but(const bContext *C, uiBut *but);
/* ************* translation ************** */
-int ui_translate_buttons(void)
+int UI_translate_iface(void)
{
- return (U.transopts & USER_TR_BUTTONS);
+#ifdef INTERNATIONAL
+ return (U.transopts & USER_DOTRANSLATE) && (U.transopts & USER_TR_IFACE);
+#else
+ return 0;
+#endif
}
-int ui_translate_menus(void)
+int UI_translate_tooltips(void)
{
- return (U.transopts & USER_TR_MENUS);
+#ifdef INTERNATIONAL
+ return (U.transopts & USER_DOTRANSLATE) && (U.transopts & USER_TR_TOOLTIPS);
+#else
+ return 0;
+#endif
}
-int ui_translate_tooltips(void)
+const char *UI_translate_do_iface(const char *msgid)
{
- return (U.transopts & USER_TR_TOOLTIPS);
+#ifdef INTERNATIONAL
+ if(UI_translate_iface())
+ return BLF_gettext(msgid);
+ else
+ return msgid;
+#else
+ return msgid;
+#endif
+}
+
+const char *UI_translate_do_tooltip(const char *msgid)
+{
+#ifdef INTERNATIONAL
+ if(UI_translate_tooltips())
+ return BLF_gettext(msgid);
+ else
+ return msgid;
+#else
+ return msgid;
+#endif
}
/* ************* window matrix ************** */
@@ -229,7 +257,7 @@ void ui_block_translate(uiBlock *block, int x, int y)
static void ui_text_bounds_block(uiBlock *block, float offset)
{
- uiStyle *style= U.uistyles.first; // XXX pass on as arg
+ uiStyle *style=UI_GetStyle();
uiBut *bt;
int i = 0, j, x1addval= offset, nextcol;
int lastcol= 0, col= 0;
@@ -238,9 +266,6 @@ static void ui_text_bounds_block(uiBlock *block, float offset)
for(bt= block->buttons.first; bt; bt= bt->next) {
if(bt->type!=SEPR) {
- //int transopts= ui_translate_buttons();
- //if(bt->type==TEX || bt->type==IDPOIN) transopts= 0;
-
j= BLF_width(style->widget.uifont_id, bt->drawstr);
if(j > i) i = j;
@@ -930,7 +955,7 @@ static void ui_but_to_pixelrect(rcti *rect, const ARegion *ar, uiBlock *block, u
/* uses local copy of style, to scale things down, and allow widgets to change stuff */
void uiDrawBlock(const bContext *C, uiBlock *block)
{
- uiStyle style= *((uiStyle *)U.uistyles.first); // XXX pass on as arg
+ uiStyle style= *UI_GetStyle(); // XXX pass on as arg
ARegion *ar;
uiBut *but;
rcti rect;
@@ -2033,12 +2058,9 @@ void ui_check_but(uiBut *but)
/* if something changed in the button */
double value= UI_BUT_VALUE_UNSET;
// float okwidth; // UNUSED
-// int transopts= ui_translate_buttons();
ui_is_but_sel(but, &value);
-// if(but->type==TEX || but->type==IDPOIN) transopts= 0;
-
/* only update soft range while not editing */
if(but->rnaprop && !(but->editval || but->editstr || but->editvec)) {
UI_GET_BUT_VALUE_INIT(but, value)
@@ -2547,7 +2569,7 @@ static uiBut *ui_def_but_rna(uiBlock *block, int type, int retval, const char *s
DynStr *dynstr;
int i, totitem, value, free;
- RNA_property_enum_items(block->evil_C, ptr, prop, &item, &totitem, &free);
+ RNA_property_enum_items_gettexted(block->evil_C, ptr, prop, &item, &totitem, &free);
value= RNA_property_enum_get(ptr, prop);
dynstr= BLI_dynstr_new();
@@ -2582,7 +2604,7 @@ static uiBut *ui_def_but_rna(uiBlock *block, int type, int retval, const char *s
EnumPropertyItem *item;
int i, totitem, free;
- RNA_property_enum_items(block->evil_C, ptr, prop, &item, &totitem, &free);
+ RNA_property_enum_items_gettexted(block->evil_C, ptr, prop, &item, &totitem, &free);
for(i=0; i<totitem; i++) {
if(item[i].identifier[0] && item[i].value == (int)max) {
str= item[i].name;
@@ -2710,6 +2732,11 @@ static uiBut *ui_def_but_operator(uiBlock *block, int type, const char *opname,
if ((!tip || tip[0]=='\0') && ot && ot->description) {
tip= ot->description;
+
+#ifdef INTERNATIONAL
+ if(UI_translate_tooltips())
+ tip= BLF_gettext(tip);
+#endif
}
but= ui_def_but(block, type, -1, str, x1, y1, x2, y2, NULL, 0, 0, 0, 0, tip);
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 7661fa5994b..125928c136b 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -1269,7 +1269,7 @@ static int ui_textedit_delete_selection(uiBut *but, uiHandleButtonData *data)
/* note, but->block->aspect is used here, when drawing button style is getting scaled too */
static void ui_textedit_set_cursor_pos(uiBut *but, uiHandleButtonData *data, short x)
{
- uiStyle *style= U.uistyles.first; // XXX pass on as arg
+ uiStyle *style= UI_GetStyle(); // XXX pass on as arg
uiFontStyle *fstyle = &style->widget;
int startx= but->x1;
char *origstr;
@@ -4101,7 +4101,7 @@ static uiBlock *menu_change_shortcut(bContext *C, ARegion *ar, void *arg)
wmKeyMapItem *kmi;
PointerRNA ptr;
uiLayout *layout;
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
IDProperty *prop= (but->opptr)? but->opptr->data: NULL;
int kmi_id = WM_key_event_operator_id(C, but->optype->idname, but->opcontext, prop, 1, &km);
@@ -4133,7 +4133,7 @@ static uiBlock *menu_add_shortcut(bContext *C, ARegion *ar, void *arg)
wmKeyMapItem *kmi;
PointerRNA ptr;
uiLayout *layout;
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
IDProperty *prop= (but->opptr)? but->opptr->data: NULL;
int kmi_id;
diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index ebc8725ad5d..72eb869dea0 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -347,10 +347,6 @@ typedef struct uiSafetyRct {
extern void ui_delete_linkline(uiLinkLine *line, uiBut *but);
-extern int ui_translate_buttons(void);
-extern int ui_translate_menus(void);
-extern int ui_translate_tooltips(void);
-
void ui_fontscale(short *points, float aspect);
extern void ui_block_to_window_fl(const struct ARegion *ar, uiBlock *block, float *x, float *y);
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index 10300cee9ea..3c02f7d4bd2 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -43,6 +43,8 @@
#include "BLI_string.h"
#include "BLI_utildefines.h"
+#include "BLF_translation.h"
+
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_idprop.h"
@@ -475,7 +477,7 @@ static void ui_item_enum_expand(uiLayout *layout, uiBlock *block, PointerRNA *pt
const char *name;
int a, totitem, itemw, icon, value, free;
- RNA_property_enum_items(block->evil_C, ptr, prop, &item, &totitem, &free);
+ RNA_property_enum_items_gettexted(block->evil_C, ptr, prop, &item, &totitem, &free);
uiBlockSetCurLayout(block, ui_item_local_sublayout(layout, layout, 1));
for(a=0; a<totitem; a++) {
@@ -634,8 +636,14 @@ PointerRNA uiItemFullO(uiLayout *layout, const char *opname, const char *name, i
return PointerRNA_NULL;
}
- if(!name)
+ if(!name) {
name= ot->name;
+
+#ifdef INTERNATIONAL
+ name= UI_translate_do_iface(name);
+#endif
+ }
+
if(layout->root->type == UI_LAYOUT_MENU && !icon)
icon= ICON_BLANK1;
@@ -701,7 +709,7 @@ static const char *ui_menu_enumpropname(uiLayout *layout, const char *opname, co
int totitem, free;
const char *name;
- RNA_property_enum_items(layout->root->block->evil_C, &ptr, prop, &item, &totitem, &free);
+ RNA_property_enum_items_gettexted(layout->root->block->evil_C, &ptr, prop, &item, &totitem, &free);
if(RNA_enum_name(item, retval, &name)) {
if(free) MEM_freeN(item);
return name;
@@ -753,7 +761,7 @@ void uiItemsFullEnumO(uiLayout *layout, const char *opname, const char *propname
uiLayout *split= uiLayoutSplit(layout, 0, 0);
uiLayout *column= uiLayoutColumn(split, 0);
- RNA_property_enum_items(block->evil_C, &ptr, prop, &item, &totitem, &free);
+ RNA_property_enum_items_gettexted(block->evil_C, &ptr, prop, &item, &totitem, &free);
for(i=0; i<totitem; i++) {
if(item[i].identifier[0]) {
@@ -841,7 +849,7 @@ void uiItemEnumO_string(uiLayout *layout, const char *name, int icon, const char
/* enum lookup */
if((prop= RNA_struct_find_property(&ptr, propname))) {
- RNA_property_enum_items(layout->root->block->evil_C, &ptr, prop, &item, NULL, &free);
+ RNA_property_enum_items_gettexted(layout->root->block->evil_C, &ptr, prop, &item, NULL, &free);
if(item==NULL || RNA_enum_value_from_id(item, value_str, &value)==0) {
if(free) MEM_freeN(item);
RNA_warning("%s.%s, enum %s not found", RNA_struct_identifier(ptr.type), propname, value_str);
@@ -1091,7 +1099,7 @@ void uiItemEnumR_string(uiLayout *layout, struct PointerRNA *ptr, const char *pr
return;
}
- RNA_property_enum_items(layout->root->block->evil_C, ptr, prop, &item, NULL, &free);
+ RNA_property_enum_items_gettexted(layout->root->block->evil_C, ptr, prop, &item, NULL, &free);
if(!RNA_enum_value_from_id(item, value, &ivalue)) {
if(free) MEM_freeN(item);
@@ -1135,7 +1143,7 @@ void uiItemsEnumR(uiLayout *layout, struct PointerRNA *ptr, const char *propname
uiLayout *split= uiLayoutSplit(layout, 0, 0);
uiLayout *column= uiLayoutColumn(split, 0);
- RNA_property_enum_items(block->evil_C, ptr, prop, &item, &totitem, &free);
+ RNA_property_enum_items_gettexted(block->evil_C, ptr, prop, &item, &totitem, &free);
for(i=0; i<totitem; i++) {
if(item[i].identifier[0]) {
@@ -1421,8 +1429,14 @@ void uiItemM(uiLayout *layout, bContext *UNUSED(C), const char *menuname, const
return;
}
- if(!name)
+ if(!name) {
name= mt->label;
+
+#ifdef INTERNATIONAL
+ name= UI_translate_do_iface(name);
+#endif
+ }
+
if(layout->root->type == UI_LAYOUT_MENU && !icon)
icon= ICON_BLANK1;
@@ -2794,7 +2808,7 @@ void uiLayoutOperatorButs(const bContext *C, uiLayout *layout, wmOperator *op,in
empty= uiDefAutoButsRNA(layout, &ptr, check_prop, label_align) == 0;
if(empty && (flag & UI_LAYOUT_OP_SHOW_EMPTY)) {
- uiItemL(layout, "No Properties", ICON_NONE);
+ uiItemL(layout, UI_translate_do_iface(N_("No Properties")), ICON_NONE);
}
}
diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c
index cd1d250d6a4..ec7456eebdc 100644
--- a/source/blender/editors/interface/interface_panel.c
+++ b/source/blender/editors/interface/interface_panel.c
@@ -173,7 +173,7 @@ static void ui_panel_copy_offset(Panel *pa, Panel *papar)
Panel *uiBeginPanel(ScrArea *sa, ARegion *ar, uiBlock *block, PanelType *pt, int *open)
{
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
Panel *pa, *patab, *palast, *panext;
char *drawname= pt->label;
char *idname= pt->idname;
@@ -292,7 +292,7 @@ void uiEndPanel(uiBlock *block, int width, int height)
static void ui_offset_panel_block(uiBlock *block)
{
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
uiBut *but;
int ofsy;
@@ -442,8 +442,12 @@ static void ui_draw_aligned_panel_header(uiStyle *style, uiBlock *block, rcti *r
Panel *panel= block->panel;
rcti hrect;
int pnl_icons;
- char *activename= panel->drawname[0]?panel->drawname:panel->panelname;
-
+ const char *activename= panel->drawname[0]?panel->drawname:panel->panelname;
+
+#ifdef INTERNATIONAL
+ activename= UI_translate_do_iface(activename);
+#endif
+
/* + 0.001f to avoid flirting with float inaccuracy */
if(panel->control & UI_PNL_CLOSE) pnl_icons=(panel->labelofs+2*PNL_ICON+5)/block->aspect + 0.001f;
else pnl_icons= (panel->labelofs+PNL_ICON+5)/block->aspect + 0.001f;
@@ -667,7 +671,7 @@ static int compare_panel(const void *a1, const void *a2)
/* returns 1 when it did something */
static int uiAlignPanelStep(ScrArea *sa, ARegion *ar, float fac, int drag)
{
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
Panel *pa;
PanelSort *ps, *panelsort, *psnext;
int a, tot=0, done;
diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c
index f31c16cd020..4221f7c30ff 100644
--- a/source/blender/editors/interface/interface_regions.c
+++ b/source/blender/editors/interface/interface_regions.c
@@ -62,6 +62,7 @@
#include "UI_view2d.h"
#include "BLF_api.h"
+#include "BLF_translation.h"
#include "ED_screen.h"
@@ -318,7 +319,7 @@ static void ui_tooltip_region_draw_cb(const bContext *UNUSED(C), ARegion *ar)
rcti bbox= data->bbox;
int a;
- ui_draw_menu_back(U.uistyles.first, NULL, &data->bbox);
+ ui_draw_menu_back(UI_GetStyle(), NULL, &data->bbox);
/* draw text */
uiStyleFontSet(&data->fstyle);
@@ -343,9 +344,10 @@ static void ui_tooltip_region_free_cb(ARegion *ar)
ar->regiondata= NULL;
}
+#define TIP_(msgid) UI_translate_do_tooltip(msgid)
ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
{
- uiStyle *style= U.uistyles.first; // XXX pass on as arg
+ uiStyle *style= UI_GetStyle();
static ARegionType type;
ARegion *ar;
uiTooltipData *data;
@@ -374,7 +376,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
EnumPropertyItem *item;
int i, totitem, free;
- RNA_property_enum_items(C, &but->rnapoin, but->rnaprop, &item, &totitem, &free);
+ RNA_property_enum_items_gettexted(C, &but->rnapoin, but->rnaprop, &item, &totitem, &free);
for(i=0; i<totitem; i++) {
if(item[i].identifier[0] && item[i].value == (int)but->hardmax) {
@@ -403,7 +405,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
prop= (but->opptr)? but->opptr->data: NULL;
if(WM_key_event_operator_string(C, but->optype->idname, but->opcontext, prop, buf, sizeof(buf))) {
- BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Shortcut: %s", buf);
+ BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), TIP_(N_("Shortcut: %s")), buf);
data->color[data->totline]= 0x888888;
data->totline++;
}
@@ -413,7 +415,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
/* full string */
ui_get_but_string(but, buf, sizeof(buf));
if(buf[0]) {
- BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Value: %s", buf);
+ BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), TIP_(N_("Value: %s")), buf);
data->color[data->totline]= 0x888888;
data->totline++;
}
@@ -425,7 +427,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
if (unit_type == PROP_UNIT_ROTATION) {
if (RNA_property_type(but->rnaprop) == PROP_FLOAT) {
float value= RNA_property_array_check(but->rnaprop) ? RNA_property_float_get_index(&but->rnapoin, but->rnaprop, but->rnaindex) : RNA_property_float_get(&but->rnapoin, but->rnaprop);
- BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Radians: %f", value);
+ BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), TIP_(N_("Radians: %f")), value);
data->color[data->totline]= 0x888888;
data->totline++;
}
@@ -434,7 +436,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
if(but->flag & UI_BUT_DRIVEN) {
if(ui_but_anim_expression_get(but, buf, sizeof(buf))) {
/* expression */
- BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Expression: %s", buf);
+ BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), TIP_(N_("Expression: %s")), buf);
data->color[data->totline]= 0x888888;
data->totline++;
}
@@ -442,7 +444,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
/* rna info */
if ((U.flag & USER_TOOLTIPS_PYTHON) == 0) {
- BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Python: %s.%s", RNA_struct_identifier(but->rnapoin.type), RNA_property_identifier(but->rnaprop));
+ BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), TIP_(N_("Python: %s.%s")), RNA_struct_identifier(but->rnapoin.type), RNA_property_identifier(but->rnaprop));
data->color[data->totline]= 0x888888;
data->totline++;
}
@@ -450,7 +452,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
if(but->rnapoin.id.data) {
ID *id= but->rnapoin.id.data;
if(id->lib && id->lib->name) {
- BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Library: %s", id->lib->name);
+ BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), TIP_(N_("Library: %s")), id->lib->name);
data->color[data->totline]= 0x888888;
data->totline++;
}
@@ -465,7 +467,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
/* operator info */
if ((U.flag & USER_TOOLTIPS_PYTHON) == 0) {
- BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Python: %s", str);
+ BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), TIP_(N_("Python: %s")), str);
data->color[data->totline]= 0x888888;
data->totline++;
}
@@ -479,7 +481,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
WM_operator_poll_context(C, but->optype, but->opcontext);
poll_msg= CTX_wm_operator_poll_msg_get(C);
if(poll_msg) {
- BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Disabled: %s", poll_msg);
+ BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), TIP_(N_("Disabled: %s")), poll_msg);
data->color[data->totline]= 0x6666ff; /* alert */
data->totline++;
}
@@ -489,7 +491,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
if ((U.flag & USER_TOOLTIPS_PYTHON) == 0) {
if(but->menu_create_func && WM_menutype_contains((MenuType *)but->poin)) {
MenuType *mt= (MenuType *)but->poin;
- BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Python: %s", mt->idname);
+ BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), TIP_(N_("Python: %s")), mt->idname);
data->color[data->totline]= 0x888888;
data->totline++;
}
@@ -608,6 +610,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
return ar;
}
+#undef TIP_
void ui_tooltip_free(bContext *C, ARegion *ar)
{
@@ -985,7 +988,7 @@ static void ui_searchbox_region_free_cb(ARegion *ar)
ARegion *ui_searchbox_create(bContext *C, ARegion *butregion, uiBut *but)
{
- uiStyle *style= U.uistyles.first; // XXX pass on as arg
+ uiStyle *style= UI_GetStyle();
static ARegionType type;
ARegion *ar;
uiSearchboxData *data;
@@ -2299,7 +2302,7 @@ static uiBlock *ui_block_func_POPUP(bContext *C, uiPopupBlockHandle *handle, voi
uiPopupBlockHandle *ui_popup_menu_create(bContext *C, ARegion *butregion, uiBut *but, uiMenuCreateFunc menu_func, void *arg, char *str)
{
wmWindow *window= CTX_wm_window(C);
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
uiPopupBlockHandle *handle;
uiPopupMenu *pup;
@@ -2348,7 +2351,7 @@ uiPopupBlockHandle *ui_popup_menu_create(bContext *C, ARegion *butregion, uiBut
/* only return handler, and set optional title */
uiPopupMenu *uiPupMenuBegin(bContext *C, const char *title, int icon)
{
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
uiPopupMenu *pup= MEM_callocN(sizeof(uiPopupMenu), "popup menu");
uiBut *but;
diff --git a/source/blender/editors/interface/interface_style.c b/source/blender/editors/interface/interface_style.c
index 8d4b4209120..5ea20b33b3a 100644
--- a/source/blender/editors/interface/interface_style.c
+++ b/source/blender/editors/interface/interface_style.c
@@ -47,6 +47,7 @@
#include "BLF_api.h"
+#include "BLF_translation.h"
#include "UI_interface.h"
@@ -76,7 +77,7 @@
/* ********************************************** */
-static uiStyle *ui_style_new(ListBase *styles, const char *name)
+static uiStyle *ui_style_new(ListBase *styles, const char *name, short uifont_id)
{
uiStyle *style= MEM_callocN(sizeof(uiStyle), "new style");
@@ -85,7 +86,7 @@ static uiStyle *ui_style_new(ListBase *styles, const char *name)
style->panelzoom= 1.0; /* unused */
- style->paneltitle.uifont_id= UIFONT_DEFAULT;
+ style->paneltitle.uifont_id= uifont_id;
style->paneltitle.points= 12;
style->paneltitle.kerning= 1;
style->paneltitle.shadow= 1;
@@ -94,7 +95,7 @@ static uiStyle *ui_style_new(ListBase *styles, const char *name)
style->paneltitle.shadowalpha= 0.15f;
style->paneltitle.shadowcolor= 1.0f;
- style->grouplabel.uifont_id= UIFONT_DEFAULT;
+ style->grouplabel.uifont_id= uifont_id;
style->grouplabel.points= 12;
style->grouplabel.kerning= 1;
style->grouplabel.shadow= 3;
@@ -102,7 +103,7 @@ static uiStyle *ui_style_new(ListBase *styles, const char *name)
style->grouplabel.shady= -1;
style->grouplabel.shadowalpha= 0.25f;
- style->widgetlabel.uifont_id= UIFONT_DEFAULT;
+ style->widgetlabel.uifont_id= uifont_id;
style->widgetlabel.points= 11;
style->widgetlabel.kerning= 1;
style->widgetlabel.shadow= 3;
@@ -111,7 +112,7 @@ static uiStyle *ui_style_new(ListBase *styles, const char *name)
style->widgetlabel.shadowalpha= 0.15f;
style->widgetlabel.shadowcolor= 1.0f;
- style->widget.uifont_id= UIFONT_DEFAULT;
+ style->widget.uifont_id= uifont_id;
style->widget.points= 11;
style->widget.kerning= 1;
style->widget.shadowalpha= 0.25f;
@@ -251,11 +252,19 @@ void uiStyleFontDrawRotated(uiFontStyle *fs, rcti *rect, const char *str)
}
/* ************** helpers ************************ */
+/* XXX: read a style configure */
+uiStyle* UI_GetStyle(void)
+{
+ uiStyle *style = NULL;
+ /* offset is two struct uiStyle pointers */
+ /* style = BLI_findstring( &U.uistyles, "Unifont Style", sizeof(style)*2 ) */;
+ return (style != NULL) ? style : U.uistyles.first;
+}
/* temporarily, does widget font */
int UI_GetStringWidth(const char *str)
{
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
uiFontStyle *fstyle= &style->widget;
int width;
@@ -274,7 +283,7 @@ int UI_GetStringWidth(const char *str)
/* temporarily, does widget font */
void UI_DrawString(float x, float y, const char *str)
{
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
if (style->widget.kerning == 1)
BLF_enable(style->widget.uifont_id, BLF_KERNING_DEFAULT);
@@ -313,7 +322,17 @@ void uiStyleInit(void)
for(font= U.uifonts.first; font; font= font->next) {
if(font->uifont_id==UIFONT_DEFAULT) {
+#ifdef INTERNATIONAL
+ int unifont_size;
+ unsigned char *unifont_ttf= BLF_get_unifont(&unifont_size);
+
+ if(unifont_ttf)
+ font->blf_id= BLF_load_mem_unique("default", unifont_ttf, unifont_size);
+ else
+ font->blf_id= BLF_load_mem("default", (unsigned char*)datatoc_bfont_ttf, datatoc_bfont_ttf_size);
+#else
font->blf_id= BLF_load_mem("default", (unsigned char*)datatoc_bfont_ttf, datatoc_bfont_ttf_size);
+#endif
}
else {
font->blf_id= BLF_load(font->filename);
@@ -337,7 +356,7 @@ void uiStyleInit(void)
}
if(style==NULL) {
- ui_style_new(&U.uistyles, "Default Style");
+ ui_style_new(&U.uistyles, "Default Style", UIFONT_DEFAULT );
}
// XXX, this should be moved into a style, but for now best only load the monospaced font once.
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index 493ccebc19e..af515bf8061 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -68,6 +68,7 @@
#include "interface_intern.h"
#include "BLF_api.h"
+#include "BLF_translation.h"
void UI_template_fix_linking(void)
{
@@ -306,31 +307,31 @@ static const char *template_id_browse_tip(StructRNA *type)
{
if(type) {
switch(RNA_type_to_ID_code(type)) {
- case ID_SCE: return "Browse Scene to be linked";
- case ID_OB: return "Browse Object to be linked";
- case ID_ME: return "Browse Mesh Data to be linked";
- case ID_CU: return "Browse Curve Data to be linked";
- case ID_MB: return "Browse MetaBall Data to be linked";
- case ID_MA: return "Browse Material to be linked";
- case ID_TE: return "Browse Texture to be linked";
- case ID_IM: return "Browse Image to be linked";
- case ID_LT: return "Browse Lattice Data to be linked";
- case ID_LA: return "Browse Lamp Data to be linked";
- case ID_CA: return "Browse Camera Data to be linked";
- case ID_WO: return "Browse World Settings to be linked";
- case ID_SCR: return "Choose Screen lay-out";
- case ID_TXT: return "Browse Text to be linked";
- case ID_SPK: return "Browse Speaker Data to be linked";
- case ID_SO: return "Browse Sound to be linked";
- case ID_AR: return "Browse Armature data to be linked";
- case ID_AC: return "Browse Action to be linked";
- case ID_NT: return "Browse Node Tree to be linked";
- case ID_BR: return "Browse Brush to be linked";
- case ID_PA: return "Browse Particle System to be linked";
- case ID_GD: return "Browse Grease Pencil Data to be linked";
+ case ID_SCE: return N_("Browse Scene to be linked");
+ case ID_OB: return N_("Browse Object to be linked");
+ case ID_ME: return N_("Browse Mesh Data to be linked");
+ case ID_CU: return N_("Browse Curve Data to be linked");
+ case ID_MB: return N_("Browse MetaBall Data to be linked");
+ case ID_MA: return N_("Browse Material to be linked");
+ case ID_TE: return N_("Browse Texture to be linked");
+ case ID_IM: return N_("Browse Image to be linked");
+ case ID_LT: return N_("Browse Lattice Data to be linked");
+ case ID_LA: return N_("Browse Lamp Data to be linked");
+ case ID_CA: return N_("Browse Camera Data to be linked");
+ case ID_WO: return N_("Browse World Settings to be linked");
+ case ID_SCR: return N_("Choose Screen lay-out");
+ case ID_TXT: return N_("Browse Text to be linked");
+ case ID_SPK: return N_("Browse Speaker Data to be linked");
+ case ID_SO: return N_("Browse Sound to be linked");
+ case ID_AR: return N_("Browse Armature data to be linked");
+ case ID_AC: return N_("Browse Action to be linked");
+ case ID_NT: return N_("Browse Node Tree to be linked");
+ case ID_BR: return N_("Browse Brush to be linked");
+ case ID_PA: return N_("Browse Particle System to be linked");
+ case ID_GD: return N_("Browse Grease Pencil Data to be linked");
}
}
- return "Browse ID data to be linked";
+ return N_("Browse ID data to be linked");
}
static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, StructRNA *type, int flag, const char *newop, const char *openop, const char *unlinkop)
@@ -355,7 +356,8 @@ static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, Str
if(flag & UI_ID_PREVIEWS) {
- but= uiDefBlockButN(block, id_search_menu, MEM_dupallocN(template), "", 0, 0, UI_UNIT_X*6, UI_UNIT_Y*6, template_id_browse_tip(type));
+ but= uiDefBlockButN(block, id_search_menu, MEM_dupallocN(template), "", 0, 0, UI_UNIT_X*6, UI_UNIT_Y*6,
+ UI_translate_do_tooltip(template_id_browse_tip(type)));
if(type) {
but->icon= RNA_struct_ui_icon(type);
if (id) but->icon = ui_id_icon_get(C, id, 1);
@@ -367,7 +369,8 @@ static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, Str
uiLayoutRow(layout, 1);
}
else if(flag & UI_ID_BROWSE) {
- but= uiDefBlockButN(block, id_search_menu, MEM_dupallocN(template), "", 0, 0, UI_UNIT_X*1.6, UI_UNIT_Y, template_id_browse_tip(type));
+ but= uiDefBlockButN(block, id_search_menu, MEM_dupallocN(template), "", 0, 0, UI_UNIT_X*1.6, UI_UNIT_Y,
+ UI_translate_do_tooltip(template_id_browse_tip(type)));
if(type) {
but->icon= RNA_struct_ui_icon(type);
/* default dragging of icon for id browse buttons */
@@ -393,12 +396,12 @@ static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, Str
if(id->lib) {
if(id->flag & LIB_INDIRECT) {
but= uiDefIconBut(block, BUT, 0, ICON_LIBRARY_DATA_INDIRECT, 0,0,UI_UNIT_X,UI_UNIT_Y, NULL, 0, 0, 0, 0,
- "Indirect library datablock, cannot change");
+ UI_translate_do_tooltip(N_("Indirect library datablock, cannot change")));
uiButSetFlag(but, UI_BUT_DISABLED);
}
else {
but= uiDefIconBut(block, BUT, 0, ICON_LIBRARY_DATA_DIRECT, 0,0,UI_UNIT_X,UI_UNIT_Y, NULL, 0, 0, 0, 0,
- "Direct linked library datablock, click to make local");
+ UI_translate_do_tooltip(N_("Direct linked library datablock, click to make local")));
if(!id_make_local(id, 1 /* test */) || (idfrom && idfrom->lib))
uiButSetFlag(but, UI_BUT_DISABLED);
}
@@ -411,7 +414,8 @@ static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, Str
sprintf(str, "%d", id->us);
- but= uiDefBut(block, BUT, 0, str, 0,0,UI_UNIT_X + ((id->us < 10) ? 0:10), UI_UNIT_Y, NULL, 0, 0, 0, 0, "Displays number of users of this data, click to make a single-user copy");
+ but= uiDefBut(block, BUT, 0, str, 0,0,UI_UNIT_X + ((id->us < 10) ? 0:10), UI_UNIT_Y, NULL, 0, 0, 0, 0,
+ UI_translate_do_tooltip(_("Displays number of users of this data. Click to make a single-user copy")));
uiButSetNFunc(but, template_id_cb, MEM_dupallocN(template), SET_INT_IN_POINTER(UI_ID_ALONE));
if(!id_copy(id, NULL, 1 /* test only */) || (idfrom && idfrom->lib) || !editable)
@@ -429,11 +433,11 @@ static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, Str
int w= id?UI_UNIT_X: (flag & UI_ID_OPEN)? UI_UNIT_X*3: UI_UNIT_X*6;
if(newop) {
- but= uiDefIconTextButO(block, BUT, newop, WM_OP_INVOKE_DEFAULT, ICON_ZOOMIN, (id)? "": "New", 0, 0, w, UI_UNIT_Y, NULL);
+ but= uiDefIconTextButO(block, BUT, newop, WM_OP_INVOKE_DEFAULT, ICON_ZOOMIN, (id)? "": UI_translate_do_iface(N_("New")), 0, 0, w, UI_UNIT_Y, NULL);
uiButSetNFunc(but, template_id_cb, MEM_dupallocN(template), SET_INT_IN_POINTER(UI_ID_ADD_NEW));
}
else {
- but= uiDefIconTextBut(block, BUT, 0, ICON_ZOOMIN, (id)? "": "New", 0, 0, w, UI_UNIT_Y, NULL, 0, 0, 0, 0, NULL);
+ but= uiDefIconTextBut(block, BUT, 0, ICON_ZOOMIN, (id)? "": _("New"), 0, 0, w, UI_UNIT_Y, NULL, 0, 0, 0, 0, NULL);
uiButSetNFunc(but, template_id_cb, MEM_dupallocN(template), SET_INT_IN_POINTER(UI_ID_ADD_NEW));
}
@@ -445,11 +449,11 @@ static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, Str
int w= id?UI_UNIT_X: (flag & UI_ID_ADD_NEW)? UI_UNIT_X*3: UI_UNIT_X*6;
if(openop) {
- but= uiDefIconTextButO(block, BUT, openop, WM_OP_INVOKE_DEFAULT, ICON_FILESEL, (id)? "": "Open", 0, 0, w, UI_UNIT_Y, NULL);
+ but= uiDefIconTextButO(block, BUT, openop, WM_OP_INVOKE_DEFAULT, ICON_FILESEL, (id)? "": UI_translate_do_iface(N_("Open")), 0, 0, w, UI_UNIT_Y, NULL);
uiButSetNFunc(but, template_id_cb, MEM_dupallocN(template), SET_INT_IN_POINTER(UI_ID_OPEN));
}
else {
- but= uiDefIconTextBut(block, BUT, 0, ICON_FILESEL, (id)? "": "Open", 0, 0, w, UI_UNIT_Y, NULL, 0, 0, 0, 0, NULL);
+ but= uiDefIconTextBut(block, BUT, 0, ICON_FILESEL, (id)? "": UI_translate_do_iface(N_("Open")), 0, 0, w, UI_UNIT_Y, NULL, 0, 0, 0, 0, NULL);
uiButSetNFunc(but, template_id_cb, MEM_dupallocN(template), SET_INT_IN_POINTER(UI_ID_OPEN));
}
@@ -465,7 +469,8 @@ static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, Str
uiButSetNFunc(but, NULL, MEM_dupallocN(template), NULL);
}
else {
- but= uiDefIconBut(block, BUT, 0, ICON_X, 0, 0, UI_UNIT_X, UI_UNIT_Y, NULL, 0, 0, 0, 0, "Unlink datablock. Shift + Click to set users to zero, data will then not be saved");
+ but= uiDefIconBut(block, BUT, 0, ICON_X, 0, 0, UI_UNIT_X, UI_UNIT_Y, NULL, 0, 0, 0, 0,
+ UI_translate_do_tooltip(N_("Unlink datablock. Shift + Click to set users to zero, data will then not be saved")));
uiButSetNFunc(but, template_id_cb, MEM_dupallocN(template), SET_INT_IN_POINTER(UI_ID_DELETE));
if(RNA_property_flag(template->prop) & PROP_NEVER_NULL)
@@ -722,7 +727,8 @@ static uiLayout *draw_modifier(uiLayout *layout, Scene *scene, Object *ob, Modif
sprintf(str, "%s parent deform", md->name);
uiDefBut(block, LABEL, 0, str, 0, 0, 185, UI_UNIT_Y, NULL, 0.0, 0.0, 0.0, 0.0, "Modifier name");
- but = uiDefBut(block, BUT, 0, "Make Real", 0, 0, 80, 16, NULL, 0.0, 0.0, 0.0, 0.0, "Convert virtual modifier to a real modifier");
+ but = uiDefBut(block, BUT, 0, UI_translate_do_iface(N_("Make Real")), 0, 0, 80, 16, NULL, 0.0, 0.0, 0.0, 0.0,
+ UI_translate_do_tooltip(N_("Convert virtual modifier to a real modifier")));
uiButSetFunc(but, modifiers_convertToReal, ob, md);
}
else {
@@ -756,7 +762,8 @@ static uiLayout *draw_modifier(uiLayout *layout, Scene *scene, Object *ob, Modif
if ((ob->type==OB_MESH) && modifier_couldBeCage(scene, md) && (index <= lastCageIndex))
{
/* -- convert to rna ? */
- but = uiDefIconButBitI(block, TOG, eModifierMode_OnCage, 0, ICON_MESH_DATA, 0, 0, UI_UNIT_X-2, UI_UNIT_Y, &md->mode, 0.0, 0.0, 0.0, 0.0, "Apply modifier to editing cage during Editmode");
+ but = uiDefIconButBitI(block, TOG, eModifierMode_OnCage, 0, ICON_MESH_DATA, 0, 0, UI_UNIT_X-2, UI_UNIT_Y, &md->mode, 0.0, 0.0, 0.0, 0.0,
+ UI_translate_do_tooltip(N_("Apply modifier to editing cage during Editmode")));
if (index < cageIndex)
uiButSetFlag(but, UI_BUT_DISABLED);
uiButSetFunc(but, modifiers_setOnCage, ob, md);
@@ -768,7 +775,8 @@ static uiLayout *draw_modifier(uiLayout *layout, Scene *scene, Object *ob, Modif
if (ELEM3(md->type, eModifierType_Hook, eModifierType_Softbody, eModifierType_MeshDeform)) {
/* add disabled pre-tesselated button, so users could have
message for this modifiers */
- but = uiDefIconButBitI(block, TOG, eModifierMode_ApplyOnSpline, 0, ICON_SURFACE_DATA, 0, 0, UI_UNIT_X-2, UI_UNIT_Y, &md->mode, 0.0, 0.0, 0.0, 0.0, "This modifier could be applied on splines' points only");
+ but = uiDefIconButBitI(block, TOG, eModifierMode_ApplyOnSpline, 0, ICON_SURFACE_DATA, 0, 0, UI_UNIT_X-2, UI_UNIT_Y, &md->mode, 0.0, 0.0, 0.0, 0.0,
+ UI_translate_do_tooltip(N_("This modifier could be applied on splines' points only")));
uiButSetFlag(but, UI_BUT_DISABLED);
} else if (mti->type != eModifierTypeType_Constructive) {
/* constructive modifiers tesselates curve before applying */
@@ -818,17 +826,17 @@ static uiLayout *draw_modifier(uiLayout *layout, Scene *scene, Object *ob, Modif
}
else {
uiLayoutSetOperatorContext(row, WM_OP_INVOKE_DEFAULT);
- uiItemEnumO(row, "OBJECT_OT_modifier_apply", "Apply", 0, "apply_as", MODIFIER_APPLY_DATA);
+ uiItemEnumO(row, "OBJECT_OT_modifier_apply", UI_translate_do_iface(N_("Apply")), 0, "apply_as", MODIFIER_APPLY_DATA);
if (modifier_sameTopology(md))
- uiItemEnumO(row, "OBJECT_OT_modifier_apply", "Apply as Shape", 0, "apply_as", MODIFIER_APPLY_SHAPE);
+ uiItemEnumO(row, "OBJECT_OT_modifier_apply", UI_translate_do_iface(N_("Apply as Shape")), 0, "apply_as", MODIFIER_APPLY_SHAPE);
}
uiBlockClearButLock(block);
uiBlockSetButLock(block, ob && ob->id.lib, ERROR_LIBDATA_MESSAGE);
if (!ELEM5(md->type, eModifierType_Fluidsim, eModifierType_Softbody, eModifierType_ParticleSystem, eModifierType_Cloth, eModifierType_Smoke))
- uiItemO(row, "Copy", ICON_NONE, "OBJECT_OT_modifier_copy");
+ uiItemO(row, UI_translate_do_tooltip(N_("Copy")), ICON_NONE, "OBJECT_OT_modifier_copy");
}
/* result is the layout block inside the box, that we return so that modifier settings can be drawn */
@@ -1005,8 +1013,8 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con)
uiBlockSetEmboss(block, UI_EMBOSSN);
/* draw a ghost icon (for proxy) and also a lock beside it, to show that constraint is "proxy locked" */
- uiDefIconBut(block, BUT, B_CONSTRAINT_TEST, ICON_GHOST, xco+244, yco, 19, 19, NULL, 0.0, 0.0, 0.0, 0.0, "Proxy Protected");
- uiDefIconBut(block, BUT, B_CONSTRAINT_TEST, ICON_LOCKED, xco+262, yco, 19, 19, NULL, 0.0, 0.0, 0.0, 0.0, "Proxy Protected");
+ uiDefIconBut(block, BUT, B_CONSTRAINT_TEST, ICON_GHOST, xco+244, yco, 19, 19, NULL, 0.0, 0.0, 0.0, 0.0, UI_translate_do_tooltip(N_("Proxy Protected")));
+ uiDefIconBut(block, BUT, B_CONSTRAINT_TEST, ICON_LOCKED, xco+262, yco, 19, 19, NULL, 0.0, 0.0, 0.0, 0.0, UI_translate_do_tooltip(N_("Proxy Protected")));
uiBlockSetEmboss(block, UI_EMBOSS);
}
@@ -1192,14 +1200,14 @@ void uiTemplatePreview(uiLayout *layout, ID *id, int show_buttons, ID *parent, M
RNA_pointer_create(id, &RNA_Texture, tex, &texture_ptr);
uiLayoutRow(layout, 1);
- uiDefButS(block, ROW, B_MATPRV, "Texture", 0, 0,UI_UNIT_X*10,UI_UNIT_Y, pr_texture, 10, TEX_PR_TEXTURE, 0, 0, "");
+ uiDefButS(block, ROW, B_MATPRV, UI_translate_do_iface(N_("Texture")), 0, 0,UI_UNIT_X*10,UI_UNIT_Y, pr_texture, 10, TEX_PR_TEXTURE, 0, 0, "");
if(GS(parent->name) == ID_MA)
- uiDefButS(block, ROW, B_MATPRV, "Material", 0, 0,UI_UNIT_X*10,UI_UNIT_Y, pr_texture, 10, TEX_PR_OTHER, 0, 0, "");
+ uiDefButS(block, ROW, B_MATPRV, UI_translate_do_iface(N_("Material")), 0, 0,UI_UNIT_X*10,UI_UNIT_Y, pr_texture, 10, TEX_PR_OTHER, 0, 0, "");
else if(GS(parent->name) == ID_LA)
- uiDefButS(block, ROW, B_MATPRV, "Lamp", 0, 0,UI_UNIT_X*10,UI_UNIT_Y, pr_texture, 10, TEX_PR_OTHER, 0, 0, "");
+ uiDefButS(block, ROW, B_MATPRV, UI_translate_do_iface(N_("Lamp")), 0, 0,UI_UNIT_X*10,UI_UNIT_Y, pr_texture, 10, TEX_PR_OTHER, 0, 0, "");
else if(GS(parent->name) == ID_WO)
- uiDefButS(block, ROW, B_MATPRV, "World", 0, 0,UI_UNIT_X*10,UI_UNIT_Y, pr_texture, 10, TEX_PR_OTHER, 0, 0, "");
- uiDefButS(block, ROW, B_MATPRV, "Both", 0, 0,UI_UNIT_X*10,UI_UNIT_Y, pr_texture, 10, TEX_PR_BOTH, 0, 0, "");
+ uiDefButS(block, ROW, B_MATPRV, UI_translate_do_iface(N_("World")), 0, 0,UI_UNIT_X*10,UI_UNIT_Y, pr_texture, 10, TEX_PR_OTHER, 0, 0, "");
+ uiDefButS(block, ROW, B_MATPRV, UI_translate_do_iface(N_("Both")), 0, 0,UI_UNIT_X*10,UI_UNIT_Y, pr_texture, 10, TEX_PR_BOTH, 0, 0, "");
/* Alpha buton for texture preview */
if(*pr_texture!=TEX_PR_OTHER) {
@@ -1290,21 +1298,23 @@ static void colorband_buttons_large(uiLayout *layout, uiBlock *block, ColorBand
if(coba==NULL) return;
- bt= uiDefBut(block, BUT, 0, "Add", 0+xoffs,line1_y,40,UI_UNIT_Y, NULL, 0, 0, 0, 0, "Add a new color stop to the colorband");
+ bt= uiDefBut(block, BUT, 0, UI_translate_do_iface(N_("Add")), 0+xoffs,line1_y,40,UI_UNIT_Y, NULL, 0, 0, 0, 0,
+ UI_translate_do_tooltip(N_("Add a new color stop to the colorband")));
uiButSetNFunc(bt, colorband_add_cb, MEM_dupallocN(cb), coba);
- bt= uiDefBut(block, BUT, 0, "Delete", 45+xoffs,line1_y,45,UI_UNIT_Y, NULL, 0, 0, 0, 0, "Delete the active position");
+ bt= uiDefBut(block, BUT, 0, UI_translate_do_iface(N_("Delete")), 45+xoffs,line1_y,45,UI_UNIT_Y, NULL, 0, 0, 0, 0,
+ UI_translate_do_tooltip(N_("Delete the active position")));
uiButSetNFunc(bt, colorband_del_cb, MEM_dupallocN(cb), coba);
/* XXX, todo for later - convert to operator - campbell */
- bt= uiDefBut(block, BUT, 0, "F", 95+xoffs,line1_y,20,UI_UNIT_Y, NULL, 0, 0, 0, 0, "Flip colorband");
+ bt= uiDefBut(block, BUT, 0, "F", 95+xoffs,line1_y,20,UI_UNIT_Y, NULL, 0, 0, 0, 0, UI_translate_do_tooltip(N_("Flip colorband")));
uiButSetNFunc(bt, colorband_flip_cb, MEM_dupallocN(cb), coba);
- uiDefButS(block, NUM, 0, "", 120+xoffs,line1_y,80, UI_UNIT_Y, &coba->cur, 0.0, (float)(MAX2(0, coba->tot-1)), 0, 0, "Choose active color stop");
+ uiDefButS(block, NUM, 0, "", 120+xoffs,line1_y,80, UI_UNIT_Y, &coba->cur, 0.0, (float)(MAX2(0, coba->tot-1)), 0, 0, UI_translate_do_tooltip(N_("Choose active color stop")));
- bt= uiDefButS(block, MENU, 0, "Interpolation %t|Ease %x1|Cardinal %x3|Linear %x0|B-Spline %x2|Constant %x4",
- 210+xoffs, line1_y, 90, UI_UNIT_Y, &coba->ipotype, 0.0, 0.0, 0, 0, "Set interpolation between color stops");
+ bt= uiDefButS(block, MENU, 0, UI_translate_do_iface(N_("Interpolation %t|Ease %x1|Cardinal %x3|Linear %x0|B-Spline %x2|Constant %x4")),
+ 210+xoffs, line1_y, 90, UI_UNIT_Y, &coba->ipotype, 0.0, 0.0, 0, 0, UI_translate_do_tooltip(N_("Set interpolation between color stops")));
uiButSetNFunc(bt, rna_update_cb, MEM_dupallocN(cb), NULL);
uiBlockEndAlign(block);
@@ -1333,11 +1343,13 @@ static void colorband_buttons_small(uiLayout *layout, uiBlock *block, ColorBand
float xs= butr->xmin;
uiBlockBeginAlign(block);
- bt= uiDefBut(block, BUT, 0, "Add", xs,butr->ymin+UI_UNIT_Y,2.0f*unit,UI_UNIT_Y, NULL, 0, 0, 0, 0, "Add a new color stop to the colorband");
+ bt= uiDefBut(block, BUT, 0, UI_translate_do_iface(N_("Add")), xs,butr->ymin+UI_UNIT_Y,2.0f*unit,UI_UNIT_Y, NULL, 0, 0, 0, 0,
+ UI_translate_do_tooltip(N_("Add a new color stop to the colorband")));
uiButSetNFunc(bt, colorband_add_cb, MEM_dupallocN(cb), coba);
- bt= uiDefBut(block, BUT, 0, "Delete", xs+2.0f*unit,butr->ymin+UI_UNIT_Y,1.5f*unit,UI_UNIT_Y, NULL, 0, 0, 0, 0, "Delete the active position");
+ bt= uiDefBut(block, BUT, 0, UI_translate_do_iface(N_("Delete")), xs+2.0f*unit,butr->ymin+UI_UNIT_Y,1.5f*unit,UI_UNIT_Y, NULL, 0, 0, 0, 0,
+ UI_translate_do_tooltip(N_("Delete the active position")));
uiButSetNFunc(bt, colorband_del_cb, MEM_dupallocN(cb), coba);
- bt= uiDefBut(block, BUT, 0, "F", xs+3.5f*unit,butr->ymin+UI_UNIT_Y,0.5f*unit,UI_UNIT_Y, NULL, 0, 0, 0, 0, "Flip the color ramp");
+ bt= uiDefBut(block, BUT, 0, "F", xs+3.5f*unit,butr->ymin+UI_UNIT_Y,0.5f*unit,UI_UNIT_Y, NULL, 0, 0, 0, 0, UI_translate_do_tooltip(N_("Flip the color ramp")));
uiButSetNFunc(bt, colorband_flip_cb, MEM_dupallocN(cb), coba);
uiBlockEndAlign(block);
@@ -1348,8 +1360,9 @@ static void colorband_buttons_small(uiLayout *layout, uiBlock *block, ColorBand
uiItemR(layout, &ptr, "color", 0, "", ICON_NONE);
}
- bt= uiDefButS(block, MENU, 0, "Interpolation %t|Ease %x1|Cardinal %x3|Linear %x0|B-Spline %x2|Constant %x4",
- xs+10.0f*unit, butr->ymin+UI_UNIT_Y, unit*4, UI_UNIT_Y, &coba->ipotype, 0.0, 0.0, 0, 0, "Set interpolation between color stops");
+ bt= uiDefButS(block, MENU, 0, UI_translate_do_tooltip(N_("Interpolation %t|Ease %x1|Cardinal %x3|Linear %x0|B-Spline %x2|Constant %x4")),
+ xs+10.0f*unit, butr->ymin+UI_UNIT_Y, unit*4, UI_UNIT_Y, &coba->ipotype, 0.0, 0.0, 0, 0,
+ UI_translate_do_tooltip(N_("Set interpolation between color stops")));
uiButSetNFunc(bt, rna_update_cb, MEM_dupallocN(cb), NULL);
bt= uiDefBut(block, BUT_COLORBAND, 0, "", xs,butr->ymin,butr->xmax-butr->xmin,UI_UNIT_Y, coba, 0, 0, 0, 0, "");
@@ -1600,10 +1613,10 @@ static uiBlock *curvemap_clipping_func(bContext *C, struct ARegion *ar, void *cu
uiButSetFunc(bt, curvemap_buttons_setclip, cumap, NULL);
uiBlockBeginAlign(block);
- uiDefButF(block, NUM, 0, "Min X ", 0,4*UI_UNIT_Y,width,UI_UNIT_Y, &cumap->clipr.xmin, -100.0, cumap->clipr.xmax, 10, 0, "");
- uiDefButF(block, NUM, 0, "Min Y ", 0,3*UI_UNIT_Y,width,UI_UNIT_Y, &cumap->clipr.ymin, -100.0, cumap->clipr.ymax, 10, 0, "");
- uiDefButF(block, NUM, 0, "Max X ", 0,2*UI_UNIT_Y,width,UI_UNIT_Y, &cumap->clipr.xmax, cumap->clipr.xmin, 100.0, 10, 0, "");
- uiDefButF(block, NUM, 0, "Max Y ", 0,UI_UNIT_Y,width,UI_UNIT_Y, &cumap->clipr.ymax, cumap->clipr.ymin, 100.0, 10, 0, "");
+ uiDefButF(block, NUM, 0, UI_translate_do_iface(N_("Min X ")), 0,4*UI_UNIT_Y,width,UI_UNIT_Y, &cumap->clipr.xmin, -100.0, cumap->clipr.xmax, 10, 0, "");
+ uiDefButF(block, NUM, 0, UI_translate_do_iface(N_("Min Y ")), 0,3*UI_UNIT_Y,width,UI_UNIT_Y, &cumap->clipr.ymin, -100.0, cumap->clipr.ymax, 10, 0, "");
+ uiDefButF(block, NUM, 0, UI_translate_do_iface(N_("Max X ")), 0,2*UI_UNIT_Y,width,UI_UNIT_Y, &cumap->clipr.xmax, cumap->clipr.xmin, 100.0, 10, 0, "");
+ uiDefButF(block, NUM, 0, UI_translate_do_iface(N_("Max Y ")), 0,UI_UNIT_Y,width,UI_UNIT_Y, &cumap->clipr.ymax, cumap->clipr.ymin, 100.0, 10, 0, "");
uiBlockSetDirection(block, UI_RIGHT);
@@ -1652,12 +1665,12 @@ static uiBlock *curvemap_tools_func(bContext *C, struct ARegion *ar, void *cumap
block= uiBeginBlock(C, ar, "curvemap_tools_func", UI_EMBOSS);
uiBlockSetButmFunc(block, curvemap_tools_dofunc, cumap_v);
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset View", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 1, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vector Handle", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 2, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Auto Handle", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 3, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Horizontal", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 4, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Extrapolated", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 5, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Curve", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, UI_translate_do_iface(N_("Reset View")), 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 1, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, UI_translate_do_iface(N_("Vector Handle")), 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 2, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, UI_translate_do_iface(N_("Auto Handle")), 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 3, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, UI_translate_do_iface(N_("Extend Horizontal")), 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 4, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, UI_translate_do_iface(N_("Extend Extrapolated")), 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 5, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, UI_translate_do_iface(N_("Reset Curve")), 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "");
uiBlockSetDirection(block, UI_RIGHT);
uiTextBoundsBlock(block, 50);
@@ -1674,10 +1687,10 @@ static uiBlock *curvemap_brush_tools_func(bContext *C, struct ARegion *ar, void
block= uiBeginBlock(C, ar, "curvemap_tools_func", UI_EMBOSS);
uiBlockSetButmFunc(block, curvemap_tools_dofunc, cumap_v);
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset View", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 1, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vector Handle", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 2, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Auto Handle", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 3, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Curve", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, UI_translate_do_iface(N_("Reset View")), 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 1, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, UI_translate_do_iface(N_("Vector Handle")), 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 2, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, UI_translate_do_iface(N_("Auto Handle")), 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 3, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, UI_translate_do_iface(N_("Reset Curve")), 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "");
uiBlockSetDirection(block, UI_RIGHT);
uiTextBoundsBlock(block, 50);
@@ -1794,24 +1807,24 @@ static void curvemap_buttons_layout(uiLayout *layout, PointerRNA *ptr, char labe
uiBlockSetEmboss(block, UI_EMBOSSN);
- bt= uiDefIconBut(block, BUT, 0, ICON_ZOOMIN, 0, 0, dx, dx, NULL, 0.0, 0.0, 0.0, 0.0, "Zoom in");
+ bt= uiDefIconBut(block, BUT, 0, ICON_ZOOMIN, 0, 0, dx, dx, NULL, 0.0, 0.0, 0.0, 0.0, UI_translate_do_tooltip(N_("Zoom in")));
uiButSetFunc(bt, curvemap_buttons_zoom_in, cumap, NULL);
- bt= uiDefIconBut(block, BUT, 0, ICON_ZOOMOUT, 0, 0, dx, dx, NULL, 0.0, 0.0, 0.0, 0.0, "Zoom out");
+ bt= uiDefIconBut(block, BUT, 0, ICON_ZOOMOUT, 0, 0, dx, dx, NULL, 0.0, 0.0, 0.0, 0.0, UI_translate_do_tooltip(N_("Zoom out")));
uiButSetFunc(bt, curvemap_buttons_zoom_out, cumap, NULL);
if(brush)
- bt= uiDefIconBlockBut(block, curvemap_brush_tools_func, cumap, 0, ICON_MODIFIER, 0, 0, dx, dx, "Tools");
+ bt= uiDefIconBlockBut(block, curvemap_brush_tools_func, cumap, 0, ICON_MODIFIER, 0, 0, dx, dx, UI_translate_do_tooltip(N_("Tools")));
else
- bt= uiDefIconBlockBut(block, curvemap_tools_func, cumap, 0, ICON_MODIFIER, 0, 0, dx, dx, "Tools");
+ bt= uiDefIconBlockBut(block, curvemap_tools_func, cumap, 0, ICON_MODIFIER, 0, 0, dx, dx, UI_translate_do_tooltip(N_("Tools")));
uiButSetNFunc(bt, rna_update_cb, MEM_dupallocN(cb), NULL);
if(cumap->flag & CUMA_DO_CLIP) icon= ICON_CLIPUV_HLT; else icon= ICON_CLIPUV_DEHLT;
- bt= uiDefIconBlockBut(block, curvemap_clipping_func, cumap, 0, icon, 0, 0, dx, dx, "Clipping Options");
+ bt= uiDefIconBlockBut(block, curvemap_clipping_func, cumap, 0, icon, 0, 0, dx, dx, UI_translate_do_tooltip(N_("Clipping Options")));
uiButSetNFunc(bt, rna_update_cb, MEM_dupallocN(cb), NULL);
- bt= uiDefIconBut(block, BUT, 0, ICON_X, 0, 0, dx, dx, NULL, 0.0, 0.0, 0.0, 0.0, "Delete points");
+ bt= uiDefIconBut(block, BUT, 0, ICON_X, 0, 0, dx, dx, NULL, 0.0, 0.0, 0.0, 0.0, UI_translate_do_tooltip(N_("Delete points")));
uiButSetNFunc(bt, curvemap_buttons_delete, MEM_dupallocN(cb), cumap);
uiBlockSetEmboss(block, UI_EMBOSS);
@@ -1830,7 +1843,8 @@ static void curvemap_buttons_layout(uiLayout *layout, PointerRNA *ptr, char labe
uiItemR(uiLayoutColumn(split, 0), ptr, "white_level", UI_ITEM_R_EXPAND, NULL, ICON_NONE);
uiLayoutRow(layout, 0);
- bt=uiDefBut(block, BUT, 0, "Reset", 0, 0, UI_UNIT_X*10, UI_UNIT_Y, NULL, 0.0f, 0.0f, 0, 0, "Reset Black/White point and curves");
+ bt=uiDefBut(block, BUT, 0, UI_translate_do_iface(N_("Reset")), 0, 0, UI_UNIT_X*10, UI_UNIT_Y, NULL, 0.0f, 0.0f, 0, 0,
+ UI_translate_do_tooltip(N_("Reset Black/White point and curves")));
uiButSetNFunc(bt, curvemap_buttons_reset, MEM_dupallocN(cb), cumap);
}
@@ -2449,16 +2463,18 @@ void uiTemplateRunningJobs(uiLayout *layout, bContext *C)
(void)ui_abs; // UNUSED
uiDefIconBut(block, BUT, handle_event, ICON_PANEL_CLOSE,
- 0, UI_UNIT_Y*0.1, UI_UNIT_X*0.8, UI_UNIT_Y*0.8, NULL, 0.0f, 0.0f, 0, 0, "Stop this job");
+ 0, UI_UNIT_Y*0.1, UI_UNIT_X*0.8, UI_UNIT_Y*0.8, NULL, 0.0f, 0.0f, 0, 0, UI_translate_do_tooltip(N_("Stop this job")));
uiDefBut(block, PROGRESSBAR, 0, WM_jobs_name(wm, owner),
- UI_UNIT_X, 0, 100, UI_UNIT_Y, NULL, 0.0f, 0.0f, WM_jobs_progress(wm, owner), 0, "Progress");
+ UI_UNIT_X, 0, 100, UI_UNIT_Y, NULL, 0.0f, 0.0f, WM_jobs_progress(wm, owner), 0, UI_translate_do_tooltip(N_("Progress")));
uiLayoutRow(layout, 0);
}
if(WM_jobs_test(wm, screen))
- uiDefIconTextBut(block, BUT, B_STOPCAST, ICON_CANCEL, "Capture", 0,0,85,UI_UNIT_Y, NULL, 0.0f, 0.0f, 0, 0, "Stop screencast");
+ uiDefIconTextBut(block, BUT, B_STOPCAST, ICON_CANCEL, UI_translate_do_iface(N_("Capture")), 0,0,85,UI_UNIT_Y, NULL, 0.0f, 0.0f, 0, 0,
+ UI_translate_do_tooltip(N_("Stop screencast")));
if(screen->animtimer)
- uiDefIconTextBut(block, BUT, B_STOPANIM, ICON_CANCEL, "Anim Player", 0,0,100,UI_UNIT_Y, NULL, 0.0f, 0.0f, 0, 0, "Stop animation playback");
+ uiDefIconTextBut(block, BUT, B_STOPANIM, ICON_CANCEL, UI_translate_do_tooltip(N_("Anim Player")), 0,0,100,UI_UNIT_Y, NULL, 0.0f, 0.0f, 0, 0,
+ UI_translate_do_tooltip(N_("Stop animation playback")));
}
/************************* Reports for Last Operator Template **************************/
@@ -2520,7 +2536,7 @@ void uiTemplateReportsBanner(uiLayout *layout, bContext *C)
uiBlockSetEmboss(block, UI_EMBOSSN);
if (reports->list.first != reports->list.last)
- uiDefIconButO(block, BUT, "UI_OT_reports_to_textblock", WM_OP_INVOKE_REGION_WIN, icon, 2, 0, UI_UNIT_X, UI_UNIT_Y, "Click to see rest of reports in textblock: 'Recent Reports'");
+ uiDefIconButO(block, BUT, "UI_OT_reports_to_textblock", WM_OP_INVOKE_REGION_WIN, icon, 2, 0, UI_UNIT_X, UI_UNIT_Y, UI_translate_do_tooltip(N_("Click to see rest of reports in textblock: 'Recent Reports'")));
else
uiDefIconBut(block, LABEL, 0, icon, 2, 0, UI_UNIT_X, UI_UNIT_Y, NULL, 0.0f, 0.0f, 0, 0, "");
diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c
index a3f56192cb5..a49060eaca2 100644
--- a/source/blender/editors/interface/interface_utils.c
+++ b/source/blender/editors/interface/interface_utils.c
@@ -37,6 +37,8 @@
#include "BLI_utildefines.h"
+#include "BLF_translation.h"
+
#include "BKE_context.h"
@@ -114,7 +116,7 @@ uiBut *uiDefAutoButR(uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, int ind
}
case PROP_COLLECTION: {
char text[256];
- sprintf(text, "%d items", RNA_property_collection_length(ptr, prop));
+ sprintf(text, UI_translate_do_iface(N_("%d items")), RNA_property_collection_length(ptr, prop));
but= uiDefBut(block, LABEL, 0, text, x1, y1, x2, y2, NULL, 0, 0, 0, 0, NULL);
uiButSetFlag(but, UI_BUT_DISABLED);
break;
diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c
index 9242ddc2f60..18db1c8c894 100644
--- a/source/blender/editors/interface/view2d.c
+++ b/source/blender/editors/interface/view2d.c
@@ -168,7 +168,7 @@ static void view2d_masks(View2D *v2d)
void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy)
{
short tot_changed= 0, init= 0;
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
/* initialise data if there is a need for such */
if ((v2d->flag & V2D_IS_INITIALISED) == 0) {
diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c
index 460c2f038a4..0aaf6fe3bc6 100644
--- a/source/blender/editors/interface/view2d_ops.c
+++ b/source/blender/editors/interface/view2d_ops.c
@@ -51,6 +51,7 @@
#include "ED_screen.h"
#include "UI_view2d.h"
+#include "UI_interface.h"
#include "PIL_time.h" /* USER_ZOOM_CONT */
@@ -1587,7 +1588,7 @@ static void VIEW2D_OT_scroller_activate(wmOperatorType *ot)
static int reset_exec(bContext *C, wmOperator *UNUSED(op))
{
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
ARegion *ar= CTX_wm_region(C);
View2D *v2d= &ar->v2d;
int winx, winy;
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index d41d3245623..8951df9221e 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -43,6 +43,8 @@
#include "BLI_rand.h"
#include "BLI_utildefines.h"
+#include "BLF_translation.h"
+
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_screen.h"
@@ -1347,7 +1349,7 @@ void ED_area_prevspace(bContext *C, ScrArea *sa)
static const char *editortype_pup(void)
{
- return(
+ const char *types= N_(
"Editor type:%t"
"|3D View %x1"
@@ -1382,6 +1384,8 @@ static const char *editortype_pup(void)
"|Python Console %x18"
);
+
+ return UI_translate_do_iface(types);
}
static void spacefunc(struct bContext *C, void *UNUSED(arg1), void *UNUSED(arg2))
@@ -1403,8 +1407,7 @@ int ED_area_header_switchbutton(const bContext *C, uiBlock *block, int yco)
but= uiDefIconTextButC(block, ICONTEXTROW, 0, ICON_VIEW3D,
editortype_pup(), xco, yco, UI_UNIT_X+10, UI_UNIT_Y,
&(sa->butspacetype), 1.0, SPACEICONMAX, 0, 0,
- "Displays current editor type. "
- "Click for menu of available types");
+ UI_translate_do_tooltip(N_("Displays current editor type. Click for menu of available types")));
uiButSetFunc(but, spacefunc, NULL, NULL);
uiButClearFlag(but, UI_BUT_UNDO); /* skip undo on screen buttons */
@@ -1449,7 +1452,7 @@ int ED_area_header_standardbuttons(const bContext *C, uiBlock *block, int yco)
void ED_region_panels(const bContext *C, ARegion *ar, int vertical, const char *context, int contextnr)
{
ScrArea *sa= CTX_wm_area(C);
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
uiBlock *block;
PanelType *pt;
Panel *panel;
@@ -1637,7 +1640,7 @@ void ED_region_panels_init(wmWindowManager *wm, ARegion *ar)
void ED_region_header(const bContext *C, ARegion *ar)
{
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
uiBlock *block;
uiLayout *layout;
HeaderType *ht;
diff --git a/source/blender/editors/space_buttons/CMakeLists.txt b/source/blender/editors/space_buttons/CMakeLists.txt
index 631e2adea34..a9aaf6a6d58 100644
--- a/source/blender/editors/space_buttons/CMakeLists.txt
+++ b/source/blender/editors/space_buttons/CMakeLists.txt
@@ -21,6 +21,7 @@
set(INC
../include
+ ../../blenfont
../../blenkernel
../../blenlib
../../blenloader
diff --git a/source/blender/editors/space_buttons/SConscript b/source/blender/editors/space_buttons/SConscript
index a4270f1f59a..740353bc1f0 100644
--- a/source/blender/editors/space_buttons/SConscript
+++ b/source/blender/editors/space_buttons/SConscript
@@ -3,7 +3,7 @@ Import ('env')
sources = env.Glob('*.c')
-incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
+incs = '../include ../../blenfont ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
incs += ' ../../makesrna ../../render/extern/include ../../blenloader'
diff --git a/source/blender/editors/space_buttons/buttons_header.c b/source/blender/editors/space_buttons/buttons_header.c
index e631718b0cb..b18b5373240 100644
--- a/source/blender/editors/space_buttons/buttons_header.c
+++ b/source/blender/editors/space_buttons/buttons_header.c
@@ -37,6 +37,7 @@
#include "BLI_blenlib.h"
#include "BLI_utildefines.h"
+#include "BLF_translation.h"
#include "BKE_context.h"
@@ -124,24 +125,23 @@ void buttons_header_buttons(const bContext *C, ARegion *ar)
#define BUTTON_HEADER_CTX(_ctx, _icon, _tip) \
if(sbuts->pathflag & (1<<_ctx)) { \
- but= uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, _icon, xco+=BUT_UNIT_X, yco, BUT_UNIT_X, UI_UNIT_Y, &(sbuts->mainb), 0.0, (float)_ctx, 0, 0, _tip); \
+ but= uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, _icon, xco+=BUT_UNIT_X, yco, BUT_UNIT_X, UI_UNIT_Y, &(sbuts->mainb), 0.0, (float)_ctx, 0, 0, UI_translate_do_tooltip(_tip)); \
uiButClearFlag(but, UI_BUT_UNDO); \
} \
-
- BUTTON_HEADER_CTX(BCONTEXT_RENDER, ICON_SCENE, "Render")
- BUTTON_HEADER_CTX(BCONTEXT_SCENE, ICON_SCENE_DATA, "Scene");
- BUTTON_HEADER_CTX(BCONTEXT_WORLD, ICON_WORLD, "World");
- BUTTON_HEADER_CTX(BCONTEXT_OBJECT, ICON_OBJECT_DATA, "Object");
- BUTTON_HEADER_CTX(BCONTEXT_CONSTRAINT, ICON_CONSTRAINT, "Object Constraints");
- BUTTON_HEADER_CTX(BCONTEXT_MODIFIER, ICON_MODIFIER, "Object Modifiers");
- BUTTON_HEADER_CTX(BCONTEXT_DATA, sbuts->dataicon, "Object Data");
- BUTTON_HEADER_CTX(BCONTEXT_BONE, ICON_BONE_DATA, "Bone");
- BUTTON_HEADER_CTX(BCONTEXT_BONE_CONSTRAINT, ICON_CONSTRAINT_BONE, "Bone Constraints");
- BUTTON_HEADER_CTX(BCONTEXT_MATERIAL, ICON_MATERIAL, "Material");
- BUTTON_HEADER_CTX(BCONTEXT_TEXTURE, ICON_TEXTURE, "Textures");
- BUTTON_HEADER_CTX(BCONTEXT_PARTICLE, ICON_PARTICLES, "Particles");
- BUTTON_HEADER_CTX(BCONTEXT_PHYSICS, ICON_PHYSICS, "Physics");
+ BUTTON_HEADER_CTX(BCONTEXT_RENDER, ICON_SCENE, N_("Render"))
+ BUTTON_HEADER_CTX(BCONTEXT_SCENE, ICON_SCENE_DATA, N_("Scene"));
+ BUTTON_HEADER_CTX(BCONTEXT_WORLD, ICON_WORLD, N_("World"));
+ BUTTON_HEADER_CTX(BCONTEXT_OBJECT, ICON_OBJECT_DATA, N_("Object"));
+ BUTTON_HEADER_CTX(BCONTEXT_CONSTRAINT, ICON_CONSTRAINT, N_("Object Constraints"));
+ BUTTON_HEADER_CTX(BCONTEXT_MODIFIER, ICON_MODIFIER, N_("Object Modifiers"));
+ BUTTON_HEADER_CTX(BCONTEXT_DATA, sbuts->dataicon, N_("Object Data"));
+ BUTTON_HEADER_CTX(BCONTEXT_BONE, ICON_BONE_DATA, N_("Bone"));
+ BUTTON_HEADER_CTX(BCONTEXT_BONE_CONSTRAINT, ICON_CONSTRAINT_BONE, N_("Bone Constraints"));
+ BUTTON_HEADER_CTX(BCONTEXT_MATERIAL, ICON_MATERIAL, N_("Material"));
+ BUTTON_HEADER_CTX(BCONTEXT_TEXTURE, ICON_TEXTURE, N_("Textures"));
+ BUTTON_HEADER_CTX(BCONTEXT_PARTICLE, ICON_PARTICLES, N_("Particles"));
+ BUTTON_HEADER_CTX(BCONTEXT_PHYSICS, ICON_PHYSICS, N_("Physics"));
#undef BUTTON_HEADER_CTX
diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c
index 5f9b91e9cc2..b2b734159ff 100644
--- a/source/blender/editors/space_file/file_draw.c
+++ b/source/blender/editors/space_file/file_draw.c
@@ -50,6 +50,7 @@
#include "BKE_main.h"
#include "BLF_api.h"
+#include "BLF_translation.h"
#include "IMB_imbuf_types.h"
@@ -181,7 +182,7 @@ void file_draw_buttons(const bContext *C, ARegion *ar)
but = uiDefButTextO(block, TEX, "FILE_OT_directory", 0, "",
min_x, line1_y, line1_w-chan_offs, btn_h,
params->dir, 0.0, (float)FILE_MAX-1, 0, 0,
- "File path");
+ UI_translate_do_tooltip(N_("File path")));
uiButSetCompleteFunc(but, autocomplete_directory, NULL);
uiButSetFlag(but, UI_BUT_NO_UTF8);
@@ -189,7 +190,7 @@ void file_draw_buttons(const bContext *C, ARegion *ar)
but = uiDefBut(block, TEX, B_FS_FILENAME, "",
min_x, line2_y, line2_w-chan_offs, btn_h,
params->file, 0.0, (float)FILE_MAXFILE-1, 0, 0,
- overwrite_alert ?"File name, overwrite existing" : "File name");
+ UI_translate_do_tooltip(overwrite_alert ?N_("File name, overwrite existing") : N_("File name")));
uiButSetCompleteFunc(but, autocomplete_file, NULL);
uiButSetFlag(but, UI_BUT_NO_UTF8);
@@ -209,13 +210,13 @@ void file_draw_buttons(const bContext *C, ARegion *ar)
but = uiDefIconButO(block, BUT, "FILE_OT_filenum", 0, ICON_ZOOMOUT,
min_x + line2_w + separator - chan_offs, line2_y,
btn_fn_w, btn_h,
- "Decrement the filename number");
+ UI_translate_do_tooltip(N_("Decrement the filename number")));
RNA_int_set(uiButGetOperatorPtrRNA(but), "increment", -1);
but = uiDefIconButO(block, BUT, "FILE_OT_filenum", 0, ICON_ZOOMIN,
min_x + line2_w + separator + btn_fn_w - chan_offs, line2_y,
btn_fn_w, btn_h,
- "Increment the filename number");
+ UI_translate_do_tooltip(N_("Increment the filename number")));
RNA_int_set(uiButGetOperatorPtrRNA(but), "increment", 1);
uiBlockEndAlign(block);
}
@@ -226,9 +227,9 @@ void file_draw_buttons(const bContext *C, ARegion *ar)
uiDefButO(block, BUT, "FILE_OT_execute", WM_OP_EXEC_REGION_WIN, params->title,
max_x - loadbutton, line1_y, loadbutton, btn_h,
params->title);
- uiDefButO(block, BUT, "FILE_OT_cancel", WM_OP_EXEC_REGION_WIN, "Cancel",
+ uiDefButO(block, BUT, "FILE_OT_cancel", WM_OP_EXEC_REGION_WIN, UI_translate_do_iface(N_("Cancel")),
max_x - loadbutton, line2_y, loadbutton, btn_h,
- "Cancel");
+ UI_translate_do_tooltip(N_("Cancel")));
}
uiEndBlock(C, block);
@@ -295,7 +296,7 @@ static void file_draw_icon(uiBlock *block, char *path, int sx, int sy, int icon,
static void file_draw_string(int sx, int sy, const char* string, float width, int height, short align)
{
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
uiFontStyle fs = style->widgetlabel;
rcti rect;
char fname[FILE_MAXFILE];
diff --git a/source/blender/editors/space_file/file_panels.c b/source/blender/editors/space_file/file_panels.c
index 959b1ddf1b5..37dce293d77 100644
--- a/source/blender/editors/space_file/file_panels.c
+++ b/source/blender/editors/space_file/file_panels.c
@@ -37,6 +37,8 @@
#include "BLI_blenlib.h"
#include "BLI_utildefines.h"
+#include "BLF_translation.h"
+
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
#include "DNA_userdef_types.h"
@@ -144,7 +146,7 @@ static void file_panel_bookmarks(const bContext *C, Panel *pa)
if(sfile) {
row= uiLayoutRow(pa->layout, 0);
- uiItemO(row, "Add", ICON_ZOOMIN, "file.bookmark_add");
+ uiItemO(row, UI_translate_do_iface(N_("Add")), ICON_ZOOMIN, "file.bookmark_add");
uiItemL(row, NULL, ICON_NONE);
file_panel_category(C, pa, FS_CATEGORY_BOOKMARKS, &sfile->bookmarknr, ICON_BOOKMARKS, 1, 0);
diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c
index a8e7e08a7e0..1e113abfcd2 100644
--- a/source/blender/editors/space_file/filesel.c
+++ b/source/blender/editors/space_file/filesel.c
@@ -403,7 +403,7 @@ float file_shorten_string(char* string, float w, int front)
float file_string_width(const char* str)
{
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
uiStyleFontSet(&style->widget);
return BLF_width(style->widget.uifont_id, str);
}
@@ -413,12 +413,12 @@ float file_font_pointsize(void)
#if 0
float s;
char tmp[2] = "X";
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
uiStyleFontSet(&style->widget);
s = BLF_height(style->widget.uifont_id, tmp);
return style->widget.points;
#else
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
uiStyleFontSet(&style->widget);
return style->widget.points * UI_DPI_FAC;
#endif
diff --git a/source/blender/editors/space_graph/CMakeLists.txt b/source/blender/editors/space_graph/CMakeLists.txt
index 80205ad5564..28383b29b36 100644
--- a/source/blender/editors/space_graph/CMakeLists.txt
+++ b/source/blender/editors/space_graph/CMakeLists.txt
@@ -21,6 +21,7 @@
set(INC
../include
+ ../../blenfont
../../blenkernel
../../blenlib
../../blenloader
diff --git a/source/blender/editors/space_graph/SConscript b/source/blender/editors/space_graph/SConscript
index 75d0927192b..fe8846d2c30 100644
--- a/source/blender/editors/space_graph/SConscript
+++ b/source/blender/editors/space_graph/SConscript
@@ -3,7 +3,7 @@ Import ('env')
sources = env.Glob('*.c')
-incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../makesrna ../../imbuf'
+incs = '../include ../../blenfont ../../blenlib ../../blenkernel ../../makesdna ../../makesrna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
incs += ' #/intern/audaspace/intern ../../blenloader'
diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c
index ffb43b753af..28fd1cd3304 100644
--- a/source/blender/editors/space_graph/graph_buttons.c
+++ b/source/blender/editors/space_graph/graph_buttons.c
@@ -46,6 +46,8 @@
#include "BLI_rand.h"
#include "BLI_utildefines.h"
+#include "BLF_translation.h"
+
#include "BKE_context.h"
#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
@@ -750,7 +752,8 @@ static void graph_panel_modifiers(const bContext *C, Panel *pa)
block= uiLayoutGetBlock(row);
// XXX for now, this will be a operator button which calls a 'add modifier' operator
- uiDefButO(block, BUT, "GRAPH_OT_fmodifier_add", WM_OP_INVOKE_REGION_WIN, "Add Modifier", 10, 0, 150, 20, "Adds a new F-Curve Modifier for the active F-Curve");
+ uiDefButO(block, BUT, "GRAPH_OT_fmodifier_add", WM_OP_INVOKE_REGION_WIN, UI_translate_do_iface(N_("Add Modifier")), 10, 0, 150, 20,
+ UI_translate_do_tooltip(N_("Adds a new F-Curve Modifier for the active F-Curve")));
/* copy/paste (as sub-row)*/
row= uiLayoutRow(row, 1);
diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c
index bd2e8077eab..75e13b24ede 100644
--- a/source/blender/editors/space_info/space_info.c
+++ b/source/blender/editors/space_info/space_info.c
@@ -41,6 +41,8 @@
#include "BLI_rand.h"
#include "BLI_utildefines.h"
+#include "BLF_translation.h"
+
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_screen.h"
@@ -278,7 +280,7 @@ static void recent_files_menu_draw(const bContext *UNUSED(C), Menu *menu)
uiItemStringO(layout, BLI_path_basename(recent->filepath), ICON_FILE_BLEND, "WM_OT_open_mainfile", "filepath", recent->filepath);
}
} else {
- uiItemL(layout, "No Recent Files", ICON_NONE);
+ uiItemL(layout, UI_translate_do_iface(N_("No Recent Files")), ICON_NONE);
}
}
diff --git a/source/blender/editors/space_logic/CMakeLists.txt b/source/blender/editors/space_logic/CMakeLists.txt
index 44471902040..f4bb255e11f 100644
--- a/source/blender/editors/space_logic/CMakeLists.txt
+++ b/source/blender/editors/space_logic/CMakeLists.txt
@@ -21,10 +21,11 @@
set(INC
../include
- ../interface
+ ../../blenfont
../../blenkernel
../../blenlib
../../blenloader
+ ../../editors/interface
../../makesdna
../../makesrna
../../windowmanager
diff --git a/source/blender/editors/space_logic/logic_window.c b/source/blender/editors/space_logic/logic_window.c
index 00f8f488b3c..3a4371e8bb9 100644
--- a/source/blender/editors/space_logic/logic_window.c
+++ b/source/blender/editors/space_logic/logic_window.c
@@ -4548,7 +4548,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
/* ****************** Controllers ****************** */
xco= 420; yco= 170; width= 300;
- layout= uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, xco, yco, width, 20, U.uistyles.first);
+ layout= uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, xco, yco, width, 20, UI_GetStyle());
row = uiLayoutRow(layout, 1);
uiDefBlockBut(block, controller_menu, NULL, "Controllers", xco-10, yco, 300, UI_UNIT_Y, ""); /* replace this with uiLayout stuff later */
@@ -4651,7 +4651,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
/* ****************** Sensors ****************** */
xco= 10; yco= 170; width= 340;
- layout= uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, xco, yco, width, 20, U.uistyles.first);
+ layout= uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, xco, yco, width, 20, UI_GetStyle());
row = uiLayoutRow(layout, 1);
uiDefBlockBut(block, sensor_menu, NULL, "Sensors", xco-10, yco, 300, UI_UNIT_Y, ""); /* replace this with uiLayout stuff later */
@@ -4717,7 +4717,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
/* ****************** Actuators ****************** */
xco= 800; yco= 170; width= 340;
- layout= uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, xco, yco, width, 20, U.uistyles.first);
+ layout= uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, xco, yco, width, 20, UI_GetStyle());
row = uiLayoutRow(layout, 1);
uiDefBlockBut(block, actuator_menu, NULL, "Actuators", xco-10, yco, 300, UI_UNIT_Y, ""); /* replace this with uiLayout stuff later */
diff --git a/source/blender/editors/space_nla/CMakeLists.txt b/source/blender/editors/space_nla/CMakeLists.txt
index b05d157365d..819e80d7b2e 100644
--- a/source/blender/editors/space_nla/CMakeLists.txt
+++ b/source/blender/editors/space_nla/CMakeLists.txt
@@ -21,6 +21,7 @@
set(INC
../include
+ ../../blenfont
../../blenkernel
../../blenlib
../../blenloader
diff --git a/source/blender/editors/space_nla/SConscript b/source/blender/editors/space_nla/SConscript
index 51ce829ed8d..6738f3380b4 100644
--- a/source/blender/editors/space_nla/SConscript
+++ b/source/blender/editors/space_nla/SConscript
@@ -3,7 +3,7 @@ Import ('env')
sources = env.Glob('*.c')
-incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../makesrna ../../imbuf'
+incs = '../include ../../blenfont ../../blenlib ../../blenkernel ../../makesdna ../../makesrna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include ../../blenloader'
env.BlenderLib ( 'bf_editors_space_nla', sources, Split(incs), [], libtype=['core'], priority=[85] )
diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c
index 4392e49e5d7..5e1f2745559 100644
--- a/source/blender/editors/space_nla/nla_buttons.c
+++ b/source/blender/editors/space_nla/nla_buttons.c
@@ -45,6 +45,8 @@
#include "BLI_editVert.h"
#include "BLI_rand.h"
+#include "BLF_translation.h"
+
#include "BKE_nla.h"
#include "BKE_context.h"
#include "BKE_screen.h"
@@ -446,7 +448,8 @@ static void nla_panel_modifiers(const bContext *C, Panel *pa)
// XXX for now, this will be a operator button which calls a temporary 'add modifier' operator
// FIXME: we need to set the only-active property so that this will only add modifiers for the active strip (not all selected)
- uiDefButO(block, BUT, "NLA_OT_fmodifier_add", WM_OP_INVOKE_REGION_WIN, "Add Modifier", 10, 0, 150, 20, "Adds a new F-Modifier for the active NLA Strip");
+ uiDefButO(block, BUT, "NLA_OT_fmodifier_add", WM_OP_INVOKE_REGION_WIN, UI_translate_do_iface(N_("Add Modifier")), 10, 0, 150, 20,
+ UI_translate_do_tooltip(N_("Adds a new F-Modifier for the active NLA Strip")));
/* copy/paste (as sub-row)*/
row= uiLayoutRow(row, 1);
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index c1b114d5436..e713ed5a678 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -303,7 +303,7 @@ static void node_update_basis(const bContext *C, bNodeTree *ntree, bNode *node)
RNA_pointer_create(&ntree->id, &RNA_Node, node, &ptr);
layout= uiBlockLayout(node->block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL,
- locx+NODE_DYS, dy, node->butr.xmax, NODE_DY, U.uistyles.first);
+ locx+NODE_DYS, dy, node->butr.xmax, NODE_DY, UI_GetStyle());
node->typeinfo->uifunc(layout, (bContext *)C, &ptr);
diff --git a/source/blender/editors/space_node/node_header.c b/source/blender/editors/space_node/node_header.c
index 7077f4a7497..996e05afdef 100644
--- a/source/blender/editors/space_node/node_header.c
+++ b/source/blender/editors/space_node/node_header.c
@@ -44,6 +44,8 @@
#include "BLI_blenlib.h"
#include "BLI_utildefines.h"
+#include "BLF_translation.h"
+
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_screen.h"
@@ -216,6 +218,7 @@ static void node_add_menu(bContext *C, uiLayout *layout, void *arg_nodeclass)
}
}
+#define IFACE_(msgid) UI_translate_do_iface(msgid)
static void node_menu_add(const bContext *C, Menu *menu)
{
SpaceNode *snode= CTX_wm_space_node(C);
@@ -225,39 +228,40 @@ static void node_menu_add(const bContext *C, Menu *menu)
uiLayoutSetActive(layout, 0);
if(snode->treetype==NTREE_SHADER) {
- uiItemMenuF(layout, "Input", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_INPUT));
- uiItemMenuF(layout, "Output", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OUTPUT));
- uiItemMenuF(layout, "Color", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_COLOR));
- uiItemMenuF(layout, "Vector", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_VECTOR));
- uiItemMenuF(layout, "Convertor", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_CONVERTOR));
- uiItemMenuF(layout, "Group", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_GROUP));
- uiItemMenuF(layout, "Dynamic", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_DYNAMIC));
- uiItemMenuF(layout, "Layout", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_LAYOUT));
+ uiItemMenuF(layout, IFACE_(N_("Input")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_INPUT));
+ uiItemMenuF(layout, IFACE_(N_("Output")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OUTPUT));
+ uiItemMenuF(layout, IFACE_(N_("Color")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_COLOR));
+ uiItemMenuF(layout, IFACE_(N_("Vector")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_VECTOR));
+ uiItemMenuF(layout, IFACE_(N_("Convertor")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_CONVERTOR));
+ uiItemMenuF(layout, IFACE_(N_("Group")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_GROUP));
+ uiItemMenuF(layout, IFACE_(N_("Dynamic")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_DYNAMIC));
+ uiItemMenuF(layout, IFACE_(N_("Layout")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_LAYOUT));
}
else if(snode->treetype==NTREE_COMPOSIT) {
- uiItemMenuF(layout, "Input", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_INPUT));
- uiItemMenuF(layout, "Output", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OUTPUT));
- uiItemMenuF(layout, "Color", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_COLOR));
- uiItemMenuF(layout, "Vector", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_VECTOR));
- uiItemMenuF(layout, "Filter", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_FILTER));
- uiItemMenuF(layout, "Convertor", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_CONVERTOR));
- uiItemMenuF(layout, "Matte", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_MATTE));
- uiItemMenuF(layout, "Distort", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_DISTORT));
- uiItemMenuF(layout, "Group", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_GROUP));
- uiItemMenuF(layout, "Layout", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_LAYOUT));
+ uiItemMenuF(layout, IFACE_(N_("Input")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_INPUT));
+ uiItemMenuF(layout, IFACE_(N_("Output")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OUTPUT));
+ uiItemMenuF(layout, IFACE_(N_("Color")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_COLOR));
+ uiItemMenuF(layout, IFACE_(N_("Vector")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_VECTOR));
+ uiItemMenuF(layout, IFACE_(N_("Filter")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_FILTER));
+ uiItemMenuF(layout, IFACE_(N_("Convertor")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_CONVERTOR));
+ uiItemMenuF(layout, IFACE_(N_("Matte")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_MATTE));
+ uiItemMenuF(layout, IFACE_(N_("Distort")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_DISTORT));
+ uiItemMenuF(layout, IFACE_(N_("Group")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_GROUP));
+ uiItemMenuF(layout, IFACE_(N_("Layout")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_LAYOUT));
}
else if(snode->treetype==NTREE_TEXTURE) {
- uiItemMenuF(layout, "Input", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_INPUT));
- uiItemMenuF(layout, "Output", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OUTPUT));
- uiItemMenuF(layout, "Color", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_COLOR));
- uiItemMenuF(layout, "Patterns", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_PATTERN));
- uiItemMenuF(layout, "Textures", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_TEXTURE));
- uiItemMenuF(layout, "Convertor", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_CONVERTOR));
- uiItemMenuF(layout, "Distort", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_DISTORT));
- uiItemMenuF(layout, "Group", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_GROUP));
- uiItemMenuF(layout, "Layout", 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_LAYOUT));
+ uiItemMenuF(layout, IFACE_(N_("Input")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_INPUT));
+ uiItemMenuF(layout, IFACE_(N_("Output")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OUTPUT));
+ uiItemMenuF(layout, IFACE_(N_("Color")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_COLOR));
+ uiItemMenuF(layout, IFACE_(N_("Patterns")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_PATTERN));
+ uiItemMenuF(layout, IFACE_(N_("Textures")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_TEXTURE));
+ uiItemMenuF(layout, IFACE_(N_("Convertor")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_CONVERTOR));
+ uiItemMenuF(layout, IFACE_(N_("Distort")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_DISTORT));
+ uiItemMenuF(layout, IFACE_(N_("Group")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_GROUP));
+ uiItemMenuF(layout, IFACE_(N_("Layout")), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_LAYOUT));
}
}
+#undef IFACE_
void node_menus_register(void)
{
diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c
index 980e27ce116..0776ca752a9 100644
--- a/source/blender/editors/space_view3d/view3d_header.c
+++ b/source/blender/editors/space_view3d/view3d_header.c
@@ -47,6 +47,8 @@
#include "BLI_editVert.h"
#include "BLI_utildefines.h"
+#include "BLF_translation.h"
+
#include "BKE_context.h"
#include "BKE_depsgraph.h"
#include "BKE_effect.h"
@@ -269,16 +271,29 @@ void VIEW3D_OT_layers(wmOperatorType *ot)
RNA_def_boolean(ot->srna, "toggle", 1, "Toggle", "Toggle the layer");
}
+static int modeselect_addmode(char *str, const char *title, int id, int icon)
+{
+ static char formatstr[] = "|%s %%x%d %%i%d";
+
+ if(UI_translate_iface())
+ return sprintf(str, formatstr, BLF_gettext(title), id, icon);
+ else
+ return sprintf(str, formatstr, title, id, icon);
+}
+
static char *view3d_modeselect_pup(Scene *scene)
{
Object *ob= OBACT;
static char string[256];
- static char formatstr[] = "|%s %%x%d %%i%d";
+ const char *title= N_("Mode: %%t");
char *str = string;
- str += sprintf(str, "Mode: %%t");
+ if(U.transopts&USER_TR_IFACE)
+ title= BLF_gettext(title);
+
+ sprintf(str, title);
- str += sprintf(str, formatstr, "Object Mode", OB_MODE_OBJECT, ICON_OBJECT_DATA);
+ str += modeselect_addmode(str, N_("Object Mode"), OB_MODE_OBJECT, ICON_OBJECT_DATA);
if(ob==NULL || ob->data==NULL) return string;
if(ob->id.lib) return string;
@@ -289,31 +304,31 @@ static char *view3d_modeselect_pup(Scene *scene)
|| (ob->type == OB_CURVE) || (ob->type == OB_SURF) || (ob->type == OB_FONT)
|| (ob->type == OB_MBALL) || (ob->type == OB_LATTICE))) {
- str += sprintf(str, formatstr, "Edit Mode", OB_MODE_EDIT, ICON_EDITMODE_HLT);
+ str += modeselect_addmode(str, N_("Edit Mode"), OB_MODE_EDIT, ICON_EDITMODE_HLT);
}
else if (ob->type == OB_ARMATURE) {
if (ob->mode & OB_MODE_POSE)
- str += sprintf(str, formatstr, "Edit Mode", OB_MODE_EDIT|OB_MODE_POSE, ICON_EDITMODE_HLT);
+ str += modeselect_addmode(str, N_("Edit Mode"), OB_MODE_EDIT|OB_MODE_POSE, ICON_EDITMODE_HLT);
else
- str += sprintf(str, formatstr, "Edit Mode", OB_MODE_EDIT, ICON_EDITMODE_HLT);
+ str += modeselect_addmode(str, N_("Edit Mode"), OB_MODE_EDIT, ICON_EDITMODE_HLT);
}
if (ob->type == OB_MESH) {
- str += sprintf(str, formatstr, "Sculpt Mode", OB_MODE_SCULPT, ICON_SCULPTMODE_HLT);
- str += sprintf(str, formatstr, "Vertex Paint", OB_MODE_VERTEX_PAINT, ICON_VPAINT_HLT);
- str += sprintf(str, formatstr, "Texture Paint", OB_MODE_TEXTURE_PAINT, ICON_TPAINT_HLT);
- str += sprintf(str, formatstr, "Weight Paint", OB_MODE_WEIGHT_PAINT, ICON_WPAINT_HLT);
+ str += modeselect_addmode(str, N_("Sculpt Mode"), OB_MODE_SCULPT, ICON_SCULPTMODE_HLT);
+ str += modeselect_addmode(str, N_("Vertex Paint"), OB_MODE_VERTEX_PAINT, ICON_VPAINT_HLT);
+ str += modeselect_addmode(str, N_("Texture Paint"), OB_MODE_TEXTURE_PAINT, ICON_TPAINT_HLT);
+ str += modeselect_addmode(str, N_("Weight Paint"), OB_MODE_WEIGHT_PAINT, ICON_WPAINT_HLT);
}
}
/* if active object is an armature */
if (ob->type==OB_ARMATURE) {
- str += sprintf(str, formatstr, "Pose Mode", OB_MODE_POSE, ICON_POSE_HLT);
+ str += modeselect_addmode(str, N_("Pose Mode"), OB_MODE_POSE, ICON_POSE_HLT);
}
if (ob->particlesystem.first || modifiers_findByType(ob, eModifierType_Cloth) || modifiers_findByType(ob, eModifierType_Softbody)) {
- str += sprintf(str, formatstr, "Particle Mode", OB_MODE_PARTICLE_EDIT, ICON_PARTICLEMODE);
+ str += modeselect_addmode(str, N_("Particle Mode"), OB_MODE_PARTICLE_EDIT, ICON_PARTICLEMODE);
}
(void)str;
return (string);
@@ -455,6 +470,7 @@ void uiTemplateEditModeSelection(uiLayout *layout, struct bContext *C)
}
}
+#define TIP_(msgid) UI_translate_do_tooltip(msgid)
void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
{
bScreen *screen= CTX_wm_screen(C);
@@ -488,7 +504,7 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
uiBlockBeginAlign(block);
uiDefIconTextButS(block, MENU, B_MODESELECT, object_mode_icon(v3d->modeselect), view3d_modeselect_pup(scene) ,
- 0,0,126 * dpi_fac, UI_UNIT_Y, &(v3d->modeselect), 0, 0, 0, 0, "Mode");
+ 0,0,126 * dpi_fac, UI_UNIT_Y, &(v3d->modeselect), 0, 0, 0, 0, TIP_(N_("Mode")));
uiBlockEndAlign(block);
/* Draw type */
@@ -522,11 +538,11 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
block= uiLayoutGetBlock(row);
if(v3d->twflag & V3D_USE_MANIPULATOR) {
- but= uiDefIconButBitC(block, TOG, V3D_MANIP_TRANSLATE, B_MAN_TRANS, ICON_MAN_TRANS, 0,0,UI_UNIT_X,UI_UNIT_Y, &v3d->twtype, 1.0, 0.0, 0, 0, "Translate manipulator mode");
+ but= uiDefIconButBitC(block, TOG, V3D_MANIP_TRANSLATE, B_MAN_TRANS, ICON_MAN_TRANS, 0,0,UI_UNIT_X,UI_UNIT_Y, &v3d->twtype, 1.0, 0.0, 0, 0, TIP_(N_("Translate manipulator mode")));
uiButClearFlag(but, UI_BUT_UNDO); /* skip undo on screen buttons */
- but= uiDefIconButBitC(block, TOG, V3D_MANIP_ROTATE, B_MAN_ROT, ICON_MAN_ROT, 0,0,UI_UNIT_X,UI_UNIT_Y, &v3d->twtype, 1.0, 0.0, 0, 0, "Rotate manipulator mode");
+ but= uiDefIconButBitC(block, TOG, V3D_MANIP_ROTATE, B_MAN_ROT, ICON_MAN_ROT, 0,0,UI_UNIT_X,UI_UNIT_Y, &v3d->twtype, 1.0, 0.0, 0, 0, TIP_(N_("Rotate manipulator mode")));
uiButClearFlag(but, UI_BUT_UNDO); /* skip undo on screen buttons */
- but= uiDefIconButBitC(block, TOG, V3D_MANIP_SCALE, B_MAN_SCALE, ICON_MAN_SCALE, 0,0,UI_UNIT_X,UI_UNIT_Y, &v3d->twtype, 1.0, 0.0, 0, 0, "Scale manipulator mode");
+ but= uiDefIconButBitC(block, TOG, V3D_MANIP_SCALE, B_MAN_SCALE, ICON_MAN_SCALE, 0,0,UI_UNIT_X,UI_UNIT_Y, &v3d->twtype, 1.0, 0.0, 0, 0, TIP_(N_("Scale manipulator mode")));
uiButClearFlag(but, UI_BUT_UNDO); /* skip undo on screen buttons */
}
@@ -534,8 +550,8 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
v3d->twmode = 0;
}
- str_menu = BIF_menustringTransformOrientation(C, "Orientation");
- but= uiDefButC(block, MENU, B_MAN_MODE, str_menu,0,0,70 * dpi_fac, UI_UNIT_Y, &v3d->twmode, 0, 0, 0, 0, "Transform Orientation");
+ str_menu = BIF_menustringTransformOrientation(C, N_("Orientation"));
+ but= uiDefButC(block, MENU, B_MAN_MODE, str_menu,0,0,70 * dpi_fac, UI_UNIT_Y, &v3d->twmode, 0, 0, 0, 0, TIP_(N_("Transform Orientation")));
uiButClearFlag(but, UI_BUT_UNDO); /* skip undo on screen buttons */
MEM_freeN((void *)str_menu);
}
@@ -555,4 +571,4 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
uiTemplateEditModeSelection(layout, C);
}
-
+#undef TIP_
diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c
index a2aed67821d..ddea89e1cdb 100644
--- a/source/blender/editors/space_view3d/view3d_toolbar.c
+++ b/source/blender/editors/space_view3d/view3d_toolbar.c
@@ -48,6 +48,8 @@
#include "BLI_utildefines.h"
#include "BLI_ghash.h"
+#include "BLF_translation.h"
+
#include "BKE_context.h"
#include "BKE_idprop.h"
#include "BKE_global.h"
@@ -80,7 +82,7 @@ static void view3d_panel_operator_redo_header(const bContext *C, Panel *pa)
wmOperator *op= WM_operator_last_redo(C);
if(op) BLI_strncpy(pa->drawname, op->type->name, sizeof(pa->drawname));
- else BLI_strncpy(pa->drawname, "Operator", sizeof(pa->drawname));
+ else BLI_strncpy(pa->drawname, N_("Operator"), sizeof(pa->drawname));
}
static void view3d_panel_operator_redo_operator(const bContext *C, Panel *pa, wmOperator *op)
diff --git a/source/blender/editors/transform/CMakeLists.txt b/source/blender/editors/transform/CMakeLists.txt
index e44cc1f5df3..c4305ed6a9f 100644
--- a/source/blender/editors/transform/CMakeLists.txt
+++ b/source/blender/editors/transform/CMakeLists.txt
@@ -21,6 +21,7 @@
set(INC
../include
+ ../../blenfont
../../blenkernel
../../blenlib
../../blenloader
diff --git a/source/blender/editors/transform/SConscript b/source/blender/editors/transform/SConscript
index edc2156a07b..f2d5baecfb3 100644
--- a/source/blender/editors/transform/SConscript
+++ b/source/blender/editors/transform/SConscript
@@ -3,7 +3,7 @@ Import ('env')
sources = env.Glob('*.c')
-incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
+incs = '../include ../../blenfont ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
incs += ' ../../render/extern/include'
incs += ' ../../gpu ../../makesrna ../../blenloader'
diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c
index 7556c5ae110..cd4cbc77c49 100644
--- a/source/blender/editors/transform/transform_orientations.c
+++ b/source/blender/editors/transform/transform_orientations.c
@@ -50,6 +50,8 @@
#include "BLI_editVert.h"
#include "BLI_utildefines.h"
+#include "BLF_translation.h"
+
//#include "BIF_editmesh.h"
//#include "BIF_interface.h"
//#include "BIF_space.h"
@@ -60,6 +62,8 @@
#include "RNA_define.h"
+#include "UI_interface.h"
+
#include "transform.h"
/* *********************** TransSpace ************************** */
@@ -406,14 +410,18 @@ EnumPropertyItem *BIF_enumTransformOrientation(bContext *C)
}
const char * BIF_menustringTransformOrientation(const bContext *C, const char *title) {
- char menu[] = "%t|Global%x0|Local%x1|Gimbal%x4|Normal%x2|View%x3";
+ const char* menu = N_("%t|Global%x0|Local%x1|Gimbal%x4|Normal%x2|View%x3");
ListBase *transform_spaces = &CTX_data_scene(C)->transform_spaces;
TransformOrientation *ts;
int i = V3D_MANIP_CUSTOM;
char *str_menu, *p;
+
+ if(UI_translate_iface()) {
+ title= BLF_gettext(title);
+ menu= BLF_gettext(menu);
+ }
-
- str_menu = MEM_callocN(strlen(menu) + strlen(title) + 1 + 40 * BIF_countTransformOrientation(C), "UserTransSpace from matrix");
+ str_menu = MEM_callocN(strlen(menu) + strlen(title) + 1 + 40 * BIF_countTransformOrientation(C), UI_translate_do_tooltip(N_("UserTransSpace from matrix")));
p = str_menu;
p += sprintf(str_menu, "%s", title);
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index d3ac09dc812..05b16f869a8 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -510,8 +510,8 @@ extern UserDef U; /* from blenkernel blender.c */
/* transopts */
#define USER_TR_TOOLTIPS (1 << 0)
-#define USER_TR_BUTTONS (1 << 1)
-#define USER_TR_MENUS (1 << 2)
+#define USER_TR_IFACE (1 << 1)
+/*#define USER_TR_MENUS (1 << 2) deprecated*/
/*#define USER_TR_FILESELECT (1 << 3) deprecated*/
/*#define USER_TR_TEXTEDIT (1 << 4) deprecated*/
#define USER_DOTRANSLATE (1 << 5)
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 8af4fe7b76b..26bae68d5a4 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -49,7 +49,10 @@ struct Scene;
extern BlenderRNA BLENDER_RNA;
extern StructRNA RNA_Action;
extern StructRNA RNA_ActionConstraint;
+extern StructRNA RNA_ActionFCurves;
extern StructRNA RNA_ActionGroup;
+extern StructRNA RNA_ActionGroups;
+extern StructRNA RNA_ActionPoseMarkers;
extern StructRNA RNA_Actuator;
extern StructRNA RNA_ActuatorSensor;
extern StructRNA RNA_Addon;
@@ -190,6 +193,7 @@ extern StructRNA RNA_DelaySensor;
extern StructRNA RNA_DisplaceModifier;
extern StructRNA RNA_DistortedNoiseTexture;
extern StructRNA RNA_DomainFluidSettings;
+extern StructRNA RNA_DopeSheet;
extern StructRNA RNA_Driver;
extern StructRNA RNA_DriverTarget;
extern StructRNA RNA_DriverVariable;
@@ -260,11 +264,13 @@ extern StructRNA RNA_Key;
extern StructRNA RNA_KeyConfig;
extern StructRNA RNA_KeyMap;
extern StructRNA RNA_KeyMapItem;
+extern StructRNA RNA_KeyMapItems;
extern StructRNA RNA_KeyboardSensor;
extern StructRNA RNA_Keyframe;
extern StructRNA RNA_KeyingSet;
extern StructRNA RNA_KeyingSetInfo;
extern StructRNA RNA_KeyingSetPath;
+extern StructRNA RNA_KeyingSetsAll;
extern StructRNA RNA_KinematicConstraint;
extern StructRNA RNA_Lamp;
extern StructRNA RNA_LampSkySettings;
@@ -552,6 +558,7 @@ extern StructRNA RNA_UnknownType;
extern StructRNA RNA_UserPreferences;
extern StructRNA RNA_UserPreferencesEdit;
extern StructRNA RNA_UserPreferencesFilePaths;
+extern StructRNA RNA_UserPreferencesInput;
extern StructRNA RNA_UserPreferencesSystem;
extern StructRNA RNA_UserPreferencesView;
extern StructRNA RNA_UserSolidLight;
@@ -573,13 +580,13 @@ extern StructRNA RNA_WipeSequence;
extern StructRNA RNA_WoodTexture;
extern StructRNA RNA_World;
extern StructRNA RNA_WorldAmbientOcclusion;
+extern StructRNA RNA_WorldLighting;
extern StructRNA RNA_WorldMistSettings;
extern StructRNA RNA_WorldStarsSettings;
extern StructRNA RNA_WorldTextureSlot;
extern StructRNA RNA_XnorController;
extern StructRNA RNA_XorController;
-
/* Pointer
*
* These functions will fill in RNA pointers, this can be done in three ways:
@@ -689,6 +696,7 @@ int RNA_enum_name(EnumPropertyItem *item, const int value, const char **name);
int RNA_enum_description(EnumPropertyItem *item, const int value, const char **description);
void RNA_property_enum_items(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, EnumPropertyItem **item, int *totitem, int *free);
+void RNA_property_enum_items_gettexted(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, EnumPropertyItem **item, int *totitem, int *free);
int RNA_property_enum_value(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const char *identifier, int *value);
int RNA_property_enum_identifier(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **identifier);
int RNA_property_enum_name(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **name);
diff --git a/source/blender/makesrna/SConscript b/source/blender/makesrna/SConscript
index 10b20fc795a..d0002eda30b 100644
--- a/source/blender/makesrna/SConscript
+++ b/source/blender/makesrna/SConscript
@@ -62,4 +62,7 @@ if env['OURPLATFORM'] == 'linux':
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
incs += ' ' + env['BF_PTHREADS_INC']
+if env['WITH_BF_INTERNATIONAL']:
+ defs.append('INTERNATIONAL')
+
env.BlenderLib ( 'bf_rna', objs, Split(incs), defines=defs, libtype=['core','player'], priority = [165,20] )
diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt
index c2b46a3b69a..966bc8f100c 100644
--- a/source/blender/makesrna/intern/CMakeLists.txt
+++ b/source/blender/makesrna/intern/CMakeLists.txt
@@ -219,6 +219,10 @@ if(WITH_OPENCOLLADA)
add_definitions(-DWITH_COLLADA)
endif()
+if(WITH_INTERNATIONAL)
+ add_definitions(-DINTERNATIONAL)
+endif()
+
# Build makesrna executable
blender_include_dirs(
.
diff --git a/source/blender/makesrna/intern/SConscript b/source/blender/makesrna/intern/SConscript
index 5c2580e4b90..ef05875fe86 100644
--- a/source/blender/makesrna/intern/SConscript
+++ b/source/blender/makesrna/intern/SConscript
@@ -98,6 +98,9 @@ if env['OURPLATFORM'] == 'linux':
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
incs += ' ' + env['BF_PTHREADS_INC']
+if env['WITH_BF_INTERNATIONAL']:
+ defs.append('INTERNATIONAL')
+
makesrna_tool.Append(CPPDEFINES=defs)
makesrna_tool.Append (CPPPATH = Split(incs))
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index 5dad7112eb9..b7709416a75 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -43,6 +43,9 @@
#include "BLI_dynstr.h"
#include "BLI_ghash.h"
+#include "BLF_api.h"
+#include "BLF_translation.h"
+
#include "BKE_animsys.h"
#include "BKE_context.h"
#include "BKE_idprop.h"
@@ -449,8 +452,10 @@ static const char *rna_ensure_property_identifier(PropertyRNA *prop)
static const char *rna_ensure_property_description(PropertyRNA *prop)
{
+ const char *description= NULL;
+
if(prop->magic == RNA_MAGIC)
- return prop->description;
+ description= prop->description;
else {
/* attempt to get the local ID values */
IDProperty *idp_ui= rna_idproperty_ui(prop);
@@ -458,19 +463,36 @@ static const char *rna_ensure_property_description(PropertyRNA *prop)
if(idp_ui) {
IDProperty *item= IDP_GetPropertyTypeFromGroup(idp_ui, "description", IDP_STRING);
if(item)
- return IDP_String(item);
+ description= IDP_String(item);
}
- return ((IDProperty*)prop)->name; /* XXX - not correct */
+ if(description == NULL)
+ description= ((IDProperty*)prop)->name; /* XXX - not correct */
}
+
+#ifdef INTERNATIONAL
+ if((U.transopts&USER_DOTRANSLATE) && (U.transopts&USER_TR_TOOLTIPS))
+ description= BLF_gettext(description);
+#endif
+
+ return description;
}
static const char *rna_ensure_property_name(PropertyRNA *prop)
{
+ const char *name;
+
if(prop->magic == RNA_MAGIC)
- return prop->name;
+ name= prop->name;
else
- return ((IDProperty*)prop)->name;
+ name= ((IDProperty*)prop)->name;
+
+#ifdef INTERNATIONAL
+ if((U.transopts&USER_DOTRANSLATE) && (U.transopts&USER_TR_IFACE))
+ name= BLF_gettext(name);
+#endif
+
+ return name;
}
/* Structs */
@@ -1125,6 +1147,7 @@ void RNA_property_enum_items(bContext *C, PointerRNA *ptr, PropertyRNA *prop, En
*totitem= tot;
}
+
}
else {
*item= eprop->item;
@@ -1133,6 +1156,45 @@ void RNA_property_enum_items(bContext *C, PointerRNA *ptr, PropertyRNA *prop, En
}
}
+void RNA_property_enum_items_gettexted(bContext *C, PointerRNA *ptr, PropertyRNA *prop, EnumPropertyItem **item, int *totitem, int *free)
+{
+ RNA_property_enum_items(C, ptr, prop, item, totitem, free);
+
+#ifdef INTERNATIONAL
+ if((U.transopts&USER_DOTRANSLATE) && (U.transopts&USER_TR_IFACE)) {
+ int i;
+ EnumPropertyItem *nitem;
+
+ if(*free) {
+ nitem= *item;
+ } else {
+ int totitem= 0;
+
+ /* count */
+ for(i=0; (*item)[i].identifier; i++)
+ totitem++;
+
+ nitem= MEM_callocN(sizeof(EnumPropertyItem)*(totitem+1), "enum_items_gettexted");
+
+ for(i=0; (*item)[i].identifier; i++)
+ nitem[i]= (*item)[i];
+
+ *free= 1;
+ }
+
+ for(i=0; nitem[i].identifier; i++) {
+ if( nitem[i].name )
+ nitem[i].name = BLF_gettext(nitem[i].name);
+ if( nitem[i].description )
+ nitem[i].description = BLF_gettext(nitem[i].description);
+ }
+
+ *item= nitem;
+ }
+#endif
+}
+
+
int RNA_property_enum_value(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const char *identifier, int *value)
{
EnumPropertyItem *item, *item_array;
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index 7a5899afd73..b9a53acd6f4 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -44,6 +44,7 @@
#include "WM_types.h"
#include "BLI_utildefines.h"
+#include "BLF_translation.h"
#include "BKE_sound.h"
@@ -76,6 +77,11 @@ static void rna_userdef_dpi_update(Main *bmain, Scene *scene, PointerRNA *ptr)
WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL); /* refresh region sizes */
}
+static void rna_userdef_language_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *UNUSED(ptr))
+{
+ BLF_lang_set(NULL);
+}
+
static void rna_userdef_show_manipulator_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
UserDef *userdef = (UserDef *)ptr->data;
@@ -2463,30 +2469,35 @@ static void rna_def_userdef_system(BlenderRNA *brna)
{0, NULL, 0, NULL, NULL}};
/* hardcoded here, could become dynamic somehow */
+ /* locale according to http://www.roseindia.net/tutorials/I18N/locales-list.shtml */
+ /* if you edit here, please also edit the source/blender/blenfont/intern/blf_lang.c 's locales */
static EnumPropertyItem language_items[] = {
- {0, "ENGLISH", 0, "English", ""},
- {1, "JAPANESE", 0, "Japanese", ""},
- {2, "DUTCH", 0, "Dutch", ""},
- {3, "ITALIAN", 0, "Italian", ""},
- {4, "GERMAN", 0, "German", ""},
- {5, "FINNISH", 0, "Finnish", ""},
- {6, "SWEDISH", 0, "Swedish", ""},
- {7, "FRENCH", 0, "French", ""},
- {8, "SPANISH", 0, "Spanish", ""},
- {9, "CATALAN", 0, "Catalan", ""},
- {10, "CZECH", 0, "Czech", ""},
- {11, "BRAZILIAN_PORTUGUESE", 0, "Brazilian Portuguese", ""},
- {12, "SIMPLIFIED_CHINESE", 0, "Simplified Chinese", ""},
- {13, "RUSSIAN", 0, "Russian", ""},
- {14, "CROATIAN", 0, "Croatian", ""},
- {15, "SERBIAN", 0, "Serbian", ""},
- {16, "UKRAINIAN", 0, "Ukrainian", ""},
- {17, "POLISH", 0, "Polish", ""},
- {18, "ROMANIAN", 0, "Romanian", ""},
- {19, "ARABIC", 0, "Arabic", ""},
- {20, "BULGARIAN", 0, "Bulgarian", ""},
- {21, "GREEK", 0, "Greek", ""},
- {22, "KOREAN", 0, "Korean", ""},
+ {0, "DEFAULT", 0, N_("Default (Default)"), ""},
+ {1, "ENGLISH", 0, N_("English (English)"), "en_US"},
+ {2, "JAPANESE", 0, N_("Japanese (日本語)"), "ja_JP"},
+ {3, "DUTCH", 0, N_("Dutch (Nederlandse taal)"), "nl_NL"},
+ {4, "ITALIAN", 0, N_("Italian (Italiano)"), "it_IT"},
+ {5, "GERMAN", 0, N_("German (Deutsch)"), "de_DE"},
+ {6, "FINNISH", 0, N_("Finnish (Suomi)"), "fi_FI"},
+ {7, "SWEDISH", 0, N_("Swedish (Svenska)"), "sv_SE"},
+ {8, "FRENCH", 0, N_("French (Française)"), "fr_FR"},
+ {9, "SPANISH", 0, N_("Spanish (Español)"), "es_ES"},
+ {10, "CATALAN", 0, N_("Catalan (Català)"), "ca_AD"},
+ {11, "CZECH", 0, N_("Czech (Český)"), "cs_CZ"},
+ {12, "BRAZILIAN_PORTUGUESE", 0, N_("Brazilian Portuguese (Português do Brasil)"), "pt_BR"},
+ {13, "SIMPLIFIED_CHINESE", 0, N_("Simplified Chinese (简体中文)"), "zh_CN"},
+ {14, "TRADITIONAL_CHINESE", 0, N_("Traditional Chinese (繁體中文)"), "zh_TW"},
+ {15, "RUSSIAN", 0, N_("Russian (Русский)"), "ru_RU"},
+ {16, "CROATIAN", 0, N_("Croatian (Hrvatski)"), "hr_HR"},
+ {17, "SERBIAN", 0, N_("Serbian (Српском језику)"), "sr_RS"},
+ {18, "UKRAINIAN", 0, N_("Ukrainian (Український)"), "uk_UA"},
+ {19, "POLISH", 0, N_("Polish (Polski)"), "pl_PL"},
+ {20, "ROMANIAN", 0, N_("Romanian (Român)"), "ro_RO"},
+ {21, "ARABIC", 0, N_("Arabic (العربية)"), "ar_EG"},
+ {22, "BULGARIAN", 0, N_("Bulgarian (Български)"), "bg_BG"},
+ {23, "GREEK", 0, N_("Greek (Ελληνικά)"), "el_GR"},
+ {24, "KOREAN", 0, N_("Korean (한국 언어)"), "ko_KR"},
+ /*{25, "Nepali", 0, N_("Nepali (नेपाली)"), "ne_NP"},*/
{0, NULL, 0, NULL, NULL}};
srna= RNA_def_struct(brna, "UserPreferencesSystem", NULL);
@@ -2499,7 +2510,7 @@ static void rna_def_userdef_system(BlenderRNA *brna)
prop= RNA_def_property(srna, "use_international_fonts", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_DOTRANSLATE);
RNA_def_property_ui_text(prop, "International Fonts", "Use international fonts");
- RNA_def_property_update(prop, 0, "rna_userdef_update");
+ RNA_def_property_update(prop, NC_WINDOW, "rna_userdef_language_update");
prop= RNA_def_property(srna, "dpi", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "dpi");
@@ -2522,21 +2533,16 @@ static void rna_def_userdef_system(BlenderRNA *brna)
prop= RNA_def_property(srna, "language", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, language_items);
RNA_def_property_ui_text(prop, "Language", "Language use for translation");
- RNA_def_property_update(prop, 0, "rna_userdef_update");
+ RNA_def_property_update(prop, NC_WINDOW, "rna_userdef_language_update");
prop= RNA_def_property(srna, "use_translate_tooltips", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_TR_TOOLTIPS);
RNA_def_property_ui_text(prop, "Translate Tooltips", "Translate Tooltips");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "use_translate_buttons", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_TR_BUTTONS);
- RNA_def_property_ui_text(prop, "Translate Buttons", "Translate button labels");
- RNA_def_property_update(prop, 0, "rna_userdef_update");
-
- prop= RNA_def_property(srna, "use_translate_toolbox", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_TR_MENUS);
- RNA_def_property_ui_text(prop, "Translate Toolbox", "Translate toolbox menu");
+ prop= RNA_def_property(srna, "use_translate_interface", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_TR_IFACE);
+ RNA_def_property_ui_text(prop, "Translate Interface", "Translate Interface");
RNA_def_property_update(prop, 0, "rna_userdef_update");
prop= RNA_def_property(srna, "use_textured_fonts", PROP_BOOLEAN, PROP_NONE);
diff --git a/source/blender/python/SConscript b/source/blender/python/SConscript
index 9d7928c4432..5cc3f3bedc4 100644
--- a/source/blender/python/SConscript
+++ b/source/blender/python/SConscript
@@ -17,6 +17,9 @@ defs = []
if is_debug:
defs.append('_DEBUG')
+if env['WITH_BF_INTERNATIONAL']:
+ defs.append('INTERNATIONAL')
+
sources = env.Glob('generic/*.c')
env.BlenderLib( libname = 'bf_python_ext', sources = Split(sources), includes = Split(incs), defines = defs, libtype = ['core','player'], priority = [363,165]) # ketsji is 360
diff --git a/source/blender/python/generic/CMakeLists.txt b/source/blender/python/generic/CMakeLists.txt
index 8dfbf476995..0a49036c15d 100644
--- a/source/blender/python/generic/CMakeLists.txt
+++ b/source/blender/python/generic/CMakeLists.txt
@@ -48,5 +48,8 @@ set(SRC
py_capi_utils.h
)
+if(WITH_INTERNATIONAL)
+ add_definitions(-DINTERNATIONAL)
+endif()
blender_add_lib(bf_python_ext "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/source/blender/python/generic/blf_py_api.c b/source/blender/python/generic/blf_py_api.c
index 3cf0b0f1f27..abf5ee7bada 100644
--- a/source/blender/python/generic/blf_py_api.c
+++ b/source/blender/python/generic/blf_py_api.c
@@ -31,9 +31,13 @@
#include "blf_py_api.h"
#include "../../blenfont/BLF_api.h"
+#include "../../blenfont/BLF_translation.h"
#include "BLI_utildefines.h"
+#ifdef INTERNATIONAL
+#include "DNA_userdef_types.h" /* is it bad level? */
+#endif
PyDoc_STRVAR(py_blf_position_doc,
@@ -367,6 +371,34 @@ static PyObject *py_blf_load(PyObject *UNUSED(self), PyObject *args)
return PyLong_FromLong(BLF_load(filename));
}
+#ifdef INTERNATIONAL
+PyDoc_STRVAR(py_blf_gettext_doc,
+".. function:: gettext(msgid)\n"
+"\n"
+" Get a msg in local language.\n"
+"\n"
+" :arg msgid: the source string.\n"
+" :type msgid: string\n"
+" :return: the localized string.\n"
+" :rtype: string\n"
+);
+static PyObject *py_blf_gettext(PyObject *UNUSED(self), PyObject *value)
+{
+ if ((U.transopts & USER_DOTRANSLATE) && (U.transopts & USER_TR_IFACE)) {
+ const char *msgid= _PyUnicode_AsString(value);
+ if(msgid == NULL) {
+ PyErr_SetString(PyExc_TypeError, "blf.gettext expects a single string argument");
+ return NULL;
+ }
+
+ return PyUnicode_FromString(BLF_gettext(msgid));
+ }
+ else {
+ return Py_INCREF(value), value;
+ }
+}
+#endif /* INTERNATIONAL */
+
/*----------------------------MODULE INIT-------------------------*/
static PyMethodDef BLF_methods[] = {
{"aspect", (PyCFunction) py_blf_aspect, METH_VARARGS, py_blf_aspect_doc},
@@ -382,6 +414,9 @@ static PyMethodDef BLF_methods[] = {
{"shadow_offset", (PyCFunction) py_blf_shadow_offset, METH_VARARGS, py_blf_shadow_offset_doc},
{"size", (PyCFunction) py_blf_size, METH_VARARGS, py_blf_size_doc},
{"load", (PyCFunction) py_blf_load, METH_VARARGS, py_blf_load_doc},
+#ifdef INTERNATIONAL
+ {"gettext", (PyCFunction) py_blf_gettext, METH_O, py_blf_gettext_doc},
+#endif
{NULL, NULL, 0, NULL}
};
diff --git a/source/blender/windowmanager/SConscript b/source/blender/windowmanager/SConscript
index 80c526f8649..c60752b85f8 100644
--- a/source/blender/windowmanager/SConscript
+++ b/source/blender/windowmanager/SConscript
@@ -39,4 +39,7 @@ if env['OURPLATFORM'] != 'darwin' or env['WITH_GHOST_COCOA']:
if env['BF_BUILDINFO']:
defs.append('WITH_BUILDINFO')
+if env['WITH_BF_INTERNATIONAL']:
+ defs.append('INTERNATIONAL')
+
env.BlenderLib ( 'bf_windowmanager', sources, Split(incs), defines=defs, libtype=['core'], priority=[5] )
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index 6b3a574b6b6..f862af6173a 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -59,6 +59,8 @@
#include "BLI_utildefines.h"
#include "BLI_callbacks.h"
+#include "BLF_translation.h"
+
#include "DNA_anim_types.h"
#include "DNA_ipo_types.h" // XXX old animation system
#include "DNA_object_types.h"
@@ -429,16 +431,17 @@ void WM_read_file(bContext *C, const char *filepath, ReportList *reports)
else if(retval == BKE_READ_EXOTIC_OK_OTHER)
BKE_write_undo(C, "Import file");
else if(retval == BKE_READ_EXOTIC_FAIL_OPEN) {
- BKE_reportf(reports, RPT_ERROR, "Can't read file: \"%s\", %s.", filepath, errno ? strerror(errno) : "Unable to open the file");
+ BKE_reportf(reports, RPT_ERROR, UI_translate_do_iface(N_("Can't read file: \"%s\", %s.")), filepath,
+ errno ? strerror(errno) : UI_translate_do_iface(N_("Unable to open the file")));
}
else if(retval == BKE_READ_EXOTIC_FAIL_FORMAT) {
- BKE_reportf(reports, RPT_ERROR, "File format is not supported in file: \"%s\".", filepath);
+ BKE_reportf(reports, RPT_ERROR, UI_translate_do_iface(N_("File format is not supported in file: \"%s\".")), filepath);
}
else if(retval == BKE_READ_EXOTIC_FAIL_PATH) {
- BKE_reportf(reports, RPT_ERROR, "File path invalid: \"%s\".", filepath);
+ BKE_reportf(reports, RPT_ERROR, UI_translate_do_iface(N_("File path invalid: \"%s\".")), filepath);
}
else {
- BKE_reportf(reports, RPT_ERROR, "Unknown error loading: \"%s\".", filepath);
+ BKE_reportf(reports, RPT_ERROR, UI_translate_do_iface(N_("Unknown error loading: \"%s\".")), filepath);
BLI_assert(!"invalid 'retval'");
}
diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c
index 365301538b0..f114b19debb 100644
--- a/source/blender/windowmanager/intern/wm_init_exit.c
+++ b/source/blender/windowmanager/intern/wm_init_exit.c
@@ -99,6 +99,7 @@
#include "UI_interface.h"
#include "BLF_api.h"
+#include "BLF_translation.h"
#include "GPU_buffers.h"
#include "GPU_extensions.h"
@@ -143,6 +144,8 @@ void WM_init(bContext *C, int argc, const char **argv)
/* get the default database, plus a wm */
WM_read_homefile(C, NULL, G.factory_startup);
+ BLF_lang_set(NULL);
+
/* note: there is a bug where python needs initializing before loading the
* startup.blend because it may contain PyDrivers. It also needs to be after
* initializing space types and other internal data.
@@ -378,7 +381,7 @@ void WM_exit(bContext *C)
BIF_freeTemplates(C);
free_ttfont(); /* bke_font.h */
-
+
free_openrecent();
BKE_freecubetable();
@@ -398,6 +401,7 @@ void WM_exit(bContext *C)
free_posebuf();
BLF_exit();
+ BLF_free_unifont();
ANIM_keyingset_infos_exit();
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 5e4505abaa5..320dc2ecdda 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -49,7 +49,7 @@
#include "DNA_userdef_types.h"
#include "DNA_windowmanager_types.h"
-#include "BLF_api.h"
+#include "BLF_translation.h"
#include "PIL_time.h"
@@ -78,6 +78,7 @@
#include "BIF_gl.h"
#include "BIF_glutil.h" /* for paint cursor */
+#include "BLF_api.h"
#include "IMB_imbuf_types.h"
#include "IMB_imbuf.h"
@@ -150,12 +151,11 @@ void WM_operatortype_append(void (*opfunc)(wmOperatorType*))
opfunc(ot);
if(ot->name==NULL) {
- static char dummy_name[] = "Dummy Name";
fprintf(stderr, "ERROR: Operator %s has no name property!\n", ot->idname);
- ot->name= dummy_name;
+ ot->name= UI_translate_do_iface(N_("Dummy Name"));
}
- RNA_def_struct_ui_text(ot->srna, ot->name, ot->description ? ot->description:"(undocumented operator)"); // XXX All ops should have a description but for now allow them not to.
+ RNA_def_struct_ui_text(ot->srna, ot->name, ot->description ? ot->description:UI_translate_do_iface(N_("(undocumented operator)"))); // XXX All ops should have a description but for now allow them not to.
RNA_def_struct_identifier(ot->srna, ot->idname);
BLI_ghash_insert(global_ops_hash, (void *)ot->idname, ot);
@@ -168,7 +168,7 @@ void WM_operatortype_append_ptr(void (*opfunc)(wmOperatorType*, void*), void *us
ot= MEM_callocN(sizeof(wmOperatorType), "operatortype");
ot->srna= RNA_def_struct(&BLENDER_RNA, "", "OperatorProperties");
opfunc(ot, userdata);
- RNA_def_struct_ui_text(ot->srna, ot->name, ot->description ? ot->description:"(undocumented operator)");
+ RNA_def_struct_ui_text(ot->srna, ot->name, ot->description ? ot->description:UI_translate_do_iface(N_("(undocumented operator)")));
RNA_def_struct_identifier(ot->srna, ot->idname);
BLI_ghash_insert(global_ops_hash, (void *)ot->idname, ot);
@@ -362,7 +362,7 @@ wmOperatorType *WM_operatortype_append_macro(const char *idname, const char *nam
ot->poll= NULL;
if(!ot->description)
- ot->description= "(undocumented operator)";
+ ot->description= UI_translate_do_iface(N_("(undocumented operator)"));
RNA_def_struct_ui_text(ot->srna, ot->name, ot->description); // XXX All ops should have a description but for now allow them not to.
RNA_def_struct_identifier(ot->srna, ot->idname);
@@ -387,7 +387,7 @@ void WM_operatortype_append_macro_ptr(void (*opfunc)(wmOperatorType*, void*), vo
ot->poll= NULL;
if(!ot->description)
- ot->description= "(undocumented operator)";
+ ot->description= UI_translate_do_iface(N_("(undocumented operator)"));
opfunc(ot, userdata);
@@ -784,7 +784,7 @@ int WM_operator_confirm_message(bContext *C, wmOperator *op, const char *message
else
properties= NULL;
- pup= uiPupMenuBegin(C, "OK?", ICON_QUESTION);
+ pup= uiPupMenuBegin(C, UI_translate_do_iface(N_("OK?")), ICON_QUESTION);
layout= uiPupMenuLayout(pup);
uiItemFullO(layout, op->type->idname, message, ICON_NONE, properties, WM_OP_EXEC_REGION_WIN, 0);
uiPupMenuEnd(C, pup);
@@ -865,10 +865,10 @@ void WM_operator_properties_filesel(wmOperatorType *ot, int filter, short type,
void WM_operator_properties_select_all(wmOperatorType *ot) {
static EnumPropertyItem select_all_actions[] = {
- {SEL_TOGGLE, "TOGGLE", 0, "Toggle", "Toggle selection for all elements"},
- {SEL_SELECT, "SELECT", 0, "Select", "Select all elements"},
- {SEL_DESELECT, "DESELECT", 0, "Deselect", "Deselect all elements"},
- {SEL_INVERT, "INVERT", 0, "Invert", "Invert selection of all elements"},
+ {SEL_TOGGLE, "TOGGLE", 0, N_("Toggle"), "Toggle selection for all elements"},
+ {SEL_SELECT, "SELECT", 0, N_("Select"), "Select all elements"},
+ {SEL_DESELECT, "DESELECT", 0, N_("Deselect"), "Deselect all elements"},
+ {SEL_INVERT, "INVERT", 0, N_("Invert"), "Invert selection of all elements"},
{0, NULL, 0, NULL, NULL}
};
@@ -877,25 +877,25 @@ void WM_operator_properties_select_all(wmOperatorType *ot) {
void WM_operator_properties_gesture_border(wmOperatorType *ot, int extend)
{
- RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Gesture Mode", "", INT_MIN, INT_MAX);
- RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX);
- RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX);
- RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX);
- RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX);
+ RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, N_("Gesture Mode"), "", INT_MIN, INT_MAX);
+ RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, N_("X Min"), "", INT_MIN, INT_MAX);
+ RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, N_("X Max"), "", INT_MIN, INT_MAX);
+ RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, N_("Y Min"), "", INT_MIN, INT_MAX);
+ RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, N_("Y Max"), "", INT_MIN, INT_MAX);
if(extend)
- RNA_def_boolean(ot->srna, "extend", 1, "Extend", "Extend selection instead of deselecting everything first");
+ RNA_def_boolean(ot->srna, "extend", 1, _("Extend"), _("Extend selection instead of deselecting everything first"));
}
void WM_operator_properties_gesture_straightline(wmOperatorType *ot, int cursor)
{
- RNA_def_int(ot->srna, "xstart", 0, INT_MIN, INT_MAX, "X Start", "", INT_MIN, INT_MAX);
- RNA_def_int(ot->srna, "xend", 0, INT_MIN, INT_MAX, "X End", "", INT_MIN, INT_MAX);
- RNA_def_int(ot->srna, "ystart", 0, INT_MIN, INT_MAX, "Y Start", "", INT_MIN, INT_MAX);
- RNA_def_int(ot->srna, "yend", 0, INT_MIN, INT_MAX, "Y End", "", INT_MIN, INT_MAX);
+ RNA_def_int(ot->srna, "xstart", 0, INT_MIN, INT_MAX, N_("X Start"), "", INT_MIN, INT_MAX);
+ RNA_def_int(ot->srna, "xend", 0, INT_MIN, INT_MAX, N_("X End"), "", INT_MIN, INT_MAX);
+ RNA_def_int(ot->srna, "ystart", 0, INT_MIN, INT_MAX, N_("Y Start"), "", INT_MIN, INT_MAX);
+ RNA_def_int(ot->srna, "yend", 0, INT_MIN, INT_MAX, N_("Y End"), "", INT_MIN, INT_MAX);
if(cursor)
- RNA_def_int(ot->srna, "cursor", cursor, 0, INT_MAX, "Cursor", "Mouse cursor style to use during the modal operator", 0, INT_MAX);
+ RNA_def_int(ot->srna, "cursor", cursor, 0, INT_MAX, N_("Cursor"), N_("Mouse cursor style to use during the modal operator"), 0, INT_MAX);
}
@@ -924,7 +924,7 @@ static uiBlock *wm_block_create_redo(bContext *C, ARegion *ar, void *arg_op)
wmOperator *op= arg_op;
uiBlock *block;
uiLayout *layout;
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
int width= 300;
@@ -1002,7 +1002,7 @@ static uiBlock *wm_block_dialog_create(bContext *C, ARegion *ar, void *userData)
wmOperator *op= data->op;
uiBlock *block;
uiLayout *layout;
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
block = uiBeginBlock(C, ar, "operator dialog", UI_EMBOSS);
uiBlockClearFlag(block, UI_BLOCK_LOOP);
@@ -1026,7 +1026,7 @@ static uiBlock *wm_block_dialog_create(bContext *C, ARegion *ar, void *userData)
col= uiLayoutColumn(layout, FALSE);
col_block= uiLayoutGetBlock(col);
/* Create OK button, the callback of which will execute op */
- btn= uiDefBut(col_block, BUT, 0, "OK", 0, -30, 0, UI_UNIT_Y, NULL, 0, 0, 0, 0, "");
+ btn= uiDefBut(col_block, BUT, 0, UI_translate_do_iface(N_("OK")), 0, -30, 0, UI_UNIT_Y, NULL, 0, 0, 0, 0, "");
uiButSetFunc(btn, dialog_exec_cb, data, col_block);
}
@@ -1043,7 +1043,7 @@ static uiBlock *wm_operator_ui_create(bContext *C, ARegion *ar, void *userData)
wmOperator *op= data->op;
uiBlock *block;
uiLayout *layout;
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
block= uiBeginBlock(C, ar, "opui_popup", UI_EMBOSS);
uiBlockClearFlag(block, UI_BLOCK_LOOP);
@@ -1213,7 +1213,7 @@ static uiBlock *wm_block_create_splash(bContext *C, ARegion *ar, void *UNUSED(ar
uiBlock *block;
uiBut *but;
uiLayout *layout, *split, *col;
- uiStyle *style= U.uistyles.first;
+ uiStyle *style= UI_GetStyle();
struct RecentFile *recent;
int i;
MenuType *mt= WM_menutype_find("USERPREF_MT_splash", TRUE);
@@ -1272,19 +1272,19 @@ static uiBlock *wm_block_create_splash(bContext *C, ARegion *ar, void *UNUSED(ar
split = uiLayoutSplit(layout, 0, 0);
col = uiLayoutColumn(split, 0);
uiItemL(col, "Links", ICON_NONE);
- uiItemStringO(col, "Donations", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/blenderorg/blender-foundation/donation-payment");
- uiItemStringO(col, "Credits", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/development/credits");
- uiItemStringO(col, "Release Log", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/development/release-logs/blender-259");
- uiItemStringO(col, "Manual", ICON_URL, "WM_OT_url_open", "url", "http://wiki.blender.org/index.php/Doc:2.5/Manual");
- uiItemStringO(col, "Blender Website", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org");
- uiItemStringO(col, "User Community", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/community/user-community");
+ uiItemStringO(col, UI_translate_do_iface(N_("Donations")), ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/blenderorg/blender-foundation/donation-payment");
+ uiItemStringO(col, UI_translate_do_iface(N_("Credits")), ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/development/credits");
+ uiItemStringO(col, UI_translate_do_iface(N_("Release Log")), ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/development/release-logs/blender-259");
+ uiItemStringO(col, UI_translate_do_iface(N_("Manual")), ICON_URL, "WM_OT_url_open", "url", "http://wiki.blender.org/index.php/Doc:2.5/Manual");
+ uiItemStringO(col, UI_translate_do_iface(N_("Blender Website")), ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org");
+ uiItemStringO(col, UI_translate_do_iface(N_("User Community")), ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/community/user-community");
if(strcmp(STRINGIFY(BLENDER_VERSION_CYCLE), "release")==0) {
BLI_snprintf(url, sizeof(url), "http://www.blender.org/documentation/blender_python_api_%d_%d" STRINGIFY(BLENDER_VERSION_CHAR) "_release", BLENDER_VERSION/100, BLENDER_VERSION%100);
}
else {
BLI_snprintf(url, sizeof(url), "http://www.blender.org/documentation/blender_python_api_%d_%d_%d", BLENDER_VERSION/100, BLENDER_VERSION%100, BLENDER_SUBVERSION);
}
- uiItemStringO(col, "Python API Reference", ICON_URL, "WM_OT_url_open", "url", url);
+ uiItemStringO(col, UI_translate_do_iface(N_("Python API Reference")), ICON_URL, "WM_OT_url_open", "url", url);
uiItemL(col, "", ICON_NONE);
col = uiLayoutColumn(split, 0);
@@ -1294,7 +1294,7 @@ static uiBlock *wm_block_create_splash(bContext *C, ARegion *ar, void *UNUSED(ar
uiItemS(col);
}
- uiItemL(col, "Recent", ICON_NONE);
+ uiItemL(col, UI_translate_do_iface(N_("Recent")), ICON_NONE);
for(recent = G.recent_files.first, i=0; (i<5) && (recent); recent = recent->next, i++) {
uiItemStringO(col, BLI_path_basename(recent->filepath), ICON_FILE_BLEND, "WM_OT_open_mainfile", "filepath", recent->filepath);
}
@@ -3304,13 +3304,13 @@ static void redraw_timer_window_swap(bContext *C)
}
static EnumPropertyItem redraw_timer_type_items[] = {
- {0, "DRAW", 0, "Draw Region", "Draw Region"},
- {1, "DRAW_SWAP", 0, "Draw Region + Swap", "Draw Region and Swap"},
- {2, "DRAW_WIN", 0, "Draw Window", "Draw Window"},
- {3, "DRAW_WIN_SWAP", 0, "Draw Window + Swap", "Draw Window and Swap"},
- {4, "ANIM_STEP", 0, "Anim Step", "Animation Steps"},
- {5, "ANIM_PLAY", 0, "Anim Play", "Animation Playback"},
- {6, "UNDO", 0, "Undo/Redo", "Undo/Redo"},
+ {0, "DRAW", 0, N_("Draw Region"), N_("Draw Region")},
+ {1, "DRAW_SWAP", 0, N_("Draw Region + Swap"), N_("Draw Region and Swap")},
+ {2, "DRAW_WIN", 0, N_("Draw Window"), N_("Draw Window")},
+ {3, "DRAW_WIN_SWAP", 0, N_("Draw Window + Swap"), N_("Draw Window and Swap")},
+ {4, "ANIM_STEP", 0, N_("Anim Step"), N_("Animation Steps")},
+ {5, "ANIM_PLAY", 0, N_("Anim Play"), N_("Animation Playback")},
+ {6, "UNDO", 0, N_("Undo/Redo"), N_("Undo/Redo")},
{0, NULL, 0, NULL, NULL}};
static int redraw_timer_exec(bContext *C, wmOperator *op)
@@ -3543,14 +3543,14 @@ void wm_operatortype_init(void)
static void gesture_circle_modal_keymap(wmKeyConfig *keyconf)
{
static EnumPropertyItem modal_items[] = {
- {GESTURE_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""},
- {GESTURE_MODAL_CONFIRM, "CONFIRM", 0, "Confirm", ""},
- {GESTURE_MODAL_CIRCLE_ADD, "ADD", 0, "Add", ""},
- {GESTURE_MODAL_CIRCLE_SUB, "SUBTRACT", 0, "Subtract", ""},
+ {GESTURE_MODAL_CANCEL, "CANCEL", 0, N_("Cancel"), ""},
+ {GESTURE_MODAL_CONFIRM, "CONFIRM", 0, N_("Confirm"), ""},
+ {GESTURE_MODAL_CIRCLE_ADD, "ADD", 0, N_("Add"), ""},
+ {GESTURE_MODAL_CIRCLE_SUB, "SUBTRACT", 0, N_("Subtract"), ""},
- {GESTURE_MODAL_SELECT, "SELECT", 0, "Select", ""},
- {GESTURE_MODAL_DESELECT,"DESELECT", 0, "DeSelect", ""},
- {GESTURE_MODAL_NOP,"NOP", 0, "No Operation", ""},
+ {GESTURE_MODAL_SELECT, "SELECT", 0, N_("Select"), ""},
+ {GESTURE_MODAL_DESELECT,"DESELECT", 0, N_("DeSelect"), ""},
+ {GESTURE_MODAL_NOP,"NOP", 0, N_("No Operation"), ""},
{0, NULL, 0, NULL, NULL}};
@@ -3596,9 +3596,9 @@ static void gesture_circle_modal_keymap(wmKeyConfig *keyconf)
static void gesture_straightline_modal_keymap(wmKeyConfig *keyconf)
{
static EnumPropertyItem modal_items[] = {
- {GESTURE_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""},
- {GESTURE_MODAL_SELECT, "SELECT", 0, "Select", ""},
- {GESTURE_MODAL_BEGIN, "BEGIN", 0, "Begin", ""},
+ {GESTURE_MODAL_CANCEL, "CANCEL", 0, N_("Cancel"), ""},
+ {GESTURE_MODAL_SELECT, "SELECT", 0, N_("Select"), ""},
+ {GESTURE_MODAL_BEGIN, "BEGIN", 0, N_("Begin"), ""},
{0, NULL, 0, NULL, NULL}};
wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "Gesture Straight Line");
@@ -3624,10 +3624,10 @@ static void gesture_straightline_modal_keymap(wmKeyConfig *keyconf)
static void gesture_border_modal_keymap(wmKeyConfig *keyconf)
{
static EnumPropertyItem modal_items[] = {
- {GESTURE_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""},
- {GESTURE_MODAL_SELECT, "SELECT", 0, "Select", ""},
- {GESTURE_MODAL_DESELECT,"DESELECT", 0, "DeSelect", ""},
- {GESTURE_MODAL_BEGIN, "BEGIN", 0, "Begin", ""},
+ {GESTURE_MODAL_CANCEL, "CANCEL", 0, N_("Cancel"), ""},
+ {GESTURE_MODAL_SELECT, "SELECT", 0, N_("Select"), ""},
+ {GESTURE_MODAL_DESELECT,"DESELECT", 0, N_("DeSelect"), ""},
+ {GESTURE_MODAL_BEGIN, "BEGIN", 0, N_("Begin"), ""},
{0, NULL, 0, NULL, NULL}};
wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "Gesture Border");
@@ -3679,10 +3679,10 @@ static void gesture_border_modal_keymap(wmKeyConfig *keyconf)
static void gesture_zoom_border_modal_keymap(wmKeyConfig *keyconf)
{
static EnumPropertyItem modal_items[] = {
- {GESTURE_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""},
- {GESTURE_MODAL_IN, "IN", 0, "In", ""},
- {GESTURE_MODAL_OUT, "OUT", 0, "Out", ""},
- {GESTURE_MODAL_BEGIN, "BEGIN", 0, "Begin", ""},
+ {GESTURE_MODAL_CANCEL, "CANCEL", 0, N_("Cancel"), ""},
+ {GESTURE_MODAL_IN, "IN", 0, N_("In"), ""},
+ {GESTURE_MODAL_OUT, "OUT", 0, N_("Out"), ""},
+ {GESTURE_MODAL_BEGIN, "BEGIN", 0, N_("Begin"), ""},
{0, NULL, 0, NULL, NULL}};
wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "Gesture Zoom Border");
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 7d6010786d2..d9ca275c819 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -48,6 +48,8 @@
#include "BLI_blenlib.h"
#include "BLI_utildefines.h"
+#include "BLF_translation.h"
+
#include "BKE_blender.h"
#include "BKE_context.h"
#include "BKE_library.h"
@@ -73,6 +75,8 @@
#include "GPU_draw.h"
#include "GPU_extensions.h"
+#include "UI_interface.h"
+
/* the global to talk to ghost */
static GHOST_SystemHandle g_system= NULL;
@@ -504,11 +508,11 @@ void WM_window_open_temp(bContext *C, rcti *position, int type)
ED_screen_set(C, win->screen);
if(sa->spacetype==SPACE_IMAGE)
- GHOST_SetTitle(win->ghostwin, "Blender Render");
+ GHOST_SetTitle(win->ghostwin, UI_translate_do_iface(N_("Blender Render")));
else if(ELEM(sa->spacetype, SPACE_OUTLINER, SPACE_USERPREF))
- GHOST_SetTitle(win->ghostwin, "Blender User Preferences");
+ GHOST_SetTitle(win->ghostwin, UI_translate_do_iface(N_("Blender User Preferences")));
else if(sa->spacetype==SPACE_FILE)
- GHOST_SetTitle(win->ghostwin, "Blender File View");
+ GHOST_SetTitle(win->ghostwin, UI_translate_do_iface(N_("Blender File View")));
else
GHOST_SetTitle(win->ghostwin, "Blender");
}
diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt
index 666be16e73e..0b5d9f7c15c 100644
--- a/source/creator/CMakeLists.txt
+++ b/source/creator/CMakeLists.txt
@@ -356,7 +356,9 @@ if(UNIX AND NOT APPLE)
)
install(
- DIRECTORY ${CMAKE_SOURCE_DIR}/release/bin/.blender/locale
+ DIRECTORY
+ ${CMAKE_SOURCE_DIR}/release/bin/.blender/locale
+ ${CMAKE_SOURCE_DIR}/release/bin/.blender/fonts
DESTINATION ${TARGETDIR_VER}/datafiles
PATTERN ".svn" EXCLUDE
)
@@ -430,7 +432,9 @@ elseif(WIN32)
DESTINATION ${TARGETDIR_VER}
)
install(
- DIRECTORY ${CMAKE_SOURCE_DIR}/release/bin/.blender/locale
+ DIRECTORY
+ ${CMAKE_SOURCE_DIR}/release/bin/.blender/locale
+ ${CMAKE_SOURCE_DIR}/release/bin/.blender/fonts
DESTINATION ${TARGETDIR_VER}/datafiles
PATTERN ".svn" EXCLUDE
)
@@ -449,8 +453,10 @@ elseif(WIN32)
endif()
install( # same as linux!, deduplicate
- DIRECTORY ${CMAKE_SOURCE_DIR}/release/bin/.blender/locale
- DESTINATION ${TARGETDIR_VER}/datafiles/locale
+ DIRECTORY
+ ${CMAKE_SOURCE_DIR}/release/bin/.blender/locale
+ ${CMAKE_SOURCE_DIR}/release/bin/.blender/fonts
+ DESTINATION ${TARGETDIR_VER}/datafiles
PATTERN ".svn" EXCLUDE
)
@@ -662,9 +668,12 @@ elseif(APPLE)
DESTINATION ${TARGETDIR_VER}/datafiles
)
- install_dir(
- ${CMAKE_SOURCE_DIR}/release/bin/.blender/locale/
- \${TARGETDIR_VER}/datafiles/locale
+ install(
+ DIRECTORY
+ ${CMAKE_SOURCE_DIR}/release/bin/.blender/fonts
+ ${CMAKE_SOURCE_DIR}/release/bin/.blender/locale
+ DESTINATION ${TARGETDIR_VER}/datafiles
+ PATTERN ".svn" EXCLUDE
)
endif()
diff --git a/source/gameengine/GamePlayer/ghost/CMakeLists.txt b/source/gameengine/GamePlayer/ghost/CMakeLists.txt
index 944ec9abd67..b452bb97cde 100644
--- a/source/gameengine/GamePlayer/ghost/CMakeLists.txt
+++ b/source/gameengine/GamePlayer/ghost/CMakeLists.txt
@@ -78,4 +78,8 @@ if(WITH_CODEC_FFMPEG)
add_definitions(-DWITH_FFMPEG)
endif()
+if(WITH_INTERNATIONAL)
+ add_definitions(-DINTERNATIONAL)
+endif()
+
blender_add_lib_nolist(ge_player_ghost "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
index d4ce19de83f..eee27ca0790 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
@@ -81,6 +81,7 @@ extern char btempdir[]; /* use this to store a valid temp directory */
// For BLF
#include "BLF_api.h"
+#include "BLF_translation.h"
extern int datatoc_bfont_ttf_size;
extern char datatoc_bfont_ttf[];
@@ -404,7 +405,7 @@ int main(int argc, char** argv)
// We don't use threads directly in the BGE, but we need to call this so things like
// freeing up GPU_Textures works correctly.
BLI_threadapi_init();
-
+
RNA_init();
init_nodesystem();
@@ -420,6 +421,9 @@ int main(int argc, char** argv)
// Setup builtin font for BLF (mostly copied from creator.c, wm_init_exit.c and interface_style.c)
BLF_init(11, U.dpi);
BLF_lang_init();
+ BLF_lang_encoding("");
+ BLF_lang_set("");
+
BLF_load_mem("default", (unsigned char*)datatoc_bfont_ttf, datatoc_bfont_ttf_size);
// Parse command line options
@@ -994,6 +998,7 @@ int main(int argc, char** argv)
// Cleanup
RNA_exit();
BLF_exit();
+ BLF_free_unifont();
IMB_exit();
free_nodesystem();
diff --git a/source/gameengine/GamePlayer/ghost/SConscript b/source/gameengine/GamePlayer/ghost/SConscript
index de063f5e297..57c1122c2cd 100644
--- a/source/gameengine/GamePlayer/ghost/SConscript
+++ b/source/gameengine/GamePlayer/ghost/SConscript
@@ -51,4 +51,7 @@ if env['WITH_BF_PYTHON']:
if env['WITH_BF_FFMPEG']:
defs.append('WITH_FFMPEG')
+if env['WITH_BF_INTERNATIONAL']:
+ defs.append('INTERNATIONAL')
+
env.BlenderLib (libname='ge_player_ghost', sources=source_files, includes = incs, defines = defs, libtype=['player'],priority=[0], cxx_compileflags=env['BGE_CXXFLAGS'])