如何避免Globalize3将属性的回退转换返回到特定上下文?

Aeg*_*gis 5 fallback ruby-on-rails internationalization globalize3

我正在使用Globalize3和easy_globalize_accesors进行网站的国际化/本地化工作,现在我正在调整表单以管理具有可能翻译的字段.假设我有一个名为Role的类:

class Role  
  translates :name, :fallbacks_for_empty_translations => true
  # rest of class definition
Run Code Online (Sandbox Code Playgroud)

我这样做是因为我想显示默认翻译,如果没有翻译或在当前语言环境中为空,这可以按预期工作.
但是,在我的形式中,我想要相反:我希望每个输入引用不同的语言环境而不是默认语言环境,以显示没有值,除非在role_translations表中有该属性的值.这是我创建输入的方式:

<%= textfield 'role', "name_#{locale}", :class => ... %> 
Run Code Online (Sandbox Code Playgroud)

目前,我发生的情况是,如果我创建了一个只有默认语言环境翻译的新角色,当我想编辑角色以将翻译添加到其他语言环境时,每个输入都会显示默认翻译的值.
提前致谢

rab*_*mar 6

您可以在模型中实现此方法:

  def read_translated_attribute(name)
    globalize.stash.contains?(Globalize.locale, name) ? globalize.stash.read(Globalize.locale, name) : translation_for(Globalize.locale).send(name)
  end
Run Code Online (Sandbox Code Playgroud)

然后你只需要明确地在表单中设置输入值,如下所示:

<%= text_field 'role', "name_#{locale}", :value => @role.read_translated_attribute(:name), :class => ... %>
Run Code Online (Sandbox Code Playgroud)