
Làm đa ngôn ngữ cho plugin của bạn không dùng plugin WordPress
Hi AE.
Trong bài viết này AE sẽ biết được cách tự viết tập tin dịch cho plugin của mình mà không cần dùng thêm plugin ngoài.
Đầu tiên AE cần hiểu về 3 tập tin POT, PO, MO.
Đơn giản lập tin POT là tập tin theo dạng template (mẫu) để định nghĩa các key từ khoá của AE.
Tập tin PO là tập tin tương ứng cho mỗi ngôn ngữ khác nhau và tập tin MO là tập tin mã hoá của PO.
Đầu tiên AE phải quy định domain của AE ví dụ plugin của mình là Securi thì tên domain là securi hoặc cái chi đó cũng được miễn là không trùng với các domain khác.
AE thêm domain vào plugin AE như sau
add_action( 'init', 'wpdocs_load_textdomain' );
function wpdocs_load_textdomain(){
load_plugin_textdomain( 'securi', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
Sau đó trong file plugin của AE sẽ có đoạn còm để AE khai báo về plugin name, version thì AE sử dụng mẫu sau.
/**
* Plugin Name: Securi
* Plugin URI: https://dalathub.com
* Description: Create a staging clone site for testing & developing
* Author: tinhpt.38@gmail.com
* Author URI: https://dalathub.com
* Version: 1.0.0
* Text Domain: securi
* Domain Path: /languages/
*/
Trong code của AE sẽ dùng một số hàm của WP, mình dùng hàm __(‘key’,’domain’) để cho WP hiểu và dịch theo ngôn ngữ, code của mình như ni.
echo __('Securi','securi');
echo '<h1>'. __('First name','securi') .'</h1>';
Code này mình viết tại file securi.php và dòng 35, 36 AE nhớ chỗ này.
Tiếp theo mình sẽ tạo một folder để chứa tập tin ngôn ngữ là /languages/ nằm trong folder plugin của AE.
Để tạo file POT đúng chuẩn và ít tốn công sức AE nên dùng WP-CLI. AE tự search cách cài nhen dễ thôi.
Mở terminal lên sau đó cd vào folder plugin của AE sau đó chạy lên như ni securi là tên domain của AE.
wp i18n make-pot . languages/sucuri.pot
AE sẽ có file như này
# Copyright (C) 2021 tinhpt.38@gmail.com
# This file is distributed under the same license as the Securi plugin.
msgid ""
msgstr ""
"Project-Id-Version: Securi 1.0.0\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/securi\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2021-08-21T02:59:15+00:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"X-Generator: WP-CLI 2.5.0\n"
"X-Domain: securi\n"
#. Plugin Name of the plugin
#: securi.php:26
#: securi.php:27
#: securi.php:35
msgid "Securi"
msgstr ""
#. Plugin URI of the plugin
#. Author URI of the plugin
msgid "https://dalathub.com"
msgstr ""
#. Description of the plugin
msgid "Create a staging clone site for testing & developing"
msgstr ""
#. Author of the plugin
msgid "tinhpt.38@gmail.com"
msgstr ""
#: securi.php:37
msgid "First name"
msgstr "First name POT"
Vậy là setup ổn rồi. Giờ AE sẽ tạo tập tin dịch bằng phần mềm Poedit. AE mở như hình dưới ni rồi AE chọn file POT mà AE đã tạo ra ở bước trên.

Nó sẽ ra như ni. Ở đây AE nhớ chọn là Vietnnamese chứ không phải là Vietnnamese (Vietnam)

Sau đó AE chỉ cần chọn rồi dịch thôi.

Sau đó AE lưu lại thì nhớ phải lưu với tên là securi-vi.po không có đoạn securi phía trước nó không nhận cho AE đâu.
Chúc AE thành công.