vault backup: 2026-04-23 20:32:04

This commit is contained in:
2026-04-23 20:32:04 +08:00
parent 9c340d53d7
commit ca4f528872
11 changed files with 1141 additions and 802 deletions

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
{"id":"i18n","name":"I18N","version":"2.0.20","minAppVersion":"1.5.8","description":"专为Obsidian打造的插件国际化工具助力用户轻松跨越语言障碍实现插件界面的无缝汉化。","author":"zero","authorUrl":"https://github.com/eondrcode/obsidian-i18n","fundingUrl":"https://afdian.com/a/eondr","isDesktopOnly":true}
{"id":"i18n","name":"I18N","version":"2.0.21","minAppVersion":"1.5.8","description":"专为Obsidian打造的插件国际化工具助力用户轻松跨越语言障碍实现插件界面的无缝汉化。","author":"zero","authorUrl":"https://github.com/eondrcode/obsidian-i18n","fundingUrl":"https://afdian.com/a/eondr","isDesktopOnly":true}

View File

@@ -172,22 +172,6 @@
"updatedAt": 1776342518939,
"createdAt": 1776342518939
},
"cmsESnsfzvQZtlswGDxvmLDSy0PGyB4S": {
"id": "cmsESnsfzvQZtlswGDxvmLDSy0PGyB4S",
"plugin": "obsidian42-brat",
"title": "BRAT",
"type": "plugin",
"origin": "cloud",
"isActive": true,
"checksum": "2b9e47e7cd2906f6cbbe88d01428eda6715137070ad4c5e09227c1348ff01a95",
"cloud": {
"owner": "yunrr",
"repo": "obsidian-i18n-resources",
"hash": "040c2b21040c2b21040c2b21040c2b21"
},
"updatedAt": 1776342547322,
"createdAt": 1776342547322
},
"zAYcYTPkZ_fIDLJYOyW0ztKFMZHyV3Xj": {
"id": "zAYcYTPkZ_fIDLJYOyW0ztKFMZHyV3Xj",
"plugin": "obsidian-style-settings",
@@ -251,6 +235,22 @@
},
"updatedAt": 1776579281053,
"createdAt": 1776579281053
},
"8-02LUjUc2APh5zqrYW_1yIjENGhpL2B": {
"id": "8-02LUjUc2APh5zqrYW_1yIjENGhpL2B",
"plugin": "obsidian42-brat",
"title": "BRAT",
"type": "plugin",
"origin": "cloud",
"isActive": true,
"checksum": "d639b8ff38d77fe20939a8a5ff5a3bfc5d0367b61336e73e6cedff6eda994423",
"cloud": {
"owner": "yunrr",
"repo": "obsidian-i18n-resources",
"hash": "040bf0a2040bf0a2040bf0a2040bf0a2"
},
"updatedAt": 1776691844734,
"createdAt": 1776691844734
}
}
}

View File

@@ -60,12 +60,6 @@
"pluginVersion": "2.12.0",
"translationVersion": "2.0.0"
},
"obsidian42-brat": {
"id": "obsidian42-brat",
"isApplied": true,
"pluginVersion": "2.0.4",
"translationVersion": "2.0.0"
},
"obsidian-style-settings": {
"id": "obsidian-style-settings",
"isApplied": true,
@@ -89,6 +83,12 @@
"isApplied": true,
"pluginVersion": "2.38.2",
"translationVersion": "1.0.0"
},
"obsidian42-brat": {
"id": "obsidian42-brat",
"isApplied": true,
"pluginVersion": "2.0.4",
"translationVersion": "1.0.0"
}
},
"themes": {}

View File

