Rails的文章助手 – “a”或“an”
有谁知道一个Rails的帮手,可以自动预先适当的文章给给定的string? 例如,如果我把“苹果”传递给函数,它会变成“一个苹果”,而如果我发送“香蕉”,它会返回“一根香蕉”
我已经检查了Rails的TextHelper模块,但找不到任何东西。 道歉,如果这是一个重复,但无可否认是一个艰难的答案search…
没有我知道的,但似乎很简单,写一个帮手这个权利? 离开我的头顶
def indefinite_articlerize(params_word) %w(aeiou).include?(params_word[0].downcase) ? "an #{params_word}" : "a #{params_word}" end
希望有所帮助
编辑1:也发现这个线程的补丁,可能会帮助你防弹这更多https://rails.lighthouseapp.com/projects/8994/tickets/2566-add-aan-inflector-indefinitize
现在有一个gem: indefinite_article 。
看起来像检查第一个字母是一个元音会让你在那里大部分的方式,但也有边缘情况:
- 有人会说“一个历史性的时刻”,却写下“一个历史性的时刻”。
- 但是,这是“一个历史”!
- 首字母缩略词和缩写是有问题的(“NBC记者”,但是“北约权威”)
- 用一个元音开始但用一个辅音(“一个工会”)发音的词
- 其他?
( 来源 )
我知道下面的答案对于一个实际的简单实现来说太过分了,但是如果有人想要在某种程度上实现它的话,那么这个答案是准确的。
规则其实非常简单,但问题在于规则取决于发音,而不是拼写:
如果最初的声音是元音(不一定是元音字母 ),那么在前面加上“an”,否则加上“a”。
参考约翰的例子:
“一小时”,因为这里的“h”是一个元音,而“一个历史的”是因为这里的“h”是一个辅音。 因为这里的'N'被认为是'en',而'北约'是因为'N'在这里被认为是'n'。
所以这个问题只能发现:“什么时候某些字母发音为元音”。 为了做到这一点,你需要访问一个包含每个单词的音韵表示的字典,并检查它的初始音素。
看看http://deveiate.org/projects/Linguistics/wiki/English – 它提供了不确定的文章和更多的处理。 我已经在很多项目上成功地使用了它。
如果你想要一个全面的解决scheme,我喜欢这个gem 。 但是如果你只是想让testing更好地阅读,猴子补丁string遵循标准的Rails 偏移器模式是有帮助的:
class String def articleize %w(aeiou).include?(self[0].downcase) ? "an #{self}" : "a #{self}" end end