使用Gettext处理语法性别

时间:2011-05-26 18:48:01

标签: ruby-on-rails gettext

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

这对英语不感兴趣,因为单词不会因性别而异,但在翻译成西班牙语时会有所不同。他/她是一个很好的英语用例。在翻译成西班牙语时,这确实是需要的。

一个例子:

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

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

应翻译为

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

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

有什么想法吗?

干杯!

3 个答案:

答案 0 :(得分:12)

使用标准的gettext功能,可以使用上下文来解决。喜欢称呼:

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

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

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

答案 1 :(得分:3)

不幸的是没有。这是gettext系统的限制 - 除了数字之外,语言功能基于您关键的语言。如果你用西班牙语键入所有字符串,那就可以了。

另一种选择是将字符附加到字符串以便翻译,然后将其剥离。

我不熟悉Ruby,但psuedo-code的基本思想是:

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

答案 2 :(得分:1)

使用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}