@@ -0,0 +1,619 @@
{
"schemaVersion": 1,
"metadata": {
"plugin": "obsidian42-brat",
"version": "1.0.0",
"title": "BRAT",
"description": "BRAT Localization & Tweaks",
"language": "zh-cn",
"supportedVersions": "2.0.2",
"author": ""
},
"dict": {
"main.js": {
"ast": [
{
"type": "AssignmentExpression",
"name": "innerText",
"source": "Learn more about my work at:",
"target": "了解更多我的作品:"
},
{
"type": "CallExpression",
"name": "addOption",
"source": "Select a version",
"target": "选择版本"
},
{
"type": "CallExpression",
"name": "addOption",
"source": "Latest version",
"target": "最新版本"
},
{
"type": "CallExpression",
"name": "appendText",
"source": "Change plugin version: ",
"target": "更改插件版本: "
},
{
"type": "CallExpression",
"name": "appendText",
"source": "Enable after installing the plugin",
"target": "安装插件后启用"
},
{
"type": "CallExpression",
"name": "appendText",
"source": " and ",
"target": " 和 "
},
{
"type": "CallExpression",
"name": "appendText",
"source": "Plugin: ",
"target": "插件: "
},
{
"type": "CallExpression",
"name": "appendText",
"source": "The ",
"target": "此"
},
{
"type": "CallExpression",
"name": "appendText",
"source": " for this plugin indicates that the Obsidian version of the app needs to be ",
"target": " 插件的 表示应用的 Obsidian 版本需要为 "
},
{
"type": "CallExpression",
"name": "appendText",
"source": ", but this installation of Obsidian is ",
"target": ", 但此 Obsidian 安装版本为 "
},
{
"type": "CallExpression",
"name": "appendText",
"source": "Using this plugin is not recommended and may not work as expected. Use at your own risk.",
"target": "不建议使用此插件,可能无法按预期工作。风险自担。"
},
{
"type": "CallExpression",
"name": "appendText",
"source": "Do you want to install it anyways?",
"target": "仍要安装吗?"
},
{
"type": "CallExpression",
"name": "appendText",
"source": " for this plugin indicates that the plugin has ",
"target": " 此插件的 表示该插件已"
},
{
"type": "CallExpression",
"name": "appendText",
"source": ", but you are using a mobile device.",
"target": ",但你正在使用移动设备。"
},
{
"type": "CallExpression",
"name": "appendText",
"source": "Do you want to forcefully run it on mobile anyways?",
"target": "仍要强制在移动设备上运行吗?"
},
{
"type": "CallExpression",
"name": "error",
"source": "BRAT\nGitHub API rate limit exceeded:",
"target": "BRAT\nGitHub API 速率限制已超出:"
},
{
"type": "CallExpression",
"name": "error",
"source": "Token validation error:",
"target": "令牌验证错误:"
},
{
"type": "CallExpression",
"name": "error",
"source": "BRAT: validateRepository",
"target": "BRAT: validateRepository"
},
{
"type": "CallExpression",
"name": "error",
"source": "BRAT: Failed to migrate tokens to SecretStorage:",
"target": "BRAT: 无法将令牌迁移到 SecretStorage"
},
{
"type": "CallExpression",
"name": "error",
"source": "Failed to load settings:",
"target": "加载设置失败:"
},
{
"type": "CallExpression",
"name": "info",
"source": "No custom daily note settings found!",
"target": "未找到自定义每日笔记设置!"
},
{
"type": "CallExpression",
"name": "info",
"source": "No custom weekly note settings found!",
"target": "未找到自定义每周笔记设置!"
},
{
"type": "CallExpression",
"name": "info",
"source": "No custom monthly note settings found!",
"target": "未找到自定义每月笔记设置!"
},
{
"type": "CallExpression",
"name": "info",
"source": "No custom quarterly note settings found!",
"target": "未找到自定义每季度笔记设置!"
},
{
"type": "CallExpression",
"name": "info",
"source": "No custom yearly note settings found!",
"target": "未找到自定义每年笔记设置!"
},
{
"type": "CallExpression",
"name": "log",
"source": "error in isPrivateRepo",
"target": "isPrivateRepo 出错"
},
{
"type": "CallExpression",
"name": "log",
"source": "Error in fetchReleaseVersions",
"target": "fetchReleaseVersions 出错"
},
{
"type": "CallExpression",
"name": "log",
"source": "error in grabReleaseFileFromRepository",
"target": "grabReleaseFileFromRepository 出错"
},
{
"type": "CallExpression",
"name": "log",
"source": "error in grabCommmunityPluginList",
"target": "grabCommmunityPluginList 出错"
},
{
"type": "CallExpression",
"name": "log",
"source": "error in grabLastCommitInfoForAFile",
"target": "grabLastCommitInfoForAFile 出错"
},
{
"type": "CallExpression",
"name": "log",
"source": "GitHub request failed:",
"target": "GitHub 请求失败:"
},
{
"type": "CallExpression",
"name": "log",
"source": "BRAT: addPlugin",
"target": "BRAT: addPlugin"
},
{
"type": "CallExpression",
"name": "log",
"source": "BRAT: rFiles.manifest",
"target": "BRAT: rFiles.manifest"
},
{
"type": "CallExpression",
"name": "log",
"source": "BRAT - Local Manifest Load",
"target": "BRAT - 本地清单加载"
},
{
"type": "CallExpression",
"name": "log",
"source": "reload plugin",
"target": "重新加载插件"
},
{
"type": "CallExpression",
"name": "log",
"source": "BRAT: No internet detected.",
"target": "BRAT未检测到网络。"
},
{
"type": "CallExpression",
"name": "log",
"source": "BRAT: lastUpdateOnline",
"target": "BRAT: lastUpdateOnline"
},
{
"type": "CallExpression",
"name": "setButtonText",
"source": "Add Plugin",
"target": "添加插件"
},
{
"type": "CallExpression",
"name": "setButtonText",
"source": "Never mind",
"target": "算了"
},
{
"type": "CallExpression",
"name": "setButtonText",
"source": "Installing …",
"target": "正在安装…"
},
{
"type": "CallExpression",
"name": "setButtonText",
"source": "Add beta plugin",
"target": "添加测试版插件"
},
{
"type": "CallExpression",
"name": "setDesc",
"source": "Select a secret as token for this repository (optional)",
"target": "选择一个密钥作为此仓库的令牌(可选)"
},
{
"type": "CallExpression",
"name": "setDesc",
"source": "If enabled beta plugins will be automatically enabled after installtion by default. Note: you can toggle this on and off for each plugin in the \"Add Plugin\" form.",
"target": "启用后测试版插件在安装后默认会自动启用。注意你可以在“Add Plugin”表单中为每个插件切换开关。"
},
{
"type": "CallExpression",
"name": "setDesc",
"source": "If enabled all beta plugins will be checked for updates each time Obsidian starts. Note: this does not update frozen version plugins.",
"target": "启用后,每次 Obsidian 启动都会检查所有测试版插件的更新。注意:这不会更新冻结版本的插件。"
},
{
"type": "CallExpression",
"name": "setDesc",
"source": "If enabled the latest version will be selected by default when adding a new plugin.",
"target": "启用后,添加新插件时默认选择最新版本。"
},
{
"type": "CallExpression",
"name": "setDesc",
"source": "If enabled, plugins with higher app versions will be allowed to be installed. Also it allows desktop-only plugins to be installed on mobile devices.",
"target": "启用后,将允许安装需要更高应用版本的插件。同时也允许在移动设备上安装仅限桌面的插件。"
},
{
"type": "CallExpression",
"name": "setDesc",
"source": "BRAT will provide popup notifications for its various activities. Turn this off means no notifications from BRAT.",
"target": "BRAT 会为其各种活动提供弹出通知。关闭此项意味着 BRAT 不会发送任何通知。"
},
{
"type": "CallExpression",
"name": "setDesc",
"source": "Plugin updates will be logged to a file in the log file.",
"target": "插件更新将记录到日志文件中的一个文件里。"
},
{
"type": "CallExpression",
"name": "setDesc",
"source": "Logs will be saved to this file. Don't add .md to the file name.",
"target": "日志将保存到此文件中。不要在文件名中添加 .md。"
},
{
"type": "CallExpression",
"name": "setDesc",
"source": "Get a lot more information in the log.",
"target": "在日志中获取更多 信息。"
},
{
"type": "CallExpression",
"name": "setDesc",
"source": "Atomic Bomb level console logging. Can be used for troubleshooting and development.",
"target": "原子弹级别的控制台日志记录。可用于故障排查和开发。"
},
{
"type": "CallExpression",
"name": "setName",
"source": "GitHub Token",
"target": "GitHub 令牌"
},
{
"type": "CallExpression",
"name": "setName",
"source": "Auto-enable plugins after installation",
"target": "安装后自动启用插件"
},
{
"type": "CallExpression",
"name": "setName",
"source": "Auto-update plugins at startup",
"target": "启动时自动更新插件"
},
{
"type": "CallExpression",
"name": "setName",
"source": "Select latest plugin version by default",
"target": "默认选择最新插件版本"
},
{
"type": "CallExpression",
"name": "setName",
"source": "Allow incompatible plugins",
"target": "允许不兼容插件"
},
{
"type": "CallExpression",
"name": "setName",
"source": "Enable notifications",
"target": "启用通知"
},
{
"type": "CallExpression",
"name": "setName",
"source": "Enable logging",
"target": "启用日志记录"
},
{
"type": "CallExpression",
"name": "setName",
"source": "BRAT log file location",
"target": "BRAT 日志文件位置"
},
{
"type": "CallExpression",
"name": "setName",
"source": "Enable verbose logging",
"target": "启用详细日志记录"
},
{
"type": "CallExpression",
"name": "setName",
"source": "Debugging mode",
"target": "调试模式"
},
{
"type": "CallExpression",
"name": "setName",
"source": "Personal access token",
"target": "个人访问令牌"
},
{
"type": "CallExpression",
"name": "setPlaceholder",
"source": "Repository (example: https://github.com/GitHubUserName/repository-name)",
"target": "仓库示例https://github.com/GitHubUserName/repository-name"
},
{
"type": "CallExpression",
"name": "setPlaceholder",
"source": "Repository (example: https://github.com/GitHubUserName/repository-name",
"target": "仓库示例https://github.com/GitHubUserName/repository-name"
},
{
"type": "CallExpression",
"name": "setPlaceholder",
"source": "Filter plugins",
"target": "筛选插件"
},
{
"type": "CallExpression",
"name": "setPlaceholder",
"source": "Example: BRAT-log",
"target": "示例BRAT-log"
},
{
"type": "CallExpression",
"name": "setText",
"source": "No token provided",
"target": "未提供令牌"
},
{
"type": "CallExpression",
"name": "setText",
"source": "Failed to validate token",
"target": "令牌验证失败"
},
{
"type": "CallExpression",
"name": "setText",
"source": "Github repository for beta plugin:",
"target": "用于测试版插件的 Github 仓库:"
},
{
"type": "CallExpression",
"name": "setText",
"source": "Enter a GitHub repository address to validate it.",
"target": "输入 GitHub 仓库地址以进行验证。"
},
{
"type": "CallExpression",
"name": "setText",
"source": "Repository address is required.",
"target": "需要仓库地址。"
},
{
"type": "CallExpression",
"name": "setText",
"source": "Validating repository address...",
"target": "正在验证仓库地址..."
},
{
"type": "CallExpression",
"name": "setText",
"source": "Error: No releases found in this repository.",
"target": "错误:此仓库中未找到发布版本。"
},
{
"type": "CallExpression",
"name": "setText",
"source": "Repository not found. Check the address or provide a valid token for access to a private repository.",
"target": "未找到仓库。请检查地址,或提供有效令牌以访问私有仓库。"
},
{
"type": "CallExpression",
"name": "setText",
"source": "Access denied. Check your personal access token.",
"target": "访问被拒绝。请检查你的个人访问令牌。"
},
{
"type": "CallExpression",
"name": "setTitle",
"source": "Select a version",
"target": "选择版本"
},
{
"type": "CallExpression",
"name": "setTooltip",
"source": "Check and update plugin",
"target": "检查并更新插件"
},
{
"type": "CallExpression",
"name": "setTooltip",
"source": "Change version and update settings",
"target": "更改版本并更新设置"
},
{
"type": "CallExpression",
"name": "setTooltip",
"source": "Clear personal access token",
"target": "清除个人访问令牌"
},
{
"type": "NewExpression",
"name": "Notice",
"source": "Unable to create new file.",
"target": "无法创建新文件。"
},
{
"type": "ObjectProperty",
"name": "message",
"source": "Invalid token format",
"target": "令牌格式无效"
},
{
"type": "ObjectProperty",
"name": "message",
"source": "No error",
"target": "无错误"
},
{
"type": "ObjectProperty",
"name": "message",
"source": "Token has expired",
"target": "令牌已过期"
},
{
"type": "ObjectProperty",
"name": "name",
"source": "Plugins: Add a beta plugin for testing (with or without version)",
"target": "插件:添加一个用于测试的 Beta 插件(可带版本或不带版本)"
},
{
"type": "ObjectProperty",
"name": "name",
"source": "Plugins: Check for updates to all beta plugins and UPDATE",
"target": "插件:检查所有 Beta 插件的更新并更新"
},
{
"type": "ObjectProperty",
"name": "name",
"source": "Plugins: Only check for updates to beta plugins, but don't Update",
"target": "插件:仅检查 Beta 插件的更新,但不更新"
},
{
"type": "ObjectProperty",
"name": "name",
"source": "Plugins: Choose a single plugin version to update",
"target": "插件:选择单个插件版本进行更新"
},
{
"type": "ObjectProperty",
"name": "name",
"source": "Plugins: Choose a single plugin to reinstall",
"target": "插件:选择单个插件重新安装"
},
{
"type": "ObjectProperty",
"name": "name",
"source": "Plugins: Restart a plugin that is already installed",
"target": "插件:重启已安装的插件"
},
{
"type": "ObjectProperty",
"name": "name",
"source": "Plugins: Disable a plugin - toggle it off",
"target": "插件:禁用一个插件 - 将其关闭"
},
{
"type": "ObjectProperty",
"name": "name",
"source": "Plugins: Enable a plugin - toggle it on",
"target": "插件:启用插件 - 将其打开"
},
{
"type": "ObjectProperty",
"name": "name",
"source": "Plugins: Open the GitHub repository for a plugin",
"target": "插件:打开插件的 GitHub 仓库"
},
{
"type": "ObjectProperty",
"name": "name",
"source": "Plugins: Open Plugin Settings Tab",
"target": "插件:打开插件设置选项卡"
},
{
"type": "ObjectProperty",
"name": "name",
"source": "All Commands list",
"target": "全部命令列表"
},
{
"type": "ObjectProperty",
"name": "text",
"source": "✓ Valid token",
"target": "✓ 有效令牌"
},
{
"type": "ObjectProperty",
"name": "text",
"source": "isDesktopOnly: true",
"target": "isDesktopOnly: true"
},
{
"type": "ObjectProperty",
"name": "text",
"source": "The following is a list of beta plugins added via the command \"Add a beta plugin for testing\". You can chose to add the latest version or a frozen version. A frozen version is a specific release of a plugin based on its release tag.",
"target": "以下是通过“添加用于测试的测试版插件”命令添加的测试版插件列表。您可以选择添加最新版本或冻结版本。冻结版本是基于其发布标签的特定插件版本。"
},
{
"type": "ObjectProperty",
"name": "text",
"source": "Note: ",
"target": "注意:"
},
{
"type": "ObjectProperty",
"name": "text",
"source": "your GitHub account settings",
"target": "您的 GitHub 账号设置"
},
{
"type": "ObjectProperty",
"name": "title",
"source": "Token name configured but secret is missing. Add the secret or update the plugin configuration.",
"target": "已配置令牌名称但缺少密钥。请添加密钥或更新插件配置。"
}
],
"regex": []
}
}
}

