【发布时间】:2017-06-19 15:54:02
【问题描述】:
阅读 symfony 3 的文档,我很困惑,我不确定我是否做对了所有事情。这就是我的一个普通控制器开始时的样子:
class IndexController extends Controller
{
/**
* @Route("/", name="index")
*/
public function indexAction(Request $request)
{
$articles = $this->getDoctrine()
->getRepository(Article::class)->findAll();
return $this->render("index.html.twig", array(
'articles' => $articles
));
}
}
我想为多语言添加选项。在 symfony 之前,我看到通过在会话中简单地保存语言以及用于更改它的按钮来做到这一点。在 symfony 中,我添加了一个 translations 文件夹,以及每种语言的文件。
//messages.en.yml
base.menu.1: Home
base.menu.2: Products
base.menu.3: Brands
//messages.bg.yml
base.menu.1: Начало
base.menu.2: Продукти
base.menu.3: Марки
在此之后,我在一些标题中看到我可以在我的路线中添加我的 _locale,如下所示:
@Route("{_locale}/", name="index ")
这实际上奏效了。我可以通过进入 bg/ 或 en/ 来更改主页的语言。
但是语言环境变量没有保存在任何地方。如果我去其他页面,它不知道之前设置了什么语言。因此,我阅读了更多内容,并且可以通过将所有路由保存在 routing.yml 中来解决这个问题,如下所示:
index:
path: /{_locale}/
defaults: { _controller: AppBundle:Index:index }
requirements:
_locale: '%app.locales%'
然后设置我的配置:
parameters:
locale: bg
app.locales: bg|en
framework:
translator: { fallbacks: ['%locale%'] }
所有这些都正常工作,除了我必须将我的路由从他们的控制器移动到 routing.yml。我想问这是否是正确的方法,做所有这一切,因为我不确定,文档不是 100% 清楚的(很可能我只是无法理解),并且找不到任何好的标题.
【问题讨论】:
标签: php symfony multilingual