From 1c9dc63736c961b88c43cbb8c07dd3fb6f353bc3 Mon Sep 17 00:00:00 2001 From: Cyrille Bougot Date: Thu, 5 Feb 2026 11:27:55 +0100 Subject: [PATCH 1/3] Fix compatibility with 2026.1 --- .../globalPlugins/instantTranslate/__init__.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/addon/globalPlugins/instantTranslate/__init__.py b/addon/globalPlugins/instantTranslate/__init__.py index c17d74d..fd7f24d 100644 --- a/addon/globalPlugins/instantTranslate/__init__.py +++ b/addon/globalPlugins/instantTranslate/__init__.py @@ -36,9 +36,14 @@ from speech import LangChangeCommand import braille import wx -import speech import speechViewer -from versionInfo import version_year +try: + # For NVDA 2021.1 and above + from speech import speech +except ImportError: + # For NVDA 2020.4 and below + import speech + _curAddon = addonHandler.getCodeAddon() addonName = _curAddon.name.lower() @@ -54,8 +59,6 @@ else: lo_lang = s[0:s.find("_")] -speechModule = speech.speech if version_year>=2021 else speech - confspec = { "from": "string(default=auto)", "into": f"string(default={lo_lang})", @@ -112,8 +115,8 @@ def __init__(self, *args, **kwargs): self.lastTranslation = None InstantTranslateSettingsPanel.addonConf = self.addonConf gui.settingsDialogs.NVDASettingsDialog.categoryClasses.append(InstantTranslateSettingsPanel) - self._speak = speechModule.speak - speechModule.speak = self._localSpeak + self._speak = speech.speak + speech.speak = self._localSpeak self.lastSpokenText = '' self.settings = {"lang_from": "from", "lang_to": "into", "lang_swap": "swap", "copyTranslation": "copytranslatedtext", "autoSwap": "autoswap", "isAutoSwapped": "isautoswapped", "replaceUnderscores": "replaceUnderscores", "useMirror": "useMirror"} [setattr(self.__class__, propertyMethod, property(lambda self, propertyName=propertyName: self.addonConf[propertyName], lambda self, value, propertyName=propertyName: self.addonConf.__setitem__(propertyName, value))) for propertyMethod, propertyName in self.settings.items()] @@ -150,7 +153,7 @@ def script_ITLayer(self, gesture): def terminate(self): gui.settingsDialogs.NVDASettingsDialog.categoryClasses.remove(InstantTranslateSettingsPanel) - speechModule.speak = self._speak + speech.speak = self._speak @scriptHandler.script( # Translators: message presented in input help mode, when user presses the shortcut keys for this addon. From d3b1b97ef0fb110f435917e09e18f47f2a2e15ba Mon Sep 17 00:00:00 2001 From: Cyrille BOUGOT Date: Thu, 5 Feb 2026 23:03:26 +0100 Subject: [PATCH 2/3] Do not use deprecated getdefaultlocale --- .../instantTranslate/__init__.py | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/addon/globalPlugins/instantTranslate/__init__.py b/addon/globalPlugins/instantTranslate/__init__.py index fd7f24d..d1e114e 100644 --- a/addon/globalPlugins/instantTranslate/__init__.py +++ b/addon/globalPlugins/instantTranslate/__init__.py @@ -11,7 +11,7 @@ from .interface import InstantTranslateSettingsPanel from .langslist import g from .speechOnDemand import getSpeechOnDemandParameter, executeWithSpeakOnDemand -from locale import getdefaultlocale +from locale import getlocale from time import sleep from tones import beep from .translator import Translator @@ -50,18 +50,18 @@ _addonSummary = _curAddon.manifest['summary'] addonHandler.initTranslation() -lo_lang = getdefaultlocale() -s = lo_lang[0] -if s == "zh_HK": - lo_lang = "zh-TW" -elif s.startswith("zh"): - lo_lang = s.replace('_', '-') -else: - lo_lang = s[0:s.find("_")] +def getLocaleLanguage(): + lang, _unused = getlocale() + if lang == "zh_HK": + return "zh-TW" + elif lang.startswith("zh"): + return lang.replace('_', '-') + else: + return lang.split("_")[0] confspec = { "from": "string(default=auto)", -"into": f"string(default={lo_lang})", +"into": f"string(default={getLocaleLanguage()})", "swap": "string(default=en)", "copytranslatedtext": "boolean(default=true)", "autoswap": "boolean(default=true)", From 392fa8767cbd22b3a045f8f26c2700caae7a1a4c Mon Sep 17 00:00:00 2001 From: Cyrille Bougot Date: Thu, 12 Mar 2026 16:45:42 +0100 Subject: [PATCH 3/3] Fix more deprecations --- addon/globalPlugins/instantTranslate/__init__.py | 8 +++++++- .../globalPlugins/instantTranslate/donate_dialog.py | 12 ++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/addon/globalPlugins/instantTranslate/__init__.py b/addon/globalPlugins/instantTranslate/__init__.py index d1e114e..ceeff51 100644 --- a/addon/globalPlugins/instantTranslate/__init__.py +++ b/addon/globalPlugins/instantTranslate/__init__.py @@ -370,7 +370,13 @@ def script_displayHelp(self, gesture): description=_("Opens Instant Translate settings dialog."), ) def script_showSettings(self, gesture): - wx.CallAfter(gui.mainFrame._popupSettingsDialog, gui.settingsDialogs.NVDASettingsDialog, InstantTranslateSettingsPanel) + try: + # NVDA version >= 2023.2 + popupSettingsDialog = gui.mainFrame.popupSettingsDialog + except: + # NVDA version < 2023.2 + popupSettingsDialog = gui.mainFrame._popupSettingsDialog + wx.CallAfter(popupSettingsDialog, gui.settingsDialogs.NVDASettingsDialog, InstantTranslateSettingsPanel) @scriptHandler.script( # Translators: Presented in input help mode. diff --git a/addon/globalPlugins/instantTranslate/donate_dialog.py b/addon/globalPlugins/instantTranslate/donate_dialog.py index f7ea81f..57386f1 100644 --- a/addon/globalPlugins/instantTranslate/donate_dialog.py +++ b/addon/globalPlugins/instantTranslate/donate_dialog.py @@ -5,18 +5,26 @@ import addonHandler import gui +try: + # NVDA version >= 2025.1 + from gui.message import MessageDialog, DialogType + DIALOG_TYPE_WARNING = DialogType.WARNING +except ImportError: + # NVDA version < 2025.1 + from gui.nvdaControls import MessageDialog + DIALOG_TYPE_WARNING = MessageDialog.DIALOG_TYPE_WARNING import webbrowser import wx addonHandler.initTranslation() -class DonationDialog(gui.nvdaControls.MessageDialog): +class DonationDialog(MessageDialog): YOOMONEY_URL = "https://yoomoney.ru/to/4100117727255296" PAYPAL_URL = "https://paypal.me/gozaltech" def __init__(self, parent, title, message): - super().__init__(parent, title, message, dialogType=gui.nvdaControls.MessageDialog.DIALOG_TYPE_WARNING) + super().__init__(parent, title, message, dialogType=DIALOG_TYPE_WARNING) def _addButtons(self, buttonHelper): paypalBtn = buttonHelper.addButton(self, label=_("Donate via Paypal"), name="PAYPAL_URL")