Я бы хотел написать такой текст:
Уже зарегистрировались? Авторизоваться!
Обратите внимание, что в тексте есть ссылка. В этом примере он указывает на Google - на самом деле он указывает на мое приложение log_in_path
.
Я нашел два способа сделать это, но ни один из них не выглядит «правильным».
Первый способ, который я знаю, предполагает наличие моего en.yml
:
log_in_message: "Already signed up? <a href='{{url}}'>Log in!</a>"
И на мой взгляд:
<p> <%= t('log_in_message', :url => login_path) %> </p>
Это работает , но мне кажется , что эта <a href=...</a>
деталь en.yml
не очень чиста.
Другой известный мне вариант - это использование локализованных представлений - login.en.html.erb
и login.es.html.erb
.
Это также не кажется правильным, поскольку единственной другой строкой будет вышеупомянутая; остальная часть представления (~ 30 строк) будет повторяться для всех представлений. Было бы не очень СУХОЕ.
Думаю, я мог бы использовать «локализованные частичные файлы», но это кажется слишком громоздким; Я думаю, что предпочитаю первый вариант иметь так много маленьких файлов просмотра.
Итак, мой вопрос: есть ли «правильный» способ реализовать это?
Ответы:
en.yml
login.html.erb
источник
%{href}
строку перевода YAML. Кроме того, поскольку вывод автоматически экранируется, вам нужно либо указать,raw
либо.html_safe
явно, либо суффиксировать ключ перевода с помощью_html
, так как inlogin_message_html
и экранирование будет пропущено автоматически.t('string')
идентичноt("string")
. Это одно и то же.t('some.key', link: link_to()).html_safe
Разделение текста и ссылки в файле locale.yml работает некоторое время, но с более длинным текстом их трудно переводить и поддерживать, поскольку ссылка находится в отдельном элементе перевода (как в ответе Симонеса). Если у вас появляется много строк / переводов со ссылками, вы можете еще немного подсушить.
Я сделал один помощник в своем application_helper.rb:
В моем en.yml:
И на мой взгляд:
Таким образом, легче переводить сообщения, так как текст ссылки четко определен в файлах locale.yml.
источник
This is a %{link:link to Google}
. Он позволяет вам иметь несколько ссылок в одной строке, заботится о XSS и разрешает вложенные переводы. Посмотрите на github.com/iGEL/i18n_linkflash
сообщений в Rails 3+, сделайте это так,view_context.it(key, ...)
Я взял раствор холлиса и сделал из него драгоценный камень
it
. Давайте посмотрим на пример:А потом
Для получения дополнительной информации см. Https://github.com/iGEL/it .
источник
В en.yml
In de.yml
в new.html.erb [предполагается]
источник
Большое спасибо, Холли, за то, что поделились этим подходом. На меня это действует как оберег. Я бы проголосовал за вас, если бы мог, но это мой первый пост, поэтому мне не хватает должной репутации ... В качестве дополнительной части головоломки: проблема, которую я понял с вашим подходом, заключается в том, что он все еще не работает изнутри контроллер. Я провел небольшое исследование и совместил ваш подход с подходом Гленна на Рубинском пруду .
Вот что я придумал:
Просмотр помощника, например application_helper.rb
В контроллере:
В locale.yml:
В представлении:
Надеюсь, этот пост заработает мне репутацию, чтобы проголосовать за вас, привет :) Любые отзывы приветствуются.
источник
У нас было следующее:
или более явно:
то в ApplicationController.rb просто
Учитывая ключ в
en.yml
файле, напримерможет использоваться в ERB как
должен генерировать
источник
Мне нужно было немного больше гибкости, чем просто добавление ссылок на флэш-сообщения из файлов YAML (например, имя пользователя, вошедшее в систему и т. Д.), Поэтому вместо этого я хотел использовать нотацию ERB в строке.
Поскольку я использую,
bootstrap_flash
я изменил вспомогательный код следующим образом, чтобы декодировать строки ERB перед отображением:Затем можно использовать следующие строки (с помощью devise):
Это может работать не во всех ситуациях, и может быть аргумент, что определения кода и строк не следует смешивать (особенно с точки зрения СУХОЙ), но мне кажется, что это хорошо работает. Код должен быть адаптирован для многих других ситуаций, при этом важны следующие моменты:
источник
Я думаю, что простой способ сделать это - просто сделать:
источник
Почему бы не использовать первый способ, а разделить его как
А потом
источник