Một số cân nhắc:
1. Bản dịch
Ai sẽ thực hiện các bản dịch? Những người cũng được kết nối với trang web? Một cơ quan dịch thuật? Khi sử dụng Gettext, bạn sẽ làm việc với các tệp 'pot' (.po). Các tệp này chứa ID thông báo và chuỗi thông báo (bản dịch). Ví dụ:
msgid "A string to be translated would go here"
msgstr ""
Bây giờ, cái này trông đẹp và dễ hiểu cho những ai cần dịch cái này. Nhưng điều gì sẽ xảy ra khi bạn sử dụng các từ khóa, như Mike gợi ý, thay vì các câu đầy đủ? Nếu ai đó cần dịch một msgstr có tên "address_home", người đó không biết liệu đây có phải là tiêu đề "Home address" hay đó là một câu đầy đủ. Trong trường hợp này, hãy đảm bảo thêm nhận xét vào tệp ngay trước khi bạn gọi hàm gettext, như sau:
/// This is a comment that will be included in the pot file for the translators
gettext("ready_for_lost_episode");
Sử dụng xgettext --add-comments=///
khi tạo các tệp .po sẽ thêm các nhận xét này. Tuy nhiên, tôi không nghĩ Gettext được sử dụng theo cách này. Ngoài ra, nếu bạn cần thêm nhận xét với mọi văn bản bạn muốn hiển thị, bạn sẽ a) có thể mắc lỗi vào một lúc nào đó, b) toàn bộ tập lệnh của bạn sẽ được lấp đầy bởi các văn bản, chỉ ở dạng nhận xét, c) nhận xét cần được đặt ngay phía trên Gettext hàm, không phải lúc nào cũng thuận lợi, tùy thuộc vào vị trí của hàm trong mã của bạn.
2. Bảo trì
Khi trang web của bạn phát triển (thậm chí hơn nữa) và các tệp ngôn ngữ của bạn cùng với nó, có thể sẽ khá khó khăn để duy trì tất cả các bản dịch khác nhau theo cách này. Mỗi khi bạn thêm văn bản, bạn cần tạo tệp mới, gửi tệp cho người dịch, nhận lại tệp, đảm bảo cấu trúc vẫn nguyên vẹn (người dịch háo hức luôn sẵn lòng dịch theo cú pháp, làm cho toàn bộ tệp không sử dụng được :)), và kết thúc với việc nhập các bản dịch mới. Chắc chắn là có thể làm được, nhưng hãy lưu ý các vấn đề có thể xảy ra ở đầu này với các trang web lớn và nhiều ngôn ngữ khác nhau.
Tùy chọn khác:kết hợp lựa chọn thay thế thứ 2 và thứ 3 của bạn:
Cá nhân tôi thấy hữu ích hơn khi quản lý bản dịch bằng CMS (đơn giản), giữ các biến và bản dịch trong cơ sở dữ liệu và tự xuất các văn bản liên quan sang tệp ngôn ngữ:
- thêm các biến vào cơ sở dữ liệu (ví dụ:id, trang, biến);
- thêm bản dịch vào các biến này (ví dụ:id, varId, ngôn ngữ, bản dịch);
- chọn các biến và bản dịch có liên quan, ghi chúng vào tệp;
- đưa tệp ngôn ngữ có liên quan vào trang web của bạn;
- tạo hàm của riêng bạn để hiển thị văn bản biến:
text('var');
hoặc có thể giống như __('faq','register','lost_password_text');
Điểm 3 có thể đơn giản như chọn tất cả các biến và bản dịch có liên quan từ cơ sở dữ liệu, đặt chúng vào một mảng và ghi mảng đã được serlial hóa vào một tệp.
Ưu điểm:
-
Sự bảo trì. Duy trì các văn bản có thể dễ dàng hơn rất nhiều đối với các dự án lớn. Bạn có thể nhóm các biến theo trang, các phần hoặc các phần khác trong trang web của mình, bằng cách chỉ cần thêm một cột vào cơ sở dữ liệu của bạn để xác định phần nào của trang web mà biến này thuộc về. Bằng cách đó, bạn có thể nhanh chóng kéo lên danh sách tất cả các biến được sử dụng trong ví dụ:trang Câu hỏi thường gặp.
-
Đang phiên dịch. Bạn có thể hiển thị biến với tất cả các bản dịch của tất cả các ngôn ngữ khác nhau trên một trang. Điều này có thể hữu ích cho những người có thể dịch văn bản sang nhiều ngôn ngữ cùng một lúc. Và có thể hữu ích khi xem các bản dịch khác để có cảm nhận về ngữ cảnh sao cho bản dịch tốt nhất có thể. Bạn cũng có thể truy vấn cơ sở dữ liệu để tìm ra những gì đã được dịch và những gì chưa được dịch. Có thể thêm dấu thời gian để theo dõi các bản dịch có thể đã lỗi thời.
-
Truy cập. Điều này phụ thuộc vào người sẽ dịch. Bạn có thể kết hợp CMS bằng một thông tin đăng nhập đơn giản để cấp quyền truy cập cho những người từ cơ quan dịch thuật nếu cần và chỉ cho phép họ thay đổi một số ngôn ngữ nhất định hoặc thậm chí một số phần nhất định của trang web. Nếu đây không phải là một tùy chọn, bạn vẫn có thể xuất dữ liệu ra một tệp có thể được dịch theo cách thủ công và nhập nó sau (mặc dù điều này có thể đi kèm với các vấn đề tương tự như đã đề cập trước đây). Bạn có thể thêm một trong các bản dịch đã có (tiếng Anh hoặc ngôn ngữ chính khác) làm ngữ cảnh cho người dịch.
Nói chung, tôi nghĩ bạn sẽ thấy rằng bạn sẽ có nhiều quyền kiểm soát hơn đối với các bản dịch theo cách này, đặc biệt là về lâu dài. Tôi không thể cho bạn biết bất cứ điều gì về tốc độ hoặc hiệu quả của cách tiếp cận này so với hàm gettext gốc. Tuy nhiên, tùy thuộc vào kích thước của các tệp ngôn ngữ, tôi không nghĩ rằng nó sẽ có sự khác biệt lớn. Nếu bạn nhóm các biến theo trang hoặc phần, bạn vẫn có thể chỉ bao gồm các phần bắt buộc.