diff --git a/app/src/mainMenuDefinition.js b/app/src/mainMenuDefinition.js index cdafb65c7..0c3585f2e 100644 --- a/app/src/mainMenuDefinition.js +++ b/app/src/mainMenuDefinition.js @@ -1,10 +1,10 @@ -function _t(key, { defaultMessage }) { - return global.TRANSLATION_DATA?.[key] || defaultMessage; -} +function _t(id, defaultMessage) { + return {id, defaultMessage}; +}; module.exports = ({ editMenu, isMac }) => [ { - label: _t('app.databaseName', { defaultMessage: 'DB NAME' }), + label: _t('menu.file', { defaultMessage: 'File' }), submenu: [ { command: 'new.connection', hideDisabled: true }, { command: 'new.sqliteDatabase', hideDisabled: true }, @@ -32,7 +32,7 @@ module.exports = ({ editMenu, isMac }) => [ }, editMenu ? { - label: 'Edit', + label: _t('menu.edit', { defaultMessage: 'Edit' }), submenu: [ { command: 'edit.undo' }, { command: 'edit.redo' }, @@ -57,7 +57,7 @@ module.exports = ({ editMenu, isMac }) => [ // ], // }, { - label: 'View', + label: _t('menu.view', { defaultMessage: 'View' }), submenu: [ { command: 'app.reload', hideDisabled: true }, { command: 'app.toggleDevTools', hideDisabled: true }, @@ -79,7 +79,7 @@ module.exports = ({ editMenu, isMac }) => [ ], }, { - label: 'Tools', + label: _t('menu.tools', { defaultMessage: 'Tools' }), submenu: [ { command: 'database.search', hideDisabled: true }, { command: 'commandPalette.show', hideDisabled: true }, @@ -106,7 +106,7 @@ module.exports = ({ editMenu, isMac }) => [ ] : []), { - label: 'Help', + label: _t('menu.help', { defaultMessage: 'Help' }), submenu: [ { command: 'app.openDocs', hideDisabled: true }, { command: 'app.openWeb', hideDisabled: true }, diff --git a/packages/web/src/appobj/DatabaseObjectAppObject.svelte b/packages/web/src/appobj/DatabaseObjectAppObject.svelte index d46294c5d..c7ea24918 100644 --- a/packages/web/src/appobj/DatabaseObjectAppObject.svelte +++ b/packages/web/src/appobj/DatabaseObjectAppObject.svelte @@ -719,7 +719,11 @@ const filteredSumenus = coreMenus.map(item => { if (!item.submenu) { - return { ...item , label: _val(item.label)}; + if (!item) return item; + + return {...item, + label: _val(item.label) + }; } return { ...item, diff --git a/packages/web/src/commands/recentDatabaseSwitch.ts b/packages/web/src/commands/recentDatabaseSwitch.ts index 36dbb0c0f..a9fd3af2f 100644 --- a/packages/web/src/commands/recentDatabaseSwitch.ts +++ b/packages/web/src/commands/recentDatabaseSwitch.ts @@ -27,7 +27,7 @@ registerCommand({ id: 'database.switch', category: __t('command.database', { defaultMessage: 'Database' }), name: __t('command.database.changeRecent', { defaultMessage: 'Change to recent' }), - menuName: 'Switch recent database', + menuName: __t('command.database.switchRecent', { defaultMessage: 'Switch recent database' }), keyText: 'CtrlOrCommand+D', getSubCommands: () => getRecentDatabases().map(switchDatabaseCommand), }); diff --git a/packages/web/src/commands/registerCommand.ts b/packages/web/src/commands/registerCommand.ts index 0c5d44108..0d4d0c649 100644 --- a/packages/web/src/commands/registerCommand.ts +++ b/packages/web/src/commands/registerCommand.ts @@ -26,7 +26,7 @@ export interface GlobalCommand { enabled?: boolean; showDisabled?: boolean; toolbarName?: string | (() => string); - menuName?: string; + menuName?: string | (() => string); toolbarOrder?: number; disableHandleKeyText?: string; isRelatedToTab?: boolean; diff --git a/packages/web/src/commands/stdCommands.ts b/packages/web/src/commands/stdCommands.ts index 54f0f3854..073fa7683 100644 --- a/packages/web/src/commands/stdCommands.ts +++ b/packages/web/src/commands/stdCommands.ts @@ -192,7 +192,7 @@ registerCommand({ category: __t('command.new', { defaultMessage: 'New' }), icon: 'img shell', name: __t('command.new.shell', { defaultMessage: 'JavaScript Shell' }), - menuName: 'New JavaScript shell', + menuName: __t('command.new.JSShell', { defaultMessage: 'New JavaScript shell' }), onClick: () => { openNewTab({ title: 'Shell #', @@ -208,7 +208,7 @@ if (isProApp()) { category: __t('command.new', { defaultMessage: 'New' }), icon: 'img query-design', name: __t('command.new.queryDesign', { defaultMessage: 'Query design' }), - menuName: 'New query design', + menuName: __t('command.new.newQueryDesign', { defaultMessage: 'New query design' }), onClick: () => newQueryDesign(), testEnabled: () => getCurrentDatabase() && @@ -222,7 +222,7 @@ if (isProApp()) { category: __t('command.new', { defaultMessage: 'New' }), icon: 'img transform', name: __t('command.new.modelTransform', { defaultMessage: 'Model transform' }), - menuName: 'New model transform', + menuName: __t('command.new.newModelTransform', { defaultMessage: 'New model transform' }), onClick: () => { openNewTab( { @@ -266,7 +266,7 @@ if (isProApp()) { category: __t('command.new', { defaultMessage: 'New' }), icon: 'img perspective', name: __t('command.new.perspective', { defaultMessage: 'Perspective' }), - menuName: 'New perspective', + menuName: __t('command.new.newPerspective', { defaultMessage: 'New perspective' }), onClick: () => newPerspective(), }); } @@ -277,7 +277,7 @@ if (isProApp()) { category: __t('command.new', { defaultMessage: 'New' }), icon: 'img app', name: __t('command.new.application', { defaultMessage: 'Application' }), - menuName: 'New application', + menuName: __t('command.new.newApplication', { defaultMessage: 'New application' }), onClick: () => { openNewTab({ title: 'Application #', @@ -293,7 +293,7 @@ registerCommand({ category: __t('command.new', { defaultMessage: 'New' }), icon: 'img diagram', name: __t('command.new.diagram', { defaultMessage: 'ER Diagram' }), - menuName: 'New ER diagram', + menuName: __t('command.new.newDiagram', { defaultMessage: 'New ER diagram' }), testEnabled: () => getCurrentDatabase() && findEngineDriver(getCurrentDatabase()?.connection, getExtensions())?.databaseEngineTypes?.includes('sql'), @@ -416,7 +416,7 @@ registerCommand({ category: __t('command.new', { defaultMessage: 'New' }), icon: 'img archive', name: __t('command.new.jsonl', { defaultMessage: 'JSON Lines' }), - menuName: 'New JSON lines file', + menuName: __t('command.new.newJsonl', { defaultMessage: 'New JSON lines file' }), onClick: () => { openNewTab( { @@ -436,7 +436,7 @@ registerCommand({ category: __t('command.new', { defaultMessage: 'New' }), icon: 'img sqlite-database', name: __t('command.new.sqliteDatabase', { defaultMessage: 'SQLite database' }), - menuName: _t('command.new.sqliteDatabase', { defaultMessage: 'New SQLite database' }), + menuName: __t('command.new.sqliteDatabase', { defaultMessage: 'New SQLite database' }), onClick: () => { showModal(InputTextModal, { value: 'newdb', @@ -456,7 +456,7 @@ registerCommand({ category: __t('command.new', { defaultMessage: 'New' }), icon: 'img sqlite-database', name: __t('command.new.duckdbDatabase', { defaultMessage: 'DuckDB database' }), - menuName: _t('command.new.duckdbDatabase', { defaultMessage: 'New DuckDB database' }), + menuName: __t('command.new.duckdbDatabase', { defaultMessage: 'New DuckDB database' }), onClick: () => { showModal(InputTextModal, { value: 'newdb', diff --git a/packages/web/src/modals/HorizontalMenu.svelte b/packages/web/src/modals/HorizontalMenu.svelte index b85c986ed..8dcbca5da 100644 --- a/packages/web/src/modals/HorizontalMenu.svelte +++ b/packages/web/src/modals/HorizontalMenu.svelte @@ -2,6 +2,7 @@ import { commandsCustomized, currentDropDownMenu } from '../stores'; import { prepareMenuItems } from '../utility/contextMenu'; import DropDownMenu from './DropDownMenu.svelte'; + import { _t } from '../translations'; export let items; @@ -37,7 +38,7 @@ } }} > - {item.text || item.label} + {item.text || _t(item.label.id, item.label.defaultMessage)} {/each} diff --git a/packages/web/src/settings/FormDefaultActionField.svelte b/packages/web/src/settings/FormDefaultActionField.svelte index f0cdeb3bc..a9c77fc24 100644 --- a/packages/web/src/settings/FormDefaultActionField.svelte +++ b/packages/web/src/settings/FormDefaultActionField.svelte @@ -4,6 +4,7 @@ import FormSelectField from '../forms/FormSelectField.svelte'; import SelectField from '../forms/SelectField.svelte'; import { lastUsedDefaultActions } from '../stores'; + import { _val } from '../translations'; export let label; export let objectTypeField; @@ -18,7 +19,7 @@ defaultValue={defaultDatabaseObjectAppObjectActions[objectTypeField][0]?.defaultActionId} options={defaultDatabaseObjectAppObjectActions[objectTypeField].map(x => ({ value: x.defaultActionId, - label: x.label, + label: _val(x.label), }))} value={$lastUsedDefaultActions[objectTypeField]} on:change={e => { diff --git a/packages/web/src/settings/SettingsModal.svelte b/packages/web/src/settings/SettingsModal.svelte index ba062e1ed..e1bbaea9f 100644 --- a/packages/web/src/settings/SettingsModal.svelte +++ b/packages/web/src/settings/SettingsModal.svelte @@ -126,7 +126,7 @@ ORDER BY