SG SealGrid Athena Docs

Languages & Localization

Athena's console text — labels, menus, and messages — is served from JSON language packs. English ships out of the box, and Hebrew is offered in the language picker. Because language packs are plain files, you can also translate the console into any language you like by adding your own pack. This page explains where language packs live, the format they use, how to register and select one, how the automatic right-to-left layout works, and how the server behaves when a translation is missing.

Who this is for

Selecting a shipped language is a routine, Admin-only preference covered on General Settings. This page goes one level deeper — for administrators and translators who want to add or edit a language pack. It involves placing a file on the server and updating server configuration, so it is a host-level task rather than a point-and-click one.

How localization works#

Athena keeps every piece of console text in a language pack: a single JSON file named after the language's two-letter code — en.json for English, he.json for Hebrew, and so on. When the server starts it reads the pack for the currently selected language from its Resources folder and uses those strings everywhere in the console.

The language pack is read once when the server starts. That means a change to the selected language — or a change to a pack's contents — takes effect after the server is restarted (see Applying changes).

Language packs#

Language packs live in the Resources directory alongside the server. Each file is named <code>.json, where <code> is the language code you reference in configuration and in the picker:

FileLanguageNotes
Resources/en.jsonEnglish (en)Built-in, complete. Use it as the template for a new translation.
Resources/he.jsonעברית / Hebrew (he)Offered in the picker. Right-to-left (see RTL layout).
Resources/<code>.jsonYour languageAny language you add, named with its two-letter code — for example fr.json or de.json.
Keep packs on a persistent volume

In a container deployment, make sure the Resources directory is mounted from a host volume so your custom language pack survives image upgrades and restarts. See Installation for the persistent-directory layout.

Translation file format#

A language pack is a nested JSON object. Keys are grouped into sections (for example Common, Settings, Search), and each leaf value is the translated string. Athena reads the nested structure and turns each entry into a dotted key — so Common.Save below refers to the "Save" value inside the Common object:

{
  "App": {
    "Name": "Athena",
    "Description": "Software Deployment & Inventory"
  },
  "Common": {
    "Save": "Save",
    "Cancel": "Cancel",
    "Delete": "Delete",
    "Loading": "Loading..."
  },
  "Settings": {
    "General": {
      "Language": "Language Settings",
      "CurrentLanguage": "Current Language"
    }
  }
}

When you translate a pack, change only the values (the text to the right of each colon) and keep the keys exactly as they appear in en.json. The keys are how the console looks each string up; renaming or removing one means that string will fall back to English (or, in some places, show the key itself). A few practical rules:

Adding a new language#

To translate the console into a language that isn't shipped — say French (fr) — follow these steps on the server:

  1. Copy the English pack. Duplicate Resources/en.json to Resources/fr.json.
  2. Translate the values. Edit fr.json and translate each string value, leaving the keys and any {0}-style placeholders unchanged.
  3. Register the language. Add the code to the Localization:SupportedLanguages list so Athena treats it as an available language. See Configuration keys.
  4. Select it. Set Localization:Language to fr — either by editing configuration directly or, for a shipped language, by choosing it in Settings → General.
  5. Restart the server so the new pack is loaded (see Applying changes).
The picker vs. custom languages

The Settings → General picker lists the shipped languages (English and Hebrew). A custom language you add is selected through the Localization:Language configuration value rather than the drop-down. Registering it in SupportedLanguages keeps your configuration self-documenting about which packs you maintain.

Configuration keys#

Two keys under the Localization section of appsettings.json control language behaviour (also summarised on Configuration → Localization):

KeyDefaultWhat it does
Localization:Language en The active language code. Athena loads Resources/<code>.json for this value at startup.
Localization:SupportedLanguages ["en"] The list of language codes you offer. Add each custom pack's code here.
// appsettings.json — offer English, Hebrew, and a custom French pack,
// with French selected as the active language
"Localization": {
  "Language": "fr",
  "SupportedLanguages": [ "en", "he", "fr" ]
}

The selected language can also be changed through the console and the API as part of the General settings — those simply write the Localization:Language value for you. See General Settings → REST API and PowerShell.

Right-to-left languages#

Athena knows that some languages read right-to-left. When the active language is Hebrew (he) or Arabic (ar), the console automatically switches to a right-to-left layout — text alignment and the flow of the interface flip to match. You don't need to configure anything extra: adding an ar.json pack and selecting ar gives you an Arabic, right-to-left console, just as Hebrew does today.

Every other language code is treated as left-to-right. If you translate into another right-to-left script, you can still ship the pack; the layout direction is driven specifically by the he and ar codes.

Missing translations & fallback#

Athena is designed to keep the console usable even when a pack is incomplete or absent:

Confirm your pack loaded

After a restart, watch the server log for the localization messages. A confirmation that strings were loaded for your language code means the pack was found and parsed; a "localization file not found" warning means the file name or its location doesn't match the selected code.

Applying changes#

The active language pack is loaded when the server starts. Whenever you:

restart the server so the console picks up the change consistently for everyone. For this reason, plan language-pack updates during a maintenance window, the same way you would for other server-configuration changes. See Configuration and General Settings.