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

问题描述

我的 iPhone 设置为德语。我的调试方案应用语言设置设置为系统语言。我仍然必须手动应用 formatter.locale ......否则我会得到“星期二”而不是“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:在 Playgrounds 中,语言环境是正确的。

PPS:在我的 Mac 上,模拟器的语言环境设置为 en,尽管我的 Mac 系统设置为德语。不知道为什么,还没有太在意。令我困扰的是,在 iPhone 上,它不尊重语言环境。

解决方法

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

enter image description here

,

我终于找到了这个帖子,解决了这个问题: How do I change the Development language in Xcode before internationalizing my app?

我必须手动编辑 .xcodeproj 中的 project.pbxproj 并将开发区域设置为德语:

Apply Now - https://global.americanexpress.com/acq/intl/dpa/japa/ind/pers/begin.do?perform=IntlEapp:IND:membershiprewards_credit&feePay=P1
Learn more - credit-cards/membership-rewards-card/
Apply Now - https://global.americanexpress.com/acq/intl/dpa/japa/ind/pers/begin.do?perform=IntlEapp:IND:travel_platinum&feePay=T1
Learn more - credit-cards/platinum-travel-credit-card/
Apply Now - https://global.americanexpress.com/acq/intl/dpa/japa/ind/pers/begin.do?perform=IntlEapp:IND:gold_charge&feePay=G4&intlink=mainapplynow
Learn more - charge-cards/gold-card/
Apply Now - https://global.americanexpress.com/acq/intl/dpa/japa/ind/pers/begin.do?perform=IntlEapp:IND:platinum_reserve&feePay=LV&intlink=mainapplynow
Learn more - credit-cards/platinum-reserve-credit-card/
Learn more - credit-cards/jet-airways-platinum-credit-card/
Learn more - credit-cards/jet-airways-platinum-credit-card/
Apply Now - https://global.americanexpress.com/acq/intl/dpa/japa/ind/pers/begin.do?perform=IntlEapp:IND:platinum_charge
Learn more - charge-cards/platinum-card/
Learn more - credit-cards/payback-card/
Learn more - credit-cards/payback-card/
Apply Now - https://global.americanexpress.com/acq/intl/dpa/japa/ind/pers/begin.do?perform=IntlEapp:IND:smart_earn&feepay=ES1
Learn more - credit-cards/smart-earn-credit-card/

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