Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wydajny System Obsługi Języków
Forum PHP.pl > Forum > PHP
Riklaunim
Zamierzam wkrótce wprowadzić w swoim CMSie obsługę języków, tylko że nie wiem jak to zrobić by było "szybkie i wydajne", czy zastosować zwykły include z langiem w postaci np. tablicy, czy może coś innego? aarambo.gif
Luke
Proponuje napisac funkcje ktora bedzie spelniac role tlumacza (i18n), w polaczeniu z plikami xml, ktore beda trzymaly tresc danego jezyka. Taka forma pozwala na latwa modyfikacje i rozbudowe. I co najwazniejsze bedzie utrzymana modulowosc Twojego CMS`a.
DeyV
Wadę takiego rozwiązania jest jednak ... szybkość.
Jeśli chcesz przechowywać dane w XML, to konieczne jest pamiętanie o tym, by je konwertować do jakiejś przyjażniejszej dla php postaci.
A to już odrobinę komplikuje zagadnienie.

jeśli jednak to się uda - to pozwala na bardzo elastycznie tworzenie tłumaczeń, tm bardziej, że istnieje sporo softu uławiającego tłumaczenie plików xml (np. http://ez.no/ez_publish/download/translati...te_and_linguist czyli
http://doc.trolltech.com/3.1/linguist-manual-3.html )
[fisher]
Ja uzywam do tego smarty

w tpl'u umieszczam
  1. {config_load file="lang.$lang" section="Global"}


a zeby wyswietlic, np
  1. {#GlobalSaveAs#}


przykladowo plik z tlumaczeniem (lang.pl) wyglada mniej wiecej tak
  1. [Global]
  2. GlobalSaveAs = Zapisz jako
  3. GlobalCharset = iso-8859-2
  4. GlobalCountryCode = pl



Tlumaczenie na nowe jezyki jest bardzo proste (IMHO najprostsze dla tlumacza, ktory nie zawsze musi byc "obeznany")
Riklaunim
Smarty nie użyję bo nie chcę podwoić czasu generowania stron tongue.gif
DeyV
hmm. Powiem tylko tyle na ten temat.
Albo bardzo nisko cenisz swój czas, albo masz bardzo wolny serwer, albo...
hmmm , zabrakło mi pomysłu jak nazwać kogoś, kto przejmuje się różnicami rzędu 0.01 , zyskując w zamian elastyczność i wygodę pracy z kodem.

No ale cóż - o gustach się nie rozmawia, a wszak wymagałoby to poświęcenia paru minut na zapoznanie się z kolejnym (o jakie to okrutne) manualem.


@[fisher] jest to bardzo ciekaw metoda.
Ja stosowałem jeszcze inną - zadeklarowanie własnego znacznika, np. {t} {/t} , dzięki któremu wszystkie teksty, które się w nim znajdowały, przechodziły przez zdefiniowaną przezemnie metodę.
rzseattle
Cytat(DeyV @ 2004-06-16 12:33:00)
Ja stosowałem jeszcze inną - zadeklarowanie własnego znacznika, np. {t} {/t} , dzięki któremu wszystkie teksty, które się w nim znajdowały, przechodziły przez zdefiniowaną przezemnie metodę.

Dodam tylko ze dla sprawnego keszowania szablonow z roznymi wersjami jezykowymi w SMARTY, warto przy wyswietlaniu / kompilowaniu szablonu dodac parametr oznaczajacy jezyk. Wtedy spokojnie blok np {t}{/t} moze poddawac sie keszowaniu nie obciazajac serwera dodatkowym zajeciem a rozne wersje jezykowe beda keszowane w roznych plikach keszu.

Czyli

  1. <?php
  2. $smarty->display('szablon.tpl', $lang);
  3. ?>
Riklaunim
http://www.massassi.com/bTemplate/benchmarks/ aaevil.gif
bregovic
jesli jednak tak jak ja nie chcesz uzywac smarty - mozesz zastosowac require_once" title="Zobacz w manualu PHP" target="_manual'owane pliki z tablicami:
  1. <?php
  2. include 'lang.'.$lang.'.php';
  3. ?>

i tablica:
  1. <?php
  2. $lang['ok'] = 'ok';
  3. $lang['yes'] = 'tak';
  4. $lang['no'] = 'nie';
  5. etc...
  6. ?>

wedlug mnie to najlepsza opcja dla nie-smarciarzy biggrin.gif
[fisher]
Cytat(Riklaunim @ 2004-06-16 12:17:23)
Smarty nie użyję bo nie chcę podwoić czasu generowania stron tongue.gif

Przesadzasz, przy cache'owaniu nie jest tak zle
rzseattle
Cytat(Riklaunim @ 2004-06-16 12:57:29)

Chyba nie obejzales dokladnie wynikow tego testu :/ . Smarty wyswietla szablon od 20 do 40 procent wolniej. Pozatym ehh ludzie czesto nie dostrzegaja mozliwosci smarty w budowie poteznego nazedzia. Sam teraz wykorzystuje ten system do bardzo rozbudowanego CMSa i gdyby nie funkcjonalnosc SMARTY mialbym powazne problemy ze sprzegnieciem wielu rzeczy w calosc. Paradoksalnie SMARTY przyspiesza dzialanie calego silnika poniewaz pobiera on i obrabia dane tylko wtedy gdy sa one potrzebne (pliki keszu sie zdeaktualizuja). Gdybym stosowal zwykle echo to bylo by krucho tongue.gif . Tak wiec po raz ktorys juz na tym forum nie zgadzam sie z opinia ze smarty jest wolny, bo jesli opracujesz odpowiedni system smarty jest ci tylko przyjacielem. Hmm chyba male OT.
[fisher]
Cytat(DeyV @ 2004-06-16 12:33:00)
No ale cóż - o gustach się nie rozmawia, a wszak wymagałoby to poświęcenia paru minut na zapoznanie się z kolejnym (o jakie to okrutne) manualem.

Masz racje - zgadzam sie w 100%, warto nadmienic ze designerzy - graficy juz nie lapia sie za glowe gdy slysza slowo smarty, watpie zeby chcieli sie uczyc metodologi tworzenia template'ow w innych tego typu systemach.

Poza tym smarty jest tworzone przez ludzi z php/Zend i ma naprawde niezla dokumentacje wiec ja to rozwiazanie zaczynam traktowac jako standard
Luke
Pozwole sobie zauwazyc ze do testu

http://www.massassi.com/bTemplate/benchmarks/

uzyto smarty w wersji 2.1.0, ciekawe jakie wyniki ma smarty w wersji 2.6.2?

Z ciekawosci sprawde w domu ...

Powszechnie wiadomo ze wydajnosc i szybkosc z wersji na wersje jest coraz lepsza...

Be Smarty winksmiley.jpg
[fisher]
Cytat(Luca @ 2004-06-16 13:33:33)
uzyto smarty w wersji 2.1.0, ciekawe jakie wyniki ma smarty w wersji 2.6.2?

Znany polski parlamentarzysta Andrzej L. tez powoluje sie na niezalezne wyliczenia* jego "ekspertow" do wytykania innym bledow.

Najgorsze ze sa tacy ktorzy mu wierza :-(

Podobnie jest z systemami szablonow



*) FUD :) ?
Chewolf
Witam też tworze malutki cms i według was które rozwiązanie jest najlepsze ?
Luke
Riklaunim, zrozumiales?
Ace
no ok phemplate 1.7.1 sa najszybsze w tym tescie, ale... Czy phemplate daje tobie takie mozliwosci jakie daje smarty ? chocazby funkcje warunkowa ? Taka mala funkcja, a ulatwia mi bardzo tworzenie szablonow. Uwazam, ze smarty maja wieksze mozliwosci, oraz maja zaplecze w ludziach ktorzy modernizuja ten system, dzieki czemu staje sie coraz lepszy.

zastanow sie nad tym. Smarty sa dobre do kazdego CMS'a wedlug mnie. Sam napisalem CMS'a, i uzylem w nim smarty, a na predkosc generowania strony nie narzekam.
Riklaunim
Nie stosuję obecnie any Smarty ani innego systemu skór smile.gif Generalnie wynik działania moduły/bloku itp. wciągany jest po 2 zmienne tytul/treść i includowany jest odpowiedni plik skórki gdzie w odpowiednim miejscu jest echo... a działa to dość dobrze link. Jak się struktóra wykrystalizuję zastosuję pewnie jakiś prosty system skór na podstawie jakieś dobrej klasy z phpclasses.org, mam kilka typów.

Kod
    Riklaunim, zrozumiales?

Nie. Nie potrzebuję do niczego tak dużego skryptu tongue.gif Nie lubię wyglądu kodu skór Smarty, nie lubię Encompass i Xanthi tongue.gif
Jabol
a ja zaproponuje dwie opcje. Pierwsza to użycie klasy translate z pakiety PEAR, co jednak wymaga wielu innych części pakietu PEAR... angrysmiley.gif
Inna opcja to skorzystanie z wbydowanej w wiele buildów funkcji _() albo inaczej gettext(). Wymaga to troszkę zabawy ale jest w miare porządnie zrobione i elastyczne. Na dodatek dodam jeszcze, że jest to metoda sprawdzona w niezliczonej (ok, może nie przesadzajmy, ale naprawdę w olbrzymiej) ilości programów (szczególnie na *nixa), więc powinna być w miarę niezawodna.
Ozzy
A ja polecę Savant'a.
Bora
wyorzystanie smarty jest bardzo ciekawe.
ja jednak planuje użyć jakiegoś inego sposobu ponieważ używając model mvc nie chce za bardzo być zależnym od smarty.
Do tej pory korzystyałem z tablic i jak narazie wydaje mi sie to najlepszym sposobem.

a może coś takiego na szybko:
  1. <?php
  2.  
  3. // plik z tłumaczeniem
  4. $lang=array(
  5. 'hello' => 'Witaj',
  6. 'test' => 'sprawdzam poprawność'
  7. );
  8. function translate($tekst){
  9. $from = array_keys($lang);
  10. $to = array_values($lang);
  11. return str_replace($ftom, $to, $tekst);
  12. }
  13. // i potem tylko w trakcie pobierania danych np:
  14. $tekst = translate($tekst);
  15. $smarty -> assign('tekst', $tekst);
  16.  
  17.  
  18.  
  19. ?>
Riklaunim
Cytat(Ozzy @ 2004-06-17 00:47:37)
A ja polecę Savant'a.

Kod
<title><?php echo $title ?></title>

Takie coś to mam i bez Savanta smile.gif
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.