mirror of
https://github.com/Fabio286/antares.git
synced 2025-06-05 21:59:22 +02:00
Compare commits
47 Commits
v0.7.30-be
...
v0.7.31-be
Author | SHA1 | Date | |
---|---|---|---|
7a66c11868 | |||
8544bb5378 | |||
6709a75298 | |||
f25f6659d5 | |||
8d0ff4953e | |||
|
fbe28f0ff0 | ||
0d8bcf5cd6 | |||
|
47ac729d2f | ||
|
450c4c47f3 | ||
|
110dcd335a | ||
|
0029967619 | ||
34848e8dc3 | |||
c32add76e8 | |||
|
507dc7d55b | ||
4a2b5926f4 | |||
ed90b12a7b | |||
|
00ce76a12e | ||
|
77b3a8a354 | ||
d3ae45ec94 | |||
ad4478a822 | |||
|
ba5dd9ff15 | ||
|
5aab824fe9 | ||
87ab58c50f | |||
e986f287c6 | |||
|
39a30e48dd | ||
46165d2f4f | |||
|
d0e56e4eb6 | ||
|
c803c072d1 | ||
232211811b | |||
|
fb9c258cc1 | ||
8de99dae7b | |||
2bd69c6263 | |||
4d1a81033d | |||
5887eea2ed | |||
6c69583c90 | |||
|
03461522b7 | ||
|
11807e3bb6 | ||
a54b8d719c | |||
d1f68da495 | |||
d666281daa | |||
481ae842dd | |||
|
acf5d459e2 | ||
2ee9cfcf0b | |||
f0d312fb59 | |||
24605d01e1 | |||
|
f639bc7983 | ||
|
5e51997e5b |
@@ -320,6 +320,51 @@
|
|||||||
"contributions": [
|
"contributions": [
|
||||||
"translation"
|
"translation"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "SawGoD",
|
||||||
|
"name": "Nikita Karelikov",
|
||||||
|
"avatar_url": "https://avatars.githubusercontent.com/u/67802757?v=4",
|
||||||
|
"profile": "http://telegram.dog/SawGoD",
|
||||||
|
"contributions": [
|
||||||
|
"translation"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "carvalhods",
|
||||||
|
"name": "David Carvalho",
|
||||||
|
"avatar_url": "https://avatars.githubusercontent.com/u/6569255?v=4",
|
||||||
|
"profile": "https://github.com/carvalhods",
|
||||||
|
"contributions": [
|
||||||
|
"platform"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "r4f4dev",
|
||||||
|
"name": "r4f4dev",
|
||||||
|
"avatar_url": "https://avatars.githubusercontent.com/u/65920592?v=4",
|
||||||
|
"profile": "https://github.com/r4f4dev",
|
||||||
|
"contributions": [
|
||||||
|
"translation"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "salvymc",
|
||||||
|
"name": "Salvatore Forino",
|
||||||
|
"avatar_url": "https://avatars.githubusercontent.com/u/10051897?v=4",
|
||||||
|
"profile": "https://github.com/salvymc",
|
||||||
|
"contributions": [
|
||||||
|
"code"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "JoseGonzalez84",
|
||||||
|
"name": "José González",
|
||||||
|
"avatar_url": "https://avatars.githubusercontent.com/u/16820141?v=4",
|
||||||
|
"profile": "https://gadev.com.es/",
|
||||||
|
"contributions": [
|
||||||
|
"translation"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"contributorsPerLine": 7,
|
"contributorsPerLine": 7,
|
||||||
|
@@ -2,4 +2,5 @@ node_modules
|
|||||||
assets
|
assets
|
||||||
out
|
out
|
||||||
dist
|
dist
|
||||||
build
|
build
|
||||||
|
misc
|
50
CHANGELOG.md
50
CHANGELOG.md
@@ -2,6 +2,56 @@
|
|||||||
|
|
||||||
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.
|
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.31-beta.1](https://github.com/antares-sql/antares/compare/v0.7.31-beta.0...v0.7.31-beta.1) (2025-01-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* zoom in/out and fullscreen shortcuts ([47ac729](https://github.com/antares-sql/antares/commit/47ac729d2f5cced2c503358f7d45a1795f232a20))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* cannot update column value with composite primary key and JSON column, fixes [#916](https://github.com/antares-sql/antares/issues/916) ([0029967](https://github.com/antares-sql/antares/commit/002996761997444ff689bf2384dae64ccb9ef8f7))
|
||||||
|
* fail to duplicate JSON row ([507dc7d](https://github.com/antares-sql/antares/commit/507dc7d55b342240bf18fd58e6bc71709e8e33a0))
|
||||||
|
* saved connections lost opening a second window after first app run ([4a2b592](https://github.com/antares-sql/antares/commit/4a2b5926f4783d0b9b1e28485e9293a25ddd31f3))
|
||||||
|
|
||||||
|
|
||||||
|
### Improvements
|
||||||
|
|
||||||
|
* **translation:** update spanish translation ([d3ae45e](https://github.com/antares-sql/antares/commit/d3ae45ec94b3538e84ac3013b285034caea695cf))
|
||||||
|
|
||||||
|
### [0.7.31-beta.0](https://github.com/antares-sql/antares/compare/v0.7.30...v0.7.31-beta.0) (2025-01-06)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **language:** add uzbek language support ([fb9c258](https://github.com/antares-sql/antares/commit/fb9c258cc10e4d85242ca533a66a95f4101d472c))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* prevent delete confirmation modal from triggering on non-delete key presses, fixes [#906](https://github.com/antares-sql/antares/issues/906) ([8de99da](https://github.com/antares-sql/antares/commit/8de99dae7b6eb72bd6833c607d3c3a5db9508ebb))
|
||||||
|
|
||||||
|
### [0.7.30](https://github.com/antares-sql/antares/compare/v0.7.30-beta.1...v0.7.30) (2024-12-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* issue saving queries as file ([a54b8d7](https://github.com/antares-sql/antares/commit/a54b8d719c6454500b885050c9ce6feaf7cfae1f))
|
||||||
|
|
||||||
|
### [0.7.30-beta.1](https://github.com/antares-sql/antares/compare/v0.7.30-beta.0...v0.7.30-beta.1) (2024-11-15)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* missing support check for table check features ([2ee9cfc](https://github.com/antares-sql/antares/commit/2ee9cfcf0bbcf86e8a194d2eff78801300ce7cb3))
|
||||||
|
|
||||||
|
|
||||||
|
### Improvements
|
||||||
|
|
||||||
|
* **PostgreSQL:** improved support of connection strings, closes [#893](https://github.com/antares-sql/antares/issues/893) ([f0d312f](https://github.com/antares-sql/antares/commit/f0d312fb59fd98d6e4501bc407959b91eb0650f2))
|
||||||
|
|
||||||
### [0.7.30-beta.0](https://github.com/antares-sql/antares/compare/v0.7.29...v0.7.30-beta.0) (2024-10-25)
|
### [0.7.30-beta.0](https://github.com/antares-sql/antares/compare/v0.7.29...v0.7.30-beta.0) (2024-10-25)
|
||||||
|
|
||||||
|
|
||||||
|
19
README.md
19
README.md
@@ -1,13 +1,13 @@
|
|||||||
|
|
||||||
<!-- markdownlint-disable -->
|
<!-- markdownlint-disable -->
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img width="800" src="https://raw.githubusercontent.com/Fabio286/antares/master/docs/gh-logo.png">
|
<img width="800" src="https://raw.githubusercontent.com/antares-sql/antares/master/docs/gh-logo.png">
|
||||||
</p>
|
</p>
|
||||||
<!-- markdownlint-restore -->
|
<!-- markdownlint-restore -->
|
||||||
|
|
||||||
# Antares SQL Client
|
# Antares SQL Client
|
||||||
|
|
||||||
    [](https://www.treedom.net/en/user/fabio-di-stasio/event/antares-for-the-planet)
|
    [](https://www.treedom.net/en/user/fabio-di-stasio/event/antares-for-the-planet)
|
||||||
|
|
||||||
Antares is an SQL client based on [Electron.js](https://github.com/electron/electron) and [Vue.js](https://github.com/vuejs/vue) that aims to become a useful tool, especially for developers.
|
Antares is an SQL client based on [Electron.js](https://github.com/electron/electron) and [Vue.js](https://github.com/vuejs/vue) that aims to become a useful tool, especially for developers.
|
||||||
Our target is to support as many databases as possible, and all major operating systems, including the ARM versions.
|
Our target is to support as many databases as possible, and all major operating systems, including the ARM versions.
|
||||||
@@ -16,7 +16,7 @@ Our target is to support as many databases as possible, and all major operating
|
|||||||
However, there are all the features necessary to have a pleasant database management experience, so give it a chance and send us your feedback, we would really appreciate it.
|
However, there are all the features necessary to have a pleasant database management experience, so give it a chance and send us your feedback, we would really appreciate it.
|
||||||
We are actively working on it, hoping to provide new cool features, improvements and fixes as soon as possible.
|
We are actively working on it, hoping to provide new cool features, improvements and fixes as soon as possible.
|
||||||
|
|
||||||
🔗 If you are curious to try Antares you can download and install the [latest release](https://github.com/Fabio286/antares/releases/latest).
|
🔗 If you are curious to try Antares you can download and install the [latest release](https://github.com/antares-sql/antares/releases/latest).
|
||||||
👁 To stay tuned for new releases follow Antares SQL on [Mastodon](https://fosstodon.org/@AntaresSQL).
|
👁 To stay tuned for new releases follow Antares SQL on [Mastodon](https://fosstodon.org/@AntaresSQL).
|
||||||
🌟 Don't forget to **leave a star** if you appreciate this project.
|
🌟 Don't forget to **leave a star** if you appreciate this project.
|
||||||
|
|
||||||
@@ -60,7 +60,7 @@ On Linux you can simply download and run the `.AppImage` distribution, install f
|
|||||||
|
|
||||||
### Windows
|
### Windows
|
||||||
|
|
||||||
On Windows you can choose between downloading the app from Microsoft Store or downloading the `.exe` from our [website](https://antares-sql.app/downloads) or [this github repo](https://github.com/Fabio286/antares/releases/latest). Distributions that are not from Microsoft Store are not signed with a certificate, so to install you need to click on "More info" and then "Run anyway" on SmartScreen prompt.
|
On Windows you can choose between downloading the app from Microsoft Store or downloading the `.exe` from our [website](https://antares-sql.app/downloads) or [this github repo](https://github.com/antares-sql/antares/releases/latest). Distributions that are not from Microsoft Store are not signed with a certificate, so to install you need to click on "More info" and then "Run anyway" on SmartScreen prompt.
|
||||||
|
|
||||||
### MacOS
|
### MacOS
|
||||||
|
|
||||||
@@ -99,8 +99,8 @@ On macOS you can run `.dmg` distribution following [this guide](https://support.
|
|||||||
|
|
||||||
## How to contribute
|
## How to contribute
|
||||||
|
|
||||||
- 🌍 [Translate Antares](https://github.com/Fabio286/antares/wiki/Translate-Antares)
|
- 🌍 [Translate Antares](https://github.com/antares-sql/antares/wiki/Translate-Antares)
|
||||||
- 📖 [Contributors Guide](https://github.com/Fabio286/antares/wiki/Contributors-Guide)
|
- 📖 [Contributors Guide](https://github.com/antares-sql/antares/wiki/Contributors-Guide)
|
||||||
- 🚧 [Project Board](https://github.com/orgs/antares-sql/projects/3/views/2)
|
- 🚧 [Project Board](https://github.com/orgs/antares-sql/projects/3/views/2)
|
||||||
|
|
||||||
## Contributors ✨
|
## Contributors ✨
|
||||||
@@ -155,6 +155,13 @@ 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/zwei-c"><img src="https://avatars.githubusercontent.com/u/55912811?v=4?s=100" width="100px;" alt="CHANG, CHIH WEI"/><br /><sub><b>CHANG, CHIH WEI</b></sub></a><br /><a href="#translation-zwei-c" title="Translation">🌍</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/zwei-c"><img src="https://avatars.githubusercontent.com/u/55912811?v=4?s=100" width="100px;" alt="CHANG, CHIH WEI"/><br /><sub><b>CHANG, CHIH WEI</b></sub></a><br /><a href="#translation-zwei-c" title="Translation">🌍</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mirrorb"><img src="https://avatars.githubusercontent.com/u/34116207?v=4?s=100" width="100px;" alt="GaoChun"/><br /><sub><b>GaoChun</b></sub></a><br /><a href="https://github.com/antares-sql/antares/commits?author=mirrorb" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mirrorb"><img src="https://avatars.githubusercontent.com/u/34116207?v=4?s=100" width="100px;" alt="GaoChun"/><br /><sub><b>GaoChun</b></sub></a><br /><a href="https://github.com/antares-sql/antares/commits?author=mirrorb" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/LeviEyal"><img src="https://avatars.githubusercontent.com/u/48846533?v=4?s=100" width="100px;" alt="Eyal Levi"/><br /><sub><b>Eyal Levi</b></sub></a><br /><a href="#translation-LeviEyal" title="Translation">🌍</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/LeviEyal"><img src="https://avatars.githubusercontent.com/u/48846533?v=4?s=100" width="100px;" alt="Eyal Levi"/><br /><sub><b>Eyal Levi</b></sub></a><br /><a href="#translation-LeviEyal" title="Translation">🌍</a></td>
|
||||||
|
<td align="center" valign="top" width="14.28%"><a href="http://telegram.dog/SawGoD"><img src="https://avatars.githubusercontent.com/u/67802757?v=4?s=100" width="100px;" alt="Nikita Karelikov"/><br /><sub><b>Nikita Karelikov</b></sub></a><br /><a href="#translation-SawGoD" title="Translation">🌍</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/carvalhods"><img src="https://avatars.githubusercontent.com/u/6569255?v=4?s=100" width="100px;" alt="David Carvalho"/><br /><sub><b>David Carvalho</b></sub></a><br /><a href="#platform-carvalhods" title="Packaging/porting to new platform">📦</a></td>
|
||||||
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/r4f4dev"><img src="https://avatars.githubusercontent.com/u/65920592?v=4?s=100" width="100px;" alt="r4f4dev"/><br /><sub><b>r4f4dev</b></sub></a><br /><a href="#translation-r4f4dev" title="Translation">🌍</a></td>
|
||||||
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/salvymc"><img src="https://avatars.githubusercontent.com/u/10051897?v=4?s=100" width="100px;" alt="Salvatore Forino"/><br /><sub><b>Salvatore Forino</b></sub></a><br /><a href="https://github.com/antares-sql/antares/commits?author=salvymc" title="Code">💻</a></td>
|
||||||
|
<td align="center" valign="top" width="14.28%"><a href="https://gadev.com.es/"><img src="https://avatars.githubusercontent.com/u/16820141?v=4?s=100" width="100px;" alt="José González"/><br /><sub><b>José González</b></sub></a><br /><a href="#translation-JoseGonzalez84" title="Translation">🌍</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
12
package-lock.json
generated
12
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "antares",
|
"name": "antares",
|
||||||
"version": "0.7.30-beta.0",
|
"version": "0.7.31-beta.1",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "antares",
|
"name": "antares",
|
||||||
"version": "0.7.30-beta.0",
|
"version": "0.7.31-beta.1",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -42,7 +42,6 @@
|
|||||||
"node-firebird": "~1.1.8",
|
"node-firebird": "~1.1.8",
|
||||||
"node-loader": "~2.0.0",
|
"node-loader": "~2.0.0",
|
||||||
"pg": "~8.11.5",
|
"pg": "~8.11.5",
|
||||||
"pg-connection-string": "~2.5.0",
|
|
||||||
"pg-query-stream": "~4.2.3",
|
"pg-query-stream": "~4.2.3",
|
||||||
"pgsql-ast-parser": "~7.2.1",
|
"pgsql-ast-parser": "~7.2.1",
|
||||||
"pinia": "~2.1.7",
|
"pinia": "~2.1.7",
|
||||||
@@ -12142,10 +12141,6 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"node_modules/pg-connection-string": {
|
|
||||||
"version": "2.5.0",
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/pg-cursor": {
|
"node_modules/pg-cursor": {
|
||||||
"version": "2.10.3",
|
"version": "2.10.3",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -24507,9 +24502,6 @@
|
|||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"pg-connection-string": {
|
|
||||||
"version": "2.5.0"
|
|
||||||
},
|
|
||||||
"pg-cursor": {
|
"pg-cursor": {
|
||||||
"version": "2.10.3",
|
"version": "2.10.3",
|
||||||
"requires": {}
|
"requires": {}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "antares",
|
"name": "antares",
|
||||||
"productName": "Antares",
|
"productName": "Antares",
|
||||||
"version": "0.7.30-beta.0",
|
"version": "0.7.31-beta.1",
|
||||||
"description": "A modern, fast and productivity driven SQL client with a focus in UX.",
|
"description": "A modern, fast and productivity driven SQL client with a focus in UX.",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"repository": "https://github.com/antares-sql/antares.git",
|
"repository": "https://github.com/antares-sql/antares.git",
|
||||||
@@ -151,7 +151,6 @@
|
|||||||
"node-firebird": "~1.1.8",
|
"node-firebird": "~1.1.8",
|
||||||
"node-loader": "~2.0.0",
|
"node-loader": "~2.0.0",
|
||||||
"pg": "~8.11.5",
|
"pg": "~8.11.5",
|
||||||
"pg-connection-string": "~2.5.0",
|
|
||||||
"pg-query-stream": "~4.2.3",
|
"pg-query-stream": "~4.2.3",
|
||||||
"pgsql-ast-parser": "~7.2.1",
|
"pgsql-ast-parser": "~7.2.1",
|
||||||
"pinia": "~2.1.7",
|
"pinia": "~2.1.7",
|
||||||
|
@@ -57,6 +57,7 @@ export interface ConnectionParams {
|
|||||||
cert?: string;
|
cert?: string;
|
||||||
key?: string;
|
key?: string;
|
||||||
ca?: string;
|
ca?: string;
|
||||||
|
connString?: string;
|
||||||
untrustedConnection: boolean;
|
untrustedConnection: boolean;
|
||||||
ciphers?: string;
|
ciphers?: string;
|
||||||
ssh: boolean;
|
ssh: boolean;
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
/* eslint-disable no-useless-escape */
|
/* eslint-disable no-useless-escape */
|
||||||
import { lineString, point, polygon } from '@turf/helpers';
|
import { lineString, point, polygon } from '@turf/helpers';
|
||||||
import { BIT, BLOB, DATE, DATETIME, FLOAT, IS_MULTI_SPATIAL, NUMBER, SPATIAL, TEXT_SEARCH } from 'common/fieldTypes';
|
import { BIT, BLOB, DATE, DATETIME, FLOAT, IS_MULTI_SPATIAL, NUMBER, SPATIAL, TEXT_SEARCH } from 'common/fieldTypes';
|
||||||
|
import * as antares from 'common/interfaces/antares';
|
||||||
import * as moment from 'moment';
|
import * as moment from 'moment';
|
||||||
|
|
||||||
import customizations from '../customizations';
|
import customizations from '../customizations';
|
||||||
@@ -209,3 +210,20 @@ export const jsonToSqlInsert = (args: {
|
|||||||
|
|
||||||
return insertsString;
|
return insertsString;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const formatJsonForSqlWhere = (jsonValue: object, clientType: antares.ClientCode) => {
|
||||||
|
const formattedValue = JSON.stringify(jsonValue);
|
||||||
|
|
||||||
|
switch (clientType) {
|
||||||
|
case 'mysql':
|
||||||
|
return ` = CAST('${formattedValue}' AS JSON)`;
|
||||||
|
case 'maria':
|
||||||
|
return ` = '${formattedValue}'`;
|
||||||
|
case 'pg':
|
||||||
|
return `::text = '${formattedValue}'`;
|
||||||
|
case 'firebird':
|
||||||
|
case 'sqlite':
|
||||||
|
default:
|
||||||
|
return ` = '${formattedValue}'`;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
@@ -1,29 +1,34 @@
|
|||||||
export const shortcutEvents: Record<string, { l18n: string; l18nParam?: string | number; context?: 'tab' }> = {
|
export const shortcutEvents: Record<string, { i18n: string; i18nParam?: string | number; context?: 'tab' | 'main' }> = {
|
||||||
'run-or-reload': { l18n: 'application.runOrReload', context: 'tab' },
|
'run-or-reload': { i18n: 'application.runOrReload', context: 'tab' },
|
||||||
'open-new-tab': { l18n: 'application.openNewTab', context: 'tab' },
|
'open-new-tab': { i18n: 'application.openNewTab', context: 'tab' },
|
||||||
'close-tab': { l18n: 'application.closeTab', context: 'tab' },
|
'close-tab': { i18n: 'application.closeTab', context: 'tab' },
|
||||||
'format-query': { l18n: 'database.formatQuery', context: 'tab' },
|
'format-query': { i18n: 'database.formatQuery', context: 'tab' },
|
||||||
'kill-query': { l18n: 'database.killQuery', context: 'tab' },
|
'kill-query': { i18n: 'database.killQuery', context: 'tab' },
|
||||||
'query-history': { l18n: 'database.queryHistory', context: 'tab' },
|
'query-history': { i18n: 'database.queryHistory', context: 'tab' },
|
||||||
'clear-query': { l18n: 'database.clearQuery', context: 'tab' },
|
'clear-query': { i18n: 'database.clearQuery', context: 'tab' },
|
||||||
// 'save-file': { l18n: 'application.saveFile', context: 'tab' },
|
// 'save-file': { i18n: 'application.saveFile', context: 'tab' },
|
||||||
'open-file': { l18n: 'application.openFile', context: 'tab' },
|
'open-file': { i18n: 'application.openFile', context: 'tab' },
|
||||||
'save-file-as': { l18n: 'application.saveFileAs', context: 'tab' },
|
'save-file-as': { i18n: 'application.saveFileAs', context: 'tab' },
|
||||||
'next-tab': { l18n: 'application.nextTab' },
|
'next-tab': { i18n: 'application.nextTab' },
|
||||||
'prev-tab': { l18n: 'application.previousTab' },
|
'prev-tab': { i18n: 'application.previousTab' },
|
||||||
'open-all-connections': { l18n: 'application.openAllConnections' },
|
'open-all-connections': { i18n: 'application.openAllConnections' },
|
||||||
'open-filter': { l18n: 'application.openFilter' },
|
'open-filter': { i18n: 'application.openFilter' },
|
||||||
'next-page': { l18n: 'application.nextResultsPage' },
|
'next-page': { i18n: 'application.nextResultsPage' },
|
||||||
'prev-page': { l18n: 'application.previousResultsPage' },
|
'prev-page': { i18n: 'application.previousResultsPage' },
|
||||||
'toggle-console': { l18n: 'application.toggleConsole' },
|
'toggle-console': { i18n: 'application.toggleConsole' },
|
||||||
'save-content': { l18n: 'application.saveContent' },
|
'save-content': { i18n: 'application.saveContent' },
|
||||||
'create-connection': { l18n: 'connection.createNewConnection' },
|
'create-connection': { i18n: 'connection.createNewConnection' },
|
||||||
'open-settings': { l18n: 'application.openSettings' },
|
'open-settings': { i18n: 'application.openSettings' },
|
||||||
'open-scratchpad': { l18n: 'application.openNotes' }
|
'open-scratchpad': { i18n: 'application.openNotes' },
|
||||||
|
setFullScreen: { i18n: 'application.fullScreen', context: 'main' },
|
||||||
|
setZoomIn: { i18n: 'application.zoomIn', context: 'main' },
|
||||||
|
setZoomOut: { i18n: 'application.zoomOut', context: 'main' },
|
||||||
|
setZoomReset: { i18n: 'application.zoomReset', context: 'main' }
|
||||||
};
|
};
|
||||||
|
|
||||||
interface ShortcutRecord {
|
interface ShortcutRecord {
|
||||||
event: string;
|
event: string;
|
||||||
|
isFunction?: boolean;
|
||||||
keys: Electron.Accelerator[] | string[];
|
keys: Electron.Accelerator[] | string[];
|
||||||
/** Needed for default shortcuts */
|
/** Needed for default shortcuts */
|
||||||
os: NodeJS.Platform[];
|
os: NodeJS.Platform[];
|
||||||
@@ -38,6 +43,30 @@ const shortcuts: ShortcutRecord[] = [
|
|||||||
keys: ['F5'],
|
keys: ['F5'],
|
||||||
os: ['darwin', 'linux', 'win32']
|
os: ['darwin', 'linux', 'win32']
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
event: 'setFullScreen',
|
||||||
|
isFunction: true,
|
||||||
|
keys: ['F11'],
|
||||||
|
os: ['darwin', 'linux', 'win32']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
event: 'setZoomIn',
|
||||||
|
isFunction: true,
|
||||||
|
keys: ['CommandOrControl+='],
|
||||||
|
os: ['darwin', 'linux', 'win32']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
event: 'setZoomOut',
|
||||||
|
isFunction: true,
|
||||||
|
keys: ['CommandOrControl+-'],
|
||||||
|
os: ['darwin', 'linux', 'win32']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
event: 'setZoomReset',
|
||||||
|
isFunction: true,
|
||||||
|
keys: ['CommandOrControl+0'],
|
||||||
|
os: ['darwin', 'linux', 'win32']
|
||||||
|
},
|
||||||
{
|
{
|
||||||
event: 'save-content',
|
event: 'save-content',
|
||||||
keys: ['CommandOrControl+S'],
|
keys: ['CommandOrControl+S'],
|
||||||
@@ -142,8 +171,8 @@ const shortcuts: ShortcutRecord[] = [
|
|||||||
|
|
||||||
for (let i = 1; i <= 9; i++) {
|
for (let i = 1; i <= 9; i++) {
|
||||||
shortcutEvents[`select-tab-${i}`] = {
|
shortcutEvents[`select-tab-${i}`] = {
|
||||||
l18n: 'application.selectTabNumber',
|
i18n: 'application.selectTabNumber',
|
||||||
l18nParam: i
|
i18nParam: i
|
||||||
};
|
};
|
||||||
|
|
||||||
shortcuts.push({
|
shortcuts.push({
|
||||||
|
@@ -26,6 +26,7 @@ export default (connections: Record<string, antares.Client>) => {
|
|||||||
user: conn.user,
|
user: conn.user,
|
||||||
password: conn.password,
|
password: conn.password,
|
||||||
readonly: conn.readonly,
|
readonly: conn.readonly,
|
||||||
|
connectionString: conn.connString,
|
||||||
database: '',
|
database: '',
|
||||||
schema: '',
|
schema: '',
|
||||||
databasePath: '',
|
databasePath: '',
|
||||||
@@ -122,6 +123,7 @@ export default (connections: Record<string, antares.Client>) => {
|
|||||||
password: conn.password,
|
password: conn.password,
|
||||||
application_name: 'Antares SQL',
|
application_name: 'Antares SQL',
|
||||||
readonly: conn.readonly,
|
readonly: conn.readonly,
|
||||||
|
connectionString: conn.connString,
|
||||||
database: '',
|
database: '',
|
||||||
schema: '',
|
schema: '',
|
||||||
databasePath: '',
|
databasePath: '',
|
||||||
|
@@ -3,7 +3,7 @@ import { ARRAY, BIT, BLOB, BOOLEAN, DATE, DATETIME, FLOAT, LONG_TEXT, NUMBER, TE
|
|||||||
import * as antares from 'common/interfaces/antares';
|
import * as antares from 'common/interfaces/antares';
|
||||||
import { InsertRowsParams } from 'common/interfaces/tableApis';
|
import { InsertRowsParams } from 'common/interfaces/tableApis';
|
||||||
import { fakerCustom } from 'common/libs/fakerCustom';
|
import { fakerCustom } from 'common/libs/fakerCustom';
|
||||||
import { sqlEscaper } from 'common/libs/sqlUtils';
|
import { formatJsonForSqlWhere, sqlEscaper } from 'common/libs/sqlUtils';
|
||||||
import { ipcMain } from 'electron';
|
import { ipcMain } from 'electron';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as moment from 'moment';
|
import * as moment from 'moment';
|
||||||
@@ -233,9 +233,10 @@ export default (connections: Record<string, antares.Client>) => {
|
|||||||
|
|
||||||
for (const key in orgRow) {
|
for (const key in orgRow) {
|
||||||
if (typeof orgRow[key] === 'string')
|
if (typeof orgRow[key] === 'string')
|
||||||
orgRow[key] = `'${orgRow[key]}'`;
|
orgRow[key] = ` = '${orgRow[key]}'`;
|
||||||
|
else if (typeof orgRow[key] === 'object' && orgRow[key] !== null)
|
||||||
if (orgRow[key] === null)
|
orgRow[key] = formatJsonForSqlWhere(orgRow[key], connections[params.uid]._client);
|
||||||
|
else if (orgRow[key] === null)
|
||||||
orgRow[key] = `IS ${orgRow[key]}`;
|
orgRow[key] = `IS ${orgRow[key]}`;
|
||||||
else
|
else
|
||||||
orgRow[key] = `= ${orgRow[key]}`;
|
orgRow[key] = `= ${orgRow[key]}`;
|
||||||
|
@@ -81,7 +81,15 @@ export class ShortcutRegister {
|
|||||||
accelerator: key,
|
accelerator: key,
|
||||||
visible: isMenuVisible,
|
visible: isMenuVisible,
|
||||||
click: () => {
|
click: () => {
|
||||||
this._mainWindow.webContents.send(shortcut.event);
|
if (shortcut.isFunction) {
|
||||||
|
if (shortcut.event in this) {
|
||||||
|
type exporterMethods = 'setFullScreen' | 'setZoomIn' | 'setZoomOut' | 'setZoomReset';
|
||||||
|
this[shortcut.event as exporterMethods]();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
this._mainWindow.webContents.send(shortcut.event);
|
||||||
|
|
||||||
if (isDevelopment) console.log('LOCAL EVENT:', shortcut);
|
if (isDevelopment) console.log('LOCAL EVENT:', shortcut);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -121,6 +129,24 @@ export class ShortcutRegister {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setFullScreen () {
|
||||||
|
this._mainWindow.setFullScreen(!this._mainWindow.isFullScreen());
|
||||||
|
}
|
||||||
|
|
||||||
|
setZoomIn () {
|
||||||
|
const currentZoom = this._mainWindow.webContents.getZoomLevel();
|
||||||
|
this._mainWindow.webContents.setZoomLevel(currentZoom + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
setZoomOut () {
|
||||||
|
const currentZoom = this._mainWindow.webContents.getZoomLevel();
|
||||||
|
this._mainWindow.webContents.setZoomLevel(currentZoom - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
setZoomReset () {
|
||||||
|
this._mainWindow.webContents.setZoomLevel(0);
|
||||||
|
}
|
||||||
|
|
||||||
reload () {
|
reload () {
|
||||||
this.unregister();
|
this.unregister();
|
||||||
this.init();
|
this.init();
|
||||||
|
@@ -155,6 +155,7 @@ export class PostgreSQLClient extends BaseClient {
|
|||||||
host: this._params.host,
|
host: this._params.host,
|
||||||
port: this._params.port,
|
port: this._params.port,
|
||||||
user: this._params.user,
|
user: this._params.user,
|
||||||
|
connectionString: this._params.connectionString,
|
||||||
database: 'postgres' as string,
|
database: 'postgres' as string,
|
||||||
password: this._params.password,
|
password: this._params.password,
|
||||||
ssl: null as ConnectionOptions
|
ssl: null as ConnectionOptions
|
||||||
|
@@ -339,6 +339,8 @@ onMounted(() => {
|
|||||||
for (const field of props.fields) {
|
for (const field of props.fields) {
|
||||||
if (typeof props.rowToDuplicate[field.name] !== 'object')
|
if (typeof props.rowToDuplicate[field.name] !== 'object')
|
||||||
rowObj[field.name] = { value: props.rowToDuplicate[field.name] };
|
rowObj[field.name] = { value: props.rowToDuplicate[field.name] };
|
||||||
|
else if (field.type === 'JSON')
|
||||||
|
rowObj[field.name] = { value: JSON.stringify(props.rowToDuplicate[field.name]) };
|
||||||
|
|
||||||
if (field.autoIncrement || !!field.onUpdate)// Disable by default auto increment or "on update" fields
|
if (field.autoIncrement || !!field.onUpdate)// Disable by default auto increment or "on update" fields
|
||||||
fieldsToExclude.value = [...fieldsToExclude.value, field.name];
|
fieldsToExclude.value = [...fieldsToExclude.value, field.name];
|
||||||
|
@@ -42,7 +42,7 @@
|
|||||||
tabindex="0"
|
tabindex="0"
|
||||||
>
|
>
|
||||||
<div class="td py-1">
|
<div class="td py-1">
|
||||||
{{ t(shortcutEvents[shortcut.event].l18n, {param: shortcutEvents[shortcut.event].l18nParam}) }}
|
{{ t(shortcutEvents[shortcut.event].i18n, {param: shortcutEvents[shortcut.event].i18nParam}) }}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="td py-1"
|
class="td py-1"
|
||||||
@@ -167,7 +167,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<template #body>
|
<template #body>
|
||||||
<div class="mb-2">
|
<div class="mb-2">
|
||||||
{{ t('general.deleteConfirm') }} <b>{{ t(shortcutEvents[shortcutToDelete.event].l18n, {param: shortcutEvents[shortcutToDelete.event].l18nParam}) }} (<span v-html="parseKeys(shortcutToDelete.keys)" />)</b>?
|
{{ t('general.deleteConfirm') }} <b>{{ t(shortcutEvents[shortcutToDelete.event].i18n, {param: shortcutEvents[shortcutToDelete.event].i18nParam}) }} (<span v-html="parseKeys(shortcutToDelete.keys)" />)</b>?
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</ConfirmModal>
|
</ConfirmModal>
|
||||||
@@ -233,7 +233,7 @@ const { shortcuts } = storeToRefs(settingsStore);
|
|||||||
const eventOptions = computed(() => {
|
const eventOptions = computed(() => {
|
||||||
return Object.keys(shortcutEvents)
|
return Object.keys(shortcutEvents)
|
||||||
.map(key => {
|
.map(key => {
|
||||||
return { value: key, label: t(shortcutEvents[key].l18n, { param: shortcutEvents[key].l18nParam }) };
|
return { value: key, label: t(shortcutEvents[key].i18n, { param: shortcutEvents[key].i18nParam }) };
|
||||||
})
|
})
|
||||||
.sort((a, b) => {
|
.sort((a, b) => {
|
||||||
if (a.label < b.label) return -1;
|
if (a.label < b.label) return -1;
|
||||||
|
@@ -67,7 +67,7 @@
|
|||||||
<div class="column col-7 col-sm-12">
|
<div class="column col-7 col-sm-12">
|
||||||
<input
|
<input
|
||||||
ref="pgString"
|
ref="pgString"
|
||||||
v-model="connection.pgConnString"
|
v-model="connection.connString"
|
||||||
class="form-input"
|
class="form-input"
|
||||||
type="text"
|
type="text"
|
||||||
>
|
>
|
||||||
@@ -502,8 +502,8 @@ const connection = ref({
|
|||||||
sshKey: '',
|
sshKey: '',
|
||||||
sshPort: 22,
|
sshPort: 22,
|
||||||
sshKeepAliveInterval: 1800,
|
sshKeepAliveInterval: 1800,
|
||||||
pgConnString: ''
|
connString: ''
|
||||||
}) as Ref<ConnectionParams & { pgConnString: string }>;
|
}) as Ref<ConnectionParams & { connString: string }>;
|
||||||
|
|
||||||
const firstInput: Ref<HTMLInputElement> = ref(null);
|
const firstInput: Ref<HTMLInputElement> = ref(null);
|
||||||
const isConnecting = ref(false);
|
const isConnecting = ref(false);
|
||||||
|
@@ -68,7 +68,7 @@
|
|||||||
<div class="column col-7 col-sm-12">
|
<div class="column col-7 col-sm-12">
|
||||||
<input
|
<input
|
||||||
ref="pgString"
|
ref="pgString"
|
||||||
v-model="localConnection.pgConnString"
|
v-model="localConnection.connString"
|
||||||
class="form-input"
|
class="form-input"
|
||||||
type="text"
|
type="text"
|
||||||
>
|
>
|
||||||
@@ -502,7 +502,7 @@ const clients = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
const firstInput: Ref<HTMLInputElement> = ref(null);
|
const firstInput: Ref<HTMLInputElement> = ref(null);
|
||||||
const localConnection: Ref<ConnectionParams & { pgConnString: string }> = ref(null);
|
const localConnection: Ref<ConnectionParams & { connString: string }> = ref(null);
|
||||||
const isConnecting = ref(false);
|
const isConnecting = ref(false);
|
||||||
const isTesting = ref(false);
|
const isTesting = ref(false);
|
||||||
const isAsking = ref(false);
|
const isAsking = ref(false);
|
||||||
|
@@ -477,8 +477,12 @@ const searchTerm = computed(() => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const filteredTables = computed(() => {
|
const filteredTables = computed(() => {
|
||||||
if (props.searchMethod === 'elements')
|
if (props.searchMethod === 'elements') {
|
||||||
return props.database.tables.filter(table => table.name.search(searchTerm.value) >= 0 && table.type === 'table');
|
const searchTermLower = searchTerm.value.toLowerCase();
|
||||||
|
return props.database.tables.filter(table =>
|
||||||
|
table.name.toLowerCase().includes(searchTermLower) && table.type === 'table'
|
||||||
|
);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
return props.database.tables;
|
return props.database.tables;
|
||||||
});
|
});
|
||||||
|
@@ -73,6 +73,7 @@
|
|||||||
<span>{{ t('database.foreignKeys') }}</span>
|
<span>{{ t('database.foreignKeys') }}</span>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
|
v-if="workspace.customizations.tableCheck"
|
||||||
class="btn btn-dark btn-sm ml-2 mr-0"
|
class="btn btn-dark btn-sm ml-2 mr-0"
|
||||||
:disabled="isSaving || !localFields.length"
|
:disabled="isSaving || !localFields.length"
|
||||||
:title="t('database.manageTableChecks')"
|
:title="t('database.manageTableChecks')"
|
||||||
|
@@ -73,6 +73,7 @@
|
|||||||
<span>{{ t('database.foreignKeys') }}</span>
|
<span>{{ t('database.foreignKeys') }}</span>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
|
v-if="workspace.customizations.tableCheck"
|
||||||
class="btn btn-dark btn-sm ml-2 mr-0"
|
class="btn btn-dark btn-sm ml-2 mr-0"
|
||||||
:disabled="isSaving"
|
:disabled="isSaving"
|
||||||
:title="t('database.manageTableChecks')"
|
:title="t('database.manageTableChecks')"
|
||||||
|
@@ -745,7 +745,7 @@ const saveFileAs = async () => {
|
|||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
const result: any = await Application.showSaveDialog({
|
const result: any = await Application.showSaveDialog({
|
||||||
filters: [{ name: 'SQL', extensions: ['sql'] }],
|
filters: [{ name: 'SQL', extensions: ['sql'] }],
|
||||||
defaultPath: (!queryName.value.includes('.sql') ? `${queryName.value}.sql` :queryName.value) || 'query.sql'
|
defaultPath: (queryName.value !== undefined && !queryName.value.includes('.sql') ? `${queryName.value}.sql` : queryName.value) || 'query.sql'
|
||||||
});
|
});
|
||||||
|
|
||||||
if (result && !result.canceled) {
|
if (result && !result.canceled) {
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
:key="i"
|
:key="i"
|
||||||
class="mb-4"
|
class="mb-4"
|
||||||
>
|
>
|
||||||
{{ t(shortcutEvents[shortcut.event].l18n, {param: shortcutEvents[shortcut.event].l18nParam}) }}
|
{{ t(shortcutEvents[shortcut.event].i18n, {param: shortcutEvents[shortcut.event].i18nParam}) }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="column col-16">
|
<div class="column col-16">
|
||||||
|
@@ -284,7 +284,7 @@ const settingsStore = useSettingsStore();
|
|||||||
const consoleStore = useConsoleStore();
|
const consoleStore = useConsoleStore();
|
||||||
const { getWorkspace } = useWorkspacesStore();
|
const { getWorkspace } = useWorkspacesStore();
|
||||||
|
|
||||||
const { dataTabLimit: pageSize, defaultCopyType } = storeToRefs(settingsStore);
|
const { /* dataTabLimit: pageSize, */ defaultCopyType } = storeToRefs(settingsStore);
|
||||||
|
|
||||||
const { consoleHeight } = storeToRefs(consoleStore);
|
const { consoleHeight } = storeToRefs(consoleStore);
|
||||||
|
|
||||||
@@ -357,37 +357,37 @@ const isSortable = computed(() => {
|
|||||||
return fields.value.every(field => field.name);
|
return fields.value.every(field => field.name);
|
||||||
});
|
});
|
||||||
|
|
||||||
const isHardSort = computed(() => {
|
// const isHardSort = computed(() => {
|
||||||
return props.mode === 'table' && localResults.value.length === pageSize.value;
|
// return props.mode === 'table' && localResults.value.length === pageSize.value;
|
||||||
});
|
// });
|
||||||
|
|
||||||
const sortedResults = computed(() => {
|
const sortedResults = computed(() => {
|
||||||
if (currentSort.value[resultsetIndex.value] && !isHardSort.value) {
|
// if (currentSort.value[resultsetIndex.value] && !isHardSort.value) {
|
||||||
const sortObj = currentSort.value[resultsetIndex.value];
|
// const sortObj = currentSort.value[resultsetIndex.value];
|
||||||
|
|
||||||
return [...localResults.value].sort((a: any, b: any) => {
|
// return [...localResults.value].sort((a: any, b: any) => {
|
||||||
const modifier = sortObj.dir === 'desc' ? -1 : 1;
|
// const modifier = sortObj.dir === 'desc' ? -1 : 1;
|
||||||
let valA = a[sortObj.field];
|
// let valA = a[sortObj.field];
|
||||||
let valB = b[sortObj.field];
|
// let valB = b[sortObj.field];
|
||||||
|
|
||||||
// Handle null values
|
// // Handle null values
|
||||||
if (valA === null && valB !== null) return sortObj.dir === 'asc' ? -1 : 1;
|
// if (valA === null && valB !== null) return sortObj.dir === 'asc' ? -1 : 1;
|
||||||
if (valA !== null && valB === null) return sortObj.dir === 'asc' ? 1 : -1;
|
// if (valA !== null && valB === null) return sortObj.dir === 'asc' ? 1 : -1;
|
||||||
if (valA === null && valB === null) return 0;
|
// if (valA === null && valB === null) return 0;
|
||||||
|
|
||||||
valA = typeof valA === 'string' ? valA.toLowerCase() : valA;
|
// valA = typeof valA === 'string' ? valA.toLowerCase() : valA;
|
||||||
valB = typeof valB === 'string' ? valB.toLowerCase() : valB;
|
// valB = typeof valB === 'string' ? valB.toLowerCase() : valB;
|
||||||
|
|
||||||
if (typeof valA !== 'number' && !isNaN(valA)) valA = String(Number(valA));
|
// if (typeof valA !== 'number' && !isNaN(valA)) valA = String(Number(valA));
|
||||||
if (typeof valB !== 'number' && !isNaN(valB)) valB = String(Number(valB));
|
// if (typeof valB !== 'number' && !isNaN(valB)) valB = String(Number(valB));
|
||||||
|
|
||||||
if (valA < valB) return -1 * modifier;
|
// if (valA < valB) return -1 * modifier;
|
||||||
if (valA > valB) return 1 * modifier;
|
// if (valA > valB) return 1 * modifier;
|
||||||
return 0;
|
// return 0;
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
else
|
// else
|
||||||
return localResults.value;
|
return localResults.value;
|
||||||
});
|
});
|
||||||
|
|
||||||
const resultsWithRows = computed(() => props.results.filter(result => result.rows.length));
|
const resultsWithRows = computed(() => props.results.filter(result => result.rows.length));
|
||||||
@@ -538,6 +538,7 @@ const closeContext = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const showDeleteConfirmModal = (e: any) => {
|
const showDeleteConfirmModal = (e: any) => {
|
||||||
|
if (e.code !== 'Delete') return;
|
||||||
if (e && e.path && ['INPUT', 'TEXTAREA', 'SELECT'].includes(e.path[0].tagName))
|
if (e && e.path && ['INPUT', 'TEXTAREA', 'SELECT'].includes(e.path[0].tagName))
|
||||||
return;
|
return;
|
||||||
if (selectedRows.value.length === 0) return;
|
if (selectedRows.value.length === 0) return;
|
||||||
@@ -827,12 +828,12 @@ const sort = (field: TableField) => {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isHardSort.value) {
|
// if (isHardSort.value) {
|
||||||
emit('hard-sort', {
|
emit('hard-sort', {
|
||||||
field: currentSort.value[resultsetIndex.value].field,
|
field: currentSort.value[resultsetIndex.value].field,
|
||||||
dir: currentSort.value[resultsetIndex.value].dir
|
dir: currentSort.value[resultsetIndex.value].dir
|
||||||
});
|
});
|
||||||
}
|
// }
|
||||||
};
|
};
|
||||||
|
|
||||||
const resetSort = () => {
|
const resetSort = () => {
|
||||||
|
@@ -416,7 +416,11 @@ export const enUS = {
|
|||||||
openNotes: 'Open notes',
|
openNotes: 'Open notes',
|
||||||
debugConsole: 'Debug console', // <- console tab name
|
debugConsole: 'Debug console', // <- console tab name
|
||||||
executedQueries: 'Executed queries', // <- console tab name
|
executedQueries: 'Executed queries', // <- console tab name
|
||||||
sizeLimitError: 'Maximum size of {size} exceeded'
|
sizeLimitError: 'Maximum size of {size} exceeded',
|
||||||
|
fullScreen: 'Full screen',
|
||||||
|
zoomIn: 'Zoom in',
|
||||||
|
zoomOut: 'Zoom out',
|
||||||
|
zoomReset: 'Reset zoom'
|
||||||
},
|
},
|
||||||
faker: { // Faker.js methods, used in random generated content
|
faker: { // Faker.js methods, used in random generated content
|
||||||
address: 'Address',
|
address: 'Address',
|
||||||
|
@@ -1,5 +1,14 @@
|
|||||||
|
/**
|
||||||
|
* [TRANSLATION UPDATE HELPER]
|
||||||
|
* - Open a terminal in antares folder and run `npm run translation:check short-code` replacing short-code with the one you are updating.
|
||||||
|
* - The command will output which terms are missing or not translated from english.
|
||||||
|
* - Open antares folder with your editor of choice.
|
||||||
|
* - Go to antares/src/renderer/i18n/ and open the locale file you want to translate.
|
||||||
|
* - Add and translate missing terms and consider whether to translate untranslated terms.
|
||||||
|
*/
|
||||||
|
|
||||||
export const esES = {
|
export const esES = {
|
||||||
general: {
|
general: { // General purpose terms
|
||||||
edit: 'Editar',
|
edit: 'Editar',
|
||||||
save: 'Guardar',
|
save: 'Guardar',
|
||||||
close: 'Cerrar',
|
close: 'Cerrar',
|
||||||
@@ -8,6 +17,7 @@ export const esES = {
|
|||||||
cancel: 'Cancelar',
|
cancel: 'Cancelar',
|
||||||
send: 'Enviar',
|
send: 'Enviar',
|
||||||
refresh: 'Refrescar',
|
refresh: 'Refrescar',
|
||||||
|
autoRefresh: 'Auto refresco',
|
||||||
version: 'Versión',
|
version: 'Versión',
|
||||||
donate: 'Donar',
|
donate: 'Donar',
|
||||||
run: 'Ejecutar',
|
run: 'Ejecutar',
|
||||||
@@ -18,12 +28,62 @@ export const esES = {
|
|||||||
add: 'Añadir',
|
add: 'Añadir',
|
||||||
data: 'Datos',
|
data: 'Datos',
|
||||||
properties: 'Propiedades',
|
properties: 'Propiedades',
|
||||||
|
name: 'Nombre',
|
||||||
|
clear: 'Limpiar',
|
||||||
|
options: 'Opciones',
|
||||||
insert: 'Insertar',
|
insert: 'Insertar',
|
||||||
|
discard: 'Descartar',
|
||||||
|
stay: 'Mantener',
|
||||||
|
author: 'Autor',
|
||||||
|
upload: 'Subir',
|
||||||
|
browse: 'Navegar',
|
||||||
|
content: 'Contenido',
|
||||||
|
cut: 'Cortar',
|
||||||
|
copy: 'Copiar',
|
||||||
|
paste: 'Pegar',
|
||||||
|
duplicate: 'Duplicar',
|
||||||
|
tools: 'Herramientas',
|
||||||
seconds: 'Segundos',
|
seconds: 'Segundos',
|
||||||
deleteConfirm: 'Confirmas la cancelación de',
|
all: 'Todos',
|
||||||
uploadFile: 'Cargar fichero'
|
new: 'Nuevo',
|
||||||
|
select: 'Seleccionar',
|
||||||
|
change: 'Cambiar',
|
||||||
|
include: 'Agregar',
|
||||||
|
includes: 'Agregados',
|
||||||
|
completed: 'Completado',
|
||||||
|
aborted: 'Cancelado',
|
||||||
|
disabled: 'Deshabilitado',
|
||||||
|
enable: 'Habilitar',
|
||||||
|
disable: 'Desabilitar',
|
||||||
|
contributors: 'Colaboradores',
|
||||||
|
pin: 'Fijar',
|
||||||
|
unpin: 'Desfijar',
|
||||||
|
folder: 'Carpeta | Carpetas',
|
||||||
|
none: 'Ninguno',
|
||||||
|
singleQuote: 'Comillas simples',
|
||||||
|
doubleQuote: 'Comillas dobles',
|
||||||
|
deleteConfirm: 'Confirmar la cancelación de',
|
||||||
|
uploadFile: 'Cargar fichero',
|
||||||
|
format: 'Formato', // Format code
|
||||||
|
history: 'Histórico',
|
||||||
|
filter: 'Filtro',
|
||||||
|
manualValue: 'Valor manual',
|
||||||
|
selectAll: 'Seleccionar todo',
|
||||||
|
pageNumber: 'Número de página',
|
||||||
|
directoryPath: 'Ruta de directorio',
|
||||||
|
actionSuccessful: '{action} exitoso',
|
||||||
|
outputFormat: 'Formato de salida',
|
||||||
|
singleFile: 'Fichero {ext} único',
|
||||||
|
zipCompressedFile: 'Fichero ZIP {ext} comprimido',
|
||||||
|
copyName: 'Copiar nombre',
|
||||||
|
search: 'Búsqueda',
|
||||||
|
title: 'Título',
|
||||||
|
archive: 'Archivo', // verb
|
||||||
|
undo: 'Deshacer',
|
||||||
|
moveTo: 'Mover a'
|
||||||
},
|
},
|
||||||
connection: {
|
connection: { // Database connection
|
||||||
|
connection: 'Conexión',
|
||||||
connectionName: 'Nombre de la conexión',
|
connectionName: 'Nombre de la conexión',
|
||||||
client: 'Cliente',
|
client: 'Cliente',
|
||||||
hostName: 'Servidor',
|
hostName: 'Servidor',
|
||||||
@@ -35,6 +95,17 @@ export const esES = {
|
|||||||
connected: 'Conectado',
|
connected: 'Conectado',
|
||||||
disconnect: 'Desconectar',
|
disconnect: 'Desconectar',
|
||||||
disconnected: 'Desconectado',
|
disconnected: 'Desconectado',
|
||||||
|
ssl: 'SSL',
|
||||||
|
enableSsl: 'Habilitar SSL',
|
||||||
|
privateKey: 'Clave privada',
|
||||||
|
certificate: 'Certificado',
|
||||||
|
caCertificate: 'Certificado CA',
|
||||||
|
ciphers: 'Cifrado',
|
||||||
|
untrustedConnection: 'Conexión no confiable',
|
||||||
|
passphrase: 'Frase de paso',
|
||||||
|
sshTunnel: 'Túnel SSH',
|
||||||
|
enableSsh: 'Habilitar SSH',
|
||||||
|
connectionString: 'Cadena de conexión',
|
||||||
addConnection: 'Añadir conexión',
|
addConnection: 'Añadir conexión',
|
||||||
createConnection: 'Crear conexión',
|
createConnection: 'Crear conexión',
|
||||||
createNewConnection: 'Crear nueva conexión',
|
createNewConnection: 'Crear nueva conexión',
|
||||||
@@ -42,26 +113,216 @@ export const esES = {
|
|||||||
testConnection: 'Comprobar conexión',
|
testConnection: 'Comprobar conexión',
|
||||||
editConnection: 'Editar conexión',
|
editConnection: 'Editar conexión',
|
||||||
deleteConnection: 'Eliminar conexión',
|
deleteConnection: 'Eliminar conexión',
|
||||||
connectionSuccessfullyMade: 'Conexión realizada correctamente!'
|
connectionSuccessfullyMade: 'Conexión realizada correctamente!',
|
||||||
|
readOnlyMode: 'Solo lectura',
|
||||||
|
allConnections: 'Todas las conexiones',
|
||||||
|
searchForConnections: 'Buscar por conexiones',
|
||||||
|
keepAliveInterval: 'Tiempo de mantenimiento de conexión',
|
||||||
|
singleConnection: 'Conexión única'
|
||||||
},
|
},
|
||||||
database: {
|
database: { // Database related terms
|
||||||
schema: 'Esquema',
|
schema: 'Esquema',
|
||||||
type: 'Tipo',
|
type: 'Tipo',
|
||||||
unableEditFieldWithoutPrimary: 'No se puede editar una campo sin Llave Primaria en el registro',
|
insert: 'Insertar',
|
||||||
editCell: 'Editar celda',
|
indexes: 'Índices',
|
||||||
|
foreignKeys: 'Claves Foráneas',
|
||||||
|
tablaChecks: 'Validación de tabla',
|
||||||
|
length: 'Longitud',
|
||||||
|
unsigned: 'Sin signo',
|
||||||
|
default: 'Por defecto',
|
||||||
|
comment: 'Comentario',
|
||||||
|
key: 'Clave | Claves',
|
||||||
|
order: 'Orden',
|
||||||
|
expression: 'Expresión',
|
||||||
|
autoIncrement: 'Autoincremental',
|
||||||
|
engine: 'Motor',
|
||||||
|
field: 'Campo | Campos',
|
||||||
|
approximately: 'Aproximadamente',
|
||||||
|
total: 'Total',
|
||||||
|
table: 'Tabla | Tablas',
|
||||||
|
view: 'Vista | Vistas',
|
||||||
|
materializedview: 'Vista Materializada | Vistas Materializadas',
|
||||||
|
definer: 'Definidor',
|
||||||
|
algorithm: 'Algoritmo',
|
||||||
|
trigger: 'Disparador | Disparadores',
|
||||||
|
storedRoutine: 'Procedimiento almacenado | Procedimientos almacenados',
|
||||||
|
scheduler: 'Planificador | Planificadores',
|
||||||
|
event: 'Evento',
|
||||||
|
parameters: 'Parámetros',
|
||||||
|
function: 'Función | Funciones',
|
||||||
|
deterministic: 'Determinístico',
|
||||||
|
context: 'Contexto',
|
||||||
|
export: 'Exportar',
|
||||||
|
import: 'Importar',
|
||||||
|
returns: 'Retorno',
|
||||||
|
timing: 'Timing',
|
||||||
|
state: 'Estado',
|
||||||
|
execution: 'Ejecución',
|
||||||
|
starts: 'Inicio',
|
||||||
|
ends: 'Final',
|
||||||
|
variables: 'Variables',
|
||||||
|
processes: 'Procesos',
|
||||||
|
database: 'Base de Datos',
|
||||||
|
array: 'Tupla',
|
||||||
|
structure: 'Estructura',
|
||||||
|
row: 'Fila | Filas',
|
||||||
|
cell: 'Celda | Celdas',
|
||||||
|
triggerFunction: 'Función disparadora | Funciones disparadoras',
|
||||||
|
routine: 'Rutina | Rutinas',
|
||||||
|
drop: 'Abandonar',
|
||||||
|
commit: 'Commit',
|
||||||
|
rollback: 'Marcha atrás',
|
||||||
|
ddl: 'DDL',
|
||||||
|
collation: 'Colación',
|
||||||
|
resultsTable: 'Tabla de resultados',
|
||||||
|
unableEditFieldWithoutPrimary: 'No es posible modificar un campo sin una clave primaria en el set de resultados',
|
||||||
|
editCell: 'Modificar celda',
|
||||||
deleteRows: 'Eliminar fila | Eliminar {count} filas',
|
deleteRows: 'Eliminar fila | Eliminar {count} filas',
|
||||||
confirmToDeleteRows: '¿Quiere realmente eliminar una fila? | ¿Quiere realmente eliminar {count} filas?',
|
confirmToDeleteRows: '¿Quiere realmente eliminar una fila? | ¿Quiere realmente eliminar {count} filas?',
|
||||||
addNewRow: 'Añadir nueva fila',
|
addNewRow: 'Añadir nueva fila',
|
||||||
numberOfInserts: 'Numero de inserciones',
|
numberOfInserts: 'Número de inserciones',
|
||||||
affectedRows: 'Filas afectadas'
|
affectedRows: 'Líneas afectadas',
|
||||||
|
createNewDatabase: 'Crear nueva Base de Datos',
|
||||||
|
databaseName: 'Nombre de Base de Datos',
|
||||||
|
serverDefault: 'Servidor por defecto',
|
||||||
|
deleteDatabase: 'Eliminar Base de Datos',
|
||||||
|
editDatabase: 'Modificar Base de Datos',
|
||||||
|
clearChanges: 'Deshacer cambios',
|
||||||
|
addNewField: 'Añadir nuevo campo',
|
||||||
|
manageIndexes: 'Administrar índices',
|
||||||
|
manageForeignKeys: 'Administrar claves foráneas',
|
||||||
|
manageTableChecks: 'Administrar validaciones de tabla',
|
||||||
|
allowNull: 'Permitir NULL',
|
||||||
|
zeroFill: 'Rellenar con ceros',
|
||||||
|
customValue: 'Valor predeterminado',
|
||||||
|
onUpdate: 'On UPDATE',
|
||||||
|
deleteField: 'Eliminar campo',
|
||||||
|
createNewIndex: 'Crear nuevo índice',
|
||||||
|
createNewCheck: 'Crear nueva verificación',
|
||||||
|
checkClause: 'Comprobar cláusula',
|
||||||
|
addToIndex: 'Añadir al índice',
|
||||||
|
createNewTable: 'Crear nueva tabla',
|
||||||
|
emptyTable: 'Tabla vacía',
|
||||||
|
duplicateTable: 'Duplicar tabla',
|
||||||
|
deleteTable: 'Eliminar tabla',
|
||||||
|
exportTable: 'Exportar tabla',
|
||||||
|
emptyConfirm: 'Confirmar vaciado',
|
||||||
|
thereAreNoIndexes: 'No hay índices',
|
||||||
|
thereAreNoForeign: 'No hay claves foráneas',
|
||||||
|
thereAreNoTableChecks: 'No hay validaciones de tabla',
|
||||||
|
createNewForeign: 'Crear nueva clave foránea',
|
||||||
|
referenceTable: 'Ref. tabla',
|
||||||
|
referenceField: 'Ref. campo',
|
||||||
|
foreignFields: 'Campos foráneos',
|
||||||
|
invalidDefault: 'Valor por defecto no válido',
|
||||||
|
onDelete: 'On DELETE',
|
||||||
|
selectStatement: 'Declaración SELECT',
|
||||||
|
triggerStatement: 'Declaración TRIGGER',
|
||||||
|
sqlSecurity: 'Seguridad SQL',
|
||||||
|
updateOption: 'Opción UPDATE',
|
||||||
|
deleteView: 'Eliminar vista',
|
||||||
|
createNewView: 'Crear nueva vista',
|
||||||
|
createNewMaterializedView: 'Crear nueva vista materializada',
|
||||||
|
deleteTrigger: 'Eliminar disparador',
|
||||||
|
createNewTrigger: 'Crear nuevo disparador',
|
||||||
|
currentUser: 'Usuario actual',
|
||||||
|
routineBody: 'Cuerpo de rutina',
|
||||||
|
dataAccess: 'Acceso a datos',
|
||||||
|
thereAreNoParameters: 'No hay parámetros',
|
||||||
|
createNewParameter: 'Crear nuevo parámetro',
|
||||||
|
createNewRoutine: 'Crear nuevo procedimiento almacenado',
|
||||||
|
deleteRoutine: 'Eliminar procedimiento almacenado',
|
||||||
|
functionBody: 'Cuerpo de función',
|
||||||
|
createNewFunction: 'Crear nueva función',
|
||||||
|
deleteFunction: 'Eliminar función',
|
||||||
|
schedulerBody: 'Cuerpo de planificador',
|
||||||
|
createNewScheduler: 'Crear nuevo planificador',
|
||||||
|
deleteScheduler: 'Eliminar planificador',
|
||||||
|
preserveOnCompletion: 'Mantener al finalizar',
|
||||||
|
tableFiller: 'Rellenador de tabla',
|
||||||
|
fakeDataLanguage: 'Lenguaje de datos dummy',
|
||||||
|
queryDuration: 'Duración de la consulta',
|
||||||
|
setNull: 'Establecer a NULL',
|
||||||
|
processesList: 'Lista de procesos',
|
||||||
|
processInfo: 'Información de proceso',
|
||||||
|
manageUsers: 'Administrar usuarios',
|
||||||
|
createNewSchema: 'Crear nuevo esquema',
|
||||||
|
schemaName: 'Nombre de esquema',
|
||||||
|
editSchema: 'Modificar esquema',
|
||||||
|
deleteSchema: 'Eliminar esquema',
|
||||||
|
noSchema: 'No hay esquemas',
|
||||||
|
runQuery: 'Ejecutar consulta',
|
||||||
|
thereAreNoTableFields: 'No hay campos en la tabla',
|
||||||
|
newTable: 'Nueva tabla',
|
||||||
|
newView: 'Nueva vista',
|
||||||
|
newMaterializedView: 'Nueva vista materializada',
|
||||||
|
newTrigger: 'Nuevo disparador',
|
||||||
|
newRoutine: 'Nueva rutina',
|
||||||
|
newFunction: 'Nueva función',
|
||||||
|
newScheduler: 'Nuevo planificador',
|
||||||
|
newTriggerFunction: 'Nueva función de disparador',
|
||||||
|
thereAreNoQueriesYet: 'No quedan mas consultas',
|
||||||
|
searchForQueries: 'Buscar consultas',
|
||||||
|
killProcess: 'Matar proceso',
|
||||||
|
exportSchema: 'Exportar esquema',
|
||||||
|
importSchema: 'Importar esquema',
|
||||||
|
newInsertStmtEvery: 'Nueva declaración INSERT',
|
||||||
|
processingTableExport: 'Procesando {table}',
|
||||||
|
fetchingTableExport: 'Obteniendo datos de {table}',
|
||||||
|
writingTableExport: 'Escribiendo datos de {table}',
|
||||||
|
checkAllTables: 'Verificar todas las tablas',
|
||||||
|
uncheckAllTables: 'Desmarcar todas las tablas',
|
||||||
|
killQuery: 'Matar consulta',
|
||||||
|
insertRow: 'Añadir fila | Añadir filas',
|
||||||
|
commitMode: 'Modo de Commit',
|
||||||
|
autoCommit: 'Automático',
|
||||||
|
manualCommit: 'Manual',
|
||||||
|
importQueryErrors: 'Atención: {n} de error encontrado | Atención: {n} errores encontrados',
|
||||||
|
executedQueries: '{n} consulta ejecutada | {n} consultas ejecutadas',
|
||||||
|
disableFKChecks: 'Deshabilitar comprobación de claves foráneas',
|
||||||
|
formatQuery: 'Formato de consulta',
|
||||||
|
queryHistory: 'Histórico de consultas',
|
||||||
|
clearQuery: 'Limpiar consulta',
|
||||||
|
fillCell: 'Rellenar celda',
|
||||||
|
executeSelectedQuery: 'Ejecutar consulta seleccionada',
|
||||||
|
noResultsPresent: 'No se obtuvieron resultados',
|
||||||
|
sqlExportOptions: 'Opciones de exportación de SQL',
|
||||||
|
targetTable: 'Tabla objetivo',
|
||||||
|
switchDatabase: 'Cambiar de Base de datos',
|
||||||
|
searchForElements: 'Buscar por elementos',
|
||||||
|
searchForSchemas: 'Buscar por esquemas',
|
||||||
|
savedQueries: 'Consultas almacenadas'
|
||||||
},
|
},
|
||||||
application: {
|
application: {
|
||||||
settings: 'Configuración',
|
settings: 'Configuración',
|
||||||
|
console: 'Consola',
|
||||||
general: 'General',
|
general: 'General',
|
||||||
themes: 'Temas',
|
themes: 'Temas',
|
||||||
update: 'Actualizar',
|
update: 'Actualizar',
|
||||||
about: 'Sobre',
|
about: 'Sobre',
|
||||||
language: 'Idioma',
|
language: 'Idioma',
|
||||||
|
shortcuts: 'Atajos',
|
||||||
|
key: 'Tecla | Teclas', // Keyboard key
|
||||||
|
event: 'Evento',
|
||||||
|
light: 'Claro',
|
||||||
|
dark: 'Oscuro',
|
||||||
|
autoCompletion: 'Autocompletado',
|
||||||
|
application: 'Aplicación',
|
||||||
|
editor: 'Editor',
|
||||||
|
changelog: 'Histórico de cambios',
|
||||||
|
small: 'Pequeño',
|
||||||
|
medium: 'Mediano',
|
||||||
|
large: 'Grande',
|
||||||
|
appearance: 'Apariencia',
|
||||||
|
color: 'Color',
|
||||||
|
label: 'Etiqueta',
|
||||||
|
icon: 'Icono',
|
||||||
|
customIcon: 'Icono personalizado',
|
||||||
|
fileName: 'Nombre de fichero',
|
||||||
|
choseFile: 'Elegir fichero',
|
||||||
|
data: 'Datos',
|
||||||
|
password: 'Contraseña',
|
||||||
|
required: 'Requerido',
|
||||||
madeWithJS: 'Hecho con 💛 y JavaScript!',
|
madeWithJS: 'Hecho con 💛 y JavaScript!',
|
||||||
checkForUpdates: 'Comprobar actualizaciones',
|
checkForUpdates: 'Comprobar actualizaciones',
|
||||||
noUpdatesAvailable: 'No hay actualizaciones',
|
noUpdatesAvailable: 'No hay actualizaciones',
|
||||||
@@ -71,7 +332,255 @@ export const esES = {
|
|||||||
downloadingUpdate: 'Descargando actualización',
|
downloadingUpdate: 'Descargando actualización',
|
||||||
updateDownloaded: 'Descargada actualización',
|
updateDownloaded: 'Descargada actualización',
|
||||||
restartToInstall: 'Reiniciar Antares para instalar',
|
restartToInstall: 'Reiniciar Antares para instalar',
|
||||||
|
includeBetaUpdates: 'Incluir actualizaciones en fase beta',
|
||||||
notificationsTimeout: 'Tiempo de espera',
|
notificationsTimeout: 'Tiempo de espera',
|
||||||
openNewTab: 'Abrir nueva pestaña'
|
openNewTab: 'Abrir nueva pestaña',
|
||||||
|
unsavedChanges: 'Cambios sin guardar',
|
||||||
|
discardUnsavedChanges: 'Tiene algunos cambios sin guardar. Al cerrar esta pestaña, serán descartados.',
|
||||||
|
applicationTheme: 'Tema de la Aplicación',
|
||||||
|
editorTheme: 'Editor de Tema',
|
||||||
|
wrapLongLines: 'Mantener lineas largas',
|
||||||
|
markdownSupported: 'Markdown soportado',
|
||||||
|
plantATree: 'Planta un arbol',
|
||||||
|
dataTabPageSize: 'Resultados por página',
|
||||||
|
noOpenTabs: 'No hay pestañas abiertas. Navega por la barra de la izquierda o:',
|
||||||
|
restorePreviousSession: 'Restablecer la sesión anterior',
|
||||||
|
closeTab: 'Cerrar pestaña',
|
||||||
|
goToDownloadPage: 'Ir a la página de descargas',
|
||||||
|
disableBlur: 'Deshabilitar opacidad',
|
||||||
|
missingOrIncompleteTranslation: '¿No hay traducción o hay algo incorrecto?',
|
||||||
|
findOutHowToContribute: 'Mira como puedes contribuir',
|
||||||
|
reportABug: 'Informar de un problema',
|
||||||
|
nextTab: 'Siguiente pestaña',
|
||||||
|
previousTab: 'Anterior pestaña',
|
||||||
|
selectTabNumber: 'Selecciona numero de pestaña {param}',
|
||||||
|
toggleConsole: 'Alternar vista de consola',
|
||||||
|
addShortcut: 'Añadir atajo',
|
||||||
|
editShortcut: 'Modificar atajo',
|
||||||
|
deleteShortcut: 'Eliminar atajo',
|
||||||
|
restoreDefaults: 'Restablecer valores por defecto',
|
||||||
|
restoreDefaultsQuestion: '¿Está seguro que quiere establecer los valores por defecto?',
|
||||||
|
registerAShortcut: 'Registrar un atajo',
|
||||||
|
invalidShortcutMessage: 'Combinación no válida, por favor intente otra',
|
||||||
|
shortcutAlreadyExists: 'El atajo ya existe',
|
||||||
|
saveContent: 'Guardar contenido',
|
||||||
|
openAllConnections: 'Abrir todas las conexiones',
|
||||||
|
openSettings: 'Abrir configuración',
|
||||||
|
runOrReload: 'Ejecutar o recargar',
|
||||||
|
openFilter: 'Abrir filtro',
|
||||||
|
nextResultsPage: 'Siguiente pagina de resultados',
|
||||||
|
previousResultsPage: 'Anterior página de resultados',
|
||||||
|
editFolder: 'Modificar carpeta',
|
||||||
|
folderName: 'Nombre de carpeta',
|
||||||
|
deleteFolder: 'Eliminar carpeta',
|
||||||
|
newFolder: 'Crear nueva carpeta',
|
||||||
|
outOfFolder: 'Fuera de la carpeta',
|
||||||
|
editConnectionAppearance: 'Modificar apariencia de conexión',
|
||||||
|
defaultCopyType: 'Default copy type',
|
||||||
|
showTableSize: 'Mostrar tamaño de tabla en la barra lateral',
|
||||||
|
showTableSizeDescription: 'Solo para MySQL/MariaDB. Habilitar esta opción puede afectar al rendimiento en esquemas con muchas tablas.',
|
||||||
|
switchSearchMethod: 'Switch search method',
|
||||||
|
phpArray: 'Array de PHP',
|
||||||
|
closeAllTabs: 'Cerrar todas las pestañas',
|
||||||
|
closeOtherTabs: 'Cerrar las otras pestañas',
|
||||||
|
closeTabsToLeft: 'Cerrar las pestañas a la izquierda',
|
||||||
|
closeTabsToRight: 'Cerrar las pestañas a la derecha',
|
||||||
|
csvFieldDelimiter: 'Delimitador de campos',
|
||||||
|
csvLinesTerminator: 'Terminador de líneas',
|
||||||
|
csvStringDelimiter: 'Delimitador de cadenas',
|
||||||
|
csvIncludeHeader: 'Incluir cabecera',
|
||||||
|
csvExportOptions: 'Opciones de exportación de CSV',
|
||||||
|
exportData: 'Exportar datos',
|
||||||
|
exportDataExplanation: 'Exportar conexiones guardadas en Antares. Se le preguntará por una contraseña para encriptar el fichero exportado.',
|
||||||
|
importData: 'Importar datos',
|
||||||
|
importDataExplanation: 'Importará un fichero con extensión .antares que contiene conexiones. Necesitará la contraseña con la que se encriptó el mismo.',
|
||||||
|
includeConnectionPasswords: 'Incluir contraseñas de conexión',
|
||||||
|
includeFolders: 'Incluir carpetas',
|
||||||
|
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',
|
||||||
|
note: 'Note | Notes',
|
||||||
|
thereAreNoNotesYet: 'There are no notes yet',
|
||||||
|
addNote: 'Add note',
|
||||||
|
editNote: 'Edit note',
|
||||||
|
saveAsNote: 'Save as note',
|
||||||
|
showArchivedNotes: 'Show archived notes',
|
||||||
|
hideArchivedNotes: 'Hide archived notes',
|
||||||
|
tag: 'Tag', // Note tag,
|
||||||
|
saveFile: 'Save file',
|
||||||
|
saveFileAs: 'Save file as',
|
||||||
|
openFile: 'Open file',
|
||||||
|
openNotes: 'Open notes',
|
||||||
|
debugConsole: 'Debug console', // <- console tab name
|
||||||
|
executedQueries: 'Executed queries', // <- console tab name
|
||||||
|
sizeLimitError: 'Maximum size of {size} exceeded'
|
||||||
|
},
|
||||||
|
faker: { // Faker.js methods, used in random generated content
|
||||||
|
address: 'Dirección',
|
||||||
|
commerce: 'Comercio',
|
||||||
|
company: 'Compañía',
|
||||||
|
database: 'Base de datos',
|
||||||
|
date: 'Fecha',
|
||||||
|
finance: 'Finanzas',
|
||||||
|
git: 'Git',
|
||||||
|
hacker: 'Hacker',
|
||||||
|
internet: 'Internet',
|
||||||
|
lorem: 'Lorem',
|
||||||
|
name: 'Nombre',
|
||||||
|
music: 'Música',
|
||||||
|
phone: 'Teléfono',
|
||||||
|
random: 'Aleatorio',
|
||||||
|
system: 'Sistema',
|
||||||
|
time: 'Hora',
|
||||||
|
vehicle: 'Vehículo',
|
||||||
|
zipCode: 'Código Postal',
|
||||||
|
zipCodeByState: 'Código Postal por Estado',
|
||||||
|
city: 'Ciudad',
|
||||||
|
cityPrefix: 'Prefijo de ciudad',
|
||||||
|
citySuffix: 'Sufijo de ciudad',
|
||||||
|
streetName: 'Nombre de calle',
|
||||||
|
streetAddress: 'Dirección',
|
||||||
|
streetSuffix: 'Sufijo de calle',
|
||||||
|
streetPrefix: 'Prefijo de calle',
|
||||||
|
secondaryAddress: 'Dirección secundaria',
|
||||||
|
county: 'Condado',
|
||||||
|
country: 'País',
|
||||||
|
countryCode: 'Código de país',
|
||||||
|
state: 'Estado',
|
||||||
|
stateAbbr: 'Abreviatura de Estado',
|
||||||
|
latitude: 'Latitud',
|
||||||
|
longitude: 'Longitud',
|
||||||
|
direction: 'Dirección',
|
||||||
|
cardinalDirection: 'Dirección cardinal',
|
||||||
|
ordinalDirection: 'Dirección ordinal',
|
||||||
|
nearbyGPSCoordinate: 'Coordenadas GPS',
|
||||||
|
timeZone: 'Zona horaria',
|
||||||
|
color: 'Color',
|
||||||
|
department: 'Departmento',
|
||||||
|
productName: 'Nombre de producto',
|
||||||
|
price: 'Precio',
|
||||||
|
productAdjective: 'Adjetivo de producto',
|
||||||
|
productMaterial: 'Material de producto',
|
||||||
|
product: 'Producto',
|
||||||
|
productDescription: 'Descripción de producto',
|
||||||
|
suffixes: 'Sufijos',
|
||||||
|
companyName: 'Nombre de compañía',
|
||||||
|
companySuffix: 'Sufijo de compañía',
|
||||||
|
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: 'Columna',
|
||||||
|
type: 'Tipo',
|
||||||
|
collation: 'Colación',
|
||||||
|
engine: 'Motor',
|
||||||
|
past: 'Pasado',
|
||||||
|
now: 'Ahora',
|
||||||
|
future: 'Futuro',
|
||||||
|
between: 'Entre',
|
||||||
|
recent: 'Reciente',
|
||||||
|
soon: 'Pronto',
|
||||||
|
month: 'Mes',
|
||||||
|
weekday: 'Día de la semana',
|
||||||
|
account: 'Cuenta',
|
||||||
|
accountName: 'Nombre de cuenta',
|
||||||
|
routingNumber: 'Número de enrutamiento',
|
||||||
|
mask: 'Máscara',
|
||||||
|
amount: 'Cantidad',
|
||||||
|
transactionType: 'Tipo de transacción',
|
||||||
|
currencyCode: 'Código de Moneda',
|
||||||
|
currencyName: 'Nombre de Moneda',
|
||||||
|
currencySymbol: 'Símbolo de Moneda',
|
||||||
|
bitcoinAddress: 'Dirección Bitcoin',
|
||||||
|
litecoinAddress: 'Dirección Litecoin',
|
||||||
|
creditCardNumber: 'Número de tarjeta',
|
||||||
|
creditCardCVV: 'CVV',
|
||||||
|
ethereumAddress: 'Dirección Ethereum',
|
||||||
|
iban: 'IBAN',
|
||||||
|
bic: 'BIC',
|
||||||
|
transactionDescription: 'Descripción de transacción',
|
||||||
|
branch: 'Rama',
|
||||||
|
commitEntry: 'Entrada de Commit',
|
||||||
|
commitMessage: 'Mensaje de Commit',
|
||||||
|
commitSha: 'SHA de Commit',
|
||||||
|
shortSha: 'SHA corto',
|
||||||
|
abbreviation: 'Abreviatura',
|
||||||
|
adjective: 'Adjetivo',
|
||||||
|
noun: 'Sustantivo',
|
||||||
|
verb: 'Verbo',
|
||||||
|
ingverb: 'Adverbio',
|
||||||
|
phrase: 'Frase',
|
||||||
|
avatar: 'Avatar',
|
||||||
|
email: 'Email',
|
||||||
|
exampleEmail: 'Email de ejemplo',
|
||||||
|
userName: 'Nombre de usuario',
|
||||||
|
protocol: 'Protocolo',
|
||||||
|
url: 'URL',
|
||||||
|
domainName: 'Dominio',
|
||||||
|
domainSuffix: 'Prefijo de dominio',
|
||||||
|
domainWord: 'Palabra de dominio',
|
||||||
|
ip: 'IP',
|
||||||
|
ipv6: 'IPv6',
|
||||||
|
userAgent: 'Agente de Usuario',
|
||||||
|
mac: 'MAC',
|
||||||
|
password: 'Contraseña',
|
||||||
|
word: 'Palabra',
|
||||||
|
words: 'Palabras',
|
||||||
|
sentence: 'Sentencia',
|
||||||
|
slug: 'Slug',
|
||||||
|
sentences: 'Sentencias',
|
||||||
|
paragraph: 'Frase',
|
||||||
|
paragraphs: 'Frases',
|
||||||
|
text: 'Texto',
|
||||||
|
lines: 'Lineas',
|
||||||
|
genre: 'Género',
|
||||||
|
firstName: 'Nombre',
|
||||||
|
lastName: 'Apellido',
|
||||||
|
middleName: 'Apellido',
|
||||||
|
findName: 'Nombre completo',
|
||||||
|
jobTitle: 'Ocupación',
|
||||||
|
gender: 'Género',
|
||||||
|
prefix: 'Prefijo',
|
||||||
|
suffix: 'Sufijo',
|
||||||
|
title: 'Título',
|
||||||
|
jobDescriptor: 'Descripción de trabajo',
|
||||||
|
jobArea: 'Area de trabajo',
|
||||||
|
jobType: 'Tipo de trabajo',
|
||||||
|
phoneNumber: 'Número de teléfono',
|
||||||
|
phoneNumberFormat: 'Formato de número de teléfono',
|
||||||
|
phoneFormats: 'Formatos de teléfono',
|
||||||
|
number: 'Número',
|
||||||
|
float: 'Decimal',
|
||||||
|
arrayElement: 'Elemento Array',
|
||||||
|
arrayElements: 'Elementos de Array',
|
||||||
|
objectElement: 'Elemento Objeto',
|
||||||
|
uuid: 'UUID',
|
||||||
|
boolean: 'Booleano',
|
||||||
|
image: 'Imagen',
|
||||||
|
locale: 'Conf. regional',
|
||||||
|
alpha: 'Alpha',
|
||||||
|
alphaNumeric: 'Alfanumérico',
|
||||||
|
hexaDecimal: 'Hexadecimal',
|
||||||
|
fileName: 'Nombre de fichero',
|
||||||
|
commonFileName: 'Common file name',
|
||||||
|
mimeType: 'Mime-Type',
|
||||||
|
commonFileType: 'Common file type',
|
||||||
|
commonFileExt: 'Common file extension',
|
||||||
|
fileType: 'Tipo de fichero',
|
||||||
|
fileExt: 'Extension de fichero',
|
||||||
|
directoryPath: 'Ruta de directorio',
|
||||||
|
filePath: 'Ruta de fichero',
|
||||||
|
semver: 'SemVer',
|
||||||
|
manufacturer: 'Fabricante',
|
||||||
|
model: 'Modelo',
|
||||||
|
fuel: 'Combustible',
|
||||||
|
vin: 'VIN'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@@ -16,6 +16,7 @@ import { nlNL } from './nl-NL';
|
|||||||
import { ptBR } from './pt-BR';
|
import { ptBR } from './pt-BR';
|
||||||
import { ruRU } from './ru-RU';
|
import { ruRU } from './ru-RU';
|
||||||
import { ukUA } from './uk-UA';
|
import { ukUA } from './uk-UA';
|
||||||
|
import { uzUZ } from './uz-UZ';
|
||||||
import { viVN } from './vi-VN';
|
import { viVN } from './vi-VN';
|
||||||
import { zhCN } from './zh-CN';
|
import { zhCN } from './zh-CN';
|
||||||
import { zhTW } from './zh-TW';
|
import { zhTW } from './zh-TW';
|
||||||
@@ -39,7 +40,8 @@ const messages = {
|
|||||||
'cs-CZ': csCZ,
|
'cs-CZ': csCZ,
|
||||||
'uk-UA': ukUA,
|
'uk-UA': ukUA,
|
||||||
'zh-TW': zhTW,
|
'zh-TW': zhTW,
|
||||||
'he-IL': heIL
|
'he-IL': heIL,
|
||||||
|
'uz-UZ': uzUZ
|
||||||
};
|
};
|
||||||
|
|
||||||
type NestedPartial<T> = {
|
type NestedPartial<T> = {
|
||||||
|
@@ -17,5 +17,6 @@ export const localesNames: Record<string, string> = {
|
|||||||
'ca-ES': 'Català',
|
'ca-ES': 'Català',
|
||||||
'cs-CZ': 'Čeština',
|
'cs-CZ': 'Čeština',
|
||||||
'uk-UA': 'Українська',
|
'uk-UA': 'Українська',
|
||||||
|
'uz-UZ': 'O`zbek',
|
||||||
'he-IL': 'עברית'
|
'he-IL': 'עברית'
|
||||||
};
|
};
|
||||||
|
576
src/renderer/i18n/uz-UZ.ts
Normal file
576
src/renderer/i18n/uz-UZ.ts
Normal file
@@ -0,0 +1,576 @@
|
|||||||
|
export const uzUZ = {
|
||||||
|
general: {
|
||||||
|
edit: 'Tahrirlash',
|
||||||
|
save: 'Saqlash',
|
||||||
|
close: 'Yopish',
|
||||||
|
delete: 'Oʻchirish',
|
||||||
|
confirm: 'Tasdiqlash',
|
||||||
|
cancel: 'Bekor qilish',
|
||||||
|
send: 'Yuborish',
|
||||||
|
refresh: 'Yangilash',
|
||||||
|
autoRefresh: 'Avto yangilash',
|
||||||
|
version: 'Versiya',
|
||||||
|
donate: 'Donat',
|
||||||
|
run: 'Bajarish',
|
||||||
|
results: 'Ko‘rsatildi',
|
||||||
|
size: 'Hajmi',
|
||||||
|
mimeType: 'Mime-Turi',
|
||||||
|
download: 'Yuklab olish',
|
||||||
|
add: 'Qoʻshish',
|
||||||
|
data: 'Maʼlumotlar',
|
||||||
|
properties: 'Xususiyatlar',
|
||||||
|
insert: 'Kiritish',
|
||||||
|
name: 'Nomi',
|
||||||
|
clear: 'Tozalash',
|
||||||
|
seconds: 'Soniyalar',
|
||||||
|
options: 'Parametrlar',
|
||||||
|
discard: 'Bekor qilish',
|
||||||
|
stay: 'Qolish',
|
||||||
|
author: 'Muallif',
|
||||||
|
upload: 'Yuklash',
|
||||||
|
browse: 'Koʻrish',
|
||||||
|
content: 'Mazmun',
|
||||||
|
cut: 'Kesish',
|
||||||
|
copy: 'Nusxalash',
|
||||||
|
paste: 'Qoʻyish',
|
||||||
|
tools: 'Asboblar',
|
||||||
|
format: 'Formatlash',
|
||||||
|
all: 'Hammasi',
|
||||||
|
duplicate: 'Nusxa ko‘chirish',
|
||||||
|
new: 'Yangi',
|
||||||
|
history: 'Tarix',
|
||||||
|
select: 'Tanlash',
|
||||||
|
filter: 'Filtr',
|
||||||
|
change: 'Oʻzgartirish',
|
||||||
|
includes: 'Oʻz ichiga oladi',
|
||||||
|
completed: 'Tugallandi',
|
||||||
|
aborted: 'Bekor qilindi',
|
||||||
|
disabled: 'Oʻchirib qoʻyilgan',
|
||||||
|
enable: 'Yoqish',
|
||||||
|
disable: 'Oʻchirish',
|
||||||
|
contributors: 'Hissa qoʻshuvchilar',
|
||||||
|
pin: 'Biriktirish',
|
||||||
|
unpin: 'Ajratish',
|
||||||
|
folder: 'Papka | Papkalar',
|
||||||
|
deleteConfirm: 'Oʻchirib tashlashni tasdiqlaysizmi',
|
||||||
|
uploadFile: 'Fayl yuklash',
|
||||||
|
manualValue: 'Qiymatni qoʻlda kiritish',
|
||||||
|
selectAll: 'Hammasini tanlash',
|
||||||
|
pageNumber: 'Sahifa raqami',
|
||||||
|
directoryPath: 'Papka yoʻli',
|
||||||
|
actionSuccessful: '{action} muvaffaqiyatli bajarildi',
|
||||||
|
outputFormat: 'Chiqarish formati',
|
||||||
|
singleFile: 'Bitta {ext} fayl',
|
||||||
|
zipCompressedFile: 'ZIP siqilgan {ext} fayl',
|
||||||
|
include: 'Qoʻshish',
|
||||||
|
none: 'Yoʻq',
|
||||||
|
singleQuote: 'Yagona qoʻshtirnoq',
|
||||||
|
doubleQuote: 'Ikkilik qoʻshtirnoq',
|
||||||
|
copyName: 'Nomi nusxalash',
|
||||||
|
search: 'Qidirish',
|
||||||
|
title: 'Sarlavha',
|
||||||
|
archive: 'Arxiv',
|
||||||
|
undo: 'Bekor qilish',
|
||||||
|
moveTo: 'Koʻchirish'
|
||||||
|
},
|
||||||
|
connection: {
|
||||||
|
connectionName: 'Ulanish nomi',
|
||||||
|
client: 'Mijoz',
|
||||||
|
hostName: 'Xost nomi',
|
||||||
|
port: 'Port',
|
||||||
|
user: 'Foydalanuvchi',
|
||||||
|
password: 'Parol',
|
||||||
|
credentials: 'Vakolatlar',
|
||||||
|
connect: 'Ulanish',
|
||||||
|
connected: 'Ulangan',
|
||||||
|
disconnect: 'Uzish',
|
||||||
|
disconnected: 'Uzilgan',
|
||||||
|
ssl: 'SSL',
|
||||||
|
privateKey: 'Yopiq kalit',
|
||||||
|
certificate: 'Sertifikat',
|
||||||
|
caCertificate: 'CA sertifikat',
|
||||||
|
ciphers: 'Shifrlar',
|
||||||
|
sshTunnel: 'SSH tunnel',
|
||||||
|
passphrase: 'Parol frazasi',
|
||||||
|
connectionString: 'Ulanish qatori',
|
||||||
|
addConnection: 'Ulanish qoʻshish',
|
||||||
|
createConnection: 'Ulanish yaratish',
|
||||||
|
createNewConnection: 'Yangi ulanish yaratish',
|
||||||
|
askCredentials: 'Hisob maʼlumotlarini soʻrash',
|
||||||
|
testConnection: 'Ulanishni sinash',
|
||||||
|
editConnection: 'Ulanishni tahrirlash',
|
||||||
|
deleteConnection: 'Ulanishni oʻchirish',
|
||||||
|
connectionSuccessfullyMade: 'Ulanish muvaffaqiyatli amalga oshirildi!',
|
||||||
|
enableSsl: 'SSL ni yoqish',
|
||||||
|
enableSsh: 'SSH ni yoqish',
|
||||||
|
readOnlyMode: 'Faqat oʻqish rejimi',
|
||||||
|
untrustedConnection: 'Ishonchsiz ulanish',
|
||||||
|
allConnections: 'Barcha ulanishlar',
|
||||||
|
searchForConnections: 'Ulanishlarni qidirish',
|
||||||
|
keepAliveInterval: 'Ulanishni saqlash oraliq vaqti',
|
||||||
|
singleConnection: 'Bitta ulanish',
|
||||||
|
connection: 'Ulanish'
|
||||||
|
},
|
||||||
|
database: {
|
||||||
|
schema: 'Shema',
|
||||||
|
type: 'Tur',
|
||||||
|
foreignKeys: 'Tashqi kalitlar',
|
||||||
|
length: 'Uzunlik',
|
||||||
|
unsigned: 'Imzosiz',
|
||||||
|
default: 'Standart',
|
||||||
|
comment: 'Izoh',
|
||||||
|
collation: 'Moslash',
|
||||||
|
key: 'Kalit | Kalitlar',
|
||||||
|
order: 'Tartib',
|
||||||
|
expression: 'Ifoda',
|
||||||
|
autoIncrement: 'Avtomatik oshirish',
|
||||||
|
engine: 'Dvigatel',
|
||||||
|
field: 'Maydon | Maydonlar',
|
||||||
|
approximately: 'Taxminan',
|
||||||
|
total: 'Jami',
|
||||||
|
table: 'Jadval',
|
||||||
|
view: 'Ko‘rinish',
|
||||||
|
indexes: 'Indekslar',
|
||||||
|
definer: 'Belgilar',
|
||||||
|
algorithm: 'Algoritm',
|
||||||
|
trigger: 'Trigge | Triggeler',
|
||||||
|
storedRoutine: 'Saqlangan protsedura | Saqlangan protseduralar',
|
||||||
|
scheduler: 'Rejalashtiruvchi | Rejalashtiruvchilar',
|
||||||
|
event: 'Voqea',
|
||||||
|
parameters: 'Parametrlar',
|
||||||
|
function: 'Funktsiya | Funktsiyalar',
|
||||||
|
deterministic: 'Deterministik',
|
||||||
|
context: 'Kontekst',
|
||||||
|
export: 'Eksport',
|
||||||
|
import: 'Import',
|
||||||
|
returns: 'Qaytaradi',
|
||||||
|
timing: 'Vaqt',
|
||||||
|
state: 'Holat',
|
||||||
|
execution: 'Bajarish',
|
||||||
|
starts: 'Boshlanishi',
|
||||||
|
ends: 'Tugashi',
|
||||||
|
variables: 'O‘zgaruvchilar',
|
||||||
|
processes: 'Jarayonlar',
|
||||||
|
database: 'Maʼlumotlar bazasi',
|
||||||
|
array: 'Massiv',
|
||||||
|
structure: 'Tuzilish',
|
||||||
|
row: 'Qator | Qatorlar',
|
||||||
|
cell: 'Yacheyka | Yacheykalar',
|
||||||
|
triggerFunction: 'Trigger funktsiyasi | Trigger funktsiyalari',
|
||||||
|
routine: 'Protsedura',
|
||||||
|
commit: 'Tasdiqlash',
|
||||||
|
rollback: 'Bekor qilish',
|
||||||
|
resultsTable: 'Natija jadvali',
|
||||||
|
ddl: 'DDL',
|
||||||
|
drop: 'Oʻchirish',
|
||||||
|
unableEditFieldWithoutPrimary: 'Birlamchi kalit bo‘lmasa, maydonni tahrirlash mumkin emas',
|
||||||
|
editCell: 'Yacheykani tahrirlash',
|
||||||
|
deleteRows: 'Qatorni oʻchirish | {count} qatorni oʻchirish',
|
||||||
|
confirmToDeleteRows: 'Qatorni oʻchirishni tasdiqlaysizmi? | {count} qatorni oʻchirishni tasdiqlaysizmi?',
|
||||||
|
addNewRow: 'Yangi qator qoʻshish',
|
||||||
|
numberOfInserts: 'Qoʻshilganlar soni',
|
||||||
|
affectedRows: 'Taqsir qilingan qatorlar',
|
||||||
|
createNewDatabase: 'Yangi maʼlumotlar bazasi yaratish',
|
||||||
|
databaseName: 'Maʼlumotlar bazasi nomi',
|
||||||
|
serverDefault: 'Server standartlari bo‘yicha',
|
||||||
|
deleteDatabase: 'Maʼlumotlar bazasini oʻchirish',
|
||||||
|
editDatabase: 'Maʼlumotlar bazasini tahrirlash',
|
||||||
|
clearChanges: 'Oʻzgarishlarni oʻchirish',
|
||||||
|
addNewField: 'Yangi maydon qo‘shish',
|
||||||
|
manageIndexes: 'Indekslarni boshqarish',
|
||||||
|
manageForeignKeys: 'Tashqi kalitlarni boshqarish',
|
||||||
|
allowNull: 'NULL ga ruxsat berish',
|
||||||
|
zeroFill: 'Nol bilan toʻldirish',
|
||||||
|
customValue: 'Foydalanuvchi qiymati',
|
||||||
|
onUpdate: 'Yangilanishda',
|
||||||
|
deleteField: 'Maydonni oʻchirish',
|
||||||
|
createNewIndex: 'Yangi indeks yaratish',
|
||||||
|
addToIndex: 'Indeksga qoʻshish',
|
||||||
|
createNewTable: 'Yangi jadval yaratish',
|
||||||
|
emptyTable: 'Jadvalni tozalash',
|
||||||
|
deleteTable: 'Jadvalni oʻchirish',
|
||||||
|
emptyConfirm: 'Tozalashni tasdiqlaysizmi?',
|
||||||
|
thereAreNoIndexes: 'Indekslar mavjud emas',
|
||||||
|
thereAreNoForeign: 'Tashqi kalitlar mavjud emas',
|
||||||
|
createNewForeign: 'Yangi tashqi kalit yaratish',
|
||||||
|
referenceTable: 'Jadvalga murojaat',
|
||||||
|
referenceField: 'Maydonga murojaat',
|
||||||
|
foreignFields: 'Tashqi maydonlar',
|
||||||
|
invalidDefault: 'Noto‘g‘ri qiymat',
|
||||||
|
onDelete: 'Oʻchirishda',
|
||||||
|
selectStatement: 'Tanlash operatori',
|
||||||
|
triggerStatement: 'Trigger operatori',
|
||||||
|
sqlSecurity: 'SQL xavfsizligi',
|
||||||
|
updateOption: 'Yangilash parametrlari',
|
||||||
|
deleteView: 'Ko‘rinishni oʻchirish',
|
||||||
|
createNewView: 'Yangi ko‘rinish yaratish',
|
||||||
|
deleteTrigger: 'Trigerni oʻchirish',
|
||||||
|
createNewTrigger: 'Yangi trigger yaratish',
|
||||||
|
currentUser: 'Hozirgi foydalanuvchi',
|
||||||
|
routineBody: 'Protsedura matni',
|
||||||
|
dataAccess: 'Maʼlumotlarga kirish',
|
||||||
|
thereAreNoParameters: 'Parametrlar yoʻq',
|
||||||
|
createNewParameter: 'Yangi parametr yaratish',
|
||||||
|
createNewRoutine: 'Yangi protsedura yaratish',
|
||||||
|
deleteRoutine: 'Protsedurani oʻchirish',
|
||||||
|
functionBody: 'Funktsiya matni',
|
||||||
|
createNewFunction: 'Yangi funktsiya yaratish',
|
||||||
|
deleteFunction: 'Funktsiyani oʻchirish',
|
||||||
|
schedulerBody: 'Rejalashtiruvchi matni',
|
||||||
|
createNewScheduler: 'Yangi rejalashtiruvchi yaratish',
|
||||||
|
deleteScheduler: 'Rejalashtiruvchini oʻchirish',
|
||||||
|
preserveOnCompletion: 'Yakunlangandan soʻng saqlash',
|
||||||
|
tableFiller: 'Jadval toʻldiruvchisi',
|
||||||
|
fakeDataLanguage: 'Soxta maʼlumotlar tili',
|
||||||
|
queryDuration: 'Soʻrov davomiyligi',
|
||||||
|
setNull: 'NULL qiymatni oʻrnatish',
|
||||||
|
processesList: 'Jarayonlar roʻyxati',
|
||||||
|
processInfo: 'Jarayon maʼlumotlari',
|
||||||
|
manageUsers: 'Foydalanuvchilarni boshqarish',
|
||||||
|
createNewSchema: 'Yangi shema yaratish',
|
||||||
|
schemaName: 'Shema nomi',
|
||||||
|
editSchema: 'Shemaga o‘zgartirish kiritish',
|
||||||
|
deleteSchema: 'Shemadan oʻchirish',
|
||||||
|
duplicateTable: 'Jadvalni dublikat qilish',
|
||||||
|
noSchema: 'Shemalar mavjud emas',
|
||||||
|
runQuery: 'Soʻrovni bajarish',
|
||||||
|
thereAreNoTableFields: 'Jadvalda maydonlar yoʻq',
|
||||||
|
newTable: 'Yangi jadval',
|
||||||
|
newView: 'Yangi ko‘rinish',
|
||||||
|
newTrigger: 'Yangi trigger',
|
||||||
|
newRoutine: 'Yangi protsedura',
|
||||||
|
newFunction: 'Yangi funktsiya',
|
||||||
|
newScheduler: 'Yangi rejalashtiruvchi',
|
||||||
|
newTriggerFunction: 'Yangi trigger funktsiyasi',
|
||||||
|
thereAreNoQueriesYet: 'Soʻrovlar hali mavjud emas',
|
||||||
|
searchForQueries: 'Soʻrovlarni qidirish',
|
||||||
|
killProcess: 'Jarayonni toʻxtatish',
|
||||||
|
exportSchema: 'Shemadan eksport qilish',
|
||||||
|
importSchema: 'Shemaga import qilish',
|
||||||
|
newInsertStmtEvery: 'Har bir uchun yangi INSERT operator',
|
||||||
|
processingTableExport: '{table} ni qayta ishlash',
|
||||||
|
fetchingTableExport: '{table} maʼlumotlarini olish',
|
||||||
|
writingTableExport: '{table} ga yozish',
|
||||||
|
checkAllTables: 'Barcha jadvallarni belgilash',
|
||||||
|
uncheckAllTables: 'Barcha jadvallardan belgilashni olib tashlash',
|
||||||
|
killQuery: 'Soʻrovni toʻxtatish',
|
||||||
|
insertRow: 'Qator kiritish | Qatorlarni kiritish',
|
||||||
|
commitMode: 'Tranzaksiya tasdiqlash rejimi',
|
||||||
|
autoCommit: 'Avtomatik tasdiqlash',
|
||||||
|
manualCommit: 'Qoʻlda tasdiqlash',
|
||||||
|
disableFKChecks: 'Tashqi kalitlarni tekshirishni oʻchirish',
|
||||||
|
formatQuery: 'Soʻrovni formatlash',
|
||||||
|
queryHistory: 'Soʻrovlar tarixi',
|
||||||
|
clearQuery: 'Soʻrovni tozalash',
|
||||||
|
fillCell: 'Yacheykani toʻldirish',
|
||||||
|
executeSelectedQuery: 'Tanlangan soʻrovni bajarish',
|
||||||
|
noResultsPresent: 'Natijalar yoʻq',
|
||||||
|
sqlExportOptions: 'SQL eksport parametrlari',
|
||||||
|
targetTable: 'Maqsad jadvali',
|
||||||
|
importQueryErrors: 'Diqqat: {n} xato yuz berdi | Diqqat: {n} xatolar yuz berdi',
|
||||||
|
executedQueries: '{n} soʻrov bajarildi | {n} soʻrovlar bajarildi',
|
||||||
|
insert: 'Kiritish',
|
||||||
|
materializedview: 'Materializatsiya qilingan ko‘rinish | Materializatsiya qilingan ko‘rinishlar',
|
||||||
|
exportTable: 'Jadvalni eksport qilish',
|
||||||
|
createNewMaterializedView: 'Yangi materializatsiya qilingan ko‘rinish yaratish',
|
||||||
|
newMaterializedView: 'Yangi materializatsiya qilingan ko‘rinish',
|
||||||
|
switchDatabase: 'Maʼlumotlar bazasini almashtirish',
|
||||||
|
searchForElements: 'Elementlarni qidirish',
|
||||||
|
searchForSchemas: 'Shemalarni qidirish',
|
||||||
|
savedQueries: 'Saqlangan soʻrovlar'
|
||||||
|
},
|
||||||
|
application: {
|
||||||
|
settings: 'Sozlamalar',
|
||||||
|
general: 'Umumiy',
|
||||||
|
themes: 'Mavzular',
|
||||||
|
update: 'Yangilash',
|
||||||
|
about: 'Dastur haqida',
|
||||||
|
language: 'Til',
|
||||||
|
light: 'Yorugʻ',
|
||||||
|
dark: 'Qorongʻi',
|
||||||
|
autoCompletion: 'Avto-tugallash',
|
||||||
|
application: 'Ilova',
|
||||||
|
editor: 'Tahrirchi',
|
||||||
|
scratchpad: 'Eslatmalar',
|
||||||
|
changelog: 'Oʻzgarishlar jurnali',
|
||||||
|
small: 'Kichik',
|
||||||
|
medium: 'Oʻrta',
|
||||||
|
large: 'Katta',
|
||||||
|
console: 'Konsol',
|
||||||
|
shortcuts: 'Qisqa tugmalar',
|
||||||
|
appearance: 'Tashqi koʻrinish',
|
||||||
|
color: 'Rang',
|
||||||
|
label: 'Yorliq',
|
||||||
|
icon: 'Belgi',
|
||||||
|
madeWithJS: '💛 va JavaScript bilan yaratilgan!',
|
||||||
|
checkForUpdates: 'Yangilanishlarni tekshirish',
|
||||||
|
noUpdatesAvailable: 'Yangilanishlar topilmadi',
|
||||||
|
checkingForUpdate: 'Yangilanishlarni qidirish',
|
||||||
|
checkFailure: 'Yangilanishlarni tekshirib boʻlmadi, iltimos keyinroq urinib koʻring',
|
||||||
|
updateAvailable: 'Yangilanish mavjud',
|
||||||
|
downloadingUpdate: 'Yangilanishni yuklab olish',
|
||||||
|
updateDownloaded: 'Yangilanish yuklab olindi',
|
||||||
|
restartToInstall: 'Oʻrnatish uchun Antares-ni qayta ishga tushiring',
|
||||||
|
notificationsTimeout: 'Bildirishnoma vaqti',
|
||||||
|
openNewTab: 'Yangi tab ochish',
|
||||||
|
unsavedChanges: 'Saqlanmagan oʻzgarishlar',
|
||||||
|
discardUnsavedChanges: 'Saqlanmagan maʼlumotlaringiz mavjud. Ushbu oynani yopish ularni bekor qiladi.',
|
||||||
|
applicationTheme: 'Ilova mavzusi',
|
||||||
|
editorTheme: 'Tahrirchi mavzusi',
|
||||||
|
wrapLongLines: 'Uzun satrlarni oʻrash',
|
||||||
|
includeBetaUpdates: 'Beta yangilanishlarni olish',
|
||||||
|
markdownSupported: 'Markdown qoʻllab-quvvatlanadi',
|
||||||
|
plantATree: 'Daraxt ekish',
|
||||||
|
dataTabPageSize: 'MAʼLUMOTLAR yorligʻi sahifa oʻlchami',
|
||||||
|
noOpenTabs: 'Ochiq yorliqlar yoʻq, chap paneldan foydalaning yoki:',
|
||||||
|
restorePreviousSession: 'Avvalgi sessiyani tiklash',
|
||||||
|
closeTab: 'Yorliqni yopish',
|
||||||
|
goToDownloadPage: 'Yuklash sahifasiga oʻtish',
|
||||||
|
disableBlur: 'Bulutni oʻchirish',
|
||||||
|
missingOrIncompleteTranslation: 'Yetishmayotgan yoki toʻliq boʻlmagan tarjima?',
|
||||||
|
findOutHowToContribute: 'Qanday hissa qoʻshishni bilib oling',
|
||||||
|
disableScratchpad: 'Eslatmalarni oʻchirish',
|
||||||
|
reportABug: 'Xato haqida xabar berish',
|
||||||
|
nextTab: 'Keyingi yorliq',
|
||||||
|
previousTab: 'Oldingi yorliq',
|
||||||
|
selectTabNumber: '{param} raqamli yorliqni tanlash',
|
||||||
|
toggleConsole: 'Konsolni almashtirish',
|
||||||
|
addShortcut: 'Qisqa tugma qoʻshish',
|
||||||
|
editShortcut: 'Qisqa tugmani tahrirlash',
|
||||||
|
deleteShortcut: 'Qisqa tugmani oʻchirish',
|
||||||
|
restoreDefaults: 'Standartlarga qaytarish',
|
||||||
|
restoreDefaultsQuestion: 'Standart qiymatlarni tiklashga rozimisiz?',
|
||||||
|
registerAShortcut: 'Qisqa tugma roʻyxatdan oʻtkazish',
|
||||||
|
invalidShortcutMessage: 'Bu kombinatsiyani ishlatib boʻlmaydi, boshqa birini sinab koʻring',
|
||||||
|
shortcutAlreadyExists: 'Bunday kombinatsiya allaqachon mavjud',
|
||||||
|
saveContent: 'Mazmunni saqlash',
|
||||||
|
openAllConnections: 'Barcha ulanishlarni ochish',
|
||||||
|
openSettings: 'Sozlamalarni ochish',
|
||||||
|
openScratchpad: 'Eslatmalarni ochish',
|
||||||
|
runOrReload: 'Bajaring yoki qayta yuklang',
|
||||||
|
openFilter: 'Filtrni ochish',
|
||||||
|
nextResultsPage: 'Keyingi sahifa',
|
||||||
|
previousResultsPage: 'Oldingi sahifa',
|
||||||
|
editFolder: 'Papkani tahrirlash',
|
||||||
|
folderName: 'Papkalar nomi',
|
||||||
|
deleteFolder: 'Papkani oʻchirish',
|
||||||
|
editConnectionAppearance: 'Ulanish tashqi koʻrinishini oʻzgartirish',
|
||||||
|
defaultCopyType: 'Odatiy nusxa koʻchirish turi',
|
||||||
|
showTableSize: 'Yon panelda jadval oʻlchamini koʻrsatish',
|
||||||
|
showTableSizeDescription: 'Faqat MySQL/MariaDB. Ushbu parametrni yoqish koʻp jadvalli sxemalarda ishlash tezligiga taʼsir qilishi mumkin.',
|
||||||
|
searchForSchemas: 'Sxemalarni qidirish',
|
||||||
|
searchForElements: 'Elementlarni qidirish',
|
||||||
|
switchSearchMethod: 'Qidiruv usulini almashtirish',
|
||||||
|
closeAllTabs: 'Barcha yorliqlarni yopish',
|
||||||
|
closeOtherTabs: 'Boshqa yorliqlarni yopish',
|
||||||
|
closeTabsToLeft: 'Chapdagi yorliqlarni yopish',
|
||||||
|
closeTabsToRight: 'Oʻngdagi yorliqlarni yopish',
|
||||||
|
phpArray: 'PHP massiv',
|
||||||
|
event: 'Hodisa',
|
||||||
|
customIcon: 'Maxsus belgi',
|
||||||
|
fileName: 'Fayl nomi',
|
||||||
|
choseFile: 'Faylni tanlash',
|
||||||
|
data: 'Maʼlumotlar',
|
||||||
|
password: 'Parol',
|
||||||
|
required: 'Majburiy',
|
||||||
|
newFolder: 'Yangi papka',
|
||||||
|
outOfFolder: 'Papkadan tashqari',
|
||||||
|
csvFieldDelimiter: 'CSV maydon ajratgichi',
|
||||||
|
csvLinesTerminator: 'CSV satr terminatori',
|
||||||
|
csvStringDelimiter: 'CSV satr ajratgichi',
|
||||||
|
csvIncludeHeader: 'Sarlavhani kiritish',
|
||||||
|
csvExportOptions: 'CSV eksport imkoniyatlari',
|
||||||
|
exportData: 'Maʼlumotlarni eksport qilish',
|
||||||
|
exportDataExplanation: 'Antares-dagi saqlangan ulanishlarni eksport qilish. Shifrlangan fayl uchun parol kiritishingiz soʻraladi.',
|
||||||
|
importData: 'Maʼlumotlarni import qilish',
|
||||||
|
importDataExplanation: '.antares faylini import qiladi, unda ulanishlar mavjud. Eksport paytida kiritilgan parolni kiritishingiz kerak.',
|
||||||
|
includeConnectionPasswords: 'Ulanish parollarini kiritish',
|
||||||
|
includeFolders: 'Papkalarni kiritish',
|
||||||
|
encryptionPassword: 'Shifrlash paroli',
|
||||||
|
encryptionPasswordError: 'Shifrlash paroli kamida 8 ta belgi boʻlishi kerak.',
|
||||||
|
ignoreDuplicates: 'Nusxalarni inkor qilish',
|
||||||
|
wrongImportPassword: 'Import paroli notoʻgʻri',
|
||||||
|
wrongFileFormat: 'Fayl formati notoʻgʻri',
|
||||||
|
dataImportSuccess: 'Maʼlumotlar muvaffaqiyatli import qilindi',
|
||||||
|
note: 'Eslatma | Eslatmalar',
|
||||||
|
thereAreNoNotesYet: 'Hali eslatmalar yoʻq',
|
||||||
|
addNote: 'Eslatma qoʻshish',
|
||||||
|
editNote: 'Eslatmani tahrirlash',
|
||||||
|
saveAsNote: 'Eslatma sifatida saqlash',
|
||||||
|
showArchivedNotes: 'Arxivlangan eslatmalarni koʻrsatish',
|
||||||
|
hideArchivedNotes: 'Arxivlangan eslatmalarni yashirish',
|
||||||
|
tag: 'Teg',
|
||||||
|
saveFile: 'Faylni saqlash',
|
||||||
|
saveFileAs: 'Faylni sifatida saqlash',
|
||||||
|
openFile: 'Faylni ochish',
|
||||||
|
openNotes: 'Eslatmalarni ochish',
|
||||||
|
debugConsole: 'Nosozliklarni tuzatish konsoli',
|
||||||
|
executedQueries: 'Bajarilgan soʻrovlar',
|
||||||
|
sizeLimitError: 'Maksimal oʻlcham {size} dan oshib ketdi'
|
||||||
|
},
|
||||||
|
faker: {
|
||||||
|
address: 'Manzil',
|
||||||
|
commerce: 'Tijorat',
|
||||||
|
company: 'Kompaniya',
|
||||||
|
database: 'Ma`lumotlar bazasi',
|
||||||
|
date: 'Sana',
|
||||||
|
finance: 'Moliyaviy',
|
||||||
|
git: 'Git',
|
||||||
|
hacker: 'Xaker',
|
||||||
|
internet: 'Internet',
|
||||||
|
lorem: 'Lorem',
|
||||||
|
name: 'Ism',
|
||||||
|
music: 'Musiqa',
|
||||||
|
phone: 'Telefon',
|
||||||
|
random: 'Tasodifiy',
|
||||||
|
system: 'Tizim',
|
||||||
|
time: 'Vaqt',
|
||||||
|
vehicle: 'Transport vositasi',
|
||||||
|
zipCode: 'Pochta kodi',
|
||||||
|
zipCodeByState: 'Shahar pochta kodi',
|
||||||
|
city: 'Shahar',
|
||||||
|
cityPrefix: 'Shahar prefiksi',
|
||||||
|
citySuffix: 'Shahar sufixi',
|
||||||
|
streetName: 'Ko`cha nomi',
|
||||||
|
streetAddress: 'Ko`cha manzili',
|
||||||
|
streetSuffix: 'Ko`cha sufixi',
|
||||||
|
streetPrefix: 'Ko`cha prefiksi',
|
||||||
|
secondaryAddress: 'Ikkinchi manzil',
|
||||||
|
county: 'Okrug',
|
||||||
|
country: 'Davlat',
|
||||||
|
countryCode: 'Davlat kodi',
|
||||||
|
state: 'Viloyat',
|
||||||
|
stateAbbr: 'Viloyat qisqartmasi',
|
||||||
|
latitude: 'Kenglik',
|
||||||
|
longitude: 'Uzunlik',
|
||||||
|
direction: 'Yo`nalish',
|
||||||
|
cardinalDirection: 'Kardinal yo`nalish',
|
||||||
|
ordinalDirection: 'Tartibiy yo`nalish',
|
||||||
|
nearbyGPSCoordinate: 'Yaqin GPS koordinatasi',
|
||||||
|
timeZone: 'Vaqt zonasі',
|
||||||
|
color: 'Rang',
|
||||||
|
department: 'Bo`lim',
|
||||||
|
productName: 'Mahsulot nomi',
|
||||||
|
price: 'Narx',
|
||||||
|
productAdjective: 'Mahsulotga oid sifat',
|
||||||
|
productMaterial: 'Mahsulot materiali',
|
||||||
|
product: 'Mahsulot',
|
||||||
|
productDescription: 'Mahsulot ta`rifi',
|
||||||
|
suffixes: 'Sufikslari',
|
||||||
|
companyName: 'Kompaniya nomi',
|
||||||
|
companySuffix: 'Kompaniya sufixi',
|
||||||
|
catchPhrase: 'Slogan',
|
||||||
|
bs: 'BS',
|
||||||
|
catchPhraseAdjective: 'Slogan sifat',
|
||||||
|
catchPhraseDescriptor: 'Slogan tavsifi',
|
||||||
|
catchPhraseNoun: 'Slogan ot',
|
||||||
|
bsAdjective: 'BS sifat',
|
||||||
|
bsBuzz: 'BS shovqin',
|
||||||
|
bsNoun: 'BS ot',
|
||||||
|
column: 'Ustun',
|
||||||
|
type: 'Tur',
|
||||||
|
collation: 'Taqqoslash',
|
||||||
|
engine: 'Dvigatel',
|
||||||
|
past: 'O`tgan',
|
||||||
|
now: 'Hozir',
|
||||||
|
future: 'Kelajak',
|
||||||
|
between: 'Orasida',
|
||||||
|
recent: 'Yaqinda',
|
||||||
|
soon: 'Tez orada',
|
||||||
|
month: 'Oy',
|
||||||
|
weekday: 'Hafta kuni',
|
||||||
|
account: 'Hisob',
|
||||||
|
accountName: 'Hisob nomi',
|
||||||
|
routingNumber: 'Yo`nalish raqami',
|
||||||
|
mask: 'Maska',
|
||||||
|
amount: 'Miqdor',
|
||||||
|
transactionType: 'Transaksiya turi',
|
||||||
|
currencyCode: 'Valyuta kodi',
|
||||||
|
currencyName: 'Valyuta nomi',
|
||||||
|
currencySymbol: 'Valyuta belgilari',
|
||||||
|
bitcoinAddress: 'Bitcoin hamyoni',
|
||||||
|
litecoinAddress: 'Litecoin hamyoni',
|
||||||
|
creditCardNumber: 'Kredit karta raqami',
|
||||||
|
creditCardCVV: 'CVV kodi',
|
||||||
|
ethereumAddress: 'Ethereum hamyoni',
|
||||||
|
iban: 'Iban',
|
||||||
|
bic: 'Bic',
|
||||||
|
transactionDescription: 'Transaksiya ta`rifi',
|
||||||
|
branch: 'Filial',
|
||||||
|
commitEntry: 'Kommit',
|
||||||
|
commitMessage: 'Kommit xabari',
|
||||||
|
commitSha: 'SHA kommit',
|
||||||
|
shortSha: 'Qisqa SHA',
|
||||||
|
abbreviation: 'Qisqartma',
|
||||||
|
adjective: 'Sifat',
|
||||||
|
noun: 'Ot',
|
||||||
|
verb: 'Fe`l',
|
||||||
|
ingverb: 'Ildiz fe`l',
|
||||||
|
phrase: 'Ibora',
|
||||||
|
avatar: 'Avatar',
|
||||||
|
email: 'Elektron pochta',
|
||||||
|
exampleEmail: 'Elektron pochta misoli',
|
||||||
|
userName: 'Login',
|
||||||
|
protocol: 'Protokol',
|
||||||
|
url: 'Url',
|
||||||
|
domainName: 'Domen nomi',
|
||||||
|
domainSuffix: 'Domen sufixi',
|
||||||
|
domainWord: 'Domen so`zi',
|
||||||
|
ip: 'Ip',
|
||||||
|
ipv6: 'Ipv6',
|
||||||
|
userAgent: 'User agent',
|
||||||
|
mac: 'MAC-manzil',
|
||||||
|
password: 'Parol',
|
||||||
|
word: 'So`z',
|
||||||
|
words: 'So`zlar',
|
||||||
|
sentence: 'Gap',
|
||||||
|
slug: 'Slug',
|
||||||
|
sentences: 'Gaplar',
|
||||||
|
paragraph: 'Paragraf',
|
||||||
|
paragraphs: 'Paragraflar',
|
||||||
|
text: 'Matn',
|
||||||
|
lines: 'Chiziqlar',
|
||||||
|
genre: 'Janr',
|
||||||
|
firstName: 'Ism',
|
||||||
|
lastName: 'Familiya',
|
||||||
|
middleName: 'Otasining ismi',
|
||||||
|
findName: 'To`liq ism',
|
||||||
|
jobTitle: 'Lavozim',
|
||||||
|
gender: 'Jins',
|
||||||
|
prefix: 'Prefiks',
|
||||||
|
suffix: 'Sufiks',
|
||||||
|
title: 'Sarlavha',
|
||||||
|
jobDescriptor: 'Lavozim ta`rifi',
|
||||||
|
jobArea: 'Lavozim sohasi',
|
||||||
|
jobType: 'Lavozim turi',
|
||||||
|
phoneNumber: 'Telefon raqami',
|
||||||
|
phoneNumberFormat: 'Telefon raqami formati',
|
||||||
|
phoneFormats: 'Telefon raqami formatlari',
|
||||||
|
number: 'Raqam',
|
||||||
|
float: 'O`nlik son',
|
||||||
|
arrayElement: 'Massiv elementi',
|
||||||
|
arrayElements: 'Massiv elementlari',
|
||||||
|
objectElement: 'Obyekt elementi',
|
||||||
|
uuid: 'Uuid',
|
||||||
|
boolean: 'Mantiqiy',
|
||||||
|
image: 'Rasm',
|
||||||
|
locale: 'Mahalliy',
|
||||||
|
alpha: 'Harflar',
|
||||||
|
alphaNumeric: 'Alfavitli-sonli',
|
||||||
|
hexaDecimal: 'O`n oltilik',
|
||||||
|
fileName: 'Fayl nomi',
|
||||||
|
commonFileName: 'Ommaviy fayl nomi',
|
||||||
|
mimeType: 'Mime-turi',
|
||||||
|
commonFileType: 'Ommaviy fayl turi',
|
||||||
|
commonFileExt: 'Ommaviy fayl kengaytmasi',
|
||||||
|
fileType: 'Fayl turi',
|
||||||
|
fileExt: 'Fayl kengaytmasi',
|
||||||
|
directoryPath: 'Katalog yo`li',
|
||||||
|
filePath: 'Fayl yo`li',
|
||||||
|
semver: 'Semver',
|
||||||
|
manufacturer: 'Ishlab chiqaruvchi',
|
||||||
|
model: 'Model',
|
||||||
|
fuel: 'Yoqilg`i',
|
||||||
|
vin: 'Vin'
|
||||||
|
}
|
||||||
|
};
|
@@ -117,6 +117,7 @@ export const zhCN = {
|
|||||||
insert: '插入',
|
insert: '插入',
|
||||||
indexes: '索引',
|
indexes: '索引',
|
||||||
foreignKeys: '外键',
|
foreignKeys: '外键',
|
||||||
|
tableChecks: '表检查',
|
||||||
length: '长度',
|
length: '长度',
|
||||||
unsigned: '无符号',
|
unsigned: '无符号',
|
||||||
default: '默认',
|
default: '默认',
|
||||||
@@ -131,6 +132,7 @@ export const zhCN = {
|
|||||||
total: '总计',
|
total: '总计',
|
||||||
table: '表 | 表',
|
table: '表 | 表',
|
||||||
view: '视图 | 视图',
|
view: '视图 | 视图',
|
||||||
|
materializedview: '实体化视图 | 实体化视图',
|
||||||
definer: '定义者',
|
definer: '定义者',
|
||||||
algorithm: '算法',
|
algorithm: '算法',
|
||||||
trigger: '触发器 | 触发器',
|
trigger: '触发器 | 触发器',
|
||||||
@@ -180,12 +182,15 @@ export const zhCN = {
|
|||||||
addNewField: '添加新字段',
|
addNewField: '添加新字段',
|
||||||
manageIndexes: '管理索引',
|
manageIndexes: '管理索引',
|
||||||
manageForeignKeys: '管理外键',
|
manageForeignKeys: '管理外键',
|
||||||
|
manageTableChecks: '管理表 check 约束',
|
||||||
allowNull: '允许 NULL',
|
allowNull: '允许 NULL',
|
||||||
zeroFill: '零填充',
|
zeroFill: '零填充',
|
||||||
customValue: '自定义值',
|
customValue: '自定义值',
|
||||||
onUpdate: '在更新',
|
onUpdate: '在更新',
|
||||||
deleteField: '删除字段',
|
deleteField: '删除字段',
|
||||||
createNewIndex: '创建新索引',
|
createNewIndex: '创建新索引',
|
||||||
|
createNewCheck: '创建新 check 约束',
|
||||||
|
checkClause: 'Check 约束',
|
||||||
addToIndex: '添加到索引',
|
addToIndex: '添加到索引',
|
||||||
createNewTable: '创建新表',
|
createNewTable: '创建新表',
|
||||||
emptyTable: '清空表',
|
emptyTable: '清空表',
|
||||||
@@ -195,6 +200,7 @@ export const zhCN = {
|
|||||||
emptyConfirm: '您是否确认清空',
|
emptyConfirm: '您是否确认清空',
|
||||||
thereAreNoIndexes: '没有索引',
|
thereAreNoIndexes: '没有索引',
|
||||||
thereAreNoForeign: '没有外键',
|
thereAreNoForeign: '没有外键',
|
||||||
|
thereAreNoTableChecks: '没有表 check 约束',
|
||||||
createNewForeign: '创建新外键',
|
createNewForeign: '创建新外键',
|
||||||
referenceTable: '参考表',
|
referenceTable: '参考表',
|
||||||
referenceField: '参考字段',
|
referenceField: '参考字段',
|
||||||
@@ -207,6 +213,7 @@ export const zhCN = {
|
|||||||
updateOption: '更新选项',
|
updateOption: '更新选项',
|
||||||
deleteView: '删除视图',
|
deleteView: '删除视图',
|
||||||
createNewView: '创建新视图',
|
createNewView: '创建新视图',
|
||||||
|
createNewMaterializedView: '创建新实体化视图',
|
||||||
deleteTrigger: '删除触发器',
|
deleteTrigger: '删除触发器',
|
||||||
createNewTrigger: '创建新触发器',
|
createNewTrigger: '创建新触发器',
|
||||||
currentUser: '当前用户',
|
currentUser: '当前用户',
|
||||||
@@ -239,6 +246,7 @@ export const zhCN = {
|
|||||||
thereAreNoTableFields: '没有表的字段',
|
thereAreNoTableFields: '没有表的字段',
|
||||||
newTable: '新表',
|
newTable: '新表',
|
||||||
newView: '新视图',
|
newView: '新视图',
|
||||||
|
newMaterializedView: '新实体化视图',
|
||||||
newTrigger: '新触发器',
|
newTrigger: '新触发器',
|
||||||
newRoutine: '新例程',
|
newRoutine: '新例程',
|
||||||
newFunction: '新函数',
|
newFunction: '新函数',
|
||||||
@@ -300,6 +308,7 @@ export const zhCN = {
|
|||||||
color: '颜色',
|
color: '颜色',
|
||||||
label: '标签',
|
label: '标签',
|
||||||
icon: '图标',
|
icon: '图标',
|
||||||
|
customIcon: '定制图标',
|
||||||
fileName: '文件名称',
|
fileName: '文件名称',
|
||||||
choseFile: '选择文件',
|
choseFile: '选择文件',
|
||||||
data: '数据',
|
data: '数据',
|
||||||
@@ -324,7 +333,7 @@ export const zhCN = {
|
|||||||
wrapLongLines: '将长行换行显示',
|
wrapLongLines: '将长行换行显示',
|
||||||
markdownSupported: '支持 Markdown',
|
markdownSupported: '支持 Markdown',
|
||||||
plantATree: '种植一棵树',
|
plantATree: '种植一棵树',
|
||||||
dataTabPageSize: '数据标签的页面大小',
|
dataTabPageSize: '每页结果',
|
||||||
noOpenTabs: '没有打开的标签, 请在左侧栏上导航或:',
|
noOpenTabs: '没有打开的标签, 请在左侧栏上导航或:',
|
||||||
restorePreviousSession: '恢复上一个会话',
|
restorePreviousSession: '恢复上一个会话',
|
||||||
closeTab: '关闭标签',
|
closeTab: '关闭标签',
|
||||||
@@ -348,7 +357,6 @@ export const zhCN = {
|
|||||||
saveContent: '保存内容',
|
saveContent: '保存内容',
|
||||||
openAllConnections: '打开所有连接',
|
openAllConnections: '打开所有连接',
|
||||||
openSettings: '打开设置',
|
openSettings: '打开设置',
|
||||||
openScratchpad: '打开草稿栏',
|
|
||||||
runOrReload: '运行或重新加载',
|
runOrReload: '运行或重新加载',
|
||||||
openFilter: '打开过滤器',
|
openFilter: '打开过滤器',
|
||||||
nextResultsPage: '下一个结果页',
|
nextResultsPage: '下一个结果页',
|
||||||
@@ -356,6 +364,8 @@ export const zhCN = {
|
|||||||
editFolder: '编辑文件夹',
|
editFolder: '编辑文件夹',
|
||||||
folderName: '文件夹名称',
|
folderName: '文件夹名称',
|
||||||
deleteFolder: '删除文件夹',
|
deleteFolder: '删除文件夹',
|
||||||
|
newFolder: '新文件夹',
|
||||||
|
outOfFolder: '',
|
||||||
editConnectionAppearance: '编辑连接的外观',
|
editConnectionAppearance: '编辑连接的外观',
|
||||||
defaultCopyType: '默认复制类型',
|
defaultCopyType: '默认复制类型',
|
||||||
showTableSize: '在侧边栏显示表大小',
|
showTableSize: '在侧边栏显示表大小',
|
||||||
@@ -394,7 +404,10 @@ export const zhCN = {
|
|||||||
saveFile: '保存文件',
|
saveFile: '保存文件',
|
||||||
saveFileAs: '将文件另存为',
|
saveFileAs: '将文件另存为',
|
||||||
openFile: '打开文件',
|
openFile: '打开文件',
|
||||||
openNotes: '打开笔记'
|
openNotes: '打开笔记',
|
||||||
|
debugConsole: '调试控制台',
|
||||||
|
executedQueries: '执行的查询',
|
||||||
|
sizeLimitError: '超过 {size} 的最大大小'
|
||||||
},
|
},
|
||||||
faker: { // Faker.js 方法,用于随机生成的内容
|
faker: { // Faker.js 方法,用于随机生成的内容
|
||||||
address: '地址',
|
address: '地址',
|
||||||
|
@@ -1,18 +1,15 @@
|
|||||||
import { ConnectionParams, IpcResponse } from 'common/interfaces/antares';
|
import { ConnectionParams, IpcResponse } from 'common/interfaces/antares';
|
||||||
import { ipcRenderer } from 'electron';
|
import { ipcRenderer } from 'electron';
|
||||||
|
|
||||||
import connStringConstruct from '../libs/connStringDecode';
|
|
||||||
import { unproxify } from '../libs/unproxify';
|
import { unproxify } from '../libs/unproxify';
|
||||||
|
|
||||||
export default class {
|
export default class {
|
||||||
static makeTest (params: ConnectionParams & { pgConnString?: string }): Promise<IpcResponse> {
|
static makeTest (params: ConnectionParams & { connString?: string }): Promise<IpcResponse> {
|
||||||
const newParams = connStringConstruct(params) as ConnectionParams;
|
return ipcRenderer.invoke('test-connection', unproxify(params));
|
||||||
return ipcRenderer.invoke('test-connection', unproxify(newParams));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static connect (params: ConnectionParams & { pgConnString?: string }): Promise<IpcResponse> {
|
static connect (params: ConnectionParams & { connString?: string }): Promise<IpcResponse> {
|
||||||
const newParams = connStringConstruct(params) as ConnectionParams;
|
return ipcRenderer.invoke('connect', unproxify(params));
|
||||||
return ipcRenderer.invoke('connect', unproxify(newParams));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static abortConnection (uid: string): void {
|
static abortConnection (uid: string): void {
|
||||||
|
@@ -1,50 +0,0 @@
|
|||||||
import { ConnectionParams } from 'common/interfaces/antares';
|
|
||||||
import * as formatter from 'pg-connection-string'; // parses a connection string
|
|
||||||
|
|
||||||
const formatHost = (host: string) => {
|
|
||||||
const results = host === 'localhost' ? '127.0.0.1' : host;
|
|
||||||
return results;
|
|
||||||
};
|
|
||||||
|
|
||||||
const checkForSSl = (conn: string) => {
|
|
||||||
return conn.includes('ssl=true');
|
|
||||||
};
|
|
||||||
|
|
||||||
const connStringConstruct = (args: ConnectionParams & { pgConnString?: string }): ConnectionParams => {
|
|
||||||
if (!args.pgConnString)
|
|
||||||
return args;
|
|
||||||
|
|
||||||
if (typeof args.pgConnString !== 'string')
|
|
||||||
return args;
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
const stringArgs: any = formatter.parse(args.pgConnString);
|
|
||||||
|
|
||||||
const client = args.client || 'pg';
|
|
||||||
|
|
||||||
args.client = client;
|
|
||||||
args.host = formatHost(stringArgs.host);
|
|
||||||
args.database = stringArgs.database;
|
|
||||||
args.port = stringArgs.port || '5432';
|
|
||||||
args.user = stringArgs.user;
|
|
||||||
args.password = stringArgs.password;
|
|
||||||
|
|
||||||
// ssh
|
|
||||||
args.ssh = stringArgs.ssh || args.ssh;
|
|
||||||
args.sshHost = stringArgs.sshHost;
|
|
||||||
args.sshUser = stringArgs.sshUser;
|
|
||||||
args.sshPass = stringArgs.sshPass;
|
|
||||||
args.sshKey = stringArgs.sshKey;
|
|
||||||
args.sshPort = stringArgs.sshPort;
|
|
||||||
|
|
||||||
// ssl mode
|
|
||||||
args.ssl = checkForSSl(args.pgConnString) || args.ssl;
|
|
||||||
args.cert = stringArgs.sslcert;
|
|
||||||
args.key = stringArgs.sslkey;
|
|
||||||
args.ca = stringArgs.sslrootcert;
|
|
||||||
args.ciphers = stringArgs.ciphers;
|
|
||||||
|
|
||||||
return args;
|
|
||||||
};
|
|
||||||
|
|
||||||
export default connStringConstruct;
|
|
@@ -25,12 +25,13 @@ export interface SidebarElement {
|
|||||||
|
|
||||||
export interface CustomIcon {base64: string; uid: string}
|
export interface CustomIcon {base64: string; uid: string}
|
||||||
|
|
||||||
if (!key) { // If no key in local storace
|
if (!key) { // If no key in local storage
|
||||||
const storedKey = ipcRenderer.sendSync('get-key');// Ask for key stored on disk
|
const storedKey = ipcRenderer.sendSync('get-key');// Ask for key stored on disk
|
||||||
|
|
||||||
if (!storedKey) { // Of nop stored key on disk
|
if (!storedKey) { // If not stored key on disk
|
||||||
const newKey = crypto.randomBytes(16).toString('hex');
|
const newKey = crypto.randomBytes(16).toString('hex');
|
||||||
localStorage.setItem('key', newKey);
|
localStorage.setItem('key', newKey);
|
||||||
|
ipcRenderer.send('set-key', newKey);
|
||||||
key = newKey;
|
key = newKey;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@@ -147,7 +147,7 @@ export const useWorkspacesStore = defineStore('workspaces', {
|
|||||||
else
|
else
|
||||||
this.selectedWorkspace = uid;
|
this.selectedWorkspace = uid;
|
||||||
},
|
},
|
||||||
async connectWorkspace (connection: ConnectionParams & { pgConnString?: string }, args?: {mode?: string; signal?: AbortSignal}) {
|
async connectWorkspace (connection: ConnectionParams & { connString?: string }, args?: {mode?: string; signal?: AbortSignal}) {
|
||||||
this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === connection.uid
|
this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === connection.uid
|
||||||
? {
|
? {
|
||||||
...workspace,
|
...workspace,
|
||||||
@@ -427,7 +427,7 @@ export const useWorkspacesStore = defineStore('workspaces', {
|
|||||||
|
|
||||||
this.selectTab({ uid, tab: 0 });
|
this.selectTab({ uid, tab: 0 });
|
||||||
},
|
},
|
||||||
async switchConnection (connection: ConnectionParams & { pgConnString?: string }) {
|
async switchConnection (connection: ConnectionParams & { connString?: string }) {
|
||||||
await Connection.disconnect(connection.uid);
|
await Connection.disconnect(connection.uid);
|
||||||
return this.connectWorkspace(connection, { mode: 'switch' });
|
return this.connectWorkspace(connection, { mode: 'switch' });
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user