Permitir que sua rede de publicidade use recursos de tradução da Pesquisa Google
A Pesquisa Google oferece vários recursos de tradução que permitem aos usuários acessar o conteúdo traduzido. Caso você administre uma rede de publicidade e seus anúncios não estejam funcionando conforme o esperado em páginas da Web traduzidas, siga as etapas deste guia para garantir que eles sejam renderizados ou atribuídos corretamente.
Nossa abordagem
Depois que os usuários acessam o conteúdo traduzido fornecido pelo Google Tradutor clicando no resultado da pesquisa, o Google recupera a página do editor, reescreve o URL de origem e traduz a página da Web.
Converter o URL do Google Tradutor no URL original
Caso sua rede de publicidade dependa do URL de origem do editor, será preciso converter o URL do Google Tradutor para que seus anúncios funcionem corretamente. Siga estas etapas para decodificar o nome do host do editor:
- Extraia o prefixo de domínio do nome do host removendo o sufixo
.translate.goog
. - Divida o parâmetro
_x_tr_enc
pelo caractere,
(vírgula) e salve-o comoencoding_list
. - Inclua o valor do parâmetro
_x_tr_hp
no prefixo do domínio (se houver). - Se
encoding_list
contiver1
e a saída começar com1-
, remova o prefixo1-
da saída da etapa 2. - Se
encoding_list
contiver0
e a saída começar com0-
, remova o prefixo0-
da saída da etapa 3. Se tiver removido o prefixo, definais_idn
comotrue
. Caso contrário, definais_idn
comofalse
. - Substitua
/\b-\b/
(regex) pelo caractere.
(ponto). - Substitua o caractere
--
(hífen duplo) pelo caractere-
(hífen). - Se
is_idn
estiver definido comotrue
, adicione o prefixo punycodexn--
. - Opcional: converta para Unicode.
Exemplo de código JavaScript para decodificar o nome do host de um URL do Google Tradutor
function decodeHostname(proxyUrl) { const parsedProxyUrl = new URL(proxyUrl); const fullHost = parsedProxyUrl.hostname; // 1. Extract the domain prefix from the hostname, by removing the ".translate.goog" suffix let domainPrefix = fullHost.substring(0, fullHost.indexOf('.')); // 2. Split _x_tr_enc parameter by "," (comma), save as encodingList const encodingList = parsedProxyUrl.searchParams.has('_x_tr_enc') ? parsedProxyUrl.searchParams.get('_x_tr_enc').split(',') : []; // 3. Prepend value of _x_tr_hp parameter to the domain prefix, if it exists if (parsedProxyUrl.searchParams.has('_x_tr_hp')) { domainPrefix = parsedProxyUrl.searchParams.get('_x_tr_hp') + domainPrefix; } // 4. Remove '1-' prefix from the output of step 2 if encodingList contains // '1' and the output begins with '1-'. if (encodingList.includes('1') && domainPrefix.startsWith('1-')) { domainPrefix = domainPrefix.substring(2); } // 5. Remove '0-' prefix from the output of step 3 if encodingList contains // '0' and the output begins with '0-'. // Set isIdn to true if removed, false otherwise. let isIdn = false; if (encodingList.includes('0') && domainPrefix.startsWith('0-')) { isIdn = true; domainPrefix = domainPrefix.substring(2); } // 6. Replace /\b-\b/ (regex) with '.' (dot) character. // 7. Replace '--' (double hyphen) with '-' (hyphen). let decodedSegment = domainPrefix.replaceAll(/\b-\b/g, '.').replaceAll('--', '-'); // 8. If isIdn equals true, add the punycode prefix 'xn--'. if (isIdn) { decodedSegment = 'xn--' + decodedSegment; } return decodedSegment; }
Reconstruir o URL
- No URL da página original, substitua o nome do host pela versão decodificada.
- Remova todos os parâmetros
_x_tr_*
.
Testar o código
É possível criar testes de unidade para seu código usando a tabela a seguir. Com um proxyUrl
, o decodeHostname
precisa ser igual ao valor esperado.
A tabela a seguir só pode ser usada para testar a decodificação do nome do host. O caminho, o fragmento e os parâmetros originais do URL precisam ficar como estão.
proxyUrl
|
decodeHostname
|
---|---|
https://example-com.translate.goog
|
example.com
|
https://foo-example-com.translate.goog
|
foo.example.com
|
https://foo--example-com.translate.goog
|
foo-example.com
|
https://0-57hw060o-com.translate.goog/?_x_tr_enc=0
|
xn--57hw060o.com (⚡😊.com)
|
https://1-en--us-example-com/?_x_tr_enc=1
|
en-us.example.com
|
https://0-en----w45as309w-com.translate.goog/?_x_tr_enc=0
|
xn--en--w45as309w.com (en-⚡😊.com)
|
https://1-0-----16pw588q-com.translate.goog/?_x_tr_enc=0,1
|
xn----16pw588q.com (⚡-😊.com)
|
https://lanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch-co-uk.translate.goog/?_x_tr_hp=l
|
llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch.co.uk
|
https://lanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch-co-uk.translate.goog/?_x_tr_hp=www-l
|
www.llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch.co.uk
|
https://a--aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-com.translate.goog/?_x_tr_hp=a--xn--xn--xn--xn--xn--------------------------a
|
a-xn-xn-xn-xn-xn-------------aa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com
|
https://g5h3969ntadg44juhyah3c9aza87iiar4i410avdl8d3f1fuq3nz05dg5b-com.translate.goog/?_x_tr_enc=0&_x_tr_hp=0-
|
xn--g5h3969ntadg44juhyah3c9aza87iiar4i410avdl8d3f1fuq3nz05dg5b.com (💖🌲😊💞🤷♂️💗🌹😍🌸🌺😂😩😉😒😘💕🐶🐱🐭🐹🐰🐻🦊🐇😺.com)
|