وللبحث في القاموس الإفتراضي نستخدم الاختصار Control+Windows+F6.
ملاحظة: إذا لم تحدد قاموسًا افتراضيًا، فسيتم استخدام أول قاموس في القائمة.
يمكنك تغيير هذه الاختصارات في محاورة تخصيص اختصارات NVDA، ضمن قسم إضافة القواميس.
-
التحديث التلقائي
-
تتضمن هذه الإضافة ميزة التحديث التلقائي.
-
سيتم إجراء البحث عن إصدار جديد في كل مرة يتم فيها إعادة تشغيل NVDA.
-
إذا كنت تريد أن يحدث هذا، فانتقل إلى قائمة NVDA والتفضيلات والإعدادات وفي فئة إضافي.
التغييرات
+
Version 2023.07.19
+
+
Compatibility with NVDA 2023.1;
+
Small changes in code to call dialogs;
+
New and updated translations.
+
الإصدار 2022.10
Two more dictionaries, now totaling 70:
diff --git a/addon/doc/ar/readme.md b/addon/doc/ar/readme.md
index 1efc689..81f2ef8 100644
--- a/addon/doc/ar/readme.md
+++ b/addon/doc/ar/readme.md
@@ -3,7 +3,7 @@
## معلومات
* المطور: Rui Fontes, Ângelo Abrantes e Abel Passos do Nascimento Jr.
-* آخر تحديث في 03/11/2022
+* آخر تحديث في 19/07/2023
* تحميل [النسخة المستقرة][1]
* التوافق: NVDA version 2019.3 فما فوق
@@ -33,17 +33,15 @@
يمكنك تغيير هذه الاختصارات في محاورة تخصيص اختصارات NVDA، ضمن قسم إضافة القواميس.
-## التحديث التلقائي
-
-تتضمن هذه الإضافة ميزة التحديث التلقائي.
-
-سيتم إجراء البحث عن إصدار جديد في كل مرة يتم فيها إعادة تشغيل NVDA.
-
-إذا كنت تريد أن يحدث هذا، فانتقل إلى قائمة NVDA والتفضيلات والإعدادات وفي فئة إضافي.
## التغييرات
+## Version 2023.07.19
+* Compatibility with NVDA 2023.1;
+* Small changes in code to call dialogs;
+* New and updated translations.
+
### الإصدار 2022.10
* Two more dictionaries, now totaling 70:
The dictionaries introduced are: Tetun - Portuguese and Ottoman - Turkish;
@@ -76,4 +74,6 @@
### الإصدار 21.10
* إصدار أولي
-[1]: https://github.com/ruifontes/Dictionaries/releases/download/2022.10/dictionaries-2022.10.nvda-addon
+[1]: https://github.com/ruifontes/Dictionaries/releases/download/2023.07.19/dictionaries-2023.07.19.nvda-addon
+
+
diff --git a/addon/doc/es/README.md b/addon/doc/es/README.md
index 4aa8163..3f3e772 100644
--- a/addon/doc/es/README.md
+++ b/addon/doc/es/README.md
@@ -3,7 +3,7 @@
## Información
* Autores: Rui Fontes, Ângelo Abrantes y Abel Passos do Nascimento Jr.
-* Actualizado el 03/11/2022
+* Actualizado el 19/07/2023
* Descargar [versión estable][1]
* Compatibilidad con NVDA: versión 2019.3 y posteriores
@@ -31,19 +31,18 @@ Nota: Si no estableces un diccionario predeterminado, se utilizará el primer di
Puedes cambiar estas órdenes en el diálogo Gestos de Entrada, en la categoría Diccionarios.
-## Actualización automática
-Este complemento incluye una función de actualización automática.
-La comprobación de una nueva versión se realizará cada vez que se cargue NVDA.
-Si quieres que esto suceda, vas al menú de NVDA, Preferencias, Opciones y en la categoría del complemento marcas la casilla de verificación.
-
-
## Registro de cambios
+## Version 2023.07.19
+* Compatibility with NVDA 2023.1;
+* Small changes in code to call dialogs;
+* New and updated translations.
+
### Versión 2022.10
-* Two more dictionaries, now totaling 70:
- The dictionaries introduced are: Tetun - Portuguese and Ottoman - Turkish;
-* Some bug fixes.
+* Dos diccionarios más, ahora totalizando 70:
+ Los diccionarios introducidos son: Tetun - Portugués y Ottoman - Turco;
+* Correcciones de algunos fallos.
### Versión 22.06
* Los diccionarios ahora son 68
@@ -76,4 +75,6 @@ Si quieres que esto suceda, vas al menú de NVDA, Preferencias, Opciones y en la
### Versión 21.10
* Versión inicial.
-[1]: https://github.com/ruifontes/Dictionaries/releases/download/2022.10/dictionaries-2022.10.nvda-addon
+[1]: https://github.com/ruifontes/Dictionaries/releases/download/2023.07.19/dictionaries-2023.07.19.nvda-addon
+
+
diff --git a/addon/doc/fr/README.md b/addon/doc/fr/README.md
index 6dad161..ca7cba9 100644
--- a/addon/doc/fr/README.md
+++ b/addon/doc/fr/README.md
@@ -3,7 +3,7 @@
## Informations
* Auteurs: Rui Fontes, Ângelo Abrantes et Abel Passos do Nascimento Jr.
-* Mis à jour le 03/11/2022
+* Mis à jour le 19/07/2023
* Télécharger [version stable][1]
* Compatibilité NVDA: version 2019.3 et ultérieure
@@ -31,19 +31,18 @@ Remarque: Si vous ne définissez pas un dictionnaire par défaut, le premier dic
Vous pouvez modifier ces commandes dans la boîte de dialogue Gestes de commandes, dans la catégorie Dictionnaires.
-## Mise à jour automatique
-Cette extension comprend une fonction de mise à jour automatique.
-La vérification d'une nouvelle version sera effectuée chaque fois que NVDA est chargé.
-Si vous voulez que cela se produise, aller dans le menu NVDA, Préférences, Paramètres et dans la catégorie de l'extension, cochez la case à cocher.
-
-
## Journal des changements
+## Version 2023.07.19
+* Compatibility with NVDA 2023.1;
+* Small changes in code to call dialogs;
+* New and updated translations.
+
### Version 2022.10
-* Two more dictionaries, now totaling 70:
- The dictionaries introduced are: Tetun - Portuguese and Ottoman - Turkish;
-* Some bug fixes.
+* Deux autres dictionnaires, totalisant maintenant 70:
+ Les dictionnaires introduits sont: Tetun - Portugais et Ottoman - Turc;
+* Corrections de quelques bogues.
### Version 22.06
* Les dictionnaires sont maintenant 68
@@ -76,4 +75,4 @@ Si vous voulez que cela se produise, aller dans le menu NVDA, Préférences, Par
### Version 21.10
* Version initiale.
-[1]: https://github.com/ruifontes/Dictionaries/releases/download/2022.10/dictionaries-2022.10.nvda-addon
+[1]: https://github.com/ruifontes/Dictionaries/releases/download/2023.07.19/dictionaries-2023.07.19.nvda-addon
diff --git a/addon/doc/pt/README.md b/addon/doc/pt/README.md
index b0267cd..58e1c48 100644
--- a/addon/doc/pt/README.md
+++ b/addon/doc/pt/README.md
@@ -3,7 +3,7 @@
## Informações
* Autores: Rui Fontes, Ângelo Abrantes e Abel Passos do Nascimento Jr.
-* Actualizado em 03/11/2022
+* Actualizado em 19/07/2023
* Descarregar [versão estável][1]
* Compatibilidade: NVDA versão 2019.3 e posteriores
@@ -34,18 +34,14 @@ Nota: Se não definir nenhum dicionário padrão será utilizado o primeiro dici
É possível alterar estes comandos no diálogo Definir comandos, na secção Dicionários.
-## Atualização automática
-
-Este extra inclui um recurso de atualização automática.
-
-A verificação de existência de nova versão será executada cada vez que o NVDA é carregado.
-
-Se desejar que isso aconteça, vá ao menu do NVDA, Preferências, Configurações e na categoria do extra marque a caixa de verificação.
-
-
## Alterações
+## Version 2023.07.19
+* Compatibilidade com NVDA 2023.1;
+* Pequenas alterações de código para chamar diálogos;
+* Novas e actualizadas traduções.
+
### Versão 2022.10
* Mais dois dicionários, totalizando agora 70:
Os dicionários introduzidos são: Tetun - Português e Otomano - Turco;
@@ -78,4 +74,6 @@ Se desejar que isso aconteça, vá ao menu do NVDA, Preferências, Configuraçõ
### Versão 21.10
* Lançamento inicial
-[1]: https://github.com/ruifontes/Dictionaries/releases/download/2022.10/dictionaries-2022.10.nvda-addon
+[1]: https://github.com/ruifontes/Dictionaries/releases/download/2023.07.19/dictionaries-2023.07.19.nvda-addon
+
+
diff --git a/addon/doc/tr/readme.md b/addon/doc/tr/readme.md
index 74931a8..adc2251 100644
--- a/addon/doc/tr/readme.md
+++ b/addon/doc/tr/readme.md
@@ -3,7 +3,7 @@
## bilgiler
* Yazarlar: Rui Fontes, Ângelo Abrantes ve Abel Passos do Nascimento Jr.
-* tarihinde güncellendi 03/11/2022
+* 19/07/2023 tarihinde güncellendi
* [Kararlı sürümü indirin][1]
* Uyumluluk: NVDA sürüm 2019.3 ve sonrası
@@ -31,19 +31,18 @@ Not: Varsayılan bir sözlük tanımlamazsanız, listedeki ilk sözlük kullanı
Bu komutları, Girdi hareketleri iletişim kutusunda, Sözlükler başlığı altında değiştirebilirsiniz.
-## Otomatik güncelleme
-Bu eklenti otomatik güncelleme özelliği içerir.
-NVDA her açıldığında yeni bir sürüm kontrolü yapılacaktır.
-Bu işlemin gerçekleşmesini istiyorsanız, NVDA menüsü, Tercihler, Ayarlar'a gidin ve sözlükler kategorisinde onay kutusunu işaretleyin.
-
-
## Değişiklikler
+## Version 2023.07.19
+* Compatibility with NVDA 2023.1;
+* Small changes in code to call dialogs;
+* New and updated translations.
+
### Sürüm 2022.10
-* Two more dictionaries, now totaling 70:
- The dictionaries introduced are: Tetun - Portuguese and Ottoman - Turkish;
-* Some bug fixes.
+* Şimdi yeni iki sözlüğün eklenmesiyle, toplam 70 adet sözlük oldu.
+ Eklenen sözlükler şunlardır: Tetun - Portekizce ve Osmanlıca - Türkçe;
+* Bazı hata düzeltmeleri.
### Sürüm 22.06
* 68 adet sözlük bulunuyor
@@ -72,4 +71,6 @@ Bu işlemin gerçekleşmesini istiyorsanız, NVDA menüsü, Tercihler, Ayarlar'a
### Sürüm 21.10
* İlk sürüm
-[1]: https://github.com/ruifontes/Dictionaries/releases/download/2022.10/dictionaries-2022.10.nvda-addon
+[1]: https://github.com/ruifontes/Dictionaries/releases/download/2023.07.19/dictionaries-2023.07.19.nvda-addon
+
+
diff --git a/addon/globalPlugins/dictionaries/__init__.py b/addon/globalPlugins/dictionaries/__init__.py
index 83a78ca..78d640b 100644
--- a/addon/globalPlugins/dictionaries/__init__.py
+++ b/addon/globalPlugins/dictionaries/__init__.py
@@ -7,20 +7,22 @@
# import the necessary modules.
import globalPluginHandler
+import globalVars
import core
import api
import os
+from threading import Thread
import wx
import gui
+from gui.settingsDialogs import NVDASettingsDialog, SettingsPanel
+from gui import guiHelper
import ui
from . import sqlite3
import threading
import urllib.request
-# For update process
-from .update import *
import time
-# Necessary For translation
from scriptHandler import script
+# Necessary For translation
import addonHandler
addonHandler.initTranslation()
@@ -155,6 +157,7 @@
# Translators: Name of a dictionary
# Translators: Name of a dictionary
_("Mathematic elementar (in portuguese)") : "glossario-elementar-de-matematica.db",
+ # Translators: Name of a dictionary
_("Medical (in french)") : "dicionario-medico(frances).db",
# Translators: Name of a dictionary
_("Medical popular (in portuguese)") : "dicionario-medico.db",
@@ -163,6 +166,8 @@
# Translators: Name of a dictionary
_("Music (in portuguese)") : "dicionario_de_musica.db",
# Translators: Name of a dictionary
+ _("Music (in turkish)") : "Turkish_Music_Terms.db",
+ # Translators: Name of a dictionary
_("Nursing (in portuguese)") : "Termos_tecnicos_de_enfermagem_mais_usados.db",
# Translators: Name of a dictionary
_("Philosophy (Cambridge)") : "cambridge-dictionary-of-philosophy.db",
@@ -206,6 +211,7 @@
"dicionario-medico(frances).db",
"dicionario-medico.db",
"dicionario_de_musica.db",
+ "Turkish_Music_Terms.db",
"Termos_tecnicos_de_enfermagem_mais_usados.db",
"cambridge-dictionary-of-philosophy.db",
"dicionario-de-filosofia.db",
@@ -230,16 +236,6 @@ def __init__(self):
return
# Translators: Dialog title
title = _("Dictionaries")
- # To allow waiting end of network tasks
- core.postNvdaStartup.register(self.networkTasks)
-
- def networkTasks(self):
- # Calling the update process...
- _MainWindows = Initialize()
- _MainWindows.start()
-
- def terminate(self):
- core.postNvdaStartup.unregister(self.networkTasks)
#defining a script with decorator:
@script(
@@ -250,7 +246,11 @@ def terminate(self):
category= _("Dictionaries"))
def script_openMainWindow(self, event):
#Calling the class "MainWindow" to select the dictionary to use or to download more.
- gui.mainFrame._popupSettingsDialog(MainWindow)
+ dialog0 = MainWindow(gui.mainFrame)
+ if not dialog0.IsShown():
+ gui.mainFrame.prePopup()
+ dialog0.Show()
+ gui.mainFrame.postPopup()
@script(
gesture="kb:Control+windows+F6",
@@ -275,7 +275,11 @@ def script_searchOnDefaultDict(self, event):
selectedDict = defaultDict
dictToUse = os.path.join(filepath, selectedDict)
# Calling the class "SearchWindow" to search a definition on the default dict
- gui.mainFrame._popupSettingsDialog(SearchWindow)
+ dialog1 = SearchWindow(gui.mainFrame)
+ if not dialog1.IsShown():
+ gui.mainFrame.prePopup()
+ dialog1.Show()
+ gui.mainFrame.postPopup()
class MainWindow(wx.Dialog):
@@ -285,8 +289,8 @@ def __init__(self, *args, **kwds):
# Translators: Dialog title
self.SetTitle(_("Dictionaries"))
- #Filter the dictionaries present on dicts folder
global missingDicts, availableDictsList, dictList, selectedDict
+ # Filter the dictionaries present on dicts folder
# Get the available dicts from the dicionarios folder
availableDictsList = os.listdir(filepath)
missingDicts = []
@@ -297,7 +301,7 @@ def __init__(self, *args, **kwds):
if dict.get(dictList[n]) not in availableDictsList:
# False, so join to missing dicts list...
missingDicts.append(dictList[n])
- # And delete from available dicts list
+ # And delete from dicts list
del dictList[n]
# To allow to check all dicts since we have deleted the item with number n...
n -= 1
@@ -372,7 +376,11 @@ def searchWindow(self, event):
# Get the path of selected dictionary
dictToUse = os.path.join(filepath, selectedDict)
# We have the dict, so call the search window
- gui.mainFrame._popupSettingsDialog(SearchWindow)
+ dialog1 = SearchWindow(gui.mainFrame)
+ if not dialog1.IsShown():
+ gui.mainFrame.prePopup()
+ dialog1.Show()
+ gui.mainFrame.postPopup()
def setAsDefaultDict(self, event):
global defaultDict
@@ -382,7 +390,11 @@ def setAsDefaultDict(self, event):
def manageDicts(self, event):
event.Skip()
# Calling the Manage dictionaries window
- gui.mainFrame._popupSettingsDialog(ManageDicts)
+ dialog2 = ManageDicts(gui.mainFrame)
+ if not dialog2.IsShown():
+ gui.mainFrame.prePopup()
+ dialog2.Show()
+ gui.mainFrame.postPopup()
def quit(self, event):
self.Destroy()
@@ -472,9 +484,6 @@ def performSearch(self, event):
# Define what to search
if selectedDict in thematics:
wordToSearch = self.list_ctrl_1.GetItemText(self.list_ctrl_1.GetFocusedItem())
- else:
- wordToSearch = self.text_ctrl_1.GetValue()
- if selectedDict in thematics:
# Open the selected dictionary file
self.dbDict = sqlite3.connect(dictToUse, check_same_thread=False)
self.dbCursor = self.dbDict.cursor()
@@ -483,10 +492,19 @@ def performSearch(self, event):
ourLine = self.dbCursor.fetchone()
self.dbDict.close()
# Call the window showing the results
- gui.mainFrame._popupSettingsDialog(ShowResults)
+ dialog3 = ShowResults(gui.mainFrame)
+ if not dialog3.IsShown():
+ gui.mainFrame.prePopup()
+ dialog3.Show()
+ gui.mainFrame.postPopup()
else:
+ wordToSearch = self.text_ctrl_1.GetValue()
# Call the window showing the index
- gui.mainFrame._popupSettingsDialog(IndexWindow)
+ dialog4 = IndexWindow(gui.mainFrame)
+ if not dialog4.IsShown():
+ gui.mainFrame.prePopup()
+ dialog4.Show()
+ gui.mainFrame.postPopup()
def quit(self, event):
self.Close()
@@ -528,7 +546,11 @@ def __init__(self, *args, **kwds):
# To destroy the window in construction because it is unnecessary...
self.Destroy()
# Calling the show results window
- gui.mainFrame._popupSettingsDialog(ShowResults)
+ dialog3 = ShowResults(gui.mainFrame)
+ if not dialog3.IsShown():
+ gui.mainFrame.prePopup()
+ dialog3.Show()
+ gui.mainFrame.postPopup()
elif len(occurs) >=2:
# There are several items to choose from, so show a list of them...
self.list_ctrl_1.ClearAll()
@@ -546,7 +568,11 @@ def __init__(self, *args, **kwds):
# To destroy the window in construction because it is unnecessary...
self.Destroy()
# Call a window to ask if user wants to search again...
- gui.mainFrame._popupSettingsDialog(NewSearch)
+ dialog5 = NewSearch(gui.mainFrame)
+ if not dialog5.IsShown():
+ gui.mainFrame.prePopup()
+ dialog5.Show()
+ gui.mainFrame.postPopup()
sizer_2 = wx.StdDialogButtonSizer()
sizer_1.Add(sizer_2, 0, wx.ALIGN_RIGHT | wx.ALL, 4)
@@ -586,7 +612,11 @@ def performSearch(self, event):
ourLine = self.dbCursor.fetchone()
self.dbDict.close()
# Call the window showing the results
- gui.mainFrame._popupSettingsDialog(ShowResults)
+ dialog3 = ShowResults(gui.mainFrame)
+ if not dialog3.IsShown():
+ gui.mainFrame.prePopup()
+ dialog3.Show()
+ gui.mainFrame.postPopup()
def quit(self, event):
self.Destroy()
@@ -635,7 +665,11 @@ def __init__(self, *args, **kwds):
def searchAgain(self, event):
event.Skip()
# Calling the window to search another entry
- gui.mainFrame._popupSettingsDialog(SearchWindow)
+ dialog1 = SearchWindow(gui.mainFrame)
+ if not dialog1.IsShown():
+ gui.mainFrame.prePopup()
+ dialog1.Show()
+ gui.mainFrame.postPopup()
class ShowResults(wx.Dialog):
@@ -686,7 +720,11 @@ def searchAgain(self, event):
self.Destroy()
event.Skip()
# Calling the window to search another entry
- gui.mainFrame._popupSettingsDialog(SearchWindow)
+ dialog1 = SearchWindow(gui.mainFrame)
+ if not dialog1.IsShown():
+ gui.mainFrame.prePopup()
+ dialog1.Show()
+ gui.mainFrame.postPopup()
def copyToClip(self, event):
event.Skip()
@@ -828,7 +866,7 @@ def deleteDict(self, event):
itemIndex = self.list_box_1.GetSelection()
# Get the name of the file
name = dict.get(self.list_box_1.GetStringSelection())
- # Get the full URL of the file
+ # Get the complete path of the file
file = os.path.join(filepath, name)
# Translators: Message dialog box asking confirmation to delete the dictionary
if gui.messageBox(_("Are you sure you want to delete the %s dictionary file?") %self.list_box_1.GetStringSelection(), _("Dictionaries"), style=wx.ICON_QUESTION|wx.YES_NO) == wx.YES:
diff --git a/addon/globalPlugins/dictionaries/dicionarios/ingles-sinonimos.db b/addon/globalPlugins/dictionaries/dicionarios/ingles-sinonimos.db
new file mode 100644
index 0000000000000000000000000000000000000000..f7158bc347a8a2766a1c2c150561a8af6ba6d530
GIT binary patch
literal 1191936
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