Polecam odpowiedź wysłaną przez Martina.
Ale wydaje ci się, że martwisz się, że twoje zapytania stają się zbyt złożone:
Aby utworzyć zlokalizowaną tabelę dla każdej tabeli, projektowanie i tworzenie zapytań jest skomplikowane ...
Być może myślisz, że zamiast pisać proste zapytania takie jak to:
SELECT price, name, description FROM Products WHERE price < 100
... musisz zacząć pisać takie zapytania:
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
Niezbyt ładna perspektywa.
Ale zamiast robić to ręcznie, należy opracować własną klasę dostępu do bazy danych, która wstępnie analizuje kod SQL zawierający specjalne znaczniki lokalizacji i konwertuje go na rzeczywisty kod SQL, który należy wysłać do bazy danych.
Korzystanie z tego systemu może wyglądać mniej więcej tak:
db.setLocale("en");
db.query("SELECT p.price, _(p.name), _(p.description)
FROM _(Products p) WHERE price < 100");
I jestem pewien, że możesz to zrobić jeszcze lepiej.
Kluczem do sukcesu jest równomierne nazwanie tabel i pól.