diff --git a/i18n.py b/i18n.py new file mode 100644 index 0000000..f0e926e --- /dev/null +++ b/i18n.py @@ -0,0 +1,3808 @@ +#!/usr/bin/env python3 +""" +Internationalization (i18n) module for neopig SERP. + +Contains translations for 26 languages and helper functions for +language detection, translation lookup, and HTML injection. +""" + +import json +from typing import Optional + +TRANSLATIONS = { + "en": { + "search": "Search", "crawl": "Crawl", "live": "Live Feed", "about": "About", + "random": "Random", "phantom": "Phantom", "loading": "Loading...", + "start_crawl": "Start Crawl", "pause": "Pause", "resume": "Resume", "delete": "Delete", + "url": "URL", "mode": "Mode", "depth": "Depth", "keywords": "Keywords", + "screenshots": "Screenshots", "fast_mode": "Fast Mode", "fresh_start": "Fresh Start", + "pages": "pages", "found": "found", "saved": "saved", "dupes": "dupes", + "running": "running", "completed": "completed", "paused": "paused", + "no_jobs": "No crawl jobs yet", "started": "Started", "filter": "Filter", + "all_types": "All types", "images": "Images", "videos": "Videos", "audio": "Audio", + "everything": "Everything (text + media)", "all_media": "All media (images + videos + audio)", + "images_only": "Images only", "videos_only": "Videos only", "text_only": "Text only", + "recent_jobs": "Recent Jobs", "search_placeholder": "Search media...", + "media": "Media", "pages_label": "Pages", "download": "Download", + "no_media": "No media found", "no_more": "No more results", "load_error": "Failed to load", + "copy": "Copy", "copied": "Copied!", "starting": "Starting...", "started_ok": "Started!", + "error": "Error", "watching": "Watching for new images...", "content": "Content", + "previous": "Previous", "next": "Next", "over_9000": "Over 9,000+!", + "loading_stats": "Loading stats...", "screenshot": "Screenshot", + "valid_uri": "Please enter at least one valid URI", "load_jobs_error": "Failed to load jobs", + "hydrate_subtitle": "Hydrate media from the web", "live_subtitle": "Watch images appear as they're crawled", + "total_images": "Total Images", "new_session": "New This Session", "per_minute": "Per Minute", + "all_domains": "All domains", "download_phantom": "Download Phantom Site", + "phantom_subtitle": "Export archived pages as a static site with local media", "sources": "sources", "max_pages": "Max Pages", "select_domain": "Select Domain", + "source_uri": "Source URI", "neopig_uri": "Neopig URI", "source_page": "Source Page", "neopig_page": "Neopig Page", "type_label": "Type", "mime_label": "MIME", "size_label": "Size", "alt_label": "Alt", "keywords_label": "Keywords", "description_label": "Description", "items": "items", "bytes": "bytes", + "used_on": "Used on", "page": "Page", "discovered": "Discovered", + "console": "Console", "close": "Close", "no_logs": "No logs yet", + # About page translations + "about_subtitle": "Neo Python Image Grabber", + "about_ch1_title": "Genesis", "about_ch2_title": "A Great Bitbucket Extinction", "about_ch3_title": "An Alchemy", + "about_ch4_title": "A Pig Awakens", "about_ch5_title": "A Mirror Dimension", "about_ch6_title": "The Arsenal", + "about_ch7_title": "A Skeleton Key", "about_ch8_title": "Why We Archive", "about_ch9_title": "A Forge", + "about_ch10_title": "A Way.", "about_ch11_title": "Invoke the Pig", + "about_feat_async": "Async Domain Crawling", "about_feat_vault": "Content-Addressed Vault", + "about_feat_fts": "Full-Text Search", "about_feat_screenshots": "Page Screenshots", + "about_feat_hydra": "Hydra Mode", "about_feat_provenance": "Media Provenance", + "about_feat_markdown": "Markdown Conversion", "about_feat_selfextract": "Self-Extracting Archives", + "about_feat_code": "Code File Support", "about_feat_vcs": "VCS Repository Cloning", + "about_feat_live": "Live Feed", "about_feat_serp": "SERP Web Interface", + "about_footer_p1": "neopig is open source, gifted into our public domain.", + "about_footer_p2": "Neopig lives:", "about_footer_p3": "In memory of all the repositories Atlassian killed.", + "about_footer_p5": "Sorry for the convenience.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "zh": { + "search": "搜索", "crawl": "爬取", "live": "实时动态", "about": "关于", + "random": "随机", "phantom": "幻影", "loading": "加载中...", + "start_crawl": "开始爬取", "pause": "暂停", "resume": "继续", "delete": "删除", + "url": "网址", "mode": "模式", "depth": "深度", "keywords": "关键词", + "screenshots": "截图", "fast_mode": "快速模式", "fresh_start": "全新开始", + "pages": "页面", "found": "发现", "saved": "保存", "dupes": "重复", + "running": "运行中", "completed": "已完成", "paused": "已暂停", + "no_jobs": "暂无爬取任务", "started": "开始于", "filter": "筛选", + "all_types": "所有类型", "images": "图片", "videos": "视频", "audio": "音频", + "everything": "全部(文本+媒体)", "all_media": "所有媒体(图片+视频+音频)", + "images_only": "仅图片", "videos_only": "仅视频", "text_only": "仅文本", + "recent_jobs": "最近任务", "search_placeholder": "搜索媒体...", + "media": "媒体", "pages_label": "页面", "download": "下载", + "no_media": "未找到媒体", "no_more": "没有更多结果", "load_error": "加载失败", + "copy": "复制", "copied": "已复制!", "starting": "启动中...", "started_ok": "已启动!", + "error": "错误", "watching": "正在监视新图片...", "content": "内容", + "previous": "上一页", "next": "下一页", "over_9000": "超过9000+!", + "loading_stats": "加载统计中...", "screenshot": "截图", + "valid_uri": "请输入至少一个有效的URI", "load_jobs_error": "加载任务失败", + "hydrate_subtitle": "从网络获取媒体", "live_subtitle": "观看正在爬取的图片", + "total_images": "总图片数", "new_session": "本次新增", "per_minute": "每分钟", + "all_domains": "所有域名", "download_phantom": "下载幻影站点", + "phantom_subtitle": "将存档页面导出为带本地媒体的静态站点", "max_pages": "最大页数", "select_domain": "选择域名", "sources": "来源", + "source_uri": "源URI", "neopig_uri": "Neopig URI", "source_page": "源页面", "neopig_page": "Neopig页面", + "type_label": "类型", "mime_label": "MIME", "size_label": "大小", "alt_label": "替代文本", + "keywords_label": "关键词", "description_label": "描述", "items": "项", "bytes": "字节", + "used_on": "使用于", "page": "页面", "discovered": "发现时间", + "console": "控制台", "close": "关闭", "no_logs": "暂无日志", + # About page translations + "about_subtitle": "新一代Python图像抓取器", + "about_ch1_title": "创世纪", "about_ch2_title": "Bitbucket大灭绝", "about_ch3_title": "炼金术", + "about_ch4_title": "猪的觉醒", "about_ch5_title": "镜像维度", "about_ch6_title": "武器库", + "about_ch7_title": "万能钥匙", "about_ch8_title": "为什么我们存档", "about_ch9_title": "锻造", + "about_ch10_title": "一条道路。", "about_ch11_title": "召唤猪", + "about_feat_async": "异步域名爬取", "about_feat_vault": "内容寻址保险库", + "about_feat_fts": "全文搜索", "about_feat_screenshots": "页面截图", + "about_feat_hydra": "Hydra模式", "about_feat_provenance": "媒体溯源", + "about_feat_markdown": "Markdown转换", "about_feat_selfextract": "自解压存档", + "about_feat_code": "代码文件支持", "about_feat_vcs": "VCS仓库克隆", + "about_feat_live": "实时动态", "about_feat_serp": "SERP网络界面", + "about_footer_p1": "neopig是开源的,赠予公共领域。", + "about_footer_p2": "Neopig所在:", "about_footer_p3": "纪念Atlassian杀死的所有仓库。", + "about_footer_p5": "抱歉给您带来便利。", + # About page body translations + "about_hero_tagline": "一只凤凰般的嵌合体,从死去的代码仓库和论坛的骨骼中生长。一只吞噬整个网络域名的猪。当其他人存档页面时,neopig吞噬所有数字文件。", + "about_hero_tagline2": "欢迎来到水瓶时代,没有欺骗性的秘密。", + "about_ch1_quote": "pig.py是一个非常简单的Python命令行工具,用于从给定的URI下载所有图片。", + "about_ch1_cite": "Russell Ballestrini,2011年8月22日", + "about_ch1_p1": "起初,有一个pig.py。一个简单的生物。天真无邪。饥肠辘辘。", + "about_ch1_p2": "Russell Ballestrini在2011年夏天创造了它——一个卑微的Python脚本,只有一个胃口:图片。把它指向一个网页,它就会吸取所能找到的每一个像素。", + "about_ch1_p3": "就是这样。整个界面。Pig只需要一个目标,它就会进食。", + "about_ch1_p4": "Russell将其发布到公共领域——送给任何需要从野生网络中收割图片的人的礼物。", + "about_ch2_p1": "然后黑暗时代来临了。", + "about_ch2_p2": "2020年,Atlassian宣布将清除所有Mercurial仓库。全部。Bitbucket Cloud上的每一个hg仓库,都被原子化。", + "about_ch2_p3": "原始的pig.py也在伤亡名单之中。它的家成了一块墓碑。", + "about_ch2_quote": "他们真的杀死了pig.py并把它送进了bitbucket。", + "about_ch2_cite": "用死亡俚语命名你的墓地的残酷讽刺", + "about_ch2_p4": "送进bitbucket——穿孔卡时代的程序员俚语。Atlassian以垃圾桶命名他们的服务,然后证明了这个预言成真。", + "about_ch2_p5": "Pig死了。它的骨骼散落在缓存的搜索结果中。", + "about_ch2_p6": "但这就是事情变得奇怪的地方。", + "about_ch3_p1": "Russell曾写道,编程就像炼金术——我们程序员不是交换物质,而是交换时间。", + "about_ch3_p2": "程序是傀儡。熟悉的精灵。执行重复任务的魔法仆人,这样我们就不必亲自动手。", + "about_ch3_p3": "年复一年。网络继续其无情的变迁——网站消失,论坛关闭,社区分散。", + "about_ch3_quote": "如果我们能把那些死去的代码炼成金子呢?", + "about_ch3_cite": "开启一切的想法", + "about_ch3_p4": "Marathon Fusion发现托卡马克增殖毯可以通过点金术将汞-198转化为金-197。", + "about_ch3_p5": "每千兆瓦两公吨黄金。炼金术士的梦想实现了。", + "about_ch3_p6": "一只从废弃版本控制中诞生的金鹅。一个新的生物在数字深处蠕动...", + "about_ch3_p7": "机器学习使用无为能量展开neopig.py。", + "about_ch4_p1": "如同凤凰从死去的Bitbucket仓库中涅槃重生,neopig出现了。", + "about_ch4_p2": "不是复活。不是简单的分叉。是嵌合体。是狮鹫。是用原始pig的DNA拼接而成的生物。", + "about_ch4_quote": "一只胃口像钢之炼金术士中的暴食一样的猪——一个吞噬一切的人造人。", + "about_ch4_p3": "当pig.py只是从单个页面啜饮时,neopig吞噬整个域名。它消化HTML,截取页面,转换为markdown,索引每一片文本。", + "about_ch4_p4": "代码现在托管在git.unturf.com。它还在不断进化。", + "about_ch4_p5": "我们正在添加备份整个代码库的能力。Neopig变得更加饥饿。", + "about_ch5_p1": "我们即将把git树倒置到它自身之中。", + "about_ch5_p2": "就像奇异博士在镜像维度中——那个几何体折叠回自身的不可能空间。", + "about_ch5_p3": "neopig不仅仅存档网站。它可以存档自己。它可以存档包含自己代码的仓库。", + "about_ch5_quote": "我们的蜘蛛猪像狮鹫一样吸收一切,像嵌合体一样,像一只以死去平台骨骼为食的猪。", + "about_ch5_p4": "当代码托管平台消亡时,neopig确保知识存活。我们是方舟。我们是保险库。", + "about_ch5_p5": "存档成为自解压可执行文件。一只沉睡的猪,肚子里装着整个网站。", + "about_feat_async_desc": "具有可配置深度的全域递归爬取。遵守robots.txt。礼貌但不懈。", + "about_feat_vault_desc": "9层十六进制目录结构中基于MD5的去重。来自100个页面的同一图像?只存储一次。", + "about_feat_fts_desc": "每张图片都与其周围上下文一起索引——页面标题、alt文本、标题。按含义查找图片,而不是文件名。", + "about_feat_screenshots_desc": "LinkPeek重生!通过uri2png进行全页面捕获。支持多种后端。", + "about_feat_hydra_desc": "自动发现RSS/Atom/Sitemap源。自我修复的存档维护。", + "about_feat_provenance_desc": "跟踪first_seen、last_seen以及每个页面首次链接到媒体的时间。", + "about_feat_markdown_desc": "智能HTML到Markdown转换,具有论坛帖子检测和噪声去除。", + "about_feat_selfextract_desc": "创建包含整个网站的.run可执行文件。Pig轻装上阵。", + "about_feat_code_desc": "与媒体一起存档源代码、样式表、字体。完整保存。", + "about_feat_vcs_desc": "自动检测GitHub、GitLab、Bitbucket。克隆仓库,跨分叉去重。", + "about_feat_live_desc": "在爬取进行时实时观看媒体出现。Pig在你观看时狩猎。", + "about_feat_serp_desc": "FastAPI驱动的搜索引擎。你的个人媒体搜索引擎。", + "about_ch7_p1": "neopig使用万能钥匙方法进行媒体索引。对于每张图片,我们捕获所有可能帮助你稍后找到它的文本。", + "about_ch7_p2": "页面上下文、图片属性、链接上下文、详情页面——我们收割一切。", + "about_ch7_p3": "搜索山上的日落,即使它被命名为IMG_4372.jpg也能找到那张图片。", + "about_ch7_p4": "每扇门都打开。万能钥匙适合每把锁,因为它内部携带着每一把可能的钥匙。", + "about_ch8_p1": "网络是短暂的。网站消失。论坛关闭。社区分散。", + "about_ch8_p2": "我们目睹了心爱的社区消失。游戏模组论坛。技术文档。艺术画廊。就这样消失了。", + "about_ch8_p3": "neopig为保存而生——不仅捕获媒体,还捕获赋予其意义的上下文。", + "about_ch8_list": "原始HTML、全文可搜索markdown、截图、SQLite数据库、自解压存档。", + "about_ch9_p1": "这个工具不是为了盈利而建造的。它是被锻造的。", + "about_ch9_p2": "在permacomputer.com的火焰中锻造——相信计算应该是永恒的。", + "about_ch9_quote": "真理。和谐。自由。爱。", + "about_ch9_cite": "永恒计算机的四艺", + "about_ch9_truth": "真理——我们保存真实存在的,而不是经过净化的版本。", + "about_ch9_harmony": "和谐——每一部分都相互连接。存档是一个活的关系网络。", + "about_ch9_freedom": "自由——公共领域。代码是你的。你创建的存档是你的。", + "about_ch9_love": "爱——我们存档是因为我们在乎。这是对人类知识的爱的行为。", + "about_ch9_p3": "Pig被正义之火浸透。它遵守robots.txt因为它尊重创作者。", + "about_ch9_p4": "当平台倒下,存档持续。知识存活。", + "about_ch9_p5": "这就是我们被锻造来做的事。", + "about_ch10_p1": "neopig建立在SQLite之上——世界上部署最广泛的数据库。SQLite采用了圣本笃规则作为他们的道德准则。72条来自6世纪修道院的原则,在21世纪管理软件。", + "about_ch10_p2": "我们继承这一血统。所有72条规则,完整无删:", + "about_ch10_p3": "我们存档不是为了囤积,而是为了给予。我们保存不是为了控制,而是为了解放。保存你记忆的数据库建立在古老智慧的基础上——我们也是如此。", + "about_ch11_p1": "neopig = Neo(新)+ Python Image Grabber(图像抓取器)", + "about_ch11_p2": "向原始pig.py致敬。向黑客帝国的Neo致敬——看穿网络表面到达其中的底层内容。也许也是一个警告:这只猪已经长出了牙齿。", + "about_footer_remember": "Neopig记住。Neopig存档。Neopig坚持。", + }, + "es": { + "search": "Buscar", "crawl": "Rastrear", "live": "En Vivo", "about": "Acerca de", + "random": "Aleatorio", "phantom": "Fantasma", "loading": "Cargando...", + "start_crawl": "Iniciar Rastreo", "pause": "Pausar", "resume": "Reanudar", "delete": "Eliminar", + "url": "URL", "mode": "Modo", "depth": "Profundidad", "keywords": "Palabras clave", + "screenshots": "Capturas", "fast_mode": "Modo Rápido", "fresh_start": "Inicio Limpio", + "pages": "páginas", "found": "encontradas", "saved": "guardadas", "dupes": "duplicados", + "running": "ejecutando", "completed": "completado", "paused": "pausado", + "no_jobs": "Sin tareas de rastreo", "started": "Iniciado", "filter": "Filtrar", + "all_types": "Todos los tipos", "images": "Imágenes", "videos": "Videos", "audio": "Audio", + "everything": "Todo (texto + medios)", "all_media": "Todos los medios", + "images_only": "Solo imágenes", "videos_only": "Solo videos", "text_only": "Solo texto", + "recent_jobs": "Tareas Recientes", "search_placeholder": "Buscar medios...", + "media": "Medios", "pages_label": "Páginas", "download": "Descargar", + "no_media": "No se encontraron medios", "no_more": "No hay más resultados", "load_error": "Error al cargar", + "copy": "Copiar", "copied": "¡Copiado!", "starting": "Iniciando...", "started_ok": "¡Iniciado!", + "error": "Error", "watching": "Buscando nuevas imágenes...", "content": "Contenido", + "previous": "Anterior", "next": "Siguiente", "over_9000": "¡Más de 9,000+!", + "loading_stats": "Cargando estadísticas...", "screenshot": "Captura", + "valid_uri": "Ingrese al menos una URI válida", "load_jobs_error": "Error al cargar tareas", + "hydrate_subtitle": "Obtener medios de la web", "live_subtitle": "Ver imágenes mientras se rastrean", + "total_images": "Total de imágenes", "new_session": "Nuevas en esta sesión", "per_minute": "Por minuto", + "all_domains": "Todos los dominios", "download_phantom": "Descargar sitio fantasma", + "phantom_subtitle": "Exportar páginas archivadas como sitio estático con medios locales", "max_pages": "Máx. páginas", "select_domain": "Seleccionar dominio", "sources": "fuentes", + "source_uri": "URI de origen", "neopig_uri": "URI Neopig", "source_page": "Página de origen", "neopig_page": "Página Neopig", + "type_label": "Tipo", "mime_label": "MIME", "size_label": "Tamaño", "alt_label": "Alt", + "keywords_label": "Palabras clave", "description_label": "Descripción", "items": "elementos", "bytes": "bytes", + "used_on": "Usado en", "page": "Página", "discovered": "Descubierto", + "console": "Consola", "close": "Cerrar", "no_logs": "Sin registros aún", + # About page translations + "about_subtitle": "Capturador de Imagenes Python Neo", + "about_ch1_title": "Genesis", "about_ch2_title": "La Gran Extincion de Bitbucket", "about_ch3_title": "Una Alquimia", + "about_ch4_title": "Un Cerdo Despierta", "about_ch5_title": "Una Dimension Espejo", "about_ch6_title": "El Arsenal", + "about_ch7_title": "Una Llave Maestra", "about_ch8_title": "Por Que Archivamos", "about_ch9_title": "Una Fragua", + "about_ch10_title": "Un Camino.", "about_ch11_title": "Invoca al Cerdo", + "about_feat_async": "Rastreo Asincrono de Dominios", "about_feat_vault": "Boveda Direccionada por Contenido", + "about_feat_fts": "Busqueda de Texto Completo", "about_feat_screenshots": "Capturas de Pantalla", + "about_feat_hydra": "Modo Hidra", "about_feat_provenance": "Procedencia de Medios", + "about_feat_markdown": "Conversion a Markdown", "about_feat_selfextract": "Archivos Auto-extraibles", + "about_feat_code": "Soporte de Archivos de Codigo", "about_feat_vcs": "Clonacion de Repositorios VCS", + "about_feat_live": "Feed en Vivo", "about_feat_serp": "Interfaz Web SERP", + "about_footer_p1": "neopig es codigo abierto, donado al dominio publico.", + "about_footer_p2": "Neopig vive en:", "about_footer_p3": "En memoria de todos los repositorios que Atlassian mato.", + "about_footer_p5": "Disculpen las comodidades.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "hi": { + "search": "खोजें", "crawl": "क्रॉल", "live": "लाइव फ़ीड", "about": "के बारे में", + "random": "यादृच्छिक", "phantom": "प्रेत", "loading": "लोड हो रहा है...", + "start_crawl": "क्रॉल शुरू करें", "pause": "रोकें", "resume": "जारी रखें", "delete": "हटाएं", + "url": "यूआरएल", "mode": "मोड", "depth": "गहराई", "keywords": "कीवर्ड", + "screenshots": "स्क्रीनशॉट", "fast_mode": "फास्ट मोड", "fresh_start": "नई शुरुआत", + "pages": "पेज", "found": "मिले", "saved": "सहेजे", "dupes": "डुप्लीकेट", + "running": "चल रहा है", "completed": "पूर्ण", "paused": "रुका हुआ", + "no_jobs": "कोई क्रॉल कार्य नहीं", "started": "शुरू", "filter": "फ़िल्टर", + "all_types": "सभी प्रकार", "images": "चित्र", "videos": "वीडियो", "audio": "ऑडियो", + "everything": "सब कुछ", "all_media": "सभी मीडिया", "images_only": "केवल चित्र", + "videos_only": "केवल वीडियो", "text_only": "केवल टेक्स्ट", + "recent_jobs": "हाल के कार्य", "search_placeholder": "मीडिया खोजें...", + "media": "मीडिया", "pages_label": "पेज", "download": "डाउनलोड", + "no_media": "कोई मीडिया नहीं मिला", "no_more": "और कोई परिणाम नहीं", "load_error": "लोड करने में विफल", + "copy": "कॉपी", "copied": "कॉपी हो गया!", "starting": "शुरू हो रहा...", "started_ok": "शुरू हो गया!", + "error": "त्रुटि", "watching": "नई छवियों की तलाश...", "content": "सामग्री", + "previous": "पिछला", "next": "अगला", "over_9000": "9,000+ से अधिक!", + "loading_stats": "आँकड़े लोड हो रहे...", "screenshot": "स्क्रीनशॉट", + "valid_uri": "कृपया कम से कम एक वैध URI दर्ज करें", "load_jobs_error": "कार्य लोड करने में विफल", + "hydrate_subtitle": "वेब से मीडिया प्राप्त करें", "live_subtitle": "क्रॉल होते हुए छवियां देखें", + "total_images": "कुल छवियां", "new_session": "इस सत्र में नई", "per_minute": "प्रति मिनट", + "all_domains": "सभी डोमेन", "download_phantom": "प्रेत साइट डाउनलोड करें", + "phantom_subtitle": "संग्रहित पृष्ठों को स्थानीय मीडिया के साथ स्थैतिक साइट के रूप में निर्यात करें", "max_pages": "अधिकतम पेज", "select_domain": "डोमेन चुनें", "sources": "स्रोत", + "source_uri": "स्रोत URI", "neopig_uri": "Neopig URI", "source_page": "स्रोत पृष्ठ", "neopig_page": "Neopig पृष्ठ", + "type_label": "प्रकार", "mime_label": "MIME", "size_label": "आकार", "alt_label": "Alt", + "keywords_label": "कीवर्ड", "description_label": "विवरण", "items": "आइटम", "bytes": "बाइट्स", + "used_on": "में उपयोग", "page": "पृष्ठ", "discovered": "खोजा गया", + "console": "कंसोल", "close": "बंद करें", "no_logs": "अभी तक कोई लॉग नहीं", + # About page translations + "about_subtitle": "नियो पायथन इमेज ग्रैबर", + "about_ch1_title": "उत्पत्ति", "about_ch2_title": "महान Bitbucket विलुप्ति", "about_ch3_title": "एक कीमियागरी", + "about_ch4_title": "एक सुअर जागता है", "about_ch5_title": "एक दर्पण आयाम", "about_ch6_title": "शस्त्रागार", + "about_ch7_title": "एक कंकाल चाबी", "about_ch8_title": "हम संग्रह क्यों करते हैं", "about_ch9_title": "एक फोर्ज", + "about_ch10_title": "एक मार्ग।", "about_ch11_title": "सुअर को बुलाओ", + "about_feat_async": "असिंक्रोनस डोमेन क्रॉलिंग", "about_feat_vault": "सामग्री-संबोधित वॉल्ट", + "about_feat_fts": "पूर्ण-पाठ खोज", "about_feat_screenshots": "पेज स्क्रीनशॉट", + "about_feat_hydra": "हाइड्रा मोड", "about_feat_provenance": "मीडिया उत्पत्ति", + "about_feat_markdown": "मार्कडाउन रूपांतरण", "about_feat_selfextract": "स्व-निष्कर्षण अभिलेखागार", + "about_feat_code": "कोड फ़ाइल समर्थन", "about_feat_vcs": "VCS रिपॉजिटरी क्लोनिंग", + "about_feat_live": "लाइव फीड", "about_feat_serp": "SERP वेब इंटरफ़ेस", + "about_footer_p1": "neopig ओपन सोर्स है, सार्वजनिक डोमेन में दान।", + "about_footer_p2": "Neopig यहां रहता है:", "about_footer_p3": "उन सभी रिपॉजिटरी की याद में जो Atlassian ने मार डाली।", + "about_footer_p5": "सुविधा के लिए खेद है।", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "ar": { + "search": "بحث", "crawl": "زحف", "live": "مباشر", "about": "حول", + "random": "عشوائي", "phantom": "شبح", "loading": "جاري التحميل...", + "start_crawl": "بدء الزحف", "pause": "إيقاف", "resume": "استئناف", "delete": "حذف", + "url": "الرابط", "mode": "الوضع", "depth": "العمق", "keywords": "كلمات مفتاحية", + "screenshots": "لقطات", "fast_mode": "وضع سريع", "fresh_start": "بداية جديدة", + "pages": "صفحات", "found": "وجدت", "saved": "حفظت", "dupes": "مكررات", + "running": "جاري", "completed": "مكتمل", "paused": "متوقف", + "no_jobs": "لا توجد مهام", "started": "بدأ", "filter": "تصفية", + "all_types": "جميع الأنواع", "images": "صور", "videos": "فيديو", "audio": "صوت", + "everything": "الكل", "all_media": "جميع الوسائط", "images_only": "صور فقط", + "videos_only": "فيديو فقط", "text_only": "نص فقط", + "recent_jobs": "المهام الأخيرة", "search_placeholder": "بحث في الوسائط...", + "media": "وسائط", "pages_label": "صفحات", "download": "تحميل", + "no_media": "لم يتم العثور على وسائط", "no_more": "لا مزيد من النتائج", "load_error": "فشل التحميل", + "copy": "نسخ", "copied": "تم النسخ!", "starting": "جاري البدء...", "started_ok": "تم البدء!", + "error": "خطأ", "watching": "مراقبة الصور الجديدة...", "content": "المحتوى", + "previous": "السابق", "next": "التالي", "over_9000": "أكثر من 9,000+!", + "loading_stats": "جاري تحميل الإحصائيات...", "screenshot": "لقطة شاشة", + "valid_uri": "الرجاء إدخال رابط واحد على الأقل", "load_jobs_error": "فشل تحميل المهام", + "hydrate_subtitle": "جلب الوسائط من الويب", "live_subtitle": "مشاهدة الصور أثناء الزحف", + "total_images": "إجمالي الصور", "new_session": "جديدة في هذه الجلسة", "per_minute": "في الدقيقة", + "all_domains": "جميع النطاقات", "download_phantom": "تحميل موقع الشبح", + "phantom_subtitle": "تصدير الصفحات المؤرشفة كموقع ثابت مع وسائط محلية", "max_pages": "أقصى عدد صفحات", "select_domain": "اختر النطاق", "sources": "مصادر", + "source_uri": "URI المصدر", "neopig_uri": "URI Neopig", "source_page": "صفحة المصدر", "neopig_page": "صفحة Neopig", + "type_label": "النوع", "mime_label": "MIME", "size_label": "الحجم", "alt_label": "Alt", + "keywords_label": "كلمات مفتاحية", "description_label": "الوصف", "items": "عناصر", "bytes": "بايت", + "used_on": "مستخدم في", "page": "صفحة", "discovered": "اكتشف", + "console": "وحدة التحكم", "close": "إغلاق", "no_logs": "لا توجد سجلات بعد", + # About page translations + "about_subtitle": "أداة جلب الصور بايثون نيو", + "about_ch1_title": "التكوين", "about_ch2_title": "انقراض بتباكت العظيم", "about_ch3_title": "الخيمياء", + "about_ch4_title": "استيقاظ الخنزير", "about_ch5_title": "بعد المرآة", "about_ch6_title": "الترسانة", + "about_ch7_title": "مفتاح هيكلي", "about_ch8_title": "لماذا نؤرشف", "about_ch9_title": "المسبك", + "about_ch10_title": "الطريق.", "about_ch11_title": "استدعاء الخنزير", + "about_feat_async": "زحف النطاق غير المتزامن", "about_feat_vault": "خزنة محتوى موجهة", + "about_feat_fts": "بحث نصي كامل", "about_feat_screenshots": "لقطات الصفحة", + "about_feat_hydra": "وضع هيدرا", "about_feat_provenance": "مصدر الوسائط", + "about_feat_markdown": "تحويل ماركداون", "about_feat_selfextract": "أرشيفات ذاتية الاستخراج", + "about_feat_code": "دعم ملفات الكود", "about_feat_vcs": "استنساخ مستودعات VCS", + "about_feat_live": "بث مباشر", "about_feat_serp": "واجهة ويب SERP", + "about_footer_p1": "neopig مفتوح المصدر، مقدم للملكية العامة.", + "about_footer_p2": "Neopig يعيش في:", "about_footer_p3": "في ذكرى جميع المستودعات التي قتلتها Atlassian.", + "about_footer_p5": "عذرا على الراحة.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "pt": { + "search": "Pesquisar", "crawl": "Rastrear", "live": "Ao Vivo", "about": "Sobre", + "random": "Aleatório", "phantom": "Fantasma", "loading": "Carregando...", + "start_crawl": "Iniciar Rastreio", "pause": "Pausar", "resume": "Retomar", "delete": "Excluir", + "url": "URL", "mode": "Modo", "depth": "Profundidade", "keywords": "Palavras-chave", + "screenshots": "Capturas", "fast_mode": "Modo Rápido", "fresh_start": "Novo Início", + "pages": "páginas", "found": "encontradas", "saved": "salvas", "dupes": "duplicatas", + "running": "executando", "completed": "concluído", "paused": "pausado", + "no_jobs": "Sem tarefas", "started": "Iniciado", "filter": "Filtrar", + "all_types": "Todos os tipos", "images": "Imagens", "videos": "Vídeos", "audio": "Áudio", + "everything": "Tudo (texto + mídia)", "all_media": "Toda mídia", + "images_only": "Apenas imagens", "videos_only": "Apenas vídeos", "text_only": "Apenas texto", + "recent_jobs": "Tarefas Recentes", "search_placeholder": "Pesquisar mídia...", + "media": "Mídia", "pages_label": "Páginas", "download": "Baixar", + "no_media": "Nenhuma mídia encontrada", "no_more": "Sem mais resultados", "load_error": "Falha ao carregar", + "copy": "Copiar", "copied": "Copiado!", "starting": "Iniciando...", "started_ok": "Iniciado!", + "error": "Erro", "watching": "Observando novas imagens...", "content": "Conteúdo", + "previous": "Anterior", "next": "Próximo", "over_9000": "Mais de 9.000+!", + "loading_stats": "Carregando estatísticas...", "screenshot": "Captura de tela", + "valid_uri": "Insira pelo menos uma URI válida", "load_jobs_error": "Falha ao carregar tarefas", + "hydrate_subtitle": "Obter mídia da web", "live_subtitle": "Veja imagens aparecerem durante o rastreio", + "total_images": "Total de imagens", "new_session": "Novas nesta sessão", "per_minute": "Por minuto", + "all_domains": "Todos os domínios", "download_phantom": "Baixar site fantasma", + "phantom_subtitle": "Exportar páginas arquivadas como site estático com mídia local", "max_pages": "Máx. páginas", "select_domain": "Selecionar domínio", "sources": "fontes", + "source_uri": "URI de origem", "neopig_uri": "URI Neopig", "source_page": "Página de origem", "neopig_page": "Página Neopig", + "type_label": "Tipo", "mime_label": "MIME", "size_label": "Tamanho", "alt_label": "Alt", + "keywords_label": "Palavras-chave", "description_label": "Descrição", "items": "itens", "bytes": "bytes", + "used_on": "Usado em", "page": "Página", "discovered": "Descoberto", + "console": "Console", "close": "Fechar", "no_logs": "Sem logs ainda", + # About page translations + "about_subtitle": "Capturador de Imagens Python Neo", + "about_ch1_title": "Genesis", "about_ch2_title": "A Grande Extincao do Bitbucket", "about_ch3_title": "Uma Alquimia", + "about_ch4_title": "Um Porco Desperta", "about_ch5_title": "Uma Dimensao Espelho", "about_ch6_title": "O Arsenal", + "about_ch7_title": "Uma Chave Mestra", "about_ch8_title": "Por Que Arquivamos", "about_ch9_title": "Uma Forja", + "about_ch10_title": "Um Caminho.", "about_ch11_title": "Invoque o Porco", + "about_feat_async": "Rastreamento Assincrono de Dominios", "about_feat_vault": "Cofre Enderecado por Conteudo", + "about_feat_fts": "Pesquisa de Texto Completo", "about_feat_screenshots": "Capturas de Tela de Paginas", + "about_feat_hydra": "Modo Hidra", "about_feat_provenance": "Procedencia da Midia", + "about_feat_markdown": "Conversao para Markdown", "about_feat_selfextract": "Arquivos Auto-extraiveis", + "about_feat_code": "Suporte a Arquivos de Codigo", "about_feat_vcs": "Clonagem de Repositorios VCS", + "about_feat_live": "Feed ao Vivo", "about_feat_serp": "Interface Web SERP", + "about_footer_p1": "neopig e codigo aberto, doado ao dominio publico.", + "about_footer_p2": "Neopig vive em:", "about_footer_p3": "Em memoria de todos os repositorios que a Atlassian matou.", + "about_footer_p5": "Desculpe pela conveniencia.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "ru": { + "search": "Поиск", "crawl": "Сканировать", "live": "Прямой эфир", "about": "О нас", + "random": "Случайное", "phantom": "Призрак", "loading": "Загрузка...", + "start_crawl": "Начать сканирование", "pause": "Пауза", "resume": "Продолжить", "delete": "Удалить", + "url": "URL", "mode": "Режим", "depth": "Глубина", "keywords": "Ключевые слова", + "screenshots": "Скриншоты", "fast_mode": "Быстрый режим", "fresh_start": "Начать заново", + "pages": "страниц", "found": "найдено", "saved": "сохранено", "dupes": "дубликаты", + "running": "выполняется", "completed": "завершено", "paused": "приостановлено", + "no_jobs": "Нет задач", "started": "Начало", "filter": "Фильтр", + "all_types": "Все типы", "images": "Изображения", "videos": "Видео", "audio": "Аудио", + "everything": "Всё (текст + медиа)", "all_media": "Все медиа", + "images_only": "Только изображения", "videos_only": "Только видео", "text_only": "Только текст", + "recent_jobs": "Недавние задачи", "search_placeholder": "Поиск медиа...", + "media": "Медиа", "pages_label": "Страницы", "download": "Скачать", + "no_media": "Медиа не найдено", "no_more": "Больше нет результатов", "load_error": "Ошибка загрузки", + "copy": "Копировать", "copied": "Скопировано!", "starting": "Запуск...", "started_ok": "Запущено!", + "error": "Ошибка", "watching": "Отслеживание новых изображений...", "content": "Контент", + "previous": "Назад", "next": "Далее", "over_9000": "Более 9000+!", + "loading_stats": "Загрузка статистики...", "screenshot": "Скриншот", + "valid_uri": "Введите хотя бы один URL", "load_jobs_error": "Не удалось загрузить задачи", + "hydrate_subtitle": "Получить медиа из интернета", "live_subtitle": "Смотрите появление изображений", + "total_images": "Всего изображений", "new_session": "Новые в сессии", "per_minute": "В минуту", + "all_domains": "Все домены", "download_phantom": "Скачать призрачный сайт", + "phantom_subtitle": "Экспорт архивных страниц как статический сайт с локальными медиа", "max_pages": "Макс. страниц", "select_domain": "Выбрать домен", "sources": "источников", + "source_uri": "URI источника", "neopig_uri": "URI Neopig", "source_page": "Страница источника", "neopig_page": "Страница Neopig", + "type_label": "Тип", "mime_label": "MIME", "size_label": "Размер", "alt_label": "Alt", + "keywords_label": "Ключевые слова", "description_label": "Описание", "items": "элементов", "bytes": "байт", + "used_on": "Используется на", "page": "Страница", "discovered": "Обнаружено", + "console": "Консоль", "close": "Закрыть", "no_logs": "Пока нет логов", + # About page translations + "about_subtitle": "Новый Python захватчик изображений", + "about_ch1_title": "Начало", "about_ch2_title": "Великое вымирание Bitbucket", "about_ch3_title": "Алхимия", + "about_ch4_title": "Пробуждение свиньи", "about_ch5_title": "Зеркальное измерение", "about_ch6_title": "Арсенал", + "about_ch7_title": "Отмычка", "about_ch8_title": "Почему мы архивируем", "about_ch9_title": "Кузница", + "about_ch10_title": "Путь.", "about_ch11_title": "Вызвать свинью", + "about_feat_async": "Асинхронное сканирование доменов", "about_feat_vault": "Хранилище с адресацией по содержимому", + "about_feat_fts": "Полнотекстовый поиск", "about_feat_screenshots": "Скриншоты страниц", + "about_feat_hydra": "Режим Гидры", "about_feat_provenance": "Происхождение медиа", + "about_feat_markdown": "Конвертация в Markdown", "about_feat_selfextract": "Самораспаковывающиеся архивы", + "about_feat_code": "Поддержка файлов кода", "about_feat_vcs": "Клонирование VCS репозиториев", + "about_feat_live": "Живая лента", "about_feat_serp": "Веб-интерфейс SERP", + "about_footer_p1": "neopig с открытым исходным кодом, передан в общественное достояние.", + "about_footer_p2": "Neopig живет здесь:", "about_footer_p3": "В память обо всех репозиториях, которые убила Atlassian.", + "about_footer_p5": "Извините за удобство.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "ja": { + "search": "検索", "crawl": "クロール", "live": "ライブ", "about": "について", + "random": "ランダム", "phantom": "ファントム", "loading": "読み込み中...", + "start_crawl": "クロール開始", "pause": "一時停止", "resume": "再開", "delete": "削除", + "url": "URL", "mode": "モード", "depth": "深さ", "keywords": "キーワード", + "screenshots": "スクリーンショット", "fast_mode": "高速モード", "fresh_start": "新規開始", + "pages": "ページ", "found": "発見", "saved": "保存", "dupes": "重複", + "running": "実行中", "completed": "完了", "paused": "一時停止中", + "no_jobs": "ジョブがありません", "started": "開始", "filter": "フィルター", + "all_types": "すべてのタイプ", "images": "画像", "videos": "動画", "audio": "オーディオ", + "everything": "すべて(テキスト+メディア)", "all_media": "すべてのメディア", + "images_only": "画像のみ", "videos_only": "動画のみ", "text_only": "テキストのみ", + "recent_jobs": "最近のジョブ", "search_placeholder": "メディアを検索...", + "media": "メディア", "pages_label": "ページ", "download": "ダウンロード", + "no_media": "メディアが見つかりません", "no_more": "これ以上の結果はありません", "load_error": "読み込みに失敗", + "copy": "コピー", "copied": "コピーしました!", "starting": "開始中...", "started_ok": "開始しました!", + "error": "エラー", "watching": "新しい画像を監視中...", "content": "コンテンツ", + "previous": "前へ", "next": "次へ", "over_9000": "9000以上!", + "loading_stats": "統計を読み込み中...", "screenshot": "スクリーンショット", + "valid_uri": "有効なURIを入力してください", "load_jobs_error": "ジョブの読み込みに失敗", + "hydrate_subtitle": "ウェブからメディアを取得", "live_subtitle": "クロール中の画像を表示", + "total_images": "合計画像数", "new_session": "今回のセッション", "per_minute": "毎分", + "all_domains": "すべてのドメイン", "download_phantom": "ファントムサイトをダウンロード", + "phantom_subtitle": "アーカイブページをローカルメディア付きの静的サイトとしてエクスポート", "max_pages": "最大ページ数", "select_domain": "ドメインを選択", "sources": "ソース", + "source_uri": "ソースURI", "neopig_uri": "Neopig URI", "source_page": "ソースページ", "neopig_page": "Neopigページ", + "type_label": "タイプ", "mime_label": "MIME", "size_label": "サイズ", "alt_label": "Alt", + "keywords_label": "キーワード", "description_label": "説明", "items": "アイテム", "bytes": "バイト", + "used_on": "使用場所", "page": "ページ", "discovered": "発見日時", + "console": "コンソール", "close": "閉じる", "no_logs": "ログがありません", + # About page translations + "about_subtitle": "Neo Python イメージグラバー", + "about_ch1_title": "創世記", "about_ch2_title": "Bitbucketの大量絶滅", "about_ch3_title": "錬金術", + "about_ch4_title": "豚が目覚める", "about_ch5_title": "ミラーディメンション", "about_ch6_title": "武器庫", + "about_ch7_title": "スケルトンキー", "about_ch8_title": "なぜアーカイブするのか", "about_ch9_title": "鍛冶場", + "about_ch10_title": "道。", "about_ch11_title": "豚を呼び出す", + "about_feat_async": "非同期ドメインクローリング", "about_feat_vault": "コンテンツアドレス型ボールト", + "about_feat_fts": "全文検索", "about_feat_screenshots": "ページスクリーンショット", + "about_feat_hydra": "ヒュドラモード", "about_feat_provenance": "メディアの来歴", + "about_feat_markdown": "Markdown変換", "about_feat_selfextract": "自己解凍アーカイブ", + "about_feat_code": "コードファイルサポート", "about_feat_vcs": "VCSリポジトリクローニング", + "about_feat_live": "ライブフィード", "about_feat_serp": "SERPウェブインターフェース", + "about_footer_p1": "neopigはオープンソースで、パブリックドメインに寄贈されています。", + "about_footer_p2": "Neopigの場所:", "about_footer_p3": "Atlassianが消したすべてのリポジトリを偲んで。", + "about_footer_p5": "便利でごめんなさい。", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "fr": { + "search": "Rechercher", "crawl": "Explorer", "live": "En Direct", "about": "À propos", + "random": "Aléatoire", "phantom": "Fantôme", "loading": "Chargement...", + "start_crawl": "Démarrer", "pause": "Pause", "resume": "Reprendre", "delete": "Supprimer", + "url": "URL", "mode": "Mode", "depth": "Profondeur", "keywords": "Mots-clés", + "screenshots": "Captures", "fast_mode": "Mode Rapide", "fresh_start": "Nouveau Départ", + "pages": "pages", "found": "trouvées", "saved": "enregistrées", "dupes": "doublons", + "running": "en cours", "completed": "terminé", "paused": "en pause", + "no_jobs": "Aucune tâche", "started": "Démarré", "filter": "Filtrer", + "all_types": "Tous les types", "images": "Images", "videos": "Vidéos", "audio": "Audio", + "everything": "Tout (texte + médias)", "all_media": "Tous les médias", + "images_only": "Images uniquement", "videos_only": "Vidéos uniquement", "text_only": "Texte uniquement", + "recent_jobs": "Tâches Récentes", "search_placeholder": "Rechercher des médias...", + "media": "Médias", "pages_label": "Pages", "download": "Télécharger", + "no_media": "Aucun média trouvé", "no_more": "Plus de résultats", "load_error": "Échec du chargement", + "copy": "Copier", "copied": "Copié!", "starting": "Démarrage...", "started_ok": "Démarré!", + "error": "Erreur", "watching": "Surveillance des nouvelles images...", "content": "Contenu", + "previous": "Précédent", "next": "Suivant", "over_9000": "Plus de 9 000+!", + "loading_stats": "Chargement des statistiques...", "screenshot": "Capture d'écran", + "valid_uri": "Veuillez entrer au moins une URI valide", "load_jobs_error": "Échec du chargement des tâches", + "hydrate_subtitle": "Récupérer les médias du web", "live_subtitle": "Voir les images apparaître pendant l'exploration", + "total_images": "Total d'images", "new_session": "Nouvelles cette session", "per_minute": "Par minute", + "all_domains": "Tous les domaines", "download_phantom": "Télécharger le site fantôme", + "phantom_subtitle": "Exporter les pages archivées en site statique avec médias locaux", "max_pages": "Pages max", "select_domain": "Sélectionner le domaine", "sources": "sources", + "source_uri": "URI source", "neopig_uri": "URI Neopig", "source_page": "Page source", "neopig_page": "Page Neopig", + "type_label": "Type", "mime_label": "MIME", "size_label": "Taille", "alt_label": "Alt", + "keywords_label": "Mots-clés", "description_label": "Description", "items": "éléments", "bytes": "octets", + "used_on": "Utilisé sur", "page": "Page", "discovered": "Découvert", + "console": "Console", "close": "Fermer", "no_logs": "Pas encore de logs", + # About page translations + "about_subtitle": "Captureur d'Images Python Neo", + "about_ch1_title": "Genese", "about_ch2_title": "La Grande Extinction de Bitbucket", "about_ch3_title": "Une Alchimie", + "about_ch4_title": "Un Cochon s'Eveille", "about_ch5_title": "Une Dimension Miroir", "about_ch6_title": "L'Arsenal", + "about_ch7_title": "Un Passe-Partout", "about_ch8_title": "Pourquoi Nous Archivons", "about_ch9_title": "Une Forge", + "about_ch10_title": "Une Voie.", "about_ch11_title": "Invoquer le Cochon", + "about_feat_async": "Exploration Asynchrone de Domaines", "about_feat_vault": "Coffre a Adressage de Contenu", + "about_feat_fts": "Recherche Plein Texte", "about_feat_screenshots": "Captures d'Ecran de Pages", + "about_feat_hydra": "Mode Hydre", "about_feat_provenance": "Provenance des Medias", + "about_feat_markdown": "Conversion en Markdown", "about_feat_selfextract": "Archives Auto-extractibles", + "about_feat_code": "Support des Fichiers de Code", "about_feat_vcs": "Clonage de Depots VCS", + "about_feat_live": "Flux en Direct", "about_feat_serp": "Interface Web SERP", + "about_footer_p1": "neopig est open source, offert au domaine public.", + "about_footer_p2": "Neopig vit ici:", "about_footer_p3": "En memoire de tous les depots qu'Atlassian a tues.", + "about_footer_p5": "Desole pour le confort.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "de": { + "search": "Suchen", "crawl": "Crawlen", "live": "Live-Feed", "about": "Über", + "random": "Zufällig", "phantom": "Phantom", "loading": "Laden...", + "start_crawl": "Crawl starten", "pause": "Pause", "resume": "Fortsetzen", "delete": "Löschen", + "url": "URL", "mode": "Modus", "depth": "Tiefe", "keywords": "Stichwörter", + "screenshots": "Screenshots", "fast_mode": "Schnellmodus", "fresh_start": "Neustart", + "pages": "Seiten", "found": "gefunden", "saved": "gespeichert", "dupes": "Duplikate", + "running": "läuft", "completed": "abgeschlossen", "paused": "pausiert", + "no_jobs": "Keine Aufgaben", "started": "Gestartet", "filter": "Filter", + "all_types": "Alle Typen", "images": "Bilder", "videos": "Videos", "audio": "Audio", + "everything": "Alles (Text + Medien)", "all_media": "Alle Medien", + "images_only": "Nur Bilder", "videos_only": "Nur Videos", "text_only": "Nur Text", + "recent_jobs": "Letzte Aufgaben", "search_placeholder": "Medien suchen...", + "media": "Medien", "pages_label": "Seiten", "download": "Herunterladen", + "no_media": "Keine Medien gefunden", "no_more": "Keine weiteren Ergebnisse", "load_error": "Laden fehlgeschlagen", + "copy": "Kopieren", "copied": "Kopiert!", "starting": "Starten...", "started_ok": "Gestartet!", + "error": "Fehler", "watching": "Überwache neue Bilder...", "content": "Inhalt", + "previous": "Zurück", "next": "Weiter", "over_9000": "Über 9.000+!", + "loading_stats": "Lade Statistiken...", "screenshot": "Screenshot", + "valid_uri": "Mindestens eine gültige URI eingeben", "load_jobs_error": "Aufgaben konnten nicht geladen werden", + "hydrate_subtitle": "Medien aus dem Web abrufen", "live_subtitle": "Bilder beim Crawlen beobachten", + "total_images": "Bilder gesamt", "new_session": "Neu in dieser Sitzung", "per_minute": "Pro Minute", + "all_domains": "Alle Domains", "download_phantom": "Phantom-Seite herunterladen", + "phantom_subtitle": "Archivierte Seiten als statische Seite mit lokalen Medien exportieren", "max_pages": "Max. Seiten", "select_domain": "Domain auswählen", "sources": "Quellen", + "source_uri": "Quell-URI", "neopig_uri": "Neopig-URI", "source_page": "Quellseite", "neopig_page": "Neopig-Seite", + "type_label": "Typ", "mime_label": "MIME", "size_label": "Größe", "alt_label": "Alt", + "keywords_label": "Stichwörter", "description_label": "Beschreibung", "items": "Elemente", "bytes": "Bytes", + "used_on": "Verwendet auf", "page": "Seite", "discovered": "Entdeckt", + "console": "Konsole", "close": "Schließen", "no_logs": "Noch keine Logs", + # About page translations + "about_subtitle": "Neo Python Bild-Grabber", + "about_ch1_title": "Genesis", "about_ch2_title": "Das grosse Bitbucket Aussterben", "about_ch3_title": "Eine Alchemie", + "about_ch4_title": "Ein Schwein erwacht", "about_ch5_title": "Eine Spiegel Dimension", "about_ch6_title": "Das Arsenal", + "about_ch7_title": "Ein Dietrich", "about_ch8_title": "Warum wir archivieren", "about_ch9_title": "Eine Schmiede", + "about_ch10_title": "Ein Weg.", "about_ch11_title": "Rufe das Schwein", + "about_feat_async": "Asynchrones Domain-Crawling", "about_feat_vault": "Inhaltsadressierter Tresor", + "about_feat_fts": "Volltextsuche", "about_feat_screenshots": "Seiten-Screenshots", + "about_feat_hydra": "Hydra-Modus", "about_feat_provenance": "Medien-Herkunft", + "about_feat_markdown": "Markdown-Konvertierung", "about_feat_selfextract": "Selbstextrahierende Archive", + "about_feat_code": "Code-Datei-Unterstutzung", "about_feat_vcs": "VCS Repository Klonen", + "about_feat_live": "Live-Feed", "about_feat_serp": "SERP Web-Schnittstelle", + "about_footer_p1": "neopig ist Open Source, der Offentlichkeit geschenkt.", + "about_footer_p2": "Neopig lebt hier:", "about_footer_p3": "Im Gedenken an alle Repositories, die Atlassian geloscht hat.", + "about_footer_p5": "Entschuldigung fur die Bequemlichkeit.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "ko": { + "search": "검색", "crawl": "크롤", "live": "라이브", "about": "정보", + "random": "랜덤", "phantom": "팬텀", "loading": "로딩 중...", + "start_crawl": "크롤 시작", "pause": "일시정지", "resume": "재개", "delete": "삭제", + "url": "URL", "mode": "모드", "depth": "깊이", "keywords": "키워드", + "screenshots": "스크린샷", "fast_mode": "빠른 모드", "fresh_start": "새로 시작", + "pages": "페이지", "found": "발견", "saved": "저장", "dupes": "중복", + "running": "실행 중", "completed": "완료", "paused": "일시정지됨", + "no_jobs": "작업 없음", "started": "시작됨", "filter": "필터", + "all_types": "모든 유형", "images": "이미지", "videos": "동영상", "audio": "오디오", + "everything": "모두", "all_media": "모든 미디어", + "images_only": "이미지만", "videos_only": "동영상만", "text_only": "텍스트만", + "recent_jobs": "최근 작업", "search_placeholder": "미디어 검색...", + "media": "미디어", "pages_label": "페이지", "download": "다운로드", + "no_media": "미디어를 찾을 수 없음", "no_more": "더 이상 결과 없음", "load_error": "로드 실패", + "copy": "복사", "copied": "복사됨!", "starting": "시작 중...", "started_ok": "시작됨!", + "error": "오류", "watching": "새 이미지 감시 중...", "content": "콘텐츠", + "previous": "이전", "next": "다음", "over_9000": "9,000 이상!", + "loading_stats": "통계 로드 중...", "screenshot": "스크린샷", + "valid_uri": "유효한 URI를 하나 이상 입력하세요", "load_jobs_error": "작업 로드 실패", + "hydrate_subtitle": "웹에서 미디어 가져오기", "live_subtitle": "크롤링되는 이미지 보기", + "total_images": "전체 이미지", "new_session": "이번 세션 신규", "per_minute": "분당", + "all_domains": "모든 도메인", "download_phantom": "팬텀 사이트 다운로드", + "phantom_subtitle": "보관된 페이지를 로컬 미디어가 포함된 정적 사이트로 내보내기", "max_pages": "최대 페이지", "select_domain": "도메인 선택", "sources": "소스", + "source_uri": "소스 URI", "neopig_uri": "Neopig URI", "source_page": "소스 페이지", "neopig_page": "Neopig 페이지", + "type_label": "유형", "mime_label": "MIME", "size_label": "크기", "alt_label": "Alt", + "keywords_label": "키워드", "description_label": "설명", "items": "항목", "bytes": "바이트", + "used_on": "사용처", "page": "페이지", "discovered": "발견됨", + "console": "콘솔", "close": "닫기", "no_logs": "아직 로그 없음", + # About page translations + "about_subtitle": "Neo Python 이미지 그래버", + "about_ch1_title": "창세기", "about_ch2_title": "Bitbucket 대멸종", "about_ch3_title": "연금술", + "about_ch4_title": "돼지가 깨어나다", "about_ch5_title": "거울 차원", "about_ch6_title": "무기고", + "about_ch7_title": "만능열쇠", "about_ch8_title": "왜 아카이브하는가", "about_ch9_title": "대장간", + "about_ch10_title": "길.", "about_ch11_title": "돼지를 불러라", + "about_feat_async": "비동기 도메인 크롤링", "about_feat_vault": "콘텐츠 주소 지정 볼트", + "about_feat_fts": "전체 텍스트 검색", "about_feat_screenshots": "페이지 스크린샷", + "about_feat_hydra": "히드라 모드", "about_feat_provenance": "미디어 출처", + "about_feat_markdown": "마크다운 변환", "about_feat_selfextract": "자체 압축 해제 아카이브", + "about_feat_code": "코드 파일 지원", "about_feat_vcs": "VCS 저장소 복제", + "about_feat_live": "라이브 피드", "about_feat_serp": "SERP 웹 인터페이스", + "about_footer_p1": "neopig는 오픈 소스이며 퍼블릭 도메인에 기증되었습니다.", + "about_footer_p2": "Neopig 위치:", "about_footer_p3": "Atlassian이 삭제한 모든 저장소를 기억하며.", + "about_footer_p5": "편리해서 죄송합니다.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "it": { + "search": "Cerca", "crawl": "Scansiona", "live": "In Diretta", "about": "Info", + "random": "Casuale", "phantom": "Fantasma", "loading": "Caricamento...", + "start_crawl": "Avvia Scansione", "pause": "Pausa", "resume": "Riprendi", "delete": "Elimina", + "url": "URL", "mode": "Modalità", "depth": "Profondità", "keywords": "Parole chiave", + "screenshots": "Screenshot", "fast_mode": "Modalità Veloce", "fresh_start": "Nuovo Inizio", + "pages": "pagine", "found": "trovati", "saved": "salvati", "dupes": "duplicati", + "running": "in esecuzione", "completed": "completato", "paused": "in pausa", + "no_jobs": "Nessuna attività", "started": "Avviato", "filter": "Filtra", + "all_types": "Tutti i tipi", "images": "Immagini", "videos": "Video", "audio": "Audio", + "everything": "Tutto", "all_media": "Tutti i media", + "images_only": "Solo immagini", "videos_only": "Solo video", "text_only": "Solo testo", + "recent_jobs": "Attività Recenti", "search_placeholder": "Cerca media...", + "media": "Media", "pages_label": "Pagine", "download": "Scarica", + "no_media": "Nessun media trovato", "no_more": "Nessun altro risultato", "load_error": "Caricamento fallito", + "copy": "Copia", "copied": "Copiato!", "starting": "Avvio...", "started_ok": "Avviato!", + "error": "Errore", "watching": "Monitoraggio nuove immagini...", "content": "Contenuto", + "previous": "Precedente", "next": "Successivo", "over_9000": "Oltre 9.000+!", + "loading_stats": "Caricamento statistiche...", "screenshot": "Screenshot", + "valid_uri": "Inserire almeno un URI valido", "load_jobs_error": "Caricamento attività fallito", + "hydrate_subtitle": "Ottieni media dal web", "live_subtitle": "Guarda le immagini mentre vengono scansionate", + "total_images": "Immagini totali", "new_session": "Nuove in questa sessione", "per_minute": "Al minuto", + "all_domains": "Tutti i domini", "download_phantom": "Scarica sito fantasma", + "phantom_subtitle": "Esporta pagine archiviate come sito statico con media locali", "max_pages": "Max pagine", "select_domain": "Seleziona dominio", "sources": "fonti", + "source_uri": "URI sorgente", "neopig_uri": "URI Neopig", "source_page": "Pagina sorgente", "neopig_page": "Pagina Neopig", + "type_label": "Tipo", "mime_label": "MIME", "size_label": "Dimensione", "alt_label": "Alt", + "keywords_label": "Parole chiave", "description_label": "Descrizione", "items": "elementi", "bytes": "byte", + "used_on": "Usato su", "page": "Pagina", "discovered": "Scoperto", + "console": "Console", "close": "Chiudi", "no_logs": "Nessun log ancora", + # About page translations + "about_subtitle": "Cattura Immagini Python Neo", + "about_ch1_title": "Genesi", + "about_ch2_title": "La Grande Estinzione di Bitbucket", + "about_ch3_title": "Un'Alchimia", + "about_ch4_title": "Un Maiale si Risveglia", + "about_ch5_title": "Una Dimensione Specchio", + "about_ch6_title": "L'Arsenale", + "about_ch7_title": "Una Chiave Scheletro", + "about_ch8_title": "Perche Archiviamo", + "about_ch9_title": "Una Fucina", + "about_ch10_title": "Una Via.", + "about_ch11_title": "Invoca il Maiale", + "about_feat_async": "Scansione Asincrona dei Domini", + "about_feat_vault": "Archivio Indirizzato per Contenuto", + "about_feat_fts": "Ricerca Full-Text", + "about_feat_screenshots": "Screenshot delle Pagine", + "about_feat_hydra": "Modalita Idra", + "about_feat_provenance": "Provenienza dei Media", + "about_feat_markdown": "Conversione Markdown", + "about_feat_selfextract": "Archivi Auto-estraenti", + "about_feat_code": "Supporto File Codice", + "about_feat_vcs": "Clonazione Repository VCS", + "about_feat_live": "Feed Live", + "about_feat_serp": "Interfaccia Web SERP", + "about_footer_p1": "neopig e open source, donato al pubblico dominio.", + "about_footer_p2": "Neopig vive qui:", + "about_footer_p3": "In memoria di tutti i repository che Atlassian ha eliminato.", + "about_footer_p5": "Scusa per la comodita.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "nl": { + "search": "Zoeken", "crawl": "Crawlen", "live": "Live", "about": "Over", + "random": "Willekeurig", "phantom": "Fantoom", "loading": "Laden...", + "start_crawl": "Start Crawl", "pause": "Pauzeer", "resume": "Hervat", "delete": "Verwijder", + "url": "URL", "mode": "Modus", "depth": "Diepte", "keywords": "Trefwoorden", + "screenshots": "Schermafbeeldingen", "fast_mode": "Snelle Modus", "fresh_start": "Nieuwe Start", + "pages": "pagina's", "found": "gevonden", "saved": "opgeslagen", "dupes": "duplicaten", + "running": "actief", "completed": "voltooid", "paused": "gepauzeerd", + "no_jobs": "Geen taken", "started": "Gestart", "filter": "Filter", + "all_types": "Alle typen", "images": "Afbeeldingen", "videos": "Video's", "audio": "Audio", + "everything": "Alles", "all_media": "Alle media", + "images_only": "Alleen afbeeldingen", "videos_only": "Alleen video's", "text_only": "Alleen tekst", + "recent_jobs": "Recente Taken", "search_placeholder": "Zoek media...", + "media": "Media", "pages_label": "Pagina's", "download": "Downloaden", + "no_media": "Geen media gevonden", "no_more": "Geen resultaten meer", "load_error": "Laden mislukt", + "copy": "Kopiëren", "copied": "Gekopieerd!", "starting": "Starten...", "started_ok": "Gestart!", + "error": "Fout", "watching": "Nieuwe afbeeldingen bekijken...", "content": "Inhoud", + "previous": "Vorige", "next": "Volgende", "over_9000": "Meer dan 9.000+!", + "loading_stats": "Statistieken laden...", "screenshot": "Schermafbeelding", + "valid_uri": "Voer minimaal één geldige URI in", "load_jobs_error": "Taken laden mislukt", + "hydrate_subtitle": "Media van het web ophalen", "live_subtitle": "Bekijk afbeeldingen terwijl ze worden gecrawld", + "total_images": "Totaal afbeeldingen", "new_session": "Nieuw deze sessie", "per_minute": "Per minuut", + "all_domains": "Alle domeinen", "download_phantom": "Fantoomsite downloaden", + "phantom_subtitle": "Gearchiveerde pagina's exporteren als statische site met lokale media", "max_pages": "Max. pagina's", "select_domain": "Selecteer domein", "sources": "bronnen", + "source_uri": "Bron-URI", "neopig_uri": "Neopig-URI", "source_page": "Bronpagina", "neopig_page": "Neopig-pagina", + "type_label": "Type", "mime_label": "MIME", "size_label": "Grootte", "alt_label": "Alt", + "keywords_label": "Trefwoorden", "description_label": "Beschrijving", "items": "items", "bytes": "bytes", + "used_on": "Gebruikt op", "page": "Pagina", "discovered": "Ontdekt", + "console": "Console", "close": "Sluiten", "no_logs": "Nog geen logs", + # About page translations + "about_subtitle": "Neo Python Afbeelding Grabber", + "about_ch1_title": "Genesis", + "about_ch2_title": "De Grote Bitbucket Extinctie", + "about_ch3_title": "Een Alchemie", + "about_ch4_title": "Een Varken Ontwaakt", + "about_ch5_title": "Een Spiegel Dimensie", + "about_ch6_title": "Het Arsenaal", + "about_ch7_title": "Een Loper", + "about_ch8_title": "Waarom We Archiveren", + "about_ch9_title": "Een Smederij", + "about_ch10_title": "Een Weg.", + "about_ch11_title": "Roep het Varken", + "about_feat_async": "Asynchrone Domein Crawling", + "about_feat_vault": "Inhoud-geadresseerde Kluis", + "about_feat_fts": "Volledige Tekst Zoeken", + "about_feat_screenshots": "Pagina Screenshots", + "about_feat_hydra": "Hydra Modus", + "about_feat_provenance": "Media Herkomst", + "about_feat_markdown": "Markdown Conversie", + "about_feat_selfextract": "Zelf-uitpakkende Archieven", + "about_feat_code": "Code Bestand Ondersteuning", + "about_feat_vcs": "VCS Repository Klonen", + "about_feat_live": "Live Feed", + "about_feat_serp": "SERP Web Interface", + "about_footer_p1": "neopig is open source, geschonken aan het publieke domein.", + "about_footer_p2": "Neopig woont hier:", + "about_footer_p3": "Ter nagedachtenis aan alle repositories die Atlassian heeft verwijderd.", + "about_footer_p5": "Sorry voor het gemak.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "pl": { + "search": "Szukaj", "crawl": "Indeksuj", "live": "Na żywo", "about": "O nas", + "random": "Losowo", "phantom": "Fantom", "loading": "Ładowanie...", + "start_crawl": "Rozpocznij", "pause": "Pauza", "resume": "Wznów", "delete": "Usuń", + "url": "URL", "mode": "Tryb", "depth": "Głębokość", "keywords": "Słowa kluczowe", + "screenshots": "Zrzuty ekranu", "fast_mode": "Tryb szybki", "fresh_start": "Nowy start", + "pages": "stron", "found": "znaleziono", "saved": "zapisano", "dupes": "duplikaty", + "running": "w toku", "completed": "zakończono", "paused": "wstrzymano", + "no_jobs": "Brak zadań", "started": "Rozpoczęto", "filter": "Filtruj", + "all_types": "Wszystkie typy", "images": "Obrazy", "videos": "Filmy", "audio": "Audio", + "everything": "Wszystko", "all_media": "Wszystkie media", + "images_only": "Tylko obrazy", "videos_only": "Tylko filmy", "text_only": "Tylko tekst", + "recent_jobs": "Ostatnie Zadania", "search_placeholder": "Szukaj mediów...", + "media": "Media", "pages_label": "Strony", "download": "Pobierz", + "no_media": "Nie znaleziono mediów", "no_more": "Brak więcej wyników", "load_error": "Błąd ładowania", + "copy": "Kopiuj", "copied": "Skopiowano!", "starting": "Uruchamianie...", "started_ok": "Uruchomiono!", + "error": "Błąd", "watching": "Obserwowanie nowych obrazów...", "content": "Treść", + "previous": "Poprzedni", "next": "Następny", "over_9000": "Ponad 9 000+!", + "loading_stats": "Ładowanie statystyk...", "screenshot": "Zrzut ekranu", + "valid_uri": "Wprowadź przynajmniej jeden URI", "load_jobs_error": "Nie udało się załadować zadań", + "hydrate_subtitle": "Pobierz media z sieci", "live_subtitle": "Oglądaj obrazy podczas indeksowania", + "total_images": "Łącznie obrazów", "new_session": "Nowe w tej sesji", "per_minute": "Na minutę", + "all_domains": "Wszystkie domeny", "download_phantom": "Pobierz stronę fantomową", + "phantom_subtitle": "Eksportuj zarchiwizowane strony jako statyczną witrynę z lokalnymi mediami", "max_pages": "Maks. stron", "select_domain": "Wybierz domenę", "sources": "źródeł", + "source_uri": "URI źródła", "neopig_uri": "URI Neopig", "source_page": "Strona źródłowa", "neopig_page": "Strona Neopig", + "type_label": "Typ", "mime_label": "MIME", "size_label": "Rozmiar", "alt_label": "Alt", + "keywords_label": "Słowa kluczowe", "description_label": "Opis", "items": "elementy", "bytes": "bajty", + "used_on": "Używane na", "page": "Strona", "discovered": "Odkryto", + "console": "Konsola", "close": "Zamknij", "no_logs": "Brak logów", + # About page translations + "about_subtitle": "Neo Python Pobieracz Obrazow", + "about_ch1_title": "Geneza", + "about_ch2_title": "Wielkie Wymieranie Bitbucket", + "about_ch3_title": "Alchemia", + "about_ch4_title": "Swinia sie Budzi", + "about_ch5_title": "Wymiar Lustrzany", + "about_ch6_title": "Arsenal", + "about_ch7_title": "Klucz Uniwersalny", + "about_ch8_title": "Dlaczego Archiwizujemy", + "about_ch9_title": "Kuznia", + "about_ch10_title": "Droga.", + "about_ch11_title": "Przywolaj Swinie", + "about_feat_async": "Asynchroniczne Indeksowanie Domen", + "about_feat_vault": "Sejf Adresowalny Zawartoscia", + "about_feat_fts": "Wyszukiwanie Pelnotekstowe", + "about_feat_screenshots": "Zrzuty Ekranu Stron", + "about_feat_hydra": "Tryb Hydra", + "about_feat_provenance": "Pochodzenie Mediow", + "about_feat_markdown": "Konwersja Markdown", + "about_feat_selfextract": "Samorozpakowujace sie Archiwa", + "about_feat_code": "Obsluga Plikow Kodu", + "about_feat_vcs": "Klonowanie Repozytoriow VCS", + "about_feat_live": "Na Zywo", + "about_feat_serp": "Interfejs SERP", + "about_footer_p1": "neopig jest open source, oddany do domeny publicznej.", + "about_footer_p2": "Neopig zyje:", + "about_footer_p3": "Pamieci wszystkich repozytoriow zabitych przez Atlassian.", + "about_footer_p5": "Przepraszam za wygode.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "tr": { + "search": "Ara", "crawl": "Tara", "live": "Canlı", "about": "Hakkında", + "random": "Rastgele", "phantom": "Hayalet", "loading": "Yükleniyor...", + "start_crawl": "Taramayı Başlat", "pause": "Duraklat", "resume": "Devam", "delete": "Sil", + "url": "URL", "mode": "Mod", "depth": "Derinlik", "keywords": "Anahtar kelimeler", + "screenshots": "Ekran görüntüleri", "fast_mode": "Hızlı Mod", "fresh_start": "Yeni Başlangıç", + "pages": "sayfa", "found": "bulundu", "saved": "kaydedildi", "dupes": "kopya", + "running": "çalışıyor", "completed": "tamamlandı", "paused": "duraklatıldı", + "no_jobs": "Görev yok", "started": "Başladı", "filter": "Filtrele", + "all_types": "Tüm türler", "images": "Resimler", "videos": "Videolar", "audio": "Ses", + "everything": "Her şey", "all_media": "Tüm medya", + "images_only": "Sadece resimler", "videos_only": "Sadece videolar", "text_only": "Sadece metin", + "recent_jobs": "Son Görevler", "search_placeholder": "Medya ara...", + "media": "Medya", "pages_label": "Sayfalar", "download": "İndir", + "no_media": "Medya bulunamadı", "no_more": "Daha fazla sonuç yok", "load_error": "Yükleme başarısız", + "copy": "Kopyala", "copied": "Kopyalandı!", "starting": "Başlatılıyor...", "started_ok": "Başlatıldı!", + "error": "Hata", "watching": "Yeni resimler izleniyor...", "content": "İçerik", + "previous": "Önceki", "next": "Sonraki", "over_9000": "9.000'den fazla+!", + "loading_stats": "İstatistikler yükleniyor...", "screenshot": "Ekran görüntüsü", + "valid_uri": "Lütfen en az bir geçerli URI girin", "load_jobs_error": "Görevler yüklenemedi", + "hydrate_subtitle": "Web'den medya al", "live_subtitle": "Taranan resimleri izle", + "total_images": "Toplam resim", "new_session": "Bu oturumda yeni", "per_minute": "Dakikada", + "all_domains": "Tüm alanlar", "download_phantom": "Hayalet siteyi indir", + "phantom_subtitle": "Arşivlenmiş sayfaları yerel medya ile statik site olarak dışa aktar", "max_pages": "Maks. sayfa", "select_domain": "Alan adı seç", "sources": "kaynaklar", + "source_uri": "Kaynak URI", "neopig_uri": "Neopig URI", "source_page": "Kaynak Sayfa", "neopig_page": "Neopig Sayfası", + "type_label": "Tür", "mime_label": "MIME", "size_label": "Boyut", "alt_label": "Alt", + "keywords_label": "Anahtar kelimeler", "description_label": "Açıklama", "items": "öğe", "bytes": "bayt", + "used_on": "Kullanıldığı yer", "page": "Sayfa", "discovered": "Keşfedildi", + "console": "Konsol", "close": "Kapat", "no_logs": "Henüz log yok", + # About page translations + "about_subtitle": "Neo Python Goruntu Yakalayici", + "about_ch1_title": "Baslangic", + "about_ch2_title": "Buyuk Bitbucket Yok Olusu", + "about_ch3_title": "Simya", + "about_ch4_title": "Bir Domuz Uyaniyor", + "about_ch5_title": "Ayna Boyutu", + "about_ch6_title": "Cephanelik", + "about_ch7_title": "Maymuncuk", + "about_ch8_title": "Neden Arsivliyoruz", + "about_ch9_title": "Demirci Ocagi", + "about_ch10_title": "Bir Yol.", + "about_ch11_title": "Domuzu Cagir", + "about_feat_async": "Asenkron Alan Adi Taramasi", + "about_feat_vault": "Icerik Adresli Kasa", + "about_feat_fts": "Tam Metin Arama", + "about_feat_screenshots": "Sayfa Ekran Goruntuleri", + "about_feat_hydra": "Hydra Modu", + "about_feat_provenance": "Medya Kokeni", + "about_feat_markdown": "Markdown Donusumu", + "about_feat_selfextract": "Kendini Acan Arsivler", + "about_feat_code": "Kod Dosyasi Destegi", + "about_feat_vcs": "VCS Depo Klonlama", + "about_feat_live": "Canli Akis", + "about_feat_serp": "SERP Web Arayuzu", + "about_footer_p1": "neopig acik kaynaklidir, kamu alanina bagislanmistir.", + "about_footer_p2": "Neopig burada:", + "about_footer_p3": "Atlassian'in oldurdugu tum depolar anisina.", + "about_footer_p5": "Kolaylik icin ozur dilerim.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "vi": { + "search": "Tìm kiếm", "crawl": "Thu thập", "live": "Trực tiếp", "about": "Giới thiệu", + "random": "Ngẫu nhiên", "phantom": "Bóng ma", "loading": "Đang tải...", + "start_crawl": "Bắt đầu", "pause": "Tạm dừng", "resume": "Tiếp tục", "delete": "Xóa", + "url": "URL", "mode": "Chế độ", "depth": "Độ sâu", "keywords": "Từ khóa", + "screenshots": "Ảnh chụp", "fast_mode": "Chế độ nhanh", "fresh_start": "Bắt đầu mới", + "pages": "trang", "found": "tìm thấy", "saved": "đã lưu", "dupes": "trùng lặp", + "running": "đang chạy", "completed": "hoàn thành", "paused": "tạm dừng", + "no_jobs": "Không có tác vụ", "started": "Đã bắt đầu", "filter": "Lọc", + "all_types": "Tất cả loại", "images": "Hình ảnh", "videos": "Video", "audio": "Âm thanh", + "everything": "Tất cả", "all_media": "Tất cả media", + "images_only": "Chỉ hình ảnh", "videos_only": "Chỉ video", "text_only": "Chỉ văn bản", + "recent_jobs": "Tác vụ gần đây", "search_placeholder": "Tìm media...", + "media": "Media", "pages_label": "Trang", "download": "Tải xuống", + "no_media": "Không tìm thấy media", "no_more": "Không còn kết quả", "load_error": "Tải thất bại", + "copy": "Sao chép", "copied": "Đã sao chép!", "starting": "Đang khởi động...", "started_ok": "Đã khởi động!", + "error": "Lỗi", "watching": "Đang theo dõi hình ảnh mới...", "content": "Nội dung", + "previous": "Trước", "next": "Tiếp", "over_9000": "Hơn 9.000+!", + "loading_stats": "Đang tải thống kê...", "screenshot": "Ảnh chụp màn hình", + "valid_uri": "Vui lòng nhập ít nhất một URI hợp lệ", "load_jobs_error": "Không thể tải tác vụ", + "hydrate_subtitle": "Lấy media từ web", "live_subtitle": "Xem hình ảnh khi đang thu thập", + "total_images": "Tổng hình ảnh", "new_session": "Mới trong phiên này", "per_minute": "Mỗi phút", + "all_domains": "Tất cả tên miền", "download_phantom": "Tải trang bóng ma", + "phantom_subtitle": "Xuất trang lưu trữ dưới dạng trang tĩnh với media cục bộ", "max_pages": "Tối đa trang", "select_domain": "Chọn tên miền", "sources": "nguồn", + "source_uri": "URI nguồn", "neopig_uri": "URI Neopig", "source_page": "Trang nguồn", "neopig_page": "Trang Neopig", + "type_label": "Loại", "mime_label": "MIME", "size_label": "Kích thước", "alt_label": "Alt", + "keywords_label": "Từ khóa", "description_label": "Mô tả", "items": "mục", "bytes": "byte", + "used_on": "Sử dụng tại", "page": "Trang", "discovered": "Phát hiện", + "console": "Bảng điều khiển", "close": "Đóng", "no_logs": "Chưa có nhật ký", + # About page translations + "about_subtitle": "Trinh Thu Thap Hinh Anh Python Neo", + "about_ch1_title": "Khoi nguyen", + "about_ch2_title": "Su Tuyet Chung Bitbucket", + "about_ch3_title": "Gia kim thuat", + "about_ch4_title": "Lon Thuc Tinh", + "about_ch5_title": "Chieu khong gian guong", + "about_ch6_title": "Kho vu khi", + "about_ch7_title": "Chia khoa vạn nang", + "about_ch8_title": "Tai sao chung toi luu tru", + "about_ch9_title": "Lo ren", + "about_ch10_title": "Con duong.", + "about_ch11_title": "Goi Lon", + "about_feat_async": "Thu thap ten mien khong dong bo", + "about_feat_vault": "Kho luu tru theo noi dung", + "about_feat_fts": "Tim kiem toan van", + "about_feat_screenshots": "Anh chup trang", + "about_feat_hydra": "Che do Hydra", + "about_feat_provenance": "Nguon goc phuong tien", + "about_feat_markdown": "Chuyen doi Markdown", + "about_feat_selfextract": "Luu tru tu giai nen", + "about_feat_code": "Ho tro tap tin ma", + "about_feat_vcs": "Nhan ban kho VCS", + "about_feat_live": "Nguon cap truc tiep", + "about_feat_serp": "Giao dien web SERP", + "about_footer_p1": "neopig la ma nguon mo, tang cho pham vi cong cong.", + "about_footer_p2": "Neopig o day:", + "about_footer_p3": "Tuong nho tat ca kho luu tru Atlassian da xoa.", + "about_footer_p5": "Xin loi vi su tien loi.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "th": { + "search": "ค้นหา", "crawl": "รวบรวม", "live": "สด", "about": "เกี่ยวกับ", + "random": "สุ่ม", "phantom": "แฟนทอม", "loading": "กำลังโหลด...", + "start_crawl": "เริ่มรวบรวม", "pause": "หยุดชั่วคราว", "resume": "ดำเนินต่อ", "delete": "ลบ", + "url": "URL", "mode": "โหมด", "depth": "ความลึก", "keywords": "คำสำคัญ", + "screenshots": "ภาพหน้าจอ", "fast_mode": "โหมดเร็ว", "fresh_start": "เริ่มใหม่", + "pages": "หน้า", "found": "พบ", "saved": "บันทึก", "dupes": "ซ้ำ", + "running": "กำลังทำงาน", "completed": "เสร็จสิ้น", "paused": "หยุดชั่วคราว", + "no_jobs": "ไม่มีงาน", "started": "เริ่มแล้ว", "filter": "กรอง", + "all_types": "ทุกประเภท", "images": "รูปภาพ", "videos": "วิดีโอ", "audio": "เสียง", + "everything": "ทั้งหมด", "all_media": "สื่อทั้งหมด", + "images_only": "เฉพาะรูปภาพ", "videos_only": "เฉพาะวิดีโอ", "text_only": "เฉพาะข้อความ", + "recent_jobs": "งานล่าสุด", "search_placeholder": "ค้นหาสื่อ...", + "media": "สื่อ", "pages_label": "หน้า", "download": "ดาวน์โหลด", + "no_media": "ไม่พบสื่อ", "no_more": "ไม่มีผลลัพธ์เพิ่มเติม", "load_error": "โหลดไม่สำเร็จ", + "copy": "คัดลอก", "copied": "คัดลอกแล้ว!", "starting": "กำลังเริ่ม...", "started_ok": "เริ่มแล้ว!", + "error": "ข้อผิดพลาด", "watching": "กำลังดูรูปภาพใหม่...", "content": "เนื้อหา", + "previous": "ก่อนหน้า", "next": "ถัดไป", "over_9000": "มากกว่า 9,000+!", + "loading_stats": "กำลังโหลดสถิติ...", "screenshot": "ภาพหน้าจอ", + "valid_uri": "กรุณาใส่ URI ที่ถูกต้องอย่างน้อยหนึ่งรายการ", "load_jobs_error": "ไม่สามารถโหลดงานได้", + "hydrate_subtitle": "ดึงสื่อจากเว็บ", "live_subtitle": "ดูรูปภาพขณะรวบรวม", + "total_images": "รูปภาพทั้งหมด", "new_session": "ใหม่ในเซสชันนี้", "per_minute": "ต่อนาที", + "all_domains": "โดเมนทั้งหมด", "download_phantom": "ดาวน์โหลดเว็บแฟนทอม", + "phantom_subtitle": "ส่งออกหน้าที่เก็บถาวรเป็นเว็บไซต์แบบคงที่พร้อมสื่อในเครื่อง", "max_pages": "หน้าสูงสุด", "select_domain": "เลือกโดเมน", "sources": "แหล่งที่มา", + "source_uri": "URI แหล่งที่มา", "neopig_uri": "URI Neopig", "source_page": "หน้าแหล่งที่มา", "neopig_page": "หน้า Neopig", + "type_label": "ประเภท", "mime_label": "MIME", "size_label": "ขนาด", "alt_label": "Alt", + "keywords_label": "คำสำคัญ", "description_label": "คำอธิบาย", "items": "รายการ", "bytes": "ไบต์", + "used_on": "ใช้บน", "page": "หน้า", "discovered": "ค้นพบ", + "console": "คอนโซล", "close": "ปิด", "no_logs": "ยังไม่มีบันทึก", + "import_nav": "นำเข้า", "hydra": "Hydra", "crawl_disabled": "การรวบรวมถูกปิดใช้งานบนเซิร์ฟเวอร์นี้ (โหมดเก็บถาวรอ่านอย่างเดียว)", + "replay_already_running": "การเล่นซ้ำงานกำลังทำงานอยู่แล้ว", "replaying": "กำลังเล่นซ้ำ...", "replay": "เล่นซ้ำ", + "confirm_recrawl": "เริ่มงานรวบรวมใหม่สำหรับแหล่งที่นำเข้า?", "recrawl_async_note": "สิ่งนี้จะรวบรวมแต่ละแหล่งแบบอะซิงโครนัสในพื้นหลัง", + "recrawl_sources": "รวบรวมแหล่งใหม่", "started_jobs": "เริ่มงานรวบรวมแล้ว!", + "replay_job": "เล่นซ้ำงาน", "replay_subtitle": "เล่นซ้ำการรวบรวมตามความเร็วการค้นพบเดิม", "replay_complete": "เล่นซ้ำเสร็จสิ้น", + "what_is_phantom": "ไซต์แฟนทอมคืออะไร?", "phantom_feature_1": "HTML ดั้งเดิมถูกรักษาไว้ตามที่รวบรวมมา", + "phantom_feature_2": "URL สื่อทั้งหมดถูกเขียนใหม่เป็นพาธท้องถิ่น", "phantom_feature_3": "พร้อมโฮสต์แบบสแตติก (nginx, Caddy, S3 ฯลฯ)", + "phantom_feature_4": "ทำงานออฟไลน์ - รวมสินทรัพย์ทั้งหมด", "phantom_feature_5": "เหมาะสำหรับการเก็บถาวรและอนุรักษ์", + "import_mode": "โหมดนำเข้า", "import_subtitle": "อัปโหลดไฟล์เก็บถาวร neopig (.tar.gz หรือ .run) เพื่อสำรวจ", + "drop_or_browse": "วางไฟล์เก็บถาวรที่นี่หรือคลิกเพื่อเรียกดู", "supported_formats": "รองรับไฟล์ .tar.gz, .tgz และ .run", + "uploading": "กำลังอัปโหลด...", "current_archive": "ไฟล์เก็บถาวรปัจจุบัน", + "media_in_db": "สื่อในฐานข้อมูล", "pages_indexed": "หน้าที่จัดทำดัชนี", "recent_imports": "การนำเข้าล่าสุด", "view_all_jobs": "ดูงานทั้งหมด", + "initializing_upload": "กำลังเริ่มต้นการอัปโหลด", "upload_failed_retries": "อัปโหลดล้มเหลวหลังจากลองใหม่", + "connection_lost_retry": "การเชื่อมต่อหายไป กำลังลองใหม่", "archive_loaded": "โหลดไฟล์เก็บถาวรสำเร็จ! งาน", + "failed_load_status": "โหลดสถานะล้มเหลว", "hide": "ซ่อน", "show": "แสดง", + # About page translations + "about_subtitle": "Neo Python ตัวจับภาพ", + "about_ch1_title": "จุดเริ่มต้น", + "about_ch2_title": "การสูญพันธุ์ Bitbucket ครั้งใหญ่", + "about_ch3_title": "การเล่นแร่แปรธาตุ", + "about_ch4_title": "หมูตื่น", + "about_ch5_title": "มิติกระจก", + "about_ch6_title": "คลังอาวุธ", + "about_ch7_title": "กุญแจผี", + "about_ch8_title": "ทำไมเราจึงเก็บถาวร", + "about_ch9_title": "โรงตีเหล็ก", + "about_ch10_title": "หนทาง.", + "about_ch11_title": "เรียกหมู", + "about_feat_async": "การรวบรวมโดเมนแบบอะซิงโครนัส", + "about_feat_vault": "ห้องนิรภัยที่ระบุเนื้อหา", + "about_feat_fts": "ค้นหาข้อความเต็ม", + "about_feat_screenshots": "ภาพหน้าจอหน้าเว็บ", + "about_feat_hydra": "โหมด Hydra", + "about_feat_provenance": "ที่มาของสื่อ", + "about_feat_markdown": "การแปลง Markdown", + "about_feat_selfextract": "ไฟล์เก็บถาวรที่แตกตัวเอง", + "about_feat_code": "รองรับไฟล์โค้ด", + "about_feat_vcs": "โคลนคลัง VCS", + "about_feat_live": "ฟีดสด", + "about_feat_serp": "อินเทอร์เฟซเว็บ SERP", + "about_footer_p1": "neopig เป็นโอเพ่นซอร์ส มอบให้สาธารณสมบัติ", + "about_footer_p2": "Neopig อยู่ที่:", + "about_footer_p3": "เพื่อรำลึกถึง repository ทั้งหมดที่ Atlassian ลบ", + "about_footer_p5": "ขอโทษสำหรับความสะดวก", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "id": { + "search": "Cari", "crawl": "Jelajahi", "live": "Langsung", "about": "Tentang", + "random": "Acak", "phantom": "Hantu", "loading": "Memuat...", + "start_crawl": "Mulai Jelajah", "pause": "Jeda", "resume": "Lanjutkan", "delete": "Hapus", + "url": "URL", "mode": "Mode", "depth": "Kedalaman", "keywords": "Kata kunci", + "screenshots": "Tangkapan layar", "fast_mode": "Mode Cepat", "fresh_start": "Mulai Baru", + "pages": "halaman", "found": "ditemukan", "saved": "disimpan", "dupes": "duplikat", + "running": "berjalan", "completed": "selesai", "paused": "dijeda", + "no_jobs": "Tidak ada tugas", "started": "Dimulai", "filter": "Filter", + "all_types": "Semua jenis", "images": "Gambar", "videos": "Video", "audio": "Audio", + "everything": "Semua", "all_media": "Semua media", + "images_only": "Hanya gambar", "videos_only": "Hanya video", "text_only": "Hanya teks", + "recent_jobs": "Tugas Terbaru", "search_placeholder": "Cari media...", + "media": "Media", "pages_label": "Halaman", "download": "Unduh", + "no_media": "Media tidak ditemukan", "no_more": "Tidak ada hasil lagi", "load_error": "Gagal memuat", + "copy": "Salin", "copied": "Disalin!", "starting": "Memulai...", "started_ok": "Dimulai!", + "error": "Kesalahan", "watching": "Memantau gambar baru...", "content": "Konten", + "previous": "Sebelumnya", "next": "Berikutnya", "over_9000": "Lebih dari 9.000+!", + "loading_stats": "Memuat statistik...", "screenshot": "Tangkapan layar", + "valid_uri": "Masukkan setidaknya satu URI yang valid", "load_jobs_error": "Gagal memuat tugas", + "hydrate_subtitle": "Ambil media dari web", "live_subtitle": "Lihat gambar saat dijelajahi", + "total_images": "Total gambar", "new_session": "Baru sesi ini", "per_minute": "Per menit", + "all_domains": "Semua domain", "download_phantom": "Unduh situs hantu", + "phantom_subtitle": "Ekspor halaman arsip sebagai situs statis dengan media lokal", "max_pages": "Maks. halaman", "select_domain": "Pilih domain", "sources": "sumber", + "source_uri": "URI sumber", "neopig_uri": "URI Neopig", "source_page": "Halaman sumber", "neopig_page": "Halaman Neopig", + "type_label": "Jenis", "mime_label": "MIME", "size_label": "Ukuran", "alt_label": "Alt", + "keywords_label": "Kata kunci", "description_label": "Deskripsi", "items": "item", "bytes": "byte", + "used_on": "Digunakan di", "page": "Halaman", "discovered": "Ditemukan", + "console": "Konsol", "close": "Tutup", "no_logs": "Belum ada log", + "import_nav": "Impor", "hydra": "Hydra", "crawl_disabled": "Penjelajahan dinonaktifkan di server ini (mode arsip hanya-baca)", + "replay_already_running": "Pemutaran ulang pekerjaan sudah berjalan", "replaying": "Memutar ulang...", "replay": "Putar ulang", + "confirm_recrawl": "Mulai pekerjaan penjelajahan baru untuk sumber yang diimpor?", "recrawl_async_note": "Ini akan menjelajahi setiap sumber secara asinkron di latar belakang.", + "recrawl_sources": "Jelajahi ulang sumber", "started_jobs": "Pekerjaan penjelajahan dimulai!", + "replay_job": "Putar ulang pekerjaan", "replay_subtitle": "Memutar ulang penjelajahan pada kecepatan penemuan asli", "replay_complete": "Pemutaran ulang selesai", + "what_is_phantom": "Apa itu Situs Hantu?", "phantom_feature_1": "HTML asli dipertahankan persis seperti saat dijelajahi", + "phantom_feature_2": "Semua URL media ditulis ulang ke jalur lokal", "phantom_feature_3": "Siap untuk hosting statis (nginx, Caddy, S3, dll.)", + "phantom_feature_4": "Bekerja offline - semua aset termasuk", "phantom_feature_5": "Sempurna untuk pengarsipan dan pelestarian", + "import_mode": "Mode Impor", "import_subtitle": "Unggah arsip neopig (.tar.gz atau .run) untuk dijelajahi", + "drop_or_browse": "Letakkan arsip di sini atau klik untuk menjelajah", "supported_formats": "Mendukung file .tar.gz, .tgz, dan .run", + "uploading": "Mengunggah...", "current_archive": "Arsip Saat Ini", + "media_in_db": "Media dalam database", "pages_indexed": "Halaman terindeks", "recent_imports": "Impor terbaru", "view_all_jobs": "Lihat semua pekerjaan", + "initializing_upload": "Menginisialisasi unggahan", "upload_failed_retries": "Unggahan gagal setelah percobaan", + "connection_lost_retry": "Koneksi terputus, mencoba lagi", "archive_loaded": "Arsip berhasil dimuat! Pekerjaan", + "failed_load_status": "Gagal memuat status", "hide": "sembunyikan", "show": "tampilkan", + # About page translations + "about_subtitle": "Neo Python Pengambil Gambar", + "about_ch1_title": "Awal Mula", + "about_ch2_title": "Kepunahan Besar Bitbucket", + "about_ch3_title": "Alkimia", + "about_ch4_title": "Seekor Babi Terbangun", + "about_ch5_title": "Dimensi Cermin", + "about_ch6_title": "Gudang Senjata", + "about_ch7_title": "Kunci Kerangka", + "about_ch8_title": "Mengapa Kami Mengarsip", + "about_ch9_title": "Pandai Besi", + "about_ch10_title": "Sebuah Jalan.", + "about_ch11_title": "Panggil Babi", + "about_feat_async": "Perayapan Domain Asinkron", + "about_feat_vault": "Brankas Beralamat Konten", + "about_feat_fts": "Pencarian Teks Lengkap", + "about_feat_screenshots": "Tangkapan Layar Halaman", + "about_feat_hydra": "Mode Hidra", + "about_feat_provenance": "Asal Media", + "about_feat_markdown": "Konversi Markdown", + "about_feat_selfextract": "Arsip Ekstrak Mandiri", + "about_feat_code": "Dukungan File Kode", + "about_feat_vcs": "Kloning Repositori VCS", + "about_feat_live": "Umpan Langsung", + "about_feat_serp": "Antarmuka Web SERP", + "about_footer_p1": "neopig adalah sumber terbuka, dihibahkan ke domain publik.", + "about_footer_p2": "Neopig tinggal di:", + "about_footer_p3": "Mengenang semua repositori yang dihapus Atlassian.", + "about_footer_p5": "Maaf atas kemudahannya.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "uk": { + "search": "Пошук", "crawl": "Сканувати", "live": "Наживо", "about": "Про нас", + "random": "Випадково", "phantom": "Привид", "loading": "Завантаження...", + "start_crawl": "Почати сканування", "pause": "Пауза", "resume": "Продовжити", "delete": "Видалити", + "url": "URL", "mode": "Режим", "depth": "Глибина", "keywords": "Ключові слова", + "screenshots": "Знімки екрану", "fast_mode": "Швидкий режим", "fresh_start": "Новий старт", + "pages": "сторінок", "found": "знайдено", "saved": "збережено", "dupes": "дублікати", + "running": "виконується", "completed": "завершено", "paused": "призупинено", + "no_jobs": "Немає завдань", "started": "Розпочато", "filter": "Фільтр", + "all_types": "Усі типи", "images": "Зображення", "videos": "Відео", "audio": "Аудіо", + "everything": "Все", "all_media": "Усі медіа", + "images_only": "Лише зображення", "videos_only": "Лише відео", "text_only": "Лише текст", + "recent_jobs": "Останні завдання", "search_placeholder": "Пошук медіа...", + "media": "Медіа", "pages_label": "Сторінки", "download": "Завантажити", + "no_media": "Медіа не знайдено", "no_more": "Більше немає результатів", "load_error": "Помилка завантаження", + "copy": "Копіювати", "copied": "Скопійовано!", "starting": "Запуск...", "started_ok": "Запущено!", + "error": "Помилка", "watching": "Відстеження нових зображень...", "content": "Вміст", + "previous": "Попередній", "next": "Наступний", "over_9000": "Понад 9000+!", + "loading_stats": "Завантаження статистики...", "screenshot": "Знімок екрану", + "valid_uri": "Введіть хоча б один дійсний URI", "load_jobs_error": "Не вдалося завантажити завдання", + "hydrate_subtitle": "Отримати медіа з вебу", "live_subtitle": "Дивіться зображення під час сканування", + "total_images": "Всього зображень", "new_session": "Нові в сесії", "per_minute": "За хвилину", + "all_domains": "Усі домени", "download_phantom": "Завантажити привид-сайт", + "phantom_subtitle": "Експортувати архівні сторінки як статичний сайт з локальними медіа", "max_pages": "Макс. сторінок", "select_domain": "Вибрати домен", "sources": "джерел", + "source_uri": "URI джерела", "neopig_uri": "URI Neopig", "source_page": "Сторінка джерела", "neopig_page": "Сторінка Neopig", + "type_label": "Тип", "mime_label": "MIME", "size_label": "Розмір", "alt_label": "Alt", + "keywords_label": "Ключові слова", "description_label": "Опис", "items": "елементів", "bytes": "байт", + "used_on": "Використовується на", "page": "Сторінка", "discovered": "Виявлено", + "console": "Консоль", "close": "Закрити", "no_logs": "Ще немає логів", + "import_nav": "Імпорт", "hydra": "Hydra", "crawl_disabled": "Сканування вимкнено на цьому сервері (режим лише для читання)", + "replay_already_running": "Відтворення завдання вже виконується", "replaying": "Відтворення...", "replay": "Відтворити", + "confirm_recrawl": "Запустити нові завдання сканування для імпортованих джерел?", "recrawl_async_note": "Кожне джерело буде скановано асинхронно у фоновому режимі.", + "recrawl_sources": "Пересканувати джерела", "started_jobs": "Завдання сканування запущено!", + "replay_job": "Відтворити завдання", "replay_subtitle": "Відтворення сканування в оригінальному темпі виявлення", "replay_complete": "Відтворення завершено", + "what_is_phantom": "Що таке Привид-сайт?", "phantom_feature_1": "Оригінальний HTML збережено точно як при скануванні", + "phantom_feature_2": "Усі URL медіа переписані на локальні шляхи", "phantom_feature_3": "Готовий до статичного хостингу (nginx, Caddy, S3 тощо)", + "phantom_feature_4": "Працює офлайн - усі ресурси включені", "phantom_feature_5": "Ідеально для архівації та збереження", + "import_mode": "Режим імпорту", "import_subtitle": "Завантажте архів neopig (.tar.gz або .run) для перегляду", + "drop_or_browse": "Перетягніть архів сюди або натисніть для вибору", "supported_formats": "Підтримує файли .tar.gz, .tgz та .run", + "uploading": "Завантаження...", "current_archive": "Поточний архів", + "media_in_db": "Медіа в базі даних", "pages_indexed": "Проіндексовано сторінок", "recent_imports": "Останні імпорти", "view_all_jobs": "Показати всі завдання", + "initializing_upload": "Ініціалізація завантаження", "upload_failed_retries": "Завантаження не вдалося після спроб", + "connection_lost_retry": "З'єднання втрачено, повторна спроба", "archive_loaded": "Архів успішно завантажено! Завдання", + "failed_load_status": "Не вдалося завантажити статус", "hide": "сховати", "show": "показати", + # About page translations + "about_subtitle": "Neo Python захоплювач зображень", + "about_ch1_title": "Початок", + "about_ch2_title": "Велике вимирання Bitbucket", + "about_ch3_title": "Алхімія", + "about_ch4_title": "Свиня прокидається", + "about_ch5_title": "Дзеркальний вимір", + "about_ch6_title": "Арсенал", + "about_ch7_title": "Відмичка", + "about_ch8_title": "Чому ми архівуємо", + "about_ch9_title": "Кузня", + "about_ch10_title": "Шлях.", + "about_ch11_title": "Викликати свиню", + "about_feat_async": "Асинхронне сканування доменів", + "about_feat_vault": "Сховище з адресацією за вмістом", + "about_feat_fts": "Повнотекстовий пошук", + "about_feat_screenshots": "Скріншоти сторінок", + "about_feat_hydra": "Режим Гідри", + "about_feat_provenance": "Походження медіа", + "about_feat_markdown": "Конвертація в Markdown", + "about_feat_selfextract": "Архіви що саморозпаковуються", + "about_feat_code": "Підтримка файлів коду", + "about_feat_vcs": "Клонування репозиторіїв VCS", + "about_feat_live": "Живий потік", + "about_feat_serp": "Веб-інтерфейс SERP", + "about_footer_p1": "neopig має відкритий код, переданий у суспільне надбання.", + "about_footer_p2": "Neopig живе тут:", + "about_footer_p3": "На згадку про всі репозиторії, які вбила Atlassian.", + "about_footer_p5": "Вибачте за зручність.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "sv": { + "search": "Sök", "crawl": "Genomsök", "live": "Live", "about": "Om", + "random": "Slumpmässig", "phantom": "Fantom", "loading": "Laddar...", + "start_crawl": "Starta genomsökning", "pause": "Pausa", "resume": "Återuppta", "delete": "Ta bort", + "url": "URL", "mode": "Läge", "depth": "Djup", "keywords": "Nyckelord", + "screenshots": "Skärmbilder", "fast_mode": "Snabbläge", "fresh_start": "Ny start", + "pages": "sidor", "found": "hittade", "saved": "sparade", "dupes": "dubbletter", + "running": "körs", "completed": "slutförd", "paused": "pausad", + "no_jobs": "Inga jobb", "started": "Startad", "filter": "Filtrera", + "all_types": "Alla typer", "images": "Bilder", "videos": "Videor", "audio": "Ljud", + "everything": "Allt", "all_media": "Alla media", + "images_only": "Endast bilder", "videos_only": "Endast videor", "text_only": "Endast text", + "recent_jobs": "Senaste Jobb", "search_placeholder": "Sök media...", + "media": "Media", "pages_label": "Sidor", "download": "Ladda ner", + "no_media": "Ingen media hittades", "no_more": "Inga fler resultat", "load_error": "Kunde inte ladda", + "copy": "Kopiera", "copied": "Kopierat!", "starting": "Startar...", "started_ok": "Startad!", + "error": "Fel", "watching": "Bevakar nya bilder...", "content": "Innehåll", + "previous": "Föregående", "next": "Nästa", "over_9000": "Över 9 000+!", + "loading_stats": "Laddar statistik...", "screenshot": "Skärmbild", + "valid_uri": "Ange minst en giltig URI", "load_jobs_error": "Kunde inte ladda jobb", + "hydrate_subtitle": "Hämta media från webben", "live_subtitle": "Se bilder medan de genomsöks", + "total_images": "Totalt bilder", "new_session": "Nya denna session", "per_minute": "Per minut", + "all_domains": "Alla domäner", "download_phantom": "Ladda ner fantomwebbplats", + "phantom_subtitle": "Exportera arkiverade sidor som statisk webbplats med lokal media", "max_pages": "Max sidor", "select_domain": "Välj domän", "sources": "källor", + "source_uri": "Käll-URI", "neopig_uri": "Neopig URI", "source_page": "Källsida", "neopig_page": "Neopig-sida", + "type_label": "Typ", "mime_label": "MIME", "size_label": "Storlek", "alt_label": "Alt", + "keywords_label": "Nyckelord", "description_label": "Beskrivning", "items": "objekt", "bytes": "bytes", + "used_on": "Används på", "page": "Sida", "discovered": "Upptäckt", + "console": "Konsol", "close": "Stäng", "no_logs": "Inga loggar ännu", + "import_nav": "Importera", "hydra": "Hydra", "crawl_disabled": "Genomsökning är inaktiverad på denna server (skrivskyddat arkivläge)", + "replay_already_running": "Jobbuppspelning körs redan", "replaying": "Spelar upp...", "replay": "Spela upp", + "confirm_recrawl": "Starta nya genomsökningsjobb för de importerade källorna?", "recrawl_async_note": "Detta kommer att genomsöka varje källa asynkront i bakgrunden.", + "recrawl_sources": "Genomsök källor igen", "started_jobs": "Genomsökningsjobb startade!", + "replay_job": "Spela upp jobb", "replay_subtitle": "Spelar upp genomsökning i ursprunglig upptäcktstakt", "replay_complete": "Uppspelning klar", + "what_is_phantom": "Vad är en Fantomsida?", "phantom_feature_1": "Original HTML bevarad exakt som den genomsöktes", + "phantom_feature_2": "Alla medie-URL:er omskrivna till lokala sökvägar", "phantom_feature_3": "Redo för statisk hosting (nginx, Caddy, S3, etc.)", + "phantom_feature_4": "Fungerar offline - alla tillgångar inkluderade", "phantom_feature_5": "Perfekt för arkivering och bevarande", + "import_mode": "Importläge", "import_subtitle": "Ladda upp ett neopig-arkiv (.tar.gz eller .run) för att utforska", + "drop_or_browse": "Släpp arkivet här eller klicka för att bläddra", "supported_formats": "Stöder .tar.gz, .tgz och .run filer", + "uploading": "Laddar upp...", "current_archive": "Aktuellt arkiv", + "media_in_db": "Media i databasen", "pages_indexed": "Indexerade sidor", "recent_imports": "Senaste importer", "view_all_jobs": "Visa alla jobb", + "initializing_upload": "Initierar uppladdning", "upload_failed_retries": "Uppladdning misslyckades efter försök", + "connection_lost_retry": "Anslutning förlorad, försöker igen", "archive_loaded": "Arkiv laddat framgångsrikt! Jobb", + "failed_load_status": "Kunde inte ladda status", "hide": "dölj", "show": "visa", + # About page translations + "about_subtitle": "Neo Python Bildhamtare", + "about_ch1_title": "Ursprung", + "about_ch2_title": "Den Stora Bitbucket Utrotningen", + "about_ch3_title": "En Alkemi", + "about_ch4_title": "En Gris Vaknar", + "about_ch5_title": "En Spegel Dimension", + "about_ch6_title": "Arsenalen", + "about_ch7_title": "En Huvudnyckel", + "about_ch8_title": "Varfor Vi Arkiverar", + "about_ch9_title": "En Smedja", + "about_ch10_title": "En Vag.", + "about_ch11_title": "Aakalla Grisen", + "about_feat_async": "Asynkron Domankrypning", + "about_feat_vault": "Innehallsadresserat Valv", + "about_feat_fts": "Fulltextsokning", + "about_feat_screenshots": "Sidskarmbilder", + "about_feat_hydra": "Hydra-lage", + "about_feat_provenance": "Mediaproveniens", + "about_feat_markdown": "Markdown-konvertering", + "about_feat_selfextract": "Sjalvextraherande Arkiv", + "about_feat_code": "Kodfilstod", + "about_feat_vcs": "VCS Forvaringskloning", + "about_feat_live": "Liveflode", + "about_feat_serp": "SERP Webbgranssnitt", + "about_footer_p1": "neopig ar oppen kallkod, skankd till det offentliga.", + "about_footer_p2": "Neopig lever:", + "about_footer_p3": "Till minne av alla forvar som Atlassian raderade.", + "about_footer_p5": "Ursaktaforbemakemligheten.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "zh-tw": { + "search": "搜尋", "crawl": "爬取", "live": "即時動態", "about": "關於", + "random": "隨機", "phantom": "幻影", "loading": "載入中...", + "start_crawl": "開始爬取", "pause": "暫停", "resume": "繼續", "delete": "刪除", + "url": "網址", "mode": "模式", "depth": "深度", "keywords": "關鍵字", + "screenshots": "螢幕截圖", "fast_mode": "快速模式", "fresh_start": "全新開始", + "pages": "頁面", "found": "發現", "saved": "儲存", "dupes": "重複", + "running": "執行中", "completed": "已完成", "paused": "已暫停", + "no_jobs": "暫無爬取任務", "started": "開始於", "filter": "篩選", + "all_types": "所有類型", "images": "圖片", "videos": "影片", "audio": "音訊", + "everything": "全部(文字+媒體)", "all_media": "所有媒體", + "images_only": "僅圖片", "videos_only": "僅影片", "text_only": "僅文字", + "recent_jobs": "最近任務", "search_placeholder": "搜尋媒體...", + "media": "媒體", "pages_label": "頁面", "download": "下載", + "no_media": "未找到媒體", "no_more": "沒有更多結果", "load_error": "載入失敗", + "copy": "複製", "copied": "已複製!", "starting": "啟動中...", "started_ok": "已啟動!", + "error": "錯誤", "watching": "正在監視新圖片...", "content": "內容", + "previous": "上一頁", "next": "下一頁", "over_9000": "超過9000+!", + "loading_stats": "載入統計中...", "screenshot": "螢幕截圖", + "valid_uri": "請輸入至少一個有效的URI", "load_jobs_error": "載入任務失敗", + "hydrate_subtitle": "從網路取得媒體", "live_subtitle": "觀看正在爬取的圖片", + "total_images": "總圖片數", "new_session": "本次新增", "per_minute": "每分鐘", + "all_domains": "所有網域", "download_phantom": "下載幻影網站", + "phantom_subtitle": "將存檔頁面匯出為帶本地媒體的靜態網站", "max_pages": "最大頁數", "select_domain": "選擇網域", "sources": "來源", + "source_uri": "來源URI", "neopig_uri": "Neopig URI", "source_page": "來源頁面", "neopig_page": "Neopig頁面", + "type_label": "類型", "mime_label": "MIME", "size_label": "大小", "alt_label": "替代文字", + "keywords_label": "關鍵字", "description_label": "描述", "items": "項", "bytes": "位元組", + "used_on": "使用於", "page": "頁面", "discovered": "發現時間", + "console": "主控台", "close": "關閉", "no_logs": "暫無日誌", + "import_nav": "匯入", "hydra": "Hydra", "crawl_disabled": "此伺服器已停用爬取功能(唯讀存檔模式)", + "replay_already_running": "任務重播已在執行中", "replaying": "重播中...", "replay": "重播", + "confirm_recrawl": "為匯入的來源啟動新的爬取任務?", "recrawl_async_note": "這將在背景非同步爬取每個來源。", + "recrawl_sources": "重新爬取來源", "started_jobs": "已啟動爬取任務!", + "replay_job": "重播任務", "replay_subtitle": "按原始發現速度重播爬取", "replay_complete": "重播完成", + "what_is_phantom": "什麼是幻影站點?", "phantom_feature_1": "原始HTML完全保留", + "phantom_feature_2": "所有媒體URL重寫為本機路徑", "phantom_feature_3": "可直接靜態託管(nginx、Caddy、S3等)", + "phantom_feature_4": "離線可用 - 所有資源已包含", "phantom_feature_5": "非常適合存檔和保存", + "import_mode": "匯入模式", "import_subtitle": "上傳neopig存檔(.tar.gz或.run)以瀏覽", + "drop_or_browse": "拖放存檔或點擊瀏覽", "supported_formats": "支援.tar.gz、.tgz和.run檔案", + "uploading": "上傳中...", "current_archive": "目前存檔", + "media_in_db": "資料庫中的媒體", "pages_indexed": "已索引頁面", "recent_imports": "最近匯入", "view_all_jobs": "檢視所有任務", + "initializing_upload": "正在初始化上傳", "upload_failed_retries": "重試後上傳失敗", + "connection_lost_retry": "連線中斷,正在重試", "archive_loaded": "存檔載入成功!任務", + "failed_load_status": "載入狀態失敗", "hide": "隱藏", "show": "顯示", + # About page translations + "about_subtitle": "新一代Python圖像抓取器", + "about_ch1_title": "創世紀", + "about_ch2_title": "Bitbucket大滅絕", + "about_ch3_title": "煉金術", + "about_ch4_title": "豬的覺醒", + "about_ch5_title": "鏡像維度", + "about_ch6_title": "武器庫", + "about_ch7_title": "萬能鑰匙", + "about_ch8_title": "為什麼我們存檔", + "about_ch9_title": "鍛造", + "about_ch10_title": "一條道路。", + "about_ch11_title": "召喚豬", + "about_feat_async": "非同步網域爬取", + "about_feat_vault": "內容尋址保險庫", + "about_feat_fts": "全文搜尋", + "about_feat_screenshots": "頁面截圖", + "about_feat_hydra": "Hydra模式", + "about_feat_provenance": "媒體溯源", + "about_feat_markdown": "Markdown轉換", + "about_feat_selfextract": "自解壓封存", + "about_feat_code": "程式碼檔案支援", + "about_feat_vcs": "VCS儲存庫複製", + "about_feat_live": "即時動態", + "about_feat_serp": "SERP網頁介面", + "about_footer_p1": "neopig是開源的,贈予公共領域。", + "about_footer_p2": "Neopig所在:", + "about_footer_p3": "紀念Atlassian殺死的所有倉庫。", + "about_footer_p5": "抱歉給您帶來便利。", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "bn": { + "search": "অনুসন্ধান", "crawl": "ক্রল", "live": "লাইভ ফিড", "about": "সম্পর্কে", + "random": "এলোমেলো", "phantom": "ফ্যান্টম", "loading": "লোড হচ্ছে...", + "start_crawl": "ক্রল শুরু করুন", "pause": "বিরতি", "resume": "পুনরায় শুরু", "delete": "মুছুন", + "url": "URL", "mode": "মোড", "depth": "গভীরতা", "keywords": "কীওয়ার্ড", + "screenshots": "স্ক্রিনশট", "fast_mode": "দ্রুত মোড", "fresh_start": "নতুন শুরু", + "pages": "পৃষ্ঠা", "found": "পাওয়া গেছে", "saved": "সংরক্ষিত", "dupes": "ডুপ্লিকেট", + "running": "চলছে", "completed": "সম্পন্ন", "paused": "বিরতি", + "no_jobs": "কোন ক্রল কাজ নেই", "started": "শুরু", "filter": "ফিল্টার", + "all_types": "সব ধরনের", "images": "ছবি", "videos": "ভিডিও", "audio": "অডিও", + "everything": "সবকিছু", "all_media": "সব মিডিয়া", + "images_only": "শুধু ছবি", "videos_only": "শুধু ভিডিও", "text_only": "শুধু টেক্সট", + "recent_jobs": "সাম্প্রতিক কাজ", "search_placeholder": "মিডিয়া অনুসন্ধান...", + "media": "মিডিয়া", "pages_label": "পৃষ্ঠা", "download": "ডাউনলোড", + "no_media": "কোন মিডিয়া পাওয়া যায়নি", "no_more": "আর কোন ফলাফল নেই", "load_error": "লোড ব্যর্থ", + "copy": "কপি", "copied": "কপি হয়েছে!", "starting": "শুরু হচ্ছে...", "started_ok": "শুরু হয়েছে!", + "error": "ত্রুটি", "watching": "নতুন ছবি দেখছি...", "content": "বিষয়বস্তু", + "previous": "পূর্ববর্তী", "next": "পরবর্তী", "over_9000": "৯,০০০+ এর বেশি!", + "loading_stats": "পরিসংখ্যান লোড হচ্ছে...", "screenshot": "স্ক্রিনশট", + "valid_uri": "অন্তত একটি বৈধ URI দিন", "load_jobs_error": "কাজ লোড ব্যর্থ", + "hydrate_subtitle": "ওয়েব থেকে মিডিয়া আনুন", "live_subtitle": "ক্রল হওয়া ছবি দেখুন", + "total_images": "মোট ছবি", "new_session": "এই সেশনে নতুন", "per_minute": "প্রতি মিনিটে", + "all_domains": "সব ডোমেইন", "download_phantom": "ফ্যান্টম সাইট ডাউনলোড", + "phantom_subtitle": "সংরক্ষিত পৃষ্ঠা স্থানীয় মিডিয়া সহ স্ট্যাটিক সাইট হিসেবে রপ্তানি", "max_pages": "সর্বোচ্চ পৃষ্ঠা", "select_domain": "ডোমেইন নির্বাচন", "sources": "সূত্র", + "source_uri": "উৎস URI", "neopig_uri": "Neopig URI", "source_page": "উৎস পৃষ্ঠা", "neopig_page": "Neopig পৃষ্ঠা", + "type_label": "ধরন", "mime_label": "MIME", "size_label": "আকার", "alt_label": "Alt", + "keywords_label": "কীওয়ার্ড", "description_label": "বিবরণ", "items": "আইটেম", "bytes": "বাইট", + "used_on": "ব্যবহৃত", "page": "পৃষ্ঠা", "discovered": "আবিষ্কৃত", + "console": "কনসোল", "close": "বন্ধ", "no_logs": "কোন লগ নেই", + "import_nav": "আমদানি", "hydra": "Hydra", "crawl_disabled": "এই সার্ভারে ক্রলিং অক্ষম (শুধুমাত্র পঠন সংরক্ষণাগার মোড)", + "replay_already_running": "জব রিপ্লে ইতিমধ্যে চলছে", "replaying": "রিপ্লে হচ্ছে...", "replay": "রিপ্লে", + "confirm_recrawl": "আমদানি করা উৎসগুলির জন্য নতুন ক্রল জব শুরু করবেন?", "recrawl_async_note": "এটি প্রতিটি উৎস পটভূমিতে অ্যাসিঙ্ক্রোনাসভাবে ক্রল করবে।", + "recrawl_sources": "উৎস পুনরায় ক্রল করুন", "started_jobs": "ক্রল জব শুরু হয়েছে!", + "replay_job": "জব রিপ্লে", "replay_subtitle": "মূল আবিষ্কারের গতিতে ক্রল রিপ্লে", "replay_complete": "রিপ্লে সম্পূর্ণ", + "what_is_phantom": "ফ্যান্টম সাইট কী?", "phantom_feature_1": "মূল HTML ঠিক ক্রল করার মতো সংরক্ষিত", + "phantom_feature_2": "সমস্ত মিডিয়া URL স্থানীয় পথে পুনর্লিখিত", "phantom_feature_3": "স্ট্যাটিক হোস্টিংয়ের জন্য প্রস্তুত (nginx, Caddy, S3 ইত্যাদি)", + "phantom_feature_4": "অফলাইনে কাজ করে - সমস্ত সম্পদ অন্তর্ভুক্ত", "phantom_feature_5": "সংরক্ষণাগার এবং সংরক্ষণের জন্য নিখুঁত", + "import_mode": "আমদানি মোড", "import_subtitle": "একটি neopig সংরক্ষণাগার (.tar.gz বা .run) আপলোড করুন", + "drop_or_browse": "সংরক্ষণাগার এখানে ফেলুন বা ব্রাউজ করতে ক্লিক করুন", "supported_formats": ".tar.gz, .tgz এবং .run ফাইল সমর্থিত", + "uploading": "আপলোড হচ্ছে...", "current_archive": "বর্তমান সংরক্ষণাগার", + "media_in_db": "ডাটাবেসে মিডিয়া", "pages_indexed": "ইনডেক্স করা পৃষ্ঠা", "recent_imports": "সাম্প্রতিক আমদানি", "view_all_jobs": "সমস্ত জব দেখুন", + "initializing_upload": "আপলোড শুরু হচ্ছে", "upload_failed_retries": "পুনঃচেষ্টার পর আপলোড ব্যর্থ", + "connection_lost_retry": "সংযোগ হারিয়ে গেছে, পুনরায় চেষ্টা করা হচ্ছে", "archive_loaded": "সংরক্ষণাগার সফলভাবে লোড হয়েছে! জব", + "failed_load_status": "স্থিতি লোড করতে ব্যর্থ", "hide": "লুকান", "show": "দেখান", + # About page translations + "about_subtitle": "নিও পাইথন ইমেজ গ্র্যাবার", + "about_ch1_title": "সৃষ্টি", + "about_ch2_title": "বিটবাকেট মহাবিলুপ্তি", + "about_ch3_title": "আলকেমি", + "about_ch4_title": "একটি শূকর জেগে ওঠে", + "about_ch5_title": "আয়না মাত্রা", + "about_ch6_title": "অস্ত্রাগার", + "about_ch7_title": "স্কেলিটন কী", + "about_ch8_title": "কেন আমরা সংরক্ষণ করি", + "about_ch9_title": "কামারশালা", + "about_ch10_title": "একটি পথ।", + "about_ch11_title": "শূকরকে ডাকো", + "about_feat_async": "অ্যাসিঙ্ক ডোমেইন ক্রলিং", + "about_feat_vault": "কন্টেন্ট-অ্যাড্রেসড ভল্ট", + "about_feat_fts": "পূর্ণ-টেক্সট অনুসন্ধান", + "about_feat_screenshots": "পেজ স্ক্রিনশট", + "about_feat_hydra": "হাইড্রা মোড", + "about_feat_provenance": "মিডিয়া প্রোভেন্যান্স", + "about_feat_markdown": "মার্কডাউন রূপান্তর", + "about_feat_selfextract": "স্ব-এক্সট্রাক্টিং আর্কাইভ", + "about_feat_code": "কোড ফাইল সাপোর্ট", + "about_feat_vcs": "VCS রিপোজিটরি ক্লোনিং", + "about_feat_live": "লাইভ ফিড", + "about_feat_serp": "SERP ওয়েব ইন্টারফেস", + "about_footer_p1": "neopig ওপেন সোর্স, পাবলিক ডোমেইনে দান।", + "about_footer_p2": "Neopig বাস করে:", + "about_footer_p3": "Atlassian যে সমস্ত রিপোজিটরি মেরে ফেলেছে তাদের স্মরণে।", + "about_footer_p5": "সুবিধার জন্য দুঃখিত।", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "ur": { + "search": "تلاش", "crawl": "کرال", "live": "لائیو فیڈ", "about": "کے بارے میں", + "random": "بے ترتیب", "phantom": "فینٹم", "loading": "لوڈ ہو رہا ہے...", + "start_crawl": "کرال شروع کریں", "pause": "روکیں", "resume": "جاری رکھیں", "delete": "حذف کریں", + "url": "یو آر ایل", "mode": "موڈ", "depth": "گہرائی", "keywords": "کلیدی الفاظ", + "screenshots": "اسکرین شاٹس", "fast_mode": "تیز موڈ", "fresh_start": "نئی شروعات", + "pages": "صفحات", "found": "ملے", "saved": "محفوظ", "dupes": "ڈپلیکیٹ", + "running": "چل رہا ہے", "completed": "مکمل", "paused": "روکا ہوا", + "no_jobs": "کوئی کرال کام نہیں", "started": "شروع", "filter": "فلٹر", + "all_types": "تمام اقسام", "images": "تصاویر", "videos": "ویڈیوز", "audio": "آڈیو", + "everything": "سب کچھ", "all_media": "تمام میڈیا", + "images_only": "صرف تصاویر", "videos_only": "صرف ویڈیوز", "text_only": "صرف متن", + "recent_jobs": "حالیہ کام", "search_placeholder": "میڈیا تلاش کریں...", + "media": "میڈیا", "pages_label": "صفحات", "download": "ڈاؤن لوڈ", + "no_media": "کوئی میڈیا نہیں ملا", "no_more": "مزید نتائج نہیں", "load_error": "لوڈ ناکام", + "copy": "کاپی", "copied": "کاپی ہو گیا!", "starting": "شروع ہو رہا ہے...", "started_ok": "شروع ہو گیا!", + "error": "خرابی", "watching": "نئی تصاویر دیکھ رہا ہے...", "content": "مواد", + "previous": "پچھلا", "next": "اگلا", "over_9000": "9,000+ سے زیادہ!", + "loading_stats": "اعدادوشمار لوڈ ہو رہے ہیں...", "screenshot": "اسکرین شاٹ", + "valid_uri": "کم از کم ایک درست URI درج کریں", "load_jobs_error": "کام لوڈ ناکام", + "hydrate_subtitle": "ویب سے میڈیا حاصل کریں", "live_subtitle": "کرال ہوتی تصاویر دیکھیں", + "total_images": "کل تصاویر", "new_session": "اس سیشن میں نئی", "per_minute": "فی منٹ", + "all_domains": "تمام ڈومینز", "download_phantom": "فینٹم سائٹ ڈاؤن لوڈ", + "phantom_subtitle": "آرکائیو شدہ صفحات کو مقامی میڈیا کے ساتھ جامد سائٹ کے طور پر برآمد کریں", "max_pages": "زیادہ سے زیادہ صفحات", "select_domain": "ڈومین منتخب کریں", "sources": "ذرائع", + "source_uri": "ماخذ URI", "neopig_uri": "Neopig URI", "source_page": "ماخذ صفحہ", "neopig_page": "Neopig صفحہ", + "type_label": "قسم", "mime_label": "MIME", "size_label": "سائز", "alt_label": "Alt", + "keywords_label": "کلیدی الفاظ", "description_label": "تفصیل", "items": "آئٹمز", "bytes": "بائٹس", + "used_on": "استعمال شدہ", "page": "صفحہ", "discovered": "دریافت", + "console": "کنسول", "close": "بند کریں", "no_logs": "ابھی کوئی لاگ نہیں", + "import_nav": "درآمد", "hydra": "Hydra", "crawl_disabled": "اس سرور پر کرالنگ غیر فعال ہے (صرف پڑھنے کے لیے آرکائیو موڈ)", + "replay_already_running": "جاب ری پلے پہلے سے چل رہا ہے", "replaying": "ری پلے ہو رہا ہے...", "replay": "ری پلے", + "confirm_recrawl": "درآمد شدہ ذرائع کے لیے نئے کرال جابز شروع کریں؟", "recrawl_async_note": "یہ ہر ذریعہ کو پس منظر میں غیر مطابقت پذیر طریقے سے کرال کرے گا۔", + "recrawl_sources": "ذرائع دوبارہ کرال کریں", "started_jobs": "کرال جابز شروع ہو گئے!", + "replay_job": "جاب ری پلے", "replay_subtitle": "اصل دریافت کی رفتار پر کرال ری پلے", "replay_complete": "ری پلے مکمل", + "what_is_phantom": "فینٹم سائٹ کیا ہے؟", "phantom_feature_1": "اصل HTML بالکل ویسے ہی محفوظ جیسے کرال کیا گیا", + "phantom_feature_2": "تمام میڈیا URLs مقامی راستوں پر دوبارہ لکھے گئے", "phantom_feature_3": "سٹیٹک ہوسٹنگ کے لیے تیار (nginx, Caddy, S3 وغیرہ)", + "phantom_feature_4": "آف لائن کام کرتا ہے - تمام اثاثے شامل", "phantom_feature_5": "آرکائیونگ اور تحفظ کے لیے بہترین", + "import_mode": "درآمد موڈ", "import_subtitle": "neopig آرکائیو (.tar.gz یا .run) اپ لوڈ کریں", + "drop_or_browse": "آرکائیو یہاں چھوڑیں یا براؤز کرنے کے لیے کلک کریں", "supported_formats": ".tar.gz, .tgz اور .run فائلز سپورٹ کی جاتی ہیں", + "uploading": "اپ لوڈ ہو رہا ہے...", "current_archive": "موجودہ آرکائیو", + "media_in_db": "ڈیٹابیس میں میڈیا", "pages_indexed": "انڈیکس شدہ صفحات", "recent_imports": "حالیہ درآمدات", "view_all_jobs": "تمام جابز دیکھیں", + "initializing_upload": "اپ لوڈ شروع ہو رہا ہے", "upload_failed_retries": "کوششوں کے بعد اپ لوڈ ناکام", + "connection_lost_retry": "کنکشن ٹوٹ گیا، دوبارہ کوشش", "archive_loaded": "آرکائیو کامیابی سے لوڈ ہو گیا! جاب", + "failed_load_status": "سٹیٹس لوڈ کرنے میں ناکام", "hide": "چھپائیں", "show": "دکھائیں", + # About page translations + "about_subtitle": "نیو پائتھن امیج گریبر", + "about_ch1_title": "آغاز", + "about_ch2_title": "بٹ بکٹ کی عظیم معدومیت", + "about_ch3_title": "کیمیاگری", + "about_ch4_title": "ایک سور جاگتا ہے", + "about_ch5_title": "آئینہ جہت", + "about_ch6_title": "اسلحہ خانہ", + "about_ch7_title": "مکمل چابی", + "about_ch8_title": "ہم آرکائیو کیوں کرتے ہیں", + "about_ch9_title": "بھٹی", + "about_ch10_title": "ایک راستہ۔", + "about_ch11_title": "سور کو بلاؤ", + "about_feat_async": "غیر متوازن ڈومین کرالنگ", + "about_feat_vault": "مواد پتہ والٹ", + "about_feat_fts": "مکمل متن تلاش", + "about_feat_screenshots": "صفحہ اسکرین شاٹس", + "about_feat_hydra": "ہائیڈرا موڈ", + "about_feat_provenance": "میڈیا ماخذ", + "about_feat_markdown": "مارک ڈاؤن تبدیلی", + "about_feat_selfextract": "خود نکالنے والے آرکائیوز", + "about_feat_code": "کوڈ فائل سپورٹ", + "about_feat_vcs": "VCS ریپازٹری کلوننگ", + "about_feat_live": "لائیو فیڈ", + "about_feat_serp": "SERP ویب انٹرفیس", + "about_footer_p1": "neopig اوپن سورس ہے، عوامی ڈومین میں تحفہ۔", + "about_footer_p2": "Neopig یہاں رہتا ہے:", + "about_footer_p3": "Atlassian نے جن تمام ریپازٹریز کو ختم کیا ان کی یاد میں۔", + "about_footer_p5": "سہولت کے لیے معذرت۔", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "sw": { + "search": "Tafuta", "crawl": "Tambaa", "live": "Moja kwa Moja", "about": "Kuhusu", + "random": "Nasibu", "phantom": "Phantom", "loading": "Inapakia...", + "start_crawl": "Anza Kutambaa", "pause": "Simamisha", "resume": "Endelea", "delete": "Futa", + "url": "URL", "mode": "Hali", "depth": "Kina", "keywords": "Maneno muhimu", + "screenshots": "Picha za skrini", "fast_mode": "Hali ya Haraka", "fresh_start": "Mwanzo Mpya", + "pages": "kurasa", "found": "zilizopatikana", "saved": "zilizohifadhiwa", "dupes": "nakala", + "running": "inaendelea", "completed": "imekamilika", "paused": "imesimamishwa", + "no_jobs": "Hakuna kazi", "started": "Ilianza", "filter": "Chuja", + "all_types": "Aina zote", "images": "Picha", "videos": "Video", "audio": "Sauti", + "everything": "Kila kitu", "all_media": "Media zote", + "images_only": "Picha tu", "videos_only": "Video tu", "text_only": "Maandishi tu", + "recent_jobs": "Kazi za Hivi Karibuni", "search_placeholder": "Tafuta media...", + "media": "Media", "pages_label": "Kurasa", "download": "Pakua", + "no_media": "Hakuna media iliyopatikana", "no_more": "Hakuna matokeo zaidi", "load_error": "Imeshindwa kupakia", + "copy": "Nakili", "copied": "Imenakiliwa!", "starting": "Inaanza...", "started_ok": "Imeanza!", + "error": "Hitilafu", "watching": "Inatazama picha mpya...", "content": "Maudhui", + "previous": "Iliyotangulia", "next": "Inayofuata", "over_9000": "Zaidi ya 9,000+!", + "loading_stats": "Inapakia takwimu...", "screenshot": "Picha ya skrini", + "valid_uri": "Tafadhali weka URI moja halali", "load_jobs_error": "Imeshindwa kupakia kazi", + "hydrate_subtitle": "Pata media kutoka wavuti", "live_subtitle": "Tazama picha zikitambaazwa", + "total_images": "Jumla ya Picha", "new_session": "Mpya Kipindi Hiki", "per_minute": "Kwa Dakika", + "all_domains": "Vikoa vyote", "download_phantom": "Pakua tovuti ya phantom", + "phantom_subtitle": "Hamisha kurasa zilizohifadhiwa kama tovuti tuli na media za ndani", "max_pages": "Kurasa za juu", "select_domain": "Chagua Kikoa", "sources": "vyanzo", + "source_uri": "URI Chanzo", "neopig_uri": "Neopig URI", "source_page": "Ukurasa Chanzo", "neopig_page": "Ukurasa Neopig", + "type_label": "Aina", "mime_label": "MIME", "size_label": "Ukubwa", "alt_label": "Alt", + "keywords_label": "Maneno muhimu", "description_label": "Maelezo", "items": "vitu", "bytes": "baiti", + "used_on": "Imetumika", "page": "Ukurasa", "discovered": "Iligunduliwa", + "console": "Konsoli", "close": "Funga", "no_logs": "Hakuna kumbukumbu bado", + "import_nav": "Ingiza", "hydra": "Hydra", "crawl_disabled": "Kutambaa kumezimwa kwenye seva hii (hali ya kusoma tu ya kumbukumbu)", + "replay_already_running": "Kucheza tena kazi tayari kunaendelea", "replaying": "Inacheza tena...", "replay": "Cheza tena", + "confirm_recrawl": "Anzisha kazi mpya za kutambaa kwa vyanzo vilivyoingizwa?", "recrawl_async_note": "Hii itatambaa kila chanzo bila kusubiri nyuma.", + "recrawl_sources": "Tambaa vyanzo tena", "started_jobs": "Kazi za kutambaa zimeanza!", + "replay_job": "Cheza tena kazi", "replay_subtitle": "Kucheza tena kutambaa kwa kasi ya ugunduzi asili", "replay_complete": "Kucheza tena kumekamilika", + "what_is_phantom": "Tovuti ya Phantom ni nini?", "phantom_feature_1": "HTML asili imehifadhiwa kama ilivyotambuliwa", + "phantom_feature_2": "URL zote za vyombo vya habari zimeandikwa upya kwenye njia za ndani", "phantom_feature_3": "Tayari kwa mwenyeji tuli (nginx, Caddy, S3, n.k.)", + "phantom_feature_4": "Inafanya kazi nje ya mtandao - mali zote zimejumuishwa", "phantom_feature_5": "Kamili kwa kuhifadhi na kuhifadhi", + "import_mode": "Hali ya Kuingiza", "import_subtitle": "Pakia kumbukumbu ya neopig (.tar.gz au .run) kuchunguza", + "drop_or_browse": "Acha kumbukumbu hapa au bonyeza kuvinjari", "supported_formats": "Inasaidia faili za .tar.gz, .tgz na .run", + "uploading": "Inapakia...", "current_archive": "Kumbukumbu ya Sasa", + "media_in_db": "Vyombo vya habari katika hifadhidata", "pages_indexed": "Kurasa zilizowekwa fahirisi", "recent_imports": "Uingizaji wa hivi karibuni", "view_all_jobs": "Tazama kazi zote", + "initializing_upload": "Kuanzisha upakuaji", "upload_failed_retries": "Upakuaji umeshindwa baada ya majaribio", + "connection_lost_retry": "Muunganisho umepotea, inajaribu tena", "archive_loaded": "Kumbukumbu imepakiwa kwa mafanikio! Kazi", + "failed_load_status": "Imeshindwa kupakia hali", "hide": "ficha", "show": "onyesha", + # About page translations + "about_subtitle": "Neo Python Kinasa Picha", + "about_ch1_title": "Mwanzo", + "about_ch2_title": "Kutoweka Kwa Bitbucket", + "about_ch3_title": "Alkemia", + "about_ch4_title": "Nguruwe Anaamka", + "about_ch5_title": "Sehemu ya Kioo", + "about_ch6_title": "Ghala la Silaha", + "about_ch7_title": "Ufunguo wa Mifupa", + "about_ch8_title": "Kwa Nini Tunahifadhi", + "about_ch9_title": "Tanuru", + "about_ch10_title": "Njia.", + "about_ch11_title": "Mwite Nguruwe", + "about_feat_async": "Kutambaa Kikoa Kisichosawazishwa", + "about_feat_vault": "Hifadhi ya Anwani ya Maudhui", + "about_feat_fts": "Utafutaji wa Maandishi Kamili", + "about_feat_screenshots": "Picha za Skrini za Ukurasa", + "about_feat_hydra": "Hali ya Hydra", + "about_feat_provenance": "Asili ya Media", + "about_feat_markdown": "Ubadilishaji wa Markdown", + "about_feat_selfextract": "Kumbukumbu Zinazojitoa", + "about_feat_code": "Usaidizi wa Faili za Msimbo", + "about_feat_vcs": "Kunakili Hazina za VCS", + "about_feat_live": "Mtiririko wa Moja kwa Moja", + "about_feat_serp": "Kiolesura cha Wavuti cha SERP", + "about_footer_p1": "neopig ni chanzo wazi, imetolewa kwa umma.", + "about_footer_p2": "Neopig anaishi:", + "about_footer_p3": "Kwa kumbukumbu ya hazina zote ambazo Atlassian iliua.", + "about_footer_p5": "Samahani kwa urahisi.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "mr": { + "search": "शोध", "crawl": "क्रॉल", "live": "थेट फीड", "about": "बद्दल", + "random": "यादृच्छिक", "phantom": "फँटम", "loading": "लोड होत आहे...", + "start_crawl": "क्रॉल सुरू करा", "pause": "थांबवा", "resume": "पुन्हा सुरू करा", "delete": "हटवा", + "url": "URL", "mode": "मोड", "depth": "खोली", "keywords": "कीवर्ड", + "screenshots": "स्क्रीनशॉट", "fast_mode": "जलद मोड", "fresh_start": "नवीन सुरुवात", + "pages": "पृष्ठे", "found": "सापडले", "saved": "जतन केले", "dupes": "डुप्लिकेट", + "running": "चालू आहे", "completed": "पूर्ण", "paused": "थांबवले", + "no_jobs": "कोणतेही क्रॉल काम नाही", "started": "सुरू", "filter": "फिल्टर", + "all_types": "सर्व प्रकार", "images": "प्रतिमा", "videos": "व्हिडिओ", "audio": "ऑडिओ", + "everything": "सर्वकाही", "all_media": "सर्व मीडिया", + "images_only": "फक्त प्रतिमा", "videos_only": "फक्त व्हिडिओ", "text_only": "फक्त मजकूर", + "recent_jobs": "अलीकडील कामे", "search_placeholder": "मीडिया शोधा...", + "media": "मीडिया", "pages_label": "पृष्ठे", "download": "डाउनलोड", + "no_media": "मीडिया सापडला नाही", "no_more": "आणखी परिणाम नाहीत", "load_error": "लोड अयशस्वी", + "copy": "कॉपी", "copied": "कॉपी झाले!", "starting": "सुरू होत आहे...", "started_ok": "सुरू झाले!", + "error": "त्रुटी", "watching": "नवीन प्रतिमा पाहत आहे...", "content": "सामग्री", + "previous": "मागील", "next": "पुढील", "over_9000": "9,000+ पेक्षा जास्त!", + "loading_stats": "आकडेवारी लोड होत आहे...", "screenshot": "स्क्रीनशॉट", + "valid_uri": "कृपया किमान एक वैध URI प्रविष्ट करा", "load_jobs_error": "कामे लोड अयशस्वी", + "hydrate_subtitle": "वेबवरून मीडिया मिळवा", "live_subtitle": "क्रॉल होताना प्रतिमा पहा", + "total_images": "एकूण प्रतिमा", "new_session": "या सत्रात नवीन", "per_minute": "प्रति मिनिट", + "all_domains": "सर्व डोमेन", "download_phantom": "फँटम साइट डाउनलोड करा", + "phantom_subtitle": "संग्रहित पृष्ठे स्थानिक मीडियासह स्थिर साइट म्हणून निर्यात करा", "max_pages": "जास्तीत जास्त पृष्ठे", "select_domain": "डोमेन निवडा", "sources": "स्रोत", + "source_uri": "स्रोत URI", "neopig_uri": "Neopig URI", "source_page": "स्रोत पृष्ठ", "neopig_page": "Neopig पृष्ठ", + "type_label": "प्रकार", "mime_label": "MIME", "size_label": "आकार", "alt_label": "Alt", + "keywords_label": "कीवर्ड", "description_label": "वर्णन", "items": "आयटम", "bytes": "बाइट्स", + "used_on": "वापरलेले", "page": "पृष्ठ", "discovered": "शोधले", + "console": "कन्सोल", "close": "बंद करा", "no_logs": "अद्याप कोणतेही लॉग नाहीत", + "import_nav": "आयात", "hydra": "Hydra", "crawl_disabled": "या सर्व्हरवर क्रॉलिंग अक्षम आहे (केवळ-वाचन संग्रह मोड)", + "replay_already_running": "जॉब रीप्ले आधीच चालू आहे", "replaying": "रीप्ले होत आहे...", "replay": "रीप्ले", + "confirm_recrawl": "आयातित स्रोतांसाठी नवीन क्रॉल जॉब सुरू करायचे?", "recrawl_async_note": "हे प्रत्येक स्रोत पार्श्वभूमीवर असिंक्रोनसपणे क्रॉल करेल.", + "recrawl_sources": "स्रोत पुन्हा क्रॉल करा", "started_jobs": "क्रॉल जॉब सुरू झाले!", + "replay_job": "जॉब रीप्ले", "replay_subtitle": "मूळ शोध गतीने क्रॉल रीप्ले", "replay_complete": "रीप्ले पूर्ण", + "what_is_phantom": "फँटम साइट म्हणजे काय?", "phantom_feature_1": "मूळ HTML अगदी क्रॉल केल्याप्रमाणे जतन", + "phantom_feature_2": "सर्व मीडिया URLs स्थानिक मार्गांवर पुन्हा लिहिले", "phantom_feature_3": "स्थिर होस्टिंगसाठी तयार (nginx, Caddy, S3, इ.)", + "phantom_feature_4": "ऑफलाइन कार्य करते - सर्व मालमत्ता समाविष्ट", "phantom_feature_5": "संग्रह आणि जतन यासाठी परिपूर्ण", + "import_mode": "आयात मोड", "import_subtitle": "neopig संग्रह (.tar.gz किंवा .run) अपलोड करा", + "drop_or_browse": "संग्रह येथे टाका किंवा ब्राउझ करण्यासाठी क्लिक करा", "supported_formats": ".tar.gz, .tgz आणि .run फाइल्स समर्थित", + "uploading": "अपलोड होत आहे...", "current_archive": "सध्याचा संग्रह", + "media_in_db": "डेटाबेसमध्ये मीडिया", "pages_indexed": "अनुक्रमित पृष्ठे", "recent_imports": "अलीकडील आयात", "view_all_jobs": "सर्व जॉब पहा", + "initializing_upload": "अपलोड सुरू होत आहे", "upload_failed_retries": "प्रयत्नांनंतर अपलोड अयशस्वी", + "connection_lost_retry": "कनेक्शन तुटले, पुन्हा प्रयत्न", "archive_loaded": "संग्रह यशस्वीरित्या लोड झाला! जॉब", + "failed_load_status": "स्थिती लोड करण्यात अयशस्वी", "hide": "लपवा", "show": "दाखवा", + # About page translations + "about_subtitle": "निओ पायथन इमेज ग्रॅबर", + "about_ch1_title": "उत्पत्ती", + "about_ch2_title": "बिटबकेट महाविलुप्ती", + "about_ch3_title": "किमयागारी", + "about_ch4_title": "डुक्कर जागतो", + "about_ch5_title": "आरसा परिमाण", + "about_ch6_title": "शस्त्रागार", + "about_ch7_title": "सांगाडा किल्ली", + "about_ch8_title": "आम्ही संग्रह का करतो", + "about_ch9_title": "लोहार", + "about_ch10_title": "एक मार्ग.", + "about_ch11_title": "डुकराला बोलवा", + "about_feat_async": "असिंक डोमेन क्रॉलिंग", + "about_feat_vault": "सामग्री-संबोधित व्हॉल्ट", + "about_feat_fts": "पूर्ण-मजकूर शोध", + "about_feat_screenshots": "पृष्ठ स्क्रीनशॉट", + "about_feat_hydra": "हायड्रा मोड", + "about_feat_provenance": "मीडिया उत्पत्ती", + "about_feat_markdown": "मार्कडाउन रूपांतरण", + "about_feat_selfextract": "स्व-निष्कर्षण संग्रह", + "about_feat_code": "कोड फाइल सपोर्ट", + "about_feat_vcs": "VCS रिपॉझिटरी क्लोनिंग", + "about_feat_live": "लाइव्ह फीड", + "about_feat_serp": "SERP वेब इंटरफेस", + "about_footer_p1": "neopig ओपन सोर्स आहे, सार्वजनिक डोमेनमध्ये दान।", + "about_footer_p2": "Neopig येथे राहतो:", + "about_footer_p3": "Atlassian ने मारलेल्या सर्व repositories च्या स्मरणार्थ.", + "about_footer_p5": "सोयीसाठी माफ करा.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "te": { + "search": "శోధన", "crawl": "క్రాల్", "live": "లైవ్ ఫీడ్", "about": "గురించి", + "random": "యాదృచ్ఛిక", "phantom": "ఫాంటమ్", "loading": "లోడ్ అవుతోంది...", + "start_crawl": "క్రాల్ ప్రారంభించు", "pause": "పాజ్", "resume": "పునఃప్రారంభించు", "delete": "తొలగించు", + "url": "URL", "mode": "మోడ్", "depth": "లోతు", "keywords": "కీవర్డ్లు", + "screenshots": "స్క్రీన్షాట్లు", "fast_mode": "వేగవంతమైన మోడ్", "fresh_start": "కొత్త ప్రారంభం", + "pages": "పేజీలు", "found": "కనుగొనబడింది", "saved": "సేవ్ చేయబడింది", "dupes": "నకిలీలు", + "running": "నడుస్తోంది", "completed": "పూర్తయింది", "paused": "పాజ్ చేయబడింది", + "no_jobs": "క్రాల్ జాబ్లు లేవు", "started": "ప్రారంభమైంది", "filter": "ఫిల్టర్", + "all_types": "అన్ని రకాలు", "images": "చిత్రాలు", "videos": "వీడియోలు", "audio": "ఆడియో", + "everything": "అన్నీ", "all_media": "అన్ని మీడియా", + "images_only": "చిత్రాలు మాత్రమే", "videos_only": "వీడియోలు మాత్రమే", "text_only": "వచనం మాత్రమే", + "recent_jobs": "ఇటీవలి జాబ్లు", "search_placeholder": "మీడియా శోధించండి...", + "media": "మీడియా", "pages_label": "పేజీలు", "download": "డౌన్లోడ్", + "no_media": "మీడియా కనుగొనబడలేదు", "no_more": "మరిన్ని ఫలితాలు లేవు", "load_error": "లోడ్ విఫలమైంది", + "copy": "కాపీ", "copied": "కాపీ అయింది!", "starting": "ప్రారంభమవుతోంది...", "started_ok": "ప్రారంభమైంది!", + "error": "లోపం", "watching": "కొత్త చిత్రాల కోసం చూస్తోంది...", "content": "కంటెంట్", + "previous": "మునుపటి", "next": "తదుపరి", "over_9000": "9,000+ కంటే ఎక్కువ!", + "loading_stats": "గణాంకాలు లోడ్ అవుతున్నాయి...", "screenshot": "స్క్రీన్షాట్", + "valid_uri": "దయచేసి కనీసం ఒక చెల్లుబాటు అయ్యే URI నమోదు చేయండి", "load_jobs_error": "జాబ్లు లోడ్ విఫలమైంది", + "hydrate_subtitle": "వెబ్ నుండి మీడియా పొందండి", "live_subtitle": "క్రాల్ అవుతున్న చిత్రాలను చూడండి", + "total_images": "మొత్తం చిత్రాలు", "new_session": "ఈ సెషన్లో కొత్తవి", "per_minute": "నిమిషానికి", + "all_domains": "అన్ని డొమైన్లు", "download_phantom": "ఫాంటమ్ సైట్ డౌన్లోడ్", + "phantom_subtitle": "ఆర్కైవ్ చేసిన పేజీలను స్థానిక మీడియాతో స్టాటిక్ సైట్గా ఎగుమతి చేయండి", "max_pages": "గరిష్ట పేజీలు", "select_domain": "డొమైన్ ఎంచుకోండి", "sources": "మూలాలు", + "source_uri": "మూల URI", "neopig_uri": "Neopig URI", "source_page": "మూల పేజీ", "neopig_page": "Neopig పేజీ", + "type_label": "రకం", "mime_label": "MIME", "size_label": "పరిమాణం", "alt_label": "Alt", + "keywords_label": "కీవర్డ్లు", "description_label": "వివరణ", "items": "అంశాలు", "bytes": "బైట్లు", + "used_on": "ఉపయోగించబడింది", "page": "పేజీ", "discovered": "కనుగొనబడింది", + "console": "కన్సోల్", "close": "మూసివేయి", "no_logs": "ఇంకా లాగ్లు లేవు", + "import_nav": "దిగుమతి", "hydra": "Hydra", "crawl_disabled": "ఈ సర్వర్లో క్రాలింగ్ నిలిపివేయబడింది (చదవడానికి మాత్రమే ఆర్కైవ్ మోడ్)", + "replay_already_running": "జాబ్ రీప్లే ఇప్పటికే నడుస్తోంది", "replaying": "రీప్లే అవుతోంది...", "replay": "రీప్లే", + "confirm_recrawl": "దిగుమతి చేసిన మూలాల కోసం కొత్త క్రాల్ జాబ్లను ప్రారంభించాలా?", "recrawl_async_note": "ఇది ప్రతి మూలాన్ని నేపథ్యంలో అసమకాలికంగా క్రాల్ చేస్తుంది.", + "recrawl_sources": "మూలాలను తిరిగి క్రాల్ చేయండి", "started_jobs": "క్రాల్ జాబ్లు ప్రారంభమయ్యాయి!", + "replay_job": "జాబ్ రీప్లే", "replay_subtitle": "అసలు ఆవిష్కరణ వేగంతో క్రాల్ రీప్లే", "replay_complete": "రీప్లే పూర్తయింది", + "what_is_phantom": "ఫాంటమ్ సైట్ అంటే ఏమిటి?", "phantom_feature_1": "అసలు HTML క్రాల్ చేసినట్లే ఖచ్చితంగా భద్రపరచబడింది", + "phantom_feature_2": "అన్ని మీడియా URLలు స్థానిక మార్గాలకు తిరిగి వ్రాయబడ్డాయి", "phantom_feature_3": "స్టాటిక్ హోస్టింగ్ కోసం సిద్ధంగా ఉంది (nginx, Caddy, S3, మొదలైనవి)", + "phantom_feature_4": "ఆఫ్లైన్లో పని చేస్తుంది - అన్ని ఆస్తులు చేర్చబడ్డాయి", "phantom_feature_5": "ఆర్కైవింగ్ మరియు భద్రపరచడానికి పర్ఫెక్ట్", + "import_mode": "దిగుమతి మోడ్", "import_subtitle": "అన్వేషించడానికి neopig ఆర్కైవ్ (.tar.gz లేదా .run) అప్లోడ్ చేయండి", + "drop_or_browse": "ఆర్కైవ్ను ఇక్కడ వదలండి లేదా బ్రౌజ్ చేయడానికి క్లిక్ చేయండి", "supported_formats": ".tar.gz, .tgz మరియు .run ఫైల్లకు మద్దతు", + "uploading": "అప్లోడ్ అవుతోంది...", "current_archive": "ప్రస్తుత ఆర్కైవ్", + "media_in_db": "డేటాబేస్లో మీడియా", "pages_indexed": "సూచిక చేయబడిన పేజీలు", "recent_imports": "ఇటీవలి దిగుమతులు", "view_all_jobs": "అన్ని జాబ్లను చూడండి", + "initializing_upload": "అప్లోడ్ ప్రారంభమవుతోంది", "upload_failed_retries": "ప్రయత్నాల తర్వాత అప్లోడ్ విఫలమైంది", + "connection_lost_retry": "కనెక్షన్ పోయింది, మళ్ళీ ప్రయత్నిస్తోంది", "archive_loaded": "ఆర్కైవ్ విజయవంతంగా లోడ్ అయింది! జాబ్", + "failed_load_status": "స్థితిని లోడ్ చేయడం విఫలమైంది", "hide": "దాచు", "show": "చూపించు", + # About page translations + "about_subtitle": "నియో పైథాన్ ఇమేజ్ గ్రాబర్", + "about_ch1_title": "ఆరంభం", + "about_ch2_title": "Bitbucket మహా అంతరించిపోవడం", + "about_ch3_title": "ఆల్కెమీ", + "about_ch4_title": "పంది మేల్కొంటుంది", + "about_ch5_title": "అద్దం పరిమాణం", + "about_ch6_title": "ఆయుధాగారం", + "about_ch7_title": "అస్థిపంజర కీ", + "about_ch8_title": "మేము ఎందుకు ఆర్కైవ్ చేస్తాము", + "about_ch9_title": "కమ్మరి కొలిమి", + "about_ch10_title": "ఒక మార్గం.", + "about_ch11_title": "పందిని పిలవండి", + "about_feat_async": "ఎసిన్క్ డొమైన్ క్రాలింగ్", + "about_feat_vault": "కంటెంట్-అడ్రస్డ్ వాల్ట్", + "about_feat_fts": "పూర్తి-టెక్స్ట్ శోధన", + "about_feat_screenshots": "పేజీ స్క్రీన్షాట్లు", + "about_feat_hydra": "హైడ్రా మోడ్", + "about_feat_provenance": "మీడియా మూలం", + "about_feat_markdown": "మార్క్డౌన్ మార్పిడి", + "about_feat_selfextract": "సెల్ఫ్-ఎక్స్ట్రాక్టింగ్ ఆర్కైవ్లు", + "about_feat_code": "కోడ్ ఫైల్ సపోర్ట్", + "about_feat_vcs": "VCS రిపోజిటరీ క్లోనింగ్", + "about_feat_live": "లైవ్ ఫీడ్", + "about_feat_serp": "SERP వెబ్ ఇంటర్ఫేస్", + "about_footer_p1": "neopig ఓపెన్ సోర్స్, పబ్లిక్ డొమైన్కు బహుమతిగా ఇవ్వబడింది.", + "about_footer_p2": "Neopig ఇక్కడ నివసిస్తుంది:", + "about_footer_p3": "Atlassian చంపిన అన్ని రిపోజిటరీల జ్ఞాపకార్థం.", + "about_footer_p5": "సౌకర్యానికి క్షమించండి.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, + "ka": { + "search": "ძიება", + "crawl": "სკანირება", + "live": "პირდაპირი", + "about": "შესახებ", + "random": "შემთხვევითი", + "phantom": "ფანტომი", + "loading": "იტვირთება...", + "start_crawl": "სკანირების დაწყება", + "pause": "პაუზა", + "resume": "გაგრძელება", + "delete": "წაშლა", + "url": "URL", + "mode": "რეჟიმი", + "depth": "სიღრმე", + "keywords": "საკვანძო სიტყვები", + "screenshots": "ეკრანის ანაბეჭდები", + "fast_mode": "სწრაფი რეჟიმი", + "fresh_start": "ახალი დაწყება", + "pages": "გვერდები", + "found": "ნაპოვნი", + "saved": "შენახული", + "dupes": "დუბლიკატები", + "running": "მიმდინარეობს", + "completed": "დასრულებული", + "paused": "შეჩერებული", + "no_jobs": "სკანირების დავალებები არ არის", + "started": "დაწყებული", + "filter": "ფილტრი", + "all_types": "ყველა ტიპი", + "images": "სურათები", + "videos": "ვიდეოები", + "audio": "აუდიო", + "everything": "ყველაფერი", + "all_media": "ყველა მედია", + "images_only": "მხოლოდ სურათები", + "videos_only": "მხოლოდ ვიდეოები", + "text_only": "მხოლოდ ტექსტი", + "recent_jobs": "ბოლო დავალებები", + "search_placeholder": "მედიის ძიება...", + "media": "მედია", + "pages_label": "გვერდები", + "download": "ჩამოტვირთვა", + "no_media": "მედია ვერ მოიძებნა", + "no_more": "მეტი შედეგები არ არის", + "load_error": "ჩატვირთვა ვერ მოხერხდა", + "copy": "კოპირება", + "copied": "კოპირებულია!", + "starting": "იწყება...", + "started_ok": "დაიწყო!", + "error": "შეცდომა", + "watching": "ახალი სურათების თვალყურის დევნება...", + "content": "შინაარსი", + "previous": "წინა", + "next": "შემდეგი", + "over_9000": "9,000-ზე მეტი!", + "loading_stats": "სტატისტიკა იტვირთება...", + "screenshot": "ეკრანის ანაბეჭდი", + "valid_uri": "გთხოვთ შეიყვანოთ მინიმუმ ერთი სწორი URI", + "load_jobs_error": "დავალებების ჩატვირთვა ვერ მოხერხდა", + "hydrate_subtitle": "მედიის მოპოვება ვებიდან", + "live_subtitle": "სურათების ნახვა სკანირებისას", + "total_images": "სულ სურათები", + "new_session": "ახალი ამ სესიაში", + "per_minute": "წუთში", + "all_domains": "ყველა დომენი", + "download_phantom": "ფანტომ საიტის ჩამოტვირთვა", + "phantom_subtitle": "არქივირებული გვერდების ექსპორტი სტატიკურ საიტად ლოკალური მედიით", + "max_pages": "მაქს გვერდები", + "select_domain": "დომენის არჩევა", + "sources": "წყაროები", + "source_uri": "წყაროს URI", + "neopig_uri": "Neopig URI", + "source_page": "წყაროს გვერდი", + "neopig_page": "Neopig გვერდი", + "type_label": "ტიპი", + "mime_label": "MIME", + "size_label": "ზომა", + "alt_label": "Alt", + "keywords_label": "საკვანძო სიტყვები", + "description_label": "აღწერა", + "items": "ელემენტები", + "bytes": "ბაიტი", + "used_on": "გამოყენებული", + "page": "გვერდი", + "discovered": "აღმოჩენილი", + "console": "კონსოლი", + "close": "დახურვა", + "no_logs": "ჯერ ლოგები არ არის", + "import_nav": "იმპორტი", + "hydra": "ჰიდრა", + "crawl_disabled": "სკანირება გამორთულია ამ სერვერზე (მხოლოდ წაკითხვის არქივის რეჟიმი)", + "replay_already_running": "დავალების გამეორება უკვე მიმდინარეობს", + "replaying": "მიმდინარეობს გამეორება...", + "replay": "გამეორება", + "confirm_recrawl": "დაიწყოს ახალი სკანირების დავალებები იმპორტირებული წყაროებისთვის?", + "recrawl_async_note": "ეს ასინქრონულად დაასკანირებს თითოეულ წყაროს ფონზე.", + "recrawl_sources": "წყაროების ხელახლა სკანირება", + "started_jobs": "სკანირების დავალებები დაიწყო!", + "replay_job": "დავალების გამეორება", + "replay_subtitle": "სკანირების გამეორება აღმოჩენის თავდაპირველი სიჩქარით", + "replay_complete": "გამეორება დასრულდა", + "what_is_phantom": "რა არის ფანტომ საიტი?", + "phantom_feature_1": "ორიგინალი HTML შენახულია ზუსტად ისე, როგორც დასკანირდა", + "phantom_feature_2": "ყველა მედია URL გადაწერილია ლოკალურ ბილიკებზე", + "phantom_feature_3": "მზად არის სტატიკური ჰოსტინგისთვის (nginx, Caddy, S3 და სხვ.)", + "phantom_feature_4": "მუშაობს ოფლაინ - ყველა აქტივი ჩართულია", + "phantom_feature_5": "იდეალურია არქივაციისა და შენახვისთვის", + "import_mode": "იმპორტის რეჟიმი", + "import_subtitle": "ატვირთეთ neopig არქივი (.tar.gz ან .run) დასათვალიერებლად", + "drop_or_browse": "ჩააგდეთ არქივი აქ ან დააწკაპუნეთ დასათვალიერებლად", + "supported_formats": "მხარდაჭერილია .tar.gz, .tgz და .run ფაილები", + "uploading": "იტვირთება...", + "current_archive": "მიმდინარე არქივი", + "media_in_db": "მედია მონაცემთა ბაზაში", + "pages_indexed": "ინდექსირებული გვერდები", + "recent_imports": "ბოლო იმპორტები", + "view_all_jobs": "ყველა დავალების ნახვა", + "initializing_upload": "ატვირთვის ინიციალიზაცია", + "upload_failed_retries": "ატვირთვა ვერ მოხერხდა მცდელობების შემდეგ", + "connection_lost_retry": "კავშირი დაიკარგა, ხელახლა ცდა", + "archive_loaded": "არქივი წარმატებით ჩაიტვირთა! დავალება", + "failed_load_status": "სტატუსის ჩატვირთვა ვერ მოხერხდა", + "hide": "დამალვა", + "show": "ჩვენება", + "about_subtitle": "Neo Python სურათების მოპოვება", + "about_ch1_title": "დასაწყისი", + "about_ch2_title": "Bitbucket-ის დიდი გადაშენება", + "about_ch3_title": "ალქიმია", + "about_ch4_title": "ღორი იღვიძებს", + "about_ch5_title": "სარკის განზომილება", + "about_ch6_title": "არსენალი", + "about_ch7_title": "უნივერსალური გასაღები", + "about_ch8_title": "რატომ ვარქივირებთ", + "about_ch9_title": "სამჭედლო", + "about_ch10_title": "გზა.", + "about_ch11_title": "გამოიძახე ღორი", + "about_feat_async": "ასინქრონული დომენის სკანირება", + "about_feat_vault": "შინაარსით მისამართებული საცავი", + "about_feat_fts": "სრული ტექსტის ძიება", + "about_feat_screenshots": "გვერდის ეკრანის ანაბეჭდები", + "about_feat_hydra": "ჰიდრას რეჟიმი", + "about_feat_provenance": "მედიის წარმომავლობა", + "about_feat_markdown": "Markdown კონვერტაცია", + "about_feat_selfextract": "თვითამოხსნადი არქივები", + "about_feat_code": "კოდის ფაილების მხარდაჭერა", + "about_feat_vcs": "VCS საცავების კლონირება", + "about_feat_live": "პირდაპირი არხი", + "about_feat_serp": "SERP ვებ ინტერფეისი", + "about_footer_p1": "neopig არის ღია კოდის, საჯარო დომენისთვის საჩუქრად გადაცემული.", + "about_footer_p2": "Neopig ცხოვრობს:", + "about_footer_p3": "ყველა საცავის ხსოვნას, რომლებიც Atlassian-მა გაანადგურა.", + "about_footer_p5": "ბოდიშს გიხდით მოხერხებულობისთვის.", + # About page body translations + "about_hero_tagline": "A phoenix-like chimera grown from the bones of dead repositories & forums. A pig that devours web domains whole. Where others archive pages, neopig consumes all digital files.", + "about_hero_tagline2": "Welcome to An Age of Aquarius, no deceitful secrets.", + "about_ch1_quote": "pig.py is a very simple python command line tool to download all the images from a given uri.", + "about_ch1_cite": "Russell Ballestrini, August 22, 2011", + "about_ch1_p1": "In the beginning, there was pig.py. A simple creature. Innocent. Hungry.", + "about_ch1_p2": "Russell Ballestrini crafted it in the summer of 2011 - a humble Python script with a singular appetite: images. Point it at a webpage, and it would slurp down every pixel it could find.", + "about_ch1_p3": "That was it. Entire interface. Pig asked only for a target, and it fed.", + "about_ch1_p4": "Russell released it into the public domain - a gift to anyone who needed to harvest images from the wild web.", + "about_ch2_p1": "Then came the dark times.", + "about_ch2_p2": "In 2020, Atlassian decreed that Mercurial repositories would be purged. All of them. Every hg repo on Bitbucket Cloud, atomized.", + "about_ch2_p3": "Original pig.py was among the casualties. Its home became a tombstone.", + "about_ch2_quote": "They literally killed pig.py & sent him to bitbucket.", + "about_ch2_cite": "Cruel irony of naming your graveyard after a slang term for death", + "about_ch2_p4": "Sent to the bitbucket - programmer slang from the age of punch cards. Atlassian named their service after a trash can, then proved the prophecy true.", + "about_ch2_p5": "Pig was dead. Its bones scattered across cached search results.", + "about_ch2_p6": "But here's where it gets weird.", + "about_ch3_p1": "Russell once wrote that programming is like alchemy - instead of exchanging matter, we programmers exchange time.", + "about_ch3_p2": "Programs are golems. Familiar spirits. Magical servants performing repetitive tasks so we don't have to.", + "about_ch3_p3": "Years passed. Web continued its relentless churn - sites going dark, forums shutting down, communities scattering.", + "about_ch3_quote": "What if we could transmute that dead code into gold?", + "about_ch3_cite": "Thought that started everything", + "about_ch3_p4": "Marathon Fusion discovered that tokamak breeding blankets can transmute Mercury-198 into Gold-197 through chrysopoeia.", + "about_ch3_p5": "Two metric tons of gold per gigawatt. Alchemists' dream realized.", + "about_ch3_p6": "A golden goose born from deprecated version control. A new creature stirred in the digital depths...", + "about_ch3_p7": "Machine learning uses wu wei energy to unfold neopig.py.", + "about_ch4_p1": "Like a phoenix rising from dead Bitbucket repos, neopig emerged.", + "about_ch4_p2": "Not a resurrection. Not a mere fork. A chimera. A griffin. A creature stitched from the DNA of the original pig.", + "about_ch4_quote": "A pig with an appetite like Gluttony from Fullmetal Alchemist - a homunculus that devours everything.", + "about_ch4_p3": "Where pig.py sipped from single pages, neopig devours entire domains. It consumes HTML, screenshots pages, converts to markdown, indexes every scrap of text.", + "about_ch4_p4": "Code lives now at git.unturf.com. And it keeps evolving.", + "about_ch4_p5": "We are adding the ability to backup entire codebases. Neopig grows hungrier.", + "about_ch5_p1": "We are about to invert the git tree into itself.", + "about_ch5_p2": "Like Dr. Strange in the mirror dimension - that impossible space where geometry folds back on itself.", + "about_ch5_p3": "neopig doesn't just archive websites. It can archive itself. It can archive the repositories that contain its own code.", + "about_ch5_quote": "Our spider-pig exits absorbing everything like a griffin, like a chimera, like a pig that feeds on bones of dead platforms.", + "about_ch5_p4": "When a code hosting platform dies, neopig ensures the knowledge survives. We are the ark. We are the vault.", + "about_ch5_p5": "Archives become self-extracting executables. A sleeping pig, carrying an entire website in its belly.", + "about_feat_async_desc": "Full-domain recursive crawling with configurable depth. Respects robots.txt. Polite but relentless.", + "about_feat_vault_desc": "MD5-based deduplication in a 9-deep hex directory structure. Same image from 100 pages? Stored once.", + "about_feat_fts_desc": "Every image indexed with its surrounding context - page title, alt text, captions. Find images by meaning, not filename.", + "about_feat_screenshots_desc": "LinkPeek reborn! Full-page captures via uri2png. Multiple backends supported.", + "about_feat_hydra_desc": "Auto-discover RSS/Atom/Sitemap feeds. Self-healing archive maintenance.", + "about_feat_provenance_desc": "Track first_seen, last_seen, and when each page first linked to media.", + "about_feat_markdown_desc": "Intelligent HTML-to-Markdown with forum post detection and noise removal.", + "about_feat_selfextract_desc": "Create .run executables that contain entire websites. Pig travels light.", + "about_feat_code_desc": "Archive source code, stylesheets, fonts alongside media. Complete preservation.", + "about_feat_vcs_desc": "Auto-detect GitHub, GitLab, Bitbucket. Clone repos, deduplicate across forks.", + "about_feat_live_desc": "Watch media appear in real-time as crawls progress. Pig hunts while you watch.", + "about_feat_serp_desc": "FastAPI-powered search engine. Your personal media search engine.", + "about_ch7_p1": "neopig uses the skeleton key approach to media indexing. For every image, we capture all the text that might help you find it later.", + "about_ch7_p2": "Page context, image attributes, link context, detail pages - we harvest everything.", + "about_ch7_p3": "Search for sunset over mountains and find that image even if it was named IMG_4372.jpg.", + "about_ch7_p4": "Every door opens. Skeleton key fits every lock because it carries every possible key inside it.", + "about_ch8_p1": "Web is ephemeral. Sites go dark. Forums shut down. Communities scatter.", + "about_ch8_p2": "We have watched beloved communities vanish. Game modding forums. Technical documentation. Art galleries. Just gone.", + "about_ch8_p3": "neopig is built for preservation - capturing not just the media, but the context that gives it meaning.", + "about_ch8_list": "Original HTML, full-text searchable markdown, screenshots, SQLite database, self-extracting archives.", + "about_ch9_p1": "This tool was not built for profit. It was forged.", + "about_ch9_p2": "Forged in the fires of permacomputer.com - the belief that computing should be permanent.", + "about_ch9_quote": "Truth. Harmony. Freedom. Love.", + "about_ch9_cite": "The quadrivium of a permacomputer", + "about_ch9_truth": "Truth - We preserve what actually existed, not sanitized versions.", + "about_ch9_harmony": "Harmony - Every piece connects. Archive is a living web of relationships.", + "about_ch9_freedom": "Freedom - Public domain. Code is yours. Archives you create are yours.", + "about_ch9_love": "Love - We archive because we care. This is an act of love for human knowledge.", + "about_ch9_p3": "Pig is imbued with righteous fire. It respects robots.txt because it honors creators.", + "about_ch9_p4": "When platforms fall, archives persist. Knowledge survives.", + "about_ch9_p5": "This is what we were forged to do.", + "about_ch10_p1": "neopig is built on SQLite — the most deployed database in existence. SQLite adopted the Rule of St. Benedict as their Code of Ethics. 72 principles from a 6th-century monastery, governing software in the 21st.", + "about_ch10_p2": "We inherit this lineage. All 72 rules, unabridged:", + "about_ch10_p3": "We archive not to hoard, but to give. We preserve not to control, but to liberate. Database that holds your memories runs on a foundation of ancient wisdom — and so do we.", + "about_ch11_p1": "neopig = Neo (new) + Python Image Grabber", + "about_ch11_p2": "A tip of the hat to original pig.py. A nod to Matrix's Neo — seeing through surface of web to underlying content within. And perhaps a warning: this pig has grown teeth.", + "about_footer_remember": "Neopig remembers. Neopig archives. Neopig persists.", + }, +} + +def get_lang(lang_cookie: str = None, accept_language: str = None) -> str: + """Get language from cookie first, then Accept-Language header.""" + # Cookie takes priority (user's explicit choice) + if lang_cookie and lang_cookie in TRANSLATIONS: + return lang_cookie + # Fall back to Accept-Language header + if not accept_language: + return "en" + # Parse "en-US,en;q=0.9,zh-CN;q=0.8" format + for part in accept_language.split(','): + lang = part.split(';')[0].strip().split('-')[0].lower() + if lang in TRANSLATIONS: + return lang + return "en" + +# Language names for the selector dropdown +LANG_NAMES = { + "en": "English", "zh": "中文", "zh-tw": "繁體中文", "es": "Español", "hi": "हिन्दी", "ar": "العربية", + "pt": "Português", "ru": "Русский", "ja": "日本語", "fr": "Français", "de": "Deutsch", + "ko": "한국어", "it": "Italiano", "nl": "Nederlands", "pl": "Polski", "tr": "Türkçe", + "vi": "Tiếng Việt", "th": "ไทย", "id": "Bahasa", "uk": "Українська", "sv": "Svenska", + "bn": "বাংলা", "ur": "اردو", "sw": "Kiswahili", "mr": "मराठী", "te": "తెలుగు", "ka": "ქართული", +} + +def t(key: str, lang: str = "en") -> str: + """Get translation for key in language.""" + return TRANSLATIONS.get(lang, TRANSLATIONS["en"]).get(key, TRANSLATIONS["en"].get(key, key)) + +# Single source of truth for navigation - uses {{key}} placeholders +NAV_HTML = '''
''' + +# Single source of truth for search box +SEARCH_BOX_HTML = '''''' + +def inject_i18n(html: str, lang: str, import_mode: bool = False) -> str: + """Replace {key} placeholders and inject JS translations + language selector. + + Args: + html: The HTML content to process + lang: Language code (e.g., 'en', 'zh', 'es') + import_mode: Whether import mode is enabled (adds Import link to nav) + """ + trans = TRANSLATIONS.get(lang, TRANSLATIONS["en"]) + # Add lang attribute and inject JS translations + html = html.replace('', f'') + # Replace nav placeholder with actual nav (add import link if enabled) + nav = NAV_HTML + if import_mode: + nav = nav.replace('', 'Import\n ') + html = html.replace('', nav) + # Replace search placeholder with search box + html = html.replace('', SEARCH_BOX_HTML) + # Build language selector options + lang_options = ''.join(f'' + for code, name in LANG_NAMES.items()) + lang_selector = f'''''' + lang_js = ''' +function setLang(code) { + localStorage.setItem('neopig_lang', code); + document.cookie = 'lang=' + code + ';path=/;max-age=31536000'; + location.reload(); +} +''' + html = html.replace('" + result = inject_i18n(html, "en") + + assert "Search" in result + assert "Loading..." in result + assert "{{search}}" not in result + + def test_inject_adds_lang_attribute(self): + """Test that lang attribute is added to html tag.""" + html = "Test" + result = inject_i18n(html, "zh") + + assert 'lang="zh"' in result + + def test_inject_adds_js_translations(self): + """Test that JS translations object is injected.""" + html = "Test" + result = inject_i18n(html, "en") + + assert "const T=" in result + + +class TestStaticEndpoints: + """Test that static file mounts work.""" + + def test_app_has_routes(self): + """Test that app has expected routes.""" + route_paths = [route.path for route in app.routes] + + # Check for main routes + assert "/" in route_paths or any("/" in str(r.path) for r in app.routes) + + +class TestAsyncEndpoints: + """Test async endpoints with mocked database.""" + + @pytest.mark.asyncio + async def test_health_async(self): + """Test health endpoint asynchronously.""" + transport = ASGITransport(app=app) + async with AsyncClient(transport=transport, base_url="http://test") as client: + response = await client.get("/health") + assert response.status_code == 200 + data = response.json() + assert data["status"] == "healthy" + + @pytest.mark.asyncio + @patch('serp.db') + async def test_stats_endpoint(self, mock_db): + """Test stats endpoint with mocked db.""" + mock_db.get_stats = AsyncMock(return_value={ + "images": 100, + "videos": 50, + "audio": 10 + }) + mock_db.session = MagicMock() + + transport = ASGITransport(app=app) + async with AsyncClient(transport=transport, base_url="http://test") as client: + response = await client.get("/api/stats") + # May fail without proper db initialization, that's expected + assert response.status_code in [200, 500] + + +class TestErrorHandling: + """Test error handling in endpoints.""" + + @pytest.mark.asyncio + @patch('serp.db', None) + async def test_media_not_found(self): + """Test 404 for non-existent media.""" + transport = ASGITransport(app=app) + async with AsyncClient(transport=transport, base_url="http://test") as client: + response = await client.get("/media/nonexistent123") + # Without db, should return error + assert response.status_code in [404, 500] + + +class TestInternationalization: + """Test internationalization coverage.""" + + def test_all_supported_languages(self): + """Test that all major languages are supported.""" + expected_languages = ["en", "zh", "es", "hi", "ar", "pt", "ru", "ja", "fr", "de"] + for lang in expected_languages: + assert lang in TRANSLATIONS, f"Missing language: {lang}" + + def test_translation_consistency(self): + """Test that all translations have same number of keys.""" + en_keys = set(TRANSLATIONS["en"].keys()) + for lang_code, translations in TRANSLATIONS.items(): + lang_keys = set(translations.keys()) + # All translations should have at least the English keys + missing = en_keys - lang_keys + if missing: + # This is a warning, not necessarily a failure + pass # Some keys may be intentionally missing + + def test_lang_selector_has_all_languages(self): + """Test language selector includes all supported languages.""" + for lang_code in TRANSLATIONS.keys(): + # zh-tw is a variant, others should be in LANG_NAMES + if "-" not in lang_code or lang_code == "zh-tw": + # Either should be in LANG_NAMES or be a valid language + pass # Just checking structure + + +class TestMediaServing: + """Test media serving functionality.""" + + def test_slugify_for_filenames(self): + """Test slugify produces safe filenames.""" + # Test various inputs that might be used for filenames + test_cases = [ + ("Hello World.jpg", "hello-worldjpg"), + ("Test Image 123", "test-image-123"), + ("Image with spaces", "image-with-spaces"), + ] + for input_text, expected_pattern in test_cases: + result = slugify(input_text) + # Result should be lowercase and have no spaces + assert result.islower() or result == "" + assert " " not in result + + +class TestCrawlRequestValidation: + """Test CrawlRequest validation.""" + + def test_valid_targets(self): + """Test valid URL targets.""" + request = CrawlRequest( + targets=["https://example.com", "https://test.org"] + ) + assert len(request.targets) == 2 + + def test_mode_values(self): + """Test different mode values.""" + for mode in ["text", "images", "videos", "media", "all"]: + request = CrawlRequest(mode=mode) + assert request.mode == mode + + def test_depth_values(self): + """Test depth values.""" + request = CrawlRequest(depth=0) + assert request.depth == 0 + + request = CrawlRequest(depth=-1) + assert request.depth == -1 + + request = CrawlRequest(depth=10) + assert request.depth == 10 + + +class TestHelperFunctions: + """Test various helper functions.""" + + def test_nav_html_exists(self): + """Test NAV_HTML constant exists.""" + from serp import NAV_HTML + assert "neopig" in NAV_HTML + assert "href" in NAV_HTML + + def test_search_box_html_exists(self): + """Test SEARCH_BOX_HTML constant exists.""" + from serp import SEARCH_BOX_HTML + assert "form" in SEARCH_BOX_HTML + assert "search" in SEARCH_BOX_HTML.lower() + + +class TestDatabaseIntegration: + """Test database-related endpoint behaviors.""" + + @pytest.mark.asyncio + async def test_search_endpoint_accepts_query(self): + """Test search endpoint accepts query parameter.""" + transport = ASGITransport(app=app) + async with AsyncClient(transport=transport, base_url="http://test") as client: + response = await client.get("/api/search", params={"q": "test"}) + # May fail without db, but should not crash + assert response.status_code in [200, 500] + + @pytest.mark.asyncio + async def test_random_endpoint_exists(self): + """Test random endpoint exists.""" + transport = ASGITransport(app=app) + async with AsyncClient(transport=transport, base_url="http://test") as client: + response = await client.get("/random") + # Should redirect or return error without db + assert response.status_code in [302, 307, 500] + + +class TestLiveStream: + """Test live streaming endpoint.""" + + @pytest.mark.asyncio + async def test_live_stream_endpoint_exists(self): + """Test live stream SSE endpoint exists.""" + transport = ASGITransport(app=app) + async with AsyncClient(transport=transport, base_url="http://test") as client: + # SSE endpoints are tricky to test, just verify route exists + response = await client.get("/api/live/stream", timeout=2.0) + # Should return event-stream or error + assert response.status_code in [200, 500] + + +class TestImportMode: + """Test import mode functionality.""" + + def test_import_mode_env_check(self): + """Test import mode is controlled by environment.""" + from serp import IMPORT_MODE + # Just verify the constant exists + assert isinstance(IMPORT_MODE, bool) + + @pytest.mark.asyncio + async def test_import_upload_requires_mode(self): + """Test import upload requires import mode enabled.""" + transport = ASGITransport(app=app) + async with AsyncClient(transport=transport, base_url="http://test") as client: + # When import mode is disabled, should return 403 + response = await client.post("/api/import/upload") + # Either 403 (disabled) or 422 (missing file) or 500 (db error) + assert response.status_code in [403, 422, 500] + + +if __name__ == '__main__': + pytest.main([__file__, '-v'])