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

로컬라이제이션

  • 개요
  • 번역 API
  • 웹 앱 로컬라이제이션
  • 모바일 앱 로컬라이제이션
  • String Catalogs로 iOS 로컬라이제이션
  • strings.xml로 Android 로컬라이제이션
  • 이메일 로컬라이제이션
  • 정적 콘텐츠(예: .md, .json)
  • Markdoc으로 Next.js 사용하기
  • Rails + i18n

워크플로

  • MCP로 엔진 설정하기
  • Jira 트리아지
  • CI/CD

CI/CD 로컬라이제이션 워크플로

Lingo.dev는 CI/CD에서 로컬라이제이션을 자동으로 실행합니다. 방법은 두 가지입니다. 서버 사이드에서 push와 pull request에 반응하는 GitHub App을 쓰거나, 자체 파이프라인 안에서 CLI를 실행하는 방식입니다. 두 방식 모두 변경이 있을 때마다 번역을 동기화하고, 실제로 바뀐 문자열만 처리하므로 프로젝트 규모가 커져도 로컬라이제이션을 빠르고 비용 효율적으로 유지할 수 있습니다.

GitHub를 쓰고 있다면 App으로 시작하세요

GitHub에서는 GitHub App을 사용하는 것이 가장 좋습니다. 한 번만 설치해 두면 runner도, CI secret도, 관리할 lockfile도 없이 모든 push와 pull request마다 로컬라이제이션이 자동으로 실행됩니다. GitHub를 사용하지 않거나, 번역을 다른 CI 단계와 함께 돌리고 싶다면 자체 파이프라인에서 CLI를 실행하면 됩니다.

옵션 1: GitHub App(권장)#

GitHub App은 지속적 로컬라이제이션을 가장 간단하게 운영하는 방법입니다. 저장소를 감시하며 서버 사이드에서 번역을 수행하므로, 파이프라인에 따로 설치할 것도 없고 CI secret으로 보관할 API 키도 필요하지 않습니다.

설정은 한 번이면 끝입니다:

  1. 저장소에 Lingo.dev GitHub App을 설치합니다.
  2. .lingo/config.json를 커밋하세요. 여기에는 orgId, engineId, 소스 로캘, 대상 로캘, 그리고 번역할 파일이 들어갑니다. 먼저 로컬에서 lingo init와 lingo link를 실행해 파일을 생성한 뒤, 결과를 커밋하면 됩니다.
  3. Push합니다.

그다음부터는 App이 두 가지 워크플로 방식을 모두 처리합니다:

  • 기본 브랜치로 push하면 번역을 해당 브랜치에 다시 커밋합니다.
  • pull request에서는 번역을 해당 PR에 추가해 머지 전에 검토할 수 있게 해줍니다.

App은 번역 상태를 서버 사이드에서 추적하므로 저장소 안에서 충돌할 lockfile이 없고, 별도의 검증 단계를 연결할 필요도 없습니다. 소스와 대상 로캘을 항상 동기화된 상태로 유지해 줍니다.

옵션 2: 자체 파이프라인에서 CLI 실행#

GitHub를 사용하지 않거나, 빌드와 테스트 작업 옆에 로컬라이제이션을 명시적인 단계로 두고 싶다면 CLI를 직접 실행하세요. Node.js 22 이상을 지원하는 모든 CI 환경에서 사용할 수 있습니다. GitHub Actions, GitLab CI, Bitbucket Pipelines는 물론 그 외 환경에서도 동작합니다.

흐름은 언제나 같습니다:

  1. @lingo.dev/cli를 설치합니다.
  2. LINGO_API_KEY 환경 변수를 통해 API 키로 인증합니다.
  3. 변경된 문자열을 번역하려면 lingo push를 실행합니다.
  4. 결과를 커밋하거나, 작업에서 pull request를 엽니다.

Lingo.dev API 키는 CI secret으로 저장하고 LINGO_API_KEY로 노출하세요. 커밋된 .lingo/config.json는 CLI에 무엇을 번역할지 알려 주고, 커밋된 .lingo/lock.json(lingo push로 다시 생성됨)는 상태를 추적해 변경된 문자열만 처리하도록 합니다.

최소 GitHub Actions 예제#

이 워크플로는 CLI를 설치하고, main에 push가 발생할 때마다 번역을 실행한 뒤, 결과를 다시 커밋합니다:

yaml
name: Localize
on:
  push:
    branches: [main]
permissions:
  contents: write
jobs:
  localize:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
      - run: npm install -g @lingo.dev/cli
      - run: lingo push
        env:
          LINGO_API_KEY: ${{ secrets.LINGO_API_KEY }}
      - name: Commit translations
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git add .
          git commit -m "chore: update translations" || echo "No changes"
          git push

같은 두 줄, 즉 npm install -g @lingo.dev/cli 다음 lingo push를 GitLab CI의 script: 블록이나 Bitbucket Pipelines 단계에도 그대로 넣을 수 있습니다. 이 플랫폼에서는 LINGO_API_KEY를 마스킹/보호된 CI 변수로 설정하세요.

첫 실행과 새 로캘 추가

CI에서 처음 실행할 때나 대상 로캘을 새로 추가할 때는 lingo push --backfill-missing를 사용해 기존의 모든 문자열이 새 로캘로 번역되도록 하세요. 그 이후에는 일반 lingo push만 실행하면 변경분만 번역됩니다.

직접 커밋할까, pull request로 보낼까?#

어느 방식을 선택하든 번역 결과를 반영하는 방식은 직접 정할 수 있습니다:

방식작동 방식추천 대상트레이드오프
직접 커밋변경된 브랜치에 번역이 바로 커밋됩니다소규모 팀, 마찰 없는 운영번역 검토 단계가 없음
Pull request번역이 PR에 반영되어 머지 전에 검토할 수 있습니다번역을 검토하는 팀PR 승인 필요

GitHub App은 이 두 가지를 자동으로 모두 제공합니다. 기본 브랜치로 push되면 번역을 커밋하고, 열려 있는 PR에는 번역을 추가합니다. 자체 파이프라인에서는 선택이 여러분 몫입니다. 위 예시처럼 결과를 커밋해도 되고, 브랜치에 push하는 대신 작업이 pull request를 열도록 해도 됩니다.

배포 전 번역 검증#

번역되지 않은 콘텐츠가 배포되지 않게 하려면, 배포 단계 전에 lingo check를 게이트로 추가하세요. 아직 번역이 필요한 문자열이 하나라도 있으면 0이 아닌 상태 코드로 종료합니다:

yaml
- name: Verify translations
  run: lingo check

GitHub App은 로캘을 지속적으로 동기화해 주므로, 별도의 검증 단계는 주로 CLI를 직접 실행할 때 유용합니다.

모노레포#

각 패키지마다 자체 .lingo/config.json가 있는 모노레포라면 glob을 전달해 특정 패키지로 실행 범위를 좁히거나, 해당 패키지 디렉터리에서 CLI를 실행할 수 있습니다:

bash
lingo push "apps/web/**"

다음 단계#

GitHub App
GitHub에서 관리형 지속 로컬라이제이션 — 러너, 시크릿, lockfile 없이
CLI 개요
Lingo.dev CLI를 설치하고 인증한 뒤 실행하는 방법
빠른 시작
몇 분 만에 첫 push까지 진행하는 방법
구성
.lingo/config.json에 들어가는 모든 항목
실행 상태
lockfile이 번역 완료 상태를 추적하는 방식

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

Max PrilutskiyMax Prilutskiy·업데이트됨 24일 전·3 min read