我正在尝试获取在 AVSpeechSynthesisVoice 中找到的区域代码
,而不是例如:en-GB
。
我想要的输出如下
这是我当前的代码,虽然它有效,但我觉得必须有一个更优雅的解决方案,从我读到的内容来看,用 -
分割可能会对某些语言产生错误
let speechVoices = AVSpeechSynthesisVoice.speechVoices()
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
let language = Locale.current.localizedString(forLanguageCode: speechVoices[row].language)!
let languageCode = speechVoices[row].language
var regionCodeArray = languageCode.split(separator: "-") // FIXME: buggy may break
let regionCode = regionCodeArray.removeLast()
// Must be a more elegant way to get RegionCode
let country = Locale.current.localizedString(forRegionCode: String(regionCode))
return "\(language) (\(country ?? ""))"
}
谢谢!
最佳答案
所以我想到了另一种不需要拆分的替代方案,这就是我得到的,但我欢迎替代答案,或者在我学习和寻求改进时对我的代码进行评论
let speechVoices = AVSpeechSynthesisVoice.speechVoices()
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
let language = Locale.current.localizedString(forLanguageCode: speechVoices[row].language)!
let languageCode = speechVoices[row].language
var regionCode:String = ""
for region in Locale.isoRegionCodes {
// Test if provided region codes has voices or not
if languageCode.contains(region) {
regionCode = region
}
}
let country = Locale.current.localizedString(forRegionCode: String(regionCode))
return "\(language) (\(country ?? ""))"
}
关于swift - 从 AVSpeechSynthesisVoice 获取国家/地区列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62322476/