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

Cách chạy hoặc tải các tệp .po / .mo để bản địa hóa trong php

Trước hết, bạn cần thông báo cho PHP biết bạn đang sử dụng ngôn ngữ và miền nào.

putenv("LANG=da_DK"); 
setlocale('LC_ALL', "da_DK"); 
bindtextdomain("mycatalog", "./locale/");  
textdomain("mycatalog");

Trong trường hợp này, tôi đang có bản dịch tiếng Đan Mạch và tệp có tên mycatalog.mo (và .po). Các tệp này được đặt (từ thư mục gốc của bạn) tại đây:locale / da_DK / LC_MESSAGES / mycatalog.mo / po

Để hiển thị bản dịch của bạn, bạn sẽ làm như sau:

echo _("Hello world");   // Which would become "Hej verden"

_ (); là một bí danh của gettext (); Điều thông minh về gettexts là nếu không có bản dịch, bạn sẽ không có mã ngôn ngữ xấu xí như "MSG_HELLO_WORLD" trong giao diện người dùng của mình, mà thay vào đó là một lựa chọn thay thế tốt hơn:Chỉ đơn giản là văn bản tiếng Anh thuần túy.

Trong tệp tin messages.po, bạn phải có tất cả các thông báo (phân biệt chữ hoa chữ thường và liên quan đến dấu phẩy, dấu chấm, dấu hai chấm, v.v. được sử dụng) trên biểu mẫu này:

msgid "Hello world!"
msgstr "Hej verden!"

Khi bạn đã thêm tệp này vào tệp .po của mình, bạn mở tệp này trong poedit, nhấn "Lưu" và nó sẽ tạo tệp .mo. Tệp này được tải lên cùng thư mục với tệp .po (thường giống như \ locale \ da_DK \ LC_MESSAGES \ từ thư mục gốc)

Để dịch nội dung động / biến, bạn có thể sử dụng - trong số những thứ khác - sprintf, theo cách sau:

echo sprintf(_("My name is %s"), $name);

Trong trường hợp này,% s sẽ xuất hiện trong tệp .po; Khi bạn có chuỗi đã dịch (chứa% s), sprintf sẽ đảm bảo thay thế% s bằng nội dung biến. NẾU biến cũng phải được dịch, bạn có thể thực hiện việc này:

echo sprintf(_("The color of my house is %s"), _($color));

Sau đó, bạn không cần một câu đầy đủ cho mỗi màu, nhưng bạn vẫn nhận được các màu được dịch.

Điều quan trọng cần lưu ý là lần đầu tiên tệp .mo được chạy trên máy chủ, nó sẽ được lưu vào bộ nhớ đệm - và không có cách nào để xóa tệp này khỏi bộ đệm mà không cần khởi động lại (Apache hoặc tương tự như vậy là đủ). Điều này có nghĩa là bất kỳ thay đổi nào bạn thực hiện đối với .mo sau lần đầu tiên nó được sử dụng, sẽ không có hiệu lực. Có một số thủ thuật để giải quyết vấn đề này, nhưng thành thật mà nói, chúng hầu hết không đẹp lắm (chúng bao gồm sao chép .mo, thêm thời gian () đằng sau nó, sau đó nhập và lưu vào bộ nhớ cache lại). Đoạn cuối cùng này chỉ quan trọng nếu bạn không dịch toàn bộ nội dung cùng một lúc mà dịch theo từng đoạn.

Nếu bạn muốn tạo công cụ dịch của riêng mình tại một số điểm, công cụ này sẽ giúp bạn chuyển đổi .po sang .mo bằng PHP:

http://www.josscrowcroft.com/2011/code/php-mo-convert-gettext-po-file-to-binary-mo-file-php/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi MySQL 1153 - Có gói lớn hơn byte 'max_allowed_packet'

  2. PHP:mysql_connect không trả về FALSE

  3. Bắt đầu nhanh di chuyển cơ sở dữ liệu bằng Talend

  4. Tìm bài đăng có tag1 VÀ tag2? (sử dụng một bảng nối) Tồn tại / Có / truy vấn con ... Sử dụng gì?

  5. Tạo ứng dụng web từ Scratch bằng Python Flask và MySQL:Phần 2