从 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 Language
和 Application Region
选项,而不是更改设备或模拟器上的语言和区域。
转到Product
->Scheme
->Edit Scheme...
->Run
->Options
并选择您要测试的Application Language
和Application 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 设备查找当前国家的主要内容,如果未能解决你的问题,请参考以下文章