我正在开发一个多国多语言应用程序,我遇到的问题之一是小数点分隔符和日期格式。我知道 setLocale 方法,但我看到的唯一变化是翻译。我是否必须使用 PHP 的内置 setlocale 方法来正确格式化数字和日期,还是有其他方法?
此外,数字(金钱)存储在数据库 MySQL 中,我应该在表单字段中使用数据转换器并使用语言环境还是由 symfony 自动处理它们?
我正在开发一个多国多语言应用程序,我遇到的问题之一是小数点分隔符和日期格式。我知道 setLocale 方法,但我看到的唯一变化是翻译。我是否必须使用 PHP 的内置 setlocale 方法来正确格式化数字和日期,还是有其他方法?
此外,数字(金钱)存储在数据库 MySQL 中,我应该在表单字段中使用数据转换器并使用语言环境还是由 symfony 自动处理它们?
对于数字格式,有number_format但是您可能必须构建自己的扩展才能使用 NumberFormatter
我建议使用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