La fonction setlocale()
ne définit pas la langue souhaitée (allemand).
L'objectif est de générer les noms de mois.
Ceci est mon code de test avec des essais jusqu'à présent:
<?php
date_default_timezone_set('Europe/Berlin');
setlocale(LC_ALL, 'de_DE.utf8');
// Or
setlocale(LC_ALL, 'de_DE@euro');
// Or
setlocale(LC_ALL, 'de_DE');
// Or
setlocale(LC_ALL, 'de');
// Or
setlocale(LC_ALL, 'ge');
echo strftime('%B');
Sortie:
Juin
au lieu de
Juni
Aucune suggestion?
PHP version 5.6
Cette solution pourrait vous aider si vous n'avez pas accès à Shell sur le serveur.
Si vous avez accès à Shell, alors réponse de Benjamin Seiller est le meilleur!
Comme je n’ai aucune autre possibilité (Shell), j’ai trouvé une solution avec seulement PHP en utilisant la classe IntlDateFormatter) .
<?php
// Example vars
$month = '6'; // 1-12
$year = '2014'; // four digit year
$fmt = new IntlDateFormatter('de_DE',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'Europe/Berlin',
IntlDateFormatter::GREGORIAN);
$lastMonth = mktime(0, 0, 0, $month -1, 1, $year);
$showLastMonth = $fmt->format($lastMonth);
echo $showLastMonth;
Est-il probable que les paramètres régionaux allemands ne soient pas installés sur le serveur sur lequel vous exécutez le script - avez-vous un accès Shell au serveur? Alors essaye
locale -a
pour voir quels paramètres régionaux sont installés. Jetez également un coup d'œil ici Est-il possible de s'appuyer sur setlocale et sur les environnements locaux installés?
Votre code est correct. Vous devez probablement simplement installer le package de langue correct sur le serveur sur lequel vous exécutez le script.
Dans le terminal, si la langue que vous souhaitez utiliser ne figure pas dans la liste après avoir exécuté la commande Sudo locale -a
, Vous devrez installer la langue manquante en exécutant la commande suivante:
Sudo /usr/share/locales/install-language-pack de_DE
(Sudo
ici optionnel si votre utilisateur a les droits root)
Ensuite, si vous vérifiez avec Sudo locale -a
, Vous devriez voir de_DE.utf8
.
Si vous voulez installer le paquet de langue française, lancez
Sudo /usr/share/locales/install-language-pack fr_FR
Ensuite, vous serez autorisé à définir votre langue sur PHP en utilisant setlocale(...)
] exactement comme vous l'avez fait.
Note: Si vous êtes dans un projet non-utf8, vous devrez générer d'autres formats à partir de packages installés. Voici comment procéder sur ubuntu (ce travail sur debian également):
edit /var/lib/locales/support.d/cs et ajoutez les lignes suivantes
fr_FR.iso88591 ISO-8859-1
fr_CA.iso88591 ISI-8859-1
et courir
Sudo dpkg-reconfigure locales
Puis en relançant Sudo locale -a
Vous devriez voir les deux fr_FR.iso88591 et fr_CA.iso88591 dans la liste et vous pourrez les utiliser dans php en appelant setlocale(LC_ALL, 'fr_FR.iso88591');
Pour ceux qui viennent ici à la recherche de date (), les noms de mois et de semaine ne sont pas localisés:
== Faites attention ==
date () peut uniquement renvoyer les noms de mois/jour en anglais et ne pourra pas vous fournir de traduction pour d'autres langues.
page de manuel PHP pour 'setlocale' sais :
Remarque: La valeur de retour de setlocale () dépend du système sur lequel PHP est en cours d'exécution. Il renvoie exactement ce que la fonction system setlocale renvoie.
Si vous avez un accès root (debian), voici la solution:
modifier
/etc/locale.gen
Vous pouvez ajouter/supprimer les paramètres régionaux à utiliser. Après avoir sauvegardé le fichier, lancez:
locale-gen
et ça devrait aller. Sur mon serveur, j'ai dû redémarrer Apache pour voir les changements.
Essaye celui-là:
date_default_timezone_set('Europe/Berlin');
$loc=setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'deu_deu');
echo strftime('%B');
En fonction du système d'exploitation sous-jacent "de_DE"
et d'autres peut-être la mauvaise chaîne.
Sous Windows, référez-vous à cette liste:
C'est généralement "DEU" ou "GERMAN" sous Win.
Déjà mentionné:
Sous Linux, vous pouvez voir tous les paramètres régionaux avec la commande Shell:
locale -a
Dans mon cas, cela ne fonctionne pas:
setlocale(LC_ALL, 'de_AT'); // false
pendant que cela fonctionne:
Locale::setDefault('de_AT'); // true
et cela fonctionne:
setlocale(LC_ALL, 'de_AT.utf-8'); // true
Sortie du programme de localisation:
$ locale -a
[...]
C.UTF-8
de_AT.utf-8
de_DE.utf-8
en_AG
[...]