multilanguage-banner
Chắc hẳn trong quá trình triển khai các ứng dụng web cho doanh nghiệp, sẽ không ít lần bạn đối mặt với vấn đề đa ngôn ngữ. Đa ngôn ngữ có 2 dạng chính là đa ngôn ngữ giao diện (Template) và đa ngôn ngữ dữ liệu. Vấn đề đa ngôn ngữ giao diện thì không khó triển khai và dễ bắt gặp trong nhiều ứng dụng. Trong phạm vi bài viết này, mình sẽ giới thiệu tới các bạn 2 cách phổ biến để triển khai đa ngôn ngữ cho dữ liệu lưu trữ.

Vấn đề lưu trữ dữ liệu đa ngôn ngữ đối với các bạn chưa quen thì thường để triển khai 1 chức năng nào đó, ví dụ như sản phẩm, mỗi ngôn ngữ sẽ cần 1 cột trong database để lưu. Nếu như có M dữ liệu cần lưu theo ngôn ngữ trong 1 table và có N ngôn ngữ cần triển khai thì bạn cần ít nhất MxN cột trong table đó để lưu dữ liệu. Điều này sẽ tốt với ứng dụng 1 hoặc 2 ngôn ngữ và số lượng ngôn ngữ là thông dụng và hầu như không thay đổi như là VN và EN. Tuy nhiên triển khai như vậy sẽ không tốt về mặt thiết kế, khả năng mở rộng không có và viết truy vấn sẽ hơi phức tạp một tí vì phải select tương ứng cột mà mình muốn (sẽ phải thao tác trên tên cột). Dưới đây là hình minh họa table lưu thông tin sản phẩm ở 4 ngôn ngữ theo cách này.
multilanguage-database-table1

Ngoài giải pháp này, còn có 1 giải pháp khá phổ biến và được sử dụng rộng rãi đó là sử dụng mô hình table kết hợp để kết nối ngôn ngữ và dữ liệu cần lưu. Mô hình này phức tạp hơn một xíu, tuy nhiên nó giúp cho ứng dụng đa ngôn ngữ được mở rộng tối đa, có bao nhiêu ngôn ngữ thì tùy và nếu có thêm hay bớt 1 ngôn ngữ thì không phải thay đổi table nào cả nên hoàn toàn là thao tác trên dữ liệu. Dưới đây là hình minh họa table lưu thông tin như trên nhưng sử dụng mô hình kết hợp table.
multilanguage-database-table2

Đối với mô hình table kết hợp, để lấy được dữ liệu để hiển thị cho 1 ngôn ngữ thì chỉ cần INNER JOIN thêm 2 table là table kết hợp và table language để lấy ra đúng record.
VD:
SELECT *
FROM product p
INNER JOIN product_language pl ON p.p_id = pl.p_id
INNER JOIN language l ON l.l_id = pl.l_id AND l.l_code = "vn"

Hãy thử triển khai theo cách này xem, bạn sẽ thấy việc thêm bớt ngôn ngữ trong phần dữ liệu trong ứng dụng của mình sẽ nhẹ nhàng hơn và code mang tính portability khá cao và bất chấp ngôn ngữ và số lượng ngôn ngữ. Chúc vui.

Bài viết liên quan:

31 Lời bình cho bài viết “Lưu dữ liệu đa ngôn ngữ trong Database”

Viết lời bình



Bình luận mới nhất