Надо сделать сайт с поддержкой многоязычности. И вот к чему я пришел.
Во-первых, структура публикаций выходит одинаковая (новости, статьи…).
То есть для использования прекрасно подходит SingleTableInheritance. При таком подходе все поля очень близких по структуре классов сводятся в одну таблицу в БД.
Также надо добавить поле “type” – тип публикации. Он будет содержать имя класса, на самом деле.

Далее, надо что-то сделать с языком. Вариант №1 – сделать композитный первичный ключ, который будет состоять из id + language. Но мне больше нравится вариант с разделением локализуемой части и нелокализуемой:

И далее по ссылкам:
compositekeys gem и ее практическое использование в rails
Также для Content задействовал Scope-out.
Чтобы модель “знала” какой язык сейчас запрошен:
...
$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 < ActionController::Base
...
before_filter :set_model_language
private
def set_model_language
@@language = params[:lang] || $language
ActiveRecord::Base.set_language @@language
end
end
## app/models/news.rb
class Content < ActiveRecord::Base
scope_out :localized, :conditions => ['language=?', defined?(@@language) ? @@language : $language]
...
end
Задумался, как бы получше сделать локализацию Views. Пока думаю о написании helper’а, который будет подставлять из конфига стоки вместо констант – как упрощенный вариант ActiveCulture.
Кто чего подскажет?
Эм… не советовал бы использовать language поле в Content
потому как при выборке база отдаст быстрее Нужные ноды, так как они меньше по размерам , чем нужные контент по языку.
DeViL
January 14th, 2008
я после долгих танцев с бубном пришел к выводу, что иногда проще сделать шаблоном – типа @@@NAME@@@ – берем из словаря по коду NAME , значение.
Конвертацию я сделал на выходе.
т.е. у меня делаеться вся страничка, а перед ее выводом я конверчю.
интернет бизнес
January 14th, 2008
интернет бизнес
я думал в сторону < %= t :text_to_translate %>
dm
January 14th, 2008