Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wartości między tekstem, strona dwujęzyczna
Forum PHP.pl > Forum > PHP
wddigital
Piszę stronę w 2 językach - polskim i angielskim. W zależności od wybranego języka wczytywania jest tablica wszystkich tekstów na stronie.

Jeżeli zostanie wybrany język polski to ładuje tablice z pliku lang_pl.php
  1. $lang = array(
  2. '001' => 'Strona główna',
  3. '002' => 'Ustawienia',
  4. '003' => 'Wyloguj się',
  5. '004' => 'Pokaż szczegóły',
  6. '005' => 'Usuń'
  7. ...
  8. );

Jeżeli zostanie wybrany język angielski to ładuje tablice z pliku lang_en.php
  1. $lang = array(
  2. '001' => 'Home',
  3. '002' => 'Settings',
  4. '003' => 'Logout',
  5. '004' => 'Show details',
  6. '005' => 'Delete'
  7. ...
  8. );

Potem już w kodzie podstrony dwołuje się do tekstów, załóżmy że wyświetlam link do wylogowania się:
  1. echo '<a href="">'.$lang['003'].'</a>';


No dobra, ale załóżmy, że potrzebuje wyświetlić tekst, a w środku tekstu jakąś wartość, przykładowo:
Cytat
Posiadasz 100 punktów (w tym 50 punktów Premium), możesz doładować punkty wybierając przycisk obok.

No to wtedy musiałbym robić:
  1. $lang = array(
  2. '006' => 'Posiadasz',
  3. '007' => 'punktów (w tym',
  4. '008' => 'punktów Premium), możesz doładować punkty wybierając przycisk obok.',
  5. ...
  6. );

Trochę bezsensu.

Jak zrobić dobre wyświetlanie takich tekstów?
Cytat
Posiadasz wartość1 punktów (w tym wartość2 punktów Premium), możesz doładować punkty wybierając przycisk obok.


Pozdrawiam.
markonix
  1. function lang($line, $param = '', $language = '')
  2. {
  3. $result = // tu pobierz wartość
  4.  
  5. if (empty($result))
  6. return $line;
  7.  
  8. if ($param != '')
  9. {
  10. if (is_array($param))
  11. {
  12. $result = vsprintf($result, $param);
  13. }
  14. else
  15. {
  16. $result = sprintf($result, $param);
  17. }
  18. }
  19.  
  20. return $result;
  21. }
  22.  
  23. lang('welcome', 'Marek');
  24.  
  25. // $lang['welcome'] = 'Witaj %s w panelu';


No i oczywiście sugeruje zmianę indeksów na bardziej logiczne aniżeli kolejne cyfry..
wddigital
Ogromne dzięki. Rozumiem, że ta funkcja obsługuje tylko jedną wartość?
markonix
Funkcja wyciągnięta z frameworka (CI).

Co do jednej wartości no właśnie nie - pierwszy argument to nazwa indeksu (tylko zamiast tych liczb normalne stringi), a drugi to jedna wartość bądź tablica.
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.