Rails and multilingual site
Надо сделать сайт с поддержкой многоязычности. И вот к чему я пришел.
Во-первых, структура публикаций выходит одинаковая (новости, статьи...).
То есть для использования прекрасно подходит SingleTableInheritance. При таком подходе все поля очень близких по структуре классов сводятся в одну таблицу в БД.
Также надо добавить поле "type" - тип публикации. Он будет содержать имя класса, на самом деле.
Далее, надо что-то сделать с языком. Вариант №1 - сделать композитный первичный ключ, который будет состоять из id + language. Но мне больше нравится вариант с разделением локализуемой части и нелокализуемой:
И далее по ссылкам:
compositekeys gem и ее практическое использование в rails
Также для Content задействовал Scope-out.
Чтобы модель "знала" какой язык сейчас запрошен:
[cc lang="ruby"]
## config/environment.rb
...
$language = 'ru'
...
## config/initializers/activerecord_localized.rb
class ActiveRecord::Base
def self.set_language(lang)
@@language = lang
end
end
## app/controllers/application.rb
class ApplicationController ['language=?', defined?(@@language) ? @@language : $language]
...
end
[/cc]
Задумался, как бы получше сделать локализацию Views. Пока думаю о написании helper'а, который будет подставлять из конфига стоки вместо констант - как упрощенный вариант ActiveCulture.
Кто чего подскажет?