Qloballaşma: bu nədir, i18n və tətbiqlərdə çoxdillilik

Müəllif: IT Sectr Dərc olunub: 2026-02-26 Oxuma vaxtı: 8 dəq

Qloballaşma (qloballaşma, həmçinin beynəlmiləlləşdirmə, i18n) — mobil tətbiqin mənbə kodu dəyişdirilmədən bir neçə dil və regional formatla işləməyə hazırlanması prosesi. Mətn resurslarının koddan çıxarılması, müxtəlif tarix, rəqəm və valyuta formatlarının dəstəklənməsi, mətn istiqamətinin (LTR/RTL) nəzərə alınması və layout-un müxtəlif dillərə uyğunlaşdırılmasını əhatə edir. iOS-da NSLocalizedString və Localizable.strings, Android-də isə values-{lang} kataloqlarında strings.xml istifadə olunur. Ətraflı Apple-ın beynəlmiləlləşdirmə sənədlərində.

Əsas məqamlar

  • Qloballaşma (i18n) — tətbiq kodunun bir neçə dil və regiona hazırlanması
  • NSLocalizedString — Localizable.strings-dən tərcümə edilmiş sətirləri çıxarmaq üçün Swift makrosu
  • strings.xml — hər bir dil üçün mətn resurslarının saxlandığı Android XML faylı
  • RTL — sağdan sola yazılan dillərin dəstəyi (ərəb, ivrit, urdu)
  • Formatlar — tarixlər, rəqəmlər və valyutalar Locale-dən asılı API vasitəsilə formatlanmalıdır

Qloballaşma (i18n) nədir və niyə lazımdır?

Qloballaşma (qısaca i18n — «i» və «n» arasında 18 hərf) — tətbiqin istənilən dil və regionla işləmək üçün memarlıq hazırlığı. i18n-in əsas qaydası: heç bir mətn sətri mənbə kodda sərt kodlaşdırılmamalıdır (hardcoded). Bunun əvəzinə sətirlər resurs fayllarına çıxarılır və kod onlara açarlar vasitəsilə müraciət edir. Yeni dil əlavə edərkən tərcümə faylı əlavə etmək kifayətdir — kod dəyişməz qalır. Bu, i18n-i lokalizasiyadan (l10n) fərqləndirir, burada sətirlərin özləri tərcümə olunur.

Biznes arqumenti — qloballaşma bazarı artırır. Common Sense Advisory (2023) məlumatına görə, istifadəçilərin 70%-dən çoxu ana dilində tətbiqlərdə alış-veriş etməyə üstünlük verir. 10 dilə lokalizasiya potensial auditoriyanı 80% artırır. i18n olmadan hər yeni dilə genişlənmə kodun dəyişdirilməsini tələb edir ki, bu da bazarça çıxışı ləngidir və dəyəri 5–10 dəfə artırır. Düzgün i18n memarlığı minimal xərclə 40+ dili dəstəkləməyə imkan verir.

i18n komponentləri daxildir: sətirlərin çıxarılması (String externalization), cəm formaları (pluralization 1/2/5+ üçün), tarix və rəqəmlərin formatlanması (DateFormatter/SimpleDateFormat), RTL dillərinin dəstəyi (Right-to-Left), locale qaydalarına görə çeşidləmə (Collator), regional simvollar (minlik ayırıcıları, onluq işarələri). IT Sectr-də i18n-i memarlıq mərhələsində qoyuruq, sonradan əlavə etmirik — bu, sonrakı lokalizasiyada 60% vaxta qənaət edir.

iOS-da beynəlmiləlləşdirmə: NSLocalizedString və XLIFF

NSLocalizedString — tərcümələrlə işləmək üçün əsas Swift makrosu. Format: NSLocalizedString(«key», comment: «tərcüməçi üçün təsvir»). Makro avtomatik olaraq cihazın cari locale-i (NSLocale.preferredLanguages) üçün Localizable.strings-dən sətri əvəz edir. Açar üçün tərcümə tapılmazsa, açarın özü və ya development language dəyəri (adətən en) qaytarılır. Apple mənalı açarlardan istifadə etməyi tövsiyə edir, açar kimi ingilis sətirlərindən yox.

