3

我正在编写如下所示的 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

问题陈述:

我想知道我应该在上面A 行的 php 代码中进行哪些更改,以便当页面为法语时,它应该以法语返回日期。

这是我尝试过的,但它仍然以英语返回日期

<?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 行仍然返回英文。

4

6 回答 6

4

您应该使用国际扩展名:

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

echo $formatter->format($ts);

此处列出了 setPattern 的可分配格式

于 2019-07-16T15:58:23.767 回答
3

使用 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 但您可以阅读文档)

或使用碳包

本地化http://carbon.nesbot.com/docs/#api-localization

Carbon::setLocale('fr');
Carbon::yesterday()-> diffForHumans();
于 2019-07-11T09:29:28.890 回答
2

假设您网站的基本语言是法语,您可以像这样使用内置的 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) );
于 2019-07-11T09:30:46.563 回答
1

来自 php文档的参考

注意: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
于 2019-07-11T09:33:25.713 回答
0

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().
于 2019-07-19T14:01:26.733 回答
0

绕过这个问题:

<?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() 进程并遇到了与您相同的问题。打印出来的还是英文的。这可能是一个“老派”的解决方案,但它很简单,而且很有效。

于 2019-07-17T06:19:30.980 回答