Localizando uma string com tag html com word dentro dessa tag

2

Traduzi muitas sequências com sucesso anteriormente, mas essa me causa dor de cabeça. Esta parte é usada dentro do meu arquivo relacionado a conteúdo.php que eu uso para exibir posts relacionados

Aqui está a string atual que estou usando

<?php echo 'Click <a href="'. esc_url( get_permalink() ) . '">here</a> to go and wacth the video.' ?>

Meu problema no processo de localização é o

<a href="'. esc_url( get_permalink() ) . '">here</a>

parte no meio.

O melhor que eu pude fazer é

<?php printf(__('Click %s to go and wacth the video.', 'pietergoosen'), '<a href="'. esc_url( get_permalink() ) . '">here</a>'); ?>

OK, eu sei que posso criar uma variável para a tag <a> e usar a variável na string printf() em vez da tag <a> inteira, mas essa não é a preocupação agora, e isso foi feito apenas para testar o resultado primeiro.

Com a string em sua ordem alterada, a string é traduzida, exceto pela palavra "here" que está dentro da tag <a> . Como posso obter a string para traduzir a palavra "aqui" também. Eu li em algum lugar, acho que foi no Codex, que não é uma boa idéia dividir uma string em várias strings, pois pode causar problemas para certas línguas, pois a ordem das palavras diferem em algumas línguas.

Mais alguma sugestão para resolver este problema?

    
por Pieter Goosen 25.02.2014 / 09:24

4 respostas

2

Solução possível para tornar tudo traduzível como uma única picada.

<?php printf(__('Click <a href="%s">Here</a> to go and wacth the video.', 'pietergoosen'), esc_url( get_permalink() )); ?>

Normalmente é seguro assumir que o tradutor tenha conhecimento suficiente de HTML para entender o que está acontecendo lá.

    
por Mark Kaplun 25.02.2014 / 09:46
3

Outra opção é dividir a tag em duas strings:

printf(__('Click %shere%s to go and wacth the video.', 'pietergoosen'), '<a href="'. esc_url( get_permalink() ) . '">', '</a>');
    
por levi 05.03.2014 / 23:26
3

Embora isso não responda exatamente à questão de traduzir strings contendo HTML, mas dê um passo para trás por um momento - você pode estar tornando as coisas mais difíceis do que precisam. Por que você não reformula o texto para simplesmente dizer "Assista ao vídeo". Torna-se um problema não, porque você pode simplesmente envolver toda a string em uma âncora, deixando a string livre de qualquer HTML da seguinte forma:

printf( '<a href="%s">%s</a>',
        esc_url( get_permalink() ),
        __( 'Watch the video', 'pietergoosen' )
);

Se o link tiver um estilo apropriado (o que significa que obviamente é clicável), não acho que você precise dizer às pessoas para "clicar aqui".

Apenas um pensamento!

    
por Emzo 12.03.2014 / 11:11
2

Quando você olha para a Documentação i18n no Codex e especialmente para a Desambiguação por Contexto seção, você encontrará _x() e _ex() (o último é o echo variant), que permite adicionar contexto a uma string ou, em outras palavras: deixar uma mensagem para tradutores:

printf(
    _x(
        'Click %shere%s to go and watch the video',
        '%s represents the opening and closing HTML tags for an anchor or link',
        'your_textdomain'
    ),
    '<a href="'.esc_url( get_permalink() ).'" title="'.get_the_title().'">',
    '</a>'
);

Então primeiro a string é traduzida. Depois disso, as partes %s dentro da string serão substituídas. Isso ajudará você a superar cenários em que um idioma precisa de uma quantidade completamente diferente de palavras ou uma posição diferente na sentença a ser agrupada com uma marca de âncora. Isso também ajudará você a evitar a necessidade de dividir sua sentença.

    
por kaiser 25.02.2014 / 14:15