带有翻译的 Symfony 4,没有通往/没有_locale的路线
Symfony 4 with translations, no route to / without _locale
我创建了一个翻译成英语和法语的 Symfony 4.4.8 项目,所以我按照以下步骤操作:
https://symfony.com/doc/current/translation.html
并设置:
config/packages/translation.yaml
framework:
default_locale: 'fr'
translator:
default_path: '%kernel.project_dir%/translations'
fallbacks: ['en', 'fr']
config/routes/annotations.yaml
controllers:
resource: ../../src/Controller/
type: annotation
prefix: /{_locale}/
requirements:
_locale: fr|en
和一个src/Controller/HomeController.php和
class HomeController extends AbstractController
{
private $session;
public function __construct(SessionInterface $session)
{
$this->session = $session;
}
/**
* @Route("/", name="home")
*/
public function index() {
return $this->render('home/index.html.twig', [
'controller_name' => 'HomeController',
]);
}
我在 translations 文件夹中有翻译文件,当我 运行 localhost:8000/fr 或 localhost:8000/en,运行正常,显示我的home/index.html.twig.
问题是当我 运行 localhost:8000/ 时,它显示默认的 Welcome to Symfony 页面“您看到此页面是因为您尚未配置任何主页 URL。”
sf2 的 是否适用于 sf4?
有人知道怎么解决吗?
我还测试了将 HomeController 中的路由更改为:
@Route("/{_locale}", name="home", defaults={"_locale"="fr"}
但它 returns 异常:
Route pattern "/{_locale}/{_locale}" cannot reference variable name "_locale" more than once.
我猜是错误的路由配置。我不记得我们可以通过在 URL 中添加语言环境代码来设置语言环境的默认行为,所以我猜这是你添加的东西 ;)
Symfony 解析路由的顺序与您声明路由的顺序相同。因此,一种解决方案是导入 2 次相同的路由,但前缀为:
# config/route.yaml
app_front:
type: annotation
resource: '../src/Controller/*.php'
prefix: /
options:
expose: true
app_localized_front:
type: annotation
resource: '../src/Controller/*.php'
name_prefix: localized_
prefix: /{locale}
options:
expose: true
我知道之前的配置有效,但我不知道这是否是更优雅的方式:)
解决方法,添加:
RedirectMatch ^/$ /fr
在我的虚拟主机中(使用 apache2 服务器)
纯 symfony 解决方案应该更好!
我创建了一个翻译成英语和法语的 Symfony 4.4.8 项目,所以我按照以下步骤操作:
https://symfony.com/doc/current/translation.html
并设置:
config/packages/translation.yaml
framework:
default_locale: 'fr'
translator:
default_path: '%kernel.project_dir%/translations'
fallbacks: ['en', 'fr']
config/routes/annotations.yaml
controllers:
resource: ../../src/Controller/
type: annotation
prefix: /{_locale}/
requirements:
_locale: fr|en
和一个src/Controller/HomeController.php和
class HomeController extends AbstractController
{
private $session;
public function __construct(SessionInterface $session)
{
$this->session = $session;
}
/**
* @Route("/", name="home")
*/
public function index() {
return $this->render('home/index.html.twig', [
'controller_name' => 'HomeController',
]);
}
我在 translations 文件夹中有翻译文件,当我 运行 localhost:8000/fr 或 localhost:8000/en,运行正常,显示我的home/index.html.twig.
问题是当我 运行 localhost:8000/ 时,它显示默认的 Welcome to Symfony 页面“您看到此页面是因为您尚未配置任何主页 URL。”
sf2 的
有人知道怎么解决吗?
我还测试了将 HomeController 中的路由更改为:
@Route("/{_locale}", name="home", defaults={"_locale"="fr"}
但它 returns 异常:
Route pattern "/{_locale}/{_locale}" cannot reference variable name "_locale" more than once.
我猜是错误的路由配置。我不记得我们可以通过在 URL 中添加语言环境代码来设置语言环境的默认行为,所以我猜这是你添加的东西 ;)
Symfony 解析路由的顺序与您声明路由的顺序相同。因此,一种解决方案是导入 2 次相同的路由,但前缀为:
# config/route.yaml
app_front:
type: annotation
resource: '../src/Controller/*.php'
prefix: /
options:
expose: true
app_localized_front:
type: annotation
resource: '../src/Controller/*.php'
name_prefix: localized_
prefix: /{locale}
options:
expose: true
我知道之前的配置有效,但我不知道这是否是更优雅的方式:)
解决方法,添加:
RedirectMatch ^/$ /fr
在我的虚拟主机中(使用 apache2 服务器)
纯 symfony 解决方案应该更好!