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 API
  • Runs 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 pipelines
  • Pulls 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 phase
  • Pull 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.

  1. 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.

    shell
    brew install anylocale/tap/anylocale
    anylocale login --project my-app
  2. Step 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 ~/.anylocale with owner-only permissions; ANYLOCALE_CONFIG moves the store.

    shell
    curl -fsSL https://anylocale.com/install.sh | sh
  3. Step 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.

    shell
    anylocale 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-app
  4. Step 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.

    shell
    anylocale 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.