Web đa ngôn ngữ không còn xa lạ gì với công nghệ web 2.0 nữa, không chỉ website lớn mà cả những website nhỏ và trung bình cũng có nhu cầu sử dụng đa ngôn ngữ để giúp cho người dùng có thể đọc được, điều này giúp cho website giữ được lượng khách truy cập và sẽ xuất hiện nhiều khách hàng tiềm năng hơn.
1. Web đa ngôn ngữ là gì?
Web đa ngôn ngữ là web có thể xem ở nhiều ngôn ngữ khác nhau, đây là dạng web dành cho những trang tin tức, thương mại điện tử hoặc những website muốn đánh vào nhiều quốc gia khác nhau trên thế giới.
Để xây dựng một website đa ngôn ngữ thì có hai vấn đề chính mà lập trình viên (Coder) và khách hàng (Customer) cần phải chú ý như sau:
- Khách hàng: Đòi hỏi phải dịch hầu hết các bài viết trong website nên tốn nhiều thời gian và tiền bạc. Tuy nhiên nếu khách hàng muổn website chỉ dịch một số bài thôi thì điều này cần phải bàn bạc thêm với Coder để họ xử lý cho bạn.
- Lập trình viên: Bạn phải dựa vào yêu cầu của khách hàng và từ đó phân tích được độ lớn của dự án mà chọn giải pháp tối ưu nhất có thể. Thông thường những website nhỏ thì ta sử dụng PHP và MySQL để xây dựng luôn.
Nói chung quy lại cho dễ hiểu thì trong bài này mình sẽ hướng dẫn các bạn cách thiết kế CSDL đơn giản cho một website đa ngôn ngữ.
2. Cách thiết kế CSDL website đa ngôn ngữ
Như mình phân tích ở trên thông thường có hai dạng yêu cầu web đa ngôn ngữ đó là:
- Web dịch toàn bộ bài
- Web chỉ dịch một số bài
Dịch toàn bộ bài viết
Trường hợp này ta có một số cách thiết kế như sau:
Cách 1: Mỗi table ta sẽ lưu số trường bằng tương ứng với số ngôn ngữ. Ví dụ website làm 3 ngôn ngữ thì mình lưu trường title
là title_en
, title_vi
, title_cn
. Như vậy nếu mở rộng thì sẽ rất khó khăn vì ta phải vào hệ thống thêm từng field.
Cách 2: Mỗi field ta sẽ lưu dạng thẻ xml dạng <lang>nội dung</lang>
. Ví dụ <vi>Nội dung</vi><en>Content</en>
. Với cách lưu này khi mở rộng ta không cần phải bổ sung field. Tuy nhiên có hai điểm yếu, thứ nhất nếu dữ liệu quá nhiều vượt quá mức lưu trữ của MySQL thì sẽ mất dữ liệu, thứ hai tuy nhiên ban phải sử dụng thêm PHP để lập trình thật chặc chẽ (dùng Regular Expression để bóc tách).
Cách 3: Mỗi table ta sẽ lưu trữ thêm một table đa ngôn ngữ và một table liên kết nữa. Ví dụ có table News(id, titlte, content, status) với hai field title
và content
là đa ngôn ngữ thì ta bổ sung thêm table language như hình sau:
Với cách lưu trữ này khi ban thêm mới một ngôn ngữ thì chỉ cần bổ sung dữ liệu vào bảng Language
.
Dịch một số bài viết
Với yêu cầu này thì hơi rườm rà nên mình đưa ra một cách đơn giản để các bạn tham khảo.
Chúng ta chỉ cần một bảng và trong bảng đó sẽ có một số field liên hệ với nhau như sau: News (id, title, content, language, parent_id)
Giả sử mình chọn ngôn ngữ tiếng Việt làm ngôn ngữ chính thì khi thêm một bài viết mới nếu bài này dành cho tiếng Việt thì ta không cần chọn parrent_id
, ngược lại nếu là ngôn ngữ khác thì ta phải chọn parent_id
(chính là bài tiêng Việt).
Lúc này dư liệu như sau:
Như vậy ta phải dựa vào ha field language
và parrent_id
đẻ xử chuyển ngôn ngữ cho thật chính xác.
Lưu ý: Để xử lý nhuần nhuyễn và chính xác các cách trên thì đòi hỏi ban phải thành thạo PHP, MySQL, Javascript để xử lý phía backend lẫn frontend.