I18n: make presets translatable
Presets are used all over the Blender UI, but were so far untranslatable. This adds the translation code as well as a new `dump_preset_messages()` function in the message extraction. This goes over all bundled preset file names and extracts them. Reviewed By: mont29 Differential Revision: https://developer.blender.org/D15570
This commit is contained in:
parent
543b47f162
commit
3239cea726
|
@ -853,6 +853,25 @@ def dump_src_messages(msgs, reports, settings):
|
|||
dump_src_file(path, rel_path, msgs, reports, settings)
|
||||
|
||||
|
||||
def dump_preset_messages(msgs, reports, settings):
|
||||
files = []
|
||||
for dpath, _, fnames in os.walk(settings.PRESETS_DIR):
|
||||
for fname in fnames:
|
||||
if fname.startswith("_") or not fname.endswith(".py"):
|
||||
continue
|
||||
path = os.path.join(dpath, fname)
|
||||
try: # can't always find the relative path (between drive letters on windows)
|
||||
rel_path = os.path.relpath(path, settings.PRESETS_DIR)
|
||||
except ValueError:
|
||||
rel_path = path
|
||||
files.append(rel_path)
|
||||
for rel_path in files:
|
||||
msgsrc, msgid = os.path.split(rel_path)
|
||||
msgsrc = "Preset from " + msgsrc
|
||||
msgid = bpy.path.display_name(msgid, title_case=False)
|
||||
process_msg(msgs, settings.DEFAULT_CONTEXT, msgid, msgsrc, reports, None, settings)
|
||||
|
||||
|
||||
##### Main functions! #####
|
||||
def dump_messages(do_messages, do_checks, settings):
|
||||
bl_ver = "Blender " + bpy.app.version_string
|
||||
|
@ -885,6 +904,9 @@ def dump_messages(do_messages, do_checks, settings):
|
|||
# Get strings from C source code.
|
||||
dump_src_messages(msgs, reports, settings)
|
||||
|
||||
# Get strings from presets.
|
||||
dump_preset_messages(msgs, reports, settings)
|
||||
|
||||
# Get strings from addons' categories.
|
||||
for uid, label, tip in bpy.types.WindowManager.addon_filter.keywords['items'](
|
||||
bpy.context.window_manager,
|
||||
|
|
|
@ -514,6 +514,9 @@ REL_GIT_I18N_PO_DIR = os.path.join("po")
|
|||
# The Blender source path to check for i18n macros (relative to SOURCE_DIR).
|
||||
REL_POTFILES_SOURCE_DIR = os.path.join("source")
|
||||
|
||||
# Where to search for preset names (relative to SOURCE_DIR).
|
||||
REL_PRESETS_DIR = os.path.join("release", "scripts", "presets")
|
||||
|
||||
# The template messages file (relative to I18N_DIR).
|
||||
REL_FILE_NAME_POT = os.path.join(REL_BRANCHES_DIR, DOMAIN + ".pot")
|
||||
|
||||
|
@ -672,6 +675,7 @@ class I18nSettings:
|
|||
GIT_I18N_ROOT = property(*(_gen_get_set_path("SOURCE_DIR", "REL_GIT_I18N_DIR")))
|
||||
GIT_I18N_PO_DIR = property(*(_gen_get_set_path("GIT_I18N_ROOT", "REL_GIT_I18N_PO_DIR")))
|
||||
POTFILES_SOURCE_DIR = property(*(_gen_get_set_path("SOURCE_DIR", "REL_POTFILES_SOURCE_DIR")))
|
||||
PRESETS_DIR = property(*(_gen_get_set_path("SOURCE_DIR", "REL_PRESETS_DIR")))
|
||||
FILE_NAME_POT = property(*(_gen_get_set_path("I18N_DIR", "REL_FILE_NAME_POT")))
|
||||
MO_PATH_ROOT = property(*(_gen_get_set_path("I18N_DIR", "REL_MO_PATH_ROOT")))
|
||||
MO_PATH_TEMPLATE = property(*(_gen_get_set_path("I18N_DIR", "REL_MO_PATH_TEMPLATE")))
|
||||
|
|
|
@ -1074,6 +1074,7 @@ class Menu(StructRNA, _GenericUI, metaclass=RNAMeta):
|
|||
- preset_operator_defaults (dict of keyword args)
|
||||
"""
|
||||
import bpy
|
||||
from bpy.app.translations import pgettext_iface as iface_
|
||||
ext_valid = getattr(self, "preset_extensions", {".py", ".xml"})
|
||||
props_default = getattr(self, "preset_operator_defaults", None)
|
||||
add_operator = getattr(self, "preset_add_operator", None)
|
||||
|
@ -1083,7 +1084,8 @@ class Menu(StructRNA, _GenericUI, metaclass=RNAMeta):
|
|||
props_default=props_default,
|
||||
filter_ext=lambda ext: ext.lower() in ext_valid,
|
||||
add_operator=add_operator,
|
||||
display_name=lambda name: bpy.path.display_name(name, title_case=False)
|
||||
display_name=lambda name: iface_(
|
||||
bpy.path.display_name(name, title_case=False))
|
||||
)
|
||||
|
||||
@classmethod
|
||||
|
|
Loading…
Reference in New Issue