Sprachumschaltung

Wie man zwischen Sprachen wechselt

Einführung

Lingo.dev bietet mehrere Möglichkeiten, um zwischen Sprachen in Ihrer Anwendung zu wechseln. Sie können die integrierte <LocaleSwitcher />-Komponente verwenden oder benutzerdefinierte Umschalter mit den Hooks useLingoLocale() und setLingoLocale() erstellen.

Integrierter LocaleSwitcher

Die <LocaleSwitcher />-Komponente ist eine vorgefertigte Lösung, die automatisch den Sprachwechsel mit einer Dropdown-Oberfläche verwaltet.

import { LocaleSwitcher } from "@lingo.dev/react";

function App() {
  return (
    <div>
      <h1>My App</h1>
      <LocaleSwitcher locales={["en", "es", "de", "fr"]} />
    </div>
  );
}

Der LocaleSwitcher erledigt automatisch folgende Aufgaben:

  • Anzeige verfügbarer Sprachen
  • Anzeige der aktuell aktiven Sprache
  • Verarbeitung des Sprachwechsels bei Auswahl einer neuen Option

Benutzerdefinierte Sprachumschalter

Für mehr Kontrolle über die Benutzeroberfläche und das Verhalten können Sie benutzerdefinierte Sprachumschalter mit den Hooks useLingoLocale() und setLingoLocale() erstellen.

Select

Eine Dropdown-Auswahlkomponente, die eine saubere, native HTML-Select-Schnittstelle für den Sprachwechsel bietet. Sie können Ihre eigenen CSS-Stile verwenden, um das Design Ihrer Anwendung anzupassen.

import { useLingoLocale, setLingoLocale } from "@lingo.dev/react";

function CustomLocaleSwitcher() {
  const currentLocale = useLingoLocale();

  return (
    <div className="locale-switcher">
      <select
        value={currentLocale}
        onChange={(e) => setLingoLocale(e.target.value)}
      >
        <option value="en">English</option>
        <option value="es">Spanish</option>
        <option value="de">German</option>
        <option value="fr">French</option>
      </select>
    </div>
  );
}

Buttons

Ein Button-basierter Umschalter mit Flaggen-Emojis und responsivem Design, der visuelles Feedback für die aktive Sprache bietet.

import { useLingoLocale, setLingoLocale } from "@lingo.dev/react";

function ButtonLocaleSwitcher() {
  const currentLocale = useLingoLocale();

  const locales = [
    { code: "en", name: "English", flag: "🇺🇸" },
    { code: "es", name: "Spanish", flag: "🇪🇸" },
    { code: "de", name: "German", flag: "🇩🇪" },
    { code: "fr", name: "French", flag: "🇫🇷" },
  ];

  return (
    <div className="flex gap-2">
      {locales.map((locale) => (
        <button
          key={locale.code}
          onClick={() => setLingoLocale(locale.code)}
          className={`flex items-center gap-2 px-3 py-2 rounded-md border transition-colors ${
            currentLocale === locale.code
              ? "bg-blue-500 text-white border-blue-500"
              : "bg-white text-gray-700 border-gray-300 hover:bg-gray-50"
          }`}
          title={locale.name}
        >
          <span className="text-lg">{locale.flag}</span>
          <span className="hidden sm:inline">{locale.name}</span>
        </button>
      ))}
    </div>
  );
}

Styling mit Design-Bibliotheken

Mit Hooks können Sie Ihre benutzerdefinierten Sprachwechsler mit jeder Design-Bibliothek stylen, die Sie bereits in Ihrem Projekt verwenden.

shadcn/ui

import { useLingoLocale, setLingoLocale } from "@lingo.dev/react";
import {
  Select,
  SelectContent,
  SelectItem,
  SelectTrigger,
  SelectValue,
} from "@/components/ui/select";

function ShadcnLocaleSwitcher() {
  const currentLocale = useLingoLocale();

  return (
    <Select value={currentLocale} onValueChange={setLingoLocale}>
      <SelectTrigger className="w-[180px]">
        <SelectValue placeholder="Select language" />
      </SelectTrigger>
      <SelectContent>
        <SelectItem value="en">🇺🇸 English</SelectItem>
        <SelectItem value="es">🇪🇸 Spanish</SelectItem>
        <SelectItem value="de">🇩🇪 German</SelectItem>
        <SelectItem value="fr">🇫🇷 French</SelectItem>
      </SelectContent>
    </Select>
  );
}

HeroUI

import { useLingoLocale, setLingoLocale } from "@lingo.dev/react";
import { Select, SelectItem } from "@heroui/react";

function HeroUILocaleSwitcher() {
  const currentLocale = useLingoLocale();

  const locales = [
    { key: "en", label: "🇺🇸 English" },
    { key: "es", label: "🇪🇸 Spanish" },
    { key: "de", label: "🇩🇪 German" },
    { key: "fr", label: "🇫🇷 French" },
  ];

  return (
    <Select
      label="Language"
      selectedKeys={[currentLocale]}
      onSelectionChange={(keys) => setLingoLocale(Array.from(keys)[0])}
      className="max-w-xs"
    >
      {locales.map((locale) => (
        <SelectItem key={locale.key}>{locale.label}</SelectItem>
      ))}
    </Select>
  );
}

Mantine

import { useLingoLocale, setLingoLocale } from "@lingo.dev/react";
import { Select } from "@mantine/core";

function MantineLocaleSwitcher() {
  const currentLocale = useLingoLocale();

  const locales = [
    { value: "en", label: "🇺🇸 English" },
    { value: "es", label: "🇪🇸 Spanish" },
    { value: "de", label: "🇩🇪 German" },
    { value: "fr", label: "🇫🇷 French" },
  ];

  return (
    <Select
      label="Language"
      value={currentLocale}
      onChange={setLingoLocale}
      data={locales}
      w={200}
    />
  );
}

Chakra UI

import { useLingoLocale, setLingoLocale } from "@lingo.dev/react";
import { Select, createListCollection } from "@chakra-ui/react";

function ChakraLocaleSwitcher() {
  const currentLocale = useLingoLocale();

  const locales = createListCollection({
    items: [
      { label: "🇺🇸 English", value: "en" },
      { label: "🇪🇸 Spanish", value: "es" },
      { label: "🇩🇪 German", value: "de" },
      { label: "🇫🇷 French", value: "fr" },
    ],
  });

  return (
    <Select.Root
      collection={locales}
      value={[currentLocale]}
      onValueChange={(e) => setLingoLocale(e.value[0])}
      size="sm"
    >
      <Select.HiddenSelect />
      <Select.Label>Language</Select.Label>
      <Select.Control>
        <Select.Trigger>
          <Select.ValueText placeholder="Select language" />
        </Select.Trigger>
        <Select.IndicatorGroup>
          <Select.Indicator />
        </Select.IndicatorGroup>
      </Select.Control>
      <Select.Positioner>
        <Select.Content>
          {locales.items.map((locale) => (
            <Select.Item item={locale} key={locale.value}>
              {locale.label}
              <Select.ItemIndicator />
            </Select.Item>
          ))}
        </Select.Content>
      </Select.Positioner>
    </Select.Root>
  );
}

Dies ermöglicht es Ihnen, konsistente Design-Muster in Ihrer Anwendung beizubehalten, während Sie benutzerdefinierte Funktionen zur Sprachumschaltung entwickeln.