Greasy Fork

Greasy Fork is available in English.

Axure分享页面汉化脚本

Axure网页汉化

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Axure分享页面汉化脚本
// @namespace    http://tampermonkey.net/
// @version      1.0.2
// @description  Axure网页汉化
// @author       alone
// @license MIT
// @icon        data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARJSURBVFhHvZdfTFtVHMdrYqJjZi+++GD2gMvUGOKD+mAAmRrjv0xMFqNE3rbJiGEPsIVsZhM33bJFG4Yyi9kiiGlWJxJhgRmCm0i3MWRrKWtLKaG40RZue3vbe9ve238/z7m3veW0p6UxwEk+Ofmd3/fe34fS9oJm9RoaGtrGMMxuv9+/D7F/PeE4bu/y8vKbWq12S3ocudDghng8zqVSKdhIYqLodblce9JjleX1evehZiqZE96oOplMxq1W67vy8La2tjJJknzoEDc2jVCIt6HxD2vsdvtrtMAmkOrs7HxW43Q6P0qgA5lEek8jxRKg+80KR3+ehsO/2mDaHSL6uXlcO/1m+Mn0BXSbPofBWR3EE4mC+f7+/l0ah8NRl8AhCiwXgdqWq1D92Z/w/MlxqD5/F/yCRM1iQlEWTvz1ARweeV3myOjbEJEEahbT19f3qiyALQvRPeRQBXacuQ0NA/MQi8ep2V7zCXU45vrCZWouQ1Ygjg4KIEpx+ET3jyrwpPYO9FqYvNzU0igxXDd5SBHNya1GFrAhARwsxiLDQ+XZm6rA9vMWsPvCRObC1BF1+LFrtcDwbqJPo2QBzIDZqwo83mGGGsMcCGJM7a/wS3AcDcYCkw9GiGsLoQjYHHVSLIbe8XEE3jPk181XnKrAtk4LHDW6if6dpWvofXBSrbM9ep0WsKUF1oYVolB5cUYVeKzrHoy4OCITFsNEXYw8AVFSKFbfvh+EJ76blgXKdPegvHcWPKFoydevrlUBUZJQo3S+mXCrAlu6rLDn6iJERXq2GP9b4OscgXeuuCAiitRsMVQBbF8qE/9yxK9ge88sLAbC1OxayAIzsoCIDtbGF4oQb8KtSGDQyVKzpaAK4JevFFoG54iPYcvYA6LPj88B13GdOCuGQRaYQQJRdLAGAyYP8UVUdckBHPpYZvphbwB8leeA2XkKeOM8cW0h0gIzdeFoFIqx4OWg6uwt4qvY4g0SGfbTy8A89ZWMr6oDhOUA0aeRFYikD/GeIV3z4Qgc6CIfRt0mb16e+8GoCmDYA7+AEIlkM5T7qwI4KKBDZc+g1D3Ds+Tj+Hf0DKDlkah//yVCguuZWJXJv7/BQAjkY7Z5oPbQH6pAzfd3wRPgqVkM72XBV/1tVuK5MxCavk/NYgwGgyKAX2b8E+A9A66bj4/A7mblL6IXvjTCDSdD9HPzeA/emgfm6dOqhO/9CwXzsoBZFgijw3xOnxuHj4+Nwnun/oYfxxaoGRqBizeAeUkLzIta8B/so2YwsoDJYvlQPRTIwEbXer2+RjM8PPxyCDU2myDPJ+vr63fg/00eXXK7HSFBQI3Nw2a3G9HsR7CAplevf8vHspEgLyCzjcezssK2trZWycPT66H29vY3rHb7ZCAYStAuWg9YLhibMpnGmpqaqvFMZTS5yioqKp5paGh4pbGxsWY92YvuWV5evhPN2KqMwkuj+Q9ZLc3BjV9w+wAAAABJRU5ErkJggg==
// @match        *://*.axshare.com/*
// @match        *://127.0.0.1:32767/*
// @grant        GM_addStyle
// @run-at       document-end
// @require http://greasyfork.icu/scripts/475259-elementgetter-alone/code/ElementGetter_Alone.js?version=1250106
// ==/UserScript==

