2016-05-08 27 views
4

我會在我現有的網站添加一些鏈接到不同的語言環境版本。它工作得很好,但它很醜陋^^小枝鏈接到當前的路線,但改變語言環境

<li> 
    <a href="{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge(app.request.query.all|merge({_locale: 'es'}))) }}"> 
     <img src="{{ asset('img/flags/es.jpg') }}" alt="es"> 
    </a> 
</li> 
<li> 
    <a href="{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge(app.request.query.all|merge({_locale: 'fr'}))) }}"> 
     <img src="{{ asset('img/flags/fr.jpg') }}" alt="fr"> 
    </a> 
</li> 

你有做更好的主意嗎?

+3

沒人訪問該網站將看到,不要擔心。 – malcolm

回答

6

您可能需要在很多頁面和/或多個項目中使用。下面是基於我一直在使用一些什麼可能的方式:

# app/config/config.yml 

# ... 
parameters: 
    # ... 
    app_locales: [en, es, fr] 

twig: 
    # ... 
    globals: 
     locales: %app_locales% 
     # ... 

那麼對於拿旗的模板:

{# app/Resources/views/includes/_flags.html.twig #} 

{% set route = app.request.attributes.get('_route') %} 
{% set route_params = app.request.attributes.get('_route_params') %} 
{% set params = route_params|merge(app.request.query.all) %} 

{# You may want to not print a flag/link for current view, the "if" here let you handle it #} 

{% for locale in locales if locale != app.request.locale %} 

    <li> 
     <a href="{{ path(route, params|merge({ _locale: locale })) }}"> 
      <img src="{{ asset('img/flags/' ~ locale ~ '.jpg') }}" alt="{{ locale }}"> 
     </a> 
    </li> 

{% endfor %} 

最後包括在任意視圖國旗:

{# app/Resources/views/base.html.twig #} 

{% include 'includes/_flags.html.twig' %} 
+0

明智的是同樣的事情,但那不是一個壞方法。謝謝。 – rudak

+0

Silex可以做到嗎?我沒有一個config.yml文件...這是我的問題(與50賞金):https://stackoverflow.com/questions/49055253/silex-allow-user-to-change-langage-by-clicking -on-HTML元素和保管-CLE –