Rails i18n API三重破折号/连字符,省略号和换行符

时间:2018-03-22 12:03:21

标签: mysql ruby-on-rails internationalization rails-i18n

我正在使用i18n API。我用:

种子MySQL数据库
Translation.find_or_create_by(locale: 'en', key:'key1', value: 'value1')

但是,在种子之后,数据将保存在数据库中:

locale: en
key: key1
value: --- value1\n...\n

所有列都是varchar(255)和' utf8_unicode_ci'。

在Rails i18n文档中,我无法找到解释。

由于这个问题,我不能使用find_or_create_by()方法。它/不能检查值列并添加重复的条目。

有没有解决方案?

翻译模型:

Translation = I18n::Backend::ActiveRecord::Translation

if Translation.table_exists?
  I18n.backend = I18n::Backend::ActiveRecord.new

  I18n::Backend::ActiveRecord.send(:include, I18n::Backend::Memoize)
  I18n::Backend::Simple.send(:include, I18n::Backend::Memoize)
  I18n::Backend::Simple.send(:include, I18n::Backend::Pluralization)

  I18n.backend = I18n::Backend::Chain.new(I18n::Backend::Simple.new, I18n.backend)
end

1 个答案:

答案 0 :(得分:1)

您在value列中所看到的是值serialized to YAML(由I18n::Backend::ActiveRecord::Translation完成的);除其他外,这是多元化所必需的。

当存储在数据库中的值需要序列化时,

#find_or_create_by不能很好地工作

做一个简单的种子尝试:

Translation.create_with(value: 'value1').find_or_create_by(locale: 'en', key: 'key1')