Strona głównaPiaskownicaPrezentacjaAplikacjaDokumentacjaBlog
    • Englishangielski
      EN
    • русскийrosyjski
      RU
    • 日本語japoński
      JA
    • françaisfrancuski
      FR
    • 한국어koreański
      KO
    • 中文chiński
      ZH
    • españolhiszpański
      ES
    • Deutschniemiecki
      DE
    • العربيةarabski
      AR
    • italianowłoski
      IT
    • British Englishangielski brytyjski
      EN-GB
    • portuguêsportugalski
      PT
    • हिन्दीhindi
      HI
    • Türkçeturecki
      TR
    • polskipolski
      PL
    • Indonesiaindonezyjski
      ID
    • Tiếng Việtwietnamski
      VI
    • українськаukraiński
      UK
    /
    Filtruj dokumenty według frameworka
    Alt+←
    Dlaczego Intlayer?
    Zacząć
    Koncepcja
    • Jak działa Intlayer
    • Konfiguracja
    • TestFillBuildWatchExtractLoginPushPullConfigurationListVersionEditorLiveDebugDoc ReviewDoc TranslateSDK
    • Edytor wizualny
    • CMS
    • Integracja CI/CD
    • TłumaczenieLiczba mnogaWyliczenieWarunekPłećWstawieniePlikZagnieżdżanieMarkdownHTMLPobieranie funkcji
    • Plik dla każdej lokalizacji
    • Kompilator
    • Automatyczne wypełnianie
    • Testowanie
    • Optymalizacja pakietu
    Środowisko
    • Next.js 14 i App Router
      Next.js 15
      Next.js bez locale URL
      Next.js dan Page Router
      Kompilator
    • Tanstack Start Solid
    • Astro dan React
      Astro dan Svelte
      Astro dan Vue
      Astro dan Solid
      Astro dan Preact
      Astro dan Lit
      Astro dan Vanilla JS
    • React Router v7
      React Router v7 (fs-routes)
      Compiler
    • Nuxt dan Vue
    • Vite dan Solid
    • SvelteKit
    • Vite dan Preact
    • Vite dan Vanilla JS
    • Vite dan Lit
    • Angular 19 (Webpack)
      Analog
    • React CRA
    • React Native dan Expo
    • Express.js
      NestJS
      Fastify
      Hono
      Adonis
    • Lynx dan React
    Plugins
    • JSON
    • gettext (.po)
    Rozszerzenie VS Code
    Agent
    • Serwer MCP
    • Umiejętności agenta
    Wersje
    • v8
    • v7
    • v6
    Benchmark
    • Next.js
    • TanStack
    • Vue
    • Solid
    • Svelte
    Blog
    Zadaj pytanie
    1. Documentation
    2. Koncepcja
    3. Custom_url_rewrites
    \n\n ```\n\n \n \n \n ```tsx\n import { useRewriteURL } from \"solid-intlayer\";\n\n const Layout = (props) => {\n useRewriteURL();\n return <>{props.children};\n };\n ```\n\n \n \n \n ```svelte\n \n\n ```\n\n \n\n\n## Integracja routera i proxy\n\nProxy serwerowe Intlayer (Vite i Next.js) automatycznie obsługują niestandardowe przepisywania (rewrites), aby zapewnić spójność SEO.\n\n1. **Wewnętrzne przepisywania**: Gdy użytkownik odwiedza `/fr/a-propos`, proxy wewnętrznie mapuje to na `/fr/about`, aby Twój framework dopasował właściwą trasę.\n2. **Autorytatywne przekierowania**: Jeśli użytkownik ręcznie wpisze `/fr/about`, proxy zwraca przekierowanie 301/302 do `/fr/a-propos`, zapewniając, że wyszukiwarki indeksują tylko jedną wersję strony.\n\n### Integracja z Next.js\n\nIntegracja z Next.js jest w pełni obsługiwana przez middleware `intlayerProxy`.\n\n```typescript fileName=\"middleware.ts\"\nimport { intlayerProxy } from \"next-intlayer/middleware\";\nimport { NextRequest } from \"next/server\";\n\nexport function middleware(request: NextRequest) {\n return intlayerProxy(request);\n}\n```\n\n### Integracja z Vite\n\nDla SolidJS, Vue i Svelte wtyczka Vite `intlayerProxy` zarządza przepisywaniami (rewrites) podczas developmentu.\n\n```typescript fileName=\"vite.config.ts\"\nimport { defineConfig } from \"vite\";\nimport { intlayerProxy } from \"vite-intlayer\";\n\nexport default defineConfig({\n plugins: [intlayerProxy()],\n});\n```\n\n## Kluczowe funkcje\n\n### 1. Przepisywania w wielu kontekstach\n\nKażdy formatter generuje `RewriteObject` zawierający wyspecjalizowane reguły dla różnych odbiorców:\n\n- `url`: Optymalizowany pod generowanie URL po stronie klienta (usuwa segmenty lokalizacji).\n- `nextjs`: Zachowuje `[locale]` dla middleware Next.js.\n- `vite`: Zachowuje `:locale` dla proxy Vite.\n\n### 2. Automatyczna normalizacja wzorców\n\nIntlayer wewnętrznie normalizuje wszystkie składnie wzorców (np. konwertując `[param]` na `:param`), dzięki czemu dopasowywanie pozostaje spójne niezależnie od frameworka źródłowego.\n\n### 3. Autorytatywne adresy URL (SEO)\n\nWymuszając przekierowania ze ścieżek kanonicznych do przyjaznych aliasów, Intlayer zapobiega problemom z duplikacją treści i poprawia wykrywalność serwisu.\n\n## Podstawowe narzędzia\n\n- `getLocalizedUrl(url, locale)`: Generuje zlokalizowany URL z uwzględnieniem rewrite rules.\n- `getCanonicalPath(path, locale)`: Rozwiązuje zlokalizowany URL z powrotem do wewnętrznej ścieżki kanonicznej.\n- `getRewritePath(pathname, locale)`: Wykrywa, czy `pathname` wymaga poprawy do bardziej przyjaznego zlokalizowanego aliasu.\n","about":"Dowiedz się, jak skonfigurować i używać niestandardowego przepisywania adresów URL w Intlayer, aby definiować ścieżki specyficzne dla lokalizacji.","url":"https://intlayer.org/pl/doc/concept/custom_url_rewrites","datePublished":"13-08-2024","dateModified":"26-01-2026","keywords":"Niestandardowe przepisywanie URL, Routing, Internacjonalizacja, i18n","license":"https://raw.githubusercontent.com/aymericzip/intlayer/refs/heads/main/LICENSE","audience":{"@type":"Audience","audienceType":"Programiści, Menedżerowie treści"}}
    Data utworzenia:2024-08-13Ostatnia aktualizacja:2026-01-26
    Prześlij ten dokument do swojego ulubionego asystenta AI
    ChatGPT
    Claude
    DeepSeek
    Google AI mode
    Gemini
    Perplexity
    Mistral
    Grok

    Zadaj pytanie i otrzymaj streszczenie dokumentu, odwołując się do tej strony i wybranego dostawcy AI

    Historia wersji

    1. "Implement centralized URL rewrites with framework-specific formatters and the useRewriteURL hook."
      v8.0.025.01.2026

    Treść tej strony została przetłumaczona przy użyciu sztucznej inteligencji.

    Zobacz ostatnią wersję oryginalnej treści w języku angielskim
    Edytuj tę dokumentację

    Jeśli masz pomysł na ulepszenie tej dokumentacji, zachęcamy do przesłania pull requesta na GitHubie.

    Link do dokumentacji na GitHubie
    Kopiuj

    Kopiuj dokument Markdown do schowka

    Implementacja niestandardowego przepisywania URL

    Intlayer obsługuje niestandardowe przepisywanie adresów URL, pozwalając zdefiniować ścieżki specyficzne dla danej lokalizacji, które różnią się od standardowej struktury /locale/path. Umożliwia to używanie adresów URL takich jak /about dla angielskiego i /a-propos dla francuskiego, przy zachowaniu kanonicznej logiki wewnętrznej aplikacji.

    Konfiguracja

    Niestandardowe rewrites konfigurujesz w sekcji routing w pliku intlayer.config.ts, używając formaterów specyficznych dla danego frameworka. Te formatery dostarczają poprawnej składni dla wybranego routera.

    intlayer.config.ts
    Kopiuj kod

    Skopiuj kod do schowka

    import { Locales, type IntlayerConfig } from "intlayer";import { nextjsRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-no-default",    rewrite: nextjsRewrite({      "/[locale]/about": {        fr: "/[locale]/a-propos",        es: "/[locale]/acerca-de",      },      "/[locale]/products/[id]": {        fr: "/[locale]/produits/[id]",        es: "/[locale]/productos/[id]",      },    }),  },};export default config;
    intlayer.config.ts
    Kopiuj kod

    Skopiuj kod do schowka

    import { Locales, type IntlayerConfig } from "intlayer";import { reactRouterRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-all",    rewrite: reactRouterRewrite({      "/:locale/about": {        fr: "/:locale/a-propos",        es: "/:locale/acerca-de",      },      "/:locale/products/:id": {        fr: "/:locale/produits/:id",        es: "/:locale/productos/:id",      },    }),  },};export default config;
    intlayer.config.ts
    Kopiuj kod

    Skopiuj kod do schowka

    import { Locales, type IntlayerConfig } from "intlayer";import { tanstackRouterRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-all",    rewrite: tanstackRouterRewrite({      "/$locale/about": {        fr: "/$locale/a-propos",        es: "/$locale/acerca-de",      },      "/$locale/products/$id": {        fr: "/$locale/produits/$id",        es: "/$locale/productos/$id",      },    }),  },};export default config;
    intlayer.config.ts
    Kopiuj kod

    Skopiuj kod do schowka

    import { Locales, type IntlayerConfig } from "intlayer";import { vueRouterRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ... (inne ustawienia)  routing: {    mode: "prefix-all",    rewrite: vueRouterRewrite({      "/:locale/about": {        fr: "/:locale/a-propos",        es: "/:locale/acerca-de",      },      "/:locale/products/:id": {        fr: "/:locale/produits/:id",        es: "/:locale/productos/:id",      },    }),  },};export default config;
    intlayer.config.ts
    Kopiuj kod

    Skopiuj kod do schowka

    import { Locales, type IntlayerConfig } from "intlayer";import { svelteKitRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-all",    rewrite: svelteKitRewrite({      "/[locale]/about": {        fr: "/[locale]/a-propos",        es: "/[locale]/acerca-de",      },      "/[locale]/products/[id]": {        fr: "/[locale]/produits/[id]",        es: "/[locale]/productos/[id]",      },    }),  },};export default config;
    intlayer.config.ts
    Kopiuj kod

    Skopiuj kod do schowka

    import { Locales, type IntlayerConfig } from "intlayer";import { solidRouterRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-all",    rewrite: solidRouterRewrite({      "/:locale/about": {        fr: "/:locale/a-propos",        es: "/:locale/acerca-de",      },      "/:locale/products/:id": {        fr: "/:locale/produits/:id",        es: "/:locale/productos/:id",      },    }),  },};export default config;
    intlayer.config.ts
    Kopiuj kod

    Skopiuj kod do schowka

    import { Locales, type IntlayerConfig } from "intlayer";import { nuxtRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-all",    rewrite: nuxtRewrite({      "/[locale]/about": {        fr: "/[locale]/a-propos",        es: "/[locale]/acerca-de",      },      "/[locale]/products/[id]": {        fr: "/[locale]/produits/[id]",        es: "/[locale]/productos/[id]",      },    }),  },};export default config;

    Dostępne formattery

    Intlayer udostępnia formattery dla wszystkich popularnych frameworków:

    • nextjsRewrite: Dla Next.js App Router. Obsługuje [slug], [...slug] (1+), oraz [[...slug]] (0+).
    • svelteKitRewrite: Dla SvelteKit. Obsługuje [slug], [...path] (0+), oraz [[optional]] (0-1).
    • reactRouterRewrite: Dla React Router. Obsługuje :slug i * (0+).
    • vueRouterRewrite: Dla Vue Router 4. Obsługuje :slug, :slug? (0-1), :slug* (0+), oraz :slug+ (1+).
    • solidRouterRewrite: Dla Solid Router. Obsługuje :slug i *slug (0+).
    • tanstackRouterRewrite: Dla TanStack Router. Obsługuje $slug i * (0+).
    • nuxtRewrite: Dla Nuxt 3. Obsługuje [slug] i [...slug] (0+).
    • viteRewrite: Ogólny formatter dla projektów opartych na Vite. Normalizuje składnię dla proxy Vite.

    Zaawansowane wzorce

    Intlayer wewnętrznie normalizuje te wzorce do zunifikowanej składni, co pozwala na zaawansowane dopasowywanie i generowanie ścieżek:

    • Opcjonalne segmenty: [[optional]] (SvelteKit) lub :slug? (Vue/React) są obsługiwane.
    • Catch-all (zero lub więcej): [[...slug]] (Next.js), [...path] (SvelteKit/Nuxt) lub * (React/TanStack) pozwalają na dopasowanie wielu segmentów.
    • Mandatory Catch-all (jeden lub więcej): [...slug] (Next.js) lub :slug+ (Vue) zapewniają obecność przynajmniej jednego segmentu.

    Korekta URL po stronie klienta: useRewriteURL

    Aby zapewnić, że pasek adresu przeglądarki zawsze odzwierciedla „ładny” zlokalizowany URL, Intlayer udostępnia hook useRewriteURL. Hook ten dyskretnie aktualizuje URL za pomocą window.history.replaceState, gdy użytkownik trafia na kanoniczną ścieżkę.

    Użycie w frameworkach

    tsx
    Kopiuj kod

    Skopiuj kod do schowka

    'use client';import { useRewriteURL } from "next-intlayer";const MyLayout = ({ children }) => {  useRewriteURL(); // Automatycznie koryguje '/fr/about' na '/fr/a-propos'  return <>{children}</>;};
    tsx
    Kopiuj kod

    Skopiuj kod do schowka

    'use client';import { useRewriteURL } from "react-intlayer";const MyLayout = ({ children }) => {  useRewriteURL(); // Automatycznie koryguje /fr/about na /fr/a-propos  return <>{children}</>;};
    vue
    Kopiuj kod

    Skopiuj kod do schowka

    <script setup>import { useRewriteURL } from "vue-intlayer";useRewriteURL();</script>
    tsx
    Kopiuj kod

    Skopiuj kod do schowka

    import { useRewriteURL } from "solid-intlayer";const Layout = (props) => {  useRewriteURL();  return <>{props.children}</>;};
    svelte
    Kopiuj kod

    Skopiuj kod do schowka

    <script>import { useRewriteURL } from "svelte-intlayer";useRewriteURL();</script>

    Integracja routera i proxy

    Proxy serwerowe Intlayer (Vite i Next.js) automatycznie obsługują niestandardowe przepisywania (rewrites), aby zapewnić spójność SEO.

    1. Wewnętrzne przepisywania: Gdy użytkownik odwiedza /fr/a-propos, proxy wewnętrznie mapuje to na /fr/about, aby Twój framework dopasował właściwą trasę.
    2. Autorytatywne przekierowania: Jeśli użytkownik ręcznie wpisze /fr/about, proxy zwraca przekierowanie 301/302 do /fr/a-propos, zapewniając, że wyszukiwarki indeksują tylko jedną wersję strony.

    Integracja z Next.js

    Integracja z Next.js jest w pełni obsługiwana przez middleware intlayerProxy.

    middleware.ts
    Kopiuj kod

    Skopiuj kod do schowka

    import { intlayerProxy } from "next-intlayer/middleware";import { NextRequest } from "next/server";export function middleware(request: NextRequest) {  return intlayerProxy(request);}

    Integracja z Vite

    Dla SolidJS, Vue i Svelte wtyczka Vite intlayerProxy zarządza przepisywaniami (rewrites) podczas developmentu.

    vite.config.ts
    Kopiuj kod

    Skopiuj kod do schowka

    import { defineConfig } from "vite";import { intlayerProxy } from "vite-intlayer";export default defineConfig({  plugins: [intlayerProxy()],});

    Kluczowe funkcje

    1. Przepisywania w wielu kontekstach

    Każdy formatter generuje RewriteObject zawierający wyspecjalizowane reguły dla różnych odbiorców:

    • url: Optymalizowany pod generowanie URL po stronie klienta (usuwa segmenty lokalizacji).
    • nextjs: Zachowuje [locale] dla middleware Next.js.
    • vite: Zachowuje :locale dla proxy Vite.

    2. Automatyczna normalizacja wzorców

    Intlayer wewnętrznie normalizuje wszystkie składnie wzorców (np. konwertując [param] na :param), dzięki czemu dopasowywanie pozostaje spójne niezależnie od frameworka źródłowego.

    3. Autorytatywne adresy URL (SEO)

    Wymuszając przekierowania ze ścieżek kanonicznych do przyjaznych aliasów, Intlayer zapobiega problemom z duplikacją treści i poprawia wykrywalność serwisu.

    Podstawowe narzędzia

    • getLocalizedUrl(url, locale): Generuje zlokalizowany URL z uwzględnieniem rewrite rules.
    • getCanonicalPath(path, locale): Rozwiązuje zlokalizowany URL z powrotem do wewnętrznej ścieżki kanonicznej.
    • getRewritePath(pathname, locale): Wykrywa, czy pathname wymaga poprawy do bardziej przyjaznego zlokalizowanego aliasu.
    Dlaczego Intlayer?
    Alt+→

    Na tej stronie

      Dyskusje są anonimowe i regularnie przeglądane w celu rozwiązania typowych problemów. Podziel się pomysłami na funkcje, opinią o dokumentacji lub czymkolwiek związanym z Intlayer, wykorzystujemy te informacje do kształtowania naszej mapy drogowej i ulepszania produktu.

      import { Locales, type IntlayerConfig } from "intlayer";import { nextjsRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-no-default",    rewrite: nextjsRewrite({      "/[locale]/about": {        fr: "/[locale]/a-propos",        es: "/[locale]/acerca-de",      },      "/[locale]/products/[id]": {        fr: "/[locale]/produits/[id]",        es: "/[locale]/productos/[id]",      },    }),  },};export default config;
      import { Locales, type IntlayerConfig } from "intlayer";import { reactRouterRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-all",    rewrite: reactRouterRewrite({      "/:locale/about": {        fr: "/:locale/a-propos",        es: "/:locale/acerca-de",      },      "/:locale/products/:id": {        fr: "/:locale/produits/:id",        es: "/:locale/productos/:id",      },    }),  },};export default config;
      import { Locales, type IntlayerConfig } from "intlayer";import { tanstackRouterRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-all",    rewrite: tanstackRouterRewrite({      "/$locale/about": {        fr: "/$locale/a-propos",        es: "/$locale/acerca-de",      },      "/$locale/products/$id": {        fr: "/$locale/produits/$id",        es: "/$locale/productos/$id",      },    }),  },};export default config;
      import { Locales, type IntlayerConfig } from "intlayer";import { vueRouterRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ... (inne ustawienia)  routing: {    mode: "prefix-all",    rewrite: vueRouterRewrite({      "/:locale/about": {        fr: "/:locale/a-propos",        es: "/:locale/acerca-de",      },      "/:locale/products/:id": {        fr: "/:locale/produits/:id",        es: "/:locale/productos/:id",      },    }),  },};export default config;
      import { Locales, type IntlayerConfig } from "intlayer";import { svelteKitRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-all",    rewrite: svelteKitRewrite({      "/[locale]/about": {        fr: "/[locale]/a-propos",        es: "/[locale]/acerca-de",      },      "/[locale]/products/[id]": {        fr: "/[locale]/produits/[id]",        es: "/[locale]/productos/[id]",      },    }),  },};export default config;
      import { Locales, type IntlayerConfig } from "intlayer";import { solidRouterRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-all",    rewrite: solidRouterRewrite({      "/:locale/about": {        fr: "/:locale/a-propos",        es: "/:locale/acerca-de",      },      "/:locale/products/:id": {        fr: "/:locale/produits/:id",        es: "/:locale/productos/:id",      },    }),  },};export default config;
      import { Locales, type IntlayerConfig } from "intlayer";import { nuxtRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-all",    rewrite: nuxtRewrite({      "/[locale]/about": {        fr: "/[locale]/a-propos",        es: "/[locale]/acerca-de",      },      "/[locale]/products/[id]": {        fr: "/[locale]/produits/[id]",        es: "/[locale]/productos/[id]",      },    }),  },};export default config;
      'use client';import { useRewriteURL } from "next-intlayer";const MyLayout = ({ children }) => {  useRewriteURL(); // Automatycznie koryguje '/fr/about' na '/fr/a-propos'  return <>{children}</>;};
      'use client';import { useRewriteURL } from "react-intlayer";const MyLayout = ({ children }) => {  useRewriteURL(); // Automatycznie koryguje /fr/about na /fr/a-propos  return <>{children}</>;};
      <script setup>import { useRewriteURL } from "vue-intlayer";useRewriteURL();</script>
      import { useRewriteURL } from "solid-intlayer";const Layout = (props) => {  useRewriteURL();  return <>{props.children}</>;};
      <script>import { useRewriteURL } from "svelte-intlayer";useRewriteURL();</script>
      import { intlayerProxy } from "next-intlayer/middleware";import { NextRequest } from "next/server";export function middleware(request: NextRequest) {  return intlayerProxy(request);}
      import { defineConfig } from "vite";import { intlayerProxy } from "vite-intlayer";export default defineConfig({  plugins: [intlayerProxy()],});