Skip to content

Your CLI, in your users’ language

Localizer translates a Go CLI’s own strings (help, flags, messages, errors) with AI, keeps the translations in sync through pull requests, and compiles them into your binary. One line of code, and no network calls at runtime.
main.go
root := newRootCmd()
localizer.Localize(root, locales.FS)
if err := root.Execute(); err != nil {
os.Exit(1)
}

Your users get their language from their OS settings, with nothing to configure:

Terminal window
$ taskctl add --help
Add a task.
Usage:
taskctl add <title> [flags]
Flags:
--due string Due date in YYYY-MM-DD format.
-h, --help help for add
--priority level Priority of the task: level is low, normal or high. (default "normal")

Command names, flags, placeholders and your users’ data stay exactly as they are.

Everything your CLI says

Command descriptions, flag help, usage text, Cobra’s built-in commands and the errors it prints are translated automatically. Your own messages go through a few helpers at your output chokepoints.

No runtime cost

Catalogs are compiled in with go:embed. Nothing is downloaded and nothing is reported. English output is unchanged, and other languages add a few milliseconds at startup.

Always in sync

When a push adds or changes strings, Localizer translates just those and updates one pull request. Strings you delete are removed from the catalogs.

Safe by design

Every translation is checked twice, by the service and again at runtime. Placeholders, flags and code spans must survive intact, and output that isn’t yours is never touched.

Human edits win

Translations are plain JSON in your repository. Correct any entry in a pull request, and Localizer never overwrites it.

No keys to leak

You authenticate through the GitHub App or your workflow’s short-lived OIDC token, so there is no secret to store. Localizer serves open-source repositories only.

  1. Connect your repository. Add the GitHub Action to a workflow or install the GitHub App.

  2. Merge the onboarding pull request. It adds .localizer.yml, a locales/ directory with one catalog per language, and the one-line integration.

  3. Keep shipping. When your strings change, the translations pull request updates itself. Review it and merge it like any other change.

  4. Your users see their language. Localizer reads their environment and OS settings, and falls back to English.