我安装了作曲家:
"jms/i18n-routing-bundle": "dev-master"
和
"jms/translation-bundle": "1.1.*"
然后我将它们添加到AppKernel文件
new JMS\I18nRoutingBundle\JMSI18nRoutingBundle(),
new JMS\TranslationBundle\JMSTranslationBundle(),
之后我在config.yml
的末尾添加了这个jms_i18n_routing:
default_locale: en
locales: [de, en]
strategy: prefix
最后,我只使用简单的控制器。
namespace Comflex\W2Bundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Comflex\W2Bundle\Models;
class HomeController extends Controller
{
public function indexAction(Request $request)
{
$session = $request->getSession();
$user = NULL;
if($session->get('user')!== NULL){
$user = $session->get('user');
}
$request->getSession()->set('_locale', 'en');
$locale = $request->getLocale();
return $this->render(
'ComflexW2Bundle:Home:index.html.twig',
array(
'user' => $user,
'locale' => $locale,
'authFormPlaceholder' => array(
'login' => $this->get('translator')->trans('LOGIN'),
'password' => $this->get('translator')->trans('PASSWORD'),
)
)
);
}
}
内包routing.yml
comflex_w2_home:
path: /
defaults: { _controller: ComflexW2Bundle:Home:index}
和两个包含翻译数据的文件(message.de.yml
和message.en.yml
)
当我转到http://localhost/symfony/web/app_dev.php/de/
或http://localhost/symfony/web/app_dev.php
时,两种翻译都是正确的,但当我将/en
添加到网址时,我会得到No route found for "GET /en"
。怎么解决?如何在每次丢失时添加/en
或/de
(取决于用户语言值)?
示例:http://localhost/symfony/web/app_dev.php
- >用户语言为英语时的http://localhost/symfony/web/app_dev.php/en
或当语言为德语时为http://localhost/symfony/web/app_dev.php/de
。
答案 0 :(得分:1)
如果更改jms_i18n设置的策略,则需要手动清除缓存。所以我认为它仍在使用 prefix_except_default 而不仅仅是前缀
醇>
front.nolang:
pattern: /
defaults: { _controller: AppBundle:Default:nolang }
options: { i18n: false }
front.index:
pattern: /
defaults: { _controller: AppBundle:Default:index }
options: { i18n: true }
这有两条不同的路线,第一条(只是/)会用这样的东西重定向到正确的路线
public function nolangAction(Request $request){ $locale = $request->getLocale(); //...add your checks here return $this->redirectToRoute('front.index',['_locale' => $locale]); }
PS。我很久以前就这么做了所以我不确定现在一切正常,请确认