Yangi alifbo: texnik talablar (dasturchilar va tashkilotlar uchun)
Yangi alifboga o‘tishda eng ko‘p xato ko‘rinmaydigan joyda bo‘ladi: bir xil ko‘rinadigan, lekin boshqa kodli harf, noto‘g‘ri saralash, bazada ikki xil yozuv. Bu sahifa — sayt, ilova yoki ma’lumotlar bazasini yangi alifboga tayyorlash uchun qisqa texnik ro‘yxat.
1. Harflar va Unicode kodlari
Qonunning 1-moddasidagi alifbo tartibi:
| Harf | Kod (katta / kichik) | Eski yozuv | To‘g‘ri belgi | Adashtiriladigan belgi |
|---|---|---|---|---|
| Ö ö | U+00D6 / U+00F6 | O‘ o‘ | tayyor harf (NFC) | O + U+0308 (alohida ikki nuqta) |
| Ğ ğ | U+011E / U+011F | G‘ g‘ | tayyor harf (NFC) | G + U+0306 |
| Ş ş | U+015E / U+015F | Sh sh | pastki ilmoqli (cedilla) Ş | rumincha Ș ș — U+0218 / U+0219 (vergulli) |
| Ç ç | U+00C7 / U+00E7 | Ch ch | tayyor harf (NFC) | C + U+0327 |
| ʼ | U+02BC | ' ` ‘ ’ ʻ | modifier letter apostrophe | U+2019 ’ (tinish belgisi), U+0027 ', U+02BB ʻ |
Ş va Ș ekranda deyarli bir xil, lekin kodi boshqa. Bazada ikkalasi aralashsa, «Şahar» qidiruvi «Șahar» yozuvini topmaydi. O‘zbek alifbosida faqat U+015E / U+015F.
NFC: bitta harf — bitta kod
Ö ni ikki xil kodlash mumkin: tayyor U+00D6 yoki O + qo‘shiluvchi U+0308. Ko‘rinish bir xil, lekin satrlar teng emas. Matnni saqlash va solishtirishdan oldin NFC shakliga keltiring — u ikkala holatni tayyor harfga yig‘adi:
// JavaScript
text.normalize("NFC")
# Python
unicodedata.normalize("NFC", text)
-- PostgreSQL 13+
SELECT normalize(name, NFC) FROM t;
NFC rumincha Ș ni Ş ga aylantirmaydi — bu ikki alohida harf. Uni alohida tekshiring: [Șș] qidiruvi topgan har yozuv — xato. (bitg yadrosi kirishdagi Ș ni o‘zi Ş ga almashtiradi.)
Tutuq belgisi
Yangi alifboda apostrofga o‘xshash belgi faqat tutuq uchun qoladi: maʼno, sanʼat. Uning kodi — U+02BC (harf toifasidagi belgi: so‘z ichida so‘zni bo‘lmaydi). Tinish belgisi U+2019 ’ va oddiy U+0027 ' bilan aralashtirmang: so‘z bo‘yicha qidiruv, imlo tekshiruvi va so‘zga ajratish ularni boshqacha ko‘radi.
2. Saralash (collation)
Qonundagi tartib: G < Ğ, O < Ö, S < Ş < Ç, keyin T. Ya’ni Ç C qatorida emas, Ş dan keyin turadi. Odatiy tartiblash bunday ishlamaydi:
| Usul | Natija | |
|---|---|---|
| Qonun bo‘yicha | Gul, Ğalaba, Ota, Öqituvçi, Sut, Şahar, Çoy, Zamin | to‘g‘ri |
ICU / CLDR umumiy tartib (shu jumladan uz locale) | Çoy, Ğalaba, Gul, Öqituvçi, Ota, Şahar, Sut, Zamin | Ç, Ğ, Ö, Ş — oddiy harfning varianti |
Turkcha (tr) | Çoy, Gul, Ğalaba, Ota, Öqituvçi, Sut, Şahar, Zamin | Ç — C dan keyin |
| Kod nuqtasi bo‘yicha (binary) | Gul, Ota, Sut, Zamin, Çoy, Öqituvçi, Ğalaba, Şahar | yangi harflar Z dan keyin |
Uchta qator Node.js (ICU 78.3) da Intl.Collator("uz"), Intl.Collator("tr") va oddiy sort() bilan olingan, 2026-11-14. SQL Server’ning Latin1_General collation’i ham Ç ni C qatoriga qo‘yadi.
ICU qoidasi
To‘g‘ri tartib uchun umumiy tartibga uchta qoida qo‘shiladi (< — alohida harf, <<< — katta/kichik farqi):
&G<ğ<<<Ğ
&O<ö<<<Ö
&S<ş<<<Ş<ç<<<Ç
PostgreSQL 16+ da bu qoida bilan collation yaratish mumkin:
CREATE COLLATION uz_2026 (
provider = icu, locale = 'und',
rules = '&G<ğ<<<Ğ &O<ö<<<Ö &S<ş<<<Ş<ç<<<Ç'
);
SELECT name FROM city ORDER BY name COLLATE uz_2026;
SQL Server’da o‘z collation’ingizni yaratib bo‘lmaydi: saralashni ilovada ICU bilan qiling yoki alohida saralash kaliti ustunini saqlang. Boshqa tizimlarda (MySQL, Oracle va h.k.) qoidani qo‘shish imkoniyatini o‘sha tizim hujjatidan tekshiring. Ng qonunda alohida harf emas — saralashda ham n + g.
3. O‘girishdagi tuzoqlar
Oddiy almashtirish (sh → ş, ch → ç) bir qatorda yoziladi, lekin real matnda xato beradi:
| Kirish | Oddiy almashtirish | To‘g‘ri natija |
|---|---|---|
| shop, cache, Shell, Chevrolet (chet so‘z, brend) | şop, caçe, Şell, Çevrolet | o‘zgarmaydi |
| Is'hoq (s va h orasida tutuq) | Is'hoq | Ishoq |
| o‘zbek, o’zbek, o`zbek, oʻzbek (apostrof turlari) | faqat bittasi o‘giriladi | hammasi özbek |
| ozbek tilida (apostrofsiz) | ozbek | özbek (kontekstdan) |
| qol / qo‘l (apostrofsiz, ikki ma’noli) | — | yozilganicha qoladi, «tekshiring» deb belgilanadi |
«To‘g‘ri natija» ustuni — bitg chiqishi (bitg CLI, 2026-11-14). Konvertor sifatining to‘liq o‘lchovi: ochiq benchmark.
4. Ma’lumotlar bazasini o‘girish: tekshiruv ro‘yxati
- Audit. Qaysi jadval va ustunlarda o‘zbekcha matn bor, nechta qator o‘zgaradi — avval sanab oling.
- Sinov rejimi. Konvertor bazaga yozmasdan «eski → yangi» hisobotini bersin, ikki ma’noli qatorlar alohida belgilansin. bitg’da:
bitg diffvabitg file --dry-run. - Asl qiymat saqlanadi. Yangi qiymat alohida ustun yoki jurnalga yoziladi — xato chiqsa qaytarish mumkin bo‘lsin.
- Kalit maydonlarga tegilmaydi. STIR (INN), JSHSHIR (PINFL), raqamlar, login, URL va email o‘girilmaydi.
- Normallashtirish. Yozishdan oldin NFC, Ș → Ş, tutuq →
U+02BC. - Collation va indekslar. O‘girishdan keyin qidiruv indekslari qayta quriladi, saralash 2-bo‘limdagi qoida bilan.
- Ikki yozuv davri. Qidiruv eski va yangi yozuvni bir xil topishi kerak (o‘zbek = özbek): qidiruv kalitini bitta shaklga keltirib saqlang.
5. Tayyor vositalar
| Vosita | Nima uchun |
|---|---|
bitg-core (Rust, MIT / Apache-2.0) | o‘girish yadrosi: o‘z ilovangiz yoki ETL’ga ulash |
bitg CLI | matn, .docx, .xlsx, .txt, .md fayllar; diff va --dry-run bilan sinov |
| Onlayn konvertor | bir martalik matn, brauzerda (WebAssembly), matn serverga ketmaydi |
MCP server https://bitg.uz/mcp | AI yordamchilar va avtomatlashtirish uchun convert_text |
eval/ (CC BY 4.0) | o‘z konvertoringizni sinash uchun 9 000 gap |
Savol yoki xato bo‘lsa: GitHub issues.
Yangilangan:
Manbalar
- O‘RQ-1184 qonuni matni — lex.uz — 1-modda: alifbo jadvali va tartibi
- Unicode Standard Annex #15: Unicode Normalization Forms — NFC
- ICU User Guide — Collation Customization (tartiblash qoidalari sintaksisi)
- PostgreSQL — CREATE COLLATION (rules parametri, 16-versiyadan)
- bitg-core — Rust kutubxonasi (crates.io) — MIT yoki Apache-2.0