Install
$ agentstack add skill-rshankras-claude-code-apple-skills-localization-setup ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Localization Setup Generator
Generate internationalization (i18n) infrastructure for multi-language support in iOS/macOS apps.
When This Skill Activates
- User wants to localize their app for multiple languages
- User mentions i18n, internationalization, or localization
- User asks about String Catalogs or .strings files
- User wants to support RTL (right-to-left) languages
Pre-Generation Checks
Before generating, verify:
- Existing Localization
``bash # Check for existing localization files find . -name "*.xcstrings" -o -name "Localizable.strings" 2>/dev/null | head -5 find . -name "*.lproj" -type d 2>/dev/null | head -5 ``
- Deployment Target
``bash # String Catalogs require iOS 16+ / macOS 13+ grep -r "IPHONEOS_DEPLOYMENT_TARGET\|MACOSX_DEPLOYMENT_TARGET" *.xcodeproj 2>/dev/null ``
- Project Structure
``bash # Find project for adding localization find . -name "*.xcodeproj" | head -1 ``
Configuration Questions
1. Localization Approach
- String Catalogs (Recommended, iOS 16+) - Modern, visual editor in Xcode
- Legacy .strings - Traditional approach, all iOS versions
2. Initial Languages
- English (en) - default
- Which additional languages? (e.g., es, de, fr, ja, zh-Hans)
3. Features
- Pluralization - Handle "1 item" vs "2 items"
- Device-specific - Different strings for iPhone/iPad/Mac
- SwiftUI Preview - Preview in different locales
Generated Files
String Catalogs (Recommended)
Resources/
└── Localizable.xcstrings # String catalog with all translations
Supporting Code
Sources/Localization/
├── LocalizedStrings.swift # Type-safe string access
├── LocalizationManager.swift # Runtime language switching
└── LocalizedPreview.swift # SwiftUI preview helpers
Key Features
Type-Safe String Access
// Generated enum for type-safe access
enum L10n {
static let appName = String(localized: "app_name")
static let welcomeMessage = String(localized: "welcome_message")
enum Settings {
static let title = String(localized: "settings_title")
static let language = String(localized: "settings_language")
}
}
// Usage
Text(L10n.appName)
Text(L10n.Settings.title)
Pluralization
// In String Catalog, define plural rules
// key: "items_count"
// variations:
// - zero: "No items"
// - one: "1 item"
// - other: "%lld items"
Text(String(localized: "items_count \(count)",
defaultValue: "\(count) items"))
String Interpolation
// In String Catalog:
// key: "greeting"
// value: "Hello, %@!"
let name = "Alice"
Text(String(localized: "greeting \(name)"))
Runtime Language Switching
// Preview in different locale
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
.environment(\.locale, Locale(identifier: "es"))
}
}
Integration Steps
1. Add String Catalog
- In Xcode: File > New > File
- Choose "String Catalog"
- Name it "Localizable.xcstrings"
- Add to your app target
2. Add Supported Languages
- Select project in navigator
- Info tab > Localizations
- Click + to add languages
3. Migrate Existing Strings
If migrating from .strings files:
- Right-click .strings file
- "Migrate to String Catalog..."
4. Use in SwiftUI
// Automatic localization
Text("Hello, World!") // Uses String Catalog automatically
// Explicit localized string
Text(String(localized: "custom_key"))
// With type-safe enum (generated)
Text(L10n.welcomeMessage)
5. Use in UIKit
label.text = String(localized: "hello_world")
// or
label.text = NSLocalizedString("hello_world", comment: "Greeting")
Best Practices
Key Naming Conventions
// Good: Descriptive, hierarchical
"settings.appearance.theme"
"onboarding.step1.title"
"error.network.connection_failed"
// Avoid: Vague or hardcoded text as key
"button1"
"Hello, World!"
Comments for Translators
String(localized: "delete_confirmation",
comment: "Alert message asking user to confirm deletion")
Formatting
// Numbers - Use FormatStyle
Text(price, format: .currency(code: "USD"))
// Dates - Use FormatStyle
Text(date, format: .dateTime.month().day())
// Lists - Use ListFormatStyle
Text(items, format: .list(type: .and))
RTL Support
// Automatic with SwiftUI
// For manual layout adjustments:
.environment(\.layoutDirection, .rightToLeft)
Testing Localization
In Xcode
- Edit Scheme > Run > Options
- Set "App Language" to test language
- Set "App Region" for number/date formatting
In SwiftUI Previews
#Preview {
ContentView()
.environment(\.locale, Locale(identifier: "ja"))
}
Export for Translation
- Product > Export Localizations...
- Share .xliff files with translators
- Import translated .xliff files
References
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: rshankras
- Source: rshankras/claude-code-apple-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.