add translation for backend_log.js and

5 advanced options
This commit is contained in:
Nriver 2024-08-08 10:40:15 +08:00
parent 9885abc626
commit fcf4b57838
8 changed files with 142 additions and 39 deletions

View File

@ -1,5 +1,6 @@
import NoteContextAwareWidget from "../../note_context_aware_widget.js";
import server from "../../../services/server.js";
import { t } from "../../../services/i18n.js";
const TPL = `<div style="height: 100%; display: flex; flex-direction: column;">
<style>
@ -13,7 +14,7 @@ const TPL = `<div style="height: 100%; display: flex; flex-direction: column;">
<textarea class="backend-log-textarea" readonly="readonly"></textarea>
<div style="display: flex; justify-content: space-around; margin-top: 10px;">
<button class="refresh-backend-log-button btn btn-primary">Refresh</button>
<button class="refresh-backend-log-button btn btn-primary">${t("backend_log.refresh")}</button>
</div>
</div>`;

View File

@ -1,12 +1,13 @@
import OptionsWidget from "../options_widget.js";
import toastService from "../../../../services/toast.js";
import server from "../../../../services/server.js";
import { t } from "../../../../services/i18n.js";
const TPL = `
<div class="options-section">
<h4>Consistency Checks</h4>
<h4>${t("consistency_checks.title")}</h4>
<button class="find-and-fix-consistency-issues-button btn">Find and fix consistency issues</button>
<button class="find-and-fix-consistency-issues-button btn">${t("consistency_checks.find_and_fix_button")}</button>
</div>`;
export default class ConsistencyChecksOptions extends OptionsWidget {
@ -14,11 +15,11 @@ export default class ConsistencyChecksOptions extends OptionsWidget {
this.$widget = $(TPL);
this.$findAndFixConsistencyIssuesButton = this.$widget.find(".find-and-fix-consistency-issues-button");
this.$findAndFixConsistencyIssuesButton.on('click', async () => {
toastService.showMessage("Finding and fixing consistency issues...");
toastService.showMessage(t("consistency_checks.finding_and_fixing_message"));
await server.post('database/find-and-fix-consistency-issues');
toastService.showMessage("Consistency issues should be fixed.");
toastService.showMessage(t("consistency_checks.issues_fixed_message"));
});
}
}

View File

@ -1,27 +1,27 @@
import OptionsWidget from "../options_widget.js";
import toastService from "../../../../services/toast.js";
import server from "../../../../services/server.js";
import { t } from "../../../../services/i18n.js";
const TPL = `
<div class="options-section">
<h4>Database Anonymization</h4>
<h4>${t("database_anonymization.title")}</h4>
<h5>Full Anonymization</h5>
<h5>${t("database_anonymization.full_anonymization")}</h5>
<p>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.</p>
<p>${t("database_anonymization.full_anonymization_description")}</p>
<button class="anonymize-full-button btn">Save fully anonymized database</button>
<button class="anonymize-full-button btn">${t("database_anonymization.save_fully_anonymized_database")}</button>
<h5>Light Anonymization</h5>
<h5>${t("database_anonymization.light_anonymization")}</h5>
<p>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.</p>
<p>${t("database_anonymization.light_anonymization_description")}</p>
<p>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.</p>
<p>${t("database_anonymization.choose_anonymization")}</p>
<button class="anonymize-light-button btn">Save lightly anonymized database</button>
<button class="anonymize-light-button btn">${t("database_anonymization.save_lightly_anonymized_database")}</button>
<h5>Existing anonymized databases</h5>
<h5>${t("database_anonymization.existing_anonymized_databases")}</h5>
<ul class="existing-anonymized-databases"></ul>
</div>`;
@ -32,30 +32,30 @@ export default class DatabaseAnonymizationOptions extends OptionsWidget {
this.$anonymizeFullButton = this.$widget.find(".anonymize-full-button");
this.$anonymizeLightButton = this.$widget.find(".anonymize-light-button");
this.$anonymizeFullButton.on('click', async () => {
toastService.showMessage("Creating fully anonymized database...");
toastService.showMessage(t("database_anonymization.creating_fully_anonymized_database"));
const resp = await server.post('database/anonymize/full');
if (!resp.success) {
toastService.showError("Could not create anonymized database, check backend logs for details");
toastService.showError(t("database_anonymization.error_creating_anonymized_database"));
}
else {
toastService.showMessage(`Created fully anonymized database in ${resp.anonymizedFilePath}`, 10000);
toastService.showMessage(t("database_anonymization.successfully_created_fully_anonymized_database", { anonymizedFilePath: resp.anonymizedFilePath }), 10000);
}
this.refresh();
});
this.$anonymizeLightButton.on('click', async () => {
toastService.showMessage("Creating lightly anonymized database...");
toastService.showMessage(t("database_anonymization.creating_lightly_anonymized_database"));
const resp = await server.post('database/anonymize/light');
if (!resp.success) {
toastService.showError("Could not create anonymized database, check backend logs for details");
toastService.showError(t("database_anonymization.error_creating_anonymized_database"));
}
else {
toastService.showMessage(`Created lightly anonymized database in ${resp.anonymizedFilePath}`, 10000);
toastService.showMessage(t("database_anonymization.successfully_created_lightly_anonymized_database", { anonymizedFilePath: resp.anonymizedFilePath }), 10000);
}
this.refresh();
@ -69,7 +69,7 @@ export default class DatabaseAnonymizationOptions extends OptionsWidget {
this.$existingAnonymizedDatabases.empty();
if (!anonymizedDatabases.length) {
anonymizedDatabases = [{filePath: "no anonymized database yet"}];
anonymizedDatabases = [{filePath: t("database_anonymization.no_anonymized_database_yet")}];
}
for (const {filePath} of anonymizedDatabases) {

View File

@ -1,14 +1,15 @@
import OptionsWidget from "../options_widget.js";
import toastService from "../../../../services/toast.js";
import server from "../../../../services/server.js";
import { t } from "../../../../services/i18n.js";
const TPL = `
<div class="options-section">
<h4>Database Integrity Check</h4>
<h4>${t("database_integrity_check.title")}</h4>
<p>This will check that the database is not corrupted on the SQLite level. It might take some time, depending on the DB size.</p>
<p>${t("database_integrity_check.description")}</p>
<button class="check-integrity-button btn">Check database integrity</button>
<button class="check-integrity-button btn">${t("database_integrity_check.check_button")}</button>
</div>`;
export default class DatabaseIntegrityCheckOptions extends OptionsWidget {
@ -16,15 +17,15 @@ export default class DatabaseIntegrityCheckOptions extends OptionsWidget {
this.$widget = $(TPL);
this.$checkIntegrityButton = this.$widget.find(".check-integrity-button");
this.$checkIntegrityButton.on('click', async () => {
toastService.showMessage("Checking database integrity...");
toastService.showMessage(t("database_integrity_check.checking_integrity"));
const {results} = await server.get('database/check-integrity');
if (results.length === 1 && results[0].integrity_check === "ok") {
toastService.showMessage("Integrity check succeeded - no problems found.");
toastService.showMessage(t("database_integrity_check.integrity_check_succeeded"));
}
else {
toastService.showMessage(`Integrity check failed: ${JSON.stringify(results, null, 2)}`, 15000);
toastService.showMessage(t("database_integrity_check.integrity_check_failed", { results: JSON.stringify(results, null, 2) }), 15000);
}
});
}

View File

@ -1,13 +1,14 @@
import OptionsWidget from "../options_widget.js";
import server from "../../../../services/server.js";
import toastService from "../../../../services/toast.js";
import { t } from "../../../../services/i18n.js";
const TPL = `
<div class="options-section">
<h4>Sync</h4>
<button class="force-full-sync-button btn">Force full sync</button>
<h4>${t("sync.title")}</h4>
<button class="force-full-sync-button btn">${t("sync.force_full_sync_button")}</button>
<button class="fill-entity-changes-button btn">Fill entity changes records</button>
<button class="fill-entity-changes-button btn">${t("sync.fill_entity_changes_button")}</button>
</div>`;
export default class AdvancedSyncOptions extends OptionsWidget {
@ -18,15 +19,15 @@ export default class AdvancedSyncOptions extends OptionsWidget {
this.$forceFullSyncButton.on('click', async () => {
await server.post('sync/force-full-sync');
toastService.showMessage("Full sync triggered");
toastService.showMessage(t("sync.full_sync_triggered"));
});
this.$fillEntityChangesButton.on('click', async () => {
toastService.showMessage("Filling entity changes rows...");
toastService.showMessage(t("sync.filling_entity_changes"));
await server.post('sync/fill-entity-changes');
toastService.showMessage("Sync rows filled successfully");
toastService.showMessage(t("sync.sync_rows_filled_successfully"));
});
}

View File

@ -1,14 +1,15 @@
import OptionsWidget from "../options_widget.js";
import toastService from "../../../../services/toast.js";
import server from "../../../../services/server.js";
import { t } from "../../../../services/i18n.js";
const TPL = `
<div class="options-section">
<h4>Vacuum Database</h4>
<h4>${t("vacuum_database.title")}</h4>
<p>This will rebuild the database which will typically result in a smaller database file. No data will be actually changed.</p>
<p>${t("vacuum_database.description")}</p>
<button class="vacuum-database-button btn">Vacuum database</button>
<button class="vacuum-database-button btn">${t("vacuum_database.button_text")}</button>
</div>`;
export default class VacuumDatabaseOptions extends OptionsWidget {
@ -16,11 +17,11 @@ export default class VacuumDatabaseOptions extends OptionsWidget {
this.$widget = $(TPL);
this.$vacuumDatabaseButton = this.$widget.find(".vacuum-database-button");
this.$vacuumDatabaseButton.on('click', async () => {
toastService.showMessage("Vacuuming database...");
toastService.showMessage(t("vacuum_database.vacuuming_database"));
await server.post('database/vacuum-database');
toastService.showMessage("Database has been vacuumed");
toastService.showMessage(t("vacuum_database.database_vacuumed"));
});
}
}

View File

@ -926,5 +926,54 @@
"create_label": "首先,请创建一个带有您要嵌入的 URL 地址的标签,例如 #webViewSrc=\"https://www.bing.com\"",
"disclaimer": "实验性功能免责声明",
"experimental_note": "网页视图是一种实验性的笔记类型,将来可能会被移除或大幅更改。网页视图只在桌面端有效。"
},
"backend_log": {
"refresh": "刷新"
},
"consistency_checks": {
"title": "检查一致性",
"find_and_fix_button": "查找并修复一致性问题",
"finding_and_fixing_message": "正在查找并修复一致性问题...",
"issues_fixed_message": "一致性问题应该已被修复。"
},
"database_anonymization": {
"title": "数据库匿名化",
"full_anonymization": "完全匿名化",
"full_anonymization_description": "此操作将创建一个新的数据库副本并进行匿名化处理(删除所有笔记内容,仅保留结构和一些非敏感元数据),用来分享到网上做调试而不用担心泄漏你的个人资料。",
"save_fully_anonymized_database": "保存完全匿名化的数据库",
"light_anonymization": "轻度匿名化",
"light_anonymization_description": "此操作将创建一个新的数据库副本并对其进行轻度匿名化处理——仅删除所有笔记的内容但保留标题和属性。此外自定义JS前端/后端脚本笔记和自定义小部件将保留。这提供了更多上下文以调试问题。",
"choose_anonymization": "您可以自行决定是提供完全匿名化还是轻度匿名化的数据库。即使是完全匿名化的数据库也非常有用,但在某些情况下,轻度匿名化的数据库可以加快错误识别和修复的过程。",
"save_lightly_anonymized_database": "保存轻度匿名化的数据库",
"existing_anonymized_databases": "现有的匿名化数据库",
"creating_fully_anonymized_database": "正在创建完全匿名化的数据库...",
"creating_lightly_anonymized_database": "正在创建轻度匿名化的数据库...",
"error_creating_anonymized_database": "无法创建匿名化数据库,请检查后端日志以获取详细信息",
"successfully_created_fully_anonymized_database": "成功创建完全匿名化的数据库,路径为{{anonymizedFilePath}}",
"successfully_created_lightly_anonymized_database": "成功创建轻度匿名化的数据库,路径为{{anonymizedFilePath}}",
"no_anonymized_database_yet": "尚无匿名化数据库"
},
"database_integrity_check": {
"title": "数据库完整性检查",
"description": "检查SQLite数据库是否损坏。根据数据库的大小可能会需要一些时间。",
"check_button": "检查数据库完整性",
"checking_integrity": "正在检查数据库完整性...",
"integrity_check_succeeded": "完整性检查成功 - 未发现问题。",
"integrity_check_failed": "完整性检查失败: {{results}}"
},
"sync": {
"title": "同步",
"force_full_sync_button": "强制全量同步",
"fill_entity_changes_button": "填充实体变更记录",
"full_sync_triggered": "全量同步已触发",
"filling_entity_changes": "正在填充实体变更行...",
"sync_rows_filled_successfully": "同步行填充成功"
},
"vacuum_database": {
"title": "数据库清理",
"description": "这会重建数据库,通常会减少占用空间,不会删除数据。",
"button_text": "清理数据库",
"vacuuming_database": "正在清理数据库...",
"database_vacuumed": "数据库已清理"
}
}

View File

@ -927,5 +927,54 @@
"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"
}
}