Ghi đè bản dịch lõi WordPress mặc định


11

WordPress được đặt thành ngôn ngữ Hà Lan. Khi tôi sử dụng get_the_archive_title()chính xác chủ đề của mình xuất ra "Phân loại: Tên danh mục" trên trang lưu trữ danh mục. Tuy nhiên tôi muốn đọc "Sectie: Category-name".

Tôi không muốn thay đổi tệp ngôn ngữ tiếng Hà Lan trong thư mục wp-content / ngôn ngữ, vì điều đó sẽ được cập nhật bởi các bản cập nhật WordPress.

Tôi đã thử sao chép tệp dịch đó, thay đổi bản dịch "danh mục" và đưa tệp nl_NL.mo mới vào chủ đề / ngôn ngữ của tôi. Điều này đã không có bất kỳ tác dụng.

Làm cách nào tôi có thể đạt được một bản dịch khác nhau cho một số chuỗi mà không thay đổi các tệp dịch lõi?

Câu trả lời:


15

Bạn có thể sử dụng bộ lọc gettext :

add_filter( 'gettext', 'cyb_filter_gettext', 10, 3 );
function cyb_filter_gettext( $translated, $original, $domain ) {

    // Use the text string exactly as it is in the translation file
    if ( $translated == "Categorie: %s" ) {
        $translated = "Sectie: %s";
    }

    return $translated;
}

Nếu bạn cần lọc một bản dịch với ngữ cảnh, hãy sử dụng gettext_with_contextbộ lọc :

add_filter( 'gettext_with_context', 'cyb_filter_gettext_with_context', 10, 4 );
function cyb_filter_gettext_with_context( $translated, $original, $context, $domain ) {

    // Use the text string exactly as it is in the translation file
    if ( $translated == "Categorie: %s" ) {
        $translated = "Sectie: %s";
    }

    return $translated;
}

Một bản dịch với ngữ cảnh có nghĩa là một bối cảnh được đưa ra trong hàm gettext được sử dụng để dịch chuỗi. Ví dụ: đây không có ngữ cảnh:

$translated = __( 'Search', 'textdomain' );

Và đây là với bối cảnh:

$translated = _x( 'Search', 'form placeholder', 'textdomain' );

Các bộ lọc tương tự có sẵn cho các bản dịch số nhiều ( [_n()][2][_nx()][2]): ngettextngettext_with_context.


1
Điều đó đã làm việc! Tôi đã phải thực hiện "Phân loại:% s" và "Sectie:% s" vì văn bản phải chính xác như trong tệp dịch.
Florian

Ồ, vâng, đó là chính xác. Tôi không biết văn bản chính xác để dịch.
cybmeta

1
Đoạn mã tuyệt vời - chỉ cần lưu ý rằng gettextbộ lọc sẽ không bắt được các bản dịch sử dụng chuỗi "ngữ cảnh", chúng sẽ cần gettext_with_context .
Manu

Cảm ơn giải pháp tuyệt vời này. Khi tôi đang xây dựng một chủ đề con và sẵn sàng ghi đè lên một số bản dịch của chủ đề gốc, tôi đã thay thế phần thân hàm được đề xuất bằng dòng sau return $domain != 'child-domain' && ( $new = __( $original, 'child-domain' ) ) != $original ? $new : $translated;. Theo cách này, tôi có thể quản lý các bản dịch ghi đè trong tệp PO của chủ đề con thay vì chúng được bật trong mã chức năng.
Franco

Cảm ơn cybmeta! Tôi đã sử dụng kỹ thuật này để thay đổi văn bản cốt lõi với một plugin tôi đã xuất bản trong repo. Tôi ghi có bài này trong mã. wordpress.org/plugins/ từ
John Dee
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.