我必须用法语翻译一个网站.现在,法语和许多其他语言一样,具有性别和变形.问题是:
如何创建包含可变部分为男性或女性的消息的yaml文件...
如何修改i18n发生器来支持这个?
有没有宝石或插件支持这个?
Fabrizio Reg.. 9
这也是意大利人的常见问题.
一种不需要插件的解决方案是使用性别特定的密钥.
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-genderized),它将模型作为第二个参数获取性别方法:
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中的树结构.当翻译文件回复给你时,找到混乱的缩进也会更容易.
这也是意大利人的常见问题.
一种不需要插件的解决方案是使用性别特定的密钥.
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-genderized),它将模型作为第二个参数获取性别方法:
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中的树结构.当翻译文件回复给你时,找到混乱的缩进也会更容易.