我的应用程序更喜欢
de
作为 locale 显示数字,如 1.234.567,89 而不是 1,234,567.89(或 1234567,89 而不是 1234567.89)。
所以我改变了
config.yml
中的本地参数:
parameters:
locale: de
此外,我使用 NumberType 来生成我的表单字段:
class MyFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('myNumber', NumberType::class, [
'label' => 'Tax [EURO]',
'required' => false,
'scale' => 2,
'attr' => array(
'min' => 0,
'max' => 9999.99,
'step' => 0.01,
),
]);
}
}
现在,myNumber 的值在生成的 HTML5 输入字段中显示为德语格式的数字,并且该字段既不工作也不显示任何数字。如果我将语言环境改回
en
一切工作正常。
IMO html5 输入字段需要填写英文格式的数字。但我怎样才能不以德语输出数字呢?
对于语言环境
de
,该字段不工作。尽管值属性已使用德语格式的数字正确填充,但该值未显示在生成的输入字段中:<input type="number" value="1234567,89">
使用语言环境
en
现场工作:<input type="number" value="1234567.89">
有趣的事实:我的浏览器(Firefox 45.9.0 和 Google Chrome v54.0.2840.71,debian/64 位)检测我计算机的区域设置de,并将数字显示为德语格式的数字,即使我选择应用程序的区域设置为
en
(仅限类型为 number
的输入字段)
添加 lang 属性
<html lang="{{ app.request.locale }}">
没有帮助。
非常感谢!
解决了问题...不要将 symfony 的
NumberType
用于 HTML5 类型的 number
输入元素!
改为使用常见的
TextType
表单类型
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('myNumber', TextType::class, [...]);
}
并通过模板添加属性
type="number"
。例如,使用 Twig 引擎,您可以使用以下代码:
{{ form_widget(form.myNumber, {'type':'number', 'lang': app.request.locale}) }}
这是老问题,但还没有正确答案,问题仍然存在。
从 Symfony 4.3 开始,引入了选项“html5”。默认为“False”,但如果设置为 true,HTML 输入将呈现为本机 HTML5 type="number" 表单。 https://symfony.com/doc/4.x/reference/forms/types/number.html#input
所以在你的情况下:
$builder->add('myNumber', NumberType::class, [
'label' => 'Tax [EURO]',
'html5' => true,
'required' => false,
'scale' => 2,
'attr' => array(
'min' => 0,
'max' => 9999.99,
'step' => 0.01,
),
]);
问候
你可以尝试设置 html lang 属性
<html lang="de">
但我认为你应该使用模式属性而不是数字,因为你不能依赖浏览器的决定,请查看这篇文章https://ctrl.blog/entry/html5-input-number-localization
喜欢
<input type="number" pattern="[0-9]+([,\.][0-9]+)?"
允许使用逗号和点