사용자 정의 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 *',
],
}사용 사례:
- 탐색 메뉴 및 헤더 건너뛰기
- 대화형 UI 요소 제외
- 코드 편집기 또는 기술 콘텐츠의 번역 방지
- 메타데이터 섹션 번역 방지
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단계: 웹사이트 도메인 식별
브라우저의 주소 표시줄에 나타나는 정확한 도메인을 사용하세요.
https://example.com에는'example.com'을 사용하세요.https://www.example.com에는'www.example.com'을 사용하세요.
2단계: 요소 선택기 찾기
브라우저 DevTools를 사용하여 CSS 선택기를 찾습니다.
- 웹사이트를 열어보세요
- 타겟팅하려는 요소를 마우스 오른쪽 버튼으로 클릭하세요.
- "검사" 또는 "요소 검사"를 선택하세요.
- DevTools에서 HTML 요소를 마우스 오른쪽 버튼으로 클릭하세요.
- 선택기 복사(CSS 선택기 또는 직접 만들기)
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과 같은 지나치게 광범위한 선택자를 피하세요- 클래스 이름, ID 또는 요소 조합을 사용하세요.
성능 고려 사항
- 선택자의 수를 합리적으로 유지하십시오
- 성능이 허용 가능한지 실제 페이지에서 테스트하십시오.
- 간단한 하위 선택자가 작동하는 경우 복잡한 하위 선택자를 피하세요.
유지 관리성
- 관련 선택자를 그룹화
- 규칙이 필요한 이유를 설명하는 주석을 추가하세요.
- 가능하면 의미 있는 선택기 이름을 사용하세요.
일반적인 패턴
탐색 요소 제외
'example.com': [
'nav *',
'header *',
'.navigation',
]대화형 UI 제외
'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규칙 사용을 고려하세요.
사용자 정의 규칙 기여
다른 사람에게 도움이 되는 규칙을 만들었다면 이를 기여해 보세요.
- 여러 페이지에서 철저하게 테스트
- 규칙이 필요한 이유를 문서화하세요.
- 변경 사항을 포함하여 Pull Request 제출
- Contribution Guidelines을 따르세요
변경 사항 제출에 대한 자세한 내용은 Code Contribution Guide을 참조하세요.
