Como traduzir o WordPress rapidamente?

Alguma vez você precisou editar um arquivo .po ou instalar um plugin apenas para traduzir uma palavra
ou uma frase?

Veja como traduzir palavras e/ou frases rapidamente usando snippets bem simples.

Abaixo você verá vários trechos de código. Se você já é um WordPress developer experiente, saberá qual usar para o seu caso. Mas caso fique confuso sobre qual trecho usar, então, você pode testar todos ou usar logo o último trecho de código, que é uma junção de todos.

PARA OS CURIOSOS!
Se você além de traduzir quer, também, entender como tudo funciona, leia esse artigo.

Filtro gettext

Este primeiro trecho traduz todo e qualquer texto que é parâmetro de uma das seguintes funções:

  • __()
  • _e()
  • esc_attr__()
  • esc_attr_e()
  • esc_html__()
  • esc_html_e()

E no exemplo abaixo a frase Deixe uma resposta será trocada para Deixe seu comentário.

    
/**
 * This function will retranslate every text which is a parameter of one of the following functions:
 * __()
 * _e()
 * esc_attr__()
 * esc_attr_e()
 * esc_html__()
 * esc_html_e()
 *
 * @param    string $translation Translated text.
 * @param    string $text        Text to translate.
 * @param    string $domain      Text domain.
 * @return    string    $translation        Retranslated string.
 */

function custom_translation_for_gettext($translation, $text, $domain)
{
    $translation = str_replace('Deixe uma resposta', 'Deixe seu comentário', $translation);

    return $translation;
}

add_filter('gettext', 'custom_translation_for_gettext', 100, 3);
    

Filtro ngettext

Este segundo trecho traduz todo e qualquer texto que é parâmetro de uma das seguintes funções:

  • _n()

E no exemplo abaixo a palavra Comment será trocada para Comentário. E a palavra Comments será trocada para Comentários.

    
/**
 * This function will retranslate every text which is a parameter of one of the following functions:
 * _n()
 *
 * @param    string $translation Translated text.
 * @param    string $single      The text to be used if the number is singular.
 * @param    string $plural      The text to be used if the number is plural.
 * @param    string $number      The number to compare against to use either the singular or plural form.
 * @param    string $domain      Text domain.
 * @return    string    $translation        Retranslated string.
 */

function custom_translation_for_ngettext($translation, $single, $plural, $number, $domain)
{
    $translation = str_replace('Comment', 'Comentário', $translation);

    $translation = str_replace('Comments', 'Comentários', $translation);

    return $translation;
}

add_filter('ngettext', 'custom_translation_for_ngettext', 100, 5);
    

Filtro gettext_with_context

Este terceiro trecho traduz todo e qualquer texto que é parâmetro de uma das seguintes funções:

  • _x()
  • _ex()
  • esc_attr_x()
  • esc_html_x()

E no exemplo abaixo a palavra Comment será trocada para Comentar ou Comentário. Veja que usamos a variável $context para decidir qual é a tradução correta.

    
/**
 * This function will retranslate every text which is a parameter of one of the following functions:
 * _x()
 * _ex()
 * esc_attr_x()
 * esc_html_x()
 *
 * @param    string $translation Translated text.
 * @param    string $text        Text to translate.
 * @param    string $context     Context information for the translators.
 * @param    string $domain      Text domain.
 * @return    string    $translation        Retranslated string.
 */

function custom_translation_for_gettext_with_context($translation, $text, $context, $domain)
{
    if ($context == 'verb')
        $translation = str_replace('Comment', 'Comentar', $translation);
    elseif ($context == 'noun')
        $translation = str_replace('Comment', 'Comentário', $translation);

    return $translation;
}

add_filter('gettext_with_context', 'custom_translation_for_gettext_with_context', 100, 4);
    

Filtro ngettext_with_context

Este quarto trecho traduz todo e qualquer texto que é parâmetro de uma das seguintes funções:

  • _nx()

E no exemplo abaixo a palavra Comment será trocada para Comentar ou Comentário. Veja que usamos a variável $context para decidir qual é a tradução correta.

    
/**
 * This function will retranslate every text which is a parameter of one of the following functions:
 * _nx()
 *
 * @param    string $translation Translated text.
 * @param    string $single      The text to be used if the number is singular.
 * @param    string $plural      The text to be used if the number is plural.
 * @param    string $number      The number to compare against to use either the singular or plural form.
 * @param    string $context     Context information for the translators.
 * @param    string $domain      Text domain.
 * @return    string    $translation        Retranslated string.
 */

function custom_translation_for_ngettext_with_context($translation, $single, $plural, $number, $context, $domain)
{
    if ($context == 'verb')
        $translation = str_replace('Comment', 'Comentar', $translation);

    elseif ($context == 'noun')
        $translation = str_replace('Comment', 'Comentário', $translation);

    return $translation;
}

add_filter('ngettext_with_context', 'custom_translation_for_ngettext_with_context', 100, 6);
    

Todos os filtros de tradução juntos

Este último trecho traduz todo e qualquer texto que é parâmetro de qualquer uma das funções citadas acima. Ou seja, aqui temos uma fusão de todos os códigos acima. Aqui é pra quando você está sem paciência e não se importa com elegância nem com consequências ruins.

    
/**
 * This function will retranslate every text which is a parameter of one of the following functions:
 * __()
 * _e()
 * _n()
 * _nx
 * _x
 * _ex()
 * esc_attr__()
 * esc_attr_e()
 * esc_attr_x()
 * esc_html__()
 * esc_html_e()
 * esc_html_x()
 *
 * @param    string $translation Translated text.
 * @return    string    $translation        Retranslated string.
 */
function custom_translation_for_all_functions($translation)
{
    $translation = str_replace('Deixe uma resposta', 'Deixe seu comentário', $translation);

    return $translation;
}

add_filter('gettext', 'custom_translation_for_all_functions', 100);

add_filter('ngettext', 'custom_translation_for_all_functions', 100);

add_filter('gettext_with_context', 'custom_translation_for_all_functions', 100);

add_filter('ngettext_with_context', 'custom_translation_for_all_functions', 100);
    

Notas importantes sobre esse método de tradução

  • A função str_replace() diferencia maiúsculas e minúsculas. Para não diferenciar use str_ireplace().
  • Este é um artigo bastante técnico. Caso tenha ficado confuso, mas ainda queira tentar enteder melhor, leia meu artigo sobre internacionalização e depois volte aqui.
Comentários