Вы можете использовать Globalize.with_locale
для временной установки локали, это работает и для представлений:
<% Globalize.with_locale(some_other_locale) do %>
in this part of the page locale will be <%= locale.inspect %>
<% end %>
Но для вашего случая более удобный способ сделать форму динамической c, поэтому этот пользователь может добавить перевод для нескольких языков по своему вкусу.
Глобализация переводов - это просто дополнительная таблица / модель YourModel::Translation
с полями для локали и переведенными полями, поэтому вы можете работать с ними напрямую, как с любым другим вложенным forms.
Добавьте gem cocoon в ваш проект, который будет обрабатывать динамические c формы (если вы используете webpacker вместо конвейера ресурсов - для добавления глобальных параметров могут потребоваться дополнительные шаги) jquery и требуют js от gem с использованием erb-интерполяции, см. Больше здесь ).
В вашей модели:
translates :description #, ...
accepts_nested_attributes_for :translations, allow_destroy: true
в контроллере:
def your_some_params
params.require(:your_model_name).permit(
...
translations_attributes: [
:id, :_destroy,
:locale,
:description,
]
)
end
в форме:
<div id='translations'>
<%= form.fields_for :translations do |t| %>
<%= render 'translation_fields', f: t %>
<% end %>
<div class='links'>
<%= link_to_add_association 'add translation', form, :translations %>
</div>
</div>
частичный для переводов, таких как:
<div class='nested-fields'>
<%= f.hidden_field :id %>
<%= f.select :locale, I18n.available_locales %>
<%= f.text_area :description %>
<%= link_to_remove_association "remove this translation", f %>
</div>