Prosta metoda na wiele języków, PHP + SMARTY |
Prosta metoda na wiele języków, PHP + SMARTY |
10.06.2013, 01:42:12
Post
#1
|
|
Grupa: Zarejestrowani Postów: 100 Pomógł: 0 Dołączył: 20.12.2006 Ostrzeżenie: (0%) |
Witam,
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 Wczyta domyślny. Smarty standardowo ma wpisane ze szablony sa zachowane z kat. o nazwie templates. 3. Kod
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. |
|
|
10.06.2013, 07:58:10
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6297 Dołączył: 27.12.2004 |
Wady: a teraz sobie wyobraź, że musisz zmienisz wygląd jakiejś strony. Zamiast robić to w jednym pliku robisz w 3. A teraz sobie wyobraź że musisz zmienić wyglad calego serwisu. Zamiast zmiane zrobić raz, robisz 3 razy lub wiecej jesli masz wiecej języków.
Jak chcesz dodać nowy język, musisz dodawać na nowo wszystkie templaty dla tego języka. Taki system języków jak twój się nie sprawdzi w żadnym normalnym serwisie. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
10.06.2013, 09:02:51
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 675 Pomógł: 286 Dołączył: 15.06.2009 Skąd: Wieliczka Ostrzeżenie: (0%) |
|
|
|
10.06.2013, 09:25:31
Post
#4
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) |
@gandziorz - Twoje rozwiązanie ma za dużo wad i żadnej zalety. Przekombinowałeś.
Cytat '/^[a-z]{2}$/D' To też jest błędne, ponieważ co w wypadku gdy język jest ustawiony na angielski, ale strona jest dla W.Brytanii? Uwzględnij dialekty. -------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
10.06.2013, 10:11:54
Post
#5
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 6.05.2013 Ostrzeżenie: (0%) |
Powinieneś się zainteresować PHP locale i Gettext oraz zastosować plugin do smartów: http://sourceforge.net/projects/smarty-gettext/.
Używając tego plugina w zależności od języka teskty, które chcesz tłumaczyć będzie musiał objąć w "{t}Do tłumaczenia{/t}". Twoje rozwiązanie ze zmianą szablonów jest bardzo złe, chyba, że chcesz osiągnąć efekt całkowitej zmiany treści i wszystkiego innego po zmianie języka, w co wątpię |
|
|
10.06.2013, 10:13:31
Post
#6
|
|
Grupa: Zarejestrowani Postów: 587 Pomógł: 131 Dołączył: 8.02.2010 Ostrzeżenie: (0%) |
-------------------- Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore
I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek |
|
|
10.06.2013, 12:33:30
Post
#7
|
|
Grupa: Zarejestrowani Postów: 100 Pomógł: 0 Dołączył: 20.12.2006 Ostrzeżenie: (0%) |
Jednak was posłuchałem i zrezygnowałem z tej metody.
Stworzyłem jeden szablon dla wszystkich jezykow i uzywam nieco zmodyfikowanej opcji wczytywania jezykow. Kod php:
Pliki jezykowe (tutaj lang_default.ini):
W smarty uzywamy:
|
|
|
Wersja Lo-Fi | Aktualny czas: 27.04.2024 - 14:37 |