2009-09-17 39 views
9

Jest to temat najlepszych praktyk w ogóle, nie specyficzne dla jednego języka, bazy danych lub cokolwieknajlepsza praktyka (y) w liczbie pojedynczej lub liczbie mnogiej?

Wszyscy mamy do czynienia z generowanej mocy, gdzie można być „jednym raportowania produktów” lub „dwa produkt”. Nie czyta się zbyt dobrze ... Niektórzy po prostu rozwiązują ten problem, używając "jednego produktu (ów)" lub "liczby produktów: (1)", a inni mogą mieć inne rozwiązania.

Rzeczy mogą być jeszcze bardziej złożone w różnych językach! Po francusku, gdy masz zero produktów, użyjesz liczby pojedynczej, a nie liczby mnogiej! (Zero produktu) Inne języki (chiński, japoński) mogą nawet nie mieć tych różnic gramatycznych lub mieć więcej niż dwa różne słowa, aby wskazać coś na temat liczby produktów. (Liczba mnoga i większa liczba mnoga, na przykład.)

Ale aby to uprościć, skupmy się na językach, które mają słowa w liczbie pojedynczej i mnogiej.

Podczas tworzenia nowego projektu, który musi generować raporty, jak radzisz sobie ze słowami w liczbie pojedynczej i mnogiej? Czy dodajesz dwa pola nazw w swojej bazie danych dla formy liczby pojedynczej i mnogiej? Czy dodajesz do kodu dodatkowe reguły, aby przekształcić słowa z liczby pojedynczej na liczbę mnogą? Czy używasz innych sztuczek?

Podczas pracy nad projektem, który wymaga śledzenia pojedynczej i mnogiej formy, jak sobie z tym poradzić?

+0

iirc Arabski ma specjalne formy pojedynczej, podwójnej, a następnie tylko (więcej?) Liczby mnogiej! : S –

+0

Istnieje wiele różnych form liczby mnogiej w różnych językach. Zobacz: http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html – SimonSimCity

Odpowiedz

9

Polecam przyjrzeniu gettext w ogóle, a ngettext w szczególności. Może nawet, jeśli nie zamierzasz tłumaczyć swojej aplikacji. Po prostu przejdź do this part of the documentation. Ma implementację dla mniej więcej wszystkich języków i nawet jeśli wybranemu językowi nie ma takiego wsparcia, nic nie powstrzyma cię od pożyczania pomysłów.

+0

Ale co z nazwami produktów przechowywanymi w bazie danych? –

+1

To samo - przechowywanie par liczby pojedynczej/mnogiej. A w przypadku tłumaczenia (które nie jest twoim przypadkiem lub jest?) Musisz po prostu upewnić się, że są one umieszczone w .po, jeśli używasz gettext lub używasz podobnego algorytmu i przechowujesz go w innym miejscu (oczywiście nie robi to zmysłów do umieszczenia tysięcy produktów w pliku .po). –

+0

Pomyślnie o innym problemie z nazwami produktów przechowywanymi w bazie danych - łatwo jest obsłużyć formę liczby mnogiej/liczby pojedynczej, ale jeśli chodzi o tłumaczenie, wystąpiłby problem z przypadkami. A próba trzymania się mianownika może okazać się prawie równie niezręczna jak "Liczba produktów: N". –

0
Number of products: 1 
Number of products: 4 
Number of products: FILE_NOT_FOUND 

Próba użycia języka naturalnego do zgłaszania danych ilościowych jest po prostu zbyt wiele kłopotów.

+0

Tak, wiem. :-) Po prostu mnie humoru i pomyśl o tym jako ważnym wymogu w silnik raportowania produktu, nad którym pracujesz. –

+3

I od kiedy zbyt wiele kłopotów powstrzymało ludzkość? –

+0

Awww ... Teraz nie mogę przestać się zastanawiać nad liczbą mnogą "ludzkości" ... może "ludzkości"? ;-) –

-4

W angielskich aplikacjach zazwyczaj najłatwiejszym i najskuteczniejszym jest przechowywanie liczby pojedynczej i tworzenie liczby mnogiej za pomocą grupy instrukcji if.

if(count > 1){ 
    suffix = 's'; 
} 
+6

-1 autobusy, absolwenci itp. – MusiGenesis

1

Przeczytaj i zaimplementuj this; zgłoś się, gdy skończysz (za kilka lat). Osobiście jestem zadowolony z podejścia (s);) (choć oczywiste jest, że to nie działa we wszystkich językach).

+0

Ten link wyraźnie pokazuje złożoność słów w liczbie pojedynczej/mnogiej. Pokazuje również, że liczba formularzy zmienia się nawet z jednej do 6 różnych form! Już tę stronę lubię! :-) –

+2

Alex, to - http://translate.sourceforge.net/wiki/l10n/pluralforms - wygląda bardziej kompleksowo na formularze w liczbie mnogiej dla różnych języków. –

2

W języku Perl jest to kompleksowo rozwiązywane przez Lingua::EN::Inflect. Używa dużego słownika i ostrożnie obsługuje wszystkie wyjątki od reguł. Robi także rzeczy takie jak "a" lub "an", a także obsługuje porównania!

Zapoznaj się z the paper, aby uzyskać szczegółowe informacje.

+1

Jednym z problemów z tym odniesieniem jest to, że nie jest on językowo-agnostyczny, bez względu na to, co nazywamy * językiem * tutaj ;-) Innym problemem jest to, że problem wykracza poza formę liczby mnogiej rzeczownika, tam * jest * to coś nazwał całe zdanie (i tam * są * te rzeczy zwane pełnymi zdaniami). –

+0

Ale i tak potraktowałem to jako interesujące odniesienie;) –

+0

@Hacker: Masz całkowitą rację - ten moduł jest specyficzny dla angielskiego. Ale bardzo dobrze radzi sobie z tym językiem. –

0

Po aktualizacji, CLDR posiada teraz wiele reguł dla języków, a ICU ma implementację.