Back to Skills

swift-i18n

verified

Automatic internationalization for Swift/SwiftUI apps. Use when writing ANY user-facing text - always localize with String Catalogs, LocalizedStringResource, and proper pluralization patterns.

View on GitHub

Marketplace

fusengine-plugins

fusengine/agents

Plugin

fuse-swift-apple-expert

development

Repository

fusengine/agents

plugins/swift-apple-expert/skills/swift-i18n/SKILL.md

Last Verified

January 22, 2026

Install Skill

Select agents to install to:

Scope:
npx add-skill https://github.com/fusengine/agents/blob/main/plugins/swift-apple-expert/skills/swift-i18n/SKILL.md -a claude-code --skill swift-i18n

Installation paths:

Claude
.claude/skills/swift-i18n/
Powered by add-skill CLI

Instructions

# Swift Internationalization (i18n)

## MANDATORY: All User-Facing Text Must Be Localized

Every string displayed to users MUST use localization APIs. Never hardcode strings.

## Modern APIs (Swift 5.7+)

### String(localized:) - Swift Code

```swift
// Basic usage with comment for translators
let title = String(
    localized: "home.welcome.title",
    defaultValue: "Welcome",
    comment: "Main screen welcome title"
)

// In Swift Packages - ALWAYS specify bundle
let text = String(localized: "feature.title", bundle: .module)
```

### LocalizedStringResource - Type-Safe (Swift 5.9+)

```swift
extension LocalizedStringResource {
    enum App {
        enum Home {
            static let title = LocalizedStringResource(
                "app.home.title",
                defaultValue: "Home",
                comment: "Navigation title for home screen"
            )
            static func itemCount(_ count: Int) -> LocalizedStringResource {
                LocalizedStringResource(
                    "app.home.itemCount",
                    defaultValue: "\(count) items",
                    comment: "Item count with pluralization"
                )
            }
        }
    }
}

// Usage
Text(LocalizedStringResource.App.Home.title)
```

### SwiftUI Text - Automatic Localization

```swift
// Literal strings ARE localized automatically
Text("home.title")
Button("button.save") { }

// String variables are NOT localized - wrap them!
let key = "home.title"
Text(LocalizedStringKey(key)) // Required for variables
```

## Pluralization

```swift
// Number in text triggers plural rules
Text("You have \(count) items")
// xcstrings: "You have %lld items" with plural variations
```

## Date/Number Formatting

```swift
Text(date, style: .date)
Text(price, format: .currency(code: "EUR"))
Text(count, format: .number)
```

## Key Naming Convention

```
module.screen.element.property
```

Examples:
- `app.home.title`
- `auth.login.button.submit`
- `profile.settings.toggle.notificati

Validation Details

Front Matter
Required Fields
Valid Name Format
Valid Description
Has Sections
Allowed Tools
Instruction Length:
2264 chars