Làm thế nào để thực hiện một bản dịch plugin WordPress?


19

Cách tốt nhất để tạo một plugin đã sẵn sàng dịch là gì?

Nó không phải được dịch từ đầu nhưng nó phải dễ dịch để các nhà phát triển đồng nghiệp từ các nền văn hóa khác nhau có thể tham gia vào quá trình bản địa hóa của plugin.

Câu trả lời:


38

1. Viết với nội địa hóa trong tâm trí

Không sử dụng echohoặc print()để tạo đầu ra văn bản, thay vào đó hãy sử dụng các chức năng của WordPress __()_e():

/** Not localization friendly */
echo "Welcome to my plugin";    
// OR
print("Welcome to my plugin");

/** Localization friendly */
_e('Welcome to my plugin', 'my-plugin');
// OR
$my_text = __('Welcome to my plugin', 'my-plugin');
echo $my_text;

_e()__()sẽ cung cấp bản dịch - bằng ngôn ngữ hiện tại - của văn bản được cung cấp làm tham số đầu tiên. _e()sẽ xuất văn bản trong khi __()sẽ trả lại nó.

Tham số thứ hai là miền văn bản , bạn sẽ sử dụng nó để nói với WordPress rằng văn bản được cung cấp làm tham số đầu tiên thuộc về plugin này, bạn có thể sử dụng bất kỳ tên nào bạn muốn nhưng tôi thích sử dụng cùng tên như tôi đã sử dụng cho plugin tập tin của thư mục, tôi thấy nó trực quan hơn.

Làm cách nào để xuất văn bản động như: "Xin chào <tên người dùng>"?

Với __()sprintf():

/** Get the username */
$username = 'Magictrick';

/** Not localization friendly */
echo "Hello $username";     

/** Localization friendly */
printf(__('Hello %s', 'my-plugin'), $username);
// OR 
$my_text = sprintf(__('Hello %s', 'my-plugin'), $username);
echo $my_text;

2. Chuẩn bị các tệp .pot / .po / .mo

Định nghĩa

  • Tệp .pot : được nhà phát triển plugin xử lý theo ý của bạn và nó được sử dụng làm điểm khởi đầu để tạo bản dịch mới, WordPress không sử dụng nó.
  • Tệp .po : là tệp dịch mà bạn hoặc người khác đã bắt đầu và có thể đã hoàn thành, WordPress không sử dụng tệp đó.
  • Tệp A.mo : được Poedit tự động tạo bất cứ khi nào bạn lưu tệp .po, tất cả những gì bạn có thể làm với các tệp này là tải lên hoặc tải lên lại bất cứ khi nào bạn tạo hoặc cập nhật tệp .po. WordPress được dịch từ các tập tin .mo .

Mở Poedittạo một danh mục mới (Tập tin Catallog mới ...) với các cài đặt sau:

  • Thông tin dự án: Sử dụng thông tin của bạn (hoặc nhóm của bạn), ngôn ngữ và quốc gia phải phù hợp với ngôn ngữ mặc định của plugin của bạn
  • Đường dẫn:
    • Đường dẫn cơ sở: .
    • Đường dẫn: xóa tất cả & thêm .., (chúng tôi sẽ lưu trữ tệp ngôn ngữ trong thư mục con plugin được gọi là ngôn ngữ)
  • Từ khóa: xóa tất cả & thêm ___e

Lưu danh mục dưới dạng và quét các tệp plugin của bạn để tìm văn bản có thể dịch bằng cách nhấn nút cập nhật. Khi cập nhật kết thúc đóng danh mục đó, bạn sẽ không cần cập nhật tệp đó trừ khi bạn thêm các chuỗi có thể dịch mới (nghĩa là được bao trong hoặc ) vào plugin của bạn./my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin.pot__()_e()

Bây giờ, hãy tạo bản dịch đầu tiên (tôi sẽ sử dụng fr_FR):

Sử dụng Podeit , tạo một danh mục từ tệp POT (Tập tin Danh mục mới từ tệp POT ...) :

  • Thông tin dự án: Sử dụng thông tin của bạn (hoặc nhóm của bạn), thay đổi ngôn ngữ và quốc gia , tôi sẽ sử dụng tiếng Pháp và tiếng Pháp
  • Đường dẫn: Đừng thay đổi
  • Từ khóa: Đừng chage

Lưu danh mục như . Dịch một số hoặc tất cả các chuỗi, lưu lại tệp .po, tải lên cả tệp .po và .mo./my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin-fr_FR.po

Lưu ý rằng bất cứ khi nào bạn lưu tệp .po, tệp .mo được tạo cùng tên, tên tệp của tệp .po là rất quan trọng , nó bao gồm sự kết hợp của miền văn bản plugin (my-plugin) và ngôn ngữ địa phương ( fr_FR), luôn đặt tên tệp .po của bạn cho các plugin như thế này: [textdomain] - [locale] .po , đây là một số ví dụ:

  • Ý / Ý: wpcf7-it_IT.po
  • Bồ Đào Nha / Brazil: wpcf7-pt_BR.po
  • Tiếng Ả Rập: wpcf7-ar.po... Vâng!

Bất cứ khi nào plugin được cập nhật với văn bản mới, hãy cập nhật tệp po, dịch chuỗi mới và tải lại các tệp .po và .mo

