Làm thế nào để giữ cho plugin dịch sau khi cập nhật?


9

http://wordpress.org/extend/plugins/bbpress/ thư mục ngôn ngữ của bbpress (wp-content / plugins / bbpress / bbp-Languages) có cảnh báo đó:

/**
 * Do not put custom translations here. They will be deleted on bbPress updates.
 *
 * Keep custom bbPress translations in /wp-content/languages/
 */

Trên thực tế đây không phải là một vấn đề mới và vâng họ đúng. Đây là một vấn đề lớn nếu bạn đang sử dụng plugin wordpress với ngôn ngữ không phải tiếng Anh.

Về cơ bản tôi đã dịch bbpress và tạo các tệp .po và .mo. Các tệp đang hoạt động nếu tôi đặt chúng vào thư mục wp-content / plugins / bbpress / bbp-ngôn ngữ thông thường của chúng. Nhưng như cảnh báo ở trên nói rằng sẽ xóa khi cập nhật. Nhưng vấn đề là, dịch không hoạt động nếu tôi đặt chúng vào wp-content / Languages ​​/ thư mục như đề xuất trong bbpress.

Tôi nghĩ rằng phải có một cái móc hoặc một cái gì đó tôi có thể kích hoạt nó nhưng giải pháp tốt nhất cho nó là gì? Đơn giản là tôi muốn giữ các tệp ngôn ngữ plugin trong wp-content / ngôn ngữ /


ừm đối với các plugin khác imo
Ünsal Korkmaz

Câu trả lời:


3

Bạn phải thay thế cuộc gọi đến tệp ngôn ngữ của BBpress.

Một nơi tốt để làm điều này là một tập tin ngôn ngữ cụ thể trong thư mục ngôn ngữ chung của bạn. Đối với Thổ Nhĩ Kỳ có lẽ nó sẽ là một tập tin có tên tr_TR.php. Điều này sẽ được tải tự động và chỉ khi nó phù hợp với ngôn ngữ của blog của bạn. Nó sẽ không bị ghi đè.

BBPress không sử dụng chức năng load_plugin_textdomain, nó sử dụng load_textdomainthay thế. Tại đây bạn có thể tìm thấy một bộ lọc:

$mofile = apply_filters( 'load_textdomain_mofile', $mofile, $domain );

Vì vậy, trong tệp php ngôn ngữ của bạn chỉ cần thêm bộ lọc để thay đổi đường dẫn:

function load_bbpress_tr_mofile( $mofile, $domain )
{
    if ( 'bbpress' == $domain )
    {
        // replace this. :)
        return 'FULL_PATH_TO_YOUR_FILE';
    }
    return $mofile;
}
add_filter( 'load_textdomain_mofile', 'load_bbpress_tr_mofile', 10, 2 );

có vẻ như có một lỗi .. bbpress.trac.wordpress.org/ticket/1647 đang xem xét nó
Ünsal Korkmaz

Đường dẫn đến thư mục ngôn ngữ của bạn ( WP_LANG_DIR) cộng với tệp mo của bạn.
fuxia

1
Câu trả lời tốt. Lưu ý đối với các nhà phát triển plugin: thực hiện các load_plugin_textdomain()cuộc gọi của bạn trong hành động "init", nếu không, chúng tôi không thể kết nối với bộ lọc "load lòngdomain_mofile". Sẽ quá muộn rồi.
Geert

2

Những gì bạn phải làm là tạo một plugin đơn giản sẽ quản lý text_domain của các plugin đã cài đặt. Nếu bạn không muốn có một giải pháp toàn cầu, bạn có thể thêm mã vào hàm.php của mình trong chủ đề.

Ý tưởng là hướng dẫn wordpress về nơi tìm bản dịch. Bên trong tất cả các plugin, điều này được thực hiện bằng cách sử dụng một cái gì đó tương tự như

load_plugin_textdomain( 'regenerate-thumbnails', false, '/regenerate-thumbnails/localization' );

đây là chức năng mà bạn sẽ sử dụng Như bạn có thể thấy ở đây , đối số cuối cùng được sử dụng để đặt tương đối với đường dẫn plugin, nơi chứa các tệp dịch.

Bạn có thể làm những gì bạn muốn bằng cách đặt một dòng cho mỗi plugin bạn muốn thay đổi thư mục ngôn ngữ của họ như sau.

load_plugin_textdomain('bbpress', false, '../../languages/bbpress');

điều này sẽ hướng dẫn wordpress tải các tệp dịch tùy chỉnh của bạn từ một thư mục bên cạnh pluginsthư mục có thư mục có tên bbpresscác tệp dịch bằng cách sử dụng cùng tên EXACT khi mỗi plugin sử dụng.

Phương pháp của bạn, hướng dẫn các tên miền văn bản cho tất cả các plugin, sẽ chạy trong initgiai đoạn như sau

function set_myplugins_languages() {
     .... your code here.....
}
add_action('init', 'set_myplugins_languages');

(Đừng quên đánh dấu câu này là câu trả lời nếu bạn thấy nó hữu ích)


0

Để làm việc này, bạn cần phải có các tệp dịch WordPress trong WP_LANG_DIR và cài đặt ngôn ngữ toàn cầu thành ngôn ngữ đó. Nếu bạn chỉ bao gồm các bản dịch cho bbPress mà không thay đổi ngôn ngữ hoặc có các tệp dịch cốt lõi của WordPress, thì sẽ không có gì dịch mặc dù bạn tải chúng.

Nếu bạn muốn ghi đè miền địa phương cho bbPress một mình, bạn cần thêm bộ lọc vào 'bbpress_locale', cho phép bạn ghi đè tệp mo bbress.

Mặc dù đúng là bbPress 2.0 sử dụng hàm loadunderdomain (), load_plugin nhiệtdomain () chỉ là một trình bao bọc cho mọi phương thức loadunderdomain (). Phương pháp bbPress 2.0 mạnh mẽ hơn và cho phép sắp xếp tệp dịch toàn cầu, do đó bạn không bị mất chúng trong quá trình cập nhật plugin.


-1

Trong trường hợp của tôi, việc tạo bản dịch tùy chỉnh vĩnh viễn cho plugin yêu cầu các bước sau (ví dụ về dịch thuật plugin ACF):

  1. tạo wp-content/languages/plugins/thư mục
  2. sao chép tệp dịch đã chọn .potừ lang/thư mục plugin (hoặc bất kỳ tệp nào có bản dịch) sang tệp wp-content/languages/plugins/(ví dụ từ lang/acf-pl_PL.pođến wp-content/languages/plugins/acf-pl_PL.po)
  3. tùy chỉnh bản dịch với ví dụ Poedit hoặc bất kỳ chương trình nào khác để chỉnh sửa .potệp, sau đó tạo .movà lưu trong wp-content/languages/plugins/(ví dụ wp-content/languages/plugins/acf-pl_PL.mo)

Bằng cách này, bản dịch nên được bảo tồn ngay cả sau khi cập nhật plugin.

Tôi không chắc liệu chiến lược này có hiệu quả với tất cả các plugin hay không nhưng điều này chắc chắn đáng để thử.

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.