Pular para o conteúdo principal
Upgrade to Pro
Português (Brasil)
简体中文
繁體中文
繁體中文(香港)
English
日本語
العربية
Deutsch
Español
Français
हिन्दी
Italiano
한국어
Português
Português (Brasil)
Русский
ไทย
Tiếng Việt

Opções Avançadas de Personalização

Esta página destina-se a usuários avançados com alguma experiência em HTML/CSS/JSON. Configurações avançadas podem melhorar significativamente a adaptabilidade, mas também aumentam a chance de criar configurações que "parecem corretas mas não funcionam". Recomenda-se fazer backup antes de editar.

Avisos Antes de Usar​

  • Acesse em Configurações de Desenvolvedor.
  • Faça backup de User Config / User Rules antes de editar, para evitar perda de configuração por erro de formatação.
  • Considere a configuração final interna como referência (“Click to expand the final config”) para campos, valores padrão e serviços disponíveis.

Pontos de Entrada e Prioridade​

Entradas comuns (Configurações de Desenvolvedor):

  • Edit Full User Config: configuração completa (inclui rules, serviços de tradução, estilos, etc).
  • Edit User Rules: edita somente o array rules (aceita apenas array, não inclua { "rules": [...] }).
  • Injected CSS: injeção global de CSS.

Prioridade (maior para menor): rules correspondentes > generalRule > configuração padrão interna. Ao corresponder uma rule, ela é mesclada com generalRule, prevalecendo os campos da rule.

Início Rápido (Requisitos Mais Comuns)​

1) Traduzir apenas o conteúdo principal de um site​

{
"rules": [
{
"matches": ["example.com"],
"selectors": ["article", ".post-content"],
"excludeSelectors": ["nav", "footer", ".comment"]
}
]
}

2) Sempre/Nunca traduzir​

{
"translationUrlPattern": {
"matches": ["stackoverflow.com"],
"excludeMatches": ["www.google.com/mail/*"]
}
}

3) Usar diferentes serviços de tradução por site​

{
"translationService": "google",
"translationServices": {
"deepl": {
"matches": ["sci-hub.se"]
}
}
}

4) Estilo da tradução por site​

{
"translationTheme": "none",
"translationThemePatterns": {
"underline": {
"matches": ["discord.com"]
}
}
}

5) Corrigir problemas de estilo causados pela tradução​

{
"rules": [
{
"matches": ["youtube.com"],
"globalStyles": {
"#video-title": "max-height:unset;"
}
}
]
}

6) Não mostrar serviços de tradução não configurados no painel​

{
"showUnconfiguredTranslationServiceInPopup": false
}

Regras e Correspondência​

Mesclagem de Regras​

  • generalRule: base de regras comuns a todos os sites.
  • rules: regra específica do site, com prioridade máxima se corresponder.

Campos dentro de rules podem usar a maioria dos campos disponíveis em generalRule.

Formatos comuns de "matches"​

matches aceita string ou array:

  • Domínio: example.com
  • URL completa: https://example.com/path/
  • Curinga: https://*/*q=*
  • Corresponder tudo: * / *://* / *://*/*
  • Arquivo local: file://*

Observação: *.twitter.com só corresponde subdomínios, não o domínio raiz twitter.com.

selectors / excludeSelectors​

  • selectors: traduz apenas elementos correspondentes (substitui o escopo padrão).
  • excludeSelectors: elementos a serem excluídos da tradução.

Para apenas adicionar/remover do escopo original, prefira usar .add / .remove (veja próxima seção).

Herança e Modificações Incrementais (.add / .remove)​

Para campos array ou objeto, suporte a .add / .remove para modificações incrementais. Recomenda-se seu uso para evitar sobrescrever regras padrão:

[
{
"id": "twitter",
"selectors.add": ["[data-testid='tweetText'] a"],
"excludeSelectors.add": ["header"]
}
]

Referência Rápida de Campos Comuns (parcial)​

Relacionados à correspondência:

  • matches / excludeMatches
  • selectorMatches / excludeSelectorMatches

Escopo da tradução:

  • selectors / excludeSelectors / excludeTags
  • stayOriginalSelectors / stayOriginalTags
  • extraInlineSelectors / extraBlockSelectors

Estilo e layout:

  • translationClasses: classes extras para o texto traduzido
  • globalStyles / globalAttributes
  • injectedCss / additionalInjectedCss
  • wrapperPrefix / wrapperSuffix
  • blockMinTextCount / blockMinWordCount

