translation-connections,sqlObject,column,filter

This commit is contained in:
Stela Augustinova
2025-10-27 15:04:04 +01:00
committed by SPRINX0\prochazka
parent 8663ab2d28
commit 0e211dc91b
16 changed files with 619 additions and 168 deletions

View File

@@ -279,7 +279,7 @@
showModal(InputTextModal, { showModal(InputTextModal, {
header: _t('connection.createDatabase', { defaultMessage: 'Create database' }), header: _t('connection.createDatabase', { defaultMessage: 'Create database' }),
value: 'newdb', value: 'newdb',
label: _t('connection.databaseName', { defaultMessage: 'Database name' }), label: _t('connection.database', { defaultMessage: 'Database name' }),
onConfirm: name => onConfirm: name =>
apiCall('server-connections/create-database', { apiCall('server-connections/create-database', {
conid: data._id, conid: data._id,

View File

@@ -161,8 +161,8 @@ registerCommand({
onClick: () => { onClick: () => {
showModal(InputTextModal, { showModal(InputTextModal, {
value: '', value: '',
label: 'New connection folder name', label: _t('connection.createNewFolderName', { defaultMessage: 'New connection folder name' }),
header: 'Create connection folder', header: _t('connection.createNewFolder', { defaultMessage: 'Create connection folder' }),
onConfirm: async folder => { onConfirm: async folder => {
emptyConnectionGroupNames.update(names => { emptyConnectionGroupNames.update(names => {
if (!folder) return names; if (!folder) return names;

View File

@@ -17,6 +17,7 @@
import SelectField from '../forms/SelectField.svelte'; import SelectField from '../forms/SelectField.svelte';
import ColumnEditorModal from '../tableeditor/ColumnEditorModal.svelte'; import ColumnEditorModal from '../tableeditor/ColumnEditorModal.svelte';
import { tick } from 'svelte'; import { tick } from 'svelte';
import { _t } from '../translations';
export let managerSize; export let managerSize;
export let display: GridDisplay; export let display: GridDisplay;
@@ -154,8 +155,8 @@
class="colmode" class="colmode"
value={isDynamicStructure ? 'variable' : 'fixed'} value={isDynamicStructure ? 'variable' : 'fixed'}
options={[ options={[
{ label: 'Fixed columns (like SQL)', value: 'fixed' }, { label: _t('column.fixed', {defaultMessage: 'Fixed columns (like SQL)'}), value: 'fixed' },
{ label: 'Variable columns (like MongoDB)', value: 'variable' }, { label: _t('column.variable', {defaultMessage: 'Variable columns (like MongoDB)'}) , value: 'variable' },
]} ]}
on:change={e => { on:change={e => {
dispatchChangeSet({ dispatchChangeSet({
@@ -175,7 +176,7 @@
{/if} {/if}
<SearchBoxWrapper> <SearchBoxWrapper>
<SearchInput <SearchInput
placeholder="Search columns" placeholder={_t('column.search', {defaultMessage: 'Search columns'})}
value={currentFilter} value={currentFilter}
onChange={value => display.setSearchInColumns(value)} onChange={value => display.setSearchInColumns(value)}
data-testid="ColumnManager_searchColumns" data-testid="ColumnManager_searchColumns"
@@ -186,8 +187,8 @@
on:click={() => { on:click={() => {
showModal(InputTextModal, { showModal(InputTextModal, {
value: '', value: '',
label: 'Column name', label: _t('column.name', {defaultMessage: 'Column name'}),
header: 'Add new column', header: _t('column.addNew', {defaultMessage: 'Add new column'}),
onConfirm: name => { onConfirm: name => {
display.addDynamicColumn(name); display.addDynamicColumn(name);
tick().then(() => { tick().then(() => {

View File

@@ -17,6 +17,7 @@
import FontIcon from '../icons/FontIcon.svelte'; import FontIcon from '../icons/FontIcon.svelte';
import DictionaryLookupModal from '../modals/DictionaryLookupModal.svelte'; import DictionaryLookupModal from '../modals/DictionaryLookupModal.svelte';
import ValueLookupModal from '../modals/ValueLookupModal.svelte'; import ValueLookupModal from '../modals/ValueLookupModal.svelte';
import { _t } from '../translations';
export let isReadOnly = false; export let isReadOnly = false;
export let filterBehaviour; export let filterBehaviour;
@@ -64,43 +65,43 @@
function createMenu() { function createMenu() {
const res = [ const res = [
{ onClick: () => setFilter(''), text: 'Clear Filter' }, { onClick: () => setFilter(''), text: _t('filter.clear', { defaultMessage: 'Clear Filter' }) },
{ onClick: () => filterMultipleValues(), text: 'Filter multiple values' }, { onClick: () => filterMultipleValues(), text: _t('filter.multipleValues', { defaultMessage: 'Filter multiple values' }) },
]; ];
if (filterBehaviour.supportEquals) { if (filterBehaviour.supportEquals) {
res.push( res.push(
{ onClick: () => openFilterWindow('='), text: 'Equals...' }, { onClick: () => openFilterWindow('='), text: _t('filter.equals', { defaultMessage: 'Equals...' }) },
{ onClick: () => openFilterWindow('<>'), text: 'Does Not Equal...' } { onClick: () => openFilterWindow('<>'), text: _t('filter.doesNotEqual', { defaultMessage: 'Does Not Equal...' }) }
); );
} }
if (filterBehaviour.supportExistsTesting) { if (filterBehaviour.supportExistsTesting) {
res.push( res.push(
{ onClick: () => setFilter('EXISTS'), text: 'Field exists' }, { onClick: () => setFilter('EXISTS'), text: _t('filter.fieldExists', { defaultMessage: 'Field exists' }) },
{ onClick: () => setFilter('NOT EXISTS'), text: 'Field does not exist' } { onClick: () => setFilter('NOT EXISTS'), text: _t('filter.fieldDoesNotExist', { defaultMessage: 'Field does not exist' }) }
); );
} }
if (filterBehaviour.supportNotEmptyArrayTesting) { if (filterBehaviour.supportNotEmptyArrayTesting) {
res.push({ onClick: () => setFilter('NOT EMPTY ARRAY'), text: 'Array is not empty' }); res.push({ onClick: () => setFilter('NOT EMPTY ARRAY'), text: _t('filter.arrayIsNotEmpty', { defaultMessage: 'Array is not empty' }) });
} }
if (filterBehaviour.supportEmptyArrayTesting) { if (filterBehaviour.supportEmptyArrayTesting) {
res.push({ onClick: () => setFilter('EMPTY ARRAY'), text: 'Array is empty' }); res.push({ onClick: () => setFilter('EMPTY ARRAY'), text: _t('filter.arrayIsEmpty', { defaultMessage: 'Array is empty' }) });
} }
if (filterBehaviour.supportNullTesting) { if (filterBehaviour.supportNullTesting) {
res.push( res.push(
{ onClick: () => setFilter('NULL'), text: 'Is Null' }, { onClick: () => setFilter('NULL'), text: _t('filter.isNull', { defaultMessage: 'Is Null' }) },
{ onClick: () => setFilter('NOT NULL'), text: 'Is Not Null' } { onClick: () => setFilter('NOT NULL'), text: _t('filter.isNotNull', { defaultMessage: 'Is Not Null' }) }
); );
} }
if (filterBehaviour.supportEmpty) { if (filterBehaviour.supportEmpty) {
res.push( res.push(
{ onClick: () => setFilter('EMPTY, NULL'), text: 'Is Empty Or Null' }, { onClick: () => setFilter('EMPTY, NULL'), text: _t('filter.isEmptyOrNull', { defaultMessage: 'Is Empty Or Null' }) },
{ onClick: () => setFilter('NOT EMPTY NOT NULL'), text: 'Has Not Empty Value' } { onClick: () => setFilter('NOT EMPTY NOT NULL'), text: _t('filter.hasNotEmptyValue', { defaultMessage: 'Has Not Empty Value' }) }
); );
} }
@@ -108,10 +109,10 @@
res.push( res.push(
{ divider: true }, { divider: true },
{ onClick: () => openFilterWindow('>'), text: 'Greater Than...' }, { onClick: () => openFilterWindow('>'), text: _t('filter.greaterThan', { defaultMessage: 'Greater Than...' }) },
{ onClick: () => openFilterWindow('>='), text: 'Greater Than Or Equal To...' }, { onClick: () => openFilterWindow('>='), text: _t('filter.greaterThanOrEqualTo', { defaultMessage: 'Greater Than Or Equal To...' }) },
{ onClick: () => openFilterWindow('<'), text: 'Less Than...' }, { onClick: () => openFilterWindow('<'), text: _t('filter.lessThan', { defaultMessage: 'Less Than...' }) },
{ onClick: () => openFilterWindow('<='), text: 'Less Than Or Equal To...' } { onClick: () => openFilterWindow('<='), text: _t('filter.lessThanOrEqualTo', { defaultMessage: 'Less Than Or Equal To...' }) }
); );
} }
@@ -119,26 +120,26 @@
res.push( res.push(
{ divider: true }, { divider: true },
{ onClick: () => openFilterWindow('+'), text: 'Contains...' }, { onClick: () => openFilterWindow('+'), text: _t('filter.contains', { defaultMessage: 'Contains...' }) },
{ onClick: () => openFilterWindow('~'), text: 'Does Not Contain...' }, { onClick: () => openFilterWindow('~'), text: _t('filter.doesNotContain', { defaultMessage: 'Does Not Contain...' }) },
{ onClick: () => openFilterWindow('^'), text: 'Begins With...' }, { onClick: () => openFilterWindow('^'), text: _t('filter.beginsWith', { defaultMessage: 'Begins With...' }) },
{ onClick: () => openFilterWindow('!^'), text: 'Does Not Begin With...' }, { onClick: () => openFilterWindow('!^'), text: _t('filter.doesNotBeginWith', { defaultMessage: 'Does Not Begin With...' }) },
{ onClick: () => openFilterWindow('$'), text: 'Ends With...' }, { onClick: () => openFilterWindow('$'), text: _t('filter.endsWith', { defaultMessage: 'Ends With...' }) },
{ onClick: () => openFilterWindow('!$'), text: 'Does Not End With...' } { onClick: () => openFilterWindow('!$'), text: _t('filter.doesNotEndWith', { defaultMessage: 'Does Not End With...' }) }
); );
} }
if (filterBehaviour.supportBooleanValues) { if (filterBehaviour.supportBooleanValues) {
res.push( res.push(
{ onClick: () => setFilter('TRUE'), text: 'Is True' }, { onClick: () => setFilter('TRUE'), text: _t('filter.isTrue', { defaultMessage: 'Is True' }) },
{ onClick: () => setFilter('FALSE'), text: 'Is False' } { onClick: () => setFilter('FALSE'), text: _t('filter.isFalse', { defaultMessage: 'Is False' }) }
); );
} }
if (filterBehaviour.supportBooleanOrNull) { if (filterBehaviour.supportBooleanOrNull) {
res.push( res.push(
{ onClick: () => setFilter('TRUE, NULL'), text: 'Is True or NULL' }, { onClick: () => setFilter('TRUE, NULL'), text: _t('filter.isTrueOrNull', { defaultMessage: 'Is True or NULL' }) },
{ onClick: () => setFilter('FALSE, NULL'), text: 'Is False or NULL' } { onClick: () => setFilter('FALSE, NULL'), text: _t('filter.isFalseOrNull', { defaultMessage: 'Is False or NULL' }) }
); );
} }
@@ -146,44 +147,44 @@
res.push( res.push(
{ divider: true }, { divider: true },
{ onClick: () => setFilter('TOMORROW'), text: 'Tomorrow' }, { onClick: () => setFilter('TOMORROW'), text: _t('filter.tomorrow', { defaultMessage: 'Tomorrow' }) },
{ onClick: () => setFilter('TODAY'), text: 'Today' }, { onClick: () => setFilter('TODAY'), text: _t('filter.today', { defaultMessage: 'Today' }) },
{ onClick: () => setFilter('YESTERDAY'), text: 'Yesterday' }, { onClick: () => setFilter('YESTERDAY'), text: _t('filter.yesterday', { defaultMessage: 'Yesterday' }) },
{ divider: true }, { divider: true },
{ onClick: () => setFilter('NEXT WEEK'), text: 'Next Week' }, { onClick: () => setFilter('NEXT WEEK'), text: _t('filter.nextWeek', { defaultMessage: 'Next Week' }) },
{ onClick: () => setFilter('THIS WEEK'), text: 'This Week' }, { onClick: () => setFilter('THIS WEEK'), text: _t('filter.thisWeek', { defaultMessage: 'This Week' }) },
{ onClick: () => setFilter('LAST WEEK'), text: 'Last Week' }, { onClick: () => setFilter('LAST WEEK'), text: _t('filter.lastWeek', { defaultMessage: 'Last Week' }) },
{ divider: true }, { divider: true },
{ onClick: () => setFilter('NEXT MONTH'), text: 'Next Month' }, { onClick: () => setFilter('NEXT MONTH'), text: _t('filter.nextMonth', { defaultMessage: 'Next Month' }) },
{ onClick: () => setFilter('THIS MONTH'), text: 'This Month' }, { onClick: () => setFilter('THIS MONTH'), text: _t('filter.thisMonth', { defaultMessage: 'This Month' }) },
{ onClick: () => setFilter('LAST MONTH'), text: 'Last Month' }, { onClick: () => setFilter('LAST MONTH'), text: _t('filter.lastMonth', { defaultMessage: 'Last Month' }) },
{ divider: true }, { divider: true },
{ onClick: () => setFilter('NEXT YEAR'), text: 'Next Year' }, { onClick: () => setFilter('NEXT YEAR'), text: _t('filter.nextYear', { defaultMessage: 'Next Year' }) },
{ onClick: () => setFilter('THIS YEAR'), text: 'This Year' }, { onClick: () => setFilter('THIS YEAR'), text: _t('filter.thisYear', { defaultMessage: 'This Year' }) },
{ onClick: () => setFilter('LAST YEAR'), text: 'Last Year' } { onClick: () => setFilter('LAST YEAR'), text: _t('filter.lastYear', { defaultMessage: 'Last Year' }) }
); );
} }
if (filterBehaviour.supportDatetimeComparison) { if (filterBehaviour.supportDatetimeComparison) {
res.push( res.push(
{ divider: true }, { divider: true },
{ onClick: () => openFilterWindow('<='), text: 'Before...' }, { onClick: () => openFilterWindow('<='), text: _t('filter.before', { defaultMessage: 'Before...' }) },
{ onClick: () => openFilterWindow('>='), text: 'After...' }, { onClick: () => openFilterWindow('>='), text: _t('filter.after', { defaultMessage: 'After...' }) },
{ onClick: () => openFilterWindow('>=;<='), text: 'Between...' } { onClick: () => openFilterWindow('>=;<='), text: _t('filter.between', { defaultMessage: 'Between...' }) }
); );
} }
if (filterBehaviour.supportSqlCondition) { if (filterBehaviour.supportSqlCondition) {
res.push( res.push(
{ divider: true }, { divider: true },
{ onClick: () => openFilterWindow('sql'), text: 'SQL condition ...' }, { onClick: () => openFilterWindow('sql'), text: _t('filter.sqlCondition', { defaultMessage: 'SQL condition ...' }) },
{ onClick: () => openFilterWindow('sqlRight'), text: 'SQL condition - right side ...' } { onClick: () => openFilterWindow('sqlRight'), text: _t('filter.sqlConditionRight', { defaultMessage: 'SQL condition - right side ...' }) }
); );
} }

View File

@@ -6,6 +6,7 @@
import FormTextField from '../forms/FormTextField.svelte'; import FormTextField from '../forms/FormTextField.svelte';
import ModalBase from './ModalBase.svelte'; import ModalBase from './ModalBase.svelte';
import { closeCurrentModal } from './modalTools'; import { closeCurrentModal } from './modalTools';
import { _t } from '../translations';
export let header; export let header;
export let value; export let value;
@@ -29,7 +30,7 @@
<svelte:fragment slot="footer"> <svelte:fragment slot="footer">
<FormSubmit value="OK" on:click={e => handleSubmit(e.detail)} data-testid="InputTextModal_ok" /> <FormSubmit value="OK" on:click={e => handleSubmit(e.detail)} data-testid="InputTextModal_ok" />
<FormStyledButton type="button" value="Cancel" on:click={closeCurrentModal} data-testid="InputTextModal_cancel" /> <FormStyledButton type="button" value={_t('common.cancel', { defaultMessage: 'Cancel' })} on:click={closeCurrentModal} data-testid="InputTextModal_cancel" />
</svelte:fragment> </svelte:fragment>
</ModalBase> </ModalBase>
</FormProvider> </FormProvider>

View File

@@ -10,6 +10,7 @@
import { closeCurrentModal } from './modalTools'; import { closeCurrentModal } from './modalTools';
import FormRadioGroupItem from '../forms/FormRadioGroupItem.svelte'; import FormRadioGroupItem from '../forms/FormRadioGroupItem.svelte';
import FormValues from '../forms/FormValues.svelte'; import FormValues from '../forms/FormValues.svelte';
import { _t } from '../translations';
export let condition1; export let condition1;
export let onFilter; export let onFilter;
@@ -44,10 +45,10 @@
<FormProvider initialValues={{ condition1, condition2: '=', joinOperator: ' ' }} template={FormFieldTemplateLarge}> <FormProvider initialValues={{ condition1, condition2: '=', joinOperator: ' ' }} template={FormFieldTemplateLarge}>
<ModalBase {...$$restProps}> <ModalBase {...$$restProps}>
<div slot="header">Set filter</div> <div slot="header">{_t('filter.setFilter', {defaultMessage: 'Set filter'})}</div>
<div class="largeFormMarker"> <div class="largeFormMarker">
<div class="row">Show rows where</div> <div class="row">{_t('filter.showRowsWhere', {defaultMessage: 'Show rows where'})}</div>
<div class="row"> <div class="row">
<div class="col-6 mr-1"> <div class="col-6 mr-1">
<SetFilterModal_Select {filterBehaviour} name="condition1" /> <SetFilterModal_Select {filterBehaviour} name="condition1" />
@@ -62,9 +63,9 @@
</div> </div>
<div class="row"> <div class="row">
<FormRadioGroupItem name="joinOperator" value=" " text="And" /> <FormRadioGroupItem name="joinOperator" value=" " text={_t('filter.and', {defaultMessage: 'And'})} />
{#if !filterBehaviour.disableOr} {#if !filterBehaviour.disableOr}
<FormRadioGroupItem name="joinOperator" value="," text="Or" /> <FormRadioGroupItem name="joinOperator" value="," text={_t('filter.or', {defaultMessage: 'Or'})} />
{/if} {/if}
</div> </div>
@@ -84,7 +85,7 @@
<div slot="footer"> <div slot="footer">
<FormSubmit value="OK" on:click={handleOk} /> <FormSubmit value="OK" on:click={handleOk} />
<FormButton type="button" value="Close" on:click={closeCurrentModal} /> <FormButton type="button" value={_t('common.close', {defaultMessage: 'Close'})} on:click={closeCurrentModal} />
</div> </div>
</ModalBase> </ModalBase>
</FormProvider> </FormProvider>

View File

@@ -1,56 +1,57 @@
<script lang="ts"> <script lang="ts">
import _ from 'lodash';
import FormSelectFieldRaw from '../forms/FormSelectFieldRaw.svelte'; import FormSelectFieldRaw from '../forms/FormSelectFieldRaw.svelte';
import { _t } from '../translations';
export let name; export let name;
export let filterBehaviour; export let filterBehaviour;
function getOptions() { function getOptions() {
const res = []; const res = [];
if (filterBehaviour.supportEquals) { if (filterBehaviour.supportEquals) {
res.push({ value: '=', label: 'equals' }, { value: '<>', label: 'does not equal' }); res.push({ value: '=', label: _t('filter.modal.equals', {defaultMessage: 'equals'}) }, { value: '<>', label: _t('filter.modal.doesNotEqual', {defaultMessage: 'does not equal'}) });
} };
if (filterBehaviour.supportStringInclusion) { if (filterBehaviour.supportStringInclusion) {
res.push( res.push(
{ value: '+', label: 'contains' }, { value: '+', label: _t('filter.modal.contains', {defaultMessage: 'contains'}) },
{ value: '~', label: 'does not contain' }, { value: '~', label: _t('filter.modal.doesNotContain', {defaultMessage: 'does not contain'}) },
{ value: '^', label: 'begins with' }, { value: '^', label: _t('filter.modal.beginsWith', {defaultMessage: 'begins with'}) },
{ value: '!^', label: 'does not begin with' }, { value: '!^', label: _t('filter.modal.doesNotBeginWith', {defaultMessage: 'does not begin with'}) },
{ value: '$', label: 'ends with' }, { value: '$', label: _t('filter.modal.endsWith', {defaultMessage: 'ends with'}) },
{ value: '!$', label: 'does not end with' } { value: '!$', label: _t('filter.modal.doesNotEndWith', {defaultMessage: 'does not end with'}) }
); );
} }
if (filterBehaviour.supportNumberLikeComparison) { if (filterBehaviour.supportNumberLikeComparison) {
res.push( res.push(
{ value: '<', label: 'is smaller' }, { value: '<', label: _t('filter.isSmaller', {defaultMessage: 'is smaller'}) },
{ value: '>', label: 'is greater' }, { value: '>', label: _t('filter.isGreater', {defaultMessage: 'is greater'}) },
{ value: '<=', label: 'is smaller or equal' }, { value: '<=', label: _t('filter.isSmallerOrEqual', {defaultMessage: 'is smaller or equal'}) },
{ value: '>=', label: 'is greater or equal' } { value: '>=', label: _t('filter.isGreaterOrEqual', {defaultMessage: 'is greater or equal'}) }
); );
} }
if (filterBehaviour.supportDatetimeComparison) { if (filterBehaviour.supportDatetimeComparison) {
res.push( res.push(
{ value: '<', label: 'is before' }, { value: '<', label: _t('filter.isBefore', {defaultMessage: 'is before'}) },
{ value: '>', label: 'is after' }, { value: '>', label: _t('filter.isAfter', {defaultMessage: 'is after'}) },
{ value: '<=', label: 'is before or equal' }, { value: '<=', label: _t('filter.isBeforeOrEqual', {defaultMessage: 'is before or equal'}) },
{ value: '>=', label: 'is after or equal' } { value: '>=', label: _t('filter.isAfterOrEqual', {defaultMessage: 'is after or equal'}) }
); );
} }
if (filterBehaviour.supportNullTesting) { if (filterBehaviour.supportNullTesting) {
res.push({ value: 'NULL', label: 'is NULL' }, { value: 'NOT NULL', label: 'is not NULL' }); res.push({ value: 'NULL', label: _t('filter.modal.isNull', {defaultMessage: 'is NULL'}) }, { value: 'NOT NULL', label: _t('filter.modal.isNotNull', {defaultMessage: 'is not NULL'}) });
} }
if (filterBehaviour.supportExistsTesting) { if (filterBehaviour.supportExistsTesting) {
res.push({ value: 'EXISTS', label: 'field exists' }, { value: 'NOT EXISTS', label: 'field does not exist' }); res.push({ value: 'EXISTS', label: _t('filter.modal.fieldExists', {defaultMessage: 'field exists'}) }, { value: 'NOT EXISTS', label: _t('filter.modal.fieldDoesNotExist', {defaultMessage: 'field does not exist'}) });
} }
if (filterBehaviour.supportSqlCondition) { if (filterBehaviour.supportSqlCondition) {
res.push( res.push(
{ value: 'sql', label: 'SQL condition' }, { value: 'sql', label: _t('filter.modal.sqlCondition', {defaultMessage: 'SQL condition'}) },
{ value: 'sqlRight', label: 'SQL condition - right side only' } { value: 'sqlRight', label: _t('filter.modal.sqlConditionRight', {defaultMessage: 'SQL condition - right side only'}) }
); );
} }

View File

@@ -4,6 +4,7 @@
import { getFormContext } from '../forms/FormProviderCore.svelte'; import { getFormContext } from '../forms/FormProviderCore.svelte';
import FormTextAreaField from '../forms/FormTextAreaField.svelte'; import FormTextAreaField from '../forms/FormTextAreaField.svelte';
import FormArgumentList from '../forms/FormArgumentList.svelte'; import FormArgumentList from '../forms/FormArgumentList.svelte';
import { _t } from '../translations';
const { values } = getFormContext(); const { values } = getFormContext();
@@ -16,8 +17,8 @@
$: advancedFields = driver?.getAdvancedConnectionFields ? driver?.getAdvancedConnectionFields() : null; $: advancedFields = driver?.getAdvancedConnectionFields ? driver?.getAdvancedConnectionFields() : null;
</script> </script>
<FormTextAreaField label="Allowed databases, one per line" name="allowedDatabases" disabled={isConnected} rows={8} /> <FormTextAreaField label={_t('connection.allowedDatabases', { defaultMessage: 'Allowed databases, one per line' })} name="allowedDatabases" disabled={isConnected} rows={8} />
<FormTextField label="Allowed databases regular expression" name="allowedDatabasesRegex" disabled={isConnected} /> <FormTextField label={_t('connection.allowedDatabasesRegex', { defaultMessage: 'Allowed databases regular expression' })} name="allowedDatabasesRegex" disabled={isConnected} />
{#if advancedFields} {#if advancedFields}
<FormArgumentList args={advancedFields} /> <FormArgumentList args={advancedFields} />

View File

@@ -87,13 +87,13 @@
</script> </script>
<FormSelectField <FormSelectField
label="Connection type" label={_t('connection.type', { defaultMessage: 'Connection type' })}
name="engine" name="engine"
isNative isNative
disabled={isConnected} disabled={isConnected}
data-testid="ConnectionDriverFields_connectionType" data-testid="ConnectionDriverFields_connectionType"
options={[ options={[
{ label: '(select connection type)', value: '' }, { label: _t('connection.selectType', { defaultMessage: '(select connection type)' })},
..._.sortBy( ..._.sortBy(
$extensions.drivers $extensions.drivers
// .filter(driver => !driver.isElectronOnly || electron) // .filter(driver => !driver.isElectronOnly || electron)
@@ -109,7 +109,7 @@
{#if $authTypes && driver?.showConnectionField('authType', $values, showConnectionFieldArgs) && driver?.authTypeFirst} {#if $authTypes && driver?.showConnectionField('authType', $values, showConnectionFieldArgs) && driver?.authTypeFirst}
{#key $authTypes} {#key $authTypes}
<FormSelectField <FormSelectField
label={driver?.authTypeLabel ?? 'Authentication'} label={driver?.authTypeLabel ?? _t('connection.authentication', { defaultMessage: 'Authentication' })}
data-testid="ConnectionDriverFields_authType" data-testid="ConnectionDriverFields_authType"
name="authType" name="authType"
isNative isNative
@@ -125,7 +125,7 @@
{#if driver?.showConnectionField('clusterNodes', $values, showConnectionFieldArgs)} {#if driver?.showConnectionField('clusterNodes', $values, showConnectionFieldArgs)}
<FormClusterNodesField <FormClusterNodesField
label="Cluster nodes" label={_t('connection.clusterNodes', { defaultMessage: 'Cluster nodes' })}
name="clusterNodes" name="clusterNodes"
disabled={isConnected || disabledFields.includes('clusterNodes')} disabled={isConnected || disabledFields.includes('clusterNodes')}
data-testid="ConnectionDriverFields_clusterNodes" data-testid="ConnectionDriverFields_clusterNodes"
@@ -134,7 +134,7 @@
{#if driver?.showConnectionField('autoDetectNatMap', $values, showConnectionFieldArgs)} {#if driver?.showConnectionField('autoDetectNatMap', $values, showConnectionFieldArgs)}
<FormCheckboxField <FormCheckboxField
label="Auto detect NAT map (use for Redis Cluster in Docker network)" label={_t('connection.autoDetectNatMap', { defaultMessage: 'Auto detect NAT map (use for Redis Cluster in Docker network)' })}
name="autoDetectNatMap" name="autoDetectNatMap"
disabled={isConnected} disabled={isConnected}
data-testid="ConnectionDriverFields_autoDetectNatMap" data-testid="ConnectionDriverFields_autoDetectNatMap"
@@ -144,13 +144,13 @@
{#if driver?.showConnectionField('databaseFile', $values, showConnectionFieldArgs)} {#if driver?.showConnectionField('databaseFile', $values, showConnectionFieldArgs)}
{#if electron && !driver?.dialect?.useServerDatabaseFile} {#if electron && !driver?.dialect?.useServerDatabaseFile}
<FormElectronFileSelector <FormElectronFileSelector
label="Database file" label={_t('connection.databaseFile', { defaultMessage: 'Database file' })}
name="databaseFile" name="databaseFile"
disabled={isConnected || disabledFields.includes('databaseFile')} disabled={isConnected || disabledFields.includes('databaseFile')}
/> />
{:else} {:else}
<FormTextField <FormTextField
label="Database file (path on server)" label={_t('connection.databaseFilePath', { defaultMessage: 'Database file (path on server)' })}
name="databaseFile" name="databaseFile"
disabled={isConnected || disabledFields.includes('databaseFile')} disabled={isConnected || disabledFields.includes('databaseFile')}
/> />
@@ -164,8 +164,8 @@
name="useDatabaseUrl" name="useDatabaseUrl"
matchValueToOption={(value, option) => !!option.value == !!value} matchValueToOption={(value, option) => !!option.value == !!value}
options={[ options={[
{ label: 'Fill database connection details', value: '', default: true }, { label: _t('connection.fillDetails', { defaultMessage: 'Fill database connection details' }), value: '', default: true },
{ label: 'Use database URL', value: '1' }, { label: _t('connection.useUrl', { defaultMessage: 'Use database URL' }), value: '1' },
]} ]}
/> />
</div> </div>
@@ -173,7 +173,7 @@
{#if driver?.showConnectionField('databaseUrl', $values, showConnectionFieldArgs)} {#if driver?.showConnectionField('databaseUrl', $values, showConnectionFieldArgs)}
<FormTextField <FormTextField
label="Database URL" label={_t('connection.databaseUrl', { defaultMessage: 'Database URL' })}
name="databaseUrl" name="databaseUrl"
data-testid="ConnectionDriverFields_databaseUrl" data-testid="ConnectionDriverFields_databaseUrl"
placeholder={driver?.databaseUrlPlaceholder} placeholder={driver?.databaseUrlPlaceholder}
@@ -183,7 +183,7 @@
{#if driver?.showConnectionField('localDataCenter', $values, showConnectionFieldArgs)} {#if driver?.showConnectionField('localDataCenter', $values, showConnectionFieldArgs)}
<FormTextField <FormTextField
label="Local DataCenter" label={_t('connection.localDataCenter', { defaultMessage: 'Local DataCenter' })}
name="localDataCenter" name="localDataCenter"
data-testid="ConnectionDriverFields_localDataCenter" data-testid="ConnectionDriverFields_localDataCenter"
placeholder={driver?.defaultLocalDataCenter} placeholder={driver?.defaultLocalDataCenter}
@@ -203,7 +203,7 @@
{#if $authTypes && driver?.showConnectionField('authType', $values, showConnectionFieldArgs) && !driver?.authTypeFirst} {#if $authTypes && driver?.showConnectionField('authType', $values, showConnectionFieldArgs) && !driver?.authTypeFirst}
{#key $authTypes} {#key $authTypes}
<FormSelectField <FormSelectField
label={driver?.authTypeLabel ?? 'Authentication'} label={driver?.authTypeLabel ?? _t('connection.authentication', { defaultMessage: 'Authentication' })}
data-testid="ConnectionDriverFields_authType" data-testid="ConnectionDriverFields_authType"
name="authType" name="authType"
isNative isNative
@@ -219,7 +219,7 @@
{#if driver?.showConnectionField('endpoint', $values, showConnectionFieldArgs)} {#if driver?.showConnectionField('endpoint', $values, showConnectionFieldArgs)}
<FormTextField <FormTextField
label="Endpoint" label='Endpoint'
name="endpoint" name="endpoint"
disabled={isConnected || disabledFields.includes('endpoint')} disabled={isConnected || disabledFields.includes('endpoint')}
data-testid="ConnectionDriverFields_endpoint" data-testid="ConnectionDriverFields_endpoint"
@@ -228,7 +228,7 @@
{#if driver?.showConnectionField('endpointKey', $values, showConnectionFieldArgs)} {#if driver?.showConnectionField('endpointKey', $values, showConnectionFieldArgs)}
<FormTextField <FormTextField
label="Key" label={_t('connection.endpointKey', { defaultMessage: 'Key' })}
name="endpointKey" name="endpointKey"
disabled={isConnected || disabledFields.includes('endpointKey')} disabled={isConnected || disabledFields.includes('endpointKey')}
data-testid="ConnectionDriverFields_endpointKey" data-testid="ConnectionDriverFields_endpointKey"
@@ -237,7 +237,7 @@
{#if driver?.showConnectionField('clientLibraryPath', $values, showConnectionFieldArgs)} {#if driver?.showConnectionField('clientLibraryPath', $values, showConnectionFieldArgs)}
<FormTextField <FormTextField
label="Client library path" label={_t('connection.clientLibraryPath', { defaultMessage: 'Client library path' })}
name="clientLibraryPath" name="clientLibraryPath"
disabled={isConnected || disabledFields.includes('clientLibraryPath')} disabled={isConnected || disabledFields.includes('clientLibraryPath')}
data-testid="ConnectionDriverFields_clientLibraryPath" data-testid="ConnectionDriverFields_clientLibraryPath"
@@ -248,7 +248,7 @@
<div class="row"> <div class="row">
<div class="col-9 mr-1"> <div class="col-9 mr-1">
<FormTextField <FormTextField
label="Server" label={_t('connection.server', { defaultMessage: 'Server' })}
name="server" name="server"
disabled={isConnected || disabledFields.includes('server')} disabled={isConnected || disabledFields.includes('server')}
templateProps={{ noMargin: true }} templateProps={{ noMargin: true }}
@@ -271,7 +271,7 @@
{#if getCurrentConfig().isDocker} {#if getCurrentConfig().isDocker}
<div class="row"> <div class="row">
<FontIcon icon="img warn" padRight /> <FontIcon icon="img warn" padRight />
Under docker, localhost and 127.0.0.1 will not work, use dockerhost instead { _t('connection.dockerWarning', { defaultMessage: 'Under docker, localhost and 127.0.0.1 will not work, use dockerhost instead' }) }
</div> </div>
{/if} {/if}
{/if} {/if}
@@ -280,7 +280,7 @@
<div class="row"> <div class="row">
<div class="col-9 mr-1"> <div class="col-9 mr-1">
<FormTextField <FormTextField
label={$values.serviceNameType == 'sid' ? 'SID' : 'Service name'} label={$values.serviceNameType == 'sid' ? 'SID' : _t('connection.serviceName', { defaultMessage: 'Service name' })}
name="serviceName" name="serviceName"
disabled={isConnected} disabled={isConnected}
templateProps={{ noMargin: true }} templateProps={{ noMargin: true }}
@@ -289,14 +289,14 @@
</div> </div>
<div class="col-3"> <div class="col-3">
<FormSelectField <FormSelectField
label="Choose type" label={_t('connection.chooseType', { defaultMessage: 'Choose type' })}
isNative isNative
name="serviceNameType" name="serviceNameType"
defaultValue="serviceName" defaultValue="serviceName"
disabled={isConnected} disabled={isConnected}
templateProps={{ noMargin: true }} templateProps={{ noMargin: true }}
options={[ options={[
{ value: 'serviceName', label: 'Service name' }, { value: 'serviceName', label: _t('connection.serviceName', { defaultMessage: 'Service name' }) },
{ value: 'sid', label: 'SID' }, { value: 'sid', label: 'SID' },
]} ]}
data-testid="ConnectionDriverFields_serviceNameType" data-testid="ConnectionDriverFields_serviceNameType"
@@ -307,7 +307,7 @@
{#if driver?.showConnectionField('socketPath', $values, showConnectionFieldArgs)} {#if driver?.showConnectionField('socketPath', $values, showConnectionFieldArgs)}
<FormTextField <FormTextField
label="Socket path" label={_t('connection.socketPath', { defaultMessage: 'Socket path' })}
name="socketPath" name="socketPath"
disabled={isConnected || disabledFields.includes('socketPath')} disabled={isConnected || disabledFields.includes('socketPath')}
placeholder={driver?.defaultSocketPath} placeholder={driver?.defaultSocketPath}
@@ -320,7 +320,7 @@
{#if showUser} {#if showUser}
<div class="col-6 mr-1"> <div class="col-6 mr-1">
<FormTextField <FormTextField
label="User" label={_t('connection.user', { defaultMessage: 'User' })}
name="user" name="user"
disabled={isConnected || disabledFields.includes('user')} disabled={isConnected || disabledFields.includes('user')}
templateProps={{ noMargin: true }} templateProps={{ noMargin: true }}
@@ -331,7 +331,7 @@
{#if showPassword} {#if showPassword}
<div class="col-6 mr-1"> <div class="col-6 mr-1">
<FormPasswordField <FormPasswordField
label="Password" label={_t('connection.password', { defaultMessage: 'Password' })}
name="password" name="password"
disabled={isConnected || disabledFields.includes('password')} disabled={isConnected || disabledFields.includes('password')}
templateProps={{ noMargin: true }} templateProps={{ noMargin: true }}
@@ -343,7 +343,7 @@
{/if} {/if}
{#if showUser && !showPassword} {#if showUser && !showPassword}
<FormTextField <FormTextField
label="User" label={_t('connection.user', { defaultMessage: 'User' })}
name="user" name="user"
disabled={isConnected || disabledFields.includes('user')} disabled={isConnected || disabledFields.includes('user')}
data-testid="ConnectionDriverFields_user" data-testid="ConnectionDriverFields_user"
@@ -351,7 +351,7 @@
{/if} {/if}
{#if !showUser && showPassword} {#if !showUser && showPassword}
<FormPasswordField <FormPasswordField
label="Password" label={_t('connection.password', { defaultMessage: 'Password' })}
name="password" name="password"
disabled={isConnected || disabledFields.includes('password')} disabled={isConnected || disabledFields.includes('password')}
data-testid="ConnectionDriverFields_password" data-testid="ConnectionDriverFields_password"
@@ -378,7 +378,7 @@
{#if driver?.showConnectionField('accessKeyId', $values, showConnectionFieldArgs)} {#if driver?.showConnectionField('accessKeyId', $values, showConnectionFieldArgs)}
<div class="col-6 mr-1"> <div class="col-6 mr-1">
<FormTextField <FormTextField
label="Access Key ID" label={_t('connection.accessKeyId', { defaultMessage: 'Access Key ID' })}
name="accessKeyId" name="accessKeyId"
disabled={isConnected || disabledFields.includes('accessKeyId')} disabled={isConnected || disabledFields.includes('accessKeyId')}
templateProps={{ noMargin: true }} templateProps={{ noMargin: true }}
@@ -389,7 +389,7 @@
{#if driver?.showConnectionField('secretAccessKey', $values, showConnectionFieldArgs)} {#if driver?.showConnectionField('secretAccessKey', $values, showConnectionFieldArgs)}
<div class="col-6 mr-1"> <div class="col-6 mr-1">
<FormPasswordField <FormPasswordField
label="Secret access key" label={_t('connection.secretAccessKey', { defaultMessage: 'Secret access key' })}
name="secretAccessKey" name="secretAccessKey"
disabled={isConnected || disabledFields.includes('secretAccessKey')} disabled={isConnected || disabledFields.includes('secretAccessKey')}
templateProps={{ noMargin: true }} templateProps={{ noMargin: true }}
@@ -401,16 +401,16 @@
{#if !disabledFields.includes('password') && showPasswordMode} {#if !disabledFields.includes('password') && showPasswordMode}
<FormSelectField <FormSelectField
label="Password mode" label={_t('connection.passwordMode', { defaultMessage: 'Password mode' })}
isNative isNative
name="passwordMode" name="passwordMode"
defaultValue="saveEncrypted" defaultValue="saveEncrypted"
disabled={isConnected} disabled={isConnected}
options={[ options={[
{ value: 'saveEncrypted', label: 'Save and encrypt' }, { value: 'saveEncrypted', label: _t('connection.saveEncrypted', { defaultMessage: 'Save and encrypt' }) },
{ value: 'saveRaw', label: 'Save raw (UNSAFE!!)' }, { value: 'saveRaw', label: _t('connection.saveRaw', { defaultMessage: 'Save raw (UNSAFE!!)' }) },
{ value: 'askPassword', label: "Don't save, ask for password" }, { value: 'askPassword', label: _t('connection.askPassword', { defaultMessage: "Don't save, ask for password" }) },
{ value: 'askUser', label: "Don't save, ask for login and password" }, { value: 'askUser', label: _t('connection.askUser', { defaultMessage: "Don't save, ask for login and password" }) },
]} ]}
data-testid="ConnectionDriverFields_passwordMode" data-testid="ConnectionDriverFields_passwordMode"
/> />
@@ -418,7 +418,7 @@
{#if driver?.showConnectionField('treeKeySeparator', $values, showConnectionFieldArgs)} {#if driver?.showConnectionField('treeKeySeparator', $values, showConnectionFieldArgs)}
<FormTextField <FormTextField
label="Key separator" label={_t('connection.keySeparator', { defaultMessage: 'Key separator' })}
name="treeKeySeparator" name="treeKeySeparator"
disabled={isConnected} disabled={isConnected}
placeholder=":" placeholder=":"
@@ -428,7 +428,7 @@
{#if driver?.showConnectionField('windowsDomain', $values, showConnectionFieldArgs)} {#if driver?.showConnectionField('windowsDomain', $values, showConnectionFieldArgs)}
<FormTextField <FormTextField
label="Domain (specify to use NTLM authentication)" label={_t('connection.windowsDomain', { defaultMessage: 'Domain (specify to use NTLM authentication)' })}
name="windowsDomain" name="windowsDomain"
disabled={isConnected} disabled={isConnected}
data-testid="ConnectionDriverFields_windowsDomain" data-testid="ConnectionDriverFields_windowsDomain"
@@ -437,7 +437,7 @@
{#if driver?.showConnectionField('isReadOnly', $values, showConnectionFieldArgs)} {#if driver?.showConnectionField('isReadOnly', $values, showConnectionFieldArgs)}
<FormCheckboxField <FormCheckboxField
label="Is read only" label={_t('connection.isReadOnly', { defaultMessage: 'Is read only' })}
name="isReadOnly" name="isReadOnly"
disabled={isConnected} disabled={isConnected}
data-testid="ConnectionDriverFields_isReadOnly" data-testid="ConnectionDriverFields_isReadOnly"
@@ -446,7 +446,7 @@
{#if driver?.showConnectionField('trustServerCertificate', $values, showConnectionFieldArgs)} {#if driver?.showConnectionField('trustServerCertificate', $values, showConnectionFieldArgs)}
<FormCheckboxField <FormCheckboxField
label="Trust server certificate" label={_t('connection.trustServerCertificate', { defaultMessage: 'Trust server certificate' })}
name="trustServerCertificate" name="trustServerCertificate"
disabled={isConnected} disabled={isConnected}
data-testid="ConnectionDriverFields_trustServerCertificate" data-testid="ConnectionDriverFields_trustServerCertificate"
@@ -455,7 +455,7 @@
{#if driver?.showConnectionField('defaultDatabase', $values, showConnectionFieldArgs)} {#if driver?.showConnectionField('defaultDatabase', $values, showConnectionFieldArgs)}
<FormDropDownTextField <FormDropDownTextField
label="Default database" label={_t('connection.defaultDatabase', { defaultMessage: 'Default database' })}
name="defaultDatabase" name="defaultDatabase"
disabled={isConnected} disabled={isConnected}
data-testid="ConnectionDriverFields_defaultDatabase" data-testid="ConnectionDriverFields_defaultDatabase"
@@ -466,7 +466,7 @@
{#if defaultDatabase && driver?.showConnectionField('singleDatabase', $values, showConnectionFieldArgs)} {#if defaultDatabase && driver?.showConnectionField('singleDatabase', $values, showConnectionFieldArgs)}
<FormCheckboxField <FormCheckboxField
label={`Use only database ${defaultDatabase}`} label={_t('connection.singleDatabase', { defaultMessage: `Use only database ${defaultDatabase}` })}
name="singleDatabase" name="singleDatabase"
disabled={isConnected} disabled={isConnected}
data-testid="ConnectionDriverFields_singleDatabase" data-testid="ConnectionDriverFields_singleDatabase"
@@ -475,7 +475,7 @@
{#if driver?.showConnectionField('useSeparateSchemas', $values, showConnectionFieldArgs)} {#if driver?.showConnectionField('useSeparateSchemas', $values, showConnectionFieldArgs)}
<FormCheckboxField <FormCheckboxField
label={`Use schemas separately (use this if you have many large schemas)`} label={_t('connection.useSeparateSchemas', { defaultMessage: `Use schemas separately (use this if you have many large schemas)` })}
name="useSeparateSchemas" name="useSeparateSchemas"
disabled={isConnected} disabled={isConnected}
data-testid="ConnectionDriverFields_useSeparateSchemas" data-testid="ConnectionDriverFields_useSeparateSchemas"
@@ -483,14 +483,14 @@
{/if} {/if}
{#if driver?.showConnectionField('connectionDefinition', $values, showConnectionFieldArgs)} {#if driver?.showConnectionField('connectionDefinition', $values, showConnectionFieldArgs)}
<FormFileInputField disabled={isConnected} label="Service account key JSON" name="connectionDefinition" /> <FormFileInputField disabled={isConnected} label={_t('connection.connectionDefinition', { defaultMessage: 'Service account key JSON' })} name="connectionDefinition" />
{/if} {/if}
{#if driver} {#if driver}
<div class="row"> <div class="row">
<div class="col-6 mr-1"> <div class="col-6 mr-1">
<FormTextField <FormTextField
label="Display name" label={_t('connection.displayName', { defaultMessage: 'Display name' })}
name="displayName" name="displayName"
templateProps={{ noMargin: true }} templateProps={{ noMargin: true }}
disabled={isConnected} disabled={isConnected}
@@ -501,7 +501,7 @@
<div class="col-6 mr-1"> <div class="col-6 mr-1">
<FormColorField <FormColorField
useSelector useSelector
label="Color" label={_t('connection.color', { defaultMessage: 'Color' })}
name="connectionColor" name="connectionColor"
emptyLabel="(not selected)" emptyLabel="(not selected)"
templateProps={{ noMargin: true }} templateProps={{ noMargin: true }}

View File

@@ -12,6 +12,7 @@
import { usePlatformInfo } from '../utility/metadataLoaders'; import { usePlatformInfo } from '../utility/metadataLoaders';
import FontIcon from '../icons/FontIcon.svelte'; import FontIcon from '../icons/FontIcon.svelte';
import { extensions, openedConnections, openedSingleDatabaseConnections } from '../stores'; import { extensions, openedConnections, openedSingleDatabaseConnections } from '../stores';
import { _t } from '../translations';
const { values, setFieldValue } = getFormContext(); const { values, setFieldValue } = getFormContext();
const electron = getElectron(); const electron = getElectron();
@@ -29,7 +30,7 @@
</script> </script>
<FormCheckboxField <FormCheckboxField
label="Use SSH tunnel" label={_t('connection.sshTunnel.use', {defaultMessage: "Use SSH tunnel"})}
name="useSshTunnel" name="useSshTunnel"
disabled={isConnected} disabled={isConnected}
data-testid="ConnectionSshTunnelFields_useSshTunnel" data-testid="ConnectionSshTunnelFields_useSshTunnel"
@@ -59,13 +60,13 @@
<FormTextField label="Bastion host (Jump host)" name="sshBastionHost" disabled={isConnected || !useSshTunnel} /> <FormTextField label="Bastion host (Jump host)" name="sshBastionHost" disabled={isConnected || !useSshTunnel} />
<FormSelectField <FormSelectField
label="SSH Authentication" label={_t('connection.sshTunnel.authentication', {defaultMessage: "SSH Authentication"})}
name="sshMode" name="sshMode"
isNative isNative
defaultSelectValue="userPassword" defaultSelectValue="userPassword"
disabled={isConnected || !useSshTunnel} disabled={isConnected || !useSshTunnel}
options={[ options={[
{ value: 'userPassword', label: 'Username & password' }, { value: 'userPassword', label: _t('connection.sshTunnel.authMethod.userPassword', {defaultMessage: "Username & password"}) },
{ value: 'agent', label: 'SSH agent' }, { value: 'agent', label: 'SSH agent' },
{ value: 'keyFile', label: 'Key file' }, { value: 'keyFile', label: 'Key file' },
]} ]}
@@ -94,7 +95,7 @@
</div> </div>
<div class="col-6"> <div class="col-6">
<FormPasswordField <FormPasswordField
label="Password" label={_t('connection.password', {defaultMessage: "Password"})}
name="sshPassword" name="sshPassword"
disabled={isConnected || !useSshTunnel} disabled={isConnected || !useSshTunnel}
templateProps={{ noMargin: true }} templateProps={{ noMargin: true }}
@@ -109,7 +110,7 @@
<div class="col-6 mr-1"> <div class="col-6 mr-1">
{#if electron} {#if electron}
<FormElectronFileSelector <FormElectronFileSelector
label="Private key file" label={_t('connection.sshTunnel.privateKeyFile', {defaultMessage: "Private key file"})}
name="sshKeyfile" name="sshKeyfile"
disabled={isConnected || !useSshTunnel} disabled={isConnected || !useSshTunnel}
templateProps={{ noMargin: true }} templateProps={{ noMargin: true }}
@@ -118,7 +119,7 @@
/> />
{:else} {:else}
<FormTextField <FormTextField
label="Private key file (path on server)" label={_t('connection.sshTunnel.privateKeyFilePath', {defaultMessage: "Private key file (path on server)"})}
name="sshKeyfile" name="sshKeyfile"
disabled={isConnected || !useSshTunnel} disabled={isConnected || !useSshTunnel}
templateProps={{ noMargin: true }} templateProps={{ noMargin: true }}
@@ -129,7 +130,7 @@
</div> </div>
<div class="col-6"> <div class="col-6">
<FormPasswordField <FormPasswordField
label="Key file passphrase" label={_t('connection.sshTunnel.keyFilePassphrase', {defaultMessage: "Key file passphrase"})}
name="sshKeyfilePassword" name="sshKeyfilePassword"
disabled={isConnected || !useSshTunnel} disabled={isConnected || !useSshTunnel}
templateProps={{ noMargin: true }} templateProps={{ noMargin: true }}
@@ -142,9 +143,9 @@
{#if useSshTunnel && $values.sshMode == 'agent'} {#if useSshTunnel && $values.sshMode == 'agent'}
<div class="ml-3 mb-3"> <div class="ml-3 mb-3">
{#if $platformInfo && $platformInfo.sshAuthSock} {#if $platformInfo && $platformInfo.sshAuthSock}
<FontIcon icon="img ok" /> SSH Agent found <FontIcon icon="img ok" /> {_t('connection.sshTunnel.agentFound', {defaultMessage: "SSH Agent found"})}
{:else} {:else}
<FontIcon icon="img error" /> SSH Agent not found <FontIcon icon="img error" /> {_t('connection.sshTunnel.agentNotFound', {defaultMessage: "SSH Agent not found"})}
{/if} {/if}
</div> </div>
{/if} {/if}

View File

@@ -7,6 +7,7 @@
import getElectron from '../utility/getElectron'; import getElectron from '../utility/getElectron';
import FormPasswordField from '../forms/FormPasswordField.svelte'; import FormPasswordField from '../forms/FormPasswordField.svelte';
import { openedConnections, openedSingleDatabaseConnections } from '../stores'; import { openedConnections, openedSingleDatabaseConnections } from '../stores';
import { _t } from '../translations';
const { values, setFieldValue } = getFormContext(); const { values, setFieldValue } = getFormContext();
const electron = getElectron(); const electron = getElectron();
@@ -15,21 +16,21 @@
$: isConnected = $openedConnections.includes($values._id) || $openedSingleDatabaseConnections.includes($values._id); $: isConnected = $openedConnections.includes($values._id) || $openedSingleDatabaseConnections.includes($values._id);
</script> </script>
<FormCheckboxField label="Use SSL" name="useSsl" disabled={isConnected} /> <FormCheckboxField label={_t('connection.ssl.use', {defaultMessage: "Use SSL"})} name="useSsl" disabled={isConnected} />
<FormElectronFileSelector label="CA Cert (optional)" name="sslCaFile" disabled={isConnected || !useSsl || !electron} /> <FormElectronFileSelector label={_t('connection.ssl.caCert', {defaultMessage: "CA Cert (optional)"})} name="sslCaFile" disabled={isConnected || !useSsl || !electron} />
<FormElectronFileSelector <FormElectronFileSelector
label="Certificate (optional)" label={_t('connection.ssl.certificate', {defaultMessage: "Certificate (optional)"})}
name="sslCertFile" name="sslCertFile"
disabled={isConnected || !useSsl || !electron} disabled={isConnected || !useSsl || !electron}
/> />
<FormPasswordField <FormPasswordField
label="Certificate key file password (optional)" label={_t('connection.ssl.certificateKeyFilePassword', {defaultMessage: "Certificate key file password (optional)"})}
name="sslCertFilePassword" name="sslCertFilePassword"
disabled={isConnected || !useSsl || !electron} disabled={isConnected || !useSsl || !electron}
/> />
<FormElectronFileSelector <FormElectronFileSelector
label="Key file (optional)" label={_t('connection.ssl.keyFile', {defaultMessage: "Key file (optional)"})}
name="sslKeyFile" name="sslKeyFile"
disabled={isConnected || !useSsl || !electron} disabled={isConnected || !useSsl || !electron}
/> />
<FormCheckboxField label="Reject unauthorized" name="sslRejectUnauthorized" disabled={isConnected || !useSsl} /> <FormCheckboxField label={_t('connection.ssl.rejectUnauthorized', {defaultMessage: "Reject unauthorized"})} name="sslRejectUnauthorized" disabled={isConnected || !useSsl} />

View File

@@ -47,6 +47,7 @@
getOpenDetailOnArrowsSettings, getOpenDetailOnArrowsSettings,
} from '../settings/settingsTools'; } from '../settings/settingsTools';
import DropDownButton from '../buttons/DropDownButton.svelte'; import DropDownButton from '../buttons/DropDownButton.svelte';
import { _t } from '../translations';
const connections = useConnectionList(); const connections = useConnectionList();
const serverStatus = useServerStatus(); const serverStatus = useServerStatus();
@@ -58,7 +59,7 @@
let domContainer = null; let domContainer = null;
let domFilter = null; let domFilter = null;
const RECENT_AND_UNSAVED_LABEL = 'Recent & unsaved'; const RECENT_AND_UNSAVED_LABEL = _t('connection.recentUnsaved', { defaultMessage: 'Recent & unsaved' });
function extractConnectionParent(data, openedConnections, openedSingleDatabaseConnections) { function extractConnectionParent(data, openedConnections, openedSingleDatabaseConnections) {
if (data.parent) { if (data.parent) {
@@ -193,12 +194,12 @@
function createSearchMenu() { function createSearchMenu() {
const res = []; const res = [];
res.push({ label: 'Search by:', isBold: true, disabled: true }); res.push({ label: _t('common.searchBy', { defaultMessage: 'Search by:' }), isBold: true, disabled: true });
res.push({ label: 'Display name', switchValue: 'displayName' }); res.push({ label: _t('connection.displayName', { defaultMessage: 'Display name' }), switchValue: 'displayName' });
res.push({ label: 'Server', switchValue: 'server' }); res.push({ label: _t('connection.server', { defaultMessage: 'Server' }), switchValue: 'server' });
res.push({ label: 'User', switchValue: 'user' }); res.push({ label: _t('connection.user', { defaultMessage: 'User' }), switchValue: 'user' });
res.push({ label: 'Database engine', switchValue: 'engine' }); res.push({ label: _t('connection.engine', { defaultMessage: 'Database engine' }), switchValue: 'engine' });
res.push({ label: 'Database name', switchValue: 'database' }); res.push({ label: _t('connection.database', { defaultMessage: 'Database name' }), switchValue: 'database' });
return res.map(item => ({ return res.map(item => ({
...item, ...item,
switchStore: connectionAppObjectSearchSettings, switchStore: connectionAppObjectSearchSettings,
@@ -209,7 +210,7 @@
<SearchBoxWrapper> <SearchBoxWrapper>
<SearchInput <SearchInput
placeholder="Search connection or database" placeholder= {_t('connection.search.placeholder', { defaultMessage: 'Search connection or database' })}
bind:value={filter} bind:value={filter}
bind:this={domFilter} bind:this={domFilter}
onFocusFilteredList={() => { onFocusFilteredList={() => {
@@ -227,16 +228,16 @@
{#if $commandsCustomized['new.connection']?.enabled} {#if $commandsCustomized['new.connection']?.enabled}
<InlineButton <InlineButton
on:click={() => runCommand('new.connection')} on:click={() => runCommand('new.connection')}
title="Add new connection" title={_t('connection.new.title', { defaultMessage: 'Add new connection' })}
data-testid="ConnectionList_buttonNewConnection" data-testid="ConnectionList_buttonNewConnection"
> >
<FontIcon icon="icon plus-thick" /> <FontIcon icon="icon plus-thick" />
</InlineButton> </InlineButton>
<InlineButton on:click={() => runCommand('new.connection.folder')} title="Add new connection folder"> <InlineButton on:click={() => runCommand('new.connection.folder')} title={_t('connection.new.folder.title', { defaultMessage: 'Add new connection folder' })}>
<FontIcon icon="icon add-folder" /> <FontIcon icon="icon add-folder" />
</InlineButton> </InlineButton>
{/if} {/if}
<InlineButton on:click={handleRefreshConnections} title="Refresh connection list"> <InlineButton on:click={handleRefreshConnections} title={_t('connection.refresh.title', { defaultMessage: 'Refresh connection list' })}>
<FontIcon icon="icon refresh" /> <FontIcon icon="icon refresh" />
</InlineButton> </InlineButton>
</SearchBoxWrapper> </SearchBoxWrapper>

View File

@@ -56,6 +56,7 @@
import FocusedConnectionInfoWidget from './FocusedConnectionInfoWidget.svelte'; import FocusedConnectionInfoWidget from './FocusedConnectionInfoWidget.svelte';
import SubProcedureParamList from '../appobj/SubProcedureParamList.svelte'; import SubProcedureParamList from '../appobj/SubProcedureParamList.svelte';
import SubProcedureLineList from '../appobj/SubProcedureLineList.svelte'; import SubProcedureLineList from '../appobj/SubProcedureLineList.svelte';
import { _t } from '../translations';
export let conid; export let conid;
export let database; export let database;
@@ -130,20 +131,20 @@
function createSearchMenu() { function createSearchMenu() {
const res = []; const res = [];
res.push({ label: 'Search by:', isBold: true, disabled: true }); res.push({ label: _t('sqlObject.searchBy', { defaultMessage: 'Search by:' }), isBold: true, disabled: true });
if (driver?.databaseEngineTypes?.includes('document')) { if (driver?.databaseEngineTypes?.includes('document')) {
res.push({ label: 'Collection name', switchValue: 'pureName' }); res.push({ label: _t('sqlObject.collectionName', { defaultMessage: 'Collection name' }), switchValue: 'pureName' });
} }
if (driver?.databaseEngineTypes?.includes('sql')) { if (driver?.databaseEngineTypes?.includes('sql')) {
res.push({ label: 'Table/view/procedure name', switchValue: 'pureName' }); res.push({ label: _t('sqlObject.tableViewProcedureName', { defaultMessage: 'Table/view/procedure name' }), switchValue: 'pureName' });
res.push({ label: 'Schema', switchValue: 'schemaName' }); res.push({ label: _t('sqlObject.schemaName', { defaultMessage: 'Schema' }), switchValue: 'schemaName' });
res.push({ label: 'Column name', switchValue: 'columnName' }); res.push({ label: _t('sqlObject.columnName', { defaultMessage: 'Column name' }), switchValue: 'columnName' });
res.push({ label: 'Column data type', switchValue: 'columnDataType' }); res.push({ label: _t('sqlObject.columnDataType', { defaultMessage: 'Column data type' }), switchValue: 'columnDataType' });
res.push({ label: 'Table comment', switchValue: 'tableComment' }); res.push({ label: _t('sqlObject.tableComment', { defaultMessage: 'Table comment' }), switchValue: 'tableComment' });
res.push({ label: 'Column comment', switchValue: 'columnComment' }); res.push({ label: _t('sqlObject.columnComment', { defaultMessage: 'Column comment' }), switchValue: 'columnComment' });
res.push({ label: 'View/procedure/trigger text', switchValue: 'sqlObjectText' }); res.push({ label: _t('sqlObject.viewProcedureTriggerText', { defaultMessage: 'View/procedure/trigger text' }), switchValue: 'sqlObjectText' });
res.push({ label: 'Table engine', switchValue: 'tableEngine' }); res.push({ label: _t('sqlObject.tableEngine', { defaultMessage: 'Table engine' }), switchValue: 'tableEngine' });
res.push({ label: 'Only tables with rows', switchValue: 'tablesWithRows' }); res.push({ label: _t('sqlObject.tablesWithRows', { defaultMessage: 'Only tables with rows' }), switchValue: 'tablesWithRows' });
} }
return res.map(item => ({ return res.map(item => ({
...item, ...item,
@@ -175,7 +176,7 @@
<WidgetsInnerContainer hideContent={differentFocusedDb}> <WidgetsInnerContainer hideContent={differentFocusedDb}>
<ErrorInfo message={$status.message} icon="img error" /> <ErrorInfo message={$status.message} icon="img error" />
<InlineButton on:click={handleRefreshDatabase}>Refresh</InlineButton> <InlineButton on:click={handleRefreshDatabase}>{_t('common.refresh', { defaultMessage: 'Refresh' })}</InlineButton>
</WidgetsInnerContainer> </WidgetsInnerContainer>
{:else if objectList.length == 0 && $status && $status.name != 'pending' && $status.name != 'checkStructure' && $status.name != 'loadStructure' && $objects} {:else if objectList.length == 0 && $status && $status.name != 'pending' && $status.name != 'checkStructure' && $status.name != 'loadStructure' && $objects}
<SchemaSelector <SchemaSelector
@@ -192,14 +193,14 @@
<WidgetsInnerContainer hideContent={differentFocusedDb}> <WidgetsInnerContainer hideContent={differentFocusedDb}>
<ErrorInfo <ErrorInfo
message={`Database ${database} is empty or structure is not loaded, press Refresh button to reload structure`} message={_t('sqlObject.databaseEmpty', { defaultMessage: `Database ${database} is empty or structure is not loaded, press Refresh button to reload structure` })}
icon="img alert" icon="img alert"
/> />
<div class="m-1" /> <div class="m-1" />
<InlineButton on:click={handleRefreshDatabase}>Refresh</InlineButton> <InlineButton on:click={handleRefreshDatabase}>{_t('common.refresh', { defaultMessage: 'Refresh' })}</InlineButton>
{#if driver?.databaseEngineTypes?.includes('sql')} {#if driver?.databaseEngineTypes?.includes('sql')}
<div class="m-1" /> <div class="m-1" />
<InlineButton on:click={() => runCommand('new.table')}>New table</InlineButton> <InlineButton on:click={() => runCommand('new.table')}>{_t('database.newTable', { defaultMessage: 'New table' })}</InlineButton>
{/if} {/if}
{#if driver?.databaseEngineTypes?.includes('document')} {#if driver?.databaseEngineTypes?.includes('document')}
<div class="m-1" /> <div class="m-1" />
@@ -211,7 +212,7 @@
{:else} {:else}
<SearchBoxWrapper> <SearchBoxWrapper>
<SearchInput <SearchInput
placeholder="Search in tables, views, procedures" placeholder={_t('sqlObject.search.placeholder', { defaultMessage: 'Search in tables, views, procedures' })}
bind:value={filter} bind:value={filter}
bind:this={domFilter} bind:this={domFilter}
onFocusFilteredList={() => { onFocusFilteredList={() => {
@@ -259,7 +260,7 @@
data-testid="SqlObjectList_container" data-testid="SqlObjectList_container"
> >
{#if ($status && ($status.name == 'pending' || $status.name == 'checkStructure' || $status.name == 'loadStructure') && $objects) || !$objects} {#if ($status && ($status.name == 'pending' || $status.name == 'checkStructure' || $status.name == 'loadStructure') && $objects) || !$objects}
<LoadingInfo message={$status?.feedback?.analysingMessage || 'Loading database structure'} /> <LoadingInfo message={$status?.feedback?.analysingMessage || _t('sqlObject.loadingStructure', { defaultMessage: 'Loading database structure' })} />
{:else} {:else}
<AppObjectListHandler <AppObjectListHandler
bind:this={domListHandler} bind:this={domListHandler}

View File

@@ -3,9 +3,14 @@
"app.preparingPlugins": "Příprava pluginů...", "app.preparingPlugins": "Příprava pluginů...",
"app.starting": "Spouštění DbGate", "app.starting": "Spouštění DbGate",
"authToken": "Auth token", "authToken": "Auth token",
"column.addNew": "Přidat nový sloupec",
"column.copyName": "Kopírovat název", "column.copyName": "Kopírovat název",
"column.dropColumn": "Odstranit sloupec", "column.dropColumn": "Odstranit sloupec",
"column.fixed": "Pevné sloupce (jako SQL)",
"column.name": "Název sloupce",
"column.renameColumn": "Přejmenovat sloupec", "column.renameColumn": "Přejmenovat sloupec",
"column.search": "Hledat sloupce",
"column.variable": "Proměnné sloupce (jako MongoDB)",
"command.datagrid.addNewColumn": "Přidat nový sloupec", "command.datagrid.addNewColumn": "Přidat nový sloupec",
"command.datagrid.addNewColumn.toolbar": "Nový sloupec", "command.datagrid.addNewColumn.toolbar": "Nový sloupec",
"command.datagrid.cloneRows": "Klonovat řádky", "command.datagrid.cloneRows": "Klonovat řádky",
@@ -41,6 +46,7 @@
"command.tabs.previousTab": "Předchozí karta", "command.tabs.previousTab": "Předchozí karta",
"command.tabs.reopenClosedTab": "Znovu otevřít zavřenou kartu", "command.tabs.reopenClosedTab": "Znovu otevřít zavřenou kartu",
"common.archive": "Archivovat (JSONL)", "common.archive": "Archivovat (JSONL)",
"common.cancel": "Zrušiť",
"common.close": "Zavřít", "common.close": "Zavřít",
"common.connections": "Připojení", "common.connections": "Připojení",
"common.database": "Databáze", "common.database": "Databáze",
@@ -52,17 +58,76 @@
"common.save": "Uložit", "common.save": "Uložit",
"common.saveToArchive": "Uložit do archívu", "common.saveToArchive": "Uložit do archívu",
"common.schema": "Schéma", "common.schema": "Schéma",
"common.searchBy": "Hledat podle:",
"connection.accessKeyId": "ID přístupového klíče",
"connection.allowedDatabases": "Povolené databáze, jedna na řádek",
"connection.allowedDatabasesRegex": "Regulární výraz pro povolené databáze",
"connection.authentication": "Autentizace",
"connection.autoDetectNatMap": "Automatická detekce NAT mapy (použijte pro Redis Cluster v Docker síti)",
"connection.chooseType": "Vyberte typ",
"connection.clientLibraryPath": "Cesta ke klientské knihovně",
"connection.clusterNodes": "Uzly clusteru",
"connection.color": "Barva",
"connection.connect": "Připojit", "connection.connect": "Připojit",
"connection.connectionDefinition": "JSON klíč servisního účtu",
"connection.copyToCloudFolder": "Kopírovat do cloud zložky",
"connection.createDatabase": "Vytvořit databázi", "connection.createDatabase": "Vytvořit databázi",
"connection.databaseName": "Název databáze", "connection.createNewFolder": "Vytvořit složku připojení",
"connection.createNewFolderName": "Název nové složky připojení",
"connection.database": "Název databáze",
"connection.databaseFile": "Soubor databáze",
"connection.databaseFilePath": "Soubor databáze (cesta na serveru)",
"connection.databaseUrl": "URL databáze",
"connection.defaultDatabase": "Výchozí databáze",
"connection.delete": "Odstranit", "connection.delete": "Odstranit",
"connection.disconnect": "Odpojit", "connection.disconnect": "Odpojit",
"connection.displayName": "Zobrazený název",
"connection.dockerWarning": "V Dockeru localhost a 127.0.0.1 nefungují, použijte místo toho dockerhost",
"connection.duplicate": "Duplikovat", "connection.duplicate": "Duplikovat",
"connection.edit": "Upravit", "connection.edit": "Upravit",
"connection.endpointKey": "Klíč",
"connection.engine": "Typ databáze",
"connection.fillDetails": "Vyplňte detaily připojení k databázi",
"connection.isReadOnly": "Je pouze pro čtení",
"connection.keySeparator": "Oddělovač klíčů",
"connection.localDataCenter": "Lokální datové centrum",
"connection.new.folder.title": "Přidat novou složku připojení",
"connection.new.title": "Přidat nové připojení",
"connection.newQuery": "Nový dotaz (server)", "connection.newQuery": "Nový dotaz (server)",
"connection.password": "Heslo",
"connection.passwordMode": "Režim hesla",
"connection.recentUnsaved": "Nedávné a neuložené",
"connection.refresh": "Obnovit", "connection.refresh": "Obnovit",
"connection.refresh.title": "Obnovit seznam připojení",
"connection.saveEncrypted": "Uložit a zašifrovat",
"connection.saveRaw": "Uložit nezašifrované (NEBEZPEČNÉ!!)",
"connection.search.placeholder": "Hledat připojení nebo databázi",
"connection.secretAccessKey": "Tajný přístupový klíč",
"connection.selectType": "(vyberte typ připojení)",
"connection.server": "Server",
"connection.serverSummary": "Shrnutí serveru", "connection.serverSummary": "Shrnutí serveru",
"connection.serviceName": "Název služby",
"connection.socketPath": "Cesta k socketu",
"connection.sshTunnel.agentFound": "SSH Agent nalezen",
"connection.sshTunnel.agentNotFound": "SSH Agent nenalezen",
"connection.sshTunnel.authMethod.userPassword": "Uživatelské jméno a heslo",
"connection.sshTunnel.authentication": "SSH autentizace",
"connection.sshTunnel.keyFilePassphrase": "Heslo k souboru s klíčem",
"connection.sshTunnel.privateKeyFile": "Soubor s privátním klíčem",
"connection.sshTunnel.privateKeyFilePath": "Soubor s privátním klíčem (cesta na serveru)",
"connection.sshTunnel.use": "Použít SSH tunel",
"connection.ssl.caCert": "CA certifikát (volitelné)",
"connection.ssl.certificate": "Certifikát (volitelné)",
"connection.ssl.certificateKeyFilePassword": "Heslo k souboru s klíčem certifikátu (volitelné)",
"connection.ssl.keyFile": "Soubor s klíčem (volitelné)",
"connection.ssl.rejectUnauthorized": "Odmítnout neautorizované",
"connection.ssl.use": "Použít SSL",
"connection.trustServerCertificate": "Důvěřovat certifikátu serveru",
"connection.type": "Typ připojení",
"connection.useUrl": "Použít URL databáze",
"connection.user": "Uživatel",
"connection.viewDetails": "Zobrazit detaily", "connection.viewDetails": "Zobrazit detaily",
"connection.windowsDomain": "Doména (zadejte pro použití NTLM autentizace)",
"database.backup": "Záloha #", "database.backup": "Záloha #",
"database.compare": "Porovnat", "database.compare": "Porovnat",
"database.copyDatabaseName": "Kopírovat název databáze", "database.copyDatabaseName": "Kopírovat název databáze",
@@ -105,6 +170,75 @@
"file.queryDesignerFiles": "Soubory návrháře dotazů", "file.queryDesignerFiles": "Soubory návrháře dotazů",
"file.sqlFiles": "Soubory SQL", "file.sqlFiles": "Soubory SQL",
"file.sqliteDatabase": "Databáze SQLite", "file.sqliteDatabase": "Databáze SQLite",
"filter.after": "Po...",
"filter.and": "A",
"filter.arrayIsEmpty": "Pole je prázdné",
"filter.arrayIsNotEmpty": "Pole není prázdné",
"filter.before": "Před...",
"filter.beginsWith": "Začíná na...",
"filter.between": "Mezi...",
"filter.clear": "Vymazat filtr",
"filter.contains": "Obsahuje...",
"filter.doesNotBeginWith": "Nezačíná na...",
"filter.doesNotContain": "Neobsahuje...",
"filter.doesNotEndWith": "Nekončí na...",
"filter.doesNotEqual": "Není rovno...",
"filter.endsWith": "Končí na...",
"filter.equals": "Rovná se...",
"filter.fieldDoesNotExist": "Pole neexistuje",
"filter.fieldExists": "Pole existuje",
"filter.greaterThan": "Větší než...",
"filter.greaterThanOrEqualTo": "Větší nebo rovno...",
"filter.hasNotEmptyValue": "Není prázdné",
"filter.isAfter": "je po",
"filter.isAfterOrEqual": "je po nebo rovno",
"filter.isBefore": "je před",
"filter.isBeforeOrEqual": "je před nebo rovno",
"filter.isEmptyOrNull": "Je prázdné nebo NULL",
"filter.isFalse": "Je false",
"filter.isFalseOrNull": "Je false nebo NULL",
"filter.isGreater": "je větší",
"filter.isGreaterOrEqual": "je větší nebo rovno",
"filter.isNotNull": "Není NULL",
"filter.isNull": "Je NULL",
"filter.isSmaller": "je menší",
"filter.isSmallerOrEqual": "je menší nebo rovno",
"filter.isTrue": "Je true",
"filter.isTrueOrNull": "Je true nebo NULL",
"filter.lastMonth": "Minulý měsíc",
"filter.lastWeek": "Minulý týden",
"filter.lastYear": "Minulý rok",
"filter.lessThan": "Menší než...",
"filter.lessThanOrEqualTo": "Menší nebo rovno...",
"filter.modal.beginsWith": "začíná na",
"filter.modal.contains": "obsahuje",
"filter.modal.doesNotBeginWith": "nezačíná na",
"filter.modal.doesNotContain": "neobsahuje",
"filter.modal.doesNotEndWith": "nekončí na",
"filter.modal.doesNotEqual": "nerovná se",
"filter.modal.endsWith": "končí na",
"filter.modal.equals": "rovná se",
"filter.modal.fieldDoesNotExist": "pole neexistuje",
"filter.modal.fieldExists": "pole existuje",
"filter.modal.isNotNull": "není NULL",
"filter.modal.isNull": "je NULL",
"filter.modal.sqlCondition": "SQL podmínka",
"filter.modal.sqlConditionRight": "SQL podmínka - pouze pravá strana",
"filter.multipleValues": "Filtrovat více hodnot",
"filter.nextMonth": "Příští měsíc",
"filter.nextWeek": "Příští týden",
"filter.nextYear": "Příští rok",
"filter.or": "Nebo",
"filter.setFilter": "Nastavit filtr",
"filter.showRowsWhere": "Zobrazit řádky kde",
"filter.sqlCondition": "SQL podmínka ...",
"filter.sqlConditionRight": "SQL podmínka - pravá strana ...",
"filter.thisMonth": "Tento měsíc",
"filter.thisWeek": "Tento týden",
"filter.thisYear": "Tento rok",
"filter.today": "Dnes",
"filter.tomorrow": "Zítra",
"filter.yesterday": "Včera",
"importExport.createZipFileInArchive": "Vytvořit ZIP soubor v archivu", "importExport.createZipFileInArchive": "Vytvořit ZIP soubor v archivu",
"importExport.exportToZipArchive": "Exportovat do ZIP archivu", "importExport.exportToZipArchive": "Exportovat do ZIP archivu",
"importExport.exportToZipFile": "Exportovat do ZIP souboru", "importExport.exportToZipFile": "Exportovat do ZIP souboru",
@@ -211,6 +345,19 @@
"settings.tabGroup.showServerName": "Zobrazit název serveru vedle názvu databáze v záhlaví skupiny karet", "settings.tabGroup.showServerName": "Zobrazit název serveru vedle názvu databáze v záhlaví skupiny karet",
"settings.theme": "Vzhled", "settings.theme": "Vzhled",
"settings.title": "Nastavení", "settings.title": "Nastavení",
"sqlObject.collectionName": "Název kolekce",
"sqlObject.columnComment": "Komentář sloupce",
"sqlObject.columnDataType": "Datový typ sloupce",
"sqlObject.columnName": "Název sloupce",
"sqlObject.loadingStructure": "Načítání struktury databáze",
"sqlObject.schemaName": "Schéma",
"sqlObject.search.placeholder": "Hledat v tabulkách, pohledech, procedurách",
"sqlObject.searchBy": "Hledat podle:",
"sqlObject.tableComment": "Komentář tabulky",
"sqlObject.tableEngine": "Engine tabulky",
"sqlObject.tableViewProcedureName": "Název tabulky/pohledu/procedury",
"sqlObject.tablesWithRows": "Pouze tabulky s řádky",
"sqlObject.viewProcedureTriggerText": "Text pohledu/procedury/triggeru",
"summaryProcesses.actions": "Akce", "summaryProcesses.actions": "Akce",
"summaryProcesses.client": "Klient", "summaryProcesses.client": "Klient",
"summaryProcesses.connectionId": "ID připojení", "summaryProcesses.connectionId": "ID připojení",

View File

@@ -3,9 +3,14 @@
"app.preparingPlugins": "Preparing plugins ...", "app.preparingPlugins": "Preparing plugins ...",
"app.starting": "Starting DbGate", "app.starting": "Starting DbGate",
"authToken": "Auth token", "authToken": "Auth token",
"column.addNew": "Add new column",
"column.copyName": "Copy name", "column.copyName": "Copy name",
"column.dropColumn": "Drop column", "column.dropColumn": "Drop column",
"column.fixed": "Fixed columns (like SQL)",
"column.name": "Column name",
"column.renameColumn": "Rename column", "column.renameColumn": "Rename column",
"column.search": "Search columns",
"column.variable": "Variable columns (like MongoDB)",
"command.datagrid.addNewColumn": "Add new column", "command.datagrid.addNewColumn": "Add new column",
"command.datagrid.addNewColumn.toolbar": "New column", "command.datagrid.addNewColumn.toolbar": "New column",
"command.datagrid.cloneRows": "Clone rows", "command.datagrid.cloneRows": "Clone rows",
@@ -41,6 +46,7 @@
"command.tabs.previousTab": "Previous tab", "command.tabs.previousTab": "Previous tab",
"command.tabs.reopenClosedTab": "Reopen closed tab", "command.tabs.reopenClosedTab": "Reopen closed tab",
"common.archive": "Archive (JSONL)", "common.archive": "Archive (JSONL)",
"common.cancel": "Cancel",
"common.close": "Close", "common.close": "Close",
"common.connections": "Connections", "common.connections": "Connections",
"common.database": "Database", "common.database": "Database",
@@ -52,17 +58,76 @@
"common.save": "Save", "common.save": "Save",
"common.saveToArchive": "Save to archive", "common.saveToArchive": "Save to archive",
"common.schema": "Schema", "common.schema": "Schema",
"common.searchBy": "Search by:",
"connection.accessKeyId": "Access Key ID",
"connection.allowedDatabases": "Allowed databases, one per line",
"connection.allowedDatabasesRegex": "Allowed databases regular expression",
"connection.authentication": "Authentication",
"connection.autoDetectNatMap": "Auto detect NAT map (use for Redis Cluster in Docker network)",
"connection.chooseType": "Choose type",
"connection.clientLibraryPath": "Client library path",
"connection.clusterNodes": "Cluster nodes",
"connection.color": "Color",
"connection.connect": "Connect", "connection.connect": "Connect",
"connection.connectionDefinition": "Service account key JSON",
"connection.copyToCloudFolder": "Copy to cloud folder",
"connection.createDatabase": "Create database", "connection.createDatabase": "Create database",
"connection.databaseName": "Database name", "connection.createNewFolder": "Create connection folder",
"connection.createNewFolderName": "New connection folder name",
"connection.database": "Database name",
"connection.databaseFile": "Database file",
"connection.databaseFilePath": "Database file (path on server)",
"connection.databaseUrl": "Database URL",
"connection.defaultDatabase": "Default database",
"connection.delete": "Delete", "connection.delete": "Delete",
"connection.disconnect": "Disconnect", "connection.disconnect": "Disconnect",
"connection.displayName": "Display name",
"connection.dockerWarning": "Under docker, localhost and 127.0.0.1 will not work, use dockerhost instead",
"connection.duplicate": "Duplicate", "connection.duplicate": "Duplicate",
"connection.edit": "Edit", "connection.edit": "Edit",
"connection.endpointKey": "Key",
"connection.engine": "Database engine",
"connection.fillDetails": "Fill database connection details",
"connection.isReadOnly": "Is read only",
"connection.keySeparator": "Key separator",
"connection.localDataCenter": "Local DataCenter",
"connection.new.folder.title": "Add new connection folder",
"connection.new.title": "Add new connection",
"connection.newQuery": "New Query (server)", "connection.newQuery": "New Query (server)",
"connection.password": "Password",
"connection.passwordMode": "Password mode",
"connection.recentUnsaved": "Recent & unsaved",
"connection.refresh": "Refresh", "connection.refresh": "Refresh",
"connection.refresh.title": "Refresh connection list",
"connection.saveEncrypted": "Save and encrypt",
"connection.saveRaw": "Save raw (UNSAFE!!)",
"connection.search.placeholder": "Search connection or database",
"connection.secretAccessKey": "Secret access key",
"connection.selectType": "(select connection type)",
"connection.server": "Server",
"connection.serverSummary": "Server summary", "connection.serverSummary": "Server summary",
"connection.serviceName": "Service name",
"connection.socketPath": "Socket path",
"connection.sshTunnel.agentFound": "SSH Agent found",
"connection.sshTunnel.agentNotFound": "SSH Agent not found",
"connection.sshTunnel.authMethod.userPassword": "Username & password",
"connection.sshTunnel.authentication": "SSH Authentication",
"connection.sshTunnel.keyFilePassphrase": "Key file passphrase",
"connection.sshTunnel.privateKeyFile": "Private key file",
"connection.sshTunnel.privateKeyFilePath": "Private key file (path on server)",
"connection.sshTunnel.use": "Use SSH tunnel",
"connection.ssl.caCert": "CA Cert (optional)",
"connection.ssl.certificate": "Certificate (optional)",
"connection.ssl.certificateKeyFilePassword": "Certificate key file password (optional)",
"connection.ssl.keyFile": "Key file (optional)",
"connection.ssl.rejectUnauthorized": "Reject unauthorized",
"connection.ssl.use": "Use SSL",
"connection.trustServerCertificate": "Trust server certificate",
"connection.type": "Connection type",
"connection.useUrl": "Use database URL",
"connection.user": "User",
"connection.viewDetails": "View details", "connection.viewDetails": "View details",
"connection.windowsDomain": "Domain (specify to use NTLM authentication)",
"database.backup": "Backup #", "database.backup": "Backup #",
"database.compare": "Compare", "database.compare": "Compare",
"database.copyDatabaseName": "Copy database name", "database.copyDatabaseName": "Copy database name",
@@ -105,6 +170,75 @@
"file.queryDesignerFiles": "Query designer files", "file.queryDesignerFiles": "Query designer files",
"file.sqlFiles": "SQL files", "file.sqlFiles": "SQL files",
"file.sqliteDatabase": "SQLite database", "file.sqliteDatabase": "SQLite database",
"filter.after": "After...",
"filter.and": "And",
"filter.arrayIsEmpty": "Array is empty",
"filter.arrayIsNotEmpty": "Array is not empty",
"filter.before": "Before...",
"filter.beginsWith": "Begins With...",
"filter.between": "Between...",
"filter.clear": "Clear Filter",
"filter.contains": "Contains...",
"filter.doesNotBeginWith": "Does Not Begin With...",
"filter.doesNotContain": "Does Not Contain...",
"filter.doesNotEndWith": "Does Not End With...",
"filter.doesNotEqual": "Does Not Equal...",
"filter.endsWith": "Ends With...",
"filter.equals": "Equals...",
"filter.fieldDoesNotExist": "Field does not exist",
"filter.fieldExists": "Field exists",
"filter.greaterThan": "Greater Than...",
"filter.greaterThanOrEqualTo": "Greater Than Or Equal To...",
"filter.hasNotEmptyValue": "Has Not Empty Value",
"filter.isAfter": "is after",
"filter.isAfterOrEqual": "is after or equal",
"filter.isBefore": "is before",
"filter.isBeforeOrEqual": "is before or equal",
"filter.isEmptyOrNull": "Is Empty Or Null",
"filter.isFalse": "Is False",
"filter.isFalseOrNull": "Is False or NULL",
"filter.isGreater": "is greater",
"filter.isGreaterOrEqual": "is greater or equal",
"filter.isNotNull": "Is Not Null",
"filter.isNull": "Is Null",
"filter.isSmaller": "is smaller",
"filter.isSmallerOrEqual": "is smaller or equal",
"filter.isTrue": "Is True",
"filter.isTrueOrNull": "Is True or NULL",
"filter.lastMonth": "Last Month",
"filter.lastWeek": "Last Week",
"filter.lastYear": "Last Year",
"filter.lessThan": "Less Than...",
"filter.lessThanOrEqualTo": "Less Than Or Equal To...",
"filter.modal.beginsWith": "begins with",
"filter.modal.contains": "contains",
"filter.modal.doesNotBeginWith": "does not begin with",
"filter.modal.doesNotContain": "does not contain",
"filter.modal.doesNotEndWith": "does not end with",
"filter.modal.doesNotEqual": "does not equal",
"filter.modal.endsWith": "ends with",
"filter.modal.equals": "equals",
"filter.modal.fieldDoesNotExist": "field does not exist",
"filter.modal.fieldExists": "field exists",
"filter.modal.isNotNull": "is not NULL",
"filter.modal.isNull": "is NULL",
"filter.modal.sqlCondition": "SQL condition",
"filter.modal.sqlConditionRight": "SQL condition - right side only",
"filter.multipleValues": "Filter multiple values",
"filter.nextMonth": "Next Month",
"filter.nextWeek": "Next Week",
"filter.nextYear": "Next Year",
"filter.or": "Or",
"filter.setFilter": "Set filter",
"filter.showRowsWhere": "Show rows where",
"filter.sqlCondition": "SQL condition ...",
"filter.sqlConditionRight": "SQL condition - right side ...",
"filter.thisMonth": "This Month",
"filter.thisWeek": "This Week",
"filter.thisYear": "This Year",
"filter.today": "Today",
"filter.tomorrow": "Tomorrow",
"filter.yesterday": "Yesterday",
"importExport.createZipFileInArchive": "Create ZIP file in archive", "importExport.createZipFileInArchive": "Create ZIP file in archive",
"importExport.exportToZipArchive": "Output ZIP archive", "importExport.exportToZipArchive": "Output ZIP archive",
"importExport.exportToZipFile": "Export to ZIP file", "importExport.exportToZipFile": "Export to ZIP file",
@@ -211,6 +345,19 @@
"settings.tabGroup.showServerName": "Show server name alongside database name in title of the tab group", "settings.tabGroup.showServerName": "Show server name alongside database name in title of the tab group",
"settings.theme": "Themes", "settings.theme": "Themes",
"settings.title": "Settings", "settings.title": "Settings",
"sqlObject.collectionName": "Collection name",
"sqlObject.columnComment": "Column comment",
"sqlObject.columnDataType": "Column data type",
"sqlObject.columnName": "Column name",
"sqlObject.loadingStructure": "Loading database structure",
"sqlObject.schemaName": "Schema",
"sqlObject.search.placeholder": "Search in tables, views, procedures",
"sqlObject.searchBy": "Search by:",
"sqlObject.tableComment": "Table comment",
"sqlObject.tableEngine": "Table engine",
"sqlObject.tableViewProcedureName": "Table/view/procedure name",
"sqlObject.tablesWithRows": "Only tables with rows",
"sqlObject.viewProcedureTriggerText": "View/procedure/trigger text",
"summaryProcesses.actions": "Actions", "summaryProcesses.actions": "Actions",
"summaryProcesses.client": "Client", "summaryProcesses.client": "Client",
"summaryProcesses.connectionId": "Connection ID", "summaryProcesses.connectionId": "Connection ID",

View File

@@ -3,9 +3,14 @@
"app.preparingPlugins": "Príprava pluginov...", "app.preparingPlugins": "Príprava pluginov...",
"app.starting": "Spúšťam DbGate", "app.starting": "Spúšťam DbGate",
"authToken": "Autentifikačný token", "authToken": "Autentifikačný token",
"column.addNew": "Pridať nový stĺpec",
"column.copyName": "Kopírovať názov", "column.copyName": "Kopírovať názov",
"column.dropColumn": "Odstrániť stĺpec", "column.dropColumn": "Odstrániť stĺpec",
"column.fixed": "Pevné stĺpce (ako SQL)",
"column.name": "Názov stĺpca",
"column.renameColumn": "Premenovať stĺpec", "column.renameColumn": "Premenovať stĺpec",
"column.search": "Hľadať stĺpce",
"column.variable": "Premenlivé stĺpce (ako MongoDB)",
"command.datagrid.addNewColumn": "Pridať nový stĺpec", "command.datagrid.addNewColumn": "Pridať nový stĺpec",
"command.datagrid.addNewColumn.toolbar": "Nový stĺpec", "command.datagrid.addNewColumn.toolbar": "Nový stĺpec",
"command.datagrid.cloneRows": "Klonovať riadky", "command.datagrid.cloneRows": "Klonovať riadky",
@@ -41,6 +46,7 @@
"command.tabs.previousTab": "Predchádzajúca karta", "command.tabs.previousTab": "Predchádzajúca karta",
"command.tabs.reopenClosedTab": "Znovu otvoriť zatvorenú kartu", "command.tabs.reopenClosedTab": "Znovu otvoriť zatvorenú kartu",
"common.archive": "Archivovať (JSONL)", "common.archive": "Archivovať (JSONL)",
"common.cancel": "Zrušiť",
"common.close": "Zavrieť", "common.close": "Zavrieť",
"common.connections": "Pripojenia", "common.connections": "Pripojenia",
"common.database": "Databáza", "common.database": "Databáza",
@@ -52,17 +58,76 @@
"common.save": "Uložiť", "common.save": "Uložiť",
"common.saveToArchive": "Uložiť do archívu", "common.saveToArchive": "Uložiť do archívu",
"common.schema": "Schéma", "common.schema": "Schéma",
"common.searchBy": "Hľadať podľa:",
"connection.accessKeyId": "ID prístupového kľúča",
"connection.allowedDatabases": "Povolené databázy, jedna na riadok",
"connection.allowedDatabasesRegex": "Regulárny výraz pre povolené databázy",
"connection.authentication": "Autentizácia",
"connection.autoDetectNatMap": "Automatická detekcia NAT mapy (použite pre Redis Cluster v Docker sieti)",
"connection.chooseType": "Vyberte typ",
"connection.clientLibraryPath": "Cesta ku klientskej knižnici",
"connection.clusterNodes": "Uzly klastra",
"connection.color": "Farba",
"connection.connect": "Pripojiť", "connection.connect": "Pripojiť",
"connection.connectionDefinition": "JSON kľúč servisného účtu",
"connection.copyToCloudFolder": "Kopírovať do cloud zložky",
"connection.createDatabase": "Vytvoriť databázu", "connection.createDatabase": "Vytvoriť databázu",
"connection.databaseName": "Názov databázy", "connection.createNewFolder": "Vytvoriť priečinok pripojení",
"connection.createNewFolderName": "Názov nového priečinka pripojení",
"connection.database": "Názov databázy",
"connection.databaseFile": "Súbor databázy",
"connection.databaseFilePath": "Súbor databázy (cesta na serveri)",
"connection.databaseUrl": "URL databázy",
"connection.defaultDatabase": "Predvolená databáza",
"connection.delete": "Odstrániť", "connection.delete": "Odstrániť",
"connection.disconnect": "Odpojiť", "connection.disconnect": "Odpojiť",
"connection.displayName": "Zobrazovaný názov",
"connection.dockerWarning": "V Dockeri localhost a 127.0.0.1 nefungujú, použite namiesto toho dockerhost",
"connection.duplicate": "Duplikovať", "connection.duplicate": "Duplikovať",
"connection.edit": "Upraviť", "connection.edit": "Upraviť",
"connection.endpointKey": "Kľúč",
"connection.engine": "Typ databázy",
"connection.fillDetails": "Vyplňte údaje o pripojení k databáze",
"connection.isReadOnly": "Je iba na čítanie",
"connection.keySeparator": "Oddeľovač kľúčov",
"connection.localDataCenter": "Lokálne dátové centrum",
"connection.new.folder.title": "Pridať nový priečinok pripojení",
"connection.new.title": "Pridať nové pripojenie",
"connection.newQuery": "Nový dotaz (server)", "connection.newQuery": "Nový dotaz (server)",
"connection.password": "Heslo",
"connection.passwordMode": "Režim hesla",
"connection.recentUnsaved": "Nedávne a neuložené",
"connection.refresh": "Obnoviť", "connection.refresh": "Obnoviť",
"connection.refresh.title": "Obnoviť zoznam pripojení",
"connection.saveEncrypted": "Uložiť a zašifrovať",
"connection.saveRaw": "Uložiť nezašifrované (NEBEZPEČNÉ!!)",
"connection.search.placeholder": "Vyhľadať pripojenie alebo databázu",
"connection.secretAccessKey": "Tajný prístupový kľúč",
"connection.selectType": "(vyberte typ pripojenia)",
"connection.server": "Server",
"connection.serverSummary": "Zhrnutie servera", "connection.serverSummary": "Zhrnutie servera",
"connection.serviceName": "Názov služby",
"connection.socketPath": "Cesta k socketu",
"connection.sshTunnel.agentFound": "SSH Agent nájdený",
"connection.sshTunnel.agentNotFound": "SSH Agent nenájdený",
"connection.sshTunnel.authMethod.userPassword": "Používateľské meno a heslo",
"connection.sshTunnel.authentication": "SSH autentizácia",
"connection.sshTunnel.keyFilePassphrase": "Heslo k súboru s kľúčom",
"connection.sshTunnel.privateKeyFile": "Súbor s privátnym kľúčom",
"connection.sshTunnel.privateKeyFilePath": "Súbor s privátnym kľúčom (cesta na serveri)",
"connection.sshTunnel.use": "Použiť SSH tunel",
"connection.ssl.caCert": "CA certifikát (voliteľné)",
"connection.ssl.certificate": "Certifikát (voliteľné)",
"connection.ssl.certificateKeyFilePassword": "Heslo k súboru s kľúčom certifikátu (voliteľné)",
"connection.ssl.keyFile": "Súbor s kľúčom (voliteľné)",
"connection.ssl.rejectUnauthorized": "Odmietnuť neautorizované",
"connection.ssl.use": "Použiť SSL",
"connection.trustServerCertificate": "Dôverovať certifikátu servera",
"connection.type": "Typ pripojenia",
"connection.useUrl": "Použiť URL databázy",
"connection.user": "Používateľ",
"connection.viewDetails": "Zobraziť detaily", "connection.viewDetails": "Zobraziť detaily",
"connection.windowsDomain": "Doména (zadajte pre použitie NTLM autentizácie)",
"database.backup": "Záloha #", "database.backup": "Záloha #",
"database.compare": "Porovnať", "database.compare": "Porovnať",
"database.copyDatabaseName": "Kopírovať názov databázy", "database.copyDatabaseName": "Kopírovať názov databázy",
@@ -105,6 +170,75 @@
"file.queryDesignerFiles": "Súbory návrhu dotazu", "file.queryDesignerFiles": "Súbory návrhu dotazu",
"file.sqlFiles": "SQL súbory", "file.sqlFiles": "SQL súbory",
"file.sqliteDatabase": "SQLite databáza", "file.sqliteDatabase": "SQLite databáza",
"filter.after": "Po...",
"filter.and": "A",
"filter.arrayIsEmpty": "Pole je prázdne",
"filter.arrayIsNotEmpty": "Pole nie je prázdne",
"filter.before": "Pred...",
"filter.beginsWith": "Začína na...",
"filter.between": "Medzi...",
"filter.clear": "Vymazať filter",
"filter.contains": "Obsahuje...",
"filter.doesNotBeginWith": "Nezačína na...",
"filter.doesNotContain": "Neobsahuje...",
"filter.doesNotEndWith": "Nekončí na...",
"filter.doesNotEqual": "Nie je rovné...",
"filter.endsWith": "Končí na...",
"filter.equals": "Rovná sa...",
"filter.fieldDoesNotExist": "Pole neexistuje",
"filter.fieldExists": "Pole existuje",
"filter.greaterThan": "Väčší než...",
"filter.greaterThanOrEqualTo": "Väčší alebo rovný...",
"filter.hasNotEmptyValue": "Nie je prázdne",
"filter.isAfter": "je po",
"filter.isAfterOrEqual": "je po alebo rovné",
"filter.isBefore": "je pred",
"filter.isBeforeOrEqual": "je pred alebo rovné",
"filter.isEmptyOrNull": "Je prázdne alebo NULL",
"filter.isFalse": "Je false",
"filter.isFalseOrNull": "Je false alebo NULL",
"filter.isGreater": "je väčšie",
"filter.isGreaterOrEqual": "je väčšie alebo rovné",
"filter.isNotNull": "Nie je NULL",
"filter.isNull": "Je NULL",
"filter.isSmaller": "je menšie",
"filter.isSmallerOrEqual": "je menšie alebo rovné",
"filter.isTrue": "Je true",
"filter.isTrueOrNull": "Je true alebo NULL",
"filter.lastMonth": "Minulý mesiac",
"filter.lastWeek": "Minulý týždeň",
"filter.lastYear": "Minulý rok",
"filter.lessThan": "Menší než...",
"filter.lessThanOrEqualTo": "Menší alebo rovný...",
"filter.modal.beginsWith": "začína na",
"filter.modal.contains": "obsahuje",
"filter.modal.doesNotBeginWith": "nezačína na",
"filter.modal.doesNotContain": "neobsahuje",
"filter.modal.doesNotEndWith": "nekončí na",
"filter.modal.doesNotEqual": "nerovná sa",
"filter.modal.endsWith": "končí na",
"filter.modal.equals": "rovná sa",
"filter.modal.fieldDoesNotExist": "pole neexistuje",
"filter.modal.fieldExists": "pole existuje",
"filter.modal.isNotNull": "nie je NULL",
"filter.modal.isNull": "je NULL",
"filter.modal.sqlCondition": "SQL podmienka",
"filter.modal.sqlConditionRight": "SQL podmienka - len pravá strana",
"filter.multipleValues": "Filtrovať viacero hodnôt",
"filter.nextMonth": "Ďalší mesiac",
"filter.nextWeek": "Ďalší týždeň",
"filter.nextYear": "Ďalší rok",
"filter.or": "Alebo",
"filter.setFilter": "Nastaviť filter",
"filter.showRowsWhere": "Zobraziť riadky kde",
"filter.sqlCondition": "SQL podmienka...",
"filter.sqlConditionRight": "SQL podmienka - pravá strana...",
"filter.thisMonth": "Tento mesiac",
"filter.thisWeek": "Tento týždeň",
"filter.thisYear": "Tento rok",
"filter.today": "Dnes",
"filter.tomorrow": "Zajtra",
"filter.yesterday": "Včera",
"importExport.createZipFileInArchive": "Vytvoriť ZIP súbor v archíve", "importExport.createZipFileInArchive": "Vytvoriť ZIP súbor v archíve",
"importExport.exportToZipArchive": "Exportovať do ZIP archívu", "importExport.exportToZipArchive": "Exportovať do ZIP archívu",
"importExport.exportToZipFile": "Exportovať do ZIP súboru", "importExport.exportToZipFile": "Exportovať do ZIP súboru",
@@ -211,6 +345,19 @@
"settings.tabGroup.showServerName": "Zobraziť názov servera vedľa názvu databázy v názve skupiny kariet", "settings.tabGroup.showServerName": "Zobraziť názov servera vedľa názvu databázy v názve skupiny kariet",
"settings.theme": "Vzhľad", "settings.theme": "Vzhľad",
"settings.title": "Nastavenia", "settings.title": "Nastavenia",
"sqlObject.collectionName": "Názov kolekcie",
"sqlObject.columnComment": "Komentár stĺpca",
"sqlObject.columnDataType": "Dátový typ stĺpca",
"sqlObject.columnName": "Názov stĺpca",
"sqlObject.loadingStructure": "Načítavanie štruktúry databázy",
"sqlObject.schemaName": "Schéma",
"sqlObject.search.placeholder": "Hľadať v tabuľkách, pohľadoch, procedúrach",
"sqlObject.searchBy": "Hľadať podľa:",
"sqlObject.tableComment": "Komentár tabuľky",
"sqlObject.tableEngine": "Engine tabuľky",
"sqlObject.tableViewProcedureName": "Názov tabuľky/pohľadu/procedúry",
"sqlObject.tablesWithRows": "Iba tabuľky s riadkami",
"sqlObject.viewProcedureTriggerText": "Text pohľadu/procedúry/triggera",
"summaryProcesses.actions": "Akcie", "summaryProcesses.actions": "Akcie",
"summaryProcesses.client": "Klient", "summaryProcesses.client": "Klient",
"summaryProcesses.connectionId": "ID pripojenia", "summaryProcesses.connectionId": "ID pripojenia",