Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DateFormatter returning string with incorrect language

I'm trying to show a formatted date at my device's language but it keeps showing in English (even though the device is set to Portuguese).

At my ViewController I created a date:

let todaysDate: Date = Date()

And I call this function (that it's an extension of 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)
}

The output is always in English:

08 March 2019

I also checked if the Locale.current is correct in the terminal and I got:

▿ en_BR (current)

I don't want to define the language hardcoded because I want to support other languages, but it's not working. Could you please give me any tips on how to solve this?

like image 825
Ana Paula Avatar asked Mar 08 '19 04:03

Ana Paula


4 Answers

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

in "Locale(identntfier: “pt-PT”)" you have to pass exact identifier which you want and need to set language as well. in Info you have to set your exact languahe as well

like image 112
Deviyani Swami Avatar answered Nov 18 '22 22:11

Deviyani Swami


As I Understand your question. You want to change the date format with the current device language.

Set Locale as your preferred language

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)

Output:- Show date with current device language.

08 de março de 2019 10:54

like image 44
Nilesh R Patel Avatar answered Nov 18 '22 20:11

Nilesh R Patel


In order to have the app displaying the dates in Portuguese,

  1. Add an empty Strings.strings file
  2. In projects settings, add the Portuguese localization
  3. Although the strings file is empty, the app will become localized in Portuguese so by changing the language, in Settings, to Portuguese
like image 1
Daniel Selvan Avatar answered Nov 18 '22 20:11

Daniel Selvan


Thank you very much for your help!

I just found out that I only had Localized strings for English and as rmaddy pointed out in this link with iOS 11 I also need to have a Localized string file for the language I want to support (in my case Portuguese).

So I just added support for Portuguese at Language localization section and now it's working correctly! :D

Localization

like image 1
Ana Paula Avatar answered Nov 18 '22 22:11

Ana Paula