Skip to main content

localize-strings

Keep the string catalogs (Localizable.xcstrings, InfoPlist.xcstrings) in lockstep with the code. Use whenever code adds, edits, or removes any user-facing string or Info.plist usage description, or when LocalizationCatalogTests fails.

Source facts

Repository
rokartur/BetterCmdTab
Last source activity
September 23, 2026 at 06:15
Detected SKILL.md language
English
Stars
793
Forks
37

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
localize-strings
description
Keep the string catalogs (Localizable.xcstrings, InfoPlist.xcstrings) in lockstep with the code. Use whenever code adds, edits, or removes any user-facing string or Info.plist usage description, or when LocalizationCatalogTests fails.
# Localize strings Every user-facing string ships translated in six locales. The catalog is version-controlled JSON and `LocalizationCatalogTests` pins full coverage — an English-only key fails the suite, it does not silently ship. ## 1. Use the localized form in code User-facing text is `String(localized: "…")`; enum display names localize too. A bare literal in UI code ships untranslated — wrap it. ## 2. Add the catalog entries Edit `BetterCmdTab/Localizable.xcstrings` directly (it is JSON). For each new key add translations for **all** of: `de`, `es`, `fr`, `pl`, `ru`, `zh-Hans`. Copy the exact JSON shape of a neighboring entry, keep keys sorted where the surrounding file is sorted, and keep format specifiers (`%@`, `%d`, …) identical across every locale — specifier drift is a test failure. Remove catalog entries whose code key was deleted. Info.plist strings live in `BetterCmdTab/InfoPlist.xcstrings` and the same suite covers them, with two extra rules. Key a usage description by its **plist key name** (`NSAppleEventsUsageDescription`), not by its English value — the value form compiles fine and never resolves at runtime. Document-type names (`CFBundleTypeName`, `UTTypeDescription`) are the exception: those are keyed by value. Every key in this catalog also needs an explicit `en` entry. A key-named one has no other source of English: without it Xcode emits the key as its own value and the prompt reads `NSAppleEventsUsageDescription`. For a value-keyed one it is redundant, but the test requires it uniformly. Keep that `en` value byte-identical to its source — the `INFOPLIST_KEY_*` build setting in `project.pbxproj` (both configurations) for key-named entries, `BetterCmdTab/Info.plist` for document-type names. `en.lproj/InfoPlist.strings` overrides Info.plist, so editing only the build setting changes nothing. ## 3. Verify ```bash xcodebuild -scheme "BetterCmdTab Debug" -destination 'platform=macOS' test \ -only-testing:BetterCmdTabTests/LocalizationCatalogTests ``` **Complete when:** the suite passes with the new keys present in all six locales.
View on GitHub