{"enrichment":{"faq":[{"a":"localization uses Xcode String Catalogs (.xcstrings) as the modern approach to managing translations. Create a new String Catalog in your project, add your app target as a localization resource, and enable the languages you want to support. Xcode automatically scans your code for LocalizedStringResource and String(localized:) calls, extracting them into the catalog. Configure build phases to ensure the catalog is included in your target's resources, then export translations for each language you support.","q":"How do I set up localization in Xcode using String Catalogs?"},{"a":"localization's String Catalogs (.xcstrings) replace the legacy stringsdict workflow with a unified, JSON-based format that handles plurals, device contexts, and locale variations in one file. String Catalogs provide a cleaner UI in Xcode, automatic code scanning, and better support for modern SwiftUI patterns. To migrate from stringsdict to String Catalogs, create a new catalog, manually transfer your plural rules and translations, and update code to use LocalizedStringResource instead of NSLocalizedString.","q":"What is the difference between String Catalogs and the older stringsdict format?"},{"a":"localization supports RTL languages through semantic layout direction in SwiftUI. Use .environment(\\.layoutDirection, .rightToLeft) on views that need RTL rendering, or let the system detect it automatically based on the active locale. Test RTL layouts with pseudo-localization before translating\u2014enable pseudo-locale testing in your String Catalog to verify that text expansion and layout mirroring work correctly. Avoid hardcoded frame values and use relative positioning (leading/trailing instead of left/right) throughout your UI.","q":"How do I implement right-to-left layout support for Arabic and Hebrew?"},{"a":"localization includes pseudo-localization testing to validate your app's readiness for translation without waiting for real translations. In Xcode, enable pseudo-locale variants like Accented English or Double-Length English in your String Catalog settings. These variants expand text, add diacritical marks, or repeat characters to reveal layout issues, truncation problems, and hardcoded strings. Run your app with a pseudo-locale active to catch UI breaks early and ensure all user-facing text is properly localized.","q":"How can I test localization with pseudo-locales before translation?"},{"a":"localization's String Catalogs handle plurals declaratively within the catalog editor\u2014no need for complex stringsdict rules. Define plural variations (zero, one, other) for each string, and Xcode generates the correct form based on the count at runtime. For locale-aware formatting, use Formatter types (DateFormatter, NumberFormatter, MeasurementFormatter) configured with the current Locale, or leverage SwiftUI's formatted() modifier to automatically adapt dates, numbers, and currency to the user's locale settings.","q":"How do I handle plural forms and locale-specific formatting in localization?"},{"a":"localization build issues often stem from missing build phase configuration or incorrect target membership. Verify that your .xcstrings file is added to your app target's Copy Bundle Resources build phase. Ensure LocalizedStringResource and String(localized:) calls use string literals (not variables) so Xcode can scan and extract them. Check that your target's Localization settings include the languages you've added to the catalog. If strings still don't appear, clean build folder and rebuild to force a full rescan.","q":"What should I do if my String Catalog is not working during the build?"}],"shadow_tags":["multi-language-support","translation-workflow","locale-formatting","bidirectional-text","string-extraction","pseudo-testing","internationalization-setup","catalog-management"],"summary_rewrite":"Master modern iOS localization with Xcode String Catalogs (.xcstrings) for managing translations, plural forms, and locale-aware content. Learn SwiftUI integration patterns, pseudo-localization testing, and semantic direction handling for right-to-left languages. Avoid common pitfalls like hardcoded strings and untested RTL layouts."},"files":[{"bytes":3005,"path":"plugins/swift-engineering/skills/localization/SKILL.md","sha256":"2c05d2866f9100916ec54c34d045bd21980a48a2cd89c2e199de8dfd40195a18","url":"https://skillfed.io/files/johnrogers/claude-swift-engineering/localization/13f60340/SKILL.md"}],"id":"johnrogers/claude-swift-engineering/localization","links":{"html":"https://skillfed.io/johnrogers/claude-swift-engineering/localization","md":"https://skillfed.io/johnrogers/claude-swift-engineering/localization.md","repo":"https://github.com/johnrogers/claude-swift-engineering"},"meta":{"agents_supported":[],"first_seen":"2026-07-28","forks":20,"language":"Python","last_updated":"2026-01-18","license":"MIT","name":"localization","publisher":"johnrogers","stars":223},"relations":{"similar":[{"id":"dpearson2699/swift-ios-skills/ios-localization"},{"id":"rshankras/claude-code-apple-skills/localization-setup"},{"id":"aj-geddes/useful-ai-prompts/internationalization-i18n"},{"id":"rshankras/claude-code-apple-skills/localization-strategy"},{"id":"ghaida/intent/localize"},{"id":"yonatangross/orchestkit/i18n-date-patterns"},{"id":"jame581/GodotPrompter/localization"},{"id":"travisjneuman/.claude/i18n-localization"},{"id":"Mindrally/skills/internationalization-i18n"},{"id":"Owl-Listener/designer-skills/localization-design"}]},"slug":{"owner":"johnrogers","repo":"claude-swift-engineering","skill":"localization"},"version":"13f60340"}
