Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zmiana języków i przechowywanie zmiennych
Forum PHP.pl > Forum > Przedszkole
celes
Hej,

Powoli zaczynam się rozkręcać w PHP, lecz potrzebuje małej pomocy smile.gif

Stworzyłem sobie prostą aplikacje, która ustawia zmienną sesyjną na podstawie kliknięcia w daną flagę kraju.
OK wszystko mi działa.

Lecz mam zagwozdkę jak przechowywać masę zmiennych językowych.
Utworzyłem sobie plik pl.php i eng.php gdzie przechowuje zmienne językowe.
W zmiennych językowych przechowuje również zmienne sesyjne - co niestety nie jest dobrym rozwiązaniem jeśli na danej stronie nie ma zdefiniowanej tej zmiennej sesyjnej.
Lepiej rozdzielać każdy człon językowy? Czy uwarunkować te zmienne językowe, które mają zmienne sesyjne?

np.
  1. $lang_hello = "<p>Witaj ".$_SESSION['imie']."! z firmy ".$_SESSION['firma'].' [ <a href="logout.php">Wyloguj się!</a> ] ';


Drugie pytanie, które mi się nasuwa.
Zmiennych językowych będzie coraz więcej i jeśli będę ładował wszystkie na każdej podstronie siądzie zapewne optymalizacja i tempo ładowania.
Czy istnieje jakaś funkcja, która "wywołuje" tylko te zmienne, które są używane? Czy jednak każdą zmienną językową warunkować na daną podstronę? Co na moje również jest głupotą...

Dzięki za pomoc smile.gif
Puszy
Wybierz jeden język domyślny, utwórz dla niego plik z tablicą zawierającą teksty. Utwórz teraz plik dla każdego języka i utwórz dla niego tablicę o tych samych kluczach. Poniżej przykład gdy głównym językiem jest język polski:

PL
  1. <?php
  2.  
  3. $pl = [
  4. 'cześć' => 'cześć',
  5. 'pa' => 'pa',
  6. ];


EN
  1. <?php
  2.  
  3. $en = [
  4. 'cześć' => 'hi',
  5. 'pa' => 'bye',
  6. ];


Teraz potrzebujesz funkcji która będzie pobierała odpowiednie słowa. Np w sesji trzymasz informację o języku w postaci stringa 'en'.
  1. function _t($exp){
  2. $pl = [
  3. 'cześć' => 'cześć',
  4. 'pa' => 'pa',
  5. ];
  6.  
  7. $en = [
  8. 'cześć' => 'hi',
  9. 'pa' => 'bye',
  10. ];
  11.  
  12. $translation = [
  13. 'pl' => $pl,
  14. 'en' => $en,
  15. ];
  16.  
  17. return array_key_exists($exp, $translation[$_SESSION['lang']]) ? $translation[$_SESSION['lang']][$exp] : $exp;
  18. }


Oczywiście jest to podejście ogólne do problemu, wręcz prymitywne. Należy to odpowiednio zabezpieczyć i dostosować do swoich potrzeb, należy też pamiętać np. o odmianie wyrazów. Twig ma możliwość zmiany tekstu w zależności od podanej liczby dla przykładu wyświetli "1 użytkownik" i "2 użytkowników" zamiast "1 użytkowników".
celes
Hej,

Dzięki smile.gif szybka nauka o tablicach i własnych funkcjach smile.gif

Lecz dalej to nie rozwiązuje mojego problemu.

Tworze tablice i wartość ma zmienną sesyjną:

  1. $pl = [
  2. 'cześć' => "<p>Witaj ".$_SESSION['imie']."! z firmy ".$_SESSION['firma'].' [ <a href="logout.php">Wyloguj się!</a> ] ',
  3. 'pa' => 'papa',
  4. ];


Nie odwoluje się do 'cześć' - tylko do 'pa' -
  1. echo _t('pa');
ale i tak sprawdza czy zmienna sesyjna istnieje, w tym przypadku z wiersza 'cześć'.
viking
Zrób dynamiczne podstawianie _t(klucz, array wartości). W pliku tablicy tylko placeholdery np funkcji sprintf.
Poza tym http://php.net/manual/en/ref.gettext.php
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.