Как реализовать все переводы в одной форме с помощью Mobility Gem в Rails?
В моем приложении Rails я использую Gemility Gem для переводов
Как построить форму со всеми переводами, например:
- имя [en]: _______
- имя [фр]: ________
- имя [де]: _______
- ...
Какой самый лучший способ?
1 ответ
Решение
На самом деле нет никакой документации по этому поводу, но нетрудно создать такую форму с помощью Mobility.
Вот пример, если у вас есть объект @post
с переведенным атрибутом title
:
<%= form_for @post do |f| %>
<% I18n.available_locales.each do |locale| %>
<div>
<% attr_name = "title_#{Mobility.normalize_locale(locale)}" %>
<%= f.label attr_name %>
<%= f.text_field attr_name %>
</div>
<% end %>
<%= f.submit %>
<% end %>
В вашем контроллере вам придется permit
а также локализованные имена атрибутов, что-то вроде:
def update
# ...
@post.update(permitted_params)
# ...
end
# ...
private
def permitted_params
params.require(:post).permit(I18n.available_locales.map { |l|
:"title_#{Mobility.normalize_locale(l)}"
})
end