본문으로 건너뛰기

문제 해결

champollion의 일반적인 문제와 해결 방법입니다.

API & 인증

"OPENROUTER_API_KEY not found"

Champollion은 LLM 번역을 위해 API 키가 필요해요. 환경 변수로 설정하세요:

export OPENROUTER_API_KEY="sk-or-v1-..."

또는 .env 파일에 설정하세요 (프로젝트가 .env 파일을 로드하는 경우):

OPENROUTER_API_KEY=sk-or-v1-...

Google Translate API 키만 있는 경우, champollion이 이를 자동으로 감지하여 Google Translate를 기본 방식으로 사용해요. 설정을 변경할 필요가 없어요.

OpenRouter에서 "401 Unauthorized" 발생

API 키가 유효하지 않거나 만료되었어요. openrouter.ai/keys에서 확인하세요.

"429 Too Many Requests" / 속도 제한

Champollion은 지수 백오프를 통해 속도 제한을 내부적으로 처리해요. 속도 제한에 계속 걸린다면:

  1. 설정에서 배치 크기를 줄이세요:
    { "batchSize": 15 }
  2. 더 높은 속도 제한을 가진 모델을 사용하세요 (예: google/gemini-3.5-flash는 넉넉한 제한을 제공해요)
  3. 대용량 페어에는 더 저렴하거나 빠른 방식을 사용하세요 — Google Translate에는 속도 제한이 없어요:
    { "pairs": { "en:it": { "method": "google-translate" } } }

모델을 찾을 수 없음 / 404 오류

직접 LLM 제공업체(openai, anthropic, gemini)는 첫 사용 시 모델 문자열을 검증해요. 다음과 같은 경고가 표시되면:

"looks like an OpenRouter path" — 직접 제공업체에서 OpenRouter 형식의 모델(google/gemini-3.5-flash)을 사용하고 있어요. 직접 제공업체는 단순 모델 이름을 사용해요:

- { "method": "gemini", "model": "google/gemini-3.5-flash" }
+ { "method": "gemini", "model": "gemini-2.5-flash" }

또는 OpenRouter를 사용하려면 llm 방식으로 전환하세요:

{ "method": "llm", "model": "google/gemini-3.5-flash" }

"is an Anthropic/OpenAI/Gemini model" — 잘못된 제공업체로 모델을 보내고 있어요:

- { "method": "gemini", "model": "claude-sonnet-4-6" }
+ { "method": "anthropic", "model": "claude-sonnet-4-6" }

"not found in available models" — 모델이 더 이상 사용되지 않거나 철자가 틀렸을 수 있어요. Champollion은 제공업체의 실시간 모델 목록을 가져와 대안을 제안해요. 현재 모델 이름은 제공업체의 문서를 확인하세요.

:::tip 모델 지원 중단이 발생해요 제공업체는 정기적으로 모델 이름을 폐기해요. 제공업체 업데이트 후 갑자기 번역이 실패하면 [WARN] 출력을 확인하세요 — 현재 사용 가능한 대안을 보여줄 거예요. :::

번역 품질

번역이 원본 언어를 그대로 반복함

품질 게이트가 이를 잡아내요. 번역이 영어 원본과 동일하면 거부되고 재시도돼요. 이 문제가 계속되면:

  1. 모델을 확인하세요 — 일부 모델은 특정 언어 페어에서 성능이 좋지 않아요
  2. 레지스터 지시문을 추가하세요 — 모델에게 어떤 언어를 생성해야 하는지 알려주세요:
    {
    "languages": {
    "ja": { "name": "Japanese", "register": "Polite/formal Japanese" }
    }
    }
  3. 다른 모델을 사용해 보세요gpt-4o-mini에서 gpt-4o 또는 google/gemini-2.5-pro로 전환하세요

잘못된 문자 체계 출력 (예: 일본어에 라틴 문자 사용)

품질 게이트의 문자 체계 준수 검사가 대부분의 경우를 잡아내요. 이 문제가 계속되면:

  • 로케일 코드가 올바른지 확인하세요 (jp가 아니라 ja)
  • register 필드에 명시적인 문자 체계 지시문을 추가하세요:
    { "register": "Japanese using hiragana, katakana, and kanji" }

출력의 환각 패턴

반복되는 트라이그램 패턴(예: "hello hello hello")은 환각 루프 감지기가 잡아내요. 출력이 깨졌지만 감지기를 통과하는 경우:

  1. 배치 크기를 줄이세요 — 더 작은 배치는 더 집중된 출력을 생성해요
  2. 더 강력한 모델을 사용하세요 — 더 큰 모델은 비라틴 문자 체계에서 환각이 덜 발생해요
  3. 코칭 데이터를 추가하세요 — 사전 용어가 번역을 고정시켜줘요

파일 & 형식 문제

"No locale files found"

