[orca] Fix for Orca ignoring dialects in profile-based language switching



commit e0480c659246479bb7326ea6ec856c090e223e81
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Sat Feb 23 18:21:02 2013 -0500

    Fix for Orca ignoring dialects in profile-based language switching

 src/orca/acss.py                    |    4 ++++
 src/orca/orca_gui_prefs.py          |    8 ++++++--
 src/orca/settings_manager.py        |    6 +++++-
 src/orca/speechdispatcherfactory.py |    4 +++-
 src/orca/speechserver.py            |    4 +++-
 5 files changed, 21 insertions(+), 5 deletions(-)
---
diff --git a/src/orca/acss.py b/src/orca/acss.py
index dd18767..17e1b76 100644
--- a/src/orca/acss.py
+++ b/src/orca/acss.py
@@ -105,3 +105,7 @@ class ACSS(dict):
     def getLocale(self):
         family = self.get(ACSS.FAMILY, {})
         return family.get('locale')
+
+    def getDialect(self):
+        family = self.get(ACSS.FAMILY, {})
+        return family.get('dialect')
diff --git a/src/orca/orca_gui_prefs.py b/src/orca/orca_gui_prefs.py
index 05f3021..ed77a11 100644
--- a/src/orca/orca_gui_prefs.py
+++ b/src/orca/orca_gui_prefs.py
@@ -470,13 +470,14 @@ class OrcaSetupGUI(orca_gtkbuilder.GtkBuilderWrapper):
 
         return familyName
 
-    def _setFamilyNameForVoiceType(self, voiceType, name, language):
+    def _setFamilyNameForVoiceType(self, voiceType, name, language, dialect):
         """Sets the name of the voice family for the given voice type.
 
         Arguments:
         - voiceType: one of DEFAULT, UPPERCASE, HYPERLINK, SYSTEM
         - name: the name of the voice family to set.
         - language: the locale of the voice family to set.
+        - dialect: the dialect of the voice family to set.
         """
 
         family = self._getKeyValueForVoiceType(voiceType,
@@ -485,12 +486,14 @@ class OrcaSetupGUI(orca_gtkbuilder.GtkBuilderWrapper):
         if family:
             family[speechserver.VoiceFamily.NAME] = name
             family[speechserver.VoiceFamily.LOCALE] = language
+            family[speechserver.VoiceFamily.DIALECT] = dialect
         else:
             voiceACSS = self._getACSSForVoiceType(voiceType)
             voiceACSS[acss.ACSS.FAMILY] = {}
             voiceACSS[acss.ACSS.FAMILY][speechserver.VoiceFamily.NAME] = name
             voiceACSS[acss.ACSS.FAMILY][speechserver.VoiceFamily.LOCALE] = \
                                                                      language
+            voiceACSS[acss.ACSS.FAMILY][speechserver.VoiceFamily.DIALECT] = dialect
 
         #voiceACSS = self._getACSSForVoiceType(voiceType)
         #settings.voices[voiceType] = voiceACSS
@@ -2222,8 +2225,9 @@ class OrcaSetupGUI(orca_gtkbuilder.GtkBuilderWrapper):
             family = self.speechFamiliesChoices[selectedIndex]
             name = family[speechserver.VoiceFamily.NAME]
             language = family[speechserver.VoiceFamily.LOCALE]
+            dialect = family[speechserver.VoiceFamily.DIALECT]
             voiceType = self.get_widget("voiceTypesCombo").get_active()
-            self._setFamilyNameForVoiceType(voiceType, name, language)
+            self._setFamilyNameForVoiceType(voiceType, name, language, dialect)
         except:
             debug.printException(debug.LEVEL_SEVERE)
 
diff --git a/src/orca/settings_manager.py b/src/orca/settings_manager.py
index 055233f..61bc82d 100644
--- a/src/orca/settings_manager.py
+++ b/src/orca/settings_manager.py
@@ -275,7 +275,11 @@ class SettingsManager(object):
     def getVoiceLocale(self, voice='default'):
         voices = self.getSetting('voices')
         v = voices.get(voice, {})
-        return v.getLocale()
+        lang = v.getLocale()
+        dialect = v.getDialect()
+        if dialect and len(str(dialect)) == 2:
+            lang = "%s_%s" % (lang, dialect.upper())
+        return lang
 
     def _getGeneral(self, profile=None):
         """Get from the active backend the general settings for
diff --git a/src/orca/speechdispatcherfactory.py b/src/orca/speechdispatcherfactory.py
index 9d992b6..1788eda 100644
--- a/src/orca/speechdispatcherfactory.py
+++ b/src/orca/speechdispatcherfactory.py
@@ -405,8 +405,9 @@ class SpeechServer(speechserver.SpeechServer):
         locale = getlocale(LC_MESSAGES)[0]
         if locale is None or locale == 'C':
             lang = None
+            dialect = None
         else:
-            lang = locale.split('_')[0]
+            lang, dialect = locale.split('_')
         voices = ((self._default_voice_name, lang, None),)
         try:
             # This command is not available with older SD versions.
@@ -418,6 +419,7 @@ class SpeechServer(speechserver.SpeechServer):
         families = [speechserver.VoiceFamily({ \
               speechserver.VoiceFamily.NAME: name,
               #speechserver.VoiceFamily.GENDER: speechserver.VoiceFamily.MALE,
+              speechserver.VoiceFamily.DIALECT: dialect,
               speechserver.VoiceFamily.LOCALE: lang})
                     for name, lang, dialect in voices]
         return families
diff --git a/src/orca/speechserver.py b/src/orca/speechserver.py
index 5667950..b70bddb 100644
--- a/src/orca/speechserver.py
+++ b/src/orca/speechserver.py
@@ -46,6 +46,7 @@ class VoiceFamily(dict):
     NAME   = "name"
     GENDER = "gender"
     LOCALE = "locale"
+    DIALECT = "dialect"
 
     MALE   = "male"
     FEMALE = "female"
@@ -53,7 +54,8 @@ class VoiceFamily(dict):
     settings = {
         NAME   : None,
         GENDER : None,
-        LOCALE : None
+        LOCALE : None,
+        DIALECT: None,
     }
 
     def __init__(self, props):


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