View File

@@ -1,575 +0,0 @@
{
"schemaVersion": 1,
"metadata": {
"plugin": "obsidian42-brat",
"version": "2.0.0",
"title": "BRAT",
"description": "Easily install a beta version of a plugin for testing.",
"language": "zh-cn",
"supportedVersions": "1.0.6",
"author": ""
},
"dict": {
"main.js": {
"ast": [],
"regex": [
{
"source": "name:\"Plugins: Open Plugin Settings Tab\"",
"target": "name:\"插件:打开插件设置选项卡\""
},
{
"source": "name:\"Themes: Update beta themes\"",
"target": "name:\"主题:更新测试版主题\""
},
{
"source": "name:\"All Commands list\"",
"target": "name:\"所有命令列表\""
},
{
"source": "text:\"Never mind\"",
"target": "text:\"没关系\""
},
{
"source": "text:\"Add Plugin\"",
"target": "text:\"添加插件\""
},
{
"source": "text:\"Add Theme\"",
"target": "text:\"添加主题\""
},
{
"source": ".setButtonText(\"Add Beta plugin\")",
"target": ".setButtonText(\"添加测试版插件\")"
},
{
"source": ".setName(\"Auto-enable plugins after installation\")",
"target": ".setName(\"安装后自动启用插件\")"
},
{
"source": ".setName(\"Auto-update plugins at startup\")",
"target": ".setName(\"启动时自动更新插件\")"
},
{
"source": ".setName(\"Auto-update themes at startup\")",
"target": ".setName(\"启动时自动更新主题\")"
},
{
"source": ".setName(\"Enable Notifications\")",
"target": ".setName(\"启用通知\")"
},
{
"source": ".setName(\"Enable Logging\")",
"target": ".setName(\"启用日志记录\")"
},
{
"source": ".setName(\"Enable Verbose Logging\")",
"target": ".setName(\"启用详细日志记录\")"
},
{
"source": ".setName(\"Debugging Mode\")",
"target": ".setName(\"调试模式\")"
},
{
"source": ".setName(\"Personal Access Token\")",
"target": ".setName(\"个人访问令牌\")"
},
{
"source": ".setDesc(\"Get a lot more information in the log.\")",
"target": ".setDesc(\"在日志中获取更多信息。\")"
},
{
"source": ".setPlaceholder(\"Enter your personal access token\")",
"target": ".setPlaceholder(\"输入您的个人访问令牌\")"
},
{
"source": ".setTooltip(\"Delete this beta plugin\")",
"target": ".setTooltip(\"删除此测试版插件\")"
},
{
"source": ".setTooltip(\"Delete this beta theme\")",
"target": ".setTooltip(\"删除此测试版主题\")"
},
{
"source": ".appendText(\"Enable after installing the plugin\")",
"target": ".appendText(\"安装插件后启用\")"
},
{
"source": ".innerText=\"https://tfthacker.com\"",
"target": ".innerText=\"https://tfthacker.com\""
},
{
"source": "text:\"Note: \"",
"target": "text:\"注意:\""
},
{
"source": ".setPlaceholder(\"Example: BRAT-log\")",
"target": ".setPlaceholder(\"示例BRAT日志\")"
},
{
"source": "Notice(\"Failed to read the daily note template\")",
"target": "Notice(\"无法读取每日笔记模板\")"
},
{
"source": "Notice(\"Unable to create new file.\")",
"target": "Notice(\"无法创建新文件。\")"
},
{
"source": ".log(\"error in isPrivateRepo\",e,i)",
"target": ".log(\"私有仓库错误\",e,i)"
},
{
"source": ".log(\"error in grabReleaseFileFromRepository\",URL,o)",
"target": ".log(\"从仓库获取发布文件时出错\",URL,o)"
},
{
"source": ".log(\"grabManifestJsonFromRepository manifestJsonPath\",i)",
"target": ".log(\"从仓库获取manifestJson文件路径\",i)"
},
{
"source": ".log(\"Token validation error:\",g)",
"target": ".log(\"令牌验证错误:\",g)"
},
{
"source": ".log(\"Token valid:\",a)",
"target": ".log(\"令牌有效:\",a)"
},
{
"source": ".log(\"grabManifestJsonFromRepository response\",l)",
"target": ".log(\"从仓库获取清单JSON响应\",l)"
},
{
"source": ".log(`error in grabManifestJsonFromRepository for ${i}`,l)",
"target": ".log(`在从仓库 ${i} 抓取 manifest.json 时出错`,l)"
},
{
"source": ".log(\"error in grabCommmunityPluginList\",n)",
"target": ".log(\"获取社区插件列表时出错\",n)"
},
{
"source": ".log(\"error in grabCommmunityThemesList\",n)",
"target": ".log(\"获取社区主题列表时出错\",n)"
},
{
"source": ".log(\"error in grabCommmunityThemeCssFile\",i)",
"target": ".log(\"获取社区主题CSS文件时出错\",i)"
},
{
"source": ".log(\"error in grabCommmunityThemeManifestFile\",e)",
"target": ".log(\"获取社区主题清单文件时出错\",e)"
},
{
"source": ".log(\"error in grabLastCommitInfoForAFile\",i)",
"target": ".log(\"获取文件最后提交信息时出错\",i)"
},
{
"source": ".log({reallyGetManifestOrNot:a,version:o})",
"target": ".log({reallyGetManifestOrNot:a,version:o})"
},
{
"source": ".log(\"BRAT: addPlugin\",t,n,e,i,o,a,l)",
"target": ".log(\"BRAT添加插件\",t,n,e,i,o,a,l)"
},
{
"source": ".log(`${t} reinstalled`,!0)",
"target": ".log(`${t} 已重新安装`,!0)"
},
{
"source": ".log(\"BRAT - Local Manifest Load\",r.id,JSON.stringify(w,null,2)",
"target": ".log(\"BRAT - 本地清单加载\",r.id,JSON.stringify(w,null,2)"
},
{
"source": ".log(\"reload plugin\",e)",
"target": ".log(\"重新加载插件\",e)"
},
{
"source": ".log(\"BRAT: No internet detected.\")",
"target": ".log(\"BRAT未检测到网络连接。\")"
},
{
"source": ".log(e,!0)",
"target": ".log(e,!0)"
},
{
"source": ".log(\"BRAT: lastUpdateOnline\",a)",
"target": ".log(\"BRAT在线最后更新时间\",a)"
},
{
"source": ".log(`${e.display} plugin disabled`,!1)",
"target": ".log(`${e.display} 插件已禁用`,!1)"
},
{
"source": ".log(`BRAT: ${t}`,...n)",
"target": ".log(`BRAT: ${t}`,...n)"
},
{
"source": ".log(`BRAT: ${t}`)",
"target": ".log(`BRAT: ${t}`)"
},
{
"source": ".log(`loading ${this.APP_NAME}`)",
"target": ".log(`正在加载 ${this.APP_NAME}`)"
},
{
"source": " log(n,e=!1)",
"target": " log(n,e=!1)"
},
{
"source": ".log(`unloading ${this.APP_NAME}`)",
"target": ".log(`正在卸载 ${this.APP_NAME}`)"
},
{
"source": ".error(`Failed to read the daily note template '${e}'`,i)",
"target": ".error(`无法读取每日笔记模板 '${e}'`,i)"
},
{
"source": ".error(`Failed to create file: '${p}'`,T)",
"target": ".error(`创建文件失败: '${p}'`,T)"
},
{
"source": ".error(`Failed to create file: '${g}'`,r)",
"target": ".error(`无法创建文件:'${g}'`,r)"
},
{
"source": ".error(\"BRAT: validateRepository\",t,n,e)",
"target": ".error(\"BRAT验证仓库\",t,n,e)"
},
{
"source": ".error(\"Failed to load settings:\",n)",
"target": ".error(\"无法加载设置:\",n)"
},
{
"source": ".setDesc(\"If you need to access private repositories, enter the personal access token here.\")",
"target": ".setDesc(\"如需访问私有仓库,请在此处输入个人访问令牌。\")"
},
{
"source": ".setPlaceholder(\"Repository (example: https://github.com/GitubUserName/repository-name)\")",
"target": ".setPlaceholder(\"仓库示例https://github.com/GitubUserName/repository-name\")"
},
{
"source": ".setPlaceholder(\"Repository (example: https://github.com/GitubUserName/repository-name\")",
"target": ".setPlaceholder(\"仓库示例https://github.com/GitubUserName/repository-name\")"
},
{
"source": ".setDesc(\n 'If enabled beta plugins will be automatically enabled after installtion by default. Note: you can toggle this on and off for each plugin in the \"Add Plugin\" form.'\n )",
"target": ".setDesc(\n '如果启用默认情况下Beta插件将在安装后自动启用。注意您可以在“添加插件”表单中为每个插件切换此功能。'\n )"
},
{
"source": ".setDesc(\n \"If enabled all beta plugins will be checked for updates each time Obsidian starts. Note: this does not update frozen version plugins.\"\n )",
"target": ".setDesc(\n \"如果启用每次启动Obsidian时都会检查所有测试版插件是否有更新。注意这不会更新已冻结版本的插件。\"\n )"
},
{
"source": ".setDesc(\n \"If enabled all beta themes will be checked for updates each time Obsidian starts.\"\n )",
"target": ".setDesc(\n \"如果启用每次启动Obsidian时都会检查所有测试版主题是否有更新。\"\n )"
},
{
"source": ".setDesc(\n \"BRAT will provide popup notifications for its various activities. Turn this off means no notifications from BRAT.\"\n )",
"target": ".setDesc(\n \"BRAT将为各种活动提供弹出通知。关闭此选项表示BRAT将不会显示任何通知。\"\n )"
},
{
"source": ".setDesc(\n \"Atomic Bomb level console logging. Can be used for troubleshoting and development.\"\n )",
"target": ".setDesc(\n \"原子弹级控制台日志。可用于故障排除和开发。\"\n )"
},
{
"source": ".setPlaceholder(\n \"Repository (example: https://github.com/GitubUserName/repository-name\"\n )",
"target": ".setPlaceholder(\n \"仓库(例如https://github.com/GitubUserName/repository-name)\"\n )"
},
{
"source": ".setPlaceholder(\n \"Repository (example: https://github.com/GitubUserName/repository-name)\"\n )",
"target": ".setPlaceholder(\n \"仓库(例如https://github.com/GitubUserName/repository-name)\"\n )"
},
{
"source": ".innerText = \"Learn more about my work at:\"",
"target": ".innerText = \"了解我的工作请访问:\""
},
{
"source": "text: \"Add Plugin\"",
"target": "text: \"添加插件\""
},
{
"source": "text: \"Add Theme\"",
"target": "text: \"添加主题\""
},
{
"source": "text: \"Never mind\"",
"target": "text: \"取消\""
},
{
"source": "text: \"This does not delete the plugin, this should be done from the Community Plugins tab in Settings.\"",
"target": "text: \"这不会删除插件,您应该从“设置”中的“社区插件”选项卡中删除它。\""
},
{
"source": "name: \"Plugins: Add a beta plugin for testing\"",
"target": "name: \"插件: 添加一个测试版插件进行测试\""
},
{
"source": "name: \"Plugins: Add a beta plugin with frozen version based on a release tag\"",
"target": "name: \"插件: 根据发布标签添加一个版本冻结的测试版插件\""
},
{
"source": "name: \"Plugins: Check for updates to all beta plugins and UPDATE\"",
"target": "name: \"插件: 检查所有测试版插件的更新并进行更新\""
},
{
"source": "name: \"Plugins: Only check for updates to beta plugins, but don't Update\"",
"target": "name: \"插件: 仅检查测试版插件的更新,但不进行更新\""
},
{
"source": "name: \"Plugins: Choose a single plugin version to update\"",
"target": "name: \"插件: 选择一个插件版本进行更新\""
},
{
"source": "name: \"Plugins: Choose a single plugin to reinstall\"",
"target": "name: \"插件: 选择一个插件进行重新安装\""
},
{
"source": "name: \"Plugins: Restart a plugin that is already installed\"",
"target": "name: \"插件: 重启已安装的插件\""
},
{
"source": "name: \"Plugins: Disable a plugin - toggle it off\"",
"target": "name: \"插件: 禁用插件 - 关闭它\""
},
{
"source": "name: \"Plugins: Enable a plugin - toggle it on\"",
"target": "name: \"插件: 启用插件 - 开启它\""
},
{
"source": "name: \"Plugins: Open the GitHub repository for a plugin\"",
"target": "name: \"插件: 打开插件的GitHub仓库\""
},
{
"source": "name: \"Themes: Open the GitHub repository for a theme (appearance)\"",
"target": "name: \"主题: 打开主题的GitHub仓库外观\""
},
{
"source": "name: \"Plugins: Open Plugin Settings Tab\"",
"target": "name: \"插件: 打开插件设置选项卡\""
},
{
"source": "name: \"Themes: Grab a beta theme for testing from a Github repository\"",
"target": "name: \"主题: 从GitHub仓库获取测试版主题进行测试\""
},
{
"source": "name: \"Themes: Update beta themes\"",
"target": "name: \"主题: 更新测试版主题\""
},
{
"source": "name: \"All Commands list\"",
"target": "name: \"所有命令列表\""
},
{
"source": ".createEl(\"h4\", { text: \"Github repository for beta theme:\" })",
"target": ".createEl(\"h4\", { text: \"Github仓库中的beta主题\" })"
},
{
"source": ".createEl(\"h2\", { text: \"Beta Plugin List\" })",
"target": ".createEl(\"h2\", { text: \"Beta插件列表\" })"
},
{
"source": ".createEl(\"div\", {\n text: `The following is a list of beta plugins added via the command palette \"Add a beta plugin for testing\" or \"Add a beta plugin with frozen version for testing\". A frozen version is a specific release of a plugin based on its releease tag. `\n })",
"target": ".createEl(\"div\", {\n text: `以下是通过命令面板\"添加测试版插件\"或\"添加带冻结版本的测试版插件\"添加的测试版插件列表。冻结版本是基于插件的发布标签而定的特定版本。`\n })"
},
{
"source": ".createEl(\"div\", {\n text: `Click the x button next to a plugin to remove it from the list.`\n })",
"target": ".createEl(\"div\", {\n text: `点击插件旁边的 x 按钮,以将其从列表中移除。`\n })"
},
{
"source": ".createEl(\"b\", { text: \"Note: \" })",
"target": ".createEl(\"b\", { text: \"注释: \" })"
},
{
"source": ".createEl(\"h2\", { text: \"Beta Themes List\" })",
"target": ".createEl(\"h2\", { text: \"Beta主题列表\" })"
},
{
"source": ".createEl(\"h2\", { text: \"Monitoring\" })",
"target": ".createEl(\"h2\", { text: \"检查\" })"
},
{
"source": ".createEl(\"h4\", { text: \"Github repository for beta plugin:\" })",
"target": ".createEl(\"h4\", { text: \"测试版插件的Github仓库\" })"
},
{
"source": ".Notice(\"Failed to read the daily note template\")",
"target": ".Notice(\"无法读取每日笔记模板\")"
},
{
"source": ".Notice(\"Unable to create new file.\")",
"target": ".Notice(\"无法创建新文件\")"
},
{
"source": "\"There is no theme.css or theme-beta.css file in the root path of this repository, so there is no theme to install.\"",
"target": "\"此仓库的根路径中没有theme.css或theme-beta.css文件因此没有可安装的主题。\""
},
{
"source": "\"There is no manifest.json file in the root path of this repository, so theme cannot be installed.\"",
"target": "\"此仓库的根路径中没有manifest.json文件因此无法安装主题。\""
},
{
"source": "${manifestInfo.name} theme installed from ${cssGithubRepository}. ",
"target": "从 ${cssGithubRepository} 安装了 ${manifestInfo.name} 主题。 "
},
{
"source": "${manifestInfo.name} theme updated from ${cssGithubRepository}.",
"target": "从 ${cssGithubRepository} 更新了 ${manifestInfo.name} 主题。"
},
{
"source": "console.info(\"No custom daily note settings found!\", err);",
"target": "console.info(\"未找到自定义每日笔记设置!\", err);"
},
{
"source": "console.info(\"No custom weekly note settings found!\", err);",
"target": "console.info(\"未找到自定义每周笔记设置!\", err);"
},
{
"source": "console.info(\"No custom monthly note settings found!\", err);",
"target": "console.info(\"未找到自定义每月笔记设置!\", err);"
},
{
"source": "console.info(\"No custom quarterly note settings found!\", err);",
"target": "console.info(\"未找到自定义季度笔记设置!\", err);"
},
{
"source": "console.info(\"No custom yearly note settings found!\", err);",
"target": "console.info(\"未找到自定义年度笔记设置!\", err);"
},
{
"source": "console.error(`Failed to read the daily note template '${templatePath}'`, err);",
"target": "console.error(`无法读取每日笔记模板 '${templatePath}'`, err);"
},
{
"source": "console.error(`Failed to create file: '${normalizedPath}'`, err);",
"target": "console.error(`创建文件失败:'${normalizedPath}'`, err);"
},
{
"source": "Checking for beta theme updates STARTED",
"target": "开始检查测试版主题更新"
},
{
"source": "Checking for beta theme updates COMPLETED",
"target": "检查测试版主题更新完成"
},
{
"source": "Removed ${cssGithubRepository} from BRAT themes list and will no longer be updated. However, the theme files still exist in the vault. To remove them, go into Settings > Appearance and remove the theme.",
"target": "已从BRAT主题列表中移除${cssGithubRepository},并将不再进行更新。但是,主题文件仍存在于保险库中。要删除它们,请转到“设置”>“外观”并删除该主题。"
},
{
"source": "This theme is already in the list for beta testing",
"target": "此主题已在测试版列表中"
},
{
"source": "This does not seem to be an obsidian plugin, as there is no manifest.json file.",
"target": "这似乎不是一个Obsidian插件因为没有找到manifest.json文件。"
},
{
"source": "The plugin id attribute for the release is missing from the manifest file",
"target": "发布信息的manifest文件中缺少id属性"
},
{
"source": "The version attribute for the release is missing from the manifest file",
"target": "发布信息的manifest文件中缺少version属性"
},
{
"source": "This plugin is already in the list for beta testing",
"target": "此插件已在测试版列表中"
},
{
"source": "A manifest.json or manifest-beta.json file does not exist in the root directory of the repository. This plugin cannot be installed.",
"target": "仓库的根目录中不存在manifest.json或manifest-beta.json文件。无法安装此插件。"
},
{
"source": "The manifest${usingBetaManifest ? \"-beta\" : \"\"}.json file in the root directory of the repository does not have a version number in the file. This plugin cannot be installed.",
"target": "仓库根目录中的manifest${usingBetaManifest ? \"-beta\" : \"\"}.json文件中没有版本号。无法安装此插件。"
},
{
"source": "The manifest${usingBetaManifest ? \"-beta\" : \"\"}.json for this plugin indicates that the Obsidian version of the app needs to be ${primaryManifest.minAppVersion}, but this installation of Obsidian is ${import_obsidian7.apiVersion}.",
"target": "此插件的manifest${usingBetaManifest ? \"-beta\" : \"\"}.json 文件表明Obsidian应用程序的版本需要为 ${primaryManifest.minAppVersion}, 但当前安装的Obsidian版本为 ${import_obsidian7.apiVersion}。"
},
{
"source": "You will need to update your Obsidian to use this plugin or contact the plugin developer for more information.",
"target": "您需要更新Obsidian以使用此插件或联系插件开发者以获取更多信息。"
},
{
"source": "The release is not complete and cannot be download. main.js is missing from the Release",
"target": "此版本不完整无法下载。发布版中缺少main.js文件。"
},
{
"source": "Plugin has been reinstalled and reloaded.",
"target": "插件已重新安装并重新加载。"
},
{
"source": "The plugin has been registered with BRAT.",
"target": "插件已向BRAT注册。"
},
{
"source": "The version of ${repositoryPath} is frozen, not updating.",
"target": "${repositoryPath}的版本已冻结,不会更新。"
},
{
"source": "There is an update available for ${primaryManifest.id} from version ${localManifestJson.version} to ${primaryManifest.version}. ",
"target": "${primaryManifest.id} 有可用更新,从版本 ${localManifestJson.version} 更新到 ${primaryManifest.version}. "
},
{
"source": "[Release Info]",
"target": "[发布信息]"
},
{
"source": "No update available for ${repositoryPath}",
"target": "没有 ${repositoryPath} 的可用更新"
},
{
"source": "Update of plugin failed.",
"target": "插件更新失败。"
},
{
"source": "Checking for plugin updates STARTED",
"target": "开始检查插件更新..."
},
{
"source": "Checking for plugin updates COMPLETED",
"target": "检查插件更新完成。"
},
{
"source": "Removed ${repositoryPath} from BRAT plugin list",
"target": "已从BRAT插件列表中移除 ${repositoryPath}"
},
{
"source": "---- Core Plugin Settings ----",
"target": "---- 核心插件设置 ----"
},
{
"source": "---- Plugin Settings ----",
"target": "---- 插件设置 ----"
},
{
"source": "Could not locate the repository from the URL.",
"target": "无法从URL定位仓库。"
},
{
"source": "Checking for updates for ${results.info}",
"target": "正在检查 ${results.info} 的更新..."
},
{
"source": "Reinstalling ${results.info}",
"target": "正在重新安装 ${results.info}"
},
{
"source": "Plugin reloading .....",
"target": "插件重新加载中....."
},
{
"source": "${results.display} plugin disabled",
"target": "${results.display} 插件已禁用"
},
{
"source": "${results.display} plugin enabled",
"target": "${results.display} 插件已开启"
},
{
"source": "If you need to access private repositories, enter the personal access token here.",
"target": "如果您需要访问私有存储库,请在此处输入个人访问令牌。"
}
]
}
}
}

