Globallashuv: bu nima, i18n va ilovalarda ko'p tillilik

Muallif: IT Sectr Nashr etilgan: 2026-02-26 O'qish vaqti: 8 daq

Globallashuv (globallashuv, shuningdek xalqarolilashtirish, i18n) — mobil ilovani manba kodini o'zgartirmasdan bir nechta til va mintaqaviy formatlar bilan ishlashga tayyorlash jarayoni. Matn resurslarini koddan ajratish, turli sana, raqam va valyuta formatlarini qo'llab-quvvatlash, matn yo'nalishini (LTR/RTL) hisobga olish va layout-ni turli tillarga moslashtirishni o'z ichiga oladi. iOS-da NSLocalizedString va Localizable.strings, Android-da esa values-{lang} kataloglarida strings.xml ishlatiladi. Batafsil Apple-ning xalqarolilashtirish hujjatlarida.

Asosiy

  • Globallashuv (i18n) — ilova kodini bir nechta til va mintaqalarga tayyorlash
  • NSLocalizedString — Localizable.strings dan tarjima qilingan satrlarni olish uchun Swift makrosi
  • strings.xml — har bir til uchun matn resurslari saqlanadigan Android XML fayli
  • RTL — o'ngdan chapga yoziladigan tillarni qo'llab-quvvatlash (arab, ivrit, urdu)
  • Formatlar — sanalar, raqamlar va valyutalar Locale-ga bog'liq API orqali formatlanishi kerak

Globallashuv (i18n) nima va u nima uchun kerak?

Globallashuv (qisqartmasi i18n — «i» va «n» orasida 18 harf) — ilovani istalgan til va mintaqa bilan ishlashga arxitektura tayyorligi. i18n ning asosiy qoidasi: hech qanday matn satri manba kodda qattiq kodlangan (hardcoded) bo'lmasligi kerak. Buning o'rniga satrlar resurs fayllariga chiqariladi va kod ularga kalitlar orqali murojaat qiladi. Yangi til qo'shganda tarjima faylini qo'shish kifoya — kod o'zgarishsiz qoladi. Bu i18n ni lokalizatsiyadan (l10n) farqlaydi, bu yerda satrlarning o'zi tarjima qilinadi.

Biznes argumenti — globallashuv bozorni oshiradi. Common Sense Advisory (2023) ma'lumotlariga ko'ra, foydalanuvchilarning 70% dan ortig'i ona tilidagi ilovalarda xarid qilishni afzal ko'radi. 10 tilga lokalizatsiya potentsial auditoriyani 80% ga oshiradi. i18n bo'lmasa, har bir yangi tilga kengayish kodni o'zgartirishni talab qiladi, bu esa bozorga chiqishni sekinlashtiradi va xarajatni 5–10 barobar oshiradi. To'g'ri i18n arxitekturasi minimal xarajat bilan 40+ tilni qo'llab-quvvatlashga imkon beradi.

