|
| 1 | +import ast |
| 2 | +import re |
| 3 | + |
| 4 | +import bpy |
| 5 | + |
| 6 | +zh_HANS = { |
| 7 | + "Automatically reload scripts and run them": "自动重载脚本并运行", |
| 8 | + "ReLoad Script": "重载脚本", |
| 9 | + "Development Keymap": "开发快捷键", |
| 10 | + "Commonly used Keymaps to speed up the development process": "常用可以加快开发流程的快捷键", |
| 11 | + "Addon Open": "打开插件", |
| 12 | + "Rewrite the drawing method of the addon section, and display it in the expansion of the addon": "重写插件部分的绘制方法,并在插件的扩展是显示打开脚本文件与文件夹按钮", |
| 13 | + "Remember addon expanded": "记住插件展开", |
| 14 | + "Record the expanded Addon and restore it the next time you open Blender": "将已展开的插件记录下来,在下次打开Blender时恢复", |
| 15 | + "Remember addon search": "记住插件搜索", |
| 16 | + "Record the Addon search and restore it the next time you start Blender": "将插件搜索记录下来,在下次启动Blender时恢复", |
| 17 | + "Restart Blender": "重启Blender", |
| 18 | + "Enable multiple Blenders or restart Blender, please be careful to save the edit file!!!!": "启用多个Blender或重启Blender,请注意保存编辑文件!!!!", |
| 19 | + "Keymap": "快捷键", |
| 20 | + "Click Open a New Blender": "左键 打开一个新的Blender", |
| 21 | + "Alt Prompt to save file, Restart Blender": "Alt 提示保存文件,重启Blender", |
| 22 | + "Ctrl Do not prompt to save files, Restart Blender": "Ctrl 不提示保存文件,重启Blender", |
| 23 | + "Shift Open Tow Blender": "Shift 打开两个Blender", |
| 24 | + "Ctrl+Alt+Shift Loop Open Blender, dedicated for explosion": "Ctrl+Alt+Shift 循环打开Blender,爆炸专用", |
| 25 | +} |
| 26 | + |
| 27 | + |
| 28 | +def translate_lines_text(*args, split="\n"): |
| 29 | + from bpy.app.translations import pgettext_iface |
| 30 | + return split.join([pgettext_iface(line) for line in args]) |
| 31 | + |
| 32 | + |
| 33 | +def get_language_list() -> list: |
| 34 | + """ |
| 35 | + Traceback (most recent call last): |
| 36 | + File "<blender_console>", line 1, in <module> |
| 37 | +TypeError: bpy_struct: item.attr = val: enum "a" not found in ("DEFAULT", "en_US", "es", "ja_JP", "sk_SK", "vi_VN", "zh_HANS", "ar_EG", "de_DE", "fr_FR", "it_IT", "ko_KR", "pt_BR", "pt_PT", "ru_RU", "uk_UA", "zh_TW", "ab", "ca_AD", "cs_CZ", "eo", "eu_EU", "fa_IR", "ha", "he_IL", "hi_IN", "hr_HR", "hu_HU", "id_ID", "ky_KG", "nl_NL", "pl_PL", "sr_RS", "sr_RS@latin", "sv_SE", "th_TH", "tr_TR") |
| 38 | + """ |
| 39 | + try: |
| 40 | + bpy.context.preferences.view.language = "" |
| 41 | + except TypeError as e: |
| 42 | + matches = re.findall(r"\(([^()]*)\)", e.args[-1]) |
| 43 | + return ast.literal_eval(f"({matches[-1]})") |
| 44 | + |
| 45 | + |
| 46 | +class TranslationHelper: |
| 47 | + def __init__(self, name: str, data: dict, lang='zh_CN'): |
| 48 | + self.name = name |
| 49 | + self.translations_dict = dict() |
| 50 | + |
| 51 | + for src, src_trans in data.items(): |
| 52 | + key = ("Operator", src) |
| 53 | + self.translations_dict.setdefault(lang, {})[key] = src_trans |
| 54 | + key = ("*", src) |
| 55 | + self.translations_dict.setdefault(lang, {})[key] = src_trans |
| 56 | + key = (name, src) |
| 57 | + self.translations_dict.setdefault(lang, {})[key] = src_trans |
| 58 | + |
| 59 | + def register(self): |
| 60 | + try: |
| 61 | + bpy.app.translations.register(self.name, self.translations_dict) |
| 62 | + except(ValueError): |
| 63 | + pass |
| 64 | + |
| 65 | + def unregister(self): |
| 66 | + bpy.app.translations.unregister(self.name) |
| 67 | + |
| 68 | + |
| 69 | +# Set |
| 70 | +############ |
| 71 | + |
| 72 | +all_language = get_language_list() |
| 73 | + |
| 74 | +zh_CN = None |
| 75 | + |
| 76 | + |
| 77 | +def register(): |
| 78 | + global zh_CN |
| 79 | + |
| 80 | + language = "zh_CN" |
| 81 | + if language not in all_language: |
| 82 | + if language in ("zh_CN", "zh_HANS"): |
| 83 | + if "zh_CN" in all_language: |
| 84 | + language = "zh_CN" |
| 85 | + elif "zh_HANS" in all_language: |
| 86 | + language = "zh_HANS" |
| 87 | + zh_CN = TranslationHelper('development_kit_zh_CN', zh_HANS, lang=language) |
| 88 | + zh_CN.register() |
| 89 | + |
| 90 | + |
| 91 | +def unregister(): |
| 92 | + zh_CN.unregister() |
0 commit comments