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

Posted

技术标签:

【中文标题】Swift:当我的设备设置为“de”并且我的方案设置为“系统语言”时,为啥 DateFormatter 使用区域设置“en”【英文标题】:Swift: Why is DateFormatter using locale "en" when my device is set to "de" and my Scheme is set to "System Language"Swift:当我的设备设置为“de”并且我的方案设置为“系统语言”时,为什么 DateFormatter 使用区域设置“en” 【发布时间】:2021-02-11 10:08:57 【问题描述】:

我的 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:在 Playgrounds 中,语言环境是正确的。

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

【问题讨论】:

那么你是为设备而不是模拟器构建的吗?在 Simulator 上,Mac 的语言设置用作Locale 在我的 Mac 上,模拟器的区域设置为 en。不知道为什么,还没有太在意。困扰我的是,在 iPhone 上它不尊重语言环境。我会更新我的帖子以澄清......这是否表明存在问题? 【参考方案1】:

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

【讨论】:

这不是和在代码中指定它差不多吗?我希望它支持 DateFormatter 知道的所有语言环境... 如果你先试试看是不是一样 还是英文吗?你对了,这很有趣。 我发火了。我更改了调试而不是运行方案。当我更改运行方案时,模拟器、预览和设备中的语言环境会更改为我在方案中选择的语言。我的错。 它应该是这样工作的吗?如果我的用户决定更改语言环境并现在想要英语怎么办?我认为这应该是动态的?【参考方案2】:

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

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

developmentRegion = de;

现在它可以在代码中不指定语言环境的情况下工作,同时保持 Scheme 设置为“系统语言”。

【讨论】:

以上是关于Swift:当我的设备设置为“de”并且我的方案设置为“系统语言”时,为啥 DateFormatter 使用区域设置“en”的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 我如何在闭包之外返回数组值?

将动态高度设置为 UIScrollView Swift

如何让我的 iOS 项目为正确的版本构建?

Swift - 导入我的 swift 类

Facebook SDK 登录问题

Swift 5 禁用从 WKWebView 到不同应用程序的重定向