Swift:当我的设备设置为“de”,我的方案设置为“系统语言”时,为什么DateFormatter使用区域设置“en”

js4nwp54  于 2023-02-03  发布在  Swift
关注(0)|答案(3)|浏览(136)

我的iPhone被设置为德语。我的调试方案应用程序语言设置被设置为系统语言。我仍然必须手动应用formatter.locale...否则我得到的是“Tuesday”而不是“Dienstag”。当然我不想手动设置语言环境。我希望输出被本地化为用户选择的任何语言。

func weekday(forDate day: Date) -> String {
    let formatter = DateFormatter()
    //formatter.locale = Locale.current // gives me locale en
    formatter.locale = Locale(identifier: "de") //without this line I get locale en
    formatter.setLocalizedDateFormatFromTemplate("E")
    return formatter.string(from: day)
}

是否有我不知道的设置会覆盖我提到的设置?
PS:在Playground的区域设置是正确的。
PPS:在我的Mac上,模拟器的区域设置为en,尽管我的Mac系统设置为德语。不知道为什么,还不太介意。让我困扰的是,在iPhone上,它不尊重区域设置。

rta7y2nd

rta7y2nd1#

我终于找到了这个帖子,解决了这个问题:How do I change the Development language in Xcode before internationalizing my app?
我不得不在.xcodeproj中手动编辑project.pbxproj,并将开发区域设置为德语:

developmentRegion = de;

现在,它无需在代码中指定语言环境,同时将Scheme设置为“系统语言”。

xn1cxnb4

xn1cxnb42#

转到您的目标,然后单击编辑方案,并设置您的应用程序语言为“德语”从选项选项卡如下。

a7qyws3x

a7qyws3x3#

对于那些不想在测试不同语言环境时每次都编辑pbxproj配置文件的人,这里有另一种方法(XCode 14,IOS16.2):

  • 信息plist包含设置为**$(开发语言)的条目CFBundleDevelopmentRegion**
  • 删除条目

这允许预期的行为-在Xcode方案中设置区域和语言,或者将其保留在系统语言和系统区域以使用设备设置。

相关问题