first commit
This commit is contained in:
commit
669f49b1d6
342 files changed
+320811
No files matched your search
Vendored
+76
@@ -0,0 +1,76 @@
|
||||
/*
|
||||
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
||||
if you want to view the source, please visit the github repository of this plugin
|
||||
*/
|
||||
|
||||
"use strict";var Ee=Object.defineProperty;var ht=Object.getOwnPropertyDescriptor;var pt=Object.getOwnPropertyNames;var gt=Object.prototype.hasOwnProperty;var mt=(l,i)=>{for(var e in i)Ee(l,e,{get:i[e],enumerable:!0})},ft=(l,i,e,t)=>{if(i&&typeof i=="object"||typeof i=="function")for(let r of pt(i))!gt.call(l,r)&&r!==e&&Ee(l,r,{get:()=>i[r],enumerable:!(t=ht(i,r))||t.enumerable});return l};var _t=l=>ft(Ee({},"__esModule",{value:!0}),l);var Pt={};mt(Pt,{default:()=>Te});module.exports=_t(Pt);var ut=require("obsidian");var Fe={vocabularyBooks:[],showDefinitionOnHover:!0,enableAutoHighlight:!0,highlightStyle:"underline",enableMasteredFeature:!0,showMasteredInSidebar:!0,blurDefinitions:!1,ttsTemplate:"https://dict.youdao.com/dictvoice?audio={{word}}&type=2",aiDictionary:{apiUrl:"",apiKey:"",model:"",prompt:`Please provide a concise definition for the word "{{word}}" based on this context:
|
||||
|
||||
Sentence: {{sentence}}
|
||||
|
||||
Format:
|
||||
1) Part of speech
|
||||
2) English definition
|
||||
3) Chinese translation
|
||||
4) Example sentence (use the original sentence if appropriate)`,extraParams:"{}"},autoLayoutEnabled:!0,cardWidth:260,cardHeight:120,highlightMode:"all",highlightPaths:"",fileNodeParseMode:"filename-with-alias",enableSectionTabs:!0,enableSelectionTranslate:!1,translateTargetLang:"zh-CN",translatePrompt:`Translate the following text to {{to}}. Only return the translation, no explanation.
|
||||
|
||||
Text: {{text}}`};var U=class{constructor(){this.root=new te}addWord(i,e){let t=this.root,r=i.toLowerCase();for(let a of r)t.children.has(a)||t.children.set(a,new te),t=t.children.get(a);t.isEndOfWord=!0,t.payload=e,t.word=i}findAllMatches(i){let e=[],t=i.toLowerCase();for(let r=0;r<t.length;r++){let a=this.root,s=r;for(;s<t.length&&a.children.has(t[s]);)if(a=a.children.get(t[s]),s++,a.isEndOfWord){let o=t[r],n=t[s-1],c=ze(o)||r===0||!Ve(t[r-1]),u=ze(n)||s===t.length||!Ve(t[s]);c&&u&&e.push({word:a.word||t.substring(r,s),from:r,to:s,payload:a.payload})}}return e}clear(){this.root=new te}},te=class{constructor(){this.children=new Map,this.isEndOfWord=!1,this.payload=null,this.word=null}};function Ve(l){return/[a-z0-9\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}]/iu.test(l)}function ze(l){return/[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}]/u.test(l)}function R(l,i="var(--color-accent)"){return l?{1:"var(--color-red)",2:"var(--color-orange)",3:"var(--color-yellow)",4:"var(--color-green)",5:"var(--color-cyan)",6:"var(--color-purple)",red:"var(--color-red)",orange:"var(--color-orange)",yellow:"var(--color-yellow)",green:"var(--color-green)",cyan:"var(--color-cyan)",blue:"var(--color-blue)",purple:"var(--color-purple)",pink:"var(--color-pink)",gray:"var(--color-base-60)",grey:"var(--color-base-60)",white:"var(--color-base-00)",black:"var(--color-base-100)"}[l.toLowerCase()]||l:i}function Be(l,i=.1){return l.startsWith("var(--color-")?`color-mix(in srgb, ${l} ${i*100}%, transparent)`:l.startsWith("#")||l.startsWith("rgb")||l.startsWith("hsl")?`color-mix(in srgb, ${l} ${i*100}%, transparent)`:l}var Ce=null;function vt(l,i){if(!l||!i)return null;let e=encodeURIComponent(i.trim());return l.split("{{word}}").join(e)}async function he(l,i){let e=vt(l.settings.ttsTemplate,i);if(e)try{Ce||(Ce=new Audio);let t=Ce;t.src=e,await t.play()}catch(t){console.warn("HiWords TTS play failed:",t)}}function Re(l){let i=l.trim();return i.includes("...")?{isPattern:!0,parts:i.split("...").map(t=>t.trim()).filter(t=>t.length>0),original:i}:{isPattern:!1,parts:[i],original:i}}function bt(l){return l.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function pe(l,i,e=0){let t=[];if(i.length===0)return t;if(i.length===1){let o=new RegExp(`\\b${bt(i[0])}\\b`,"gi"),n;for(;(n=o.exec(l))!==null;)t.push({from:e+n.index,to:e+n.index+n[0].length,matchedText:n[0],segments:[{from:e+n.index,to:e+n.index+n[0].length}]});return t}let r=l.toLowerCase(),a=i.map(o=>o.toLowerCase()),s=0;for(;s<l.length;){let o=r.indexOf(a[0],s);if(o===-1)break;if(!Oe(l,o,o+i[0].length)){s=o+1;continue}let n=[];n.push({from:e+o,to:e+o+i[0].length});let c=o+i[0].length,u=!0;for(let h=1;h<i.length;h++){let p=wt(l,c),m=l.substring(c,p).toLowerCase().indexOf(a[h]);if(m===-1){u=!1;break}let v=c+m;if(!Oe(l,v,v+i[h].length)){u=!1;break}n.push({from:e+v,to:e+v+i[h].length}),c=v+i[h].length}if(u){let h=o,p=c;t.push({from:e+h,to:e+p,matchedText:l.substring(h,p),segments:n})}s=o+1}return t}function wt(l,i){let e=[".",",","!","?",";",":",`
|
||||
`],t=l.length;for(let r of e){let a=l.indexOf(r,i);a!==-1&&a<t&&(t=a)}return t}function Oe(l,i,e){let t=i>0?l[i-1]:" ",r=e<l.length?l[e]:" ",a=h=>/[a-z0-9\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}]/iu.test(h),s=h=>/[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}]/u.test(h),o=l[i],n=l[e-1],c=s(o)||!a(t),u=s(n)||!a(r);return c&&u}function Se(l,i){let e=i.highlightMode||"all";if(e==="all")return!0;let r=(i.highlightPaths||"").split(",").map(o=>o.trim()).filter(o=>o.length>0);if(r.length===0)return e==="exclude";let a=l.replace(/^\/+|\/+$/g,""),s=r.some(o=>{let n=o.replace(/^\/+|\/+$/g,"");return a===n||a.startsWith(n+"/")});return e==="exclude"?!s:e==="include"?s:!0}function ge(l){let i=l.getBoundingClientRect(),e=window.innerHeight||document.documentElement.clientHeight,t=window.innerWidth||document.documentElement.clientWidth;return i.bottom>0&&i.right>0&&i.top<e&&i.left<t}function xe(l){return!l.closest('.workspace-leaf-content[data-type="hover-editor"]')&&!l.closest('.workspace-leaf-content[data-type="file-explorer"]')&&!l.closest('.workspace-leaf-content[data-type="outline"]')&&!l.closest('.workspace-leaf-content[data-type="backlink"]')&&!l.closest('.workspace-leaf-content[data-type="tag"]')&&!l.closest('.workspace-leaf-content[data-type="search"]')&&!l.closest(".hover-popover")&&!l.closest(".popover")&&!l.closest(".suggestion-container")&&!l.closest(".modal")&&!l.closest(".workspace-split.mod-right-split")&&!l.closest(".workspace-split.mod-left-split")}function qe(l){l.querySelectorAll(".hi-words-highlight").forEach(e=>{var r;let t=document.createTextNode(e.textContent||"");(r=e.parentNode)==null||r.replaceChild(t,e)}),l.normalize()}function j(l){let i=new U,e=l.getAllWordsForHighlight();for(let t of e){let r=l.getDefinition(t);r&&i.addWord(t,r)}return i}function Ge(l){let i=null,e=["pre","code","a","button","input","textarea","select",".math",".cm-inline-code",".internal-embed",".file-embed",".hi-words-tooltip"].join(","),t=(r,a)=>{let s=document.createTreeWalker(r,NodeFilter.SHOW_TEXT,{acceptNode:u=>{let h=u.parentElement,p=h!=null?h:null;return!p||p.closest(e)||p.closest(".hi-words-highlight")||!u.nodeValue||!u.nodeValue.trim()?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),o=l.settings.highlightStyle||"underline",n=[],c=s.nextNode();for(;c;)n.push(c),c=s.nextNode();for(let u of n){let h=u.nodeValue||"";if(!h)continue;let p=a.findAllMatches(h);if(!p||p.length===0)continue;p.sort((_,b)=>_.from-b.from||b.to-b.from-(_.to-_.from));let g=[],f=0;for(let _ of p)_.from>=f&&(g.push(_),f=_.to);if(g.length===0)continue;let m=document.createDocumentFragment(),v=0;for(let _ of g){_.from>v&&m.appendChild(document.createTextNode(h.slice(v,_.from)));let b=_.payload,y=R(b==null?void 0:b.color,"var(--color-base-60)"),T=document.createElement("span");T.className="hi-words-highlight",T.setAttribute("data-word",_.word),b!=null&&b.definition&&T.setAttribute("data-definition",b.definition),y&&T.setAttribute("data-color",y),T.setAttribute("data-style",o),y&&T.setAttribute("style",`--word-highlight-color: ${y}`),T.textContent=h.slice(_.from,_.to),m.appendChild(T),v=_.to}v<h.length&&m.appendChild(document.createTextNode(h.slice(v))),u.parentNode&&u.parentNode.replaceChild(m,u)}};l.registerMarkdownPostProcessor((r,a)=>{try{if(!l.settings.enableAutoHighlight)return;let s=a==null?void 0:a.sourcePath;if(s&&!l.shouldHighlightFile(s)||!xe(r))return;let o=j(l.vocabularyManager);i=t,t(r,o)}catch(s){console.error("\u9605\u8BFB\u6A21\u5F0F\u9AD8\u4EAE\u5904\u7406\u5931\u8D25:",s)}}),l._refreshReadingModeHighlighter=()=>{yt(l,i)}}function yt(l,i){if(!(!l.settings.enableAutoHighlight||!i))try{let e=j(l.vocabularyManager);document.querySelectorAll(".markdown-preview-view .markdown-preview-sizer").forEach(r=>{let a=r;xe(a)&&ge(a)&&(qe(a),i(a,e))})}catch(e){console.error("\u5237\u65B0\u9605\u8BFB\u6A21\u5F0F\u9AD8\u4EAE\u5931\u8D25:",e)}}function Ue(l){let i=new WeakSet,e=null,t=(n,c)=>{if(!i.has(n)){i.add(n);try{$e(n,c,l.settings.highlightStyle||"underline")}catch(u){console.error("PDF \u6587\u672C\u5C42\u9AD8\u4EAE\u5904\u7406\u5931\u8D25:",u)}}},r=()=>{e&&window.clearTimeout(e),e=window.setTimeout(()=>{if(!l.settings.enableAutoHighlight)return;let n=l.app.workspace.getActiveFile();if(n&&!l.shouldHighlightFile(n.path))return;let c=j(l.vocabularyManager);document.querySelectorAll(".textLayer").forEach(h=>{h.closest(".pdf-container, .mod-pdf")&&t(h,c)}),e=null},300)},a=()=>{let n=new MutationObserver(c=>{let u=!1;c.forEach(h=>{h.addedNodes.forEach(p=>{if(p.nodeType===Node.ELEMENT_NODE){let g=p;(g.classList.contains("textLayer")||g.querySelector(".textLayer"))&&(u=!0),g.classList.contains("page")&&g.closest(".pdf-container, .mod-pdf")&&(u=!0)}})}),u&&r()});return n.observe(document.body,{childList:!0,subtree:!0,attributes:!1,characterData:!1}),n};l.registerEvent(l.app.workspace.on("layout-change",()=>{setTimeout(()=>{r()},500)})),l.registerEvent(l.app.workspace.on("active-leaf-change",n
Line truncated
|
||||
---`);if(e!==-1)return i.slice(e+4).replace(/^\r?\n/,"")}return i}parseSections(i){if(!i)return[];let e=i.split(/\n\s*---\s*\n/),t=[];for(let r of e){let a=r.trim();if(!a)continue;let s=a.split(`
|
||||
`),n=s[0].trim().match(/^\*\*(.+?)\*\*$/);if(n){t.push({title:n[1].trim(),content:s.slice(1).join(`
|
||||
`).trim()});continue}t.push({title:t.length===0?"\u91CA\u4E49":`\u5185\u5BB9 ${t.length+1}`,content:a})}return t}async parseCanvasFile(i){var e,t;try{let r=await this.app.vault.cachedRead(i),a=JSON.parse(r),s=(t=(e=this.settings)==null?void 0:e.masteredDetection)!=null?t:"group",o=s==="group"?a.nodes.find(c=>c.type==="group"&&(c.label==="Mastered"||c.label==="\u5DF2\u638C\u63E1")):void 0,n=[];for(let c of a.nodes)if(c.type==="text"&&c.text){let u=this.parseTextNode(c,i.path);u&&(s==="group"?o&&this.isNodeInGroup(c,o)&&(u.mastered=!0):s==="color"&&c.color==="4"&&(u.mastered=!0),n.push(u))}else if(c.type==="file"&&c.file){let u=await this.parseFileNode(c,i.path);u&&(s==="group"?o&&this.isNodeInGroup(c,o)&&(u.mastered=!0):s==="color"&&c.color==="4"&&(u.mastered=!0),n.push(u))}return n}catch(r){return console.error(`Failed to parse canvas file ${i.path}:`,r),[]}}parseFromText(i,e,t){if(!i)return null;i=this.removeFrontmatter(i).trim();let r="",a=[],s="";try{let o=i.split(`
|
||||
`);if(o.length===0||(r=o[0].replace(/^#+\s*/,"").trim(),r=this.removeMarkdownFormatting(r),!r))return null;if(o.length>1){let p=-1,g=-1;for(let f=1;f<o.length;f++){let m=o[f].trim();if(m.startsWith("*")&&m.endsWith("*")&&m.length>2&&!m.startsWith("**")&&!m.endsWith("**")){let _=m.slice(1,-1).split(",").map(b=>b.trim()).filter(b=>b);a.push(..._),p=f}else if(m!==""){g=f;break}}if(g>0&&g<o.length){for(;g<o.length&&o[g].trim()==="";)g++;g<o.length&&(s=o.slice(g).join(`
|
||||
`).trim())}else p===-1&&(s=o.slice(1).join(`
|
||||
`).trim())}if(!r)return null;let n=Re(r),c=s,u;return s&&s.includes(`
|
||||
---
|
||||
`)&&(u=this.parseSections(s),u.length>0&&(s=u[0].content)),{word:n.isPattern?n.original:r.toLowerCase(),aliases:a.length>0?a:void 0,definition:s,rawDefinition:c||s,sections:u,source:t,nodeId:e.id,color:e.color,isPattern:n.isPattern,patternParts:n.isPattern?n.parts:void 0}}catch(o){return console.error(`\u89E3\u6790\u8282\u70B9\u6587\u672C\u65F6\u51FA\u9519: ${o}`),null}}parseTextNode(i,e){return i.text?this.parseFromText(i.text,i,e):null}async parseFileNode(i,e){var t;try{let r=i.file;if(!r)return null;let a=this.app.vault.getAbstractFileByPath(r);if(!(a instanceof Ke.TFile)||a.extension!=="md")return null;let s=((t=this.settings)==null?void 0:t.fileNodeParseMode)||"filename-with-alias",o=a.basename;if(s==="filename")return{word:o,aliases:[],definition:"",source:e,nodeId:i.id,color:i.color,mastered:!1};let n=await this.app.vault.cachedRead(a);if(s==="content")return this.parseFromText(n,i,e);if(s==="filename-with-alias"){let c=this.parseFromText(n,i,e);if(c&&c.word){let u=c.word,h=c.aliases||[],p=u!==o?[u,...h]:h;return{...c,word:o,aliases:p}}return{word:o,aliases:[],definition:"",source:e,nodeId:i.id,color:i.color,mastered:!1}}return null}catch(r){return console.error("\u89E3\u6790\u6587\u4EF6\u8282\u70B9\u5931\u8D25:",r),null}}static isCanvasFile(i){return i.extension==="canvas"}async validateCanvasFile(i){var e;try{let t=await this.app.vault.cachedRead(i),r=(e=t==null?void 0:t.trim())!=null?e:"";if(r==="")return!0;let a=JSON.parse(r),s=!("nodes"in a)||Array.isArray(a.nodes),o=!("edges"in a)||Array.isArray(a.edges);return s&&o}catch(t){return!0}}isNodeInGroup(i,e){let t=typeof i.x=="number"?i.x:0,r=typeof i.y=="number"?i.y:0,a=typeof i.width=="number"?i.width:200,s=typeof i.height=="number"?i.height:60,o=typeof e.x=="number"?e.x:0,n=typeof e.y=="number"?e.y:0,c=typeof e.width=="number"?e.width:300,u=typeof e.height=="number"?e.height:150,h=t,p=t+a,g=r,f=r+s,m=o,v=o+c,_=n,b=n+u;if(!(h>=m&&p<=v&&g>=_&&f<=b)){if(h<v&&p>m&&g<b&&f>_){let P=Math.max(h,m),F=Math.min(p,v),V=Math.max(g,_),E=Math.min(f,b),M=(F-P)*(E-V),W=a*s;return M>=W*.5}return!1}return!0}};var Ct=50,St=50,Ye=260,Qe=120,Je=20,Xe=3,me=24,fe=12,ie=2;function q(l,i,e){var o,n;if(!i.autoLayoutEnabled)return;let t=(o=i.cardWidth)!=null?o:Ye,r=(n=i.cardHeight)!=null?n:Qe,a=l.nodes.find(c=>c.type==="group"&&c.label==="Mastered"),s=l.nodes.filter(c=>!(c.type==="group"||a&&e.isNodeInGroup(c,a)));if(s.length!==0)for(let c=0;c<s.length;c++){let u=s[c],h=c%Xe,p=Math.floor(c/Xe);u.x=Ct+h*(t+Je),u.y=St+p*(r+Je),u.width=t,u.height=r}}function ke(l,i,e,t){var u,h;let r=(u=e.cardWidth)!=null?u:Ye,a=(h=e.cardHeight)!=null?h:Qe,s=l.nodes.filter(p=>p.type!=="group"&&t.isNodeInGroup(p,i));if(s.length===0)return;for(let p=0;p<s.length;p++){let g=s[p],f=p%ie,m=Math.floor(p/ie);g.x=i.x+me+f*(r+fe),g.y=i.y+me+m*(a+fe),g.width=r,g.height=a}let o=Math.ceil(s.length/ie),n=me*2+ie*r+(ie-1)*fe,c=me*2+o*a+(o-1)*fe;i.width=Math.max(i.width,n),i.height=Math.max(i.height,c)}var ae=class{constructor(i,e){this.app=i,this.settings=e}updateSettings(i){this.settings=i}genHex16(){let i=new Uint8Array(8);return(window.crypto||window.msCrypto).getRandomValues(i),Array.from(i,e=>e.toString(16).padStart(2,"0")).join("")}async addWordToCanvas(i,e,t,r,a){try{let s=this.app.vault.getAbstractFileByPath(i);if(!s||!(s instanceof re.TFile)||!k.isCanvasFile(s))return console.error(`\u65E0\u6548\u7684 Canvas \u6587\u4EF6: ${i}`),null;a&&(a=a.filter(c=>c&&c.trim().length>0),a.length===0&&(a=void 0));let o=new k(this.app,this.settings),n="";return await this.app.vault.process(s,c=>{var M,W;let u=JSON.parse(c||'{"nodes":[],"edges":[]}');Array.isArray(u.nodes)||(u.nodes=[]);let h=this.genHex16();n=h;let p=(M=this.settings.cardWidth)!=null?M:260,g=(W=this.settings.cardHeight)!=null?W:120,f=20,m=24,v=(C,x)=>typeof C=="number"?C:x,_=C=>({x:v(C.x,0),y:v(C.y,0),w:v(C.width,200),h:v(C.height,60)}),b=(C,x,A,O)=>C<A+O&&C+x>A,y=u.nodes.find(C=>C.type==="group"&&C.label&&(C.label==="Mastered"||C.label==="\u5DF2\u638C\u63E1")),T=y?_(y):void 0,P=0,F=0;if(u.nodes.length>0){let C;for(let x=u.nodes.length-1;x>=0;x--){let A=u.nodes[x];if(A.type!=="group"){if(T){let O=_(A),L=b(O.x,O.w,T.x,T.w),ee=b(O.y,O.h,T.y,T.h);if(L&&ee)continue}C=A;break}}if(C){let x=_(C);P=x.x,F=x.y+x.h+f}}T&&b(P,p,T.x,T.w)&&(P=T.x+T.w+m);let V=e;a&&a.length>0&&(V=`${e}
|
||||
*${a.join(", ")}*`),t&&(V=`${V}
|
||||
|
||||
${t}`);let E={id:h,type:"text",x:P,y:F,width:p,height:g,text:V,color:r!==void 0?r.toString():void 0};return u.nodes.push(E),q(u,this.settings,o),JSON.stringify(u)}),n}catch(s){return console.error(`\u6DFB\u52A0\u8BCD\u6C47\u5230 Canvas \u5931\u8D25: ${s}`),null}}async updateWordInCanvas(i,e,t,r,a,s){try{let o=this.app.vault.getAbstractFileByPath(i);if(!o||!(o instanceof re.TFile)||!k.isCanvasFile(o))return console.error(`\u65E0\u6548\u7684 Canvas \u6587\u4EF6: ${i}`),!1;s&&(s=s.filter(u=>u&&u.trim().length>0),s.length===0&&(s=void 0));let n=!1,c=new k(this.app);return await this.app.vault.process(o,u=>{let h=JSON.parse(u||'{"nodes":[],"edges":[]}');Array.isArray(h.nodes)||(h.nodes=[]);let p=h.nodes.findIndex(f=>f.id===e);if(p===-1)return console.error(`\u672A\u627E\u5230\u8282\u70B9: ${e}`),JSON.stringify(h);let g=t;return s&&s.length>0&&(g=`${t}
|
||||
*${s.join(", ")}*`),r&&(g=`${g}
|
||||
|
||||
${r}`),h.nodes[p].text=g,a!==void 0&&(h.nodes[p].color=a.toString()),q(h,this.settings,c),n=!0,JSON.stringify(h)}),n}catch(o){return console.error(`\u66F4\u65B0 Canvas \u4E2D\u7684\u8BCD\u6C47\u5931\u8D25: ${o}`),!1}}async deleteWordFromCanvas(i,e){try{let t=this.app.vault.getAbstractFileByPath(i);if(!t||!(t instanceof re.TFile)||!k.isCanvasFile(t))return console.error(`\u65E0\u6548\u7684 Canvas \u6587\u4EF6: ${i}`),!1;let r=!1,a=new k(this.app);return await this.app.vault.process(t,s=>{let o=JSON.parse(s||'{"nodes":[],"edges":[]}');Array.isArray(o.nodes)||(o.nodes=[]);let n=o.nodes.findIndex(c=>c.id===e);return n===-1?(console.warn(`\u672A\u627E\u5230\u8981\u5220\u9664\u7684\u8282\u70B9: ${e}`),JSON.stringify(o)):(o.nodes.splice(n,1),q(o,this.settings,a),r=!0,JSON.stringify(o))}),r}catch(t){return console.error(`\u4ECE Canvas \u4E2D\u5220\u9664\u8BCD\u6C47\u5931\u8D25: ${t}`),!1}}async setNodeColor(i,e,t){try{let r=this.app.vault.getAbstractFileByPath(i);if(!r||!(r instanceof re.TFile)||!k.isCanvasFile(r))return console.error(`\u65E0\u6548\u7684 Canvas \u6587\u4EF6: ${i}`),!1;let a=!1,s=new k(this.app,this.settings);return await this.app.vault.process(r,o=>{let n=JSON.parse(o||'{"nodes":[],"edges":[]}');Array.isArray(n.nodes)||(n.nodes=[]);let c=n.nodes.findIndex(u=>u.id===e);return c===-1?(console.error(`\u672A\u627E\u5230\u8282\u70B9: ${e}`),JSON.stringify(n)):(t!==void 0?n.nodes[c].color=t.toString():delete n.nodes[c].color,q(n,this.settings,s),a=!0,JSON.stringify(n))}),a}catch(r){return console.error(`\u8BBE\u7F6E\u8282\u70B9\u989C\u8272\u5931\u8D25: ${r}`),!1}}};var Ae=require("obsidian");var se=class{constructor(i,e){this.MASTERED_GROUP_LABEL="Mastered";this.MASTERED_GROUP_COLOR="4";this.app=i,this.canvasParser=new k(i),this.settings=e}updateSettings(i){this.settings=i}genHex16(){let i=new Uint8Array(8);return(window.crypto||window.msCrypto).getRandomValues(i),Array.from(i,e=>e.toString(16).padStart(2,"0")).join("")}async ensureMasteredGroup(i){try{let e=await this.loadCanvas(i);if(!e)return null;let t=e.nodes.find(r=>r.type==="group"&&r.label===this.MASTERED_GROUP_LABEL);if(!t){let r=this.genHex16();return await this.modifyCanvas(i,a=>{let s=this.createMasteredGroup(a);s.id=r,a.nodes.push(s)}),r}return t.id}catch(e){return null}}async moveToMasteredGroup(i,e){try{let t=await this.ensureMasteredGroup(i);return t?await this.modifyCanvas(i,r=>{let a=r.nodes.find(n=>n.id===e),s=r.nodes.find(n=>n.id===t);if(!(!a||!s||!this.moveNodeToGroupOptimizedSync(a,s,r)))try{this.settings&&(ke(r,s,this.settings,this.canvasParser),q(r,this.settings,this.canvasParser))}catch(n){}}):!1}catch(t){return!1}}async removeFromMasteredGroup(i,e){try{return await this.modifyCanvas(i,t=>{let r=t.nodes.find(s=>s.id===e);if(!(!r||!t.nodes.find(s=>s.type==="group"&&s.label===this.MASTERED_GROUP_LABEL))){this.moveNodeOutOfGroupSync(r,t);try{this.settings&&q(t,this.settings,this.canvasParser)}catch(s){}}})}catch(t){return!1}}async isNodeInMasteredGroup(i,e){try{let t=await this.loadCanvas(i);if(!t)return!1;let r=t.nodes.find(s=>s.id===e);if(!r)return!1;let a=t.nodes.find(s=>s.type==="group"&&s.label===this.MASTERED_GROUP_LABEL);return a?this.canvasParser.isNodeInGroup(r,a):!1}catch(t){return!1}}createMasteredGroup(i){let e=this.genHex16(),{x:t,y:r}=this.calculateMasteredGroupPosition(i);return{id:e,type:"group",x:t,y:r,width:400,height:200,color:this.MASTERED_GROUP_COLOR,label:this.MASTERED_GROUP_LABEL}}calculateMasteredGroupPosition(i){let e=i.nodes.filter(p=>p.type==="text"||p.type==="group");if(e.length===0)return{x:50,y:50};let t=Math.min(...e.map(p=>p.x)),r=Math.max(...e.map(p=>p.x+(p.width||200))),a=Math.min(...e.map(p=>p.y)),s=Math.max(...e.map(p=>p.y+(p.height||100))),o=800,n=600,c=50,u=r+c,h=a;return u+o>3e3&&(u=t,h=s+c),{x:u,y:h}}moveNodeToGroupOptimizedSync(i,e,t){try{return i.width=i.width||260,i.height=i.height||120,i.x=Math.max(e.x+24,e.x),i.y=Math.max(e.y+24,e.y),!0}catch(r){return!1}}moveNodeOutOfGroupSync(i,e){let t=e.nodes.find(h=>h.type==="group"&&h.label===this.MASTERED_GROUP_LABEL),r=e.nodes.filter(h=>h.type!=="text"||h.id===i.id?!1:t?!this.canvasParser.isNodeInGroup(h,t):!0),a=50,s=20,o=i.width||260,n=i.height||120;if(r.length===0){i.x=a,i.y=s;return}let c=Math.min(...r.map(h=>h.x),a),u=Math.max(...r.map(h=>h.y+(h.height||n)),0);if(i.x=c,i.y=u+s,t){let h=t.y+t.height;i.y<h+s&&(i.y=h+s)}}getGroupMembers(i,e,t){return e.nodes.filter(r=>r.id!==i.id&&r.id!==t&&r.type!=="group"&&this.canvasParser.isNodeInGroup(r,i))}async loadCanvas(i){try{let e=this.app.vault.getAbstractFileByPath(i);if(!(e instanceof Ae.TFile))return null;let t=await this.app.vault.cachedRead(e);return JSON.parse(t)}catch(e){return null}}async modifyCanvas(i,e){try{let t=this.app.vault.getAbstractFileByPath(i);return t instanceof Ae.TFile?(await this.app.vault.process(t,r=>{let a=JSON.parse(r);return e(a),JSON.stringify(a)}),!0):!1}catch(t){return!1}}};var oe=class{constructor(i,e){this.definitions=new Map;this.wordDefinitionCache=new Map;this.al
Line truncated
|
||||
*${t.aliases.join(", ")}*`),t.definition&&(n+=`
|
||||
`+t.definition),o.text=n,JSON.stringify(s)})}catch(a){throw console.error("\u4FDD\u5B58 Canvas \u6587\u4EF6\u5931\u8D25:",a),a}}async getAllWordDefinitions(){let i=[];for(let e of this.definitions.values())i.push(...e);for(let e of this.memoryOnlyWords.values())i.push(...e);return i}async getWordDefinitionsByBook(i){let e=this.definitions.get(i)||[],t=this.memoryOnlyWords.get(i)||[];return[...e,...t]}async getUnmasteredWords(){this.cacheValid||this.rebuildCache();let i=[];for(let e of this.allWordsCache){let t=this.wordDefinitionCache.get(e);t&&!t.mastered&&i.push(e)}return i}async getMasteredWords(){this.cacheValid||this.rebuildCache();let i=[];for(let e of this.allWordsCache){let t=this.wordDefinitionCache.get(e);t&&t.mastered&&i.push(e)}return i}isWordMastered(i){let e=this.wordDefinitionCache.get(i.toLowerCase());return(e==null?void 0:e.mastered)===!0}};var D=require("obsidian");var st=require("obsidian");var Ze={plugin_name:"HiWords",settings:{vocabulary_books:"Word books",add_vocabulary_book:"Add word book",remove_vocabulary_book:"Remove",show_definition_on_hover:"Show definition on hover",show_definition_on_hover_desc:"Show word definition when hovering over highlighted words",enable_auto_highlight:"Enable auto highlight",enable_auto_highlight_desc:"Automatically highlight words from vocabulary books while reading",highlight_style:"Highlight style",highlight_style_desc:"Choose how words are highlighted in text",enable_section_tabs:"Enable section tabs",enable_section_tabs_desc:"Render multi-section definitions as tabs in the sidebar card and hover popover",style_underline:"Underline",style_background:"Background",style_bold:"Bold",style_dotted:"Dotted underline",style_wavy:"Wavy underline",save_settings:"Save settings",no_vocabulary_books:"No vocabulary books yet. Please add a Canvas file as a vocabulary book.",path:"Path",reload_book:"Reload this word book",statistics:"Statistics",total_books:"Total word books: {0}",enabled_books:"Enabled word books: {0}",total_words:"Total words: {0}",enable_mastered_feature:"Enable mastered feature",enable_mastered_feature_desc:"Mark mastered words to stop highlighting them. Sidebar shows grouped words",mastered_detection:"Mastered detection mode",mastered_detection_desc:"Choose how to detect 'mastered': by group or by color (green = 4)",mode_group:"Group mode",mode_color:"Color mode (green = 4)",blur_definitions:"Blur content",blur_definitions_desc:"Blur content by default, reveal on hover. Great for learning\u2014recall before seeing the answer",tts_template:"TTS template",tts_template_desc:"Use {{word}} as placeholder, e.g. https://dict.youdao.com/dictvoice?audio={{word}}&type=2",ai_dictionary:"AI Assistant",ai_api_url:"API URL",ai_api_url_desc:"Full API endpoint (e.g., .../v1/chat/completions)",ai_api_key:"API Key",ai_api_key_desc:"Your AI API key",ai_model:"Model ID",ai_model_desc:"AI model identifier (e.g., gpt-4o-mini, deepseek-chat)",ai_prompt:"Custom Prompt",ai_prompt_desc:"Use {{word}} and {{sentence}} as placeholders. The AI will use this prompt to generate definitions",ai_test_connection:"Test AI connection",ai_test_connection_desc:"Send a small test request to verify your API URL, key, and model",ai_extra_params:"Extra Request Parameters",ai_extra_params_desc:"Add custom JSON parameters to AI request body (Advanced)",ai_extra_params_placeholder:`{
|
||||
"temperature": 0.7,
|
||||
"top_p": 0.9
|
||||
}`,auto_layout:"Canvas auto layout",enable_auto_layout:"Enable auto layout",enable_auto_layout_desc:"Automatically normalize layout after add/update/delete and group changes",card_size:"Card size",card_size_desc:"Default card size (Width \xD7 Height, default: 260 \xD7 120)",grid_gaps:"Grid gaps",grid_gaps_desc:"Horizontal/vertical gaps for the left grid",left_padding:"Left padding & min X",left_padding_desc:"Left padding from Mastered group and minimum X for the left area",columns_auto:"Auto columns",columns_auto_desc:"Auto determine columns (bounded by max columns)",columns:"Fixed columns / Max columns",columns_desc:"Specify fixed columns and max columns (effective when auto columns off)",group_inner_layout:"Group inner layout",group_inner_layout_desc:"Inner padding, gaps and columns for nodes inside groups",highlight_scope:"Highlight scope",highlight_mode:"Highlight mode",highlight_mode_desc:"Choose the scope mode for word highlighting",mode_all:"All files",mode_exclude:"Exclude specified paths",mode_include:"Only specified paths",highlight_paths:"File paths",highlight_paths_desc:"Separate multiple paths with commas, supports folder paths (including subfolders)",highlight_paths_placeholder:"e.g.: Archive, Templates, Private/Diary",file_node_parse_mode:"File node parse mode",file_node_parse_mode_desc:"Choose how to parse file cards in Canvas",mode_filename:"Filename only",mode_content:"File content only",mode_filename_with_alias:"Filename as word, content as alias",selection_translate:"Selection Translate",enable_selection_translate:"Enable selection translate",enable_selection_translate_desc:"Show translation popup when text is selected",translate_target_lang:"Target language",translate_target_lang_desc:"Target language code (e.g. zh-CN, en, ja)",translate_prompt:"Translation prompt",translate_prompt_desc:"AI translation prompt template. Use {{text}} and {{to}} as placeholders"},sidebar:{title:"HiWords",empty_state:"No words found. Add words to your vocabulary books to see them here.",source_prefix:"From: ",found:"Found",words:"words",no_definition:"No definition available.",vocabulary_book:"Words",mastered:"Mastered",no_learning_words:"No words to learn",no_mastered_words:"No mastered words"},commands:{refresh_vocabulary:"Refresh vocabulary",add_word:"HiWords: Add word",edit_word:"HiWords: Edit word",show_sidebar:"Show HiWords sidebar",add_selected_word:"Add word"},notices:{enter_word_first:"Please enter a word first",definition_fetched:"Definition fetched successfully",definition_fetch_failed:"Failed to fetch definition. Please check your network or try another word",vocabulary_refreshed:"Vocabulary books refreshed",word_added:"Word added to vocabulary book",word_exists:"Word already exists in vocabulary book",error_adding_word:"Error adding word to vocabulary book",select_book_required:"Please select a vocabulary book",adding_word:"Adding word to vocabulary book...",updating_word:"Updating word...",word_added_success:'Word "{0}" successfully added to vocabulary book',word_updated_success:'Word "{0}" successfully updated',add_word_failed:"Failed to add word, please check the vocabulary book file",update_word_failed:"Failed to update word, please check the vocabulary book file",error_processing_word:"Error processing word",no_canvas_files:"No Canvas files found",book_already_exists:"This vocabulary book already exists",invalid_canvas_file:"Invalid Canvas file",book_added:"Added vocabulary book: {0}",book_reloaded:"Reloaded vocabulary book: {0}",book_removed:"Removed vocabulary book: {0}",testing_ai_connection:"Testing AI connection...",ai_connection_success:"AI connection successful",ai_connection_failed:"AI connection test failed",deleting_word:"Deleting word...",word_deleted:"Word deleted",delete_word_failed:"Failed to delete word, please check the vocabulary book file",error_deleting_word:"Error occurred while deleting word",mastered_feature_disabled:"Mastered feature is not enabled",update_word_status_failed:"Failed to update word status",move_to_mastered_group_failed:"Failed to move to mastered group",word_marked_as_mastered:'"{0}" marked as mastered',mark_mastered_failed:"Failed to mark as mastered, please try again",remove_from_mastered_group_failed:"Failed to remove from mastered group",word_unmarked_as_mastered:'"{0}" unmarked as mastered',no_text_selected:"Please select text to add as a word",word_required:"Please enter a word",unmark_mastered_failed:"Failed to unmark as mastered, please try again",batch_marked_success:"Successfully marked {0} words as mastered",book_path_updated:"Vocabulary book path updated: {0}"},modals:{auto_fill_definition:"AI Define",word_label:"Word",word_placeholder:"Enter word to add...",definition_label:"Definition",book_label:"Vocabulary book",select_book:"Select a vocabulary book",color_label:"Card color",color_gray:"Gray",color_red:"Red",color_orange:"Orange",color_yellow:"Yellow",color_green:"Green",color_blue:"Blue",color_purple:"Purple",aliases_label:"Aliases (
Line truncated
|
||||
This action cannot be undone.`},actions:{expand:"Expand",collapse:"Collapse",mark_mastered:"Mark mastered",unmark_mastered:"Unmark mastered"},translate:{text_empty:"Translation text cannot be empty",translating:"Translating...",failed:"Translation failed, please try again",ai_not_configured:"AI translation not configured. Please set up API in settings",invalid_response:"Translation service returned an invalid response"},ai_errors:{word_empty:"Word cannot be empty",api_key_not_configured:"API Key is not configured. Please set it in the plugin settings",api_url_required:"API URL is required. Please set it in the plugin settings",model_required:"Model ID is required. Please set it in the plugin settings",prompt_required:"Custom prompt is required. Please set it in the plugin settings",invalid_api_url:"Invalid API URL format. Please check the URL in plugin settings",prompt_missing_word_placeholder:"Prompt must contain {{word}} placeholder",invalid_response:"API returned an invalid response format",api_key_invalid:"\u274C API Key is invalid or expired. Please check plugin settings",rate_limit:"\u23F1\uFE0F API rate limit exceeded. Please try again later",server_error:"\u{1F527} API service is temporarily unavailable. Please try again later",network_error:"\u{1F310} Network connection failed. Please check your network settings",request_failed:"AI dictionary request failed",invalid_json_format:"Invalid JSON format, please check syntax"}};var et={plugin_name:"HiWords",settings:{vocabulary_books:"\u5355\u8BCD\u672C",add_vocabulary_book:"\u6DFB\u52A0\u5355\u8BCD\u672C",remove_vocabulary_book:"\u79FB\u9664",show_definition_on_hover:"\u60AC\u505C\u663E\u793A\u91CA\u4E49",show_definition_on_hover_desc:"\u9F20\u6807\u60AC\u505C\u5728\u9AD8\u4EAE\u8BCD\u6C47\u4E0A\u65F6\u663E\u793A\u5B9A\u4E49",enable_auto_highlight:"\u542F\u7528\u81EA\u52A8\u9AD8\u4EAE",enable_auto_highlight_desc:"\u5728\u9605\u8BFB\u65F6\u81EA\u52A8\u9AD8\u4EAE\u751F\u8BCD\u672C\u4E2D\u7684\u8BCD\u6C47",highlight_style:"\u9AD8\u4EAE\u6837\u5F0F",highlight_style_desc:"\u9009\u62E9\u5355\u8BCD\u5728\u6587\u672C\u4E2D\u7684\u9AD8\u4EAE\u663E\u793A\u65B9\u5F0F",enable_section_tabs:"\u542F\u7528\u5206\u533A Tab \u663E\u793A",enable_section_tabs_desc:"\u5C06\u4F7F\u7528 --- \u5206\u9694\u3001**\u6807\u9898** \u6807\u8BB0\u7684\u591A\u6BB5\u91CA\u4E49\u6E32\u67D3\u4E3A\u4FA7\u8FB9\u680F\u548C\u60AC\u505C\u5F39\u7A97\u4E2D\u7684\u6807\u7B7E\u9875",style_underline:"\u4E0B\u5212\u7EBF",style_background:"\u80CC\u666F\u9AD8\u4EAE",style_bold:"\u7C97\u4F53",style_dotted:"\u70B9\u72B6\u4E0B\u5212\u7EBF",style_wavy:"\u6CE2\u6D6A\u7EBF",save_settings:"\u4FDD\u5B58\u8BBE\u7F6E",no_vocabulary_books:"\u6682\u65E0\u5355\u8BCD\u672C\uFF0C\u8BF7\u6DFB\u52A0 Canvas \u6587\u4EF6\u4F5C\u4E3A\u5355\u8BCD\u672C",path:"\u8DEF\u5F84",reload_book:"\u91CD\u65B0\u89E3\u6790\u8BE5\u5355\u8BCD\u672C",statistics:"\u7EDF\u8BA1\u4FE1\u606F",total_books:"\u603B\u5355\u8BCD\u672C\u6570\u91CF: {0}",enabled_books:"\u5DF2\u542F\u7528\u5355\u8BCD\u672C: {0}",total_words:"\u603B\u8BCD\u6C47\u6570\u91CF: {0}",enable_mastered_feature:"\u542F\u7528\u5DF2\u638C\u63E1\u529F\u80FD",enable_mastered_feature_desc:"\u6807\u8BB0\u5DF2\u638C\u63E1\u5355\u8BCD\u4EE5\u505C\u6B62\u9AD8\u4EAE\u663E\u793A\u3002\u4FA7\u8FB9\u680F\u663E\u793A\u5206\u7EC4\u5355\u8BCD",mastered_detection:"\u5DF2\u638C\u63E1\u5224\u5B9A\u6A21\u5F0F",mastered_detection_desc:"\u9009\u62E9\u7528\u4E8E\u5224\u5B9A\u201C\u5DF2\u638C\u63E1\u201D\u7684\u65B9\u5F0F\uFF1A\u5206\u7EC4\u6216\u989C\u8272\uFF08\u7EFF\u8272=4\uFF09",mode_group:"\u5206\u7EC4\u6A21\u5F0F",mode_color:"\u989C\u8272\u6A21\u5F0F\uFF08\u7EFF\u8272=4\uFF09",blur_definitions:"\u6A21\u7CCA\u5185\u5BB9",blur_definitions_desc:"\u9ED8\u8BA4\u6A21\u7CCA\u663E\u793A\u5185\u5BB9\uFF0C\u9F20\u6807\u60AC\u505C\u65F6\u663E\u793A\u6E05\u6670\u5185\u5BB9\u3002\u9002\u5408\u5B66\u4E60\u65F6\u5148\u56DE\u5FC6\u518D\u67E5\u770B\u7B54\u6848",tts_template:"\u53D1\u97F3\u5730\u5740\u6A21\u677F",tts_template_desc:"\u4F7F\u7528 {{word}} \u4F5C\u4E3A\u5360\u4F4D\u7B26\uFF0C\u4F8B\u5982\uFF1Ahttps://dict.youdao.com/dictvoice?audio={{word}}&type=2",ai_dictionary:"AI \u52A9\u624B",ai_api_url:"API \u5730\u5740",ai_api_url_desc:"\u5B8C\u6574\u7684 API \u7AEF\u70B9\u5730\u5740\uFF08\u5982\uFF1A.../v1/chat/completions\uFF09",ai_api_key:"API Key",ai_api_key_desc:"\u4F60\u7684 AI API \u5BC6\u94A5",ai_model:"\u6A21\u578B ID",ai_model_desc:"AI \u6A21\u578B\u6807\u8BC6\u7B26 (\u4F8B\u5982: gpt-4o-mini, deepseek-chat)",ai_prompt:"\u81EA\u5B9A\u4E49\u63D0\u793A\u8BCD",ai_prompt_desc:"\u4F7F\u7528 {{word}} \u548C {{sentence}} \u4F5C\u4E3A\u5360\u4F4D\u7B26\u3002AI \u5C06\u4F7F\u7528\u6B64\u63D0\u793A\u8BCD\u751F\u6210\u91CA\u4E49",ai_test_connection:"\u6D4B\u8BD5 AI \u8FDE\u63A5",ai_test_connection_desc:"\u53D1\u9001\u4E00\u4E2A\u8F7B\u91CF\u6D4B\u8BD5\u8BF7\u6C42\uFF0C\u9A8C\u8BC1 API \u5730\u5740\u3001Key \u548C\u6A21\u578B\u662F\u5426\u53EF\u7528",ai_extra_params:"\u989D\u5916\u8BF7\u6C42\u53C2\u6570",ai_
Line truncated
|
||||
"temperature": 0.7,
|
||||
"top_p": 0.9
|
||||
}`,auto_layout:"\u767D\u677F\u81EA\u52A8\u5E03\u5C40",enable_auto_layout:"\u542F\u7528\u81EA\u52A8\u5E03\u5C40",enable_auto_layout_desc:"\u5728\u6DFB\u52A0/\u66F4\u65B0/\u5220\u9664\u8282\u70B9\u548C\u5206\u7EC4\u53D8\u66F4\u540E\u81EA\u52A8\u89C4\u8303\u5316\u5E03\u5C40",card_size:"\u5361\u7247\u5C3A\u5BF8",card_size_desc:"\u9ED8\u8BA4\u5361\u7247\u5C3A\u5BF8\uFF08\u5BBD \xD7 \u9AD8\uFF0C\u9ED8\u8BA4\uFF1A260 \xD7 120\uFF09",grid_gaps:"\u7F51\u683C\u95F4\u8DDD",grid_gaps_desc:"\u5DE6\u4FA7\u533A\u57DF\u7F51\u683C\u7684\u6C34\u5E73/\u5782\u76F4\u95F4\u8DDD",left_padding:"\u5DE6\u4FA7\u7559\u767D\u4E0E\u6700\u5C0FX",left_padding_desc:"Mastered \u5206\u7EC4\u5DE6\u4FA7\u7684\u7559\u767D\u4E0E\u5DE6\u4FA7\u533A\u57DF\u7684\u6700\u5C0F X \u4F4D\u7F6E",columns_auto:"\u81EA\u52A8\u5217\u6570",columns_auto_desc:"\u6839\u636E\u5185\u5BB9\u81EA\u9002\u5E94\u5217\u6570\uFF08\u53D7\u6700\u5927\u5217\u6570\u9650\u5236\uFF09",columns:"\u56FA\u5B9A\u5217\u6570/\u6700\u5927\u5217\u6570",columns_desc:"\u6307\u5B9A\u56FA\u5B9A\u5217\u6570\u4E0E\u6700\u5927\u5217\u6570\uFF08\u5F53\u5173\u95ED\u81EA\u52A8\u5217\u6570\u65F6\u751F\u6548\uFF09",group_inner_layout:"\u5206\u7EC4\u5185\u5E03\u5C40",group_inner_layout_desc:"\u5206\u7EC4\u5185\u90E8\u7684\u5185\u8FB9\u8DDD\u3001\u95F4\u8DDD\u4E0E\u5217\u6570\u8BBE\u7F6E",highlight_scope:"\u9AD8\u4EAE\u8303\u56F4",highlight_mode:"\u9AD8\u4EAE\u6A21\u5F0F",highlight_mode_desc:"\u9009\u62E9\u9AD8\u4EAE\u5355\u8BCD\u7684\u8303\u56F4\u6A21\u5F0F",mode_all:"\u5168\u90E8\u6587\u4EF6\u9AD8\u4EAE",mode_exclude:"\u6392\u9664\u6307\u5B9A\u8DEF\u5F84",mode_include:"\u4EC5\u6307\u5B9A\u8DEF\u5F84\u9AD8\u4EAE",highlight_paths:"\u6587\u4EF6\u8DEF\u5F84",highlight_paths_desc:"\u591A\u4E2A\u8DEF\u5F84\u7528\u9017\u53F7\u5206\u9694\uFF0C\u652F\u6301\u6587\u4EF6\u5939\u8DEF\u5F84\uFF08\u5305\u62EC\u5B50\u6587\u4EF6\u5939\uFF09",highlight_paths_placeholder:"\u4F8B\u5982\uFF1AArchive, Templates, Private/Diary",file_node_parse_mode:"\u6587\u4EF6\u8282\u70B9\u89E3\u6790\u6A21\u5F0F",file_node_parse_mode_desc:"\u9009\u62E9\u5982\u4F55\u89E3\u6790 Canvas \u4E2D\u7684\u6587\u4EF6\u5361\u7247",mode_filename:"\u4EC5\u6587\u4EF6\u540D",mode_content:"\u4EC5\u6587\u4EF6\u5185\u5BB9",mode_filename_with_alias:"\u6587\u4EF6\u540D\u4F5C\u4E3A\u4E3B\u8BCD\uFF0C\u5185\u5BB9\u4F5C\u4E3A\u522B\u540D",selection_translate:"\u5212\u8BCD\u7FFB\u8BD1",enable_selection_translate:"\u542F\u7528\u5212\u8BCD\u7FFB\u8BD1",enable_selection_translate_desc:"\u9009\u4E2D\u6587\u672C\u540E\u81EA\u52A8\u5F39\u51FA\u7FFB\u8BD1\u6D6E\u7A97",translate_target_lang:"\u76EE\u6807\u8BED\u8A00",translate_target_lang_desc:"\u7FFB\u8BD1\u7684\u76EE\u6807\u8BED\u8A00\u4EE3\u7801\uFF08\u5982 zh-CN\u3001en\u3001ja\uFF09",translate_prompt:"\u7FFB\u8BD1\u63D0\u793A\u8BCD",translate_prompt_desc:"AI \u7FFB\u8BD1\u7684\u63D0\u793A\u8BCD\u6A21\u677F\uFF0C\u4F7F\u7528 {{text}} \u548C {{to}} \u4F5C\u4E3A\u5360\u4F4D\u7B26"},sidebar:{title:"HiWords",empty_state:"\u672A\u627E\u5230\u5355\u8BCD\u3002\u6DFB\u52A0\u5355\u8BCD\u5230\u60A8\u7684\u751F\u8BCD\u672C\u4EE5\u5728\u6B64\u5904\u67E5\u770B\u3002",source_prefix:"\u6765\u81EA: ",found:"\u53D1\u73B0",words:"\u4E2A\u751F\u8BCD",no_definition:"\u6682\u65E0\u5B9A\u4E49",vocabulary_book:"\u8BCD\u6C47",mastered:"\u5DF2\u638C\u63E1",no_learning_words:"\u6CA1\u6709\u5F85\u5B66\u4E60\u7684\u5355\u8BCD",no_mastered_words:"\u6CA1\u6709\u5DF2\u638C\u63E1\u7684\u5355\u8BCD"},commands:{refresh_vocabulary:"\u5237\u65B0\u751F\u8BCD\u672C",add_word:"HiWords: \u6DFB\u52A0\u5355\u8BCD",edit_word:"HiWords: \u7F16\u8F91\u5355\u8BCD",show_sidebar:"\u663E\u793A HiWords \u4FA7\u8FB9\u680F",add_selected_word:"\u6DFB\u52A0\u5355\u8BCD"},notices:{enter_word_first:"\u8BF7\u5148\u8F93\u5165\u5355\u8BCD",definition_fetched:"\u91CA\u4E49\u83B7\u53D6\u6210\u529F",definition_fetch_failed:"\u83B7\u53D6\u91CA\u4E49\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u6216\u5C1D\u8BD5\u5176\u4ED6\u5355\u8BCD",vocabulary_refreshed:"\u751F\u8BCD\u672C\u5DF2\u5237\u65B0",word_added:"\u5355\u8BCD\u5DF2\u6DFB\u52A0\u5230\u751F\u8BCD\u672C",word_exists:"\u5355\u8BCD\u5DF2\u5B58\u5728\u4E8E\u751F\u8BCD\u672C\u4E2D",error_adding_word:"\u6DFB\u52A0\u5355\u8BCD\u5230\u751F\u8BCD\u672C\u65F6\u51FA\u9519",select_book_required:"\u8BF7\u9009\u62E9\u751F\u8BCD\u672C",adding_word:"\u6B63\u5728\u6DFB\u52A0\u8BCD\u6C47\u5230\u751F\u8BCD\u672C...",updating_word:"\u6B63\u5728\u66F4\u65B0\u8BCD\u6C47...",word_added_success:'\u8BCD\u6C47 "{0}" \u5DF2\u6210\u529F\u6DFB\u52A0\u5230\u751F\u8BCD\u672C',word_updated_success:'\u8BCD\u6C47 "{0}" \u5DF2\u6210\u529F\u66F4\u65B0',add_word_failed:"\u6DFB\u52A0\u8BCD\u6C47\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u751F\u8BCD\u672C\u6587\u4EF6",update_word_failed:"\u66F4\u65B0\u8BCD\u6C47\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u751F\u8BCD\u672C\u6587\u4EF6",error_processing_word:"\u5904\u7406\u8BCD\u6C47\u65F6\u51FA\u9519",no_canvas_files:"\u672A\u627E\u5230 Canvas \u6587\u4EF6",book_already_exists:"\u8BE5\u751F\u8BCD\u672C\u5DF2\u5B58\u57
Line truncated
|
||||
\u6B64\u64CD\u4F5C\u4E0D\u53EF\u64A4\u9500\u3002`},actions:{expand:"\u5C55\u5F00",collapse:"\u6536\u8D77",mark_mastered:"\u5DF2\u638C\u63E1",unmark_mastered:"\u5FD8\u8BB0\u4E86"},translate:{text_empty:"\u7FFB\u8BD1\u6587\u672C\u4E0D\u80FD\u4E3A\u7A7A",translating:"\u7FFB\u8BD1\u4E2D...",failed:"\u7FFB\u8BD1\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",ai_not_configured:"AI \u7FFB\u8BD1\u672A\u914D\u7F6E\uFF0C\u8BF7\u5728\u8BBE\u7F6E\u4E2D\u586B\u5199 API \u4FE1\u606F",invalid_response:"\u7FFB\u8BD1\u670D\u52A1\u8FD4\u56DE\u4E86\u65E0\u6548\u7684\u54CD\u5E94"},ai_errors:{word_empty:"\u5355\u8BCD\u4E0D\u80FD\u4E3A\u7A7A",api_key_not_configured:"API Key \u672A\u914D\u7F6E,\u8BF7\u5728\u63D2\u4EF6\u8BBE\u7F6E\u4E2D\u586B\u5199",api_url_required:"API \u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A,\u8BF7\u5728\u63D2\u4EF6\u8BBE\u7F6E\u4E2D\u586B\u5199",model_required:"\u6A21\u578B ID \u4E0D\u80FD\u4E3A\u7A7A,\u8BF7\u5728\u63D2\u4EF6\u8BBE\u7F6E\u4E2D\u586B\u5199",prompt_required:"\u81EA\u5B9A\u4E49\u63D0\u793A\u8BCD\u4E0D\u80FD\u4E3A\u7A7A,\u8BF7\u5728\u63D2\u4EF6\u8BBE\u7F6E\u4E2D\u586B\u5199",invalid_api_url:"API \u5730\u5740\u683C\u5F0F\u65E0\u6548,\u8BF7\u68C0\u67E5\u63D2\u4EF6\u8BBE\u7F6E\u4E2D\u7684 URL",prompt_missing_word_placeholder:"\u63D0\u793A\u8BCD\u5FC5\u987B\u5305\u542B {{word}} \u5360\u4F4D\u7B26",invalid_response:"API \u8FD4\u56DE\u4E86\u65E0\u6548\u7684\u54CD\u5E94\u683C\u5F0F",api_key_invalid:"\u274C API Key \u65E0\u6548\u6216\u5DF2\u8FC7\u671F,\u8BF7\u68C0\u67E5\u63D2\u4EF6\u8BBE\u7F6E",rate_limit:"\u23F1\uFE0F API \u8BF7\u6C42\u9891\u7387\u8D85\u9650,\u8BF7\u7A0D\u540E\u518D\u8BD5",server_error:"\u{1F527} API \u670D\u52A1\u6682\u65F6\u4E0D\u53EF\u7528,\u8BF7\u7A0D\u540E\u518D\u8BD5",network_error:"\u{1F310} \u7F51\u7EDC\u8FDE\u63A5\u5931\u8D25,\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8BBE\u7F6E",request_failed:"AI \u8BCD\u5178\u8BF7\u6C42\u5931\u8D25",invalid_json_format:"JSON \u683C\u5F0F\u65E0\u6548\uFF0C\u8BF7\u68C0\u67E5\u8BED\u6CD5"}};var tt={plugin_name:"HiWords",settings:{vocabulary_books:"Libros de palabras",add_vocabulary_book:"Agregar libro de palabras",remove_vocabulary_book:"Eliminar",show_definition_on_hover:"Mostrar definici\xF3n al pasar el cursor",show_definition_on_hover_desc:"Mostrar la definici\xF3n al pasar el cursor sobre palabras resaltadas",enable_auto_highlight:"Habilitar resaltado autom\xE1tico",enable_auto_highlight_desc:"Resaltar autom\xE1ticamente palabras de los libros mientras lees",highlight_style:"Estilo de resaltado",highlight_style_desc:"Elige c\xF3mo se resaltan las palabras en el texto",enable_section_tabs:"Activar pesta\xF1as de secciones",enable_section_tabs_desc:"Renderiza definiciones con varias secciones como pesta\xF1as en la barra lateral y en la vista emergente",style_underline:"Subrayado",style_background:"Fondo",style_bold:"Negrita",style_dotted:"Subrayado punteado",style_wavy:"Subrayado ondulado",save_settings:"Guardar ajustes",no_vocabulary_books:"A\xFAn no hay libros. Agrega un archivo Canvas como libro de palabras.",path:"Ruta",reload_book:"Recargar este libro",statistics:"Estad\xEDsticas",total_books:"Libros totales: {0}",enabled_books:"Libros habilitados: {0}",total_words:"Palabras totales: {0}",enable_mastered_feature:"Habilitar funci\xF3n de dominadas",enable_mastered_feature_desc:"Marca palabras dominadas para dejar de resaltarlas. La barra lateral muestra grupos",blur_definitions:"Difuminar contenido",blur_definitions_desc:"Difuminar por defecto, mostrar al pasar el cursor. Ideal para recordar antes de ver la respuesta",tts_template:"Plantilla TTS",tts_template_desc:"Usar {{word}} como marcador de posici\xF3n, ej. https://dict.youdao.com/dictvoice?audio={{word}}&type=2",ai_dictionary:"Asistente AI",ai_api_url:"URL de API",ai_api_url_desc:"Punto final de API (detecta autom\xE1ticamente: OpenAI, Claude, Gemini)",ai_api_key:"Clave API",ai_api_key_desc:"Tu clave de API de AI",ai_model:"Modelo",ai_model_desc:"Nombre del modelo de AI (ej., gpt-4o-mini, deepseek-chat)",ai_prompt:"Prompt personalizado",ai_prompt_desc:"Usar {{word}} y {{sentence}} como marcadores de posici\xF3n. La AI usar\xE1 este prompt para generar definiciones",ai_extra_params:"Par\xE1metros extra de la solicitud",ai_extra_params_desc:"A\xF1ade par\xE1metros JSON personalizados al cuerpo de la solicitud de IA (avanzado)",ai_extra_params_placeholder:`{
|
||||
"temperature": 0.7,
|
||||
"top_p": 0.9
|
||||
}`,auto_layout:"Dise\xF1o autom\xE1tico del lienzo",enable_auto_layout:"Habilitar dise\xF1o autom\xE1tico",enable_auto_layout_desc:"Normalizar autom\xE1ticamente el dise\xF1o despu\xE9s de agregar/actualizar/eliminar y cambios de grupo",card_size:"Tama\xF1o de tarjeta",card_size_desc:"Tama\xF1o de tarjeta predeterminado (Ancho \xD7 Alto, predeterminado: 260 \xD7 120)",grid_gaps:"Espacios de la cuadr\xEDcula",grid_gaps_desc:"Espacios horizontal/vertical para la cuadr\xEDcula izquierda",left_padding:"Relleno izquierdo y X m\xEDnima",left_padding_desc:"Relleno izquierdo desde el grupo Mastered y X m\xEDnima para el \xE1rea izquierda",columns_auto:"Columnas autom\xE1ticas",columns_auto_desc:"Determinar columnas autom\xE1ticamente (limitado por columnas m\xE1ximas)",columns:"Columnas fijas / M\xE1ximo de columnas",columns_desc:"Especificar columnas fijas y m\xE1ximo de columnas (efectivo cuando auto est\xE1 desactivado)",group_inner_layout:"Dise\xF1o interno del grupo",group_inner_layout_desc:"Relleno interno, espacios y columnas para nodos dentro de grupos",highlight_scope:"\xC1mbito de resaltado",highlight_mode:"Modo de resaltado",highlight_mode_desc:"Elegir el modo de \xE1mbito para el resaltado de palabras",mode_all:"Todos los archivos",mode_exclude:"Excluir rutas especificadas",mode_include:"Solo rutas especificadas",highlight_paths:"Rutas de archivo",highlight_paths_desc:"Separar m\xFAltiples rutas con comas, admite rutas de carpetas (incluidas subcarpetas)",highlight_paths_placeholder:"ej.: Archive, Templates, Private/Diary",file_node_parse_mode:"Modo de an\xE1lisis de nodo de archivo",file_node_parse_mode_desc:"Elegir c\xF3mo analizar tarjetas de archivo en Canvas",mode_filename:"Solo nombre de archivo",mode_content:"Solo contenido de archivo",mode_filename_with_alias:"Nombre de archivo como palabra, contenido como alias",selection_translate:"Traducci\xF3n por selecci\xF3n",enable_selection_translate:"Activar traducci\xF3n por selecci\xF3n",enable_selection_translate_desc:"Mostrar ventana emergente de traducci\xF3n al seleccionar texto",translate_target_lang:"Idioma de destino",translate_target_lang_desc:"C\xF3digo del idioma de destino (ej. zh-CN, en, ja)",translate_prompt:"Prompt de traducci\xF3n",translate_prompt_desc:"Plantilla de prompt para traducci\xF3n IA. Use {{text}} y {{to}} como marcadores"},sidebar:{title:"HiWords",empty_state:"No se encontraron palabras. Agrega palabras a tus libros para verlas aqu\xED.",source_prefix:"De: ",found:"Encontradas",words:"palabras",no_definition:"Sin definici\xF3n disponible.",vocabulary_book:"Palabras",mastered:"Dominadas",no_learning_words:"No hay palabras para aprender",no_mastered_words:"No hay palabras dominadas"},commands:{refresh_vocabulary:"Actualizar vocabulario",add_word:"HiWords: Agregar palabra",edit_word:"HiWords: Editar palabra",show_sidebar:"Mostrar barra lateral de HiWords",add_selected_word:"Agregar palabra"},notices:{vocabulary_refreshed:"Libros actualizados",word_added:"Palabra agregada al libro",word_exists:"La palabra ya existe en el libro",error_adding_word:"Error al agregar palabra al libro",select_book_required:"Selecciona un libro de palabras",adding_word:"Agregando palabra al libro...",updating_word:"Actualizando palabra...",word_added_success:'La palabra "{0}" se agreg\xF3 correctamente',word_updated_success:'La palabra "{0}" se actualiz\xF3 correctamente',add_word_failed:"No se pudo agregar la palabra, revisa el archivo del libro",update_word_failed:"No se pudo actualizar la palabra, revisa el archivo del libro",error_processing_word:"Error al procesar la palabra",no_canvas_files:"No se encontraron archivos Canvas",book_already_exists:"Este libro ya existe",invalid_canvas_file:"Archivo Canvas no v\xE1lido",book_added:"Libro agregado: {0}",book_reloaded:"Libro recargado: {0}",book_removed:"Libro eliminado: {0}",deleting_word:"Eliminando palabra...",word_deleted:"Palabra eliminada",delete_word_failed:"No se pudo eliminar la palabra, revisa el archivo del libro",error_deleting_word:"Ocurri\xF3 un error al eliminar la palabra",mastered_feature_disabled:"La funci\xF3n de dominadas no est\xE1 habilitada",update_word_status_failed:"No se pudo actualizar el estado de la palabra",move_to_mastered_group_failed:"No se pudo mover al grupo de dominadas",word_marked_as_mastered:'"{0}" marcada como dominada',mark_mastered_failed:"No se pudo marcar como dominada, int\xE9ntalo de nuevo",remove_from_mastered_group_failed:"No se pudo quitar del grupo de dominadas",word_unmarked_as_mastered:'"{0}" ya no est\xE1 marcada como dominada',no_text_selected:"Por favor, selecciona primero una palabra para agregar",word_required:"Por favor, ingresa una palabra",unmark_mastered_failed:"No se pudo desmarcar, int\xE9ntalo de nuevo",batch_marked_success:"Se marcaron correctamente {0} palabras como dominadas",book_path_updated:"Ruta del libro actualizada: {0}",new_notice:"Nuevo aviso"},modals:{auto_fill_definition:"Definir con AI",word_label:"Palabra",word_placehold
Line truncated
|
||||
Esta acci\xF3n no se puede deshacer.`},actions:{expand:"Expandir",collapse:"Contraer",mark_mastered:"Marcar como dominado",unmark_mastered:"Desmarcar dominado"},translate:{text_empty:"El texto de traducci\xF3n no puede estar vac\xEDo",translating:"Traduciendo...",failed:"La traducci\xF3n fall\xF3, int\xE9ntelo de nuevo",ai_not_configured:"Traducci\xF3n IA no configurada. Configure la API en los ajustes",invalid_response:"El servicio de traducci\xF3n devolvi\xF3 una respuesta no v\xE1lida"},ai_errors:{word_empty:"La palabra no puede estar vac\xEDa",api_key_not_configured:"La clave API no est\xE1 configurada. Por favor, config\xFArela en los ajustes del plugin",invalid_response:"La API devolvi\xF3 un formato de respuesta no v\xE1lido",api_key_invalid:"\u274C La clave API no es v\xE1lida o ha caducado. Por favor, verifique la configuraci\xF3n del plugin",rate_limit:"\u23F1\uFE0F L\xEDmite de tasa de API excedido. Por favor, int\xE9ntelo de nuevo m\xE1s tarde",server_error:"\u{1F527} El servicio API no est\xE1 disponible temporalmente. Por favor, int\xE9ntelo de nuevo m\xE1s tarde",network_error:"\u{1F310} Fallo en la conexi\xF3n de red. Por favor, verifique su configuraci\xF3n de red",request_failed:"Solicitud al diccionario AI fall\xF3",invalid_json_format:"Formato JSON no v\xE1lido, por favor revise la sintaxis"}};var it={plugin_name:"HiWords",settings:{vocabulary_books:"Livres de mots",add_vocabulary_book:"Ajouter un livre",remove_vocabulary_book:"Supprimer",show_definition_on_hover:"Afficher la d\xE9finition au survol",show_definition_on_hover_desc:"Afficher la d\xE9finition en survolant les mots surlign\xE9s",enable_auto_highlight:"Activer le surlignage auto",enable_auto_highlight_desc:"Surligner automatiquement les mots des livres pendant la lecture",highlight_style:"Style de surlignage",highlight_style_desc:"Choisissez la fa\xE7on dont les mots sont surlign\xE9s",enable_section_tabs:"Activer les onglets de section",enable_section_tabs_desc:"Affiche les d\xE9finitions multi-sections sous forme d'onglets dans la barre lat\xE9rale et l'infobulle",style_underline:"Soulign\xE9",style_background:"Fond",style_bold:"Gras",style_dotted:"Soulign\xE9 en pointill\xE9s",style_wavy:"Soulign\xE9 ondul\xE9",save_settings:"Enregistrer les r\xE9glages",no_vocabulary_books:"Aucun livre pour l'instant. Ajoutez un fichier Canvas comme livre de mots.",path:"Chemin",reload_book:"Recharger ce livre",statistics:"Statistiques",total_books:"Livres au total : {0}",enabled_books:"Livres activ\xE9s : {0}",total_words:"Mots au total : {0}",enable_mastered_feature:"Activer la fonction ma\xEEtris\xE9",enable_mastered_feature_desc:"Marquer les mots ma\xEEtris\xE9s pour arr\xEAter de les surligner. La barre lat\xE9rale affiche les groupes",blur_definitions:"Flouter le contenu",blur_definitions_desc:"Flouter par d\xE9faut, r\xE9v\xE9ler au survol. Id\xE9al pour m\xE9moriser avant de voir la r\xE9ponse",tts_template:"Mod\xE8le TTS",tts_template_desc:"Utiliser {{word}} comme espace r\xE9serv\xE9, ex. https://dict.youdao.com/dictvoice?audio={{word}}&type=2",ai_dictionary:"Assistant IA",ai_api_url:"URL de l'API",ai_api_url_desc:"Point de terminaison de l'API (d\xE9tecte automatiquement : OpenAI, Claude, Gemini)",ai_api_key:"Cl\xE9 API",ai_api_key_desc:"Votre cl\xE9 API IA",ai_model:"Mod\xE8le",ai_model_desc:"Nom du mod\xE8le IA (ex., gpt-4o-mini, deepseek-chat)",ai_prompt:"Prompt personnalis\xE9",ai_prompt_desc:"Utiliser {{word}} et {{sentence}} comme espaces r\xE9serv\xE9s. L'IA utilisera ce prompt pour g\xE9n\xE9rer des d\xE9finitions",ai_extra_params:"Param\xE8tres suppl\xE9mentaires de la requ\xEAte",ai_extra_params_desc:"Ajouter des param\xE8tres JSON personnalis\xE9s au corps de la requ\xEAte IA (avanc\xE9)",ai_extra_params_placeholder:`{
|
||||
"temperature": 0.7,
|
||||
"top_p": 0.9
|
||||
}`,auto_layout:"Disposition auto du canevas",enable_auto_layout:"Activer la disposition automatique",enable_auto_layout_desc:"Normaliser automatiquement la disposition apr\xE8s ajout/mise \xE0 jour/suppression et changements de groupe",card_size:"Taille de carte",card_size_desc:"Taille de carte par d\xE9faut (Largeur \xD7 Hauteur, par d\xE9faut : 260 \xD7 120)",grid_gaps:"Espacement de la grille",grid_gaps_desc:"Espacement horizontal/vertical pour la grille de gauche",left_padding:"Marge gauche et X min",left_padding_desc:"Marge gauche depuis le groupe Mastered et X minimale pour la zone gauche",columns_auto:"Colonnes auto",columns_auto_desc:"D\xE9terminer automatiquement les colonnes (limit\xE9 par le max)",columns:"Colonnes fixes / Colonnes max",columns_desc:"Sp\xE9cifier colonnes fixes et max (quand auto est d\xE9sactiv\xE9)",group_inner_layout:"Disposition interne du groupe",group_inner_layout_desc:"Marge interne, espacements et colonnes pour les n\u0153uds dans les groupes",highlight_scope:"Port\xE9e de surbrillance",highlight_mode:"Mode de surbrillance",highlight_mode_desc:"Choisir le mode de port\xE9e pour la surbrillance des mots",mode_all:"Tous les fichiers",mode_exclude:"Exclure les chemins sp\xE9cifi\xE9s",mode_include:"Uniquement les chemins sp\xE9cifi\xE9s",highlight_paths:"Chemins de fichiers",highlight_paths_desc:"S\xE9parer plusieurs chemins par des virgules, prend en charge les chemins de dossiers (y compris les sous-dossiers)",highlight_paths_placeholder:"ex : Archive, Templates, Private/Diary",file_node_parse_mode:"Mode d'analyse de noeud de fichier",file_node_parse_mode_desc:"Choisir comment analyser les cartes de fichiers dans Canvas",mode_filename:"Nom de fichier uniquement",mode_content:"Contenu de fichier uniquement",mode_filename_with_alias:"Nom de fichier comme mot, contenu comme alias",selection_translate:"Traduction par s\xE9lection",enable_selection_translate:"Activer la traduction par s\xE9lection",enable_selection_translate_desc:"Afficher une fen\xEAtre de traduction lors de la s\xE9lection de texte",translate_target_lang:"Langue cible",translate_target_lang_desc:"Code de la langue cible (ex. zh-CN, en, ja)",translate_prompt:"Prompt de traduction",translate_prompt_desc:"Mod\xE8le de prompt pour la traduction IA. Utilisez {{text}} et {{to}} comme marqueurs"},sidebar:{title:"HiWords",empty_state:"Aucun mot trouv\xE9. Ajoutez des mots \xE0 vos livres pour les voir ici.",source_prefix:"De : ",found:"Trouv\xE9s",words:"mots",no_definition:"Aucune d\xE9finition disponible.",vocabulary_book:"Mots",mastered:"Ma\xEEtris\xE9s",no_learning_words:"Aucun mot \xE0 apprendre",no_mastered_words:"Aucun mot ma\xEEtris\xE9"},commands:{refresh_vocabulary:"Actualiser le vocabulaire",add_word:"HiWords : Ajouter un mot",edit_word:"HiWords : \xC9diter un mot",show_sidebar:"Afficher la barre lat\xE9rale HiWords",add_selected_word:"Ajouter un mot"},notices:{vocabulary_refreshed:"Livres actualis\xE9s",word_added:"Mot ajout\xE9 au livre",word_exists:"Le mot existe d\xE9j\xE0 dans le livre",error_adding_word:"Erreur lors de l'ajout du mot au livre",select_book_required:"Veuillez s\xE9lectionner un livre de mots",adding_word:"Ajout du mot au livre...",updating_word:"Mise \xE0 jour du mot...",word_added_success:'Le mot "{0}" a \xE9t\xE9 ajout\xE9 avec succ\xE8s',word_updated_success:'Le mot "{0}" a \xE9t\xE9 mis \xE0 jour avec succ\xE8s',add_word_failed:"\xC9chec de l'ajout du mot, v\xE9rifiez le fichier du livre",update_word_failed:"\xC9chec de la mise \xE0 jour, v\xE9rifiez le fichier du livre",error_processing_word:"Erreur lors du traitement du mot",no_canvas_files:"Aucun fichier Canvas trouv\xE9",book_already_exists:"Ce livre existe d\xE9j\xE0",invalid_canvas_file:"Fichier Canvas invalide",book_added:"Livre ajout\xE9 : {0}",book_reloaded:"Livre recharg\xE9 : {0}",book_removed:"Livre supprim\xE9 : {0}",deleting_word:"Suppression du mot...",word_deleted:"Mot supprim\xE9",delete_word_failed:"\xC9chec de la suppression du mot, v\xE9rifiez le fichier du livre",error_deleting_word:"Une erreur est survenue lors de la suppression du mot",mastered_feature_disabled:"La fonction ma\xEEtris\xE9 n'est pas activ\xE9e",update_word_status_failed:"\xC9chec de la mise \xE0 jour du statut du mot",move_to_mastered_group_failed:"\xC9chec du d\xE9placement vers le groupe ma\xEEtris\xE9",word_marked_as_mastered:'"{0}" marqu\xE9 comme ma\xEEtris\xE9',mark_mastered_failed:"\xC9chec du marquage, veuillez r\xE9essayer",remove_from_mastered_group_failed:"\xC9chec du retrait du groupe ma\xEEtris\xE9",word_unmarked_as_mastered:'"{0}" retir\xE9 du statut ma\xEEtris\xE9',no_text_selected:"Veuillez d'abord s\xE9lectionner un mot \xE0 ajouter",word_required:"Veuillez entrer un mot",unmark_mastered_failed:"\xC9chec de la suppression de la marque, veuillez r\xE9essayer",batch_marked_success:"{0} mots marqu\xE9s comme ma\xEEtris\xE9s avec succ\xE8s",book_path_updated:"Chemin du livre mis \xE0 jour : {0}",new_notice:"Nouvelle notification"
Line truncated
|
||||
Cette action est irr\xE9versible.`},actions:{expand:"D\xE9ployer",collapse:"Replier",mark_mastered:"Marquer comme ma\xEEtris\xE9",unmark_mastered:"Retirer le statut ma\xEEtris\xE9"},translate:{text_empty:"Le texte de traduction ne peut pas \xEAtre vide",translating:"Traduction en cours...",failed:"La traduction a \xE9chou\xE9, veuillez r\xE9essayer",ai_not_configured:"Traduction IA non configur\xE9e. Configurez l'API dans les param\xE8tres",invalid_response:"Le service de traduction a renvoy\xE9 une r\xE9ponse non valide"},ai_errors:{word_empty:"Le mot ne peut pas \xEAtre vide",api_key_not_configured:"La cl\xE9 API n'est pas configur\xE9e. Veuillez la d\xE9finir dans les param\xE8tres du plugin",invalid_response:"L'API a renvoy\xE9 un format de r\xE9ponse invalide",api_key_invalid:"\u274C La cl\xE9 API est invalide ou expir\xE9e. Veuillez v\xE9rifier les param\xE8tres du plugin",rate_limit:"\u23F1\uFE0F Limite de d\xE9bit de l'API d\xE9pass\xE9e. Veuillez r\xE9essayer plus tard",server_error:"\u{1F527} Le service API est temporairement indisponible. Veuillez r\xE9essayer plus tard",network_error:"\u{1F310} \xC9chec de la connexion r\xE9seau. Veuillez v\xE9rifier vos param\xE8tres r\xE9seau",request_failed:"La requ\xEAte au dictionnaire IA a \xE9chou\xE9",invalid_json_format:"Format JSON invalide, veuillez v\xE9rifier la syntaxe"}};var rt={plugin_name:"HiWords",settings:{vocabulary_books:"W\xF6rterb\xFCcher",add_vocabulary_book:"W\xF6rterbuch hinzuf\xFCgen",remove_vocabulary_book:"Entfernen",show_definition_on_hover:"Definition beim Hover anzeigen",show_definition_on_hover_desc:"Definition anzeigen, wenn der Mauszeiger \xFCber hervorgehobene W\xF6rter f\xE4hrt",enable_auto_highlight:"Automatisches Hervorheben aktivieren",enable_auto_highlight_desc:"W\xF6rter aus den W\xF6rterb\xFCchern beim Lesen automatisch hervorheben",highlight_style:"Hervorhebungsstil",highlight_style_desc:"W\xE4hlen Sie, wie W\xF6rter im Text hervorgehoben werden",enable_section_tabs:"Abschnitt-Tabs aktivieren",enable_section_tabs_desc:"Mehrteilige Definitionen als Tabs in der Seitenleiste und im Hover-Popup anzeigen",style_underline:"Unterstreichen",style_background:"Hintergrund",style_bold:"Fett",style_dotted:"Gepunktete Unterstreichung",style_wavy:"Wellenf\xF6rmige Unterstreichung",save_settings:"Einstellungen speichern",no_vocabulary_books:"Noch keine W\xF6rterb\xFCcher. F\xFCgen Sie eine Canvas-Datei als W\xF6rterbuch hinzu.",path:"Pfad",reload_book:"Dieses W\xF6rterbuch neu laden",statistics:"Statistiken",total_books:"Gesamtzahl der W\xF6rterb\xFCcher: {0}",enabled_books:"Aktivierte W\xF6rterb\xFCcher: {0}",total_words:"Gesamtzahl der W\xF6rter: {0}",enable_mastered_feature:"Funktion 'Gemeistert' aktivieren",enable_mastered_feature_desc:"Gemeisterte W\xF6rter markieren, um sie nicht mehr hervorzuheben. Seitenleiste zeigt Gruppen",blur_definitions:"Inhalt verwischen",blur_definitions_desc:"Standardm\xE4\xDFig verwischen, beim Hover anzeigen. Ideal zum Erinnern vor dem Anzeigen der Antwort",tts_template:"TTS-Vorlage",tts_template_desc:"{{word}} als Platzhalter verwenden, z.B. https://dict.youdao.com/dictvoice?audio={{word}}&type=2",ai_dictionary:"KI-Assistent",ai_api_url:"API-URL",ai_api_url_desc:"API-Endpunkt (erkennt automatisch: OpenAI, Claude, Gemini)",ai_api_key:"API-Schl\xFCssel",ai_api_key_desc:"Ihr KI-API-Schl\xFCssel",ai_model:"Modell",ai_model_desc:"KI-Modellname (z.B. gpt-4o-mini, deepseek-chat)",ai_prompt:"Benutzerdefinierter Prompt",ai_prompt_desc:"{{word}} und {{sentence}} als Platzhalter verwenden. Die KI wird diesen Prompt verwenden, um Definitionen zu generieren",ai_extra_params:"Zus\xE4tzliche Anfrageparameter",ai_extra_params_desc:"Benutzerdefinierte JSON-Parameter zum Anfrage-Body der KI hinzuf\xFCgen (fortgeschritten)",ai_extra_params_placeholder:`{
|
||||
"temperature": 0.7,
|
||||
"top_p": 0.9
|
||||
}`,auto_layout:"Automatisches Canvas-Layout",enable_auto_layout:"Automatisches Layout aktivieren",enable_auto_layout_desc:"Layout nach Hinzuf\xFCgen/Aktualisieren/L\xF6schen und Gruppen\xE4nderungen automatisch normalisieren",card_size:"Kartengr\xF6\xDFe",card_size_desc:"Standard-Kartengr\xF6\xDFe (Breite \xD7 H\xF6he, Standard: 260 \xD7 120)",grid_gaps:"Gitterabst\xE4nde",grid_gaps_desc:"Horizontale/vertikale Abst\xE4nde f\xFCr das linke Gitter",left_padding:"Linker Innenabstand & min. X",left_padding_desc:"Linker Abstand zur Gruppe 'Mastered' und minimale X-Position f\xFCr den linken Bereich",columns_auto:"Automatische Spalten",columns_auto_desc:"Spalten automatisch bestimmen (begrenzt durch maximale Spalten)",columns:"Feste Spalten / Maximale Spalten",columns_desc:"Feste Spalten und Maximalspalten angeben (wirksam, wenn auto aus)",group_inner_layout:"Inneres Gruppenlayout",group_inner_layout_desc:"Innenabstand, Abst\xE4nde und Spalten f\xFCr Knoten in Gruppen",highlight_scope:"Hervorhebungsbereich",highlight_mode:"Hervorhebungsmodus",highlight_mode_desc:"W\xE4hlen Sie den Bereichsmodus f\xFCr die Wort-Hervorhebung",mode_all:"Alle Dateien",mode_exclude:"Angegebene Pfade ausschlie\xDFen",mode_include:"Nur angegebene Pfade",highlight_paths:"Dateipfade",highlight_paths_desc:"Mehrere Pfade durch Kommas trennen, unterst\xFCtzt Ordnerpfade (einschlie\xDFlich Unterordner)",highlight_paths_placeholder:"z.B.: Archive, Templates, Private/Diary",file_node_parse_mode:"Dateiknoten-Analysemodus",file_node_parse_mode_desc:"W\xE4hlen Sie, wie Dateikarten in Canvas analysiert werden",mode_filename:"Nur Dateiname",mode_content:"Nur Dateiinhalt",mode_filename_with_alias:"Dateiname als Wort, Inhalt als Alias",selection_translate:"Auswahl\xFCbersetzung",enable_selection_translate:"Auswahl\xFCbersetzung aktivieren",enable_selection_translate_desc:"\xDCbersetzungs-Popup anzeigen, wenn Text ausgew\xE4hlt wird",translate_target_lang:"Zielsprache",translate_target_lang_desc:"Zielsprachcode (z.B. zh-CN, en, ja)",translate_prompt:"\xDCbersetzungs-Prompt",translate_prompt_desc:"KI-\xDCbersetzungs-Prompt-Vorlage. Verwenden Sie {{text}} und {{to}} als Platzhalter"},sidebar:{title:"HiWords",empty_state:"Keine W\xF6rter gefunden. F\xFCgen Sie W\xF6rter zu Ihren W\xF6rterb\xFCchern hinzu, um sie hier zu sehen.",source_prefix:"Von: ",found:"Gefunden",words:"W\xF6rter",no_definition:"Keine Definition verf\xFCgbar.",vocabulary_book:"W\xF6rter",mastered:"Gemeistert",no_learning_words:"Keine zu lernenden W\xF6rter",no_mastered_words:"Keine gemeisterten W\xF6rter"},commands:{refresh_vocabulary:"Vokabular aktualisieren",add_word:"HiWords: Wort hinzuf\xFCgen",edit_word:"HiWords: Wort bearbeiten",show_sidebar:"HiWords-Seitenleiste anzeigen",add_selected_word:"Wort hinzuf\xFCgen"},notices:{vocabulary_refreshed:"W\xF6rterb\xFCcher aktualisiert",word_added:"Wort zum W\xF6rterbuch hinzugef\xFCgt",word_exists:"Wort existiert bereits im W\xF6rterbuch",error_adding_word:"Fehler beim Hinzuf\xFCgen des Wortes zum W\xF6rterbuch",select_book_required:"Bitte w\xE4hlen Sie ein W\xF6rterbuch aus",adding_word:"Wort wird zum W\xF6rterbuch hinzugef\xFCgt...",updating_word:"Wort wird aktualisiert...",word_added_success:'Wort "{0}" erfolgreich hinzugef\xFCgt',word_updated_success:'Wort "{0}" erfolgreich aktualisiert',add_word_failed:"Hinzuf\xFCgen des Wortes fehlgeschlagen, pr\xFCfen Sie die Datei",update_word_failed:"Aktualisieren des Wortes fehlgeschlagen, pr\xFCfen Sie die Datei",error_processing_word:"Fehler bei der Verarbeitung des Wortes",no_canvas_files:"Keine Canvas-Dateien gefunden",book_already_exists:"Dieses W\xF6rterbuch existiert bereits",invalid_canvas_file:"Ung\xFCltige Canvas-Datei",book_added:"W\xF6rterbuch hinzugef\xFCgt: {0}",book_reloaded:"W\xF6rterbuch neu geladen: {0}",book_removed:"W\xF6rterbuch entfernt: {0}",deleting_word:"Wort wird gel\xF6scht...",word_deleted:"Wort gel\xF6scht",delete_word_failed:"L\xF6schen des Wortes fehlgeschlagen, pr\xFCfen Sie die Datei",error_deleting_word:"Beim L\xF6schen des Wortes ist ein Fehler aufgetreten",mastered_feature_disabled:"Funktion 'Gemeistert' ist nicht aktiviert",update_word_status_failed:"Aktualisieren des Wortstatus fehlgeschlagen",move_to_mastered_group_failed:"Verschieben in die Gruppe 'Gemeistert' fehlgeschlagen",word_marked_as_mastered:'"{0}" als gemeistert markiert',mark_mastered_failed:"Als gemeistert markieren fehlgeschlagen, bitte erneut versuchen",remove_from_mastered_group_failed:"Entfernen aus der Gruppe 'Gemeistert' fehlgeschlagen",word_unmarked_as_mastered:'"{0}" nicht mehr als gemeistert markiert',no_text_selected:"Bitte w\xE4hlen Sie zuerst ein Wort aus",word_required:"Bitte geben Sie ein Wort ein",unmark_mastered_failed:"Markierung konnte nicht entfernt werden, bitte erneut versuchen",batch_marked_success:"{0} W\xF6rter erfolgreich als gemeistert markiert",book_path_updated:"W\xF6rterbuchpfad aktualisiert: {0}",new_notice:"Neue Benachrichtigung"},modals:{auto_fill_definition:"KI-De
Line truncated
|
||||
Diese Aktion kann nicht r\xFCckg\xE4ngig gemacht werden.`},actions:{expand:"Erweitern",collapse:"Einklappen",mark_mastered:"Als beherrscht markieren",unmark_mastered:"Beherrschung aufheben"},translate:{text_empty:"Der \xDCbersetzungstext darf nicht leer sein",translating:"\xDCbersetzen...",failed:"\xDCbersetzung fehlgeschlagen, bitte erneut versuchen",ai_not_configured:"KI-\xDCbersetzung nicht konfiguriert. Bitte API in den Einstellungen einrichten",invalid_response:"Der \xDCbersetzungsdienst hat eine ung\xFCltige Antwort zur\xFCckgegeben"},ai_errors:{word_empty:"Das Wort darf nicht leer sein",api_key_not_configured:"API-Schl\xFCssel ist nicht konfiguriert. Bitte in den Plugin-Einstellungen festlegen",invalid_response:"Die API hat ein ung\xFCltiges Antwortformat zur\xFCckgegeben",api_key_invalid:"\u274C API-Schl\xFCssel ist ung\xFCltig oder abgelaufen. Bitte \xFCberpr\xFCfen Sie die Plugin-Einstellungen",rate_limit:"\u23F1\uFE0F API-Ratenlimit \xFCberschritten. Bitte versuchen Sie es sp\xE4ter erneut",server_error:"\u{1F527} API-Dienst ist vor\xFCbergehend nicht verf\xFCgbar. Bitte versuchen Sie es sp\xE4ter erneut",network_error:"\u{1F310} Netzwerkverbindung fehlgeschlagen. Bitte \xFCberpr\xFCfen Sie Ihre Netzwerkeinstellungen",request_failed:"KI-W\xF6rterbuch-Anfrage fehlgeschlagen",invalid_json_format:"Ung\xFCltiges JSON-Format, bitte pr\xFCfen Sie die Syntax"}};var at={plugin_name:"HiWords",settings:{vocabulary_books:"\u5358\u8A9E\u5E33",add_vocabulary_book:"\u5358\u8A9E\u5E33\u3092\u8FFD\u52A0",remove_vocabulary_book:"\u524A\u9664",show_definition_on_hover:"\u30DB\u30D0\u30FC\u3067\u5B9A\u7FA9\u3092\u8868\u793A",show_definition_on_hover_desc:"\u5F37\u8ABF\u8868\u793A\u3055\u308C\u305F\u5358\u8A9E\u306B\u30DE\u30A6\u30B9\u3092\u4E57\u305B\u308B\u3068\u5B9A\u7FA9\u3092\u8868\u793A\u3057\u307E\u3059",enable_auto_highlight:"\u81EA\u52D5\u30CF\u30A4\u30E9\u30A4\u30C8\u3092\u6709\u52B9\u5316",enable_auto_highlight_desc:"\u8AAD\u66F8\u4E2D\u306B\u5358\u8A9E\u5E33\u306E\u5358\u8A9E\u3092\u81EA\u52D5\u7684\u306B\u30CF\u30A4\u30E9\u30A4\u30C8\u3057\u307E\u3059",highlight_style:"\u30CF\u30A4\u30E9\u30A4\u30C8\u30B9\u30BF\u30A4\u30EB",highlight_style_desc:"\u30C6\u30AD\u30B9\u30C8\u4E2D\u306E\u5358\u8A9E\u306E\u30CF\u30A4\u30E9\u30A4\u30C8\u65B9\u6CD5\u3092\u9078\u629E",enable_section_tabs:"\u30BB\u30AF\u30B7\u30E7\u30F3\u30BF\u30D6\u3092\u6709\u52B9\u5316",enable_section_tabs_desc:"\u8907\u6570\u30BB\u30AF\u30B7\u30E7\u30F3\u306E\u5B9A\u7FA9\u3092\u30B5\u30A4\u30C9\u30D0\u30FC\u3068\u30DB\u30D0\u30FC\u30DD\u30C3\u30D7\u30AA\u30FC\u30D0\u30FC\u3067\u30BF\u30D6\u8868\u793A\u3057\u307E\u3059",style_underline:"\u4E0B\u7DDA",style_background:"\u80CC\u666F",style_bold:"\u592A\u5B57",style_dotted:"\u70B9\u7DDA\u306E\u4E0B\u7DDA",style_wavy:"\u6CE2\u7DDA\u306E\u4E0B\u7DDA",save_settings:"\u8A2D\u5B9A\u3092\u4FDD\u5B58",no_vocabulary_books:"\u5358\u8A9E\u5E33\u304C\u307E\u3060\u3042\u308A\u307E\u305B\u3093\u3002Canvas \u30D5\u30A1\u30A4\u30EB\u3092\u5358\u8A9E\u5E33\u3068\u3057\u3066\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044\u3002",path:"\u30D1\u30B9",reload_book:"\u3053\u306E\u5358\u8A9E\u5E33\u3092\u518D\u8AAD\u307F\u8FBC\u307F",statistics:"\u7D71\u8A08",total_books:"\u5358\u8A9E\u5E33\u306E\u5408\u8A08: {0}",enabled_books:"\u6709\u52B9\u306A\u5358\u8A9E\u5E33: {0}",total_words:"\u5358\u8A9E\u306E\u5408\u8A08: {0}",enable_mastered_feature:"\u7FD2\u5F97\u6E08\u307F\u6A5F\u80FD\u3092\u6709\u52B9\u5316",enable_mastered_feature_desc:"\u7FD2\u5F97\u6E08\u307F\u306E\u5358\u8A9E\u3092\u30DE\u30FC\u30AF\u3057\u3066\u30CF\u30A4\u30E9\u30A4\u30C8\u3092\u505C\u6B62\u3002\u30B5\u30A4\u30C9\u30D0\u30FC\u306B\u30B0\u30EB\u30FC\u30D7\u8868\u793A",blur_definitions:"\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u307C\u304B\u3059",blur_definitions_desc:"\u30C7\u30D5\u30A9\u30EB\u30C8\u3067\u307C\u304B\u3057\u3001\u30DB\u30D0\u30FC\u6642\u306B\u8868\u793A\u3002\u5B66\u7FD2\u6642\u306B\u7B54\u3048\u3092\u898B\u308B\u524D\u306B\u601D\u3044\u51FA\u3059\u306E\u306B\u6700\u9069",tts_template:"TTS\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8",tts_template_desc:"{{word}}\u3092\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u30FC\u3068\u3057\u3066\u4F7F\u7528\u3001\u4F8B\uFF1Ahttps://dict.youdao.com/dictvoice?audio={{word}}&type=2",ai_dictionary:"AI\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8",ai_api_url:"API URL",ai_api_url_desc:"API\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\uFF08\u81EA\u52D5\u691C\u51FA\uFF1AOpenAI\u3001Claude\u3001Gemini\uFF09",ai_api_key:"API\u30AD\u30FC",ai_api_key_desc:"\u3042\u306A\u305F\u306EAI API\u30AD\u30FC",ai_model:"\u30E2\u30C7\u30EB",ai_model_desc:"AI\u30E2\u30C7\u30EB\u540D\uFF08\u4F8B\uFF1Agpt-4o-mini\u3001deepseek-chat\uFF09",ai_prompt:"\u30AB\u30B9\u30BF\u30E0\u30D7\u30ED\u30F3\u30D7\u30C8",ai_prompt_desc:"{{word}}\u3068{{sentence}}\u3092\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u30FC\u3068\u3057\u3066\u4F7F\u7528\u3002AI\u306F\u3053\u306E\u30D7\u30ED\u30F3\u30D7\u30C8\u3092\u4F7F\u7528\u3057\u3066\u5B9A\u7FA9\u3092\u751F\u6210\u3057
Line truncated
|
||||
"temperature": 0.7,
|
||||
"top_p": 0.9
|
||||
}`,auto_layout:"\u30AD\u30E3\u30F3\u30D0\u30B9\u81EA\u52D5\u30EC\u30A4\u30A2\u30A6\u30C8",enable_auto_layout:"\u81EA\u52D5\u30EC\u30A4\u30A2\u30A6\u30C8\u3092\u6709\u52B9\u5316",enable_auto_layout_desc:"\u8FFD\u52A0/\u66F4\u65B0/\u524A\u9664\u304A\u3088\u3073\u30B0\u30EB\u30FC\u30D7\u5909\u66F4\u5F8C\u306B\u30EC\u30A4\u30A2\u30A6\u30C8\u3092\u81EA\u52D5\u6B63\u898F\u5316",card_size:"\u30AB\u30FC\u30C9\u30B5\u30A4\u30BA",card_size_desc:"\u30C7\u30D5\u30A9\u30EB\u30C8\u30AB\u30FC\u30C9\u30B5\u30A4\u30BA\uFF08\u5E45 \xD7 \u9AD8\u3055\u3001\u30C7\u30D5\u30A9\u30EB\u30C8\uFF1A260 \xD7 120\uFF09",grid_gaps:"\u30B0\u30EA\u30C3\u30C9\u9593\u9694",grid_gaps_desc:"\u5DE6\u30B0\u30EA\u30C3\u30C9\u306E\u6C34\u5E73/\u5782\u76F4\u9593\u9694",left_padding:"\u5DE6\u4F59\u767D\u3068\u6700\u5C0F X",left_padding_desc:"Mastered \u30B0\u30EB\u30FC\u30D7\u304B\u3089\u306E\u5DE6\u4F59\u767D\u3068\u5DE6\u30A8\u30EA\u30A2\u306E\u6700\u5C0F X",columns_auto:"\u81EA\u52D5\u30AB\u30E9\u30E0",columns_auto_desc:"\u30AB\u30E9\u30E0\u6570\u3092\u81EA\u52D5\u6C7A\u5B9A\uFF08\u6700\u5927\u30AB\u30E9\u30E0\u6570\u3067\u5236\u9650\uFF09",columns:"\u56FA\u5B9A\u30AB\u30E9\u30E0 / \u6700\u5927\u30AB\u30E9\u30E0",columns_desc:"\u56FA\u5B9A\u30AB\u30E9\u30E0\u3068\u6700\u5927\u30AB\u30E9\u30E0\u3092\u6307\u5B9A\uFF08\u81EA\u52D5\u304C\u30AA\u30D5\u306E\u6642\u306B\u6709\u52B9\uFF09",group_inner_layout:"\u30B0\u30EB\u30FC\u30D7\u5185\u90E8\u30EC\u30A4\u30A2\u30A6\u30C8",group_inner_layout_desc:"\u30B0\u30EB\u30FC\u30D7\u5185\u30CE\u30FC\u30C9\u306E\u5185\u5074\u4F59\u767D\u3001\u9593\u9694\u3001\u30AB\u30E9\u30E0\u8A2D\u5B9A",highlight_scope:"\u30CF\u30A4\u30E9\u30A4\u30C8\u7BC4\u56F2",highlight_mode:"\u30CF\u30A4\u30E9\u30A4\u30C8\u30E2\u30FC\u30C9",highlight_mode_desc:"\u5358\u8A9E\u30CF\u30A4\u30E9\u30A4\u30C8\u306E\u7BC4\u56F2\u30E2\u30FC\u30C9\u3092\u9078\u629E",mode_all:"\u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB",mode_exclude:"\u6307\u5B9A\u30D1\u30B9\u3092\u9664\u5916",mode_include:"\u6307\u5B9A\u30D1\u30B9\u306E\u307F",highlight_paths:"\u30D5\u30A1\u30A4\u30EB\u30D1\u30B9",highlight_paths_desc:"\u8907\u6570\u306E\u30D1\u30B9\u3092\u30AB\u30F3\u30DE\u3067\u533A\u5207\u308A\u3001\u30D5\u30A9\u30EB\u30C0\u30D1\u30B9\u3092\u30B5\u30DD\u30FC\u30C8\uFF08\u30B5\u30D6\u30D5\u30A9\u30EB\u30C0\u3092\u542B\u3080\uFF09",highlight_paths_placeholder:"\u4F8B\uFF1AArchive, Templates, Private/Diary",file_node_parse_mode:"\u30D5\u30A1\u30A4\u30EB\u30CE\u30FC\u30C9\u89E3\u6790\u30E2\u30FC\u30C9",file_node_parse_mode_desc:"Canvas \u5185\u306E\u30D5\u30A1\u30A4\u30EB\u30AB\u30FC\u30C9\u306E\u89E3\u6790\u65B9\u6CD5\u3092\u9078\u629E",mode_filename:"\u30D5\u30A1\u30A4\u30EB\u540D\u306E\u307F",mode_content:"\u30D5\u30A1\u30A4\u30EB\u5185\u5BB9\u306E\u307F",mode_filename_with_alias:"\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u5358\u8A9E\u3001\u5185\u5BB9\u3092\u30A8\u30A4\u30EA\u30A2\u30B9\u3068\u3057\u3066",selection_translate:"\u9078\u629E\u7FFB\u8A33",enable_selection_translate:"\u9078\u629E\u7FFB\u8A33\u3092\u6709\u52B9\u306B\u3059\u308B",enable_selection_translate_desc:"\u30C6\u30AD\u30B9\u30C8\u3092\u9078\u629E\u3059\u308B\u3068\u7FFB\u8A33\u30DD\u30C3\u30D7\u30A2\u30C3\u30D7\u3092\u8868\u793A",translate_target_lang:"\u30BF\u30FC\u30B2\u30C3\u30C8\u8A00\u8A9E",translate_target_lang_desc:"\u30BF\u30FC\u30B2\u30C3\u30C8\u8A00\u8A9E\u30B3\u30FC\u30C9\uFF08\u4F8B\uFF1Azh-CN\u3001en\u3001ja\uFF09",translate_prompt:"\u7FFB\u8A33\u30D7\u30ED\u30F3\u30D7\u30C8",translate_prompt_desc:"AI\u7FFB\u8A33\u306E\u30D7\u30ED\u30F3\u30D7\u30C8\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3002{{text}}\u3068{{to}}\u3092\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u30FC\u3068\u3057\u3066\u4F7F\u7528"},sidebar:{title:"HiWords",empty_state:"\u5358\u8A9E\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u5358\u8A9E\u5E33\u306B\u8FFD\u52A0\u3059\u308B\u3068\u3053\u3053\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002",source_prefix:"\u51FA\u5178: ",found:"\u898B\u3064\u304B\u3063\u305F",words:"\u5358\u8A9E",no_definition:"\u5B9A\u7FA9\u306F\u3042\u308A\u307E\u305B\u3093\u3002",vocabulary_book:"\u5358\u8A9E",mastered:"\u7FD2\u5F97\u6E08\u307F",no_learning_words:"\u5B66\u7FD2\u3059\u308B\u5358\u8A9E\u306F\u3042\u308A\u307E\u305B\u3093",no_mastered_words:"\u7FD2\u5F97\u6E08\u307F\u306E\u5358\u8A9E\u306F\u3042\u308A\u307E\u305B\u3093"},commands:{refresh_vocabulary:"\u5358\u8A9E\u5E33\u3092\u66F4\u65B0",add_word:"HiWords: \u5358\u8A9E\u3092\u8FFD\u52A0",edit_word:"HiWords: \u5358\u8A9E\u3092\u7DE8\u96C6",show_sidebar:"HiWords \u30B5\u30A4\u30C9\u30D0\u30FC\u3092\u8868\u793A",add_selected_word:"\u5358\u8A9E\u3092\u8FFD\u52A0"},notices:{vocabulary_refreshed:"\u5358\u8A9E\u5E33\u3092\u66F4\u65B0\u3057\u307E\u3057\u305F",word_added:"\u5358\u8A9E\u3092\u5358\u8A9E\u5E33\u306B\u8FFD\u52A0\u3057\u307E\u3057\u305F",word_exists:"\u5358\u8A9E\u306F\u3059\u3067\u306B\u5358\u8A9E\u5E33\u306B\u5B58\u5728\u3057\u307E\u3059",error_adding_word:"\u5358\u8A9E\u306E\u8FFD\u52A0\u4E2D\u306B\u30A8\u30E9\u30FC\u304
Line truncated
|
||||
\u3053\u306E\u64CD\u4F5C\u306F\u5143\u306B\u623B\u305B\u307E\u305B\u3093\u3002`},actions:{expand:"\u5C55\u958B",collapse:"\u6298\u308A\u305F\u305F\u3080",mark_mastered:"\u7FD2\u5F97\u6E08\u307F\u306B\u3059\u308B",unmark_mastered:"\u7FD2\u5F97\u6E08\u307F\u3092\u89E3\u9664"},translate:{text_empty:"\u7FFB\u8A33\u30C6\u30AD\u30B9\u30C8\u306F\u7A7A\u306B\u3067\u304D\u307E\u305B\u3093",translating:"\u7FFB\u8A33\u4E2D...",failed:"\u7FFB\u8A33\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044",ai_not_configured:"AI\u7FFB\u8A33\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u8A2D\u5B9A\u3067API\u3092\u69CB\u6210\u3057\u3066\u304F\u3060\u3055\u3044",invalid_response:"\u7FFB\u8A33\u30B5\u30FC\u30D3\u30B9\u304C\u7121\u52B9\u306A\u30EC\u30B9\u30DD\u30F3\u30B9\u3092\u8FD4\u3057\u307E\u3057\u305F"},ai_errors:{word_empty:"\u5358\u8A9E\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044",api_key_not_configured:"API\u30AD\u30FC\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u30D7\u30E9\u30B0\u30A4\u30F3\u8A2D\u5B9A\u3067\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",invalid_response:"API\u304C\u7121\u52B9\u306A\u5FDC\u7B54\u5F62\u5F0F\u3092\u8FD4\u3057\u307E\u3057\u305F",api_key_invalid:"\u274C API\u30AD\u30FC\u304C\u7121\u52B9\u307E\u305F\u306F\u671F\u9650\u5207\u308C\u3067\u3059\u3002\u30D7\u30E9\u30B0\u30A4\u30F3\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044",rate_limit:"\u23F1\uFE0F API\u30EC\u30FC\u30C8\u5236\u9650\u3092\u8D85\u3048\u307E\u3057\u305F\u3002\u5F8C\u3067\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044",server_error:"\u{1F527} API\u30B5\u30FC\u30D3\u30B9\u304C\u4E00\u6642\u7684\u306B\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u5F8C\u3067\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044",network_error:"\u{1F310} \u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u63A5\u7D9A\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044",request_failed:"AI\u8F9E\u66F8\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u5931\u6557\u3057\u307E\u3057\u305F",invalid_json_format:"JSON \u5F62\u5F0F\u304C\u7121\u52B9\u3067\u3059\u3002\u69CB\u6587\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044"}};var xt={en:Ze,zh:et,es:tt,fr:it,de:rt,ja:at},We=class l{constructor(){this.app=null}static getInstance(){return l.instance||(l.instance=new l),l.instance}setApp(i){this.app=i}getCurrentLocale(){let i=(0,st.getLanguage)();return i.startsWith("zh")?"zh":i.startsWith("es")?"es":i.startsWith("fr")?"fr":i.startsWith("de")?"de":i.startsWith("ja")||i.startsWith("jp")?"ja":"en"}t(i){let e=this.getCurrentLocale(),t=xt[e],r=i.split("."),a=t;for(let s of r)if(a&&a[s]!==void 0)a=a[s];else return console.warn(`\u7FFB\u8BD1\u952E ${i} \u4E0D\u5B58\u5728\u4E8E ${e} \u8BED\u8A00\u5305\u4E2D`),i;return a}},Pe=We.getInstance(),d=l=>Pe.t(l);var ne=class{constructor(i,e){this.plugin=i,this.vocabularyManager=e,this.masteredGroupManager=new se(i.app,i.settings)}updateSettings(){this.masteredGroupManager.updateSettings(this.plugin.settings)}get isEnabled(){return this.plugin.settings.enableMasteredFeature}async markWordAsMastered(i,e,t){var r;if(!this.isEnabled)return new D.Notice(d("notices.mastered_feature_disabled")),!1;try{let a=(r=this.plugin.settings.masteredDetection)!=null?r:"group";if(!await this.updateWordMasteredStatus(i,e,!0))return new D.Notice(d("notices.update_word_status_failed")),!1;if(a==="group"){if(!await this.masteredGroupManager.moveToMasteredGroup(i,e))return await this.updateWordMasteredStatus(i,e,!1),new D.Notice(d("notices.move_to_mastered_group_failed")),!1}else if(!await this.vocabularyManager.setNodeColor(i,e,4))return await this.updateWordMasteredStatus(i,e,!1),new D.Notice(d("notices.update_word_status_failed")),!1;return this.plugin.refreshHighlighter(),this.plugin.app.workspace.trigger("hi-words:mastered-changed"),new D.Notice(d("notices.word_marked_as_mastered").replace("{0}",t)),!0}catch(a){return console.error("\u6807\u8BB0\u5DF2\u638C\u63E1\u5931\u8D25:",a),new D.Notice(d("notices.mark_mastered_failed")),!1}}async unmarkWordAsMastered(i,e,t){var r;if(!this.isEnabled)return new D.Notice(d("notices.mastered_feature_disabled")),!1;try{let a=(r=this.plugin.settings.masteredDetection)!=null?r:"group";if(!await this.updateWordMasteredStatus(i,e,!1))return new D.Notice(d("notices.update_word_status_failed")),!1;if(a==="group"){if(!await this.masteredGroupManager.removeFromMasteredGroup(i,e))return await this.updateWordMasteredStatus(i,e,!0),new D.Notice(d("notices.remove_from_mastered_group_failed")),!1}else if(!await this.vocabularyManager.setNodeColor(i,e,void 0))return await this.updateWordMasteredStatus(i,e,!0),new D.Notice(d("notices.update_word_status_failed")),!1;return this.plugin.refreshHighlighter(),this.plugin.app.workspace.trigger("hi-words:mastered-changed"),new D.Notice(d("n
Line truncated
|
||||
`)}),t.trim()||document.querySelectorAll(".pdf-container, .mod-pdf").forEach(a=>{let s=a.textContent||"";s.trim()&&(t+=s+`
|
||||
`)}),t.trim()}catch(e){return console.error("PDF \u6587\u672C\u63D0\u53D6\u5931\u8D25:",e),""}}buildSearchRegex(e){let t=this.escapeRegExp(e),r=/[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}]/u.test(e),a=r?`${t}`:`\\b${t}\\b`,s=r?"giu":"gi";return new RegExp(a,s)}bindInternalLinksAndTags(e,t,r){e.querySelectorAll("a.internal-link").forEach(a=>{var n;let s=a,o=(s.getAttribute("href")||((n=s.dataset)==null?void 0:n.href)||"").trim();o&&(s.addEventListener("mouseover",c=>{this.app.workspace.trigger("hover-link",{event:c,source:"hi-words",hoverParent:r,target:s,linktext:o,sourcePath:t})}),s.addEventListener("click",c=>{c.preventDefault(),c.stopPropagation(),this.app.workspace.openLinkText(o,t)}))}),e.querySelectorAll("a.tag").forEach(a=>{let s=a,o=(s.getAttribute("href")||s.textContent||"").trim();o&&s.addEventListener("click",n=>{n.preventDefault(),n.stopPropagation(),this.openOrUpdateSearch(o.startsWith("#")?o:`#${o}`)})})}openOrUpdateSearch(e){var t;try{let r=this.app.workspace.getLeavesOfType("search");if(r.length>0){let a=r[0].view;(t=a.setQuery)==null||t.call(a,e),this.app.workspace.revealLeaf(r[0]);return}new H.Notice(d("notices.enable_search_plugin")||"\u8BF7\u5148\u542F\u7528\u6838\u5FC3\u641C\u7D22\u63D2\u4EF6")}catch(r){console.error("\u6253\u5F00\u641C\u7D22\u5931\u8D25:",r)}}async navigateToSource(e){try{let t=this.app.vault.getAbstractFileByPath(e.source);t instanceof H.TFile&&(t.extension==="canvas"?await this.app.workspace.openLinkText(t.path,""):(await this.app.workspace.openLinkText(t.path,""),setTimeout(()=>{var a;let r=this.app.workspace.getActiveViewOfType(H.MarkdownView);if(r&&((a=r.file)==null?void 0:a.path)===t.path){let s=r.editor,n=s.getValue().toLowerCase().indexOf(e.word.toLowerCase());if(n!==-1){let c=s.offsetToPos(n);s.setCursor(c),s.scrollIntoView({from:c,to:c},!0)}}},100)))}catch(t){console.error("\u5BFC\u822A\u5230\u6E90\u6587\u4EF6\u5931\u8D25:",t)}}refresh(){this.currentFile=null,this.scheduleUpdate(0)}};var I=require("obsidian");var Y=class Y extends I.Component{constructor(e){super();this.activeTooltip=null;this.vocabularyManager=null;this.masteredService=null;this.eventHandlers={};this.currentTargetEl=null;this.hoverIntentTimer=null;this.lastShowTs=0;this.currentTooltipComponent=null;this.app=e.app,this.plugin=e,this.eventHandlers={mouseover:t=>this.handleMouseOver(t),mouseout:t=>this.handleMouseOut(t),scroll:(()=>this.removeTooltip()).bind(this),resize:(()=>this.removeTooltip()).bind(this)},this.registerEvents()}bindInternalLinksAndTags(e,t,r){e.querySelectorAll("a.internal-link").forEach(a=>{var n;let s=a,o=(s.getAttribute("href")||((n=s.dataset)==null?void 0:n.href)||"").trim();o&&(s.addEventListener("mouseover",c=>{this.app.workspace.trigger("hover-link",{event:c,source:"hi-words",hoverParent:r,target:s,linktext:o,sourcePath:t})}),s.addEventListener("click",c=>{c.preventDefault(),c.stopPropagation(),this.app.workspace.openLinkText(o,t),this.removeTooltip()}))}),e.querySelectorAll("a.tag").forEach(a=>{let s=a,o=(s.getAttribute("href")||s.textContent||"").trim();o&&s.addEventListener("click",n=>{n.preventDefault(),n.stopPropagation(),this.openOrUpdateSearch(o.startsWith("#")?o:`#${o}`),this.removeTooltip()})})}openOrUpdateSearch(e){var t;try{let r=this.app.workspace.getLeavesOfType("search");if(r.length>0){let a=r[0].view;(t=a.setQuery)==null||t.call(a,e),this.app.workspace.revealLeaf(r[0]);return}new I.Notice(d("notices.enable_search_plugin")||"\u8BF7\u5148\u542F\u7528\u6838\u5FC3\u641C\u7D22\u63D2\u4EF6")}catch(r){console.error("\u6253\u5F00\u641C\u7D22\u5931\u8D25:",r)}}setVocabularyManager(e){this.vocabularyManager=e}setMasteredService(e){this.masteredService=e}registerEvents(){this.registerDomEvent(document,"mouseover",this.eventHandlers.mouseover),this.registerDomEvent(document,"mouseout",this.eventHandlers.mouseout),this.registerDomEvent(window,"scroll",this.eventHandlers.scroll,{passive:!0}),this.registerDomEvent(window,"resize",this.eventHandlers.resize)}handleMouseOut(e){clearTimeout(this.tooltipHideTimeout),this.hoverIntentTimer!==null&&(clearTimeout(this.hoverIntentTimer),this.hoverIntentTimer=null);let t=e.target,r=e.relatedTarget;r&&this.activeTooltip&&(r===this.activeTooltip||this.activeTooltip.contains(r))||t&&r&&t.classList.contains("hi-words-highlight")&&r.classList.contains("hi-words-highlight")||t&&this.activeTooltip&&this.activeTooltip.contains(t)&&r&&r.classList.contains("hi-words-highlight")||(this.tooltipHideTimeout=window.setTimeout(()=>{this.removeTooltip()},80))}async renderSectionContent(e,t,r){var a,s;if(e.empty(),!t||t.trim()===""){e.textContent=d("sidebar.no_definition");return}try{let o=this.app.workspace.getActiveViewOfType(I.MarkdownView),n=o&&((a=o.file)==null?void 0:a.path)||((s=this.app.workspace.getActiveFile())==null?void 0:s.path)||"";this.currentTooltipComponent&&(this.removeChild(this.currentTooltipComponent),this.currentTooltipComponent=null);let c=new I.Component;this.addChild(c),this.currentTooltipComp
Line truncated
|
||||
|
||||
Text: {{text}}`,a.addEventListener("blur",async()=>{this.plugin.settings.translatePrompt=a.value,await this.plugin.saveSettings()})}addAutoLayoutSettings(){let{containerEl:e}=this;new w.Setting(e).setName(d("settings.auto_layout")).setHeading(),new w.Setting(e).setName(d("settings.enable_auto_layout")).setDesc(d("settings.enable_auto_layout_desc")).addToggle(t=>{var r;return t.setValue((r=this.plugin.settings.autoLayoutEnabled)!=null?r:!0).onChange(async a=>{this.plugin.settings.autoLayoutEnabled=a,await this.plugin.saveSettings()})}),new w.Setting(e).setName(d("settings.card_size")||"Card size").setDesc(d("settings.card_size_desc")||"Default width and height for canvas cards").addText(t=>{var r;return t.setPlaceholder("260").setValue(String((r=this.plugin.settings.cardWidth)!=null?r:260)).onChange(async a=>{let s=parseInt(a);!isNaN(s)&&s>0&&(this.plugin.settings.cardWidth=s,await this.plugin.saveSettings())})}).addText(t=>{var r;return t.setPlaceholder("120").setValue(String((r=this.plugin.settings.cardHeight)!=null?r:120)).onChange(async a=>{let s=parseInt(a);!isNaN(s)&&s>0&&(this.plugin.settings.cardHeight=s,await this.plugin.saveSettings())})})}display(){let{containerEl:e}=this;e.empty(),this.addVocabularyBooksSection(),this.addFileNodeParseModeSettings(),this.addHighlightingSection(),this.addLearningFeaturesSection(),this.addSelectionTranslateSection(),this.addAutoLayoutSettings()}addHighlightingSection(){let{containerEl:e}=this;new w.Setting(e).setName(d("settings.enable_auto_highlight")||"Highlighting").setHeading(),new w.Setting(e).setName(d("settings.enable_auto_highlight")).setDesc(d("settings.enable_auto_highlight_desc")).addToggle(t=>t.setValue(this.plugin.settings.enableAutoHighlight).onChange(async r=>{this.plugin.settings.enableAutoHighlight=r,await this.plugin.saveSettings(),this.plugin.refreshHighlighter()})),new w.Setting(e).setName(d("settings.show_definition_on_hover")).setDesc(d("settings.show_definition_on_hover_desc")).addToggle(t=>t.setValue(this.plugin.settings.showDefinitionOnHover).onChange(async r=>{this.plugin.settings.showDefinitionOnHover=r,await this.plugin.saveSettings()})),new w.Setting(e).setName(d("settings.enable_section_tabs")).setDesc(d("settings.enable_section_tabs_desc")).addToggle(t=>{var r;return t.setValue((r=this.plugin.settings.enableSectionTabs)!=null?r:!0).onChange(async a=>{this.plugin.settings.enableSectionTabs=a,await this.plugin.saveSettings(),this.plugin.app.workspace.trigger("hi-words:settings-changed")})}),new w.Setting(e).setName(d("settings.highlight_style")).setDesc(d("settings.highlight_style_desc")).addDropdown(t=>t.addOption("underline",d("settings.style_underline")).addOption("background",d("settings.style_background")).addOption("bold",d("settings.style_bold")).addOption("dotted",d("settings.style_dotted")).addOption("wavy",d("settings.style_wavy")).setValue(this.plugin.settings.highlightStyle).onChange(async r=>{this.plugin.settings.highlightStyle=r,await this.plugin.saveSettings(),this.plugin.refreshHighlighter()})),this.addHighlightScopeSettings()}ensureAIDictionaryConfig(){this.plugin.settings.aiDictionary||(this.plugin.settings.aiDictionary={apiUrl:"",apiKey:"",model:"",prompt:""})}async testAIConnection(){if(this.isTestingAIConnection)return;this.ensureAIDictionaryConfig(),this.isTestingAIConnection=!0;let e=new w.Notice(d("notices.testing_ai_connection")||"Testing AI connection...",0);try{let r=await new G(this.plugin.settings.aiDictionary).fetchDefinition("test","This is a test sentence for checking the AI connection.");if(e.hide(),!r.trim())throw new Error(d("ai_errors.invalid_response"));new w.Notice(d("notices.ai_connection_success")||"AI connection successful",5e3)}catch(t){e.hide(),console.error("AI connection test failed:",t);let r=t instanceof Error?t.message:d("notices.ai_connection_failed")||"AI connection test failed";new w.Notice(r,6e3)}finally{this.isTestingAIConnection=!1}}addLearningFeaturesSection(){var h,p;let{containerEl:e}=this;new w.Setting(e).setName(d("settings.enable_mastered_feature")||"Learning Features").setHeading(),new w.Setting(e).setName(d("settings.enable_mastered_feature")).setDesc(d("settings.enable_mastered_feature_desc")).addToggle(g=>g.setValue(this.plugin.settings.enableMasteredFeature).onChange(async f=>{this.plugin.settings.enableMasteredFeature=f,this.plugin.settings.showMasteredInSidebar=f,await this.plugin.saveSettings(),this.plugin.refreshHighlighter(),this.plugin.app.workspace.trigger("hi-words:mastered-changed"),this.display()}));let t=new w.Setting(e).setName(d("settings.mastered_detection")||"Mastered detection mode").setDesc(d("settings.mastered_detection_desc")||'Choose how to detect "mastered": by group or by color (green = 4)');t.addDropdown(g=>{var f;return g.addOption("group",d("settings.mode_group")||"Group mode").addOption("color",d("settings.mode_color")||"Color mode (green = 4)").setValue((f=this.plugin.settings.masteredDetection)!=null?f:"group").onChange(async m=>{var v;this.plug
Line truncated
|
||||
|
||||
Sentence: {{sentence}}
|
||||
|
||||
Format:
|
||||
1) Part of speech
|
||||
2) English definition
|
||||
3) Chinese translation
|
||||
4) Example sentence (use the original sentence if appropriate)`;s.placeholder=o,s.value=((h=this.plugin.settings.aiDictionary)==null?void 0:h.prompt)||o,s.rows=6,s.addEventListener("blur",async()=>{this.ensureAIDictionaryConfig(),this.plugin.settings.aiDictionary.prompt=s.value,await this.plugin.saveSettings()});let n=new w.Setting(e).setName(d("settings.ai_extra_params")||"Extra Request Parameters").setDesc(d("settings.ai_extra_params_desc")||"Add custom JSON parameters to AI request body (Advanced)");n.settingEl.addClass("hi-words-setting-textarea"),n.controlEl.empty();let u=n.controlEl.createDiv({cls:"hi-words-textarea-container"}).createEl("textarea",{cls:"hi-words-json-editor"});u.placeholder=d("settings.ai_extra_params_placeholder")||`{
|
||||
"temperature": 0.7,
|
||||
"top_p": 0.9
|
||||
}`,u.value=((p=this.plugin.settings.aiDictionary)==null?void 0:p.extraParams)||"{}",u.rows=6,u.addEventListener("blur",async()=>{let g=u.value.trim();try{g&&g!=="{}"&&JSON.parse(g),this.ensureAIDictionaryConfig(),this.plugin.settings.aiDictionary.extraParams=g||"{}",await this.plugin.saveSettings(),u.removeClass("hi-words-json-error")}catch(f){u.addClass("hi-words-json-error"),new w.Notice(d("ai_errors.invalid_json_format")||"Invalid JSON format, please check syntax")}}),new w.Setting(e).setName(d("settings.ai_test_connection")||"Test AI connection").setDesc(d("settings.ai_test_connection_desc")||"Send a small test request to verify your API URL, key, and model").addButton(g=>g.setButtonText(d("settings.ai_test_connection")||"Test AI connection").setCta().onClick(async()=>{await this.testAIConnection()}))}addVocabularyBooksSection(){let{containerEl:e}=this,t=e.createDiv({cls:"hi-words-add-book-container"});t.addEventListener("click",()=>this.showCanvasFilePicker());let r=t.createSpan({text:d("settings.add_vocabulary_book"),cls:"hi-words-add-book-label"}),a=t.createDiv({cls:"clickable-icon hi-words-add-book-icon"});(0,w.setIcon)(a,"plus-circle"),a.setAttribute("aria-label",d("settings.add_vocabulary_book")),this.displayVocabularyBooks(),this.displayStats()}async showCanvasFilePicker(){let e=this.app.vault.getFiles().filter(r=>r.extension==="canvas");if(e.length===0){new w.Notice(d("notices.no_canvas_files"));return}new Ie(this.app,e,async r=>{await this.addVocabularyBook(r)}).open()}async addVocabularyBook(e){if(this.plugin.settings.vocabularyBooks.some(o=>o.path===e.path)){new w.Notice(d("notices.book_already_exists"));return}if(!await new k(this.app,this.plugin.settings).validateCanvasFile(e)){new w.Notice(d("notices.invalid_canvas_file"));return}let s={path:e.path,name:e.basename,enabled:!0};this.plugin.settings.vocabularyBooks.push(s),await this.plugin.saveSettings(),await this.plugin.vocabularyManager.loadVocabularyBook(s),this.plugin.refreshHighlighter(),new w.Notice(d("notices.book_added").replace("{0}",s.name)),this.display()}displayVocabularyBooks(){let{containerEl:e}=this;if(this.plugin.settings.vocabularyBooks.length===0){e.createEl("p",{text:d("settings.no_vocabulary_books"),cls:"setting-item-description"});return}this.plugin.settings.vocabularyBooks.forEach((t,r)=>{let a=new w.Setting(e).setName(t.name).setDesc(`${d("settings.path")}: ${t.path}`),s=a.controlEl.createDiv({cls:"hi-words-book-icons"}),o=s.createDiv({cls:"clickable-icon"});(0,w.setIcon)(o,"refresh-cw"),o.setAttribute("aria-label",d("settings.reload_book")),o.addEventListener("click",async()=>{await this.plugin.vocabularyManager.reloadVocabularyBook(t.path),this.plugin.refreshHighlighter(),new w.Notice(d("notices.book_reloaded").replace("{0}",t.name))});let n=s.createDiv({cls:"clickable-icon mod-warning"});(0,w.setIcon)(n,"trash"),n.setAttribute("aria-label",d("settings.remove_vocabulary_book")),n.addEventListener("click",async()=>{this.plugin.settings.vocabularyBooks.splice(r,1),await this.plugin.saveSettings(),await this.plugin.vocabularyManager.loadAllVocabularyBooks(),this.plugin.refreshHighlighter(),new w.Notice(d("notices.book_removed").replace("{0}",t.name)),this.display()}),a.addToggle(c=>c.setValue(t.enabled).onChange(async u=>{t.enabled=u,await this.plugin.saveSettings(),u?await this.plugin.vocabularyManager.loadVocabularyBook(t):await this.plugin.vocabularyManager.loadAllVocabularyBooks(),this.plugin.refreshHighlighter()}))})}displayStats(){let{containerEl:e}=this,t=this.plugin.vocabularyManager.getStats(),r=e.createEl("div",{cls:"hi-words-stats"}),a=r.createEl("div",{cls:"stat-item"});a.createEl("div",{cls:"stat-value",text:t.totalBooks.toString()}),a.createEl("div",{cls:"stat-label",text:d("settings.total_books").split(":")[0]});let s=r.createEl("div",{cls:"stat-item"});s.createEl("div",{cls:"stat-value",text:t.enabledBooks.toString()}),s.createEl("div",{cls:"stat-label",text:d("settings.enabled_books").split(":")[0]});let o=r.createEl("div",{cls:"stat-item"});o.createEl("div",{cls:"stat-value",text:t.totalWords.toString()}),o.createEl("div",{cls:"stat-label",text:d("settings.total_words").split(":")[0]})}},Ie=class extends w.FuzzySuggestModal{constructor(i,e,t){super(i),this.files=e,this.onSelect=t,this.setPlaceholder(d("modals.select_canvas_file"))}getItems(){return this.files}getItemText(i){return i.path}onChooseItem(i,e){this.onSelect(i)}};var N=require("obsidian");var dt=require("obsidian");var ve=class{constructor(i){this.cache=new Map;this.CACHE_TTL=1800*1e3;this.abortController=null;this.settings=i}updateSettings(i){this.settings=i}async translate(i){if(!(i!=null&&i.trim()))throw new Error(d("translate.text_empty"));let e=i.trim(),t=`ai:${e}`,r=this.cache.get(t);if(r&&Date.now()-r.timestamp<this.CACHE_TTL)return r.content;let a;return a=await this.translateWithAI(e),this.cache.set(t,{content:a,timestamp:Date.now()}),a}abort(){this.abortController&&(this.abortController.abort(),this.abortController=null)}async tr
Line truncated
|
||||
|
||||
Text: {{text}}`).replace(/\{\{text\}\}/g,i).replace(/\{\{to\}\}/g,t),s=e.apiUrl,o=this.detectAPIType(s),n,c={"Content-Type":"application/json"},u=s;switch(o){case"claude":n={model:e.model,messages:[{role:"user",content:a}],max_tokens:1024},c["x-api-key"]=e.apiKey,c["anthropic-version"]="2023-06-01";break;case"gemini":n={contents:[{parts:[{text:a}]}]},u.includes(":generateContent")||(u=`${u.replace(/\/$/,"")}/models/${e.model}:generateContent`),u=`${u}?key=${e.apiKey}`;break;default:n={model:e.model,messages:[{role:"user",content:a}],temperature:.3,max_tokens:500},c.Authorization=`Bearer ${e.apiKey}`;break}let h=await(0,dt.requestUrl)({url:u,method:"POST",headers:c,body:JSON.stringify(n)});if(h.status>=400)throw new Error(`HTTP ${h.status}: ${h.text}`);let p=h.json,g;switch(o){case"claude":g=(v=(m=p==null?void 0:p.content)==null?void 0:m[0])==null?void 0:v.text;break;case"gemini":g=(P=(T=(y=(b=(_=p==null?void 0:p.candidates)==null?void 0:_[0])==null?void 0:b.content)==null?void 0:y.parts)==null?void 0:T[0])==null?void 0:P.text;break;default:g=(E=(V=(F=p==null?void 0:p.choices)==null?void 0:F[0])==null?void 0:V.message)==null?void 0:E.content;break}if(!g)throw new Error(d("translate.invalid_response"));let f=g.replace(/<think>[\s\S]*?<\/think>/gi,"").trim();return f||(f=g.trim()),f}detectAPIType(i){let e=i.toLowerCase();return e.includes("anthropic")?"claude":e.includes("googleapis")||e.includes("generativelanguage")?"gemini":"openai"}clearCache(){this.cache.clear()}};function ct(l,i){if(!l||i<0||i>l.length)return"";let e=/[.!?。!?\n]/,t=i;for(;t>0;){let s=l[t-1];if(e.test(s))break;t--}let r=i;for(;r<l.length;){let s=l[r];if(e.test(s)){r++;break}r++}return l.substring(t,r).trim()}function Z(l){try{let i=l.getCursor(),e=l.getValue(),t=0;for(let r=0;r<i.line;r++)t+=l.getLine(r).length+1;return t+=i.ch,ct(e,t)}catch(i){return console.error("Failed to extract sentence from editor (multiline):",i),""}}function be(l){if(!l||l.rangeCount===0)return"";try{let i=l.getRangeAt(0),e=l.toString().trim();if(!e)return"";let t=i.startContainer;if(t.nodeType===Node.ELEMENT_NODE){let n=t.childNodes[i.startOffset];n&&n.nodeType===Node.TEXT_NODE&&(t=n)}let r=Mt(t);if(!r)return"";let a=r.textContent||"",s=Wt(r,t,i.startOffset,e);if(s===-1)return"";let o=s+Math.floor(e.length/2);return ct(a,o)}catch(i){return console.error("Failed to extract sentence from selection:",i),""}}function Mt(l){var t,r;let i=l;i.nodeType===Node.TEXT_NODE&&(i=i.parentNode);let e=null;for(;i&&i.nodeType!==Node.DOCUMENT_NODE;){if(i.nodeType===Node.ELEMENT_NODE){let a=i,s=(t=a.tagName)==null?void 0:t.toLowerCase();if(s==="p"||s==="li"||s==="blockquote")return a;if(s==="div"){let o=((r=a.textContent)==null?void 0:r.length)||0;o>0&&o<5e3&&(e=a)}if(a.classList.contains("textLayer"))return a;if(a.classList.contains("page")&&a.closest(".pdf-container")){let o=a.querySelector(".textLayer");if(o)return o}}i=i.parentNode}return e}function Wt(l,i,e,t){var n;let r=document.createTreeWalker(l,NodeFilter.SHOW_TEXT,null),a=0,s;for(;s=r.nextNode();){if(s===i||s.contains(i))return a+e;a+=((n=s.textContent)==null?void 0:n.length)||0}return(l.textContent||"").indexOf(t)}var we=class we extends N.Component{constructor(e){super();this.activePopover=null;this.debounceTimer=null;this.currentTranslateText="";this.isTranslating=!1;this.plugin=e,this.translationService=new ve(e.settings)}onload(){this.registerDomEvent(document,"mouseup",e=>{this.handleMouseUp(e)}),this.registerDomEvent(document,"mousedown",e=>{this.activePopover&&!this.activePopover.contains(e.target)&&this.removePopover()}),this.registerDomEvent(window,"scroll",()=>this.removePopover(),{passive:!0}),this.registerDomEvent(window,"resize",()=>this.removePopover()),this.registerDomEvent(document,"keydown",e=>{e.key==="Escape"&&this.activePopover&&this.removePopover()})}updateSettings(){this.translationService.updateSettings(this.plugin.settings)}handleMouseUp(e){this.plugin.settings.enableSelectionTranslate&&(this.activePopover&&this.activePopover.contains(e.target)||(this.debounceTimer!==null&&clearTimeout(this.debounceTimer),this.debounceTimer=window.setTimeout(()=>{this.debounceTimer=null,this.tryShowPopover(e)},we.DEBOUNCE_MS)))}tryShowPopover(e){var n;let t=this.getSelectedText();if(!t||t.length===0||t.length>500)return;let r=e.target;if((n=r==null?void 0:r.closest)!=null&&n.call(r,".hi-words-highlight")||this.currentTranslateText===t&&this.activePopover)return;this.currentTranslateText=t;let a=window.getSelection();if(!a||a.rangeCount===0)return;let o=a.getRangeAt(0).getBoundingClientRect();o.width<2&&o.height<2||this.showPopover(t,o,e)}getSelectedText(){let e=this.plugin.app.workspace.getActiveViewOfType(N.MarkdownView),t=e==null?void 0:e.editor,r=e==null?void 0:e.getMode();if(t&&r==="source")return t.getSelection().trim();let a=window.getSelection();return(a==null?void 0:a.toString().trim())||""}getSentence(){let e=this.plugin.app.workspace.getActiveViewOfType(N.MarkdownView),t=e==null?void 0:e.editor,
Line truncated
|
||||
|
||||
/* nosourcemap */
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "hi-words",
|
||||
"name": "HiWords",
|
||||
"version": "0.5.7",
|
||||
"minAppVersion": "1.8.0",
|
||||
"description": "Effortlessly grow your vocabulary as you read, with automatic highlighting and translation of unfamiliar words.",
|
||||
"author": "Kai",
|
||||
"authorUrl": "https://github.com/CatMuse",
|
||||
"fundingUrl": "https://ko-fi.com/catmuse",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
+1367
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user