diff --git a/core/properties.py b/core/properties.py index 9bf108d..9841212 100644 --- a/core/properties.py +++ b/core/properties.py @@ -12,7 +12,12 @@ def register(): default=default_language, update=update_language ) + + bpy.types.Scene.avatar_toolkit_language_changed = bpy.props.BoolProperty(default=False) def unregister(): if hasattr(bpy.types.Scene, "avatar_toolkit_language"): - del bpy.types.Scene.avatar_toolkit_language \ No newline at end of file + del bpy.types.Scene.avatar_toolkit_language + + if hasattr(bpy.types.Scene, "avatar_toolkit_language_changed"): + del bpy.types.Scene.avatar_toolkit_language_changed diff --git a/functions/translations.py b/functions/translations.py index c60e886..9e2a742 100644 --- a/functions/translations.py +++ b/functions/translations.py @@ -87,8 +87,10 @@ def update_language(self, context): print(f"Updating language to: {self.avatar_toolkit_language}") # Debug print save_preference("language", int(self.avatar_toolkit_language)) load_translations() - # Reload the addon - bpy.ops.script.reload() + # Set a flag to indicate that a language change has occurred + context.scene.avatar_toolkit_language_changed = True + # Show popup after language change + bpy.ops.avatar_toolkit.translation_restart_popup('INVOKE_DEFAULT') # Initial load of translations print("Performing initial load of translations") # Debug print diff --git a/resources/translations/en_US.json b/resources/translations/en_US.json index c9f60cc..211cb5e 100644 --- a/resources/translations/en_US.json +++ b/resources/translations/en_US.json @@ -31,7 +31,11 @@ "Tools.convert_to_resonite.desc": "Converts bone names on a model to names compatable with Resonite", "Settings.label": "Settings", "Settings.language.label": "Language", - "Settings.language.desc": "Select the language for the addon's UI" + "Settings.language.desc": "Select the language for the addon's UI", + "Settings.translation_restart_popup.label": "Translation Update", + "Settings.translation_restart_popup.description": "Information about translation updates", + "Settings.translation_restart_popup.message1": "Some translations may not apply", + "Settings.translation_restart_popup.message2": "until you restart Blender." } } \ No newline at end of file diff --git a/resources/translations/ja_JP.json b/resources/translations/ja_JP.json index 0fb43c5..01e8d3b 100644 --- a/resources/translations/ja_JP.json +++ b/resources/translations/ja_JP.json @@ -31,6 +31,10 @@ "Tools.convert_to_resonite.desc": "モデルのボーン名をResoniteと互換性のある名前に変換します", "Settings.label": "設定", "Settings.language.label": "言語", - "Settings.language.desc": "アドオンのUI言語を選択してください" + "Settings.language.desc": "アドオンのUI言語を選択してください", + "Settings.translation_restart_popup.label": "翻訳の更新", + "Settings.translation_restart_popup.description": "翻訳の更新に関する情報", + "Settings.translation_restart_popup.message1": "一部の翻訳は適用されない場合があります", + "Settings.translation_restart_popup.message2": "Blenderを再起動するまで。" } } diff --git a/ui/settings.py b/ui/settings.py index 4287a9c..36089e9 100644 --- a/ui/settings.py +++ b/ui/settings.py @@ -15,3 +15,26 @@ class AvatarToolkitSettingsPanel(bpy.types.Panel): def draw(self, context): layout = self.layout layout.prop(context.scene, "avatar_toolkit_language", text=t("Settings.language.label")) + +@register_wrap +class AVATAR_TOOLKIT_OT_translation_restart_popup(bpy.types.Operator): + bl_idname = "avatar_toolkit.translation_restart_popup" + bl_label = t("Settings.translation_restart_popup.label") + bl_description = t("Settings.translation_restart_popup.description") + bl_options = {'INTERNAL'} + + def execute(self, context): + if context.scene.avatar_toolkit_language_changed: + # Reload the addon after the popup is closed + bpy.ops.script.reload() + context.scene.avatar_toolkit_language_changed = False + return {'FINISHED'} + + def invoke(self, context, event): + return context.window_manager.invoke_props_dialog(self, width=300) + + def draw(self, context): + layout = self.layout + layout.label(text=t("Settings.translation_restart_popup.message1")) + layout.label(text=t("Settings.translation_restart_popup.message2")) +