var messages = {
  ".feedback-panel-empty-state__title":"无评论",
  ".feedback-panel-empty-state > div:nth-child(2)":
  "添加评论以反馈,提出疑问或改动建议。",
  ".feedback-item-confirm-delete-popup > .feedback-item-confirm-delete-popup__actions > button[type=button]":
  "取消",
  ".feedback-item-confirm-delete-popup > .feedback-item-confirm-delete-popup__actions > button[type=submit]":
  "删除",
  "#loginForm > div.form-title": "请输入密码",
  "#loginForm > div.userLoginBox > div:nth-child(2) > button": "查看项目",
  "#coreContents > div > div.form-title": "项目正在生成中...",
  "#coreContents > div > div:nth-child(3)": "这可能需要几分钟。",
  "div.feedback-reply-container > div.ax-reply.feedback-thread-reply-container.ax-reply--editable > div > div > p":
  "",
  ".feedback-item-submit-edit > button[type=button]": "取消",
  ".feedback-item-submit-edit > button[type=submit]": "保存",
  ".feedback-panel-header-row__mark-as-read-button": "全部已读",
  "#interfaceControlFrameRight > div.ax-menu.share-button-container > div > button":
  "分享",
  "#interfaceControlFrameRight > div.ax-menu.share-button-container > div.ax-menu__content.ax-menu__content.share-button-dialog > div.toggle-current-page > span":
  "连接到本页面",
  "#interfaceControlFrameRight > div.ax-menu.share-button-container > div.ax-menu__content.ax-menu__content.share-button-dialog > div:nth-child(3) > div.share-url > div":
  "分享链接",
  "#interfaceControlFrameRight > div.ax-menu.share-button-container > div.ax-menu__content.ax-menu__content.share-button-dialog > div:nth-child(4) > div.share-url > div":
  "分享并打开页面和评论",
  ".ax-copy-to-clipboard > button": "复制",
  "#pageNotesEmptyState > div.emptyStateTitle": "本页面没有备注",
  "#pageNotesEmptyState > div.emptyStateContent":
  "在Axure RP中添加的备注会在这里展示",
  "#feedbackHost > div > div.feedback-panel-header > div > div.feedback-panel-header__mode > div > div.ax-menu__content.ax-menu__content.filter-content > div.filter-inner-content > div:nth-child(1) > label > span":
  "仅本页面",
  "#feedbackHost > div > div.feedback-panel-header > div > div.feedback-panel-header__mode > div > div.ax-menu__content.ax-menu__content.filter-content > div.filter-inner-content > div:nth-child(2) > label > span":
  "未读",
  "#feedbackHost > div > div.feedback-panel-header > div > div.feedback-panel-header__mode > div > div.ax-menu__content.ax-menu__content.filter-content > div.filter-inner-content > div:nth-child(3) > label > span":
  "已处理",
  "#feedbackHost > div > div.feedback-panel-header > div > div.feedback-panel-header__mode > div > div.ax-menu__content.ax-menu__content.filter-content > div.ax-feedback-pin-color-picker.filter-colors > div > button:nth-child(1)":
  "全",
  "#phishing-banner-title":"来自Axure的消息"
};
var replace = [
  {
    key: "#interfaceControlFrameRight > div.ax-menu.share-button-container > div.ax-menu__content.ax-menu__content.share-button-dialog > div.share-note",
    search: "Copy the URL in the browser to share the current page and player configuration.",
    replace: "复制 URL 以共享当前页面和播放器设置。",
  },
  {
    key: "#interfaceControlFrameRight > div.ax-menu.share-button-container > div.ax-menu__content.ax-menu__content.share-button-dialog > div.share-note > div > span",
    search: " For a share link without the prototype player ",
    replace: "仅复制当前页面的分享链接",
  },
  {
    key: "#interfaceControlFrameRight > div.ax-menu.share-button-container > div.ax-menu__content.ax-menu__content.share-button-dialog > div.share-note > div > a",
    search: " click here ",
    replace: "点击这里",
  },
  {
    key: "#changePageInstructions",
    search: "Use",
    replace: "使用",
  },
  {
    key: "#changePageInstructions",
    search: "and",
    replace: "和",
  },
  {
    key: "#changePageInstructions",
    search: "keys",
    replace: "按键",
  },
  {
    key: "#changePageInstructions",
    search: "to move between pages",
    replace: "在页面间切换",
  },
  {
    key: "div.feedback-issue-replies-summary > span",
    search: /.+/,
    replace: "查看回复",
  },
  {
    key: ".ax-form-errors__error",
    search: " Please enter text ",
    replace: "请输入内容",
  },
  {
    key: ".feedback-item-confirm-delete-popup > .feedback-item-confirm-delete-popup__question",
    search: " Are you sure? ",
    replace: "确定删除?",
  },
  {
    key: ".feedback-reply-actions > div > .feedback-reply-actions__mark-resolved > button",
    search: "Post and Resolve",
    replace: "回复并处理",
  },
  {
    key: ".feedback-reply-actions > div > .feedback-reply-actions__mark-resolved > button",
    search: " Post and Unresolve ",
    replace: "回复并取消处理",
  },
  {
    key: ".feedback-reply-actions > div > div:nth-child(1) > button",
    search: "Post",
    replace: "回复",
  },
  {
    key: ".feedback-commenting-as",
    search: " Commenting as ",
    replace: "",
  },
  {
    key: "#showHotspotsOption",
    search: "Show Hotspots",
    replace: "显示热点",
  },
  {
    key: "#showNotesOption",
    search: "Show Note Markers",
    replace: "显示笔记",
  },
  {
    key: "#showCommentsOption",
    search: "Show Comments",
    replace: "显示评论",
  },
  {
    key: "#showHotspotsOption",
    search: "Show Hotspots",
    replace: "显示热点",
  },
  {
    key: "#interfaceScaleListContainer > div:nth-child(1)",
    search: "Default Scale",
    replace: "默认比例",
  },
  {
    key: "#interfaceScaleListContainer > div:nth-child(2)",
    search: "Scale to Width",
    replace: "适合宽度",
  },
  {
    key: "#interfaceScaleListContainer > div:nth-child(3)",
    search: "Scale to Fit",
    replace: "适合大小",
  },
  {
    key: "#coreContents > div > div:nth-child(4)",
    search: /If you have any questions, please email.+/,
    replace: "",
  },
  {
    key: "#core > div.loginLinkContents",
    search: " Workspace members can ",
    replace: "项目成员可以",
  },
  {
    key: "#core > div.loginLinkContents",
    search: "sign in to Axure Cloud",
    replace: "登录到 Axure 云",
  },
  {
    key: "#core > div.loginLinkContents",
    search: "to view this project.",
    replace: "查看此项目",
  },
  {
    key: "#pageNotesContent > div > div.widgetNoteLabel",
    search: "Rectangle",
    replace: "矩形",
  },
  {
    key: "#notesOverlay > div > div.notesDialogScroll > div > div.widgetNoteLabel",
    search: "Rectangle",
    replace: "矩形",
  },
  {
    key: ".pageNotesSectionHeader",
    search: "Rectangle",
    replace: "矩形",
  },
  {
    key: "#pageNotesSectionHeader",
    search: "Page Notes",
    replace: "页面注释",
  },
  {
    key: "#widgetNotesSectionHeader",
    search: "Widget Notes",
    replace: "小部件注释",
  },
  {
    key: "#phishing-banner-text",
    search: " strives to provide an easy and secure way to share ideas and prototypes. If you see content that may be deceptive, please ",
    replace: "努力提供一种简单而安全的方式来分享想法和原型。如果您看到可能具有欺骗性的内容,请",
  },
  {
    key: "#phishing-banner-text",
    search: "click here to report it",
    replace: "点击这里进行举报",
  },
  {
    key: "#phishing-banner-footer-tip",
    search: "Why am I seeing this?",
    replace: "为什么我会看见这条消息",
  },
  {
    key: "#phishing-banner-footer-tip > #tooltiptext",
    search: "This message appears when a page contains a link that leaves Axure Cloud.",
    replace: "当页面包含跳转到非Axure的链接时,会出现这条消息。",
  },
  {
    key: "#phishing-banner-footer-tip > #tooltiptext",
    search: "You will only see this the first time you view the project. Setting an access code on the project prevents this message from appearing.",
    replace: "只有第一次查看此项目时会显示,可以给项目设置密码来避免",
  },
  {
    key: "#phishing-banner-footer-button",
    search: "OK",
    replace: "好的",
  },
];


