Интерфейс на человеческом языке

Хотелось бы почаще видеть в интерфейсах надписи на нормальном человеческом языке, а не на корявом техническом. Тем более, что сделать это не так уж и сложно ;-)

Проблема

Пример технического языка:

Найдено товаров: 1.

Найдено товаров: 2.

Найдено товаров: 5.

Придраться не к чему, но смотрится сухо.

Пример корявого языка:

Найдено 1 товаров.

Найдено 2 товаров.

Найдено 5 товаров.

Налицо проблемы с окончаниями.

Решение

Окончание слов, связанных с числительными зависит от самих числительных. Если они оканчиваются на 1 — одно окончание, на 2, 3 и 4 — второе, на 5, 6, 7, 8, 9 и 0 — третье.

Пример на нормальном человеческом языке:

Найден 1 товар.

Найдено 2, 3, 4 товара.

Найдено 5, 6, 7, 8, 9, 0 товаров.

Правда, есть одно исключение. Числительные, оканчивающиеся на 11, 12, 13 и 14 имеют окончания третьего типа.

Найдено 11, 12, 13, 14 товаров.

Пример PHP-кода:

function postfix($number, $one, $two, $five)
{
  $last = substr($number, -1);

  $penult = strlen($number) > 1? substr($number, -2, 1): 0;

  if($penult != 1 && $last == 1)
    $postfix = $one;
  elseif($penult != 1 && $last > 1 && $last < 5)
    $postfix = $two;
  else
    $postfix = $five;

  return($postfix);
}

То же самое на JavaScript:

function postfix(number, one, two, five)
{
  number = number.toString();

  var last = number.substr(-1);

  var penult = number.length() > 1? number.substr(-2, 1): 0;

  var postfix;

  if(penult != 1 && last == 1)
    postfix = one;
  else if(penult != 1 && last > 1 && last < 5)
    postfix = two;
  else
    postfix = five;

  return(postfix);
}

Пользуйтесь на здоровье! ;-)

Комментарии