[gedit-plugins/translate-server] Initial implementation
- From: Jordi Mas <jmas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit-plugins/translate-server] Initial implementation
- Date: Sat, 17 Oct 2020 15:55:47 +0000 (UTC)
commit 9ab880e94bad3503077f3bb7a4be1ab9c036ad92
Author: Jordi Mas <jmas softcatala org>
Date: Sat Oct 17 17:55:42 2020 +0200
Initial implementation
.../org.gnome.gedit.plugins.translate.gschema.xml | 7 ++++++
plugins/translate/translate/__init__.py | 4 +++
plugins/translate/translate/services/apertium.py | 29 +++++++++++++++-------
plugins/translate/translate/services/service.py | 3 +++
plugins/translate/translate/settings.py | 3 +++
5 files changed, 37 insertions(+), 9 deletions(-)
---
diff --git a/plugins/translate/org.gnome.gedit.plugins.translate.gschema.xml
b/plugins/translate/org.gnome.gedit.plugins.translate.gschema.xml
index 3de4824..d10c11f 100644
--- a/plugins/translate/org.gnome.gedit.plugins.translate.gschema.xml
+++ b/plugins/translate/org.gnome.gedit.plugins.translate.gschema.xml
@@ -19,6 +19,13 @@
Language pair used to translate from one language to another
</description>
</key>
+ <key name="apertium-server" type="s">
+ <default>'https://www.apertium.org/apy'</default>
+ <summary>Apertium server end point</summary>
+ <description>
+ Apertium server end point
+ </description>
+ </key>
<key type="s" name="api-key">
<default>''</default>
<summary>API key for remote web service</summary>
diff --git a/plugins/translate/translate/__init__.py b/plugins/translate/translate/__init__.py
index e7fe0ef..e333254 100644
--- a/plugins/translate/translate/__init__.py
+++ b/plugins/translate/translate/__init__.py
@@ -99,6 +99,10 @@ class TranslateWindowActivatable(GObject.Object, Gedit.WindowActivatable, PeasGt
key = settings.get_apikey()
service.set_api_key(key)
+ if service_id == Services.APERTIUM_ID:
+ server = settings.get_apertium_server()
+ service.set_server(server)
+
service.init()
return service
diff --git a/plugins/translate/translate/services/apertium.py
b/plugins/translate/translate/services/apertium.py
index 48d783e..5da1f49 100644
--- a/plugins/translate/translate/services/apertium.py
+++ b/plugins/translate/translate/services/apertium.py
@@ -39,7 +39,7 @@ class Apertium(Service):
"eng|cat",
]
- SERVER = "https://www.apertium.org/apy"
+ DEFAULT_SERVER = "https://www.apertium.org/apy"
@staticmethod
def _clean_for_ut():
@@ -52,23 +52,29 @@ class Apertium(Service):
def has_api_key(self):
return False
-
+
def set_api_key(self, key):
pass
+ def set_server(self, server):
+ self.server = server
+
def get_api_hint(self):
pass
def init(self):
- self._fetch_remote_language_names_and_pairs()
-
+ self.server = self.DEFAULT_SERVER
+ self.tried_fetched_names = False
+
def get_language_names(self):
+ self._fetch_remote_language_names_and_pairs_once()
if len(Apertium.g_language_codes) > 0 and len(Apertium.g_language_names) > 0:
return Apertium.g_language_names
return self.DEFAULT_LANGUAGE_NAMES
def get_language_codes(self):
+ self._fetch_remote_language_names_and_pairs_once()
if len(Apertium.g_language_codes) > 0 and len(Apertium.g_language_names) > 0:
return Apertium.g_language_codes
@@ -101,6 +107,8 @@ class Apertium(Service):
return language_name
def get_language_pair_name(self, source, target, locales_names=None):
+ self._fetch_remote_language_names_and_pairs_once()
+
if locales_names is None:
locales_names = Apertium.g_locales_names
@@ -124,10 +132,13 @@ class Apertium(Service):
return locales_names
- def _fetch_remote_language_names_and_pairs(self):
- if len(Apertium.g_language_names) > 0:
+ def _fetch_remote_language_names_and_pairs_once(self):
+
+ if self.tried_fetched_names:
return
+ self.tried_fetched_names = True
+
try:
language_names = []
en_names_requested = False
@@ -158,7 +169,7 @@ class Apertium(Service):
def _get_remote_language_pairs(self):
- url = "{0}/listPairs".format(self.SERVER)
+ url = "{0}/listPairs".format(self.server)
response = urllib.request.urlopen(url)
data = json.loads(response.read().decode("utf-8"))
@@ -186,14 +197,14 @@ class Apertium(Service):
for locale_code in locales:
locales_string += locale_code + '+'
- url = "{0}/listLanguageNames?locale={1}&languages={2}".format(self.SERVER,
+ url = "{0}/listLanguageNames?locale={1}&languages={2}".format(self.server,
user_locale, locales_string)
response = urllib.request.urlopen(url)
return json.loads(response.read().decode("utf-8"))
def translate_text(self, text, language_pair):
- url = "{0}/translate?langpair={1}&markUnknown=no".format(self.SERVER, language_pair)
+ url = "{0}/translate?langpair={1}&markUnknown=no".format(self.server, language_pair)
url += "&q=" + urllib.parse.quote_plus(text.encode('utf-8'))
response = urllib.request.urlopen(url)
diff --git a/plugins/translate/translate/services/service.py b/plugins/translate/translate/services/service.py
index 5406c6e..60516fc 100644
--- a/plugins/translate/translate/services/service.py
+++ b/plugins/translate/translate/services/service.py
@@ -53,3 +53,6 @@ class Service(metaclass=ABCMeta):
def set_api_key(self, key):
pass
+ @abstractmethod
+ def set_server(self, server):
+ pass
diff --git a/plugins/translate/translate/settings.py b/plugins/translate/translate/settings.py
index e3f7cc2..dadcb91 100644
--- a/plugins/translate/translate/settings.py
+++ b/plugins/translate/translate/settings.py
@@ -27,6 +27,7 @@ class Settings():
LANGUAGE_PAIR = 'language-pair'
SERVICE = 'service'
API_KEY = 'api-key'
+ APERTIUM_SERVER_KEY = 'apertium-server'
def __init__(self):
self._settings = Gio.Settings.new(self.TRANSLATE_KEY_BASE)
@@ -55,3 +56,5 @@ class Settings():
def set_output_document(self, document):
self._settings.set_boolean(self.OUTPUT_TO_DOCUMENT, document)
+ def get_apertium_server(self):
+ return self._settings.get_string(self.APERTIUM_SERVER_KEY)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]