i18n — dasturiy mahsulotni turli til, yozuv tizimi, hudud, sana, son va madaniy qoidalarga moslashtirishga tayyorlash jarayoni. Atama internationalization so‘zining birinchi va oxirgi harfi orasidagi 18 ta harf sabab qisqartirilgan.
i18n dastur arxitekturasi va source code’da bajariladi. Tarjimaning o‘zi esa localization — l10n jarayoniga kiradi.
Asosiy maqsad
Internationalization bir xil codebase’dan turli locale uchun mahsulot chiqarish imkonini beradi.
U quyidagilarni ajratadi:
- foydalanuvchi matni;
- sana va vaqt formati;
- son va valyuta;
- plural;
- text yo‘nalishi;
- input method;
- font;
- sorting;
- translated asset.
Kod ichida bitta tilga qattiq bog‘langan qiymatlar kamaytiriladi.
Externalized string
UI matni source code ichida tarqoq literal bo‘lib qolmaydi.
O‘rniga message key ishlatiladi:
order.created
Translation katalog:
order.created = Buyurtma yaratildi
ko‘rinishida qiymat beradi.
Key barqaror va ma’noli bo‘lishi kerak.
Message va fragment
Gapni bir nechta kichik tarjima fragmentidan yig‘ish noto‘g‘ri bo‘lishi mumkin.
Masalan:
"Hello " + name + ", you have " + count + " messages"
Turli tilda so‘z tartibi o‘zgaradi.
To‘liq message va named placeholder ishlatiladi:
Hello {name}, you have {count} messages.
Translator gap tartibini erkin o‘zgartiradi.
Placeholder
Placeholder nomi ma’noli bo‘ladi:
{userName}
{itemCount}
{createdAt}
{0}, {1} kabi positional placeholder tarjimada adashishga moyil.
Type va format contexti translation vositasida ko‘rsatiladi.
Plural
Plural logic code’dagi count == 1 sharti bilan cheklanmaydi.
Turli tillar ko‘p plural categoryga ega.
Message format:
{count, plural,
one {...}
other {...}
}
kabi qoidalar bilan ishlashi mumkin.
Zero har doim alohida grammatical category emas.
Gender va select
Ayrim tilda message grammatical gender yoki boshqa kategoriyaga bog‘liq.
Select expression kerakli variantni tanlaydi.
Bu foydalanuvchining shaxsiy atributlarini keraksiz yig‘ish degani emas; faqat mahsulot talab qilgan lingvistik context asosida ishlatiladi.
Sana va vaqt
Date format qo‘lda string concatenation bilan yaratilmaydi.
- oy nomi;
- tartib;
- 12/24 soat;
- weekday;
- calendar;
- digit
qoidalarini qo‘llaydi.
Time zone locale’dan alohida parameter.
Son va valyuta
Number formatter:
- decimal separator;
- grouping;
- percent;
- currency;
- compact notation
ni boshqaradi.
Backend protocol uchun invariant numeric format, UI uchun localized ko‘rinish ishlatiladi.
RTL
Arab va ibroniy kabi tillar o‘ngdan chapga yoziladi.
i18n dizayni:
- layout mirror;
- text alignment;
- icon yo‘nalishi;
- navigation;
- bidirectional text;
- input caret
ni qo‘llashi kerak.
Barcha ikonlar mirror qilinmaydi; masalan, media play belgisi kontekstga bog‘liq.
Text kengayishi
Tarjima asl matndan uzunroq bo‘lishi mumkin.
UI:
- fixed widthga qattiq bog‘lanmaydi;
- text wrap;
- dynamic height;
- truncation policy;
- tooltip;
- responsive layout
bilan ishlaydi.
Pseudo-localization textni sun’iy uzaytirib muammoni oldindan ko‘rsatadi.
Unicode
Internationalized dastur Unicode textni end-to-end qo‘llaydi.
Tekshiriladi:
- UTF-8;
- database;
- API;
- filename;
- search;
- normalization;
- grapheme;
- font.
Faqat UI tarjimasi yetarli emas, data storage ham to‘liq belgilarni saqlashi kerak.
Font
Font kerakli script glyphlarini qamrashi kerak.
Fallback font:
- style farqi;
- line height;
- missing glyph;
- emoji;
- shaping
muammosiga ega bo‘lishi mumkin.
Complex script uchun shaping engine zarur.
Input
User faqat lotin keyboard bilan ishlamasligi mumkin.
Form:
ni qo‘llashi kerak.
Har keypressda validation IME compositionni buzmasligi kerak.
Sorting va search
Locale-aware collation user listini tabiiy tartibda ko‘rsatadi.
- case folding;
- accent;
- normalization;
- transliteration;
- tokenization
siyosatiga ega.
Database collation va application search engine bir xil natija bermasligi mumkin.
Message context
Bir xil source so‘z turli ma’noga ega bo‘lishi mumkin.
Masalan, “Open”:
- file ochish;
- ochiq holat;
- biznes ishlayapti.
Translation key yoki context bu ma’nolarni ajratadi.
Pseudo-localization
- uzaytiradi;
- accent qo‘shadi;
- bracket bilan o‘raydi;
- RTLga o‘xshatadi.
Bu hardcoded string, clipping va concatenationni haqiqiy tarjimadan oldin aniqlaydi.
Resource loading
Translation resource:
dan yuklanishi mumkin.
Locale almashtirilganda cache va fallback to‘g‘ri yangilanadi.
i18n test
Testlar:
- missing key;
- placeholder mosligi;
- plural variant;
- RTL screenshot;
- Unicode input;
- long text;
- locale format;
- fallback;
- accessibility label
ni qamrab oladi.
Faqat default tilda test qilish internationalization xatolarini yashiradi.
Translation key barqarorligi
Key source gapning o‘zi bo‘lsa, matndagi kichik tahrir barcha tarjimalarni yangi keyga aylantiradi. Semantic key esa barqaror, lekin contextni nomda yoki metadata’da saqlashi kerak.
Server va client
Server-rendered matn, mobil client va email bir xil translation catalog versiyasidan foydalanmasligi mumkin. Message qayerda render qilinishi va locale qayerda tanlanishi architecture’da aniq belgilanadi.
Log va diagnostika
Machine loglar ko‘pincha barqaror inglizcha yoki structured code bilan yoziladi, UI esa localized message ko‘rsatadi. Faqat tarjima qilingan log orqali alert va qidiruv qurish qiyin.
Accessibility
Screen reader uchun label va error message ham translation katalogiga kiradi. Vizual text yashirilgan bo‘lsa ham accessibility matni locale va plural qoidalariga mos bo‘lishi kerak.
Bog‘liq tushunchalar
Internationalization, Localization, Locale, Unicode, CLDR, Plural rules, RTL, Message format, Translation catalog, Pseudo-localization