Creation:2024-12-07Last update:2026-05-31

    Przetłumacz swoją stronę Next.js i Page Router za pomocą Intlayer | Internacjonalizacja (i18n)

    ide.intlayer.org

    Spis treści

    Dlaczego Interlayer zamiast alternatyw?

    W porównaniu do głównych rozwiązań, takich jak next-intl czy i18next, Intlayer jest rozwiązaniem wyposażonym w zintegrowane optymalizacje, takie jak:

    Pełne pokrycie Next.js

    Intlayer jest zoptymalizowany do współpracy z Server Components w celu wydajnego renderowania i jest w pełni kompatybilny z Turbopack. Nie blokuje renderowania statycznego i oferuje oprogramowanie pośredniczące oraz wszystkie funkcje potrzebne do skalowania internacjonalizacji (i18n).

    Intlayer jest kompatybilny z Next.js 12, 13, 14, 15 i 16. Jeśli używasz routera Next.js Pages Router, możesz zapoznać się z tym [przewodnikiem] (/pl/doc/environment/nextjs/next-with-page-router). Routing lokalny jest przydatny ze względu na SEO, rozmiar bundle'a i wydajność. Jeśli go nie potrzebujesz, możesz zapoznać się z tym przewodnikiem. W przypadku Next.js 12, 13, 14 i 15 z App Router zapoznaj się z tym [przewodnikiem] (/pl/doc/environment/nextjs/14).

    Rozmiar bundle'a

    Zamiast ładować ogromne pliki JSON na swoje strony, ładuj tylko niezbędną treść. Intlayer pomaga zmniejszyć rozmiary bundle'a i stron nawet o 50%.

    Łatwość konserwacji

    Określanie zakresu zawartości aplikacji ułatwia konserwację aplikacji na dużą skalę. Możesz powielić lub usunąć pojedynczy folder funkcji bez obciążania psychicznego koniecznością przeglądania całej bazy kodu zawartości. Dodatkowo Inlayer jest w pełni napisany, aby zapewnić dokładność treści.

    Agent AI

    Wspólna lokalizacja treści zmniejsza potrzebny kontekst dzięki modelom dużego języka (LLM). Intlayer zawiera także zestaw narzędzi, taki jak CLI do sprawdzania brakujących tłumaczeńLSP, MCP i umiejętności agenta, aby praca programisty (DX) była jeszcze płynniejsza dla agentów AI.

    Automatyzacja

    Korzystaj z automatyzacji, aby tłumaczyć w swoim potoku CI/CD przy użyciu wybranego LLM na koszt dostawcy sztucznej inteligencji. Intlayer oferuje także kompilator do automatyzacji ekstrakcji treści, a także [platformę internetową] (/pl/doc/concept/cms), która pomaga tłumaczyć w tle.

    Wydajność

    Łączenie ogromnych plików JSON z komponentami może prowadzić do problemów z wydajnością i reaktywnością. Inlayer optymalizuje ładowanie treści w czasie kompilacji.

    Skalowanie bez użycia dewelopera

    Więcej niż tylko rozwiązanie i18n, Intlayer zapewnia samodzielny edytor wizualny i pełny CMS, który pomoże Ci zarządzać wielojęzyczną treścią w w czasie rzeczywistym, dzięki czemu współpraca z tłumaczami, copywriterami i innymi członkami zespołu będzie płynna. Treść może być przechowywana lokalnie i/lub zdalnie.


    Przewodnik krok po kroku: Konfiguracja Intlayer w aplikacji Next.js z użyciem Page Router

    1. Instalacja zależności

      Zainstaluj niezbędne pakiety, używając preferowanego menedżera pakietów:

      bash
      npm install intlayer next-intlayernpx intlayer init
      • intlayer

        Główny pakiet, który dostarcza narzędzia do internacjonalizacji dla zarządzania konfiguracją, tłumaczeń, deklaracji treści, transpilecji oraz poleceń CLI.

      • next-intlayer

        Pakiet integrujący Intlayer z Next.js. Zapewnia dostawców kontekstu oraz hooki do internacjonalizacji w Next.js. Dodatkowo zawiera wtyczkę Next.js do integracji Intlayer z Webpack lub Turbopack, a także middleware do wykrywania preferowanego języka użytkownika, zarządzania ciasteczkami oraz obsługi przekierowań URL.

    2. Skonfiguruj swój projekt

      Utwórz plik konfiguracyjny, aby zdefiniować języki obsługiwane przez Twoją aplikację:

      intlayer.config.ts
      import { Locales, type IntlayerConfig } from "intlayer";
      
      const config: IntlayerConfig = {
        internationalization: {
          locales: [
            Locales.ENGLISH,
            Locales.FRENCH,
            Locales.SPANISH,
            // Dodaj tutaj inne swoje lokalizacje
          ],
          defaultLocale: Locales.ENGLISH,
        },
      };
      
      export default config;
      Za pomocą tego pliku konfiguracyjnego możesz ustawić lokalizowane adresy URL, przekierowania w middleware, nazwy ciasteczek, lokalizację i rozszerzenie deklaracji zawartości, wyłączyć logi Intlayer w konsoli i wiele więcej. Pełną listę dostępnych parametrów znajdziesz w dokumentacji konfiguracyjnej.
    3. Integracja Intlayer z konfiguracją Next.js

      Zmodyfikuj konfigurację Next.js, aby włączyć Intlayer:

      next.config.mjs
      import { withIntlayer } from "next-intlayer/server";/** @type {import('next').NextConfig} */const nextConfig = {  // Twoja istniejąca konfiguracja Next.js};export default withIntlayer(nextConfig);
      Wtyczka Next.js withIntlayer() służy do integracji Intlayer z Next.js. Zapewnia budowanie plików deklaracji zawartości oraz monitoruje je w trybie deweloperskim. Definiuje zmienne środowiskowe Intlayer w środowiskach Webpack lub Turbopack. Dodatkowo udostępnia aliasy optymalizujące wydajność oraz zapewnia kompatybilność z komponentami serwerowymi.

      Funkcja withIntlayer() jest funkcją zwracającą promise. Jeśli chcesz użyć jej z innymi wtyczkami, możesz ją awaitować. Przykład:

      tsx
      const nextConfig = await withIntlayer(nextConfig);const nextConfigWithOtherPlugins = withOtherPlugins(nextConfig);export default nextConfigWithOtherPlugins;
    4. Skonfiguruj Middleware do wykrywania lokalizacji

      Skonfiguruj middleware, aby automatycznie wykrywać i obsługiwać preferowaną lokalizację użytkownika:

      src/middleware.ts
      export { intlayerProxy as middleware } from "next-intlayer/middleware";
      
      export const config = {
        matcher:
          "/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
      };
      Dostosuj parametr matcher, aby odpowiadał trasom Twojej aplikacji. Więcej informacji znajdziesz w dokumentacji Next.js dotyczącej konfigurowania matcher.
    5. Zdefiniuj dynamiczne trasy lokalizacji

      Zaimplementuj dynamiczne routowanie, aby serwować zlokalizowane treści w zależności od lokalizacji użytkownika.

      1. Utwórz strony specyficzne dla lokalizacji:

        Zmień nazwę głównego pliku strony, aby zawierał dynamiczny segment [locale].

        bash
        mv src/pages/index.tsx src/pages/[locale]/index.tsx
      2. Zaktualizuj _app.tsx, aby obsługiwał lokalizację:

        Zmodyfikuj swój plik _app.tsx, aby uwzględnić providery Intlayer.

        src/pages/_app.tsx
        import type { FC } from "react";import type { AppProps } from "next/app";import { IntlayerClientProvider } from "next-intlayer";const App = FC<AppProps>({ Component, pageProps }) => {  const { locale } = pageProps;  return (    <IntlayerClientProvider locale={locale}>      <Component {...pageProps} />    </IntlayerClientProvider>  );}export default MyApp;
      3. Skonfiguruj getStaticPaths i getStaticProps:

        W pliku [locale]/index.tsx zdefiniuj ścieżki i propsy, aby obsłużyć różne lokalizacje.

      src/pages/[locale]/index.tsx
      import type { FC } from "react";
      import type { GetStaticPaths, GetStaticProps } from "next";
      import { type Locales, getConfiguration } from "intlayer";
      
      const HomePage: FC = () => <div>{/* Twoja zawartość tutaj */}</div>;
      
      export const getStaticPaths: GetStaticPaths = () => {
        const { internationalization } = getConfiguration();
        const { locales } = internationalization;
      
        const paths = locales.map((locale) => ({
          params: { locale },
        }));
      
        return { paths, fallback: false };
      };
      
      export const getStaticProps: GetStaticProps = ({ params }) => {
        const locale = params?.locale as string;
      
        return {
          props: {
            locale,
          },
        };
      };
      
      export default HomePage;
      getStaticPaths i getStaticProps zapewniają, że Twoja aplikacja w Next.js Page Router wstępnie buduje niezbędne strony dla wszystkich lokalizacji. Takie podejście zmniejsza obciążenie podczas działania aplikacji i prowadzi do lepszego doświadczenia użytkownika. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją Next.js dotyczącą getStaticPaths oraz getStaticProps.
    6. Zadeklaruj swoją zawartość

      Utwórz i zarządzaj deklaracjami zawartości, aby przechowywać tłumaczenia.

      src/pages/[locale]/home.content.ts
      import { t, type Dictionary } from "intlayer";
      
      const homeContent = {
        key: "home",
        content: {
          title: t({
            en: "Welcome to My Website",
            fr: "Bienvenue sur mon site Web",
            es: "Bienvenido a mi sitio web",
          }),
          description: t({
            en: "Get started by editing this page.",
            fr: "Commencez par éditer cette page.",
            es: "Comience por editar esta página.",
          }),
        },
      } satisfies Dictionary;
      
      export default homeContent;

      Aby uzyskać więcej informacji na temat deklarowania zawartości, zapoznaj się z przewodnikiem po deklaracji zawartości.

    7. Wykorzystaj zawartość w swoim kodzie

      Uzyskaj dostęp do swoich słowników zawartości w całej aplikacji, aby wyświetlać przetłumaczoną zawartość.

      src/pages/[locale]/index.tsx
      import type { FC } from "react";
      import { useIntlayer } from "next-intlayer";
      import { ComponentExample } from "@components/ComponentExample";
      
      const HomePage: FC = () => {
        const content = useIntlayer("home");
      
        return (
          <div>
            <h1>{content.title}</h1>
            <p>{content.description}</p>
            <ComponentExample />
            {/* Dodatkowe komponenty */}
          </div>
        );
      };
      
      // ... Reszta kodu, w tym getStaticPaths i getStaticProps
      
      export default HomePage;
      src/components/ComponentExample.tsx
      import type { FC } from "react";
      import { useIntlayer } from "next-intlayer";
      
      export const ComponentExample: FC = () => {
        const content = useIntlayer("component-example"); // Upewnij się, że masz odpowiadającą deklarację zawartości
      
        return (
          <div>
            <h2>{content.title}</h2>
            <p>{content.content}</p>
          </div>
        );
      };
      Podczas używania tłumaczeń w atrybutach typu string (np. alt, title, href, aria-label), wywołuj
      wartość funkcji w następujący sposób:
      html
      <img src="{content.image.src.value}" alt="{content.image.value}" /><img src="{content.image.src.toString()}" alt="{content.image.toString()}" /><img src="{String(content.image.src)}" alt="{String(content.image)}" />
      Aby dowiedzieć się więcej o hooku useIntlayer, zapoznaj się z dokumentacją.
    8. Internacjonalizacja metadanych

      Opcjonalne

      Jeśli chcesz internacjonalizować swoje metadane, takie jak tytuł strony, możesz użyć funkcji getStaticProps dostarczonej przez Next.js Page Router. W jej wnętrzu możesz pobrać zawartość za pomocą funkcji getIntlayer, aby przetłumaczyć swoje metadane.

      src/pages/[locale]/metadata.content.ts
      import { type Dictionary, t } from "intlayer";
      import { type Metadata } from "next";
      
      const metadataContent = {
        key: "page-metadata",
        content: {
          title: t({
            en: "Create Next App",
            fr: "Créer une application Next.js",
            es: "Crear una aplicación Next.js",
          }),
          description: t({
            en: "Generated by create next app",
            fr: "Généré par create next app",
            es: "Generado por create next app",
          }),
        },
      } satisfies Dictionary<Metadata>;
      
      export default metadataContent;
      src/pages/[locale]/index.tsx
      import { GetStaticPaths, GetStaticProps } from "next";
      import { getIntlayer, getMultilingualUrls } from "intlayer";
      import { useIntlayer } from "next-intlayer";
      import Head from "next/head";
      import type { FC } from "react";
      
      interface HomePageProps {
        locale: string;
        metadata: {
          title: string;
          description: string;
        };
        multilingualUrls: Record<string, string>;
      }
      
      const HomePage: FC<HomePageProps> = ({
        metadata,
        multilingualUrls,
        locale,
      }) => {
        const content = useIntlayer("page");
      
        return (
          <div>
            <Head>
              <title>{metadata.title}</title>
              <meta name="description" content={metadata.description} />
              {/* Generowanie tagów hreflang dla SEO */}
              {Object.entries(multilingualUrls).map(([lang, url]) => (
                <link key={lang} rel="alternate" hrefLang={lang} href={url} />
              ))}
              <link rel="canonical" href={multilingualUrls[locale]} />
            </Head>
      
            {/* Zawartość strony */}
            <main>{/* Twoja zawartość strony tutaj */}</main>
          </div>
        );
      };
      
      export const getStaticProps: GetStaticProps<HomePageProps> = async ({
        params,
      }) => {
        const locale = params?.locale as string;
      
        const metadata = getIntlayer("page-metadata", locale);
      
        /**
         * Generuje obiekt zawierający wszystkie adresy URL dla każdej lokalizacji.
         *
         * Przykład:
         * ```ts
         *  getMultilingualUrls('/about');
         *
         *  // Zwraca
         *  // {
         *  //   en: '/about',
         *  //   fr: '/fr/about',
         *  //   es: '/es/about',
         *  // }
         * ```
         */
        const multilingualUrls = getMultilingualUrls("/");
      
        return {
          props: {
            locale,
            metadata,
            multilingualUrls,
          },
        };
      };
      
      export default HomePage;
      
      // ... Reszta kodu, w tym getStaticPaths
      Należy zauważyć, że funkcja getIntlayer importowana z next-intlayer zwraca Twoją zawartość opakowaną w IntlayerNode, co umożliwia integrację z edytorem wizualnym. Natomiast funkcja getIntlayer importowana z intlayer zwraca zawartość bezpośrednio, bez dodatkowych właściwości.

      Alternatywnie możesz użyć funkcji getTranslation do deklaracji swoich metadanych. Jednak zaleca się korzystanie z plików deklaracji zawartości, aby zautomatyzować tłumaczenie metadanych i w pewnym momencie wyodrębnić zawartość.

      src/pages/[locale]/index.tsx
      import { GetStaticPaths, GetStaticProps } from "next";
      import {
        type IConfigLocales,
        getTranslation,
        getMultilingualUrls,
      } from "intlayer";
      import { useIntlayer } from "next-intlayer";
      import Head from "next/head";
      import type { FC } from "react";
      
      interface HomePageProps {
        locale: string;
        metadata: {
          title: string;
          description: string;
        };
        multilingualUrls: Record<string, string>;
      }
      
      const HomePage: FC<HomePageProps> = ({ metadata, multilingualUrls, locale }) => {
        const content = useIntlayer("page");
      
        return (
          <div>
            <Head>
              <title>{metadata.title}</title>
              <meta name="description" content={metadata.description} />
              {/* Generuj tagi hreflang dla SEO */}
              {Object.entries(multilingualUrls).map(([lang, url]) => (
                <link
                  key={lang}
                  rel="alternate"
                  hrefLang={lang}
                  href={url}
                />
              ))}
              <link rel="canonical" href={multilingualUrls[locale]} />
            </Head>
      
            {/* Zawartość strony */}
            <main>
              {/* Tutaj umieść zawartość swojej strony */}
            </main>
          </div>
        );
      };
      
      export const getStaticProps: GetStaticProps<HomePageProps> = async ({
        params
      }) => {
        const locale = params?.locale as string;
        const t = <T>(content: IConfigLocales<T>) => getTranslation(content, locale);
      
        const metadata = {
          title: t<string>({
            en: "My title",
            fr: "Mon titre",
            es: "Mi título",
          }),
          description: t({
            en: "My description",
            fr: "Ma description",
            es: "Mi descripción",
          }),
        };
      
        const multilingualUrls = getMultilingualUrls("/");
      
        return {
          props: {
            locale,
            metadata,
            multilingualUrls,
          },
        };
      };
      
      export default HomePage;
      
      // ... Reszta kodu, w tym getStaticPaths
      Dowiedz się więcej o optymalizacji metadanych w oficjalnej dokumentacji Next.js.
    9. Zmień język swojej zawartości

      Opcjonalne

      Aby zmienić język swojej zawartości w Next.js, zalecanym sposobem jest użycie komponentu Link, aby przekierować użytkowników na odpowiednią zlokalizowaną stronę. Komponent Link umożliwia prefetching strony, co pomaga uniknąć pełnego przeładowania strony.

      src/components/LanguageSwitcher.tsx
      import {
        Locales,
        getHTMLTextDir,
        getLocaleName,
        getLocalizedUrl,
      } from "intlayer";
      import { useLocalePageRouter } from "next-intlayer";
      import { type FC } from "react";
      import Link from "next/link";
      
      const LocaleSwitcher: FC = () => {
        const { locale, pathWithoutLocale, availableLocales } = useLocalePageRouter();
      
        return (
          <div>
            <button popoverTarget="localePopover">{getLocaleName(locale)}</button>
            <div id="localePopover" popover="auto">
              {availableLocales.map((localeItem) => (
                <Link
                  href={getLocalizedUrl(pathWithoutLocale, localeItem)}
                  hrefLang={localeItem}
                  key={localeItem}
                  aria-current={locale === localeItem ? "page" : undefined}
                  onClick={() => setLocale(localeItem)}
                >
                  <span>
                    {/* Lokalizacja - np. FR */}
                    {localeItem}
                  </span>
                  <span>
                    {/* Język w swojej własnej lokalizacji - np. Français */}
                    {getLocaleName(localeItem, locale)}
                  </span>
                  <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
                    {/* Język w bieżącej lokalizacji - np. Francés przy ustawionej lokalizacji Locales.SPANISH */}
                    {getLocaleName(localeItem)}
                  </span>
                  <span dir="ltr" lang={Locales.ENGLISH}>
                    {/* Język po angielsku - np. French */}
                    {getLocaleName(localeItem, Locales.ENGLISH)}
                  </span>
                </Link>
              ))}
            </div>
          </div>
        );
      };
      Alternatywnym sposobem jest użycie funkcji setLocale dostarczonej przez hook useLocale. Ta funkcja nie pozwoli na prefetching strony i spowoduje przeładowanie strony.
      W tym przypadku, bez przekierowania za pomocą router.push, tylko Twój kod po stronie serwera zmieni lokalizację zawartości.
      src/components/LocaleSwitcher.tsx
      "use client";import { useRouter } from "next/navigation";import { useLocale } from "next-intlayer";import { getLocalizedUrl } from "intlayer";// ... Reszta koduconst router = useRouter();const { setLocale } = useLocale({  onLocaleChange: (locale) => {    router.push(getLocalizedUrl(pathWithoutLocale, locale));  },});return (  <button onClick={() => setLocale(Locales.FRENCH)}>Zmień na francuski</button>);
      API useLocalePageRouter jest takie samo jak useLocale. Aby dowiedzieć się więcej o hooku useLocale, zapoznaj się z dokumentacją.

      Odnośniki do dokumentacji:

    10. Opcjonalne

      Aby zapewnić, że nawigacja w Twojej aplikacji respektuje aktualną lokalizację, możesz stworzyć niestandardowy komponent Link. Ten komponent automatycznie dodaje prefiks z aktualnym językiem do wewnętrznych adresów URL. Na przykład, gdy użytkownik mówiący po francusku kliknie link do strony "About", zostanie przekierowany na /fr/about zamiast na /about.

      To zachowanie jest przydatne z kilku powodów:

      • SEO i doświadczenie użytkownika: Lokalizowane adresy URL pomagają wyszukiwarkom poprawnie indeksować strony specyficzne dla języka oraz dostarczają użytkownikom treści w ich preferowanym języku.
      • Spójność: Korzystając z lokalizowanego linku w całej aplikacji, zapewniasz, że nawigacja pozostaje w obrębie bieżącej lokalizacji, zapobiegając nieoczekiwanym zmianom języka.
      • Łatwość utrzymania: Centralizacja logiki lokalizacji w jednym komponencie upraszcza zarządzanie adresami URL, co sprawia, że baza kodu jest łatwiejsza do utrzymania i rozbudowy wraz z rozwojem aplikacji.

      Poniżej znajduje się implementacja lokalizowanego komponentu Link w TypeScript:

      src/components/Link.tsx
      "use client";
      
      import { getLocalizedUrl } from "intlayer";
      import NextLink, { type LinkProps as NextLinkProps } from "next/link";
      import { useLocale } from "next-intlayer";
      import { forwardRef, PropsWithChildren, type ForwardedRef } from "react";
      
      /**
       * Funkcja pomocnicza do sprawdzania, czy podany URL jest zewnętrzny.
       * Jeśli URL zaczyna się od http:// lub https://, jest uznawany za zewnętrzny.
       */
      export const checkIsExternalLink = (href?: string): boolean =>
        /^https?:\/\//.test(href ?? "");
      
      /**
       * Niestandardowy komponent Link, który dostosowuje atrybut href na podstawie aktualnej lokalizacji.
       * Dla linków wewnętrznych używa `getLocalizedUrl`, aby dodać prefiks z lokalizacją (np. /fr/about).
       * Zapewnia to, że nawigacja pozostaje w kontekście tej samej lokalizacji.
       */
      export const Link = forwardRef<
        HTMLAnchorElement,
        PropsWithChildren<NextLinkProps>
      >(({ href, children, ...props }, ref: ForwardedRef<HTMLAnchorElement>) => {
        const { locale } = useLocale();
        const isExternalLink = checkIsExternalLink(href.toString());
      
        // Jeśli link jest wewnętrzny i podano prawidłowy href, pobierz lokalizowany URL.
        const hrefI18n: NextLinkProps["href"] =
          href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href;
      
        return (
          <NextLink href={hrefI18n} ref={ref} {...props}>
            {children}
          </NextLink>
        );
      });
      
      Link.displayName = "Link";

      Jak to działa

      • Wykrywanie linków zewnętrznych:
        Funkcja pomocnicza checkIsExternalLink określa, czy URL jest zewnętrzny. Linki zewnętrzne pozostają niezmienione, ponieważ nie wymagają lokalizacji.

      • Pobieranie aktualnej lokalizacji:
      • Lokalizacja URL:
        Dla linków wewnętrznych (czyli niezewnętrznych) używana jest funkcja getLocalizedUrl, która automatycznie dodaje prefiks z aktualnym locale do URL. Oznacza to, że jeśli użytkownik korzysta z wersji francuskiej, przekazanie /about jako href zostanie przekształcone na /fr/about.

      • Zwracanie linku:
        Komponent zwraca element <a> z zlokalizowanym URL, zapewniając spójność nawigacji zgodnie z ustawionym locale.

      Integrując ten komponent Link w całej aplikacji, utrzymujesz spójne i świadome językowo doświadczenie użytkownika, jednocześnie korzystając z lepszego SEO i użyteczności.

    11. Optymalizacja rozmiaru paczki

      Opcjonalne

      Podczas korzystania z next-intlayer, słowniki są domyślnie dołączane do bundla na każdej stronie. Aby zoptymalizować rozmiar bundla, Intlayer udostępnia opcjonalny plugin SWC, który inteligentnie zastępuje wywołania useIntlayer za pomocą makr. Zapewnia to, że słowniki są dołączane tylko do bundli stron, które faktycznie ich używają.

      Aby włączyć tę optymalizację, zainstaluj pakiet @intlayer/swc. Po instalacji next-intlayer automatycznie wykryje i użyje tego pluginu:

      bash
      npm install @intlayer/swc --save-dev
      Uwaga: Ta optymalizacja jest dostępna tylko dla Next.js 13 i nowszych wersji.

      Uwaga: Ten pakiet nie jest instalowany domyślnie, ponieważ wtyczki SWC są nadal eksperymentalne w Next.js. Może się to zmienić w przyszłości.

    Konfiguracja TypeScript

    Intlayer używa rozszerzenia modułów (module augmentation), aby wykorzystać zalety TypeScript i wzmocnić Twoją bazę kodu.

    Autouzupełnianie

    Błąd tłumaczenia

    Upewnij się, że Twoja konfiguracja TypeScript zawiera automatycznie generowane typy.

    tsconfig.json
    {  // ... Twoje istniejące konfiguracje TypeScript  "include": [    // ... Twoje istniejące konfiguracje TypeScript    ".intlayer/**/*.ts", // Dołącz automatycznie generowane typy  ],}

    Konfiguracja Git

    Aby utrzymać porządek w repozytorium i uniknąć zatwierdzania generowanych plików, zaleca się ignorowanie plików tworzonych przez Intlayer.

    Dodaj następujące linie do pliku .gitignore:

    .gitignore
    # Ignoruj pliki generowane przez Intlayer.intlayer

    Rozszerzenie VS Code

    Aby poprawić doświadczenie programistyczne z Intlayer, możesz zainstalować oficjalne rozszerzenie Intlayer dla VS Code.

    Zainstaluj z Marketplace VS Code

    To rozszerzenie oferuje:

    • Autouzupełnianie kluczy tłumaczeń.
    • Wykrywanie błędów w czasie rzeczywistym dla brakujących tłumaczeń.
    • Podglądy w linii przetłumaczonej zawartości.
    • Szybkie akcje umożliwiające łatwe tworzenie i aktualizowanie tłumaczeń.

    Aby uzyskać więcej informacji na temat korzystania z rozszerzenia, zapoznaj się z dokumentacją rozszerzenia Intlayer VS Code.

    Dodatkowe zasoby

    Postępując zgodnie z tym przewodnikiem, możesz skutecznie zintegrować Intlayer z aplikacją Next.js korzystającą z Page Router, co umożliwi solidne i skalowalne wsparcie internacjonalizacji dla Twoich projektów internetowych.

    Idź dalej

    Aby pójść dalej, możesz zaimplementować edytor wizualny lub zewnętrznie zarządzać swoją zawartością, korzystając z CMS.