deskbar-applet r2271 - in trunk: . deskbar/core deskbar/handlers



Author: sebp
Date: Tue Jul 29 20:12:35 2008
New Revision: 2271
URL: http://svn.gnome.org/viewvc/deskbar-applet?rev=2271&view=rev

Log:
2008-07-29  Sebastian PÃlsterl  <sebp cvs gnome org>

    * deskbar/core/Utils.py:
    Added get_locale_lang function
    Fixed bug #544587: unknown locale
    
    * deskbar/handlers/wikipedia-suggest.py:
    * deskbar/handlers/yahoo.py:
    Use Utils.get_locale_lang to guess language.


Modified:
   trunk/ChangeLog
   trunk/deskbar/core/Utils.py
   trunk/deskbar/handlers/wikipedia-suggest.py
   trunk/deskbar/handlers/yahoo.py

Modified: trunk/deskbar/core/Utils.py
==============================================================================
--- trunk/deskbar/core/Utils.py	(original)
+++ trunk/deskbar/core/Utils.py	Tue Jul 29 20:12:35 2008
@@ -11,6 +11,7 @@
 import gobject
 import gtk
 import gtk.gdk
+import locale
 import logging
 import os
 import re
@@ -208,3 +209,15 @@
         return proxies
     else:
         return None
+    
+def get_locale_lang():
+    """
+    @returns language code corresponding to RFC 1766 of currently used locale
+    or None when the code is unknown
+    """
+    try:
+        localelang = locale.getlocale()[0]
+    except ValueError:
+        return None
+    
+    return localelang

Modified: trunk/deskbar/handlers/wikipedia-suggest.py
==============================================================================
--- trunk/deskbar/handlers/wikipedia-suggest.py	(original)
+++ trunk/deskbar/handlers/wikipedia-suggest.py	Tue Jul 29 20:12:35 2008
@@ -1,12 +1,11 @@
 from deskbar.core.GconfStore import GconfStore
-from deskbar.core.Utils import load_icon
+from deskbar.core.Utils import load_icon, get_locale_lang
 from deskbar.defs import VERSION
 from deskbar.handlers.actions.ShowUrlAction import ShowUrlAction
 from gettext import gettext as _
 import deskbar.interfaces.Match
 import deskbar.interfaces.Module
 import gtk
-import locale
 import logging
 import urllib
 
@@ -65,27 +64,45 @@
              'description': _("As you type, Wikipedia will offer suggestions."),
              'version': VERSION}
     
+    DEFAULT_LANG = "en"
+    
     def __init__(self):
         deskbar.interfaces.Module.__init__(self)
+        self._lang = None
         self._gconf = GconfStore.get_instance().get_client()
-        self._gconf.notify_add(GCONF_KEY, lambda x, y, z, a: self.set_lang(z.value.get_string()))
+        self._gconf.notify_add(GCONF_KEY, self._on_language_changed)
+        self._set_lang()
+    
+    def _set_lang(self):
         self._lang = self._gconf.get_string(GCONF_KEY)
-        # Try to guess language from current locale
         if self._lang == None:
-            lang = "en"
-            # we get (de_DE, UTF-8) and want only de
-            localelang = locale.getlocale()[0]
-            if localelang != None:
-                localelang = localelang.split("_")[0]
-            for l in LANGUAGES:
-                if l[1] == localelang:
-                    lang = localelang
-                    break
-            self._gconf.set_string(GCONF_KEY, lang)
-        
-    def set_lang(self, lang):
-        self._lang = lang
-        
+            localelang = self._guess_lang()
+            self._gconf.set_string(GCONF_KEY, localelang)
+            
+    def _guess_lang(self):
+        """ Try to guess lang """
+        localelang = get_locale_lang()
+        if localelang == None:
+            localelang = self.DEFAULT_LANG
+        else:
+            localelang = localelang.split("_")[0]
+            
+            # Check if the language is supported
+            for name, code in LANGUAGES:
+                if code == localelang:
+                    return localelang
+            
+            # Set fallback
+            localelang = self.DEFAULT_LANG
+                    
+        return localelang
+    
+    def _on_language_changed(self, client, cnxn_id, entry, data):
+        if entry.value == None:
+            self._set_lang()
+        else:
+            self._lang = entry.value.get_string()
+            
     def query(self, qstring):        
         args = {'lang': self._lang, 'search': qstring}
         url = WIKIPEDIA_SUGGEST_URL + '?' + urllib.urlencode(args)
