DateFormatter возвращает строку с неверным языком - PullRequest
1 голос
/ 08 марта 2019

Я пытаюсь показать отформатированную дату на языке моего устройства, но она продолжает отображаться на английском (даже если устройство настроено на португальский язык).

На моем ViewController я создал дату:

let todaysDate: 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 ]

1 голос
/ 08 марта 2019

Чтобы приложение отображало даты на португальском языке ,

  1. Добавьте пустой Strings.strings файл
  2. Внастройки проектов, добавьте португальский локализация
  3. Несмотря на то, что файл строк пуст, приложение будет локализовано на португальский , поэтому, изменив язык в настройках на португальский
1 голос
/ 08 марта 2019

Большое спасибо за вашу помощь!

Я только что узнал, что у меня есть локализованные строки только для английского языка, и, как указал rmaddy в этой ссылке в iOS 11, мне также нужно иметь файл локализованной строки для языка, который я хочу поддерживать (в мой случай португальский).

Итак, я только что добавил поддержку португальского языка в разделе «Языковая локализация», и теперь он работает правильно! : D

Localization

1 голос
/ 08 марта 2019
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 (identifntfier:« pt-PT »)» вы должны передать точный идентификатор, который вам нужен, и также установить язык. in Info you have to set your exact languahe as well

0 голосов
/ 08 марта 2019

Как я понимаю ваш вопрос. Вы хотите изменить формат даты на текущем языке устройства.

Установите языковой стандарт в качестве предпочитаемого языка

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)

Вывод: - Показать дату с текущим языком устройства.

08 марта 2019 г. 10: 54

...