我为Locales和Translations提供了两个fixture文件。 语言环境加载正常,但翻译被破坏:
夹具
translation_05064:
id: 5064
key: control.base_search_users.panel.title
value: Поиск пользователей
interpolations:
locale: ru
locale_id: 16
is_proc: false
成为记录:
#<Translation id: 5064,
key: "control.base_search_users.panel.title",
value: "Поиск пользователей",
interpolations: nil,
locale: nil,
locale_id: 1019186233,
is_proc: false>
由于某种原因,区域设置而不是'ru'变为nil,而 locale_ib 而不是 16 变为< em> 1019186233 用于文件中的每个夹具。
我按照这样的方式加载灯具:
require 'active_record/fixtures'
ActiveRecord::Fixtures.reset_cache
fixtures_folder = File.join(Rails.root, 'test', 'fixtures')
fixtures = Dir[File.join(fixtures_folder, '*.yml')].map {|f| File.basename(f, '.yml') }
ActiveRecord::Fixtures.create_fixtures(fixtures_folder, fixtures)
翻译模式
class Translation < ActiveRecord::Base
validates :key, :uniqueness => {:scope => :locale_id}
validates :key, :locale, :locale_id, :value, :presence => true
belongs_to :locale
attr_accessible :key, :value, :locale_id, :locale
end
迁移
class CreateTranslations < ActiveRecord::Migration
def change
create_table :translations do |t|
t.string :key
t.text :value
t.text :interpolations
t.string :locale
t.integer :locale_id
t.boolean :is_proc, :default => false
end
add_index :translations, [:key, :locale]
end
end
我在test.log中看到,插入到DB包含损坏的数据。当我使用YAML.load_file 'test/fixtures/translations.yml'
在rails concole中加载fixture文件时,我得到了正确的哈希数据。
为什么会这样?如何解决? Rails-2.3.8 , PostgreSql-8.4
更新 尝试过命名的灯具。在locales.yml:
locale_00016:
id: 16
code: ru
name: Русский
并在translations.yml中将所有区域设置键值设置为locale_00016
translation_05064:
id: 5064
key: control.base_search_users.panel.title
value: Поиск пользователей
locale: locale_00016
is_proc: false
是的,有效!
翻译 id 引用现有且正确的区域设置记录,但区域设置仍为零,为了解决这个问题,我运行了Locale.find_by_code('ru').translations.update_all(:locale => 'ru')
答案 0 :(得分:1)
如果设置locale_id
,似乎没问题;当你需要它时,locale
将被Rails填充(你第一次请求它)。 1019186233是rais在创建灯具时生成的id。
大多数情况下,你不需要在灯具中指定id,rails会为你生成它们,所以下面的灯具应该没问题(你不应该同时定义locale
和locale_id
翻译夹具):
locales.yml:
ru:
what_ever_attr: value
...
translations.yml:
ru_title_translation:
key: control.base_search_users.panel.title
value: Поиск пользователей
interpolations:
locale: ru
is_proc: false