Tôi đang gặp sự cố khi nhận dữ liệu từ cơ sở dữ liệu của mình mà tôi đã tạo ra là đa ngôn ngữ và tôi hy vọng ai đó ở đây có thể giúp tôi.Làm thế nào để sử dụng Yii với mô hình cơ sở dữ liệu đa ngôn ngữ?
Tôi đã chia tất cả các bảng của mình thành 2 phần; bảng “phổ quát” (không chứa bất kỳ văn bản nào cần được dịch) và bảng chứa tất cả các trường cần được dịch cùng với bản dịch của chúng.
bảng Ví dụ:
base_material
id
picture
base_material_i18n
base_material_id
localization_id
name
description
review_status
review_notes
localization
id
language_name
Query để có được những bản dịch (sử dụng tiếng Anh (en) như một ngôn ngữ giảm trở lại nếu không có bản dịch có sẵn):
SELECT o.id
, o.type
, o.code
, o.position
, ifnull(t.name,d.name) name
, ifnull(t.description,d.description) description
FROM base_material o
INNER JOIN base_material_i18n d
ON (o.id=d.base_material_id)
LEFT OUTER JOIN base_material_i18n t
ON (d.base_material_id=t.base_material_id AND t.localization_id='nl')
WHERE d.localization_id='en'
Câu hỏi của tôi là như thế nào Tôi có thể tự động nhận được những bản dịch đó (với ngôn ngữ rơi ngược như trong truy vấn này) gắn liền với mô hình của tôi trong Yii khi tôi đang tìm kiếm các đối tượng base_material? (Đây chỉ là 1 bảng ví dụ, nhưng hầu như tất cả các bảng của tôi (20+) được xây dựng theo cách này, vì vậy nếu có thể tôi sẽ cần một cái gì đó linh hoạt)
Ví dụ về hệ thống hiện tại sử dụng những gì tôi cần là Propel : http://propel.posterous.com/propel-gets-i18n-behavior-and-why-it-matters
Bất kỳ ý tưởng nào về cách thực hiện điều đó? Tôi đã kiểm tra các phần mở rộng Yii hiện có liên quan đến các trang đa ngôn ngữ (như Multilingual Active Record), nhưng tất cả đều sử dụng một thiết kế cơ sở dữ liệu khác (thông tin chung + ngôn ngữ thu gọn trong bảng chính, bản dịch trong bảng i18n), và tôi không chắc chắn cách thay đổi các tiện ích mở rộng đó để sử dụng loại mô hình DB của tôi.
Nếu ai đó biết cách thay đổi tiện ích mở rộng hiện tại để có thể sử dụng loại chương trình DB của tôi, thì điều đó hoàn toàn tuyệt vời và có lẽ là cách tốt nhất để thực hiện việc này.
Chỉnh sửa: Tôi đã thêm tiền thưởng vì tôi vẫn không thể tìm thấy bất kỳ điều gì về cách cho phép Propel làm việc với Yii (có tồn tại phần mở rộng cho Doctrine, nhưng Doctrine không hỗ trợ kiểu DB này với bản dịch hoặc), cũng không phải bất kỳ thông tin nào khác về cách xử lý việc này bằng cách sử dụng phần mở rộng Yii hiện có hoặc với phạm vi.
Chỉnh sửa: 98 lần xem nhưng chỉ 3 phiếu bầu và 1 nhận xét. Tôi không thể không cảm thấy như tôi đang làm điều gì đó sai ở đây, có thể là trong câu hỏi của tôi hoặc thiết kế ứng dụng/cơ sở dữ liệu; hoặc đó là vấn đề của tôi chỉ là rất độc đáo (điều đó sẽ làm tôi ngạc nhiên, vì tôi không nghĩ rằng thiết kế cơ sở dữ liệu đa ngôn ngữ của tôi là vô lý ;-). Vì vậy, nếu có ai biết giải pháp toàn diện tốt hơn cho các trang đa ngôn ngữ với Yii và/hoặc Propel (ngoài các tiện ích mở rộng hiện tại mà tôi thực sự không thích do trùng lặp các trường văn bản) hoặc điều gì đó tương tự, vui lòng cho tôi biết cũng.
Cảm ơn trước!
Nếu có thêm câu hỏi nào về lý do hoặc điều gì, hoặc nếu một điều gì đó không hoàn toàn rõ ràng, chỉ cần hỏi :-) – Xuntar
Xin lỗi bạn đang có một khó tìm ra câu trả lời. Tôi sẽ cố gắng giúp đỡ nếu tôi có thể. Vì vậy, về cơ bản bạn chỉ muốn một truy vấn chọn bản dịch được chọn và tiếng Anh cho bất kỳ giá trị nào mà ngôn ngữ được dịch cho mục đó không tồn tại đúng? Tôi muốn chắc chắn rằng tôi hiểu câu hỏi của bạn trước;) – Chiramisu
Xin chào Chiramusi và cảm ơn sự giúp đỡ của bạn. Các truy vấn tôi đã đăng trong câu hỏi của tôi hoạt động khi tôi chạy nó trong cơ sở dữ liệu của tôi, nhưng tôi tự hỏi làm thế nào tôi có thể làm điều này nhiều hơn "automagically". Phần mở rộng mà tôi đã liên kết để thêm bản dịch vào mô hình theo cách tự động và tôi muốn một cái gì đó tương tự cho cơ sở dữ liệu của tôi (phần mở rộng sử dụng lược đồ db khác) hoặc ý tưởng về cách thay đổi phần mở rộng đó để sử dụng bảng và thiết kế của tôi. Nếu không, nếu bạn biết cách sử dụng Propel với Yii, điều đó cũng sẽ rất tuyệt vời (vì Propel có kiểu bản dịch cơ sở dữ liệu này được tích hợp sẵn). – Xuntar