变量.yml中的翻译

时间:2017-03-01 09:06:15

标签: symfony translation

我怎样才能在variable.yml中翻译? 主题 Hello

的翻译
    notification:
        agency.dpae.error:
            mail:
                subject: "Hello %name%" # translation subject
                template: "client/mail/dpae_error.html.twig"
                log:
                    type: TYPE_DPAE
                    from: FROM_AGENCY

messages.fr.yml

salut: "Hello"
namespace Di\NotificationBundle\Manager;

      class SMSManager
      { 
       $test= 'salut'
       $name= 'fabien'
       // translation salut to Hello  
       // display hello fabien
      }

2 个答案:

答案 0 :(得分:1)

你应该没有翻译而是翻译的关键:

/sbin/reboot

并在使用时翻译 鉴于notification: agency.dpae.error: mail: subject: salut # translation subject 是parameters.yml的一部分,您可以使用

获取值
notification

然后您必须在翻译文件中定义翻译

$subject = $this->container->getParameter('notification')["agency.dpae.error"]["mail"]["subject"];

然后使用翻译器翻译

salut: "Hello %name%"

这里的要点是您将拥有不同的翻译文件,其中将使用相同密钥的不同翻译。因此,您必须将翻译存储在public function sendAction() { $name= 'fabien'; $subject = $this->container->getParameter('notification')["agency.dpae.error"]["mail"]["subject"]; // salut $subject = $this->get('translator')->trans($subject,['%name%' => $name]); echo $subject; // "Hello fabien"; } 文件中,而在配置选项中,您应该使用翻译中的密钥。

答案 1 :(得分:1)

您应该在翻译yaml文件中使用消息占位符:

notification:
    agency.dpae.error:
        mail:
            subject: salut %key% translation subject

并将翻译服务作为依赖项传递给您的类:

  class SMSManager
  { 

public function __construct(
    TranslatorInterface $translator
) {
    $this->translator = $translator;
}

定义为:

acme_sms_manager:
    class: SMSManager
    arguments:
        - '@translator'

并使用如下:

$translated = $this->translator->trans(
    'notification.agency.dpae.error.mail.subject',
    array('%key%' => 'Fabien')
);

PS:如果翻译文件的名称是variable.yml,则应将目录作为第三个参数传递,例如:

$translated = $translator->trans(
    'notification.agency.dpae.error.mail.subject',
    array('%key%' => 'Fabien'),
    'variable'
);

希望这个帮助