Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Laravel]lokalizacja a kontroler
pablosi
post 30.06.2018, 10:01:24
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 31.05.2018

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


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?
Go to the top of the page
+Quote Post
Pilsener
post 1.07.2018, 09:40:29
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


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.
Go to the top of the page
+Quote Post
pablosi
post 1.07.2018, 16:54:11
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 31.05.2018

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


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.  
Go to the top of the page
+Quote Post
viking
post 1.07.2018, 16:59:51
Post #4





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


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 __().


--------------------
Go to the top of the page
+Quote Post
markonix
post 2.07.2018, 00:15:23
Post #5





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


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).


--------------------
Go to the top of the page
+Quote Post
pablosi
post 2.07.2018, 08:14:57
Post #6





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 31.05.2018

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


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.
Go to the top of the page
+Quote Post
Pyton_000
post 2.07.2018, 08:15:16
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Ja wiem że pierwsza że samemu ale czasami nie warto się bawić wink.gif

https://github.com/mcamara/laravel-localization
Go to the top of the page
+Quote Post
Pilsener
post 2.07.2018, 09:16:43
Post #8





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Nie działa Ci, bo nigdzie nie ustawiasz setLocale. Jak już zdefiniowałeś w routingu ten parametr, to trzeba go odebrać i użyć.
Go to the top of the page
+Quote Post
pablosi
post 3.07.2018, 10:41:56
Post #9





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 31.05.2018

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


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.  
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 00:14