0

我正在开发一个多国多语言应用程序,我遇到的问题之一是小数点分隔符和日期格式。我知道 setLocale 方法,但我看到的唯一变化是翻译。我是否必须使用 PHP 的内置 setlocale 方法来正确格式化数字和日期,还是有其他方法?

此外,数字(金钱)存储在数据库 MySQL 中,我应该在表单字段中使用数据转换器并使用语言环境还是由 symfony 自动处理它们?

4

3 回答 3

2

查看Twig International 扩展

对于数字格式,有number_format但是您可能必须构建自己的扩展才能使用 NumberFormatter

于 2013-06-30T12:25:33.443 回答
2

我建议使用PHP intl创建自定义 Twig 扩展。你可以看看我对类似问题的回答

namespace Acme\Bundle\DemoBundle\Twig;

class IntlExtension extends \Twig_Extension
{

    public function getFilters()
    {
        return array(
            new \Twig_SimpleFilter('intl_day', array($this, 'intlDay')),
            new \Twig_SimpleFilter('intl_number', array($this, 'intlNumber')),
        );
    }

    // Other methods…

    /**
     * NULL locale cause load locale from php.ini
     */
    public function intlNumber($number, $locale = NULL)
    {
        $fmt = new \NumberFormatter($locale, \NumberFormatter::DECIMAL);
        return $fmt->format($number);
    }

    public function getName()
    {
        return 'intl_extension';
    }
}

然后在您的 Twig 模板中,您可以使用:

{{ entity.number_value|intl_number(app.request.locale) }} 

或者如果你使用 Symfony < 2.1app.session.locale

于 2013-07-01T07:03:54.327 回答
0

表格中的数字和金钱

对于表单字段中的数字和货币,symfony 已经有一个数字货币表单类型,它们根据区域设置处理小数点和分组。

输出数字和日期格式

通常,您使用日期过滤器格式化日期(在 twig 中),mydate|date("m/d/Y")但您可以为完整的 twig 环境设置它,因此您只需调用mydate|date. 但是,仅当区域设置要求对于整个应用程序是静态的而不是动态地基于用户区域设置时,才建议这样做。为此,您应该考虑@jkucharovic 和@Kris 发布的树枝扩展。

于 2013-06-30T12:30:45.870 回答