From 33a648036f04a65f157f6fe0f1c16b86c767fe71 Mon Sep 17 00:00:00 2001 From: purocean Date: Tue, 6 Aug 2024 22:40:45 +0800 Subject: [PATCH 01/24] feat: add guide to status bar help menu --- src/renderer/plugins/status-bar-help.tsx | 21 ++++++++++++++------- src/share/i18n/languages/en.ts | 1 + src/share/i18n/languages/zh-CN.ts | 1 + src/share/i18n/languages/zh-TW.ts | 1 + src/share/misc.ts | 1 + 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/renderer/plugins/status-bar-help.tsx b/src/renderer/plugins/status-bar-help.tsx index 152d0f21..ee130889 100644 --- a/src/renderer/plugins/status-bar-help.tsx +++ b/src/renderer/plugins/status-bar-help.tsx @@ -1,5 +1,5 @@ import type { Plugin } from '@fe/context' -import { HOMEPAGE_URL } from '@share/misc' +import { GUIDE_URL, HOMEPAGE_URL } from '@share/misc' import logoImg from '@fe/assets/icon.png' export default { @@ -41,6 +41,19 @@ export default { onClick: () => ctx.showPremium() }, { type: 'separator' }, + { + id: 'show-shortcuts', + type: 'normal', + title: ctx.i18n.t('status-bar.help.shortcuts'), + onClick: () => ctx.action.getActionHandler('keyboard-shortcuts.show-manager')() + }, + { type: 'separator' }, + { + id: 'visit-guide', + type: 'normal', + title: ctx.i18n.t('status-bar.help.guide'), + onClick: () => window.open(GUIDE_URL, '_blank') + }, { id: 'show-readme', type: 'normal', @@ -53,12 +66,6 @@ export default { title: ctx.i18n.t('status-bar.help.plugin'), onClick: () => ctx.action.getActionHandler(showPluginAction.name)() }, - { - id: 'show-shortcuts', - type: 'normal', - title: ctx.i18n.t('status-bar.help.shortcuts'), - onClick: () => ctx.action.getActionHandler('keyboard-shortcuts.show-manager')() - }, { id: 'show-features', type: 'normal', diff --git a/src/share/i18n/languages/en.ts b/src/share/i18n/languages/en.ts index d029729e..7c4d5fb1 100644 --- a/src/share/i18n/languages/en.ts +++ b/src/share/i18n/languages/en.ts @@ -271,6 +271,7 @@ const data = { 'readme': 'Introduction', 'features': 'Features', 'shortcuts': 'Shortcuts', + 'guide': 'Guide', 'plugin': 'Create Plugin' }, 'terminal': 'Terminal', diff --git a/src/share/i18n/languages/zh-CN.ts b/src/share/i18n/languages/zh-CN.ts index aa69e887..1984c6a3 100644 --- a/src/share/i18n/languages/zh-CN.ts +++ b/src/share/i18n/languages/zh-CN.ts @@ -272,6 +272,7 @@ const data: BaseLanguage = { 'readme': '应用介绍', 'features': '特色功能说明', 'shortcuts': '快捷键', + 'guide': '使用指引', 'plugin': '插件开发' }, 'terminal': '终端', diff --git a/src/share/i18n/languages/zh-TW.ts b/src/share/i18n/languages/zh-TW.ts index 5418b7b0..04829d30 100644 --- a/src/share/i18n/languages/zh-TW.ts +++ b/src/share/i18n/languages/zh-TW.ts @@ -272,6 +272,7 @@ const data: BaseLanguage = { 'readme': '應用介紹', 'features': '特色功能說明', 'shortcuts': '快捷鍵', + 'guide': '使用指引', 'plugin': '插件開發' }, 'terminal': '終端', diff --git a/src/share/misc.ts b/src/share/misc.ts index d51024d7..e9014345 100644 --- a/src/share/misc.ts +++ b/src/share/misc.ts @@ -21,6 +21,7 @@ DQIDAQAB export const API_BASE_URL = 'https://yank-note.com' export const HOMEPAGE_URL = 'https://yank-note.com' +export const GUIDE_URL = 'https://help.yank-note.com' export function isMarkdownFile (path: string) { return path.endsWith(MARKDOWN_FILE_EXT) From 246dd2418f4caba829cd458b4100ebba9faa1841 Mon Sep 17 00:00:00 2001 From: purocean Date: Tue, 6 Aug 2024 22:49:21 +0800 Subject: [PATCH 02/24] feat: update GetStarted.vue to use GUIDE_URL constant for guide link --- src/renderer/components/GetStarted.vue | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/renderer/components/GetStarted.vue b/src/renderer/components/GetStarted.vue index 6f157215..bb979c0d 100644 --- a/src/renderer/components/GetStarted.vue +++ b/src/renderer/components/GetStarted.vue @@ -31,15 +31,15 @@

{{$t('get-started.help')}}

+ - @@ -78,6 +78,7 @@ import { showPremium, getPurchased } from '@fe/others/premium' import { showSettingPanel } from '@fe/services/setting' import { createDoc, supported, switchDoc } from '@fe/services/document' import { getActionHandler } from '@fe/core/action' +import { GUIDE_URL } from '@share/misc' useI18n() From 18c844325fd18f34bc0c268700048e16acc091de Mon Sep 17 00:00:00 2001 From: purocean Date: Wed, 7 Aug 2024 16:11:31 +0800 Subject: [PATCH 03/24] refactor: use 'visibility: hidden' to hide preview, resolving mermaid rendering issue --- src/renderer/components/Layout.vue | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/renderer/components/Layout.vue b/src/renderer/components/Layout.vue index 333f2608..2c463783 100644 --- a/src/renderer/components/Layout.vue +++ b/src/renderer/components/Layout.vue @@ -16,7 +16,7 @@
-
+
@@ -391,6 +391,12 @@ export default defineComponent({ min-width: 0; box-sizing: border-box; position: relative; + + &.preview-hidden { + visibility: hidden; + width: 0; + flex: none; + } } .footer { From 0820f74fd1a61e1b224a0f78a129b5e0e4103a09 Mon Sep 17 00:00:00 2001 From: purocean Date: Wed, 7 Aug 2024 19:06:53 +0800 Subject: [PATCH 04/24] refactor: update processCursorChange function to handle 'editor.action.insertLineAfter' event --- src/renderer/plugins/editor-md-list.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/plugins/editor-md-list.ts b/src/renderer/plugins/editor-md-list.ts index 619c9439..63311842 100644 --- a/src/renderer/plugins/editor-md-list.ts +++ b/src/renderer/plugins/editor-md-list.ts @@ -17,7 +17,7 @@ function processCursorChange (editor: Monaco.editor.IStandaloneCodeEditor, monac const isTab = e.source === 'tab' const isOutdent = e.source === 'outdent' const isDeleteLeft = e.source === 'deleteLeft' - const isEnter = e.source === 'keyboard' && isKeydown('ENTER') + const isEnter = (e.source === 'keyboard' || e.source === 'editor.action.insertLineAfter') && isKeydown('ENTER') const isSpace = e.source === 'keyboard' && isKeydown(' ') if (!isTab && !isDeleteLeft && !isEnter && !isSpace && !isOutdent) { From 013c47610551bc8c50c0c5a87a86754ba41e9ed1 Mon Sep 17 00:00:00 2001 From: purocean Date: Wed, 7 Aug 2024 19:07:11 +0800 Subject: [PATCH 05/24] chore: bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fd9f30b4..ac4de872 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "yank.note", - "version": "3.75.4", + "version": "3.76.0", "description": "Yank Note: A highly extensible Markdown editor, designed for productivity.", "main": "dist/main/app.js", "license": "AGPL-3.0", From 1fab265ad2084cb60109899d9845058bbeb2076b Mon Sep 17 00:00:00 2001 From: purocean Date: Wed, 7 Aug 2024 19:59:11 +0800 Subject: [PATCH 06/24] refactor: update status bar premium styles for better visual consistency --- src/renderer/plugins/status-bar-premium.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/renderer/plugins/status-bar-premium.ts b/src/renderer/plugins/status-bar-premium.ts index 959532b7..80a629b8 100644 --- a/src/renderer/plugins/status-bar-premium.ts +++ b/src/renderer/plugins/status-bar-premium.ts @@ -57,7 +57,8 @@ export default { ctx.theme.addStyles(` html[premium="false"] .status-bar-menu-wrapper > .status-bar-menu[data-id="${id}"] { - background: rgb(0 122 204 / 47%); + background-color: rgb(0 122 204 / 47%); + background-image: linear-gradient(90deg, rgba(218, 119, 242, 0.4), rgba(218, 119, 242, 0)); animation: blink-${id} 1s 7; } @@ -67,13 +68,13 @@ export default { @keyframes blink-${id} { 0% { - background: rgb(0 122 204 / 47%); + background-color: rgb(0 122 204 / 47%); } 50% { - background: rgb(0 122 204 / 100%); + background-color: rgb(0 122 204 / 100%); } 100% { - background: rgb(0 122 204 / 47%); + background-color: rgb(0 122 204 / 47%); } } `) From eef9787dae2f881cb8ee38da95ba5bc208a737ad Mon Sep 17 00:00:00 2001 From: purocean Date: Mon, 12 Aug 2024 12:51:35 +0800 Subject: [PATCH 07/24] fix: fix focus issue after dialog show on Windows --- src/main/app.ts | 31 +++++++++++++++++++++++++++ src/renderer/plugins/code-runners.tsx | 3 ++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/main/app.ts b/src/main/app.ts index 1b4616c3..2a5e0b7f 100644 --- a/src/main/app.ts +++ b/src/main/app.ts @@ -603,6 +603,37 @@ if (!gotTheLock) { app.on('web-contents-created', (_, webContents) => { electronRemote.enable(webContents) + // fix focus issue after dialog show on Windows. + webContents.on('frame-created', (_, { frame }) => { + frame.on('dom-ready', () => { + frame.executeJavaScript(`if ('ctx' in window && ctx?.env?.isWindows) { + window._FIX_ELECTRON_DIALOG_FOCUS ??= function () { + setTimeout(() => { + ctx.env.getElectronRemote().getCurrentWindow().blur(); + ctx.env.getElectronRemote().getCurrentWindow().focus(); + }, 0); + }; + + if (!window._ORIGIN_ALERT) { + window._ORIGIN_ALERT = window.alert; + window.alert = function (...args) { + window._ORIGIN_ALERT(...args); + window._FIX_ELECTRON_DIALOG_FOCUS(); + }; + } + + if (!window._ORIGIN_CONFIRM) { + window._ORIGIN_CONFIRM = window.confirm; + window.confirm = function (...args) { + const res = window._ORIGIN_CONFIRM(...args); + window._FIX_ELECTRON_DIALOG_FOCUS(); + return res; + }; + } + }`) + }) + }) + webContents.setWindowOpenHandler(({ url }) => { if (url.includes('__allow-open-window__')) { return { action: 'allow' } diff --git a/src/renderer/plugins/code-runners.tsx b/src/renderer/plugins/code-runners.tsx index 0f6453df..dde8679a 100644 --- a/src/renderer/plugins/code-runners.tsx +++ b/src/renderer/plugins/code-runners.tsx @@ -85,8 +85,9 @@ class JavascriptIframeExecutor implements ReadableStreamDefaultReader { const AsyncFunction = iframeWindow.eval('(async function(){}).constructor') const fn = new AsyncFunction('console', 'ctx', this.code) - await fn.call(iframeWindow, xConsole, window.ctx) + await sleep(0) + await fn.call(iframeWindow, xConsole, window.ctx) await sleep(0) this._readResolve('') From 5c7945f997895984194db41decd3035a13fb561a Mon Sep 17 00:00:00 2001 From: purocean Date: Tue, 13 Aug 2024 16:03:21 +0800 Subject: [PATCH 08/24] refactor: improve handling of relative URLs in markdown links --- src/renderer/plugins/markdown-link.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/renderer/plugins/markdown-link.ts b/src/renderer/plugins/markdown-link.ts index 0f303cd5..405842cb 100644 --- a/src/renderer/plugins/markdown-link.ts +++ b/src/renderer/plugins/markdown-link.ts @@ -199,7 +199,12 @@ function convertLink (state: StateCore) { return } - if (/^[^:]*:/.test(attrVal) || attrVal.startsWith('//')) { // xxx: + if (/^[a-z+]+:/.test(attrVal)) { // xxx: + return + } + + if (attrVal.startsWith('//')) { + token.attrSet(attrName, `https:${attrVal}`) return } From e0003ca65a158907f6bb16df2e43512b3a77df44 Mon Sep 17 00:00:00 2001 From: purocean Date: Wed, 14 Aug 2024 19:17:23 +0800 Subject: [PATCH 09/24] fix: fix plain file checking --- src/renderer/services/document.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/services/document.ts b/src/renderer/services/document.ts index d52d39a0..d7038c18 100644 --- a/src/renderer/services/document.ts +++ b/src/renderer/services/document.ts @@ -590,7 +590,7 @@ export async function ensureCurrentFileSaved () { const { currentFile, currentContent } = store.state // do not check if current file is not plain file. - if (currentFile && !extensions.supported(currentFile.name)) { + if (!currentFile || !currentFile.plain) { return } From 7ecbe085bafdad4c3a8d0f359389bb8765fc5fff Mon Sep 17 00:00:00 2001 From: purocean Date: Wed, 14 Aug 2024 21:12:20 +0800 Subject: [PATCH 10/24] refactor: optimize caching of supported extensions and refresh current file if necessary --- src/renderer/components/DefaultEditor.vue | 8 +++++--- src/renderer/services/document.ts | 10 ++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/renderer/components/DefaultEditor.vue b/src/renderer/components/DefaultEditor.vue index 6432cf21..6cfb2de0 100644 --- a/src/renderer/components/DefaultEditor.vue +++ b/src/renderer/components/DefaultEditor.vue @@ -101,17 +101,19 @@ export default defineComponent({ return } + const readOnly = FLAG_READONLY || !current || !current.plain || current.writeable === false + const editor = getEditor() + // change content only if (current && previous && isSameFile(current, previous)) { + editor.updateOptions({ readOnly }) setValue(current.content ?? '\n') } else { getMonacoEditor().createModel(toUri(current), current?.content ?? '\n') } await nextTick() - getEditor().updateOptions({ - readOnly: FLAG_READONLY || !current || !current.plain || current.writeable === false - }) + editor.updateOptions({ readOnly }) if (isDefault()) { await nextTick() diff --git a/src/renderer/services/document.ts b/src/renderer/services/document.ts index d7038c18..dbbe4a1d 100644 --- a/src/renderer/services/document.ts +++ b/src/renderer/services/document.ts @@ -909,6 +909,8 @@ export function hideHistory () { } function cacheSupportedExtension () { + const currentFileSupported = !!(store.state.currentFile && supported(store.state.currentFile)) + supportedExtensionCache.types.clear() supportedExtensionCache.sortedExtensions = [] @@ -922,6 +924,14 @@ function cacheSupportedExtension () { } supportedExtensionCache.sortedExtensions.sort((a, b) => b.length - a.length) + + // refresh current file if change supported status + if (store.state.currentFile) { + const currentFileSupportedNow = supported(store.state.currentFile) + if (currentFileSupported !== currentFileSupportedNow) { + switchDoc(store.state.currentFile || null, { force: true }) + } + } } /** From 7e6e4d6da1e9e5ef4fc3fe4b6bac622756961182 Mon Sep 17 00:00:00 2001 From: purocean Date: Wed, 28 Aug 2024 18:45:58 +0800 Subject: [PATCH 11/24] refactor: update server host to use '127.0.0.1' instead of 'localhost' --- src/main/server/index.ts | 2 +- src/renderer/others/setting-schema.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/server/index.ts b/src/main/server/index.ts index dda4fa38..0825e7cd 100644 --- a/src/main/server/index.ts +++ b/src/main/server/index.ts @@ -759,7 +759,7 @@ const server = (port = 3000) => { } }) - const host = config.get('server.host', 'localhost') + const host = config.get('server.host', '127.0.0.1') server.listen(port, host) console.log(`Address: http://${host}:${port}`) diff --git a/src/renderer/others/setting-schema.ts b/src/renderer/others/setting-schema.ts index 09bdea32..d107ffda 100644 --- a/src/renderer/others/setting-schema.ts +++ b/src/renderer/others/setting-schema.ts @@ -377,7 +377,7 @@ const schema: SettingSchema = ({ defaultValue: 'localhost', title: 'T_setting-panel.schema.server.host', type: 'string', - enum: ['localhost', '0.0.0.0'], + enum: ['127.0.0.1', '0.0.0.0'], group: 'other', required: true, }, From 7d575a84c7467e1a50fb09877f6281403ab8438c Mon Sep 17 00:00:00 2001 From: purocean Date: Thu, 29 Aug 2024 17:41:32 +0800 Subject: [PATCH 12/24] refactor: add docHash variable to assets description in language files --- src/renderer/services/base.ts | 1 + src/share/i18n/languages/en.ts | 2 +- src/share/i18n/languages/zh-CN.ts | 2 +- src/share/i18n/languages/zh-TW.ts | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/renderer/services/base.ts b/src/renderer/services/base.ts index cfbf42d1..a0ddcc56 100644 --- a/src/renderer/services/base.ts +++ b/src/renderer/services/base.ts @@ -65,6 +65,7 @@ export async function upload (file: File, belongDoc: Pick, .replaceAll('{docName}', parentName.startsWith('.') ? 'upload' : filenamify(parentName)) .replaceAll('{docBasename}', parentName.startsWith('.') ? 'upload' : filenamify(parentNameWithoutMdExt)) .replaceAll('{date}', dayjs().format('YYYY-MM-DD')) + .replaceAll('{docHash}', binMd5(parentNameWithoutMdExt).slice(0, 8)) const path: string = resolve(parentPath, assetsDir, filename) diff --git a/src/share/i18n/languages/en.ts b/src/share/i18n/languages/en.ts index 7c4d5fb1..289bfbaf 100644 --- a/src/share/i18n/languages/en.ts +++ b/src/share/i18n/languages/en.ts @@ -426,7 +426,7 @@ const data = { 'language': 'Language', 'custom-css': 'Custom CSS', 'assets-dir': 'Image Dir', - 'assets-desc': 'Relative or absolute path (in document repository). Variables: docName, docBasename, docSlug, date.', + 'assets-desc': 'Relative or absolute path (in document repository). Variables: docName, docBasename, docSlug, docHash, date.', 'assets': { 'path-type': 'Path Type', }, diff --git a/src/share/i18n/languages/zh-CN.ts b/src/share/i18n/languages/zh-CN.ts index 1984c6a3..39210ac3 100644 --- a/src/share/i18n/languages/zh-CN.ts +++ b/src/share/i18n/languages/zh-CN.ts @@ -417,7 +417,7 @@ const data: BaseLanguage = { 'language': '语言', 'custom-css': '自定义 CSS', 'assets-dir': '图片存放目录', - 'assets-desc': '支持相对路径和绝对路径(限于仓库内部),可用变量:docName, docBasename, docSlug, date', + 'assets-desc': '支持相对路径和绝对路径(限于仓库内部),可用变量:docName, docBasename, docSlug, docHash, date', 'assets': { 'path-type': '路径类型', }, diff --git a/src/share/i18n/languages/zh-TW.ts b/src/share/i18n/languages/zh-TW.ts index 04829d30..bdf920cd 100644 --- a/src/share/i18n/languages/zh-TW.ts +++ b/src/share/i18n/languages/zh-TW.ts @@ -417,7 +417,7 @@ const data: BaseLanguage = { 'language': '語言', 'custom-css': '自訂 CSS', 'assets-dir': '圖片存放目錄', - 'assets-desc': '支援相對路徑和絕對路徑(限於倉庫內部),可用變數:docName, docBasename, docSlug, date', + 'assets-desc': '支援相對路徑和絕對路徑(限於倉庫內部),可用變數:docName, docBasename, docSlug, docHash, date', 'assets': { 'path-type': '路徑類型', }, From 0fcadfa370e1936a27bb5151c8cd8ffc2921760d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Aug 2024 13:54:27 +0000 Subject: [PATCH 13/24] chore(deps): bump micromatch from 4.0.4 to 4.0.8 Bumps [micromatch](https://github.com/micromatch/micromatch) from 4.0.4 to 4.0.8. - [Release notes](https://github.com/micromatch/micromatch/releases) - [Changelog](https://github.com/micromatch/micromatch/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/micromatch/compare/4.0.4...4.0.8) --- updated-dependencies: - dependency-name: micromatch dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 48 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index 23e4b03e..e1553a46 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3105,7 +3105,7 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== @@ -7127,12 +7127,12 @@ merge2@^1.3.0, merge2@^1.4.1: integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: - braces "^3.0.1" - picomatch "^2.2.3" + braces "^3.0.3" + picomatch "^2.3.1" mime-db@1.48.0: version "1.48.0" @@ -7809,6 +7809,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + pirates@^4.0.4: version "4.0.6" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" @@ -8763,7 +8768,16 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -8831,7 +8845,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -8845,6 +8859,13 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -9593,7 +9614,7 @@ wide-align@^1.1.5: dependencies: string-width "^1.0.2 || 2 || 3 || 4" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -9611,6 +9632,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" From 05c918826f2ac9cc968cbe6c3186d9ecb10210ac Mon Sep 17 00:00:00 2001 From: mopsicus Date: Mon, 2 Sep 2024 14:20:46 +0300 Subject: [PATCH 14/24] feat: russian locale added --- src/share/i18n/languages/ru.ts | 775 +++++++++++++++++++++++++++++++++ 1 file changed, 775 insertions(+) create mode 100644 src/share/i18n/languages/ru.ts diff --git a/src/share/i18n/languages/ru.ts b/src/share/i18n/languages/ru.ts new file mode 100644 index 00000000..adfeee26 --- /dev/null +++ b/src/share/i18n/languages/ru.ts @@ -0,0 +1,775 @@ +/* eslint-disable quote-props */ + +const data = { + 'app-name': 'Yank Note', + 'about': 'О проекте', + 'feedback': 'Поддержка', + 'slogan': 'Гибкий, расширяемый редактор Markdown, создан для повышения производительности.', + 'cancel': 'Отмена', + 'undo': 'Отменить', + 'ok': 'OK', + 'demo-tips': 'Некоторые функции недоступны в ДЕМО режиме.', + 'more': 'Ещё', + 'copied': 'Скопировано', + 'others': 'Другие', + 'insert-different-repo-doc': 'Документы не могут быть вставлены из другого репозитория', + 'need-clipboard-permission': 'Пожалуйста, предоставьте разрешения на использование буфера обмена', + 'click-to-copy': 'Нажмите, чтобы скопировать', + 'click-to-copy-link': 'Нажмите, чтобы скопировать ссылку', + 'copy-code': 'Скопировать код', + 'loading': 'Загрузка', + 'add-image': 'Добавить изображение', + 'upload-image': 'Загрузить изображение', + 'exit-presentation-msg': 'Нажмите клавишу Esc, чтобы выйти', + 'reload': 'Перезагрузить', + 'open-in-new-window': 'Новое окно', + 'view-figure': 'Посмотреть рисунок', + 'export': 'Экспорт', + 'no-password': 'Пароль не введён', + 'save': 'Сохранить', + 'close': 'Закрыть', + 'discard': 'Отказаться', + 'edit': 'Изменить', + 'outline': 'Конспект', + 'files': 'Файлы', + 'install-extension-tips': 'Пожалуйста, сначала установите и включите расширение "%s"', + 'not-support-mas': 'Yank Note загруженный из Mac Apple Store, не поддерживает это расширение.', + 'learn-more': 'Узнать больше', + 'default': 'По умолчанию', + 'print': 'Печать', + 'markdown-file': 'Markdown файл', + 'encrypted-markdown-file': 'Защищенный Markdown файл', + 'switch-repo-n': 'Переключиться на репозиторий [%s]', + 'switch-the-last-repo': 'Переключиться на последний репозиторий', + 'edit-or-generate-text-using-ai': 'Изменить или создать текс с помощью ИИ', + 'file-readonly-desc': 'Файл доступен только для чтения. Вы можете [переключиться в режим записи](%s) в системе, а затем [обновить](%s) документ для редактирования.', + 'can-not-edit-this-file-type': 'Невозможно редактировать данный тип файла', + 'read-only-mode-desc': 'В настоящее время приложение находится в режиме "только для чтения".', + 'premium': { + 'confetti': 'Конфетти', + 'need-purchase': 'Для [%s] требуется премиум', + 'buy-license': 'Купить лицензию', + 'free': 'Бесплатно', + 'premium': 'Премиум', + 'upgrade': 'Перейти на премиум', + 'intro': { + 'intro': 'Описание', + 'current-plan': 'Текущий план', + 'included': 'Включено', + 'desc': 'Yank Note это проект с открытым исходным кодом, я постоянно развиваю его с 2018 года. На это уходят мои силы и деньги. Теперь доступна премиум-версия. Если вы хотите поддержать мое развитие или вам нужны дополнительные функции, вы можете купить лицензию.', + 'free-desc': 'Для большинства пользователей', + 'premium-desc': 'Дополнительные возможности', + 'free-list': 'Basic Editing\nGraphic Embedding\nRun Code Snippet\nHTML Applets\nEncryption\nTerminal Integration\nDocument History\nExtension', + 'premium-list': 'Basic Editing\nGraphic Embedding\nRun Code Snippet\nHTML Applets\nEncryption\nTerminal Integration\nDocument History (Advanced)\nExtension (More)\nMacro Replacement\nDark Mode', + }, + 'buy': { + 'buy': 'Купить', + }, + 'activation': { + 'license': 'Лицензия', + 'activation': 'Введите лицензию', + 'placeholder': 'Введите лицензию', + 'get-license': 'Получить лицензию', + 'info': 'Информация', + 'expired': 'Истекший срок действия', + 'expiring': 'Истекает через %s дней', + 'need-refresh': 'Необходимо обновить информацию об активации', + 'refresh': 'Обновить', + 'renewal': 'Обновление', + 'devices': 'Устройства', + 'this-machine': 'Это устройство', + 'unbind': 'Отвязать', + 'unbind-confirm': 'Вы уверены, что хотите отвязать "%s"?', + 'name': 'Имя: %s', + 'email': 'Email: %s', + 'expires': 'Истекает: %s', + 'plan': 'План: %s', + 'success': 'Успешно', + 'activating': 'Активация', + 'tips': 'Если у вас возникнут проблемы, пожалуйста, свяжитесь со мной', + 'tips-wechat': 'Wechat', + 'activation-tips': 'Перед активацией убедитесь, что у вас есть доступ к https://yank-note.com', + 'offline-activation': 'Оффлайн активация', + 'online-activation': 'Онлайн активация', + 'get-activation-token': 'Получить токен активации', + }, + }, + 'app': { + 'quit': 'Выход', + 'preferences': 'Настройки', + 'close-window': 'Закрыть окно', + 'toggle-fullscreen': 'Включить полноэкранный режим', + 'hide-main-window': 'Скрыть главное окно', + 'tray': { + 'open-main-window': 'Открыть главное окно', + 'open-in-browser': 'Открыть в браузере', + 'open-main-dir': 'Открыть папку', + 'preferences': 'Настройки', + 'start-at-login': 'Запускать при входе', + 'version': 'Версия %s', + 'quit': 'Выход', + 'dev': { + 'dev': 'Разработка', + 'port-prod': 'Prod порт (%s)', + 'port-dev': 'Dev порт (%s)', + 'reload': 'Перезагрузить', + 'dev-tool': 'Инструменты разработчика', + 'restart': 'Перезапустить', + 'force-quit': 'Принудительный выход', + } + }, + 'updater': { + 'found-dialog': { + 'title': 'Yank Note - доступна новая версия', + 'desc': 'Текущая версия: %s\nНовая версия: %s', + 'buttons': { + 'download': 'Скачать', + 'view-changes': 'Посмотреть изменения', + 'download-and-view-changes': 'Скачать и посмотреть изменения', + 'cancel': 'Отмена', + 'ignore': 'Не спрашивать больше' + } + }, + 'progress-bar': { + 'title': 'Yank Note - обновление', + 'detail': 'Загрузка %s', + 'failed': 'Не удалось загрузить: %s' + }, + 'failed-dialog': { + 'title': 'Yank Note - что-то пошло не так', + }, + 'install-dialog': { + 'title': 'Yank Note - загрузка завершена', + 'desc': 'Установить прямо сейчас?', + 'buttons': { + 'install': 'Установить', + 'delay': 'Установить позже', + } + }, + 'no-newer-dialog': { + 'title': 'Yank Note - нет новых версий', + 'desc': 'У вас установлена самая последняя версия' + } + }, + 'error': { + 'EADDRINUSE': 'Порт (%s) используется или не имеет достаточных разрешений, пожалуйста, настройте другой порт в настройках', + }, + }, + 'quit-check-dialog': { + 'title': 'Внимание', + 'desc': 'В документе есть несохраненные изменения. Вы действительно хотите выйти из документа без сохранения?', + 'buttons': { + 'cancel': 'Отмена', + 'discard': 'Сбросить изменения и выйти', + }, + }, + 'save-check-dialog': { + 'title': 'Внимание', + 'desc': 'Документ не был сохранен, хотите его сохранить?', + }, + 'change-setting-reload-main-widow-dialog': { + 'title': 'Внимание', + 'desc': 'Необходимо перезагрузить главное окно, чтобы некоторые настройки вступили в силу. Перезагрузить сейчас?', + }, + 'file-status': { + 'unsaved': 'Не сохранено', + 'saving': 'Сохранение', + 'saved': 'Сохранено', + 'save-failed': 'Не удалось сохранить!', + 'loaded': 'Загружено', + 'loading': 'Загрузка', + 'no-file': 'Нет открытого файла' + }, + 'modal': { + 'info': 'Информация', + 'input-placeholder': 'Пожалуйста, введите...', + }, + 'document': { + 'current-path': 'Текущий путь: %s', + 'invalid-filename': 'Имя файла не может содержать следующие символы: %s', + 'password-create': '[Создание] Пожалуйста, введите пароль', + 'password-save': '[Сохранение] Пожалуйста, введите пароль к файлу', + 'password-open': '[Открытие] Пожалуйста, введите пароль к файлу', + 'wrong-password': 'Неверный пароль', + 'file-transform-error': 'Зашифрованные и незашифрованные файлы не могут быть преобразованы друг в друга', + 'custom-extension': 'Пользовательское расширение', + 'create-dialog': { + 'title': 'Создать файл', + 'hint': 'Имя файл', + }, + 'create-dir-dialog': { + 'title': 'Создать папку', + 'hint': 'Имя папки', + }, + 'duplicate-dialog': { + 'title': 'Дублировать файл', + 'hint': 'Путь назначения', + }, + 'delete-dialog': { + 'title': 'Удалить файл', + 'content': 'Вы уверены, что хотите удалить %s?' + }, + 'move-dialog': { + 'title': 'Переместить/переименовать файл', + 'content': 'Новый путь' + }, + 'save-encrypted-file-dialog': { + 'title': 'Внимание', + 'content': 'Пароль не совпадает со старым паролем, сохранить с новым паролем?', + }, + 'switch-noent-dialog': { + 'title': 'Файл не найден', + 'content': 'Файл [%s] не найден, хотите его создать?', + } + }, + 'status-bar': { + 'view': { + 'view': 'Вид', + 'xterm': 'Показать терминал', + 'preview': 'Предварительный просмотр', + 'editor': 'Показать редактор', + 'side-bar': 'Показать боковую панель', + 'word-wrap': 'Перенос снов', + 'typewriter-mode': 'Режим печатной машинки', + 'editor-preview-exclusive': 'Только режим редактора/просмотра', + }, + 'setting': 'Настройки', + 'repo': { + 'repo': 'Репозиторий: %s', + 'no-data': 'Нет репозитория', + }, + 'nav': { + 'nav': 'Навигация', + 'goto': 'Перейти', + 'reveal-current-file-in-sidebar': 'Показать текущий файл в боковой панели', + 'forward': 'Вперёд', + 'back': 'Назад', + }, + 'insert': { + 'insert': 'Вставка', + 'paste-rt': 'Вставить форматированный текст', + 'paste-img-base64': 'Вставить изображение', + }, + 'tool': { + 'tool': 'Утилиты', + 'convert-img-link': 'Скачать удалённое изображение', + 'macro-copy-markdown': 'Копировать Markdown после замены макроса', + 'copy-content': 'Копировать содержимое', + 'doc-history': 'История изменений', + 'share-preview': 'Поделиться', + 'print': 'Печать документа', + 'export': 'Экспорт документа', + }, + 'document-info': { + 'selected': 'Выделено', + 'lines': 'Строки', + 'chars': 'Знаки', + 'selections': 'Выделения', + }, + 'help': { + 'help': 'Помощь', + 'readme': 'Введение', + 'features': 'Функции', + 'shortcuts': 'Сочетания клавиш', + 'guide': 'Руководство', + 'plugin': 'Создать плагин' + }, + 'terminal': 'Терминал', + 'present': 'Презентация', + 'get': { + 'get-application': 'Скачать приложение', + }, + 'extension': { + 'extension-manager': 'Менеджер расширений', + }, + 'theme': { + 'tips': 'Тема: %s', + 'dark': 'Тёмная', + 'light': 'Светлая', + 'system': 'Системная', + }, + }, + 'view': { + 'outline': 'Конспект', + 'print': 'Печать', + }, + 'tree': { + 'db-click-refresh': 'Двойной клик, чтобы обновить', + 'add-repo': 'Добавить репозиторий', + 'add-repo-hint': 'Выберите место для хранения заметок', + 'created-at': 'Создан: %s', + 'updated-at': 'Обновлён: %s', + 'context-menu': { + 'mark': 'Отметить файл', + 'unmark': 'Снять отметку', + 'duplicate': 'Дублировать', + 'create-doc': 'Новый файл', + 'create-dir': 'Новая папка', + 'add-item': 'Добавить элемент', + 'rename': 'Переименовать/переместить', + 'delete': 'Удалить', + 'open-in-os': 'Открыть с помощью', + 'reveal-in-os': 'Показать в проводнике', + 'refresh': 'Обновить', + 'open-in-terminal': 'Открыть в терминале', + 'create-in-cd': 'Новый файл', + 'copy-name': 'Копировать имя', + 'copy-path': 'Копировать путь', + 'find-in-folder': 'Поиск в папке', + }, + 'toast': { + 'moved': '[%s] перемещён в [%s]', + 'copied': '[%s] скопирован в [%s]', + }, + 'sort': { + 'asc': 'по возрастанию', + 'desc': 'по убыванию', + 'by-name': 'Сортировать по имени (%s)', + 'by-mtime': 'Сортировать по изменённым (%s)', + 'by-birthtime': 'Сортировать по дате создания (%s)', + 'by-serial': 'Сортировать по серийному номеру (%s)', + }, + }, + 'tabs': { + 'close-others': 'Закрыть другие', + 'close-right': 'Закрыть справа', + 'close-left': 'Закрыть слева', + 'close-all': 'Закрыть все', + 'pin': 'Прикрепить', + 'unpin': 'Открепить', + 'search-tabs': 'Поиск вкладки', + 'new-tab': 'Новая вкладка', + }, + 'export-panel': { + 'export': 'Экспорт', + 'format': 'Формат', + 'pdf': { + 'orientation': 'Ориентация', + 'portrait': 'Портретная', + 'landscape': 'Ландшафтная', + 'size': 'Размер', + 'zoom': 'Увеличение', + 'use-browser': 'Будет использоваться функция печати через браузер.', + 'include-bg': 'Включить фон', + }, + 'use-html': 'Использовать отображаемый HTML', + 'use-markdown': 'Использовать исходный код разметки', + 'loading': 'Конвертация, пожалуйста, подождите...', + }, + 'title-bar': { + 'pin': 'Прикрепить', + 'minimize': 'Свернуть', + 'unmaximize': 'Вернуть', + 'maximize': 'Развернуть', + }, + 'setting-panel': { + 'setting': 'Настройка', + 'add': 'Добавить %s', + 'delete-warning': 'Вы уверены, что хотите удалить этот узел?', + 'error-choose-repo-path': 'Пожалуйста, выберите путь к репозиторию', + 'change-keyboard-shortcuts': 'Изменить сочетания клавиш', + 'tabs': { + 'repos': 'Репозитории', + 'appearance': 'Внешний вид', + 'editor': 'Редактор', + 'render': 'Отображение', + 'image': 'Изображения', + 'proxy': 'Прокси', + 'macros': 'Макросы', + 'other': 'Другое', + }, + 'schema': { + 'repos': { + 'repos': 'Репозитории', + 'repo': 'Репозиторий', + 'name': 'Имя', + 'name-placeholder': 'Имя', + 'path': 'Путь', + 'path-placeholder': 'Пожалуйста, выберите место хранения' + }, + 'editor': { + 'mouse-wheel-zoom': 'Масштабирование колёсиком мыши', + 'font-size': 'Размер шрифта', + 'tab-size': 'Размер табуляции', + 'ordered-list-completion': 'Упорядоченный список', + 'minimap': 'Мини-карта', + 'line-numbers': 'Номера строк', + 'enable-preview': 'Включить предпросмотр - открывать новые файлы с помощью временных вкладок, двойной клик по вкладке для изменения', + 'font-family': 'Семейство шрифтов', + 'font-ligatures': 'Шрифтовые лигатуры', + 'complete-emoji': 'Полный список эмодзи - введите : для отображения списка эмодзи', + 'todo-with-time': 'Добавлять время при проверке TODO', + 'suggest-on-trigger-characters': 'Подсказки при вводе - вы также можете использовать Ctrl+Space (в зависимости от сочетания клавиш) для запуска', + 'sticky-scroll-enabled': 'Включить липкую прокрутку - при прокрутке редактора заголовок документа фиксируется', + 'quick-suggestions': 'Быстрые предложения - предлагайте по мере ввода текста', + 'enable-ai-copilot-action': 'Включить AI Copilot - показать лампочку действия AI Copilot, если она доступна', + }, + 'render': { + 'md-html': 'Включить HTML', + 'md-breaks': 'Преобразовать \\n в <br>', + 'md-linkify': 'Автоматическое преобразование текста, похожего на URL, в ссылки', + 'md-wiki-links': 'Включить Wiki ссылки - [[ссылка]]', + 'md-typographer': 'Включите некоторые языковые замены + улучшение кавычек', + 'md-sup': 'Включить надстрочный синтаксис: 29^th^', + 'md-sub': 'Включить подстрочный синтаксис: H~2~O', + 'md-emoji': 'Включите синтаксис эмодзи: :smile:', + 'multimd-multiline': 'Включить многострочный синтаксис [multimd]:', + 'multimd-rowspan': 'Включить синтаксис объединением рядов [multimd]:', + 'multimd-headerless': 'Включить синтаксис без заголовков [multimd]:', + 'multimd-multibody': 'Включить многокомпонентный синтаксис [multimd]:', + }, + 'view': { + 'default-previewer-max-width': 'Максимальная ширина окна предпросмотра', + 'default-previewer-max-width-desc': '≤ 100 означает процент, > 100 - пиксели', + }, + 'theme': 'Тема', + 'language': 'Язык', + 'custom-css': 'Пользовательский CSS', + 'assets-dir': 'Папка для изображений', + 'assets-desc': 'Относительный или абсолютный путь (в хранилище документов). Переменные: docName, docBasename, docSlug, docHash, date.', + 'assets': { + 'path-type': 'Тип пути', + }, + 'shell': 'Оболочка', + 'envs': 'Окружение', + 'auto-save': 'Автосохранение', + 'plantuml-api': 'PlantUML точка', + 'updater': { + 'source': 'Обновить источник', + }, + 'doc-history': { + 'number-limit': 'Версии сохранены', + }, + 'search': { + 'number-limit': 'Результаты поиска', + }, + 'server': { + 'host': 'Хост', + 'port': 'Порт', + 'port-desc': 'Необходимо перезапустить приложение.' + }, + 'tree': { + 'exclude': 'Исключить файлы', + }, + 'proxy': { + 'enabled': 'Включено', + 'server': 'Прокси сервер', + 'server-hint': '127.0.0.1:8080', + 'bypass-list': 'Cписок обходных адресов', + 'pac-url': 'PAC URL', + }, + 'macros': { + 'macros': 'Макросы', + 'match': 'Соответствие', + 'replace': 'Замена', + 'match-placeholder': '%foo%', + 'replace-placeholder': '%foo% -> BAR', + }, + 'hide-main-window-on-startup': 'Скрыть главное окно при запуске', + 'keep-running-after-closing-window': 'Продолжать работу после закрытия окна', + } + }, + 'quick-open': { + 'input-placeholder': 'Введите...', + 'empty': 'Пусто', + 'files': 'Файлы', + 'marked': 'Отмеченные', + }, + 'editor': { + 'context-menu': { + 'paste-image': 'Вставить изображение', + 'paste-image-as-base64': 'Вставить изображение как Base64', + 'paste-rt-as-markdown': 'Вставить форматированный текст как Markdown', + 'add-attachment': 'Добавить вложение', + 'link-doc': 'Ссылка на документ', + 'link-file': 'Ссылка на файл', + 'insert-date': 'Вставить сегодняшнюю дату', + 'insert-time': 'Вставить текущее время', + 'reveal-line-in-preview': 'Показать строку в предпросмотре', + 'force-insert-new-line': 'Принудительная вставка новой строки', + 'force-insert-indent': 'Принудительная вставка отступа', + }, + 'switch-editor': 'Переключить редактор', + 'default-editor': 'Редактор по умолчанию', + 'action-label': { + 'reveal-current-file-in-os': 'Показать текущий файл', + 'refresh-current-document': 'Обновить текущий документ', + }, + }, + 'previewer': { + 'default-previewer': 'Предпросмотр по умолчанию', + 'switch-previewer': 'Переключить просмотрщик', + }, + 'picgo': { + 'setting': { + 'api-title': 'PicGo API', + 'api-desc': 'URL-адрес PicGo по умолчанию: http://127.0.0.1:36677/upload', + 'api-msg': 'Должен начинаться с http://', + 'paste-title': 'Вставить изображение с помощью PicGo' + }, + 'uploading': 'Загрузка', + 'upload-failed': 'Загрузка не удалась', + 'need-api': 'Сначала настройте PicGo API.', + 'upload-all-images': 'Загрузить все изображения', + }, + 'code-run': { + 'run': 'Запустить', + 'stop': 'Остановить', + 'run-in-xterm-tips': 'Запустить код в терминале, %s + клик не выходить', + 'run-in-xterm': 'Запустить в терминале', + 'running': 'Запуск...', + 'clear': 'Очистить', + }, + 'mind-map': { + 'zoom-in': 'Увеличить масштаб', + 'zoom-out': 'Уменьшить масштаб', + 'fit-height': 'Подходящая высота', + 'switch-layout': 'Компоновка', + 'switch-loose': 'Компактный/Свободный', + 'convert-error': 'Ошибка преобразования\n 1. Убедитесь, что в конспекте есть только один корневой элемент.\n 2. Убедитесь, что уровень конспекта правильный.', + }, + 'table-cell-edit': { + 'esc-to-cancel': 'Нажмите Esc для отмены', + 'db-click-edit': 'Двойной клик для редактирования', + 'canceled': 'Отменено', + 'edit-hint': 'Содержимое', + 'edit-title': 'Редактировать ячейку', + 'edit-error': 'Что-то не так', + 'limit-single-line': 'Редактирование только отдельных строк', + 'context-menu': { + 'edit': 'Изменить', + 'quick-edit': 'Выйти из режима редактирования', + 'sort-mode': 'Режим сортировки', + 'sort-asc': 'Сортировать по возрастанию', + 'sort-desc': 'Сортировка по убыванию', + 'align-left': 'Выравнивание по левому краю', + 'align-center': 'Выровнять по центру', + 'align-right': 'Выравнивание по правому краю', + 'align-normal': 'Выровнять нормаль', + 'add-row-above': 'Добавить строку выше', + 'add-row-below': 'Добавить строку ниже', + 'delete-row': 'Удалить строку', + 'add-col-left': 'Добавить столбец слева', + 'add-col-right': 'Добавить столбец справа', + 'delete-col': 'Удалить столбец', + }, + }, + 'markdown-link': { + 'convert-to-titled-link': 'Преобразование в ссылку с названием', + }, + 'custom-css': { + 'change-confirm': { + 'title': 'Внимание', + 'content': 'Изменение пользовательского CSS требует перезагрузки страницы. Вы хотите продолжить?', + } + }, + 'control-center': { + 'control-center': 'Центр управления %s', + 'switch': { + 'side-bar': 'Боковая панель %s', + 'editor': 'Редактор %s', + 'view': 'Редактор %s', + 'sync-scroll': 'Синхронная прокрутка', + 'sync-rendering': 'Синхронное отображение', + 'word-wrap': 'Перенос слов %s', + 'typewriter-mode': 'Режим печатной машинки', + 'find-in-preview': 'Найти в предпросмотре %s', + }, + 'navigation': { + 'goto': 'Перейти %s', + 'forward': 'Вперёд %s', + 'back': 'Назад %s', + 'refresh': 'Обновить %s', + } + }, + 'doc-history': { + 'clear': 'Очистить', + 'apply-version': 'Применить выбранную версию', + 'no-history': 'Нет истории', + 'content': 'Содержимое', + 'diff': 'Изменения', + 'history': 'История', + 'current': 'Текущий', + 'all': 'Все', + 'marked': 'Отмечено', + 'mark': 'Отметить', + 'unmark': 'Снять отметку', + 'delete': 'Удалить', + 'edit-message': 'Изменить сообщение', + 'delete-dialog': { + 'title': 'Удалить', + 'content': 'Вы уверены, что хотите удалить [%s]?', + }, + 'clear-dialog': { + 'title': 'Очистить', + 'content': 'Вы уверены, что хотите очистить неотмеченные версии?', + }, + 'mark-dialog': { + 'title': 'Отметить версию [%s]', + 'hint': 'Введите сообщение (необязательно)', + }, + 'content-too-long-alert': { + 'title': 'Предупреждение', + 'content': 'По соображениям производительности документы, содержащие более [%s] символов, не будут сохранять историю. Текущая длина документа [%s] символов.', + }, + }, + 'copy-content': { + 'options': 'Настройки: ', + 'type': 'Тип копии: ', + 'inline-style': 'Встроенный стиль', + 'include-style': 'Включить стиль', + 'inline-image': 'Встроенное локальное изображение', + 'upload-image': 'Загрузить локальное изображение', + 'highlight-code': 'Выделить код', + 'rt': 'Форматированный текст', + 'complete': 'Конвертация завершена, нажмите ОК, чтобы скопировать', + 'copy-tips': 'Если вам необходимо скопировать часть содержимого, сначала выделите его в области предпросмотра.', + 'copy-tips-selected': 'Копировать выбранное содержимое, %s символов.', + }, + 'share-preview': { + 'expire': 'Истекает', + 'tips': 'Сначала настройте хост "0.0.0.0" в настройках.', + }, + 'electron-zoom': { + 'zoom-in': 'Увеличить масштаб', + 'zoom-out': 'Уменьшить масштаб', + 'zoom-reset': 'Фактический размер', + }, + 'extension': { + 'extension-manager': 'Менеджер расширений', + 'all': 'Все', + 'installed': 'Установлено', + 'official': 'Официальный', + 'unofficial': 'Неофициальный', + 'unknown': 'Неизвестно', + 'author': 'Автор', + 'origin': 'Источник', + 'unpacked-size': 'Размер в распакованном виде', + 'latest-version': 'Последняя версия', + 'installed-version': 'Установленная версия', + 'homepage': 'Домашняя страница', + 'download': 'Скачать', + 'toast-loaded': 'Расширение загружено', + 'upgradable': 'Обновляемый', + 'incompatible': 'Несовместимо', + 'not-installed': 'Не установлено', + 'enabled': 'Включено', + 'disabled': 'Отключено', + 'reload-required': 'Требуется перезагрузка', + 'no-extension': 'Нет расширения', + 'reload': 'Перезагрузить', + 'install': 'Установить', + 'uninstall': 'Удалить', + 'installing': 'Установка', + 'uninstalling': 'Удаление', + 'upgrade': 'Обновить', + 'disable': 'Отключить', + 'enable': 'Включить', + 'uninstall-confirm': 'Вы уверены, что хотите удалить [%s]?', + 'registry': 'Реестр', + 'activation-time': 'Время активации', + 'requirement': 'Требование', + 'auto-upgrade': 'Автообновление', + 'unknown-origin-tips': 'Использование расширений из неизвестных источников может быть рискованным, вы все еще хотите включить их?', + 'extensions-auto-upgraded': 'Расширения были обновлены: %s шт.', + 'fetch-registry-failed': 'Не удалось загрузить реестр, пожалуйста, переключитесь на другой реестр или повторите попытку позже', + }, + 'get-started': { + 'get-started': 'Начать', + 'start': 'Начало', + 'help': 'Помощь', + 'recent': 'Последние', + }, + 'search-panel': { + 'search-files': 'Поиск файлов', + 'placeholder-search': 'Поиск', + 'for-history': '(⇅ для истории)', + 'files-to-include': 'Файлы для включения', + 'files-to-exclude': 'Файлы для исключения', + 'match-case': 'Регистр важен', + 'match-whole-word': 'Искать целое слово', + 'use-regex': 'Использовать регулярное выражение', + 'expand-all': 'Развернуть все', + 'collapse-all': 'Свернуть все', + }, + 'file-changed-alert': { + 'title': 'Файл изменен', + 'content': 'Файл был изменен на диске. Хотите перезагрузить его?', + 'reload': 'Перезагрузить', + }, + 'command-desc': { + 'base_find-in-repository': 'Найти содержимое в репозитории', + 'control-center_toggle': 'Показать/скрыть центр управления', + 'doc_show-history': 'Показать историю документа', + 'editor_toggle-wrap': 'Включить/выключить перенос слов', + 'file-tabs_close-current': 'Закрыть текущий файл', + 'file-tabs_search-tabs': 'Поиск вкладки', + 'file-tabs_show-welcome': 'Показать приветствие', + 'file-tabs_switch-left': 'Переключиться на левую вкладку', + 'file-tabs_switch-right': 'Переключиться на правую вкладку', + 'layout_toggle-editor': 'Показать/скрыть редактор', + 'layout_toggle-side': 'Показать/скрыть боковую панель', + 'layout_toggle-view': 'Показать/скрыть предпросмотр', + 'layout_toggle-xterm': 'Показать/скрыть терминал', + 'plugin_copy-content_copy-content': 'Показать панель копирования содержимого', + 'plugin_document-history-stack_back': 'Вернуться к предыдущему документу', + 'plugin_document-history-stack_forward': 'Перейти к следующему документу', + 'plugin_editor_focus-editor': 'Переключиться на редактор', + 'plugin_switch-todo_switch': 'Отметить/снять отметку с TODO (сначала необходимо выбрать содержимое в редакторе)', + 'view_enter-presentation': 'Войти в режим презентации', + 'workbench_show-quick-open': 'Показать быстрое открытие', + 'workbench_toggle-outline': 'Показать/скрыть конспект', + 'plugin_electron-zoom_zoom-in': 'Увеличить масштаб', + 'plugin_electron-zoom_zoom-out': 'Уменьшить масштаб', + 'plugin_electron-zoom_zoom-reset': 'Сбросить масштаб', + 'view_refresh': 'Обновить предпросмотр', + 'extension_show-manager': 'Показать менеджер расширений', + 'keyboard-shortcuts_show-manager': 'Показать сочетания клавиш', + 'plugin_image-localization_all': 'Скачать все удаленные изображения', + 'tree_refresh': 'Обновить дерево файлов', + 'plugin_status-bar-theme_switch': 'Переключить тему', + 'editor_rotate-custom-editors': 'Повернуть пользовательские редакторы', + 'view_show-find-in-preview-widget': 'Показать поиск в виджете предпросмотра', + 'tree_reveal-current-node': 'Показать текущий документ в дереве файлов', + }, + 'keyboard-shortcuts': { + 'workbench': 'Рабочее пространство', + 'editor': 'Редактор', + 'application': 'Приложение', + 'keyboard-shortcuts': 'Сочетания клавиш', + 'unavailable': 'Недоступно', + 'command': 'Команда', + 'keybinding': 'Привязка клавиш', + 'not-set': 'Не установлен', + 'clear': 'Очистить', + 'change': 'Сменить', + 'reset': 'Сбросить', + 'search': 'Поиск, "*" для отображения измененных', + 'empty': 'Нет результатов', + 'recorder': { + 'tip': 'Нажмите нужную комбинацию клавиш, а затем нажмите Enter, Esc для отмены.', + 'conflict-commands': 'Есть команды (%s шт.) с одинаковыми сочетаниями клавиш', + }, + 'conflict': 'Конфликт', + 'conflict-title': 'Конфликт привязки клавиш (%s)', + 'conflict-commands': 'Следующие команды имеют одинаковые сочетания клавиш:', + }, + 'find-in-preview': { + 'action-tips': { + 'prev': 'Предыдущее совпадение (Shift + Enter)', + 'next': 'Следующее совпадение (Enter)', + 'close': 'Закрыть (Esc)', + }, + 'results': '%s совпадений', + 'toast-no-more': 'Больше нет совпадений', + }, + 'view-context-menu': { + 'copy-image': 'Копировать изображение', + 'delete-image': 'Удалить изображение', + 'open-in-new-tab': 'Открыть в новой вкладке', + }, +} + +export type BaseLanguage = typeof data + +export default data From e4a44868d004d01ac00ed0569e199ee6adbb4b2a Mon Sep 17 00:00:00 2001 From: mopsicus Date: Mon, 2 Sep 2024 14:20:59 +0300 Subject: [PATCH 15/24] feat: russian readme file added --- README_RU.md | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 README_RU.md diff --git a/README_RU.md b/README_RU.md new file mode 100644 index 00000000..c4da2906 --- /dev/null +++ b/README_RU.md @@ -0,0 +1,93 @@ +# Yank Note + +**Гибкий, расширяемый** редактор Markdown, создан для повышения производительности. **[Скачать](https://github.com/purocean/yn/releases)** | **[Попробовать онлайн >>>](https://demo.yank-note.com/)** + + +[![Скачать](./help/mas_en.svg?.inline)](https://apps.apple.com/cn/app/yank-note/id1551528618) [Не рекомендуется](https://github.com/purocean/yn/issues/65#issuecomment-1065799677) + +[English](./README.md) | [中文说明](./README_ZH-CN.md) | Русский + +[toc]{level: [2]} + +![Screenshot](./help/1.png) + +## Особенности + +- **Простота использования:** Используется ядро *Monaco*, оптимизированное для редактирования в формате Markdown, и возможности редактирования такие же, как у VSCode. +- **Мощный:** Поддержка контроля версий; в документ можно встраивать апплеты, запускаемые блоки кода, таблицы, PlantUML, Drawio, макрозамены и т.д.; поддержка автодополнения [OpenAI](https://openai.com). +- **Высокая совместимость:** Данные сохраняются в виде локальных файлов Markdown, а функции расширения реализованы в оригинальном синтаксисе Markdown, насколько это возможно. +- **Расширение плагинов:** Поддержка пользователей в написании собственных плагинов для расширения функциональности редактора. +- **Поддержка шифрования:** Используйте шифрование для сохранения приватных файлов, таких как номер счета, а пароль может быть установлен отдельно для каждого файла. + +## Внимание + +- Ради большей расширяемости Yank Note жертвует защитой безопасности (выполнение команд, произвольное чтение и запись файлов). Если вы хотите использовать его для открытия постороннего файла Markdown, ⚠️**убедитесь, что содержимое файла заслуживает доверия**⚠️. +- Шифрование и дешифрование зашифрованных файлов выполняется на клиентской стороне. Пожалуйста, **убедитесь, что вы помните свой пароль**. Если пароль утерян, его можно только взломать. + +## Основнве функции + +Более подробную информацию об использовании следующих функций см. в разделе [описание основных функций](./help/FEATURES.md) + +- **Синхронная прокрутка:** область редактирования и область предварительного просмотра прокручиваются синхронно, а область предварительного просмотра можно прокручивать независимо +- **Конспект:** быстрый переход к соответствующему месту документа через конспект в области предварительного просмотра +- **Управление версиями:** поддержка истории документа +- **Шифрование:** файлы, заканчивающиеся на `.c.md`, обрабатываются как зашифрованные +- **Автосохранение:** автоматическое сохранение файлов после редактирования с напоминанием в строке заголовка для несохраненных файлов (зашифрованные документы не сохраняются автоматически) +- **Редактирование:** автоматическое заполнение списка +- **Вставка изображений:** вы можете быстро вставлять изображения из буфера обмена и вставлять их как файлы или Base64 +- **Вложения:** вы можете добавлять вложения в документ и открывать их в операционной системе щелчком мыши +- **Выполнение кода:** поддержка запуска JavaScript, PHP, nodejs, Python, кода bash +- **Список задач:** поддержка отображения хода выполнения задач в документе. Щелкните, чтобы быстро переключить статус задачи +- **Быстрое открытие:** вы можете использовать сочетание клавиш для открытия панели переключения файлов, чтобы быстро открывать файлы, помеченные файлы и выполнять полнотекстовый поиск по содержимому файлов +- **Интегрированный терминал:** поддержка открытия терминала в редакторе для быстрого переключения текущего рабочего каталога +- **Katex:** поддержка выражений katex +- **Стили:** Markdown использует стили и функции GitHub +- **Репозиторий:** можно определить несколько расположений данных для организации документов +- **Преобразование внешних ссылок:** преобразование внешних ссылок или изображений Base64 в локальные изображения +- **Разрешение HTML:** вы можете использовать HTML-код непосредственно в документе или использовать сочетания клавиш для копирования и вставки HTML в Markdown +- **Экспорт в несколько форматов:** backend использует pandoc в качестве конвертера +- **TOC:** напишите `[toc]{type:** "ol", level:** [1,2,3]}` для генерации TOC (Table Of Content, оглавление), где вам нужно сгенерировать его +- **Изменить ячейку таблицы:** дважды щелкните ячейку таблицы для быстрого редактирования +- **Копирование ссылки на заголовок:** копирование пути ссылки на заголовок в буфер обмена для легкой вставки в другие файлы +- **Встроенные апплеты:** документ поддерживает встроенные HTML-аплеты +- **Встроенная графика PlantUML:** документ поддерживает встроенную графику plantUML +- **Встроенная графика drawio:** документ поддерживает встроенную графику drawio +- **Встроенная графика ECharts:** документ поддерживает встроенную графику Echarts +- **Встроенная графика Mermaid:** документ поддерживает встроенную графику Mermaid +- **Встроенные таблицы Luckysheet:** документ поддерживает встроенные таблицы Luckysheet +- **Mind map:** вложенный список может быть отображен в виде интеллект-карты +- **Запись атрибутов элемента:** любой атрибут элемента может быть настроен +- **Улучшение таблиц:** поддержка заголовка таблицы с несколькими строками текста, списка и других функций +- **Ссылка на документ:** поддержка ссылок на другие документы в документе и перехода друг к другу +- **Сноска:** поддержка написания сносок в документе +- **Пользовательский контейнер:** поддержка пользовательских контейнеров, аналогичных VuePress по умолчанию темы +- **Макросы:** поддержка встроенных выражений JavaScript для динамической замены содержимого документа +- **Служба хостинга изображений:** поддержка службы хостинга изображений [PicGo](https://picgo.github.io/PicGo-Doc/) +- **OpenAI:** поддержка автодополнения [OpenAI](https://openai.com) +- **Пользовательские плагины:** поддержка написания плагинов JavaScript для расширения функциональности редактора. Плагин находится в `home directory/plugins`. См. [руководство по разработке плагинов](./help/PLUGIN.md) + +## Скриншоты + +![Screenshot](./help/6.png) +![Screenshot](./help/7.png) +![Screenshot](./help/2.png) +![Screenshot](./help/3.png) +![Screenshot](./help/4.png) +![Screenshot](./help/5.png) + +## Список изменений + +### [v3.75.4](https://github.com/purocean/yn/releases/tag/v3.75.4) 2024-08-06 + +[Windows](https://github.com/purocean/yn/releases/download/v3.75.4/Yank-Note-win-x64-3.75.4.exe) | [macOS arm64](https://github.com/purocean/yn/releases/download/v3.75.4/Yank-Note-mac-arm64-3.75.4.dmg) | [macOS x64](https://github.com/purocean/yn/releases/download/v3.75.4/Yank-Note-mac-x64-3.75.4.dmg) | [Linux AppImage](https://github.com/purocean/yn/releases/download/v3.75.4/Yank-Note-linux-x86_64-3.75.4.AppImage) | [Linux deb](https://github.com/purocean/yn/releases/download/v3.75.4/Yank-Note-linux-amd64-3.75.4.deb) + +1. fix: исправление ошибки в определении поддерживаемых типов файлов. +2. fix: устранение проблемы, при которой сочетание клавиш вызывает нажатие клавиши с ударением и вставляет дополнительные символы в редакторе на macOS. + +[Релизы](https://github.com/purocean/yn/releases) + +## Поддержка + +Wechat Group + + From c5f0ff8454cdcd709ec8ba67330d94c9121b83d4 Mon Sep 17 00:00:00 2001 From: mopsicus Date: Mon, 2 Sep 2024 14:21:13 +0300 Subject: [PATCH 16/24] fix: links to russian readme added --- README.md | 2 +- README_ZH-CN.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cd6b4a89..eb8b17f3 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ A **highly extensible** Markdown editor, designed for productivity. **[Download] [![Download](./help/mas_en.svg?.inline)](https://apps.apple.com/cn/app/yank-note/id1551528618) [Not recommended](https://github.com/purocean/yn/issues/65#issuecomment-1065799677) -English | [中文说明](./README_ZH-CN.md) +English | [中文说明](./README_ZH-CN.md) | [Русский](./README_RU.md) [toc]{level: [2]} diff --git a/README_ZH-CN.md b/README_ZH-CN.md index d63ea7dd..d66b7b4a 100644 --- a/README_ZH-CN.md +++ b/README_ZH-CN.md @@ -4,7 +4,7 @@ [![Download](./help/mas_en.svg?.inline)](https://apps.apple.com/cn/app/yank-note/id1551528618) [Mac App Store 版本说明](https://github.com/purocean/yn/issues/65#issuecomment-1065799677) -[English](./README.md) | 中文说明 +[English](./README.md) | 中文说明 | [Русский](./README_RU.md) [toc]{level: [2]} From 6564c78bd2c69f88538f1e27d4b8e13b9f61937d Mon Sep 17 00:00:00 2001 From: purocean Date: Wed, 4 Sep 2024 21:04:11 +0800 Subject: [PATCH 17/24] feat: add Russian language support --- scripts/copy-assets.js | 5 +++++ src/renderer/others/setting-schema.ts | 4 ++-- src/share/i18n/index.ts | 4 +++- src/share/i18n/languages/ru.ts | 4 ++-- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/scripts/copy-assets.js b/scripts/copy-assets.js index 43d894a8..0ce7015d 100644 --- a/scripts/copy-assets.js +++ b/scripts/copy-assets.js @@ -21,3 +21,8 @@ fs.writeFileSync(path.join(__dirname, '..', './help/README.md'), md) readme = path.join(__dirname, '..', 'README_ZH-CN.md') md = fs.readFileSync(readme).toString('UTF-8').replace(/\]\(\.\/help\//ig, '](./').replace(/src="\.\/help\//ig, 'src="./') fs.writeFileSync(path.join(__dirname, '..', './help/README_ZH-CN.md'), md) + +// copy README_RU.md +readme = path.join(__dirname, '..', 'README_RU.md') +md = fs.readFileSync(readme).toString('UTF-8').replace(/\]\(\.\/help\//ig, '](./').replace(/src="\.\/help\//ig, 'src="./') +fs.writeFileSync(path.join(__dirname, '..', './help/README_RU.md'), md) diff --git a/src/renderer/others/setting-schema.ts b/src/renderer/others/setting-schema.ts index d107ffda..c632c815 100644 --- a/src/renderer/others/setting-schema.ts +++ b/src/renderer/others/setting-schema.ts @@ -52,9 +52,9 @@ const schema: SettingSchema = ({ defaultValue: 'system', title: 'T_setting-panel.schema.language', type: 'string', - enum: ['system', 'en', 'zh-CN', 'zh-TW'], + enum: ['system', 'en', 'zh-CN', 'zh-TW', 'ru'], options: { - enum_titles: ['System', 'English', '简体中文', '繁體中文'], + enum_titles: ['System', 'English', '简体中文', '繁體中文', 'русский'], }, group: 'appearance', required: true, diff --git a/src/share/i18n/index.ts b/src/share/i18n/index.ts index 03bf9a92..940fb1a2 100644 --- a/src/share/i18n/index.ts +++ b/src/share/i18n/index.ts @@ -3,11 +3,13 @@ import merge from 'lodash/merge' import en, { BaseLanguage } from './languages/en' import zhCN from './languages/zh-CN' import zhTW from './languages/zh-TW' +import ru from './languages/ru' const languages = { en, 'zh-CN': zhCN, - 'zh-TW': zhTW + 'zh-TW': zhTW, + ru, } export type Flat, P extends string = ''> =( diff --git a/src/share/i18n/languages/ru.ts b/src/share/i18n/languages/ru.ts index adfeee26..b2c9e149 100644 --- a/src/share/i18n/languages/ru.ts +++ b/src/share/i18n/languages/ru.ts @@ -399,7 +399,7 @@ const data = { 'font-ligatures': 'Шрифтовые лигатуры', 'complete-emoji': 'Полный список эмодзи - введите : для отображения списка эмодзи', 'todo-with-time': 'Добавлять время при проверке TODO', - 'suggest-on-trigger-characters': 'Подсказки при вводе - вы также можете использовать Ctrl+Space (в зависимости от сочетания клавиш) для запуска', + 'suggest-on-trigger-characters': 'Подсказки при вводе - вы также можете использовать Ctrl+Space (в зависимости от сочетания клавиш) для запуска', 'sticky-scroll-enabled': 'Включить липкую прокрутку - при прокрутке редактора заголовок документа фиксируется', 'quick-suggestions': 'Быстрые предложения - предлагайте по мере ввода текста', 'enable-ai-copilot-action': 'Включить AI Copilot - показать лампочку действия AI Copilot, если она доступна', @@ -551,7 +551,7 @@ const data = { 'delete-row': 'Удалить строку', 'add-col-left': 'Добавить столбец слева', 'add-col-right': 'Добавить столбец справа', - 'delete-col': 'Удалить столбец', + 'delete-col': 'Удалить столбец', }, }, 'markdown-link': { From 565d72bc6a18a3fa4bef44094d78893583b1b878 Mon Sep 17 00:00:00 2001 From: purocean Date: Wed, 4 Sep 2024 21:08:18 +0800 Subject: [PATCH 18/24] chore: increase width of editor wrapper to 900px --- src/renderer/components/Setting.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/components/Setting.vue b/src/renderer/components/Setting.vue index b32c5105..0a27cbac 100644 --- a/src/renderer/components/Setting.vue +++ b/src/renderer/components/Setting.vue @@ -206,7 +206,7 @@ export default defineComponent({