|
문서
데모 예약플랫폼
플랫폼MCPCLIAPI
워크플로
가이드변경 로그

환영합니다

  • 개요
  • 인증
  • 오류 및 상태 코드
  • Webhook 서명

로컬라이제이션

  • 개요
  • 작업 생성
  • 번역 제외 키 잠그기
  • 작업 그룹 추적하기
  • 단일 작업 조회
  • 작업 목록 조회
  • Webhook 전송
  • 실시간 진행 상황(WebSocket)

파이프라인

  • 개요
  • 로컬라이제이션 전 AI 편집
  • 사람 검토
  • AI 평가(사후 편집)
  • 자연스러운 카피로 다듬기
  • 역번역 검사
  • 파이프라인 설정
  • 파이프라인 실행 추적하기

프로비저닝

  • 개요
  • 프로비저닝 작업 생성
  • 소스 유형
  • AI가 추출하는 항목
  • Webhook 전송
  • 실시간 진행 상황(WebSocket)

동기식

  • Localize
  • Recognize

엔진 관리

  • 엔진 제안

로컬라이제이션 작업 생성

로컬라이제이션 작업 그룹을 생성하세요. 요청 한 번이면 지정한 모든 대상 로캘로 콘텐츠를 확장할 수 있습니다.

문자열 페이로드와 로캘 목록은 있는데, 각 로캘로 나눠 보내는 로직까지 직접 구현하고 싶지는 않다면 POST /jobs/localization가 해결해 줍니다. 전체 페이로드와 최대 100개의 대상 로캘을 한 번에 받아, 그룹 ID와 로캘별 작업 하나씩이 포함된 202 Accepted를 즉시 반환합니다. 요청은 한 번, 로캘은 전체. 작업 생성은 플랫폼이 맡고, 각 작업은 서로 독립적으로 처리됩니다.

text
POST /jobs/localization

이 페이지에서는 생성 호출의 매개변수, 요청 구조, 202 응답, 그리고 재시도해도 안전하게 호출하는 방법을 다룹니다. 비동기 로컬라이제이션이 처음이라면 먼저 비동기 로컬라이제이션 API 개요에서 전체 흐름을 잡아보세요. 그룹이 생성된 뒤 각 로캘 상태가 무엇을 뜻하는지는 작업 그룹 추적에서 확인할 수 있습니다.

인증

X-API-Key 헤더에 API 키를 넣어 보내세요. 키는 조직 범위로 적용되며, 해당 조직의 모든 엔진에 접근할 수 있습니다. 자세한 내용은 인증에서 확인하세요.

매개변수#

sourceLocale, targetLocales, data는 필수입니다. 그 외 항목은 동작을 세부 조정하거나, 같은 호출을 반복해도 더 안전하게 만들어 줍니다.

매개변수유형설명
sourceLocalestringBCP-47 소스 로캘(예: en).
targetLocalesstring[]BCP-47 대상 로캘(예: ["de", "fr", "ja"]). 요청당 1~100개까지 가능합니다. 로캘마다 작업 하나가 생성됩니다.
dataobject번역할 키-값 콘텐츠입니다. 중첩 객체와 배열을 어떤 깊이에서도 사용할 수 있습니다.
contextstring (선택 사항)제품 화면, 대상 사용자, 목적처럼 이 번역 페이로드 전반에 적용되는 넓은 맥락입니다. 요청으로 생성되는 모든 작업에 적용됩니다.
hintsobject (선택 사항)짧거나 반복 사용되는 문자열의 의미를 분명히 하기 위한 키별 컨텍스트입니다. breadcrumb 문자열 배열 형태로 전달합니다.
callbackUrlstring (선택 사항)이 그룹에 사용할 HTTPS 웹훅 URL입니다. 조직 기본값을 덮어씁니다. HTTP는 허용되지 않습니다.
idempotencyKeystring (선택 사항)클라이언트에서 생성한 키입니다. 같은 키로 동일한 요청을 두 번 보내면 새 그룹 대신 기존 그룹이 반환됩니다. 엔진별로 범위가 적용됩니다.
engineIdstring (선택 사항)작업 실행에 사용할 로컬라이제이션 엔진입니다. 생략하면 조직의 기본 엔진이 사용됩니다.
pipelineConfigobject (선택 사항)요청별 pipeline 재정의입니다. 생략한 단계는 엔진 설정을 그대로 상속합니다.
lockedKeysstring[] (선택 사항)값을 번역에서 제외하고 outputData에 원문 그대로 다시 병합할 키 또는 glob 패턴입니다. 최대 100개까지 지정할 수 있습니다. 번역하지 않을 키 잠그기를 참고하세요.

