it-roy-ru.com

Как подготовить перевод плагина WordPress?

Как лучше всего создать плагин, который готов к переводу?

Его не нужно переводить с самого начала, но его нужно легко перевести, чтобы коллеги-разработчики из разных культур могли участвовать в процессе локализации плагина.

19
Nabil Kadimi

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, что текст, предоставленный в качестве первого параметра, принадлежит этому плагину, вы можете использовать любое имя, которое хотите, но я предпочитаю использовать то же имя как я использовал для плагина в каталоге, я нахожу его более интуитивным.

Как вывести динамический текст, например: "Hello <username>"?

С __() и 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 file : автоматически создается Poedit всякий раз, когда вы сохраняете файл .po, все, что вы можете сделать с этими файлами, это загрузить или повторно загрузить их всякий раз, когда вы создаете или обновляете файл .po. WordPress получает переводы из .mo файлов .

Откройте Poedit и создайте новый каталог (Файл ›New Catallog ...) со следующими настройками:

  • Информация о проекте: Используйте вашу (или вашу команду) информацию, язык и страна должны соответствовать языку вашего плагина по умолчанию
  • Дорожки:
    • Базовый путь: .
    • Пути: удалить все и добавить .., (мы будем хранить языковой файл в подкаталоге плагина под названием languages)
  • Ключевые слова: удалить все и добавить __ и _e

Сохранить каталог как /my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin.pot и scan ваши файлы плагинов для переводимого текста, нажав кнопку обновления. Когда обновление будет завершено, закройте этот каталог, вам не нужно будет обновлять этот файл, если вы не добавите в ваш плагин новые переводимые строки (т.е. заключенные в __() или _e()).

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

Используя Podeit , создать каталог из файла POT (Файл ›Новый каталог из файла POT ...):

  • Информация о проекте: используйте вашу (или вашу команду) информацию, измените язык и страну , я буду использовать французский и Францию
  • Пути: не меняются
  • Ключевые слова: не смейся

Сохранить каталог как /my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin-fr_FR.po. Переведите некоторые или все строки, save .po файл снова, upload .po и .mo файлы.

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

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

Всякий раз, когда плагин обновляется новым текстом, update po-файл, translate new strings и повторно загружать .po и .mo files

3. Поручите плагину загрузить переведенный текст для текущего языка

Где-то в вашем плагине вы должны указать WordPress использовать ваш файл .mo, вы можете сделать это, используя этот код в начале вашего файла плагина:

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

Замените my-plugin на имя вашего плагина в 1-м и 3-м параметре функции load_plugin_textdomain.

4. Проверьте и устраните неполадки

Некоторые причины могут не работать:

  • Строки не импортируются в файл .pot или .po
    • → Неправильные настройки каталога (путь или ключевые слова или оба)
  • Текст не переведен на сайте WordPress
    • → .mo файл для этого языка отсутствует или имеет неправильное имя файла
    • → Текстовый домен не используется (замените _e('my text') на _e('my text', 'my-plugin'))
    • → Текстовый домен не загружен (используйте приведенный выше пример с правильными параметрами, WP не предупредит вас об ошибках)
36
Nabil Kadimi

Набиль довольно полон ответа, но есть несколько вариантов:

  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/ )

2
thespacecamel