在 Smarty 中将月份名称从其他语言更改为英语

Change month name from other language to english in Smarty

如何在 Smarty 中将月份名称从当前语言环境(波兰语 PL)更改为英语?

我有这个

 {$product->specificPrice.to|date_format:'%d %B %Y %H:%M:%S'}

这给了我

 17 maj 2015 00:00:00

"maj" 在波兰语中表示 May,我想要这个标记:

 17 May 2015 00:00:00

您可能希望在 php 代码中为 time/date 格式设置语言环境:

    setlocale(LC_TIME, en_US.utf8);

如果您只想在模板中的少数地方输出英文日期并保持 time/date 语言环境波兰语,您应该编写自定义 Smarty 修饰符并使用它以自定义格式输出日期。

不是最好但简单的方法是在自定义修饰符中重新使用 smarty 的 date_format,如下例所示(考虑 Smarty 3):

    class Smarty_Extended extends Smarty
    {
        private $_locale;

        public function __construct($defaultLocale)
        {
            parent::__construct();

            $this->_locale = $defaultLocale;
            $this->loadPlugin('smarty_modifier_date_format');
            $this->registerPlugin('modifier', 'date_format_eng', [$this, 'smarty_modifier_date_format_eng']);
        }

        public function smarty_modifier_date_format_eng($string, $format = null, $default_date = '', $formatter = 'auto')
        {
            setlocale(LC_TIME, 'en_US.utf8');
            $date = smarty_modifier_date_format($string, $format, $default_date, $formatter);
            setlocale(LC_TIME, $this->_locale);
            return $date;
        }
    }

现在您可以在模板中使用 date_format_eng 了:

{$time|date_format_eng}
May 22, 2015