Skip to main content

Heildarleiðarvísir um staðfærslu iOS-forrita

Frá Localizable.strings til lýsigagna App Store: staðfærðu iOS-forritið þitt með Xcode, SwiftUI, Fastlane og sjálfvirkum gervigreindarþýðingum.

1

Virkjaðu staðfærslu í Xcode

Opnaðu verkefnisstillingarnar í Xcode, farðu í Info > Localizations og bættu við tungumálunum sem þú vilt styðja. Xcode býr sjálfkrafa til .lproj-möppur fyrir hvert tungumál.

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
Grunnstaðfærsla aðskilur notandaviðmótið frá textastrengjum þess. Þegar þú bætir við tungumáli býður Xcode upp á að búa til staðfærðar útgáfur af söguborðum, XIB-skrám og strengjaskrám.
2

Búðu til Localizable.strings

Staðlaða staðfærsluskráin fyrir iOS notar lykil-gildispör sem aðgreind eru með jafnaðarmerkjum og hver lína endar á semíkommu. Settu hana í Base.lproj-möppuna fyrir frummálið.

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
Ef semíkommur vantar verða hljóðlátar bilanir — skráin hleðst án villu en þýðingarnar eru tómar. Gakktu einnig úr skugga um að skránni sé bætt við Copy Bundle Resources-smíðastig viðfangsins, annars verður hún ekki höfð með í forritsvendlinum.
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

Færðu yfir í String Catalogs (Xcode 15+)

String Catalogs (.xcstrings) eru nútímalegur arftaki .strings-skráa frá Apple. Þau bjóða upp á myndrænan ritil í Xcode, sjálfvirka útdrátt textastrengja úr SwiftUI-sýnum og innbyggðan stuðning við fleirtölu.

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 Catalogs geyma ÖLL tungumál í einni .xcstrings JSON-skrá. Í teymum veldur þetta tíðum Git-samrunarárekstrum þegar margir bæta við textastrengjum. Íhugaðu eitt strengjasafn fyrir hverja einingu í stórum verkefnum.
4

Notaðu staðfærða textastrengi í SwiftUI og UIKit

Text-sýnið í SwiftUI staðfærir textafasta sjálfkrafa. UIKit notar NSLocalizedString. Fyrir iOS 16+ veitir nútímalega String(localized:comment:)-forritaskilin skýrari málskipan með innbyggðum stuðningi þýðandans.

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)") tekst hljóðlega ekki að staðfæra þegar name er venjuleg String-breyta. Strengjaskeyting SwiftUI býr til LocalizedStringKey en aðeins tilteknar gerðir (Int, Double o.s.frv.) skeytast rétt inn. Fyrir String-breytur skaltu fyrst nota String(localized:) til að búa til staðfærða textastrenginn.
5

Meðhöndlaðu fleirtölu

iOS notar .stringsdict-skrár fyrir fleirtölureglur og styður alla fleirtöluflokka CLDR: zero, one, two, few, many, other. String Catalogs meðhöndla fleirtölu með myndrænum ritli í Xcode — mun einfaldara en að skrifa stringsdict XML handvirkt.

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)
Tungumál á borð við arabísku hafa 6 fleirtöluform, rússneska 3 og japanska 1. Skilgreindu alltaf alla CLDR-flokka sem markmálin þín þurfa. String Catalogs auðvelda þetta með myndrænum fleirtöluritli sínum.
6

Staðfærðu lýsigögn App Store með Fastlane

Notaðu deliver-verkfæri Fastlane til að geyma lýsigögn App Store — heiti forrits, undirheiti, lýsingu, lykilorð og útgáfuathugasemdir — undir útgáfustýringu í kóðasafninu þínu sem óskreyttar textaskrár, flokkaðar eftir staðfærslu.

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
Víxlstaðfærsla: Bandaríska App Store skráir bæði ensk og spænsk lykilorð. Með því að staðfæra lýsigögnin þín á spænsku nærðu leitum frá spænskumælandi notendum í Bandaríkjunum án þess að miða á sérstakan markað.
7

