1

I would like to switch between English and Chinese translation with a shortcut (Alt+E), and have it affect interface as well as tooltips and new objects (only translating tooltips such as recommended here would not be enough in my case: Can I display two language for ui in Blender at the same time?) I hope to achieve it with this script:

import bpy
class OBJECT_OT_CustomOp(bpy.types.Operator):
    """Tooltip"""
    bl_idname = "object.simple_operator"
    bl_label = "Simple Object Operator"
def execute(self, context):



#bpy.context.preferences.view.language = 'zh_CN' bpy.context.preferences.view.language = 'en_US'

return {'FINISHED'}

So far, I have been manually running the line with the language I wanted to use. I couldn't figure out how to assign the shortcut, since it is in the user preferences. The upper part is copied from the operator simple template. As I am new to Python, all help is appreciated, Thank you!

Gorgious
  • 30,723
  • 2
  • 44
  • 101

1 Answers1

1

Here's a script that will add an entry to a custom operator to your preferences. By pressing ALT + E you'll swap between the two languages defined in the keymap settings, by default Chinese and English.

Your mouse will need to be over a 3D viewport editor for it to work though. If you want it to work over other editors, you'll need to add other custom keymap entries.

import bpy

class INTERFACE_OT_swap_language(bpy.types.Operator): bl_idname = "interface.change_language" bl_label = "Swap Languages" language_one: bpy.props.StringProperty(default="en_US") language_two: bpy.props.StringProperty(default="zh_CN")

def execute(self, context):
    view = context.preferences.view
    if view.language == self.language_one:
        view.language = self.language_two
    else:
        view.language = self.language_one
    return {'FINISHED'}


def register(): bpy.utils.register_class(INTERFACE_OT_swap_language)

wm = bpy.context.window_manager
kc = wm.keyconfigs.user
if kc:
    km = kc.keymaps.new(name='3D View', space_type='VIEW_3D')
    kmi = km.keymap_items.new(INTERFACE_OT_swap_language.bl_idname, type='E', value='PRESS', alt=True)


if name == "main": register()

Note you can tweak these defaults by going into the preferences, looking for "Swap Languages" in the keymap search field and expanding the entry.

enter image description here

Here I've modified the second language property to swap to french for instance.

enter image description here

Sources :

https://blender.stackexchange.com/a/196518/86891

https://docs.blender.org/api/current/bpy.types.KeyConfig.html#bpy.types.KeyConfig

Gorgious
  • 30,723
  • 2
  • 44
  • 101
  • I have tried the script and it works, thank you! But what do I need to do to have it active by default? right now I need to execute it once in order for it to become active. If I create a keymap, export it and try to load it, I get this error message: Failed to load keymap 'C:\\Users\\elsch\\AppData\\Roaming\\Blender Foundation\\Blender\\3.3\\scripts\\presets\\keyconfig\\Chinese_English_Toggle.py' How do I save it correctly to have it start up automatically? Thanks! – David Schulz Oct 11 '22 at 12:49
  • @DavidSchulz you simply need to add a few lines to the script and then register the addon from the preferences > Addon > Install > yourfile.py see https://docs.blender.org/manual/en/latest/advanced/scripting/addon_tutorial.html for the specifics – Gorgious Oct 12 '22 at 05:12