2010-05-24 110 views
11

我在我的應用程序中創建了UIDatePicker,並且我也支持多種語言。我的UIDatePicker是在Interface Builder中創建的,並且我創建了一個獨立的本地化XIB,因此我可以自定義我的UIDatePicker。UIDatePicker - 問題本地化

在IB中設置「Locale」選項似乎什麼也不做。試圖用語言環境和NSCalender編程改變我的DatePicker也通過做下面的代碼沒有:

NSLocale * locale = [[NSLocale alloc] initWithLocaleIdentifier:@"es_ES"]; 
datePicker.locale = locale; 
datePicker.calender = [locale objectForKey:NSLocaleCalender]; 

這導致英國選擇器。

雖然這裏真的很奇怪。 「今日」一詞被翻譯。如附件截圖所示。 (好吧,我不允許發佈圖片,但想象一下日期&時間選擇器,英文中的「May」和「今日」中寫的「Ajourd'hui」

根據我讀過的內容,添加UIDatePicker編程方式似乎沒有太大的幫助。

回答

10

經過進一步的調查,這實際上不是由iPhone的語言設置處理.UIDatePicker是根據「區域格式」設置自動進行本地化,而不是語言。這很奇怪,因爲日期是本地化的,所以您會認爲選擇器的本地化將與iDevice的語言而不是區域格式相關聯。

總之,模擬本地化的DatePicker在模擬器:

  1. 退出你的應用程序,進入設置。
  2. 選擇常規
  3. 選擇國際
  4. 選擇底部的選項,區域格式。
  5. 更改爲所需區域。
  6. 重新啓動您的應用並查看新的UI選取器!
1

我得到的理解是,UIDatePicker自動顯示在設備設置爲的區域設置我不知道如何覆蓋它,但它可能像你似乎可能不應該覆蓋它

+4

有時它只是需要重寫。即一個語言只應用。 – 2011-04-11 14:57:26

0

根據我的經驗,「今日」是遵循您在info.plist中的設置。由於某些原因,他們已經忘記調整這一點。

3

從iOS 6開始,UIDatePicker不再查看設備的區域設置信息設置。 您必須手動設置 NSLocale,否則它將使用默認的區域設置。

看到這個答案:https://stackoverflow.com/a/12975871/1128896

一個簡單的辦法:

datePicker.locale = [NSLocale currentLocale]; 

更新

雖然區域可現在的UIDatePicker進行設置,默認情況下它被設置爲「默認'而不是任何特定的語言。 '默認'將檢查設備的語言環境,並將其設置爲。 (見Dave DeLong的評論below)。因此,大多數新項目不應該受到這種變化的影響。

如果您正在使用舊項目,移植到iOS 6的工作,你會發現,這是在xibs創建UIDatePickers有自己的語言環境默認設置爲「英語」或其他語言,而不是「默認」。 (我發現我的所有舊項目,在iOS6之前,都遵循這種行爲)。要解決這個問題,只需在IB中將語言環境更改爲「默認」即可。

+1

默認語言環境*是設備的語言環境。 (即'+ currentLocale') – 2013-04-20 00:11:45

+0

偉大的點戴夫。我看到你的其他評論關於在xib中設置語言環境(如果在那裏創建的話),[1](http://stackoverflow.com/questions/1151335/can-i-localize-a-uidatepicker/12975871#comment18351115_12975871)。我仔細看了一下,看起來,在較新的Xcode版本中創建的任何UIDatePicker默認情況下都將Locale設置爲'Default'。但是我的所有舊版項目(包括iOS 5或4版本)在默認情況下都將「語言環境」設置爲「英語」。所以對於大多數新項目來說,這不應該成爲一個問題,但更早的項目移動到iOS 6將是明智的檢查他們的xib區域設置。 – Mike 2013-04-29 23:29:39

+0

是的,這是正確的。 :) – 2013-04-30 13:43:49