Use when implementing internationalization (i18n), String Catalogs, pluralization, or right-to-left layout support. Covers modern localization workflows with Xcode String Catalogs and LocalizedStringKey patterns.
Handles iOS localization using Xcode String Catalogs, pluralization, and locale-aware formatting. Triggers when implementing i18n, RTL layouts, or using String(localized:) and LocalizedStringKey patterns.
/plugin marketplace add johnrogers/claude-swift-engineering/plugin install swift-engineering@claude-swift-engineeringThis skill inherits all available tools. When active, it can use any tool Claude has access to.
references/formatting.mdreferences/pluralization.mdreferences/rtl-support.mdreferences/string-catalogs.mdModern iOS localization using String Catalogs (.xcstrings) for managing translations, plural forms, and locale-aware content. Supports SwiftUI's LocalizedStringKey and String(localized:) APIs.
| Reference | Load When |
|---|---|
| String Catalogs | Setting up or using Xcode 15+ String Catalogs |
| Pluralization | Handling plural forms, stringsdict migration |
| Formatting | Date, number, currency locale-aware formatting |
| RTL Support | Right-to-left layouts, semantic directions |
String(localized:comment:) or use SwiftUI's automatic extraction// SwiftUI - automatic localization
Text("Welcome")
Button("Continue") { }
// Explicit localization with context
let title = String(localized: "Settings", comment: "Navigation title")
// Deferred localization for custom views
struct CardView: View {
let title: LocalizedStringResource
var body: some View { Text(title) }
}
Forgetting String Catalog in Build Phases — Adding String Catalog but forgetting to check "Localize" in File Inspector means it's not embedded. Always verify in Build Phases > Copy Bundle Resources.
Pseudo-localization not tested — Not running your app with pseudo-localization (German/Chinese pseudo-locale) means you miss text overflow and RTL issues. Always test with pseudo-localization before translation.
Hardcoded strings anywhere — Even one hardcoded string outside the String Catalog breaks extraction and automation. Use String(localized:) everywhere or use LocalizedStringResource for deferred localization.
Context loss in translations — Providing no comment for translators means they guess context and get it wrong. Add comments explaining where the string appears and what it means.
RTL layouts not tested — Assuming LTR layout works for RTL languages (Arabic, Hebrew) fails miserably. Test with system language set to Arabic and verify semantic directions are used.
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.