diff --git a/app/src/electron.js b/app/src/electron.js index 0d43be738..08fbf12af 100644 --- a/app/src/electron.js +++ b/app/src/electron.js @@ -31,6 +31,16 @@ let mainModule; let appUpdateStatus = ''; let settingsJson = {}; +function getTranslated(key) { + if (typeof key === 'string' && global.TRANSLATION_DATA?.[key]) { + return global.TRANSLATION_DATA?.[key]; + } + if (typeof key?._transKey === 'string') { + return global.TRANSLATION_DATA?.[key._transKey] ?? key._transOptions?.defaultMessage; + } + return key; +} + process.on('uncaughtException', function (error) { console.error('uncaughtException', error); }); @@ -63,6 +73,7 @@ try { let mainWindow; let mainMenu; let runCommandOnLoad = null; +let mainWindowMenuSet = false; log.transports.file.level = 'debug'; autoUpdater.logger = log; @@ -91,9 +102,14 @@ function commandItem(item, disableAll = false) { if (item.skipInApp) { return { skip: true }; } + if (!command) { + return { skip: true }; + } return { id, - label: command ? command.menuName || command.toolbarName || command.name : id, + label: command + ? getTranslated(command.menuName) || getTranslated(command.toolbarName) || getTranslated(command.name) + : id, accelerator: formatKeyText(command ? command.keyText : undefined), enabled: command ? command.enabled && (!disableAll || command.systemCommand) : false, click() { @@ -155,11 +171,14 @@ ipcMain.on('update-commands', async (event, arg) => { const command = commands[key]; // rebuild menu - if (menu.label != command.text || menu.accelerator != command.keyText) { + if (global.TRANSLATION_DATA && (menu.label != command.text || menu.accelerator != command.keyText)) { mainMenu = buildMenu(isModalOpened || !!dbgatePage); Menu.setApplicationMenu(mainMenu); - // mainWindow.setMenu(mainMenu); + if (!mainWindowMenuSet) { + mainWindow.setMenu(mainMenu); + mainWindowMenuSet = true; + } return; } @@ -306,6 +325,12 @@ ipcMain.on('check-for-updates', async (event, url) => { autoUpdater.autoDownload = false; autoUpdater.checkForUpdates(); }); +ipcMain.on('translation-data', async (event, arg) => { + global.TRANSLATION_DATA = JSON.parse(arg); + mainMenu = buildMenu(); + Menu.setApplicationMenu(mainMenu); + mainWindow.setMenu(mainMenu); +}); function fillMissingSettings(value) { const res = { @@ -382,8 +407,8 @@ function createWindow() { mainWindow.setFullScreen(true); } - mainMenu = buildMenu(); - mainWindow.setMenu(mainMenu); + // mainMenu = buildMenu(); + // mainWindow.setMenu(mainMenu); function loadMainWindow() { const startUrl = diff --git a/app/src/mainMenuDefinition.js b/app/src/mainMenuDefinition.js index 466999fc2..4a039206f 100644 --- a/app/src/mainMenuDefinition.js +++ b/app/src/mainMenuDefinition.js @@ -1,6 +1,10 @@ -module.exports = ({ editMenu, isMac }) => [ +function _t(key, { defaultMessage, currentTranslations } = {}) { + return (currentTranslations || global.TRANSLATION_DATA)?.[key] || defaultMessage; +} + +module.exports = ({ editMenu, isMac }, currentTranslations = null) => [ { - label: 'File', + label: _t('menu.file', { defaultMessage: 'File', currentTranslations }), submenu: [ { command: 'new.connection', hideDisabled: true }, { command: 'new.sqliteDatabase', hideDisabled: true }, @@ -28,7 +32,7 @@ module.exports = ({ editMenu, isMac }) => [ }, editMenu ? { - label: 'Edit', + label: _t('menu.edit', { defaultMessage: 'Edit', currentTranslations }), submenu: [ { command: 'edit.undo' }, { command: 'edit.redo' }, @@ -53,7 +57,7 @@ module.exports = ({ editMenu, isMac }) => [ // ], // }, { - label: 'View', + label: _t('menu.view', { defaultMessage: 'View', currentTranslations }), submenu: [ { command: 'app.reload', hideDisabled: true }, { command: 'app.toggleDevTools', hideDisabled: true }, @@ -75,7 +79,7 @@ module.exports = ({ editMenu, isMac }) => [ ], }, { - label: 'Tools', + label: _t('menu.tools', { defaultMessage: 'Tools', currentTranslations }), submenu: [ { command: 'database.search', hideDisabled: true }, { command: 'commandPalette.show', hideDisabled: true }, @@ -102,7 +106,7 @@ module.exports = ({ editMenu, isMac }) => [ ] : []), { - label: 'Help', + label: _t('menu.help', { defaultMessage: 'Help', currentTranslations }), submenu: [ { command: 'app.openDocs', hideDisabled: true }, { command: 'app.openWeb', hideDisabled: true }, diff --git a/packages/web/src/App.svelte b/packages/web/src/App.svelte index 4f25380d9..5b08bb170 100644 --- a/packages/web/src/App.svelte +++ b/packages/web/src/App.svelte @@ -27,7 +27,7 @@ import SettingsListener from './utility/SettingsListener.svelte'; import { handleAuthOnStartup } from './clientAuth'; import { initializeAppUpdates } from './utility/appUpdate'; - import { _t, saveSelectedLanguageToCache } from './translations'; + import { _t, getCurrentTranslations, saveSelectedLanguageToCache } from './translations'; import { installCloudListeners } from './utility/cloudListeners'; export let isAdminPage = false; @@ -62,6 +62,12 @@ installCloudListeners(); refreshPublicCloudFiles(); saveSelectedLanguageToCache(); + + const electron = getElectron(); + if (electron) { + electron.send('translation-data', JSON.stringify(getCurrentTranslations())); + global.TRANSLATION_DATA = getCurrentTranslations(); + } } loadedApi = loadedApiValue; diff --git a/packages/web/src/appobj/AppObjectList.svelte b/packages/web/src/appobj/AppObjectList.svelte index b1a7c8393..7846d5f48 100644 --- a/packages/web/src/appobj/AppObjectList.svelte +++ b/packages/web/src/appobj/AppObjectList.svelte @@ -8,7 +8,7 @@ import Link from '../elements/Link.svelte'; import { focusedConnectionOrDatabase } from '../stores'; import { tick } from 'svelte'; - import { _val } from '../translations'; + import { _tval } from '../translations'; export let list; export let module; @@ -41,12 +41,12 @@ $: listTranslated = (list || []).map(data => ({ ...data, - group: data?.group && _val(data.group), - title: data?.title && _val(data.title), - description: data?.description && _val(data.description), + group: data?.group && _tval(data.group), + title: data?.title && _tval(data.title), + description: data?.description && _tval(data.description), args: (data?.args || []).map(x => ({ ...x, - label: x?.label && _val(x.label), + label: x?.label && _tval(x.label), })), })); diff --git a/packages/web/src/appobj/DatabaseObjectAppObject.svelte b/packages/web/src/appobj/DatabaseObjectAppObject.svelte index d46294c5d..21cd3efc2 100644 --- a/packages/web/src/appobj/DatabaseObjectAppObject.svelte +++ b/packages/web/src/appobj/DatabaseObjectAppObject.svelte @@ -1,6 +1,6 @@