DateFormatter 返回语言不正确的字符串

DateFormatter returning string with incorrect language

我正在尝试以我设备的语言显示格式化日期,但它一直以英语显示(即使设备设置为葡萄牙语)。

在我的 ViewController 我创建了一个日期:

let todaysDate: Date = Date()

我调用这个函数(它是 Date 的扩展):

func getFullDate() -> String {
    let dateFormatter  = DateFormatter()
    dateFormatter.dateFormat = "dd MMMM yyyy"
    dateFormatter.calendar = Calendar.current
    dateFormatter.locale = Locale.current
    return dateFormatter.string(from: self)
}

输出始终为英文:

08 March 2019

我还检查了终端中的 Locale.current 是否正确,我得到:

▿ en_BR (current)

我不想定义硬编码的语言,因为我想支持其他语言,但它不起作用。您能给我一些解决此问题的提示吗?

func portugueseFormattedEn_US -> String {
        Formatter.date.calendar = Calendar(identifier: .iso8601)
        Formatter.date.locale   = Locale(identifier: “pt-PT”)
        Formatter.date.timeZone = .current
        Formatter.date.dateFormat = "dd/M/yyyy, H:mm"
        return Formatter.date.string(from: self)
    }

在 "Locale(identntfier: “pt-PT”)" 中,您必须传递您想要的确切标识符,还需要设置语言。

为了让应用程序以葡萄牙语显示日期

  1. 添加空 Strings.strings 文件
  2. 在项目设置中,添加葡萄牙语本地化
  3. 尽管字符串文件为空,但应用程序将本地化为 葡萄牙语 因此,通过在“设置”中将语言更改为 葡萄牙语

非常感谢您的帮助!

我刚刚发现我只有英语的本地化字符串,正如 rmaddy 在 和 iOS 中指出的那样 11 我还需要一个本地化的字符串文件来表示我想要的语言支持(在我的例子中是葡萄牙语)。

所以我刚刚在语言本地化部分添加了对葡萄牙语的支持,现在它可以正常工作了! :D

据我了解你的问题。您想要使用当前设备语言更改日期格式。

将区域设置设置为您的首选语言

let formatter = DateFormatter()
formatter.timeZone = TimeZone.current
formatter.locale = Locale.init(identifier: Locale.preferredLanguages.first!)
formatter.setLocalizedDateFormatFromTemplate("ddMMMMyyyy HH:mm")
let stringDate = formatter.string(from: Date())

print(stringDate)

输出:- 使用当前设备语言显示日期。

2019 年 3 月 8 日 10:54