我想显示设备UI正在使用的当前语言.我会用什么代码?
我希望这是一个NSString完全拼写的格式.(不是@"en_US")
编辑:对于那些开车的人来说,这里有很多有用的评论,因为答案随着新的iOS版本的发展而演变.
我想在我用Swift编写的应用程序中获取设备的语言代码(en,es ...).怎么能得到这个?
我正在尝试这个:
var preferredLanguages : NSLocale!
let pre = preferredLanguages.displayNameForKey(NSLocaleIdentifier, value: preferredLanguages)
Run Code Online (Sandbox Code Playgroud)
但这会返回零.
谢谢!
能否请您就如何使用获得国家代码帮助NSLocale的Swift 3?
这是我以前使用过的代码.
NSLocale.currentLocale().objectForKey(NSLocaleCountryCode) as! String
Run Code Online (Sandbox Code Playgroud)
我可以在Swift 3中获得如下语言代码.
Locale.current.languageCode!
Run Code Online (Sandbox Code Playgroud)
我可以看到,获取languageCode是直截了当的,但countryCode属性不可用.
模拟器的语言已经改为日语,为什么[[NSLocale preferredLanguages] objectAtIndex:0] 总是返回"en"?
首选语言和地区都与"en"无关,它"en"来自哪里?

试图获得[[NSLocale preferredLanguages] objectAtIndex:2],然后崩溃显示*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFArray objectAtIndex:]: index (2) beyond bounds (1)
这是否意味着模拟器中没有设置任何语言?太奇怪了!
在使用iOS8.1/7.1升级到Xcode 6.1之前,这种情况从未发生过.
同时,在我的iPhone 5上试过同样的东西,控制台输出正确的东西.
为什么这么奇怪?有没有人有这样的问题?
哦! 怎么了....
"en"再次,日语和英语没有发现!"en"找到一个?日语和英语在哪里?我用英语从服务器检索国家名称.例如,"西班牙"
我想要做的是,假设国家名称将用英文写,请获取国家代码.
我该怎么办?我发现从国家代码中获取国家名称非常简单,但我不知道如何进行相反的操作.
非常感谢.
我已经看过两个与我相似的问题,但这些问题的答案对我不起作用.我有一个旧项目,其中包含在一组方括号内手动输入的国家/地区列表.
我可以在我的pickerView中轻松使用它,但我想知道是否有更有效的方法来做到这一点?
我将使用UIPickerView中的国家/地区列表.
- (NSString *)countryNameByCode:(NSString*)countryCode
{
NSString *identifier = [NSLocale localeIdentifierFromComponents:@{NSLocaleCountryCode: countryCode}];
NSString *countryName = [[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:identifier];
return countryName;
}
这回来了nil.为什么?
我有一个bug报告,在下一行中说明崩溃,其中client是一个实例 NSMutableDictionary
[client setObject:[[NSLocale currentLocale] objectForKey:NSLocaleCountryCode] forKey:@"country"];
Run Code Online (Sandbox Code Playgroud)
我的猜测是,NSLocaleCountryCode在这一行中返回nil,这导致向一个NSDictionary导致崩溃的nil对象添加.问题是,有没有人经历过这样的问题?有什么理由NSLocaleCountryCode可以为零currentLocale吗?文档没有说明返回零值,我认为这将总是返回一个有效的国家.
最好的问候,迈克尔
在iOS 7或8下,库存日历应用程序执行了一些我无法弄清楚的事情.
在某些区域设置下,例如en_US,日历应用程序显示短(3个字母)月份名称.
在其他区域设置下,例如de_DE,日历应用程序显示完整的月份名称.有趣的是,语言环境en_DE显示了短月份名称,因此它似乎与区域格式相关联.
我无法弄清楚的是如何知道使用哪个月份格式.
无论我的设备的区域设置如何,NSDateFormatter standaloneShortMonthSymbols给我三个月的月份名称并NSDateFormatter standaloneMonthSymbols给我完整的月份名称.
也尝试过:
NSString *monthformat = [NSDateFormatter dateFormatFromTemplate:@"LLL" options:0 locale:[NSLocale currentLocale]];
Run Code Online (Sandbox Code Playgroud)
而且还给相同LLL的两个en_US和de_DE.
看NSLocale那里似乎没有任何价值决定是否使用短月或全月名称.
似乎没有要任何东西NSCalendar,NSDateFormatter或NSLocale以帮助确定要使用的月份格式.
有谁知道如何做出这个决定?
更新:
我以为我找到了一个解决方案,但它对我尝试的所有语言环境都不起作用.我使用各种区域设置运行以下代码,以查看是否可以在日历应用程序中显示短日期和长日期名称的区域设置之间找到任何共同点:
NSLocale *locale = [NSLocale currentLocale];
NSString *locid = [locale localeIdentifier];
NSLog(@"Locale = %@", locid);
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSLog(@"monthSymbols = %@", [formatter monthSymbols]);
NSLog(@"shortMonthSymbols = %@", [formatter shortMonthSymbols]);
NSLog(@"veryShortMonthSymbols = %@", …Run Code Online (Sandbox Code Playgroud) 如何在Swift 3中获取货币符号?
public class Currency: NSObject {
public let name: String
public let code: String
public var symbol: String {
return NSLocale.currentLocale().displayNameForKey(NSLocaleCurrencySymbol, value: code) ?? ""
}
// MARK: NSObject
public init(name: String, code: String) {
self.name = name
self.code = code
super.init()
}
}
Run Code Online (Sandbox Code Playgroud)
我知道NSLocale已重命名为Locale,但displayNameForKey已被删除,我似乎只能使用localizedString(forCurrencyCode:self.code)来生成当前语言环境中的货币名称,而无法获取其符号.我正在寻找一种在当前区域设置中获取外币符号的方法.
还是我忽略了什么?
nslocale ×10
ios ×6
objective-c ×3
swift ×3
cocoa-touch ×2
swift3 ×2
country ×1
currency ×1
foundation ×1
ios8.1 ×1
iphone ×1
nsarray ×1
region ×1
uipickerview ×1