You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin开发的Android应用中让TTS全程使用英语(含数字)

解决TTS朗读数字仍为中文的问题

在华为中文系统的安卓设备上,即使给TTS设置了美式英语Locale,数字仍按中文朗读,大概率是系统自带TTS引擎的语言优先级逻辑导致的——它可能默认用系统语言处理数字,忽略了Locale设置。试试下面几种解决办法:

1. 确认Locale设置生效并强化语言指定

设置Locale后必须验证返回结果,避免设备不支持指定Locale导致 fallback到系统语言。同时可以额外设置语音参数确保语言规则生效:

val tts = TextToSpeech(context) { status ->
    if (status == TextToSpeech.SUCCESS) {
        val usLocale = Locale.US
        val langResult = tts.setLanguage(usLocale)
        // 检查语言是否被支持
        if (langResult != TextToSpeech.LANG_MISSING_DATA && langResult != TextToSpeech.LANG_NOT_SUPPORTED) {
            tts.setSpeechRate(1.0f) // 保持默认语速,可选调整
            // 测试整句朗读
            tts.speak("Hello 456", TextToSpeech.QUEUE_FLUSH, null, "tts_test")
        }
    }
}

2. 手动将数字转为英文单词

如果系统TTS引擎对数字的处理逻辑无法修改,就把数字提前转换成英文单词再传递给TTS。可以自己实现简单的转换逻辑,或者用成熟的工具类:

// 示例:整数转英文单词(可扩展支持更大数字/小数)
fun convertNumberToEnglish(num: Int): String {
    // 这里实现完整的数字转英文逻辑,比如把789转为"seven hundred eighty-nine"
    // 简单演示:
    return when(num) {
        789 -> "seven hundred eighty-nine"
        100 -> "one hundred"
        else -> num.toString()
    }
}

// 使用方式
val targetText = "Banana ${convertNumberToEnglish(789)}"
tts.speak(targetText, TextToSpeech.QUEUE_FLUSH, null, "")

3. 切换到Google Text-to-Speech引擎

华为自带TTS可能存在语言规则的优先级问题,改用Google TTS引擎通常能严格遵循指定的Locale。操作步骤:

  • 让用户在系统设置的「语言和输入法」-「文字转语音输出」中,选择Google Text-to-Speech作为默认引擎
  • 确保已下载美式英语的语音包

内容的提问来源于stack exchange,提问作者thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 00:02:51