@@ -148,11 +165,9 @@
         vbox.show_all()
         
         self._gconf = GconfStore.get_instance().get_client()
-        self._gconf.notify_add(GCONF_KEY, lambda x, y, z, a: self.set_lang(z.value.get_string()))
-        self.set_lang (self._gconf.get_string(GCONF_KEY))
-        
-    def set_lang(self, lang):
-        self.entry.set_text (lang)
+        lang = self._gconf.get_string(GCONF_KEY)
+        if lang != None:
+            self.entry.set_text (lang)
         
     def get_lang(self):
         return self.entry.get_text()

Modified: trunk/deskbar/handlers/yahoo.py
==============================================================================
--- trunk/deskbar/handlers/yahoo.py	(original)
+++ trunk/deskbar/handlers/yahoo.py	Tue Jul 29 20:12:35 2008
@@ -1,5 +1,5 @@
 from deskbar.core.GconfStore import GconfStore
-from deskbar.core.Utils import strip_html, get_proxy
+from deskbar.core.Utils import strip_html, get_proxy, get_locale_lang
 from deskbar.defs import VERSION
 from deskbar.handlers.actions.CopyToClipboardAction import CopyToClipboardAction
 from deskbar.handlers.actions.ShowUrlAction import ShowUrlAction
@@ -24,6 +24,48 @@
     
 GCONF_YAHOO_LANG = GconfStore.GCONF_DIR+"/yahoo/language"
 
+# Languages supported by Yahoo
+# see http://developer.yahoo.com/search/languages.html
+LANGUAGES = (
+    (_("Arabic"), "ar"),
+    (_("Bulgarian"), "bg"),
+    (_("Catalan"), "ca"),
+    (_("Chinese simplified"), "szh"),
+    (_("Chinese traditional"), "tzh"),
+    (_("Croatian"), "hr"),
+    (_("Czech"), "cs"),
+    (_("Danish"), "da"),
+    (_("Dutch"), "nl"),
+    (_("English"), "en"),
+    (_("Estonian"), "et"),
+    (_("Finnish"), "fi"),
+    (_("French"), "fr"),
+    (_("German"), "de"),
+    (_("Greek"), "el"),
+    (_("Hebrew"), "he"),
+    (_("Hungarian"), "hu"),
+    (_("Icelandic"), "is"),
+    (_("Indonesian"), "id"),
+    (_("Italian"), "it"),
+    (_("Japanese"), "ja"),
+    (_("Korean"), "ko"),
+    (_("Latvian"), "lv"),
+    (_("Lithuanian"), "lt"),
+    (_("Norwegian"), "no"),
+    (_("Persian"), "fa"),
+    (_("Polish"), "pl"),
+    (_("Portuguese"), "pt"),
+    (_("Romanian"), "ro"),
+    (_("Russian"), "ru"),
+    (_("Slovak"), "sk"),
+    (_("Serbian"), "sr"),
+    (_("Slovenian"), "sl"),
+    (_("Spanish"), "es"),
+    (_("Swedish"), "sv"),
+    (_("Thai"), "th"),
+    (_("Turkish"), "tr"),
+)
+    
 class OpenYahooAction(ShowUrlAction):
     
     def __init__(self, name, url):
@@ -66,13 +108,47 @@
     def __init__(self):
         deskbar.interfaces.Module.__init__(self)
         self.server = None
+        self._lang = None
         self._format_regex = re.compile("format:(\w+)")
