gpt4 book ai didi

ios - 语音合成 API : which locale is used by NSLocalizedString?

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:08:31 26 4
gpt4 key购买 nike

我想使用 iOS 7 新的语音合成 API,我的应用程序已本地化为法语和英语。

要实现这一点,必须本地化两件事:

  • 语音文本:我将它放在通常的 localizable.string 文件中,并使用 NSLocalizedString 宏在代码中检索它。

  • 语音语言:必须为相应的语言选择AVSpeechSynthesisVoice

类实例化方法是AVSpeechSynthesisVoice voiceWithLanguage:(NSString *)lang。我目前正在使用 [NSLocale currentLocale].localeIdentifier 作为此方法的参数。

问题:如果用户的设备语言是葡萄牙语,[NSLocale currentLocale] 选择葡萄牙语发音,而 NSLocalizedString 解析的文本是英语。

我如何知道 NSLocalizedString 当前正在读取哪个语言环境?

最佳答案

好吧,我终于理解了 Apple API:

  • [NSLocale currentLocale]:不返回用户在“设置”>“通用”>“国际”中选择的当前语言,但返回用户在同一屏幕中选择的区域代码。

  • [NSLocale preferredLanguages]:这个列表确实给出了设备语言,它是这个列表中的第一个字符串

  • [[NSBundle mainBundle] preferredLocalizations] 返回由应用程序解析的语言包。我想这就是 NSLocalizedString 使用的。在我的例子中它只有 1 个对象,但我想知道在哪些情况下它可以有多个对象。

  • [AVSpeechSynthesisVoice currentLanguageCode] 返回系统预定义的语言代码。

  • [AVSpeechSynthesisVoice voiceWithLanguage:] 类实例化方法需要完整的语言代码:带有语言和区域。 (例如:将 @"en"传递给它会返回 nil 对象,它需要 @"en-US"或 @"en-GB"...)

  • [AVSpeechSynthesisVoice currentLanguageCode] 提供默认语音,由操作系统决定。

这就是我的最终代码的样子

 // current user locale (language & region)
NSString *voiceLangCode = [AVSpeechSynthesisVoice currentLanguageCode];
NSString *defaultAppLang = [[[NSBundle mainBundle] preferredLocalizations] firstObject];

// nil voice will use default system voice
AVSpeechSynthesisVoice *voice = nil;

// is default voice language compatible with our application language ?
if ([voiceLangCode rangeOfString:defaultAppLang].location == NSNotFound) {
// if not, select voice from application language
NSString *pickedVoiceLang = nil;
if ([defaultAppLang isEqualToString:@"en"]) {
pickedVoiceLang = @"en-US";
} else {
pickedVoiceLang = @"fr-FR";
}
voice = [AVSpeechSynthesisVoice voiceWithLanguage:pickedVoiceLang];
}


AVSpeechUtterance *mySpeech = [[AVSpeechUtterance alloc] initWithString:NSLocalizedString(@"MY_SPEECH_LOCALIZED_KEY", nil)];
frontPicUtterance.voice = voice;

这样,来自新西兰、澳大利亚、英国或加拿大的用户将获得最符合其常用设置的语音。

关于ios - 语音合成 API : which locale is used by NSLocalizedString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21932686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com