如何使用globalize和rails 4在一个表单中显示所有翻译的字段

Mur*_*tza 5 ruby ruby-on-rails globalize

我如何为我的模型编写表单,我使用rails 4和https://github.com/globalize/globalize进行翻译.我想在一个表单中显示所有翻译,如下例所示.我在这里找到了一个解决方案https://github.com/rilla/batch_translations但我不知道如何实现这一点.这个"批量翻译"是一个宝石还是什么?以及如何安装它.

<h1>Editing post</h1> 

   <% form_for(@post) do |f| %>
     <%= f.error_messages %>

     <h2>English (default locale)</h2>
     <p><%= f.text_field :title %></p>
     <p><%= f.text_field :teaser %></p>
     <p><%= f.text_field :body %></p>

     <hr/>

     <h2>Spanish translation</h2>
     <% f.globalize_fields_for :es do |g| %>
       <p><%= g.text_field :title %></p>
       <p><%= g.text_field :teaser %></p>
       <p><%= g.text_field :body %></p>
     <% end %>

     <hr/>

     <h2>French translation</h2>
     <% f.globalize_fields_for :fr do |g| %>
       <p><%= g.text_field :title %></p>
       <p><%= g.text_field :teaser %></p>
       <p><%= g.text_field :body %></p>
     <% end %>

   <% end %>
Run Code Online (Sandbox Code Playgroud)

Ada*_*per 11

批量翻译宝石很老了,我在使用较新版本的Rails时遇到了困难.我偶然在另一个名为宝石Globalize的-存取,它支持Rails的4.什么是伟大,是因为它可以让你获得类似的方法title_en,teaser_es,title_fr等等.

因此,例如,如果您有一个名称应该包含在所有语言中的功能模型,则可以执行以下操作:

# => Feature Model (feature.rb)
class Feature < ActiveRecord::Base
  translates :name
  globalize_accessors :attributes => [:name]
end
Run Code Online (Sandbox Code Playgroud)

使用该Feature.globalize_attribute_names方法将给出一个[:name_en, :name_es, :name_fr]可以在form_for帮助器中使用的数组:

//New Feature (new.html.haml)
= form_for @feature do |f|
  - Feature.globalize_attribute_names.each do |lang|
    = f.text_field lang
  = f.submit
Run Code Online (Sandbox Code Playgroud)


str*_*eil 3

你考虑过这样的事情吗?

<%= form_for(@post) do |f| %>
     <%= f.error_messages %>

    <% [:en, :es, :fr].each do |lang| %>
      <h2><%= lang %> translation</h2>
      <% f.globalize_fields_for lang do |g| %>
        <% [:title, :teaser, :body].each do |field| %>
          <p><%= g.text_field field %></p>
        <% end %>
      <% end %>
      <hr/>
    <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

您应该能够自动获取这些区域和字段的列表。然后您只需要一个区域到语言名称的映射,就像{ en: 'English', es: 'Spanish', fr: 'French'}您可以输出正确的语言名称而不是区域代码。(这可能也已经在某个地方可用了。)