Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Zmiana języków i przechowywanie zmiennych
celes
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 19.02.2012

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


Hej,

Powoli zaczynam się rozkręcać w PHP, lecz potrzebuje małej pomocy (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)

Ten post edytował celes 22.09.2017, 10:31:54
Go to the top of the page
+Quote Post
Puszy
post
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

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


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".
Go to the top of the page
+Quote Post
celes
post
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 19.02.2012

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


Hej,

Dzięki (IMG:style_emoticons/default/smile.gif) szybka nauka o tablicach i własnych funkcjach (IMG:style_emoticons/default/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ść'.
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


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
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.08.2025 - 00:53