【问题标题】:Rails article helper - "a" or "an"Rails 文章助手 - “a” 或 “an”
【发布时间】:2011-07-19 21:34:32
【问题描述】:

有谁知道 Rails Helper 可以自动将适当的文章添加到给定的字符串中?例如,如果我将“apple”传递给函数,它会变成“an apple”,而如果我要发送“banana”,它将返回“abanana”

我已经检查了 Rails TextHelper module 但找不到任何东西。抱歉,如果这是重复的,但诚然这是一个很难搜索的答案......

【问题讨论】:

  • +1 用于宣传良好的英语。

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


【解决方案1】:

查看https://deveiate.org/code/linguistics/ - 它提供了不定冠词的处理等等。我已经在许多项目中成功使用它。

【讨论】:

    【解决方案2】:

    我知道以下答案对于实际的简单实现来说太过分了,但如果有人想在一定规模的实现下准确地做到这一点。

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

    如果初始声音是元音sound(不一定是元音letter),则在前面加上'an',否则在前面加上'a'。

    参考约翰的例子:

    'an hour' 因为这里的 'h' 是元音,而 'a historical' 因为这里的 'h' 是辅音。 'an NBC' 因为这里的'N' 读作'en',而'a NATO' 因为这里的'N' 读作'n'。

    所以问题被简化为找出:“某些字母何时发音为元音”。为此,您需要以某种方式访问​​具有每个单词的语音表示的字典,并检查其初始音素。

    【讨论】:

    • “元音字母”应该是“元音字母”。
    【解决方案3】:

    如果您想要一个全面的解决方案,我喜欢gem。但是,如果您只是想让测试更好地阅读,那么猴子补丁 String 以遵循标准 Rails inflector 模式会很有帮助:

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

    【讨论】:

      【解决方案4】:

      现在有一个宝石:indefinite_article

      【讨论】:

      • 迪基第 11 定律:掌握任何足够成熟且设计良好的软件语言与其说是对语言本身的晦涩了解,不如说是在必要时增强周围的生态系统。
      • 这个 gem 是否也本地化为其他语言?
      • @JeffDickey 现代开发更像是购物而不是工程。
      【解决方案5】:

      我不知道,但为此编写一个助手似乎很简单,对吧? 在我的头顶上

      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

      【讨论】:

      • 不适用于以无声辅音开头的外来词。
      • 对...但是这会让您大部分时间都可以到达那里,并且您可以在遇到边缘情况时添加它们...直到您找到更好的方法...这就是我的方式无论如何都会去做。
      • @Will:我添加了一个指向我的答案的链接,其中包含更多信息。
      • 英语中的规则不是“以元音开头”,而是“以元音开头”,所以这种方法不会100%有效。失败的例子:“a hour”、“ahonourable”、“an US Ambassador”等。
      • 如果后面的单词是复数,这也会返回语法错误的结果
      【解决方案6】:

      似乎检查第一个字母是元音可以让你大部分时间到达那里,但也有一些极端情况:

      • 有些人会说“一个历史性的时刻”,但写的是“一个历史性的时刻”。
      • 但是,这是“历史”!
      • 首字母缩略词有问题(“An NBC 记者”但“A NATO authority”)
      • 以元音开头但以初始辅音发音的单词(“a union”)
      • 其他?

      (source)

      【讨论】:

      • 是的,我的观点完全正确。因此,我为什么要尝试查看是否已经在某个地方制作了这样的助手。
      • 这条规则其实很简单,也不例外(我认为“历史性的”只是一个错误)。但问题是该规则取决于发音,而不是拼写:如果初始声音是元音 sound(不一定是元音字母表),则在前面加上“an”,否则在前面加上“a” .所以问题被简化为找出:“某些字母什么时候发音为元音”。
      • “历史”取决于您对“历史”的特定发音。例如,与美式发音相比,英式发音往往在开头的 'h' 上轻描淡写。
      • 也许有些人在某处说“历史性的”,但我是英国人,我从未听过英国人这样说。
      • “历史”是传统/时髦的发音方式。直到最近你还会听到 BBC 记者这样说。更多:betterwritingskills.com/tip-w005.html 总之,任何一种方式都可以接受。
      猜你喜欢
      • 2021-02-10
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多