【发布时间】:2014-01-31 13:53:39
【问题描述】:
原始问题
我有一个标准的文本语音,android.speech.tts.TextToSpeech
我初始化它并使用tts.setLanguage(Locale.getDefault())设置语言
默认区域设置是 de_DE(对于德国,正确)。
设置好之后,我要求 tts 给我它的语言tts.getLanguage()
现在它告诉我它设置为“deu_DEU”
该设置没有区域设置。所以我什至无法检查它是否设置为正确的语言,因为我找不到具有匹配值的 Locale 对象。
问题可能与 Android 4.3 有关,但我没有找到任何信息。
背景是,我需要用相同的十进制符号显示值,但 tts 需要正确的符号,或者它用德语说“点”,这根本没有意义。
结论:
区域设置是一个容器,其中包含由语言、国家和可选字符串组成的字符串。每个文本转语音引擎都可以返回自定义区域设置,例如“eng_USA_texas”。
此外,tts 引擎返回的区域设置只能是与所需区域设置的“紧密匹配”。所以“en_US”而不是“en_UK”。
然而,Locale 有一个名为getLanguage() 的方法,它返回上述字符串的第一部分。 “en”或“eng”。这些语言代码由 ISO 规范,希望每个人都遵守它。 (请参阅已接受答案中的链接)
因此,如果 tts.getLanguage().getLanguage().startsWith("en") 的某种形式的英语语言设置和 ISO 标准得到满足,那么检查它应该始终为真。
值得一提的是,Locales 不应与 locale_a == locale_b 进行比较,因为两者可以是不同的对象但具有相同的内容,它们是排序的容器。
总是与locale_a.equals(locale_b)比较
我希望这可以帮助人们解决 tts 和语言方面的一些问题
【问题讨论】:
-
编辑了我的答案,以防您没有看到链接中的措辞