해결 팁 / 브라우저 번역 기능 비활성화하기

브라우저 번역 기능 비활성화하기

브라우저 번역 기능이 contenteditable 편집을 방해하지 않도록 하는 방법

난이도: 초급
카테고리: browser-feature
browser-translationgoogle-translatedom-manipulationprevention

문제

Google Translate 같은 브라우저 번역 기능이 활성화되면 DOM을 조작하여 contenteditable 기능을 깨뜨립니다.

해결 방법

1. translate=“no” 속성 사용

contenteditable 요소에 번역을 비활성화하는 속성을 추가합니다.

<div contenteditable="true" translate="no">
  번역되지 않아야 하는 편집 가능한 콘텐츠
</div>

2. notranslate 클래스 사용

Google Translate는 이 클래스를 존중합니다.

<div contenteditable="true" class="notranslate">
  편집 가능한 콘텐츠
</div>

3. MutationObserver로 속성 재적용

번역 후 contenteditable 속성을 다시 적용합니다.

const observer = new MutationObserver((mutations) => {
  for (const mutation of mutations) {
    if (mutation.type === 'attributes' && 
        mutation.attributeName === 'contenteditable') {
      // 제거된 경우 contenteditable 재적용
      if (!mutation.target.hasAttribute('contenteditable')) {
        mutation.target.setAttribute('contenteditable', 'true');
      }
    }
  }
});

observer.observe(editableElement, {
  attributes: true,
  attributeFilter: ['contenteditable']
});

4. 편집 중 번역 비활성화

편집 모드를 감지하고 편집 중에는 번역을 비활성화합니다.

let isEditing = false;

editableElement.addEventListener('focus', () => {
  isEditing = true;
  document.documentElement.setAttribute('translate', 'no');
});

editableElement.addEventListener('blur', () => {
  isEditing = false;
  document.documentElement.removeAttribute('translate');
});

주의사항

  • 모든 번역 도구가 속성을 존중하지는 않음
  • MutationObserver는 성능 오버헤드가 있을 수 있음
  • 사용자 경험을 고려하여 번역 비활성화 시점 결정

관련 자료

Edit on GitHub