MyBB.support, le portail francophone de MyBB
Pour avoir toutes les dates en français partout dans le forum - Version imprimable

+- MyBB.support, le portail francophone de MyBB (https://mybb.fr)
+-- Forum : MyBB.fr (https://mybb.fr/forum-1.html)
+--- Forum : Annonces (https://mybb.fr/forum-47.html)
+--- Sujet : Pour avoir toutes les dates en français partout dans le forum (/thread-323.html)

Pages : 1 2


Pour avoir toutes les dates en français partout dans le forum - spyto - 01-06-2007

Salut,

Suite à une demande de SunDark dans la section Annonces, à savoir comment avoir la date de l'enregistrement en français dans la partie gauche du thread d'un "posteur", ex:

Citation :Messages : 9
Groupe : Membre
Inscription :
March 2007
Statut : En ligne

j'ai posté en réponse une modif du fichier inc/fonctions_post.php.
Ça marche... mais j'ai essayé d'approfondir le truc pour ne pas restreindre cette "traduction" à ce seul cas, mais à tout le forum en général.

Si j'ai tout bien compris, les "mises en forme" des dates passent par la fonction my_date() du fichier /inc/functions.php.
J'ai donc travaillé là-dessus.

Si l'on regarde de près cette fonction, elle utilise la fonction gmdate() qui retourne une chaîne formatée de la date GMT... mais forcément en anglais.
D'où l'idée de "remplacer" cete fonction par une fonction qui rendrait cette même heure GMT mais formatée en français.

Voilà le résultat de mes travaux, ça marche (en local, pas encore testé en ligne...).

Editer le fichier /inc/functions.php

Chercher:
function my_date($format, $stamp="", $offset="", $ty=1)

Voici la fonction en détail
Code :
[color=#0000a0]/**
* Turn a unix timestamp in to a "friendly" date/time format for the user.
*
* @param string A date format according to PHP's date structure.
* @param int The unix timestamp the date should be generated for.
* @param int The offset in hours that should be applied to times. (timezones)
* @param int Whether or not to use today/yesterday formatting.
* @return string The formatted timestamp.
*/
function my_date($format, $stamp="", $offset="", $ty=1)
{
    global $mybb, $lang, $mybbadmin, $plugins;

    // If the stamp isn't set, use time()
    if(empty($stamp))
    {
        $stamp = time();
    }

    if(!$offset && $offset != '0')
    {
        if($mybb->user['uid'] != 0 && array_key_exists("timezone", $mybb->user))
        {
            $offset = $mybb->user['timezone'];
            $dstcorrection = $mybb->user['dst'];
        }
        elseif(defined("IN_ADMINCP"))
        {
            $offset =  $mybbadmin['timezone'];
            $dstcorrection = $mybbadmin['dst'];
        }
        else
        {
            $offset = $mybb->settings['timezoneoffset'];
            $dstcorrection = $mybb->settings['dstcorrection'];
        }
        // If DST correction is enabled, add an additional hour to the timezone.
        if($dstcorrection == "yes")
        {
            $offset++;
            if(my_substr($offset, 0, 1) != "-")
            {
                $offset = "+".$offset;
            }
        }
    }
    if($offset == "-")
    {
        $offset = 0;
    }
    $date = gmdate($format, $stamp + ($offset * 3600));
    if($mybb->settings['dateformat'] == $format && $ty)
    {
        $stamp = time();
        $todaysdate = gmdate($format, $stamp + ($offset * 3600));
        $yesterdaysdate = gmdate($format, ($stamp - 86400) + ($offset * 3600));
        if($todaysdate == $date)
        {
            $date = $lang->today;
        }
        elseif($yesterdaysdate == $date)
        {
            $date = $lang->yesterday;
        }
    }
    
    $plugins->run_hooks_by_ref("my_date", $date);

    return $date;
}[/color]

Il faut intercepter la fonction gmdate(). J'ai donc écrit une nouvelle fonction à cet effet.
La voici en détail, commentée largement dans les deux langues !
Citation :/**
* Replacement of the gmdate() function for french version.
*
* @param string A date format according to PHP's date structure.
* @param int The unix timestamp the date should be generated for.
* @return string The formatted GMT timestamp "localized".
*
* Remplacement de la fonction gmdate() pour version française
*
* @param chaîne Un format de date conforme à la structure date PHP
* @param int Le timestamp Unix pour lequel il faut générer une date
* @return Le timestamp GMT formaté "localisé" *
*/


function my_gmdate ($format, $stamp)
{
// Changes the localization information
// Modifie les informations de localisation

setlocale(LC_TIME, "FR");

// Replaces the format params used for date() fonction with those used by gmstrftime() function
// witch returns formatted date according to the local configuration

// Remplace les paramètres de format utilisés par la fonction date() par ceux utilisés par la fonction gmstrftime()
// qui retourne la date formatée en fonction de la configuration locale.

// Ex. Replaces "M Y" with "%b %Y" for gmstrftime() (please check it, surely it remains errors or missing params)
// Ex. Remplace "M Y" par "%b %Y" pour gmstrftime() (merci de vérifier, il doit rester quelques erreurs ou omissions de paramètres)


$format=str_replace(
array ("D", "l", "M", "F", "d", "j", "y", "o", "M", "H", "h", "z", "m", "i", "a", "s", "N", "W", "w", "y", "Y", "e"),
array("%a", "%A", "%b", "%B", "%d", "%e", "%g", "%G", "%h", "%H", "%I", "%j", "%m", "%M", "%p", "%u", "%W", "%w", "%u", "%y", "%Y", "%z"), $format);
// returns the localized formated string
// retourne la chaîne formatée "française"

return gmstrftime($format, $stamp);
}

Il suffit donc ensuite de remplacer les occurrences de gmdate() dans my_date() par my_gmdate() et le tour est joué !

Ce qui donne le code complet suivant:
Code :
/**
* Replacement of the gmdate() function for french version.
*
* @param string A date format according to PHP's date structure.
* @param int The unix timestamp the date should be generated for.
* @return string The formatted  GMT timestamp "localized".
*
* Remplacement de la fonction gmdate() pour version française
*
* @param chaîne Un format de date conforme à la structure date PHP
* @param int Le timestamp Unix pour lequel il faut générer une date
* @return Le timestamp GMT formaté "localisé" *
*/

function my_gmdate ($format, $stamp)
{
    // Changes the localization information
    // Modifie les informations de localisation
    setlocale(LC_TIME, "FR");
    
    // Replaces the format params used for date() fonction with those used by gmstrftime() function
    // witch returns formatted date according to the local configuration
    
    // Remplace les paramètres de format utilisés par la fonction date() par ceux utilisés par la fonction gmstrftime()
    // qui retourne la date formatée en fonction de la configuration locale.
    
    // Ex. Replaces "M Y" with "%b %Y" for gmstrftime() (please check it, surely it remains errors or missing params)
    // Ex. Remplace "M Y" par "%b %Y" pour gmstrftime() (merci de vérifier, il doit rester quelques erreurs ou omissions de paramètres)
    
    $format=str_replace(
    array ("D", "l", "M", "F", "d", "j", "y", "o", "M", "H", "h", "z", "m", "i", "a", "s", "N", "W", "w", "y", "Y", "e"),
    array("%a", "%A", "%b", "%B", "%d", "%e", "%g", "%G", "%h", "%H", "%I", "%j", "%m", "%M", "%p", "%u", "%W", "%w", "%u", "%y", "%Y", "%z"), $format);
    // returns the localized formated string
    // retourne la chaîne formatée "française"
    return gmstrftime($format, $stamp);
}

    
/**
* Turn a unix timestamp in to a "friendly" date/time format for the user.
*
* @param string A date format according to PHP's date structure.
* @param int The unix timestamp the date should be generated for.
* @param int The offset in hours that should be applied to times. (timezones)
* @param int Whether or not to use today/yesterday formatting.
* @return string The formatted timestamp.
*/
function my_date($format, $stamp="", $offset="", $ty=1)
{
    global $mybb, $lang, $mybbadmin, $plugins;

    // If the stamp isn't set, use time()
    if(empty($stamp))
    {
        $stamp = time();
    }

    if(!$offset && $offset != '0')
    {
        if($mybb->user['uid'] != 0 && array_key_exists("timezone", $mybb->user))
        {
            $offset = $mybb->user['timezone'];
            $dstcorrection = $mybb->user['dst'];
        }
        elseif(defined("IN_ADMINCP"))
        {
            $offset =  $mybbadmin['timezone'];
            $dstcorrection = $mybbadmin['dst'];
        }
        else
        {
            $offset = $mybb->settings['timezoneoffset'];
            $dstcorrection = $mybb->settings['dstcorrection'];
        }
        // If DST correction is enabled, add an additional hour to the timezone.
        if($dstcorrection == "yes")
        {
            $offset++;
            if(my_substr($offset, 0, 1) != "-")
            {
                $offset = "+".$offset;
            }
        }
    }
    if($offset == "-")
    {
        $offset = 0;
    }

    // modif ici...
              $date = [b]my_gmdate[/b]($format, $stamp + ($offset * 3600));

    if($mybb->settings['dateformat'] == $format && $ty)
    {
        $stamp = time();
        // modif ici aussi...
                            $todaysdate = [b]my_gmdate[/b]($format, $stamp + ($offset * 3600));
        // et enfin modif ici...
                            $yesterdaysdate = [b]my_gmdate[/b]($format, ($stamp - 86400) + ($offset * 3600));
        if($todaysdate == $date)
        {
            $date = $lang->today;
        }
        elseif($yesterdaysdate == $date)
        {
            $date = $lang->yesterday;
        }
    }
    
    $plugins->run_hooks_by_ref("my_date", $date);

    return $date;
}

Rappel:
Par expérience (je n'en savais fichtrement rien), en local (avec EasyPHP en tout cas), il faut utiliser
setlocale(LC_TIME, "FR");
(il ne veut pas de la syntaxe "fr_FR")
alors qu'en ligne il faut utiliser
setlocale(LC_TIME, "fr_FR");

Note:
Pour ceux qui auraient éventuellement modifié le fichier /inc/functions_post.php de mon post précédent, il faut bien sûr rétablir l'original !

Merci de bien vouloir me dire si c'est bon.

Pour faire plus simple, je joins le fichier functions.php modifié. Faites une copie de l'original en cas...

Vive MyBB !
@+
Spyto

PS:
Merci au staff (et aux autres) de bien vouloir vérifier la liste des paramètres de la fonction!
$format=str_replace(
array ("D", "l", "M", "F", "d", "j", "y", "o", "M", "H", "h", "z", "m", "i", "a", "s", "N", "W", "w", "y", "Y", "e"),
array("%a", "%A", "%b", "%B", "%d", "%e", "%g", "%G", "%h", "%H", "%I", "%j", "%m", "%M", "%p", "%u", "%W", "%w", "%u", "%y", "%Y", "%z"), $format);
Le premier array contient les paramètres de format principaux de date()
Le deuxième array contient les paramètres de format correspondants de gmstrftime(). Ce sont les mêmes que pour strftime().


RE: Pour avoir toutes les dates en français partout dans le forum - Sundark - 02-06-2007

Bon allez , c'est partie, je test!!
(je garde une save de functions.php on sais jamais:p:p)

Si sa marche niquel, il manque plus qu'a la mettre dans le pack français complet..
(si il y as besoin de remettre un lien, je suis là^^)


Aucun problème:
Sundark's forum a écrit :Sundark
Administrator
*******
Messages : 39
Groupe : Administrateur
Inscription : mai 2007
Statut : En ligne
Réputation : 2

Enfin, deux petit point:
-Il y as un A après les date horloge
-Les mois dans le volet de gauche est en minuscule
(Inscription : mai 2007 , avant Inscription : May 2007)


RE: Pour avoir toutes les dates en français partout dans le forum - spyto - 02-06-2007

SunDark a écrit :Enfin, deux petit point:
-Il y as un A après les date horloge
Je ne comprends pas ce que tu veux dire !...
A quel endroit ?... Précise !
As-tu modifié le format de l'heure l'admin ?
Pour ma part, j'ai mis H:i
alors que par défaut c'est H:i A
(le paramètre de format 'A' force l'affichage de A ou P en majuscules, pour Ante Meridiem et Post Meridiem !)
C'est sans doute de ce A que tu veux parler ? Le remède est simple.

Citation :-Les mois dans le volet de gauche est en minuscule
(Inscription : mai 2007 , avant Inscription : May 2007)

Normal, c'est le retour lié � setlocale(fr_FR) de PHP...
L� si tu tiens absolument � avoir le nom des mois en majuscules, il faut modifier la dernière ligne de la fonction my_gmdate() de cette façon:
remplacer:
return gmstrftime($format, $stamp);
par
return strtoupper(gmstrftime($format, $stamp));


Mais je ne vois pas l'intérêt... D'autant plus que toutes les fonctions d'affichage de date du forum passent par l� , ça pourrait éventuellement provoquer certains comportements inattendus...

@+

PS: Pour ce qui est de l'upload du "nouveau" pack, attendons un peu que le staff valide cette modif...
Merci de ton offre. Je te ferai signe si j'ai besoin de toi pour upper.

Edit du Poulpe : Je recommande toutefois l'utilisation du paramètre G:i


RE: Pour avoir toutes les dates en français partout dans le forum - Sundark - 05-06-2007

Je vais voir pour le fameux "A".
Et la minuscule est très bien comme cela.


RE: Pour avoir toutes les dates en français partout dans le forum - Alex131089 - 11-07-2007

Astuce pour setlocale, utilisez ca :
Code PHP :
setlocale (LC_TIME"fr_FR.UTF-8""french""fr_FR""fr""fre""fra"); 
Et ca fonctionne normalement sur tout les OS (XP, Vista, Hebergement Linux qui ne prend que l'utf8 (problème rencontré chez nfrance), etc ...) Wink


RE: Pour avoir toutes les dates en français partout dans le forum - Sundark - 20-08-2007

Possibilité de réavoir cette traduction de date pour la 1.2.9 ?? :$


RE: Pour avoir toutes les dates en français partout dans le forum - spyto - 21-11-2007

SunDark a écrit :Possibilité de réavoir cette traduction de date pour la 1.2.9 ?? :$
Je pense que la modif est valable pour la 1.2.9...

(édite le fichier "functions.php" et remplace comme cité dans le post ci-dessus !)

@+


RE: Pour avoir toutes les dates en français partout dans le forum - Sword91 - 20-12-2008

cette modification marche t'elle pour la version 1.4.3?


RE: Pour avoir toutes les dates en français partout dans le forum - Nodark - 20-12-2008

Sword91 a écrit :cette modification marche t'elle pour la version 1.4.3?

Je pense qu'elle doit marcher,mais tu devrais essayer Tongue


RE: Pour avoir toutes les dates en français partout dans le forum - Sword91 - 20-12-2008

je vais essayer alors mais le fichier fonction étant assez différent, ça ne marche pas si je télécharge le fichier posté ^^


RE: Pour avoir toutes les dates en français partout dans le forum - spyto - 20-12-2008

Sword91 a écrit :je vais essayer alors mais le fichier fonction étant assez différent, ça ne marche pas si je télécharge le fichier posté ^^

C'est sûr, le fichier que tu as téléchargé était prévu pour 1.2.8 autant qu'il m'en souvienne ! Wink

En partant de ce code, j'ai essayé d'adapter à 1.4.4. Je pense que c'est bon (testé en local).

Rajouter au-dessus de function my_date() cette fonction d'interception :

Code PHP :
function my_gmdate ($format$stamp)
{
    
// Changes the localization information
    // Modifie les informations de localisation
    
setlocale (LC_TIME"fr_FR.UTF-8""french""fr_FR""fr""fre""fra");    
    
// Replaces the format params used for date() fonction with those used by gmstrftime() function
    // witch returns formatted date according to the local configuration
    
    // Remplace les paramètres de format utilisés par la fonction date() par ceux utilisés par la fonction gmstrftime()
    // qui retourne la date formatée en fonction de la configuration locale.
    
    // Ex. Replaces "M Y" with "%b %Y" for gmstrftime() (please check it, surely it remains errors or missing params)
    // Ex. Remplace "M Y" par "%b %Y" pour gmstrftime() (merci de vérifier, il doit rester quelques erreurs ou omissions de paramètres)
    
    
$format=str_replace(
    
// légende: n=numérique, nz=num sans zéro, a=abrégé, c=complet 2=sur 2 chiffres, 4=sur 4 ch.
    //       jour(n+nz+a+c),    mois(n+a+c),  année(2-4), h(24/12)+forme G(sans 0), mins-sec, am/pm, j(1à7), n° sem, j(0à7), 
    
array ("d""j""D""l""m""M""F""y""Y",   "H""h""G""g",       "i""s""a",    "N",   "W",     "w"),
    array(
"%d""%e","%a","%A","%m","%b","%B","%y","%Y",  "%H","%I","%H","%I",       "%M","%S","%p",   "%u",   "%W",   "%w"), $format);
    
// returns the localized formated string
    // retourne la chaîne formatée "française"
     
return utf8_encode(gmstrftime($format$stamp)); // petite modif ici


Juste une petite modif : utilisation de la fonction utf8_encode() pour convertir les caractères accentués en UTF-8 :
Code PHP :
return (gmstrftime($format$stamp); 
remplacé par :
Code PHP :
return utf8_encode(gmstrftime($format$stamp)); 

et dans la fonction my-date(), remplacer toutes les occurrences de gmdate() par my_gmdate() qui se charger de convertir en fr avant de rendre la main...

Ce qui donne ce fichier /inc/functions.php pour 1.4.4 (gardez une copie de l'original) :


RE: Pour avoir toutes les dates en français partout dans le forum - Sword91 - 21-12-2008

merci ^^ je vais tester

EDIT: j'ai cette date qui apparait: %p 17 décembre
avec ton fichier et si j'ajoute le code dans le mien. il faut affiché la date sous quel format dans le panel admin?
j'ai comme ça dan mon panel admin: D j F

EDIT2: Ma question serait comment avoir Décembre afficher au lieu de décembre (modif cité en haut = DECEMBRE)


RE: Pour avoir toutes les dates en français partout dans le forum - Sword91 - 21-12-2008

up. tu sais d'où sa viens?


RE: Pour avoir toutes les dates en français partout dans le forum - spyto - 21-12-2008

Sword91 a écrit :merci ^^ je vais tester

EDIT: j'ai cette date qui apparait: %p 17 décembre
avec ton fichier et si j'ajoute le code dans le mien. il faut affiché la date sous quel format dans le panel admin?
j'ai comme ça dan mon panel admin: D j F

Mes formats de date/heure du panel admin :
Date : d-m-Y
Heure : G:i
Date d'enregistrement : M Y

é, ça ressemble à un mauvais encodage UTF-8...
Essaie de remettre l'original
Code PHP :
return gmstrftime($format$stamp); // petite modif ici 
au lieu de
Code PHP :
return utf8_encode(gmstrftime($format$stamp)); // petite modif ici 

J'avais rajouté le fonction utf8_encode() parce que le é de Décembre s'affichait mal...
Sinon, essaie utf8_encode().

Citation :EDIT2: Ma question serait comment avoir Décembre afficher au lieu de décembre (modif cité en haut = DECEMBRE)

Là, je ne comprends pas ce que tu demandes.
A quel niveau Décembre au lieu de décembre ?


En fait ce thread est ancien : c'était au départ juste pour avoir la date d'enregistrement dans le postbit sous la forme 'mai' au lieu de 'may'. Il n'y avait pas d'autre ambition.
De plus dans la verson 1.4, ils utilisent la fonction "adodb_date()" mais je ne connais pas bien son rôle...
Info : http://phplens.com/phpeverywhere/adodb_date_library


RE: Pour avoir toutes les dates en français partout dans le forum - Sword91 - 27-12-2008

j'ai remis par défaut car je trouve pas mais dans ces cas la, à quoi sert la traduction dans global.lang.php (inc\languages\french):
Code PHP :
$l['month_1'] = "Janvier";
$l['month_2'] = "Février";
$l['month_3'] = "Mars";
$l['month_4'] = "Avril";
$l['month_5'] = "Mai";
$l['month_6'] = "Juin";
$l['month_7'] = "Juillet";
$l['month_8'] = "Août";
$l['month_9'] = "Septembre";
$l['month_10'] = "Octobre";
$l['month_11'] = "Novembre";
$l['month_12'] = "Décembre";

$l['sunday'] = "Dimanche";
$l['monday'] = "Lundi";
$l['tuesday'] = "Mardi";
$l['wednesday'] = "Mercredi";
$l['thursday'] = "Jeudi";
$l['friday'] = "Vendredi";
$l['saturday'] = "Samedi";
$l['short_monday'] = "Lun";
$l['short_tuesday'] = "Mar";
$l['short_wednesday'] = "Mer";
$l['short_thursday'] = "Jeu";
$l['short_friday'] = "Ven";
$l['short_saturday'] = "Sam";
$l['short_sunday'] = "Dim"
elle sert à rien?


RE: Pour avoir toutes les dates en français partout dans le forum - spyto - 28-12-2008

Mai si, ça c'est utile et heureusement !!!

Si tu remontes au début de la discussion, tu verras que le seul but était au départ d'afficher le mois d'enregistrement abrégé en fr dans le volet de l'auteur d'un post.

ex. "mai 2008" au lieu de "may 2008"
Regarde là :
http://www.mybb.fr/showthread.php?tid=323&pid=1718#pid1718

C'est tout !


RE: Pour avoir toutes les dates en français partout dans le forum - Sword91 - 30-12-2008

ok, merci pour les réponses.


RE: Pour avoir toutes les dates en français partout dans le forum - Hellus - 07-02-2009

J'ai mis la fichier functions.php ce que ta mis spyto et faire le truc dans le panel admin mais sa met l'heure 22:24 au lieux de 23:24.


RE: Pour avoir toutes les dates en français partout dans le forum - iParadise - 09-02-2009

Merci, c'est l'heure fr maintenant Tongue

Décidément vous m'aider beaucoup ! Smile


RE: Pour avoir toutes les dates en français partout dans le forum - I_Am_The_King_In_Personn_So_? - 26-02-2009

Si je veux remplacer par le fichier en pièce jointe ça me fait un beau foirage du forum :

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1146 - Table 'mondenews.mybb_mybb_moderators' doesn't exist
Query:
SELECT COUNT(*) as count FROM mybb_mybb_moderators WHERE uid=1 LIMIT 1


 Utilitaire de traduction fourni par Regentronique