Does Speech Framework recognize only English?

Viewed 6927

I'm currently working on a project about voice recognition and translate to another language with WebAPI. English to Any Language is done, but I want to make this recognition with other language.

Does Speech Framework recognize only English? can I use this framework for another languages?

Thanks for your help!

5 Answers

Just run print(SFSpeechRecognizer.supportedLocales()) and you will get

[es-419 (fixed), th-TH (fixed), ca-ES (fixed), fr-BE (fixed), de-CH (fixed), sk-SK (fixed), en-ZA (fixed), es-CL (fixed), hi-IN (fixed), zh-CN (fixed), zh-TW (fixed), da-DK (fixed), hi-IN-translit (fixed), el-GR (fixed), he-IL (fixed), pt-BR (fixed), en-AE (fixed), pt-PT (fixed), fr-CH (fixed), ro-RO (fixed), vi-VN (fixed), en-SA (fixed), pl-PL (fixed), es-US (fixed), hi-Latn (fixed), en-SG (fixed), tr-TR (fixed), hr-HR (fixed), ko-KR (fixed), uk-UA (fixed), it-CH (fixed), ar-SA (fixed), id-ID (fixed), en-IN (fixed), es-ES (fixed), de-AT (fixed), en-IE (fixed), cs-CZ (fixed), es-CO (fixed), zh-HK (fixed), sv-SE (fixed), en-PH (fixed), en-ID (fixed), en-CA (fixed), nl-NL (fixed), yue-CN (fixed), en-NZ (fixed), en-GB (fixed), ja-JP (fixed), it-IT (fixed), ru-RU (fixed), en-US (fixed), ms-MY (fixed), es-MX (fixed), hu-HU (fixed), fr-CA (fixed), wuu-CN (fixed), de-DE (fixed), fr-FR (fixed), fi-FI (fixed), nb-NO (fixed), nl-BE (fixed), en-AU (fixed)]

I spent a few hours looking for a solution to get all the supported languages in a human-readable form and that's what worked for me. First, create a model for a Language:

struct SupportedLanguage {
    let code: String?
    let name: String?
}

Next run a "for" loop in the SFSpeechRecognizer.supportedLocales(), create SupportedLanguage instances and add them to an array availableLanguages:

var availableLanguages: [SupportedLanguage] = []
for locale in SFSpeechRecognizer.supportedLocales() {
    let language = SupportedLanguage (
        code: locale.languageCode,
        name: Locale.init(identifier: "en").localizedString(forIdentifier: locale.identifier)
    )
    availableLanguages.append(language)
}

And that's it - you have an array of SupportedLanguage instances for every Speech framework supported language. Work's neatly for language selection.

//Usage for Locales
SFSpeechRecognizer(locale: Locale.init(identifier: "vi"))

//list to get all supported Locales
SFSpeechRecognizer.supportedLocales()
Related