Bonjour
J'ai beau rajouté ca dans le bootstrap.php
Configure::write('Config.language', 'fra');
setlocale(LC_ALL, 'fra');

Mes dates sont toujours en anglais.
Que se passe t'il ?

18 réponses


bonsoir,

Pour configurer les dates et heures en FR dans un form j'ai rajouté à mon input le date format

ex :
<?php echo $this->Form->input('created',array('label'=>"Date de publication",'dateFormat' => 'DMY','timeFormat' => 24)); ?>

DMY = daymonthyear et e format 24h pour eviter le PM/AM.

Voià en esperant que ça t'aidera !

sylvain
Auteur

Ah oui mais je ne peux pas avoir, par exemple Jeudi 14 Mars ou un truc comme ca

je suis encore débutante en cakePHP mais avec le tuto "creer son site avec cakePHP" au jour 3 vers 56minutes il explique comment ça fonctionne.

Déjà j'avais oublié mais dans ton controller tu dois faire appel au helper :
public $helpers = array('Date');

et pour la date en français moi j'ai ça dans ma vue :

<p><em>Publié le <?php echo $this->Date->french($post'Post']'created']); ?></em></p>

Bonsoir.
Le Helper Date présent dans un tutoriel de Grafikart et l'utilisation de la locale pour les dates et times sont deux choses différentes.
Le Helper date permet d'afficher une date en français de cete manière par exemple :

$this->Date->french($v'User']'created']);

Ce qui affichera quelque chose comme : Vendredi 21 février 2014.
Alors que pour utiliser la locale pour les dates/times avec

Configure::write('Config.language', 'fra');

Il te faut penser à mettre

Configure::read('Config.language');

dans le beforeFilter de ton AppController, mais également avoir un LC_TIME pour la locale FR, tu peux en trouver un dans les ressources Github de Grafikart, plus précisément ici, à partir de là, vos dates et heures devraient s'afficher dans le format français, sans avoir quoi que ce soit à préciser, sauf pour certaines fonctions ou formats de date.

sylvain
Auteur

J'ai l'impression qu'en passant par le date hélper c'est plus simple

Si tu ne fais que passer par le Helper Date, tu seras obligé de l'utiliser dans ton code PHP, ce que tu ne peux pas faire par exemple dans les selects d'un formulaire et utiliser la locale TIME n'est en rien compliqué, tu as juste à ajouter le Configure::read dans le beforeFilter de ton AppController et copier/coller le fichier LC_TIME de l'URL que je t'ai donné dans Locale/fra , je ne vois pas ce qu'il y a de compliqué dans cette manip.

sylvain
Auteur

Je ne comprends pas que ce soit pas natif

C'est natif d'une certaine manière, mais là c'est comme si tu demandais à ce que tous les fichiers de locales soient déjà dans l'application.
Tu ne crois pas que tu en demandes beaucoup quand même ?
Il y a quand même déjà le système qui existe tout comme celui de l'internationalisation i18n par exemple.
Si tu t'attendais à quelque chose comme WordPress, tu t'es trompé.

sylvain
Auteur

Non, je pense qu'il est lourd de refaire les fichiers PO dans chaque langue a chaque fois, encore heureux que GA l'ai fait, mais pour les autres ?

sylvain
Auteur

Bon j'ai fait et rien ne marche

// set language
        $languageCookie = $this->Cookie->read('language');
        if(!$languageCookie || !array_key_exists($languageCookie, $this->Settings->getLanguages())) {
            Configure::write('Config.language', Configure::read('e_settings.language'));
        }
        else {
            Configure::write('e_settings.language', $languageCookie);
            Configure::write('Config.language', $languageCookie);
            $this->Cookie->write('language', $languageCookie, true, '1 month');
        }

Quoi que je fasse, rien ne se passe

Commence par télécharger le plugin Localized pour CakePHP: https://github.com/cakephp/localized

Déplace le dossier APP/Plugin/Localized/Locale/fra dans APP/Locale/fra.

Rajoute cette ligne à la fin du core.php

Configure::write('Config.language', 'fra');

Dans ton AppController.php, assure toi d'avoir le helper Time dans ta liste des helpers sinon rajoute le.

Enfin, dans ta vue tu utilise le helper Time avec la fonction i18n

<?php echo $this->Time->i18nFormat($post'created'], "%d %B, %Y"); ?>
sylvain
Auteur

J'ai suivi a la lettre et presque rien a changé. Sauf quand je fait un
monapp.com/lang/fra

et la effectivement ca marche, c'etais deja le meme comportement.
Ce que j'aimerais , c'est que ca soit la langue par defaut et non pas seulement quand je fait un /lang/fre

J'ai regardé la documentation de l'application que je réécrit, il est indiqué ceci

Allow users to set their language preferences

Some sites want their users to be able to set the language for the user interface, This apps allows to do this by storing the users language preferences in cookies so the next time they visit the site it shows up in their desired language.
To allow your users to change the default language you can create special language links in any page or menu. They should link to the /lang page including the language code.
// Set language to Spanish
http://example.com/lang/spa
Or you can also create the links using the CakePHP HTML helper.
// Set the language to Italian
echo $this->Html->link('Italiano', array('controller'=>'settings', 'action'=>'lang', 'ita'), array('rel'=>'nofollow'));
The /lang page will check if the language exists before setting it and then will redirect the user to the page he was on.

La fonction qui était utilisé, semble completement indifferent a ce changement.

<?=date('d M ',strtotime($event'Event']'start_date'])); ?>

Bonsoir.

Non, je pense qu'il est lourd de refaire les fichiers PO dans chaque langue a chaque fois, encore heureux que GA l'ai fait, mais pour les autres ?

Sérieusement, tu crois que les gens vont tout te servir sur un plateau ?
Quand tu veux créer quelque chose, il faut bien que tu travailles dessus, et puis, je ne vois pas l'intérêt qu'il y aurait d'afficher les dates et les heures dans tous les langages imaginables, si ton site est traduit que dans quelques langues.
J'ai vraiment l'impression que ce que tu recherches en fait, c'est d'avoir des ressources pour tout ce que tu aurais besoin sans vraiment bosser sur tes projets WEB.

Configure::write('e_settings.language', $languageCookie);
Configure::write('Config.language', $languageCookie);
$this->Cookie->write('language', $languageCookie, true, '1 month');

Dis moi, quel est l'intérêt de faire un triple travail, c'est à dire de créer 2 variables dans la configuration et ensuite créer un cookie, tout ça pour la même valeur ?

sylvain
Auteur

Si je le savais...
C'est un programme que je réécrit, et je comprends pas tout ce que l'ancien développer voulais faire dessus.

Il est préférable de définir la locale dans le bootstrap.php. En suite, assures-toi que la locale française se nomme bien "fra"

setlocale(LC_ALL, 'fra');

En ssh, tu tapes locale -a, pour avoir la liste des locales de ton système. Il se peut par exemple qu'elle se nomme fr_FR ou fr_UTF8,...

sylvain
Auteur

Que faire si c'est le cas ?

en_GB
en_GB.iso88591
en_GB.iso885915
en_GB.utf8
en_US.utf8
français
french
fr_FR
fr_FR@euro
fr_FR.iso88591
fr_FR.iso885915@euro
fr_FR.utf8
POSIX
setlocale(LC_TIME, 'fr_FR', 'fr_FR.utf8');
sylvain
Auteur

Ok je comprends mieux pourquoi alors, mais meme apres avoir fait les modifications car ne marche toujours pas.