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. FileNewFile
2. "String Catalog" ni tanlang
3. Localizable.xcstrings nomli fayl yaratiladi
4. ProjectInfoLocalizations+ til qo'shing
// ═══════════════════════════════════════
//  SWIFTUIDA 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
// ═══════════════════════════════════════
// SwiftUIdan 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