Author:
    Creation:2026-01-22Last update:2026-01-22

    рдкреНрд░рд▓реЗрдЦрди: getCanonicalPath рдлрд╝рдВрдХреНрд╢рди intlayer рдореЗрдВ

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

    getCanonicalPath рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд▓реЛрдХрд▓рд╛рдЗрдЬрд╝реНрдб URL рдкрд╛рде (рдЙрджрд╛., /a-propos) рдХреЛ рдЙрд╕рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХреИрдиреЛрдирд┐рдХрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд╛рде (рдЙрджрд╛., /about) рдореЗрдВ рд░реЗрдЬрд╝реЙрд▓реНрд╡ рдХрд░рддрд╛ рд╣реИред рдпрд╣ routers рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ URL рднрд╛рд╖рд╛ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд╣реА internal route рдореИрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

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

    • [param] рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реВрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред
    • рдЖрдкрдХреА configuration рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╕реНрдЯрдо rewrite рдирд┐рдпрдореЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл localized paths рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
    • рдпрджрд┐ рдХреЛрдИ рдореЗрд▓ рдЦрд╛рддрд╛ rewrite рдирд┐рдпрдо рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдореВрд▓ path рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред

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

    typescript
    getCanonicalPath(
      localizedPath: string,         // рдЖрд╡рд╢реНрдпрдХ
      locale: Locales,               // рдЖрд╡рд╢реНрдпрдХ
      rewriteRules?: RoutingConfig['rewrite'] // рд╡реИрдХрд▓реНрдкрд┐рдХ
    ): string
    

    рдкреИрд░рд╛рдореАрдЯрд░

    рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░

    • localizedPath: string

      • рд╡рд┐рд╡рд░рдг: рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдкрде (рдЙрджрд╛., /a-propos)ред
      • рдкреНрд░рдХрд╛рд░: string
      • рдЖрд╡рд╢реНрдпрдХ: рд╣рд╛рдБ
    • locale: Locales

      • рд╡рд┐рд╡рд░рдг: рд╡рд╣ locale рдЬреЛ рд░рд┐рдЬреЙрд▓реНрд╡ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдкрде рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
      • рдкреНрд░рдХрд╛рд░: Locales
      • рдЖрд╡рд╢реНрдпрдХ: рд╣рд╛рдБ

    рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░

    • rewriteRules?: RoutingConfig['rewrite']
      • рд╡рд┐рд╡рд░рдг: рдХрд╕реНрдЯрдо rewrite рдирд┐рдпрдореЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯред рдпрджрд┐ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА configuration рдореЗрдВ рдореМрдЬреВрдж routing.rewrite рдкреНрд░реЙрдкрд░реНрдЯреА рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдЧрд╛ред
      • рдкреНрд░рдХрд╛рд░: RoutingConfig['rewrite']
      • рдбрд┐рдлрд╝реЙрд▓реНрдЯ: configuration.routing.rewrite

    рд░рд┐рдЯрд░реНрди

    • рдкреНрд░рдХрд╛рд░: string
    • рд╡рд┐рд╡рд░рдг: рдЖрдВрддрд░рд┐рдХ canonical рдкрдеред

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

    рдмреБрдирд┐рдпрд╛рджреА рдЙрдкрдпреЛрдЧ (рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде)

    рдпрджрд┐ рдЖрдкрдиреЗ рдЕрдкрдиреЗ intlayer.config.ts рдореЗрдВ рдХрд╕реНрдЯрдо rewrites рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рд╣реИрдВ:

    typescript
    import { getCanonicalPath, Locales } from "intlayer";
    
    // рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди: { '/about': { en: '/about', fr: '/a-propos' } }
    getCanonicalPath("/a-propos", Locales.FRENCH);
    // рдЖрдЙрдЯрдкреБрдЯ: "/about"
    
    getCanonicalPath("/about", Locales.ENGLISH);
    // рдЖрдЙрдЯрдкреБрдЯ: "/about"
    

    рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реВрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ

    typescript
    import { getCanonicalPath, Locales } from "intlayer";
    
    // рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди: { '/product/[id]': { en: '/product/[id]', fr: '/produit/[id]' } }
    getCanonicalPath("/produit/123", Locales.FRENCH);
    // рдЖрдЙрдЯрдкреБрдЯ: "/product/123"
    

    рдореИрдиреБрдЕрд▓ рд░реАрд░рд╛рдЗрдЯ рдирд┐рдпрдо

    рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореИрдиреБрдЕрд▓ рд░реАрд░рд╛рдЗрдЯ рдирд┐рдпрдо рднреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ:

    typescript
    import { getCanonicalPath, Locales } from "intlayer";
    
    const manualRules = {
      "/contact": {
        en: "/contact-us",
        fr: "/contactez-nous",
      },
    };
    
    getCanonicalPath("/contactez-nous", Locales.FRENCH, manualRules);
    // Output: "/contact"
    

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

    • getLocalizedPath: рдХрд┐рд╕реА canonical path рдХреЛ рдЙрд╕рдХреЗ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рд╕рдордХрдХреНрд╖ рдореЗрдВ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
    • getLocalizedUrl: рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдиреАрдпрдХреГрдд URL рдмрдирд╛рддрд╛ рд╣реИ (рдЬрд┐рд╕рдореЗрдВ protocol, host, рдФрд░ locale prefix рд╢рд╛рдорд┐рд▓ рд╣реИрдВ)ред