【问题标题】:Symfony 3 get all avaliable localesSymfony 3 获取所有可用的语言环境
【发布时间】:2020-10-26 04:06:45
【问题描述】:

在 Symfony 3 中获取所有可用的语言环境有些困难。 这个想法是创建一个自定义语言切换器。

我有

parameters:
locale: en
app.locales: en|fr|ru

我可以获得请求的语言环境或存储在会话语言环境中的用户。 但是我怎样才能最终在 Twig 中获得 Controller 的服务中的所有 parameters.app.locales 呢?这样我就可以拥有像 en|fr|ru 这样的 ar 数组。

谢谢。

【问题讨论】:

    标签: symfony-3.3


    【解决方案1】:

    因为您将语言环境指定为参数,所以您可以根据需要检索参数值:

    1。作为服务参数:

    通过在服务定义中指定的构造函数参数传递语言环境:

    服务:

    class SomeService {
    
        private $locales;
    
        public function __construct(array $locales)
        {
            $this->locales = $locales;
        }
    
        ...
    }
    

    服务定义:

    ...\Service\SomeService:
        arguments:
            - '%app.locales%'
    

    2。使用服务容器:

    您还可以通过服务容器检索参数:

    $locales = $this->container->getParameter('app.locales');
    

    3。将语言环境传递给 Twig

    通过上述方式获取语言环境后,您可以在渲染模板时将它们作为变量传递,就像普通的 Twig 变量一样:

    return $this->render('some.template.html.twig', [
        'locales' => $locales,
    ]);
    

    4。设置具体的 Twig 参数:

    How to get config parameters in Symfony2 Twig Templates

    【讨论】:

      【解决方案2】:

      刚刚在 Symfony 5 中遇到了这个问题。 好像TranslatorInterface里没有它的方法

      因此,就我而言,最简单的方法是从参数中获取所有值

      $locales = $this->getParameter('app_locales');
      

      就我而言

      app_locales: en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt
      

      在 services.yaml 中定义

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-15
        • 2016-05-08
        • 2013-07-20
        • 2012-12-25
        相关资源
        最近更新 更多