Consiglio la risposta inviata da Martin.
Ma sembri preoccupato che le tue domande diventino troppo complesse:
Creare una tabella localizzata per ogni tabella sta rendendo complessa la progettazione e l'interrogazione ...
Quindi potresti pensare che invece di scrivere semplici query come questa:
SELECT price, name, description FROM Products WHERE price < 100
... dovresti iniziare a scrivere domande del genere:
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
Non è una prospettiva molto carina.
Ma invece di farlo manualmente dovresti sviluppare la tua classe di accesso al database, che pre-analizza il codice SQL che contiene il tuo markup di localizzazione speciale e lo converte nel codice SQL effettivo che dovrai inviare al database.
L'uso di quel sistema potrebbe assomigliare a questo:
db.setLocale("en");
db.query("SELECT p.price, _(p.name), _(p.description)
FROM _(Products p) WHERE price < 100");
E sono sicuro che puoi fare ancora meglio.
La chiave è avere tabelle e campi denominati in modo uniforme.