web-dev-qa-db-fra.com

Changer le numéro de date dans une autre langue/script?

Auparavant, je pouvais changer les numéros de la date et de l'heure (en un système de nombres et de dates d'une autre langue, comme le khmer) pour chaque message en utilisant un script comme celui-ci dans mon functions.php:

function KhmerNumDate ($text) {
$text = str_replace('1', '១', $text);
$text = str_replace('2', '២', $text);
$text = str_replace('3', '៣', $text);
$text = str_replace('4', '៤', $text);
$text = str_replace('5', '៥', $text);
$text = str_replace('6', '៦', $text);
$text = str_replace('7', '៧', $text);
$text = str_replace('8', '៨', $text);
$text = str_replace('9', '៩', $text);
$text = str_replace('0', '០', $text); 
return $text;
}


add_filter('date', 'KhmerNumDate');
add_filter('the_date', 'KhmerNumDate');
add_filter('the_time', 'KhmerNumDate');

Mais maintenant cela ne fonctionne pas - mon code est-il bon? Le code serait-il différent selon le thème que j'utilise (j'utilise actuellement un thème enfant modifié de Twenty-Twelve)?

2
Nathan

Il s’est avéré que c’était à cause de la façon dont le thème Vingt Douze (pour faciliter la traduction ...).

La date pour les messages dans Twenty Twelve est préparée par une fonction dans functions.php appelée twentytwelve_entry_meta()

Donc pour remplacer/traduire les nombres dans la date, je cherche la ligne avec $date= dans la fonction twentytwelve_entry_meta() (ou, de préférence, je réplique la fonction twentytwelve_entry_meta() dans un enfant functions.php comme je l'ai fait):

$date = sprintf( '<a href="%1$s" title="%2$s" rel="bookmark"><time class="entry-date" datetime="%3$s" pubdate>%4$s</time></a>',
        esc_url( get_permalink() ),
        esc_attr( get_the_time() ),
        esc_attr( get_the_date( 'c' ) ),
        esc_html( get_the_date() )

    );

    //my added code - the_curlang() is used with the xili-language plugin, it returns the current language of the page

$languagedate = the_curlang();

if ( $languagedate == 'km_kh' ) {
$date = str_replace('1', '១', $date);
$date = str_replace('2', '២', $date);
$date = str_replace('3', '៣', $date);
$date = str_replace('4', '៤', $date);
$date = str_replace('5', '៥', $date);
$date = str_replace('6', '៦', $date);
$date = str_replace('7', '៧', $date);
$date = str_replace('8', '៨', $date);
$date = str_replace('9', '៩', $date);
$date = str_replace('0', '០', $date); 
}

Ensuite, tout va bien!

Je ne suis pas un grand programmeur, mon code n'est peut-être pas la meilleure option, mais au moins, cela fonctionne.

2
Nathan

S'il vous plaît essayez de cette façon:

Modifiez la date, la_date, le_heure en get_date, get_the_date, get_the_time.

function KhmerNumDate ($text) {
    $text = str_replace('1', '១', $text);
    $text = str_replace('2', '២', $text);
    $text = str_replace('3', '៣', $text);
    $text = str_replace('4', '៤', $text);
    $text = str_replace('5', '៥', $text);
    $text = str_replace('6', '៦', $text);
    $text = str_replace('7', '៧', $text);
    $text = str_replace('8', '៨', $text);
    $text = str_replace('9', '៩', $text);
    $text = str_replace('0', '០', $text); 
    return $text;
    }


add_filter('get_date', 'KhmerNumDate');
add_filter('get_the_date', 'KhmerNumDate');
add_filter('get_the_time', 'KhmerNumDate');
3
haksrun

Je voudrais suggérer d’utiliser une fonction intégrée de Wordpress pour votre besoin spécifique qui est date_i18n($date_format, $time, $gmt) . Il suffit de passer le format php date() et la variable timestamp et Wordpress afficheront la date dans votre langue (la langue définie dans wp-config.php).

Exemple de la page du codex:

echo date_i18n(get_option('date_format') ,strtotime("11/15-1976")); 
1
Ahmad M