1. Documentation
    2. Umwelt
    3. Intlayer mit React CRA

    Getting Started Internationalizing (i18n) with Intlayer and React Create App

    Was ist Intlayer?

    Intlayer ist eine innovative, Open-Source-Bibliothek für Internationalisierung (i18n), die entwickelt wurde, um die mehrsprachige Unterstützung in modernen Webanwendungen zu vereinfachen.

    Mit Intlayer können Sie:

    • Übersetzungen einfach verwalten mithilfe deklarativer Wörterbücher auf Komponentenebene.
    • Metadaten, Routen und Inhalte dynamisch lokalisieren.
    • TypScript-Unterstützung sicherstellen mit automatisch generierten Typen, die die Autovervollständigung und Fehlererkennung verbessern.
    • Von fortschrittlichen Funktionen profitieren, wie dynamischer Lokalisierungserkennung und -wechsel.

    Schritt-für-Schritt-Anleitung zur Einrichtung von Intlayer in einer React-Anwendung

    Schritt 1: Abhängigkeiten installieren

    Installieren Sie die benötigten Pakete mit npm:

    bash
    1npm install intlayer react-intlayer
    bash
    1yarn add intlayer react-intlayer
    bash
    1pnpm add intlayer react-intlayer

    Schritt 2: Konfiguration Ihres Projekts

    Erstellen Sie eine Konfigurationsdatei, um die Sprachen Ihrer Anwendung zu konfigurieren:

    typescript
    1// intlayer.config.ts 2 3import { Locales, type IntlayerConfig } from "intlayer"; 4 5const config: IntlayerConfig = { 6 internationalization: { 7 locales: [ 8 Locales.ENGLISH, 9 Locales.FRENCH, 10 Locales.SPANISH, 11 // Ihre weiteren Sprachen 12 ], 13 defaultLocale: Locales.ENGLISH, 14 }, 15}; 16 17export default config;

    Um alle verfügbaren Parameter zu sehen, siehe die Konfigurationsdokumentation hier.

    Schritt 3: Intlayer in Ihre CRA-Konfiguration integrieren

    Ändern Sie Ihre Skripte, um react-intlayer zu verwenden

    json
    1 "scripts": { 2 "build": "react-intlayer build", 3 "start": "react-intlayer start", 4 "transpile": "intlayer build" 5 },

    Hinweis: Die react-intlayer-Skripte basieren auf craco. Sie können auch Ihre eigene Einrichtung basierend auf dem Intlayer-craco-Plugin implementieren. Siehe Beispiel hier.

    Schritt 4: Erklären Sie Ihren Inhalt

    Erstellen und verwalten Sie Ihre Inhaltswörterbücher:

    tsx
    1// src/app.content.tsx 2import { t, type DeclarationContent } from "intlayer"; 3import { type ReactNode } from "react"; 4 5const appContent = { 6 key: "app", 7 content: { 8 getStarted: t<ReactNode>({ 9 en: ( 10 <> 11 Bearbeiten Sie <code>src/App.tsx</code> und speichern Sie, um neu zu 12 laden 13 </> 14 ), 15 fr: ( 16 <> 17 Éditez <code>src/App.tsx</code> et enregistrez pour recharger 18 </> 19 ), 20 es: ( 21 <> 22 Edita <code>src/App.tsx</code> y guarda para recargar 23 </> 24 ), 25 }), 26 reactLink: { 27 href: "https://reactjs.org", 28 content: t({ 29 en: "Learn React", 30 fr: "Apprendre React", 31 es: "Aprender React", 32 }), 33 }, 34 }, 35} satisfies DeclarationContent; 36 37export default appContent;

    Siehe, wie Sie Ihre Intlayer-Deklarationsdateien deklarieren.

    Schritt 5: Nutzen Sie Intlayer in Ihrem Code

    Greifen Sie auf Ihre Inhaltswörterbücher in Ihrer Anwendung zu:

    tsx
    1import logo from "./logo.svg"; 2import "./App.css"; 3import { IntlayerProvider, useIntlayer } from "react-intlayer"; 4import { LocaleSwitcher } from "./components/LangSwitcherDropDown"; 5 6function AppContent() { 7 const content = useIntlayer("app"); 8 9 return ( 10 <header className="App-header"> 11 <img src={logo} className="App-logo" alt="logo" /> 12 13 {content.getStarted} 14 <a 15 className="App-link" 16 href={content.reactLink.href.value} 17 target="_blank" 18 rel="noopener noreferrer" 19 > 20 {content.reactLink.content} 21 </a> 22 </header> 23 ); 24} 25 26function App() { 27 return ( 28 <IntlayerProvider> 29 <div className="App"> 30 {/* Um den useIntlayer-Hook ordnungsgemäß zu verwenden, sollten Sie auf Ihre Daten in einer Kinderkomponente zugreifen */} 31 <AppContent /> 32 </div> 33 <div className="absolute bottom-5 right-5 z-50"> 34 <LocaleSwitcher /> 35 </div> 36 </IntlayerProvider> 37 ); 38} 39 40export default App;

    Hinweis: Wenn Sie Ihren Inhalt in einem string-Attribut wie alt, title, href, aria-label usw. verwenden möchten, müssen Sie den Wert der Funktion aufrufen, wie:

    tsx
    1<img src={content.image.src.value} alt={content.image.value} />

    (Optional) Schritt 6: Ändern Sie die Sprache Ihres Inhalts

    Um die Sprache Ihres Inhalts zu ändern, können Sie die setLocale-Funktion verwenden, die vom useLocale-Hook bereitgestellt wird. Diese Funktion ermöglicht es Ihnen, die Locale der Anwendung festzulegen und den Inhalt entsprechend zu aktualisieren.

    tsx
    1import { Locales } from "intlayer"; 2import { useLocale } from "react-intlayer"; 3 4const LocaleSwitcher = () => { 5 const { setLocale } = useLocale(); 6 7 return ( 8 <button onClick={() => setLocale(Locales.English)}> 9 Sprache auf Englisch ändern 10 </button> 11 ); 12};

    (Optional) Schritt 7: Fügen Sie Ihrer Anwendung lokalisierte Routen hinzu

    Ziel dieses Schrittes ist es, einzigartige Routen für jede Sprache zu erstellen. Dies ist nützlich für SEO und SEO-freundliche URLs. Beispiel:

    tsx
    1// /dashboard 2// /es/dashboard 3// /fr/dashboard

    Standardmäßig sind die Routen für die Standard-Sprache nicht vorangestellt. Wenn Sie die Standard-Sprache voranstellen möchten, können Sie die Option middleware.prefixDefault in Ihrer Konfiguration auf true setzen. Siehe die Konfigurationsdokumentation für mehr Informationen.

    Um lokalisierte Routen zu Ihrer Anwendung hinzuzufügen, können Sie eine LocaleRouter-Komponente erstellen, die die Routen Ihrer Anwendung umschließt und die lokalisierte Routenverarbeitung übernimmt. Hier ist ein Beispiel mit React Router:

    tsx
    1// Notwendige Abhängigkeiten und Funktionen importieren 2import { Locales, getConfiguration, getPathWithoutLocale } from "intlayer"; // Hilfsfunktionen und -typen von 'intlayer' 3import { FC, PropsWithChildren } from "react"; // React-Typen für funktionale Komponenten und Props 4import { IntlayerProvider } from "react-intlayer"; // Provider für den Internationalisierungs-Kontext 5import { 6 BrowserRouter, 7 Routes, 8 Route, 9 useParams, 10 Navigate, 11 useLocation, 12} from "react-router-dom"; // Router-Komponenten zur Verwaltung der Navigation 13 14// Konfiguration von Intlayer destrukturieren 15const { internationalization, middleware } = getConfiguration(); 16const { locales, defaultLocale } = internationalization; 17 18/** 19 * Eine Komponente, die die Lokalisierung verarbeitet und Kinder mit dem entsprechenden Locale-Kontext umschließt. 20 * Sie verwaltet die locale-basierte URL-Erkennung und -Validierung. 21 */ 22const AppLocalized: FC<PropsWithChildren> = ({ children }) => { 23 const path = useLocation().pathname; // Den aktuellen URL-Pfad erhalten 24 const { locale } = useParams<{ locale: Locales }>(); // Das Locale-Parameter aus der URL extrahieren 25 26 // Bestimmen Sie das aktuelle Locale, falls nicht angegeben, auf das Standardlocale zurückfallen 27 const currentLocale = locale ?? defaultLocale; 28 29 // Entfernen Sie die Locale-Präfix vom Pfad, um einen Basis-Pfad zu erstellen 30 const pathWithoutLocale = removeLocaleFromUrl( 31 path // Aktueller URL-Pfad 32 ); 33 34 /** 35 * Wenn middleware.prefixDefault true ist, sollte die Standard-Sprache immer vorangestellt werden. 36 */ 37 if (middleware.prefixDefault) { 38 // Validieren Sie das Locale 39 if (!locale || !locales.includes(locale)) { 40 // Weiterleiten auf die Standard-Sprache mit dem aktualisierten Pfad 41 return ( 42 <Navigate 43 to={`/${defaultLocale}/${pathWithoutLocale}`} 44 replace // Den aktuellen Verlaufseintrag mit dem neuen ersetzen 45 /> 46 ); 47 } 48 49 // Umschließen Sie die Kinder mit dem IntlayerProvider und setzen Sie die aktuelle Sprache 50 return ( 51 <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider> 52 ); 53 } else { 54 /** 55 * Wenn middleware.prefixDefault false ist, ist die Standard-Sprache nicht vorangestellt. 56 * Stellen Sie sicher, dass die aktuelle Sprache gültig ist und nicht die Standard-Sprache ist. 57 */ 58 if ( 59 currentLocale.toString() !== defaultLocale.toString() && 60 !locales 61 .filter( 62 (locale) => locale.toString() !== defaultLocale.toString() // Die Standard-Sprache ausschließen 63 ) 64 .includes(currentLocale) // Überprüfen, ob die aktuelle Sprache in der Liste der gültigen Sprachen ist 65 ) { 66 // Weiterleiten zum Pfad ohne Locale-Präfix 67 return <Navigate to={pathWithoutLocale} replace />; 68 } 69 70 // Umschließen Sie die Kinder mit dem IntlayerProvider und setzen Sie die aktuelle Sprache 71 return ( 72 <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider> 73 ); 74 } 75}; 76 77/** 78 * Eine Router-Komponente, die locale-spezifische Routen einrichtet. 79 * Sie verwendet React Router zur Verwaltung der Navigation und zum Rendern lokalisierter Komponenten. 80 */ 81export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => ( 82 <BrowserRouter> 83 <Routes> 84 <Route 85 // Routenmuster, um die Sprache (z.B. /en/, /fr/) zu erfassen und alle nachfolgenden Pfade zuzuordnen 86 path="/:locale/*" 87 element={<AppLocalized>{children}</AppLocalized>} // Umschließt Kinder mit Lokalisierungsverwaltung 88 /> 89 90 { 91 // Wenn das Voranstellen der Standardsprache deaktiviert ist, die Kinder direkt am Stammpfad rendern 92 !middleware.prefixDefault && ( 93 <Route 94 path="*" 95 element={<AppLocalized>{children}</AppLocalized>} // Umschließt Kinder mit Lokalisierungsverwaltung 96 /> 97 ) 98 } 99 </Routes> 100 </BrowserRouter> 101);

    (Optional) Schritt 8: Ändern Sie die URL, wenn das Locale wechselt

    Um die URL zu ändern, wenn das Locale wechselt, können Sie das onLocaleChange-Prop verwenden, das vom useLocale-Hook bereitgestellt wird. Parallel dazu können Sie die Hooks useLocation und useNavigate von react-router-dom verwenden, um den URL-Pfad zu aktualisieren.

    tsx
    1import { Locales, getLocalizedUrl } from "intlayer"; 2import { useLocale } from "react-intlayer"; 3import { useLocation, useNavigate } from "react-router-dom"; 4 5const LocaleSwitcher = () => { 6 const location = useLocation(); // Den aktuellen URL-Pfad erhalten. Beispiel: /fr/about 7 const navigate = useNavigate(); 8 9 const changeUrl = (locale: Locales) => { 10 // Die URL mit dem aktualisierten Locale erstellen 11 // Beispiel: /es/about mit dem Locale auf Spanisch gesetzt 12 const pathWithLocale = getLocalizedUrl(location.pathname, locale); 13 14 // Den URL-Pfad aktualisieren 15 navigate(pathWithLocale); 16 }; 17 18 const { setLocale } = useLocale({ 19 onLocaleChange: changeUrl, 20 }); 21 22 return ( 23 <button onClick={() => setLocale(Locales.English)}> 24 Sprache auf Englisch ändern 25 </button> 26 ); 27};

    TypeScript konfigurieren

    Intlayer verwendet Modul-Augen zu den Vorteilen von TypeScript und macht Ihren Code stärker.

    alt text

    alt text

    Stellen Sie sicher, dass Ihre TypeScript-Konfiguration die automatisch generierten Typen umfasst.

    json5
    1// tsconfig.json 2 3{ 4 // Ihre benutzerdefinierte Konfiguration 5 include: [ 6 "src", 7 "types", // <- Die automatisch generierten Typen einbeziehen 8 ], 9}

    Git-Konfiguration

    Es wird empfohlen, die von Intlayer generierten Dateien zu ignorieren. So vermeiden Sie, dass sie in Ihr Git-Repository eingeht.

    Fügen Sie dazu die folgenden Anweisungen zu Ihrer .gitignore-Datei hinzu:

    gitignore
    1# Ignorieren Sie die von Intlayer generierten Dateien 2.intlayer

    Wenn Sie eine Idee haben, um diese Dokumentation zu verbessern, zögern Sie bitte nicht, durch das Einreichen eines Pull-Requests auf GitHub beizutragen.

    GitHub-Link zur Dokumentation

    Auf dieser Seite