Rails多个翻译规则

时间:2016-06-23 04:49:52

标签: ruby-on-rails internationalization rails-i18n

我正在尝试根据语言的语法翻译一些项目的计数器。我遇到了doc关于复数形式的问题,每种语言都有所不同。我预计rules已经在I18n内,而我需要做的只是填写翻译。但是当我在pluralize

读取i18n/backend/base.rb方法的代码时
   def pluralize(locale, entry, count)
      return entry unless entry.is_a?(Hash) && count

      key = :zero if count == 0 && entry.has_key?(:zero)
      key ||= count == 1 ? :one : :other
      raise InvalidPluralizationData.new(entry, count) unless entry.has_key?(key)
      entry[key]
    end

我发现它只支持en。例如我现在正在阿拉伯语翻译工作。

I18n.backend.store_translations :ar, path: { one: 'one', two: 'two', other: 'other', many: 'many', few: 'few'}

在这里我填写了翻译后端,我希望如果我通过count选项11,那么我会收到语言复数规则所指定的:many翻译。

I18n.t :path, count: 11, locale: :ar #should return 'many'

我是否需要自己指定这些规则?那在哪里?或者我需要调整什么?

2 个答案:

答案 0 :(得分:0)

您可以创建自己的规则,为此,您可以创建文件: 配置/初始化/是inflections.rb 并使这个例子适应你的现实:

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.plural /^(ox)$/i, '\1\2en'
  inflect.singular /^(ox)en/i, '\1'

  inflect.irregular 'octopus', 'octopi'

  inflect.uncountable 'equipment'
end

查看文档: Inflections

答案 1 :(得分:0)

This答案解决了我的问题。我需要为自定义复数规则启用加载模式,然后为每个案例指定关键字。