Як зробити готовий переклад плагіну WordPress готовим?


19

Який найкращий спосіб створити плагін, готовий до перекладу?

Його не потрібно перекладати з самого початку, але він повинен бути легко перекладається, щоб колеги-розробники з різних культур могли брати участь у процесі локалізації плагіна.

Відповіді:


38

1. Пишіть з урахуванням локалізації

Не використовуйте echoта print()не створюйте текстовий вихід, натомість використовуйте функції 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()і __()забезпечить переклад тексту поточною мовою, який надається як перший параметр. _e()виведе текст, тоді як __()поверне його.

Другий параметр - це текстовий домен , ви будете використовувати його, щоб сказати WordPress, що текст, наданий як перший параметр, належить цьому плагіну, ви можете використовувати будь-яке ім’я, яке ви хочете, але я вважаю за краще використовувати те саме ім’я, що і я використовував для плагіна файл каталогу, я вважаю його більш інтуїтивно зрозумілим.

Як вивести динамічний текст на кшталт: "Привіт <ім'я користувача>"?

З __()і 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. Підготуйте файли .pot / .po / .mo

Визначення

  • Файл .pot : надається у вашому розпорядженні розробником плагінів і використовується як вихідна точка для створення нових перекладів, WordPress не використовує його.
  • Файл .po : це файл перекладу, який ви або хтось інший розпочав, і можливо завершений, WordPress не використовує його.
  • Файл A.mo : автоматично створюється Poedit щоразу, коли ви зберігаєте .po файл, все, що ви можете зробити з цими файлами, це завантажувати або повторно завантажувати їх, коли ви створюєте або оновлюєте .po файл. WordPress отримує переклади з .mo файлів .

Відкрийте Poedit і створіть новий каталог (Файл ›Новий каталог ...) з цими налаштуваннями:

  • Інформація про проект: Використовуйте свою (або вашу команду) інформацію, мова та країна повинні відповідати вашій мові за замовчуванням плагіна
  • Шляхи:
    • Базова траєкторія: .
    • Шляхи: видаліть усе та додайте ..(ми збережемо мовний файл у підкаталозі плагіна під назвою languages)
  • Ключові слова: видалити всі & додати __та_e

Збережіть каталог як і скануйте свої файли плагінів на текст, який можна перекласти, натиснувши кнопку оновлення. Коли оновлення буде завершено близько , що каталог, вам не потрібно буде оновлювати цей файл , поки ви не додасте нові перекладні рядки (тобто вкладені в або ) для вашого плагіна./my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin.pot__()_e()

Тепер створимо перший переклад (я буду використовувати fr_FR):

Використовуючи Podeit , створіть каталог із файлу POT (Файл ›Новий каталог із файлу POT ...) :

  • Інформація про проект: Використовуйте свою (або вашу команду) інформацію, змініть мову та країну , я буду використовувати французьку та Францію
  • Шляхи: не змінюйтесь
  • Ключові слова: Не гнатися

Збережіть каталог як . Перекладіть деякі або всі рядки, збережіть .po файл знову, завантажте і .po, і .mo файли./my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin-fr_FR.po

Зауважте, що щоразу, коли ви зберігаєте .po-файл .mo-файл генерується з тим самим іменем, ім'я файлу .po має вирішальне значення , воно складається з конкатенації текстового домену плагіна (my-plugin) та мови мови ( fr_FR), завжди називайте свої файли .po для таких плагінів: [textdomain] - [locale] .po , ось кілька прикладів:

  • Італійська / Італія: wpcf7-it_IT.po
  • Португальська / Бразилія: wpcf7-pt_BR.po
  • Арабська: wpcf7-ar.po... Так!

Щоразу, коли плагін оновлюється новим текстом, оновлюйте файл po, перекладайте нові рядки та перезавантажуйте файли .po та .mo

3. Довчіть плагін завантажувати перекладений текст для поточної мови

Десь у плагіні ви повинні сказати WordPress використовувати ваш файл .mo, ви можете це зробити, скориставшись цим кодом на початку вашого файла плагіна:

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

