Tôi đã đấu tranh với điều này trong một thời gian. Một CMS của tôi đã sẵn sàng để được mở rộng với một mô-đun dịch. Tôi đã suy nghĩ về các phương pháp khác nhau nhưng chưa tìm ra cách tốt nhất cho đến nay.Cách tốt nhất để dịch nội dung dựa trên cơ sở dữ liệu
Về cơ bản tôi có CMS sử dụng hệ thống mẫu để phân tích tất cả dữ liệu từ cơ sở dữ liệu sang màn hình. Tôi đã cho đến nay để "chia nhỏ" các mẫu của tôi trong các thư mục khác nhau để có thể dịch những thứ "tĩnh" như hình ảnh có văn bản, liên kết chân trang, v.v.
Tuy nhiên, có nhiều mô-đun (trang, tin tức, sản phẩm) có nhiều trường yêu cầu phải dịch một phương pháp cơ sở dữ liệu. Tôi bắt đầu với một bảng "ngôn ngữ" mô tả ngôn ngữ (id, iso_code, name). Đó là như xa như tôi đã đến .. vì có một vài dự án đã được thực hiện tôi đã không dành nhiều thời gian hơn cho chủ đề này cho đến nay. Ý tưởng đầu tiên của tôi ("sửa chữa nhanh") là thêm nhiều trường bên trong các bảng (chẳng hạn như "title_nl", "title_en"), nhưng điều này thực sự làm cho cơ sở dữ liệu đông đúc hơn là cần thiết theo ý kiến của tôi.
Suy nghĩ thứ hai của tôi là tạo bảng, "news_translations" chẳng hạn. Trong đó có mã iso ngôn ngữ, một news_id, các lĩnh vực yêu cầu dịch thuật. Rõ ràng là news_id kết nối bản dịch với bản gốc và mã iso ngôn ngữ được sử dụng để lấy đúng ngôn ngữ từ cơ sở dữ liệu. Sau đó, trong mã front-end của tôi trước tiên tôi sẽ kiểm tra xem ngôn ngữ mặc định được chọn (=> chọn từ bảng "tin tức") hay bản dịch (=> kiểm tra bên trong bảng dịch). Nếu trường hợp thứ 2 không trả lại bất kỳ kết quả nào, thông báo sẽ hiển thị "Rất tiếc, không có bản dịch có sẵn" và mặc định được hiển thị (hoặc thông báo lỗi, điều gì phù hợp nhất với khách hàng ..).
Nhưng sau đó có tùy chọn thứ 3 .. tất cả các trang web của tôi đều sử dụng các liên kết thân thiện với công cụ tìm kiếm (www.domain.com/pagename/ hoặc www.domain.com/news/1-news-item-here.html). Sẽ tốt hơn nếu tôi có khả năng "ghi đè" URL SEF trong bảng dịch của tôi. Nhưng tôi đoán trong trường hợp này tôi sẽ luôn luôn cần thêm 1 truy vấn vào bảng dịch (vì trước tiên chúng tôi muốn kiểm tra một trang dịch) ... đoán nó không phải là một vấn đề lớn, nhưng đáng xem xét tôi đoán.
Cuối cùng tôi đoán bằng cách mô tả các tùy chọn số 3 là những gì tôi cần. Nhưng tôi cũng muốn có một số ý kiến khác về chủ đề này! Đây là những gì tôi đang cố gắng để đạt được:
- Tạo một hệ thống với sự hỗ trợ đa ngôn ngữ
- Không tập tin ngôn ngữ (rõ ràng đây là lý do tại sao tôi sử dụng các mẫu)
- Có khả năng dịch một trang gốc/newsitem CMS/sản phẩm
- tùy ý: để thay đổi URL SEF theo ngôn ngữ
tôi nghĩ tùy chọn 3 có tất cả điều này .. vì vậy các bước để tạo ra giải pháp này là:
Tạo một bảng _translation cho từng hạng mục (hoặc có lẽ ngay cả trong gốc bằng cách thêm 2 lĩnh vực mới 'translation_to' (chứa PrimaryKey) và 'translation_is' (chứa mã ISO) - tuy nhiên .. trong trường hợp đó tất cả các lĩnh vực sẽ cần phải được chỉnh sửa (mà không phải lúc nào cũng cần cần thiết .. cộng với việc tạo ra một bảng thứ hai, tôi giữ nguyên bản gốc chia với bản dịch của họ, phải không?)
Nếu ngôn ngữ mặc định KHÔNG được chọn truy vấn đầu tiên, bản dịch để tìm bản dịch, nếu một bản dịch được tìm thấy, hãy hiển thị bản dịch . Nếu không, hãy thông báo/lỗi cho người dùng và/hoặc hiển thị văn bản gốc (dựa trên URL SEF ... nếu SEF không được tìm thấy trong bản dịch hoặc bảng gốc, thì hiển thị chỉ một lỗi ).
Mọi đề xuất? :-)
Cảm ơn bạn đã suy nghĩ cùng!
Bạn đang cố gắng dịch nội dung hoặc hệ thống (CMS)? –
Xin lỗi nếu điều đó không rõ ràng. Tôi đang cố dịch nội dung! CMS bằng tiếng Anh, nếu điều đó phải thay đổi tại một thời điểm nhất định, tôi sẽ sử dụng bảng dịch dựa trên khóa. Vì đó là nhiều khả năng chỉ là những từ hoặc câu đơn giản :) –