Ich empfehle die Antwort von Martin.
Sie scheinen jedoch besorgt darüber zu sein, dass Ihre Abfragen zu komplex werden:
Das Erstellen einer lokalisierten Tabelle für jede Tabelle macht das Entwerfen und Abfragen komplex ...
Sie denken also vielleicht, anstatt einfache Abfragen wie diese zu schreiben:
SELECT price, name, description FROM Products WHERE price < 100
... müssten Sie anfangen, solche Abfragen zu schreiben:
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
Keine sehr schöne Perspektive.
Anstatt dies manuell zu tun, sollten Sie eine eigene Datenbankzugriffsklasse entwickeln, die das SQL, das Ihr spezielles Lokalisierungs-Markup enthält, vorab analysiert und in das tatsächliche SQL konvertiert, das Sie an die Datenbank senden müssen.
Die Verwendung dieses Systems könnte ungefähr so aussehen:
db.setLocale("en");
db.query("SELECT p.price, _(p.name), _(p.description)
FROM _(Products p) WHERE price < 100");
Und ich bin sicher, dass Sie das noch besser machen können.
Der Schlüssel ist, dass Ihre Tabellen und Felder einheitlich benannt werden.