function Work() {
  Object.entries(messages).map(([k, v]) => {
    elmGetter.each(k, document, (reply) => {
      reply.innerText = v;
    });
  });

  replace.forEach((v) => {
    elmGetter.each(v.key, document, (reply) => {
      reply.innerHTML = reply.innerHTML.replace(v.search, v.replace);
    });
  });

  // 评论时间
  elmGetter.each("div.feedback-issue-options > span", document, (reply) => {
    if (!!reply.title) {
      var timeText = reply.title || "";
      var date = new Date(Date.parse(timeText));
      var formattedDate =
          date.getFullYear() +
          "/" +
          (date.getMonth() + 1) +
          "/" +
          date.getDate() +
          " " +
          date.getHours() +
          ":" +
          date.getMinutes() +
          ":" +
          date.getSeconds();
      reply.innerText = formattedDate;
    }
  });

  // 评论时间
  elmGetter.each(".feedback-item-content-date > span", document, (reply) => {
    if (!!reply.title) {
      var timeText = reply.title || "";
      var date = new Date(Date.parse(timeText));
      var formattedDate =
          date.getFullYear() +
          "/" +
          (date.getMonth() + 1) +
          "/" +
          date.getDate() +
          " " +
          date.getHours() +
          ":" +
          date.getMinutes() +
          ":" +
          date.getSeconds();
      reply.innerText = formattedDate;
    }
  });

  // 处理评论时间
  elmGetter.each(
    "#feedbackHost > div > div.feedback-panel-issues.feedback-panel__issues > div > div:nth-child(n) > div.feedback-issue__resolved-mark",
    document,
    (reply) => {
      const message = reply.querySelector("div:nth-child(1)");
      const time = reply.querySelector("div:nth-child(2)");
      if (message) {
        message.innerText = message.innerText.replace(
          /Resolved by (.+)/,
          "已由 $1 处理"
        );
      }
      if (time) {
        var timeText = time.innerText;
        var date = new Date(Date.parse(timeText));
        var formattedDate =
            date.getFullYear() +
            "/" +
            (date.getMonth() + 1) +
            "/" +
            date.getDate();
        time.innerText = formattedDate;
      }
    }
  );

  // 有状态的按钮切换时修改文字
    // 配置 MutationObserver 监听 class 属性的变化
    const config = { attributes: true, attributeFilter: ["class"] };

    // 添加评论按钮
    elmGetter
        .get("#feedbackHost > div > div.feedback-panel-add-comment > button")
        .then((button) => {
        if (
            button.className ==
            "feedback-panel-add-comment-button ax-button ax-button--default ax-button--block ax-button--large"
        ) {
            button.textContent = "添加评论";
        } else {
            button.textContent = "完成";
        }
        // 创建 MutationObserver 实例
        const observer = new MutationObserver((mutationsList) => {
            // 遍历每个发生变化的属性
            for (let mutation of mutationsList) {
                if (
                    mutation.type === "attributes" &&
                    mutation.attributeName === "class"
                ) {
                    // 当 class 属性发生变化时,修改按钮内容
                    if (
                        button.className ==
                        "feedback-panel-add-comment-button ax-button ax-button--default ax-button--block ax-button--large"
                    ) {
                        button.textContent = "添加评论";
                    } else {
                        button.textContent = "完成";
                    }
                }
            }
        });

        // 开始监听按钮的变化
        observer.observe(button, config);
    });

};

