Skip to main content

Täielik iOS-i rakenduse lokaliseerimise juhend

Localizable.strings-failidest App Store'i metaandmeteni: lokaliseeri oma iOS-i rakendus Xcode'i, SwiftUI, Fastlane'i ja automaatse tehisintellekti tõlkega.

1

Luba lokaliseerimine Xcode'is

Ava Xcode'i projekti seaded, vali Info > Localizations ja lisa keeled, mida soovid toetada. Xcode loob iga keele jaoks automaatselt .lproj-kataloogid.

Xcode Project Settings
// In Xcode:
// 1. Select your project in the navigator
// 2. Go to Info tab > Localizations
// 3. Click + to add languages (e.g., German, Japanese)
// 4. Select which files to localize
//
// Xcode creates .lproj directories automatically:
// en.lproj/Localizable.strings
// de.lproj/Localizable.strings
// ja.lproj/Localizable.strings
Base-lokaliseerimine eraldab kasutajaliidese selle stringidest. Keele lisamisel pakub Xcode sinu storyboard'ide, XIB-ide ja stringifailide lokaliseeritud versioonide loomist.
2

Loo Localizable.strings

Standardne iOS-i lokaliseerimisfail kasutab võrdusmärgiga eraldatud võtme-väärtuse paare ning iga rida lõpeb semikooloniga. Paiguta see lähtekeele kausta Base.lproj.

Base.lproj/Localizable.strings
// Base.lproj/Localizable.strings

"welcome_title" = "Welcome to MyApp";
"login_button" = "Sign In";
"settings_label" = "Settings";
"greeting" = "Hello, %@!";    // %@ = string placeholder
"item_count" = "%d items";     // %d = integer placeholder
Puuduvad semikoolonid põhjustavad märkamatu tõrke — fail laaditakse veata, kuid tõlked on tühjad. Veendu ka, et fail oleks lisatud sihtmärgi ehitusetappi Copy Bundle Resources, muidu ei lisata seda rakenduse kogumisse.
Common .strings Mistakes
// ❌ Common mistakes in .strings files:

// Missing semicolon — file loads but translations are empty
"welcome_title" = "Welcome"

// Unescaped quotes — causes parse error
"message" = "Click "here" to continue";

// ✅ Correct versions:
"welcome_title" = "Welcome";
"message" = "Click \"here\" to continue";
3

Mine üle String Catalog'i kataloogidele (Xcode 15+)

String Catalog'i kataloogid (.xcstrings) on Apple'i nüüdisaegne asendus .strings-failidele. Need pakuvad Xcode'is visuaalset redaktorit, stringide automaatset eraldamist SwiftUI vaadetest ja sisseehitatud mitmusevormide tuge.

Localizable.xcstrings
// Xcode 15+ String Catalog (Localizable.xcstrings)
// Xcode automatically extracts strings from your code
// and manages translations in a visual editor.

// In SwiftUI, strings are automatically localizable:
Text("Welcome to MyApp")
Text("Hello, \(userName)!")

// Mark strings explicitly:
let title = String(localized: "welcome_title")
String Catalog'i kataloogid talletavad KÕIK keeled ühte .xcstrings JSON-faili. Meeskondades põhjustab see sagedasi Git'i ühenduskonflikte, kui mitu inimest stringe lisab. Suurte projektide puhul kaalu üht kataloogi mooduli kohta.
4

Kasuta lokaliseeritud stringe SwiftUI-s ja UIKit'is

SwiftUI Text-vaade lokaliseerib stringiliteraalid automaatselt. UIKit kasutab NSLocalizedStringi. iOS 16 ja uuemate puhul pakub moodne String(localized:comment:) API puhtamat süntaksit ja sisseehitatud kompilaatorituge.

ContentView.swift
import SwiftUI

struct ContentView: View {
    let userName: String

    var body: some View {
        VStack {
            // ✅ SwiftUI auto-localizes string literals
            Text("welcome_title")

            // ⚠️ This does NOT localize (String interpolation)
            // Text("Hello, \(userName)")

            // ✅ Use String(localized:) for dynamic strings
            Text(String(localized: "greeting \(userName)"))

            // ✅ UIKit style (works everywhere)
            let title = NSLocalizedString(
                "settings_label",
                comment: "Settings screen title"
            )

            // ✅ Modern API (iOS 16+)
            let modern = String(
                localized: "welcome_title",
                comment: "Main screen title"
            )
        }
    }
}
Text("Hello \(name)") ei lokaliseerita ootuspäraselt, kui name on tavaline String-muutuja. SwiftUI stringi interpoleerimine loob LocalizedStringKey, kuid õigesti interpoleeritakse ainult kindlaid tüüpe (Int, Double jne). String-muutujate puhul loo lokaliseeritud string esmalt funktsiooniga String(localized:).
5

