我正在尝试翻译我的平台。首先,我做了一个简单的布局来尝试反射功能。当我确定它时,我将为真实情况做出准备。你可以看到控制器,index.html.twig,config.yml,messages.es和messages.en:
....
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Translation\Translator;
class DummyController extends Controller
{
/**
* @Route("/prova",name="role_public_dummy")
* @Template()
*/
public function indexAction(Request $request)
{
//$locale = $request->getLocale();
$request=$this->getRequest();
$locale = $request->getPreferredLanguage();//catching browser language
$request->setLocale($locale);
$this->get('session')->set('_locale', $locale);
return array();
}
}
index.html.twig
{% trans %}index.1{% endtrans %}
config.yml
framework:
#esi: ~
translator: { fallback: "%locale%" }
secret: "%secret%"
router:
resource: "%kernel.root_dir%/config/routing.yml"
strict_requirements: ~
form: ~
csrf_protection: ~
validation: { enable_annotations: true }
templating:
engines: ['twig']
#assets_version: SomeVersionScheme
default_locale: "%locale%"
trusted_hosts: ~
trusted_proxies: ~
session:
# handler_id set to null will use default session handler from php.ini
handler_id: ~
fragments: ~
http_method_override: true
messages.es
index.1: "CASA"
messages.en
index.1: "HOME"
所以,我不明白为什么symfony在使用'trans'函数时总是使用locale'en'。它就像它没有捕获会话的区域设置。
答案 0 :(得分:0)
您正尝试将区域设置设置为Request
对象,但在控制器中它对Translator
服务没有任何影响,因为它已经在之前配置过。
我想您应该尝试直接为Translator
服务设置区域设置,或者创建单独的操作,您只需将区域设置设置为会话并重定向到其他操作。