File diff suppressed because one or more lines are too long

View File

@@ -4,11 +4,11 @@
"type": "split",
"children": [
{
"id": "4455a6750650191e",
"id": "391c4227c0893954",
"type": "tabs",
"children": [
{
"id": "f3af307553b03e79",
"id": "da1a45c952bbf8bd",
"type": "leaf",
"state": {
"type": "markdown",
@@ -149,7 +149,7 @@
{
"id": "5f3133c4b756d282",
"type": "tabs",
"dimension": 42.9637526652452,
"dimension": 38.47376788553259,
"children": [
{
"id": "95f542e77279c08b",
@@ -223,7 +223,7 @@
{
"id": "bf1e7d1a52b4651c",
"type": "tabs",
"dimension": 57.0362473347548,
"dimension": 61.526232114467405,
"children": [
{
"id": "07d3867b48c266c6",
@@ -257,20 +257,24 @@
"pdf-plus:PDF++: 切换自动对焦": false,
"pdf-plus:PDF++: 切换自动复制": false,
"daily-notes:打开/创建今天的日记": false,
"homepage:打开主页": false,
"obsidian42-brat:BRAT": false,
"i18n:common.i18n": false,
"obsidian-git:打开Git源代码管理": false,
"homepage:打开主页": false,
"obsidian-livesync:显示自定义同步": false
}
},
"active": "f3af307553b03e79",
"active": "da1a45c952bbf8bd",
"lastOpenFiles": [
"OnGoing/Navidrome TOML配置文件写法.md",
"Archive/Collection/Markdown语法.md",
"Meta/笔记元数据管理规范.md",
"OnGoing/openclash配置.md",
"Meta/🏡HOME.md",
"Bases/元数据列表.base",
"Diary/2026/04/2026-04-19 周日.md",
"未命名.md",
"OnGoing/2026/04/19.md",
"Meta/🏡HOME.md",
"Diary/2026/04/2026-04-19 周日.md",
"Template/Diary.md",
"Diary/2026/04/2026-04-18 周六.md",
"Diary/2026/04/2026-04-16 周四.md",
@@ -284,17 +288,12 @@
"Template/AutoAdd.md",
"OnGoing/2026/04",
"OnGoing/2026",
"Bases/元数据列表.base",
"Archive/Collection/连~都忘记了的小知识.md",
"Archive/配置备忘/Typecho插件Aplayer使用教程.md",
"Archive/Collection/KMP算法.md",
"Archive/Collection/linux命令.md",
"Archive/Collection/Markdown语法.md",
"Archive/Collection/PID控制算法.md",
"Archive/Collection/YAML用法.md",
"OnGoing/openclash配置.md",
"OnGoing/navidrome.md",
"Archive/test.md",
"OnGoing",
"Meta",
"未命名.canvas",

View File

@@ -0,0 +1,172 @@
---
aliases:
tags:
- 飞牛
- 音乐
- navidrome
- toml
type:
- Task
status:
- 🌱 Seedling
star: false
date:
---
# 注意事项
Navidrome的配置文件类型为toml文件也可使用docker compose添加环境变量实现配置变更但是toml文件与docker compose配置写法并不相同toml有自己的语法和规则
## TOML格式
- 配置项名称必须是大小写格式全大写的docekr环境变量不行
- 非布尔类型配置项必须使用引号包裹
- `#`不能进行行内注释,只能是单行注释
## 飞牛软件商店Navidrome的toml配置文件
**启用了转码、分享和模糊搜索功能,默认语言设置为简中,默认主题更改为白色**
```toml
# For all available configuration options see:
# https://www.navidrome.org/docs/usage/configuration-options/#available-options
# For security considerations see:
# https://www.navidrome.org/docs/usage/security/
# 必须使用toml格式配置有大小写非true/false配置必须加""
# 默认简中
DefaultLanguage = "zh-Hans"
#启用分享
EnableSharing = true
# Folder where your music library is stored. Can be read-only
MusicFolder = "/vol1/1000/fileserver/public/music/matched"
# Folder to store application data (DB, cache...)
DataFolder= "/var/apps/navidrome/var"
# Configure periodic scans using "cron" syntax. To disable it altogether, set it to "0"
# ScanSchedule = "@every 1m"
# Log level. Useful for troubleshooting. Possible values: error, warn, info, debug, trace
# LogLevel = "info"
# Whether or not sensitive information (like tokens and passwords) should be redacted (hidden) in the logs
# EnableLogRedacting = true
# IP address the server will bind to
# Address = 0.0.0.0
# Enables transcoding configuration in the UI
EnableTranscodingConfig = true
# 配置ffmpeg路径
FFmpegPath = "/usr/bin/ffmpeg"
# Size of transcoding cache. Set to "0" to disable cache
# TranscodingCacheSize = "100MB"
# Size of image (art work) cache. Set to "0" to disable cache
# ImageCacheSize = "100MB"
# Enable/disable .m3u playlist auto-import
# AutoImportPlaylists = true
# Where to search for and import playlists from. Can be a list of folders/globs (separated by : ). Paths are relative to MusicFolder
# PlaylistsPath = ".:**/**" # (meaning MusicFolder and all its subfolders)"
# Base URL (only the path part) to configure Navidrome behind a proxy (ex: /music)
# BaseUrl = ""
# Change background image used in the Login page
# UILoginBackgroundUrl = "random music image from Unsplash.com"
# Add a welcome message to the login screen
# UIWelcomeMessage = ""
# Send basic info to your own Google Analytics account. Must be in the format UA-XXXXXXXX
# GATrackingID = ""
# Sets the default theme used by the UI when logging in from a new browser. This value must match one of the options in the UI
DefaultTheme = "Light"
# Controls whether the player in the UI will animate the album cover (rotation)
# EnableCoverAnimation = true
# List of ignored articles when sorting/indexing artists
# IgnoredArticles = "The El La Los Las Le Les Os As O A Der Die Das"
# Match query strings anywhere in searchable fields, not only in word boundaries. Useful for languages where words are not space separated
SearchFullString = true
# Uses music files' modification time when sorting by "Recently Added". Otherwise use import time
# RecentlyAddedByModTime = false
# Configure the order to look for cover art images. Use special embedded value to get embedded images from the audio files
# CoverArtPriority = "embedded, cover.*, folder.*, front.*"
# Set JPEG quality percentage for resized cover art images
# CoverJpegQuality = 75
# Enable the option in the UI to download music/albums/artists/playlists from the server
# EnableDownloads = true
# How long Navidrome will wait before closing web ui idle sessions
SessionTimeout = "72h"
# How many login requests can be processed from a single IP during the AuthWindowLength. Set to 0 to disable the limit rater
# AuthRequestLimit = 5
# Window Length for the authentication rate limit
# AuthWindowLength = "20s"
# Select metadata extractor implementation. Options: taglib or ffmpeg
# Scanner.Extractor = "taglib"
# List of separators to split genre tags
# Scanner.GenreSeparators = ";/,"
# Set this to false to completely disable Last.fm integration
# LastFM.Enabled = true
# Last.fm ApiKey
# LastFM.ApiKey = "Navidrome project's shared ApiKey"
# Last.fm Shared Secret
# LastFM.Secret = "Navidrome project's shared Secret"
# Two letter-code for language to be used to retrieve biographies from Last.fm
# LastFM.Language = "en"
# Spotify Client ID. Required if you want Artist images
# Spotify.ID = ""
# Spotify Client Secret. Required if you want Artist images
# Spotify.Secret = ""
# Set this to false to completely disable ListenBrainz integration
# ListenBrainz.Enabled = true
# Use Gravatar images as the user profile image. Needs the user's email to be filled
# EnableGravatar = false
# Set this to false to completely disable ALL external integrations
# EnableExternalServices = true
# Enable toggling "Heart"/"Loved" for songs/albums/artists in the UI (maps to "Star"/"Starred" in Subsonic Clients)
# EnableFavourites = true
# Enable 5-star ratings in the UI
# EnableStarRating = true
# Enable regular users to edit their details and change their password
# EnableUserEditing = true
# Passphrase used to encrypt passwords in the DB.
# For details see: https://www.navidrome.org/docs/usage/security/#encrypted-passwords)
# PasswordEncryptionKey = "-"
# HTTP header containing user name from authenticated proxy
# ReverseProxyUserHeader = "Remote-User"
# Comma separated list of IP CIDRs which are allowed to use reverse proxy authentication, empty means "deny all"
# ReverseProxyWhitelist = ""
```

View File

@@ -1,16 +0,0 @@
---
aliases:
tags:
- 飞牛
type:
- Task
status:
- 🌱 Seedling
star: false
date:
---
# 启用用户界面中的转码配置
ND_ENABLETRANSCODINGCONFIG = true
# 配置ffmpeg路径
FFmpegPath = "/usr/bin/ffmpeg"

View File

@@ -1,5 +1,7 @@
---
tags:
- openclash
- 科学上网
aliases:
type:
- Task