Замініть my-pluginсвоє ім'я плагіна в першому та третьому параметрах load_plugin_textdomainфункції.

4. Тест та усунення несправностей

З деяких причин це може не спрацювати:

  • Рядки не імпортуються у файл .pot або .po
    • → Неправильні налаштування каталогу (шлях або ключові слова або обидва)
  • Текст не перекладається на сайті WordPress
    • → .mo файл для цієї мови відсутній або має неправильне ім'я файлу
    • → Текстовий домен не використовується (замінити _e('my text')на _e('my text', 'my-plugin'))
    • → Текстовий домен не завантажений (використовуйте приклад вище з правильними параметрами, WP не попередить вас про помилки)

3
+1 Приємне написання :) Погляньте на цю статтю: Правильне завантаження мовних файлів WordPress , " Практичні вказівки щодо усунення болю від завантаження мовних файлів у WordPress ". :::::: Glotpress та група Polyglots, можливо, варто також згадати.
brasofilo

Дякую за цю приємну інструкцію! Варто зазначити, що load_plugin_textdomain () потрібно викликати в кожному методі, де ви використовуєте _e () і __ ()
Андреас

2

Відповідь Набіля досить повна, але існує проста версія:

  1. Ваш плагін знаходиться у сховищі плагінів WordPress.org

  2. Ви готові вимагати, щоб ваш плагін працював лише з WordPress 4.6 або вище.

Кроки такі:

  1. У файл readme.txt вашого плагіна додайте Requires at least: 4.6. Дивіться https://developer.wordpress.org/plugins/wordpress-org/how-your-readme-txt-works/

  2. якщо його ще немає, завантажте свій плагін у сховище плагінів WordPress. Див. Https://wordpress.org/plugins/developers/add/ .

  3. Знайдіть плагін / текстовий домен плагіна. Для цього перейдіть на сторінку свого плагіна у сховищі плагінів WordPress. URL буде таким, як https://wordpress.org/plugins/your-plugin-slug/ . Остання частина URL-адреси, "ваш-плагін-слизь", - це плагін вашого плагіна. Саме це ви використовуєте для текстового домену функцій перекладу.

  4. Використовуйте функції перекладу WordPress у своєму плагіні (як __e(‘hello’, ‘my-plugin-domain’);). Просто переконайтеся, що використовується правильний текстовий домен плагіна, придбаний на попередньому кроці. Докладніші відомості див. У розділі https://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/ .

Якщо ви виконаєте вищезазначені дії, WordPress подбає про:

  • Проаналізуйте ваш плагін для всіх рядків, що перекладаються (не потрібно встановлювати та запускати Poedit чи що-небудь інше)
  • Спростіть будь-яку особу для перекладу вашого плагіна на translate.wordpress.org (не потрібно мати власний веб-сайт, призначений для перекладу вашого плагіна, або спеціальні процедури, щоб перекладачі могли надсилати вам свої переклади)
  • коли хтось використовує ваш плагін, WordPress подбає про те, щоб він перекладався на їхню мову, і якщо так, показавши його своєю мовою (не потрібно їм чи ви, щоб завантажити файли перекладу на їхній веб-сайт)

(Відповідь з мого повідомлення в блозі тут: https://cmljnelson.blog/2019/01/01/the-really-lazy-way-to-translate-a-wordpress-plugin/ )


Я не впевнений, чому це було знято. Це я зробив, щоб зробити wordpress.org/plugins/print-my-blog для перекладу готовим (і плагін успішно переведений)
thespacecamel

Чи означає це, що плагін / тема не знаходиться у сховищі плагінів WordPress, але там використовується текстовий домен плагіна, wordpress завантажує неправильні файли перекладу?
BODO

Гарне запитання @bodo. Якщо плагін вказує на використання текстового домену іншого плагіна, який знаходиться в репортажі wp.org, я думаю, що WordPress із задоволенням використовуватиме файли перекладу плагіну wp.org. Але вибачте, я не впевнений.
thespacecamel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.