是否有一种Rails方式来翻译模型名称以用于标题中的用法(即标题化?)

时间:2013-11-22 21:20:04

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

I18n提供了一种翻译模型名称的便捷方式。以Rails Guide

为例
I18n.backend.store_translations :en, inbox: {
  one: 'one message',
  other: '%{count} messages'
}
I18n.translate :inbox, count: 2
# => '2 messages'

I18n.translate :inbox, count: 1
# => 'one message'

如果我想显示“一条消息”,“两条消息”等等,这就足够了。

但是,如果我还要显示“消息”(例如,在菜单中),该怎么办?我是否必须在I18n文件中创建另一个完全不同的条目?是否有一些Rails方法可以做到这一点?像:

 I18n.backend.store_translations :en, inbox: {
      title: 'Message'
      zero: 'no messages'
      one: 'one message',
      other: '%{count} messages'
    }

3 个答案:

答案 0 :(得分:0)

查看titleize以使其看起来像标题,并pluralize使其变为多元化。

答案 1 :(得分:0)

我认为Rails mb_chars将使用unicode规则执行此操作。

我很惊讶地发现你需要这个,因为我曾经认为Rails中的mb_chars是一个不再有任何用途的红宝石1.8天的剩余物。但看起来这是默认Rails标题化没有做正确的事情的地方,但如果你先将字符串转换为mb_chars代理,它就会出现。

irb(main):019:0> "\u01C9ab".titlecase   # "ljab"
=> "ljab"  # wrong

irb(main):021:0> "\u01C9ab".mb_chars.titlecase
=> LJab 
# right. Or at least closer and as close to right as Rails is gonna get, I'm not 
# sure if it should really be "Ljab", which is actually different. 
# I'm out of my league here. 

我不确定Rails开发人员是否会认为这是一个错误。

答案 2 :(得分:0)

pluralize助手接受复数形式作为第三个参数。

pluralize 3, 'person', 'people'

您可以为边缘案例构建帮助程序。