i18n: Translate toast errors

This commit is contained in:
Elian Doran 2024-10-20 02:19:47 +03:00
parent 28f6712a4f
commit 26e4decaec
No known key found for this signature in database
8 changed files with 47 additions and 19 deletions

View File

@ -172,7 +172,7 @@ export default class Entrypoints extends Component {
const resp = await server.post(`sql/execute/${note.noteId}`); const resp = await server.post(`sql/execute/${note.noteId}`);
if (!resp.success) { if (!resp.success) {
toastService.showError(`Error occurred while executing SQL query: ${resp.error}`); toastService.showError(t("entrypoints.sql-error", { message: resp.error }));
} }
await appContext.triggerEvent('sqlQueryResults', {ntxId: ntxId, results: resp.results}); await appContext.triggerEvent('sqlQueryResults', {ntxId: ntxId, results: resp.results});

View File

@ -13,7 +13,7 @@ async function moveBeforeBranch(branchIdsToMove, beforeBranchId) {
const beforeBranch = froca.getBranch(beforeBranchId); const beforeBranch = froca.getBranch(beforeBranchId);
if (['root', '_lbRoot', '_lbAvailableLaunchers', '_lbVisibleLaunchers'].includes(beforeBranch.noteId)) { if (['root', '_lbRoot', '_lbAvailableLaunchers', '_lbVisibleLaunchers'].includes(beforeBranch.noteId)) {
toastService.showError('Cannot move notes here.'); toastService.showError(t("branches.cannot-move-notes-here"));
return; return;
} }
@ -42,7 +42,7 @@ async function moveAfterBranch(branchIdsToMove, afterBranchId) {
]; ];
if (forbiddenNoteIds.includes(afterNote.noteId)) { if (forbiddenNoteIds.includes(afterNote.noteId)) {
toastService.showError('Cannot move notes here.'); toastService.showError(t("branches.cannot-move-notes-here"));
return; return;
} }
@ -62,7 +62,7 @@ async function moveToParentNote(branchIdsToMove, newParentBranchId) {
const newParentBranch = froca.getBranch(newParentBranchId); const newParentBranch = froca.getBranch(newParentBranchId);
if (newParentBranch.noteId === '_lbRoot') { if (newParentBranch.noteId === '_lbRoot') {
toastService.showError('Cannot move notes here.'); toastService.showError(t("branches.cannot-move-notes-here"));
return; return;
} }

View File

@ -217,8 +217,7 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain
*/ */
this.runOnBackend = async (func, params = []) => { this.runOnBackend = async (func, params = []) => {
if (func?.constructor.name === "AsyncFunction" || func?.startsWith?.("async ")) { if (func?.constructor.name === "AsyncFunction" || func?.startsWith?.("async ")) {
toastService.showError("You're passing an async function to api.runOnBackend() which will likely not work as you intended. " toastService.showError(t("frontend_script_api.async_warning"));
+ "Either make the function synchronous (by removing 'async' keyword), or use api.runAsyncOnBackendWithManualTransactionHandling()");
} }
return await this.__runOnBackendInner(func, params, true); return await this.__runOnBackendInner(func, params, true);
@ -240,8 +239,7 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain
*/ */
this.runAsyncOnBackendWithManualTransactionHandling = async (func, params = []) => { this.runAsyncOnBackendWithManualTransactionHandling = async (func, params = []) => {
if (func?.constructor.name === "Function" || func?.startsWith?.("function")) { if (func?.constructor.name === "Function" || func?.startsWith?.("function")) {
toastService.showError("You're passing a synchronous function to api.runAsyncOnBackendWithManualTransactionHandling(), " + toastService.showError(t("frontend_script_api.sync_warning"));
"while you should likely use api.runOnBackend() instead.");
} }
return await this.__runOnBackendInner(func, params, false); return await this.__runOnBackendInner(func, params, false);

View File

@ -36,7 +36,7 @@ export async function uploadFiles(entityType, parentNoteId, files, options) {
type: 'POST', type: 'POST',
timeout: 60 * 60 * 1000, timeout: 60 * 60 * 1000,
error: function (xhr) { error: function (xhr) {
toastService.showError(`Import failed: ${xhr.responseText}`); toastService.showError(t("import.failed", { message: xhr.responseText }));
}, },
contentType: false, // NEEDED, DON'T REMOVE THIS contentType: false, // NEEDED, DON'T REMOVE THIS
processData: false, // NEEDED, DON'T REMOVE THIS processData: false, // NEEDED, DON'T REMOVE THIS

View File

@ -50,7 +50,7 @@ async function setupProtectedSession(password) {
const response = await server.post('login/protected', { password: password }); const response = await server.post('login/protected', { password: password });
if (!response.success) { if (!response.success) {
toastService.showError("Wrong password.", 3000); toastService.showError(t("protected_session.wrong_password"), 3000);
return; return;
} }

View File

@ -114,10 +114,10 @@ async function handleMessage(event) {
await executeFrontendUpdate(message.data.entityChanges); await executeFrontendUpdate(message.data.entityChanges);
} }
else if (message.type === 'sync-hash-check-failed') { else if (message.type === 'sync-hash-check-failed') {
toastService.showError("Sync check failed!", 60000); toastService.showError(t("ws.sync-check-failed"), 60000);
} }
else if (message.type === 'consistency-checks-failed') { else if (message.type === 'consistency-checks-failed') {
toastService.showError("Consistency checks failed! See logs for details.", 50 * 60000); toastService.showError(t("ws.consistency-checks-failed"), 50 * 60000);
} }
else if (message.type === 'api-log-messages') { else if (message.type === 'api-log-messages') {
appContext.triggerEvent("apiLogMessages", {noteId: message.noteId, messages: message.messages}); appContext.triggerEvent("apiLogMessages", {noteId: message.noteId, messages: message.messages});
@ -189,7 +189,7 @@ async function consumeFrontendUpdateData() {
else { else {
console.log("nonProcessedEntityChanges causing the timeout", nonProcessedEntityChanges); console.log("nonProcessedEntityChanges causing the timeout", nonProcessedEntityChanges);
toastService.showError(`Encountered error "${e.message}", check out the console.`); toastService.showError(t("ws.encountered-error", { message: e.message }));
} }
} }

View File

@ -166,7 +166,8 @@
"textImportedAsText": "Import HTML, Markdown and TXT as text notes if it's unclear from metadata", "textImportedAsText": "Import HTML, Markdown and TXT as text notes if it's unclear from metadata",
"codeImportedAsCode": "Import recognized code files (e.g. <code>.json</code>) as code notes if it's unclear from metadata", "codeImportedAsCode": "Import recognized code files (e.g. <code>.json</code>) as code notes if it's unclear from metadata",
"replaceUnderscoresWithSpaces": "Replace underscores with spaces in imported note names", "replaceUnderscoresWithSpaces": "Replace underscores with spaces in imported note names",
"import": "Import" "import": "Import",
"failed": "Import failed: {{message}}."
}, },
"include_note": { "include_note": {
"dialog_title": "Include note", "dialog_title": "Include note",
@ -924,7 +925,8 @@
"protected_session": { "protected_session": {
"enter_password_instruction": "Showing protected note requires entering your password:", "enter_password_instruction": "Showing protected note requires entering your password:",
"start_session_button": "Start protected session", "start_session_button": "Start protected session",
"started": "Protected session has been started." "started": "Protected session has been started.",
"wrong_password": "Wrong password."
}, },
"relation_map": { "relation_map": {
"open_in_new_tab": "Open in new tab", "open_in_new_tab": "Open in new tab",
@ -1446,6 +1448,19 @@
}, },
"entrypoints": { "entrypoints": {
"note-revision-created": "Note revision has been created.", "note-revision-created": "Note revision has been created.",
"note-executed": "Note executed." "note-executed": "Note executed.",
"sql-error": "Error occurred while executing SQL query: {{message}}"
},
"branches": {
"cannot-move-notes-here": "Cannot move notes here."
},
"frontend_script_api": {
"async_warning": "You're passing an async function to `api.runOnBackend()` which will likely not work as you intended.\\nEither make the function synchronous (by removing `async` keyword), or use `api.runAsyncOnBackendWithManualTransactionHandling()`.",
"sync_warning": "You're passing a synchronous function to `api.runAsyncOnBackendWithManualTransactionHandling()`,\\nwhile you should likely use `api.runOnBackend()` instead."
},
"ws": {
"sync-check-failed": "Sync check failed!",
"consistency-checks-failed": "Consistency checks failed! See logs for details.",
"encountered-error": "Encountered error \"{{message}}\", check out the console."
} }
} }

View File

@ -685,7 +685,8 @@
"safeImportTooltip": "Fișierele de Trilium exportate în format <code>.zip</code> pot conține scripturi executabile ce pot avea un comportament malițios. Importarea sigură va dezactiva execuția automată a tuturor scripturilor importate. Debifați „Importare sigură” dacă arhiva importată conține scripturi executabile dorite și aveți încredere deplină în conținutul acestora.", "safeImportTooltip": "Fișierele de Trilium exportate în format <code>.zip</code> pot conține scripturi executabile ce pot avea un comportament malițios. Importarea sigură va dezactiva execuția automată a tuturor scripturilor importate. Debifați „Importare sigură” dacă arhiva importată conține scripturi executabile dorite și aveți încredere deplină în conținutul acestora.",
"shrinkImages": "Micșorare imagini", "shrinkImages": "Micșorare imagini",
"shrinkImagesTooltip": "<p>Dacă bifați această opțiune, Trilium va încerca să micșoreze imaginea importată prin scalarea și importarea ei, aspect ce poate afecta calitatea aparentă a imaginii. Dacă nu este bifat, imaginile vor fi importate fără nicio modificare.</p><p>Acest lucru nu se aplică la importuri de tip <code>.zip</code> cu metainformații deoarece se asumă că aceste fișiere sunt deja optimizate.</p>", "shrinkImagesTooltip": "<p>Dacă bifați această opțiune, Trilium va încerca să micșoreze imaginea importată prin scalarea și importarea ei, aspect ce poate afecta calitatea aparentă a imaginii. Dacă nu este bifat, imaginile vor fi importate fără nicio modificare.</p><p>Acest lucru nu se aplică la importuri de tip <code>.zip</code> cu metainformații deoarece se asumă că aceste fișiere sunt deja optimizate.</p>",
"textImportedAsText": "Importă HTML, Markdown și TXT ca notițe de tip text dacă este neclar din metainformații" "textImportedAsText": "Importă HTML, Markdown și TXT ca notițe de tip text dacă este neclar din metainformații",
"failed": "Eroare la importare: {{message}}."
}, },
"include_archived_notes": { "include_archived_notes": {
"include_archived_notes": "Include notițele arhivate" "include_archived_notes": "Include notițele arhivate"
@ -906,7 +907,8 @@
"protected_session": { "protected_session": {
"enter_password_instruction": "Afișarea notițelor protejate necesită introducerea parolei:", "enter_password_instruction": "Afișarea notițelor protejate necesită introducerea parolei:",
"start_session_button": "Deschide sesiunea protejată", "start_session_button": "Deschide sesiunea protejată",
"started": "Sesiunea protejată este activă." "started": "Sesiunea protejată este activă.",
"wrong_password": "Parolă greșită."
}, },
"protected_session_password": { "protected_session_password": {
"close_label": "Închide", "close_label": "Închide",
@ -1439,7 +1441,8 @@
}, },
"entrypoints": { "entrypoints": {
"note-executed": "Notița a fost executată.", "note-executed": "Notița a fost executată.",
"note-revision-created": "S-a creat o revizie a notiței." "note-revision-created": "S-a creat o revizie a notiței.",
"sql-error": "A apărut o eroare la executarea interogării SQL: {{message}}"
}, },
"image": { "image": {
"cannot-copy": "Nu s-a putut copia în clipboard referința către imagine.", "cannot-copy": "Nu s-a putut copia în clipboard referința către imagine.",
@ -1447,5 +1450,17 @@
}, },
"note_create": { "note_create": {
"duplicated": "Notița „{{title}}” a fost dublificată." "duplicated": "Notița „{{title}}” a fost dublificată."
},
"branches": {
"cannot-move-notes-here": "Nu se pot muta notițe aici."
},
"frontend_script_api": {
"async_warning": "Ați trimis o funcție asincronă metodei `api.runOnBackend()` și este posibil să nu se comporte așa cum vă așteptați.\\nFie faceți metoda sincronă (prin ștergerea cuvântului-cheie `async`), sau folosiți `api.runAsyncOnBackendWithManualTransactionHandling()`.",
"sync_warning": "Ați trimis o funcție sincronă funcției `api.runAsyncOnBackendWithManualTransactionHandling()`,\\ndar cel mai probabil trebuie folosit `api.runOnBackend()` în schimb."
},
"ws": {
"consistency-checks-failed": "Au fost identificate erori de consistență! Vedeți mai multe detalii în loguri.",
"encountered-error": "A fost întâmpinată o eroare: „{{message}}”. Vedeți în loguri pentru mai multe detalii.",
"sync-check-failed": "Verificările de sincronizare au eșuat!"
} }
} }