|Labs
데모 예약플랫폼
React (Lingo Compiler)
알파
React (MCP)React (i18n)레거시 CLI (v0)
사용 중단

Lingo.dev Compiler

  • 작동 원리
  • 설정
  • Compiler 빠른 시작

Frameworks

  • Next.js 연동
  • Vite + React

가이드

  • 로캘 전환
  • 자동 복수형 처리
  • 수동 오버라이드
  • 빌드 모드
  • 프로젝트 구조
  • 번역 제공업체
  • 사용자 지정 로캘 리졸버
  • 개발 도구

레퍼런스

  • 모범 사례
  • 구성 레퍼런스
  • 문제 해결
  • 마이그레이션 가이드
  • 최적화
  • 출력 형식

프로젝트 구조

알파

Lingo.dev Compiler는 현재 알파 단계입니다. 아직 안정적이지 않아 프로덕션 사용은 권장되지 않으며, 릴리스마다 API가 변경될 수 있습니다.

Lingo.dev Compiler는 프로젝트 루트에 번역 메타데이터와 캐시를 저장하는 .lingo/ 디렉터리를 생성하고 유지합니다. 이 디렉터리 구조를 이해하면 버전 관리에서 번역을 효율적으로 관리하고, 누락된 번역을 디버깅하고, 빌드 성능을 최적화하는 데 도움이 됩니다.

.lingo/ 디렉터리#

컴파일러는 첫 번째 빌드 시 이 디렉터리를 자동으로 생성합니다. 여기에는 빌드 파이프라인에서 사용하는 모든 번역 메타데이터가 들어 있습니다:

text
.lingo/
  metadata.json              # Translation cache and content hashes
  locale-resolver.server.ts  # Optional: custom server-side locale resolver
  locale-resolver.client.ts  # Optional: custom client-side locale resolver

metadata.json#

이 파일은 .lingo/ 디렉터리의 핵심 파일입니다. 다음 정보를 저장합니다:

  • 콘텐츠 해시 - 각 번역 가능 문자열에 대한 안정적인 해시 기반 식별자
  • 캐시된 번역 - 각 로캘 쌍에 대해 생성된 번역
  • 원문 텍스트 스냅샷 - 번역 시점의 원문 텍스트로, 변경 사항을 감지하는 데 사용됩니다

컴파일러는 빌드가 시작될 때마다 이 파일을 읽습니다. 해시가 일치하는 문자열은 캐시된 번역을 재사용하고, 해시가 변경되었거나 없는 문자열은 설정된 번역 제공자로 전송됩니다.

버전 관리에 커밋하기

항상 .lingo/metadata.json를 리포지토리에 커밋하세요. cache-only 모드의 프로덕션 빌드는 번역을 오직 이 파일에서만 읽습니다. 이 파일이 커밋되어 있지 않으면 프로덕션 빌드는 실패합니다.

.gitignore 관련 주의사항#

.lingo/를 .gitignore에 추가하지 마세요. 이 디렉터리는 버전 관리 대상에 포함되어야 합니다. 컴파일러를 사용하는 프로젝트의 일반적인 .gitignore 예시는 다음과 같습니다:

gitignore
# Do NOT ignore .lingo/ - it contains translation cache
node_modules/
dist/
.env

sourceRoot#

sourceRoot 옵션은 컴파일러가 번역 가능한 React 컴포넌트를 스캔할 디렉터리를 결정합니다:

ts
{
  sourceRoot: "./app",  // Next.js App Router
  // or
  sourceRoot: "src",    // Vite + React
}

컴파일러는 sourceRoot 안에 있는 모든 .tsx, .ts, .jsx, .js 파일을 재귀적으로 스캔해 번역 가능한 JSX 콘텐츠를 찾습니다. 이 디렉터리 밖에 있는 파일은 처리되지 않습니다.

sourceRoot 값스캔 대상
"./app"app/ 디렉터리의 모든 파일(Next.js 관례)
"src"src/ 디렉터리의 모든 파일(Vite 관례)
"."프로젝트 루트의 모든 파일(공유 패키지가 있는 모노레포에 유용)

더 넓은 sourceRoot를 지정할수록 더 많은 파일을 스캔하게 되어 빌드 시간이 늘어납니다. 가능한 한 범위를 좁게 유지하세요. 일부 파일만 번역하면 된다면 대신 useDirective 옵션을 사용하세요.

'use i18n'을 사용하는 옵트인 모드#

기본적으로 컴파일러는 sourceRoot 내의 모든 JSX 텍스트를 번역합니다. 옵트인 모드로 전환하려면 useDirective: true를 설정하세요:

ts
{
  useDirective: true,
}

옵트인 모드에서는 'use i18n' 지시어로 시작하는 파일만 처리됩니다:

tsx
'use i18n';

export function Welcome() {
  return <h1>Welcome to our app</h1>;
  // This text IS translated
}

지시어가 없는 파일은 건너뜁니다:

tsx
export function InternalAdmin() {
  return <h1>Admin Dashboard</h1>;
  // This text is NOT translated
}

옵트인 모드를 사용할 때#

시나리오권장 모드
모든 콘텐츠를 번역해야 하는 소규모 앱기본값(useDirective: false)
사용자 대상 페이지가 일부만 있는 대규모 코드베이스옵트인(useDirective: true)
내부용과 외부용 컴포넌트가 함께 있는 모노레포옵트인(useDirective: true)
점진적으로 도입하는 경우 - 기존 앱에 i18n 추가옵트인(useDirective: true)

lingoDir#

lingoDir 옵션으로 메타데이터 디렉터리의 위치를 변경할 수 있습니다:

ts
{
  lingoDir: ".lingo",  // Default
  // or
  lingoDir: ".translations",  // Custom location
}

프로젝트에 이미 있는 디렉터리와 .lingo/가 충돌할 때 유용합니다.

다음 단계#

빌드 모드
각 모드에서 metadata.json이 어떻게 사용되는지 알아보세요
커스텀 로캘 리졸버
.lingo/에 리졸버 파일 추가하기
설정 레퍼런스
sourceRoot, lingoDir, useDirective 옵션
모범 사례
버전 관리와 프로젝트 설정을 위한 팁

이 페이지가 도움이 되었나요?

Max PrilutskiyMax Prilutskiy·업데이트됨 4개월 전·2 min read