Помощник статьи рельсов - "А" или " Ан"
Кто-нибудь знает о помощнике Rails, который может автоматически добавлять соответствующую статью к заданной строке? Например, если я передам в функцию" яблоко", то получится" яблоко", тогда как если я пошлю в функцию" банан", то она вернет"банан"
Я уже проверил Rails TextHelper module, но ничего не нашел. Извините, если это дубликат, но, по общему признанию, это трудный ответ для поиска...
6 ответов:
Ни одного, о котором я знаю, но кажется достаточно простым написать помощника для этого, верно? С верхней части моей головы
def indefinite_articlerize(params_word) %w(a e i o u).include?(params_word[0].downcase) ? "an #{params_word}" : "a #{params_word}" end
Надеюсь, что это поможет
Edit 1: также нашел эту нить с патчем, который может помочь вам пуленепробиваемый это больше https://rails.lighthouseapp.com/projects/8994/tickets/2566-add-aan-inflector-indefinitize
Теперь есть драгоценный камень для этого: indefinite_article .
Похоже, что проверка того, что первая буква является гласной, поможет вам пройти большую часть пути, но есть крайние случаи:
Некоторые люди скажут "исторический момент", но напишут"исторический момент".
- но это же "история"!
- аббревиатуры и сокращения проблематичны ("репортер NBC", но "орган НАТО")
- слова, начинающиеся с гласной, но произносимые с начальной согласной ("Союз")
- Другие?
(Источник )
Загляните в http://deveiate.org/projects/Linguistics/wiki/English - он обеспечивает обработку неопределенных статей и многое другое. Я успешно использовал его на многих проектах.
Я знаю, что следующий ответ идет слишком много для практической простой реализации, но в случае, если кто-то хочет сделать это с точностью при некотором масштабе реализации.
Правило на самом деле довольно простое, но проблема в том, что правило зависит от произношения, а не орфографии:
Если начальным звуком является гласный звук (не обязательно гласная буква), то перед буквой 'an', в противном случае перед буквой 'a'.
Ссылаясь на Джона примеры:
"час", потому что " Н "здесь-гласный звук, тогда как "исторический", потому что " Н " здесь-согласный звук. "NBC", потому что " N "здесь читается как "en", тогда как "НАТО", потому что " N "здесь читается как "n".
Таким образом, вопрос сводится к выяснению: "когда определенные буквы произносятся как гласные звуки". Для этого вам нужно каким-то образом получить доступ к словарю, который имеет фонологические представления для каждого слова, и проверить его начальную фонему.
Я люблю драгоценный камень, Если вы хотите комплексное решение. Но если вы просто хотите, чтобы тесты читались более красиво, полезно использовать патч-строку, чтобы следовать стандартному шаблону Rails inflector:
class String def articleize %w(a e i o u).include?(self[0].downcase) ? "an #{self}" : "a #{self}" end end