swift
// Localizable.strings (en)
// "welcome_title" = "Xoş gəldiniz!";
// Localizable.strings (ru)
// "welcome_title" = "Xoş gəldiniz!";

// Swift kodu — bütün dillər üçün vahid
titleLabel.text = NSLocalizedString(
    "welcome_title",
    comment: "Qarşılama ekranının başlığı"
)

// Localizable.stringsdict vasitəsilə cəm formaları
// 
// <dict>
//     <key>items_count</key>
//     <dict>
//         <key>NSStringLocalizedFormatKey</key>
//         <string>%#@items@</string>
//         <key>items</key>
//         <dict>
//             <key>one</key>
//             <string>%d məhsul</string>
//             <key>few</key>
//             <string>%d məhsul</string>
//             <key>many</key>
//             <string>%d məhsul</string>
//         </dict>
//     </dict>
// </dict>

// Cəm formalarından istifadə
let items = 5
let label = String.localizedStringWithFormat(
    NSLocalizedString("items_count", comment: ""), items
)

XLIFF — tərtibatçılar və tərcüməçilər arasında tərcümə mübadiləsi formatı. Xcode XLIFF faylı ixrac edir (Editor → Export for Localization), burada tərcümə üçün bütün sətirlər olur. Tərcüməçi CAT alətlərində (Trados, memoQ, Smartcat) XLIFF ilə işləyir. Tərcümədən sonra XLIFF yenidən Xcode-a idxal olunur (Editor → Import Localizations). XLIFF bütün .lproj kataloqlarını avtomatik yeniləyir. Bu, istehsalatda iOS tətbiqlərinin lokalizasiyasının standart iş prosesidir.

SwiftUI və i18n

SwiftUI Text inizializatoru vasitəsilə NSLocalizedString ilə işləyir. SwiftUI-də mətn avtomatik beynəlmiləlləşdirilir: Text(«welcome_title») NSLocalizedString kimi Localizable.strings-də tərcümə axtarır. Cəm formaları üçün Text(«%d items», count: items) istifadə edin. SwiftUI tarix formatlamasını Text(date, style: .date) vasitəsilə dəstəkləyir — avtomatik olaraq Locale.current istifadə edir. Apple yeni layihələr üçün SwiftUI tövsiyə edir, çünki orada beynəlmiləlləşdirmə daha şəffafdır.

Android-də beynəlmiləlləşdirmə: strings.xml və RTL

Android i18n resurs sisteminə əsaslanır. Sətirlər default dil üçün (adətən ingilis) res/values/strings.xml faylına çıxarılır. Hər bir dil üçün ayrıca kataloq yaradılır: res/values-ru/strings.xml (rus), res/values-de/strings.xml (alman), res/values-fr/strings.xml (fransız). Android cihazın sistem dilinə əsasən (Locale.getDefault()) avtomatik sətirləri seçir. Dəqiq locale yoxdursa, baza versiyası (values/strings.xml) istifadə olunur.

kotlin
// res/values/strings.xml (ingilis, defolt)
<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">Xoş gəldiniz!</string>
    <plurals name="items_count">
        <item quantity="one">%d məhsul</item>
        <item quantity="few">%d məhsul</item>
        <item quantity="many">%d məhsul</item>
    </plurals>
</resources>

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

// Cəm formaları
val items = 5
textView.text = resources.getQuantityString(
    R.plurals.items_count, items, items
)

// Kodda RTL dəstəyi
textView.textDirection = View.TEXT_DIRECTION_LOCALE
// Manifest: supportsRtl="true"

RTL (Right-to-Left) — mətnin sağdan sola oxunduğu dillərin dəstəyi (ərəb, ivrit, urdu, fars). Android RTL-i android:layoutDirection və android:textDirection atributları vasitəsilə dəstəkləyir. Manifestdə android:supportsRtl="true" təyin edin — Android avtomatik layout-u güzgüləyir. NavDrawer, geri/irəi nişanları, mətn düzülməsi hər iki istiqamətdə işləməlidir. Kodda LEFT/RIGHT əvəzinə View.LAYOUT_DIRECTION_LOCALE və Gravity.START/END istifadə edin.

