Author:
    Creation:2025-11-16Last update:2025-11-16

    рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг: intlayer рдореЗрдВ getPrefix рдлрд╝рдВрдХреНрд╢рди

    рд╡рд┐рд╡рд░рдг

    getPrefix рдлрд╝рдВрдХреНрд╢рди рд░реВрдЯрд┐рдВрдЧ рдореЛрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рджрд┐рдП рдЧрдП locale рдХреЗ рд▓рд┐рдП URL рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ locale рдХреА рддреБрд▓рдирд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ locale рд╕реЗ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд▓рдЪреАрд▓реЗ URL рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕ рдкреНрд░рд╛рд░реВрдкреЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

    рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ:

    • рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ locale рд▓реЗрддрд╛ рд╣реИ (рдЖрд╡рд╢реНрдпрдХ)
    • рд╡реИрдХрд▓реНрдкрд┐рдХ options рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рд╕рдореЗрдВ defaultLocale рдФрд░ mode рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
    • prefix рдФрд░ localePrefix рдЧреБрдгреЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
    • рд╕рднреА рд░реВрдЯрд┐рдВрдЧ рдореЛрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ: prefix-no-default, prefix-all, no-prefix, рдФрд░ search-params
    • locale рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд▓реНрдХрд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛

    рдлрд╝рдВрдХреНрд╢рди рд╕рд┐рдЧреНрдиреЗрдЪрд░

    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

      • рд╡рд┐рд╡рд░рдг: рдЙрд╕ locale рдХреЗ рд▓рд┐рдП prefix рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрджрд┐ рдорд╛рди falsy рд╣реИ (undefined, null, рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ), рддреЛ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
      • рдкреНрд░рдХрд╛рд░: Locales
      • рдЖрд╡рд╢реНрдпрдХ: рд╣рд╛рдБ
    • options?: object

      • рд╡рд┐рд╡рд░рдг: prefix рдирд┐рд░реНрдзрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯред
      • рдкреНрд░рдХрд╛рд░: object
      • рдЖрд╡рд╢реНрдпрдХ: рдирд╣реАрдВ (рд╡реИрдХрд▓реНрдкрд┐рдХ)

      • options.defaultLocale?: Locales

        • рд╡рд┐рд╡рд░рдг: рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ localeред рдпрджрд┐ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ locale рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
        • рдкреНрд░рдХрд╛рд░: Locales
        • рдбрд┐рдлрд╝реЙрд▓реНрдЯ: Project Configuration
      • options.mode?: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'

        • рд╡рд┐рд╡рд░рдг: locale рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП URL рд░реВрдЯрд┐рдВрдЧ рдореЛрдбред рдпрджрд┐ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдореЛрдб рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
        • рдкреНрд░рдХрд╛рд░: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'
        • рдбрд┐рдлрд╝реЙрд▓реНрдЯ: Project Configuration
        • рдореЛрдбреНрд╕:
          • prefix-no-default: рдЬрдм locale рдбрд┐рдлрд╝реЙрд▓реНрдЯ locale рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рддреЛ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
          • prefix-all: рд╕рднреА locales рдХреЗ рд▓рд┐рдП prefix рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ
          • no-prefix: рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИ (URLs рдореЗрдВ рдХреЛрдИ prefix рдирд╣реАрдВ)
          • search-params: рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИ (locale рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ)

    Returns

    • рдкреНрд░рдХрд╛рд░: GetPrefixResult
    • рд╡рд┐рд╡рд░рдг: рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рд╕рдореЗрдВ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ prefix рдлреЙрд░реНрдореЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
      • prefix: рдЯреНрд░реЗрд▓рд┐рдВрдЧ рд╕реНрд▓реИрд╢ рдХреЗ рд╕рд╛рде рдкрд╛рде рдкреНрд░реАрдлрд┐рдХреНрд╕ (рдЬреИрд╕реЗ, 'fr/', '')
      • localePrefix: рд╕реНрд▓реИрд╢ рдХреЗ рдмрд┐рдирд╛ locale рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (рдЬреИрд╕реЗ, 'fr', undefined)

    рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреЛрдЧ

    рдмреБрдирд┐рдпрд╛рджреА рдЙрдкрдпреЛрдЧ

    typescript
    import { getPrefix, Locales } from "intlayer";
    
    // рдЕрдВрдЧреНрд░реЗрдЬрд╝реА locale рдХреЗ рд▓рд┐рдП рдкреНрд░реАрдлрд┐рдХреНрд╕ рдЬрд╛рдВрдЪреЗрдВ
    getPrefix(Locales.ENGLISH, {
      defaultLocale: Locales.ENGLISH,
      mode: "prefix-all",
    });
    // рд▓реМрдЯрд╛рддрд╛ рд╣реИ: { prefix: 'en/', localePrefix: 'en' }
    
    // рдлреНрд░реЗрдВрдЪ locale рдХреЗ рд▓рд┐рдП рдкреНрд░реАрдлрд┐рдХреНрд╕ рдЬрд╛рдВрдЪреЗрдВ
    getPrefix(Locales.FRENCH, {
      defaultLocale: Locales.ENGLISH,
      mode: "prefix-no-default",
    });
    // рд▓реМрдЯрд╛рддрд╛ рд╣реИ: { prefix: 'fr/', localePrefix: 'fr' }
    

    рд╡рд┐рднрд┐рдиреНрди рд░реВрдЯрд┐рдВрдЧ рдореЛрдбреНрд╕

    typescript
    import { getPrefix, Locales } from "intlayer";
    
    // prefix-all: рд╣рдореЗрд╢рд╛ рдкреНрд░реАрдлрд┐рдХреНрд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
    getPrefix(Locales.ENGLISH, {
      mode: "prefix-all",
      defaultLocale: Locales.ENGLISH,
    });
    // рд▓реМрдЯрд╛рддрд╛ рд╣реИ: { prefix: '/en', localePrefix: 'en' }
    
    // prefix-no-default: рдЬрдм locale рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рддреЛ рдХреЛрдИ рдкреНрд░реАрдлрд┐рдХреНрд╕ рдирд╣реАрдВ
    getPrefix(Locales.ENGLISH, {
      mode: "prefix-no-default",
      defaultLocale: Locales.ENGLISH,
    });
    // рд▓реМрдЯрд╛рддрд╛ рд╣реИ: { prefix: '', localePrefix: undefined }
    
    // prefix-no-default: рдЬрдм locale рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗ рднрд┐рдиреНрди рд╣реЛ рддреЛ рдкреНрд░реАрдлрд┐рдХреНрд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
    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";
    
    // рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ locale рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдкреНрд░реАрдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде URLs рдмрдирд╛рдПрдВ
    const locale = Locales.FRENCH;
    const { prefix, localePrefix } = getPrefix(locale, {
      defaultLocale: Locales.ENGLISH,
      mode: "prefix-no-default",
    });
    
    // рдкрде рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдкреНрд░реАрдлрд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
    const url1 = `/${prefix}about`.replace(/\/+/g, "/");
    // рдкрд░рд┐рдгрд╛рдо: "/fr/about"
    
    // localePrefix рдХрд╛ рдЙрдкрдпреЛрдЧ locale рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП
    console.log(`рд╡рд░реНрддрдорд╛рди locale: ${localePrefix}`);
    // рдЖрдЙрдЯрдкреБрдЯ: "рд╡рд░реНрддрдорд╛рди locale: fr"
    

    рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рдВрдХреНрд╢рди

    • getLocalizedUrl: рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ locale рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдпрдХреГрдд URL рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ
    • getMultilingualUrls: рд╕рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП locales рдХреЗ рд▓рд┐рдП URLs рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ

    TypeScript

    typescript
    type GetPrefixResult = {
      prefix: string; // рдЯреНрд░реЗрд▓рд┐рдВрдЧ рд╕реНрд▓реИрд╢ рдХреЗ рд╕рд╛рде рдкрде рдкреНрд░реАрдлрд┐рдХреНрд╕ (рдЬреИрд╕реЗ, 'fr/' рдпрд╛ '')
      localePrefix?: Locale; // рд╕реНрд▓реИрд╢ рдХреЗ рдмрд┐рдирд╛ locale рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (рдЬреИрд╕реЗ, 'fr' рдпрд╛ undefined)
    };
    
    function getPrefix(
      locale: Locales,
      options?: {
        defaultLocale?: Locales;
        mode?: "prefix-no-default" | "prefix-all" | "no-prefix" | "search-params";
      }
    ): GetPrefixResult;