DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Locale Fr — DSH Plugin for DeepSeek Harness
← Plugins
L

dsh-locale-fr

Locale Fr

French language pack for the DeepSeek Harness (dsh) web UI. Ships ~1160 UI strings plus a display-level fallback for community plugins that hard-code their labels.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:GaaaorkOrga/dsh-locale-fr#a79ad66fbabae588b27467dd925bef45770bccd2
READMECompatibilityVersions

Compatibility and provenance

Locale Fr is published as dsh-locale-fr and currently resolves to version 1.0.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
github
Registry updated
9/4/2026

Versions

1.0.0stable
9/4/2026

Related plugins

Loading related plugins…

Latest
1.0.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
web
License
MIT
Source
github
GitHub
★ 0
Weekly downloads
0
Last push
9/4/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in

Related plugins

More verified plugins in ui-customization.

Web App@deepseek-ai/dsh-web-appThe dsh browser-surface bundle: the web patch layer over dsh-base plus the runtime glue plugin (frontend dist serving, web-surface prompt, bash runtime variables, URL line)Experimental Agent Team Web Profile@deepseek-ai/dsh-experimental-agent-team-web-profileExperimental Web profile layer for Agent Teams Remote and UI pluginsClient Ui Task Board@linxin666/dsh-client-ui-task-boardHost-authoritative task board for the DSH Web GUI with real session execution, Host cron scheduling, and optional cross-platform idle-sleep protection; mounted without DSH source changes.Pet@linxin666/dsh-petMulti-pet companion plugin for the dsh web GUI: a registry-driven floating pet that reacts to model activity, with per-pet naming, petting/feeding interactions and an affinity score

README

dsh-locale-fr — French for the DeepSeek Harness web UI

A language pack for DeepSeek Harness (dsh). It puts the browser UI in French: sidebar, composer, command menu, execution trail, settings and every section of them — 1163 strings across 33 namespaces.

It ships a second, separable layer that translates two community plugins which hard-code their Chinese labels (see Third-party layer).

Screenshots and status: this pack is used daily against @deepseek-ai/dsh 0.1.1-rc.2 and is designed to keep working on 0.1.2+.

Why this exists

dsh ships zh and en only. That is a shipping choice, not an architectural limit: @deepseek-ai/dsh-client-locale exposes a real extension point.

  • dsh 0.1.2-rc.1 and later — ctx.locale.addLanguage({ id, label, fallback }) accepts any BCP 47-ish tag whose fallback chain terminates at en. The pack registers fr, and Français shows up in Settings → General → Language with no UI change at all. The choice persists in ~/.dsh/settings.yaml as locale.preference: fr.
  • dsh 0.1.1-rc.2 and earlier — the catalog is frozen to zh/en and setLocale("fr") throws. The pack then patches the single function that reads a string, lookup(namespace, key), to consult French first. Same result, one caveat: French is always active, since there is no catalog entry to switch away from. Remove the plugin to get English back.

The pack detects which case it is in. Nothing to configure.

An untranslated key always falls back to English, never to Chinese.

Install

# from a checkout
dsh plugin --profile web add "link:/path/to/dsh-locale-fr"

# or straight from git
dsh plugin --profile web add "github:GaaaorkOrga/dsh-locale-fr"

Web profile only — it is a browser-side plugin, and it mounts itself through its own cordis.patch.yml, so headless and tui profiles never reference it and start without it.

On dsh 0.1.2+, pick Français in Settings → General → Language. Or set it directly:

# ~/.dsh/settings.yaml
locale:
  preference: fr

No file under node_modules is ever modified. A dsh update cannot wipe the translation.

How it is built

dictionaries/fr.json is the single source of truth. lib/client.js is generated from it — never edit the generated file:

python3 tools/build-client.py

Adding or fixing a string

Edit dictionaries/fr.json, rebuild, reload the page. Keys mirror the namespaces dsh registers (conversation, chat, trajectory, settings.models, …).

Placeholders in braces — {count}, {toolName}, {command} — are part of the contract and must be copied verbatim, spelling included.

Refreshing after a dsh upgrade

A new dsh release adds strings. They show in English until you harvest and translate them:

# 1. Harvest the English dictionaries from the dsh you actually RUN
python3 tools/harvest-dsh-dictionaries.py \
  ~/.npm/_npx/<hash>/node_modules/@deepseek-ai  english.json

