Symfony 3获得所有可用的语言环境

时间:2017-06-27 21:50:34

标签: symfony-3.3

在Symfony 3中获取所有可用的语言环境时遇到一些问题。 我们的想法是创建一个自定义语言切换器。

我有

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

我可以在会话区域设置中获取请求的区域设置或用户。 但是我如何在Twig中最终获得Controller of Service中的所有parameters.app.locales?所以我可以像en | fr | ru那样使用ar数组。

感谢。

2 个答案:

答案 0 :(得分:0)

由于您将语言环境指定为参数,因此可以根据所需位置检索参数值:

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

答案 1 :(得分:0)

在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中定义