개발 도구

@lingo.dev/compiler는 개발 워크플로를 가속화하고 개발 중 API 비용을 절감하는 개발 도구를 제공합니다.

의사 번역기

의사 번역기는 API 호출 없이 즉각적인 가짜 번역을 생성합니다.

활성화

{
  dev: {
    usePseudotranslator: true,
  }
}

기능

시각적 마커로 텍스트를 변환합니다:

원본:

Welcome to our app

의사 번역됨:

[!!! Ẃëļċöṁë ẗö öüř äþþ !!!]

장점:

  1. 즉각적인 피드백 — API 호출 없음, 대기 시간 없음
  2. 번역 가능한 텍스트 시각화 — 번역되는 내용을 정확히 확인
  3. 다양한 길이 테스트 — 의사 번역은 약 30% 더 길어 레이아웃 문제를 드러냄
  4. 비용 제로 — API 크레딧 소비 없음

작동 원리

의사 번역기는:

  • 마커 추가([!!!!!!])
  • 문자를 악센트 버전으로 대체(a → ä, e → ë)
  • 텍스트 길이를 약 30% 확장
  • 보간 유지({name}{name}로 유지)
  • HTML 구조 유지

보간이 포함된 예시:

<p>Hello {name}, you have {count} items</p>
// Becomes: [!!! Ḧëļļö {name}, ÿöü ḧävë {count} ïẗëṁṡ !!!]

사용 시기

개발 중:

  • 초기 설정 및 통합
  • 다양한 텍스트 길이로 레이아웃 테스트
  • 번역 문제 디버깅
  • UI의 빠른 반복

사용하지 말아야 할 때:

  • 실제 번역 품질 검토
  • 로케일별 형식 테스트
  • 배포 전 최종 QA

실제 번역을 위해 비활성화

{
  dev: {
    usePseudotranslator: false,
  }
}

개발 서버를 재시작하여 구성된 LLM 제공자를 사용해 실제 번역을 생성합니다.

번역 서버

번역 서버는 개발 중 온디맨드 번역 생성을 처리합니다.

작동 방식

npm run dev를 실행하면:

  1. 컴파일러가 로컬 HTTP 서버를 시작합니다
  2. 서버가 사용 가능한 포트를 자동으로 찾습니다 (60000-60099)
  3. 앱이 서버에 번역을 요청합니다
  4. 서버가 번역을 생성합니다 (의사 번역 또는 실제 번역)
  5. 번역이 .lingo/metadata.json에 캐시됩니다

구성

{
  dev: {
    translationServerStartPort: 60000, // Starting port
    translationServerUrl: "http://localhost:60000", // Custom URL (advanced)
  }
}

포트 범위: 서버는 사용 가능한 포트를 찾을 때까지 60000-60099 포트를 순차적으로 시도합니다.

수동 시작 (고급)

번역 서버를 수동으로 시작할 수 있습니다:

npx @lingo.dev/compiler translate-server \
  --port 60000 \
  --config ./lingo.config.json

다음과 같은 경우에 유용합니다:

  • 빌드 프로세스와 별도로 번역 서버 실행
  • 번역 문제 디버깅
  • 커스텀 CI/CD 워크플로우

WebSocket 지원

번역 서버는 개발 위젯과의 실시간 통신을 위해 WebSocket을 지원합니다.

번역이 업데이트되면 서버는 WebSocket을 통해 연결된 클라이언트에 변경 사항을 푸시합니다.

개발 위젯

개발 위젯은 실시간으로 번역을 편집할 수 있는 브라우저 내 오버레이입니다.

기능

  • 브라우저에서 번역 편집 — 파일을 편집할 필요가 없습니다
  • 컨텍스트 확인 — 원본 텍스트, 컴포넌트 위치 확인
  • 실시간 업데이트 — WebSocket을 통해 변경 사항이 즉시 적용됩니다
  • 로케일 전환 — 다양한 로케일을 빠르게 테스트합니다

활성화

{
  dev: {
    enableWidget: true, // Coming soon
  }
}

상태: 개발 위젯은 현재 활발히 개발 중이며 향후 릴리스에서 제공될 예정입니다.

