2012-10-18 21 views
6

में लोकेल सेट करें मैं अपनी सिम्फनी 2.1 वेबसाइट पर एक भाषा स्विचर रखने की कोशिश कर रहा हूं।सिम्फनी 2.1

मैंने official documentation का पालन किया, अनुवाद फ़ाइलों को सेट किया लेकिन लोकेल को $ request-> setLocale ('en_US') के साथ सेट करना; काम नहीं लग रहा है। कुछ शोध के बाद, मुझे this question मिला जो listener technique के साथ उत्तर की शुरुआत प्रदान करता है।

हालांकि, मैं अभी भी इसे काम करने का प्रबंधन नहीं करता हूं, मैं अपने श्रोता घोषणा के बारे में इतना निश्चित नहीं हूं, इसमें कुछ गड़बड़ है?

मेरे नियंत्रक: config.yml में

public function englishAction(Request $request) 
{ 
    $this->get('session')->set('_locale', 'en_US'); 
    return $this->redirect($request->headers->get('referer')); 
} 

सेवा घोषणा:

services: 
    my_listener: 
     class:  "FK\MyWebsiteBundle\Listener\LocaleListener" 

मेरे मार्ग:

homepage: 
    pattern: /{_locale} 
    defaults: { _controller: FKMyWebsiteBundle:Default:index, _locale: en } 
    requirements: 
     _locale: en|fr|cn 
about: 
    pattern: /{_locale}/about 
    defaults: { _controller: FKMyWebsiteBundle:Default:about, _locale: en } 
    requirements: 
     _locale: en|fr|cn 
+0

आपकी ज़रूरत क्या है? उपयोग के मामले का एक उदाहरण? हो सकता है कि आपको इस श्रोता – webda2l

+0

@ webda2l की आवश्यकता नहीं है, मैं बस आगंतुक को वेबसाइट की भाषा चुनने की अनुमति देना चाहता हूं। आपके उत्तर में कोड काम नहीं कर रहा है, लेकिन मुझे लगता है कि मुझे अपने मार्ग बदलना है, मैं इसके बारे में कुछ और काम करूंगा .. –

+0

क्या मैं श्रोता को सही तरीके से स्थापित कर रहा हूं? क्या मेरे लोकेल लिस्टर को इस तरह बुलाया जाएगा? –

उत्तर

9

YML में LocaleListener की घोषणा (वर्तमान से प्रेरित नए लोकेल लिस्टनर की घोषणा: \ विक्रेता \ symfony \ symfony \ src \ Symfony \ Bundle \ FrameworkBundle \ Resources \ config \ Web.xml)

services: 
    my_listener: 
     class: "FK\MyWebsiteBundle\Listener\LocaleListener" 
     arguments: [%locale%] 
     tags: 
      - { name: kernel.event_subscriber } 

कुछ स्निपेट:

अपने खाके में एक भाषा स्विचर:

{% for locale in ['en', 'fr', 'cn'] %} 
    <li {% if locale == app.request.locale %}class="active"{% endif %}> 
     <a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale' : locale})) }}">{{ locale }}</a> 
    </li> 
{% endfor %} 

एक नियंत्रक से स्थान परिवर्तन के साथ एक पुनर्निर्देशन:

$LocalizedUrl = $this->get('router')->generate(
    $request->attributes->get('_route'), 
    ['_locale' => $locale] + $request->attributes->get('_route_params') 
); 

return new \Symfony\Component\HttpFoundation\RedirectResponse($LocalizedUrl); 
+0

@ webda2I असली काम करने के लिए लगता है। अब जाना है, जब मैं वापस आऊंगा तो अधिक खेलूँगा और शायद जवाब स्वीकार करूँगा क्योंकि यह ठीक काम कर रहा है :) मुझे कोड को समझना निश्चित नहीं है :( –

+0

अच्छा काम करता है क्योंकि मैंने सेवाओं में सेवा ठीक से जोड़ दी है .xml। ​​मेरे नियंत्रक में, मैं इसका उपयोग करता हूं: $ this-> प्राप्त करें ('सत्र') -> सेट ('_ लोकेल', 'en_US'); $ 1-> रीडायरेक्ट ($ request-> शीर्षलेख-> प्राप्त करें (' रेफरर ')); –

+0

ठीक है। वाईएमएल में मूल घोषणा काम करनी चाहिए, लेकिन यदि आप XML. serviceml के साथ एक्सएमएल करते हैं, तो यह बेहतर है। :) – webda2l

0

आप अनुवादक उदाहरण को अपने सिम्फनी कर्नेल कंटेनर से लिंक करना चाहिए:

$this->container->get('translator')->setLocale('fr'); 
संबंधित मुद्दे