.claude/skills/localization-developer/SKILL.md
Context-aware routing to the Anytype iOS localization system. Use when working with .xcstrings files, Loc constants, hardcoded strings, or user-facing text.
npx skillsauth add anyproto/anytype-swift localization-developerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Context-aware routing to the Anytype iOS localization system. Helps you navigate the 3-file .xcstrings structure and use Loc constants correctly.
.xcstrings filesLoc constantsLoc constantsen), Crowdin handles othersmake generate after editing .xcstrings filesrg "yourSearchTerm" Modules/Loc/Sources/Loc/Generated/Strings.swiftmake generateAnytypeText(Loc.yourKey, style: .uxCalloutMedium)Is this text for authentication/login/vault?
YES → Auth.xcstrings (86 keys)
NO → Continue
Is this text for spaces/objects/collaboration?
YES → Workspace.xcstrings (493 keys)
NO → Continue
Is this text for settings/widgets/general UI?
YES → UI.xcstrings (667 keys)
Modules/Loc/Sources/Loc/Resources/Auth.xcstringsModules/Loc/Sources/Loc/Resources/Workspace.xcstringsModules/Loc/Sources/Loc/Resources/UI.xcstringsGenerated output: All 3 files → single Strings.swift (~5,000 lines, 1,246 total keys)
"Your localization key" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Your English text here"
}
}
}
}
Key naming:
"No properties yet" ✅"No properties yet. Add some." ❌"QR.join.title" → Loc.Qr.Join.title// String: "You've reached the limit of %lld editors"
Loc.SpaceLimit.Editors.title(4)
// String: "Welcome, %@!"
Loc.welcomeMessage("John")
String(format: Loc.limitReached, 10) // DON'T DO THIS
Why: SwiftGen auto-generates parameterized functions for format specifiers (%lld, %d, %@).
Format specifiers:
%lld → Int parameter%d → Int parameter%@ → String parameter%.1f → Double parameterrg "keyName" --type swiftmake generate// ❌ WRONG
Text("Delete")
// ✅ CORRECT
Text(Loc.delete)
// In Auth.xcstrings
"Settings" : { ... }
// In UI.xcstrings
"Settings" : { ... } // ❌ DUPLICATE! Breaks generation
// ❌ WRONG
String(format: Loc.limitReached, 10)
// ✅ CORRECT
Loc.limitReached(10)
// ❌ WRONG - Crowdin will overwrite
"de" : { "value" : "Meine Übersetzung" }
// ✅ CORRECT - Only edit English
"en" : { "value" : "My translation" }
Full Guide: Anytype/Sources/PresentationLayer/Common/LOCALIZATION_GUIDE.md
For comprehensive coverage of:
rg in Strings.swift)en)make generateLoc.yourKeyIOS_DEVELOPMENT_GUIDE.md - Never use hardcoded stringsCODE_GENERATION_GUIDE.md - Understanding make generateNavigation: This is a smart router. For deep details, always refer to LOCALIZATION_GUIDE.md.
development
Smart router to testing patterns and practices. Use when writing unit tests, creating mocks, testing edge cases, or working with Swift Testing and XCTest frameworks.
development
Audit and improve SwiftUI runtime performance through code review and Instruments guidance. Use for diagnosing slow rendering, janky scrolling, excessive view updates, or layout thrash in SwiftUI apps.
development
SwiftUI view structure, composition, and best practices. Use when refactoring SwiftUI views, organizing view files, or extracting subviews.
development
Write, review, or improve SwiftUI code following best practices for state management, view composition, performance, macOS-specific APIs, and iOS 26+ Liquid Glass adoption. Use when building new SwiftUI features, refactoring existing views, reviewing code quality, or adopting modern SwiftUI patterns.