Rails文章助手 - “a”或“an”

时间:2011-03-21 18:10:14

标签: ruby-on-rails ruby ruby-on-rails-3 helpers

有没有人知道Rails Helper可以自动将相应的文章添加到给定的字符串中?例如,如果我将“apple”传递给该函数,它将变成“一个苹果”,而如果我要发送“香蕉”它将返回“香蕉”

我已经检查了Rails TextHelper module但找不到任何内容。如果这是重复的道歉,但无可否认,这是一个难以回答的搜索...

6 个答案:

答案 0 :(得分:37)

我不知道但是为此写一个帮助似乎很简单? 在我的头顶

def indefinite_articlerize(params_word)
    %w(a e i o u).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

答案 1 :(得分:13)

现在有一个宝石:indefinite_article

答案 2 :(得分:4)

好像检查第一个字母是元音会让你大部分都在那里,但有边缘情况:

  • 有些人会说“一个历史性的时刻”,但写下“一个历史性的时刻”。
  • 但是,这是“历史”!
  • 缩略语和缩写是有问题的(“NBC记者”,但“北约当局”)
  • 以元音开头但以初始辅音(“a union”)发音的单词
  • 其他?

source

答案 3 :(得分:3)

我知道以下答案对于实际的简单实现来说太过分了,但是如果有人想在某种程度的实施中准确地做到这一点。

规则实际上非常简单,但问题是规则依赖于发音,而不是拼写:

如果初始声音是元音声音(不一定是元音字母),则前置'an',否则前置'a'。

参考约翰的例子:

'一小时',因为这里的'h'是元音,而'是'历史',因为这里的'h'是一个辅音。 'NBC'因为这里的'N'被读作'en',而'是'NATO',因为这里的'N'被读作'n'。

所以这个问题被简化为发现:“某些字母的发音何时发音为元音”。为了做到这一点,你需要以某种方式访问​​一个具有每个单词的语音表示的字典,并检查它的初始音素。

答案 4 :(得分:2)

查看http://deveiate.org/projects/Linguistics/wiki/English - 它提供了无限期文章的处理等等。我在很多项目中成功使用过它。

答案 5 :(得分:1)

如果你想要一个全面的解决方案,我喜欢gem。但是如果你只是想让测试更好地阅读,那么使用补丁字符串来遵循标准的Rails inflector模式是有帮助的:

class String
  def articleize
    %w(a e i o u).include?(self[0].downcase) ? "an #{self}" : "a #{self}"
  end
end