Czytałem wasze "patenty" by robić to z bazy, pliku itd. itp.
Ja na codzień korzystam z SMARTY i wielu z was pewnie też i jest na to sprytny i sprawdzony sposób.
1. Gdzie te języki?
Standardowo szablony SMARTY trzymane są katalogu templates.
U nas szablony "default" będą zapisane w templates a języczne np. angielski w templates/en, niemiecki w templates/de. W zależności od wyboru języka oraz faktu czy taki język faktycznie jest wgrany SMARTY będzie wczytywało z odpowiedniego języka.
2. Wybór języka.
W moim przypadku język standardo wybierany jest z przegladarki. Jezeli uzytkownik chce zmienic jezyk wybiera odpowiedni odnosnik poprzez liste lub klikniecie w "flage" itd. (jak wlasciciel chce). Odnosnik wowczas ma taka konstrukcje ?lang="jezyk" np. angielski ?lang=en ,niemiecki ?lang=de itd. itp.
3. Jeżeli języka nie ma albo nikt nie wybral jezyka?
To nic

3. Kod
//do sesji "LANG" przypisujemy skrót językowy z przeglądarki //Sprawdzamy czy _GET lang nie jest puste LUB czy sesja "LANG" nie jest pusta. Jezeli to i to jest puste to nic dalej sie nie dzieje a SMARTY standardowo wczyta wszystko z katalogu "templates/" //zabezpieczamy się poprzez preg_match (tylko male litery OD a DO z i musza byc dwie literki) jezeli wszystko sie zgadza to przypisujemy sesji "LANG" wartosc z _GET { $_SESSION['LANG'] = $_GET['lang']; } //jestem zwolennikiem zabezpieczen, a niech ktos podmieni sesje LANG na np. ../../ itd.? { //sprawdzamy czy w katalogu templates jest katalog wybranego naszego jezyka, jezeli jest to go wczytujemy { $smarty->template_dir = '' . './templates/' . $_SESSION['LANG'] . '/'; } } }
Myślę że mój sposób jest dobry i banalny.
Wady:
1) Każdy jezyk trzeba tłumaczyc do osobnego katalogu. Np. jezeli nasza strona ma 3 jezyki, i posiada 20 stron (index, login, support ...) czyli mamy w templates min. 20 plikow tpl (index.tpl, login.tpl ...) to zamiast 20 plikow na serwerze mamy 60 plikow. Jednak przy dzisiejszych pojemnościach serwera nie powinien to być duży problem
Zalety:
1) Jest lepsze od tablicy dzięki temu że możemy dowolnie modyfikować stronę dla danego języka np. polska wersja będzie miała polskie obrazki, układ strony X; angielska będzie miała angielskie obrazki, układ strony Y.
2) Możemy treść na stronie wpisywać jak się nam podoba bez większego zastanowienia. Spróbujcie w tablicach trzymać np. regulamin strony który ma kilka stron, opis strony który też ma kilka stron itd. zaraz wyjdzie nam plik z tablicą która ma nie kilka KB a MB. To samo jak w html możemy dowolnie wpisać tekst typu: Wczoraj "Pani" Kasia kupiła produkt 'X' nie bardzo miałbym pomysł jak to umieścić w tablicy.
Jak to u mnie działa.
Tłumaczymy tylko "teksty" stałe, treść dynamiczna jak np. artykuły trzymane są w bazie danych. Admin dodaje artykuły dla danego języka a nie tłumaczenia. O co chodzi? Już tłumaczę. Jeżeli nie mamy wybranego języka a językiem standardowym jest język polski (pl, zdefiniowane w ustawieniach) to na stronie "Ostatnio dodane artykuły" pojawią się artykuły z bazy danych z językiem "pl", jak ktoś ma wybrany język angielski pojawią się artykuły z bazy danych z językiem "en" (warunkiem że będzie szukać artykułów z językiem "en" w bazie jest fakt że istnieje katalog "en" w "templates" oraz że "en" jest zdefiniowy w ustawieniach jako język opcjonalny). Dzięki temu po wybraniu nawet języka angielskiego na stronie nie będą ukazywały się artykuły w języku polskim.