如何解决用Gettext处理语法性别
| 我正在寻找一种在Rails应用程序中使用Gettext处理语法性别的简单适当的优雅方法,即使用n_()
方法处理复数形式的方法。
这对英语没有兴趣,因为单词不会随性别而变化,但是在翻译成西班牙语时会如此。他/她是英语的一个很好的用例。当翻译成西班牙文时,确实需要这样做。
一个例子:
考虑用户Pablo(男)和María(女)。
_(\'%{user} is tall\') & {:user => user.name}
应该翻译成
\'Pablo es alto\'
\'María es alta\'
当然,我们可以使用user.gender
有任何想法吗?
干杯!
解决方法
使用标准的gettext功能,可以使用上下文来解决。像适当的调用:
p_(\'Male\',\'%{user} is tall\')
要么
p_(\'Female\',\'%{user} is tall\')
这将在gettext目录中生成两个单独的字符串,并使用\“ Male \”和\“ Female \”上下文对其进行标记。
,很不幸的是,不行。这是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})
}
,使用gettext的复数形式机制怎么样?通常,参数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}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。