diff --git a/packages/web/src/appobj/AppFileAppObject.svelte b/packages/web/src/appobj/AppFileAppObject.svelte index f3ed7e257..6cb769459 100644 --- a/packages/web/src/appobj/AppFileAppObject.svelte +++ b/packages/web/src/appobj/AppFileAppObject.svelte @@ -53,14 +53,15 @@ import InputTextModal from '../modals/InputTextModal.svelte'; import ConfirmModal from '../modals/ConfirmModal.svelte'; import { apiCall } from '../utility/api'; + import { _t } from '../translations'; export let data; const handleRename = () => { showModal(InputTextModal, { value: data.fileName, - label: 'New file name', - header: 'Rename file', + label: _t('appFile.newFileName', { defaultMessage: 'New file name' }), + header: _t('appFile.renameFile', { defaultMessage: 'Rename file' }), onConfirm: newFile => { apiCall('apps/rename-file', { file: data.fileName, @@ -74,7 +75,7 @@ const handleDelete = () => { showModal(ConfirmModal, { - message: `Really delete file ${data.fileName}?`, + message: _t('appFile.deleteFileConfirm', { defaultMessage: 'Really delete file {fileName}?', values: { fileName: data.fileName } }), onConfirm: () => { apiCall('apps/delete-file', { file: data.fileName, @@ -101,10 +102,10 @@ function createMenu() { return [ - { text: 'Delete', onClick: handleDelete }, - { text: 'Rename', onClick: handleRename }, - data.fileType.endsWith('.sql') && { text: 'Open SQL', onClick: handleOpenSqlFile }, - data.fileType.endsWith('.json') && { text: 'Open JSON', onClick: handleOpenJsonFile }, + { text: _t('common.delete', { defaultMessage: 'Delete' }), onClick: handleDelete }, + { text: _t('common.rename', { defaultMessage: 'Rename' }), onClick: handleRename }, + data.fileType.endsWith('.sql') && { text: _t('common.openSql', { defaultMessage: 'Open SQL' }), onClick: handleOpenSqlFile }, + data.fileType.endsWith('.json') && { text: _t('common.openJson', { defaultMessage: 'Open JSON' }), onClick: handleOpenJsonFile }, // data.fileType.endsWith('.yaml') && { text: 'Open YAML', onClick: handleOpenYamlFile }, ]; diff --git a/packages/web/src/appobj/AppFolderAppObject.svelte b/packages/web/src/appobj/AppFolderAppObject.svelte index 8cbc52a8c..a20bbfd22 100644 --- a/packages/web/src/appobj/AppFolderAppObject.svelte +++ b/packages/web/src/appobj/AppFolderAppObject.svelte @@ -15,6 +15,7 @@ import InputTextModal from '../modals/InputTextModal.svelte'; import { apiCall } from '../utility/api'; import { useConnectionList } from '../utility/metadataLoaders'; + import { _t } from '../translations'; export let data; @@ -34,8 +35,8 @@ showModal(InputTextModal, { value: name, - label: 'New application name', - header: 'Rename application', + label: _t('appFolder.newApplicationName', { defaultMessage: 'New application name' }), + header: _t('appFolder.renameApplication', { defaultMessage: 'Rename application' }), onConfirm: async newFolder => { await apiCall('apps/rename-folder', { folder: data.name, @@ -60,16 +61,16 @@ function createMenu() { return [ - { text: 'Delete', onClick: handleDelete }, - { text: 'Rename', onClick: handleRename }, + { text: _t('common.delete', { defaultMessage: 'Delete' }), onClick: handleDelete }, + { text: _t('common.rename', { defaultMessage: 'Rename' }), onClick: handleRename }, $currentDatabase && [ !isOnCurrentDb($currentDatabase, $connections) && { - text: 'Enable on current database', + text: _t('appFolder.enableOnCurrentDatabase', { defaultMessage: 'Enable on current database' }), onClick: () => setOnCurrentDb(true), }, isOnCurrentDb($currentDatabase, $connections) && { - text: 'Disable on current database', + text: _t('appFolder.disableOnCurrentDatabase', { defaultMessage: 'Disable on current database' }), onClick: () => setOnCurrentDb(false), }, ], @@ -90,7 +91,7 @@ title={data.name} icon={'img app'} statusIcon={isOnCurrentDb($currentDatabase, $connections) ? 'icon check' : null} - statusTitle={`Application ${data.name} is used for database ${$currentDatabase?.name}`} + statusTitle={_t('appFolder.applicationUsedForDatabase', { defaultMessage: 'Application {application} is used for database {database}', values: { application: data.name, database: $currentDatabase?.name } })} isBold={data.name == $currentApplication} on:click={() => ($currentApplication = data.name)} menu={createMenu} diff --git a/packages/web/src/appobj/ArchiveFileAppObject.svelte b/packages/web/src/appobj/ArchiveFileAppObject.svelte index 62f09e66a..ecd17c565 100644 --- a/packages/web/src/appobj/ArchiveFileAppObject.svelte +++ b/packages/web/src/appobj/ArchiveFileAppObject.svelte @@ -82,6 +82,7 @@ import { apiCall } from '../utility/api'; import { openImportExportTab } from '../utility/importExportTools'; import { isProApp } from '../utility/proTools'; + import { _t } from '../translations'; export let data; $: isZipped = data.folderName?.endsWith('.zip'); @@ -89,8 +90,8 @@ const handleRename = () => { showModal(InputTextModal, { value: data.fileName, - label: 'New file name', - header: 'Rename file', + label: _t('archiveFile.newFileName', { defaultMessage: 'New file name' }), + header: _t('archiveFile.renameFile', { defaultMessage: 'Rename file' }), onConfirm: newFile => { apiCall('archive/rename-file', { file: data.fileName, @@ -104,7 +105,7 @@ const handleDelete = () => { showModal(ConfirmModal, { - message: `Really delete file ${data.fileName}?`, + message: _t('archiveFile.deleteFileConfirm', { defaultMessage: 'Really delete file {fileName}?', values: { fileName: data.fileName } }), onConfirm: () => { apiCall('archive/delete-file', { file: data.fileName, @@ -147,10 +148,10 @@ } return [ - data.fileType == 'jsonl' && { text: 'Open', onClick: handleOpenArchive }, - data.fileType == 'jsonl' && { text: 'Open in text editor', onClick: handleOpenJsonLinesText }, - !isZipped && { text: 'Delete', onClick: handleDelete }, - !isZipped && { text: 'Rename', onClick: handleRename }, + data.fileType == 'jsonl' && { text: _t('common.open', { defaultMessage: 'Open' }), onClick: handleOpenArchive }, + data.fileType == 'jsonl' && { text: _t('common.openInTextEditor', { defaultMessage: 'Open in text editor' }), onClick: handleOpenJsonLinesText }, + !isZipped && { text: _t('common.delete', { defaultMessage: 'Delete' }), onClick: handleDelete }, + !isZipped && { text: _t('common.rename', { defaultMessage: 'Rename' }), onClick: handleRename }, data.fileType == 'jsonl' && createQuickExportMenu( fmt => async () => { @@ -185,19 +186,19 @@ }, } ), - data.fileType.endsWith('.sql') && { text: 'Open SQL', onClick: handleOpenSqlFile }, - data.fileType.endsWith('.yaml') && { text: 'Open YAML', onClick: handleOpenYamlFile }, + data.fileType.endsWith('.sql') && { text: _t('common.openSql', { defaultMessage: 'Open SQL' }), onClick: handleOpenSqlFile }, + data.fileType.endsWith('.yaml') && { text: _t('common.openYaml', { defaultMessage: 'Open YAML' }), onClick: handleOpenYamlFile }, !isZipped && isProApp() && data.fileType == 'jsonl' && { - text: 'Open in profiler', + text: _t('common.openInProfiler', { defaultMessage: 'Open in profiler' }), submenu: getExtensions() .drivers.filter(eng => eng.profilerFormatterFunction) .map(eng => ({ text: eng.title, onClick: () => { openNewTab({ - title: 'Profiler', + title: _t('common.profiler', { defaultMessage: 'Profiler' }), icon: 'img profiler', tabComponent: 'ProfilerTab', props: { diff --git a/packages/web/src/appobj/ArchiveFolderAppObject.svelte b/packages/web/src/appobj/ArchiveFolderAppObject.svelte index 3a4f66517..cf0c71dab 100644 --- a/packages/web/src/appobj/ArchiveFolderAppObject.svelte +++ b/packages/web/src/appobj/ArchiveFolderAppObject.svelte @@ -21,14 +21,15 @@ import { isProApp } from '../utility/proTools'; import { extractShellConnection } from '../impexp/createImpExpScript'; import { saveFileToDisk } from '../utility/exportFileTools'; + import { _t } from '../translations'; export let data; const handleDelete = () => { showModal(ConfirmModal, { message: data.name.endsWith('.link') - ? `Really delete link to folder ${data.name}? Folder content remains untouched.` - : `Really delete folder ${data.name}?`, + ? _t('archiveFolder.deleteLinkConfirm', { defaultMessage: 'Really delete link to folder {folderName}? Folder content remains untouched.', values: { folderName: data.name } }) + : _t('archiveFolder.deleteFolderConfirm', { defaultMessage: 'Really delete folder {folderName}?', values: { folderName: data.name } }), onConfirm: () => { apiCall('archive/delete-folder', { folder: data.name }); }, @@ -42,8 +43,8 @@ showModal(InputTextModal, { value: name, - label: 'New folder name', - header: 'Rename folder', + label: _t('archiveFolder.newFolderName', { defaultMessage: 'New folder name' }), + header: _t('archiveFolder.renameFolder', { defaultMessage: 'Rename folder' }), onConfirm: async newFolder => { await apiCall('archive/rename-folder', { folder: data.name, @@ -95,7 +96,7 @@ await dbgateApi.deployDb(${JSON.stringify( const handleCompareWithCurrentDb = () => { openNewTab( { - title: 'Compare', + title: _t('common.compare', { defaultMessage: 'Compare' }), icon: 'img compare', tabComponent: 'CompareModelTab', props: { @@ -153,7 +154,7 @@ await dbgateApi.deployDb(${JSON.stringify( }); }, { - formatLabel: 'ZIP files', + formatLabel: _t('common.zipFiles', { defaultMessage: 'ZIP files' }), formatExtension: 'zip', defaultFileName: data.name?.endsWith('.zip') ? data.name : data.name + '.zip', } @@ -162,28 +163,28 @@ await dbgateApi.deployDb(${JSON.stringify( function createMenu() { return [ - data.name != 'default' && { text: 'Delete', onClick: handleDelete }, - data.name != 'default' && { text: 'Rename', onClick: handleRename }, - isProApp() && { text: 'Data deployer', onClick: handleOpenDataDeployTab }, + data.name != 'default' && { text: _t('common.delete', { defaultMessage: 'Delete' }), onClick: handleDelete }, + data.name != 'default' && { text: _t('common.rename', { defaultMessage: 'Rename' }), onClick: handleRename }, + isProApp() && { text: _t('common.dataDeployer', { defaultMessage: 'Data deployer' }), onClick: handleOpenDataDeployTab }, $currentDatabase && [ - { text: 'Generate deploy DB SQL', onClick: handleGenerateDeploySql }, - hasPermission(`run-shell-script`) && { text: 'Shell: Deploy DB', onClick: handleGenerateDeployScript }, + { text: _t('archiveFolder.generateDeployDbSql', { defaultMessage: 'Generate deploy DB SQL' }), onClick: handleGenerateDeploySql }, + hasPermission(`run-shell-script`) && { text: _t('archiveFolder.shellDeployDb', { defaultMessage: 'Shell: Deploy DB' }), onClick: handleGenerateDeployScript }, ], data.name != 'default' && isProApp() && - data.name.endsWith('.zip') && { text: 'Unpack ZIP', onClick: () => handleZipUnzip('archive/unzip') }, + data.name.endsWith('.zip') && { text: _t('archiveFolder.unpackZip', { defaultMessage: 'Unpack ZIP' }), onClick: () => handleZipUnzip('archive/unzip') }, data.name != 'default' && isProApp() && - !data.name.endsWith('.zip') && { text: 'Pack (create ZIP)', onClick: () => handleZipUnzip('archive/zip') }, + !data.name.endsWith('.zip') && { text: _t('archiveFolder.packZip', { defaultMessage: 'Pack (create ZIP)' }), onClick: () => handleZipUnzip('archive/zip') }, - isProApp() && { text: 'Download ZIP', onClick: handleDownloadZip }, + isProApp() && { text: _t('archiveFolder.downloadZip', { defaultMessage: 'Download ZIP' }), onClick: handleDownloadZip }, data.name != 'default' && hasPermission('dbops/model/compare') && isProApp() && _.get($currentDatabase, 'connection._id') && { onClick: handleCompareWithCurrentDb, - text: `Compare with ${_.get($currentDatabase, 'name')}`, + text: _t('archiveFolder.compareWithCurrentDb', { defaultMessage: 'Compare with {name}', values: { name: _.get($currentDatabase, 'name') } }), }, ]; } diff --git a/packages/web/src/appobj/DatabaseAppObject.svelte b/packages/web/src/appobj/DatabaseAppObject.svelte index a7cd05176..3806272c8 100644 --- a/packages/web/src/appobj/DatabaseAppObject.svelte +++ b/packages/web/src/appobj/DatabaseAppObject.svelte @@ -407,8 +407,8 @@ await dbgateApi.executeQuery(${JSON.stringify( const handleCreateNewApp = () => { showModal(InputTextModal, { - header: 'New application', - label: 'Application name', + header: _t('database.newApplication', { defaultMessage: 'New application' }), + label: _t('database.applicationName', { defaultMessage: 'Application name' }), value: _.startCase(name), onConfirm: async appName => { const newAppId = await apiCall('apps/create-app-from-db', { diff --git a/packages/web/src/appobj/DatabaseObjectAppObject.svelte b/packages/web/src/appobj/DatabaseObjectAppObject.svelte index fdf07efed..50c7763c7 100644 --- a/packages/web/src/appobj/DatabaseObjectAppObject.svelte +++ b/packages/web/src/appobj/DatabaseObjectAppObject.svelte @@ -199,12 +199,12 @@ divider: true, }, hasPermission('dbops/export') && { - label: 'Export', + label: _t('common.export', { defaultMessage: 'Export' }), functionName: 'tableReader', isExport: true, }, hasPermission('dbops/import') && { - label: 'Import', + label: _t('common.import', { defaultMessage: 'Import' }), isImport: true, requiresWriteAccess: true, }, @@ -260,7 +260,7 @@ divider: true, }, { - label: 'Export', + label: _t('common.export', { defaultMessage: 'Export' }), isExport: true, functionName: 'tableReader', }, @@ -310,7 +310,7 @@ divider: true, }, { - label: 'Export', + label: _t('common.export', { defaultMessage: 'Export' }), isExport: true, functionName: 'tableReader', }, @@ -402,7 +402,7 @@ icon: 'img perspective', }, hasPermission('dbops/export') && { - label: 'Export', + label: _t('common.export', { defaultMessage: 'Export' }), isExport: true, functionName: 'tableReader', }, diff --git a/packages/web/src/appobj/SavedFileAppObject.svelte b/packages/web/src/appobj/SavedFileAppObject.svelte index 89776c195..ad98b1eae 100644 --- a/packages/web/src/appobj/SavedFileAppObject.svelte +++ b/packages/web/src/appobj/SavedFileAppObject.svelte @@ -193,6 +193,7 @@ import { saveFileToDisk } from '../utility/exportFileTools'; import { getConnectionInfo } from '../utility/metadataLoaders'; import { showSnackbarError } from '../utility/snackbar'; + import { _t } from '../translations'; export let data; @@ -214,27 +215,26 @@ function createMenu() { return [ - handler?.tabComponent && { text: 'Open', onClick: openTab }, + handler?.tabComponent && { text: _t('common.open', { defaultMessage: 'Open' }), onClick: openTab }, - !data.teamFileId && hasPermission(`files/${data.folder}/write`) && { text: 'Rename', onClick: handleRename }, - !data.teamFileId && hasPermission(`files/${data.folder}/write`) && { text: 'Create copy', onClick: handleCopy }, - !data.teamFileId && hasPermission(`files/${data.folder}/write`) && { text: 'Delete', onClick: handleDelete }, - - data.teamFileId && data.allowWrite && { text: 'Rename', onClick: handleRename }, + !data.teamFileId && hasPermission(`files/${data.folder}/write`) && { text: _t('common.rename', { defaultMessage: 'Rename' }), onClick: handleRename }, + !data.teamFileId && hasPermission(`files/${data.folder}/write`) && { text: _t('common.createCopy', { defaultMessage: 'Create copy' }), onClick: handleCopy }, + !data.teamFileId && hasPermission(`files/${data.folder}/write`) && { text: _t('common.delete', { defaultMessage: 'Delete' }), onClick: handleDelete }, + data.teamFileId && data.allowWrite && { text: _t('common.rename', { defaultMessage: 'Rename' }), onClick: handleRename }, data.teamFileId && data.allowRead && - hasPermission('all-team-files/create') && { text: 'Create copy', onClick: handleCopy }, - data.teamFileId && data.allowWrite && { text: 'Delete', onClick: handleDelete }, + hasPermission('all-team-files/create') && { text: _t('common.createCopy', { defaultMessage: 'Create copy' }), onClick: handleCopy }, + data.teamFileId && data.allowWrite && { text: _t('common.delete', { defaultMessage: 'Delete' }), onClick: handleDelete }, - folder == 'markdown' && { text: 'Show page', onClick: showMarkdownPage }, - !data.teamFileId && { text: 'Download', onClick: handleDownload }, - data.teamFileId && data.allowRead && { text: 'Download', onClick: handleDownload }, + folder == 'markdown' && { text: _t('common.showPage', { defaultMessage: 'Show page' }), onClick: showMarkdownPage }, + !data.teamFileId && { text: _t('common.download', { defaultMessage: 'Download' }), onClick: handleDownload }, + data.teamFileId && data.allowRead && { text: _t('common.download', { defaultMessage: 'Download' }), onClick: handleDownload }, ]; } const handleDelete = () => { showModal(ConfirmModal, { - message: `Really delete file ${data.file}?`, + message: _t('common.reallyDeleteFile', { defaultMessage: 'Really delete file {file}?', values: { file: data.file } }), onConfirm: () => { if (data.teamFileId) { apiCall('team-files/delete', { teamFileId: data.teamFileId }); @@ -253,8 +253,8 @@ const handleRename = () => { showModal(InputTextModal, { value: data.file, - label: 'New file name', - header: 'Rename file', + label: _t('common.newFileName', { defaultMessage: 'New file name' }), + header: _t('common.renameFile', { defaultMessage: 'Rename file' }), onConfirm: newFile => { if (data.teamFileId) { apiCall('team-files/update', { teamFileId: data.teamFileId, name: newFile }); @@ -274,8 +274,8 @@ const handleCopy = () => { showModal(InputTextModal, { value: data.file, - label: 'New file name', - header: 'Copy file', + label: _t('savedFile.newFileName', { defaultMessage: 'New file name' }), + header: _t('savedFile.copyFile', { defaultMessage: 'Copy file' }), onConfirm: newFile => { if (data.teamFileId) { apiCall('team-files/copy', { teamFileId: data.teamFileId, newName: newFile }); @@ -323,12 +323,12 @@ if (data.teamFileId) { if (data?.metadata?.autoExecute) { if (!data.allowUse) { - showSnackbarError('You do not have permission to use this team file'); + showSnackbarError(_t('savedFile.noPermissionUseTeamFile', { defaultMessage: 'You do not have permission to use this team file' })); return; } } else { if (!data.allowRead) { - showSnackbarError('You do not have permission to read this team file'); + showSnackbarError(_t('savedFile.noPermissionReadTeamFile', { defaultMessage: 'You do not have permission to read this team file' })); return; } } diff --git a/packages/web/src/commands/CommandPalette.svelte b/packages/web/src/commands/CommandPalette.svelte index 2983b135c..efecfcb38 100644 --- a/packages/web/src/commands/CommandPalette.svelte +++ b/packages/web/src/commands/CommandPalette.svelte @@ -81,7 +81,7 @@ import { getLocalStorage } from '../utility/storageCache'; import registerCommand from './registerCommand'; import { formatKeyText, switchCurrentDatabase } from '../utility/common'; - import { _tval, __t } from '../translations'; + import { _tval, __t, _t } from '../translations'; let domInput; let filter = ''; @@ -181,7 +181,7 @@ domInput.focus(); }} > - Commands + {_t('commandPalette.commands', { defaultMessage: 'Commands' })}
- Database + {_t('common.database', { defaultMessage: 'Database' })}
@@ -201,8 +201,8 @@ bind:this={domInput} bind:value={filter} on:keydown={handleKeyDown} - placeholder={parentCommand?.text || - ($visibleCommandPalette == 'database' ? 'Search in database' : 'Search in commands')} + placeholder={_tval(parentCommand?.text) || + ($visibleCommandPalette == 'database' ? _t('commandPalette.searchInDatabase', { defaultMessage: 'Search in database' }) : _t('commandPalette.searchInCommands', { defaultMessage: 'Search in commands' }))} />
diff --git a/packages/web/src/datagrid/SqlDataGridCore.svelte b/packages/web/src/datagrid/SqlDataGridCore.svelte index 8db47f4fe..851e6f5a3 100644 --- a/packages/web/src/datagrid/SqlDataGridCore.svelte +++ b/packages/web/src/datagrid/SqlDataGridCore.svelte @@ -1,5 +1,5 @@ - About DbGate + {_t('aboutModal.aboutDbGate', { defaultMessage: 'About DbGate' })}
- Version: {version} + {_t('aboutModal.version', { defaultMessage: 'Version' })}: {version}
- Build date: {moment(buildTime).format('YYYY-MM-DD')} + {_t('aboutModal.buildDate', { defaultMessage: 'Build date' })}: {moment(buildTime).format('YYYY-MM-DD')}
- License type: {$config?.checkedLicense && $config?.checkedLicense?.type != 'community' ? ($config?.checkedLicense?.licenseTypeObj?.name ?? 'Unknown') : 'Community'} {#if $config?.checkedLicense?.users}
- User count: {$config?.checkedLicense?.users} + {_t('aboutModal.userCount', { defaultMessage: 'User count' })}: {$config?.checkedLicense?.users}
{/if}
- Web: dbgate.io + {_t('aboutModal.web', { defaultMessage: 'Web' })}: dbgate.io
{#if isProApp()}
- Support: {_t('aboutModal.support', { defaultMessage: 'Support' })}: support@dbgate.io
@@ -55,10 +56,10 @@
-->
- Source codes: GitHub + {_t('aboutModal.sourceCodes', { defaultMessage: 'Source codes' })}: GitHub
- Docker container: Docker Hub -->
- Produced by: Sprinx System a.s. + {_t('aboutModal.producedBy', { defaultMessage: 'Produced by' })}: Sprinx System a.s.
- + diff --git a/packages/web/src/modals/AddDbKeyModal.svelte b/packages/web/src/modals/AddDbKeyModal.svelte index e62ae3dc8..d255130a2 100644 --- a/packages/web/src/modals/AddDbKeyModal.svelte +++ b/packages/web/src/modals/AddDbKeyModal.svelte @@ -8,6 +8,7 @@ import TextField from '../forms/TextField.svelte'; import ModalBase from './ModalBase.svelte'; import { closeCurrentModal } from './modalTools'; + import { _t } from '../translations'; export let conid; export let database; @@ -26,10 +27,10 @@ - Add key + {_t('addDbKeyModal.addKey', { defaultMessage: 'Add key' })}
- + { @@ -41,7 +42,7 @@
- + ({ value: t.name, label: t.label }))} value={type} @@ -62,8 +63,8 @@
- handleSubmit()} /> - + handleSubmit()} /> + diff --git a/packages/web/src/modals/ChangeDownloadUrlModal.svelte b/packages/web/src/modals/ChangeDownloadUrlModal.svelte index 980f0aaf1..85bedf76b 100644 --- a/packages/web/src/modals/ChangeDownloadUrlModal.svelte +++ b/packages/web/src/modals/ChangeDownloadUrlModal.svelte @@ -6,6 +6,7 @@ import FormTextField from '../forms/FormTextField.svelte'; import ModalBase from './ModalBase.svelte'; import { closeCurrentModal } from './modalTools'; + import { _t } from '../translations'; export let onConfirm; export let url; @@ -18,13 +19,13 @@ - Download imported file from web + {_t('changeDownloadUrlModal.header', { defaultMessage: 'Download imported file from web' })} - + - - + + diff --git a/packages/web/src/modals/ChooseArchiveFolderModal.svelte b/packages/web/src/modals/ChooseArchiveFolderModal.svelte index 2798b01fd..008624a59 100644 --- a/packages/web/src/modals/ChooseArchiveFolderModal.svelte +++ b/packages/web/src/modals/ChooseArchiveFolderModal.svelte @@ -6,6 +6,7 @@ import FormSubmit from '../forms/FormSubmit.svelte'; import ModalBase from './ModalBase.svelte'; import { closeCurrentModal } from './modalTools'; + import { _t } from '../translations'; export let message = ''; export let onConfirm; @@ -13,21 +14,21 @@ - Choose archive folder + {_t('archiveFolderModal.chooseArchiveFolder', { defaultMessage: 'Choose archive folder' })}
{message}
- + { closeCurrentModal(); onConfirm(e.detail.archiveFolder); }} /> - +
diff --git a/packages/web/src/modals/ChooseCloudFolderModal.svelte b/packages/web/src/modals/ChooseCloudFolderModal.svelte index 955e50cd0..f7730186d 100644 --- a/packages/web/src/modals/ChooseCloudFolderModal.svelte +++ b/packages/web/src/modals/ChooseCloudFolderModal.svelte @@ -7,6 +7,7 @@ import { useCloudContentList } from '../utility/metadataLoaders'; import ModalBase from './ModalBase.svelte'; import { closeCurrentModal } from './modalTools'; + import { _t } from '../translations'; export let message = ''; export let onConfirm; @@ -18,22 +19,21 @@ {#if $cloudContentList} x.isPrivate)?.folid }}> - Choose cloud folder + {_t('cloudFolderModal.chooseCloudFolder', { defaultMessage: 'Choose cloud folder' })}
{message}
- - + { closeCurrentModal(); console.log('onConfirm', e.detail); onConfirm(e.detail.cloudFolder); }} /> - +
diff --git a/packages/web/src/modals/ColumnMapModal.svelte b/packages/web/src/modals/ColumnMapModal.svelte index 996353322..43004b4ca 100644 --- a/packages/web/src/modals/ColumnMapModal.svelte +++ b/packages/web/src/modals/ColumnMapModal.svelte @@ -11,8 +11,9 @@ import ModalBase from './ModalBase.svelte'; import { closeCurrentModal } from './modalTools'; import _ from 'lodash'; + import { _t } from '../translations'; - export let header = 'Configure columns'; + export let header = _t('columnMapModal.configureColumns', { defaultMessage: 'Configure columns' }); export let onConfirm; export let sourceTableInfo; @@ -69,7 +70,7 @@ if (!value) return; if (value.length == 0) return; if (value.some(x => !x.src || !x.dst)) { - validationError = 'Source and target columns must be defined'; + validationError = _t('columnMapModal.sourceAndTargetColumnsMustBeDefined', { defaultMessage: 'Source and target columns must be defined' }); return; } const duplicates = _.chain(value.map(x => x.dst)) @@ -78,7 +79,7 @@ .keys() .value(); if (duplicates.length > 0) { - validationError = 'Target columns must be unique, duplicates found: ' + duplicates.join(', '); + validationError = _t('columnMapModal.targetColumnsMustBeUnique', { defaultMessage: 'Target columns must be unique, duplicates found: ' }) + duplicates.join(', '); return; } } @@ -95,19 +96,19 @@ {#if resetValue.length == 0}
- When no columns are defined in this mapping, source row is copied to target without any modifications + {_t('columnMapModal.noColumnsDefined', { defaultMessage: 'When no columns are defined in this mapping, source row is copied to target without any modifications' })}
{/if} { value = value.filter((x, i) => i != index); - }}>Remove{_t('common.Remove', { defaultMessage: 'Remove' })} @@ -160,14 +161,14 @@ { value = [...(value || []), {}]; }} /> { value = resetValue; diff --git a/packages/web/src/modals/ConfirmModal.svelte b/packages/web/src/modals/ConfirmModal.svelte index dc5046ffc..e17933a1c 100644 --- a/packages/web/src/modals/ConfirmModal.svelte +++ b/packages/web/src/modals/ConfirmModal.svelte @@ -5,17 +5,18 @@ import FormSubmit from '../forms/FormSubmit.svelte'; import ModalBase from './ModalBase.svelte'; import { closeCurrentModal } from './modalTools'; + import { _t } from '../translations'; export let message; export let onConfirm; - export let confirmLabel = 'OK'; + export let confirmLabel = _t('common.ok', { defaultMessage: 'OK' }); export let header = null; - {header || 'Confirm'} + {header || _t('common.confirm', { defaultMessage: 'Confirm' })} {message} @@ -31,7 +32,7 @@ /> diff --git a/packages/web/src/modals/ConfirmNoSqlModal.svelte b/packages/web/src/modals/ConfirmNoSqlModal.svelte index fdabe8f6a..5275eaac9 100644 --- a/packages/web/src/modals/ConfirmNoSqlModal.svelte +++ b/packages/web/src/modals/ConfirmNoSqlModal.svelte @@ -9,6 +9,7 @@ import ModalBase from './ModalBase.svelte'; import { closeCurrentModal } from './modalTools'; + import { _t } from '../translations'; export let script; export let onConfirm; @@ -19,7 +20,7 @@ -
Save changes
+
{_t('common.saveChanges', { defaultMessage: 'Save changes' })}
@@ -28,7 +29,7 @@ {#if skipConfirmSettingKey}
{ @@ -41,16 +42,16 @@
{ closeCurrentModal(); onConfirm(); }} /> - + { newQuery({ initialData: script, diff --git a/packages/web/src/modals/ConfirmSqlModal.svelte b/packages/web/src/modals/ConfirmSqlModal.svelte index 3b1cff550..48479c780 100644 --- a/packages/web/src/modals/ConfirmSqlModal.svelte +++ b/packages/web/src/modals/ConfirmSqlModal.svelte @@ -54,6 +54,7 @@ import ModalBase from './ModalBase.svelte'; import { closeCurrentModal, showModal } from './modalTools'; + import { _t } from '../translations'; export let sql; export let onConfirm; @@ -81,7 +82,7 @@ -
Save changes
+
{_t('common.saveChanges', { defaultMessage: 'Save changes' })}
@@ -91,7 +92,7 @@
@@ -101,13 +102,13 @@ {#if $values.deleteReferencesCascade}
{ $values = _.omitBy($values, (v, k) => k.startsWith('deleteReferencesFor_')); }} /> { const newValues = { ...$values }; for (const item of deleteCascadesScripts) { @@ -135,12 +136,11 @@ {#if isRecreated}
- This operation is not directly supported by SQL engine. DbGate can emulate it, but - please check the generated SQL script. + {_t('sqlModal.recreateWarning', { defaultMessage: "This operation is not directly supported by SQL engine. DbGate can emulate it, but please check the generated SQL script." })}
@@ -149,7 +149,7 @@ {#if skipConfirmSettingKey}
{ @@ -162,7 +162,7 @@
{ closeCurrentModal(); @@ -172,13 +172,13 @@ /> { newQuery({ initialData: currentScript, diff --git a/packages/web/src/modals/DatabaseLoginModal.svelte b/packages/web/src/modals/DatabaseLoginModal.svelte index 2eb788f1d..a921fb99c 100644 --- a/packages/web/src/modals/DatabaseLoginModal.svelte +++ b/packages/web/src/modals/DatabaseLoginModal.svelte @@ -28,6 +28,7 @@ import { callServerPing } from '../utility/connectionsPinger'; import { getConnectionLabel } from 'dbgate-tools'; import { openedConnections } from '../stores'; + import { _t } from '../translations'; export let conid; export let passwordMode; @@ -125,11 +126,11 @@ - Database Log In ({engineTitle}) + {_t('databaseLoginModal.header', { defaultMessage: 'Database Log In ({engineTitle})', values: {engineTitle} })} - + - Testing connection + {_t('databaseLoginModal.testingConnection', { defaultMessage: 'Testing connection' })}
{/if} {#if !isTesting && sqlConnectResult && sqlConnectResult.msgtype == 'error'}
- Connect failed: + {_t('databaseLoginModal.connectFailed', { defaultMessage: 'Connect failed:' })} {sqlConnectResult.error} showModal(ErrorMessageModal, { message: sqlConnectResult.detail, showAsCode: true, - title: 'Database connection error', + title: _t('databaseLoginModal.connectionError', { defaultMessage: 'Database connection error' }), })} > - Show detail + {_t('databaseLoginModal.showDetail', { defaultMessage: 'Show detail' })}
{/if} {#if isTesting} - + {:else} - + {/if} - + diff --git a/packages/web/src/modals/DbKeyAddItemModal.svelte b/packages/web/src/modals/DbKeyAddItemModal.svelte index ffbf1931a..0f3603835 100644 --- a/packages/web/src/modals/DbKeyAddItemModal.svelte +++ b/packages/web/src/modals/DbKeyAddItemModal.svelte @@ -5,6 +5,7 @@ import FormProvider from '../forms/FormProvider.svelte'; import ModalBase from './ModalBase.svelte'; import { closeCurrentModal } from './modalTools'; + import { _t } from '../translations'; export let keyInfo; export let label; @@ -21,7 +22,7 @@ - Add item + {_t('dbKeyAddItemModal.header', { defaultMessage: 'Add item' })}
- handleSubmit()} /> - + handleSubmit()} /> + diff --git a/packages/web/src/modals/DefineDictionaryDescriptionModal.svelte b/packages/web/src/modals/DefineDictionaryDescriptionModal.svelte index 16cc96c9c..82c23e9d9 100644 --- a/packages/web/src/modals/DefineDictionaryDescriptionModal.svelte +++ b/packages/web/src/modals/DefineDictionaryDescriptionModal.svelte @@ -21,6 +21,7 @@ import { currentDatabase } from '../stores'; import { filterAppsForDatabase } from '../utility/appTools'; import { apiCall } from '../utility/api'; + import { _t } from '../translations'; export let conid; export let database; @@ -52,10 +53,10 @@ - Define description + {_t('defineDictionaryDescriptionModal.header', { defaultMessage: 'Define description' })}
- + - + { closeCurrentModal(); @@ -122,7 +123,7 @@ onConfirm?.(); }} /> - +
diff --git a/packages/web/src/modals/DictionaryLookupModal.svelte b/packages/web/src/modals/DictionaryLookupModal.svelte index ac27b5c73..065d9631a 100644 --- a/packages/web/src/modals/DictionaryLookupModal.svelte +++ b/packages/web/src/modals/DictionaryLookupModal.svelte @@ -15,6 +15,7 @@ import FormTextField from '../forms/FormTextField.svelte'; import _ from 'lodash'; import { apiCall } from '../utility/api'; + import { _t } from '../translations'; export let onConfirm; export let conid; @@ -126,15 +127,15 @@ - Lookup from {pureName} + {_t('dictionaryLookupModal.header', { defaultMessage: 'Lookup from {pureName}', values: {pureName} })}
- +
{#if isLoading} - + {/if} {#if !isLoading && tableInfo && description && rows && tableInfo?.primaryKey?.columns?.length == 1} @@ -161,13 +162,13 @@ }, { fieldName: 'value', - header: 'Value', + header: _t('dictionaryLookupModal.value', { defaultMessage: 'Value' }), formatter: row => row[tableInfo.primaryKey.columns[0].columnName], width: '100px', }, { fieldName: 'description', - header: 'Description', + header: _t('dictionaryLookupModal.description', { defaultMessage: 'Description' }), formatter: row => description.columns.map(col => row[col]).join(description.delimiter || ' '), }, ]} @@ -194,15 +195,15 @@ {#if multiselect} { closeCurrentModal(); onConfirm(checkedKeys); }} /> {/if} - - + +
diff --git a/packages/web/src/modals/EditCellDataModal.svelte b/packages/web/src/modals/EditCellDataModal.svelte index 2912f59aa..3b8003dab 100644 --- a/packages/web/src/modals/EditCellDataModal.svelte +++ b/packages/web/src/modals/EditCellDataModal.svelte @@ -66,7 +66,7 @@ diff --git a/packages/web/src/modals/FavoriteModal.svelte b/packages/web/src/modals/FavoriteModal.svelte index a065cd8e2..2d77b22ac 100644 --- a/packages/web/src/modals/FavoriteModal.svelte +++ b/packages/web/src/modals/FavoriteModal.svelte @@ -16,6 +16,7 @@ import FormSubmit from '../forms/FormSubmit.svelte'; import FormButton from '../forms/FormButton.svelte'; import { apiCall } from '../utility/api'; + import { _t } from '../translations'; export let editingData; export let savingTab; @@ -113,28 +114,28 @@ - {editingData ? 'Edit favorite' : 'Share / add to favorites'} + {editingData ? _t('favorite.editFavorite', { defaultMessage: 'Edit favorite' }) : _t('favorite.shareAddToFavorites', { defaultMessage: 'Share / add to favorites' })} - - + + - + {#if !!savingTab && !electron && canWriteFavorite} - + {/if} {#if !values.shareAsLink && canWriteFavorite} - - + + {/if} {#if !!savingTab && !!savedFile} {/if} @@ -142,12 +143,12 @@ {#if !values.shareAsLink && canWriteFavorite} - + {/if} {#if values.shareAsLink || !canWriteFavorite} - + {/if} - + diff --git a/packages/web/src/modals/FilterMultipleValuesModal.svelte b/packages/web/src/modals/FilterMultipleValuesModal.svelte index 96ca5306b..49b87c8ed 100644 --- a/packages/web/src/modals/FilterMultipleValuesModal.svelte +++ b/packages/web/src/modals/FilterMultipleValuesModal.svelte @@ -3,6 +3,7 @@ import FormStyledButton from '../buttons/FormStyledButton.svelte'; import ModalBase from './ModalBase.svelte'; import { closeCurrentModal } from './modalTools'; + import { _t } from '../translations'; export let onFilter; @@ -16,35 +17,35 @@ -
Filter multiple values
+
{_t('filterMultipleValues.filterMultipleValues', { defaultMessage: 'Filter multiple values' })}
- ' + '
- ' + '
- ' + '
- ' + '
- ' + '
- - + +
diff --git a/packages/web/src/modals/GenerateSqlFromDataModal.svelte b/packages/web/src/modals/GenerateSqlFromDataModal.svelte index 4760a3605..447ae6a84 100644 --- a/packages/web/src/modals/GenerateSqlFromDataModal.svelte +++ b/packages/web/src/modals/GenerateSqlFromDataModal.svelte @@ -9,6 +9,7 @@ import newQuery from '../query/newQuery'; import SqlEditor from '../query/SqlEditor.svelte'; import keycodes from '../utility/keycodes'; + import { _t } from '../translations'; import ModalBase from './ModalBase.svelte'; import { closeCurrentModal } from './modalTools'; @@ -77,24 +78,23 @@ - Generate SQL from data + {_t('generateSqlFromData.generateSqlFromData', { defaultMessage: 'Generate SQL from data' })}
-
Choose query type
- +
{_t('generateSqlFromData.chooseQueryType', { defaultMessage: 'Choose query type' })}
({ name }))} bind:selectedIndex={queryTypeIndex} bind:domTable={domQueryType} focusOnCreate selectable - columns={[{ fieldName: 'name', header: 'Query type' }]} + columns={[{ fieldName: 'name', header: _t('generateSqlFromData.queryType', { defaultMessage: 'Query type' }) }]} />
-
Value columns
+
{_t('generateSqlFromData.valueColumns', { defaultMessage: 'Value columns' })}
{ newQuery({ initialData: sqlPreview }); closeCurrentModal(); }} /> - + diff --git a/packages/web/src/modals/InputTextModal.svelte b/packages/web/src/modals/InputTextModal.svelte index 22dbd1545..1045434f7 100644 --- a/packages/web/src/modals/InputTextModal.svelte +++ b/packages/web/src/modals/InputTextModal.svelte @@ -29,7 +29,7 @@ - handleSubmit(e.detail)} data-testid="InputTextModal_ok" /> + handleSubmit(e.detail)} data-testid="InputTextModal_ok" /> diff --git a/packages/web/src/modals/InsertJoinModal.svelte b/packages/web/src/modals/InsertJoinModal.svelte index e1cd01777..b84628778 100644 --- a/packages/web/src/modals/InsertJoinModal.svelte +++ b/packages/web/src/modals/InsertJoinModal.svelte @@ -9,6 +9,8 @@ import ModalBase from './ModalBase.svelte'; import { closeCurrentModal } from './modalTools'; + import { _t } from '../translations'; + import _ from 'lodash'; export let sql; export let onInsert; @@ -104,12 +106,11 @@ - Insert join + {_t('insertJoin.insertJoin', { defaultMessage: 'Insert join' })}
-
Existing table
- +
{_t('insertJoin.existingTable', { defaultMessage: 'Existing table' })}
-
New table
+
{_t('insertJoin.newTable', { defaultMessage: 'New table' })}
-
Join
+
{_t('insertJoin.join', { defaultMessage: 'Join' })}
({ name }))} @@ -150,10 +151,10 @@ bind:domTable={domJoin} selectable on:keydown={joinKeyDown} - columns={[{ fieldName: 'name', header: 'Join type' }]} + columns={[{ fieldName: 'name', header: _t('insertJoin.joinType', { defaultMessage: 'Join type' }) }]} /> -
Alias
+
{_t('insertJoin.alias', { defaultMessage: 'Alias' })}
{ @@ -171,13 +172,13 @@ { closeCurrentModal(); onInsert(sqlPreview); }} /> - + diff --git a/packages/web/src/modals/LicenseLimitMessageModal.svelte b/packages/web/src/modals/LicenseLimitMessageModal.svelte index ca59a0c54..69011b324 100644 --- a/packages/web/src/modals/LicenseLimitMessageModal.svelte +++ b/packages/web/src/modals/LicenseLimitMessageModal.svelte @@ -5,6 +5,7 @@ import FontIcon from '../icons/FontIcon.svelte'; import { isProApp } from '../utility/proTools'; import { openWebLink } from '../utility/simpleTools'; + import { _t } from '../translations'; import ModalBase from './ModalBase.svelte'; import { closeCurrentModal } from './modalTools'; @@ -15,7 +16,7 @@ -
License limit error
+
{_t('licenseLimit.licenseLimitError', { defaultMessage: 'License limit error' })}
@@ -23,15 +24,15 @@

- Cloud operation ended with error:
+ {_t('licenseLimit.cloudOperationEndedWithError', { defaultMessage: 'Cloud operation ended with error:' })}
{message}

- This is a limitation of the free version of DbGate. To continue using cloud operations, please {#if !isProApp()}download - and{/if} purchase DbGate Premium. + {_t('licenseLimit.limitationMessage', { defaultMessage: 'This is a limitation of the free version of DbGate. To continue using cloud operations, please' })} {#if !isProApp()} {_t('licenseLimit.download', { defaultMessage: 'download and' })} + {/if} {_t('licenseLimit.purchase', { defaultMessage: 'purchase DbGate Premium.' })}

-

Free version limit:

+

{_t('licenseLimit.freeVersionLimit', { defaultMessage: 'Free version limit:' })}

    {#each licenseLimits || [] as limit}
  • {limit}
  • @@ -41,16 +42,16 @@
- + {#if !isProApp()} openWebLink('https://www.dbgate.io/download/')} skipWidth /> {/if} openWebLink('https://www.dbgate.io/purchase/premium/')} skipWidth /> diff --git a/packages/web/src/modals/NewCollectionModal.svelte b/packages/web/src/modals/NewCollectionModal.svelte index 16f1c9028..3c3fcfd1f 100644 --- a/packages/web/src/modals/NewCollectionModal.svelte +++ b/packages/web/src/modals/NewCollectionModal.svelte @@ -30,9 +30,9 @@ const { errorMessage } = resp || {}; if (errorMessage) { - showModal(ErrorMessageModal, { title: 'Error when executing operation', message: errorMessage }); + showModal(ErrorMessageModal, { title: _t('error.executingOperation', { defaultMessage: 'Error when executing operation' }), message: errorMessage }); } else { - showSnackbarSuccess('Saved to database'); + showSnackbarSuccess(_t('common.savedToDatabase', { defaultMessage: 'Saved to database' })); apiCall('database-connections/sync-model', dbid); closeCurrentModal(); } @@ -51,7 +51,7 @@ - handleSubmit(e.detail)} disabled={isSaving} /> + handleSubmit(e.detail)} disabled={isSaving} /> diff --git a/packages/web/src/modals/NewObjectModal.svelte b/packages/web/src/modals/NewObjectModal.svelte index 786fef7c1..cf913ec2b 100644 --- a/packages/web/src/modals/NewObjectModal.svelte +++ b/packages/web/src/modals/NewObjectModal.svelte @@ -102,7 +102,7 @@ { icon: 'icon compare', colorClass: 'color-icon-red', - title: _t('common.compare', { defaultMessage: 'Compare database' }), + title: _t('common.compareDatabase', { defaultMessage: 'Compare database' }), description: _t('newObject.compareDescription', { defaultMessage: 'Compare database schemas' }), command: 'database.compare', testid: 'NewObjectModal_databaseCompare', diff --git a/packages/web/src/modals/QueryParametersModal.svelte b/packages/web/src/modals/QueryParametersModal.svelte index 53447b493..c028d1d2d 100644 --- a/packages/web/src/modals/QueryParametersModal.svelte +++ b/packages/web/src/modals/QueryParametersModal.svelte @@ -5,6 +5,7 @@ import FormSubmit from '../forms/FormSubmit.svelte'; import FormTextField from '../forms/FormTextField.svelte'; import { apiCall } from '../utility/api'; + import { _t } from '../translations'; import getElectron from '../utility/getElectron'; import ModalBase from './ModalBase.svelte'; @@ -26,7 +27,7 @@ - Edit query parameters + {_t('queryParameters.editQueryParameters', { defaultMessage: 'Edit query parameters' })}
{#each parameterNames as parameterName, index} @@ -34,11 +35,11 @@ {/each}
-
String values must be 'quoted'. You can use valid SQL expressions.
+
{_t('queryParameters.stringValuesMustBeQuoted', { defaultMessage: "String values must be 'quoted'. You can use valid SQL expressions." })}
- - + +
diff --git a/packages/web/src/modals/RowsLimitModal.svelte b/packages/web/src/modals/RowsLimitModal.svelte index 12f62606f..e476ad45a 100644 --- a/packages/web/src/modals/RowsLimitModal.svelte +++ b/packages/web/src/modals/RowsLimitModal.svelte @@ -6,6 +6,7 @@ import FormTextField from '../forms/FormTextField.svelte'; import ModalBase from './ModalBase.svelte'; import { closeCurrentModal } from './modalTools'; + import { _t } from '../translations'; export let value; export let onConfirm; @@ -18,24 +19,24 @@ - Rows limit + {_t('query.rowsLimit', { defaultMessage: 'Rows limit' })} handleSubmit(parseInt(e.detail.value) || null)} data-testid="RowsLimitModal_setLimit" /> - handleSubmit(null)} data-testid="RowsLimitModal_setNoLimit" /> - + handleSubmit(null)} data-testid="RowsLimitModal_setNoLimit" /> + diff --git a/packages/web/src/modals/RunScriptModal.svelte b/packages/web/src/modals/RunScriptModal.svelte index 6ea9b7e14..2a2bd5482 100644 --- a/packages/web/src/modals/RunScriptModal.svelte +++ b/packages/web/src/modals/RunScriptModal.svelte @@ -10,6 +10,7 @@ import { showSnackbarError } from '../utility/snackbar'; import ModalBase from './ModalBase.svelte'; import { closeCurrentModal } from './modalTools'; + import { _t } from '../translations'; export let script; export let header; @@ -77,14 +78,14 @@ {#if isRunning} - + {:else} - + {/if} {#if onOpenResult && !isRunning} { closeCurrentModal(); onOpenResult(); diff --git a/packages/web/src/modals/SaveArchiveModal.svelte b/packages/web/src/modals/SaveArchiveModal.svelte index 4288a9b6a..bcc54afc2 100644 --- a/packages/web/src/modals/SaveArchiveModal.svelte +++ b/packages/web/src/modals/SaveArchiveModal.svelte @@ -24,10 +24,10 @@ - Save to archive + {_t('archive.saveToArchive', { defaultMessage: 'Save to archive' })} - - + + diff --git a/packages/web/src/modals/SaveFileModal.svelte b/packages/web/src/modals/SaveFileModal.svelte index 6dcf13c4b..b65124f79 100644 --- a/packages/web/src/modals/SaveFileModal.svelte +++ b/packages/web/src/modals/SaveFileModal.svelte @@ -125,7 +125,7 @@ {#if $cloudSigninTokenHolder && !$values['saveToTeamFolder']} {/if} {#if $configValue?.storageDatabase} - + {/if} @@ -148,12 +148,12 @@ {#if electron} { const file = await electron.showSaveDialog({ filters: [ - { name: `${fileExtension.toUpperCase()} files`, extensions: [fileExtension] }, - { name: `All files`, extensions: ['*'] }, + { name: _t('common.fileType', { defaultMessage: '{extension} files', values: {extension: fileExtension.toUpperCase()} }), extensions: [fileExtension] }, + { name: _t('common.allFiles', { defaultMessage: 'All files' }), extensions: ['*'] }, ], defaultPath: filePath || `${name}.${fileExtension}`, properties: ['showOverwriteConfirmation'], diff --git a/packages/web/src/modals/SetFilterModal.svelte b/packages/web/src/modals/SetFilterModal.svelte index 38e224852..28cb43d61 100644 --- a/packages/web/src/modals/SetFilterModal.svelte +++ b/packages/web/src/modals/SetFilterModal.svelte @@ -84,7 +84,7 @@
- +
diff --git a/packages/web/src/modals/ShowSqlModal.svelte b/packages/web/src/modals/ShowSqlModal.svelte index 78fd71dfd..c457326b1 100644 --- a/packages/web/src/modals/ShowSqlModal.svelte +++ b/packages/web/src/modals/ShowSqlModal.svelte @@ -14,7 +14,7 @@ -
SQL Script
+
{_t('script.sqlScript', { defaultMessage: 'SQL Script' })}
@@ -29,7 +29,7 @@ /> { newQuery({ initialData: sql, diff --git a/packages/web/src/modals/SqlGeneratorModal.svelte b/packages/web/src/modals/SqlGeneratorModal.svelte index 4305a1b79..40249ca8a 100644 --- a/packages/web/src/modals/SqlGeneratorModal.svelte +++ b/packages/web/src/modals/SqlGeneratorModal.svelte @@ -32,6 +32,7 @@ import LoadingInfo from '../elements/LoadingInfo.svelte'; import { getObjectTypeFieldLabel } from '../utility/common'; import { apiCall } from '../utility/api'; + import { _t } from '../translations'; export let conid; export let database; @@ -113,7 +114,7 @@ function editSql() { openNewTab( { - title: 'Query #', + title: _t('query.queryNumber', { defaultMessage: 'Query #' }), icon: 'img sql-file', tabComponent: 'QueryTab', focused: true, @@ -133,7 +134,7 @@ - SQL Generator + {_t('sqlGenerator.sqlGenerator', { defaultMessage: 'SQL Generator' })} {database} @@ -146,9 +147,9 @@
- Choose objects + {_t('sqlGenerator.chooseObjects', { defaultMessage: 'Choose objects' })} - + @@ -174,54 +175,53 @@ {:else}
{#if truncated} - + {/if}
{#if busy} - + {/if} {/if}
- Generator settings + {_t('sqlGenerator.generatorSettings', { defaultMessage: 'Generator settings' })} -
Tables
- +
{_t('sqlGenerator.tables', { defaultMessage: 'Tables' })}
+ {#if values.dropTables}
- +
{/if} - + - - - - + + + + - + {#if values.insert}
- - - + + +
{/if} - - + {#each ['View', 'Matview', 'Procedure', 'Function', 'Trigger', 'SchedulerEvent'] as objtype}
{getObjectTypeFieldLabel(objtype + 's')}
- - + + {#if values[`drop${objtype}s`]}
- +
{/if} {/each} @@ -241,8 +241,8 @@
- Edit SQL - Close + {_t('sqlGenerator.editSql', { defaultMessage: 'Edit SQL' })} + {_t('common.close', { defaultMessage: 'Close' })}
diff --git a/packages/web/src/modals/SwitchDatabaseModal.svelte b/packages/web/src/modals/SwitchDatabaseModal.svelte index 33662e717..3f40ff4d1 100644 --- a/packages/web/src/modals/SwitchDatabaseModal.svelte +++ b/packages/web/src/modals/SwitchDatabaseModal.svelte @@ -19,6 +19,7 @@ import FormConnectionSelect from '../impexp/FormConnectionSelect.svelte'; import FormDatabaseSelect from '../impexp/FormDatabaseSelect.svelte'; import { changeTab } from '../utility/common'; + import { _t } from '../translations'; export let editingData; export let callingTab; @@ -46,15 +47,15 @@ - Switch database + {_t('switchDatabase.switchDatabase', { defaultMessage: 'Switch database' })} - - + + - - + + diff --git a/packages/web/src/modals/ValueLookupModal.svelte b/packages/web/src/modals/ValueLookupModal.svelte index 7b3701ac6..602c730f0 100644 --- a/packages/web/src/modals/ValueLookupModal.svelte +++ b/packages/web/src/modals/ValueLookupModal.svelte @@ -141,7 +141,7 @@ {#if multiselect} { closeCurrentModal(); onConfirm(checkedKeys); diff --git a/packages/web/src/perspectives/CustomJoinModal.svelte b/packages/web/src/perspectives/CustomJoinModal.svelte index c8009acca..7f4c8d490 100644 --- a/packages/web/src/perspectives/CustomJoinModal.svelte +++ b/packages/web/src/perspectives/CustomJoinModal.svelte @@ -20,6 +20,7 @@ import type { ChangePerspectiveConfigFunc, PerspectiveConfig, PerspectiveCustomJoinConfig } from 'dbgate-datalib'; import uuidv1 from 'uuid/v1'; import TextField from '../forms/TextField.svelte'; + import { _t } from '../translations'; export let conid; export let database; @@ -90,7 +91,7 @@ $: connections = useConnectionList(); $: connectionOptions = [ - { value: null, label: 'The same as root' }, + { value: null, label: _t('customJoin.theSameAsRoot', { defaultMessage: 'The same as root' }) }, ..._.sortBy( ($connections || []) // .filter(x => !x.unsaved) @@ -107,7 +108,7 @@ $: databases = useDatabaseList({ conid: conidOverride || conid }); $: databaseOptions = [ - { value: null, label: 'The same as root' }, + { value: null, label: _t('customJoin.theSameAsRoot', { defaultMessage: 'The same as root' }) }, ..._.sortBy( ($databases || []).map(db => ({ value: db.name, @@ -147,11 +148,11 @@ - Define custom join + {_t('customJoin.defineCustomJoin', { defaultMessage: 'Define custom join' })}
-
Join name
+
{_t('customJoin.joinName', { defaultMessage: 'Join name' })}
-
Base table
+
{_t('customJoin.baseTable', { defaultMessage: 'Base table' })}
-
Connection
+
{_t('customJoin.connection', { defaultMessage: 'Connection' })}
-
Database
+
{_t('customJoin.database', { defaultMessage: 'Database' })}
-->
-
Referenced table
+
{_t('customJoin.referencedTable', { defaultMessage: 'Referenced table' })}
- Base column - {fromTableInfo?.pureName} + {_t('customJoin.baseColumn', { defaultMessage: 'Base column' })} - {fromTableInfo?.pureName}
- Ref column - {refTableName || '(table not set)'} + {_t('customJoin.refColumn', { defaultMessage: 'Ref column' })} - {refTableName || _t('customJoin.tableNotSet', { defaultMessage: '(table not set)' })}
@@ -286,7 +287,7 @@
{ const x = [...columns]; x.splice(index, 1); @@ -299,7 +300,7 @@ { columns = [ ...columns, @@ -314,7 +315,7 @@ { setConfig(cfg => { const newNode = createPerspectiveNodeConfig({ pureName: refTableName, schemaName: refSchemaName }); @@ -361,7 +362,7 @@ }} /> - + diff --git a/packages/web/src/query/MessageView.svelte b/packages/web/src/query/MessageView.svelte index 99c82d6bf..6e0013023 100644 --- a/packages/web/src/query/MessageView.svelte +++ b/packages/web/src/query/MessageView.svelte @@ -6,6 +6,7 @@ import { filterName } from 'dbgate-tools'; import InlineButton from '../buttons/InlineButton.svelte'; import FontIcon from '../icons/FontIcon.svelte'; + import { _t } from '../translations'; export let items: any[]; export let showProcedure = false; @@ -49,49 +50,49 @@ }} > - Clear + {_t('messageView.clear', { defaultMessage: "Clear" })} {/if} x.severity == 'debug').length} /> x.severity == 'info').length} /> x.severity == 'error').length} /> - +
- - - - - + + + + + {#if showProcedure} - + {/if} {#if showLine} - + {/if} {#if showCaller} - + {/if} diff --git a/packages/web/src/query/ResultTabs.svelte b/packages/web/src/query/ResultTabs.svelte index 975cf8348..35f45b70c 100644 --- a/packages/web/src/query/ResultTabs.svelte +++ b/packages/web/src/query/ResultTabs.svelte @@ -11,6 +11,7 @@ import AllResultsTab from './AllResultsTab.svelte'; import JslChart from '../charts/JslChart.svelte'; import { isProApp } from '../utility/proTools'; + import { __t, _t } from '../translations'; export let tabs = []; export let sessionId; @@ -68,7 +69,7 @@ ...(oneTab && resultInfos.length > 0 ? [ { - label: 'Results', + label: _t('resultTabs.results', { defaultMessage: 'Results' }), isResult: true, component: AllResultsTab, props: { @@ -77,14 +78,14 @@ }, ] : resultInfos.map((info, index) => ({ - label: `Result ${index + 1}`, + label: _t('resultTabs.resultNumber', { defaultMessage: 'Result {number}', values: { number: index + 1 } }), isResult: true, component: JslDataGrid, resultIndex: info.resultIndex, props: { jslid: info.jslid, driver, onOpenChart: () => handleOpenChart(info.resultIndex) }, }))), ...charts.map((info, index) => ({ - label: `Chart ${info.resultIndex + 1}`, + label: _t('resultTabs.chartNumber', { defaultMessage: 'Chart {number}', values: { number: info.resultIndex + 1 } }), isChart: true, resultIndex: info.resultIndex, component: JslChart, @@ -174,8 +175,8 @@ tabs={allTabs} menu={resultInfos.length > 0 && [ oneTab - ? { text: 'Every result in single tab', onClick: () => setOneTabValue(false) } - : { text: 'All results in one tab', onClick: () => setOneTabValue(true) }, + ? { text: _t('resultTabs.everyResultInSingleTab', { defaultMessage: 'Every result in single tab' }), onClick: () => setOneTabValue(false) } + : { text: _t('resultTabs.allResultsInOneTab', { defaultMessage: 'All results in one tab' }), onClick: () => setOneTabValue(true) }, ]} onUserChange={value => { if (allTabs[value].isChart) { diff --git a/packages/web/src/query/RunnerOutputFiles.svelte b/packages/web/src/query/RunnerOutputFiles.svelte index a5979c11b..2d8f36c96 100644 --- a/packages/web/src/query/RunnerOutputFiles.svelte +++ b/packages/web/src/query/RunnerOutputFiles.svelte @@ -8,6 +8,7 @@ import { downloadFromApi } from '../utility/exportFileTools'; import useEffect from '../utility/useEffect'; import Link from '../elements/Link.svelte'; + import { _t } from '../translations'; export let runnerId; export let executeNumber; @@ -40,28 +41,28 @@ {#if !files || files.length == 0} - + {:else}
formatFileSize(row.size) }, + { fieldName: 'name', header: _t('query.Name', { defaultMessage: 'Name' }) }, + { fieldName: 'size', header: _t('query.Size', { defaultMessage: 'Size' }), formatter: row => formatFileSize(row.size) }, !electron && { fieldName: 'download', - header: 'Download', + header: _t('query.Download', { defaultMessage: 'Download' }), slot: 0, }, electron && { fieldName: 'copy', - header: 'Copy', + header: _t('query.Copy', { defaultMessage: 'Copy' }), slot: 1, }, electron && { fieldName: 'show', - header: 'Show', + header: _t('query.Show', { defaultMessage: 'Show' }), slot: 2, }, ]} @@ -72,7 +73,7 @@ downloadFromApi(`runners/data/${runnerId}/${row.name}`, row.name); }} > - download + {_t('query.download', { defaultMessage: 'download' })} @@ -86,7 +87,7 @@ } }} > - save + {_t('query.save', { defaultMessage: 'save' })} @@ -96,7 +97,7 @@ electron.showItemInFolder(row.path); }} > - show + {_t('query.show', { defaultMessage: 'show' })} diff --git a/packages/web/src/query/RunnerOutputPane.svelte b/packages/web/src/query/RunnerOutputPane.svelte index 017f0c122..e3910be44 100644 --- a/packages/web/src/query/RunnerOutputPane.svelte +++ b/packages/web/src/query/RunnerOutputPane.svelte @@ -3,6 +3,7 @@ import WidgetTitle from '../widgets/WidgetTitle.svelte'; import RunnerOutputFiles from './RunnerOutputFiles.svelte'; import SocketMessageView from './SocketMessageView.svelte'; + import { _t } from '../translations'; export let runnerId; export let executeNumber; @@ -10,7 +11,7 @@
- Messages + {_t('query.Messages', { defaultMessage: 'Messages' })}
- Output files + {_t('query.OutputFiles', { defaultMessage: 'Output files' })}
diff --git a/packages/web/src/query/SocketMessageView.svelte b/packages/web/src/query/SocketMessageView.svelte index 4bc6f7db5..694f9b07d 100644 --- a/packages/web/src/query/SocketMessageView.svelte +++ b/packages/web/src/query/SocketMessageView.svelte @@ -3,6 +3,7 @@ import ErrorInfo from '../elements/ErrorInfo.svelte'; import { apiOff, apiOn } from '../utility/api'; import createRef from '../utility/createRef'; + import { _t } from '../translations'; import useEffect from '../utility/useEffect'; @@ -75,7 +76,7 @@ {#if showNoMessagesAlert && (!displayedMessages || displayedMessages.length == 0)} - + {:else} -
{_t('settings.defaultActions', { defaultMessage: 'Default actions' })}
+
{_t('settings.defaultActions', { defaultMessage: 'Default Actions' })}
-
{_t('settings.externalTools', { defaultMessage: 'External tools' })}
+
{_t('settings.externalTools', { defaultMessage: 'External Tools' })}
({ ...x, ordinal: index + 1 }))} - title={_t('tableEditor.columns', { + title={_t('tableEditor.columnsCount', { defaultMessage: 'Columns ({columnCount})', values: { columnCount: columns?.length || 0 }, })} diff --git a/packages/web/src/tableeditor/VirtualForeignKeyEditorModal.svelte b/packages/web/src/tableeditor/VirtualForeignKeyEditorModal.svelte index 94d794039..096c8d14f 100644 --- a/packages/web/src/tableeditor/VirtualForeignKeyEditorModal.svelte +++ b/packages/web/src/tableeditor/VirtualForeignKeyEditorModal.svelte @@ -12,6 +12,7 @@ import { onMount, tick } from 'svelte'; import TargetApplicationSelect from '../forms/TargetApplicationSelect.svelte'; import { apiCall } from '../utility/api'; + import { _t } from '../translations'; // import { apiCall } from '../utility/api'; // import { saveDbToApp } from '../utility/appTools'; @@ -70,11 +71,11 @@ - Virtual foreign key + {_t('virtualForeignKey.virtualForeignKey', { defaultMessage: 'Virtual foreign key' })}
-
Referenced table
+
{_t('virtualForeignKey.referencedTable', { defaultMessage: 'Referenced table' })}
- Base column - {$tableInfo?.pureName} + {_t('virtualForeignKey.baseColumn', { defaultMessage: 'Base column' })} - {$tableInfo?.pureName}
- Ref column - {refTableName || '(table not set)'} + {_t('virtualForeignKey.refColumn', { defaultMessage: 'Ref column' })} - {refTableName || _t('virtualForeignKey.tableNotSet', { defaultMessage: '(table not set)' })}
@@ -152,7 +153,7 @@
{ const x = [...columns]; x.splice(index, 1); @@ -165,14 +166,14 @@ { columns = [...columns, {}]; }} />
-
Target application
+
{_t('virtualForeignKey.targetApplication', { defaultMessage: 'Target application' })}
@@ -181,7 +182,7 @@ { await apiCall('apps/save-virtual-reference', { @@ -196,7 +197,7 @@ }} /> - + diff --git a/packages/web/src/tabs/QueryTab.svelte b/packages/web/src/tabs/QueryTab.svelte index 1ee85dce6..e5a02bf96 100644 --- a/packages/web/src/tabs/QueryTab.svelte +++ b/packages/web/src/tabs/QueryTab.svelte @@ -169,6 +169,7 @@ import hasPermission from '../utility/hasPermission'; import QueryAiAssistant from '../ai/QueryAiAssistant.svelte'; import { getCurrentSettings } from '../stores'; + import { Messages } from 'openai/resources/chat/completions'; export let tabid; export let conid; @@ -765,7 +766,7 @@ @@ -360,13 +360,13 @@ > { alterDatabaseDialog(conid, database, db => updateFunc(db, newName)); }, diff --git a/packages/web/src/widgets/ConnectionList.svelte b/packages/web/src/widgets/ConnectionList.svelte index 01808473c..828d21448 100644 --- a/packages/web/src/widgets/ConnectionList.svelte +++ b/packages/web/src/widgets/ConnectionList.svelte @@ -161,8 +161,8 @@ const handleRename = () => { showModal(InputTextModal, { value: folder, - label: 'New folder name', - header: 'Rename folder', + label: _t('connection.newFolderName', { defaultMessage: 'New folder name' }), + header: _t('connection.renameFolder', { defaultMessage: 'Rename folder' }), onConfirm: async newFolder => { emptyConnectionGroupNames.update(folders => _.uniq(folders.map(fld => (fld == folder ? newFolder : fld)))); apiCall('connections/batch-change-folder', { @@ -175,7 +175,7 @@ const handleDelete = () => { showModal(ConfirmModal, { - message: `Really delete folder ${folder}? Connections in folder will be moved into root folder.`, + message: _t('connection.deleteFolderConfirm', { defaultMessage: 'Really delete folder {folder}? Connections in folder will be moved into root folder.', values: { folder } }), onConfirm: () => { emptyConnectionGroupNames.update(folders => folders.filter(fld => fld != folder)); apiCall('connections/batch-change-folder', { @@ -187,8 +187,8 @@ }; return [ - { text: 'Rename', onClick: handleRename }, - { text: 'Delete', onClick: handleDelete }, + { text: _t('common.rename', { defaultMessage: 'Rename' }), onClick: handleRename }, + { text: _t('common.delete', { defaultMessage: 'Delete' }), onClick: handleDelete }, ]; } diff --git a/packages/web/src/widgets/DbKeysTreeNode.svelte b/packages/web/src/widgets/DbKeysTreeNode.svelte index 162fbf820..6aa660525 100644 --- a/packages/web/src/widgets/DbKeysTreeNode.svelte +++ b/packages/web/src/widgets/DbKeysTreeNode.svelte @@ -19,6 +19,7 @@ import _ from 'lodash'; import openNewTab from '../utility/openNewTab'; import { showSnackbarError } from '../utility/snackbar'; + import { _t } from '../translations'; import DbKeysSubTree from './DbKeysSubTree.svelte'; @@ -43,10 +44,10 @@ return [ item.key != null && !connection?.isReadOnly && { - label: 'Delete key', + label: _t('dbKeysTreeNode.deleteKey', { defaultMessage: 'Delete key' }), onClick: () => { showModal(ConfirmModal, { - message: `Really delete key ${item.key}?`, + message: _t('dbKeysTreeNode.deleteKeyConfirm', { defaultMessage: 'Really delete key {key}?', values: { key: item.key } }), onConfirm: async () => { await apiCall('database-connections/call-method', { conid, @@ -62,12 +63,12 @@ }, item.key != null && !connection?.isReadOnly && { - label: 'Rename key', + label: _t('dbKeysTreeNode.renameKey', { defaultMessage: 'Rename key' }), onClick: () => { showModal(InputTextModal, { value: item.key, - label: 'New name', - header: 'Rename key', + label: _t('dbKeysTreeNode.newName', { defaultMessage: 'New name' }), + header: _t('dbKeysTreeNode.renameKey', { defaultMessage: 'Rename key' }), onConfirm: async newName => { await apiCall('database-connections/call-method', { conid, @@ -90,11 +91,11 @@ // }, item.type == 'dir' && !connection?.isReadOnly && { - label: 'Delete branch', + label: _t('dbKeysTreeNode.deleteBranch', { defaultMessage: 'Delete branch' }), onClick: () => { const branch = `${item.key}:*`; showModal(ConfirmModal, { - message: `Really delete branch ${branch} with all keys?`, + message: _t('dbKeysTreeNode.deleteBranchConfirm', { defaultMessage: 'Really delete branch {branch} with all keys?', values: { branch } }), onConfirm: async () => { await apiCall('database-connections/call-method', { conid, @@ -110,7 +111,7 @@ }, , { - label: 'Generate script', + label: _t('dbKeysTreeNode.generateScript', { defaultMessage: 'Generate script' }), onClick: async () => { const data = await apiCall('database-connections/export-keys', { conid, @@ -126,7 +127,7 @@ } newQuery({ - title: 'Export #', + title: _t('dbKeysTreeNode.exportTitle', { defaultMessage: 'Export #' }), initialData: data, }); }, @@ -137,7 +138,7 @@ { if (item.type == 'dir') { @@ -150,7 +151,7 @@ } else { openNewTab({ tabComponent: 'DbKeyDetailTab', - title: item.text || '(no name)', + title: item.text || _t('dbKeysTreeNode.noName', { defaultMessage: '(no name)' }), icon: 'img keydb', props: { isDefaultBrowser: true, diff --git a/packages/web/src/widgets/PrivateCloudWidget.svelte b/packages/web/src/widgets/PrivateCloudWidget.svelte index 3c0d67724..8c0a5ecc0 100644 --- a/packages/web/src/widgets/PrivateCloudWidget.svelte +++ b/packages/web/src/widgets/PrivateCloudWidget.svelte @@ -115,7 +115,7 @@ command: 'new.connectionOnCloud', }, { - text: 'New SQL script', + text: _t('privateCloudWidget.newSqlScript', { defaultMessage: 'New SQL script' }), onClick: () => { const data = ''; showModal(SaveFileModal, { @@ -145,11 +145,11 @@ function createAddFolderMenu() { return [ isProApp() && { - text: 'Create shared folder', + text: _t('privateCloudWidget.createSharedFolder', { defaultMessage: 'Create shared folder' }), onClick: () => { showModal(InputTextModal, { - label: 'New folder name', - header: 'New shared folder', + label: _t('privateCloudWidget.newFolderName', { defaultMessage: 'New folder name' }), + header: _t('privateCloudWidget.newSharedFolder', { defaultMessage: 'New shared folder' }), onConfirm: async newFolder => { apiCall('cloud/create-folder', { name: newFolder, @@ -159,11 +159,11 @@ }, }, { - text: 'Add existing folder (from link)', + text: _t('privateCloudWidget.addExistingFolder', { defaultMessage: 'Add existing folder (from link)' }), onClick: () => { showModal(InputTextModal, { - label: 'Your invite link (in form dbgate://folder/xxx)', - header: 'Add existing shared folder', + label: _t('privateCloudWidget.yourInviteLink', { defaultMessage: 'Your invite link (in form dbgate://folder/xxx)' }), + header: _t('privateCloudWidget.addExistingSharedFolder', { defaultMessage: 'Add existing shared folder' }), onConfirm: async newFolder => { apiCall('cloud/grant-folder', { inviteLink: newFolder, @@ -179,8 +179,8 @@ const handleRename = () => { showModal(InputTextModal, { value: contentGroupMap[folder]?.name, - label: 'New folder name', - header: 'Rename folder', + label: _t('privateCloudWidget.newFolderName', { defaultMessage: 'New folder name' }), + header: _t('privateCloudWidget.renameFolder', { defaultMessage: 'Rename folder' }), onConfirm: async name => { apiCall('cloud/rename-folder', { folid: folder, @@ -192,8 +192,8 @@ const handleDelete = () => { showModal(ConfirmModal, { - message: `Really delete folder ${contentGroupMap[folder]?.name}? All folder content will be deleted!`, - header: 'Delete folder', + message: _t('privateCloudWidget.deleteFolderConfirm', { defaultMessage: 'Really delete folder {folder}? All folder content will be deleted!', values: { folder: contentGroupMap[folder]?.name } }), + header: _t('privateCloudWidget.deleteFolder', { defaultMessage: 'Delete folder' }), onConfirm: () => { apiCall('cloud/delete-folder', { folid: folder, @@ -204,13 +204,13 @@ return [ contentGroupMap[folder]?.role == 'admin' && [ - { text: 'Rename', onClick: handleRename }, - { text: 'Delete', onClick: handleDelete }, + { text: _t('common.rename', { defaultMessage: 'Rename' }), onClick: handleRename }, + { text: _t('common.delete', { defaultMessage: 'Delete' }), onClick: handleDelete }, ], isProApp() && contentGroupMap[folder]?.role == 'admin' && !contentGroupMap[folder]?.isPrivate && { - text: 'Administrate access', + text: _t('privateCloudWidget.administrateAccess', { defaultMessage: 'Administrate access' }), onClick: () => { showModal(ConfigureSharedFolderModal, { folid: folder, @@ -249,13 +249,13 @@ skip={!$cloudSigninTokenHolder} > - + - - + + @@ -289,11 +289,11 @@ /> {#if !cloudContentFlat?.length} - +
{ runCommand('new.connectionOnCloud'); diff --git a/packages/web/src/widgets/PublicCloudWidget.svelte b/packages/web/src/widgets/PublicCloudWidget.svelte index cb6b39270..87454572e 100644 --- a/packages/web/src/widgets/PublicCloudWidget.svelte +++ b/packages/web/src/widgets/PublicCloudWidget.svelte @@ -27,7 +27,7 @@ - + @@ -49,7 +49,7 @@ /> {#if !$publicFiles?.length} - +
{_t('publicCloudWidget.onlyRelevantFilesListed', { defaultMessage: "Only files relevant for your connections, platform and DbGate edition are listed. Please define connections at first." })}
NumberMessageTimeDeltaDuration{_t('messageView.number', { defaultMessage: 'Number' })}{_t('messageView.message', { defaultMessage: 'Message' })}{_t('messageView.time', { defaultMessage: 'Time' })}{_t('messageView.delta', { defaultMessage: 'Delta' })}{_t('messageView.duration', { defaultMessage: 'Duration' })}Procedure{_t('messageView.procedure', { defaultMessage: 'Procedure' })}Line{_t('messageView.line', { defaultMessage: 'Line' })}Caller{_t('messageView.caller', { defaultMessage: 'Caller' })}