Конструкторы страниц
Конструкторы страницGutenberg

Gutenberg

Поддержка Gutenberg встроена изначально — для перевода всех блоков в вашем содержимом Gutenberg.

Gato AI Translations for Polylang извлекает строки из блоков содержимого Gutenberg и переводит только эти строки, гарантируя, что содержимое не будет повреждено.

Из коробки автоматически поддерживаются следующие типы блоков:

  • Блоки ядра WordPress
  • PHP-only блоки
  • Блоки Advanced Custom Fields (ACF)
  • Все блоки, поставляемые с wpml-config.xml
  • Сторонние блоки:
    • Kadence Blocks
    • Greenshift blocks
    • GenerateBlocks blocks
    • Yoast SEO blocks

Поддерживаемые блоки ядра WordPress

Следующие блоки ядра WordPress поддерживаются из коробки:

  • core/audio
  • core/block (т.е. синхронизированные шаблоны)
  • core/button
  • core/cover
  • core/embed
  • core/heading
  • core/html
  • core/image
  • core/list
  • core/list-item
  • core/media-text
  • core/paragraph
  • core/preformatted
  • core/pullquote
  • core/quote
  • core/table
  • core/verse
  • core/video

PHP-only блоки

Начиная с WordPress 7.0, блоки можно регистрировать как PHP-only (без JavaScript-бандла). Gato AI Translations for Polylang обрабатывает их как любые другие блоки: они поддерживаются из коробки, без дополнительной настройки.

Все строковые атрибуты (кроме перечислений и других скалярных типов) автоматически регистрируются для перевода.

Если конкретное поле не должно переводиться, его можно исключить через хук gatompl:gutenberg_block_type_translatable_attribute_regexes, установив значение false (или используя unset):

add_filter(
    'gatompl:gutenberg_block_type_translatable_attribute_regexes',
    static function (array $regexes): array {
        // Either of these works:
        unset($regexes['my-plugin/alert']['header']);
        $regexes['my-plugin/alert']['implications'] = false;
        return $regexes;
    }
);

Блоки Advanced Custom Fields (ACF)

Блоки, зарегистрированные через Advanced Custom Fields, также поддерживаются из коробки. Существует 3 способа зарегистрировать поле ACF для перевода:

1. Автоматически для всех полей (через Settings)

Перейдите на страницу Settings, в раздел Plugin Integration Configuration > Advanced Custom Fields, и включите опцию Translate ACF blocks automatically?:

Включение автоматического перевода для блоков ACF
Включение автоматического перевода для блоков ACF

При включении каждое переводимое строковое поле каждого блока ACF отправляется на перевод. Если конкретное поле не должно переводиться, исключите его через стандартный хук ACF acf/load_field, установив gatompl в 'skip':

// Disable translation for a single field by key
add_filter(
    'acf/load_field/key=product_card_sku',
    static function (array|false $field): array|false {
        if (is_array($field)) {
            $field['gatompl'] = 'skip';
        }
        return $field;
    }
);
 
// Or disable several fields at once
add_filter(
    'acf/load_field',
    static function (array|false $field): array|false {
        if (
            is_array($field) && in_array($field['key'] ?? null, [
                'product_card_feature_title',
                'product_card_specs_dimensions',
                'product_card_section_text_heading',
            ])
        ) {
            $field['gatompl'] = 'skip';
        }
        return $field;
    }
);

2. Поле за полем (через конфигурацию группы полей ACF)

При определении группы полей с помощью acf_add_local_field_group() добавьте 'gatompl' => 'translate' непосредственно к каждому полю, которое нужно перевести:

acf_add_local_field_group([
    'key'    => 'group_testimonial',
    'title'  => 'Testimonial Block',
    'fields' => [
        [
            'key'     => 'testimonial_text',
            'label'   => 'Testimonial',
            'name'    => 'testimonial',
            'type'    => 'textarea',
            'gatompl' => 'translate',
        ],
        [
            'key'     => 'testimonial_role',
            'label'   => 'Role',
            'name'    => 'role',
            'type'    => 'text',
            // Option-array form — equivalent to `'gatompl' => 'translate'`,
            // but leaves room for future plugin-side options on the same field
            'gatompl' => [
                'translation_configuration' => 'translate',
            ],
        ],
        [
            'key'           => 'testimonial_featured_post',
            'label'         => 'Featured post',
            'name'          => 'featured_post',
            'type'          => 'post_object',
            'post_type'     => ['post'],
            'return_format' => 'object',
            'gatompl'       => 'translate', // The referenced post ID is remapped to the target-language post
        ],
    ],
    'location' => [
        [
            [
                'param'    => 'block',
                'operator' => '==',
                'value'    => 'acf/testimonial',
            ],
        ],
    ],
]);

Это также работает для полей post_object, relationship, taxonomy, image, gallery и repeater: плагин будет следовать по вложенным путям repeater на любую глубину и переназначать ссылки на сущности (записи, термины, медиафайлы) к их эквивалентам на целевом языке.

3. Поле за полем (через хук acf/load_field)

Если вы не можете редактировать регистрацию группы полей, включите поля через те же хуки ACF, которые используются для их исключения:

