/i18nexus/useLanguageSwitcher

useLanguageSwitcher

언어 전환 및 관리를 위한 React 훅

🎮인터랙티브 데모

현재 언어: ko

💡 언어를 전환해보세요. 쿠키에 자동으로 저장됩니다!

개요

useLanguageSwitcher는 현재 언어 상태를 관리하고 언어를 전환하는 기능을 제공하는 React 훅입니다.

현재 언어 상태 조회
동적 언어 전환
사용 가능한 언어 목록 조회
자동 쿠키 저장

API 레퍼런스

Return Value

currentLanguage: string

현재 활성화된 언어 코드입니다.

const { currentLanguage } = useLanguageSwitcher();
console.log(currentLanguage); // "ko" or "en"
changeLanguage: (code: string) => void

언어를 변경하는 함수입니다. 변경된 언어는 쿠키에 자동으로 저장됩니다.

const { changeLanguage } = useLanguageSwitcher();

await changeLanguage("en");
await changeLanguage("ko");
availableLanguages: Language[]

사용 가능한 언어 목록입니다.

const { availableLanguages, changeLanguage } = useLanguageSwitcher();

// Language:
// { code: string, name: string, flag?: string }

availableLanguages.map((lang) => (
  <button onClick={() => changeLanguage(lang.code)}>
    {lang.flag} {lang.name}
  </button>
));

사용 예제

기본 사용법

"use client";

import { useLanguageSwitcher } from "i18nexus";

export default function LanguageSelector() {
  const { currentLanguage, availableLanguages, changeLanguage } =
    useLanguageSwitcher();

  return (
    <div>
      <p>현재 언어: {currentLanguage}</p>

      {availableLanguages.map((lang) => (
        <button
          key={lang.code}
          onClick={() => changeLanguage(lang.code)}
        >
          {lang.name}
        </button>
      ))}
    </div>
  );
}

드롭다운 선택기

"use client";

import { useLanguageSwitcher } from "i18nexus";

export default function LanguageDropdown() {
  const { currentLanguage, availableLanguages, changeLanguage } =
    useLanguageSwitcher();

  return (
    <select
      value={currentLanguage}
      onChange={(e) => changeLanguage(e.target.value)}
      className="px-4 py-2 rounded-lg bg-slate-800 text-white"
    >
      {availableLanguages.map((lang) => (
        <option key={lang.code} value={lang.code}>
          {lang.flag} {lang.name}
        </option>
      ))}
    </select>
  );
}

고급 예제 - 플래그와 함께

"use client";

import { useLanguageSwitcher } from "i18nexus";

export default function FancyLanguageSwitcher() {
  const { currentLanguage, availableLanguages, changeLanguage } =
    useLanguageSwitcher();

  return (
    <div className="flex gap-2">
      {availableLanguages.map((lang) => (
        <button
          key={lang.code}
          onClick={() => changeLanguage(lang.code)}
          className={`px-4 py-2 rounded-lg transition-all ${
            currentLanguage === lang.code
              ? "bg-blue-600 text-white scale-105"
              : "bg-slate-800 text-slate-300 hover:bg-slate-700"
          }`}
        >
          <span className="text-xl mr-2">{lang.flag}</span>
          <span>{lang.name}</span>
        </button>
      ))}
    </div>
  );
}

모범 사례

권장: 언어 변경 후 전체 페이지 리로드하지 않기

i18nexus는 자동으로 모든 컴포넌트를 업데이트합니다. 수동으로 페이지를 리로드할 필요가 없습니다.

권장: 사용자 경험을 위한 시각적 피드백

현재 선택된 언어를 명확하게 표시하여 사용자가 현재 언어를 쉽게 알 수 있도록 하세요.

비권장: 서버 컴포넌트에서 사용

useLanguageSwitcher는 클라이언트 훅입니다. 서버 컴포넌트에서는 사용할 수 없습니다.

// 서버 컴포넌트에서는 클라이언트 훅을 사용할 수 없습니다.
export default async function Page() {
  changeLanguage("en"); // Error: client hook state is unavailable.
}

// 클라이언트 컴포넌트에서 언어를 변경합니다.
"use client";
export default function Page() {
  changeLanguage("en");
}

// 서버 컴포넌트 번역은 getTranslation()을 사용합니다.
import { getTranslation } from "i18nexus/server";

export default async function ServerPage() {
  const { t } = await getTranslation<"common">("common");
  return <h1>{t("환영합니다")}</h1>;
}

참고 자료

useLanguageSwitcher Hook - i18nexus Documentation