Há um segundo argumento na __()
função. Ele deve ser definido como o domínio que você está usando para o seu plugin ou tema. Nos exemplos abaixo eu uso 'text_domain'
. A string do seu domínio deve ser única. Não deve corresponder a nenhuma outra sequência de domínio. Não usar um argumento de domínio de texto é 'default'
o padrão para o nome de domínio do WordPress. Veja o link para mais detalhes.
Sempre use a string ( 'text_domain'
). Nunca use uma variável, função ou constante com a string nela. A maioria dos programas de tradução (todos?) Não o verá sem a string lá.
Seu código:
echo __( 'Hello ' . $first . ' you own me money.' );
Não inclua variáveis na sequência.
Uma maneira melhor:
echo sprintf( __( 'Hello %s you own me money.', 'text_domain' ), $first );
Ou apenas:
printf( __( 'Hello %s you own me money.', 'text_domain' ), $first );
O %s
marcador indica ao tradutor humano que uma string está sendo inserida lá. Use %d
para números. Existem também outros espaços reservados .
(Esta frase está em inglês gramaticalmente incorreto. Use um 'Hello %s, you owe me money.'
ou 'Hello %s, you own my money.'
dependendo do significado que você pretendia.)
Seu código:
$html = '<div><p>Top: ' . $t_margin . '</p>' . <p>Bottom: ' . $b_margin . '</p></div>';
Não traduza HTML. É o mesmo em qualquer idioma.
Uma maneira melhor:
$html = sprintf( '<div><p>%s</p><p>%s</p></div>', __( 'Top: ', 'text_domain' ) . $t_margin, __( 'Bottom: ', 'text_domain' ) . $b_margin );
Ou divida-o em várias linhas:
$html = sprintf(
'<div><p>%s</p><p>%s</p></div>',
__( 'Top: ', 'text_domain' ) . $t_margin,
__( 'Bottom: ', 'text_domain' ) . $b_margin
);
Se não estiver aparente o que é Top e Bottom, você pode usá-lo _x()
para explicar o contexto desses termos.
Você pode encontrar outros casos de tradução aqui: Internacionalização: você provavelmente está fazendo errado
textdomain
deve ser literal, não pode ser uma variável / constante / propriedade.sprintf()
. Essa é realmente a maneira de ter HTML na string traduzível.sprintf()
ajuda seja de outra forma, além de um visual mais limpo. Se você possui uma frase com HTML,Some text with a <strong>strong</strong> word inside.
como é possível traduzir a frase como um todo e não traduzirSome text with a
,strong
eword inside
individualmente (o que não faz sentido).Não abordarei a questão das variáveis na string, pois já foi dito.
Você deseja manter sua string estática, o que significa que o conteúdo não será alterado. Você também deseja excluir HTML desnecessário.
O acima irá ocupar duas linhas na sua tabela para o que é essencialmente o mesmo texto. Eles podem ser reescritos como:
Reduzindo-o para uma única linha.
Às vezes, o HTML no texto é inevitável. Considere por exemplo:
Como os idiomas são gramaticais, a divisão do texto causaria problemas para quem traduzisse.
Regra básica. As tags de formatação de texto HTML no meio da frase estão OK. As frases que começam e terminam com HTML apenas desperdiçam espaço.
fonte
"<b>$string</b>"
. Então você pode usar'You currently owe %s dollars'
. Mas pode precisar permanecer se você o usar com a_n()
função que requer um%d
espaço reservado.%s
para torná-lo um pouco mais claro.