gettext
Дозволяє змінити рядок (текст) перекладу.
Використання
add_filter( 'gettext', 'wp_kama_gettext_filter', 10, 3); /** * Function for `gettext` filter-hook. * * @param string $translation Translated text. * @param string $text Text to translate. * @param string $domain Text domain. Unique identifier for retrieving translated strings. * * @return string */ function wp_kama_gettext_filter( $translation, $text, $domain ){ // Filter... return $translation; }
-
$translation
(рядок) -
Перекладений текст. У файлах
*.po
позначений як
msgstr
. -
$text
(рядок) -
Текст для перекладу. У файлах
*.po
позначений як
msgid
. -
$domain
(рядок) -
Домен тексту. Унікальний ідентифікатор для одержання перекладених рядків. Вказується при підключенні MO файлу перекладу функції
load_textdomain() .
Приклади
#1 Замінимо “Коментарі” на “Відгуки”
Замінимо в адмінці на сторінці управління коментарями заголовок з “Коментарі” на “Відгуки”.
На сторінці управління коментарями ( edit-comments.php ) слово “Коментарі” виводиться за допомогою цього коду:
_e ( 'Comments');
Функція translate() , в якій спрацьовує описуваний хук.
Так як через фільтр проходить безліч перекладів, а нам необхідно перекласти певну фразу і тільки в потрібному місці, то використовуємо умову:
- Запрошується переклад слова “Comments”
- Запрошується домен default (переклад WordPress)
add_filter( 'gettext', 'filter_gettext', 10, 3); function filter_gettext( $translation, $text, $domain ) { if ( $text === 'Comments' && $domain === 'default' ) { $translation = 'Відгуки'; } return $translation; }
Виникає питання, чому на скріншотах слово “Коментарі” не змінилося у правому меню? У файлі wp-admin/menu.php ми можемо знайти код цього пункту меню:
$menu[25] = array( /* translators: %s: Number of comments. */ sprintf( __( 'Comments %s' ), '<span class="awaiting-mod count-' . absint( $awaiting_mod ) . '"><span class="pending-count" aria-hidden="true"> ' . $awaiting_mod_i18n . '</span><span class="comments-in-moderation-text screen-reader-text">' . 'edit_posts', 'edit-comments.php', '', 'menu-top menu-icon-comments', 'menu-comments', 'dashicons-admin-comments', );
Тобто фраза для перекладів тут вже Comments %s
, а значить наш код має бути таким:
add_filter( 'gettext', 'filter_gettext', 10, 3); function filter_gettext( $translation, $text, $domain ) { if ( $text === 'Comments %s' && $domain === 'default' ) { $translation = 'Відгуки %s'; } return $translation; }
список змін
З версії 2.0.11 | Введено. |
Де викликається хук
gettext
Де використовується хук у WordPress
Використання не знайдено.