Como funcionam as cadeias traduzidas e com escape (esc_attr) em Themes?

6

Eu estava olhando para o código TwentyEleven e achei isso:

esc_attr__( 'Permalink to %s', 'twentyeleven' )

Este é um código que saiu da tag do título para um post; o código completo dentro da tag de título sendo:

printf( esc_attr__( 'Permalink to %s', 'twentyeleven' ), the_title_attribute( 'echo=0' ) );

Eu verifiquei a documentação para a função esc_attr (parece ser o mesmo que a função esc_attr__ ?) e ele afirma que leva apenas um parâmetro, então como é que isso passa dois parâmetros?

    
por Brett 26.09.2012 / 12:30

1 resposta

6

Diferença geral entre esc_attr e esc_attr_*

A diferença entre esc_attr() e esc_attr__() , esc_attr_e() , esc_attr_x() é que os últimos três são apenas" wrappers "ou, em outras palavras, funções da API de nível superior.

Quando você olha para a fonte dos três últimos, então você verá que eles colocaram um único argumento em uma chamada para translate() (ou translate_with_gettext_context() para esc_attr_x() .

Isso significa que você está apenas jogando dois argumentos: A string para traduzir e o texto-texto que ajuda o WP a determinar qual arquivo de idioma usar para a tradução.

Tudo o que você vê é o sprintf() , que é a função padrão do php que substitui %s -partes e %d -parts em uma string (string / dígito).

Minetrap! Esteja ciente!

Se você não está passando um segundo argumento para as três versões posteriores de esc_attr() , então você vai encontrar o seguinte problema: WP agora acha que suas strings são parte do core e tenta traduzi-los. O que pode levar a resultados muito estranhos.

Outra coisa que pode acontecer é que a string de tradução (o segundo argumento) já é usada por um plugin ou tema. Neste caso, o último arquivo de tradução carregado ganha a corrida e é levado em vez do seu arquivo. Novamente: resultados muito estranhos. Correção: prefixe seu texto-domínio, como faria com nomes personalizados de funções ou globais.

Conclusão

Se você quiser evitar um segundo argumento, simplesmente vá com esc_attr( 'your string' ) e evite as outras três versões.

    
por kaiser 26.09.2012 / 13:24