Refactor SaleSection component: Simplify sell item and sell all logic, remove unnecessary state management, and improve UI feedback. Update translations and clean up unused code in i18n files. Optimize price loading in BranchView and remove legacy product loading in MoneyHistoryView. Streamline PoliticsView by removing own character ID handling and related logic.

This commit is contained in:
Torsten Schulz (local)
2026-01-26 16:03:48 +01:00
parent 80b639b511
commit 71748f6aa0
15 changed files with 822 additions and 3815 deletions

View File

@@ -32,9 +32,8 @@
},
"notifications": {
"notify_election_created": "Es wurde eine neue Wahl ausgeschrieben.",
"notify_office_filled": "Ein politisches Amt wurde neu besetzt.",
"production": {
"overproduction": "Überproduktion: Deine Produktion liegt {value} Einheiten über dem Bedarf{branch_info}."
"overproduction": "Überproduktion: Deine Produktion liegt {value}% über dem Bedarf."
},
"transport": {
"waiting": "Transport wartet"
@@ -136,14 +135,6 @@
"store": "Verkauf",
"fullstack": "Produktion mit Verkauf"
}
},
"heirSelection": {
"title": "Charakter verloren - Erben auswählen",
"description": "Dein Charakter wurde durch einen Fehler verloren. Bitte wähle einen Erben aus deiner Hauptregion aus, um fortzufahren.",
"loading": "Lade mögliche Erben...",
"noHeirs": "Es wurden keine passenden Erben gefunden.",
"select": "Als Erben wählen",
"error": "Fehler beim Auswählen des Erben."
}
},
"titles": {
@@ -241,7 +232,6 @@
"produce": "Darf produzieren",
"sell": "Darf verkaufen",
"starttransport": "Darf Transporte veranlassen",
"repairVehicles": "Darf Fahrzeuge reparieren",
"emptyTransport": {
"title": "Transport ohne Produkte",
"description": "Bewege Transportmittel von dieser Niederlassung zu einer anderen, um sie besser zu nutzen.",
@@ -270,10 +260,6 @@
"sell": "Verkauf",
"sellButton": "Verkaufen",
"sellAllButton": "Alles verkaufen",
"selling": "Verkauf läuft...",
"sellError": "Fehler beim Verkauf des Produkts.",
"sellAllError": "Fehler beim Verkauf aller Produkte.",
"sellAllSuccess": "Alle Produkte wurden erfolgreich verkauft. Einnahmen: {revenue}",
"transportTitle": "Transport anlegen",
"transportSource": "Artikel",
"transportSourcePlaceholder": "Artikel wählen",
@@ -321,10 +307,7 @@
"current": "Laufende Produktionen",
"product": "Produkt",
"remainingTime": "Verbleibende Zeit (Sekunden)",
"noProductions": "Keine laufenden Produktionen.",
"status": "Status",
"sleep": "Zurückgestellt",
"active": "Aktiv"
"noProductions": "Keine laufenden Produktionen."
},
"columns": {
"city": "Stadt",
@@ -595,7 +578,6 @@
"Production cost": "Produktionskosten",
"Sell all products": "Alle Produkte verkauft",
"sell products": "Produkte verkauft",
"taxFromSaleProduct": "Steuer aus Verkauf: {product}",
"director starts production": "Direktor beginnt Produktion",
"director payed out": "Direktorgehalt ausgezahlt",
"Buy storage (type: field)": "Lagerplatz gekauft (Typ: Feld)",
@@ -614,9 +596,6 @@
"new nobility title": "Neuer Adelstitel",
"partyOrder": "Fest bestellt",
"renovation_all": "Haus komplett renoviert",
"reputationAction": {
"school_funding": "Sozialstatus: Schule/Lehrstuhl finanziert"
},
"health": {
"pill": "Gesundheitsmaßnahme: Tablette",
"doctor": "Gesundheitsmaßnahme: Arztbesuch",
@@ -759,8 +738,7 @@
"reputation": {
"title": "Reputation",
"overview": {
"title": "Übersicht",
"current": "Deine aktuelle Reputation"
"title": "Übersicht"
},
"party": {
"title": "Feste",
@@ -799,34 +777,6 @@
"type": "Festart",
"cost": "Kosten",
"date": "Datum"
},
"actions": {
"title": "Aktionen",
"description": "Mit diesen Aktionen kannst du Reputation gewinnen. Je öfter du dieselbe Aktion ausführst, desto weniger Reputation bringt sie (unabhängig von den Kosten).",
"action": "Aktion",
"cost": "Kosten",
"gain": "Reputation",
"timesUsed": "Bereits genutzt",
"execute": "Ausführen",
"running": "Läuft...",
"none": "Keine Aktionen verfügbar.",
"dailyLimit": "Heute noch verfügbar: {remaining} / {cap} Reputation (durch Aktionen).",
"cooldown": "Nächste Sozialstatus-Aktion in ca. {minutes} Minuten möglich.",
"success": "Aktion erfolgreich! Reputation +{gain}, Kosten {cost}.",
"successSimple": "Aktion erfolgreich!",
"type": {
"library_donation": "Spende für eine Bibliothek",
"orphanage_build": "Waisenhaus aufbauen",
"statue_build": "Statue errichten",
"hospital_donation": "Krankenhaus/Heilhaus stiften",
"school_funding": "Schule/Lehrstuhl finanzieren",
"well_build": "Brunnen/Wasserwerk bauen",
"bridge_build": "Straßen-/Brückenbau finanzieren",
"soup_kitchen": "Armenspeisung organisieren",
"patronage": "Kunst & Mäzenatentum",
"church_hospice": "Hospiz-/Kirchenspende",
"scholarships": "Stipendienfonds finanzieren"
}
}
},
"party": {
@@ -838,58 +788,6 @@
}
},
"church": {
"title": "Kirche",
"tabs": {
"current": "Aktuelle Positionen",
"available": "Verfügbare Positionen",
"applications": "Bewerbungen"
},
"current": {
"office": "Amt",
"region": "Region",
"holder": "Inhaber",
"supervisor": "Vorgesetzter",
"none": "Keine aktuellen Positionen vorhanden."
},
"available": {
"office": "Amt",
"region": "Region",
"supervisor": "Vorgesetzter",
"seats": "Verfügbare Plätze",
"action": "Aktion",
"apply": "Bewerben",
"applySuccess": "Bewerbung erfolgreich eingereicht.",
"applyError": "Fehler beim Einreichen der Bewerbung.",
"none": "Keine verfügbaren Positionen."
},
"applications": {
"office": "Amt",
"region": "Region",
"applicant": "Bewerber",
"date": "Datum",
"action": "Aktion",
"approve": "Annehmen",
"reject": "Ablehnen",
"approveSuccess": "Bewerbung angenommen.",
"rejectSuccess": "Bewerbung abgelehnt.",
"decideError": "Fehler bei der Entscheidung.",
"none": "Keine Bewerbungen vorhanden."
},
"offices": {
"village-priest": "Dorfgeistlicher",
"parish-priest": "Pfarrer",
"dean": "Dekan",
"archdeacon": "Erzdiakon",
"bishop": "Bischof",
"archbishop": "Erzbischof",
"cardinal": "Kardinal",
"pope": "Papst"
},
"application": {
"received": "Neue Bewerbung erhalten",
"approved": "Bewerbung angenommen",
"rejected": "Bewerbung abgelehnt"
},
"title": "Kirche",
"baptism": {
"title": "Taufen",
@@ -985,9 +883,6 @@
"success": "Erfolg",
"selectMeasure": "Maßnahme",
"perform": "Durchführen",
"errors": {
"tooClose": "Aktionen zu dicht hintereinander (maximal 1× pro 24 Stunden)."
},
"measures": {
"pill": "Tablette",
"doctor": "Arztbesuch",

View File

@@ -18,9 +18,8 @@
},
"notifications": {
"notify_election_created": "A new election has been scheduled.",
"notify_office_filled": "A political office has been filled.",
"production": {
"overproduction": "Overproduction: your production is {value} units above demand{branch_info}."
"overproduction": "Overproduction: your production is {value}% above demand."
},
"transport": {
"waiting": "Transport waiting"
@@ -101,12 +100,6 @@
"bad": "Bad",
"very_bad": "Very bad"
},
"healthview": {
"title": "Health",
"errors": {
"tooClose": "Actions too close together (max once per 24 hours)."
}
},
"moneyHistory": {
"title": "Money history",
"filter": "Filter",
@@ -123,7 +116,6 @@
"Production cost": "Production cost",
"Sell all products": "Sell all products",
"sell products": "Sell products",
"taxFromSaleProduct": "Tax from product sale: {product}",
"director starts production": "Director starts production",
"director payed out": "Director salary paid out",
"Buy storage (type: field)": "Bought storage (type: field)",
@@ -142,9 +134,6 @@
"new nobility title": "New title of nobility",
"partyOrder": "Party ordered",
"renovation_all": "House fully renovated",
"reputationAction": {
"school_funding": "Social status: funded a school/chair"
},
"health": {
"pill": "Health measure: pill",
"doctor": "Health measure: doctor",
@@ -174,8 +163,7 @@
},
"director": {
"income": "Income",
"incomeUpdated": "Salary has been successfully updated.",
"repairVehicles": "May repair vehicles"
"incomeUpdated": "Salary has been successfully updated."
},
"vehicles": {
"cargo_cart": "Cargo cart",
@@ -193,31 +181,8 @@
"storage": "Storage",
"transport": "Transport",
"taxes": "Taxes"
},
"production": {
"title": "Production",
"info": "Details about production in the branch.",
"selectProduct": "Select product",
"quantity": "Quantity",
"storageAvailable": "Free storage",
"cost": "Cost",
"duration": "Duration",
"revenue": "Revenue",
"start": "Start production",
"success": "Production started successfully!",
"error": "Error starting production.",
"minutes": "Minutes",
"ending": "Completed:",
"time": "Time",
"current": "Running productions",
"product": "Product",
"remainingTime": "Remaining time (seconds)",
"noProductions": "No running productions.",
"status": "Status",
"sleep": "Suspended",
"active": "Active"
},
"taxes": {
}
,"taxes": {
"title": "Taxes",
"loading": "Loading tax data...",
"loadingError": "Failed to load tax data: {error}",
@@ -230,80 +195,9 @@
}
}
},
"overview": {
"title": "Falukant - Overview",
"metadata": {
"title": "Personal",
"name": "Name",
"money": "Wealth",
"age": "Age",
"mainbranch": "Home City",
"nobleTitle": "Status"
},
"productions": {
"title": "Productions"
},
"stock": {
"title": "Stock"
},
"branches": {
"title": "Branches",
"level": {
"production": "Production",
"store": "Store",
"fullstack": "Production with Store"
}
},
"heirSelection": {
"title": "Character Lost - Select Heir",
"description": "Your character was lost due to an error. Please select an heir from your main region to continue.",
"loading": "Loading potential heirs...",
"noHeirs": "No suitable heirs were found.",
"select": "Select as Heir",
"error": "Error selecting heir."
}
},
"nobility": {
"cooldown": "You can only advance again on {date}."
},
"reputation": {
"title": "Reputation",
"overview": {
"title": "Overview",
"current": "Your current reputation"
},
"party": {
"title": "Parties"
},
"actions": {
"title": "Actions",
"description": "These actions let you gain reputation. The more often you repeat the same action, the less reputation it yields (independent of cost).",
"action": "Action",
"cost": "Cost",
"gain": "Reputation",
"timesUsed": "Times used",
"execute": "Execute",
"running": "Running...",
"none": "No actions available.",
"dailyLimit": "Available today: {remaining} / {cap} reputation (from actions).",
"cooldown": "Next social status action available in about {minutes} minutes.",
"success": "Action successful! Reputation +{gain}, cost {cost}.",
"successSimple": "Action successful!",
"type": {
"library_donation": "Donate to a library",
"orphanage_build": "Build an orphanage",
"statue_build": "Erect a statue",
"hospital_donation": "Found a hospital/infirmary",
"school_funding": "Fund a school/chair",
"well_build": "Build a well/waterworks",
"bridge_build": "Fund roads/bridges",
"soup_kitchen": "Organize a soup kitchen",
"patronage": "Arts & patronage",
"church_hospice": "Hospice/church donation",
"scholarships": "Fund scholarships"
}
}
},
"branchProduction": {
"storageAvailable": "Free storage"
},
@@ -377,76 +271,6 @@
"assessor": "Assessor"
}
},
"church": {
"title": "Church",
"tabs": {
"current": "Current Positions",
"available": "Available Positions",
"applications": "Applications"
},
"current": {
"office": "Office",
"region": "Region",
"holder": "Holder",
"supervisor": "Supervisor",
"none": "No current positions available."
},
"available": {
"office": "Office",
"region": "Region",
"supervisor": "Supervisor",
"seats": "Available Seats",
"action": "Action",
"apply": "Apply",
"applySuccess": "Application submitted successfully.",
"applyError": "Error submitting application.",
"none": "No available positions."
},
"applications": {
"office": "Office",
"region": "Region",
"applicant": "Applicant",
"date": "Date",
"action": "Action",
"approve": "Approve",
"reject": "Reject",
"approveSuccess": "Application approved.",
"rejectSuccess": "Application rejected.",
"decideError": "Error making decision.",
"none": "No applications available."
},
"offices": {
"village-priest": "Village Priest",
"parish-priest": "Parish Priest",
"dean": "Dean",
"archdeacon": "Archdeacon",
"bishop": "Bishop",
"archbishop": "Archbishop",
"cardinal": "Cardinal",
"pope": "Pope"
},
"application": {
"received": "New application received",
"approved": "Application approved",
"rejected": "Application rejected"
},
"baptism": {
"title": "Baptism",
"table": {
"name": "First Name",
"gender": "Gender",
"age": "Age",
"baptise": "Baptize (50)",
"newName": "Suggest Name"
},
"gender": {
"male": "Boy",
"female": "Girl"
},
"success": "The child has been baptized.",
"error": "The child could not be baptized."
}
},
"family": {
"children": {
"title": "Children",