Silex:翻译在 Twig 中不起作用
Silex: translation not working in Twig
目前,我使用 PHP 微框架 Silex 开发网站。现在我尝试使用“TranslationServiceProvider”将我的网站翻译成不同的语言。为此,我设置了“locale”参数:
$app->register(new Silex\Provider\TranslationServiceProvider(), array(
'locale' => 'pt'
));
然后,在我的控制器中,我调用函数 "setLocale",如下所示:
$app['translator']->setLocale('it');
现在,如果我总是在我的控制器中显示翻译结果,它工作正常:
$app['translator']->trans("hello"); // return "Buongiorno"
$app['translator']->getLocale(); // return "it"
但是,如果我在模板 Twig 中调用相同的函数,翻译将不起作用:
{{ app.translator.trans('hello') }} // return: "Olá"
{{ app.request.locale }} // return: "pt"
所以,我不明白:翻译在我的控制器中工作正常,但是当我想在 Twig 中访问翻译时,没有任何反应。
你知道发生了什么事吗?
终于,我找到了解决问题的方法。在我的 "app.php" 文件中,我添加了以下代码:
$app->before(function () use ($app) {
if ($locale = $app['request']->get('lang') or $locale = $app['request']->getSession()->get('_locale')) {
$app['locale'] = $locale;
$app['request']->setLocale($locale);
}
});
然后,我在控制器中编写了一个函数来更改语言:
public function changeLanguageAction(Request $request, Application $app, $language)
{
$app['request']->getSession()->set('_locale', $language);
return $app->redirect($app["url_generator"]->generate('index'));
}
现在,当我调用 "changeLanguage" 函数时,所有的翻译工作正常。
我不知道这个解决方案是否是一个好的做法,但它确实有效...
目前,我使用 PHP 微框架 Silex 开发网站。现在我尝试使用“TranslationServiceProvider”将我的网站翻译成不同的语言。为此,我设置了“locale”参数:
$app->register(new Silex\Provider\TranslationServiceProvider(), array(
'locale' => 'pt'
));
然后,在我的控制器中,我调用函数 "setLocale",如下所示:
$app['translator']->setLocale('it');
现在,如果我总是在我的控制器中显示翻译结果,它工作正常:
$app['translator']->trans("hello"); // return "Buongiorno"
$app['translator']->getLocale(); // return "it"
但是,如果我在模板 Twig 中调用相同的函数,翻译将不起作用:
{{ app.translator.trans('hello') }} // return: "Olá"
{{ app.request.locale }} // return: "pt"
所以,我不明白:翻译在我的控制器中工作正常,但是当我想在 Twig 中访问翻译时,没有任何反应。
你知道发生了什么事吗?
终于,我找到了解决问题的方法。在我的 "app.php" 文件中,我添加了以下代码:
$app->before(function () use ($app) {
if ($locale = $app['request']->get('lang') or $locale = $app['request']->getSession()->get('_locale')) {
$app['locale'] = $locale;
$app['request']->setLocale($locale);
}
});
然后,我在控制器中编写了一个函数来更改语言:
public function changeLanguageAction(Request $request, Application $app, $language)
{
$app['request']->getSession()->set('_locale', $language);
return $app->redirect($app["url_generator"]->generate('index'));
}
现在,当我调用 "changeLanguage" 函数时,所有的翻译工作正常。
我不知道这个解决方案是否是一个好的做法,但它确实有效...