Пользовательские правила DOM
Настройте собственные правила DOM для управления поведением перевода на определенных веб-сайтах.
Обзор
Read Frog позволяет вам определять собственные правила DOM для управления переводом элементов на определенных веб-сайтах. Эти правила определены в dom-rules.ts и поддерживают два основных варианта поведения:
- Не переводить элементы – пропустить перевод определенных элементов.
- Принудительный блочный перевод — заставить строчные элементы переводиться как блочные (с разрывами строк).
Расположение файла конфигурации
Пользовательские правила определены в файле extension repository:
src/utils/constants/dom-rules.tsДоступные типы правил
1. Пользовательские «Не заходите в селекторы элементов»
Используйте CUSTOM_DONT_WALK_INTO_ELEMENT_SELECTOR_MAP, чтобы предотвратить перевод определенных элементов в определенных доменах.
Синтаксис:
export const CUSTOM_DONT_WALK_INTO_ELEMENT_SELECTOR_MAP: Record<string, string[]> = {
'example.com': [
'.selector-1',
'#element-id',
'custom-element > *',
],
}Пример:
export const CUSTOM_DONT_WALK_INTO_ELEMENT_SELECTOR_MAP: Record<string, string[]> = {
'chatgpt.com': [
'.ProseMirror',
],
'arxiv.org': [
'.ltx_listing',
],
'www.reddit.com': [
'faceplate-screen-reader-content > *',
'reddit-header-large *',
'shreddit-comment-action-row > *',
],
'www.youtube.com': [
'#masthead-container *',
'#guide-inner-content *',
'#metadata *',
'#channel-name',
'.translate-button',
'.yt-lockup-metadata-view-model__metadata',
'.yt-spec-avatar-shape__badge-text',
'.shortsLockupViewModelHostOutsideMetadataSubhead',
'ytd-comments-header-renderer',
'#top-row',
'#header-author',
'#reply-button-end',
'#more-replies',
'#info',
'#badges *',
],
}Примеры использования:
- Пропустить навигационные меню и заголовки
- Исключить интерактивные элементы пользовательского интерфейса
- Запретить перевод редакторов кода или технического контента
- Избегайте перевода разделов метаданных
2. Пользовательские селекторы принудительного перевода блоков
Используйте CUSTOM_FORCE_BLOCK_TRANSLATION_SELECTOR_MAP, чтобы принудительно преобразовать строчные элементы в блочные (с разрывами строк).
Синтаксис:
export const CUSTOM_FORCE_BLOCK_TRANSLATION_SELECTOR_MAP: Record<string, string[]> = {
'example.com': [
'.force-block-selector',
],
}Пример:
export const CUSTOM_FORCE_BLOCK_TRANSLATION_SELECTOR_MAP: Record<string, string[]> = {
'github.com': [
'.react-directory-row-commit-cell *',
],
}Примеры использования:
- Принудительно отображать сообщения о фиксации в отдельных строках
- Убедитесь, что элементы списка переведены индивидуально
- Улучшите читаемость, разбивая плотный встроенный контент.
Как добавить собственные правила
Шаг 1. Определите домен веб-сайта
Используйте именно тот домен, который отображается в адресной строке браузера:
- Используйте
'example.com'дляhttps://example.com. - Используйте
'www.example.com'дляhttps://www.example.com.
Шаг 2. Найдите селекторы элементов
Используйте DevTools браузера, чтобы найти селекторы CSS:
- Открыть сайт
- Щелкните правой кнопкой мыши элемент, на который вы хотите нацелиться.
- Выберите «Проверить» или «Проверить элемент».
- Щелкните правой кнопкой мыши элемент HTML в DevTools.
- Скопируйте селектор (CSS Selector или создайте свой собственный)
Шаг 3. Добавьте правила в конфигурацию
Откройте dom-rules.ts и добавьте свои правила:
export const CUSTOM_DONT_WALK_INTO_ELEMENT_SELECTOR_MAP: Record<string, string[]> = {
// ... existing rules ...
'your-website.com': [
'.header-navigation',
'#sidebar-menu',
'.code-block',
],
}Шаг 4. Проверьте свои правила
-
Запустите сервер разработки:
pnpm dev -
Перейдите на сайт
-
Убедитесь, что элементы обрабатываются правильно
-
Отрегулируйте селекторы по мере необходимости
Лучшие практики
Специфика селектора
- Будьте достаточно конкретны, чтобы ориентироваться только на нужные элементы.
- Избегайте слишком широких селекторов, таких как
*илиdiv. - Используйте имена классов, идентификаторы или комбинации элементов.
Вопросы производительности
- Сохраняйте разумное количество селекторов
- Протестируйте на реальных страницах, чтобы убедиться в приемлемости производительности.
- Избегайте сложных селекторов потомков, когда работают более простые.
Ремонтопригодность
- Сгруппируйте связанные селекторы вместе
- Добавляйте комментарии, объясняющие, зачем нужны правила.
- По возможности используйте осмысленные имена селекторов.
Общие шаблоны
Исключение элементов навигации
'example.com': [
'nav *',
'header *',
'.navigation',
]Исключая интерактивный интерфейс
'example.com': [
'button',
'input',
'select',
'.modal',
'.dropdown',
]Исключая технический контент
'example.com': [
'pre',
'code',
'.code-block',
'.terminal',
]Глобальные правила DOM
Помимо пользовательских правил, Read Frog имеет несколько глобальных правил, которые применяются ко всем веб-сайтам:
Теги принудительного блока
Элементы, которые всегда рассматриваются как блочные:
export const FORCE_BLOCK_TAGS = new Set([
'BODY',
'H1',
'H2',
'H3',
'H4',
'H5',
'H6',
'BR',
'FORM',
'SELECT',
'BUTTON',
'LABEL',
'UL',
'OL',
'LI',
'BLOCKQUOTE',
'PRE',
'ARTICLE',
'SECTION',
'FIGURE',
'FIGCAPTION',
'HEADER',
'FOOTER',
'MAIN',
'NAV',
])Не ходите и не переводите теги
Элементы, которые никогда не обрабатываются для перевода:
export const DONT_WALK_AND_TRANSLATE_TAGS = new Set([
'HEAD',
'TITLE',
'HR',
'INPUT',
'TEXTAREA',
'IMG',
'VIDEO',
'AUDIO',
'CANVAS',
'SOURCE',
'TRACK',
'META',
'SCRIPT',
'NOSCRIPT',
'STYLE',
'LINK',
'PRE',
'svg',
...MATH_TAGS,
])Устранение неполадок
Правила не работают
- Проверьте правописание домена – убедитесь, что домен точно совпадает.
- Проверка синтаксиса селектора – проверка селекторов в консоли DevTools браузера.
- Очистить кеш – перезагрузите расширение и обновите страницу.
- Проверьте спецификацию селектора – элементу может соответствовать более конкретное правило.
Элементы все еще переводятся
- Проверьте, является ли элемент дочерним элементом исключенного элемента
- Убедитесь, что селектор нацелен на правильные элементы
- Ищите динамические элементы, загружаемые после загрузки страницы.
Разрыв макета страницы перевода
- Используйте правила принудительной блокировки экономно
- Тестируйте на нескольких страницах одного и того же сайта.
- Рассмотрите возможность использования правил
!translateвместо принудительной блокировки.
Добавление пользовательских правил
Если вы создали правила, которые приносят пользу другим, рассмотрите возможность их использования:
- Тщательно протестируйте на нескольких страницах
- Документируйте, почему нужны правила
- Отправьте запрос на включение с вашими изменениями
- Следуйте Contribution Guidelines
Дополнительную информацию об отправке изменений см. в разделе Code Contribution Guide.
