From cc74a2ca8b43126f4c2bff97fbeffefb2e1f5918 Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Sun, 19 Jan 2025 10:52:20 +0800 Subject: [PATCH] feat: add i18n for forgetten entries. - add i18n for progress hints when importing or exporting virtools file. - add i18n for naming convention report. --- bbp_ng/OP_EXPORT_virtools.py | 24 +++++++++----- bbp_ng/OP_IMPORT_virtools.py | 27 ++++++++++----- bbp_ng/UTIL_naming_convension.py | 56 ++++++++++++++++++++++---------- 3 files changed, 74 insertions(+), 33 deletions(-) diff --git a/bbp_ng/OP_EXPORT_virtools.py b/bbp_ng/OP_EXPORT_virtools.py index c78e363..f485f4f 100644 --- a/bbp_ng/OP_EXPORT_virtools.py +++ b/bbp_ng/OP_EXPORT_virtools.py @@ -133,7 +133,8 @@ def _prepare_virtools_3dobjects( light_crets: list[_TLightPair] = [] light_cret_set: set[bpy.types.Object] = set() # start saving - progress.enter_substeps(len(export_objects), "Creating 3dObjects and Lights") + tr_text: str = bpy.app.translations.pgettext_rpt('Creating 3dObjects and Lights', 'BBP_OT_export_virtools/execute') + progress.enter_substeps(len(export_objects), tr_text) # iterate exported object list for obj3d in export_objects: @@ -176,7 +177,8 @@ def _export_virtools_groups( # create virtools group group_cret_map: dict[str, bmap.BMGroup] = {} # start saving - progress.enter_substeps(len(obj3d_crets), "Saving Groups") + tr_text: str = bpy.app.translations.pgettext_rpt('Saving Groups', 'BBP_OT_export_virtools/execute') + progress.enter_substeps(len(obj3d_crets), tr_text) # create sector group first if user ordered # This step is designed for ensure that the created sector group is successive. @@ -221,7 +223,8 @@ def _export_virtools_light( light_crets: tuple[_TLightPair, ...] ) -> None: # start saving - progress.enter_substeps(len(light_crets), "Saving Lights") + tr_text: str = bpy.app.translations.pgettext_rpt('Saving Lights', 'BBP_OT_export_virtools/execute') + progress.enter_substeps(len(light_crets), tr_text) for obj3d, light, vtlight in light_crets: # set name @@ -268,7 +271,8 @@ def _export_virtools_3dobjects( mesh_crets: list[_TMeshPair] = [] mesh_cret_map: dict[bpy.types.Mesh, bmap.BMMesh] = {} # start saving - progress.enter_substeps(len(obj3d_crets), "Saving 3dObjects") + tr_text: str = bpy.app.translations.pgettext_rpt('Saving 3dObjects', 'BBP_OT_export_virtools/execute') + progress.enter_substeps(len(obj3d_crets), tr_text) for obj3d, vtobj3d in obj3d_crets: # set name @@ -314,7 +318,8 @@ def _export_virtools_meshes( material_crets: list[_TMaterialPair] = [] material_cret_map: dict[bpy.types.Material, bmap.BMMaterial] = {} # start saving - progress.enter_substeps(len(mesh_crets), "Saving Meshes") + tr_text: str = bpy.app.translations.pgettext_rpt('Saving Meshes', 'BBP_OT_export_virtools/execute') + progress.enter_substeps(len(mesh_crets), tr_text) # iterate meshes for obj3d, mesh, vtmesh in mesh_crets: @@ -428,7 +433,8 @@ def _export_virtools_materials( texture_crets: list[_TTexturePair] = [] texture_cret_map: dict[bpy.types.Image, bmap.BMTexture] = {} # start saving - progress.enter_substeps(len(material_crets), "Saving Materials") + tr_text: str = bpy.app.translations.pgettext_rpt('Saving Materials', 'BBP_OT_export_virtools/execute') + progress.enter_substeps(len(material_crets), tr_text) for mtl, vtmaterial in material_crets: # set name @@ -493,7 +499,8 @@ def _export_virtools_textures( texture_crets: tuple[_TTexturePair, ...] ) -> None: # start saving - progress.enter_substeps(len(texture_crets), "Saving Textures") + tr_text: str = bpy.app.translations.pgettext_rpt('Saving Textures', 'BBP_OT_export_virtools/execute') + progress.enter_substeps(len(texture_crets), tr_text) for tex, vttexture in texture_crets: # set name @@ -532,7 +539,8 @@ def _save_virtools_document( compress_level: int ) -> None: - progress.enter_substeps(1, "Saving Document") + tr_text: str = bpy.app.translations.pgettext_rpt('Saving Document', 'BBP_OT_export_virtools/execute') + progress.enter_substeps(1, tr_text) writer.save(file_name, texture_save_opt, use_compress, compress_level) progress.step() progress.leave_substeps() diff --git a/bbp_ng/OP_IMPORT_virtools.py b/bbp_ng/OP_IMPORT_virtools.py index 193da2c..6002cb0 100644 --- a/bbp_ng/OP_IMPORT_virtools.py +++ b/bbp_ng/OP_IMPORT_virtools.py @@ -80,11 +80,13 @@ def _import_virtools_textures( ) -> dict[bmap.BMTexture, bpy.types.Image]: # create map texture_cret_map: dict[bmap.BMTexture, bpy.types.Image] = {} - progress.enter_substeps(reader.get_texture_count(), "Loading Textures") + # notify steps + tr_text: str = bpy.app.translations.pgettext_rpt('Loading Textures', 'BBP_OT_import_virtools/execute') + progress.enter_substeps(reader.get_texture_count(), tr_text) # create another temp folder for raw data virtools texture importing with tempfile.TemporaryDirectory() as rawdata_temp: - tr_text: str = bpy.app.translations.pgettext_rpt( + tr_text = bpy.app.translations.pgettext_rpt( 'Texture Raw Data Temporary Directory: {0}', 'BBP_OT_import_virtools/execute') print(tr_text.format(rawdata_temp)) @@ -148,7 +150,9 @@ def _import_virtools_materials( ) -> dict[bmap.BMMaterial, bpy.types.Material]: # create map and prepare progress material_cret_map: dict[bmap.BMMaterial, bpy.types.Material] = {} - progress.enter_substeps(reader.get_material_count(), "Loading Materials") + # notify steps + tr_text: str = bpy.app.translations.pgettext_rpt('Loading Materials', 'BBP_OT_import_virtools/execute') + progress.enter_substeps(reader.get_material_count(), tr_text) for vtmaterial in reader.get_materials(): # create mtl @@ -213,7 +217,9 @@ def _import_virtools_meshes( ) -> dict[bmap.BMMesh, bpy.types.Mesh]: # create map and prepare progress mesh_cret_map: dict[bmap.BMMesh, bpy.types.Mesh] = {} - progress.enter_substeps(reader.get_mesh_count(), "Loading Meshes") + # notify steps + tr_text: str = bpy.app.translations.pgettext_rpt('Loading Meshes', 'BBP_OT_import_virtools/execute') + progress.enter_substeps(reader.get_mesh_count(), tr_text) for vtmesh in reader.get_meshs(): # create mesh @@ -309,7 +315,9 @@ def _import_virtools_3dobjects( ) -> dict[bmap.BM3dObject, bpy.types.Object]: # create map and prepare progress obj3d_cret_map: dict[bmap.BM3dObject, bpy.types.Object] = {} - progress.enter_substeps(reader.get_3dobject_count(), "Loading 3dObjects") + # notify steps + tr_text: str = bpy.app.translations.pgettext_rpt('Loading 3dObjects', 'BBP_OT_import_virtools/execute') + progress.enter_substeps(reader.get_3dobject_count(), tr_text) for vt3dobj in reader.get_3dobjects(): # get virtools binding mesh data first @@ -353,7 +361,8 @@ def _import_virtools_lights( resolver: UTIL_ioport_shared.ConflictResolver ) -> None: # prepare progress - progress.enter_substeps(reader.get_target_light_count(), "Loading Lights") + tr_text: str = bpy.app.translations.pgettext_rpt('Loading Lights', 'BBP_OT_import_virtools/execute') + progress.enter_substeps(reader.get_target_light_count(), tr_text) # please note light is slightly different between virtools and blender. # in virtools, light is the sub class of 3d entity. @@ -414,7 +423,8 @@ def _import_virtools_groups( sector_count: int = 1 # prepare progress - progress.enter_substeps(reader.get_group_count(), "Loading Groups") + tr_text: str = bpy.app.translations.pgettext_rpt('Loading Groups', 'BBP_OT_import_virtools/execute') + progress.enter_substeps(reader.get_group_count(), tr_text) for vtgroup in reader.get_groups(): # if this group do not have name, skip it @@ -449,7 +459,8 @@ def _import_virtools_groups( progress.leave_substeps() # now we can assign 3dobject group data by reverse map - progress.enter_substeps(len(reverse_map), "Applying Groups") + tr_text: str = bpy.app.translations.pgettext_rpt('Applying Groups', 'BBP_OT_import_virtools/execute') + progress.enter_substeps(len(reverse_map), tr_text) for mapk, mapv in reverse_map.items(): # check object assoc_obj = obj3d_cret_map.get(mapk, None) diff --git a/bbp_ng/UTIL_naming_convension.py b/bbp_ng/UTIL_naming_convension.py index f0f7325..d90f18b 100644 --- a/bbp_ng/UTIL_naming_convension.py +++ b/bbp_ng/UTIL_naming_convension.py @@ -291,7 +291,9 @@ class VirtoolsGroupConvention(): int(regex_result.group(1)) ) - if reporter: reporter.add_error("PC_Checkpoints or PR_Resetpoints detected. But couldn't get sector from name.") + tr_text: str = bpy.app.translations.pgettext_rpt( + "PC_Checkpoints or PR_Resetpoints detected. But couldn't get sector from name.", 'BBP/UTIL_naming_convension.VirtoolsGroupConvention') + if reporter: reporter.add_error(tr_text) return None @staticmethod @@ -311,6 +313,9 @@ class VirtoolsGroupConvention(): @staticmethod def parse_from_object(obj: bpy.types.Object, reporter: RenameErrorReporter | None) -> BallanceObjectInfo | None: + # declare translation string type + tr_text: str + # create visitor with PROP_virtools_group.VirtoolsGroupsHelper(obj) as gp: # if no group, we should consider it is decoration or skylayer @@ -331,10 +336,14 @@ class VirtoolsGroupConvention(): # these type's data should be gotten from its name return VirtoolsGroupConvention.__get_pcpr_from_name(obj.name, reporter) case _: - if reporter: reporter.add_error("The match of Unique Component lost.") + tr_text = bpy.app.translations.pgettext_rpt( + "The match of Unique Component lost.", 'BBP/UTIL_naming_convension.VirtoolsGroupConvention') + if reporter: reporter.add_error(tr_text) return None elif len(inter_gps) != 0: - if reporter: reporter.add_error("A Multi-grouping Unique Component.") + tr_text = bpy.app.translations.pgettext_rpt( + "A Multi-grouping Unique Component.", 'BBP/UTIL_naming_convension.VirtoolsGroupConvention') + if reporter: reporter.add_error(tr_text) return None # distinguish normal elements @@ -346,7 +355,9 @@ class VirtoolsGroupConvention(): gotten_sector: int | None = VirtoolsGroupConvention.__get_sector_from_groups(gp.iterate_groups()) if gotten_sector is None: # fail to get sector - if reporter: reporter.add_error("Component detected. But couldn't get sector from CKGroup data.") + tr_text = bpy.app.translations.pgettext_rpt( + "Component detected. But couldn't get sector from CKGroup data.", 'BBP/UTIL_naming_convension.VirtoolsGroupConvention') + if reporter: reporter.add_error(tr_text) return None return BallanceObjectInfo.create_from_component( gotten_elements, @@ -354,7 +365,9 @@ class VirtoolsGroupConvention(): ) elif len(inter_gps) != 0: # must be a weird grouping, report it - if reporter: reporter.add_error("A Multi-grouping Component.") + tr_text = bpy.app.translations.pgettext_rpt( + "A Multi-grouping Component.", 'BBP/UTIL_naming_convension.VirtoolsGroupConvention') + if reporter: reporter.add_error(tr_text) return None # distinguish road @@ -370,7 +383,9 @@ class VirtoolsGroupConvention(): elif len(floor_result) == 0 and len(rail_result) > 0: return BallanceObjectInfo.create_from_others(BallanceObjectType.WOOD) else: - if reporter: reporter.add_warning("Can't distinguish object between Floors and Rails. Suppose it is Floors.") + tr_text = bpy.app.translations.pgettext_rpt( + "Can't distinguish object between Floors and Rails. Suppose it is Floors.", 'BBP/UTIL_naming_convension.VirtoolsGroupConvention') + if reporter: reporter.add_warning(tr_text) return BallanceObjectInfo.create_from_others(BallanceObjectType.FLOOR) elif gp.contain_group('Phys_FloorStopper'): return BallanceObjectInfo.create_from_others(BallanceObjectType.STOPPER) @@ -378,7 +393,9 @@ class VirtoolsGroupConvention(): return BallanceObjectInfo.create_from_others(BallanceObjectType.DEPTH_CUBE) # no matched - if reporter: reporter.add_error("Group match lost.") + tr_text = bpy.app.translations.pgettext_rpt( + "Group match lost.", 'BBP/UTIL_naming_convension.VirtoolsGroupConvention') + if reporter: reporter.add_error(tr_text) return None @staticmethod @@ -427,8 +444,9 @@ class VirtoolsGroupConvention(): gp.add_group(build_name_from_sector_index(typing.cast(int, info.mSector))) case _: - if reporter is not None: - reporter.add_error('No matched info.') + tr_text: str = bpy.app.translations.pgettext_rpt( + "No matched info.", 'BBP/UTIL_naming_convension.VirtoolsGroupConvention') + if reporter: reporter.add_error(tr_text) return False return True @@ -480,8 +498,9 @@ class YYCToolchainConvention(): if name == 'SkyLayer': return BallanceObjectInfo.create_from_others(BallanceObjectType.SKYLAYER) - if reporter is not None: - reporter.add_error("Name match lost.") + tr_text: str = bpy.app.translations.pgettext_rpt( + "Name match lost.", 'BBP/UTIL_naming_convension.YYCToolchainConvention') + if reporter: reporter.add_error(tr_text) return None @@ -523,8 +542,9 @@ class YYCToolchainConvention(): info.mComponentType, info.mSector) case _: - if reporter is not None: - reporter.add_error('No matched info.') + tr_text: str = bpy.app.translations.pgettext_rpt( + "No matched info.", 'BBP/UTIL_naming_convension.YYCToolchainConvention') + if reporter: reporter.add_error(tr_text) return None @staticmethod @@ -586,8 +606,9 @@ class ImengyuConvention(): if name == 'SkyLayer': return BallanceObjectInfo.create_from_others(BallanceObjectType.SKYLAYER) - if reporter is not None: - reporter.add_error("Name match lost.") + tr_text: str = bpy.app.translations.pgettext_rpt( + "Name match lost.", 'BBP/UTIL_naming_convension.ImengyuConvention') + if reporter: reporter.add_error(tr_text) return None @staticmethod @@ -631,8 +652,9 @@ class ImengyuConvention(): ) case _: - if reporter is not None: - reporter.add_error('No matched info.') + tr_text: str = bpy.app.translations.pgettext_rpt( + "No matched info.", 'BBP/UTIL_naming_convension.ImengyuConvention') + if reporter: reporter.add_error(tr_text) return None @staticmethod