Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Liczba pojedyncza i mnoga internalizacja
Forum PHP.pl > Forum > PHP
marcio
Witam chcialem sie waz zapytac co myslicie o takim rozwiazaniu jesli chodzi o rozroznanie liczby mnogiej od pojedynczej w tlumaczonych tekstach.
Tak wyglada przykladowy plik z tlumaczeniem: http://pyp.net.pl/source/4f7b98835b9ac
A tak jego dzialania i wynik: http://pyp.net.pl/source/4f7b9b4bd36e3

Oczywiscie mozna miec tez tlumaczenie w *.csv/*.xml ale np *.csv nie bedzie obslugiwalo pluralize.
To tez jest klasa oczywiscie Helper dla widokow bedzie krotszy do wykonania ale jak wam sie podoba sama idea, i czy jest ona "elastyczna"?

Jedyne co wedlug mnie warto zmienic to tworzenie tablic ze jesli dla liczb 5,6,7,8,9 tekst sie nie zmienia dac to do jednego klucza czyli np
  1. $translate['pl']['dogs'] = array(
  2. 'text' => 'W domu u Oskara %how% %ile% %plural%',
  3. 'pluralize' => array(
  4. '%plural%' => array(
  5. '1' => "pies", '2|3|4' => 'psy',
  6. '5|6|7|8|9' => "psow"
  7. )
  8. );

Tylko nie wiem czy potem parsowanie takie tablicy nie bedzie zbyt dlugie przy wiekszym pliku tlumaczen...

Jak wy to robicie?
Crozin
Po co wymyślasz koło na nowo? http://www.php.net/manual/en/class.messageformatter.php
marcio
Cytat(Crozin @ 4.04.2012, 09:45:03 ) *

Bo np na moim srv nie mam jeszcze php 5.3 a server nie jest moj tylko znajomego, i ogolnie nie kazdy ma jeszcze > 5.3

A co do mojego pytania?
Crozin
To już najwyższy czas zaktualizować sobie wersje, a jeżeli nie masz takiej możliwości (hosting) zmienić usługodawce (szczególnie, że mowa tu o niedużych kosztach). Wersja 5.3 ma już niespełna trzy lata.

A sam mechanizm jest do niczego.
1. Powtórzeń jest od groma (co już szczególnie w przypadku np. języka angielskiego mającego raptem dwa warianty jest niedorzeczne).
2. Dla języka polskiego nie uwzględniłeś tłumaczeń dla ilości większej niż 9. Przecież dla większych liczb odmiana nadal jest zróżnicowana (w domu są 102 psy, w domu jest 121 psów).

Podpatrz jak to rozwiązano w ICU jeżeli już koniecznie chcesz (bezsensownie) drążyć swoje rozwiązanie.

PS. Jaki to ma związek z OOP?
marcio
Cytat
A sam mechanizm jest do niczego.
1. Powtórzeń jest od groma (co już szczególnie w przypadku np. języka angielskiego mającego raptem dwa warianty jest niedorzeczne).
2. Dla języka polskiego nie uwzględniłeś tłumaczeń dla ilości większej niż 9. Przecież dla większych liczb odmiana nadal jest zróżnicowana (w domu są 102 psy, w domu jest 121 psów).

No tak odmieniam ogolnie na podstawie ostatniej liczby czyli dla 102 odmieniam dla 2 i wychodzi "w domu sa 2 psy" jednak dla 121 odmieniam dla 1 i wychodzi "w domu sa 121 pies"

W wiekszosci wypadkow dziala, jest jakas regula dla jakich pattern-ow zmieniaja sie czlony?

Ad 1.no to wlasnie chcialem zrobic:
  1. '%plural%' => array(
  2. '1' => "dog",
  3. '0|2|3|4|5|6|7|8|9' => 'dogs'
  4. )

To skroci zapis.

Cytat
To już najwyższy czas zaktualizować sobie wersje, a jeżeli nie masz takiej możliwości (hosting) zmienić usługodawce (szczególnie, że mowa tu o niedużych kosztach). Wersja 5.3 ma już niespełna trzy lata.

Jak juz mowilem srv nie jest moj wink.gif

Cytat
PS. Jaki to ma związek z OOP?

Niewiele pomylilo mi sie ;]

Jesli kogos interesuje rozwiazanie: http://trac.symfony-project.org/browser/br...zationRules.php warunki dla wszystkich jezykow

Dla
  1. $lang = new Vf_Language('Home.php');
  2. print $lang -> get() -> hi.'<Br>';
  3. print $lang -> get() -> phrase('dogs', array('%ile%'), array('1'), true, 1).'<Br>';
  4. print $lang -> get() -> phrase('dogs', array('%ile%'), array('4'), true, 4).'<Br>';
  5. print $lang -> get() -> phrase('dogs', array('%ile%'), array('7'), true, 7).'<Br>';
  6. print $lang -> get() -> phrase('dogs', array('%ile%'), array('21'), true, 21).'<Br>';
  7. print $lang -> get() -> phrase('dogs', array('%ile%'), array('45'), true, 45).'<Br>';
  8. print $lang -> get() -> phrase('dogs', array('%ile%'), array('102'), true, 102).'<Br>';
  9. print $lang -> get() -> phrase('dogs', array('%ile%'), array('121'), true, 121).'<Br>';
  10. print $lang -> get() -> phrase('dogs', array('%ile%'), array('9999'), true, 9999).'<Br>';
  11. print $lang -> get() -> phrase('dogs', array('%ile%'), array('677'), true, 677).'<Br>';
  12. print $lang -> get() -> phrase('dogs', array('%ile%'), array('1592'), true, 1592).'<Br>';
  13.  
  14. //mamy
  15. W domu u Oskara jest 1 pies
  16. W domu u Oskara sa 4 psy
  17. W domu u Oskara jest 7 psow
  18. W domu u Oskara jest 21 psow
  19. W domu u Oskara jest 45 psow
  20. W domu u Oskara sa 102 psy
  21. W domu u Oskara jest 121 psow
  22. W domu u Oskara jest 9999 psow
  23. W domu u Oskara jest 677 psow
  24. W domu u Oskara sa 1592 psy
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.