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

    ๋ฌธ์„œ: intlayer์˜ getPrefix ํ•จ์ˆ˜

    ์„ค๋ช…

    getPrefix ํ•จ์ˆ˜๋Š” ๋ผ์šฐํŒ… ๋ชจ๋“œ ์„ค์ •์— ๋”ฐ๋ผ ์ฃผ์–ด์ง„ ๋กœ์ผ€์ผ์˜ URL ์ ‘๋‘์‚ฌ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ผ€์ผ์„ ๊ธฐ๋ณธ ๋กœ์ผ€์ผ๊ณผ ๋น„๊ตํ•˜๊ณ , ์œ ์—ฐํ•œ URL ๊ตฌ์„ฑ์„ ์œ„ํ•ด ์„ธ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์ ‘๋‘์‚ฌ ํ˜•์‹์„ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    ์ฃผ์š” ๊ธฐ๋Šฅ:

    • ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋กœ์ผ€์ผ์„ ๋ฐ›์Œ (ํ•„์ˆ˜)
    • defaultLocale๊ณผ mode๋ฅผ ํฌํ•จํ•˜๋Š” ์„ ํƒ์  options ๊ฐ์ฒด
    • prefix์™€ localePrefix ์†์„ฑ์„ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜
    • ๋ชจ๋“  ๋ผ์šฐํŒ… ๋ชจ๋“œ ์ง€์›: prefix-no-default, prefix-all, no-prefix, search-params
    • ๋กœ์ผ€์ผ ์ ‘๋‘์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์‹œ์ ์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฐ€๋ฒผ์šด ์œ ํ‹ธ๋ฆฌํ‹ฐ

    ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜

    typescript
    getPrefix(
      locale: Locales,               // ํ•„์ˆ˜
      options?: {                    // ์„ ํƒ์ 
        defaultLocale?: Locales;
        mode?: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params';
      }
    ): GetPrefixResult
    
    type GetPrefixResult = {
      prefix: string;   // ์˜ˆ: 'fr/' ๋˜๋Š” ''
      localePrefix?: Locale; // ์˜ˆ: 'fr' ๋˜๋Š” undefined
    }
    

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

    • locale: Locales

      • ์„ค๋ช…: ์ ‘๋‘์‚ฌ๋ฅผ ์ƒ์„ฑํ•  ๋กœ์ผ€์ผ์ž…๋‹ˆ๋‹ค. ๊ฐ’์ด falsy(์ •์˜๋˜์ง€ ์•Š์Œ, null, ๋นˆ ๋ฌธ์ž์—ด)์ธ ๊ฒฝ์šฐ ํ•จ์ˆ˜๋Š” ๋นˆ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
      • ํƒ€์ž…: Locales
      • ํ•„์ˆ˜: ์˜ˆ
    • options?: object

      • ์„ค๋ช…: ์ ‘๋‘์‚ฌ ๊ฒฐ์ •์— ๋Œ€ํ•œ ๊ตฌ์„ฑ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
      • ํƒ€์ž…: object
      • ํ•„์ˆ˜: ์•„๋‹ˆ์š” (์„ ํƒ ์‚ฌํ•ญ)

      • options.defaultLocale?: Locales

        • ์„ค๋ช…: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ ๋กœ์ผ€์ผ์ž…๋‹ˆ๋‹ค. ์ œ๊ณต๋˜์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์—์„œ ์„ค์ •๋œ ๊ธฐ๋ณธ ๋กœ์ผ€์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
        • ํƒ€์ž…: Locales
        • ๊ธฐ๋ณธ๊ฐ’: ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ
    • ์„ค๋ช…: ๋กœ์ผ€์ผ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ URL ๋ผ์šฐํŒ… ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค. ์ œ๊ณต๋˜์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์—์„œ ์„ค์ •๋œ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ํƒ€์ž…: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'
    • ๊ธฐ๋ณธ๊ฐ’: ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ
    • ๋ชจ๋“œ:
      • prefix-no-default: ๋กœ์ผ€์ผ์ด ๊ธฐ๋ณธ ๋กœ์ผ€์ผ๊ณผ ์ผ์น˜ํ•  ๋•Œ ๋นˆ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
      • prefix-all: ๊ธฐ๋ณธ ๋กœ์ผ€์ผ์„ ํฌํ•จํ•œ ๋ชจ๋“  ๋กœ์ผ€์ผ์— ๋Œ€ํ•ด ์ ‘๋‘์‚ฌ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
      • no-prefix: ๋นˆ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค (URL์— ์ ‘๋‘์‚ฌ๊ฐ€ ์—†์Œ).
      • search-params: ๋นˆ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค (๋กœ์ผ€์ผ์ด ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์žˆ์Œ).

    ๋ฐ˜ํ™˜๊ฐ’

    • ํƒ€์ž…: GetPrefixResult
    • ์„ค๋ช…: ์„ธ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์ ‘๋‘์‚ฌ ํ˜•์‹์„ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด:
      • prefix: ํ›„ํ–‰ ์Šฌ๋ž˜์‹œ๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ๋กœ ์ ‘๋‘์‚ฌ (์˜ˆ: 'fr/', '')
      • localePrefix: ์Šฌ๋ž˜์‹œ๊ฐ€ ์—†๋Š” ๋กœ์ผ€์ผ ์‹๋ณ„์ž (์˜ˆ: 'fr', undefined)

    ์‚ฌ์šฉ ์˜ˆ์ œ

    ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

    typescript
    import { getPrefix, Locales } from "intlayer";
    
    // ์˜์–ด ๋กœ์ผ€์ผ์— ๋Œ€ํ•œ ์ ‘๋‘์‚ฌ ํ™•์ธ
    getPrefix(Locales.ENGLISH, {
      defaultLocale: Locales.ENGLISH,
      mode: "prefix-all",
    });
    // ๋ฐ˜ํ™˜: { prefix: 'en/', localePrefix: 'en' }
    
    // ํ”„๋ž‘์Šค์–ด ๋กœ์ผ€์ผ์— ๋Œ€ํ•œ ์ ‘๋‘์‚ฌ ํ™•์ธ
    getPrefix(Locales.FRENCH, {
      defaultLocale: Locales.ENGLISH,
      mode: "prefix-no-default",
    });
    // ๋ฐ˜ํ™˜: { prefix: 'fr/', localePrefix: 'fr' }
    

    ๋‹ค์–‘ํ•œ ๋ผ์šฐํŒ… ๋ชจ๋“œ

    typescript
    import { getPrefix, Locales } from "intlayer";
    
    // prefix-all: ํ•ญ์ƒ prefix๋ฅผ ๋ฐ˜ํ™˜
    getPrefix(Locales.ENGLISH, {
      mode: "prefix-all",
      defaultLocale: Locales.ENGLISH,
    });
    // ๋ฐ˜ํ™˜: { prefix: '/en', localePrefix: 'en' }
    
    // prefix-no-default: ๋กœ์ผ€์ผ์ด ๊ธฐ๋ณธ๊ฐ’๊ณผ ์ผ์น˜ํ•  ๋•Œ๋Š” prefix ์—†์Œ
    getPrefix(Locales.ENGLISH, {
      mode: "prefix-no-default",
      defaultLocale: Locales.ENGLISH,
    });
    // ๋ฐ˜ํ™˜: { prefix: '', localePrefix: undefined }
    
    javascript;
    // prefix-no-default: ๊ธฐ๋ณธ ๋กœ์ผ€์ผ๊ณผ ๋‹ค๋ฅผ ๊ฒฝ์šฐ ์ ‘๋‘์‚ฌ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    getPrefix(Locales.FRENCH, {
      mode: "prefix-no-default",
      defaultLocale: Locales.ENGLISH,
    });
    // ๋ฐ˜ํ™˜๊ฐ’: { prefix: 'fr/', localePrefix: 'fr' }
    
    // no-prefix & search-params: ์ ˆ๋Œ€ ์ ‘๋‘์‚ฌ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    getPrefix(Locales.ENGLISH, { mode: "no-prefix" });
    // ๋ฐ˜ํ™˜๊ฐ’: { prefix: '', localePrefix: undefined }
    
    getPrefix(Locales.ENGLISH, { mode: "search-params" });
    // ๋ฐ˜ํ™˜๊ฐ’: { prefix: '', localePrefix: undefined }
    

    ์‹ค์šฉ์ ์ธ ์˜ˆ์ œ

    typescript
    import { getPrefix, Locales } from "intlayer";
    
    // ํŠน์ • ๋กœ์ผ€์ผ์— ์ ํ•ฉํ•œ ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ URL์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    const locale = Locales.FRENCH;
    const { prefix, localePrefix } = getPrefix(locale, {
      defaultLocale: Locales.ENGLISH,
      mode: "prefix-no-default",
    });
    
    typescript;
    // ๊ฒฝ๋กœ ๊ตฌ์„ฑ์„ ์œ„ํ•œ prefix ์‚ฌ์šฉ
    const url1 = `/${prefix}about`.replace(/\/+/g, "/");
    // ๊ฒฐ๊ณผ: "/fr/about"
    
    // locale ์‹๋ณ„์„ ์œ„ํ•œ localePrefix ์‚ฌ์šฉ
    console.log(`ํ˜„์žฌ ๋กœ์ผ€์ผ: ${localePrefix}`);
    // ์ถœ๋ ฅ: "ํ˜„์žฌ ๋กœ์ผ€์ผ: fr"
    

    ๊ด€๋ จ ํ•จ์ˆ˜

    TypeScript

    typescript
    type GetPrefixResult = {
      prefix: string; // ์Šฌ๋ž˜์‹œ๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ๋กœ ์ ‘๋‘์‚ฌ (์˜ˆ: 'fr/' ๋˜๋Š” '')
      localePrefix?: Locale; // ์Šฌ๋ž˜์‹œ ์—†์ด ๋กœ์ผ€์ผ ์‹๋ณ„์ž (์˜ˆ: 'fr' ๋˜๋Š” undefined)
    };
    
    function getPrefix(
      locale: Locales,
      options?: {
        defaultLocale?: Locales;
        mode?: "prefix-no-default" | "prefix-all" | "no-prefix" | "search-params";
      }
    ): GetPrefixResult;