Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony] 1.4 Zmiana języka strony
Micchaleq
post
Post #1





Grupa: Zarejestrowani
Postów: 186
Pomógł: 4
Dołączył: 13.10.2009

Ostrzeżenie: (0%)
-----


Witam serdecznie,


Mam pewien problem nie wiem jak to rozwiązać.

Otóż zrobiłem sobie tłumaczenie strony i chciałbym aby uzytkownik miał możliwość wyboru języka ( to normalne )

język ustawiam sobie za pomocą
$this->getUser()->setCulture('en');

aby go zmienić muszę oczywiście podmienić en na inny, ale po tym muszę wyczyścić pamięć.

Jak teraz zrobić tak by po kliknięciu użytkownik widział ten język który chce widzieć?

W sumie to problemem dla mnie jest czyszczenie sama akcja(kliknięcie ) i powrót są oczywiste.

Ten post edytował Micchaleq 14.02.2012, 10:39:19
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
chemik1982
post
Post #2





Grupa: Zarejestrowani
Postów: 91
Pomógł: 13
Dołączył: 20.03.2007
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Ja to rozwiązałem w taki sposób. W app.yml mam zdefiniowane języki:
  1. all:
  2. cultures:
  3. pl:
  4. title: polski
  5. panel_title: polski
  6. image: pl.png
  7. default: true
  8. en:
  9. title: english
  10. panel_title: angielski
  11. image: gb.png
  12. default: false
  13. de:
  14. title: deutsch
  15. panel_title: niemiecki
  16. image: de.png
  17. default: false
  18. ru:
  19. title: русский язык
  20. panel_title: rosyjski
  21. image: ru.png
  22. default: false


Flagi na froncie pokazuję korzystając z komponentu:

  1. public function executeSwitchI18n() {
  2. $this->routing = sfContext::getInstance()->getRouting();
  3. $uri = $this->routing->getCurrentInternalUri();
  4. $pathinfo = $this->routing->parse($this->request->getPathInfo());
  5. unset($pathinfo['module']);
  6. unset($pathinfo['action']);
  7. unset($pathinfo['sf_culture']);
  8. unset($pathinfo['_sf_route']);
  9. $this->pathinfo = $pathinfo;
  10. $this->module = $this->getRequest()->getParameter('module');
  11. $this->action = $this->getRequest()->getParameter('action');
  12. $this->routingName = $this->routing->getCurrentRouteName();
  13. $this->cultures = sfConfig::get('app_cultures');
  14. }


