8. Текстовый домен
● Должен совпадать с именем папки плагина или темы:
– wp-content/plugins/my-plugin →'my-plugin'
– wp-content/themes/my-theme →'my-theme'
● Стоит добавить в заголовки плагина или темы:
– Plugin Name: My Plugin
– Version: 1.0
– Text Domain: my-plugin
14. Подготовка строк
● Экранирование HTML-тегов и атрибутов:
– <option value="<?php esc_attr_e( 'value', 'my-plugin' ); ?>">
<?php esc_html_e( 'Option label', 'my-plugin' ); ?>
</option>
● То же самое в более длинной записи:
– <option value="<?php echo esc_attr( __( 'value', 'my-plugin' ) ); ?>">
<?php echo esc_html( __( 'Option label', 'my-plugin' ) ); ?>
</option>
15. _e() ≠ echo()
● Не используйте переменные PHP, только простые строки:
– _e( $string ); — не надо так делать.
● Обеспечьте перевод целых фраз, а не отдельных слов:
– echo __( 'Hello' ) . ' ' . __( 'world!' ); — и так тоже.
● Не забывайте про текстовый домен:
– _e( 'Hello world!', 'my-plugin' );
● Не включайте в строки лишнюю HTML-разметку:
– _e( '<p>Hello world!</p>', 'my-plugin' );
16. Контекст и комментарии
● Контекст — разный перевод для одинаковых строк:
– _x( 'redirect', 'noun', 'my-plugin' );
– _x( 'redirect', 'verb', 'my-plugin' );
● Комментарии — пояснить значение переменной:
– /* translators: %s: file name */
__( '%s was deleted.', 'my-plugin' );
17. Множественные числа
● ???
– _e( "You have $count items.", 'my-plugin' );
– _e( 'You have ' . $count . ' items.', 'my-plugin' );
– printf( __( 'You have %d items.', 'my-plugin' ), $count );
– printf( _n( 'You have %d item.', 'You have %d items.', $count ),
$count );
18. Множественные числа
● Неправильно:
– _e( "You have $count items.", 'my-plugin' );
– _e( 'You have ' . $count . ' items.', 'my-plugin' );
– printf( __( 'You have %d items.', 'my-plugin' ), $count );
● Почти правильно:
– printf( _n( 'You have %d item.', 'You have %d items.', $count ),
$count );
19. Множественные числа
● Правильно:
– printf( _n( 'You have %d item.', 'You have %d items.', $count ),
number_format_i18n( $count ) );
● number_format_i18n() — для отображения чисел
● date_i18n() — для отображения даты
20. Множественные числа
● Если число неизвестно:
– $items_plural = _n_noop( 'You have %s item.', 'You have %s items',
'my-plugin' );
● ...
● А теперь известно:
– printf( translate_nooped_plural( $items_plural, $count ),
number_format_i18n( $count ) );
● translate_nooped_plural() — для отложенного перевода
множественных чисел
21. Множественные числа
● Первая форма не всегда используется для единственного числа:
– printf( _n( 'Theme deleted.', '%d themes deleted.', $count ),
number_format_i18n( $count ) );
● Лучше:
– if ( 1 === $count ) {
_e( 'Theme deleted.' );
– } else {
printf( _n( '%d theme deleted.', '%d themes deleted.', $count ),
number_format_i18n( $count ) );
– }
22. Файлы перевода
● .pot (Portable Object Template)
– Шаблон для перевода, содержит только английские строки.
● .po (Portable Object)
– Файл перевода в читаемом формате.
● .mo (Machine Object)
– Скомпилированный файл перевода в двоичном формате.
27. translate.wordpress.org
● GTE (General Translation Editor) — редакторы локали
– Могут проверять и одобрять все переводы.
● PTE (Project Translation Editor) — редакторы проектов
– Могут одобрять переводы конкретных проектов.
● Переводчики
– Могут предлагать переводы.
28. Если кто-то прислал перевод
● Попросите автора зарегистрироваться на WordPress.org
– Тогда его можно будет назначить редактором проекта.
– Он сам сможет импортировать свой файл .po.
– ...и в дальнейшем поддерживать перевод.
● Попросите редакторов локали импортировать файл
– Нет гарантии, что плагин будут продолжать активно переводить.
29. Если кто-то прислал перевод
● Когда автор зарегистрировался на WordPress.org
– Открываем блог сообщества переводчиков:
https://make.wordpress.org/polyglots/
– Находим ссылку на справочник переводчика:
https://make.wordpress.org/polyglots/handbook/
– На странице «Theme & Plugin Directories» находим шаблон
запроса для добавления редакторов проекта.
– Отправляем запрос в блог переводчиков и ждём ответа.