From b45fde2e5f04628e57584291b4df43ccf19a7fd1 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 8 Sep 2024 15:05:18 +0300 Subject: [PATCH] server: Set up early initialization of i18n --- electron.ts | 2 +- package.json | 16 ++++++++-------- src/main.ts | 26 ++++++++++++++++++++++++++ src/services/keyboard_actions.ts | 3 ++- src/www.ts | 16 ++-------------- 5 files changed, 39 insertions(+), 24 deletions(-) create mode 100644 src/main.ts diff --git a/electron.ts b/electron.ts index 0f0e03cd0..6ebf9a9cf 100644 --- a/electron.ts +++ b/electron.ts @@ -70,4 +70,4 @@ electron.app.on("will-quit", () => { // this is to disable electron warning spam in the dev console (local development only) process.env["ELECTRON_DISABLE_SECURITY_WARNINGS"] = "true"; -await import('./src/www.js'); +await import('./src/main.js'); diff --git a/package.json b/package.json index 49406a256..9c2d773f1 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ }, "copyright": "", "bin": { - "trilium": "src/www.js" + "trilium": "src/main.js" }, "repository": { "type": "git", @@ -20,10 +20,10 @@ }, "type": "module", "scripts": { - "start-server": "cross-env TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/www.ts", - "start-server-safe": "cross-env TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/www.ts", - "start-server-no-dir": "cross-env TRILIUM_SAFE_MODE=1 TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/www.ts", - "start-test-server": "npm run switch-server; rimraf ./data-test; cross-env TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data-test TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev TRILIUM_PORT=9999 ts-node src/www.ts", + "start-server": "cross-env TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/main.ts", + "start-server-safe": "cross-env TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/main.ts", + "start-server-no-dir": "cross-env TRILIUM_SAFE_MODE=1 TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/main.ts", + "start-test-server": "npm run switch-server; rimraf ./data-test; cross-env TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data-test TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev TRILIUM_PORT=9999 ts-node src/main.ts", "qstart-server": "npm run switch-server && npm run start-server", "start-electron": "npm run prepare-dist && cross-env TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron ./dist/electron.js --inspect=5858 .", "start-electron-no-dir": "cross-env TRILIUM_SAFE_MODE=1 TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 electron --inspect=5858 .", @@ -43,9 +43,9 @@ "prepare-dist": "rimraf ./dist && tsc && tsx ./bin/copy-dist.ts", "update-build-info": "tsx bin/update-build-info.ts", "errors": "tsc --watch --noEmit", - "integration-edit-db": "cross-env TRILIUM_INTEGRATION_TEST=edit TRILIUM_PORT=8081 TRILIUM_DATA_DIR=./integration-tests/db nodemon src/www.ts", - "integration-mem-db": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_DATA_DIR=./integration-tests/db nodemon src/www.ts", - "integration-mem-db-dev": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/www.ts", + "integration-edit-db": "cross-env TRILIUM_INTEGRATION_TEST=edit TRILIUM_PORT=8081 TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", + "integration-mem-db": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", + "integration-mem-db-dev": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", "generate-document": "cross-env nodemon src/tools/generate_document.ts 1000" }, "dependencies": { diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 000000000..2878ca818 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,26 @@ +import i18next from "i18next"; +import Backend from "i18next-fs-backend"; +/* + * Make sure not to import any modules that depend on localized messages via i18next here, as the initializations + * are loaded later and will result in an empty string. + */ + +async function initializeTranslations() { + // Initialize translations + await i18next.use(Backend).init({ + lng: "ro", + fallbackLng: "en", + ns: "server", + backend: { + loadPath: "translations/{{lng}}/{{ns}}.json" + }, + debug: true + }); +} + +async function startApplication() { + await import("./www.js"); +} + +await initializeTranslations(); +await startApplication(); \ No newline at end of file diff --git a/src/services/keyboard_actions.ts b/src/services/keyboard_actions.ts index 28e3aeeb4..25c438a48 100644 --- a/src/services/keyboard_actions.ts +++ b/src/services/keyboard_actions.ts @@ -4,6 +4,7 @@ import optionService from "./options.js"; import log from "./log.js"; import utils from "./utils.js"; import { KeyboardShortcut } from './keyboard_actions_interface.js'; +import { t } from "i18next"; const isMac = process.platform === "darwin"; const isElectron = utils.isElectron(); @@ -19,7 +20,7 @@ const isElectron = utils.isElectron(); const DEFAULT_KEYBOARD_ACTIONS: KeyboardShortcut[] = [ { - separator: "Note navigation" + separator: t("keyboard-actions.note-navigation") }, { actionName: "backInNoteHistory", diff --git a/src/www.ts b/src/www.ts index 8b67fe75c..e7632c506 100644 --- a/src/www.ts +++ b/src/www.ts @@ -1,4 +1,5 @@ #!/usr/bin/env node + import app from "./app.js"; import sessionParser from "./routes/session_parser.js"; import fs from "fs"; @@ -12,8 +13,6 @@ import utils from "./services/utils.js"; import port from "./services/port.js"; import host from "./services/host.js"; import semver from "semver"; -import i18next from "i18next"; -import Backend from "i18next-fs-backend"; // setup basic error handling even before requiring dependencies, since those can produce errors as well @@ -57,18 +56,7 @@ async function startTrilium() { */ if (utils.isElectron()) { (await import('electron')).app.requestSingleInstanceLock(); - } - - // Initialize translations - i18next.use(Backend).init({ - lng: "ro", - fallbackLng: "en", - ns: "server", - backend: { - loadPath: "translations/{{lng}}/{{ns}}.json" - }, - debug: true - }); + } log.info(JSON.stringify(appInfo, null, 2));