Вместо того, чтобы использовать собственную систему перевода, вы исследовали какие-либо "готовые" разновидности?
Например, есть Глобализация , которая делает многое для вас.
Наличие таблицы с составным ключом, представляющей соединение одной записи в таблице с другой, будет такой большой проблемой. Как правило, вам необходимо поддерживать ассоциацию A <-> B как пару разновидностей A-> B и B-> A.
Как насчет общего примера:
class Language < ActiveRecord::Base
belongs_to :phrase
has_many :translations,
:through => :phrase
end
class Phrase < ActiveRecord::Base
has_many :translations
end
class Translation < ActiveRecord::Base
belongs_to :language
belongs_to :phrase
end
В этом случае фраза - это вид записи, представляющей переводимый термин. В зависимости от обстоятельств он может обозначать «французский», «английский» или «нажмите здесь».
Используя эту структуру, очень просто найти подходящий термин для описания языка на любом языке, который вы определили.
Например, примерно:
<%= link_to(Language.find_by_code('fr').phrase.translation.find_by_language_id(session_language_id), '/fr') %>