如何在SonataAdminBundle中正确翻译字符串

时间:2015-12-12 03:05:37

标签: php symfony sonata-admin sonata

我正在尝试翻译一些Sonata Admin - 列表页面 - 使用我的包中的.xliff文件的字符串。那些字符串属于我的包而不属于Sonata所以这就是我遵循的步骤:

  • .xliff下创建一个src/Clanmovil/PlatformBundle/Resources/translations/PlatformBundle.es.xliff文件,如下所示:

    <?xml version="1.0"?>
    <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
        <file source-language="en" datatype="plaintext" original="PlatformBundle.en.xliff" >
            <body>
                <trans-unit id="name">
                    <source>name</source>
                    <target>Nombre</target>
                </trans-unit>
                <trans-unit id="description">
                    <source>description</source>
                    <target>Descripción</target>
                </trans-unit>
                <trans-unit id="active">
                    <source>active</source>
                    <target>Activo?</target>
                </trans-unit>
            </body>
        </file>
    </xliff>
    
  • label下设置src/Clanmovil/PlatformBundle/Controller/Admin/CategoryAdmin.php属性,如下所示:

    class CategoryAdmin extends Admin
    {
        ...
    
        // Fields to be shown on lists
        protected function configureListFields(ListMapper $listMapper)
        {
            $listMapper
                ->add('name', null, array(
                    'label' => 'name'
                ))
                ->add('active', null, array(
                    'label' => 'active'
                ));
            ...
        }
    
        ...
    }
    
  • 设置app/config/config.yml如下:

    parameters:
        locale: es
    
    framework:
        #esi:             ~
        translator:      { fallbacks: ["%locale%"] }
        default_locale:  "%locale%"
        ....
    

并且无法正常工作我仍在列表页面上看到nameactive字符串,而我不知道自己错过了什么。我已阅读了几篇帖子thisthis等等。可以给我一些建议吗?

由于前一个问题已经修复了所提供的答案,但这几乎是一样的我决定编辑OP而不是创建一个新的,所以我们走了。请查看SonataAdmin的以下设置:

sonata_admin:
    dashboard:
        groups:
            configuration:
                icon: <i class="fa fa-lg fa-fw fa fa-folder"></i>
                label: configuration
                items:
                    - sonata.admin.category
                    - sonata.admin.command
                    - sonata.admin.alias

这是Clanmovil/PlatformBundle/Resources/config/services.yml的服务定义:

services:
    sonata.admin.alias:
        class: Clanmovil\PlatformBundle\Controller\Admin\AliasAdmin
        tags:
            - { name: sonata.admin, manager_type: orm, group: "Configuration", label: "alias" }
        arguments:
            - ~
            - Clanmovil\PlatformBundle\Entity\Alias
            - ~
    sonata.admin.category:
        class: Clanmovil\PlatformBundle\Controller\Admin\CategoryAdmin
        tags:
            - { name: sonata.admin, manager_type: orm, group: "Configuration", label: "category" }
        arguments:
            - ~
            - Clanmovil\PlatformBundle\Entity\Category
            - ~
    sonata.admin.command:
        class: Clanmovil\PlatformBundle\Controller\Admin\CommandAdmin
        tags:
            - { name: sonata.admin, manager_type: orm, group: "Configuration", label: "command" }
        arguments:
            - ~
            - Clanmovil\PlatformBundle\Entity\Command
            - ~ 

但字符串configurationcommandcategory(目前尚未翻译),请参见下图:

enter image description here

为什么呢?这些翻译与alias翻译在同一个文件中。这可能会发生什么?

1 个答案:

答案 0 :(得分:2)

如果您创建的翻译文件不同于messages,则必须明确指定翻译域。 messages是默认的翻译域。您有两种选择,将PlatformBundle.es.xliff重命名为messages.es.xliff或指定翻译域。例如:

在表单类型中:

...
$builder->add('name', 'text', ['translation_domain' => 'PlatformBundle']);
...

在twig trmplates中:

{{ 'name'|trans({}, 'PlatformBundle') }}

我不知道ListMapper类是什么,但也应该支持(我猜)翻译域。