Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Języki + pliki językowe
Forum PHP.pl > Forum > Przedszkole
bahh
Zastanawiam się jak najoptymalniej zrobić wielojęzykową stronę. Mam skrypt już obsługujący wykrywanie języka - dodaje on do skryptu plik językowy np. pl.php.

Znam rozwiązanie typu define("ERROR", "Zapomnij o tym!"); i używanie tego jako np. echo ERROR.'<br />';
Chcę by tłumacz otrzymujący plik językowy do przetłumaczenia miał najłatwiejsze zadanie. Dobrze by było by plik wyglądał tak:

ERROR = 'Zapomnij o tym'
TRY_AGAIN = 'Spróbuj ponownie'

ale też by nie obciążać serwera. Nie znam metod tworzenia fajnych plików językowych w PHP 5 a być może w tej wersji PHP wprowadzili opcję, która ułatwia definiowanie kluczy, dlatego piszę do was, byście podzielili swoimi patentami na najprostrze do zdefiniowania i najmniej obciążające serwer
rocktech.pl
Witam.

http://php.net/manual/en/book.gettext.php i pliki .po.
redeemer
Ja polecam "słownik" trzymany w bazie z zapiętym cache (np. memcached)

Plusy:
* szybkość
* łatwa edycji kluczy z poziomu interfejsu www (np. w adminie)
bahh
Ale czy tworzenie setek zmiennych nie jest obciążające?
by_ikar
Samo stworzenie zmiennych i przypisanie im jakichś wartości raczej nie jest jakoś bardzo skomplikowane dla php. A jak zrobisz to na zasadzie tablicy, to wtedy zmienną będziesz mieć jedną i nawet jak dane będziesz pobierać z bazy i trzymać w jakimś cache, to będzie to bardzo szybka operacja i nie będzie to miało jakiegoś specjalnego narzutu na wydajność.
bahh
chce uniknąć pobierania z bazy danych, chcę zrobić to by było w pliku w postaci jak pisałem u góry:

ERROR = 'Zapomnij o tym'
TRY_AGAIN = 'Spróbuj ponownie'

a używane jako echo ERROR.'<br />'.TRY_AGAIN

tej postaci tutaj: http://php.net/manual/en/book.gettext.php nie bardzo rozumiem, jak zdefiniować to tak jak wyżej podałem i jak to wyświetlić (na tym samym przykładzie co w tym poście dałem)
Michael2318
Przerost formy nad treścią.
Zrób sobie po prostu filtrację dokładną, jaki język interesuje danego usera (chociażby poprzez ciasteczka, klikając we flagę danego pańska w headerze) i stwórz takie foldery:

lang_polish oraz lang_english, potem tworzysz plik lang_main.php o treści:

  1. $lang['error'] = 'Zapomnij o tym';


i ten plik wrzuć do folderu lang_polish. Teraz stwórz kolejny plik o tej samej nazwie, tylko o takiej zawartości:

  1. $lang['error'] = 'Forget it';


i wrzucasz go do filderu lang_english.


No i pod tą filtracją, jak już znajdziesz czy user chce PL czy EN język (zakładam, że masz w zmiennej $language przypisane albo polish albo english), includujesz wybrany pakiet językowy:

  1. include('language/lang_'.$language.'/lang_main.php');
  2.  
  3. echo $lang['error'];


Tyle. W zależności, jaki język wybrałeś - dostaniesz ten tekst zwrócony w danym jęzkyku.

W ten sposób masz stworzoną jedną tablicę $lang i w niej zapisane wszystkie frazy w danym języku.

Cytat
Ale czy tworzenie setek zmiennych nie jest obciążające?


No już bez przesady. Pomyśl sobie co by było gdybyś to chciał w takim razie wyciągać chociażby z bazy danych.
Samo stworzenie zmiennej i wyprintowanie jej na ekranie to żaden wysiłek dla PHP. Jeszcze gdybyś tu tworzył tyle samo warunków w PHP ile tych zmiennych, ale tu jest zwykłe przypisanie tekstu do zmiennej i wypluwanie jej na ekran użytkownikowi.

EDIT:

Wszystko zresztą podałem Ci tutaj: http://forum.php.pl/index.php?showtopic=22...p;#entry1068962
Z tym wyjątkiem, że tam pochrzaniłem sprawę bo powinienem zmienne nazwać tak jak wyżej Ci podałem (jako tablice), czyli:

  1. $lang['ID_LANGU'] = 'wartosc w danym jezyku';
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.