【问题标题】:How to associate a CLPlacemark to a language (ideally bcp47)如何将 CLPlacemark 与语言相关联(最好是 bcp47)
【发布时间】:2014-01-18 21:40:10
【问题描述】:

我需要知道给定 CLPlacemark 中使用的语言。 有什么想法吗?

【问题讨论】:

    标签: ios core-location reverse-geocoding


    【解决方案1】:

    您可以从地标中获取国家/地区并使用其主要语言 - 这不是 100% 的解决方案,但在 90% 的情况下它应该可以工作

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

    在您的应用中放置一个 iso 代码映射的 plist,您就完成了

    【讨论】:

    • 重点是从地标国家代码中实际找到给定的语言代码。
    • 编辑了答案。顺便说一句,isocode 在维基百科上,不太可能改变
    【解决方案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
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-30
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 2010-09-09
      相关资源
      最近更新 更多