/i18nexus/I18nProvider

I18nProvider

쿠키 기반 언어 영속성 및 SSR 지원을 갖춘 React Context Provider

개요

I18nProvider는 전체 애플리케이션에 국제화 컨텍스트를 제공하는 루트 컴포넌트입니다. 언어 상태를 관리하고, 쿠키 영속성을 처리하며, SSR에서 하이드레이션 불일치가 없음을 보장합니다.

쿠키 기반 언어 영속성
Next.js에서 하이드레이션 불일치 제로
타입 안전 언어 관리
쿠키에서 자동 언어 감지

API 레퍼런스

Props

initialLanguage문자열 (필수)

사용할 초기 언어 코드입니다. translations 객체의 키 중 하나와 일치해야 합니다.

"initialLanguage="ko"
translations객체 (필수)

지원되는 모든 언어에 대한 번역 키와 값을 포함하는 객체입니다.

translations={{
  en: { "Welcome": "Welcome" },
  ko: { "Welcome": "환영합니다" }
}}
childrenReactNode (필수)

번역에 접근해야 하는 애플리케이션 컴포넌트들입니다.

languageManagerOptions객체 (선택사항)

언어 관리를 위한 추가 설정입니다.

languageManagerOptions={{
  defaultLanguage: "ko",
  availableLanguages: [
    { code: "ko", name: "한국어", flag: "🇰🇷" },
    { code: "en", name: "English", flag: "🇺🇸" }
  ]
}}

사용 예제

기본 설정 (클라이언트 컴포넌트만)

// app/layout.tsx
import { I18nProvider } from "i18nexus";
import { translations } from "@/lib/i18n";

export default function RootLayout({ children }) {
  return (
    <html>
      <body>
        <I18nProvider 
          initialLanguage="ko" 
          translations={translations}
        >
          {children}
        </I18nProvider>
      </body>
    </html>
  );
}

서버 사이드 렌더링 (Next.js App Router)

// app/layout.tsx
import { I18nProvider } from "i18nexus";
import { getServerLanguage } from "i18nexus/server";
import { headers } from "next/headers";
import { translations } from "@/lib/i18n";

export default async function RootLayout({ children }) {
  // Read language from cookie on server
  const headersList = await headers();
  const language = getServerLanguage(headersList);

  return (
    <html lang={language}>
      <body>
        <I18nProvider 
          initialLanguage={language} 
          translations={translations}
        >
          {children}
        </I18nProvider>
      </body>
    </html>
  );
}

💡 왜 중요한가: 서버에서 쿠키로부터 언어를 읽음으로써, 초기 HTML이 클라이언트가 예상하는 것과 일치하도록 보장하여 하이드레이션 불일치를 방지합니다.

고급 설정

// app/layout.tsx
import { I18nProvider } from "i18nexus";
import { translations } from "@/lib/i18n";

const languageManagerOptions = {
  defaultLanguage: "ko",
  availableLanguages: [
    { code: "ko", name: "한국어", flag: "🇰🇷" },
    { code: "en", name: "English", flag: "🇺🇸" },
    { code: "ja", name: "日本語", flag: "🇯🇵" },
  ],
  cookieOptions: {
    maxAge: 365 * 24 * 60 * 60, // 1 year
    path: "/",
    sameSite: "lax",
  }
};

export default function RootLayout({ children }) {
  return (
    <I18nProvider 
      initialLanguage="ko" 
      translations={translations}
      languageManagerOptions={languageManagerOptions}
    >
      {children}
    </I18nProvider>
  );
}

모범 사례

권장: 앱의 루트에 배치

모든 컴포넌트가 번역에 접근할 수 있도록 루트 레이아웃 레벨에서 항상 전체 애플리케이션을 I18nProvider로 감싸세요.

권장: 서버 사이드 언어 감지 사용

Next.js 애플리케이션의 경우, 하이드레이션 불일치를 방지하기 위해 항상 서버에서 쿠키로부터 언어를 읽으세요.

비권장: 여러 provider 중첩

I18nProvider 컴포넌트를 중첩하지 마세요. 루트 레벨에서 하나의 provider만 사용하세요.

비권장: initialLanguage를 동적으로 변경

initialLanguage prop은 한 번만 설정해야 합니다. 언어를 동적으로 변경하려면 useLanguageSwitcher의 changeLanguage()를 사용하세요.

참고 자료

Firebase 연결 확인 중...
I18nProvider - i18nexus Documentation