Переопределить основний переклад WordPress на основний


11

WordPress встановлений на голландській мові. Коли я get_the_archive_title()правильно використовую свою тему, на сторінці архіву категорій виводиться "Категорія: Ім'я категорії". Однак я хотів би прочитати "Sectie: Ім'я категорії".

Я не хочу змінювати голландський мовний файл у папці wp-content / languages, тому що це буде оновлено оновленнями WordPress.

Я спробував скопіювати цей файл перекладу, змінивши переклад "категорії" і помістивши новий файл nl_NL.mo в мою тему / мови. Це не мало жодного ефекту.

Як я можу досягти іншого перекладу для деяких рядків, не змінюючи основні файли перекладу?

Відповіді:


15

Ви можете використовувати фільтр gettext :

add_filter( 'gettext', 'cyb_filter_gettext', 10, 3 );
function cyb_filter_gettext( $translated, $original, $domain ) {

    // Use the text string exactly as it is in the translation file
    if ( $translated == "Categorie: %s" ) {
        $translated = "Sectie: %s";
    }

    return $translated;
}

Якщо вам потрібно відфільтрувати переклад за допомогою контексту, використовуйте gettext_with_contextfilter :

add_filter( 'gettext_with_context', 'cyb_filter_gettext_with_context', 10, 4 );
function cyb_filter_gettext_with_context( $translated, $original, $context, $domain ) {

    // Use the text string exactly as it is in the translation file
    if ( $translated == "Categorie: %s" ) {
        $translated = "Sectie: %s";
    }

    return $translated;
}

Переклад з контекстом означає, що контекст задається у функції gettext, що використовується для перекладу рядка. Наприклад, це без контексту:

$translated = __( 'Search', 'textdomain' );

І це з контекстом:

$translated = _x( 'Search', 'form placeholder', 'textdomain' );

Подібні фільтри доступні для множинного перекладу ( [_n()][2]і [_nx()][2]): ngettextі ngettext_with_context.


1
Це спрацювало! Мені довелося робити "Категорія:% s" та "Sectie:% s", оскільки текст повинен бути точно таким, як у файлі перекладу.
Флоріан

О так, це правильно. Я не знав точного тексту для перекладу.
cybmeta

1
Чудовий фрагмент коду - просто пам’ятайте, що gettextфільтр не буде перехоплювати переклади, що використовують рядок «контексту», для цього знадобиться gettext_with_context .
Ману

Дякую за це чудове рішення. Оскільки я будую дочірню тему і бажаю змінити деякі переклади батьківської теми, я замінив запропонований орган функції наступним рядком return $domain != 'child-domain' && ( $new = __( $original, 'child-domain' ) ) != $original ? $new : $translated;. Таким чином я можу зберігати переважаючі переклади у файлі PO дочірньої теми замість того, щоб вони були передані в код функції.
Франко

Дякую cybmeta! Я використав цю техніку для зміни основного тексту за допомогою плагіна, який я опублікував у репо. Я зарахував цю посаду в код. wordpress.org/plugins/…
Джон Ді
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.