【问题标题】:Polish months in date formatting日期格式中的波兰月份
【发布时间】:2013-08-05 22:21:34
【问题描述】:

优美的波兰语在说“2013 年 3 月”(不含日)和“2013 年 3 月 17 日”(含日)之类的话时使用不同的语法来表示月份名称。

将 PHP 的 strftime()%B 结合使用可以为无日情况提供正确的月份名称。如何在 with-day-case 中正确写入日期?我是否必须自己编写代码,或者是否已经为此类情况提供了一些支持?

【问题讨论】:

    标签: php date internationalization


    【解决方案1】:

    IntlDateFormatter,一个国际版的DateFormatter,从PHP5.3开始,如果你打开国际扩展。

    if (version_compare(PHP_VERSION, '5.3.0', '<')) {
        exit ('IntlDateFormatter is available on PHP 5.3.0 or later.');
    }    
    if (!class_exists('IntlDateFormatter')) {
        exit ('You need to install php_intl extension.');
    }
    $polishDateFormatter = new IntlDateFormatter(
        'pl_PL',
        IntlDateFormatter::LONG,
        IntlDateFormatter::NONE
    );
    
    $now = new DateTime("2013-08-06");
    echo $polishDateFormatter->format($now), "\n";
    

    此代码返回我,

    6 sirpnia 2013

    我希望这是正确的。 (我不懂波兰语 ;-)

    您还可以检查 IntlDateFormatter::SHORT、MEDIUM 和 FULL 以在构造函数的第二个参数处获取其他符号。

    【讨论】:

      【解决方案2】:

      你需要两个数组:

      $m_en = array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
      
      $m_pol = array("Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec");
      

      你现在要做的就是:

      $workoutSlug = str_replace($m_en, $m_pol, $input);
      

      输入是您要翻译的输入。

      【讨论】:

        【解决方案3】:

        由于您可能不了解世界上所有的语言,我认为任何语言都需要此类功能,而英语是一个例外,该规则不会改变任何内容。然后我会在格式类上创建,它将根据语言环境提供有效的日期字符串。

        您自己的函数可以实现将月份从Marzec 替换为Marca 的逻辑,因此您存储两个具有适当索引的数组,并根据月份选择数组一中的哪个项目应该替换为array2 的哪个项目返回前输出字符串。

        有时最简单的选择是你能做的最好的。

        【讨论】:

          【解决方案4】:

          如果您正在寻找 php 中的日期格式,请访问:http://php.net/manual/en/datetime.format.php

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-10-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-12-02
            • 2011-09-24
            • 1970-01-01
            相关资源
            最近更新 更多