2010-05-24 58 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