Как реализовать все переводы в одной форме с помощью 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
Другие вопросы по тегам