Next.js i18n 설정 (nextjs-i18n-setup)
기존 Next.js App Router 프로젝트에 next-intl 을 최신 next/root-params , 동적 세그먼트 app/[locale]/ 및 Next.js 16+ (proxy.ts) / Next.js <=15 (middleware.ts) 를 사용하여 부트스트래핑하고 스캐폴딩합니다.
[!TIP] 보일러플레이트 및 템플릿: 파일 스캐폴딩 시 전체 드롭인 코드 템플릿은
references/templates.md를 참조하세요. 빠른 실행: 검증은 경량 서브에이전트(Model: 'flash')에 위임하세요.
1. 아키텍처 규칙 및 요구사항
- 메타데이터 계약:
docs/project.json에 다음이 포함되어 있는지 확인합니다:"dictionaries_dir": "messages", "dictionary_file_pattern": "[locale].json" - Next.js 버전 인터셉터:
- Next.js 16+:
proxy.ts(또는src/proxy.ts)를 사용합니다. 레거시middleware.ts를 마이그레이션하고 제거합니다. - Next.js <=15:
middleware.ts(또는src/middleware.ts)를 사용합니다.
- Next.js 16+:
- 최신 Root Params:
i18n/request.ts에서next/root-params(await rootParams.locale())를 사용합니다.requestLocale및setRequestLocale()은 더 이상 사용되지 않습니다. - 네비게이션:
i18n/navigation.ts에서Link,redirect,usePathname,useRouter를 내보냅니다 (순수 TypeScript, JSX 없음). - 정적 생성: 루트 레이아웃
app/[locale]/layout.tsx는 지원되는 모든 로케일에 대해{ locale }을 반환하는generateStaticParams()를 반드시 내보내야 합니다.
2. 설정 체크리스트
- 단계 0: 감사:
docs/project.json(supported_languages) 및package.json에서 Next.js 버전을 확인합니다. - 단계 1: 설치:
<pkg_mgr> add next-intl(pnpm add next-intl)을 실행합니다. - 단계 2: 설정 메타데이터:
docs/project.json에dictionaries_dir: "messages"가 있는지 확인합니다. - 단계 3: 라우팅:
defineRouting을 사용하여i18n/routing.ts를 생성합니다 (템플릿 참조). - 단계 4: 요청 핸들러:
next/root-params를 사용하여i18n/request.ts를 생성합니다 (템플릿 참조). - 단계 5: 네비게이션 헬퍼:
i18n/navigation.ts를 생성합니다 (템플릿 참조). - 단계 6: Next 플러그인:
next.config.ts를createNextIntlPlugin()으로 래핑합니다 (템플릿 참조). - 단계 7: 인터셉터: 에셋 필터링 매처와 함께
proxy.ts(Next 16+) 또는middleware.ts(Next <=15)를 생성합니다 (템플릿 참조). - 단계 8: 시작 사전: 지원되는 모든 로케일에 대해
messages/[locale].json이 존재하고 일치하는 기본 키를 가지고 있는지 확인합니다. - 단계 9: 레이아웃 및 라우트 마이그레이션: 최상위 라우트를
app/[locale]/로 이동합니다. 동적dir,lang,generateStaticParams및<NextIntlClientProvider>를 구성합니다 (템플릿 참조). - 단계 10: 타입 증강:
global.d.ts에AppConfig.Messages를 선언합니다 (템플릿 참조). - 단계 11: 네비게이션 임포트: 기존 컴포넌트 전체의 내부 링크를
@/i18n/navigation을 사용하도록 업데이트합니다. - 단계 12: 검증: 검증 스크립트를 실행하고 빌드합니다:
pwsh .agents/skills/nextjs-i18n-setup/scripts/verify-setup.ps1 -Quiet pnpm run build
3. 설정 실행 보고서 템플릿
## 🌐 Next.js i18n 설정 실행 보고서
| 단계 / 컴포넌트 | 대상 파일 | 상태 | 비고 |
| :------------------ | :----------------------------- | :------------------------------- | :------------------------ |
| **패키지** | `package.json` (`next-intl`) | `[구현됨]` / `[변경되지 않음]` | 설치된 런타임 |
| **프로젝트 설정** | `docs/project.json` | `[구현됨]` / `[변경되지 않음]` | 설정된 메시지 디렉토리 |
| **라우팅** | `i18n/routing.ts` | `[구현됨]` / `[변경되지 않음]` | 로케일 및 기본값 |
| **요청** | `i18n/request.ts` | `[구현됨]` / `[변경되지 않음]` | next/root-params |
| **네비게이션** | `i18n/navigation.ts` | `[구현됨]` / `[변경되지 않음]` | 순수 TS 헬퍼 |
| **플러그인** | `next.config.ts` | `[구현됨]` / `[변경되지 않음]` | withNextIntl 래핑됨 |
| **인터셉터** | `proxy.ts` / `middleware.ts` | `[구현됨]` / `[변경되지 않음]` | 라우트 매처 |
| **사전** | `messages/[locale].json` | `[구현됨]` / `[변경되지 않음]` | 시작 사전 |
| **레이아웃** | `app/[locale]/layout.tsx` | `[구현됨]` / `[변경되지 않음]` | 정적 매개변수 및 프로바이더 |
| **타입** | `global.d.ts` | `[구현됨]` / `[변경되지 않음]` | AppConfig 증강 |
| **검증** | `verify-setup.ps1` 및 빌드 | `[통과]` | 깔끔한 빌드 |