【问题标题】:Use translations in php not twig, symfony 2 [closed]在 php 中使用翻译而不是 twig,symfony 2 [关闭]
【发布时间】:2013-05-13 15:58:37
【问题描述】:

我正在使用 FOSUserBundle 在 Symfony2 中编写一个应用程序。但是,他们所有的模板都在 Twig 中,但我更喜欢使用 php 模板。

使用翻译文件,他们使用这个:

{{ 'security.login.username'|trans }}

对应本节

security:
    login:
        username: "Username:"
        password: "Password:"
        remember_me: Remember me
        submit: Login

在翻译文件中。我将如何在 php 中编写这个?

【问题讨论】:

  • 您在询问之前是否尝试过搜索?文档中有一个部分称为"translation in templates using php"
  • 我实际上尝试过这个,但是它只是打印出我放在括号中的内容。例如: $this->get('translator')->trans('username') 给我:用户名。不是“用户名:”另外,我尝试按照建议输入:security.login:username,但这也不起作用。所以这就是为什么我要问正确的语法是什么。
  • 如果您发布的 yaml 正确反映了您的翻译文件,那么您应该使用的密钥是:login.username。
  • 但是 yaml 是 weong,因为 twig 示例是正确的
  • 当代码在这里发布时,它以某种方式在 Login 和孩子们之前吃掉了我的空间。就像我之前提到的,它适用于树枝。只是把括号里的内容打印出来的只是php

标签: php symfony translation twig


【解决方案1】:

您知道 FOSUserBundle 中翻译文件的特殊名称吗?例如,它是“FOSUserBundle.en.yml”。文件名遵循message domains 约定。进一步查看捆绑模板,您会看到,它们使用消息域:

{{ 'security.login.username'|trans({}, 'FOSUserBundle') }}

所以你必须在php中使用与翻译服务相同的消息域:

$this->get('translator')->trans('security.login.username', array(), 'FOSUserBundle');

在 PHP 模板中看起来很相似。

<?php echo $view['translator']->trans('security.login.username', array(), 'FOSUserBundle') ?>

默认消息域是messages,如果您从例如messages.en.yml 文件中获取翻译,则可以省略。但是其他所有域都必须交给翻译者。顺便说一句,验证器的翻译必须在 validators.en.yml 文件中。

【讨论】:

  • 谢谢,效果很好。
  • 依赖注入标签是 Symfony 2.6 的 @translator.default@translator 标签现在指的是 LoggingTranslator。所以 $this-&gt;get('translator')-&gt;trans(... 是 Symfony 2.6 的 $this-&gt;get('translator.default')-&gt;trans(...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 2014-12-22
相关资源
最近更新 更多