diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index cbf929386..d49935027 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -6,8 +6,10 @@ - - + + + + \ No newline at end of file diff --git a/src/public/app/widgets/api_log.js b/src/public/app/widgets/api_log.js index faa01f108..b1a85a486 100644 --- a/src/public/app/widgets/api_log.js +++ b/src/public/app/widgets/api_log.js @@ -1,3 +1,4 @@ +import { t } from "../services/i18n.js"; import NoteContextAwareWidget from "./note_context_aware_widget.js"; const TPL = ` @@ -32,7 +33,7 @@ const TPL = ` } -
+
`; diff --git a/src/public/app/widgets/attachment_detail.js b/src/public/app/widgets/attachment_detail.js index 8c034b8cd..63dc1ff7e 100644 --- a/src/public/app/widgets/attachment_detail.js +++ b/src/public/app/widgets/attachment_detail.js @@ -1,3 +1,4 @@ +import { t } from "../services/i18n.js"; import utils from "../services/utils.js"; import AttachmentActionsWidget from "./buttons/attachments_actions.js"; import BasicWidget from "./basic_widget.js"; @@ -153,19 +154,19 @@ export default class AttachmentDetailWidget extends BasicWidget { $deletionWarning.show(); if (willBeDeletedInMs >= 60000) { - $deletionWarning.text(`This attachment will be automatically deleted in ${utils.formatTimeInterval(willBeDeletedInMs)}`); + $deletionWarning.text(t('attachment_detail_2.will_be_deleted_in', { time: utils.formatTimeInterval(willBeDeletedInMs) })); } else { - $deletionWarning.text(`This attachment will be automatically deleted soon`); + $deletionWarning.text(t('attachment_detail_2.will_be_deleted_soon')); } - $deletionWarning.append(", because the attachment is not linked in the note's content. To prevent deletion, add the attachment link back into the content or convert the attachment into note."); + $deletionWarning.append(t('attachment_detail_2.deletion_reason')); } else { this.$wrapper.removeClass("scheduled-for-deletion"); $deletionWarning.hide(); } this.$wrapper.find('.attachment-details') - .text(`Role: ${this.attachment.role}, Size: ${utils.formatSize(this.attachment.contentLength)}`); + .text(t('attachment_detail_2.role_and_size', { role: this.attachment.role, size: utils.formatSize(this.attachment.contentLength) })); this.$wrapper.find('.attachment-actions-container').append(this.attachmentActionsWidget.render()); const {$renderedContent} = await contentRenderer.getRenderedContent(this.attachment, { imageHasZoom: this.isFullDetail }); @@ -186,9 +187,9 @@ export default class AttachmentDetailWidget extends BasicWidget { utils.copyHtmlToClipboard($link[0].outerHTML); - toastService.showMessage("Attachment link copied to clipboard."); + toastService.showMessage(t('attachment_detail_2.link_copied')); } else { - throw new Error(`Unrecognized attachment role '${this.attachment.role}'.`); + throw new Error(t('attachment_detail_2.unrecognized_role', { role: this.attachment.role })); } } diff --git a/src/public/app/widgets/bookmark_switch.js b/src/public/app/widgets/bookmark_switch.js index 22040e3e8..ab9055df1 100644 --- a/src/public/app/widgets/bookmark_switch.js +++ b/src/public/app/widgets/bookmark_switch.js @@ -1,6 +1,7 @@ import SwitchWidget from "./switch.js"; import server from "../services/server.js"; import toastService from "../services/toast.js"; +import { t } from "../services/i18n.js"; export default class BookmarkSwitchWidget extends SwitchWidget { isEnabled() { @@ -12,11 +13,11 @@ export default class BookmarkSwitchWidget extends SwitchWidget { doRender() { super.doRender(); - this.$switchOnName.text("Bookmark"); - this.$switchOnButton.attr("title", "Bookmark this note to the left side panel"); + this.$switchOnName.text(t("bookmark_switch.bookmark")); + this.$switchOnButton.attr("title", t("bookmark_switch.bookmark_this_note")); - this.$switchOffName.text("Bookmark"); - this.$switchOffButton.attr("title", "Remove bookmark"); + this.$switchOffName.text(t("bookmark_switch.bookmark")); + this.$switchOffButton.attr("title", t("bookmark_switch.remove_bookmark")); } async toggle(state) { diff --git a/src/public/app/widgets/editability_select.js b/src/public/app/widgets/editability_select.js index 2cc4f14de..00460be18 100644 --- a/src/public/app/widgets/editability_select.js +++ b/src/public/app/widgets/editability_select.js @@ -1,5 +1,6 @@ import attributeService from '../services/attributes.js'; import NoteContextAwareWidget from "./note_context_aware_widget.js"; +import { t } from "../services/i18n.js"; const TPL = ` @@ -46,20 +47,20 @@ export default class EditabilitySelectWidget extends NoteContextAwareWidget { this.$widget.on('click', '.dropdown-item', async e => { - this.$widget.find('.dropdown-toggle').dropdown('toggle'); + this.$widget.find('.dropdown-toggle').dropdown('toggle'); - const editability = $(e.target).closest("[data-editability]").attr("data-editability"); + const editability = $(e.target).closest("[data-editability]").attr("data-editability"); - for (const ownedAttr of this.note.getOwnedLabels()) { - if (['readOnly', 'autoReadOnlyDisabled'].includes(ownedAttr.name)) { - await attributeService.removeAttributeById(this.noteId, ownedAttr.attributeId); + for (const ownedAttr of this.note.getOwnedLabels()) { + if (['readOnly', 'autoReadOnlyDisabled'].includes(ownedAttr.name)) { + await attributeService.removeAttributeById(this.noteId, ownedAttr.attributeId); + } } - } - if (editability !== 'auto') { - await attributeService.addLabel(this.noteId, editability); - } - }); + if (editability !== 'auto') { + await attributeService.addLabel(this.noteId, editability); + } + }); } async refreshWithNote(note) { @@ -73,9 +74,9 @@ export default class EditabilitySelectWidget extends NoteContextAwareWidget { } const labels = { - "auto": "Auto", - "readOnly": "Read-only", - "autoReadOnlyDisabled": "Always Editable" + "auto": t("editability_select.auto"), + "readOnly": t("editability_select.read_only"), + "autoReadOnlyDisabled": t("editability_select.always_editable") } this.$widget.find('.dropdown-item').removeClass("selected"); diff --git a/src/public/app/widgets/type_widgets/options/backup.js b/src/public/app/widgets/type_widgets/options/backup.js index 42b5e15ed..1be36366e 100644 --- a/src/public/app/widgets/type_widgets/options/backup.js +++ b/src/public/app/widgets/type_widgets/options/backup.js @@ -1,45 +1,46 @@ +import { t } from "../../../services/i18n.js"; import server from "../../../services/server.js"; import toastService from "../../../services/toast.js"; import OptionsWidget from "./options_widget.js"; const TPL = `
-

Automatic backup

+

${t('backup.automatic_backup')}

-

Trilium can back up the database automatically:

+

${t('backup.automatic_backup_description')}

-

It's recommended to keep the backup turned on, but this can make application startup slow with large databases and/or slow storage devices.

+

${t('backup.backup_recommendation')}

-

Backup now

+

${t('backup.backup_now')}

- +
-

Existing backups

+

${t('backup.existing_backups')}

@@ -54,7 +55,7 @@ export default class BackupOptions extends OptionsWidget { this.$backupDatabaseButton.on('click', async () => { const {backupFile} = await server.post('database/backup-database'); - toastService.showMessage(`Database has been backed up to ${backupFile}`, 10000); + toastService.showMessage(`${t('backup.database_backed_up_to')} ${backupFile}`, 10000); this.refresh(); }); @@ -84,7 +85,7 @@ export default class BackupOptions extends OptionsWidget { this.$existingBackupList.empty(); if (!backupFiles.length) { - backupFiles = [{filePath: "no backup yet", mtime: ''}]; + backupFiles = [{filePath: t('backup.no_backup_yet'), mtime: ''}]; } for (const {filePath, mtime} of backupFiles) { diff --git a/src/public/app/widgets/type_widgets/options/etapi.js b/src/public/app/widgets/type_widgets/options/etapi.js index 58e956aa3..f2536842e 100644 --- a/src/public/app/widgets/type_widgets/options/etapi.js +++ b/src/public/app/widgets/type_widgets/options/etapi.js @@ -1,3 +1,4 @@ +import { t } from "../../../services/i18n.js"; import server from "../../../services/server.js"; import dialogService from "../../../services/dialog.js"; import toastService from "../../../services/toast.js"; @@ -5,24 +6,24 @@ import OptionsWidget from "./options_widget.js"; const TPL = `
-

ETAPI

+

${t("etapi.title")}

-

ETAPI is a REST API used to access Trilium instance programmatically, without UI.
- See more details on wiki and ETAPI OpenAPI spec.

+

${t("etapi.description")}
+ ${t("etapi.see_more")} ${t("etapi.wiki")} ${t("etapi.and")} ${t("etapi.openapi_spec")}.

- + -
Existing tokens
+
${t("etapi.existing_tokens")}
-
There are no tokens yet. Click on the button above to create one.
+
${t("etapi.no_tokens_yet")}
- - - + + + @@ -52,21 +53,21 @@ export default class EtapiOptions extends OptionsWidget { this.$widget.find(".create-etapi-token").on("click", async () => { const tokenName = await dialogService.prompt({ - title: "New ETAPI token", - message: "Please enter new token's name", - defaultValue: "new token" + title: t("etapi.new_token_title"), + message: t("etapi.new_token_message"), + defaultValue: t("etapi.default_token_name") }); if (!tokenName.trim()) { - toastService.showError("Token name can't be empty"); + toastService.showError(t("etapi.error_empty_name")); return; } const {authToken} = await server.post('etapi-tokens', {tokenName}); await dialogService.prompt({ - title: "ETAPI token created", - message: 'Copy the created token into clipboard. Trilium stores the token hashed and this is the last time you see it.', + title: t("etapi.token_created_title"), + message: t("etapi.token_created_message"), defaultValue: authToken }); @@ -94,9 +95,9 @@ export default class EtapiOptions extends OptionsWidget { .append($("
Token nameCreatedActions${t("etapi.token_name")}${t("etapi.created")}${t("etapi.actions")}
").text(token.name)) .append($("").text(token.utcDateCreated)) .append($("").append( - $('') + $('') .on("click", () => this.renameToken(token.etapiTokenId, token.name)), - $('') + $('') .on("click", () => this.deleteToken(token.etapiTokenId, token.name)) )) ); @@ -105,8 +106,8 @@ export default class EtapiOptions extends OptionsWidget { async renameToken(etapiTokenId, oldName) { const tokenName = await dialogService.prompt({ - title: "Rename token", - message: "Please enter new token's name", + title: t("etapi.rename_token_title"), + message: t("etapi.rename_token_message"), defaultValue: oldName }); @@ -120,7 +121,7 @@ export default class EtapiOptions extends OptionsWidget { } async deleteToken(etapiTokenId, name) { - if (!await dialogService.confirm(`Are you sure you want to delete ETAPI token "${name}"?`)) { + if (!await dialogService.confirm(t("etapi.delete_token_confirmation", { name }))) { return; } diff --git a/src/public/app/widgets/type_widgets/options/options_widget.js b/src/public/app/widgets/type_widgets/options/options_widget.js index 3f1630870..bfbcb8657 100644 --- a/src/public/app/widgets/type_widgets/options/options_widget.js +++ b/src/public/app/widgets/type_widgets/options/options_widget.js @@ -1,3 +1,4 @@ +import { t } from "../../../services/i18n.js"; import server from "../../../services/server.js"; import toastService from "../../../services/toast.js"; import NoteContextAwareWidget from "../../note_context_aware_widget.js"; @@ -24,8 +25,8 @@ export default class OptionsWidget extends NoteContextAwareWidget { showUpdateNotification() { toastService.showPersistent({ id: "options-change-saved", - title: "Options status", - message: "Options change have been saved.", + title: t("options_widget.options_status"), + message: t("options_widget.options_change_saved"), icon: "slider", closeAfter: 2000 }); diff --git a/src/public/app/widgets/type_widgets/options/password.js b/src/public/app/widgets/type_widgets/options/password.js index 7b42fb064..228e3ecd1 100644 --- a/src/public/app/widgets/type_widgets/options/password.js +++ b/src/public/app/widgets/type_widgets/options/password.js @@ -1,3 +1,4 @@ +import { t } from "../../../services/i18n.js"; import server from "../../../services/server.js"; import protectedSessionHolder from "../../../services/protected_session_holder.js"; import toastService from "../../../services/toast.js"; @@ -5,42 +6,39 @@ import OptionsWidget from "./options_widget.js"; const TPL = `
-

+

${t("password.heading")}

- +
- +
- +
- +
-

Protected Session Timeout

+

${t("password.protected_session_timeout")}

-

Protected session timeout is a time period after which the protected session is wiped from - the browser's memory. This is measured from the last interaction with protected notes. See wiki for more info.

+

${t("password.protected_session_timeout_description")} ${t("password.wiki")} ${t("password.for_more_info")}

- +
`; @@ -58,13 +56,13 @@ export default class PasswordOptions extends OptionsWidget { this.$resetPasswordButton = this.$widget.find(".reset-password-button"); this.$resetPasswordButton.on("click", async () => { - if (confirm("By resetting the password you will forever lose access to all your existing protected notes. Do you really want to reset the password?")) { + if (confirm(t("password.reset_confirmation"))) { await server.post("password/reset?really=yesIReallyWantToResetPasswordAndLoseAccessToMyProtectedNotes"); const options = await server.get('options'); this.optionsLoaded(options); - toastService.showError("Password has been reset. Please set new password"); + toastService.showError(t("password.reset_success_message")); } }); @@ -79,8 +77,8 @@ export default class PasswordOptions extends OptionsWidget { const isPasswordSet = options.isPasswordSet === 'true'; this.$widget.find(".old-password-form-group").toggle(isPasswordSet); - this.$passwordHeading.text(isPasswordSet ? 'Change Password' : 'Set Password'); - this.$savePasswordButton.text(isPasswordSet ? 'Change Password' : 'Set Password'); + this.$passwordHeading.text(isPasswordSet ? t("password.change_password_heading") : t("password.set_password_heading")); + this.$savePasswordButton.text(isPasswordSet ? t("password.change_password") : t("password.set_password")); this.$protectedSessionTimeout.val(options.protectedSessionTimeout); } @@ -94,7 +92,7 @@ export default class PasswordOptions extends OptionsWidget { this.$newPassword2.val(''); if (newPassword1 !== newPassword2) { - toastService.showError("New passwords are not the same."); + toastService.showError(t("password.password_mismatch")); return false; } @@ -103,7 +101,7 @@ export default class PasswordOptions extends OptionsWidget { 'new_password': newPassword1 }).then(result => { if (result.success) { - toastService.showError("Password has been changed. Trilium will be reloaded after you press OK."); + toastService.showError(t("password.password_changed_success")); // password changed so current protected session is invalid and needs to be cleared protectedSessionHolder.resetProtectedSession(); diff --git a/src/public/app/widgets/type_widgets/options/shortcuts.js b/src/public/app/widgets/type_widgets/options/shortcuts.js index 9430ba85f..bbfa28933 100644 --- a/src/public/app/widgets/type_widgets/options/shortcuts.js +++ b/src/public/app/widgets/type_widgets/options/shortcuts.js @@ -2,6 +2,7 @@ import server from "../../../services/server.js"; import utils from "../../../services/utils.js"; import dialogService from "../../../services/dialog.js"; import OptionsWidget from "./options_widget.js"; +import { t } from "../../../services/i18n.js"; const TPL = `
@@ -25,25 +26,25 @@ const TPL = ` } -

Keyboard Shortcuts

+

${t('shortcuts.keyboard_shortcuts')}

- Multiple shortcuts for the same action can be separated by comma. - See Electron documentation for available modifiers and key codes. + ${t('shortcuts.multiple_shortcuts')} + ${t('shortcuts.electron_documentation')}

- +
- - - - - + + + + + @@ -51,9 +52,9 @@ const TPL = `
- + - +
`; @@ -83,10 +84,10 @@ export default class KeyboardShortcutsOptions extends OptionsWidget { else { $tr.append($("
Action nameShortcutsDefault shortcutsDescription
${t('shortcuts.action_name')}${t('shortcuts.shortcuts')}${t('shortcuts.default_shortcuts')}${t('shortcuts.description')}
").text(action.actionName)) .append($("").append( - $(``) - .val(action.effectiveShortcuts.join(", ")) - .attr('data-keyboard-action-name', action.actionName) - .attr('data-default-keyboard-shortcuts', action.defaultShortcuts.join(", ")) + $(``) + .val(action.effectiveShortcuts.join(", ")) + .attr('data-keyboard-action-name', action.actionName) + .attr('data-default-keyboard-shortcuts', action.defaultShortcuts.join(", ")) ) ) .append($("").text(action.defaultShortcuts.join(", "))) @@ -101,10 +102,10 @@ export default class KeyboardShortcutsOptions extends OptionsWidget { const $input = this.$widget.find(e.target); const actionName = $input.attr('data-keyboard-action-name'); const shortcuts = $input.val() - .replace('+,', "+Comma") - .split(",") - .map(shortcut => shortcut.replace("+Comma", "+,")) - .filter(shortcut => !!shortcut); + .replace('+,', "+Comma") + .split(",") + .map(shortcut => shortcut.replace("+Comma", "+,")) + .filter(shortcut => !!shortcut); const optionName = `keyboardShortcuts${actionName.substr(0, 1).toUpperCase()}${actionName.substr(1)}`; @@ -112,7 +113,7 @@ export default class KeyboardShortcutsOptions extends OptionsWidget { }); this.$widget.find(".options-keyboard-shortcuts-set-all-to-default").on('click', async () => { - if (!await dialogService.confirm("Do you really want to reset all keyboard shortcuts to the default?")) { + if (!await dialogService.confirm(t('shortcuts.confirm_reset'))) { return; } @@ -152,7 +153,7 @@ export default class KeyboardShortcutsOptions extends OptionsWidget { return; } - this.$widget.find(el).toggle(!!( // !! to avoid toggle overloads with different behavior + this.$widget.find(el).toggle(!!( action.actionName.toLowerCase().includes(filter) || action.defaultShortcuts.some(shortcut => shortcut.toLowerCase().includes(filter)) || action.effectiveShortcuts.some(shortcut => shortcut.toLowerCase().includes(filter)) diff --git a/src/public/app/widgets/type_widgets/options/spellcheck.js b/src/public/app/widgets/type_widgets/options/spellcheck.js index 513c090c2..dac97db24 100644 --- a/src/public/app/widgets/type_widgets/options/spellcheck.js +++ b/src/public/app/widgets/type_widgets/options/spellcheck.js @@ -1,35 +1,36 @@ import utils from "../../../services/utils.js"; import OptionsWidget from "./options_widget.js"; +import { t } from "../../../services/i18n.js"; const TPL_WEB = `
-

Spell Check

+

${t('spellcheck.title')}

-

These options apply only for desktop builds, browsers will use their own native spell check.

+

${t('spellcheck.description')}

`; const TPL_ELECTRON = `
-

Spell Check

+

${t('spellcheck.title')}

App restart is required after change.


- - + +
-

Multiple languages can be separated by comma, e.g. en-US, de-DE, cs. Changes to the spell check options will take effect after application restart.

+

${t('spellcheck.multiple_languages_info')}

-

Available language codes:

+

${t('spellcheck.available_language_codes_label')}

`; export default class SpellcheckOptions extends OptionsWidget { diff --git a/src/public/app/widgets/type_widgets/options/sync.js b/src/public/app/widgets/type_widgets/options/sync.js index bb8e3c9dd..0b5bebf9d 100644 --- a/src/public/app/widgets/type_widgets/options/sync.js +++ b/src/public/app/widgets/type_widgets/options/sync.js @@ -1,44 +1,45 @@ import server from "../../../services/server.js"; import toastService from "../../../services/toast.js"; import OptionsWidget from "./options_widget.js"; +import { t } from "../../../services/i18n.js"; const TPL = `
-

Sync Configuration

+

${t('sync_2.config_title')}

- +
- +
- + -

Note: If you leave the proxy setting blank, the system proxy will be used (applies to desktop/electron build only).

-

Another special value is noproxy which forces ignoring even the system proxy and respectes NODE_TLS_REJECT_UNAUTHORIZED.

+

${t('sync_2.note')}: ${t('sync_2.note_description')}

+

${t('sync_2.special_value_description')}

- + - +
-

Sync Test

+

${t('sync_2.test_title')}

-

This will test the connection and handshake to the sync server. If the sync server isn't initialized, this will set it up to sync with the local document.

+

${t('sync_2.test_description')}

- +
`; export default class SyncOptions extends OptionsWidget { @@ -58,9 +59,8 @@ export default class SyncOptions extends OptionsWidget { if (result.success) { toastService.showMessage(result.message); - } - else { - toastService.showError(`Sync server handshake failed, error: ${result.message}`); + } else { + toastService.showError(t('sync_2.handshake_failed', { message: result.message })); } }); } diff --git a/src/public/translations/cn/translation.json b/src/public/translations/cn/translation.json index c943e1fb1..63b0aed5c 100644 --- a/src/public/translations/cn/translation.json +++ b/src/public/translations/cn/translation.json @@ -1114,5 +1114,133 @@ "title": "自动只读大小", "description": "自动只读笔记大小是超过该大小后,笔记将以只读模式显示(出于性能考虑)。", "label": "自动只读大小(文本笔记)" + }, + "i18n": { + "title": "本地化", + "language": "语言" + }, + "backup": { + "automatic_backup": "自动备份", + "automatic_backup_description": "Trilium 可以自动备份数据库:", + "enable_daily_backup": "启用每日备份", + "enable_weekly_backup": "启用每周备份", + "enable_monthly_backup": "启用每月备份", + "backup_recommendation": "建议打开备份功能,但这可能会使大型数据库和/或慢速存储设备的应用程序启动变慢。", + "backup_now": "立即备份", + "backup_database_now": "立即备份数据库", + "existing_backups": "现有备份", + "database_backed_up_to": "数据库已备份到", + "no_backup_yet": "尚无备份" + }, + "etapi": { + "title": "ETAPI", + "description": "ETAPI 是一个 REST API,用于以编程方式访问 Trilium 实例,而无需 UI。", + "see_more": "更多详情见", + "wiki": "维基", + "and": "和", + "openapi_spec": "ETAPI OpenAPI 规范", + "create_token": "创建新的 ETAPI 令牌", + "existing_tokens": "现有令牌", + "no_tokens_yet": "目前还没有令牌。点击上面的按钮创建一个。", + "token_name": "令牌名称", + "created": "创建时间", + "actions": "操作", + "new_token_title": "新 ETAPI 令牌", + "new_token_message": "请输入新的令牌名称", + "default_token_name": "新令牌", + "error_empty_name": "令牌名称不能为空", + "token_created_title": "ETAPI 令牌已创建", + "token_created_message": "将创建的令牌复制到剪贴板。Trilium 存储了令牌的哈希值,这是你最后一次看到它。", + "rename_token": "重命名此令牌", + "delete_token": "删除/停用此令牌", + "rename_token_title": "重命名令牌", + "rename_token_message": "请输入新的令牌名称", + "delete_token_confirmation": "你确定要删除 ETAPI 令牌 \"{{name}}\" 吗?" + }, + "options_widget": { + "options_status": "选项状态", + "options_change_saved": "选项更改已保存。" + }, + "password": { + "heading": "密码", + "alert_message": "请务必记住您的新密码。密码用于登录 Web 界面和加密保护的笔记。如果您忘记了密码,所有保护的笔记将永久丢失。", + "reset_link": "点击这里重置。", + "old_password": "旧密码", + "new_password": "新密码", + "new_password_confirmation": "新密码确认", + "change_password": "更改密码", + "protected_session_timeout": "保护会话超时", + "protected_session_timeout_description": "保护会话超时是一个时间段,超时后保护会话会从浏览器内存中清除。这是从最后一次与保护笔记的交互开始计时的。更多信息请见", + "wiki": "维基", + "for_more_info": "更多信息。", + "protected_session_timeout_label": "保护会话超时(秒)", + "reset_confirmation": "重置密码将永久丧失对所有现受保护笔记的访问。您真的要重置密码吗?", + "reset_success_message": "密码已重置。请设置新密码", + "change_password_heading": "更改密码", + "set_password_heading": "设置密码", + "set_password": "设置密码", + "password_mismatch": "新密码不一致。", + "password_changed_success": "密码已更改。按 OK 后 Trilium 将重新加载。" + }, + "shortcuts": { + "keyboard_shortcuts": "快捷键", + "multiple_shortcuts": "同一操作的多个快捷键可以用逗号分隔。", + "electron_documentation": "请参阅 Electron文档,了解可用的修饰符和键码。", + "type_text_to_filter": "输入文字以过滤快捷键...", + "action_name": "操作名称", + "shortcuts": "快捷键", + "default_shortcuts": "默认快捷键", + "description": "描述", + "reload_app": "重新加载应用以应用更改", + "set_all_to_default": "将所有快捷键重置为默认值", + "confirm_reset": "您确定要将所有键盘快捷键重置为默认值吗?" + }, + "spellcheck": { + "title": "拼写检查", + "description": "这些选项仅适用于桌面版本,浏览器将使用其原生的拼写检查功能。更改后需要重启应用。", + "enable": "启用拼写检查", + "language_code_label": "语言代码", + "language_code_placeholder": "例如 \"en-US\", \"de-AT\"", + "multiple_languages_info": "多种语言可以用逗号分隔,例如 \"en-US, de-DE, cs\"。拼写检查选项的更改将在应用重启后生效。", + "available_language_codes_label": "可用的语言代码:" + }, + "sync_2": { + "config_title": "同步配置", + "server_address": "服务器地址", + "timeout": "同步超时(单位:毫秒)", + "proxy_label": "同步代理服务器(可选)", + "note": "注意", + "note_description": "代理设置留空则使用系统代理(仅桌面客户端有效)。", + "special_value_description": "另一个特殊值是 noproxy,它强制忽略系统代理并遵守 NODE_TLS_REJECT_UNAUTHORIZED。", + "save": "保存", + "help": "帮助", + "test_title": "同步测试", + "test_description": "测试和同步服务器之间的连接。如果同步服务器没有初始化,会将本地文档同步到同步服务器上。", + "test_button": "测试同步", + "handshake_failed": "同步服务器握手失败,错误:{{message}}" + }, + "api_log": { + "close": "关闭" + }, + "attachment_detail_2": { + "will_be_deleted_in": "此附件将在 {{time}} 后自动删除", + "will_be_deleted_soon": "该附件将很快被自动删除", + "deletion_reason": ",因为该附件未链接在笔记的内容中。为防止被删除,请将附件链接重新添加到内容中或将附件转换为笔记。", + "role_and_size": "角色: {{role}}, 大小: {{size}}", + "link_copied": "附件链接已复制到剪贴板。", + "unrecognized_role": "无法识别的附件角色 '{{role}}'。" + }, + "bookmark_switch": { + "bookmark": "书签", + "bookmark_this_note": "将此笔记添加到左侧面板的书签", + "remove_bookmark": "移除书签" + }, + "editability_select": { + "auto": "自动", + "read_only": "只读", + "always_editable": "始终可编辑", + "note_is_editable": "笔记如果不太长则可编辑。", + "note_is_read_only": "笔记为只读,但可以通过点击按钮进行编辑。", + "note_is_always_editable": "无论笔记长度如何,始终可编辑。" } } diff --git a/src/public/translations/en/translation.json b/src/public/translations/en/translation.json index 3c6295d29..38c0a0936 100644 --- a/src/public/translations/en/translation.json +++ b/src/public/translations/en/translation.json @@ -1,1122 +1,1246 @@ { - "about": { - "title": "About TriliumNext Notes", - "homepage": "Homepage:", - "app_version": "App version:", - "db_version": "DB version:", - "sync_version": "Sync version:", - "build_date": "Build date:", - "build_revision": "Build revision:", - "data_directory": "Data directory:" - }, - "toast": { - "critical-error": { - "title": "Critical error", - "message": "A critical error has occurred which prevents the client application from starting:\n\n{{message}}\n\nThis is most likely caused by a script failing in an unexpected way. Try starting the application in safe mode and addressing the issue." + "about": { + "title": "About TriliumNext Notes", + "homepage": "Homepage:", + "app_version": "App version:", + "db_version": "DB version:", + "sync_version": "Sync version:", + "build_date": "Build date:", + "build_revision": "Build revision:", + "data_directory": "Data directory:" }, - "widget-error": { - "title": "Failed to initialize a widget", - "message": "Widget with title \"{{title}}\" could not be initialized due to:\n\n{{message}}" + "toast": { + "critical-error": { + "title": "Critical error", + "message": "A critical error has occurred which prevents the client application from starting:\n\n{{message}}\n\nThis is most likely caused by a script failing in an unexpected way. Try starting the application in safe mode and addressing the issue." + }, + "widget-error": { + "title": "Failed to initialize a widget", + "message": "Widget with title \"{{title}}\" could not be initialized due to:\n\n{{message}}" + } + }, + "add_link": { + "add_link": "Add link", + "help_on_links": "Help on links", + "close": "Close", + "note": "Note", + "search_note": "search for note by its name", + "link_title_mirrors": "link title mirrors the note's current title", + "link_title_arbitrary": "link title can be changed arbitrarily", + "link_title": "Link title" + }, + "branch_prefix": { + "edit_branch_prefix": "Edit branch prefix", + "help_on_tree_prefix": "Help on Tree prefix", + "close": "Close", + "prefix": "Prefix: ", + "save": "Save", + "branch_prefix_saved": "Branch prefix has been saved." + }, + "bulk_actions": { + "bulk_actions": "Bulk actions", + "close": "Close", + "affected_notes": "Affected notes", + "include_descendants": "Include descendants of the selected notes", + "available_actions": "Available actions", + "chosen_actions": "Chosen actions", + "execute_bulk_actions": "Execute bulk actions", + "bulk_actions_executed": "Bulk actions have been executed successfully.", + "none_yet": "None yet ... add an action by clicking one of the available ones above." + }, + "clone_to": { + "clone_notes_to": "Clone notes to ...", + "help_on_links": "Help on links", + "notes_to_clone": "Notes to clone", + "target_parent_note": "Target parent note", + "search_for_note_by_its_name": "search for note by its name", + "cloned_note_prefix_title": "Cloned note will be shown in note tree with given prefix", + "prefix_optional": "Prefix (optional)", + "clone_to_selected_note": "Clone to selected note enter", + "no_path_to_clone_to": "No path to clone to.", + "note_cloned": "Note \"{{clonedTitle}}\" has been cloned into \"{{targetTitle}}\"" + }, + "confirm": { + "confirmation": "Confirmation", + "cancel": "Cancel", + "ok": "OK", + "are_you_sure_remove_note": "Are you sure you want to remove the note \"{{title}}\" from relation map? ", + "if_you_dont_check": "If you don't check this, the note will be only removed from the relation map.", + "also_delete_note": "Also delete the note" + }, + "delete_notes": { + "delete_notes_preview": "Delete notes preview", + "delete_all_clones_description": "delete also all clones (can be undone in recent changes)", + "erase_notes_description": "Normal (soft) deletion only marks the notes as deleted and they can be undeleted (in recent changes dialog) within a period of time. Checking this option will erase the notes immediately and it won't be possible to undelete the notes.", + "erase_notes_warning": "erase notes permanently (can't be undone), including all clones. This will force application reload.", + "notes_to_be_deleted": "Following notes will be deleted ()", + "no_note_to_delete": "No note will be deleted (only clones).", + "broken_relations_to_be_deleted": "Following relations will be broken and deleted ()", + "cancel": "Cancel", + "ok": "OK", + "note": "Note", + "to_be_deleted": " (to be deleted) is referenced by relation {{attrName}} originating from " + }, + "export": { + "export_note_title": "Export note", + "close": "Close", + "export_type_subtree": "this note and all of its descendants", + "format_html": "HTML in ZIP archive - this is recommended since this preserves all the formatting.", + "format_markdown": "Markdown - this preserves most of the formatting.", + "format_opml": "OPML - outliner interchange format for text only. Formatting, images and files are not included.", + "opml_version_1": "OPML v1.0 - plain text only", + "opml_version_2": "OMPL v2.0 - allows also HTML", + "export_type_single": "only this note without its descendants", + "export": "Export", + "choose_export_type": "Choose export type first please", + "export_status": "Export status", + "export_in_progress": "Export in progress: {{progressCount}}", + "export_finished_successfully": "Export finished successfully." + }, + "help": { + "fullDocumentation": "Help (full documentation is available online)", + "close": "Close", + "noteNavigation": "Note navigation", + "goUpDown": "go up/down in the list of notes", + "collapseExpand": "collapse/expand node", + "notSet": "not set", + "goBackForwards": "go back / forwards in the history", + "showJumpToNoteDialog": "show \"Jump to\" dialog", + "scrollToActiveNote": "scroll to active note", + "jumpToParentNote": "jump to parent note", + "collapseWholeTree": "collapse whole note tree", + "collapseSubTree": "collapse sub-tree", + "tabShortcuts": "Tab shortcuts", + "newTabNoteLink": "(or middle mouse click) on note link opens note in a new tab", + "onlyInDesktop": "Only in desktop (electron build)", + "openEmptyTab": "open empty tab", + "closeActiveTab": "close active tab", + "activateNextTab": "activate next tab", + "activatePreviousTab": "activate previous tab", + "creatingNotes": "Creating notes", + "createNoteAfter": "create new note after the active note", + "createNoteInto": "create new sub-note into active note", + "editBranchPrefix": "edit prefix of active note clone", + "movingCloningNotes": "Moving / cloning notes", + "moveNoteUpDown": "move note up/down in the note list", + "moveNoteUpHierarchy": "move note up in the hierarchy", + "multiSelectNote": "multi-select note above/below", + "selectAllNotes": "select all notes in the current level", + "selectNote": "select note", + "copyNotes": "copy active note (or current selection) into clipboard (used for cloning)", + "cutNotes": "cut current (or current selection) note into clipboard (used for moving notes)", + "pasteNotes": "paste note(s) as sub-note into active note (which is either move or clone depending on whether it was copied or cut into clipboard)", + "deleteNotes": "delete note / sub-tree", + "editingNotes": "Editing notes", + "editNoteTitle": "in tree pane will switch from tree pane into note title. Enter from note title will switch focus to text editor. will switch back from editor to tree pane.", + "createEditLink": "create / edit external link", + "createInternalLink": "create internal link", + "followLink": "follow link under cursor", + "insertDateTime": "insert current date and time at caret position", + "jumpToTreePane": "jump away to the tree pane and scroll to active note", + "markdownAutoformat": "Markdown-like autoformatting", + "headings": " etc. followed by space for headings", + "bulletList": "* or - followed by space for bullet list", + "numberedList": "1. or 1) followed by space for numbered list", + "blockQuote": "start a line with > followed by space for block quote", + "troubleshooting": "Troubleshooting", + "reloadFrontend": "reload Trilium frontend", + "showDevTools": "show developer tools", + "showSQLConsole": "show SQL console", + "other": "Other", + "quickSearch": "focus on quick search input", + "inPageSearch": "in page search" + }, + "import": { + "importIntoNote": "Import into note", + "close": "Close", + "chooseImportFile": "Choose import file", + "importDescription": "Content of the selected file(s) will be imported as child note(s) into", + "options": "Options", + "safeImportTooltip": "Trilium .zip export files can contain executable scripts which may contain harmful behavior. Safe import will deactivate automatic execution of all imported scripts. Uncheck \"Safe import\" only if the imported archive is supposed to contain executable scripts and you completely trust the contents of the import file.", + "safeImport": "Safe import", + "explodeArchivesTooltip": "If this is checked then Trilium will read .zip, .enex and .opml files and create notes from files insides those archives. If unchecked, then Trilium will attach the archives themselves to the note.", + "explodeArchives": "Read contents of .zip, .enex and .opml archives.", + "shrinkImagesTooltip": "

If you check this option, Trilium will attempt to shrink the imported images by scaling and optimization which may affect the perceived image quality. If unchecked, images will be imported without changes.

This doesn't apply to .zip imports with metadata since it is assumed these files are already optimized.

", + "shrinkImages": "Shrink images", + "textImportedAsText": "Import HTML, Markdown and TXT as text notes if it's unclear from metadata", + "codeImportedAsCode": "Import recognized code files (e.g. .json) as code notes if it's unclear from metadata", + "replaceUnderscoresWithSpaces": "Replace underscores with spaces in imported note names", + "import": "Import" + }, + "include_note": { + "dialog_title": "Include note", + "label_note": "Note", + "placeholder_search": "search for note by its name", + "box_size_prompt": "Box size of the included note:", + "box_size_small": "small (~ 10 lines)", + "box_size_medium": "medium (~ 30 lines)", + "box_size_full": "full (box shows complete text)", + "button_include": "Include note" + }, + "info": { + "modalTitle": "Info message", + "closeButton": "Close", + "okButton": "OK" + }, + "jump_to_note": { + "search_placeholder": "search for note by its name", + "search_button": "Search in full text Ctrl+Enter" + }, + "markdown_import": { + "dialog_title": "Markdown import", + "modal_body_text": "Because of browser sandbox it's not possible to directly read clipboard from JavaScript. Please paste the Markdown to import to textarea below and click on Import button", + "import_button": "Import Ctrl+Enter", + "import_success": "Markdown content has been imported into the document." + }, + "move_to": { + "dialog_title": "Move notes to ...", + "notes_to_move": "Notes to move", + "target_parent_note": "Target parent note", + "search_placeholder": "search for note by its name", + "move_button": "Move to selected note enter", + "error_no_path": "No path to move to.", + "move_success_message": "Selected notes have been moved into " + }, + "note_type_chooser": { + "modal_title": "Choose note type", + "modal_body": "Choose note type / template of the new note:", + "dropdown_trigger": "Dropdown trigger", + "templates": "Templates:" + }, + "password_not_set": { + "title": "Password is not set", + "body1": "Protected notes are encrypted using a user password, but password has not been set yet.", + "body2": "To be able to protect notes, click here to open the Options dialog and set your password." + }, + "prompt": { + "title": "Prompt", + "ok": "OK enter", + "defaultTitle": "Prompt" + }, + "protected_session_password": { + "modal_title": "Protected session", + "help_title": "Help on Protected notes", + "close_label": "Close", + "form_label": "To proceed with requested action you need to start protected session by entering password:", + "start_button": "Start protected session enter" + }, + "recent_changes": { + "title": "Recent changes", + "erase_notes_button": "Erase deleted notes now", + "deleted_notes_message": "Deleted notes have been erased.", + "no_changes_message": "No changes yet ...", + "undelete_link": "undelete", + "confirm_undelete": "Do you want to undelete this note and its sub-notes?" + }, + "revisions": { + "note_revisions": "Note revisions", + "delete_all_revisions": "Delete all revisions of this note", + "delete_all_button": "Delete all revisions", + "help_title": "Help on Note revisions", + "dropdown_trigger": "Dropdown trigger", + "revision_last_edited": "This revision was last edited on {{date}}", + "confirm_delete_all": "Do you want to delete all revisions of this note? This action will erase revision title and content, but still preserve revision metadata.", + "no_revisions": "No revisions for this note yet...", + "restore_button": "Restore this revision", + "confirm_restore": "Do you want to restore this revision? This will overwrite current title and content of the note with this revision.", + "delete_button": "Delete this revision", + "confirm_delete": "Do you want to delete this revision? This action will delete revision title and content, but still preserve revision metadata.", + "revisions_deleted": "Note revisions has been deleted.", + "revision_restored": "Note revision has been restored.", + "revision_deleted": "Note revision has been deleted.", + "download_button": "Download", + "mime": "MIME: ", + "file_size": "File size:", + "preview": "Preview:", + "preview_not_available": "Preview isn't available for this note type." + }, + "sort_child_notes": { + "sort_children_by": "Sort children by ...", + "sorting_criteria": "Sorting criteria", + "title": "title", + "date_created": "date created", + "date_modified": "date modified", + "sorting_direction": "Sorting direction", + "ascending": "ascending", + "descending": "descending", + "folders": "Folders", + "sort_folders_at_top": "sort folders at the top", + "natural_sort": "Natural Sort", + "sort_with_respect_to_different_character_sorting": "sort with respect to different character sorting and collation rules in different languages or regions.", + "natural_sort_language": "Natural sort language", + "the_language_code_for_natural_sort": "The language code for natural sort, e.g. \"zh-CN\" for Chinese.", + "sort": "Sort" + }, + "upload_attachments": { + "upload_attachments_to_note": "Upload attachments to note", + "choose_files": "Choose files", + "files_will_be_uploaded": "Files will be uploaded as attachments into", + "options": "Options", + "shrink_images": "Shrink images", + "upload": "Upload", + "tooltip": "If you check this option, Trilium will attempt to shrink the uploaded images by scaling and optimization which may affect the perceived image quality. If unchecked, images will be uploaded without changes." + }, + "attribute_detail": { + "attr_detail_title": "Attribute Detail Title", + "close_button_title": "Cancel changes and close", + "attr_is_owned_by": "Attribute is owned by", + "attr_name_title": "Attribute name can be composed of alphanumeric characters, colon and underscore only", + "name": "Name", + "value": "Value", + "target_note_title": "Relation is a named connection between source note and target note.", + "target_note": "Target note", + "promoted_title": "Promoted attribute is displayed prominently on the note.", + "promoted": "Promoted", + "promoted_alias_title": "The name to be displayed in the promoted attributes UI.", + "promoted_alias": "Alias", + "multiplicity_title": "Multiplicity defines how many attributes of the same name can be created - at max 1 or more than 1.", + "multiplicity": "Multiplicity", + "single_value": "Single value", + "multi_value": "Multi value", + "label_type_title": "Type of the label will help Trilium to choose suitable interface to enter the label value.", + "label_type": "Type", + "text": "Text", + "number": "Number", + "boolean": "Boolean", + "date": "Date", + "date_time": "Date & Time", + "url": "URL", + "precision_title": "What number of digits after floating point should be available in the value setting interface.", + "precision": "Precision", + "digits": "digits", + "inverse_relation_title": "Optional setting to define to which relation is this one opposite. Example: Father - Son are inverse relations to each other.", + "inverse_relation": "Inverse relation", + "inheritable_title": "Inheritable attribute will be inherited to all descendants under this tree.", + "inheritable": "Inheritable", + "save_and_close": "Save & close Ctrl+Enter", + "delete": "Delete", + "related_notes_title": "Other notes with this label", + "more_notes": "More notes", + "label": "Label detail", + "label_definition": "Label definition detail", + "relation": "Relation detail", + "relation_definition": "Relation definition detail", + "disable_versioning": "disables auto-versioning. Useful for e.g. large, but unimportant notes - e.g. large JS libraries used for scripting", + "calendar_root": "marks note which should be used as root for day notes. Only one should be marked as such.", + "archived": "notes with this label won't be visible by default in search results (also in Jump To, Add Link dialogs etc).", + "exclude_from_export": "notes (with their sub-tree) won't be included in any note export", + "run": "defines on which events script should run. Possible values are:\n
    \n
  • frontendStartup - when Trilium frontend starts up (or is refreshed), but not on mobile.
  • \n
  • mobileStartup - when Trilium frontend starts up (or is refreshed), on mobile.
  • \n
  • backendStartup - when Trilium backend starts up
  • \n
  • hourly - run once an hour. You can use additional label runAtHour to specify at which hour.
  • \n
  • daily - run once a day
  • \n
", + "run_on_instance": "Define which trilium instance should run this on. Default to all instances.", + "run_at_hour": "On which hour should this run. Should be used together with #run=hourly. Can be defined multiple times for more runs during the day.", + "disable_inclusion": "scripts with this label won't be included into parent script execution.", + "sorted": "keeps child notes sorted by title alphabetically", + "sort_direction": "ASC (the default) or DESC", + "sort_folders_first": "Folders (notes with children) should be sorted on top", + "top": "keep given note on top in its parent (applies only on sorted parents)", + "hide_promoted_attributes": "Hide promoted attributes on this note", + "read_only": "editor is in read only mode. Works only for text and code notes.", + "auto_read_only_disabled": "text/code notes can be set automatically into read mode when they are too large. You can disable this behavior on per-note basis by adding this label to the note", + "app_css": "marks CSS notes which are loaded into the Trilium application and can thus be used to modify Trilium's looks.", + "app_theme": "marks CSS notes which are full Trilium themes and are thus available in Trilium options.", + "css_class": "value of this label is then added as CSS class to the node representing given note in the tree. This can be useful for advanced theming. Can be used in template notes.", + "icon_class": "value of this label is added as a CSS class to the icon on the tree which can help visually distinguish the notes in the tree. Example might be bx bx-home - icons are taken from boxicons. Can be used in template notes.", + "page_size": "number of items per page in note listing", + "custom_request_handler": "see Custom request handler", + "custom_resource_provider": "see Custom request handler", + "widget": "marks this note as a custom widget which will be added to the Trilium component tree", + "workspace": "marks this note as a workspace which allows easy hoisting", + "workspace_icon_class": "defines box icon CSS class which will be used in tab when hoisted to this note", + "workspace_tab_background_color": "CSS color used in the note tab when hoisted to this note", + "workspace_calendar_root": "Defines per-workspace calendar root", + "workspace_template": "This note will appear in the selection of available template when creating new note, but only when hoisted into a workspace containing this template", + "search_home": "new search notes will be created as children of this note", + "workspace_search_home": "new search notes will be created as children of this note when hoisted to some ancestor of this workspace note", + "inbox": "default inbox location for new notes - when you create a note using \"new note\" button in the sidebar, notes will be created as child notes in the note marked as with #inbox label.", + "workspace_inbox": "default inbox location for new notes when hoisted to some ancestor of this workspace note", + "sql_console_home": "default location of SQL console notes", + "bookmark_folder": "note with this label will appear in bookmarks as folder (allowing access to its children)", + "share_hidden_from_tree": "this note is hidden from left navigation tree, but still accessible with its URL", + "share_external_link": "note will act as a link to an external website in the share tree", + "share_alias": "define an alias using which the note will be available under https://your_trilium_host/share/[your_alias]", + "share_omit_default_css": "default share page CSS will be omitted. Use when you make extensive styling changes.", + "share_root": "marks note which is served on /share root.", + "share_description": "define text to be added to the HTML meta tag for description", + "share_raw": "note will be served in its raw format, without HTML wrapper", + "share_disallow_robot_indexing": "will forbid robot indexing of this note via X-Robots-Tag: noindex header", + "share_credentials": "require credentials to access this shared note. Value is expected to be in format 'username:password'. Don't forget to make this inheritable to apply to child-notes/images.", + "share_index": "note with this this label will list all roots of shared notes", + "display_relations": "comma delimited names of relations which should be displayed. All other ones will be hidden.", + "hide_relations": "comma delimited names of relations which should be hidden. All other ones will be displayed.", + "title_template": "default title of notes created as children of this note. The value is evaluated as JavaScript string \n and thus can be enriched with dynamic content via the injected now and parentNote variables. Examples:\n \n
    \n
  • ${parentNote.getLabelValue('authorName')}'s literary works
  • \n
  • Log for ${now.format('YYYY-MM-DD HH:mm:ss')}
  • \n
\n \n See wiki with details, API docs for parentNote and now for details.", + "template": "This note will appear in the selection of available template when creating new note", + "toc": "#toc or #toc=show will force the Table of Contents to be shown, #toc=hide will force hiding it. If the label doesn't exist, the global setting is observed", + "color": "defines color of the note in note tree, links etc. Use any valid CSS color value like 'red' or #a13d5f", + "keyboard_shortcut": "Defines a keyboard shortcut which will immediately jump to this note. Example: 'ctrl+alt+e'. Requires frontend reload for the change to take effect.", + "keep_current_hoisting": "Opening this link won't change hoisting even if the note is not displayable in the current hoisted subtree.", + "execute_button": "Title of the button which will execute the current code note", + "execute_description": "Longer description of the current code note displayed together with the execute button", + "exclude_from_note_map": "Notes with this label will be hidden from the Note Map", + "new_notes_on_top": "New notes will be created at the top of the parent note, not on the bottom.", + "hide_highlight_widget": "Hide Hightlight List widget", + "run_on_note_creation": "executes when note is created on backend. Use this relation if you want to run the script for all notes created under a specific subtree. In that case, create it on the subtree root note and make it inheritable. A new note created within the subtree (any depth) will trigger the script.", + "run_on_child_note_creation": "executes when new note is created under the note where this relation is defined", + "run_on_note_title_change": "executes when note title is changed (includes note creation as well)", + "run_on_note_content_change": "executes when note content is changed (includes note creation as well).", + "run_on_note_change": "executes when note is changed (includes note creation as well). Does not include content changes", + "run_on_note_deletion": "executes when note is being deleted", + "run_on_branch_creation": "executes when a branch is created. Branch is a link between parent note and child note and is created e.g. when cloning or moving note.", + "run_on_branch_change": "executes when a branch is updated.", + "run_on_branch_deletion": "executes when a branch is deleted. Branch is a link between parent note and child note and is deleted e.g. when moving note (old branch/link is deleted).", + "run_on_attribute_creation": "executes when new attribute is created for the note which defines this relation", + "run_on_attribute_change": " executes when the attribute is changed of a note which defines this relation. This is triggered also when the attribute is deleted", + "relation_template": "note's attributes will be inherited even without a parent-child relationship, note's content and subtree will be added to instance notes if empty. See documentation for details.", + "inherit": "note's attributes will be inherited even without a parent-child relationship. See template relation for a similar concept. See attribute inheritance in the documentation.", + "render_note": "notes of type \"render HTML note\" will be rendered using a code note (HTML or script) and it is necessary to point using this relation to which note should be rendered", + "widget_relation": "target of this relation will be executed and rendered as a widget in the sidebar", + "share_css": "CSS note which will be injected into the share page. CSS note must be in the shared sub-tree as well. Consider using 'share_hidden_from_tree' and 'share_omit_default_css' as well.", + "share_js": "JavaScript note which will be injected into the share page. JS note must be in the shared sub-tree as well. Consider using 'share_hidden_from_tree'.", + "share_template": "Embedded JavaScript note that will be used as the template for displaying the shared note. Falls back to the default template. Consider using 'share_hidden_from_tree'.", + "share_favicon": "Favicon note to be set in the shared page. Typically you want to set it to share root and make it inheritable. Favicon note must be in the shared sub-tree as well. Consider using 'share_hidden_from_tree'.", + "is_owned_by_note": "is owned by note", + "other_notes_with_name": "Other notes with {{attributeType}} name \"{{attributeName}}\"", + "and_more": "... and {{count}} more." + }, + "attribute_editor": { + "help_text_body1": "To add label, just type e.g. #rock or if you want to add also value then e.g. #year = 2020", + "help_text_body2": "For relation, type ~author = @ which should bring up an autocomplete where you can look up the desired note.", + "help_text_body3": "Alternatively you can add label and relation using the + button on the right side.", + "save_attributes": "Save attributes ", + "add_a_new_attribute": "Add a new attribute", + "add_new_label": "Add new label ", + "add_new_relation": "Add new relation ", + "add_new_label_definition": "Add new label definition", + "add_new_relation_definition": "Add new relation definition" + }, + "abstract_bulk_action": { + "remove_this_search_action": "Remove this search action" + }, + "execute_script": { + "execute_script": "Execute script", + "help_text": "You can execute simple scripts on the matched notes.", + "example_1": "For example to append a string to a note's title, use this small script:", + "example_2": "More complex example would be deleting all matched note's attributes:" + }, + "add_label": { + "add_label": "Add label", + "label_name_placeholder": "label name", + "label_name_title": "Alphanumeric characters, underscore and colon are allowed characters.", + "to_value": "to value", + "new_value_placeholder": "new value", + "help_text": "On all matched notes:", + "help_text_item1": "create given label if note doesn't have one yet", + "help_text_item2": "or change value of the existing label", + "help_text_note": "You can also call this method without value, in such case label will be assigned to the note without value." + }, + "delete_label": { + "delete_label": "Delete label", + "label_name_placeholder": "label name", + "label_name_title": "Alphanumeric characters, underscore and colon are allowed characters." + }, + "rename_label": { + "rename_label": "Rename label", + "rename_label_from": "Rename label from", + "old_name_placeholder": "old name", + "to": "To", + "new_name_placeholder": "new name", + "name_title": "Alphanumeric characters, underscore and colon are allowed characters." + }, + "update_label_value": { + "update_label_value": "Update label value", + "label_name_placeholder": "label name", + "label_name_title": "Alphanumeric characters, underscore and colon are allowed characters.", + "to_value": "to value", + "new_value_placeholder": "new value", + "help_text": "On all matched notes, change value of the existing label.", + "help_text_note": "You can also call this method without value, in such case label will be assigned to the note without value." + }, + "delete_note": { + "delete_note": "Delete note", + "delete_matched_notes": "Delete matched notes", + "delete_matched_notes_description": "This will delete matched notes.", + "undelete_notes_instruction": "After the deletion, it's possible to undelete them from Recent Changes dialog.", + "erase_notes_instruction": "To erase notes permanently, you can go after the deletion to the Option -> Other and click the \"Erase deleted notes now\" button." + }, + "delete_revisions": { + "delete_note_revisions": "Delete note revisions", + "all_past_note_revisions": "All past note revisions of matched notes will be deleted. Note itself will be fully preserved. In other terms, note's history will be removed." + }, + "move_note": { + "move_note": "Move note", + "to": "to", + "target_parent_note": "target parent note", + "on_all_matched_notes": "On all matched notes", + "move_note_new_parent": "move note to the new parent if note has only one parent (i.e. the old placement is removed and new placement into the new parent is created)", + "clone_note_new_parent": "clone note to the new parent if note has multiple clones/placements (it's not clear which placement should be removed)", + "nothing_will_happen": "nothing will happen if note cannot be moved to the target note (i.e. this would create a tree cycle)" + }, + "rename_note": { + "rename_note": "Rename note", + "rename_note_title_to": "Rename note title to", + "new_note_title": "new note title", + "click_help_icon": "Click help icon on the right to see all the options", + "evaluated_as_js_string": "The given value is evaluated as JavaScript string and thus can be enriched with dynamic content via the injected note variable (note being renamed). Examples:", + "example_note": "Note - all matched notes are renamed to 'Note'", + "example_new_title": "NEW: ${note.title} - matched notes titles are prefixed with 'NEW: '", + "example_date_prefix": "${note.dateCreatedObj.format('MM-DD:')}: ${note.title} - matched notes are prefixed with note's creation month-date", + "api_docs": "See API docs for note and its dateCreatedObj / utcDateCreatedObj properties for details." + }, + "add_relation": { + "add_relation": "Add relation", + "relation_name": "relation name", + "allowed_characters": "Alphanumeric characters, underscore and colon are allowed characters.", + "to": "to", + "target_note": "target note", + "create_relation_on_all_matched_notes": "On all matched notes create given relation." + }, + "delete_relation": { + "delete_relation": "Delete relation", + "relation_name": "relation name", + "allowed_characters": "Alphanumeric characters, underscore and colon are allowed characters." + }, + "rename_relation": { + "rename_relation": "Rename relation", + "rename_relation_from": "Rename relation from", + "old_name": "old name", + "to": "To", + "new_name": "new name", + "allowed_characters": "Alphanumeric characters, underscore and colon are allowed characters." + }, + "update_relation_target": { + "update_relation": "Update relation", + "relation_name": "relation name", + "allowed_characters": "Alphanumeric characters, underscore and colon are allowed characters.", + "to": "to", + "target_note": "target note", + "on_all_matched_notes": "On all matched notes", + "create_given_relation": "create given relation if note doesn't have one yet", + "change_target_note": "or change target note of the existing relation", + "update_relation_target": "Update relation target" + }, + "attachments_actions": { + "open_externally": "Open externally", + "open_externally_title": "File will be open in an external application and watched for changes. You'll then be able to upload the modified version back to Trilium.", + "open_custom": "Open custom", + "open_custom_title": "File will be open in an external application and watched for changes. You'll then be able to upload the modified version back to Trilium.", + "download": "Download", + "rename_attachment": "Rename attachment", + "upload_new_revision": "Upload new revision", + "copy_link_to_clipboard": "Copy link to clipboard", + "convert_attachment_into_note": "Convert attachment into note", + "delete_attachment": "Delete attachment", + "upload_success": "New attachment revision has been uploaded.", + "upload_failed": "Upload of a new attachment revision failed.", + "open_externally_detail_page": "Opening attachment externally is available only from the detail page, please first click on the attachment detail first and repeat the action.", + "open_custom_client_only": "Custom opening of attachments can only be done from the desktop client.", + "delete_confirm": "Are you sure you want to delete attachment '{{title}}'?", + "delete_success": "Attachment '{{title}}' has been deleted.", + "convert_confirm": "Are you sure you want to convert attachment '{{title}}' into a separate note?", + "convert_success": "Attachment '{{title}}' has been converted to note.", + "enter_new_name": "Please enter new attachment's name" + }, + "calendar": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun", + "cannot_find_day_note": "Cannot find day note", + "january": "January", + "febuary": "Febuary", + "march": "March", + "april": "April", + "may": "May", + "june": "June", + "july": "July", + "august": "August", + "september": "September", + "october": "October", + "november": "November", + "december": "December" + }, + "close_pane_button": { + "close_this_pane": "Close this pane" + }, + "create_pane_button": { + "create_new_split": "Create new split" + }, + "edit_button": { + "edit_this_note": "Edit this note" + }, + "global_menu": { + "menu": "Menu", + "options": "Options", + "open_new_window": "Open New Window", + "switch_to_mobile_version": "Switch to Mobile Version", + "switch_to_desktop_version": "Switch to Desktop Version", + "zoom": "Zoom", + "toggle_fullscreen": "Toggle Fullscreen", + "zoom_out": "Zoom Out", + "reset_zoom_level": "Reset Zoom Level", + "zoom_in": "Zoom In", + "configure_launchbar": "Configure Launchbar", + "show_shared_notes_subtree": "Show Shared Notes Subtree", + "advanced": "Advanced", + "open_dev_tools": "Open Dev Tools", + "open_sql_console": "Open SQL Console", + "open_sql_console_history": "Open SQL Console History", + "open_search_history": "Open Search History", + "show_backend_log": "Show Backend Log", + "reload_hint": "Reload can help with some visual glitches without restarting the whole app.", + "reload_frontend": "Reload Frontend", + "show_hidden_subtree": "Show Hidden Subtree", + "show_help": "Show Help", + "about": "About TriliumNext Notes", + "logout": "Logout" + }, + "left_pane_toggle": { + "hide_panel": "Hide panel", + "open_panel": "Open panel" + }, + "move_pane_button": { + "move_left": "Move left", + "move_right": "Move right" + }, + "note_actions": { + "convert_into_attachment": "Convert into attachment", + "re_render_note": "Re-render note", + "search_in_note": "Search in note", + "note_source": "Note source", + "note_attachments": "Note attachments", + "open_note_externally": "Open note externally", + "open_note_externally_title": "File will be open in an external application and watched for changes. You'll then be able to upload the modified version back to Trilium.", + "open_note_custom": "Open note custom", + "import_files": "Import files", + "export_note": "Export note", + "delete_note": "Delete note", + "print_note": "Print note", + "save_revision": "Save revision" + }, + "onclick_button": { + "no_click_handler": "Button widget '{{componentId}}' has no defined click handler" + }, + "protected_session_status": { + "active": "Protected session is active. Click to leave protected session.", + "inactive": "Click to enter protected session" + }, + "revisions_button": { + "note_revisions": "Note Revisions" + }, + "update_available": { + "update_available": "Update available" + }, + "note_launcher": { + "this_launcher_doesnt_define_target_note": "This launcher doesn't define target note." + }, + "code_buttons": { + "execute_button_title": "Execute script", + "trilium_api_docs_button_title": "Open Trilium API docs", + "save_to_note_button_title": "Save to note", + "opening_api_docs_message": "Opening API docs...", + "sql_console_saved_message": "SQL Console note has been saved into {{note_path}}" + }, + "copy_image_reference_button": { + "button_title": "Copy image reference to the clipboard, can be pasted into a text note." + }, + "hide_floating_buttons_button": { + "button_title": "Hide buttons" + }, + "mermaid_export_button": { + "button_title": "Export Mermaid diagram as SVG" + }, + "relation_map_buttons": { + "create_child_note_title": "Create new child note and add it into this relation map", + "reset_pan_zoom_title": "Reset pan & zoom to initial coordinates and magnification", + "zoom_in_title": "Zoom In", + "zoom_out_title": "Zoom Out" + }, + "zpetne_odkazy": { + "backlink": "{{count}} Backlink", + "backlinks": "{{count}} Backlinks", + "relation": "relation" + }, + "mobile_detail_menu": { + "insert_child_note": "Insert child note", + "delete_this_note": "Delete this note", + "error_cannot_get_branch_id": "Cannot get branchId for notePath '{{notePath}}'", + "error_unrecognized_command": "Unrecognized command {{command}}" + }, + "basic_properties": { + "note_type": "Note type", + "editable": "Editable", + "basic_properties": "Basic Properties" + }, + "book_properties": { + "view_type": "View type", + "grid": "Grid", + "list": "List", + "collapse_all_notes": "Collapse all notes", + "expand_all_children": "Expand all children", + "collapse": "Collapse", + "expand": "Expand", + "book_properties": "Book Properties", + "invalid_view_type": "Invalid view type '{{type}}'" + }, + "edited_notes": { + "no_edited_notes_found": "No edited notes on this day yet ...", + "title": "Edited Notes", + "deleted": "(deleted)" + }, + "file_properties": { + "note_id": "Note ID", + "original_file_name": "Original file name", + "file_type": "File type", + "file_size": "File size", + "download": "Download", + "open": "Open", + "upload_new_revision": "Upload new revision", + "upload_success": "New file revision has been uploaded.", + "upload_failed": "Upload of a new file revision failed.", + "title": "File" + }, + "image_properties": { + "original_file_name": "Original file name", + "file_type": "File type", + "file_size": "File size", + "download": "Download", + "open": "Open", + "copy_reference_to_clipboard": "Copy reference to clipboard", + "upload_new_revision": "Upload new revision", + "upload_success": "New image revision has been uploaded.", + "upload_failed": "Upload of a new image revision failed: {{message}}", + "title": "Image" + }, + "inherited_attribute_list": { + "title": "Inherited Attributes", + "no_inherited_attributes": "No inherited attributes." + }, + "note_info_widget": { + "note_id": "Note ID", + "created": "Created", + "modified": "Modified", + "type": "Type", + "note_size": "Note size", + "note_size_info": "Note size provides rough estimate of storage requirements for this note. It takes into account note's content and content of its note revisions.", + "calculate": "calculate", + "subtree_size": "(subtree size: {{size}} in {{count}} notes)", + "title": "Note Info" + }, + "note_map": { + "open_full": "Expand to full", + "collapse": "Collapse to normal size", + "title": "Note Map" + }, + "note_paths": { + "title": "Note Paths", + "clone_button": "Clone note to new location...", + "intro_placed": "This note is placed into the following paths:", + "intro_not_placed": "This note is not yet placed into the note tree.", + "outside_hoisted": "This path is outside of hoisted note and you would have to unhoist.", + "archived": "Archived", + "search": "Search" + }, + "note_properties": { + "this_note_was_originally_taken_from": "This note was originally taken from:", + "info": "Info" + }, + "owned_attribute_list": { + "owned_attributes": "Owned Attributes" + }, + "promoted_attributes": { + "promoted_attributes": "Promoted Attributes", + "url_placeholder": "http://website...", + "open_external_link": "Open external link", + "unknown_label_type": "Unknown labelType '{{type}}'", + "unknown_attribute_type": "Unknown attribute type '{{type}}'", + "add_new_attribute": "Add new attribute", + "remove_this_attribute": "Remove this attribute" + }, + "script_executor": { + "query": "Query", + "script": "Script", + "execute_query": "Execute Query", + "execute_script": "Execute Script" + }, + "search_definition": { + "add_search_option": "Add search option:", + "search_string": "search string", + "search_script": "search script", + "ancestor": "ancestor", + "fast_search": "fast search", + "fast_search_description": "Fast search option disables full text search of note contents which might speed up searching in large databases.", + "include_archived": "include archived", + "include_archived_notes_description": "Archived notes are by default excluded from search results, with this option they will be included.", + "order_by": "order by", + "limit": "limit", + "limit_description": "Limit number of results", + "debug": "debug", + "debug_description": "Debug will print extra debugging information into the console to aid in debugging complex queries", + "action": "action", + "search": "Search", + "enter": "enter", + "search_execute": "Search & Execute actions", + "save_to_note": "Save to note", + "search_parameters": "Search Parameters", + "unknown_search_option": "Unknown search option {{searchOptionName}}", + "search_note_saved": "Search note has been saved into {{- notePathTitle}}", + "actions_executed": "Actions have been executed." + }, + "similar_notes": { + "title": "Similar Notes", + "no_similar_notes_found": "No similar notes found." + }, + "abstract_search_option": { + "remove_this_search_option": "Remove this search option", + "failed_rendering": "Failed rendering search option: {{dto}} with error: {{error}} {{stack}}" + }, + "ancestor": { + "label": "Ancestor", + "placeholder": "search for note by its name", + "depth_label": "depth", + "depth_doesnt_matter": "doesn't matter", + "depth_eq": "is exactly {{count}}", + "direct_children": "direct children", + "depth_gt": "is greater than {{count}}", + "depth_lt": "is less than {{count}}" + }, + "debug": { + "debug": "Debug", + "debug_info": "Debug will print extra debugging information into the console to aid in debugging complex queries.", + "access_info": "To access the debug information, execute query and click on \"Show backend log\" in top left corner." + }, + "fast_search": { + "fast_search": "Fast search", + "description": "Fast search option disables full text search of note contents which might speed up searching in large databases." + }, + "include_archived_notes": { + "include_archived_notes": "Include archived notes" + }, + "limit": { + "limit": "Limit", + "take_first_x_results": "Take only first X specified results." + }, + "order_by": { + "order_by": "Order by", + "relevancy": "Relevancy (default)", + "title": "Title", + "date_created": "Date created", + "date_modified": "Date of last modification", + "content_size": "Note content size", + "content_and_attachments_size": "Note content size including attachments", + "content_and_attachments_and_revisions_size": "Note content size including attachments and revisions", + "revision_count": "Number of revisions", + "children_count": "Number of children notes", + "parent_count": "Number of clones", + "owned_label_count": "Number of labels", + "owned_relation_count": "Number of relations", + "target_relation_count": "Number of relations targeting the note", + "random": "Random order", + "asc": "Ascending (default)", + "desc": "Descending" + }, + "search_script": { + "title": "Search script:", + "placeholder": "search for note by its name", + "description1": "Search script allows to define search results by running a script. This provides maximal flexibility when standard search doesn't suffice.", + "description2": "Search script must be of type \"code\" and subtype \"JavaScript backend\". The script needs to return an array of noteIds or notes.", + "example_title": "See this example:", + "example_code": "// 1. prefiltering using standard search\nconst candidateNotes = api.searchForNotes(\"#journal\"); \n\n// 2. applying custom search criteria\nconst matchedNotes = candidateNotes\n .filter(note => note.title.match(/[0-9]{1,2}\\. ?[0-9]{1,2}\\. ?[0-9]{4}/));\n\nreturn matchedNotes;", + "note": "Note that search script and search string can't be combined with each other." + }, + "search_string": { + "title_column": "Search string:", + "placeholder": "fulltext keywords, #tag = value ...", + "search_syntax": "Search syntax", + "also_see": "also see", + "complete_help": "complete help on search syntax", + "full_text_search": "Just enter any text for full text search", + "label_abc": "returns notes with label abc", + "label_year": "matches notes with label year having value 2019", + "label_rock_pop": "matches notes which have both rock and pop labels", + "label_rock_or_pop": "only one of the labels must be present", + "label_year_comparison": "numerical comparison (also >, >=, <).", + "label_date_created": "notes created in the last month", + "error": "Search error: {{error}}" + }, + "attachment_detail": { + "open_help_page": "Open help page on attachments", + "owning_note": "Owning note: ", + "you_can_also_open": ", you can also open the ", + "list_of_all_attachments": "List of all attachments", + "attachment_deleted": "This attachment has been deleted." + }, + "attachment_list": { + "open_help_page": "Open help page on attachments", + "owning_note": "Owning note: ", + "upload_attachments": "Upload attachments", + "no_attachments": "This note has no attachments." + }, + "book": { + "no_children_help": "This note of type Book doesn't have any child notes so there's nothing to display. See wiki for details." + }, + "editable_code": { + "placeholder": "Type the content of your code note here..." + }, + "editable_text": { + "placeholder": "Type the content of your note here ..." + }, + "empty": { + "open_note_instruction": "Open a note by typing the note's title into the input below or choose a note in the tree.", + "search_placeholder": "search for a note by its name", + "enter_workspace": "Enter workspace {{title}}" + }, + "file": { + "file_preview_not_available": "File preview is not available for this file format." + }, + "protected_session": { + "enter_password_instruction": "Showing protected note requires entering your password:", + "start_session_button": "Start protected session" + }, + "relation_map": { + "open_in_new_tab": "Open in new tab", + "remove_note": "Remove note", + "edit_title": "Edit title", + "rename_note": "Rename note", + "enter_new_title": "Enter new note title:", + "remove_relation": "Remove relation", + "confirm_remove_relation": "Are you sure you want to remove the relation?", + "specify_new_relation_name": "Specify new relation name (allowed characters: alphanumeric, colon and underscore):", + "connection_exists": "Connection '{{name}}' between these notes already exists.", + "start_dragging_relations": "Start dragging relations from here and drop them on another note.", + "note_not_found": "Note {{noteId}} not found!", + "cannot_match_transform": "Cannot match transform: {{transform}}", + "note_already_in_diagram": "Note \"{{title}}\" is already in the diagram.", + "enter_title_of_new_note": "Enter title of new note", + "default_new_note_title": "new note", + "click_on_canvas_to_place_new_note": "Click on canvas to place new note" + }, + "render": { + "note_detail_render_help_1": "This help note is shown because this note of type Render HTML doesn't have required relation to function properly.", + "note_detail_render_help_2": "Render HTML note type is used for scripting. In short, you have a HTML code note (optionally with some JavaScript) and this note will render it. To make it work, you need to define a relation called \"renderNote\" pointing to the HTML note to render." + }, + "web_view": { + "web_view": "Web View", + "embed_websites": "Note of type Web View allows you to embed websites into Trilium.", + "create_label": "To start, please create a label with a URL address you want to embed, e.g. #webViewSrc=\"https://www.google.com\"", + "disclaimer": "Disclaimer on the experimental status", + "experimental_note": "Web View is an experimental note type, and it might be removed or substantially changed in the future. Web View works also only in the desktop build." + }, + "backend_log": { + "refresh": "Refresh" + }, + "consistency_checks": { + "title": "Consistency Checks", + "find_and_fix_button": "Find and fix consistency issues", + "finding_and_fixing_message": "Finding and fixing consistency issues...", + "issues_fixed_message": "Consistency issues should be fixed." + }, + "database_anonymization": { + "title": "Database Anonymization", + "full_anonymization": "Full Anonymization", + "full_anonymization_description": "This action will create a new copy of the database and anonymize it (remove all note content and leave only structure and some non-sensitive metadata) for sharing online for debugging purposes without fear of leaking your personal data.", + "save_fully_anonymized_database": "Save fully anonymized database", + "light_anonymization": "Light Anonymization", + "light_anonymization_description": "This action will create a new copy of the database and do a light anonymization on it — specifically only content of all notes will be removed, but titles and attributes will remain. Additionally, custom JS frontend/backend script notes and custom widgets will remain. This provides more context to debug the issues.", + "choose_anonymization": "You can decide yourself if you want to provide a fully or lightly anonymized database. Even fully anonymized DB is very useful, however in some cases lightly anonymized database can speed up the process of bug identification and fixing.", + "save_lightly_anonymized_database": "Save lightly anonymized database", + "existing_anonymized_databases": "Existing anonymized databases", + "creating_fully_anonymized_database": "Creating fully anonymized database...", + "creating_lightly_anonymized_database": "Creating lightly anonymized database...", + "error_creating_anonymized_database": "Could not create anonymized database, check backend logs for details", + "successfully_created_fully_anonymized_database": "Created fully anonymized database in {{anonymizedFilePath}}", + "successfully_created_lightly_anonymized_database": "Created lightly anonymized database in {{anonymizedFilePath}}", + "no_anonymized_database_yet": "no anonymized database yet" + }, + "database_integrity_check": { + "title": "Database Integrity Check", + "description": "This will check that the database is not corrupted on the SQLite level. It might take some time, depending on the DB size.", + "check_button": "Check database integrity", + "checking_integrity": "Checking database integrity...", + "integrity_check_succeeded": "Integrity check succeeded - no problems found.", + "integrity_check_failed": "Integrity check failed: {{results}}" + }, + "sync": { + "title": "Sync", + "force_full_sync_button": "Force full sync", + "fill_entity_changes_button": "Fill entity changes records", + "full_sync_triggered": "Full sync triggered", + "filling_entity_changes": "Filling entity changes rows...", + "sync_rows_filled_successfully": "Sync rows filled successfully" + }, + "vacuum_database": { + "title": "Vacuum Database", + "description": "This will rebuild the database which will typically result in a smaller database file. No data will be actually changed.", + "button_text": "Vacuum database", + "vacuuming_database": "Vacuuming database...", + "database_vacuumed": "Database has been vacuumed" + }, + "fonts": { + "theme_defined": "Theme defined", + "fonts": "Fonts", + "main_font": "Main Font", + "font_family": "Font family", + "size": "Size", + "note_tree_font": "Note Tree Font", + "note_detail_font": "Note Detail Font", + "monospace_font": "Monospace (code) Font", + "note_tree_and_detail_font_sizing": "Note that tree and detail font sizing is relative to the main font size setting.", + "not_all_fonts_available": "Not all listed fonts may be available on your system.", + "apply_font_changes": "To apply font changes, click on", + "reload_frontend": "reload frontend" + }, + "max_content_width": { + "title": "Content Width", + "default_description": "Trilium by default limits max content width to improve readability for maximized screens on wide screens.", + "max_width_label": "Max content width in pixels", + "apply_changes_description": "To apply content width changes, click on", + "reload_button": "reload frontend", + "reload_description": "changes from appearance options" + }, + "native_title_bar": { + "title": "Native Title Bar (requires app restart)", + "enabled": "enabled", + "disabled": "disabled" + }, + "ribbon": { + "widgets": "Ribbon widgets", + "promoted_attributes_message": "Promoted Attributes ribbon tab will automatically open if promoted attributes are present on the note", + "edited_notes_message": "Edited Notes ribbon tab will automatically open on day notes" + }, + "theme": { + "title": "Theme", + "theme_label": "Theme", + "override_theme_fonts_label": "Override theme fonts", + "light_theme": "Light", + "dark_theme": "Dark" + }, + "zoom_factor": { + "title": "Zoom Factor (desktop build only)", + "description": "Zooming can be controlled with CTRL+- and CTRL+= shortcuts as well." + }, + "code_auto_read_only_size": { + "title": "Automatic Read-Only Size", + "description": "Automatic read-only note size is the size after which notes will be displayed in a read-only mode (for performance reasons).", + "label": "Automatic read-only size (code notes)" + }, + "code_mime_types": { + "title": "Available MIME types in the dropdown" + }, + "vim_key_bindings": { + "use_vim_keybindings_in_code_notes": "Use vim keybindings in code notes (no ex mode)", + "enable_vim_keybindings": "Enable Vim Keybindings" + }, + "wrap_lines": { + "wrap_lines_in_code_notes": "Wrap lines in code notes", + "enable_line_wrap": "Enable Line Wrap (change might need a frontend reload to take effect)" + }, + "images": { + "images_section_title": "Images", + "download_images_automatically": "Download images automatically for offline use.", + "download_images_description": "Pasted HTML can contain references to online images, Trilium will find those references and download the images so that they are available offline.", + "enable_image_compression": "Enable image compression", + "max_image_dimensions": "Max width / height of an image in pixels (image will be resized if it exceeds this setting).", + "jpeg_quality_description": "JPEG quality (10 - worst quality, 100 best quality, 50 - 85 is recommended)" + }, + "attachment_erasure_timeout": { + "attachment_erasure_timeout": "Attachment Erasure Timeout", + "attachment_auto_deletion_description": "Attachments get automatically deleted (and erased) if they are not referenced by their note anymore after a defined time out.", + "erase_attachments_after_x_seconds": "Erase attachments after X seconds of not being used in its note", + "manual_erasing_description": "You can also trigger erasing manually (without considering the timeout defined above):", + "erase_unused_attachments_now": "Erase unused attachment notes now", + "unused_attachments_erased": "Unused attachments have been erased." + }, + "network_connections": { + "network_connections_title": "Network Connections", + "check_for_updates": "Check for updates automatically" + }, + "note_erasure_timeout": { + "note_erasure_timeout_title": "Note Erasure Timeout", + "note_erasure_description": "Deleted notes (and attributes, revisions...) are at first only marked as deleted and it is possible to recover them from Recent Notes dialog. After a period of time, deleted notes are \"erased\" which means their content is not recoverable anymore. This setting allows you to configure the length of the period between deleting and erasing the note.", + "erase_notes_after_x_seconds": "Erase notes after X seconds", + "manual_erasing_description": "You can also trigger erasing manually (without considering the timeout defined above):", + "erase_deleted_notes_now": "Erase deleted notes now", + "deleted_notes_erased": "Deleted notes have been erased." + }, + "revisions_snapshot_interval": { + "note_revisions_snapshot_interval_title": "Note Revisions Snapshot Interval", + "note_revisions_snapshot_description": "Note revision snapshot time interval is time in seconds after which a new note revision will be created for the note. See wiki for more info.", + "snapshot_time_interval_label": "Note revision snapshot time interval (in seconds)" + }, + "search_engine": { + "title": "Search Engine", + "custom_search_engine_info": "Custom search engine requires both a name and a URL to be set. If either of these is not set, DuckDuckGo will be used as the default search engine.", + "predefined_templates_label": "Predefined search engine templates", + "bing": "Bing", + "baidu": "Baidu", + "duckduckgo": "DuckDuckGo", + "google": "Google", + "custom_name_label": "Custom search engine name", + "custom_name_placeholder": "Customize search engine name", + "custom_url_label": "Custom search engine URL should include {keyword} as a placeholder for the search term.", + "custom_url_placeholder": "Customize search engine url", + "save_button": "Save" + }, + "tray": { + "title": "Tray", + "enable_tray": "Enable tray (Trilium needs to be restarted for this change to take effect)" + }, + "heading_style": { + "title": "Heading Style", + "plain": "Plain", + "underline": "Underline", + "markdown": "Markdown-style" + }, + "highlights_list": { + "title": "Highlights List", + "description": "You can customize the highlights list displayed in the right panel:", + "bold": "Bold font", + "italic": "Italic font", + "underline": "Underlined font", + "color": "Font with color", + "bg_color": "Font with background color", + "visibility_title": "Highlights List visibility", + "visibility_description": "You can hide the highlights widget per-note by adding a #hideHighlightWidget label.", + "shortcut_info": "You can configure a keyboard shortcut for quickly toggling the right pane (including Highlights) in the Options -> Shortcuts (name 'toggleRightPane')." + }, + "table_of_contents": { + "title": "Table of Contents", + "description": "Table of contents will appear in text notes when the note has more than a defined number of headings. You can customize this number:", + "disable_info": "You can also use this option to effectively disable TOC by setting a very high number.", + "shortcut_info": "You can configure a keyboard shortcut for quickly toggling the right pane (including TOC) in the Options -> Shortcuts (name 'toggleRightPane')." + }, + "text_auto_read_only_size": { + "title": "Automatic Read-Only Size", + "description": "Automatic read-only note size is the size after which notes will be displayed in a read-only mode (for performance reasons).", + "label": "Automatic read-only size (text notes)" + }, + "i18n": { + "title": "Localization", + "language": "Language" + }, + "backup": { + "automatic_backup": "Automatic backup", + "automatic_backup_description": "Trilium can back up the database automatically:", + "enable_daily_backup": "Enable daily backup", + "enable_weekly_backup": "Enable weekly backup", + "enable_monthly_backup": "Enable monthly backup", + "backup_recommendation": "It's recommended to keep the backup turned on, but this can make application startup slow with large databases and/or slow storage devices.", + "backup_now": "Backup now", + "backup_database_now": "Backup database now", + "existing_backups": "Existing backups", + "database_backed_up_to": "Database has been backed up to", + "no_backup_yet": "no backup yet" + }, + "etapi": { + "title": "ETAPI", + "description": "ETAPI is a REST API used to access Trilium instance programmatically, without UI.", + "see_more": "See more details on", + "wiki": "wiki", + "and": "and", + "openapi_spec": "ETAPI OpenAPI spec", + "create_token": "Create new ETAPI token", + "existing_tokens": "Existing tokens", + "no_tokens_yet": "There are no tokens yet. Click on the button above to create one.", + "token_name": "Token name", + "created": "Created", + "actions": "Actions", + "new_token_title": "New ETAPI token", + "new_token_message": "Please enter new token's name", + "default_token_name": "new token", + "error_empty_name": "Token name can't be empty", + "token_created_title": "ETAPI token created", + "token_created_message": "Copy the created token into clipboard. Trilium stores the token hashed and this is the last time you see it.", + "rename_token": "Rename this token", + "delete_token": "Delete / deactivate this token", + "rename_token_title": "Rename token", + "rename_token_message": "Please enter new token's name", + "delete_token_confirmation": "Are you sure you want to delete ETAPI token \"{{name}}\"?" + }, + "options_widget": { + "options_status": "Options status", + "options_change_saved": "Options change have been saved." + }, + "password": { + "heading": "Password", + "alert_message": "Please take care to remember your new password. Password is used for logging into the web interface and to encrypt protected notes. If you forget your password, then all your protected notes are forever lost.", + "reset_link": "click here to reset it.", + "old_password": "Old password", + "new_password": "New password", + "new_password_confirmation": "New password confirmation", + "change_password": "Change password", + "protected_session_timeout": "Protected Session Timeout", + "protected_session_timeout_description": "Protected session timeout is a time period after which the protected session is wiped from the browser's memory. This is measured from the last interaction with protected notes. See", + "wiki": "wiki", + "for_more_info": "for more info.", + "protected_session_timeout_label": "Protected session timeout (in seconds)", + "reset_confirmation": "By resetting the password you will forever lose access to all your existing protected notes. Do you really want to reset the password?", + "reset_success_message": "Password has been reset. Please set new password", + "change_password_heading": "Change Password", + "set_password_heading": "Set Password", + "set_password": "Set Password", + "password_mismatch": "New passwords are not the same.", + "password_changed_success": "Password has been changed. Trilium will be reloaded after you press OK." + }, + "shortcuts": { + "keyboard_shortcuts": "Keyboard Shortcuts", + "multiple_shortcuts": "Multiple shortcuts for the same action can be separated by comma.", + "electron_documentation": "See Electron documentation for available modifiers and key codes.", + "type_text_to_filter": "Type text to filter shortcuts...", + "action_name": "Action name", + "shortcuts": "Shortcuts", + "default_shortcuts": "Default shortcuts", + "description": "Description", + "reload_app": "Reload app to apply changes", + "set_all_to_default": "Set all shortcuts to the default", + "confirm_reset": "Do you really want to reset all keyboard shortcuts to the default?" + }, + "spellcheck": { + "title": "Spell Check", + "description": "These options apply only for desktop builds, browsers will use their own native spell check. App restart is required after change.", + "enable": "Enable spellcheck", + "language_code_label": "Language code(s)", + "language_code_placeholder": "for example \"en-US\", \"de-AT\"", + "multiple_languages_info": "Multiple languages can be separated by comma, e.g. \"en-US, de-DE, cs\". Changes to the spell check options will take effect after application restart.", + "available_language_codes_label": "Available language codes:" + }, + "sync_2": { + "config_title": "Sync Configuration", + "server_address": "Server instance address", + "timeout": "Sync timeout (milliseconds)", + "proxy_label": "Sync proxy server (optional)", + "note": "Note", + "note_description": "If you leave the proxy setting blank, the system proxy will be used (applies to desktop/electron build only).", + "special_value_description": "Another special value is noproxy which forces ignoring even the system proxy and respects NODE_TLS_REJECT_UNAUTHORIZED.", + "save": "Save", + "help": "Help", + "test_title": "Sync Test", + "test_description": "This will test the connection and handshake to the sync server. If the sync server isn't initialized, this will set it up to sync with the local document.", + "test_button": "Test sync", + "handshake_failed": "Sync server handshake failed, error: {{message}}" + }, + "api_log": { + "close": "Close" + }, + "attachment_detail_2": { + "will_be_deleted_in": "This attachment will be automatically deleted in {{time}}", + "will_be_deleted_soon": "This attachment will be automatically deleted soon", + "deletion_reason": ", because the attachment is not linked in the note's content. To prevent deletion, add the attachment link back into the content or convert the attachment into note.", + "role_and_size": "Role: {{role}}, Size: {{size}}", + "link_copied": "Attachment link copied to clipboard.", + "unrecognized_role": "Unrecognized attachment role '{{role}}'." + }, + "bookmark_switch": { + "bookmark": "Bookmark", + "bookmark_this_note": "Bookmark this note to the left side panel", + "remove_bookmark": "Remove bookmark" + }, + "editability_select": { + "auto": "Auto", + "read_only": "Read-only", + "always_editable": "Always Editable", + "note_is_editable": "Note is editable if it's not too long.", + "note_is_read_only": "Note is read-only, but can be edited with a button click.", + "note_is_always_editable": "Note is always editable, regardless of its length." } - }, - "add_link": { - "add_link": "Add link", - "help_on_links": "Help on links", - "close": "Close", - "note": "Note", - "search_note": "search for note by its name", - "link_title_mirrors": "link title mirrors the note's current title", - "link_title_arbitrary": "link title can be changed arbitrarily", - "link_title": "Link title" - }, - "branch_prefix": { - "edit_branch_prefix": "Edit branch prefix", - "help_on_tree_prefix": "Help on Tree prefix", - "close": "Close", - "prefix": "Prefix: ", - "save": "Save", - "branch_prefix_saved": "Branch prefix has been saved." - }, - "bulk_actions": { - "bulk_actions": "Bulk actions", - "close": "Close", - "affected_notes": "Affected notes", - "include_descendants": "Include descendants of the selected notes", - "available_actions": "Available actions", - "chosen_actions": "Chosen actions", - "execute_bulk_actions": "Execute bulk actions", - "bulk_actions_executed": "Bulk actions have been executed successfully.", - "none_yet": "None yet ... add an action by clicking one of the available ones above." - }, - "clone_to": { - "clone_notes_to": "Clone notes to ...", - "help_on_links": "Help on links", - "notes_to_clone": "Notes to clone", - "target_parent_note": "Target parent note", - "search_for_note_by_its_name": "search for note by its name", - "cloned_note_prefix_title": "Cloned note will be shown in note tree with given prefix", - "prefix_optional": "Prefix (optional)", - "clone_to_selected_note": "Clone to selected note enter", - "no_path_to_clone_to": "No path to clone to.", - "note_cloned": "Note \"{{clonedTitle}}\" has been cloned into \"{{targetTitle}}\"" - }, - "confirm": { - "confirmation": "Confirmation", - "cancel": "Cancel", - "ok": "OK", - "are_you_sure_remove_note": "Are you sure you want to remove the note \"{{title}}\" from relation map? ", - "if_you_dont_check": "If you don't check this, the note will be only removed from the relation map.", - "also_delete_note": "Also delete the note" - }, - "delete_notes": { - "delete_notes_preview": "Delete notes preview", - "delete_all_clones_description": "delete also all clones (can be undone in recent changes)", - "erase_notes_description": "Normal (soft) deletion only marks the notes as deleted and they can be undeleted (in recent changes dialog) within a period of time. Checking this option will erase the notes immediately and it won't be possible to undelete the notes.", - "erase_notes_warning": "erase notes permanently (can't be undone), including all clones. This will force application reload.", - "notes_to_be_deleted": "Following notes will be deleted ()", - "no_note_to_delete": "No note will be deleted (only clones).", - "broken_relations_to_be_deleted": "Following relations will be broken and deleted ()", - "cancel": "Cancel", - "ok": "OK", - "note": "Note", - "to_be_deleted": " (to be deleted) is referenced by relation {{attrName}} originating from " - }, - "export": { - "export_note_title": "Export note", - "close": "Close", - "export_type_subtree": "this note and all of its descendants", - "format_html": "HTML in ZIP archive - this is recommended since this preserves all the formatting.", - "format_markdown": "Markdown - this preserves most of the formatting.", - "format_opml": "OPML - outliner interchange format for text only. Formatting, images and files are not included.", - "opml_version_1": "OPML v1.0 - plain text only", - "opml_version_2": "OMPL v2.0 - allows also HTML", - "export_type_single": "only this note without its descendants", - "export": "Export", - "choose_export_type": "Choose export type first please", - "export_status": "Export status", - "export_in_progress": "Export in progress: {{progressCount}}", - "export_finished_successfully": "Export finished successfully." - }, - "help": { - "fullDocumentation": "Help (full documentation is available online)", - "close": "Close", - "noteNavigation": "Note navigation", - "goUpDown": "go up/down in the list of notes", - "collapseExpand": "collapse/expand node", - "notSet": "not set", - "goBackForwards": "go back / forwards in the history", - "showJumpToNoteDialog": "show \"Jump to\" dialog", - "scrollToActiveNote": "scroll to active note", - "jumpToParentNote": "jump to parent note", - "collapseWholeTree": "collapse whole note tree", - "collapseSubTree": "collapse sub-tree", - "tabShortcuts": "Tab shortcuts", - "newTabNoteLink": "(or middle mouse click) on note link opens note in a new tab", - "onlyInDesktop": "Only in desktop (electron build)", - "openEmptyTab": "open empty tab", - "closeActiveTab": "close active tab", - "activateNextTab": "activate next tab", - "activatePreviousTab": "activate previous tab", - "creatingNotes": "Creating notes", - "createNoteAfter": "create new note after the active note", - "createNoteInto": "create new sub-note into active note", - "editBranchPrefix": "edit prefix of active note clone", - "movingCloningNotes": "Moving / cloning notes", - "moveNoteUpDown": "move note up/down in the note list", - "moveNoteUpHierarchy": "move note up in the hierarchy", - "multiSelectNote": "multi-select note above/below", - "selectAllNotes": "select all notes in the current level", - "selectNote": "select note", - "copyNotes": "copy active note (or current selection) into clipboard (used for cloning)", - "cutNotes": "cut current (or current selection) note into clipboard (used for moving notes)", - "pasteNotes": "paste note(s) as sub-note into active note (which is either move or clone depending on whether it was copied or cut into clipboard)", - "deleteNotes": "delete note / sub-tree", - "editingNotes": "Editing notes", - "editNoteTitle": "in tree pane will switch from tree pane into note title. Enter from note title will switch focus to text editor. will switch back from editor to tree pane.", - "createEditLink": "create / edit external link", - "createInternalLink": "create internal link", - "followLink": "follow link under cursor", - "insertDateTime": "insert current date and time at caret position", - "jumpToTreePane": "jump away to the tree pane and scroll to active note", - "markdownAutoformat": "Markdown-like autoformatting", - "headings": " etc. followed by space for headings", - "bulletList": "* or - followed by space for bullet list", - "numberedList": "1. or 1) followed by space for numbered list", - "blockQuote": "start a line with > followed by space for block quote", - "troubleshooting": "Troubleshooting", - "reloadFrontend": "reload Trilium frontend", - "showDevTools": "show developer tools", - "showSQLConsole": "show SQL console", - "other": "Other", - "quickSearch": "focus on quick search input", - "inPageSearch": "in page search" - }, - "import": { - "importIntoNote": "Import into note", - "close": "Close", - "chooseImportFile": "Choose import file", - "importDescription": "Content of the selected file(s) will be imported as child note(s) into", - "options": "Options", - "safeImportTooltip": "Trilium .zip export files can contain executable scripts which may contain harmful behavior. Safe import will deactivate automatic execution of all imported scripts. Uncheck \"Safe import\" only if the imported archive is supposed to contain executable scripts and you completely trust the contents of the import file.", - "safeImport": "Safe import", - "explodeArchivesTooltip": "If this is checked then Trilium will read .zip, .enex and .opml files and create notes from files insides those archives. If unchecked, then Trilium will attach the archives themselves to the note.", - "explodeArchives": "Read contents of .zip, .enex and .opml archives.", - "shrinkImagesTooltip": "

If you check this option, Trilium will attempt to shrink the imported images by scaling and optimization which may affect the perceived image quality. If unchecked, images will be imported without changes.

This doesn't apply to .zip imports with metadata since it is assumed these files are already optimized.

", - "shrinkImages": "Shrink images", - "textImportedAsText": "Import HTML, Markdown and TXT as text notes if it's unclear from metadata", - "codeImportedAsCode": "Import recognized code files (e.g. .json) as code notes if it's unclear from metadata", - "replaceUnderscoresWithSpaces": "Replace underscores with spaces in imported note names", - "import": "Import" - }, - "include_note": { - "dialog_title": "Include note", - "label_note": "Note", - "placeholder_search": "search for note by its name", - "box_size_prompt": "Box size of the included note:", - "box_size_small": "small (~ 10 lines)", - "box_size_medium": "medium (~ 30 lines)", - "box_size_full": "full (box shows complete text)", - "button_include": "Include note" - }, - "info": { - "modalTitle": "Info message", - "closeButton": "Close", - "okButton": "OK" - }, - "jump_to_note": { - "search_placeholder": "search for note by its name", - "search_button": "Search in full text Ctrl+Enter" - }, - "markdown_import": { - "dialog_title": "Markdown import", - "modal_body_text": "Because of browser sandbox it's not possible to directly read clipboard from JavaScript. Please paste the Markdown to import to textarea below and click on Import button", - "import_button": "Import Ctrl+Enter", - "import_success": "Markdown content has been imported into the document." - }, - "move_to": { - "dialog_title": "Move notes to ...", - "notes_to_move": "Notes to move", - "target_parent_note": "Target parent note", - "search_placeholder": "search for note by its name", - "move_button": "Move to selected note enter", - "error_no_path": "No path to move to.", - "move_success_message": "Selected notes have been moved into " - }, - "note_type_chooser": { - "modal_title": "Choose note type", - "modal_body": "Choose note type / template of the new note:", - "dropdown_trigger": "Dropdown trigger", - "templates": "Templates:" - }, - "password_not_set": { - "title": "Password is not set", - "body1": "Protected notes are encrypted using a user password, but password has not been set yet.", - "body2": "To be able to protect notes, click here to open the Options dialog and set your password." - }, - "prompt": { - "title": "Prompt", - "ok": "OK enter", - "defaultTitle": "Prompt" - }, - "protected_session_password": { - "modal_title": "Protected session", - "help_title": "Help on Protected notes", - "close_label": "Close", - "form_label": "To proceed with requested action you need to start protected session by entering password:", - "start_button": "Start protected session enter" - }, - "recent_changes": { - "title": "Recent changes", - "erase_notes_button": "Erase deleted notes now", - "deleted_notes_message": "Deleted notes have been erased.", - "no_changes_message": "No changes yet ...", - "undelete_link": "undelete", - "confirm_undelete": "Do you want to undelete this note and its sub-notes?" - }, - "revisions": { - "note_revisions": "Note revisions", - "delete_all_revisions": "Delete all revisions of this note", - "delete_all_button": "Delete all revisions", - "help_title": "Help on Note revisions", - "dropdown_trigger": "Dropdown trigger", - "revision_last_edited": "This revision was last edited on {{date}}", - "confirm_delete_all": "Do you want to delete all revisions of this note? This action will erase revision title and content, but still preserve revision metadata.", - "no_revisions": "No revisions for this note yet...", - "restore_button": "Restore this revision", - "confirm_restore": "Do you want to restore this revision? This will overwrite current title and content of the note with this revision.", - "delete_button": "Delete this revision", - "confirm_delete": "Do you want to delete this revision? This action will delete revision title and content, but still preserve revision metadata.", - "revisions_deleted": "Note revisions has been deleted.", - "revision_restored": "Note revision has been restored.", - "revision_deleted": "Note revision has been deleted.", - "download_button": "Download", - "mime": "MIME: ", - "file_size": "File size:", - "preview": "Preview:", - "preview_not_available": "Preview isn't available for this note type." - }, - "sort_child_notes": { - "sort_children_by": "Sort children by ...", - "sorting_criteria": "Sorting criteria", - "title": "title", - "date_created": "date created", - "date_modified": "date modified", - "sorting_direction": "Sorting direction", - "ascending": "ascending", - "descending": "descending", - "folders": "Folders", - "sort_folders_at_top": "sort folders at the top", - "natural_sort": "Natural Sort", - "sort_with_respect_to_different_character_sorting": "sort with respect to different character sorting and collation rules in different languages or regions.", - "natural_sort_language": "Natural sort language", - "the_language_code_for_natural_sort": "The language code for natural sort, e.g. \"zh-CN\" for Chinese.", - "sort": "Sort" - }, - "upload_attachments": { - "upload_attachments_to_note": "Upload attachments to note", - "choose_files": "Choose files", - "files_will_be_uploaded": "Files will be uploaded as attachments into", - "options": "Options", - "shrink_images": "Shrink images", - "upload": "Upload", - "tooltip": "If you check this option, Trilium will attempt to shrink the uploaded images by scaling and optimization which may affect the perceived image quality. If unchecked, images will be uploaded without changes." - }, - "attribute_detail": { - "attr_detail_title": "Attribute Detail Title", - "close_button_title": "Cancel changes and close", - "attr_is_owned_by": "Attribute is owned by", - "attr_name_title": "Attribute name can be composed of alphanumeric characters, colon and underscore only", - "name": "Name", - "value": "Value", - "target_note_title": "Relation is a named connection between source note and target note.", - "target_note": "Target note", - "promoted_title": "Promoted attribute is displayed prominently on the note.", - "promoted": "Promoted", - "promoted_alias_title": "The name to be displayed in the promoted attributes UI.", - "promoted_alias": "Alias", - "multiplicity_title": "Multiplicity defines how many attributes of the same name can be created - at max 1 or more than 1.", - "multiplicity": "Multiplicity", - "single_value": "Single value", - "multi_value": "Multi value", - "label_type_title": "Type of the label will help Trilium to choose suitable interface to enter the label value.", - "label_type": "Type", - "text": "Text", - "number": "Number", - "boolean": "Boolean", - "date": "Date", - "date_time": "Date & Time", - "url": "URL", - "precision_title": "What number of digits after floating point should be available in the value setting interface.", - "precision": "Precision", - "digits": "digits", - "inverse_relation_title": "Optional setting to define to which relation is this one opposite. Example: Father - Son are inverse relations to each other.", - "inverse_relation": "Inverse relation", - "inheritable_title": "Inheritable attribute will be inherited to all descendants under this tree.", - "inheritable": "Inheritable", - "save_and_close": "Save & close Ctrl+Enter", - "delete": "Delete", - "related_notes_title": "Other notes with this label", - "more_notes": "More notes", - "label": "Label detail", - "label_definition": "Label definition detail", - "relation": "Relation detail", - "relation_definition": "Relation definition detail", - "disable_versioning": "disables auto-versioning. Useful for e.g. large, but unimportant notes - e.g. large JS libraries used for scripting", - "calendar_root": "marks note which should be used as root for day notes. Only one should be marked as such.", - "archived": "notes with this label won't be visible by default in search results (also in Jump To, Add Link dialogs etc).", - "exclude_from_export": "notes (with their sub-tree) won't be included in any note export", - "run": "defines on which events script should run. Possible values are:\n
    \n
  • frontendStartup - when Trilium frontend starts up (or is refreshed), but not on mobile.
  • \n
  • mobileStartup - when Trilium frontend starts up (or is refreshed), on mobile.
  • \n
  • backendStartup - when Trilium backend starts up
  • \n
  • hourly - run once an hour. You can use additional label runAtHour to specify at which hour.
  • \n
  • daily - run once a day
  • \n
", - "run_on_instance": "Define which trilium instance should run this on. Default to all instances.", - "run_at_hour": "On which hour should this run. Should be used together with #run=hourly. Can be defined multiple times for more runs during the day.", - "disable_inclusion": "scripts with this label won't be included into parent script execution.", - "sorted": "keeps child notes sorted by title alphabetically", - "sort_direction": "ASC (the default) or DESC", - "sort_folders_first": "Folders (notes with children) should be sorted on top", - "top": "keep given note on top in its parent (applies only on sorted parents)", - "hide_promoted_attributes": "Hide promoted attributes on this note", - "read_only": "editor is in read only mode. Works only for text and code notes.", - "auto_read_only_disabled": "text/code notes can be set automatically into read mode when they are too large. You can disable this behavior on per-note basis by adding this label to the note", - "app_css": "marks CSS notes which are loaded into the Trilium application and can thus be used to modify Trilium's looks.", - "app_theme": "marks CSS notes which are full Trilium themes and are thus available in Trilium options.", - "css_class": "value of this label is then added as CSS class to the node representing given note in the tree. This can be useful for advanced theming. Can be used in template notes.", - "icon_class": "value of this label is added as a CSS class to the icon on the tree which can help visually distinguish the notes in the tree. Example might be bx bx-home - icons are taken from boxicons. Can be used in template notes.", - "page_size": "number of items per page in note listing", - "custom_request_handler": "see Custom request handler", - "custom_resource_provider": "see Custom request handler", - "widget": "marks this note as a custom widget which will be added to the Trilium component tree", - "workspace": "marks this note as a workspace which allows easy hoisting", - "workspace_icon_class": "defines box icon CSS class which will be used in tab when hoisted to this note", - "workspace_tab_background_color": "CSS color used in the note tab when hoisted to this note", - "workspace_calendar_root": "Defines per-workspace calendar root", - "workspace_template": "This note will appear in the selection of available template when creating new note, but only when hoisted into a workspace containing this template", - "search_home": "new search notes will be created as children of this note", - "workspace_search_home": "new search notes will be created as children of this note when hoisted to some ancestor of this workspace note", - "inbox": "default inbox location for new notes - when you create a note using \"new note\" button in the sidebar, notes will be created as child notes in the note marked as with #inbox label.", - "workspace_inbox": "default inbox location for new notes when hoisted to some ancestor of this workspace note", - "sql_console_home": "default location of SQL console notes", - "bookmark_folder": "note with this label will appear in bookmarks as folder (allowing access to its children)", - "share_hidden_from_tree": "this note is hidden from left navigation tree, but still accessible with its URL", - "share_external_link": "note will act as a link to an external website in the share tree", - "share_alias": "define an alias using which the note will be available under https://your_trilium_host/share/[your_alias]", - "share_omit_default_css": "default share page CSS will be omitted. Use when you make extensive styling changes.", - "share_root": "marks note which is served on /share root.", - "share_description": "define text to be added to the HTML meta tag for description", - "share_raw": "note will be served in its raw format, without HTML wrapper", - "share_disallow_robot_indexing": "will forbid robot indexing of this note via X-Robots-Tag: noindex header", - "share_credentials": "require credentials to access this shared note. Value is expected to be in format 'username:password'. Don't forget to make this inheritable to apply to child-notes/images.", - "share_index": "note with this this label will list all roots of shared notes", - "display_relations": "comma delimited names of relations which should be displayed. All other ones will be hidden.", - "hide_relations": "comma delimited names of relations which should be hidden. All other ones will be displayed.", - "title_template": "default title of notes created as children of this note. The value is evaluated as JavaScript string \n and thus can be enriched with dynamic content via the injected now and parentNote variables. Examples:\n \n
    \n
  • ${parentNote.getLabelValue('authorName')}'s literary works
  • \n
  • Log for ${now.format('YYYY-MM-DD HH:mm:ss')}
  • \n
\n \n See wiki with details, API docs for parentNote and now for details.", - "template": "This note will appear in the selection of available template when creating new note", - "toc": "#toc or #toc=show will force the Table of Contents to be shown, #toc=hide will force hiding it. If the label doesn't exist, the global setting is observed", - "color": "defines color of the note in note tree, links etc. Use any valid CSS color value like 'red' or #a13d5f", - "keyboard_shortcut": "Defines a keyboard shortcut which will immediately jump to this note. Example: 'ctrl+alt+e'. Requires frontend reload for the change to take effect.", - "keep_current_hoisting": "Opening this link won't change hoisting even if the note is not displayable in the current hoisted subtree.", - "execute_button": "Title of the button which will execute the current code note", - "execute_description": "Longer description of the current code note displayed together with the execute button", - "exclude_from_note_map": "Notes with this label will be hidden from the Note Map", - "new_notes_on_top": "New notes will be created at the top of the parent note, not on the bottom.", - "hide_highlight_widget": "Hide Hightlight List widget", - "run_on_note_creation": "executes when note is created on backend. Use this relation if you want to run the script for all notes created under a specific subtree. In that case, create it on the subtree root note and make it inheritable. A new note created within the subtree (any depth) will trigger the script.", - "run_on_child_note_creation": "executes when new note is created under the note where this relation is defined", - "run_on_note_title_change": "executes when note title is changed (includes note creation as well)", - "run_on_note_content_change": "executes when note content is changed (includes note creation as well).", - "run_on_note_change": "executes when note is changed (includes note creation as well). Does not include content changes", - "run_on_note_deletion": "executes when note is being deleted", - "run_on_branch_creation": "executes when a branch is created. Branch is a link between parent note and child note and is created e.g. when cloning or moving note.", - "run_on_branch_change": "executes when a branch is updated.", - "run_on_branch_deletion": "executes when a branch is deleted. Branch is a link between parent note and child note and is deleted e.g. when moving note (old branch/link is deleted).", - "run_on_attribute_creation": "executes when new attribute is created for the note which defines this relation", - "run_on_attribute_change": " executes when the attribute is changed of a note which defines this relation. This is triggered also when the attribute is deleted", - "relation_template": "note's attributes will be inherited even without a parent-child relationship, note's content and subtree will be added to instance notes if empty. See documentation for details.", - "inherit": "note's attributes will be inherited even without a parent-child relationship. See template relation for a similar concept. See attribute inheritance in the documentation.", - "render_note": "notes of type \"render HTML note\" will be rendered using a code note (HTML or script) and it is necessary to point using this relation to which note should be rendered", - "widget_relation": "target of this relation will be executed and rendered as a widget in the sidebar", - "share_css": "CSS note which will be injected into the share page. CSS note must be in the shared sub-tree as well. Consider using 'share_hidden_from_tree' and 'share_omit_default_css' as well.", - "share_js": "JavaScript note which will be injected into the share page. JS note must be in the shared sub-tree as well. Consider using 'share_hidden_from_tree'.", - "share_template": "Embedded JavaScript note that will be used as the template for displaying the shared note. Falls back to the default template. Consider using 'share_hidden_from_tree'.", - "share_favicon": "Favicon note to be set in the shared page. Typically you want to set it to share root and make it inheritable. Favicon note must be in the shared sub-tree as well. Consider using 'share_hidden_from_tree'.", - "is_owned_by_note": "is owned by note", - "other_notes_with_name": "Other notes with {{attributeType}} name \"{{attributeName}}\"", - "and_more": "... and {{count}} more." - }, - "attribute_editor": { - "help_text_body1": "To add label, just type e.g. #rock or if you want to add also value then e.g. #year = 2020", - "help_text_body2": "For relation, type ~author = @ which should bring up an autocomplete where you can look up the desired note.", - "help_text_body3": "Alternatively you can add label and relation using the + button on the right side.", - "save_attributes": "Save attributes ", - "add_a_new_attribute": "Add a new attribute", - "add_new_label": "Add new label ", - "add_new_relation": "Add new relation ", - "add_new_label_definition": "Add new label definition", - "add_new_relation_definition": "Add new relation definition" - }, - "abstract_bulk_action": { - "remove_this_search_action": "Remove this search action" - }, - "execute_script": { - "execute_script": "Execute script", - "help_text": "You can execute simple scripts on the matched notes.", - "example_1": "For example to append a string to a note's title, use this small script:", - "example_2": "More complex example would be deleting all matched note's attributes:" - }, - "add_label": { - "add_label": "Add label", - "label_name_placeholder": "label name", - "label_name_title": "Alphanumeric characters, underscore and colon are allowed characters.", - "to_value": "to value", - "new_value_placeholder": "new value", - "help_text": "On all matched notes:", - "help_text_item1": "create given label if note doesn't have one yet", - "help_text_item2": "or change value of the existing label", - "help_text_note": "You can also call this method without value, in such case label will be assigned to the note without value." - }, - "delete_label": { - "delete_label": "Delete label", - "label_name_placeholder": "label name", - "label_name_title": "Alphanumeric characters, underscore and colon are allowed characters." - }, - "rename_label": { - "rename_label": "Rename label", - "rename_label_from": "Rename label from", - "old_name_placeholder": "old name", - "to": "To", - "new_name_placeholder": "new name", - "name_title": "Alphanumeric characters, underscore and colon are allowed characters." - }, - "update_label_value": { - "update_label_value": "Update label value", - "label_name_placeholder": "label name", - "label_name_title": "Alphanumeric characters, underscore and colon are allowed characters.", - "to_value": "to value", - "new_value_placeholder": "new value", - "help_text": "On all matched notes, change value of the existing label.", - "help_text_note": "You can also call this method without value, in such case label will be assigned to the note without value." - }, - "delete_note": { - "delete_note": "Delete note", - "delete_matched_notes": "Delete matched notes", - "delete_matched_notes_description": "This will delete matched notes.", - "undelete_notes_instruction": "After the deletion, it's possible to undelete them from Recent Changes dialog.", - "erase_notes_instruction": "To erase notes permanently, you can go after the deletion to the Option -> Other and click the \"Erase deleted notes now\" button." - }, - "delete_revisions": { - "delete_note_revisions": "Delete note revisions", - "all_past_note_revisions": "All past note revisions of matched notes will be deleted. Note itself will be fully preserved. In other terms, note's history will be removed." - }, - "move_note": { - "move_note": "Move note", - "to": "to", - "target_parent_note": "target parent note", - "on_all_matched_notes": "On all matched notes", - "move_note_new_parent": "move note to the new parent if note has only one parent (i.e. the old placement is removed and new placement into the new parent is created)", - "clone_note_new_parent": "clone note to the new parent if note has multiple clones/placements (it's not clear which placement should be removed)", - "nothing_will_happen": "nothing will happen if note cannot be moved to the target note (i.e. this would create a tree cycle)" - }, - "rename_note": { - "rename_note": "Rename note", - "rename_note_title_to": "Rename note title to", - "new_note_title": "new note title", - "click_help_icon": "Click help icon on the right to see all the options", - "evaluated_as_js_string": "The given value is evaluated as JavaScript string and thus can be enriched with dynamic content via the injected note variable (note being renamed). Examples:", - "example_note": "Note - all matched notes are renamed to 'Note'", - "example_new_title": "NEW: ${note.title} - matched notes titles are prefixed with 'NEW: '", - "example_date_prefix": "${note.dateCreatedObj.format('MM-DD:')}: ${note.title} - matched notes are prefixed with note's creation month-date", - "api_docs": "See API docs for note and its dateCreatedObj / utcDateCreatedObj properties for details." - }, - "add_relation": { - "add_relation": "Add relation", - "relation_name": "relation name", - "allowed_characters": "Alphanumeric characters, underscore and colon are allowed characters.", - "to": "to", - "target_note": "target note", - "create_relation_on_all_matched_notes": "On all matched notes create given relation." - }, - "delete_relation": { - "delete_relation": "Delete relation", - "relation_name": "relation name", - "allowed_characters": "Alphanumeric characters, underscore and colon are allowed characters." - }, - "rename_relation": { - "rename_relation": "Rename relation", - "rename_relation_from": "Rename relation from", - "old_name": "old name", - "to": "To", - "new_name": "new name", - "allowed_characters": "Alphanumeric characters, underscore and colon are allowed characters." - }, - "update_relation_target": { - "update_relation": "Update relation", - "relation_name": "relation name", - "allowed_characters": "Alphanumeric characters, underscore and colon are allowed characters.", - "to": "to", - "target_note": "target note", - "on_all_matched_notes": "On all matched notes", - "create_given_relation": "create given relation if note doesn't have one yet", - "change_target_note": "or change target note of the existing relation", - "update_relation_target": "Update relation target" - }, - "attachments_actions": { - "open_externally": "Open externally", - "open_externally_title": "File will be open in an external application and watched for changes. You'll then be able to upload the modified version back to Trilium.", - "open_custom": "Open custom", - "open_custom_title": "File will be open in an external application and watched for changes. You'll then be able to upload the modified version back to Trilium.", - "download": "Download", - "rename_attachment": "Rename attachment", - "upload_new_revision": "Upload new revision", - "copy_link_to_clipboard": "Copy link to clipboard", - "convert_attachment_into_note": "Convert attachment into note", - "delete_attachment": "Delete attachment", - "upload_success": "New attachment revision has been uploaded.", - "upload_failed": "Upload of a new attachment revision failed.", - "open_externally_detail_page": "Opening attachment externally is available only from the detail page, please first click on the attachment detail first and repeat the action.", - "open_custom_client_only": "Custom opening of attachments can only be done from the desktop client.", - "delete_confirm": "Are you sure you want to delete attachment '{{title}}'?", - "delete_success": "Attachment '{{title}}' has been deleted.", - "convert_confirm": "Are you sure you want to convert attachment '{{title}}' into a separate note?", - "convert_success": "Attachment '{{title}}' has been converted to note.", - "enter_new_name": "Please enter new attachment's name" - }, - "calendar": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun", - "cannot_find_day_note": "Cannot find day note", - "january": "January", - "febuary": "Febuary", - "march": "March", - "april": "April", - "may": "May", - "june": "June", - "july": "July", - "august": "August", - "september": "September", - "october": "October", - "november": "November", - "december": "December" - }, - "close_pane_button": { - "close_this_pane": "Close this pane" - }, - "create_pane_button": { - "create_new_split": "Create new split" - }, - "edit_button": { - "edit_this_note": "Edit this note" - }, - "global_menu": { - "menu": "Menu", - "options": "Options", - "open_new_window": "Open New Window", - "switch_to_mobile_version": "Switch to Mobile Version", - "switch_to_desktop_version": "Switch to Desktop Version", - "zoom": "Zoom", - "toggle_fullscreen": "Toggle Fullscreen", - "zoom_out": "Zoom Out", - "reset_zoom_level": "Reset Zoom Level", - "zoom_in": "Zoom In", - "configure_launchbar": "Configure Launchbar", - "show_shared_notes_subtree": "Show Shared Notes Subtree", - "advanced": "Advanced", - "open_dev_tools": "Open Dev Tools", - "open_sql_console": "Open SQL Console", - "open_sql_console_history": "Open SQL Console History", - "open_search_history": "Open Search History", - "show_backend_log": "Show Backend Log", - "reload_hint": "Reload can help with some visual glitches without restarting the whole app.", - "reload_frontend": "Reload Frontend", - "show_hidden_subtree": "Show Hidden Subtree", - "show_help": "Show Help", - "about": "About TriliumNext Notes", - "logout": "Logout" - }, - "left_pane_toggle": { - "hide_panel": "Hide panel", - "open_panel": "Open panel" - }, - "move_pane_button": { - "move_left": "Move left", - "move_right": "Move right" - }, - "note_actions": { - "convert_into_attachment": "Convert into attachment", - "re_render_note": "Re-render note", - "search_in_note": "Search in note", - "note_source": "Note source", - "note_attachments": "Note attachments", - "open_note_externally": "Open note externally", - "open_note_externally_title": "File will be open in an external application and watched for changes. You'll then be able to upload the modified version back to Trilium.", - "open_note_custom": "Open note custom", - "import_files": "Import files", - "export_note": "Export note", - "delete_note": "Delete note", - "print_note": "Print note", - "save_revision": "Save revision" - }, - "onclick_button": { - "no_click_handler": "Button widget '{{componentId}}' has no defined click handler" - }, - "protected_session_status": { - "active": "Protected session is active. Click to leave protected session.", - "inactive": "Click to enter protected session" - }, - "revisions_button": { - "note_revisions": "Note Revisions" - }, - "update_available": { - "update_available": "Update available" - }, - "note_launcher": { - "this_launcher_doesnt_define_target_note": "This launcher doesn't define target note." - }, - "code_buttons": { - "execute_button_title": "Execute script", - "trilium_api_docs_button_title": "Open Trilium API docs", - "save_to_note_button_title": "Save to note", - "opening_api_docs_message": "Opening API docs...", - "sql_console_saved_message": "SQL Console note has been saved into {{note_path}}" - }, - "copy_image_reference_button": { - "button_title": "Copy image reference to the clipboard, can be pasted into a text note." - }, - "hide_floating_buttons_button": { - "button_title": "Hide buttons" - }, - "mermaid_export_button": { - "button_title": "Export Mermaid diagram as SVG" - }, - "relation_map_buttons": { - "create_child_note_title": "Create new child note and add it into this relation map", - "reset_pan_zoom_title": "Reset pan & zoom to initial coordinates and magnification", - "zoom_in_title": "Zoom In", - "zoom_out_title": "Zoom Out" - }, - "zpetne_odkazy": { - "backlink": "{{count}} Backlink", - "backlinks": "{{count}} Backlinks", - "relation": "relation" - }, - "mobile_detail_menu": { - "insert_child_note": "Insert child note", - "delete_this_note": "Delete this note", - "error_cannot_get_branch_id": "Cannot get branchId for notePath '{{notePath}}'", - "error_unrecognized_command": "Unrecognized command {{command}}" - }, - "basic_properties": { - "note_type": "Note type", - "editable": "Editable", - "basic_properties": "Basic Properties" - }, - "book_properties": { - "view_type": "View type", - "grid": "Grid", - "list": "List", - "collapse_all_notes": "Collapse all notes", - "expand_all_children": "Expand all children", - "collapse": "Collapse", - "expand": "Expand", - "book_properties": "Book Properties", - "invalid_view_type": "Invalid view type '{{type}}'" - }, - "edited_notes": { - "no_edited_notes_found": "No edited notes on this day yet ...", - "title": "Edited Notes", - "deleted": "(deleted)" - }, - "file_properties": { - "note_id": "Note ID", - "original_file_name": "Original file name", - "file_type": "File type", - "file_size": "File size", - "download": "Download", - "open": "Open", - "upload_new_revision": "Upload new revision", - "upload_success": "New file revision has been uploaded.", - "upload_failed": "Upload of a new file revision failed.", - "title": "File" - }, - "image_properties": { - "original_file_name": "Original file name", - "file_type": "File type", - "file_size": "File size", - "download": "Download", - "open": "Open", - "copy_reference_to_clipboard": "Copy reference to clipboard", - "upload_new_revision": "Upload new revision", - "upload_success": "New image revision has been uploaded.", - "upload_failed": "Upload of a new image revision failed: {{message}}", - "title": "Image" - }, - "inherited_attribute_list": { - "title": "Inherited Attributes", - "no_inherited_attributes": "No inherited attributes." - }, - "note_info_widget": { - "note_id": "Note ID", - "created": "Created", - "modified": "Modified", - "type": "Type", - "note_size": "Note size", - "note_size_info": "Note size provides rough estimate of storage requirements for this note. It takes into account note's content and content of its note revisions.", - "calculate": "calculate", - "subtree_size": "(subtree size: {{size}} in {{count}} notes)", - "title": "Note Info" - }, - "note_map": { - "open_full": "Expand to full", - "collapse": "Collapse to normal size", - "title": "Note Map" - }, - "note_paths": { - "title": "Note Paths", - "clone_button": "Clone note to new location...", - "intro_placed": "This note is placed into the following paths:", - "intro_not_placed": "This note is not yet placed into the note tree.", - "outside_hoisted": "This path is outside of hoisted note and you would have to unhoist.", - "archived": "Archived", - "search": "Search" - }, - "note_properties": { - "this_note_was_originally_taken_from": "This note was originally taken from:", - "info": "Info" - }, - "owned_attribute_list": { - "owned_attributes": "Owned Attributes" - }, - "promoted_attributes": { - "promoted_attributes": "Promoted Attributes", - "url_placeholder": "http://website...", - "open_external_link": "Open external link", - "unknown_label_type": "Unknown labelType '{{type}}'", - "unknown_attribute_type": "Unknown attribute type '{{type}}'", - "add_new_attribute": "Add new attribute", - "remove_this_attribute": "Remove this attribute" - }, - "script_executor": { - "query": "Query", - "script": "Script", - "execute_query": "Execute Query", - "execute_script": "Execute Script" - }, - "search_definition": { - "add_search_option": "Add search option:", - "search_string": "search string", - "search_script": "search script", - "ancestor": "ancestor", - "fast_search": "fast search", - "fast_search_description": "Fast search option disables full text search of note contents which might speed up searching in large databases.", - "include_archived": "include archived", - "include_archived_notes_description": "Archived notes are by default excluded from search results, with this option they will be included.", - "order_by": "order by", - "limit": "limit", - "limit_description": "Limit number of results", - "debug": "debug", - "debug_description": "Debug will print extra debugging information into the console to aid in debugging complex queries", - "action": "action", - "search": "Search", - "enter": "enter", - "search_execute": "Search & Execute actions", - "save_to_note": "Save to note", - "search_parameters": "Search Parameters", - "unknown_search_option": "Unknown search option {{searchOptionName}}", - "search_note_saved": "Search note has been saved into {{- notePathTitle}}", - "actions_executed": "Actions have been executed." - }, - "similar_notes": { - "title": "Similar Notes", - "no_similar_notes_found": "No similar notes found." - }, - "abstract_search_option": { - "remove_this_search_option": "Remove this search option", - "failed_rendering": "Failed rendering search option: {{dto}} with error: {{error}} {{stack}}" - }, - "ancestor": { - "label": "Ancestor", - "placeholder": "search for note by its name", - "depth_label": "depth", - "depth_doesnt_matter": "doesn't matter", - "depth_eq": "is exactly {{count}}", - "direct_children": "direct children", - "depth_gt": "is greater than {{count}}", - "depth_lt": "is less than {{count}}" - }, - "debug": { - "debug": "Debug", - "debug_info": "Debug will print extra debugging information into the console to aid in debugging complex queries.", - "access_info": "To access the debug information, execute query and click on \"Show backend log\" in top left corner." - }, - "fast_search": { - "fast_search": "Fast search", - "description": "Fast search option disables full text search of note contents which might speed up searching in large databases." - }, - "include_archived_notes": { - "include_archived_notes": "Include archived notes" - }, - "limit": { - "limit": "Limit", - "take_first_x_results": "Take only first X specified results." - }, - "order_by": { - "order_by": "Order by", - "relevancy": "Relevancy (default)", - "title": "Title", - "date_created": "Date created", - "date_modified": "Date of last modification", - "content_size": "Note content size", - "content_and_attachments_size": "Note content size including attachments", - "content_and_attachments_and_revisions_size": "Note content size including attachments and revisions", - "revision_count": "Number of revisions", - "children_count": "Number of children notes", - "parent_count": "Number of clones", - "owned_label_count": "Number of labels", - "owned_relation_count": "Number of relations", - "target_relation_count": "Number of relations targeting the note", - "random": "Random order", - "asc": "Ascending (default)", - "desc": "Descending" - }, - "search_script": { - "title": "Search script:", - "placeholder": "search for note by its name", - "description1": "Search script allows to define search results by running a script. This provides maximal flexibility when standard search doesn't suffice.", - "description2": "Search script must be of type \"code\" and subtype \"JavaScript backend\". The script needs to return an array of noteIds or notes.", - "example_title": "See this example:", - "example_code": "// 1. prefiltering using standard search\nconst candidateNotes = api.searchForNotes(\"#journal\"); \n\n// 2. applying custom search criteria\nconst matchedNotes = candidateNotes\n .filter(note => note.title.match(/[0-9]{1,2}\\. ?[0-9]{1,2}\\. ?[0-9]{4}/));\n\nreturn matchedNotes;", - "note": "Note that search script and search string can't be combined with each other." - }, - "search_string": { - "title_column": "Search string:", - "placeholder": "fulltext keywords, #tag = value ...", - "search_syntax": "Search syntax", - "also_see": "also see", - "complete_help": "complete help on search syntax", - "full_text_search": "Just enter any text for full text search", - "label_abc": "returns notes with label abc", - "label_year": "matches notes with label year having value 2019", - "label_rock_pop": "matches notes which have both rock and pop labels", - "label_rock_or_pop": "only one of the labels must be present", - "label_year_comparison": "numerical comparison (also >, >=, <).", - "label_date_created": "notes created in the last month", - "error": "Search error: {{error}}" - }, - "attachment_detail": { - "open_help_page": "Open help page on attachments", - "owning_note": "Owning note: ", - "you_can_also_open": ", you can also open the ", - "list_of_all_attachments": "List of all attachments", - "attachment_deleted": "This attachment has been deleted." - }, - "attachment_list": { - "open_help_page": "Open help page on attachments", - "owning_note": "Owning note: ", - "upload_attachments": "Upload attachments", - "no_attachments": "This note has no attachments." - }, - "book": { - "no_children_help": "This note of type Book doesn't have any child notes so there's nothing to display. See wiki for details." - }, - "editable_code": { - "placeholder": "Type the content of your code note here..." - }, - "editable_text": { - "placeholder": "Type the content of your note here ..." - }, - "empty": { - "open_note_instruction": "Open a note by typing the note's title into the input below or choose a note in the tree.", - "search_placeholder": "search for a note by its name", - "enter_workspace": "Enter workspace {{title}}" - }, - "file": { - "file_preview_not_available": "File preview is not available for this file format." - }, - "protected_session": { - "enter_password_instruction": "Showing protected note requires entering your password:", - "start_session_button": "Start protected session" - }, - "relation_map": { - "open_in_new_tab": "Open in new tab", - "remove_note": "Remove note", - "edit_title": "Edit title", - "rename_note": "Rename note", - "enter_new_title": "Enter new note title:", - "remove_relation": "Remove relation", - "confirm_remove_relation": "Are you sure you want to remove the relation?", - "specify_new_relation_name": "Specify new relation name (allowed characters: alphanumeric, colon and underscore):", - "connection_exists": "Connection '{{name}}' between these notes already exists.", - "start_dragging_relations": "Start dragging relations from here and drop them on another note.", - "note_not_found": "Note {{noteId}} not found!", - "cannot_match_transform": "Cannot match transform: {{transform}}", - "note_already_in_diagram": "Note \"{{title}}\" is already in the diagram.", - "enter_title_of_new_note": "Enter title of new note", - "default_new_note_title": "new note", - "click_on_canvas_to_place_new_note": "Click on canvas to place new note" - }, - "render": { - "note_detail_render_help_1": "This help note is shown because this note of type Render HTML doesn't have required relation to function properly.", - "note_detail_render_help_2": "Render HTML note type is used for scripting. In short, you have a HTML code note (optionally with some JavaScript) and this note will render it. To make it work, you need to define a relation called \"renderNote\" pointing to the HTML note to render." - }, - "web_view": { - "web_view": "Web View", - "embed_websites": "Note of type Web View allows you to embed websites into Trilium.", - "create_label": "To start, please create a label with a URL address you want to embed, e.g. #webViewSrc=\"https://www.google.com\"", - "disclaimer": "Disclaimer on the experimental status", - "experimental_note": "Web View is an experimental note type, and it might be removed or substantially changed in the future. Web View works also only in the desktop build." - }, - "backend_log": { - "refresh": "Refresh" - }, - "consistency_checks": { - "title": "Consistency Checks", - "find_and_fix_button": "Find and fix consistency issues", - "finding_and_fixing_message": "Finding and fixing consistency issues...", - "issues_fixed_message": "Consistency issues should be fixed." - }, - "database_anonymization": { - "title": "Database Anonymization", - "full_anonymization": "Full Anonymization", - "full_anonymization_description": "This action will create a new copy of the database and anonymize it (remove all note content and leave only structure and some non-sensitive metadata) for sharing online for debugging purposes without fear of leaking your personal data.", - "save_fully_anonymized_database": "Save fully anonymized database", - "light_anonymization": "Light Anonymization", - "light_anonymization_description": "This action will create a new copy of the database and do a light anonymization on it — specifically only content of all notes will be removed, but titles and attributes will remain. Additionally, custom JS frontend/backend script notes and custom widgets will remain. This provides more context to debug the issues.", - "choose_anonymization": "You can decide yourself if you want to provide a fully or lightly anonymized database. Even fully anonymized DB is very useful, however in some cases lightly anonymized database can speed up the process of bug identification and fixing.", - "save_lightly_anonymized_database": "Save lightly anonymized database", - "existing_anonymized_databases": "Existing anonymized databases", - "creating_fully_anonymized_database": "Creating fully anonymized database...", - "creating_lightly_anonymized_database": "Creating lightly anonymized database...", - "error_creating_anonymized_database": "Could not create anonymized database, check backend logs for details", - "successfully_created_fully_anonymized_database": "Created fully anonymized database in {{anonymizedFilePath}}", - "successfully_created_lightly_anonymized_database": "Created lightly anonymized database in {{anonymizedFilePath}}", - "no_anonymized_database_yet": "no anonymized database yet" - }, - "database_integrity_check": { - "title": "Database Integrity Check", - "description": "This will check that the database is not corrupted on the SQLite level. It might take some time, depending on the DB size.", - "check_button": "Check database integrity", - "checking_integrity": "Checking database integrity...", - "integrity_check_succeeded": "Integrity check succeeded - no problems found.", - "integrity_check_failed": "Integrity check failed: {{results}}" - }, - "sync": { - "title": "Sync", - "force_full_sync_button": "Force full sync", - "fill_entity_changes_button": "Fill entity changes records", - "full_sync_triggered": "Full sync triggered", - "filling_entity_changes": "Filling entity changes rows...", - "sync_rows_filled_successfully": "Sync rows filled successfully" - }, - "vacuum_database": { - "title": "Vacuum Database", - "description": "This will rebuild the database which will typically result in a smaller database file. No data will be actually changed.", - "button_text": "Vacuum database", - "vacuuming_database": "Vacuuming database...", - "database_vacuumed": "Database has been vacuumed" - }, - "fonts": { - "theme_defined": "Theme defined", - "fonts": "Fonts", - "main_font": "Main Font", - "font_family": "Font family", - "size": "Size", - "note_tree_font": "Note Tree Font", - "note_detail_font": "Note Detail Font", - "monospace_font": "Monospace (code) Font", - "note_tree_and_detail_font_sizing": "Note that tree and detail font sizing is relative to the main font size setting.", - "not_all_fonts_available": "Not all listed fonts may be available on your system.", - "apply_font_changes": "To apply font changes, click on", - "reload_frontend": "reload frontend" - }, - "max_content_width": { - "title": "Content Width", - "default_description": "Trilium by default limits max content width to improve readability for maximized screens on wide screens.", - "max_width_label": "Max content width in pixels", - "apply_changes_description": "To apply content width changes, click on", - "reload_button": "reload frontend", - "reload_description": "changes from appearance options" - }, - "native_title_bar": { - "title": "Native Title Bar (requires app restart)", - "enabled": "enabled", - "disabled": "disabled" - }, - "ribbon": { - "widgets": "Ribbon widgets", - "promoted_attributes_message": "Promoted Attributes ribbon tab will automatically open if promoted attributes are present on the note", - "edited_notes_message": "Edited Notes ribbon tab will automatically open on day notes" - }, - "theme": { - "title": "Theme", - "theme_label": "Theme", - "override_theme_fonts_label": "Override theme fonts", - "light_theme": "Light", - "dark_theme": "Dark" - }, - "zoom_factor": { - "title": "Zoom Factor (desktop build only)", - "description": "Zooming can be controlled with CTRL+- and CTRL+= shortcuts as well." - }, - "code_auto_read_only_size": { - "title": "Automatic Read-Only Size", - "description": "Automatic read-only note size is the size after which notes will be displayed in a read-only mode (for performance reasons).", - "label": "Automatic read-only size (code notes)" - }, - "code_mime_types": { - "title": "Available MIME types in the dropdown" - }, - "vim_key_bindings": { - "use_vim_keybindings_in_code_notes": "Use vim keybindings in code notes (no ex mode)", - "enable_vim_keybindings": "Enable Vim Keybindings" - }, - "wrap_lines": { - "wrap_lines_in_code_notes": "Wrap lines in code notes", - "enable_line_wrap": "Enable Line Wrap (change might need a frontend reload to take effect)" - }, - "images": { - "images_section_title": "Images", - "download_images_automatically": "Download images automatically for offline use.", - "download_images_description": "Pasted HTML can contain references to online images, Trilium will find those references and download the images so that they are available offline.", - "enable_image_compression": "Enable image compression", - "max_image_dimensions": "Max width / height of an image in pixels (image will be resized if it exceeds this setting).", - "jpeg_quality_description": "JPEG quality (10 - worst quality, 100 best quality, 50 - 85 is recommended)" - }, - "attachment_erasure_timeout": { - "attachment_erasure_timeout": "Attachment Erasure Timeout", - "attachment_auto_deletion_description": "Attachments get automatically deleted (and erased) if they are not referenced by their note anymore after a defined time out.", - "erase_attachments_after_x_seconds": "Erase attachments after X seconds of not being used in its note", - "manual_erasing_description": "You can also trigger erasing manually (without considering the timeout defined above):", - "erase_unused_attachments_now": "Erase unused attachment notes now", - "unused_attachments_erased": "Unused attachments have been erased." - }, - "network_connections": { - "network_connections_title": "Network Connections", - "check_for_updates": "Check for updates automatically" - }, - "note_erasure_timeout": { - "note_erasure_timeout_title": "Note Erasure Timeout", - "note_erasure_description": "Deleted notes (and attributes, revisions...) are at first only marked as deleted and it is possible to recover them from Recent Notes dialog. After a period of time, deleted notes are \"erased\" which means their content is not recoverable anymore. This setting allows you to configure the length of the period between deleting and erasing the note.", - "erase_notes_after_x_seconds": "Erase notes after X seconds", - "manual_erasing_description": "You can also trigger erasing manually (without considering the timeout defined above):", - "erase_deleted_notes_now": "Erase deleted notes now", - "deleted_notes_erased": "Deleted notes have been erased." - }, - "revisions_snapshot_interval": { - "note_revisions_snapshot_interval_title": "Note Revisions Snapshot Interval", - "note_revisions_snapshot_description": "Note revision snapshot time interval is time in seconds after which a new note revision will be created for the note. See wiki for more info.", - "snapshot_time_interval_label": "Note revision snapshot time interval (in seconds)" - }, - "search_engine": { - "title": "Search Engine", - "custom_search_engine_info": "Custom search engine requires both a name and a URL to be set. If either of these is not set, DuckDuckGo will be used as the default search engine.", - "predefined_templates_label": "Predefined search engine templates", - "bing": "Bing", - "baidu": "Baidu", - "duckduckgo": "DuckDuckGo", - "google": "Google", - "custom_name_label": "Custom search engine name", - "custom_name_placeholder": "Customize search engine name", - "custom_url_label": "Custom search engine URL should include {keyword} as a placeholder for the search term.", - "custom_url_placeholder": "Customize search engine url", - "save_button": "Save" - }, - "tray": { - "title": "Tray", - "enable_tray": "Enable tray (Trilium needs to be restarted for this change to take effect)" - }, - "heading_style": { - "title": "Heading Style", - "plain": "Plain", - "underline": "Underline", - "markdown": "Markdown-style" - }, - "highlights_list": { - "title": "Highlights List", - "description": "You can customize the highlights list displayed in the right panel:", - "bold": "Bold font", - "italic": "Italic font", - "underline": "Underlined font", - "color": "Font with color", - "bg_color": "Font with background color", - "visibility_title": "Highlights List visibility", - "visibility_description": "You can hide the highlights widget per-note by adding a #hideHighlightWidget label.", - "shortcut_info": "You can configure a keyboard shortcut for quickly toggling the right pane (including Highlights) in the Options -> Shortcuts (name 'toggleRightPane')." - }, - "table_of_contents": { - "title": "Table of Contents", - "description": "Table of contents will appear in text notes when the note has more than a defined number of headings. You can customize this number:", - "disable_info": "You can also use this option to effectively disable TOC by setting a very high number.", - "shortcut_info": "You can configure a keyboard shortcut for quickly toggling the right pane (including TOC) in the Options -> Shortcuts (name 'toggleRightPane')." - }, - "text_auto_read_only_size": { - "title": "Automatic Read-Only Size", - "description": "Automatic read-only note size is the size after which notes will be displayed in a read-only mode (for performance reasons).", - "label": "Automatic read-only size (text notes)" - }, - "i18n": { - "title": "Localization", - "language": "Language" - } }