# 2. Diff against dictionaries/fr.json, translate the delta however you like,
#    merge it back into dictionaries/fr.json
# 3. Rebuild
python3 tools/build-client.py

Harvest from the version you run, not from whatever happens to sit in a cache — namespaces and keys move between releases. That mistake cost a debugging round here.

Porting to another language

Nothing in the machinery is French-specific:

  1. Copy dictionaries/fr.json to dictionaries/<lang>.json and translate the values.
  2. In tools/build-client.py, change LANGUAGE (id, label in its own language, fallback) and the "fr" passed to locale.register.
  3. Rebuild, install, done.

Pull requests adding a language are welcome — say so in the issue first so we can agree on whether it lives here or in a sibling package.

Third-party layer

@welsione/dsh-model-router (0.0.8) and dsh-model-selector (0.5.0) never call ctx.locale: every label is a string literal. No language pack, in any language, can reach them — it is an integration gap, not a translation gap. The router's whole settings page stays Chinese, and the model chip's label is visible on every screen.

dictionaries/third-party-fr.json holds 575 Chinese fragments and their French, applied by a MutationObserver on what is displayed. Fragments, not sentences: those plugins assemble their labels at runtime.

Guard rails:

  • nothing outside ideographs is touched;
  • never inside an input, a code block or the conversation transcript;
  • only fragments known to those two plugins are replaced, so arbitrary text — including Chinese a user pasted — is left alone by construction;
  • the French produced holds no ideograph, so the observer converges;
  • only mutated nodes are re-swept, batched per animation frame. A full-document walk on every frame was measured against 720 mutations in 2 s while an answer streams in.

This layer is a stopgap. Upstream requests are filed — welsione/dsh-model-router#1, DeepVite/dsh-model-selector#1 — and it should be deleted as soon as either lands. To disable it now, empty the file:

echo '{}' > dictionaries/third-party-fr.json && python3 tools/build-client.py

To regenerate it for a newer plugin version:

python3 tools/harvest-hardcoded-cjk.py \
  ~/.dsh/profiles/web/node_modules/@welsione/dsh-model-router/lib/client.js \
  ~/.dsh/profiles/web/node_modules/dsh-model-selector/lib/client/index.js > runs.json

Known gaps

Out of reach of any language pack, because they do not go through the locale registry:

  • Slash-command descriptions (/compact, /export, …) — served by the host.
  • Access-mode names (Read Only / Workspace Write / Full access) — rendered from host identifiers.

A word about dsh versions

latest moved from 0.1.1-rc.2 to 0.1.2-rc.1 on 2026-09-04. That release drops settingsNamespace and installSettingsSection from @deepseek-ai/dsh-settings, which dsh-model-selector and @welsione/dsh-model-router still import. The plugin loader aggregates the failures and dsh refuses to start — it does not merely skip the two plugins. Unrelated to this pack, but you will meet it if you run those plugins; pin your dsh version until they catch up.

Contributing

Issues and pull requests welcome — translation fixes, other languages, or taking over maintenance. Code comments are in English; the dictionaries are plain JSON, no build chain beyond Python 3.

License

MIT — see LICENSE.


En français

Ce paquet met l'interface web de DeepSeek Harness en français : 1163 étiquettes réparties en 33 familles de textes. dsh ne livre que le chinois et l'anglais, mais son registre de langues prévoit officiellement des langues supplémentaires — ce paquet s'y branche, sans modifier un seul fichier livré par l'éditeur.

  • Installation : dsh plugin --profile web add "github:GaaaorkOrga/dsh-locale-fr", puis choisir Français dans Réglages → Général → Langue (dsh 0.1.2+). Sur une version antérieure, le français s'applique tout seul.
  • Corriger un mot : éditer dictionaries/fr.json, relancer python3 tools/build-client.py, recharger la page. lib/client.js est engendré — ne jamais l'éditer à la main.
  • Une étiquette non traduite retombe en anglais, jamais en chinois.
  • Une seconde couche traduit l'affichage de deux modules communautaires qui écrivent leurs libellés chinois en dur, hors du système de langues. Elle est provisoire : deux demandes ont été déposées auprès de leurs auteurs.

Contributions bienvenues, y compris pour d'autres langues ou pour reprendre la maintenance.