01-06-2007, 19:54
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:
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
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 !
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:
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().
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().