요청#

data 필드는 단순한 키-값 쌍은 물론, 객체와 배열이 어떤 깊이로 중첩된 구조도 받을 수 있습니다. 엔진은 모든 문자열 값을 번역하고, 문자열이 아닌 값(숫자, 불리언, null)은 그대로 유지한 채, 보낸 것과 정확히 같은 형태로 반환합니다. 즉, 앱에서 이미 저장하고 있는 객체를 그대로 넘기면 됩니다. 평탄화도, 구조 변경도 필요 없습니다.

json
{
  "sourceLocale": "en",
  "targetLocales": ["de", "fr", "ja"],
  "data": {
    "lesson_title": "Introduction to Machine Learning",
    "lesson_summary": "This lesson covers the fundamentals of ML, including supervised and unsupervised learning."
  },
  "callbackUrl": "https://your-app.com/webhooks/translations",
  "idempotencyKey": "course_101-v3"
}

HTTPS 필수

callbackUrl는 반드시 HTTPS여야 합니다. HTTP URL은 400 오류와 함께 거부됩니다.

이 중첩 페이로드에는 번역해야 하는 텍스트와, 절대 바뀌면 안 되는 값(id, course_101, difficulty)이 함께 들어 있습니다. 문자열은 번역되고, 나머지는 타입 그대로 보존됩니다. 문자열도 제외해야 한다면(슬러그, 에셋 URL, enum 코드 등) lockedKeys에 지정하세요. 그러면 각 로캘 출력에 원문 그대로 다시 병합됩니다.

응답 (202 Accepted)#

이 호출은 즉시 반환됩니다. 번역이 끝날 때까지 기다리지 않고, 그룹 ID와 로캘별 작업 ID를 먼저 돌려준 뒤 각 작업은 플랫폼이 백그라운드에서 독립적으로 처리합니다.

json
{
  "groupId": "ljg_A1b2C3d4E5f6G7h8",
  "status": "pending",
  "jobs": [
    { "id": "ljb_A1b2C3d4E5f6G7h8", "targetLocale": "de", "status": "queued" },
    { "id": "ljb_B2c3D4e5F6g7H8i9", "targetLocale": "fr", "status": "queued" },
    { "id": "ljb_C3d4E5f6G7h8I9j0", "targetLocale": "ja", "status": "queued" }
  ],
  "createdAt": "2026-03-16T10:30:00.000Z"
}
필드설명
groupId전체 그룹을 가리키는 ljg_ 접두사 식별자입니다. 이 값은 꼭 저장해 두세요. 추적과 실시간 진행 상태 확인에 사용하는 기준 ID입니다.
status생성 시점의 그룹 상태이며, 일반적으로 pending입니다.
jobs대상 로캘마다 항목 하나씩 들어 있습니다: id(ljb_ 접두사), targetLocale, 그리고 작업의 status.
createdAtISO 8601 타임스탬프입니다.

로캘 3개를 보내면 작업 3개가 돌아오고, 각 작업은 모두 queued 상태로 실행 준비가 됩니다. 이후 상태가 어떻게 바뀌는지, 또 한 로캘만 실패하고 나머지는 정상적으로 진행될 때 어떻게 해석해야 하는지는 작업 그룹 추적에서 다룹니다.

