Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> правильное окончание (рус.) 
V
    Опции темы
Danger
Дата 17.9.2008, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 20.9.2006

Репутация: нет
Всего: нет



Есть функция, выводящая фразу в зависимости от того, какое число передано в параметре:

Код

summaryRenderer: function(v, params, data){ return ((v === 0 || v > 1) ? '(' + v +' hosts)' : '(1 host)'); }


На английском все это прекрасно работает, но нужно на русском. Как переписать, с учетом русского языка (чтобы были правильные окончания, вроде "1 хост", "2 хоста", "10 хостов" и т.п.) ?
PM WWW ICQ Jabber   Вверх
vasac
Дата 17.9.2008, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: нет
Всего: 36



Подумать мозгом?

Что вообще за params и data?
PM WWW   Вверх
Danger
Дата 17.9.2008, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 20.9.2006

Репутация: нет
Всего: нет



Цитата

Подумать мозгом?

Знал бы - не спрашивал.

Цитата

Что вообще за params и data?

На них не обращайте внимания, число передается в v
PM WWW ICQ Jabber   Вверх
smartov
Дата 17.9.2008, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 1
Всего: 259



Код

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251" /> 
</head>
<body>
<script>
function summaryRendererRussoTuristo(number, name, endingOne, endingTwo, endingMany) {
  if (number == null)
    number = 0;
  
  snumber = number.toString()
  talkingDigit = parseInt(snumber[snumber.length-1], 10);
  if (isNaN(talkingDigit)) {
    return "NaN"
  }  
  
  if (talkingDigit == 1) {
    return number + " " + name + endingOne;
  } else if (talkingDigit >= 1 && talkingDigit <= 4) {
    return number + " " + name + endingTwo;
  } else if (talkingDigit == 0 || talkingDigit >= 5) {
    return number + " " + name + endingMany;
  } else {
    //как мы сюда попали?! o_O
    return "NaN"
  }
}

alert( summaryRendererRussoTuristo(1, "хост", "", "а", "ов") );
alert( summaryRendererRussoTuristo(5411, "хост", "", "а", "ов") );
alert( summaryRendererRussoTuristo(122, "хост", "", "а", "ов") );
alert( summaryRendererRussoTuristo(315, "хост", "", "а", "ов") );

alert( summaryRendererRussoTuristo(1, "ков", "ёр", "ра", "ров") );
alert( summaryRendererRussoTuristo(2, "ков", "ёр", "ра", "ров") );
alert( summaryRendererRussoTuristo(10, "ков", "ёр", "ра", "ров") );

alert( summaryRendererRussoTuristo("ошыбко!", "ыбк", "о", "о", "о") );

</script>
</body>
</html>


Это сообщение отредактировал(а) smartov - 17.9.2008, 11:58
PM MAIL   Вверх
Danger
Дата 18.9.2008, 07:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 20.9.2006

Репутация: нет
Всего: нет



Большое спасибо, smartov
PM WWW ICQ Jabber   Вверх
smartov
Дата 18.9.2008, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 1
Всего: 259



Danger, опа. Только сейчас понял что там не все еще верно. Не учтены цифры от 11 до 19.

Добавлено через 5 минут и 26 секунд
Вот так. Теперь на число 5411 показывается "хостов" а не "хост"

Код

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251" /> 
</head>
<body>
<script>
function summaryRendererRussoTuristo(number, name, endingOne, endingTwo, endingMany) {
  if (number == null)
    number = 0;
  
  snumber = number.toString()
  talkingDigit = parseInt(snumber[snumber.length-1], 10);
  if (isNaN(talkingDigit)) {
    return "NaN"
  }  

  //*11-*19  
  if (snumber.length > 1 && snumber[snumber.length-2] == '1') {
    return number + " " + name + endingMany;
  }

  //*1
  if (talkingDigit == 1) {
    return number + " " + name + endingOne;
  //*2-*4
  } else if (talkingDigit > 1 && talkingDigit <= 4) {
    return number + " " + name + endingTwo;
  //*5-*0
  } else if (talkingDigit == 0 || talkingDigit >= 5) {
    return number + " " + name + endingMany;
  } else {
    //как мы сюда попали?! o_O
    return "NaN"
  }
}

alert( summaryRendererRussoTuristo(1, "хост", "", "а", "ов") );
alert( summaryRendererRussoTuristo(5411, "хост", "", "а", "ов") );
alert( summaryRendererRussoTuristo(122, "хост", "", "а", "ов") );

alert( summaryRendererRussoTuristo(315, "хост", "", "а", "ов") );
alert( summaryRendererRussoTuristo(1, "ков", "ёр", "ра", "ров") );
alert( summaryRendererRussoTuristo(2, "ков", "ёр", "ра", "ров") );
alert( summaryRendererRussoTuristo(10, "ков", "ёр", "ра", "ров") );

alert( summaryRendererRussoTuristo("ошыбко!", "ыбк", "о", "о", "о") );
</script>
</body>
</html>

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.