Skip to main content

i18n Skills

i18n 문자열 점검 및 래핑용 AI 명령

문제

코드베이스의 컴포넌트, 템플릿, 뷰 곳곳에 하드코딩된 문자열 500개가 흩어져 있어요. 직접 래핑하려면 지루한 찾기와 바꾸기 작업에 며칠이 걸려요. 래핑을 마친 뒤에도 독일어에서 깨지는 분할 문장, 아랍어에서 실패하는 복수형 로직, 로케일 파일을 부풀리는 참조되지 않는 키를 놓칠 수 있어요.

직접 i18n 래핑을 하면 오류가 생기기 쉬워요. 개발자가 분할 문장을 놓치고, 삼항 연산자로 복수형을 깨뜨리고, 놓치기 쉬운 곳에 하드코딩 문자열을 남길 수 있어요. 이런 버그는 번역 후에야 드러나며 그때 수정하면 비용이 10배 더 들어요.

해결책

AI 슬래시 명령 두 개로 전체 i18n 워크플로를 처리해요. 먼저 /i18n-review를 실행해 코드를 읽기 전용으로 점검한 뒤 /i18n-wrap을 실행해 모든 문제를 자동 수정하세요. 두 명령 모두 프레임워크를 감지하고 로케일 파일 형식을 이해하며 커밋 전에 변경 사항을 검증해요.

/i18n-review

분할 문장, 잘못된 복수형 처리, 래핑하지 않은 문자열, 사용하지 않는 키를 찾는 읽기 전용 점검이에요. 코드를 절대 수정하지 않아요.

/i18n-wrap

하드코딩된 문자열을 올바른 번역 함수로 자동 래핑하고, 의미 기반 키를 생성하고, 로케일 파일을 업데이트하고, 빌드를 검증해요.

/i18n-review 명령

review 명령은 코드베이스를 읽기 전용으로 점검해요. 모든 파일에서 i18n 문제를 검사하고 정확한 파일 위치와 수정 제안이 포함된 우선순위 보고서를 생성해요. 코드는 절대 수정하지 않아요.

Terminal
/i18n-review src/
/i18n-review src/ --framework=next-intl

검사 항목

  • 분할 문장: 다른 언어에서 어순을 깨뜨리는 연결된 t() 호출
  • 과도한 래핑: 기술 문자열, CSS 클래스, URL, 열거형 값을 t()로 잘못 래핑
  • 래핑 누락: 버튼 레이블, 제목, 오류 메시지처럼 표시되는 UI 문자열이 하드코딩된 상태
  • 복수형 문제: 올바른 ICU 복수형 구문 대신 삼항 연산자 또는 === 1 검사 사용
  • 사용하지 않는 키: 로케일 파일에 정의했지만 코드에서 참조하지 않는 번역 키
  • 하드코딩된 형식 값: Intl 포매터를 사용하지 않는 날짜, 통화, 숫자
review 명령은 철저히 읽기 전용으로 작동해요. 의도하지 않은 변경 걱정 없이 개발 중이나 CI/CD 파이프라인에서 원하는 만큼 실행할 수 있어요.

/i18n-wrap 명령

wrap 명령은 하드코딩된 문자열을 프레임워크에 맞는 번역 함수로 자동 래핑해요. i18n 라이브러리를 감지하고, 컴포넌트나 기능별로 의미 기반 키를 생성하고, 로케일 파일을 업데이트하고, 빌드가 계속 통과하는지 검증해요.

Terminal
/i18n-wrap src/components/
/i18n-wrap src/ --framework=react-i18next

실행 작업

  • 프레임워크 감지: i18n 라이브러리와 번역 함수 (t, $t, $_, gettext 등) 식별
  • 의미 기반 키 생성: 일반 레이블 대신 nav.signIn, errors.notFound처럼 의미가 분명한 키 생성
  • 로케일 파일 업데이트: 원문 로케일 파일에 올바른 형식 (JSON, YAML, PO 등)으로 새 키 추가
  • 빌드 검증: 래핑 후 빌드, 린트, 테스트 명령을 실행해 회귀 감지
wrap 명령은 빌드와 테스트 모음을 실행해 모든 변경을 검증해요. 문제가 발생하면 자동으로 되돌려요.

지원 프레임워크

두 명령 모두 프로젝트 종속성에서 프레임워크를 자동으로 감지해요. --framework 플래그로 명시할 수도 있어요. 지원하는 10개 프레임워크와 각 번역 함수 및 복수형 형식을 확인하세요.

프레임워크번역 함수복수형 형식
react-i18nextt()key_one / key_other
next-intlt()ICU {count, plural, ...}
vue-i18n$t()Pipe syntax | singular | plural
angular i18n$localizeICU {count, plural, ...}
svelte-i18n$_()ICU {count, plural, ...}
flutter intlS.of(context)Intl.plural()
djangogettext / _()ngettext()
rails i18nt()count key
laravel__() / @langtrans_choice()
swiftNSLocalizedString.stringsdict

설치

명령 파일을 .claude/commands/ 디렉터리에 복사하세요. 이것으로 끝이에요. 종속성이나 설정이 필요 없어요. 모든 AI 코딩 어시스턴트가 실행할 수 있는 일반 Markdown 파일이에요.

Terminal
mkdir -p .claude/commands
cp commands/i18n-review.md .claude/commands/
cp commands/i18n-wrap.md .claude/commands/
표준 슬래시 명령 파일이에요. Claude Code에서는 별도 설정 없이 작동하며 맞춤 명령을 지원하는 다른 AI 코딩 어시스턴트에도 적용할 수 있어요.

사용 예시

React 프로젝트

react-i18next를 사용하는 React 앱의 문제를 점검한 뒤 하드코딩된 모든 문자열을 래핑해요. 명령이 package.json에서 react-i18next를 감지하고 올바른 t() 함수와 key_one/key_other 복수형 형식을 사용해요.

React Project
# 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.json

Django 프로젝트

Django 템플릿과 뷰에서 i18n 문제를 점검한 뒤 gettext로 문자열을 래핑해요. 명령이 settings.py에서 Django를 감지하고 단순 문자열에는 _(), 복수형에는 ngettext()를 사용해요.

Django Project
# 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

또는 클릭하여 파일 선택

대상 언어

가입 불필요즉시 견적

자주 묻는 질문