Page Builder
Page BuilderGutenberg

Gutenberg

O suporte ao Gutenberg já está integrado, para traduzir todos os blocos do seu conteúdo Gutenberg.

O Gato AI Translations for Polylang extrai as strings dos blocos do conteúdo Gutenberg e traduz apenas essas strings, garantindo que o conteúdo não seja alterado de nenhuma forma.

Por padrão, os seguintes tipos de blocos são suportados automaticamente:

  • Blocos do core do WordPress
  • Blocos apenas PHP
  • Blocos Advanced Custom Fields (ACF)
  • Todos os blocos que incluem um wpml-config.xml
  • Blocos de terceiros:
    • Kadence Blocks
    • Greenshift blocks
    • GenerateBlocks blocks
    • Yoast SEO blocks

Blocos do core do WordPress suportados

Os seguintes blocos do core do WordPress são suportados por padrão:

  • core/audio
  • core/block (ou seja, padrões sincronizados)
  • 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

Blocos apenas PHP

A partir do WordPress 7.0, os blocos podem ser registrados como apenas PHP (sem bundle JavaScript). O Gato AI Translations for Polylang os trata como qualquer outro bloco: são suportados por padrão, sem nenhuma configuração adicional.

Todos os atributos do tipo string (exceto enums e outros tipos escalares) são registrados automaticamente para tradução.

Se um campo específico não deve ser traduzido, você pode excluí-lo via o hook gatompl:gutenberg_block_type_translatable_attribute_regexes definindo-o como false (ou aplicando 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;
    }
);

Blocos Advanced Custom Fields (ACF)

Os blocos registrados via Advanced Custom Fields também são suportados por padrão. Existem 3 maneiras de registrar um campo ACF para tradução:

1. Automaticamente para todos os campos (via Settings)

Acesse a página de Settings, em Plugin Integration Configuration > Advanced Custom Fields, e ative a opção Translate ACF blocks automatically?:

Habilitando a tradução automática para blocos ACF
Habilitando a tradução automática para blocos ACF

Quando habilitada, cada campo de string traduzível em cada bloco ACF é enviado para tradução. Se um campo específico não deve ser traduzido, exclua-o via o hook ACF padrão acf/load_field, definindo gatompl como '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. Campo por campo (via a configuração do grupo de campos ACF)

Ao definir seu grupo de campos com acf_add_local_field_group(), adicione 'gatompl' => 'translate' diretamente a cada campo que deseja traduzir:

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',
            ],
        ],
    ],
]);

Isso também funciona para campos post_object, relationship, taxonomy, image, gallery e repeater: o plugin seguirá os caminhos de repeaters aninhados a qualquer profundidade e remapeará referências de entidades (posts, termos, mídia) para seus equivalentes no idioma de destino.

3. Campo por campo (via o hook acf/load_field)

Se você não puder editar o registro do grupo de campos, inclua os campos via os mesmos hooks ACF usados para excluí-los:

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

Registrando um bloco ACF

Para referência, aqui está um registro mínimo de bloco que combina com o grupo de campos acima (usando acf_register_block_type do 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

O Gato AI Translations for Polylang lê automaticamente o wpml-config.xml incluído em qualquer plugin e o utiliza para determinar quais atributos dos blocos são traduzíveis.

Avisos de Attempt Recovery

Alguns blocos podem exibir um aviso Attempt Recovery no editor após a tradução:

Bloco de abas Kadence traduzido exibindo o aviso Attempt Recovery
Bloco de abas Kadence traduzido exibindo o aviso Attempt Recovery

Consulte Por que alguns blocos precisam de 'Attempt Recovery' após a tradução? para mais detalhes.

Desabilitando a tradução de uma propriedade específica

Para desabilitar a tradução de uma propriedade específica (ou de todas as propriedades de um bloco) definida via wpml-config.xml, retorne false a partir do filtro 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

Todos os blocos do plugin Kadence Blocks são suportados automaticamente (via o seu wpml-config.xml).

Os seguintes blocos podem ser renderizados corretamente no frontend após a tradução, mas exibir um aviso Attempt Recovery quando abertos no editor:

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

Clicar em Attempt Recovery reconstrói o HTML do bloco, mas é opcional — a saída no frontend já está correta (leia os detalhes).

Greenshift Blocks

Todos os blocos do Greenshift são suportados automaticamente (via o seu wpml-config.xml).

Os blocos traduzidos do Greenshift geralmente exigem clicar em Attempt Recovery no editor em cada bloco para regenerar o seu HTML (leia os detalhes).

GenerateBlocks

Blocos do GenerateBlocks e do GenerateBlocks PRO:

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

Yoast SEO

Estes blocos são suportados apenas para strings simples. Strings contendo tags HTML (incluindo links, imagens, estilos HTML como strong ou italic, quebras de linha, etc.) não são suportadas.

Leia o guia Todos os blocos Gutenberg podem ser traduzidos? para mais informações.

Blocos do Yoast SEO:

  • Yoast How-to
  • Yoast FAQ

Suporte a blocos adicionais

Você pode traduzir blocos personalizados da sua aplicação ou blocos de plugins de terceiros.

Consulte o guia Traduzindo blocos Gutenberg adicionais para mais informações.

Traduzindo padrões sincronizados

A página padrão Aparência > Padrões do WordPress não suporta a tradução de padrões sincronizados (também conhecidos como blocos reutilizáveis), porque:

  • O Polylang não adiciona o widget para selecionar o idioma (somente o Polylang PRO faz isso)
  • Ela não oferece Bulk Actions, portanto não é possível traduzir padrões existentes

Por esse motivo, o Gato AI Translations for Polylang oferece a página padrão Patterns CPT, sob o item de menu Patterns (Gutenberg), habilitando esses recursos.

A página personalizada de Padrões
A página personalizada de Padrões

Você pode traduzir padrões a partir desta tela (de forma similar a qualquer outro CPT):

  • Traduzir automaticamente novos padrões ao publicá-los (a partir da tela Add Pattern)
  • Traduzir manualmente padrões existentes usando Bulk Actions
Traduzindo padrões via Bulk Actions
Traduzindo padrões via Bulk Actions

A tela também exibirá os padrões traduzidos:

A página personalizada de Padrões
A página personalizada de Padrões

Desabilitando a página personalizada de Padrões

Você pode desabilitar a exibição da página Patterns (Gutenberg) no menu.

Para isso, acesse Settings em Plugin Integration Configuration > Gutenberg, e desmarque a caixa de seleção Enable the Custom Patterns page.

Habilitar a página personalizada de Padrões nas Settings
Habilitar a página personalizada de Padrões nas Settings