symfony2中的自动本地化

时间:2014-09-29 17:12:11

标签: symfony

请查看以下代码:

public function __construct($error_code)
{
    $translator = new Translator('en');
    $translator->addLoader('yaml', new YamlFileLoader());
    $translator->addResource('yaml', dirname(__DIR__).'/Resources/translations/messages.en.yml', 'en');
    $this->setErrorCode($translator->trans($error_code));
}

我是symfony的新手。我创建了一个扩展Exception的类MyProjectExceptions。现在当我必须抛出一个自定义异常时,我调用这个类来获取$ error_code。现在这个$ error_code是另一个类的常量,它的语言环境在MyBundle / Resources / transalations / messages.en.yml中,它将被用作异常消息。

现在我的问题如下:

  • 如何避免addResource,因此可以根据Locale自动添加它并查找字符串?
  • 如何访问此类中的serviceContainer,以便我可以访问会话以设置和获取区域设置或其他服务。
  • 我们也可以设置默认加载器。

在上面的代码中,我正在创建一个Translator类的实例并手动传递' en'。但它应该选择默认语言环境或用户设置语言环境。 我尝试了很多解决方案,但无法获得理想的结果。

任何帮助将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:-1)

您需要将您的课程注册为Symfony服务。阅读文档:http://symfony.com/doc/current/book/service_container.html#creating-configuring-services-in-the-container

之后,您可以在构造函数中注入其他服务(如Translation)。它将使用您已设置的所有参数。

如果您注入翻译服务,它将选择您已设置的参数。例如,如果您在config.yml处为转换程序定义了参数(包括默认语言环境),那么您使用路由中的参数覆盖此语言环境,您将获得使用此语言环境设置的转换程序服务。它将自动使用在适当目录中存放的资源。