3. Hướng dẫn plugin tải văn bản dịch cho ngôn ngữ hiện tại

Ở đâu đó trong plugin của bạn, bạn phải bảo WordPress sử dụng tệp .mo của mình, bạn có thể làm điều đó bằng cách sử dụng mã này vào đầu tệp plugin của mình:

function my_plugin_init() {
  load_plugin_textdomain( 'my-plugin', false, 'my-plugin/languages' );
}
add_action('init', 'my_plugin_init');

Thay thế my-pluginbằng tên plugin của bạn trong tham số thứ 1 và thứ 3 của load_plugin_textdomainhàm.

4. Kiểm tra và khắc phục sự cố

Một số lý do nó có thể không hoạt động:

  • Chuỗi không được nhập vào tệp .pot hoặc .po
    • → Cài đặt danh mục sai (đường dẫn hoặc từ khóa hoặc cả hai)
  • Văn bản không được dịch trên trang web WordPress
    • → .mo tệp cho ngôn ngữ đó bị thiếu hoặc có tên tệp sai
    • → Miền văn bản không được sử dụng (thay thế _e('my text')bằng _e('my text', 'my-plugin'))
    • → Miền văn bản không được tải (sử dụng ví dụ ở trên với các tham số phù hợp, WP sẽ không cảnh báo bạn về các lỗi)

3
+1 Bài viết hay :) Hãy xem bài viết này: Tải các tệp ngôn ngữ WordPress đúng cách , " Hướng dẫn thực tế để giảm bớt nỗi đau khi tải các tệp ngôn ngữ trong WordPress ". :::::: GlotpressPolyglots nhóm có thể đáng nói quá.
brasofilo

Cảm ơn cho hướng dẫn tốt đẹp này! Điều đáng nói là load_plugin nhiệtdomain () cần được gọi trong mọi phương thức, trong đó bạn sử dụng _e () và __ ()
Andreas

2

Câu trả lời của Nabil khá đầy đủ nhưng có một biến thể dễ dàng được cung cấp:

  1. Plugin của bạn nằm trong kho plugin của WordPress.org

  2. Bạn sẵn sàng yêu cầu plugin của bạn chỉ hoạt động với WordPress 4.6 trở lên.

Các bước là:

  1. Trong tệp readme.txt của plugin, hãy thêm Requires at least: 4.6. Xem https://developer.wordpress.org/plugins/wordpress-org/how-your-readme-txt-works/

  2. nếu chưa, hãy tải plugin của bạn lên kho lưu trữ plugin WordPress. Xem https://wordpress.org/plugins/developers/add/ .

  3. Tìm tên miền sên / văn bản của plugin của bạn. Để làm điều đó, hãy truy cập trang plugin của bạn trên kho lưu trữ plugin WordPress. URL sẽ giống như https://wordpress.org/plugins/your-plugin-slug/ . Đó là phần cuối cùng của URL, tiếng sên-plugin-sên của bạn, là sên của plugin. Đó là những gì bạn sử dụng cho miền văn bản của chức năng dịch.

  4. Sử dụng các chức năng dịch của WordPress trong plugin của bạn (như __e(‘hello’, ‘my-plugin-domain’);). Chỉ cần đảm bảo sử dụng tên miền văn bản plugin chính xác, có được trong bước trước. Xem https://developer.wordpress.org/plugins/i quốc tế hóa / how-to-i quốc tế-your-plugin / để biết thêm thông tin.

Nếu bạn thực hiện các bước trên, WordPress sẽ chăm sóc:

  • Phân tích cú pháp thông qua Plugin của bạn cho tất cả các chuỗi có thể dịch (không cần cài đặt và chạy Poedit hoặc bất cứ thứ gì)
  • Giúp mọi người dễ dàng đóng góp bản dịch cho plugin của bạn trên translate.wordpress.org (không cần có trang web riêng của bạn để dịch plugin của bạn hoặc có một quy trình tùy chỉnh để người dịch gửi bản dịch của họ cho bạn)
  • Khi ai đó sử dụng plugin của bạn, WordPress sẽ kiểm tra xem nó có dịch sang ngôn ngữ của họ không và nếu có, hãy hiển thị nó bằng ngôn ngữ của họ (không cần họ, hoặc bạn, để tải các tệp dịch lên trang web của họ)

(Trả lời từ bài đăng trên blog của tôi ở đây: https://cmljnelson.blog/2019/01/01/the-really-lazy-way-to-translate-a-wordpress-plugin/ )


Tôi không chắc tại sao điều này lại bị hạ thấp. Đó là những gì tôi đã làm để tạo ra wordpress.org/plugins/print-my-blog sẵn sàng dịch (và plugin đã được dịch thành công)
thespacecamel

Điều đó có nghĩa là nếu một plugin / theme không có trong kho plugin của WordPress mà sử dụng miền văn bản của plugin trong đó, wordpress sẽ tải các tệp dịch sai?
Bodo

Câu hỏi hay @bodo. Nếu một plugin cho biết sử dụng miền văn bản của một plugin khác trong repo wp.org, tôi nghĩ rằng WordPress sẽ vui vẻ sử dụng các tệp dịch của plugin wp.org. Nhưng xin lỗi, tôi không chắc.
thespacecamel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.