-        
-    def _get_language(self):
-        lang = GconfStore.get_instance().get_client().get_string(GCONF_YAHOO_LANG)
-        if lang == None:
-            lang = self.DEFAULT_LANG
-        return lang
+        self._gconf = GconfStore.get_instance().get_client()
+        self._gconf.notify_add(GCONF_YAHOO_LANG, self._on_language_changed)
+        self._set_lang()
+        
+    def _on_language_changed(self, client, cnxn_id, entry, data):
+        if entry.value == None:
+            self._set_lang()
+        else:
+            self._lang = entry.value.get_string()
+            
+    def _set_lang(self):
+        self._lang = self._gconf.get_string(GCONF_YAHOO_LANG)
+        if self._lang == None:
+            localelang = self._guess_lang()
+            self._gconf.set_string(GCONF_YAHOO_LANG, localelang)
+    
+    def _guess_lang(self):
+        """ Try to guess lang """
+        localelang = get_locale_lang()
+        if localelang == None:
+            localelang = self.DEFAULT_LANG
+        else:
+            # Take care of exceptions
+            if localelang == 'zh_CN':
+                localelang = 'szh'
+            elif localelang == 'zh_TW':
+                localelang = 'tzh'
+            else:
+                localelang = localelang.split("_")[0]
+            
+            # Check if the language is supported
+            for name, code in LANGUAGES:
+                if code == localelang:
+                    return localelang
+            
+            # Set fallback
+            localelang = self.DEFAULT_LANG
+                    
+        return localelang
     
     def _get_parameters_from_query(self, qstring):
         """
@@ -80,7 +156,7 @@
         """
         params = {'appid': YAHOO_API_KEY,
                 'results': MAX_RESULTS,
-                'language': self._get_language()}
+                'language': self._lang}
         match = self._format_regex.search(qstring)
         if match != None:
             format = match.group(1)
@@ -328,47 +404,6 @@
             
 class YahooSearchConfigDialog(gtk.Dialog):
     
-    # Languages supported by Yahoo
-    # see http://developer.yahoo.com/search/languages.html
-    LANGUAGES = (
-    (_("Arabic"), "ar"),
-    (_("Bulgarian"), "bg"),
-    (_("Catalan"), "ca"),
-    (_("Chinese simplified"), "szh"),
-    (_("Chinese traditional"), "tzh"),
-    (_("Croatian"), "hr"),
-    (_("Czech"), "cs"),
-    (_("Danish"), "da"),
-    (_("Dutch"), "nl"),
-    (_("English"), "en"),
-    (_("Estonian"), "et"),
-    (_("Finnish"), "fi"),
-    (_("French"), "fr"),
-    (_("German"), "de"),
-    (_("Greek"), "el"),
-    (_("Hebrew"), "he"),
-    (_("Hungarian"), "hu"),
-    (_("Icelandic"), "is"),
-    (_("Indonesian"), "id"),
-    (_("Italian"), "it"),
-    (_("Japanese"), "ja"),
-    (_("Korean"), "ko"),
-    (_("Latvian"), "lv"),
-    (_("Lithuanian"), "lt"),
-    (_("Norwegian"), "no"),
-    (_("Persian"), "fa"),
-    (_("Polish"), "pl"),
-    (_("Portuguese"), "pt"),
-    (_("Romanian"), "ro"),
-    (_("Russian"), "ru"),
-    (_("Slovak"), "sk"),
-    (_("Serbian"), "sr"),
-    (_("Slovenian"), "sl"),
-    (_("Spanish"), "es"),
-    (_("Swedish"), "sv"),
-    (_("Thai"), "th"),
-    (_("Turkish"), "tr"),
-    )
     
     def __init__(self, parent):
         gtk.Dialog.__init__(self, title=_("Configure Yahoo!"),
@@ -386,7 +421,7 @@
         self.vbox2.pack_start(self.label, False)
         
         self.liststore = gtk.ListStore(str, str)
-        for lang in self.LANGUAGES:
+        for lang in LANGUAGES:
             self.liststore.append( lang )
                 
         self.combobox = gtk.ComboBox(self.liststore)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]