Airflow 3.1 릴리스부터 드디어 한국어(ko)가 공식 지원되었습니다.
이제 누구나 쉽게 Airflow UI를 한국어로 사용하고 이에 기여할 수 있게 되었습니다.
기존에 공유드렸던 Apache Airflow i18n 한국어 번역 기여 참여 가이드 라는 글이 있지만, 최근 아래의 PR이 병합되면서 번역 기여 방식이 일부 변경 되었습니다.
main ← potiuk:move-check-translation-completeness-to-breeze
열림 06:17PM - 24 Nov 25 UTC
The script had no good support for auto-complete and the like and since everyone… now use breeze for some tasks, we also should have it as a regular breeze command.
Also the sorting order implemented by eslint jsonc natural sorting was quite a bit different from what you'd expect:
* it sorts character-by-character case-insensitive
* it uses original sorting as tie-breker in case of characters case-insensitve order
* handles numbers natuarlly (2<10)
* treats _ as end of word and sort it before everything else
* similarly with end of word - shorter words are before longer if they have the same prefix
This PR updates the command and also fixes sorting order and add unit tests to test vital parts of the translation script.
---
**^ Add meaningful description above**
Read the **[Pull Request Guidelines](https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#pull-request-guidelines)** for more information.
In case of fundamental code changes, an Airflow Improvement Proposal ([AIP](https://cwiki.apache.org/confluence/display/AIRFLOW/Airflow+Improvement+Proposals)) is needed.
In case of a new dependency, check compliance with the [ASF 3rd Party License Policy](https://www.apache.org/legal/resolved.html#category-x).
In case of backwards incompatible changes please leave a note in a newsfragment file, named `{pr_number}.significant.rst` or `{issue_number}.significant.rst`, in [airflow-core/newsfragments](https://github.com/apache/airflow/tree/main/airflow-core/newsfragments).
그래서 변경된 내용을 반영하여 업데이트 버전의 한국어 번역 기여 가이드 를 공유드리는 온라인 워크샵을 준비했습니다!
슬라이드:
우리가 기여한 것이 어떻게 보여지나요?
PR이 머지되면 아래 화면처럼 번역이 Airflow UI에 바로 적용됩니다.
i18n 프로젝트가 뭔가요?
Airflow의 i18n(Internationalization) 프로젝트는 Airflow UI를 여러 언어로 번역할 수 있도록 하는 국제화 작업입니다.
단순 번역이 아니라, 아래 가치를 중심으로 운영됩니다:
사용자 경험 향상: 모국어 UI 제공으로 접근성 향상
글로벌 커뮤니티 활성화: 다양한 언어권 기여자들의 참여 유도
번역 품질 유지: 일관된 용어와 구조를 유지해 지속 가능성 확보
현재 Airflow는 영어를 기본 언어(default locale)로 사용하며, 각 언어별 JSON 파일을 통해 다국어를 지원하고 있습니다.
한국어도 공식적으로 지원되는 언어 중 하나이며, 지속적인 기여가 필요한 상태 입니다.
한국어 번역 기여 참여 방법
Airflow의 i18n은 단순히 JSON을 수정하는 작업이 아니라, 정해진 정책과 툴을 활용하는 정식 기여 프로세스를 따릅니다.
아래 단계를 따라하면 누구나 쉽게 첫 PR을 만들 수 있습니다.
Airflow 레포지토리 포크
브라우저에서 Apache Airflow 레포지토리 로 이동
우측 상단 Fork 버튼 클릭
내 GitHub 계정으로 복사됩니다.
복사된 저장소 URL을 확인
예: https://github.com/<내 계정>/airflow.git
로컬에 클론
git clone https://github.com/<내 계정>/airflow.git
cd airflow
<내 계정> 부분을 자신의 GitHub 사용자명으로 바꾸세요.
개발 환경 준비
개발 환경 준비가 필요하다면 Breeze를 사용하는 것을 추천합니다:
uv pip install -e ./dev/breeze
작업용 브랜치 생성
git checkout -b i18n/workshop
브랜치 이름은 작업 내용과 관련 있게 작성하시면됩니다.
번역 파일 구조
번역을 하실 때 참고할 영어 원본 파일은:
airflow-core/src/airflow/ui/public/i18n/locales/en 폴더 안에 있어요.
한국어 번역 파일은:
airflow-core/src/airflow/ui/public/i18n/locales/ko 폴더 안에 있습니다.
예를 들어, columns 관련 JSON은 이렇게 되어 있습니다:
{
"columns": {
"description": "설명",
"key": "키",
"name": "이름",
"value": "값"
}
}
새로운 UI 문자열이 추가되면 TODO: translate로 표시되어, 번역이 필요한 항목을 쉽게 찾을 수 있습니다.
"nothingFound": {
"description": "TODO: translate: Connections defined via environment variables or secrets managers are not listed here.",
"documentationLink": "TODO: translate: Learn more in the Airflow documentation.",
"learnMore": "TODO: translate: These are resolved at runtime and are not visible in the UI.",
"title": "연결을 찾을 수 없습니다."
}
번역 기여 툴 사용법 Airflow Breeze
번역 완료 여부 확인
breeze ui check-translation-completeness --language ko
Missing : 누락된 번역
Extra : 불필요한 번역
TODOs : TODO로 추가되었지만 아직 완료되지 않은 번역
누락 항목 자동 추가
breeze ui check-translation-completeness --language ko --add-missing
TODO: translate 형식으로 추가됩니다.
불필요한 번역 제거
breeze ui check-translation-completeness --language ko --remove-extra
번역 내용 확인
breeze --backend postgres start-airflow --dev-mode
브라우저에서 localhost:28080 접속 후 admin/admin 로그인으로 확인 가능합니다.
Breeze 환경에서 UI를 띄워 번역이 실제로 어떻게 반영되는지 확인하세요.
{variable} 또는 %s 같은 형식 요소는 그대로 유지 해야 합니다.
영어 직역보다는 자연스럽고 사용자 친화적인 표현 을 추천합니다.
PR 작성 방법
한 PR에 너무 많은 항목을 넣기보다, 관련 항목끼리 묶어 올리세요.
기존 TODO: 항목 번역을 우선합니다.
PR 설명에는 번역한 항목을 간략하게 명시하세요.
기존 번역 예시를 참고하여 용어 일관성 을 유지합니다.
PR 제목 예시
i18n(Ko): add missing translations (Nov 19)
예시 PR
main ← choo121600:i18n/workshop
열림 08:11AM - 26 Nov 25 UTC
**This PR will be used as an example for the Airflow Korean Translation Workshop… on December 4th(maybe?).
Please do not merge this PR. o/**
Slide: https://docs.google.com/presentation/d/1kUbOIA1zkkIK9mQuH6O9qKLsluHXsIYrkUk4l7Ju_gQ/edit?usp=sharing
---
(ko) 아래의 이미지처럼 `breeze ui check-translation-completeness --language ko` 명령어로 출력된 내용을 첨부해주세요. 이를 통해서 번역이 완료되었는지 수치로 확인할 수 있습니다.
(en) Please attach the output of the `breeze ui check-translation-completeness --language ko` command, as shown in the example image below.
This helps us verify translation completeness numerically.
<img width="937" height="998" alt="image" src="https://github.com/user-attachments/assets/431b6736-aed8-4a42-8d86-2092eac8e239" />
(ko) 아래의 예시처럼 가능하다면, ui에 어떻게 표시 되는지 스크린 샷으로 첨부해주시면 검토에 도움이 됩니다 ;)
(en) If possible, it would also be very helpful if you could include screenshots showing how the translated UI appears — similar to the examples below.
## Before
<img width="2168" height="1397" alt="image" src="https://github.com/user-attachments/assets/db57c39b-84d4-4346-bc4b-6155b174c98b" />
## After
<img width="2168" height="1397" alt="image" src="https://github.com/user-attachments/assets/f51d3f4e-e6a0-437f-b175-786930a85a5b" />
(ko) 마지막으로, 아래 처럼 한국어 번역 검토 팀을 cc 해주시면 빠른 검토에 도움이 됩니다.
(en) Also, please cc the Korean translation review team as shown below to help ensure a quick review:
Please review this translation.
/cc @kgw7401 @onestn
---
**^ Add meaningful description above**
Read the **[Pull Request Guidelines](https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#pull-request-guidelines)** for more information.
In case of fundamental code changes, an Airflow Improvement Proposal ([AIP](https://cwiki.apache.org/confluence/display/AIRFLOW/Airflow+Improvement+Proposals)) is needed.
In case of a new dependency, check compliance with the [ASF 3rd Party License Policy](https://www.apache.org/legal/resolved.html#category-x).
In case of backwards incompatible changes please leave a note in a newsfragment file, named `{pr_number}.significant.rst` or `{issue_number}.significant.rst`, in [airflow-core/newsfragments](https://github.com/apache/airflow/tree/main/airflow-core/newsfragments).
PR 승인 절차
Airflow i18n 정책에 따라 모든 번역 PR은 아래 조건을 충족해야 합니다:
Translation Owner 가 언어적 측면 승인
Code Owner 또는 커미터가 기술적 측면(포맷, 린트 등) 확인 후 병합
한국어 번역의 경우, 한국 사용자 모임에서 품질 검토를 담당하고 있습니다.
검토 담당자: @choo121600 , @kgw7401 , @onestn
PR 작성 시 이분들을 태그하면 리뷰가 빠릅니다.
마치며
번역 기여는 Airflow의 기여 방식과 문화를 경험 할 수 있는 가장 좋은 기회입니다.
한국어 번역에 어려움이 있으면, 포럼 질의응답 채널 이나 이 글의 댓글을 통해 질문해주세요.