Töötle mitmusevorme

iOS kasutab mitmusereeglite jaoks .stringsdict-faile, mis toetavad kõiki CLDR-i mitmusekategooriaid: zero, one, two, few, many, other. String Catalog'i kataloogid töötlevad mitmusevorme Xcode'i visuaalse redaktoriga — palju lihtsamalt kui stringsdict XML-i käsitsi kirjutades.

Localizable.stringsdict
<!-- Localizable.stringsdict -->
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
    <key>items_count</key>
    <dict>
        <key>NSStringLocalizedFormatKey</key>
        <string>%#@count@</string>
        <key>count</key>
        <dict>
            <key>NSStringFormatSpecTypeKey</key>
            <string>NSStringPluralRuleType</string>
            <key>NSStringFormatValueTypeKey</key>
            <string>d</string>
            <key>zero</key>
            <string>No items</string>
            <key>one</key>
            <string>%d item</string>
            <key>other</key>
            <string>%d items</string>
        </dict>
    </dict>
</dict>
</plist>

// Usage in Swift:
String(format: NSLocalizedString("items_count", comment: ""),
       itemCount)
Sellistes keeltes nagu araabia keel on kuus mitmusevormi, vene keeles kolm ja jaapani keeles üks. Määra alati kõik sihtkeelte vajalikud CLDR-i kategooriad. String Catalog'i kataloogide visuaalne mitmuseredaktor muudab selle lihtsamaks.
6

Lokaliseeri App Store'i metaandmed Fastlane'iga

Hoia App Store'i metaandmeid — rakenduse nime, alapealkirja, kirjeldust, märksõnu ja väljalaskemärkmeid — Fastlane'i deliver-tööriista abil hoidlas versioonihalduse all lihttekstifailidena, mis on korraldatud lokaadi järgi.

Terminal
# Install Fastlane
$ gem install fastlane

# Initialize deliver for App Store metadata
$ fastlane deliver init

# Directory structure created:
# fastlane/metadata/
# ├── en-US/
# │   ├── name.txt            # App name (30 chars)
# │   ├── subtitle.txt        # Subtitle (30 chars)
# │   ├── description.txt     # Full description
# │   ├── keywords.txt        # Search keywords (100 chars)
# │   ├── release_notes.txt   # What's New
# │   └── promotional_text.txt
# ├── de-DE/
# │   └── ...
# └── ja/
#     └── ...

# Push metadata to App Store Connect:
$ fastlane deliver
Ristlokaliseerimine: USA App Store indekseerib nii inglise- kui ka hispaaniakeelseid märksõnu. Metaandmete lokaliseerimine hispaania keelde püüab USA hispaaniakeelsete kasutajate otsinguid ilma eraldi turgu sihtimata.
7

Testi lokaliseerimist

Testi lokaliseeritud sisu seadme keelt muutmata. Kasuta rakenduse mis tahes keeles käitamiseks Xcode'i skeemi alistusi, lokaadikeskkonnaga SwiftUI eelvaateid ning automatiseeritud testimiseks XCUITest'i koos käivitusargumentidega.

Testing Localization
// 1. Xcode Scheme Override:
// Edit Scheme > Run > Options > App Language > Choose language

// 2. SwiftUI Preview with locale:
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
            .environment(\.locale, Locale(identifier: "de"))

        ContentView()
            .environment(\.locale, Locale(identifier: "ja"))

        ContentView()
            .environment(\.locale, Locale(identifier: "ar"))
    }
}

// 3. XCUITest with language override:
let app = XCUIApplication()
app.launchArguments += ["-AppleLanguages", "(de)"]
app.launchArguments += ["-AppleLocale", "de_DE"]
app.launch()
Testi saksa keelega (stringid pikenevad inglise keelega võrreldes umbes 30%) ja jaapani keelega (stringid lühenevad umbes 50%), et leida paigutusprobleemid varakult. Koormustesti paigutusi ilma päris tõlgeteta Xcode'i pseudolokaliseerimisega.

Automatiseeri tõlkekvaliteet

Leia i18n-validate'i abil puuduvad võtmed, katkised kohatäitjad ja mitmusevormide probleemid enne avaldamist. Testi kasutajaliidest i18n-pseudo abil pseudotõlgetega enne päris tõlgete saabumist.
8

Automatiseeri tõlked

Tõlgi .strings- ja .xcstrings-failid ning Fastlane'i metaandmefailid tehisintellektiga. Automatiseeri nii rakendusesiseste stringide kui ka App Store'i metaandmete tõlkimine täielikult lokaliseeritud kohalolu jaoks.

