Skip to content

Translating it

Andrea de Ruvo edited this page Aug 18, 2026 · 1 revision

Translating it

Four languages ship with the board — English, Italian, French, Spanish — and the globe in the header switches between them. Whatever your browser asks for is the default.

Adding a fifth is one flat JSON file whose keys are the English strings. No gettext, no .po, no extraction step, no build, and nothing to register:

{
  "code": "de",
  "name": "Deutsch",
  "strings": {
    "no sessions": "keine Sitzungen",
    "up {age}": "läuft seit {age}",
    "{n} machines": "{n} Maschinen"
  }
}

Drop it at ~/.config/panoptes/lang/de.json — beside the config file — and it appears in the picker. Nothing to restart on the browser's side.

  • A missing entry falls back to English, so a translation is useful the day it is started. There is no broken half.
  • {n}, {age}, {path} and friends must survive into the translation. They are filled in at the point of use; one that is dropped leaves a hole in the sentence.
  • A file you drop in overrides one that ships, which is how a wording you disagree with gets fixed without a fork.

Copy static/lang/en.json to see every key — it lists all of them. To send one back, open a pull request with the file in static/lang/; a test checks that every catalogue covers every string and keeps its placeholders, so a stale one cannot pass unnoticed.

Argus works the same way, file for file — and it can also import a catalogue from its Settings screen, which is the version of this that works from a phone.

Clone this wiki locally