Showing preview only (789K chars total). Download the full file or copy to clipboard to get everything.
Repository: xifangczy/cat-catch
Branch: master
Commit: d4b43a426f3b
Files: 63
Total size: 761.2 KB
Directory structure:
gitextract_z1zwe3wv/
├── .github/
│ ├── FUNDING.yml
│ └── ISSUE_TEMPLATE/
│ ├── bug.yaml
│ └── 功能-添加-修改-增强-请求.md
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── README_en.md
├── README_es.md
├── _locales/
│ ├── en/
│ │ └── messages.json
│ ├── es/
│ │ └── messages.json
│ ├── ja/
│ │ └── messages.json
│ ├── pt_BR/
│ │ └── messages.json
│ ├── tr/
│ │ └── messages.json
│ ├── vi/
│ │ └── messages.json
│ ├── zh_CN/
│ │ └── messages.json
│ └── zh_TW/
│ └── messages.json
├── catch-script/
│ ├── catch.js
│ ├── i18n.js
│ ├── recorder.js
│ ├── recorder2.js
│ ├── search.js
│ └── webrtc.js
├── css/
│ ├── install.css
│ ├── mobile.css
│ ├── options.css
│ ├── popup.css
│ ├── preview.css
│ └── public.css
├── downloader.html
├── install.html
├── js/
│ ├── background.js
│ ├── content-script.js
│ ├── downloader.js
│ ├── firefox.js
│ ├── function.js
│ ├── i18n.js
│ ├── init.js
│ ├── install.js
│ ├── json.js
│ ├── m3u8.downloader.js
│ ├── m3u8.js
│ ├── media-control.js
│ ├── mpd.js
│ ├── options.js
│ ├── popup.js
│ ├── preview.js
│ └── pupup-utils.js
├── json.html
├── justfile
├── lib/
│ ├── StreamSaver.js
│ ├── base64.js
│ ├── jquery.json-viewer.js
│ ├── m3u8-decrypt.js
│ └── third-party-libraries.md
├── m3u8.html
├── manifest.firefox.json
├── manifest.json
├── mpd.html
├── options.html
├── popup.html
├── preview.html
└── tools/
└── sync-locales.js
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
custom: [https://paypal.me/o2bmm]
================================================
FILE: .github/ISSUE_TEMPLATE/bug.yaml
================================================
name: Bug 报告 Bug Report
description: 创建一个bug报告. File a bug report
body:
- type: input
id: version
attributes:
label: 扩展版本号 extension version
placeholder: e.g. vX.Y.Z
- type: dropdown
id: browser
attributes:
label: 浏览器 browser
options:
- Google Chrome
- Microsoft Edge
- Microsoft Edge (Android)
- Firefox
- Firefox (Android)
- Chromium
- 360浏览器
- 其他基于 Chromium 的浏览器 / Other Chromium-based browsers
validations:
required: true
- type: input
id: browserVersion
attributes:
label: 浏览器版本号 browser version
placeholder: e.g. vX.Y.Z
- type: input
id: url
attributes:
label: 涉及网址 related URL
placeholder: e.g. https://example.com
description: 请提供发生问题的网址 需要授权登陆才能播放的请通过邮箱提交bug
- type: checkboxes
id: checklist
attributes:
label: Checklist
options:
- label: 我已在 [issues](https://github.com/xifangczy/cat-catch/issues) 通过搜索, 未找到解决办法。 The issue observed is not already reported by searching on Github under [issues](https://github.com/xifangczy/cat-catch/issues)
required: true
- label: 我已查看 [FAQ](https://github.com/xifangczy/cat-catch/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98-FAQ) 未找到解决办法。 I've checked the [FAQ](https://github.com/xifangczy/cat-catch/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98-FAQ) but couldn't find a solution.
required: true
- type: textarea
id: description
attributes:
label: 请详细描述问题 What actually happened?
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/功能-添加-修改-增强-请求.md
================================================
---
name: 功能 添加/修改/增强 请求
about: 请求一个功能修改或添加
title: ''
labels: ''
assignees: ''
---
** 详细描述想要添 加/修改/增强 的功能 **
================================================
FILE: .gitignore
================================================
# 构建产物
build/
dist/
*.crx
*.zip
*.pem
================================================
FILE: CHANGELOG.md
================================================
## 更新说明
### 2.6.6
[Updated] 感谢 @Oleada1 完善翻译
[Updated] 增强 深度搜索 现在可以找到更多资源
[Fixed] 修复 firefox无法视频录制问题
[Fixed] 修复 录制视频 无法弹出下载问题
[Fixed] 修复 深度搜索 导致网页无法正常使用问题
[Fixed] 修复 屏蔽列表 失效问题
[Fixed] 修复 edge Brave等浏览器 使用在线ffmpeg 文件为空问题
### 2.6.5
[Added] 部分网站不希望被本扩展抓取 添加 全局强制屏蔽 [屏蔽列表](https://o2bmm.gitbook.io/cat-catch/blockedsite)
[Added] 增加土耳其语 感谢 @ilker-binzet
[Added] 增加西班牙语 感谢 @Oleada1
[Fixed] 部分浏览器 侧边栏无法使用问题
[Fixed] 发送到 Aria2 User-Agent 传递错误
[Fixed] 模板标签替换 双引号处理错误
[Fixed] 导入配置时部分设置丢失问题
[Fixed] 深度搜索导致部分网站无法正常使用问题
### 2.6.4
[Updated] webrtc 录制脚本 更新
[Updated] 深度搜索脚本 更新
[Updated] 更新日语 感谢@hmaoraze
[Added] 支持 MQTT 协议 感谢@jetsung
[Added] 筛选 删除重复文件名
[Added] 始终打开 深度搜索 选项 (慎用)
[Added] 弹出模式 可选择页面
[Added] 筛选页面 支持时长排序
### 2.6.3
[Fixed] Chromium 114 版本以下缺少 `sidePanel` 功能,导致扩展无法使用
### 2.6.2
[Added] m3u8 解析器 录制失败重试功能 (测试)
[Added] m3u8 解析器 尝试估算文件大小
[Added] 增加 其他设置 `使用侧边栏` 选项。从 popup 模式改为浏览器侧边栏打开扩展 (不支持 firefox)
[Updated] m3u8 预览现在支持 hevc/h265 编码
[Updated] 深度搜索 支持解析 vimeo playlist.json
[Changed] 重构 缓存捕捉 脚本 减少头部数据缺失问题
[Changed] 重构 排除重复的资源 减少资源占用
[Fixed] 缓存捕捉脚本导致视频无法播放问题
[Deleted] m3u8 解析器 删除了旧版本下载器
[Deleted] 启用新弹出页 删除旧弹出页
### 2.6.1
[Changed] 对手机浏览器进行一些适配
### 2.6.0
[Added] 全新的弹出页面(`弹出`按钮) 文件预览/筛选帮助你下载需要的文件 (设置`feat newPopup`关闭新版)
[Changed] 增强数据发送功能,现在能自定义发送数据 感谢 @helson-lin 的支持
[Changed] 正则匹配 现在能获取到请求头
[Changed] 支持夸克浏览器 (部分功能不可用)
[Updated] 深度搜索脚本 找到更多资源
[Fixed] Fifefox 导入功能 bug 导致扩展不可用
[Fixed] 偶尔会弹出多个 ffmpeg 页面的 bug
[Fixed] 下载器 打开`边下边存` 无法自动关闭的 bug
### 2.5.9
[Added] 增加屏蔽网址功能 添加不希望开启扩展的网站 (可设为白名单, 只允许添加网址开启扩展)
[Fixed] 新版下载器 下载大文件时 出错 #610
[Changed] 限制每页面最大储存 9999 条资源
[Changed] 设置增加导航栏
[Changed] 自动下载 允许自定义保存文件名
### 2.5.8
[Changed] 如果资源 url 不存在文件名 尝试使用页面标题作为文件名
### 2.5.7
[Fixed] 自定义保存文件名使用 `/` 无法创建目录
[Changed] firefox 升级 manifest v3
[Changed] firefox 128 以上版本 支持使用深度搜索 缓存录制 等脚本功能
[Fixed] firefox 无法发送到在线 ffmpeg 问题
[Added] 重构 猫抓下载器 如需旧版本请在设置 关闭 `Test version` 选项
[Added] `URL Protocol m3u8dl` `调用程序` 增加下载前确认参数设置
[Added] m3u8 为疑似密钥增加验证密钥功能
[Changed] 增强 深度搜索 现在能找到更多疑似密钥
### 2.5.6
[Fixed] m3u8 解析器 自动关闭 bug #531
[Fixed] chrome 130 自定义 url 新规范导致 `m3u8dl://` 调用失败 #528
[Fixed] m3u8 解析器 文件不正确无法解析 造成死循环占用 CPU 问题
[Changed] 猫抓下载器 添加更多请求头 增加下载成功率
### 2.5.5
[Fixed] 修复一个严重 bug #483
[Added] 在线 ffmpeg 提供服务器选择
[Fixed] m3u8 解析器 文件名存在`|`字符 无法下载问题
[Changed] 发送数据 提供完整请求头
### 2.5.4
[Added] m3u8DL 增加切换 RE 版本 (RE 版 需[URLProtocol](https://github.com/xifangczy/URLProtocol))
[Added] 录制相关脚本 增加码率设置
[Fixed] 深度搜索 脚本错误导致无法使用
[Fixed] m3u8 解析器录制直播 录制时间显示错误
### 2.5.3
[Added] 增加`弹出`模式 (以新窗口打开资源列表页面)
[Added] 增加`调用本地程序`设置, 程序没有调用协议, 可以使用[URLProtocol](https://github.com/xifangczy/URLProtocol)帮助程序注册调用协议。具体使用方法查看 [调用本地协议](https://o2bmm.gitbook.io/cat-catch/docs/invoke)
[Added] 下载器 增加`边下边存`选项 可以用来下载一些直播视频链接
[Added] 现在使用`深度搜索` 或其他脚本得到的疑似密钥, 直接显示在 popup 页面 `疑似密钥` 标签内。
[Added] 增加 葡萄牙语
[Changed] 重写 `录制webRTC` 脚本
[Changed] `m3u8解析器` `下载器`页面内更改设置不会被储存。所有设置更改统一到扩展设置页面。
[Changed] storage.local 更改为 storage.session 以减少 IO 错误导致扩展无法使用.(要求 chrome 104 以上)
[Changed] 优化与 ffmpeg 网页端的通信, 避免多任务时的数据错乱。
(请提前打开 [在线 ffmpeg](https://ffmpeg.bmmmd.com/) ctrl+f5 刷新页面 避免页面缓存造成的问题)
[Changed] 稍微增大一些按钮图标 不再训练大家的鼠标精准度 🙄...如果你不喜欢想还原 设置-自定义 css 填入 `body{font-size:12px;width:550px;}.icon,.favicon{width:18px;height:18px;}.DownCheck{width:15px;height:15px;}`
### 2.5.2
[Added] 添加测试功能 数据发送 嗅探数据和密钥发送到指定地址
[Added] 替换标签 增加 `${origin}`
[Added] 显示 图标数字角标 开关
[Fixed] 猫抓下载器 小部分网站需要指定 range
[Fixed] 修复 标题作为文件名 文件名含有非法字符问题 #339
### 2.5.1
[Added] 多语言 增加繁体中文
[Fixed] 修复 深度搜索 死循环 bug
[Fixed] 兼容低版本 chromium 缺少 API 导致扩展无法使用
[Changed] popup 页面 现在能合并两个 m3u8 文件
### 2.5.0
[Added] 多语言支持
[Changed] m3u8 解析 新下载器 性能优化
[Fixed] 视频捕捉 不使用`从头捕获`也会丢掉头部数据的问题
[Changed] 深度搜索 现在能找到更多密钥
### 2.4.9
[Fixed] `$url$` 标签 修复(自动更新成`${url}`) #281
[Fixed] 修复 加密 m3u8 存在 EXT-X-MAP 标签,解密会失败的 bug
[Added] 设置页面 添加自动合并 m3u8 选项 #286 (测试)
[Added] 增加录制 webRTC 流脚本 更多功能-录制 webRTC (测试)
### 2.4.8
[Fixed] 修复 m3u8 新下载器 ${referer} 标签问题 #272
[Fixed] 修复 m3u8 新下载器 全部重新下载 bug #274
[Fixed] 修复 m3u8 新下载器 下载失败丢失线程 #276
[Fixed] 修复 m3u8 新下载器 勾选 ffmpeg 转码 下载超过 2G 大小 不会强制下载
[Changed] 完善 Aria2 Rpc 协议 增加密钥 和 cookie 支持
[Added] 增加${cookie}标签 如果资源存在 cookie
### 2.4.7
[Fixed] 缓存捕获 延迟获取标题 #241
[Fixed] 特殊字符造成无法下载的问题 #253
[Fixed] m3u8 解析器 没有解析出全部嵌套 m3u8 的 bug #265
[Added] firefox 增加 privacy 协议页面 第一次安装显示
[Added] 增加 Aria2 Rpc 协议下载 感谢 @aar0u
[Changed] 重写录制脚本
[Changed] 增强深度搜索
[Changed] m3u8 解析器 现在可以自定义头属性
[Changed] m3u8 解析器 最大下载线程调整为 6
[Changed] m3u8 解析器 默认开启新下载器
### 2.4.6
[Fixed] 缓存捕获 多个视频问题 #239
[Changed] 更新 mux m3u8-decrypt mpd-parser 版本
[Changed] 设置 刷新跳转清空当前标签抓取的数据 现在可以调节模式
[Changed] firefox 版本要求 113+
[test] m3u8 解析器 增加测试项 `重构的下载器`
### 2.4.5
[Changed] 增强 深度搜索 解决"一次性"m3u8
[Changed] m3u8 解析器 下载范围允许填写时间格式 HH:MM:SS
[Added] 增加 缓存捕获 从头捕获、正则提取文件名、手动填写文件名
[Added] 增加 设置 正则匹配 屏蔽资源功能
[Added] 增加 下载器 后台打开页面设置
[deleted] 删除 "幽灵资源" 设定 不确定来源的资源归于当前标签
[Fixed] 修复 缓存捕获 清理缓存
[Fixed] 修复 正则匹配 有时会匹配失效(lastIndex 没有复位)
[Fixed] 修复 媒体控制 有时检测不到媒体
[Fixed] 修复 重置所有设置 丢失配置
[Fixed] 修复 firefox 兼容问题
### 2.4.4
[Changed] 增强 深度搜索
[Fixed] m3u8 解析器 无限触发错误的 bug
### 2.4.3
[Fixed] 修复 缓存捕获 获取文件名为空
[Changed] 增强 深度搜索 可以搜到更多密钥
[Changed] 增强 注入脚本 现在会注入到所有 iframe
[Changed] 删除 youtube 支持 可以使用缓存捕捉
### 2.4.2
[Added] 设置页面增加 排除重复的资源 选项
[Added] popup 增加暂停抓取按钮
[Changed] 超过 500 条资源 popup 可以中断加载
[Changed] 调整默认配置 默认不启用 ts 文件 删除多余正则
[Changed] 正则匹配的性能优化
[Fixed] 修复 m3u8 解析器录制功能 直播结束导致自动刷新页面丢失已下载数据的问题
[Fixed] 修复 m3u8 解析器边下边存和 mp4 转码一起使用 编码不正确的 bug
[Fixed] 修复 扩展重新启动后 造成的死循环
### 2.4.1
[Added] 捕获脚本 现在可以通过表达式获取文件名
[Changed] 删除 打开自动下载的烦人提示
[Changed] 优化 firefox 下 资源严重占用问题
[Fixed] 猫抓下载器 不再限制 2G 文件大小 #179
### 2.4.0
[Added] 加入自定义 css
[Added] 音频 视频 一键合并
[Added] popup 页面正则筛选
[Added] 自定义快捷键支持
[Added] popup 页面支持正则筛选
[Added] m3u8 碎片文件自定义参数
[Changed] 筛选 现在能隐藏不要的数据 而不是取消勾选
[Changed] 重写优化 popup 大部分代码
[Changed] 重写初始化部分代码
[Changed] m3u8 解析器 默认设置改为 ffmpeg 转码 而不是 mp4 转码
[Changed] 删除 调试模式
[Fixed] 深度搜索 深度判断的 bug
[Fixed] 很多 bug
### 2.3.3
[Changed] 解析器 m3u8DL 默认不载入设置参数 #149
[Changed] 可以同时打开多个捕获脚本
[Changed] popup 页面 css 细节调整 #156
[Fixed] 清空不会删除角标的 bug
[Fixed] 替换标签中 参数内包含 "|" 字符处理不正确的 bug
### 2.3.2
[Changed] 设置 增加自定义文件名 删除标题正则提取
[Added] 支持深色模式 #134
[Added] popup 增加筛选
[Fixed] 修复非加密的 m3u8 无法自定义密钥下载
[Fixed] mp4 转码删除 创建媒体日期 属性 #142
### 2.3.1
[Added] 新的替换标签
[Changed] 边下边存 支持 mp4 转码
[Fixed] 修复 BUG #123 #117 #114 #124
### 2.3.0
[Added] m3u8 解析器 边下边存
[Added] m3u8 解析器 在线 ffmpeg 转码
[Fixed] 特殊文件名 下载所选无法下载
[Fixed] m3u8 解析器 某些情况无法下载文件
[Fixed] Header 属性提取失败
[Fixed] 添加抓取类型出错 #109
[Changed] 修改 标题修剪 默认配置
### 2.2.9
[Fixed] 修复 m3u8DL 调用命令范围参数 --downloadRange 不正确
[Added] 正则修剪标题 [#90](https://github.com/xifangczy/cat-catch/issues/94)
[Added] 下载前选择保存目录 选项
[Fixed] m3u8 解析器 部分情况无法下载 ts 文件
[Changed] `复制所选`按钮 现在能被 `复制选项`设置影响
### 2.2.8
[Changed] m3u8 解析器现在会记忆你设定的参数
[Changed] 幽灵数据 更改为 其他页面(幽灵数据同样归类其他页面)
[Changed] popup 页面的性能优化
[Changed] 增加 始终不启用下载器 选项
[Fixed] 修复 使用第三方下载器猫抓下载器也会被调用
### 2.2.7
[Fixed] 修正 文件大小显示不正确
[Changed] 性能优化
[Fixed] 修复 没有正确清理冗余数据 导致 CPU 占用问题
### 2.2.6
[Added] 深度搜索 尝试收集 m3u8 文件的密钥 具体使用查看 [用户文档](https://o2bmm.gitbook.io/cat-catch/docs/m3u8parse#maybekey)
[Added] popup 资源详情增加二维码按钮
[Added] m3u8 解析器 自定义文件名 只要音频 另存为 m3u8DL 命令完善 部分代码来自 [#80](https://github.com/xifangczy/cat-catch/pull/80)
[Added] 非 Chrome 扩展商店版本 现在支持 Youtube
[Added] Firefox 版 现在支持 m3u8 视频预览
[Fixed] m3u8 解析器 超长名字无法保存文件 [#80](https://github.com/xifangczy/cat-catch/pull/80)
[Fixed] 修正 媒体控制 某些情况检测不到视频
### 2.2.5
[Fixed] 修复 mpd 解析器丢失音轨 [#70](https://github.com/xifangczy/cat-catch/issues/70)
[Changed] 优化在网络状况不佳下的直播 m3u8 录制
[Changed] 更新 深度搜索 search.js 进一步增加分析能力
[Changed] 减少 mp4 转码时内存占用
[Changed] 自定义调用本地播放器的协议
### 2.2.4
[Changed] 更新 hls.js
[Changed] m3u8 文件现在能显示更多媒体信息
[Added] 增加 Dash mpd 文件解析
[Added] 增加 深度搜索 脚本
[Fixed] 修复 捕获按钮偶尔失效
### 2.2.3
[Added] m3u8 解析器增加录制直播
[Added] m3u8 解析器增加处理 EXT-X-MAP 标签
[Added] 新增捕获脚本 recorder2.js 需要 Chromium 104 以上版本
[Added] 增加选项 刷新、跳转到新页面 清空当前标签抓取的数据
[Fixed] 修正 m3u8 解析器使用 mp4 转码生成的文件,媒体时长信息不正确
### 2.2.2
[Changed] m3u8 解析器使用 hls.js 替代,多项改进,自定义功能添加
[Changed] 分离下载器和 m3u8 解析器
[Fixed] 修复 m3u8 解析器`调用N_m3u8DL-CLI下载`按钮失效
[Fixed] 修复幽灵数据随机丢失问题
[Fixed] 修复 m3u8 解析器 key 下载器在某些时候无法下载的问题
### 2.2.1
[Fixed] 修复浏览器字体过大,按钮遮挡资源列表的问题。
[Fixed] 调整关键词替换
[Fixed] 修复 Firefox download API 无法下载 data URL 问题
[Changed] m3u8 解析器多个 KEY 显示问题
[Changed] 视频控制现在可以控制其他页面的视频
[Changed] 视频控制现在可以对视频截图
[Changed] 自定义复制选项增加 其他文件 选项
[Added] m3u8 解析器现在可以转换成 mp4 格式
### 2.2.0
[Fixed] 修复文件名出现 "~" 符号 导致 chrome API 无法下载
[Fixed] 修复 Firefox 中 popup 页面下载按钮被滚动条遮挡
[Fixed] 储存路劲有中文时 m3u8dl 协议调用错误
[Changed] 增加/删除一些默认配置
[Added] 增加操控当前网页视频功能
[Added] 增加自定义复制选项
### 2.1.2
[Changed] 细节调整
### 2.1.1
[Changed] 调整正则匹配 现在能提取多个网址
[Fixed] 修复选择脚本在 m3u8 解析器里不起作用 并提高安全性
[Fixed] m3u8 解析器在 Firefox 中不能正常播放 m3u8 视频
[Fixed] 修复 Firefox 中手机端模拟无法还原的问题
[Fixed] 修复初始化错误 BUG 导致扩展失效
### 2.1.0
[Changed] 新增 referer 获取 不存在再使用 initiator 或者直接使用 url
[Changed] 重新支持 Firefox 需要 93 版本以上
[Changed] chromium 内核的浏览器最低要求降为 93 小部分功能需要 102 版本以上,低版本会隐藏功能按钮
[Fixed] 部分 m3u8 key 文件解析错误问题
[Fixed] 修复 保存文件名使用网页标题 选项在 m3u8 解析器里不起作用
### 2.0.0
[Changed] 模拟手机端,现在会修改 navigator.userAgent 变量
[Added] 视频捕获功能,解决被动嗅探无法下载视频的问题
[Added] 视频录制功能,解决被动嗅探无法下载视频的问题
[Added] 支持 N_m3u8DL-CLI 的 m3u8dl://协议
[Added] m3u8 解析器增强,现在能在线合并下载 m3u8 文件
[Added] popup 页面无法下载的视频,会交给 m3u8 解析器修改 Referer 下载
[Added] popup 页面和 m3u8 页面可以在线预览 m3u8
[Added] json 查看工具,和 m3u8 解析器一样在 popup 页面显示图标进入
[Fixed] 无数 BUG
[Fixed] 解决 1.0.17 以来会丢失数据的问题
[Fixed] 该死的 Service Worker... 现在后台被杀死能立刻唤醒自己... 继续用肮脏的手段对抗 Manifest V3
### 1.0.26
[Fixed] 解决关闭网页不能正确删除当前页面储存的数据问题
### 1.0.25
[Changed] 正则匹配增强
[Changed] Heart Beat
[Added] 手机端模拟,手机环境下有更多资源可以被下载。
[Added] 自动下载
### 1.0.24
[Added] 导入/导出配置
[Added] Heart Beat 解决 Service Worker 休眠问题
[Added] firefox.js 兼容层 并上架 Firefox
### 1.0.23
[Added] 正则匹配
### 1.0.22
[Fixed] 一个严重 BUG,导致 Service Worker 无法使用 \*
### 1.0.21
[Added] 自定义抓取类型
[Refactor] 设置页面新界面
### 1.0.20
[Added] 抓取 image/\*类型文件选项
### 1.0.19
[Fixed] 重构导致的许多 BUG \*
### 1.0.18
[Added] 抓取 application/octet-stream 选项
[Refactor] 重构剩余代码
### 1.0.17
[Refactor] Manifest 更新到 V3 部分代码
[Added] 使用 PotPlayer 预览媒体
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
================================================
FILE: README.md
================================================
<p align="center"> [中文] | [<a href="README_en.md">English</a>] | [<a href="README_es.md">Español</a>]</p>
# 📑简介
猫抓(cat-catch) 资源嗅探扩展,能够帮你筛选列出当前页面的资源。
# 📖安装地址
## 🐴Chrome
https://chrome.google.com/webstore/detail/jfedfbgedapdagkghmgibemcoggfppbb
## 🦄Edge
https://microsoftedge.microsoft.com/addons/detail/oohmdefbjalncfplafanlagojlakmjci
## 🦊Firefox
https://addons.mozilla.org/addon/cat-catch/ 😂需非国区IP访问
## 📱Edge Android
<img src="https://raw.githubusercontent.com/xifangczy/cat-catch/master/README/edgeqrcode.png" width="20%" />
💔猫抓是开源的,任何人都可以下载修改上架到应用商店,已经有不少加上广告代码后上架的伪猫抓,请注意自己的数据安全。所有安装地址以github和用户文档为准。
# 📒用户文档
https://o2bmm.gitbook.io/cat-catch/
# 🌏翻译
[](https://gitlocalize.com/repo/9392?utm_source=badge)
# 📘安装方法
## 应用商店安装
通过安装地址的链接到官方扩展商店即可安装。
## 源码安装
1. Git Clone 代码。
2. 扩展管理页面 打开 "开发者模式"。
3. 点击 "加载已解压的扩展程序" 选中扩展文件夹即可。
## crx安装
1. [Releases](https://github.com/xifangczy/cat-catch/releases) **右键另存为**下载crx文件。
2. 扩展管理页面 打开 "开发者模式"。
3. 将crx文件拖入扩展程序页面即可。
# 📚兼容性说明
1.0.17版本之后需要Chromium内核版本93以上。
低于93请使用1.0.16版本。
要体验完整功能,请使用104版本以上。
# 🔍界面


# 🤚🏻免责
本扩展仅供下载用户拥有版权或已获授权的视频,禁止用于下载受版权保护且未经授权的内容。用户需自行承担使用本工具的全部法律责任,开发者不对用户的任何行为负责。本工具按“原样”提供,开发者不承担任何直接或间接责任。
# 🚫版权保护与拒绝抓取声明
我们尊重所有网站的内容版权和运营方的合法权益。
如果您不允许本工具运行在您的网站上,请遵循以下流程向我们提交请求,我们将会把您的域名加入本项目的“避免抓取列表”中。
- 在本仓库创建一个新的 Issue
- Issue 标题请使用格式: `[Opt-Out Request] 您的网站域名`
在 Issue 正文中,请提供以下信息以便我们核实:
- 网站域名:(例如:`example.com`)
- 联系人邮箱:(用于必要时核实身份)
我们承诺在收到有效请求后,将在后续版本更新中尊重您的意愿。请注意,本项目是一个开源项目,更新和发布需要一定的周期。感谢您的理解与合作。
# 🔒隐私政策
本扩展收集所有信息都在本地储存处理,不会发送到远程服务器,不包含任何跟踪器。
# 💖鸣谢
- [hls.js](https://github.com/video-dev/hls.js)
- [jQuery](https://github.com/jquery/jquery)
- [mux.js](https://github.com/videojs/mux.js)
- [js-base64](https://github.com/dankogai/js-base64)
- [jquery.json-viewer](https://github.com/abodelot/jquery.json-viewer)
- [Momo707577045](https://github.com/Momo707577045)
- [mpd-parser](https://github.com/videojs/mpd-parser)
- [StreamSaver.js](https://github.com/jimmywarting/StreamSaver.js)
# 📜License
GPL-3.0 license
1.0版 使用 MIT许可
2.0版 更改为GPL v3许可
为了资源嗅探扩展有良好发展,希望使用猫抓源码的扩展仍然保持开源。
================================================
FILE: README_en.md
================================================
<p align="center"> [<a href="README.md">中文</a>] | [English] | [<a href="README_es.md">Español</a>]</p>
# 📑Introduction
Cat-Catch is a resource sniffing extension that can help you filter and list the resources of the current page.
# 📖Installation
## 🐴Chrome
https://chrome.google.com/webstore/detail/jfedfbgedapdagkghmgibemcoggfppbb
## 🦄Edge
https://microsoftedge.microsoft.com/addons/detail/oohmdefbjalncfplafanlagojlakmjci
## 🦊Firefox
https://addons.mozilla.org/addon/cat-catch/ 😂Non-China IP required for access
## 📱Edge Android
<img src="https://raw.githubusercontent.com/xifangczy/cat-catch/master/README/edgeqrcode.png" width="20%" />
💔Cat-Catch is open source, anyone can download, modify, and list it in the app store. There are already quite a few fake Cat-Catch extensions listed with added ad codes, please pay attention to your data security. All installation URLs are subject to github and user documentation.
# 📒Documentation
https://o2bmm.gitbook.io/cat-catch/
# 🌏Translations
[](https://gitlocalize.com/repo/9392?utm_source=badge)
# 📘 Installation Methods
## App Store Installation
Install directly from the official extension store using the link provided.
## Source Code Installation
1. Git clone the repository.
2. Open the extensions management page and enable "Developer Mode."
3. Click "Load unpacked" and select the extension folder.
## CRX Installation
1. **Right-click** and save the CRX file from [Releases](https://github.com/xifangczy/cat-catch/releases).
2. Open the extensions management page and enable "Developer Mode."
3. Drag the CRX file into the extensions page.
# 📚Compatibility
After version 1.0.17, Chromium kernel version 93 or above is required.
Use version 1.0.16 if below 93.
For full functionality, use version 104 or above.
# 🔍Screenshot


# 🤚🏻Disclaimer
This extension is intended for downloading videos that you own or have authorized access to. It is prohibited to use this Tool for downloading copyrighted content without permission. Users are solely responsible for their actions, and the developer is not liable for any user behavior. This Tool is provided "as-is," and the developer assumes no direct or indirect liability.
# 🚫 Copyright Protection and Opt-Out Policy
We respect the intellectual property rights and legitimate interests of all websites and their operators.
If you do not permit this tool to operate on your website, please follow the procedure below to submit a request. We will add your domain to the project's "Opt-Out List."
- Create a new **Issue** in this repository.
- **Please use the following title format:** `[Opt-Out Request] YourDomain.com`
In the Issue description, please provide the following information for verification:
- **Website Domain:** (e.g., `example.com`)
- **Contact Email:** (For identity verification when necessary).
We commit to honoring your request and will add verified domains to the Opt-Out list in subsequent version updates.
Please note that this is an open-source project, and updates and releases require a certain cycle. Thank you for your understanding and cooperation.
# 🔒Privacy Policy
The extension collects and processes all information locally without sending it to remote servers and does not include any trackers.
# 💖Acknowledgements
- [hls.js](https://github.com/video-dev/hls.js)
- [jQuery](https://github.com/jquery/jquery)
- [mux.js](https://github.com/videojs/mux.js)
- [js-base64](https://github.com/dankogai/js-base64)
- [jquery.json-viewer](https://github.com/abodelot/jquery.json-viewer)
- [Momo707577045](https://github.com/Momo707577045)
- [mpd-parser](https://github.com/videojs/mpd-parser)
- [StreamSaver.js](https://github.com/jimmywarting/StreamSaver.js)
# 📜License
GPL-3.0 license
Version 1.0 uses the MIT license.
Version 2.0 has changed to the GPL v3 license.
In order for the resource sniffing extension to develop well, it is hoped that extensions using the Cat-Catch source code will continue to be open source.
================================================
FILE: README_es.md
================================================
<p align="center"> [<a href="README.md">中文</a>] | [<a href="README_en.md">English</a>] | [Español]</p>
# 📑Introducción
Cat-Catch es una extensión de rastreo de recursos que puede ayudarlo a filtrar y enumerar los recursos de la página actual.
# 📖Instalación
## 🐴Chrome
https://chrome.google.com/webstore/detail/jfedfbgedapdagkghmgibemcoggfppbb
## 🦄Edge
https://microsoftedge.microsoft.com/addons/detail/oohmdefbjalncfplafanlagojlakmjci
## 🦊Firefox
https://addons.mozilla.org/addon/cat-catch/ 😂Se requiere IP que no sea china para acceder
## 📱Edge Android
<img src="https://raw.githubusercontent.com/xifangczy/cat-catch/master/README/edgeqrcode.png" width="20%" />
💔Cat-Catch es de código abierto, cualquiera puede descargarlo, modificarlo y incluirlo en la tienda de aplicaciones. Ya hay bastantes extensiones falsas de Cat-Catch listadas con códigos publicitarios agregados; preste atención a la seguridad de sus datos. Todas las URL de instalación están sujetas a github y a la documentación del usuario.
# 📒Documentación
https://o2bmm.gitbook.io/cat-catch/
# 🌏Traducciones
[](https://gitlocalize.com/repo/9392?utm_source=badge)
# 📘 Métodos de instalación
## Instalación de la tienda de aplicaciones
Instálelo directamente desde la tienda de extensiones oficial utilizando el enlace proporcionado.
## Instalación código fuente
1. Clonar el repositorio Git.
2. Abra la página de gestión de extensiones y active "Developer Mode."
3. Clic en "Load unpacked" y seleccione la carpeta de extensión.
## Instalación CRX
1. **Clic derecho** y guarde el archivo CRX desde [Releases](https://github.com/xifangczy/cat-catch/releases).
2. Abra la página de gestión de extensiones y active "Developer Mode."
3. Arrastre el archivo CRX a la página de extensiones.
# 📚Compatibilidad
Después de la versión 1.0.17, se requiere el kernel Chromium versión 93 o superior.
Utilice la versión 1.0.16 si es inferior a 93.
Para una funcionalidad completa, utilice la versión 104 o superior.
# 🔍Captura de pantalla


# 🤚🏻Descargo de responsabilidad
Esta extensión está pensada para descargar vídeos de tu propiedad o a los que tengas acceso autorizado. Está prohibido utilizar esta herramienta para descargar contenidos protegidos por derechos de autor sin autorización. Los usuarios son los únicos responsables de sus acciones, y el desarrollador no es responsable de ningún comportamiento de los usuarios. Esta herramienta se proporciona "tal cual" y el promotor no asume ninguna responsabilidad directa o indirecta.
# 🚫 Protección de los derechos de autor y política de exclusión voluntaria
Respetamos los derechos de propiedad intelectual y los intereses legítimos de todos los sitios web y sus operadores.
Si no permite que esta herramienta funcione en su sitio web, siga el procedimiento que se indica a continuación para presentar una solicitud. Añadiremos su dominio al proyecto de "Opt-Out List."
- Crear un nuevo **Issue** en este repositorio.
- **Utilice el siguiente formato de título:** `[Opt-Out Request] SuDominio.com`
En la descripción de la incidencia, facilite la siguiente información para su verificación:
- **Dominio del sitio web:** (ej., `ejemplo.com`)
- **Contacto Email:** (Para verificar la identidad cuando sea necesario).
Nos comprometemos a atender su solicitud y añadiremos los dominios verificados al "Opt-Out list" en posteriores actualizaciones de la versión.
Tenga en cuenta que se trata de un proyecto de código abierto, y las actualizaciones y versiones requieren un cierto ciclo. Gracias por su comprensión y cooperación.
# 🔒Política de privacidad
La extensión recopila y procesa toda la información localmente sin enviarla a servidores remotos y no incluye ningún rastreador.
# 💖Agradecimientos
- [hls.js](https://github.com/video-dev/hls.js)
- [jQuery](https://github.com/jquery/jquery)
- [mux.js](https://github.com/videojs/mux.js)
- [js-base64](https://github.com/dankogai/js-base64)
- [jquery.json-viewer](https://github.com/abodelot/jquery.json-viewer)
- [Momo707577045](https://github.com/Momo707577045)
- [mpd-parser](https://github.com/videojs/mpd-parser)
- [StreamSaver.js](https://github.com/jimmywarting/StreamSaver.js)
# 📜Licencia
Licencia GPL-3.0
La versión 1.0 utiliza la licencia MIT.
La versión 2.0 ha cambiado a la licencia GPL v3.
Para que la extensión de rastreo de recursos se desarrolle bien, se espera que las extensiones que utilicen el código fuente de Cat-Catch sigan siendo de código abierto.
================================================
FILE: _locales/en/messages.json
================================================
{
"catCatch": {
"message": "cat-catch"
},
"description": {
"message": "Web media sniffing tool"
},
"confirm": {
"message": "Confirm"
},
"currentPage": {
"message": "Current Page"
},
"otherPage": {
"message": "Other Page"
},
"otherFeatures": {
"message": "Other Features"
},
"mediaControl": {
"message": "Media Control"
},
"loadingData": {
"message": "Loading Data..."
},
"selectWebpage": {
"message": "Webpage:"
},
"selectMedia": {
"message": "Media:"
},
"noMediaDetected": {
"message": "No Media Detected on Webpage"
},
"noControllableMediaDetected": {
"message": "No Controllable Media Detected"
},
"multiplier": {
"message": "Multiplier:"
},
"speedPlayback": {
"message": "Speed Playback"
},
"play": {
"message": "Play"
},
"normalPlay": {
"message": "Normal Playback"
},
"pictureInPicture": {
"message": "Picture in Picture"
},
"fullscreen": {
"message": "Fullscreen"
},
"screenshot": {
"message": "Screenshot"
},
"loop": {
"message": "Loop"
},
"mute": {
"message": "Mute"
},
"volume": {
"message": "Volume"
},
"functionEntry": {
"message": "Function Entry"
},
"downloader": {
"message": "Downloader"
},
"parser": {
"message": "Parser"
},
"m3u8Parser": {
"message": "M3U8 Parser"
},
"mpdParser": {
"message": "MPD Parser"
},
"jsonFormatter": {
"message": "JSON Formatter"
},
"expandAll": {
"message": "Expand All"
},
"expandPlayable": {
"message": "Expand Playable"
},
"expandSelected": {
"message": "Expand Selected"
},
"collapseAll": {
"message": "Collapse All"
},
"videoRecording": {
"message": "Video Recording"
},
"closeRecording": {
"message": "Close Recording"
},
"recordWebRTC": {
"message": "Record WebRTC"
},
"screenCapture": {
"message": "Screen Capture"
},
"simulateMobile": {
"message": "Simulate Mobile"
},
"autoDownload": {
"message": "Auto Download"
},
"onlineMerge": {
"message": "Merge"
},
"download": {
"message": "Download"
},
"copy": {
"message": "Copy"
},
"selectAll": {
"message": "Select All"
},
"invertSelection": {
"message": "Toggle"
},
"filter": {
"message": "Filter"
},
"clear": {
"message": "Clear"
},
"deepSearch": {
"message": "Search"
},
"closeSearch": {
"message": "Close Search"
},
"cacheCapture": {
"message": "Capture"
},
"closeCapture": {
"message": "Close Capture"
},
"moreFeatures": {
"message": "More"
},
"pause": {
"message": "Pause"
},
"settings": {
"message": "Settings"
},
"closeSimulation": {
"message": "Close Simulation"
},
"closeDownload": {
"message": "Close Download"
},
"enable": {
"message": "Enable"
},
"disable": {
"message": "Disable"
},
"noData": {
"message": "No Fish"
},
"regularFilterPlaceholder": {
"message": "Regular expression filter, match resource URL, press Enter to confirm"
},
"option": {
"message": "Option"
},
"titleOption": {
"message": "cat-catch Option"
},
"titleDownload": {
"message": "cat-catch Download"
},
"titleM3U8": {
"message": "cat-catch m3u8 Parser"
},
"titleJson": {
"message": "cat-catch json formatter"
},
"titledash": {
"message": "cat-catch Dash Parser"
},
"suffix": {
"message": "Suffix"
},
"suffixTip": {
"message": "Fill in the suffix that does not contain '.', if no size filtering is needed, fill in 0."
},
"extensionName": {
"message": "Extension Name"
},
"filterSize": {
"message": "Filter Size"
},
"delete": {
"message": "Delete"
},
"addSuffix": {
"message": "Add Suffix"
},
"extension": {
"message": "Extension"
},
"disableAll": {
"message": "Disable All"
},
"enableAll": {
"message": "Enable All"
},
"type": {
"message": "Type"
},
"addType": {
"message": "Add Type"
},
"typeTip": {
"message": "Enter the correct content-type, if no size filtering is needed, fill in 0."
},
"addTypeError": {
"message": "The format of the capture type is incorrect, please check"
},
"regexMatch": {
"message": "Regex Match"
},
"blockResource": {
"message": "Block Resource"
},
"alert": {
"message": "Alert"
},
"regexExpression": {
"message": "Regex Expression"
},
"addRegex": {
"message": "Add Regex"
},
"regexTest": {
"message": "Regex test"
},
"regex": {
"message": "regex"
},
"flag": {
"message": "Flag"
},
"result": {
"message": "Result"
},
"match": {
"message": "Match"
},
"noMatch": {
"message": "No Match"
},
"blockResourceTip": {
"message": "Block the resources you do not want to appear"
},
"flagTip": {
"message": "i: ignore case, g: global search. It can also be left blank"
},
"regexSuffixTip": {
"message": "Assign a suffix to the obtained URL. It can be left blank, and the suffix will be automatically truncated (many files do not have a suffix)"
},
"regexTip": {
"message": "Regular expressions consume a lot of resources, use them carefully if not necessary"
},
"copyTip": {
"message": "For the convenience of using third-party applications, customize the content written to the clipboard by the copy button"
},
"replaceKeywordList": {
"message": "Replace the Keyword List"
},
"otherFiles": {
"message": "Other Files"
},
"resetCopySettings": {
"message": "Reset Copy Settings"
},
"autoSetRefererCookieParams": {
"message": "Automatically Set Referer and Cookie Parameters"
},
"secretKey": {
"message": "Secret Key"
},
"address": {
"message": "Address"
},
"documentation": {
"message": "Documentation"
},
"aria2Tip": {
"message": "An excellent download tool, see how to use"
},
"m3u8DLTips": {
"message": "An excellent third-party m3u8 and mpd download tool, see how to use"
},
"invoke": {
"message": "Invoke"
},
"parameter": {
"message": "Parameter"
},
"parameterSetting": {
"message": "Parameter Setting"
},
"test": {
"message": "Test"
},
"replaceTags": {
"message": "Replace Tags"
},
"customSaveFileName": {
"message": "Custom Save File Name"
},
"userAgentTip": {
"message": "Default to the current browser's User Agent"
},
"alwaysDisableCatCatcher": {
"message": "Always Disable Cat-Catch Downloader"
},
"autoClosePageAfterDownload": {
"message": "Automatically Close Page After Download"
},
"openDownloaderPageInBackground": {
"message": "Open Downloader Page in Background"
},
"downloaderTip": {
"message": "If the resource download fails, automatically enable the downloader to try again."
},
"autoDownM3u8Tip": {
"message": "Click the download button and use the m3u8 parser to start merging and downloading immediately"
},
"otherSettings": {
"message": "Other Settings"
},
"resetOtherSettings": {
"message": "Reset Other Settings"
},
"previewMode": {
"message": "Use the local player's call protocol to open video previews"
},
"previewModePlaceholder": {
"message": "Leave it blank to disable it. The default is to use the popup page to preview the video"
},
"preview": {
"message": "Preview"
},
"customFilenameOption": {
"message": "Use a custom filename to save the file (the default is the webpage title)"
},
"saveAsOption": {
"message": "Choose the save directory after downloading"
},
"iconOption": {
"message": "Display the website icon"
},
"clearOption": {
"message": "Refresh, navigate to a new page, and clear the data captured by the current tab"
},
"doNotClear": {
"message": "Do Not Clear"
},
"normalClear": {
"message": "Normal Clear"
},
"moreFrequent": {
"message": "More Frequent"
},
"dopreview": {
"message": "preview"
},
"dopopup": {
"message": "popup"
},
"winpreview": {
"message": "window preview"
},
"winpopup": {
"message": "window popup"
},
"excludeDuplicateResources": {
"message": "Exclude duplicate resources (too many resources will consume a lot of CPU)"
},
"customCSS": {
"message": "Custom CSS"
},
"MQTT": {
"message": "MQTT"
},
"mqttBroker": {
"message": "Broker address"
},
"mqttPath": {
"message": "Path"
},
"mqttProtocol": {
"message": "Protocol"
},
"mqttClientId": {
"message": "Client ID"
},
"mqttTitleLength": {
"message": "Title Max Length"
},
"mqttUsername": {
"message": "Username"
},
"mqttPassword": {
"message": "Password"
},
"mqttTopic": {
"message": "Topic"
},
"mqttQos": {
"message": "QoS Level"
},
"mqttQos0": {
"message": "(At most once)"
},
"mqttQos1": {
"message": "(At least once)"
},
"mqttQos2": {
"message": "(Exactly once)"
},
"mqttDataFormat": {
"message": "Data Format"
},
"mqttDataFormatHelp": {
"message": "{\"url\": \"$${url}\", \"title\": \"$${title}\", \"type\": \"$${type}\", \"ext\": \"$${ext}\", \"timestamp\": \"$${timestamp}\"}"
},
"mqttDataFormatVars": {
"message": "Available variables"
},
"mqttDataFormatDefault": {
"message": "Leave blank to use default JSON format"
},
"mqttProtocolWss": {
"message": "WSS (Secure)"
},
"mqttProtocolWs": {
"message": "WS (Insecure)"
},
"mqttTitleLengthHelp": {
"message": "Maximum length of the title to send in MQTT messages"
},
"mqttBrokerHelp": {
"message": "Hostname or IP address of the MQTT broker"
},
"mqttPathHelp": {
"message": "WebSocket path (usually /mqtt or /ws)"
},
"mqttClientIdHelp": {
"message": "Unique client identifier for this connection"
},
"mqttTopicHelp": {
"message": "MQTT topic to publish messages to"
},
"mqttQosHelp": {
"message": "Quality of Service level (0=At most once, 1=At least once, 2=Exactly once)"
},
"mqttCredentialsHelp": {
"message": "Leave username/password empty if not required"
},
"operation": {
"message": "Operation"
},
"exportSettings": {
"message": "Export Settings"
},
"importConfiguration": {
"message": "Import Configuration"
},
"clearCapturedData": {
"message": "Clear Captured Data"
},
"resetSettings": {
"message": "Reset Settings"
},
"resetAllSettings": {
"message": "Reset All Settings"
},
"restartExtension": {
"message": "Restart Extension"
},
"about": {
"message": "About"
},
"confirmReset": {
"message": "Are you sure you want to reset?"
},
"invokeProtocolTemplate": {
"message": "Invoke Protocol Template"
},
"customVLCProtocol": {
"message": "Custom VLC Protocol"
},
"systemShare": {
"message": "System Share"
},
"default": {
"message": "Default"
},
"goBack": {
"message": "Go Back"
},
"openDir": {
"message": "Open Directory"
},
"downloadDir": {
"message": "Download Directory"
},
"sendFfmpeg": {
"message": "Send to Online ffmpeg"
},
"autoCloserDownload": {
"message": "Automatically Close Page After Download"
},
"openInBgDownload": {
"message": "Open Downloader Page in Background"
},
"m3u8Placeholder": {
"message": "Please enter m3u8 link / m3u8 content / segment list / $${range} tag"
},
"m3u8Url": {
"message": "m3u8 URL"
},
"nextLevel": {
"message": "Next Level"
},
"nextLevelTip": {
"message": "This M3U8 file nests multiple M3U8 files."
},
"multipleAudios": {
"message": "Multiple Audios"
},
"multipleAudiosTip": {
"message": "This M3U8 file nests multiple audios"
},
"multipleSubtitles": {
"message": "Multiple Subtitles"
},
"multipleSubtitlesTip": {
"message": "This M3U8 file nests multiple subtitles."
},
"possibleKey": {
"message": "Found possible keys"
},
"loading": {
"message": "Loading..."
},
"waitDownload": {
"message": "Waiting for download..."
},
"downloadSegmentList": {
"message": "Download list"
},
"originalM3u8": {
"message": "Original M3U8"
},
"localM3u8": {
"message": "Local M3U8"
},
"segmentList": {
"message": "Segment"
},
"downloadProgress": {
"message": "Download Progress"
},
"getParameters": {
"message": "GET Parameters"
},
"restoreGetParameters": {
"message": "Restore GET Parameters"
},
"requestHeaders": {
"message": "Request Headers"
},
"setRequestHeaders": {
"message": "Set request headers."
},
"invokeM3u8DL": {
"message": "Invoke M3U8DL"
},
"copyCommand": {
"message": "Copy Command"
},
"previewCommand": {
"message": "Preview Command"
},
"addSettingParameters": {
"message": "Add Setting Parameters"
},
"customKeyPlaceholder": {
"message": "Customize the key in hexadecimal or base64, or the key address"
},
"uploadKey": {
"message": "Upload key"
},
"downloadThreads": {
"message": "Threads"
},
"ffmpegTranscoding": {
"message": "FFmpeg transcod"
},
"mp4Format": {
"message": "MP4"
},
"downloadWhileSaving": {
"message": "Stream download"
},
"audioOnly": {
"message": "Audio Only"
},
"saveAs": {
"message": "Save As"
},
"skipDecryption": {
"message": "Skip Decryption"
},
"newDownloader": {
"message": "New Downloader"
},
"downloadRange": {
"message": "Download Range"
},
"recordLive": {
"message": "Record"
},
"mergeDownloads": {
"message": "Merge Downloads"
},
"redownloadFailedItems": {
"message": "Redownload Failed Items"
},
"downloadExistingData": {
"message": "Download Existing Data"
},
"stopDownload": {
"message": "Stop Download"
},
"start": {
"message": "Start"
},
"end": {
"message": "End"
},
"resolution": {
"message": "Resolution"
},
"duration": {
"message": "Duration"
},
"bitrate": {
"message": "Bitrate"
},
"ADTSerror": {
"message": "Cannot find the ADTS header. It may be an AES-128-ECB encrypted resource, which is not currently supported for decryption. Please use third-party merging software."
},
"m3u8Error": {
"message": "There are errors in parsing or playing the M3U8 file, check the console for detailed error information"
},
"noAudio": {
"message": "No Audio"
},
"noVideo": {
"message": "No Video"
},
"hevcTip": {
"message": "HEVC/H.265 encoded fragment files are only supported for online ffmpeg transcoding"
},
"hevcPreviewTip": {
"message": "HEVC/H.265 encoded fragment files are not supported for preview."
},
"m3u8Info": {
"message": "A total of $num$ file, with a total duration of $time$.",
"placeholders": {
"num": {
"content": "$1"
},
"time": {
"content": "$2"
}
}
},
"encryptedHLS": {
"message": "Encrypted HLS"
},
"encryptedSAMPLE": {
"message": "Resources encrypted with SAMPLE-AES-CTR cannot be handled at the moment."
},
"liveHLS": {
"message": "Live HLS"
},
"keyAddress": {
"message": "Key Address"
},
"key": {
"message": "Key"
},
"encryptionAlgorithm": {
"message": "Method"
},
"keyDownloadFailed": {
"message": "Key Download Failed"
},
"savePrompt": {
"message": "Saved to disk, please check the downloaded content in the browser."
},
"close": {
"message": "Close"
},
"blobM3u8DLError": {
"message": "Blob URLs cannot invoke M3U8DL for download"
},
"M3U8DLparameterLong": {
"message": "The M3U8DL parameter is too long."
},
"runningCannotChangeSettings": {
"message": "Running, Cannot Change Settings"
},
"streamSaverTip": {
"message": "The function of 'download while saving' does not support ffmpeg online format conversion, does not support re-downloading erroneous slices, and does not support 'save as'."
},
"stopRecording": {
"message": "Stop Recording"
},
"waitingForLiveData": {
"message": "Waiting for Live Data"
},
"sNumError": {
"message": "Serial Number Error"
},
"startGTend": {
"message": "Start Number Cannot Be Greater Than End Number"
},
"sNumMax": {
"message": "Serial Number Cannot Exceed $num$",
"placeholders": {
"num": {
"content": "$1"
}
}
},
"incorrectKey": {
"message": "Incorrect Key"
},
"addParameters": {
"message": "Add Parameters"
},
"decryptionError": {
"message": "Decryption Error"
},
"downloadFailed": {
"message": "Download Failed"
},
"retryDownload": {
"message": "Retry Download"
},
"recordingDuration": {
"message": "Recording Duration"
},
"downloaded": {
"message": "Downloaded"
},
"downloadedVideoLength": {
"message": "Downloaded Video Length"
},
"downloadComplete": {
"message": "Download Complete"
},
"retryingDownload": {
"message": "Retrying Download"
},
"merging": {
"message": "Merging"
},
"fileTooLarge": {
"message": "File Too Large, File larger than $size$",
"placeholders": {
"size": {
"content": "$1"
}
}
},
"fileTooLargeStream": {
"message": "File larger than $size$, enable stream download?",
"placeholders": {
"size": {
"content": "$1"
}
}
},
"formatConversionError": {
"message": "Format Conversion Error"
},
"streamOnbeforeunload": {
"message": "Streaming is in progress, the download will stop after closing"
},
"fileLoading": {
"message": "File Loading"
},
"expandAllNodes": {
"message": "Expand all JSON nodes"
},
"collapseAllNodes": {
"message": "Collapse all JSON nodes"
},
"fileRetrievalFailed": {
"message": "File Retrieval Failed"
},
"selectVideo": {
"message": "Select Video"
},
"extractSlices": {
"message": "Extract Slices"
},
"convertToM3U8": {
"message": "Convert to M3U8 Parsing"
},
"selectAudio": {
"message": "Select Audio"
},
"audio": {
"message": "Audio"
},
"video": {
"message": "Video"
},
"DRMerror": {
"message": "The media has DRM protection, please use third-party tools for download"
},
"regexTitle": {
"message": "Regular expression match or from deep search"
},
"downloadWithRequestHeader": {
"message": "Download with request header parameters."
},
"m3u8Playlist": {
"message": "M3U8 Playlist"
},
"copiedToClipboard": {
"message": "Copied to Clipboard"
},
"hasSent": {
"message": "Sent"
},
"sendFailed": {
"message": "Send Failed"
},
"confirmDownload": {
"message": "$num$ files in total, confirm download?",
"placeholders": {
"num": {
"content": "$1"
}
}
},
"confirmLoading": {
"message": "There are $num$ resources in total, do you want to cancel the loading?",
"placeholders": {
"num": {
"content": "$1"
}
}
},
"waitingForMedia": {
"message": "Waiting to receive media files... Please do not close this page."
},
"exit": {
"message": "Exit"
},
"unknownSize": {
"message": "Unknown size"
},
"saving": {
"message": "Saving"
},
"saveFailed": {
"message": "Save failed"
},
"badgeNumber": {
"message": "Show icon badge prompt"
},
"viewSlices": {
"message": "View all slices and download progress"
},
"send2local": {
"message": "Data transmission"
},
"send2MQTT": {
"message": "Send to MQTT"
},
"sendingToMQTT": {
"message": "Sending to MQTT server..."
},
"connectingToMQTT": {
"message": "Connecting to MQTT server..."
},
"sendingMessageToMQTT": {
"message": "Sending message to MQTT server..."
},
"messageSentToMQTT": {
"message": "Message sent to MQTT server"
},
"popup": {
"message": "Popup"
},
"defaultPopup": {
"message": "Default Popup Mode"
},
"invokeApp": {
"message": "Invoke application"
},
"onlineServiceAddress": {
"message": "Online Service Address"
},
"withinChina": {
"message": "Within China"
},
"dataFetchFailed": {
"message": "Data fetch failed"
},
"confirmParameters": {
"message": "Confirm Parameters"
},
"searchingForRealKey": {
"message": "Searching for real key"
},
"verifying": {
"message": "Verifying"
},
"realKeyNotFound": {
"message": "Real key not found"
},
"blockUrl": {
"message": "Block URL"
},
"addUrl": {
"message": "Add URL"
},
"wildcards": {
"message": "wildcards"
},
"blockUrlTips": {
"message": "Support wildcards * and ?"
},
"setWhiteList": {
"message": "Set to whitelist"
},
"autoSend": {
"message": "Automatic data transmission"
},
"manualSend": {
"message": "Manual data transmission"
},
"requestMethod": {
"message": "Request Method"
},
"requestBody": {
"message": "Request Body"
},
"sort": {
"message": "Sort"
},
"asc": {
"message": "Ascending"
},
"desc": {
"message": "Descending"
},
"getTime": {
"message": "Retrieval Time"
},
"fileSize": {
"message": "File Size"
},
"title": {
"message": "Title"
},
"noKeyIsRequired": {
"message": "No key is required"
},
"estimateSize": {
"message": "Estimated size"
},
"retryCount": {
"message": "Retry count"
},
"useSidePanel": {
"message": "Use side panel"
},
"Script": {
"message": "Script"
},
"alwaysSearch": {
"message": "Always enable deep search"
},
"sideurlprotocol": {
"message": "Protocolo URL m3u8dl"
},
"deleteDuplicateFilenames": {
"message": "Delete duplicate filenames"
},
"alertimport": {
"message": "Import completed"
},
"isBlockedSite": {
"message": "This site requires blocking the operation of this extension"
}
}
================================================
FILE: _locales/es/messages.json
================================================
{
"catCatch": {
"message": "cat-catch"
},
"description": {
"message": "Herramienta de rastreo de medios web"
},
"confirm": {
"message": "Confirmar"
},
"currentPage": {
"message": "Página actual"
},
"otherPage": {
"message": "Otra página"
},
"otherFeatures": {
"message": "Otras funciones"
},
"mediaControl": {
"message": "Control medios"
},
"loadingData": {
"message": "Cargando datos..."
},
"selectWebpage": {
"message": "Sitio:"
},
"selectMedia": {
"message": "Medios:"
},
"noMediaDetected": {
"message": "No se detectan medios en la página web"
},
"noControllableMediaDetected": {
"message": "No se detectan medios controlables"
},
"multiplier": {
"message": "Multiplicador:"
},
"speedPlayback": {
"message": "Velocidad"
},
"play": {
"message": "Reproducir"
},
"normalPlay": {
"message": "Normal"
},
"pictureInPicture": {
"message": "Imagen en imagen"
},
"fullscreen": {
"message": "Pantalla completa"
},
"screenshot": {
"message": "Captura"
},
"loop": {
"message": "Bucle"
},
"mute": {
"message": "Silencio"
},
"volume": {
"message": "Volumen"
},
"functionEntry": {
"message": "Funciones entrada"
},
"downloader": {
"message": "Descargador"
},
"parser": {
"message": "Analizar"
},
"m3u8Parser": {
"message": "Analizar M3U8"
},
"mpdParser": {
"message": "Analizar MPD"
},
"jsonFormatter": {
"message": "Formateador JSON"
},
"expandAll": {
"message": "Expandir todo"
},
"expandPlayable": {
"message": "Expandir reproducible"
},
"expandSelected": {
"message": "Expandir seleccionado"
},
"collapseAll": {
"message": "Contraer todo"
},
"videoRecording": {
"message": "Grabar vídeo"
},
"closeRecording": {
"message": "Cerrar grabar"
},
"recordWebRTC": {
"message": "Grabar WebRTC"
},
"screenCapture": {
"message": "Capturar pantalla"
},
"simulateMobile": {
"message": "Simular modo móvil"
},
"autoDownload": {
"message": "Descarga automática"
},
"onlineMerge": {
"message": "Unir"
},
"download": {
"message": "Descargar"
},
"copy": {
"message": "Copiar"
},
"selectAll": {
"message": "Seleccionar todo"
},
"invertSelection": {
"message": "Alternar"
},
"filter": {
"message": "Filtro"
},
"clear": {
"message": "Limpiar"
},
"deepSearch": {
"message": "Buscar"
},
"closeSearch": {
"message": "Cerrar buscar"
},
"cacheCapture": {
"message": "Capturar"
},
"closeCapture": {
"message": "Cerrar capturar"
},
"moreFeatures": {
"message": "Más"
},
"pause": {
"message": "Pausa"
},
"settings": {
"message": "Ajustes"
},
"closeSimulation": {
"message": "Cerrar simulación"
},
"closeDownload": {
"message": "Cerrar descarga"
},
"enable": {
"message": "Activar"
},
"disable": {
"message": "Desactivar"
},
"noData": {
"message": "Sin pesca"
},
"regularFilterPlaceholder": {
"message": "Filtro de expresión regular, URL del recurso coincidente, pulse Intro para confirmar"
},
"option": {
"message": "Opciones"
},
"titleOption": {
"message": "Opciones cat-catch"
},
"titleDownload": {
"message": "Descargar con cat-catch"
},
"titleM3U8": {
"message": "Analizar m3u8 con cat-catch"
},
"titleJson": {
"message": "Formateador json con cat-catch"
},
"titledash": {
"message": "Analizar dash con cat-catch"
},
"suffix": {
"message": "Sufijo"
},
"suffixTip": {
"message": "Colocar sufijo que no contenga un punto(.), si no es necesario el filtro del tamaño, colocar 0."
},
"extensionName": {
"message": "Nombre extensión"
},
"filterSize": {
"message": "Filtro tamaño"
},
"delete": {
"message": "Borrar"
},
"addSuffix": {
"message": "Añadir sufijo"
},
"extension": {
"message": "Extensión"
},
"disableAll": {
"message": "Desactivar todo"
},
"enableAll": {
"message": "Activar todo"
},
"type": {
"message": "Tipo"
},
"addType": {
"message": "Añadir tipo"
},
"typeTip": {
"message": "Introducir el tipo de contenido correcto, si no es necesario el filtro del tamaño, colocar 0."
},
"addTypeError": {
"message": "El formato del tipo de captura es incorrecto, por favor compruebe"
},
"regexMatch": {
"message": "Coincidencia Regex"
},
"blockResource": {
"message": "Bloquear recurso"
},
"alert": {
"message": "Alerta"
},
"regexExpression": {
"message": "Expresión Regex"
},
"addRegex": {
"message": "Añadir Regex"
},
"regexTest": {
"message": "Prueba Regex"
},
"regex": {
"message": "regex"
},
"flag": {
"message": "Indicador"
},
"result": {
"message": "Resultado"
},
"match": {
"message": "Igual"
},
"noMatch": {
"message": "No igual"
},
"blockResourceTip": {
"message": "Bloquea los recursos que no quieres que aparezcan"
},
"flagTip": {
"message": "i: ignorar el caso, g: búsqueda global. También puede dejarse vacío"
},
"regexSuffixTip": {
"message": "Asignar un sufijo a la URL obtenida. Puede dejarse vacío, y el sufijo se truncará automáticamente (muchos archivos no tienen sufijo)"
},
"regexTip": {
"message": "Las expresiones regulares consumen muchos recursos, úselas con cuidado si no es necesario"
},
"copyTip": {
"message": "Para facilitar el uso de aplicaciones de terceros, personalice el contenido escrito en el portapapeles mediante el botón Copiar"
},
"replaceKeywordList": {
"message": "Sustituir la lista de palabras clave"
},
"otherFiles": {
"message": "Otros archivos"
},
"resetCopySettings": {
"message": "Restaurar ajustes copia"
},
"autoSetRefererCookieParams": {
"message": "Colocar automáticamente los parámetros Referer y Cookies"
},
"secretKey": {
"message": "Clave secreta"
},
"address": {
"message": "Dirección"
},
"documentation": {
"message": "Documentación"
},
"aria2Tip": {
"message": "Una excelente herramienta de descarga, vea cómo usarla, en"
},
"m3u8DLTips": {
"message": "Una excelente herramienta de descarga de m3u8 y mpd de terceros, vea cómo usarla, en"
},
"invoke": {
"message": "Invocar"
},
"parameter": {
"message": "Parámetros"
},
"parameterSetting": {
"message": "Ajuste parámetros"
},
"test": {
"message": "Prueba"
},
"replaceTags": {
"message": "Sustituir etiquetas"
},
"customSaveFileName": {
"message": "Guardar nombre en archivo personal"
},
"userAgentTip": {
"message": "Predeterminado, agente usuario del navegador actual"
},
"alwaysDisableCatCatcher": {
"message": "Desactivar siempre descargador Cat-Catch"
},
"autoClosePageAfterDownload": {
"message": "Cerrar la página después de descargar"
},
"openDownloaderPageInBackground": {
"message": "Abrir la página del descargador en segundo plano"
},
"downloaderTip": {
"message": "Si falla la descarga de recursos, activar el descargador y vuelve a intentarlo."
},
"autoDownM3u8Tip": {
"message": "Clic en Descargar y el analizador m3u8 empezará a fusionar y a descargar."
},
"otherSettings": {
"message": "Otros ajustes"
},
"resetOtherSettings": {
"message": "Restaurar otros ajustes"
},
"previewMode": {
"message": "Usar el protocolo de llamada del reproductor local para abrir previsualizaciones de vídeo"
},
"previewModePlaceholder": {
"message": "Dejar vacío para desactivarlo. Se utiliza la ventana emergente para visualizar el vídeo"
},
"preview": {
"message": "Previo"
},
"customFilenameOption": {
"message": "Nombre para guardar el archivo (predeterminado: título de la página web)"
},
"saveAsOption": {
"message": "Seleccionar la carpeta de almacenamiento después de la descarga"
},
"iconOption": {
"message": "Mostrar el icono del sitio web"
},
"clearOption": {
"message": "Actualizar, navegar a una página y borrar datos capturados de la pestaña actual."
},
"doNotClear": {
"message": "No borrar"
},
"normalClear": {
"message": "Borrar normal"
},
"moreFrequent": {
"message": "Más frecuentes"
},
"dopreview": {
"message": "previo"
},
"dopopup": {
"message": "ventana emergente"
},
"winpreview": {
"message": "ventana previo"
},
"winpopup": {
"message": "ventana"
},
"excludeDuplicateResources": {
"message": "Excluir los recursos duplicados (demasiados recursos consumen mucha CPU)"
},
"customCSS": {
"message": "CSS personal"
},
"MQTT": {
"message": "MQTT"
},
"mqttBroker": {
"message": "Dirección agente"
},
"mqttPath": {
"message": "Ruta"
},
"mqttProtocol": {
"message": "Protocolo"
},
"mqttClientId": {
"message": "ID cliente"
},
"mqttTitleLength": {
"message": "Longitud máxima título"
},
"mqttUsername": {
"message": "Usuario"
},
"mqttPassword": {
"message": "Contraseña"
},
"mqttTopic": {
"message": "Tema"
},
"mqttQos": {
"message": "Nivel QoS"
},
"mqttQos0": {
"message": "(Como máximo una vez)"
},
"mqttQos1": {
"message": "(Al menos una vez)"
},
"mqttQos2": {
"message": "(Exactamente una vez)"
},
"mqttDataFormat": {
"message": "Formato datos"
},
"mqttDataFormatHelp": {
"message": "{\"url\": \"$${url}\", \"title\": \"$${title}\", \"type\": \"$${type}\", \"ext\": \"$${ext}\", \"timestamp\": \"$${timestamp}\"}"
},
"mqttDataFormatVars": {
"message": "Variables disponibles"
},
"mqttDataFormatDefault": {
"message": "Dejar vacío para usar el formato JSON predeterminado"
},
"mqttProtocolWss": {
"message": "WSS (Seguro)"
},
"mqttProtocolWs": {
"message": "WS (No seguro)"
},
"mqttTitleLengthHelp": {
"message": "Longitud máxima del título para enviar mensajes MQTT"
},
"mqttBrokerHelp": {
"message": "Nombre host o dirección IP agente MQTT"
},
"mqttPathHelp": {
"message": "Ruta de websocket (generalmente /mqtt o /ws)"
},
"mqttClientIdHelp": {
"message": "Identificador de cliente único para esta conexión"
},
"mqttTopicHelp": {
"message": "Tema MQTT para publicar mensajes"
},
"mqttQosHelp": {
"message": "Calidad del nivel de servicio (0 = como máximo una vez, 1 = al menos una vez, 2 = exactamente una vez)"
},
"mqttCredentialsHelp": {
"message": "Deje el nombre de usuario/contraseña vacío si no es necesario"
},
"operation": {
"message": "Operación"
},
"exportSettings": {
"message": "Exportar ajustes"
},
"importConfiguration": {
"message": "Importar ajustes"
},
"clearCapturedData": {
"message": "Borrar datos capturados"
},
"resetSettings": {
"message": "Restaurar ajustes"
},
"resetAllSettings": {
"message": "Restaurar todos los ajustes"
},
"restartExtension": {
"message": "Reiniciar extensión"
},
"about": {
"message": "Acerca de"
},
"confirmReset": {
"message": "¿Seguro que quieres restaurar?"
},
"invokeProtocolTemplate": {
"message": "Plantilla protocolo invocar"
},
"customVLCProtocol": {
"message": "Protocolo VLC personal"
},
"systemShare": {
"message": "Compartir sistema"
},
"default": {
"message": "Default"
},
"goBack": {
"message": "Atrás"
},
"openDir": {
"message": "Abrir carpeta"
},
"downloadDir": {
"message": "Carpeta descarga"
},
"sendFfmpeg": {
"message": "Enviar a ffmpeg en línea"
},
"autoCloserDownload": {
"message": "Cerrar automáticamente la página tras la descarga"
},
"openInBgDownload": {
"message": "Abrir la página del descargador en segundo plano"
},
"m3u8Placeholder": {
"message": "Introducir el contenido m3u8 o la lista de fragmentos ts."
},
"m3u8Url": {
"message": "URL m3u8"
},
"nextLevel": {
"message": "Nivel siguiente"
},
"nextLevelTip": {
"message": "Este archivo M3U8 anida varios archivos M3U8."
},
"multipleAudios": {
"message": "Múltiples audios"
},
"multipleAudiosTip": {
"message": "Este archivo M3U8 anida múltiples audios"
},
"multipleSubtitles": {
"message": "Múltiples subtítulos"
},
"multipleSubtitlesTip": {
"message": "Este archivo M3U8 anida múltiples subtítulos."
},
"possibleKey": {
"message": "Posibles claves encontradas"
},
"loading": {
"message": "Cargando..."
},
"waitDownload": {
"message": "Esperando descarga..."
},
"downloadSegmentList": {
"message": "Descargar lista"
},
"originalM3u8": {
"message": "M3U8 original"
},
"localM3u8": {
"message": "M3U8 local"
},
"segmentList": {
"message": "Segmento"
},
"downloadProgress": {
"message": "Progreso descarga"
},
"getParameters": {
"message": "Parámetros GET"
},
"restoreGetParameters": {
"message": "Restaurar parámetros GET"
},
"requestHeaders": {
"message": "Solicitud cabecera"
},
"setRequestHeaders": {
"message": "Cabeceras de solicitud."
},
"invokeM3u8DL": {
"message": "Invocar M3U8DL"
},
"copyCommand": {
"message": "Copiar comando"
},
"previewCommand": {
"message": "Previo comando"
},
"addSettingParameters": {
"message": "Añadir ajustes parámetros"
},
"customKeyPlaceholder": {
"message": "Personaliza la clave en hexadecimal o base64, o la dirección de la clave"
},
"uploadKey": {
"message": "Cargar clave"
},
"downloadThreads": {
"message": "Tareas"
},
"ffmpegTranscoding": {
"message": "Transcodificar FFmpeg"
},
"mp4Format": {
"message": "MP4"
},
"downloadWhileSaving": {
"message": "Descargar stream"
},
"audioOnly": {
"message": "Sólo audio"
},
"saveAs": {
"message": "Guardar como"
},
"skipDecryption": {
"message": "Omitir desencriptar"
},
"newDownloader": {
"message": "Nuevo descargador"
},
"downloadRange": {
"message": "Rango descarga"
},
"recordLive": {
"message": "Grabar"
},
"mergeDownloads": {
"message": "Unir descargas"
},
"redownloadFailedItems": {
"message": "Descargar fallidos"
},
"downloadExistingData": {
"message": "Descargar datos existentes"
},
"stopDownload": {
"message": "Detener descarga"
},
"start": {
"message": "Iniciar"
},
"end": {
"message": "Finalizar"
},
"resolution": {
"message": "Resolución"
},
"duration": {
"message": "Duración"
},
"bitrate": {
"message": "Bitrate"
},
"ADTSerror": {
"message": "No se encuentra la cabecera ADTS. Puede ser un recurso encriptado AES-128-ECB, que actualmente no sea compatible. Usar software de fusión de terceros."
},
"m3u8Error": {
"message": "Hay errores al analizar o reproducir el archivo M3U8, compruebe la consola para obtener información detallada de los errores"
},
"noAudio": {
"message": "Sin audio"
},
"noVideo": {
"message": "Sin vídeo"
},
"hevcTip": {
"message": "Los archivos de fragmentos codificados en HEVC/H.265 sólo son compatibles con la transcodificación ffmpeg en línea"
},
"hevcPreviewTip": {
"message": "Los archivos de fragmentos codificados en HEVC/H.265 no son compatibles con la previsualización."
},
"m3u8Info": {
"message": "Un total de $num$ archivo(s), con una duración total de $time$.",
"placeholders": {
"num": {
"content": "$1"
},
"time": {
"content": "$2"
}
}
},
"encryptedHLS": {
"message": "HLS encriptado"
},
"encryptedSAMPLE": {
"message": "Los recursos encriptados con SAMPLE-AES-CTR no pueden manejarse por el momento."
},
"liveHLS": {
"message": "HLS en directo"
},
"keyAddress": {
"message": "Dirección clave"
},
"key": {
"message": "Clave"
},
"encryptionAlgorithm": {
"message": "Método"
},
"keyDownloadFailed": {
"message": "Error en la descarga de claves"
},
"savePrompt": {
"message": "Guardado en disco, compruebe el contenido descargado en el navegador."
},
"close": {
"message": "Cerrar"
},
"blobM3u8DLError": {
"message": "Las URL Blob no pueden invocar M3U8DL para la descarga"
},
"M3U8DLparameterLong": {
"message": "El parámetro M3U8DL es demasiado largo."
},
"runningCannotChangeSettings": {
"message": "En ejecución, no se puede cambiar la configuración"
},
"streamSaverTip": {
"message": "La función de 'guardar mientras se descarga' no admite la conversión de formato en línea de ffmpeg, no permite volver a descargar los cortes erróneos y no admite 'guardar como'.."
},
"stopRecording": {
"message": "Detener grabación"
},
"waitingForLiveData": {
"message": "A la espera de datos en directo"
},
"sNumError": {
"message": "Error de número de serie"
},
"startGTend": {
"message": "El número inicial no puede ser mayor que el final"
},
"sNumMax": {
"message": "El número de serie no puede ser superior a $num$",
"placeholders": {
"num": {
"content": "$1"
}
}
},
"incorrectKey": {
"message": "Clave incorrecta"
},
"addParameters": {
"message": "Añadir parámetros"
},
"decryptionError": {
"message": "Error al desencriptar"
},
"downloadFailed": {
"message": "Error en descarga"
},
"retryDownload": {
"message": "Reintentar descarga"
},
"recordingDuration": {
"message": "Duración grabación"
},
"downloaded": {
"message": "Descargado"
},
"downloadedVideoLength": {
"message": "Duración vídeo descargado"
},
"downloadComplete": {
"message": "Descarga completa"
},
"retryingDownload": {
"message": "Reintentar descarga"
},
"merging": {
"message": "Uniendo"
},
"fileTooLarge": {
"message": "Archivo demasiado grande, mayor de $size$",
"placeholders": {
"size": {
"content": "$1"
}
}
},
"fileTooLargeStream": {
"message": "¿Archivo mayor de $size$, activar descarga en stream?",
"placeholders": {
"size": {
"content": "$1"
}
}
},
"formatConversionError": {
"message": "Error de conversión de formato"
},
"streamOnbeforeunload": {
"message": "La transmisión está en curso, la descarga se detendrá tras el cierre"
},
"fileLoading": {
"message": "Cargando archivo"
},
"expandAllNodes": {
"message": "Expandir nodos JSON"
},
"collapseAllNodes": {
"message": "Contraer nodos JSON"
},
"fileRetrievalFailed": {
"message": "Fallo en la recuperación de archivos"
},
"selectVideo": {
"message": "Seleccionar vídeo"
},
"extractSlices": {
"message": "Extraer partes"
},
"convertToM3U8": {
"message": "Convertir a analizador M3U8"
},
"selectAudio": {
"message": "Seleccionar audio"
},
"audio": {
"message": "Audio"
},
"video": {
"message": "Vídeo"
},
"DRMerror": {
"message": "Los medios tienen protección DRM, usar herramientas de terceros para descargar"
},
"regexTitle": {
"message": "Coincidencia de expresión regular o desde una búsqueda profunda"
},
"downloadWithRequestHeader": {
"message": "Descargar con los parámetros del encabezado de la solicitud."
},
"m3u8Playlist": {
"message": "Lista de reproducción M3U8"
},
"copiedToClipboard": {
"message": "Copiado al portapapeles"
},
"hasSent": {
"message": "Enviado"
},
"sendFailed": {
"message": "Enviar fallido"
},
"confirmDownload": {
"message": "$num$ archivos en total, ¿confirmar descarga?",
"placeholders": {
"num": {
"content": "$1"
}
}
},
"confirmLoading": {
"message": "Hay $num$ recursos en total, ¿desea cancelar la carga?",
"placeholders": {
"num": {
"content": "$1"
}
}
},
"waitingForMedia": {
"message": "Esperando recibir archivos multimedia... No cierre esta página."
},
"exit": {
"message": "Salir"
},
"unknownSize": {
"message": "Tamaño desconocido"
},
"saving": {
"message": "Guardando"
},
"saveFailed": {
"message": "Error al guardar"
},
"badgeNumber": {
"message": "Mostrar icono distintivo"
},
"viewSlices": {
"message": "Ver todas las partes y progreso descarga"
},
"send2local": {
"message": "Transmisión de datos"
},
"send2MQTT": {
"message": "Enviar a MQTT"
},
"sendingToMQTT": {
"message": "Enviando al sercidor MQTT..."
},
"connectingToMQTT": {
"message": "Conectando al servidor MQTT..."
},
"sendingMessageToMQTT": {
"message": "Enviando mensaje al servidor MQTT..."
},
"messageSentToMQTT": {
"message": "Mensaje enviado al servidor MQTT"
},
"popup": {
"message": "Ventana emergente"
},
"defaultPopup": {
"message": "Ventana predeterminada"
},
"invokeApp": {
"message": "Invocar aplicación"
},
"onlineServiceAddress": {
"message": "Dirección del servicio en línea"
},
"withinChina": {
"message": "En China"
},
"dataFetchFailed": {
"message": "Error al obtener datos"
},
"confirmParameters": {
"message": "Confirmar parámetros"
},
"searchingForRealKey": {
"message": "Buscando la clave real"
},
"verifying": {
"message": "Verificando"
},
"realKeyNotFound": {
"message": "Clave real no encontrada"
},
"blockUrl": {
"message": "Bloquear URL"
},
"addUrl": {
"message": "Añadir URL"
},
"wildcards": {
"message": "comodines"
},
"blockUrlTips": {
"message": "Admite los comodines * y ?"
},
"setWhiteList": {
"message": "Colocar en la lista blanca"
},
"autoSend": {
"message": "Transmisión manual de datos"
},
"manualSend": {
"message": "Transmisión automática de datos"
},
"requestMethod": {
"message": "Método de solicitud"
},
"requestBody": {
"message": "Cuerpo de la solicitud"
},
"sort": {
"message": "Ordenar"
},
"asc": {
"message": "Ascendente"
},
"desc": {
"message": "Descendente"
},
"getTime": {
"message": "Tiempo recuperación"
},
"fileSize": {
"message": "Tamaño archivo"
},
"title": {
"message": "Título"
},
"noKeyIsRequired": {
"message": "No se necesita clave"
},
"estimateSize": {
"message": "Tamaño estimado"
},
"retryCount": {
"message": "Reintentar contar"
},
"useSidePanel": {
"message": "Usar panel lateral"
},
"Script": {
"message": "Script"
},
"alwaysSearch": {
"message": "Activar una búsqueda profunda"
},
"alertimport": {
"message": "importación completada"
},
"sideurlprotocol": {
"message": "Protocolo URL m3u8dl"
},
"deleteDuplicateFilenames": {
"message": "Eliminar nombres de archivo duplicados"
}
}
================================================
FILE: _locales/ja/messages.json
================================================
{
"catCatch": {
"message": "cat-catch"
},
"description": {
"message": "ウェブメディア探す TOOL"
},
"confirm": {
"message": "確認"
},
"currentPage": {
"message": "現在のページ"
},
"otherPage": {
"message": "他のページ"
},
"otherFeatures": {
"message": "その他の機能"
},
"mediaControl": {
"message": "メディアコントロール"
},
"loadingData": {
"message": "データを読み込み中…"
},
"selectWebpage": {
"message": "ページを選択:"
},
"selectMedia": {
"message": "メディアを選択:"
},
"noMediaDetected": {
"message": "メディア検出されず"
},
"noControllableMediaDetected": {
"message": "操作可能なメディア検出されず"
},
"multiplier": {
"message": "倍率:"
},
"speedPlayback": {
"message": "倍速再生"
},
"play": {
"message": "再生"
},
"normalPlay": {
"message": "通常再生"
},
"pictureInPicture": {
"message": "ピクチャインピクチャ"
},
"fullscreen": {
"message": "フルスクリーン"
},
"screenshot": {
"message": "スクリーンショット"
},
"loop": {
"message": "ループ"
},
"mute": {
"message": "ミュート"
},
"volume": {
"message": "音量"
},
"functionEntry": {
"message": "機能入口"
},
"downloader": {
"message": "ダウンローダー"
},
"parser": {
"message": "パーサー"
},
"m3u8Parser": {
"message": "M3U8パーサー"
},
"mpdParser": {
"message": "MPDパーサー"
},
"jsonFormatter": {
"message": "JSONフォーマット"
},
"expandAll": {
"message": "すべて展開"
},
"expandPlayable": {
"message": "再生可能展開"
},
"expandSelected": {
"message": "選択展開"
},
"collapseAll": {
"message": "すべて折りたたみ"
},
"videoRecording": {
"message": "ビデオ録画"
},
"closeRecording": {
"message": "録画終了"
},
"recordWebRTC": {
"message": "webRTC録画"
},
"screenCapture": {
"message": "画面キャプチャー"
},
"simulateMobile": {
"message": "モバイルシミュレーション"
},
"autoDownload": {
"message": "自動ダウンロード"
},
"onlineMerge": {
"message": "オンラインマージ"
},
"download": {
"message": "ダウンロード"
},
"copy": {
"message": "コピー"
},
"selectAll": {
"message": "全選択"
},
"invertSelection": {
"message": "選択反転"
},
"filter": {
"message": "フィルター"
},
"clear": {
"message": "クリア"
},
"deepSearch": {
"message": "深層検索"
},
"closeSearch": {
"message": "検索終了"
},
"cacheCapture": {
"message": "キャッシュキャプチャー"
},
"closeCapture": {
"message": "キャプチャー終了"
},
"moreFeatures": {
"message": "その他の機能"
},
"pause": {
"message": "一時停止"
},
"settings": {
"message": "設定"
},
"closeSimulation": {
"message": "シミュレーション終了"
},
"closeDownload": {
"message": "ダウンロード終了"
},
"enable": {
"message": "有効"
},
"disable": {
"message": "無効"
},
"noData": {
"message": "まだ検出されていません~"
},
"regularFilterPlaceholder": {
"message": "正規表現フィルター リソースURLをマッチング エンターキーで確認"
},
"option": {
"message": "オプション"
},
"titleOption": {
"message": "cat-catch 設定"
},
"titleDownload": {
"message": "cat-catch ダウンローダー"
},
"titleM3U8": {
"message": "cat-catch M3U8パーサー"
},
"titleJson": {
"message": "cat-catch JSONフォーマット"
},
"titledash": {
"message": "cat-catch DASHパーサー"
},
"suffix": {
"message": "サフィックス"
},
"suffixTip": {
"message": "'. 'を除くサフィックスを入力 0でサイズフィルターなし"
},
"extensionName": {
"message": "拡張子"
},
"filterSize": {
"message": "サイズフィルター"
},
"delete": {
"message": "削除"
},
"addSuffix": {
"message": "サフィックス追加"
},
"extension": {
"message": "拡張"
},
"disableAll": {
"message": "すべて無効"
},
"enableAll": {
"message": "すべて有効"
},
"type": {
"message": "タイプ"
},
"addType": {
"message": "タイプ追加"
},
"typeTip": {
"message": "正しいcontent-typeを入力 0でサイズフィルターなし"
},
"addTypeError": {
"message": "キャプチャータイプ形式エラー チェックしてください"
},
"regexMatch": {
"message": "正規表現マッチ"
},
"blockResource": {
"message": "リソースブロック"
},
"alert": {
"message": "通知"
},
"regexExpression": {
"message": "正規表現"
},
"addRegex": {
"message": "正規表現追加"
},
"regexTest": {
"message": "正規表現テスト"
},
"regex": {
"message": "正規表現"
},
"flag": {
"message": "フラグ"
},
"result": {
"message": "結果"
},
"match": {
"message": "マッチ"
},
"noMatch": {
"message": "ノーマッチ"
},
"blockResourceTip": {
"message": "表示させたくないリソースをブロック"
},
"flagTip": {
"message": "i: 大小無視, g: グローバル検索 空欄可"
},
"regexSuffixTip": {
"message": "取得URLにサフィックス指定 可変自動取得"
},
"regexTip": {
"message": "正規表現はリソース高負荷のため必要時のみ使用"
},
"copyTip": {
"message": "外部アプリ利用のためカスタムコピー内容設定"
},
"replaceKeywordList": {
"message": "置換キーワードリスト"
},
"otherFiles": {
"message": "その他のファイル"
},
"resetCopySettings": {
"message": "コピー設定リセット"
},
"autoSetRefererCookieParams": {
"message": "リファラーコokies自動設定"
},
"secretKey": {
"message": "シークレットキー"
},
"address": {
"message": "アドレス"
},
"documentation": {
"message": "ドキュメント"
},
"aria2Tip": {
"message": "優れたダウンロードツール 使用方法は"
},
"m3u8DLTips": {
"message": "優れたm3u8/mpdダウンロードツール 使用方法は"
},
"invoke": {
"message": "呼び出し"
},
"parameter": {
"message": "パラメーター"
},
"parameterSetting": {
"message": "パラメーターセット"
},
"test": {
"message": "テスト"
},
"replaceTags": {
"message": "タグ置換"
},
"customSaveFileName": {
"message": "保存ファイル名カスタム"
},
"userAgentTip": {
"message": "空欄でブラウザデフォルトUser Agent使用"
},
"alwaysDisableCatCatcher": {
"message": "常にcat-catchダウンローダー無効"
},
"autoClosePageAfterDownload": {
"message": "ダウンロード後自動クローズ"
},
"openDownloaderPageInBackground": {
"message": "バックグラウンドでダウンローダー開く"
},
"downloaderTip": {
"message": "ダウンロード失敗時に自動ダウンローダー起動"
},
"autoDownM3u8Tip": {
"message": "「ダウンロード」でm3u8DL即時開始"
},
"otherSettings": {
"message": "その他の設定"
},
"resetOtherSettings": {
"message": "他の設定リセット"
},
"previewMode": {
"message": "ローカルプレイヤーでビデオプレビュー"
},
"previewModePlaceholder": {
"message": "空欄でデフォルトpopupプレビュー使用"
},
"preview": {
"message": "プレビュー"
},
"customFilenameOption": {
"message": "カスタムファイル名保存(デフォルトはページタイトル)"
},
"saveAsOption": {
"message": "ダウンロード後保存先選択"
},
"iconOption": {
"message": "サイトアイコン表示"
},
"clearOption": {
"message": "リロード/遷移でタグデータクリア"
},
"doNotClear": {
"message": "クリアしない"
},
"normalClear": {
"message": "通常クリア"
},
"moreFrequent": {
"message": "より頻繁"
},
"dopreview": {
"message": "preview"
},
"dopopup": {
"message": "popup"
},
"winpreview": {
"message": "window preview"
},
"winpopup": {
"message": "window popup"
},
"excludeDuplicateResources": {
"message": "重複リソース除外(CPU高負荷注意)"
},
"customCSS": {
"message": "カスタムCSS"
},
"MQTT": {
"message": "MQTT"
},
"mqttBroker": {
"message": "MQTTブローカーアドレス"
},
"mqttPath": {
"message": "パス"
},
"mqttProtocol": {
"message": "プロトコル"
},
"mqttClientId": {
"message": "クライアントID"
},
"mqttTitleLength": {
"message": "タイトルの最大長"
},
"mqttUsername": {
"message": "ユーザー名"
},
"mqttPassword": {
"message": "パスワード"
},
"mqttTopic": {
"message": "トピック"
},
"mqttQos": {
"message": "QoSレベル"
},
"mqttQos0": {
"message": "(最大1回)"
},
"mqttQos1": {
"message": "(少なくとも1回)"
},
"mqttQos2": {
"message": "(1回のみ確実に配信)"
},
"mqttDataFormat": {
"message": "データ形式"
},
"mqttDataFormatHelp": {
"message": "{\"url\": \"$${url}\", \"title\": \"$${title}\", \"type\": \"$${type}\", \"ext\": \"$${ext}\", \"timestamp\": \"$${timestamp}\"}"
},
"mqttDataFormatVars": {
"message": "使用可能な変数"
},
"mqttDataFormatDefault": {
"message": "空の場合はデフォルトのJSON形式を使用"
},
"mqttProtocolWss": {
"message": "WSS (セキュア)"
},
"mqttProtocolWs": {
"message": "WS (非セキュア)"
},
"mqttTitleLengthHelp": {
"message": "MQTTメッセージのタイトルの最大長"
},
"mqttBrokerHelp": {
"message": "MQTTブローカーのホスト名またはIPアドレス"
},
"mqttPathHelp": {
"message": "WebSocketパス (通常は/mqttまたは/ws)"
},
"mqttClientIdHelp": {
"message": "この接続の一意のクライアント識別子"
},
"mqttTopicHelp": {
"message": "メッセージを公開するMQTTトピック"
},
"mqttQosHelp": {
"message": "サービス品質レベル (0=最大1回, 1=少なくとも1回, 2=1回のみ確実に配信)"
},
"mqttCredentialsHelp": {
"message": "認証が不要な場合は、ユーザー名とパスワードを空のままにしてください"
},
"operation": {
"message": "操作"
},
"exportSettings": {
"message": "設定エクスポート"
},
"importConfiguration": {
"message": "設定インポート"
},
"clearCapturedData": {
"message": "キャプチャーデータクリア"
},
"resetSettings": {
"message": "設定リセット"
},
"resetAllSettings": {
"message": "すべての設定リセット"
},
"restartExtension": {
"message": "拡張再起動"
},
"about": {
"message": "について"
},
"confirmReset": {
"message": "本当にリセットしますか?"
},
"invokeProtocolTemplate": {
"message": "プロトコルテンプレート呼び出し"
},
"customVLCProtocol": {
"message": "VLCプロトコルカスタム"
},
"systemShare": {
"message": "システム共有"
},
"default": {
"message": "デフォルト"
},
"goBack": {
"message": "前のページへ"
},
"openDir": {
"message": "ダウンロードフォルダを開く"
},
"downloadDir": {
"message": "ダウンロードフォルダ"
},
"sendFfmpeg": {
"message": "オンラインffmpeg送信"
},
"autoCloserDownload": {
"message": "ダウンロード後自動クローズ"
},
"openInBgDownload": {
"message": "バックグラウンドでダウンローダー開く"
},
"m3u8Placeholder": {
"message": "m3u8内容またはtsリストを入力"
},
"m3u8Url": {
"message": "m3u8アドレス"
},
"nextLevel": {
"message": "次の階層ファイル"
},
"nextLevelTip": {
"message": "このm3u8に複数のm3u8がネスト"
},
"multipleAudios": {
"message": "複数の音声"
},
"multipleAudiosTip": {
"message": "このm3u8に複数の音声がネスト"
},
"multipleSubtitles": {
"message": "複数の字幕"
},
"multipleSubtitlesTip": {
"message": "このm3u8に複数の字幕がネスト"
},
"possibleKey": {
"message": "キー候補を検出"
},
"loading": {
"message": "読み込み中…"
},
"waitDownload": {
"message": "ダウンロード待機…"
},
"downloadSegmentList": {
"message": "セグメントリストダウンロード"
},
"originalM3u8": {
"message": "オリジナルm3u8"
},
"localM3u8": {
"message": "ローカルm3u8"
},
"segmentList": {
"message": "セグメントリスト"
},
"downloadProgress": {
"message": "ダウンロード進捗"
},
"getParameters": {
"message": "GETパラメーター"
},
"restoreGetParameters": {
"message": "GETパラメーター復元"
},
"requestHeaders": {
"message": "リクエストヘッダー"
},
"setRequestHeaders": {
"message": "ヘッダー設定"
},
"invokeM3u8DL": {
"message": "m3u8DL呼び出し"
},
"copyCommand": {
"message": "コマンドコピー"
},
"previewCommand": {
"message": "プレビューコマンド"
},
"addSettingParameters": {
"message": "設定パラメーター追加"
},
"customKeyPlaceholder": {
"message": "カスタムキー 16進数/base64/キーURL"
},
"uploadKey": {
"message": "キーをアップロード"
},
"downloadThreads": {
"message": "ダウンロードスレッド"
},
"ffmpegTranscoding": {
"message": "ffmpegトランスコード"
},
"mp4Format": {
"message": "mp4フォーマット"
},
"downloadWhileSaving": {
"message": "ダウンロードしながら保存"
},
"audioOnly": {
"message": "音声のみ"
},
"saveAs": {
"message": "名前を付けて保存"
},
"skipDecryption": {
"message": "復号化をスキップ"
},
"newDownloader": {
"message": "新ダウンローダー"
},
"downloadRange": {
"message": "ダウンロード範囲"
},
"recordLive": {
"message": "ライブ録画"
},
"mergeDownloads": {
"message": "ダウンロードマージ"
},
"redownloadFailedItems": {
"message": "失敗項目再ダウンロード"
},
"downloadExistingData": {
"message": "既存データダウンロード"
},
"stopDownload": {
"message": "ダウンロード停止"
},
"start": {
"message": "開始"
},
"end": {
"message": "終了"
},
"resolution": {
"message": "解像度"
},
"duration": {
"message": "再生時間"
},
"bitrate": {
"message": "ビットレート"
},
"ADTSerror": {
"message": "ADTSヘッダ未検出 AES-128-ECB暗号化リソース 取扱不可"
},
"m3u8Error": {
"message": "m3u8解析/再生エラー コンソールで詳細確認"
},
"noAudio": {
"message": "音声なし"
},
"noVideo": {
"message": "映像なし"
},
"hevcTip": {
"message": "HEVC/H.265セグメント オンラインffmpegのみ対応"
},
"hevcPreviewTip": {
"message": "HEVC/H.265セグメント プレビュー不可"
},
"m3u8Info": {
"message": "合計 $num$ 個のファイル、総再生時間 $time$",
"placeholders": {
"num": {
"content": "$1"
},
"time": {
"content": "$2"
}
}
},
"encryptedHLS": {
"message": "暗号化HLS"
},
"encryptedSAMPLE": {
"message": "SAMPLE-AES-CTR暗号化リソース 現在処理不可"
},
"liveHLS": {
"message": "ライブHLS"
},
"keyAddress": {
"message": "キーURL"
},
"key": {
"message": "キー"
},
"encryptionAlgorithm": {
"message": "暗号化アルゴリズム"
},
"keyDownloadFailed": {
"message": "キーダウンロード失敗"
},
"savePrompt": {
"message": "ハードディスクに保存 ブラウザダウンロード履歴を確認"
},
"close": {
"message": "閉じる"
},
"blobM3u8DLError": {
"message": "blobアドレスはm3u8DL不可"
},
"M3U8DLparameterLong": {
"message": "m3u8dlパラメーター長すぎ m3u8DL手動実行してください"
},
"runningCannotChangeSettings": {
"message": "実行中 設定変更不可"
},
"streamSaverTip": {
"message": "ダウンロードしながら保存 ffmpeg変換不可 切片再ダウンロード不可 名前指定不可"
},
"stopRecording": {
"message": "録画停止"
},
"waitingForLiveData": {
"message": "ライブデータ待機中…ページを閉じないでください…"
},
"sNumError": {
"message": "番号エラー"
},
"startGTend": {
"message": "開始番号は終了番号より大きくできません"
},
"sNumMax": {
"message": "最大番号は $num$ を超えられません",
"placeholders": {
"num": {
"content": "$1"
}
}
},
"incorrectKey": {
"message": "キーが間違っています"
},
"addParameters": {
"message": "パラメーター追加"
},
"decryptionError": {
"message": "復号化エラー"
},
"downloadFailed": {
"message": "ダウンロード失敗"
},
"retryDownload": {
"message": "再ダウンロード"
},
"recordingDuration": {
"message": "録画時間"
},
"downloaded": {
"message": "ダウンロード済"
},
"downloadedVideoLength": {
"message": "ダウンロード済映像長"
},
"downloadComplete": {
"message": "ダウンロード完了"
},
"retryingDownload": {
"message": "再ダウンロード中"
},
"merging": {
"message": "マージ中"
},
"fileTooLarge": {
"message": "$size$ を超えるためオンラインffmpeg不可 ダウンロードマージ中 大きいファイルは時間がかかります",
"placeholders": {
"size": {
"content": "$1"
}
}
},
"fileTooLargeStream": {
"message": "$size$ 超えています ダウンロードしながら保存を有効にしますか?",
"placeholders": {
"size": {
"content": "$1"
}
}
},
"formatConversionError": {
"message": "フォーマット変換エラー mp4変換をキャンセルして再ダウンロードしてください"
},
"streamOnbeforeunload": {
"message": "ストリーミング中 閉じるとダウンロード停止…"
},
"fileLoading": {
"message": "ファイル読み込み中"
},
"expandAllNodes": {
"message": "すべてのノード展開"
},
"collapseAllNodes": {
"message": "すべてのノード折りたたみ"
},
"fileRetrievalFailed": {
"message": "ファイル取得失敗"
},
"selectVideo": {
"message": "映像選択"
},
"extractSlices": {
"message": "スライス抽出"
},
"convertToM3U8": {
"message": "m3u8解析へ変換"
},
"selectAudio": {
"message": "音声選択"
},
"audio": {
"message": "音声"
},
"video": {
"message": "映像"
},
"DRMerror": {
"message": "DRM保護付き 他ツールでダウンロードしてください"
},
"regexTitle": {
"message": "正規表現マッチ 深層検索からの取得"
},
"downloadWithRequestHeader": {
"message": "リクエストヘッダー付きダウンロード"
},
"m3u8Playlist": {
"message": "m3u8プレイリスト"
},
"copiedToClipboard": {
"message": "クリップボードにコピー済"
},
"hasSent": {
"message": "送信済"
},
"sendFailed": {
"message": "送信失敗"
},
"confirmDownload": {
"message": "合計 $num$ 個のファイル ダウンロードしますか?",
"placeholders": {
"num": {
"content": "$1"
}
}
},
"confirmLoading": {
"message": "$num$ 個のリソース ロードをキャンセルしますか?",
"placeholders": {
"num": {
"content": "$1"
}
}
},
"waitingForMedia": {
"message": "メディア受信待機中…ページを閉じないでください…"
},
"exit": {
"message": "終了"
},
"unknownSize": {
"message": "サイズ不明"
},
"saving": {
"message": "保存中"
},
"saveFailed": {
"message": "保存失敗"
},
"badgeNumber": {
"message": "アイコンに数字バッジ表示"
},
"viewSlices": {
"message": "すべてのスライスと進捗を表示"
},
"send2local": {
"message": "データ送信"
},
"send2MQTT": {
"message": "MQTTに送信"
},
"sendingToMQTT": {
"message": "MQTTサーバーに送信中..."
},
"connectingToMQTT": {
"message": "MQTTサーバーに接続中..."
},
"sendingMessageToMQTT": {
"message": "MQTTサーバーにメッセージ送信中..."
},
"messageSentToMQTT": {
"message": "MQTTサーバーにメッセージ送信完了"
},
"popup": {
"message": "ポップアップ"
},
"defaultPopup": {
"message": "デフォルトポップアップ"
},
"invokeApp": {
"message": "アプリ呼び出し"
},
"onlineServiceAddress": {
"message": "オンラインサービスアドレス"
},
"withinChina": {
"message": "中国国内"
},
"dataFetchFailed": {
"message": "データ取得失敗"
},
"confirmParameters": {
"message": "パラメーター確認"
},
"searchingForRealKey": {
"message": "リアルキー探索中"
},
"verifying": {
"message": "検証中"
},
"realKeyNotFound": {
"message": "リアルキー未検出"
},
"blockUrl": {
"message": "ブロックURL"
},
"addUrl": {
"message": "URL追加"
},
"wildcards": {
"message": "ワイルドカード"
},
"blockUrlTips": {
"message": "*と?のワイルドカード使用可"
},
"setWhiteList": {
"message": "ホワイトリスト設定"
},
"autoSend": {
"message": "自動送信"
},
"manualSend": {
"message": "手動送信"
},
"requestMethod": {
"message": "リクエストメソッド"
},
"requestBody": {
"message": "リクエストボディ"
},
"sort": {
"message": "ソート"
},
"asc": {
"message": "昇順"
},
"desc": {
"message": "降順"
},
"getTime": {
"message": "取得時間"
},
"fileSize": {
"message": "ファイルサイズ"
},
"title": {
"message": "タイトル"
},
"noKeyIsRequired": {
"message": "キー不要"
},
"estimateSize": {
"message": "推定サイズ"
},
"retryCount": {
"message": "再試行回数"
},
"useSidePanel": {
"message": "サイドパネル使用"
},
"Script": {
"message": "スクリプト"
},
"alwaysSearch": {
"message": "常に深層検索を有効"
},
"deleteDuplicateFilenames": {
"message": "重複ファイル名を削除"
}
}
================================================
FILE: _locales/pt_BR/messages.json
================================================
{
"catCatch": {
"message": "cat-catch"
},
"description": {
"message": "Ferramenta de detecção de mídia da web"
},
"confirm": {
"message": "Confirmar"
},
"currentPage": {
"message": "Página Atual"
},
"otherPage": {
"message": "Outra Página"
},
"otherFeatures": {
"message": "Outros Recursos"
},
"mediaControl": {
"message": "Controle de Mídia"
},
"loadingData": {
"message": "Carregando Dados..."
},
"selectWebpage": {
"message": "Página da Internet:"
},
"selectMedia": {
"message": "Mídia:"
},
"noMediaDetected": {
"message": "Nenhuma Mídia Detectada na Página da Web"
},
"noControllableMediaDetected": {
"message": "Nenhuma Mídia Controlável Detectada"
},
"multiplier": {
"message": "Multiplicador:"
},
"speedPlayback": {
"message": "Velocidade de Reprodução"
},
"play": {
"message": "Reproduzir"
},
"normalPlay": {
"message": "Reprodução Normal"
},
"pictureInPicture": {
"message": "Imagem em Imagem"
},
"fullscreen": {
"message": "Tela Cheia"
},
"screenshot": {
"message": "Capturar Tela"
},
"loop": {
"message": "Repetir"
},
"mute": {
"message": "Mudo"
},
"volume": {
"message": "Volume"
},
"functionEntry": {
"message": "Entrada de função"
},
"downloader": {
"message": "Downloader"
},
"parser": {
"message": "Analisador"
},
"m3u8Parser": {
"message": "Analisador M3U8"
},
"mpdParser": {
"message": "Analisador MPD"
},
"jsonFormatter": {
"message": "Formatador JSON"
},
"expandAll": {
"message": "Expandir Tudo"
},
"expandPlayable": {
"message": "Expandir Reproduzível"
},
"expandSelected": {
"message": "Expandir Selecionado"
},
"collapseAll": {
"message": "Agrupar Tudo"
},
"videoRecording": {
"message": "Gravar Vídeo"
},
"closeRecording": {
"message": "Fechar Gravação"
},
"recordWebRTC": {
"message": "Gravar WebRTC"
},
"screenCapture": {
"message": "Capturar Tela"
},
"simulateMobile": {
"message": "Simular Celular"
},
"autoDownload": {
"message": "Download Automático"
},
"onlineMerge": {
"message": "Mesclar"
},
"download": {
"message": "Baixar"
},
"copy": {
"message": "Copiar"
},
"selectAll": {
"message": "Selecionar Tudo"
},
"invertSelection": {
"message": "Alternar"
},
"filter": {
"message": "Filtrar"
},
"clear": {
"message": "Limpar"
},
"deepSearch": {
"message": "Buscar"
},
"closeSearch": {
"message": "Fechar Busca"
},
"cacheCapture": {
"message": "Capturar"
},
"closeCapture": {
"message": "Fechar Captura"
},
"moreFeatures": {
"message": "Mais"
},
"pause": {
"message": "Pausar"
},
"settings": {
"message": "Configurações"
},
"closeSimulation": {
"message": "Fechar Simulação"
},
"closeDownload": {
"message": "Fechar Download"
},
"enable": {
"message": "Habilitar"
},
"disable": {
"message": "Desabilitar"
},
"noData": {
"message": "Sem Peixe"
},
"regularFilterPlaceholder": {
"message": "Filtro de expressão regular, corresponde a um recurso URL, pressione Enter para confirmar"
},
"option": {
"message": "Opção"
},
"titleOption": {
"message": "Cat-catch Opção"
},
"titleDownload": {
"message": "Cat-catch Baixar"
},
"titleM3U8": {
"message": "Cat-catch Analisador M3u8"
},
"titleJson": {
"message": "Cat-catch Formatador Json"
},
"titledash": {
"message": "Cat-catch Analisador Dash"
},
"suffix": {
"message": "Sufixo"
},
"suffixTip": {
"message": "Preencha com sufixo que não contém '.', se nenhuma filtragem de tamanho for necessária, preencha com 0."
},
"extensionName": {
"message": "Nome da Extensão"
},
"filterSize": {
"message": "Filtrar Tamanho"
},
"delete": {
"message": "Excluir"
},
"addSuffix": {
"message": "Adicionar Sufixo"
},
"extension": {
"message": "Extensão"
},
"disableAll": {
"message": "Desabilitar Tudo"
},
"enableAll": {
"message": "Habilitar Tudo"
},
"type": {
"message": "Tipo"
},
"addType": {
"message": "Adicionar Tipo"
},
"typeTip": {
"message": "Inserir o tipo de conteúdo correto; se nenhuma filtragem de tamanho for necessária, preencha com 0."
},
"addTypeError": {
"message": "O formato do tipo de captura está incorreto, verifique"
},
"regexMatch": {
"message": "Correspondência Regex"
},
"blockResource": {
"message": "Bloquear Recurso"
},
"alert": {
"message": "Alerta"
},
"regexExpression": {
"message": "Expressão Regex"
},
"addRegex": {
"message": "Adicionar Regex"
},
"regexTest": {
"message": "Testar Regex"
},
"regex": {
"message": "regex"
},
"flag": {
"message": "Sinalizador"
},
"result": {
"message": "Resultado"
},
"match": {
"message": "Correspondente"
},
"noMatch": {
"message": "Sem Correspondente"
},
"blockResourceTip": {
"message": "Bloqueia os recursos que você não deseja que apareçam"
},
"flagTip": {
"message": "i: ignorar maiúsculas e minúsculas, g: pesquisa global. Também pode ser deixado em branco"
},
"regexSuffixTip": {
"message": "Atribuir um sufixo a URL obtida. Pode ser deixado em branco e o sufixo será automaticamente truncado (muitos arquivos não possuem sufixo)"
},
"regexTip": {
"message": "Expressões regulares consomem muitos recursos, use-as com cuidado se não for necessário"
},
"copyTip": {
"message": "Para maior comodidade de usar aplicativos de terceiros, personalize o conteúdo gravado na área de transferência pelo botão copiar"
},
"replaceKeywordList": {
"message": "Lista de Substitutos para Palavras-Chaves"
},
"otherFiles": {
"message": "Outros Arquivos"
},
"resetCopySettings": {
"message": "Restaurar Configuração de Copiar"
},
"autoSetRefererCookieParams": {
"message": "Definir Automaticamente Parâmetros de Referência e Cookies"
},
"secretKey": {
"message": "Chave Secreta"
},
"address": {
"message": "Endereço"
},
"documentation": {
"message": "Documentação"
},
"aria2Tip": {
"message": "Uma excelente ferramenta de download, veja como usar"
},
"m3u8DLTips": {
"message": "Uma excelente ferramenta de download de m3u8 e mpd de terceiros, veja como usar"
},
"invoke": {
"message": "Invocar"
},
"parameter": {
"message": "Parâmetros"
},
"parameterSetting": {
"message": "Configuração de Parâmetro"
},
"test": {
"message": "Testar"
},
"replaceTags": {
"message": "Substituir Etiquetas"
},
"customSaveFileName": {
"message": "Personalizar Nome do Arquivo Salvo"
},
"userAgentTip": {
"message": "Padrão para o User Agent do navegador atual"
},
"alwaysDisableCatCatcher": {
"message": "Sempre desativar o Cat-Catch Downloader"
},
"autoClosePageAfterDownload": {
"message": "Fechar Página Automaticamente Após Download"
},
"openDownloaderPageInBackground": {
"message": "Abrir a Página do Downloader em Segundo Plano"
},
"downloaderTip": {
"message": "Se o download do recurso falhar, ative automaticamente o downloader para tentar novamente."
},
"autoDownM3u8Tip": {
"message": "Clique no botão de download e use o analisador m3u8 para iniciar a mesclagem e o download imediatamente"
},
"otherSettings": {
"message": "Outras Configurações"
},
"resetOtherSettings": {
"message": "Restaurar Outras Configuração"
},
"previewMode": {
"message": "Use o protocolo de chamada do player local para abrir visualizações de vídeo"
},
"previewModePlaceholder": {
"message": "Deixe em branco para desativá-lo. O padrão é usar a página pop-up para visualizar o vídeo"
},
"preview": {
"message": "Prévia"
},
"customFilenameOption": {
"message": "Usar um nome de arquivo personalizado para salvar o arquivo (o padrão é o título da página da web)"
},
"saveAsOption": {
"message": "Escolher o diretório de salvamento após o download"
},
"iconOption": {
"message": "Exibir o ícone do site"
},
"clearOption": {
"message": "Atualize, navegue para uma nova página e limpe os dados capturados pela guia atual"
},
"doNotClear": {
"message": "Não Limpar"
},
"normalClear": {
"message": "Limpeza Normal"
},
"moreFrequent": {
"message": "Mais Freqüente"
},
"dopreview": {
"message": "prévia"
},
"dopopup": {
"message": "balão"
},
"winpreview": {
"message": "janela da prévia"
},
"winpopup": {
"message": "janela do balão"
},
"excludeDuplicateResources": {
"message": "Excluir recursos duplicados (consome muitos recursos da CPU)"
},
"customCSS": {
"message": "CSS Personalizado"
},
"MQTT": {
"message": "MQTT"
},
"mqttBroker": {
"message": "Endereço do Broker MQTT"
},
"mqttPath": {
"message": "Caminho"
},
"mqttProtocol": {
"message": "Protocolo"
},
"mqttClientId": {
"message": "ID do Cliente"
},
"mqttTitleLength": {
"message": "Tamanho Máximo do Título"
},
"mqttUsername": {
"message": "Nome de Usuário"
},
"mqttPassword": {
"message": "Senha"
},
"mqttTopic": {
"message": "Tópico"
},
"mqttQos": {
"message": "Nível de QoS"
},
"mqttQos0": {
"message": "(No Máximo Uma Vez)"
},
"mqttQos1": {
"message": "(Pelo Menos Uma Vez)"
},
"mqttQos2": {
"message": "(Exatamente Uma Vez)"
},
"mqttDataFormat": {
"message": "Formato dos Dados"
},
"mqttDataFormatHelp": {
"message": "{\"url\": \"$${url}\", \"title\": \"$${title}\", \"type\": \"$${type}\", \"ext\": \"$${ext}\", \"timestamp\": \"$${timestamp}\"}"
},
"mqttDataFormatVars": {
"message": "Variáveis disponíveis"
},
"mqttDataFormatDefault": {
"message": "Deixe em branco para usar o formato JSON padrão"
},
"mqttProtocolWss": {
"message": "WSS (Seguro)"
},
"mqttProtocolWs": {
"message": "WS (Não Seguro)"
},
"mqttTitleLengthHelp": {
"message": "Comprimento máximo do título nas mensagens MQTT"
},
"mqttBrokerHelp": {
"message": "Endereço do host ou IP do broker MQTT"
},
"mqttPathHelp": {
"message": "Caminho do WebSocket (geralmente /mqtt ou /ws)"
},
"mqttClientIdHelp": {
"message": "Identificador único do cliente para esta conexão"
},
"mqttTopicHelp": {
"message": "Tópico MQTT para publicar as mensagens"
},
"mqttQosHelp": {
"message": "Nível de Qualidade de Serviço (0=No Máximo Uma Vez, 1=Pelo Menos Uma Vez, 2=Exatamente Uma Vez)"
},
"mqttCredentialsHelp": {
"message": "Deixe em branco se não for necessária autenticação"
},
"operation": {
"message": "Operação"
},
"exportSettings": {
"message": "Exportar Configurações"
},
"importConfiguration": {
"message": "Importar Configurações"
},
"clearCapturedData": {
"message": "Limpar Dados Capturados"
},
"resetSettings": {
"message": "Restaurar Configurações"
},
"resetAllSettings": {
"message": "Restaurar Todas Configurações"
},
"restartExtension": {
"message": "Reiniciar Extensão"
},
"about": {
"message": "Sobre"
},
"confirmReset": {
"message": "Tem certeza de que deseja redefinir?"
},
"invokeProtocolTemplate": {
"message": "Invocar Modelo do Protocolo"
},
"customVLCProtocol": {
"message": "Protocolo VLC Personalizado"
},
"systemShare": {
"message": "Compartilhamento do Sistema"
},
"default": {
"message": "Padrão"
},
"goBack": {
"message": "Voltar"
},
"openDir": {
"message": "Abrir Diretório"
},
"downloadDir": {
"message": "Baixar Diretório"
},
"sendFfmpeg": {
"message": "Enviar para ffmpeg Online"
},
"autoCloserDownload": {
"message": "Fechar Página Automaticamente Após Download"
},
"openInBgDownload": {
"message": "Abrir a Página do Downloader em Segundo Plano"
},
"m3u8Placeholder": {
"message": "Insira o conteúdo do m3u8 ou a lista de fragmentos ts."
},
"m3u8Url": {
"message": "URL do m3u8"
},
"nextLevel": {
"message": "Próximo Nível"
},
"nextLevelTip": {
"message": "Este arquivo M3U8 alinha vários arquivos M3U8."
},
"multipleAudios": {
"message": "Múltiplos Áudios"
},
"multipleAudiosTip": {
"message": "Este arquivo M3U8 alinha múltiplos áudios"
},
"multipleSubtitles": {
"message": "Múltiplas Legendas"
},
"multipleSubtitlesTip": {
"message": "Este arquivo M3U8 alinha múltiplas legendas."
},
"possibleKey": {
"message": "Chaves possíveis encontradas"
},
"loading": {
"message": "Carregando..."
},
"waitDownload": {
"message": "Aguardando download..."
},
"downloadSegmentList": {
"message": "Lista de download"
},
"originalM3u8": {
"message": "M3U8 Original"
},
"localM3u8": {
"message": "M3U8 Local"
},
"segmentList": {
"message": "Segmento"
},
"downloadProgress": {
"message": "Progresso do Download"
},
"getParameters": {
"message": "Parâmetros GET"
},
"restoreGetParameters": {
"message": "Restaurar Parâmetros GET"
},
"requestHeaders": {
"message": "Solicitar Cabeçalhos"
},
"setRequestHeaders": {
"message": "Configurar solicitação cabeçalhos."
},
"invokeM3u8DL": {
"message": "Invocar M3U8DL"
},
"copyCommand": {
"message": "Copiar Comando"
},
"previewCommand": {
"message": "Prévia do Comando"
},
"addSettingParameters": {
"message": "Adicionar Parâmetros de Configuração"
},
"customKeyPlaceholder": {
"message": "Personalizar a chave em hexadecimal ou base64, ou o endereço da chave"
},
"uploadKey": {
"message": "Chave de upload"
},
"downloadThreads": {
"message": "Processos"
},
"ffmpegTranscoding": {
"message": "Transcodificação FFmpeg"
},
"mp4Format": {
"message": "MP4"
},
"downloadWhileSaving": {
"message": "Baixar Stream"
},
"audioOnly": {
"message": "Somente Áudio"
},
"saveAs": {
"message": "Salvar Como"
},
"skipDecryption": {
"message": "Pular Descriptografia"
},
"newDownloader": {
"message": "Novo Downloader"
},
"downloadRange": {
"message": "Faixa de Download"
},
"recordLive": {
"message": "Gravar"
},
"mergeDownloads": {
"message": "Mesclar Downloads"
},
"redownloadFailedItems": {
"message": "Baixar novamente Itens com Falha"
},
"downloadExistingData": {
"message": "Baixar Dados Existentes"
},
"stopDownload": {
"message": "Parar Download"
},
"start": {
"message": "Começar"
},
"end": {
"message": "Terminar"
},
"resolution": {
"message": "Resolução"
},
"duration": {
"message": "Duração"
},
"bitrate": {
"message": "Taxa de bits"
},
"ADTSerror": {
"message": "Não foi possível localizar o cabeçalho ADTS. Pode ser um recurso criptografado AES-128-ECB, que atualmente não é compatível com descriptografia. Usar software de mesclagem de terceiros."
},
"m3u8Error": {
"message": "Há erros na análise ou reprodução do arquivo M3U8. Verifique o console para obter informações detalhadas sobre erros"
},
"noAudio": {
"message": "Sem Áudio"
},
"noVideo": {
"message": "Sem Vídeo"
},
"hevcTip": {
"message": "Arquivos de fragmentos codificados HEVC/H.265 são suportados apenas para transcodificação ffmpeg online"
},
"hevcPreviewTip": {
"message": "Arquivos de fragmentos codificados HEVC/H.265 não são suportados para visualização."
},
"m3u8Info": {
"message": "Um total de $num$ arquivo(s), com duração total de $time$.",
"placeholders": {
"num": {
"content": "$1"
},
"time": {
"content": "$2"
}
}
},
"encryptedHLS": {
"message": "HLS Criptografado"
},
"encryptedSAMPLE": {
"message": "Os recursos criptografados com SAMPLE-AES-CTR não podem ser manipulados no momento."
},
"liveHLS": {
"message": "HLS Ao Vivo"
},
"keyAddress": {
"message": "Endereço Chave"
},
"key": {
"message": "Chave"
},
"encryptionAlgorithm": {
"message": "Método"
},
"keyDownloadFailed": {
"message": "Falha no Download da Chave"
},
"savePrompt": {
"message": "Salvo no disco, verifique o conteúdo baixado no navegador."
},
"close": {
"message": "Fechar"
},
"blobM3u8DLError": {
"message": "URLs de blob não podem invocar M3U8DL para download"
},
"M3U8DLparameterLong": {
"message": "O parâmetro M3U8DL é muito longo."
},
"runningCannotChangeSettings": {
"message": "Em execução, não é possível alterar as configurações"
},
"streamSaverTip": {
"message": "A função de 'baixar enquanto salva' não oferece suporte à conversão de formato online ffmpeg, não suporta download novamente de fatias erradas e não suporta 'salvar como'."
},
"stopRecording": {
"message": "Parar de Gravação"
},
"waitingForLiveData": {
"message": "Esperando por Dados do Ao Vivo"
},
"sNumError": {
"message": "Erro no número de série"
},
"startGTend": {
"message": "O número inicial não pode ser maior que o número final"
},
"sNumMax": {
"message": "O número de série não pode exceder $num$",
"placeholders": {
"num": {
"content": "$1"
}
}
},
"incorrectKey": {
"message": "Chave Incorreta"
},
"addParameters": {
"message": "Adicionar Parâmetros"
},
"decryptionError": {
"message": "Erro de Descriptografia"
},
"downloadFailed": {
"message": "Falha no Download"
},
"retryDownload": {
"message": "Tentar Baixar Novamente"
},
"recordingDuration": {
"message": "Duração da Gravação"
},
"downloaded": {
"message": "Baixado"
},
"downloadedVideoLength": {
"message": "Duração do Vídeo Baixado"
},
"downloadComplete": {
"message": "Download Completo"
},
"retryingDownload": {
"message": "Tentar Baixar Novamente"
},
"merging": {
"message": "Mesclando"
},
"fileTooLarge": {
"message": "Arquivo muito grande, arquivo maior que $size$",
"placeholders": {
"size": {
"content": "$1"
}
}
},
"fileTooLargeStream": {
"message": "Arquivo maior que $size$, habilitar download da stream?",
"placeholders": {
"size": {
"content": "$1"
}
}
},
"formatConversionError": {
"message": "Erro de Conversão de Formato"
},
"streamOnbeforeunload": {
"message": "A transmissão está em andamento, o download será interrompido após o fechamento"
},
"fileLoading": {
"message": "Carregamento de Arquivo"
},
"expandAllNodes": {
"message": "Expandir todos os nós JSON"
},
"collapseAllNodes": {
"message": "Agrupar todos os nós JSON"
},
"fileRetrievalFailed": {
"message": "Falha ao Salvar Arquivo"
},
"selectVideo": {
"message": "Selecionar Vídeo"
},
"extractSlices": {
"message": "Extrair Pedaços"
},
"convertToM3U8": {
"message": "Converter para Análise M3U8"
},
"selectAudio": {
"message": "Selecionar Áudio"
},
"audio": {
"message": "Áudio"
},
"video": {
"message": "Vídeo"
},
"DRMerror": {
"message": "A mídia possui proteção DRM, use ferramentas de terceiros para download"
},
"regexTitle": {
"message": "Correspondência de expressão regular ou de pesquisa profunda"
},
"downloadWithRequestHeader": {
"message": "Baixar com parâmetros de cabeçalho de solicitação."
},
"m3u8Playlist": {
"message": "Lista de Reprodução M3U8"
},
"copiedToClipboard": {
"message": "Copiar para Área de Transferência"
},
"hasSent": {
"message": "Enviado"
},
"sendFailed": {
"message": "Envio Falhou"
},
"confirmDownload": {
"message": "$num$ arquivos no total, confirmar download?",
"placeholders": {
"num": {
"content": "$1"
}
}
},
"confirmLoading": {
"message": "Existem $num$ recursos no total, deseja cancelar o carregamento?",
"placeholders": {
"num": {
"content": "$1"
}
}
},
"waitingForMedia": {
"message": "Aguardando receber arquivos de mídia... Por favor, não feche esta página."
},
"exit": {
"message": "Sair"
},
"unknownSize": {
"message": "Tamanho Desconhecido"
},
"saving": {
"message": "Salvando"
},
"saveFailed": {
"message": "Falha ao salvar"
},
"badgeNumber": {
"message": "Mostrar prompt do emblema do ícone"
},
"viewSlices": {
"message": "Exibir todas as fatias e progresso do download"
},
"send2local": {
"message": "Transmissão de dados"
},
"send2MQTT": {
"message": "Enviar para MQTT"
},
"sendingToMQTT": {
"message": "Enviando para servidor MQTT..."
},
"connectingToMQTT": {
"message": "Conectando ao servidor MQTT..."
},
"sendingMessageToMQTT": {
"message": "Enviando mensagem para servidor MQTT..."
},
"messageSentToMQTT": {
"message": "Mensagem enviada para servidor MQTT"
},
"popup": {
"message": "Balão"
},
"defaultPopup": {
"message": "Modo Balão Padrão"
},
"invokeApp": {
"message": "Invocar aplicativo"
},
"onlineServiceAddress": {
"message": "Endereço do Serviço Online"
},
"withinChina": {
"message": "Interior da China"
},
"dataFetchFailed": {
"message": "Falha na busca de dados"
},
"confirmParameters": {
"message": "Confirmar Parâmetros"
},
"searchingForRealKey": {
"message": "Procurando pela chave real"
},
"verifying": {
"message": "Verificando"
},
"realKeyNotFound": {
"message": "Chave real não encontrada"
},
"blockUrl": {
"message": "Bloquear URL"
},
"addUrl": {
"message": "Adicionar URL"
},
"wildcards": {
"message": "curingas"
},
"blockUrlTips": {
"message": "Suportar curingas * e ?"
},
"setWhiteList": {
"message": "Definir para lista de permissões"
},
"autoSend": {
"message": "Transmissão manual de dados"
},
"manualSend": {
"message": "Transmissão automática de dados"
},
"requestMethod": {
"message": "Método do Pedido"
},
"requestBody": {
"message": "Corpo do Pedido"
},
"sort": {
"message": "Ordenar"
},
"asc": {
"message": "Ascendentemente"
},
"desc": {
"message": "Descendentemente"
},
"getTime": {
"message": "Tempo de Recuperação"
},
"fileSize": {
"message": "Tamanho do Arquivo"
},
"title": {
"message": "Título"
},
"noKeyIsRequired": {
"message": "Nenhuma chave é necessária"
},
"estimateSize": {
"message": "Tamanho estimado"
},
"retryCount": {
"message": "Número de tentativas"
},
"useSidePanel": {
"message": "Usar painel lateral"
},
"Script": {
"message": "Script"
},
"alwaysSearch": {
"message": "Sempre habilitar pesquisa profunda"
},
"sideurlprotocol": {
"message": "Protocolo URL m3u8dl"
},
"deleteDuplicateFilenames": {
"message": "Excluir nomes de arquivos duplicados"
},
"alertimport": {
"message": "Importação concluída"
},
"isBlockedSite": {
"message": "Este site exige bloquear a operação desta extensão"
}
}
================================================
FILE: _locales/tr/messages.json
================================================
{
"catCatch": {
"message": "cat-catch"
},
"description": {
"message": "Web medya sniffer aracı"
},
"confirm": {
"message": "Onayla"
},
"currentPage": {
"message": "Mevcut Sayfa"
},
"otherPage": {
"message": "Diğer Sayfa"
},
"otherFeatures": {
"message": "Diğer Özellikler"
},
"mediaControl": {
"message": "Medya Kontrolü"
},
"loadingData": {
"message": "Veriler Yükleniyor..."
},
"selectWebpage": {
"message": "Web Sayfası:"
},
"selectMedia": {
"message": "Medya:"
},
"noMediaDetected": {
"message": "Web Sayfasında Medya Algılanmadı"
},
"noControllableMediaDetected": {
"message": "Kontrol Edilebilir Medya Algılanmadı"
},
"multiplier": {
"message": "Çarpan:"
},
"speedPlayback": {
"message": "Oynatma Hızı"
},
"play": {
"message": "Oynat"
},
"normalPlay": {
"message": "Normal Oynatma"
},
"pictureInPicture": {
"message": "Resimde Resim"
},
"fullscreen": {
"message": "Tam Ekran"
},
"screenshot": {
"message": "Ekran Görüntüsü"
},
"loop": {
"message": "Döngü"
},
"mute": {
"message": "Sessize Al"
},
"volume": {
"message": "Ses Düzeyi"
},
"functionEntry": {
"message": "İşlev Girişi"
},
"downloader": {
"message": "İndirici"
},
"parser": {
"message": "Ayrıştırıcı"
},
"m3u8Parser": {
"message": "M3U8 Ayrıştırıcısı"
},
"mpdParser": {
"message": "MPD Ayrıştırıcısı"
},
"jsonFormatter": {
"message": "JSON Biçimlendirici"
},
"expandAll": {
"message": "Tümünü Genişlet"
},
"expandPlayable": {
"message": "Oynatılabilir Olanları Genişlet"
},
"expandSelected": {
"message": "Seçilenleri Genişlet"
},
"collapseAll": {
"message": "Tümünü Daralt"
},
"videoRecording": {
"message": "Video Kaydı"
},
"closeRecording": {
"message": "Kaydı Kapat"
},
"recordWebRTC": {
"message": "WebRTC Kaydet"
},
"screenCapture": {
"message": "Ekran Yakalama"
},
"simulateMobile": {
"message": "Mobil Cihazı Simüle Et"
},
"autoDownload": {
"message": "Otomatik İndir"
},
"onlineMerge": {
"message": "Birleştir"
},
"download": {
"message": "İndir"
},
"copy": {
"message": "Kopyala"
},
"selectAll": {
"message": "Tümünü Seç"
},
"invertSelection": {
"message": "Seçimi Tersine Çevir"
},
"filter": {
"message": "Filtre"
},
"clear": {
"message": "Temizle"
},
"deepSearch": {
"message": "Ara"
},
"closeSearch": {
"message": "Aramayı Kapat"
},
"cacheCapture": {
"message": "Yakala"
},
"closeCapture": {
"message": "Yakalamayı Kapat"
},
"moreFeatures": {
"message": "Daha Fazla"
},
"pause": {
"message": "Duraklat"
},
"settings": {
"message": "Ayarlar"
},
"closeSimulation": {
"message": "Simülasyonu Kapat"
},
"closeDownload": {
"message": "İndirmeyi Kapat"
},
"enable": {
"message": "Etkinleştir"
},
"disable": {
"message": "Devre Dışı Bırak"
},
"noData": {
"message": "Balık Yok"
},
"regularFilterPlaceholder": {
"message": "Düzenli ifade filtresi, kaynak URL ile eşleş, onaylamak için Enter tuşuna bas"
},
"option": {
"message": "Seçenek"
},
"titleOption": {
"message": "cat-catch Seçeneği"
},
"titleDownload": {
"message": "cat-catch İndir"
},
"titleM3U8": {
"message": "cat-catch m3u8 Ayrıştırıcısı"
},
"titleJson": {
"message": "cat-catch json biçimlendirici"
},
"titledash": {
"message": "cat-catch Dash Ayrıştırıcısı"
},
"suffix": {
"message": "Eki"
},
"suffixTip": {
"message": "'.' içermeyen eki doldurun, boyut filtrelemeye gerek yoksa 0 doldurun."
},
"extensionName": {
"message": "Uzantı Adı"
},
"filterSize": {
"message": "Boyut Filtresi"
},
"delete": {
"message": "Sil"
},
"addSuffix": {
"message": "Ek Ekle"
},
"extension": {
"message": "Uzantı"
},
"disableAll": {
"message": "Tümünü Devre Dışı Bırak"
},
"enableAll": {
"message": "Tümünü Etkinleştir"
},
"type": {
"message": "Tür"
},
"addType": {
"message": "Tür Ekle"
},
"typeTip": {
"message": "Doğru içerik türünü girin, boyut filtrelemeye gerek yoksa 0 doldurun."
},
"addTypeError": {
"message": "Yakalama türünün biçimi yanlış, lütfen kontrol edin"
},
"regexMatch": {
"message": "Düzenli İfade Eşleşmesi"
},
"blockResource": {
"message": "Kaynağı Engelle"
},
"alert": {
"message": "Uyarı"
},
"regexExpression": {
"message": "Düzenli İfade"
},
"addRegex": {
"message": "Düzenli İfade Ekle"
},
"regexTest": {
"message": "Düzenli ifade testi"
},
"regex": {
"message": "düzenli ifade"
},
"flag": {
"message": "Bayrak"
},
"result": {
"message": "Sonuç"
},
"match": {
"message": "Eşleş"
},
"noMatch": {
"message": "Eşleşme Yok"
},
"blockResourceTip": {
"message": "Görünmesini istemediğiniz kaynakları engelleyin"
},
"flagTip": {
"message": "i: büyük/küçük harfe duyarlı olmayan, g: global arama. Boş da bırakılabilir"
},
"regexSuffixTip": {
"message": "Elde edilen URL'ye bir ek atayın. Boş bırakılabilir ve ek otomatik olarak kesilecektir (birçok dosyanın eki yoktur)"
},
"regexTip": {
"message": "Düzenli ifadeler çok kaynak tüketir, gerekmedikçe dikkatli kullanın"
},
"copyTip": {
"message": "Üçüncü taraf uygulamalar kullanmanın kolaylığı için, kopya düğmesi tarafından panoya yazılan içeriği özelleştirin"
},
"replaceKeywordList": {
"message": "Anahtar Kelime Listesini Değiştir"
},
"otherFiles": {
"message": "Diğer Dosyalar"
},
"resetCopySettings": {
"message": "Kopya Ayarlarını Sıfırla"
},
"autoSetRefererCookieParams": {
"message": "Referrer ve Cookie Parametrelerini Otomatik Ayarla"
},
"secretKey": {
"message": "Gizli Anahtar"
},
"address": {
"message": "Adres"
},
"documentation": {
"message": "Belgeler"
},
"aria2Tip": {
"message": "Mükemmel bir indirme aracı, kullanımı öğrenin"
},
"m3u8DLTips": {
"message": "Mükemmel bir üçüncü taraf m3u8 ve mpd indirme aracı, kullanımı öğrenin"
},
"invoke": {
"message": "Çağır"
},
"parameter": {
"message": "Parametre"
},
"parameterSetting": {
"message": "Parametre Ayarı"
},
"test": {
"message": "Test"
},
"replaceTags": {
"message": "Etiketleri Değiştir"
},
"customSaveFileName": {
"message": "Özel Kaydet Dosya Adı"
},
"userAgentTip": {
"message": "Varsayılan olarak geçerli tarayıcının Kullanıcı Aracısı"
},
"alwaysDisableCatCatcher": {
"message": "Her Zaman Cat-Catch İndiriciyi Devre Dışı Bırak"
},
"autoClosePageAfterDownload": {
"message": "İndirmeden Sonra Sayfayı Otomatik Kapat"
},
"openDownloaderPageInBackground": {
"message": "İndirici Sayfasını Arka Planda Aç"
},
"downloaderTip": {
"message": "Kaynak indirmesi başarısız olursa, indiriciyi otomatik olarak etkinleştirerek tekrar deneyin."
},
"autoDownM3u8Tip": {
"message": "İndir düğmesine tıklayın ve m3u8 ayrıştırıcısını kullanarak hemen birleştirmeyi ve indirmeyi başlatın"
},
"otherSettings": {
"message": "Diğer Ayarlar"
},
"resetOtherSettings": {
"message": "Diğer Ayarları Sıfırla"
},
"previewMode": {
"message": "Yerel oynatıcının çağrı protokolünü kullanarak video önizlemesini aç"
},
"previewModePlaceholder": {
"message": "Devre dışı bırakmak için boş bırakın. Varsayılan olarak video önizlemesi için açılır sayfayı kullanın"
},
"preview": {
"message": "Önizleme"
},
"customFilenameOption": {
"message": "Dosyayı kaydetmek için özel dosya adı kullanın (varsayılan web sayfası başlığıdır)"
},
"saveAsOption": {
"message": "İndirmeden sonra kaydet dizinini seçin"
},
"iconOption": {
"message": "Web sitesi simgesini görüntüle"
},
"clearOption": {
"message": "Yenile, yeni bir sayfaya git ve mevcut sekmede yakalanan verileri temizle"
},
"doNotClear": {
"message": "Temizleme"
},
"normalClear": {
"message": "Normal Temizle"
},
"moreFrequent": {
"message": "Daha Sık"
},
"dopreview": {
"message": "preview"
},
"dopopup": {
"message": "popup"
},
"winpreview": {
"message": "window preview"
},
"winpopup": {
"message": "window popup"
},
"excludeDuplicateResources": {
"message": "Yinelenen kaynakları hariç tut (çok fazla kaynak çok fazla CPU tüketecektir)"
},
"customCSS": {
"message": "Özel CSS"
},
"MQTT": {
"message": "MQTT"
},
"mqttBroker": {
"message": "Broker adresi"
},
"mqttPath": {
"message": "Yol"
},
"mqttProtocol": {
"message": "Protokol"
},
"mqttClientId": {
"message": "İstemci Kimliği"
},
"mqttTitleLength": {
"message": "Başlık Maksimum Uzunluğu"
},
"mqttUsername": {
"message": "Kullanıcı Adı"
},
"mqttPassword": {
"message": "Şifre"
},
"mqttTopic": {
"message": "Başlık"
},
"mqttQos": {
"message": "QoS Düzeyi"
},
"mqttQos0": {
"message": "(En çok bir kez)"
},
"mqttQos1": {
"message": "(En az bir kez)"
},
"mqttQos2": {
"message": "(Tam olarak bir kez)"
},
"mqttDataFormat": {
"message": "Veri Biçimi"
},
"mqttDataFormatHelp": {
"message": "{\"url\": \"$${url}\", \"title\": \"$${title}\", \"type\": \"$${type}\", \"ext\": \"$${ext}\", \"timestamp\": \"$${timestamp}\"}"
},
"mqttDataFormatVars": {
"message": "Mevcut değişkenler"
},
"mqttDataFormatDefault": {
"message": "Varsayılan JSON biçimini kullanmak için boş bırakın"
},
"mqttProtocolWss": {
"message": "WSS (Güvenli)"
},
"mqttProtocolWs": {
"message": "WS (Güvensiz)"
},
"mqttTitleLengthHelp": {
"message": "MQTT iletilerine gönderilecek başlığın maksimum uzunluğu"
},
"mqttBrokerHelp": {
"message": "MQTT broker'ının ana bilgisayar adı veya IP adresi"
},
"mqttPathHelp": {
"message": "WebSocket yolu (genellikle /mqtt veya /ws)"
},
"mqttClientIdHelp": {
"message": "Bu bağlantı için benzersiz istemci tanımlayıcı"
},
"mqttTopicHelp": {
"message": "İletileri yayınlanacak MQTT başlığı"
},
"mqttQosHelp": {
"message": "Hizmet Kalitesi düzeyi (0=En çok bir kez, 1=En az bir kez, 2=Tam olarak bir kez)"
},
"mqttCredentialsHelp": {
"message": "Gerekli değilse kullanıcı adı/şifre boş bırakın"
},
"operation": {
"message": "İşlem"
},
"exportSettings": {
"message": "Ayarları Dışarı Aktar"
},
"importConfiguration": {
"message": "Yapılandırmayı İçeri Aktar"
},
"clearCapturedData": {
"message": "Yakalanan Verileri Temizle"
},
"resetSettings": {
"message": "Ayarları Sıfırla"
},
"resetAllSettings": {
"message": "Tüm Ayarları Sıfırla"
},
"restartExtension": {
"message": "Uzantıyı Yeniden Başlat"
},
"about": {
"message": "Hakkında"
},
"confirmReset": {
"message": "Sıfırlamak istediğinizden emin misiniz?"
},
"invokeProtocolTemplate": {
"message": "Protokol Şablonunu Çağır"
},
"customVLCProtocol": {
"message": "Özel VLC Protokolü"
},
"systemShare": {
"message": "Sistem Paylaşımı"
},
"default": {
"message": "Varsayılan"
},
"goBack": {
"message": "Geri Git"
},
"openDir": {
"message": "Dizini Aç"
},
"downloadDir": {
"message": "İndirme Dizini"
},
"sendFfmpeg": {
"message": "Çevrimiçi ffmpeg'e Gönder"
},
"autoCloserDownload": {
"message": "İndirmeden Sonra Sayfayı Otomatik Kapat"
},
"openInBgDownload": {
"message": "İndirici Sayfasını Arka Planda Aç"
},
"m3u8Placeholder": {
"message": "m3u8 bağlantısını / m3u8 içeriğini / segment listesini / $${range} etiketini girin"
},
"m3u8Url": {
"message": "m3u8 URL'si"
},
"nextLevel": {
"message": "Sonraki Düzey"
},
"nextLevelTip": {
"message": "Bu M3U8 dosyası birden fazla M3U8 dosyasını iç içe yerleştirir."
},
"multipleAudios": {
"message": "Birden Fazla Ses"
},
"multipleAudiosTip": {
"message": "Bu M3U8 dosyası birden fazla ses kaydını iç içe yerleştirir"
},
"multipleSubtitles": {
"message": "Birden Fazla Altyazı"
},
"multipleSubtitlesTip": {
"message": "Bu M3U8 dosyası birden fazla altyazı içeriyor."
},
"possibleKey": {
"message": "Olası anahtarlar bulundu"
},
"loading": {
"message": "Yükleniyor..."
},
"waitDownload": {
"message": "İndirme bekleniyor..."
},
"downloadSegmentList": {
"message": "Liste İndir"
},
"originalM3u8": {
"message": "Orijinal M3U8"
},
"localM3u8": {
"message": "Yerel M3U8"
},
"segmentList": {
"message": "Segment"
},
"downloadProgress": {
"message": "İndirme İlerleme Durumu"
},
"getParameters": {
"message": "GET Parametreleri"
},
"restoreGetParameters": {
"message": "GET Parametrelerini Geri Yükle"
},
"requestHeaders": {
"message": "İstek Başlıkları"
},
"setRequestHeaders": {
"message": "İstek başlıklarını ayarlayın."
},
"invokeM3u8DL": {
"message": "M3U8DL'yi Çağır"
},
"copyCommand": {
"message": "Komut Kopyala"
},
"previewCommand": {
"message": "Komutu Önizle"
},
"addSettingParameters": {
"message": "Ayar Parametreleri Ekle"
},
"customKeyPlaceholder": {
"message": "Hexadecimal veya base64'te anahtarı özelleştirin veya anahtar adresini yazın"
},
"uploadKey": {
"message": "Anahtarı Yükle"
},
"downloadThreads": {
"message": "İş Parçacığı"
},
"ffmpegTranscoding": {
"message": "FFmpeg kod çözme"
},
"mp4Format": {
"message": "MP4"
},
"downloadWhileSaving": {
"message": "Akış indirmesi"
},
"audioOnly": {
"message": "Yalnız Ses"
},
"saveAs": {
"message": "Farklı Kaydet"
},
"skipDecryption": {
"message": "Şifre Çözmeyi Atla"
},
"newDownloader": {
"message": "Yeni İndirici"
},
"downloadRange": {
"message": "İndirme Aralığı"
},
"recordLive": {
"message": "Kayıt"
},
"mergeDownloads": {
"message": "İndirmeleri Birleştir"
},
"redownloadFailedItems": {
"message": "Başarısız Öğeleri Yeniden İndir"
},
"downloadExistingData": {
"message": "Mevcut Verileri İndir"
},
"stopDownload": {
"message": "İndirmeyi Durdur"
},
"start": {
"message": "Başla"
},
"end": {
"message": "Son"
},
"resolution": {
"message": "Çözünürlük"
},
"duration": {
"message": "Süre"
},
"bitrate": {
"message": "Bit Hızı"
},
"ADTSerror": {
"message": "ADTS başlığı bulunamıyor. AES-128-ECB şifreli kaynak olabilir, şu anda şifre çözme desteklenmiyor. Lütfen üçüncü taraf birleştirme yazılımını kullanın."
},
"m3u8Error": {
"message": "M3U8 dosyasını ayrıştırırken veya oynatırken hata var, ayrıntılı hata bilgileri için konsolu kontrol edin"
},
"noAudio": {
"message": "Ses Yok"
},
"noVideo": {
"message": "Video Yok"
},
"hevcTip": {
"message": "HEVC/H.265 kodlanmış fragment dosyaları yalnızca çevrimiçi ffmpeg kod çözme için destekleniyor"
},
"hevcPreviewTip": {
"message": "HEVC/H.265 kodlanmış fragment dosyaları önizleme için desteklenmiyor."
},
"m3u8Info": {
"message": "Toplam $num$ dosya, toplam süre $time$.",
"placeholders": {
"num": {
"content": "$1"
},
"time": {
"content": "$2"
}
}
},
"encryptedHLS": {
"message": "Şifreli HLS"
},
"encryptedSAMPLE": {
"message": "SAMPLE-AES-CTR ile şifrelenmiş kaynaklar şu anda işlenemiyor."
},
"liveHLS": {
"message": "Canlı HLS"
},
"keyAddress": {
"message": "Anahtar Adresi"
},
"key": {
"message": "Anahtar"
},
"encryptionAlgorithm": {
"message": "Yöntem"
},
"keyDownloadFailed": {
"message": "Anahtar İndirmesi Başarısız Oldu"
},
"savePrompt": {
"message": "Diske kaydedildi, lütfen tarayıcıda indirilen içeriği kontrol edin."
},
"close": {
"message": "Kapat"
},
"blobM3u8DLError": {
"message": "Blob URL'leri M3U8DL indirmesini çağıramaz"
},
"M3U8DLparameterLong": {
"message": "M3U8DL parametresi çok uzun."
},
"runningCannotChangeSettings": {
"message": "Çalışıyor, Ayarlar Değiştirilemez"
},
"streamSaverTip": {
"message": "'İndirirken kaydet' işlevi ffmpeg çevrimiçi biçim dönüştürmeyi desteklemez, hatalı dilimleri yeniden indirmeyi desteklemez ve 'farklı kaydet'i desteklemez."
},
"stopRecording": {
"message": "Kaydı Durdur"
},
"waitingForLiveData": {
"message": "Canlı Veriler Bekleniyor"
},
"sNumError": {
"message": "Seri Numarası Hatası"
},
"startGTend": {
"message": "Başlama Numarası Bitiş Numarasından Büyük Olamaz"
},
"sNumMax": {
"message": "Seri Numarası $num$ Aşamaz",
"placeholders": {
"num": {
"content": "$1"
}
}
},
"incorrectKey": {
"message": "Yanlış Anahtar"
},
"addParameters": {
"message": "Parametreler Ekle"
},
"decryptionError": {
"message": "Şifre Çözme Hatası"
},
"downloadFailed": {
"message": "İndirme Başarısız Oldu"
},
"retryDownload": {
"message": "İndirmeyi Yeniden Dene"
},
"recordingDuration": {
"message": "Kayıt Süresi"
},
"downloaded": {
"message": "İndirildi"
},
"downloadedVideoLength": {
"message": "İndirilen Video Uzunluğu"
},
"downloadComplete": {
"message": "İndirme Tamamlandı"
},
"retryingDownload": {
"message": "İndirme Yeniden Deneniyor"
},
"merging": {
"message": "Birleştiriliyor"
},
"fileTooLarge": {
"message": "Dosya Çok Büyük, $size$ değerinden büyük dosya",
"placeholders": {
"size": {
"content": "$1"
}
}
},
"fileTooLargeStream": {
"message": "$size$ değerinden büyük dosya, akış indirmeyi etkinleştir?",
"placeholders": {
"size": {
"content": "$1"
}
}
},
"formatConversionError": {
"message": "Biçim Dönüştürme Hatası"
},
"streamOnbeforeunload": {
"message": "Akış devam ediyor, kapatıldıktan sonra indirme durur"
},
"fileLoading": {
"message": "Dosya Yükleniyor"
},
"expandAllNodes": {
"message": "Tüm JSON düğümlerini genişlet"
},
"collapseAllNodes": {
"message": "Tüm JSON düğümlerini daralt"
},
"fileRetrievalFailed": {
"message": "Dosya Alımı Başarısız"
},
"selectVideo": {
"message": "Video Seç"
},
"extractSlices": {
"message": "Dilimleri Çıkar"
},
"convertToM3U8": {
"message": "M3U8 Ayrıştırmasına Dönüştür"
},
"selectAudio": {
"message": "Ses Seç"
},
"audio": {
"message": "Ses"
},
"video": {
"message": "Video"
},
"DRMerror": {
"message": "Medyanın DRM koruması var, lütfen indirmek için üçüncü taraf araçları kullanın"
},
"regexTitle": {
"message": "Düzenli ifade eşleşmesi veya derin aramadan"
},
"downloadWithRequestHeader": {
"message": "İstek başlığı parametreleriyle indirin."
},
"m3u8Playlist": {
"message": "M3U8 Çalma Listesi"
},
"copiedToClipboard": {
"message": "Panoya Kopyalandı"
},
"hasSent": {
"message": "Gönderildi"
},
"sendFailed": {
"message": "Gönderme Başarısız Oldu"
},
"confirmDownload": {
"message": "Toplam $num$ dosya, indirmeyi onayla?",
"placeholders": {
"num": {
"content": "$1"
}
}
},
"confirmLoading": {
"message": "Toplam $num$ kaynak var, yüklemeyi iptal etmek istiyor musunuz?",
"placeholders": {
"num": {
"content": "$1"
}
}
},
"waitingForMedia": {
"message": "Medya dosyalarını almayı bekleniyor... Lütfen bu sayfayı kapatmayın."
},
"exit": {
"message": "Çık"
},
"unknownSize": {
"message": "Bilinmeyen boyut"
},
"saving": {
"message": "Kaydediliyor"
},
"saveFailed": {
"message": "Kaydetme başarısız"
},
"badgeNumber": {
"message": "Simge rozet istemini göster"
},
"viewSlices": {
"message": "Tüm dilimleri ve indirme ilerleme durumunu görüntüle"
},
"send2local": {
"message": "Veri aktarımı"
},
"send2MQTT": {
"message": "MQTT'ye Gönder"
},
"sendingToMQTT": {
"message": "MQTT sunucusuna gönderiliyor..."
},
"connectingToMQTT": {
"message": "MQTT sunucusuna bağlanıyor..."
},
"sendingMessageToMQTT": {
"message": "MQTT sunucusuna ileti gönderiliyor..."
},
"messageSentToMQTT": {
"message": "İleti MQTT sunucusuna gönderildi"
},
"popup": {
"message": "Açılır Pencere"
},
"defaultPopup": {
"message": "Varsayılan Açılır Pencere Modu"
},
"invokeApp": {
"message": "Uygulamayı Çağır"
},
"onlineServiceAddress": {
"message": "Çevrimiçi Hizmet Adresi"
},
"withinChina": {
"message": "Çin İçinde"
},
"dataFetchFailed": {
"message": "Veri alımı başarısız"
},
"confirmParameters": {
"message": "Parametreleri Onayla"
},
"searchingForRealKey": {
"message": "Gerçek anahtar aranıyor"
},
"verifying": {
"message": "Doğrulanıyor"
},
"realKeyNotFound": {
"message": "Gerçek anahtar bulunamadı"
},
"blockUrl": {
"message": "URL'yi Engelle"
},
"addUrl": {
"message": "URL Ekle"
},
"wildcards": {
"message": "joker karakterler"
},
"blockUrlTips": {
"message": "Joker karakterler * ve ? destekler"
},
"setWhiteList": {
"message": "Beyaz listeye ayarla"
},
"autoSend": {
"message": "Otomatik veri aktarımı"
},
"manualSend": {
"message": "Manuel veri aktarımı"
},
"requestMethod": {
"message": "İstek Yöntemi"
},
"requestBody": {
"message": "İstek Gövdesi"
},
"sort": {
"message": "Sırala"
},
"asc": {
"message": "Artan"
},
"desc": {
"message": "Azalan"
},
"getTime": {
"message": "Alma Zamanı"
},
"fileSize": {
"message": "Dosya Boyutu"
},
"title": {
"message": "Başlık"
},
"noKeyIsRequired": {
"message": "Anahtar gerekli değil"
},
"estimateSize": {
"message": "Tahmini boyut"
},
"retryCount": {
"message": "Yeniden deneme sayısı"
},
"useSidePanel": {
"message": "Yan paneli kullan"
},
"Script": {
"message": "Betik"
},
"alwaysSearch": {
"message": "Her zaman derin aramayı etkinleştir"
},
"alertimport": {
"message": "İçe aktarma tamamlandı"
},
"deleteDuplicateFilenames": {
"message": "Yinelenen dosya adlarını sil"
}
}
================================================
FILE: _locales/vi/messages.json
================================================
{
"catCatch": {
"message": "cat-catch"
},
"description": {
"message": "Công cụ bắt link media trên web"
},
"confirm": {
"message": "Xác nhận"
},
"currentPage": {
"message": "Trang hiện tại"
},
"otherPage": {
"message": "Trang khác"
},
"otherFeatures": {
"message": "Tính năng khác"
},
"mediaControl": {
"message": "Điều khiển Media"
},
"loadingData": {
"message": "Đang tải dữ liệu..."
},
"selectWebpage": {
"message": "Trang web:"
},
"selectMedia": {
"message": "Media:"
},
"noMediaDetected": {
"message": "Không tìm thấy Media nào trên trang web"
},
"noControllableMediaDetected": {
"message": "Không tìm thấy Media có thể điều khiển"
},
"multiplier": {
"message": "Hệ số nhân:"
},
"speedPlayback": {
"message": "Tốc độ phát"
},
"play": {
"message": "Phát"
},
"normalPlay": {
"message": "Phát bình thường"
},
"pictureInPicture": {
"message": "Hình trong hình (PiP)"
},
"fullscreen": {
"message": "Toàn màn hình"
},
"screenshot": {
"message": "Chụp màn hình"
},
"loop": {
"message": "Lặp lại"
},
"mute": {
"message": "Tắt tiếng"
},
"volume": {
"message": "Âm lượng"
},
"functionEntry": {
"message": "Lối vào chức năng"
},
"downloader": {
"message": "Trình tải xuống"
},
"parser": {
"message": "Trình phân tích"
},
"m3u8Parser": {
"message": "Trình phân tích M3U8"
},
"mpdParser": {
"message": "Trình phân tích MPD"
},
"jsonFormatter": {
"message": "Định dạng JSON"
},
"expandAll": {
"message": "Mở rộng tất cả"
},
"expandPlayable": {
"message": "Mở rộng cái có thể phát"
},
"expandSelected": {
"message": "Mở rộng cái đã chọn"
},
"collapseAll": {
"message": "Thu gọn tất cả"
},
"videoRecording": {
"message": "Ghi hình video"
},
"closeRecording": {
"message": "Đóng ghi hình"
},
"recordWebRTC": {
"message": "Ghi WebRTC"
},
"screenCapture": {
"message": "Quay màn hình"
},
"simulateMobile": {
"message": "Giả lập Mobile"
},
"autoDownload": {
"message": "Tự động tải xuống"
},
"onlineMerge": {
"message": "Ghép nối"
},
"download": {
"message": "Tải xuống"
},
"copy": {
"message": "Sao chép"
},
"selectAll": {
"message": "Chọn tất cả"
},
"invertSelection": {
"message": "Đảo ngược chọn"
},
"filter": {
"message": "Lọc"
},
"clear": {
"message": "Xóa"
},
"deepSearch": {
"message": "Tìm kiếm"
},
"closeSearch": {
"message": "Đóng tìm kiếm"
},
"cacheCapture": {
"message": "Bắt"
},
"closeCapture": {
"message": "Đóng bắt link"
},
"moreFeatures": {
"message": "Thêm"
},
"pause": {
"message": "Tạm dừng"
},
"settings": {
"message": "Cài đặt"
},
"closeSimulation": {
"message": "Đóng giả lập"
},
"closeDownload": {
"message": "Đóng tải xuống"
},
"enable": {
"message": "Bật"
},
"disable": {
"message": "Tắt"
},
"noData": {
"message": "Không có cá"
},
"regularFilterPlaceholder": {
"message": "Bộ lọc biểu thức chính quy, khớp URL tài nguyên, nhấn Enter để xác nhận"
},
"option": {
"message": "Tùy chọn"
},
"titleOption": {
"message": "Tùy chọn cat-catch"
},
"titleDownload": {
"message": "Tải xuống cat-catch"
},
"titleM3U8": {
"message": "Trình phân tích m3u8 cat-catch"
},
"titleJson": {
"message": "Trình định dạng json cat-catch"
},
"titledash": {
"message": "Trình phân tích Dash cat-catch"
},
"suffix": {
"message": "Đuôi tệp"
},
"suffixTip": {
"message": "Điền vào đuôi tệp không chứa dấu '.', nếu không cần lọc kích thước thì điền 0."
},
"extensionName": {
"message": "Tên tiện ích"
},
"filterSize": {
"message": "Lọc kích thước"
},
"delete": {
"message": "Xóa"
},
"addSuffix": {
"message": "Thêm đuôi tệp"
},
"extension": {
"message": "Phần mở rộng"
},
"disableAll": {
"message": "Tắt tất cả"
},
"enableAll": {
"message": "Bật tất cả"
},
"type": {
"message": "Loại"
},
"addType": {
"message": "Thêm loại"
},
"typeTip": {
"message": "Nhập đúng content-type, nếu không cần lọc kích thước thì điền 0."
},
"addTypeError": {
"message": "Định dạng loại bắt không chính xác, vui lòng kiểm tra lại"
},
"regexMatch": {
"message": "Khớp Regex"
},
"blockResource": {
"message": "Chặn tài nguyên"
},
"alert": {
"message": "Cảnh báo"
},
"regexExpression": {
"message": "Biểu thức Regex"
},
"addRegex": {
"message": "Thêm Regex"
},
"regexTest": {
"message": "Kiểm tra Regex"
},
"regex": {
"message": "regex"
},
"flag": {
"message": "Cờ (Flag)"
},
"result": {
"message": "Kết quả"
},
"match": {
"message": "Khớp"
},
"noMatch": {
"message": "Không khớp"
},
"blockResourceTip": {
"message": "Chặn các tài nguyên bạn không muốn xuất hiện"
},
"flagTip": {
"message": "i: không phân biệt hoa thường, g: tìm kiếm toàn cục. Có thể để trống"
},
"regexSuffixTip": {
"message": "Gán đuôi tệp cho URL thu được. Có thể để trống, và đuôi tệp sẽ tự động được cắt bớt (nhiều tệp không có đuôi)"
},
"regexTip": {
"message": "Biểu thức chính quy tiêu tốn nhiều tài nguyên, hãy sử dụng cẩn thận nếu không cần thiết"
},
"copyTip": {
"message": "Để thuận tiện cho việc sử dụng ứng dụng bên thứ ba, tùy chỉnh nội dung được ghi vào bộ nhớ tạm bởi nút sao chép"
},
"replaceKeywordList": {
"message": "Danh sách từ khóa thay thế"
},
"otherFiles": {
"message": "Các tệp khác"
},
"resetCopySettings": {
"message": "Đặt lại cài đặt sao chép"
},
"autoSetRefererCookieParams": {
"message": "Tự động thiết lập tham số Referer và Cookie"
},
"secretKey": {
"message": "Khóa bí mật (Secret Key)"
},
"address": {
"message": "Địa chỉ"
},
"documentation": {
"message": "Tài liệu"
},
"aria2Tip": {
"message": "Một công cụ tải xuống tuyệt vời, xem cách sử dụng"
},
"m3u8DLTips": {
"message": "Công cụ tải m3u8 và mpd bên thứ ba tuyệt vời, xem cách sử dụng"
},
"invoke": {
"message": "Gọi"
},
"parameter": {
"message": "Tham số"
},
"parameterSetting": {
"message": "Cài đặt tham số"
},
"test": {
"message": "Kiểm tra"
},
"replaceTags": {
"message": "Thay thế thẻ (Tags)"
},
"customSaveFileName": {
"message": "Tên tệp lưu tùy chỉnh"
},
"userAgentTip": {
"message": "Mặc định sử dụng User Agent của trình duyệt hiện tại"
},
"alwaysDisableCatCatcher": {
"message": "Luôn tắt trình tải xuống Cat-Catch"
},
"autoClosePageAfterDownload": {
"message": "Tự động đóng trang sau khi tải xong"
},
"openDownloaderPageInBackground": {
"message": "Mở trang tải xuống trong nền"
},
"downloaderTip": {
"message": "Nếu tải tài nguyên thất bại, tự động bật trình tải xuống để thử lại."
},
"autoDownM3u8Tip": {
"message": "Nhấp nút tải xuống và sử dụng trình phân tích m3u8 để bắt đầu ghép và tải ngay lập tức"
},
"otherSettings": {
"message": "Cài đặt khác"
},
"resetOtherSettings": {
"message": "Đặt lại các cài đặt khác"
},
"previewMode": {
"message": "Sử dụng giao thức gọi của trình phát cục bộ để mở xem trước video"
},
"previewModePlaceholder": {
"message": "Để trống để tắt. Mặc định sử dụng trang popup để xem trước video"
},
"preview": {
"message": "Xem trước"
},
"customFilenameOption": {
"message": "Sử dụng tên tệp tùy chỉnh để lưu (mặc định là tiêu đề trang web)"
},
"saveAsOption": {
"message": "Chọn thư mục lưu sau khi tải xuống"
},
"iconOption": {
"message": "Hiển thị biểu tượng trang web"
},
"clearOption": {
"message": "Làm mới, điều hướng đến trang mới, và xóa dữ liệu đã bắt được bởi tab hiện tại"
},
"doNotClear": {
"message": "Không xóa"
},
"normalClear": {
"message": "Xóa bình thường"
},
"moreFrequent": {
"message": "Thường xuyên hơn"
},
"dopreview": {
"message": "xem trước"
},
"dopopup": {
"message": "popup"
},
"winpreview": {
"message": "cửa sổ xem trước"
},
"winpopup": {
"message": "cửa sổ popup"
},
"excludeDuplicateResources": {
"message": "Loại trừ tài nguyên trùng lặp (quá nhiều tài nguyên sẽ tiêu tốn nhiều CPU)"
},
"customCSS": {
"message": "CSS tùy chỉnh"
},
"MQTT": {
"message": "MQTT"
},
"mqttBroker": {
"message": "Địa chỉ Broker"
},
"mqttPath": {
"message": "Đường dẫn (Path)"
},
"mqttProtocol": {
"message": "Giao thức"
},
"mqttClientId": {
"message": "Client ID"
},
"mqttTitleLength": {
"message": "Độ dài tiêu đề tối đa"
},
"mqttUsername": {
"message": "Tên đăng nhập"
},
"mqttPassword": {
"message": "Mật khẩu"
},
"mqttTopic": {
"message": "Chủ đề (Topic)"
},
"mqttQos": {
"message": "Mức QoS"
},
"mqttQos0": {
"message": "(Tối đa một lần)"
},
"mqttQos1": {
"message": "(Ít nhất một lần)"
},
"mqttQos2": {
"message": "(Chính xác một lần)"
},
"mqttDataFormat": {
"message": "Định dạng dữ liệu"
},
"mqttDataFormatHelp": {
"message": "{\"url\": \"$${url}\", \"title\": \"$${title}\", \"type\": \"$${type}\", \"ext\": \"$${ext}\", \"timestamp\": \"$${timestamp}\"}"
},
"mqttDataFormatVars": {
"message": "Các biến khả dụng"
},
"mqttDataFormatDefault": {
"message": "Để trống để dùng định dạng JSON mặc định"
},
"mqttProtocolWss": {
"message": "WSS (An toàn)"
},
"mqttProtocolWs": {
"message": "WS (Không an toàn)"
},
"mqttTitleLengthHelp": {
"message": "Độ dài tối đa của tiêu đề gửi trong tin nhắn MQTT"
},
"mqttBrokerHelp": {
"message": "Tên máy chủ hoặc địa chỉ IP của MQTT broker"
},
"mqttPathHelp": {
"message": "Đường dẫn WebSocket (thường là /mqtt hoặc /ws)"
},
"mqttClientIdHelp": {
"message": "Mã định danh client duy nhất cho kết nối này"
},
"mqttTopicHelp": {
"message": "Chủ đề MQTT để xuất bản tin nhắn"
},
"mqttQosHelp": {
"message": "Mức chất lượng dịch vụ (0=Tối đa một lần, 1=Ít nhất một lần, 2=Chính xác một lần)"
},
"mqttCredentialsHelp": {
"message": "Để trống tên đăng nhập/mật khẩu nếu không yêu cầu"
},
"operation": {
"message": "Thao tác"
},
"exportSettings": {
"message": "Xuất cài đặt"
},
"importConfiguration": {
"message": "Nhập cấu hình"
},
"clearCapturedData": {
"message": "Xóa dữ liệu đã bắt"
},
"resetSettings": {
"message": "Đặt lại cài đặt"
},
"resetAllSettings": {
"message": "Đặt lại tất cả cài đặt"
},
"restartExtension": {
"message": "Khởi động lại tiện ích"
},
"about": {
"message": "Giới thiệu"
},
"confirmReset": {
"message": "Bạn có chắc chắn muốn đặt lại không?"
},
"invokeProtocolTemplate": {
"message": "Mẫu giao thức gọi"
},
"customVLCProtocol": {
"message": "Giao thức VLC tùy chỉnh"
},
"systemShare": {
"message": "Chia sẻ hệ thống"
},
"default": {
"message": "Mặc định"
},
"goBack": {
"message": "Quay lại"
},
"openDir": {
"message": "Mở thư mục"
},
"downloadDir": {
"message": "Thư mục tải xuống"
},
"sendFfmpeg": {
"message": "Gửi đến ffmpeg trực tuyến"
},
"autoCloserDownload": {
"message": "Tự động đóng trang sau khi tải xong"
},
"openInBgDownload": {
"message": "Mở trang tải xuống trong nền"
},
"m3u8Placeholder": {
"message": "Vui lòng nhập link m3u8 / nội dung m3u8 / danh sách phân đoạn / thẻ $${range}"
},
"m3u8Url": {
"message": "URL M3U8"
},
"nextLevel": {
"message": "Cấp tiếp theo"
},
"nextLevelTip": {
"message": "Tệp M3U8 này lồng nhiều tệp M3U8 khác."
},
"multipleAudios": {
"message": "Đa âm thanh"
},
"multipleAudiosTip": {
"message": "Tệp M3U8 này lồng nhiều luồng âm thanh"
},
"multipleSubtitles": {
"message": "Đa phụ đề"
},
"multipleSubtitlesTip": {
"message": "Tệp M3U8 này lồng nhiều phụ đề."
},
"possibleKey": {
"message": "Tìm thấy khóa khả thi"
},
"loading": {
"message": "Đang tải..."
},
"waitDownload": {
"message": "Đang chờ tải xuống..."
},
"downloadSegmentList": {
"message": "Tải danh sách"
},
"originalM3u8": {
"message": "M3U8 gốc"
},
"localM3u8": {
"message": "M3U8 cục bộ"
},
"segmentList": {
"message": "Phân đoạn"
},
"downloadProgress": {
"message": "Tiến độ tải xuống"
},
"getParameters": {
"message": "Tham số GET"
},
"restoreGetParameters": {
"message": "Khôi phục tham số GET"
},
"requestHeaders": {
"message": "Header yêu cầu"
},
"setRequestHeaders": {
"message": "Đặt header yêu cầu."
},
"invokeM3u8DL": {
"message": "Gọi M3U8DL"
},
"copyCommand": {
"message": "Sao chép lệnh"
},
"previewCommand": {
"message": "Xem trước lệnh"
},
"addSettingParameters": {
"message": "Thêm tham số cài đặt"
},
"customKeyPlaceholder": {
"message": "Tùy chỉnh khóa dạng hex hoặc base64, hoặc địa chỉ chứa khóa"
},
"uploadKey": {
"message": "Tải lên khóa"
},
"downloadThreads": {
"message": "Luồng"
},
"ffmpegTranscoding": {
"message": "Chuyển mã FFmpeg"
},
"mp4Format": {
"message": "MP4"
},
"downloadWhileSaving": {
"message": "Vừa tải vừa lưu"
},
"audioOnly": {
"message": "Chỉ âm thanh"
},
"saveAs": {
"message": "Lưu thành"
},
"skipDecryption": {
"message": "Bỏ qua giải mã"
},
"newDownloader": {
"message": "Trình tải mới"
},
"downloadRange": {
"message": "Phạm vi tải"
},
"recordLive": {
"message": "Ghi hình"
},
"mergeDownloads": {
"message": "Ghép nối bản tải xuống"
},
"redownloadFailedItems": {
"message": "Tải lại các mục lỗi"
},
"downloadExistingData": {
"message": "Tải xuống dữ liệu hiện có"
},
"stopDownload": {
"message": "Dừng tải xuống"
},
"start": {
"message": "Bắt đầu"
},
"end": {
"message": "Kết thúc"
},
"resolution": {
"message": "Độ phân giải"
},
"duration": {
"message": "Thời lượng"
},
"bitrate": {
"message": "Tốc độ bit (Bitrate)"
},
"ADTSerror": {
"message": "Không tìm thấy header ADTS. Có thể là tài nguyên mã hóa AES-128-ECB, hiện chưa hỗ trợ giải mã. Vui lòng dùng phần mềm ghép nối bên thứ ba."
},
"m3u8Error": {
"message": "Có lỗi khi phân tích hoặc phát tệp M3U8, kiểm tra console để biết chi tiết lỗi"
},
"noAudio": {
"message": "Không có âm thanh"
},
"noVideo": {
"message": "Không có hình ảnh"
},
"hevcTip": {
"message": "Tệp phân đoạn mã hóa HEVC/H.265 chỉ được hỗ trợ chuyển mã ffmpeg trực tuyến"
},
"hevcPreviewTip": {
"message": "Tệp phân đoạn mã hóa HEVC/H.265 không hỗ trợ xem trước."
},
"m3u8Info": {
"message": "Tổng cộng $num$ tệp, tổng thời lượng $time$.",
"placeholders": {
"num": {
"content": "$1"
},
"time": {
"content": "$2"
}
}
},
"encryptedHLS": {
"message": "HLS được mã hóa"
},
"encryptedSAMPLE": {
"message": "Tài nguyên được mã hóa SAMPLE-AES-CTR hiện chưa thể xử lý."
},
"liveHLS": {
"message": "HLS trực tiếp"
},
"keyAddress": {
"message": "Địa chỉ Key"
},
"key": {
"message": "Key"
},
"encryptionAlgorithm": {
"message": "Phương thức"
},
"keyDownloadFailed": {
"message": "Tải Key thất bại"
},
"savePrompt": {
"message": "Đã lưu vào ổ đĩa, vui lòng kiểm tra nội dung tải xuống trong trình duyệt."
},
"close": {
"message": "Đóng"
},
"blobM3u8DLError": {
"message": "URL Blob không thể gọi M3U8DL để tải xuống"
},
"M3U8DLparameterLong": {
"message": "Tham số M3U8DL quá dài."
},
"runningCannotChangeSettings": {
"message": "Đang chạy, không thể thay đổi cài đặt"
},
"streamSaverTip": {
"message": "Chức năng 'vừa tải vừa lưu' không hỗ trợ chuyển đổi định dạng ffmpeg trực tuyến, không hỗ trợ tải lại các lát bị lỗi, và không hỗ trợ 'lưu thành'."
},
"stopRecording": {
"message": "Dừng ghi"
},
"waitingForLiveData": {
"message": "Đang chờ dữ liệu trực tiếp (Live)"
},
"sNumError": {
"message": "Lỗi số thứ tự"
},
"startGTend": {
"message": "Số bắt đầu không thể lớn hơn số kết thúc"
},
"sNumMax": {
"message": "Số thứ tự không thể vượt quá $num$",
"placeholders": {
"num": {
"content": "$1"
}
}
},
"incorrectKey": {
"message": "Key không chính xác"
},
"addParameters": {
"message": "Thêm tham số"
},
"decryptionError": {
"message": "Lỗi giải mã"
},
"downloadFailed": {
"message": "Tải xuống thất bại"
},
"retryDownload": {
"message": "Thử lại tải xuống"
},
"recordingDuration": {
"message": "Thời gian ghi"
},
"downloaded": {
"message": "Đã tải"
},
"downloadedVideoLength": {
"message": "Độ dài video đã tải"
},
"downloadComplete": {
"message": "Tải xuống hoàn tất"
},
"retryingDownload": {
"message": "Đang thử lại tải xuống"
},
"merging": {
"message": "Đang ghép nối"
},
"fileTooLarge": {
"message": "Tệp quá lớn, tệp lớn hơn $size$",
"placeholders": {
"size": {
"content": "$1"
}
}
},
"fileTooLargeStream": {
"message": "Tệp lớn hơn $size$, bật chế độ vừa tải vừa lưu?",
"placeholders": {
"size": {
"content": "$1"
}
}
},
"formatConversionError": {
"message": "Lỗi chuyển đổi định dạng"
},
"streamOnbeforeunload": {
"message": "Đang stream, quá trình tải sẽ dừng sau khi đóng"
},
"fileLoading": {
"message": "Đang tải tệp"
},
"expandAllNodes": {
"message": "Mở rộng tất cả node JSON"
},
"collapseAllNodes": {
"message": "Thu gọn tất cả node JSON"
},
"fileRetrievalFailed": {
"message": "Lấy tệp thất bại"
},
"selectVideo": {
"message": "Chọn Video"
},
"extractSlices": {
"message": "Trích xuất các lát (slices)"
},
"convertToM3U8": {
"message": "Chuyển sang phân tích M3U8"
},
"selectAudio": {
"message": "Chọn Audio"
},
"audio": {
"message": "Âm thanh"
},
"video": {
"message": "Hình ảnh"
},
"DRMerror": {
"message": "Media có bảo vệ DRM, vui lòng dùng công cụ bên thứ ba để tải"
},
"regexTitle": {
"message": "Khớp biểu thức chính quy hoặc từ tìm kiếm sâu"
},
"downloadWithRequestHeader": {
"message": "Tải xuống với tham số request header."
},
"m3u8Playlist": {
"message": "Danh sách phát M3U8"
},
"copiedToClipboard": {
"message": "Đã sao chép vào bộ nhớ tạm"
},
"hasSent": {
"message": "Đã gửi"
},
"sendFailed": {
"message": "Gửi thất bại"
},
"confirmDownload": {
"message": "Tổng cộng $num$ tệp, xác nhận tải xuống?",
"placeholders": {
"num": {
"content": "$1"
}
}
},
"confirmLoading": {
"message": "Có tổng cộng $num$ tài nguyên, bạn có muốn hủy tải không?",
"placeholders": {
"num": {
"content": "$1"
}
}
},
"waitingForMedia": {
"message": "Đang chờ nhận tệp media... Vui lòng không đóng trang này."
},
"exit": {
"message": "Thoát"
},
"unknownSize": {
"message": "Kích thước không xác định"
},
"saving": {
"message": "Đang lưu"
},
"saveFailed": {
"message": "Lưu thất bại"
},
"badgeNumber": {
"message": "Hiển thị số trên biểu tượng"
},
"viewSlices": {
"message": "Xem tất cả các lát và tiến độ tải xuống"
},
"send2local": {
"message": "Truyền dữ liệu"
},
"send2MQTT": {
"message": "Gửi đến MQTT"
},
"sendingToMQTT": {
"message": "Đang gửi đến máy chủ MQTT..."
},
"connectingToMQTT": {
"message": "Đang kết nối đến máy chủ MQTT..."
},
"sendingMessageToMQTT": {
"message": "Đang gửi tin nhắn đến máy chủ MQTT..."
},
"messageSentToMQTT": {
"message": "Tin nhắn đã gửi đến máy chủ MQTT"
},
"popup": {
"message": "Popup"
},
"defaultPopup": {
"message": "Chế độ Popup mặc định"
},
"invokeApp": {
"message": "Gọi ứng dụng"
},
"onlineServiceAddress": {
"message": "Địa chỉ dịch vụ trực tuyến"
},
"withinChina": {
"message": "Trong nội địa Trung Quốc"
},
"dataFetchFailed": {
"message": "Lấy dữ liệu thất bại"
},
"confirmParameters": {
"message": "Xác nhận tham số"
},
"searchingForRealKey": {
"message": "Đang tìm kiếm key thực"
},
"verifying": {
"message": "Đang xác minh"
},
"realKeyNotFound": {
"message": "Không tìm thấy key thực"
},
"blockUrl": {
"message": "Chặn URL"
},
"addUrl": {
"message": "Thêm URL"
},
"wildcards": {
"message": "ký tự đại diện"
},
"blockUrlTips": {
"message": "Hỗ trợ ký tự đại diện * và ?"
},
"setWhiteList": {
"message": "Đặt vào danh sách trắng"
},
"autoSend": {
"message": "Tự động truyền dữ liệu"
},
"manualSend": {
"message": "Truyền dữ liệu thủ công"
},
"requestMethod": {
"message": "Phương thức Request"
},
"requestBody": {
"message": "Request Body"
},
"sort": {
"message": "Sắp xếp"
},
"asc": {
"message": "Tăng dần"
},
"desc": {
"message": "Giảm dần"
},
"getTime": {
"message": "Thời gian lấy"
},
"fileSize": {
"message": "Kích thước tệp"
},
"title": {
"message": "Tiêu đề"
},
"noKeyIsRequired": {
"message": "Không yêu cầu key"
},
"estimateSize": {
"message": "Kích thước ước tính"
},
"retryCount": {
"message": "Số lần thử lại"
},
"useSidePanel": {
"message": "Sử dụng bảng điều khiển bên (Side Panel)"
},
"Script": {
"message": "Script"
},
"alwaysSearch": {
"message": "Luôn bật tìm kiếm sâu"
},
"sideurlprotocol": {
"message": "Giao thức URL m3u8dl"
},
"deleteDuplicateFilenames": {
"message": "Xóa tên tệp trùng lặp"
},
"alertimport": {
"message": "Nhập hoàn tất"
},
"isBlockedSite": {
"message": "Trang web này yêu cầu chặn hoạt động của tiện ích mở rộng này"
}
}
================================================
FILE: _locales/zh_CN/messages.json
================================================
{
"catCatch": {
"message": "猫抓"
},
"description": {
"message": "网页媒体嗅探工具"
},
"confirm": {
"message": "确认"
},
"currentPage": {
"message": "当前页面"
},
"otherPage": {
"message": "其他页面"
},
"otherFeatures": {
"message": "其他功能"
},
"mediaControl": {
"message": "媒体控制"
},
"loadingData": {
"message": "数据载入中..."
},
"selectWebpage": {
"message": "选择页面:"
},
"selectMedia": {
"message": "选择媒体:"
},
"noMediaDetected": {
"message": "未检测到有媒体的网页"
},
"noControllableMediaDetected": {
"message": "未检测到可操控媒体"
},
"multiplier": {
"message": "倍数:"
},
"speedPlayback": {
"message": "倍速播放"
},
"play": {
"message": "播放"
},
"normalPlay": {
"message": "正常播放"
},
"pictureInPicture": {
"message": "画中画"
},
"fullscreen": {
"message": "全屏"
},
"screenshot": {
"message": "截图"
},
"loop": {
"message": "循环"
},
"mute": {
"message": "静音"
},
"volume": {
"message": "音 量"
},
"functionEntry": {
"message": "功能入口"
},
"downloader": {
"message": "下载器"
},
"parser": {
"message": "解析"
},
"m3u8Parser": {
"message": "M3U8解析器"
},
"mpdParser": {
"message": "MPD解析器"
},
"jsonFormatter": {
"message": "JSON格式化"
},
"expandAll": {
"message": "展开全部"
},
"expandPlayable": {
"message": "展开可播放"
},
"expandSelected": {
"message": "展开所选"
},
"collapseAll": {
"message": "关闭展开"
},
"videoRecording": {
"message": "视频录制"
},
"closeRecording": {
"message": "关闭录制"
},
"recordWebRTC": {
"message": "录制webRTC"
},
"screenCapture": {
"message": "屏幕捕捉"
},
"simulateMobile": {
"message": "模拟手机"
},
"autoDownload": {
"message": "自动下载"
},
"onlineMerge": {
"message": "在线合并"
},
"download": {
"message": "下载"
},
"copy": {
"message": "复制"
},
"selectAll": {
"message": "全选"
},
"invertSelection": {
"message": "反选"
},
"filter": {
"message": "筛选"
},
"clear": {
"message": "清空"
},
"deepSearch": {
"message": "深度搜索"
},
"closeSearch": {
"message": "关闭搜索"
},
"cacheCapture": {
"message": "缓存捕捉"
},
"closeCapture": {
"message": "关闭捕捉"
},
"moreFeatures": {
"message": "更多功能"
},
"pause": {
"message": "暂停"
},
"settings": {
"message": "设置"
},
"closeSimulation": {
"message": "关闭模拟"
},
"closeDownload": {
"message": "关闭下载"
},
"enable": {
"message": "启用"
},
"disable": {
"message": "禁用"
},
"noData": {
"message": "还没闻到味儿~"
},
"regularFilterPlaceholder": {
"message": "正则筛选 匹配资源url 回车确认"
},
"option": {
"message": "选项"
},
"titleOption": {
"message": "猫抓 设置"
},
"titleDownload": {
"message": "猫抓 下载器"
},
"titleM3U8": {
"message": "猫抓 M3U8解析器"
},
"titleJson": {
"message": "猫抓 json格式化"
},
"titledash": {
"message": "猫抓 dash解析器"
},
"suffix": {
"message": "后缀"
},
"suffixTip": {
"message": "填写不含'.'的后缀, 不过滤大小填0"
},
"extensionName": {
"message": "扩展名"
},
"filterSize": {
"message": "过滤大小"
},
"delete": {
"message": "删除"
},
"addSuffix": {
"message": "添加后缀"
},
"extension": {
"message": "扩展"
},
"disableAll": {
"message": "全部禁用"
},
"enableAll": {
"message": "全部启用"
},
"type": {
"message": "类型"
},
"addType": {
"message": "添加类型"
},
"typeTip": {
"message": "填入正确的content-type类型, 不过滤大小填0"
},
"addTypeError": {
"message": "抓取类型格式错误,请检查"
},
"regexMatch": {
"message": "正则匹配"
},
"blockResource": {
"message": "屏蔽资源"
},
"alert": {
"message": "提示"
},
"regexExpression": {
"message": "正则表达式"
},
"addRegex": {
"message": "添加正则"
},
"regexTest": {
"message": "正则测试"
},
"regex": {
"message": "正则"
},
"flag": {
"message": "标识符"
},
"result": {
"message": "结果"
},
"match": {
"message": "匹配"
},
"noMatch": {
"message": "不匹配"
},
"blockResourceTip": {
"message": "屏蔽不想出现的资源"
},
"flagTip": {
"message": "i: 忽略大小写, g: 全局搜索。也可为空。"
},
"regexSuffixTip": {
"message": "为获取到的URL指定一个后缀名, 可留空,会自动截取后缀名(很多文件并不存在后缀名)"
},
"regexTip": {
"message": "正则表达式占用资源较高, 非必要谨慎使用"
},
"copyTip": {
"message": "为方便使用第三方应用,自定义复制按钮写入剪贴板的内容。"
},
"replaceKeywordList": {
"message": "替换关键词列表"
},
"otherFiles": {
"message": "其他文件"
},
"resetCopySettings": {
"message": "重置复制设置"
},
"autoSetRefererCookieParams": {
"message": "自动设置Referer cookie参数"
},
"secretKey": {
"message": "密钥"
},
"address": {
"message": "地址"
},
"documentation": {
"message": "文档"
},
"aria2Tip": {
"message": "非常优秀的下载工具 使用方法查看"
},
"m3u8DLTips": {
"message": "非常优秀的m3u8 mpd第三方下载工具 使用方法查看"
},
"invoke": {
"message": "调用"
},
"parameter": {
"message": "参数"
},
"parameterSetting": {
"message": "参数设置"
},
"test": {
"message": "测试"
},
"replaceTags": {
"message": "替换标签"
},
"customSaveFileName": {
"message": "自定义保存文件名"
},
"userAgentTip": {
"message": "留空默认为当前浏览器 User Agent"
},
"alwaysDisableCatCatcher": {
"message": "始终不启用猫抓下载器"
},
"autoClosePageAfterDownload": {
"message": "下载完自动关闭页面"
},
"openDownloaderPageInBackground": {
"message": "后台打开下载器页面"
},
"downloaderTip": {
"message": "如果检测到资源下载失败, 自动启用下载器再次尝试下载."
},
"autoDownM3u8Tip": {
"message": "点击 下载按钮 使用m3u8解析器立即开始合并下载"
},
"otherSettings": {
"message": "其他设置"
},
"resetOtherSettings": {
"message": "重置其他设置"
},
"previewMode": {
"message": "使用本地播放器调用协议打开视频预览"
},
"previewModePlaceholder": {
"message": "留空为不启用 默认使用popup页面预览视频"
},
"preview": {
"message": "预览"
},
"customFilenameOption": {
"message": "使用自定义文件名保存文件(默认为网页标题)"
},
"saveAsOption": {
"message": "下载完选择保存目录"
},
"iconOption": {
"message": "显示网站图标"
},
"clearOption": {
"message": "刷新、跳转到新页面 清空当前标签抓取的数据"
},
"doNotClear": {
"message": "不清空"
},
"normalClear": {
"message": "正常清理"
},
"moreFrequent": {
"message": "更频繁"
},
"dopreview": {
"message": "preview"
},
"dopopup": {
"message": "popup"
},
"winpreview": {
"message": "window preview"
},
"winpopup": {
"message": "window popup"
},
"excludeDuplicateResources": {
"message": "排除重复的资源 (资源过多会占用大量CPU)"
},
"customCSS": {
"message": "自定义CSS"
},
"MQTT": {
"message": "MQTT"
},
"mqttBroker": {
"message": "MQTT代理地址"
},
"mqttPath": {
"message": "路径"
},
"mqttProtocol": {
"message": "协议"
},
"mqttClientId": {
"message": "客户端ID"
},
"mqttTitleLength": {
"message": "标题最大长度"
},
"mqttUsername": {
"message": "用户名"
},
"mqttPassword": {
"message": "密码"
},
"mqttTopic": {
"message": "主题"
},
"mqttQos": {
"message": "QoS级别"
},
"mqttQos0": {
"message": "(最多一次)"
},
"mqttQos1": {
"message": "(至少一次)"
},
"mqttQos2": {
"message": "(确保一次)"
},
"mqttDataFormat": {
"message": "数据格式"
},
"mqttDataFormatHelp": {
"message": "{\"url\": \"$${url}\", \"title\": \"$${title}\", \"type\": \"$${type}\", \"ext\": \"$${ext}\", \"timestamp\": \"$${timestamp}\"}"
},
"mqttDataFormatVars": {
"message": "可用变量"
},
"mqttDataFormatDefault": {
"message": "留空则使用默认JSON格式"
},
"mqttProtocolWss": {
"message": "WSS (安全)"
},
"mqttProtocolWs": {
"message": "WS (非安全)"
},
"mqttTitleLengthHelp": {
"message": "MQTT消息中标题的最大长度"
},
"mqttBrokerHelp": {
"message": "MQTT代理的主机名或IP地址"
},
"mqttPathHelp": {
"message": "WebSocket路径 (通常为/mqtt或/ws)"
},
"mqttClientIdHelp": {
"message": "此连接的唯一客户端标识符"
},
"mqttTopicHelp": {
"message": "发布消息的MQTT主题"
},
"mqttQosHelp": {
"message": "服务质量级别 (0=最多一次, 1=至少一次, 2=确保一次)"
},
"mqttCredentialsHelp": {
"message": "如不需要认证,请留空用户名和密码"
},
"operation": {
"message": "操作"
},
"exportSettings": {
"message": "导出设置"
},
"importConfiguration": {
"message": "导入配置"
},
"clearCapturedData": {
"message": "清空抓取的数据"
},
"resetSettings": {
"message": "重置设置"
},
"resetAllSettings": {
"message": "重置所有设置"
},
"restartExtension": {
"message": "重启扩展"
},
"about": {
"message": "关于"
},
"confirmReset": {
"message": "确认重置吗?"
},
"invokeProtocolTemplate": {
"message": "调用协议模板"
},
"customVLCProtocol": {
"message": "自定义VLC协议"
},
"systemShare": {
"message": "系统分享"
},
"default": {
"message": "默认"
},
"goBack": {
"message": "返回上一页"
},
"openDir": {
"message": "打开下载目录"
},
"downloadDir": {
"message"
gitextract_z1zwe3wv/
├── .github/
│ ├── FUNDING.yml
│ └── ISSUE_TEMPLATE/
│ ├── bug.yaml
│ └── 功能-添加-修改-增强-请求.md
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── README_en.md
├── README_es.md
├── _locales/
│ ├── en/
│ │ └── messages.json
│ ├── es/
│ │ └── messages.json
│ ├── ja/
│ │ └── messages.json
│ ├── pt_BR/
│ │ └── messages.json
│ ├── tr/
│ │ └── messages.json
│ ├── vi/
│ │ └── messages.json
│ ├── zh_CN/
│ │ └── messages.json
│ └── zh_TW/
│ └── messages.json
├── catch-script/
│ ├── catch.js
│ ├── i18n.js
│ ├── recorder.js
│ ├── recorder2.js
│ ├── search.js
│ └── webrtc.js
├── css/
│ ├── install.css
│ ├── mobile.css
│ ├── options.css
│ ├── popup.css
│ ├── preview.css
│ └── public.css
├── downloader.html
├── install.html
├── js/
│ ├── background.js
│ ├── content-script.js
│ ├── downloader.js
│ ├── firefox.js
│ ├── function.js
│ ├── i18n.js
│ ├── init.js
│ ├── install.js
│ ├── json.js
│ ├── m3u8.downloader.js
│ ├── m3u8.js
│ ├── media-control.js
│ ├── mpd.js
│ ├── options.js
│ ├── popup.js
│ ├── preview.js
│ └── pupup-utils.js
├── json.html
├── justfile
├── lib/
│ ├── StreamSaver.js
│ ├── base64.js
│ ├── jquery.json-viewer.js
│ ├── m3u8-decrypt.js
│ └── third-party-libraries.md
├── m3u8.html
├── manifest.firefox.json
├── manifest.json
├── mpd.html
├── options.html
├── popup.html
├── preview.html
└── tools/
└── sync-locales.js
SYMBOL INDEX (271 symbols across 26 files)
FILE: catch-script/catch.js
class CatCatcher (line 2) | class CatCatcher {
method constructor (line 3) | constructor() {
method setupIframeProcessing (line 61) | setupIframeProcessing() {
method initTrustedTypes (line 95) | initTrustedTypes() {
method createUI (line 122) | createUI() {
method createShadowRoot (line 204) | createShadowRoot() {
method bindEvents (line 262) | bindEvents() {
method applyI18n (line 326) | applyI18n() {
method i18n (line 347) | i18n(key, original = "") {
method handleDragStart (line 356) | handleDragStart(event) {
method handleMove (line 373) | handleMove(event) {
method handleAutoDownChange (line 379) | handleAutoDownChange(event) {
method handleFfmpegChange (line 383) | handleFfmpegChange(event) {
method handleRestartAlwaysChange (line 387) | handleRestartAlwaysChange(event) {
method handleClean (line 395) | handleClean(event) {
method handleDownload (line 412) | handleDownload(event) {
method handleHide (line 423) | handleHide(event) {
method handleClose (line 434) | handleClose(event) {
method handleRestart (line 447) | handleRestart(event) {
method handleSetFileName (line 458) | handleSetFileName(event) {
method handleTest (line 463) | handleTest(event) {
method handleCompleteClearCache (line 467) | handleCompleteClearCache(event) {
method handleAutoToBuffered (line 475) | handleAutoToBuffered(event) {
method handleSetSelector (line 509) | handleSetSelector(event) {
method handleSetRegular (line 538) | handleSetRegular(event) {
method proxyMediaSourceMethods (line 561) | proxyMediaSourceMethods() {
method setupAutoRestart (line 626) | setupAutoRestart() {
method resetVideoPlayback (line 655) | resetVideoPlayback(video) {
method catchDownload (line 684) | catchDownload() {
method downloadWithFFmpeg (line 757) | downloadWithFFmpeg() {
method downloadDirect (line 791) | downloadDirect() {
method clearFileName (line 818) | clearFileName(obj = "selector", warning = "") {
method clearCache (line 829) | clearCache() {
method byteToSize (line 848) | byteToSize(byte) {
method getFileName (line 862) | getFileName() {
method stringModify (line 898) | stringModify(str) {
FILE: catch-script/recorder.js
function init (line 134) | function init() {
function setMimeType (line 142) | function setMimeType() {
function getVideo (line 183) | function getVideo() {
function getCaptureStreamMethod (line 203) | function getCaptureStreamMethod(element) {
function move (line 304) | function move(event) {
function i18n (line 327) | function i18n(key, original = "") {
FILE: catch-script/recorder2.js
function startRecording (line 176) | async function startRecording() {
function getElementOffset (line 228) | function getElementOffset(el) {
function i18n (line 253) | function i18n(key, original = "") {
FILE: catch-script/search.js
function findMedia (line 64) | async function findMedia(data, depth = 0) {
method apply (line 340) | apply(target, thisArg, argumentsList) {
method construct (line 510) | construct(target, args) {
method construct (line 517) | construct(target, args) {
method construct (line 524) | construct(target, args) {
function isUrl (line 548) | function isUrl(str) {
function isFullM3u8 (line 551) | function isFullM3u8(text) {
function TsProtocol (line 560) | function TsProtocol(text) {
function getBaseUrl (line 571) | function getBaseUrl(url) {
function addBaseUrl (line 577) | function addBaseUrl(baseUrl, m3u8Text) {
function isJSON (line 601) | function isJSON(str) {
function getExtension (line 612) | function getExtension(str) {
function toUrl (line 633) | function toUrl(text, ext = "m3u8") {
function getDataM3U8 (line 651) | function getDataM3U8(text) {
function postData (line 667) | function postData(data) {
function ArrayToBase64 (line 693) | function ArrayToBase64(data) {
function isRepeatedExpansion (line 708) | function isRepeatedExpansion(array, expansionLength) {
function extractBaseUrl (line 721) | function extractBaseUrl(url) {
function vimeo (line 732) | async function vimeo(originalUrl, json) {
FILE: catch-script/webrtc.js
function getSupportedMimeTypes (line 116) | function getSupportedMimeTypes(media, types, codecs) {
method construct (line 237) | construct(target, args) {
function download (line 277) | function download(chunks) {
function secToTime (line 291) | function secToTime(sec) {
function i18n (line 316) | function i18n(key, original = "") {
FILE: js/background.js
function findMedia (line 76) | function findMedia(data, isRegex = false, filter = false, timer = false) {
function save (line 300) | function save(tabId) {
function operatorCheck (line 759) | function operatorCheck(size, Obj) {
function CheckExtension (line 787) | function CheckExtension(ext, size) {
function CheckType (line 804) | function CheckType(dataType, dataSize) {
function fileNameParse (line 819) | function fileNameParse(pathname) {
function getResponseHeadersValue (line 831) | function getResponseHeadersValue(data) {
function getRequestHeaders (line 857) | function getRequestHeaders(data) {
function SetIcon (line 878) | function SetIcon(obj) {
function mobileUserAgent (line 890) | function mobileUserAgent(tabId, change = false) {
function isSpecialPage (line 921) | function isSpecialPage(url) {
FILE: js/content-script.js
function connect (line 176) | function connect() {
function secToTime (line 184) | function secToTime(sec) {
function ArrayToBase64 (line 259) | function ArrayToBase64(data) {
FILE: js/downloader.js
function start (line 73) | function start() {
function sendFile (line 382) | function sendFile(action, data, fragment) {
FILE: js/firefox.js
function importScripts (line 3) | function importScripts() {
FILE: js/function.js
function appendZero (line 6) | function appendZero(date) {
function secToTime (line 15) | function secToTime(sec) {
function byteToSize (line 30) | function byteToSize(byte) {
function downloadDataURL (line 46) | function downloadDataURL(url, fileName) {
function isEmpty (line 59) | function isEmpty(obj) {
function setRequestHeaders (line 71) | function setRequestHeaders(data = {}, callback = undefined) {
function setHeaders (line 113) | function setHeaders(data, callBack, tabId = -1) {
function awaitG (line 151) | function awaitG(callback, sec = 0) {
function splitString (line 166) | function splitString(text, separator) {
function templatesFunction (line 195) | function templatesFunction(text, action, data) {
function templates (line 284) | function templates(text, data) {
function getUrlFileName (line 355) | function getUrlFileName(url) {
function JSONparse (line 368) | function JSONparse(str, error = {}, attempt = 0) {
function ArrayBufferToBlob (line 391) | function ArrayBufferToBlob(buffer, options = {}) {
function clearRedundant (line 423) | function clearRedundant() {
function stringModify (line 503) | function stringModify(str, text) {
function filterFileName (line 515) | function filterFileName(str, text) {
function flattenObject (line 548) | function flattenObject(obj, prefix = '') {
function send2local (line 572) | function send2local(action, data, tabId = 0) {
function isDamnUrl (line 654) | function isDamnUrl(url) {
function isLockUrl (line 669) | function isLockUrl(url) {
function closeTab (line 685) | function closeTab(tabId = 0) {
function openParser (line 701) | function openParser(data, options = {}) {
function loadCSS (line 722) | function loadCSS() {
function trimData (line 740) | function trimData(originalData) {
FILE: js/init.js
method url (line 225) | get url() {
method url (line 231) | get url() {
function InitOptions (line 252) | function InitOptions() {
function wildcardToRegex (line 425) | function wildcardToRegex(urlPattern) {
FILE: js/install.js
function setLanguage (line 5) | function setLanguage(lang) {
FILE: js/json.js
function init (line 11) | function init() {
FILE: js/m3u8.downloader.js
class Downloader (line 1) | class Downloader {
method constructor (line 2) | constructor(fragments = [], thread = 6) {
method init (line 14) | init() {
method on (line 31) | on(eventName, callBack) {
method emit (line 43) | emit(eventName, ...args) {
method setDecrypt (line 54) | setDecrypt(callback) {
method setTranscode (line 61) | setTranscode(callback) {
method stop (line 68) | stop(index = undefined) {
method isErrorItem (line 81) | isErrorItem(fragment) {
method errorItem (line 87) | get errorItem() {
method sequentialPush (line 93) | sequentialPush() {
method range (line 110) | range(start = 0, end = this.fragments.length) {
method total (line 141) | get total() {
method totalDuration (line 148) | get totalDuration() {
method fragments (line 154) | set fragments(fragments) {
method fragments (line 158) | get fragments() {
method mapTag (line 165) | get mapTag() {
method push (line 175) | push(fragment) {
method downloader (line 183) | downloader(fragment = null) {
method start (line 310) | start(start = 0, end = this.fragments.length) {
method destroy (line 330) | destroy() {
FILE: js/m3u8.js
function init (line 105) | function init() {
function getNewUrl (line 406) | function getNewUrl(item) {
function parseTs (line 539) | function parseTs(data) {
function estimateSize (line 735) | async function estimateSize(fragments) {
function stopRecorder (line 996) | function stopRecorder() {
function downloadNew (line 1272) | function downloadNew(start = 0, end = _fragments.length) {
function addInitSegmentData (line 1482) | function addInitSegmentData(buffer, initSegment) {
function mergeTsNew (line 1495) | function mergeTsNew(down) {
function apiDownload (line 1586) | function apiDownload(fileBlob, fileName, ext) {
function initDownload (line 1604) | function initDownload() {
function createStreamSaver (line 1618) | function createStreamSaver(url) {
function getTemplates (line 1631) | function getTemplates(text) {
function getM3u8DlREArg (line 1639) | function getM3u8DlREArg() {
function getM3u8DlArg (line 1683) | function getM3u8DlArg() {
function timeToIndex (line 1733) | function timeToIndex(time) {
function writeText (line 1738) | function writeText(text) {
function GetFile (line 1754) | function GetFile(str) {
function GetFileName (line 1762) | function GetFileName(url) {
function GetExt (line 1786) | function GetExt(url) {
function buttonState (line 1797) | function buttonState(obj = "#mergeTs", state = true) {
function ArrayBufferToHexString (line 1805) | function ArrayBufferToHexString(buffer) {
function ArrayBufferToBase64 (line 1814) | function ArrayBufferToBase64(buffer) {
function Base64ToArrayBuffer (line 1823) | function Base64ToArrayBuffer(base64) {
function StringToArrayBuffer (line 1833) | function StringToArrayBuffer(str) {
function HexStringToArrayBuffer (line 1841) | function HexStringToArrayBuffer(hex) {
function StringToUint8Array (line 1848) | function StringToUint8Array(str) {
function fixFileDuration (line 1853) | function fixFileDuration(data, duration) {
function isHexKey (line 1905) | function isHexKey(str) {
function addBashUrl (line 1909) | function addBashUrl(baseUrl, m3u8Text) {
function highlight (line 1928) | function highlight() {
function autoMerge (line 1936) | function autoMerge() {
FILE: js/media-control.js
function setVideoTagTimer (line 9) | function setVideoTagTimer() {
function getVideoTag (line 13) | function getVideoTag() {
function setVideoStateTimer (line 44) | function setVideoStateTimer() {
function getVideoState (line 48) | function getVideoState(setSpeed = false) {
FILE: js/mpd.js
function init (line 24) | function init() {
function getEncryptionType (line 92) | function getEncryptionType(schemeIdUri) {
function isDRM (line 104) | function isDRM(mpdContent) {
function parseMPD (line 129) | function parseMPD(mpdContent) {
function showSegment (line 161) | function showSegment(type, index) {
function getInfo (line 181) | function getInfo(type = "audio") {
FILE: js/options.js
function Gethtml (line 88) | function Gethtml(Type, Param = new Object()) {
function testTag (line 208) | function testTag() {
function SaveGetVal (line 345) | function SaveGetVal(Obj) {
function Save (line 376) | function Save(option, sec = 0) {
FILE: js/popup.js
function AddMedia (line 58) | function AddMedia(data, currentTab = true) {
function AddKey (line 426) | function AddKey(key) {
function getPageDOM (line 740) | async function getPageDOM() {
function updateButton (line 879) | function updateButton() {
function isPlay (line 901) | function isPlay(data) {
function catDownload (line 909) | function catDownload(data, extra = {}) {
function createCatDownload (line 937) | function createCatDownload(data, extra) {
function Tips (line 962) | function Tips(text, delay = 200) {
function UItoggle (line 981) | function UItoggle() {
function mergeDownButtonCheck (line 1004) | function mergeDownButtonCheck(data) {
function mergeDownButton (line 1010) | function mergeDownButton() {
function getCheckedData (line 1023) | function getCheckedData() {
function getData (line 1036) | function getData(requestId = false) {
function getAllData (line 1043) | function getAllData() {
function updateDownHeight (line 1051) | function updateDownHeight() {
function base64ToHex (line 1055) | function base64ToHex(base64) {
FILE: js/preview.js
class FilePreview (line 1) | class FilePreview {
method constructor (line 6) | constructor() {
method init (line 29) | async init() {
method parseParams (line 46) | parseParams() {
method setupEventListeners (line 68) | setupEventListeners() {
method toggleSelection (line 158) | toggleSelection(type) {
method getSelectedItems (line 168) | getSelectedItems() {
method updateButtonStatus (line 174) | updateButtonStatus() {
method mergeDownload (line 193) | mergeDownload() {
method downloadItem (line 215) | downloadItem(data) {
method deleteItem (line 243) | deleteItem(data = null) {
method copy (line 257) | copy(data = null) {
method mqtt (line 266) | mqtt(data) {
method downloadSelected (line 281) | downloadSelected() {
method aria2 (line 289) | aria2(data) {
method invoke (line 300) | invoke(data) {
method send (line 312) | send(data) {
method updateFileList (line 322) | updateFileList() {
method createFileElement (line 378) | createFileElement(item, index) {
method setupFilters (line 491) | setupFilters(filterId, property) {
method setOptions (line 508) | setOptions() {
method renderFileItems (line 522) | renderFileItems() {
method trimData (line 535) | trimData(data) {
method loadFileItems (line 554) | async loadFileItems() {
method closePreview (line 577) | closePreview() {
method playItem (line 591) | playItem(item) {
method generatePreview (line 616) | async generatePreview(item) {
method setPerviewVideo (line 689) | setPerviewVideo(item) {
method startPreviewGeneration (line 730) | async startPreviewGeneration() {
method catDownload (line 761) | catDownload(data, extra = {}) {
method setupSelectionBox (line 807) | setupSelectionBox() {
method openM3U8 (line 888) | openM3U8(data, options = {}) {
method push (line 926) | push(data) {
method setupPage (line 946) | setupPage(fileLength) {
method clearData (line 976) | clearData() {
method srciptList (line 985) | srciptList() {
method updateSrciptButton (line 997) | updateSrciptButton() {
method checkVersion (line 1013) | checkVersion() {
FILE: js/pupup-utils.js
function copyLink (line 2) | function copyLink(data) {
function isM3U8 (line 13) | function isM3U8(data) {
function isMPD (line 23) | function isMPD(data) {
function isJSON (line 28) | function isJSON(data) {
function isPicture (line 34) | function isPicture(data) {
function isMediaExt (line 45) | function isMediaExt(ext) {
function isMedia (line 48) | function isMedia(data) {
function aria2AddUri (line 57) | function aria2AddUri(data, success, error) {
function sendToMQTT (line 103) | function sendToMQTT(data, config) {
function connectAndSendMQTT (line 133) | function connectAndSendMQTT(data, config) {
FILE: lib/StreamSaver.js
function makeIframe (line 42) | function makeIframe (src) {
function makePopup (line 65) | function makePopup (src) {
function loadTransporter (line 119) | function loadTransporter () {
function createWriteStream (line 133) | function createWriteStream (filename, options, size) {
FILE: lib/base64.js
class Base64 (line 1) | class Base64 {
method encode (line 7) | static encode(str) {
method decode (line 25) | static decode(base64Str) {
FILE: lib/jquery.json-viewer.js
function isCollapsable (line 12) | function isCollapsable(arg) {
function isUrl (line 21) | function isUrl(string) {
function htmlEscape (line 35) | function htmlEscape(s) {
function json2html (line 47) | function json2html(json, options) {
FILE: lib/m3u8-decrypt.js
class AESDecryptor (line 1) | class AESDecryptor {
method constructor (line 2) | constructor() {
method removePadding (line 23) | removePadding(array) {
method uint8ArrayToUint32Array_ (line 33) | uint8ArrayToUint32Array_(arrayBuffer) {
method initTable (line 41) | initTable() {
method expandKey (line 95) | expandKey(keyBuffer) {
method networkToHostOrderSwap (line 173) | networkToHostOrderSwap(word) {
method decrypt (line 181) | decrypt(inputArrayBuffer, offset, aesIV, removePKCS7Padding) {
method destroy (line 286) | destroy() {
FILE: tools/sync-locales.js
function readJsonFile (line 9) | function readJsonFile(filePath) {
function writeJsonFile (line 20) | function writeJsonFile(filePath, data) {
function getLocaleDirs (line 33) | function getLocaleDirs() {
function syncLocales (line 40) | function syncLocales() {
Condensed preview — 63 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (836K chars).
[
{
"path": ".github/FUNDING.yml",
"chars": 81,
"preview": "# These are supported funding model platforms\n\ncustom: [https://paypal.me/o2bmm]\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug.yaml",
"chars": 1599,
"preview": "name: Bug 报告 Bug Report\ndescription: 创建一个bug报告. File a bug report\nbody:\n - type: input\n id: version\n attributes:\n"
},
{
"path": ".github/ISSUE_TEMPLATE/功能-添加-修改-增强-请求.md",
"chars": 111,
"preview": "---\nname: 功能 添加/修改/增强 请求\nabout: 请求一个功能修改或添加\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n** 详细描述想要添 加/修改/增强 的功能 **\n"
},
{
"path": ".gitignore",
"chars": 37,
"preview": "# 构建产物\nbuild/\ndist/\n*.crx\n*.zip\n*.pem"
},
{
"path": "CHANGELOG.md",
"chars": 10101,
"preview": "## 更新说明\n\n### 2.6.6\n\n[Updated] 感谢 @Oleada1 完善翻译\n\n[Updated] 增强 深度搜索 现在可以找到更多资源\n\n[Fixed] 修复 firefox无法视频录制问题\n\n[Fixed] 修复 录制视"
},
{
"path": "LICENSE",
"chars": 35149,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "README.md",
"chars": 2311,
"preview": "<p align=\"center\"> [中文] | [<a href=\"README_en.md\">English</a>] | [<a href=\"README_es.md\">Español</a>]</p>\n\n# 📑简介\n猫抓(cat-"
},
{
"path": "README_en.md",
"chars": 4247,
"preview": "<p align=\"center\"> [<a href=\"README.md\">中文</a>] | [English] | [<a href=\"README_es.md\">Español</a>]</p>\n\n# 📑Introduction\n"
},
{
"path": "README_es.md",
"chars": 4735,
"preview": "<p align=\"center\"> [<a href=\"README.md\">中文</a>] | [<a href=\"README_en.md\">English</a>] | [Español]</p>\n\n# 📑Introducción\n"
},
{
"path": "_locales/en/messages.json",
"chars": 21985,
"preview": "{\n \"catCatch\": {\n \"message\": \"cat-catch\"\n },\n \"description\": {\n \"message\": \"Web media sniffing tool\"\n },\n \"co"
},
{
"path": "_locales/es/messages.json",
"chars": 22971,
"preview": "{\n \"catCatch\": {\n \"message\": \"cat-catch\"\n },\n \"description\": {\n \"message\": \"Herramienta de rastreo de medios we"
},
{
"path": "_locales/ja/messages.json",
"chars": 17934,
"preview": "{\n \"catCatch\": {\n \"message\": \"cat-catch\"\n },\n \"description\": {\n \"message\": \"ウェブメディア探す TOOL\"\n },\n \"confirm\": {"
},
{
"path": "_locales/pt_BR/messages.json",
"chars": 23355,
"preview": "{\n \"catCatch\": {\n \"message\": \"cat-catch\"\n },\n \"description\": {\n \"message\": \"Ferramenta de detecção de mídia da "
},
{
"path": "_locales/tr/messages.json",
"chars": 22479,
"preview": "{\n \"catCatch\": {\n \"message\": \"cat-catch\"\n },\n \"description\": {\n \"message\": \"Web medya sniffer aracı\"\n },\n \"co"
},
{
"path": "_locales/vi/messages.json",
"chars": 22149,
"preview": "{\n \"catCatch\": {\n \"message\": \"cat-catch\"\n },\n \"description\": {\n \"message\": \"Công cụ bắt link media trên web\"\n "
},
{
"path": "_locales/zh_CN/messages.json",
"chars": 17270,
"preview": "{\n \"catCatch\": {\n \"message\": \"猫抓\"\n },\n \"description\": {\n \"message\": \"网页媒体嗅探工具\"\n },\n \"confirm\": {\n \"message"
},
{
"path": "_locales/zh_TW/messages.json",
"chars": 17267,
"preview": "{\n \"catCatch\": {\n \"message\": \"貓抓\"\n },\n \"description\": {\n \"message\": \"網頁媒體嗅探工具\"\n },\n \"confirm\": {\n \"message"
},
{
"path": "catch-script/catch.js",
"chars": 37979,
"preview": "(function () {\n class CatCatcher {\n constructor() {\n console.log(\"catch.js Start\");\n\n //"
},
{
"path": "catch-script/i18n.js",
"chars": 7471,
"preview": "(function () {\n if (window.CatCatchI18n) { return; }\n window.CatCatchI18n = {\n languages: [\"en\", \"es\", \"zh\"],\n "
},
{
"path": "catch-script/recorder.js",
"chars": 14204,
"preview": "(function () {\n console.log(\"recorder.js Start\");\n if (document.getElementById(\"catCatchRecorder\")) { return; }\n "
},
{
"path": "catch-script/recorder2.js",
"chars": 9247,
"preview": "(function () {\n console.log(\"recorder2.js Start\");\n if (document.getElementById(\"catCatchRecorder2\")) {\n re"
},
{
"path": "catch-script/search.js",
"chars": 33174,
"preview": "// const CATCH_SEARCH_ONLY = true;\n(function __CAT_CATCH_CATCH_SCRIPT__() {\n const isRunningInWorker = typeof WorkerG"
},
{
"path": "catch-script/webrtc.js",
"chars": 12630,
"preview": "(function () {\n console.log(\"webrtc.js Start\");\n if (document.getElementById(\"catCatchWebRTC\")) { return; }\n\n /"
},
{
"path": "css/install.css",
"chars": 7235,
"preview": "* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n font-family: \"Segoe UI\", \"PingFang SC\", \"Microsoft YaHei\", sa"
},
{
"path": "css/mobile.css",
"chars": 173,
"preview": ".popupBody {\n width: 100%;\n}\n\n.wrapper.options {\n margin-right: 10px;\n}\n\n.m3u8_wrapper #mergeTs {\n font-size: 2rem;\n}"
},
{
"path": "css/options.css",
"chars": 8524,
"preview": "body {\n background: var(--background-color);\n font-size: 13px;\n font-family: \"Microsoft YaHei\", \"Helvetica\", \"Arial\","
},
{
"path": "css/popup.css",
"chars": 4263,
"preview": "a {\n text-decoration: none;\n word-break: break-all;\n}\na:hover {\n text-decoration: underline;\n}\nbody {\n font-family: "
},
{
"path": "css/preview.css",
"chars": 3739,
"preview": "/* 基础样式 */\nbody {\n margin: 0;\n padding: 0;\n height: 100vh;\n user-select: none;\n}\n\n/* .container {\n padding: 10px;\n "
},
{
"path": "css/public.css",
"chars": 4580,
"preview": ":root {\n /* 两个背景色 两个文字以及链接文字配色 */\n --background-color: #fff;\n --background-color-opacity: #ffffffea;\n --background-c"
},
{
"path": "downloader.html",
"chars": 2093,
"preview": "<!DOCTYPE html>\n<html>\n\n<head>\n <meta charset=\"UTF-8\" />\n <title>titleDownload</title>\n <link rel=\"stylesheet\" "
},
{
"path": "install.html",
"chars": 5222,
"preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-w"
},
{
"path": "js/background.js",
"chars": 32400,
"preview": "importScripts(\"/js/function.js\", \"/js/init.js\");\n\n// Service Worker 5分钟后会强制终止扩展\n// https://bugs.chromium.org/p/chromium/"
},
{
"path": "js/content-script.js",
"chars": 10452,
"preview": "(function () {\n var _videoObj = [];\n var _videoSrc = [];\n var _key = new Set();\n chrome.runtime.onMessage.ad"
},
{
"path": "js/downloader.js",
"chars": 14800,
"preview": "// url 参数解析\nconst params = new URL(location.href).searchParams;\nconst _requestId = params.get(\"requestId\") ? params.get("
},
{
"path": "js/firefox.js",
"chars": 733,
"preview": "// 兼容Firefox\nif (typeof (browser) == \"object\" && !(typeof (G) == \"object\" && !G.isFirefox)) {\n function importScripts"
},
{
"path": "js/function.js",
"chars": 23524,
"preview": "/**\n * 小于10的数字前面加0\n * @param {Number} date \n * @returns {String|Number}\n */\nfunction appendZero(date) {\n return parse"
},
{
"path": "js/i18n.js",
"chars": 783,
"preview": "(function () {\n document.querySelectorAll('[data-i18n]').forEach(function (element) {\n element.innerHTML = i18"
},
{
"path": "js/init.js",
"chars": 17235,
"preview": "// 低版本chrome manifest v3协议 会有 getMessage 函数不存在的bug\nif (chrome.i18n.getMessage === undefined) {\n chrome.i18n.getMessag"
},
{
"path": "js/install.js",
"chars": 2861,
"preview": "window.addEventListener('DOMContentLoaded', function () {\n // 多语言支持\n let currentLang = 'zh';\n\n function setLang"
},
{
"path": "js/json.js",
"chars": 2623,
"preview": "// url 参数解析\nconst params = new URL(location.href).searchParams;\nvar _url = params.get(\"url\");\n// const _referer = params"
},
{
"path": "js/m3u8.downloader.js",
"chars": 10483,
"preview": "class Downloader {\n constructor(fragments = [], thread = 6) {\n this.fragments = fragments; // 切片列表\n "
},
{
"path": "js/m3u8.js",
"chars": 69116,
"preview": "// url 参数解析\nconst params = new URL(location.href).searchParams;\nlet _m3u8Url = params.get(\"url\"); // m3u8的url地址\nconst "
},
{
"path": "js/media-control.js",
"chars": 8742,
"preview": "(function () {\n let _tabId = -1; // 选择的页面ID\n let _index = -1; //选择的视频索引\n let VideoTagTimer; // 获取所有视频标签的定"
},
{
"path": "js/mpd.js",
"chars": 7165,
"preview": "// url 参数解析\nconst params = new URL(location.href).searchParams;\nconst _url = params.get(\"url\");\n// const _referer = para"
},
{
"path": "js/options.js",
"chars": 17899,
"preview": "////////////////////// 填充数据 //////////////////////\nchrome.storage.sync.get(G.OptionLists, function (items) {\n if (chr"
},
{
"path": "js/popup.js",
"chars": 38196,
"preview": "// 解析参数\nconst params = new URL(location.href).searchParams;\nconst _tabId = parseInt(params.get(\"tabId\"));\nconst _type = "
},
{
"path": "js/preview.js",
"chars": 37952,
"preview": "class FilePreview {\n\n MAX_CONCURRENT = 16; // 最大并行生成预览数\n MAX_LIST_SIZE = 128; // 最大文件列表长度\n\n constructor() {\n"
},
{
"path": "js/pupup-utils.js",
"chars": 7106,
"preview": "// 复制选项\nfunction copyLink(data) {\n let text = data.url;\n if (data.parsing == \"m3u8\") {\n text = G.copyM3U8;\n"
},
{
"path": "json.html",
"chars": 1457,
"preview": "<!DOCTYPE html>\n<html>\n\n<head>\n <meta charset=\"UTF-8\" />\n <title>titleJson</title>\n <link rel=\"stylesheet\" type=\"text"
},
{
"path": "justfile",
"chars": 3877,
"preview": "# 构建脚本(crx)\n\n# 设置默认shell为bash\nset shell := [\"bash\", \"-c\"]\n\n# 默认任务:显示帮助\ndefault:\n @just --list\n\n# 安装依赖\ninstall:\n np"
},
{
"path": "lib/StreamSaver.js",
"chars": 10302,
"preview": "/*! streamsaver. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */\n\n/* global chrome location Readable"
},
{
"path": "lib/base64.js",
"chars": 955,
"preview": "class Base64 {\n /**\n * 将字符串编码为Base64(支持UTF-8)\n * @param {string} str - 需要编码的原始字符串\n * @returns {string} Base64编码结果"
},
{
"path": "lib/jquery.json-viewer.js",
"chars": 5834,
"preview": "/**\n * jQuery json-viewer\n * @author: Alexandre Bodelot <alexandre.bodelot@gmail.com>\n * @link: https://github.com/abode"
},
{
"path": "lib/m3u8-decrypt.js",
"chars": 9507,
"preview": "class AESDecryptor {\n constructor() {\n this.rcon = [0x0, 0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n "
},
{
"path": "lib/third-party-libraries.md",
"chars": 1869,
"preview": "lib/mux.min.js\nSource: https://github.com/videojs/mux.js\nLicense: Apache-2.0 license\nVersion: 7.1.0\nBuild:\n`https://gith"
},
{
"path": "m3u8.html",
"chars": 9020,
"preview": "<!DOCTYPE html>\n<html>\n\n<head>\n <meta charset=\"UTF-8\" />\n <title>titleM3U8</title>\n <link rel=\"stylesheet\" type=\"text"
},
{
"path": "manifest.firefox.json",
"chars": 1689,
"preview": "{\n \"background\": {\n \"scripts\": [\n \"js/firefox.js\",\n \"js/background.js\"\n ]\n },\n \"action\": {\n \"defau"
},
{
"path": "manifest.json",
"chars": 1652,
"preview": "{\n \"background\": {\n \"service_worker\": \"js/background.js\"\n },\n \"action\": {\n \"default_icon\": \"img/icon.png\",\n "
},
{
"path": "mpd.html",
"chars": 2474,
"preview": "<!DOCTYPE html>\n<html>\n\n<head>\n <meta charset=\"UTF-8\" />\n <title>titledash</title>\n <link rel=\"stylesheet\" type=\"text"
},
{
"path": "options.html",
"chars": 39070,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n <meta charset=\"UTF-8\" />\n <title>titleOption</title>\n <meta name=\"viewport\""
},
{
"path": "popup.html",
"chars": 7788,
"preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n <meta charset=\"UTF-8\" />\n <title>catCatch</title>\n <meta name=\"viewport\""
},
{
"path": "preview.html",
"chars": 5035,
"preview": "<!DOCTYPE html>\n<html>\n\n<head>\n <meta charset=\"UTF-8\" />\n <title>filter</title>\n <link rel=\"stylesheet\" type=\"t"
},
{
"path": "tools/sync-locales.js",
"chars": 2566,
"preview": "const fs = require('fs');\nconst path = require('path');\n\n// Paths\nconst localesDir = path.join(__dirname, '../_locales')"
}
]
About this extraction
This page contains the full source code of the xifangczy/cat-catch GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 63 files (761.2 KB), approximately 217.1k tokens, and a symbol index with 271 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.