【问题标题】:UIDatePicker - Problem LocalizingUIDatePicker - 问题本地化
【发布时间】:2011-02-23 01:30:29
【问题描述】:

我在我的应用程序中创建了一个 UIDatePicker,并且我还支持多种语言。我的 UIDatePicker 是在 Interface Builder 中创建的,并且我创建了一个单独的本地化 XIB,因此我可以自定义我的 UIDatePicker。

在 IB 中设置“区域设置”选项似乎没有任何作用。尝试使用 Locale 和 NSCalender 以编程方式更改我的 DatePicker 也不会通过以下代码执行任何操作:

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

这会产生一个英文选择器。

不过,这真的很奇怪。 “今天”这个词是翻译过来的。如随附的屏幕截图所示。 (好吧,我不允许发布图片。但想象一下日期和时间选择器,英文“May”和“Today”写成“Ajourd'hui”。

根据我的阅读,以编程方式添加 UIDatePicker 似乎没有多大帮助。

【问题讨论】:

    标签: iphone cocoa datepicker ipod-touch uidatepicker


    【解决方案1】:

    经过进一步调查,这实际上不是iPhone的语言设置处理的。 UIDatePicker 基于“区域格式”设置而不是语言自动本地化。这很奇怪,因为日期是本地化的,所以您会认为选择器的本地化将与 iDevice 的语言而不是区域格式相关联。

    无论如何,在模拟器中模拟本地化的 DatePicker:

    1. 退出您的应用,转到“设置”。
    2. 选择常规
    3. 选择国际
    4. 选择底部选项,区域格式。
    5. 更改为所需区域。
    6. 重新启动您的应用并查看新的 UI 选择器!

    【讨论】:

      【解决方案2】:

      从 iOS 6 开始,UIDatePicker 不再查看设备的区域信息设置。您必须手动设置NSLocale,否则它将使用默认区域设置。

      看到这个答案:https://stackoverflow.com/a/12975871/1128896

      一个简单的解决方案:

         datePicker.locale = [NSLocale currentLocale];
      

      更新

      虽然现在可以在 UIDatePicker 上设置区域设置,但默认情况下它设置为“默认”而不是任何特定语言。 “默认”将检查设备的语言环境,并将自己设置为该语言环境。 (见 Dave DeLong 的评论 below)。因此,大多数新项目不应受到此更改的影响。

      如果您正在使用较旧的项目,迁移到 iOS 6,您可能会发现在 xibs 中创建的 UIDatePickers 的区域设置默认为“英语”或其他语言而不是“默认” . (我发现我所有的旧项目,在 iOS6 之前,都遵循这种行为)。要解决此问题,只需在 IB 中将语言环境更改为“默认”即可。

      【讨论】:

      • 默认语言环境设备的语言环境。 (即+currentLocale
      • 伟大的点戴夫。我看到了你关于在 xib 中设置语言环境的其他评论,如果在那里创建,1。我对其进行了更多研究,似乎在较新的 Xcode 版本中创建的任何 UIDatePicker 都默认将 Locale 设置为“默认”。但是我所有的旧项目,包括 iOS 5 或 4 版本,默认将语言环境设置为“英语”。因此,对于大多数新项目而言,这应该不是问题,但仅迁移到 iOS 6 的旧项目最好检查它们的 xibs 语言环境设置。
      【解决方案3】:

      我需要理解的是,UIDatePicker 会自动显示在设备设置为的区域设置中。我不确定如何覆盖它,但您似乎不应该覆盖它。

      【讨论】:

      • 有时它只需要被覆盖。 IE。一种语言的应用程序。
      【解决方案4】:

      根据我的经验,“今天”遵循您在 info.plist 中的设置。由于某些原因,他们忘记了适应这一点。

      【讨论】:

        【解决方案5】:

        您可以像这样在代码中设置日期选择器本地化(我正在使用语言管理器)。

        func configurePickers() {
            let languageID = AppLanguageManager.shared.currentLanguage
            let loc = Locale(identifier: languageID)
            [outgoingPicker, backPicker].forEach {
                $0?.locale = loc
                $0?.minimumDate = Date()
            }
        }
        

        从界面生成器中,您还可以设置日期选择器本地化:

        【讨论】:

          猜你喜欢
          • 2011-02-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-16
          • 1970-01-01
          • 2012-03-26
          • 1970-01-01
          相关资源
          最近更新 更多