diff --git a/web/i18n/zh/a11y/dialog.json b/web/i18n/zh/a11y/dialog.json
new file mode 100644
index 00000000..74c39b86
--- /dev/null
+++ b/web/i18n/zh/a11y/dialog.json
@@ -0,0 +1,5 @@
+{
+ "picker.item.photo": "照片缩略图",
+ "picker.item.video": "视频缩略图",
+ "picker.item.gif": "gif 缩略图"
+}
diff --git a/web/i18n/zh/a11y/donate.json b/web/i18n/zh/a11y/donate.json
new file mode 100644
index 00000000..c9e0a406
--- /dev/null
+++ b/web/i18n/zh/a11y/donate.json
@@ -0,0 +1,4 @@
+{
+ "share.qr.expand": "二维码。点击以展开。",
+ "share.qr.collapse": "展开显示的二维码。点击以收起。"
+}
diff --git a/web/i18n/zh/a11y/general.json b/web/i18n/zh/a11y/general.json
new file mode 100644
index 00000000..00683616
--- /dev/null
+++ b/web/i18n/zh/a11y/general.json
@@ -0,0 +1,3 @@
+{
+ "back": "返回"
+}
diff --git a/web/i18n/zh/a11y/save.json b/web/i18n/zh/a11y/save.json
new file mode 100644
index 00000000..b62b1412
--- /dev/null
+++ b/web/i18n/zh/a11y/save.json
@@ -0,0 +1,12 @@
+{
+ "link_area.turnstile": "链接输入区。正在检查你是不是机器人。",
+ "link_area": "链接输入区",
+ "clear_input": "清除输入",
+ "download": "下载",
+ "download.think": "处理链接...",
+ "download.check": "验证下载...",
+ "download.done": "下载完成",
+ "download.error": "下载错误",
+ "tutorial.shortcut.photos": "添加照片快捷方式",
+ "tutorial.shortcut.files": "快捷指令文件指令"
+}
diff --git a/web/i18n/zh/a11y/tabs.json b/web/i18n/zh/a11y/tabs.json
new file mode 100644
index 00000000..cafde6d7
--- /dev/null
+++ b/web/i18n/zh/a11y/tabs.json
@@ -0,0 +1,3 @@
+{
+ "tab_panel": "标签面板"
+}
diff --git a/web/i18n/zh/about.json b/web/i18n/zh/about.json
new file mode 100644
index 00000000..ba1bbf88
--- /dev/null
+++ b/web/i18n/zh/about.json
@@ -0,0 +1,28 @@
+{
+ "page.general": "什么是cobalt?",
+ "page.community": "社区和支持",
+ "page.privacy": "隐私政策",
+ "page.terms": "条款和道德",
+ "page.credits": "感谢和许可证",
+ "heading.summary": "保存您所爱的最佳方式",
+ "heading.licenses": "许可证",
+ "heading.general": "一般条款",
+ "heading.testers": "beta 测试人员",
+ "heading.motivation": "激励",
+ "heading.abuse": "举报滥用行为",
+ "heading.responsibility": "用户责任",
+ "heading.cloudflare": "网络隐私安全",
+ "heading.plausible": "匿名流量分析",
+ "heading.encryption": "加密",
+ "heading.saving": "保存",
+ "heading.local": "设备端处理",
+ "heading.community": "开放社区",
+ "support.discord": "与社区和开发人员讨论 cobalt 或寻求帮助",
+ "support.twitter": "在您的 twitter 时间轴上关注 cobalt 的更新和发展动态",
+ "support.telegram": "通过 telegram 频道了解最新的 cobalt 更新信息",
+ "support.description.issue": "如果您想报告错误或其他经常出现的问题,请在 github 上报告。",
+ "support.description.best-effort": "所有支持都是尽最大努力提供的,但不保证一定能提供,回复可能需要一些时间。",
+ "support.github": "查看 cobalt 的源代码,修改或报告问题",
+ "support.description.help": "将Discord用于任何其他问题。在#cobalt-support中正确描述问题,否则没有人能为您提供帮助。",
+ "support.bluesky": "在您的 bluesky feed 上关注 cobalt 的更新和发展"
+}
diff --git a/web/i18n/zh/about/credits.md b/web/i18n/zh/about/credits.md
new file mode 100644
index 00000000..2f67e132
--- /dev/null
+++ b/web/i18n/zh/about/credits.md
@@ -0,0 +1,89 @@
+
+
+
+
+
+cobalt is made with love and care by [imput](https://imput.net/) ❤️
+
+we're a small team of two guys, but we work really hard to make great software
+that benefits everyone. if you like our work, please consider supporting it on
+the [donate page](/donate)!
+
+
+
+
+
+huge shout-out to our testers for testing updates early and making sure they're
+stable. they also helped us ship cobalt 10!
+
+all links are external and lead to their personal websites or social media.
+
+
+
+
+
+a portion of cobalt's processing infrastructure is provided by our long-standing
+partner, [royalehosting.net]({partners.royalehosting})!
+
+
+
+
+
+meowbalt is cobalt's speedy mascot, a very expressive cat who loves fast
+internet.
+
+all amazing art of meowbalt that you see in cobalt was made by
+[GlitchyPSI](https://glitchypsi.xyz/). he's also the original creator of the
+character.
+
+imput holds legal rights to meowbalt's character design, but not specific
+artworks that were created by GlitchyPSI.
+
+we love meowbalt, so we have to set a few rules in place to protect him:
+- you cannot use meowbalt's character design in any form that isn't fan art.
+- you cannot use meowbalt's design or artworks commercially.
+- you cannot use meowbalt's design or artworks in your own projects.
+- you cannot use or modify GlitchyPSI's artworks of meowbalt in any form.
+
+if you create fan art of meowbalt, please share it in [our discord
+server](/about/community), we'd love to see it!
+
+
+
+
+
+cobalt api (processing server) code is open source and licensed under
+[AGPL-3.0]({docs.apiLicense}).
+
+cobalt frontend code is [source first](https://sourcefirst.com/) and is licensed
+under [CC-BY-NC-SA 4.0]({docs.webLicense}).
+
+we had to make frontend source first to stop grifters from profiting off our
+work & from creating malicious clones that deceive people and hurt our public
+identity. other than commercial use, it follows same principles as many open
+source licenses.
+
+we rely on many open source libraries, but also create & distribute our own. you
+can see the full list of dependencies on [github]({contacts.github})!
+
diff --git a/web/i18n/zh/about/general.md b/web/i18n/zh/about/general.md
new file mode 100644
index 00000000..a9802ffc
--- /dev/null
+++ b/web/i18n/zh/about/general.md
@@ -0,0 +1,75 @@
+
+
+
+
+
+cobalt helps you save anything from your favorite websites: video, audio, photos
+or gifs. just paste the link and you're ready to rock!
+
+no ads, trackers, paywalls, or other nonsense. just a convenient web app that
+works anywhere, whenever you need it.
+
+
+
+
+
+cobalt was created for public benefit, to protect people from ads and malware
+pushed by alternative downloaders. we believe that the best software is safe,
+open, and accessible. all imput project follow these basic principles.
+
+
+
+
+
+all requests to the backend are anonymous and all information about potential
+file tunnels is encrypted. we have a strict zero log policy and don't store or
+track *anything* about individual people.
+
+if a request requires additional processing, such as remuxing or transcoding,
+cobalt processes media directly on your device. this ensures best efficiency and
+privacy.
+
+if your device doesn't support local processing, then server-based live
+processing is used instead. in this scenario, processed media is streamed
+directly to client, without ever being stored on server's disk.
+
+you can [enable forced tunneling](/settings/privacy#tunnel) to boost privacy
+even further. when enabled, cobalt will tunnel all downloaded files, not just
+those that require it. no one will know where you download something from, even
+your network provider. all they'll see is that you're using a cobalt instance.
+
+
+
diff --git a/web/i18n/zh/about/privacy.md b/web/i18n/zh/about/privacy.md
new file mode 100644
index 00000000..d4cb2d84
--- /dev/null
+++ b/web/i18n/zh/about/privacy.md
@@ -0,0 +1,123 @@
+
+
+
+
+
+cobalt's privacy policy is simple: we don't collect or store anything about you.
+what you do is solely your business, not ours or anyone else's.
+
+these terms are applicable only when using the official cobalt instance. in
+other cases, you may need to contact the instance hoster for accurate info.
+
+
+
+
+
+tools that use on-device processing work offline, locally, and never send any
+processed data anywhere. they are explicitly marked as such whenever applicable.
+
+
+
+
+
+when using saving functionality, cobalt may need to proxy or remux/transcode
+files. if that's the case, then a temporary tunnel is created for this purpose
+and minimal required information about the media is stored for 90 seconds.
+
+on an unmodified & official cobalt instance, **all tunnel data is encrypted with
+a key that only the end user has access to**.
+
+encrypted tunnel data may include:
+- origin service's name.
+- original URLs for media files.
+- internal arguments needed to differentiate between types of processing.
+- minimal file metadata (generated filename, title, author, creation year,
+ copyright info).
+- minimal information about the original request that may be used in case of an
+ URL failure during the tunnelling process.
+
+this data is irreversibly purged from server's RAM after 90 seconds. no one has
+access to cached tunnel data, even instance owners, as long as cobalt's source
+code is not modified.
+
+media data from tunnels is never stored/cached anywhere. everything is processed
+live, even during remuxing and transcoding. cobalt tunnels function like an
+anonymous proxy.
+
+if your device supports local processing, then encrypted tunnel info includes
+way less info, because it's returned to client instead.
+
+see the [related source code on
+github](https://github.com/imputnet/cobalt/tree/main/api/src/stream) to learn
+more about how it works.
+
+
+
+
+
+temporarily stored tunnel data is encrypted using the AES-256 standard.
+decryption keys are only included in the access link and never
+logged/cached/stored anywhere. only the end user has access to the link &
+encryption keys. keys are generated uniquely for each requested tunnel.
+
+
+{#if env.PLAUSIBLE_ENABLED}
+
+
+
+we use [plausible](https://plausible.io/) to get an approximate number of active
+cobalt users, fully anonymously. no identifiable information about you or your
+requests is ever stored. all data is anonymized and aggregated. we self-host and
+manage the [plausible instance](https://{env.PLAUSIBLE_HOST}/) that cobalt uses.
+
+plausible doesn't use cookies and is fully compliant with GDPR, CCPA, and PECR.
+
+if you wish to opt out of anonymous analytics, you can do it in [privacy
+settings](/settings/privacy#analytics). if you opt out, the plausible script
+will not be loaded at all.
+
+[learn more about plausible's dedication to
+privacy](https://plausible.io/privacy-focused-web-analytics).
+
+{/if}
+
+
+
+
+we use cloudflare services for:
+- ddos & abuse protection.
+- bot protection (cloudflare turnstile).
+- hosting & deploying the statically rendered web app (cloudflare workers).
+
+all of these are required to provide the best experience for everyone.
+cloudflare is the most private & reliable provider for all mentioned solutions
+that we know of.
+
+cloudflare is fully compliant with GDPR and HIPAA.
+
+[learn more about cloudflare's dedication to
+privacy](https://www.cloudflare.com/trust-hub/privacy-and-data-protection/).
+
diff --git a/web/i18n/zh/about/terms.md b/web/i18n/zh/about/terms.md
new file mode 100644
index 00000000..39df9098
--- /dev/null
+++ b/web/i18n/zh/about/terms.md
@@ -0,0 +1,65 @@
+
+
+
+
+
+these terms are applicable only when using the official cobalt instance. in
+other cases, you may need to contact the instance hoster for accurate info.
+
+
+
+
+
+saving functionality simplifies downloading content from the internet and we
+take zero liability for what the saved content is used for.
+
+processing servers operate like advanced proxies and don't ever write any
+requested content to disk. everything is handled in RAM and permanently purged
+once the tunnel is completed. we have no downloading logs and cannot identify
+anyone.
+
+you can learn more about how tunnels work in [privacy policy](/about/privacy).
+
+
+
+
+
+you (end user) are responsible for what you do with our tools, how you use and
+distribute resulting content. please be mindful when using content of others and
+always credit original creators. make sure you don't violate any terms or
+licenses.
+
+when used in educational purposes, always cite sources and credit original
+creators.
+
+fair use and credits benefit everyone.
+
+
+
+
+
+we have no way of detecting abusive behavior automatically because cobalt is
+fully anonymous. however, you can report such activities to us via email and
+we'll do our best to comply manually: abuse[at]imput.net
+
+**this email is not intended for user support, you will not get a response if
+your concern is not related to abuse.**
+
+if you're experiencing issues, you can reach out for support via any preferred
+method on [the community page](/about/community).
+
diff --git a/web/i18n/zh/button.json b/web/i18n/zh/button.json
new file mode 100644
index 00000000..217030c3
--- /dev/null
+++ b/web/i18n/zh/button.json
@@ -0,0 +1,7 @@
+{
+ "download": "下载",
+ "save": "保存",
+ "cancel": "取消",
+ "reset": "重置",
+ "gotit": "明白"
+}
diff --git a/web/i18n/zh/dialog.json b/web/i18n/zh/dialog.json
new file mode 100644
index 00000000..b0b56df8
--- /dev/null
+++ b/web/i18n/zh/dialog.json
@@ -0,0 +1,4 @@
+{
+ "picker.title": "选择保存内容",
+ "picker.description.desktop": "单击一个项目即可保存它。也可以通过右键菜单保存图像。"
+}
diff --git a/web/i18n/zh/donate.json b/web/i18n/zh/donate.json
new file mode 100644
index 00000000..2406e5a0
--- /dev/null
+++ b/web/i18n/zh/donate.json
@@ -0,0 +1,6 @@
+{
+ "banner.title": "支持安全\n开放的互联网",
+ "banner.subtitle": "向imput捐款或与朋友分享\ncobalt的快乐",
+ "body.motivation": "cobalt 帮助制作人、教育工作者、视频制作者以及其他许多人做他们喜欢的事情。它是一种充满爱意而非以盈利为目的的不同类型的服务。",
+ "body.no_bullshit": "我们相信互联网并不可怕,这就是为什么钴永远不会有广告或其他类型的恶意内容。这是我们坚定信守的承诺。我们所做的一切都是以隐私、可访问性和易用性为出发点,让每个人都能使用钴。"
+}
diff --git a/web/i18n/zh/error.json b/web/i18n/zh/error.json
new file mode 100644
index 00000000..12ebf683
--- /dev/null
+++ b/web/i18n/zh/error.json
@@ -0,0 +1,6 @@
+{
+ "import.no_data": "文件中没有要加载的内容。您确定这是正确的吗?",
+ "import.invalid": "您的文件没有要导入的有效 Cobalt 设置。您确定这是正确的吗?",
+ "tunnel.probe": "无法验证您是否可以下载该文件。请稍后再试!",
+ "import.unknown": "无法从文件加载数据。它可能已损坏或格式错误。这是我得到的错误:\n\n{{ value }}"
+}
diff --git a/web/i18n/zh/general.json b/web/i18n/zh/general.json
new file mode 100644
index 00000000..ec3fbfeb
--- /dev/null
+++ b/web/i18n/zh/general.json
@@ -0,0 +1,5 @@
+{
+ "cobalt": "cobalt",
+ "meowbalt": "喵巴尔特",
+ "beta": "测试版"
+}
diff --git a/web/i18n/zh/notification.json b/web/i18n/zh/notification.json
new file mode 100644
index 00000000..ec9e1294
--- /dev/null
+++ b/web/i18n/zh/notification.json
@@ -0,0 +1,4 @@
+{
+ "update.title": "可进行更新!",
+ "update.subtext": "按下重新装弹"
+}
diff --git a/web/i18n/zh/receiver.json b/web/i18n/zh/receiver.json
new file mode 100644
index 00000000..642dd0fc
--- /dev/null
+++ b/web/i18n/zh/receiver.json
@@ -0,0 +1,5 @@
+{
+ "title": "拖动或选择文件",
+ "title.drop": "将文件拖放到这儿!",
+ "accept": "支持的格式:{{formats}}。"
+}
diff --git a/web/i18n/zh/remux.json b/web/i18n/zh/remux.json
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/web/i18n/zh/remux.json
@@ -0,0 +1 @@
+{}
diff --git a/web/i18n/zh/save.json b/web/i18n/zh/save.json
new file mode 100644
index 00000000..726957b8
--- /dev/null
+++ b/web/i18n/zh/save.json
@@ -0,0 +1,5 @@
+{
+ "paste.long": "粘贴并下载",
+ "paste": "粘贴",
+ "auto": "自动"
+}
diff --git a/web/i18n/zh/settings.json b/web/i18n/zh/settings.json
new file mode 100644
index 00000000..cfa2e1ec
--- /dev/null
+++ b/web/i18n/zh/settings.json
@@ -0,0 +1,85 @@
+{
+ "processing.enable_custom.description": "如果您选择,cobalt 将使用自定义处理服务器。尽管 cobalt 已采取一些安全措施,但我们对通过社区实例造成的任何损害不承担任何责任,因为我们无法控制它们。\n\n请注意您使用的实例,并确保它们由您信任的人托管。",
+ "page.appearance": "外观",
+ "page.privacy": "隐私",
+ "page.video": "视频",
+ "page.audio": "音频",
+ "page.advanced": "进阶",
+ "page.debug": "调试信息",
+ "page.instances": "实例",
+ "theme": "风格",
+ "theme.auto": "自动",
+ "theme.light": "明亮",
+ "theme.dark": "暗黑",
+ "theme.description": "自动主题根据您设备的显示模式在明暗主题之间切换。",
+ "video.quality": "视频质量",
+ "video.quality.max": "8k+",
+ "video.quality.2160": "4k",
+ "video.quality.1440": "1440p",
+ "video.quality.1080": "1080p",
+ "video.quality.720": "720p",
+ "video.quality.480": "480p",
+ "video.quality.360": "360p",
+ "video.quality.240": "240p",
+ "video.quality.144": "144p",
+ "video.youtube.codec": "YouTube 视频编解码器和容器",
+ "video.twitter.gif": "twitter/x",
+ "video.twitter.gif.title": "将循环视频转换为 GIF",
+ "video.twitter.gif.description": "GIF 转换效率低,转换后的文件可能非常大而且质量低下。",
+ "audio.format": "音频格式",
+ "audio.format.best": "最好",
+ "audio.format.mp3": "mp3",
+ "audio.format.ogg": "ogg",
+ "audio.format.wav": "wav",
+ "audio.format.opus": "opus",
+ "audio.bitrate": "音频比特率",
+ "audio.bitrate.kbps": "kb/s",
+ "audio.youtube.dub": "youtube",
+ "audio.youtube.dub.title": "使用浏览器语言观看配音视频",
+ "audio.youtube.dub.description": "即使 cobalt 没有翻译成您的语言也可以工作。",
+ "audio.tiktok.original": "tiktok",
+ "audio.tiktok.original.title": "下载原声",
+ "audio.tiktok.original.description": "cobalt 将从视频中下载声音,而不会对帖子的作者进行任何更改。",
+ "metadata.filename": "文件名样式",
+ "metadata.filename.classic": "标准",
+ "metadata.filename.basic": "基本",
+ "metadata.filename.pretty": "优化",
+ "metadata.filename.nerdy": "笨拙",
+ "metadata.filename.description": "文件名样式将仅用于由 cobalt 发送的文件,某些服务不支持标准文件名样式。",
+ "metadata.filename.preview.video": "视频标题",
+ "metadata.filename.preview.audio": "音频标题 - 音频作者",
+ "metadata.file": "文件元数据",
+ "metadata.disable.title": "禁用文件元数据",
+ "metadata.disable.description": "标题、艺术家和其他信息将不会添加到文件中。",
+ "saving.title": "保存方法",
+ "saving.ask": "询问",
+ "saving.download": "下载",
+ "saving.share": "分享",
+ "saving.copy": "复制",
+ "accessibility.transparency.title": "降低视觉透明度",
+ "accessibility.transparency.description": "降低表面透明度并禁用模糊效果。",
+ "accessibility.motion.title": "减少动画",
+ "accessibility.motion.description": "尽可能禁用动画和过渡。",
+ "language": "语言",
+ "language.auto.title": "自动选择",
+ "language.auto.description": "如果有翻译,cobalt 将使用您浏览器的默认语言。如果没有,则将使用英语。",
+ "language.preferred.title": "首选语言",
+ "privacy.analytics": "匿名流量分析",
+ "privacy.analytics.title": "不参与分析",
+ "privacy.analytics.description": "需要匿名流量分析来获取活跃 Cobalt 用户的大致数量。不会存储任何有关您的身份信息。所有处理的数据都经过匿名和汇总。\n\n我们使用自托管的 Plausible 实例,该实例不使用 Cookie,并且完全符合 GDPR、CCPA 和 PECR。",
+ "privacy.analytics.learnmore": "了解有关 plausible 隐私保护的更多信息。",
+ "privacy.tunnel": "隧道",
+ "advanced.debug": "调试",
+ "advanced.debug.title": "启用调试功能",
+ "advanced.debug.description": "使您能够访问包含各种可用于调试的信息的页面。",
+ "processing.community": "社区实例",
+ "processing.enable_custom.title": "使用自定义处理服务器",
+ "video.quality.description": "如果没有首选的视频质量,则选择次优质量。",
+ "video.youtube.codec.description": "H264:兼容性最好,比特率一般。最高质量为 1080p。\nAV1:最佳质量、效率和比特率。支持 8k 和 HDR。\nvp9:质量和比特率与 av1 相同,但文件大约大两倍。支持 4k 和 HDR。\n\nav1 和 vp9 的支持范围不如 h264 广泛。",
+ "audio.format.description": "除“最佳”格式外,所有格式都会被转换,这意味着会有一些质量损失。只有在选择“最佳”格式时才会重新编码音频。",
+ "language.preferred.description": "当自动选择被禁用时,将使用此语言。任何未翻译的文本将以英文显示。\n\n对于英语、俄语和捷克语以外的语言,我们使用社区来源的翻译。它们可能不准确或不完整。",
+ "audio.bitrate.description": "比特率仅在将音频转换为有损格式时应用。钴无法提高源音频质量,因此选择超过 128kbps 的比特率可能会增加文件大小,而不会产生可听见的差别。感知质量可能因格式而异。",
+ "saving.description": "从 Cobalt 保存文件或链接的首选方式。如果首选方法不可用或出现问题,Cobalt 将询问您下一步该怎么做。",
+ "privacy.tunnel.description": "Cobalt 将隐藏您的 IP 地址、浏览器信息并绕过本地网络限制。启用后,文件也将具有可读的文件名,否则将是乱码。",
+ "privacy.tunnel.title": "始终通过隧道传输文件"
+}
diff --git a/web/i18n/zh/tabs.json b/web/i18n/zh/tabs.json
new file mode 100644
index 00000000..1319dee4
--- /dev/null
+++ b/web/i18n/zh/tabs.json
@@ -0,0 +1,5 @@
+{
+ "save": "保存",
+ "settings": "设置",
+ "updates": "更新日志"
+}
diff --git a/web/i18n/zh/updates.json b/web/i18n/zh/updates.json
new file mode 100644
index 00000000..1e06cdcd
--- /dev/null
+++ b/web/i18n/zh/updates.json
@@ -0,0 +1,4 @@
+{
+ "button.next": "转到较旧的更新日志({{ value }})",
+ "button.previous": "转到较新的变更日志 ({{ value }})"
+}
diff --git a/web/i18n/zh_Hans/a11y/queue.json b/web/i18n/zh_Hans/a11y/queue.json
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/web/i18n/zh_Hans/a11y/queue.json
@@ -0,0 +1 @@
+{}
diff --git a/web/i18n/zh_Hans/error/api.json b/web/i18n/zh_Hans/error/api.json
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/web/i18n/zh_Hans/error/api.json
@@ -0,0 +1 @@
+{}
diff --git a/web/i18n/zh_Hans/error/queue.json b/web/i18n/zh_Hans/error/queue.json
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/web/i18n/zh_Hans/error/queue.json
@@ -0,0 +1 @@
+{}
diff --git a/web/i18n/zh_Hans/queue.json b/web/i18n/zh_Hans/queue.json
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/web/i18n/zh_Hans/queue.json
@@ -0,0 +1 @@
+{}