ฉันแนะนำคำตอบที่โพสต์โดย Martin
แต่ดูเหมือนว่าคุณจะกังวลเกี่ยวกับข้อความค้นหาของคุณที่ซับซ้อนเกินไป:
ในการสร้างตารางที่แปลเป็นภาษาท้องถิ่นสำหรับทุกตารางจะทำการออกแบบและทำการสืบค้นที่ซับซ้อน ...
ดังนั้นคุณอาจจะคิดว่าแทนที่จะเขียนคำง่ายๆเช่นนี้:
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");
และฉันแน่ใจว่าคุณสามารถทำได้ดีกว่านั้น
กุญแจสำคัญคือการมีตารางและเขตข้อมูลของคุณชื่อในลักษณะที่เหมือนกัน