Published on

Localization va String Catalog

Authors

Ilovangiz butun dunyoda ishlatilishi uchun ko'p tilni qo'llab-quvvatlash kerak. Xcode 15 dan boshlab String Catalog bilan bu juda oson.

String Catalog yaratish

Xcode da qadamlar:
1. File β†’ New β†’ File
2. "String Catalog" ni tanlang
3. Localizable.xcstrings nomli fayl yaratiladi
4. Project β†’ Info β†’ Localizations β†’ + til qo'shing
// ═══════════════════════════════════════
//  SWIFTUI DA AVTOMATIK LOKALIZATSIYA
// ═══════════════════════════════════════

// Text() β€” avtomatik lokalizatsiya qidiradi
Text("Welcome")
// String Catalog da:
// "Welcome" β†’ uz: "Xush kelibsiz"
// "Welcome" β†’ ru: "Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ"

// Interpolation bilan
Text("Hello, \(ism)!")
// String Catalog da:
// "Hello, %@!" β†’ uz: "Salom, %@!"

// Maxsus izoh (Comment) bilan
Text("Save", comment: "Saqlash tugmasi matni")


// ═══════════════════════════════════════
//  KOD ICHIDA LOKALIZATSIYA
// ═══════════════════════════════════════
// SwiftUI dan tashqarida β€” String(localized:)
let xabar = String(localized: "File saved successfully")
// String Catalog dan tarjima oladi

// Eski usul β€” NSLocalizedString
let eskiUsul = NSLocalizedString("Cancel", comment: "Bekor qilish")

Pluralization β€” son ga qarab

// ═══════════════════════════════════════
//  PLURALIZATION
//  Tilga qarab grammatik qoida boshqacha
// ═══════════════════════════════════════

// Kod da
Text("^[\(xabarSoni) message](inflect: true)")
// Ingliz: "1 message", "2 messages", "5 messages"
// O'zbek: "1 ta xabar", "2 ta xabar", "5 ta xabar"

// String Catalog da maxsus plural qoidalar
// Key: "%lld items"
// Plural variants:
//   one:   "%lld ta element"
//   other: "%lld ta element"

Sana, valyuta va raqamlar

// ═══════════════════════════════════════
//  SANA FORMATLASH β€” locale ga qarab
// ═══════════════════════════════════════
let sana = Date()

// Avtomatik lokalizatsiya
Text(sana, style: .date)
// uz: "21-iyun, 2024-y."
// en: "June 21, 2024"
// ru: "21 июня 2024 г."

Text(sana, format: .dateTime.day().month(.wide).year())
// Har til o'z formatida ko'rsatadi


// ═══════════════════════════════════════
//  VALYUTA VA RAQAM
// ═══════════════════════════════════════
let narx = 1499.99

Text(narx, format: .currency(code: "UZS"))
// "1 499,99 so'm"

Text(narx, format: .currency(code: "USD"))
// "$1,499.99"

// Raqam formatlash
let kattaRaqam = 1_500_000
Text(kattaRaqam, format: .number)
// uz: "1 500 000"
// en: "1,500,000"

Preview da turli tillarni sinash

// ═══════════════════════════════════════
//  PREVIEW DA LOKALIZATSIYA
// ═══════════════════════════════════════
struct AsosiyKorinish: View {
    var body: some View {
        VStack {
            Text("Welcome")
            Text("Settings")
            Text("Save")
        }
    }
}

#Preview("O'zbek") {
    AsosiyKorinish()
        .environment(\.locale, Locale(identifier: "uz"))
}

#Preview("English") {
    AsosiyKorinish()
        .environment(\.locale, Locale(identifier: "en"))
}

#Preview("Russian") {
    AsosiyKorinish()
        .environment(\.locale, Locale(identifier: "ru"))
}

Lokalizatsiya checklisti

βœ… Barcha matnlar String Catalog da
βœ… Rasm va ikonkalar madaniyatga mos
βœ… Sana/raqam formatlari Locale ishlatadi
βœ… RTL (o'ngdan chapga) tillar uchun layout sinagan
βœ… Uzun tarjimalar uchun layout buzilmasligini tekshirgan
βœ… Pluralization to'g'ri ishlashini sinagan

🎯 Topshiriq

3 tilli ilova yarating (O'zbek, English, Russian): String Catalog da 5 ta asosiy matnni tarjima qiling. Sana va valyutani Locale ga qarab ko'rsating. Preview da har uchala tilni tekshiring.

Buy mea coffee