Lokalizə edilmiş resurslar

Android Resource Qualifiers təkcə sətirləri deyil, həmçinin şəkilləri (res/drawable-ru/), layout-ları (res/layout-ru/), animasiyaları, rəngləri lokalizə etməyə imkan verir. Ərəb və ivrit üçün elementlərin güzgü yerləşməsi ilə ayrıca layout-lar lazımdır — res/layout-ar/ (ərəb) istifadə edin. Android həmçinin regional variantları dəstəkləyir: values-rUS, values-rGB, values-de-DE. Qualifiers birləşir: values-ldrtl-ru — RTL ekranları üçün rus dili.

Regional formatlar: iOS və Android-də tarixlər, rəqəmlər, valyutalar

Tarix və vaxt — i18n-in əsas aspektlərindən biri. Müxtəlif regionlar müxtəlif formatlardan istifadə edir: Rusiya — GG.AA.YYYY, ABŞ — AA/GG/YYYY, Yaponiya — YYYY.AA.GG. İstifadəçiyə göstərmək üçün sabit formatdan (yyyy-MM-dd) istifadə etmək səhvdir. iOS-da Locale(identifier: locale) ilə DateFormatter, Android-də isə DateFormat.getDateInstance(DateFormat.SHORT, locale) istifadə edin. Səsli köməkçilər və AI axtarışı üçün tarixlər daxili təqdimatda ISO 8601 formatında olmalıdır.

Rəqəmlər və valyuta — müxtəlif regionlarda müxtəlif ayırıcılar: 1,234.56 (ABŞ) vs 1.234,56 (Rusiya), 1 234,56 (Fransa). iOS: NumberFormatter .locale = locale ilə. Android: DecimalFormat DecimalFormatSymbols(locale) ilə. Valyutalar üçün: format ¥1,234 (Yaponiya) vs $1,234.56 (ABŞ) vs 1 234,56 ₽ (Rusiya). Heç vaxt valyuta və rəqəmi əl ilə birləşdirməyin — NumberFormatter.currencyCode və .currencySymbol istifadə edin.

RegionTarixRəqəmValyuta
Rusiya31.12.20241 234,561 234,56 ₽
ABŞ12/31/20241,234.56$1,234.56
Almaniya31.12.20241.234,561.234,56 €
Yaponiya2024/12/311,234¥1,234
Səudiyyə Ərəbistanı31/12/20241,234.561,234.56 SAR

Çeşidləmə (Collation) — əlifba sırası ilə çeşidləmə müxtəlif dillərdə fərqlənir. İspan dilində «ch» «c»-dən sonra gəlir. İsveç dilində «ä» əlifbanın sonundadır. Alman dilində «ß» «ss» kimi çeşidlənir. iOS: LocalizedComparison (String.localizedCompare). Android: Collator.getInstance(locale). İstifadəçiyə göstərilən sətirlər üçün heç vaxt compareTo() istifadə etməyin — o, regional qaydaları nəzərə almayan Unicode Code Point order-dən istifadə edir.

Mobil tətbiqlərin beynəlmiləlləşdirilməsinin ən yaxşı təcrübələri

Memarlıq prinsipləri — i18n-ə ilk commit-dən başlayın. Koddakı hər sətir i18n qurulmadan əvvəl mövcud olmayan sarğı funksiyasından (tr("key")) keçməlidir — bu, tərtibatçını dərhal sətirləri çıxarmağa məcbur edir. Açar kimi ingilis sətirlərindən istifadə etməyin — ingilis dilində ifadə dəyişdikdə bütün tərcümələri yeniləmək lazım gələcək. Mənalı açarlar istifadə edin: «profile.title», «settings.language.label».

Pseudolokalizasiya — real tərcümədən əvvəl i18n-i test etmə texnikası. Hər latın hərfini kodlamanı yoxlamaq üçün diakritik simvollarla (á, é, ñ, ü) əvəz edin, sətirlərin kəsilməsini yoxlamaq üçün [XXX] prefiksi əlavə edin. Xcode: işəsalma sxemləri — «Double-Length Pseudolanguage» psevdodili. Android: Developer Options — Force RTL layout direction, System font scale 200%-ə qədər. Pseudolokalizasiya tərcüməçinin iştirakı olmadan i18n problemlərinin 80%-ni aşkar edir.

