Операции внутри Rails I18n строк локалей - PullRequest
1 голос
/ 23 декабря 2010

Я пытаюсь поместить операции в локали для адаптации к различным языкам. Например, в английском языке миллиард равен 1 000 000 000, а в испанском - 1 000 000 000 000, поэтому я хотел бы иметь следующее:

en:
  billion: "You have %{money} billions"
es:
  billion: "Tienes %{money/1000.0} billones"

Для того, чтобы можно было написать:

I18n.t :billion, :money => whatever

И будь прав на любом языке.

Однако, похоже, я не могу поместить операции в строки локалей.

Любой намек на то, как я должен это делать? Может быть, мой подход просто неверно «философски» говорить?

Спасибо всем!

Ответы [ 3 ]

2 голосов
/ 23 декабря 2010

На основании исследования, вот решение. Извините за множественные правки.

I18n.interpolate("%{money} billion", :money => Proc.new{|x| x[:vals] / 1000}, :vals => 12121)

Таким образом, вы можете изменить свой файл перевода для использования: vals in: en и: money in: es.

en:
  billion: "You have %{money} billions"
es:
  billion: "Tienes %{money_proc} billones"

I18n.t :billion, {:money => 12121, :money_proc => Proc.new{|x| x[:money]/1000.0}}
1 голос
/ 15 февраля 2011

Можете ли вы просто заменить «миллиарды» на «мил миллионы» в переводе?

0 голосов
/ 23 декабря 2010

I18n (с хорошими оценками) не допускает интерполяции Ruby, файлы YAML будут беспорядочными.Помощник Rails number_to_human , кажется, поддерживает то, что вы хотите.

[править] Модули фиксируются в замороженном хэше (ActionView :: Helpers :: DECIMAL_UNITS), поэтому number_to_human не будет полезенесли вы не сделаете некоторые изменения раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...