Війна з роботами: схиляння існуючих після числових

У першій частині Термінатора Ріс Кайл розповідає про те, як круто роботи навчилися маскуватися під людей. Що зараз у них справжнє шкіра і волосся, вони пітніють і т. п. Про попередні ж моделі він говорив, що їх легко було відрізнити за гумовою шкірою.

Думаю, що ще більш ранні моделі відрізнялися зовсім просто - вони говорили: «Солдат Кріс Катарн, убив 10 ворог, витратив 342 патрон, отримав 0 поранення» і т. п., чим відразу палилися.

Адже досі, незважаючи на розвиток веба, на багатьох сайтах можна зустріти «50 користувачі», «1 коментарі», «0 повідомлення» і т. п. А наскільки приємніше, коли сайт говорить з тобою людською мовою і правильно заховає слова по числах.

Адже зробити це зовсім нескладно. Нижче наведено прості готові функції, які дозволяють вирішити цю проблему на PHP і Javascript. Вони настільки прості, що не складе труднощів перенести їх на будь-яку іншу мову.

У функцію передається число сутностей, для якого потрібно підібрати закінчення, і масив слів (або закінчень для слів) для чисел 1, 4 і 5. Наприклад, [«устриця», «устриці», «устриць»].

PHP

  1. /**
  2. * Функція повертає закінчення численні слова на основі числа і масиву закінчення
  3. * param $ number Integer Число на основі якого потрібно сформувати закінчення
  4. * param $ endingsArray Array Масив слів або закінчень чисел (1, 4, 5),
  5. * наприклад array («яблуко», «яблука», «яблук»)
  6. * return String
  7. */
  8. function getNumEnding($number, $endingArray)
  9. {
  10. $number = $number % 100;
  11. if ($number>=11 && $number<=19) {
  12. $ending=$endingArray[2];
  13. }
  14. else {
  15. $i = $number % 10;
  16. switch ($i)
  17. {
  18. case (1): $ending = $endingArray[0]; break;
  19. case (2):
  20. case (3):
  21. case (4): $ending = $endingArray[1]; break;
  22. default: $ending=$endingArray[2];
  23. }
  24. }
  25. return $ending;
  26. }

JavaScript

  1. /**
  2. * Функція повертає закінчення численні слова на основі числа і масиву закінчення
  3. * param iNumber Integer Число на основі якого потрібно сформувати закінчення
  4. * param aEndings Array Масив слів або закінчень для чисел (1, 4, 5),
  5. * наприклад [«яблуко», «яблука», «яблук»]
  6. * return String
  7. */
  8. function getNumEnding(iNumber, aEndings)
  9. {
  10. var sEnding, i;
  11. iNumber = iNumber % 100;
  12. if (iNumber>=11 && iNumber<=19) {
  13. sEnding=aEndings[2];
  14. }
  15. else {
  16. i = iNumber % 10;
  17. switch (i)
  18. {
  19. case (1): sEnding = aEndings[0]; break;
  20. case (2):
  21. case (3):
  22. case (4): sEnding = aEndings[1]; break;
  23. default: sEnding = aEndings[2];
  24. }
  25. }
  26. return sEnding;
  27. }

Не забудьте окремо обробити випадок, для числа 0. Просто написати, наприклад, «0 записів» не достатньо. Потрібно як мінімум написати «Записів ні» або змінити дизайн, приховавши взагалі порожній блок із записами.

UPD: Спасибі IGlukhovy за те, що поправив неграмотну назву!

COM_SPPAGEBUILDER_NO_ITEMS_FOUND

logo