Рекомендую відповідь, опубліковану Мартіном.
Але ви, мабуть, стурбовані тим, що ваші запити стають занадто складними:
Щоб створити локалізовану таблицю для кожної таблиці, це складний дизайн та запит ...
Тож ви можете думати, що замість того, щоб писати прості запити на зразок цього:
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");
І я впевнений, що ти можеш зробити ще краще, що це.
Головне, щоб ваші таблиці та поля були названі однаково.