mirror of
https://github.com/Fabio286/antares.git
synced 2025-06-05 21:59:22 +02:00
Compare commits
19 Commits
v0.7.16-be
...
v0.7.16-be
Author | SHA1 | Date | |
---|---|---|---|
d702ce3fa9 | |||
63544e95da | |||
6df214558f | |||
f5b86e59e7 | |||
27f0068415 | |||
|
52e42fa1b5 | ||
|
5b9b539bc7 | ||
832aa75ebe | |||
aba67f3872 | |||
5a1644f023 | |||
e372712556 | |||
d4727a7d20 | |||
|
f2c2f33afa | ||
|
6dc4bdd0c0 | ||
|
9c6f1a9ea5 | ||
dd264f802e | |||
fed0e10702 | |||
e7ce4ef6ed | |||
e03f2eef49 |
@@ -239,6 +239,15 @@
|
||||
"contributions": [
|
||||
"platform"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "markusand",
|
||||
"name": "Marc Vilella",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/12972543?v=4",
|
||||
"profile": "https://github.com/markusand",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
}
|
||||
],
|
||||
"contributorsPerLine": 7,
|
||||
|
15
CHANGELOG.md
15
CHANGELOG.md
@@ -2,6 +2,21 @@
|
||||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
|
||||
### [0.7.16-beta.1](https://github.com/antares-sql/antares/compare/v0.7.16-beta.0...v0.7.16-beta.1) (2023-08-18)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* ability to export connections ([f5b86e5](https://github.com/antares-sql/antares/commit/f5b86e59e7e41bbbe1555ec8a85ec1f849e8271d))
|
||||
* ability to import connections ([6df2145](https://github.com/antares-sql/antares/commit/6df214558f8186dd5fbf101505465f4c07c8ad5f))
|
||||
* Add catalan language ([9c6f1a9](https://github.com/antares-sql/antares/commit/9c6f1a9ea52b4791082bdbae91b764c486684c3b))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* add some missing titles of buttons ([52e42fa](https://github.com/antares-sql/antares/commit/52e42fa1b529512154c0680124c5e425964a5b1a))
|
||||
* **SQLite:** improved view body parsing ([832aa75](https://github.com/antares-sql/antares/commit/832aa75ebe46776b9c365dde2dd13db3746adcd5))
|
||||
|
||||
### [0.7.16-beta.0](https://github.com/antares-sql/antares/compare/v0.7.15...v0.7.16-beta.0) (2023-08-11)
|
||||
|
||||
|
||||
|
@@ -153,6 +153,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/m1khal3v"><img src="https://avatars.githubusercontent.com/u/41085561?v=4?s=100" width="100px;" alt="Anton Mikhalev"/><br /><sub><b>Anton Mikhalev</b></sub></a><br /><a href="#translation-m1khal3v" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://64k.nl/"><img src="https://avatars.githubusercontent.com/u/3864423?v=4?s=100" width="100px;" alt="René"/><br /><sub><b>René</b></sub></a><br /><a href="https://github.com/antares-sql/antares/commits?author=64knl" title="Code">💻</a> <a href="#translation-64knl" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/zxp19821005"><img src="https://avatars.githubusercontent.com/u/4915850?v=4?s=100" width="100px;" alt="Woodenman"/><br /><sub><b>Woodenman</b></sub></a><br /><a href="#platform-zxp19821005" title="Packaging/porting to new platform">📦</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/markusand"><img src="https://avatars.githubusercontent.com/u/12972543?v=4?s=100" width="100px;" alt="Marc Vilella"/><br /><sub><b>Marc Vilella</b></sub></a><br /><a href="#translation-markusand" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "antares",
|
||||
"version": "0.7.16-beta.0",
|
||||
"version": "0.7.16-beta.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "antares",
|
||||
"version": "0.7.16-beta.0",
|
||||
"version": "0.7.16-beta.1",
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
|
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "antares",
|
||||
"productName": "Antares",
|
||||
"version": "0.7.16-beta.0",
|
||||
"version": "0.7.16-beta.1",
|
||||
"description": "A modern, fast and productivity driven SQL client with a focus in UX.",
|
||||
"license": "MIT",
|
||||
"repository": "https://github.com/antares-sql/antares.git",
|
||||
|
@@ -31,10 +31,10 @@ parts:
|
||||
fi
|
||||
# Get the latest releases json
|
||||
echo "Get GitHub releases..."
|
||||
wget --quiet https://api.github.com/repos/fabio286/antares/releases/latest -O releases.json
|
||||
wget --quiet https://api.github.com/repos/fabio286/antares/releases -O releases.json
|
||||
# Get the version from the tag_name and the download URL.
|
||||
VERSION=$(jq . releases.json | grep tag_name | cut -d'"' -f4 | sed s'/release-//')
|
||||
DEB_URL=$(cat releases.json | jq -r ".assets[] | select(.name | test(\"${FILTER}\")) | .browser_download_url")
|
||||
VERSION=$(jq . releases.json | grep tag_name | head -1 | cut -d'"' -f4 | sed s'/release-//')
|
||||
DEB_URL=$(cat releases.json | jq -r ".[0].assets[] | select(.name | test(\"${FILTER}\")) | .browser_download_url")
|
||||
DEB=$(basename "${DEB_URL}")
|
||||
echo "Downloading ${DEB_URL}..."
|
||||
wget --quiet "${DEB_URL}" -O "${SNAPCRAFT_PART_INSTALL}/${DEB}"
|
||||
@@ -79,7 +79,7 @@ parts:
|
||||
- libdb5.3
|
||||
- libdbus-1-3
|
||||
- libexpat1
|
||||
- libffi7
|
||||
- libffi8
|
||||
- libgcc-s1
|
||||
- libgcrypt20
|
||||
- libglib2.0-0
|
||||
@@ -87,9 +87,9 @@ parts:
|
||||
- libgnutls30
|
||||
- libgpg-error0
|
||||
- libgssapi-krb5-2
|
||||
- libhogweed5
|
||||
- libhogweed6
|
||||
- libidn2-0
|
||||
- libjson-c4
|
||||
- libjson-c5
|
||||
- libk5crypto3
|
||||
- libkeyutils1
|
||||
- libkrb5-3
|
||||
@@ -97,12 +97,12 @@ parts:
|
||||
- liblz4-1
|
||||
- liblzma5
|
||||
- libmount1
|
||||
- libnettle7
|
||||
- libnettle8
|
||||
- libp11-kit0
|
||||
- libpcre2-8-0
|
||||
- libselinux1
|
||||
- libsqlite3-0
|
||||
- libssl1.1
|
||||
- libssl3
|
||||
- libstdc++6
|
||||
- libsystemd0
|
||||
- libtasn1-6
|
||||
|
31
src/common/libs/encrypter.ts
Normal file
31
src/common/libs/encrypter.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import * as crypto from 'crypto';
|
||||
|
||||
const algorithm = 'aes-256-gcm';
|
||||
|
||||
function encrypt (text: string, password: string) {
|
||||
const iv = crypto.randomBytes(16);
|
||||
const key = crypto.scryptSync(password, 'antares', 32);
|
||||
const cipher = crypto.createCipheriv(algorithm, key, iv);
|
||||
const encrypted = Buffer.concat([cipher.update(text), cipher.final()]);
|
||||
const authTag = cipher.getAuthTag();
|
||||
|
||||
return {
|
||||
iv: iv.toString('hex'),
|
||||
authTag: authTag.toString('hex'),
|
||||
content: encrypted.toString('hex')
|
||||
};
|
||||
}
|
||||
|
||||
function decrypt (hash: { iv: string; content: string; authTag: string }, password: string) {
|
||||
const key = crypto.scryptSync(password, 'antares', 32);
|
||||
const decipher = crypto.createDecipheriv(algorithm, key, Buffer.from(hash.iv, 'hex'));
|
||||
decipher.setAuthTag(Buffer.from(hash.authTag, 'hex'));
|
||||
const decrpyted = decipher.update(hash.content, 'hex', 'utf8') + decipher.final('utf8');
|
||||
|
||||
return decrpyted;
|
||||
}
|
||||
|
||||
export {
|
||||
encrypt,
|
||||
decrypt
|
||||
};
|
@@ -425,7 +425,7 @@ export class SQLiteClient extends AntaresCore {
|
||||
|
||||
return results.rows.map(row => {
|
||||
return {
|
||||
sql: row.sql.match(/(?<=AS ).*?$/gs)[0],
|
||||
sql: row.sql.match(/(?<=(AS|as)( |\n)).*?$/gs)[0],
|
||||
name: view
|
||||
};
|
||||
})[0];
|
||||
|
@@ -16,6 +16,7 @@
|
||||
:id="`id_${id}`"
|
||||
class="file-uploader-input"
|
||||
type="file"
|
||||
:accept="accept"
|
||||
@change="$emit('change', $event)"
|
||||
>
|
||||
</form>
|
||||
@@ -33,6 +34,10 @@ defineProps({
|
||||
default: 'Browse',
|
||||
type: String
|
||||
},
|
||||
accept: {
|
||||
default: '',
|
||||
type: String
|
||||
},
|
||||
modelValue: {
|
||||
default: '',
|
||||
type: String
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<div class="modal-title h6">
|
||||
<div class="d-flex">
|
||||
<i class="mdi mdi-24px mdi-brush-variant mr-1" />
|
||||
<span class="cut-text">{{ t('connection.editConnectionAppearance') }}</span>
|
||||
<span class="cut-text">{{ t('application.editConnectionAppearance') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<a class="btn btn-clear c-hand" @click.stop="closeModal" />
|
||||
|
@@ -26,7 +26,7 @@
|
||||
type="text"
|
||||
required
|
||||
readonly
|
||||
:placeholder="t('database.schemaName')"
|
||||
@click.prevent="openPathDialog"
|
||||
>
|
||||
<button
|
||||
type="button"
|
||||
@@ -251,7 +251,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="column col-auto px-0">
|
||||
<button class="btn btn-link" @click.stop="closeModal">
|
||||
<button class="btn btn-link mr-2" @click.stop="closeModal">
|
||||
{{ t('general.close') }}
|
||||
</button>
|
||||
<button
|
||||
|
@@ -37,6 +37,13 @@
|
||||
>
|
||||
<a class="tab-link">{{ t('application.shortcuts') }}</a>
|
||||
</li>
|
||||
<li
|
||||
class="tab-item c-hand"
|
||||
:class="{'active': selectedTab === 'data'}"
|
||||
@click="selectTab('data')"
|
||||
>
|
||||
<a class="tab-link">{{ t('application.data') }}</a>
|
||||
</li>
|
||||
<li
|
||||
v-if="updateStatus !== 'disabled'"
|
||||
class="tab-item c-hand"
|
||||
@@ -366,6 +373,9 @@
|
||||
<div v-show="selectedTab === 'shortcuts'" class="panel-body py-4">
|
||||
<ModalSettingsShortcuts />
|
||||
</div>
|
||||
<div v-show="selectedTab === 'data'" class="panel-body py-4">
|
||||
<ModalSettingsData />
|
||||
</div>
|
||||
<div v-show="selectedTab === 'update'" class="panel-body py-4">
|
||||
<ModalSettingsUpdate />
|
||||
</div>
|
||||
@@ -411,6 +421,7 @@ import { localesNames } from '@/i18n/supported-locales';
|
||||
import ModalSettingsUpdate from '@/components/ModalSettingsUpdate.vue';
|
||||
import ModalSettingsChangelog from '@/components/ModalSettingsChangelog.vue';
|
||||
import ModalSettingsShortcuts from '@/components/ModalSettingsShortcuts.vue';
|
||||
import ModalSettingsData from '@/components/ModalSettingsData.vue';
|
||||
import BaseTextEditor from '@/components/BaseTextEditor.vue';
|
||||
import BaseSelect from '@/components/BaseSelect.vue';
|
||||
import { AvailableLocale } from '@/i18n';
|
||||
@@ -648,10 +659,14 @@ onBeforeUnmount(() => {
|
||||
.modal-body {
|
||||
overflow: hidden;
|
||||
|
||||
.tab-link {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
.tab-item {
|
||||
max-width: 20%;
|
||||
|
||||
.tab-link {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
}
|
||||
|
||||
.panel-body {
|
||||
|
60
src/renderer/components/ModalSettingsData.vue
Normal file
60
src/renderer/components/ModalSettingsData.vue
Normal file
@@ -0,0 +1,60 @@
|
||||
<template>
|
||||
<div class="container">
|
||||
<div class="columns">
|
||||
<div class="column col-12 h6 text-uppercase mb-2">
|
||||
{{ t('application.exportData') }}
|
||||
</div>
|
||||
<div class="column col-12">
|
||||
{{ t('application.exportDataExplanation') }}
|
||||
</div>
|
||||
<div class="column col-12 text-right">
|
||||
<button
|
||||
class="btn btn-primary d-inline-flex"
|
||||
@click="isExportModal=true"
|
||||
>
|
||||
<i class="mdi mdi-tray-arrow-up mdi-24px pr-2" />
|
||||
<span>{{ t('application.exportData') }}</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="columns mt-4 mb-2">
|
||||
<div class="column col-12 h6 text-uppercase mb-2 mt-4">
|
||||
{{ t('application.importData') }}
|
||||
</div>
|
||||
<div class="column col-12">
|
||||
{{ t('application.importDataExplanation') }}
|
||||
</div>
|
||||
<div class="column col-12 text-right">
|
||||
<button
|
||||
class="btn btn-dark d-inline-flex ml-auto"
|
||||
@click="isImportModal=true"
|
||||
>
|
||||
<i class="mdi mdi-tray-arrow-down mdi-24px pr-2" />
|
||||
<span>{{ t('application.importData') }}</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<ModalSettingsDataExport
|
||||
v-if="isExportModal"
|
||||
@close="isExportModal = false"
|
||||
/>
|
||||
<ModalSettingsDataImport
|
||||
v-if="isImportModal"
|
||||
@close="isImportModal = false"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
// import { useApplicationStore } from '@/stores/application';
|
||||
import ModalSettingsDataExport from '@/components/ModalSettingsDataExport.vue';
|
||||
import ModalSettingsDataImport from '@/components/ModalSettingsDataImport.vue';
|
||||
import { ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const isExportModal = ref(false);
|
||||
const isImportModal = ref(false);
|
||||
|
||||
</script>
|
331
src/renderer/components/ModalSettingsDataExport.vue
Normal file
331
src/renderer/components/ModalSettingsDataExport.vue
Normal file
@@ -0,0 +1,331 @@
|
||||
<template>
|
||||
<Teleport to="#window-content">
|
||||
<div class="modal active">
|
||||
<a class="modal-overlay" @click.stop="closeModal" />
|
||||
<div ref="trapRef" class="modal-container p-0">
|
||||
<div class="modal-header pl-2">
|
||||
<div class="modal-title h6">
|
||||
<div class="d-flex">
|
||||
<i class="mdi mdi-24px mdi-tray-arrow-up mr-1" /> {{ t('application.exportData') }}
|
||||
</div>
|
||||
</div>
|
||||
<a class="btn btn-clear c-hand" @click.stop="closeModal" />
|
||||
</div>
|
||||
<div class="modal-body pb-0">
|
||||
<div class="columns export-options">
|
||||
<div class="column col-8 left">
|
||||
<div class="workspace-query-results" :style="'min-height: 300px;'">
|
||||
<div ref="table" class="table table-hover">
|
||||
<div class="thead">
|
||||
<div class="tr text-center">
|
||||
<div class="th no-border" :style="'width:50%'" />
|
||||
<div class="th no-border" />
|
||||
<div class="th no-border">
|
||||
<label
|
||||
class="form-checkbox m-0 px-2 form-inline"
|
||||
@click.prevent="toggleAllConnections()"
|
||||
>
|
||||
<input
|
||||
type="checkbox"
|
||||
:indeterminate="includeConnectionStatus === 2"
|
||||
:checked="!!includeConnectionStatus"
|
||||
>
|
||||
<i class="form-icon" />
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tr">
|
||||
<div class="th">
|
||||
<div class="table-column-title">
|
||||
<span>{{ t('connection.connectionName') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="th">
|
||||
<div class="table-column-title">
|
||||
<span>{{ t('connection.client') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="th text-center">
|
||||
<div class="table-column-title">
|
||||
<span>{{ t('general.include') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tbody">
|
||||
<div
|
||||
v-for="(item, i) in connections"
|
||||
:key="i"
|
||||
class="tr"
|
||||
>
|
||||
<div class="td">
|
||||
{{ getConnectionName(item.uid) }}
|
||||
</div>
|
||||
<div class="td">
|
||||
{{ item.client }}
|
||||
</div>
|
||||
<div class="td text-center">
|
||||
<label class="form-checkbox m-0 px-2 form-inline">
|
||||
<input v-model="connectionToggles[item.uid]" type="checkbox">
|
||||
<i class="form-icon" />
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column col-4">
|
||||
<h5 class="h5">
|
||||
{{ t('general.options') }}
|
||||
</h5>
|
||||
<label class="form-checkbox">
|
||||
<input v-model="options.includes.passwords" type="checkbox">
|
||||
<i class="form-icon" />
|
||||
{{ t(`application.includeConnectionPasswords`) }}
|
||||
</label>
|
||||
<label class="form-checkbox">
|
||||
<input v-model="options.includes.folders" type="checkbox">
|
||||
<i class="form-icon" />
|
||||
{{ t(`application.includeFolders`) }}
|
||||
</label>
|
||||
<div class="h6 mt-4 mb-2">
|
||||
{{ t('application.encryptionPassword') }}
|
||||
</div>
|
||||
<fieldset class="form-group" :class="{'has-error': isPasswordError}">
|
||||
<div class="input-group">
|
||||
<input
|
||||
ref="passkey"
|
||||
v-model="options.passkey"
|
||||
:type="isPasswordVisible ? 'text' : 'password'"
|
||||
class="form-input"
|
||||
:placeholder="t('application.required')"
|
||||
>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-link input-group-addon"
|
||||
@click="isPasswordVisible = !isPasswordVisible"
|
||||
>
|
||||
<i v-if="isPasswordVisible" class="mdi mdi-eye px-1" />
|
||||
<i v-else class="mdi mdi-eye-off px-1" />
|
||||
</button>
|
||||
</div>
|
||||
<span v-if="isPasswordError" class="form-input-hint">
|
||||
{{ t('application.encryptionPasswordError') }}
|
||||
</span>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-link mr-2" @click.stop="closeModal">
|
||||
{{ t('general.close') }}
|
||||
</button>
|
||||
<button
|
||||
class="btn btn-primary mr-2"
|
||||
autofocus
|
||||
@click.prevent="exportData()"
|
||||
>
|
||||
{{ t('database.export') }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Teleport>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, onBeforeUnmount, Ref, ref } from 'vue';
|
||||
import * as moment from 'moment';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useFocusTrap } from '@/composables/useFocusTrap';
|
||||
import { SidebarElement, useConnectionsStore } from '@/stores/connections';
|
||||
import { unproxify } from '@/libs/unproxify';
|
||||
import { uidGen } from 'common/libs/uidGen';
|
||||
import { storeToRefs } from 'pinia';
|
||||
import { encrypt } from 'common/libs/encrypter';
|
||||
import { ConnectionParams } from 'common/interfaces/antares';
|
||||
|
||||
const { t } = useI18n();
|
||||
const emit = defineEmits(['close']);
|
||||
|
||||
const { trapRef } = useFocusTrap();
|
||||
|
||||
const { getConnectionName } = useConnectionsStore();
|
||||
const { connectionsOrder, connections } = storeToRefs(useConnectionsStore());
|
||||
const localConnections = unproxify<ConnectionParams[]>(connections.value);
|
||||
const localConnectionsOrder = unproxify<SidebarElement[]>(connectionsOrder.value);
|
||||
|
||||
const isPasswordVisible = ref(false);
|
||||
const isPasswordError = ref(false);
|
||||
const connectionToggles: Ref<{[k:string]: boolean}> = ref({});
|
||||
const options = ref({
|
||||
passkey: '',
|
||||
includes: {
|
||||
passwords: true,
|
||||
folders: true
|
||||
}
|
||||
});
|
||||
const filename = computed(() => {
|
||||
const date = moment().format('YYYY-MM-DD');
|
||||
return `backup_${date}`;
|
||||
});
|
||||
const includeConnectionStatus = computed(() => {
|
||||
if (Object.values(connectionToggles.value).every(item => item)) return 1;
|
||||
else if (Object.values(connectionToggles.value).some(item => item)) return 2;
|
||||
else return 0;
|
||||
});
|
||||
|
||||
const exportData = () => {
|
||||
if (options.value.passkey.length < 8)
|
||||
isPasswordError.value = true;
|
||||
else {
|
||||
isPasswordError.value = false;
|
||||
const connectionsToInclude: string[] = [];
|
||||
const connectionsUidMap = new Map<string, string>();
|
||||
for (const cUid in connectionToggles.value)
|
||||
if (connectionToggles.value[cUid]) connectionsToInclude.push(cUid);
|
||||
|
||||
let filteredConnections = unproxify<typeof localConnections>(localConnections.filter(conn => connectionsToInclude.includes(conn.uid)));
|
||||
filteredConnections = filteredConnections.map(c => {
|
||||
const newUid = uidGen('C');
|
||||
connectionsUidMap.set(c.uid, newUid);
|
||||
c.uid = newUid;
|
||||
return c;
|
||||
});
|
||||
|
||||
if (!options.value.includes.passwords) { // Remove passwords and set ask:true
|
||||
filteredConnections.map(c => {
|
||||
if (c.password) {
|
||||
c.password = '';
|
||||
c.ask = true;
|
||||
}
|
||||
return c;
|
||||
});
|
||||
}
|
||||
|
||||
let filteredOrders = [];
|
||||
for (const [oldVal, newVal] of connectionsUidMap) {
|
||||
const connOrder = unproxify(localConnectionsOrder.find(c => c.uid === oldVal));
|
||||
connOrder.uid = newVal;
|
||||
filteredOrders.push(connOrder);
|
||||
}
|
||||
|
||||
if (options.value.includes.folders) { // Includes folders
|
||||
const oldConnUids = Array.from(connectionsUidMap.keys());
|
||||
const newConnUids = Array.from(connectionsUidMap.values());
|
||||
const foldersToInclude = unproxify(localConnectionsOrder).filter(f => (
|
||||
f.isFolder && oldConnUids.some(uid => f.connections.includes(uid))
|
||||
)).map(f => {
|
||||
f.uid = uidGen('F');
|
||||
f.connections = f.connections
|
||||
.map(fc => connectionsUidMap.get(fc))
|
||||
.filter(fc => newConnUids.includes(fc));
|
||||
return f;
|
||||
});
|
||||
|
||||
filteredOrders = [...filteredOrders, ...foldersToInclude];
|
||||
}
|
||||
|
||||
const exportObj = encrypt(JSON.stringify({
|
||||
connections: filteredConnections,
|
||||
connectionsOrder: filteredOrders
|
||||
}), options.value.passkey);
|
||||
|
||||
// console.log(exportObj, JSON.parse(decrypt(exportObj, options.value.passkey)));
|
||||
|
||||
const blobContent = Buffer.from(JSON.stringify(exportObj), 'utf-8').toString('hex');
|
||||
const file = new Blob([blobContent], { type: 'application/octet-stream' });
|
||||
const downloadLink = document.createElement('a');
|
||||
downloadLink.download = `${filename.value}.antares`;
|
||||
downloadLink.href = window.URL.createObjectURL(file);
|
||||
downloadLink.style.display = 'none';
|
||||
document.body.appendChild(downloadLink);
|
||||
downloadLink.click();
|
||||
downloadLink.remove();
|
||||
|
||||
closeModal();
|
||||
}
|
||||
};
|
||||
|
||||
const closeModal = () => {
|
||||
emit('close');
|
||||
};
|
||||
|
||||
const onKey = (e: KeyboardEvent) => {
|
||||
e.stopPropagation();
|
||||
if (e.key === 'Escape')
|
||||
closeModal();
|
||||
};
|
||||
|
||||
const toggleAllConnections = () => {
|
||||
if (includeConnectionStatus.value !== 1) {
|
||||
connectionToggles.value = localConnections.reduce((acc, curr) => {
|
||||
acc[curr.uid] = true;
|
||||
return acc;
|
||||
}, {} as {[k:string]: boolean});
|
||||
}
|
||||
else {
|
||||
connectionToggles.value = localConnections.reduce((acc, curr) => {
|
||||
acc[curr.uid] = false;
|
||||
return acc;
|
||||
}, {} as {[k:string]: boolean});
|
||||
}
|
||||
};
|
||||
|
||||
connectionToggles.value = localConnections.reduce((acc, curr) => {
|
||||
acc[curr.uid] = true;
|
||||
return acc;
|
||||
}, {} as {[k:string]: boolean});
|
||||
|
||||
window.addEventListener('keydown', onKey);
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
window.removeEventListener('keydown', onKey);
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.export-options {
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
|
||||
.left {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.workspace-query-results {
|
||||
flex: 1 0 1px;
|
||||
|
||||
.table {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.form-checkbox {
|
||||
min-height: 0.8rem;
|
||||
padding: 0;
|
||||
|
||||
.form-icon {
|
||||
top: 0.1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.modal {
|
||||
.modal-container {
|
||||
max-width: 800px;
|
||||
}
|
||||
|
||||
.modal-body {
|
||||
max-height: 60vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
263
src/renderer/components/ModalSettingsDataImport.vue
Normal file
263
src/renderer/components/ModalSettingsDataImport.vue
Normal file
@@ -0,0 +1,263 @@
|
||||
<template>
|
||||
<Teleport to="#window-content">
|
||||
<div class="modal modal-sm active">
|
||||
<a class="modal-overlay" @click.stop="closeModal" />
|
||||
<div ref="trapRef" class="modal-container p-0">
|
||||
<div class="modal-header pl-2">
|
||||
<div class="modal-title h6">
|
||||
<div class="d-flex">
|
||||
<i class="mdi mdi-24px mdi-tray-arrow-down mr-1" /> {{ t('application.importData') }}
|
||||
</div>
|
||||
</div>
|
||||
<a class="btn btn-clear c-hand" @click.stop="closeModal" />
|
||||
</div>
|
||||
<div class="modal-body pb-0">
|
||||
<div class="mb-2">
|
||||
<div class="h6 mb-2">
|
||||
{{ t('application.choseFile') }}
|
||||
</div>
|
||||
<BaseUploadInput
|
||||
:model-value="filePath"
|
||||
:message="t('general.browse')"
|
||||
accept=".antares"
|
||||
@clear="filePath = ''"
|
||||
@change="filesChange($event)"
|
||||
/>
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<div class="h6 mb-2">
|
||||
{{ t('application.password') }}
|
||||
</div>
|
||||
<fieldset class="form-group" :class="{'has-error': isPasswordError}">
|
||||
<div class="input-group">
|
||||
<input
|
||||
ref="passkey"
|
||||
v-model="options.passkey"
|
||||
:type="isPasswordVisible ? 'text' : 'password'"
|
||||
class="form-input"
|
||||
:placeholder="t('application.required')"
|
||||
>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-link input-group-addon"
|
||||
@click="isPasswordVisible = !isPasswordVisible"
|
||||
>
|
||||
<i v-if="isPasswordVisible" class="mdi mdi-eye px-1" />
|
||||
<i v-else class="mdi mdi-eye-off px-1" />
|
||||
</button>
|
||||
</div>
|
||||
<span v-if="isPasswordError" class="form-input-hint">
|
||||
{{ t('application.encryptionPasswordError') }}
|
||||
</span>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<label class="form-checkbox">
|
||||
<input v-model="options.ignoreDuplicates" type="checkbox">
|
||||
<i class="form-icon" />
|
||||
{{ t(`application.ignoreDuplicates`) }}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
class="btn btn-link mr-2"
|
||||
@click.stop="closeModal"
|
||||
>
|
||||
{{ t('general.close') }}
|
||||
</button>
|
||||
<button
|
||||
class="btn btn-primary mr-2"
|
||||
:disabled="!filePath"
|
||||
@click.prevent="importData()"
|
||||
>
|
||||
{{ t('database.import') }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Teleport>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { onBeforeUnmount, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import BaseUploadInput from '@/components/BaseUploadInput.vue';
|
||||
import { SidebarElement, useConnectionsStore } from '@/stores/connections';
|
||||
import { unproxify } from '@/libs/unproxify';
|
||||
import { storeToRefs } from 'pinia';
|
||||
import { decrypt } from 'common/libs/encrypter';
|
||||
import { useNotificationsStore } from '@/stores/notifications';
|
||||
import { ConnectionParams } from 'common/interfaces/antares';
|
||||
|
||||
const { t } = useI18n();
|
||||
const emit = defineEmits(['close']);
|
||||
|
||||
const { addNotification } = useNotificationsStore();
|
||||
|
||||
const connectionsStore = useConnectionsStore();
|
||||
const { importConnections } = connectionsStore;
|
||||
const { connections } = storeToRefs(connectionsStore);
|
||||
|
||||
const filePath = ref('');
|
||||
const fileContent = ref(null);
|
||||
const isPasswordVisible = ref(false);
|
||||
const isPasswordError = ref(false);
|
||||
const options = ref({
|
||||
passkey: '',
|
||||
ignoreDuplicates: true
|
||||
});
|
||||
|
||||
const closeModal = () => {
|
||||
emit('close');
|
||||
};
|
||||
|
||||
const filesChange = ({ target } : {target: HTMLInputElement }) => {
|
||||
const { files } = target;
|
||||
if (!files.length) return;
|
||||
|
||||
const reader = new FileReader();
|
||||
reader.readAsText(files[0]);
|
||||
reader.onload = () => {
|
||||
fileContent.value = reader.result;
|
||||
filePath.value = files[0].path;
|
||||
};
|
||||
};
|
||||
|
||||
const importData = () => {
|
||||
if (options.value.passkey.length < 8)
|
||||
isPasswordError.value = true;
|
||||
else {
|
||||
try {
|
||||
const hash = JSON.parse(Buffer.from(fileContent.value, 'hex').toString('utf-8'));
|
||||
|
||||
try {
|
||||
const importObj: {
|
||||
connections: ConnectionParams[];
|
||||
connectionsOrder: SidebarElement[];
|
||||
} = JSON.parse(decrypt(hash, options.value.passkey));
|
||||
|
||||
if (options.value.ignoreDuplicates) {
|
||||
const actualConnections = unproxify(connections.value).map(c => {
|
||||
delete c.uid;
|
||||
|
||||
delete c.name;
|
||||
delete c.password;
|
||||
delete c.ask;
|
||||
|
||||
delete c.key;
|
||||
delete c.cert;
|
||||
delete c.ca;
|
||||
|
||||
delete c.sshKey;
|
||||
|
||||
return JSON.stringify(c);
|
||||
});
|
||||
|
||||
const incomingConnections = unproxify<ConnectionParams[]>(importObj.connections).map(c => {
|
||||
const uid = c.uid;
|
||||
delete c.uid;
|
||||
|
||||
delete c.name;
|
||||
delete c.password;
|
||||
delete c.ask;
|
||||
|
||||
delete c.key;
|
||||
delete c.cert;
|
||||
delete c.ca;
|
||||
|
||||
delete c.sshKey;
|
||||
|
||||
return { uid, jsonString: JSON.stringify(c) };
|
||||
});
|
||||
|
||||
const newConnectionsUid = incomingConnections
|
||||
.filter(c => !actualConnections.includes(c.jsonString))
|
||||
.reduce((acc, cur) => {
|
||||
acc.push(cur.uid);
|
||||
return acc;
|
||||
}, [] as string[]);
|
||||
|
||||
importObj.connections = importObj.connections.filter(c => newConnectionsUid.includes(c.uid));
|
||||
importObj.connectionsOrder = importObj.connectionsOrder
|
||||
.filter(c => newConnectionsUid
|
||||
.includes(c.uid) ||
|
||||
(c.isFolder && c.connections.every(c => newConnectionsUid.includes(c))));
|
||||
}
|
||||
|
||||
importConnections(importObj);
|
||||
|
||||
addNotification({
|
||||
status: 'success',
|
||||
message: t('application.dataImportSuccess')
|
||||
});
|
||||
closeModal();
|
||||
}
|
||||
catch (error) {
|
||||
addNotification({
|
||||
status: 'error',
|
||||
message: t('application.wrongImportPassword')
|
||||
});
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
addNotification({
|
||||
status: 'error',
|
||||
message: t('application.wrongFileFormat')
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const onKey = (e: KeyboardEvent) => {
|
||||
e.stopPropagation();
|
||||
if (e.key === 'Escape')
|
||||
closeModal();
|
||||
};
|
||||
|
||||
window.addEventListener('keydown', onKey);
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
window.removeEventListener('keydown', onKey);
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.export-options {
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
|
||||
.left {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.workspace-query-results {
|
||||
flex: 1 0 1px;
|
||||
|
||||
.table {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.form-checkbox {
|
||||
min-height: 0.8rem;
|
||||
padding: 0;
|
||||
|
||||
.form-icon {
|
||||
top: 0.1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.modal {
|
||||
.modal-body {
|
||||
max-height: 60vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
@@ -45,6 +45,7 @@
|
||||
<button
|
||||
class="btn btn-dark btn-sm"
|
||||
:disabled="isSaving || !localFields.length"
|
||||
:title="t('database.manageForeignKeys')"
|
||||
@click="showForeignModal"
|
||||
>
|
||||
<i class="mdi mdi-24px mdi-key-link mr-1" />
|
||||
|
@@ -45,6 +45,7 @@
|
||||
<button
|
||||
class="btn btn-dark btn-sm mr-0"
|
||||
:disabled="isSaving"
|
||||
:title="t('database.manageIndexes')"
|
||||
@click="showForeignModal"
|
||||
>
|
||||
<i class="mdi mdi-24px mdi-key-link mr-1" />
|
||||
|
522
src/renderer/i18n/ca-ES.ts
Normal file
522
src/renderer/i18n/ca-ES.ts
Normal file
@@ -0,0 +1,522 @@
|
||||
export const caES = {
|
||||
general: {
|
||||
edit: 'Editar',
|
||||
save: 'Desar',
|
||||
close: 'Tancar',
|
||||
delete: 'Esborrar',
|
||||
confirm: 'Confirmar',
|
||||
cancel: 'Cancel·lar',
|
||||
send: 'Enviar',
|
||||
refresh: 'Actualitzar',
|
||||
autoRefresh: 'Actualització automàtica',
|
||||
version: 'Versió',
|
||||
donate: 'Donar',
|
||||
run: 'Executar',
|
||||
results: 'Resultats',
|
||||
size: 'Mida',
|
||||
mimeType: 'Tipus MIME',
|
||||
download: 'Descarregar',
|
||||
add: 'Afegir',
|
||||
data: 'Dades',
|
||||
properties: 'Propietats',
|
||||
insert: 'Inserir',
|
||||
name: 'Nom',
|
||||
clear: 'Netejar',
|
||||
seconds: 'Segons',
|
||||
options: 'Opcions',
|
||||
discard: 'Descartar',
|
||||
stay: 'Quedar-se',
|
||||
author: 'Autor',
|
||||
upload: 'Pujar',
|
||||
browse: 'Navegar',
|
||||
content: 'Contingut',
|
||||
cut: 'Tallar',
|
||||
copy: 'Copiar',
|
||||
paste: 'Enganxar',
|
||||
tools: 'Eines',
|
||||
format: 'Format',
|
||||
all: 'Tot',
|
||||
duplicate: 'Duplicar',
|
||||
new: 'Nou',
|
||||
history: 'Històric',
|
||||
select: 'Seleccionar',
|
||||
filter: 'Filtre',
|
||||
change: 'Canviar',
|
||||
includes: 'Inclou',
|
||||
completed: 'Completat',
|
||||
aborted: 'Avortat',
|
||||
disabled: 'Deshabilitat',
|
||||
enable: 'Habilitar',
|
||||
disable: 'Deshabilitar',
|
||||
contributors: 'Contribuïdors',
|
||||
pin: 'Fixar',
|
||||
unpin: 'Desfixar',
|
||||
folder: 'Carpeta | Carpetes',
|
||||
none: 'Cap',
|
||||
singleQuote: 'Cometa simple',
|
||||
doubleQuote: 'Cometa doble',
|
||||
deleteConfirm: 'Confirmes la cancel·lació de',
|
||||
uploadFile: 'Puja fitxer',
|
||||
manualValue: 'Valor manual',
|
||||
selectAll: 'Selecciona tot',
|
||||
pageNumber: 'Número de pàgina',
|
||||
directoryPath: 'Ruta del directori',
|
||||
actionSuccessful: '{action} realitzat amb èxit',
|
||||
outputFormat: 'Format de sortida',
|
||||
singleFile: 'Arxiu {ext} únic',
|
||||
zipCompressedFile: 'Arxiu {ext} comprimit en ZIP'
|
||||
},
|
||||
connection: {
|
||||
connectionName: 'Nom de la connexió',
|
||||
client: 'Client',
|
||||
hostName: 'Nom de l\'amfitrió',
|
||||
port: 'Port',
|
||||
user: 'Usuari',
|
||||
password: 'Contrasenya',
|
||||
credentials: 'Credencials',
|
||||
connect: 'Connectar',
|
||||
connected: 'Connectat',
|
||||
disconnect: 'Desconnectar',
|
||||
disconnected: 'Desconnectat',
|
||||
ssl: 'SSL',
|
||||
privateKey: 'Clau privada',
|
||||
certificate: 'Certificat',
|
||||
caCertificate: 'Certificat CA',
|
||||
ciphers: 'Xifrats',
|
||||
sshTunnel: 'Túnel SSH',
|
||||
passphrase: 'Frase de contrasenya',
|
||||
connectionString: 'Cadena de connexió',
|
||||
addConnection: 'Afegeix connexió',
|
||||
createConnection: 'Crea connexió',
|
||||
createNewConnection: 'Crea una nova connexió',
|
||||
askCredentials: 'Demana credencials',
|
||||
testConnection: 'Prova la connexió',
|
||||
editConnection: 'Edita la connexió',
|
||||
deleteConnection: 'Esborra la connexió',
|
||||
connectionSuccessfullyMade: 'Connexió realitzada amb èxit!',
|
||||
enableSsl: 'Activa SSL',
|
||||
enableSsh: 'Activa SSH',
|
||||
readOnlyMode: 'Mode de lectura',
|
||||
untrustedConnection: 'Connexió no confiable',
|
||||
allConnections: 'Totes les connexions',
|
||||
searchForConnections: 'Cerca connexions'
|
||||
},
|
||||
database: {
|
||||
schema: 'Esquema',
|
||||
type: 'Tipus',
|
||||
foreignKeys: 'Claus foranes',
|
||||
length: 'Longitud',
|
||||
unsigned: 'Sense signe',
|
||||
default: 'Per defecte',
|
||||
comment: 'Comentari',
|
||||
collation: 'Ordenació',
|
||||
key: 'Clau | Claus',
|
||||
order: 'Ordre',
|
||||
expression: 'Expressió',
|
||||
autoIncrement: 'Autoincrement',
|
||||
engine: 'Motor',
|
||||
field: 'Camp | Camps',
|
||||
approximately: 'Aproximadament',
|
||||
total: 'Total',
|
||||
table: 'Taula',
|
||||
view: 'Vista',
|
||||
indexes: 'Índexs',
|
||||
definer: 'Definidor',
|
||||
algorithm: 'Algorisme',
|
||||
trigger: 'Desencadenador | Desencadenadors',
|
||||
storedRoutine: 'Rutina emmagatzemada | Rutines emmagatzemades',
|
||||
scheduler: 'Planificador | Planificadors',
|
||||
event: 'Esdeveniment',
|
||||
parameters: 'Paràmetres',
|
||||
function: 'Funció | Funcions',
|
||||
deterministic: 'Determinista',
|
||||
context: 'Context',
|
||||
export: 'Exportar',
|
||||
import: 'Importar',
|
||||
returns: 'Retorna',
|
||||
timing: 'Temporització',
|
||||
state: 'Estat',
|
||||
execution: 'Execució',
|
||||
starts: 'Comença',
|
||||
ends: 'Acaba',
|
||||
variables: 'Variables',
|
||||
processes: 'Processos',
|
||||
database: 'Base de dades',
|
||||
array: 'Matriu',
|
||||
structure: 'Estructura',
|
||||
row: 'Fila | Files',
|
||||
cell: 'Cel·la | Cel·les',
|
||||
triggerFunction: 'Funció de desencadenador | Funcions de desencadenador',
|
||||
routine: 'Rutina',
|
||||
commit: 'Validar',
|
||||
rollback: 'Desfer',
|
||||
resultsTable: 'Taula de resultats',
|
||||
ddl: 'DDL',
|
||||
drop: 'Descartar',
|
||||
unableEditFieldWithoutPrimary: 'No es pot editar un camp sense una clau primària en el conjunt de resultats',
|
||||
editCell: 'Edita la cel·la',
|
||||
deleteRows: 'Esborra fila | Esborra {count} files',
|
||||
confirmToDeleteRows: 'Confirmes esborrar una fila? | Confirmes esborrar {count} files?',
|
||||
addNewRow: 'Afegeix una nova fila',
|
||||
numberOfInserts: 'Nombre d\'insercions',
|
||||
affectedRows: 'Files afectades',
|
||||
createNewDatabase: 'Crea una nova base de dades',
|
||||
databaseName: 'Nom de la base de dades',
|
||||
serverDefault: 'Per defecte del servidor',
|
||||
deleteDatabase: 'Esborra la base de dades',
|
||||
editDatabase: 'Edita la base de dades',
|
||||
clearChanges: 'Neteja els canvis',
|
||||
addNewField: 'Afegeix un nou camp',
|
||||
manageIndexes: 'Gestiona els índexs',
|
||||
manageForeignKeys: 'Gestiona les claus foranes',
|
||||
allowNull: 'Permet NULL',
|
||||
zeroFill: 'Omplir amb zeros',
|
||||
customValue: 'Valor personalitzat',
|
||||
onUpdate: 'A l\'actualitzar',
|
||||
deleteField: 'Esborra camp',
|
||||
createNewIndex: 'Crea un nou índex',
|
||||
addToIndex: 'Afegeix a l\'índex',
|
||||
createNewTable: 'Crea una nova taula',
|
||||
emptyTable: 'Taula buida',
|
||||
deleteTable: 'Esborra la taula',
|
||||
emptyConfirm: 'Confirmes buidar',
|
||||
thereAreNoIndexes: 'No hi ha índexs',
|
||||
thereAreNoForeign: 'No hi ha claus foranes',
|
||||
createNewForeign: 'Crea una nova clau forana',
|
||||
referenceTable: 'Taula de referència',
|
||||
referenceField: 'Camp de referència',
|
||||
foreignFields: 'Camps foranis',
|
||||
invalidDefault: 'Valor per defecte no vàlid',
|
||||
onDelete: 'Al esborrar',
|
||||
selectStatement: 'Sentència SELECT',
|
||||
triggerStatement: 'Sentència TRIGGER',
|
||||
sqlSecurity: 'Seguretat SQL',
|
||||
updateOption: 'Opció d\'actualització',
|
||||
deleteView: 'Esborra vista',
|
||||
createNewView: 'Crea una nova vista',
|
||||
deleteTrigger: 'Esborra disparador',
|
||||
createNewTrigger: 'Crea un nou disparador',
|
||||
currentUser: 'Usuari actual',
|
||||
routineBody: 'Cos de la rutina',
|
||||
dataAccess: 'Accés a dades',
|
||||
thereAreNoParameters: 'No hi ha paràmetres',
|
||||
createNewParameter: 'Crea un nou paràmetre',
|
||||
createNewRoutine: 'Crea una nova rutina emmagatzemada',
|
||||
deleteRoutine: 'Esborra rutina emmagatzemada',
|
||||
functionBody: 'Cos de la funció',
|
||||
createNewFunction: 'Crea una nova funció',
|
||||
deleteFunction: 'Esborra funció',
|
||||
schedulerBody: 'Cos del planificador',
|
||||
createNewScheduler: 'Crea un nou planificador',
|
||||
deleteScheduler: 'Esborra planificador',
|
||||
preserveOnCompletion: 'Conserva en finalitzar',
|
||||
tableFiller: 'Ompletaula',
|
||||
fakeDataLanguage: 'Idioma de dades fictícies',
|
||||
queryDuration: 'Durada de la consulta',
|
||||
setNull: 'Estableix NULL',
|
||||
processesList: 'Llista de processos',
|
||||
processInfo: 'Informació del procés',
|
||||
manageUsers: 'Gestiona usuaris',
|
||||
createNewSchema: 'Crea un nou esquema',
|
||||
schemaName: 'Nom de l\'esquema',
|
||||
editSchema: 'Edita l\'esquema',
|
||||
deleteSchema: 'Esborra l\'esquema',
|
||||
duplicateTable: 'Duplica taula',
|
||||
noSchema: 'No hi ha esquema',
|
||||
runQuery: 'Executa consulta',
|
||||
thereAreNoTableFields: 'No hi ha camps a la taula',
|
||||
newTable: 'Nova taula',
|
||||
newView: 'Nova vista',
|
||||
newTrigger: 'Nou disparador',
|
||||
newRoutine: 'Nova rutina',
|
||||
newFunction: 'Nova funció',
|
||||
newScheduler: 'Nou planificador',
|
||||
newTriggerFunction: 'Nova funció de disparador',
|
||||
thereIsNoQueriesYet: 'Encara no hi ha consultes',
|
||||
searchForQueries: 'Cerca consultes',
|
||||
killProcess: 'Mata procés',
|
||||
exportSchema: 'Exporta esquema',
|
||||
importSchema: 'Importa esquema',
|
||||
newInsertStmtEvery: 'Nova sentència INSERT cada',
|
||||
processingTableExport: 'Processant {table}',
|
||||
fetchingTableExport: 'Obtenint dades de {table}',
|
||||
writingTableExport: 'Escrivint dades de {table}',
|
||||
checkAllTables: 'Marca totes les taules',
|
||||
uncheckAllTables: 'Desmarca totes les taules',
|
||||
killQuery: 'Mata consulta',
|
||||
insertRow: 'Insereix fila | Insereix files',
|
||||
commitMode: 'Mode de validació',
|
||||
autoCommit: 'Validació automàtica',
|
||||
manualCommit: 'Validació manual',
|
||||
disableFKChecks: 'Desactiva les comprovacions de claus foranes',
|
||||
formatQuery: 'Formata consulta',
|
||||
queryHistory: 'Històric de consultes',
|
||||
clearQuery: 'Neteja consulta',
|
||||
fillCell: 'Omplir cel·la',
|
||||
executeSelectedQuery: 'Executa la consulta seleccionada',
|
||||
noResultsPresent: 'No hi ha resultats',
|
||||
sqlExportOptions: 'Opcions d\'exportació SQL',
|
||||
targetTable: 'Taula objectiu',
|
||||
switchDatabase: 'Canvia la base de dades',
|
||||
importQueryErrors: 'Avís: ha ocorregut {n} error | Avís: han ocorregut {n} errors',
|
||||
executedQueries: '{n} consulta executada | {n} consultes executades'
|
||||
},
|
||||
application: {
|
||||
settings: 'Configuració',
|
||||
general: 'General',
|
||||
themes: 'Temes',
|
||||
update: 'Actualitzar',
|
||||
about: 'Sobre',
|
||||
language: 'Idioma',
|
||||
light: 'Clar',
|
||||
dark: 'Fosc',
|
||||
autoCompletion: 'Autocompletat',
|
||||
application: 'Aplicació',
|
||||
editor: 'Editor',
|
||||
scratchpad: 'Bloc de notes',
|
||||
changelog: 'Registre de canvis',
|
||||
small: 'Petit',
|
||||
medium: 'Mitjà',
|
||||
large: 'Gran',
|
||||
console: 'Consola',
|
||||
shortcuts: 'Dreceres',
|
||||
appearance: 'Aparença',
|
||||
color: 'Color',
|
||||
label: 'Etiqueta',
|
||||
icon: 'Icona',
|
||||
madeWithJS: 'Fet amb 💛 i JavaScript!',
|
||||
checkForUpdates: 'Comprova actualitzacions',
|
||||
noUpdatesAvailable: 'No hi ha actualitzacions disponibles',
|
||||
checkingForUpdate: 'Comprovant actualitzacions',
|
||||
checkFailure: 'La comprovació ha fallat, si us plau, torna-ho a intentar més tard',
|
||||
updateAvailable: 'Actualització disponible',
|
||||
downloadingUpdate: 'Descarregant actualització',
|
||||
updateDownloaded: 'Actualització descarregada',
|
||||
restartToInstall: 'Reinicia Antares per instal·lar',
|
||||
notificationsTimeout: 'Temps d\'espera de notificacions',
|
||||
openNewTab: 'Obre una nova pestanya',
|
||||
unsavedChanges: 'Canvis no desats',
|
||||
discardUnsavedChanges: 'Tens alguns canvis no desats. Tancant aquesta pestanya aquests canvis es descartaran.',
|
||||
applicationTheme: 'Tema de l\'aplicació',
|
||||
editorTheme: 'Tema de l\'editor',
|
||||
wrapLongLines: 'Ajusta línies llargues',
|
||||
includeBetaUpdates: 'Inclou actualitzacions beta',
|
||||
markdownSupported: 'Suporta markdown',
|
||||
plantATree: 'Planta un arbre',
|
||||
dataTabPageSize: 'Mida de pàgina de la pestanya DATA',
|
||||
noOpenTabs: 'No hi ha pestanyes obertes, navega per la barra de l\'esquerra o:',
|
||||
restorePreviousSession: 'Restaura la sessió anterior',
|
||||
closeTab: 'Tanca pestanya',
|
||||
goToDownloadPage: 'Ves a la pàgina de descàrrega',
|
||||
disableBlur: 'Desactiva el desenfoc',
|
||||
missingOrIncompleteTranslation: 'Traducció absent o incompleta?',
|
||||
findOutHowToContribute: 'Descobreix com contribuir',
|
||||
disableScratchpad: 'Desactiva el bloc de notes',
|
||||
reportABug: 'Informa d\'un error',
|
||||
nextTab: 'Pestanya següent',
|
||||
previousTab: 'Pestanya anterior',
|
||||
selectTabNumber: 'Selecciona el número de pestanya {param}',
|
||||
toggleConsole: 'Commuta la consola',
|
||||
addShortcut: 'Afegeix drecera',
|
||||
editShortcut: 'Edita drecera',
|
||||
deleteShortcut: 'Esborra drecera',
|
||||
restoreDefaults: 'Restaura els valors per defecte',
|
||||
restoreDefaultsQuestion: 'Confirmes restaurar els valors per defecte?',
|
||||
registerAShortcut: 'Registra una drecera',
|
||||
invalidShortcutMessage: 'Combinació no vàlida, continua escrivint',
|
||||
shortcutAlreadyExists: 'La drecera ja existeix',
|
||||
saveContent: 'Desa el contingut',
|
||||
openAllConnections: 'Obre totes les connexions',
|
||||
openSettings: 'Obre configuració',
|
||||
openScratchpad: 'Obre el bloc de notes',
|
||||
runOrReload: 'Executa o recarrega',
|
||||
openFilter: 'Obre filtre',
|
||||
nextResultsPage: 'Pàgina de resultats següent',
|
||||
previousResultsPage: 'Pàgina de resultats anterior',
|
||||
editFolder: 'Edita carpeta',
|
||||
folderName: 'Nom de la carpeta',
|
||||
deleteFolder: 'Esborra carpeta',
|
||||
editConnectionAppearance: 'Edita l\'aparença de la connexió',
|
||||
defaultCopyType: 'Tipus de còpia per defecte',
|
||||
showTableSize: 'Mostra la mida de la taula a la barra lateral',
|
||||
showTableSizeDescription: 'Només MySQL/MariaDB. Activar aquesta opció pot afectar el rendiment en esquemes amb moltes taules.',
|
||||
searchForSchemas: 'Cerca esquemes',
|
||||
searchForElements: 'Cerca elements',
|
||||
switchSearchMethod: 'Canvia el mètode de cerca',
|
||||
closeAllTabs: 'Tanca totes les pestanyes',
|
||||
closeOtherTabs: 'Tanca altres pestanyes',
|
||||
closeTabsToLeft: 'Tanca pestanyes a l\'esquerra',
|
||||
closeTabsToRight: 'Tanca pestanyes a la dreta',
|
||||
csvFieldDelimiter: 'Delimitador de camp',
|
||||
csvLinesTerminator: 'Terminador de línia',
|
||||
csvStringDelimiter: 'Delimitador de cadena',
|
||||
csvIncludeHeader: 'Inclou capçalera',
|
||||
csvExportOptions: 'Opcions d\'exportació CSV',
|
||||
phpArray: 'Matriu PHP'
|
||||
},
|
||||
faker: {
|
||||
address: 'Adreça',
|
||||
commerce: 'Comerç',
|
||||
company: 'Empresa',
|
||||
database: 'Base de dades',
|
||||
date: 'Data',
|
||||
finance: 'Finances',
|
||||
git: 'Git',
|
||||
hacker: 'Hacker',
|
||||
internet: 'Internet',
|
||||
lorem: 'Lorem',
|
||||
name: 'Nom',
|
||||
music: 'Música',
|
||||
phone: 'Telèfon',
|
||||
random: 'Aleatori',
|
||||
system: 'Sistema',
|
||||
time: 'Hora',
|
||||
vehicle: 'Vehicle',
|
||||
zipCode: 'Codi postal',
|
||||
zipCodeByState: 'Codi postal per estat',
|
||||
city: 'Ciutat',
|
||||
cityPrefix: 'Prefix de ciutat',
|
||||
citySuffix: 'Sufix de ciutat',
|
||||
streetName: 'Nom del carrer',
|
||||
streetAddress: 'Adreça del carrer',
|
||||
streetSuffix: 'Sufix del carrer',
|
||||
streetPrefix: 'Prefix del carrer',
|
||||
secondaryAddress: 'Adreça secundària',
|
||||
county: 'Comtat',
|
||||
country: 'País',
|
||||
countryCode: 'Codi de país',
|
||||
state: 'Estat',
|
||||
stateAbbr: 'Abreviatura de l\'estat',
|
||||
latitude: 'Latitud',
|
||||
longitude: 'Longitud',
|
||||
direction: 'Direcció',
|
||||
cardinalDirection: 'Direcció cardinal',
|
||||
ordinalDirection: 'Direcció ordinal',
|
||||
nearbyGPSCoordinate: 'Coordenada GPS propera',
|
||||
timeZone: 'Zona horària',
|
||||
color: 'Color',
|
||||
department: 'Departament',
|
||||
productName: 'Nom del producte',
|
||||
price: 'Preu',
|
||||
productAdjective: 'Adjectiu del producte',
|
||||
productMaterial: 'Material del producte',
|
||||
product: 'Producte',
|
||||
productDescription: 'Descripció del producte',
|
||||
suffixes: 'Sufixos',
|
||||
companyName: 'Nom de l\'empresa',
|
||||
companySuffix: 'Sufix de l\'empresa',
|
||||
catchPhrase: 'Frase feta',
|
||||
bs: 'BS',
|
||||
catchPhraseAdjective: 'Adjectiu de la frase feta',
|
||||
catchPhraseDescriptor: 'Descriptor de la frase feta',
|
||||
catchPhraseNoun: 'Substantiu de la frase feta',
|
||||
bsAdjective: 'Adjectiu BS',
|
||||
bsBuzz: 'Buzz BS',
|
||||
bsNoun: 'Substantiu BS',
|
||||
column: 'Columna',
|
||||
type: 'Tipus',
|
||||
collation: 'Ordenació',
|
||||
engine: 'Motor',
|
||||
past: 'Passat',
|
||||
now: 'Ara',
|
||||
future: 'Futur',
|
||||
between: 'Entre',
|
||||
recent: 'Recent',
|
||||
soon: 'Aviat',
|
||||
month: 'Mes',
|
||||
weekday: 'Dia de la setmana',
|
||||
account: 'Compte',
|
||||
accountName: 'Nom del compte',
|
||||
routingNumber: 'Número de ruta',
|
||||
mask: 'Màscara',
|
||||
amount: 'Quantitat',
|
||||
transactionType: 'Tipus de transacció',
|
||||
currencyCode: 'Codi de moneda',
|
||||
currencyName: 'Nom de la moneda',
|
||||
currencySymbol: 'Símbol de moneda',
|
||||
bitcoinAddress: 'Adreça Bitcoin',
|
||||
litecoinAddress: 'Adreça Litecoin',
|
||||
creditCardNumber: 'Número de targeta de crèdit',
|
||||
creditCardCVV: 'CVV de la targeta de crèdit',
|
||||
ethereumAddress: 'Adreça Ethereum',
|
||||
iban: 'Iban',
|
||||
bic: 'Bic',
|
||||
transactionDescription: 'Descripció de la transacció',
|
||||
branch: 'Branca',
|
||||
commitEntry: 'Entrada de commit',
|
||||
commitMessage: 'Missatge de commit',
|
||||
commitSha: 'SHA de commit',
|
||||
shortSha: 'SHA curt',
|
||||
abbreviation: 'Abreviació',
|
||||
adjective: 'Adjectiu',
|
||||
noun: 'Substantiu',
|
||||
verb: 'Verb',
|
||||
ingverb: 'Gerundi',
|
||||
phrase: 'Frase',
|
||||
avatar: 'Avatar',
|
||||
email: 'Correu electrònic',
|
||||
exampleEmail: 'Correu electrònic d\'exemple',
|
||||
userName: 'Nom d\'usuari',
|
||||
protocol: 'Protocol',
|
||||
url: 'Url',
|
||||
domainName: 'Nom de domini',
|
||||
domainSuffix: 'Sufix de domini',
|
||||
domainWord: 'Paraula de domini',
|
||||
ip: 'Ip',
|
||||
ipv6: 'Ipv6',
|
||||
userAgent: 'Agent d\'usuari',
|
||||
mac: 'Mac',
|
||||
password: 'Contrasenya',
|
||||
word: 'Paraula',
|
||||
words: 'Paraules',
|
||||
sentence: 'Frase',
|
||||
slug: 'Slug',
|
||||
sentences: 'Frases',
|
||||
paragraph: 'Paràgraf',
|
||||
paragraphs: 'Paràgrafs',
|
||||
text: 'Text',
|
||||
lines: 'Línies',
|
||||
genre: 'Gènere',
|
||||
firstName: 'Nom',
|
||||
lastName: 'Cognom',
|
||||
middleName: 'Segon nom',
|
||||
findName: 'Nom complet',
|
||||
jobTitle: 'Títol del treball',
|
||||
gender: 'Gènere',
|
||||
prefix: 'Prefix',
|
||||
suffix: 'Sufix',
|
||||
title: 'Títol',
|
||||
jobDescriptor: 'Descriptor de treball',
|
||||
jobArea: 'Àrea de treball',
|
||||
jobType: 'Tipus de treball',
|
||||
phoneNumber: 'Número de telèfon',
|
||||
phoneNumberFormat: 'Format de número de telèfon',
|
||||
phoneFormats: 'Formats de telèfon',
|
||||
number: 'Número',
|
||||
float: 'Decimal',
|
||||
arrayElement: 'Element de matriu',
|
||||
arrayElements: 'Elements de matriu',
|
||||
objectElement: 'Element d\'objecte',
|
||||
uuid: 'Uuid',
|
||||
boolean: 'Booleà',
|
||||
image: 'Imatge',
|
||||
locale: 'Localització',
|
||||
alpha: 'Alfa',
|
||||
alphaNumeric: 'Alfanumèric',
|
||||
hexaDecimal: 'Hexadecimal',
|
||||
fileName: 'Nom del fitxer',
|
||||
commonFileName: 'Nom de fitxer comú',
|
||||
mimeType: 'Tipus de mime',
|
||||
commonFileType: 'Tipus de fitxer comú',
|
||||
commonFileExt: 'Extensió de fitxer comú',
|
||||
fileType: 'Tipus de fitxer',
|
||||
fileExt: 'Extensió de fitxer',
|
||||
directoryPath: 'Ruta del directori',
|
||||
filePath: 'Ruta del fitxer',
|
||||
semver: 'Semver',
|
||||
manufacturer: 'Fabricant',
|
||||
model: 'Model',
|
||||
fuel: 'Combustible',
|
||||
vin: 'Vin'
|
||||
}
|
||||
};
|
526
src/renderer/i18n/cs-CZ.ts
Normal file
526
src/renderer/i18n/cs-CZ.ts
Normal file
@@ -0,0 +1,526 @@
|
||||
export const csCZ = {
|
||||
general: { // General purpose terms
|
||||
edit: 'Upravit',
|
||||
save: 'Uložit',
|
||||
close: 'Zavřít',
|
||||
delete: 'Smazat',
|
||||
confirm: 'Potvrdit',
|
||||
cancel: 'Zrušit',
|
||||
send: 'Poslat',
|
||||
refresh: 'Obnovit',
|
||||
autoRefresh: 'Auto-obnova',
|
||||
version: 'Verze',
|
||||
donate: 'Příspěvek',
|
||||
run: 'Spustit',
|
||||
results: 'Výsledky',
|
||||
size: 'Velikost',
|
||||
mimeType: 'Mime-Type',
|
||||
download: 'Stáhnout',
|
||||
add: 'Přidat',
|
||||
data: 'Data',
|
||||
properties: 'Vlastnosti', // Lawondyss: Not used
|
||||
name: 'Název',
|
||||
clear: 'Vyčistit',
|
||||
options: 'Možnosti',
|
||||
insert: 'Vložit',
|
||||
discard: 'Zahodit',
|
||||
stay: 'Zůstat',
|
||||
author: 'Autor',
|
||||
upload: 'Nahrát',
|
||||
browse: 'Procházet',
|
||||
content: 'Obsah',
|
||||
cut: 'Vyjmout',
|
||||
copy: 'Kopírovat',
|
||||
paste: 'Vložit',
|
||||
duplicate: 'Duplikovat',
|
||||
tools: 'Nástroje',
|
||||
seconds: 'sekundy',
|
||||
all: 'Vše',
|
||||
new: 'Nové',
|
||||
select: 'Vybrat',
|
||||
change: 'Změnit',
|
||||
includes: 'Zahrnout',
|
||||
completed: 'Dokončeno',
|
||||
aborted: 'Zrušeno',
|
||||
disabled: 'Vypnuto',
|
||||
enable: 'Zapnuto',
|
||||
disable: 'Vypnout',
|
||||
contributors: 'Přispěvatelé',
|
||||
pin: 'Připnout', // Lawondyss: Not used
|
||||
unpin: 'Odepnout', // Lawondyss: Not used
|
||||
folder: 'Složka | Složky', // Lawondyss: Used only 1
|
||||
none: 'Nic',
|
||||
singleQuote: 'Apostrofy',
|
||||
doubleQuote: 'Uvozovky',
|
||||
deleteConfirm: 'Skutečně chcete smazat',
|
||||
uploadFile: 'Nahrát soubor',
|
||||
format: 'Formátovat', // Format code
|
||||
history: 'Historie',
|
||||
filter: 'Filtrovat',
|
||||
manualValue: 'Vlastní hodnota',
|
||||
selectAll: 'Vybrat vše',
|
||||
pageNumber: 'Číslo stránky',
|
||||
directoryPath: 'Adresář',
|
||||
actionSuccessful: '{action} úspěšný',
|
||||
outputFormat: 'Formát výstupu',
|
||||
singleFile: 'Jediný {ext} soubor',
|
||||
zipCompressedFile: 'ZIP komprimovaný {ext} soubor'
|
||||
},
|
||||
connection: { // Database connection
|
||||
connectionName: 'Název',
|
||||
hostName: 'Host',
|
||||
client: 'Klient',
|
||||
port: 'Port',
|
||||
user: 'Uživatel',
|
||||
password: 'Heslo',
|
||||
credentials: 'Pověření',
|
||||
connect: 'Připojit',
|
||||
connected: 'Připojeno', // Lawondyss: Not used
|
||||
disconnect: 'Odpojit',
|
||||
disconnected: 'Odpojeno', // Lawondyss: Not used
|
||||
ssl: 'SSL',
|
||||
enableSsl: 'Použít SSL',
|
||||
privateKey: 'Soukromý klíč',
|
||||
certificate: 'Certifikát',
|
||||
caCertificate: 'CA certifikát',
|
||||
ciphers: 'Šifrování',
|
||||
untrustedConnection: 'Nedůvěryhodné připojení',
|
||||
passphrase: 'Heslová fráze',
|
||||
sshTunnel: 'SSH tunel',
|
||||
enableSsh: 'Použít SSH',
|
||||
connectionString: 'String připojení',
|
||||
addConnection: 'Add connection',
|
||||
createConnection: 'Vytvořit připojení', // Lawondyss: Not used
|
||||
createNewConnection: 'Vytvořit nové připojení',
|
||||
askCredentials: 'Vyžadovat přihlášení',
|
||||
testConnection: 'Vyzkoušet',
|
||||
editConnection: 'Upravit připojení', // Lawondyss: Not used
|
||||
deleteConnection: 'Smazat připojení',
|
||||
connectionSuccessfullyMade: 'Spojení úspěšně navázáno!',
|
||||
readOnlyMode: 'Pouze pro čtení',
|
||||
allConnections: 'Všechna připojení',
|
||||
searchForConnections: 'Hledat připojení'
|
||||
},
|
||||
database: { // Database related terms
|
||||
schema: 'Schéma',
|
||||
type: 'Typ',
|
||||
insert: 'Vložit', // Lawondyss: Not used
|
||||
indexes: 'Indexy',
|
||||
foreignKeys: 'Cizí klíče',
|
||||
length: 'Délka',
|
||||
unsigned: 'Unsigned',
|
||||
default: 'Výchozí',
|
||||
comment: 'Komentář',
|
||||
key: 'Klíč | Klíče', // Lawondyss: Used only 2
|
||||
order: 'Pořadí',
|
||||
expression: 'Výraz',
|
||||
autoIncrement: 'Auto Increment',
|
||||
engine: 'Engine',
|
||||
field: 'Sloupec | Sloupce',
|
||||
approximately: 'Přibližně',
|
||||
total: 'Celkem',
|
||||
table: 'Tabulka | Tabulky', // Lawondyss: Used only without argument
|
||||
view: 'Pohled | Pohledy', // Lawondyss: Used only without argument
|
||||
definer: 'Definér',
|
||||
algorithm: 'Algoritmus',
|
||||
trigger: 'Trigger | Triggery',
|
||||
storedRoutine: 'Stored routina | Stored routiny',
|
||||
scheduler: 'Scheduler | Schedulery',
|
||||
event: 'Akce',
|
||||
parameters: 'Parametry',
|
||||
function: 'Funkce | Funkce',
|
||||
deterministic: 'Deterministická',
|
||||
context: 'Kontext',
|
||||
export: 'Export',
|
||||
import: 'Import',
|
||||
returns: 'Vrací',
|
||||
timing: 'Načasování',
|
||||
state: 'Stav',
|
||||
execution: 'Spustit',
|
||||
starts: 'Od',
|
||||
ends: 'Do',
|
||||
variables: 'Proměnné',
|
||||
processes: 'Procesy',
|
||||
database: 'Databáze',
|
||||
array: 'Pole',
|
||||
structure: 'Struktura',
|
||||
row: 'Řádek | Řádky',
|
||||
cell: 'Buňka | Buňky',
|
||||
triggerFunction: 'Trigger funkce | Trigger funkce',
|
||||
routine: 'Routina | Routiny', // Lawondyss: Not used
|
||||
drop: 'Drop',
|
||||
commit: 'Commit',
|
||||
rollback: 'Rollback',
|
||||
ddl: 'DDL',
|
||||
collation: 'Porovnání',
|
||||
resultsTable: 'Tabulka výsledků',
|
||||
unableEditFieldWithoutPrimary: 'Nelze upravit buňku bez primárního klíče ve výsledku', // Lawondyss: Not used
|
||||
editCell: 'Upravit buňku', // Lawondyss: Not used
|
||||
deleteRows: 'Smazat řádek | Smazat {count} řádků',
|
||||
confirmToDeleteRows: 'Skutečně chcete smazat řádek? | Skutečně chcete smazat {count} řádků?',
|
||||
addNewRow: 'Přidat nový řádek', // Lawondyss: Not used
|
||||
numberOfInserts: 'Počet opakování',
|
||||
affectedRows: 'Ovlivněno řádků',
|
||||
createNewDatabase: 'Vytvořit novou databázi', // Lawondyss: Not used
|
||||
databaseName: 'Název databáze', // Lawondyss: Not use
|
||||
serverDefault: 'Porovnání serveru',
|
||||
deleteDatabase: 'Smazat databázi', // Lawondyss: Not used
|
||||
editDatabase: 'Upravit databázi', // Lawondyss: Not used
|
||||
clearChanges: 'Zrušit změny',
|
||||
addNewField: 'Přidat nový sloupec',
|
||||
manageIndexes: 'Správa indexů',
|
||||
manageForeignKeys: 'Správa cizích klíčů',
|
||||
allowNull: 'Povolit NULL',
|
||||
zeroFill: 'Doplnit nuly',
|
||||
customValue: 'Vlastní hodnota',
|
||||
onUpdate: 'Při změně',
|
||||
deleteField: 'Smazat sloupec',
|
||||
createNewIndex: 'Vytvořit nový index',
|
||||
addToIndex: 'Přidat do indexu',
|
||||
createNewTable: 'Vytvořit novou databázi', // Lawondyss: Not used
|
||||
emptyTable: 'Smazat obsah tabulky',
|
||||
duplicateTable: 'Duplikovat tabulku',
|
||||
deleteTable: 'Smazat tabulku',
|
||||
emptyConfirm: 'Skutečně smazat obsah tabulky',
|
||||
thereAreNoIndexes: 'Nemá žádné indexy',
|
||||
thereAreNoForeign: 'Nemá žádné cizí klíče',
|
||||
createNewForeign: 'Vytvořit nový cizí klíč',
|
||||
referenceTable: 'Ref. tabulka',
|
||||
referenceField: 'Ref. sloupec',
|
||||
foreignFields: 'Cizí sloupce', // Lawondyss: Not used
|
||||
invalidDefault: 'Neplatná výchozí hodnota',
|
||||
onDelete: 'Při smazání',
|
||||
selectStatement: 'Definice pohledu',
|
||||
triggerStatement: 'Definice triggeru',
|
||||
sqlSecurity: 'SQL zabezpečení',
|
||||
updateOption: 'Volba aktualizace',
|
||||
deleteView: 'Smazat pohled',
|
||||
createNewView: 'Vytvořit nový pohled', // Lawondyss: Not used
|
||||
deleteTrigger: 'Smazat trigger',
|
||||
createNewTrigger: 'Vytvořit nový trigger',
|
||||
currentUser: 'Současný uživatel',
|
||||
routineBody: 'Definice routiny',
|
||||
dataAccess: 'Přístup k datům',
|
||||
thereAreNoParameters: 'Nemá žádné parametry',
|
||||
createNewParameter: 'Vytvořit nový parametr',
|
||||
createNewRoutine: 'Vytvořit novou stored routinu',
|
||||
deleteRoutine: 'Smazat stored routinu',
|
||||
functionBody: 'Definice funkce',
|
||||
createNewFunction: 'Vytvořit novou funkci',
|
||||
deleteFunction: 'Smazat funkci',
|
||||
schedulerBody: 'Definice Scheduleru',
|
||||
createNewScheduler: 'Vytvořit nový scheduler',
|
||||
deleteScheduler: 'Smazat scheduler',
|
||||
preserveOnCompletion: 'Uchovat po dokončení',
|
||||
tableFiller: 'Vyplňovač tabulky', // Lawondyss: Not used
|
||||
fakeDataLanguage: 'Jazyk pro fake data',
|
||||
queryDuration: 'Doba trvání dotazu',
|
||||
setNull: 'Nastavit NULL',
|
||||
processesList: 'Seznam procesů',
|
||||
processInfo: 'Informace o procesu',
|
||||
manageUsers: 'Správa uživatelů',
|
||||
createNewSchema: 'Vytvořit nové schéma',
|
||||
schemaName: 'Název schématu',
|
||||
editSchema: 'Upravit schéma',
|
||||
deleteSchema: 'Smazat schema',
|
||||
noSchema: 'Bez schématu',
|
||||
runQuery: 'Spustit dotaz', // Lawondyss: Not used
|
||||
thereAreNoTableFields: 'Nemá žádné sloupce',
|
||||
newTable: 'Nová tabulka',
|
||||
newView: 'Nový pohled',
|
||||
newTrigger: 'Nový trigger',
|
||||
newRoutine: 'Nová routina',
|
||||
newFunction: 'Nová funkce',
|
||||
newScheduler: 'Nový scheduler',
|
||||
newTriggerFunction: 'Nová trigger funkce',
|
||||
thereIsNoQueriesYet: 'Nejsou tu žádné dotazy',
|
||||
searchForQueries: 'Hledání dotazů',
|
||||
killProcess: 'Zabít proces',
|
||||
exportSchema: 'Exportovat schéma',
|
||||
importSchema: 'Importovat schéma',
|
||||
newInsertStmtEvery: 'Nový INSERT každých',
|
||||
processingTableExport: 'Zpracovávám tabulku {table}',
|
||||
fetchingTableExport: 'Získávám data tabulky {table}',
|
||||
writingTableExport: 'Zapisuji data tabulky {table}',
|
||||
checkAllTables: 'Vybrat všechny tabulky',
|
||||
uncheckAllTables: 'Vybrat žádnou tabulku',
|
||||
killQuery: 'Zabít dotaz', // Lawondyss: Not used
|
||||
insertRow: 'Vložit řádek | Vložit řádky', // Lawondyss: Used only 2
|
||||
commitMode: 'Způsob commitování',
|
||||
autoCommit: 'Auto commit',
|
||||
manualCommit: 'Ruční commit',
|
||||
importQueryErrors: 'Varování: došlo k chybě {n} | Varování: došlo k chybám {n}', // Lawondyss: Used without n argument
|
||||
executedQueries: '{n} dotaz spuštěn | {n} dotazy spuštěny', // Lawondyss: Used withoum n argument
|
||||
disableFKChecks: 'Vypnout kontrolu cizích klíčů',
|
||||
formatQuery: 'Formátovat dotaz', // Lawondyss: Not used, probably duplicate to general.format
|
||||
queryHistory: 'Historie dotazů', // Lawondyss: Not used, probably duplicate to general.history
|
||||
clearQuery: 'Clear query', // Lawondyss: Not used, probably duplicate to general.clear
|
||||
fillCell: 'Vyplnit buňku',
|
||||
executeSelectedQuery: 'Spustit vybraný dotaz',
|
||||
noResultsPresent: 'Nejsou k dispozici žádné výsledky',
|
||||
sqlExportOptions: 'Možnosti exportu SQL',
|
||||
targetTable: 'Cílová tabulka',
|
||||
switchDatabase: 'Přepnout databázi',
|
||||
searchForElements: 'Vyhledávání prvků',
|
||||
searchForSchemas: 'Vyhledávání schémat'
|
||||
},
|
||||
application: { // Application related terms
|
||||
settings: 'Nastavení',
|
||||
scratchpad: 'Zápisník',
|
||||
disableScratchpad: 'Vypnout zápisník',
|
||||
console: 'Konzole',
|
||||
general: 'Obecné',
|
||||
themes: 'Motivy',
|
||||
update: 'Aktualizace',
|
||||
about: 'Informace',
|
||||
language: 'Jazyk',
|
||||
shortcuts: 'Zkratky',
|
||||
key: 'Klávesa | Klávesy', // Keyboard key // Lawondyss: Usedn only 2
|
||||
event: 'Akce',
|
||||
light: 'Světlý',
|
||||
dark: 'Tmavý',
|
||||
autoCompletion: 'Dokončování',
|
||||
application: 'Aplikace',
|
||||
editor: 'Editor',
|
||||
changelog: 'Changelog',
|
||||
small: 'Malé', // Lawondyss: Not used, probably obsolete font size settings
|
||||
medium: 'Střední', // Lawondyss: Not used, probably obsolete font size settings
|
||||
large: 'Velké', // Lawondyss: Not used, probably obsolete font size settings
|
||||
appearance: 'Vzhled',
|
||||
color: 'Barva',
|
||||
label: 'Název',
|
||||
icon: 'Ikona',
|
||||
madeWithJS: 'Vytvořeno s 💛 a JavaScriptem!',
|
||||
checkForUpdates: 'Zkontrolovat aktualizace',
|
||||
noUpdatesAvailable: 'Žádné dostupné aktualizace',
|
||||
checkingForUpdate: 'Kontrola aktualizací',
|
||||
checkFailure: 'Kontrola selhala, zkuste to prosím později',
|
||||
updateAvailable: 'Dostupná aktualizace',
|
||||
downloadingUpdate: 'Stahuji aktualizaci',
|
||||
updateDownloaded: 'Aktualizace stažena',
|
||||
restartToInstall: 'Pro instalaci restartujte Antares',
|
||||
includeBetaUpdates: 'Včetně beta aktualizací',
|
||||
notificationsTimeout: 'Časový limit pro oznámení',
|
||||
openNewTab: 'Otevřít novou kartu',
|
||||
unsavedChanges: 'Neuložené změny',
|
||||
discardUnsavedChanges: 'Máte nějaké neuložené změny. Zavřením této karty budou tyto změny zrušeny.',
|
||||
applicationTheme: 'Motiv aplikace',
|
||||
editorTheme: 'Motiv editoru',
|
||||
wrapLongLines: 'Zalamovat dlouhé řádky',
|
||||
markdownSupported: 'Podporován Markdown',
|
||||
plantATree: 'Zasaďte strom', // Lawondyss: Not used
|
||||
dataTabPageSize: 'Počet řádků na stránku',
|
||||
noOpenTabs: 'Žádné otevřené karty, vyberte z elementů vlevo nebo:',
|
||||
restorePreviousSession: 'Pamatovat si otevřené karty',
|
||||
closeTab: 'Zavřít kartu',
|
||||
goToDownloadPage: 'Pro stažení přejít na stránku',
|
||||
disableBlur: 'Vypnout rozostření',
|
||||
missingOrIncompleteTranslation: 'Chybějící nebo neúplný překlad?',
|
||||
findOutHowToContribute: 'Zjistěte, jak můžete přispět.',
|
||||
reportABug: 'Nahlásit chybu',
|
||||
nextTab: 'Další karta',
|
||||
previousTab: 'Předešlá karta',
|
||||
selectTabNumber: 'Vybrat kartu číslo {param}',
|
||||
toggleConsole: 'Přepnout konzoli',
|
||||
addShortcut: 'Přidat zkratku',
|
||||
editShortcut: 'Upravit zkratku',
|
||||
deleteShortcut: 'Smazat zkratku',
|
||||
restoreDefaults: 'Obnovit výchozí',
|
||||
restoreDefaultsQuestion: 'Opravdu chcete obnovit výchozí zkratky?',
|
||||
registerAShortcut: 'Stiskněte požadované klávesy',
|
||||
invalidShortcutMessage: 'Neplatná kombinace, pokračujte v zadávání',
|
||||
shortcutAlreadyExists: 'Zkratka již existuje',
|
||||
saveContent: 'Uložit obsah',
|
||||
openAllConnections: 'Otevřít všechna připojení',
|
||||
openSettings: 'Otevřít nastavení',
|
||||
openScratchpad: 'Otevřít zápisník',
|
||||
runOrReload: 'Spustit dotaz',
|
||||
openFilter: 'Otevřít filtr',
|
||||
nextResultsPage: 'Další stránka výsledků',
|
||||
previousResultsPage: 'Předešlá stránka výsledků',
|
||||
editFolder: 'Upravit složku',
|
||||
folderName: 'Název složky',
|
||||
deleteFolder: 'Smazat složku', // Lawondyss: Not used
|
||||
editConnectionAppearance: 'Upravit vzhled připojení', // Lawondyss: Not used
|
||||
defaultCopyType: 'Výchozí typ kopírování',
|
||||
showTableSize: 'Velikost tabulky v panelu',
|
||||
showTableSizeDescription: 'Pouze MySQL/MariaDB. Povolení této možnosti může ovlivnit výkon u schémat s mnoha tabulkami.',
|
||||
switchSearchMethod: 'Přepnout způsob vyhledávání',
|
||||
phpArray: 'PHP pole',
|
||||
closeAllTabs: 'Zavřít všechny karty',
|
||||
closeOtherTabs: 'Zavřít ostatní karty',
|
||||
closeTabsToLeft: 'Zavřít karty vlevo',
|
||||
closeTabsToRight: 'Zavřít karty vpravo',
|
||||
csvFieldDelimiter: 'Oddělovař',
|
||||
csvLinesTerminator: 'Konec řádku',
|
||||
csvStringDelimiter: 'Obalit text',
|
||||
csvIncludeHeader: 'Včetně hlavičky',
|
||||
csvExportOptions: 'Možnosti CSV exportu',
|
||||
scratchPadDefaultValue: '# JAK PODPOŘIT ANTARES\n\n- [ ] Dát Antares hvězdičku [GitHub repo](https://github.com/antares-sql/antares)\n- [ ] Poslat názor či radu\n- [ ] Nahlásit chybu\n- [ ] Pokud se líbí, sdílet Antares s přáteli\n\n# O ZÁPISNÍKU\n\nToto je zápisník, který uchovává vaše **osobní poznámky**. Podporuje `markdown` formát, ale můžete použít obyčejný text.\nTento obsah je pouze ukázky, neváhejte ho smazat, abyste si udělali místo na poznámky.\n'
|
||||
},
|
||||
faker: { // Faker.js methods, used in random generated content
|
||||
address: 'Address',
|
||||
commerce: 'Commerce',
|
||||
company: 'Company',
|
||||
database: 'Database',
|
||||
date: 'Date',
|
||||
finance: 'Finance',
|
||||
git: 'Git',
|
||||
hacker: 'Hacker',
|
||||
internet: 'Internet',
|
||||
lorem: 'Lorem',
|
||||
name: 'Name',
|
||||
music: 'Music',
|
||||
phone: 'Phone',
|
||||
random: 'Random',
|
||||
system: 'System',
|
||||
time: 'Time',
|
||||
vehicle: 'Vehicle',
|
||||
zipCode: 'Zip code',
|
||||
zipCodeByState: 'Zip code by state',
|
||||
city: 'City',
|
||||
cityPrefix: 'City prefix',
|
||||
citySuffix: 'City suffix',
|
||||
streetName: 'Street name',
|
||||
streetAddress: 'Street address',
|
||||
streetSuffix: 'Street suffix',
|
||||
streetPrefix: 'Street prefix',
|
||||
secondaryAddress: 'Secondary address',
|
||||
county: 'County',
|
||||
country: 'Country',
|
||||
countryCode: 'Country code',
|
||||
state: 'State',
|
||||
stateAbbr: 'State abbreviation',
|
||||
latitude: 'Latitude',
|
||||
longitude: 'Longitude',
|
||||
direction: 'Direction',
|
||||
cardinalDirection: 'Cardinal direction',
|
||||
ordinalDirection: 'Ordinal direction',
|
||||
nearbyGPSCoordinate: 'Nearby GPS coordinate',
|
||||
timeZone: 'Time zone',
|
||||
color: 'Color',
|
||||
department: 'Department',
|
||||
productName: 'Product name',
|
||||
price: 'Price',
|
||||
productAdjective: 'Product adjective',
|
||||
productMaterial: 'Product material',
|
||||
product: 'Product',
|
||||
productDescription: 'Product description',
|
||||
suffixes: 'Suffixes',
|
||||
companyName: 'Company name',
|
||||
companySuffix: 'Company suffix',
|
||||
catchPhrase: 'Catch phrase',
|
||||
bs: 'BS',
|
||||
catchPhraseAdjective: 'Catch phrase adjective',
|
||||
catchPhraseDescriptor: 'Catch phrase descriptor',
|
||||
catchPhraseNoun: 'Catch phrase noun',
|
||||
bsAdjective: 'BS adjective',
|
||||
bsBuzz: 'BS buzz',
|
||||
bsNoun: 'BS noun',
|
||||
column: 'Column',
|
||||
type: 'Type',
|
||||
collation: 'Collation',
|
||||
engine: 'Engine',
|
||||
past: 'Past',
|
||||
now: 'Now',
|
||||
future: 'Future',
|
||||
between: 'Between',
|
||||
recent: 'Recent',
|
||||
soon: 'Soon',
|
||||
month: 'Month',
|
||||
weekday: 'Weekday',
|
||||
account: 'Account',
|
||||
accountName: 'Account name',
|
||||
routingNumber: 'Routing number',
|
||||
mask: 'Mask',
|
||||
amount: 'Amount',
|
||||
transactionType: 'Transaction type',
|
||||
currencyCode: 'Currency code',
|
||||
currencyName: 'Currency name',
|
||||
currencySymbol: 'Currency symbol',
|
||||
bitcoinAddress: 'Bitcoin address',
|
||||
litecoinAddress: 'Litecoin address',
|
||||
creditCardNumber: 'Credit card number',
|
||||
creditCardCVV: 'Credit card CVV',
|
||||
ethereumAddress: 'Ethereum address',
|
||||
iban: 'Iban',
|
||||
bic: 'Bic',
|
||||
transactionDescription: 'Transaction description',
|
||||
branch: 'Branch',
|
||||
commitEntry: 'Commit entry',
|
||||
commitMessage: 'Commit message',
|
||||
commitSha: 'Commit SHA',
|
||||
shortSha: 'Short SHA',
|
||||
abbreviation: 'Abbreviation',
|
||||
adjective: 'Adjective',
|
||||
noun: 'Noun',
|
||||
verb: 'Verb',
|
||||
ingverb: 'Ingverb',
|
||||
phrase: 'Phrase',
|
||||
avatar: 'Avatar',
|
||||
email: 'Email',
|
||||
exampleEmail: 'Example email',
|
||||
userName: 'Username',
|
||||
protocol: 'Protocol',
|
||||
url: 'Url',
|
||||
domainName: 'Domin name',
|
||||
domainSuffix: 'Domain suffix',
|
||||
domainWord: 'Domain word',
|
||||
ip: 'Ip',
|
||||
ipv6: 'Ipv6',
|
||||
userAgent: 'User agent',
|
||||
mac: 'Mac',
|
||||
password: 'Password',
|
||||
word: 'Word',
|
||||
words: 'Words',
|
||||
sentence: 'Sentence',
|
||||
slug: 'Slug',
|
||||
sentences: 'Sentences',
|
||||
paragraph: 'Paragraph',
|
||||
paragraphs: 'Paragraphs',
|
||||
text: 'Text',
|
||||
lines: 'Lines',
|
||||
genre: 'Genre',
|
||||
firstName: 'First name',
|
||||
lastName: 'Last name',
|
||||
middleName: 'Middle name',
|
||||
findName: 'Full name',
|
||||
jobTitle: 'Job title',
|
||||
gender: 'Gender',
|
||||
prefix: 'Prefix',
|
||||
suffix: 'Suffix',
|
||||
title: 'Title',
|
||||
jobDescriptor: 'Job descriptor',
|
||||
jobArea: 'Job area',
|
||||
jobType: 'Job type',
|
||||
phoneNumber: 'Phone number',
|
||||
phoneNumberFormat: 'Phone number format',
|
||||
phoneFormats: 'Phone formats',
|
||||
number: 'Number',
|
||||
float: 'Float',
|
||||
arrayElement: 'Array element',
|
||||
arrayElements: 'Array elements',
|
||||
objectElement: 'Object element',
|
||||
uuid: 'Uuid',
|
||||
boolean: 'Boolean',
|
||||
image: 'Image',
|
||||
locale: 'Locale',
|
||||
alpha: 'Alpha',
|
||||
alphaNumeric: 'Alphanumeric',
|
||||
hexaDecimal: 'Hexadecimal',
|
||||
fileName: 'File name',
|
||||
commonFileName: 'Common file name',
|
||||
mimeType: 'Mime type',
|
||||
commonFileType: 'Common file type',
|
||||
commonFileExt: 'Common file extension',
|
||||
fileType: 'File type',
|
||||
fileExt: 'File extension',
|
||||
directoryPath: 'Directory path',
|
||||
filePath: 'File path',
|
||||
semver: 'Semver',
|
||||
manufacturer: 'Manufacturer',
|
||||
model: 'Model',
|
||||
fuel: 'Fuel',
|
||||
vin: 'Vin'
|
||||
}
|
||||
}
|
@@ -39,6 +39,7 @@ export const enUS = {
|
||||
new: 'New',
|
||||
select: 'Select',
|
||||
change: 'Change',
|
||||
include: 'Include',
|
||||
includes: 'Includes',
|
||||
completed: 'Completed',
|
||||
aborted: 'Aborted',
|
||||
@@ -292,6 +293,10 @@ export const enUS = {
|
||||
label: 'Label',
|
||||
icon: 'Icon',
|
||||
fileName: 'File name',
|
||||
choseFile: 'Chose file',
|
||||
data: 'Data',
|
||||
password: 'Password',
|
||||
required: 'Required',
|
||||
madeWithJS: 'Made with 💛 and JavaScript!',
|
||||
checkForUpdates: 'Check for updates',
|
||||
noUpdatesAvailable: 'No updates available',
|
||||
@@ -358,7 +363,18 @@ export const enUS = {
|
||||
csvStringDelimiter: 'String delimiter',
|
||||
csvIncludeHeader: 'Include header',
|
||||
csvExportOptions: 'CSV export options',
|
||||
scratchPadDefaultValue: '# HOW TO SUPPORT ANTARES\n\n- [ ] Leave a star to Antares [GitHub repo](https://github.com/antares-sql/antares)\n- [ ] Send feedbacks and advices\n- [ ] Report for bugs\n- [ ] If you enjoy, share Antares with friends\n\n# ABOUT SCRATCHPAD\n\nThis is a scratchpad where you can save your **personal notes**. It supports `markdown` format, but you are free to use plain text.\nThis content is just a placeholder, feel free to clear it to make space for your notes.\n'
|
||||
exportData: 'Export data',
|
||||
exportDataExplanation: 'Export saved connections to Antares. You will be asked for a password to encrypt the exported file.',
|
||||
importData: 'Import data',
|
||||
importDataExplanation: 'Imports an .antares file containing connections. You will need to enter the password defined during export.',
|
||||
includeConnectionPasswords: 'Include connection passwords',
|
||||
includeFolders: 'Include folders',
|
||||
encryptionPassword: 'Encryption password',
|
||||
encryptionPasswordError: 'The encryption password must be at least 8 characters long.',
|
||||
ignoreDuplicates: 'Ignore duplicates',
|
||||
wrongImportPassword: 'Wrong import password',
|
||||
wrongFileFormat: 'Wrong file format',
|
||||
dataImportSuccess: 'Data successfully imported'
|
||||
},
|
||||
faker: { // Faker.js methods, used in random generated content
|
||||
address: 'Address',
|
||||
|
@@ -349,7 +349,6 @@ export const frFR = {
|
||||
csvStringDelimiter: 'Séparateur',
|
||||
csvIncludeHeader: 'Inclure l\'en-tête',
|
||||
csvExportOptions: 'Options d\'export CSV',
|
||||
scratchPadDefaultValue: '# COMMENT SOUTENIR ANTARES\n\n- [ ] Laissez une etoile à Antares [GitHub repo](https://github.com/antares-sql/antares)\n- [ ] Envoyez vos avis et conseils\n- [ ] Signalez les bugs\n- [ ] Si vous l\'appréciez, partagez Antares avec des amis\n\n# A PROPOS DU BLOC-NOTES\n\nCeci est un bloc-notes où vous pouvez sauvegarder vos **notes personnelles**. Il supporte le format `markdown`, mais vous êtes libre d\'utiliser du texte standard.\nCe contenu est juste un modèle, vous pouvez a tout moment l\'effacer pour le remplacer par vos notes.\n',
|
||||
phpArray: 'Tableau PHP'
|
||||
},
|
||||
faker: {
|
||||
|
@@ -13,6 +13,8 @@ import { ruRU } from './ru-RU';
|
||||
import { idID } from './id-ID';
|
||||
import { koKR } from './ko-KR';
|
||||
import { nlNL } from './nl-NL';
|
||||
import { caES } from './ca-ES';
|
||||
import { csCZ } from './cs-CZ';
|
||||
const messages = {
|
||||
'en-US': enUS,
|
||||
'it-IT': itIT,
|
||||
@@ -27,7 +29,9 @@ const messages = {
|
||||
'ru-RU': ruRU,
|
||||
'id-ID': idID,
|
||||
'ko-KR': koKR,
|
||||
'nl-NL': nlNL
|
||||
'nl-NL': nlNL,
|
||||
'ca-ES': caES,
|
||||
'cs-CZ': csCZ,
|
||||
};
|
||||
|
||||
type NestedPartial<T> = {
|
||||
|
@@ -351,7 +351,6 @@ export const ptBR = {
|
||||
csvStringDelimiter: 'Delimitador da String',
|
||||
csvIncludeHeader: 'Incluir cabeçalho',
|
||||
csvExportOptions: 'Opções de exportação do CSV',
|
||||
scratchPadDefaultValue: '# COMO AJUDAR O ANTARES\n\n- [ ] Deixe sua estrela para o Antares [GitHub repo](https://github.com/antares-sql/antares)\n- [ ] Envie sugestões e avisos\n- [ ] Relate bugs\n- [ ] Se você gostar, compartilhe o Antares com amigos\n\n# SOBRE O BLOCO DE NOTAS\n\nEsse é o bloco de notas para salvar suas **notas pessoais**. ele suporta o formato `markdown`, porém você é livre para usar qualquer texto.\nEsse conteúdo é apenas um texto, fique a vontade para limpar e obter mais espaço para suas notas.\n',
|
||||
phpArray: 'Array PHP'
|
||||
},
|
||||
faker: {
|
||||
|
@@ -12,5 +12,7 @@ export const localesNames: {[key: string]: string} = {
|
||||
'ru-RU': 'Русский',
|
||||
'id-ID': 'Bahasa Indonesia',
|
||||
'ko-KR': '한국어',
|
||||
'nl-NL': 'Nederlands'
|
||||
'nl-NL': 'Nederlands',
|
||||
'ca-ES': 'Català',
|
||||
'cs-CZ': 'Čeština',
|
||||
};
|
||||
|
@@ -5,7 +5,7 @@ import { toRaw } from 'vue';
|
||||
* @param {*} val
|
||||
* @param {Boolean} json converts the value in JSON object (default true)
|
||||
*/
|
||||
export function unproxify (val: any, json = true): any {
|
||||
export function unproxify<T = any> (val: T, json = true): T {
|
||||
if (json)// JSON conversion
|
||||
return JSON.parse(JSON.stringify(val));
|
||||
else if (Array.isArray(val))// If array
|
||||
|
@@ -144,11 +144,17 @@
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.input-group .input-group-addon {
|
||||
border-color: #3f3f3f;
|
||||
.has-error .form-input {
|
||||
background: $bg-color-dark;
|
||||
}
|
||||
|
||||
.input-group {
|
||||
.input-group-addon {
|
||||
border-color: #3f3f3f;
|
||||
background: $bg-color-dark;
|
||||
}
|
||||
}
|
||||
|
||||
.empty {
|
||||
color: $body-font-color-dark;
|
||||
background: transparent;
|
||||
|
@@ -219,6 +219,16 @@ export const useConnectionsStore = defineStore('connections', {
|
||||
|
||||
this.connectionsOrder = (this.connectionsOrder as SidebarElement[]).filter(el => !emptyFolders.includes(el.uid));
|
||||
persistentStore.set('connectionsOrder', this.connectionsOrder);
|
||||
},
|
||||
importConnections (importObj: {
|
||||
connections: ConnectionParams[];
|
||||
connectionsOrder: SidebarElement[];
|
||||
}) {
|
||||
this.connections = [...this.connections, ...importObj.connections];
|
||||
this.connectionsOrder = [...this.connectionsOrder, ...importObj.connectionsOrder];
|
||||
|
||||
persistentStore.set('connections', this.connections);
|
||||
persistentStore.set('connectionsOrder', this.connectionsOrder);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
Reference in New Issue
Block a user