NSDateFormatter:仅在应用程序针对该语言进行本地化时才显示本地化日期

时间:2012-07-31 07:17:00

标签: ios cocoa localization nsdateformatter nslocale

我正在为iPhone制作一款适用于日期的应用程序。我正在使用NSDateFormatter将日期转换为字符串。方便的是,NSDateFormatter根据区域格式自动使用用户的语言创建字符串。 由于我无法在所有可能的语言和地区中本地化我的应用,因此该应用仅限于英语,德语,西班牙语和其他一些应用。

例如,当应用程序为法国用户运行时,该应用程序默认为英语。这很好,但日期仍将使用法语进行转换。这导致像“Month:Juillet”而不是“Month:July”这样的字符串。

如何让NSDateFormatter始终使用应用运行的语言? 我知道我可以使用NSLocalizedString()来本地化NSLocale个标识符,但这会产生错误的区域设置。

当用户通常使用“en_GB”区域并且我的应用程序通常已针对英语进行本地化时,我希望NSDateFormatter使用“en_GB”而不仅仅是“en”或“en_US”。当用户运行法语时,我希望语言环境为“en”,如果他在“de_DE”区域中运行应用程序,我希望日期格式也是“de_DE”,因为该应用程序支持德语。

此致 费边

1 个答案:

答案 0 :(得分:2)

当您创建日期格式化程序时,它会从当前区域设置初始化它的样式,但您可以覆盖它。

[未经测试] 您可以使用用户列表和可用的区域设置获取最佳区域设置 一个NSBundle:

+ (NSArray *)preferredLocalizationsFromArray:(NSArray *)localizationsArray

NSFormatter:

+ (NSString *)dateFormatFromTemplate:(NSString *)template options:(NSUInteger)opts locale:(NSLocale *)locale

应为您提供指定区域设置的本地化格式字符串。

然后,您可以使用setDateFormat覆盖格式化程序的初始日期格式。