全局化可用语言环境子集的访问者

时间:2017-12-08 19:20:30

标签: ruby-on-rails-4 globalize

按照设计,某些类只处理可用语言的子集。

globalize-accessors gem非常有用,但渲染需要定义以下内容

Class.globalize_attribute_names

所以在available_locales = [:en, :ru, :fr, :de]期间,目标是使用较小的数组[:en, :ru]

documentation个州Calling globalize_accessors with no options will therefore generate accessor methods for all translated fields and available languages。但是所谓的调用方式是在模型中

globalize_accessors :locales => [:en, :fr], :attributes => [:title] 

globalize_accessors方法如何引用数组,这是由

之类的数据生成的
@post.owner.ownerlocales.pluck('locale')

(虽然引用了数组值......)

1 个答案:

答案 0 :(得分:0)

找到了一个工作解决方案,但没有解决上述问题,是基于全球化访问者的事实

  

允许您访问方法:title_pl,title_en,title_pl =,title_en =

因此,生成白名单的控制器方法

@locales =  []
@post.owner.ownerlocales.each do |ol|
  locale = ol.locale
  @locales.push(locale)
end

...然后在视图中处理过滤掉白名单中的globalize_processors

<% Post.globalize_attribute_names.each do |lang| %>
  <% my_string = lang.to_s %>
  <% @locales.each do |locale| %>
    <% checkstring = "_" + locale %>
    <% if my_string.include? checkstring %>
      <div class="row">
        <%= t(lang[0..-4]) %> &nbsp;&nbsp;-&nbsp;&nbsp; <%= lang[-2, 2] %> <br />
        <%= f.text_area lang, rows: "3" %>
      </div>
    <% end %>
  <% end %>
<% end %>

效率不高,功能齐全。