我必须翻译一个法语网站。现在,法语和其他许多语言一样,具有性别和偏向性。问题是:
如何创建包含消息的Yaml文件,消息的可变部分是男性还是女性。
如何修改i18n生成器以支持此功能?
是否有任何支持的宝石或插件?
最佳答案
这也是意大利语中的常见问题。
一种不需要插件的解决方案是使用针对性别的密钥。
it:
presentation_f: "Sig.ra %{customer_name}"
presentation_m: "Sig. %{customer_name}"
您可以在模型中创建一个方法,该方法接受输入中的键并返回经过性别修改的键:
module Genderize
def genderize(key)
"#{key}_#{self.gender}"
end
end
class Customer
include Genderize
def gender
gender_field_from_database_or_wherever || 'm'
end
end
在您的控制器或视图中,您可以执行以下操作:
t(@person.genderize('presentation'), customer_name: @person.name)
该示例有些虚构,但您可以理解。
您可以做的另一件事是编写一个
tg
函数(表示t性别化),该函数用作第二个参数在哪里获取性别方法的模型:
def tg(key, model, options={})
gender_key = "#{key}_#{model.gender}"
I18n.t(gender_key, options)
end
基本上与上面相同,但不污染模型,而是使用全局函数。
i18n-inflector-rails看起来像是一个有趣的项目,但以我的经验,将yaml文件传递给非技术翻译人员并不少见,并具有额外的复杂性来解释:
en:
welcome: "Dear @{f:Lady|m:Sir|n:You|All}"
对他们来说可能太多了。而这个:
en:
welcome_f: "Dear Lady"
welcome_m: "Dear Sir"
welcome_n: "Dear You"
阅读和解释要容易得多。
我还建议(这是与问题无关的免费建议),以使yaml文件尽可能平整,而更喜欢使用命名空间字符串作为键,而不是嵌套结构。例如,执行以下操作:
it:
home_page_welcome: "Welcome to the home page!"
代替这个:
it:
home_page:
welcome: "Welcome to the home page!"
您在控制器和视图中花了更多的时间,但是最终得到的代码使您可以轻松地四处移动,而不必重新排列Yaml Fies中的树结构。当翻译的文件返回给您时,找出混乱的缩进也将变得更加容易。
关于ruby-on-rails - 如何使i18n以性别敏感的语言(例如,法文,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21438041/