Как указано в документации globalize, вам не нужно добавлять переводимый столбец в миграцию таблицы, а передавать его как аргумент для создания таблицы перевода.
class CreatePosts < ActiveRecord::Migration
def up
create_table :posts do |t|
# no foo column specified here
t.timestamps null: false
end
Post.create_translation_table! foo: :string
end
end
class Post < ActiveRecord::Base
translates :foo, :fallbacks_for_empty_translations => true
end
При этом не будут созданы отдельные столбцы для каждого языка, а будет создана новая запись в таблице переводов для каждого языка, связанного с каждой записью в основной таблице модели.
Если вы правильно установили
config.i18n.fallbacks = true
и установите :en
в качестве языка по умолчанию, при получении значения поля foo всякий раз, когда значение, зависящее от локали, отсутствует, по умолчанию будет использоваться значение English. Например, учитывая два сообщения (post1
и post2
) с данными
[#<Post::Translation id: 1, post_id: 1, locale: "en", foo: 'Italy'>,
#<Post::Translation id: 2, post_id: 1, locale: "jp", foo: 'Hetalia'>,
#<Post::Translation id: 3, post_id: 2, locale: "en", foo: 'Finland'>,
#<Post::Translation id: 4, post_id: 2, locale: "jp", foo: ''>]
если вы используете японский язык, вы получите
post1.foo # => 'Hetalia'
post2.foo # => 'Finland'
person
Marco Sandrini
schedule
26.11.2015