Podam Ci jeszcze routing.yml

  1. homepage:
  2. url: /:sf_culture/
  3. param: { sf_culture: <?php $languages = sfContext::getInstance()->getRequest()->getLanguages(); echo substr(strip_tags($languages[0]),0,2); ?>, module: home, action: index }
  4. requirements: { sf_culture: (?(IMG:style_emoticons/default/tongue.gif) l|en|de|ru) }
  5. send:
  6. url: /wyslij.html
  7. param: { module: home, action: send }
  8. news:
  9. url: /:sf_culture/aktualnosci/:page
  10. param: { module: news, action: index, page: 1 }
  11. requirements: { sf_culture: (?(IMG:style_emoticons/default/tongue.gif) l|en|de|ru) }
  12. news_entity:
  13. url: /:sf_culture/aktualnosci/:page/:slug
  14. param: { module: news, action: item, page: 1 }
  15. requirements: { sf_culture: (?(IMG:style_emoticons/default/tongue.gif) l|en|de|ru) }
  16. download:
  17. url: /:sf_culture/pliki-do-pobrania.html
  18. param: { module: home, action: download }
  19. requirements: { sf_culture: (?(IMG:style_emoticons/default/tongue.gif) l|en|de|ru) }
  20. contact:
  21. url: /:sf_culture/kontakt
  22. param: { module: pages, action: contact }
  23. requirements: { sf_culture: (?(IMG:style_emoticons/default/tongue.gif) l|en|de|ru) }
  24. gallery:
  25. url: /:sf_culture/galeria-zdjec
  26. param: { module: gallery, action: index }
  27. requirements: { sf_culture: (?(IMG:style_emoticons/default/tongue.gif) l|en|de|ru) }
  28. pages:
  29. url: /:sf_culture/:slug
  30. param: { module: pages, action: index }
  31. requirements: { sf_culture: (?(IMG:style_emoticons/default/tongue.gif) l|en|de|ru) }
  32. default_index:
  33. url: /:module
  34. param: { action: index }
  35. default:
  36. url: /:module/:action/*


A widokiem się pobaw (IMG:style_emoticons/default/wink.gif) .
Go to the top of the page
+Quote Post
Micchaleq
post
Post #3





Grupa: Zarejestrowani
Postów: 186
Pomógł: 4
Dołączył: 13.10.2009

Ostrzeżenie: (0%)
-----


Dzięki za szybką odpowiedz.

Czy mógłbyś jeszcze do swojego komponentu dopisać komentaże co robi która linijka bo nie do końca wszystkie te instrukcje rozumiem.
Go to the top of the page
+Quote Post
chemik1982
post
Post #4





Grupa: Zarejestrowani
Postów: 91
Pomógł: 13
Dołączył: 20.03.2007
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Zapoznaj się:
Changing the Culture for a User

Pobaw się trochę. Jeśli Ci nie wyjdzie to napisz z czym masz problem - wtedy postaram się pomóc.
Go to the top of the page
+Quote Post
Micchaleq
post
Post #5





Grupa: Zarejestrowani
Postów: 186
Pomógł: 4
Dołączył: 13.10.2009

Ostrzeżenie: (0%)
-----


Ok konkretne pytanie:

Dlaczego takie coś mi nie działa ?
Czy da się to tak zapisać jak niżej? ( czyszcze cache i ustawiam język ? )

  1. public function executeEnglish(){
  2.  
  3. $this->getUser()->setCulture('en_EN');
  4. $this->redirect('kontakt/index');
  5. }


w layout mam

  1. <a href="<?php url_for('kontakt/polish'); ?>">Polski</a>
  2. <a href="<?php url_for('kontakt/english'); ?>">Angielski</a>



PS:

Jeszcze jedno pytanko bo zauważyłem, że ustawiająć w executeIndex culture nie muszę czyścić zadnego cache.
Więc czy wystarczy przez te execute/english przekazać do adresu en i odczytać go w indexie? i czy to zadziała na wszystkie strony.

Ponieważ nie chce sobie utrudniać jak na razie i chce by dowolnie ( bez względu na jakiej podstronie znajduje się użytkownik ) mogl wybrać jezyk i przerzuciło go na strone główną.

Dobra na pytania powyżej odpowiedziałem sobie sam teraz ostatnie pytanie:

Czy da się jakoś zautomatyzować dodawanie tego języka w adresie w prosty sposób?

tzn aktualnie każdy moduł musiałbym sobie wywoływać z echo url_for(przykladowy/edit?lang= . $lang . &slug = . $id)

pzy czym w kazdym module bede musiał dodawać :

  1. $this->lang = $request->getParameter('lang');


Ten post edytował Micchaleq 14.02.2012, 13:30:41
Go to the top of the page
+Quote Post
Valantir
post
Post #6





Grupa: Zarejestrowani
Postów: 93
Pomógł: 7
Dołączył: 6.09.2011
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Nigdy się z tłumaczeniem nie bawiłem... ale może da się przechowywać język w cookie... (IMG:style_emoticons/default/smile.gif) Potem napisz sobie filtr, który będzie ustawiał język i tyle:)

Ten post edytował Valantir 14.02.2012, 15:59:48
Go to the top of the page
+Quote Post
Micchaleq
post
Post #7





Grupa: Zarejestrowani
Postów: 186
Pomógł: 4
Dołączył: 13.10.2009

Ostrzeżenie: (0%)
-----


Witam,

niestety nie pisałem jeszcze takich filtrów.

Czy możesz po krótce napisać mi co i jak albo jakiś link do artykulu bo to co znajduje nie wiele mi wyjaśnia.
Go to the top of the page
+Quote Post
Valantir
post
Post #8





Grupa: Zarejestrowani
Postów: 93
Pomógł: 7
Dołączył: 6.09.2011
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Pliki umieszczasz w:
nazwa_aplikacji->config->filters.yml
Kod
rendering: ~
remember_me:
  class: sfGuardRememberMeFilter
security:  ~

nazwa_filtra_jaka_chcesz_wstawic:
  class:  klasa_filtra
# insert your own filters here

cache:     ~
execution: ~

nazwa_aplikacji->lib->twoja_nazwa_pliku_zawierajacego_klase
Kod
<?php
class nazwa_filtra extends sfFilter
{
  public function execute ($filterChain)
  {
    //Treść filtra czyli w Twoim wypadku tworzenie sesji jeżeli takowa nie istnieje i jej ustawienie.
  }
}
?>


Oczywiście mówię-nie pracowałem nigdy z tłumaczeniami więc... to tylko propozycja:)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 14:45