Rails i18n API 三重 Dashes/Hyphens、省略号和换行符
Rails i18n API Triple Dashes/Hyphens, Ellipsises and Newlines
我使用 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() 方法。它 do/can 不检查值列并添加重复条目。
有解决办法吗?
翻译模型:
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
您在 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')
我使用 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() 方法。它 do/can 不检查值列并添加重复条目。
有解决办法吗?
翻译模型:
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
您在 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')