Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> JavaScript: Odmiana polskich słów pzez przypadki według liczby, Dzielę się swoim kodem
SmokAnalog
post
Post #1





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Hej,

w ostatnim projekcie potrzebowałem kodu, który odmieniałby słowa przez przypadki według liczby, czyli np.
  1. Mam 12 psów.
  2. Bajka o 71 krasnoludkach.
  3. Nie piłem od 100 lat.

Tworzenie tej funkcji było dobrą zabawą i wymagało analizy jak zmieniają się przypadki w zależności od kontekstu. Odkryłem, że mianownik, biernik i wołacz przy niektórych liczbach zmieniają się w dopełniacz. Pozostałe przypadki nie zmieniają się wcale.

A oto owoc mojej rozkminy:
[JAVASCRIPT] pobierz, plaintext
  1. function getWordForm(wordObject, context, number) {
  2. var toGenitive = ["nominative", "accusative", "vocative"],
  3. absolute = Math.abs(number),
  4. validForm = "";
  5.  
  6. if (toGenitive.indexOf(context) > -1 && absolute !== 1 && (absolute % 10 <= 1 || absolute % 10 >= 5 || (absolute % 100 >= 11 && absolute % 100 <= 19))) {
  7. validForm = wordObject.plural.genitive;
  8. } else {
  9. validForm = wordObject[absolute === 1 ? "singular" : "plural"][context];
  10. }
  11.  
  12. return validForm;
  13. }
[JAVASCRIPT] pobierz, plaintext


I przykład użycia:
[JAVASCRIPT] pobierz, plaintext
  1. var dog = {
  2. singular: {
  3. nominative: "pies",
  4. genitive: "psa",
  5. dative: "psu",
  6. accusative: "psa",
  7. instrumental: "psem",
  8. locative: "psie",
  9. vocative: "psie"
  10. },
  11. plural: {
  12. nominative: "psy",
  13. genitive: "psów",
  14. dative: "psom",
  15. accusative: "psy",
  16. instrumental: "psami",
  17. locative: "psach",
  18. vocative: "psy"
  19. }
  20. };
  21.  
  22. console.log("Mam 4 " + getWordForm(dog, "accusative", 4));
  23. console.log("Piszę książkę o 30 " + getWordForm(dog, "locative", 30));
  24. console.log("Idę na spacer z moim " + getWordForm(dog, "instrumental", 1));
  25. console.log("Nie zniosę 101 " + getWordForm(dog, "genitive", 101) + " w moim domu!");
[JAVASCRIPT] pobierz, plaintext


Obiekt słowa zawiera wszystkie przypadki, więc można się dowolnie bawić kontekstem i liczbą. Można też wzbogacić funkcję o opcję automatycznego wyświetlania liczby przed słowem, żeby się nie powtarzać.

Podoba Wam się? (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 22.08.2025 - 19:31