Asosiy kontentga o‘tish
Innovialabs

Ko‘p tilli sayt qanday qilinadi: i18n amalda

Amaliyot3 daq

Qisqacha

Ko‘p tilli sayt to‘rtta qarorga tayanadi: har bir til uchun alohida URL, kalitlar bo‘yicha fayllardagi tarjimalar, majburiy redirektsiz yumshoq til aniqlash va son, sana hamda ko‘plikni Intl orqali formatlash.

Qisqa javob

i18n (internatsionalizatsiya) — saytni bir nechta tilda ishlashga tayyorlash, l10n (lokalizatsiya) esa tarjimalarning o‘zi va moslashtirish. Keyin loyihani qayta qilmaslik uchun birinchi kundan boshlab quyidagilarni ko‘zda tuting:

  1. Har bir til uchun alohida URL.
  2. Matnlar tarjima fayllarida, kodda emas.
  3. Majburiy redirektlarsiz tilni aniqlash.
  4. Son, sana va ko‘plik shakllarini til qoidalari bo‘yicha formatlash.

Quyidagi misol — rus, ingliz va o‘zbek tillaridagi sayt, bunda o‘zbek tili lotin va kirill yozuvida bo‘ladi.

URL strategiyasi

VariantMisolAfzalliklariKamchiliklari
Papkalarsite.uz/ru/, site.uz/en/Oddiy, bitta domen, umumiy SEO vazni—
Subdomenlarru.site.uzServerlarga ajratish mumkinSozlash murakkabroq
Turli domenlarsite.uz, site.comMamlakat uchun kuchli signalQimmat va murakkab
Parametr?lang=ru—Qidiruv uchun yomon

Ko‘pchilik loyihalar uchun eng yaxshi tanlov — papkalar. O‘zbek tili uchun lotin yozuviga /uz/, kirill yozuviga /uz-cyrl/ ishlatish mumkin. Versiyalarni belgilashda hreflang orqali ru, en, uz-Latn, uz-Cyrl kodlari bilan bog‘lang va x-default qo‘shing.

Tarjima fayllari

Satrlarni kalitlar bo‘yicha JSON’da, har bir til uchun alohida faylda saqlang:

{
  "nav": { "services": "Xizmatlar", "contacts": "Kontaktlar" },
  "form": { "submit": "Ariza yuborish" }
}

Amaliy qoidalar:

  • Bitta manba til — haqiqat manbai, qolganlari undan tarjima qilinadi.
  • Kalitlar ma’no bo‘yicha (form.submit), matn bo‘yicha emas.
  • Iboralarni bo‘laklardan yopishtirmang: tillarda so‘z tartibi turlicha. O‘rniga qo‘yishlardan foydalaning: "Salom, {name}".
  • CI’da tushib qolganlarni tekshirish: agar kalit fayllardan birida bo‘lmasa, yig‘ish bu haqda xabar berishi kerak.

O‘zbek kirill yozuvini lotindan transliteratsiya orqali olish mumkin, lekin natijani albatta o‘qib chiqing: avtomatika o‘zlashma so‘zlar va apostroflarda xato qiladi.

Tilni aniqlash

  • Bosh manzil / da Accept-Language sarlavhasini ko‘rib, mos versiyaga yo‘naltirish mumkin.
  • /en/... kabi aniq manzillardan yo‘naltirmang: foydalanuvchi ham, qidiruv roboti ham aynan so‘ragan sahifasini olishi kerak.
  • Foydalanuvchi tanlovini cookie’da saqlang va keyingi tashriflarda hurmat qiling.
  • Til almashtirgich bosh sahifaga emas, boshqa tildagi o‘sha sahifaga olib borishi kerak.

Ko‘plik shakllari

Ingliz va o‘zbek tillarida otlarning ikki shakli bor, rus tilida esa ko‘proq: «1 товар», «3 товара», «5 товаров». Shartlarni qo‘lda yozmang — Intl.PluralRules dan foydalaning:

const rules = new Intl.PluralRules("ru");
const forms: Record<string, string> = {
  one: "товар", few: "товара", many: "товаров", other: "товара",
};

const label = (n: number) => `${n} ${forms[rules.select(n)]}`;
label(1);  // "1 товар"
label(3);  // "3 товара"
label(11); // "11 товаров"

i18next yoki next-intl kabi kutubxonalar xuddi shu ishni ICU MessageFormat orqali bajaradi.

Sanalar, sonlar va valyutalar

new Intl.NumberFormat("ru").format(1234567.5); // "1 234 567,5"
new Intl.NumberFormat("en").format(1234567.5); // "1,234,567.5"
new Intl.DateTimeFormat("en", { dateStyle: "long" }).format(new Date());

Qo‘lda formatlamang: minglik ajratkichlar, o‘nlik vergul va kun bilan oyning tartibi farq qiladi. uz-Latn va uz-Cyrl qo‘llab-quvvatlanishi ishga tushirish muhitiga bog‘liq, shuning uchun natijani serverda va brauzerlarda tekshiring, kerak bo‘lsa o‘z formatingizni belgilang.

Ko‘p uchraydigan xatolar

  • Almashtirgichda til nomlari o‘rniga mamlakat bayroqlari.
  • Interfeys tarjima qilingan, lekin meta-teglar, alt-matnlar va xatlar tarjima qilinmagan.
  • Barcha til versiyalarida bir xil title.
  • Uzun so‘zlarda maket buziladi: nemis va o‘zbek matnlari rus yoki ingliz matnidan sezilarli uzunroq bo‘lishi mumkin.

Ko‘p beriladigan savollar

Qoralama sifatida — ha, lekin ona tilida so‘zlashuvchi tekshirmasdan nashr qilish xavfli: ishonch ham, sahifalarning qidiruvdagi sifati ham zarar ko‘radi.

Bunda yordam beramiz

O‘zingiz shug‘ullanmasdan natija olishni istasangiz — biz har kuni shu bilan shug‘ullanamiz.

Loyihani muhokama qilish

Yana o‘qing

G‘oya yoki vazifangiz bormi? Bizga aytib bering

Ish kuni davomida javob beramiz va yechim taklif qilamiz. Konsultatsiya bepul.