Momento e mobile:

  • urlChangeDelay / observeUrlChange
  • isShowUserscriptPagePopup

Tradução de mensagens em fluxo estilo GPT​

{
"matches": ["chat.openai.com"],
"excludeSelectors": [".markdown *"],
"aiRule": {
"streamingSelector": ".result-streaming.markdown",
"messageWrapperSelector": ".markdown",
"streamingChange": true
}
}

Mais detalhes de campos: veja no final em "Apêndice: Referência de Campos de Rule".

Lógica de correspondência em "matches" (resumo)​

  • Domínio puro (sem *, sem caminho): compara apenas hostname.
  • URL completa (sem *): compara protocolo + host + porta + caminho.
  • Com * ou sem protocolo: usa regras de coringa (http/https/file suportados por padrão).

Exemplos comuns:

  • twitter.com ✅ corresponde a https://twitter.com/home
  • *.twitter.com ✅ corresponde a https://mobile.twitter.com, ❌ não corresponde a https://twitter.com
  • https://twitter.com/home só corresponde a essa URL exata
  • twitter.com/* corresponde a todas as rotas sob twitter.com

Caso de adaptação de site (exemplo com Twitter)​

Exemplo de regra interna do Twitter, mostrando uso típico de selectors / excludeSelectors / globalStyles:

[
{
"id": "twitter",
"matches": [
"twitter.com",
"mobile.twitter.com",
"tweetdeck.twitter.com",
"pro.twitter.com",
"https://platform.twitter.com/embed*"
],
"selectors": [
"[data-testid=\"tweetText\"]",
".tweet-text",
".js-quoted-tweet-text",
"[data-testid='card.layoutSmall.detail'] > div:nth-child(2)",
"[data-testid='developerBuiltCardContainer'] > div:nth-child(2)",
"[data-testid='card.layoutLarge.detail'] > div:nth-child(2)",
"[data-testid='cellInnerDiv'] div[data-testid='UserCell'] > div> div:nth-child(2)",
"[data-testid='UserDescription']",
"[data-testid='HoverCard'] div[dir=auto]",
"[data-testid='HoverCard'] span[dir=auto]",
"[data-testid='HoverCard'] [role='dialog'] div[dir=ltr]",
"[data-testid='birdwatch-pivot'] div[dir=ltr]"
],
"excludeSelectors": [
"[aria-describedby][role=button]",
"header",
"[data-testid='radioGroupplayback_rate'] div",
"[data-testid='userFollowIndicator']",
"[class='css-901oao r-14j79pv r-37j5jr r-n6v787 r-16dba41 r-1cwl3u0 r-bcqeeo r-qvutc0']",
"[class='css-175oi2r r-1wbh5a2 r-dnmrzs']"
],
"globalStyles": {
"[data-testid='card.layoutLarge.detail'] > div:nth-child(2)": "-webkit-line-clamp: unset;",
"[data-testid='card.layoutSmall.detail'] > div:nth-child(2)": "-webkit-line-clamp: unset;",
"[data-testid='tweetText']": "-webkit-line-clamp: unset;"
}
}
]
  • selectors: traduz apenas o conteúdo principal do tweet, evitando nomes/botões. tweet
  • excludeSelectors: exclui botões, navegação e elementos interativos. twitter-follow
  • globalStyles: remove o limite de linhas para evitar corte na tradução. 用户主页

Adaptação personalizada de sites​

Você pode reutilizar regras internas via id e modificar incrementando com .add/.remove:

[
{
"id": "twitter",
"selectors.remove": ["[data-testid=\"tweetText\"]"],
"selectors.add": ["[data-testid=\"tweetText\"] a"],
"excludeSelectors.add": ["header"],
"excludeSelectors.remove": []
}
]

Observação:

  • id herda regras internas, evitando repetição de matches.
  • .add/.remove só altera itens no respectivo array, evitando sobrescrever.

IDs internos comuns (parcial):

  • isEbook: leitor de epub
  • isEbookBuilder: gerador de epub bilíngue
  • pdf: página bilíngue para PDF

Lista completa de regras internas:

  • https://github.com/immersive-translate/next-immersive-translate/blob/main/docs/buildin_config.json

Configurando serviços de tradução​

  • translationService: motor de tradução padrão.
  • translationServices: configurações por serviço e sobrescritas por site.
  • showUnconfiguredTranslationServiceInPopup: esconde serviços não configurados.

Exemplo (com Tencent):

{
"translationService": "tencent",
"translationServices": {
"tencent": {
"secretId": "xxx",
"secretKey": "xxx",
"matches": ["twitter.com"],
"limit": 3,
"maxTextGroupLengthPerRequest": 25,
"maxTextLengthPerRequest": 1800,
"apiUrl": ""
}
}
}

Notas:

  • matches define onde o serviço é aplicado.
  • limit limita a taxa de requisições por segundo.
  • maxTextGroupLengthPerRequest / maxTextLengthPerRequest controlam o tamanho máximo de cada requisição.
  • apiUrl permite definir URL personalizada.

Configurando tempo limite da requisição (timeout máximo)​

Pode-se definir o timeout (em ms) por serviço. Para serviços Pro, defina proRequestTimeout.

{
"translationServices": {
"openai": {
"requestTimeout": 60000
},
"gemini": {
"proRequestTimeout": 90000
}
}
}

Dicas:

  • Timeout muito alto faz aguardar muito; muito baixo, pode falhar frequentemente.
  • O valor padrão depende do serviço (consulte a configuração final).
  • proRequestTimeout só surte efeito quando provider for pro (serviço para assinantes).

Idioma e Estratégia de Tradução​

Sempre/Nunca traduzir certos idiomas​

{
"translationLanguagePattern": {
"matches": ["en"],
"excludeMatches": ["zh"]
}
}

Definindo idioma de origem para um site específico​

{
"sourceLanguageUrlPattern": {
"en": {
"matches": ["*.google.com"]
}
}
}

Outras configurações globais frequentes​

Permitir renderizar tags HTML​

Se desejar manter/renderizar HTML na tradução:

{
"enableRenderHtmlTag": true
}

Estilo e tema da tradução​

Temas suportados por translationTheme (confira configuração final):

none, grey, dashed, dashedBorder, solidBorder, dotted, underline, mask, opacity,
paper, dividingLine, highlight, marker, marker2, blockquote, weakening, italic,
bold, thinDashed, nativeDotted, wavy, nativeDashed, nativeUnderline, background

Configuração de tema por site:

{
"translationThemePatterns": {
"highlight": {
"matches": ["discord.com"]
}
}
}

Parâmetros AI / Serviços Avançados​

Você pode adicionar a seguinte configuração avançada em Configurações do desenvolvedor -> Edit Full User Config:

Modo de tradução AI gratuita​

A extensão agora oferece suporte a um serviço gratuito de tradução AI agregada. Quando esse modo está ativado, a rota de tradução AI gratuita agregada será priorizada.

Limitações atuais:

  • O glossário AI ainda não é compatível
  • Os prompts AI personalizados ainda não são compatíveis

Para desativar esse modo e voltar para a versão anterior de tradução AI gratuita não agregada, adicione:

{
"enableFreeModelMode": false
}

temperature​

{
"translationServices": {
"openai": {
"temperature": 0.2
}
}
}

Headers e body customizados​

{
"translationServices": {
"claude": {
"headerConfigs": {
"anthropic-version": "2023-06-01",
"anthropic-dangerous-direct-browser-access": "true"
},
"bodyConfigs": {
"max_tokens": 2048
}
}
}
}

Como usuários de modelos Gemini podem personalizar configurações​

Modelos Gemini vêm com configs padrão internas; para sobrescrever, use modelsOverrides:

{
"translationServices": {
"gemini": {
"modelsOverrides": [
{
"models": ["gemini-2.5-flash", "gemini-2.5-flash-lite"],
"bodyConfigs": {
"temperature": 0.1
}
}
]
}
}
}

Dica: modelsOverrides funciona para outros serviços AI — corresponde pelo nome do modelo.

Obedecer estritamente prompts customizados​

Para reduzir "alucinações" em LLMs, o plugin valida a contagem de tokens de resposta vs. requisição. Proporção muito alta/baixa = resultado inválido e uso de serviço secundário. Se seu prompt não for sobre tradução (mas expansão, revisão etc), pode disparar falso positivo; ative o modo estrito para ignorar a validação.

{
"translationServices": {
"claude": {
"strictPrompt": true
}
}
}

Prompts multilíngues personalizados (exemplo)​

{
"translationServices": {
"openai": {
"langOverrides": [
{
"id": "auto2ja",
"systemPrompt": "あなたはプロの翻訳エンジンです。",
"prompt": "次のテキストを{{to}}に翻訳してください:\n\n<text>\n{{text}}\n</text>",
"multiplePrompt": "<yaml>\n{{yaml}}\n</yaml>",
"subtitlePrompt": "<yaml_subtitles>\n{{yaml}}\n</yaml_subtitles>"
}
]
}
}
}

Glossário e Tradução Automática​

Novo suporte a Glossário AI, válido só para serviços de tradução AI.

MT não usa glossário por padrão (pode degradar resultados). Para forçar (NÃO recomendado):

{
"enableMachineTranslateTerms": true
}

Limpeza do Cache​

Cache de tradução é limpo automaticamente a cada 30 dias para evitar sobrecarga.

{
"cacheMaxAgeDay": 30
}

Injected CSS e globalStyles​

  • Injected CSS: CSS global para correção geral da página.
  • globalStyles: aplica CSS por regra, útil para adaptação por site.

Exemplo de Injected CSS:

.immersive-translate-target-wrapper img {
width: 16px;
height: 16px;
}

Dicas de Troubleshooting​

  • *.twitter.com não cobre domínio raiz; escreva também twitter.com.
  • selectors substitui o escopo original; prefira .add/.remove.
  • Especificar matches como example.com/path ativa coringa; verifique se precisa da URL completa.
  • Configuração não funciona? Consulte o resultado de merge final e recarregue a página.
  • Vírgula extra no fim do JSON invalida a configuração.

Apêndice: Referência de Campos Rule​

Referência dos campos de Rule (documentação, lista parcial); consulte a config final para campos completos ou atualizados. Dica: para arrays/objetos, use .add / .remove para modificar sem sobrescrever:

export interface Rule {
// Site correspondente
id?: string; // ID de regra interna, para reutilizar regras internas
matches?: string | string[]; // Sites para corresponder esta Rule
excludeMatches?: string | string[]; // Excluir sites específicos
selectorMatches?: string | string[]; // Corresponde por selector CSS, não por URL
excludeSelectorMatches?: string | string[]; // Exclude por selector

// Escopo de tradução
selectors?: string | string[]; // Só traduz elementos correspondentes
excludeSelectors?: string | string[]; // Não traduz elementos correspondentes
excludeTags?: string | string[]; // Não traduz tags correspondentes

// Adição incremental de escopos (caso falhe, use selectors.add / selectors.remove)
additionalSelectors?: string | string[]; // Adiciona seleção para tradução
additionalExcludeSelectors?: string | string[]; // Adiciona exclusão
additionalExcludeTags?: string | string[]; // Adiciona exclusão (algumas versões obsoleto)

// Manter original
stayOriginalSelectors?: string | string[]; // Elementos mantidos originais
stayOriginalTags?: string | string[]; // Tags mantidas originais, ex: code

// Block ou Inline
extraBlockSelectors?: string | string[]; // Elementos são blocos
extraInlineSelectors?: string | string[]; // Elementos são inline
inlineTags?: string | string[]; // Tags como inline
preWhitespaceDetectedTags?: string | string[]; // Tags que detectam quebra de linha automática

// Estilos na tradução
translationClasses?: string | string[]; // Classes extras para o texto traduzido

// Estilos globais
globalStyles?: Record<string, string>; // Modifica CSS da página
globalAttributes?: Record<string, Record<string, string | null>>; // Modifica atributos de elementos

// CSS embutido
injectedCss?: string | string[]; // CSS embutido
additionalInjectedCss?: string | string[]; // CSS adicional

// Contexto
wrapperPrefix?: string; // Prefixo antes da área traduzida
wrapperSuffix?: string; // Sufixo após a área traduzida

// Troca de linha no texto traduzido
blockMinTextCount?: number; // Tamanho mínimo de caracteres para bloco
blockMinWordCount?: number; // Mínimo de palavras por bloco

// Mínimo para traduzir
containerMinTextCount?: number; // Mínimo de caracteres por elemento
paragraphMinTextCount?: number; // Mínimo de caracteres por parágrafo
paragraphMinWordCount?: number; // Mínimo de palavras por parágrafo

// Máximo por linha para forçar quebra
lineBreakMaxTextCount?: number; // Máximo de caracteres por linha

// Momento de iniciar tradução
urlChangeDelay?: number; // Delay após entrar na página
observeUrlChange?: boolean; // Traduz novamente ao mudar URL

// Mobile
isShowUserscriptPagePopup?: boolean; // Mostrar popup em mobile
fingerCountToToggleTranslagePageWhenTouching?: number; // (obsoleto)

// Tradução de streaming AI
aiRule?: {
streamingSelector: string; // Selector para marcar elemento em tradução
messageWrapperSelector: string; // Selector do conteúdo da mensagem
streamingChange: boolean; // Atualização incremental
};
}