我必须翻译一个法语网站。现在,法语和其他许多语言一样,具有性别和偏向性。问题是:


如何创建包含消息的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/

10-11 21:44