Zadaj pytanie i otrzymaj streszczenie dokumentu, odwołując się do tej strony i wybranego dostawcy AI
Historia wersji
- Wersja początkowav7.0.61.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-i18next w 2025 roku
Spis treści
Czym jest next-i18next?
next-i18next to popularne rozwiązanie do internacjonalizacji (i18n) dla aplikacji Next.js. Podczas gdy oryginalny pakiet next-i18next był zaprojektowany dla Pages Router, ten przewodnik pokazuje, jak zaimplementować i18next z nowoczesnym App Router używając bezpośrednio i18next i react-i18next.
Dzięki temu podejściu możesz:
- Organizować tłumaczenia używając przestrzeni nazw (np.
common.json,about.json) dla lepszego zarządzania treścią. - Ładować tłumaczenia efektywnie poprzez ładowanie tylko tych przestrzeni nazw, które są potrzebne na danej stronie, co zmniejsza rozmiar paczki.
- Wspierać zarówno komponenty serwerowe, jak i klienckie z odpowiednią obsługą SSR i hydratacji.
- Zapewnić wsparcie dla TypeScript z typowo bezpieczną konfiguracją lokalizacji i kluczy tłumaczeń.
- Optymalizuj pod SEO z odpowiednimi metadanymi, mapą strony oraz internacjonalizacją robots.txt.
Alternatywnie możesz również odnieść się do przewodnika next-intl lub bezpośrednio użyć 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
langidirW swoim layoucie 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 payload klienta
Na stronach wysyłaj tylko wymagane przestrzenie nazw do
NextIntlClientProvider(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 jako
client, są statyczne i mogą być wstępnie renderowane podczas budowania. Dlatego będziemy musieli przekazać do nich funkcje tłumaczenia jako propsy. - Skonfiguruj typy TypeScript Dla swoich lokalizacji zapewnij bezpieczeństwo typów w całej aplikacji.
- Proxy do przekierowań Użyj proxy do obsługi wykrywania lokalizacji i routingu oraz przekierowywania użytkownika na odpowiedni URL z prefiksem lokalizacji.
- Internacjonalizacja metadanych, mapy witryny, robots.txt
Internacjonalizuj swoje metadane, mapę witryny, robots.txt za pomocą funkcji
generateMetadatadostarczonej przez Next.js, aby zapewnić lepsze indeksowanie przez wyszukiwarki we wszystkich lokalizacjach. - Lokalizacja linków
Lokalizuj linki za pomocą komponentu
Link, aby przekierowywać użytkownika na odpowiedni URL z prefiksem lokalizacji. Jest to ważne, aby zapewnić odkrywalność Twoich stron we wszystkich lokalizacjach. - Automatyzacja testów i tłumaczeń Automatyzacja testów i tłumaczeń pomaga zaoszczędzić czas 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ć i18next 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
- i18next: Podstawowy framework do internacjonalizacji, który obsługuje ładowanie i zarządzanie tłumaczeniami.
- react-i18next: Powiązania React dla i18next, które dostarczają hooki takie jak
useTranslationdla komponentów klienckich. - i18next-resources-to-backend: Wtyczka umożliwiająca dynamiczne ładowanie plików tłumaczeń, pozwalająca ładować tylko potrzebne przestrzenie nazw.
Skonfiguruj swój projekt
Utwórz plik konfiguracyjny, aby zdefiniować obsługiwane lokalizacje, domyślną lokalizację oraz funkcje pomocnicze do lokalizacji URL. Ten plik służy jako pojedyncze źródło prawdy dla Twojej konfiguracji i18n i 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. Funkcje pomocnicze zapewniają spójne generowanie URL dla SEO i routingu.
i18n.config.tsKopiuj kodSkopiuj kod do schowka
Centralizacja przestrzeni nazw tłumaczeń
Utwórz jedno źródło prawdy dla każdej przestrzeni nazw, którą udostępnia Twoja aplikacja. Ponowne użycie tej listy utrzymuje synchronizację kodu serwera, klienta i narzędzi oraz umożliwia silne typowanie pomocników tłumaczeń.
src/i18n.namespaces.tsKopiuj kodSkopiuj kod do schowka
Silne typowanie kluczy tłumaczeń za pomocą TypeScript
Rozszerz
i18next, aby wskazywał na Twoje kanoniczne pliki językowe (zazwyczaj angielskie). TypeScript wtedy wywnioskuje poprawne klucze dla każdej przestrzeni nazw, dzięki czemu wywołaniat()są sprawdzane kompleksowo.src/types/i18next.d.tsKopiuj kodSkopiuj kod do schowka
Wskazówka: Przechowuj tę deklarację w katalogu
src/types(utwórz folder, jeśli nie istnieje). Next.js automatycznie uwzględniasrcwtsconfig.json, więc rozszerzenie jest wykrywane automatycznie. Jeśli nie, dodaj następujące do plikutsconfig.json:tsconfig.jsonKopiuj kodSkopiuj kod do schowka
Dzięki temu możesz polegać na autouzupełnianiu i sprawdzaniu podczas kompilacji:
tsxKopiuj kodSkopiuj kod do schowka
Skonfiguruj inicjalizację i18n po stronie serwera
Utwórz funkcję inicjalizacji po stronie serwera, która ładuje tłumaczenia dla komponentów serwerowych. Ta funkcja tworzy osobną instancję i18next do renderowania po stronie serwera, zapewniając, że tłumaczenia są załadowane przed renderowaniem.
Komponenty serwerowe potrzebują własnej instancji i18next, ponieważ działają w innym kontekście niż komponenty klienckie. Wstępne ładowanie tłumaczeń na serwerze zapobiega migotaniu nieprzetłumaczonej treści i poprawia SEO, zapewniając, że wyszukiwarki widzą przetłumaczoną zawartość.
src/app/i18n/server.tsKopiuj kodSkopiuj kod do schowka
Utwórz klienta i18n Provider
Utwórz komponent klienta, który opakuje Twoją aplikację kontekstem i18next. Ten provider otrzymuje wstępnie załadowane tłumaczenia z serwera, aby zapobiec błyskowi nieprzetłumaczonej zawartości (FOUC) i uniknąć podwójnego pobierania.
Komponenty klienckie potrzebują własnej instancji i18next działającej w przeglądarce. Przyjmując wstępnie załadowane zasoby z serwera, zapewniamy płynne nawilżanie i zapobiegamy migotaniu zawartości. Provider zarządza również dynamicznie zmianą lokalizacji i ładowaniem przestrzeni nazw.
src/components/I18nProvider.tsxKopiuj kodSkopiuj kod do schowka
Zdefiniuj dynamiczne trasy 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
langidirw oparciu o lokalizację, co jest kluczowe dla dostępności i zrozumienia przez wyszukiwarki.src/app/[locale]/layout.tsxKopiuj kodSkopiuj kod do schowka
Utwórz pliki tłumaczeń
Utwórz pliki JSON dla każdego locale i przestrzeni nazw. Ta struktura pozwala na logiczne organizowanie tłumaczeń i ładowanie tylko tego, co jest potrzebne na każdej stronie.
Organizowanie tłumaczeń według przestrzeni nazw (np.
common.json,about.json) umożliwia dzielenie kodu i zmniejsza rozmiar pakietu. Ładujesz tylko tłumaczenia potrzebne dla każdej strony, co poprawia wydajność.src/locales/en/common.jsonKopiuj kodSkopiuj kod do schowka
src/locales/fr/common.jsonKopiuj kodSkopiuj kod do schowka
src/locales/en/home.jsonKopiuj kodSkopiuj kod do schowka
src/locales/pl/home.jsonKopiuj kodSkopiuj kod do schowka
src/locales/en/about.jsonKopiuj kodSkopiuj kod do schowka
src/locales/pl/about.jsonKopiuj kodSkopiuj kod do schowka
Wykorzystanie tłumaczeń na Twoich stronach
Utwórz komponent strony, który inicjalizuje i18next po stronie serwera i przekazuje tłumaczenia zarówno do komponentów serwerowych, jak i klienckich. Zapewnia to załadowanie tłumaczeń przed renderowaniem i zapobiega migotaniu treści.
Inicjalizacja po stronie serwera ładuje tłumaczenia przed renderowaniem strony, co poprawia SEO i zapobiega FOUC (Flash of Unstyled Content). Przekazując wcześniej załadowane zasoby do providera po stronie klienta, unikamy podwójnego pobierania i zapewniamy płynne hydracje.
src/app/[locale]/about/index.tsxKopiuj kodSkopiuj kod do schowka
Używanie tłumaczeń w komponentach klienckich
Komponenty klienckie mogą korzystać z hooka
useTranslation, aby uzyskać dostęp do tłumaczeń. Ten hook zapewnia dostęp do funkcji tłumaczącej oraz instancji i18n, co pozwala na tłumaczenie treści i dostęp do informacji o lokalizacji.Komponenty klienckie potrzebują hooków Reacta, aby uzyskać dostęp do tłumaczeń. Hook
useTranslationintegruje się bezproblemowo z i18next i zapewnia reaktywne aktualizacje przy zmianie lokalizacji.Upewnij się, że strona/provider zawiera tylko potrzebne przestrzenie nazw (np.
about).
Jeśli używasz React < 19, zapamiętuj (memoizuj) ciężkie formatery, takie jakIntl.NumberFormat.src/components/ClientComponent.tsxKopiuj kodSkopiuj kod do schowka
Użycie tłumaczeń w komponentach serwerowych
Komponenty serwerowe nie mogą korzystać z hooków React, dlatego otrzymują tłumaczenia za pomocą propsów 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 klienta, muszą być synchroniczne. Przekazując przetłumaczone ciągi znaków oraz informacje o lokalizacji jako propsy, unikamy operacji asynchronicznych i zapewniamy poprawne renderowanie.
src/components/ServerComponent.tsxKopiuj kodSkopiuj kod do schowka
Zmień język swojej zawartości
OpcjonalneAby zmienić język swojej zawartości w Next.js, zalecanym sposobem jest używanie adresów URL z prefiksem lokalizacji oraz linków Next.js. Poniższy przykład odczytuje aktualną lokalizację z trasy, usuwa ją z nazwy ścieżki i renderuje jeden link na każdą dostępną lokalizację.
src/components/LocaleSwitcher.tsxKopiuj kodSkopiuj kod do schowka
Zbuduj lokalizowany komponent Link
OpcjonalnePonowne użycie lokalizowanych URL-i w całej aplikacji utrzymuje spójność nawigacji i jest przyjazne dla SEO. Owiń
next/linkw małą pomocniczą funkcję, która dodaje prefiks aktywnego locale do wewnętrznych ścieżek, pozostawiając zewnętrzne URL-e bez zmian.src/components/LocalizedLink.tsxKopiuj kodSkopiuj kod do schowka
Wskazówka: Ponieważ
LocalizedLinkjest zamiennikiem typu drop-in, migruj stopniowo, zamieniając importy i pozwalając komponentowi obsługiwać adresy URL specyficzne dla lokalizacji.Uzyskanie aktywnej lokalizacji wewnątrz Server Actions
OpcjonalneServer Actions często potrzebują aktualnej lokalizacji do e-maili, logowania lub integracji z zewnętrznymi usługami. Połącz ciasteczko lokalizacji ustawione przez Twój proxy z nagłówkiem
Accept-Languagejako zapasową opcję.src/app/actions/get-current-locale.tsKopiuj kodSkopiuj kod do schowka
Ponieważ helper opiera się na ciasteczkach i nagłówkach Next.js, działa w Route Handlers, Server Actions oraz innych kontekstach dostępnych tylko po stronie serwera.
Internacjonalizacja Twoich Metadanych
OpcjonalneTłumaczenie treści jest ważne, ale głównym celem internacjonalizacji jest uczynienie Twojej strony bardziej widoczną na świecie. I18n to niesamowite narzędzie do poprawy widoczności Twojej strony poprzez odpowiednie SEO.
Właściwie 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 poprawnego ustawienia kanonicznych URL dla każdej lokalizacji.
Oto lista dobrych praktyk dotyczących wielojęzycznego SEO:
- Ustaw meta tagi hreflang w tagu
<head>, aby pomóc wyszukiwarkom zrozumieć, jakie języki są dostępne na stronie - Wymień wszystkie tłumaczenia strony w pliku sitemap.xml, używając schematu XML
http://www.w3.org/1999/xhtml - Nie zapomnij wykluczyć stron z prefiksem w pliku robots.txt (np.
/dashboard,/fr/dashboard,/es/dashboard) - Użyj niestandardowego komponentu Link, aby przekierować do najbardziej zlokalizowanej wersji strony (np. po francusku
<a href="/fr/about">À propos</a>)
Deweloperzy często zapominają prawidłowo odwołać się do swoich stron w różnych lokalizacjach. Naprawmy to:
src/app/[locale]/about/layout.tsxKopiuj kodSkopiuj kod do schowka
- Ustaw meta tagi hreflang w tagu
Internacjonalizacja 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 chronionych tras. Zapewnia to, że wyszukiwarki nie będą indeksować stron admina ani panelu w żadnym języku.
Prawidłowa konfiguracja robots.txt dla wszystkich wersji językowych zapobiega indeksowaniu wrażliwych stron przez wyszukiwarki w dowolnym języku. Jest to kluczowe dla bezpieczeństwa i prywatności.
src/app/robots.tsKopiuj kodSkopiuj kod do schowka
Skonfiguruj Middleware dla trasowania lokalizacji
OpcjonalneUtwórz proxy, które automatycznie wykryje preferowaną lokalizację użytkownika i przekieruje go do odpowiedniego adresu URL z prefiksem lokalizacji. Poprawia to doświadczenie użytkownika, pokazując treści w jego preferowanym języku.
Middleware zapewnia, że użytkownicy są automatycznie przekierowywani do swojego preferowanego języka podczas odwiedzania Twojej strony. Zapisuje również preferencje użytkownika w ciasteczku na przyszłe wizyty.
src/proxy.tsKopiuj kodSkopiuj kod do schowka
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 i18next zajmuje się ładowaniem i zarządzaniem tłumaczeniami, Intlayer pomaga zautomatyzować cały proces tłumaczeniowy.
Zarządzanie tłumaczeniami ręcznie 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, które automatyzują proces tłumaczeń. Można je zintegrować z Twoim 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.
- Podłączanie zewnętrznej zawartości
Automatyzuj swoje tłumaczenia,
Intlayer udostępnia CLI oraz rozszerzenie VSCode do automatyzacji tłumaczeń. Można je zintegrować z Twoim pipeline CI/CD. Dowiedz się więcej o automatyzacji tłumaczeń.
Możesz używać własnego klucza API oraz wybranego dostawcy AI. Zapewnia także tłumaczenia uwzględniające kontekst, zobacz wypełnianie treści.Podłącz zewnętrzne treści
Intlayer pozwala na podłączenie Twoich treści do zewnętrznego systemu 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 tłumaczeń.
I wiele więcej. Aby odkryć wszystkie funkcje oferowane przez Intlayer, zapoznaj się z dokumentacją Zainteresowanie Intlayer.
Komentarze
Nie ma jeszcze komentarzy. Bądź pierwszą osobą, która podzieli się swoimi przemyśleniami.