Champollion은 로케일 파일을 자동으로 감지해요. 찾을 수 없는 경우:

  1. localesDir를 확인하세요 — 로케일 파일이 있는 디렉터리를 가리켜야 해요:
    { "localesDir": "./locales" }
  2. 파일 이름을 확인하세요 — 파일은 로케일 코드로 이름이 지정되어야 해요: en.json, fr.json
  3. 형식을 확인하세요 — 지원되는 형식: JSON, 중첩 JSON, YAML, TOML

잠금 파일 충돌

.champollion.lock가 잘못된 상태가 되면:

# Reset the lock file (next sync will retranslate everything)
rm .champollion.lock
npx champollion sync
경고

잠금 파일을 삭제하면 다음 동기화 시 변경된 키뿐만 아니라 모든 키를 재번역해요. 대규모 프로젝트의 경우 API 비용에 영향을 줘요.

특정 키 재번역하기

개별 번역이 잘못되어 잠금 파일을 삭제하지 않고 강제로 재번역하려는 경우:

# Re-translate a single key
npx champollion sync --force-keys "hero.title"

# Re-translate multiple keys
npx champollion sync --force-keys "nav.home,nav.about,footer.copyright"

--force-keys 플래그는 해당 특정 키에 대한 잠금 파일 해시 검사를 무시하여 다른 키에 영향을 주지 않고 재번역을 강제해요.

콘텐츠 번역이 코드 블록을 손상시킴

이런 일은 발생하지 않아야 해요 — 코드 블록은 번역 전에 보호돼요. 만약 발생한다면:

  1. 코드 블록이 표준 펜싱(삼중 백틱)을 사용하는지 확인하세요
  2. 원본 Markdown에 닫히지 않은 코드 블록이 있는지 확인하세요
  3. 이슈를 제출하세요 — 이것은 센티넬 보호 시스템의 버그예요

CLI 문제

--watch가 변경 사항을 감지하지 못함

파일 감시는 Node.js 네이티브 fs.watch을 사용해요. 알려진 문제:

  • 네트워크 드라이브fs.watch는 NFS/SMB 마운트에서 안정적으로 작동하지 않아요
  • Docker 볼륨 — 폴링 모드를 사용하거나 컨테이너 내부에서 champollion을 실행하세요
  • 대규모 디렉터리 — 감시기는 localesDir을 재귀적으로 모니터링해요; 매우 깊은 트리는 OS 제한을 초과할 수 있어요

npx가 이전 버전을 실행함

# Clear the npx cache
npx --yes champollion@latest sync

또는 전역으로 설치하세요:

npm install -g champollion
champollion sync

성능

여러 언어에 대해 동기화가 느림

Champollion은 기본적으로 모든 로케일을 병렬로 번역해요. 그래도 동기화가 느린 경우:

  1. 대용량 페어에는 Google Translate를 사용하세요 — LLM 번역보다 10~50배 빨라요
  2. 배치 크기를 늘리세요 (기본값은 80):
    { "batchSize": 120 }
  3. 동시성을 조정하세요 — JSON 로케일 병렬성은 기본값이 200이고 콘텐츠는 48이에요. API 제공업체가 더 높은 속도 제한을 지원하는 경우:
    npx champollion sync --json-concurrency 80 --content-concurrency 20
  4. 빠른 모델을 사용하세요gpt-4o-minigpt-4o보다 훨씬 빨라요

높은 API 비용

  • 배치 크기를 확인하세요 — 더 큰 배치 = 더 적은 API 호출 = 더 낮은 비용
  • Translation Memory를 사용하세요 — TM은 기본적으로 켜져 있어요. champollion tm stats를 실행하여 작동하는지 확인하세요. 여러 번 동기화한 후에도 0개의 항목이 표시되면 .champollion/ 디렉터리 권한에 문제가 있을 수 있어요
  • 프롬프트 캐싱을 사용하세요 — Champollion은 Anthropic 및 Google 모델에서 캐시 적중을 위해 시스템/사용자 메시지를 분리해요
  • Tier 2 언어에는 Google Translate를 사용하세요30개 언어 번역하기 쿡북을 참조하세요

제공업체 전환 후 오래된 번역

한 번역 방식에서 다른 방식으로 전환하는 경우(예: llm에서 deepl로), TM 캐시는 원본 텍스트가 변경되지 않은 키에 대해 이전 방식의 오래된 번역을 계속 제공할 수 있어요. 캐시 키에는 방식 이름이 포함되어 있어 대부분의 경우 자동으로 처리돼요. 하지만 같은 방식 내에서 model을 변경한 경우:

# Force fresh translations for all keys
champollion sync --no-tm

# Or clear the cache entirely and re-sync
champollion tm clear --yes
champollion sync

캐시 키 설계에 대한 자세한 내용은 Translation Memory를 참조하세요.

여전히 막혔나요?