Skip to content

Replace /server/dictionaries with /server/translations: install/uninstall language packs from upstream translator repo #7331

Description

@r1ckstardev

This issue tracks Phase 1 of the BTCPay Server translations revamp roadmap.

Goal

Replace the current /server/dictionaries raw CRUD surface with a /server/translations page that:

  • Lists installed languages with maintainer attribution (handle + GitHub link), native name, last-updated date.
  • Lists languages available to install from btcpayserver-translator upstream.
  • One-click install and update from upstream.
  • No popup or multi-step modal.

Data source

Single manifest.json at the root of btcpayserver-translator, regenerated by CI on every merge to main:

{
  "languages": [
    { "code": "fr",
      "bcp47": "fr-FR",
      "name": "French",
      "native": "Francais",
      "file": "translations/french.json",
      "sha": "...",
      "maintainer": "teamssUTXO|https://github.com/teamssUTXO",
      "updated": "2026-04-12T10:30:00Z" }
  ],
  "_redirect": null
}

The server fetches manifest.json once per hour (cached). Individual language files are fetched only on user-initiated install. The bcp47 field is what the future per-user dropdown will match against Accept-Language.

Backwards compatibility

For BTCPay versions hardcoded to fetch translations/<lang>.json directly (pre-manifest), the static files at the old URLs remain in place. New versions read from manifest.json and follow its entries.

The manifest top-level _redirect field is reserved for a future move to a standalone translations repo - clients follow it without coordinated server-side changes. The default manifest URL inside BTCPay Server source is updated on each release so the redirect is a fallback, not the primary path.

Dependencies

This page depends on these btcpayserver-translator PRs landing first:

  • #47 (1amKhush): core language-pack validation. Catches malformed language packs at install time.
  • #49 (teamssUTXO): unit tests + CI workflow. Foundation for the manifest.json regeneration. Per its description, merges after Automating bundling of JS/CSS files #47.

Both bundled into Phase 1 of the roadmap so the install path has working validation + the manifest comes online with CI behind it.

Target

Phase 1 target completion: 2026-05-04 (2 weeks from 2026-04-23).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions