NSDate本地和工作日本地化

时间:2013-09-13 09:55:51

标签: ios objective-c nsdate

我正在尝试显示本地化日期(以字母表示的周日和月份)取决于手机的语言(不是区域格式)。

我试过了:

// Date formatter
NSDateFormatter* df = [[NSDateFormatter alloc] init];
NSLocale* locale = [NSLocale currentLocale];
NSLog(@"locale : %@", locale.localeIdentifier);
[df setDateFormat:[NSDateFormatter dateFormatFromTemplate:@"EEEE dd MMMM" options:0 locale:[NSLocale currentLocale]]]; 

但是当我改变手机的语言时,它什么都没改变,它仍然以法语显示。我怎样才能使它发挥作用?

3 个答案:

答案 0 :(得分:8)

试试这个;

首先我们获取设备语言,然后设置NSDateFormatter的语言环境  用那种语言。

NSString * deviceLanguage = [[NSLocale preferredLanguages] objectAtIndex:0];
NSDateFormatter * dateFormatter = [NSDateFormatter new];
NSLocale * locale = [[NSLocale alloc] initWithLocaleIdentifier:deviceLanguage];

[dateFormatter setDateFormat:@"EEEE dd MMMM"];
[dateFormatter setLocale:locale];

NSString * dateString = [dateFormatter stringFromDate:[NSDate date]];

NSLog(@"%@", dateString);

答案 1 :(得分:1)

你测试错了。您应该做的是更改Region Format,而不是设备的Language

转到Settings->General->International->Region Format进行更改并再次测试。

我希望它有所帮助。

编辑:使用Language不是一个好主意。 iOS没有翻译成那么多语言。但是它支持很多区域格式。

示例:我住在保加利亚。 iOS未翻译为保加利亚语,因此实际菜单和应用程序使用英语,但由于我已将Region Format设置为保加利亚,因此所有日期格式,日期标签和货币标签都是保加利亚语。

答案 2 :(得分:0)

使用Desdenova的答案来获得有效的代码。

要测试它(例如截取屏幕截图),您需要更改设备的语言和区域格式。

如果您只更改设备的语言,它可能会稍微更改日期,但月份和日期(名称)仍将采用区域格式的语言。