تبديل اللغات
كيفية التبديل بين اللغات
مقدمة
توفر Lingo.dev طرقًا متعددة للتبديل بين اللغات في تطبيقك. يمكنك استخدام مكون <LocaleSwitcher />
المدمج أو إنشاء مبدلات مخصصة باستخدام واجهات useLingoLocale()
وsetLingoLocale()
.
مبدل اللغات المدمج
مكون <LocaleSwitcher />
هو حل جاهز يتعامل تلقائيًا مع تبديل اللغات باستخدام واجهة قائمة منسدلة.
import { LocaleSwitcher } from "@lingo.dev/react";
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";
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";
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";
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>
);
}
يتيح لك ذلك الحفاظ على أنماط تصميم متسقة عبر تطبيقك أثناء بناء وظائف مخصصة لتبديل اللغات.