ruby-on-rails - 如何避免 Globalize3 将属性的回退翻译返回到特定上下文?

标签 ruby-on-rails internationalization fallback globalize3

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

class Role  
  translates :name, :fallbacks_for_empty_translations => true
  # rest of class definition

我这样做是因为我想在当前语言环境中没有翻译或为空时显示默认翻译,并且这按预期工作。
但是,在我的表单中,我想要相反的内容:我希望每个引用不同于默认语言环境的语言环境的输入不显示任何值,除非在 role_translations 表中有该属性的值。这是我创建输入的方式:
<%= textfield 'role', "name_#{locale}", :class => ... %> 

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

最佳答案

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

  def read_translated_attribute(name)
    globalize.stash.contains?(Globalize.locale, name) ? globalize.stash.read(Globalize.locale, name) : translation_for(Globalize.locale).send(name)
  end

然后,您只需要在表单中明确设置输入值,如下所示:
<%= text_field 'role', "name_#{locale}", :value => @role.read_translated_attribute(:name), :class => ... %>

关于ruby-on-rails - 如何避免 Globalize3 将属性的回退翻译返回到特定上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19798158/

相关文章:

php - Ratchet PHP zeromq 回退到旧浏览器

ruby-on-rails - 在事件记录库中添加某些方法的首选方法是什么?

ruby-on-rails - 在模型中生成图像 URL - ActiveStorage

php - 生成 Yii 翻译消息文件

ruby-on-rails - 用于数据库表的 Rails 3 I18n

html - CSS 3D 变换属性

ruby-on-rails - 嵌套 Controller 中未初始化的常量错误

ruby-on-rails - Linux 上的 Rails 控制台总是在每行末尾显示\r

vue.js - Vue3 : i18n plugin won't find localization in json file

spring - 如果远程存储库不可用,如何为 Spring Cloud Config 服务设置本地后备配置?