Uau! Se você quer saber o que significa este post, não se preocupe, você não é o único! Como você sabe, o WordPress é traduzido para muitos idiomas, mas muitas vezes os plugins ou temas contêm algumas strings que não são traduzidas para o seu próprio idioma e isso é mais do que frustrante: é irritante.
Então por que isso acontece? Provavelmente porque os desenvolvedores não usam como deveriam a internacionalização . Ou seja, o uso de funções específicas incluídas no WordPress que permitem uma maneira fácil de traduzir tudo.
Passo 1 – Carregando arquivos de tradução
O primeiro passo ao criar um tema é carregar os arquivos de tradução, existem muitas maneiras de fazer isso, mas a mais simples é usar este código:
add_action(‘after_setup_theme’, ‘my_theme_setup’);
function my_theme_setup(){
load_theme_textdomain(‘my_theme’, get_template_directory() . ‘/languages’);
}
Ao trabalhar em um plugin, é praticamente a mesma coisa:
function myplugin_init() {
load_plugin_textdomain( ‘my-plugin’, false, dirname( plugin_basename( __FILE__ ) ) );
}
add_action(‘plugins_loaded’, ‘myplugin_init’);
Agora que os arquivos estão carregados em uma pasta “languages”, você pode criar um arquivo .pot ou .po usando o software gratuito POedit .
Passo 2 – Traduzindo strings
Quando você precisa que uma string seja traduzível, você precisa incluir a string contida em uma função. As funções mais utilizadas são _e() e __(). Aqui está um exemplo de como usar __():
echo ‘<p>’ . __( ‘This is the string content’, ‘textdomain’ ) . ‘</p>’;
O que esta função está retornando a string contém, mas não a imprime. É por isso que precisamos usar echo. Mas a função _e() está imprimindo a string sem usar echo ou print:
echo ‘<p>’;
_e( ‘This is the string content’, ‘textdomain’ );
echo ‘</p>’;
Passo 3 – Traduzindo string contendo variáveis
Mas às vezes sua string pode conter variáveis. Usar _e() e __() não funciona. Então, nesse caso você precisa das funções printf() e sprintf(). Como vimos anteriormente, printf() ecoa a string enquanto sprintf() a armazena.
echo ‘<p>’;
printf( __( ‘I bought %d books.’ ), $_books_count );
echo ‘</p>’;
echo ‘<p>’;
echo sprintf( __( ‘I bought %d books.’ ), $_books_count );
echo ‘</p>’;
Passo 4 – Strings com mais de uma variável
No caso de uma string contendo mais de uma variável, use o seguinte código:
printf( __( ‘I bought %1$s books, and %2$s tomatoes.’ ), $books_count, $tomatoes_count );
Passo 5 – Lidando com plurais
No exemplo acima eu comprei livros e tomates. Mas o que eu comprei apenas um livro? O código imprimirá “1 livros”, e isso não está correto. Então, para lidar com o plural, existe outra função chamada _n(). Aqui está como usá-lo:
printf( _n( ‘i bought %d book.’, ‘i bought %d books.’, $books_count ), $books_count );
Passo 6 – Contextos
Às vezes, uma palavra pode ter significados diferentes devido ao seu contexto. Você pode então usar essas funções _x() e _ex(). O segundo ecoa a string enquanto o primeiro armazena apenas seu conteúdo. Essas funções têm um segundo argumento para explicar seu contexto. Por exemplo, se uma palavra for usada duas vezes em uma página, mas tiver significados diferentes no conteúdo e na barra lateral, seu código ficará assim:
/*
APPARENT (obvious vs. not clear) — It was apparent to all, Joe was the apparent loser.
Two different contexts for the word “apparent”
*/
// In the content
echo _x( ‘apparent’, ‘in_content’, ‘my-plugin-domain’ );
// In the sidebar
echo _x( ‘apparent’, ‘in_sidebar’, ‘my-plugin-domain’ );
Passo 7 – Internacionalização do Javascript
E finalmente quando você tem uma string que precisa ser traduzível em um arquivo javascript, você pode usar um método definido no codex usando wp_localize_script().
// In your PHP file:
wp_enqueue_script( ‘script-handle’, … );
wp_localize_script( ‘script-handle’, ‘objectL10n’, array(
‘speed’ => $distance / $time,
‘submit’ => __( ‘Submit’, ‘my-plugin-domain’ ),
) );
// in the javascript file:
$(‘#submit’).val(objectL10n.submit);
$(‘#speed’).val(‘{speed} km/h’.replace(‘{speed}’, objectL10n.speed));
Basta substituir suas próprias variáveis e pronto!