VIEW
STORED PROCEDURE
INDEX
FULL TEXT SEARCH
TRIGGER
TIPS
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Thiết kế CSDL đa ngôn ngữ với MySQL

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.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

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ữ.

Bài viết này được đăng tại [free tuts .net]

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 titletitle_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 titlecontent là đa ngôn ngữ thì ta bổ sung thêm table language như hình sau:

web da ngon ngu php png

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:

web da ngon ngu php 2 png

Như vậy ta phải dựa vào ha field languageparrent_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.

3. Lời kết

Như vậy trong bài này mình đã giới thiệu web đa ngôn ngư là gì và đưa ra một số cách lưu trữ CSDL tương ứng cho từng trường hợp cụ thể. Tuy nhiên đó là ý kiến riêng của bạn thân mình nên có thể nó không hay lắm, vì vậy nếu bạn có cách khác hay hơn thì xin hãy bổ sung bằng cách bình luận bên dưới để mình có thể đưa vào bài viết giúp hoàn thiện hơn.

Cùng chuyên mục:

Hàm ENCRYPT trong MySQL

Hàm ENCRYPT trong MySQL

Cách sử dụng ENCRYPT trong MySQL

Hàm MD5 trong MySQL

Hàm MD5 trong MySQL

Cách sử dụng MD5 trong MySQL

Hàm OLD_PASSWORD trong MySQL

Hàm OLD_PASSWORD trong MySQL

Cách sử dụng OLD_PASSWORD trong MySQL

Hàm PASSWORD trong MySQL

Hàm PASSWORD trong MySQL

Cách sử dụng PASSWORD trong MySQL

Hàm ASCII trong MySQL

Hàm ASCII trong MySQL

Cách sử dụng ASCII trong MySQL

Hàm CHAR_LENGTH trong MySQL

Hàm CHAR_LENGTH trong MySQL

Cách sử dụng CHAR_LENGTH trong MySQL

Hàm CHARACTER_LENGTH trong MySQL

Hàm CHARACTER_LENGTH trong MySQL

Cách sử dụng CHARACTER_LENGTH trong MySQL

Hàm CONCAT trong MySQL

Hàm CONCAT trong MySQL

Cách sử dụng CONCAT trong MySQL

Hàm CONCAT_WS trong MySQL

Hàm CONCAT_WS trong MySQL

Cách sử dụng CONCAT_WS trong MySQL

Hàm FIELD trong MySQL

Hàm FIELD trong MySQL

Cách sử dụng FIELD trong MySQL

Hàm FIND_IN_SET trong MySQL

Hàm FIND_IN_SET trong MySQL

Cách sử dụng FIND_IN_SET trong MySQL

Hàm FORMAT trong MySQL

Hàm FORMAT trong MySQL

Cách sử dụng FORMAT trong MySQL

Hàm INSERT trong MySQL

Hàm INSERT trong MySQL

Cách sử dụng INSERT trong MySQL

Hàm INSTR trong MySQL

Hàm INSTR trong MySQL

Cách sử dụng INSTR trong MySQL

Hàm LCASE trong MySQL

Hàm LCASE trong MySQL

Cách sử dụng LCASE trong MySQL

Hàm LEFT trong MySQL

Hàm LEFT trong MySQL

Cách sử dụng LEFT trong MySQL

Hàm LENGTH trong MySQL

Hàm LENGTH trong MySQL

Cách sử dụng LENGTH trong MySQL

Hàm LOCATE trong MySQL

Hàm LOCATE trong MySQL

Cách sử dụng LOCATE trong MySQL

Hàm LOWER trong MySQL

Hàm LOWER trong MySQL

Cách sử dụng LOWER trong MySQL

Hàm LPAD trong MySQL

Hàm LPAD trong MySQL

Cách sử dụng LPAD trong MySQL

Top