2012-07-31 50 views
3

我目前正在編寫一個應用程序,嚴重與日期工作的iPhone。我正在使用NSDateFormatter將日期轉換爲字符串。方便的是,NSDateFormatter根據區域格式自動創建用戶語言的字符串。 由於我無法在所有可能的語言和地區中本地化我的應用,因此該應用僅以英文,德文,西班牙文和其他幾種語言進行了本地化。NSDateFormatter:只顯示本地化的日期,如果應用程序本地化的語言

例如,當該應用程序正在爲法語用戶運行時,該應用默認爲英語。這很好,但日期仍將使用法語進行轉換。這導致像「Month:Juillet」而不是「Month:July」這樣的字符串。

如何使NSDateFormatter始終使用應用程序運行的語言? 我知道我可以使用NSLocalizedString()本地化NSLocale標識符,但這會在不正確的區域設置中產生。

當用戶通常使用「en_GB」區域並且我的應用程序一般用於英語本地化時,我希望NSDateFormatter使用「en_GB」而不僅僅是「en」或「en_US」。當用戶運行法語時,我希望語言環境爲「en」,如果他在「de_DE」區域中運行該應用程序,我希望日期格式也爲「de_DE」,因爲該應用程序支持德語。

問候, 費邊

回答

2

當您創建的日期格式,它初始化它從當前的語言環境的風格,但是你可以重寫此。

[未測試] 你可以從用戶的列表中選擇最佳區域設置和使用 一個NSBundle可用的語言環境:

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

NSFormatter:

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

應該給你一個本地化的格式字符串爲指定的區域設置。

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

+0

你說得對。使用' - [NSBundle preferredLocalizations]'(在內部使用'+ preferredLocalizationsFromArray:')我得到它正常工作。謝謝! – 2012-07-31 09:13:46

+0

'dateFormatFromTemplate:'僅在內置日期和時間樣式不符合您的需要時才需要。否則,您應該優先使用日期格式字符串。 – 2012-07-31 13:17:09

+0

是的,我只用於'MMMM YYYY'和'dateStyle'和'timeStyle'等其他所有格式。 – 2012-08-17 16:52:49