Symfony 4如何逐步更改语言

时间:2018-04-03 19:21:17

标签: symfony multilingual

我无法理解页面翻译机制。我保留在yml文件中的特定语言的翻译可以通过两种方式获得翻译:

  1. 在会话中保留当前选定的翻译
  2. 如何更改语言?该文档甚至为您提供了准备好的代码https://symfony.com/doc/current/session/locale_sticky_session.html

    只有在语言变化的哪个阶段?我创建了一个单独的控制器,我使用GET传递参数并在控制器中执行代码?

    $lang = $request->query->get('lang', null);
    if(!is_null($lang)) { 
        request->setLocale($lang);
    }
    return $this->redirect($this->generateUrl('index.index'));
    

    为了不在任何控制器中编写相同的代码,我应该有一个控制器只更改语言并将页面返回到前一个。仅通过重定向返回上一页不会使用新语言传递请求,只有文档中给出的类使用默认语言。

    1. 每次为链接中的页面提供翻译
    2. 我遇到的第一个问题是@Route(" /")主页的默认路由不会传递给我localhost:8000 / en /因为Symfony会查找en控制器,这是语言的选择,而不是控制器。解决方案是提供路径localhost:8000 / index / en但是此时我通过仅提供页面地址来阻止显示页面的可能性。 @Route选项(" / {_ locale}",默认= {" _locale" =" en"})不起作用,我不明白为什么,因为我总是要指定pl / en等来显示语言。

      阅读文档时,我应该执行以下操作:

      1. 配置文件config / packages / translation.yaml
      2. default_locale:' en' < - 指定默认语言 译者:〜 后备:[' en']< - 定义如果您通过_locale提供错误的语言将加载哪种语言

        1. 文件:config / services.yaml参数:locale:' en'
        2. config / translation.yaml文件

          框架: default_locale:' en' 译者:〜

1 个答案:

答案 0 :(得分:-1)

要让您的用户进行本地化工作,您必须遵循以下三个教程: https://symfony.com/doc/current/translation.html https://symfony.com/doc/current/translation/locale.htmlhttps://symfony.com/doc/current/session/locale_sticky_session.html第一个解释了如何设置翻译以及如何使用它们。第二个解释了如何读取当前会话的区域设置,并且应该使用_locale参数来设置路由(作为前缀将是开头的最佳选项)。第三个教程解释了如何使语言环境对用户会话具有粘性(这样用户每次都不必在浏览器中键入正确的URL)。所有这些一起工作,而不是单独的选择。