ROR: локализованная подстановка переменной строки сообщения - PullRequest
1 голос
/ 02 марта 2010

Я пытаюсь найти лучший способ заменить несколько переменных / заполнителей в локализованной строке сообщения в моем приложении ruby ​​on rails. При замене одного заполнителя я использовал удовлетворительно:

В en.yml: url_borked: «Не удалось загрузить URL: $ url.» Ввиду: t (: url_borked) ["$ url"] = request.url

Но это не подходит для нескольких заполнителей. Это выглядит некрасиво и на самом деле не работает, например:

В en.yml:

url_borked: "The URL: $url is badly formatted, perhaps you meant: $url_clean"

В поле зрения:

(t(:url_borked)["$url"] = request.url)["url_clean") = @suggested_url

Я пытался использовать String :: sub, но меня это не устраивает, так как это ужасно. например:

(t(:url_borked).sub("$url", request.url).sub("url_clean", @suggested_url)

Это также не работает, если вы хотите заменить несколько экземпляров одного заполнителя. e.g.:

bad_url: "$url cannot be loaded, please try $url another time"

Я также рассмотрел функцию printf, но она не работает для локализации, поскольку относительная позиция заполнителя может меняться в зависимости от перевода.

Есть ли правильный способ замены заполнителя этого сообщения?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 02 марта 2010

Почему бы и нет:

t(:url_borked, :url=>request.url, :url_clean=>@suggested_url)

0 голосов
/ 02 марта 2010

Хорошо, у меня возникла мозговая волна, и я немного более внимательно посмотрел на функцию I18n :: translate и обнаружил внутри себя функциональность «интерполяции».необходимо.Забавно, что я решил это после того, как наконец решил попросить толпу найти решение: -)

Приветствия.

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