Developer tools
anylocale CLI
One executable for pulling, syncing, and managing keys and values from a terminal, a build phase or a coding agent.
What you get
One executable, every operation the editor has.
Everything is an HTTP call
Project tokens carry read, push and manage scopes, so a CI token that pushes files cannot delete keys.
The HTTP APIRuns in CI
Push the source language on merge and pull every language before the release build, on any CI that can run a shell.
CI pipelinesPulls on every build
A Run Script phase above Compile Sources keeps the target on the latest verified text without anyone remembering to sync.
Xcode build phasePull a subset by tag
Tag keys by feature or platform and pull only those, so one project can serve several apps without shipping each other's strings.
Set it up
From nothing to every language.
Step 1: Install the CLI and log in
Homebrew or the one-line installer, then a token issued per project under Settings, Integrations. The read scope pulls; push writes source files and values; manage creates and deletes keys.
shellbrew install anylocale/tap/anylocale anylocale login --project my-appStep 2: Or install without Homebrew
The installer writes to /usr/local/bin when that is writable and to ~/.local/bin otherwise. It never calls sudo. The token is prompted for with the input hidden and stored in
~/.anylocalewith owner-only permissions;ANYLOCALE_CONFIGmoves the store.shellcurl -fsSL https://anylocale.com/install.sh | shStep 3: Sync an .lproj tree, or pull one file
sync writes every locale and every string table as .strings and .stringsdict. pull writes one file in any format; --tag narrows it to keys carrying that tag, --platform leaves out keys tagged for another platform.
shellanylocale sync --project my-app --out-dir Sources/Resources --platform ios anylocale pull --project my-app --locale de --format android-xml \ --tag checkout --out app/src/main/res/values-de/strings.xml anylocale tags list --project my-appStep 4: Manage keys and text
Keys carry the metadata, values carry the text. Creating a key with its text is two requests, so the token needs manage and push.
shellanylocale keys create --project my-app --name home.title \ --description "Header on the home screen" \ --value en="Home" anylocale values get --project my-app --name home.title
Good to know
- In CI, set ANYLOCALE_TOKEN instead of logging in; it overrides any stored token.
- Exit code 1 is a usage error or a refused input, 2 a failed request or download.
- --platform is exclusive: a key ships unless it is tagged for a different platform, so only the exceptions need the iOS or Android tag. An empty or unknown value fails the run instead of shipping the other platform's strings.
Questions
- How does it authenticate in CI?
- Through the ANYLOCALE_TOKEN environment variable, which overrides any stored login. Issue the token per project with only the scopes the job needs.
- Can I install it without Homebrew?
- Yes. The one-line installer writes to /usr/local/bin when that is writable and to ~/.local/bin otherwise, and never calls sudo. A build phase can vendor the script instead.
- What do the exit codes mean?
- 0 is success, 1 a usage error or a refused input, 2 a failed request or download. Let 2 fail the job rather than shipping stale text unnoticed.
- Can a coding agent do this?
- Yes. Every step on this page is a shell command with a token in the environment, which is exactly what an agent runs. Give it a token with the scopes the task needs and nothing more.
Start with the file your app already ships.
After checkout, import one strings file and read the first drafts within minutes.
Nothing to connect and nothing to install. The CLI is optional.