// ==UserScript==
// @name 汉化huggingface 菜单汉化
// @description 汉化 huggingface界面的部分菜单及内容
// @namespace Violentmonkey Scripts
// @match https://huggingface.co/
// @match https://huggingface.co/*
// @grant none
// @author sec
// @version 1.3
// ==/UserScript==
(function() {
'use strict';
const i18n = new Map([
['Settings', '设置'],
['Get', '获取'],
['Organizations','组织'],
['Create New', '新建'],
['Resources', '资源'],
['Hub guide', '中枢指南'],
['Transformers doc', 'Transformers文档'],
['Forum', '论坛'],
['Tasks', '任务'],
['Course', '课程'],
['Light theme', '光明主题'],
['All', '全部'],
['Models', '模型'],
['Datasets', '数据集'],
['Spaces', '空间'],
['Community', '社区'],
['Likes', '喜欢'],
['Updated', '更新于'],
['minutes ago', '分钟前'],
['No application file', '没有应用文件'],
['Liked a space', '喜欢一个空间'],
['months ago', '个月前'],
['Liked a model', '喜欢一个模型'],
['days ago', '天前'],
['Hugging Face is way more fun with friends and colleagues! ', '与朋友和同事一起加入Hugging Face更快乐!'],
['Join an organization', '加入一个组织'],
['Search models, datasets, users...', '搜索模型、数据集、用户...'],
['Docs', '文档'],
['Solutions', '解决方案'],
['Pricing', '定价'],
['Profile', '概述'],
['Inbox', '收件箱'],
['Dark theme', '黑暗主题'],
['System theme', '系统主题'],
['Trending', '趋势'],
['last 7 days', '最近7天'],
['Privacy', '隐私保护'],
['Team', '团队'],
['Jobs', '工作机会'],
['TOS', '服务条款'],
['Website', '网站'],
['Metrics', '指标'],
['Languages', '语言'],
['Blog', '博客'],
['HF Store', '商店'],
['Classrooms', '教室'],
['Dismiss this message', '不再提醒'],
['about 1 hour ago', '大约1小时前'],
['about 2 hours ago', '大约2小时前'],
['about 3 hours ago', '大约3小时前'],
['about 4 hours ago', '大约4小时前'],
['about 5 hours ago', '大约5小时前'],
['about 6 hours ago', '大约6小时前'],
['about 7 hours ago', '大约7小时前'],
['about 8 hours ago', '大约8小时前'],
['about 9 hours ago', '大约9小时前'],
['about 10 hours ago', '大约10小时前'],
['about 11 hours ago', '大约11小时前'],
['about 12 hours ago', '大约12小时前'],
['about 13 hours ago', '大约13小时前'],
['about 14 hours ago', '大约14小时前'],
['about 15 hours ago', '大约15小时前'],
['about 16 hours ago', '大约16小时前'],
['about 17 hours ago', '大约17小时前'],
['about 18 hours ago', '大约18小时前'],
['about 19 hours ago', '大约19小时前'],
['about 20 hours ago', '大约20小时前'],
['about 21 hours ago', '大约21小时前'],
['about 22 hours ago', '大约22小时前'],
['about 23 hours ago', '大约23小时前'],
['Notifications', '通知'],
['New Model', '新模型'],
['New Dataset', '新数据集'],
['New Space', '新空间'],
['Create organization', '创建组织'],
['Sign Out', '退出登录'],
['Profile', '帐户简介'],
['Account', '帐户'],
['Organizations', '组织'],
['Billing', '计费'],
['Access Tokens', '访问令牌'],
['GPG Keys', 'GPG密钥'],
['Notifications', '通知'],
['Theme', '主题'],
['Profile Settings', '简介设置'],
['Full name', '全名'],
['Avatar', '头像'],
['Homepage', '主页'],
['(optional)', '(可选)'],
['Research interests', '研究兴趣'],
['GitHub username', 'GitHub用户名'],
['Twitter username', '推特账户'],
['Save changes', '保存更改'],
['Username', '用户名'],
['Primary email', '主要电子邮件'],
['We will use this email to communicate with you. This is also the email to use to authenticate on hf.co.', '我们将使用此电子邮件与您沟通。这也是用于在hf.co网站上进行认证的电子邮件。'],
['Password', '密码'],
['Enter new password', '输入新密码'],
['Additional emails', '额外的电子邮件'],
['Link additional emails to your account to join your organizations easily and', '将其他的电子邮件链接到你的账户,以便轻松地加入你的组织和'],
['Delete your account', '删除您的帐户'],
['Delete your HF account permanently, this action is irreversible. 全部 your repositories (models, datasets, & 空间) will be deleted.', '永久删除您的HF帐户,此操作是不可逆转的。您的全部存储库(模型,数据集,和空间)将被删除。'],
['Delete my account', '删除我的账户'],
['You are not a member of any organization.', '你不是任何组织的成员。'],
['Overview', '概述'],
['Payment information', '支付信息'],
['PRO Subscription', '专业版订阅'],
['Using HF paid services', '使用HF付费服务'],
['You need to add a payment method to get started.', '您需要添加一个支付方式才能开始使用。'],
['Update payment information', '更新支付信息'],
['Access tokens programmatically authenticate your identity to the Hugging Face Hub, allowing applications to perform specific actions specified by the scope of permissions (read, write, or admin) granted', '访问令牌以编程方式对您的身份进行认证,允许应用程序执行由授予的权限范围(读、写或管理)指定的具体行动。'],
['Notification', '通知'],
['Participating and mentions', '参与和提及'],
['Email', '电子邮件'],
['Web', '网页'],
['New activity on watched orgs/users', '被关注的组织/用户的新活动'],
['Watch settings ', '观察设置 '],
['Choose on which organizations/users to get notified on new discussions and PRs', '选择哪些组织/用户获得新的讨论和公告的通知'],
['repositories ', '仓库'],
['Other notifications (email only)', '其他的通知(仅电子邮件)'],
['New features and announcements', '新功能和公告'],
['Requests to join your organization', '要求加入你的组织'],
['Most Downloads', '最多下载'],
['Recently Updated', '最近更新'],
['Most 喜欢', '最多喜欢'],
['Libraries', '图书馆'],
['Licenses', '许可证'],
['Fine-Grained', '细致的'],
['Multilinguality', '多语言性'],
['Sizes', '大小'],
['Alphabetical', '按字母顺序排列'],
['Documentations', '文档资料'],
['Expert Acceleration Program', '专家加速计划'],
['Accelerate your ML roadmap', '加快你的ML路线图'],
['Private Hub', '私人枢纽'],
['Build ML collaboratively', '协同建立ML'],
['Inference Endpoints', '推导端点'],
['Deploy models in minutes', '几分钟内部署模型'],
['AutoTrain', '自动训练'],
['Create ML models without code', '无需代码即可创建ML模型'],
['Hardware', '硬件设施'],
['Scale with dedicated hardware', '使用专用硬件进行扩展'],
['None yet', '尚无'],
['Edit profile', '编辑个人资料'],
['a space', '空间'],
['Jan', '1月'],
['Feb', '2月'],
['Mar', '3月'],
['Apr', '4月'],
['May', '5月'],
['Jun', '6月'],
['Jul', '7月'],
['Aug', '8月'],
['Sep', '9月'],
['Oct', '10月'],
['Nov', '11月'],
['Dec', '12月'],
['Activity', '的活动内容'],
['Models', '模型'],
['Datasets', '数据集'],
['Spaces', '空间'],
['Community', '社区'],
['Likes', '喜欢'],
['Organizations', '组织机构'],
['Resources', '资源'],
['Learn', '学习'],
['Updated a model', '更新了一个模型'],
['1 day ago', '1 天前'],
['No recent user activity to display', '没有显示最近的用户活动'],
['Multimodal', '多模式'],
['Multimodal', '多模态'],
['Feature Extraction', '特征提取'],
['Text-to-Image', '文本到图像'],
['Image-to-Text', '图像到文本'],
['Text-to-Video', '文本到视频'],
['Visual Question Answering', '视觉问题解答'],
['Document Question Answering', '文档问题解答'],
['Graph Machine 学习ing', '图形机器学习'],
['Computer Vision', '计算机视觉'],
['Depth Estimation', '深度估计'],
['Image Classification', '图像分类'],
['Object Detection', '物体检测'],
['Image Segmentation', '图像分割'],
['Image-to-Image', '图像到图像'],
['Unconditional Image Generation', '无条件图像生成'],
['Video Classification', '视频分类'],
['Zero-Shot Image Classification', '零镜头图像分类'],
['Natural Language Processing', '自然语言处理'],
['Text Classification', '文本分类'],
['Token Classification', '令牌分类'],
['Table Question Answering', '表格问题解答'],
['Question Answering', '问题解答'],
['Zero-Shot Classification', '零点分类'],
['Translation', '翻译'],
['Summarization', '总结'],
['Conversational', '对话'],
['Text Generation', '文本生成'],
['Text2Text Generation', '文本对文本生成'],
['Fill-Mask', '填充掩码'],
['Sentence Similarity', '句子相似性'],
['Audio', '音频'],
['Text-to-Speech', '文本到语音'],
['Automatic Speech Recognition', '自动语音识别'],
['Audio-to-Audio', '音频到音频'],
['Audio Classification', '音频分类'],
['Voice 的活动内容 Detection', '语音的内容检测'],
['Tabular', '表格'],
['Tabular Classification', '表格式分类'],
['Tabular Regression', '表格式回归'],
['Reinforcement 学习ing', 'Reinforcement 学习'],
['Reinforcement 学习ing', '强化学习'],
['Robotics', '机器人'],
['Search models, datasets, users...', '搜索模型、数据集、用户...'],
['Pricing', '定价'],
['Discover amazing ML apps made by the community!', '发现社区制作的神奇 ML 应用程序!'],
['learn more about 空间.', '了解有关空间的更多信息。'],
['Search Spaces', '搜索空间'],
['空间 of the week', '本周空间'],
['LoRA the Explorer', '探险家 LoRA'],
['IDEFICS Playground', 'IDEFICS 游乐场'],
['Organization Leaderboard', '组织排行榜'],
['The Tokenizer Playground', '代币器游乐场'],
['Candle Yolo', '烛光晚餐'],
['Llama2 With Gradio Chat', '带有 Gradio 聊天功能的 Llama2'],
['chansung', 'Chansung'],
['TCO Calculator', '总拥有成本计算器'],
['mithril-security', 'Mithril-security'],
['running apps, trending first', '运行应用程序,趋势先行'],
['Seamless M4T', '无缝 M4T'],
['Open LLM Leaderboard', '开放式 LLM 排行榜'],
['LoRA the Explorer', '探险家 LoRA'],
['Image To Story', '图片转至故事'],
['sanchit-gandhi', 'sanchit-gandhi'],
['MTEB Leaderboard', 'MTEB 排行榜'],
['音频LDM2 Text2音频 Text2Music Generation', '音频 LDM2 Text2 音频 Text2Music Generation'],
['Username', '用户名'],
['Primary email', '主要电子邮件'],
['We will use this email to communicate with you. This is also the email to use to authenticate on hf.co.', '我们将使用此电子邮件与您联系。这也是在 hf.co 上进行身份验证时使用的电子邮件。'],
['Old password', '旧密码'],
['New Password', '新密码'],
['Enter new password', '输入新密码'],
['Confirm your new password', '确认新密码'],
['Confirm new password', '确认新密码'],
['将其他的电子邮件链接到你的账户,以便轻松地加入你的组织和 identify git commits you make.', '将其他的电子邮件链接到你的账户,以便轻松地加入你的组织和识别你的 git 提交。'],
['Delete your account', '删除账户'],
['Making the community\'s best AI chat models available to everyone.', '让每个人都能使用社区中最好的人工智能聊天模型。'],
['网页search 2.0, now with RAG & sources', '网页搜索 2.0,新增 RAG 和来源'],
['Discuss', '讨论'],
['Current Model', '当前模型'],
['meta-llama/Llama-2-70b-chat-hf', 'meta-llama/Llama-2-70b-chat-hf'],
['Examples', '示例'],
['Write an email from bullet list', '根据子弹列表编写电子邮件'],
['Code a snake game', '编写蛇形游戏代码'],
['Assist in a task', '协助完成任务'],
['Settings', '设置'],
['Feedback', '反馈'],
['Please Sign in with Hugging Face to continue', '请登录 Hugging Face 以继续'],
['Disclaimer: AI is an area of active research with known problems such as biased generation and misinformation. Do not use this application for high-stakes decisions or advice.', '免责声明:人工智能是一个活跃的研究领域,存在一些已知问题,如偏差生成和错误信息。请勿将此应用程序用于高风险决策或建议。'],
['Your conversations will be shared with model authors unless you disable it from your settings.', '除非你在设置中禁用,否则你的对话将与模型作者共享。'],
['Sign in withHugging Face', '用 Hugging Face 登录'],
['Delete your HF account permanently, this action is irreversible. All your repositories (models, datasets, & Spaces) will be deleted.', '永久删除您的 HF 账户,此操作不可逆。您的所有资源库(模型、数据集和 Spaces)都将被删除。'],
])
replaceText(document.body)
const bodyObserver = new MutationObserver(mutations => {
mutations.forEach(mutation => {
mutation.addedNodes.forEach(addedNode => replaceText(addedNode))
})
})
bodyObserver.observe(document.body, { childList: true, subtree: true })
function replaceText(node) {
nodeForEach(node).forEach(htmlnode => {
i18n.forEach((value, index) => {
// includes可直接使用 === 以提高匹配精度
const textReg = new RegExp(index, 'g')
if (htmlnode instanceof Text && htmlnode.nodeValue.includes(index))
htmlnode.nodeValue = htmlnode.nodeValue.replace(textReg, value)
else if (htmlnode instanceof HTMLInputElement && htmlnode.value.includes(index))
htmlnode.value = htmlnode.value.replace(textReg, value)
})
})
}
function nodeForEach(node) {
const list = []
if (node.childNodes.length === 0) list.push(node)
else {
node.childNodes.forEach(child => {
if (child.childNodes.length === 0) list.push(child)
else list.push(...nodeForEach(child))
})
}
return list
}
})();