@@ -288,6 +288,16 @@ gets the message twice.
288288Swagger UI; ** webhooks** send HMAC-SHA256 signed events with retries. More in
289289[ docs/api.md] ( docs/api.md ) .
290290
291+ #### 🌍 Language (RU / EN)
292+
293+ | Surface | Language comes from |
294+ | ------------------------- | -------------------------------------------------------------- |
295+ | Panel | the admin's own pick (per browser), otherwise the browser's languages |
296+ | Subscription page | ` Accept-Language ` |
297+ | Client and support bots | each person's Telegram language |
298+ | Admin bot | a panel-wide setting (* Settings → Telegram* ) |
299+ | CLI | English |
300+
291301#### 🎨 Branding and theme
292302
293303Your own name and logo instead of "RosPanel" — in the panel and on the subscription page. An
@@ -411,6 +421,12 @@ go build -o rospanel ./cmd/rospanel
411421./rospanel
412422```
413423
424+ ** Localisation.** The panel's dictionaries are ` web/src/i18n/ru.ts ` and ` en.ts ` , typed against
425+ each other: a key present in one and missing in the other is a build error, not a silent fallback.
426+ What Go renders itself — the bots and the subscription page — lives in ` internal/i18n/ ` ; the
427+ backend hands the panel a key plus arguments and never rendered prose. Adding a third language
428+ means one more dictionary on each side.
429+
414430Useful environment variables (all optional): ` ROSPANEL_DATA ` (data directory),
415431` ROSPANEL_ADMIN_ADDR ` (the panel's loopback address, ` 127.0.0.1:8080 ` by default), ` XRAY_BIN ` ,
416432` ROSPANEL_HOST ` , ` ROSPANEL_ACME_EMAIL ` .
0 commit comments