Я хотел бы к i18n текст, который похож на это:
Уже подписанный?Авторизоваться!
Обратите внимание, что существует ссылка на текст. На этом примере это указывает на Google - в действительности это укажет на мое приложение log_in_path
.
Я нашел два способа сделать это, но ни один из них не выглядит "правильным".
Первым путем я знаю, включает наличие этого мой en.yml
:
log_in_message: "Already signed up? Log in!"
И по моему мнению:
<%= t('log_in_message', :url => login_path) %>
Это работает, но наличие часть на
en.yml
не выглядит очень чистым мне.
Другая опция, которую я знаю, использует локализованные представления - login.en.html.erb
, и login.es.html.erb
.
Это также не чувствует себя хорошо, так как единственная другая строка была бы вышеупомянутой; остальная часть представления (~30 строк) была бы повторена для всех представлений. Это не был бы очень DRY.
Я предполагаю, что мог использовать "локализованный partials", но это кажется также cumberstone; я думаю, что предпочитаю первую опцию наличию такого количества крошечных файлов представления.
Таким образом, мой вопрос: существует ли "надлежащий" способ реализовать это?
en.yml
log_in_message_html: "This is a text, with a %{href} inside."
log_in_href: "link"
login.html.erb
<p> <%= t("log_in_message_html", href: link_to(t("log_in_href"), login_path)) %> </p>
Почему бы не использовать первый способ, но разделить его на
log_in_message: Already signed up?
log_in_link_text: Log in!
И затем
<p> <%= t('log_in_message') %> <%= link_to t('log_in_link_text'), login_path %> </p>