Nice programing

Symfony 레이아웃에서 _locale 변수를 얻는 방법은 무엇입니까?

nicepro 2020. 11. 25. 21:13
반응형

Symfony 레이아웃에서 _locale 변수를 얻는 방법은 무엇입니까?


2 개 언어로 구성된 사이트에서 Symfony 2로 작업하고 있으며 사용자 로케일 언어에 따라 내 경로의 패턴을 변경하고 싶습니다!

예:

user_login_en:
    pattern:  /en/user/login.html
    defaults: { _controller: SfErrorsAppBundle:User:login, _locale: en }

user_login_fr:
    pattern:  /fr/utilisateur/connexion.html
    defaults: { _controller: SfErrorsAppBundle:User:login, _locale: fr}

템플릿 내부에서 이것은 어렵지 않습니다. 컨트롤러에서 템플릿으로 $ this-> get ( 'session')-> getLocale ()을 전달하면됩니다.

일하려면 내 경로를 호출해야합니다.

$router->generate('user_login_'.$locale, array());

하지만 내 레이아웃 안에는 메뉴와 링크가있는 사이드 바가 있습니다. 그래서 그것을 사용하기 위해 로케일 변수를 얻고 싶습니다! 그래서 제 질문은 간단합니다. "레이아웃"템플릿 안에이 변수를 넣는 방법은 무엇입니까? 그렇지 않으면 언어에 따라 패턴을 변경할 아이디어가 있습니까?

그 이유는 영어 든 프랑스어 든 모든 사용자에게 아름다운 경로를 원하기 때문입니다. 그리고 SEO 이유도 있습니다!


--- 댓글에서 업데이트 ---

Symfony 2.1에서는 다음을 사용해야합니다.

{{ app.request.locale }}

또는

{{ app.request.getLocale() }}

app.request.locale사용 가능하고 설정되지 않은 app.request.defaultLocale경우 반환 됩니다 app.request.locale.


Symfony 2.1은 세션 대신 Request에 "locale"을 저장하므로 다음을 사용해야합니다.

{{ app.request.getLocale() }}

app.session.locale 대신


또한 라우팅을 단순화 할 수 있습니다 (하나의 단일 규칙).

user_login :
    패턴 : /{_locale}/user/login.html
    기본값 : {_controller : SfErrorsAppBundle : User : login}

일부 언어 만 허용하려면 요구 사항을 추가 할 수 있습니다.

user_login :
    패턴 : /{_locale}/user/login.html
    기본값 : {_controller : SfErrorsAppBundle : User : login}
    요구 사항 :
       _locale : fr | en

제 생각에는 이것은 Symfony 버전에 대해 걱정하지 않고 로케일을 자동 감지하는 가장 쉽고 유지 관리 할 수있는 방법입니다 .

{% if not app.session.locale is null %} {# Prior to Symfony 2.1 you must get from session, it will be null if upper #}
    Locale: {{ app.session.locale }}
{% else %} {# With Symfony 2.1 or upper you only can get the locale from request #}
    Locale: {{ app.request.locale }}
{% endif %}

또한 원하는 경우 Twig 템플릿 엔진 에서 표기법과 같은 개체를 사용할 수 있습니다 .

{% if not app.getSession().getLocale() is null %} {# Prior to Symfony 2.1 you must get from session, it will be null if upper #}
    Locale: {{ app.getSession().getLocale() }}
{% else %} {# With Symfony 2.1 or upper you only can get the locale from request #}
    Locale: {{ app.getRequest().getLocale() }}
{% endif %}

자세한 내용은 Symfony 2.1.0 릴리스 정보 를 참조하십시오.

참고 URL : https://stackoverflow.com/questions/6918989/how-to-get-the-locale-variable-inside-in-a-symfony-layout

반응형