Locales

Locale plugins add language translations to Overseer. A locale is a Fluent Translation List (.ftl) file that overrides the app’s built-in English strings, packaged in a plugin.

Creating a locale

Create a plugin directory in your Plugins directory with a manifest.json and an .ftl file.

Directory structure

@myname/elvish/
  manifest.json
  main.ftl

Manifest

{
  "id": "@myname/elvish",
  "name": "Elvish",
  "version": "1.0.0",
  "author": "Your Name",
  "locales": [
    {
      "id": "elvish",
      "label": "Elvish",
      "src": { "$ref": "main.ftl" }
    }
  ]
}

Each locale entry has:

FieldTypeDescription
idstringUnique identifier for this locale.
labelstringDisplay name in Settings > Language.
srcobjectReference to the FTL file: { "$ref": "filename.ftl" }.

FTL file

Fluent files use key = Value syntax. Each key corresponds to a UI string in Overseer:

app-name = Overseer
main-menu-settings = Elen síla lúmenn' omentielvo
main-menu-plugins = Hérincë
main-menu-undo = Entuluva
main-menu-redo = Enquantuva

Restart Overseer. Your locale appears in Settings > Language.

Discovering translation keys

A setting to display translation keys in the UI is planned for a future release. This will let you see exactly which keys correspond to which UI elements, making it straightforward to build translations.

Partial translations

You don’t need to translate every string. Include only the keys you want to override – anything not in your file falls back to the English default.

For example, to translate only the main menu into German:

main-menu-edit-session = Sitzung bearbeiten
main-menu-duplicate = Duplizieren
main-menu-save-as-preset = Als Vorlage speichern
main-menu-delete-session = Sitzung löschen
main-menu-settings = Einstellungen
main-menu-plugins = Erweiterungen

Fluent syntax

Basic messages

key = Value

Variables

Some strings include variables passed by the application. Use { $variableName } to insert them:

error-pdf-load = Failed to load PDF: { $error }

Multiline values

Indent continuation lines with spaces:

long-message =
    This is a longer message
    that spans multiple lines.

For the full Fluent syntax specification, see projectfluent.org.