Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Làm thế nào để bạn làm cho cơ sở dữ liệu của bạn nói được nhiều ngôn ngữ?

Tình huống

Bạn là chủ sở hữu của một cửa hàng trực tuyến, đặt tại Ba Lan. Phần lớn khách hàng của bạn đến từ Ba Lan và họ nói tiếng Ba Lan. Nhưng bạn cũng muốn bán sản phẩm của mình ra nước ngoài và khách hàng quốc tế của bạn chủ yếu nói tiếng Anh. Vì vậy, bạn muốn cửa hàng trực tuyến của mình có sẵn bằng cả tiếng Ba Lan tiếng Anh . Bạn cũng mong đợi rằng các sản phẩm của mình sẽ bán chạy ở Pháp, vì vậy bạn dự đoán rằng bạn sẽ phải chuẩn bị một tiếng Pháp phiên bản của cửa hàng (và có thể cả tiếng Tây Ban Nha quá, vì tại sao không?).

Bạn muốn người dùng của mình có thể chuyển từ phiên bản tiếng Ba Lan

sang phiên bản tiếng Anh và trở lại.

Và rõ ràng là bạn muốn chi tiết sản phẩm chuyển từ tiếng Ba Lan sang tiếng Anh.

Làm thế nào để bạn tạo một ứng dụng web đa ngôn ngữ?

Có hai loại văn bản trong ứng dụng của bạn. Một là tĩnh dữ liệu:nhãn nút, tiêu đề bảng, đồ họa (thường chứa văn bản). Cái kia là do người dùng xác định dữ liệu, chẳng hạn như tên sản phẩm, giá sản phẩm, mô tả sản phẩm, v.v. Dữ liệu thường được lấy từ cơ sở dữ liệu.

Dữ liệu tĩnh là những gì bạn muốn viết dưới dạng chuỗi ký tự trong đầu ra của mình. Dữ liệu do người dùng xác định là dữ liệu mà bạn lấy từ cơ sở dữ liệu của mình.

Hôm nay tôi sẽ không nói về dữ liệu tĩnh. Bất kỳ khuôn khổ web hợp lý nào sẽ xử lý quá trình quốc tế hóa dữ liệu tĩnh. Tham khảo tài liệu về khung ứng dụng web của bạn để biết thêm chi tiết. Tìm kiếm các từ khóa như “quốc tế hóa”, “i18n”, “bản địa hóa” hoặc “bản dịch”.

Hôm nay tôi sẽ nói về cấu trúc cơ sở dữ liệu mà chúng ta thường sử dụng ở đây tại e-point để xử lý dữ liệu đa ngôn ngữ. Trong cơ sở dữ liệu cho cửa hàng của bạn, bạn có thể có product bảng lưu trữ thông tin về tất cả các sản phẩm có sẵn trong cửa hàng.




product bảng có các cột như name , descriptionprice . Khi dịch thông tin sản phẩm sang các ngôn ngữ khác, bạn chỉ phải dịch một số cột. Ở đây bạn sẽ chỉ dịch namedescription , nhưng price không thay đổi khi bạn chuyển đổi ngôn ngữ.

Khi chúng tôi thêm hỗ trợ cho nhiều ngôn ngữ, chúng tôi sẽ thêm một bảng mới có tên là language_version , nơi lưu trữ tất cả các phiên bản ngôn ngữ có sẵn trong cửa hàng. Chúng tôi thường thêm một cột có tên là code và một cái tên là is_default (với một ràng buộc thích hợp:chỉ có một phiên bản có thể là phiên bản mặc định).




Tiếp theo, chúng tôi tách product bảng thành hai bảng:bảng product và bảng product_lv . Đối với mỗi sản phẩm, sẽ có một hàng trong product bảng và nhiều hàng trong product_lv bàn; một hàng cho mỗi phiên bản ngôn ngữ. Bảng product_lv chỉ chứa các cột phải được dịch:namedescription . Các cột không phụ thuộc vào ngôn ngữ (như price , bởi vì bạn bán với cùng một mức giá bất kể khách hàng của bạn nói tiếng Anh hay tiếng Ba Lan) hãy ở trong bảng product .

Chúng tôi làm tương tự cho mọi bảng có chứa dữ liệu đã dịch. Dữ liệu đã dịch chuyển đến table_lv bảng, dữ liệu không phụ thuộc vào ngôn ngữ vẫn nằm trong bảng chính.

Ưu và nhược điểm

Một nhược điểm rõ ràng là tất cả các hoạt động tạo, truy xuất, cập nhật hoặc xóa (CRUD) trở nên phức tạp hơn một chút. Bạn luôn phải kết hợp với một bảng phiên bản ngôn ngữ bổ sung để có được mô tả phù hợp.

Ưu điểm của thiết kế này là bạn không phải thay đổi giản đồ cơ sở dữ liệu của mình khi bạn thêm phiên bản ngôn ngữ mới. Tôi không nói rằng việc thêm một phiên bản ngôn ngữ mới là dễ dàng. Sau cùng, bạn phải dịch TẤT CẢ các mô tả sản phẩm. Đây là một thách thức về mặt tổ chức nhưng theo quan điểm cơ sở dữ liệu thì khá dễ dàng:rất nhiều phụ trang.


Làm cách nào để bạn thiết kế cơ sở dữ liệu đa ngôn ngữ của mình?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Toán tử SET trong SQL

  2. Lần cuối cùng, KHÔNG, bạn không thể tin tưởng IDENT_CURRENT ()

  3. Cách đặt lại mật khẩu người dùng chính Amazon RDS

  4. Phát triển một mô-đun với Java 9 trong Eclipse IDE, Phần 2

  5. Rethink Flask - Một danh sách Todo đơn giản được hỗ trợ bởi Flask và RethinkDB