Tôi đề nghị câu trả lời được đăng bởi Martin.
Nhưng bạn dường như lo ngại về các truy vấn của mình trở nên quá phức tạp:
Để tạo bảng được bản địa hóa cho mỗi bảng, hãy thiết kế và truy vấn phức tạp ...
Vì vậy, bạn có thể nghĩ rằng, thay vì viết các truy vấn đơn giản như thế này:
SELECT price, name, description FROM Products WHERE price < 100
... bạn sẽ cần bắt đầu viết các truy vấn như thế:
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
Không phải là một quan điểm rất đẹp.
Nhưng thay vì thực hiện thủ công, bạn nên phát triển lớp truy cập cơ sở dữ liệu của riêng mình, đó là phân tích trước SQL có chứa đánh dấu nội địa hóa đặc biệt của bạn và chuyển đổi nó thành SQL thực tế mà bạn sẽ cần gửi đến cơ sở dữ liệu.
Sử dụng hệ thống đó có thể trông giống như thế này:
db.setLocale("en");
db.query("SELECT p.price, _(p.name), _(p.description)
FROM _(Products p) WHERE price < 100");
Và tôi chắc chắn rằng bạn có thể làm tốt hơn thế.
Điều quan trọng là để các bảng và trường của bạn được đặt tên theo cách thống nhất.