Exemple #1
0
def set_active_language(language):
    log.debug(f"Setting display language to {language}.")
    langinfo = get_available_languages().get(language)
    if langinfo is None:
        langinfo = get_available_languages()["default"]
    lang = langinfo.pylang
    try:
        translation = gettext.translation(app.name,
                                          localedir=paths.locale_path(),
                                          languages=[language])
        translation.install(names=["ngettext"])
        locale_changed = False
        with suppress(Exception):
            locale.setlocale(locale.LC_ALL, lang)
            locale_changed = True
        if not locale_changed:
            if "_" in lang:
                with suppress(Exception):
                    locale.setlocale(locale.LC_ALL, lang.split("_")[0])
                    locale_changed = True
        if not lang.startswith("en"):
            app_started.connect(lambda s: set_wx_language(lang), weak=False)
        CultureInfo.CurrentUICulture = langinfo.culture
        CultureInfo.DefaultThreadCurrentUICulture = langinfo.culture
        ctypes.windll.kernel32.SetThreadLocale(langinfo.LCID)
        app.current_language = langinfo
    except IOError:
        log.error(f"Translation catalog for language {lang} was not found.")
        en_culture = CultureInfo.GetCultureInfoByIetfLanguageTag("en")
        CultureInfo.CurrentUICulture = en_culture
        CultureInfo.DefaultThreadCurrentUICulture = en_culture
        ctypes.windll.kernel32.SetThreadLocale(en_culture.LCID)
        app.current_language = get_available_languages()["en"]
Exemple #2
0
 def get_voices(self, language=None):
     rv = []
     voices = []
     if language is not None:
         current_culture = CultureInfo.CurrentCulture
         if current_culture.IetfLanguageTag.startswith(language.lower()):
             voices.extend(self.GetInstalledVoices(current_culture))
         if language in locale_map:
             for locale in locale_map[language]:
                 culture = CultureInfo.GetCultureInfoByIetfLanguageTag(
                     f"{language}-{locale}")
                 voices.extend(self.GetInstalledVoices(culture))
         voices.extend(self.GetInstalledVoices(CultureInfo(language)))
     else:
         voices = self.GetInstalledVoices()
     if not voices:
         log.warning("No suitable TTS voice was found.")
         return rv
     for voice in voices:
         if not voice.Enabled:
             continue
         info = voice.VoiceInfo
         rv.append(
             VoiceInfo(
                 id=info.Id,
                 name=info.Name,
                 desc=info.Description,
                 language=info.Culture.IetfLanguageTag,
                 gender=info.Gender,
                 age=info.Age,
             ))
     return rv
Exemple #3
0
 def __init__(self, given_lang):
     self.given_lang = given_lang
     try:
         culture = CultureInfo.GetCultureInfoByIetfLanguageTag(given_lang)
         self.culture = (culture if culture.LCID != UNKNOWN_CULTURE_LCID
                         else culture.Parent)
         self.language = self.culture.IetfLanguageTag
     except CultureNotFoundException:
         raise ValueError(f"Invalid language {given_lang}.")
Exemple #4
0
 def speak_utterance(self, utterance):
     # We need to wrap the whole utterance in another
     # one that sets the voice. Because The Speak()
     # function does not honor  the engine voice.
     voice_utterance = SapiSpeechUtterance()
     voice_utterance.prompt.Culture = CultureInfo.GetCultureInfoByIetfLanguageTag(
         self.voice.language)
     with voice_utterance.set_style(SpeechStyle(voice=self.voice)):
         voice_utterance.append_utterance(utterance)
     self.synth.SpeakAsync(voice_utterance.prompt)
 def _take_stock(self):
     for func, args in self._heal_funcs:
         func(*args)
     self._heal_funcs.clear()
     voice = self.synth().voice
     voice_utterance = SapiSpeechUtterance()
     with voice_utterance.set_style(
             SpeechStyle(voice=voice, rate=self.synth().rate_to_spec())):
         voice_utterance.append_utterance(self)
     voice_utterance.prompt.Culture = CultureInfo.GetCultureInfoByIetfLanguageTag(
         voice.language)
     ssml = voice_utterance.prompt.ToXml()
     if not self.prompt.IsEmpty:
         self.prompt.ClearContent()
     self._speech_sequence.append(
         SpeechElement(SpeechElementKind.ssml, ssml))
Exemple #6
0
def set_app_locale(localeinfo):
    culture = CultureInfo.GetCultureInfoByIetfLanguageTag(localeinfo.language)
    CultureInfo.CurrentCulture = culture
    CultureInfo.CurrentUICulture = culture
    CultureInfo.DefaultThreadCurrentUICulture = culture
    ctypes.windll.kernel32.SetThreadLocale(culture.LCID)