Xây dựng website đa ngôn ngữ có nhiều vấn đề, 1 trong số đó là cách lưu trữ nội dung trong CSDL cho từng ngôn ngữ. Mình xin chia sẻ một vài giải pháp thông dụng như sau:
1. Hướng tiếp cận dạng cột
Cách này khá phổ biến, nhưng chỉ dùng cho hệ thống nhỏ và ít ngôn ngữ, cơ bản là tạo ra nhiều cột lưu trữ nội dung từng ngôn ngữ.
Ví dụ:
Categories- id- name_en- name_vi- description_en- description_vi- created_atƯu điểm:
Không bị trùng dữ liệu vì chĩ có 1 dòng cho mỗi mẫu tin và chỉ có các cột ngôn ngữ được nhân bản. Dễ thực hiện
Nhược điểm:
Khó duy trì. Dù dễ dàng với 2-3 ngôn ngữ nhưng không thích hợp khi có nhiều ngôn ngữ hoặc nhiều cột. Khó thêm ngôn ngữ mới
2. Hướng tiếp cận nhiều dòng
Tương tự như cách ở trên, cách này tạo ra nhiều dòng dữ liệu thay vì nhân bản các cột theo ngôn ngữ
Categories- id- name- description- created_at
Cách này có bao nhiêu ngôn ngữ thì sẽ có bấy nhiêu dòng cho cùng 1 mẫu tin
Ưu điểm:
Dễ thêm ngôn ngữ mới
Nhược điểm:
Nhiều nội dung trùng tại các cột chứa nội dung chung không cần chuyển ngữ
3. Hướng tiếp cận dạng bảng
Cách này phức tạp hơn 2 cách trên, nhưng thích hợp cho website động, có nhiều ngôn ngữ và có ý định thêm ngôn ngữ mới dễ dàng. Thay vì chỉ có 1 bảng dùng chuyển ngữ cho tất cả các bảng khác, bây giờ sẽ có 1 bảng dùng chuyển ngữ tưng ứng với 1 bảng. Di chuyển các cột cần chuyễn ngữ sang bảng dùng chuyển ngữ, còn lại các cột dùng chung (các cột không cần chuyển ngữ)
Categories- id- created_at
Languages
– id
– name
Category_language
– id
– language_id
– category_id
– name
– description
Ưu điểm:
Dễ thêm ngôn ngữ mới
Dễ truy vấn
Tên các cột được giữ nguyên
Không bị trùng lặp dữ liệu
Nhược điểm:
Tạo ra nhiều bảng chuyển ngữ tương ứng với các bảng