mirror of
https://github.com/purocean/yn.git
synced 2026-09-24 15:46:02 +08:00
Merge branch 'release/3.76.1'
This commit is contained in:
@@ -4,7 +4,7 @@ A **highly extensible** Markdown editor, designed for productivity. **[Download]
|
||||
|
||||
[](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]}
|
||||
|
||||
@@ -76,12 +76,17 @@ For more information on how to use the following functions, please see [characte
|
||||
|
||||
## Changelogs
|
||||
|
||||
### [v3.75.4](https://github.com/purocean/yn/releases/tag/v3.75.4) 2024-08-06
|
||||
### [v3.76.1](https://github.com/purocean/yn/releases/tag/v3.76.1) 2024-09-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)
|
||||
[Windows](https://github.com/purocean/yn/releases/download/v3.76.1/Yank-Note-win-x64-3.76.1.exe) | [macOS arm64](https://github.com/purocean/yn/releases/download/v3.76.1/Yank-Note-mac-arm64-3.76.1.dmg) | [macOS x64](https://github.com/purocean/yn/releases/download/v3.76.1/Yank-Note-mac-x64-3.76.1.dmg) | [Linux AppImage](https://github.com/purocean/yn/releases/download/v3.76.1/Yank-Note-linux-x86_64-3.76.1.AppImage) | [Linux deb](https://github.com/purocean/yn/releases/download/v3.76.1/Yank-Note-linux-amd64-3.76.1.deb)
|
||||
|
||||
1. fix: Correct the error in detecting supported file types.
|
||||
2. fix: Resolve the issue where the shortcut key triggers an accent key and inserts additional characters in the editor on macOS.
|
||||
1. feat: Added support for the Russian language
|
||||
2. feat: Added an entry point for usage guidance
|
||||
3. feat: Optimized the completion of ordered list numbers
|
||||
4. feat: Added `{docHash}` placeholder to the image save directory configuration
|
||||
5. fix: Fixed an issue where the input box might not be focusable on Windows
|
||||
6. fix: Fixed the issue of incorrect read-only status in the editor under certain conditions
|
||||
7. fix: Fixed the issue of incorrect size calculation for Mermaid rendering under certain conditions
|
||||
|
||||
[More release notes](https://github.com/purocean/yn/releases)
|
||||
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
# Yank Note
|
||||
|
||||
**Гибкий, расширяемый** редактор Markdown, создан для повышения производительности. **[Скачать](https://github.com/purocean/yn/releases)** | **[Попробовать онлайн >>>](https://demo.yank-note.com/)**
|
||||
|
||||
|
||||
[](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]}
|
||||
|
||||

|
||||
|
||||
## Особенности
|
||||
|
||||
- **Простота использования:** Используется ядро *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)
|
||||
|
||||
## Скриншоты
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
## Поддержка
|
||||
|
||||
Wechat Group
|
||||
|
||||
<img src="./help/qrcode-wechat.jpg?.inline" width="150">
|
||||
+10
-5
@@ -4,7 +4,7 @@
|
||||
|
||||
[](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]}
|
||||
|
||||
@@ -76,12 +76,17 @@
|
||||
|
||||
## 更新日志
|
||||
|
||||
### [v3.75.4](https://github.com/purocean/yn/releases/tag/v3.75.4) 2024-08-06
|
||||
### [v3.76.1](https://github.com/purocean/yn/releases/tag/v3.76.1) 2024-09-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)
|
||||
[Windows](https://github.com/purocean/yn/releases/download/v3.76.1/Yank-Note-win-x64-3.76.1.exe) | [macOS arm64](https://github.com/purocean/yn/releases/download/v3.76.1/Yank-Note-mac-arm64-3.76.1.dmg) | [macOS x64](https://github.com/purocean/yn/releases/download/v3.76.1/Yank-Note-mac-x64-3.76.1.dmg) | [Linux AppImage](https://github.com/purocean/yn/releases/download/v3.76.1/Yank-Note-linux-x86_64-3.76.1.AppImage) | [Linux deb](https://github.com/purocean/yn/releases/download/v3.76.1/Yank-Note-linux-amd64-3.76.1.deb)
|
||||
|
||||
1. fix: 修复支持的文件类型检测错误
|
||||
2. fix: 修复 macOS 上快捷键触发重音键会在编辑器插入额外字符问题
|
||||
1. feat: 增加俄语语言支持
|
||||
2. feat: 增加使用指引帮助入口
|
||||
3. feat: 优化有序列表序号补全
|
||||
4. feat: 图片保存目录配置增加 `{docHash}` 占位符
|
||||
5. fix: 修复 Windows 上可能出现输入框无法聚焦的问题
|
||||
6. fix: 修复某些情况下编辑器只读不正确问题
|
||||
7. fix: 修复某些情况下 Mermaid 渲染尺寸计算不正确问题
|
||||
|
||||
[更多发布说明](https://github.com/purocean/yn/releases)
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "yank.note",
|
||||
"version": "3.75.4",
|
||||
"version": "3.76.1",
|
||||
"description": "Yank Note: A highly extensible Markdown editor, designed for productivity.",
|
||||
"main": "dist/main/app.js",
|
||||
"license": "AGPL-3.0",
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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' }
|
||||
|
||||
@@ -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}`)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -31,15 +31,15 @@
|
||||
<div class="help">
|
||||
<h2>{{$t('get-started.help')}}</h2>
|
||||
<div class="list">
|
||||
<div class="item">
|
||||
<a :href="GUIDE_URL" target="_blank">{{$t('status-bar.help.guide')}}</a>
|
||||
</div>
|
||||
<div class="item">
|
||||
<a href="javascript:void(0);" @click="openHelpDoc('readme')">{{$t('status-bar.help.readme')}}</a>
|
||||
</div>
|
||||
<div class="item">
|
||||
<a href="javascript:void(0);" @click="openHelpDoc('features')">{{$t('status-bar.help.features')}}</a>
|
||||
</div>
|
||||
<div class="item">
|
||||
<a href="javascript:void(0);" @click="openHelpDoc('plugin')">{{$t('status-bar.help.plugin')}}</a>
|
||||
</div>
|
||||
<div class="item">
|
||||
<a href="javascript:void(0);" @click="openShortcutManager()">{{$t('status-bar.help.shortcuts')}}</a>
|
||||
</div>
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
<div class="editor" ref="editor" v-show="showEditor">
|
||||
<slot name="editor"></slot>
|
||||
</div>
|
||||
<div class="preview" v-show="showView">
|
||||
<div :class="{preview: true, 'preview-hidden': !presentation && !showView}">
|
||||
<div v-if="showView && showEditor" class="sash-left" @dblclick="resetSize('right', 'editor')" @mousedown="initEditorResize"></div>
|
||||
<slot name="preview"></slot>
|
||||
</div>
|
||||
@@ -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 {
|
||||
|
||||
@@ -154,15 +154,16 @@ export default defineComponent({
|
||||
|
||||
const onClick = async (e: Event) => {
|
||||
const target = e.target as HTMLInputElement
|
||||
if (target.name && target.name.endsWith('[path]')) {
|
||||
if (target.tagName === 'INPUT' && target.name) {
|
||||
const jsonPath = target.name.replace(/\]/g, '').replace(/\[/g, '.')
|
||||
const field = editor.getEditor(jsonPath)
|
||||
const { canceled, filePaths } = await api.choosePath({
|
||||
properties: ['openDirectory', 'createDirectory'],
|
||||
})
|
||||
|
||||
if (!canceled && filePaths[0]) {
|
||||
field.setValue(filePaths[0])
|
||||
if (field && field.schema.openDialogOptions) {
|
||||
const { canceled, filePaths } = await api.choosePath(field.schema.openDialogOptions)
|
||||
|
||||
if (!canceled && filePaths[0]) {
|
||||
field.setValue(filePaths[0])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -206,7 +207,7 @@ export default defineComponent({
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.editor-wrapper {
|
||||
width: 800px;
|
||||
width: 900px;
|
||||
background: var(--g-color-backdrop);
|
||||
backdrop-filter: var(--g-backdrop-filter);
|
||||
margin: auto;
|
||||
@@ -256,7 +257,7 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
::v-deep(.je-form-input-label) {
|
||||
width: 120px;
|
||||
width: 140px;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
flex: none;
|
||||
@@ -264,7 +265,7 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
::v-deep(.je-form-input-label + input) {
|
||||
max-width: calc(100% - 140px);
|
||||
max-width: calc(100% - 160px);
|
||||
}
|
||||
|
||||
::v-deep(.je-form-input-label ~ .je-form-input-label) {
|
||||
@@ -309,6 +310,7 @@ export default defineComponent({
|
||||
|
||||
tr > td:last-child {
|
||||
width: 120px;
|
||||
text-align: left !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@ const schema: SettingSchema = ({
|
||||
path: {
|
||||
type: 'string',
|
||||
title: 'T_setting-panel.schema.repos.path',
|
||||
openDialogOptions: { properties: ['openDirectory', 'createDirectory'] },
|
||||
options: {
|
||||
inputAttributes: { placeholder: 'T_setting-panel.schema.repos.path-placeholder', style: 'cursor: pointer' }
|
||||
},
|
||||
@@ -52,9 +53,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,
|
||||
@@ -377,7 +378,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,
|
||||
},
|
||||
|
||||
@@ -85,8 +85,9 @@ class JavascriptIframeExecutor implements ReadableStreamDefaultReader<string> {
|
||||
|
||||
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('')
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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%);
|
||||
}
|
||||
}
|
||||
`)
|
||||
|
||||
@@ -65,6 +65,7 @@ export async function upload (file: File, belongDoc: Pick<Doc, 'repo' | 'path'>,
|
||||
.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)
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -550,6 +550,7 @@ registerHook('MONACO_BEFORE_INIT', ({ monaco }) => {
|
||||
'editor.background': '#ffffff',
|
||||
'minimap.background': '#f2f2f2',
|
||||
'editor.lineHighlightBackground': '#0000000f',
|
||||
'list.focusHighlightForeground': '#2aaaff',
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import type { VNode } from 'vue'
|
||||
import type { OpenDialogOptions } from 'electron'
|
||||
import type { Language, MsgPath } from '@share/i18n'
|
||||
import type { Doc, FileItem, PathItem, Repo } from '@share/types'
|
||||
import type MarkdownIt from 'markdown-it'
|
||||
@@ -29,6 +30,7 @@ export type SettingSchema = {
|
||||
defaultValue: BuildInSettings[K] extends any ? BuildInSettings[K] : any,
|
||||
enum?: string[] | number [],
|
||||
group: SettingGroup,
|
||||
openDialogOptions?: OpenDialogOptions,
|
||||
needReloadWindowWhenChanged?: boolean,
|
||||
validator?: (schema: SettingSchema['properties'][K], value: BuildInSettings[K], path: string) =>
|
||||
{path: string, property: K, message: string}[]
|
||||
@@ -43,6 +45,7 @@ export type SettingSchema = {
|
||||
options: {
|
||||
inputAttributes: { placeholder: TTitle }
|
||||
}
|
||||
openDialogOptions?: OpenDialogOptions,
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -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<T extends Record<string, any>, P extends string = ''> =(
|
||||
|
||||
@@ -271,6 +271,7 @@ const data = {
|
||||
'readme': 'Introduction',
|
||||
'features': 'Features',
|
||||
'shortcuts': 'Shortcuts',
|
||||
'guide': 'Guide',
|
||||
'plugin': 'Create Plugin'
|
||||
},
|
||||
'terminal': 'Terminal',
|
||||
@@ -425,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',
|
||||
},
|
||||
|
||||
@@ -0,0 +1,774 @@
|
||||
/* eslint-disable quote-props */
|
||||
import type { BaseLanguage } from './en'
|
||||
|
||||
const data: BaseLanguage = {
|
||||
'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': 'Перед активацией убедитесь, что у вас есть доступ к <a href="https://yank-note.com" target="_blank">https://yank-note.com</a>',
|
||||
'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 default data
|
||||
@@ -272,6 +272,7 @@ const data: BaseLanguage = {
|
||||
'readme': '应用介绍',
|
||||
'features': '特色功能说明',
|
||||
'shortcuts': '快捷键',
|
||||
'guide': '使用指引',
|
||||
'plugin': '插件开发'
|
||||
},
|
||||
'terminal': '终端',
|
||||
@@ -416,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': '路径类型',
|
||||
},
|
||||
|
||||
@@ -272,6 +272,7 @@ const data: BaseLanguage = {
|
||||
'readme': '應用介紹',
|
||||
'features': '特色功能說明',
|
||||
'shortcuts': '快捷鍵',
|
||||
'guide': '使用指引',
|
||||
'plugin': '插件開發'
|
||||
},
|
||||
'terminal': '終端',
|
||||
@@ -416,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': '路徑類型',
|
||||
},
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user