64820cefc1
Extends the goals system and viewer UX so players can track item and skill targets with groups, ETAs, global search, snapshot management, and DB export. Co-authored-by: Cursor <cursoragent@cursor.com>
279 lines
9.8 KiB
JSON
279 lines
9.8 KiB
JSON
{
|
||
"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 backup",
|
||
"exportViewer": "Export 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:"
|
||
},
|
||
"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}"
|
||
}
|
||
}
|