我的项目是多语言的,我还远未完成,但到目前为止,我的所有树枝模板都使用 trans 过滤器。
现在在构建表单时,我希望我的标签也能被翻译,到目前为止,这是几个formbuilder类中的一个,问题是:我应该在这里或在树枝模板内设置标签的值,这样我就可以再次使用twig'trans'过滤器?
<?php
namespace MG\AdminBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class CustomersHomesType extends AbstractType
{
private $customersId = null;
public function __construct($customersId){
$this->customersId = $customersId;
;
}
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('customers_id', 'hidden', array('data'=>$this->customersId,'required'=>true))
->add('name', 'text', array('label'=>'Name:','required'=>true))
->add('streetAddress1', 'text', array('label'=>'Street Address:','required'=>true))
->add('streetAddress2', 'text', array('label'=>'Street Address:','required'=>false))
->add('city', 'text', array('label'=>'City:','required'=>true))
->add('state', 'text', array('label'=>'State:','required'=>true))
->add('zipcode', 'text', array('label'=>'Zip Code:','required'=>true))
->add('type', 'choice', array(
'expanded'=>false,
'label'=>'Address Type:',
'choices' => array('billing' => 'Billing Address ', 'work' => 'Work Address ', 'shipping'=>'Shipping Address '),
'required' => true,
))
->add('subdivision', 'text', array('label'=>'Subdivision:','required'=>false))
->add('directions', 'textarea', array('label'=>'Directions Or Comments:','required'=>false))
->add('phone', 'text', array('label'=>'Phone #1:','required'=>false))
->add('phone2', 'text', array('label'=>'Phone #2:','required'=>false))
->add('save', 'submit', array('label'=>'Save'))
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'MG\AdminBundle\Entity\CustomersHomes'
));
}
/**
* @return string
*/
public function getName()
{
return 'mg_adminbundle_customershomes';
}
}
答案 0 :(得分:2)
漫长的一天回答你的问题......
在表单中添加标签但使用翻译的最佳位置。
以你的形式......
->add('blah', 'text', array(
... etc ...
'label' => 'vendor.bundle.field.label',
// For bundle named Vendor\Bundle
)
然后在您的翻译文件中(位于`Resources / translations / messages。[locale]。[filetype](参见http://symfony.com/doc/current/book/translation.html)(这是YAML格式)
vendor:
bundle:
field:
label: the label that you wanted to show
field2:
biscuits: you can call it what ever you want
通过这种方式,你可以制作一堆翻译文件,然后让你的网站多语言(提供文件在那里,它会回溯到你的设置区域设置或其他方式),而不是在日期的后期挖掘编辑实际文本。此外,您只需要稍后更新一个文件夹(或文件夹组Resources/translations
),而不是编辑实际的班级数据。
同样的系统也适用于任何类型的验证,但这些转换需要放在Resources/translations/validators.[locale].[filetype]
中。还是非常方便。
如果它们没有立即显示,请尝试清除缓存。