예제#

같은 요청을 Node와 Python으로 보여줍니다. 둘 다 POST 한 번만 보내고, 202에서 그룹 ID와 작업 수를 바로 읽어옵니다.

javascript
const response = await fetch("https://api.lingo.dev/jobs/localization", {
  method: "POST",
  headers: {
    "X-API-Key": process.env.LINGO_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    sourceLocale: "en",
    targetLocales: ["de", "fr", "ja"],
    data: {
      title: "Introduction to Machine Learning",
      steps: [
        { heading: "What is ML?", body: "Machine learning is a subset of AI." },
        { heading: "Supervised Learning", body: "Training with labeled data." },
      ],
    },
    callbackUrl: "https://your-app.com/webhooks/translations",
  }),
});

const { groupId, jobs } = await response.json();
// 202 Accepted – the call returns without waiting for translation.
console.log(groupId);     // "ljg_A1b2C3d4E5f6G7h8"
console.log(jobs.length); // 3 – one queued job per target locale

재시도해도 안전하게 호출하기#

이 요청을 호출하기 가장 자연스러운 지점은 save hook이나 이벤트 핸들러입니다. 공교롭게도 바로 이런 코드가 재시도나 중복 이벤트 때문에 두 번 실행되기 쉽습니다. 보호 장치가 없다면 호출 두 번은 작업 그룹 두 개가 되고, 같은 콘텐츠가 번역 대기열에 두 번 들어갑니다.

idempotencyKey를 함께 보내면 그 위험을 없앨 수 있습니다. 같은 키로 동일한 요청을 두 번 보내면 플랫폼은 새 그룹을 만들지 않고 기존 그룹을 반환합니다. 즉, 두 번째 작업 세트는 생기지 않습니다. 키는 엔진별로 범위가 적용되므로, 같은 키라도 다른 엔진으로 보내면 다른 그룹으로 처리됩니다.

의미 있는 키를 고르세요

좋은 키는 콘텐츠 식별자와 버전을 함께 담습니다: {contentId}-v{contentVersion}. 같은 버전의 같은 콘텐츠는 항상 같은 그룹으로 매핑되므로, 재시도는 자동으로 no-op가 됩니다. 콘텐츠가 바뀌면 버전만 올리면 새 그룹이 생성됩니다.

javascript
const key = `${content.id}-v${content.version}`;

async function submit() {
  const response = await fetch("https://api.lingo.dev/jobs/localization", {
    method: "POST",
    headers: {
      "X-API-Key": process.env.LINGO_API_KEY,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      sourceLocale: "en",
      targetLocales: ["de", "fr", "ja", "ko", "pt-BR"],
      data: { title: content.title, steps: content.steps },
      callbackUrl: "https://your-app.com/webhooks/translations",
      idempotencyKey: key,
    }),
  });
  return (await response.json()).groupId;
}

const first = await submit();
const again = await submit(); // same key – duplicate submission
console.log(first === again); // true – same group returned, no second set of jobs

POST 한 번이면 페이로드를 모든 로캘로 확장할 수 있고, 재시도가 걸릴 수 있는 같은 코드 경로에서도 안심하고 호출할 수 있습니다. groupId는 꼭 저장해 두세요. 추적과 실시간 진행 상태 확인으로 이어지는 기준 값입니다.

다음 단계#

번역하지 않을 키 잠그기
ID, 슬러그, 에셋 URL, enum 코드를 키와 glob 패턴으로 번역 대상에서 제외하세요.
파이프라인 구성하기
요청마다 pipeline 단계를 재정의하거나, 모든 작업이 상속받는 엔진 기본값을 설정하세요.
작업 그룹 추적
그룹 상태와 로캘별 상태를 확인하고, 한 로캘만 실패하고 나머지는 정상적으로 진행되는 상황까지 처리하세요.

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

Max PrilutskiyMax Prilutskiy·업데이트됨 10일 전·5 min read