【问题标题】:NSDate month and week day localizedNSDate 月份和工作日本地化
【发布时间】:2013-09-13 09:55:51
【问题描述】:

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

我试过了:

// 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]]]; 

但是当我更改手机的语言时,它什么也没改变,它仍然以法语显示。我怎样才能让它工作?

【问题讨论】:

  • 更改设备设置后尝试重启应用
  • 我希望以手机的语言显示星期几和月份。因此,如果我将语言从“Francais”更改为“English”,我希望看到“9 月 13 日星期五”。
  • 是的,但我希望日期和月份的变化取决于手机语言。我该怎么做?
  • 请注意,上面的代码并没有设置 DateFormatter 的语言环境,而只是使用语言环境来调节dateFormatFromTemplate 调用。在该操作中,不会向 DateFormatter 传达任何有关语言的信息(当然,默认情况下,DateFormatter 会初始化为当前语言环境)。

标签: ios objective-c nsdate


【解决方案1】:

试试这个;

首先我们得到设备语言,然后我们设置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);

【讨论】:

  • 这会本地化“dd MMMM”部分吗?我认为不会。一些语言环境应该有“dd MMMM”,而其他语言环境应该有“MMMM dd”
  • @delta2flat 在这种情况下,您应该使用格式化程序的dateStyle 和timeStyle 属性而不是dateFormat。它将根据区域设置处理单元的顺序。
【解决方案2】:

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

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

希望对你有帮助。

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

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

【讨论】:

    【解决方案3】:

    使用 Desdenova 的答案获得工作代码。

    要对其进行测试(例如截屏),您需要更改设备的语言和区域格式。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 2023-02-20
      • 2021-12-13
      • 1970-01-01
      相关资源
      最近更新 更多