5

我应该如何为我使用 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 %>
4

2 回答 2

11

批量翻译 gem 已经很老了,我在使用新版本的 Rails 时遇到了困难。我偶然发现了另一个名为globalize-accessors 的gem ,它支持 Rails 4。很棒的是它可以让您访问诸如title_enteaser_es等方法title_fr

因此,例如,如果您有一个名称应该是所有语言的 Feature 模型,您可以执行以下操作:

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

使用该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
于 2014-09-07T09:29:54.093 回答
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 %>

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

于 2013-10-22T20:44:34.237 回答