Расширенные параметры настройки
Вы можете редактировать более настраиваемые конфигурации на странице расширенной конфигурации -> Настройки разработчика -> Конфигурация пользователя, которые недоступны для редактирования в пользовательском интерфейсе для опытных пользователей. См. последнюю заметку для получения более подробной информации о параметрах. Текущая встроенная config
доступна здесь.
Правила пользователя
С помощью Rules
можно настроить конфигурацию конкретного веб-сайта, решая, какой контент нужно переводить или нет, или изменяя стиль страниц и т.д.
[
{
"matches": "www.google.com",
"selectors": [".title"]
},
{
"matches": "*.twitter.com",
"selectors": [".text"],
"excludeSelectors": ["nav", " footer"]
}
]
Используйте matches
для соответствия соответствующему веб-сайту. Разрешены подстановочные знаки, например, *.google.com
, www.google.com/test/*
, file://*
.
Использование selectors
переопределяет область умного перевода, переводя только элементы, соответствующие этому селектору.
Используйте excludeSelectors
, чтобы исключить элементы без перевода позиции.
Используйте семейство селекторов additional
, чтобы увеличить или уменьшить диапазон перевода на основе интеллектуального перевода.
[
{
"matches": "www.google.com",
"additionalSelectors": [],
"additionalExcludeSelectors": []
}
]
Если вы хотите перевести регион, обрабатывая элементы как единое целое и не разделяя их, вы можете использовать селектор atomicBlockSelectors
. Например, профили Instagram. Обратите внимание, что использование atomicBlockSelectors
требует выбора с помощью selectors
перед использованием 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\"]"
]
}
Если перевод приводит к несоответствию страниц, наложению текста и другим крайним случаям, вы можете использовать globalStyles
для настройки стиля страницы, чтобы исправить это. Например, заголовок YouTube, который используется для удаления максимальной высоты оригинальной страницы.
{
"matches": "www.google.com",
"globalStyles": { ".title": "max-height:unset;" }
}
Улучшения консолидации пользовательских правил
Поддержка версии 0.7.4+. Возьмем в качестве примера пропуск зоны без перевода
{
"matches": "https://www.elektrotechnik.rwth-aachen.de/*",
"additionalExcludeSelectors.remove": [".notranslate", "[translate=no]"]
}
Операции добавления и удаления изменяют правила, предоставленные по умолчанию, и не требуют полной замены, как это было ранее.
Внедренный CSS
Внедренный CSS позволяет внедрять пользовательские веб-стили глобально. Может использоваться с translationClasses
из Rules
.
".immersive-translate-target-wrapper img { width: 16px; height: 16px }"
Также можно стилизовать сайт более персонализированным образом, как обычный менеджер веб-стилей. (даже используя display:none
для удаления рекламы)
.title {
color: red;
}
Конфигурация пользователя
Конфигурация позволяет настраивать конфигурацию этого плагина, такие как службы перевода, языковые опции перевода и т.д.
{
"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"]
}
]
}
Поля правил в rules
могут использовать все поля в generalRule
. rules
имеют наивысший приоритет, объединяя generalRule
и правила для этого rule
, когда конкретное rule
для конкретного сайта совпадает.
Введение некоторых общих полей Config.
Не показывать неконфигурированные службы перевода в всплывающей панели
"showUnconfiguredTranslationServiceInPopup": false
Конфигурация служб перевода
Используйте translationService
для выбора движка перевода по умолчанию, который в настоящее время поддерживает:
| "tencent"
| "google"
| "deepl"
| "baidu"
| "volc"
| "youdao"
| "caiyun"
| "openl"
| "bing"
| "transmart"
Используйте translationServices
для настройки apikey
каждой службы перевода, разные поставщики услуг требуют разных параметров, и их API-ключи можно запросить в центре разработчиков их соответствующих веб-сайтов.
Например, для Tencent Translator необходимо настроить secretId
, secretKey
. Вы можете перейти на Tencent Cloud, чтобы подать заявку на получение API-ключа с 5 миллионами бесплатных символов в месяц. Обратитесь сюда для получения информации о процессе подачи заявки.
"translationServices": {
"tencent": {
"secretId": "xxx",
"secretKey": "xxx",
"matches":["*.twitter.com"],
"limit": 3,
"apiUrl":"",
" maxTextGroupLengthPerRequest": 25,
"maxTextLengthPerRequest": 1800
}
}
Поле matches
, использование этой службы перевода для конкретного веб-сайта.
Поле limit
, которое указывает максимальное количество запросов в секунду для этой службы перевода (некоторые службы ограничивают максимальное количество запросов в секунду).
Поле maxTextGroupLengthPerRequest
, максимальное количество абзацев на запрос
Поле maxTextLengthPerRequest
, максимальное количество символов на запрос
apiUrl
позволяет настроить адрес интерфейса перевода.
Всегда переводить определенные веб-сайты
translationUrlPattern
настраивает сайты, которые всегда переводятся, и сайты, которые никогда не переводятся.
matches
конфигурация всегда переводит сайт.excludeMatches
настраивает сайты, которые никогда не переводятся.
Значения конфигурации могут быть доменными именами или URL-адресами с *
, например: www.google.com/mail/*
"translationUrlPattern": {
"matches": ["stackoverflow.com"]
"excludeMatches": ["www.google.com/mail/*"]
}
Всегда переводить определенные языки
translationLanguagePattern, настраивает язык, который всегда переводится, и язык, который никогда не переводится.
matches
настраивает язык, который всегда переводится, например,en
,excludeMatches
настраивает языки, которые никогда не переводятся.
Формат отображения перевода
translationTheme
— это формат отображения перевода, и в настоящее время поддерживаются следующие стили:
| "none"
| "dashed"
| "dotted"
| "underline"
| "mask"
| "paper"
| "highlight"
| "blockquote"
| "weakening"
| "italic"
| "bold"
| "thinDashed".
Соответствующее китайское название:
{
"none": "none",
"dashed": "пунктирное подчеркивание",
"dotted": "точечное подчеркивание",
"underline": "прямое подчеркивание",
"mask": "эффект размытия",
"paper": "эффект тени белой бумаги",
"highlight": "подсветка",
"blockquote": "стиль цитаты",
"weakening": "ослабление",
"italic": "курсив",
"bold": "жирный шрифт",
"thinDashed": "тонкое пунктирное подчеркивание"
}
translationThemePatterns
позволяет настроить различные стили перевода для разных веб-сайтов.
"translationThemePatterns": {
"underline": {
"matches": ["discord.com"]
}
}
Класс gpt Перевод сообщений потока страницы
{
"matches": ["chat.openai.com"],
"excludeSelectors": [".markdown *"],
"aiRule": {
"streamingSelector": ".result-streaming.markdown ",
"messageWrapperSelector": ".markdown",
"streamingChange": true
}
}
Правила
rules
— это объект массива, который позволяет настраивать правила для специальных сайтов, например, чтобы Twitter переводил только определенную часть региона:
{
"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"]
}
]
}
Текущие встроенные rules
можно найти здесь.
Некоторые из важных полей выбраны ниже для иллюстрации:
export interface Rule {
// Соответствие веб-сайту
id?: string; // Каждое правило адаптации имеет свой собственный id, если пользователи хотят повторно использовать это правило поверх этого изменения, им нужно добавить этот соответствующий id в свое собственное правило, чтобы повторно использовать его
matches?: string | string[]; // Это правило будет соответствовать только веб-сайту здесь. Это правило будет соответствовать только сайтам здесь.
excludeMatches?: string | string[]; // Исключить конкретные сайты.
selectorMatches?: string | string[]; // Соответствие с селектором без указания всех URL
excludeSelectorMatches?: string | string[]; // Исключить правила, как указано выше.
// Указание диапазона переводов
selectors?: string | string[]; // Переводить только соответствующие элементы
excludeSelectors?: string | string[]; // Исключить элементы, не переводить соответствия
excludeTags?: string | string[]; // Исключить теги, не переводить соответствующие теги
// добавление диапазонов перевода вместо переопределения
additionalSelectors?: string | string[]; // добавление диапазонов перевода. Добавление мест перевода в интеллектуально переведенные регионы.
additionalExcludeSelectors?: string | string[]; // Добавление исключаемых элементов, чтобы интеллектуальный перевод не переводил конкретные места.
additionalExcludeTags?: string | string[]; // Дополнительные исключаемые теги
// Оставить как есть
stayOriginalSelectors?: string | string[]; // Соответствующие элементы будут оставлены как есть. Обычно используется в тегах сайтов форумов.
stayOriginalTags?: string | string[]; // Соответствующие теги будут оставлены как есть, например, `code`
// Региональные переводы
atomicBlockSelectors?: string | string[]; // Региональные селекторы, соответствующие элементы будут рассматриваться как единое целое, не переводятся по частям.
atomicBlockTags?: string | string[]; // Селекторы тегов области, как указано выше
// Блок или Inline
extraBlockSelectors?: string | string[]; // Дополнительные селекторы, соответствующие элементы будут рассматриваться как блочные элементы, не переводятся в одну строку.
extraInlineSelectors?: string | string[]; // Дополнительные селекторы, которые будут использоваться как встроенные элементы.
inlineTags?: string | string[]; // Соответствующий тег будет использоваться как встроенный элемент
preWhitespaceDetectedTags?: string | string[]; // Соответствующий тег будет автоматически обернут
// Стиль перевода
translationClasses? string | string | string[]; // Добавление дополнительных классов к переводу
// Глобальные стили
globalStyles?: Record<string, string>; // Изменение стилей страницы, полезно, если перевод приводит к беспорядку на странице. `
globalAttributes?: Record<string, Record<string, string>>; // Изменение атрибутов элементов страницы
// Встроенные стили
injectedCss?: string | string[]; // Внедрение CSS-стилей
additionalInjectedCss?: string | string[]; // Дополнительные CSS-стили вместо их переопределения.
// Контекст
wrapperPrefix?: string; // Префикс области перевода, по умолчанию smart, с или без разрывов строк в зависимости от количества символов.
wrapperSuffix?: string; // Суффикс области перевода
// Количество символов для обертки перевода
blockMinTextCount?: number; // Минимальное количество символов для обертки перевода как блока, в противном случае перевод является встроенным элементом.
blockMinWordCount?: number; // То же, что и выше. Если вы хотите, чтобы они всегда были с новой строки, вы можете поставить 0 в обоих.
// Минимальное количество символов, которые можно перевести из содержимого
containerMinTextCount?: number; // Минимальное количество символов, которое должен содержать элемент, прежде чем он будет переведен, по умолчанию 18
paragraphMinTextCount?: number; // Минимальное количество символов для абзаца, большее, чем количество символов, которое должно содержать содержимое. число, все, что больше этого, будет переведено
paragraphMinWordCount?: number; // Минимальное количество слов в оригинальном абзаце
// Принудительные разрывы строк для длинных абзацев
lineBreakMaxTextCount?: number; // Максимальное количество символов в абзаце, которые будут принудительно разрываться при переводе длинного абзаца.
// Когда начинать перевод.
urlChangeDelay?: number; // Сколько миллисекунд задерживать перевод после входа на страницу. Чтобы дождаться инициализации страницы, по умолчанию 250 мс
observeUrlChange?: boolean; // Обнаружение изменения адреса URL и повторный запуск перевода, по умолчанию true.
// Мобильные устройства
isShowUserscriptPagePopup?: boolean; // Показать всплывающее окно страницы на мобильных устройствах. плавающее окно, по умолчанию true.
fingerCountToToggleTranslagePageWhenTouching?: number; // Переводит, когда касаются четыре пальца, можно установить на 0, 2, 3, 4, 5
// AI потоковые переводы
aiRule: {
streamingSelector. string; // Селектор для маркировки элемента, который переводится на веб-странице gpt
messageWrapperSelector: string; // Селектор тела сообщения
streamingChange: boolean; // Обновляется ли сообщение инкрементально или полностью для итерации веб-страницы класса gpt. gpt является инкрементальным
};
}
Более подробное объяснение
Разница между блоком и inline, если вы хотите узнать больше, вы можете посмотреть здесь
- Блочный элемент занимает одну строку, и несколько соседних блочных элементов занимают каждую новую строку.
- Встроенный элемент не занимает одну строку; несколько соседних встроенных элементов располагаются на одной строке, и новая строка создается только тогда, когда одна строка становится слишком длинной.