تبديل اللغات
كيفية التبديل بين اللغات
مقدمة
توفر 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>
);
}
يتيح لك ذلك الحفاظ على أنماط تصميم متسقة عبر تطبيقك أثناء بناء وظائف مخصصة لتبديل اللغة.