🤖📖 메모장으로 열리는 건 다 번역한다! AICoding 5탄
제미나이 AI와 함께하는 AICoding 그 대망의 다섯 번째 작품은 Text/Epub 문서 번역기다. 원래 목적은 자작 1탄인 SRT 자막 번역기와 구별되는 텍스트 전용 번역기를 만들려고 했는데, 프롬프트 기능을 추가해 놓고 보니 사실상 텍스트(txt) 기반의 모든 파일은 원본 형식을 유지한 채 번역이 가능한 만능 번역기가 되고 말았다. 한마디로, 메모장으로 열 수 있는 파일은 다 번역할 수 있다는 것. 역시 프롬프트 기반의 AI 번역기는 다재다능하다.
예를 들어, smi 형식의 자막(확장자는 txt로 변경)도 “원래 서식인 SAMI 형식을 유지하십시오”라고 프롬프트를 넣어주면, 말 그대로 SAMI 형식을 유지한 채 번역이 완료된다.
EPUB 번역 기능도 넣긴 했지만, 텍스트 번역에 비해 번역 시간도 더디고, EPUB 기본 구조를 유지하기는 하지만, 원본 구조를 그대로 유지하지는 못한다. 고로 EPUB을 텍스트로 변환한 후 번역할 것을 추천한다.
참고로 AI 번역의 놀라운 품질에 대해선 「AI 번역 어디까지 왔니? 원서의 오류까지 잡아준다네!」 글을, 그리고 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/08/01) ⬇
🆕 v6.9 업데이트 내역 🆕
- [용어집 추출] 기능 추가(제미나이 2.5 이상 권장)
- [최적화] 기능 추가(최적의 청크 크기 및 Temperature, Top P, Top K 값 찾기)
🆕 v6.8 업데이트 내역 🆕
- [SRT 청크 실패 시 재시도] 기능 추가
- 일괄 작업 지원
🆕 v6.7 업데이트 내역 🆕
- [청크수 계산] 기능 추가
- [일시정지] [취소] 기능 안정화
🆕 v6.6 업데이트 내역 🆕
- [API 사용량 현황] 메뉴 추가
- [기타 설정]에 [콘텐츠 차단 시 원본 유지 및 건너띄기] 추가
🆕 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.9 사용자 안내서」
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 모델은 번역 속도가 매우 느리다는 것.
2025/07/07: 7월부터 gemini-2.5-pro 모델도 하루 100번 무료 API를 제공한다. 100번이지만, API 1회 요청 시 7천 자 정도(한글 출력 기준)를 번역한다고 할 때 최대 7십만 자, 즉 소설 2~3권 정도 분량을 번역할 수 있는 양이다.
https://github.com/google-gemini/gemini-cli
답글삭제인증되면 Gemini를 사용하여 분당 최대 60개, 하루에 최대 1,000개의 모델 요청을 처리할 수 있습니다. 라고 설명하는데요.. 이것도 적용 가능 할까요?
전 코드는 모릅니다. 앱을 만들기는 했지만, 100% AI에 의존했죠. 아마 어려울 것 같습니다.
삭제