Как связать CLPlacemark с языком (в идеале bcp47)

Мне нужно знать, на каком языке (языках) говорят в данной CLPlacemark. Любая идея?

2 ответа

Решение

Я получил следующее, 100% автоматическое решение, и вам вообще не нужно собирать ISO-код.

+ (NSString*)detectBestLanguageBCP47:(CLPlacemark *)placemark {

    NSString * countryCode = placemark.ISOcountryCode;

    for (AVSpeechSynthesisVoice *voice in AVSpeechSynthesisVoice.speechVoices) {

        NSString *langCode = [voice.language substringWithRange:NSMakeRange(0, 2)];
        NSString *cc = [voice.language substringWithRange:NSMakeRange(3, 2)];

        int c = [cc compare:countryCode];

        if (c==0) {
             NSString *bcp47 =[ NSString stringWithFormat:@"%@-%@", langCode, cc];

            return bcp47;
        }

    }

    return nil; // Not found
}

Вы можете получить страну из отметки места и использовать ее основной язык - это не 100% решение, но в 90% случаев оно должно работать

NSString *countryIso = [self countryIsoFromPlacemark:placemark]; 
NSString *languageIso = [self languageIsoFroPrimaryLanguageOfCountry:countryIso];

поместите список соответствия iso-кода в ваше приложение, и все готово

Другие вопросы по тегам