add_filter(
    'acf/load_field/key=testimonial_text',
    static function (array|false $field): array|false {
        if (is_array($field)) {
            $field['gatompl'] = 'translate';
        }
        return $field;
    }
);

Регистрация блока ACF

Для справки — минимальная регистрация блока, соответствующая группе полей выше (с использованием acf_register_block_type из ACF PRO):

add_action('acf/init', function (): void {
    if (!function_exists('acf_register_block_type')) {
        return;
    }
    acf_register_block_type([
        'name'            => 'testimonial',
        'title'           => 'Testimonial',
        'description'     => 'A testimonial block.',
        'render_template' => plugin_dir_path(__FILE__) . 'acf-blocks/testimonial/template.php',
        'category'        => 'widgets',
        'icon'            => 'format-quote',
        'keywords'        => ['testimonial', 'quote'],
        'mode'            => 'preview',
    ]);
});

WPML Config

Gato AI Translations for Polylang автоматически читает wpml-config.xml, поставляемый любым плагином, и использует его для определения переводимых атрибутов блоков.

Уведомления Attempt Recovery

Некоторые блоки могут отображать уведомление Attempt Recovery в редакторе после перевода:

Переведённый блок вкладок Kadence, отображающий уведомление Attempt Recovery
Переведённый блок вкладок Kadence, отображающий уведомление Attempt Recovery

Подробнее см. в статье Почему некоторым блокам требуется «Attempt Recovery» после перевода?.

Отключение перевода конкретного свойства

Чтобы отключить перевод конкретного свойства (или всех свойств блока), определённого через wpml-config.xml, верните false из фильтра gatompl:use_wpml_config_for_block_type:

add_filter(
    'gatompl:use_wpml_config_for_block_type',
    static function (bool $enabled, string $blockTypeName, string $ruleKind): bool {
        // Stop reading wpml-config.xml rules for greenshift-blocks/button
        if ($blockTypeName === 'greenshift-blocks/button') {
            return false;
        }
        return $enabled;
    },
    10,
    3
);

Kadence Blocks

Все блоки плагина Kadence Blocks поддерживаются автоматически (через их wpml-config.xml).

Следующие блоки могут корректно отображаться на фронтенде после перевода, но показывать уведомление Attempt Recovery при открытии в редакторе:

  • kadence/single-icon
  • kadence/tabs
  • kadence/form

Нажатие Attempt Recovery перестраивает HTML блока, но является необязательным — вывод на фронтенде уже корректен (подробнее).

Greenshift Blocks

Все блоки Greenshift поддерживаются автоматически (через их wpml-config.xml).

Переведённые блоки Greenshift, как правило, требуют нажатия Attempt Recovery в редакторе на каждом блоке для регенерации его HTML (подробнее).

GenerateBlocks

Блоки от GenerateBlocks и GenerateBlocks PRO:

  • Container
  • Grid
  • Text
  • Button
  • Headline
  • Image
  • Query
  • Shape
  • Site Header
  • Accordion
  • Tabs
  • Navigation

Yoast SEO

Эти блоки поддерживаются только для простых строк. Строки, содержащие HTML-теги (включая ссылки, изображения, HTML-стили, такие как strong или italic, переносы строк и т.д.), не поддерживаются.

Прочитайте руководство Можно ли переводить все блоки Gutenberg? для получения дополнительной информации.

Блоки от Yoast SEO:

  • Yoast How-to
  • Yoast FAQ

Поддержка дополнительных блоков

Вы можете переводить пользовательские блоки из вашего приложения или блоки сторонних плагинов.

Ознакомьтесь с руководством Перевод дополнительных блоков Gutenberg для получения дополнительной информации.

Перевод синхронизированных шаблонов

Стандартная страница Внешний вид > Шаблоны в WordPress не поддерживает перевод синхронизированных шаблонов (также известных как повторно используемые блоки), поскольку:

  • Polylang не добавляет виджет для выбора языка (только Polylang PRO это делает)
  • Страница не предлагает Bulk Actions, поэтому перевод существующих шаблонов невозможен

По этой причине Gato AI Translations for Polylang предоставляет стандартную страницу Patterns CPT под пунктом меню Patterns (Gutenberg), включающую эти возможности.

Пользовательская страница Patterns
Пользовательская страница Patterns

С этого экрана можно переводить шаблоны (аналогично любому другому CPT):

  • Автоматически переводить новые шаблоны при публикации (с экрана Add Pattern)
  • Вручную переводить существующие шаблоны с помощью Bulk Actions
Перевод шаблонов через Bulk Actions
Перевод шаблонов через Bulk Actions

На экране также будут отображаться переведённые шаблоны:

Пользовательская страница Patterns
Пользовательская страница Patterns

Отключение пользовательской страницы Patterns

Вы можете отключить отображение страницы Patterns (Gutenberg) в меню.

Для этого перейдите в Settings, в раздел Plugin Integration Configuration > Gutenberg, и снимите флажок Enable the Custom Patterns page.

Включение пользовательской страницы Patterns в Settings
Включение пользовательской страницы Patterns в Settings