Home/i18nexus/useLanguageSwitcher

useLanguageSwitcher

React hook for language switching and management

๐ŸŽฎInteractive Demo

Current Language: en

๐Ÿ’ก Try switching languages. It's automatically saved to cookies!

Overview

useLanguageSwitcheris a React hook that manages current language state and provides language switching functionality.

โœ“Query current language state
โœ“Dynamic Language Switching
โœ“Query available languages list
โœ“Automatic cookie saving

API Reference

Return Value

currentLanguage: string

The currently active language code.

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

Function to change language. The changed language is automatically saved to cookies.

const { changeLanguage } = useLanguageSwitcher();

// ์–ธ์–ด ๋ณ€๊ฒฝ
changeLanguage("en");
changeLanguage("ko");
availableLanguages: Language[]

List of available languages.

const { availableLanguages } = useLanguageSwitcher();

// Language ํƒ€์ž…:
// { code: string, name: string, flag?: string }

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

Usage Examples

Basic Usage

"use client";

import { useLanguageSwitcher } from "i18nexus";

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

  return (
    <div>
      <p>ํ˜„์žฌ ์–ธ์–ด: {currentLanguage}</p>

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

Dropdown selector

"use client";

import { useLanguageSwitcher } from "i18nexus";

export default function LanguageDropdown() {
  const { currentLanguage, changeLanguage, availableLanguages } =
    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>
  );
}

Advanced Example - With Flags

"use client";

import { useLanguageSwitcher } from "i18nexus";

export default function FancyLanguageSwitcher() {
  const { currentLanguage, changeLanguage, availableLanguages } =
    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>
  );
}

Best Practices

โœ…Recommended: Don't reload the entire page after language change

i18nexus automatically updates all components. No need to manually reload the page.

โœ…Recommended: Visual feedback for better user experience

Clearly display the currently selected language so users can easily see the current language.

โŒNot recommended: Use in Server Components

useLanguageSwitcher is a client hook. It cannot be used in Server Components.

// โŒ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€
export default async function Page() {
  const { changeLanguage } = useLanguageSwitcher(); // ์—๋Ÿฌ!
}

// โœ… ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ
"use client";
export default function Page() {
  const { changeLanguage } = useLanguageSwitcher(); // ์ •์ƒ!
}

References