适用于Android的TTS的可用语言

时间:2015-10-07 00:50:58

标签: java android locale constants text-to-speech

我正在尝试使用isLanguageAvailable()检查某个语言是否可用于TTS。 该方法的可能返回值如下。

LANG_AVAILABLE

LANG_COUNTRY_AVAILABLE

LANG_COUNTRY_VAR_AVAILABLE

LANG_MISSING_DATA

LANG_NOT_SUPPORTED

很容易理解,我不必关心他们名字中的最后两个。但是,即使在阅读了解释here之后,我也很困惑其余的意思。

  

public static final int LANG_AVAILABLE

     

表示语言可以通过语言环境使用该语言,但是   不是国家和变体。

     

public static final int LANG_COUNTRY_AVAILABLE

     

表示该语言适用于该语言和国家/地区   由区域设置指定,但不是变体。

     

public static final int LANG_COUNTRY_VAR_AVAILABLE

     

表示语言完全按语言环境指定的方式提供。

这是什么意思?所有三分球都可用于TTS?

我不理解“通过语言环境,而不是国家和变体”的句子。

我正在使用这样的代码测试TTS。

for( Locale each : Locale.getAvailableLocales() )
    if( TextToSpeech.LANG_AVAILABLE == myTTS.isLanguageAvailable(each)
    && SOME_OTHER_ADDITIONAL_CONDITIONS ) {    
        myTTS.setLanguage(each);
        break;
    }

如您所见,我只是将一个常量LANG_AVAILABLE。

我是否还需要其他两个常量,以防万一?

1 个答案:

答案 0 :(得分:2)

嗯,正如你在这里看到的那样(http://developer.android.com/reference/java/util/Locale.html)有一个名为en(英语)的语言环境,还有en_GB和en_US,所以英语是基本语言环境,GB和US指定语言环境的国家。如果查看locale的三参数构造函数,还有一个名为variant的参数。我猜这可能有像en_US_southern这样的东西,而南方则是美国英语的变体。

要回答你的问题,如果你想要的只是看TTS是否说某种语言而不管国家或方言,你可以检查 myTTS.isLanguageAvailable(each) >= 0因为这将检查所有三种可能的“成功”结果。