Terminal
# Translate .strings files
> Translate Base.lproj/Localizable.strings
  to Japanese, German, and Spanish

# Translate App Store metadata too
> Translate fastlane/metadata/en-US/
  to de-DE, ja, es-MX

✓ 6 files translated in 3.2s
Lokaliseeritud kohalolu App Store'is suurendab mitteingliskeelsetel turgudel allalaadimisi enam kui 30%. Tõlgi metaandmed koos rakenduse stringidega — see on suurima tasuvusega lokaliseerimine, mida saad teha.
+

Lisavõimalus: nutikas varulokaat LocaleChain'iga

Vaikimisi lülitub iOS arenduskeelele, kui kasutaja täpset lokaati pole saadaval. pt-BR kasutaja näeb ainult pt-PT tõlgete olemasolul portugali keele asemel inglise keelt. LocaleChain parandab selle seadistatavate varulokaadiahelatega.

LocaleChain on avatud lähtekoodiga Swift'i pakett. Vaata GitHub'is

Package Dependencies
// Swift Package Manager
// File > Add Package Dependencies >
// https://github.com/i18n-agent/ios-localechain.git
MyApp.swift
import LocaleChain

// In your App init or AppDelegate:
LocaleChain.configure()  // Activates all default chains

// pt-BR user with only pt-PT translations?
// → Shows Portuguese instead of falling back to English

// Custom overrides for your specific locales:
LocaleChain.configure(
    overrides: ["es-MX": ["es-419", "es"]]
)

Levinud komistuskivid

.strings-faili süntaksivead

Puuduvad semikoolonid, varjestamata jutumärgid või vale kodeering põhjustavad märkamatuid tõrkeid. Fail laaditakse, kuid tõlked näivad tühjad. Valideeri .strings-failid alati enne commiti.

SwiftUI Text-interpoleerimist ei lokaliseerita

Text("Hello \(stringVar)") ei lokaliseerita ootuspäraselt. Kasuta arvutatud stringide jaoks funktsiooni String(localized:) või veendu, et interpoleeritud muutujate tüüp sobiks LocalizedStringKey.StringInterpolationile.

Vidinad või laiendused kuvavad töötlemata võtmeid

Rakenduse laiendustel on eraldi kogumid. Veendu, et .strings- või .xcstrings-failid oleks lisatud laienduse sihtmärgi etappi Copy Bundle Resources, mitte ainult põhirakenduse sihtmärgile.

Puuduvate tõlgete võtmed kuvatakse tootmiskeskkonnas

Kui võtmel pole kasutaja keeles tõlget, kuvab iOS võtme enda. Kasuta varukeele strateegiat ja testi enne avaldamist kõiki toetatud lokaate.

Soovituslik failistruktuur

Project Structure
MyApp/
├── MyApp.xcodeproj
├── MyApp/
│   ├── Base.lproj/
│   │   ├── Localizable.strings       # Source strings
│   │   └── Localizable.stringsdict   # Plural rules
│   ├── en.lproj/
│   │   └── Localizable.strings
│   ├── de.lproj/
│   │   └── Localizable.strings
│   ├── ja.lproj/
│   │   └── Localizable.strings
│   ├── Localizable.xcstrings          # OR String Catalog
│   └── Info.plist
├── MyAppTests/
├── fastlane/
│   ├── Fastfile
│   └── metadata/
│       ├── en-US/
│       │   ├── name.txt
│       │   ├── description.txt
│       │   └── keywords.txt
│       ├── de-DE/
│       └── ja/
└── Package.swift

Proovi i18n Agent'i kohe

Kukuta tõlkefail siia

JSON, YAML, PO, XML, CSV, Markdown, Properties

või klõpsa faili valimiseks

Sihtkeeled

Registreerumine pole vajalikKohene hinnang

Varulokaat ios-localechainiga

Kui piirkondlikust lokaadist, näiteks de-AT-st, puudub tõlkevõti, liigub iOS otse arenduskeelele ega kontrolli esmalt põhilokaati de.

Terminal
// Swift Package Manager
// https://github.com/i18n-agent/ios-localechain
Configuration
import LocaleChain

LocaleChain.configure(overrides: [
    "de": ["en-GB", "en"],
    "pt-BR": ["pt", "en"],
    "zh-Hant-HK": ["zh-Hant", "zh", "en"],
])

Vaata meie varulokaadi juhendist kõigi toetatud raamistike ja 75 sisseehitatud ahela loendit. Learn more →

iOS-i lokaliseerimise KKK