작동 방식

  1. 키보드 단축키를 누릅니다 (예: Cmd+Shift+L)
  2. 위젯 오버레이가 나타납니다
  3. 번역된 텍스트를 클릭하여 편집합니다
  4. 특정 로케일에 대한 번역을 변경합니다
  5. 저장—변경 사항이 WebSocket을 통해 동기화됩니다
  6. 번역이 .lingo/metadata.json에서 즉시 업데이트됩니다

개발 워크플로우

권장 설정

1. 초기 설정:

{
  dev: {
    usePseudotranslator: true, // Fast feedback
  }
}

npm run dev를 실행하여 의사 번역을 즉시 확인하세요.

2. 레이아웃 테스트:

의사 번역은 레이아웃 문제를 드러냅니다:

  • 텍스트 오버플로
  • 잘린 레이블
  • 정렬되지 않은 요소
  • 잘못된 반응형 중단점

실제 번역에 투자하기 전에 레이아웃 문제를 수정하세요.

3. 실제 번역 검토:

{
  dev: {
    usePseudotranslator: false,
  }
}

실제 번역을 생성하여 품질을 검토하세요. 테스트 항목:

  • 번역 정확도
  • 어조 및 격식
  • 기술 용어 처리
  • 브랜드명 보존

4. 미세 조정:

정밀한 제어를 위해 data-lingo-override를 사용하세요:

<h1 data-lingo-override={{ es: "Bienvenido", de: "Willkommen" }}>
  Welcome
</h1>

5. 프로덕션 빌드:

{
  buildMode: "cache-only",
}

빠르고 결정론적인 빌드를 위해 사전 생성된 번역을 사용하세요.

디버깅

번역 서버 확인

번역 서버가 콘솔에 로그를 출력합니다:

[lingo] Translation server started on port 60001
[lingo] Pseudotranslator: enabled
[lingo] Watching for changes...

메타데이터 파일 확인

.lingo/metadata.json를 검사하여 캐시된 번역을 확인하세요:

{
  "translations": {
    "abc123": {
      "source": "Welcome to our app",
      "locales": {
        "es": "[!!! Ẃëļċöṁë ẗö öüř äþþ !!!]",
        "de": "[!!! Ẃëļċöṁë ẗö öüř äþþ !!!]"
      }
    }
  }
}

의사 번역기가 비활성화되면 실제 번역이 대신 표시됩니다.

포트 충돌

60000-60099 포트가 모두 사용 중인 경우:

{
  dev: {
    translationServerStartPort: 61000, // Use different range
  }
}

또는 해당 포트를 사용하는 프로세스를 수동으로 중지하세요:

# Find process using port 60000
lsof -i :60000

# Kill process
kill -9 <PID>

성능 팁

Pseudotranslator는 빠릅니다—개발 시 기본적으로 사용하세요.

실제 번역은 더 느립니다—품질을 검토해야 할 때만 사용하세요:

  • 초기 번역 생성: API 지연 시간이 적용됩니다
  • 후속 빌드: 번역이 캐시되어 빠릅니다

번역 서버는 가볍습니다—최소한의 메모리 및 CPU 사용량.

자주 묻는 질문

번역 서버를 수동으로 시작해야 하나요? 아니요. npm run dev를 실행하면 자동으로 시작됩니다.

프로덕션에서 pseudotranslator를 사용할 수 있나요? 아니요. Pseudotranslator는 개발 전용입니다. 프로덕션 빌드는 항상 .lingo/metadata.json의 실제 번역을 사용합니다.

개발 위젯이 아직 제공되지 않는 이유는 무엇인가요? 현재 활발히 개발 중입니다. 업데이트는 GitHub 릴리스를 참조하세요.

pseudotranslation을 커스터마이징할 수 있나요? 현재는 불가능합니다. Pseudotranslator는 번역 가능한 텍스트를 시각화하는 데 최적화된 고정 알고리즘을 사용합니다.

pseudotranslation이 모든 문자 집합에서 작동하나요? 예. Pseudotranslator는 이모지, CJK 문자, RTL 언어를 포함한 유니코드를 올바르게 처리합니다.

다음 단계