奏鸣曲:带参数的翻译

时间:2016-03-07 15:44:29

标签: symfony sonata-admin

我似乎无法像在普通的symfony控制器中一样使用Sonata中的变量进行翻译。

在我的控制器中:

$this->setSonataFlashSuccess(
    $this->get('translator')->trans('flash_create_success', [
        '%link%' => 'abcd',
        '%id%' => '1234'
    ])
);

我的模板:

{{ message|trans|raw }}

我的翻译文件' SonataAdminBundle.yml':

flash_create_success: Created with success: <a href="%link%">#%id%</a>

呈现的HTML:

Created with success: <a href="%link%">#%id%</a>

所以翻译工作但不是替换表达式Link和Id。索纳塔的翻译有什么特别之处吗?在应用程序的其余部分,一切正常。

1 个答案:

答案 0 :(得分:0)

当您撰写翻译文件时,您必须使用与原始文件不同的名称(例如admin_messages.[langage].yml),否则将使用原始SonataAdminBundle.[locale].yml

因此,您应该在包中创建一个文件,如:

# YourBundle/Resources/translations/admin_messages.en.yml`
flash_create_success: Created with success: <a href="%link%">#%id%</a>

并在您的控制器中指定它:

$this->get('translator')->trans(
    'flash_create_success', 
    array(
        '%link%' => 'abcd',
        '%id%' => '1234'
    ), 
    'admin_messages', // By default looks for a "messages.[_locale].yml"
);

请注意,您不需要在模板中再次翻译该消息,因为它已在您的控制器中翻译过。