تبديل اللغات

كيفية التبديل بين اللغات

مقدمة

توفر Lingo.dev طرقًا متعددة للتبديل بين اللغات في تطبيقك. يمكنك استخدام مكون <LocaleSwitcher /> المدمج أو إنشاء مبدلات مخصصة باستخدام واجهات البرمجة useLingoLocale() و setLingoLocale().

مبدل اللغات المدمج

يعد مكون <LocaleSwitcher /> حلاً جاهزاً يتعامل تلقائياً مع تبديل اللغات من خلال واجهة قائمة منسدلة.

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

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

يقوم LocaleSwitcher تلقائياً بما يلي:

  • عرض اللغات المتاحة
  • إظهار اللغة النشطة الحالية
  • التعامل مع تبديل اللغة عند اختيار خيار جديد

مبدلات اللغات المخصصة

للحصول على مزيد من التحكم في واجهة المستخدم والسلوك، يمكنك بناء مبدلات لغة مخصصة باستخدام واجهات useLingoLocale() وsetLingoLocale().

قائمة اختيار

مكون قائمة منسدلة يوفر واجهة HTML أصلية نظيفة لتبديل اللغات. يمكنك استخدام أنماط CSS الخاصة بك لتتناسب مع تصميم تطبيقك.

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

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>
  );
}

أزرار

مبدل لغة يعتمد على الأزرار مع رموز تعبيرية للأعلام وتصميم متجاوب يوفر تغذية راجعة مرئية للغة النشطة.

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

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>
  );
}

التنسيق باستخدام مكتبات التصميم

باستخدام الخطافات (hooks) يمكنك تنسيق مبدلات اللغات المخصصة باستخدام أي مكتبة تصميم موجودة بالفعل في مشروعك.

shadcn/ui

import { useLingoLocale, setLingoLocale } from "lingo.dev/react/client";
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/client";
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/client";
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/client";
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>
  );
}

يتيح لك ذلك الحفاظ على أنماط تصميم متسقة عبر تطبيقك أثناء بناء وظائف مخصصة لتبديل اللغة.