Zadaj pytanie i otrzymaj streszczenie dokumentu, odwołując się do tej strony i wybranego dostawcy AI
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
Tłumaczenie strony Next.js 15 z użyciem next-i18next i Intlayer | Internacjonalizacja (i18n)
Dla kogo jest ten przewodnik
- Junior: Postępuj dokładnie według kroków i kopiuj bloki kodu. Otrzymasz działającą wielojęzyczną aplikację.
- Mid-level: Używaj list kontrolnych i wskazówek najlepszych praktyk, aby unikać typowych pułapek.
- Senior: Przejrzyj ogólną strukturę, sekcje SEO i automatyzacji; znajdziesz tam rozsądne domyślne ustawienia i punkty rozszerzeń.
Co zbudujesz
- Projekt App Router z lokalizowanymi trasami (np.
/,/fr/...) - Konfiguracja i18n z lokalizacjami, domyślną lokalizacją, wsparciem RTL
- Inicjalizacja i18n po stronie serwera oraz provider po stronie klienta
- Tłumaczenia z przestrzeniami nazw ładowane na żądanie
- SEO z
hreflang, lokalizowaną mapą strony (sitemap),robots - Middleware do routingu lokalizacji
- Integracja Intlayer do automatyzacji procesów tłumaczeniowych (testy, uzupełnianie AI, synchronizacja JSON)
Uwaga: next-i18next jest zbudowany na bazie i18next. Ten przewodnik korzysta z prymitywów i18next kompatybilnych z next-i18next w App Router, jednocześnie utrzymując architekturę prostą i gotową do produkcji. Dla szerszego porównania zobacz next-i18next vs next-intl vs Intlayer.
1) Struktura projektu
Zainstaluj zależności next-i18next -
Zacznij od przejrzystej struktury. Zachowaj podział wiadomości według lokalizacji i przestrzeni nazw.
Lista kontrolna (mid/senior):
- Zachowaj jeden plik JSON na przestrzeń nazw na lokalizację
- Nie centralizuj nadmiernie wiadomości; używaj małych przestrzeni nazw ograniczonych do strony/funkcji
- Unikaj importowania wszystkich lokalizacji naraz; ładuj tylko to, czego potrzebujesz
2) Instalacja zależności
Jeśli planujesz używać API next-i18next lub integracji konfiguracji, dodaj również:
3) Podstawowa konfiguracja i18n
Zdefiniuj lokalizacje, domyślną lokalizację, RTL oraz pomocnicze funkcje do lokalizowanych ścieżek/URL-i.
Uwaga seniora: Jeśli używasz next-i18next.config.js, utrzymuj go zgodnego z i18n.config.ts, aby uniknąć rozbieżności.
4) Inicjalizacja i18n po stronie serwera
Zainicjuj i18next na serwerze z dynamicznym backendem, który importuje tylko wymagane pliki JSON dla danej lokalizacji/przestrzeni nazw.
Uwaga środkowa: Utrzymuj listę przestrzeni nazw krótką na stronę, aby ograniczyć rozmiar ładunku. Unikaj globalnych pakietów „catch-all”.
5) Provider klienta dla komponentów React
Opakuj komponenty klienta w providera, który odzwierciedla konfigurację serwera i ładuje tylko żądane przestrzenie nazw.
Junior tip: Nie musisz przekazywać wszystkich komunikatów do klienta. Zacznij tylko od przestrzeni nazw strony.
6) Lokalizowany układ i trasy
Ustaw język i kierunek oraz wstępnie wygeneruj trasy dla każdego locale, aby sprzyjać statycznemu renderowaniu.
7) Przykładowa strona z użyciem po stronie serwera i klienta
Tłumaczenia (po jednym pliku JSON na przestrzeń nazw w src/locales/...):
Komponent klienta (ładuje tylko wymaganą przestrzeń nazw):
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.
Synchronous server component embedded under a client boundary:
8) SEO: Metadane, Hreflang, Sitemap, Robots
Tłumaczenie treści jest sposobem na zwiększenie zasięgu. Dokładnie skonfiguruj wielojęzyczne SEO.
Najlepsze praktyki:
- Ustaw
langidirw elemencie root - Dodaj
alternates.languagesdla każdego locale (+x-default) - Wymień przetłumaczone URL-e w
sitemap.xmli używajhreflang - Wyklucz zlokalizowane prywatne obszary (np.
/fr/admin) wrobots.txt
9) Middleware do routingu lokalizacji
Wykrywa lokalizację i przekierowuje do zlokalizowanej ścieżki, jeśli jej brakuje.
10) Wydajność i najlepsze praktyki DX
- Ustaw atrybuty html
langidir: Zrobione wsrc/app/[locale]/layout.tsx. - Podziel wiadomości według namespace: Utrzymuj małe pakiety (
common.json,about.jsonitd.). - Minimalizuj obciążenie klienta: Na stronach przekazuj tylko wymagane namespace do providera.
- Preferuj strony statyczne: Używaj
export const dynamic = 'force-static'orazgenerateStaticParamsdla każdego locale. - Synchronizuj komponenty serwerowe: Przekazuj wcześniej obliczone ciągi/formatowanie zamiast wywołań asynchronicznych w czasie renderowania.
- Memoizuj ciężkie operacje: Szczególnie w kodzie klienta dla starszych wersji React.
- Cache i nagłówki: Preferuj statyczne lub
revalidatezamiast renderowania dynamicznego, gdy to możliwe.
11) Testowanie i CI
- Dodaj testy jednostkowe dla komponentów używających
t, aby upewnić się, że klucze istnieją. - Zweryfikuj, czy każda przestrzeń nazw ma te same klucze we wszystkich lokalizacjach.
- Wyświetl brakujące klucze podczas CI przed wdrożeniem.
Intlayer zautomatyzuje większość z tych zadań (patrz następna sekcja).
12) Dodaj Intlayer na górę (automatyzacja)
Intlayer pomaga utrzymać synchronizację tłumaczeń JSON, testować brakujące klucze oraz uzupełniać je za pomocą AI, gdy jest to potrzebne.
Zainstaluj zależności intlayer:
Dodaj skrypty do pakietu:
Typowe przepływy:
pnpm i18n:testw CI, aby przerwać budowanie przy brakujących kluczachpnpm i18n:filllokalnie, aby zaproponować tłumaczenia AI dla nowo dodanych kluczy
Możesz podać argumenty CLI; zobacz dokumentację Intlayer CLI.
13) Rozwiązywanie problemów
- Nie znaleziono kluczy: Upewnij się, że strona/dostawca wymienia poprawne przestrzenie nazw, a plik JSON istnieje pod ścieżką
src/locales/<locale>/<namespace>.json. - Nieprawidłowy język/krótkie pojawienie się angielskiego: Sprawdź ponownie wykrywanie lokalizacji w
middleware.tsoraz wartośćlngw dostawcy. - Problemy z układem RTL: Zweryfikuj, czy
dirjest wyprowadzany zisRtl(locale)oraz czy Twój CSS obsługuje[dir="rtl"]. - Brak alternatyw SEO: Potwierdź, że
alternates.languageszawiera wszystkie lokalizacje orazx-default. - Zbyt duże paczki: Dalsze dzielenie przestrzeni nazw i unikanie importowania całych drzew
localespo stronie klienta.
14) Co dalej
- Dodaj więcej lokalizacji i przestrzeni nazw w miarę rozwoju funkcji
- Lokalizuj strony błędów, e-maile oraz treści generowane przez API
- Rozszerz workflow Intlayer, aby automatycznie otwierać PR-y dla aktualizacji tłumaczeń
Jeśli wolisz gotowy starter, wypróbuj szablon: https://github.com/aymericzip/intlayer-next-i18next-template.