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 usestr_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.