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

Posted

技术标签:

【中文标题】NSDateFormatter:仅当应用程序针对该语言进行本地化时才显示本地化日期【英文标题】:NSDateFormatter: Only show localized dates if app is localized for the language 【发布时间】:2012-07-31 07:16:59 【问题描述】:

我目前正在为 iPhone 编写一个可大量使用日期的应用程序。我正在使用NSDateFormatter 将日期转换为字符串。方便的是,NSDateFormatter 根据区域格式自动创建用户语言的字符串。 因为我无法在所有可能的语言和地区本地化我的应用程序,所以该应用程序仅本地化为英语、德语、西班牙语和其他几种语言。

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

如何使NSDateFormatter 始终使用应用程序运行的语言? 我知道我可以使用NSLocalizedString() 来本地化NSLocale 标识符,但这会导致区域设置不正确。

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

问候, 费边

【问题讨论】:

【参考方案1】:

当您创建日期格式化程序时,它会从当前语言环境初始化其样式,但您可以覆盖它。

[未测试] 您可以使用从用户列表和可用语言环境中获取最佳语言环境 NSBundle:

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

NSFormatter:

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

应该为您提供指定语言环境的本地化格式字符串。

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

【讨论】:

你是对的。使用-[NSBundle preferredLocalizations](在内部使用+preferredLocalizationsFromArray:)我让它正常工作。谢谢! dateFormatFromTemplate: 仅在内置日期和时间样式不能满足您的需要时才需要。否则,您应该更喜欢它们而不是日期格式字符串。 是的,我只将它用于MMMM YYYY 之类的格式以及用于其他所有内容的dateStyletimeStyle 属性。

以上是关于NSDateFormatter:仅当应用程序针对该语言进行本地化时才显示本地化日期的主要内容,如果未能解决你的问题,请参考以下文章

共享 NSDateFormatter - 最佳实践?

NSDateFormatter 和 NSDateComponents 为周数返回不同的值

NSDateFormatter 以一天为单位返回一个日期

iOS 中的 NSDateFormatter

使用 NSDateFormatter 管理日期

Foundation框架—时间输出格式NSDateFormatter