🤖📖 메모장으로 열리는 건 다 번역한다! AICoding 5탄
제미나이 AI와 함께하는 AICoding 그 대망의 다섯 번째 작품은 Text/Epub 문서 번역기다. 원래 목적은 자작 1탄인 SRT 자막 번역기와 구별되는 텍스트 전용 번역기를 만들려고 했는데, 프롬프트 기능을 추가해 놓고 보니 사실상 텍스트(txt) 기반의 모든 파일은 원본 형식을 유지한 채 번역이 가능한 만능 번역기가 되고 말았다. 한마디로, 메모장으로 열 수 있는 파일은 다 번역할 수 있다는 것. 역시 프롬프트 기반의 AI 번역기는 다재다능하다.
예를 들어, smi 형식의 자막(확장자는 txt로 변경)도 “원래 서식인 SAMI 형식을 유지하십시오”라고 프롬프트를 넣어주면, 말 그대로 SAMI 형식을 유지한 채 번역이 완료된다.
EPUB 번역 기능도 넣긴 했지만, 텍스트 번역에 비해 번역 시간도 더디고, EPUB 기본 구조를 유지하기는 하지만, 원본 구조를 그대로 유지하지는 못한다. 고로 EPUB을 텍스트로 변환한 후 번역할 것을 추천한다.
참고로 AI 번역의 놀라운 품질에 대해선 「AI 번역 어디까지 왔니? 원서의 오류까지 잡아준다네!」 글 참고.
무료 API는 어디까지나 테스트, 소규모 프로젝트, 개인적인 학습 등을 위한 것이지 대량 번역을 위한 것은 아니다. 과도한 사용은 API가 차단될 수 있으며 전체 사용자에게도 악영향을 끼칠 수 있음을 명심하자. 대량 번역은 번역 품질도 더 좋은 유료 API 결제. 비용은 소설 한 권 분량인 20만 토큰 번역하는데 3,780원 정도!
✨ 주요 기능 ✨
- New 용어집 자동 업데이트(v6.5)!
- New SRT 번역 및 번역 프로필 저장/불러오기(v6)!
품질 프리셋(퀄리티 프로필) 기능 추가(v5)!- 용어집(용어 사전) 추가(v4, 제미나이 2.0 이상)!
- 강력한 Gemini API 활용: 최신 AI 모델인 Google Gemini를 통해 자연스럽고 품질 높은 번역 결과를 얻을 수 있음
- EPUB 및 TXT 파일 지원: 전자책 표준인 EPUB 파일은 물론, 일반 텍스트 파일(TXT)도 번역 가능
- 프롬프트 지원: 사용자가 직접 프롬프트를 입력하여 번역 스타일, 번역 대상 언어, 출력 형식(번역본만/원본+번역본 등)까지 세밀하게 제어 가능. 이로써 AI의 능력 최대 활용!
- 다국어 UI 지원: 한국어와 영어 인터페이를 지원하며, 필요에 따라 다른 언어 UI도 쉽게 추가할 수 있는 구조
- API 키 관리: 여러 개의 API 키를 등록하고 자동으로 다음 키로 전환하여 안정적인 번역 가능
- 요청 지연 설정: API 요청 사이에 지연 시간을 두어 API 사용량 제한에 유연하게 대응
- 청크 크기 조절: TXT, SRT 파일 번역 시 한 번에 API로 보낼 글자 수를 조절하여, 긴 글도 효과적으로 분할 번역
- 자동 진행 저장: TXT, SRT 파일 번역 시 일정 간격 자동 저장.
- 번역 완료 후 자동 절전(Windows): 번역 작업 후 자동으로 절전 상태로 전환
⬇ EPUB/TEXT/SRT Translate 다운로드(업데이트: 2025/07/05) ⬇
🆕 v6.5.1 업데이트 내역 🆕
- SRT 파일 청크 번역 오류 수정
🆕 v6.5 업데이트 내역 🆕
- 용어집 자동 업데이트
- 번역의 일관성 유지를 위한 '자율 학습' 기능. AI가 매번 번역 후 중요하다고 판단되는 단어를 스스로 찾아내어 메모리 용어집에 추가하고, 번역 완료 후 용어집에 저장(Gemini 2.0 이상)
- [기타 설정]에 'Top K' 추가
- Top-K 샘플링은 자연어 생성 모델이 다음에 올 단어를 예측할 때 사용하는 선택 전략
- [API 요청]에 '최대 출력 토큰', '자동 중지' 추가
- '최대 출력 토큰'은 말그대로 최대 출력 토큰 값을 설정, '자동 중지'는 일정 API 요청 후 번역 일시정지(일일 API 요청 할당량 관리에 유용)
🆕 v6.2 업데이트 내역 🆕
- SRT 번역 안정성 대폭 향상 (구분자 오류 해결)
- AI가 SRT 자막 청크 번역 시 |||SUB_SEPARATOR||| 구분자를 제대로 유지하지 못해 번역 효율이 떨어지는 문제 수정. SRT 자막 번역을 위한 기본 프롬프트는 아래 'SRT 자막 번역 프롬프트 예시' 참고
- UI/UX 현대화 (탭 인터페이스 도입)
- [API 설정], [프롬프트 설정], [기타 설정]의 3개 탭으로 UI를 재구성
- 사용자 편의성 향상 (마지막 작업 상태 복원)
- 프로그램 시작할 때 모든 탭의 설정 값 복원
🆕 v6 업데이트 내역 🆕
- 지원 파일 형식 확장
- SRT 자막 파일 지원 추가 (.srt)
- TXT, EPUB 외에 SRT 파일 번역 가능
- SRT 전용 청크 분할 및 자동 구분자 삽입 처리 로직 포함 (|||SUB_SEPARATOR||| 유지)
- 프롬프트 템플릿 개선
- 기본 번역 프롬프트에 SRT 구분자 관련 안내 자동 삽입
- 설정 프로필 기능 추가
- 번역 설정을 프로필로 저장/불러오기/삭제 가능 (JSON 파일 저장)
- 번역 프로필만 별도로 공유 가능
- GUI에 프로필 관련 메뉴 항목 및 대화 상자 추가
- 진행률 저장 로직 통합
- EPUB 전용 → TXT, SRT 공용으로 통합
- 상수 이름 변경 (EPUB_* → 일반화된 이름)
- 에러 메시지/안정성 개선
- google.api_core.exceptions 추가로 예외 유형 구분 강화
- simpledialog 추가 (프로필 저장 시 이름 입력 등)
- 예외 메시지 다양화 및 정확도 향상
- 기타 세부 개선 사항
- 설정 파일에 기본 프로필명 추가 (DEFAULT_PROFILE_NAME = "기본 설정")
- 내부 변수명 통일성 향상
- SRT 실패 시 자동 재시도 (구분자 불일치 시 블록 단위 재번역)
🆕 v5.1 업데이트 내역 🆕
gemini-2.5-flash, gemini-2.5-pro, gemini-2.5-flash-lite-preview-06-17 모델 추가
🆕 v5 업데이트 내역 🆕
- 품질 프리셋(퀄리티 프로파일) 기능 추가
- 사용자가 직접 온도(temperature), top_p, API 모델 설정 대신 사전 정의된 프로파일(FastestFlash, BalancedFlash 등) 선택 가능
- "Custom" 모드에서는 수동 설정 가능
- GUI에 "Quality Preset" 드롭다운 추가
- 파라미터 설정값 범위 및 검증 로직 추가
- 설정 항목별 허용 범위(SETTING_RANGES) 도입
- 예: request_delay: 0~60초, temperature: 0.0~2.0 등
- 유효하지 않은 값은 자동 교정 및 GUI에 메시지 표시
- 새로운 하이퍼파라미터 설정 추가
- temperature (창의성 조절)
- top_p (nucleus sampling)
- Gemini API 제어 수준 향상
- EPUB 번역 중간 저장 및 복원 기능 개선
- 번역 중단 시 다음 실행에서 자동 복원
- 관련 파일: "_progress" 폴더, "_progress_state.json", ".html_translated_temp" 임시 파일
- 실패한 번역 파트 별도 로깅
- 실패한 청크/EPUB 항목에 대해 _failed_parts.txt 생성
- GUI에서 사용자에게 경고 및 경로 제공
- 코드 구조 및 안정성 개선
- 내부 구현 세부 사항 개선
- UI 텍스트 및 다국어 번역 갱신
- 다국어 지원 강화
🆕 v4 업데이트 내역 🆕
- API 키 유효성 검사 (핑 테스트) 재활성화 및 개선
- 번역 전 또는 API 키 첫 사용 시 "hello" 요청으로 유효성 검사 수행
- 단일 API 키: 번역 시작 시 자동 검사 → 실패 시 오류 메시지
- 다중 API 키: 각 키의 첫 번역 요청 전 검사
- 타임아웃 설정(request_options) 적용됨
- Gemini API 타임아웃 설정 방식 변경
- client_options 대신 request_options={"timeout": seconds} 사용
- 기본값: 핑 테스트 60초, 실제 번역 180초
- 사용자 조작 불필요
- API 키 관리 로직 개선
- collections.deque로 활성 키/무효 키 풀 분리 관리
- 키 순환 및 재시도 로직 강화
- 여러 API 키 파일에 등록 시 자동 순환
- 로깅 및 오류 메시지 개선
- 로그 메시지 명확화, 다국어 지원 메시지 업데이트
- 로그 창/메시지 박스에서 상세 정보 확인 가능
- 용어집 주입 기능 추가
- 프롬프트 템플릿에 {{glossary_data}} 플레이스홀더 지원
- 용어집 파일(glossary.txt)에 원본단어=번역단어 형식 작성
- GUI에서 파일 경로 지정 후 프롬프트 템플릿에 플레이스홀더 포함
- EPUB 시스템 파일 처리 명확화
- .css, .js, .opf, .ncx 등 시스템 파일은 번역 제외 후 복사
- EPUB 선택 시 HTML/XHTML 콘텐츠만 번역
- GUI 핸들러 중복 추가 방지
- 로그 메시지 중복 출력 방지를 위해 TextHandler 추가 전 중복 확인
※ 공통: 대부분의 기능은 자동 적용되며, 용어집 기능만 별도 설정 필요합니다.
📚 사용 방법 📚
각 설정에 대한 설명이나 최적의 청크, 토큰 값 찾는 방법은 다음 문서 참고, 「EPUB/TEXT/SRT 번역기 v6.5 사용자 안내서」
1. Google Gemini API 키 준비: Google AI Studio 등에서 API 키를 발급받은 다음 API. txt 텍스트 파일에 발급받은 API 키를 한 줄에 하나씩 입력하여 저장(주석은 #으로 시작).
2. (프로그램 실행 후) UI 언어 및 Gemini API 모델 선택.
3. 번역할 EPUB 또는 TXT 파일 선택.
4. 번역된 파일이 저장될 폴더 선택(기본적으로 원본 파일 폴더로 지정).
5. API 키 파일 선택(기본적으로 같은 폴더의 API.txt 선택).
6. 요청 지연: API 요청 간격을 초 단위로 설정(청크 수와 번역 시간, 그리고 분당 API 요청 제한 수에 따라 적절히 조절).
7. API 키 전환: 하나의 API 키로 몇 번 번역 요청하고 다음 키로 넘어갈지 결정(0이면 비활성화).
8. 청크당 최대 글자수(TXT): TXT 파일 번역 시 한 번에 처리할 최대 글자 수 설정(중국어/일어는 5000~8000, 영어는 18000 정도 추천).
9. 결과 파일 언어 태그: 출력 파일명에 붙을 태그 입력(예: Eng, Korean). EPUB의 경우, 2~3글자 ISO 언어 코드(예: en, ko, fr)를 입력하면 EPUB 메타데이터에도 반영됨.
10. 프롬프트 설정(고급): 이 부분이 매우 중요! 여기에 번역 대상 언어와 원하는 출력 형식을 직접 명시. 이때 ‘원본 텍스트 : {text_chunk}’ 플레이스홀더는 반드시 포함되어야 함(이 부분에 실제 번역할 텍스트가 들어감).
프롬프트 예시: 미쓰다 신조의 '도조 겐야 시리즈'의 중국어판입니다.
이것을 [한국어]로 번역하세요(대괄호 반드시 유지).
번역된 텍스트만 제공하세요.
원래 형식을 유지하세요.
{{glossary_data}}
원본 텍스트:
{{text_chunk}}
🎬 SRT 자막 번역 프롬프트 예시 📝
📜 펼쳐보기 📜
Please translate the following text into [Target Language, e.g., Korean, French](Brackets must be kept!!!).
{{glossary_data}}
Provide only the translated text, without any introductory phrases or repeating the original text.
Preserve the original formatting.
Original text:
{{text_chunk}}
다음 텍스트를 [영어]로 번역해 주십시오(대괄호 반드시 유지!!!)
{{glossary_data}}
서론이나 원본 텍스트 반복 없이 번역된 텍스트만 제공해 주십시오.
원래 서식을 유지하십시오.
원본 텍스트:
{{text_chunk}}
⚠ 사용 시 주의 사항 ⚠
- API 키 유출 주의: API 키는 개인 정보와 같으므로, 절대 공개적인 곳에 공유하거나 코드에 직접 하드 코딩하면 안 된다.
- 무료 API 제한: Google Gemini 무료 API는 사용량에 따라 제한될 수 있다. 테스트 용도로만 사용하고 본격적인 작업은 유료 API 결제 추천.
- 프롬프트의 중요성: 번역 품질과 형식은 사용자가 작성한 '번역 프롬프트 템플릿'에 크게 좌우된다. 원하는 결과를 얻기 위해 다양한 프롬프트를 실험하면서 최적의 프롬프트를 찾는 것이 중요하다({text_chunk} 플레이스홀더는 필수).
- EPUB 파일 복잡성: EPUB 파일은 내부 구조가 다양하고 복잡하다. 이 프로그램은 일반적인 HTML 구조의 텍스트를 추출하여 번역하지만, 이미지 내 텍스트, 특수한 스크립트로 동적 생성되는 텍스트 등은 번역되지 않을 수 있다. 또한, 번역 후 레이아웃이 일부 변경될 수 있다.
- 번역 품질 한계: AI 번역은 매우 발전했지만, 여전히 문맥에 따른 미묘한 오류나 어색함이 있을 수 있다. 중요한 문서의 경우 반드시 전문가의 검토를 거치는 것을 추천.
- 모델 및 Safety Settings: Gemini API는 자체적으로 유해 콘텐츠를 차단하는 기능(Safety Settings)이 있어서 때로는 번역 내용과 관계없이 응답이 차단될 수 있고, 이 경우 로그에 관련 정보가 표시된다. 프로그램에서는 기본적으로 대부분의 차단을 해제하려고 시도하지만, API 정책에 따라 달라질 수 있다.
☕ 마치면서 ☕
번역 품질의 경우 현재로선 무료 사용자의 경우 gemini-2.5-flash-preview 모델이 단연코 뛰어나 보이고(pro 모델은 유료), gemini-2.0 모델의 번역 품질도 기존의 구글/파파고/카카오에 비하면 비교 불가 급이다. 다만 2.5 모델은 번역 속도가 매우 느리다는 것.
https://github.com/google-gemini/gemini-cli
답글삭제인증되면 Gemini를 사용하여 분당 최대 60개, 하루에 최대 1,000개의 모델 요청을 처리할 수 있습니다. 라고 설명하는데요.. 이것도 적용 가능 할까요?
전 코드는 모릅니다. 앱을 만들기는 했지만, 100% AI에 의존했죠. 아마 어려울 것 같습니다.
삭제