IT Sectr i18n yoxlama siyahısı — buraxılışdan əvvəl yoxlayırıq: (1) kodda hardcoded sətirlər yoxdur (istisna: loglar), (2) cəm formaları bütün dillər üçün düzgün işləyir, (3) tarix/rəqəmlər Locale API vasitəsilə formatlanır, (4) layout RTL dillərində düzgün göstərilir, (5) sətirlər maksimum miqyaslamada kəsilmir, (6) pseudolokalizasiya səhvlər aşkar etməyib, (7) mağazalarda elan edilmiş bütün dillər tam tərcümə dəstinə malikdir.

Tez-tez verilən suallar

i18n l10n-dən nə ilə fərqlənir?

i18n (beynəlmiləlləşdirmə) — kodun hazırlanması: sətirlərin çıxarılması, RTL dəstəyi, formatlama. Tərtibatçı tərəfindən bir dəfə edilir. l10n (lokalizasiya) — sətirlərin konkret dilə tərcüməsi. Tərcüməçi tərəfindən hər lokalizasiya üçün dəfələrlə edilir. i18n — memarlıq, l10n — məzmun. i18n olmadan lokalizasiya prinsipcə mümkün deyil.

NSLocalizedString Swift-də necə işləyir?

NSLocalizedString — cihazın cari locale-i üçün Localizable.strings-də açar üzrə dəyər axtaran makro. Tərcümə tapılarsa — onu qaytarır. Tapılmazsa — açarı qaytarır. Format: NSLocalizedString(«key», comment: «təsvir»). Parametrlərlə formatlama üçün String.localizedStringWithFormat() istifadə edin.

Android-də strings.xml necə qurulub?

strings.xml — res/values/{lang}/ kataloqunda tərcümələri olan fayl. Baza versiyası values/strings.xml-də, tərcümələr — values-ru/strings.xml-də. Kod getString(R.string.key) vasitəsilə müraciət edir. Android sistem dilinə əsasən lazımi faylı özü seçir. Cəm formaları üçün zero/one/few/many/other dəqiqləşdirmələri ilə <plurals> resursu istifadə olunur.

i18n kontekstində RTL nədir?

RTL (Right-to-Left) — ərəb, ivrit, urdu, fars dilləri üçün yazı istiqaməti. Android: manifestdə supportsRtl="true", android:layoutDirection, Gravity.START/END. iOS: məcburi RTL üçün UISemanticContentAttribute.forceLeftToRight. Layout güzgü şəklində əks olunmalıdır: menyu sağda, mətn — sağdan sola, naviqasiya nişanları — tərs çevrilmiş.

Hansı dillər nəşr üçün məcburidir?

Qlobal nəşr üçün minimum dəst: ingilis, ispan, fransız, alman, yapon, çin, koreya, portuqal, rus, italyan. App Store ən azı ingilis lokalizasiyası tələb edir. Hər əlavə lokalizasiya potensial auditoriyanı artırır. Yerli bazar üçün 1–2 dil kifayətdir.

Nəticə

  • Qloballaşma (i18n) — tətbiqin çoxsaylı dillərə və regionlara memarlıq hazırlığı
  • NSLocalizedString — Localizable.strings + XLIFF ixracı vasitəsilə sətirləri tərcümə etmək üçün Swift makrosu
  • strings.xml — values-{lang} kataloqlarında tərcümələri olan Android resursu
  • RTL — ərəb, ivrit, urdu və fars dilləri üçün məcburi dəstək
  • Formatlar — tarix və rəqəmlər ciddi şəkildə Locale API vasitəsilə formatlanır, əl ilə yox
  • Cəm formaları — iOS: stringsdict, Android: altı kəmiyyət forması ilə <plurals>
  • Pseudolokalizasiya — tərcümədən əvvəl i18n test etmə texnikası (80% problem aşkar edir)

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun