отображать название месяца на французском языке в php? - PullRequest
3 голосов
/ 11 июля 2019

Я работаю над кодом php, как показано ниже:

<?php <time datetime="<?php  echo esc_attr(date_format($ts, 'H:i d-m-Y'))  ?>"
data-timezone="<?php  echo esc_attr($tz_param)  ?>"><?php echo esc_html(date_format($ts, 'F j  H:i')) ?></time> ?> // Line A 

Строка A возвращает следующую дату на веб-странице:

July 10 21:30

print_r($ts) печатает:

DateTime Object
(
    [date] => 2019-07-10 21:30:00.000000
    [timezone_type] => 3
    [timezone] => America/New_York
)
July 10  21:30

Постановка проблемы:

Мне интересно, какие изменения я должен внести в код php выше на Строка A выше так что когда страница на французском , она должна возвращать дату на французском языке.

Это то, что я пробовал , но она все еще возвращаетдата на английском .

<?php if(ICL_LANGUAGE_CODE=='fr'){
setlocale(LC_TIME, 'fr_FR');
?>
<time datetime="<?php echo esc_attr(date_format($ts, 'H:i d-m-Y')) ?>"
   data-timezone="<?php echo esc_attr($tz_param) ?>"><?php echo strftime(esc_html(date_format($ts, 'F j  H:i'))) ?></time> // Line B
<?php } ?>

Строка B выше по-прежнему возвращает английский.

Ответы [ 6 ]

3 голосов
/ 11 июля 2019

Использовать strftime: http://php.net/manual/en/function.strftime.php

<?php
setlocale(LC_TIME, "fr_FR");
echo strftime(" in French %d.%M.%Y and");

(не уверен насчет этого% d.% M.% Y, но вы можете прочитать документацию)

ИЛИ использовать пакет Carbon

Локализация http://carbon.nesbot.com/docs/#api-localization

Carbon::setLocale('fr');
Carbon::yesterday()-> diffForHumans();
2 голосов
/ 11 июля 2019

Предполагая, что основным языком вашего сайта является французский, вы можете использовать встроенную функцию WordPress date_i18n(), например:

echo date_i18n( 'F j  H:i', $ts ); //Assuming $ts is your time stamp

Если $ts на самом деле является объектом даты, сначала вам нужно будет получить метку времени следующим образом:

echo date_i18n( 'F j  H:i', $ts->getTimeStamp() ); //Assuming $ts is a dateTime object

Если вы боретесь с разницей в часовых поясах (т. Е. Возвращаемое время на несколько часов вперед / назад), вам нужно будет объединить функцию с get_date_from_gmt следующим образом:

$correct_date = get_date_from_gmt(date_format($ts, 'Y-m-d H:i:s')); //gets the date in your current timezone
echo date_i18n( 'F j  H:i', strtotime($correct_date) );
1 голос
/ 16 июля 2019

Вы должны использовать расширение intl :

$ts = new DateTime();
$formatter = new IntlDateFormatter('fr_FR', IntlDateFormatter::LONG, IntlDateFormatter::LONG);
$formatter->setPattern('MMMM d  HH:mm');

echo $formatter->format($ts);

Здесь перечислены возможные форматы для setPattern здесь

1 голос
/ 11 июля 2019

Ссылка с php doc

Примечание: Возвращаемое значение setlocale () зависит от системы, в которой работает PHP. Он возвращает именно то, что возвращает системная функция setlocale.

setlocale(LC_ALL, 'fr_FR');

echo strftime("%A %e %B %Y", mktime(0, 0, 0, 12, 22, 1978)); //vendredi 22 d�cembre 1978
0 голосов
/ 19 июля 2019

С http://php.net/manual/en/function.date.php:

To format dates in other languages, you should use the setlocale() and strftime() functions instead of date().
0 голосов
/ 17 июля 2019

обходит проблему:

<?php 
if (date("m", time() ) === "01" ) { print "Janvier"; }
if (date("m", time() ) === "02" ) { print "Février"; }
if (date("m", time() ) === "03" ) { print "Mars"; }
if (date("m", time() ) === "04" ) { print "Avril"; }
if (date("m", time() ) === "05" ) { print "Mai"; }
if (date("m", time() ) === "06" ) { print "Juin"; }
if (date("m", time() ) === "07" ) { print "Juillet"; }
if (date("m", time() ) === "08" ) { print "Août"; }
if (date("m", time() ) === "09" ) { print "Septembre"; }
if (date("m", time() ) === "10" ) { print "Octobre"; }
if (date("m", time() ) === "11" ) { print "Novembre"; }
if (date("m", time() ) === "12" ) { print "Décembre"; }
?>

Я пытался использовать процесс setlocale (), и у меня возникла та же проблема, что и у вас.Распечатка была еще на английском.Это может быть решение «старой школы», но оно простое и работает.

...