Asosiy matnga o‘tish
bitg
Yuklab olish

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:

ABDEFGĞHIJKLMNOÖPQRSŞÇTUVXYZʼ
HarfKod (katta / kichik)Eski yozuvTo‘g‘ri belgiAdashtiriladigan belgi
Ö öU+00D6 / U+00F6O‘ o‘tayyor harf (NFC)O + U+0308 (alohida ikki nuqta)
Ğ ğU+011E / U+011FG‘ g‘tayyor harf (NFC)G + U+0306
Ş şU+015E / U+015FSh shpastki ilmoqli (cedilla) Şrumincha Ș ș — U+0218 / U+0219 (vergulli)
Ç çU+00C7 / U+00E7Ch chtayyor harf (NFC)C + U+0327
ʼU+02BC' ` ‘ ’ ʻmodifier letter apostropheU+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:

UsulNatija
Qonun bo‘yichaGul, Ğalaba, Ota, Öqituvçi, Sut, Şahar, Çoy, Zaminto‘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, Şaharyangi 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:

KirishOddiy almashtirishTo‘g‘ri natija
shop, cache, Shell, Chevrolet (chet so‘z, brend)şop, caçe, Şell, Çevroleto‘zgarmaydi
Is'hoq (s va h orasida tutuq)Is'hoqIshoq
o‘zbek, o’zbek, o`zbek, oʻzbek (apostrof turlari)faqat bittasi o‘giriladihammasi ö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

  1. Audit. Qaysi jadval va ustunlarda o‘zbekcha matn bor, nechta qator o‘zgaradi — avval sanab oling.
  2. Sinov rejimi. Konvertor bazaga yozmasdan «eski → yangi» hisobotini bersin, ikki ma’noli qatorlar alohida belgilansin. bitg’da: bitg diff va bitg file --dry-run.
  3. Asl qiymat saqlanadi. Yangi qiymat alohida ustun yoki jurnalga yoziladi — xato chiqsa qaytarish mumkin bo‘lsin.
  4. Kalit maydonlarga tegilmaydi. STIR (INN), JSHSHIR (PINFL), raqamlar, login, URL va email o‘girilmaydi.
  5. Normallashtirish. Yozishdan oldin NFC, Ș → Ş, tutuq → U+02BC.
  6. Collation va indekslar. O‘girishdan keyin qidiruv indekslari qayta quriladi, saralash 2-bo‘limdagi qoida bilan.
  7. Ikki yozuv davri. Qidiruv eski va yangi yozuvni bir xil topishi kerak (o‘zbek = özbek): qidiruv kalitini bitta shaklga keltirib saqlang.

5. Tayyor vositalar

VositaNima uchun
bitg-core (Rust, MIT / Apache-2.0)o‘girish yadrosi: o‘z ilovangiz yoki ETL’ga ulash
bitg CLImatn, .docx, .xlsx, .txt, .md fayllar; diff va --dry-run bilan sinov
Onlayn konvertorbir martalik matn, brauzerda (WebAssembly), matn serverga ketmaydi
MCP server https://bitg.uz/mcpAI 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

  1. O‘RQ-1184 qonuni matni — lex.uz — 1-modda: alifbo jadvali va tartibi
  2. Unicode Standard Annex #15: Unicode Normalization Forms — NFC
  3. ICU User Guide — Collation Customization (tartiblash qoidalari sintaksisi)
  4. PostgreSQL — CREATE COLLATION (rules parametri, 16-versiyadan)
  5. bitg-core — Rust kutubxonasi (crates.io) — MIT yoki Apache-2.0

Bog‘liq sahifalar