• Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!

Плагин 'Say What' (описание) - изменение перевода "на лету" без правки файла перевода

Image CMS

searchingman

Гуру
Местный
#1
Плагин Say What? (описание)
  • Скачать плагин: https://wordpress.org/plugins/say-what/
  • Цель: изменить фразы перевода «на лету» без использования файлов перевода.
  • Работает с фразами, заданными в исходниках через функции:
    • __( $text, $domain ) - переводит указанный текст, используя файл перевода и возвращает его для обработки. Переведенный текст. Если не удалось перевести, то вернет оригинальный текст $text
      • $text - Текст, который нужно перевести.
      • $domain - Идентификатор файла перевода, указывается при регистрации и подключении файла перевода. Если не указать, то будет использован дефолтный файл перевода, который используется в WordPress (по умолчанию: 'default').
    • _e( $text, $domain ) - переводит указанный текст, используя файл перевода и выводит его на экран.
    • _n( $single, $plural, $number, $domain ) - выбирает строку, которая будет использована для перевода единственного или множественного числа переданного в функцию (1 комментарий, 2 комментария)
    • _x( $text, $context, $domain ) - переводит указанный текст, на основе указанного контекста. Использует файл перевода. Нужно использовать, чтобы не было путаницы, когда одинаковый текст может переводиться по разному, исходя из того в каком месте (в каком контексте) он используется. Н-р, _x( 'Categories', 'Admin menu name', 'woocommerce' )
      • $context - дополнительная строка (контекст) по которой будет искаться перевод в файле перевода.
Как использовать ?
  1. Установить и активировать плагин
    • После активации создается таблица перевода 'wp_say_what_strings', которая не удаляется (очищается) после деактивации или удаления плагина
  2. Перейти на страницу перевода («Инструменты» → «Text changes») (см.скриншот)
  3. Как искать фразы для перевода
    • Найти фразу, которую нужно перевести, н-р, текст кнопки «Добавить в корзину» (см.скриншот). Для поиска по исходным файлам можно воспользоваться текстовым редакторами NotePad++, Sublime Text и т.д.
    • Сделать поиск по всем файлам WP. Фраза должна быть найдена в файлах перевода *.po (для фразы «Добавить в корзину» в файле wp-content\languages\plugins\woocommerce-ru_RU.po)
    • В файле перевода будет указан идентификатор фразы перевода 'msgid «Add to cart»' и ссылка(и) на файл(ы) в котором содержится фраза перевода. (см.скриншот) Для фразы «Добавить в корзину» будут ссылки на файлы:
      • includes/abstracts/abstract-wc-product.php:584
      • includes/class-wc-product-simple.php:48
      • includes/class-wc-product-variation.php:198
    • Открываем файл «includes/class-wc-product-simple.php» и находим функцию перевода _('Add to cart','woocommerce') по идентификатору 'Add to cart'. (см.скриншот)
      • 1й параметр функции будет использован для поля «Original string» при добавлении строки перевода
      • 2й параметр функции ( woocommerce - домен) будет использован для поля 'Text domain'
  4. Добавить новую фразу для перевода, заполнив поля «Original string» и «Text domain» из 1го и 2го полей функции перевода. В поле «Replacement string» ввести новую фразу перевода.(см.скриншот)
  5. В итоге надпись на кнопке изменится. (см.скриншот)
Контекст фразы перевода
  • При использовании функции _x( $text, $context, $domain ) используется дополнительный параметр контекста $context.
  • Для примера в админке изменим пункт меню «Категории» на «Категории товаров» (см.скриншот)
  • После поиска по слову «Категории» находим в файле перевода фразу msgid «Categories» и ее контекст msgctxt «Admin menu name»(см.скриншот)
  • Вносим данные в плагин (см.скриншот) и получаем результат (см.скриншот).
Особенности перевода фразы с параметрами
  • В некоторых случаях в фразу перевода передают параметры, н-р, часть исходного кода
    PHP:
    printf( __( 'Showing all %d results', 'woocommerce' ), $total );
    Фраза в файле перевода выглядит так:
    Код:
    #: templates/loop/result-count.php:40
    msgid "Showing all %d results"
    msgstr "Показ всех — %d результатов"
  • В этом случае фраза замены также должна включать параметр, т.е. «Найдено %d товар(ов)» (см.скриншот). Готовый результат замены перевода. (см.скриншот).
 
Последнее редактирование:

nyrt

Форумчанин
#2
_n( $single, $plural, $number, $domain ) - выбирает строку, которая будет использована для перевода единственного или множественного числа переданного в функцию (1 комментарий, 2 комментария)
Как использовать эту функцию?

Необходимо перевести в woocommerce
_n( '%s customer review', '%s customer reviews', $review_count, 'woocommerce' )

n = 1, 21, 31 ...
%s отзыв

n = 2, 3, 4, 22 ...
%s отзыва

n = 0, 5, 6, 7,
%s отзывов
 
Последнее редактирование: