키 보존

Lingo.dev CLI를 사용하면 특정 번역 키를 보존하여 한 번 초기화된 후 후속 CLI 작업에서 덮어쓰지 않도록 할 수 있습니다. 보존된 키는 소스에서 플레이스홀더로 복사된 후 자동 번역 업데이트로부터 보호됩니다.

키를 보존하면 CLI가 소스 값으로 초기화한 다음 향후 번역 실행 시 해당 키를 건너뜁니다.

키 보존 설정

i18n.json의 버킷 구성에 preservedKeys를 추가하세요:

{
  "locale": {
    "source": "en",
    "targets": ["es", "fr", "de"]
  },
  "buckets": {
    "json": {
      "include": ["locales/[locale].json"],
      "preservedKeys": ["legal/privacy", "legal/terms", "marketing/tagline"]
    }
  }
}

preservedKeys 배열은 슬래시(/) 표기법을 사용하여 중첩된 키를 지정하고 별표(*)를 사용하여 여러 키를 매칭합니다.

키 보존 작동 방식

번역 처리 중 Lingo.dev CLI는:

  1. 보존된 키 식별 — 구성에서 보존된 키를 찾습니다
  2. 번역에서 제외 — 보존된 키는 번역 엔진으로 전송되지 않습니다
  3. 누락된 키 초기화 — 새 대상 파일에 대한 플레이스홀더로 소스 값을 복사합니다
  4. 기존 값 보호 — 수동으로 번역된 콘텐츠를 변경하지 않고 유지합니다

예시 워크플로:

// locales/en.json (source)
{
  "welcome": "Welcome to our platform",
  "legal": {
    "privacy": "We respect your privacy and protect your data.",
    "terms": "By using this service, you agree to our terms."
  }
}

보존된 키 구성:

{
  "preservedKeys": ["legal/privacy", "legal/terms"]
}

생성된 스페인어 번역(첫 실행):

// locales/es.json (generated)
{
  "welcome": "Bienvenido a nuestra plataforma",
  "legal": {
    "privacy": "We respect your privacy and protect your data.",
    "terms": "By using this service, you agree to our terms."
  }
}

welcome 키는 번역됩니다. legal 섹션은 나중에 수동 번역을 위해 그대로 복사됩니다.

중첩된 키 경로

슬래시(/) 표기법을 사용하여 모든 깊이의 키를 보존하세요:

{
  "preservedKeys": [
    "legal/privacy/full",
    "legal/terms/conditions",
    "marketing/campaigns/holiday"
  ]
}

이 표기법은 복잡한 중첩 구조에서도 작동합니다:

// Source structure
{
  "legal": {
    "privacy": {
      "full": "Full privacy policy text..."
    }
  }
}

legal/privacy/full 경로는 이 특정 중첩 키를 보존합니다.

점이 포함된 키

슬래시 표기법은 이름에 점이 포함된 키를 처리합니다:

// Source with dotted key names
{
  "legal": {
    "privacy.policy": "Privacy policy content",
    "terms.of.service": "Terms of service content"
  }
}

다음을 사용하여 이러한 키를 보존합니다:

{
  "preservedKeys": ["legal/privacy.policy", "legal/terms.of.service"]
}

여러 버킷 유형

다양한 파일 형식은 서로 다른 보존 키를 가질 수 있습니다:

{
  "buckets": {
    "json": {
      "include": ["locales/[locale].json"],
      "preservedKeys": ["legal/privacy", "legal/terms"]
    },
    "yaml": {
      "include": ["translations/[locale].yml"],
      "preservedKeys": ["compliance/gdpr", "compliance/ccpa"]
    }
  }
}

각 버킷 유형은 콘텐츠 구조에 따라 자체 보존 키 목록을 유지합니다.

키 보존 vs 키 잠금

키 보존키 잠금은 서로 다른 목적을 가지고 있습니다:

키 보존(preservedKeys):

  • 키는 소스 값을 플레이스홀더로 사용하여 한 번 초기화됩니다
  • 기존 타겟 값은 CLI에 의해 절대 덮어쓰이지 않습니다
  • 수동 번역이나 법적 검토가 필요한 콘텐츠에 사용됩니다

키 잠금(lockedKeys):

  • 키는 번역 처리에 포함되지만 값은 변경되지 않은 상태로 유지됩니다
  • 잠긴 키는 항상 소스 값과 정확히 일치합니다
  • 기술 식별자, 컴포넌트 이름 또는 일관성을 유지해야 하는 값에 사용됩니다

비교 예시:

// Source file
{
  "welcome": "Welcome",
  "system": {
    "component": "Lingo.dev Engine"
  },
  "legal": {
    "privacy": "Privacy policy text"
  }
}

// Configuration
{
  "lockedKeys": ["system/component"],
  "preservedKeys": ["legal/privacy"]
}

// Generated target file
{
  "welcome": "Bienvenido",
  "system": {
    "component": "Lingo.dev Engine"
  },
  "legal": {
    "privacy": "Privacy policy text"
  }
}

legal/privacy를 스페인어로 수동 번역한 후, 후속 실행에서도 수동 번역이 유지됩니다. system/component 키는 타겟 파일 콘텐츠와 관계없이 항상 영어로 유지됩니다.