Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [class] Pony, Tłumaczenia oparte o pliki xml
SHiP
post
Post #1





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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)


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post
kwiateusz
post
Post #2


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




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
Go to the top of the page
+Quote Post
Moli
post
Post #3





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
SHiP
post
Post #4





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


@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

Ten post edytował SHiP 21.08.2007, 20:21:17


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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...
Go to the top of the page
+Quote Post
SHiP
post
Post #6





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


@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.


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post
kwiateusz
post
Post #7


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




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
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
SHiP
post
Post #9





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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...


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
strife
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


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 :]


--------------------
Go to the top of the page
+Quote Post
SHiP
post
Post #12





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


@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


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post
AxZx
post
Post #13





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


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>


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
SHiP
post
Post #14





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


@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


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 13:36