Я рекомендую ответ, опубликованный Мартином.
Но вы, похоже, обеспокоены тем, что ваши запросы становятся слишком сложными:
Создание локализованной таблицы для каждой таблицы усложняет разработку и составление запросов ...
Так что вы можете подумать, что вместо того, чтобы писать простые запросы вроде этого:
SELECT price, name, description FROM Products WHERE price < 100
... вам нужно начать писать такие запросы:
SELECT
p.price, pt.name, pt.description
FROM
Products p JOIN ProductTranslations pt
ON (p.id = pt.id AND pt.lang = "en")
WHERE
price < 100
Не очень красивая перспектива.
Но вместо того, чтобы делать это вручную, вы должны разработать свой собственный класс доступа к базе данных, который предварительно анализирует SQL, содержащий вашу специальную разметку локализации, и преобразует его в фактический SQL, который вам нужно будет отправить в базу данных.
Использование этой системы может выглядеть примерно так:
db.setLocale("en");
db.query("SELECT p.price, _(p.name), _(p.description)
FROM _(Products p) WHERE price < 100");
И я уверен, что вы можете сделать это еще лучше.
Главное, чтобы ваши таблицы и поля были названы одинаково.