从 iPhone 设备查找当前国家

Posted

技术标签:

【中文标题】从 iPhone 设备查找当前国家【英文标题】:Find current country from iPhone device 【发布时间】:2011-04-25 19:59:04 【问题描述】:

我必须在 iPhone 设置中获取当前国家/地区。谁能告诉我如何在 iPhone 应用程序中获取当前国家/地区。

我必须使用当前国家/地区来解析我需要传递当前国家/地区的 RSS 提要。

请帮我找出国家。

提前致谢。

【问题讨论】:

是 iPhone 本地化设置中的国家还是 iPhone 当前所在的国家? 【参考方案1】:

要查找用户所选语言的国家/地区:

NSLocale *currentLocale = [NSLocale currentLocale];  // get the current locale.
NSString *countryCode = [currentLocale objectForKey:NSLocaleCountryCode];
// get country code, e.g. ES (Spain), FR (France), etc.

在 Swift 中:

let currentLocale = NSLocale.currentLocale()
let countryCode = currentLocale.objectForKey(NSLocaleCountryCode) as? String

如果要查找当前时区的国家代码,请参阅@chings228's answer。

如果您想查找设备物理位置的国家/地区代码,则需要使用反向地理编码的 CoreLocation。详情见这个问题:How can I get current location from user in ios

【讨论】:

+1 很好,我学到了一些新东西,请告诉我可以得到更多关于这方面的信息... @ranjeet:你可以在developer.apple.com/library/ios/#documentation/cocoa/reference/…找到NSLocale的参考。 非常感谢。我得到了答案。 注意!仅当使用电话的人实际上已将电话设置为使用其国家/地区的语言环境时,这才有用。情况不一定如此,如果一个人可能正在度假并且您仍需要检测他们所在的确切国家/地区,则尤其没有用。 我使用 xcode 6 和 iOS 模拟器 (iPhone 6/iOS 8.1)。无论我将 iOS 模拟器设置为哪种语言和地区,我总是将 US 作为 countryCode。此外,[[NSLocale preferredLanguage] objectAtIndex:0] 的输出始终为 en。我怎么知道代码工作正常?【参考方案2】:
NSTimeZone *gmt = [NSTimeZone localTimeZone];

NSLog(@"timezone gmt %@",gmt.abbreviation);

【讨论】:

【参考方案3】:
NSLocale *locale = [NSLocale currentLocale];
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode];
NSString *country = [locale displayNameForKey: NSLocaleCountryCode value: countryCode];

【讨论】:

代码 sn-p 工作正常,但突然开始在最后一行给出 Exc_Bad_Access 错误.. !! =( NSZombie 无法检测到它并且应用程序崩溃。【参考方案4】:
NSLocale *countryLocale = [NSLocale currentLocale];  
NSString *countryCode = [countryLocale objectForKey:NSLocaleCountryCode];
NSString *country = [countryLocale displayNameForKey:NSLocaleCountryCode value:countryCode];
NSLog(@"Country Code:%@ Name:%@", countryCode, country);
//Country Code:IN Name:India

Source Link.

【讨论】:

应该是NSLog(@"Country Code:%@ Name:%@", countryCode, country);【参考方案5】:

如果您正在测试并希望使用与您的系统不同的语言,最简单的方法是更改​​方案的 Application LanguageApplication Region 选项,而不是更改设备或模拟器上的语言和区域。

转到Product->Scheme->Edit Scheme...->Run->Options 并选择您要测试的Application LanguageApplication Region

来自 iOS 文档:Testing Your Internationalized App

【讨论】:

如果您认为这是一个错误的答案,请留言说明原因。我自己也在使用这个策略,据我所知它效果很好,但是如果有问题,我很想知道它们!【参考方案6】:

Swift 3.0解决方案

if let countryCode = (Locale.current as NSLocale).object(forKey: .countryCode) as? String 
            print(countryCode)
        

【讨论】:

为什么不简单地Locale.current.regionCode【参考方案7】:

对于带有 SIM 卡的设备,您可以使用这个:

  CTTelephonyNetworkInfo * network_Info = [CTTelephonyNetworkInfo new];
  CTCarrier * carrier = network_Info.subscriberCellularProvider;
  NSString  * countryCode = [carrier.isoCountryCode uppercaseString];

【讨论】:

【参考方案8】:

Swift 3.0 最新的工作代码是

if let countryCode = (Locale.current as NSLocale).object(forKey: .countryCode) as? String 
    print(countryCode)

【讨论】:

【参考方案9】:

对于 Swift 4.0,

你可以简单地使用

let countryCode = Locale.current.regionCode

print(countryCode)

【讨论】:

如果我搬到其他国家那它会返回什么?

以上是关于从 iPhone 设备查找当前国家的主要内容,如果未能解决你的问题,请参考以下文章

在iphone中使用html查找当前位置

私有 API iOS iCloud 锁 + 查找我的 iPhone 状态和唯一识别设备

在 iPhone 中查找最近的地点

苹果手机弹出查找我的iphone提醒是啥意思?

从 iPhone 获取时区/国家

如何确定当前设备是 iPhone 还是 iPad?