После того как попробовал всякие методы, в своей разработке пришел к выводу который сейчас опишу. В моей стране 2 языка являются основными, распределение нечеткое т.к. многие свободно говорят на 2 языках, но предпочитают какой-то один, "родной". Тем не менее русскоговорящих порядка 30-40%. При создании платформы встал вопрос о мультиязычности контента, т.к. 90% местных заказчиков естественно хотят иметь минимум 2 языка. В результате организовалось нечто следующее:
В базе есть таблицы:
language{
id (int 2),
name (varchar 200),
shortname (varchar 3),
prefix (varchar 2),
default (int 1)
};
localization{
id (int 6)
alias (varchar 200)
value (blob)
langid
};
Все материалы помимо id имеют groupid и languageid, что собсно позволяет объединять их по материалам и языкам. В таблице принадлежностей (например картинок) всё хранится используя groupid, соответственно товар всегда будет иметь одинаковые картинки для всех языков. С информационными материалами сделали проще - картинки загружаются админом в аплоадную папку и прикрепляются в пост по прямому прописанному линку, т.е.
в базе не хранятся, не очень красиво, зато избавляет от проблем привязки изображений с разным лексическим контекстом. Таблица localization для перевода статического контента, во вьюшке прописывается хелпер вывода языкового алиаса
<?=Locale::get("some_alias")?>