์ž‘๊ฐ€:
    ์ƒ์„ฑ:2025-08-23๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ:2026-09-27

    Next.js ํ†ตํ•ฉ: next-intlayer์šฉ useLocale ํ›… ๋ฌธ์„œ

    ์ด ์„น์…˜์—์„œ๋Š” next-intlayer ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋‚ด Next.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋งž์ถคํ™”๋œ useLocale ํ›…์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋ฌธ์„œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ํ›…์€ ๋กœ์ผ€์ผ ๋ณ€๊ฒฝ๊ณผ ๋ผ์šฐํŒ…์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

    Next.js์—์„œ useLocale ๊ฐ€์ ธ์˜ค๊ธฐ

    Next.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ useLocale ํ›…์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ€์ ธ์˜ค์„ธ์š”:

    javascript
    import { useLocale } from "next-intlayer"; // Next.js์—์„œ ๋กœ์ผ€์ผ ๋ฐ ๋ผ์šฐํŒ… ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ
    

    ์‚ฌ์šฉ๋ฒ•

    ๋‹ค์Œ์€ Next.js ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ useLocale ํ›…์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค:

    src/components/LocaleSwitcher.tsx
    "use client";
    
    import type { FC } from "react";
    import { Locales } from "intlayer";
    import { useLocale } from "next-intlayer";
    
    const LocaleSwitcher: FC = () => {
      const { locale, defaultLocale, availableLocales, setLocale } = useLocale();
    
      return (
        <div>
          <h1>ํ˜„์žฌ ๋กœ์ผ€์ผ: {locale}</h1>
          <p>๊ธฐ๋ณธ ๋กœ์ผ€์ผ: {defaultLocale}</p>
          <select value={locale} onChange={(e) => setLocale(e.target.value)}>
            {availableLocales.map((loc) => (
              <option key={loc} value={loc}>
                {loc}
              </option>
            ))}
          </select>
        </div>
      );
    };
    

    ๋งค๊ฐœ๋ณ€์ˆ˜

    useLocale ํ›…์€ ๋‹ค์Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค:

    • onLocaleChange: ๋กœ์ผ€์ผ์ด ๋ณ€๊ฒฝ๋  ๋•Œ URL์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. "replace", "push" ๋˜๋Š” "none"์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:

      1. ํ˜„์žฌ /fr/home์— ์žˆ์Šต๋‹ˆ๋‹ค.
      2. /fr/about์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
      3. ๋กœ์ผ€์ผ์„ /es/about์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
      4. ๋ธŒ๋ผ์šฐ์ €์˜ "๋’ค๋กœ ๊ฐ€๊ธฐ" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

      onLocaleChange ๊ฐ’์— ๋”ฐ๋ผ ๋™์ž‘์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค:

      • "replace" (๊ธฐ๋ณธ๊ฐ’): ํ˜„์žฌ URL์„ ์ƒˆ๋กœ์šด ๋กœ์ปฌ URL๋กœ ๊ต์ฒดํ•˜๊ณ  ์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. -> "๋’ค๋กœ ๊ฐ€๊ธฐ" ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด /es/home์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
      • "push": ์ƒˆ๋กœ์šด ๋กœ์ปฌ URL์„ ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ก์— ์ถ”๊ฐ€ํ•˜๊ณ  ์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. -> "๋’ค๋กœ ๊ฐ€๊ธฐ" ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด /fr/about์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
      • "none": URL์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํด๋ผ์ด์–ธํŠธ ์ปจํ…์ŠคํŠธ์˜ ๋กœ์ผ€์ผ๋งŒ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. -> "๋’ค๋กœ ๊ฐ€๊ธฐ" ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด /fr/home์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
      • (locale) => void: ์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋กœ์ผ€์ผ์ด ๋ณ€๊ฒฝ๋  ๋•Œ ํ˜ธ์ถœ๋  ์ปค์Šคํ…€ ํ•จ์ˆ˜๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

        undefined ์˜ต์…˜์€ ๊ธฐ๋ณธ ๋™์ž‘์ด๋ฉฐ, ์ƒˆ๋กœ์šด ๋กœ์ผ€์ผ๋กœ ์ด๋™ํ•  ๋•Œ๋Š” Link ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ:

        tsx
        <Link href="/es/about" replace>
          ์ •๋ณด
        </Link>
        

    ๋ฐ˜ํ™˜ ๊ฐ’

    useLocale ํ›…์„ ํ˜ธ์ถœํ•˜๋ฉด ๋‹ค์Œ ์†์„ฑ์„ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค:

    • locale: React ์ปจํ…์ŠคํŠธ์— ์„ค์ •๋œ ํ˜„์žฌ ๋กœ์ผ€์ผ์ž…๋‹ˆ๋‹ค.
    • defaultLocale: ๊ตฌ์„ฑ์—์„œ ์ •์˜๋œ ๊ธฐ๋ณธ ๋กœ์ผ€์ผ์ž…๋‹ˆ๋‹ค.
    • availableLocales: ๊ตฌ์„ฑ์—์„œ ์ •์˜๋œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋กœ์ผ€์ผ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.
    • setLocale: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋กœ์ผ€์ผ์„ ๋ณ€๊ฒฝํ•˜๊ณ  URL์„ ์ด์— ๋งž๊ฒŒ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ตฌ์„ฑ์— ๋”ฐ๋ผ ๊ฒฝ๋กœ์— ๋กœ์ผ€์ผ์„ ์ถ”๊ฐ€ํ• ์ง€ ์—ฌ๋ถ€ ๋ฐ ์ ‘๋‘์‚ฌ ๊ทœ์น™์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. next/navigation์˜ useRouter๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ push ๋ฐ refresh์™€ ๊ฐ™์€ ๋‚ด๋น„๊ฒŒ์ด์…˜ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • pathWithoutLocale: ๋กœ์ผ€์ผ์ด ์ œ๊ฑฐ๋œ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ณ„์‚ฐ๋œ ์†์„ฑ์ž…๋‹ˆ๋‹ค. URL์„ ๋น„๊ตํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ˜„์žฌ ๋กœ์ผ€์ผ์ด fr์ด๊ณ  URL์ด fr/my_path์ธ ๊ฒฝ์šฐ, ๋กœ์ผ€์ผ์ด ์—†๋Š” ๊ฒฝ๋กœ๋Š” /my_path์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด next/navigation์˜ usePathname์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    ๊ฒฐ๋ก 

    next-intlayer์˜ useLocale ํ›…์€ Next.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋กœ์ผ€์ผ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋กœ์ผ€์ผ ์ €์žฅ, ์ƒํƒœ ๊ด€๋ฆฌ, URL ์ˆ˜์ • ๋“ฑ์„ ์›ํ™œํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋‹ค์ค‘ ๋กœ์ผ€์ผ์— ๋งž๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ†ตํ•ฉ์ ์œผ๋กœ ์ ์‘์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.