0

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

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

Class.globalize_attribute_names

所以虽然available_locales = [:en, :ru, :fr, :de],目标是使用更小的数组[:en, :ru]

文档指出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')

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

4

1 回答 1

0

找到了一个可行的解决方案,但没有解决上述问题,它基于 globalize-accessors 的事实

让您可以访问方法: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 %>

效率不高,功能齐全。

于 2017-12-09T10:34:12.803 回答