์ž‘๊ฐ€:
    ์ƒ์„ฑ:2024-08-11๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ:2025-06-29

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

    ์„ค๋ช…

    getMultilingualUrls ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ URL์— ๊ฐ ์ง€์›๋˜๋Š” ๋กœ์ผ€์ผ์„ ์ ‘๋‘์‚ฌ๋กœ ๋ถ™์—ฌ ๋‹ค๊ตญ์–ด URL ๋งคํ•‘์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ ˆ๋Œ€ URL๊ณผ ์ƒ๋Œ€ URL ๋ชจ๋‘๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ œ๊ณต๋œ ๊ตฌ์„ฑ์ด๋‚˜ ๊ธฐ๋ณธ๊ฐ’์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋กœ์ผ€์ผ ์ ‘๋‘์‚ฌ๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

    ์ฃผ์š” ํŠน์ง•:

    • ํ•„์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” 1๊ฐœ์ž…๋‹ˆ๋‹ค: url
    • locales, defaultLocale, mode๋ฅผ ํฌํ•จํ•˜๋Š” ์„ ํƒ์  options ๊ฐ์ฒด
    • ํ”„๋กœ์ ํŠธ์˜ ๊ตญ์ œํ™” ์„ค์ •์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค
    • ์—ฌ๋Ÿฌ ๋ผ์šฐํŒ… ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค: prefix-no-default, prefix-all, no-prefix, search-params
    • ๋ชจ๋“  ๋กœ์ผ€์ผ์„ ํ‚ค๋กœ, ํ•ด๋‹น URL์„ ๊ฐ’์œผ๋กœ ํ•˜๋Š” ๋งคํ•‘ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค

    ํ•จ์ˆ˜ ์„œ๋ช…

    typescript
    getMultilingualUrls(
      url: string,                   // ํ•„์ˆ˜
      options?: {                    // ์„ ํƒ์‚ฌํ•ญ
        locales?: Locales[];
        defaultLocale?: Locales;
        mode?: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params';
      }
    ): StrictModeLocaleMap<string>
    

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

    ํ•„์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜

    • url: string
      • Description: ๋กœ์ผ€์ผ๋กœ ์ ‘๋‘์–ด๊ฐ€ ๋ถ™์„ ์›๋ณธ URL ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
      • Type: string
      • Required: Yes

    ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜

    • options?: object

      • Description: URL ์ง€์—ญํ™” ๋™์ž‘์„ ์œ„ํ•œ ๊ตฌ์„ฑ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
      • Type: object
      • Required: No (์„ ํƒ์‚ฌํ•ญ)

      • options.locales?: Locales[]

        • Description: ์ง€์›๋˜๋Š” ๋กœ์ผ€์ผ์˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค. ์ œ๊ณต๋˜์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์—์„œ ๊ตฌ์„ฑ๋œ ๋กœ์ผ€์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
        • Type: Locales[]
        • Default: Project Configuration
      • options.defaultLocale?: Locales

        • Description: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ ๋กœ์ผ€์ผ์ž…๋‹ˆ๋‹ค. ์ œ๊ณต๋˜์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์—์„œ ๊ตฌ์„ฑ๋œ ๊ธฐ๋ณธ ๋กœ์ผ€์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
        • Type: Locales
        • Default: Project Configuration
      • options.mode?: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'

        • Description: ๋กœ์ผ€์ผ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ URL ๋ผ์šฐํŒ… ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค. ์ œ๊ณต๋˜์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์—์„œ ๊ตฌ์„ฑ๋œ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
        • Type: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'
        • Default: Project Configuration
        • Modes:
          • prefix-no-default: ๊ธฐ๋ณธ ๋กœ์ผ€์ผ์˜ ๊ฒฝ์šฐ ์ ‘๋‘์‚ฌ ์—†์Œ, ๋‹ค๋ฅธ ๋กœ์ผ€์ผ์˜ ๊ฒฝ์šฐ ์ ‘๋‘์‚ฌ ํฌํ•จ
          • prefix-all: ๊ธฐ๋ณธ ๋กœ์ผ€์ผ์„ ํฌํ•จํ•œ ๋ชจ๋“  ๋กœ์ผ€์ผ์— ์ ‘๋‘์‚ฌ ํฌํ•จ
          • no-prefix: URL์— ๋กœ์ผ€์ผ ์ ‘๋‘์‚ฌ ์—†์Œ
          • search-params: ๋กœ์ผ€์ผ์— ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜ ์‚ฌ์šฉ (์˜ˆ: ?locale=fr)

    ๋ฐ˜ํ™˜๊ฐ’

    • ํƒ€์ž…: IConfigLocales<string>
    • ์„ค๋ช…: ๊ฐ ๋กœ์ผ€์ผ์„ ํ•ด๋‹น ๋‹ค๊ตญ์–ด URL์— ๋งคํ•‘ํ•œ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

    ์‚ฌ์šฉ ์˜ˆ์‹œ

    ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ• (ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ ์‚ฌ์šฉ)

    typescript
    import { getMultilingualUrls, Locales } from "intlayer";
    
    // ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์„ฑ์—์„œ locales, defaultLocale, mode๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค
    getMultilingualUrls("/dashboard");
    // ์ถœ๋ ฅ (ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์— en, fr์ด ์žˆ๊ณ  mode๊ฐ€ 'prefix-no-default'์ธ ๊ฒฝ์šฐ):
    // {
    //   en: "/dashboard",
    //   fr: "/fr/dashboard"
    // }
    

    ์ƒ๋Œ€ URL

    typescript
    import { getMultilingualUrls, Locales } from "intlayer";
    
    getMultilingualUrls(
      "/dashboard",
      [Locales.ENGLISH, Locales.FRENCH],
      Locales.ENGLISH,
      false
    );
    // ์ถœ๋ ฅ: {
    //   en: "/dashboard",
    //   fr: "/fr/dashboard"
    // }
    

    ์ ˆ๋Œ€ URL

    typescript
    getMultilingualUrls(
      "https://example.com/dashboard",
      [Locales.ENGLISH, Locales.FRENCH],
      Locales.ENGLISH,
      true
    );
    // ์ถœ๋ ฅ: {
    //   en: "https://example.com/en/dashboard",
    //   fr: "https://example.com/fr/dashboard"
    // }
    

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

    typescript
    // prefix-no-default: ๊ธฐ๋ณธ ๋กœ์ผ€์ผ์— ๋Œ€ํ•œ ์ ‘๋‘์‚ฌ ์—†์Œ
    getMultilingualUrls("/dashboard", {
      locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
      defaultLocale: Locales.ENGLISH,
      mode: "prefix-no-default",
    });
    // ์ถœ๋ ฅ: {
    //   en: "/dashboard",
    //   fr: "/fr/dashboard",
    //   es: "/es/dashboard"
    // }
    
    // prefix-all: ๋ชจ๋“  ๋กœ์ผ€์ผ์— ์ ‘๋‘์‚ฌ ์ถ”๊ฐ€
    getMultilingualUrls("/dashboard", {
      locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
      defaultLocale: Locales.ENGLISH,
      mode: "prefix-all",
    });
    // ์ถœ๋ ฅ: {
    //   en: "/en/dashboard",
    //   fr: "/fr/dashboard",
    //   es: "/es/dashboard"
    // }
    
    // no-prefix: URL์— ๋กœ์ผ€์ผ ์ ‘๋‘์‚ฌ ์—†์Œ
    getMultilingualUrls("/dashboard", {
      locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
      defaultLocale: Locales.ENGLISH,
      mode: "no-prefix",
    });
    // ์ถœ๋ ฅ: {
    //   en: "/dashboard",
    //   fr: "/dashboard",
    //   es: "/dashboard"
    // }
    
    // search-params: ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋กœ์ผ€์ผ ์ „๋‹ฌ
    getMultilingualUrls("/dashboard", {
      locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
      defaultLocale: Locales.ENGLISH,
      mode: "search-params",
    });
    // ์ถœ๋ ฅ: {
    //   en: "/dashboard?locale=en",
    //   fr: "/dashboard?locale=fr",
    //   es: "/dashboard?locale=es"
    // }
    

    ์˜ˆ์™ธ ์ƒํ™ฉ

    • ๋กœ์ผ€์ผ ์„ธ๊ทธ๋จผํŠธ ์—†์Œ:

      • ํ•จ์ˆ˜๋Š” ๋‹ค๊ตญ์–ด ๋งคํ•‘์„ ์ƒ์„ฑํ•˜๊ธฐ ์ „์— URL์—์„œ ๊ธฐ์กด์˜ ๋กœ์ผ€์ผ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
    • ๊ธฐ๋ณธ ๋กœ์ผ€์ผ:

      • prefixDefault๊ฐ€ false์ผ ๋•Œ, ํ•จ์ˆ˜๋Š” ๊ธฐ๋ณธ ๋กœ์ผ€์ผ์— ๋Œ€ํ•ด URL์— ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์ง€์›๋˜์ง€ ์•Š๋Š” ๋กœ์ผ€์ผ:

      • locales ๋ฐฐ์—ด์— ์ œ๊ณต๋œ ๋กœ์ผ€์ผ๋งŒ URL ์ƒ์„ฑ์— ๊ณ ๋ ค๋ฉ๋‹ˆ๋‹ค.
    • ๋ผ์šฐํŒ… ๋ชจ๋“œ:

      • 'prefix-no-default': ๊ธฐ๋ณธ ๋กœ์ผ€์ผ์€ ์ ‘๋‘์‚ฌ๊ฐ€ ์—†๊ณ , ๋‹ค๋ฅธ ๋กœ์ผ€์ผ์€ ์žˆ์Œ (์˜ˆ: /dashboard, /fr/dashboard)
      • 'prefix-all': ๋ชจ๋“  ๋กœ์ผ€์ผ์— ์ ‘๋‘์‚ฌ๊ฐ€ ์žˆ์Œ (์˜ˆ: /en/dashboard, /fr/dashboard)
      • 'no-prefix': URL์— ๋กœ์ผ€์ผ ์ ‘๋‘์‚ฌ๊ฐ€ ์—†์Œ (๋ชจ๋“  ๋กœ์ผ€์ผ์ด ๋™์ผํ•œ URL ๋ฐ˜ํ™˜)
      • 'search-params': ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด ๋กœ์ผ€์ผ ์ง€์ • (์˜ˆ: /dashboard?locale=fr)

    ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ์˜ ์‚ฌ์šฉ๋ฒ•

    ๋‹ค๊ตญ์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” locales์™€ defaultLocale๋กœ ๊ตญ์ œํ™” ์„ค์ •์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅธ ์–ธ์–ด๊ฐ€ ํ‘œ์‹œ๋˜๋„๋ก ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” getMultilingualUrls๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •์—์„œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค:

    tsx
    import { Locales, type IntlayerConfig } from "intlayer";
    
    // ์ง€์›๋˜๋Š” ๋กœ์ผ€์ผ๊ณผ ๊ธฐ๋ณธ ๋กœ์ผ€์ผ์— ๋Œ€ํ•œ ์„ค์ •
    export default {
      internationalization: {
        locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
        defaultLocale: Locales.ENGLISH,
      },
    } satisfies IntlayerConfig;
    
    export default config;
    

    ์œ„ ๊ตฌ์„ฑ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ENGLISH, FRENCH, SPANISH๋ฅผ ์ง€์› ์–ธ์–ด๋กœ ์ธ์‹ํ•˜๊ณ  ENGLISH๋ฅผ ๊ธฐ๋ณธ ์–ธ์–ด๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

    ์ด ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด getMultilingualUrls ํ•จ์ˆ˜๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ง€์› ๋กœ์ผ€์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค๊ตญ์–ด URL ๋งคํ•‘์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

    typescript
    getMultilingualUrls(
      "/dashboard",
      [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
      Locales.ENGLISH
    );
    // ์ถœ๋ ฅ:
    // {
    //   en: "/dashboard",
    //   fr: "/fr/dashboard",
    //   es: "/es/dashboard"
    // }
    
    getMultilingualUrls(
      "https://example.com/dashboard",
      [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
      Locales.ENGLISH,
      true
    );
    // ์ถœ๋ ฅ:
    // {
    //   en: "https://example.com/en/dashboard",
    //   fr: "https://example.com/fr/dashboard",
    //   es: "https://example.com/es/dashboard"
    // }
    

    getMultilingualUrls๋ฅผ ํ†ตํ•ฉํ•จ์œผ๋กœ์จ ๊ฐœ๋ฐœ์ž๋Š” ์—ฌ๋Ÿฌ ์–ธ์–ด์— ๊ฑธ์ณ ์ผ๊ด€๋œ URL ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์–ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜๊ณผ SEO๋ฅผ ๋ชจ๋‘ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.