在admin类里有两个主要目录名称
- SonataAdminBundle:这个目录可以在不同的admin下共享翻译信息。
- messages:这个目录是在当前的admin下使用翻译信息。
在理想状态下,改变messages这个目录,不会影响其他的admin类。
在admin类中的这个目录下,你有两个选项要配置:
-复写$translationDomain属性
1 2 3 4 5 6 |
<?php class PageAdmin extends Admin { protected $translationDomain = 'SonataPageBundle'; // default is 'messages' } |
-注入这个值到容器
1 2 3 4 5 6 7 8 9 |
<service id="sonata.page.admin.page" class="Sonata\PageBundle\Admin\PageAdmin"> <tag name="sonata.admin" manager_type="orm" group="sonata_page" label="Page" /> <argument /> <argument>Application\Sonata\PageBundle\Entity\Page</argument> <argument /> <call method="setTranslationDomain"> <argument>SonataPageBundle</argument> </call> </service> |
一个admin实例化就能够得到translator实例,所以他能够在configureFields方法或者模板中实时翻译信息。
1 2 3 4 5 6 7 8 |
{# the classical call by using the twig trans helper #} {{ 'message_create_snapshots'|trans({}, 'SonataPageBundle') }} {# by using the admin trans method with hardcoded catalogue #} {{ admin.trans('message_create_snapshots', {}, 'SonataPageBundle') }} {# by using the admin trans with the configured catalogue #} {{ admin.trans('message_create_snapshots') }} |
最后的解决方案是最灵活的,因为没有目录参数,所以推荐使用。
2.1 翻译字段标签(labels)
这个Admin bundle有一个定制的表单字段模板。最大的改变就是,原来提供的翻译域,是通过admin实例化或者字段描述去翻译标签。
2.1.1 覆写这个翻译域
这个翻译域(message 目录)能够覆盖 form group或者个体字段。
如果一个翻译域是设置再group层面,那么他就会级联group下的所有字段。
特定的使用扩展(Extensions)来覆写翻译域,这里的扩展和翻译将定义在一个bundle中,但是会实现在不同的admin实例中。
在一个字段中设置翻译域:
1 2 3 4 5 6 7 |
$formMapper ->with('form.my_group') ->add('publishable', 'checkbox', array(), array( 'translation_domain' => 'MyTranslationDomain', )) ->end() ; |
在下面的例子里form group设置了默认翻译域,并可以在form group的字段里也设置一个翻译域:
1 2 3 4 5 6 7 8 |
$formMapper ->with('form.my_group', array('translation_domain' => 'MyDomain')) ->add('publishable', 'checkbox', array(), array( 'translation_domain' => 'AnotherDomain', )) ->add('start_date', 'date', array(), array()) ->end() ; |
2.1.2 设置lable名称
默认,这个label是一个没加工的字段名称。可以从add方法的第三个参数中定义label。
1 2 3 4 5 6 7 8 9 10 11 12 |
class PageAdmin extends Admin { public function configureFormFields(FormMapper $formMapper) { $formMapper ->add('isValid', null, array( 'required' => false, 'label' => 'label.is_valid', )) ; } } |
2.1.3 标签(label)策略
这是另一种玩法能够快速进行原型设计,或者说他能避免花费太多的时间去配置所有字段的label键:签(label)策略。
在默认情况下生成的标签使用一个简单的规则:
isValid => Is Valid
这个AdminBundle附带不同的label键生成策略:
sonata.admin.label.strategy.native
: 默认 – 做可读的字符串isValid
=>Is Valid
- sonata.admin.label.strategy.form_component:从表单组件默认行为
isValid
=>Isvalid
sonata.admin.label.strategy.underscore
: 在前加上“form.label”字段名称的下划线的版本,更名为更加适合翻译令牌isValid
=>form.label_is_valid
sonata.admin.label.strategy.noop
: 不改变字符串isValid
=>isValid
sonata.admin.label.strategy.underscore
会为成为更好的国际化的应用程序sonata.admin.label.strategy.native
将是基于字段名原生(单)语言的应用程序更好。一开始你可以使用native策略最为合适,然后,当应用需要使用到通用的键进行翻译是,配置可以切换到underscore 。
当这个类被注册到容器是这个策略能够迅速配置:
1 2 3 4 5 6 7 8 9 10 11 12 |
<service id= "app.admin.project" class= "AppBundle\Admin\ProjectAdmin" > <tag name= "sonata.admin" manager_type= "orm" group= "Project" label= "Project" label_translator_strategy= "sonata.admin.label.strategy.native" /> <argument /> <argument> AppBundle\Entity\Project </argument> <argument /> </service> |
注意:当前情况下这个label使用Translator。这个策略仅仅以一个快速的方法生成翻译键。这一切都将取决于对项目的要求。
注意:当策略方法被调用,context
(breadcrumb, datagrid, filter, form, list, show等) and type
(usually link or label) 参数传入。例如,你调用起来可能想这样getLabel($label_key, ‘breadcrumb’, ‘link’)