"loadFailed":"Fel: Det går inte att läsa in uppförandekodens innehåll."
},
"contentMarkdown":"# 📝 Uppförandekod och rekommendationer\n\nDetta dokument fastställer **principer och riktlinjer** för användningen av **ProxMenux**, för att främja **respekt, samarbete och säkerhet** i utvecklingen.\n\n## 📌 1. Källangivelser och erkännande\n\n- Om **skript, kodavsnitt eller idéer** från andra kodarkiv eller utvecklare används ska den ursprungliga upphovspersonen alltid anges.\n- En kommentar i koden eller dokumentationen ska ange källan och om möjligt länka till det ursprungliga kodarkivet.\n- Vid användning av kod med en viss **licens** måste dess villkor följas.\n\n### ✅ Exempel på korrekt källangivelse i koden:\n\n```bash\n# Skript baserat på arbetet av [Upphovsperson] i [Länk till kodarkiv]\n```\n\n## 🔒 2. Säkerhet och ansvar för koden\n\n- All kod i detta arkiv följer rekommenderade arbetssätt för säker utveckling.\n- Bidrag som avsiktligt inför sårbarheter eller osäkra arbetssätt tillåts inte.\n- Skript får aldrig äventyra systemsäkerheten eller användarnas data.\n- Bidrag bör granskas med avseende på säkerhet och stabilitet före införandet.\n\n### ⚠️ Ansvarsfull rapportering av sårbarheter\n\nOm du upptäcker en säkerhetssårbarhet ska du INTE rapportera den i offentliga ärenden eller forum.\n\nRapportera den i stället privat via e-post:\n\n📧 proxmenux@macrimi.pro\n\nLäs vår [säkerhetspolicy](./SECURITY.md) för mer information om sårbarheter och hur de rapporteras.\n\n## 🤝 3. Gemenskapens riktlinjer\n\nAlla användare måste följa dessa riktlinjer för att upprätthålla en respektfull och professionell miljö:\n\n- ✅ Var respektfull och konstruktiv i diskussioner.\n- ❌ Trakasserier, hatretorik och stötande beteende tolereras inte.\n- ✅ Ge återkoppling professionellt och undvik personangrepp.\n- ❌ Överträdelser kan leda till varningar eller avstängningar beroende på allvarlighetsgrad.\n\n##\n\nDetta dokument främjar etisk kodanvändning, säkerhetsmedvetenhet och en respektfull gemenskap.\n\n📢 Låt oss bygga något fantastiskt tillsammans!\n"
"title":"Bidra till ProxMenux | ProxMenux Dokumentation",
"description":"Så bidrar du till ProxMenux: grenmodell (main / develop / feature/*), pull request-flöde, skripthuvud med författare och valfri stödlänk, gränssnitt i två faser, meddelandefunktioner och vägen till en stabil utgåva.",
"ogTitle":"Bidra till ProxMenux",
"ogDescription":"Grenmodell, arbetsflöde, författarangivelse i skripthuvudet och regler för gränssnitt i två faser som bidragsgivare ska följa."
},
"header":{
"title":"Bidra till ProxMenux",
"description":"ProxMenux välkomnar bidrag från gemenskapen: nya skript, rättningar, förbättrade dialogrutor, översättningar och integrationer. Sidan beskriver arkivets struktur, grenmodellen, pull request-flödet, skripthuvudet med författare och valfri stödlänk samt de designregler varje bidrag ska följa.",
"section":"Om"
},
"twoPagesCallout":{
"title":"Två relaterade sidor, ett projekt",
"body":"Förväxla inte sidan med <contributorsLink>Bidragsgivare</contributorsLink>, som uppmärksammar dem som redan bidrar: testare, granskare och utvecklare. Den här sidan är för <em>dig</em> som vill börja bidra och förklarar hur du förbereder en pull request för sammanslagning."
},
"branching":{
"heading":"Grenmodell",
"intro":"ProxMenux använder en grenmodell med tre nivåer:",
"headerBranch":"Gren",
"headerPurpose":"syfte",
"rows":[
{
"branch":"main",
"purposeRich":"Stabil kod som är klar för produktion. Bara ändringar som är klara för utgivning slås samman här. Det är den version slutanvändare får vid en vanlig installation av ProxMenux."
},
{
"branch":"develop",
"purposeRich":"Aktiv utvecklingsgren. Allt nytt arbete tas först in här; det är betakanalen. När en stabil utgåva är klar förs den härifrån till <code>main</code>."
},
{
"branch":"feature/*",
"purposeRich":"Kortlivade grenar per funktion, fix eller förbättring. Skapad från <code>develop</code>, fusioneras tillbaka till <code>develop</code> via en Pull begäran efter granskning."
}
],
"calloutTitle":"Vad detta innebär för användare",
"calloutBody":"Slutanvändare som spårar <code>main</code> får testade releaser. Användare som vill ha de senaste funktionerna tidigt - och inte har något emot enstaka grova kanter - kan följa <code>develop</code>. Nya funktioner passerar alltid genom <code>develop</code> först; ingenting når <code>main</code> utan att gå igenom den cykeln."
},
"workflow":{
"heading":"Arbetsflöde för pull requests",
"intro":"Från idé till fusion i fem steg:",
"step1Lead":"<strong>Skapa en funktionsgren från <code>develop</code></strong>:",
"step1Trail":"Använd ett beskrivande grennamn: <code>feature/zfs-arc-tuning</code>, <code>feature/fix-iommu-detection</code>, <code>feature/add-tailscale-script</code>.",
"step2Lead":"<strong>Arbeta med ändringarna och skicka upp grenen:</strong>",
"step2Code":"# Make your changes, then:\ngit add scripts/...\ngit commit -m \"Add ZFS ARC tuning script\"\ngit push -u origin feature/your-feature-name",
"step3":"<strong>Öppna en pull request mot <code>develop</code></strong>, inte mot <code>main</code>. Kontrollera på GitHub att basgrenen är <code>develop</code>. Beskriv vad skriptet gör och ändrar och vilka Proxmox VE-versioner det testats på.",
"step4":"<strong>Efter granskning slås ändringarna samman i <code>develop</code>.</strong> En underhållare granskar kodkvalitet, skripthuvud och gränssnittets två faser. Om ändringar begärs skickar du fler incheckningar till samma gren; PR:n uppdateras automatiskt.",
"step5":"<strong>Stabila utgåvor förs från <code>develop</code> till <code>main</code>.</strong> Vid utgivning flyttas <code>main</code> fram till <code>develop</code> med fast-forward och taggas. Ditt bidrag ingår i nästa stabila version."
},
"scriptHeader":{
"heading":"Skripthuvud: metadata och beskrivning",
"intro":"Varje ProxMenux-skript börjar med två intilliggande kommentarsblock som bildar skripthuvudet. <strong>Båda krävs</strong>: de anger författare och syfte utan att läsaren behöver gå igenom själva koden.",
"bullets":[
"<strong>Övre blocket: metadata.</strong> Författare, valfria GitHub-/stödlänkar, underhållare, upphovsrätt, licens, version och uppdateringsdatum. Här ges också <em>erkännande åt bidragsgivare</em>: för ett nytt skript anger du ditt namn och valfritt GitHub-sida och stödprofil, till exempel Ko-fi, GitHub Sponsors eller Buy Me a Coffee.",
"<strong>Nedre blocket: beskrivning.</strong> Ett kort stycke på enkel engelska förklarar skriptet. Det läses <em>före</em> koden och ska på egen hand klargöra syfte, huvudåtgärder, berörda resurser och förutsättningar."
],
"licenseCalloutTitle":"Licenslinjen är fast - GPL-3.0",
"licenseCalloutBody":"ProxMenux ges ut under <strong>GNU General Public License v3.0</strong>. Alla skript har samma licens. Raden <code>License</code> i skripthuvudet ska alltid ha GPL-3.0-hänvisningen i exemplet nedan; den väljs inte per skript. Genom att bidra godkänner du GPL-3.0: alla får läsa, ändra och sprida skriptet och ändringarna med samma licens. Fullständig text: <licenseLink>MacRimi/ProxMenux/LICENSE</licenseLink>.",
"templateCode":"#!/bin/bash\n\n# ==========================================================\n# ProxMenux - A menu-driven script for Proxmox VE management\n# ==========================================================\n# Author : Your Name\n# GitHub : github.com/yourhandle\n# Sponsor : ko-fi.com/yourhandle\n# Maintainer : MacRimi\n# Copyright : (c) 2026 MacRimi & contributors\n# License : (GPL-3.0) (https://github.com/MacRimi/ProxMenux/blob/main/LICENSE)\n# Version : 1.0\n# Last Updated: DD/MM/YYYY\n# ==========================================================\n# Description:\n# Short paragraph explaining what the script does.\n# Mention the main actions (e.g. \"creates a ZFS pool\",\n# \"configures IOMMU and reboots\", \"imports an ISO into a VM\"),\n# the resources it touches, and any prerequisites the user\n# should be aware of before running it.\n# ==========================================================",
"optionalNote":"Raderna <code>GitHub</code> och <code>Sponsor</code> är valfria. Utelämna dem om du inte vill publicera dem. Allt annat krävs.",
"whyCalloutTitle":"Varför detta är viktigt",
"whyCalloutBody":"Bidrag till öppen källkod är frivilligt arbete. Namn och eventuell stödlänk direkt i källkoden ger författaren synligt erkännande vid varje läsning, i stället för att döljas bakom projektet. Beskrivningen har ett annat syfte: den är det första en framtida underhållare eller nyfiken användare läser. En tydlig beskrivning avgör ofta om skriptet inger förtroende eller undviks."
},
"structure":{
"heading":"Projektstruktur",
"intro":"Var olika typer av skript finns i arkivet:",
"treeCode":"scripts/\n├── menus/ # Top-level menu scripts (entry points)\n├── storage/ # Disk, storage and passthrough scripts\n├── share/ # NFS, Samba, local share scripts\n├── vm/ # VM creation and configuration scripts\n├── gpu_tpu/ # GPU / TPU passthrough scripts\n├── post_install/ # Post-install automation scripts\n├── backup_restore/ # Backup and restore scripts\n├── utilities/ # System utility scripts\n├── global/ # Shared helper libraries (sourced by other scripts)\n├── utils.sh # Shared utility functions and message helpers\n└── help_info_menu.sh # Interactive help and command reference",
"outro":"Varje skript läser in <code>utils.sh</code> vid start med source för att få meddelandefunktioner, väntindikator, färgvariabler och översättningssystem. Gemensamma hjälpbibliotek i <code>scripts/global/</code> läses uttryckligen in av de skript som behöver dem."
},
"twoPhase":{
"heading":"Regler för gränssnitt i två faser",
"intro":"Detta är den viktigaste regeln i ProxMenux och den som oftast leder till ändringskrav i PR:er. Varje skript delas in i <strong>exakt två faser</strong>:",
"headerPhase":"Fas",
"headerPurpose":"syfte",
"headerScreen":"Skärmtillstånd",
"rows":[
{
"phaseRich":"<strong>Fas 1 — Urval</strong>",
"purposeRich":"Samla varje användarbeslut. Kör något förberedande arbete som behövs (sonder, skanningar, kontroller).",
"screenRich":"<code>dialog</code>-överlägg. Om en kontroll mellan två menyer tar mer än någon sekund, visa en <code>msg_info</code>-väntindikator så att användaren ser att skriptet inte hängt sig. Anropa sedan <code>stop_spinner</code> direkt före nästa dialogruta."
},
{
"phaseRich":"<strong>Fas 2 - Utförande</strong>",
"purposeRich":"Utför varje operation. Visa hela framstegshistorien som ackumuleras på skärmen.",
"screenRich":"Synliga <code>msg_info</code>/<code>msg_ok</code>-meddelanden; aldrig <code>dialog</code>."
}
],
"principle":"Principen är <strong>samla alla val först och kör sedan allt</strong>. Användaren ser först ordnade dialogmenyer (fas 1), sedan en loggliknande körningsvy (fas 2). Faserna blandas inte: inga dialogrutor mitt i körningen och inga förloppsmeddelanden under valet.",
"phase1Heading":"Fas 1 - typiskt mönster",
"phase1Code":"# Silent preparatory work between dialogs\nmsg_info \"$(translate \"Checking disk assignments...\")\"\nASSIGNED_TO=$(check_assignments \"$DISK\")\nstop_spinner # ← clears line silently, result saved in variable\n\n# Next dialog can now use ASSIGNED_TO\nif [ -n \"$ASSIGNED_TO\" ]; then\n dialog --yesno \"$(translate \"Disk already assigned. Continue?\")\" $UI_YESNO_H $UI_YESNO_W\nfi\n\n# Collect multiple decisions per item with parallel arrays\ndeclare -a DISK_LIST=()\ndeclare -a DISK_FORMAT_TYPES=()\ndeclare -a DISK_MOUNT_POINTS=()\nfor DISK in $SELECTED; do\n msg_info \"$(translate \"Analyzing disk...\")\"\n CURRENT_FS=$(lsblk -no FSTYPE \"$DISK\" | xargs)\n stop_spinner\n\n FORMAT=$(dialog --backtitle \"$BACKTITLE\" \\\n --title \"$(translate \"Select Filesystem\")\" \\\n --menu \"...\" $UI_SHORT_MENU_H $UI_SHORT_MENU_W $UI_SHORT_MENU_LIST_H \\\n \"ext4\" \"...\" \"xfs\" \"...\" \"btrfs\" \"...\" \\\n 2>&1 >/dev/tty)\n [ -z \"$FORMAT\" ] && continue\n\n DISK_LIST+=(\"$DISK\")\n DISK_FORMAT_TYPES+=(\"$FORMAT\")\ndone",
"phase1RulesIntro":"<strong>Regler för fas 1:</strong>",
"phase1Rules":[
"Om en <code>msg_info</code>-väntindikator körs och du ska öppna en <code>dialog</code>- eller <code>whiptail</code>-meny, anropa först <code>stop_spinner</code>. Indikatorn kan inte samexistera med verktygens överlägg. Om ingen indikator är aktiv behövs inget anrop.",
"Använd <code>show_proxmenux_logo</code> + <code>msg_title</code> + <code>msg_info</code> för att ge visuellt sammanhang åt längre åtgärder i fas 1, exempelvis en kontroll som tar minst fem sekunder. Funktionen rensar redan skärmen; anropa inte <code>clear</code> före den.",
"Anropa inte <code>show_proxmenux_logo</code> mellan dialogmenyer när det saknas något att visa. Att rensa skärmen för en tom terminal ger bara visuellt brus.",
"Lagra alla val och kontrollresultat i variabler eller parallella arrayer. Sammanfattningen visas i början av fas 2, inte i fas 1."
],
"phase2Heading":"Fas 2 - typiskt mönster",
"phase2Code":"# ── PHASE 2 — EXECUTION ─────────────────────────────\nshow_proxmenux_logo\nmsg_title \"$(translate \"My Script Title\")\"\n\n# Recap Phase 1 preparatory results — show what was already done\nmsg_ok \"$(translate \"CT $CTID selected.\")\"\nmsg_ok \"$(translate \"Repositories verified.\")\"\nmsg_ok \"$(translate \"Disks to process: ${#DISK_LIST[@]}\")\"\n\n# Now execute operations\nfor i in \"${!DISK_LIST[@]}\"; do\n DISK=\"${DISK_LIST[$i]}\"\n FORMAT=\"${DISK_FORMAT_TYPES[$i]}\"\n\n msg_info \"$(translate \"Formatting\") $DISK $(translate \"as\") $FORMAT...\"\n mkfs.\"$FORMAT\" \"$DISK\" >/dev/null 2>&1\n msg_ok \"$(translate \"Formatted.\")\"\ndone\n\nmsg_ok \"$(translate \"Completed. ${#DISK_LIST[@]} disk(s) processed.\")\"\nmsg_success \"$(translate \"Press Enter to return to menu...\")\"\nread -r",
"phase2Rules":"<strong>Regler för fas 2:</strong> börja med <code>show_proxmenux_logo + msg_title</code> och sammanfatta genast fas 1 som <code>msg_ok</code>-rader. Anropa aldrig <code>show_proxmenux_logo</code> igen, eftersom det raderar förloppshistoriken. Använd inte <code>dialog</code>; om ett val under körningen är oundvikligt, använd <code>whiptail</code> enligt nästa avsnitt."
},
"dialogVsWhiptail":{
"headingRich":"När du ska använda <code>dialog</code> vs <code>whiptail</code>",
"intro":"Båda verktygen ritar textbaserade gränssnitt men beter sig olika på skärmen. ProxMenux använder dem därför i två skilda faser.",
"whenRich":"<strong>Alltid i fas 1.</strong> Alla interaktiva val, som VM, disk, filsystem eller bekräftelse av en åtgärd, använder <code>dialog</code>. Det är ProxMenux standardverktyg för gränssnitt.",
"effectRich":"Tar över terminalen, rensar skärmen, ritar sitt överlägg och återställer föregående tillstånd när den stängs. Det fungerar i fas 1 eftersom inga användbara resultat visas ännu."
"whenRich":"<strong>Bara i fas 2, när det är oundvikligt.</strong> Ett typiskt fall är en omstartsfråga när körningen är klar. Använd inte <code>whiptail</code> för att fråga ”fortsätt?” mitt i körningen; det beslutet skulle ha fattats i fas 1.",
"effectRich":"Ett lättare överlägg som <em>inte</em> rensar terminalens innehåll. Historiken från <code>msg_ok</code>/<code>msg_info</code> i fas 2 syns bakom dialogrutan. Därför passar det när förlopp redan visas på skärmen."
}
],
"calloutTitle":"Varför uppdelningen är viktig",
"calloutBody":"Om du anropar <code>dialog</code> mitt i fas 2 försvinner alla <code>msg_ok</code>-rader användaren har följt. Det synliga händelseförloppet raderas. <code>whiptail</code> undviker det. Regeln bevarar alltså användarens bild av vad skriptet hittills har gjort.",
"rebootHeading":"Omstartsfråga: det typiska whiptail-fallet i fas 2",
"rebootIntro":"Om ett skript kan kräva omstart efter exempelvis aktivering av IOMMU eller ändrade kärnparametrar använder slutfrågan i fas 2 <code>whiptail</code>. Ha alltid en Nej-gren som säger att den berörda resursen inte ska användas före omstart:",
"rebootCode":"if [[ \"$HOST_REBOOT_REQUIRED\" == \"yes\" ]]; then\n echo \"\"\n if whiptail --title \"$(translate \"Reboot Required\")\" --yesno \\\n \"\\n$(translate \"A host reboot is required before starting the VM. Reboot now?\")\" \\\n 13 78; then\n msg_warn \"$(translate \"Rebooting the system...\")\"\n reboot\n else\n echo \"\"\n msg_info2 \"$(translate \"Do not start the VM until the system has been rebooted.\")\"\n fi\nfi\n\nmsg_success \"$(translate \"Press Enter to return to menu...\")\"\nread -r"
},
"messageFunctions":{
"heading":"Referens för meddelandefunktioner",
"intro":"Alla finns i <code>utils.sh</code>. Använd dem som standard för synlig utdata så att skripten får ett enhetligt utseende. Om en ny funktion behövs, till exempel en allvarlighetsnivå eller layouthjälpare, föreslå den i din pull request. Den granskas och läggs till i <code>utils.sh</code> om den är användbar för fler skript.",
"headerFunction":"Funktion",
"headerWhen":"När man ska använda",
"headerSpinner":"Förloppsindikator",
"rows":[
{
"function":"msg_info \"text\"",
"whenRich":"Operation pågår.",
"spinner":"Börjar"
},
{
"function":"stop_spinner",
"whenRich":"Slutet av tyst förberedande arbete i fas 1 - dödar spinner, rensar linjen.",
"spinner":"Stopp"
},
{
"function":"msg_ok \"text\"",
"whenRich":"Operationen lyckades. Använd också för \"funktion aktiverad\" även när en omstart krävs.",
"spinner":"Stopp"
},
{
"function":"msg_warn \"text\"",
"whenRich":"Faktisk varning eller nedbrutet tillstånd.",
"spinner":"Stopp"
},
{
"function":"msg_error \"text\"",
"whenRich":"Allvarligt fel.",
"spinner":"Stopp"
},
{
"function":"msg_info2 \"text\"",
"whenRich":"Icke blockerande upplysning på en cyan informationsrad.",
"spinner":"Stopp"
},
{
"function":"msg_success \"text\"",
"whenRich":"Avslutande frågan ”Tryck Enter för att återgå” i slutet av fas 2.",
"spinner":"Stopp"
},
{
"function":"msg_title \"text\"",
"whenRich":"Fet rubrik med inbyggda mellanrum. Används i början av fas 2.",
"spinner":"—"
},
{
"function":"show_proxmenux_logo",
"whenRich":"Rensar skärmen och visar logotypen. Anropas <em>en gång</em> i början av fas 2.",
"spinner":"—"
}
]
},
"dialogConventions":{
"heading":"dialogkonventioner",
"bullets":[
"Skicka alltid <code>--backtitle \"$BACKTITLE\"</code> till varje <code>dialog</code>- och <code>whiptail</code>-anrop. <code>$BACKTITLE</code> är alltid <code>\"ProxMenux\"</code>, satt en gång i skripthuvudet och aldrig överskrivet. Användaren ska alltid se projektnamnet som ram, inte skriptets egen titel.",
"Omslut alltid rubriker och meddelanden med <code>$(translate \"...\")</code>.",
"Omdirigera alltid <code>dialog</code>-utgången med <code>2>&1 >/dev/tty</code> - den fångade stdouten blir användarens val, medan dialogrutan själv drar på terminalen.",
"Använd standard UI dimension variabler (<code>$UI_MENU_H</code>, <code>$UI_MSG_W</code>, etc.) för konsekvent storlek över skript.",
"Kontrollera alltid tomma eller avbrutna val och hantera dem korrekt."
],
"exampleIntro":"Fullständigt exempel: skapa en VM-valmeny och hantera avbrott.",
"exampleCode":"# 1) Build the list of VMs as alternating \"ID NAME\" pairs.\n# dialog --menu expects this exact shape: tag1 description1 tag2 description2 ...\nVM_LIST=\"\"\nfor vmid in $(qm list | awk 'NR>1 {print $1}'); do\n vm_name=$(qm config \"$vmid\" | awk -F': ' '/^name:/ {print $2}')\n VM_LIST=\"$VM_LIST $vmid \\\"$vm_name\\\"\"\ndone\n\n# 2) Show the dialog. Captured stdout is the user's selection (the VMID).\nVMID=$(eval \"dialog --backtitle \\\"\\$BACKTITLE\\\" \\\n --title \\\"\\$(translate \\\"Select VM\\\")\\\" \\\n --menu \\\"\\$(translate \\\"Choose a VM from the list:\\\")\\\" \\\n \\$UI_MENU_H \\$UI_MENU_W \\$UI_MENU_LIST_H \\\n $VM_LIST \\\n 2>&1 >/dev/tty\")\n\n# 3) Empty result means the user pressed Cancel or Esc — exit silently.\nif [ -z \"$VMID\" ]; then\n exit 0\nfi\n\n# 4) Continue with the rest of Phase 1, knowing VMID is now set.\necho \"User selected VMID=$VMID\""
},
"translation":{
"heading":"Översättningspolicy",
"intro":"Alla användarsynliga strängar måste inslagas med funktionen <code>translate</code>. ProxMenux översätter dem automatiskt till alla språk - du skriver engelska, användaren läser sitt modersmål.",
"Skriv strängar på engelska - översättning hanteras automatiskt av bygget.",
"Håll strängar koncis. Undvik inbäddningsvariabler inom långa meningar där det är möjligt.",
"Översätt <strong>inte</strong> variabelnamn, sökvägar eller tekniska identifierare."
]
},
"variableStyle":{
"heading":"Regler för variabler och stil",
"bullets":[
"Använd <code>UPPER_CASE</code> för script-nivå variabler.",
"Använd <code>lower_case</code> för lokala funktionsvariabler (deklarera med <code>local</code>).",
"Sätt alla variabelexpansioner inom citattecken: <code>\"$VAR\"</code>, inte <code>$VAR</code>.",
"Använd <code>[[ ]]</code> för villkor, inte <code>[ ]</code> (förutom där POSIX krävs).",
"<code>show_proxmenux_logo</code> är det avsedda sättet att rensa skärmen: den rensar och visar projektlogotypen för att ge visuellt sammanhang. Anropa den en gång i början av fas 2, och valfritt före ett längre block med väntindikator i fas 1."
],
"standardNamesIntro":"Standardvariabla namn över hela projektet:",
"redirectHeading":"Omdirigera verktygsutgång under fas 2",
"redirectIntro":"Fas 2 visar en logg med <code>msg_info → msg_ok</code>-rader. Om ett anropat verktyg, som apt, mkfs, qm, pct eller dd, skriver till stdout/stderr rullar dess utdata förbi meddelandena och stör överblicken. Användaren kan inte längre skilja skriptets förlopp från verktygets detaljer.",
"withoutRedirectIntro":"<strong> Utan omdirigering</strong> - vad användaren ser om du inte hanterar ljudet:",
"withoutRedirectCode":"ℹ Installing kernel package...\nReading package lists... Done\nBuilding dependency tree... Done\nReading state information... Done\nThe following NEW packages will be installed:\n proxmox-kernel-6.5\n0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.\nNeed to get 12.5 MB of archives.\nAfter this operation, 47.2 MB of additional disk space will be used.\nGet:1 http://download.proxmox.com/debian/pve trixie/pve-no-subscription amd64 ...\n... [200+ more lines of dpkg output] ...\n✓ Kernel installed.",
"withRedirectIntro":"<strong> Med omdirigering</strong> - hur samma operation ser ut när buller skickas någon annanstans:",
"logLead":"<strong>Skicka utdata till en loggfil</strong> när de kan behöva granskas senare, exempelvis vid en misslyckad installation eller för att se vad dpkg gjorde. Det är det föredragna mönstret för apt-åtgärder:",
"referenceOutro":"Skriptet <code>scripts/global/update-pve9_2.sh</code> är ett referensimplementering - varje <code>apt-get</code>-samtal skickar ut till en loggfil så att användaren bara ser det rena <code>msg_info → msg_ok</code>-flödet, medan loggen på disken låter dig rekonstruera exakt vad apt gjorde om något går fel."
},
"dosAndDonts":{
"heading":"Do's och Don'ts",
"doHeading":"✅ Gör",
"doBullets":[
"<code>stop_spinner</code> före en <code>dialog</code> i fas 1 endast när en <code>msg_info</code> spinner körs för närvarande.",
"Fas 2 börjar med <code>show_proxmenux_logo + msg_title + msg_ok</code> för att sammanfatta resultaten från fas 1.",
"Använd <code>msg_ok</code> för framgångsrikt aktiverade funktioner - även om en omstart krävs.",
"Använd <code>whiptail</code> (inte <code>dialog</code>) för någon post-exekveringsprompt som måste visas i Fas 2.",
"Ha alltid en Nej-gren i omstartsfrågor som säger att den berörda resursen inte ska startas före omstart.",
"Bevakning VM-bara logik genom att kontrollera <code>[[ -f \"/etc/pve/qemu-server/$'{'vmid'}'.conf\" ]]</code> - controllers och NVMe PCIe kan inte läggas till LXC containrar.",
"Använd <code>ensure_repositories</code> från <code>utils-install-functions.sh</code> istället för ovillkorlig <code>apt-get update</code>.",
"Använd parallella arrayer i Fas 1 när varje objekt behöver flera dialoger."
],
"dontHeading":"❌ Gör inte",
"dontBullets":[
"Anropa <code>dialog</code> medan en väntindikator är aktiv.",
"Hoppa över fas 1 recap i början av fas 2.",
"Anropa <code>show_proxmenux_logo</code> en andra gång; det raderar allt fas 2 har visat.",
"Använd <code>dialog</code> i Fas 2 (använd <code>whiptail</code> för det sällsynta oundvikliga fallet).",
"Använda enbart <code>clear</code>.",
"Omge <code>msg_title</code> med tomma <code>echo \"\"</code>-rader; mellanrum ingår redan.",
"Använd <code>msg_warn</code> för att rapportera en framgångsrikt aktiverad funktion - det är en <code>msg_ok</code>.",
"Skapa en fork av <code>MacRimi/ProxMenux</code> på GitHub och klona din fork.",
"Skapa en <code>feature/*</code>-gren från <code>develop</code> (se <em>Grenmodell</em> ovan).",
"Följ denna guide för nya eller modifierade skript. Skriv rubriken med ditt namn; lägg till den valfria sponsorlinjen om du vill.",
"Testa ditt manus på en riktig Proxmox VE-instans - både Fas 1 (varje dialogruta) och Fas 2 (varje operation lyckas och rullar tillbaka rent på fel).",
"Öppna en pull request <strong>mot <code>develop</code></strong> med en tydlig beskrivning: skriptets syfte, ändringar och den Proxmox VE-version som användes för tester.",
"Se till att ditt bidrag respekterar <cocLink>Uppförandekod</cocLink>."
],
"securityOutro":"För säkerhetskänsliga problem följer du rapporteringsprocessen i <securityLink>SECURITY.md</securityLink> i stället för att öppna ett offentligt ärende."
"ogDescription":"Möt bidragsgivarna bakom ProxMenux."
},
"header":{
"title":"Bidragsgivare",
"description":"ProxMenux växer tack vare sina bidragsgivare. Den här sidan uppmärksammar deras arbete: att testa versioner före publicering, hitta regressioner, granska PR:ar och påverka utvecklingen av nya funktioner.",
"section":"Om"
},
"beyond":{
"title":"Utöver denna lista",
"body":"Många fler bidrar genom felrapporter, funktionsförslag i Discussions, betatestning och översättningar. Den fullständiga listan över kodbidragsgivare finns i <extlink>GitHubs bidragsgivargraf</extlink>. Den här sidan lyfter fram dem som är mest aktiva med att testa och granska ProxMenux-versioner."
},
"testers":{
"heading":"Testare och granskare",
"intro":"De här personerna var bland de första att bidra till projektet. Deras tester, felrapporter och förbättringsförslag hjälpte ProxMenux att bli vad det är i dag.",
"roles":{
"testing":"Testning",
"testingReviewer":"Testning och granskning"
},
"youtube":"YouTube"
},
"contribute":{
"heading":"Vill du bidra?",
"intro":"Alla bidrag är välkomna - kod, testning, design, dokumentation eller bara dela dina idéer:",
"tester":"<strong>Testare</strong> — prova <beta>betakanalen</beta> och rapportera vad som fungerar och vad som inte fungerar före de stabila versionerna.",
"developer":"<strong>Utvecklare</strong> — Bash, Next.js (TypeScript) och lite Python för översättningens virtuella miljö (venv). PR:ar välkomnas på <gh>GitHub</gh>.",
"designer":"<strong>Designer</strong> — UI förbättringar, ikoner, skärmdumpar för dokumentation.",
"ideas":"<strong>Idéer</strong> — öppna en tråd i <disc>GitHub Discussions</disc> innan du skapar ett ärende med ett funktionsförslag."
},
"coc":{
"title":"Läs uppförandekoden först",
"body":"Läs <coclink>uppförandekoden och rekommenderade arbetssätt</coclink> innan du skickar in kod eller rapporterar problem. Där beskrivs förväntningar på kodansvar, rapportering av säkerhetsbrister och omfattningen av PR:ar."
"ogDescription":"Vanliga frågor om ProxMenux installation, kompatibilitet, säkerhet och hur du kan bidra."
},
"header":{
"title":"Vanliga frågor",
"description":"Vanliga frågor om ProxMenux: vad det är, vem det passar, installation, uppdatering, avinstallation, kompatibilitet, anpassning, säkerhet och bidrag. Om din fråga saknas, titta i GitHub Discussions eller skapa ett ärende.",
"section":"Om"
},
"quickLinks":{
"title":"Snabba länkar",
"installationLabel":"Installation",
"installationSuffix":" — installationskommandot på en rad och dess beroenden.",
"introductionLabel":"Introduktion",
"introductionSuffix":" — vad ProxMenux gör, på fem minuter.",
"uninstallLabel":"Avinstallera",
"uninstallSuffix":" — ren borttagning.",
"issuesLabel":"GitHub Issues",
"discussionsLabel":"Diskussioner"
},
"q1":{
"question":"Vad är ProxMenux, och vad används det för?",
"p1Rich":"<strong>ProxMenux</strong> är ett interaktivt menystyrt verktyg som gör <strong>Proxmox VE</strong> tillgängligt oavsett teknisk erfarenhet. Det förenklar körningen av kommandon och låter dig hantera systemet utan avancerade Linux-kunskaper.",
"p2":"Mindre erfarna användare kan köra kommandon via strukturerade menyer och behöver skriva mindre i terminalen. Erfarna administratörer sparar steg i återkommande uppgifter som härdning efter installation, GPU-passthrough, import av OVF-VM:ar och rotation av ZFS-snapshots.",
"p3":"Proxmox VE används ofta för:",
"items":[
"Virtualisering i företagsklass",
"HomeLab och personliga molnlösningar",
"Multimedieservrar, automatisering och mycket mer"
"p2":"När installationen är klar startar du verktyget med:",
"menuCmd":"menu"
},
"q3":{
"question":"Är ProxMenux kompatibel med alla Proxmox-versioner?",
"bodyRich":"<strong>Nej — ProxMenux kräver Proxmox VE 8 eller senare.</strong> PVE 7 och äldre stöds inte. Uppgradera först PVE 7 till 8.x enligt Proxmox officiella anvisningar. Därefter kan ProxMenux hantera steget från 8 till 9 via <upgradelink>Verktyg → Uppgradera PVE 8 till PVE 9</upgradelink>."
},
"q4":{
"question":"Kan jag anpassa ProxMenux?",
"p1Rich":"Uppdateringar kan skriva över lokala ändringar i huvudskripten, så undvik att redigera dessa filer direkt. Det här <em>kan</em> du anpassa:",
"items":[
"Konsolens välkomstbanner med verktyget <strong>FastFetch</strong> i menyn för efterinstallation.",
"Vilka valfria komponenter installeras (Monitor, Fail2Ban, Lynis ...) - välj under installation eller via den relevanta menyn senare."
]
},
"q5":{
"question":"Hur uppdaterar jag ProxMenux?",
"p1Rich":"När en ny version finns upptäcker ProxMenux den nästa gång du kör <code>menu</code> och erbjuder en uppdatering. Om du accepterar ersätts verktygets filer och konfiguration i den befintliga installationen. Du behöver inte ladda ned något manuellt.",
"p2Rich":"Användare av den stabila versionen får stabila uppdateringar, och betaanvändare får betauppdateringar. När en stabil version släpps meddelar betan det nästa gång menyn öppnas och erbjuder automatiskt byte. Läs mer om <betalink>betaprogrammet</betalink>."
},
"q6":{
"question":"Var kan jag rapportera problem eller föreslå funktioner?",
"p1Rich":"Rapportera buggar i <issueslink>GitHub Issues</issueslink>. Beskriv stegen för att återskapa felet, felmeddelandet och vid behov Monitor-utdata från <code>journalctl -u proxmenux-monitor -n 50</code>.",
"p2Rich":"För <strong>säkerhetsproblem</strong>: <strong>publicera inte detaljerna</strong>. Följ rutinen för ansvarsfull rapportering i <coclink>uppförandekoden och rekommendationerna</coclink>."
},
"q7":{
"question":"Kan jag bidra till ProxMenux?",
"p1Rich":"<strong>Absolut.</strong> ProxMenux är ett samarbetsprojekt med öppen källkod. Du kan bidra med kod (Bash, Next.js/TypeScript och översättningsverktyg i Python), tester, dokumentation, design eller idéer.",
"item1Rich":"Diskutera idéer i <discusslink>GitHub Discussions</discusslink> innan du skapar en funktionsförfrågan.",
"item2Rich":"Läs <coclink>uppförandekoden och rekommendationerna</coclink> innan du skickar en pull request.",
"item3Rich":"På <contriblink>sidan för medverkande</contriblink> ser du vilka som för närvarande testar och granskar projektet."
"p1Rich":"<strong>Installationen av ProxMenux lägger till följande komponenter.</strong>",
"item1Rich":"Beroenden via apt: <code>dialog</code>, <code>curl</code>, <code>jq</code> och <code>git</code>. Översättningarna använder färdiga JSON-kataloger. Installationsprogrammet lägger inte till någon virtuell översättningsmiljö på värden.",
"item2Rich":"Skriptträdet på <code>/usr/local/share/proxmenux/</code>.",
"item3Rich":"Startkommandot i <code>/usr/local/bin/menu</code>.",
"p2Rich":"ProxMenux ändrar <em>inte</em> Proxmox centrala konfiguration om du inte uttryckligen begär det via en särskild meny. Nätverksreparationen redigerar till exempel <code>/etc/network/interfaces</code>, men först efter din bekräftelse och efter att en säkerhetskopia har skapats."
},
"q9":{
"question":"Är det säkert att använda ProxMenux i produktion?",
"bodyRich":"<strong>Ja.</strong> Eftersom ProxMenux bara ändrar Proxmox centrala filer på uttrycklig begäran kan det användas i produktionsmiljöer. Som med all automatisering bör du först testa i en kontrollerad miljö och ha säkerhetskopior innan du kör destruktiva åtgärder, till exempel uppgradering från PVE 8 till 9, diskformatering eller borttagning av en VM."
},
"q10":{
"question":"Hur avinstallerar jag ProxMenux?",
"p1Rich":"I ProxMenux: <strong>Inställningar → Avinstallera ProxMenux</strong>. Avinstallationen tar bort skriptträdet, startkommandot och Monitor-tjänsten samt, om du väljer det, utvalda beroenden. Den återställer <code>/root/.bashrc</code> och <code>/etc/motd</code> från säkerhetskopiorna som skapades vid installationen, om de finns.",
"question":"VirusTotal flaggar installationsadressen — är den säker?",
"p1Rich":"Resultatet 1/95 från <em>Chong Lua Dao</em>, som rapporterades i ärende #162, bedömdes av projektansvarig som ett falsklarm. Installationsprogrammet använder mönstret <code>curl | bash</code> och kan ladda ned <code>jq</code> från dess officiella GitHub-utgåva. Detta <em>beteende</em> kan utlösa heuristiska skannrar. Den historiska rapporten säger inget avgörande om alla framtida nedladdningar.",
"p2Rich":"ProxMenux har helt öppen källkod och du kan granska installationsskriptet rad för rad: <scriptlink>install_proxmenux.sh</scriptlink>. Mer bakgrund finns i <issuelink>ärende #162</issuelink>."
"description":"Om ProxMenux: projektmål, bidragsgivare, vanliga frågor och uppförandekod. Ett menystyrt hanteringsverktyg med öppen källkod för Proxmox VE 8+, utvecklat och underhållet av MacRimi tillsammans med en liten grupp testare och bidragsgivare.",
"ogDescription":"Om ProxMenux — ett menystyrt hanteringsverktyg med öppen källkod för Proxmox VE 8+."
},
"header":{
"title":"Om",
"description":"Projektinformation, vanliga frågor, bidragsgivare och uppförandekod. ProxMenux är ett menystyrt hanteringsverktyg med öppen källkod för Proxmox VE 8+, utvecklat och underhållet av MacRimi med hjälp av en liten grupp testare och bidragsgivare.",
"section":"Om"
},
"callout":{
"title":"Öppen källkod, utvecklad av gemenskapen",
"body":"ProxMenux har GPL-3.0-licens och utvecklas öppet på GitHub. Varje skript kan granskas och varje ändring spåras. Felrapporter, idéer, kod och testning välkomnas."
},
"section":{
"heading":"I detta avsnitt",
"options":[
{
"icon":"HelpCircle",
"href":"/docs/about/faq",
"title":"FAQ",
"description":"Vanliga frågor: vad ProxMenux är, installation, kompatibilitet, anpassning, uppdateringar, säkerhet, användning i produktion och avinstallation."
},
{
"icon":"Users",
"href":"/docs/about/contributors",
"title":"Bidragsgivare",
"description":"Ett erkännande till dem som gör ProxMenux möjligt: testare, granskare och utvecklare som bidrar till varje version."
},
{
"icon":"ScrollText",
"href":"/docs/about/code-of-conduct",
"title":"Uppförandekod",
"description":"Projektvärden, kodansvarsförväntningar och bidragsriktlinjer. Obligatorisk läsning innan du öppnar en PR eller rapport."
}
]
},
"involved":{
"heading":"Bli involverad",
"intro":"Tre ställen att engagera sig i projektet:",
"description":"GitHub Pull Requests - läs uppförandekoden först."
}
]
},
"support":{
"heading":"Stöd projektet",
"introRich":"Om ProxMenux sparar tid åt dig är det enklaste sättet att hjälpa andra hitta det att <starlink>ge förrådet en ⭐ på GitHub</starlink>. Om du vill göra mer:",
"kofiLabel":"Stöd på Ko-fi",
"kofiOutro":" — Köper underhållaren en kaffe och håller utvecklingen på gång."
}
}
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.