Zadaj pytanie i otrzymaj streszczenie dokumentu, odwołując się do tej strony i wybranego dostawcy AI
Historia wersji
- Wersja początkowav7.0.01.11.2025
Treść tej strony została przetłumaczona przy użyciu sztucznej inteligencji.
Zobacz ostatnią wersję oryginalnej treści w języku angielskimJeśli masz pomysł na ulepszenie tej dokumentacji, zachęcamy do przesłania pull requesta na GitHubie.
Link do dokumentacji na GitHubieKopiuj dokument Markdown do schowka
Jak internacjonalizować aplikację Next.js za pomocą next-intl w 2025 roku
Spis treści
Czym jest next-intl?
next-intl to popularna biblioteka do internacjonalizacji (i18n) zaprojektowana specjalnie dla Next.js App Router. Zapewnia płynny sposób tworzenia wielojęzycznych aplikacji Next.js z doskonałym wsparciem TypeScript oraz wbudowanymi optymalizacjami.
Jeśli wolisz, możesz również odwołać się do przewodnika next-i18next lub bezpośrednio korzystać z Intlayer.
Zobacz porównanie w next-i18next vs next-intl vs Intlayer.
Praktyki, których powinieneś przestrzegać
Zanim przejdziemy do implementacji, oto kilka praktyk, których powinieneś przestrzegać:
- Ustaw atrybuty HTML
langidir
W swoim układzie obliczdirza pomocągetLocaleDirection(locale)i ustaw<html lang={locale} dir={dir}>dla odpowiedniej dostępności i SEO. - Podziel wiadomości według przestrzeni nazw
Organizuj pliki JSON według lokalizacji i przestrzeni nazw (np.common.json,about.json), aby ładować tylko to, co potrzebujesz. - Minimalizuj obciążenie klienta
Na stronach wysyłaj doNextIntlClientProvidertylko wymagane przestrzenie nazw (np.pick(messages, ['common', 'about'])). - Preferuj strony statyczne
Używaj stron statycznych tak często, jak to możliwe, dla lepszej wydajności i SEO. - I18n w komponentach serwerowych
Komponenty serwerowe, takie jak strony lub wszystkie komponenty nieoznaczone jakoclient, są statyczne i mogą być wstępnie renderowane podczas budowania. Dlatego będziemy musieli przekazać do nich funkcje tłumaczeń jako propsy. - Skonfiguruj typy TypeScript
Dla swoich lokalizacji, aby zapewnić bezpieczeństwo typów w całej aplikacji. - Proxy do przekierowań
Użyj proxy do obsługi wykrywania lokalizacji i routingu oraz przekierowania użytkownika na odpowiedni URL z prefiksem lokalizacji. - Internacjonalizacja metadanych, mapy witryny, robots.txt
Internacjonalizuj swoje metadane, mapę witryny, robots.txt za pomocą funkcjigenerateMetadatadostarczonej przez Next.js, aby zapewnić lepsze odkrywanie przez wyszukiwarki we wszystkich lokalizacjach. - Lokalizuj linki
Lokalizuj linki za pomocą komponentuLink, aby przekierować użytkownika na odpowiedni URL z prefiksem lokalizacji. Jest to ważne, aby zapewnić odnajdywalność Twoich stron we wszystkich lokalizacjach. - Automatyzuj testy i tłumaczenia
Automatyzacja testów i tłumaczeń pomaga zaoszczędzić czas potrzebny na utrzymanie wielojęzycznej aplikacji.
Zobacz naszą dokumentację zawierającą wszystko, co musisz wiedzieć o internacjonalizacji i SEO: Internationalization (i18n) with next-intl.
Przewodnik krok po kroku, jak skonfigurować next-intl w aplikacji Next.js
Zobacz Szablon aplikacji na GitHub.
Oto struktura projektu, którą będziemy tworzyć:
Skopiuj kod do schowka
Instalacja zależności
Zainstaluj niezbędne pakiety za pomocą npm:
bashKopiuj kodSkopiuj kod do schowka
- next-intl: Podstawowa biblioteka do internacjonalizacji dla Next.js App Router, która dostarcza hooki, funkcje serwerowe oraz klienta do zarządzania tłumaczeniami.
Konfiguracja projektu
Utwórz plik konfiguracyjny, który definiuje obsługiwane lokalizacje i konfiguruje ustawienia żądań next-intl. Ten plik służy jako pojedyncze źródło prawdy dla Twojej konfiguracji i18n oraz zapewnia bezpieczeństwo typów w całej aplikacji.
Centralizacja konfiguracji lokalizacji zapobiega niespójnościom i ułatwia dodawanie lub usuwanie lokalizacji w przyszłości. Funkcja
getRequestConfigjest wywoływana przy każdym żądaniu i ładuje tylko tłumaczenia potrzebne dla każdej strony, umożliwiając dzielenie kodu i zmniejszając rozmiar pakietu.src/i18n.tsKopiuj kodSkopiuj kod do schowka
Definiowanie dynamicznych tras lokalizacji
Skonfiguruj dynamiczne routowanie dla lokalizacji, tworząc katalog
[locale]w folderze aplikacji. Pozwala to Next.js obsługiwać routowanie oparte na lokalizacji, gdzie każda lokalizacja staje się segmentem URL (np./en/about,/fr/about).Użycie dynamicznych tras umożliwia Next.js generowanie statycznych stron dla wszystkich lokalizacji podczas budowania, co poprawia wydajność i SEO. Komponent layout ustawia atrybuty HTML
langidirna podstawie lokalizacji, co jest kluczowe dla dostępności i zrozumienia przez wyszukiwarki.src/app/[locale]/layout.tsxKopiuj kodSkopiuj kod do schowka
src/app/[locale]/about/page.tsxKopiuj kodSkopiuj kod do schowka
Utwórz pliki tłumaczeń
Utwórz pliki JSON dla każdego locale i namespace. Ta struktura pozwala na logiczne organizowanie tłumaczeń oraz ładowanie tylko tego, co jest potrzebne na każdej stronie.
Organizowanie tłumaczeń według namespace (np.
common.json,about.json) umożliwia dzielenie kodu (code splitting) i zmniejsza rozmiar bundla. Ładujesz tylko tłumaczenia potrzebne dla danej strony, co poprawia wydajność.locales/en/common.jsonKopiuj kodSkopiuj kod do schowka
locales/fr/common.jsonKopiuj kodSkopiuj kod do schowka
locales/en/about.jsonKopiuj kodSkopiuj kod do schowka
locales/fr/about.jsonKopiuj kodSkopiuj kod do schowka
Wykorzystaj tłumaczenia na swoich stronach
Utwórz komponent strony, który ładuje tłumaczenia po stronie serwera i przekazuje je zarówno do komponentów serwerowych, jak i klienckich. Zapewnia to, że tłumaczenia są załadowane przed renderowaniem i zapobiega migotaniu treści.
Ładowanie tłumaczeń po stronie serwera poprawia SEO i zapobiega FOUC (Flash of Untranslated Content - migotanie nieprzetłumaczonej treści). Używając
pickdo wysłania tylko wymaganych przestrzeni nazw do klienta, minimalizujemy rozmiar pakietu JavaScript wysyłanego do przeglądarki.src/app/[locale]/about/page.tsxKopiuj kodSkopiuj kod do schowka
Używanie tłumaczeń w komponentach klienckich
Komponenty klienckie mogą używać hooków
useTranslationsiuseFormatter, aby uzyskać dostęp do tłumaczeń i funkcji formatowania. Hooki te odczytują dane z kontekstuNextIntlClientProvider.Komponenty klienckie potrzebują hooków React, aby uzyskać dostęp do tłumaczeń. Hooki
useTranslationsiuseFormatterintegrują się bezproblemowo z next-intl i zapewniają reaktywne aktualizacje po zmianie lokalizacji.Nie zapomnij dodać wymaganych przestrzeni nazw do komunikatów klienta na stronie (uwzględnij tylko te przestrzenie nazw, których faktycznie potrzebują Twoje komponenty klienckie).
src/components/ClientComponent.tsxKopiuj kodSkopiuj kod do schowka
Używanie tłumaczeń w komponentach serwerowych
Komponenty serwerowe nie mogą używać hooków React, dlatego otrzymują tłumaczenia i formatery przez propsy od komponentów nadrzędnych. Takie podejście utrzymuje komponenty serwerowe synchroniczne i pozwala na ich zagnieżdżanie wewnątrz komponentów klienckich.
Komponenty serwerowe, które mogą być zagnieżdżone pod granicami komponentów klienckich, muszą być synchroniczne. Przekazując przetłumaczone ciągi znaków i sformatowane wartości jako propsy, unikamy operacji asynchronicznych i zapewniamy prawidłowe renderowanie. Przetwarzaj tłumaczenia i formatowanie w komponencie nadrzędnym strony.
src/components/ServerComponent.tsxKopiuj kodSkopiuj kod do schowka
Na swojej stronie/układzie użyj
getTranslationsigetFormatterznext-intl/server, aby wstępnie obliczyć tłumaczenia i formatowanie, a następnie przekaż je jako propsy do komponentów serwerowych.Zmień język swojej zawartości
OpcjonalneAby zmienić język swojej zawartości za pomocą next-intl, renderuj linki uwzględniające lokalizację, które wskazują na tę samą ścieżkę, zmieniając jednocześnie lokalizację. Provider automatycznie przepisuje URL-e, więc musisz tylko wskazać aktualną trasę.
src/components/LocaleSwitcher.tsxKopiuj kodSkopiuj kod do schowka
Użyj lokalizowanego komponentu Link
Opcjonalnenext-intldostarcza podpakietnext-intl/navigation, który zawiera lokalizowany komponent linku automatycznie stosujący aktywną lokalizację. Już wyodrębniliśmy go dla Ciebie w pliku@/i18n, więc możesz go użyć w ten sposób:src/components/MyComponent.tsxKopiuj kodSkopiuj kod do schowka
Uzyskaj dostęp do aktywnej lokalizacji w Server Actions
OpcjonalneServer Actions mogą odczytać aktualną lokalizację używając
next-intl/server. Jest to przydatne do wysyłania zlokalizowanych e-maili lub przechowywania preferencji językowych wraz z przesłanymi danymi.src/app/actions/get-current-locale.tsKopiuj kodSkopiuj kod do schowka
getLocaleodczytuje locale ustawione przez proxynext-intl, więc działa wszędzie na serwerze: w Route Handlers, Server Actions i funkcjach edge.Internacjonalizacja metadanych
OpcjonalneTłumaczenie treści jest ważne, ale głównym celem internacjonalizacji jest uczynienie Twojej strony bardziej widoczną dla świata. I18n to niesamowita dźwignia do poprawy widoczności Twojej strony poprzez odpowiednie SEO.
Prawidłowo zinternacjonalizowane metadane pomagają wyszukiwarkom zrozumieć, jakie języki są dostępne na Twoich stronach. Obejmuje to ustawianie meta tagów hreflang, tłumaczenie tytułów i opisów oraz zapewnienie prawidłowego ustawienia kanonicznych URL dla każdego języka.
src/app/[locale]/about/layout.tsxKopiuj kodSkopiuj kod do schowka
Internacjonalizacja Twojej mapy witryny
OpcjonalneWygeneruj mapę witryny, która zawiera wszystkie wersje językowe Twoich stron. Pomaga to wyszukiwarkom odnaleźć i zaindeksować wszystkie wersje językowe Twoich treści.
Prawidłowo zinternacjonalizowana mapa witryny zapewnia, że wyszukiwarki mogą znaleźć i zaindeksować wszystkie wersje językowe Twoich stron. Poprawia to widoczność w międzynarodowych wynikach wyszukiwania.
src/app/sitemap.tsKopiuj kodSkopiuj kod do schowka
Internacjonalizacja pliku robots.txt
OpcjonalneUtwórz plik robots.txt, który prawidłowo obsługuje wszystkie wersje językowe Twoich chronionych ścieżek. Zapewnia to, że wyszukiwarki nie będą indeksować stron admina ani panelu w żadnym języku.
Prawidłowa konfiguracja robots.txt dla wszystkich lokalizacji zapobiega indeksowaniu przez wyszukiwarki wrażliwych stron, gdy Twoje ścieżki różnią się dla każdej lokalizacji.
src/app/robots.tsKopiuj kodSkopiuj kod do schowka
Skonfiguruj Proxy dla trasowania lokalizacji
OpcjonalneUtwórz proxy, które automatycznie wykryje preferowaną lokalizację użytkownika i przekieruje go na odpowiedni adres URL z prefiksem lokalizacji. next-intl dostarcza wygodną funkcję proxy, która obsługuje to automatycznie.
Proxy zapewnia, że użytkownicy są automatycznie przekierowywani do preferowanego języka podczas odwiedzania Twojej strony. Zapisuje również preferencje użytkownika na przyszłe wizyty, poprawiając doświadczenie użytkownika.
src/proxy.tsKopiuj kodSkopiuj kod do schowka
Skonfiguruj typy TypeScript dla lokalizacji
OpcjonalneKonfiguracja TypeScript pomoże Ci uzyskać autouzupełnianie i bezpieczeństwo typów dla Twoich kluczy.
W tym celu możesz utworzyć plik global.ts w katalogu głównym projektu i dodać następujący kod:
global.tsKopiuj kodSkopiuj kod do schowka
Ten kod użyje Module Augmentation, aby dodać locales i messages do typu AppConfig w next-intl.
Automatyzuj swoje tłumaczenia za pomocą Intlayer
OpcjonalneIntlayer to bezpłatna i otwartoźródłowa biblioteka zaprojektowana, aby wspierać proces lokalizacji w Twojej aplikacji. Podczas gdy next-intl zajmuje się ładowaniem i zarządzaniem tłumaczeniami, Intlayer pomaga zautomatyzować przepływ pracy związany z tłumaczeniami.
Ręczne zarządzanie tłumaczeniami może być czasochłonne i podatne na błędy. Intlayer automatyzuje testowanie, generowanie i zarządzanie tłumaczeniami, oszczędzając Twój czas i zapewniając spójność w całej aplikacji.
Intlayer pozwala Ci na:
Deklarowanie treści tam, gdzie chcesz w swojej bazie kodu Intlayer pozwala deklarować treści tam, gdzie chcesz w swojej bazie kodu, używając plików
.content.{ts|js|json}. Umożliwi to lepszą organizację treści, zapewniając lepszą czytelność i łatwiejszą konserwację kodu.Testowanie brakujących tłumaczeń Intlayer dostarcza funkcje testowe, które można zintegrować z Twoim pipeline CI/CD lub testami jednostkowymi. Dowiedz się więcej o testowaniu tłumaczeń.
Automatyzuj swoje tłumaczenia, Intlayer oferuje CLI oraz rozszerzenie do VSCode do automatyzacji tłumaczeń. Może być zintegrowany z pipeline CI/CD. Dowiedz się więcej o automatyzacji tłumaczeń. Możesz używać własnego klucza API oraz wybranego dostawcy AI. Zapewnia również tłumaczenia uwzględniające kontekst, zobacz wypełnianie treści.
Połącz zewnętrzne treści Intlayer pozwala na połączenie Twoich treści z zewnętrznym systemem zarządzania treścią (CMS). Aby pobierać je w zoptymalizowany sposób i wstawiać do Twoich zasobów JSON. Dowiedz się więcej o pobieraniu zewnętrznych treści.
Edytor wizualny Intlayer oferuje darmowy edytor wizualny do edycji Twoich treści za pomocą edytora wizualnego. Dowiedz się więcej o wizualnej edycji Twoich tłumaczeń.
I więcej. Aby odkryć wszystkie funkcje oferowane przez Intlayer, prosimy zapoznać się z dokumentacją Zainteresowanie Intlayer.
Komentarze
Nie ma jeszcze komentarzy. Bądź pierwszą osobą, która podzieli się swoimi przemyśleniami.