diff --git a/app/src/electron.js b/app/src/electron.js index 0d43be738..e798be665 100644 --- a/app/src/electron.js +++ b/app/src/electron.js @@ -31,6 +31,10 @@ let mainModule; let appUpdateStatus = ''; let settingsJson = {}; +function _t(key, { defaultMessage } = {}) { + return global.TRANSLATION_DATA?.[key] || defaultMessage; +} + process.on('uncaughtException', function (error) { console.error('uncaughtException', error); }); @@ -63,6 +67,7 @@ try { let mainWindow; let mainMenu; let runCommandOnLoad = null; +let mainWindowMenuSet = false; log.transports.file.level = 'debug'; autoUpdater.logger = log; @@ -93,7 +98,7 @@ function commandItem(item, disableAll = false) { } return { id, - label: command ? command.menuName || command.toolbarName || command.name : id, + label: command ? _t(command.menuName) || _t(command.toolbarName) || command.name : id, accelerator: formatKeyText(command ? command.keyText : undefined), enabled: command ? command.enabled && (!disableAll || command.systemCommand) : false, click() { @@ -155,11 +160,14 @@ ipcMain.on('update-commands', async (event, arg) => { const command = commands[key]; // rebuild menu - if (menu.label != command.text || menu.accelerator != command.keyText) { + if (menu.label != command.text || (menu.accelerator != command.keyText && global.TRANSLATION_DATA)) { mainMenu = buildMenu(isModalOpened || !!dbgatePage); Menu.setApplicationMenu(mainMenu); - // mainWindow.setMenu(mainMenu); + if (!mainWindowMenuSet) { + mainWindow.setMenu(mainMenu); + mainWindowMenuSet = true; + } return; } @@ -306,6 +314,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 +396,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..cdafb65c7 100644 --- a/app/src/mainMenuDefinition.js +++ b/app/src/mainMenuDefinition.js @@ -1,6 +1,10 @@ +function _t(key, { defaultMessage }) { + return global.TRANSLATION_DATA?.[key] || defaultMessage; +} + module.exports = ({ editMenu, isMac }) => [ { - label: 'File', + label: _t('app.databaseName', { defaultMessage: 'DB NAME' }), submenu: [ { command: 'new.connection', hideDisabled: true }, { command: 'new.sqliteDatabase', hideDisabled: true }, diff --git a/packages/web/src/App.svelte b/packages/web/src/App.svelte index 4f25380d9..d893be247 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,11 @@ installCloudListeners(); refreshPublicCloudFiles(); saveSelectedLanguageToCache(); + + const electron = getElectron(); + if (electron) { + electron.send('translation-data', JSON.stringify(getCurrentTranslations())); + } } loadedApi = loadedApiValue; diff --git a/packages/web/src/translations.ts b/packages/web/src/translations.ts index 0a97dac06..708acd3d2 100644 --- a/packages/web/src/translations.ts +++ b/packages/web/src/translations.ts @@ -58,6 +58,11 @@ function getTranslation(key: string, defaultMessage: string, language: string) { return translation; } +export function getCurrentTranslations(): Record { + const selectedLanguage = getSelectedLanguage(); + return translations[selectedLanguage] || {}; +} + export function _t(key: string, options: TranslateOptions): string { const { defaultMessage, values } = options;