{ "app": { "title": "Idle Fantasy", "subtitle": "Save Viewer", "loading": "Loading save…" }, "nav": { "overview": "Overview", "skills": "Skills", "inventory": "Inventory", "goals": "Goals", "equipment": "Equipment", "quests": "Quests", "combat": "Combat", "history": "History" }, "settings": { "language": "Language", "langAuto": "Auto (browser)", "langEn": "English", "langDe": "Deutsch" }, "actions": { "importBackup": "Import game backup", "exportViewer": "Export viewer", "importViewer": "Import viewer", "compare": "Compare", "dismiss": "Dismiss" }, "empty": { "noSave": "No save imported. Start with: python app.py fantasyidler_save.json", "noSaveWeb": "No save imported yet. Import a backup using the sidebar button.", "loadError": "Failed to load: {message}", "unknown": "Unknown", "none": "None", "empty": "Empty", "noItems": "No items found", "noSnapshots": "No snapshots yet. Import a backup.", "noChanges": "No changes", "pickTwoSnapshots": "Select two different snapshots." }, "import": { "failed": "Import failed", "duplicate": "Backup already exists (duplicate).", "success": "Imported: Snapshot #{id}", "successWithNotes": "Imported: Snapshot #{id}\n\n{warnings} warning(s), {infos} note(s) – see dashboard banner for details.", "changesTitle": "Changes since last import", "changesSummary": "Coins {coins} · Level {level} · {inv} inventory changes · {skills} skill changes", "questsCompleted": "Story quests completed", "slayerKills": "Slayer kills", "dungeonRuns": "Dungeon runs", "topInventory": "Largest inventory changes", "topSkills": "Largest skill changes", "titleError": "Import errors", "titleWarning": "Import warnings", "titleInfo": "Import notes", "countErrors": "{count} error(s)", "countWarnings": "{count} warning(s)", "countInfos": "{count} info(s)", "newFieldsSummary": "{count} new/unknown field(s) from the game", "invalid_root": "The file is not a JSON object – not a valid Idle Fantasy backup.", "empty_save": "The save file is empty.", "unknown_top_level": "Unknown field in backup: \"{field}\" (added by a game update?).", "missing_field": "Expected field missing: \"{field}\" – related data will be shown empty.", "nested_json_invalid": "Field \"{field}\" could not be read as JSON – raw value ignored.", "invalid_coins": "Field \"coins\" is not numeric.", "invalid_exported_at": "Field \"exported_at\" is not a valid timestamp.", "missing_exported_at": "No export timestamp – history comparisons may be inaccurate.", "skill_xp_mismatch": "{count} skill(s) without XP entry (e.g. {examples}).", "skill_level_mismatch": "{count} XP entries without skill level.", "unparsed_nested_json": "Field \"{field}\" is still a text string – JSON content could not be read.", "invalid_type": "Field \"{field}\" has unexpected type ({type}).", "coerced_empty_dict": "Field \"{field}\" is not an object – treated as empty.", "coerced_empty_list": "Field \"{field}\" is not a list – skipped.", "invalid_number": "Invalid number in \"{field}\"{detail}.", "invalid_quest_entry": "Quest entry #{index} is not an object and was skipped.", "invalid_session_entry": "Session entry #{index} is not an object and was skipped.", "unparsed_session_frames": "Session #{index}: activity frames could not be read.", "invalid_pets": "Field \"pets\" is not a list.", "invalid_farming_patch": "Farming patch #{index} was skipped.", "missing_character_name": "No character name found in save.", "invalid_quest_ids": "Quest IDs ({label}) are not a list.", "invalid_quest_progress": "Quest progress ({label}) is not an object." }, "meta": { "export": "Export", "points": "points" }, "kpi": { "coins": "Coins", "totalLevel": "Total level", "items": "Items", "totalQty": "Total quantity", "goalsOpen": "Open goals" }, "overview": { "character": "Character", "hp": "HP", "activePotion": "Active potion", "activeSpell": "Active spell", "weaponSlot": "Weapon slot", "blessing": "Blessing", "sessionQueue": "Session queue", "slayer": "Slayer", "noSlayerTask": "No active slayer task", "pets": "Pets", "farming": "Farming", "patch": "Patch {n}", "guildRep": "Guild reputation" }, "skills": { "search": "Search skills…", "sortLevel": "By level", "sortXp": "By XP", "sortName": "By name", "skill": "Skill", "level": "Level", "progress": "Progress", "addGoal": "Add goal", "addGoalFor": "Add goal for {name}" }, "inventory": { "search": "Search items…", "sortCategory": "By category", "sortName": "By name", "sortQty": "By quantity", "highlightEquipped": "Highlight equipped", "item": "Item", "qty": "Qty", "id": "ID", "equipped": "Equipped", "groupMeta": "{count} items · {qty} pcs", "trend": "Trend", "trendExpand": "Click to enlarge chart", "trendExpandFor": "Quantity history for {name}", "addGoal": "Add goal", "addGoalFor": "Add goal for {name}" }, "equipment": { "title": "Equipment" }, "quests": { "story": "Story", "daily": "Daily", "weekly": "Weekly", "guild": "Guild", "filterAll": "All", "filterOpen": "Open", "filterDone": "Completed", "quest": "Quest", "progress": "Progress", "status": "Status", "done": "Done", "open": "Open" }, "combat": { "enemyKills": "Enemy kills", "dungeonRuns": "Dungeon runs", "runs": "{count} runs", "recentActivity": "Recent activity", "activeSessions": "Active sessions", "sessionDone": "done", "sessionRunning": "running" }, "history": { "loading": "Loading history…", "coinsChart": "Coins over time", "levelChart": "Total level over time", "snapshotCompare": "Snapshot comparison", "allSnapshots": "All snapshots", "character": "Character", "file": "File", "inventoryChanges": "Inventory changes ({count})", "skillChanges": "Skill changes ({count})", "delta": "Delta", "xpDelta": "XP delta", "skillLevelChart": "Top skills over time", "delete": "Delete", "deleteSnapshot": "Delete snapshot", "deleteSnapshotConfirm": "Really delete this snapshot?", "deleteSnapshotFailed": "Could not delete snapshot", "coinsSummary": "Coins: {delta} · Total level: {levelDelta}" }, "search": { "global": "Search items, skills and goals…", "noResults": "No results", "type": { "item": "Item", "skill": "Skill", "goal": "Goal" } }, "category": { "currency": "Currency", "ores_mining": "Ores & Mining", "bars_smithing": "Bars & Smithing", "wood_planks": "Wood & Planks", "runes": "Runes", "raw_food": "Raw Food", "cooked_food": "Cooked Food", "seeds_farming": "Seeds & Farming", "melee_weapons": "Melee Weapons", "ranged": "Ranged", "magic": "Magic", "armor": "Armor", "bones_hides": "Bones & Hides", "gems_jewelry": "Gems & Jewelry", "potions_brews": "Potions & Brews", "misc": "Misc" }, "viewer": { "landingLead": "Create your personal save viewer. No account – just a private link to your data.", "gameLink": "Idle Fantasy on GitHub", "featureDashboard": "Skills, inventory, quests and history", "featureUpload": "Import backups in the browser", "featurePrivate": "Your data stays in your viewer only", "create": "Create my viewer", "creating": "Creating viewer…", "createFailed": "Could not create viewer", "warningTitle": "Important", "warningBody": "There is no login. Your viewer is only accessible via its unique link. Bookmark or save the link – without it, your data cannot be recovered.", "linkTitle": "Your personal link", "linkWarning": "Save this link – there is no login. Without it, your data is lost.", "copyLink": "Copy link", "copied": "Copied!", "copyPrompt": "Copy your viewer link:" }, "viewerDb": { "title": "Viewer backup", "helpTitle": "What is this?", "helpBody": "The viewer stores imported game backups, history charts, and goals in a SQLite database on the server. Export downloads that database as a backup. Import restores it and replaces all current viewer data. This is not the same as importing a game save (.json).", "exportHint": "Download the SQLite database with all snapshots, history, and goals", "importConfirm": "All current viewer data (snapshots, history, goals) will be replaced by the imported .db file. Continue?", "importSuccess": "Viewer restored: {snapshots} snapshot(s), {goals} goal(s).", "importFailed": "Could not import viewer database", "invalidFile": "Please select a .db file (viewer export)." }, "goals": { "filterAll": "All", "filterOpen": "Open", "filterDone": "Completed", "createGroup": "Create group", "createGroupPrompt": "Group name:", "groupProgress": "{completed} / {total} done", "ungrouped": "Ungrouped", "item": "Item", "progress": "Progress", "status": "Status", "actions": "Actions", "open": "Open", "done": "Done", "delete": "Delete", "deleteGroup": "Delete group", "deleteGroupConfirm": "Delete group \"{name}\"? Goals will be kept as ungrouped.", "deleteConfirm": "Delete this goal?", "clearCompleted": "Remove completed", "empty": "No goals yet. Add goals from the Inventory or Skills tab.", "loadError": "Failed to load goals", "createFailed": "Could not create goal", "groupCreateFailed": "Could not create group", "modalTitle": "Add item goal", "modalTitleSkill": "Add skill goal", "cancel": "Cancel", "targetQty": "Target quantity", "targetLevel": "Target level", "mode": "Mode", "modeAbsolute": "Absolute (total qty/level)", "modeRelative": "Relative (since creation)", "modeRelativeHint": "Relative goal – progress since creation", "typeSkill": "Skill", "currentLevel": "Current: level {level}", "missing": "{qty} still needed", "missingShort": "−{qty}", "etaSnapshots": "~{n} import(s)", "hasGoal": "Open goal", "total": "total", "renameGroup": "Rename", "renameGroupPrompt": "New group name:", "selectGroup": "Group", "noGroup": "No group", "newGroup": "New group…", "newGroupName": "New group name", "currentQty": "Current: {qty}", "completedBannerTitle": "Goals reached", "completedItem": "{group}{name}: {current} / {target}", "completedItemGroup": "{name}: ", "groupCompleted": "Group completed: {name}" } }