diff --git a/src/assets/help/de_DE/empire.md b/src/assets/help/de_DE/empire.md index e82848a8..8edd8295 100644 --- a/src/assets/help/de_DE/empire.md +++ b/src/assets/help/de_DE/empire.md @@ -1,4 +1,4 @@ -The **Empire view** gives you a complete overview of your plans and their combined production within an empire. Here, you can also adjust your faction and permits, since both affect your production bonuses. Plans can be assigned to an empire in the **Management view**. +Die Imperium-Übersicht zeigt eine komplette Übersicht aller Pläne und ihrer kombinierten Produktion in diesem Imperium. Here, you can also adjust your faction and permits, since both affect your production bonuses. Plans can be assigned to an empire in the **Management view**. In addition to tracking production, the empire automatically calculates your **daily profit, costs** (including materials, workforce, and degradation), and total **revenue** based on your personal exchange preferences. These figures aren’t just a simple sum of your plans—they use weighted prices that take both production and consumption into account across the entire empire. diff --git a/src/assets/help/de_DE/planet_search.md b/src/assets/help/de_DE/planet_search.md index a9d410f6..999ebf17 100644 --- a/src/assets/help/de_DE/planet_search.md +++ b/src/assets/help/de_DE/planet_search.md @@ -1,5 +1,5 @@ -The **Planet Search** lets you quickly find planets by name or ID, or use the Advanced Search to narrow results with multiple parameters. +Mit der **Planeten-Suche** kannst du Planeten schnell mit Namen oder ID suchen. Außerdem erlaubt die Erweiterte Suche das Finden von Planeten mit vielfältigen Parametern. -With Advanced Search, you can look for up to four specific materials, filter by COGC programs, or select planets with certain features such as fertility or a warehouse. You can also search by distance from a chosen system or by environment parameters like surface type, gravity, temperature, or pressure. +Mit der erweiterten Suche suchst du nach speziellen Materialien, dem COGC-Programm oder bestimmte Umgebungskriterien der Planeten wie Fruchtbarkeit oder einem Warenhaus. Du kannst außerdem unter Berücksichtigung der Distanz zu einem gewählten System oder Umgebungsparametern wie Oberfläche, Gravitation, Temperatur und Druck suchen. -Planet Search is also the starting point for creating a new plan: simply find the planet you’re interested in and begin your plan from there. +Die Planeten-Suche ist der Startpunkt um neue Pläne zu erstellen. Suche einfach nach dem Plan, der dich interessiert und starte von dort. diff --git a/src/assets/help/es_ES/empire.md b/src/assets/help/es_ES/empire.md index e82848a8..8cbdd5f3 100644 --- a/src/assets/help/es_ES/empire.md +++ b/src/assets/help/es_ES/empire.md @@ -2,6 +2,6 @@ The **Empire view** gives you a complete overview of your plans and their combin In addition to tracking production, the empire automatically calculates your **daily profit, costs** (including materials, workforce, and degradation), and total **revenue** based on your personal exchange preferences. These figures aren’t just a simple sum of your plans—they use weighted prices that take both production and consumption into account across the entire empire. -The **Empire Material I/O** view shows how much of each material your empire produces and where. You can filter consumables in or out, or focus purely on load balancing, comparing production and consumption at a glance. +La vista de **Material del Imperio I/O** muestra cuánto de cada material tu imperio produce y dónde. Puede filtrar los consumibles dentro o fuera, o centrarse exclusivamente en el balance de carga, comparando producción y consumo de un vistazo. -Finally, the **Empire Analysis** provides charts that break down your profits by plans and materials. You can also explore what your empire net produces or consumes, as well as which materials are produced or consumed exclusively. +Finally, the **Empire Analysis** provides charts that break down your profits by plans and materials. También puede explorar lo que su red imperial produce o consume, así como qué materiales se producen o consumen exclusivamente. diff --git a/src/locales/de_DE/account.json b/src/locales/de_DE/account.json new file mode 100644 index 00000000..8d9d165d --- /dev/null +++ b/src/locales/de_DE/account.json @@ -0,0 +1,81 @@ +{ + "components": { + "login": { + "title": "Anmelden", + "error": "Fehler beim Anmelden. Bitte überprüfe deinen Benutzernamen und dein Passwort.", + "buttons": { + "login": "Anmelden" + }, + "form": { + "username": "Benutzername", + "password": "Passwort" + }, + "tos": "Durch die Verwendung von PRUNplanner erklärst du dich mit den {tos_link} einverstanden.", + "tos_link": "Nutzungsbedingungen", + "forgot": "Passwort vergessen? {forgot_link} anfordern.", + "forgot_link": "Passwort-Zurücksetzen" + }, + "registration": { + "title": "Kontoinformationen", + "tos": "PRUNplanner kann kostenlos verwendet werden. Mit der Erstellung eines Kontos bestätigst und stimmst du den {tos_link} zu.", + "tos_link": "Nutzungsbedingungen", + "result": { + "ok_header": "Willkommen {username}!", + "ok_message": "Registrierung erfolgreich. Du kannst dich jetzt bei PRUNplanner anmelden.", + "error": "Fehler während der Registrierung." + }, + "buttons": { + "register": "Konto erstellen" + }, + "form": { + "username": "Benutzername", + "username_info": "Muss mindestens 3 Zeichen lang sein. Kann keine Leerzeichen enthalten.", + "password": "Passwort", + "password_info": "Muss mindestens 8 Zeichen lang sein.", + "email": "E-Mail", + "email_placeholder": "Nicht verpflichtend, aber empfohlen.", + "email_info": "Nicht verpflichtend. Erhöht die Sicherheit deines Kontos.", + "security_question": "Sicherheitsfrage", + "question": "Gib den Namen des Planeten {planet} ein. Um ihn zu finden, öffne ein neues Fenster in Prosperous Universe mit dem Befehl {command}. Du siehst den Planetennamen unter 'Name' in den Planeten-Informationen", + "planet_name": "Name" + } + }, + "password_reset": { + "title": "Passwort zurücksetzen", + "info": "Bitte gib den an deine E-Mail gesendeten Code zusammen mit deinem neuen Passwort sein.", + "buttons": { + "send": "Passwort zurücksetzen" + }, + "form": { + "email": "E-Mail", + "code": "Code", + "password": "Passwort", + "password_info": "Muss mindestens 8 Zeichen lang sein." + } + }, + "request_password_reset": { + "title": "Anfrage zum Zurücksetzen des Passworts", + "info": "Gib deine E-Mail-Adresse ein, die du zuvor mit deinem PRUNplanner Konto verifiziert hast. Wenn wir sie erkennen, senden wir dir einen Code zum Zurücksetzen des Passworts zu.", + "form": { + "email_placeholder": "E-Mail-Adresse" + }, + "buttons": { + "send": "Passwort-Reset anfordern" + } + }, + "verify_email": { + "title": "E-Mail-Verifizierung", + "info": "Bitte gib den Verifizierungscode ein, den du per E-Mail erhalten hast. Prüfe ggf. deinen Spam-Ordner.", + "buttons": { + "send": "E-Mail-Adresse bestätigen" + }, + "form": { + "code_placeholder": "Verifizierungscode" + }, + "result": { + "ok": "E-Mail-Adresse bestätigt.", + "error": "Ungültiger Code oder bereits verifiziert." + } + } + } +} diff --git a/src/locales/de_DE/api_keys.json b/src/locales/de_DE/api_keys.json index 9d83a352..283517bb 100644 --- a/src/locales/de_DE/api_keys.json +++ b/src/locales/de_DE/api_keys.json @@ -3,10 +3,10 @@ "title": "API Schlüssel", "info": { "description": { - "p1": "The {link} provides programmatic access to all your planning data, ingame metadata (buildings, recipes, materials) and calculated market metrics like VWAP. While public endpoints remain open for community use, access to private planning data - including your plan configurations - require secure authentication.", - "p2": "By utilizing these endpoints, you can synchronize your planning operations with external spreadsheets, custom dashboards, or even optimization algorithms.", + "p1": "Der {link} bietet programmatischen Zugriff auf alle deine Planungsdaten, Spiel-Metadaten (Gebäude, Aufträge, Materialien) und berechnete Marktmetriken wie VWAP. Während öffentliche Endpunkte für die Community offen bleiben, erfordert der Zugriff auf private Planungsdaten - einschließlich deiner Plankonfigurationen - eine sichere Authentifizierung.", + "p2": "Mithilfe dieser Endpunkte kannst du deine Planungsdaten mit externen Tabellen, eigenen Dashboards oder sogar Optimierungsalgorithmen synchronisieren.", "link": "PRUNplanner REST API", - "warning": "API keys grant full access to your account data and remain valid indefinitely. Treat these credentials as sensitive as your password. Never commit keys to public repositories or share them with unverified third-party services. If a key is compromised, revoke it immediately and generate a replacement." + "warning": "API-Schlüssel gewähren vollen Zugriff auf deine Daten und bleiben unbegrenzt gültig. Diese Zugangsdaten sollten so sensibel wie dein Passwort behandelt werden. Übertrage niemals Schlüssel in öffentliche Repositories oder teile sie mit nicht überprüften Drittanbieterdiensten. Wenn ein Schlüssel kompromittiert ist, widerrufe ihn sofort und erzeuge einen Ersatz." } }, "manage": { @@ -23,7 +23,7 @@ } }, "implementation": { - "title": "Autorisierungs-Implementierung", + "title": "Autorisierung-Implementierung", "link": "REST API Referenz anzeigen →" }, "create": { diff --git a/src/locales/de_DE/common.json b/src/locales/de_DE/common.json index 1bace41c..00d66200 100644 --- a/src/locales/de_DE/common.json +++ b/src/locales/de_DE/common.json @@ -5,7 +5,7 @@ "empire": "Empire", "planet_search": "Planeten Suchen", "management": "Verwaltung", - "exchanges": "Handelskammern", + "exchanges": "Marktplätze", "tools": "Werkzeuge", "tools_short": "Tool", "market_exploration": "Marktübersicht", @@ -33,6 +33,7 @@ "buttons": { "create": "Erstellen", "save": "Speichern", + "save_as": "Speichern unter", "reload": "Aktualisieren", "show": "Anzeigen", "hide": "Verstecken", @@ -40,9 +41,24 @@ "search": "Suchen", "default": "Standard", "select_all": "Alles Auswählen", + "discard": "Verwerfen", "yes": "Ja", "no": "Nein", "delete": "Löschen", - "cancel": "Abbrechen" + "cancel": "Abbrechen", + "clone_plan": "Plan duplizieren", + "clone_complete": "Klonen abgeschlossen", + "copy": "Kopieren" + }, + "ui": { + "placeholder": { + "please_input": "Bitte eingeben", + "please_select": "Bitte auswählen", + "search": "Suchen" + }, + "select": { + "no_results": "Keine Ergebnisse", + "select_options": "Optionen wählen" + } } } diff --git a/src/locales/de_DE/empire.json b/src/locales/de_DE/empire.json index 5f37dc8c..626f864f 100644 --- a/src/locales/de_DE/empire.json +++ b/src/locales/de_DE/empire.json @@ -1,6 +1,6 @@ { "view_title": "Empire", - "switch_empire": "Switch Empire", + "switch_empire": "Imperium wechseln", "views": { "material_io": "Material I/O", "analysis": "Analyse", @@ -11,8 +11,8 @@ "form": { "name": "Name", "faction": "Fraktion", - "permits_total": "@:terms.permits_plural Total", - "permits_used": "@:terms.permits_plural Used" + "permits_total": "@:terms.permits_plural gesamt", + "permits_used": "@:terms.permits_plural benutzt" }, "sync_warning": { "title": "Unstimmigkeit erkannt:", @@ -36,7 +36,7 @@ "display": "Anzeige", "consumables": "Verbrauchsmaterialien", "all": "Alle", - "loadbalance": "Loadbalance" + "loadbalance": "Ladeausgleich" }, "analysis": { "profitable_plans": "Profitable Pläne", diff --git a/src/locales/de_DE/exchanges.json b/src/locales/de_DE/exchanges.json new file mode 100644 index 00000000..dca64058 --- /dev/null +++ b/src/locales/de_DE/exchanges.json @@ -0,0 +1,55 @@ +{ + "view_title": "Marktplätze", + "title": "Marktplätze", + "errors": { + "title": "Keine Präferenzen", + "message": "Du hast keine Marktplatz-Präferenzen. Gehe zur Verwaltungsseite und erstelle deine erste." + }, + "buttons": { + "csv_import_export": "@:exchanges.components.csv_import_export.title", + "save": "@:common.buttons.save", + "reload": "@:common.buttons.reload" + }, + "configuration": { + "form": { + "preference_name": "Präferenzname", + "empire_preferences": "Imperium-Präferenz", + "exchange": "Marktplatz", + "ticker": "@:terms.material_ticker" + } + }, + "preference_type": { + "BUY": "KAUF", + "SELL": "VERKAUF", + "BOTH": "BEIDES" + }, + "components": { + "ticker": { + "no_data": "Keine @:terms.material_ticker Präferenzen konfiguriert", + "material_placeholder": "@:terms.materials" + }, + "exchanges": { + "no_data": "Keine @:terms.exchanges Präferenzen konfiguriert" + }, + "planet_preferences": { + "title": "Planeten-Präferenzen", + "form": { + "exchange": "@:terms.exchanges", + "ticker": "@:terms.material_ticker" + }, + "table": { + "planet": "@:terms.planets", + "exchange_preference": "@:terms.exchanges Präferenzen", + "ticker_preference": "@:terms.material_ticker Präferenzen" + } + }, + "csv_import_export": { + "title": "CSV-Import / Export", + "warning": "Warnung: Der Import löscht alle bestehenden Präferenzen und importiert die neuen. Du musst die importierten Präferenzen nach dem CSV-Upload speichern oder den Neuladen-Button verwenden, um sie zu verwerfen.", + "buttons": { + "import": "Präferenzen Importieren", + "export": "Präferenzen Exportieren" + } + } + } +} diff --git a/src/locales/de_DE/fio.json b/src/locales/de_DE/fio.json new file mode 100644 index 00000000..5f7af3f2 --- /dev/null +++ b/src/locales/de_DE/fio.json @@ -0,0 +1,49 @@ +{ + "burn": { + "view_title": "FIO Verbrauch", + "title": "FIO Verbrauch:", + "fio_last_update": "FIO Datenaktualisierung: {last_updated}", + "form": { + "empire": "@:terms.empire", + "burn_thresholds": "Verbrauch Grenzwerte", + "red": "Rot", + "yellow": "Gelb" + }, + "components": { + "overview": { + "title": "Plan-Verbrauch-Übersicht", + "table": { + "plan": "@:terms.plan", + "planet": "@:terms.planets", + "burn": "Verbrauch" + } + }, + "plans": { + "xit_title": "XIT Nachschub: {plan_name}", + "table": { + "ticker": "@:terms.material_ticker", + "consumption": "@:terms.consumption", + "production": "@:terms.production", + "delta": "@:terms.delta", + "stock": "@:terms.stock", + "plan": "@:terms.plan", + "burn": "Verbrauch", + "exhaustion": "Erschöpft" + } + } + } + }, + "repair": { + "view_title": "FIO Reparieren", + "title": "FIO Reparieren", + "fio_last_update": "FIO Datenaktualisierung: {last_updated}", + "table": { + "title": "@:terms.planet_plural", + "planet": "@:terms.planets", + "buildings": "@:terms.buildings_plural", + "avg_condition": "⌀ Zustand", + "min_condition": "Min. Zustand", + "repair_age": "Reparatur-Alter" + } + } +} diff --git a/src/locales/de_DE/game.json b/src/locales/de_DE/game.json index 0676c35a..af3a51f7 100644 --- a/src/locales/de_DE/game.json +++ b/src/locales/de_DE/game.json @@ -4,6 +4,21 @@ "PLANETARY": "Planetar", "PRODUCTION": "Produktion" }, + "workforce_type": { + "pioneer": "Pioniere", + "settler": "Siedler", + "technician": "Techniker", + "engineer": "Ingenieur", + "scientist": "Wissenschaftler" + }, + "efficiency_type": { + "WORKFORCE": "Belegschaft", + "HQ": "Firmensitz", + "EXPERT": "Experten", + "COGC": "COGC", + "FERTILITY": "Fruchtbarkeit", + "FACTION": "Fraktion" + }, "expertise": { "AGRICULTURE": "Landwirtschaft", "CHEMISTRY": "Chemie", @@ -51,11 +66,47 @@ "WORKFORCE_ENGINEERS": "ING", "WORKFORCE_SCIENTISTS": "WISS" }, + "material_category": { + "agricultural_products": "Landwirtschaftliche Erzeugnisse", + "alloys": "Legierungen", + "chemicals": "Chemikalien", + "construction_materials": "Baumaterialien", + "construction_parts": "Bauteile", + "construction_prefabs": "Einheitsbausätze", + "consumable_bundles": "Konsumgüterpakete", + "consumables_(basic)": "Konsumgüter (Basis)", + "consumables_(luxury)": "Komsumgüter (Luxus)", + "drones": "Drohnen", + "electronic_devices": "Elektronische Geräte", + "electronic_parts": "Elektronische Teile", + "electronic_pieces": "Elektronische Materialien", + "electronic_systems": "Elektronische Systeme", + "elements": "Elemente", + "energy_systems": "Energiesysteme", + "fuels": "Treibstoffe", + "gases": "Gase", + "liquids": "Flüssigkeiten", + "medical_equipment": "Medizinische Ausstattung", + "metals": "Metalle", + "minerals": "Mineralien", + "ores": "Erze", + "plastics": "Plastik", + "ship_engines": "Schiffsantriebe", + "ship_kits": "Schiffsbausätze", + "ship_parts": "Schiffsteile", + "ship_shields": "Schiffsschilde", + "software_components": "Software-Komponenten", + "software_systems": "Software-Systeme", + "software_tools": "Software-Tools", + "textiles": "Textilien", + "unit_prefabs": "Bauteile", + "utility": "Utility" + }, "upkeep": { - "safety": "Safety", - "health": "Health", - "comfort": "Comfort", - "culture": "Culture", - "education": "Education" + "safety": "Sicherheit", + "health": "Gesundheit", + "comfort": "Komfort", + "culture": "Kultur", + "education": "Bildung" } } diff --git a/src/locales/de_DE/government.json b/src/locales/de_DE/government.json new file mode 100644 index 00000000..7b72e71a --- /dev/null +++ b/src/locales/de_DE/government.json @@ -0,0 +1,16 @@ +{ + "popr_button": { + "no_data": "Planet {planet_id} hat keine Bevölkerungsdaten", + "buttons": { + "no_popr": "Kein POPR" + }, + "table": { + "total_population": "Gesamtbevölkerung", + "free_population": "Freie Bevölkerung", + "free_population_pct": "Freie Bevölkerung %", + "unfilled_jobs": "Ungefüllte Jobs", + "plan_need": "@:terms.plan Bedarf", + "plan_check": "@:terms.plan Check" + } + } +} diff --git a/src/locales/de_DE/help.json b/src/locales/de_DE/help.json index 449b9f71..dee22ca8 100644 --- a/src/locales/de_DE/help.json +++ b/src/locales/de_DE/help.json @@ -5,71 +5,71 @@ "title": "Änderungsprotokoll" }, "tutorial": { - "intro": "PRUNplanner helps you design bases, organize empires, and calculate profits — without wasting in-game resources. It mirrors nearly every aspect of Prosperous Universe so you can plan smarter and play more confidently." + "intro": "PRUNplanner hilft dir, Basen zu entwerfen, Imperien zu organisieren und Profite zu kalkulieren ohne Ressourcen im Spiel zu verwenden. Es spiegelt fast jeden Aspekt von Prosperous Universe, damit du intelligenter planen und selbstbewusster spielen kannst." }, "getting_started": { "title": "Erste Schritte", - "image_label": "Management", + "image_label": "Verwaltung", "l1": { - "title": "Create an Empire in {link}:", - "link": "Management", - "p": "By default, you'll already have one. But you can add more for different factions or regions. Assign a name and faction, and save." + "title": "Erstelle ein Imperium in {link}:", + "link": "Verwaltung", + "p": "Standardmäßig hast du bereits eines. Du kannst jederzeit mehr für weitere Fraktionen oder Regionen erstellen. Ordne einen Namen sowie die Fraktion zu und speichere." }, "l2": { - "title": "Setup an {link}:", - "link": "Exchange", - "p": "Go into Management and create your exchange. Switch to the Exchanges view to modify it. For most players, set it to Both (buying and selling) and choose the exchange your bases will use (e.g., CI1 for Benten). Save it." + "title": "Einen {link} erstellen:", + "link": "Marktplatz", + "p": "Gehe zur Verwaltung und erstelle deinen ersten Marktplatz. Wechsel zum Imperium, um ihn zu ändern. Für die meisten Spieler ist es ausreichend die Präferenz auf Beides (kaufen und verkaufen) zu setzen und den Marktplatz auszuwählen, den die Pläne benutzen sollen (z.B. CI1 für Benten). Speichere." }, "l3": { - "title": "Search for a {link}:", - "link": "Planet", - "p": "Use the planet search to filter by resources, programs, or proximity to a CX. Select your target planet and view its modifiers, extraction rates, and infrastructure." + "title": "Nach einem {link} suchen:", + "link": "Planeten", + "p": "Nutze die Planetensuche, um nach Ressourcen, COGC Programmen oder der nähe zu einem Handelsplatz zu suchen. Wähle deinen Zielplaneten, siehe seine Modifikatoren, Extraktionsraten und vorhandene Infrastruktur an." }, "l4": { - "title": "Create a Plan:", - "p": "Choose your Empire, give it a name, then add buildings. For example: add a Refinery, set a production order, and save the plan. You can modify all aspects like COGC, expert bonuses and dive into optimizations." + "title": "Erstelle einen Plan:", + "p": "Wähle dein Imperium, gib ihm einen Namen und füge dann Gebäude hinzu. Zum Beispiel: Füge eine Refinery hinzu, lege einen Produktionsauftrag fest und speichere den Plan. Sie können alle Aspekte wie COGC, Expertenboni ändern und in Optimierungen eintauchen." }, "l5": { - "title": "Check ROI:", - "p": "Once set up, you'll see daily profits, inputs and outputs, and return on investment for each production line. Adjust, experiment, and optimize." + "title": "ROI prüfen:", + "p": "Wenn du alles eingerichtet hast, siehst du deine täglichen Profite, Inputs, Outputs und den Return of Invest für jede Produktionslinie. Verändere, experimentiere und optimiere sie." } }, "core_concepts": { - "title": "Core Concepts", + "title": "Grundkonzepte", "p1": { - "title": "Plans", - "p": "A plan represents a single base: its buildings, productions, and bonuses. Create a plan by choosing a planet, placing buildings, and assigning it to an Empire with a CX preference." + "title": "Pläne", + "p": "Ein Plan repräsentiert eine einzelne Basis mit Gebäuden, Produktionen und Boni. Erstelle einen Plan, nachdem du den Planeten gesucht hast, wähle Gebäude und weise sie deinem Imperium mit seiner Marktplatz-Präferenz zu." }, "p2": { - "title": "Empires", - "p": "An Empire is a container of multiple plans - essentially your entire network of bases. Empires keep your supply chains organized and allow you to manage multiple bases together." + "title": "Imperien", + "p": "Ein Imperium funktioniert wie ein Container für mehrere Pläne - im Wesentlichen dein Netzwerk von Basen. Imperien halten deine Lieferketten organisiert und erlauben dir, mehrere Basen zusammen zu verwalten." }, "p3": { - "title": "Exchanges", - "p": "Exchange settings define how prices are calculated. Each Empire uses one Exchange for consistency. You can reuse the same Exchange setup across empires if needed." + "title": "Marktplätze", + "p": "Marktplatz-Präferenzen definieren wie Preise kalkuliert werden. Jedes Imperium kann einen Marktplatz benutzen. Du kannst die selbe Marktplatz-Präferenz natürlich für mehrere Imperien verwenden." } }, "key_features": { - "title": "Key Features", + "title": "Hauptfunktionen", "p1": { - "title": "Base Simulation", - "p": "Design and test bases without spending resources. From habitation to production to planet-specific modifiers and bonuses — PRUNplanner simulates it all." + "title": "Plan-Simulation", + "p": "Designe und teste Basen ohne Ressourcen im Spiel zu verwenden. Von Wohngebäuden bis zu Planten-spezifischen Umweltfaktoren - PRUNplanner simuliert alles für dich." }, "p2": { - "title": "Empire Planning", - "p": "Manage your empire across multiple bases and supply chains. Keep your materials flowing, prevent bottlenecks, and run smoothly at scale. Always see what is going on and where the next best expansion starts." + "title": "Imperiale Planung", + "p": "Verwalte dein Imperium über mehrere Basen und Lieferketten hinweg. Halte deine Materialien am laufen, verhindere Engpässe und behalte alles reibungslos auf großer Skala. Du siehst immer was passiert und wo deine nächstbeste Erweiterung beginnt." }, "p3": { - "title": "Game Data", - "p": "Market information is integrated directly from FIO, the community API. Plan expansions, check ROI, and make informed trade decisions. Explore historic market data or let PRUNplanner calculate production or resource extraction ROIs." + "title": "Spieldaten", + "p": "Marktinformationen sind direkt über FIO, die Community-Schnittstelle, integriert. Plane deiner nächste Erweiterung, prüfe den ROI und triff fundierte Handelsentscheidungen. Du kannst historische Marktplatz-Daten ansehen und PRUNplanner deine Produktions- oder Ressourcen-Extraktion-ROIs kalkulieren lassen." }, "p4": { - "title": "Burn & Repair", - "p": "Track consumables and building wear. Avoid shortages and downtime by seeing exactly what your colony needs and when it needs it." + "title": "Verbrennen & Reparieren", + "p": "Verfolge Verbrauchsmaterialien für deine Belegschaft und den Verfall deiner Gebäude. Du kannst Engpässe und Ausfallzeiten verhindern, weil du genau siehst, was und wann deine Basen etwas benötigen." }, "p5": { - "title": "A Wealth of Additional Tools", - "p": "Dive into historical prices, optimize habitation layouts, estimate visitation frequencies, and fine-tune production efficiency. PRUNplanner is packed with utilities to give you the edge." + "title": "So viele weitere Werkzeuge", + "p": "PRUNplanner ist voll von weiteren Hilfsmitteln. Verschaffe dir einen Überblick zu historischen Marktentwicklungen, optimiere Gebäude für deine Belegschaft, ermittle wie oft du deine Basis anfliegen musst und wie du die höchste Produktionseffizienz erzielst." } } } diff --git a/src/locales/de_DE/homepage.json b/src/locales/de_DE/homepage.json index 8255ec55..ceeea09f 100644 --- a/src/locales/de_DE/homepage.json +++ b/src/locales/de_DE/homepage.json @@ -1,68 +1,68 @@ { "images": { - "section_title": "Command Your Empire from Anywhere", - "section_lead": "Monitor bases, manage production, and control your plans effortlessly. With intuitive, powerful tools, you can strategize, expand, and outsmart your rivals wherever you are.", - "empire": "Empire: Track production, supply chains, and growth across all your planets.", - "plan": "Plan: Strategize and analyze without spending in-game resources.", - "management": "Management: Coordinate plans, expansions, and your next moves effortlessly.", - "exchanges": "Exchanges: Optimize in-game pricing and trading strategies.", - "market_exploration": "Exploration: Analyze years of market data for smarter insights.", - "planet_search": "Search: Find the exact planets and resources you need instantly." + "section_title": "Verwalte dein Imperium von Überall", + "section_lead": "Überwache deine Basen, verwalte Produktionen und steuere deine Pläne mühelos. Mit intuitiven und leistungsstarken Tools kannst du Strategien finden, Erweiterungen planen und deine Rivalen mühelos ausspielen.", + "empire": "Imperium: Verfolge Produktionen, Lieferketten und dein Wachstum über alle Planeten hinweg.", + "plan": "Pläne: Plane und analysiere ohne im Spiel Geld ausgeben zu müssen.", + "management": "Verwaltung: Koordiniere Pläne, Erweiterungen und deinen nächsten Schritt mühelos.", + "exchanges": "Warenbörsen: Optimiere deine Preis- und Handelsstrategien.", + "market_exploration": "Entdecken: Analysiere jahrelange Marktdaten und gewinne intelligente Erkenntnisse.", + "planet_search": "Planeten Suche: Finde den besten Planeten für deinen Bedarf." }, "hero": { - "title": "Plan your empire", - "subtitle": "Rule Prosperous Universe", - "lead": "Say goodbye to cumbersome spreadsheets and hello to seamless management of your in-game assets." + "title": "Plane dein Imperium", + "subtitle": "Beherrsche Prosperous Universe", + "lead": "Verabschiede dich von nervigen Tabellen und erlebe, wie einfach die Verwaltung deines Spiel-Vermögens sein kann." }, "features": { - "section_title": "Powerful Features, Free For Everyone", - "section_lead": "Streamline your planning and resource management, ensure you stay ahead in the galaxy.", + "section_title": "Mächtige Funktionen, Kostenlos für alle", + "section_lead": "Vereinfache deine Pläne und ihre Verwaltung, bleibe der Galaxie einen Schritt voraus.", "simulation": { - "label": "Base Simulation", - "text": "PRUNplanner lets you design and try new bases without spending in-game resources. It mirrors all aspects of a base, from habitation and production buildings to COGC programs and planet resources." + "label": "Plan-Simulation", + "text": "PRUNplanner erlaubt dir neue Basen zu planen ohne Ressourcen im Spiel verwenden zu müssen. Es spiegelt alle Aspekte von Gebäuden für deine Belegschaft, Produktionsstätten, COGC-Programmen und Planeten." }, "planning": { - "label": "Empire Planning", - "text": "Effortlessly organize and manage your entire empire. With PRUNplanner, you can plan across multiple bases and complex supply chains, ensuring your material flows remain on schedule and your empire runs smoothly." + "label": "Imperiale Planung", + "text": "Organisiere und verwalte dein Imperium so einfach wie noch nie. Mit PRUNplanner kannst du Pläne für mehrere Planeten erstellen, komplizierte Lieferketten plane und sicherstellen, dass deine Materialströme effizient bleiben." }, "gamedata": { - "label": "Game Data", - "text": "Stay ahead with up-to-date market information integrated directly from the game's community API (FIO). Make informed planning and expansion decisions based on actual markets and the best ROI." + "label": "Spieldaten", + "text": "Sei Dank der Community-Schnittstelle (FIO) mit aktuellen Marktinformationen der Warenbörsen anderen einen Schritt voraus. Du kannst Entscheidungen direkt auf Basis der aktuellen Marktlage und dem besten ROI treffen." }, "burn_repair": { - "label": "Burn & Repair", - "text": "Prevent shortages and bottlenecks with detailed management tools. PRUNplanner tracks your resources and consumables, ensuring you have everything you need right when you need it, keeping your operations seamless." + "label": "Verbrauch & Instandhaltung", + "text": "Verhindere Engpässe mit detaillierten Verwaltungsmöglichkeiten. PRUNplanner verfolgt deine Produktionsressourcen und die Belegschaftsversorgung, um sicherzugehen, dass du immer alles vorhanden hast, was du benötigst." }, "market_exploration": { "label": "Marktübersicht", - "text": "Explore historic market trends from past years and uncover how markets truly behave. Spot exciting opportunities, and effortlessly calculate Return on Investment for every recipe and resource — giving you the strategic edge you need for smarter planning." + "text": "Entdecke historische Markttrends der vergangenen Jahre und erfahre, wie Märkte sich wirklich bewegen. Dadurch findest du neue Chancen und kannst ganz einfach ausrechnen, ob sich Investitionen einen Auftrag oder die Produktion eines neuen Materials lohnt. Vorsprung durch intelligente Planung." }, "tools": { - "label": "A Wealth of Additional Tools", - "text": "Explore material prices from now to years past, know the optimal times for repairing production buildings, monitor expert spawn times, and optimize habitation buildings for minimal area or cost. PRUNplanner offers these features and many more." + "label": "So viele weitere Werkzeuge", + "text": "Entdecke Materialpreise von heute bis Jahre zurück, finde die optimalen Zeitpunkte um Gebäude zu reparieren, wann Produktionsexperten verfügbar werden und optimiere Unterkünfte automatisch für minimale Flächennutzung oder geringste Kosten. PRUNplanner bietet all das und noch viel mehr." } }, "concepts": { - "section_title": "Core Concepts", - "section_lead": "PRUNplanner consists of three main components that allow you to plan and manage your Prosperous Universe empire.", + "section_title": "Grundkonzepte", + "section_lead": "PRUNplanner besteht aus drei Hauptkomponenten, mit denen du dein Prosperous Universe Imperium planen und verwalten kannst.", "plans": { - "label": "Plans", - "text": "Plans are the backbone of what you do in PRUNplanner. They consist of all buildings, productions and bonuses of a base you can put down in Prosperous Universe. You can create new plans by searching for the planet you would like to create a base for. Also, a plan should be assigned a CX Exchange preference, as well as be assigned to an Empire." + "label": "Pläne", + "text": "Pläne sind das Rückgrat dessen, was du in PRUNplanner tust. Sie bestehen aus allen Unterkünften, Produktionsgebäuden und Bonus-Kalkulationen aus Proserous Universe. Du kannst neue Pläne einfach erstellen, indem du nach Planeten suchst, auf denen du eine neue Basis bauen möchtest. Jeder Plan sollte einer Warenbörse zugeordnet sein, damit deine Präferenz für Preisberechnungen genutzt wird." }, "empires": { - "label": "Empires", - "text": "An Empire is a collection of plans (e.g. all the bases you currently have settled in Prosperous Universe, or that you would like to settle, all interconnected together). Each empire is like a container that consists of multiple plans. Additionally, an exchange preference can be assigned to each Empire." + "label": "Imperien", + "text": "Ein Imperium ist die Sammlung aller Pläne (z.B. aller Basen, die du aktuell in Prosperous Universe besitzt oder noch bauen möchtest). Jedes Imperium funktioniert wie ein Container für eine Vielzahl an Plänen. Zusätzlich kannst du deine präferierte Warenbörse hinterlegen." }, "exchanges": { "label": "Marktplätze", - "text": "The Exchange Settings allow you to define market preferences for the pricing of materials. Each preference can be used in multiple Empires. However, each Empire can only have a single Exchange preference assigned to it. This ensures that prices are properly calculated for all individual plans that are part of the Empire." + "text": "Die Warenbörsen-Einstellungen erlauben dir zu definieren, welcher Marktplatz für die Preisberechnung von Materialien genutzt werden soll. Jede Einstellung kann in mehreren Imperien verwendet werden, aber jedes Imperium ist einem Marktplatz zugeordnet. Dies stellt sicher, dass alle Preise für jeden Plan korrekt berechnet werden." } }, "tools": { "section_title": "Unterstützt von Tools, die wir gerne verwenden" }, "open_source": { - "section_title": "Kostenlos & Open Source", + "section_title": "Kostenlos & Open Source", "section_lead": "PRUNplanner ist völlig frei zu verwenden und {link}.", "prompt": "Du magst es? Wir würden uns freuen, wenn du mitmachst!", "link_open_source": "Open Source" diff --git a/src/locales/de_DE/hq_upgrade_calculator.json b/src/locales/de_DE/hq_upgrade_calculator.json index 542176e9..8085de5d 100644 --- a/src/locales/de_DE/hq_upgrade_calculator.json +++ b/src/locales/de_DE/hq_upgrade_calculator.json @@ -1,25 +1,25 @@ { - "view_title": "HQ", - "title": "HQ Upgrade Calculator", + "view_title": "Firmensitz", + "title": "Firmensitz Kalkulator", "form": { - "from_level": "From HQ Level", - "to_level": "To HQ Level", - "cx_preference": "@:terms.cx Preference", - "show_locations": "Show Locations" + "from_level": "Von Level", + "to_level": "Zu Level", + "cx_preference": "@:terms.cx Präferenz", + "show_locations": "Standorte anzeigen" }, "cost": { - "total_cost": "Total @:terms.cost", - "total_weight": "Total @:terms.weight", - "total_volume": "Total @:terms.volume" + "total_cost": "Gesamt @:terms.cost", + "total_weight": "Gesamt @:terms.weight", + "total_volume": "Gesamt @:terms.volume" }, "table": { "material": "@:terms.materials", "amount": "@:terms.amount", "storage": "@:terms.storage", - "override_stock": "Override Stock", - "required": "Required", - "cost_unit": "Cost / Unit", - "cost_total": "Total Cost", - "storage_locations": "@:terms.storage Locations" + "override_stock": "Bestand überschreiben", + "required": "Benötigt", + "cost_unit": "Kosten / Einheit", + "cost_total": "Gesamtkosten", + "storage_locations": "@:terms.storage Standorte" } } diff --git a/src/locales/de_DE/management.json b/src/locales/de_DE/management.json index 1952ec07..41767fcd 100644 --- a/src/locales/de_DE/management.json +++ b/src/locales/de_DE/management.json @@ -2,11 +2,11 @@ "view_title": "Verwaltung", "title": "Verwaltung", "empire": { - "title": "Empire Configuration", - "description": "Removing empires will not delete any associated plans — they will simply become unassigned. You can create edit existing empires in the Empire View. To ensure correct plan efficiency calculations, make sure each empire has your Faction and the appropriate Permits.", + "title": "Imperium-Konfiguration", + "description": "Das Entfernen eines Imperiums löscht keine zugehörigen Pläne - sie sind diesem Imperium einfach nicht mehr zugewiesen. Du kannst bestehende Imperium auf der Imperium-Seite verwalten. Um die korrekte Plan-Kalkulation sicherzustellen, muss jedes Imperium die korrekte Fraktion und Flächen zugewiesen bekommen.", "buttons": { - "update_cx": "Update CX Assignments", - "new_empire": "New Empire" + "update_cx": "Handelskammer-Zuweisungen aktualisieren", + "new_empire": "Neues Imperium" }, "form": { "empire_name": "@:terms.empire Name", @@ -19,38 +19,38 @@ "faction": "@:terms.faction", "permits": "@:terms.permits", "plans": "@:terms.plans_plural", - "cx": "CX", - "nodata_title": "No Empires available", - "nodata_label": "Create your first Empire" + "cx": "Handelskammern", + "nodata_title": "Keine Imperien verfügbar", + "nodata_label": "Erstelle dein erstes Imperium" } }, "cx": { - "title": "CX Configuration", - "description": "Removing a CX preference will delete all its exchange and material settings. Assigned empires will remain unaffected, but they will no longer use the removed preferences. Make sure to assign a new CX preference.", + "title": "Handelskammer-Konfiguration", + "description": "Das Entfernen einer Handelskammer-Konfiguration löscht alle Warenbörsen- und Materialeinstellungen. Zugewiesene Imperien bleiben davon unberührt, aber verlieren ihre Preisberechnungen. Stelle sicher, dass du dem Imperium eine neue Handelskammer zuweist.", "buttons": { - "new_cx": "New @:terms.cx" + "new_cx": "Neue @:terms.cx" }, "form": { "cx_name": "@:terms.cx Name", - "cx_placeholder": "CX Name (max. 100 characters)" + "cx_placeholder": "Handelskammer-Name (max. 100 Zeichen)" }, "table": { "cx_name": "@:terms.cx Name", - "assigned_to_empire": "Assigned to Empire?", - "nodata_title": "No @:terms.cx available.", - "nodata_label": "Create your first Exchange Preference." + "assigned_to_empire": "Imperium zugewiesen?", + "nodata_title": "Keine @:terms.cx verfügbar.", + "nodata_label": "Erstelle deine erste Handelskammer-Konfiguration." } }, "filter": { "title": "Filter", "plan": "@:terms.plan", - "active_empire": "Active @:terms.empire" + "active_empire": "Aktive Imperien" }, "assignments": { - "title": "Plan ↔ Empire Assignments", - "description": "Every planned base can be assigned to multiple empires. This allows you to simultaneously keep track of your existing Prosperous Universe empire, corporation production chains or future expansion plans.", + "title": "Plan ↔ Imperium Zuweisung", + "description": "Jede geplante Basis kann mehreren Imperien zugewiesen werden. Das erlaubt dir, gleichzeitig den Überblick über dein existierendes Prosperous Universe Imperium, Allianz Produktionsketten und Erweiterungspläne zu behalten.", "buttons": { - "update_assignments": "Update Plan Assignments", + "update_assignments": "Plan-Zuweisungen aktualisieren", "reload": "@:common.buttons.reload" }, "deletion": { diff --git a/src/locales/de_DE/market_exploration.json b/src/locales/de_DE/market_exploration.json index 5428c412..6635ac41 100644 --- a/src/locales/de_DE/market_exploration.json +++ b/src/locales/de_DE/market_exploration.json @@ -1,33 +1,33 @@ { - "view_title": "Market Exploration", - "title": "Market Exploration", - "switch_material": "Switch Material", + "view_title": "Marktforschung", + "title": "Marktforschung", + "switch_material": "Material wechseln", "kpis": { - "universe_vwap_7d": "Universe VWAP @:terms.7d", - "universe_traded_7d": "Universe Traded Volume @:terms.7d", - "universe_market_delta": "Universe Market Delta", + "universe_vwap_7d": "Universum VWAP @:terms.7d", + "universe_traded_7d": "Universum Handelsvolumen @:terms.7d", + "universe_market_delta": "Universum Markt Delta", "percent_trend": "% Trend", "30d": "@:{'terms.30d'}:", "supply": "@:{'terms.supply'}:", "demand": "@:{'terms.demand'}:", - "weighted_trend": "Weighted Trend", - "volume_adjusted_delta": "Volume-Adjusted Delta", - "price_cohesion": "Price Cohesion", - "variance_index": "Variance Index" + "weighted_trend": "Gewichteter Trend", + "volume_adjusted_delta": "Volumen-bereinigtes Delta", + "price_cohesion": "Preis Kohäsion", + "variance_index": "Varianz-Index" }, "chart": { - "title": "Market Chart", + "title": "Markt-Chart", "intervals": { - "daily": "Daily", - "weekly": "Weekly", - "monthly": "Monthly" + "daily": "Täglich", + "weekly": "Wöchentlich", + "monthly": "Monatlich" } }, "market_data": { - "title": "Market Data" + "title": "Marktdaten" }, "overview": { - "title": "Material Market Overview", + "title": "Material-Markt-Übersicht", "table": { "material": "@:terms.materials", "vwap_7d": "@:terms.vwap @:terms.7d", diff --git a/src/locales/de_DE/market_live.json b/src/locales/de_DE/market_live.json new file mode 100644 index 00000000..e990599e --- /dev/null +++ b/src/locales/de_DE/market_live.json @@ -0,0 +1,101 @@ +{ + "view_title": "Live Markt", + "title": "Live Markt", + "status": { + "connected": "Verbunden", + "disconnected": "Getrennt" + }, + "severity_type": { + "LOW": "NIEDRIG", + "MEDIUM": "MITTEL", + "HIGH": "HOCH" + }, + "status_type": { + "active": "Aktiv", + "paused": "Pausiert" + }, + "rule_type": { + "static": "Wert", + "previous": "Vorheriger Wert", + "previous_pct": "Unterschied %", + "text": "Text" + }, + "components": { + "feed": { + "title": "Alarm Feed", + "buttons": { + "open_manager": "Alarm-Manager öffnen", + "close_manager": "Alarm-Manager schließen", + "clear_feed": "Feed leeren", + "show_overview": "Übersicht anzeigen", + "hide_overview": "Übersicht ausblenden" + } + }, + "alert_feed": { + "waiting": "Warten auf Marktereignisse, die Alarme auslösen...", + "table": { + "ticker_alert": "Ticker / Alarm", + "severity": "Schweregrad", + "logic": "Trigger-Logik", + "event": "Ereignis", + "time": "Zeit" + } + }, + "details": { + "price": "Preis", + "ask": "@:{'terms.ask'}: {value}", + "bid": "@:{'terms.bid'}: {value}", + "spread": "@:{'terms.spread'}", + "buy_volume": "Kauf-Volumen", + "vwap": "@:{'terms.vwap'}: {value}", + "change": "Änderung: {value}", + "sell_volume": "Verkaufsvolumen", + "buy_volume_value": "Kauf-Volumen: {value}", + "sell_volume_value": "Verkaufs-Volumen: {value}" + }, + "point_table": { + "table": { + "ticker": "@:terms.material_ticker", + "price": "@:terms.price", + "bid": "@:terms.bid", + "ask": "@:terms.ask", + "spread_pct": "Spread %", + "buy_volume": "Kauf-Vol.", + "sell_volume": "Verkauf-Vol." + } + }, + "history": { + "title": "Datenhistorie", + "received": "{value} @:terms.material_ticker erhalten" + }, + "rule_builder": { + "new_rule_name": "Neue Regel", + "buttons": { + "add_condition": "Bedingung", + "add_group": "Gruppe", + "remove": "Entfernen" + }, + "error": "Fehler: {value}", + "empty": "Leere Gruppe" + }, + "alert_manager": { + "title": "Alarm-Manager", + "title_editing": "Alarm bearbeiten", + "info": "Alarme werden derzeit nur auf diesem Gerät gespeichert und nicht mit deinem Konto synchronisiert.", + "no_alerts": "Keine Alarme gefunden. Erstelle dein erstes Alarm-Signal", + "buttons": { + "create_alert": "Neuen Alarm erstellen", + "discard": "@:common.buttons.discard", + "save": "@:common.buttons.save", + "delete": "@:common.buttons.delete" + }, + "form": { + "alert_name": "Alarmname", + "severity": "Schweregrad", + "status": "Status", + "logic_configuration": "Logik Konfiguration", + "previous_datapoint": "Vorheriger Datenpunkt" + } + } + } +} diff --git a/src/locales/de_DE/material_tile.json b/src/locales/de_DE/material_tile.json new file mode 100644 index 00000000..9dc113d8 --- /dev/null +++ b/src/locales/de_DE/material_tile.json @@ -0,0 +1,23 @@ +{ + "information": { + "title": "Material Information", + "table": { + "category": "Kategorie", + "weight": "Gewicht", + "volume": "Volumen" + } + }, + "indicator": { + "value": "Wert", + "max": "Maximum", + "pct_max": "% / Max" + }, + "chart": { + "title": "Markthistorie", + "labels": { + "traded": "Handelsvolumen", + "low_p": "Minimaler Tagespreis", + "high_p": "Maximaler Tagespreis" + } + } +} diff --git a/src/locales/de_DE/plan.json b/src/locales/de_DE/plan.json new file mode 100644 index 00000000..08cf757b --- /dev/null +++ b/src/locales/de_DE/plan.json @@ -0,0 +1,298 @@ +{ + "notifications": { + "must_have_name": "Zum Speichern muss zuerst ein Plan-Name gesetzt werden" + }, + "tools": { + "labels": { + "popr": "POPR", + "visitation_frequency": "Besuchsfrequenz", + "construction_cart": "Konstruktion", + "supply_cart": "Versorgung", + "repair_analysis": "Reparatur-Analyse", + "workforce": "Belegschaft" + }, + "popr": { + "title": "Aktuellster Bevölkerungsbericht", + "error": "Fehler beim Laden des neuesten Bevölkerungsberichtes. Der Planet hat möglicherweise keine Bevölkerung.", + "loading": "Lade Bevölkerungsbericht" + }, + "visitation_frequency": { + "title": "Besuchsfrequenz", + "storage": { + "label": "Lager", + "info": "Dein Plan beinhaltet {storages} mit einer Gesamtkapazität von {total_weight} t und {total_volume} m³.", + "info_no_storage": "Dein Plan verfügt über eine gesamte Lagerkapazität von {total_weight} t und {total_volume} m³.", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "storage_filled": "Lager gefüllt", + "filled_unit": "Tage" + }, + "exclusion_info": "Schließe lokale Materialien, die du nur auf diesem Planeten verwaltest, kaufst oder handelst, von der Besuchsfrequenz aus." + }, + "shipping": { + "label": "Versand", + "table": { + "ship_weight": "Schiff t", + "ship_volume": "Schiff m³", + "visitation_days": "Besuche (Tage)", + "limit": "Limit", + "export_frequency": "@:terms.export Frequenz", + "import_frequency": "@:terms.import Frequenz" + } + } + }, + "construction_cart": { + "title": "Konstruktion", + "unplanned_info": "Die Basis hat ungeplante {buildings} (FIO: {fio_updated}). Zerstöre sie, um zu garantieren, dass Fläche und Materialien korrekt sind.", + "table": { + "building": "@:terms.buildings", + "built": "Gebaut", + "amount": "Anzahl", + "habitation_info": "Unzureichende Gebäude für deine Belegschaft reduzieren die Produktionseffizienz.", + "planned": "Geplant", + "materials_sum": "Material Summe", + "total_cost": "Gesamtkosten", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume", + "material": "Material", + "storage": "Lager", + "stock": "Lagerbestand", + "stock_override": "Bestand überschreiben", + "need": "Bedarf" + } + }, + "supply_cart": { + "title": "Versorgung", + "info": { + "p": "Dieser Versorgungs-Warenkorb aktualisiert sich auf Basis deines Plans und bestehendem Lagerbestand. Du kannst flexibel einen anderen Lagerort wählen, um deine Basis aufzufüllen. Passe deine Auswahl darauf an, ob du deine Belegschaft oder Produktionsgebäude versorgen und für wie viele Tage du Materialen schicken möchtest. Du kannst {link} verwenden, um mehr Optionen für den Versorgungs-Warenkorb zu bekommen.", + "link": "FIO Verbrauch" + }, + "buttons": { + "all": "Alles", + "workforce": "Belegschaft", + "production": "Produktion" + }, + "table": { + "stock_duration": "Bestandsverfügbarkeit (Tage)", + "storage": "Lager", + "xit_name": "Versorgung", + "ticker": "Ticker", + "daily_need": "Täglicher Bedarf", + "daily_cost": "Tägliche Kosten", + "stock": "Lagerbestand", + "full_need": "Voller Bedarf", + "final_need": "Finaler Bedarf", + "weight": "t", + "volume": "m³", + "workforce": "Belegschaft", + "production": "Produktion", + "total_cost": "Gesamtkosten", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + } + }, + "repair_analysis": { + "title": "Reparatur-Analyse", + "plan": "@:terms.plan", + "table": { + "select_day": "Tag auswählen", + "material": "Material", + "amount": "Anzahl", + "cost": "Kosten", + "total_cost": "Gesamtkosten", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + }, + "graph": { + "select_building": "@:terms.buildings auswählen", + "individual_building": "Individuelles @:terms.buildings", + "repair_cost_breakdown": "Reparaturkosten Aufteilung" + } + }, + "cogm": { + "title": "Kosten der hergestellten Waren", + "cogm": "@:terms.cogm", + "info": "Die Kosten der hergestellten Waren werden anhand von Planeinstellungen berechnet, die die Produktionseffizienz erhöhen Rezeptlaufzeit, Bauabbau, Materialkosten, Arbeitsanforderungen und damit verbundene Arbeitskosten. Die Endkosten werden pro Ausgabeeinheit angezeigt, basierend auf der Menge oder der vollen Kostenzuweisung.", + "cx_preferences": "@:terms.cx_plural Präferenzen", + "empire_ticker": "@:terms.empire Ticker", + "planet_ticker": "@:terms.planet Ticker", + "table": { + "parameters": "Parameter", + "recipe_runtime": "@:terms.recipes Laufzeit", + "percent_day": "% / Tag", + "efficiency": "Effizienz", + "degradation": "Abnutzung", + "cost": "@:terms.cost", + "materials": "@:terms.materials_plural", + "input_total": "Input Gesamt", + "material": "@:terms.materials", + "cost_unit": "ȼ / Einheit", + "cost_total": "Gesamtkosten", + "cost_total_unit": "ȼ Gesamt", + "workforce": "Belegschaft", + "total_cost": "Gesamtkosten", + "recipe_profit": "@:terms.recipes Profit", + "cost_split": "Kostenteilung" + } + }, + "plan_analytics": { + "title": "Planungseinblicke", + "info": "Einblicke werden aus aktiven Plänen auf {planet} zusammengefasst. PRUNplanner setzt Mindestschwellen ein, um sowohl Anonymität als auch statistische Genauigkeit zu gewährleisten.", + "labels": { + "experts": "Experten", + "production_buildings": "Produktions-@:terms.buildings_plural", + "recipes": "@:terms.recipes_plural" + } + } + }, + "components": { + "status": { + "hq": "HQ", + "cogc": "@:{'terms.cogc'}:", + "area": "@:{'terms.area'}:", + "profit": "@:{'terms.profit'}:", + "experts": "@:{'terms.experts_plural'}:" + }, + "configuration": { + "label": "Konfiguration", + "name": "Name", + "empire": "@:terms.empire" + }, + "area": { + "permits": "@:terms.permits_plural", + "area": "@:terms.area", + "free": "Frei" + }, + "bonuses": { + "corp_hq": "Corp. HQ", + "corp_hq_tooltip": "Das Unternehmen, zu dem Sie gehören, hat seinen Hauptsitz auf diesem Planeten (nicht Ihr individuelles Unternehmen).", + "cogc": "@:terms.cogc" + }, + "infrastructure": { + "label": "Infrastruktur", + "auto_optimize": "Automatische Optimierung", + "auto_optimize_tooltip": "Automatische Optimierung der Belegschaftsgebäude, um die Bedürfnisse der Belegschaft zu befriedigen, wenn Gebäude hinzugefügt werden.", + "buttons": { + "optimize_cost": "Kosten optimieren", + "optimize_area": "Fläche optimieren" + } + }, + "experts": { + "label": "Experten", + "warning": "Maximale Anzahl von Experten auf einer Basis ist 6. Du hast derzeit {expert_number} Experten zugewiesen." + }, + "workforce": { + "label": "Belegschaft", + "table": { + "type": "Typ", + "need": "Bedarf", + "supply": "Vorrat", + "open": "Offen", + "luxuries": "Luxusgüter", + "pct_eff": "Eff. %" + } + }, + "overview": { + "label": "Übersicht", + "table": { + "daily_cost": "Tägliche Kosten", + "degradation": "Abnutzung", + "plan_cost": "Plankosten", + "daily_profit": "Täglicher Gewinn", + "roi": "ROI", + "profit_area": "@:terms.profit_per_area" + } + }, + "storage": { + "label": "Lager", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "filled": "Gefüllt" + } + }, + "materialio": { + "label": "Material I/O", + "label_production": "Produktion", + "label_workforce": "Belegschaft", + "buttons": { + "toggle_weight_volume": "Gewicht & Volumen umschalten", + "toggle_production_workforce": "Produktion & Belegschaft umschalten" + }, + "table": { + "input": "Ein", + "output": "Aus", + "delta": "Δ", + "cost_day": "ȼ / Tag", + "total_weight": "Δ t", + "total_volume": "Δ m3" + } + }, + "save_as": { + "title": "Speichern als", + "form": { + "plan_name": "Name", + "plan_name_placeholder": "Neuer @:terms.plan-Name", + "empire": "@:terms.empire" + } + }, + "production": { + "label": "Produktion", + "planet_resources": "@:terms.planets @:terms.resources_plural", + "form": { + "match_cogc": "Filter auf @:terms.cogc", + "select_placeholder": "@:terms.buildings auswählen & zu @:terms.plan hinzufügen" + }, + "table": { + "building_recipe": "@:terms.buildings / @:terms.recipes", + "runtime": "Laufzeit", + "share": "Anteil", + "tools": "Werkzeuge" + } + }, + "production_building": { + "no_recipe": "Kein aktives @:terms.recipes_plural", + "qty": "#", + "buttons": { + "add_recipe": "@:terms.recipes" + }, + "table": { + "expertise": "Expertise", + "efficiency": "Effizienz", + "revenue": "@:terms.revenue", + "area": "@:terms.area", + "construction": "Konstruktion" + } + }, + "production_recipe": { + "cogm_title": "Kosten der hergestellten Waren", + "cogm_error": "COGM Berechnung nicht möglich. Überprüfe deinen Verwaltungs-View, ob das Imperium einem Marktplatz zugewiesen ist.", + "buttons": { + "cogm": "@:terms.cogm" + }, + "table": { + "input": "Input", + "time": "Zeit", + "output": "Output", + "daily_revenue": "ȼ / Tag", + "profit_area": "ȼ / Fläche", + "roi": "ROI" + }, + "info": { + "p1_strong": "Umsatz / Tag", + "p1": "wird anhand des nach Auftrag generierten Tageseinkommens berechnet und enthält sowohl die täglichen Personalkosten (alle Luxusgüter) als auch die täglichen Verfallskosten (1/180tel der Baukosten). Die Einnahmen aus dem Auftrag basieren auf der Differenz zwischen den Input und Output Materialkosten.", + "p2_strong": "ȼ / Fläche", + "p2": "ist der tägliche Umsatz für ein Produktionsgebäude und sein proportionaler Anteil an der Fläche für eine Kolonisationseinheit und Belegschaftsgebäude für eine optimale Basis für dieses Gebäude und Auftrag.", + "p3_strong": "ROI", + "p3": "is die benötigte Zeit für einen ständig laufenen Auftrag, um Umsatz zu erzeugen, der alle Konstruktionskosten berücksichtigt. Dies beinhaltet die täglichen Verfalls- und Belegschaftskosten." + } + } + } +} diff --git a/src/locales/de_DE/planet_search.json b/src/locales/de_DE/planet_search.json index f5e8316e..68cd37db 100644 --- a/src/locales/de_DE/planet_search.json +++ b/src/locales/de_DE/planet_search.json @@ -2,7 +2,7 @@ "view_title": "Planetensuche", "title": "Planetensuche", "basic": { - "title": "Planet Name or ID", + "title": "Planetenname oder ID", "description": "Suche muss mindestens 3 Zeichen enthalten. Beispiel: \"OT-580b\", \"Montem\", \"OT-\" oder \"580\".", "form_id": "ID" }, @@ -24,7 +24,7 @@ "fertility": "@:terms.fertility", "resources": "Ressourcen", "popr": "@:terms.popr", - "cogc_program": "COGC Program", + "cogc_program": "COGC-Programm", "environment": "Umwelt", "infrastructure": "Infrastruktur", "distance": "Entfernung" diff --git a/src/locales/de_DE/production_chains.json b/src/locales/de_DE/production_chains.json index fdcac235..7e64ca3d 100644 --- a/src/locales/de_DE/production_chains.json +++ b/src/locales/de_DE/production_chains.json @@ -1,35 +1,35 @@ { - "view_title": "Production Chains", - "title": "Production Chains", + "view_title": "Produktionsketten", + "title": "Produktionsketten", "configuration": { - "title": "Configuration", + "title": "Konfiguration", "material": "@:terms.materials", - "recipe_runs": "Recipe Runs", - "node_color": "Node Color", - "terminals": "Terminals", - "terminals_placeholder": "Comma-separated material tickers", - "terminals_info": "Terminals are materials whose inputs are excluded from the graph, useful if you buy them on the CX or locally and don't need to produce them.", - "recipe_selection": "Recipe Selection" + "recipe_runs": "Aufträge-Anzahl", + "node_color": "Knotenfarbe", + "terminals": "Enden", + "terminals_placeholder": "Durch Kommas getrennte Materialien-Ticker", + "terminals_info": "Terminals sind Materialien, deren Eingänge vom Diagramm ausgeschlossen sind. Nützlich, wenn Sie sie auf dem Marktplatz oder vor Ort gekauft und nicht produziert werden.", + "recipe_selection": "Auftrags-Auswahl" }, "analysis_materials": { - "title": "Materials", + "title": "Materialien", "table": { "material": "@:terms.materials", "amount": "@:terms.amount" } }, "analysis_expertise": { - "title": "Building Expertises", + "title": "Gebäude-Expertise", "table": { "expertise": "Expertise", "materials": "@:terms.materials_plural" } }, "analysis_workforce": { - "title": "Workforce", + "title": "Belegschaft", "table": { - "workforce": "Workforce", - "required": "Required" + "workforce": "Belegschaft", + "required": "Benötigt" } } } diff --git a/src/locales/de_DE/profile.json b/src/locales/de_DE/profile.json index d9566770..121997e4 100644 --- a/src/locales/de_DE/profile.json +++ b/src/locales/de_DE/profile.json @@ -39,50 +39,51 @@ } }, "fio_information": { - "title": "What is FIO & Why should you use it?", + "title": "Was ist FIO & Warum solltest du es benutzen?", "help": { - "title": "5 Easy Steps to Integrate FIO and PRUNplanner", - "p1": "FIO is a community developed {link} that collects your game data, makes it available outside of @:terms.prosperous_universe and is completely free to use.", - "p2": "Just go ahead and install the Chrome or Firefox extension, reload your browser with APEX open and click the extension button in the upper-right in your browser to create an account. FIO will automatically collect (only) your game data while you keep playing.", - "p3": "You can now login to the {link} to see your data and create an API-Key PRUNplanner will use to import your storage (materials you have somewhere) and sites (planets, ships, warehouses) data.", - "p4": "Creating the key is easy, if you head to the {link} page and click the \"Create API Key\" button. Enter a name for your key (e.g., \"PRUNplanner\") and your FIO password. You don't need to \"Allow Writes\" as PRUNplanner will not manipulate any of your data, the tool just reads and uses it.", - "p5": "Give PRUNplanner a couple of minutes and your game data will appear, allowing you to see when to repair ships, what buildings you have already constructed when creating or modifying plans or when to resupply your bases.", + "title": "5 einfache Schritte zur Integration von FIO und PRUNplanner", + "p1": "FIO ist eine von der Community entwickelte {link}, die Spieldaten sammelt und sie außerhalb von Prosperous Universe verfügbar macht. FIO ist kostenlos benutzbar.", + "p2": "Einfach die Chrome- oder Firefox-Erweiterung installiere. Aktualisiere dein Browser-Fenster mit APEX und klicke auf die Erweiterungsschaltfläche oben rechts in deinem Browser, um ein Konto zu erstellen. FIO sammelt automatisch (nur) deine Spieldaten, während du weiterspielst.", + "p3": "Du kannst dich jetzt in den {link} einloggen, um deine Daten zu sehen und einen API-Schlüssel für PRUNplanner zu erstellen, der deine Lagerbestände und Standorte (Planeten, Schiffe, Lager) importiert.", + "p4": "Das Erstellen des API-Schlüssels ist einfach, wenn du auf {link} Seite gehst und \"Create API Key\" klickst. Gib einen Namen für deinen Key (z.B. \"PRUNplanner\") und dein FIO Passwort ein. Du musst \"Allow Writes\" (\"Schreiben erlauben\") nicht auswählen, da PRUNplanner deine Daten manipulieren, sondern nur lesen möchte.", + "p5": "Warte einige Minuten, damit PRUNplanner deine Daten von FIO synchronisieren kann und freue dich auf noch mehr Planungsmöglichkeiten. Deine Daten werden regelmäßig, automatisch im Hintergrund aktualisiert.", "steps": { - "1": "Download and install the {link}", - "2": "Open your game, click the extensions button and register your FIO account", - "3": "Head to the FIO website, open your {link} and create an API-Key for PRUNplanner", - "4": "Copy and enter your API Key as well as your Prosperous Universe username to your profile above and press the \"Update Profile\" button", - "5": "Wait a few minutes for PRUNplanner to get your data and enjoy additional planning capabilities. Your data will be updated automatically in the background, no need to do anything." + "1": "Lade und installiere die {link}", + "2": "Öffne dein Spiel, klicke den Button der Browser-Erweiterung und erstelle deinen FIO Account", + "3": "Gehe zur FIO Webseite, öffne deine {link} und erstelle einen API-Schlüssel für PRUNplanner", + "4": "Kopiere den API-Schlüssel und füge ihn auf dieser Seite ein. Fülle außerdem das Feld mit deinem Prosperous Universe Benutzernamen aus und drücke den \"Profil aktualisieren\" Button", + "5": "Warte einige Minuten, damit PRUNplanner deine Daten von FIO synchronisieren kann und freue dich auf noch mehr Planungsmöglichkeiten. Deine Daten werden regelmäßig, automatisch im Hintergrund aktualisiert." }, - "refined_prun": "While you're enhancing your gameplay, also check out {link}: Another browser extension greatly simplifying the user interface and adding tons of features." + "refined_prun": "Während du gerade sowieso dein Spielerlebnis verbessert, schaue dir auch {link} an: Eine weitere Browser-Erweiterung, die die Benutzeroberfläche im Spiel verbessert und viele weitere Möglichkeiten mitbringt." }, "links": { - "browser_extension": "Browser Extension", + "browser_extension": "Browser Erweiterung", "fio_website": "FIO Website", "fio_settings": "FIO Settings", - "fio_extension": "FIO Browser Extension", - "settings_short": "Settings", + "fio_extension": "FIO Browser-Erweiterung", + "settings_short": "Einstellungen", "refined_prun": "Refined PrUn" } }, "preferences": { - "title": "Preferences", - "description": "Your preferences are saved locally in your browser and aren't synced with the backend yet. Use this panel to review and customize your PRUNplanner settings.", + "title": "Einstellungen", + "description": "Deine Einstellungen werden lokal in deinem Browser gespeichert und noch nicht vollständig mit dem Backend synchronisiert. Hier kannst du sie anpassen und überprüfen.", "form": { - "tool_preferences": "Tool Preferences", - "language": "Language", - "default_empire": "Default Empire", - "default_cx": "Default CX", - "fio_burn": "FIO Burn", - "red_threshold": "Red Threshold", - "yellow_threshold": "Yellow Threshold", - "resupply_days": "Resupply Days", + "tool_preferences": "PRUNplanner Einstellungen", + "language": "Sprache", + "language_note": "Wir wollen PRUNplanner für alle zugänglich machen. Wenn du das Tool in deiner Muttersprache sehen oder uns helfen möchtest, eine vorhandene Übersetzung zu verbessern, tritt unserem Lokalisierungsprojekt auf {link} bei.", + "default_empire": "Standard-Imperium", + "default_cx": "Standard CX", + "fio_burn": "FIO Verbrauch", + "red_threshold": "Roter Grenzwert", + "yellow_threshold": "Gelber Grenzwert", + "resupply_days": "Nachschub-Tage", "xit_origin": "XIT Origin", "buy_from_cx": "XIT Buy from CX", - "plan_specific": "Plan-Specific Settings", - "plan_specific_description": "These settings are managed within individual plans. This section provides an overview of the preferences you've customized so far - to modify them, navigate to the corresponding plan.", + "plan_specific": "Planspezifische Einstellungen", + "plan_specific_description": "Diese Einstellungen werden in einzelnen Plänen verwaltet. Dieser Abschnitt bietet eine Übersicht über die Einstellungen, die du bisher angepasst hast - um sie zu ändern, wähle den entsprechenden Plan.", "plan": "Plan", - "preferences": "Preferences" + "preferences": "Einstellungen" } } } diff --git a/src/locales/de_DE/recipe_roi.json b/src/locales/de_DE/recipe_roi.json index aab2c7f9..ef151d72 100644 --- a/src/locales/de_DE/recipe_roi.json +++ b/src/locales/de_DE/recipe_roi.json @@ -1,26 +1,26 @@ { - "view_title": "ROI Overview", - "title": "ROI Overview", - "calculating": "Calculating Building Recipe ROI", - "cx_select": "@:terms.cx Preference", + "view_title": "ROI-Übersicht", + "title": "ROI-Übersicht", + "calculating": "Berechne alle Gebäude-Auftrage und ihr ROI", + "cx_select": "@:terms.cx Präferenz", "filters": { "title": "@:terms.filter", "building": "@:terms.buildings", "cogc": "@:terms.cogc", - "output": "Output", - "input": "Input", - "positive_roi": "Positive ROI" + "output": "Ausgang", + "input": "Eingang", + "positive_roi": "Positiver ROI" }, "table": { "building": "@:terms.buildings", - "optimal_setup": "Optimal Setup", - "recipe_output": "@:terms.recipes Output", - "recipe_input": "@:terms.recipes Input", + "optimal_setup": "Optimale Konfiguration", + "recipe_output": "@:terms.recipes Ausgang", + "recipe_input": "@:terms.recipes Eingang", "cogc": "@:terms.cogc", "cogm": "@:terms.cogm", - "plan_cost": "@:terms.plan Cost", - "daily_profit": "Daily Profit", - "profit_area": "Profit/Area", + "plan_cost": "@:terms.plan Kosten", + "daily_profit": "Täglicher Gewinn", + "profit_area": "Profit / Fläche", "plan_roi": "@:terms.plan ROI" } } diff --git a/src/locales/de_DE/resource_roi.json b/src/locales/de_DE/resource_roi.json index 4f1ddc57..d18fe6fe 100644 --- a/src/locales/de_DE/resource_roi.json +++ b/src/locales/de_DE/resource_roi.json @@ -1,26 +1,26 @@ { - "view_title": "Resource ROI", - "title": "Resource ROI Overview", - "info": "Select a Resource and press 'Search & Calculate'", - "calculating": "Calculating resource ROI for planets.", - "searching": "Searching for @:terms.planet_plural with '{resource}'. Awaiting backend response", - "resource_select": "Select @:terms.resources", - "cx_select": "@:terms.cx Preference", - "button_calculate": "Search & Calculate", + "view_title": "Ressourcen ROI", + "title": "Ressourcen-ROI-Übersicht", + "info": "Wähle eine Ressource und drücke 'Suchen & Berechnen'", + "calculating": "Kalkuliere Ressourcen ROI für gefundene Planeten.", + "searching": "Suche nach '{resource}' auf @:terms.planet_plural und warte auf Antwort vom Backend", + "resource_select": "@:terms.resources auswählen", + "cx_select": "@:terms.cx Präferenz", + "button_calculate": "Suche & Berechnen", "table": { "planet": "@:terms.planets", "production": "@:terms.production", "building": "@:terms.buildings", - "daily": "Daily", + "daily": "Täglich", "percent_max": "% Max.", "popr": "@:terms.popr", "cogc": "@:terms.cogc", - "environment": "Environment", - "infrastructure": "Infrastructure", - "cost_profit": "Cost / Profit", + "environment": "Umwelt", + "infrastructure": "Infrastruktur", + "cost_profit": "Kosten / Gewinn", "plan_cost": "@:terms.plan @:terms.cost", - "daily_profit": "Daily @:terms.profit", + "daily_profit": "Täglicher @:terms.profit", "plan_roi": "@:terms.plan ROI", - "distances": "Distances" + "distances": "Entfernungen" } } diff --git a/src/locales/de_DE/sharing.json b/src/locales/de_DE/sharing.json new file mode 100644 index 00000000..cd1cfe77 --- /dev/null +++ b/src/locales/de_DE/sharing.json @@ -0,0 +1,11 @@ +{ + "info": "Dies wird einen einzigartigen Link erstellen, der mit anderen geteilt werden kann. Sie können deinen Plan sehen, aber ihn nicht ändern. Der Link ist nicht mehr verfügbar, sobald du dich entscheidest den Plan nicht mehr zu teilen oder ihn löscht.", + "share_count": "Du teilst derzeit diesen Plan. Er wurde {count} mal angesehen", + "buttons": { + "create_link": "Freigabelink erstellen", + "copy_url": "URL kopieren", + "stop_sharing": "Freigabe beenden", + "views": "{count} Aufrufe", + "share": "Freigeben" + } +} diff --git a/src/locales/de_DE/terms.json b/src/locales/de_DE/terms.json index caa22ff7..bb4d5f96 100644 --- a/src/locales/de_DE/terms.json +++ b/src/locales/de_DE/terms.json @@ -1,22 +1,30 @@ { "30d": "30T", "7d": "7T", + "amount": "Anzahl", "api_key": "API Schlüssel", - "ask": "Ask", - "bid": "Bid", + "area": "Fläche", + "ask": "Ankauf", + "bid": "Verkauf", "buffer": "Fenster", - "buildings": "Building | Buildings", + "buildings_plural": "Gebäude", + "buildings": "Gebäude | Gebäude", + "burn": "Verbrauch", "cogc": "COGC", "cogm": "COGM", "consumption": "Verbrauch", "cost": "Kosten", - "cx_plural": "CXs", - "cx": "CX | CXs", + "cx_plural": "Handelskammern", + "cx": "Handelskammer | Handelskammern", "delta_price": "ȼ Delta", "delta": "Delta", "demand": "Nachfrage", + "empire_plural": "Imperien", "empire": "Imperium | Imperien", - "exchanges": "Exchange | Exchanges", + "exchanges": "Marktplatz | Marktplätze", + "experts_plural": "Experten", + "experts": "Experte | Experten", + "export": "Export", "faction": "Fraktion", "fertility": "Bodenfruchtbarkeit", "filter": "Filter", @@ -25,11 +33,13 @@ "gravity": "Gravitation", "high": "Hoch", "hq": "HQ", + "import": "Import", "low": "Niedrig", "material_ticker": "Ticker", "materials_plural": "Materialien", "materials": "Material | Materialien", - "permits_plural": "Permits", + "override": "Überschreiben", + "permits_plural": "Genehmigung", "permits": "Fläche | Fläche", "plan": "Plan | Pläne", "planet_plural": "Planeten", @@ -37,22 +47,27 @@ "plans_plural": "Pläne", "popr": "POPR", "pressure": "Druck", + "price": "Preis", "production": "Produktion", "profit_per_area": "Profit / Fläche", "profit": "Profit", - "recipes": "Recipe | Recipes", - "resources_plural": "Resources", - "resources": "Resource | Resources", + "recipes_plural": "Aufträge", + "recipes": "Auftrag | Aufträge", + "resources_plural": "Ressourcen", + "resources": "Ressource | Ressourcen", "revenue": "Umsatz", "rocky": "Erdähnlich", "spread": "Spread", + "stock": "Lager", + "storage": "Lager", + "sum": "∑", "supply": "Angebot", "surface": "Oberfläche", "temperature": "Temperatur", + "total_volume": "Gesamtvolumen", + "total_weight": "Gesamtgewicht", "trend": "Trend", "volume": "Volumen", "vwap": "VWAP", - "weight": "Weight", - "amount": "Amount", - "storage": "Storage" + "weight": "Gewicht" } diff --git a/src/locales/de_DE/upkeep_price_calculator.json b/src/locales/de_DE/upkeep_price_calculator.json index 1b873678..05c775e9 100644 --- a/src/locales/de_DE/upkeep_price_calculator.json +++ b/src/locales/de_DE/upkeep_price_calculator.json @@ -1,11 +1,11 @@ { - "view_title": "Upkeep Price Calculator", - "title": "Upkeep Price Calculator", + "view_title": "Infrastruktur-Rechner", + "title": "Infrakstrukture-Beitrag-Rechner", "form": { - "cx_preference": "CX Preference" + "cx_preference": "@:terms.cx Präferenz" }, "calculator": { - "calculating": "Calculating Upkeep Material Prices", + "calculating": "Berechne Preise der Infrastruktur Materialien", "needs": { "safety": "@:game.upkeep.safety", "health": "@:game.upkeep.health", @@ -14,13 +14,13 @@ "education": "@:game.upkeep.education" }, "details": { - "title": "Material Details", + "title": "Materialdetails", "table": { "material": "@:terms.materials", "building": "@:terms.buildings", - "price_need": "ȼ/Need", - "cx_price": "@:terms.cx Price", - "qty_day": "Qty/Day" + "price_need": "ȼ/Bedarf", + "cx_price": "@:terms.cx Preis", + "qty_day": "Menge/Tag" } } } diff --git a/src/locales/de_DE/xit.json b/src/locales/de_DE/xit.json new file mode 100644 index 00000000..53001e25 --- /dev/null +++ b/src/locales/de_DE/xit.json @@ -0,0 +1,26 @@ +{ + "form": { + "origin": "Herkunft", + "target_days": "Ziel-Tage", + "buy_from_cx": "Von CX Kaufen", + "buy_from_cx_warning": "Nur Warenhäuser als Ursprung erlauben den direkten Einkauf.", + "fit_ship": "Auf Schiff anpassen", + "hide_infinite": "Unendliche ausblenden", + "json": "JSON" + }, + "buttons": { + "copy_json": "XIT JSON kopieren", + "copy": "@:common.buttons.copy" + }, + "table": { + "ticker": "@:terms.material_ticker", + "stock": "@:terms.stock", + "delta": "@:terms.delta", + "burn": "@:terms.burn", + "amount": "@:terms.amount", + "override": "@:terms.override", + "weight_value": "@:{'terms.weight'}: {value}", + "volume_value": "@:{'terms.volume'}: {value}", + "price_value": "@:{'terms.price'}: {value}" + } +} diff --git a/src/locales/es_ES/account.json b/src/locales/es_ES/account.json new file mode 100644 index 00000000..f6fdc2c0 --- /dev/null +++ b/src/locales/es_ES/account.json @@ -0,0 +1,81 @@ +{ + "components": { + "login": { + "title": "Login", + "error": "Error logging in. Please check your username and password.", + "buttons": { + "login": "Login" + }, + "form": { + "username": "Username", + "password": "Password" + }, + "tos": "By using PRUNplanner you agree to the {tos_link}.", + "tos_link": "Terms of Service", + "forgot": "Forgot your password? Request a {forgot_link}.", + "forgot_link": "Password Reset" + }, + "registration": { + "title": "Account Information", + "tos": "PRUNplanner is free to use. By creating an account, you acknowledge and agree to the {tos_link}.", + "tos_link": "Terms of Service", + "result": { + "ok_header": "Welcome, {username}!", + "ok_message": "Registration succesful. You can now login to PRUNplanner.", + "error": "Error during registration." + }, + "buttons": { + "register": "Create Account" + }, + "form": { + "username": "Username", + "username_info": "Must be at least 3 characters long. Can't contain spaces.", + "password": "Password", + "password_info": "Must be at least 8 characters long.", + "email": "Email", + "email_placeholder": "Not mandatory, but recommended.", + "email_info": "Not mandatory. Increases your account security.", + "security_question": "Security Question", + "question": "Enter the name of planet {planet}. To find it, open a new Prosperous Universe buffer with the command {command}. You'll see the planets name listed under 'Name' in the planet information", + "planet_name": "Name" + } + }, + "password_reset": { + "title": "Reset your Password", + "info": "Please enter the code sent to your email, along with your new password.", + "buttons": { + "send": "Reset Password" + }, + "form": { + "email": "Email", + "code": "Code", + "password": "Password", + "password_info": "Must be at least 8 characters long." + } + }, + "request_password_reset": { + "title": "Password Reset Request", + "info": "Enter the verified email address linked to your PRUNplanner account. If we recognize it, we'll send you a code to reset your password.", + "form": { + "email_placeholder": "Email Address" + }, + "buttons": { + "send": "Request Password Reset" + } + }, + "verify_email": { + "title": "Email Verification", + "info": "Please enter the verification code you received via email. Maybe check your spam folder.", + "buttons": { + "send": "Verify Email Address" + }, + "form": { + "code_placeholder": "Verification Code" + }, + "result": { + "ok": "Email address verified.", + "error": "Invalid code or already verified." + } + } + } +} diff --git a/src/locales/es_ES/common.json b/src/locales/es_ES/common.json index e80606df..60ae9f5a 100644 --- a/src/locales/es_ES/common.json +++ b/src/locales/es_ES/common.json @@ -33,6 +33,7 @@ "buttons": { "create": "Create", "save": "Save", + "save_as": "Save As", "reload": "Reload", "show": "Show", "hide": "Hide", @@ -40,9 +41,24 @@ "search": "Search", "default": "Default", "select_all": "Select All", + "discard": "Discard", "yes": "Yes", "no": "No", "delete": "Delete", - "cancel": "Cancel" + "cancel": "Cancel", + "clone_plan": "Clone Plan", + "clone_complete": "Cloning Complete", + "copy": "Copy" + }, + "ui": { + "placeholder": { + "please_input": "Please Input", + "please_select": "Please Select", + "search": "Search" + }, + "select": { + "no_results": "No Results", + "select_options": "Select Options" + } } } diff --git a/src/locales/es_ES/cx_info_table.json b/src/locales/es_ES/cx_info_table.json index 8fd874ef..091a4d38 100644 --- a/src/locales/es_ES/cx_info_table.json +++ b/src/locales/es_ES/cx_info_table.json @@ -11,5 +11,5 @@ "weighted_trend": "Weighted Trend", "volume_adjusted_delta": "Volume-Adjusted Delta", "price_cohesion": "Price Cohesion", - "variance_index": "Variance Index" + "variance_index": "Índice de Variación" } diff --git a/src/locales/es_ES/exchanges.json b/src/locales/es_ES/exchanges.json new file mode 100644 index 00000000..8c599196 --- /dev/null +++ b/src/locales/es_ES/exchanges.json @@ -0,0 +1,55 @@ +{ + "view_title": "Exchanges", + "title": "Exchanges", + "errors": { + "title": "No Preferences", + "message": "You don't have exchange preferences. Head to Management and create your first." + }, + "buttons": { + "csv_import_export": "@:exchanges.components.csv_import_export.title", + "save": "@:common.buttons.save", + "reload": "@:common.buttons.reload" + }, + "configuration": { + "form": { + "preference_name": "Preference Name", + "empire_preferences": "Empire Preferences", + "exchange": "Exchange", + "ticker": "@:terms.material_ticker" + } + }, + "preference_type": { + "BUY": "BUY", + "SELL": "SELL", + "BOTH": "BOTH" + }, + "components": { + "ticker": { + "no_data": "No @:terms.material_ticker Preferences Configured", + "material_placeholder": "@:terms.materials" + }, + "exchanges": { + "no_data": "No @:terms.exchanges Preference Configured" + }, + "planet_preferences": { + "title": "Planet Preferences", + "form": { + "exchange": "@:terms.exchanges", + "ticker": "@:terms.material_ticker" + }, + "table": { + "planet": "@:terms.planets", + "exchange_preference": "@:terms.exchanges Preferences", + "ticker_preference": "@:terms.material_ticker Preferences" + } + }, + "csv_import_export": { + "title": "Import / Export CSV", + "warning": "Warning: Importing deletes all existing properties and imports the new ones. You need to save your imported preferences after uploading the CSV file or use the reload button to discard them.", + "buttons": { + "import": "Import Settings", + "export": "Export Settings" + } + } + } +} diff --git a/src/locales/es_ES/fio.json b/src/locales/es_ES/fio.json new file mode 100644 index 00000000..a104665d --- /dev/null +++ b/src/locales/es_ES/fio.json @@ -0,0 +1,49 @@ +{ + "burn": { + "view_title": "FIO Burn", + "title": "FIO Burn:", + "fio_last_update": "FIO Data Update: {last_updated}", + "form": { + "empire": "@:terms.empire", + "burn_thresholds": "Burn Thresholds", + "red": "Red", + "yellow": "Yellow" + }, + "components": { + "overview": { + "title": "Plan Burn Overview", + "table": { + "plan": "@:terms.plan", + "planet": "@:terms.planets", + "burn": "Burn" + } + }, + "plans": { + "xit_title": "XIT Resupply: {plan_name}", + "table": { + "ticker": "@:terms.material_ticker", + "consumption": "@:terms.consumption", + "production": "@:terms.production", + "delta": "@:terms.delta", + "stock": "@:terms.stock", + "plan": "@:terms.plan", + "burn": "Burn", + "exhaustion": "Exhaustion" + } + } + } + }, + "repair": { + "view_title": "FIO Repair", + "title": "FIO Repair", + "fio_last_update": "FIO Data Update: {last_updated}", + "table": { + "title": "@:terms.planet_plural", + "planet": "@:terms.planets", + "buildings": "@:terms.buildings_plural", + "avg_condition": "⌀ Condition", + "min_condition": "Min. Condition", + "repair_age": "Repair Age" + } + } +} diff --git a/src/locales/es_ES/game.json b/src/locales/es_ES/game.json index 8351bc83..f3e19d40 100644 --- a/src/locales/es_ES/game.json +++ b/src/locales/es_ES/game.json @@ -4,6 +4,21 @@ "PLANETARY": "Planetary", "PRODUCTION": "Production" }, + "workforce_type": { + "pioneer": "Pioneer", + "settler": "Settler", + "technician": "Technician", + "engineer": "Engineer", + "scientist": "Scientist" + }, + "efficiency_type": { + "WORKFORCE": "Workforce", + "HQ": "HQ", + "EXPERT": "Experts", + "COGC": "COGC", + "FERTILITY": "Fertility", + "FACTION": "Faction" + }, "expertise": { "AGRICULTURE": "Agriculture", "CHEMISTRY": "Chemistry", @@ -51,6 +66,42 @@ "WORKFORCE_ENGINEERS": "ENG", "WORKFORCE_SCIENTISTS": "SCI" }, + "material_category": { + "agricultural_products": "Agricultural Products", + "alloys": "Alloys", + "chemicals": "Chemicals", + "construction_materials": "Construction Materials", + "construction_parts": "Construction Parts", + "construction_prefabs": "Construction Prefabs", + "consumable_bundles": "Consumable Bundles", + "consumables_(basic)": "Consumables Basic", + "consumables_(luxury)": "Consumables Luxury", + "drones": "Drones", + "electronic_devices": "Electronic Devices", + "electronic_parts": "Electronic Parts", + "electronic_pieces": "Electronic Pieces", + "electronic_systems": "Electronic Systems", + "elements": "Elements", + "energy_systems": "Energy Systems", + "fuels": "Fuels", + "gases": "Gases", + "liquids": "Liquids", + "medical_equipment": "Medical Equipment", + "metals": "Metals", + "minerals": "Minerals", + "ores": "Ores", + "plastics": "Plastics", + "ship_engines": "Ship Engines", + "ship_kits": "Ship Kits", + "ship_parts": "Ship Parts", + "ship_shields": "Ship Shields", + "software_components": "Software Components", + "software_systems": "Software Systems", + "software_tools": "Software Tools", + "textiles": "Textiles", + "unit_prefabs": "Unit Prefabs", + "utility": "Utility" + }, "upkeep": { "safety": "Safety", "health": "Health", diff --git a/src/locales/es_ES/government.json b/src/locales/es_ES/government.json new file mode 100644 index 00000000..2a00d90b --- /dev/null +++ b/src/locales/es_ES/government.json @@ -0,0 +1,16 @@ +{ + "popr_button": { + "no_data": "Planet {planet_id} has no population data", + "buttons": { + "no_popr": "No POPR" + }, + "table": { + "total_population": "Total Population", + "free_population": "Free Population", + "free_population_pct": "Free Population %", + "unfilled_jobs": "Unfilled Jobs", + "plan_need": "@:terms.plan Need", + "plan_check": "@:terms.plan Check" + } + } +} diff --git a/src/locales/es_ES/homepage.json b/src/locales/es_ES/homepage.json index dbdb94e7..5c8aa103 100644 --- a/src/locales/es_ES/homepage.json +++ b/src/locales/es_ES/homepage.json @@ -62,7 +62,7 @@ "section_title": "Powered by tools we love to use" }, "open_source": { - "section_title": "Free & Open Source", + "section_title": "Free & Open Source", "section_lead": "PRUNplanner is completely free to use, and its frontend is fully {link}.", "prompt": "Love it? We'd be thrilled if you contributed!", "link_open_source": "Open Source" diff --git a/src/locales/es_ES/market_live.json b/src/locales/es_ES/market_live.json new file mode 100644 index 00000000..ca5a5b21 --- /dev/null +++ b/src/locales/es_ES/market_live.json @@ -0,0 +1,101 @@ +{ + "view_title": "Market Live", + "title": "Market Live", + "status": { + "connected": "Connected", + "disconnected": "Disconnected" + }, + "severity_type": { + "LOW": "LOW", + "MEDIUM": "MEDIUM", + "HIGH": "HIGH" + }, + "status_type": { + "active": "Active", + "paused": "Paused" + }, + "rule_type": { + "static": "Value", + "previous": "Previous", + "previous_pct": "Offset %", + "text": "Text" + }, + "components": { + "feed": { + "title": "Alert Feed", + "buttons": { + "open_manager": "Open Alert Manager", + "close_manager": "Close Alert Manager", + "clear_feed": "Clear Feed", + "show_overview": "Show Overview", + "hide_overview": "Hide Overview" + } + }, + "alert_feed": { + "waiting": "Waiting for market events triggering alerts...", + "table": { + "ticker_alert": "Ticker / Alert", + "severity": "Severity", + "logic": "Trigger Logic", + "event": "Event", + "time": "Time" + } + }, + "details": { + "price": "Price", + "ask": "@:{'terms.ask'}: {value}", + "bid": "@:{'terms.bid'}: {value}", + "spread": "@:{'terms.spread'}", + "buy_volume": "Buy Volume", + "vwap": "@:{'terms.vwap'}: {value}", + "change": "Change: {value}", + "sell_volume": "Sell Volume", + "buy_volume_value": "Buy Volume: {value}", + "sell_volume_value": "Sell Volume: {value}" + }, + "point_table": { + "table": { + "ticker": "@:terms.material_ticker", + "price": "@:terms.price", + "bid": "@:terms.bid", + "ask": "@:terms.ask", + "spread_pct": "Spread %", + "buy_volume": "Buy Vol.", + "sell_volume": "Sell Vol." + } + }, + "history": { + "title": "Data History", + "received": "{value} @:terms.material_ticker received" + }, + "rule_builder": { + "new_rule_name": "New Rule", + "buttons": { + "add_condition": "Condition", + "add_group": "Group", + "remove": "Remove" + }, + "error": "Error: {value}", + "empty": "Empty Group" + }, + "alert_manager": { + "title": "Alert Manager", + "title_editing": "Edit Alert", + "info": "Alerts are currently stored on this device only and are not synced to your account.", + "no_alerts": "No alerts found. Start by creating your first detector signal", + "buttons": { + "create_alert": "Create New Alert", + "discard": "@:common.buttons.discard", + "save": "@:common.buttons.save", + "delete": "@:common.buttons.delete" + }, + "form": { + "alert_name": "Alert Name", + "severity": "Severity", + "status": "Status", + "logic_configuration": "Logic Configuration", + "previous_datapoint": "Previous Datepoint" + } + } + } +} diff --git a/src/locales/es_ES/material_tile.json b/src/locales/es_ES/material_tile.json new file mode 100644 index 00000000..7feabd58 --- /dev/null +++ b/src/locales/es_ES/material_tile.json @@ -0,0 +1,23 @@ +{ + "information": { + "title": "Material Information", + "table": { + "category": "Category", + "weight": "Weight", + "volume": "Volume" + } + }, + "indicator": { + "value": "Value", + "max": "Maximum", + "pct_max": "% / Max" + }, + "chart": { + "title": "Market History", + "labels": { + "traded": "Traded Volume", + "low_p": "Daily Minimum Price", + "high_p": "Daily Maximum Price" + } + } +} diff --git a/src/locales/es_ES/plan.json b/src/locales/es_ES/plan.json new file mode 100644 index 00000000..1b01bf38 --- /dev/null +++ b/src/locales/es_ES/plan.json @@ -0,0 +1,298 @@ +{ + "notifications": { + "must_have_name": "Must set a plan name in Configuration to save" + }, + "tools": { + "labels": { + "popr": "POPR", + "visitation_frequency": "Visitation Frequency", + "construction_cart": "Construction Cart", + "supply_cart": "Supply Cart", + "repair_analysis": "Repair Analysis", + "workforce": "Workforce" + }, + "popr": { + "title": "Latest Population Report", + "error": "Error loading latest population report. The planet might not have population.", + "loading": "Loading Population Report" + }, + "visitation_frequency": { + "title": "Visitation Frequency", + "storage": { + "label": "Storage", + "info": "Your plan involves adding {storages} giving you a total storage capacity of {total_weight} t and {total_volume} m³.", + "info_no_storage": "Your plan has a total storage capacity of {total_weight} t and {total_volume} m³.", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "storage_filled": "Storage Filled", + "filled_unit": "days" + }, + "exclusion_info": "Exclude local materials from visitation frequency calculation for items handled exclusively planet-side, like local market sales, purchases or contracts." + }, + "shipping": { + "label": "Shipping", + "table": { + "ship_weight": "Ship t", + "ship_volume": "Ship m³", + "visitation_days": "Visitation (days)", + "limit": "Limit", + "export_frequency": "@:terms.export Frequency", + "import_frequency": "@:terms.import Frequency" + } + } + }, + "construction_cart": { + "title": "Construction Cart", + "unplanned_info": "Base has unplanned {buildings} (FIO: {fio_updated}). Demolish to ensure area, habitation and materials are accurate.", + "table": { + "building": "@:terms.buildings", + "built": "Built", + "amount": "Amount", + "habitation_info": "Insufficient habitation will reduce production efficiency.", + "planned": "Planned", + "materials_sum": "Materials Sum", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume", + "material": "Material", + "storage": "Storage", + "stock": "Stock", + "stock_override": "Stock Override", + "need": "Need" + } + }, + "supply_cart": { + "title": "Supply Cart", + "info": { + "p": "The Supply Cart provides updates on your plans needs combined with existing inventory sourced from FIO. You have the flexibility to opt for alternative storage locations to replenish your base. Tailor your selection based on whether you wish to restock workforce and production supplies or focus on a specific category, and specify the duration for which the supplied stock should sustain. Use the {link} tool for more advanced supply cart options.", + "link": "FIO Burn" + }, + "buttons": { + "all": "All", + "workforce": "Workforce", + "production": "Production" + }, + "table": { + "stock_duration": "Stock Duration (days)", + "storage": "Storage", + "xit_name": "Supply Cart", + "ticker": "Ticker", + "daily_need": "Daily Need", + "daily_cost": "Daily Cost", + "stock": "Stock", + "full_need": "Full Need", + "final_need": "Final Need", + "weight": "t", + "volume": "m³", + "workforce": "Workforce", + "production": "Production", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + } + }, + "repair_analysis": { + "title": "Repair Analysis", + "plan": "@:terms.plan", + "table": { + "select_day": "Select Day", + "material": "Material", + "amount": "Amount", + "cost": "Cost", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + }, + "graph": { + "select_building": "Select @:terms.buildings", + "individual_building": "Individual @:terms.buildings", + "repair_cost_breakdown": "Repair Cost Breakdown" + } + }, + "cogm": { + "title": "Cost of Goods Manufactured", + "cogm": "@:terms.cogm", + "info": "The cost of goods manufactured is calculated using plan settings that factor in production efficiency, recipe runtime, building degradation, input material costs, labor requirements, and associated labor costs. The final cost is shown per unit of output, based on quantity or full cost allocation.", + "cx_preferences": "@:terms.cx_plural Preferences", + "empire_ticker": "@:terms.empire Ticker", + "planet_ticker": "@:terms.planet Ticker", + "table": { + "parameters": "Parameters", + "recipe_runtime": "@:terms.recipes Runtime", + "percent_day": "% / day", + "efficiency": "Efficiency", + "degradation": "Degradation", + "cost": "@:terms.cost", + "materials": "@:terms.materials_plural", + "input_total": "Input Total", + "material": "@:terms.materials", + "cost_unit": "ȼ / Unit", + "cost_total": "Cost Total", + "cost_total_unit": "ȼ Total", + "workforce": "Workforce", + "total_cost": "Total Cost", + "recipe_profit": "@:terms.recipes Profit", + "cost_split": "Cost Split" + } + }, + "plan_analytics": { + "title": "Planning Insights", + "info": "Insights are aggregated from active player plans on {planet}. PRUNplanner enforces minimum sample thresholds to ensure both anonymity and statistical accuracy.", + "labels": { + "experts": "Experts", + "production_buildings": "Production @:terms.buildings_plural", + "recipes": "@:terms.recipes_plural" + } + } + }, + "components": { + "status": { + "hq": "HQ", + "cogc": "@:{'terms.cogc'}:", + "area": "@:{'terms.area'}:", + "profit": "@:{'terms.profit'}:", + "experts": "@:{'terms.experts_plural'}:" + }, + "configuration": { + "label": "Configuration", + "name": "Name", + "empire": "@:terms.empire" + }, + "area": { + "permits": "@:terms.permits_plural", + "area": "@:terms.area", + "free": "Free" + }, + "bonuses": { + "corp_hq": "Corp. HQ", + "corp_hq_tooltip": "The corporation you belong to has its headquarters on this planet (not your individual company).", + "cogc": "@:terms.cogc" + }, + "infrastructure": { + "label": "Infrastructure", + "auto_optimize": "Auto-Optimize Habs", + "auto_optimize_tooltip": "Automatically optimize habitations to meet workforce needs as buildings are added.", + "buttons": { + "optimize_cost": "Optimize Cost", + "optimize_area": "Optimize Area" + } + }, + "experts": { + "label": "Experts", + "warning": "Maximum number of experts on a base is 6. You currently have {expert_number} experts assigned." + }, + "workforce": { + "label": "Workforce", + "table": { + "type": "Type", + "need": "Need", + "supply": "Supply", + "open": "Open", + "luxuries": "Luxuries", + "pct_eff": "Eff. %" + } + }, + "overview": { + "label": "Overview", + "table": { + "daily_cost": "Daily Cost", + "degradation": "Degradation", + "plan_cost": "Plan Cost", + "daily_profit": "Daily Profit", + "roi": "ROI", + "profit_area": "@:terms.profit_per_area" + } + }, + "storage": { + "label": "Storage", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "filled": "Filled" + } + }, + "materialio": { + "label": "Material I/O", + "label_production": "Production", + "label_workforce": "Workforce", + "buttons": { + "toggle_weight_volume": "Toggle Weight & Volume", + "toggle_production_workforce": "Toggle Production & Workforce Split" + }, + "table": { + "input": "In", + "output": "Out", + "delta": "Δ", + "cost_day": "ȼ / day", + "total_weight": "Δ t", + "total_volume": "Δ m³" + } + }, + "save_as": { + "title": "Save As", + "form": { + "plan_name": "Name", + "plan_name_placeholder": "New @:terms.plan Name", + "empire": "@:terms.empire" + } + }, + "production": { + "label": "Production", + "planet_resources": "@:terms.planets @:terms.resources_plural", + "form": { + "match_cogc": "Match @:terms.cogc", + "select_placeholder": "Select @:terms.buildings & Add to @:terms.plan" + }, + "table": { + "building_recipe": "@:terms.buildings / @:terms.recipes", + "runtime": "Runtime", + "share": "Share", + "tools": "Tools" + } + }, + "production_building": { + "no_recipe": "No Active @:terms.recipes_plural", + "qty": "Qty", + "buttons": { + "add_recipe": "@:terms.recipes" + }, + "table": { + "expertise": "Expertise", + "efficiency": "Efficiency", + "revenue": "@:terms.revenue", + "area": "@:terms.area", + "construction": "Construction" + } + }, + "production_recipe": { + "cogm_title": "Cost Of Goods Manufactured", + "cogm_error": "COGM Calculation not possible. Check your Management View if your Empire has a CX assigned.", + "buttons": { + "cogm": "@:terms.cogm" + }, + "table": { + "input": "Input", + "time": "Time", + "output": "Output", + "daily_revenue": "ȼ / Day", + "profit_area": "ȼ / Area", + "roi": "ROI" + }, + "info": { + "p1_strong": "Revenue / Day", + "p1": "is calculated by taking the daily income generated from a recipe and subtracting both the daily workforce cost (all luxuries provided) and the daily building degradation cost (1/180th of the construction cost). The income from the recipe is based on the difference between the input material costs and the output material values.", + "p2_strong": "ȼ / Area", + "p2": "is the daily revenue divided by the area for one production building and its proportionate share of the area for a CM and habs required for an optimal base of such buildings in Recipe ROI.", + "p3_strong": "ROI", + "p3": "is the time required for a continuously operating recipe to generate enough revenue to offset the building's construction cost. This considers daily degradation and workforce costs as well." + } + } + } +} diff --git a/src/locales/es_ES/profile.json b/src/locales/es_ES/profile.json index 4bf31dae..cdc413fb 100644 --- a/src/locales/es_ES/profile.json +++ b/src/locales/es_ES/profile.json @@ -42,7 +42,7 @@ "title": "What is FIO & Why should you use it?", "help": { "title": "5 Easy Steps to Integrate FIO and PRUNplanner", - "p1": "FIO is a community developed {link} that collects your game data, makes it available outside of @:terms.prosperous_universe and is completely free to use.", + "p1": "FIO is a community developed {link} that collects your game data, makes it available outside of Prosperous Universe and is completely free to use.", "p2": "Just go ahead and install the Chrome or Firefox extension, reload your browser with APEX open and click the extension button in the upper-right in your browser to create an account. FIO will automatically collect (only) your game data while you keep playing.", "p3": "You can now login to the {link} to see your data and create an API-Key PRUNplanner will use to import your storage (materials you have somewhere) and sites (planets, ships, warehouses) data.", "p4": "Creating the key is easy, if you head to the {link} page and click the \"Create API Key\" button. Enter a name for your key (e.g., \"PRUNplanner\") and your FIO password. You don't need to \"Allow Writes\" as PRUNplanner will not manipulate any of your data, the tool just reads and uses it.", @@ -71,6 +71,7 @@ "form": { "tool_preferences": "Tool Preferences", "language": "Language", + "language_note": "We want to make PRUNplanner accessible to everyone. If you'd like to see the tool in your native language - or help us polish an existing translation - join our localization project on {link}.", "default_empire": "Default Empire", "default_cx": "Default CX", "fio_burn": "FIO Burn", diff --git a/src/locales/es_ES/sharing.json b/src/locales/es_ES/sharing.json new file mode 100644 index 00000000..fc01f576 --- /dev/null +++ b/src/locales/es_ES/sharing.json @@ -0,0 +1,11 @@ +{ + "info": "This will create an unique link that can be shared with others. They will be able to see your plan, but don't modify it. The link becomes unavailable once you choose to stop sharing or delete the plan.", + "share_count": "You're currently sharing this plan. It has been viewed {count} times", + "buttons": { + "create_link": "Create Sharing Link", + "copy_url": "Copy URL", + "stop_sharing": "Stop Sharing", + "views": "{count} Views", + "share": "Share" + } +} diff --git a/src/locales/es_ES/terms.json b/src/locales/es_ES/terms.json index b7ead843..ec554d8b 100644 --- a/src/locales/es_ES/terms.json +++ b/src/locales/es_ES/terms.json @@ -1,11 +1,15 @@ { "30d": "30D", "7d": "7D", + "amount": "Amount", "api_key": "API Key", + "area": "Area", "ask": "Ask", "bid": "Bid", "buffer": "Buffer", + "buildings_plural": "Buildings", "buildings": "Building | Buildings", + "burn": "Burn", "cogc": "COGC", "cogm": "COGM", "consumption": "Consumption", @@ -15,8 +19,12 @@ "delta_price": "ȼ Delta", "delta": "Delta", "demand": "Demand", + "empire_plural": "Empires", "empire": "Empire | Empires", "exchanges": "Exchange | Exchanges", + "experts_plural": "Experts", + "experts": "Expert | Experts", + "export": "Export", "faction": "Faction", "fertility": "Fertility", "filter": "Filter", @@ -25,10 +33,12 @@ "gravity": "Gravity", "high": "High", "hq": "HQ", + "import": "Import", "low": "Low", "material_ticker": "Ticker", "materials_plural": "Materials", "materials": "Material | Materials", + "override": "Override", "permits_plural": "Permits", "permits": "Permit | Permits", "plan": "Plan | Plans", @@ -37,22 +47,27 @@ "plans_plural": "Plans", "popr": "POPR", "pressure": "Pressure", + "price": "Price", "production": "Production", "profit_per_area": "Profit / Area", "profit": "Profit", + "recipes_plural": "Recipes", "recipes": "Recipe | Recipes", "resources_plural": "Resources", "resources": "Resource | Resources", "revenue": "Revenue", "rocky": "Rocky", "spread": "Spread", + "stock": "Stock", + "storage": "Storage", + "sum": "∑", "supply": "Supply", "surface": "Surface", "temperature": "Temperature", + "total_volume": "Total Volume", + "total_weight": "Total Weight", "trend": "Trend", "volume": "Volume", "vwap": "VWAP", - "weight": "Weight", - "amount": "Amount", - "storage": "Storage" + "weight": "Weight" } diff --git a/src/locales/es_ES/xit.json b/src/locales/es_ES/xit.json new file mode 100644 index 00000000..7d505bd8 --- /dev/null +++ b/src/locales/es_ES/xit.json @@ -0,0 +1,26 @@ +{ + "form": { + "origin": "Origin", + "target_days": "Target Days", + "buy_from_cx": "Buy From CX", + "buy_from_cx_warning": "Only warehouse origin allows purchasing.", + "fit_ship": "Fit Ship", + "hide_infinite": "Hide Infinite", + "json": "JSON" + }, + "buttons": { + "copy_json": "Copy XIT JSON", + "copy": "@:common.buttons.copy" + }, + "table": { + "ticker": "@:terms.material_ticker", + "stock": "@:terms.stock", + "delta": "@:terms.delta", + "burn": "@:terms.burn", + "amount": "@:terms.amount", + "override": "@:terms.override", + "weight_value": "@:{'terms.weight'}: {value}", + "volume_value": "@:{'terms.volume'}: {value}", + "price_value": "@:{'terms.price'}: {value}" + } +} diff --git a/src/locales/fr_FR/account.json b/src/locales/fr_FR/account.json new file mode 100644 index 00000000..f6fdc2c0 --- /dev/null +++ b/src/locales/fr_FR/account.json @@ -0,0 +1,81 @@ +{ + "components": { + "login": { + "title": "Login", + "error": "Error logging in. Please check your username and password.", + "buttons": { + "login": "Login" + }, + "form": { + "username": "Username", + "password": "Password" + }, + "tos": "By using PRUNplanner you agree to the {tos_link}.", + "tos_link": "Terms of Service", + "forgot": "Forgot your password? Request a {forgot_link}.", + "forgot_link": "Password Reset" + }, + "registration": { + "title": "Account Information", + "tos": "PRUNplanner is free to use. By creating an account, you acknowledge and agree to the {tos_link}.", + "tos_link": "Terms of Service", + "result": { + "ok_header": "Welcome, {username}!", + "ok_message": "Registration succesful. You can now login to PRUNplanner.", + "error": "Error during registration." + }, + "buttons": { + "register": "Create Account" + }, + "form": { + "username": "Username", + "username_info": "Must be at least 3 characters long. Can't contain spaces.", + "password": "Password", + "password_info": "Must be at least 8 characters long.", + "email": "Email", + "email_placeholder": "Not mandatory, but recommended.", + "email_info": "Not mandatory. Increases your account security.", + "security_question": "Security Question", + "question": "Enter the name of planet {planet}. To find it, open a new Prosperous Universe buffer with the command {command}. You'll see the planets name listed under 'Name' in the planet information", + "planet_name": "Name" + } + }, + "password_reset": { + "title": "Reset your Password", + "info": "Please enter the code sent to your email, along with your new password.", + "buttons": { + "send": "Reset Password" + }, + "form": { + "email": "Email", + "code": "Code", + "password": "Password", + "password_info": "Must be at least 8 characters long." + } + }, + "request_password_reset": { + "title": "Password Reset Request", + "info": "Enter the verified email address linked to your PRUNplanner account. If we recognize it, we'll send you a code to reset your password.", + "form": { + "email_placeholder": "Email Address" + }, + "buttons": { + "send": "Request Password Reset" + } + }, + "verify_email": { + "title": "Email Verification", + "info": "Please enter the verification code you received via email. Maybe check your spam folder.", + "buttons": { + "send": "Verify Email Address" + }, + "form": { + "code_placeholder": "Verification Code" + }, + "result": { + "ok": "Email address verified.", + "error": "Invalid code or already verified." + } + } + } +} diff --git a/src/locales/fr_FR/common.json b/src/locales/fr_FR/common.json index e80606df..60ae9f5a 100644 --- a/src/locales/fr_FR/common.json +++ b/src/locales/fr_FR/common.json @@ -33,6 +33,7 @@ "buttons": { "create": "Create", "save": "Save", + "save_as": "Save As", "reload": "Reload", "show": "Show", "hide": "Hide", @@ -40,9 +41,24 @@ "search": "Search", "default": "Default", "select_all": "Select All", + "discard": "Discard", "yes": "Yes", "no": "No", "delete": "Delete", - "cancel": "Cancel" + "cancel": "Cancel", + "clone_plan": "Clone Plan", + "clone_complete": "Cloning Complete", + "copy": "Copy" + }, + "ui": { + "placeholder": { + "please_input": "Please Input", + "please_select": "Please Select", + "search": "Search" + }, + "select": { + "no_results": "No Results", + "select_options": "Select Options" + } } } diff --git a/src/locales/fr_FR/exchanges.json b/src/locales/fr_FR/exchanges.json new file mode 100644 index 00000000..8c599196 --- /dev/null +++ b/src/locales/fr_FR/exchanges.json @@ -0,0 +1,55 @@ +{ + "view_title": "Exchanges", + "title": "Exchanges", + "errors": { + "title": "No Preferences", + "message": "You don't have exchange preferences. Head to Management and create your first." + }, + "buttons": { + "csv_import_export": "@:exchanges.components.csv_import_export.title", + "save": "@:common.buttons.save", + "reload": "@:common.buttons.reload" + }, + "configuration": { + "form": { + "preference_name": "Preference Name", + "empire_preferences": "Empire Preferences", + "exchange": "Exchange", + "ticker": "@:terms.material_ticker" + } + }, + "preference_type": { + "BUY": "BUY", + "SELL": "SELL", + "BOTH": "BOTH" + }, + "components": { + "ticker": { + "no_data": "No @:terms.material_ticker Preferences Configured", + "material_placeholder": "@:terms.materials" + }, + "exchanges": { + "no_data": "No @:terms.exchanges Preference Configured" + }, + "planet_preferences": { + "title": "Planet Preferences", + "form": { + "exchange": "@:terms.exchanges", + "ticker": "@:terms.material_ticker" + }, + "table": { + "planet": "@:terms.planets", + "exchange_preference": "@:terms.exchanges Preferences", + "ticker_preference": "@:terms.material_ticker Preferences" + } + }, + "csv_import_export": { + "title": "Import / Export CSV", + "warning": "Warning: Importing deletes all existing properties and imports the new ones. You need to save your imported preferences after uploading the CSV file or use the reload button to discard them.", + "buttons": { + "import": "Import Settings", + "export": "Export Settings" + } + } + } +} diff --git a/src/locales/fr_FR/fio.json b/src/locales/fr_FR/fio.json new file mode 100644 index 00000000..a104665d --- /dev/null +++ b/src/locales/fr_FR/fio.json @@ -0,0 +1,49 @@ +{ + "burn": { + "view_title": "FIO Burn", + "title": "FIO Burn:", + "fio_last_update": "FIO Data Update: {last_updated}", + "form": { + "empire": "@:terms.empire", + "burn_thresholds": "Burn Thresholds", + "red": "Red", + "yellow": "Yellow" + }, + "components": { + "overview": { + "title": "Plan Burn Overview", + "table": { + "plan": "@:terms.plan", + "planet": "@:terms.planets", + "burn": "Burn" + } + }, + "plans": { + "xit_title": "XIT Resupply: {plan_name}", + "table": { + "ticker": "@:terms.material_ticker", + "consumption": "@:terms.consumption", + "production": "@:terms.production", + "delta": "@:terms.delta", + "stock": "@:terms.stock", + "plan": "@:terms.plan", + "burn": "Burn", + "exhaustion": "Exhaustion" + } + } + } + }, + "repair": { + "view_title": "FIO Repair", + "title": "FIO Repair", + "fio_last_update": "FIO Data Update: {last_updated}", + "table": { + "title": "@:terms.planet_plural", + "planet": "@:terms.planets", + "buildings": "@:terms.buildings_plural", + "avg_condition": "⌀ Condition", + "min_condition": "Min. Condition", + "repair_age": "Repair Age" + } + } +} diff --git a/src/locales/fr_FR/game.json b/src/locales/fr_FR/game.json index 8351bc83..f3e19d40 100644 --- a/src/locales/fr_FR/game.json +++ b/src/locales/fr_FR/game.json @@ -4,6 +4,21 @@ "PLANETARY": "Planetary", "PRODUCTION": "Production" }, + "workforce_type": { + "pioneer": "Pioneer", + "settler": "Settler", + "technician": "Technician", + "engineer": "Engineer", + "scientist": "Scientist" + }, + "efficiency_type": { + "WORKFORCE": "Workforce", + "HQ": "HQ", + "EXPERT": "Experts", + "COGC": "COGC", + "FERTILITY": "Fertility", + "FACTION": "Faction" + }, "expertise": { "AGRICULTURE": "Agriculture", "CHEMISTRY": "Chemistry", @@ -51,6 +66,42 @@ "WORKFORCE_ENGINEERS": "ENG", "WORKFORCE_SCIENTISTS": "SCI" }, + "material_category": { + "agricultural_products": "Agricultural Products", + "alloys": "Alloys", + "chemicals": "Chemicals", + "construction_materials": "Construction Materials", + "construction_parts": "Construction Parts", + "construction_prefabs": "Construction Prefabs", + "consumable_bundles": "Consumable Bundles", + "consumables_(basic)": "Consumables Basic", + "consumables_(luxury)": "Consumables Luxury", + "drones": "Drones", + "electronic_devices": "Electronic Devices", + "electronic_parts": "Electronic Parts", + "electronic_pieces": "Electronic Pieces", + "electronic_systems": "Electronic Systems", + "elements": "Elements", + "energy_systems": "Energy Systems", + "fuels": "Fuels", + "gases": "Gases", + "liquids": "Liquids", + "medical_equipment": "Medical Equipment", + "metals": "Metals", + "minerals": "Minerals", + "ores": "Ores", + "plastics": "Plastics", + "ship_engines": "Ship Engines", + "ship_kits": "Ship Kits", + "ship_parts": "Ship Parts", + "ship_shields": "Ship Shields", + "software_components": "Software Components", + "software_systems": "Software Systems", + "software_tools": "Software Tools", + "textiles": "Textiles", + "unit_prefabs": "Unit Prefabs", + "utility": "Utility" + }, "upkeep": { "safety": "Safety", "health": "Health", diff --git a/src/locales/fr_FR/government.json b/src/locales/fr_FR/government.json new file mode 100644 index 00000000..2a00d90b --- /dev/null +++ b/src/locales/fr_FR/government.json @@ -0,0 +1,16 @@ +{ + "popr_button": { + "no_data": "Planet {planet_id} has no population data", + "buttons": { + "no_popr": "No POPR" + }, + "table": { + "total_population": "Total Population", + "free_population": "Free Population", + "free_population_pct": "Free Population %", + "unfilled_jobs": "Unfilled Jobs", + "plan_need": "@:terms.plan Need", + "plan_check": "@:terms.plan Check" + } + } +} diff --git a/src/locales/fr_FR/homepage.json b/src/locales/fr_FR/homepage.json index dbdb94e7..5c8aa103 100644 --- a/src/locales/fr_FR/homepage.json +++ b/src/locales/fr_FR/homepage.json @@ -62,7 +62,7 @@ "section_title": "Powered by tools we love to use" }, "open_source": { - "section_title": "Free & Open Source", + "section_title": "Free & Open Source", "section_lead": "PRUNplanner is completely free to use, and its frontend is fully {link}.", "prompt": "Love it? We'd be thrilled if you contributed!", "link_open_source": "Open Source" diff --git a/src/locales/fr_FR/market_live.json b/src/locales/fr_FR/market_live.json new file mode 100644 index 00000000..ca5a5b21 --- /dev/null +++ b/src/locales/fr_FR/market_live.json @@ -0,0 +1,101 @@ +{ + "view_title": "Market Live", + "title": "Market Live", + "status": { + "connected": "Connected", + "disconnected": "Disconnected" + }, + "severity_type": { + "LOW": "LOW", + "MEDIUM": "MEDIUM", + "HIGH": "HIGH" + }, + "status_type": { + "active": "Active", + "paused": "Paused" + }, + "rule_type": { + "static": "Value", + "previous": "Previous", + "previous_pct": "Offset %", + "text": "Text" + }, + "components": { + "feed": { + "title": "Alert Feed", + "buttons": { + "open_manager": "Open Alert Manager", + "close_manager": "Close Alert Manager", + "clear_feed": "Clear Feed", + "show_overview": "Show Overview", + "hide_overview": "Hide Overview" + } + }, + "alert_feed": { + "waiting": "Waiting for market events triggering alerts...", + "table": { + "ticker_alert": "Ticker / Alert", + "severity": "Severity", + "logic": "Trigger Logic", + "event": "Event", + "time": "Time" + } + }, + "details": { + "price": "Price", + "ask": "@:{'terms.ask'}: {value}", + "bid": "@:{'terms.bid'}: {value}", + "spread": "@:{'terms.spread'}", + "buy_volume": "Buy Volume", + "vwap": "@:{'terms.vwap'}: {value}", + "change": "Change: {value}", + "sell_volume": "Sell Volume", + "buy_volume_value": "Buy Volume: {value}", + "sell_volume_value": "Sell Volume: {value}" + }, + "point_table": { + "table": { + "ticker": "@:terms.material_ticker", + "price": "@:terms.price", + "bid": "@:terms.bid", + "ask": "@:terms.ask", + "spread_pct": "Spread %", + "buy_volume": "Buy Vol.", + "sell_volume": "Sell Vol." + } + }, + "history": { + "title": "Data History", + "received": "{value} @:terms.material_ticker received" + }, + "rule_builder": { + "new_rule_name": "New Rule", + "buttons": { + "add_condition": "Condition", + "add_group": "Group", + "remove": "Remove" + }, + "error": "Error: {value}", + "empty": "Empty Group" + }, + "alert_manager": { + "title": "Alert Manager", + "title_editing": "Edit Alert", + "info": "Alerts are currently stored on this device only and are not synced to your account.", + "no_alerts": "No alerts found. Start by creating your first detector signal", + "buttons": { + "create_alert": "Create New Alert", + "discard": "@:common.buttons.discard", + "save": "@:common.buttons.save", + "delete": "@:common.buttons.delete" + }, + "form": { + "alert_name": "Alert Name", + "severity": "Severity", + "status": "Status", + "logic_configuration": "Logic Configuration", + "previous_datapoint": "Previous Datepoint" + } + } + } +} diff --git a/src/locales/fr_FR/material_tile.json b/src/locales/fr_FR/material_tile.json new file mode 100644 index 00000000..7feabd58 --- /dev/null +++ b/src/locales/fr_FR/material_tile.json @@ -0,0 +1,23 @@ +{ + "information": { + "title": "Material Information", + "table": { + "category": "Category", + "weight": "Weight", + "volume": "Volume" + } + }, + "indicator": { + "value": "Value", + "max": "Maximum", + "pct_max": "% / Max" + }, + "chart": { + "title": "Market History", + "labels": { + "traded": "Traded Volume", + "low_p": "Daily Minimum Price", + "high_p": "Daily Maximum Price" + } + } +} diff --git a/src/locales/fr_FR/plan.json b/src/locales/fr_FR/plan.json new file mode 100644 index 00000000..1b01bf38 --- /dev/null +++ b/src/locales/fr_FR/plan.json @@ -0,0 +1,298 @@ +{ + "notifications": { + "must_have_name": "Must set a plan name in Configuration to save" + }, + "tools": { + "labels": { + "popr": "POPR", + "visitation_frequency": "Visitation Frequency", + "construction_cart": "Construction Cart", + "supply_cart": "Supply Cart", + "repair_analysis": "Repair Analysis", + "workforce": "Workforce" + }, + "popr": { + "title": "Latest Population Report", + "error": "Error loading latest population report. The planet might not have population.", + "loading": "Loading Population Report" + }, + "visitation_frequency": { + "title": "Visitation Frequency", + "storage": { + "label": "Storage", + "info": "Your plan involves adding {storages} giving you a total storage capacity of {total_weight} t and {total_volume} m³.", + "info_no_storage": "Your plan has a total storage capacity of {total_weight} t and {total_volume} m³.", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "storage_filled": "Storage Filled", + "filled_unit": "days" + }, + "exclusion_info": "Exclude local materials from visitation frequency calculation for items handled exclusively planet-side, like local market sales, purchases or contracts." + }, + "shipping": { + "label": "Shipping", + "table": { + "ship_weight": "Ship t", + "ship_volume": "Ship m³", + "visitation_days": "Visitation (days)", + "limit": "Limit", + "export_frequency": "@:terms.export Frequency", + "import_frequency": "@:terms.import Frequency" + } + } + }, + "construction_cart": { + "title": "Construction Cart", + "unplanned_info": "Base has unplanned {buildings} (FIO: {fio_updated}). Demolish to ensure area, habitation and materials are accurate.", + "table": { + "building": "@:terms.buildings", + "built": "Built", + "amount": "Amount", + "habitation_info": "Insufficient habitation will reduce production efficiency.", + "planned": "Planned", + "materials_sum": "Materials Sum", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume", + "material": "Material", + "storage": "Storage", + "stock": "Stock", + "stock_override": "Stock Override", + "need": "Need" + } + }, + "supply_cart": { + "title": "Supply Cart", + "info": { + "p": "The Supply Cart provides updates on your plans needs combined with existing inventory sourced from FIO. You have the flexibility to opt for alternative storage locations to replenish your base. Tailor your selection based on whether you wish to restock workforce and production supplies or focus on a specific category, and specify the duration for which the supplied stock should sustain. Use the {link} tool for more advanced supply cart options.", + "link": "FIO Burn" + }, + "buttons": { + "all": "All", + "workforce": "Workforce", + "production": "Production" + }, + "table": { + "stock_duration": "Stock Duration (days)", + "storage": "Storage", + "xit_name": "Supply Cart", + "ticker": "Ticker", + "daily_need": "Daily Need", + "daily_cost": "Daily Cost", + "stock": "Stock", + "full_need": "Full Need", + "final_need": "Final Need", + "weight": "t", + "volume": "m³", + "workforce": "Workforce", + "production": "Production", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + } + }, + "repair_analysis": { + "title": "Repair Analysis", + "plan": "@:terms.plan", + "table": { + "select_day": "Select Day", + "material": "Material", + "amount": "Amount", + "cost": "Cost", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + }, + "graph": { + "select_building": "Select @:terms.buildings", + "individual_building": "Individual @:terms.buildings", + "repair_cost_breakdown": "Repair Cost Breakdown" + } + }, + "cogm": { + "title": "Cost of Goods Manufactured", + "cogm": "@:terms.cogm", + "info": "The cost of goods manufactured is calculated using plan settings that factor in production efficiency, recipe runtime, building degradation, input material costs, labor requirements, and associated labor costs. The final cost is shown per unit of output, based on quantity or full cost allocation.", + "cx_preferences": "@:terms.cx_plural Preferences", + "empire_ticker": "@:terms.empire Ticker", + "planet_ticker": "@:terms.planet Ticker", + "table": { + "parameters": "Parameters", + "recipe_runtime": "@:terms.recipes Runtime", + "percent_day": "% / day", + "efficiency": "Efficiency", + "degradation": "Degradation", + "cost": "@:terms.cost", + "materials": "@:terms.materials_plural", + "input_total": "Input Total", + "material": "@:terms.materials", + "cost_unit": "ȼ / Unit", + "cost_total": "Cost Total", + "cost_total_unit": "ȼ Total", + "workforce": "Workforce", + "total_cost": "Total Cost", + "recipe_profit": "@:terms.recipes Profit", + "cost_split": "Cost Split" + } + }, + "plan_analytics": { + "title": "Planning Insights", + "info": "Insights are aggregated from active player plans on {planet}. PRUNplanner enforces minimum sample thresholds to ensure both anonymity and statistical accuracy.", + "labels": { + "experts": "Experts", + "production_buildings": "Production @:terms.buildings_plural", + "recipes": "@:terms.recipes_plural" + } + } + }, + "components": { + "status": { + "hq": "HQ", + "cogc": "@:{'terms.cogc'}:", + "area": "@:{'terms.area'}:", + "profit": "@:{'terms.profit'}:", + "experts": "@:{'terms.experts_plural'}:" + }, + "configuration": { + "label": "Configuration", + "name": "Name", + "empire": "@:terms.empire" + }, + "area": { + "permits": "@:terms.permits_plural", + "area": "@:terms.area", + "free": "Free" + }, + "bonuses": { + "corp_hq": "Corp. HQ", + "corp_hq_tooltip": "The corporation you belong to has its headquarters on this planet (not your individual company).", + "cogc": "@:terms.cogc" + }, + "infrastructure": { + "label": "Infrastructure", + "auto_optimize": "Auto-Optimize Habs", + "auto_optimize_tooltip": "Automatically optimize habitations to meet workforce needs as buildings are added.", + "buttons": { + "optimize_cost": "Optimize Cost", + "optimize_area": "Optimize Area" + } + }, + "experts": { + "label": "Experts", + "warning": "Maximum number of experts on a base is 6. You currently have {expert_number} experts assigned." + }, + "workforce": { + "label": "Workforce", + "table": { + "type": "Type", + "need": "Need", + "supply": "Supply", + "open": "Open", + "luxuries": "Luxuries", + "pct_eff": "Eff. %" + } + }, + "overview": { + "label": "Overview", + "table": { + "daily_cost": "Daily Cost", + "degradation": "Degradation", + "plan_cost": "Plan Cost", + "daily_profit": "Daily Profit", + "roi": "ROI", + "profit_area": "@:terms.profit_per_area" + } + }, + "storage": { + "label": "Storage", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "filled": "Filled" + } + }, + "materialio": { + "label": "Material I/O", + "label_production": "Production", + "label_workforce": "Workforce", + "buttons": { + "toggle_weight_volume": "Toggle Weight & Volume", + "toggle_production_workforce": "Toggle Production & Workforce Split" + }, + "table": { + "input": "In", + "output": "Out", + "delta": "Δ", + "cost_day": "ȼ / day", + "total_weight": "Δ t", + "total_volume": "Δ m³" + } + }, + "save_as": { + "title": "Save As", + "form": { + "plan_name": "Name", + "plan_name_placeholder": "New @:terms.plan Name", + "empire": "@:terms.empire" + } + }, + "production": { + "label": "Production", + "planet_resources": "@:terms.planets @:terms.resources_plural", + "form": { + "match_cogc": "Match @:terms.cogc", + "select_placeholder": "Select @:terms.buildings & Add to @:terms.plan" + }, + "table": { + "building_recipe": "@:terms.buildings / @:terms.recipes", + "runtime": "Runtime", + "share": "Share", + "tools": "Tools" + } + }, + "production_building": { + "no_recipe": "No Active @:terms.recipes_plural", + "qty": "Qty", + "buttons": { + "add_recipe": "@:terms.recipes" + }, + "table": { + "expertise": "Expertise", + "efficiency": "Efficiency", + "revenue": "@:terms.revenue", + "area": "@:terms.area", + "construction": "Construction" + } + }, + "production_recipe": { + "cogm_title": "Cost Of Goods Manufactured", + "cogm_error": "COGM Calculation not possible. Check your Management View if your Empire has a CX assigned.", + "buttons": { + "cogm": "@:terms.cogm" + }, + "table": { + "input": "Input", + "time": "Time", + "output": "Output", + "daily_revenue": "ȼ / Day", + "profit_area": "ȼ / Area", + "roi": "ROI" + }, + "info": { + "p1_strong": "Revenue / Day", + "p1": "is calculated by taking the daily income generated from a recipe and subtracting both the daily workforce cost (all luxuries provided) and the daily building degradation cost (1/180th of the construction cost). The income from the recipe is based on the difference between the input material costs and the output material values.", + "p2_strong": "ȼ / Area", + "p2": "is the daily revenue divided by the area for one production building and its proportionate share of the area for a CM and habs required for an optimal base of such buildings in Recipe ROI.", + "p3_strong": "ROI", + "p3": "is the time required for a continuously operating recipe to generate enough revenue to offset the building's construction cost. This considers daily degradation and workforce costs as well." + } + } + } +} diff --git a/src/locales/fr_FR/profile.json b/src/locales/fr_FR/profile.json index 4bf31dae..cdc413fb 100644 --- a/src/locales/fr_FR/profile.json +++ b/src/locales/fr_FR/profile.json @@ -42,7 +42,7 @@ "title": "What is FIO & Why should you use it?", "help": { "title": "5 Easy Steps to Integrate FIO and PRUNplanner", - "p1": "FIO is a community developed {link} that collects your game data, makes it available outside of @:terms.prosperous_universe and is completely free to use.", + "p1": "FIO is a community developed {link} that collects your game data, makes it available outside of Prosperous Universe and is completely free to use.", "p2": "Just go ahead and install the Chrome or Firefox extension, reload your browser with APEX open and click the extension button in the upper-right in your browser to create an account. FIO will automatically collect (only) your game data while you keep playing.", "p3": "You can now login to the {link} to see your data and create an API-Key PRUNplanner will use to import your storage (materials you have somewhere) and sites (planets, ships, warehouses) data.", "p4": "Creating the key is easy, if you head to the {link} page and click the \"Create API Key\" button. Enter a name for your key (e.g., \"PRUNplanner\") and your FIO password. You don't need to \"Allow Writes\" as PRUNplanner will not manipulate any of your data, the tool just reads and uses it.", @@ -71,6 +71,7 @@ "form": { "tool_preferences": "Tool Preferences", "language": "Language", + "language_note": "We want to make PRUNplanner accessible to everyone. If you'd like to see the tool in your native language - or help us polish an existing translation - join our localization project on {link}.", "default_empire": "Default Empire", "default_cx": "Default CX", "fio_burn": "FIO Burn", diff --git a/src/locales/fr_FR/sharing.json b/src/locales/fr_FR/sharing.json new file mode 100644 index 00000000..fc01f576 --- /dev/null +++ b/src/locales/fr_FR/sharing.json @@ -0,0 +1,11 @@ +{ + "info": "This will create an unique link that can be shared with others. They will be able to see your plan, but don't modify it. The link becomes unavailable once you choose to stop sharing or delete the plan.", + "share_count": "You're currently sharing this plan. It has been viewed {count} times", + "buttons": { + "create_link": "Create Sharing Link", + "copy_url": "Copy URL", + "stop_sharing": "Stop Sharing", + "views": "{count} Views", + "share": "Share" + } +} diff --git a/src/locales/fr_FR/terms.json b/src/locales/fr_FR/terms.json index b7ead843..ec554d8b 100644 --- a/src/locales/fr_FR/terms.json +++ b/src/locales/fr_FR/terms.json @@ -1,11 +1,15 @@ { "30d": "30D", "7d": "7D", + "amount": "Amount", "api_key": "API Key", + "area": "Area", "ask": "Ask", "bid": "Bid", "buffer": "Buffer", + "buildings_plural": "Buildings", "buildings": "Building | Buildings", + "burn": "Burn", "cogc": "COGC", "cogm": "COGM", "consumption": "Consumption", @@ -15,8 +19,12 @@ "delta_price": "ȼ Delta", "delta": "Delta", "demand": "Demand", + "empire_plural": "Empires", "empire": "Empire | Empires", "exchanges": "Exchange | Exchanges", + "experts_plural": "Experts", + "experts": "Expert | Experts", + "export": "Export", "faction": "Faction", "fertility": "Fertility", "filter": "Filter", @@ -25,10 +33,12 @@ "gravity": "Gravity", "high": "High", "hq": "HQ", + "import": "Import", "low": "Low", "material_ticker": "Ticker", "materials_plural": "Materials", "materials": "Material | Materials", + "override": "Override", "permits_plural": "Permits", "permits": "Permit | Permits", "plan": "Plan | Plans", @@ -37,22 +47,27 @@ "plans_plural": "Plans", "popr": "POPR", "pressure": "Pressure", + "price": "Price", "production": "Production", "profit_per_area": "Profit / Area", "profit": "Profit", + "recipes_plural": "Recipes", "recipes": "Recipe | Recipes", "resources_plural": "Resources", "resources": "Resource | Resources", "revenue": "Revenue", "rocky": "Rocky", "spread": "Spread", + "stock": "Stock", + "storage": "Storage", + "sum": "∑", "supply": "Supply", "surface": "Surface", "temperature": "Temperature", + "total_volume": "Total Volume", + "total_weight": "Total Weight", "trend": "Trend", "volume": "Volume", "vwap": "VWAP", - "weight": "Weight", - "amount": "Amount", - "storage": "Storage" + "weight": "Weight" } diff --git a/src/locales/fr_FR/xit.json b/src/locales/fr_FR/xit.json new file mode 100644 index 00000000..7d505bd8 --- /dev/null +++ b/src/locales/fr_FR/xit.json @@ -0,0 +1,26 @@ +{ + "form": { + "origin": "Origin", + "target_days": "Target Days", + "buy_from_cx": "Buy From CX", + "buy_from_cx_warning": "Only warehouse origin allows purchasing.", + "fit_ship": "Fit Ship", + "hide_infinite": "Hide Infinite", + "json": "JSON" + }, + "buttons": { + "copy_json": "Copy XIT JSON", + "copy": "@:common.buttons.copy" + }, + "table": { + "ticker": "@:terms.material_ticker", + "stock": "@:terms.stock", + "delta": "@:terms.delta", + "burn": "@:terms.burn", + "amount": "@:terms.amount", + "override": "@:terms.override", + "weight_value": "@:{'terms.weight'}: {value}", + "volume_value": "@:{'terms.volume'}: {value}", + "price_value": "@:{'terms.price'}: {value}" + } +} diff --git a/src/locales/it_IT/account.json b/src/locales/it_IT/account.json new file mode 100644 index 00000000..f6fdc2c0 --- /dev/null +++ b/src/locales/it_IT/account.json @@ -0,0 +1,81 @@ +{ + "components": { + "login": { + "title": "Login", + "error": "Error logging in. Please check your username and password.", + "buttons": { + "login": "Login" + }, + "form": { + "username": "Username", + "password": "Password" + }, + "tos": "By using PRUNplanner you agree to the {tos_link}.", + "tos_link": "Terms of Service", + "forgot": "Forgot your password? Request a {forgot_link}.", + "forgot_link": "Password Reset" + }, + "registration": { + "title": "Account Information", + "tos": "PRUNplanner is free to use. By creating an account, you acknowledge and agree to the {tos_link}.", + "tos_link": "Terms of Service", + "result": { + "ok_header": "Welcome, {username}!", + "ok_message": "Registration succesful. You can now login to PRUNplanner.", + "error": "Error during registration." + }, + "buttons": { + "register": "Create Account" + }, + "form": { + "username": "Username", + "username_info": "Must be at least 3 characters long. Can't contain spaces.", + "password": "Password", + "password_info": "Must be at least 8 characters long.", + "email": "Email", + "email_placeholder": "Not mandatory, but recommended.", + "email_info": "Not mandatory. Increases your account security.", + "security_question": "Security Question", + "question": "Enter the name of planet {planet}. To find it, open a new Prosperous Universe buffer with the command {command}. You'll see the planets name listed under 'Name' in the planet information", + "planet_name": "Name" + } + }, + "password_reset": { + "title": "Reset your Password", + "info": "Please enter the code sent to your email, along with your new password.", + "buttons": { + "send": "Reset Password" + }, + "form": { + "email": "Email", + "code": "Code", + "password": "Password", + "password_info": "Must be at least 8 characters long." + } + }, + "request_password_reset": { + "title": "Password Reset Request", + "info": "Enter the verified email address linked to your PRUNplanner account. If we recognize it, we'll send you a code to reset your password.", + "form": { + "email_placeholder": "Email Address" + }, + "buttons": { + "send": "Request Password Reset" + } + }, + "verify_email": { + "title": "Email Verification", + "info": "Please enter the verification code you received via email. Maybe check your spam folder.", + "buttons": { + "send": "Verify Email Address" + }, + "form": { + "code_placeholder": "Verification Code" + }, + "result": { + "ok": "Email address verified.", + "error": "Invalid code or already verified." + } + } + } +} diff --git a/src/locales/it_IT/common.json b/src/locales/it_IT/common.json index e80606df..60ae9f5a 100644 --- a/src/locales/it_IT/common.json +++ b/src/locales/it_IT/common.json @@ -33,6 +33,7 @@ "buttons": { "create": "Create", "save": "Save", + "save_as": "Save As", "reload": "Reload", "show": "Show", "hide": "Hide", @@ -40,9 +41,24 @@ "search": "Search", "default": "Default", "select_all": "Select All", + "discard": "Discard", "yes": "Yes", "no": "No", "delete": "Delete", - "cancel": "Cancel" + "cancel": "Cancel", + "clone_plan": "Clone Plan", + "clone_complete": "Cloning Complete", + "copy": "Copy" + }, + "ui": { + "placeholder": { + "please_input": "Please Input", + "please_select": "Please Select", + "search": "Search" + }, + "select": { + "no_results": "No Results", + "select_options": "Select Options" + } } } diff --git a/src/locales/it_IT/exchanges.json b/src/locales/it_IT/exchanges.json new file mode 100644 index 00000000..8c599196 --- /dev/null +++ b/src/locales/it_IT/exchanges.json @@ -0,0 +1,55 @@ +{ + "view_title": "Exchanges", + "title": "Exchanges", + "errors": { + "title": "No Preferences", + "message": "You don't have exchange preferences. Head to Management and create your first." + }, + "buttons": { + "csv_import_export": "@:exchanges.components.csv_import_export.title", + "save": "@:common.buttons.save", + "reload": "@:common.buttons.reload" + }, + "configuration": { + "form": { + "preference_name": "Preference Name", + "empire_preferences": "Empire Preferences", + "exchange": "Exchange", + "ticker": "@:terms.material_ticker" + } + }, + "preference_type": { + "BUY": "BUY", + "SELL": "SELL", + "BOTH": "BOTH" + }, + "components": { + "ticker": { + "no_data": "No @:terms.material_ticker Preferences Configured", + "material_placeholder": "@:terms.materials" + }, + "exchanges": { + "no_data": "No @:terms.exchanges Preference Configured" + }, + "planet_preferences": { + "title": "Planet Preferences", + "form": { + "exchange": "@:terms.exchanges", + "ticker": "@:terms.material_ticker" + }, + "table": { + "planet": "@:terms.planets", + "exchange_preference": "@:terms.exchanges Preferences", + "ticker_preference": "@:terms.material_ticker Preferences" + } + }, + "csv_import_export": { + "title": "Import / Export CSV", + "warning": "Warning: Importing deletes all existing properties and imports the new ones. You need to save your imported preferences after uploading the CSV file or use the reload button to discard them.", + "buttons": { + "import": "Import Settings", + "export": "Export Settings" + } + } + } +} diff --git a/src/locales/it_IT/fio.json b/src/locales/it_IT/fio.json new file mode 100644 index 00000000..a104665d --- /dev/null +++ b/src/locales/it_IT/fio.json @@ -0,0 +1,49 @@ +{ + "burn": { + "view_title": "FIO Burn", + "title": "FIO Burn:", + "fio_last_update": "FIO Data Update: {last_updated}", + "form": { + "empire": "@:terms.empire", + "burn_thresholds": "Burn Thresholds", + "red": "Red", + "yellow": "Yellow" + }, + "components": { + "overview": { + "title": "Plan Burn Overview", + "table": { + "plan": "@:terms.plan", + "planet": "@:terms.planets", + "burn": "Burn" + } + }, + "plans": { + "xit_title": "XIT Resupply: {plan_name}", + "table": { + "ticker": "@:terms.material_ticker", + "consumption": "@:terms.consumption", + "production": "@:terms.production", + "delta": "@:terms.delta", + "stock": "@:terms.stock", + "plan": "@:terms.plan", + "burn": "Burn", + "exhaustion": "Exhaustion" + } + } + } + }, + "repair": { + "view_title": "FIO Repair", + "title": "FIO Repair", + "fio_last_update": "FIO Data Update: {last_updated}", + "table": { + "title": "@:terms.planet_plural", + "planet": "@:terms.planets", + "buildings": "@:terms.buildings_plural", + "avg_condition": "⌀ Condition", + "min_condition": "Min. Condition", + "repair_age": "Repair Age" + } + } +} diff --git a/src/locales/it_IT/game.json b/src/locales/it_IT/game.json index 8351bc83..f3e19d40 100644 --- a/src/locales/it_IT/game.json +++ b/src/locales/it_IT/game.json @@ -4,6 +4,21 @@ "PLANETARY": "Planetary", "PRODUCTION": "Production" }, + "workforce_type": { + "pioneer": "Pioneer", + "settler": "Settler", + "technician": "Technician", + "engineer": "Engineer", + "scientist": "Scientist" + }, + "efficiency_type": { + "WORKFORCE": "Workforce", + "HQ": "HQ", + "EXPERT": "Experts", + "COGC": "COGC", + "FERTILITY": "Fertility", + "FACTION": "Faction" + }, "expertise": { "AGRICULTURE": "Agriculture", "CHEMISTRY": "Chemistry", @@ -51,6 +66,42 @@ "WORKFORCE_ENGINEERS": "ENG", "WORKFORCE_SCIENTISTS": "SCI" }, + "material_category": { + "agricultural_products": "Agricultural Products", + "alloys": "Alloys", + "chemicals": "Chemicals", + "construction_materials": "Construction Materials", + "construction_parts": "Construction Parts", + "construction_prefabs": "Construction Prefabs", + "consumable_bundles": "Consumable Bundles", + "consumables_(basic)": "Consumables Basic", + "consumables_(luxury)": "Consumables Luxury", + "drones": "Drones", + "electronic_devices": "Electronic Devices", + "electronic_parts": "Electronic Parts", + "electronic_pieces": "Electronic Pieces", + "electronic_systems": "Electronic Systems", + "elements": "Elements", + "energy_systems": "Energy Systems", + "fuels": "Fuels", + "gases": "Gases", + "liquids": "Liquids", + "medical_equipment": "Medical Equipment", + "metals": "Metals", + "minerals": "Minerals", + "ores": "Ores", + "plastics": "Plastics", + "ship_engines": "Ship Engines", + "ship_kits": "Ship Kits", + "ship_parts": "Ship Parts", + "ship_shields": "Ship Shields", + "software_components": "Software Components", + "software_systems": "Software Systems", + "software_tools": "Software Tools", + "textiles": "Textiles", + "unit_prefabs": "Unit Prefabs", + "utility": "Utility" + }, "upkeep": { "safety": "Safety", "health": "Health", diff --git a/src/locales/it_IT/government.json b/src/locales/it_IT/government.json new file mode 100644 index 00000000..2a00d90b --- /dev/null +++ b/src/locales/it_IT/government.json @@ -0,0 +1,16 @@ +{ + "popr_button": { + "no_data": "Planet {planet_id} has no population data", + "buttons": { + "no_popr": "No POPR" + }, + "table": { + "total_population": "Total Population", + "free_population": "Free Population", + "free_population_pct": "Free Population %", + "unfilled_jobs": "Unfilled Jobs", + "plan_need": "@:terms.plan Need", + "plan_check": "@:terms.plan Check" + } + } +} diff --git a/src/locales/it_IT/homepage.json b/src/locales/it_IT/homepage.json index dbdb94e7..5c8aa103 100644 --- a/src/locales/it_IT/homepage.json +++ b/src/locales/it_IT/homepage.json @@ -62,7 +62,7 @@ "section_title": "Powered by tools we love to use" }, "open_source": { - "section_title": "Free & Open Source", + "section_title": "Free & Open Source", "section_lead": "PRUNplanner is completely free to use, and its frontend is fully {link}.", "prompt": "Love it? We'd be thrilled if you contributed!", "link_open_source": "Open Source" diff --git a/src/locales/it_IT/market_live.json b/src/locales/it_IT/market_live.json new file mode 100644 index 00000000..ca5a5b21 --- /dev/null +++ b/src/locales/it_IT/market_live.json @@ -0,0 +1,101 @@ +{ + "view_title": "Market Live", + "title": "Market Live", + "status": { + "connected": "Connected", + "disconnected": "Disconnected" + }, + "severity_type": { + "LOW": "LOW", + "MEDIUM": "MEDIUM", + "HIGH": "HIGH" + }, + "status_type": { + "active": "Active", + "paused": "Paused" + }, + "rule_type": { + "static": "Value", + "previous": "Previous", + "previous_pct": "Offset %", + "text": "Text" + }, + "components": { + "feed": { + "title": "Alert Feed", + "buttons": { + "open_manager": "Open Alert Manager", + "close_manager": "Close Alert Manager", + "clear_feed": "Clear Feed", + "show_overview": "Show Overview", + "hide_overview": "Hide Overview" + } + }, + "alert_feed": { + "waiting": "Waiting for market events triggering alerts...", + "table": { + "ticker_alert": "Ticker / Alert", + "severity": "Severity", + "logic": "Trigger Logic", + "event": "Event", + "time": "Time" + } + }, + "details": { + "price": "Price", + "ask": "@:{'terms.ask'}: {value}", + "bid": "@:{'terms.bid'}: {value}", + "spread": "@:{'terms.spread'}", + "buy_volume": "Buy Volume", + "vwap": "@:{'terms.vwap'}: {value}", + "change": "Change: {value}", + "sell_volume": "Sell Volume", + "buy_volume_value": "Buy Volume: {value}", + "sell_volume_value": "Sell Volume: {value}" + }, + "point_table": { + "table": { + "ticker": "@:terms.material_ticker", + "price": "@:terms.price", + "bid": "@:terms.bid", + "ask": "@:terms.ask", + "spread_pct": "Spread %", + "buy_volume": "Buy Vol.", + "sell_volume": "Sell Vol." + } + }, + "history": { + "title": "Data History", + "received": "{value} @:terms.material_ticker received" + }, + "rule_builder": { + "new_rule_name": "New Rule", + "buttons": { + "add_condition": "Condition", + "add_group": "Group", + "remove": "Remove" + }, + "error": "Error: {value}", + "empty": "Empty Group" + }, + "alert_manager": { + "title": "Alert Manager", + "title_editing": "Edit Alert", + "info": "Alerts are currently stored on this device only and are not synced to your account.", + "no_alerts": "No alerts found. Start by creating your first detector signal", + "buttons": { + "create_alert": "Create New Alert", + "discard": "@:common.buttons.discard", + "save": "@:common.buttons.save", + "delete": "@:common.buttons.delete" + }, + "form": { + "alert_name": "Alert Name", + "severity": "Severity", + "status": "Status", + "logic_configuration": "Logic Configuration", + "previous_datapoint": "Previous Datepoint" + } + } + } +} diff --git a/src/locales/it_IT/material_tile.json b/src/locales/it_IT/material_tile.json new file mode 100644 index 00000000..7feabd58 --- /dev/null +++ b/src/locales/it_IT/material_tile.json @@ -0,0 +1,23 @@ +{ + "information": { + "title": "Material Information", + "table": { + "category": "Category", + "weight": "Weight", + "volume": "Volume" + } + }, + "indicator": { + "value": "Value", + "max": "Maximum", + "pct_max": "% / Max" + }, + "chart": { + "title": "Market History", + "labels": { + "traded": "Traded Volume", + "low_p": "Daily Minimum Price", + "high_p": "Daily Maximum Price" + } + } +} diff --git a/src/locales/it_IT/plan.json b/src/locales/it_IT/plan.json new file mode 100644 index 00000000..1b01bf38 --- /dev/null +++ b/src/locales/it_IT/plan.json @@ -0,0 +1,298 @@ +{ + "notifications": { + "must_have_name": "Must set a plan name in Configuration to save" + }, + "tools": { + "labels": { + "popr": "POPR", + "visitation_frequency": "Visitation Frequency", + "construction_cart": "Construction Cart", + "supply_cart": "Supply Cart", + "repair_analysis": "Repair Analysis", + "workforce": "Workforce" + }, + "popr": { + "title": "Latest Population Report", + "error": "Error loading latest population report. The planet might not have population.", + "loading": "Loading Population Report" + }, + "visitation_frequency": { + "title": "Visitation Frequency", + "storage": { + "label": "Storage", + "info": "Your plan involves adding {storages} giving you a total storage capacity of {total_weight} t and {total_volume} m³.", + "info_no_storage": "Your plan has a total storage capacity of {total_weight} t and {total_volume} m³.", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "storage_filled": "Storage Filled", + "filled_unit": "days" + }, + "exclusion_info": "Exclude local materials from visitation frequency calculation for items handled exclusively planet-side, like local market sales, purchases or contracts." + }, + "shipping": { + "label": "Shipping", + "table": { + "ship_weight": "Ship t", + "ship_volume": "Ship m³", + "visitation_days": "Visitation (days)", + "limit": "Limit", + "export_frequency": "@:terms.export Frequency", + "import_frequency": "@:terms.import Frequency" + } + } + }, + "construction_cart": { + "title": "Construction Cart", + "unplanned_info": "Base has unplanned {buildings} (FIO: {fio_updated}). Demolish to ensure area, habitation and materials are accurate.", + "table": { + "building": "@:terms.buildings", + "built": "Built", + "amount": "Amount", + "habitation_info": "Insufficient habitation will reduce production efficiency.", + "planned": "Planned", + "materials_sum": "Materials Sum", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume", + "material": "Material", + "storage": "Storage", + "stock": "Stock", + "stock_override": "Stock Override", + "need": "Need" + } + }, + "supply_cart": { + "title": "Supply Cart", + "info": { + "p": "The Supply Cart provides updates on your plans needs combined with existing inventory sourced from FIO. You have the flexibility to opt for alternative storage locations to replenish your base. Tailor your selection based on whether you wish to restock workforce and production supplies or focus on a specific category, and specify the duration for which the supplied stock should sustain. Use the {link} tool for more advanced supply cart options.", + "link": "FIO Burn" + }, + "buttons": { + "all": "All", + "workforce": "Workforce", + "production": "Production" + }, + "table": { + "stock_duration": "Stock Duration (days)", + "storage": "Storage", + "xit_name": "Supply Cart", + "ticker": "Ticker", + "daily_need": "Daily Need", + "daily_cost": "Daily Cost", + "stock": "Stock", + "full_need": "Full Need", + "final_need": "Final Need", + "weight": "t", + "volume": "m³", + "workforce": "Workforce", + "production": "Production", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + } + }, + "repair_analysis": { + "title": "Repair Analysis", + "plan": "@:terms.plan", + "table": { + "select_day": "Select Day", + "material": "Material", + "amount": "Amount", + "cost": "Cost", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + }, + "graph": { + "select_building": "Select @:terms.buildings", + "individual_building": "Individual @:terms.buildings", + "repair_cost_breakdown": "Repair Cost Breakdown" + } + }, + "cogm": { + "title": "Cost of Goods Manufactured", + "cogm": "@:terms.cogm", + "info": "The cost of goods manufactured is calculated using plan settings that factor in production efficiency, recipe runtime, building degradation, input material costs, labor requirements, and associated labor costs. The final cost is shown per unit of output, based on quantity or full cost allocation.", + "cx_preferences": "@:terms.cx_plural Preferences", + "empire_ticker": "@:terms.empire Ticker", + "planet_ticker": "@:terms.planet Ticker", + "table": { + "parameters": "Parameters", + "recipe_runtime": "@:terms.recipes Runtime", + "percent_day": "% / day", + "efficiency": "Efficiency", + "degradation": "Degradation", + "cost": "@:terms.cost", + "materials": "@:terms.materials_plural", + "input_total": "Input Total", + "material": "@:terms.materials", + "cost_unit": "ȼ / Unit", + "cost_total": "Cost Total", + "cost_total_unit": "ȼ Total", + "workforce": "Workforce", + "total_cost": "Total Cost", + "recipe_profit": "@:terms.recipes Profit", + "cost_split": "Cost Split" + } + }, + "plan_analytics": { + "title": "Planning Insights", + "info": "Insights are aggregated from active player plans on {planet}. PRUNplanner enforces minimum sample thresholds to ensure both anonymity and statistical accuracy.", + "labels": { + "experts": "Experts", + "production_buildings": "Production @:terms.buildings_plural", + "recipes": "@:terms.recipes_plural" + } + } + }, + "components": { + "status": { + "hq": "HQ", + "cogc": "@:{'terms.cogc'}:", + "area": "@:{'terms.area'}:", + "profit": "@:{'terms.profit'}:", + "experts": "@:{'terms.experts_plural'}:" + }, + "configuration": { + "label": "Configuration", + "name": "Name", + "empire": "@:terms.empire" + }, + "area": { + "permits": "@:terms.permits_plural", + "area": "@:terms.area", + "free": "Free" + }, + "bonuses": { + "corp_hq": "Corp. HQ", + "corp_hq_tooltip": "The corporation you belong to has its headquarters on this planet (not your individual company).", + "cogc": "@:terms.cogc" + }, + "infrastructure": { + "label": "Infrastructure", + "auto_optimize": "Auto-Optimize Habs", + "auto_optimize_tooltip": "Automatically optimize habitations to meet workforce needs as buildings are added.", + "buttons": { + "optimize_cost": "Optimize Cost", + "optimize_area": "Optimize Area" + } + }, + "experts": { + "label": "Experts", + "warning": "Maximum number of experts on a base is 6. You currently have {expert_number} experts assigned." + }, + "workforce": { + "label": "Workforce", + "table": { + "type": "Type", + "need": "Need", + "supply": "Supply", + "open": "Open", + "luxuries": "Luxuries", + "pct_eff": "Eff. %" + } + }, + "overview": { + "label": "Overview", + "table": { + "daily_cost": "Daily Cost", + "degradation": "Degradation", + "plan_cost": "Plan Cost", + "daily_profit": "Daily Profit", + "roi": "ROI", + "profit_area": "@:terms.profit_per_area" + } + }, + "storage": { + "label": "Storage", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "filled": "Filled" + } + }, + "materialio": { + "label": "Material I/O", + "label_production": "Production", + "label_workforce": "Workforce", + "buttons": { + "toggle_weight_volume": "Toggle Weight & Volume", + "toggle_production_workforce": "Toggle Production & Workforce Split" + }, + "table": { + "input": "In", + "output": "Out", + "delta": "Δ", + "cost_day": "ȼ / day", + "total_weight": "Δ t", + "total_volume": "Δ m³" + } + }, + "save_as": { + "title": "Save As", + "form": { + "plan_name": "Name", + "plan_name_placeholder": "New @:terms.plan Name", + "empire": "@:terms.empire" + } + }, + "production": { + "label": "Production", + "planet_resources": "@:terms.planets @:terms.resources_plural", + "form": { + "match_cogc": "Match @:terms.cogc", + "select_placeholder": "Select @:terms.buildings & Add to @:terms.plan" + }, + "table": { + "building_recipe": "@:terms.buildings / @:terms.recipes", + "runtime": "Runtime", + "share": "Share", + "tools": "Tools" + } + }, + "production_building": { + "no_recipe": "No Active @:terms.recipes_plural", + "qty": "Qty", + "buttons": { + "add_recipe": "@:terms.recipes" + }, + "table": { + "expertise": "Expertise", + "efficiency": "Efficiency", + "revenue": "@:terms.revenue", + "area": "@:terms.area", + "construction": "Construction" + } + }, + "production_recipe": { + "cogm_title": "Cost Of Goods Manufactured", + "cogm_error": "COGM Calculation not possible. Check your Management View if your Empire has a CX assigned.", + "buttons": { + "cogm": "@:terms.cogm" + }, + "table": { + "input": "Input", + "time": "Time", + "output": "Output", + "daily_revenue": "ȼ / Day", + "profit_area": "ȼ / Area", + "roi": "ROI" + }, + "info": { + "p1_strong": "Revenue / Day", + "p1": "is calculated by taking the daily income generated from a recipe and subtracting both the daily workforce cost (all luxuries provided) and the daily building degradation cost (1/180th of the construction cost). The income from the recipe is based on the difference between the input material costs and the output material values.", + "p2_strong": "ȼ / Area", + "p2": "is the daily revenue divided by the area for one production building and its proportionate share of the area for a CM and habs required for an optimal base of such buildings in Recipe ROI.", + "p3_strong": "ROI", + "p3": "is the time required for a continuously operating recipe to generate enough revenue to offset the building's construction cost. This considers daily degradation and workforce costs as well." + } + } + } +} diff --git a/src/locales/it_IT/profile.json b/src/locales/it_IT/profile.json index 4bf31dae..cdc413fb 100644 --- a/src/locales/it_IT/profile.json +++ b/src/locales/it_IT/profile.json @@ -42,7 +42,7 @@ "title": "What is FIO & Why should you use it?", "help": { "title": "5 Easy Steps to Integrate FIO and PRUNplanner", - "p1": "FIO is a community developed {link} that collects your game data, makes it available outside of @:terms.prosperous_universe and is completely free to use.", + "p1": "FIO is a community developed {link} that collects your game data, makes it available outside of Prosperous Universe and is completely free to use.", "p2": "Just go ahead and install the Chrome or Firefox extension, reload your browser with APEX open and click the extension button in the upper-right in your browser to create an account. FIO will automatically collect (only) your game data while you keep playing.", "p3": "You can now login to the {link} to see your data and create an API-Key PRUNplanner will use to import your storage (materials you have somewhere) and sites (planets, ships, warehouses) data.", "p4": "Creating the key is easy, if you head to the {link} page and click the \"Create API Key\" button. Enter a name for your key (e.g., \"PRUNplanner\") and your FIO password. You don't need to \"Allow Writes\" as PRUNplanner will not manipulate any of your data, the tool just reads and uses it.", @@ -71,6 +71,7 @@ "form": { "tool_preferences": "Tool Preferences", "language": "Language", + "language_note": "We want to make PRUNplanner accessible to everyone. If you'd like to see the tool in your native language - or help us polish an existing translation - join our localization project on {link}.", "default_empire": "Default Empire", "default_cx": "Default CX", "fio_burn": "FIO Burn", diff --git a/src/locales/it_IT/sharing.json b/src/locales/it_IT/sharing.json new file mode 100644 index 00000000..fc01f576 --- /dev/null +++ b/src/locales/it_IT/sharing.json @@ -0,0 +1,11 @@ +{ + "info": "This will create an unique link that can be shared with others. They will be able to see your plan, but don't modify it. The link becomes unavailable once you choose to stop sharing or delete the plan.", + "share_count": "You're currently sharing this plan. It has been viewed {count} times", + "buttons": { + "create_link": "Create Sharing Link", + "copy_url": "Copy URL", + "stop_sharing": "Stop Sharing", + "views": "{count} Views", + "share": "Share" + } +} diff --git a/src/locales/it_IT/terms.json b/src/locales/it_IT/terms.json index b7ead843..ec554d8b 100644 --- a/src/locales/it_IT/terms.json +++ b/src/locales/it_IT/terms.json @@ -1,11 +1,15 @@ { "30d": "30D", "7d": "7D", + "amount": "Amount", "api_key": "API Key", + "area": "Area", "ask": "Ask", "bid": "Bid", "buffer": "Buffer", + "buildings_plural": "Buildings", "buildings": "Building | Buildings", + "burn": "Burn", "cogc": "COGC", "cogm": "COGM", "consumption": "Consumption", @@ -15,8 +19,12 @@ "delta_price": "ȼ Delta", "delta": "Delta", "demand": "Demand", + "empire_plural": "Empires", "empire": "Empire | Empires", "exchanges": "Exchange | Exchanges", + "experts_plural": "Experts", + "experts": "Expert | Experts", + "export": "Export", "faction": "Faction", "fertility": "Fertility", "filter": "Filter", @@ -25,10 +33,12 @@ "gravity": "Gravity", "high": "High", "hq": "HQ", + "import": "Import", "low": "Low", "material_ticker": "Ticker", "materials_plural": "Materials", "materials": "Material | Materials", + "override": "Override", "permits_plural": "Permits", "permits": "Permit | Permits", "plan": "Plan | Plans", @@ -37,22 +47,27 @@ "plans_plural": "Plans", "popr": "POPR", "pressure": "Pressure", + "price": "Price", "production": "Production", "profit_per_area": "Profit / Area", "profit": "Profit", + "recipes_plural": "Recipes", "recipes": "Recipe | Recipes", "resources_plural": "Resources", "resources": "Resource | Resources", "revenue": "Revenue", "rocky": "Rocky", "spread": "Spread", + "stock": "Stock", + "storage": "Storage", + "sum": "∑", "supply": "Supply", "surface": "Surface", "temperature": "Temperature", + "total_volume": "Total Volume", + "total_weight": "Total Weight", "trend": "Trend", "volume": "Volume", "vwap": "VWAP", - "weight": "Weight", - "amount": "Amount", - "storage": "Storage" + "weight": "Weight" } diff --git a/src/locales/it_IT/xit.json b/src/locales/it_IT/xit.json new file mode 100644 index 00000000..7d505bd8 --- /dev/null +++ b/src/locales/it_IT/xit.json @@ -0,0 +1,26 @@ +{ + "form": { + "origin": "Origin", + "target_days": "Target Days", + "buy_from_cx": "Buy From CX", + "buy_from_cx_warning": "Only warehouse origin allows purchasing.", + "fit_ship": "Fit Ship", + "hide_infinite": "Hide Infinite", + "json": "JSON" + }, + "buttons": { + "copy_json": "Copy XIT JSON", + "copy": "@:common.buttons.copy" + }, + "table": { + "ticker": "@:terms.material_ticker", + "stock": "@:terms.stock", + "delta": "@:terms.delta", + "burn": "@:terms.burn", + "amount": "@:terms.amount", + "override": "@:terms.override", + "weight_value": "@:{'terms.weight'}: {value}", + "volume_value": "@:{'terms.volume'}: {value}", + "price_value": "@:{'terms.price'}: {value}" + } +} diff --git a/src/locales/ja_JP/account.json b/src/locales/ja_JP/account.json new file mode 100644 index 00000000..f6fdc2c0 --- /dev/null +++ b/src/locales/ja_JP/account.json @@ -0,0 +1,81 @@ +{ + "components": { + "login": { + "title": "Login", + "error": "Error logging in. Please check your username and password.", + "buttons": { + "login": "Login" + }, + "form": { + "username": "Username", + "password": "Password" + }, + "tos": "By using PRUNplanner you agree to the {tos_link}.", + "tos_link": "Terms of Service", + "forgot": "Forgot your password? Request a {forgot_link}.", + "forgot_link": "Password Reset" + }, + "registration": { + "title": "Account Information", + "tos": "PRUNplanner is free to use. By creating an account, you acknowledge and agree to the {tos_link}.", + "tos_link": "Terms of Service", + "result": { + "ok_header": "Welcome, {username}!", + "ok_message": "Registration succesful. You can now login to PRUNplanner.", + "error": "Error during registration." + }, + "buttons": { + "register": "Create Account" + }, + "form": { + "username": "Username", + "username_info": "Must be at least 3 characters long. Can't contain spaces.", + "password": "Password", + "password_info": "Must be at least 8 characters long.", + "email": "Email", + "email_placeholder": "Not mandatory, but recommended.", + "email_info": "Not mandatory. Increases your account security.", + "security_question": "Security Question", + "question": "Enter the name of planet {planet}. To find it, open a new Prosperous Universe buffer with the command {command}. You'll see the planets name listed under 'Name' in the planet information", + "planet_name": "Name" + } + }, + "password_reset": { + "title": "Reset your Password", + "info": "Please enter the code sent to your email, along with your new password.", + "buttons": { + "send": "Reset Password" + }, + "form": { + "email": "Email", + "code": "Code", + "password": "Password", + "password_info": "Must be at least 8 characters long." + } + }, + "request_password_reset": { + "title": "Password Reset Request", + "info": "Enter the verified email address linked to your PRUNplanner account. If we recognize it, we'll send you a code to reset your password.", + "form": { + "email_placeholder": "Email Address" + }, + "buttons": { + "send": "Request Password Reset" + } + }, + "verify_email": { + "title": "Email Verification", + "info": "Please enter the verification code you received via email. Maybe check your spam folder.", + "buttons": { + "send": "Verify Email Address" + }, + "form": { + "code_placeholder": "Verification Code" + }, + "result": { + "ok": "Email address verified.", + "error": "Invalid code or already verified." + } + } + } +} diff --git a/src/locales/ja_JP/common.json b/src/locales/ja_JP/common.json index e80606df..60ae9f5a 100644 --- a/src/locales/ja_JP/common.json +++ b/src/locales/ja_JP/common.json @@ -33,6 +33,7 @@ "buttons": { "create": "Create", "save": "Save", + "save_as": "Save As", "reload": "Reload", "show": "Show", "hide": "Hide", @@ -40,9 +41,24 @@ "search": "Search", "default": "Default", "select_all": "Select All", + "discard": "Discard", "yes": "Yes", "no": "No", "delete": "Delete", - "cancel": "Cancel" + "cancel": "Cancel", + "clone_plan": "Clone Plan", + "clone_complete": "Cloning Complete", + "copy": "Copy" + }, + "ui": { + "placeholder": { + "please_input": "Please Input", + "please_select": "Please Select", + "search": "Search" + }, + "select": { + "no_results": "No Results", + "select_options": "Select Options" + } } } diff --git a/src/locales/ja_JP/exchanges.json b/src/locales/ja_JP/exchanges.json new file mode 100644 index 00000000..8c599196 --- /dev/null +++ b/src/locales/ja_JP/exchanges.json @@ -0,0 +1,55 @@ +{ + "view_title": "Exchanges", + "title": "Exchanges", + "errors": { + "title": "No Preferences", + "message": "You don't have exchange preferences. Head to Management and create your first." + }, + "buttons": { + "csv_import_export": "@:exchanges.components.csv_import_export.title", + "save": "@:common.buttons.save", + "reload": "@:common.buttons.reload" + }, + "configuration": { + "form": { + "preference_name": "Preference Name", + "empire_preferences": "Empire Preferences", + "exchange": "Exchange", + "ticker": "@:terms.material_ticker" + } + }, + "preference_type": { + "BUY": "BUY", + "SELL": "SELL", + "BOTH": "BOTH" + }, + "components": { + "ticker": { + "no_data": "No @:terms.material_ticker Preferences Configured", + "material_placeholder": "@:terms.materials" + }, + "exchanges": { + "no_data": "No @:terms.exchanges Preference Configured" + }, + "planet_preferences": { + "title": "Planet Preferences", + "form": { + "exchange": "@:terms.exchanges", + "ticker": "@:terms.material_ticker" + }, + "table": { + "planet": "@:terms.planets", + "exchange_preference": "@:terms.exchanges Preferences", + "ticker_preference": "@:terms.material_ticker Preferences" + } + }, + "csv_import_export": { + "title": "Import / Export CSV", + "warning": "Warning: Importing deletes all existing properties and imports the new ones. You need to save your imported preferences after uploading the CSV file or use the reload button to discard them.", + "buttons": { + "import": "Import Settings", + "export": "Export Settings" + } + } + } +} diff --git a/src/locales/ja_JP/fio.json b/src/locales/ja_JP/fio.json new file mode 100644 index 00000000..a104665d --- /dev/null +++ b/src/locales/ja_JP/fio.json @@ -0,0 +1,49 @@ +{ + "burn": { + "view_title": "FIO Burn", + "title": "FIO Burn:", + "fio_last_update": "FIO Data Update: {last_updated}", + "form": { + "empire": "@:terms.empire", + "burn_thresholds": "Burn Thresholds", + "red": "Red", + "yellow": "Yellow" + }, + "components": { + "overview": { + "title": "Plan Burn Overview", + "table": { + "plan": "@:terms.plan", + "planet": "@:terms.planets", + "burn": "Burn" + } + }, + "plans": { + "xit_title": "XIT Resupply: {plan_name}", + "table": { + "ticker": "@:terms.material_ticker", + "consumption": "@:terms.consumption", + "production": "@:terms.production", + "delta": "@:terms.delta", + "stock": "@:terms.stock", + "plan": "@:terms.plan", + "burn": "Burn", + "exhaustion": "Exhaustion" + } + } + } + }, + "repair": { + "view_title": "FIO Repair", + "title": "FIO Repair", + "fio_last_update": "FIO Data Update: {last_updated}", + "table": { + "title": "@:terms.planet_plural", + "planet": "@:terms.planets", + "buildings": "@:terms.buildings_plural", + "avg_condition": "⌀ Condition", + "min_condition": "Min. Condition", + "repair_age": "Repair Age" + } + } +} diff --git a/src/locales/ja_JP/game.json b/src/locales/ja_JP/game.json index 8351bc83..f3e19d40 100644 --- a/src/locales/ja_JP/game.json +++ b/src/locales/ja_JP/game.json @@ -4,6 +4,21 @@ "PLANETARY": "Planetary", "PRODUCTION": "Production" }, + "workforce_type": { + "pioneer": "Pioneer", + "settler": "Settler", + "technician": "Technician", + "engineer": "Engineer", + "scientist": "Scientist" + }, + "efficiency_type": { + "WORKFORCE": "Workforce", + "HQ": "HQ", + "EXPERT": "Experts", + "COGC": "COGC", + "FERTILITY": "Fertility", + "FACTION": "Faction" + }, "expertise": { "AGRICULTURE": "Agriculture", "CHEMISTRY": "Chemistry", @@ -51,6 +66,42 @@ "WORKFORCE_ENGINEERS": "ENG", "WORKFORCE_SCIENTISTS": "SCI" }, + "material_category": { + "agricultural_products": "Agricultural Products", + "alloys": "Alloys", + "chemicals": "Chemicals", + "construction_materials": "Construction Materials", + "construction_parts": "Construction Parts", + "construction_prefabs": "Construction Prefabs", + "consumable_bundles": "Consumable Bundles", + "consumables_(basic)": "Consumables Basic", + "consumables_(luxury)": "Consumables Luxury", + "drones": "Drones", + "electronic_devices": "Electronic Devices", + "electronic_parts": "Electronic Parts", + "electronic_pieces": "Electronic Pieces", + "electronic_systems": "Electronic Systems", + "elements": "Elements", + "energy_systems": "Energy Systems", + "fuels": "Fuels", + "gases": "Gases", + "liquids": "Liquids", + "medical_equipment": "Medical Equipment", + "metals": "Metals", + "minerals": "Minerals", + "ores": "Ores", + "plastics": "Plastics", + "ship_engines": "Ship Engines", + "ship_kits": "Ship Kits", + "ship_parts": "Ship Parts", + "ship_shields": "Ship Shields", + "software_components": "Software Components", + "software_systems": "Software Systems", + "software_tools": "Software Tools", + "textiles": "Textiles", + "unit_prefabs": "Unit Prefabs", + "utility": "Utility" + }, "upkeep": { "safety": "Safety", "health": "Health", diff --git a/src/locales/ja_JP/government.json b/src/locales/ja_JP/government.json new file mode 100644 index 00000000..2a00d90b --- /dev/null +++ b/src/locales/ja_JP/government.json @@ -0,0 +1,16 @@ +{ + "popr_button": { + "no_data": "Planet {planet_id} has no population data", + "buttons": { + "no_popr": "No POPR" + }, + "table": { + "total_population": "Total Population", + "free_population": "Free Population", + "free_population_pct": "Free Population %", + "unfilled_jobs": "Unfilled Jobs", + "plan_need": "@:terms.plan Need", + "plan_check": "@:terms.plan Check" + } + } +} diff --git a/src/locales/ja_JP/homepage.json b/src/locales/ja_JP/homepage.json index dbdb94e7..5c8aa103 100644 --- a/src/locales/ja_JP/homepage.json +++ b/src/locales/ja_JP/homepage.json @@ -62,7 +62,7 @@ "section_title": "Powered by tools we love to use" }, "open_source": { - "section_title": "Free & Open Source", + "section_title": "Free & Open Source", "section_lead": "PRUNplanner is completely free to use, and its frontend is fully {link}.", "prompt": "Love it? We'd be thrilled if you contributed!", "link_open_source": "Open Source" diff --git a/src/locales/ja_JP/market_live.json b/src/locales/ja_JP/market_live.json new file mode 100644 index 00000000..ca5a5b21 --- /dev/null +++ b/src/locales/ja_JP/market_live.json @@ -0,0 +1,101 @@ +{ + "view_title": "Market Live", + "title": "Market Live", + "status": { + "connected": "Connected", + "disconnected": "Disconnected" + }, + "severity_type": { + "LOW": "LOW", + "MEDIUM": "MEDIUM", + "HIGH": "HIGH" + }, + "status_type": { + "active": "Active", + "paused": "Paused" + }, + "rule_type": { + "static": "Value", + "previous": "Previous", + "previous_pct": "Offset %", + "text": "Text" + }, + "components": { + "feed": { + "title": "Alert Feed", + "buttons": { + "open_manager": "Open Alert Manager", + "close_manager": "Close Alert Manager", + "clear_feed": "Clear Feed", + "show_overview": "Show Overview", + "hide_overview": "Hide Overview" + } + }, + "alert_feed": { + "waiting": "Waiting for market events triggering alerts...", + "table": { + "ticker_alert": "Ticker / Alert", + "severity": "Severity", + "logic": "Trigger Logic", + "event": "Event", + "time": "Time" + } + }, + "details": { + "price": "Price", + "ask": "@:{'terms.ask'}: {value}", + "bid": "@:{'terms.bid'}: {value}", + "spread": "@:{'terms.spread'}", + "buy_volume": "Buy Volume", + "vwap": "@:{'terms.vwap'}: {value}", + "change": "Change: {value}", + "sell_volume": "Sell Volume", + "buy_volume_value": "Buy Volume: {value}", + "sell_volume_value": "Sell Volume: {value}" + }, + "point_table": { + "table": { + "ticker": "@:terms.material_ticker", + "price": "@:terms.price", + "bid": "@:terms.bid", + "ask": "@:terms.ask", + "spread_pct": "Spread %", + "buy_volume": "Buy Vol.", + "sell_volume": "Sell Vol." + } + }, + "history": { + "title": "Data History", + "received": "{value} @:terms.material_ticker received" + }, + "rule_builder": { + "new_rule_name": "New Rule", + "buttons": { + "add_condition": "Condition", + "add_group": "Group", + "remove": "Remove" + }, + "error": "Error: {value}", + "empty": "Empty Group" + }, + "alert_manager": { + "title": "Alert Manager", + "title_editing": "Edit Alert", + "info": "Alerts are currently stored on this device only and are not synced to your account.", + "no_alerts": "No alerts found. Start by creating your first detector signal", + "buttons": { + "create_alert": "Create New Alert", + "discard": "@:common.buttons.discard", + "save": "@:common.buttons.save", + "delete": "@:common.buttons.delete" + }, + "form": { + "alert_name": "Alert Name", + "severity": "Severity", + "status": "Status", + "logic_configuration": "Logic Configuration", + "previous_datapoint": "Previous Datepoint" + } + } + } +} diff --git a/src/locales/ja_JP/material_tile.json b/src/locales/ja_JP/material_tile.json new file mode 100644 index 00000000..7feabd58 --- /dev/null +++ b/src/locales/ja_JP/material_tile.json @@ -0,0 +1,23 @@ +{ + "information": { + "title": "Material Information", + "table": { + "category": "Category", + "weight": "Weight", + "volume": "Volume" + } + }, + "indicator": { + "value": "Value", + "max": "Maximum", + "pct_max": "% / Max" + }, + "chart": { + "title": "Market History", + "labels": { + "traded": "Traded Volume", + "low_p": "Daily Minimum Price", + "high_p": "Daily Maximum Price" + } + } +} diff --git a/src/locales/ja_JP/plan.json b/src/locales/ja_JP/plan.json new file mode 100644 index 00000000..1b01bf38 --- /dev/null +++ b/src/locales/ja_JP/plan.json @@ -0,0 +1,298 @@ +{ + "notifications": { + "must_have_name": "Must set a plan name in Configuration to save" + }, + "tools": { + "labels": { + "popr": "POPR", + "visitation_frequency": "Visitation Frequency", + "construction_cart": "Construction Cart", + "supply_cart": "Supply Cart", + "repair_analysis": "Repair Analysis", + "workforce": "Workforce" + }, + "popr": { + "title": "Latest Population Report", + "error": "Error loading latest population report. The planet might not have population.", + "loading": "Loading Population Report" + }, + "visitation_frequency": { + "title": "Visitation Frequency", + "storage": { + "label": "Storage", + "info": "Your plan involves adding {storages} giving you a total storage capacity of {total_weight} t and {total_volume} m³.", + "info_no_storage": "Your plan has a total storage capacity of {total_weight} t and {total_volume} m³.", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "storage_filled": "Storage Filled", + "filled_unit": "days" + }, + "exclusion_info": "Exclude local materials from visitation frequency calculation for items handled exclusively planet-side, like local market sales, purchases or contracts." + }, + "shipping": { + "label": "Shipping", + "table": { + "ship_weight": "Ship t", + "ship_volume": "Ship m³", + "visitation_days": "Visitation (days)", + "limit": "Limit", + "export_frequency": "@:terms.export Frequency", + "import_frequency": "@:terms.import Frequency" + } + } + }, + "construction_cart": { + "title": "Construction Cart", + "unplanned_info": "Base has unplanned {buildings} (FIO: {fio_updated}). Demolish to ensure area, habitation and materials are accurate.", + "table": { + "building": "@:terms.buildings", + "built": "Built", + "amount": "Amount", + "habitation_info": "Insufficient habitation will reduce production efficiency.", + "planned": "Planned", + "materials_sum": "Materials Sum", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume", + "material": "Material", + "storage": "Storage", + "stock": "Stock", + "stock_override": "Stock Override", + "need": "Need" + } + }, + "supply_cart": { + "title": "Supply Cart", + "info": { + "p": "The Supply Cart provides updates on your plans needs combined with existing inventory sourced from FIO. You have the flexibility to opt for alternative storage locations to replenish your base. Tailor your selection based on whether you wish to restock workforce and production supplies or focus on a specific category, and specify the duration for which the supplied stock should sustain. Use the {link} tool for more advanced supply cart options.", + "link": "FIO Burn" + }, + "buttons": { + "all": "All", + "workforce": "Workforce", + "production": "Production" + }, + "table": { + "stock_duration": "Stock Duration (days)", + "storage": "Storage", + "xit_name": "Supply Cart", + "ticker": "Ticker", + "daily_need": "Daily Need", + "daily_cost": "Daily Cost", + "stock": "Stock", + "full_need": "Full Need", + "final_need": "Final Need", + "weight": "t", + "volume": "m³", + "workforce": "Workforce", + "production": "Production", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + } + }, + "repair_analysis": { + "title": "Repair Analysis", + "plan": "@:terms.plan", + "table": { + "select_day": "Select Day", + "material": "Material", + "amount": "Amount", + "cost": "Cost", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + }, + "graph": { + "select_building": "Select @:terms.buildings", + "individual_building": "Individual @:terms.buildings", + "repair_cost_breakdown": "Repair Cost Breakdown" + } + }, + "cogm": { + "title": "Cost of Goods Manufactured", + "cogm": "@:terms.cogm", + "info": "The cost of goods manufactured is calculated using plan settings that factor in production efficiency, recipe runtime, building degradation, input material costs, labor requirements, and associated labor costs. The final cost is shown per unit of output, based on quantity or full cost allocation.", + "cx_preferences": "@:terms.cx_plural Preferences", + "empire_ticker": "@:terms.empire Ticker", + "planet_ticker": "@:terms.planet Ticker", + "table": { + "parameters": "Parameters", + "recipe_runtime": "@:terms.recipes Runtime", + "percent_day": "% / day", + "efficiency": "Efficiency", + "degradation": "Degradation", + "cost": "@:terms.cost", + "materials": "@:terms.materials_plural", + "input_total": "Input Total", + "material": "@:terms.materials", + "cost_unit": "ȼ / Unit", + "cost_total": "Cost Total", + "cost_total_unit": "ȼ Total", + "workforce": "Workforce", + "total_cost": "Total Cost", + "recipe_profit": "@:terms.recipes Profit", + "cost_split": "Cost Split" + } + }, + "plan_analytics": { + "title": "Planning Insights", + "info": "Insights are aggregated from active player plans on {planet}. PRUNplanner enforces minimum sample thresholds to ensure both anonymity and statistical accuracy.", + "labels": { + "experts": "Experts", + "production_buildings": "Production @:terms.buildings_plural", + "recipes": "@:terms.recipes_plural" + } + } + }, + "components": { + "status": { + "hq": "HQ", + "cogc": "@:{'terms.cogc'}:", + "area": "@:{'terms.area'}:", + "profit": "@:{'terms.profit'}:", + "experts": "@:{'terms.experts_plural'}:" + }, + "configuration": { + "label": "Configuration", + "name": "Name", + "empire": "@:terms.empire" + }, + "area": { + "permits": "@:terms.permits_plural", + "area": "@:terms.area", + "free": "Free" + }, + "bonuses": { + "corp_hq": "Corp. HQ", + "corp_hq_tooltip": "The corporation you belong to has its headquarters on this planet (not your individual company).", + "cogc": "@:terms.cogc" + }, + "infrastructure": { + "label": "Infrastructure", + "auto_optimize": "Auto-Optimize Habs", + "auto_optimize_tooltip": "Automatically optimize habitations to meet workforce needs as buildings are added.", + "buttons": { + "optimize_cost": "Optimize Cost", + "optimize_area": "Optimize Area" + } + }, + "experts": { + "label": "Experts", + "warning": "Maximum number of experts on a base is 6. You currently have {expert_number} experts assigned." + }, + "workforce": { + "label": "Workforce", + "table": { + "type": "Type", + "need": "Need", + "supply": "Supply", + "open": "Open", + "luxuries": "Luxuries", + "pct_eff": "Eff. %" + } + }, + "overview": { + "label": "Overview", + "table": { + "daily_cost": "Daily Cost", + "degradation": "Degradation", + "plan_cost": "Plan Cost", + "daily_profit": "Daily Profit", + "roi": "ROI", + "profit_area": "@:terms.profit_per_area" + } + }, + "storage": { + "label": "Storage", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "filled": "Filled" + } + }, + "materialio": { + "label": "Material I/O", + "label_production": "Production", + "label_workforce": "Workforce", + "buttons": { + "toggle_weight_volume": "Toggle Weight & Volume", + "toggle_production_workforce": "Toggle Production & Workforce Split" + }, + "table": { + "input": "In", + "output": "Out", + "delta": "Δ", + "cost_day": "ȼ / day", + "total_weight": "Δ t", + "total_volume": "Δ m³" + } + }, + "save_as": { + "title": "Save As", + "form": { + "plan_name": "Name", + "plan_name_placeholder": "New @:terms.plan Name", + "empire": "@:terms.empire" + } + }, + "production": { + "label": "Production", + "planet_resources": "@:terms.planets @:terms.resources_plural", + "form": { + "match_cogc": "Match @:terms.cogc", + "select_placeholder": "Select @:terms.buildings & Add to @:terms.plan" + }, + "table": { + "building_recipe": "@:terms.buildings / @:terms.recipes", + "runtime": "Runtime", + "share": "Share", + "tools": "Tools" + } + }, + "production_building": { + "no_recipe": "No Active @:terms.recipes_plural", + "qty": "Qty", + "buttons": { + "add_recipe": "@:terms.recipes" + }, + "table": { + "expertise": "Expertise", + "efficiency": "Efficiency", + "revenue": "@:terms.revenue", + "area": "@:terms.area", + "construction": "Construction" + } + }, + "production_recipe": { + "cogm_title": "Cost Of Goods Manufactured", + "cogm_error": "COGM Calculation not possible. Check your Management View if your Empire has a CX assigned.", + "buttons": { + "cogm": "@:terms.cogm" + }, + "table": { + "input": "Input", + "time": "Time", + "output": "Output", + "daily_revenue": "ȼ / Day", + "profit_area": "ȼ / Area", + "roi": "ROI" + }, + "info": { + "p1_strong": "Revenue / Day", + "p1": "is calculated by taking the daily income generated from a recipe and subtracting both the daily workforce cost (all luxuries provided) and the daily building degradation cost (1/180th of the construction cost). The income from the recipe is based on the difference between the input material costs and the output material values.", + "p2_strong": "ȼ / Area", + "p2": "is the daily revenue divided by the area for one production building and its proportionate share of the area for a CM and habs required for an optimal base of such buildings in Recipe ROI.", + "p3_strong": "ROI", + "p3": "is the time required for a continuously operating recipe to generate enough revenue to offset the building's construction cost. This considers daily degradation and workforce costs as well." + } + } + } +} diff --git a/src/locales/ja_JP/profile.json b/src/locales/ja_JP/profile.json index 4bf31dae..cdc413fb 100644 --- a/src/locales/ja_JP/profile.json +++ b/src/locales/ja_JP/profile.json @@ -42,7 +42,7 @@ "title": "What is FIO & Why should you use it?", "help": { "title": "5 Easy Steps to Integrate FIO and PRUNplanner", - "p1": "FIO is a community developed {link} that collects your game data, makes it available outside of @:terms.prosperous_universe and is completely free to use.", + "p1": "FIO is a community developed {link} that collects your game data, makes it available outside of Prosperous Universe and is completely free to use.", "p2": "Just go ahead and install the Chrome or Firefox extension, reload your browser with APEX open and click the extension button in the upper-right in your browser to create an account. FIO will automatically collect (only) your game data while you keep playing.", "p3": "You can now login to the {link} to see your data and create an API-Key PRUNplanner will use to import your storage (materials you have somewhere) and sites (planets, ships, warehouses) data.", "p4": "Creating the key is easy, if you head to the {link} page and click the \"Create API Key\" button. Enter a name for your key (e.g., \"PRUNplanner\") and your FIO password. You don't need to \"Allow Writes\" as PRUNplanner will not manipulate any of your data, the tool just reads and uses it.", @@ -71,6 +71,7 @@ "form": { "tool_preferences": "Tool Preferences", "language": "Language", + "language_note": "We want to make PRUNplanner accessible to everyone. If you'd like to see the tool in your native language - or help us polish an existing translation - join our localization project on {link}.", "default_empire": "Default Empire", "default_cx": "Default CX", "fio_burn": "FIO Burn", diff --git a/src/locales/ja_JP/sharing.json b/src/locales/ja_JP/sharing.json new file mode 100644 index 00000000..fc01f576 --- /dev/null +++ b/src/locales/ja_JP/sharing.json @@ -0,0 +1,11 @@ +{ + "info": "This will create an unique link that can be shared with others. They will be able to see your plan, but don't modify it. The link becomes unavailable once you choose to stop sharing or delete the plan.", + "share_count": "You're currently sharing this plan. It has been viewed {count} times", + "buttons": { + "create_link": "Create Sharing Link", + "copy_url": "Copy URL", + "stop_sharing": "Stop Sharing", + "views": "{count} Views", + "share": "Share" + } +} diff --git a/src/locales/ja_JP/terms.json b/src/locales/ja_JP/terms.json index b7ead843..ec554d8b 100644 --- a/src/locales/ja_JP/terms.json +++ b/src/locales/ja_JP/terms.json @@ -1,11 +1,15 @@ { "30d": "30D", "7d": "7D", + "amount": "Amount", "api_key": "API Key", + "area": "Area", "ask": "Ask", "bid": "Bid", "buffer": "Buffer", + "buildings_plural": "Buildings", "buildings": "Building | Buildings", + "burn": "Burn", "cogc": "COGC", "cogm": "COGM", "consumption": "Consumption", @@ -15,8 +19,12 @@ "delta_price": "ȼ Delta", "delta": "Delta", "demand": "Demand", + "empire_plural": "Empires", "empire": "Empire | Empires", "exchanges": "Exchange | Exchanges", + "experts_plural": "Experts", + "experts": "Expert | Experts", + "export": "Export", "faction": "Faction", "fertility": "Fertility", "filter": "Filter", @@ -25,10 +33,12 @@ "gravity": "Gravity", "high": "High", "hq": "HQ", + "import": "Import", "low": "Low", "material_ticker": "Ticker", "materials_plural": "Materials", "materials": "Material | Materials", + "override": "Override", "permits_plural": "Permits", "permits": "Permit | Permits", "plan": "Plan | Plans", @@ -37,22 +47,27 @@ "plans_plural": "Plans", "popr": "POPR", "pressure": "Pressure", + "price": "Price", "production": "Production", "profit_per_area": "Profit / Area", "profit": "Profit", + "recipes_plural": "Recipes", "recipes": "Recipe | Recipes", "resources_plural": "Resources", "resources": "Resource | Resources", "revenue": "Revenue", "rocky": "Rocky", "spread": "Spread", + "stock": "Stock", + "storage": "Storage", + "sum": "∑", "supply": "Supply", "surface": "Surface", "temperature": "Temperature", + "total_volume": "Total Volume", + "total_weight": "Total Weight", "trend": "Trend", "volume": "Volume", "vwap": "VWAP", - "weight": "Weight", - "amount": "Amount", - "storage": "Storage" + "weight": "Weight" } diff --git a/src/locales/ja_JP/xit.json b/src/locales/ja_JP/xit.json new file mode 100644 index 00000000..7d505bd8 --- /dev/null +++ b/src/locales/ja_JP/xit.json @@ -0,0 +1,26 @@ +{ + "form": { + "origin": "Origin", + "target_days": "Target Days", + "buy_from_cx": "Buy From CX", + "buy_from_cx_warning": "Only warehouse origin allows purchasing.", + "fit_ship": "Fit Ship", + "hide_infinite": "Hide Infinite", + "json": "JSON" + }, + "buttons": { + "copy_json": "Copy XIT JSON", + "copy": "@:common.buttons.copy" + }, + "table": { + "ticker": "@:terms.material_ticker", + "stock": "@:terms.stock", + "delta": "@:terms.delta", + "burn": "@:terms.burn", + "amount": "@:terms.amount", + "override": "@:terms.override", + "weight_value": "@:{'terms.weight'}: {value}", + "volume_value": "@:{'terms.volume'}: {value}", + "price_value": "@:{'terms.price'}: {value}" + } +} diff --git a/src/locales/ko_KR/account.json b/src/locales/ko_KR/account.json new file mode 100644 index 00000000..f6fdc2c0 --- /dev/null +++ b/src/locales/ko_KR/account.json @@ -0,0 +1,81 @@ +{ + "components": { + "login": { + "title": "Login", + "error": "Error logging in. Please check your username and password.", + "buttons": { + "login": "Login" + }, + "form": { + "username": "Username", + "password": "Password" + }, + "tos": "By using PRUNplanner you agree to the {tos_link}.", + "tos_link": "Terms of Service", + "forgot": "Forgot your password? Request a {forgot_link}.", + "forgot_link": "Password Reset" + }, + "registration": { + "title": "Account Information", + "tos": "PRUNplanner is free to use. By creating an account, you acknowledge and agree to the {tos_link}.", + "tos_link": "Terms of Service", + "result": { + "ok_header": "Welcome, {username}!", + "ok_message": "Registration succesful. You can now login to PRUNplanner.", + "error": "Error during registration." + }, + "buttons": { + "register": "Create Account" + }, + "form": { + "username": "Username", + "username_info": "Must be at least 3 characters long. Can't contain spaces.", + "password": "Password", + "password_info": "Must be at least 8 characters long.", + "email": "Email", + "email_placeholder": "Not mandatory, but recommended.", + "email_info": "Not mandatory. Increases your account security.", + "security_question": "Security Question", + "question": "Enter the name of planet {planet}. To find it, open a new Prosperous Universe buffer with the command {command}. You'll see the planets name listed under 'Name' in the planet information", + "planet_name": "Name" + } + }, + "password_reset": { + "title": "Reset your Password", + "info": "Please enter the code sent to your email, along with your new password.", + "buttons": { + "send": "Reset Password" + }, + "form": { + "email": "Email", + "code": "Code", + "password": "Password", + "password_info": "Must be at least 8 characters long." + } + }, + "request_password_reset": { + "title": "Password Reset Request", + "info": "Enter the verified email address linked to your PRUNplanner account. If we recognize it, we'll send you a code to reset your password.", + "form": { + "email_placeholder": "Email Address" + }, + "buttons": { + "send": "Request Password Reset" + } + }, + "verify_email": { + "title": "Email Verification", + "info": "Please enter the verification code you received via email. Maybe check your spam folder.", + "buttons": { + "send": "Verify Email Address" + }, + "form": { + "code_placeholder": "Verification Code" + }, + "result": { + "ok": "Email address verified.", + "error": "Invalid code or already verified." + } + } + } +} diff --git a/src/locales/ko_KR/common.json b/src/locales/ko_KR/common.json index e80606df..60ae9f5a 100644 --- a/src/locales/ko_KR/common.json +++ b/src/locales/ko_KR/common.json @@ -33,6 +33,7 @@ "buttons": { "create": "Create", "save": "Save", + "save_as": "Save As", "reload": "Reload", "show": "Show", "hide": "Hide", @@ -40,9 +41,24 @@ "search": "Search", "default": "Default", "select_all": "Select All", + "discard": "Discard", "yes": "Yes", "no": "No", "delete": "Delete", - "cancel": "Cancel" + "cancel": "Cancel", + "clone_plan": "Clone Plan", + "clone_complete": "Cloning Complete", + "copy": "Copy" + }, + "ui": { + "placeholder": { + "please_input": "Please Input", + "please_select": "Please Select", + "search": "Search" + }, + "select": { + "no_results": "No Results", + "select_options": "Select Options" + } } } diff --git a/src/locales/ko_KR/exchanges.json b/src/locales/ko_KR/exchanges.json new file mode 100644 index 00000000..8c599196 --- /dev/null +++ b/src/locales/ko_KR/exchanges.json @@ -0,0 +1,55 @@ +{ + "view_title": "Exchanges", + "title": "Exchanges", + "errors": { + "title": "No Preferences", + "message": "You don't have exchange preferences. Head to Management and create your first." + }, + "buttons": { + "csv_import_export": "@:exchanges.components.csv_import_export.title", + "save": "@:common.buttons.save", + "reload": "@:common.buttons.reload" + }, + "configuration": { + "form": { + "preference_name": "Preference Name", + "empire_preferences": "Empire Preferences", + "exchange": "Exchange", + "ticker": "@:terms.material_ticker" + } + }, + "preference_type": { + "BUY": "BUY", + "SELL": "SELL", + "BOTH": "BOTH" + }, + "components": { + "ticker": { + "no_data": "No @:terms.material_ticker Preferences Configured", + "material_placeholder": "@:terms.materials" + }, + "exchanges": { + "no_data": "No @:terms.exchanges Preference Configured" + }, + "planet_preferences": { + "title": "Planet Preferences", + "form": { + "exchange": "@:terms.exchanges", + "ticker": "@:terms.material_ticker" + }, + "table": { + "planet": "@:terms.planets", + "exchange_preference": "@:terms.exchanges Preferences", + "ticker_preference": "@:terms.material_ticker Preferences" + } + }, + "csv_import_export": { + "title": "Import / Export CSV", + "warning": "Warning: Importing deletes all existing properties and imports the new ones. You need to save your imported preferences after uploading the CSV file or use the reload button to discard them.", + "buttons": { + "import": "Import Settings", + "export": "Export Settings" + } + } + } +} diff --git a/src/locales/ko_KR/fio.json b/src/locales/ko_KR/fio.json new file mode 100644 index 00000000..a104665d --- /dev/null +++ b/src/locales/ko_KR/fio.json @@ -0,0 +1,49 @@ +{ + "burn": { + "view_title": "FIO Burn", + "title": "FIO Burn:", + "fio_last_update": "FIO Data Update: {last_updated}", + "form": { + "empire": "@:terms.empire", + "burn_thresholds": "Burn Thresholds", + "red": "Red", + "yellow": "Yellow" + }, + "components": { + "overview": { + "title": "Plan Burn Overview", + "table": { + "plan": "@:terms.plan", + "planet": "@:terms.planets", + "burn": "Burn" + } + }, + "plans": { + "xit_title": "XIT Resupply: {plan_name}", + "table": { + "ticker": "@:terms.material_ticker", + "consumption": "@:terms.consumption", + "production": "@:terms.production", + "delta": "@:terms.delta", + "stock": "@:terms.stock", + "plan": "@:terms.plan", + "burn": "Burn", + "exhaustion": "Exhaustion" + } + } + } + }, + "repair": { + "view_title": "FIO Repair", + "title": "FIO Repair", + "fio_last_update": "FIO Data Update: {last_updated}", + "table": { + "title": "@:terms.planet_plural", + "planet": "@:terms.planets", + "buildings": "@:terms.buildings_plural", + "avg_condition": "⌀ Condition", + "min_condition": "Min. Condition", + "repair_age": "Repair Age" + } + } +} diff --git a/src/locales/ko_KR/game.json b/src/locales/ko_KR/game.json index 8351bc83..f3e19d40 100644 --- a/src/locales/ko_KR/game.json +++ b/src/locales/ko_KR/game.json @@ -4,6 +4,21 @@ "PLANETARY": "Planetary", "PRODUCTION": "Production" }, + "workforce_type": { + "pioneer": "Pioneer", + "settler": "Settler", + "technician": "Technician", + "engineer": "Engineer", + "scientist": "Scientist" + }, + "efficiency_type": { + "WORKFORCE": "Workforce", + "HQ": "HQ", + "EXPERT": "Experts", + "COGC": "COGC", + "FERTILITY": "Fertility", + "FACTION": "Faction" + }, "expertise": { "AGRICULTURE": "Agriculture", "CHEMISTRY": "Chemistry", @@ -51,6 +66,42 @@ "WORKFORCE_ENGINEERS": "ENG", "WORKFORCE_SCIENTISTS": "SCI" }, + "material_category": { + "agricultural_products": "Agricultural Products", + "alloys": "Alloys", + "chemicals": "Chemicals", + "construction_materials": "Construction Materials", + "construction_parts": "Construction Parts", + "construction_prefabs": "Construction Prefabs", + "consumable_bundles": "Consumable Bundles", + "consumables_(basic)": "Consumables Basic", + "consumables_(luxury)": "Consumables Luxury", + "drones": "Drones", + "electronic_devices": "Electronic Devices", + "electronic_parts": "Electronic Parts", + "electronic_pieces": "Electronic Pieces", + "electronic_systems": "Electronic Systems", + "elements": "Elements", + "energy_systems": "Energy Systems", + "fuels": "Fuels", + "gases": "Gases", + "liquids": "Liquids", + "medical_equipment": "Medical Equipment", + "metals": "Metals", + "minerals": "Minerals", + "ores": "Ores", + "plastics": "Plastics", + "ship_engines": "Ship Engines", + "ship_kits": "Ship Kits", + "ship_parts": "Ship Parts", + "ship_shields": "Ship Shields", + "software_components": "Software Components", + "software_systems": "Software Systems", + "software_tools": "Software Tools", + "textiles": "Textiles", + "unit_prefabs": "Unit Prefabs", + "utility": "Utility" + }, "upkeep": { "safety": "Safety", "health": "Health", diff --git a/src/locales/ko_KR/government.json b/src/locales/ko_KR/government.json new file mode 100644 index 00000000..2a00d90b --- /dev/null +++ b/src/locales/ko_KR/government.json @@ -0,0 +1,16 @@ +{ + "popr_button": { + "no_data": "Planet {planet_id} has no population data", + "buttons": { + "no_popr": "No POPR" + }, + "table": { + "total_population": "Total Population", + "free_population": "Free Population", + "free_population_pct": "Free Population %", + "unfilled_jobs": "Unfilled Jobs", + "plan_need": "@:terms.plan Need", + "plan_check": "@:terms.plan Check" + } + } +} diff --git a/src/locales/ko_KR/homepage.json b/src/locales/ko_KR/homepage.json index dbdb94e7..5c8aa103 100644 --- a/src/locales/ko_KR/homepage.json +++ b/src/locales/ko_KR/homepage.json @@ -62,7 +62,7 @@ "section_title": "Powered by tools we love to use" }, "open_source": { - "section_title": "Free & Open Source", + "section_title": "Free & Open Source", "section_lead": "PRUNplanner is completely free to use, and its frontend is fully {link}.", "prompt": "Love it? We'd be thrilled if you contributed!", "link_open_source": "Open Source" diff --git a/src/locales/ko_KR/market_live.json b/src/locales/ko_KR/market_live.json new file mode 100644 index 00000000..ca5a5b21 --- /dev/null +++ b/src/locales/ko_KR/market_live.json @@ -0,0 +1,101 @@ +{ + "view_title": "Market Live", + "title": "Market Live", + "status": { + "connected": "Connected", + "disconnected": "Disconnected" + }, + "severity_type": { + "LOW": "LOW", + "MEDIUM": "MEDIUM", + "HIGH": "HIGH" + }, + "status_type": { + "active": "Active", + "paused": "Paused" + }, + "rule_type": { + "static": "Value", + "previous": "Previous", + "previous_pct": "Offset %", + "text": "Text" + }, + "components": { + "feed": { + "title": "Alert Feed", + "buttons": { + "open_manager": "Open Alert Manager", + "close_manager": "Close Alert Manager", + "clear_feed": "Clear Feed", + "show_overview": "Show Overview", + "hide_overview": "Hide Overview" + } + }, + "alert_feed": { + "waiting": "Waiting for market events triggering alerts...", + "table": { + "ticker_alert": "Ticker / Alert", + "severity": "Severity", + "logic": "Trigger Logic", + "event": "Event", + "time": "Time" + } + }, + "details": { + "price": "Price", + "ask": "@:{'terms.ask'}: {value}", + "bid": "@:{'terms.bid'}: {value}", + "spread": "@:{'terms.spread'}", + "buy_volume": "Buy Volume", + "vwap": "@:{'terms.vwap'}: {value}", + "change": "Change: {value}", + "sell_volume": "Sell Volume", + "buy_volume_value": "Buy Volume: {value}", + "sell_volume_value": "Sell Volume: {value}" + }, + "point_table": { + "table": { + "ticker": "@:terms.material_ticker", + "price": "@:terms.price", + "bid": "@:terms.bid", + "ask": "@:terms.ask", + "spread_pct": "Spread %", + "buy_volume": "Buy Vol.", + "sell_volume": "Sell Vol." + } + }, + "history": { + "title": "Data History", + "received": "{value} @:terms.material_ticker received" + }, + "rule_builder": { + "new_rule_name": "New Rule", + "buttons": { + "add_condition": "Condition", + "add_group": "Group", + "remove": "Remove" + }, + "error": "Error: {value}", + "empty": "Empty Group" + }, + "alert_manager": { + "title": "Alert Manager", + "title_editing": "Edit Alert", + "info": "Alerts are currently stored on this device only and are not synced to your account.", + "no_alerts": "No alerts found. Start by creating your first detector signal", + "buttons": { + "create_alert": "Create New Alert", + "discard": "@:common.buttons.discard", + "save": "@:common.buttons.save", + "delete": "@:common.buttons.delete" + }, + "form": { + "alert_name": "Alert Name", + "severity": "Severity", + "status": "Status", + "logic_configuration": "Logic Configuration", + "previous_datapoint": "Previous Datepoint" + } + } + } +} diff --git a/src/locales/ko_KR/material_tile.json b/src/locales/ko_KR/material_tile.json new file mode 100644 index 00000000..7feabd58 --- /dev/null +++ b/src/locales/ko_KR/material_tile.json @@ -0,0 +1,23 @@ +{ + "information": { + "title": "Material Information", + "table": { + "category": "Category", + "weight": "Weight", + "volume": "Volume" + } + }, + "indicator": { + "value": "Value", + "max": "Maximum", + "pct_max": "% / Max" + }, + "chart": { + "title": "Market History", + "labels": { + "traded": "Traded Volume", + "low_p": "Daily Minimum Price", + "high_p": "Daily Maximum Price" + } + } +} diff --git a/src/locales/ko_KR/plan.json b/src/locales/ko_KR/plan.json new file mode 100644 index 00000000..1b01bf38 --- /dev/null +++ b/src/locales/ko_KR/plan.json @@ -0,0 +1,298 @@ +{ + "notifications": { + "must_have_name": "Must set a plan name in Configuration to save" + }, + "tools": { + "labels": { + "popr": "POPR", + "visitation_frequency": "Visitation Frequency", + "construction_cart": "Construction Cart", + "supply_cart": "Supply Cart", + "repair_analysis": "Repair Analysis", + "workforce": "Workforce" + }, + "popr": { + "title": "Latest Population Report", + "error": "Error loading latest population report. The planet might not have population.", + "loading": "Loading Population Report" + }, + "visitation_frequency": { + "title": "Visitation Frequency", + "storage": { + "label": "Storage", + "info": "Your plan involves adding {storages} giving you a total storage capacity of {total_weight} t and {total_volume} m³.", + "info_no_storage": "Your plan has a total storage capacity of {total_weight} t and {total_volume} m³.", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "storage_filled": "Storage Filled", + "filled_unit": "days" + }, + "exclusion_info": "Exclude local materials from visitation frequency calculation for items handled exclusively planet-side, like local market sales, purchases or contracts." + }, + "shipping": { + "label": "Shipping", + "table": { + "ship_weight": "Ship t", + "ship_volume": "Ship m³", + "visitation_days": "Visitation (days)", + "limit": "Limit", + "export_frequency": "@:terms.export Frequency", + "import_frequency": "@:terms.import Frequency" + } + } + }, + "construction_cart": { + "title": "Construction Cart", + "unplanned_info": "Base has unplanned {buildings} (FIO: {fio_updated}). Demolish to ensure area, habitation and materials are accurate.", + "table": { + "building": "@:terms.buildings", + "built": "Built", + "amount": "Amount", + "habitation_info": "Insufficient habitation will reduce production efficiency.", + "planned": "Planned", + "materials_sum": "Materials Sum", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume", + "material": "Material", + "storage": "Storage", + "stock": "Stock", + "stock_override": "Stock Override", + "need": "Need" + } + }, + "supply_cart": { + "title": "Supply Cart", + "info": { + "p": "The Supply Cart provides updates on your plans needs combined with existing inventory sourced from FIO. You have the flexibility to opt for alternative storage locations to replenish your base. Tailor your selection based on whether you wish to restock workforce and production supplies or focus on a specific category, and specify the duration for which the supplied stock should sustain. Use the {link} tool for more advanced supply cart options.", + "link": "FIO Burn" + }, + "buttons": { + "all": "All", + "workforce": "Workforce", + "production": "Production" + }, + "table": { + "stock_duration": "Stock Duration (days)", + "storage": "Storage", + "xit_name": "Supply Cart", + "ticker": "Ticker", + "daily_need": "Daily Need", + "daily_cost": "Daily Cost", + "stock": "Stock", + "full_need": "Full Need", + "final_need": "Final Need", + "weight": "t", + "volume": "m³", + "workforce": "Workforce", + "production": "Production", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + } + }, + "repair_analysis": { + "title": "Repair Analysis", + "plan": "@:terms.plan", + "table": { + "select_day": "Select Day", + "material": "Material", + "amount": "Amount", + "cost": "Cost", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + }, + "graph": { + "select_building": "Select @:terms.buildings", + "individual_building": "Individual @:terms.buildings", + "repair_cost_breakdown": "Repair Cost Breakdown" + } + }, + "cogm": { + "title": "Cost of Goods Manufactured", + "cogm": "@:terms.cogm", + "info": "The cost of goods manufactured is calculated using plan settings that factor in production efficiency, recipe runtime, building degradation, input material costs, labor requirements, and associated labor costs. The final cost is shown per unit of output, based on quantity or full cost allocation.", + "cx_preferences": "@:terms.cx_plural Preferences", + "empire_ticker": "@:terms.empire Ticker", + "planet_ticker": "@:terms.planet Ticker", + "table": { + "parameters": "Parameters", + "recipe_runtime": "@:terms.recipes Runtime", + "percent_day": "% / day", + "efficiency": "Efficiency", + "degradation": "Degradation", + "cost": "@:terms.cost", + "materials": "@:terms.materials_plural", + "input_total": "Input Total", + "material": "@:terms.materials", + "cost_unit": "ȼ / Unit", + "cost_total": "Cost Total", + "cost_total_unit": "ȼ Total", + "workforce": "Workforce", + "total_cost": "Total Cost", + "recipe_profit": "@:terms.recipes Profit", + "cost_split": "Cost Split" + } + }, + "plan_analytics": { + "title": "Planning Insights", + "info": "Insights are aggregated from active player plans on {planet}. PRUNplanner enforces minimum sample thresholds to ensure both anonymity and statistical accuracy.", + "labels": { + "experts": "Experts", + "production_buildings": "Production @:terms.buildings_plural", + "recipes": "@:terms.recipes_plural" + } + } + }, + "components": { + "status": { + "hq": "HQ", + "cogc": "@:{'terms.cogc'}:", + "area": "@:{'terms.area'}:", + "profit": "@:{'terms.profit'}:", + "experts": "@:{'terms.experts_plural'}:" + }, + "configuration": { + "label": "Configuration", + "name": "Name", + "empire": "@:terms.empire" + }, + "area": { + "permits": "@:terms.permits_plural", + "area": "@:terms.area", + "free": "Free" + }, + "bonuses": { + "corp_hq": "Corp. HQ", + "corp_hq_tooltip": "The corporation you belong to has its headquarters on this planet (not your individual company).", + "cogc": "@:terms.cogc" + }, + "infrastructure": { + "label": "Infrastructure", + "auto_optimize": "Auto-Optimize Habs", + "auto_optimize_tooltip": "Automatically optimize habitations to meet workforce needs as buildings are added.", + "buttons": { + "optimize_cost": "Optimize Cost", + "optimize_area": "Optimize Area" + } + }, + "experts": { + "label": "Experts", + "warning": "Maximum number of experts on a base is 6. You currently have {expert_number} experts assigned." + }, + "workforce": { + "label": "Workforce", + "table": { + "type": "Type", + "need": "Need", + "supply": "Supply", + "open": "Open", + "luxuries": "Luxuries", + "pct_eff": "Eff. %" + } + }, + "overview": { + "label": "Overview", + "table": { + "daily_cost": "Daily Cost", + "degradation": "Degradation", + "plan_cost": "Plan Cost", + "daily_profit": "Daily Profit", + "roi": "ROI", + "profit_area": "@:terms.profit_per_area" + } + }, + "storage": { + "label": "Storage", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "filled": "Filled" + } + }, + "materialio": { + "label": "Material I/O", + "label_production": "Production", + "label_workforce": "Workforce", + "buttons": { + "toggle_weight_volume": "Toggle Weight & Volume", + "toggle_production_workforce": "Toggle Production & Workforce Split" + }, + "table": { + "input": "In", + "output": "Out", + "delta": "Δ", + "cost_day": "ȼ / day", + "total_weight": "Δ t", + "total_volume": "Δ m³" + } + }, + "save_as": { + "title": "Save As", + "form": { + "plan_name": "Name", + "plan_name_placeholder": "New @:terms.plan Name", + "empire": "@:terms.empire" + } + }, + "production": { + "label": "Production", + "planet_resources": "@:terms.planets @:terms.resources_plural", + "form": { + "match_cogc": "Match @:terms.cogc", + "select_placeholder": "Select @:terms.buildings & Add to @:terms.plan" + }, + "table": { + "building_recipe": "@:terms.buildings / @:terms.recipes", + "runtime": "Runtime", + "share": "Share", + "tools": "Tools" + } + }, + "production_building": { + "no_recipe": "No Active @:terms.recipes_plural", + "qty": "Qty", + "buttons": { + "add_recipe": "@:terms.recipes" + }, + "table": { + "expertise": "Expertise", + "efficiency": "Efficiency", + "revenue": "@:terms.revenue", + "area": "@:terms.area", + "construction": "Construction" + } + }, + "production_recipe": { + "cogm_title": "Cost Of Goods Manufactured", + "cogm_error": "COGM Calculation not possible. Check your Management View if your Empire has a CX assigned.", + "buttons": { + "cogm": "@:terms.cogm" + }, + "table": { + "input": "Input", + "time": "Time", + "output": "Output", + "daily_revenue": "ȼ / Day", + "profit_area": "ȼ / Area", + "roi": "ROI" + }, + "info": { + "p1_strong": "Revenue / Day", + "p1": "is calculated by taking the daily income generated from a recipe and subtracting both the daily workforce cost (all luxuries provided) and the daily building degradation cost (1/180th of the construction cost). The income from the recipe is based on the difference between the input material costs and the output material values.", + "p2_strong": "ȼ / Area", + "p2": "is the daily revenue divided by the area for one production building and its proportionate share of the area for a CM and habs required for an optimal base of such buildings in Recipe ROI.", + "p3_strong": "ROI", + "p3": "is the time required for a continuously operating recipe to generate enough revenue to offset the building's construction cost. This considers daily degradation and workforce costs as well." + } + } + } +} diff --git a/src/locales/ko_KR/profile.json b/src/locales/ko_KR/profile.json index 4bf31dae..cdc413fb 100644 --- a/src/locales/ko_KR/profile.json +++ b/src/locales/ko_KR/profile.json @@ -42,7 +42,7 @@ "title": "What is FIO & Why should you use it?", "help": { "title": "5 Easy Steps to Integrate FIO and PRUNplanner", - "p1": "FIO is a community developed {link} that collects your game data, makes it available outside of @:terms.prosperous_universe and is completely free to use.", + "p1": "FIO is a community developed {link} that collects your game data, makes it available outside of Prosperous Universe and is completely free to use.", "p2": "Just go ahead and install the Chrome or Firefox extension, reload your browser with APEX open and click the extension button in the upper-right in your browser to create an account. FIO will automatically collect (only) your game data while you keep playing.", "p3": "You can now login to the {link} to see your data and create an API-Key PRUNplanner will use to import your storage (materials you have somewhere) and sites (planets, ships, warehouses) data.", "p4": "Creating the key is easy, if you head to the {link} page and click the \"Create API Key\" button. Enter a name for your key (e.g., \"PRUNplanner\") and your FIO password. You don't need to \"Allow Writes\" as PRUNplanner will not manipulate any of your data, the tool just reads and uses it.", @@ -71,6 +71,7 @@ "form": { "tool_preferences": "Tool Preferences", "language": "Language", + "language_note": "We want to make PRUNplanner accessible to everyone. If you'd like to see the tool in your native language - or help us polish an existing translation - join our localization project on {link}.", "default_empire": "Default Empire", "default_cx": "Default CX", "fio_burn": "FIO Burn", diff --git a/src/locales/ko_KR/sharing.json b/src/locales/ko_KR/sharing.json new file mode 100644 index 00000000..fc01f576 --- /dev/null +++ b/src/locales/ko_KR/sharing.json @@ -0,0 +1,11 @@ +{ + "info": "This will create an unique link that can be shared with others. They will be able to see your plan, but don't modify it. The link becomes unavailable once you choose to stop sharing or delete the plan.", + "share_count": "You're currently sharing this plan. It has been viewed {count} times", + "buttons": { + "create_link": "Create Sharing Link", + "copy_url": "Copy URL", + "stop_sharing": "Stop Sharing", + "views": "{count} Views", + "share": "Share" + } +} diff --git a/src/locales/ko_KR/terms.json b/src/locales/ko_KR/terms.json index b7ead843..ec554d8b 100644 --- a/src/locales/ko_KR/terms.json +++ b/src/locales/ko_KR/terms.json @@ -1,11 +1,15 @@ { "30d": "30D", "7d": "7D", + "amount": "Amount", "api_key": "API Key", + "area": "Area", "ask": "Ask", "bid": "Bid", "buffer": "Buffer", + "buildings_plural": "Buildings", "buildings": "Building | Buildings", + "burn": "Burn", "cogc": "COGC", "cogm": "COGM", "consumption": "Consumption", @@ -15,8 +19,12 @@ "delta_price": "ȼ Delta", "delta": "Delta", "demand": "Demand", + "empire_plural": "Empires", "empire": "Empire | Empires", "exchanges": "Exchange | Exchanges", + "experts_plural": "Experts", + "experts": "Expert | Experts", + "export": "Export", "faction": "Faction", "fertility": "Fertility", "filter": "Filter", @@ -25,10 +33,12 @@ "gravity": "Gravity", "high": "High", "hq": "HQ", + "import": "Import", "low": "Low", "material_ticker": "Ticker", "materials_plural": "Materials", "materials": "Material | Materials", + "override": "Override", "permits_plural": "Permits", "permits": "Permit | Permits", "plan": "Plan | Plans", @@ -37,22 +47,27 @@ "plans_plural": "Plans", "popr": "POPR", "pressure": "Pressure", + "price": "Price", "production": "Production", "profit_per_area": "Profit / Area", "profit": "Profit", + "recipes_plural": "Recipes", "recipes": "Recipe | Recipes", "resources_plural": "Resources", "resources": "Resource | Resources", "revenue": "Revenue", "rocky": "Rocky", "spread": "Spread", + "stock": "Stock", + "storage": "Storage", + "sum": "∑", "supply": "Supply", "surface": "Surface", "temperature": "Temperature", + "total_volume": "Total Volume", + "total_weight": "Total Weight", "trend": "Trend", "volume": "Volume", "vwap": "VWAP", - "weight": "Weight", - "amount": "Amount", - "storage": "Storage" + "weight": "Weight" } diff --git a/src/locales/ko_KR/xit.json b/src/locales/ko_KR/xit.json new file mode 100644 index 00000000..7d505bd8 --- /dev/null +++ b/src/locales/ko_KR/xit.json @@ -0,0 +1,26 @@ +{ + "form": { + "origin": "Origin", + "target_days": "Target Days", + "buy_from_cx": "Buy From CX", + "buy_from_cx_warning": "Only warehouse origin allows purchasing.", + "fit_ship": "Fit Ship", + "hide_infinite": "Hide Infinite", + "json": "JSON" + }, + "buttons": { + "copy_json": "Copy XIT JSON", + "copy": "@:common.buttons.copy" + }, + "table": { + "ticker": "@:terms.material_ticker", + "stock": "@:terms.stock", + "delta": "@:terms.delta", + "burn": "@:terms.burn", + "amount": "@:terms.amount", + "override": "@:terms.override", + "weight_value": "@:{'terms.weight'}: {value}", + "volume_value": "@:{'terms.volume'}: {value}", + "price_value": "@:{'terms.price'}: {value}" + } +} diff --git a/src/locales/nl_NL/account.json b/src/locales/nl_NL/account.json new file mode 100644 index 00000000..f6fdc2c0 --- /dev/null +++ b/src/locales/nl_NL/account.json @@ -0,0 +1,81 @@ +{ + "components": { + "login": { + "title": "Login", + "error": "Error logging in. Please check your username and password.", + "buttons": { + "login": "Login" + }, + "form": { + "username": "Username", + "password": "Password" + }, + "tos": "By using PRUNplanner you agree to the {tos_link}.", + "tos_link": "Terms of Service", + "forgot": "Forgot your password? Request a {forgot_link}.", + "forgot_link": "Password Reset" + }, + "registration": { + "title": "Account Information", + "tos": "PRUNplanner is free to use. By creating an account, you acknowledge and agree to the {tos_link}.", + "tos_link": "Terms of Service", + "result": { + "ok_header": "Welcome, {username}!", + "ok_message": "Registration succesful. You can now login to PRUNplanner.", + "error": "Error during registration." + }, + "buttons": { + "register": "Create Account" + }, + "form": { + "username": "Username", + "username_info": "Must be at least 3 characters long. Can't contain spaces.", + "password": "Password", + "password_info": "Must be at least 8 characters long.", + "email": "Email", + "email_placeholder": "Not mandatory, but recommended.", + "email_info": "Not mandatory. Increases your account security.", + "security_question": "Security Question", + "question": "Enter the name of planet {planet}. To find it, open a new Prosperous Universe buffer with the command {command}. You'll see the planets name listed under 'Name' in the planet information", + "planet_name": "Name" + } + }, + "password_reset": { + "title": "Reset your Password", + "info": "Please enter the code sent to your email, along with your new password.", + "buttons": { + "send": "Reset Password" + }, + "form": { + "email": "Email", + "code": "Code", + "password": "Password", + "password_info": "Must be at least 8 characters long." + } + }, + "request_password_reset": { + "title": "Password Reset Request", + "info": "Enter the verified email address linked to your PRUNplanner account. If we recognize it, we'll send you a code to reset your password.", + "form": { + "email_placeholder": "Email Address" + }, + "buttons": { + "send": "Request Password Reset" + } + }, + "verify_email": { + "title": "Email Verification", + "info": "Please enter the verification code you received via email. Maybe check your spam folder.", + "buttons": { + "send": "Verify Email Address" + }, + "form": { + "code_placeholder": "Verification Code" + }, + "result": { + "ok": "Email address verified.", + "error": "Invalid code or already verified." + } + } + } +} diff --git a/src/locales/nl_NL/common.json b/src/locales/nl_NL/common.json index 47cd7e26..4fd78c4e 100644 --- a/src/locales/nl_NL/common.json +++ b/src/locales/nl_NL/common.json @@ -33,6 +33,7 @@ "buttons": { "create": "Maken", "save": "Opslaan", + "save_as": "Save As", "reload": "Herladen", "show": "Tonen", "hide": "Verbergen", @@ -40,9 +41,24 @@ "search": "Zoeken", "default": "Standaard", "select_all": "Alles Selecteren", + "discard": "Discard", "yes": "Ja", "no": "Nee", "delete": "Verwijderen", - "cancel": "Annuleren" + "cancel": "Annuleren", + "clone_plan": "Clone Plan", + "clone_complete": "Cloning Complete", + "copy": "Copy" + }, + "ui": { + "placeholder": { + "please_input": "Please Input", + "please_select": "Please Select", + "search": "Search" + }, + "select": { + "no_results": "No Results", + "select_options": "Select Options" + } } } diff --git a/src/locales/nl_NL/exchanges.json b/src/locales/nl_NL/exchanges.json new file mode 100644 index 00000000..8c599196 --- /dev/null +++ b/src/locales/nl_NL/exchanges.json @@ -0,0 +1,55 @@ +{ + "view_title": "Exchanges", + "title": "Exchanges", + "errors": { + "title": "No Preferences", + "message": "You don't have exchange preferences. Head to Management and create your first." + }, + "buttons": { + "csv_import_export": "@:exchanges.components.csv_import_export.title", + "save": "@:common.buttons.save", + "reload": "@:common.buttons.reload" + }, + "configuration": { + "form": { + "preference_name": "Preference Name", + "empire_preferences": "Empire Preferences", + "exchange": "Exchange", + "ticker": "@:terms.material_ticker" + } + }, + "preference_type": { + "BUY": "BUY", + "SELL": "SELL", + "BOTH": "BOTH" + }, + "components": { + "ticker": { + "no_data": "No @:terms.material_ticker Preferences Configured", + "material_placeholder": "@:terms.materials" + }, + "exchanges": { + "no_data": "No @:terms.exchanges Preference Configured" + }, + "planet_preferences": { + "title": "Planet Preferences", + "form": { + "exchange": "@:terms.exchanges", + "ticker": "@:terms.material_ticker" + }, + "table": { + "planet": "@:terms.planets", + "exchange_preference": "@:terms.exchanges Preferences", + "ticker_preference": "@:terms.material_ticker Preferences" + } + }, + "csv_import_export": { + "title": "Import / Export CSV", + "warning": "Warning: Importing deletes all existing properties and imports the new ones. You need to save your imported preferences after uploading the CSV file or use the reload button to discard them.", + "buttons": { + "import": "Import Settings", + "export": "Export Settings" + } + } + } +} diff --git a/src/locales/nl_NL/fio.json b/src/locales/nl_NL/fio.json new file mode 100644 index 00000000..a104665d --- /dev/null +++ b/src/locales/nl_NL/fio.json @@ -0,0 +1,49 @@ +{ + "burn": { + "view_title": "FIO Burn", + "title": "FIO Burn:", + "fio_last_update": "FIO Data Update: {last_updated}", + "form": { + "empire": "@:terms.empire", + "burn_thresholds": "Burn Thresholds", + "red": "Red", + "yellow": "Yellow" + }, + "components": { + "overview": { + "title": "Plan Burn Overview", + "table": { + "plan": "@:terms.plan", + "planet": "@:terms.planets", + "burn": "Burn" + } + }, + "plans": { + "xit_title": "XIT Resupply: {plan_name}", + "table": { + "ticker": "@:terms.material_ticker", + "consumption": "@:terms.consumption", + "production": "@:terms.production", + "delta": "@:terms.delta", + "stock": "@:terms.stock", + "plan": "@:terms.plan", + "burn": "Burn", + "exhaustion": "Exhaustion" + } + } + } + }, + "repair": { + "view_title": "FIO Repair", + "title": "FIO Repair", + "fio_last_update": "FIO Data Update: {last_updated}", + "table": { + "title": "@:terms.planet_plural", + "planet": "@:terms.planets", + "buildings": "@:terms.buildings_plural", + "avg_condition": "⌀ Condition", + "min_condition": "Min. Condition", + "repair_age": "Repair Age" + } + } +} diff --git a/src/locales/nl_NL/game.json b/src/locales/nl_NL/game.json index 8351bc83..f3e19d40 100644 --- a/src/locales/nl_NL/game.json +++ b/src/locales/nl_NL/game.json @@ -4,6 +4,21 @@ "PLANETARY": "Planetary", "PRODUCTION": "Production" }, + "workforce_type": { + "pioneer": "Pioneer", + "settler": "Settler", + "technician": "Technician", + "engineer": "Engineer", + "scientist": "Scientist" + }, + "efficiency_type": { + "WORKFORCE": "Workforce", + "HQ": "HQ", + "EXPERT": "Experts", + "COGC": "COGC", + "FERTILITY": "Fertility", + "FACTION": "Faction" + }, "expertise": { "AGRICULTURE": "Agriculture", "CHEMISTRY": "Chemistry", @@ -51,6 +66,42 @@ "WORKFORCE_ENGINEERS": "ENG", "WORKFORCE_SCIENTISTS": "SCI" }, + "material_category": { + "agricultural_products": "Agricultural Products", + "alloys": "Alloys", + "chemicals": "Chemicals", + "construction_materials": "Construction Materials", + "construction_parts": "Construction Parts", + "construction_prefabs": "Construction Prefabs", + "consumable_bundles": "Consumable Bundles", + "consumables_(basic)": "Consumables Basic", + "consumables_(luxury)": "Consumables Luxury", + "drones": "Drones", + "electronic_devices": "Electronic Devices", + "electronic_parts": "Electronic Parts", + "electronic_pieces": "Electronic Pieces", + "electronic_systems": "Electronic Systems", + "elements": "Elements", + "energy_systems": "Energy Systems", + "fuels": "Fuels", + "gases": "Gases", + "liquids": "Liquids", + "medical_equipment": "Medical Equipment", + "metals": "Metals", + "minerals": "Minerals", + "ores": "Ores", + "plastics": "Plastics", + "ship_engines": "Ship Engines", + "ship_kits": "Ship Kits", + "ship_parts": "Ship Parts", + "ship_shields": "Ship Shields", + "software_components": "Software Components", + "software_systems": "Software Systems", + "software_tools": "Software Tools", + "textiles": "Textiles", + "unit_prefabs": "Unit Prefabs", + "utility": "Utility" + }, "upkeep": { "safety": "Safety", "health": "Health", diff --git a/src/locales/nl_NL/government.json b/src/locales/nl_NL/government.json new file mode 100644 index 00000000..2a00d90b --- /dev/null +++ b/src/locales/nl_NL/government.json @@ -0,0 +1,16 @@ +{ + "popr_button": { + "no_data": "Planet {planet_id} has no population data", + "buttons": { + "no_popr": "No POPR" + }, + "table": { + "total_population": "Total Population", + "free_population": "Free Population", + "free_population_pct": "Free Population %", + "unfilled_jobs": "Unfilled Jobs", + "plan_need": "@:terms.plan Need", + "plan_check": "@:terms.plan Check" + } + } +} diff --git a/src/locales/nl_NL/homepage.json b/src/locales/nl_NL/homepage.json index dbdb94e7..5c8aa103 100644 --- a/src/locales/nl_NL/homepage.json +++ b/src/locales/nl_NL/homepage.json @@ -62,7 +62,7 @@ "section_title": "Powered by tools we love to use" }, "open_source": { - "section_title": "Free & Open Source", + "section_title": "Free & Open Source", "section_lead": "PRUNplanner is completely free to use, and its frontend is fully {link}.", "prompt": "Love it? We'd be thrilled if you contributed!", "link_open_source": "Open Source" diff --git a/src/locales/nl_NL/market_live.json b/src/locales/nl_NL/market_live.json new file mode 100644 index 00000000..ca5a5b21 --- /dev/null +++ b/src/locales/nl_NL/market_live.json @@ -0,0 +1,101 @@ +{ + "view_title": "Market Live", + "title": "Market Live", + "status": { + "connected": "Connected", + "disconnected": "Disconnected" + }, + "severity_type": { + "LOW": "LOW", + "MEDIUM": "MEDIUM", + "HIGH": "HIGH" + }, + "status_type": { + "active": "Active", + "paused": "Paused" + }, + "rule_type": { + "static": "Value", + "previous": "Previous", + "previous_pct": "Offset %", + "text": "Text" + }, + "components": { + "feed": { + "title": "Alert Feed", + "buttons": { + "open_manager": "Open Alert Manager", + "close_manager": "Close Alert Manager", + "clear_feed": "Clear Feed", + "show_overview": "Show Overview", + "hide_overview": "Hide Overview" + } + }, + "alert_feed": { + "waiting": "Waiting for market events triggering alerts...", + "table": { + "ticker_alert": "Ticker / Alert", + "severity": "Severity", + "logic": "Trigger Logic", + "event": "Event", + "time": "Time" + } + }, + "details": { + "price": "Price", + "ask": "@:{'terms.ask'}: {value}", + "bid": "@:{'terms.bid'}: {value}", + "spread": "@:{'terms.spread'}", + "buy_volume": "Buy Volume", + "vwap": "@:{'terms.vwap'}: {value}", + "change": "Change: {value}", + "sell_volume": "Sell Volume", + "buy_volume_value": "Buy Volume: {value}", + "sell_volume_value": "Sell Volume: {value}" + }, + "point_table": { + "table": { + "ticker": "@:terms.material_ticker", + "price": "@:terms.price", + "bid": "@:terms.bid", + "ask": "@:terms.ask", + "spread_pct": "Spread %", + "buy_volume": "Buy Vol.", + "sell_volume": "Sell Vol." + } + }, + "history": { + "title": "Data History", + "received": "{value} @:terms.material_ticker received" + }, + "rule_builder": { + "new_rule_name": "New Rule", + "buttons": { + "add_condition": "Condition", + "add_group": "Group", + "remove": "Remove" + }, + "error": "Error: {value}", + "empty": "Empty Group" + }, + "alert_manager": { + "title": "Alert Manager", + "title_editing": "Edit Alert", + "info": "Alerts are currently stored on this device only and are not synced to your account.", + "no_alerts": "No alerts found. Start by creating your first detector signal", + "buttons": { + "create_alert": "Create New Alert", + "discard": "@:common.buttons.discard", + "save": "@:common.buttons.save", + "delete": "@:common.buttons.delete" + }, + "form": { + "alert_name": "Alert Name", + "severity": "Severity", + "status": "Status", + "logic_configuration": "Logic Configuration", + "previous_datapoint": "Previous Datepoint" + } + } + } +} diff --git a/src/locales/nl_NL/material_tile.json b/src/locales/nl_NL/material_tile.json new file mode 100644 index 00000000..7feabd58 --- /dev/null +++ b/src/locales/nl_NL/material_tile.json @@ -0,0 +1,23 @@ +{ + "information": { + "title": "Material Information", + "table": { + "category": "Category", + "weight": "Weight", + "volume": "Volume" + } + }, + "indicator": { + "value": "Value", + "max": "Maximum", + "pct_max": "% / Max" + }, + "chart": { + "title": "Market History", + "labels": { + "traded": "Traded Volume", + "low_p": "Daily Minimum Price", + "high_p": "Daily Maximum Price" + } + } +} diff --git a/src/locales/nl_NL/plan.json b/src/locales/nl_NL/plan.json new file mode 100644 index 00000000..977f78ef --- /dev/null +++ b/src/locales/nl_NL/plan.json @@ -0,0 +1,298 @@ +{ + "notifications": { + "must_have_name": "Must set a plan name in Configuration to save" + }, + "tools": { + "labels": { + "popr": "POPR", + "visitation_frequency": "Visitation Frequency", + "construction_cart": "Construction Cart", + "supply_cart": "Supply Cart", + "repair_analysis": "Repair Analysis", + "workforce": "Workforce" + }, + "popr": { + "title": "Latest Population Report", + "error": "Error loading latest population report. The planet might not have population.", + "loading": "Loading Population Report" + }, + "visitation_frequency": { + "title": "Visitation Frequency", + "storage": { + "label": "Storage", + "info": "Your plan involves adding {storages} giving you a total storage capacity of {total_weight} t and {total_volume} m³.", + "info_no_storage": "Your plan has a total storage capacity of {total_weight} t and {total_volume} m³.", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "storage_filled": "Storage Filled", + "filled_unit": "days" + }, + "exclusion_info": "Exclude local materials from visitation frequency calculation for items handled exclusively planet-side, like local market sales, purchases or contracts." + }, + "shipping": { + "label": "Shipping", + "table": { + "ship_weight": "Ship t", + "ship_volume": "Ship m³", + "visitation_days": "Visitation (days)", + "limit": "Limit", + "export_frequency": "@:terms.export Frequency", + "import_frequency": "@:terms.import Frequency" + } + } + }, + "construction_cart": { + "title": "Construction Cart", + "unplanned_info": "Base has unplanned {buildings} (FIO: {fio_updated}). Demolish to ensure area, habitation and materials are accurate.", + "table": { + "building": "@:terms.buildings", + "built": "Built", + "amount": "Amount", + "habitation_info": "Insufficient habitation will reduce production efficiency.", + "planned": "Planned", + "materials_sum": "Materials Sum", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume", + "material": "Material", + "storage": "Storage", + "stock": "Stock", + "stock_override": "Stock Override", + "need": "Need" + } + }, + "supply_cart": { + "title": "Supply Cart", + "info": { + "p": "The Supply Cart provides updates on your plans needs combined with existing inventory sourced from FIO. You have the flexibility to opt for alternative storage locations to replenish your base. Tailor your selection based on whether you wish to restock workforce and production supplies or focus on a specific category, and specify the duration for which the supplied stock should sustain. Use the {link} tool for more advanced supply cart options.", + "link": "FIO Burn" + }, + "buttons": { + "all": "All", + "workforce": "Workforce", + "production": "Production" + }, + "table": { + "stock_duration": "Stock Duration (days)", + "storage": "Storage", + "xit_name": "Supply Cart", + "ticker": "Ticker", + "daily_need": "Daily Need", + "daily_cost": "Daily Cost", + "stock": "Stock", + "full_need": "Full Need", + "final_need": "Final Need", + "weight": "t", + "volume": "m³", + "workforce": "Workforce", + "production": "Production", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + } + }, + "repair_analysis": { + "title": "Repair Analysis", + "plan": "@:terms.plan", + "table": { + "select_day": "Select Day", + "material": "Material", + "amount": "Amount", + "cost": "Cost", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + }, + "graph": { + "select_building": "Select @:terms.buildings", + "individual_building": "Individual @:terms.buildings", + "repair_cost_breakdown": "Repair Cost Breakdown" + } + }, + "cogm": { + "title": "Cost of Goods Manufactured", + "cogm": "@:terms.cogm", + "info": "The cost of goods manufactured is calculated using plan settings that factor in production efficiency, recipe runtime, building degradation, input material costs, labor requirements, and associated labor costs. The final cost is shown per unit of output, based on quantity or full cost allocation.", + "cx_preferences": "@:terms.cx_plural Preferences", + "empire_ticker": "@:terms.empire Ticker", + "planet_ticker": "@:terms.planet Ticker", + "table": { + "parameters": "Parameters", + "recipe_runtime": "@:terms.recipes Runtime", + "percent_day": "% / day", + "efficiency": "Efficiency", + "degradation": "Degradation", + "cost": "@:terms.cost", + "materials": "@:terms.materials_meervoud", + "input_total": "Input Total", + "material": "@:terms.materials", + "cost_unit": "ȼ / Unit", + "cost_total": "Cost Total", + "cost_total_unit": "ȼ Total", + "workforce": "Workforce", + "total_cost": "Total Cost", + "recipe_profit": "@:terms.recipes Profit", + "cost_split": "Cost Split" + } + }, + "plan_analytics": { + "title": "Planning Insights", + "info": "Insights are aggregated from active player plans on {planet}. PRUNplanner enforces minimum sample thresholds to ensure both anonymity and statistical accuracy.", + "labels": { + "experts": "Experts", + "production_buildings": "Production @:terms.buildings_plural", + "recipes": "@:terms.recipes_plural" + } + } + }, + "components": { + "status": { + "hq": "HQ", + "cogc": "@:{'terms.cogc'}:", + "area": "@:{'terms.area'}:", + "profit": "@:{'terms.profit'}:", + "experts": "@:{'terms.experts_plural'}:" + }, + "configuration": { + "label": "Configuration", + "name": "Name", + "empire": "@:terms.empire" + }, + "area": { + "permits": "@:terms.permits_plural", + "area": "@:terms.area", + "free": "Free" + }, + "bonuses": { + "corp_hq": "Corp. HQ", + "corp_hq_tooltip": "The corporation you belong to has its headquarters on this planet (not your individual company).", + "cogc": "@:terms.cogc" + }, + "infrastructure": { + "label": "Infrastructure", + "auto_optimize": "Auto-Optimize Habs", + "auto_optimize_tooltip": "Automatically optimize habitations to meet workforce needs as buildings are added.", + "buttons": { + "optimize_cost": "Optimize Cost", + "optimize_area": "Optimize Area" + } + }, + "experts": { + "label": "Experts", + "warning": "Maximum number of experts on a base is 6. You currently have {expert_number} experts assigned." + }, + "workforce": { + "label": "Workforce", + "table": { + "type": "Type", + "need": "Need", + "supply": "Supply", + "open": "Open", + "luxuries": "Luxuries", + "pct_eff": "Eff. %" + } + }, + "overview": { + "label": "Overview", + "table": { + "daily_cost": "Daily Cost", + "degradation": "Degradation", + "plan_cost": "Plan Cost", + "daily_profit": "Daily Profit", + "roi": "ROI", + "profit_area": "@:terms.profit_per_area" + } + }, + "storage": { + "label": "Storage", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "filled": "Filled" + } + }, + "materialio": { + "label": "Material I/O", + "label_production": "Production", + "label_workforce": "Workforce", + "buttons": { + "toggle_weight_volume": "Toggle Weight & Volume", + "toggle_production_workforce": "Toggle Production & Workforce Split" + }, + "table": { + "input": "In", + "output": "Out", + "delta": "Δ", + "cost_day": "ȼ / day", + "total_weight": "Δ t", + "total_volume": "Δ m³" + } + }, + "save_as": { + "title": "Save As", + "form": { + "plan_name": "Name", + "plan_name_placeholder": "New @:terms.plan Name", + "empire": "@:terms.empire" + } + }, + "production": { + "label": "Production", + "planet_resources": "@:terms.planets @:terms.resources_plural", + "form": { + "match_cogc": "Match @:terms.cogc", + "select_placeholder": "Select @:terms.buildings & Add to @:terms.plan" + }, + "table": { + "building_recipe": "@:terms.buildings / @:terms.recipes", + "runtime": "Runtime", + "share": "Share", + "tools": "Tools" + } + }, + "production_building": { + "no_recipe": "No Active @:terms.recipes_plural", + "qty": "Qty", + "buttons": { + "add_recipe": "@:terms.recipes" + }, + "table": { + "expertise": "Expertise", + "efficiency": "Efficiency", + "revenue": "@:terms.revenue", + "area": "@:terms.area", + "construction": "Construction" + } + }, + "production_recipe": { + "cogm_title": "Cost Of Goods Manufactured", + "cogm_error": "COGM Calculation not possible. Check your Management View if your Empire has a CX assigned.", + "buttons": { + "cogm": "@:terms.cogm" + }, + "table": { + "input": "Input", + "time": "Time", + "output": "Output", + "daily_revenue": "ȼ / Day", + "profit_area": "ȼ / Area", + "roi": "ROI" + }, + "info": { + "p1_strong": "Revenue / Day", + "p1": "is calculated by taking the daily income generated from a recipe and subtracting both the daily workforce cost (all luxuries provided) and the daily building degradation cost (1/180th of the construction cost). The income from the recipe is based on the difference between the input material costs and the output material values.", + "p2_strong": "ȼ / Area", + "p2": "is the daily revenue divided by the area for one production building and its proportionate share of the area for a CM and habs required for an optimal base of such buildings in Recipe ROI.", + "p3_strong": "ROI", + "p3": "is the time required for a continuously operating recipe to generate enough revenue to offset the building's construction cost. This considers daily degradation and workforce costs as well." + } + } + } +} diff --git a/src/locales/nl_NL/profile.json b/src/locales/nl_NL/profile.json index 4bf31dae..cdc413fb 100644 --- a/src/locales/nl_NL/profile.json +++ b/src/locales/nl_NL/profile.json @@ -42,7 +42,7 @@ "title": "What is FIO & Why should you use it?", "help": { "title": "5 Easy Steps to Integrate FIO and PRUNplanner", - "p1": "FIO is a community developed {link} that collects your game data, makes it available outside of @:terms.prosperous_universe and is completely free to use.", + "p1": "FIO is a community developed {link} that collects your game data, makes it available outside of Prosperous Universe and is completely free to use.", "p2": "Just go ahead and install the Chrome or Firefox extension, reload your browser with APEX open and click the extension button in the upper-right in your browser to create an account. FIO will automatically collect (only) your game data while you keep playing.", "p3": "You can now login to the {link} to see your data and create an API-Key PRUNplanner will use to import your storage (materials you have somewhere) and sites (planets, ships, warehouses) data.", "p4": "Creating the key is easy, if you head to the {link} page and click the \"Create API Key\" button. Enter a name for your key (e.g., \"PRUNplanner\") and your FIO password. You don't need to \"Allow Writes\" as PRUNplanner will not manipulate any of your data, the tool just reads and uses it.", @@ -71,6 +71,7 @@ "form": { "tool_preferences": "Tool Preferences", "language": "Language", + "language_note": "We want to make PRUNplanner accessible to everyone. If you'd like to see the tool in your native language - or help us polish an existing translation - join our localization project on {link}.", "default_empire": "Default Empire", "default_cx": "Default CX", "fio_burn": "FIO Burn", diff --git a/src/locales/nl_NL/sharing.json b/src/locales/nl_NL/sharing.json new file mode 100644 index 00000000..fc01f576 --- /dev/null +++ b/src/locales/nl_NL/sharing.json @@ -0,0 +1,11 @@ +{ + "info": "This will create an unique link that can be shared with others. They will be able to see your plan, but don't modify it. The link becomes unavailable once you choose to stop sharing or delete the plan.", + "share_count": "You're currently sharing this plan. It has been viewed {count} times", + "buttons": { + "create_link": "Create Sharing Link", + "copy_url": "Copy URL", + "stop_sharing": "Stop Sharing", + "views": "{count} Views", + "share": "Share" + } +} diff --git a/src/locales/nl_NL/terms.json b/src/locales/nl_NL/terms.json index b7ead843..ec554d8b 100644 --- a/src/locales/nl_NL/terms.json +++ b/src/locales/nl_NL/terms.json @@ -1,11 +1,15 @@ { "30d": "30D", "7d": "7D", + "amount": "Amount", "api_key": "API Key", + "area": "Area", "ask": "Ask", "bid": "Bid", "buffer": "Buffer", + "buildings_plural": "Buildings", "buildings": "Building | Buildings", + "burn": "Burn", "cogc": "COGC", "cogm": "COGM", "consumption": "Consumption", @@ -15,8 +19,12 @@ "delta_price": "ȼ Delta", "delta": "Delta", "demand": "Demand", + "empire_plural": "Empires", "empire": "Empire | Empires", "exchanges": "Exchange | Exchanges", + "experts_plural": "Experts", + "experts": "Expert | Experts", + "export": "Export", "faction": "Faction", "fertility": "Fertility", "filter": "Filter", @@ -25,10 +33,12 @@ "gravity": "Gravity", "high": "High", "hq": "HQ", + "import": "Import", "low": "Low", "material_ticker": "Ticker", "materials_plural": "Materials", "materials": "Material | Materials", + "override": "Override", "permits_plural": "Permits", "permits": "Permit | Permits", "plan": "Plan | Plans", @@ -37,22 +47,27 @@ "plans_plural": "Plans", "popr": "POPR", "pressure": "Pressure", + "price": "Price", "production": "Production", "profit_per_area": "Profit / Area", "profit": "Profit", + "recipes_plural": "Recipes", "recipes": "Recipe | Recipes", "resources_plural": "Resources", "resources": "Resource | Resources", "revenue": "Revenue", "rocky": "Rocky", "spread": "Spread", + "stock": "Stock", + "storage": "Storage", + "sum": "∑", "supply": "Supply", "surface": "Surface", "temperature": "Temperature", + "total_volume": "Total Volume", + "total_weight": "Total Weight", "trend": "Trend", "volume": "Volume", "vwap": "VWAP", - "weight": "Weight", - "amount": "Amount", - "storage": "Storage" + "weight": "Weight" } diff --git a/src/locales/nl_NL/xit.json b/src/locales/nl_NL/xit.json new file mode 100644 index 00000000..7d505bd8 --- /dev/null +++ b/src/locales/nl_NL/xit.json @@ -0,0 +1,26 @@ +{ + "form": { + "origin": "Origin", + "target_days": "Target Days", + "buy_from_cx": "Buy From CX", + "buy_from_cx_warning": "Only warehouse origin allows purchasing.", + "fit_ship": "Fit Ship", + "hide_infinite": "Hide Infinite", + "json": "JSON" + }, + "buttons": { + "copy_json": "Copy XIT JSON", + "copy": "@:common.buttons.copy" + }, + "table": { + "ticker": "@:terms.material_ticker", + "stock": "@:terms.stock", + "delta": "@:terms.delta", + "burn": "@:terms.burn", + "amount": "@:terms.amount", + "override": "@:terms.override", + "weight_value": "@:{'terms.weight'}: {value}", + "volume_value": "@:{'terms.volume'}: {value}", + "price_value": "@:{'terms.price'}: {value}" + } +} diff --git a/src/locales/pt_PT/account.json b/src/locales/pt_PT/account.json new file mode 100644 index 00000000..f6fdc2c0 --- /dev/null +++ b/src/locales/pt_PT/account.json @@ -0,0 +1,81 @@ +{ + "components": { + "login": { + "title": "Login", + "error": "Error logging in. Please check your username and password.", + "buttons": { + "login": "Login" + }, + "form": { + "username": "Username", + "password": "Password" + }, + "tos": "By using PRUNplanner you agree to the {tos_link}.", + "tos_link": "Terms of Service", + "forgot": "Forgot your password? Request a {forgot_link}.", + "forgot_link": "Password Reset" + }, + "registration": { + "title": "Account Information", + "tos": "PRUNplanner is free to use. By creating an account, you acknowledge and agree to the {tos_link}.", + "tos_link": "Terms of Service", + "result": { + "ok_header": "Welcome, {username}!", + "ok_message": "Registration succesful. You can now login to PRUNplanner.", + "error": "Error during registration." + }, + "buttons": { + "register": "Create Account" + }, + "form": { + "username": "Username", + "username_info": "Must be at least 3 characters long. Can't contain spaces.", + "password": "Password", + "password_info": "Must be at least 8 characters long.", + "email": "Email", + "email_placeholder": "Not mandatory, but recommended.", + "email_info": "Not mandatory. Increases your account security.", + "security_question": "Security Question", + "question": "Enter the name of planet {planet}. To find it, open a new Prosperous Universe buffer with the command {command}. You'll see the planets name listed under 'Name' in the planet information", + "planet_name": "Name" + } + }, + "password_reset": { + "title": "Reset your Password", + "info": "Please enter the code sent to your email, along with your new password.", + "buttons": { + "send": "Reset Password" + }, + "form": { + "email": "Email", + "code": "Code", + "password": "Password", + "password_info": "Must be at least 8 characters long." + } + }, + "request_password_reset": { + "title": "Password Reset Request", + "info": "Enter the verified email address linked to your PRUNplanner account. If we recognize it, we'll send you a code to reset your password.", + "form": { + "email_placeholder": "Email Address" + }, + "buttons": { + "send": "Request Password Reset" + } + }, + "verify_email": { + "title": "Email Verification", + "info": "Please enter the verification code you received via email. Maybe check your spam folder.", + "buttons": { + "send": "Verify Email Address" + }, + "form": { + "code_placeholder": "Verification Code" + }, + "result": { + "ok": "Email address verified.", + "error": "Invalid code or already verified." + } + } + } +} diff --git a/src/locales/pt_PT/common.json b/src/locales/pt_PT/common.json index e80606df..60ae9f5a 100644 --- a/src/locales/pt_PT/common.json +++ b/src/locales/pt_PT/common.json @@ -33,6 +33,7 @@ "buttons": { "create": "Create", "save": "Save", + "save_as": "Save As", "reload": "Reload", "show": "Show", "hide": "Hide", @@ -40,9 +41,24 @@ "search": "Search", "default": "Default", "select_all": "Select All", + "discard": "Discard", "yes": "Yes", "no": "No", "delete": "Delete", - "cancel": "Cancel" + "cancel": "Cancel", + "clone_plan": "Clone Plan", + "clone_complete": "Cloning Complete", + "copy": "Copy" + }, + "ui": { + "placeholder": { + "please_input": "Please Input", + "please_select": "Please Select", + "search": "Search" + }, + "select": { + "no_results": "No Results", + "select_options": "Select Options" + } } } diff --git a/src/locales/pt_PT/exchanges.json b/src/locales/pt_PT/exchanges.json new file mode 100644 index 00000000..8c599196 --- /dev/null +++ b/src/locales/pt_PT/exchanges.json @@ -0,0 +1,55 @@ +{ + "view_title": "Exchanges", + "title": "Exchanges", + "errors": { + "title": "No Preferences", + "message": "You don't have exchange preferences. Head to Management and create your first." + }, + "buttons": { + "csv_import_export": "@:exchanges.components.csv_import_export.title", + "save": "@:common.buttons.save", + "reload": "@:common.buttons.reload" + }, + "configuration": { + "form": { + "preference_name": "Preference Name", + "empire_preferences": "Empire Preferences", + "exchange": "Exchange", + "ticker": "@:terms.material_ticker" + } + }, + "preference_type": { + "BUY": "BUY", + "SELL": "SELL", + "BOTH": "BOTH" + }, + "components": { + "ticker": { + "no_data": "No @:terms.material_ticker Preferences Configured", + "material_placeholder": "@:terms.materials" + }, + "exchanges": { + "no_data": "No @:terms.exchanges Preference Configured" + }, + "planet_preferences": { + "title": "Planet Preferences", + "form": { + "exchange": "@:terms.exchanges", + "ticker": "@:terms.material_ticker" + }, + "table": { + "planet": "@:terms.planets", + "exchange_preference": "@:terms.exchanges Preferences", + "ticker_preference": "@:terms.material_ticker Preferences" + } + }, + "csv_import_export": { + "title": "Import / Export CSV", + "warning": "Warning: Importing deletes all existing properties and imports the new ones. You need to save your imported preferences after uploading the CSV file or use the reload button to discard them.", + "buttons": { + "import": "Import Settings", + "export": "Export Settings" + } + } + } +} diff --git a/src/locales/pt_PT/fio.json b/src/locales/pt_PT/fio.json new file mode 100644 index 00000000..a104665d --- /dev/null +++ b/src/locales/pt_PT/fio.json @@ -0,0 +1,49 @@ +{ + "burn": { + "view_title": "FIO Burn", + "title": "FIO Burn:", + "fio_last_update": "FIO Data Update: {last_updated}", + "form": { + "empire": "@:terms.empire", + "burn_thresholds": "Burn Thresholds", + "red": "Red", + "yellow": "Yellow" + }, + "components": { + "overview": { + "title": "Plan Burn Overview", + "table": { + "plan": "@:terms.plan", + "planet": "@:terms.planets", + "burn": "Burn" + } + }, + "plans": { + "xit_title": "XIT Resupply: {plan_name}", + "table": { + "ticker": "@:terms.material_ticker", + "consumption": "@:terms.consumption", + "production": "@:terms.production", + "delta": "@:terms.delta", + "stock": "@:terms.stock", + "plan": "@:terms.plan", + "burn": "Burn", + "exhaustion": "Exhaustion" + } + } + } + }, + "repair": { + "view_title": "FIO Repair", + "title": "FIO Repair", + "fio_last_update": "FIO Data Update: {last_updated}", + "table": { + "title": "@:terms.planet_plural", + "planet": "@:terms.planets", + "buildings": "@:terms.buildings_plural", + "avg_condition": "⌀ Condition", + "min_condition": "Min. Condition", + "repair_age": "Repair Age" + } + } +} diff --git a/src/locales/pt_PT/game.json b/src/locales/pt_PT/game.json index 8351bc83..f3e19d40 100644 --- a/src/locales/pt_PT/game.json +++ b/src/locales/pt_PT/game.json @@ -4,6 +4,21 @@ "PLANETARY": "Planetary", "PRODUCTION": "Production" }, + "workforce_type": { + "pioneer": "Pioneer", + "settler": "Settler", + "technician": "Technician", + "engineer": "Engineer", + "scientist": "Scientist" + }, + "efficiency_type": { + "WORKFORCE": "Workforce", + "HQ": "HQ", + "EXPERT": "Experts", + "COGC": "COGC", + "FERTILITY": "Fertility", + "FACTION": "Faction" + }, "expertise": { "AGRICULTURE": "Agriculture", "CHEMISTRY": "Chemistry", @@ -51,6 +66,42 @@ "WORKFORCE_ENGINEERS": "ENG", "WORKFORCE_SCIENTISTS": "SCI" }, + "material_category": { + "agricultural_products": "Agricultural Products", + "alloys": "Alloys", + "chemicals": "Chemicals", + "construction_materials": "Construction Materials", + "construction_parts": "Construction Parts", + "construction_prefabs": "Construction Prefabs", + "consumable_bundles": "Consumable Bundles", + "consumables_(basic)": "Consumables Basic", + "consumables_(luxury)": "Consumables Luxury", + "drones": "Drones", + "electronic_devices": "Electronic Devices", + "electronic_parts": "Electronic Parts", + "electronic_pieces": "Electronic Pieces", + "electronic_systems": "Electronic Systems", + "elements": "Elements", + "energy_systems": "Energy Systems", + "fuels": "Fuels", + "gases": "Gases", + "liquids": "Liquids", + "medical_equipment": "Medical Equipment", + "metals": "Metals", + "minerals": "Minerals", + "ores": "Ores", + "plastics": "Plastics", + "ship_engines": "Ship Engines", + "ship_kits": "Ship Kits", + "ship_parts": "Ship Parts", + "ship_shields": "Ship Shields", + "software_components": "Software Components", + "software_systems": "Software Systems", + "software_tools": "Software Tools", + "textiles": "Textiles", + "unit_prefabs": "Unit Prefabs", + "utility": "Utility" + }, "upkeep": { "safety": "Safety", "health": "Health", diff --git a/src/locales/pt_PT/government.json b/src/locales/pt_PT/government.json new file mode 100644 index 00000000..2a00d90b --- /dev/null +++ b/src/locales/pt_PT/government.json @@ -0,0 +1,16 @@ +{ + "popr_button": { + "no_data": "Planet {planet_id} has no population data", + "buttons": { + "no_popr": "No POPR" + }, + "table": { + "total_population": "Total Population", + "free_population": "Free Population", + "free_population_pct": "Free Population %", + "unfilled_jobs": "Unfilled Jobs", + "plan_need": "@:terms.plan Need", + "plan_check": "@:terms.plan Check" + } + } +} diff --git a/src/locales/pt_PT/homepage.json b/src/locales/pt_PT/homepage.json index dbdb94e7..5c8aa103 100644 --- a/src/locales/pt_PT/homepage.json +++ b/src/locales/pt_PT/homepage.json @@ -62,7 +62,7 @@ "section_title": "Powered by tools we love to use" }, "open_source": { - "section_title": "Free & Open Source", + "section_title": "Free & Open Source", "section_lead": "PRUNplanner is completely free to use, and its frontend is fully {link}.", "prompt": "Love it? We'd be thrilled if you contributed!", "link_open_source": "Open Source" diff --git a/src/locales/pt_PT/market_live.json b/src/locales/pt_PT/market_live.json new file mode 100644 index 00000000..ca5a5b21 --- /dev/null +++ b/src/locales/pt_PT/market_live.json @@ -0,0 +1,101 @@ +{ + "view_title": "Market Live", + "title": "Market Live", + "status": { + "connected": "Connected", + "disconnected": "Disconnected" + }, + "severity_type": { + "LOW": "LOW", + "MEDIUM": "MEDIUM", + "HIGH": "HIGH" + }, + "status_type": { + "active": "Active", + "paused": "Paused" + }, + "rule_type": { + "static": "Value", + "previous": "Previous", + "previous_pct": "Offset %", + "text": "Text" + }, + "components": { + "feed": { + "title": "Alert Feed", + "buttons": { + "open_manager": "Open Alert Manager", + "close_manager": "Close Alert Manager", + "clear_feed": "Clear Feed", + "show_overview": "Show Overview", + "hide_overview": "Hide Overview" + } + }, + "alert_feed": { + "waiting": "Waiting for market events triggering alerts...", + "table": { + "ticker_alert": "Ticker / Alert", + "severity": "Severity", + "logic": "Trigger Logic", + "event": "Event", + "time": "Time" + } + }, + "details": { + "price": "Price", + "ask": "@:{'terms.ask'}: {value}", + "bid": "@:{'terms.bid'}: {value}", + "spread": "@:{'terms.spread'}", + "buy_volume": "Buy Volume", + "vwap": "@:{'terms.vwap'}: {value}", + "change": "Change: {value}", + "sell_volume": "Sell Volume", + "buy_volume_value": "Buy Volume: {value}", + "sell_volume_value": "Sell Volume: {value}" + }, + "point_table": { + "table": { + "ticker": "@:terms.material_ticker", + "price": "@:terms.price", + "bid": "@:terms.bid", + "ask": "@:terms.ask", + "spread_pct": "Spread %", + "buy_volume": "Buy Vol.", + "sell_volume": "Sell Vol." + } + }, + "history": { + "title": "Data History", + "received": "{value} @:terms.material_ticker received" + }, + "rule_builder": { + "new_rule_name": "New Rule", + "buttons": { + "add_condition": "Condition", + "add_group": "Group", + "remove": "Remove" + }, + "error": "Error: {value}", + "empty": "Empty Group" + }, + "alert_manager": { + "title": "Alert Manager", + "title_editing": "Edit Alert", + "info": "Alerts are currently stored on this device only and are not synced to your account.", + "no_alerts": "No alerts found. Start by creating your first detector signal", + "buttons": { + "create_alert": "Create New Alert", + "discard": "@:common.buttons.discard", + "save": "@:common.buttons.save", + "delete": "@:common.buttons.delete" + }, + "form": { + "alert_name": "Alert Name", + "severity": "Severity", + "status": "Status", + "logic_configuration": "Logic Configuration", + "previous_datapoint": "Previous Datepoint" + } + } + } +} diff --git a/src/locales/pt_PT/material_tile.json b/src/locales/pt_PT/material_tile.json new file mode 100644 index 00000000..7feabd58 --- /dev/null +++ b/src/locales/pt_PT/material_tile.json @@ -0,0 +1,23 @@ +{ + "information": { + "title": "Material Information", + "table": { + "category": "Category", + "weight": "Weight", + "volume": "Volume" + } + }, + "indicator": { + "value": "Value", + "max": "Maximum", + "pct_max": "% / Max" + }, + "chart": { + "title": "Market History", + "labels": { + "traded": "Traded Volume", + "low_p": "Daily Minimum Price", + "high_p": "Daily Maximum Price" + } + } +} diff --git a/src/locales/pt_PT/plan.json b/src/locales/pt_PT/plan.json new file mode 100644 index 00000000..1b01bf38 --- /dev/null +++ b/src/locales/pt_PT/plan.json @@ -0,0 +1,298 @@ +{ + "notifications": { + "must_have_name": "Must set a plan name in Configuration to save" + }, + "tools": { + "labels": { + "popr": "POPR", + "visitation_frequency": "Visitation Frequency", + "construction_cart": "Construction Cart", + "supply_cart": "Supply Cart", + "repair_analysis": "Repair Analysis", + "workforce": "Workforce" + }, + "popr": { + "title": "Latest Population Report", + "error": "Error loading latest population report. The planet might not have population.", + "loading": "Loading Population Report" + }, + "visitation_frequency": { + "title": "Visitation Frequency", + "storage": { + "label": "Storage", + "info": "Your plan involves adding {storages} giving you a total storage capacity of {total_weight} t and {total_volume} m³.", + "info_no_storage": "Your plan has a total storage capacity of {total_weight} t and {total_volume} m³.", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "storage_filled": "Storage Filled", + "filled_unit": "days" + }, + "exclusion_info": "Exclude local materials from visitation frequency calculation for items handled exclusively planet-side, like local market sales, purchases or contracts." + }, + "shipping": { + "label": "Shipping", + "table": { + "ship_weight": "Ship t", + "ship_volume": "Ship m³", + "visitation_days": "Visitation (days)", + "limit": "Limit", + "export_frequency": "@:terms.export Frequency", + "import_frequency": "@:terms.import Frequency" + } + } + }, + "construction_cart": { + "title": "Construction Cart", + "unplanned_info": "Base has unplanned {buildings} (FIO: {fio_updated}). Demolish to ensure area, habitation and materials are accurate.", + "table": { + "building": "@:terms.buildings", + "built": "Built", + "amount": "Amount", + "habitation_info": "Insufficient habitation will reduce production efficiency.", + "planned": "Planned", + "materials_sum": "Materials Sum", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume", + "material": "Material", + "storage": "Storage", + "stock": "Stock", + "stock_override": "Stock Override", + "need": "Need" + } + }, + "supply_cart": { + "title": "Supply Cart", + "info": { + "p": "The Supply Cart provides updates on your plans needs combined with existing inventory sourced from FIO. You have the flexibility to opt for alternative storage locations to replenish your base. Tailor your selection based on whether you wish to restock workforce and production supplies or focus on a specific category, and specify the duration for which the supplied stock should sustain. Use the {link} tool for more advanced supply cart options.", + "link": "FIO Burn" + }, + "buttons": { + "all": "All", + "workforce": "Workforce", + "production": "Production" + }, + "table": { + "stock_duration": "Stock Duration (days)", + "storage": "Storage", + "xit_name": "Supply Cart", + "ticker": "Ticker", + "daily_need": "Daily Need", + "daily_cost": "Daily Cost", + "stock": "Stock", + "full_need": "Full Need", + "final_need": "Final Need", + "weight": "t", + "volume": "m³", + "workforce": "Workforce", + "production": "Production", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + } + }, + "repair_analysis": { + "title": "Repair Analysis", + "plan": "@:terms.plan", + "table": { + "select_day": "Select Day", + "material": "Material", + "amount": "Amount", + "cost": "Cost", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + }, + "graph": { + "select_building": "Select @:terms.buildings", + "individual_building": "Individual @:terms.buildings", + "repair_cost_breakdown": "Repair Cost Breakdown" + } + }, + "cogm": { + "title": "Cost of Goods Manufactured", + "cogm": "@:terms.cogm", + "info": "The cost of goods manufactured is calculated using plan settings that factor in production efficiency, recipe runtime, building degradation, input material costs, labor requirements, and associated labor costs. The final cost is shown per unit of output, based on quantity or full cost allocation.", + "cx_preferences": "@:terms.cx_plural Preferences", + "empire_ticker": "@:terms.empire Ticker", + "planet_ticker": "@:terms.planet Ticker", + "table": { + "parameters": "Parameters", + "recipe_runtime": "@:terms.recipes Runtime", + "percent_day": "% / day", + "efficiency": "Efficiency", + "degradation": "Degradation", + "cost": "@:terms.cost", + "materials": "@:terms.materials_plural", + "input_total": "Input Total", + "material": "@:terms.materials", + "cost_unit": "ȼ / Unit", + "cost_total": "Cost Total", + "cost_total_unit": "ȼ Total", + "workforce": "Workforce", + "total_cost": "Total Cost", + "recipe_profit": "@:terms.recipes Profit", + "cost_split": "Cost Split" + } + }, + "plan_analytics": { + "title": "Planning Insights", + "info": "Insights are aggregated from active player plans on {planet}. PRUNplanner enforces minimum sample thresholds to ensure both anonymity and statistical accuracy.", + "labels": { + "experts": "Experts", + "production_buildings": "Production @:terms.buildings_plural", + "recipes": "@:terms.recipes_plural" + } + } + }, + "components": { + "status": { + "hq": "HQ", + "cogc": "@:{'terms.cogc'}:", + "area": "@:{'terms.area'}:", + "profit": "@:{'terms.profit'}:", + "experts": "@:{'terms.experts_plural'}:" + }, + "configuration": { + "label": "Configuration", + "name": "Name", + "empire": "@:terms.empire" + }, + "area": { + "permits": "@:terms.permits_plural", + "area": "@:terms.area", + "free": "Free" + }, + "bonuses": { + "corp_hq": "Corp. HQ", + "corp_hq_tooltip": "The corporation you belong to has its headquarters on this planet (not your individual company).", + "cogc": "@:terms.cogc" + }, + "infrastructure": { + "label": "Infrastructure", + "auto_optimize": "Auto-Optimize Habs", + "auto_optimize_tooltip": "Automatically optimize habitations to meet workforce needs as buildings are added.", + "buttons": { + "optimize_cost": "Optimize Cost", + "optimize_area": "Optimize Area" + } + }, + "experts": { + "label": "Experts", + "warning": "Maximum number of experts on a base is 6. You currently have {expert_number} experts assigned." + }, + "workforce": { + "label": "Workforce", + "table": { + "type": "Type", + "need": "Need", + "supply": "Supply", + "open": "Open", + "luxuries": "Luxuries", + "pct_eff": "Eff. %" + } + }, + "overview": { + "label": "Overview", + "table": { + "daily_cost": "Daily Cost", + "degradation": "Degradation", + "plan_cost": "Plan Cost", + "daily_profit": "Daily Profit", + "roi": "ROI", + "profit_area": "@:terms.profit_per_area" + } + }, + "storage": { + "label": "Storage", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "filled": "Filled" + } + }, + "materialio": { + "label": "Material I/O", + "label_production": "Production", + "label_workforce": "Workforce", + "buttons": { + "toggle_weight_volume": "Toggle Weight & Volume", + "toggle_production_workforce": "Toggle Production & Workforce Split" + }, + "table": { + "input": "In", + "output": "Out", + "delta": "Δ", + "cost_day": "ȼ / day", + "total_weight": "Δ t", + "total_volume": "Δ m³" + } + }, + "save_as": { + "title": "Save As", + "form": { + "plan_name": "Name", + "plan_name_placeholder": "New @:terms.plan Name", + "empire": "@:terms.empire" + } + }, + "production": { + "label": "Production", + "planet_resources": "@:terms.planets @:terms.resources_plural", + "form": { + "match_cogc": "Match @:terms.cogc", + "select_placeholder": "Select @:terms.buildings & Add to @:terms.plan" + }, + "table": { + "building_recipe": "@:terms.buildings / @:terms.recipes", + "runtime": "Runtime", + "share": "Share", + "tools": "Tools" + } + }, + "production_building": { + "no_recipe": "No Active @:terms.recipes_plural", + "qty": "Qty", + "buttons": { + "add_recipe": "@:terms.recipes" + }, + "table": { + "expertise": "Expertise", + "efficiency": "Efficiency", + "revenue": "@:terms.revenue", + "area": "@:terms.area", + "construction": "Construction" + } + }, + "production_recipe": { + "cogm_title": "Cost Of Goods Manufactured", + "cogm_error": "COGM Calculation not possible. Check your Management View if your Empire has a CX assigned.", + "buttons": { + "cogm": "@:terms.cogm" + }, + "table": { + "input": "Input", + "time": "Time", + "output": "Output", + "daily_revenue": "ȼ / Day", + "profit_area": "ȼ / Area", + "roi": "ROI" + }, + "info": { + "p1_strong": "Revenue / Day", + "p1": "is calculated by taking the daily income generated from a recipe and subtracting both the daily workforce cost (all luxuries provided) and the daily building degradation cost (1/180th of the construction cost). The income from the recipe is based on the difference between the input material costs and the output material values.", + "p2_strong": "ȼ / Area", + "p2": "is the daily revenue divided by the area for one production building and its proportionate share of the area for a CM and habs required for an optimal base of such buildings in Recipe ROI.", + "p3_strong": "ROI", + "p3": "is the time required for a continuously operating recipe to generate enough revenue to offset the building's construction cost. This considers daily degradation and workforce costs as well." + } + } + } +} diff --git a/src/locales/pt_PT/profile.json b/src/locales/pt_PT/profile.json index 4bf31dae..cdc413fb 100644 --- a/src/locales/pt_PT/profile.json +++ b/src/locales/pt_PT/profile.json @@ -42,7 +42,7 @@ "title": "What is FIO & Why should you use it?", "help": { "title": "5 Easy Steps to Integrate FIO and PRUNplanner", - "p1": "FIO is a community developed {link} that collects your game data, makes it available outside of @:terms.prosperous_universe and is completely free to use.", + "p1": "FIO is a community developed {link} that collects your game data, makes it available outside of Prosperous Universe and is completely free to use.", "p2": "Just go ahead and install the Chrome or Firefox extension, reload your browser with APEX open and click the extension button in the upper-right in your browser to create an account. FIO will automatically collect (only) your game data while you keep playing.", "p3": "You can now login to the {link} to see your data and create an API-Key PRUNplanner will use to import your storage (materials you have somewhere) and sites (planets, ships, warehouses) data.", "p4": "Creating the key is easy, if you head to the {link} page and click the \"Create API Key\" button. Enter a name for your key (e.g., \"PRUNplanner\") and your FIO password. You don't need to \"Allow Writes\" as PRUNplanner will not manipulate any of your data, the tool just reads and uses it.", @@ -71,6 +71,7 @@ "form": { "tool_preferences": "Tool Preferences", "language": "Language", + "language_note": "We want to make PRUNplanner accessible to everyone. If you'd like to see the tool in your native language - or help us polish an existing translation - join our localization project on {link}.", "default_empire": "Default Empire", "default_cx": "Default CX", "fio_burn": "FIO Burn", diff --git a/src/locales/pt_PT/sharing.json b/src/locales/pt_PT/sharing.json new file mode 100644 index 00000000..fc01f576 --- /dev/null +++ b/src/locales/pt_PT/sharing.json @@ -0,0 +1,11 @@ +{ + "info": "This will create an unique link that can be shared with others. They will be able to see your plan, but don't modify it. The link becomes unavailable once you choose to stop sharing or delete the plan.", + "share_count": "You're currently sharing this plan. It has been viewed {count} times", + "buttons": { + "create_link": "Create Sharing Link", + "copy_url": "Copy URL", + "stop_sharing": "Stop Sharing", + "views": "{count} Views", + "share": "Share" + } +} diff --git a/src/locales/pt_PT/terms.json b/src/locales/pt_PT/terms.json index b7ead843..ec554d8b 100644 --- a/src/locales/pt_PT/terms.json +++ b/src/locales/pt_PT/terms.json @@ -1,11 +1,15 @@ { "30d": "30D", "7d": "7D", + "amount": "Amount", "api_key": "API Key", + "area": "Area", "ask": "Ask", "bid": "Bid", "buffer": "Buffer", + "buildings_plural": "Buildings", "buildings": "Building | Buildings", + "burn": "Burn", "cogc": "COGC", "cogm": "COGM", "consumption": "Consumption", @@ -15,8 +19,12 @@ "delta_price": "ȼ Delta", "delta": "Delta", "demand": "Demand", + "empire_plural": "Empires", "empire": "Empire | Empires", "exchanges": "Exchange | Exchanges", + "experts_plural": "Experts", + "experts": "Expert | Experts", + "export": "Export", "faction": "Faction", "fertility": "Fertility", "filter": "Filter", @@ -25,10 +33,12 @@ "gravity": "Gravity", "high": "High", "hq": "HQ", + "import": "Import", "low": "Low", "material_ticker": "Ticker", "materials_plural": "Materials", "materials": "Material | Materials", + "override": "Override", "permits_plural": "Permits", "permits": "Permit | Permits", "plan": "Plan | Plans", @@ -37,22 +47,27 @@ "plans_plural": "Plans", "popr": "POPR", "pressure": "Pressure", + "price": "Price", "production": "Production", "profit_per_area": "Profit / Area", "profit": "Profit", + "recipes_plural": "Recipes", "recipes": "Recipe | Recipes", "resources_plural": "Resources", "resources": "Resource | Resources", "revenue": "Revenue", "rocky": "Rocky", "spread": "Spread", + "stock": "Stock", + "storage": "Storage", + "sum": "∑", "supply": "Supply", "surface": "Surface", "temperature": "Temperature", + "total_volume": "Total Volume", + "total_weight": "Total Weight", "trend": "Trend", "volume": "Volume", "vwap": "VWAP", - "weight": "Weight", - "amount": "Amount", - "storage": "Storage" + "weight": "Weight" } diff --git a/src/locales/pt_PT/xit.json b/src/locales/pt_PT/xit.json new file mode 100644 index 00000000..7d505bd8 --- /dev/null +++ b/src/locales/pt_PT/xit.json @@ -0,0 +1,26 @@ +{ + "form": { + "origin": "Origin", + "target_days": "Target Days", + "buy_from_cx": "Buy From CX", + "buy_from_cx_warning": "Only warehouse origin allows purchasing.", + "fit_ship": "Fit Ship", + "hide_infinite": "Hide Infinite", + "json": "JSON" + }, + "buttons": { + "copy_json": "Copy XIT JSON", + "copy": "@:common.buttons.copy" + }, + "table": { + "ticker": "@:terms.material_ticker", + "stock": "@:terms.stock", + "delta": "@:terms.delta", + "burn": "@:terms.burn", + "amount": "@:terms.amount", + "override": "@:terms.override", + "weight_value": "@:{'terms.weight'}: {value}", + "volume_value": "@:{'terms.volume'}: {value}", + "price_value": "@:{'terms.price'}: {value}" + } +} diff --git a/src/locales/ru_RU/account.json b/src/locales/ru_RU/account.json new file mode 100644 index 00000000..f6fdc2c0 --- /dev/null +++ b/src/locales/ru_RU/account.json @@ -0,0 +1,81 @@ +{ + "components": { + "login": { + "title": "Login", + "error": "Error logging in. Please check your username and password.", + "buttons": { + "login": "Login" + }, + "form": { + "username": "Username", + "password": "Password" + }, + "tos": "By using PRUNplanner you agree to the {tos_link}.", + "tos_link": "Terms of Service", + "forgot": "Forgot your password? Request a {forgot_link}.", + "forgot_link": "Password Reset" + }, + "registration": { + "title": "Account Information", + "tos": "PRUNplanner is free to use. By creating an account, you acknowledge and agree to the {tos_link}.", + "tos_link": "Terms of Service", + "result": { + "ok_header": "Welcome, {username}!", + "ok_message": "Registration succesful. You can now login to PRUNplanner.", + "error": "Error during registration." + }, + "buttons": { + "register": "Create Account" + }, + "form": { + "username": "Username", + "username_info": "Must be at least 3 characters long. Can't contain spaces.", + "password": "Password", + "password_info": "Must be at least 8 characters long.", + "email": "Email", + "email_placeholder": "Not mandatory, but recommended.", + "email_info": "Not mandatory. Increases your account security.", + "security_question": "Security Question", + "question": "Enter the name of planet {planet}. To find it, open a new Prosperous Universe buffer with the command {command}. You'll see the planets name listed under 'Name' in the planet information", + "planet_name": "Name" + } + }, + "password_reset": { + "title": "Reset your Password", + "info": "Please enter the code sent to your email, along with your new password.", + "buttons": { + "send": "Reset Password" + }, + "form": { + "email": "Email", + "code": "Code", + "password": "Password", + "password_info": "Must be at least 8 characters long." + } + }, + "request_password_reset": { + "title": "Password Reset Request", + "info": "Enter the verified email address linked to your PRUNplanner account. If we recognize it, we'll send you a code to reset your password.", + "form": { + "email_placeholder": "Email Address" + }, + "buttons": { + "send": "Request Password Reset" + } + }, + "verify_email": { + "title": "Email Verification", + "info": "Please enter the verification code you received via email. Maybe check your spam folder.", + "buttons": { + "send": "Verify Email Address" + }, + "form": { + "code_placeholder": "Verification Code" + }, + "result": { + "ok": "Email address verified.", + "error": "Invalid code or already verified." + } + } + } +} diff --git a/src/locales/ru_RU/common.json b/src/locales/ru_RU/common.json index e80606df..60ae9f5a 100644 --- a/src/locales/ru_RU/common.json +++ b/src/locales/ru_RU/common.json @@ -33,6 +33,7 @@ "buttons": { "create": "Create", "save": "Save", + "save_as": "Save As", "reload": "Reload", "show": "Show", "hide": "Hide", @@ -40,9 +41,24 @@ "search": "Search", "default": "Default", "select_all": "Select All", + "discard": "Discard", "yes": "Yes", "no": "No", "delete": "Delete", - "cancel": "Cancel" + "cancel": "Cancel", + "clone_plan": "Clone Plan", + "clone_complete": "Cloning Complete", + "copy": "Copy" + }, + "ui": { + "placeholder": { + "please_input": "Please Input", + "please_select": "Please Select", + "search": "Search" + }, + "select": { + "no_results": "No Results", + "select_options": "Select Options" + } } } diff --git a/src/locales/ru_RU/exchanges.json b/src/locales/ru_RU/exchanges.json new file mode 100644 index 00000000..8c599196 --- /dev/null +++ b/src/locales/ru_RU/exchanges.json @@ -0,0 +1,55 @@ +{ + "view_title": "Exchanges", + "title": "Exchanges", + "errors": { + "title": "No Preferences", + "message": "You don't have exchange preferences. Head to Management and create your first." + }, + "buttons": { + "csv_import_export": "@:exchanges.components.csv_import_export.title", + "save": "@:common.buttons.save", + "reload": "@:common.buttons.reload" + }, + "configuration": { + "form": { + "preference_name": "Preference Name", + "empire_preferences": "Empire Preferences", + "exchange": "Exchange", + "ticker": "@:terms.material_ticker" + } + }, + "preference_type": { + "BUY": "BUY", + "SELL": "SELL", + "BOTH": "BOTH" + }, + "components": { + "ticker": { + "no_data": "No @:terms.material_ticker Preferences Configured", + "material_placeholder": "@:terms.materials" + }, + "exchanges": { + "no_data": "No @:terms.exchanges Preference Configured" + }, + "planet_preferences": { + "title": "Planet Preferences", + "form": { + "exchange": "@:terms.exchanges", + "ticker": "@:terms.material_ticker" + }, + "table": { + "planet": "@:terms.planets", + "exchange_preference": "@:terms.exchanges Preferences", + "ticker_preference": "@:terms.material_ticker Preferences" + } + }, + "csv_import_export": { + "title": "Import / Export CSV", + "warning": "Warning: Importing deletes all existing properties and imports the new ones. You need to save your imported preferences after uploading the CSV file or use the reload button to discard them.", + "buttons": { + "import": "Import Settings", + "export": "Export Settings" + } + } + } +} diff --git a/src/locales/ru_RU/fio.json b/src/locales/ru_RU/fio.json new file mode 100644 index 00000000..a104665d --- /dev/null +++ b/src/locales/ru_RU/fio.json @@ -0,0 +1,49 @@ +{ + "burn": { + "view_title": "FIO Burn", + "title": "FIO Burn:", + "fio_last_update": "FIO Data Update: {last_updated}", + "form": { + "empire": "@:terms.empire", + "burn_thresholds": "Burn Thresholds", + "red": "Red", + "yellow": "Yellow" + }, + "components": { + "overview": { + "title": "Plan Burn Overview", + "table": { + "plan": "@:terms.plan", + "planet": "@:terms.planets", + "burn": "Burn" + } + }, + "plans": { + "xit_title": "XIT Resupply: {plan_name}", + "table": { + "ticker": "@:terms.material_ticker", + "consumption": "@:terms.consumption", + "production": "@:terms.production", + "delta": "@:terms.delta", + "stock": "@:terms.stock", + "plan": "@:terms.plan", + "burn": "Burn", + "exhaustion": "Exhaustion" + } + } + } + }, + "repair": { + "view_title": "FIO Repair", + "title": "FIO Repair", + "fio_last_update": "FIO Data Update: {last_updated}", + "table": { + "title": "@:terms.planet_plural", + "planet": "@:terms.planets", + "buildings": "@:terms.buildings_plural", + "avg_condition": "⌀ Condition", + "min_condition": "Min. Condition", + "repair_age": "Repair Age" + } + } +} diff --git a/src/locales/ru_RU/game.json b/src/locales/ru_RU/game.json index 8351bc83..f3e19d40 100644 --- a/src/locales/ru_RU/game.json +++ b/src/locales/ru_RU/game.json @@ -4,6 +4,21 @@ "PLANETARY": "Planetary", "PRODUCTION": "Production" }, + "workforce_type": { + "pioneer": "Pioneer", + "settler": "Settler", + "technician": "Technician", + "engineer": "Engineer", + "scientist": "Scientist" + }, + "efficiency_type": { + "WORKFORCE": "Workforce", + "HQ": "HQ", + "EXPERT": "Experts", + "COGC": "COGC", + "FERTILITY": "Fertility", + "FACTION": "Faction" + }, "expertise": { "AGRICULTURE": "Agriculture", "CHEMISTRY": "Chemistry", @@ -51,6 +66,42 @@ "WORKFORCE_ENGINEERS": "ENG", "WORKFORCE_SCIENTISTS": "SCI" }, + "material_category": { + "agricultural_products": "Agricultural Products", + "alloys": "Alloys", + "chemicals": "Chemicals", + "construction_materials": "Construction Materials", + "construction_parts": "Construction Parts", + "construction_prefabs": "Construction Prefabs", + "consumable_bundles": "Consumable Bundles", + "consumables_(basic)": "Consumables Basic", + "consumables_(luxury)": "Consumables Luxury", + "drones": "Drones", + "electronic_devices": "Electronic Devices", + "electronic_parts": "Electronic Parts", + "electronic_pieces": "Electronic Pieces", + "electronic_systems": "Electronic Systems", + "elements": "Elements", + "energy_systems": "Energy Systems", + "fuels": "Fuels", + "gases": "Gases", + "liquids": "Liquids", + "medical_equipment": "Medical Equipment", + "metals": "Metals", + "minerals": "Minerals", + "ores": "Ores", + "plastics": "Plastics", + "ship_engines": "Ship Engines", + "ship_kits": "Ship Kits", + "ship_parts": "Ship Parts", + "ship_shields": "Ship Shields", + "software_components": "Software Components", + "software_systems": "Software Systems", + "software_tools": "Software Tools", + "textiles": "Textiles", + "unit_prefabs": "Unit Prefabs", + "utility": "Utility" + }, "upkeep": { "safety": "Safety", "health": "Health", diff --git a/src/locales/ru_RU/government.json b/src/locales/ru_RU/government.json new file mode 100644 index 00000000..2a00d90b --- /dev/null +++ b/src/locales/ru_RU/government.json @@ -0,0 +1,16 @@ +{ + "popr_button": { + "no_data": "Planet {planet_id} has no population data", + "buttons": { + "no_popr": "No POPR" + }, + "table": { + "total_population": "Total Population", + "free_population": "Free Population", + "free_population_pct": "Free Population %", + "unfilled_jobs": "Unfilled Jobs", + "plan_need": "@:terms.plan Need", + "plan_check": "@:terms.plan Check" + } + } +} diff --git a/src/locales/ru_RU/homepage.json b/src/locales/ru_RU/homepage.json index dbdb94e7..5c8aa103 100644 --- a/src/locales/ru_RU/homepage.json +++ b/src/locales/ru_RU/homepage.json @@ -62,7 +62,7 @@ "section_title": "Powered by tools we love to use" }, "open_source": { - "section_title": "Free & Open Source", + "section_title": "Free & Open Source", "section_lead": "PRUNplanner is completely free to use, and its frontend is fully {link}.", "prompt": "Love it? We'd be thrilled if you contributed!", "link_open_source": "Open Source" diff --git a/src/locales/ru_RU/market_live.json b/src/locales/ru_RU/market_live.json new file mode 100644 index 00000000..ca5a5b21 --- /dev/null +++ b/src/locales/ru_RU/market_live.json @@ -0,0 +1,101 @@ +{ + "view_title": "Market Live", + "title": "Market Live", + "status": { + "connected": "Connected", + "disconnected": "Disconnected" + }, + "severity_type": { + "LOW": "LOW", + "MEDIUM": "MEDIUM", + "HIGH": "HIGH" + }, + "status_type": { + "active": "Active", + "paused": "Paused" + }, + "rule_type": { + "static": "Value", + "previous": "Previous", + "previous_pct": "Offset %", + "text": "Text" + }, + "components": { + "feed": { + "title": "Alert Feed", + "buttons": { + "open_manager": "Open Alert Manager", + "close_manager": "Close Alert Manager", + "clear_feed": "Clear Feed", + "show_overview": "Show Overview", + "hide_overview": "Hide Overview" + } + }, + "alert_feed": { + "waiting": "Waiting for market events triggering alerts...", + "table": { + "ticker_alert": "Ticker / Alert", + "severity": "Severity", + "logic": "Trigger Logic", + "event": "Event", + "time": "Time" + } + }, + "details": { + "price": "Price", + "ask": "@:{'terms.ask'}: {value}", + "bid": "@:{'terms.bid'}: {value}", + "spread": "@:{'terms.spread'}", + "buy_volume": "Buy Volume", + "vwap": "@:{'terms.vwap'}: {value}", + "change": "Change: {value}", + "sell_volume": "Sell Volume", + "buy_volume_value": "Buy Volume: {value}", + "sell_volume_value": "Sell Volume: {value}" + }, + "point_table": { + "table": { + "ticker": "@:terms.material_ticker", + "price": "@:terms.price", + "bid": "@:terms.bid", + "ask": "@:terms.ask", + "spread_pct": "Spread %", + "buy_volume": "Buy Vol.", + "sell_volume": "Sell Vol." + } + }, + "history": { + "title": "Data History", + "received": "{value} @:terms.material_ticker received" + }, + "rule_builder": { + "new_rule_name": "New Rule", + "buttons": { + "add_condition": "Condition", + "add_group": "Group", + "remove": "Remove" + }, + "error": "Error: {value}", + "empty": "Empty Group" + }, + "alert_manager": { + "title": "Alert Manager", + "title_editing": "Edit Alert", + "info": "Alerts are currently stored on this device only and are not synced to your account.", + "no_alerts": "No alerts found. Start by creating your first detector signal", + "buttons": { + "create_alert": "Create New Alert", + "discard": "@:common.buttons.discard", + "save": "@:common.buttons.save", + "delete": "@:common.buttons.delete" + }, + "form": { + "alert_name": "Alert Name", + "severity": "Severity", + "status": "Status", + "logic_configuration": "Logic Configuration", + "previous_datapoint": "Previous Datepoint" + } + } + } +} diff --git a/src/locales/ru_RU/material_tile.json b/src/locales/ru_RU/material_tile.json new file mode 100644 index 00000000..7feabd58 --- /dev/null +++ b/src/locales/ru_RU/material_tile.json @@ -0,0 +1,23 @@ +{ + "information": { + "title": "Material Information", + "table": { + "category": "Category", + "weight": "Weight", + "volume": "Volume" + } + }, + "indicator": { + "value": "Value", + "max": "Maximum", + "pct_max": "% / Max" + }, + "chart": { + "title": "Market History", + "labels": { + "traded": "Traded Volume", + "low_p": "Daily Minimum Price", + "high_p": "Daily Maximum Price" + } + } +} diff --git a/src/locales/ru_RU/plan.json b/src/locales/ru_RU/plan.json new file mode 100644 index 00000000..1b01bf38 --- /dev/null +++ b/src/locales/ru_RU/plan.json @@ -0,0 +1,298 @@ +{ + "notifications": { + "must_have_name": "Must set a plan name in Configuration to save" + }, + "tools": { + "labels": { + "popr": "POPR", + "visitation_frequency": "Visitation Frequency", + "construction_cart": "Construction Cart", + "supply_cart": "Supply Cart", + "repair_analysis": "Repair Analysis", + "workforce": "Workforce" + }, + "popr": { + "title": "Latest Population Report", + "error": "Error loading latest population report. The planet might not have population.", + "loading": "Loading Population Report" + }, + "visitation_frequency": { + "title": "Visitation Frequency", + "storage": { + "label": "Storage", + "info": "Your plan involves adding {storages} giving you a total storage capacity of {total_weight} t and {total_volume} m³.", + "info_no_storage": "Your plan has a total storage capacity of {total_weight} t and {total_volume} m³.", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "storage_filled": "Storage Filled", + "filled_unit": "days" + }, + "exclusion_info": "Exclude local materials from visitation frequency calculation for items handled exclusively planet-side, like local market sales, purchases or contracts." + }, + "shipping": { + "label": "Shipping", + "table": { + "ship_weight": "Ship t", + "ship_volume": "Ship m³", + "visitation_days": "Visitation (days)", + "limit": "Limit", + "export_frequency": "@:terms.export Frequency", + "import_frequency": "@:terms.import Frequency" + } + } + }, + "construction_cart": { + "title": "Construction Cart", + "unplanned_info": "Base has unplanned {buildings} (FIO: {fio_updated}). Demolish to ensure area, habitation and materials are accurate.", + "table": { + "building": "@:terms.buildings", + "built": "Built", + "amount": "Amount", + "habitation_info": "Insufficient habitation will reduce production efficiency.", + "planned": "Planned", + "materials_sum": "Materials Sum", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume", + "material": "Material", + "storage": "Storage", + "stock": "Stock", + "stock_override": "Stock Override", + "need": "Need" + } + }, + "supply_cart": { + "title": "Supply Cart", + "info": { + "p": "The Supply Cart provides updates on your plans needs combined with existing inventory sourced from FIO. You have the flexibility to opt for alternative storage locations to replenish your base. Tailor your selection based on whether you wish to restock workforce and production supplies or focus on a specific category, and specify the duration for which the supplied stock should sustain. Use the {link} tool for more advanced supply cart options.", + "link": "FIO Burn" + }, + "buttons": { + "all": "All", + "workforce": "Workforce", + "production": "Production" + }, + "table": { + "stock_duration": "Stock Duration (days)", + "storage": "Storage", + "xit_name": "Supply Cart", + "ticker": "Ticker", + "daily_need": "Daily Need", + "daily_cost": "Daily Cost", + "stock": "Stock", + "full_need": "Full Need", + "final_need": "Final Need", + "weight": "t", + "volume": "m³", + "workforce": "Workforce", + "production": "Production", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + } + }, + "repair_analysis": { + "title": "Repair Analysis", + "plan": "@:terms.plan", + "table": { + "select_day": "Select Day", + "material": "Material", + "amount": "Amount", + "cost": "Cost", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + }, + "graph": { + "select_building": "Select @:terms.buildings", + "individual_building": "Individual @:terms.buildings", + "repair_cost_breakdown": "Repair Cost Breakdown" + } + }, + "cogm": { + "title": "Cost of Goods Manufactured", + "cogm": "@:terms.cogm", + "info": "The cost of goods manufactured is calculated using plan settings that factor in production efficiency, recipe runtime, building degradation, input material costs, labor requirements, and associated labor costs. The final cost is shown per unit of output, based on quantity or full cost allocation.", + "cx_preferences": "@:terms.cx_plural Preferences", + "empire_ticker": "@:terms.empire Ticker", + "planet_ticker": "@:terms.planet Ticker", + "table": { + "parameters": "Parameters", + "recipe_runtime": "@:terms.recipes Runtime", + "percent_day": "% / day", + "efficiency": "Efficiency", + "degradation": "Degradation", + "cost": "@:terms.cost", + "materials": "@:terms.materials_plural", + "input_total": "Input Total", + "material": "@:terms.materials", + "cost_unit": "ȼ / Unit", + "cost_total": "Cost Total", + "cost_total_unit": "ȼ Total", + "workforce": "Workforce", + "total_cost": "Total Cost", + "recipe_profit": "@:terms.recipes Profit", + "cost_split": "Cost Split" + } + }, + "plan_analytics": { + "title": "Planning Insights", + "info": "Insights are aggregated from active player plans on {planet}. PRUNplanner enforces minimum sample thresholds to ensure both anonymity and statistical accuracy.", + "labels": { + "experts": "Experts", + "production_buildings": "Production @:terms.buildings_plural", + "recipes": "@:terms.recipes_plural" + } + } + }, + "components": { + "status": { + "hq": "HQ", + "cogc": "@:{'terms.cogc'}:", + "area": "@:{'terms.area'}:", + "profit": "@:{'terms.profit'}:", + "experts": "@:{'terms.experts_plural'}:" + }, + "configuration": { + "label": "Configuration", + "name": "Name", + "empire": "@:terms.empire" + }, + "area": { + "permits": "@:terms.permits_plural", + "area": "@:terms.area", + "free": "Free" + }, + "bonuses": { + "corp_hq": "Corp. HQ", + "corp_hq_tooltip": "The corporation you belong to has its headquarters on this planet (not your individual company).", + "cogc": "@:terms.cogc" + }, + "infrastructure": { + "label": "Infrastructure", + "auto_optimize": "Auto-Optimize Habs", + "auto_optimize_tooltip": "Automatically optimize habitations to meet workforce needs as buildings are added.", + "buttons": { + "optimize_cost": "Optimize Cost", + "optimize_area": "Optimize Area" + } + }, + "experts": { + "label": "Experts", + "warning": "Maximum number of experts on a base is 6. You currently have {expert_number} experts assigned." + }, + "workforce": { + "label": "Workforce", + "table": { + "type": "Type", + "need": "Need", + "supply": "Supply", + "open": "Open", + "luxuries": "Luxuries", + "pct_eff": "Eff. %" + } + }, + "overview": { + "label": "Overview", + "table": { + "daily_cost": "Daily Cost", + "degradation": "Degradation", + "plan_cost": "Plan Cost", + "daily_profit": "Daily Profit", + "roi": "ROI", + "profit_area": "@:terms.profit_per_area" + } + }, + "storage": { + "label": "Storage", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "filled": "Filled" + } + }, + "materialio": { + "label": "Material I/O", + "label_production": "Production", + "label_workforce": "Workforce", + "buttons": { + "toggle_weight_volume": "Toggle Weight & Volume", + "toggle_production_workforce": "Toggle Production & Workforce Split" + }, + "table": { + "input": "In", + "output": "Out", + "delta": "Δ", + "cost_day": "ȼ / day", + "total_weight": "Δ t", + "total_volume": "Δ m³" + } + }, + "save_as": { + "title": "Save As", + "form": { + "plan_name": "Name", + "plan_name_placeholder": "New @:terms.plan Name", + "empire": "@:terms.empire" + } + }, + "production": { + "label": "Production", + "planet_resources": "@:terms.planets @:terms.resources_plural", + "form": { + "match_cogc": "Match @:terms.cogc", + "select_placeholder": "Select @:terms.buildings & Add to @:terms.plan" + }, + "table": { + "building_recipe": "@:terms.buildings / @:terms.recipes", + "runtime": "Runtime", + "share": "Share", + "tools": "Tools" + } + }, + "production_building": { + "no_recipe": "No Active @:terms.recipes_plural", + "qty": "Qty", + "buttons": { + "add_recipe": "@:terms.recipes" + }, + "table": { + "expertise": "Expertise", + "efficiency": "Efficiency", + "revenue": "@:terms.revenue", + "area": "@:terms.area", + "construction": "Construction" + } + }, + "production_recipe": { + "cogm_title": "Cost Of Goods Manufactured", + "cogm_error": "COGM Calculation not possible. Check your Management View if your Empire has a CX assigned.", + "buttons": { + "cogm": "@:terms.cogm" + }, + "table": { + "input": "Input", + "time": "Time", + "output": "Output", + "daily_revenue": "ȼ / Day", + "profit_area": "ȼ / Area", + "roi": "ROI" + }, + "info": { + "p1_strong": "Revenue / Day", + "p1": "is calculated by taking the daily income generated from a recipe and subtracting both the daily workforce cost (all luxuries provided) and the daily building degradation cost (1/180th of the construction cost). The income from the recipe is based on the difference between the input material costs and the output material values.", + "p2_strong": "ȼ / Area", + "p2": "is the daily revenue divided by the area for one production building and its proportionate share of the area for a CM and habs required for an optimal base of such buildings in Recipe ROI.", + "p3_strong": "ROI", + "p3": "is the time required for a continuously operating recipe to generate enough revenue to offset the building's construction cost. This considers daily degradation and workforce costs as well." + } + } + } +} diff --git a/src/locales/ru_RU/profile.json b/src/locales/ru_RU/profile.json index 4bf31dae..cdc413fb 100644 --- a/src/locales/ru_RU/profile.json +++ b/src/locales/ru_RU/profile.json @@ -42,7 +42,7 @@ "title": "What is FIO & Why should you use it?", "help": { "title": "5 Easy Steps to Integrate FIO and PRUNplanner", - "p1": "FIO is a community developed {link} that collects your game data, makes it available outside of @:terms.prosperous_universe and is completely free to use.", + "p1": "FIO is a community developed {link} that collects your game data, makes it available outside of Prosperous Universe and is completely free to use.", "p2": "Just go ahead and install the Chrome or Firefox extension, reload your browser with APEX open and click the extension button in the upper-right in your browser to create an account. FIO will automatically collect (only) your game data while you keep playing.", "p3": "You can now login to the {link} to see your data and create an API-Key PRUNplanner will use to import your storage (materials you have somewhere) and sites (planets, ships, warehouses) data.", "p4": "Creating the key is easy, if you head to the {link} page and click the \"Create API Key\" button. Enter a name for your key (e.g., \"PRUNplanner\") and your FIO password. You don't need to \"Allow Writes\" as PRUNplanner will not manipulate any of your data, the tool just reads and uses it.", @@ -71,6 +71,7 @@ "form": { "tool_preferences": "Tool Preferences", "language": "Language", + "language_note": "We want to make PRUNplanner accessible to everyone. If you'd like to see the tool in your native language - or help us polish an existing translation - join our localization project on {link}.", "default_empire": "Default Empire", "default_cx": "Default CX", "fio_burn": "FIO Burn", diff --git a/src/locales/ru_RU/sharing.json b/src/locales/ru_RU/sharing.json new file mode 100644 index 00000000..fc01f576 --- /dev/null +++ b/src/locales/ru_RU/sharing.json @@ -0,0 +1,11 @@ +{ + "info": "This will create an unique link that can be shared with others. They will be able to see your plan, but don't modify it. The link becomes unavailable once you choose to stop sharing or delete the plan.", + "share_count": "You're currently sharing this plan. It has been viewed {count} times", + "buttons": { + "create_link": "Create Sharing Link", + "copy_url": "Copy URL", + "stop_sharing": "Stop Sharing", + "views": "{count} Views", + "share": "Share" + } +} diff --git a/src/locales/ru_RU/terms.json b/src/locales/ru_RU/terms.json index b7ead843..ec554d8b 100644 --- a/src/locales/ru_RU/terms.json +++ b/src/locales/ru_RU/terms.json @@ -1,11 +1,15 @@ { "30d": "30D", "7d": "7D", + "amount": "Amount", "api_key": "API Key", + "area": "Area", "ask": "Ask", "bid": "Bid", "buffer": "Buffer", + "buildings_plural": "Buildings", "buildings": "Building | Buildings", + "burn": "Burn", "cogc": "COGC", "cogm": "COGM", "consumption": "Consumption", @@ -15,8 +19,12 @@ "delta_price": "ȼ Delta", "delta": "Delta", "demand": "Demand", + "empire_plural": "Empires", "empire": "Empire | Empires", "exchanges": "Exchange | Exchanges", + "experts_plural": "Experts", + "experts": "Expert | Experts", + "export": "Export", "faction": "Faction", "fertility": "Fertility", "filter": "Filter", @@ -25,10 +33,12 @@ "gravity": "Gravity", "high": "High", "hq": "HQ", + "import": "Import", "low": "Low", "material_ticker": "Ticker", "materials_plural": "Materials", "materials": "Material | Materials", + "override": "Override", "permits_plural": "Permits", "permits": "Permit | Permits", "plan": "Plan | Plans", @@ -37,22 +47,27 @@ "plans_plural": "Plans", "popr": "POPR", "pressure": "Pressure", + "price": "Price", "production": "Production", "profit_per_area": "Profit / Area", "profit": "Profit", + "recipes_plural": "Recipes", "recipes": "Recipe | Recipes", "resources_plural": "Resources", "resources": "Resource | Resources", "revenue": "Revenue", "rocky": "Rocky", "spread": "Spread", + "stock": "Stock", + "storage": "Storage", + "sum": "∑", "supply": "Supply", "surface": "Surface", "temperature": "Temperature", + "total_volume": "Total Volume", + "total_weight": "Total Weight", "trend": "Trend", "volume": "Volume", "vwap": "VWAP", - "weight": "Weight", - "amount": "Amount", - "storage": "Storage" + "weight": "Weight" } diff --git a/src/locales/ru_RU/xit.json b/src/locales/ru_RU/xit.json new file mode 100644 index 00000000..7d505bd8 --- /dev/null +++ b/src/locales/ru_RU/xit.json @@ -0,0 +1,26 @@ +{ + "form": { + "origin": "Origin", + "target_days": "Target Days", + "buy_from_cx": "Buy From CX", + "buy_from_cx_warning": "Only warehouse origin allows purchasing.", + "fit_ship": "Fit Ship", + "hide_infinite": "Hide Infinite", + "json": "JSON" + }, + "buttons": { + "copy_json": "Copy XIT JSON", + "copy": "@:common.buttons.copy" + }, + "table": { + "ticker": "@:terms.material_ticker", + "stock": "@:terms.stock", + "delta": "@:terms.delta", + "burn": "@:terms.burn", + "amount": "@:terms.amount", + "override": "@:terms.override", + "weight_value": "@:{'terms.weight'}: {value}", + "volume_value": "@:{'terms.volume'}: {value}", + "price_value": "@:{'terms.price'}: {value}" + } +} diff --git a/src/locales/zh_CN/account.json b/src/locales/zh_CN/account.json new file mode 100644 index 00000000..5fd0cafa --- /dev/null +++ b/src/locales/zh_CN/account.json @@ -0,0 +1,81 @@ +{ + "components": { + "login": { + "title": "登录", + "error": "登录时出错。请检查您的用户名和密码。", + "buttons": { + "login": "登录" + }, + "form": { + "username": "用户名", + "password": "密码" + }, + "tos": "使用 PRUNplanner 即表示您同意 {tos_link}。", + "tos_link": "服务条款", + "forgot": "忘记密码?申请 {forgot_link}。", + "forgot_link": "重置密码" + }, + "registration": { + "title": "账户信息", + "tos": "PRUNplanner 可免费使用。创建账户即表示您已阅读并同意 {tos_link}。", + "tos_link": "服务条款", + "result": { + "ok_header": "欢迎, 。{username}!", + "ok_message": "注册成功,现在可以登录 PRUNplanner。", + "error": "注册出错。" + }, + "buttons": { + "register": "创建账户" + }, + "form": { + "username": "用户名", + "username_info": "至少 3 个字符,不能包含空格。", + "password": "密码", + "password_info": "至少 8 个字符。", + "email": "邮箱", + "email_placeholder": "可选,但建议填写。", + "email_info": "可选,可提升账户安全性。", + "security_question": "安全问题", + "question": "输入星球名称 {planet}。在 Prosperous Universe 中使用指令 {command} 打开新缓冲区查找,你将在星球信息中“名称”下看到该星球", + "planet_name": "名称" + } + }, + "password_reset": { + "title": "重置密码", + "info": "请输入系统发送到邮箱的验证码及新密码。", + "buttons": { + "send": "发送重置密码" + }, + "form": { + "email": "邮箱", + "code": "验证码", + "password": "密码", + "password_info": "至少 8 个字符。" + } + }, + "request_password_reset": { + "title": "重置密码请求", + "info": "输入与你的 PRUNplanner 账户绑定的已验证邮箱。如果识别成功,我们将发送验证码以重置密码。", + "form": { + "email_placeholder": "邮箱地址" + }, + "buttons": { + "send": "发送重置请求" + } + }, + "verify_email": { + "title": "邮箱验证", + "info": "请输入系统发送到邮箱的验证码。若未收到,请检查垃圾邮件文件夹。", + "buttons": { + "send": "发送验证邮件" + }, + "form": { + "code_placeholder": "验证码" + }, + "result": { + "ok": "邮箱验证成功。", + "error": "验证码无效或已验证。" + } + } + } +} diff --git a/src/locales/zh_CN/common.json b/src/locales/zh_CN/common.json index 6bb42bfc..efa4fd90 100644 --- a/src/locales/zh_CN/common.json +++ b/src/locales/zh_CN/common.json @@ -1,48 +1,64 @@ { "navigation": { - "planning": "Planning", + "planning": "规划", "planning_short": "计划", "empire": "帝国", - "planet_search": "Planet Search", - "management": "Management", - "exchanges": "Exchanges", - "tools": "Tools", - "tools_short": "Tool", - "market_exploration": "Market Exploration", - "market_live": "Market Live", - "recipe_roi": "Recipe ROI", - "resource_roi": "Resource ROI", - "hq_calculator": "HQ Calculator", - "production_chains": "Production Chains", - "upkeep_price_calculator": "Upkeep Prices", - "fio_burn": "FIO Burn", - "fio_repair": "FIO Repair", - "account": "Account", - "account_short": "Acc", - "profile": "Profile", + "planet_search": "行星搜索", + "management": "管理", + "exchanges": "交易所", + "tools": "工具", + "tools_short": "工具", + "market_exploration": "市场探索", + "market_live": "实时市场", + "recipe_roi": "配方 ROI", + "resource_roi": "资源 ROI", + "hq_calculator": "HQ 计算器", + "production_chains": "生产链", + "upkeep_price_calculator": "维护价格", + "fio_burn": "FIO 消耗", + "fio_repair": "FIO 维修", + "account": "账户", + "account_short": "账户", + "profile": "个人资料", "api": "API", - "help": "Help", - "logout": "Logout", + "help": "帮助", + "logout": "登出", "fio": { - "backend": "Backend", + "backend": "后端", "fio": "FIO", - "fio_active": "FIO Active", - "fio_inactive": "FIO Inactive" + "fio_active": "FIO 已启用", + "fio_inactive": "FIO 未启用" } }, "buttons": { - "create": "Create", + "create": "创建", "save": "保存", + "save_as": "另存为", "reload": "刷新", "show": "显示", "hide": "隐藏", - "help": "Help", - "search": "Search", - "default": "Default", - "select_all": "Select All", - "yes": "Yes", - "no": "No", - "delete": "Delete", - "cancel": "Cancel" + "help": "帮助", + "search": "搜索", + "default": "默认", + "select_all": "全选", + "discard": "放弃", + "yes": "是", + "no": "否", + "delete": "删除", + "cancel": "取消", + "clone_plan": "复制计划", + "clone_complete": "复制完成", + "copy": "复制" + }, + "ui": { + "placeholder": { + "please_input": "请输入", + "please_select": "请选择", + "search": "搜索" + }, + "select": { + "no_results": "无结果", + "select_options": "选择选项" + } } } diff --git a/src/locales/zh_CN/cx_info_table.json b/src/locales/zh_CN/cx_info_table.json index 0f488d12..423cae7b 100644 --- a/src/locales/zh_CN/cx_info_table.json +++ b/src/locales/zh_CN/cx_info_table.json @@ -1,15 +1,15 @@ { - "universe": "UNIVERSE", + "universe": "全宇宙", "vwap": "@:terms.vwap", - "traded_volume": "Traded Volume", - "market_live_data": "Market Live Data", - "supply_vs_demand": "S / D", - "insights": "Insights", - "market_breadth": "Market Breadth", - "liquidity_ratio": "Liquidity Ratio", - "demand_vs_supply": "Demand / Supply", - "weighted_trend": "Weighted Trend", - "volume_adjusted_delta": "Volume-Adjusted Delta", - "price_cohesion": "Price Cohesion", - "variance_index": "Variance Index" + "traded_volume": "成交量", + "market_live_data": "实时市场数据", + "supply_vs_demand": "供应/需求", + "insights": "市场洞察", + "market_breadth": "市场广度", + "liquidity_ratio": "流动性比率", + "demand_vs_supply": "需求 / 供应", + "weighted_trend": "加权趋势", + "volume_adjusted_delta": "成交量调整差值", + "price_cohesion": "价格一致性", + "variance_index": "方差指数" } diff --git a/src/locales/zh_CN/empire.json b/src/locales/zh_CN/empire.json index 42fdc1c2..5b771e55 100644 --- a/src/locales/zh_CN/empire.json +++ b/src/locales/zh_CN/empire.json @@ -34,7 +34,7 @@ }, "filters": { "display": "显示", - "consumables": "消费品", + "consumables": "消耗品", "all": "全部", "loadbalance": "负载平衡" }, diff --git a/src/locales/zh_CN/exchanges.json b/src/locales/zh_CN/exchanges.json new file mode 100644 index 00000000..15a52324 --- /dev/null +++ b/src/locales/zh_CN/exchanges.json @@ -0,0 +1,55 @@ +{ + "view_title": "Exchanges", + "title": "Exchanges", + "errors": { + "title": "No Preferences", + "message": "You don't have exchange preferences. Head to Management and create your first." + }, + "buttons": { + "csv_import_export": "@:exchanges.components.csv_import_export.title", + "save": "@:common.butons.save", + "reload": "@:common.butons.reload" + }, + "configuration": { + "form": { + "preference_name": "Preference Name", + "empire_preferences": "Empire Preferences", + "exchange": "Exchange", + "ticker": "@:terms.material_ticker" + } + }, + "preference_type": { + "BUY": "BUY", + "SELL": "SELL", + "BOTH": "BOTH" + }, + "components": { + "ticker": { + "no_data": "No @:terms.material_ticker Preferences Configured", + "material_placeholder": "@:terms.materials" + }, + "exchanges": { + "no_data": "No @:terms.exchanges Preference Configured" + }, + "planet_preferences": { + "title": "Planet Preferences", + "form": { + "exchange": "@:terms.exchange", + "ticker": "@:terms.material_ticker" + }, + "table": { + "planet": "@:terms.planets", + "exchange_preference": "@:terms.exchanges Preferences", + "ticker_preference": "@:terms.material_ticker Preferences" + } + }, + "csv_import_export": { + "title": "Import / Export CSV", + "warning": "Warning: Importing deletes all existing properties and imports the new ones. You need to save your imported preferences after uploading the CSV file or use the reload button to discard them.", + "buttons": { + "import": "Import Settings", + "export": "Export Settings" + } + } + } +} diff --git a/src/locales/zh_CN/fio.json b/src/locales/zh_CN/fio.json new file mode 100644 index 00000000..a104665d --- /dev/null +++ b/src/locales/zh_CN/fio.json @@ -0,0 +1,49 @@ +{ + "burn": { + "view_title": "FIO Burn", + "title": "FIO Burn:", + "fio_last_update": "FIO Data Update: {last_updated}", + "form": { + "empire": "@:terms.empire", + "burn_thresholds": "Burn Thresholds", + "red": "Red", + "yellow": "Yellow" + }, + "components": { + "overview": { + "title": "Plan Burn Overview", + "table": { + "plan": "@:terms.plan", + "planet": "@:terms.planets", + "burn": "Burn" + } + }, + "plans": { + "xit_title": "XIT Resupply: {plan_name}", + "table": { + "ticker": "@:terms.material_ticker", + "consumption": "@:terms.consumption", + "production": "@:terms.production", + "delta": "@:terms.delta", + "stock": "@:terms.stock", + "plan": "@:terms.plan", + "burn": "Burn", + "exhaustion": "Exhaustion" + } + } + } + }, + "repair": { + "view_title": "FIO Repair", + "title": "FIO Repair", + "fio_last_update": "FIO Data Update: {last_updated}", + "table": { + "title": "@:terms.planet_plural", + "planet": "@:terms.planets", + "buildings": "@:terms.buildings_plural", + "avg_condition": "⌀ Condition", + "min_condition": "Min. Condition", + "repair_age": "Repair Age" + } + } +} diff --git a/src/locales/zh_CN/game.json b/src/locales/zh_CN/game.json index 03dd6fa9..7ef74fdd 100644 --- a/src/locales/zh_CN/game.json +++ b/src/locales/zh_CN/game.json @@ -4,6 +4,21 @@ "PLANETARY": "Planetary", "PRODUCTION": "Production" }, + "workforce_type": { + "pioneer": "Pioneer", + "settler": "Settler", + "technician": "Technician", + "engineer": "Engineer", + "scientist": "Scientist" + }, + "efficiency_type": { + "WORKFORCE": "Workforce", + "HQ": "HQ", + "EXPERT": "Experts", + "COGC": "COGC", + "FERTILITY": "Fertility", + "FACTION": "Faction" + }, "expertise": { "AGRICULTURE": "农业", "CHEMISTRY": "化工", @@ -51,6 +66,42 @@ "WORKFORCE_ENGINEERS": "工程师", "WORKFORCE_SCIENTISTS": "科学家" }, + "material_category": { + "agricultural_products": "Agricultural Products", + "alloys": "Alloys", + "chemicals": "Chemicals", + "construction_materials": "Construction Materials", + "construction_parts": "Construction Parts", + "construction_prefabs": "Construction Prefabs", + "consumable_bundles": "Consumable Bundles", + "consumables_(basic)": "Consumables Basic", + "consumables_(luxury)": "Consumables Luxury", + "drones": "Drones", + "electronic_devices": "Electronic Devices", + "electronic_parts": "Electronic Parts", + "electronic_pieces": "Electronic Pieces", + "electronic_systems": "Electronic Systems", + "elements": "Elements", + "energy_systems": "Energy Systems", + "fuels": "Fuels", + "gases": "Gases", + "liquids": "Liquids", + "medical_equipment": "Medical Equipment", + "metals": "Metals", + "minerals": "Minerals", + "ores": "Ores", + "plastics": "Plastics", + "ship_engines": "Ship Engines", + "ship_kits": "Ship Kits", + "ship_parts": "Ship Parts", + "ship_shields": "Ship Shields", + "software_components": "Software Components", + "software_systems": "Software Systems", + "software_tools": "Software Tools", + "textiles": "Textiles", + "unit_prefabs": "Unit Prefabs", + "utility": "Utility" + }, "upkeep": { "safety": "Safety", "health": "Health", diff --git a/src/locales/zh_CN/government.json b/src/locales/zh_CN/government.json new file mode 100644 index 00000000..2a00d90b --- /dev/null +++ b/src/locales/zh_CN/government.json @@ -0,0 +1,16 @@ +{ + "popr_button": { + "no_data": "Planet {planet_id} has no population data", + "buttons": { + "no_popr": "No POPR" + }, + "table": { + "total_population": "Total Population", + "free_population": "Free Population", + "free_population_pct": "Free Population %", + "unfilled_jobs": "Unfilled Jobs", + "plan_need": "@:terms.plan Need", + "plan_check": "@:terms.plan Check" + } + } +} diff --git a/src/locales/zh_CN/homepage.json b/src/locales/zh_CN/homepage.json index dbdb94e7..5c8aa103 100644 --- a/src/locales/zh_CN/homepage.json +++ b/src/locales/zh_CN/homepage.json @@ -62,7 +62,7 @@ "section_title": "Powered by tools we love to use" }, "open_source": { - "section_title": "Free & Open Source", + "section_title": "Free & Open Source", "section_lead": "PRUNplanner is completely free to use, and its frontend is fully {link}.", "prompt": "Love it? We'd be thrilled if you contributed!", "link_open_source": "Open Source" diff --git a/src/locales/zh_CN/market_live.json b/src/locales/zh_CN/market_live.json new file mode 100644 index 00000000..ca5a5b21 --- /dev/null +++ b/src/locales/zh_CN/market_live.json @@ -0,0 +1,101 @@ +{ + "view_title": "Market Live", + "title": "Market Live", + "status": { + "connected": "Connected", + "disconnected": "Disconnected" + }, + "severity_type": { + "LOW": "LOW", + "MEDIUM": "MEDIUM", + "HIGH": "HIGH" + }, + "status_type": { + "active": "Active", + "paused": "Paused" + }, + "rule_type": { + "static": "Value", + "previous": "Previous", + "previous_pct": "Offset %", + "text": "Text" + }, + "components": { + "feed": { + "title": "Alert Feed", + "buttons": { + "open_manager": "Open Alert Manager", + "close_manager": "Close Alert Manager", + "clear_feed": "Clear Feed", + "show_overview": "Show Overview", + "hide_overview": "Hide Overview" + } + }, + "alert_feed": { + "waiting": "Waiting for market events triggering alerts...", + "table": { + "ticker_alert": "Ticker / Alert", + "severity": "Severity", + "logic": "Trigger Logic", + "event": "Event", + "time": "Time" + } + }, + "details": { + "price": "Price", + "ask": "@:{'terms.ask'}: {value}", + "bid": "@:{'terms.bid'}: {value}", + "spread": "@:{'terms.spread'}", + "buy_volume": "Buy Volume", + "vwap": "@:{'terms.vwap'}: {value}", + "change": "Change: {value}", + "sell_volume": "Sell Volume", + "buy_volume_value": "Buy Volume: {value}", + "sell_volume_value": "Sell Volume: {value}" + }, + "point_table": { + "table": { + "ticker": "@:terms.material_ticker", + "price": "@:terms.price", + "bid": "@:terms.bid", + "ask": "@:terms.ask", + "spread_pct": "Spread %", + "buy_volume": "Buy Vol.", + "sell_volume": "Sell Vol." + } + }, + "history": { + "title": "Data History", + "received": "{value} @:terms.material_ticker received" + }, + "rule_builder": { + "new_rule_name": "New Rule", + "buttons": { + "add_condition": "Condition", + "add_group": "Group", + "remove": "Remove" + }, + "error": "Error: {value}", + "empty": "Empty Group" + }, + "alert_manager": { + "title": "Alert Manager", + "title_editing": "Edit Alert", + "info": "Alerts are currently stored on this device only and are not synced to your account.", + "no_alerts": "No alerts found. Start by creating your first detector signal", + "buttons": { + "create_alert": "Create New Alert", + "discard": "@:common.buttons.discard", + "save": "@:common.buttons.save", + "delete": "@:common.buttons.delete" + }, + "form": { + "alert_name": "Alert Name", + "severity": "Severity", + "status": "Status", + "logic_configuration": "Logic Configuration", + "previous_datapoint": "Previous Datepoint" + } + } + } +} diff --git a/src/locales/zh_CN/material_tile.json b/src/locales/zh_CN/material_tile.json new file mode 100644 index 00000000..e466d12d --- /dev/null +++ b/src/locales/zh_CN/material_tile.json @@ -0,0 +1,23 @@ +{ + "information": { + "title": "材料信息", + "table": { + "category": "类别", + "weight": "重量", + "volume": "体积" + } + }, + "indicator": { + "value": "价值", + "max": "最大值", + "pct_max": "% / 最大值" + }, + "chart": { + "title": "市场历史", + "labels": { + "traded": "成交量", + "low_p": "日最低价", + "high_p": "日最高价" + } + } +} diff --git a/src/locales/zh_CN/plan.json b/src/locales/zh_CN/plan.json new file mode 100644 index 00000000..1b01bf38 --- /dev/null +++ b/src/locales/zh_CN/plan.json @@ -0,0 +1,298 @@ +{ + "notifications": { + "must_have_name": "Must set a plan name in Configuration to save" + }, + "tools": { + "labels": { + "popr": "POPR", + "visitation_frequency": "Visitation Frequency", + "construction_cart": "Construction Cart", + "supply_cart": "Supply Cart", + "repair_analysis": "Repair Analysis", + "workforce": "Workforce" + }, + "popr": { + "title": "Latest Population Report", + "error": "Error loading latest population report. The planet might not have population.", + "loading": "Loading Population Report" + }, + "visitation_frequency": { + "title": "Visitation Frequency", + "storage": { + "label": "Storage", + "info": "Your plan involves adding {storages} giving you a total storage capacity of {total_weight} t and {total_volume} m³.", + "info_no_storage": "Your plan has a total storage capacity of {total_weight} t and {total_volume} m³.", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "storage_filled": "Storage Filled", + "filled_unit": "days" + }, + "exclusion_info": "Exclude local materials from visitation frequency calculation for items handled exclusively planet-side, like local market sales, purchases or contracts." + }, + "shipping": { + "label": "Shipping", + "table": { + "ship_weight": "Ship t", + "ship_volume": "Ship m³", + "visitation_days": "Visitation (days)", + "limit": "Limit", + "export_frequency": "@:terms.export Frequency", + "import_frequency": "@:terms.import Frequency" + } + } + }, + "construction_cart": { + "title": "Construction Cart", + "unplanned_info": "Base has unplanned {buildings} (FIO: {fio_updated}). Demolish to ensure area, habitation and materials are accurate.", + "table": { + "building": "@:terms.buildings", + "built": "Built", + "amount": "Amount", + "habitation_info": "Insufficient habitation will reduce production efficiency.", + "planned": "Planned", + "materials_sum": "Materials Sum", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume", + "material": "Material", + "storage": "Storage", + "stock": "Stock", + "stock_override": "Stock Override", + "need": "Need" + } + }, + "supply_cart": { + "title": "Supply Cart", + "info": { + "p": "The Supply Cart provides updates on your plans needs combined with existing inventory sourced from FIO. You have the flexibility to opt for alternative storage locations to replenish your base. Tailor your selection based on whether you wish to restock workforce and production supplies or focus on a specific category, and specify the duration for which the supplied stock should sustain. Use the {link} tool for more advanced supply cart options.", + "link": "FIO Burn" + }, + "buttons": { + "all": "All", + "workforce": "Workforce", + "production": "Production" + }, + "table": { + "stock_duration": "Stock Duration (days)", + "storage": "Storage", + "xit_name": "Supply Cart", + "ticker": "Ticker", + "daily_need": "Daily Need", + "daily_cost": "Daily Cost", + "stock": "Stock", + "full_need": "Full Need", + "final_need": "Final Need", + "weight": "t", + "volume": "m³", + "workforce": "Workforce", + "production": "Production", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + } + }, + "repair_analysis": { + "title": "Repair Analysis", + "plan": "@:terms.plan", + "table": { + "select_day": "Select Day", + "material": "Material", + "amount": "Amount", + "cost": "Cost", + "total_cost": "Total Cost", + "total_weight": "@:terms.total_weight", + "total_volume": "@:terms.total_volume" + }, + "graph": { + "select_building": "Select @:terms.buildings", + "individual_building": "Individual @:terms.buildings", + "repair_cost_breakdown": "Repair Cost Breakdown" + } + }, + "cogm": { + "title": "Cost of Goods Manufactured", + "cogm": "@:terms.cogm", + "info": "The cost of goods manufactured is calculated using plan settings that factor in production efficiency, recipe runtime, building degradation, input material costs, labor requirements, and associated labor costs. The final cost is shown per unit of output, based on quantity or full cost allocation.", + "cx_preferences": "@:terms.cx_plural Preferences", + "empire_ticker": "@:terms.empire Ticker", + "planet_ticker": "@:terms.planet Ticker", + "table": { + "parameters": "Parameters", + "recipe_runtime": "@:terms.recipes Runtime", + "percent_day": "% / day", + "efficiency": "Efficiency", + "degradation": "Degradation", + "cost": "@:terms.cost", + "materials": "@:terms.materials_plural", + "input_total": "Input Total", + "material": "@:terms.materials", + "cost_unit": "ȼ / Unit", + "cost_total": "Cost Total", + "cost_total_unit": "ȼ Total", + "workforce": "Workforce", + "total_cost": "Total Cost", + "recipe_profit": "@:terms.recipes Profit", + "cost_split": "Cost Split" + } + }, + "plan_analytics": { + "title": "Planning Insights", + "info": "Insights are aggregated from active player plans on {planet}. PRUNplanner enforces minimum sample thresholds to ensure both anonymity and statistical accuracy.", + "labels": { + "experts": "Experts", + "production_buildings": "Production @:terms.buildings_plural", + "recipes": "@:terms.recipes_plural" + } + } + }, + "components": { + "status": { + "hq": "HQ", + "cogc": "@:{'terms.cogc'}:", + "area": "@:{'terms.area'}:", + "profit": "@:{'terms.profit'}:", + "experts": "@:{'terms.experts_plural'}:" + }, + "configuration": { + "label": "Configuration", + "name": "Name", + "empire": "@:terms.empire" + }, + "area": { + "permits": "@:terms.permits_plural", + "area": "@:terms.area", + "free": "Free" + }, + "bonuses": { + "corp_hq": "Corp. HQ", + "corp_hq_tooltip": "The corporation you belong to has its headquarters on this planet (not your individual company).", + "cogc": "@:terms.cogc" + }, + "infrastructure": { + "label": "Infrastructure", + "auto_optimize": "Auto-Optimize Habs", + "auto_optimize_tooltip": "Automatically optimize habitations to meet workforce needs as buildings are added.", + "buttons": { + "optimize_cost": "Optimize Cost", + "optimize_area": "Optimize Area" + } + }, + "experts": { + "label": "Experts", + "warning": "Maximum number of experts on a base is 6. You currently have {expert_number} experts assigned." + }, + "workforce": { + "label": "Workforce", + "table": { + "type": "Type", + "need": "Need", + "supply": "Supply", + "open": "Open", + "luxuries": "Luxuries", + "pct_eff": "Eff. %" + } + }, + "overview": { + "label": "Overview", + "table": { + "daily_cost": "Daily Cost", + "degradation": "Degradation", + "plan_cost": "Plan Cost", + "daily_profit": "Daily Profit", + "roi": "ROI", + "profit_area": "@:terms.profit_per_area" + } + }, + "storage": { + "label": "Storage", + "table": { + "weight": "t", + "volume": "m³", + "import": "@:terms.import", + "export": "@:terms.export", + "sum": "@:terms.sum", + "filled": "Filled" + } + }, + "materialio": { + "label": "Material I/O", + "label_production": "Production", + "label_workforce": "Workforce", + "buttons": { + "toggle_weight_volume": "Toggle Weight & Volume", + "toggle_production_workforce": "Toggle Production & Workforce Split" + }, + "table": { + "input": "In", + "output": "Out", + "delta": "Δ", + "cost_day": "ȼ / day", + "total_weight": "Δ t", + "total_volume": "Δ m³" + } + }, + "save_as": { + "title": "Save As", + "form": { + "plan_name": "Name", + "plan_name_placeholder": "New @:terms.plan Name", + "empire": "@:terms.empire" + } + }, + "production": { + "label": "Production", + "planet_resources": "@:terms.planets @:terms.resources_plural", + "form": { + "match_cogc": "Match @:terms.cogc", + "select_placeholder": "Select @:terms.buildings & Add to @:terms.plan" + }, + "table": { + "building_recipe": "@:terms.buildings / @:terms.recipes", + "runtime": "Runtime", + "share": "Share", + "tools": "Tools" + } + }, + "production_building": { + "no_recipe": "No Active @:terms.recipes_plural", + "qty": "Qty", + "buttons": { + "add_recipe": "@:terms.recipes" + }, + "table": { + "expertise": "Expertise", + "efficiency": "Efficiency", + "revenue": "@:terms.revenue", + "area": "@:terms.area", + "construction": "Construction" + } + }, + "production_recipe": { + "cogm_title": "Cost Of Goods Manufactured", + "cogm_error": "COGM Calculation not possible. Check your Management View if your Empire has a CX assigned.", + "buttons": { + "cogm": "@:terms.cogm" + }, + "table": { + "input": "Input", + "time": "Time", + "output": "Output", + "daily_revenue": "ȼ / Day", + "profit_area": "ȼ / Area", + "roi": "ROI" + }, + "info": { + "p1_strong": "Revenue / Day", + "p1": "is calculated by taking the daily income generated from a recipe and subtracting both the daily workforce cost (all luxuries provided) and the daily building degradation cost (1/180th of the construction cost). The income from the recipe is based on the difference between the input material costs and the output material values.", + "p2_strong": "ȼ / Area", + "p2": "is the daily revenue divided by the area for one production building and its proportionate share of the area for a CM and habs required for an optimal base of such buildings in Recipe ROI.", + "p3_strong": "ROI", + "p3": "is the time required for a continuously operating recipe to generate enough revenue to offset the building's construction cost. This considers daily degradation and workforce costs as well." + } + } + } +} diff --git a/src/locales/zh_CN/production_chains.json b/src/locales/zh_CN/production_chains.json index fdcac235..273dcb56 100644 --- a/src/locales/zh_CN/production_chains.json +++ b/src/locales/zh_CN/production_chains.json @@ -12,7 +12,7 @@ "recipe_selection": "Recipe Selection" }, "analysis_materials": { - "title": "Materials", + "title": "物料", "table": { "material": "@:terms.materials", "amount": "@:terms.amount" diff --git a/src/locales/zh_CN/profile.json b/src/locales/zh_CN/profile.json index 4bf31dae..cdc413fb 100644 --- a/src/locales/zh_CN/profile.json +++ b/src/locales/zh_CN/profile.json @@ -42,7 +42,7 @@ "title": "What is FIO & Why should you use it?", "help": { "title": "5 Easy Steps to Integrate FIO and PRUNplanner", - "p1": "FIO is a community developed {link} that collects your game data, makes it available outside of @:terms.prosperous_universe and is completely free to use.", + "p1": "FIO is a community developed {link} that collects your game data, makes it available outside of Prosperous Universe and is completely free to use.", "p2": "Just go ahead and install the Chrome or Firefox extension, reload your browser with APEX open and click the extension button in the upper-right in your browser to create an account. FIO will automatically collect (only) your game data while you keep playing.", "p3": "You can now login to the {link} to see your data and create an API-Key PRUNplanner will use to import your storage (materials you have somewhere) and sites (planets, ships, warehouses) data.", "p4": "Creating the key is easy, if you head to the {link} page and click the \"Create API Key\" button. Enter a name for your key (e.g., \"PRUNplanner\") and your FIO password. You don't need to \"Allow Writes\" as PRUNplanner will not manipulate any of your data, the tool just reads and uses it.", @@ -71,6 +71,7 @@ "form": { "tool_preferences": "Tool Preferences", "language": "Language", + "language_note": "We want to make PRUNplanner accessible to everyone. If you'd like to see the tool in your native language - or help us polish an existing translation - join our localization project on {link}.", "default_empire": "Default Empire", "default_cx": "Default CX", "fio_burn": "FIO Burn", diff --git a/src/locales/zh_CN/sharing.json b/src/locales/zh_CN/sharing.json new file mode 100644 index 00000000..a5969279 --- /dev/null +++ b/src/locales/zh_CN/sharing.json @@ -0,0 +1,11 @@ +{ + "info": "这将创建一个可分享给他人的专属链接。其他人可以查看你的计划,但不能修改。一旦你停止分享或删除该计划,链接将失效。", + "share_count": "你正在分享此计划。该计划已被查看 {count} 次", + "buttons": { + "create_link": "创建分享链接", + "copy_url": "复制链接", + "stop_sharing": "停止分享", + "views": "{count} 次查看", + "share": "分享" + } +} diff --git a/src/locales/zh_CN/terms.json b/src/locales/zh_CN/terms.json index 611271cb..f9f05582 100644 --- a/src/locales/zh_CN/terms.json +++ b/src/locales/zh_CN/terms.json @@ -1,22 +1,30 @@ { "30d": "30D", "7d": "7D", + "amount": "Amount", "api_key": "API Key", + "area": "Area", "ask": "Ask", "bid": "Bid", "buffer": "缓冲", + "buildings_plural": "Buildings", "buildings": "Building | Buildings", + "burn": "Burn", "cogc": "COGC", "cogm": "COGM", - "consumption": "Consumption", + "consumption": "消耗量", "cost": "成本", "cx_plural": "CXs", "cx": "CX | CXs", - "delta_price": "ȼ Delta", - "delta": "Delta", + "delta_price": "利润差值", + "delta": "差值", "demand": "Demand", + "empire_plural": "Empires", "empire": "帝国 | 帝国", "exchanges": "Exchange | Exchanges", + "experts_plural": "Experts", + "experts": "Expert | Experts", + "export": "Export", "faction": "Faction", "fertility": "Fertility", "filter": "Filter", @@ -25,11 +33,13 @@ "gravity": "Gravity", "high": "High", "hq": "总部", + "import": "Import", "low": "Low", "material_ticker": "Ticker", - "materials_plural": "Materials", - "materials": "Material | Materials", - "permits_plural": "Permits", + "materials_plural": "物料", + "materials": "物料 | 物料", + "override": "Override", + "permits_plural": "许可", "permits": "许可证 | 许可证", "plan": "Plan | Plans", "planet_plural": "Planets", @@ -37,22 +47,27 @@ "plans_plural": "Plans", "popr": "POPR", "pressure": "Pressure", - "production": "Production", + "price": "Price", + "production": "产量", "profit_per_area": "利润 / 区域", "profit": "利润", + "recipes_plural": "Recipes", "recipes": "Recipe | Recipes", "resources_plural": "Resources", "resources": "Resource | Resources", "revenue": "收入", "rocky": "Rocky", "spread": "Spread", + "stock": "Stock", + "storage": "Storage", + "sum": "∑", "supply": "Supply", "surface": "Surface", "temperature": "Temperature", + "total_volume": "Total Volume", + "total_weight": "Total Weight", "trend": "Trend", "volume": "Volume", "vwap": "VWAP", - "weight": "Weight", - "amount": "Amount", - "storage": "Storage" + "weight": "Weight" } diff --git a/src/locales/zh_CN/xit.json b/src/locales/zh_CN/xit.json new file mode 100644 index 00000000..0c4d8253 --- /dev/null +++ b/src/locales/zh_CN/xit.json @@ -0,0 +1,26 @@ +{ + "form": { + "origin": "来源地", + "target_days": "目标天数", + "buy_from_cx": "从 CX 购买", + "buy_from_cx_warning": "只有来源地为仓库时才能采购。", + "fit_ship": "适配飞船", + "hide_infinite": "隐藏无限项", + "json": "JSON" + }, + "buttons": { + "copy_json": "复制 XIT JSON", + "copy": "@:common.buttons.copy" + }, + "table": { + "ticker": "@:terms.material_ticker", + "stock": "@:terms.stock", + "delta": "@:terms.delta", + "burn": "@:terms.burn", + "amount": "@:terms.amount", + "override": "@:terms.override", + "weight_value": "@:{'terms.weight'}: {value}", + "volume_value": "@:{'terms.volume'}: {value}", + "price_value": "@:{'terms.price'}: {value}" + } +}