i18n Skills
i18n 문자열 점검 및 래핑용 AI 명령
문제
코드베이스의 컴포넌트, 템플릿, 뷰 곳곳에 하드코딩된 문자열 500개가 흩어져 있어요. 직접 래핑하려면 지루한 찾기와 바꾸기 작업에 며칠이 걸려요. 래핑을 마친 뒤에도 독일어에서 깨지는 분할 문장, 아랍어에서 실패하는 복수형 로직, 로케일 파일을 부풀리는 참조되지 않는 키를 놓칠 수 있어요.
해결책
AI 슬래시 명령 두 개로 전체 i18n 워크플로를 처리해요. 먼저 /i18n-review를 실행해 코드를 읽기 전용으로 점검한 뒤 /i18n-wrap을 실행해 모든 문제를 자동 수정하세요. 두 명령 모두 프레임워크를 감지하고 로케일 파일 형식을 이해하며 커밋 전에 변경 사항을 검증해요.
/i18n-review
분할 문장, 잘못된 복수형 처리, 래핑하지 않은 문자열, 사용하지 않는 키를 찾는 읽기 전용 점검이에요. 코드를 절대 수정하지 않아요.
/i18n-wrap
하드코딩된 문자열을 올바른 번역 함수로 자동 래핑하고, 의미 기반 키를 생성하고, 로케일 파일을 업데이트하고, 빌드를 검증해요.
/i18n-review 명령
review 명령은 코드베이스를 읽기 전용으로 점검해요. 모든 파일에서 i18n 문제를 검사하고 정확한 파일 위치와 수정 제안이 포함된 우선순위 보고서를 생성해요. 코드는 절대 수정하지 않아요.
/i18n-review src/
/i18n-review src/ --framework=next-intl검사 항목
- 분할 문장: 다른 언어에서 어순을 깨뜨리는 연결된 t() 호출
- 과도한 래핑: 기술 문자열, CSS 클래스, URL, 열거형 값을 t()로 잘못 래핑
- 래핑 누락: 버튼 레이블, 제목, 오류 메시지처럼 표시되는 UI 문자열이 하드코딩된 상태
- 복수형 문제: 올바른 ICU 복수형 구문 대신 삼항 연산자 또는 === 1 검사 사용
- 사용하지 않는 키: 로케일 파일에 정의했지만 코드에서 참조하지 않는 번역 키
- 하드코딩된 형식 값: Intl 포매터를 사용하지 않는 날짜, 통화, 숫자
/i18n-wrap 명령
wrap 명령은 하드코딩된 문자열을 프레임워크에 맞는 번역 함수로 자동 래핑해요. i18n 라이브러리를 감지하고, 컴포넌트나 기능별로 의미 기반 키를 생성하고, 로케일 파일을 업데이트하고, 빌드가 계속 통과하는지 검증해요.
/i18n-wrap src/components/
/i18n-wrap src/ --framework=react-i18next실행 작업
- 프레임워크 감지: i18n 라이브러리와 번역 함수 (t, $t, $_, gettext 등) 식별
- 의미 기반 키 생성: 일반 레이블 대신 nav.signIn, errors.notFound처럼 의미가 분명한 키 생성
- 로케일 파일 업데이트: 원문 로케일 파일에 올바른 형식 (JSON, YAML, PO 등)으로 새 키 추가
- 빌드 검증: 래핑 후 빌드, 린트, 테스트 명령을 실행해 회귀 감지
지원 프레임워크
두 명령 모두 프로젝트 종속성에서 프레임워크를 자동으로 감지해요. --framework 플래그로 명시할 수도 있어요. 지원하는 10개 프레임워크와 각 번역 함수 및 복수형 형식을 확인하세요.
| 프레임워크 | 번역 함수 | 복수형 형식 |
|---|---|---|
| react-i18next | t() | key_one / key_other |
| next-intl | t() | ICU {count, plural, ...} |
| vue-i18n | $t() | Pipe syntax | singular | plural |
| angular i18n | $localize | ICU {count, plural, ...} |
| svelte-i18n | $_() | ICU {count, plural, ...} |
| flutter intl | S.of(context) | Intl.plural() |
| django | gettext / _() | ngettext() |
| rails i18n | t() | count key |
| laravel | __() / @lang | trans_choice() |
| swift | NSLocalizedString | .stringsdict |
설치
명령 파일을 .claude/commands/ 디렉터리에 복사하세요. 이것으로 끝이에요. 종속성이나 설정이 필요 없어요. 모든 AI 코딩 어시스턴트가 실행할 수 있는 일반 Markdown 파일이에요.
mkdir -p .claude/commands
cp commands/i18n-review.md .claude/commands/
cp commands/i18n-wrap.md .claude/commands/사용 예시
React 프로젝트
react-i18next를 사용하는 React 앱의 문제를 점검한 뒤 하드코딩된 모든 문자열을 래핑해요. 명령이 package.json에서 react-i18next를 감지하고 올바른 t() 함수와 key_one/key_other 복수형 형식을 사용해요.
# Review a React project for i18n issues
/i18n-review src/ --framework=react-i18next
# Wrap all hardcoded strings automatically
/i18n-wrap src/components/ --framework=react-i18next
# Result: t() calls inserted, keys added to en/translation.jsonDjango 프로젝트
Django 템플릿과 뷰에서 i18n 문제를 점검한 뒤 gettext로 문자열을 래핑해요. 명령이 settings.py에서 Django를 감지하고 단순 문자열에는 _(), 복수형에는 ngettext()를 사용해요.
# Review Django templates and views
/i18n-review myapp/ --framework=django
# Wrap hardcoded strings with gettext
/i18n-wrap myapp/templates/ --framework=django
# Result: _() calls inserted, .po file updated지금 i18n Agent 사용해 보기
번역 파일을 여기에 드롭
JSON, YAML, PO, XML, CSV, Markdown, Properties
또는 클릭하여 파일 선택
대상 언어