CI/CD 로컬라이제이션을 위한 고급 패턴을 소개합니다. 워크플로 선택부터 번역 완성도 확인, 병합 충돌 해결까지 다룹니다.
워크플로 선택하기#
대부분의 팀 운영 방식은 네 가지 워크플로 패턴으로 커버할 수 있습니다. 각 패턴마다 자동화 수준, 검토 부담, 브랜치 관리 측면에서 트레이드오프가 다릅니다.
| 워크플로 | 적합한 경우 | 트레이드오프 |
|---|---|---|
| main에 커밋 | 소규모 팀, 마찰 없는 업데이트 | 번역 검토 단계가 없음 |
| main에서 PR 생성 | 번역을 검토하고 싶은 팀 | PR을 수동으로 승인해야 함 |
| 기능 브랜치에 커밋 | 장기간 유지되는 기능 브랜치 | 번역 커밋이 브랜치 히스토리에 남음 |
| 기능 브랜치에서 PR 생성 | 기능별로 최대한 세밀하게 제어해야 하는 경우 | 기능마다 여러 PR을 관리해야 함 |
어떤 방식을 선택할지 확신이 없다면 "main에 커밋"부터 시작하세요. 가장 단순한 워크플로이며, 브랜치가 갈라지지 않기 때문에 병합 충돌도 원천적으로 막을 수 있습니다.
번역 완성도 확인하기#
--frozen 플래그는 새 번역을 생성하지 않고 모든 콘텐츠가 번역되었는지 확인합니다. 누락된 콘텐츠가 하나라도 있으면 0이 아닌 상태 코드로 종료합니다:
bash
npx lingo.dev@latest run --frozen번역되지 않은 콘텐츠가 배포되지 않도록 배포 게이트로 활용하세요.
yaml
name: Check translations
on: [push, pull_request]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npx lingo.dev@latest run --frozen병합 충돌 해결하기#
병합 충돌은 브랜치 간 i18n.lock 파일 내용이 달라질 때 발생합니다. 보통 서로 다른 브랜치에서 번역이 각각 업데이트될 때 이런 상황이 생깁니다.
예방#
번역에 기능 브랜치를 쓰는 대신 번역을 main에 직접 커밋하면 lockfile 충돌을 완전히 없앨 수 있습니다.
merge로 해결하기#
1
merge 시작하기
bash
git merge <branch-name>2
충돌한 lockfile 삭제하기
bash
rm i18n.lock3
merge 완료하기
bash
git add .
git merge --continue4
lockfile 다시 생성하기
bash
npx lingo.dev@latest lockfile --force이렇게 하면 새 번역을 트리거하지 않고 현재 소스 파일 상태를 기준으로 lockfile을 다시 생성합니다.
rebase로 해결하기#
rebase에서도 같은 방식으로 해결할 수 있습니다. 충돌이 날 때마다 i18n.lock을 삭제하고 rebase를 계속 진행한 뒤, 마지막에 lockfile을 다시 생성하세요:
bash
git rebase <branch-name>
# On each conflict: rm i18n.lock && git add . && git rebase --continue
npx lingo.dev@latest lockfile --force