Skip to content

Installation

any-i18n has three independent parts. The extension works on its own if you import translation files by hand; the server and the CLI are optional helpers that produce those files.

  • A Chromium-based browser (Chrome, Edge) or Firefox 109+ for the extension
  • Node.js 22.12+ for the CLI and the build script
  • Python 3.10+ for the translation server (dict[str, str] type syntax is used)
Terminal window
git clone https://github.com/rennerdo30/any-i18n.git
cd any-i18n

There are no dependencies to install for the extension itself — it is plain JavaScript loaded directly by the manifest, with no bundler and no build step for development.

  1. Open chrome://extensions (or edge://extensions).
  2. Enable Developer mode.
  3. Click Load unpacked and select the extension/ directory.

The extension requests only storage, activeTab, and scripting, plus host access to http://localhost:39418/* so it can talk to a translation server running on your own machine.

The server translates batches of keys through an LLM backend and caches the results in SQLite.

Terminal window
./server/start.sh

The script creates server/.venv if it does not exist, installs server/requirements.txt into it, and runs python -m server.run from the repository root.

server/run.py starts uvicorn on 0.0.0.0 at port 39418 with auto-reload enabled. Pass --no-reload to disable reloading:

Terminal window
python -m server.run --no-reload

Check that it is up:

Terminal window
curl http://localhost:39418/api/health
# {"status":"ok","backend":"claude-cli"}

The default backend shells out to a locally installed CLI tool. See Configuration for the available backends and their environment variables.

Terminal window
cd cli
npm install

The CLI is an ESM package with a single dependency (commander) and exposes the any-i18n binary:

Terminal window
npx any-i18n --help
Terminal window
node scripts/build.js # chrome, firefox and edge
node scripts/build.js --browser chrome # a single target

Each run wipes dist/ and copies extension/ into dist/<browser>/. For the Firefox target the manifest is patched with browser_specific_settings.gecko (id: any-i18n@extension, strict_min_version: 109.0). The resulting directories are ready to zip and upload.

The same commands are available through npm scripts:

Terminal window
npm run build
npm run build:chrome
npm run build:firefox