3
votes

DateFormatter renvoyant une chaîne avec une langue incorrecte

J'essaie d'afficher une date formatée dans la langue de mon appareil, mais elle continue de s'afficher en anglais (même si l'appareil est réglé sur le portugais).

Sur mon ViewController, j'ai créé une date:

â–¿ en_BR (current)

Et j'appelle cette fonction (que c'est une extension de Date):

08 March 2019

La sortie est toujours en anglais:

XXX

J'ai également vérifié si le Locale.current est correct dans le terminal et j'ai obtenu:

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

Je ne veux pas définir le langue codée en dur parce que je veux prendre en charge d'autres langues, mais cela ne fonctionne pas. Pouvez-vous me donner des conseils pour résoudre ce problème?


9 commentaires

Votre locale indique qu'elle est définie sur l'anglais (c'est ce que signifie la partie en ).


Vraiment? Mais mon appareil est en portugais et la région est également définie sur le portugais. Est-ce que je manque quelque chose?


Si votre application est uniquement localisée en anglais, cela est normal.


Voir stackoverflow.com/questions/46205763/…


Le testez-vous sur un simulateur ou sur un appareil réel?


J'ai en fait testé sur les deux et ils ont présenté le même comportement


Comme le lien rmaddy a publié le comportement a changé dans iOS11 et versions ultérieures


@dahiya_boy Le fuseau horaire n'est pas pertinent. Cela ne changera ni le format ni la langue.


C'était exactement ce que @rmaddy a souligné. Merci beaucoup!


4 Réponses :


3
votes
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. 

3 commentaires

Cette réponse sera plus correcte si vous supprimez simplement la ligne qui définit les paramètres régionaux du formateur. Il utilisera par défaut les paramètres régionaux de l'utilisateur.


est-ce func ou var ?


C'est une fonction.



1
votes

Pour que l'application affiche les dates en portugais ,

  1. Ajouter un fichier Strings.strings vide
  2. Dans les paramètres des projets, ajoutez la localisation Portugais
  3. Bien que le fichier de chaînes soit vide, l'application sera localisée dans Portugais en changeant la langue, dans Paramètres, en Portugais

0 commentaires

1
votes

Merci beaucoup pour votre aide!

Je viens de découvrir que je n'avais que des chaînes localisées pour l'anglais et comme rmaddy l'a souligné dans ce lien avec iOS 11 J'ai également besoin d'un fichier de chaîne localisé pour la langue que je souhaite prendre en charge (dans mon cas, le portugais).

Je viens donc d'ajouter la prise en charge du portugais dans la section Localisation de la langue et maintenant cela fonctionne correctement! : D

 Localisation


0 commentaires

0
votes

Comme je comprends votre question. Vous souhaitez modifier le format de date avec la langue actuelle de l'appareil.

Définissez les paramètres régionaux comme votre langue préférée

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)

Sortie: - Afficher la date avec la langue actuelle de l'appareil.

08 mars 2019 10:54


0 commentaires