diff --git a/.gitignore b/.gitignore index be175d61c5..d7a44e8195 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,4 @@ yarn.lock /app/out /app/dist-electron **/node_modules +**.pyc diff --git a/.vscode/Sillot.code-workspace b/.vscode/Sillot.code-workspace index 246631a25e..3389b43c78 100644 --- a/.vscode/Sillot.code-workspace +++ b/.vscode/Sillot.code-workspace @@ -14,7 +14,7 @@ }, { "path": "../_vscode_plugin/Sillot", // 列出子文件夹,在父文件夹的 setting.json 添加隐藏(排除) - "name": "汐洛 VSC 插件🤍/_vscode_plugin/Sillot 🗂️" + "name": "汐洛 VSC 扩展🤍/_vscode_plugin/Sillot 🗂️" }, { "path": "../docs/starlight", // 列出子文件夹,在父文件夹的 setting.json 添加隐藏(排除) @@ -32,15 +32,21 @@ "path": "../_sili", // 列出子文件夹,在父文件夹的 setting.json 添加隐藏(排除) "name": "司丽🤍/_sili 🗂️" }, + { + "path": "../../Sillot-Be", // 列出子文件夹,在父文件夹的 setting.json 添加隐藏(排除) + "name": "汐洛 Chrome 扩展🤍../Sillot-Be 🗂️" + }, { "path": "../_pkgs/siyuan", // 思源本源 "name": "思源🤍../siyuan 🗂️" } ], "settings": { - // "files.associations": { - // "*.sy": "json" - // }, + "files.associations": { + // "*.sy": "json", + "*.tmTheme": "xml", + "*.tpl": "html" + }, "workbench.editor.wrapTabs": true, "search.exclude": { "**/.history": true diff --git a/_vscode_plugin/Sillot/grammars/sy.tmLanguage.json b/_vscode_plugin/Sillot/grammars/sy.tmLanguage.json index 42833f30e8..3f03f11776 100644 --- a/_vscode_plugin/Sillot/grammars/sy.tmLanguage.json +++ b/_vscode_plugin/Sillot/grammars/sy.tmLanguage.json @@ -42,15 +42,23 @@ ] }, "pair": { - "match": "\\s*\"(\\\\.|[^\"])*\"\\s*:\\s*\"(\\\\.|[^\"])*\"\\s*", - "captures": { - "1": { + "begin": "\"", + "end": "\"\\s*:\\s*\"", + "beginCaptures": { + "0": { "name": "string.quoted.double.json" - }, - "2": { + } + }, + "endCaptures": { + "0": { "name": "string.quoted.double.json" } - } + }, + "patterns": [ + { + "include": "#value" + } + ] }, "array": { "begin": "\\[", diff --git a/_vscode_plugin/Sillot/package.json b/_vscode_plugin/Sillot/package.json index 8012a051d3..4d2caf24ff 100644 --- a/_vscode_plugin/Sillot/package.json +++ b/_vscode_plugin/Sillot/package.json @@ -2,7 +2,7 @@ "name": "sillot", "displayName": "汐洛 Sillot", "description": "汐洛(Sillot)孵化自思源笔记(siyuan-note),致力于服务智慧新彖乄。此插件为汐洛官方插件,提供多功能一体化集成。", - "version": "0.1.1610", + "version": "0.1.1700", "preview": true, "repository": "https://github.com/Hi-Windom/Sillot", "publisher": "Hi-Windom", @@ -42,10 +42,23 @@ "onLanguage:less", "onLanguage:scss", "onLanguage:python", + "onLanguage:xml", "workspaceContains:**/.editorconfig" ], "main": "./dist/extension.js", "contributes": { + "themes": [ + { + "label": "Sample Light", + "uiTheme": "vs", + "path": "./theme/Sample_Light.tmTheme" + }, + { + "label": "Sample Dark", + "uiTheme": "vs-dark", + "path": "./theme/Sample_Dark.tmTheme" + } + ], "configuration": { "type": "object", "title": "汐洛插件配置", @@ -70,6 +83,16 @@ } }, "commands": [ + { + "command": "extension.getGitHubUser", + "title": "Get GitHub User", + "category": "GitHub 认证 (共享)" + }, + { + "command": "sillot.getGitHubUser", + "title": "Get GitHub User", + "category": "GitHub 认证 (独占)" + }, { "command": "sillot.helloWorld", "title": "Hello World", @@ -181,6 +204,47 @@ "configuration": "./languages/_sy.language-configuration.json" } ], + "codeActions": [ + { + "languages": [ + "sy" + ], + "provider": "SyCodeActionProvider", + "providedCodeActionKinds": [ + "quickfix", + "refactor", + "source", + "organizeImports" + ], + "actions": { + "kind": "quickfix", + "title": "Fix sy error", + "description": "Fixes a JSON error in the current file" + } + } + ], + "semanticTokenTypes": [ + { + "id": "type", + "description": "Type names", + "defaultLegend": { + "tokenType": "type" + } + }, + { + "id": "trailingComma", + "description": "Trailing commas in JSON", + "defaultLegend": { + "tokenType": "trailingComma" + } + } + ], + "semanticTokenModifiers": [ + { + "id": "error", + "description": "Indicates an error" + } + ], "grammars": [ { "language": "sy", @@ -239,6 +303,7 @@ "webpack-cli": "^5.1.4" }, "dependencies": { + "@octokit/rest": "^20.1.0", "fs-extra": "^11.2.0", "json5": "^2.2.3" } diff --git a/_vscode_plugin/Sillot/src/auth/github.ts b/_vscode_plugin/Sillot/src/auth/github.ts new file mode 100644 index 0000000000..796bbcffce --- /dev/null +++ b/_vscode_plugin/Sillot/src/auth/github.ts @@ -0,0 +1,63 @@ +import * as vscode from 'vscode'; +import * as Octokit from '@octokit/rest'; + +const GITHUB_AUTH_PROVIDER_ID = 'github'; +// The GitHub Authentication Provider accepts the scopes described here: +// https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/ +const SCOPES = ['user:email']; + +export class Credentials { + private octokit: Octokit.Octokit | undefined; + + async initialize(context: vscode.ExtensionContext): Promise { + this.registerListeners(context); + await this.setOctokit(); + } + + private async setOctokit() { + /** + * By passing the `createIfNone` flag, a numbered badge will show up on the accounts activity bar icon. + * An entry for the sample extension will be added under the menu to sign in. This allows quietly + * prompting the user to sign in. + * */ + const session = await vscode.authentication.getSession(GITHUB_AUTH_PROVIDER_ID, SCOPES, { createIfNone: false }); + + if (session) { + this.octokit = new Octokit.Octokit({ + auth: session.accessToken + }); + + return; + } + + this.octokit = undefined; + } + + registerListeners(context: vscode.ExtensionContext): void { + /** + * Sessions are changed when a user logs in or logs out. + */ + context.subscriptions.push(vscode.authentication.onDidChangeSessions(async e => { + if (e.provider.id === GITHUB_AUTH_PROVIDER_ID) { + await this.setOctokit(); + } + })); + } + + async getOctokit(): Promise { + if (this.octokit) { + return this.octokit; + } + + /** + * When the `createIfNone` flag is passed, a modal dialog will be shown asking the user to sign in. + * Note that this can throw if the user clicks cancel. + */ + const session = await vscode.authentication.getSession(GITHUB_AUTH_PROVIDER_ID, SCOPES, { createIfNone: true }); + this.octokit = new Octokit.Octokit({ + auth: session.accessToken + }); + + return this.octokit; + } +} diff --git a/_vscode_plugin/Sillot/src/extension.ts b/_vscode_plugin/Sillot/src/extension.ts index 08124ff70c..d24774ffaa 100644 --- a/_vscode_plugin/Sillot/src/extension.ts +++ b/_vscode_plugin/Sillot/src/extension.ts @@ -2,7 +2,7 @@ import * as vscode from "vscode"; import fs from "fs-extra"; import json5 from "json5"; import { Log } from "./utils/log"; -import { SyCompletionItemProvider, SyHoverProvider } from "./provider/sy"; +import { SyCodeActionProvider, SyCompletionItemProvider, SyHoverProvider, SySemanticTokensProvider } from "./provider/sy"; import { IssueCompletionItems } from "./provider/db/Issue"; import { UserCompletionItems } from "./provider/db/User"; import { ClassCompletionItems } from "./provider/db/Class"; @@ -32,6 +32,9 @@ import { TestViewDragAndDrop } from "./testViewDragAndDrop"; import { JsonOutlineProvider } from "./jsonOutline"; import { subscribeToDocumentChanges, EMOJI_MENTION } from "./diagnostics"; import { CodelensProvider } from "./CodelensProvider"; +import { GenericCompletionItemProvider } from "./provider/_Generic"; +import { Credentials } from "./auth/github"; +import { ColorPickerProvider } from "./provider/_ColorPicker"; let lastChangedDocument: vscode.TextDocument | null = null; let myWebviewPanel: vscode.WebviewPanel | undefined; @@ -73,7 +76,7 @@ async function loadCompletionItemsFromFile(filePath: string): Promise 0 ? vscode.workspace.workspaceFolders[0].uri.fsPath @@ -278,8 +281,14 @@ export function activate(context: vscode.ExtensionContext) { // context.subscriptions.push(disposable3); context.subscriptions.push(测试序列化字典); context.subscriptions.push(测试反序列化字典); + context.subscriptions.push(vscode.languages.registerCompletionItemProvider('*', new GenericCompletionItemProvider())); context.subscriptions.push(vscode.languages.registerHoverProvider("sy", new SyHoverProvider())); context.subscriptions.push(vscode.languages.registerCompletionItemProvider("sy", new SyCompletionItemProvider())); + context.subscriptions.push(vscode.languages.registerCodeActionsProvider({ language: 'sy' }, new SyCodeActionProvider())); + context.subscriptions.push(vscode.languages.registerDocumentSemanticTokensProvider({ language: 'sy' }, new SySemanticTokensProvider(), new vscode.SemanticTokensLegend([ + 'type', + 'trailingComma', // 表示尾随逗号错误 + ]))); // context.subscriptions.push(vscode.languages.registerCompletionItemProvider("dosc", new SyCompletionItemProvider())); const disposable5 = vscode.commands.registerCommand("sillot.pickEXE", () => { @@ -344,6 +353,30 @@ export function activate(context: vscode.ExtensionContext) { vscode.commands.registerCommand("codelens-sample.codelensAction", (args: any) => { vscode.window.showInformationMessage(`CodeLens action clicked with args=${args}`); }); + const credentials = new Credentials(); + await credentials.initialize(context); + const disposable99 = vscode.commands.registerCommand('extension.getGitHubUser', async () => { + /** + * Octokit (https://github.com/octokit/rest.js#readme) is a library for making REST API + * calls to GitHub. It provides convenient typings that can be helpful for using the API. + * + * Documentation on GitHub's REST API can be found here: https://docs.github.com/en/rest + */ + const octokit = await credentials.getOctokit(); + const userInfo = await octokit.users.getAuthenticated(); + + vscode.window.showInformationMessage(`Logged into GitHub as ${userInfo.data.login}`); + }); + const disposable88 = vscode.commands.registerCommand('sillot.getGitHubUser', async () => { + vscode.window.showInformationMessage("这个还没有实现嘞"); + }); + context.subscriptions.push(disposable88); + context.subscriptions.push(disposable99); + + context.subscriptions.push(vscode.languages.registerColorProvider({ language: 'xml' }, new ColorPickerProvider())); // 记得在 .vscode 中把 .tmTheme 文件视为 xml + context.subscriptions.push(vscode.languages.registerColorProvider({ language: 'json' }, new ColorPickerProvider())); + context.subscriptions.push(vscode.languages.registerColorProvider({ language: 'typescript' }, new ColorPickerProvider())); + context.subscriptions.push(vscode.languages.registerColorProvider({ language: 'html' }, new ColorPickerProvider())); } // 当你的扩展被禁用时,这个方法将被调用 diff --git a/_vscode_plugin/Sillot/src/provider/_ColorPicker.ts b/_vscode_plugin/Sillot/src/provider/_ColorPicker.ts new file mode 100644 index 0000000000..6db447dd5e --- /dev/null +++ b/_vscode_plugin/Sillot/src/provider/_ColorPicker.ts @@ -0,0 +1,100 @@ +import * as vscode from "vscode"; +import { padHexColorToVsColor, vscodeColorToHex } from "../utils/color"; +import { Log } from "../utils/log"; + +export class ColorPickerProvider implements vscode.DocumentColorProvider { + private colors: { [key: string]: vscode.Color } = {}; + + /** + * 这里可以添加逻辑来解析文档中的颜色信息 + * 例如,可以解析文档中的字符串,并将它们转换为颜色对象 + * 然后返回这些颜色对象 + * 它将在颜色字符串前面显示一个颜色小方格 + */ + public provideDocumentColors(document: vscode.TextDocument, token: vscode.CancellationToken): Thenable { + const colorInfo: vscode.ColorInformation[] = []; + // 正则表达式以支持HEX、RGB和RGBA颜色码。/gi:这是全局不区分大小写的匹配,它匹配所有可能的匹配项,并且不区分大小写 + // 注意 HEX 末尾额外匹配了用于阻断的字符 + const colorRegex = + /#(([0-9A-F]{8}[^0-9A-Z])|([0-9A-F]{6}[^0-9A-Z])|([0-9A-F]{4}[^0-9A-Z])|([0-9A-F]{3}[^0-9A-Z]))|(RGBA\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*(\d*(?:\.\d+)?)\))|(RGB\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\))/gi; + + const text = document.getText(); + // biome-ignore lint/suspicious/noImplicitAnyLet: + let match; + + // biome-ignore lint/suspicious/noAssignInExpressions: + while ((match = colorRegex.exec(text)) !== null) { + // 使用了while循环和RegExp.prototype.exec方法来迭代所有匹配项。每次迭代后,exec方法会更新正则表达式的lastIndex属性,该属性决定了下一次匹配的起始位置。 + // 这样,每次匹配都会得到正确的range,因为它基于当前匹配项的inde,而不是使用text.indexOf(match)来找到颜色字符串的首次出现位置。 + if (token.isCancellationRequested) { + return Promise.resolve([]); // 如果请求被取消,则返回空数组,避免在取消请求后继续执行不必要的计算 + } + + let color: vscode.Color | undefined; + let range: vscode.Range | undefined; + Log.d(match.toString()); + if (match[14]) { + // RGB颜色 + const startIndex = match.index; + range = new vscode.Range(document.positionAt(startIndex), document.positionAt(startIndex + match[0].length)); + const red = Number.parseInt(match[12], 10) / 255; + const green = Number.parseInt(match[13], 10) / 255; + const blue = Number.parseInt(match[14], 10) / 255; + Log.i(`rgb(${red}, ${green}, ${blue})`); + if (red <= 1 && green <= 1 && blue <= 1) { + color = new vscode.Color(red, green, blue, 1); // RGB没有透明度,默认为不透明 + } + } else if (match[10]) { + // RGBA颜色 + const startIndex = match.index; + range = new vscode.Range(document.positionAt(startIndex), document.positionAt(startIndex + match[0].length)); + const red = Number.parseInt(match[7], 10) / 255; + const green = Number.parseInt(match[8], 10) / 255; + const blue = Number.parseInt(match[9], 10) / 255; + const alpha = Number.parseFloat(match[10]); + Log.i(`rgba(${red}, ${green}, ${blue}, ${alpha})`); + if (red <= 1 && green <= 1 && blue <= 1) { + color = new vscode.Color(red, green, blue, alpha); + } + } else if (match[1]) { + // HEX颜色 + const hex = match[1].toUpperCase().slice(0, -1); // 去掉最后一个用于阻断正则匹配的字符 + const startIndex = match.index; + range = new vscode.Range(document.positionAt(startIndex), document.positionAt(startIndex + hex.length + 1)); // 因为 match[0] 不包含开头的井号,所以这里要+1 + color = padHexColorToVsColor(hex); + } + + if (color && range) { + const colorKey = `${color.red.toString()}${color.green.toString()}${color.blue.toString()}${color.alpha.toString()}`; + if (!this.colors[colorKey]) { + this.colors[colorKey] = color; + } + colorInfo.push(new vscode.ColorInformation(range, this.colors[colorKey])); + } + } + + return Promise.resolve(colorInfo); + } + + /** + * 这里可以添加逻辑来创建颜色选择器 + * 例如,可以创建一个颜色选择器,并将其呈现给用户 + * 然后返回这些颜色选择器 + */ + public provideColorPresentations( + color: vscode.Color, + context: { document: vscode.TextDocument; range: vscode.Range }, + token: vscode.CancellationToken + ): Thenable { + // 点击颜色选择器的标题可以切换方案 + const colorPresentations: vscode.ColorPresentation[] = []; + colorPresentations.push(new vscode.ColorPresentation(vscodeColorToHex(color))); + + const rgba = `rgba(${Math.round(color.red * 255)}, ${Math.round(color.green * 255)}, ${Math.round(color.blue * 255)}, ${ + color.alpha + })`; + colorPresentations.push(new vscode.ColorPresentation(rgba)); + + return Promise.resolve(colorPresentations); + } +} diff --git a/_vscode_plugin/Sillot/src/provider/_Generic.ts b/_vscode_plugin/Sillot/src/provider/_Generic.ts new file mode 100644 index 0000000000..f5fe8a9ead --- /dev/null +++ b/_vscode_plugin/Sillot/src/provider/_Generic.ts @@ -0,0 +1,20 @@ +import type * as vscode from "vscode"; +import { GenericCompletionItems_1 } from "./db/_GenericEntity"; + +export class GenericCompletionItemProvider implements vscode.CompletionItemProvider { + public provideCompletionItems( + document: vscode.TextDocument, + position: vscode.Position, + token: vscode.CancellationToken, + context: vscode.CompletionContext + ): vscode.ProviderResult { + return GenericCompletionItems_1; + } + + public resolveCompletionItem?( + item: vscode.CompletionItem, + token: vscode.CancellationToken + ): vscode.ProviderResult { + return item; + } +} diff --git a/_vscode_plugin/Sillot/src/provider/db/_GenericEntity.ts b/_vscode_plugin/Sillot/src/provider/db/_GenericEntity.ts new file mode 100644 index 0000000000..1df5810fbe --- /dev/null +++ b/_vscode_plugin/Sillot/src/provider/db/_GenericEntity.ts @@ -0,0 +1,40 @@ +import * as vscode from "vscode"; +const KS = vscode.CompletionItemKind; + +/** + * 通用自动完成项组1 + */ +export const GenericCompletionItems_1: Array = [ + { + label: "hi-windom", + insertText: "Hi-Windom", + documentation: "海文东", + detail: "虚拟组织", + kind: KS.User, + }, + { + label: "sillot", + insertText: "Sillot", + documentation: "汐洛", + detail: "汐洛(Sillot)孵化自思源笔记(siyuan-note),致力于服务智慧新彖乄", + kind: KS.User, + }, + { + label: "siyuan", + documentation: "思源", + detail: "", + kind: KS.User, + }, + { + label: "siyuan-note/siyuan", + documentation: "Github 思源笔记组织的思源仓库", + detail: "", + kind: KS.User, + }, + { + label: "Hi-Windom/Sillot", + documentation: "Github 海文东组织的汐洛仓库", + detail: "", + kind: KS.User, + }, +]; diff --git a/_vscode_plugin/Sillot/src/provider/sy.ts b/_vscode_plugin/Sillot/src/provider/sy.ts index 0974ed695b..1fa9d49bbd 100644 --- a/_vscode_plugin/Sillot/src/provider/sy.ts +++ b/_vscode_plugin/Sillot/src/provider/sy.ts @@ -20,6 +20,7 @@ import { VariableCompletionItems } from "./db/Variable"; import { FieldCompletionItems } from "./db/Field"; import { FunctionCompletionItems } from "./db/Function"; import { MethodCompletionItems } from "./db/Method"; +import { GenericCompletionItems_1 } from "./db/_GenericEntity"; export class SyHoverProvider implements vscode.HoverProvider { public provideHover( @@ -62,38 +63,31 @@ export class SyCompletionItemProvider implements vscode.CompletionItemProvider { token: vscode.CancellationToken, context: vscode.CompletionContext ): vscode.ProviderResult { - const completionItems: vscode.CompletionItem[] = []; - - const arraysToMerge = [ - IssueCompletionItems, - UserCompletionItems, - TypeParameterCompletionItems, - OperatorCompletionItems, - EventCompletionItems, - StructCompletionItems, - ConstantCompletionItems, - EnumMemberCompletionItems, - FolderCompletionItems, - FileCompletionItems, - SnippetCompletionItems, - KeywordCompletionItems, - EnumCompletionItems, - PropertyCompletionItems, - ModuleCompletionItems, - InterfaceCompletionItems, - ClassCompletionItems, - VariableCompletionItems, - FieldCompletionItems, - FunctionCompletionItems, - MethodCompletionItems, + const completionItems = [ + ...GenericCompletionItems_1, + ...IssueCompletionItems, + ...UserCompletionItems, + ...TypeParameterCompletionItems, + ...OperatorCompletionItems, + ...EventCompletionItems, + ...StructCompletionItems, + ...ConstantCompletionItems, + ...EnumMemberCompletionItems, + ...FolderCompletionItems, + ...FileCompletionItems, + ...SnippetCompletionItems, + ...KeywordCompletionItems, + ...EnumCompletionItems, + ...PropertyCompletionItems, + ...ModuleCompletionItems, + ...InterfaceCompletionItems, + ...ClassCompletionItems, + ...VariableCompletionItems, + ...FieldCompletionItems, + ...FunctionCompletionItems, + ...MethodCompletionItems, ]; - for (const arr of arraysToMerge) { - for (const i of arr) { - completionItems.push(i); - } - } - // 示例 const _ = new vscode.CompletionItem("绛亽主控巴枀普通开放平台"); _.kind = vscode.CompletionItemKind.User; @@ -107,3 +101,78 @@ export class SyCompletionItemProvider implements vscode.CompletionItemProvider { return completionItems; } } + +export class SyCodeActionProvider implements vscode.CodeActionProvider { + provideCodeActions(document: vscode.TextDocument, range: vscode.Range, context: vscode.CodeActionContext, token: vscode.CancellationToken): vscode.ProviderResult<(vscode.Command | vscode.CodeAction)[]> { + // 过滤出当前范围内的诊断 + const diagnostics = context.diagnostics.filter(d => d.range.intersection(range) !== null); + + // 为每个诊断创建代码操作 + const codeActions: vscode.CodeAction[] = diagnostics.map(diagnostic => { + const action = new vscode.CodeAction('Fix JSON error', vscode.CodeActionKind.QuickFix); + action.edit = new vscode.WorkspaceEdit(); + action.edit.delete(document.uri, diagnostic.range); + action.diagnostics = [diagnostic]; + return action; + }); + + return codeActions; + } +} + +export class SySemanticTokensProvider implements vscode.DocumentSemanticTokensProvider { + onDidChangeSemanticTokens?: vscode.Event | undefined; + provideDocumentSemanticTokens(document: vscode.TextDocument, token: vscode.CancellationToken): vscode.ProviderResult { + throw new Error("Method not implemented."); + } + provideDocumentSemanticTokensEdits?(document: vscode.TextDocument, previousResultId: string, token: vscode.CancellationToken): vscode.ProviderResult { + throw new Error("Method not implemented."); + } + provideSemanticTokens(document: vscode.TextDocument, token: vscode.CancellationToken): vscode.ProviderResult { + const tokensBuilder = new vscode.SemanticTokensBuilder(); + + const text = document.getText(); + const lines = text.split('\n'); + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + const errors = this.checkLine(line, i); + for (const error of errors) { + tokensBuilder.push(error.range.start.line, error.range.start.character, error.range.end.character - error.range.start.character, error.type, 0); + } + } + + return tokensBuilder.build(); + } + + private checkLine(line: string, lineNumber: number): { range: vscode.Range; type: number }[] { + const errors: { range: vscode.Range; type: number }[] = []; + + // 添加语法检查逻辑,比如检查尾随逗号 + if (line.trim().endsWith(',')) { + const index = line.lastIndexOf(','); + errors.push({ + range: new vscode.Range(lineNumber, index, lineNumber, index + 1), + type: 1, // 使用一个唯一的类型来表示尾随逗号错误 + }); + } + + return errors; + } +} + +export function checkSpelling(document: vscode.TextDocument): vscode.Diagnostic[] { + const diagnostics: vscode.Diagnostic[] = []; + + for (let i = 0; i < document.lineCount; i++) { + const line = document.lineAt(i); + const words = line.text.split(/\s+/); + for (const word of words) { + if (!/^[a-zA-Z]+$/.test(word)) { + const range = new vscode.Range(line.range.start, line.range.start.translate(0, word.length)); + diagnostics.push(new vscode.Diagnostic(range, 'Invalid word', vscode.DiagnosticSeverity.Error)); + } + } + } + + return diagnostics; +} diff --git a/_vscode_plugin/Sillot/src/provider/yaml.ts b/_vscode_plugin/Sillot/src/provider/yaml.ts new file mode 100644 index 0000000000..6c04f45533 --- /dev/null +++ b/_vscode_plugin/Sillot/src/provider/yaml.ts @@ -0,0 +1,3 @@ +import * as vscode from "vscode"; + +// github workflows diff --git a/_vscode_plugin/Sillot/src/utils/color.ts b/_vscode_plugin/Sillot/src/utils/color.ts new file mode 100644 index 0000000000..7862532e4b --- /dev/null +++ b/_vscode_plugin/Sillot/src/utils/color.ts @@ -0,0 +1,60 @@ +import * as vscode from "vscode"; +import { Log } from "./log"; + +export function vscodeColorToHex(color: vscode.Color): string { + const red = Math.round(color.red * 255) + .toString(16) + .padStart(2, "0"); + const green = Math.round(color.green * 255) + .toString(16) + .padStart(2, "0"); + const blue = Math.round(color.blue * 255) + .toString(16) + .padStart(2, "0"); + const alpha = Math.round(color.alpha * 255) + .toString(16) + .padStart(2, "0"); + + return color.alpha === 1 ? `#${red}${green}${blue}` : `#${red}${green}${blue}${alpha}`; +} + +export function padHexColorToVsColor(hex: string): vscode.Color { + let _hex = hex; + + // 移除开头的'#' + if (_hex.startsWith("#")) { + _hex = _hex.substring(1); + } + + // 根据原始长度填充前导零 + switch (_hex.length) { + case 3: + _hex = _hex + .split("") + .map((c: string) => c + c) + .join("") + "FF"; + break; + case 4: + _hex = _hex.slice(0,3) + .split("") + .map((c: string) => c + c) + .join("") + _hex.slice(-1) + _hex.slice(-1); + break; + case 6: + _hex = _hex + "FF"; + break; + case 8: + break; + default: + throw new Error("Invalid hex color length"); + } + Log.i(`${hex}->${_hex}`) + // 解析十六进制颜色值 + const red = Number.parseInt(_hex.slice(0, 2), 16) / 255; + const green = Number.parseInt(_hex.slice(2, 4), 16) / 255; + const blue = Number.parseInt(_hex.slice(4, 6), 16) / 255; + const alpha = Number.parseInt(_hex.slice(6, 8), 16) / 255; + Log.i(`vscode.Color(${red}, ${green}, ${blue}, ${alpha})`); + // 返回vscode.Color对象 + return new vscode.Color(red, green, blue, alpha); +} diff --git a/_vscode_plugin/Sillot/theme/Sample_Dark.tmTheme b/_vscode_plugin/Sillot/theme/Sample_Dark.tmTheme new file mode 100644 index 0000000000..982b45afad --- /dev/null +++ b/_vscode_plugin/Sillot/theme/Sample_Dark.tmTheme @@ -0,0 +1,372 @@ + + + + + name + Ofer 1 + settings + + + settings + + background + #000C18 + foreground + #6688CC + + caret + #DDBB88 + + invisibles + #002040 + guide + #002040 + + hoverHighlight + #264F78 + + referenceHighlight + #FF8F00 + + lineHighlight + #444444 + rangeHighlight + #F3F0F5 + + selection + #440608C0 + inactiveSelection + #BF0D1CC0 + selectionHighlight + #ADD6FF80 + + findRangeHighlight + #3A3D4180 + findMatchHighlight + #EA5C0080 + currentFindMatchHighlight + #515C6A80 + + wordHighlight + #77577740 + wordHighlightStrong + #97597740 + + activeLinkForeground + #4E94CE + gotoDefinitionLinkForeground + #67a8ddaa + + + + name + Comment + scope + comment + settings + + foreground + #223355 + + + + name + String + scope + string + settings + + foreground + #22aa44 + + + + name + Number + scope + constant.numeric + settings + + foreground + #f280d0 + + + + name + Built-in constant + scope + constant.language + settings + + foreground + #f280d0 + + + + name + User-defined constant + scope + constant.character, constant.other + settings + + foreground + #f280d0 + + + + name + Variable + scope + variable + settings + + fontStyle + + + + + name + Keyword + scope + keyword + settings + + foreground + #225588 + + + + name + Storage + scope + storage + settings + + fontStyle + + foreground + #225588 + + + + name + Storage type + scope + storage.type + settings + + fontStyle + italic + foreground + #9966b8 + + + + name + Class name + scope + entity.name.class + settings + + fontStyle + underline + foreground + #271010 + + + + name + Inherited class + scope + entity.other.inherited-class + settings + + fontStyle + italic underline + foreground + #ddbb88 + + + + name + Function name + scope + entity.name.function + settings + + fontStyle + + foreground + #661e78c8 + + + + name + Function argument + scope + variable.parameter + settings + + fontStyle + italic + foreground + #0c439ce6e600 + + + + name + Tag name + scope + entity.name.tag + settings + + fontStyle + + foreground + #225588 + + + + name + Tag attribute + scope + entity.other.attribute-name + settings + + fontStyle + + foreground + #ddbb88 + + + + name + Library function + scope + support.function + settings + + fontStyle + + foreground + #9966b8 + + + + name + Library constant + scope + support.constant + settings + + fontStyle + + foreground + #9966b8 + + + + name + Library class/type + scope + support.type, support.class + settings + + fontStyle + italic + foreground + #9966b8 + + + + name + Library variable + scope + support.other.variable + settings + + fontStyle + + + + + name + Invalid + scope + invalid + settings + + background + #7d0431 + fontStyle + + foreground + #F8F8F0 + + + + name + Invalid deprecated + scope + invalid.deprecated + settings + + background + #AE81FF + foreground + #F8F8F0 + + + + name + Markup Quote + scope + markup.quote + settings + + foreground + #22aa44 + + + + name + Markup Styling + scope + markup.bold, markup.italic + settings + + foreground + #22aa44 + + + + name + Markup Inline + scope + markup.inline.raw + settings + + fontStyle + + foreground + #9966b8 + + + + name + Markup Setext Header + scope + markup.heading.setext + settings + + fontStyle + + foreground + #ddbb88 + + + + uuid + 96A92F4B-E068-4DC6-9635-F55E7D920420 + + diff --git a/_vscode_plugin/Sillot/theme/Sample_Light.tmTheme b/_vscode_plugin/Sillot/theme/Sample_Light.tmTheme new file mode 100644 index 0000000000..a70b08be44 --- /dev/null +++ b/_vscode_plugin/Sillot/theme/Sample_Light.tmTheme @@ -0,0 +1,660 @@ + + + + + author + Martin Kühl + comment + Based on the Quiet Light theme for Espresso by Ian Beck. + name + Quiet Light + settings + + + settings + + background + #F5F5F5 + foreground + #333333 + + caret + #000000 + + invisibles + #AAAAAA + guide + #AAAAAA + + lineHighlight + #E4F6D4 + rangeHighlight + #FDFF00 + + hoverHighlight + #ADD6FF + + referenceHighlight + #F5D802 + + selection + #A9D0D980 + inactiveSelection + #E1E5EA80 + selectionHighlight + #ADD6FF80 + + findRangeHighlight + #B4B4B480 + findMatchHighlight + #EA5C0080 + currentFindMatchHighlight + #A8AC9480 + + wordHighlight + #57575740 + wordHighlightStrong + #0E639C40 + + activeLinkForeground + #0000FF + gotoDefinitionLinkForeground + #0000FF + + + + name + Comments + scope + comment, punctuation.definition.comment + settings + + fontStyle + italic + foreground + #AAAAAA + + + + name + Comments: Preprocessor + scope + comment.block.preprocessor + settings + + fontStyle + + foreground + #AAAAAA + + + + name + Comments: Documentation + scope + comment.documentation, comment.block.documentation + settings + + foreground + #448C27 + + + + name + Invalid - Deprecated + scope + invalid.deprecated + settings + + background + #96000014 + + + + name + Invalid - Illegal + scope + invalid.illegal + settings + + background + #96000014 + foreground + #660000 + + + + name + Operators + scope + keyword.operator + settings + + foreground + #777777 + + + + name + Keywords + scope + keyword, storage + settings + + foreground + #4B83CD + + + + name + Types + scope + storage.type, support.type + settings + + foreground + #7A3E9D + + + + name + Language Constants + scope + constant.language, support.constant, variable.language + settings + + foreground + #AB6526 + + + + name + Variables + scope + variable, support.variable + settings + + foreground + #7A3E9D + + + + name + Functions + scope + entity.name.function, support.function + settings + + fontStyle + bold + foreground + #AA3731 + + + + name + Classes + scope + entity.name.type, entity.other.inherited-class, support.class + settings + + fontStyle + bold + foreground + #7A3E9D + + + + name + Exceptions + scope + entity.name.exception + settings + + foreground + #660000 + + + + name + Sections + scope + entity.name.section + settings + + fontStyle + bold + + + + name + Numbers, Characters + scope + constant.numeric, constant.character, constant + settings + + foreground + #AB6526 + + + + name + Strings + scope + string + settings + + foreground + #448C27 + + + + name + Strings: Escape Sequences + scope + constant.character.escape + settings + + foreground + #777777 + + + + name + Strings: Regular Expressions + scope + string.regexp + settings + + foreground + #4B83CD + + + + name + Strings: Symbols + scope + constant.other.symbol + settings + + foreground + #AB6526 + + + + name + Punctuation + scope + punctuation + settings + + foreground + #777777 + + + + name + Embedded Source + scope + string source, text source + settings + + background + #EAEBE6 + + + + name + ----------------------------------- + settings + + + + name + HTML: Doctype Declaration + scope + meta.tag.sgml.doctype, meta.tag.sgml.doctype string, meta.tag.sgml.doctype entity.name.tag, meta.tag.sgml punctuation.definition.tag.html + settings + + foreground + #AAAAAA + + + + name + HTML: Tags + scope + meta.tag, punctuation.definition.tag.html, punctuation.definition.tag.begin.html, punctuation.definition.tag.end.html + settings + + foreground + #91B3E0 + + + + name + HTML: Tag Names + scope + entity.name.tag + settings + + foreground + #4B83CD + + + + name + HTML: Attribute Names + scope + meta.tag entity.other.attribute-name, entity.other.attribute-name.html + settings + + fontStyle + italic + foreground + #91B3E0 + + + + name + HTML: Entities + scope + constant.character.entity, punctuation.definition.entity + settings + + foreground + #AB6526 + + + + name + ----------------------------------- + settings + + + + name + CSS: Selectors + scope + meta.selector, meta.selector entity, meta.selector entity punctuation, entity.name.tag.css + settings + + foreground + #7A3E9D + + + + name + CSS: Property Names + scope + meta.property-name, support.type.property-name + settings + + foreground + #AB6526 + + + + name + CSS: Property Values + scope + meta.property-value, meta.property-value constant.other, support.constant.property-value + settings + + foreground + #448C27 + + + + name + CSS: Important Keyword + scope + keyword.other.important + settings + + fontStyle + bold + + + + name + ----------------------------------- + settings + + + + name + Markup: Changed + scope + markup.changed + settings + + background + #FFFFDD + foreground + #000000 + + + + name + Markup: Deletion + scope + markup.deleted + settings + + background + #FFDDDD + foreground + #000000 + + + + name + Markup: Emphasis + scope + markup.italic + settings + + fontStyle + italic + + + + name + Markup: Error + scope + markup.error + settings + + background + #96000014 + foreground + #660000 + + + + name + Markup: Insertion + scope + markup.inserted + settings + + background + #DDFFDD + foreground + #000000 + + + + name + Markup: Link + scope + meta.link + settings + + foreground + #4B83CD + + + + name + Markup: Output + scope + markup.output, markup.raw + settings + + foreground + #777777 + + + + name + Markup: Prompt + scope + markup.prompt + settings + + foreground + #777777 + + + + name + Markup: Heading + scope + markup.heading + settings + + foreground + #AA3731 + + + + name + Markup: Strong + scope + markup.bold + settings + + fontStyle + bold + + + + name + Markup: Traceback + scope + markup.traceback + settings + + foreground + #660000 + + + + name + Markup: Underline + scope + markup.underline + settings + + fontStyle + underline + + + + name + Markup Quote + scope + markup.quote + settings + + foreground + #7A3E9D + + + + name + Markup Lists + scope + markup.list + settings + + foreground + #4B83CD + + + + name + Markup Styling + scope + markup.bold, markup.italic + settings + + foreground + #448C27 + + + + name + Markup Inline + scope + markup.inline.raw + settings + + fontStyle + + foreground + #AB6526 + + + + name + ----------------------------------- + settings + + + + name + Extra: Diff Range + scope + meta.diff.range, meta.diff.index, meta.separator + settings + + background + #DDDDFF + foreground + #434343 + + + + name + Extra: Diff From + scope + meta.diff.header.from-file + settings + + background + #FFDDDD + foreground + #434343 + + + + name + Extra: Diff To + scope + meta.diff.header.to-file + settings + + background + #DDFFDD + foreground + #434343 + + + + uuid + 231D6A91-5FD1-4CBE-BD2A-0F36C08693F1 + + diff --git a/_vscode_plugin/Sillot/vsc-extension-quickstart.md b/_vscode_plugin/Sillot/vsc-extension-quickstart.md index c1810c1d6f..e4799253b7 100644 --- a/_vscode_plugin/Sillot/vsc-extension-quickstart.md +++ b/_vscode_plugin/Sillot/vsc-extension-quickstart.md @@ -48,3 +48,20 @@ ##### snippets:代码片段 注意:"path": "./snippets/sofill.json" 这里的路径不能在 ./src 目录下(这是因为 .vscodeignore 中忽略了 src,因此 src 里最好只包含源代码) + + +vscode.CompletionItem + +举例: + +```json +{ + label: "sillot", + insertText: "Sillot", + documentation: "汐洛", + detail: "汐洛(Sillot)孵化自思源笔记(siyuan-note),致力于服务智慧新彖乄", + kind: vscode.CompletionItemKind.User, +} +``` + +label 匹配用户输入,当 insertText不存在时也是输出 diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index e05e483223..339ed900f1 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -480,7 +480,9 @@ "syncConfGuide5": "If the amount of data is large, the first sync will be slow, please wait patiently
Do not switch apps and keep the screen bright while the iOS/iPad is syncing", "copyPlainText": "Copy plain text", "findInDoc": "Match ${y} items in ${x} docs", - "jumpToParentNext": "Jump to the next block in the parent level", + "jumpToParentNext": "Jump to the next block of the parent block", + "jumpToParentPrev": "Jump to the previous block of the parent block", + "jumpToParent": "Jump to parent block", "initRepoKeyTip": "If the key has been initialized on other devices, please use [Import Key] or generate the key with the same passphrase, otherwise the data cannot be synced to the cloud, so be sure to use the same key on all devices", "crossKeepLazyLoad": "Cross-page multi-selection needs to select [Keep Loaded Content] in the more menu", "keepLazyLoad": "Keep loaded content", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index 289974d933..aea451861f 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -480,7 +480,9 @@ "syncConfGuide5": "Si la cantidad de datos es grande, la primera sincronización será lenta, espere pacientemente
No cambie de aplicación y mantenga la pantalla brillante mientras iOS/iPad se sincroniza", "copyPlainText": "Copiar texto sin formato", "findInDoc": "Hacer coincidir ${y} elementos en ${x} documentos", - "jumpToParentNext": "Saltar al siguiente bloque en el nivel principal", + "jumpToParentNext": "Saltar al siguiente bloque del bloque principal", + "jumpToParentPrev": "Saltar al bloque anterior del bloque principal", + "jumpToParent": "Saltar al bloque principal", "initRepoKeyTip": "Si la clave se ha inicializado en otros dispositivos, use [Importar la clave] o genere la clave con la misma contraseña; de lo contrario, los datos no se pueden sincronizar con la nube, así que asegúrese de usar la misma clave en todos los dispositivos.", "crossKeepLazyLoad": "La selección múltiple entre páginas debe seleccionar [Mantener contenido cargado] en el menú más", "keepLazyLoad": "Mantener el contenido cargado", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index 5b4e75cca6..11de22ef50 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -480,7 +480,9 @@ "syncConfGuide5": "Si la quantité de données est importante, la première synchronisation sera lente, veuillez patienter
Ne changez pas d'application et gardez l'écran lumineux pendant la synchronisation de l'iOS/iPad", "copyPlainText": "Copier du texte brut", "findInDoc": "Faire correspondre les éléments ${y} dans les documents ${x}", - "jumpToParentNext": "Passer au bloc suivant du niveau parent", + "jumpToParentNext": "Sauter au bloc suivant du bloc parent", + "jumpToParentPrev": "Sauter au bloc précédent du bloc parent", + "jumpToParent": "Sauter au bloc parent", "initRepoKeyTip": "Si la clé a été initialisée sur d'autres appareils, veuillez utiliser [Importer la clé] ou générer la clé avec le même mot de passe, sinon les données ne peuvent pas être synchronisées avec le cloud, alors assurez-vous d'utiliser la même clé sur tous les appareils", "crossKeepLazyLoad": "La multi-sélection sur plusieurs pages doit sélectionner [Conserver le contenu chargé] dans le menu plus", "keepLazyLoad": "Conserver le contenu chargé", diff --git a/app/appearance/langs/ja_JP.json b/app/appearance/langs/ja_JP.json new file mode 100644 index 0000000000..e9e8a38119 --- /dev/null +++ b/app/appearance/langs/ja_JP.json @@ -0,0 +1,1501 @@ +{ + "allowHTMLBLockScript": "HTML ブロック内のスクリプトの実行を許可する", + "allowHTMLBLockScriptTip": "HTML ブロック内のスクリプトはサニタイズされません。XSS 攻撃の潜在的なリスクに十分注意してください", + "autoLaunchMode0": "自動的に起動しない", + "autoLaunchMode1": "システムの起動後に自動的に起動する", + "autoLaunchMode2": "システムの起動後にインターフェースを最小化して自動的に起動する", + "editorMarkdownInlineSup": "Markdown インライン上付き文字構文", + "editorMarkdownInlineSupTip": "^foo^ 形式のインライン上付き文字構文を有効にします", + "editorMarkdownInlineSub": "Markdown インライン下付き文字構文", + "editorMarkdownInlineSubTip": "~foo~ 形式のインライン下付き文字構文を有効にします", + "editorMarkdownInlineTag": "Markdown インラインタグ構文", + "editorMarkdownInlineTagTip": "#foo# 形式のインラインタグ構文を有効にします", + "editorMarkdownInlineMath": "Markdown インライン数式構文", + "editorMarkdownInlineMathTip": "$foo$ 形式のインライン数式構文を有効にします", + "currentNotebook": "現在のノートブック", + "containerBlockTip1": "コンテナブロックを有効にすると重複した検索結果が表示されます", + "containerBlockTip2": "ドキュメントブロックはタイトルの検索のみをサポートしています", + "copyAsPNG": "PNG としてコピー", + "unbindBlock": "ブロックのバインドを解除", + "showTitle": "データベースのタイトルを表示", + "fillCreated": "作成日時をデフォルト値で埋める", + "removeCard": "フラッシュカードを削除", + "updateLayout": "レイアウトを更新", + "dndFolderTip": "${x} は file:// 形式のハイパーリンクを挿入するだけで、ファイルはコピーされないので注意してください", + "removeCol": "データベースの ${x} 列を削除してもよろしいですか?", + "video": "ビデオ", + "audio": "音声", + "updateAll": "すべて更新", + "confirmUpdateAll": "すべて更新してもよろしいですか?", + "confirmUpdate": "更新してもよろしいですか?", + "insertRowBefore": "上に ${x} 行を挿入", + "insertRowAfter": "下に ${x} 行を挿入", + "setDueTime": "期限を設定", + "showCardDay": "何日後にカードを表示しますか?", + "forgetCount": "忘れた回数", + "lastReviewTime": "最後の復習時間", + "cardStatus": "カードの状態", + "noSupportTip": "この機能はカードデッキの使用をサポートしていません", + "insertRowTip": "新しく追加された行はフィルタリングされており、フィルタリング/検索/並び替えを解除すると表示されます", + "insertRowTip2": "新しく追加された行は並び替えの対象ではありません", + "insertPhoto": "画像を挿入", + "relativeToToday": "今日からの相対的な期間", + "current": "現在", + "week": "週", + "month": "月", + "year": "年", + "pastDate": "過去", + "nextDate": "未来", + "listInvalidRefBlocks": "無効な参照を持つブロックのリスト", + "listItemDotNumberClickFocus": "リスト項目のドット/番号をクリックしてフォーカス", + "listItemDotNumberClickFocusTip": "リスト項目のドット/番号をクリックするとリスト項目にフォーカスを移動します", + "reviewMode": "復習モード", + "reviewModeTip": "復習中に新しいカードと古いカードを表示する順序を選択します", + "reviewMode0": "新しいカードと古いカードを混在させる", + "reviewMode1": "新しい順", + "reviewMode2": "古い順", + "fileAnnoRefPlaceholder": "ブロック ID を入力してください", + "addToDatabase": "データベースに追加", + "clearContext": "コンテキストをクリア", + "cloudStoragePurge": "クラウドストレージを消去", + "cloudStoragePurgeConfirm": "注意:
  • 実行前に他のデバイスが同期を一時停止していることを確認してください
  • 消去操作は非常に時間がかかるため、ネットワークが安定していることを確認してください
今すぐ実行してもよろしいですか?", + "dragFill": "垂直方向にドラッグして値を埋める", + "switchReadonly": "読み取り専用モードの切り替え", + "original": "オリジナル", + "selectRelation": "関連する列を最初に選択してください", + "backRelation": "双方向", + "thisDatabase": "このデータベース", + "relatedTo": "関連先", + "relation": "関連", + "rollup": "ロールアップ", + "rollupProperty": "プロパティ", + "rollupCalc": "計算", + "searchRelation": "関連プロパティを検索", + "searchRollupProperty": "プロパティを検索", + "replaceTypes": { + "text": "通常のテキスト", + "imgText": "画像の代替テキスト", + "imgTitle": "画像のタイトル", + "imgSrc": "画像のリンク", + "aText": "リンクのアンカーテキスト", + "aTitle": "リンクのタイトル", + "aHref": "リンクの URL", + "code": "インラインコード", + "em": "斜体", + "strong": "太字", + "inlineMath": "インライン数式", + "inlineMemo": "インラインメモ", + "kbd": "キーボード", + "mark": "マーク", + "s": "取り消し線", + "sub": "下付き文字", + "sup": "上付き文字", + "tag": "タグ", + "u": "アンダーライン", + "docTitle": "ドキュメントのタイトル", + "codeBlock": "コードブロック", + "mathBlock": "数式ブロック", + "htmlBlock": "HTMLブロック" + }, + "selected": "選択済み", + "loadMore": "さらに読み込む", + "tempUnlock": "一時的にロック解除", + "cancelTempUnlock": "一時的なロック解除をキャンセル", + "addFilter": "フィルタを追加", + "removeFilters": "フィルタを削除", + "checked": "チェック済み", + "unchecked": "未チェック", + "percentChecked": "チェック済みの割合", + "percentUnchecked": "未チェックの割合", + "checkbox": "チェックボックス", + "copyInline": "インライン要素をコピー", + "unsplit": "分割解除", + "unsplitAll": "すべての分割解除", + "resetCardTip": "${x} 枚のフラッシュカードをリセットしてもよろしいですか?", + "freezeCol": "列を固定", + "unfreezeCol": "列の固定を解除", + "snippetsTip": "コードスニペットが更新されました。保存しますか?", + "addBelowAbove": "下に追加するにはクリック
上に追加するには⌥キーを押しながらクリック", + "imported": "インポートが完了しました", + "mirrorTip": "ミラーデータベース: すべてのデータ更新は他のすべてのミラーに同期されます", + "includeTime": "時間を含める", + "accountSupport1": "SiYuan は2020年8月31日の最初の公開以来、合計580回のリリースを行い、ユーザーからの要求とフィードバックを10591回解決し、コードを12822回コミットしました。", + "accountSupport2": "皆様のサポートとフィードバックによって、SiYuan はさらに発展します。私たちは常にユーザーの友人であり、製品の向上に努め、より良い知識管理体験を提供して参ります。ご支援いただき、誠にありがとうございます。", + "goToTab1": "タブ #1 に移動", + "goToTab2": "タブ #2 に移動", + "goToTab3": "タブ #3 に移動", + "goToTab4": "タブ #4 に移動", + "goToTab5": "タブ #5 に移動", + "goToTab6": "タブ #6 に移動", + "goToTab7": "タブ #7 に移動", + "goToTab8": "タブ #8 に移動", + "goToTab9": "最後のタブに移動", + "goToTabNext": "次のタブに移動", + "goToTabPrev": "前のタブに移動", + "goToEditTabNext": "次の編集済みタブに移動", + "goToEditTabPrev": "前の編集済みタブに移動", + "createdTime": "作成時刻", + "updatedTime": "更新時刻", + "lineNumber": "行番号", + "removeBookmark": "${x} からブックマークを削除しますか?", + "defaultMargin": "デフォルト", + "noneMargin": "なし", + "minimalMargin": "最小限", + "customMargin": "カスタム", + "marginTop": "上", + "marginRight": "右", + "marginBottom": "下", + "marginLeft": "左", + "lockEdit": "ドキュメントを読み取り専用にする", + "unlockEdit": "ドキュメントを書き込み可能にする", + "enable": "有効にする", + "disable": "無効にする", + "removeWorkspacePhysically": "ワークスペース ${x} のデータを物理的に削除しますか? (この操作は元に戻せません)", + "mainMenu": "メインメニュー", + "searchRemoveName": "${x} を削除し、そのクエリ条件を ${y} に割り当てますか?", + "searchUpdateName": "名前 ${x} を ${y} に更新しますか?", + "searchAssetContent": "アセットファイルの内容を検索", + "searchOverwrite": "クエリ名が重複しています。上書きしますか?", + "onepay": "PRO", + "format": "数値の形式", + "numberFormatNone": "数値", + "numberFormatCommas": "カンマ区切りの数値", + "numberFormatPercent": "パーセント", + "numberFormatUSDollar": "米ドル", + "numberFormatYuan": "元", + "numberFormatEuro": "ユーロ", + "numberFormatPound": "ポンド", + "numberFormatYen": "円", + "numberFormatRuble": "ルーブル", + "numberFormatRupee": "ルピー", + "numberFormatWon": "ウォン", + "numberFormatCanadianDollar": "カナダドル", + "numberFormatFranc": "フラン", + "email": "メール", + "phone": "電話", + "inboxTip": "ユーザーガイドを開いて 受信トレイ を検索して手順を表示します", + "builtIn": "内蔵", + "endDate": "終了日", + "needLogin": "この機能を使用するにはログインする必要があります", + "calcResultCountAll": "すべての数", + "calcResultCountValues": "値の数", + "calcResultCountUniqueValues": "ユニークな値の数", + "calcResultCountEmpty": "空の数", + "calcResultCountNotEmpty": "空ではない数", + "calcResultPercentEmpty": "空のパーセント", + "calcResultPercentNotEmpty": "空ではないパーセント", + "calcResultSum": "合計値", + "calcResultAverage": "平均値", + "calcResultMedian": "中央値", + "calcResultMin": "最小値", + "calcResultMax": "最大値", + "calcResultRange": "範囲", + "calc": "計算", + "createWorkspace": "ワークスペースを作成", + "createWorkspaceTip": "このパスを使用してワークスペースを作成しますか?", + "calcOperatorNone": "なし", + "calcOperatorCountAll": "すべての数", + "calcOperatorCountValues": "値の数", + "calcOperatorCountUniqueValues": "ユニークな値の数", + "calcOperatorCountEmpty": "空の数", + "calcOperatorCountNotEmpty": "空ではない数", + "calcOperatorPercentEmpty": "空のパーセント", + "calcOperatorPercentNotEmpty": "空ではないパーセント", + "calcOperatorSum": "合計値", + "calcOperatorAverage": "平均値", + "calcOperatorMedian": "中央値", + "calcOperatorMin": "最小値", + "calcOperatorMax": "最大値", + "calcOperatorRange": "範囲", + "calcOperatorEarliest": "最古", + "calcOperatorLatest": "最新", + "filterOperatorIs": "等しい", + "filterOperatorIsNot": "等しくない", + "filterOperatorContains": "含む", + "filterOperatorDoesNotContain": "含まない", + "filterOperatorStartsWith": "で始まる", + "filterOperatorEndsWith": "で終わる", + "filterOperatorIsEmpty": "空である", + "filterOperatorIsNotEmpty": "空ではない", + "filterOperatorIsBetween": "間にある", + "filterOperatorIsBefore": "より前", + "filterOperatorIsAfter": "より後", + "filterOperatorIsOnOrBefore": "以前", + "filterOperatorIsOnOrAfter": "以降", + "asc": "昇順", + "desc": "降順", + "hideCol": "列を非表示", + "hideAll": "すべて非表示", + "showAll": "すべて表示", + "showCol": "列を表示", + "number": "数値", + "date": "日付", + "select": "選択", + "multiSelect": "複数選択", + "commandEmpty": "まだコマンドがありません、プラグインをインストールするためにマーケットプレイスに移動するにはクリックしてください", + "commandPanel": "コマンドパレット", + "cloudRegionNorthAmerica": "LiuYun (北米データセンター)", + "cloudRegionChina": "LianDi (中国本土データセンター)", + "currentKernel": "現在のカーネル", + "otherOnlineKernels": "その他のオンラインカーネル", + "syncPerception": "リアルタイム同期", + "syncPerceptionTip": "データ同期信号を自動的に送受信して、すべてのオンラインデバイス間で可能な限りリアルタイムのデータ同期を行います", + "hide": "非表示", + "wrap": "列を折り返す", + "edit": "編集", + "incompatiblePluginTip": "このプラグインは現在の端末ではサポートされていません", + "incompatible": "互換性がありません", + "trust": "信頼する", + "bazaarTrust": "マーケットプレイスパッケージは任意の操作を行えるため、マーケットプレイスからパッケージをインストールすることには一定のセキュリティリスクが伴います。", + "bazaarTrust3": "私たちは潜在的なセキュリティ問題を非常に重視しています。セキュリティリスクを可能な限り回避するために、以下の対策を講じています:", + "bazaarTrustCodeReview": "公開前のコードレビュー", + "bazaarTrustCodeReviewTip": "マーケットプレイスにパッケージが公開される前に、コードをレビューしています", + "bazaarTrustOpenSource": "オープンソース", + "bazaarTrustOpenSourceTip": "ほとんどのパッケージはオープンソースです。インストールする前にコードやリポジトリの issue を確認できます", + "bazaarCommunityReview": "コミュニティによるピアレビュー", + "bazaarPeerReviewTip": "多くのコミュニティ開発者がパッケージのコードをレビューできます", + "bazaarUserReport": "ユーザーレポート", + "bazaarUserReportTip": "パッケージに悪意のあるコードやセキュリティ問題を発見した場合はフィードバックをお寄せください", + "bazaarTrust1": "一度マーケットプレイスを信頼することを選択すると、閉じることはできません。悪意のあるコードを含むパッケージをインストールした場合は、ファイルシステムから手動で削除してください", + "bazaarTrust2": "免責事項: 詳細は、SiYuan が使用するオープンソースライセンス AGPLv3 の関連条項を参照してください", + "pinTableHead": "テーブルヘッダーを固定", + "unpinTableHead": "テーブルヘッダーの固定を解除", + "enablePluginTip": "このプラグインを今すぐ有効にしますか? [ダウンロード済み] - [プラグイン] から、有効化、無効化、アンインストールが行えます", + "enablePluginTip2": "現在、すべてのプラグインが無効になっています。[ダウンロード済み] - [プラグイン] から有効にしてください", + "enablePlugin": "プラグインを有効にする", + "color": "色", + "confirmPassword": "パスワードはすでに覚えています", + "passwordNoMatch": "入力されたパスワードが一致しません", + "cloudConfigTip": "[設定] - [クラウド] で設定してください", + "confirmUninstall": "${name} をアンインストールしてもよろしいですか?", + "scrollGetMore": "慌てずに... さらに読み込むには上下にスクロールしてください", + "flashcardNewCard": "新しいカード", + "flashcardReviewCard": "古いカード", + "flashcardDueCard": "期限切れカード", + "flashcardCard": "合計", + "plugin": "プラグイン", + "attrBookmarkTip": "このブロックをブックマークに関連付けて、後からブックマークパネルで閲覧します", + "attrNameTip": "このブロックの名前を設定します。これは主に参照と検索に使われます。ブロックは一意の名前をひとつだけ持てます", + "attrAliasTip": "このブロックのエイリアスを設定します。ブロックにはカンマで区切られた複数のエイリアスを設定できます", + "attrMemoTip": "このブロックのメモを設定します。プレーンテキストのみがサポートされています", + "switchDirect": "比較方向の切り替え", + "onlySearchForDoc": "ドキュメント名のみを検索", + "onlySearchForDocTip": "[[ を使用したブロック参照の検索でドキュメント名のみを検索します", + "ocrResult": "OCR 結果のテキスト", + "reOCR": "再 OCR", + "continueReview1": "復習を続ける", + "continueReview2": "${count} 枚のカードの復習が残っています。続けますか?", + "whatsNewInSiYuan": "SiYuan の新機能", + "returnDesktop": "デスクトップに戻るにはもう一度バックを押してください", + "enterNew": "入力して作成", + "enterNewTip": "ドキュメントが見つかりませんでした。新しいドキュメントを作成するには Enter キーを押してください", + "searchTip1": "移動する", + "searchTip2": "開く", + "searchTip3": "結果を切り替える", + "searchTip4": "右に開く", + "searchTip5": "閉じる", + "showRecentUpdatedBlocks": "入力が空の場合、最後に更新されたブロックが表示されます", + "revisionCount": "リビジョン数", + "nextDue": "次の期限", + "flashcardNewCardLimit": "新しいカードの制限", + "flashcardNewCardLimitTip": "新しいカードが多い場合は、この項目で復習する新しいカードの数を設定できます", + "flashcardReviewCardLimit": "古いカードの制限", + "flashcardReviewCardLimitTip": "古いカードが多い場合は、この項目で復習する古いカードの数を設定できます", + "flashcardMark": "マーキングカード", + "flashcardMarkTip": "マークが穴埋め問題として認識されます", + "flashcardList": "リストカード", + "flashcardListTip": "リストの最初の項目が質問として、残りの項目が回答として認識されます", + "flashcardSuperBlock": "スーパーブロックのカード化", + "flashcardSuperBlockTip": "スーパーブロックの最初の子ブロックが質問として認識され、残りの子ブロックが回答として認識されます", + "flashcardHeading": "見出しブロックのカード化", + "flashcardHeadingTip": "見出しブロックが質問として認識され、その下のブロックが回答として認識されます", + "flashcardDeck": "デッキ", + "flashcardDeckTip": "カードデッキの分類をサポートします。これは歴史的な互換性オプションであり、必要がない限り有効にしないでください", + "flashcardFSRSParamRequestRetention": "FSRS リクエストの保持", + "flashcardFSRSParamRequestRetentionTip": "目標とする想起の確率を表します。高い保持率と高い繰り返し回数の間にはトレードオフがあることに注意してください。この値は 0.8 から 0.9 の間のどこかに設定することをお勧めします", + "flashcardFSRSParamMaximumInterval": "FSRS 最大間隔", + "flashcardFSRSParamMaximumIntervalTip": "繰り返し間隔の最大日数", + "flashcardFSRSParamWeights": "FSRS ウェイト", + "flashcardFSRSParamWeightsTip": "アルゴリズムの重みパラメータ。デフォルト値は小さなサンプルから取得されます。調整が必要な場合は、FSRS オプティマイザーを使用して計算してください", + "apiKey": "API キー", + "apiKeyTip": "以降の管理のために、SiYuan に API キーを個別に割り当てることをお勧めします。この項目を空白のままにすると、AI 関連機能が無効になります", + "apiTimeout": "タイムアウト", + "apiTimeoutTip": "リクエストのタイムアウト時間 (単位: 秒)", + "apiProxy": "ネットワークプロキシ", + "apiProxyTip": "リクエストを開始するネットワークプロキシ。例: socks://127.0.0.1:1080", + "apiModel": "モデル", + "apiModelTip": "API をリクエストするときに渡される model パラメータは、生成されるテキストのスタイルを制御するために使用されます (Azure OpenAI サービスを使用する場合はデプロイメント ID を入力する必要があります)", + "apiMaxTokens": "トークンの最大数", + "apiMaxTokensTip": "API をリクエストするときに渡される max_tokens パラメータは、生成されるテキストの長さを制御するために使用されます", + "apiTemperature": "温度", + "apiTemperatureTip": "API をリクエストするときに渡される temperature パラメータは、生成されるテキストのランダム性を制御するために使用されます", + "apiMaxContexts": "コンテキストの最大数", + "apiMaxContextsTip": "API をリクエストする際に渡されるコンテキストの最大数", + "apiBaseURL": "API ベース URL", + "apiBaseURLTip": "リクエストのベースアドレス。例: https://api.openai.com/v1", + "apiUserAgentTip": "API のリクエストに使われるユーザーエージェント", + "apiVersion": "API バージョン", + "apiVersionTip": "Azure OpenAI サービスを使用する場合にのみ必要です", + "apiProvider": "API プロバイダー", + "apiProviderTip": "選択した API プロバイダーを使用して AI 関連の機能を実装します", + "skip": "スキップ", + "nextRound": "次のラウンド", + "save": "保存", + "ai": "AI", + "aiContinueWrite": "続けて書く", + "aiTranslate": "翻訳", + "aiExtractSummary": "概要の抽出", + "aiBrainStorm": "ブレインストーミング", + "aiFixGrammarSpell": "文法、スペル、誤字の修正", + "aiCustomAction": "カスタムアクション...", + "database": "データベース", + "manage": "管理", + "spaceRepetition": "間隔反復", + "space": "間隔", + "cardShowAnswer": "答えを表示", + "cardRatingAgain": "もう一度", + "cardRatingHard": "難しい", + "cardRatingGood": "普通", + "cardRatingEasy": "簡単", + "pdfIsLoading": "PDF を読み込んでいます、後からまた試してください", + "addToDeck": "デッキに追加...", + "quickMakeCard": "クイックカード作成", + "allAttrs": "すべての属性名と属性値", + "chooseSyncDirection": "同期方向を選択", + "uploadData2Cloud": "⬆️ ローカルデータスナップショットをアップロード", + "uploadData2CloudTip": "データスナップショットを生成して、クラウドにアップロードします", + "downloadDataFromCloud": "⬇️ クラウドデータスナップショットをダウンロード", + "downloadDataFromCloudTip": "最新のクラウドデータスナップショットをダウンロードして、ローカルデータにマージします", + "targetBlockID": "ターゲットブロック ID", + "transferBlockRefTip": "このブロックからターゲットブロックに、すべての参照を転送します", + "transferBlockRef": "参照の転送", + "sortByFiletree": "ドキュメントツリーの並べ替えルールを使う", + "tabToWindow": "新しいウィンドウへ移動", + "openByNewWindow": "新しいウィンドウで開く", + "exitFocus": "フォーカスを解除", + "pointExchangeSize": "ポイント交換", + "panels": "パネル", + "copyPath": "パスをコピー", + "workspaceList": "ワークスペース", + "removeWorkspaceTip": "ワークスペースから削除します", + "new": "新規作成", + "share2LiandiConfirmTip": "このドキュメントをコミュニティに共有してもよろしいですか?", + "share2Liandi": "コミュニティに共有", + "noDueCard": "お疲れ様です!現在復習タスクはありません。後ほど確認してください", + "createDeck": "デッキを作成", + "addDeck": "デッキに追加", + "removeDeck": "デッキから削除", + "riffCard": "フラッシュカード", + "compare": "比較", + "switchTab": "タブの切り替え", + "recentDocs": "最近使ったドキュメント", + "autoLaunch": "起動時に自動起動", + "autoLaunchTip": "オペレーティングシステムにログインした後、アプリケーションを自動的に起動します", + "sortByContent": "元のコンテンツの順序", + "sortByRankDesc": "関連性 (降順)", + "sortByRankAsc": "関連性 (昇順)", + "saveCriterion": "検索条件を保存", + "useCriterion": "検索条件は次回の検索のために保存されます", + "removeCriterion": "検索条件を削除", + "group": "グループ ", + "noGroupBy": "グループ化なし", + "groupByDoc": "ドキュメントごとにグループ化", + "leftRightLayout": "左右レイアウト", + "topBottomLayout": "上下レイアウト", + "keyword": "キーワード", + "searchMethod": "検索方法", + "regex": "正規表現", + "keywordsLimit": "キーワード制限", + "exportAsImage": "画像としてエクスポート", + "proFeature": "この機能を利用するには支払いが必要です (サブスクリプションメンバーは別途支払う必要はありません)、一度の支払いで生涯使用できます", + "syncOfficialProviderIntro": "現在選択されているのは、SiYuan が公式に提供するクラウドストレージサービスで、有料サブスクリプションユーザーのみが利用可能です", + "syncThirdPartyProviderS3Intro": "現在選択されているのは、Amazon S3プロトコルに準拠したサードパーティのクラウドストレージサービスです (例: QiniuAliyun OSSCloudflare R2)", + "syncThirdPartyProviderWebDAVIntro": "現在選択されているのは、WebDAV プロトコルに対応したサードパーティのクラウドストレージサービスです。このプロトコルはパフォーマンスが低く、安定性に欠けるため、S3 サービスを優先して選択することをお勧めします", + "syncThirdPartyProviderTip": "この機能を使用する前に、サードパーティのクラウドストレージサービスの技術的な制限と請求項目に注意してください:
  • インターフェース呼び出し頻度や帯域幅などの技術的制限
  • ストレージ容量やトラフィックなどの請求項目
  • 利用規約および可用性保
免責事項: 詳細は、SiYuan が使用するオープンソースライセンス AGPLv3 の関連規約を参照してください", + "syncProvider": "クラウドストレージサービスプロバイダ", + "syncProviderTip": "選択したプロバイダのクラウドストレージサービスが、クラウド同期とバックアップ機能を実現するために使用されます", + "confirmReset": "すべてのキーボードショートカットをデフォルト設定にリセットしてもよろしいですか?", + "notBatchRemove": "ノートブックの一括削除はサポートされていません", + "confirmRemoveAll": "選択した ${count} 件のドキュメントとそのサブドキュメントを削除してもよろしいですか?", + "microphoneDenied": "システム環境設定で SiYuan にマイクへのアクセスを許可する必要があります", + "microphoneNotAccess": "マイクへのアクセスが拒否されました。システム環境設定でリセットしてください", + "dynamicLoadBlocks": "動的に読み込まれるブロックの数", + "dynamicLoadBlocksTip": "この値にはサブブロックの数が含まれます。レンダリングする必要があるコードブロック、数式ブロック、チャートブロックが数多くある場合は、あまり大きく設定しないことをお勧めします", + "backlinkExpand": "バックリンクのデフォルト展開", + "backlinkExpandTip": "0 に設定されている場合は展開されません", + "backmentionExpand": "バックメンションのデフォルト展開", + "backmentionExpandTip": "0 に設定されている場合は展開されません", + "googleAnalytics": "Google アナリティクス", + "googleAnalyticsTip": "Google アナリティクスを使用してアプリケーションの起動状況をカウントします。ユーザーデータや操作内容は収集されません", + "floatWindowMode": "フローティングウィンドウのトリガー方法", + "floatWindowModeTip": "ブロックアイコンやパンくずリストアイコンなどをマウスホバーしたときに、フローティングウィンドウをトリガーする方法を選択します", + "floatWindowMode0": "ホバー", + "floatWindowMode1": "${hotkey} を押しながらホバー", + "floatWindowMode2": "トリガーしない", + "codeSnippet": "コードスニペット", + "expandDown": "下に展開", + "expandUp": "上に展開", + "goForward": "進む", + "goBack": "戻る", + "docNameAndContent": "ドキュメントの名前と内容", + "breadcrumb": "パンくずリスト", + "embedBlockBreadcrumb": "埋め込みブロックのパンくずリスト", + "embedBlockBreadcrumbTip": "埋め込みブロックがパンくずリストを表示します。スーパーブロック内の埋め込みブロックはこのオプションを無視し、常にパンくずリストを表示しません", + "appearanceMode": "表示モード", + "editReadonly": "読み取り専用モード", + "editReadonlyTip": "エディタが読み取り専用モードでドキュメントを読み込みます", + "generateConflictDoc": "同期の競合時に競合ドキュメントを生成する", + "generateConflictDocTip": "同期の競合が発生した場合に競合ドキュメントが生成され、直接開いて表示できます。この設定に関わらず、データ履歴には競合ドキュメントが記録されます", + "deleteOpConfirm": "⚠️ 削除操作の確認", + "filterKeywordEnter": "キーワードフィルタ入力", + "defBlock": "定義ブロック", + "defBlockChildren": "定義ブロックとその子ブロック", + "filter": "フィルタ", + "headings1": "見出しと下部のブロック", + "tWithSubtitle": "小見出し付き変換", + "clear": "クリア", + "autoDownloadUpdatePkg": "更新インストールパッケージの自動ダウンロード", + "autoDownloadUpdatePkgTip": "2時間ごとにバージョンの更新を自動的にチェックします。更新されたバージョンがある場合は、インストールパッケージが自動的にダウンロードされ、インストールを求めるメッセージが表示されます", + "downloaded": "ダウンロード済み", + "allOp": "すべての操作", + "allNotebooks": "すべてのノートブック", + "historyClean": "クリア (clean)", + "historyUpdate": "更新 (update)", + "historyDelete": "削除 (delete)", + "historyFormat": "形式 (format)", + "historySync": "同期 (sync)", + "historyReplace": "置換 (replace)", + "historyOutline": "アウトライン (outline)", + "htmlBlockError": "次のスクリプトはインターフェースの表示に影響するため、実行が停止されました", + "fileHistory": "ファイル履歴", + "htmlBlockTip": "複数の HTML ブロックが形成されています。データの損失を防ぐために、<div> タグで囲んで、空白行を削除してください", + "katexMacros": "KaTex マクロ定義", + "katexMacrosTip": "JSON オブジェクト形式 ({}) を使用してマクロ定義を囲んでください。例: { \"\\\\foo\": \"{x^2}\" }", + "systemLogTip": "プログラムの実行記録はシステムログに保存されます。システムログをエクスポートして開発者に送信することで、開発者がプログラムの問題を診断するのに役立ちます", + "systemLog": "システムログ", + "syncConfGuide1": "同期キーの初期化", + "syncConfGuide2": "このキーはデータ同期のためのエンドツーエンドの暗号化に使用されます
キーは入力されたパスワードに基づいて生成されるため、パスワードを忘れないでください", + "syncConfGuide3": "クラウド同期ディレクトリは、現在のワークスペースに対応する暗号化されたデータを保存するために使用されます。デフォルト名は main です。同期するワークスペースがひとつしかない場合は、main を使用してください", + "syncConfGuide4": "今すぐ同期しますか?", + "syncConfGuide5": "データ量が多い場合は、最初の同期が遅くなる場合がありますので、しばらくお待ちください。
iOS/iPad で同期している間はアプリを切り替えず、画面を明るく保ってください", + "copyPlainText": "プレーンテキストとしてコピー", + "findInDoc": "${x} 個のドキュメントに ${y} 件の一致があります", + "jumpToParentNext": "次の親ブロックに移動", + "jumpToParentPrev": "前の親ブロックに移動", + "jumpToParent": "親ブロックに移動", + "initRepoKeyTip": "他のデバイスでキーが初期化されている場合は、[キーのインポート] を使用するか、同じパスフレーズでキーを生成してください。そうしないと、データをクラウドに同期できません。すべてのデバイスで同じキーを使用してください", + "crossKeepLazyLoad": "ページ間の複数選択は、詳細メニューで [読み込んだコンテンツを保持] を選択する必要があります", + "keepLazyLoad": "読み込んだコンテンツを保持", + "localSnapshot": "ローカルスナップショット", + "localTagSnapshot": "ローカルタグのスナップショット", + "cloudSnapshot": "クラウドスナップショット", + "cloudTagSnapshot": "クラウドタグのスナップショット", + "cloudBackupTip": "[データ履歴] - [データスナップショット] から操作してください", + "snapshotMemo": "スナップショットのメモ", + "snapshotMemoTip": "スナップショットのメモを入力してください", + "tagSnapshot": "スナップショットにタグを付ける", + "tagSnapshotUpload": "スナップショットにタグを付けてアップロードする", + "tagSnapshotTip": "次の記号を含めないでください \\ / : * ? " ' < > |", + "dataRepo": "データリポジトリ", + "newSubDoc": "サブドキュメントを作成", + "newDocBelow": "下にドキュメントを作成", + "newDocAbove": "上にドキュメントを作成", + "fullWidth": "幅に合わせる", + "fullWidthTip": "編集領域が可能な限り広く表示されます", + "tabLimit": "タブの制限", + "tabLimit1": "開いた時間で並べ替え、最も早く開いたタブを閉じます", + "pasteEscaped": "エスケープされたテキストを貼り付け", + "resetRepoTip": "データリポジトリをリセットすると、キーとすべてのスナップショットが完全に削除されます。本当にリセットしますか?", + "resetRepo": "データリポジトリのリセット", + "createSnapshot": "スナップショットの作成", + "dataSnapshot": "データスナップショット", + "copyKey": "キー文字列をコピー", + "importKey": "キーのインポート", + "keyPlaceholder": "ここにキー文字列を貼り付けてください", + "key": "キー", + "genKey": "キーの自動生成", + "genKeyByPW": "パスフレーズでキーを生成", + "dataRepoKeyTip1": "データリポジトリは、データスナップショットの暗号化と保存に使用されます。スナップショットはデータ履歴で作成およびロールバックできます", + "dataRepoKeyTip2": "すべてのデバイスで同じキーを使用する必要があります。キーが一致しない場合、データはクラウドに同期されません", + "dataRepoKey": "データリポジトリキー", + "dataRepoPurge": "データリポジトリの消去", + "dataRepoPurgeTip": "参照されていないすべてのスナップショットと関連するデータオブジェクトを削除します", + "dataRepoPurgeConfirm": "データリポジトリを消去すると、参照されていないすべてのスナップショットと関連するデータオブジェクトが完全に削除されます。消去してもよろしいですか?", + "purge": "消去", + "plsChoose": "最初に選択してください", + "clearMessage": "既読", + "freeSub": "無料体験版", + "sortByUpdateTimeDesc": "更新時間 (降順)", + "sortByUpdateTimeAsc": "更新時間 (昇順)", + "sortByDownloadsDesc": "ダウンロード数 (降順)", + "sortByDownloadsAsc": "ダウンロード数 (昇順)", + "activationCode": "アクティベーションコード", + "activationCodePlaceholder": "ここにサブスクリプションのアクティベーションコードを入力してください", + "exportDataTip": "workspace/data/ フォルダ内のすべてのファイルを zip アーカイブとしてエクスポートします", + "importDataTip": "エクスポートされた zip アーカイブをインポートして、workspace/data/ フォルダを上書きします", + "includeChildDoc": "子ドキュメントを含める", + "text": "テキスト", + "lastUsed": "最近使用した外観", + "removedNotebook": "削除されたノートブック", + "querySyntax": "クエリ構文", + "rollback": "ロークバック", + "custom": "カスタム", + "feedback": "フィードバック", + "inbox": "受信トレイ", + "turnToStatic": "静的アンカーテキスト", + "turnToDynamic": "動的アンカーテキスト", + "sizeLimit": "制限", + "trafficStat": "トラフィック統計", + "hideHeadingBelowBlocks": "見出し以下のブロックを非表示にする", + "matchDiacritics": "ダイアクリティカルマークを一致させる", + "copyHPath": "パスをコピー", + "justify": "両端揃え", + "justifyTip": "コンテンツを両端揃えでレンダリングします", + "rtl": "右から左へ (RTL)", + "ltr": "左から右へ (LTR)", + "rtlTip": "コンテンツを右から左へレンダリングします", + "height": "高さ", + "deactivateUser": "アカウントの無効化", + "deactivateUserTip": "
  • 一度アカウントを無効にすると復元できません
  • ユーザー名は someone101 (以下、ユーザー番号が続きます) で埋められ、パスワードはランダムな数字でリセットされます
  • ユーザーのニックネーム、自己紹介文、URL、プロフィール、アバター、サイトリンク、メールアドレスなどの情報がすべてクリアされます
  • すべてのプライバシー設定スイッチがデフォルトの状態に戻ります
  • 第三者のソーシャルアカウントや携帯電話の紐付けが解除されます
  • ユーザー名、携帯電話番号、紐付けられたサードパーティーのアカウントは将来的に再利用できません
  • ユーザーステータスは無効に設定され、ログインが禁止されます
", + "mergeCell": "セルの結合", + "cancelMerged": "セルの結合を解除", + "useDefaultWidth": "デフォルトの列幅を使用", + "type": "タイプ", + "replaceType": "タイプの置換", + "searchType": "検索タイプ", + "searchBlockType": "ブロックタイプ (以下の有効なタイプで検索します。グローバル検索のフィルタオプションはこの設定を上書きします)", + "searchBlockAttr": "ブロック属性 (コンテンツだけでなく、以下の有効な属性でも検索します)", + "searchIndex": "インデックス", + "indexAssetPath": "アセットパス", + "searchBackmention": "バックリンクメンション (バックリンクメンションの検索キーワードは以下の項目から取得されます)", + "searchVirtualRef": "仮想参照 (仮想参照の検索キーワードは以下の項目から取得されます)", + "netImg2LocalAsset": "ネットワーク画像をローカル画像に変換", + "netAssets2LocalAssets": "ネットワークアセットをローカルに変換", + "releaseDate": "リリース日", + "pkgSize": "パッケージサイズ", + "installSize": "インストールサイズ", + "installDate": "インストール日", + "optimizeTypography": "タイポグラフィの最適化", + "dragPosition": "画像をドラッグして位置を調整", + "exportPDF0": "ページサイズ", + "exportPDF1": "横向きページ", + "exportPDF2": "ページの余白", + "exportPDF3": "ページスケール", + "exportPDF4": "アセットの埋め込み", + "exportPDF5": "折りたたみを保持", + "mergeSubdocs": "サブドキュメントをマージ", + "removeAssetsFolder": "アセットディレクトリを削除", + "upload": "アップロード", + "reminderTip": "リマインダーの時間は現在時刻より前にできません", + "wechatTip": "コンテンツブロックは平文でクラウドに送信され、有効期限が切れると WeChat MP テンプレートメッセージを通じてプッシュされます", + "notEmpty": "リマインダーの時間は空にできません", + "experimentalFeature": "(⚗️ この機能は実験段階です)", + "wechatReminder": "WeChat リマインダー", + "notifyTime": "通知時刻", + "docName": "ドキュメントの名前", + "bootSyncFailed": "起動時のデータ同期に失敗しました", + "use": "使用する", + "uninstallTip": "現在使用中です。アンインストールする前に [設定] - [外観] で切り替えてください", + "safeQuit": "アプリケーションを終了", + "anchor": "アンカー", + "showMore": "さらに表示", + "refPopover": "ポップオーバーで開く", + "refTab": "バックグラウンドタブで開く", + "showHideBg": "背景の表示/非表示", + "directConnection": "直接接続", + "networkProxy": "ネットワークプロキシ", + "copyAnnotation": "注釈をコピー", + "rectAnnotation": "長方形注釈", + "fileName": "ファイル名", + "fileSize": "ファイルサイズ", + "fileCount": "ファイル数", + "title1": "タイトル", + "author": "著者", + "subject": "件名", + "keywords": "キーワード", + "creationDate": "作成日", + "modificationDate": "更新日", + "creator": "作成者", + "producer": "プロデューサー", + "version": "バージョン", + "pageCount": "ページ数", + "pageSize": "ページサイズ", + "linearized": "Web 表示用に最適化", + "firstPage": "最初のページへ移動", + "lastPage": "最後のページへ移動", + "rotateCw": "時計回りに回転", + "rotateCcw": "反時計回りに回転", + "cursorText": "テキスト選択", + "cursorHand": "ハンドツール", + "scrollVertical": "垂直スクロール", + "scrollHorizontal": "水平スクロール", + "scrollWrapped": "折り返しスクロール", + "spreadNone": "見開きなし", + "spreadOdd": "基数見開き", + "spreadEven": "偶数見開き", + "find_match_count_limit": "{{limit}} 件以上の一致があります", + "find_match_count": "{{total}} 件中 {{current}} 件の一致", + "findHighlight": "すべてをハイライト", + "findEntireWord": "単語全体", + "presentationMode": "プレゼンテーションモードに切り替える", + "focusOutline": "現在のアウトライン項目を検索", + "previousLabel": "前へ", + "nextLabel": "次へ", + "pageScaleWidth": "ページ幅", + "pageScaleFit": "ページに合わせる", + "pageScaleAuto": "自動ズーム", + "pageScaleActual": "実際のサイズ", + "thumbPageTitle": "ページ {{page}}", + "loading": "読み込み中…", + "toggleSidebarNotification2Title": "サイドバーの切り替え (ドキュメントにアウトライン/添付ファイル/レイヤーが含まれている場合)", + "toggleSidebarTitle": "サイドバーの切り替え", + "loadingError": "PDF の読み込み中にエラーが発生しました", + "invalidFileError": "無効または破損した PDF ファイルです", + "missingFileError": "PDF ファイルが見つかりません", + "unexpectedResponseError": "予期しないサーバーの応答です", + "printingNotSupported": "警告: このブラウザは印刷を完全にサポートしていません", + "printingNotReady": "警告: PDF ファイルの印刷の準備ができていません", + "unitInches": "インチ", + "unitMillimeters": "ミリメートル", + "additionalLayers": "追加のレイヤー", + "thumbPage": "ページ {{page}} のサムネイル", + "thumbsTitle": "サムネイルを表示", + "document_properties_page_size_name_a3": "A3", + "document_properties_page_size_name_a4": "A4", + "document_properties_page_size_name_letter": "レター", + "document_properties_page_size_name_legal": "リーガル", + "document_properties_page_size_orientation_portrait": "縦", + "document_properties_page_size_orientation_landscape": "横", + "find_not_found": "フレーズが見つかりません", + "find_reached_top": "ドキュメントの先頭に到達しました、下から継続します", + "find_reached_bottom": "ドキュメントの最後に到達しました、上から継続します", + "password_label": "この PDF ファイルを開くためのパスワードを入力してください", + "password_invalid": "パスワードが正しくありません。もう一度入力してください", + "stateExcepted": "\uD83D\uDEA7 異常な状態", + "rebuildIndex": "インデックスの再構築", + "rebuildIndexTip": "システムのランタイムエラーが見つかりました。終了するか、インデックスを再構築して修復するかを選択してください", + "closeNotebook": "閉じたノートブック", + "widget": "ウィジェット", + "customEmoji": "絵文字を追加", + "customEmojiTip": "絵文字フォルダを開き、画像を入れて更新ボタンをクリックしてください", + "recentEmoji": "よく使う絵文字", + "andSubFile": "およびその x サブドキュメント", + "changeIcon": "アイコンを変更", + "addIcon": "アイコンを追加", + "includeSubFile": "\nx 個のサブドキュメントを含む", + "untitled": "タイトルなし", + "lockScreen": "ロック画面", + "cloudIntro1": "エンドツーエンドの暗号化されたデータ同期", + "cloudIntro2": "暗号化と復号化のプロセスは、完全にローカルデバイス上で実行されます", + "cloudIntro3": "暗号化アルゴリズムは、業界で認められている安全な AES GCM です", + "cloudIntro4": "ユーザーが設定したパスワードは、プログラムの組み込みキーで暗号化されてローカルに保存されます", + "cloudIntro5": "暗号化されたパスワードは、総当たり攻撃以外では解読できません", + "cloudIntro6": "無制限のデバイス数とワークスペース数", + "cloudIntro7": "ローカル上の異なるワークスペースは、クラウド上の異なるデータ同期ディレクトリに対応します", + "cloudIntro8": "異なるデバイスは、自分自身のデータ履歴を保持し、同期によって上書きまたは削除されたデータは失われません", + "cloudIntro9": "クラウドアセットのホスティングサービス", + "cloudIntro10": "ワンクリックでローカルのアセットファイルをクラウドにアップロードできます", + "cloudIntro11": "ワンクリックでドキュメントを Wechat MP、Zhihu、Yuque などのプラットフォームにコピーできます", + "selectAll": "すべて選択", + "reposTip": "現在のワークスペースに対応するクラウド同期ディレクトリの名前です。最初のデバイスで作成した後、他のデバイスで選択できます", + "stickOpen": "すべてを開いたままにする", + "cloud": "クラウド", + "setEmojiTip": "絵文字の追加は [設定] - [外観] から行ってください", + "openSyncTip1": "クラウド同期を有効にする", + "openSyncTip2": "無効から有効に変更する場合は、手動で同期ボタンをクリックして同期をトリガーすることをお勧めします", + "syncMode": "クラウド同期モード", + "syncModeTip": "クラウド同期を有効にした後、同期モードを選択できます", + "syncMode1": "自動 (アイドル時に30秒間隔で同期)", + "syncMode2": "手動 (ソフトウェアの起動時と終了時に一度だけ同期され、それ以外の場合は手動で同期をトリガーする必要があります)", + "syncMode3": "完全手動同期 (起動と終了時に同期されず、同期タイミングと同期方向をすべて手動で制御します)", + "cloudSync": "クラウド同期", + "cloudSyncDir": "クラウド同期ディレクトリ", + "cloudSyncDirTip": "クラウド同期ディレクトリとワークスペースは相互に対応し、混在させることはできません。データリポジトリキーを変更した後は、新しいクラウド同期ディレクトリに置き換える必要があります", + "emptyCloudSyncList": "クラウド同期リストが空です", + "retry": "再試行", + "insertVideoURL": "ビデオリンクを挿入", + "insertAudioURL": "音声リンクを挿入", + "insertImgURL": "画像リンクを挿入", + "insertIframeURL": "IFrameリンクを挿入", + "context": "コンテキスト", + "dockTip": "\nクリックして開く/最小化\n右クリックで位置を調整", + "shadow": "シャドウ", + "hollow": "アウトライン", + "attrValue1": "属性値を空にすると、属性が自動的に削除されます", + "specifyPath": "パスを指定する", + "addAttr": "追加", + "addTag": "タグを追加", + "width": "幅", + "attrName": "属性名", + "attr": "属性", + "updatePath": "ディレクトリを変更", + "default": "デフォルト", + "titleBg": "カバーを追加", + "random": "ランダム", + "cloudBackup": "クラウドバックアップ", + "total": "合計", + "cdn": "アセット", + "backup": "バックアップ", + "cloudStorage": "クラウドストレージ", + "vLayout": "垂直レイアウト", + "hLayout": "水平レイアウト", + "merge": "マージ", + "wordCount": "単語数", + "runeCount": "文字数", + "linkCount": "リンク数", + "imgCount": "画像数", + "refCount": "参照数", + "kbd": "キーボード", + "errorStyle": "エラースタイル", + "successStyle": "成功スタイル", + "warningStyle": "警告スタイル", + "infoStyle": "情報スタイル", + "chart": "チャート", + "staff": "楽譜", + "sup": "上付き文字", + "sub": "下付き文字", + "enter": "ズームイン", + "enterBack": "ズームアウト", + "duplicate": "複製", + "turnInto": "変換", + "split": "分割", + "underline": "下線", + "inline-math": "インライン数式", + "moveToUp": "上に移動", + "moveToDown": "下に移動", + "moveToLeft": "左に移動", + "moveToRight": "右に移動", + "copyProtocol": "ブロックのハイパーリンクをコピー", + "copyProtocolInMd": "ブロックの Markdown リンクをコピー", + "uploadAssets2CDN": "アセットファイルをクラウドにアップロード", + "uploadAssets2CDNConfirmTip": "このドキュメントのアセットをクラウドにアップロードしてもよろしいですか?", + "notSupport1": "ノートブック間でのドラッグ&ドロップはサポートされていません", + "keymapTip": "一部のショートカットキーを変更した後は、更新ボタンをクリックして有効化する必要があります", + "keymapTip2": "デフォルトのショートカットキーを使用する", + "searchLimit": "検索結果の表示件数", + "searchLimit1": "データ量が多い場合は値を大きく設定しないでください。デフォルトは 64 です", + "searchLimit2": "この設定項目は、ブロック参照検索、ファイル履歴、クエリ埋め込みブロック、タブパネル、テンプレート関数の queryBlocks/querySpans など、検索に関連するすべての機能に影響します", + "searchCaseSensitive": "大文字と小文字を区別する", + "searchCaseSensitive1": "すべての検索関連機能で大文字と小文字を区別します", + "toggleWin": "ウィンドウの表示/非表示", + "customSort": "カスタムソート", + "collapse": "折りたたむ", + "blockEmbed": "ブロックを埋め込む", + "rowTip": "クリックでメニューを開く
ドラッグで並び替え", + "gutterTip": "クリック/⌘/でメニューを開く
⌘クリックでフォーカス
⌥クリック/⌥→で折り畳み/展開
⇧クリック/⌥⌘で属性の更新
ドラッグで移動
⌃ドラッグで複製
⌥ドラッグで参照
⇧ドラッグで埋め込み
", + "gutterTip2": "クリックでメニューを開く
⇧クリックで属性の更新", + "linkDistance": "リンクの距離", + "collideStrength": "衝突の強さ", + "collideRadius": "衝突の半径", + "centerStrength": "中心の強度", + "lineOpacity": "線の不透明度", + "lineWidth": "線の太さ", + "nodeSize": "ノードサイズ", + "arrow": "矢印", + "paragraph": "段落", + "math": "数式ブロック", + "listItem": "リスト項目", + "superBlock": "スーパーブロック", + "embedBlock": "埋め込みブロック", + "expand": "展開", + "toggleDock": "ドックの表示/非表示", + "notebookName": "ノートブックの名前を入力してください", + "moveToLeftTop": "左上に移動", + "moveToLeftBottom": "左下に移動", + "moveToRightTop": "右上に移動", + "moveToRightBottom": "右下に移動", + "moveToBottomLeft": "左底に移動", + "moveToBottomRight": "右底に移動", + "accountDisplayTitle": "タイトルアイコンを表示", + "accountDisplayVIP": "VIPアイコンを表示", + "rollbackConfirm": "ロールバックは取り返しのつかない操作です。一度実行すると、データを現在の状態に戻すことはできません。${date} を使用してロールバックしてもよろしいですか?", + "pdfTip": "PDF エクスポートはダークテーマに対応していません", + "pdfConfirm": "選択したライトテーマでエクスポートを続行しますか?", + "import": "インポート", + "doc": "ドキュメント", + "openBy": "開く", + "replace": "置換", + "replaceAll": "すべて置換", + "alias": "エイリアス", + "exportTplSucc": "テンプレートが正常にエクスポートされました", + "exportTplTip": "データがすでに存在します。上書きしますか?", + "globalSearch": "グローバル検索", + "stickSearch": "検索結果を固定", + "resetLayout1": "レイアウトをリセット", + "zoomIn": "ズームイン", + "zoomOut": "ズームアウト", + "template": "テンプレート", + "move": "移動", + "layout": "レイアウト", + "expandLevel": "展開レベル", + "mindmap": "マインドマップ", + "dailyNote": "デイリーノート", + "memo": "メモ", + "name": "名前", + "fold": "折り畳み/展開", + "zoom": "ズーム", + "invalid": "無効", + "conflict": "競合", + "checkToggle": "タスクリストのトグル", + "heading1": "見出し1", + "heading2": "見出し2", + "heading3": "見出し3", + "heading4": "見出し4", + "heading5": "見出し5", + "heading6": "見出し6", + "general": "一般", + "insertBefore": "カーソルが位置するブロックの前に空のブロックを挿入", + "insertAfter": "カーソルが位置するブロックの後に空のブロックを挿入", + "list1": "リスト", + "insert": "要素の挿入", + "closeTab": "現在のタブを閉じる", + "keymap": "キーマップ", + "clearFontStyle": "スタイルをクリア", + "clearInline": "インライン要素をクリア", + "fontStyle": "フォントスタイル", + "font": "フォント", + "folder": "フォルダ", + "day": "日数", + "pin": "ピン留めする", + "unpin": "ピン留めを解除", + "createdAt": "作成日時", + "modifiedAt": "更新日時", + "download": "ダウンロード", + "uninstall": "アンインストール", + "all": "すべて", + "bazaar": "マーケットプレイス", + "revolve": "回転", + "useDefault": "デフォルトのプログラムで開く", + "previous": "前へ", + "next": "次へ", + "kernelFault0": "慌てないで...", + "kernelFault1": "データは安全です、ネットワーク接続とカーネルプロセスが正常かどうかを確認して、SiYuan を再起動してください", + "kernelFault2": "問題が解決しない場合は、こちらでヘルプやバグレポートを探してください", + "fontSize": "フォントサイズ", + "fontSizeTip": "デフォルトのフォントサイズは 16 です。この設定は、エディタとエクスポートされる PDF/HTML のフォントサイズに影響します", + "fontSizeScrollZoom": "フォントサイズの素早い調整", + "fontSizeScrollZoomTip": "Ctrl を押しながらマウスホイールやトラックパッドのピンチズーム操作でフォントサイズを調整します", + "font1": "この設定は、エディタのフォントファミリーにのみ影響します。テーマのフォントファミリーを使用するには、デフォルト を選択してください", + "newNameFile": "新しいサブドキュメントの名前は:", + "newNameSettingFile": "新しいドキュメントの名前は:", + "newContentFile": "新しいドキュメントの内容は:", + "exporting": "エクスポート中です、お待ちください...", + "exported": "エクスポートが完了しました", + "refExpired": "検索コンテンツブロックが存在しません", + "emptyContent": "関連するコンテンツが見つかりません", + "useBrowserView": "ブラウザで表示", + "userLocalPDF": "ローカルの PDF ツールで開く", + "copyID": "ID をコピー", + "newBookmark": "ブックマークラベルを作成", + "generateHistory": "履歴生成間隔 (分単位、無効にするには 0 に設定)", + "generateHistoryInterval": "履歴は編集や削除時に自動的に生成され、データ履歴から閲覧およびロールバックが可能です", + "historyRetentionDays": "履歴の保存日数", + "historyRetentionDaysTip": "保存日数を超える履歴データは自動的に削除されます", + "clearHistory": "すべての履歴を消去", + "confirmClearHistory": "ワークスペース内のすべての履歴データを完全に削除してもよろしいですか?", + "fileNameASC": "名前 (昇順)", + "fileNameDESC": "名前 (降順)", + "modifiedASC": "更新時間 (昇順)", + "modifiedDESC": "更新時間 (降順)", + "fileNameNatASC": "名前 (自然な昇順)", + "fileNameNatDESC": "名前 (自然な降順)", + "refCountASC": "参照数 (昇順)", + "refCountDESC": "参照数 (降順)", + "createdASC": "作成時間 (昇順)", + "createdDESC": "作成時間 (降順)", + "docSizeASC": "ドキュメントサイズ (昇順)", + "docSizeDESC": "ドキュメントサイズ (降順)", + "subDocCountASC": "サブドキュメント数 (昇順)", + "subDocCountDESC": "サブドキュメント数 (降順)", + "sort": "並べ替え", + "enterFullscreen": "全画面表示", + "exitFullscreen": "全画面表示を終了", + "clearAll": "参照されていないアセットをすべてクリーンアップしますか?", + "missingAssets": "不足しているアセット", + "unreferencedAssets": "参照されていないアセット", + "paste": "貼り付け", + "pasteRef": "ブロック参照を貼り付け", + "pasteEmbed": "埋め込みブロックを貼り付け", + "cut": "切り取り", + "mentions": "メンション", + "colorFont": "文字色", + "colorPrimary": "背景色", + "sync": "同期", + "syncNow": "今すぐ同期", + "waitSync": "編集データがクラウドに同期されていません", + "paymentSum": "累計支払額", + "refresh": "更新", + "logout": "ログアウト", + "refreshUser": "ユーザー情報が更新されました", + "insertBottom": "タブの下に開く", + "insertRight": "タブの右に開く", + "account1": "有料会員になる", + "account4": "サブスクリプション会員にアップグレード", + "account2": "エンドツーエンドで暗号化されたデータ同期とバックアップ", + "account3": "試用版サブスクリプション", + "account5": "クラウドアセットのホスティング", + "account6": "サブスクリプションの期限切れまでの残り日数", + "account10": "年間サブスクリプション", + "account11": "早期割引期間終了まで", + "account12": "生涯ライセンス", + "clickMeToRenew": "更新手続き", + "dataHistory": "データ履歴", + "quitApp": "終了しますか?", + "reset": "リセット", + "siyuanNote": "SiYuan", + "resetLayout": "デフォルトのレイアウトを復元", + "tag": "タグ", + "twoFactorCaptcha": "2段階認証の認証コード", + "captcha": "認証コード", + "register": "新しいアカウントを作成", + "login": "ログイン", + "accountTip": "SiYuan のプライバシーポリシー を読んで同意します", + "forgetPassword": "パスワードを忘れた場合", + "accountName": "ユーザー名/メールアドレス", + "account": "アカウント", + "globalGraph": "グローバルグラフ", + "backlinks": "バックリンク", + "editor": "エディタ", + "appearance6": "リセットボタンをクリックするとウィンドウレイアウトが初期状態に戻ります", + "appearance9": "テーマフォルダを開く", + "appearance8": "アイコンフォルダを開く", + "appearance5": "ユーザーインターフェースモード", + "appearance4": "モード", + "appearance3": "ダークモードで使われるシンタックスハイライトテーマ", + "appearance2": "ライトモードで使われるシンタックスハイライトテーマ", + "appearance1": "コードブロックのテーマ", + "appearance10": "閉じるボタンの設定", + "appearance11": "閉じるボタンをクリックするとトレイに格納する", + "appearance16": "ステータスバーを非表示にする", + "appearance17": "有効にするとステータスバーを表示しません", + "min": "最小化", + "restore": "復元", + "max": "最大化", + "md2": "コードブロックの合字", + "md3": "コードブロックで合字を表示します", + "md4": "伝統的な中国語の組版習慣に合わせて段落の先頭を自動的にインデントします", + "md7": "ネットワーク画像にマークを表示", + "md8": "ネットワーク画像 (ローカルのアセットファイル以外) の場合、画像の隅にマークを表示します", + "md9": "仮想参照キーワードの含まれるリスト", + "md12": "ブックマーク、名前、エイリアス、メモ、参照数を表示する", + "md16": "ブックマーク、名前、エイリアス、メモ、参照数をブロックの右上に表示します", + "md27": "コードブロックの行番号", + "md28": "コードブロックに行番号を表示します (エディタのパフォーマンスが低下する可能性があります)", + "md29": "Tab スペースの数", + "md30": "Tab キーを押したときにスペースに置き換えます (クリップボードの Tab はスペースに置き換えられません)", + "md31": "コードブロックの折り返し", + "md32": "コードブロック内のコンテンツを自動的に折り返します", + "md33": "仮想参照", + "md34": "既存のブロック参照の名前、エイリアス、アンカーテキストに基づいて、考えられる参照関係が自動的に識別されます", + "md35": "仮想参照のキーワード除外リスト", + "md36": "リストを区切るにはカンマ , を使用します。カンマ自体は \\, でエスケープできます", + "md37": "ブロック参照の動的アンカーテキストの最大長", + "md38": "ブロック参照のアンカーテキストをカスタマイズしていないときに自動的にレンダリングされるアンカーテキストの最大長。デフォルトは 96 文字です", + "md39": "PlantUML サーバーアドレス", + "md40": "デフォルト (https://www.plantuml.com/plantuml/svg/~1) を復元するには空白にします", + "md41": "/ で囲まれた正規表現をサポート。たとえば、foo,/[0-9]+/ の場合、foo と数字を除外することを意味します", + "fileTree2": "エディタのタブを切り替えると、ドキュメントツリーで自動的に現在のドキュメントを選択します", + "fileTree3": "ドキュメントを削除するときに確認しない", + "fileTree4": "ドキュメントを削除するときに確認ボックスを表示しません", + "fileTree5": "ドキュメントの保存場所の参照を作成", + "fileTree6": "(( を使用する時に、新しいドキュメントを保存するパス (例: /folder1/{{now | date \"20060102150405\"}}/)", + "fileTree7": "現在のタブで開く", + "fileTree8": "新しく開いたドキュメントのタブが未変更のタブを置き換えます", + "fileTree9": "起動時にすべてのタブを閉じる", + "fileTree10": "インターフェースを起動するたびに、前回開かれていた固定されていないタブが自動的に閉じられます", + "fileTree11": "新しいデイリーノート", + "fileTree12": "新規ドキュメントの保存場所", + "fileTree13": "Ctrl+N を使用した時の、新規ドキュメントの保存パス (例: /folder1/{{now | date \"20060102150405\"}}。パスが / から始まらない場合は、現在のドキュメントの相対パスが使用されます)", + "fileTree14": "保存パス (日付形式のテンプレート変数をサポート。例: /Daily Notes/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}})", + "fileTree15": "テンプレートのパス (例: dailynote.md の場合、ファイルは workspace/data/templates/ の下に配置する必要があります)", + "fileTree16": "リストする最大数", + "fileTree17": "サブドキュメント/タグが多すぎる場合、この制限によりパフォーマンスが向上します", + "fileTree18": "7レベルより深いサブドキュメントの作成を許可する", + "fileTree19": "一部のオペレーティングシステムでは、7レベルより深いサブドキュメントに、ワークスペースデータの手動コピーができない場合があります", + "fileTree20": "一行で保存", + "fileTree21": "ドキュメントとデータベースファイルを保存する際に、改行を行わない JSON フォーマットを使用します。これにより、ファイルサイズが約 30% 削減され、読み書きの効率が 50% 向上します", + "export10": "たとえば、<span style=\"color: #fff;background-color: black;padding: 4px;border-radius: 5px;float:right;\">SiYuan</span>
空の場合は、ウォーターマークテキストまたはウォーターマークファイルパスを使用します", + "export11": "エクスポート時のコンテンツ参照ブロックのコンテンツ処理方法", + "export12": "エクスポート時のコンテンツ埋め込みブロックのコンテンツ処理方法", + "export13": "アンカーテキストのラップ記号", + "export14": "入力ボックスに、アンカーテキストの左側の記号と、アンカーテキストの右側の記号を順番に入力してください", + "export15": "ラベルパッケージの記号", + "export16": "入力ボックスに、タグの左側の記号と、タグの右側の記号を順番に入力してください", + "export17": "ドキュメントのタイトルを追加", + "export18": "ドキュメントのタイトルをレベル1の見出しとして自動的に挿入します", + "export19": "Pandoc 実行ファイルのパス", + "export20": "Word の .docx ファイルをエクスポートするには、Pandoc を使用したフォーマット変換が必要です", + "export21": "PDF フッターテンプレート", + "export22": "%page は現在のページ番号、%pages は総ページ数で、Sprig テンプレート関数に対応しています", + "export23": "YAML フロントマター付きの Markdown をエクスポート", + "export24": "エクスポートされる Markdown ファイルの先頭に一般的なメタデータを追加します", + "export25": "Word の .docx テンプレートのパスをエクスポート", + "export26": "Word の .docx ファイルをエクスポートする際に使用するテンプレートの絶対パス。つまり、Pandoc の --reference-doc パラメータの値です", + "export27": "PDF に透かしを書き出す", + "export28": "透かしのテキスト、または透かし画像ファイルのパス", + "export29": "透かしの位置、サイズ、スタイルなど", + "export30": "画像に透かしを書き出す", + "theme11": "ライトモードで使われるテーマ", + "theme12": "ダークモードで使われるテーマ", + "theme2": "ユーザーインターフェースで使用するアイコン", + "language1": "ユーザーインターフェースの表示言語", + "summary": "概要", + "bookmark": "ブックマーク", + "icon": "アイコン", + "appearance": "外観", + "export0": "元のテキスト", + "export1": "ブロック引用", + "export2": "ブロック URL 付きアンカーテキスト", + "export3": "アンカーテキストのみ", + "export4": "脚注", + "export5": "PDF 注釈の参照", + "export6": "エクスポート時の PDF 注釈内のアンカーテキストの処理方法", + "export7": "ファイル名 - ページ番号 - アンカーテキスト", + "export8": "アンカーテキストのみ", + "export9": "アンカーハッシュ (ノートブックのエクスポート専用)", + "graphConfig2": "参照カウントフィルタ", + "selectOpen": "常に開いているドキュメントを選択", + "selectOpen1": "開いているドキュメントを選択", + "closeAll": "すべて閉じる", + "closeOthers": "他を閉じる", + "closeLeft": "左側を閉じる", + "closeRight": "右側を閉じる", + "closeUnmodified": "未変更を閉じる", + "newFileTip": "最初にノートブックを開いてください", + "copyBlockRef": "ブロック参照をコピー", + "copyBlockEmbed": "ブロック埋め込みをコピー", + "linkLevel": "深さ", + "mark": "マーク", + "splitLR": "右に分割", + "splitMoveR": "分割して右に移動", + "splitTB": "下に分割", + "splitMoveB": "分割して下に移動", + "debug": "開発者ツール", + "fileTree": "ドキュメントツリー", + "graphView": "グラフビュー", + "sponsor": "開発者に寄付する", + "relativeRelation": "リンク済み", + "parentRelation": "親 - 子", + "openInNewTab": "新しいタブで開く", + "help": "ヘルプ", + "userGuide": "ユーザーガイド", + "paragraphBeginningSpace": "段落の先頭に空白を2つ挿入", + "outline": "アウトライン", + "newFile": "新規ドキュメント", + "close": "閉じる", + "delete": "削除", + "rename": "名前を変更", + "cancel": "キャンセル", + "confirm": "確認", + "confirmDelete": "本当に削除しますか?", + "confirmDeleteCloudDir": "本当にクラウド同期ディレクトリを削除しますか?", + "back": "戻る", + "mount": "ノートブックを開く", + "newNotebook": "新規ノートブック", + "fileNameRule": "ドキュメントの名前に / を含めることはできません", + "slogan": "思考をリファクタリングする", + "showInFolder": "フォルダで表示", + "search": "検索", + "config": "設定", + "userName": "ユーザー名", + "password": "パスワード", + "passphrase": "パスフレーズ", + "theme": "テーマ", + "language": "言語", + "about": "情報", + "about1": "Copyright (c) 2020-present • Yunnan Liandi Technology Co., Ltd. • プライバシーポリシー利用規約", + "about2": "ブラウザで使用", + "about3": "Chrome ブラウザを使用して、コンピュータと同じネットワークに接続してください。ポートは ${port} です (ランダムなポートに加えて、最初に起動したワークスペースは 6806 という固定ポートでも自動的にリッスンが行われ、これによりブラウザが拡張機能や他の外部プログラムからカーネルインターフェイスが呼び出されます)。接続可能なアドレスは次の通りです: ", + "about4": "ブラウザを開く", + "about5": "アクセス認証コード", + "about6": "設定したコードがアクセス認証パスワードとして使用されます", + "about7": "システムのロック画面に従う", + "about8": "システム画面のロック時にアプリケーションを自動的にロックします", + "about9": "エラーメッセージと診断データを自動的にアップロードする", + "about10": "Sentry SDK を介してエラー情報と診断データを自動的にアップロードします。このデータに個人情報は含まれておらず、開発者がバグを修正するために使われます。設定を変更するとアプリケーションが自動的に終了しますので、手動で再起動してください", + "about11": "ネットワークサービス", + "about12": "同じ LAN 内の他のデバイスからのアクセスを許可します。設定を変更するとアプリケーションが自動的に終了しますので、手動で再起動してください", + "about13": "API トークン", + "about14": "API を呼び出す際にトークンを認証する必要があります
HTTP リクエストヘッダー Authorization: token ${token}", + "about17": "直接接続に設定されている場合はプロキシを有効にしないでください", + "about18": "ループバックアドレス (127.0.0.1/[::1]) 以外のアドレスを使用する場合は、最初にアクセス認証コードを設定してください", + "checkUpdate": "アップデートを確認", + "currentVer": "現在のバージョン", + "downloadLatestVer": "最新バージョンをダウンロード", + "themeLight": "ライト", + "themeDark": "ダーク", + "themeOS": "システムに従う", + "pasteAsPlainText": "プレーンテキストとして貼り付け", + "assets": "アセット", + "alignCenter": "中央揃え", + "alignLeft": "左揃え", + "alignRight": "右揃え", + "alternateText": "代替テキスト", + "bold": "太字", + "cardPreview": "復習", + "check": "タスクリスト", + "code": "コードブロック", + "column": "列", + "copied": "コピーしました", + "copy": "コピー", + "copyText": "テキストをコピー", + "delete-column": "列を削除", + "delete-row": "行を削除", + "down": "下へ", + "downloadTip": "ブラウザはダウンロード機能をサポートしていません", + "edit-mode": "編集モードの切り替え", + "emoji": "絵文字", + "export": "エクスポート", + "fileTypeError": "ファイルの種類が正しくありません", + "fullscreen": "全画面表示の切り替え", + "generate": "生成中", + "headings": "見出し", + "imageURL": "画像の URL", + "indent": "インデント", + "info": "情報", + "inline-code": "インラインコード", + "insert-after": "後にブロックを挿入", + "insert-before": "前にブロックを挿入", + "insertColumnLeft": "左に1列挿入", + "insertColumnRight": "右に1列挿入", + "insertRowAbove": "上に1行挿入", + "insertRowBelow": "下に1行挿入", + "italic": "斜体", + "line": "区切り線", + "link": "リンク", + "image": "画像", + "ref": "参照", + "list": "リスト", + "more": "詳細", + "nameEmpty": "名前が空です", + "ordered-list": "番号付きリスト", + "outdent": "アウトデント", + "outlineOutdent": "リストのアウトラインアウトデント", + "outlineOutdentTip": "リスト項目にアウトラインロジックを使用してアウトデントします", + "spellcheck": "スペルチェック", + "spellcheckTip": "ブラウザの組み込みスペルチェック機能を使用します。現時点では、英語のスペルチェックのみがサポートされています", + "over": "以上", + "preview": "プレビュー", + "quote": "引用", + "startRecord": "録音開始", + "endRecord": "録音停止", + "record-tip": "このデバイスは録音をサポートしていません", + "recording": "録音中...", + "redo": "やり直し", + "remove": "削除", + "row": "行", + "splitView": "分割表示", + "strike": "取り消し線", + "table": "テーブル", + "title": "タイトル", + "tooltipText": "ツールチップテキスト", + "undo": "元に戻す", + "up": "上へ", + "update": "更新", + "insertAsset": "画像またはファイルを挿入", + "uploadError": "アップロードエラー", + "uploading": "アップロード中...", + "wysiwyg": "WYSIWYG", + "_label": "日本語", + "_time": { + "albl": "前", + "blbl": "これから", + "now": "今", + "1s": "1 秒%s", + "xs": "%d 秒%s", + "1m": "1 分%s", + "xm": "%d 分%s", + "1h": "1 時間%s", + "xh": "%d 時間%s", + "1d": "1 日%s", + "xd": "%d 日%s", + "1w": "1 週間%s", + "xw": "%d 週間%s", + "1M": "1 ヶ月%s", + "xM": "%d ヶ月%s", + "1y": "1 年%s", + "2y": "2 年%s", + "xy": "%d 年%s", + "max": "しばらく%s" + }, + "_taskAction": { + "task.repo.checkout": "スナップショットからチェックアウト中", + "task.database.index.full": "インデックスの再構築中", + "task.database.index": "データベースのインデックスを作成中", + "task.database.index.commit": "データベースのインデックスをコミット中", + "task.database.index.ref": "データベースのインデックスを参照中", + "task.database.index.fix": "データベースのインデックスを修正中", + "task.ocr.image": "画像 OCR を実行してテキストを抽出中", + "task.history.generateFile": "履歴データベースのドキュメントを生成中", + "task.history.database.index.full": "履歴データベースのインデックスを再構築中", + "task.history.database.index.commit": "履歴データベースのインデックスをコミット中", + "task.database.index.embedBlock": "データベースのインデックスを埋め込みブロック中", + "task.reload.ui": "UI の再読み込み中", + "task.asset.database.index.full": "アセットデータベースのインデックスを再構築中", + "task.asset.database.index.commit": "アセットデータベースのインデックスをコミット中" + }, + "_trayMenu": { + "showWindow": "ウィンドウを表示", + "hideWindow": "ウィンドウを非表示", + "setWindowTop": "ウィンドウを最前面に設定", + "cancelWindowTop": "ウィンドウの最前面設定を解除", + "officialWebsite": "公式サイトにアクセス", + "openSource": "GitHubでプロジェクトを見る", + "resetWindow": "ウィンドウをリセットして終了", + "quit": "アプリケーションを終了" + }, + "_attrView": { + "table": "テーブル", + "key": "プライマリキー", + "select": "選択" + }, + "_kernel": { + "0": "ノートブックのクエリに失敗しました", + "1": "ファイル名が重複しています", + "2": "ボックス [%s] およびパス [%s] のファイル一覧の取得に失敗しました: %s", + "3": "ノートブック [%s] ファイル [%s] の読み込みに失敗しました: %s", + "4": "ノートブック [%s] ファイル [%s] のメタ情報の取得に失敗しました: %s", + "5": "ノートブック [%s] ファイル [%s] の移動に失敗しまし: %s", + "6": "ノートブック [%s] フォルダ [%s] の作成に失敗しまし: %s", + "7": "ノートブック [%s] パス [%s] の削除に失敗しました: %s", + "8": "更新の確認に失敗しました", + "9": "\uD83D\uDE80 新しいバージョンが利用可能です。リリースアナウンスを参照してください %s", + "10": "最新バージョンです", + "11": "\uD83D\uDCE2 システムアナウンス: %s", + "12": "アセットのクエリに失敗しました [%s]", + "13": ". から始まるファイルは作成できません", + "14": "エクスポートに失敗しました: %s", + "15": "ID [%s] のコンテンツブロックが見つかりません", + "16": "ドキュメントの名前を入力してください", + "17": "起動時の初期同期に失敗しました。操作を続けると、予想外なデータの上書きが起こる可能性があります。先に同期を行ってください", + "18": "コミュニティユーザーアカウントの取得に失敗しました", + "19": "ユーザー情報が期限切れです。再度ログインしてください", + "20": "サブドキュメントを含む場合は見出しに変換できません", + "21": "キャプチャを入力してください", + "22": "キャプチャが正しくありません", + "23": "データリポジトリが壊れています。データリポジトリをリセットしてください", + "24": "ネットワークがタイムアウトしました。後からまた試してださい", + "25": "属性名は英字と数字のみ対応しています", + "26": "[設定] - [バージョン情報] - [データリポジトリキー] でデータリポジトリキーを初期化してください", + "27": "[%v] をアップロード中", + "28": "ネットワークに問題があります。後からまた試してださい", + "29": "この機能を使用するには、有料サブスクリプションが必要です (サブスクリプション済みの方は、[設定] - [アカウント] で更新または再ログインしてください)", + "30": "クラウド情報の取得に失敗しました", + "31": "アカウントの認証に失敗しました。もう一度ログインしてください", + "32": "クラウドノートブックの削除に失敗しました", + "33": "ファイルの読み書きやネットワークへのアクセス権限が不足しています。ワークスペースディレクトリの権限や、ウイルス対策ソフト/ファイアウォールの設定を確認してください。以前に管理者として SiYuan を実行したことがある場合は、新しいワークスペースディレクトリに切り替えることを検討し、今後は管理者として実行しないでください (現在のワークスペースディレクトリは、一般ユーザーがアクセスできなくなる可能性があります)", + "34": "この操作は読み取り専用モードではサポートされていません", + "35": "インデックスを再構築しています。お待ちください...", + "36": "コンテンツの履歴が多すぎるため、パフォーマンスに影響を与えないように、プレーンテキスト表示に切り替えました", + "37": "クラウド同期ディレクトリ (バケット) の名前には、スペースや特殊記号を含めることはできず、最大長は 63 文字です", + "38": "キーワードが多すぎます [%d]。必要に応じて、[設定] - [検索] - [バックリンク] - [メンション] - [キーワード制限] を調節してください", + "39": "インデックス %s を削除しています", + "40": "インデックス %s を挿入しています", + "41": "アップロードが完了しました [%d]", + "42": "設定が完了しました。アプリケーションは自動的に閉じられます、必要に応じて再起動してください...", + "43": "クラウドスペース [%s] の最大ストレージ容量を超過したため、データのアップロードを続行できません", + "44": "テンプレートの解析に失敗しました: %s", + "45": "開いています、お待ちください....", + "46": "マーケットプレイスパッケージ [%s] のインストールに失敗しました: %s", + "47": "アンインストールに失敗しました: %s", + "48": "最初の [%d] 個のサブドキュメントのみを表示します。調整が必要な場合は、[設定] - [ドキュメントツリー] - [リストする最大数] を変更してください", + "49": "ノートブックの設定でデイリーノートの保存パスを指定してください", + "50": "参照を解決しています [%s]", + "51": "コンテンツブロックをキャッシュしています [%d]", + "52": "ユーザーガイドは開かれるたびに中のデータがリセットされるため、変更したりデータを保存したりしないでください", + "53": "データ同期が有効になっていません", + "54": "参照のインデックスを作成しています...", + "55": "[%d] ドキュメントの参照をインデックスしました", + "56": "インデックスを再構築しています、完了するまでお待ちください", + "57": "一時キーの作成に失敗しました", + "58": "[%d/%d] インデックスを検証しています...", + "59": "同期除外リストの設定に失敗しました", + "60": "更新パッケージの取得に失敗しました: %s", + "61": "⬆️ 新しいバージョンをインストールする準備ができました。今すぐ新しいバージョンをインストールしますか?", + "62": "⬆️ 新しいバージョンをインストールする準備できました。終了するときに、新しいバージョンをインストールするかどうかを確認します", + "63": "復元中です、お待ちください...", + "64": "合計 [%d] 個のファイルがあります。インデックスの作成には時間がかかりますので、しばらくお待ちください...", + "65": "データをエクスポートしています...", + "66": "データファイル [%s] が作成されました", + "67": "%s にアップロードされ、%s にダウンロードされました", + "68": "試用期間中にローカルデータがクラウドスペース [%s] の最大ストレージ容量に達したため、データ同期を続けられません。継続して利用するにはサブスクリプションが必要です。サブスクライブするとクラウドストレージの容量が [8 GB] にアップグレードされます", + "69": "ダウンロードが完了しました", + "70": "[%s] を処理しています、お待ちください...", + "71": "アセットファイルの挿入に失敗しました。ドキュメントを開きなおしてください", + "72": "コンテンツがクリップボードにコピーされました。SiYuan に貼り付けてください", + "73": "インポートしています、お待ちください...", + "74": "カーネルの起動が完了していません [%d%%]。後からまた試してください", + "75": "ファイルへのアクセスに失敗しました", + "76": "クラウドストレージサービスプロバイダーのネットワーク接続検証の結果が異常です。ネットワーク設定を確認してください", + "77": "無効なディレクトリパス [%s]", + "78": "古いパスと新しいパスが同じです", + "79": "Markdown ドキュメントのインポートのみをサポートしています", + "80": "同期に失敗しました: %s", + "81": "データを同期しています...", + "82": "%s に同期しました", + "83": "アクセス認証コードが正しくありません", + "84": "バックアップに失敗しました: %s", + "85": "ファイルが他のプログラムによって使用されています %s", + "86": "[設定] - [情報] - [アクセス認証コード] を設定してください", + "87": "この場所には移動できません", + "88": "[%d] 個のデータファイルの解析が完了し、処理待ちのデータファイルが [%d] 個残っています", + "89": "[%d/%d] ブロックレベル要素 [%d] のデータインデックスを [%s] 個作成しました", + "90": "[%d/%d] ブロックレベル要素 [%d] の検索インデックスを [%s] 個作成しました", + "91": "ブロックツリーデータを読み込んでいます...", + "92": "ドキュメントツリーを解析しています [%s]", + "93": "[%d/%d] ドキュメント [%s] に関連するインデックスをクリーンアップしました", + "94": "アップロードに失敗しました: %s", + "95": "終了しています...", + "96": "終了時の同期に失敗しました。ローカルデータがクラウドデータと一致していることを確認するために、手動で同期を実行してください", + "97": "強制終了", + "98": "ワークスペースをインストールパスの下に設定しないでください。プログラムのアンインストールや更新時にデータが失われる可能性があります", + "99": "データのクリーニングが完了しました", + "100": "データをクリーニングしています...", + "101": "リマインダーの設定が完了しました [%s]", + "102": "処理が完了しました", + "103": "更新インストールパッケージがバックグラウンドで自動的にダウンロードされました。終了時に、新バージョンをインストールするかどうかを確認するメッセージが表示されます", + "104": "更新インストールパッケージのダウンロードに失敗しました。ネットワーク接続を確認してください", + "105": "無題", + "106": "最大長は 512 文字に制限されています", + "107": "ドキュメントを移動しました [%s]", + "108": "データ同期で競合が検出されました。生成された競合内容は [データ履歴] で確認できます", + "109": "リマインダーの削除が完了しました [%s]", + "110": "名前を変更しています...", + "111": "ドキュメントを保存しています [%s]...", + "112": "Markdown 構文マーカーを含めないでください [%s]", + "113": "データの書き込みを完了しています...", + "114": "タグは空にできません", + "115": "最初に [設定] - [エクスポート] - [Pandoc 実行ファイルのパス] を設定してください", + "116": "処理中です、しばらくお待ちください...", + "117": "[%s] は有効な Pandoc 実行可能ファイルではありません", + "118": "現在の設定では、7レベル以上の深さにサブドキュメントを作成できません", + "119": "ネットワークファイルをダウンロードしています [%s]", + "120": "合計 [%d] ファイルのダウンロードが完了しました", + "121": "このドキュメントにはネットワークファイルがありません", + "122": "この機能は SiYuan デスクトップで設定する必要があります。すでに設定している場合は、上部のアカウント設定で更新してください", + "123": "同期機能は、クラウド同期ディレクトリを追加/選択した後にのみ有効化できます", + "124": "[設定] - [クラウド同期を有効にする] からクラウド同期を有効にしてください", + "125": "自動同期の失敗回数が多すぎます。手動で同期を試みてください。それでも問題が解決しない場合は、GitHub Issues から報告してください", + "126": "ブックマークは空にできません", + "127": "サブスクリプションの有効期限が切れるまであと [%d] 日です。有効期限が過ぎるとクラウドデータは完全に削除されます。更新するには、こちらにアクセスしてください", + "128": "サブスクリプションの有効期限が切れました。有効期限が過ぎると、クラウドデータは完全に削除されます。サブスクリプションの有効期限が切れてから 2 日後にはリマインダーが表示されなくなります。更新するには、こちらにアクセスしてください", + "129": "クラウドデータが破損しています。問題を解決するために、ローカルデータリポジトリとクラウド同期ディレクトリをリセットしてください", + "130": "新しいバージョンのインストーラーを起動しています。オペレーティングシステムがセキュリティスキャンを実行するため、起動に時間がかかる場合があります。しばらくお待ちください...", + "131": "この操作はサポートされていません。クラウドストレージプロバイダーの管理コンソールから操作してください", + "132": "現在の検索方法は置換操作をサポートしていません。[キーワード] または [正規表現] を使用してください", + "133": "更新インストールパッケージをダウンロード中 [%s]", + "134": "新しく復元されたデータが同期によって上書きされるのを防ぐため、データ同期機能が自動的に一時停止されました", + "135": "データリポジトリキーが間違っているためデータを復号できません。問題を解決するために、[ユーザーガイド] - [FAQ] - [キーの紛失] の手順を参照してください", + "136": "データリポジトリキーを初期化しています...", + "137": "データリポジトリキーの初期化に失敗しました: %s", + "138": "データリポジトリキーが設定されました", + "139": "データスナップショットを生成しています。[%s] のデータファイルが処理され、[%s] 残っています...", + "140": "データスナップショットの作成に失敗しました: %s", + "141": "データスナップショットのロールバックに失敗しました", + "142": "入力は空にできません", + "143": "データスナップショットを作成しています...", + "144": "データリポジトリをリセットしています...", + "145": "データリポジトリがリセットされました。インターフェースは自動的に更新されます...", + "146": "データリポジトリのリセットに失敗しました: %s", + "147": "新しいデータスナップショットを作成しました。所要時間 %.2fs", + "148": "データスナップショットを確認しましたが、変更は見つかりませんでした。所要時間 %.2fs", + "149": "データスナップショットが同期されました。所要時間 %.2fs", + "150": "アップロード/ダウンロードされたファイル %d/%d
 アップロード/ダウンロードされたチャンク %d/%d
 送信/受信バイト %s/%s", + "151": "次の記号を含めないでください \\ / : * ? " ' < > |", + "152": "アップロードされたファイル %d、チャンク %d、送信バイト %s", + "153": "ダウンロードされたファイル %d、チャンク %d、受信バイト %s", + "154": "クラウドでサポートされるスナップショットのバックアップ数は最大12個です", + "155": "クラウド同期ディレクトリが [main] にリセットされました", + "156": "アクセス認証に失敗しました、更新するか再起動してください", + "157": "キーが認識されません。キーが間違っていないか確認してください", + "158": "データリポジトリのインデックス作成中、データを走査中 %s", + "159": "データリポジトリのインデックス作成中、最新ファイルを取得中 %v/%v", + "160": "データリポジトリのインデックス作成中、ファイルを挿入中 %v/%v", + "161": "データリポジトリのチェックアウト中、データを走査中 %s", + "162": "データリポジトリのチェックアウト中、ファイルを挿入中 %v/%v", + "163": "データリポジトリのチェックアウト中、ファイルを削除中 %v/%v", + "164": "データリポジトリからスナップショットをダウンロード中 %s", + "165": "データリポジトリからファイルをダウンロード中 %v/%v", + "166": "データリポジトリからチャンクをダウンロード中 %v/%v", + "167": "データリポジトリから参照をダウンロード中 %s", + "168": "データリポジトリへスナップショットをアップロード中 %s", + "169": "データリポジトリへファイルをアップロード中 %v/%v", + "170": "データリポジトリへチャンクをアップロード中 %v/%v", + "171": "データリポジトリへ参照をアップロード中 %s", + "172": "認証コードを忘れた場合は、こちらからヘルプを参照してください", + "173": "アクセス認証コードを入力してください", + "174": "アクセスのロックを解除", + "175": "確認コードを入力してください", + "176": "SiYuan", + "177": "アプリケーションを終了", + "178": "アクセス認証 - SiYuan", + "179": "ディスク容量が不足している可能性があります。ワークスペースが存在するディスクの空き容量をデータの2倍以上に保つことを推奨します", + "180": "検索コンテンツブロックが存在しません", + "181": "ドキュメントはコミュニティに共有されました、クリックして表示", + "182": "ドキュメントを共有しています、お待ちください...", + "183": "インデックスドキュメントツリーを検証中 [%d/%d %s]", + "184": "Powered by SiYuan", + "185": "インデックスの検証が完了しました", + "186": "クラウド同期ディレクトリをロック中", + "187": "クラウド同期ディレクトリのロックを解除", + "188": "クラウド同期ディレクトリのロックに失敗しました。後からまた試してください", + "189": "クラウド同期ディレクトリは他のデバイスによってロックされています。後からまた試してください", + "190": "インデックスの検証中に問題が見つかりましたが、自動的に修正されました", + "191": "[%d/%d] 履歴データインデックスを作成しました", + "192": "履歴データインデックスを再構築しています。お待ちください...", + "193": "設定方法は、ユーザーガイドの [人工知能] の章を参照してください", + "194": "Nutstore インターフェースには制限があります。他の WebDAV サービスを使用してください", + "195": "システム時刻が正しくありません。システム時刻を調整してから再試行してください", + "196": "サードパーティの同期ディスクにワークスペースのパスを設定しないでください。設定するとデータが破損します (iCloud/OneDrive/Dropbox/Google Drive/Nutstore/Baidu Netdisk/Tencent Weiyun など)", + "197": "指定された Word の .docx テンプレート [%s] が見つかりませんでした。[設定] - [エクスポート] - [Word の .docx テンプレートのパスをエクスポート] を確認してください", + "198": "これは有効なデータアーカイブではありません。アーカイブが [ドキュメントツリー] からエクスポートされた場合は、[ドキュメントツリー] からインポートしてください", + "199": "これは有効な .sy.zip アーカイブではありません。アーカイブが [設定] からエクスポートされた場合は、[設定] からインポートしてください", + "200": "グローバル検索の応答時間が長いため、タイプフィルタリングを追加するかキーワードで検索範囲を絞ることをお勧めします", + "201": "データリポジトリの消去に失敗しました: %s", + "202": "データリポジトリをクリーンアップしています...", + "203": "データリポジトリが消去されました。[%d] 個のスナップショットと [%d] 個のデータオブジェクトが削除され、合計で [%s] のディスク領域が解放されました", + "204": "ユーザーガイドのドキュメントはコミュニティへの共有をサポートしていません", + "205": "このプラグインは現在の環境ではサポートされていません", + "206": "コンテンツの置換を実行中 [%d/%d]", + "207": "パスの置換を実行中 [%d/%d]", + "208": "インデックスリストをアップロードしています...", + "209": "チェックインデックスをアップロードしています...", + "210": "クラウドデータの検証中 %v/%v", + "211": "クラウドデータの検証が完了しました", + "212": "現在のバージョンのクラウドデータ同期にはいくつかの問題があります。最新バージョンにアップグレードしてください", + "213": "クラウド認証に失敗しました。最新バージョンにアップグレードしてから再度ログインして同期を試みてください", + "214": "この機能を使用するには、ログインして [PRO 機能] または [サブスクリプション] を購入する必要があります", + "215": "保存に失敗しました: 対象ファイルが別のプログラムによって使用されています", + "216": "アセットコンテンツデータインデックスを再構築しています。お待ちください...", + "217": "[%d/%d] アセットコンテンツデータインデックスを作成しました", + "218": "検出されたデータリポジトリのスナップショットが多すぎるため、プログラムの起動とデータ同期が遅くなります。[設定] - [情報] - [データリポジトリの消去] の実行を検討してください", + "219": "クラウドストレージサービスが利用できません。後からまた試してください", + "220": "旧バージョンの不具合により、クラウドデータが破損しています。[ユーザーガイド] - [FAQ] - [キーの紛失] の手順を参照して、ローカルデータリポジトリとクラウドディレクトリをリセットしてください", + "221": "ドキュメントをグループ化した後の置換操作はサポートされていません。グループ解除してから置換してください", + "222": "データ同期が進行中です。データ同期が完了するまで待ってから、もう一度試してください", + "223": "クラウドストレージを消去しています...", + "224": "クラウドストレージのデータオブジェクトをリストしています...", + "225": "クラウドストレージのスナップショットをリストしています...", + "226": "クラウドストレージのスナップショット参照をリストしています...", + "227": "クラウドストレージのスナップショットをダウンロードしています...", + "228": "クラウドストレージのデータファイルをダウンロードしています...", + "229": "未参照のクラウドストレージスナップショットを削除しています...", + "230": "未参照のクラウドストレージチェックインデックスを削除しています...", + "231": "未参照のクラウドストレージデータオブジェクトを削除しています...", + "232": "クラウドデータストレージが消去されました。[%d] 個のスナップショットと [%d] 個のデータオブジェクトが削除され、合計で [%s] のディスク領域が解放されました", + "233": "ユーザーガイドを閉じています...", + "234": "[%d/%d] ドキュメント [%s] の読み取り可能なパスを [%d] 更新しました", + "235": "[%d/%d] マーケットプレイスパッケージを更新しています...", + "236": "[%d/%d] マーケットプレイスパッケージ [%s] を更新していますす...", + "237": "[%d] 個のマーケットプレイスパッケージがすべて正常に更新されました", + "238": "マーケットプレイスパッケージ [%s] の更新に失敗しました。後からまた試してください", + "239": "関連する操作が処理中です。後からまた試してください", + "240": "コンテナブロックに見出しをドラッグして配置する操作はサポートされていません", + "241": "小見出しへのドラッグはサポートされていません", + "242": "現在のデータベースにはすでにバインディングブロックが存在します", + "243": "最初の [%d] 個のタグ (サブタグを含む) のみを表示します。調整が必要な場合は、 [設定] - [ドキュメントツリー] - [リストする最大数] を変更してください", + "244": "前回の使用後に正常に終了しませんでした。[ドキュメントツリー] - [インデックスの再構築] を実行することをお勧めします。今後は、コンピュータをシャットダウンする前にプログラムを完全に終了してください", + "245": "前回の使用後に正常に終了しませんでした。[ドキュメントツリー] - [インデックスの再構築] を実行することをお勧めします。今後は、右パネルの [アプリケーションの終了] を使用して終了してください", + "246": "ドキュメントのタイトルに / を含めることはできません。_ に置き換えられました" + } +} diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index 3169535c40..abb6ce60c5 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -480,7 +480,9 @@ "syncConfGuide5": "如果資料量較大,第一次同步會比較慢,請耐心等待
iOS/iPad 端在同步時請勿切換應用並保持螢幕恆亮", "copyPlainText": "複製純文字", "findInDoc": "${x} 個文檔中匹配 ${y} 項", - "jumpToParentNext": "跳轉到父級的下一個塊", + "jumpToParentNext": "跳到父區塊的下一個區塊", + "jumpToParentPrev": "跳到父區塊的上一個區塊", + "jumpToParent": "跳到父區塊", "initRepoKeyTip": "如果其他設備上已經初始化過密鑰,請使用 [導入密鑰] 或者通過相同的密碼生成密鑰,否則無法雲端同步資料,所以請務必在所有設備上使用相同的密鑰", "crossKeepLazyLoad": "跨頁多選需在更多菜單中選中【保持已載入內容】", "keepLazyLoad": "保持已載入的內容", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index 969e4b22e8..a2f5dce62c 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -481,7 +481,9 @@ "syncConfGuide5": "如果数据量较大,第一次同步会比较慢,请耐心等待
iOS/iPad 端在同步时请勿切换应用并保持亮屏", "copyPlainText": "复制纯文本", "findInDoc": "${x} 个文档中匹配 ${y} 项", - "jumpToParentNext": "跳转到父级的下一个块", + "jumpToParentNext": "跳转到父块的下一个块", + "jumpToParentPrev": "跳转到父块的上一个块", + "jumpToParent": "跳转到父块", "initRepoKeyTip": "如果其他设备上已经初始化过密钥,请使用 [导入密钥] 或者通过相同的密码生成密钥,否则无法云端同步数据,所以请务必在所有设备上使用相同的密钥", "crossKeepLazyLoad": "跨页多选需在更多菜单中选中 [保持已加载内容]", "keepLazyLoad": "保持已加载的内容", diff --git a/app/changelogs/v0.32-sillot.md b/app/changelogs/v0.32-sillot.md new file mode 100644 index 0000000000..ecf5b31072 --- /dev/null +++ b/app/changelogs/v0.32-sillot.md @@ -0,0 +1,38 @@ +# Sillot v0.32 + + +# ❤️ 欢迎共建汐洛 694357845@qq.com +# 🚧 汐洛仅用于开发者测试,不要用来存储重要数据! + +🚢 [Docker image](https://hub.docker.com/r/soltus/sillot/tags?page=1&ordering=last_updated) 📦 [Chromium Browser Extension](https://github.com/K-Sillot/Sillot-Be/releases) + + + + + +--- + +## [@Sillot](https://github.com/Hi-Windom/Sillot) + +### 文档相关 | Document + +* [更新文档](https://github.com/Hi-Windom/Sillot/issues/664) + +### VSCode 扩展相关 | VSCE + +* [汐洛VSCode插件 sofill `formatDate` 代码片段](https://github.com/Hi-Windom/Sillot/issues/666) + +## [@SiYuan](https://github.com/siyuan-note/siyuan) + +### 改进功能 | Enhancement + +* [Supports rendering the row number column when exporting database](https://github.com/siyuan-note/siyuan/issues/11192) +* [When multiple files are selected in the file tree, "Open" is added to the right-click menu](https://github.com/siyuan-note/siyuan/issues/11150) + +### 修复错误 | Bugfix + +* [PDF cannot be jumped after annotation](https://github.com/siyuan-note/siyuan/issues/11197) +* [Notebook settings doc save path does not override global settings in some cases](https://github.com/siyuan-note/siyuan/issues/11196) +* [`matchKeymap` should not use ipcRenderer in browser](https://github.com/siyuan-note/siyuan/pull/11195) +* [Shift+↓ cannot expand the selection of the folded list](https://github.com/siyuan-note/siyuan/issues/11194) + diff --git a/app/electron-builder-darwin-arm64.yml b/app/electron-builder-darwin-arm64.yml index 7474d0ccb7..a45e04afbc 100644 --- a/app/electron-builder-darwin-arm64.yml +++ b/app/electron-builder-darwin-arm64.yml @@ -45,7 +45,7 @@ extraResources: filter: "!**/{.DS_Store}" - from: "appearance/langs" to: "appearance/langs" - filter: "!**/{.DS_Store}" + filter: "!**/{.DS_Store,zh_CHT.json,fr_FR.json,es_ES.json}" - from: "appearance/emojis" to: "appearance/emojis" filter: "!**/{.DS_Store}" diff --git a/app/electron-builder-darwin.yml b/app/electron-builder-darwin.yml index e7c5003f26..908c304f21 100644 --- a/app/electron-builder-darwin.yml +++ b/app/electron-builder-darwin.yml @@ -45,7 +45,7 @@ extraResources: filter: "!**/{.DS_Store}" - from: "appearance/langs" to: "appearance/langs" - filter: "!**/{.DS_Store}" + filter: "!**/{.DS_Store,zh_CHT.json,fr_FR.json,es_ES.json}" - from: "appearance/emojis" to: "appearance/emojis" filter: "!**/{.DS_Store}" diff --git a/app/electron-builder-linux.yml b/app/electron-builder-linux.yml index 5f89e5eb13..69e52b8cf9 100644 --- a/app/electron-builder-linux.yml +++ b/app/electron-builder-linux.yml @@ -40,7 +40,7 @@ extraResources: filter: "!**/{.DS_Store}" - from: "appearance/langs" to: "appearance/langs" - filter: "!**/{.DS_Store}" + filter: "!**/{.DS_Store,zh_CHT.json,fr_FR.json,es_ES.json}" - from: "appearance/emojis" to: "appearance/emojis" filter: "!**/{.DS_Store}" diff --git a/app/electron-builder.yml b/app/electron-builder.yml index 0b516c6cae..d6f897b487 100644 --- a/app/electron-builder.yml +++ b/app/electron-builder.yml @@ -57,7 +57,7 @@ extraResources: filter: "!**/{.DS_Store}" - from: "appearance/langs" to: "appearance/langs" - filter: "!**/{.DS_Store}" + filter: "!**/{.DS_Store,zh_CHT.json,fr_FR.json,es_ES.json}" - from: "appearance/emojis" to: "appearance/emojis" filter: "!**/{.DS_Store}" diff --git a/app/electron/init.html b/app/electron/init.html index eeaabf476d..1f82247e2f 100644 --- a/app/electron/init.html +++ b/app/electron/init.html @@ -217,6 +217,7 @@

Sillot - 汐洛