Salta al contenuto principale

Opzioni di personalizzazione avanzate

Puoi modificare configurazioni più personalizzate nella Pagina di Configurazione Estesa -> Impostazioni Sviluppatore -> Config Utente che non sono modificabili nell'interfaccia utente per utenti avanzati, vedi l'ultima nota per maggiori dettagli sui parametri. Il config integrato attuale può essere trovato qui.

Regole Utente

Con Regole è possibile personalizzare la configurazione di un particolare sito web, decidendo quale contenuto deve essere tradotto o meno, o regolando lo stile delle pagine, ecc.

[
{
"matches": "www.google.com",
"selectors": [".title"]
},
{
"matches": "*.twitter.com",
"selectors": [".text"],
"excludeSelectors": ["nav", " footer"]
}
]

Usa matches per corrispondere al sito web corrispondente. Sono consentiti caratteri jolly, ad esempio *.google.com, www.google.com/test/*, file://*.

Utilizzando selectors si sovrascrive l'ambito di traduzione intelligente, traducendo solo gli elementi corrispondenti a quel selettore.

Usa excludeSelectors per escludere elementi senza tradurre la posizione.

Usa la famiglia di selettori additional per aumentare o diminuire l'intervallo di traduzione basato sulla traduzione intelligente.

[
{
"matches": "www.google.com",
"additionalSelectors": [],
"additionalExcludeSelectors": []
}
]

Se vuoi tradurre una regione trattando gli elementi come un tutto e non separandoli, puoi usare il selettore atomicBlockSelectors. Ad esempio, profili Instagram. Nota che l'uso di atomicBlockSelectors richiede la selezione con selectors prima di utilizzare atomicBlockSelectors.

{
"matches": "https://www.instagram.com/*",
"selectors": [
"div._aa_c h1",
"li._acaz div[role=\"menuitem\"]"
]
"atomicBlockSelectors": [
"div. ._aa_c h1",
"li._acaz div[role=\"menuitem\"]"
]
}

Se la traduzione risulta in pagine disallineate, testo sovrapposto e altri casi limite, puoi usare globalStyles per regolare lo stile della pagina per risolverlo. Ad esempio, l'intestazione di YouTube, che viene utilizzata per rimuovere l'altezza massima della pagina originale.

{
"matches": "www.google.com",
"globalStyles": { ".title": "max-height:unset;" }
}

Miglioramenti alla consolidazione delle regole utente

Supporto dalla versione 0.7.4+. Prendi come esempio il salto della zona senza traduzione

{
"matches": "https://www.elektrotechnik.rwth-aachen.de/*",
"additionalExcludeSelectors.remove": [".notranslate", "[translate=no]"]
}

Le operazioni di aggiunta e rimozione modificano le regole fornite di default e non devono essere sostituite nella loro interezza, come era il caso in precedenza.

CSS Iniettato

Il CSS iniettato ti permette di iniettare stili web personalizzati globalmente. Può essere utilizzato con translationClasses di Regole.

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

È anche possibile stilizzare il sito in modo più personalizzato, come un normale gestore di stili web. (anche utilizzando display:none per rimuovere annunci)

.title {
color: red;
}

Config Utente

Config ti permette di personalizzare la configurazione di questo plugin, come servizi di traduzione, opzioni di traduzione specifiche per lingua, ecc.

{
"translationService": "tencent",
"translationServices": {
"tencent": {
"secretId": "xxx",
"secretKey": "xxx",
"matches": ["*.twitter.com"]
}
} ,
"translationUrlPattern": {
"excludeMatches": ["www.google.com"]
},
"translationLanguagePattern": {
"matches": ["en"]
},
"translationTheme". "none",
"translationThemePatterns": {
"underline": {
"matches": ["discord.com"]
}
},
"generalRule": {
"_comment": "",
"normalizeBody": "",
" injectedCss": [],
"additionalInjectedCss": [],
"wrapperPrefix": "smart",
"wrapperSuffix": "smart",
"isPdf": false,
"isTransformPreTagNewLine ": false,
"urlChangeDelay": 20,
"isShowUserscriptPagePopup": true,
"observeUrlChange": true,
"paragraphMinTextCount": 8,
" paragraphMinWordCount": 2,
"blockMinTextCount": 32,
"blockMinWordCount": 5,
"containerMinTextCount": 18,
"lineBreakMaxTextCount": 0,
" globalAttributes": {},
"globalStyles": {},
"selectors": [],
"preWhitespaceDetectedTags": ["DIV", "SPAN"],
"stayOriginalSelectors": [],
" additionalSelectors": [],
"atomicBlockTags": [],
"excludeSelectors": [],
"additionalExcludeSelectors": [],
"translationClasses": [],
" atomicBlockSelectors": [],
"excludeTags": [],
"metaTags": ["META", "SCRIPT", "STYLE", "NOSCRIPT"],
"additionalExcludeTags": [],
" stayOriginalTags": ["CODE", "TT", "IMG", "SUP"],
"additionalStayOriginalTags": [],
"inlineTags": [],
"additionalInlineTags": [],
" extraInlineSelectors": [],
"additionalInlineSelectors": [],
"extraBlockSelectors": [],
"allBlockTags": [],
"pdfNewParagraphLineHeight": 2.4 ,
"pdfNewParagraphIndent": 1.2,
"pdfNewParagraphIndentRightIndentPx": 130,
"fingerCountToToggleTranslagePageWhenTouching": 4
},
"rules": [
{
"matches": "www.google.com",
"selectors": [".class"]
}
]
}

I campi delle regole in rules possono utilizzare tutti i campi in generalRule. Le rules hanno la massima priorità, unendo la generalRule e le regole per quella rule quando una particolare rule per un particolare sito è corrisposta.

Introduzione di alcuni dei campi comuni di Config.

Non mostrare servizi di traduzione non configurati nel pannello popup

"showUnconfiguredTranslationServiceInPopup": false

Configurazione dei servizi di traduzione

Usa translationService per selezionare il motore di traduzione predefinito, che attualmente supporta:

| "tencent"
| "google"
| "deepl"
| "baidu"
| "volc"
| "youdao"
| "caiyun"
| "openl"
| "bing"
| "transmart"

Usa translationServices per configurare l'apikey di ciascun servizio di traduzione, diversi fornitori di servizi richiedono parametri diversi e le loro chiavi API possono essere richieste nel centro sviluppatori dei rispettivi siti web.

Ad esempio, per Tencent Translator, è necessario configurare secretId, secretKey. Puoi andare su Tencent Cloud per richiedere una chiave API con 5 milioni di caratteri gratuiti al mese. Consulta qui per il processo di applicazione.

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

Campo matches, utilizzando questo servizio di traduzione per un sito web specifico.

Il campo limit, che specifica il numero massimo di richieste al secondo per questo servizio di traduzione (alcuni servizi limitano il numero massimo di richieste al secondo).

Campo maxTextGroupLengthPerRequest, numero massimo di paragrafi per richiesta

Campo maxTextLengthPerRequest, numero massimo di caratteri per richiesta

apiUrl ti consente di personalizzare l'indirizzo dell'interfaccia di traduzione.

Tradurre sempre siti web specifici

translationUrlPattern Configura i siti che vengono sempre tradotti e i siti che non vengono mai tradotti.

  • Configurazione matches traduce sempre il sito.
  • Configurazione excludeMatches per i siti che non vengono mai tradotti.

I valori di configurazione possono essere nomi di dominio o URL con *, come: www.google.com/mail/*

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

Tradurre sempre lingue specifiche

translationLanguagePattern, configura la lingua che viene sempre tradotta e la lingua che non viene mai tradotta.

  • Configurazione matches per la lingua che viene sempre tradotta, ad esempio en,
  • Configurazione excludeMatches per le lingue che non vengono mai tradotte.

Formato di visualizzazione della traduzione

translationTheme è il formato di visualizzazione della traduzione e attualmente supporta i seguenti stili:

| "none"
| "dashed"
| "dotted"
| "underline"
| "mask"
| "paper"
| "highlight"
| "blockquote"
| "weakening"
| "italic"
| "bold"
| "thinDashed".

Nome cinese corrispondente:

{
"none": "nessuno",
"dashed": "sottolineato tratteggiato",
"dotted": "sottolineato puntinato",
"underline": "sottolineato con linea retta",
"mask": "effetto sfocatura",
"paper": "effetto ombra carta bianca",
"highlight": "evidenziato",
"blockquote": "stile citazione",
"weakening": "indebolimento",
"italic": "corsivo",
"bold": "grassetto",
"thinDashed": "sottolineato tratteggiato sottile"
}

translationThemePatterns ti permette di configurare diversi stili di traduzione per diversi siti web.

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

Traduzione del messaggio di flusso della pagina di Classe gpt

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

Regole

rules è un oggetto array che ti permette di configurare regole per siti speciali, come avere Twitter che traduce solo una certa parte di una regione:

{
"rules": [
{
"id": "twitter",
"matches": ["twitter.com", "mobile.twitter.com", "tweetdeck.twitter.com"],
"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)"
],
"extraInlineSelectors": ["[data-testid=\"tweetText\"] div"]
}
]
}

Le rules integrate attuali possono essere trovate qui.

Alcuni dei campi importanti sono selezionati di seguito per illustrazione:

export interface Rule {
// Corrispondenza del sito web
id?: string; // Ogni regola di adattamento ha il proprio id, se gli utenti vogliono riutilizzare questa regola su questa modifica, devono aggiungere questo id corrispondente alla propria regola per riutilizzarlo
matches?: string | string[]; // Questa regola corrisponderà solo al sito web qui. Questa regola corrisponderà solo ai siti qui.
excludeMatches?: string | string[]; // Escludi siti specifici.
selectorMatches?: string | string[]; // Corrispondenza con un selettore senza specificare tutti gli URL
excludeSelectorMatches?: string | string[]; // Escludi regole, come sopra.

// Specifica l'intervallo delle traduzioni
selectors?: string | string[]; // Traduci solo elementi che corrispondono
excludeSelectors?: string | string[]; // Escludi elementi, non tradurre corrispondenze
excludeTags?: string | string[]; // Escludi Tag, non tradurre Tag corrispondenti

// aggiungi intervalli di traduzione invece di sovrascrivere
additionalSelectors?: string | string[]; // aggiungi intervalli di traduzione. Aggiungi posizioni di traduzione alle regioni tradotte in modo intelligente.
additionalExcludeSelectors?: string | string[]; // Aggiungi elementi esclusi in modo che la traduzione intelligente non traduca posizioni specifiche.
additionalExcludeTags?: string | string[]; // Tag esclusi aggiuntivi

// Lasciare invariato
stayOriginalSelectors?: string | string[]; // Gli elementi corrispondenti saranno lasciati invariati. Comunemente usato nei tag dei siti di forum.
stayOriginalTags?: string | string[]; // I tag corrispondenti saranno lasciati invariati, ad esempio `code`

// Traduzioni regionali
atomicBlockSelectors?: string | string[]; // Selettori regionali, gli elementi corrispondenti saranno trattati come un tutto, non tradotti in sezioni.
atomicBlockTags?: string | string[]; // Selettori di Tag di area, come sopra

// Blocco o Inline
extraBlockSelectors?: string | string[]; // Selettori extra, gli elementi corrispondenti saranno trattati come elementi di blocco, non tradotti in una linea.
extraInlineSelectors?: string | string[]; // Selettori extra che saranno usati come elementi inline.

inlineTags?: string | string[]; // Il Tag corrispondente sarà usato come elemento inline
preWhitespaceDetectedTags?: string | string[]; // Il Tag corrispondente sarà avvolto automaticamente

// Stile di traduzione
translationClasses? string | string | string[]; // Aggiungi Classi aggiuntive alla traduzione

// Stili globali
globalStyles?: Record<string, string>; // Modifica gli stili della pagina, utile se la traduzione causa disordine nella pagina. `
globalAttributes?: Record<string, Record<string, string>>; // Modifica gli attributi degli elementi della pagina

// Stili incorporati
injectedCss?: string | string[]; // Incorpora stili CSS
additionalInjectedCss?: string | string[]; // Stili CSS aggiuntivi invece di sovrascriverli.

// Contesto
wrapperPrefix?: string; // Il prefisso dell'area di traduzione, predefinito su smart, con o senza interruzioni di linea a seconda del numero di caratteri.
wrapperSuffix?: string; // Suffisso dell'area di traduzione

// Numero di caratteri per avvolgere la traduzione
blockMinTextCount?: number; // Numero minimo di caratteri per avvolgere la traduzione come blocco, altrimenti la traduzione è un elemento inline.
blockMinWordCount?: number; // Come sopra. Se vuoi che siano sempre a capo, puoi mettere 0 in entrambi.

// Numero minimo di caratteri che possono essere tradotti dal contenuto
containerMinTextCount?: number; // Numero minimo di caratteri che un elemento dovrebbe contenere prima che venga tradotto, predefinito su 18
paragraphMinTextCount?: number; // Numero minimo di caratteri per il paragrafo, maggiore del numero di caratteri che il contenuto dovrebbe contenere. numero, qualsiasi cosa più grande di quella sarà tradotta
paragraphMinWordCount?: number; // Numero minimo di parole nel paragrafo originale

// Interruzioni di riga forzate per paragrafi lunghi
lineBreakMaxTextCount?: number; // Numero massimo di caratteri nel paragrafo da forzare a interrompere quando si traduce un paragrafo lungo.

// Quando iniziare la traduzione.
urlChangeDelay?: number; // Quanti millisecondi ritardare la traduzione dopo essere entrati nella pagina. Per aspettare che la pagina si inizializzi, predefinito su 250ms
observeUrlChange?: boolean; // Rileva quando l'indirizzo URL è cambiato e avvia nuovamente la traduzione, vero di default.

// Mobile
isShowUserscriptPagePopup?: boolean; // Mostra il popup della pagina sui dispositivi mobili. finestra mobile, vero di default.
fingerCountToToggleTranslagePageWhenTouching?: number; // Traduce quando quattro dita toccano, può essere impostato su 0, 2, 3, 4, 5

// Traduzioni in streaming AI
aiRule: {
streamingSelector. string; // Selettore per contrassegnare l'elemento in fase di traduzione nella pagina web gpt
messageWrapperSelector: string; // Selettore del corpo del messaggio
streamingChange: boolean; // Se il messaggio viene aggiornato in modo incrementale o completo per l'iterazione della pagina web di classe gpt. gpt è incrementale
};
}

Ulteriori spiegazioni

Differenza tra blocco e inline, se vuoi saperne di più puoi vedere qui

  • L'elemento blocco occupa una singola linea, e più elementi blocco adiacenti occupano ciascuno una nuova linea.
  • L'elemento inline non occupa una singola linea; più elementi inline adiacenti sono disposti sulla stessa linea, e una nuova linea non viene creata fino a quando una linea non è troppo piena.