Rails I18n 키 접미사 커스터마이징: Markdown 지원

How to customize Rails I18n key suffixes like?`_md`?for Markdown | Island94.org

작성자
발행일
2025년 07월 16일

핵심 요약

  • 1 Rails I18n에서 `_html`과 유사하게 `_md` 접미사를 사용하여 Markdown으로 작성된 번역을 지원하는 방법을 설명합니다.
  • 2 I18n `translate` 메서드와 Rails의 HTML Safe 동작을 패치하여 Markdown 콘텐츠를 자동으로 HTML로 변환하고 안전하게 처리합니다.
  • 3 이를 통해 번역 작업 시 HTML 대신 Markdown을 사용하여 가독성과 유지보수성을 향상시킬 수 있습니다.

도입

Rails 애플리케이션의 국제화(I18n) 기능은 번역된 콘텐츠를 관리하는 데 필수적입니다. 특히 `_html` 접미사를 사용하면 번역 문자열 내의 HTML 콘텐츠가 이스케이프되지 않고 안전하게 렌더링되도록 할 수 있습니다. 하지만 HTML을 번역 문자열 내에 직접 작성하는 것은 문법이 복잡하고 여러 언어 버전을 관리할 때 오류가 발생하기 쉽다는 단점이 있습니다. 본 문서는 이러한 문제를 해결하기 위해 Rails I18n 시스템을 확장하여 `_md` 접미사를 가진 번역 키를 Markdown으로 작성하고, 이를 자동으로 HTML로 변환하여 안전하게 처리하는 방법에 대해 상세히 다룹니다. 이 접근 방식은 번역 작성의 편의성과 가독성을 크게 향상시킬 수 있습니다.

Markdown으로 작성된 번역을 Rails I18n에서 지원하기 위한 핵심은 두 가지 주요 구성 요소를 패치하는 것입니다. 첫째, I18n translate 메서드를 확장해야 합니다. 이는 config/initializers/markdown.rb 파일에 Markdown::I18nBackendExt 모듈을 정의하고, ActiveSupport.on_load(:i18n) 블록 내에서 I18n.backend.classprepend함으로써 이루어집니다. 이 모듈은 translate 메서드를 오버라이드하여 번역 키가 _md로 끝나는지 확인하고, 해당 문자열이 Markdown 형식일 경우 Markdown.convert 또는 Markdown.inline 메서드를 호출하여 HTML로 변환합니다. 이때, 번역 문자열에 줄바꿈(\n)이 포함되어 있는지 여부에 따라 블록 또는 인라인 Markdown으로 변환하는 로직이 적용됩니다. 흥미로운 점은 Rails가 누락된 번역을 감지하기 위해 특정 마법 숫자(-(2**60))를 사용하는 방식에 대한 설명도 포함되어 있습니다.

둘째, Rails의 HTML Safe 동작을 패치하여 _md 접미사를 가진 번역 문자열도 HTML 안전하다고 인식하도록 해야 합니다. 이는 Markdown::HtmlSafeTranslationExt 모듈을 정의하고 ActiveSupport::HtmlSafeTranslationprepend함으로써 구현됩니다. 이 모듈은 html_safe_translation_key? 메서드를 확장하여 key.to_s.end_with?("_md") 조건이 참일 경우 해당 키를 HTML 안전한 것으로 간주하도록 합니다.

Markdown 변환을 위해서는 Kramdown 라이브러리를 활용합니다. Markdown.convertMarkdown.inline 메서드는 Kramdown을 사용하여 입력된 Markdown 텍스트를 HTML로 변환합니다. 특히 Kramdown::Parser::Inline 클래스를 커스터마이징하여 블록 레벨 요소(예: <p>) 없이 순수하게 인라인 HTML을 생성하는 방법을 제시합니다. 이는 번역된 문구가 단락이 아닌 짧은 구문일 때 유용합니다.

본문에서는 직접적인 패치 방식 외에 I18n::Transformers Gem과 같은 대안도 언급하지만, HTML 안전성 관련 패치는 여전히 필요하며, XSS(Cross-Site Scripting) 공격 가능성에 대한 면밀한 검토와 안전한 구현이 항상 중요하다고 강조합니다.

결론

결론적으로, 본 문서는 Rails I18n 시스템을 확장하여 Markdown 기반의 번역 키를 효과적으로 관리하는 방법을 제시합니다. `I18n translate` 메서드와 HTML Safe 동작을 패치함으로써, 개발자는 HTML의 복잡성 없이 Markdown의 간결함으로 번역을 작성하고, Rails가 이를 자동으로 HTML로 변환하여 안전하게 렌더링하도록 할 수 있습니다. 이 방법을 통해 번역 콘텐츠의 작성 효율성과 가독성이 향상되며, 전반적인 개발 경험이 개선될 수 있습니다. 그러나 모든 커스터마이징과 마찬가지로, 특히 HTML 안전성과 관련된 변경사항은 잠재적인 보안 취약점(XSS)에 대한 철저한 검토와 검증이 수반되어야 함을 잊지 말아야 합니다. 이 접근 방식은 Rails 애플리케이션의 국제화 워크플로우를 최적화하는 데 기여할 것입니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!