ScriptProvider
Kontentni foydalanuvchi tanlagan alifboda ko'rsatish: lotin yoki kirill, tanlov eslab qolinadi.
Oʻzbekiston boʻylab yetkazib berish
Buyurtmangiz 2–3 kun ichida eshigingizgacha yetkaziladi. Toʻlov — naqd yoki karta orqali.
'use client';
import { ScriptProvider, ScriptToggle, Translit } from '@akhatmirzo/ui';
export default function ScriptOverview() {
return (
<ScriptProvider defaultScript="latin">
<div className="flex w-full max-w-md flex-col items-start gap-4">
<ScriptToggle size="sm" />
<Translit as="h3" className="text-lg font-semibold text-text">
Oʻzbekiston boʻylab yetkazib berish
</Translit>
<Translit as="p" className="text-sm text-text-muted">
Buyurtmangiz 2–3 kun ichida eshigingizgacha yetkaziladi. Toʻlov — naqd yoki karta orqali.
</Translit>
</div>
</ScriptProvider>
);
}
Import
import { ScriptProvider, ScriptToggle, Translit, useScript } from '@akhatmirzo/ui';Matn bazada bitta alifboda saqlanadi (odatda lotin), foydalanuvchi esa uni o'zi tanlagan
alifboda o'qiydi. O'girish @akhatmirzo/core dagi toScript orqali bajariladi — manba alifbo
avtomatik aniqlanadi, shuning uchun kirillda saqlangan matn ham lotinga to'g'ri o'giriladi.
| Qism | Vazifasi |
|---|---|
ScriptProvider | Joriy alifboni saqlaydi (ixtiyoriy — localStorage da) |
ScriptToggle | "Lotin | Кирилл" almashtirgich — SegmentedControl asosida |
Translit | Matnni joriy alifboda chizadi va lang atributini qo'yadi |
useScript | { script, setScript, t } — o'z komponentlaringiz va atributlar uchun |
Qachon ishlatish
- O'zbek tilidagi ilova — foydalanuvchilarning bir qismi kirillda o'qishni afzal ko'radi. Kontentni ikki marta yozish shart emas.
- Sarlavha, tugma, qisqa matnlar uchun
Translityokit(). Foydalanuvchi kiritgan ma'lumotni (ism, manzil) o'girmang — u qanday yozilgan bo'lsa, shunday qoladi. - Atributlar uchun (
placeholder,aria-label,title) —useScript().t, chunkiTranslitelement chizadi. - Boshqa tillar uchun emas — bu tarjima emas, faqat o'zbek tilining ikki yozuvi o'rtasida o'girish.
ScriptToggle
Provider ichida uning holatini o'zi boshqaradi. Standart matnlar — "Lotin", "Кирилл", guruh nomi
(aria-label) — "Alifbo"; ularni labels bilan o'zgartirasiz. SegmentedControl
prop'lari (size, fullWidth, disabled ...) ham ishlaydi.
'use client';
import { ScriptProvider, ScriptToggle, Translit } from '@akhatmirzo/ui';
export default function ScriptPersist() {
return (
<ScriptProvider defaultScript="latin" storageKey="docs-script-demo">
<div className="flex flex-col items-start gap-3">
<ScriptToggle labels={{ latin: 'Lotincha', cyrillic: 'Кириллча' }} />
<Translit className="text-sm text-text-muted">
Tanlovingiz eslab qolinadi — sahifani yangilab koʻring.
</Translit>
</div>
</ScriptProvider>
);
}
Provider'siz ham ishlatish mumkin — value va onValueChange bilan oddiy boshqariladigan
komponent bo'ladi.
useScript
t(text) — matnni joriy alifboga o'giradi. Provider tashqarisida script — 'latin', t esa
matnni o'zgartirmaydi, shuning uchun komponentingiz provider'siz ham buzilmaydi.
script: cyrillic
'use client';
import { Button, ScriptProvider, ScriptToggle, useScript } from '@akhatmirzo/ui';
function Cart() {
const { script, t } = useScript();
return (
<div className="flex flex-col items-start gap-3">
<p className="text-sm text-text-muted">
script: <code>{script}</code>
</p>
<Button variant="primary">{t('Savatga qoʻshish')}</Button>
<input
className="h-10 w-full rounded-lg border border-border bg-surface px-3 text-sm text-text"
placeholder={t('Mahsulot qidirish')}
aria-label={t('Mahsulot qidirish')}
/>
</div>
);
}
export default function UseScriptDemo() {
return (
<ScriptProvider defaultScript="cyrillic">
<div className="flex w-full max-w-sm flex-col gap-4">
<ScriptToggle />
<Cart />
</div>
</ScriptProvider>
);
}
const { script, setScript, t } = useScript();
t('Salom'); // kirill tanlangan bo'lsa — "Салом"
setScript('cyrillic');Tanlovni eslab qolish va SSR
storageKey berilsa, tanlov localStorage da shu kalit bilan saqlanadi va boshqa tablar bilan
sinxronlanadi. Server render va birinchi render doim defaultScript bilan bo'ladi — saqlangan
qiymat gidratatsiyadan keyin o'qiladi. Shu tufayli Next.js'da gidratatsiya xatosi chiqmaydi.
localStorage taqiqlangan bo'lsa (private rejim), tanlov faqat joriy sessiyada qoladi.
<ScriptProvider defaultScript="latin" storageKey="script">
{children}
</ScriptProvider>Boshqariladigan rejim: script + onScriptChange (masalan, tanlovni foydalanuvchi profilida
saqlash uchun).
Boshqa komponentlar bilan
Provider ichida RegionSelect hudud nomlarini va
MoneyInput showWords summani joriy alifboda ko'rsatadi.
Props
ScriptProvider
| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
script | 'latin' | 'cyrillic' | — | Joriy alifbo (boshqariladigan rejim) |
defaultScript | 'latin' | 'cyrillic' | 'latin' | Boshlang'ich alifbo; SSR va birinchi render shu bilan |
onScriptChange | (script: UzScript) => void | — | Alifbo o'zgarganda |
storageKey | string | — | Tanlovni localStorage da shu kalit bilan eslab qolish |
children | ReactNode | — |
ScriptToggle
SegmentedControl prop'larini (value, defaultValue,
onValueChange va children dan tashqari) qabul qiladi.
| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
value | 'latin' | 'cyrillic' | — | Boshqariladigan qiymat; berilmasa — provider'dagi alifbo |
defaultValue | 'latin' | 'cyrillic' | 'latin' | Provider ham, value ham bo'lmaganda |
onValueChange | (script: UzScript) => void | — | Tanlov o'zgarganda (provider ham yangilanadi) |
labels | { latin?: string; cyrillic?: string; group?: string } | { latin: "Lotin", cyrillic: "Кирилл", group: "Alifbo" } | |
size | 'sm' | 'md' | 'lg' | 'md' |
Translit
Qolgan HTML atributlar elementga uzatiladi.
| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
childrenmajburiy | string | — | O'giriladigan matn (lotin yoki kirill) |
as | ElementType | 'span' | Render qilinadigan element |
lang | string | — | Standart — joriy alifboga qarab uz-Latn yoki uz-Cyrl |
useScript
| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
script | 'latin' | 'cyrillic' | — | Joriy alifbo |
setScript | (script: UzScript) => void | — | Alifboni almashtirish |
t | (text: string) => string | — | Matnni joriy alifboga o'girish |
Accessibility
langatributi.Translitelementigalang="uz-Latn"yokilang="uz-Cyrl"qo'yiladi — ekran o'quvchi to'g'ri talaffuzni tanlaydi, qidiruv tizimlari yozuvni aniqlaydi. Provider bo'lmasa,langmatnning o'zidan aniqlanadi.<html lang>ga tegilmaydi.- ScriptToggle —
radiogroup(aria-label— "Alifbo"), ←→ bilan yuriladi. "Кирилл" tugmasidalang="uz-Cyrl"bor, shuning uchun lotin interfeysda ham to'g'ri o'qiladi. - Fokus saqlanadi. Alifbo almashganda faqat matn o'zgaradi, elementlar qayta yaratilmaydi.