Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [class] Pony
Forum PHP.pl > Inne > Oceny
SHiP
Co tu dużo tlumaczyć. Tworzymy plik xml typu
  1. <pony>
  2.    <language>
  3.        <orginal>en</orginal>
  4.        <translation>pl</translation>
  5.    </language>
  6.  
  7.    <message>
  8.        <orginal>Welcome</orginal>
  9.        <translation>Witaj</translation>
  10.    </message>
  11.    <message>
  12.      <orginal>There are %n dogs. They're saying %s!</orginal>
  13.      <translation>Tam sa %n psy, które mówią %s!</translation>
  14.      <lastchar p="1">2|3|4</lastchar>
  15.    </message>
  16.  
  17.    <message>
  18.      <orginal>There are %n dogs. They're saying %s!</orginal>
  19.      <translation>Tam jest %n psów, które mówią %s!</translation>
  20.      <lastchar p="1">0|1|5|6|7|8|9</lastchar>
  21.    </message>
  22. </pony>


oraz wywolujemy kod php
  1. <?php
  2. require_once 'libs/pony.class.php';
  3.  
  4. $pony = new Pony();
  5. $pony -> loadFile('file.xml');
  6. echo $pony -> translate('There are %n dogs. They're saying %s!', 127, 'hoff hoff hoff').'<br/>';
  7. echo $pony -> translate('There are %n dogs. They're saying %s!', 2, 'hou hou hou').'<br/>';
  8. ?>


W efekcie otrzymujemy
Kod
Tam jest 127 psów, które mówią hoff hoff hoff!
Tam sa 2 psy, które mówią hou hou hou!


parametr p="1" okresla do ktorego parametru ma sie odwolywać wymagany bajer(w tym przypadku ostani znak parametru musi byc jednym z podanych. p jest domyslnie równe jeden wiec w zasadzie moze zniknąc z tego przykładu.

Prezentowałem plik xml koledze, który sie na tym za bardzo nie zna i mówi ze dałby rade dodawać nowe tłumaczenia wiec chyba biblioteka działa winksmiley.jpg

Do pobrania jak zwykle z http://srodek.info/files/pony-1.0.tar.gz
Licencja: GNU GPL

Czekam na komentarze winksmiley.jpg (i ewentualnie podpowiedzi jakie inne, oprócz ostatniego znaku, wymagania czasami potrzeba ustawic w pliku jezykowym)
kwiateusz
jakoś nie widzi mi sie klasa, jak zrobię literówkę w xmlu to potem muszę poprawiać literówki we wszystkich skryptach gdzie użyłem tego translatora?


wysuwam takie wnioski na podstawie przykładu smile.gif
Moli
Nazwa skojarzyła mi się z kucykami pony, kiedyś były takie zabawki winksmiley.jpg Moim zdaniem sprawę wielojęzyczności strony można rozwiązać lepiej smile.gif
SHiP
@kwiateusz: myślę że to jedyny dobry sposób. Tworzenie unikalnego identyfikatora dla każdej frazy mija się z celem... A literówki łatwo wyłapać w procesie tworzenia tłumaczeń(szczegolnie jeśli kilka osób je tworzy). Poza tym tworzenie tych plikow tez mozna łatwo zautomatyzować tworząc jakis globalny edytor dostepny przez przeglądarkę.

@Moli: bo pony to kucyk po angielsku winksmiley.jpg
phpion
No dobra, a co w przypadku gdy na stronie mamy napis np. 'Witaj na mojej stronie!' i za jakiś czas chcemy go zmienić na 'Witaj na mojej super stronie!'? Chyba jednak identyfikatory byłyby lepszym rozwiązaniem...
SHiP
@phpion.com: to dodajesz nowy wpis <message>. Nie rozumiem w czym problem. Imho nie mozesz
"This is my page" i "This is my super page" tlumaczyc identycznie bo obie frazy nie znaczą to samo.
kwiateusz
sorry, ale nie dla mnie ta klasa a sie przyzwyczaiłem do tłumaczeń w IPB i jakoś one mi sie naturalniejsze wydają a polegają one zwyczajnie an tym ze mamy tablice asocjacyjną klucz => fraza i wtedy nie ma problemów ze zmianą frazy na dowolną bez grzebania po kodzie samego skryptu winksmiley.jpg
nospor
I ja również uważam jak poprzednicy. Beznadziejny jest tu system nazewnictwa. Walniesz w skryptach x odwolan do tekstu Hello World, potem klient sobie zażyczy by bylo Hello Sunny World i kurka lataj i szukaj starych odwolan a potem je zamieniaj. To nie ma praktycznego wykorzystania przy wiekszych projektach.
SHiP
Huh, wy to macie zawsze problemy ^^. Na upartego nie trzeba nic zmieniać. Tłumaczenie angielkie(a raczej pole orginal) jest użyte jako index tak wiec mozliwe jest dzialanie tak np w IPB. Tak wiec zawsze mozna zmienić tlumaczenia i np. stworzyc tlumaczenie polskie Hello World => Witaj piekny swiecie i tlumaczenie angielskie Hello World => Hello sunny world.

Na upartego można zastosowac typowe indeksy
  1. <message>
  2.     <orginal>control_panel_message</orginal>
  3.     <translation>Witaj %s w panelu użytkownika. bla ble ble ble</translation>
  4. </message>


Mi głównie chodzilo o rozwiązania inteligentnego dopierania tlumaczen na podstawie parametrow gdy mamy kilka róznych wersji...
nospor
W sumie fakt winksmiley.jpg
Po prostu przyklad co podales i późniejsze tlumaczenia troche zbily z tropu dostal.gif

Cytat
@phpion.com: to dodajesz nowy wpis <message>. Nie rozumiem w czym problem. Imho nie mozesz
"This is my page" i "This is my super page" tlumaczyc identycznie bo obie frazy nie znaczą to samo.
strife
Dla mnie to rozwiązanie jest jednym z najlepszych jeśli chodzi o tłumaczenia. Pierwszy raz z czymś takim spotkałem sie w Symfony i z pełnym zadowolniem z tego korzystam smile.gif

  1. // ...  
  2. <?php echo __('Czesc Franek, strzeliles liczba_bramek bramek', array('liczba_bramek' => 5)) ?>
  3. // ...


Fajna klasa smile.gif

PS. W pliku README masz

Cytat
21 sieprnia 2006 - 1.0

A nie 2007? Bo chyba starocia nam do oceny nie dałeś co ? tongue.gif
btw. sierpnia a nie sieprnia :]
SHiP
@strife: Hmm właśnie podsunałeś mi pomysł na rozbudowanie klasy smile.gif. Pomysł z tablica i własnymi indeksami zamiast %s %n jest całkiem fajny a napisanie tego nie powinno być trudne...


PS: To my mamy 2007 rok? ^^ a tak na powaznie - zrobiłem literówke. Nie chce mi sie teraz wszystkiego pakowac. Dobra data bedzie w przyszlej wersji winksmiley.jpg Narazie musicie sie cieszyc starociem ;P
AxZx
tylko 2 jezyki?
to z indeksami w tej klasie jest troche dziwne.
na stronie zalozmy sa 3 jezyki dostepne, moze sie zdarzyc ze zaden nie jest oryginal:) i co wtedy?
wszystkie 3 jezyki musza miec jakies teksty a nie jakis indeks:P

powinien byc indeks (skrocona nazwa - zeby bylo wiadomo o co chodzi, moze byc w polskim lub angielskim) i do tego dowolna ilosc tlumaczen
takie rozwiazanie nie bylo by dobre?
Kod
<message>
     <index>control_panel_message</index>
     <translation lang="pl">Witaj %s w panelu użytkownika. bla ble ble ble</translation>
    <translation lang="en">...</translation>
    <translation lang="de">....</translation>
</message>
SHiP
@AxZx: jesli mamy 20 jezykow i kilka tysięcy zwrotów to jest problem. Imho przy projektach gdzie mamy 3 jezyki i 100 fraz nie ma problemu. Ale coś większego już by tego nie pociągnęło tzn pociągnęłoby ale wydajność przy duzych plikach strasznie spada... Nawet po serializacji plik z cachem zajmował by kilkaset kb
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.