mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-09-29 10:06:41 +00:00
The glossary only holds what someone listed, and what reaches the reader
as a broken command was never on it. Paths, long options and Proxmox
subcommands are now recognised by shape:
/dev/apex_0 came back as /dev/apex 0
--auto-uninstall desinstalación automática
pct config 110 configuration PCT 110 (fr)
pct enter 101 pct inserire 101 (it)
OCI joins the glossary as well. Read as a word it became "BEC" in French
across thirty-one strings — "Vérification du BEC" named nothing — and the
menu entry read "Gestionnaire du BEC Apps". The entry itself and "beta"
are protected too, so the name stays the same in every language.
A provider can also alter a token rather than carry it through: argos
returned MPXTERM000 for PMXTERM000, the restore found nothing, and the
token shipped. "MPXTERM000 configuré" is in the French catalogue today.
The restore now verifies its own tokens and fails the string instead,
which leaves the key absent for the next run to retry.
Spanish category labels: twenty-six were wrong. Seven collapsed two
categories into one — "Backup & Recovery" read only "Recuperación",
"Network & Firewall" read "Red de cortafuegos" — six were half
translated, and the connector alternated between "&", "y" and "e". They
now use "y" or "e" throughout. "IoT & Smart Home" and
"AI / Coding & Dev-Tools" stay in English by choice.
"Messaging & Queues" becomes "Messaging & Notifications": its only
application is Apprise, a notification gateway, not a queue. The
Helper-Scripts import still maps their name, so nothing breaks upstream.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
41 lines
1.7 KiB
TypeScript
41 lines
1.7 KiB
TypeScript
type Translate = (key: string) => string
|
|
|
|
// Category values come from the community-scripts catalog and are also
|
|
// persisted with application links. Keep those raw values intact for
|
|
// filtering and storage; translate only what is displayed in the UI.
|
|
const CATEGORY_KEY_BY_VALUE: Record<string, string> = {
|
|
"*Arr Suite": "arrSuite",
|
|
"AI / Coding & Dev-Tools": "aiCodingDevTools",
|
|
"Adblock & DNS": "adblockDns",
|
|
"Authentication & Security": "authenticationSecurity",
|
|
"Automation & Scheduling": "automationScheduling",
|
|
"Backup & Recovery": "backupRecovery",
|
|
"Business & ERP": "businessErp",
|
|
"Communication & Community": "communicationCommunity",
|
|
"Containers & Docker": "containersDocker",
|
|
"Dashboards & Frontends": "dashboardsFrontends",
|
|
"Databases": "databases",
|
|
"Documents & Notes": "documentsNotes",
|
|
"Files & Downloads": "filesDownloads",
|
|
"Finance & Budgeting": "financeBudgeting",
|
|
"Gaming & Leisure": "gamingLeisure",
|
|
"Host Management": "hostManagement",
|
|
"IoT & Smart Home": "iotSmartHome",
|
|
"Media & Streaming": "mediaStreaming",
|
|
"Messaging & Notifications": "messagingNotifications",
|
|
"Miscellaneous": "miscellaneous",
|
|
"Monitoring & Analytics": "monitoringAnalytics",
|
|
"NVR & Cameras": "nvrCameras",
|
|
"Network & Firewall": "networkFirewall",
|
|
"Operating Systems & Appliances": "operatingSystemsAppliances",
|
|
"Productivity & Workflows": "productivityWorkflows",
|
|
"Remote Access & VPN": "remoteAccessVpn",
|
|
"Webservers & Proxies": "webserversProxies",
|
|
"ZigBee, Z-Wave & Matter": "zigbeeZwaveMatter",
|
|
}
|
|
|
|
export function getCategoryLabel(t: Translate, value: string): string {
|
|
const key = CATEGORY_KEY_BY_VALUE[value.trim()]
|
|
return key ? t(`apps.categoryLabels.${key}`) : value
|
|
}
|