用于在Rails i18n中定位句子的清晰模式

时间:2013-05-30 00:11:20

标签: ruby-on-rails internationalization

我有以下句子需要本地化:

  

你有U未读消息/ s和N新消息

示例本地化

U 0 N 1

“你有1条新消息”

U 1 N 1

“您有1条未读消息和1条新消息”

U 1 N 0

“你有1条未读信息”

U 2 N 0

“你有1条未读消息”

我可以轻松地开始使用这个混乱

unread_only: 
  one: you have 1 unread message
  other: you have {{count}} unread messages 

new_only: 
  one: you have 1 new message
  other: you have {{count}} new messages 

......此时我被困了

# how do I pass two counts in?
new_and_unread:

我知道Rails中的i18n不是ICU MessageFormat,但是,有一些理智的方式用我们的工具本地化这个吗?你能将2个计数传递给本地化开关吗?

1 个答案:

答案 0 :(得分:5)

我的第一个想法是使用类似的东西:

unread: 
  one: 1 unread message
  other:{{count}} unread messages 

new: 
  one: 1 new message
  other: {{count}} new messages 


I18n.t('you_have') << [msg1,msg2].map(&:presence).compact.join(I18n.t('and'))

但这可能不适用于所有语言。只是西方人。

以下是更多信息: http://guides.rubyonrails.org/i18n.html#passing-variables-to-translations

new_and_unread: "You have %{new} new, and %{unread} unread messages"

<%=t 'new_and_unread', :new => 1, :unread => 3 %>