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

时间:2019-03-08 04:36:51

标签: ios swift iphone nsdateformatter

我试图以设备的语言显示格式化的日期,但它始终以英语显示(即使设备设置为葡萄牙语)。

在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)

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

4 个答案:

答案 0 :(得分:1)

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”)”中,您必须传递所需的确切标识符,并且还需要设置语言。 documentation

答案 1 :(得分:1)

为了使该应用以葡萄牙语显示 日期

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

答案 2 :(得分:1)

非常感谢您的帮助!

我刚刚发现我只有英文的本地化字符串,正如rmaddy在iOS 11的this link中指出的那样,我还需要针对我要支持的语言提供一个本地化的字符串文件(在我的情况下是葡萄牙语)。

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

Localization

答案 3 :(得分:0)

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

将语言环境设置为您的首选语言

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