Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Laravel]lokalizacja a kontroler
Forum PHP.pl > Forum > PHP > Frameworki
pablosi
Piszę swoją pierwszą aplikację w Laravelu. Wersja frameworka 5.6. Udało mi się zaimplementować lokalizację w apce, korzystając głównie z dokumentacji. I działa, w routingu, w blade'ach. Ale gdy dodam widok do metody w kontrolerze i tą metodę wywołam w routingu to lokalizacja wtedy nie działa. Szukałem w Google rozwiązań, ale dotyczyły głównie starszych wersji frameworka i nawet było napisane gdzieś, że w najnowszych wersjach frameworka zaimplementowanie lokalizacji jest uproszczone i nie potrzeba tworzyć już np. middleware do lokalizacji.

Ktoś wyjaśni mi jak użyć lokalizację z kontrolerem w wersji Laravela 5.6?
Pilsener
A możesz wrzucić kawałek kodu? Praktycznie nic nie rozumiem z tego co napisałeś, "Larwa" to archaiczny framework (z czasów Zend 1) i używa się lokalizacji tak:
  1. App::getLocale();


Domyślny język ustawia się w konfiguracji a jeśli chcesz go zmieniać to musisz gdzieś zaimplementować:
  1. App::setLocale();


Ustawiane na podstawie parametru w URL, subdomeny, ciasteczka, nagłówku przeglądarki - jak wolisz.
pablosi
Tak działa bez kontrolera

plik web.php
  1. Route::get('welcome/{locale}', function ($locale) {
  2. App::setLocale($locale);
  3. echo App::getLocale();
  4. echo trans('messages.welcome');
  5. return view('welcome');
  6. });
  7.  
  8.  


Z metodą z kontrolera działa tylko jak wpiszę parametr danego języka,

plik kontrolera
  1.  
  2. public function index(){
  3.  
  4. $locale=App::getLocale();
  5.  
  6. App::setLocale('ru'); // ale jak dam App::setLocale($locale); to nie działa
  7. return view('test');
  8.  
  9.  
  10. }
  11.  

plik routingu

  1. Route::get('test/{locale}', 'TestController@index', function () {
  2.  
  3.  
  4. });
  5.  
viking
Laravel ma to do siebie że działa jak chce a twórcy zamkną ci zgłoszenie i problem rozwiązany według nich wink.gif przykładowo jeśli używasz trans to nie zadziała z tłumaczeniami w plikach json (chociaż z tablicami już bez problemu). Spróbuj używać wszędzie __().
markonix
Metoda __() została dodana mniej więcej wtedy kiedy obsługa json stąd takie działanie.
Generalnie metoda __ szuka najpierw w json, potem w plikach lang stąd różnica w działaniu jest wskazana dla optymalności (choć ja akurat nie używam jsonów, a __() tak bo jakieś to bardziej "pro" w widokach).
pablosi
Mogę stworzyć z tablic obiekty JSON i dekodować je w widoku. Ale i tak, jeśli w kontrolerze załapuje mi lokalizacja tylko jak podam parametr języka, to i tak muszę porobić chyba stany warunkowe dla wszystkich języków.
Pyton_000
Ja wiem że pierwsza że samemu ale czasami nie warto się bawić wink.gif

https://github.com/mcamara/laravel-localization
Pilsener
Nie działa Ci, bo nigdzie nie ustawiasz setLocale. Jak już zdefiniowałeś w routingu ten parametr, to trzeba go odebrać i użyć.
pablosi
Dzięki Pilsener !
Udało mi się to napisać w metodzie i działa.

  1.  
  2. public function index($locale){
  3. App::setLocale($locale);
  4.  
  5. $lang['locale']=$locale;
  6.  
  7. return view('test', $lang);
  8.  
  9.  
  10. }
  11.  
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.