Como traduzir o WordPress rapidamente?

Traduzir apenas algumas frases aqui e ali não precisa ser uma dor de cabeça. Use o filtro gettext e adiante o desenvolvimento do seu projeto.

Atualizado em 07/05/2020
Compartilhe

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

Veja como traduzir palavras e/ou frases rapidamente usando um código 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 código usar, então, você pode testar todos ou usar logo o último trecho de código, que é uma junção de todos.

O filtro gettext

O código abaixo 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()

Saiba mais sobre as funções de internacionalização/localização do WordPress.

/**
 * This function will translate 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        Translated 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 );

No exemplo acima a frase Deixe uma resposta é alterada para Deixe seu comentário:

O filtro ngettext

O código abaixo traduz todo e qualquer texto que é parâmetro de uma das seguintes funções:

  • _n()
/**
 * This function will translate 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        Translated 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 );

No exemplo acima a palavra Comment é alterada para Comentário. E a palavra Comments para Comentários.

O filtro gettext_with_context

O código abaixo traduz todo e qualquer texto que é parâmetro de uma das seguintes funções:

  • _x()
  • _ex()
  • esc_attr_x()
  • esc_html_x()
/**
 * This function translates 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        Translated 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 );

No exemplo acima a palavra Comment é alterada para Comentar ou Comentário. Veja que usamos a variável $context para decidir qual é a tradução correta.

O filtro ngettext_with_context

O código abaixo traduz todo e qualquer texto que é parâmetro de uma das seguintes funções:

  • _nx()
/**
 * This function translates 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        Translated 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 );

No exemplo acima a palavra Comment é alterada para Comentar ou Comentário. Veja que usamos a variável $context para decidir qual é a tradução correta.

Todos os filtros de tradução juntos

O código abaixo traduz todo e qualquer texto que é parâmetro de qualquer uma das funções citadas acima. Ou seja, uma fusão de todos os códigos acima.

/**
 * This function translates 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        Translated 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 apresentado

  • A função str_replace() diferencia maiúsculas e minúsculas. Para não diferenciar use str_ireplace().
  • Este post é bastante técnico. Caso você tenha ficado confuso, mas ainda queira tentar entender melhor, leia o artigo sobre internacionalização, volte aqui e leia esse conteúdo novamente.

Imagens: www.theregister.co.uk

Por <a href='https://dpw.ninja/author/filipe/' rel='dofollow' class='dim-on-hover'>Filipe Seabra</a>
Por Filipe Seabra
Full Stack Web Developer.

Comentários