Tôi nghĩ rằng tôi đã tìm thấy một giải pháp, nhưng trước một chút
Tiền đề
load_theme_textdomain()
và load_child_theme_textdomain()
về cơ bản là bằng nhau, sự khác biệt duy nhất là đường dẫn mặc định họ sử dụng:
- họ lấy ngôn ngữ hiện tại (sử dụng
get_locale()
) và thêm tệp .mo tương đối vào đường dẫn được truyền dưới dạng đối số;
- sau đó họ gọi
load_textdomain()
chuyển qua làm đối số cả tên miền văn bản và đường dẫn kết quả đến tệp .mo.
Sau đó load_textdomain
tải tệp .mo vào biến văn bản toàn cầu, nhưng như chúng ta có thể đọc từ nguồn :
Nếu tên miền đã tồn tại, các bản dịch sẽ được hợp nhất.
Nếu cả hai bộ có cùng một chuỗi, bản dịch từ giá trị ban đầu sẽ được thực hiện.
Vì vậy, để ghi đè / chỉ thay thế các chuỗi của chủ đề mà chúng ta muốn, chúng ta cần tải một tệp .mo tùy chỉnh cho tên miền văn bản gốc, chỉ chứa các chuỗi đó được dịch, trước khi chủ đề gốc tải tệp .mo của nó.
Giải pháp
Cuối cùng, tôi chỉ cần tạo một thư mục có tên của chủ đề gốc (chỉ để thuận tiện) vào thư mục ngôn ngữ chủ đề con và đặt vào đó các tệp .mo tùy chỉnh của tôi cho tên miền văn bản gốc (một cho ngôn ngữ, trong xx_XX.mo
biểu mẫu, nơi xx_XX
là mã ngôn ngữ).
Và sau đó tôi đã thêm một dòng trong functions.php
tệp chủ đề con trong khi after_setup_theme
hành động, gần dòng tải tệp .mo cho miền văn bản chủ đề con tôi:
add_action( 'after_setup_theme', function () {
// load custom translation file for the parent theme
load_theme_textdomain( 'parent-textdomain', get_stylesheet_directory() . '/languages/parent-theme' );
// load translation file for the child theme
load_child_theme_textdomain( 'my-child-theme', get_stylesheet_directory() . '/languages' );
} );
Vì functions.php
tệp của chủ đề con được tải trước tệp gốc, nên chuỗi này sẽ được ưu tiên so với bản dịch chủ đề gốc (hoặc tôi có thể chỉ đặt mức độ ưu tiên bằng tham số thứ ba của add_action
hàm).
Lưu ý: Tôi có thể sử dụng load_child_theme_textdomain
thay vì load_theme_textdomain
, như đã nói trong tiền đề nó sẽ giống nhau.