
Ios Localization
Implement String Catalogs, generated symbols, plurals, FormatStyle, and RTL-safe layout so an iOS app passes global App Store expectations.
Install
npx skills add https://github.com/dpearson2699/swift-ios-skills --skill ios-localizationWhat is this skill?
- String Catalogs (.xcstrings) with stable keys and Xcode 26+ generated localizable symbols
- Decision guide for LocalizedStringKey vs LocalizedStringResource and safe interpolation
- Pluralization and locale-aware FormatStyle for numbers, dates, measurements, and currency
- RTL layout guidance for Arabic, Hebrew, and related locales
- Dynamic Type and localization testing practices to avoid App Store rejection patterns
Adoption & trust: 1.9k installs on skills.sh; 713 GitHub stars; 3/3 security scanners passed (skills.sh audits).
Recommended Skills
Vercel React Native Skillsvercel-labs/agent-skills
Firebase Basicsfirebase/agent-skills
Building Native Uiexpo/skills
Firebase Ai Logic Basicsfirebase/agent-skills
Native Data Fetchingexpo/skills
Firebase Firestorefirebase/agent-skills
Journey fit
Common Questions / FAQ
Is Ios Localization safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Ios Localization
# iOS Localization & Internationalization Localize iOS 26+ apps using String Catalogs, modern string types, FormatStyle, and RTL-aware layout. Localization mistakes cause App Store rejections in non-English markets, mistranslated UI, and broken layouts. Ship with correct localization from the start. ## Contents - [String Catalogs (.xcstrings)](#string-catalogs-xcstrings) - [Generated Localizable Symbols (Xcode 26+)](#generated-localizable-symbols-xcode-26) - [String Types -- Decision Guide](#string-types-decision-guide) - [String Interpolation in Localized Strings](#string-interpolation-in-localized-strings) - [Pluralization](#pluralization) - [FormatStyle -- Locale-Aware Formatting](#formatstyle-locale-aware-formatting) - [Right-to-Left (RTL) Layout](#right-to-left-rtl-layout) - [Common Mistakes](#common-mistakes) - [Localization Review Checklist](#review-checklist) - [References](#references) ## String Catalogs (.xcstrings) String Catalogs replaced `.strings` and `.stringsdict` files starting in Xcode 15 / iOS 17. They unify all localizable strings, pluralization rules, and device variations into a single JSON-based file with a visual editor. **Why String Catalogs exist:** - `.strings` files required manual key management and fell out of sync - `.stringsdict` required complex XML for plurals - String Catalogs auto-extract strings from code, track translation state, and support plurals natively **How automatic extraction works:** Xcode scans for these patterns on each build: ```swift // SwiftUI -- automatically extracted (LocalizedStringKey) Text("Welcome back") // key: "Welcome back" Label("Settings", systemImage: "gear") Button("Save") { } Toggle("Dark Mode", isOn: $dark) // Programmatic -- automatically extracted String(localized: "No items found") LocalizedStringResource("Order placed") // NOT extracted -- plain String, not localized let msg = "Hello" // just a String, invisible to Xcode ``` Xcode adds discovered keys to the String Catalog automatically. Mark translations as Needs Review, Translated, or Stale in the editor. For detailed String Catalog workflows, migration, and testing strategies, see [references/string-catalogs.md](references/string-catalogs.md). ## Generated Localizable Symbols (Xcode 26+) Xcode 26 can generate type-safe `LocalizedStringResource` symbols from String Catalog keys, replacing stringly-typed localization with compiler-checked access. **Enable:** Build Settings > Localization > Generate String Catalog Symbols → `Yes` (on by default in new Xcode 26 projects). Requires catalog format version `1.1`. **Workflow:** Add a key manually via the (+) button in the String Catalog editor — manual keys have the **Generate Swift Symbol** checkbox enabled by default. Auto-extracted keys can also opt in via Refactor > Convert Strings to Symbols. Use stable symbol-style key names — not English text — so renaming UI copy never breaks code references. ```swift // Generated from key "room_available" in Localizable.xcstrings Text(.roomAvailable) // Parameterized key "landmarks_count" with %(count)lld Text(.landmarksCount(count: 42)) // Non-default table "Booking.xcstrings" Text(.Booking.confirmBookingCta) ``` Xcode derives symbol names by camelCasing the key: `settings.notifications.