i18n komponentlari o'z ichiga oladi: satrlarni ajratish (String externalization), ko'plik shakllari (pluralization 1/2/5+ uchun), sana va raqamlarni formatlash (DateFormatter/SimpleDateFormat), RTL tillarini qo'llab-quvvatlash (Right-to-Left), locale qoidalariga ko'ra saralash (Collator), mintaqaviy belgilar (minglik ajratgichlari, o'nlik belgilari). IT Sectr da i18n ni arxitektura bosqichida qo'yamiz, keyin emas — bu keyingi lokalizatsiyada 60% gacha vaqtni tejaydi.

iOS-da xalqarolilashtirish: NSLocalizedString va XLIFF

NSLocalizedString — tarjimalar bilan ishlash uchun asosiy Swift makrosi. Format: NSLocalizedString(«key», comment: «tarjimon uchun tavsif»). Makro avtomatik ravishda qurilmaning joriy locale-i (NSLocale.preferredLanguages) uchun Localizable.strings dan satrni almashtiradi. Kalit uchun tarjima topilmasa, kalitning o'zi yoki development language qiymati (odatda en) qaytariladi. Apple mazmunli kalitlardan foydalanishni tavsiya qiladi, kalit sifatida ingliz satrlarini emas.

swift
// Localizable.strings (en)
// "welcome_title" = "Xush kelibsiz!";
// Localizable.strings (ru)
// "welcome_title" = "Xush kelibsiz!";

// Swift kodi — barcha tillar uchun yagona
titleLabel.text = NSLocalizedString(
    "welcome_title",
    comment: "Xush kelish ekrani sarlavhasi"
)

// Localizable.stringsdict orqali ko'plik shakllari
// 
// <dict>
//     <key>items_count</key>
//     <dict>
//         <key>NSStringLocalizedFormatKey</key>
//         <string>%#@items@</string>
//         <key>items</key>
//         <dict>
//             <key>one</key>
//             <string>%d mahsulot</string>
//             <key>few</key>
//             <string>%d mahsulot</string>
//             <key>many</key>
//             <string>%d mahsulot</string>
//         </dict>
//     </dict>
// </dict>

// Ko'plik shakllaridan foydalanish
let items = 5
let label = String.localizedStringWithFormat(
    NSLocalizedString("items_count", comment: ""), items
)

XLIFF — dasturchilar va tarjimonlar o'rtasida tarjima almashish formati. Xcode XLIFF faylini eksport qiladi (Editor → Export for Localization) unda tarjima uchun barcha satrlar bo'ladi. Tarjimon CAT vositalarida (Trados, memoQ, Smartcat) XLIFF bilan ishlaydi. Tarjimadan so'ng XLIFF qaytadan Xcode-ga import qilinadi (Editor → Import Localizations). XLIFF barcha .lproj kataloglarini avtomatik yangilaydi. Bu ishlab chiqarishda iOS ilovalarini lokalizatsiya qilishning standart ish jarayonidir.

SwiftUI va i18n

SwiftUI Text inicializatori orqali NSLocalizedString bilan ishlaydi. SwiftUI da matn avtomatik xalqarolilashtirilgan: Text(«welcome_title») NSLocalizedString kabi Localizable.strings da tarjima qidiradi. Ko'plik shakllari uchun Text(«%d items», count: items) dan foydalaning. SwiftUI sanalarni Text(date, style: .date) orqali formatlashni qo'llab-quvvatlaydi — avtomatik ravishda Locale.current dan foydalanadi. Apple yangi loyihalar uchun SwiftUI ni tavsiya qiladi, chunki unda xalqarolilashtirish shaffofroq.

Android-da xalqarolilashtirish: strings.xml va RTL

Android i18n resurs tizimiga asoslanadi. Satrlar standart til uchun (odatda ingliz) res/values/strings.xml fayliga chiqariladi. Har bir til uchun alohida katalog yaratiladi: res/values-ru/strings.xml (rus), res/values-de/strings.xml (nemis), res/values-fr/strings.xml (fransuz). Android qurilmaning tizim tiliga qarab (Locale.getDefault()) avtomatik satrlarni tanlaydi. Aniq locale bo'lmasa, asosiy versiya (values/strings.xml) ishlatiladi.

kotlin
// res/values/strings.xml (ingliz, standart)
<resources>
    <string name="welcome_title">Welcome!</string>
    <string name="items_count">%d item(s)</string>
</resources>

// res/values-ru/strings.xml (rus)
<resources>
    <string name="welcome_title">Xush kelibsiz!</string>
    <plurals name="items_count">
        <item quantity="one">%d mahsulot</item>
        <item quantity="few">%d mahsulot</item>
        <item quantity="many">%d mahsulot</item>
    </plurals>
</resources>

// Kotlin kodi
textView.text = getString(R.string.welcome_title)

// Ko'plik shakllari
val items = 5
textView.text = resources.getQuantityString(
    R.plurals.items_count, items, items
)

// Kodda RTL qo'llab-quvvatlash
textView.textDirection = View.TEXT_DIRECTION_LOCALE
// Manifest: supportsRtl="true"

RTL (Right-to-Left) — matn o'ngdan chapga o'qiladigan tillarni qo'llab-quvvatlash (arab, ivrit, urdu, fors). Android RTL ni android:layoutDirection va android:textDirection atributlari orqali qo'llab-quvvatlaydi. Manifestda android:supportsRtl="true" ni o'rnating — va Android avtomatik layout-ni ko'zgulaydi. NavDrawer, orqaga/oldinga belgilari, matn tekislashi ikkala yo'nalishda ishlashi kerak. Kodda LEFT/RIGHT o'rniga View.LAYOUT_DIRECTION_LOCALE va Gravity.START/END dan foydalaning.

Mahalliylashtirilgan resurslar

Android Resource Qualifiers nafaqat satrlarni, balki tasvirlarni (res/drawable-ru/), layout-larni (res/layout-ru/), animatsiyalarni, ranglarni ham mahalliylashtirishga imkon beradi. Arab va ivrit uchun elementlarning ko'zgu joylashuvi bilan alohida layout-lar kerak — res/layout-ar/ (arab) dan foydalaning. Android shuningdek mintaqaviy variantlarni qo'llab-quvvatlaydi: values-rUS, values-rGB, values-de-DE. Qualifiers birlashadi: values-ldrtl-ru — RTL ekranlari uchun rus tili.

Mintaqaviy formatlar: iOS va Android-da sanalar, raqamlar, valyutalar

Sana va vaqt — i18n ning asosiy jihatlaridan biri. Turli mintaqalar turli formatlardan foydalanadi: Rossiya — KK.OO.YYYY, AQSh — OO/KK/YYYY, Yaponiya — YYYY.OO.KK. Foydalanuvchiga ko'rsatish uchun qat'iy formatdan (yyyy-MM-dd) foydalanish xato. iOS-da Locale(identifier: locale) bilan DateFormatter, Android-da DateFormat.getDateInstance(DateFormat.SHORT, locale) dan foydalaning. Ovozli yordamchilar va AI qidiruvi uchun sanalar ichki ko'rinishda ISO 8601 formatida bo'lishi kerak.

Raqamlar va valyuta — turli mintaqalarda turli ajratgichlar: 1,234.56 (AQSh) vs 1.234,56 (Rossiya), 1 234,56 (Fransiya). iOS: NumberFormatter .locale = locale bilan. Android: DecimalFormat DecimalFormatSymbols(locale) bilan. Valyutalar uchun: format ¥1,234 (Yaponiya) vs $1,234.56 (AQSh) vs 1 234,56 ₽ (Rossiya). Hech qachon valyuta va raqamni qo'lda birlashtirmang — NumberFormatter.currencyCode va .currencySymbol dan foydalaning.

MintaqaSanaRaqamValyuta
Rossiya31.12.20241 234,561 234,56 ₽
AQSh12/31/20241,234.56$1,234.56
Germaniya31.12.20241.234,561.234,56 €
Yaponiya2024/12/311,234¥1,234
Saudiya Arabistoni31/12/20241,234.561,234.56 SAR

Saralash (Collation) — alifbo bo'yicha saralash turli tillarda farqlanadi. Ispan tilida «ch» «c» dan keyin keladi. Shved tilida «ä» alifbo oxirida. Nemis tilida «ß» «ss» kabi saralanadi. iOS: LocalizedComparison (String.localizedCompare). Android: Collator.getInstance(locale). Foydalanuvchiga ko'rsatiladigan satrlar uchun hech qachon compareTo() dan foydalanmang — u mintaqaviy qoidalarni hisobga olmaydigan Unicode Code Point order dan foydalanadi.

Mobil ilovalarni xalqarolilashtirishning eng yaxshi amaliyotlari

Arxitektura tamoyillari — i18n ni birinchi commit dan boshlang. Koddagi har bir satr i18n sozlanmaguncha mavjud bo'lmagan o'rovchi funksiyadan (tr("key")) o'tishi kerak — bu dasturchini darhol satrlarni chiqarishga majbur qiladi. Kalit sifatida ingliz satrlaridan foydalanmang — ingliz tilida ifoda o'zgarganda barcha tarjimalarni yangilashga to'g'ri keladi. Mazmunli kalitlardan foydalaning: «profile.title», «settings.language.label».

Psevdolokalizatsiya — haqiqiy tarjimadan oldin i18n ni sinovdan o'tkazish texnikasi. Har bir lotin harfini kodlashni tekshirish uchun diakritik belgilar (á, é, ñ, ü) bilan almashtiring, satrlarning kesilishini tekshirish uchun [XXX] prefiksini qo'shing. Xcode: ishga tushirish sxemalari — «Double-Length Pseudolanguage» psevdotili. Android: Developer Options — Force RTL layout direction, System font scale 200% gacha. Psevdolokalizatsiya tarjimon ishtirokisiz i18n muammolarining 80% ini aniqlaydi.

IT Sectr i18n tekshirish ro'yxati — chiqarishdan oldin tekshiramiz: (1) kodda hardcoded satrlar yo'q (istisno: loglar), (2) ko'plik shakllari barcha tillar uchun to'g'ri ishlaydi, (3) sana/raqamlar Locale API orqali formatlanadi, (4) layout RTL tillarida to'g'ri ko'rsatiladi, (5) satrlar maksimal masshtablashda kesilmaydi, (6) psevdolokalizatsiya xatolarni aniqlamadi, (7) do'konlarda e'lon qilingan barcha tillar to'liq tarjima to'plamiga ega.

Tez-tez beriladigan savollar

i18n l10n dan qanday farq qiladi?

i18n (xalqarolilashtirish) — kodni tayyorlash: satrlarni ajratish, RTL qo'llab-quvvatlash, formatlash. Dasturchi tomonidan bir marta bajariladi. l10n (mahalliylashtirish) — satrlarni ma'lum bir tilga tarjima qilish. Tarjimon tomonidan har bir lokalizatsiya uchun ko'p marta bajariladi. i18n — arxitektura, l10n — mazmun. i18n bo'lmasa, mahalliylashtirish printsipial jihatdan mumkin emas.

NSLocalizedString Swift da qanday ishlaydi?

NSLocalizedString — qurilmaning joriy locale-i uchun Localizable.strings da kalit bo'yicha qiymat qidiradigan makro. Tarjima topilsa — uni qaytaradi. Topilmasa — kalitni qaytaradi. Format: NSLocalizedString(«key», comment: «tavsif»). Parametrlar bilan formatlash uchun String.localizedStringWithFormat() dan foydalaning.

Android da strings.xml qanday tuzilgan?

strings.xml — res/values/{lang}/ katalogida tarjimalar bilan fayl. Baza versiyasi values/strings.xml da, tarjimalar — values-ru/strings.xml da. Kod getString(R.string.key) orqali murojaat qiladi. Android tizim tiliga qarab kerakli faylni o'zi tanlaydi. Ko'plik shakllari uchun zero/one/few/many/other aniqligi bilan <plurals> resursi ishlatiladi.

i18n kontekstida RTL nima?

RTL (Right-to-Left) — arab, ivrit, urdu, fors tillari uchun yozuv yo'nalishi. Android: manifestda supportsRtl="true", android:layoutDirection, Gravity.START/END. iOS: majburiy RTL uchun UISemanticContentAttribute.forceLeftToRight. Layout ko'zgu shaklida aks etishi kerak: menyu o'ngda, matn — o'ngdan chapga, navigatsiya belgilari — teskari.

Qaysi tillar nashr qilish uchun majburiy?

Global nashr uchun minimal to'plam: ingliz, ispan, fransuz, nemis, yapon, xitoy, koreys, portugal, rus, italyan. App Store kamida ingliz lokalizatsiyasini talab qiladi. Har bir qo'shimcha lokalizatsiya potentsial auditoriyani oshiradi. Mahalliy bozor uchun 1–2 til yetarli.

Xulosa

  • Globallashuv (i18n) — ilovani ko'p tillar va mintaqalarga arxitektura tayyorligi
  • NSLocalizedString — Localizable.strings + XLIFF eksporti orqali satrlarni tarjima qilish uchun Swift makrosi
  • strings.xml — values-{lang} kataloglarida tarjimalar bilan Android resursi
  • RTL — arab, ivrit, urdu va fors tillari uchun majburiy qo'llab-quvvatlash
  • Formatlar — sanalar va raqamlar qat'iy Locale API orqali formatlanadi, qo'lda emas
  • Ko'plik shakllari — iOS: stringsdict, Android: olti miqdor shakli bilan <plurals>
  • Psevdolokalizatsiya — tarjimadan oldin i18n sinovdan o'tkazish texnikasi (80% muammolarni aniqlaydi)

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing