[gedit-plugins/translate-server] Initial implementation



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]