Перейти к основному содержимому

Расширенные параметры настройки

Вы можете редактировать более настраиваемые конфигурации на странице расширенной конфигурации -> Настройки разработчика -> Конфигурация пользователя, которые недоступны для редактирования в пользовательском интерфейсе для опытных пользователей. См. последнюю заметку для получения более подробной информации о параметрах. Текущая встроенная 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, если вы хотите узнать больше, вы можете посмотреть здесь

  • Блочный элемент занимает одну строку, и несколько соседних блочных элементов занимают каждую новую строку.
  • Встроенный элемент не занимает одну строку; несколько соседних встроенных элементов располагаются на одной строке, и новая строка создается только тогда, когда одна строка становится слишком длинной.