如何让i18n了解性别敏感语言中的"性别",例如法语

 靈幻雪月 发布于 2023-01-30 15:38

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

如何创建包含可变部分为男性或女性的消息的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中的树结构.当翻译文件回复给你时,找到混乱的缩进也会更容易.

1 个回答
  • 这也是意大利人的常见问题.

    一种不需要插件的解决方案是使用性别特定的密钥.

    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中的树结构.当翻译文件回复给你时,找到混乱的缩进也会更容易.

    2023-01-30 15:40 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有