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

Ruby on rails 是否有一种Rails方法来翻译模型名称以用于标题(即标题化?),ruby-on-rails,ruby,internationalization,rails-i18n,Ruby On Rails,Ruby,Internationalization,Rails I18n,I18n提供了一种转换模型名称的方便方法。以 如果我想显示“一条消息”、“两条消息”等等,这就足够了 但是,如果我也想显示“消息”(例如,在菜单中),该怎么办?我必须在I18n文件中创建另一个完全不同的条目吗?有什么方法可以做到这一点吗?比如: I18n.backend.store_translations :en, inbox: { title: 'Message' zero: 'no messages' one: 'one message',

I18n提供了一种转换模型名称的方便方法。以

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

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

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

检查一下是否使其看起来像一个标题,以及是否使其多样化。

我认为Rails
mb_chars
将通过unicode规则实现这一点

我很惊讶地看到您需要这个,因为我习惯于将Rails中的
mb_chars
看作是ruby 1.8天的剩余,不再有任何用处。但这似乎是一个默认Rails titleize不能做正确的i18n事情的地方,但是如果您首先将字符串转换为
mb_chars
代理,它会做正确的i18n事情

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 DEVS会不会考虑这个bug。 pluralizehelper接受复数形式作为第三个参数

将3“人”、“人”复数化


您可以为您的边缘案例构建一个助手。

感谢您指出这一点,但我认为titleize和pluralize不具备国际化能力。他们只为英语工作,不是吗?我看了一下
titleize
的源代码,我认为这是不可能的
titleize
在做它的事情之前似乎没有参考
I18n
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.