Rails / I18n:如何翻译模型的常量?

时间:2014-12-27 15:11:21

标签: ruby-on-rails-4 internationalization translation constants rails-i18n

如果我有一个像

这样的常量的模型
class Topic < ActiveRecord::Base
  STATUS_DISABLED = 0
  STATUS_ENABLED  = 1
end

如何使用区域设置进行翻译呢? 我想做那样的事情:

en:
 Topic:
   STATUS_ENABLED: 'Enable'
   STATUS_DISABLED: 'Disable'

翻译我的模特的最佳方法是什么?常数α

1 个答案:

答案 0 :(得分:1)

你不能。您的YAML文件无法访问Ruby级别的常量,它们是两种不同的语言。

此外,你不应该。常量用于源代码。它们不需要翻译,你可能会问如何本地化类名。

如果要将符号常量映射到可翻译字符串,则应添加一个返回英语(或其他本地语言)版本的函数,然后翻译

class Topic < ActiveRecord::Base
  STATUS_DISABLED = 0
  STATUS_ENABLED  = 1

  def status_name(status)
    case status
    when CASE_DISABLED then 'disabled'
    when CASE_ENABLED then 'enabled'
    end
  end
end

您的YAML文件将包含:

en:
  topic:
    enabled: 'Enable'
    disable: 'Disable'

如果您要将多个值存储为整数但转换为字符串,则可能需要enum之后:

class Topic
  enum status: [:disabled, :enabled]
end

这样,您就可以访问将Topic.statuses返回的[:disabled, :enabled];您可以在这些符号上调用to_s来生成字符串'disabled''enabled',您可以将其输入I18n进行翻译。