이 페이지와 원하는 AI 어시스턴트를 사용하여 문서를 요약합니다
버전 기록
- 초기 버전v7.0.62025. 11. 1.
이 페이지의 콘텐츠는 AI를 사용하여 번역되었습니다.
영어 원본 내용의 최신 버전을 보기이 문서를 개선할 아이디어가 있으시면 GitHub에 풀 리퀘스트를 제출하여 자유롭게 기여해 주세요.
문서에 대한 GitHub 링크문서의 Markdown을 클립보드에 복사
2025년에 next-i18next를 사용하여 Next.js 애플리케이션 국제화하는 방법
목차
next-i18next란 무엇인가?
next-i18next는 Next.js 애플리케이션을 위한 인기 있는 국제화(i18n) 솔루션입니다. 원래 next-i18next 패키지는 Pages Router를 위해 설계되었지만, 이 가이드에서는 최신 App Router에서 i18next와 react-i18next를 직접 사용하여 i18next를 구현하는 방법을 보여줍니다.
이 접근 방식을 통해 다음을 할 수 있습니다:
- 네임스페이스(예:
common.json,about.json)를 사용하여 번역을 조직화하여 더 나은 콘텐츠 관리를 할 수 있습니다. - 각 페이지에 필요한 네임스페이스만 로드하여 번역을 효율적으로 로드함으로써 번들 크기를 줄일 수 있습니다.
- 서버 및 클라이언트 컴포넌트 모두를 지원하며 적절한 SSR과 하이드레이션 처리를 할 수 있습니다.
- 타입 안전한 로케일 구성과 번역 키로 TypeScript 지원을 보장할 수 있습니다.
- 적절한 메타데이터, 사이트맵, robots.txt 국제화를 통해 SEO 최적화를 합니다.
대안으로 next-intl 가이드를 참조하거나, 직접 Intlayer를 사용할 수 있습니다.
next-i18next vs next-intl vs Intlayer 비교를 확인하세요.
따라야 할 실천 사항
구현에 들어가기 전에, 다음과 같은 실천 사항을 따라야 합니다:
- HTML
lang및dir속성 설정 - 레이아웃에서
getLocaleDirection(locale)을 사용하여dir을 계산하고, 적절한 접근성과 SEO를 위해<html lang={locale} dir={dir}>를 설정하세요. - 네임스페이스별 메시지 분리
JSON 파일을 로케일과 네임스페이스별로 구성하세요(예:
common.json,about.json). 필요한 것만 로드할 수 있습니다. - 클라이언트 페이로드 최소화
페이지에서 필요한 네임스페이스만
NextIntlClientProvider에 전달하세요(예:pick(messages, ['common', 'about'])). - 정적 페이지 선호 성능과 SEO 향상을 위해 가능한 한 정적 페이지를 사용하세요.
- 서버 컴포넌트에서의 국제화
페이지나
client로 표시되지 않은 모든 컴포넌트 같은 서버 컴포넌트는 정적이며 빌드 시 미리 렌더링될 수 있습니다. 따라서 번역 함수들을 props로 전달해야 합니다. - TypeScript 타입 설정 애플리케이션 전반에 걸쳐 타입 안전성을 보장하기 위해 로케일에 대한 TypeScript 타입을 설정하세요.
- 리디렉션을 위한 프록시 로케일 감지 및 라우팅을 처리하고 사용자를 적절한 로케일 접두사가 붙은 URL로 리디렉션하기 위해 프록시를 사용하세요.
- 메타데이터, 사이트맵, robots.txt의 국제화
Next.js에서 제공하는
generateMetadata함수를 사용하여 메타데이터, 사이트맵, robots.txt를 국제화함으로써 모든 로케일에서 검색 엔진이 더 잘 인식하도록 하세요. - 링크 현지화
Link컴포넌트를 사용하여 사용자를 적절한 로케일 접두사가 붙은 URL로 리디렉션하도록 링크를 현지화하세요. 이는 모든 로케일에서 페이지 발견을 보장하는 데 중요합니다. - 테스트 및 번역 자동화 테스트와 번역 자동화는 다국어 애플리케이션 유지 관리를 위한 시간을 절약하는 데 도움이 됩니다.
국제화 및 SEO에 대해 알아야 할 모든 내용을 나열한 문서를 참조하세요: next-intl을 사용한 국제화 (i18n).
Next.js 애플리케이션에서 i18next 설정 단계별 가이드
GitHub에서 Application Template을 참조하세요.
다음은 우리가 생성할 프로젝트 구조입니다:
코드를 클립보드에 복사
의존성 설치
npm을 사용하여 필요한 패키지를 설치합니다:
bash코드 복사코드를 클립보드에 복사
- i18next: 번역 로딩 및 관리를 담당하는 핵심 국제화 프레임워크입니다.
- react-i18next: 클라이언트 컴포넌트를 위한
useTranslation훅 등을 제공하는 i18next의 React 바인딩입니다. - i18next-resources-to-backend: 필요한 네임스페이스만 동적으로 로드할 수 있도록 번역 파일의 동적 로딩을 가능하게 하는 플러그인입니다.
프로젝트 구성
지원하는 로케일, 기본 로케일, URL 현지화에 대한 헬퍼 함수를 정의하는 구성 파일을 만드세요. 이 파일은 i18n 설정의 단일 진실 소스 역할을 하며 애플리케이션 전반에 걸쳐 타입 안전성을 보장합니다.
로케일 구성을 중앙 집중화하면 불일치를 방지하고 향후 로케일을 추가하거나 제거하기가 더 쉬워집니다. 헬퍼 함수는 SEO 및 라우팅을 위한 일관된 URL 생성을 보장합니다.
i18n.config.ts코드 복사코드를 클립보드에 복사
번역 네임스페이스 중앙 집중화
애플리케이션에서 노출하는 모든 네임스페이스에 대해 단일 소스 오브 트루스를 만드세요. 이 목록을 재사용하면 서버, 클라이언트, 툴링 코드가 동기화되고 번역 헬퍼에 대한 강력한 타입 지원이 활성화됩니다.
src/i18n.namespaces.ts코드 복사코드를 클립보드에 복사
TypeScript로 번역 키 강력한 타입 지정하기
i18next를 확장하여 표준 언어 파일(보통 영어)을 가리키도록 하세요. 그러면 TypeScript가 네임스페이스별 유효한 키를 추론하여t()호출이 끝까지 검사됩니다.src/types/i18next.d.ts코드 복사코드를 클립보드에 복사
팁: 이 선언 파일은
src/types폴더 아래에 저장하세요(폴더가 없으면 생성). Next.js는 이미tsconfig.json에src를 포함하고 있어 자동으로 이 확장이 인식됩니다. 만약 인식되지 않는다면,tsconfig.json파일에 다음을 추가하세요:tsconfig.json코드 복사코드를 클립보드에 복사
이 설정이 완료되면 자동완성과 컴파일 타임 검사를 활용할 수 있습니다:
tsx코드 복사코드를 클립보드에 복사
서버 사이드 i18n 초기화 설정
서버 컴포넌트용 번역을 로드하는 서버 사이드 초기화 함수를 만듭니다. 이 함수는 서버 사이드 렌더링을 위해 별도의 i18next 인스턴스를 생성하여 렌더링 전에 번역이 로드되도록 보장합니다.
서버 컴포넌트는 클라이언트 컴포넌트와 다른 컨텍스트에서 실행되기 때문에 자체 i18next 인스턴스가 필요합니다. 서버에서 번역을 미리 로드하면 번역되지 않은 콘텐츠가 잠시 보이는 현상을 방지하고, 검색 엔진이 번역된 콘텐츠를 인식하도록 하여 SEO를 향상시킵니다.
src/app/i18n/server.ts코드 복사코드를 클립보드에 복사
클라이언트 사이드 i18n 프로바이더 생성
애플리케이션을 i18next 컨텍스트로 감싸는 클라이언트 컴포넌트 프로바이더를 생성합니다. 이 프로바이더는 서버에서 미리 로드된 번역을 받아 미번역 콘텐츠 깜빡임(FOUC)을 방지하고 중복 요청을 피합니다.
클라이언트 컴포넌트는 브라우저에서 실행되는 자체 i18next 인스턴스가 필요합니다. 서버에서 미리 로드된 리소스를 받아 원활한 하이드레이션을 보장하고 콘텐츠 깜빡임을 방지합니다. 또한 이 프로바이더는 로케일 변경과 네임스페이스 로딩을 동적으로 관리합니다.
src/components/I18nProvider.tsx코드 복사코드를 클립보드에 복사
동적 로케일 라우트 정의
앱 폴더에
[locale]디렉토리를 생성하여 로케일에 대한 동적 라우팅을 설정합니다. 이를 통해 Next.js는 각 로케일이 URL 세그먼트가 되는 로케일 기반 라우팅을 처리할 수 있습니다 (예:/en/about,/fr/about).동적 라우트를 사용하면 Next.js가 빌드 시 모든 로케일에 대해 정적 페이지를 생성할 수 있어 성능과 SEO가 향상됩니다. 레이아웃 컴포넌트는 로케일에 따라 HTML의
lang및dir속성을 설정하는데, 이는 접근성과 검색 엔진 이해에 매우 중요합니다.src/app/[locale]/layout.tsx코드 복사코드를 클립보드에 복사
번역 파일 생성하기
각 로케일과 네임스페이스별로 JSON 파일을 생성하세요. 이 구조는 번역을 논리적으로 조직하고 각 페이지에 필요한 번역만 로드할 수 있게 해줍니다.
네임스페이스별로 번역을 구성하는 것(e.g.,
common.json,about.json)은 코드 분할을 가능하게 하고 번들 크기를 줄여줍니다. 각 페이지에 필요한 번역만 로드하므로 성능이 향상됩니다.src/locales/en/common.json코드 복사코드를 클립보드에 복사
src/locales/fr/common.json코드 복사코드를 클립보드에 복사
src/locales/en/home.json코드 복사코드를 클립보드에 복사
src/locales/ko/home.json코드 복사코드를 클립보드에 복사
src/locales/en/about.json코드 복사코드를 클립보드에 복사
src/locales/ko/about.json코드 복사코드를 클립보드에 복사
페이지에서 번역 활용하기
서버에서 i18next를 초기화하고 번역을 서버와 클라이언트 컴포넌트 모두에 전달하는 페이지 컴포넌트를 만듭니다. 이렇게 하면 렌더링 전에 번역이 로드되어 콘텐츠 깜빡임을 방지할 수 있습니다.
서버 측 초기화는 페이지가 렌더링되기 전에 번역을 로드하여 SEO를 향상시키고 FOUC(Flash of Unstyled Content)를 방지합니다. 미리 로드된 리소스를 클라이언트 프로바이더에 전달함으로써 중복 요청을 피하고 원활한 하이드레이션을 보장합니다.
src/app/[locale]/about/index.tsx코드 복사코드를 클립보드에 복사
클라이언트 컴포넌트에서 번역 사용하기
클라이언트 컴포넌트는
useTranslation훅을 사용하여 번역에 접근할 수 있습니다. 이 훅은 번역 함수와 i18n 인스턴스에 접근할 수 있게 하여, 콘텐츠를 번역하고 로케일 정보를 사용할 수 있도록 합니다.클라이언트 컴포넌트는 번역에 접근하기 위해 React 훅이 필요합니다.
useTranslation훅은 i18next와 원활하게 통합되며, 로케일이 변경될 때 반응형 업데이트를 제공합니다.페이지나 프로바이더가 필요한 네임스페이스만 포함하고 있는지 확인하세요 (예:
about).
React 버전이 19 미만이라면,Intl.NumberFormat같은 무거운 포매터는 메모이제이션하세요.src/components/ClientComponent.tsx코드 복사코드를 클립보드에 복사
서버 컴포넌트에서 번역 사용하기
서버 컴포넌트는 React 훅을 사용할 수 없으므로, 부모 컴포넌트로부터 props를 통해 번역을 전달받습니다. 이 방법은 서버 컴포넌트를 동기적으로 유지하며 클라이언트 컴포넌트 내부에 중첩될 수 있도록 합니다.
클라이언트 경계 내에 중첩될 수 있는 서버 컴포넌트는 동기적이어야 합니다. 번역된 문자열과 로케일 정보를 props로 전달함으로써 비동기 작업을 피하고 올바른 렌더링을 보장합니다.
src/components/ServerComponent.tsx코드 복사코드를 클립보드에 복사
콘텐츠 언어 변경하기
선택사항Next.js에서 콘텐츠의 언어를 변경하는 권장 방법은 로케일 접두사가 붙은 URL과 Next.js 링크를 사용하는 것입니다. 아래 예제는 현재 로케일을 경로에서 읽어와 경로명에서 제거하고, 사용 가능한 각 로케일에 대해 하나의 링크를 렌더링합니다.
src/components/LocaleSwitcher.tsx코드 복사코드를 클립보드에 복사
지역화된 Link 컴포넌트 만들기
선택사항앱 전반에 걸쳐 지역화된 URL을 재사용하면 내비게이션이 일관되고 SEO 친화적으로 유지됩니다. 내부 경로에는 활성 로케일을 접두사로 붙이고 외부 URL은 그대로 두는 작은 헬퍼로
next/link를 감싸세요.src/components/LocalizedLink.tsx코드 복사코드를 클립보드에 복사
팁:
LocalizedLink는 드롭인 교체이므로, import를 교체하고 컴포넌트가 로케일별 URL을 처리하도록 하여 점진적으로 마이그레이션하세요.서버 액션 내에서 활성 로케일 접근하기
선택사항서버 액션은 종종 이메일, 로깅 또는 서드파티 통합을 위해 현재 로케일이 필요합니다. 프록시가 설정한 로케일 쿠키와
Accept-Language헤더를 결합하여 폴백으로 사용하세요.src/app/actions/get-current-locale.ts코드 복사코드를 클립보드에 복사
이 헬퍼는 Next.js의 쿠키와 헤더에 의존하기 때문에, Route Handlers, Server Actions 및 기타 서버 전용 컨텍스트에서 작동합니다.
메타데이터 국제화하기
선택사항콘텐츠 번역도 중요하지만, 국제화의 주요 목표는 여러분의 웹사이트를 전 세계에 더 잘 노출시키는 것입니다. I18n은 적절한 SEO를 통해 웹사이트 가시성을 향상시키는 놀라운 수단입니다.
적절하게 국제화된 메타데이터는 검색 엔진이 페이지에서 어떤 언어가 사용 가능한지 이해하는 데 도움을 줍니다. 여기에는 hreflang 메타 태그 설정, 제목과 설명 번역, 각 로케일에 맞는 정규 URL(canonical URL) 설정이 포함됩니다.
다국어 SEO에 관한 좋은 실천 사항 목록은 다음과 같습니다:
<head>태그에 hreflang 메타 태그를 설정하여 검색 엔진이 페이지에서 사용 가능한 언어를 이해할 수 있도록 합니다.http://www.w3.org/1999/xhtmlXML 스키마를 사용하여 sitemap.xml에 모든 페이지 번역을 나열합니다.- robots.txt에서 접두사가 붙은 페이지를 제외하는 것을 잊지 마세요 (예:
/dashboard,/fr/dashboard,/es/dashboard). - 가장 현지화된 페이지로 리디렉션하기 위해 커스텀 Link 컴포넌트를 사용하세요 (예: 프랑스어에서는
<a href="/fr/about">À propos</a>).
개발자들은 종종 여러 로케일에 걸쳐 페이지를 올바르게 참조하는 것을 잊어버립니다. 이를 수정해 봅시다:
src/app/[locale]/about/layout.tsx코드 복사코드를 클립보드에 복사
사이트맵 국제화하기
선택사항모든 로케일 버전의 페이지를 포함하는 사이트맵을 생성하세요. 이는 검색 엔진이 모든 언어 버전의 콘텐츠를 발견하고 색인화하는 데 도움을 줍니다.
적절하게 국제화된 사이트맵은 검색 엔진이 모든 언어 버전의 페이지를 찾고 색인화할 수 있도록 보장합니다. 이는 국제 검색 결과에서 가시성을 향상시킵니다.
src/app/sitemap.ts코드 복사코드를 클립보드에 복사
robots.txt 국제화하기
선택사항보호된 경로의 모든 로케일 버전을 적절히 처리하는 robots.txt 파일을 만드세요. 이를 통해 검색 엔진이 어떤 언어로든 관리자(admin) 또는 대시보드 페이지를 인덱싱하지 않도록 보장합니다.
모든 로케일에 대해 robots.txt를 올바르게 구성하면 검색 엔진이 민감한 페이지를 어떤 언어로도 인덱싱하지 못하게 할 수 있습니다. 이는 보안과 개인정보 보호에 매우 중요합니다.
src/app/robots.ts코드 복사코드를 클립보드에 복사
로케일 라우팅을 위한 미들웨어 설정
선택사항사용자의 선호 로케일을 자동으로 감지하고 적절한 로케일 접두사가 붙은 URL로 리디렉션하는 프록시를 만듭니다. 이를 통해 사용자는 선호하는 언어로 된 콘텐츠를 볼 수 있어 사용자 경험이 향상됩니다.
미들웨어는 사용자가 사이트를 방문할 때 자동으로 선호하는 언어로 리디렉션되도록 보장합니다. 또한 향후 방문을 위해 사용자의 선호를 쿠키에 저장합니다.
src/proxy.ts코드 복사코드를 클립보드에 복사
Intlayer를 사용하여 번역 자동화하기
선택사항Intlayer는 애플리케이션의 현지화 과정을 지원하기 위해 설계된 무료이자 오픈 소스 라이브러리입니다. i18next가 번역 로딩과 관리를 담당하는 반면, Intlayer는 번역 워크플로우 자동화를 도와줍니다.
번역을 수동으로 관리하는 것은 시간도 많이 걸리고 오류가 발생하기 쉽습니다. Intlayer는 번역 테스트, 생성 및 관리를 자동화하여 시간을 절약하고 애플리케이션 전반에 걸쳐 일관성을 보장합니다.
Intlayer는 다음을 가능하게 합니다:
코드베이스 내 원하는 위치에 콘텐츠 선언하기
Intlayer는.content.{ts|js|json}파일을 사용하여 코드베이스 내 원하는 위치에 콘텐츠를 선언할 수 있게 합니다. 이를 통해 콘텐츠를 더 잘 조직할 수 있으며, 코드베이스의 가독성과 유지보수성을 향상시킵니다.누락된 번역 테스트하기
Intlayer는 CI/CD 파이프라인이나 단위 테스트에 통합할 수 있는 테스트 기능을 제공합니다. 번역 테스트하기에서 자세히 알아보세요.번역 자동화
Intlayer는 번역을 자동화할 수 있는 CLI와 VSCode 확장 기능을 제공합니다. 이를 CI/CD 파이프라인에 통합할 수 있습니다. 번역 자동화 에 대해 자세히 알아보세요.
사용자는 자신의 API 키와 원하는 AI 제공자를 사용할 수 있습니다. 또한 문맥 인식 번역도 지원합니다. 자세한 내용은 콘텐츠 채우기를 참조하세요.- 외부 콘텐츠 연결
외부 콘텐츠 연결
Intlayer는 외부 콘텐츠 관리 시스템(CMS)에 콘텐츠를 연결할 수 있도록 합니다. 최적화된 방식으로 데이터를 가져와 JSON 리소스에 삽입할 수 있습니다. 외부 콘텐츠 가져오기에서 자세히 알아보세요.비주얼 에디터
Intlayer는 비주얼 에디터를 사용하여 콘텐츠를 편집할 수 있는 무료 비주얼 에디터를 제공합니다. 번역 비주얼 편집에서 자세히 알아보세요.
그리고 더 많은 기능들이 있습니다. Intlayer가 제공하는 모든 기능을 확인하려면 Intlayer의 장점 문서를 참조하세요.
댓글
아직 댓글이 없습니다. 첫 번째로 의견을 나눠보세요.