【问题标题】:Handling grammatical gender with Gettext使用 Gettext 处理语法性别
【发布时间】:2011-05-26 18:48:01
【问题描述】:

我正在寻找一种简单优雅的方式来在 Rails 应用程序中使用 Gettext 处理语法性别,与使用 n_() 方法处理复数的方式相同。

这对英语没有兴趣,因为单词不会随性别而变化,但在翻译成西班牙语时会发生变化。 他/她是一个很好的英语用例。翻译成西班牙语时确实需要这样做。

一个例子:

考虑用户 Pablo(男性)和 María(女性)。

_('%{user} is tall') & {:user => user.name}

应该翻译成

'Pablo es alto'
'María es alta'

当然,我们可以访问user.gender

有什么想法吗?

干杯!

【问题讨论】:

    标签: ruby-on-rails gettext


    【解决方案1】:

    使用标准的 gettext 功能可以使用上下文来解决这个问题。喜欢调用适当的:

    p_('Male', '%{user} is tall')
    

    p_('Female', '%{user} is tall')
    

    这将在 gettext 目录中生成两个单独的字符串,用“男性”和“女性”上下文标记它们。

    【讨论】:

      【解决方案2】:

      很遗憾,没有。这是 gettext 系统的一个限制——除了数量之外,语言功能还基于您关闭的语言。如果您要使用西班牙语键入所有字符串,它会起作用。

      另一种选择是为了翻译而在字符串中附加一个字符,然后将其剥离。

      我不熟悉 Ruby,但伪代码的基本思想是:

      if (user.sex == male) {
          strip_last_char(_('%{user} is tall♂') & {:user => user.name})
      } else {
          strip_last_char(_('%{user} is tall♀') & {:user => user.name})
      }
      

      【讨论】:

        【解决方案3】:

        使用gettext 的plural form 机制怎么样。通常使用参数n来区分单数和复数形式。

        现在想象使用 n 来定义您的性别而不是数量。因此 p.ex. n=1 表示女性(而非单数),n=2(或 n>1)表示女性(而非复数)。

        n = user.male? ? 1 : 0
        n_('%{user} is tall', '%{user} is tall', n) & {:user => user.name}
        

        【讨论】:

        • 感谢正确的 ruby​​ 语法 dgilperez。如果您使用 user.gender 而不是 n,就像我建议的那样,那么这也可以用于具有更多两种性别形式的其他语言。还要注意正确设置 Plural-Forms(此处:Plural-Forms: nplurals=2;复数=n == 1 ? 0 : 1;) 在你的messages.po中
        • 不!一百万次不!复数形式特征的全部意义在于不同的语言具有不同数量的复数形式,或者可能根本没有不同的单数和复数形式。永远不要那样做!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-29
        • 2011-08-05
        • 2011-08-02
        • 2015-03-01
        • 2010-12-18
        相关资源
        最近更新 更多