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