function Style() {

  //筛选选项加样式
  elmGetter.each(".color-list > button", document, (reply) => {
    if (!!reply.style) {
      reply.style.width = "16px";
      reply.style.height = "16px";
    }
  });
  //筛选选项加样式
  elmGetter.each(
    "div.ax-reply.feedback-thread-reply-container.ax-reply--editable > div > div > p",
    document,
    (reply) => {
      if (!!reply) {
        reply.dataPlaceholder = "";
      }
    }
  );

  GM_addStyle(`
    #feedbackHostBtn a {
    background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjk0Njg2NTM1MjQ5IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwNDYgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjM1MDgiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjA0LjI5Njg3NSIgaGVpZ2h0PSIyMDAiPjxwYXRoIGQ9Ik02ODguNjA2NDA2IDk5NS40Njc0MmMtNzUuOTgyNzc4IDIzLjc0NTU3OC0xNTQuMzQxMTM4IDMwLjg2NzIwNC0yMzIuNzA0NjE4IDIxLjM2OTk5NkMxNzAuOTU5OTcxIDk4My41OTQ2MzEtMzAuODcyMzIzIDcyNC43NzM5NzMgNC43NDYwNDQgNDQyLjIwNzczNyA0NS4xMTU1NzQgMTU5LjY0MTUwMSAzMDguNjgyMjc2LTM1LjA2OTE2NyA1OTEuMjQ4NTEyIDUuMjk1MjQzYzI4Mi41NjExMTYgMzUuNjE4MzY3IDQ4NC4zOTg1MyAyOTIuMDYzNDQzIDQ1MS4xNTU3NDUgNTc0LjYyOTY4LTExLjg2NzY2OSA4NS40Nzk5ODUtNDUuMTIwNjk0IDE2OC41ODk1MDktOTcuMzU3ODk1IDIzNy40NTA2NjFsLTIzLjc0NTU3OCAxNzguMDg2NzE2YzAgOS40OTIwODgtNC43NTExNjQgMTYuNjIzOTUzLTExLjg3Mjc4OSAyMS4zNjk5OTYtNy4xMjE2MjYgNC43NTExNjQtMTQuMjQzMjUxIDcuMTI2NzQ1LTIxLjM2OTk5NiA3LjEyNjc0NmwtMTk5LjQ1MTU5My0yOC40OTE2MjJ6TTI4NC45NDE4MTggNDUxLjcwNDk0NGMtNDAuMzY0NDExIDAtNzEuMjM2NzM0IDMwLjg2NzIwNC03MS4yMzY3MzUgNzEuMjM2NzM1czMwLjg2NzIwNCA3MS4yMzY3MzQgNzEuMjM2NzM1IDcxLjIzNjczNCA3MS4yMzY3MzQtMzAuODY3MjA0IDcxLjIzNjczNC03MS4yMzY3MzQtMzAuODcyMzIzLTcxLjIzNjczNC03MS4yMzY3MzQtNzEuMjM2NzM1eiBtMjM3LjQ1MDY2MSAwYy00MC4zNjQ0MTEgMC03MS4yMzY3MzQgMzAuODY3MjA0LTcxLjIzNjczNCA3MS4yMzY3MzVzMzAuODY3MjA0IDcxLjIzNjczNCA3MS4yMzY3MzQgNzEuMjM2NzM0IDcxLjIzNjczNC0zMC44NjcyMDQgNzEuMjM2NzM0LTcxLjIzNjczNC0zMC44NzIzMjMtNzEuMjM2NzM0LTcxLjIzNjczNC03MS4yMzY3MzV6IG0yMzcuNDQ1NTQyIDBjLTQwLjM2NDQxMSAwLTcxLjIzMTYxNSAzMC44NjcyMDQtNzEuMjMxNjE1IDcxLjIzNjczNXMzMC44NjcyMDQgNzEuMjM2NzM0IDcxLjIzMTYxNSA3MS4yMzY3MzRjNDAuMzY5NTMxIDAgNzEuMjM2NzM0LTMwLjg2NzIwNCA3MS4yMzY3MzQtNzEuMjM2NzM0cy0zMC44NjcyMDQtNzEuMjM2NzM0LTcxLjIzNjczNC03MS4yMzY3MzV6IiBmaWxsPSIjYmZiZmJmIiBwLWlkPSIzNTA5Ij48L3BhdGg+PC9zdmc+) no-repeat center center / 80% 80%;
}`);

  GM_addStyle(`
      ::-webkit-scrollbar {
        width: 10px;
        height: 8px;
    }
    ::-webkit-scrollbar-thumb {
        background: #E6E6E6;
        border-radius: 0.25em;
        min-height: 30px;
    }
    ::-webkit-scrollbar-track {
        background: transparent;
    }
    ::-webkit-scrollbar-thumb:hover {
        width: 12px;
        background: #ccc; // 设置滚动条滑块鼠标悬停颜色
    }`);

  GM_addStyle(`
  .widgetNoteContainer {
    border-bottom: 1px solid silver !important;
}

.pageNoteContainer > .pageNote {
    font-size: 14px;
    border: 2px solid #FEC794;
    border-radius: 5px;
    padding-inline: 10px;
    background: #FAF1E6;
}
.widgetNoteFootnote {
    font-size: 20px !important;
    line-height: 20px !important;
}
.widgetNoteContainer > .pageNote {
    font-size: 14px;
    border: 2px solid #98C1FF;
    border-radius: 5px;
    padding-inline: 10px;
    background: #E6EEFA;
}
.widgetNoteLabel {
    font-style: italic;
}
div.notesDialog {
    border-radius: 5px;
    border:none !important
}
div.annnotelabel {
    font-size: 20px;
    line-height: 20px;
}
.feedback-pin-popup{border:none !important}

div.closeNotesDialog{   top: 3px; right: 3px; width: 20px; height: 20px;background: url(https://files.axshare.com/gsr/3741/images/close_x.svg) no-repeat center center / 70% 70% !important;}

.feedback-pin-close-button{  top: 3px !important; right: 3px !important; width: 20px; height: 20px;}

.feedback-pin-close-button:hover{
    background: #E6E6E6;
    border-radius: 5px;
}
.ax-reply p.is-editor-empty:first-child:before {
    content: "请输入内容" !important;
}
div.feedback-reply-actions > div:nth-child(2) > button > svg {
    font-size: 14px;
    width: 20px;
    height: 18px !important;
}
.ax-reply .mention {
    background-color: #3eacef !important;
    border-radius: 5px !important;
    color: white !important;
}
.ax-reply .mention--current-user {
    color: #fff !important;
    background-color: #855cce !important;
}
.feedback-reply-actions__post-button {
    background-color: #3eacef !important;
}
.feedback-reply-actions__post-button:hover {
    background-color: #1482C5 !important;
}
    `);

};

(function () {
  "use strict";
  Work();
  Style();
})();