0Pricing
React Academy · Lekcja

Przełącznik języka i leniwe ładowanie tłumaczeń

Budowa przełącznika lokalizacji i ładowanie pakietów tłumaczeń na żądanie w celu zmniejszenia rozmiaru początkowego.

Przełącznik języka i leniwe ładowanie tłumaczeń to bezpłatna lekcja React Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.

Wprowadzenie

W tej lekcji zbudują Państwo komponent przełącznika języka i skonfigurują i18next tak, aby ładował pakiety tłumaczeń na żądanie, zmniejszając początkowy rozmiar pakietu JavaScript.

Prosty przełącznik języka

Po kliknięciu przycisku należy wywołać i18n.changeLanguage(), aby przełączyć aktywny język. Wszystkie komponenty korzystające z useTranslation zostaną automatycznie ponownie wyrenderowane w nowym języku.
function LanguageSwitcher() {
  const { i18n } = useTranslation();
  return (
    <div>
      {['en', 'tr', 'fr'].map(lng => (
        <button
          key={lng}
          onClick={() => i18n.changeLanguage(lng)}
          style={{ fontWeight: i18n.language === lng ? 'bold' : 'normal' }}
        >
          {lng.toUpperCase()}
        </button>
      ))}
    </div>
  );
}

Zapisywanie wyboru języka

Wybrany język należy zapisać w localStorage, aby wybór był zachowany po ponownym załadowaniu strony. Wtyczka LanguageDetector obsługuje to automatycznie przy użyciu kolejności detektorów z `localStorage`.
i18n.init({
  detection: {
    order: ['localStorage', 'navigator'],
    caches: ['localStorage'],
  },
});

Dlaczego warto leniwie ładować tłumaczenia?

Dołączenie wszystkich tłumaczeń do pakietu JavaScript wydłuża początkowe ładowanie. Leniwe ładowanie wysyła przy pierwszym ładowaniu tylko domyślny język, a pozostałe języki pobiera dopiero po ich przełączeniu przez użytkownika.

Konfigurowanie backendu HTTP

Wtyczka i18next-http-backend pobiera pliki tłumaczeń zgodnie ze wzorcem adresu URL. Tłumaczenia znajdują się w folderze `public/` i są udostępniane jako zasoby statyczne — kod po stronie serwera nie jest potrzebny.
import Backend from 'i18next-http-backend';

i18n.use(Backend).init({
  backend: {
    loadPath: '/locales/{{lng}}/{{ns}}.json',
  },
  ns: ['common', 'auth'],
  defaultNS: 'common',
});

Dodawanie plików tłumaczeń

Proszę utworzyć w `public/locales/` jeden plik JSON dla każdego języka i każdej przestrzeni nazw. Backend HTTP automatycznie pobierze je, gdy dany język lub przestrzeń nazw będą potrzebne po raz pierwszy.
public/locales/
  en/common.json
  en/auth.json
  tr/common.json
  tr/auth.json

Wyświetlanie stanu ładowania podczas zmiany języka

Po wywołaniu changeLanguage() i18next asynchronicznie ładuje pliki nowego języka. Aby wyświetlić wskaźnik ładowania, należy zasubskrybować zdarzenie `i18n.on('languageChanged')` lub sprawdzać `i18n.isInitialized`.
const [switching, setSwitching] = useState(false);

const change = async (lng) => {
  setSwitching(true);
  await i18n.changeLanguage(lng);
  setSwitching(false);
};

Leniwe ładowanie określonych przestrzeni nazw

Przestrzeń nazw należy ładować dopiero wtedy, gdy jest po raz pierwszy potrzebna, używając `i18n.loadNamespaces(['dashboard'])`. Wywołanie to należy umieścić w useEffect uruchamianym po zamontowaniu trasy dashboard, aby nie ładować jej dla nieuwierzytelnionych użytkowników.
useEffect(() => {
  i18n.loadNamespaces('dashboard');
}, []);

CDN dla tłumaczeń

W środowisku produkcyjnym pliki tłumaczeń należy hostować w sieci CDN (S3 + CloudFront). Proszę zaktualizować `loadPath`, podając adres URL CDN. Pozwala to oddzielić aktualizacje tłumaczeń od wdrażania kodu.
backend: {
  loadPath: 'https://cdn.example.com/locales/{{lng}}/{{ns}}.json',
}

Locale w adresie URL

Wiele aplikacji umieszcza locale w adresie URL, na przykład /en/products lub /tr/products. React Router należy połączyć z i18n: odczytać locale z parametru adresu URL, wywołać changeLanguage i aktualizować adres URL po przełączeniu języka przez użytkownika.

Szybkie sprawdzenie

Do czego służy wtyczka i18next-http-backend?

Podsumowanie

Należy zbudować przełącznik języka z użyciem i18n.changeLanguage(). Wybór języka należy zapisywać za pomocą detektora localStorage. Do leniwego ładowania plików tłumaczeń należy użyć i18next-http-backend. Podczas zmiany języka należy wyświetlać stan ładowania. W środowisku produkcyjnym pliki warto hostować w sieci CDN.

Kurs ukończony

Gratulacje! Ukończyli Państwo kurs **Internacjonalizacja (i18n) w React**. Potrafią już Państwo skonfigurować react-i18next, tłumaczyć ciągi znaków za pomocą przestrzeni nazw, obsługiwać formy liczby mnogiej i interpolację oraz leniwie ładować pliki tłumaczeń.

Często zadawane pytania

Czy lekcja „Przełącznik języka i leniwe ładowanie tłumaczeń” jest bezpłatna?

Tak — pełny tekst „Przełącznik języka i leniwe ładowanie tłumaczeń” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Przełącznik języka i leniwe ładowanie tłumaczeń”?

Budowa przełącznika lokalizacji i ładowanie pakietów tłumaczeń na żądanie w celu zmniejszenia rozmiaru początkowego. Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć React Academy?

Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Przełącznik języka i leniwe ładowanie tłumaczeń”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?

Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Konfiguracja react-i18next
  2. Używanie hooka useTranslation
  3. Liczba mnoga i interpolacja
  4. Przełącznik języka i leniwe ładowanie tłumaczeń
← Powrót do React Academy