Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Неряшливость в окончаниях существительных на форуме  (Прочитано 942 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн arni

  • Автор темы
  • Новичок
  • *
  • Сообщений: 23
    • Просмотр профиля
Цитировать
1 Ответов
23 Просмотров
862 Тем
31 Сообщений

Окончания рассогласованы с числительными. Это так сильно бросается в глаза, и это так легко реализуется буквально одной строкой кода ...

Оффлайн Дмитрий Бо

  • Погонщик серверов
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 3540
  • Я не техподдержка, я за порядком слежу
    • Просмотр профиля
    • dihoc.ru - контекстный вьетнамско-русский словарь
Окончания рассогласованы с числительными. Это так сильно бросается в глаза, и это так легко реализуется буквально одной строкой кода ...

У меня придумать такую строку не получилось.

Если у тебя есть вариант — закоммить в SMF. Решать такие вещи на одном отдельно взятом форуме нецелесообразно.
Не опускай рук, а то пропустишь в бороду

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7188
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
arni, строку на любом ЯП в студию. Она мне очень пригодится.

Оффлайн arni

  • Автор темы
  • Новичок
  • *
  • Сообщений: 23
    • Просмотр профиля
выделяем функцию-хелпер
def number_with_noun(number, nouns)
  raise 'There must be 3 members' unless nouns.is_a?(Array) && nouns.size==3
  if (11..14).include? number%100
    '%d %s' % [number, nouns[2]]
  else
    case number%10
      when 1 then '%d %s' % [number, nouns[0]]
      when 2..4 then '%d %s' % [number, nouns[1]]
      else '%d %s' % [number, nouns[2]]
    end
  end
end

далее вызываем её, передавая число и три варианта существительного
puts number_with_noun 1, %w(ответ ответа ответов)
puts number_with_noun 23, %w(просмотр просмотра просмотров)
puts number_with_noun 862, %w(тема темы тем)
puts number_with_noun 31, %w(сообщение сообщения сообщений)
puts number_with_noun 0, %w(гость гостя гостей)

убеждаемся, что всё работает:
Цитировать
1 ответ
23 просмотра
862 темы
31 сообщение
0 гостей

p.s. это был ruby

Оффлайн Дмитрий Бо

  • Погонщик серверов
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 3540
  • Я не техподдержка, я за порядком слежу
    • Просмотр профиля
    • dihoc.ru - контекстный вьетнамско-русский словарь
Фигасе одна строка.

Осталось только
а) переписать на php
б) переделать так, чтобы работало для разных языков в зависимости от конфига
Не опускай рук, а то пропустишь в бороду

Оффлайн arni

  • Автор темы
  • Новичок
  • *
  • Сообщений: 23
    • Просмотр профиля
Вот однострочник, но он куда как хуже читается. Не ruby-way. Поэтому я и привел более развернутый вариант - он легче для обзора, понимания, для адаптации на другие языки.

def number_with_noun(number, nouns)
  "#{number} #{nouns[number%10 == 1 && number%100 != 11 ? 0 : (2..4).include?(number%10) && !(12..14).include?(number%100) ? 1 : 2]}"
end

 

Страница сгенерирована за 0.075 секунд. Запросов: 25.