Prófaðu staðfærsluna

Prófaðu staðfært efni án þess að breyta tungumáli tækisins. Notaðu hnekkingar keyrsluskema Xcode til að keyra forritið á hvaða tungumáli sem er, SwiftUI-forskoðanir með staðfærsluumhverfi og XCUITest með ræsingarviðföngum fyrir sjálfvirkar prófanir.

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()
Prófaðu með þýsku (textastrengir lengjast um 30 % miðað við ensku) og japönsku (textastrengir styttast um 50 %) til að finna útlitsvandamál snemma. Notaðu gervistaðfærslu Xcode til að álagsprófa útlit án raunverulegra þýðinga.

Sjálfvirknivæddu gæði þýðinga

Finndu lykla sem vantar, skemmd frátökutákn og fleirtöluvandamál áður en þau fara í útgáfu með i18n-validate. Prófaðu notandaviðmótið með gerviþýðingum með i18n-pseudo áður en raunverulegar þýðingar berast.
8

Sjálfvirknivæddu þýðingar

Þýddu .strings-, .xcstrings- og Fastlane-lýsigagnaskrár með gervigreind. Sjálfvirknivæddu þýðingu bæði textastrengja í forritinu og lýsigagna App Store til að tryggja fullkomlega staðfærða viðveru.

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
Staðfærð viðvera í App Store eykur niðurhal um meira en 30 % á mörkuðum þar sem enska er ekki aðaltungumálið. Þýddu lýsigögnin samhliða textastrengjum forritsins — það skilar mestri arðsemi allrar staðfærslu sem þú getur ráðist í.
+

Aukaatriði: Snjöll varastaðfærsla með LocaleChain

Sjálfgefið notar iOS þróunarmálið þitt til vara þegar nákvæm staðfærsla notanda er ekki tiltæk. Notandi með pt-BR sér ensku í stað portúgölsku ef aðeins eru til þýðingar fyrir pt-PT. LocaleChain lagar þetta með stillanlegum varakeðjum.

LocaleChain er Swift-pakki með opinn frumkóða. Skoða á GitHub

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"]]
)

Algengar gryfjur

Málskipanarvillur í .strings-skrám

Semíkommur sem vantar, óvarðar gæsalappir eða röng stafakóðun valda hljóðlátum bilunum. Skráin hleðst en þýðingarnar virðast tómar. Fullgildu alltaf .strings-skrár áður en breytingar eru staðfestar.

Textaskeyting SwiftUI staðfærist ekki

Text("Hello \(stringVar)") staðfærist ekki eins og búist er við. Notaðu String(localized:) fyrir útreiknaða textastrengi eða gakktu úr skugga um að innskotnar breytur séu af réttri gerð fyrir LocalizedStringKey.StringInterpolation.

Græjur/viðbætur sýna óunna lykla

Forritsviðbætur eru með aðskilda vendla. Gakktu úr skugga um að .strings- eða .xcstrings-skránum þínum sé bætt við Copy Bundle Resources-stig viðbótarviðfangsins, ekki aðeins viðfangs aðalforritsins.

Þýðingar sem vantar sýna lykla í rekstri

Þegar lykill er ekki með þýðingu fyrir tungumál notandans sýnir iOS lykilinn sjálfan. Notaðu áætlun um varatungumál og prófaðu allar studdar staðfærslur fyrir útgáfu.

Ráðlögð skráaskipan

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

Prófaðu i18n Agent núna

Slepptu þýðingarskránni þinni hér

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

eða smelltu til að fletta

Markmál

Engin skráning nauðsynlegKostnaðaráætlun samstundis

Varastaðfærsla með ios-localechain

Þegar þýðingarlykil vantar í svæðisbundna staðfærslu á borð við de-AT fer iOS beint í þróunarmálið í stað þess að athuga fyrst yfirstaðfærsluna 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"],
])

Skoðaðu leiðarvísi okkar um varastaðfærslu til að sjá allan listann yfir studda verkramma og 75 innbyggðar keðjur. Learn more →

Algengar spurningar um staðfærslu iOS