我正在尝试使用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。
我是否还需要其他两个常量,以防万一?
答案 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
因为这将检查所有三种可能的“成功”结果。