标签: nslocale

在iOS中获取当前的设备语言?

我想显示设备UI正在使用的当前语言.我会用什么代码?

我希望这是一个NSString完全拼写的格式.(不是@"en_US")

编辑:对于那些开车的人来说,这里有很多有用的评论,因为答案随着新的iOS版本的发展而演变.

cocoa-touch objective-c ios nslocale

420
推荐指数
14
解决办法
23万
查看次数

如何使用Swift获取当前语言代码?

我想在我用Swift编写的应用程序中获取设备的语言代码(en,es ...).怎么能得到这个?

我正在尝试这个:

  var preferredLanguages : NSLocale!
  let pre = preferredLanguages.displayNameForKey(NSLocaleIdentifier, value: preferredLanguages)
Run Code Online (Sandbox Code Playgroud)

但这会返回零.

谢谢!

nslocale swift

108
推荐指数
14
解决办法
9万
查看次数

如何在Swift 3中使用NSLocale获取国家/地区代码

能否请您就如何使用获得国家代码帮助NSLocaleSwift 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属性不可用.

ios nslocale swift3

42
推荐指数
4
解决办法
3万
查看次数

NSLocale preferredLanguages objectAtIndex:0总是返回"en"

模拟器的语言已经改为日语,为什么[[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上试过同样的东西,控制台输出正确的东西.

为什么这么奇怪?有没有人有这样的问题?

更新:1

  • 删除Xcode和模拟器,然后从Mac Store下载重新安装.
  • 创建一个新的简单项目,更改simlulator的语言
  • 仍然总是"en".

哦! 怎么了....


更新:2

  • 今天,通过重新格式化HD重新安装了全新的Yosemite
  • 下载Xcode 6.1
  • 启动一个新的简单默认项目
  • 把这些代码
  • 更改/添加模拟器语言,日语,荷兰语,英语,
  • 天啊!只得到了"en"再次,日语和英语没有发现!

为什么还只能"en"找到一个?日语和英语在哪里?

模拟器怎么了?

我错过了什么吗?

iphone nsuserdefaults region nslocale ios8.1

25
推荐指数
1
解决办法
7235
查看次数

从IOS中的国家/地区名称获取国家/地区代

我用英语从服务器检索国家名称.例如,"西班牙"

我想要做的是,假设国家名称将用英文写,请获取国家代码.

我该怎么办?我发现从国家代码中获取国家名称非常简单,但我不知道如何进行相反的操作.

非常感谢.

country-codes ios nslocale

22
推荐指数
2
解决办法
3万
查看次数

如何获得Swift ios中的国家/地区列表?

我已经看过两个与我相似的问题,但这些问题的答案对我不起作用.我有一个旧项目,其中包含在一组方括号内手动输入的国家/地区列表.

我可以在我的pickerView中轻松使用它,但我想知道是否有更有效的方法来做到这一点?

我将使用UIPickerView中的国家/地区列表.

cocoa-touch uipickerview nsarray nslocale swift

20
推荐指数
6
解决办法
2万
查看次数

xcode 6.1 iOS 8.1 NSLocale displayNameForKey NSLocaleIdentifier返回nil

- (NSString *)countryNameByCode:(NSString*)countryCode
{
    NSString *identifier = [NSLocale localeIdentifierFromComponents:@{NSLocaleCountryCode: countryCode}];
    NSString *countryName = [[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:identifier];

    return countryName;
}

这回来了nil.为什么?

objective-c ios nslocale

17
推荐指数
3
解决办法
6983
查看次数

NSLocaleCountryCode返回nil

我有一个bug报告,在下一行中说明崩溃,其中client是一个实例 NSMutableDictionary

[client setObject:[[NSLocale currentLocale] objectForKey:NSLocaleCountryCode] forKey:@"country"];
Run Code Online (Sandbox Code Playgroud)

我的猜测是,NSLocaleCountryCode在这一行中返回nil,这导致向一个NSDictionary导致崩溃的nil对象添加.问题是,有没有人经历过这样的问题?有什么理由NSLocaleCountryCode可以为零currentLocale吗?文档没有说明返回零值,我认为这将总是返回一个有效的国家.

最好的问候,迈克尔

country foundation ios nslocale

14
推荐指数
2
解决办法
6684
查看次数

知道何时使用短月或全月名称

在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_USde_DE.

NSLocale那里似乎没有任何价值决定是否使用短月或全月名称.

似乎没有要任何东西NSCalendar,NSDateFormatterNSLocale以帮助确定要使用的月份格式.

有谁知道如何做出这个决定?

更新:

我以为我找到了一个解决方案,但它对我尝试的所有语言环境都不起作用.我使用各种区域设置运行以下代码,以查看是否可以在日历应用程序中显示短日期和长日期名称的区域设置之间找到任何共同点:

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)

objective-c nsdateformatter ios nslocale

13
推荐指数
1
解决办法
1354
查看次数

NSLocale Swift 3

如何在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)来生成当前语言环境中的货币名称,而无法获取其符号.我正在寻找一种在当前区域设置中获取外币符号的方法.

还是我忽略了什么?

currency nslocale swift swift3

13
推荐指数
2
解决办法
7655
查看次数