1. IMPORTANT : Nouvelles mesures de sécurité - 2. Règles pour obtenir de l'aide dans les forums de support - 3. Restrictions des droits pour le groupe "Support suspendu"

Il est obligatoire de respecter les Règles de MyBB.fr : Version abrégée ou Version complète pour obtenir du support sur nos forums.

Les membres ayant un site/forum contrevenant aux règles de MyBB.support seront placés dans le groupe "Support suspendu" et ne bénéficieront plus du support du staff. Nous recommandons aux autres membres d'agir de même. Il ne s'agit pas d'un bannissement, le membre retrouvera son statut "normal" dès que sa situation sera conforme aux règles.

Nouveau : un Wiki en français : plus de détails.
Avant de soumettre votre problème, consultez-le, ainsi que la FAQ, sans oublier le moteur de recherche interne.


Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Pour avoir toutes les dates en français partout dans le forum
Mots-clés » avoir, toutes, dates, français, partout, forum
01-06-2007, 19:54, (Modification du message : 22-05-2008, 10:24 par Le Poulpe.)
#1
Pour avoir toutes les dates en français partout dans le forum
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().


Pièces jointes
.php   functions.php (Taille : 95.61 Ko / Téléchargements : 44)

[Image: spyto.png]
~~ AUCUNE AIDE Par MP, MAIL OU MSN !!!~~
Répondre


Messages dans ce sujet
Pour avoir toutes les dates en français partout dans le forum - spyto - 01-06-2007, 19:54



Utilisateur(s) parcourant ce sujet : 1 visiteur(s)

Contact | MyBB.support | Retourner en haut | Retourner au contenu | Version bas-débit (Archivé) | Syndication RSS
 Utilitaire de traduction fourni par Regentronique