【问题标题】:display month name in french in php?在php中以法语显示月份名称?
【发布时间】:2019-11-20 23:27:32
【问题描述】:

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

问题陈述:

我想知道我应该在 Line A above 的上面的 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 行仍然返回英文。

【问题讨论】:

  • @GufranHasan 不是真的。由于 WordPress 框架,这个问题有不同的答案,这些答案更适用于这个特定的实例。
  • 但也使用PHP函数strftimesetlocale
  • 是的,WordPress 内部有过滤器有时会干扰基于日期时间的功能。还应应用其他标准以适应您正在使用的框架。
  • 首先,date_format 不使用语言环境。输出总是英文的,所以你需要使用另一种方法

标签: php wordpress date locale french


【解决方案1】:

使用 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】:

    您应该使用intl 扩展名:

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

    列出了 setPattern 的 Disponible 格式 here

    【讨论】:

    • 你在吗?
    • 页面在这一行抛出错误echo $formatter-&gt;format($ts);
    • 你在吗?告诉我。
    • 它是一个 wordpress 网站。它显示Error Rendering Page。但它工作正常,直到这条线$formatter-&gt;setPattern('MMMM d HH:mm');
    • 当我使用这个echo $formatter-&gt;format($ts); 它不起作用。
    【解决方案3】:

    假设您网站的基础语言是法语,您可以像这样使用内置的 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) );
    

    【讨论】:

    • 我需要在此处进行哪些更改? echo esc_html(date_format($ts, 'F j H:i'))
    • echo date_i18n(esc_html(date_format($ts, 'F j H:i'))) ?告诉我。
    • @flash 您可以使用echo date_i18n( 'F j H:i', $ts );echo esc_html(date_i18n( 'F j H:i', $ts )); 替换该行
    • 它返回空白。
    • @flash 你能确认$ts 正在输出一个实际的时间戳吗?如果您将代码替换为echo date_i18n( 'F j H:i', '1562838798' );,它会输出今天的日期吗?
    【解决方案4】:

    来自phpdoc的参考

    注意: 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
    

    【讨论】:

      【解决方案5】:

      解决问题:

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

      【讨论】:

      • date() 永远不会听语言环境。但是,strftime() 会。 :)
      • @Qirel 我按照the PHP Manual 中的建议尝试了 strftime() 和 setlocale()。我和OP有同样的问题,它没有用。这个,会的。
      【解决方案6】:

      来自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().
      

      【讨论】:

        猜你喜欢
        • 2023-03-24
        • 2015-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-24
        • 2023-03-20
        相关资源
        最近更新 更多