1
1
mirror of https://github.com/Fabio286/antares.git synced 2025-06-05 21:59:22 +02:00

Compare commits

..

41 Commits

Author SHA1 Message Date
c1891dd5de chore(release): 0.7.16 2023-08-26 15:21:02 +02:00
53fe986bcb Merge branch 'master' of https://github.com/antares-sql/antares into beta 2023-08-26 15:19:45 +02:00
d702ce3fa9 chore(release): 0.7.16-beta.1 2023-08-18 12:22:56 +02:00
63544e95da Merge branch 'feat/export-connections' of https://github.com/antares-sql/antares into develop 2023-08-18 12:12:05 +02:00
6df214558f feat: ability to import connections 2023-08-18 12:11:08 +02:00
f5b86e59e7 feat: ability to export connections 2023-08-17 13:48:55 +02:00
28f14c9195 Merge pull request #653 from antares-sql/all-contributors/add-Lawondyss
docs: add Lawondyss as a contributor for translation
2023-08-14 12:17:38 +02:00
allcontributors[bot]
90922e6f96 docs: update .all-contributorsrc [skip ci] 2023-08-14 10:17:13 +00:00
allcontributors[bot]
4b414df7e4 docs: update README.md [skip ci] 2023-08-14 10:17:12 +00:00
27f0068415 Merge pull request #652 from Lawondyss/develop
Add CZ translation and titles for buttons
2023-08-14 12:16:44 +02:00
Ladislav Vondráček
52e42fa1b5 fix: add some missing titles of buttons 2023-08-14 11:50:38 +02:00
Ladislav Vondráček
5b9b539bc7 chore(i18n): add czech translation 2023-08-14 11:47:41 +02:00
832aa75ebe fix(SQLite): improved view body parsing 2023-08-14 10:44:36 +02:00
aba67f3872 refactor(translation): refactor ca-ES to new format 2023-08-14 09:16:40 +02:00
5a1644f023 Merge branches 'develop' and 'master' of https://github.com/antares-sql/antares into develop 2023-08-14 09:07:55 +02:00
e372712556 Merge pull request #651 from antares-sql/all-contributors/add-markusand
docs: add markusand as a contributor for translation
2023-08-14 09:06:55 +02:00
d4727a7d20 Merge pull request #649 from markusand/master
feat: Add support for catalan language
2023-08-14 09:06:42 +02:00
allcontributors[bot]
f2c2f33afa docs: update .all-contributorsrc [skip ci] 2023-08-14 07:06:40 +00:00
allcontributors[bot]
6dc4bdd0c0 docs: update README.md [skip ci] 2023-08-14 07:06:39 +00:00
Marc Vilella
9c6f1a9ea5 feat: Add catalan language 2023-08-13 19:20:26 +02:00
dd264f802e ci: update snapcraft.yaml 2023-08-11 18:12:38 +02:00
fed0e10702 Merge branch 'master' of https://github.com/antares-sql/antares into beta 2023-08-11 17:34:50 +02:00
e7ce4ef6ed Merge branch 'master' of https://github.com/antares-sql/antares 2023-08-11 17:34:30 +02:00
e03f2eef49 ci: update snapcraft.yaml 2023-08-11 17:34:27 +02:00
3a77f0818d chore(release): 0.7.16-beta.0 2023-08-11 16:50:20 +02:00
6cd2f89bbf refactor: ts improvements 2023-08-11 16:42:34 +02:00
16ec82eb7e Merge branch 'develop' of https://github.com/antares-sql/antares into beta 2023-08-11 16:30:16 +02:00
84b2255bf4 feat: ability to export a table dump from table context menu 2023-08-11 11:49:49 +02:00
2e39d810b5 feat: ability to change sql dump file name 2023-08-11 09:52:25 +02:00
56918d89c7 Merge branch 'master' of https://github.com/antares-sql/antares into develop 2023-08-09 18:45:05 +02:00
083198af8f chore: update README.md 2023-08-09 18:44:31 +02:00
ad7e459c68 feat: support to links in changelog 2023-08-08 18:05:27 +02:00
8c4c93cb07 chore(translation): add translation helper script 2023-08-04 12:28:03 +02:00
eee85d24b7 ci: update snapcraft.yml 2023-08-03 18:36:27 +02:00
92fe029906 refactor: minor translation improvements 2023-08-03 18:36:09 +02:00
1dd2147b68 refactor(translation): complete refactor of translations structure 2023-08-03 18:28:50 +02:00
5a54e7ac33 Merge branch 'master' of https://github.com/antares-sql/antares into beta 2023-08-02 09:21:24 +02:00
c19bac2373 Merge branch 'master' of https://github.com/antares-sql/antares into develop 2023-08-02 09:20:29 +02:00
7b1cb4ff86 fix(MySQL): missing error details on mysql importer with some exceptione 2023-08-01 10:04:00 +02:00
f120af25f4 build(deps): update mysql2 2023-08-01 10:02:35 +02:00
473c4636cf ci: arrangements for beta channel 2023-07-31 10:55:05 +02:00
110 changed files with 4662 additions and 2584 deletions

View File

@@ -239,6 +239,24 @@
"contributions": [
"platform"
]
},
{
"login": "markusand",
"name": "Marc Vilella",
"avatar_url": "https://avatars.githubusercontent.com/u/12972543?v=4",
"profile": "https://github.com/markusand",
"contributions": [
"translation"
]
},
{
"login": "Lawondyss",
"name": "Ladislav Vondráček",
"avatar_url": "https://avatars.githubusercontent.com/u/272130?v=4",
"profile": "https://github.com/Lawondyss",
"contributions": [
"translation"
]
}
],
"contributorsPerLine": 7,

View File

@@ -17,6 +17,12 @@ jobs:
os: [macos-11, ubuntu-latest, windows-latest]
steps:
- name: Exit if not on master branch
if: contains(env.BRANCH_NAME, 'master') == false
run: |
echo "Wrong environment ${{env.BRANCH_NAME}}"
exit 0
- name: Check out Git repository
uses: actions/checkout@v3
with:

View File

@@ -2,6 +2,37 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
### [0.7.16](https://github.com/antares-sql/antares/compare/v0.7.16-beta.1...v0.7.16) (2023-08-26)
### [0.7.16-beta.1](https://github.com/antares-sql/antares/compare/v0.7.16-beta.0...v0.7.16-beta.1) (2023-08-18)
### Features
* ability to export connections ([f5b86e5](https://github.com/antares-sql/antares/commit/f5b86e59e7e41bbbe1555ec8a85ec1f849e8271d))
* ability to import connections ([6df2145](https://github.com/antares-sql/antares/commit/6df214558f8186dd5fbf101505465f4c07c8ad5f))
* Add catalan language ([9c6f1a9](https://github.com/antares-sql/antares/commit/9c6f1a9ea52b4791082bdbae91b764c486684c3b))
### Bug Fixes
* add some missing titles of buttons ([52e42fa](https://github.com/antares-sql/antares/commit/52e42fa1b529512154c0680124c5e425964a5b1a))
* **SQLite:** improved view body parsing ([832aa75](https://github.com/antares-sql/antares/commit/832aa75ebe46776b9c365dde2dd13db3746adcd5))
### [0.7.16-beta.0](https://github.com/antares-sql/antares/compare/v0.7.15...v0.7.16-beta.0) (2023-08-11)
### Features
* ability to change sql dump file name ([2e39d81](https://github.com/antares-sql/antares/commit/2e39d810b519401d0410cbb76520c07c595329fc))
* ability to export a table dump from table context menu ([84b2255](https://github.com/antares-sql/antares/commit/84b2255bf405431070511890b2bca770fc4cc2bc))
* support to links in changelog ([ad7e459](https://github.com/antares-sql/antares/commit/ad7e459c689d70ca664b9a3091d3dcab3f26ce4d))
### Bug Fixes
* **MySQL:** missing error details on mysql importer with some exceptione ([7b1cb4f](https://github.com/antares-sql/antares/commit/7b1cb4ff86dddb5fb4b4d960b47ea17f38a24aa6))
### [0.7.15](https://github.com/antares-sql/antares/compare/v0.7.14...v0.7.15) (2023-07-31)

View File

@@ -7,7 +7,8 @@
# Antares SQL Client
![GitHub package.json version](https://img.shields.io/github/package-json/v/fabio286/antares) ![GitHub](https://img.shields.io/github/license/fabio286/antares) [![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Ffabio286%2Fantares%2Fbadge&style=flat)](https://actions-badge.atrox.dev/fabio286/antares/goto) [![antares](https://snapcraft.io/antares/badge.svg)](https://snapcraft.io/antares) [![antares](https://snapcraft.io/antares/trending.svg?name=0)](https://snapcraft.io/antares) [![Twitter Follow](https://img.shields.io/twitter/follow/AntaresSQL?style=social)](https://twitter.com/AntaresSQL) [![Plant a Tree](https://raw.githubusercontent.com/Fabio286/treedom-badge/master/svg/plant-a-tree.svg)](https://www.treedom.net/en/user/fabio-di-stasio/event/antares-for-the-planet)
![GitHub package.json version](https://img.shields.io/github/package-json/v/fabio286/antares) ![GitHub](https://img.shields.io/github/license/fabio286/antares) [![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Ffabio286%2Fantares%2Fbadge&style=flat)](https://actions-badge.atrox.dev/fabio286/antares/goto) [![antares](https://snapcraft.io/antares/badge.svg)](https://snapcraft.io/antares) [![antares](https://snapcraft.io/antares/trending.svg?name=0)](https://snapcraft.io/antares)
![Mastodon Follow](https://img.shields.io/mastodon/follow/%20110860460902482117?domain=https%3A%2F%2Ffosstodon.org&style=social) [![Twitter Follow](https://img.shields.io/twitter/follow/AntaresSQL?style=social)](https://twitter.com/AntaresSQL) [![Plant a Tree](https://raw.githubusercontent.com/Fabio286/treedom-badge/master/svg/plant-a-tree.svg)](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.
Our target is to support as many databases as possible, and all major operating systems, including the ARM versions.
@@ -17,7 +18,7 @@ However, there are all the features necessary to have a pleasant database manage
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).
👁 To stay tuned for new releases [follow Antares SQL](https://twitter.com/AntaresSQL) on Twitter.
👁 To stay tuned for new releases follow Antares SQL on [Mastodon](https://fosstodon.org/@AntaresSQL) or [Twitter](https://twitter.com/AntaresSQL).
🌟 Don't forget to **leave a star** if you appreciate this project.
🗳️ Polls:
@@ -152,6 +153,8 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
<td align="center" valign="top" width="14.28%"><a href="https://github.com/m1khal3v"><img src="https://avatars.githubusercontent.com/u/41085561?v=4?s=100" width="100px;" alt="Anton Mikhalev"/><br /><sub><b>Anton Mikhalev</b></sub></a><br /><a href="#translation-m1khal3v" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://64k.nl/"><img src="https://avatars.githubusercontent.com/u/3864423?v=4?s=100" width="100px;" alt="René"/><br /><sub><b>René</b></sub></a><br /><a href="https://github.com/antares-sql/antares/commits?author=64knl" title="Code">💻</a> <a href="#translation-64knl" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/zxp19821005"><img src="https://avatars.githubusercontent.com/u/4915850?v=4?s=100" width="100px;" alt="Woodenman"/><br /><sub><b>Woodenman</b></sub></a><br /><a href="#platform-zxp19821005" title="Packaging/porting to new platform">📦</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/markusand"><img src="https://avatars.githubusercontent.com/u/12972543?v=4?s=100" width="100px;" alt="Marc Vilella"/><br /><sub><b>Marc Vilella</b></sub></a><br /><a href="#translation-markusand" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Lawondyss"><img src="https://avatars.githubusercontent.com/u/272130?v=4?s=100" width="100px;" alt="Ladislav Vondráček"/><br /><sub><b>Ladislav Vondráček</b></sub></a><br /><a href="#translation-Lawondyss" title="Translation">🌍</a></td>
</tr>
</tbody>
</table>

195
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "antares",
"version": "0.7.15",
"version": "0.7.16",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "antares",
"version": "0.7.15",
"version": "0.7.16",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
@@ -27,7 +27,7 @@
"leaflet": "~1.7.1",
"marked": "~4.0.19",
"moment": "~2.29.4",
"mysql2": "~2.3.2",
"mysql2": "~3.5.2",
"node-firebird": "~1.1.4",
"pg": "~8.11.1",
"pg-connection-string": "~2.5.0",
@@ -89,6 +89,7 @@
"stylelint-scss": "~4.3.0",
"tree-kill": "~1.2.2",
"ts-loader": "~9.2.8",
"ts-node": "~10.9.1",
"typescript": "~4.6.3",
"unzip-crx-3": "~0.2.0",
"vue-eslint-parser": "~8.3.0",
@@ -1697,6 +1698,28 @@
"node": ">=6.9.0"
}
},
"node_modules/@cspotcode/source-map-support": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
"integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
"dev": true,
"dependencies": {
"@jridgewell/trace-mapping": "0.3.9"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
"version": "0.3.9",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
"integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
"dev": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.0.3",
"@jridgewell/sourcemap-codec": "^1.4.10"
}
},
"node_modules/@csstools/selector-specificity": {
"version": "2.2.0",
"dev": true,
@@ -2148,6 +2171,30 @@
"node": ">=10"
}
},
"node_modules/@tsconfig/node10": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
"integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
"dev": true
},
"node_modules/@tsconfig/node12": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
"integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
"dev": true
},
"node_modules/@tsconfig/node14": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
"integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
"dev": true
},
"node_modules/@tsconfig/node16": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
"integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
"dev": true
},
"node_modules/@turf/helpers": {
"version": "6.5.0",
"license": "MIT",
@@ -3116,6 +3163,15 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
"node_modules/acorn-walk": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
"integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
"dev": true,
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/add-stream": {
"version": "1.0.0",
"dev": true,
@@ -3387,6 +3443,12 @@
"dev": true,
"license": "ISC"
},
"node_modules/arg": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
"dev": true
},
"node_modules/argparse": {
"version": "2.0.1",
"license": "Python-2.0"
@@ -4881,6 +4943,12 @@
"node": ">=10.0.0"
}
},
"node_modules/create-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
"dev": true
},
"node_modules/cross-env": {
"version": "7.0.3",
"dev": true,
@@ -5279,6 +5347,15 @@
"dev": true,
"license": "Apache-2.0"
},
"node_modules/diff": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
"dev": true,
"engines": {
"node": ">=0.3.1"
}
},
"node_modules/dir-compare": {
"version": "2.4.0",
"dev": true,
@@ -9170,6 +9247,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/make-error": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
"dev": true
},
"node_modules/map-obj": {
"version": "4.3.0",
"dev": true,
@@ -9664,15 +9747,16 @@
"license": "ISC"
},
"node_modules/mysql2": {
"version": "2.3.3",
"license": "MIT",
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.5.2.tgz",
"integrity": "sha512-cptobmhYkYeTBIFp2c0piw2+gElpioga1rUw5UidHvo8yaHijMZoo8A3zyBVoo/K71f7ZFvrShA9iMIy9dCzCA==",
"dependencies": {
"denque": "^2.0.1",
"denque": "^2.1.0",
"generate-function": "^2.3.1",
"iconv-lite": "^0.6.3",
"long": "^4.0.0",
"lru-cache": "^6.0.0",
"named-placeholders": "^1.1.2",
"long": "^5.2.1",
"lru-cache": "^8.0.0",
"named-placeholders": "^1.1.3",
"seq-queue": "^0.0.5",
"sqlstring": "^2.3.2"
},
@@ -9680,19 +9764,18 @@
"node": ">= 8.0"
}
},
"node_modules/mysql2/node_modules/lru-cache": {
"version": "6.0.0",
"license": "ISC",
"dependencies": {
"yallist": "^4.0.0"
},
"engines": {
"node": ">=10"
}
"node_modules/mysql2/node_modules/long": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
"integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
},
"node_modules/mysql2/node_modules/yallist": {
"version": "4.0.0",
"license": "ISC"
"node_modules/mysql2/node_modules/lru-cache": {
"version": "8.0.5",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz",
"integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==",
"engines": {
"node": ">=16.14"
}
},
"node_modules/named-placeholders": {
"version": "1.1.3",
@@ -13635,6 +13718,61 @@
"dev": true,
"license": "ISC"
},
"node_modules/ts-node": {
"version": "10.9.1",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
"integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
"dev": true,
"dependencies": {
"@cspotcode/source-map-support": "^0.8.0",
"@tsconfig/node10": "^1.0.7",
"@tsconfig/node12": "^1.0.7",
"@tsconfig/node14": "^1.0.0",
"@tsconfig/node16": "^1.0.2",
"acorn": "^8.4.1",
"acorn-walk": "^8.1.1",
"arg": "^4.1.0",
"create-require": "^1.1.0",
"diff": "^4.0.1",
"make-error": "^1.1.1",
"v8-compile-cache-lib": "^3.0.1",
"yn": "3.1.1"
},
"bin": {
"ts-node": "dist/bin.js",
"ts-node-cwd": "dist/bin-cwd.js",
"ts-node-esm": "dist/bin-esm.js",
"ts-node-script": "dist/bin-script.js",
"ts-node-transpile-only": "dist/bin-transpile.js",
"ts-script": "dist/bin-script-deprecated.js"
},
"peerDependencies": {
"@swc/core": ">=1.2.50",
"@swc/wasm": ">=1.2.50",
"@types/node": "*",
"typescript": ">=2.7"
},
"peerDependenciesMeta": {
"@swc/core": {
"optional": true
},
"@swc/wasm": {
"optional": true
}
}
},
"node_modules/ts-node/node_modules/acorn": {
"version": "8.10.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
"integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
},
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/tsconfig-paths": {
"version": "3.14.2",
"dev": true,
@@ -14015,6 +14153,12 @@
"dev": true,
"license": "MIT"
},
"node_modules/v8-compile-cache-lib": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
"dev": true
},
"node_modules/validate-npm-package-license": {
"version": "3.0.4",
"dev": true,
@@ -14940,6 +15084,15 @@
"fd-slicer": "~1.1.0"
}
},
"node_modules/yn": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/yocto-queue": {
"version": "0.1.0",
"dev": true,

View File

@@ -1,7 +1,7 @@
{
"name": "antares",
"productName": "Antares",
"version": "0.7.15",
"version": "0.7.16",
"description": "A modern, fast and productivity driven SQL client with a focus in UX.",
"license": "MIT",
"repository": "https://github.com/antares-sql/antares.git",
@@ -19,6 +19,7 @@
"release:beta": "npm run release -- --prerelease beta",
"devtools:install": "node scripts/devtoolsInstaller",
"postinstall": "electron-builder install-app-deps",
"translation:check": "ts-node ./scripts/translationCheck.ts",
"test:e2e": "npm run compile && npm run test:e2e-dry",
"test:e2e-dry": "xvfb-maybe -- playwright test",
"lint": "eslint . --ext .js,.ts,.vue && stylelint \"./src/**/*.{css,scss,sass,vue}\"",
@@ -66,6 +67,7 @@
"target": "deb",
"arch": [
"x64",
"arm64",
"armv7l"
]
},
@@ -73,6 +75,7 @@
"target": "AppImage",
"arch": [
"x64",
"arm64",
"armv7l"
]
}
@@ -134,7 +137,7 @@
"leaflet": "~1.7.1",
"marked": "~4.0.19",
"moment": "~2.29.4",
"mysql2": "~2.3.2",
"mysql2": "~3.5.2",
"node-firebird": "~1.1.4",
"pg": "~8.11.1",
"pg-connection-string": "~2.5.0",
@@ -196,6 +199,7 @@
"stylelint-scss": "~4.3.0",
"tree-kill": "~1.2.2",
"ts-loader": "~9.2.8",
"ts-node": "~10.9.1",
"typescript": "~4.6.3",
"unzip-crx-3": "~0.2.0",
"vue-eslint-parser": "~8.3.0",

View File

@@ -0,0 +1,45 @@
/* eslint-disable @typescript-eslint/ban-ts-comment */
import { localesNames } from '../src/renderer/i18n/supported-locales';
import { enUS } from '../src/renderer/i18n/en-US';
const locale = process.argv[2];
let fullCount = 0;
let checkCount = 0;
if (!locale) {
console.log('Please specify locale code as first argument.');
process.exit();
}
if (!Object.keys(localesNames).includes(locale)) {
console.log(`Translation ${locale} not fount in supported locales.`);
process.exit();
}
console.log('Checking missing translations for:', locale);
const i18nFile = require(`../src/renderer/i18n/${locale}`)[locale.replace('-', '')];
for (const group in enUS) {
// @ts-ignore
fullCount += Object.keys(enUS[group]).length;
if (!Object.keys(i18nFile).includes(group)) {
console.log(`Group "\u001b[31m${group}\u001b[0m" missing!`);
continue;
}
// @ts-ignore
for (const term in enUS[group]) {
if (!Object.keys(i18nFile[group]).includes(term))
console.log(`Translation "\u001b[33m${group}.${term}\u001b[0m" missing!`);
// @ts-ignore
else if (i18nFile[group][term] === enUS[group][term]) {
console.log(`Term "\u001b[36m${group}.${term}\u001b[0m" not translated!`);
checkCount++;
}
else
checkCount++;
}
}
console.log(checkCount, 'of', fullCount, 'strings are present in', locale, `(\u001b[32m${(checkCount*100/fullCount).toFixed(1)}%\u001b[0m)`);

View File

@@ -4,7 +4,7 @@ summary: Open source SQL client made to be simple and complete.
description: |
Antares is an SQL client that aims to become an useful and complete tool, especially for developers.
The target is to support as many databases as possible, and all major operating systems, including the ARM versions.
base: core20
base: core22
grade: stable
confinement: strict
@@ -31,10 +31,10 @@ parts:
fi
# Get the latest releases json
echo "Get GitHub releases..."
wget --quiet https://api.github.com/repos/fabio286/antares/releases/latest -O releases.json
wget --quiet https://api.github.com/repos/fabio286/antares/releases -O releases.json
# Get the version from the tag_name and the download URL.
VERSION=$(jq . releases.json | grep tag_name | cut -d'"' -f4 | sed s'/release-//')
DEB_URL=$(cat releases.json | jq -r ".assets[] | select(.name | test(\"${FILTER}\")) | .browser_download_url")
VERSION=$(jq . releases.json | grep tag_name | head -1 | cut -d'"' -f4 | sed s'/release-//')
DEB_URL=$(cat releases.json | jq -r ".[0].assets[] | select(.name | test(\"${FILTER}\")) | .browser_download_url")
DEB=$(basename "${DEB_URL}")
echo "Downloading ${DEB_URL}..."
wget --quiet "${DEB_URL}" -O "${SNAPCRAFT_PART_INSTALL}/${DEB}"
@@ -79,7 +79,7 @@ parts:
- libdb5.3
- libdbus-1-3
- libexpat1
- libffi7
- libffi8
- libgcc-s1
- libgcrypt20
- libglib2.0-0
@@ -87,9 +87,9 @@ parts:
- libgnutls30
- libgpg-error0
- libgssapi-krb5-2
- libhogweed5
- libhogweed6
- libidn2-0
- libjson-c4
- libjson-c5
- libk5crypto3
- libkeyutils1
- libkrb5-3
@@ -97,12 +97,12 @@ parts:
- liblz4-1
- liblzma5
- libmount1
- libnettle7
- libnettle8
- libp11-kit0
- libpcre2-8-0
- libselinux1
- libsqlite3-0
- libssl1.1
- libssl3
- libstdc++6
- libsystemd0
- libtasn1-6
@@ -119,10 +119,10 @@ parts:
cleanup:
after: [antares]
plugin: nil
build-snaps: [gnome-3-38-2004]
build-snaps: [gnome-42-2204]
override-prime: |
set -eux
cd /snap/gnome-3-38-2004/current
cd /snap/gnome-42-2204/current
find . -type f,l -exec rm -f $SNAPCRAFT_PRIME/{} \;
mdns-lookup:
@@ -136,7 +136,7 @@ parts:
- libnss-mdns
override-prime: |
set -eux
sed -Ee 's/^\s*hosts:(\s+)files/hosts:\1files mdns4_minimal \[NOTFOUND=return\]/' /snap/core20/current/etc/nsswitch.conf > $SNAPCRAFT_STAGE/etc/nsswitch.conf
sed -Ee 's/^\s*hosts:(\s+)files/hosts:\1files mdns4_minimal \[NOTFOUND=return\]/' /snap/core22/current/etc/nsswitch.conf > $SNAPCRAFT_STAGE/etc/nsswitch.conf
snapcraftctl prime
prime:
- lib/$SNAPCRAFT_ARCH_TRIPLET/libnss_mdns4_minimal*
@@ -146,10 +146,7 @@ apps:
antares:
command: opt/Antares/antares --no-sandbox
desktop: usr/share/applications/antares.desktop
extensions: [gnome-3-38]
environment:
# Fallback to XWayland if running in a Wayland session.
DISABLE_WAYLAND: 1
extensions: [gnome]
plugs:
- browser-support
- cups-control

View File

@@ -0,0 +1,31 @@
import * as crypto from 'crypto';
const algorithm = 'aes-256-gcm';
function encrypt (text: string, password: string) {
const iv = crypto.randomBytes(16);
const key = crypto.scryptSync(password, 'antares', 32);
const cipher = crypto.createCipheriv(algorithm, key, iv);
const encrypted = Buffer.concat([cipher.update(text), cipher.final()]);
const authTag = cipher.getAuthTag();
return {
iv: iv.toString('hex'),
authTag: authTag.toString('hex'),
content: encrypted.toString('hex')
};
}
function decrypt (hash: { iv: string; content: string; authTag: string }, password: string) {
const key = crypto.scryptSync(password, 'antares', 32);
const decipher = crypto.createDecipheriv(algorithm, key, Buffer.from(hash.iv, 'hex'));
decipher.setAuthTag(Buffer.from(hash.authTag, 'hex'));
const decrpyted = decipher.update(hash.content, 'hex', 'utf8') + decipher.final('utf8');
return decrpyted;
}
export {
encrypt,
decrypt
};

View File

@@ -1,22 +1,22 @@
export const shortcutEvents: { [key: string]: { l18n: string; l18nParam?: string | number; context?: 'tab' }} = {
'run-or-reload': { l18n: 'message.runOrReload', context: 'tab' },
'open-new-tab': { l18n: 'message.openNewTab', context: 'tab' },
'close-tab': { l18n: 'message.closeTab', context: 'tab' },
'format-query': { l18n: 'message.formatQuery', context: 'tab' },
'kill-query': { l18n: 'message.killQuery', context: 'tab' },
'query-history': { l18n: 'message.queryHistory', context: 'tab' },
'clear-query': { l18n: 'message.clearQuery', context: 'tab' },
'next-tab': { l18n: 'message.nextTab' },
'prev-tab': { l18n: 'message.previousTab' },
'open-all-connections': { l18n: 'message.openAllConnections' },
'open-filter': { l18n: 'message.openFilter' },
'next-page': { l18n: 'message.nextResultsPage' },
'prev-page': { l18n: 'message.previousResultsPage' },
'toggle-console': { l18n: 'message.toggleConsole' },
'save-content': { l18n: 'message.saveContent' },
'create-connection': { l18n: 'message.createNewConnection' },
'open-settings': { l18n: 'message.openSettings' },
'open-scratchpad': { l18n: 'message.openScratchpad' }
'run-or-reload': { l18n: 'application.runOrReload', context: 'tab' },
'open-new-tab': { l18n: 'application.openNewTab', context: 'tab' },
'close-tab': { l18n: 'application.closeTab', context: 'tab' },
'format-query': { l18n: 'database.formatQuery', context: 'tab' },
'kill-query': { l18n: 'database.killQuery', context: 'tab' },
'query-history': { l18n: 'database.queryHistory', context: 'tab' },
'clear-query': { l18n: 'database.clearQuery', context: 'tab' },
'next-tab': { l18n: 'application.nextTab' },
'prev-tab': { l18n: 'application.previousTab' },
'open-all-connections': { l18n: 'application.openAllConnections' },
'open-filter': { l18n: 'application.openFilter' },
'next-page': { l18n: 'application.nextResultsPage' },
'prev-page': { l18n: 'application.previousResultsPage' },
'toggle-console': { l18n: 'application.toggleConsole' },
'save-content': { l18n: 'application.saveContent' },
'create-connection': { l18n: 'connection.createNewConnection' },
'open-settings': { l18n: 'application.openSettings' },
'open-scratchpad': { l18n: 'application.openScratchpad' }
};
interface ShortcutRecord {
@@ -124,7 +124,7 @@ const shortcuts: ShortcutRecord[] = [
for (let i = 1; i <= 9; i++) {
shortcutEvents[`select-tab-${i}`] = {
l18n: 'message.selectTabNumber',
l18n: 'application.selectTabNumber',
l18nParam: i
};

View File

@@ -1,11 +1,11 @@
import * as antares from 'common/interfaces/antares';
import * as mysql from 'mysql2';
import * as pg from 'pg';
import * as pgAst from 'pgsql-ast-parser';
import { AntaresCore } from '../AntaresCore';
import dataTypes from 'common/data-types/postgresql';
import SSH2Promise = require('ssh2-promise');
import SSHConfig from 'ssh2-promise/lib/sshConfig';
import { ConnectionOptions } from 'tls';
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function pgToString (value: any) {
@@ -98,7 +98,7 @@ export class PostgreSQLClient extends AntaresCore {
_varchar: 'CHARACTER VARYING'
}
_params: pg.ClientConfig & {schema: string; ssl?: mysql.SslOptions; ssh?: SSHConfig; readonly: boolean};
_params: pg.ClientConfig & {schema: string; ssl?: ConnectionOptions; ssh?: SSHConfig; readonly: boolean};
constructor (args: antares.ClientParams) {
super(args);
@@ -156,7 +156,7 @@ export class PostgreSQLClient extends AntaresCore {
user: this._params.user,
database: 'postgres' as string,
password: this._params.password,
ssl: null as mysql.SslOptions
ssl: null as ConnectionOptions
};
if (this._params.database?.length) dbConfig.database = this._params.database;

View File

@@ -425,7 +425,7 @@ export class SQLiteClient extends AntaresCore {
return results.rows.map(row => {
return {
sql: row.sql.match(/(?<=AS ).*?$/gs)[0],
sql: row.sql.match(/(?<=(AS|as)( |\n)).*?$/gs)[0],
name: view
};
})[0];

View File

@@ -47,7 +47,7 @@ export default class MySQLImporter extends BaseImporter {
catch (error) {
this.emit('query-error', {
sql: query,
message: error.sqlMessage,
message: error.sqlMessage || error.message,
sqlSnippet: error.sql,
time: new Date().getTime()
});

View File

@@ -21,7 +21,15 @@
<BaseTextEditor class="d-none" value="" />
</div>
</div>
<ModalAllConnections v-if="isAllConnectionsModal" @close="isAllConnectionsModal = false" />
<ModalAllConnections
v-if="isAllConnectionsModal"
@close="isAllConnectionsModal = false"
/>
<ModalExportSchema
v-if="isExportSchemaModal"
@close="hideExportModal"
/>
</div>
</template>
@@ -33,9 +41,11 @@ import { useI18n } from 'vue-i18n';
import { Menu, getCurrentWindow } from '@electron/remote';
import { useApplicationStore } from '@/stores/application';
import { useConnectionsStore } from '@/stores/connections';
import { useSchemaExportStore } from '@/stores/schemaExport';
import { useSettingsStore } from '@/stores/settings';
import { useWorkspacesStore } from '@/stores/workspaces';
import TheSettingBar from '@/components/TheSettingBar.vue';
import ModalExportSchema from '@/components/ModalExportSchema.vue';
const { t } = useI18n();
@@ -65,6 +75,10 @@ const { getSelected: selectedWorkspace } = storeToRefs(workspacesStore);
const { checkVersionUpdate } = applicationStore;
const { changeApplicationTheme } = settingsStore;
const schemaExportStore = useSchemaExportStore();
const { hideExportModal } = schemaExportStore;
const { isExportModal: isExportSchemaModal } = storeToRefs(schemaExportStore);
const isAllConnectionsModal: Ref<boolean> = ref(false);
document.addEventListener('DOMContentLoaded', () => {
@@ -95,22 +109,22 @@ onMounted(() => {
const InputMenu = Menu.buildFromTemplate([
{
label: t('word.cut'),
label: t('general.cut'),
role: 'cut'
},
{
label: t('word.copy'),
label: t('general.copy'),
role: 'copy'
},
{
label: t('word.paste'),
label: t('general.paste'),
role: 'paste'
},
{
type: 'separator'
},
{
label: t('message.selectAll'),
label: t('general.selectAll'),
role: 'selectAll'
}
]);

View File

@@ -31,13 +31,13 @@
class="btn btn-primary mr-2"
@click.stop="confirmModal"
>
{{ confirmText || t('word.confirm') }}
{{ confirmText || t('general.confirm') }}
</button>
<button
class="btn btn-link"
@click="hideModal"
>
{{ cancelText || t('word.cancel') }}
{{ cancelText || t('general.cancel') }}
</button>
</div>
</div>

View File

@@ -16,6 +16,7 @@
:id="`id_${id}`"
class="file-uploader-input"
type="file"
:accept="accept"
@change="$emit('change', $event)"
>
</form>
@@ -33,6 +34,10 @@ defineProps({
default: 'Browse',
type: String
},
accept: {
default: '',
type: String
},
modelValue: {
default: '',
type: String

View File

@@ -4,7 +4,7 @@
v-model="selectedGroup"
class="form-select"
:options="[{name: 'manual'}, ...fakerGroups]"
:option-label="(opt: any) => opt.name === 'manual' ? t('message.manualValue') : t(`faker.${opt.name}`)"
:option-label="(opt: any) => opt.name === 'manual' ? t('general.manualValue') : t(`faker.${opt.name}`)"
option-track-by="name"
:disabled="!isChecked"
:style="'flex-grow: 0;'"
@@ -41,7 +41,7 @@
<BaseUploadInput
v-else-if="inputProps().type === 'file'"
:model-value="selectedValue"
:message="t('word.browse')"
:message="t('general.browse')"
@clear="clearValue"
@change="filesChange($event)"
/>

View File

@@ -4,7 +4,7 @@
class="form-input"
type="text"
:value="pressedKeys"
:placeholder="t('message.registerAShortcut')"
:placeholder="t('application.registerAShortcut')"
@focus="isFocus = true"
@blur="isFocus = false"
@keydown.prevent.stop="onKey"
@@ -49,7 +49,7 @@ const pressedKeys = computed(() => {
keys.push('Shift');
if (keyboardEvent.value.code) {
if (keys.length === 0 && (keyboardEvent.value.key.length === 1 || singleKeysToIgnore.includes(keyboardEvent.value.key)))
return t('message.invalidShortcutMessage');
return t('application.invalidShortcutMessage');
else if (!specialKeys.includes(keyboardEvent.value.key)) {
if (keyboardEvent.value.key === 'Dead') {
keys.push(keyboardEvent.value.code
@@ -82,7 +82,7 @@ const pressedKeys = computed(() => {
}
}
else
return t('message.invalidShortcutMessage');
return t('application.invalidShortcutMessage');
}
}
@@ -96,7 +96,7 @@ const onKey = (e: KeyboardEvent) => {
};
watch(pressedKeys, (value) => {
if (value !== t('message.invalidShortcutMessage'))
if (value !== t('application.invalidShortcutMessage'))
emit('update:modelValue', pressedKeys.value);
});

View File

@@ -7,7 +7,7 @@
<div class="modal-title h6">
<div class="d-flex">
<i class="mdi mdi-24px mdi-apps mr-1" />
<span class="cut-text">{{ t('message.allConnections') }}</span>
<span class="cut-text">{{ t('connection.allConnections') }}</span>
</div>
</div>
<a class="btn btn-clear c-hand" @click.stop="closeModal" />
@@ -21,7 +21,7 @@
v-model="searchTerm"
class="form-input"
type="text"
:placeholder="t('message.searchForConnections')"
:placeholder="t('connection.searchForConnections')"
@keypress.esc="searchTerm = ''"
>
<i v-if="!searchTerm" class="form-icon mdi mdi-magnify mdi-18px pr-4" />
@@ -58,7 +58,7 @@
<div class="all-connections-buttons p-absolute d-flex" :style="'top: 0; right: 0;'">
<i
class="all-connections-delete mdi mdi-delete mdi-18px ml-2"
:title="t('word.delete')"
:title="t('general.delete')"
@click.stop="askToDelete(connection)"
/>
</div>
@@ -130,12 +130,12 @@
>
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-server-remove mr-1" /> {{ t('message.deleteConnection') }}
<i class="mdi mdi-24px mdi-server-remove mr-1" /> {{ t('connection.deleteConnection') }}
</div>
</template>
<template #body>
<div class="mb-2">
{{ t('message.deleteConfirm') }} <b>{{ selectedConnectionName }}</b>?
{{ t('general.deleteConfirm') }} <b>{{ selectedConnectionName }}</b>?
</div>
</template>
</ConfirmModal>

View File

@@ -6,7 +6,7 @@
<div class="modal-header pl-2">
<div class="modal-title h6">
<div class="d-flex">
<i class="mdi mdi-24px mdi-key-variant mr-1" /> {{ t('word.credentials') }}
<i class="mdi mdi-24px mdi-key-variant mr-1" /> {{ t('connection.credentials') }}
</div>
</div>
<a class="btn btn-clear c-hand" @click.stop="closeModal" />
@@ -16,7 +16,7 @@
<form class="form-horizontal">
<div class="form-group">
<div class="col-3">
<label class="form-label">{{ t('word.user') }}</label>
<label class="form-label">{{ t('connection.user') }}</label>
</div>
<div class="col-9">
<input
@@ -29,7 +29,7 @@
</div>
<div class="form-group">
<div class="col-3">
<label class="form-label">{{ t('word.password') }}</label>
<label class="form-label">{{ t('connection.password') }}</label>
</div>
<div class="col-9">
<input
@@ -44,10 +44,10 @@
</div>
<div class="modal-footer">
<button class="btn btn-primary mr-2" @click.stop="sendCredentials">
{{ t('word.send') }}
{{ t('general.send') }}
</button>
<button class="btn btn-link" @click.stop="closeModal">
{{ t('word.close') }}
{{ t('general.close') }}
</button>
</div>
</div>

View File

@@ -1,7 +1,7 @@
<template>
<ConfirmModal
:confirm-text="t('word.run')"
:cancel-text="t('word.cancel')"
:confirm-text="t('general.run')"
:cancel-text="t('general.cancel')"
size="400"
@confirm="runRoutine"
@hide="closeModal"
@@ -9,7 +9,7 @@
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-play mr-1" />
<span class="cut-text">{{ t('word.parameters') }}: {{ localRoutine.name }}</span>
<span class="cut-text">{{ t('database.parameters') }}: {{ localRoutine.name }}</span>
</div>
</template>
<template #body>

View File

@@ -7,7 +7,7 @@
<div class="modal-title h6">
<div class="d-flex">
<i class="mdi mdi-24px mdi-brush-variant mr-1" />
<span class="cut-text">{{ t('message.editConnectionAppearance') }}</span>
<span class="cut-text">{{ t('application.editConnectionAppearance') }}</span>
</div>
</div>
<a class="btn btn-clear c-hand" @click.stop="closeModal" />
@@ -17,7 +17,7 @@
<form class="form-horizontal">
<div class="form-group mb-4">
<div class="col-3">
<label class="form-label">{{ t('word.label') }}</label>
<label class="form-label">{{ t('application.label') }}</label>
</div>
<div class="col-9">
<input
@@ -31,7 +31,7 @@
</div>
<div class="form-group">
<div class="col-3">
<label class="form-label">{{ t('word.icon') }}</label>
<label class="form-label">{{ t('application.icon') }}</label>
</div>
<div class="col-9 icons-wrapper">
<div
@@ -49,10 +49,10 @@
</div>
<div class="modal-footer">
<button class="btn btn-primary mr-2" @click.stop="editFolderAppearance">
{{ t('word.update') }}
{{ t('application.update') }}
</button>
<button class="btn btn-link" @click.stop="closeModal">
{{ t('word.close') }}
{{ t('general.close') }}
</button>
</div>
</div>

View File

@@ -1,18 +1,18 @@
<template>
<ConfirmModal
:confirm-text="t('word.discard')"
:cancel-text="t('word.stay')"
:confirm-text="t('general.discard')"
:cancel-text="t('general.stay')"
@confirm="emit('confirm')"
@hide="emit('close')"
>
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-content-save-alert mr-1" /> {{ t('message.unsavedChanges') }}
<i class="mdi mdi-24px mdi-content-save-alert mr-1" /> {{ t('application.unsavedChanges') }}
</div>
</template>
<template #body>
<div>
{{ t('message.discardUnsavedChanges') }}
{{ t('application.discardUnsavedChanges') }}
</div>
</template>
</ConfirmModal>

View File

@@ -7,7 +7,7 @@
<div class="modal-title h6">
<div class="d-flex">
<i class="mdi mdi-24px mdi-database-edit mr-1" />
<span class="cut-text">{{ t('message.editSchema') }}</span>
<span class="cut-text">{{ t('database.editSchema') }}</span>
</div>
</div>
<a class="btn btn-clear c-hand" @click.stop="closeModal" />
@@ -17,7 +17,7 @@
<form class="form-horizontal">
<div class="form-group">
<div class="col-3">
<label class="form-label">{{ t('word.name') }}</label>
<label class="form-label">{{ t('general.name') }}</label>
</div>
<div class="col-9">
<input
@@ -26,14 +26,14 @@
class="form-input"
type="text"
required
:placeholder="t('message.schemaName')"
:placeholder="t('database.schemaName')"
readonly
>
</div>
</div>
<div class="form-group">
<div class="col-3">
<label class="form-label">{{ t('word.collation') }}</label>
<label class="form-label">{{ t('database.collation') }}</label>
</div>
<div class="col-9">
<BaseSelect
@@ -44,7 +44,7 @@
option-label="collation"
option-track-by="collation"
/>
<small>{{ t('message.serverDefault') }}: {{ defaultCollation }}</small>
<small>{{ t('database.serverDefault') }}: {{ defaultCollation }}</small>
</div>
</div>
</form>
@@ -52,10 +52,10 @@
</div>
<div class="modal-footer">
<button class="btn btn-primary mr-2" @click.stop="updateSchema">
{{ t('word.update') }}
{{ t('application.update') }}
</button>
<button class="btn btn-link" @click.stop="closeModal">
{{ t('word.close') }}
{{ t('general.close') }}
</button>
</div>
</div>

View File

@@ -7,7 +7,7 @@
<div class="modal-title h6">
<div class="d-flex">
<i class="mdi mdi-24px mdi-database-export mr-1" />
<span class="cut-text">{{ t('message.exportSchema') }}</span>
<span class="cut-text">{{ t('database.exportSchema') }}</span>
</div>
</div>
<a class="btn btn-clear c-hand" @click.stop="closeModal" />
@@ -16,7 +16,7 @@
<div class="container">
<div class="columns">
<div class="col-3">
<label class="form-label">{{ t('message.directoryPath') }}</label>
<label class="form-label">{{ t('general.directoryPath') }}</label>
</div>
<div class="col-9">
<fieldset class="input-group">
@@ -26,14 +26,14 @@
type="text"
required
readonly
:placeholder="t('message.schemaName')"
@click.prevent="openPathDialog"
>
<button
type="button"
class="btn btn-primary input-group-btn"
@click.prevent="openPathDialog"
>
{{ t('word.change') }}
{{ t('general.change') }}
</button>
</fieldset>
</div>
@@ -42,35 +42,41 @@
<div class="columns export-options">
<div class="column col-8 left">
<div class="columns mb-2">
<div class="column col-auto d-flex text-italic ">
<i class="mdi mdi-file-document-outline mr-2" />
{{ filename }}
<div class="columns mb-2 mt-1 p-vcentered">
<div class="column col-auto input-group d-flex text-italic" :style="'flex-grow: 1'">
<i class="input-group-addon mdi mdi-file-document-outline" />
<input
v-model="chosenFilename"
class="form-input"
type="text"
:placeholder="filename"
:title="t('application.fileName')"
>
</div>
<div class="column col-auto col-ml-auto ">
<button
class="btn btn-dark btn-sm"
:title="t('word.refresh')"
:title="t('general.refresh')"
@click="refresh"
>
<i class="mdi mdi-database-refresh" />
<i class="mdi mdi-refresh" />
</button>
<button
class="btn btn-dark btn-sm mx-1"
:title="t('message.uncheckAllTables')"
:title="t('database.uncheckAllTables')"
:disabled="isRefreshing"
@click="uncheckAllTables"
>
<i class="mdi mdi-file-tree-outline" />
<i class="mdi mdi-checkbox-blank-outline" />
</button>
<button
class="btn btn-dark btn-sm"
:title="t('message.checkAllTables')"
:title="t('database.checkAllTables')"
:disabled="isRefreshing"
@click="checkAllTables"
>
<i class="mdi mdi-file-tree" />
<i class="mdi mdi-checkbox-marked-outline" />
</button>
</div>
</div>
@@ -122,22 +128,22 @@
<div class="tr">
<div class="th" :style="'width: 50%;'">
<div class="table-column-title">
<span>{{ t('word.table') }}</span>
<span>{{ t('database.table') }}</span>
</div>
</div>
<div class="th text-center">
<div class="table-column-title">
<span>{{ t('word.structure') }}</span>
<span>{{ t('database.structure') }}</span>
</div>
</div>
<div class="th text-center">
<div class="table-column-title">
<span>{{ t('word.content') }}</span>
<span>{{ t('general.content') }}</span>
</div>
</div>
<div class="th text-center">
<div class="table-column-title">
<span>{{ t('word.drop') }}</span>
<span>{{ t('database.drop') }}</span>
</div>
</div>
</div>
@@ -148,6 +154,7 @@
v-for="item in tables"
:key="item.table"
class="tr"
:class="{'selected': item.table === selectedTable}"
>
<div class="td">
{{ item.table }}
@@ -183,19 +190,19 @@
</div>
<div class="column col-4">
<h5 class="h5">
{{ t('word.options') }}
{{ t('general.options') }}
</h5>
<span class="h6">{{ t('word.includes') }}:</span>
<span class="h6">{{ t('general.includes') }}:</span>
<label
v-for="(_, key) in options.includes"
:key="key"
class="form-checkbox"
>
<input v-model="options.includes[key]" type="checkbox"><i class="form-icon" /> {{ t(`word.${key}`, 2) }}
<input v-model="options.includes[key]" type="checkbox"><i class="form-icon" /> {{ t(`database.${String(key).slice(0, -1)}`, 2) }}
</label>
<div v-if="clientCustoms.exportByChunks">
<div class="h6 mt-4 mb-2">
{{ t('message.newInsertStmtEvery') }}:
{{ t('database.newInsertStmtEvery') }}:
</div>
<div class="columns">
<div class="column col-6">
@@ -209,21 +216,21 @@
<BaseSelect
v-model="options.sqlInsertDivider"
class="form-select"
:options="[{value: 'bytes', label: 'KiB'}, {value: 'rows', label: t('word.row', 2)}]"
:options="[{value: 'bytes', label: 'KiB'}, {value: 'rows', label: t('database.row', 2)}]"
/>
</div>
</div>
</div>
<div class="h6 mb-2 mt-4">
{{ t('message.outputFormat') }}:
{{ t('general.outputFormat') }}:
</div>
<div class="columns">
<div class="column h5 mb-4">
<BaseSelect
v-model="options.outputFormat"
class="form-select"
:options="[{value: 'sql', label: t('message.singleFile', {ext: '.sql'})}, {value: 'sql.zip', label: t('message.zipCompressedFile', {ext: '.sql'})}]"
:options="[{value: 'sql', label: t('general.singleFile', {ext: '.sql'})}, {value: 'sql.zip', label: t('general.zipCompressedFile', {ext: '.sql'})}]"
/>
</div>
</div>
@@ -244,8 +251,8 @@
</div>
</div>
<div class="column col-auto px-0">
<button class="btn btn-link" @click.stop="closeModal">
{{ t('word.close') }}
<button class="btn btn-link mr-2" @click.stop="closeModal">
{{ t('general.close') }}
</button>
<button
class="btn btn-primary mr-2"
@@ -254,7 +261,7 @@
autofocus
@click.prevent="startExport"
>
{{ t('word.export') }}
{{ t('database.export') }}
</button>
</div>
</div>
@@ -272,6 +279,7 @@ import { useI18n } from 'vue-i18n';
import { ClientCode, SchemaInfos } from 'common/interfaces/antares';
import { ExportOptions, ExportState } from 'common/interfaces/exporter';
import { useNotificationsStore } from '@/stores/notifications';
import { useSchemaExportStore } from '@/stores/schemaExport';
import { useWorkspacesStore } from '@/stores/workspaces';
import { useFocusTrap } from '@/composables/useFocusTrap';
import Application from '@/ipc-api/Application';
@@ -279,15 +287,12 @@ import Schema from '@/ipc-api/Schema';
import { Customizations } from 'common/interfaces/customizations';
import BaseSelect from '@/components/BaseSelect.vue';
const props = defineProps({
selectedSchema: String
});
const emit = defineEmits(['close']);
const { t } = useI18n();
const { addNotification } = useNotificationsStore();
const workspacesStore = useWorkspacesStore();
const schemaExportStore = useSchemaExportStore();
const { getSelected: selectedWorkspace } = storeToRefs(workspacesStore);
@@ -298,6 +303,8 @@ const {
refreshSchema
} = workspacesStore;
const { selectedTable, selectedSchema } = storeToRefs(schemaExportStore);
const isExporting = ref(false);
const isRefreshing = ref(false);
const progressPercentage = ref(0);
@@ -309,18 +316,19 @@ const tables: Ref<{
includeDropStatement: boolean;
}[]> = ref([]);
const options: Ref<Partial<ExportOptions>> = ref({
schema: props.selectedSchema,
schema: selectedSchema.value,
includes: {} as {[key: string]: boolean},
outputFormat: 'sql' as 'sql' | 'sql.zip',
sqlInsertAfter: 250,
sqlInsertDivider: 'bytes' as 'bytes' | 'rows'
});
const basePath = ref('');
const chosenFilename = ref('');
const currentWorkspace = computed(() => getWorkspace(selectedWorkspace.value));
const clientCustoms: Ref<Customizations> = computed(() => currentWorkspace.value.customizations);
const schemaItems = computed(() => {
const db: SchemaInfos = currentWorkspace.value.structure.find((db: SchemaInfos) => db.name === props.selectedSchema);
const db: SchemaInfos = currentWorkspace.value.structure.find((db: SchemaInfos) => db.name === selectedSchema.value);
if (db)
return db.tables.filter(table => table.type === 'table');
@@ -328,9 +336,9 @@ const schemaItems = computed(() => {
});
const filename = computed(() => {
const date = moment().format('YYYY-MM-DD_HH-mm-ss');
return `${props.selectedSchema}_${date}.${options.value.outputFormat}`;
return `${selectedTable.value || selectedSchema.value}_${date}`;
});
const dumpFilePath = computed(() => `${basePath.value}/${filename.value}`);
const dumpFilePath = computed(() => `${basePath.value}/${chosenFilename.value || filename.value}.${options.value.outputFormat}`);
const includeStructureStatus = computed(() => {
if (tables.value.every(item => item.includeStructure)) return 1;
else if (tables.value.some(item => item.includeStructure)) return 2;
@@ -353,7 +361,7 @@ const startExport = async () => {
const params = {
uid,
type: client,
schema: props.selectedSchema,
schema: selectedSchema.value,
outputFile: dumpFilePath.value,
tables: [...tables.value],
...options.value
@@ -362,7 +370,7 @@ const startExport = async () => {
try {
const { status, response } = await Schema.export(params);
if (status === 'success')
progressStatus.value = response.cancelled ? t('word.aborted') : t('word.completed');
progressStatus.value = response.cancelled ? t('general.aborted') : t('general.completed');
else {
progressStatus.value = response;
addNotification({ status: 'error', message: response });
@@ -379,13 +387,13 @@ const updateProgress = (event: Event, state: ExportState) => {
progressPercentage.value = Number((state.currentItemIndex / state.totalItems * 100).toFixed(1));
switch (state.op) {
case 'PROCESSING':
progressStatus.value = t('message.processingTableExport', { table: state.currentItem });
progressStatus.value = t('database.processingTableExport', { table: state.currentItem });
break;
case 'FETCH':
progressStatus.value = t('message.fetchingTableExport', { table: state.currentItem });
progressStatus.value = t('database.fetchingTableExport', { table: state.currentItem });
break;
case 'WRITE':
progressStatus.value = t('message.writingTableExport', { table: state.currentItem });
progressStatus.value = t('database.writingTableExport', { table: state.currentItem });
break;
}
};
@@ -431,7 +439,7 @@ const toggleAllTablesOption = (option: 'includeStructure' | 'includeContent' |'i
const refresh = async () => {
isRefreshing.value = true;
await refreshSchema({ uid: currentWorkspace.value.uid, schema: props.selectedSchema });
await refreshSchema({ uid: currentWorkspace.value.uid, schema: selectedSchema.value });
isRefreshing.value = false;
};
@@ -446,12 +454,31 @@ const openPathDialog = async () => {
window.addEventListener('keydown', onKey);
if (selectedTable.value) {
setTimeout(() => {
const element = document.querySelector<HTMLElement>('.modal.active .selected');
if (element) {
const rect = element.getBoundingClientRect();
const elemTop = rect.top;
const elemBottom = rect.bottom;
const isVisible = (elemTop >= 0) && (elemBottom <= window.innerHeight);
if (!isVisible) {
element.setAttribute('tabindex', '-1');
element.focus();
element.removeAttribute('tabindex');
}
}
}, 100);
}
basePath.value = await Application.getDownloadPathDirectory();
tables.value = schemaItems.value.map(item => ({
table: item.name,
includeStructure: true,
includeContent: true,
includeDropStatement: true
includeStructure: !selectedTable.value ? true : selectedTable.value === item.name,
includeContent: !selectedTable.value ? true : selectedTable.value === item.name,
includeDropStatement: !selectedTable.value ? true : selectedTable.value === item.name
}));
const structure = ['functions', 'views', 'triggers', 'routines', 'schedulers'];
@@ -459,7 +486,7 @@ const openPathDialog = async () => {
structure.forEach((feat: keyof Customizations) => {
const val = clientCustoms.value[feat];
if (val)
options.value.includes[feat] = true;
options.value.includes[feat] = !selectedTable.value;
});
ipcRenderer.on('export-progress', updateProgress);

View File

@@ -7,7 +7,7 @@
<div class="modal-title h6">
<div class="d-flex">
<i class="mdi mdi-24px mdi-playlist-plus mr-1" />
<span class="cut-text">{{ t('message.insertRow', 2) }}</span>
<span class="cut-text">{{ t('database.insertRow', 2) }}</span>
</div>
</div>
<a class="btn btn-clear c-hand" @click.stop="closeModal" />
@@ -39,7 +39,7 @@
<span class="input-group-addon field-type" :class="typeClass(field.type)">
{{ field.type }} {{ wrapNumber(fieldLength(field)) }}
</span>
<label class="form-checkbox ml-3" :title="t('word.insert')">
<label class="form-checkbox ml-3" :title="t('general.insert')">
<input
type="checkbox"
:checked="!fieldsToExclude.includes(field.name)"
@@ -55,7 +55,7 @@
</div>
<div class="modal-footer columns">
<div class="column d-flex" :class="hasFakes ? 'col-4' : 'col-2'">
<div class="input-group tooltip tooltip-right" :data-tooltip="t('message.numberOfInserts')">
<div class="input-group tooltip tooltip-right" :data-tooltip="t('database.numberOfInserts')">
<input
v-model="nInserts"
type="number"
@@ -70,7 +70,7 @@
<div
v-if="hasFakes"
class="tooltip tooltip-right ml-2"
:data-tooltip="t('message.fakeDataLanguage')"
:data-tooltip="t('database.fakeDataLanguage')"
>
<BaseSelect
v-model="fakerLocale"
@@ -85,10 +85,10 @@
:class="{'loading': isInserting}"
@click.stop="insertRows"
>
{{ t('word.insert') }}
{{ t('general.insert') }}
</button>
<button class="btn btn-link" @click.stop="closeModal">
{{ t('word.close') }}
{{ t('general.close') }}
</button>
</div>
</div>

View File

@@ -7,7 +7,7 @@
<div class="modal-title h6">
<div class="d-flex">
<i class="mdi mdi-24px mdi-folder-edit mr-1" />
<span class="cut-text">{{ t('message.editFolder') }}</span>
<span class="cut-text">{{ t('application.editFolder') }}</span>
</div>
</div>
<a class="btn btn-clear c-hand" @click.stop="closeModal" />
@@ -17,7 +17,7 @@
<form class="form-horizontal">
<div class="form-group mb-4">
<div class="col-3">
<label class="form-label">{{ t('word.name') }}</label>
<label class="form-label">{{ t('general.name') }}</label>
</div>
<div class="col-9">
<input
@@ -26,13 +26,13 @@
class="form-input"
type="text"
required
:placeholder="t('message.folderName')"
:placeholder="t('application.folderName')"
>
</div>
</div>
<div class="form-group">
<div class="col-3">
<label class="form-label">{{ t('word.color') }}</label>
<label class="form-label">{{ t('application.color') }}</label>
</div>
<div class="col-9 color-wrapper">
<div
@@ -52,10 +52,10 @@
</div>
<div class="modal-footer">
<button class="btn btn-primary mr-2" @click.stop="editFolderAppearance">
{{ t('word.update') }}
{{ t('application.update') }}
</button>
<button class="btn btn-link" @click.stop="closeModal">
{{ t('word.close') }}
{{ t('general.close') }}
</button>
</div>
</div>

View File

@@ -7,7 +7,7 @@
<div class="modal-title h6">
<div class="d-flex">
<i class="mdi mdi-24px mdi-history mr-1" />
<span class="cut-text">{{ t('word.history') }}: {{ connectionName }}</span>
<span class="cut-text">{{ t('general.history') }}: {{ connectionName }}</span>
</div>
</div>
<a class="btn btn-clear c-hand" @click.stop="closeModal" />
@@ -22,7 +22,7 @@
v-model="searchTerm"
class="form-input"
type="text"
:placeholder="t('message.searchForQueries')"
:placeholder="t('database.searchForQueries')"
>
<i v-if="!searchTerm" class="form-icon mdi mdi-magnify mdi-18px pr-4" />
<i
@@ -67,13 +67,13 @@
<small class="tile-subtitle">{{ query.schema }} · {{ formatDate(query.date) }}</small>
<div class="tile-history-buttons">
<button class="btn btn-link pl-1" @click.stop="$emit('select-query', query.sql)">
<i class="mdi mdi-open-in-app pr-1" /> {{ t('word.select') }}
<i class="mdi mdi-open-in-app pr-1" /> {{ t('general.select') }}
</button>
<button class="btn btn-link pl-1" @click="copyQuery(query.sql)">
<i class="mdi mdi-content-copy pr-1" /> {{ t('word.copy') }}
<i class="mdi mdi-content-copy pr-1" /> {{ t('general.copy') }}
</button>
<button class="btn btn-link pl-1" @click="deleteQuery(query)">
<i class="mdi mdi-delete-forever pr-1" /> {{ t('word.delete') }}
<i class="mdi mdi-delete-forever pr-1" /> {{ t('general.delete') }}
</button>
</div>
</div>
@@ -88,7 +88,7 @@
<i class="mdi mdi-history mdi-48px" />
</div>
<p class="empty-title h5">
{{ t('message.thereIsNoQueriesYet') }}
{{ t('database.thereIsNoQueriesYet') }}
</p>
</div>
</div>

View File

@@ -7,7 +7,7 @@
<div class="modal-title h6">
<div class="d-flex">
<i class="mdi mdi-24px mdi-database-import mr-1" />
<span class="cut-text">{{ t('message.importSchema') }}</span>
<span class="cut-text">{{ t('database.importSchema') }}</span>
</div>
</div>
<a class="btn btn-clear c-hand" @click.stop="closeModal" />
@@ -15,7 +15,7 @@
<div class="modal-body pb-0">
{{ sqlFile }}
<div v-if="queryErrors.length > 0" class="mt-2">
<label>{{ t('message.importQueryErrors', queryErrors.length) }}</label>
<label>{{ t('database.importQueryErrors', queryErrors.length) }}</label>
<textarea
v-model="formattedQueryErrors"
class="form-input"
@@ -28,7 +28,7 @@
<div class="column col modal-progress-wrapper text-left">
<div class="import-progress">
<span class="progress-status">
{{ progressPercentage }}% - {{ progressStatus }} - {{ t('message.executedQueries', queryCount) }}
{{ progressPercentage }}% - {{ progressStatus }} - {{ t('database.executedQueries', queryCount) }}
</span>
<progress
class="progress d-block"
@@ -39,7 +39,7 @@
</div>
<div class="column col-auto px-0">
<button class="btn btn-link" @click.stop="closeModal">
{{ completed ? t('word.close') : t('word.cancel') }}
{{ completed ? t('general.close') : t('general.cancel') }}
</button>
</div>
</div>
@@ -108,7 +108,7 @@ const startImport = async (file: string) => {
const { status, response } = await Schema.import(params);
if (status === 'success')
progressStatus.value = response.cancelled ? t('word.aborted') : t('word.completed');
progressStatus.value = response.cancelled ? t('general.aborted') : t('general.completed');
else {
progressStatus.value = response;
addNotification({ status: 'error', message: response });

View File

@@ -7,7 +7,7 @@
<div class="modal-title h6">
<div class="d-flex">
<i class="mdi mdi-24px mdi-database-plus mr-1" />
<span class="cut-text">{{ t('message.createNewSchema') }}</span>
<span class="cut-text">{{ t('database.createNewSchema') }}</span>
</div>
</div>
<a class="btn btn-clear c-hand" @click.stop="closeModal" />
@@ -17,7 +17,7 @@
<form class="form-horizontal" @submit.prevent="createSchema">
<div class="form-group">
<div class="col-3">
<label class="form-label">{{ t('word.name') }}</label>
<label class="form-label">{{ t('general.name') }}</label>
</div>
<div class="col-9">
<input
@@ -26,13 +26,13 @@
class="form-input"
type="text"
required
:placeholder="t('message.schemaName')"
:placeholder="t('database.schemaName')"
>
</div>
</div>
<div v-if="customizations.collations" class="form-group">
<div class="col-3">
<label class="form-label">{{ t('word.collation') }}</label>
<label class="form-label">{{ t('database.collation') }}</label>
</div>
<div class="col-9">
<BaseSelect
@@ -43,7 +43,7 @@
option-label="collation"
option-track-by="collation"
/>
<small>{{ t('message.serverDefault') }}: {{ defaultCollation }}</small>
<small>{{ t('database.serverDefault') }}: {{ defaultCollation }}</small>
</div>
</div>
</form>
@@ -55,10 +55,10 @@
:class="{'loading': isLoading}"
@click.stop="createSchema"
>
{{ t('word.add') }}
{{ t('general.add') }}
</button>
<button class="btn btn-link" @click.stop="closeModal">
{{ t('word.close') }}
{{ t('general.close') }}
</button>
</div>
</div>

View File

@@ -17,7 +17,7 @@
<div class="modal-title h6">
<div class="d-flex">
<i class="mdi mdi-24px mdi-memory mr-1" />
<span class="cut-text">{{ t('message.processesList') }}: {{ connectionName }}</span>
<span class="cut-text">{{ t('database.processesList') }}: {{ connectionName }}</span>
</div>
</div>
<a class="btn btn-clear c-hand" @click.stop="closeModal" />
@@ -29,7 +29,7 @@
<button
class="btn btn-dark btn-sm mr-0 pr-1 d-flex"
:class="{'loading':isQuering}"
:title="`${t('word.refresh')}`"
:title="`${t('general.refresh')}`"
@click="getProcessesList"
>
<i v-if="!+autorefreshTimer" class="mdi mdi-24px mdi-refresh mr-1" />
@@ -39,7 +39,7 @@
<i class="mdi mdi-24px mdi-menu-down" />
</div>
<div class="menu px-3">
<span>{{ t('word.autoRefresh') }}: <b>{{ +autorefreshTimer ? `${autorefreshTimer}s` : 'OFF' }}</b></span>
<span>{{ t('general.autoRefresh') }}: <b>{{ +autorefreshTimer ? `${autorefreshTimer}s` : 'OFF' }}</b></span>
<input
v-model="autorefreshTimer"
class="slider no-border"
@@ -59,7 +59,7 @@
tabindex="0"
>
<i class="mdi mdi-24px mdi-file-export mr-1" />
<span>{{ t('word.export') }}</span>
<span>{{ t('database.export') }}</span>
<i class="mdi mdi-24px mdi-menu-down" />
</button>
<ul class="menu text-left">
@@ -74,7 +74,7 @@
</div>
<div class="workspace-query-info">
<div v-if="sortedResults.length">
{{ t('word.processes') }}: <b>{{ sortedResults.length.toLocaleString() }}</b>
{{ t('database.processes') }}: <b>{{ sortedResults.length.toLocaleString() }}</b>
</div>
</div>
</div>

View File

@@ -4,7 +4,7 @@
@close-context="closeContext"
>
<div v-if="props.selectedRow" class="context-element">
<span class="d-flex"><i class="mdi mdi-18px mdi-content-copy text-light pr-1" /> {{ t('word.copy') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-content-copy text-light pr-1" /> {{ t('general.copy') }}</span>
<i class="mdi mdi-18px mdi-chevron-right text-light pl-1" />
<div class="context-submenu">
<div
@@ -13,7 +13,7 @@
@click="copyCell"
>
<span class="d-flex">
<i class="mdi mdi-18px mdi-numeric-0 mdi-rotate-90 text-light pr-1" /> {{ t('word.cell', 1) }}
<i class="mdi mdi-18px mdi-numeric-0 mdi-rotate-90 text-light pr-1" /> {{ t('database.cell', 1) }}
</span>
</div>
<div
@@ -22,7 +22,7 @@
@click="copyRow"
>
<span class="d-flex">
<i class="mdi mdi-18px mdi-table-row text-light pr-1" /> {{ t('word.row', 1) }}
<i class="mdi mdi-18px mdi-table-row text-light pr-1" /> {{ t('database.row', 1) }}
</span>
</div>
</div>
@@ -33,7 +33,7 @@
@click="killProcess"
>
<span class="d-flex">
<i class="mdi mdi-18px mdi-close-circle-outline text-light pr-1" /> {{ t('message.killProcess') }}
<i class="mdi mdi-18px mdi-close-circle-outline text-light pr-1" /> {{ t('database.killProcess') }}
</span>
</div>
</BaseContextMenu>

View File

@@ -16,15 +16,15 @@
</div>
<ConfirmModal
v-if="isInfoModal"
:confirm-text="t('word.update')"
:cancel-text="t('word.close')"
:confirm-text="t('application.update')"
:cancel-text="t('general.close')"
size="medium"
:hide-footer="true"
@hide="hideInfoModal"
>
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-information-outline mr-1" /> {{ t('message.processInfo') }}
<i class="mdi mdi-24px mdi-information-outline mr-1" /> {{ t('database.processInfo') }}
</div>
</template>
<template #body>

View File

@@ -7,7 +7,7 @@
<div class="modal-title h6">
<div class="d-flex">
<i class="mdi mdi-24px mdi-cog mr-1" />
<span class="cut-text">{{ t('word.settings') }}</span>
<span class="cut-text">{{ t('application.settings') }}</span>
</div>
</div>
<a class="btn btn-clear c-hand" @click="closeModal" />
@@ -21,21 +21,28 @@
:class="{'active': selectedTab === 'general'}"
@click="selectTab('general')"
>
<a class="tab-link">{{ t('word.general') }}</a>
<a class="tab-link">{{ t('application.general') }}</a>
</li>
<li
class="tab-item c-hand"
:class="{'active': selectedTab === 'themes'}"
@click="selectTab('themes')"
>
<a class="tab-link">{{ t('word.themes') }}</a>
<a class="tab-link">{{ t('application.themes') }}</a>
</li>
<li
class="tab-item c-hand"
:class="{'active': selectedTab === 'shortcuts'}"
@click="selectTab('shortcuts')"
>
<a class="tab-link">{{ t('word.shortcuts') }}</a>
<a class="tab-link">{{ t('application.shortcuts') }}</a>
</li>
<li
class="tab-item c-hand"
:class="{'active': selectedTab === 'data'}"
@click="selectTab('data')"
>
<a class="tab-link">{{ t('application.data') }}</a>
</li>
<li
v-if="updateStatus !== 'disabled'"
@@ -43,21 +50,21 @@
:class="{'active': selectedTab === 'update'}"
@click="selectTab('update')"
>
<a class="tab-link" :class="{'badge badge-update': hasUpdates}">{{ t('word.update') }}</a>
<a class="tab-link" :class="{'badge badge-update': hasUpdates}">{{ t('application.update') }}</a>
</li>
<li
class="tab-item c-hand"
:class="{'active': selectedTab === 'changelog'}"
@click="selectTab('changelog')"
>
<a class="tab-link">{{ t('word.changelog') }}</a>
<a class="tab-link">{{ t('application.changelog') }}</a>
</li>
<li
class="tab-item c-hand"
:class="{'active': selectedTab === 'about'}"
@click="selectTab('about')"
>
<a class="tab-link">{{ t('word.about') }}</a>
<a class="tab-link">{{ t('application.about') }}</a>
</li>
</ul>
</div>
@@ -65,14 +72,14 @@
<div class="container">
<form class="form-horizontal columns">
<div class="column col-12 h6 text-uppercase mb-1">
{{ t('word.application') }}
{{ t('application.application') }}
</div>
<div class="column col-12 col-sm-12 mb-2 columns">
<div class="form-group column col-12">
<div class="col-5 col-sm-12">
<label class="form-label">
<i class="mdi mdi-18px mdi-translate mr-1" />
{{ t('word.language') }}
{{ t('application.language') }}
</label>
</div>
<div class="col-3 col-sm-12">
@@ -87,15 +94,15 @@
</div>
<div class="col-4 col-sm-12 px-2 p-vcentered">
<small class="d-block" :style="'line-height: 1.1; font-size: 70%;'">
{{ t('message.missingOrIncompleteTranslation') }}<br>
<a class="text-bold c-hand" @click="openOutside('https://github.com/antares-sql/antares/wiki/Translate-Antares')">{{ t('message.findOutHowToContribute') }}</a>
{{ t('application.missingOrIncompleteTranslation') }}<br>
<a class="text-bold c-hand" @click="openOutside('https://github.com/antares-sql/antares/wiki/Translate-Antares')">{{ t('application.findOutHowToContribute') }}</a>
</small>
</div>
</div>
<div class="form-group column col-12">
<div class="col-5 col-sm-12">
<label class="form-label">
{{ t('message.dataTabPageSize') }}
{{ t('application.dataTabPageSize') }}
</label>
</div>
<div class="col-3 col-sm-12">
@@ -110,7 +117,7 @@
<div class="form-group column col-12 mb-0">
<div class="col-5 col-sm-12">
<label class="form-label">
{{ t('message.restorePreviousSession') }}
{{ t('application.restorePreviousSession') }}
</label>
</div>
<div class="col-3 col-sm-12">
@@ -123,7 +130,7 @@
<div class="form-group column col-12 mb-0">
<div class="col-5 col-sm-12">
<label class="form-label">
{{ t('message.showTableSize') }}
{{ t('application.showTableSize') }}
</label>
</div>
<div class="col-1 col-sm-12">
@@ -134,14 +141,14 @@
</div>
<div class="col-6 col-sm-12 px-2 p-vcentered">
<small class="d-block" :style="'line-height: 1.1; font-size: 70%;'">
{{ t('message.showTableSizeDescription') }}
{{ t('application.showTableSizeDescription') }}
</small>
</div>
</div>
<div class="form-group column col-12 mb-0">
<div class="col-5 col-sm-12">
<label class="form-label">
{{ t('message.disableBlur') }}
{{ t('application.disableBlur') }}
</label>
</div>
<div class="col-3 col-sm-12">
@@ -154,7 +161,7 @@
<div class="form-group column col-12 mb-0">
<div class="col-5 col-sm-12">
<label class="form-label">
{{ t('message.disableScratchpad') }}
{{ t('application.disableScratchpad') }}
</label>
</div>
<div class="col-3 col-sm-12">
@@ -167,7 +174,7 @@
<div class="form-group column col-12">
<div class="col-5 col-sm-12">
<label class="form-label">
{{ t('message.notificationsTimeout') }}
{{ t('application.notificationsTimeout') }}
</label>
</div>
<div class="col-3 col-sm-12">
@@ -179,19 +186,19 @@
min="1"
@focusout="checkNotificationsTimeout"
>
<span class="input-group-addon">{{ t('word.seconds') }}</span>
<span class="input-group-addon">{{ t('general.seconds') }}</span>
</div>
</div>
</div>
</div>
<div class="column col-12 h6 mt-4 text-uppercase mb-1">
{{ t('word.editor') }}
{{ t('application.editor') }}
</div>
<div class="column col-12 col-sm-12 columns">
<div class="form-group column col-12 mb-0">
<div class="col-5 col-sm-12">
<label class="form-label">
{{ t('word.autoCompletion') }}
{{ t('application.autoCompletion') }}
</label>
</div>
<div class="col-3 col-sm-12">
@@ -204,7 +211,7 @@
<div class="form-group column col-12 mb-0">
<div class="col-5 col-sm-12">
<label class="form-label">
{{ t('message.wrapLongLines') }}
{{ t('application.wrapLongLines') }}
</label>
</div>
<div class="col-3 col-sm-12">
@@ -217,7 +224,7 @@
<div class="form-group column col-12 mb-0">
<div class="col-5 col-sm-12">
<label class="form-label">
{{ t('message.executeSelectedQuery') }}
{{ t('database.executeSelectedQuery') }}
</label>
</div>
<div class="col-3 col-sm-12">
@@ -229,13 +236,13 @@
</div>
</div>
<div class="column col-12 h6 mt-4 text-uppercase mb-1">
{{ t('word.resultsTable') }}
{{ t('database.resultsTable') }}
</div>
<div class="column col-12 col-sm-12 columns">
<div class="form-group column col-12">
<div class="col-5 col-sm-12">
<label class="form-label">
{{ t('message.defaultCopyType') }}
{{ t('application.defaultCopyType') }}
</label>
</div>
<div class="col-3 col-sm-12">
@@ -258,7 +265,7 @@
<div class="container">
<div class="columns">
<div class="column col-12 h6 text-uppercase mb-2">
{{ t('message.applicationTheme') }}
{{ t('application.applicationTheme') }}
</div>
<div
class="column col-6 c-hand theme-block"
@@ -269,7 +276,7 @@
<div class="theme-name text-light">
<i class="mdi mdi-moon-waning-crescent mdi-48px" />
<div class="h6 mt-4">
{{ t('word.dark') }}
{{ t('application.dark') }}
</div>
</div>
</div>
@@ -282,7 +289,7 @@
<div class="theme-name text-dark">
<i class="mdi mdi-white-balance-sunny mdi-48px" />
<div class="h6 mt-4">
{{ t('word.light') }}
{{ t('application.light') }}
</div>
</div>
</div>
@@ -290,7 +297,7 @@
<div class="columns mt-4">
<div class="column col-12 h6 text-uppercase mb-2 mt-4">
{{ t('message.editorTheme') }}
{{ t('application.editorTheme') }}
</div>
<div class="column col-5 h5 mb-4">
<BaseSelect
@@ -366,6 +373,9 @@
<div v-show="selectedTab === 'shortcuts'" class="panel-body py-4">
<ModalSettingsShortcuts />
</div>
<div v-show="selectedTab === 'data'" class="panel-body py-4">
<ModalSettingsData />
</div>
<div v-show="selectedTab === 'update'" class="panel-body py-4">
<ModalSettingsUpdate />
</div>
@@ -378,16 +388,16 @@
<img :src="appLogo" width="128">
<h4>{{ appName }}</h4>
<p class="mb-2">
{{ t('word.version') }} {{ appVersion }}<br>
{{ t('general.version') }} {{ appVersion }}<br>
<a class="c-hand" @click="openOutside('https://github.com/antares-sql/antares')"><i class="mdi mdi-github d-inline" /> GitHub</a> <a class="c-hand" @click="openOutside('https://twitter.com/AntaresSQL')"><i class="mdi mdi-twitter d-inline" /> Twitter</a> <a class="c-hand" @click="openOutside('https://antares-sql.app/')"><i class="mdi mdi-web d-inline" /> Website</a><br>
<small>{{ t('word.author') }} <a class="c-hand" @click="openOutside('https://github.com/Fabio286')">{{ appAuthor }}</a></small><br>
<small>{{ t('general.author') }} <a class="c-hand" @click="openOutside('https://github.com/Fabio286')">{{ appAuthor }}</a></small><br>
</p>
<div class="mb-2">
<small class="d-block text-uppercase">{{ t('word.contributors') }}:</small>
<small class="d-block text-uppercase">{{ t('general.contributors') }}:</small>
<div class="d-block py-1">
<small v-for="(contributor, i) in otherContributors" :key="i">{{ i !== 0 ? ', ' : '' }}{{ contributor }}</small>
</div>
<small>{{ t('message.madeWithJS') }}</small>
<small>{{ t('application.madeWithJS') }}</small>
</div>
</div>
</div>
@@ -411,6 +421,7 @@ import { localesNames } from '@/i18n/supported-locales';
import ModalSettingsUpdate from '@/components/ModalSettingsUpdate.vue';
import ModalSettingsChangelog from '@/components/ModalSettingsChangelog.vue';
import ModalSettingsShortcuts from '@/components/ModalSettingsShortcuts.vue';
import ModalSettingsData from '@/components/ModalSettingsData.vue';
import BaseTextEditor from '@/components/BaseTextEditor.vue';
import BaseSelect from '@/components/BaseSelect.vue';
import { AvailableLocale } from '@/i18n';
@@ -500,7 +511,7 @@ const selectedTab: Ref<string> = ref('general');
const editorThemes = computed(() => [
{
group: t('word.light'),
group: t('application.light'),
themes: [
{ code: 'chrome', name: 'Chrome' },
{ code: 'clouds', name: 'Clouds' },
@@ -520,7 +531,7 @@ const editorThemes = computed(() => [
]
},
{
group: t('word.dark'),
group: t('application.dark'),
themes: [
{ code: 'ambiance', name: 'Ambiance' },
{ code: 'chaos', name: 'Chaos' },
@@ -557,8 +568,8 @@ const locales = computed(() => {
});
const copyTypes = computed(() => [
{ code: 'cell', name: t('word.cell') },
{ code: 'html', name: t('word.table') },
{ code: 'cell', name: t('database.cell') },
{ code: 'html', name: t('database.table') },
{ code: 'json', name: 'JSON' },
{ code: 'csv', name: 'CSV' },
{ code: 'sql', name: 'SQL insert' }
@@ -648,10 +659,14 @@ onBeforeUnmount(() => {
.modal-body {
overflow: hidden;
.tab-link {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
.tab-item {
max-width: 20%;
.tab-link {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
.panel-body {

View File

@@ -18,6 +18,7 @@ import { marked } from 'marked';
import BaseLoader from '@/components/BaseLoader.vue';
import { useApplicationStore } from '@/stores/application';
import { ref } from 'vue';
import { shell } from 'electron';
const { appVersion } = useApplicationStore();
@@ -26,6 +27,10 @@ const isLoading = ref(true);
const error = ref('');
const isError = ref(false);
const openOutside = (link: string) => {
shell.openExternal(link);
};
const getChangelog = async () => {
try {
const apiRes = await fetch(`https://api.github.com/repos/antares-sql/antares/releases/tags/v${appVersion}`, {
@@ -40,7 +45,7 @@ const getChangelog = async () => {
const renderer = {
link (href: string, title: string, text: string) {
return text;
return `<a class="changelog-link" href="${href}" title="${title || ''}" target="_blank">${text}</a>`;
},
listitem (text: string) {
return `<li>${text.replace(/ *\([^)]*\) */g, '')}</li>`;
@@ -57,6 +62,17 @@ const getChangelog = async () => {
}
isLoading.value = false;
setTimeout(() => {
const links = document.querySelectorAll<HTMLAnchorElement>('.changelog-link');
for (const link of links) {
link.addEventListener('click', e => {
e.preventDefault();
openOutside(link.href);
});
}
}, 0);
};
getChangelog();

View File

@@ -0,0 +1,60 @@
<template>
<div class="container">
<div class="columns">
<div class="column col-12 h6 text-uppercase mb-2">
{{ t('application.exportData') }}
</div>
<div class="column col-12">
{{ t('application.exportDataExplanation') }}
</div>
<div class="column col-12 text-right">
<button
class="btn btn-primary d-inline-flex"
@click="isExportModal=true"
>
<i class="mdi mdi-tray-arrow-up mdi-24px pr-2" />
<span>{{ t('application.exportData') }}</span>
</button>
</div>
</div>
<div class="columns mt-4 mb-2">
<div class="column col-12 h6 text-uppercase mb-2 mt-4">
{{ t('application.importData') }}
</div>
<div class="column col-12">
{{ t('application.importDataExplanation') }}
</div>
<div class="column col-12 text-right">
<button
class="btn btn-dark d-inline-flex ml-auto"
@click="isImportModal=true"
>
<i class="mdi mdi-tray-arrow-down mdi-24px pr-2" />
<span>{{ t('application.importData') }}</span>
</button>
</div>
</div>
<ModalSettingsDataExport
v-if="isExportModal"
@close="isExportModal = false"
/>
<ModalSettingsDataImport
v-if="isImportModal"
@close="isImportModal = false"
/>
</div>
</template>
<script setup lang="ts">
// import { useApplicationStore } from '@/stores/application';
import ModalSettingsDataExport from '@/components/ModalSettingsDataExport.vue';
import ModalSettingsDataImport from '@/components/ModalSettingsDataImport.vue';
import { ref } from 'vue';
import { useI18n } from 'vue-i18n';
const { t } = useI18n();
const isExportModal = ref(false);
const isImportModal = ref(false);
</script>

View File

@@ -0,0 +1,331 @@
<template>
<Teleport to="#window-content">
<div class="modal active">
<a class="modal-overlay" @click.stop="closeModal" />
<div ref="trapRef" class="modal-container p-0">
<div class="modal-header pl-2">
<div class="modal-title h6">
<div class="d-flex">
<i class="mdi mdi-24px mdi-tray-arrow-up mr-1" /> {{ t('application.exportData') }}
</div>
</div>
<a class="btn btn-clear c-hand" @click.stop="closeModal" />
</div>
<div class="modal-body pb-0">
<div class="columns export-options">
<div class="column col-8 left">
<div class="workspace-query-results" :style="'min-height: 300px;'">
<div ref="table" class="table table-hover">
<div class="thead">
<div class="tr text-center">
<div class="th no-border" :style="'width:50%'" />
<div class="th no-border" />
<div class="th no-border">
<label
class="form-checkbox m-0 px-2 form-inline"
@click.prevent="toggleAllConnections()"
>
<input
type="checkbox"
:indeterminate="includeConnectionStatus === 2"
:checked="!!includeConnectionStatus"
>
<i class="form-icon" />
</label>
</div>
</div>
<div class="tr">
<div class="th">
<div class="table-column-title">
<span>{{ t('connection.connectionName') }}</span>
</div>
</div>
<div class="th">
<div class="table-column-title">
<span>{{ t('connection.client') }}</span>
</div>
</div>
<div class="th text-center">
<div class="table-column-title">
<span>{{ t('general.include') }}</span>
</div>
</div>
</div>
</div>
<div class="tbody">
<div
v-for="(item, i) in connections"
:key="i"
class="tr"
>
<div class="td">
{{ getConnectionName(item.uid) }}
</div>
<div class="td">
{{ item.client }}
</div>
<div class="td text-center">
<label class="form-checkbox m-0 px-2 form-inline">
<input v-model="connectionToggles[item.uid]" type="checkbox">
<i class="form-icon" />
</label>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="column col-4">
<h5 class="h5">
{{ t('general.options') }}
</h5>
<label class="form-checkbox">
<input v-model="options.includes.passwords" type="checkbox">
<i class="form-icon" />
{{ t(`application.includeConnectionPasswords`) }}
</label>
<label class="form-checkbox">
<input v-model="options.includes.folders" type="checkbox">
<i class="form-icon" />
{{ t(`application.includeFolders`) }}
</label>
<div class="h6 mt-4 mb-2">
{{ t('application.encryptionPassword') }}
</div>
<fieldset class="form-group" :class="{'has-error': isPasswordError}">
<div class="input-group">
<input
ref="passkey"
v-model="options.passkey"
:type="isPasswordVisible ? 'text' : 'password'"
class="form-input"
:placeholder="t('application.required')"
>
<button
type="button"
class="btn btn-link input-group-addon"
@click="isPasswordVisible = !isPasswordVisible"
>
<i v-if="isPasswordVisible" class="mdi mdi-eye px-1" />
<i v-else class="mdi mdi-eye-off px-1" />
</button>
</div>
<span v-if="isPasswordError" class="form-input-hint">
{{ t('application.encryptionPasswordError') }}
</span>
</fieldset>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-link mr-2" @click.stop="closeModal">
{{ t('general.close') }}
</button>
<button
class="btn btn-primary mr-2"
autofocus
@click.prevent="exportData()"
>
{{ t('database.export') }}
</button>
</div>
</div>
</div>
</Teleport>
</template>
<script setup lang="ts">
import { computed, onBeforeUnmount, Ref, ref } from 'vue';
import * as moment from 'moment';
import { useI18n } from 'vue-i18n';
import { useFocusTrap } from '@/composables/useFocusTrap';
import { SidebarElement, useConnectionsStore } from '@/stores/connections';
import { unproxify } from '@/libs/unproxify';
import { uidGen } from 'common/libs/uidGen';
import { storeToRefs } from 'pinia';
import { encrypt } from 'common/libs/encrypter';
import { ConnectionParams } from 'common/interfaces/antares';
const { t } = useI18n();
const emit = defineEmits(['close']);
const { trapRef } = useFocusTrap();
const { getConnectionName } = useConnectionsStore();
const { connectionsOrder, connections } = storeToRefs(useConnectionsStore());
const localConnections = unproxify<ConnectionParams[]>(connections.value);
const localConnectionsOrder = unproxify<SidebarElement[]>(connectionsOrder.value);
const isPasswordVisible = ref(false);
const isPasswordError = ref(false);
const connectionToggles: Ref<{[k:string]: boolean}> = ref({});
const options = ref({
passkey: '',
includes: {
passwords: true,
folders: true
}
});
const filename = computed(() => {
const date = moment().format('YYYY-MM-DD');
return `backup_${date}`;
});
const includeConnectionStatus = computed(() => {
if (Object.values(connectionToggles.value).every(item => item)) return 1;
else if (Object.values(connectionToggles.value).some(item => item)) return 2;
else return 0;
});
const exportData = () => {
if (options.value.passkey.length < 8)
isPasswordError.value = true;
else {
isPasswordError.value = false;
const connectionsToInclude: string[] = [];
const connectionsUidMap = new Map<string, string>();
for (const cUid in connectionToggles.value)
if (connectionToggles.value[cUid]) connectionsToInclude.push(cUid);
let filteredConnections = unproxify<typeof localConnections>(localConnections.filter(conn => connectionsToInclude.includes(conn.uid)));
filteredConnections = filteredConnections.map(c => {
const newUid = uidGen('C');
connectionsUidMap.set(c.uid, newUid);
c.uid = newUid;
return c;
});
if (!options.value.includes.passwords) { // Remove passwords and set ask:true
filteredConnections.map(c => {
if (c.password) {
c.password = '';
c.ask = true;
}
return c;
});
}
let filteredOrders = [];
for (const [oldVal, newVal] of connectionsUidMap) {
const connOrder = unproxify(localConnectionsOrder.find(c => c.uid === oldVal));
connOrder.uid = newVal;
filteredOrders.push(connOrder);
}
if (options.value.includes.folders) { // Includes folders
const oldConnUids = Array.from(connectionsUidMap.keys());
const newConnUids = Array.from(connectionsUidMap.values());
const foldersToInclude = unproxify(localConnectionsOrder).filter(f => (
f.isFolder && oldConnUids.some(uid => f.connections.includes(uid))
)).map(f => {
f.uid = uidGen('F');
f.connections = f.connections
.map(fc => connectionsUidMap.get(fc))
.filter(fc => newConnUids.includes(fc));
return f;
});
filteredOrders = [...filteredOrders, ...foldersToInclude];
}
const exportObj = encrypt(JSON.stringify({
connections: filteredConnections,
connectionsOrder: filteredOrders
}), options.value.passkey);
// console.log(exportObj, JSON.parse(decrypt(exportObj, options.value.passkey)));
const blobContent = Buffer.from(JSON.stringify(exportObj), 'utf-8').toString('hex');
const file = new Blob([blobContent], { type: 'application/octet-stream' });
const downloadLink = document.createElement('a');
downloadLink.download = `${filename.value}.antares`;
downloadLink.href = window.URL.createObjectURL(file);
downloadLink.style.display = 'none';
document.body.appendChild(downloadLink);
downloadLink.click();
downloadLink.remove();
closeModal();
}
};
const closeModal = () => {
emit('close');
};
const onKey = (e: KeyboardEvent) => {
e.stopPropagation();
if (e.key === 'Escape')
closeModal();
};
const toggleAllConnections = () => {
if (includeConnectionStatus.value !== 1) {
connectionToggles.value = localConnections.reduce((acc, curr) => {
acc[curr.uid] = true;
return acc;
}, {} as {[k:string]: boolean});
}
else {
connectionToggles.value = localConnections.reduce((acc, curr) => {
acc[curr.uid] = false;
return acc;
}, {} as {[k:string]: boolean});
}
};
connectionToggles.value = localConnections.reduce((acc, curr) => {
acc[curr.uid] = true;
return acc;
}, {} as {[k:string]: boolean});
window.addEventListener('keydown', onKey);
onBeforeUnmount(() => {
window.removeEventListener('keydown', onKey);
});
</script>
<style lang="scss" scoped>
.export-options {
flex: 1;
overflow: hidden;
.left {
display: flex;
flex-direction: column;
flex: 1;
}
}
.workspace-query-results {
flex: 1 0 1px;
.table {
width: 100% !important;
}
.form-checkbox {
min-height: 0.8rem;
padding: 0;
.form-icon {
top: 0.1rem;
}
}
}
.modal {
.modal-container {
max-width: 800px;
}
.modal-body {
max-height: 60vh;
display: flex;
flex-direction: column;
}
}
</style>

View File

@@ -0,0 +1,263 @@
<template>
<Teleport to="#window-content">
<div class="modal modal-sm active">
<a class="modal-overlay" @click.stop="closeModal" />
<div ref="trapRef" class="modal-container p-0">
<div class="modal-header pl-2">
<div class="modal-title h6">
<div class="d-flex">
<i class="mdi mdi-24px mdi-tray-arrow-down mr-1" /> {{ t('application.importData') }}
</div>
</div>
<a class="btn btn-clear c-hand" @click.stop="closeModal" />
</div>
<div class="modal-body pb-0">
<div class="mb-2">
<div class="h6 mb-2">
{{ t('application.choseFile') }}
</div>
<BaseUploadInput
:model-value="filePath"
:message="t('general.browse')"
accept=".antares"
@clear="filePath = ''"
@change="filesChange($event)"
/>
</div>
<div class="mb-2">
<div class="h6 mb-2">
{{ t('application.password') }}
</div>
<fieldset class="form-group" :class="{'has-error': isPasswordError}">
<div class="input-group">
<input
ref="passkey"
v-model="options.passkey"
:type="isPasswordVisible ? 'text' : 'password'"
class="form-input"
:placeholder="t('application.required')"
>
<button
type="button"
class="btn btn-link input-group-addon"
@click="isPasswordVisible = !isPasswordVisible"
>
<i v-if="isPasswordVisible" class="mdi mdi-eye px-1" />
<i v-else class="mdi mdi-eye-off px-1" />
</button>
</div>
<span v-if="isPasswordError" class="form-input-hint">
{{ t('application.encryptionPasswordError') }}
</span>
</fieldset>
</div>
<div class="mb-2">
<label class="form-checkbox">
<input v-model="options.ignoreDuplicates" type="checkbox">
<i class="form-icon" />
{{ t(`application.ignoreDuplicates`) }}
</label>
</div>
</div>
<div class="modal-footer">
<button
class="btn btn-link mr-2"
@click.stop="closeModal"
>
{{ t('general.close') }}
</button>
<button
class="btn btn-primary mr-2"
:disabled="!filePath"
@click.prevent="importData()"
>
{{ t('database.import') }}
</button>
</div>
</div>
</div>
</Teleport>
</template>
<script setup lang="ts">
import { onBeforeUnmount, ref } from 'vue';
import { useI18n } from 'vue-i18n';
import BaseUploadInput from '@/components/BaseUploadInput.vue';
import { SidebarElement, useConnectionsStore } from '@/stores/connections';
import { unproxify } from '@/libs/unproxify';
import { storeToRefs } from 'pinia';
import { decrypt } from 'common/libs/encrypter';
import { useNotificationsStore } from '@/stores/notifications';
import { ConnectionParams } from 'common/interfaces/antares';
const { t } = useI18n();
const emit = defineEmits(['close']);
const { addNotification } = useNotificationsStore();
const connectionsStore = useConnectionsStore();
const { importConnections } = connectionsStore;
const { connections } = storeToRefs(connectionsStore);
const filePath = ref('');
const fileContent = ref(null);
const isPasswordVisible = ref(false);
const isPasswordError = ref(false);
const options = ref({
passkey: '',
ignoreDuplicates: true
});
const closeModal = () => {
emit('close');
};
const filesChange = ({ target } : {target: HTMLInputElement }) => {
const { files } = target;
if (!files.length) return;
const reader = new FileReader();
reader.readAsText(files[0]);
reader.onload = () => {
fileContent.value = reader.result;
filePath.value = files[0].path;
};
};
const importData = () => {
if (options.value.passkey.length < 8)
isPasswordError.value = true;
else {
try {
const hash = JSON.parse(Buffer.from(fileContent.value, 'hex').toString('utf-8'));
try {
const importObj: {
connections: ConnectionParams[];
connectionsOrder: SidebarElement[];
} = JSON.parse(decrypt(hash, options.value.passkey));
if (options.value.ignoreDuplicates) {
const actualConnections = unproxify(connections.value).map(c => {
delete c.uid;
delete c.name;
delete c.password;
delete c.ask;
delete c.key;
delete c.cert;
delete c.ca;
delete c.sshKey;
return JSON.stringify(c);
});
const incomingConnections = unproxify<ConnectionParams[]>(importObj.connections).map(c => {
const uid = c.uid;
delete c.uid;
delete c.name;
delete c.password;
delete c.ask;
delete c.key;
delete c.cert;
delete c.ca;
delete c.sshKey;
return { uid, jsonString: JSON.stringify(c) };
});
const newConnectionsUid = incomingConnections
.filter(c => !actualConnections.includes(c.jsonString))
.reduce((acc, cur) => {
acc.push(cur.uid);
return acc;
}, [] as string[]);
importObj.connections = importObj.connections.filter(c => newConnectionsUid.includes(c.uid));
importObj.connectionsOrder = importObj.connectionsOrder
.filter(c => newConnectionsUid
.includes(c.uid) ||
(c.isFolder && c.connections.every(c => newConnectionsUid.includes(c))));
}
importConnections(importObj);
addNotification({
status: 'success',
message: t('application.dataImportSuccess')
});
closeModal();
}
catch (error) {
addNotification({
status: 'error',
message: t('application.wrongImportPassword')
});
}
}
catch (error) {
addNotification({
status: 'error',
message: t('application.wrongFileFormat')
});
}
}
};
const onKey = (e: KeyboardEvent) => {
e.stopPropagation();
if (e.key === 'Escape')
closeModal();
};
window.addEventListener('keydown', onKey);
onBeforeUnmount(() => {
window.removeEventListener('keydown', onKey);
});
</script>
<style lang="scss" scoped>
.export-options {
flex: 1;
overflow: hidden;
.left {
display: flex;
flex-direction: column;
flex: 1;
}
}
.workspace-query-results {
flex: 1 0 1px;
.table {
width: 100% !important;
}
.form-checkbox {
min-height: 0.8rem;
padding: 0;
.form-icon {
top: 0.1rem;
}
}
}
.modal {
.modal-body {
max-height: 60vh;
display: flex;
flex-direction: column;
}
}
</style>

View File

@@ -2,10 +2,10 @@
<div class="p-relative">
<div class="shortcuts-tools pb-2 px-2">
<button class="btn btn-dark btn-sm d-flex ml-2" @click="showAddModal">
<i class="mdi mdi-24px mdi-plus mr-1" /><span>{{ t('message.addShortcut') }}</span>
<i class="mdi mdi-24px mdi-plus mr-1" /><span>{{ t('application.addShortcut') }}</span>
</button>
<button class="btn btn-dark btn-sm d-flex ml-2" @click="isConfirmRestoreModal = true">
<i class="mdi mdi-24px mdi-undo mr-1" /><span>{{ t('message.restoreDefaults') }}</span>
<i class="mdi mdi-24px mdi-undo mr-1" /><span>{{ t('application.restoreDefaults') }}</span>
</button>
</div>
<div class="container workspace-query-results">
@@ -14,12 +14,12 @@
<div class="tr text-uppercase">
<div class="th no-border">
<div>
{{ t('word.event') }}
{{ t('application.event') }}
</div>
</div>
<div class="th no-border" style="width: 100%;">
<div>
{{ t('word.key', 2) }}
{{ t('application.key', 2) }}
</div>
</div>
<div class="th no-border" />
@@ -43,10 +43,10 @@
/>
<div class="td py-1 pr-2">
<button class="shortcut-button btn btn-link btn-sm d-flex p-0 px-1 mr-2" @click="showEditModal({...shortcut, index: i})">
<span>{{ t('word.edit') }}</span><i class="mdi mdi-pencil ml-1" />
<span>{{ t('general.edit') }}</span><i class="mdi mdi-pencil ml-1" />
</button>
<button class="shortcut-button btn btn-link btn-sm d-flex p-0 px-1" @click="showDeleteModal(shortcut)">
<span>{{ t('word.delete') }}</span><i class="mdi mdi-delete-outline ml-1" />
<span>{{ t('general.delete') }}</span><i class="mdi mdi-delete-outline ml-1" />
</button>
</div>
</div>
@@ -58,20 +58,20 @@
<ConfirmModal
v-if="isConfirmAddModal"
:disable-autofocus="true"
:confirm-text="t('word.save')"
:confirm-text="t('general.save')"
:close-on-confirm="false"
@confirm="addShortcut"
@hide="closeAddModal"
>
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-plus mr-1" /> {{ t('message.addShortcut') }}
<i class="mdi mdi-24px mdi-plus mr-1" /> {{ t('application.addShortcut') }}
</div>
</template>
<template #body>
<div class="mb-2">
<div class="form-group">
<label class="form-label">{{ t('word.event') }}</label>
<label class="form-label">{{ t('application.event') }}</label>
<BaseSelect
v-model="shortcutToAdd.event"
class="form-select"
@@ -81,31 +81,31 @@
</div>
<div class="mb-2">
<div class="form-group">
<label class="form-label">{{ t('word.key', 2) }}</label>
<label class="form-label">{{ t('application.key', 2) }}</label>
<KeyPressDetector v-model="typedShortcut" />
</div>
</div>
<small v-if="doesShortcutExists" class="text-warning">{{ t('message.shortcutAlreadyExists') }}</small>
<small v-if="doesShortcutExists" class="text-warning">{{ t('application.shortcutAlreadyExists') }}</small>
</template>
</ConfirmModal>
<ConfirmModal
v-if="isConfirmEditModal"
:disable-autofocus="true"
:confirm-text="t('word.save')"
:confirm-text="t('general.save')"
:close-on-confirm="false"
@confirm="editShortcut"
@hide="closeEditModal"
>
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-plus mr-1" /> {{ t('message.editShortcut') }}
<i class="mdi mdi-24px mdi-plus mr-1" /> {{ t('application.editShortcut') }}
</div>
</template>
<template #body>
<div class="mb-2">
<div class="form-group">
<label class="form-label">{{ t('word.event') }}</label>
<label class="form-label">{{ t('application.event') }}</label>
<BaseSelect
v-model="shortcutToEdit.event"
class="form-select"
@@ -116,11 +116,11 @@
</div>
<div class="mb-2">
<div class="form-group">
<label class="form-label">{{ t('word.key', 2) }}</label>
<label class="form-label">{{ t('application.key', 2) }}</label>
<KeyPressDetector v-model="shortcutToEdit.keys[0]" />
</div>
</div>
<small v-if="doesShortcutExists" class="text-warning">{{ t('message.shortcutAlreadyExists') }}</small>
<small v-if="doesShortcutExists" class="text-warning">{{ t('application.shortcutAlreadyExists') }}</small>
</template>
</ConfirmModal>
@@ -132,12 +132,12 @@
>
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-delete mr-1" /> {{ t('message.deleteShortcut') }}
<i class="mdi mdi-24px mdi-delete mr-1" /> {{ t('application.deleteShortcut') }}
</div>
</template>
<template #body>
<div class="mb-2">
{{ t('message.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].l18n, {param: shortcutEvents[shortcutToDelete.event].l18nParam}) }} (<span v-html="parseKeys(shortcutToDelete.keys)" />)</b>?
</div>
</template>
</ConfirmModal>
@@ -150,12 +150,12 @@
>
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-undo mr-1" /> {{ t('message.restoreDefaults') }}
<i class="mdi mdi-24px mdi-undo mr-1" /> {{ t('application.restoreDefaults') }}
</div>
</template>
<template #body>
<div class="mb-2">
{{ t('message.restoreDefaultsQuestion') }}
{{ t('application.restoreDefaultsQuestion') }}
</div>
</template>
</ConfirmModal>

View File

@@ -26,27 +26,27 @@
:class="{'loading': updateStatus === 'checking'}"
@click="checkForUpdates"
>
{{ t('message.checkForUpdates') }}
{{ t('application.checkForUpdates') }}
</button>
<button
v-else-if="updateStatus === 'downloaded'"
class="btn btn-primary"
@click="restartToUpdate"
>
{{ t('message.restartToInstall') }}
{{ t('application.restartToInstall') }}
</button>
<button
v-else-if="updateStatus === 'link'"
class="btn btn-primary"
@click="openOutside('https://antares-sql.app/download.html')"
>
{{ t('message.goToDownloadPage') }}
{{ t('application.goToDownloadPage') }}
</button>
</div>
<div class="form-group mt-4">
<label class="form-switch d-inline-block" @click.prevent="toggleAllowPrerelease">
<input type="checkbox" :checked="allowPrerelease">
<i class="form-icon" /> {{ t('message.includeBetaUpdates') }}
<i class="form-icon" /> {{ t('application.includeBetaUpdates') }}
</label>
</div>
</div>
@@ -76,19 +76,19 @@ const { changeAllowPrerelease } = settingsStore;
const updateMessage = computed(() => {
switch (updateStatus.value) {
case 'noupdate':
return t('message.noUpdatesAvailable');
return t('application.noUpdatesAvailable');
case 'checking':
return t('message.checkingForUpdate');
return t('application.checkingForUpdate');
case 'nocheck':
return t('message.checkFailure');
return t('application.checkFailure');
case 'available':
return t('message.updateAvailable');
return t('application.updateAvailable');
case 'downloading':
return t('message.downloadingUpdate');
return t('application.downloadingUpdate');
case 'downloaded':
return t('message.updateDownloaded');
return t('application.updateDownloaded');
case 'link':
return t('message.updateAvailable');
return t('application.updateAvailable');
default:
return updateStatus.value;
}

View File

@@ -8,20 +8,20 @@
class="context-element"
@click="disconnect"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-power text-light pr-1" /> {{ t('word.disconnect') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-power text-light pr-1" /> {{ t('connection.disconnect') }}</span>
</div>
<div
v-if="!contextConnection.isFolder"
class="context-element"
@click="duplicateConnection"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-content-duplicate text-light pr-1" /> {{ t('word.duplicate') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-content-duplicate text-light pr-1" /> {{ t('general.duplicate') }}</span>
</div>
<div class="context-element" @click.stop="showAppearanceModal">
<span class="d-flex"><i class="mdi mdi-18px mdi-brush-variant text-light pr-1" /> {{ t('word.appearance') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-brush-variant text-light pr-1" /> {{ t('application.appearance') }}</span>
</div>
<div class="context-element" @click="showConfirmModal">
<span class="d-flex"><i class="mdi mdi-18px mdi-delete text-light pr-1" /> {{ t('word.delete') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-delete text-light pr-1" /> {{ t('general.delete') }}</span>
</div>
<ConfirmModal
@@ -31,12 +31,12 @@
>
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mr-1" :class="[contextConnection.isFolder ? 'mdi-folder-remove' : 'mdi-server-remove']" /> {{ t(contextConnection.isFolder ? 'message.deleteFolder' : 'message.deleteConnection') }}
<i class="mdi mdi-24px mr-1" :class="[contextConnection.isFolder ? 'mdi-folder-remove' : 'mdi-server-remove']" /> {{ t(contextConnection.isFolder ? 'application.deleteFolder' : 'connection.deleteConnection') }}
</div>
</template>
<template #body>
<div class="mb-2">
{{ t('message.deleteConfirm') }} <b>{{ connectionName }}</b>?
{{ t('general.deleteConfirm') }} <b>{{ connectionName }}</b>?
</div>
</template>
</ConfirmModal>
@@ -96,7 +96,7 @@ const isConfirmModal = ref(false);
const isFolderEdit = ref(false);
const isConnectionEdit = ref(false);
const connectionName = computed(() => props.contextConnection.name || getConnectionName(props.contextConnection.uid) || t('word.folder', 1));
const connectionName = computed(() => props.contextConnection.name || getConnectionName(props.contextConnection.uid) || t('general.folder', 1));
const isConnected = computed(() => getWorkspace(props.contextConnection.uid)?.connectionStatus === 'connected');
const confirmDeleteConnection = () => {

View File

@@ -12,7 +12,7 @@
</li>
<li v-if="connectionInfos && connectionInfos.readonly" class="footer-element">
<i class="mdi mdi-18px mdi-lock mr-1" />
<small>{{ t('message.readOnlyMode') }}</small>
<small>{{ t('connection.readOnlyMode') }}</small>
</li>
<li v-if="connectionInfos && connectionInfos.ssl" class="footer-element">
<i class="mdi mdi-18px mdi-shield-key mr-1" />
@@ -33,22 +33,22 @@
@click="toggleConsole()"
>
<i class="mdi mdi-18px mdi-console-line mr-1" />
<small>{{ t('word.console') }}</small>
<small>{{ t('application.console') }}</small>
</li>
<li class="footer-element footer-link" @click="openOutside('https://www.paypal.com/paypalme/fabiodistasio')">
<i class="mdi mdi-18px mdi-coffee mr-1" />
<small>{{ t('word.donate') }}</small>
<small>{{ t('general.donate') }}</small>
</li>
<li
class="footer-element footer-link"
:title="t('message.reportABug')"
:title="t('application.reportABug')"
@click="openOutside('https://github.com/antares-sql/antares/issues')"
>
<i class="mdi mdi-18px mdi-bug" />
</li>
<li
class="footer-element footer-link"
:title="t('word.about')"
:title="t('application.about')"
@click="showSettingModal('about')"
>
<i class="mdi mdi-18px mdi-information-outline" />

View File

@@ -1,14 +1,14 @@
<template>
<ConfirmModal
:confirm-text="t('word.update')"
:cancel-text="t('word.close')"
:confirm-text="t('application.update')"
:cancel-text="t('general.close')"
size="large"
:hide-footer="true"
@hide="hideScratchpad"
>
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-notebook-edit-outline mr-1" /> {{ t('word.scratchpad') }}
<i class="mdi mdi-24px mdi-notebook-edit-outline mr-1" /> {{ t('application.scratchpad') }}
</div>
</template>
<template #body>
@@ -22,7 +22,7 @@
:show-line-numbers="false"
/>
</div>
<small class="text-gray">{{ t('message.markdownSupported') }}</small>
<small class="text-gray">{{ t('application.markdownSupported') }}</small>
</div>
</template>
</ConfirmModal>

View File

@@ -22,7 +22,7 @@
v-tooltip="{
strategy: 'fixed',
placement: 'right',
content: t('message.allConnections')
content: t('connection.allConnections')
}"
class="settingbar-element btn btn-link"
@click="emit('show-connections-modal')"
@@ -35,7 +35,7 @@
v-tooltip="{
strategy: 'fixed',
placement: 'right',
content: t('message.addConnection')
content: t('connection.addConnection')
}"
class="settingbar-element btn btn-link"
:class="{ 'selected': 'NEW' === selectedWorkspace }"
@@ -55,7 +55,7 @@
v-tooltip="{
strategy: 'fixed',
placement: 'right',
content: t('word.scratchpad')
content: t('application.scratchpad')
}"
class="settingbar-element btn btn-link"
@click="showScratchpad"
@@ -66,7 +66,7 @@
v-tooltip="{
strategy: 'fixed',
placement: 'right',
content: t('word.settings')
content: t('application.settings')
}"
class="settingbar-element btn btn-link"
@click="showSettingModal('general')"

View File

@@ -63,7 +63,7 @@ const isLinux = process.platform === 'linux';
const windowTitle = computed(() => {
if (!selectedWorkspace.value) return '';
if (selectedWorkspace.value === 'NEW') return t('message.createNewConnection');
if (selectedWorkspace.value === 'NEW') return t('connection.createNewConnection');
const connectionName = getConnectionName(selectedWorkspace.value);
const workspace = getWorkspace(selectedWorkspace.value);

View File

@@ -45,7 +45,7 @@
<span>{{ cutText(element.content || 'Query', 20, true) }} #{{ element.index }}</span>
<span
class="btn btn-clear"
:title="t('word.close')"
:title="t('general.close')"
@mousedown.left.stop
@click.stop="closeTab(element)"
/>
@@ -58,11 +58,11 @@
@dblclick="openAsPermanentTab(element)"
>
<i class="mdi mdi-18px mr-1" :class="element.elementType === 'view' ? 'mdi-table-eye' : 'mdi-table'" />
<span :title="`${t('word.data').toUpperCase()}: ${t(`word.${element.elementType}`)}`">
<span :title="`${t('general.data').toUpperCase()}: ${t(`database.${element.elementType}`)}`">
<span class=" text-italic">{{ cutText(element.elementName, 20, true) }}</span>
<span
class="btn btn-clear"
:title="t('word.close')"
:title="t('general.close')"
@mousedown.left.stop
@click.stop="closeTab(element)"
/>
@@ -71,11 +71,11 @@
<a v-else-if="element.type === 'data'" class="tab-link">
<i class="mdi mdi-18px mr-1" :class="element.elementType === 'view' ? 'mdi-table-eye' : 'mdi-table'" />
<span :title="`${t('word.data').toUpperCase()}: ${t(`word.${element.elementType}`)}`">
<span :title="`${t('general.data').toUpperCase()}: ${t(`database.${element.elementType}`)}`">
{{ cutText(element.elementName, 20, true) }}
<span
class="btn btn-clear"
:title="t('word.close')"
:title="t('general.close')"
@mousedown.left.stop
@click.stop="closeTab(element)"
/>
@@ -88,11 +88,11 @@
:class="{'badge': element.isChanged}"
>
<i class="mdi mdi-shape-square-plus mdi-18px mr-1" />
<span :title="`${t('word.new').toUpperCase()}: ${t(`word.${element.elementType}`)}`">
{{ t('message.newTable') }}
<span :title="`${t('general.new').toUpperCase()}: ${t(`database.${element.elementType}`)}`">
{{ t('database.newTable') }}
<span
class="btn btn-clear"
:title="t('word.close')"
:title="t('general.close')"
@mousedown.left.stop
@click.stop="closeTab(element)"
/>
@@ -105,11 +105,11 @@
:class="{'badge': element.isChanged}"
>
<i class="mdi mdi-wrench-cog mdi-18px mr-1" />
<span :title="`${t('word.settings').toUpperCase()}: ${t(`word.${element.elementType}`)}`">
<span :title="`${t('application.settings').toUpperCase()}: ${t(`database.${element.elementType}`)}`">
{{ cutText(element.elementName, 20, true) }}
<span
class="btn btn-clear"
:title="t('word.close')"
:title="t('general.close')"
@mousedown.left.stop
@click.stop="closeTab(element)"
/>
@@ -122,11 +122,11 @@
:class="{'badge': element.isChanged}"
>
<i class="mdi mdi-wrench-cog mdi-18px mr-1" />
<span :title="`${t('word.settings').toUpperCase()}: ${t(`word.view`)}`">
<span :title="`${t('application.settings').toUpperCase()}: ${t(`database.view`)}`">
{{ cutText(element.elementName, 20, true) }}
<span
class="btn btn-clear"
:title="t('word.close')"
:title="t('general.close')"
@mousedown.left.stop
@click.stop="closeTab(element)"
/>
@@ -139,11 +139,11 @@
:class="{'badge': element.isChanged}"
>
<i class="mdi mdi-shape-square-plus mdi-18px mr-1" />
<span :title="`${t('word.new').toUpperCase()}: ${t(`word.${element.elementType}`)}`">
{{ t('message.newView') }}
<span :title="`${t('general.new').toUpperCase()}: ${t(`database.${element.elementType}`)}`">
{{ t('database.newView') }}
<span
class="btn btn-clear"
:title="t('word.close')"
:title="t('general.close')"
@mousedown.left.stop
@click.stop="closeTab(element)"
/>
@@ -156,11 +156,11 @@
:class="{'badge': element.isChanged}"
>
<i class="mdi mdi-shape-square-plus mdi-18px mr-1" />
<span :title="`${t('word.new').toUpperCase()}: ${t(`word.${element.elementType}`)}`">
{{ t('message.newTrigger') }}
<span :title="`${t('general.new').toUpperCase()}: ${t(`database.${element.elementType}`)}`">
{{ t('database.newTrigger') }}
<span
class="btn btn-clear"
:title="t('word.close')"
:title="t('general.close')"
@mousedown.left.stop
@click.stop="closeTab(element)"
/>
@@ -173,11 +173,11 @@
:class="{'badge': element.isChanged}"
>
<i class="mdi mdi-shape-square-plus mdi-18px mr-1" />
<span :title="`${t('word.new').toUpperCase()}: ${t(`word.${element.elementType}`)}`">
{{ t('message.newRoutine') }}
<span :title="`${t('general.new').toUpperCase()}: ${t(`database.${element.elementType}`)}`">
{{ t('database.newRoutine') }}
<span
class="btn btn-clear"
:title="t('word.close')"
:title="t('general.close')"
@mousedown.left.stop
@click.stop="closeTab(element)"
/>
@@ -190,11 +190,11 @@
:class="{'badge': element.isChanged}"
>
<i class="mdi mdi-shape-square-plus mdi-18px mr-1" />
<span :title="`${t('word.new').toUpperCase()}: ${t(`word.${element.elementType}`)}`">
{{ t('message.newFunction') }}
<span :title="`${t('general.new').toUpperCase()}: ${t(`database.${element.elementType}`)}`">
{{ t('database.newFunction') }}
<span
class="btn btn-clear"
:title="t('word.close')"
:title="t('general.close')"
@mousedown.left.stop
@click.stop="closeTab(element)"
/>
@@ -207,11 +207,11 @@
:class="{'badge': element.isChanged}"
>
<i class="mdi mdi-shape-square-plus mdi-18px mr-1" />
<span :title="`${t('word.new').toUpperCase()}: ${t(`word.${element.elementType}`)}`">
{{ t('message.newTriggerFunction') }}
<span :title="`${t('general.new').toUpperCase()}: ${t(`database.${element.elementType}`)}`">
{{ t('database.newTriggerFunction') }}
<span
class="btn btn-clear"
:title="t('word.close')"
:title="t('general.close')"
@mousedown.left.stop
@click.stop="closeTab(element)"
/>
@@ -224,11 +224,11 @@
:class="{'badge': element.isChanged}"
>
<i class="mdi mdi-shape-square-plus mdi-18px mr-1" />
<span :title="`${t('word.new').toUpperCase()}: ${t(`word.${element.elementType}`)}`">
{{ t('message.newScheduler') }}
<span :title="`${t('general.new').toUpperCase()}: ${t(`database.${element.elementType}`)}`">
{{ t('database.newScheduler') }}
<span
class="btn btn-clear"
:title="t('word.close')"
:title="t('general.close')"
@mousedown.left.stop
@click.stop="closeTab(element)"
/>
@@ -242,11 +242,11 @@
@dblclick="openAsPermanentTab(element)"
>
<i class="mdi mdi-18px mdi-wrench-cog mr-1" />
<span :title="`${t('word.settings').toUpperCase()}: ${t(`word.${element.elementType}`)}`">
<span :title="`${t('application.settings').toUpperCase()}: ${t(`database.${element.elementType}`)}`">
<span class=" text-italic">{{ cutText(element.elementName, 20, true) }}</span>
<span
class="btn btn-clear"
:title="t('word.close')"
:title="t('general.close')"
@mousedown.left.stop
@click.stop="closeTab(element)"
/>
@@ -259,11 +259,11 @@
:class="{'badge': element.isChanged}"
>
<i class="mdi mdi-18px mdi-wrench-cog mr-1" />
<span :title="`${t('word.settings').toUpperCase()}: ${t(`word.${element.elementType}`)}`">
<span :title="`${t('application.settings').toUpperCase()}: ${t(`database.${element.elementType}`)}`">
{{ cutText(element.elementName, 20, true) }}
<span
class="btn btn-clear"
:title="t('word.close')"
:title="t('general.close')"
@mousedown.left.stop
@click.stop="closeTab(element)"
/>
@@ -279,7 +279,7 @@
<a
class="tab-link workspace-tools-link dropdown-toggle"
tabindex="0"
:title="t('word.tools')"
:title="t('general.tools')"
>
<i class="mdi mdi-24px mdi-tools" />
</a>
@@ -287,13 +287,13 @@
<li class="menu-item">
<a class="c-hand p-vcentered" @click="showProcessesModal">
<i class="mdi mdi-memory mr-1 tool-icon" />
<span>{{ t('message.processesList') }}</span>
<span>{{ t('database.processesList') }}</span>
</a>
</li>
<li class="menu-item">
<a class="c-hand p-vcentered" @click="toggleConsole">
<i class="mdi mdi-console-line mr-1 tool-icon" />
<span>{{ t('word.console') }}</span>
<span>{{ t('application.console') }}</span>
</a>
</li>
<li
@@ -303,7 +303,7 @@
>
<a class="c-hand p-vcentered disabled">
<i class="mdi mdi-shape mr-1 tool-icon" />
<span>{{ t('word.variables') }}</span>
<span>{{ t('database.variables') }}</span>
</a>
</li>
<li
@@ -313,7 +313,7 @@
>
<a class="c-hand p-vcentered disabled">
<i class="mdi mdi-account-group mr-1 tool-icon" />
<span>{{ t('message.manageUsers') }}</span>
<span>{{ t('database.manageUsers') }}</span>
</a>
</li>
</ul>
@@ -323,7 +323,7 @@
<li class="tab-item">
<a
class="tab-add"
:title="t('message.openNewTab')"
:title="t('application.openNewTab')"
@click="addQueryTab"
>
<i class="mdi mdi-24px mdi-plus" />

View File

@@ -8,7 +8,7 @@
:class="{'active': selectedTab === 'general'}"
@click="selectTab('general')"
>
<a class="tab-link">{{ t('word.general') }}</a>
<a class="tab-link">{{ t('application.general') }}</a>
</li>
<li
v-if="clientCustomizations.sslConnection"
@@ -16,7 +16,7 @@
:class="{'active': selectedTab === 'ssl'}"
@click="selectTab('ssl')"
>
<a class="tab-link">{{ t('word.ssl') }}</a>
<a class="tab-link">{{ t('connection.ssl') }}</a>
</li>
<li
v-if="clientCustomizations.sshConnection"
@@ -24,7 +24,7 @@
:class="{'active': selectedTab === 'ssh'}"
@click="selectTab('ssh')"
>
<a class="tab-link">{{ t('word.sshTunnel') }}</a>
<a class="tab-link">{{ t('connection.sshTunnel') }}</a>
</li>
</ul>
</div>
@@ -34,7 +34,7 @@
<fieldset class="m-0" :disabled="isBusy">
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.connectionName') }}</label>
<label class="form-label cut-text">{{ t('connection.connectionName') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -47,7 +47,7 @@
</div>
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.client') }}</label>
<label class="form-label cut-text">{{ t('connection.client') }}</label>
</div>
<div class="column col-8 col-sm-12">
<BaseSelect
@@ -61,7 +61,7 @@
</div>
<div v-if="connection.client === 'pg'" class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.connectionString') }}</label>
<label class="form-label cut-text">{{ t('connection.connectionString') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -74,7 +74,7 @@
</div>
<div v-if="!clientCustomizations.fileConnection" class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.hostName') }}/IP</label>
<label class="form-label cut-text">{{ t('connection.hostName') }}/IP</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -86,12 +86,12 @@
</div>
<div v-if="clientCustomizations.fileConnection" class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.database') }}</label>
<label class="form-label cut-text">{{ t('database.database') }}</label>
</div>
<div class="column col-8 col-sm-12">
<BaseUploadInput
:model-value="connection.databasePath"
:message="t('word.browse')"
:message="t('general.browse')"
@clear="pathClear('databasePath')"
@change="pathSelection($event, 'databasePath')"
/>
@@ -99,7 +99,7 @@
</div>
<div v-if="!clientCustomizations.fileConnection" class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.port') }}</label>
<label class="form-label cut-text">{{ t('connection.port') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -113,7 +113,7 @@
</div>
<div v-if="clientCustomizations.database" class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.database') }}</label>
<label class="form-label cut-text">{{ t('database.database') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -126,7 +126,7 @@
</div>
<div v-if="!clientCustomizations.fileConnection" class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.user') }}</label>
<label class="form-label cut-text">{{ t('connection.user') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -139,7 +139,7 @@
</div>
<div v-if="!clientCustomizations.fileConnection" class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.password') }}</label>
<label class="form-label cut-text">{{ t('connection.password') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -152,14 +152,14 @@
</div>
<div v-if="clientCustomizations.connectionSchema" class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.schema') }}</label>
<label class="form-label cut-text">{{ t('database.schema') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
v-model="connection.schema"
class="form-input"
type="text"
:placeholder="t('word.all')"
:placeholder="t('general.all')"
>
</div>
</div>
@@ -167,7 +167,7 @@
<div class="column col-4 col-sm-12" />
<div class="column col-8 col-sm-12">
<label class="form-checkbox form-inline">
<input v-model="connection.readonly" type="checkbox"><i class="form-icon" /> {{ t('message.readOnlyMode') }}
<input v-model="connection.readonly" type="checkbox"><i class="form-icon" /> {{ t('connection.readOnlyMode') }}
</label>
</div>
</div>
@@ -175,7 +175,7 @@
<div class="column col-4 col-sm-12" />
<div class="column col-8 col-sm-12">
<label class="form-checkbox form-inline">
<input v-model="connection.ask" type="checkbox"><i class="form-icon" /> {{ t('message.askCredentials') }}
<input v-model="connection.ask" type="checkbox"><i class="form-icon" /> {{ t('connection.askCredentials') }}
</label>
</div>
</div>
@@ -189,7 +189,7 @@
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">
{{ t('message.enableSsl') }}
{{ t('connection.enableSsl') }}
</label>
</div>
<div class="column col-8 col-sm-12">
@@ -202,12 +202,12 @@
<fieldset class="m-0" :disabled="isBusy || !connection.ssl">
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.privateKey') }}</label>
<label class="form-label cut-text">{{ t('connection.privateKey') }}</label>
</div>
<div class="column col-8 col-sm-12">
<BaseUploadInput
:model-value="connection.key"
:message="t('word.browse')"
:message="t('general.browse')"
@clear="pathClear('key')"
@change="pathSelection($event, 'key')"
/>
@@ -215,12 +215,12 @@
</div>
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.certificate') }}</label>
<label class="form-label cut-text">{{ t('connection.certificate') }}</label>
</div>
<div class="column col-8 col-sm-12">
<BaseUploadInput
:model-value="connection.cert"
:message="t('word.browse')"
:message="t('general.browse')"
@clear="pathClear('cert')"
@change="pathSelection($event, 'cert')"
/>
@@ -228,12 +228,12 @@
</div>
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.caCertificate') }}</label>
<label class="form-label cut-text">{{ t('connection.caCertificate') }}</label>
</div>
<div class="column col-8 col-sm-12">
<BaseUploadInput
:model-value="connection.ca"
:message="t('word.browse')"
:message="t('general.browse')"
@clear="pathClear('ca')"
@change="pathSelection($event, 'ca')"
/>
@@ -241,7 +241,7 @@
</div>
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.ciphers') }}</label>
<label class="form-label cut-text">{{ t('connection.ciphers') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -256,7 +256,7 @@
<div class="column col-4 col-sm-12" />
<div class="column col-8 col-sm-12">
<label class="form-checkbox form-inline">
<input v-model="connection.untrustedConnection" type="checkbox"><i class="form-icon" /> {{ t('message.untrustedConnection') }}
<input v-model="connection.untrustedConnection" type="checkbox"><i class="form-icon" /> {{ t('connection.untrustedConnection') }}
</label>
</div>
</div>
@@ -270,7 +270,7 @@
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">
{{ t('message.enableSsh') }}
{{ t('connection.enableSsh') }}
</label>
</div>
<div class="column col-8 col-sm-12">
@@ -283,7 +283,7 @@
<fieldset class="m-0" :disabled="isBusy || !connection.ssh">
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.hostName') }}/IP</label>
<label class="form-label cut-text">{{ t('connection.hostName') }}/IP</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -295,7 +295,7 @@
</div>
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.user') }}</label>
<label class="form-label cut-text">{{ t('connection.user') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -307,7 +307,7 @@
</div>
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.password') }}</label>
<label class="form-label cut-text">{{ t('connection.password') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -319,7 +319,7 @@
</div>
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.port') }}</label>
<label class="form-label cut-text">{{ t('connection.port') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -333,12 +333,12 @@
</div>
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.privateKey') }}</label>
<label class="form-label cut-text">{{ t('connection.privateKey') }}</label>
</div>
<div class="column col-8 col-sm-12">
<BaseUploadInput
:model-value="connection.sshKey"
:message="t('word.browse')"
:message="t('general.browse')"
@clear="pathClear('sshKey')"
@change="pathSelection($event, 'sshKey')"
/>
@@ -346,7 +346,7 @@
</div>
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.passphrase') }}</label>
<label class="form-label cut-text">{{ t('connection.passphrase') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -369,7 +369,7 @@
@click="startTest"
>
<i class="mdi mdi-24px mdi-lightning-bolt mr-1" />
{{ t('message.testConnection') }}
{{ t('connection.testConnection') }}
</button>
<button
id="connection-save"
@@ -378,7 +378,7 @@
@click="saveConnection"
>
<i class="mdi mdi-24px mdi-content-save mr-1" />
{{ t('word.save') }}
{{ t('general.save') }}
</button>
</div>
</div>
@@ -484,7 +484,7 @@ const startTest = async () => {
if (res.status === 'error')
addNotification({ status: 'error', message: res.response.message || res.response.toString() });
else
addNotification({ status: 'success', message: t('message.connectionSuccessfullyMade') });
addNotification({ status: 'success', message: t('connection.connectionSuccessfullyMade') });
}
catch (err) {
addNotification({ status: 'error', message: err.stack });
@@ -508,7 +508,7 @@ const continueTest = async (credentials: { user: string; password: string }) =>
if (res.status === 'error')
addNotification({ status: 'error', message: res.response.message || res.response.toString() });
else
addNotification({ status: 'success', message: t('message.connectionSuccessfullyMade') });
addNotification({ status: 'success', message: t('connection.connectionSuccessfullyMade') });
}
}
catch (err) {

View File

@@ -8,7 +8,7 @@
:class="{'active': selectedTab === 'general'}"
@click="selectTab('general')"
>
<a class="tab-link">{{ t('word.general') }}</a>
<a class="tab-link">{{ t('application.general') }}</a>
</li>
<li
v-if="clientCustomizations.sslConnection"
@@ -16,7 +16,7 @@
:class="{'active': selectedTab === 'ssl'}"
@click="selectTab('ssl')"
>
<a class="tab-link">{{ t('word.ssl') }}</a>
<a class="tab-link">{{ t('connection.ssl') }}</a>
</li>
<li
v-if="clientCustomizations.sshConnection"
@@ -24,7 +24,7 @@
:class="{'active': selectedTab === 'ssh'}"
@click="selectTab('ssh')"
>
<a class="tab-link">{{ t('word.sshTunnel') }}</a>
<a class="tab-link">{{ t('connection.sshTunnel') }}</a>
</li>
</ul>
</div>
@@ -34,7 +34,7 @@
<fieldset class="m-0" :disabled="isBusy">
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.connectionName') }}</label>
<label class="form-label cut-text">{{ t('connection.connectionName') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -47,7 +47,7 @@
</div>
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.client') }}</label>
<label class="form-label cut-text">{{ t('connection.client') }}</label>
</div>
<div class="column col-8 col-sm-12">
<BaseSelect
@@ -63,7 +63,7 @@
</div>
<div v-if="localConnection.client === 'pg'" class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.connectionString') }}</label>
<label class="form-label cut-text">{{ t('connection.connectionString') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -76,7 +76,7 @@
</div>
<div v-if="!clientCustomizations.fileConnection" class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.hostName') }}/IP</label>
<label class="form-label cut-text">{{ t('connection.hostName') }}/IP</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -88,12 +88,12 @@
</div>
<div v-if="clientCustomizations.fileConnection" class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.database') }}</label>
<label class="form-label cut-text">{{ t('database.database') }}</label>
</div>
<div class="column col-8 col-sm-12">
<BaseUploadInput
:model-value="localConnection.databasePath"
:message="t('word.browse')"
:message="t('general.browse')"
@clear="pathClear('databasePath')"
@change="pathSelection($event, 'databasePath')"
/>
@@ -101,7 +101,7 @@
</div>
<div v-if="!clientCustomizations.fileConnection" class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.port') }}</label>
<label class="form-label cut-text">{{ t('connection.port') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -115,7 +115,7 @@
</div>
<div v-if="clientCustomizations.database" class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.database') }}</label>
<label class="form-label cut-text">{{ t('database.database') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -128,7 +128,7 @@
</div>
<div v-if="!clientCustomizations.fileConnection" class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.user') }}</label>
<label class="form-label cut-text">{{ t('connection.user') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -141,7 +141,7 @@
</div>
<div v-if="!clientCustomizations.fileConnection" class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.password') }}</label>
<label class="form-label cut-text">{{ t('connection.password') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -154,14 +154,14 @@
</div>
<div v-if="clientCustomizations.connectionSchema" class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.schema') }}</label>
<label class="form-label cut-text">{{ t('database.schema') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
v-model="localConnection.schema"
class="form-input"
type="text"
:placeholder="t('word.all')"
:placeholder="t('general.all')"
>
</div>
</div>
@@ -169,7 +169,7 @@
<div class="column col-4 col-sm-12" />
<div class="column col-8 col-sm-12">
<label class="form-checkbox form-inline">
<input v-model="localConnection.readonly" type="checkbox"><i class="form-icon" /> {{ t('message.readOnlyMode') }}
<input v-model="localConnection.readonly" type="checkbox"><i class="form-icon" /> {{ t('connection.readOnlyMode') }}
</label>
</div>
</div>
@@ -177,7 +177,7 @@
<div class="column col-4 col-sm-12" />
<div class="column col-8 col-sm-12">
<label class="form-checkbox form-inline">
<input v-model="localConnection.ask" type="checkbox"><i class="form-icon" /> {{ t('message.askCredentials') }}
<input v-model="localConnection.ask" type="checkbox"><i class="form-icon" /> {{ t('connection.askCredentials') }}
</label>
</div>
</div>
@@ -191,7 +191,7 @@
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">
{{ t('message.enableSsl') }}
{{ t('connection.enableSsl') }}
</label>
</div>
<div class="column col-8 col-sm-12">
@@ -204,12 +204,12 @@
<fieldset class="m-0" :disabled="isBusy || !localConnection.ssl">
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.privateKey') }}</label>
<label class="form-label cut-text">{{ t('connection.privateKey') }}</label>
</div>
<div class="column col-8 col-sm-12">
<BaseUploadInput
:model-value="localConnection.key"
:message="t('word.browse')"
:message="t('general.browse')"
@clear="pathClear('key')"
@change="pathSelection($event, 'key')"
/>
@@ -217,12 +217,12 @@
</div>
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.certificate') }}</label>
<label class="form-label cut-text">{{ t('connection.certificate') }}</label>
</div>
<div class="column col-8 col-sm-12">
<BaseUploadInput
:model-value="localConnection.cert"
:message="t('word.browse')"
:message="t('general.browse')"
@clear="pathClear('cert')"
@change="pathSelection($event, 'cert')"
/>
@@ -230,12 +230,12 @@
</div>
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.caCertificate') }}</label>
<label class="form-label cut-text">{{ t('connection.caCertificate') }}</label>
</div>
<div class="column col-8 col-sm-12">
<BaseUploadInput
:model-value="localConnection.ca"
:message="t('word.browse')"
:message="t('general.browse')"
@clear="pathClear('ca')"
@change="pathSelection($event, 'ca')"
/>
@@ -243,7 +243,7 @@
</div>
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.ciphers') }}</label>
<label class="form-label cut-text">{{ t('connection.ciphers') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -258,7 +258,7 @@
<div class="column col-4 col-sm-12" />
<div class="column col-8 col-sm-12">
<label class="form-checkbox form-inline">
<input v-model="localConnection.untrustedConnection" type="checkbox"><i class="form-icon" /> {{ t('message.untrustedConnection') }}
<input v-model="localConnection.untrustedConnection" type="checkbox"><i class="form-icon" /> {{ t('connection.untrustedConnection') }}
</label>
</div>
</div>
@@ -272,7 +272,7 @@
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">
{{ t('message.enableSsh') }}
{{ t('connection.enableSsh') }}
</label>
</div>
<div class="column col-8 col-sm-12">
@@ -285,7 +285,7 @@
<fieldset class="m-0" :disabled="isBusy || !localConnection.ssh">
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.hostName') }}/IP</label>
<label class="form-label cut-text">{{ t('connection.hostName') }}/IP</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -297,7 +297,7 @@
</div>
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.user') }}</label>
<label class="form-label cut-text">{{ t('connection.user') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -309,7 +309,7 @@
</div>
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.password') }}</label>
<label class="form-label cut-text">{{ t('connection.password') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -321,7 +321,7 @@
</div>
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.port') }}</label>
<label class="form-label cut-text">{{ t('connection.port') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -335,12 +335,12 @@
</div>
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.privateKey') }}</label>
<label class="form-label cut-text">{{ t('connection.privateKey') }}</label>
</div>
<div class="column col-8 col-sm-12">
<BaseUploadInput
:model-value="localConnection.sshKey"
:message="t('word.browse')"
:message="t('general.browse')"
@clear="pathClear('sshKey')"
@change="pathSelection($event, 'sshKey')"
/>
@@ -348,7 +348,7 @@
</div>
<div class="form-group columns">
<div class="column col-4 col-sm-12">
<label class="form-label cut-text">{{ t('word.passphrase') }}</label>
<label class="form-label cut-text">{{ t('connection.passphrase') }}</label>
</div>
<div class="column col-8 col-sm-12">
<input
@@ -371,7 +371,7 @@
@click="startTest"
>
<i class="mdi mdi-24px mdi-lightning-bolt mr-1" />
{{ t('message.testConnection') }}
{{ t('connection.testConnection') }}
</button>
<button
id="connection-save"
@@ -380,7 +380,7 @@
@click="saveConnection"
>
<i class="mdi mdi-24px mdi-content-save mr-1" />
{{ t('word.save') }}
{{ t('general.save') }}
</button>
<button
id="connection-connect"
@@ -390,7 +390,7 @@
@click="startConnection"
>
<i class="mdi mdi-24px mdi-connection mr-1" />
{{ t('word.connect') }}
{{ t('connection.connect') }}
</button>
</div>
</div>
@@ -479,7 +479,7 @@ const startTest = async () => {
if (res.status === 'error')
addNotification({ status: 'error', message: res.response.message || res.response.toString() });
else
addNotification({ status: 'success', message: t('message.connectionSuccessfullyMade') });
addNotification({ status: 'success', message: t('connection.connectionSuccessfullyMade') });
}
catch (err) {
addNotification({ status: 'error', message: err.stack });
@@ -503,7 +503,7 @@ const continueTest = async (credentials: {user: string; password: string }) => {
if (res.status === 'error')
addNotification({ status: 'error', message: res.response.message || res.response.toString() });
else
addNotification({ status: 'success', message: t('message.connectionSuccessfullyMade') });
addNotification({ status: 'success', message: t('connection.connectionSuccessfullyMade') });
}
}
catch (err) {

View File

@@ -4,12 +4,12 @@
<img :src="logos[applicationTheme]" width="200">
</div>
<p class="h6 empty-subtitle">
{{ t('message.noOpenTabs') }}
{{ t('application.noOpenTabs') }}
</p>
<div class="empty-action">
<button class="btn btn-primary d-flex" @click="emit('new-tab')">
<i class="mdi mdi-24px mdi-tab-plus mr-2" />
{{ t('message.openNewTab') }}
{{ t('application.openNewTab') }}
</button>
</div>
</div>

View File

@@ -13,7 +13,7 @@
<div
v-if="customizations.database"
class="workspace-explorebar-database-switch"
:title="t('message.switchDatabase')"
:title="t('database.switchDatabase')"
>
<BaseSelect
v-model="selectedDatabase"
@@ -26,18 +26,18 @@
<i
v-if="customizations.schemas"
class="mdi mdi-18px mdi-database-plus c-hand mr-2"
:title="t('message.createNewSchema')"
:title="t('database.createNewSchema')"
@click="showNewDBModal"
/>
<i
class="mdi mdi-18px mdi-refresh c-hand mr-2"
:class="{'rotate':isRefreshing}"
:title="t('word.refresh')"
:title="t('general.refresh')"
@click="refresh"
/>
<i
class="mdi mdi-18px mdi-power c-hand"
:title="t('word.disconnect')"
:title="t('connection.disconnect')"
@click="disconnectWorkspace(connection.uid)"
/>
</span>
@@ -46,7 +46,7 @@
<div v-if="workspace.connectionStatus === 'connected'" class="input-group has-icon-right">
<div
class="input-group-addon px-1 py-0 p-vcentered c-hand"
:title="t('message.switchSearchMethod')"
:title="t('application.switchSearchMethod')"
@click="toggleSearchMethod"
>
<i class="mdi mdi-18px" :class="[searchMethod === 'elements' ? 'mdi-shape' : 'mdi-database']" />
@@ -56,7 +56,7 @@
v-model="searchTerm"
class="form-input input-sm"
type="text"
:placeholder="searchMethod === 'elements' ? t('message.searchForElements') : t('message.searchForSchemas')"
:placeholder="searchMethod === 'elements' ? t('database.searchForElements') : t('database.searchForSchemas')"
>
<i v-if="!searchTerm" class="form-icon mdi mdi-magnify mdi-18px" />
<i

View File

@@ -8,7 +8,7 @@
class="context-element"
@click="runElementCheck"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-play text-light pr-1" /> {{ t('word.run') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-play text-light pr-1" /> {{ t('general.run') }}</span>
</div>
<div
v-if="selectedMisc.type === 'trigger' && customizations.triggerEnableDisable"
@@ -16,10 +16,10 @@
@click="toggleTrigger"
>
<span v-if="!selectedMisc.enabled" class="d-flex">
<i class="mdi mdi-18px mdi-play text-light pr-1" /> {{ t('word.enable') }}
<i class="mdi mdi-18px mdi-play text-light pr-1" /> {{ t('general.enable') }}
</span>
<span v-else class="d-flex">
<i class="mdi mdi-18px mdi-pause text-light pr-1" /> {{ t('word.disable') }}
<i class="mdi mdi-18px mdi-pause text-light pr-1" /> {{ t('general.disable') }}
</span>
</div>
<div
@@ -28,14 +28,14 @@
@click="toggleScheduler"
>
<span v-if="!selectedMisc.enabled" class="d-flex">
<i class="mdi mdi-18px mdi-play text-light pr-1" /> {{ t('word.enable') }}
<i class="mdi mdi-18px mdi-play text-light pr-1" /> {{ t('general.enable') }}
</span>
<span v-else class="d-flex">
<i class="mdi mdi-18px mdi-pause text-light pr-1" /> {{ t('word.disable') }}
<i class="mdi mdi-18px mdi-pause text-light pr-1" /> {{ t('general.disable') }}
</span>
</div>
<div class="context-element" @click="showDeleteModal">
<span class="d-flex"><i class="mdi mdi-18px mdi-table-remove text-light pr-1" /> {{ t('word.delete') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-table-remove text-light pr-1" /> {{ t('general.delete') }}</span>
</div>
<ConfirmModal
v-if="isDeleteModal"
@@ -50,7 +50,7 @@
</template>
<template #body>
<div class="mb-2">
{{ t('message.deleteConfirm') }} "<b>{{ selectedMisc.name }}</b>"?
{{ t('general.deleteConfirm') }} "<b>{{ selectedMisc.name }}</b>"?
</div>
</template>
</ConfirmModal>
@@ -117,14 +117,14 @@ const customizations = computed(() => {
const deleteMessage = computed(() => {
switch (props.selectedMisc.type) {
case 'trigger':
return t('message.deleteTrigger');
return t('database.deleteTrigger');
case 'procedure':
return t('message.deleteRoutine');
return t('database.deleteRoutine');
case 'function':
case 'triggerFunction':
return t('message.deleteFunction');
return t('database.deleteFunction');
case 'scheduler':
return t('message.deleteScheduler');
return t('database.deleteScheduler');
default:
return '';
}

View File

@@ -8,35 +8,35 @@
class="context-element"
@click="emit('open-create-trigger-tab')"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-table-cog text-light pr-1" /> {{ t('message.createNewTrigger') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-table-cog text-light pr-1" /> {{ t('database.createNewTrigger') }}</span>
</div>
<div
v-if="['procedure', 'routine'].includes(props.selectedMisc)"
class="context-element"
@click="emit('open-create-routine-tab')"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-sync-circle text-light pr-1" /> {{ t('message.createNewRoutine') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-sync-circle text-light pr-1" /> {{ t('database.createNewRoutine') }}</span>
</div>
<div
v-if="props.selectedMisc === 'function'"
class="context-element"
@click="emit('open-create-function-tab')"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-arrow-right-bold-box text-light pr-1" /> {{ t('message.createNewFunction') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-arrow-right-bold-box text-light pr-1" /> {{ t('database.createNewFunction') }}</span>
</div>
<div
v-if="props.selectedMisc === 'triggerFunction'"
class="context-element"
@click="emit('open-create-trigger-function-tab')"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-cog-clockwise text-light pr-1" /> {{ t('message.createNewFunction') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-cog-clockwise text-light pr-1" /> {{ t('database.createNewFunction') }}</span>
</div>
<div
v-if="props.selectedMisc === 'scheduler'"
class="context-element"
@click="emit('open-create-scheduler-tab')"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-calendar-clock text-light pr-1" /> {{ t('message.createNewScheduler') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-calendar-clock text-light pr-1" /> {{ t('database.createNewScheduler') }}</span>
</div>
</BaseContextMenu>
</template>

View File

@@ -60,7 +60,7 @@
@contextmenu.prevent="showMiscFolderContext($event, 'trigger')"
>
<i class="misc-icon mdi mdi-18px mdi-folder-cog mr-1" />
{{ t('word.trigger', 2) }}
{{ t('database.trigger', 2) }}
</summary>
<div class="accordion-body">
<div>
@@ -82,7 +82,7 @@
<div
v-if="trigger.enabled === false"
class="tooltip tooltip-left disabled-indicator"
:data-tooltip="t('word.disabled')"
:data-tooltip="t('general.disabled')"
>
<i class="table-icon mdi mdi-pause mdi-18px mr-1" />
</div>
@@ -101,7 +101,7 @@
@contextmenu.prevent="showMiscFolderContext($event, 'routine')"
>
<i class="misc-icon mdi mdi-18px mdi-folder-sync mr-1" />
{{ t('word.storedRoutine', 2) }}
{{ t('database.storedRoutine', 2) }}
</summary>
<div class="accordion-body">
<div>
@@ -134,7 +134,7 @@
@contextmenu.prevent="showMiscFolderContext($event, 'triggerFunction')"
>
<i class="misc-icon mdi mdi-18px mdi-folder-refresh mr-1" />
{{ t('word.triggerFunction', 2) }}
{{ t('database.triggerFunction', 2) }}
</summary>
<div class="accordion-body">
<div>
@@ -167,7 +167,7 @@
@contextmenu.prevent="showMiscFolderContext($event, 'function')"
>
<i class="misc-icon mdi mdi-18px mdi-folder-move mr-1" />
{{ t('word.function', 2) }}
{{ t('database.function', 2) }}
</summary>
<div class="accordion-body">
<div>
@@ -200,7 +200,7 @@
@contextmenu.prevent="showMiscFolderContext($event, 'scheduler')"
>
<i class="misc-icon mdi mdi-18px mdi-folder-clock mr-1" />
{{ t('word.scheduler', 2) }}
{{ t('database.scheduler', 2) }}
</summary>
<div class="accordion-body">
<div>
@@ -222,7 +222,7 @@
<div
v-if="scheduler.enabled === false"
class="tooltip tooltip-left disabled-indicator"
:data-tooltip="t('word.disabled')"
:data-tooltip="t('general.disabled')"
>
<i class="table-icon mdi mdi-pause mdi-18px mr-1" />
</div>

View File

@@ -4,7 +4,7 @@
@close-context="closeContext"
>
<div class="context-element">
<span class="d-flex"><i class="mdi mdi-18px mdi-plus text-light pr-1" /> {{ t('word.add') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-plus text-light pr-1" /> {{ t('general.add') }}</span>
<i class="mdi mdi-18px mdi-chevron-right text-light pl-1" />
<div class="context-submenu">
<div
@@ -12,49 +12,49 @@
class="context-element"
@click="openCreateTableTab"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-table text-light pr-1" /> {{ t('word.table') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-table text-light pr-1" /> {{ t('database.table') }}</span>
</div>
<div
v-if="workspace.customizations.viewAdd"
class="context-element"
@click="openCreateViewTab"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-table-eye text-light pr-1" /> {{ t('word.view') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-table-eye text-light pr-1" /> {{ t('database.view') }}</span>
</div>
<div
v-if="workspace.customizations.triggerAdd"
class="context-element"
@click="openCreateTriggerTab"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-table-cog text-light pr-1" /> {{ t('word.trigger', 1) }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-table-cog text-light pr-1" /> {{ t('database.trigger', 1) }}</span>
</div>
<div
v-if="workspace.customizations.routineAdd"
class="context-element"
@click="openCreateRoutineTab"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-sync-circle pr-1" /> {{ t('word.storedRoutine', 1) }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-sync-circle pr-1" /> {{ t('database.storedRoutine', 1) }}</span>
</div>
<div
v-if="workspace.customizations.functionAdd"
class="context-element"
@click="openCreateFunctionTab"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-arrow-right-bold-box pr-1" /> {{ t('word.function', 1) }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-arrow-right-bold-box pr-1" /> {{ t('database.function', 1) }}</span>
</div>
<div
v-if="workspace.customizations.triggerFunctionAdd"
class="context-element"
@click="openCreateTriggerFunctionTab"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-cog-clockwise pr-1" /> {{ t('word.triggerFunction', 1) }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-cog-clockwise pr-1" /> {{ t('database.triggerFunction', 1) }}</span>
</div>
<div
v-if="workspace.customizations.schedulerAdd"
class="context-element"
@click="openCreateSchedulerTab"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-calendar-clock text-light pr-1" /> {{ t('word.scheduler', 1) }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-calendar-clock text-light pr-1" /> {{ t('database.scheduler', 1) }}</span>
</div>
</div>
</div>
@@ -63,28 +63,28 @@
class="context-element"
@click="showExportSchemaModal"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-database-export text-light pr-1" /> {{ t('word.export') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-database-export text-light pr-1" /> {{ t('database.export') }}</span>
</div>
<div
v-if="workspace.customizations.schemaImport"
class="context-element"
@click="initImport"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-database-import text-light pr-1" /> {{ t('word.import') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-database-import text-light pr-1" /> {{ t('database.import') }}</span>
</div>
<div
v-if="workspace.customizations.schemaEdit"
class="context-element"
@click="showEditModal"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-database-edit text-light pr-1" /> {{ t('word.edit') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-database-edit text-light pr-1" /> {{ t('database.editSchema') }}</span>
</div>
<div
v-if="workspace.customizations.schemaDrop"
class="context-element"
@click="showDeleteModal"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-database-remove text-light pr-1" /> {{ t('word.delete') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-database-remove text-light pr-1" /> {{ t('database.deleteSchema') }}</span>
</div>
<ConfirmModal
@@ -95,12 +95,12 @@
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-database-remove mr-1" />
<span class="cut-text">{{ t('message.deleteSchema') }}</span>
<span class="cut-text">{{ t('database.deleteSchema') }}</span>
</div>
</template>
<template #body>
<div class="mb-2">
{{ t('message.deleteConfirm') }} "<b>{{ selectedSchema }}</b>"?
{{ t('general.deleteConfirm') }} "<b>{{ selectedSchema }}</b>"?
</div>
</template>
</ConfirmModal>
@@ -109,11 +109,6 @@
:selected-schema="selectedSchema"
@close="hideEditModal"
/>
<ModalExportSchema
v-if="isExportSchemaModal"
:selected-schema="selectedSchema"
@close="hideExportSchemaModal"
/>
<ModalImportSchema
v-if="isImportSchemaModal"
ref="importModalRef"
@@ -128,10 +123,10 @@ import { Component, computed, nextTick, Ref, ref } from 'vue';
import { storeToRefs } from 'pinia';
import { useNotificationsStore } from '@/stores/notifications';
import { useWorkspacesStore } from '@/stores/workspaces';
import { useSchemaExportStore } from '@/stores/schemaExport';
import BaseContextMenu from '@/components/BaseContextMenu.vue';
import ConfirmModal from '@/components/BaseConfirmModal.vue';
import ModalEditSchema from '@/components/ModalEditSchema.vue';
import ModalExportSchema from '@/components/ModalExportSchema.vue';
import ModalImportSchema from '@/components/ModalImportSchema.vue';
import Schema from '@/ipc-api/Schema';
import Application from '@/ipc-api/Application';
@@ -158,6 +153,8 @@ const emit = defineEmits([
const { addNotification } = useNotificationsStore();
const workspacesStore = useWorkspacesStore();
const schemaExportStore = useSchemaExportStore();
const { showExportModal } = schemaExportStore;
const { getSelected: selectedWorkspace } = storeToRefs(workspacesStore);
@@ -169,7 +166,6 @@ const {
const importModalRef: Ref<Component & {startImport: (file: string) => void}> = ref(null);
const isDeleteModal = ref(false);
const isEditModal = ref(false);
const isExportSchemaModal = ref(false);
const isImportSchemaModal = ref(false);
const workspace = computed(() => getWorkspace(selectedWorkspace.value));
@@ -220,11 +216,7 @@ const hideEditModal = () => {
};
const showExportSchemaModal = () => {
isExportSchemaModal.value = true;
};
const hideExportSchemaModal = () => {
isExportSchemaModal.value = false;
showExportModal(props.selectedSchema);
closeContext();
};

View File

@@ -8,31 +8,38 @@
class="context-element"
@click="openTableSettingTab"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-wrench-cog text-light pr-1" /> {{ t('word.settings') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-wrench-cog text-light pr-1" /> {{ t('application.settings') }}</span>
</div>
<div
v-if="selectedTable && selectedTable.type === 'table' && customizations.schemaExport"
class="context-element"
@click="showTableExportModal"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-table-arrow-right text-light pr-1" /> {{ t('database.exportTable') }}</span>
</div>
<div
v-if="selectedTable && selectedTable.type === 'view' && customizations.viewSettings"
class="context-element"
@click="openViewSettingTab"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-wrench-cog text-light pr-1" /> {{ t('word.settings') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-wrench-cog text-light pr-1" /> {{ t('application.settings') }}</span>
</div>
<div
v-if="selectedTable && selectedTable.type === 'table' && customizations.tableDuplicate"
class="context-element"
@click="duplicateTable"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-table-multiple text-light pr-1" /> {{ t('message.duplicateTable') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-table-multiple text-light pr-1" /> {{ t('database.duplicateTable') }}</span>
</div>
<div
v-if="selectedTable && selectedTable.type === 'table'"
class="context-element"
@click="showEmptyModal"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-table-off text-light pr-1" /> {{ t('message.emptyTable') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-table-off text-light pr-1" /> {{ t('database.emptyTable') }}</span>
</div>
<div class="context-element" @click="showDeleteModal">
<span class="d-flex"><i class="mdi mdi-18px mdi-table-remove text-light pr-1" /> {{ t('word.delete') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-table-remove text-light pr-1" /> {{ t('database.deleteTable') }}</span>
</div>
<ConfirmModal
@@ -42,16 +49,16 @@
>
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-table-off mr-1" /> <span class="cut-text">{{ t('message.emptyTable') }}</span>
<i class="mdi mdi-24px mdi-table-off mr-1" /> <span class="cut-text">{{ t('database.emptyTable') }}</span>
</div>
</template>
<template #body>
<div class="mb-2">
{{ t('message.emptyConfirm') }} "<b>{{ selectedTable.name }}</b>"?
{{ t('database.emptyConfirm') }} "<b>{{ selectedTable.name }}</b>"?
</div>
<div v-if="customizations.tableTruncateDisableFKCheck">
<label class="form-checkbox form-inline">
<input v-model="forceTruncate" type="checkbox"><i class="form-icon" /> {{ t('message.disableFKChecks') }}
<input v-model="forceTruncate" type="checkbox"><i class="form-icon" /> {{ t('database.disableFKChecks') }}
</label>
</div>
</template>
@@ -64,12 +71,12 @@
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-table-remove mr-1" />
<span class="cut-text">{{ selectedTable.type === 'table' ? t('message.deleteTable') : t('message.deleteView') }}</span>
<span class="cut-text">{{ selectedTable.type === 'table' ? t('database.deleteTable') : t('database.deleteView') }}</span>
</div>
</template>
<template #body>
<div class="mb-2">
{{ t('message.deleteConfirm') }} "<b>{{ selectedTable.name }}</b>"?
{{ t('general.deleteConfirm') }} "<b>{{ selectedTable.name }}</b>"?
</div>
</template>
</ConfirmModal>
@@ -81,6 +88,7 @@ import { computed, ref } from 'vue';
import { storeToRefs } from 'pinia';
import { useNotificationsStore } from '@/stores/notifications';
import { useWorkspacesStore } from '@/stores/workspaces';
import { useSchemaExportStore } from '@/stores/schemaExport';
import BaseContextMenu from '@/components/BaseContextMenu.vue';
import ConfirmModal from '@/components/BaseConfirmModal.vue';
import Tables from '@/ipc-api/Tables';
@@ -98,6 +106,7 @@ const emit = defineEmits(['close-context', 'duplicate-table', 'reload', 'delete-
const { addNotification } = useNotificationsStore();
const workspacesStore = useWorkspacesStore();
const { showExportModal } = useSchemaExportStore();
const { getSelected: selectedWorkspace } = storeToRefs(workspacesStore);
@@ -116,6 +125,11 @@ const forceTruncate = ref(false);
const workspace = computed(() => getWorkspace(selectedWorkspace.value));
const customizations = computed(() => workspace.value && workspace.value.customizations ? workspace.value.customizations : null);
const showTableExportModal = () => {
showExportModal(props.selectedSchema, props.selectedTable.name);
closeContext();
};
const showDeleteModal = () => {
isDeleteModal.value = true;
};

View File

@@ -13,7 +13,7 @@
:style="{height: localHeight ? localHeight+'px' : ''}"
>
<div class="query-console-header">
<div>{{ t('word.console') }}</div>
<div>{{ t('application.console') }}</div>
<button class="btn btn-clear mr-1" @click="resizeConsole(0)" />
</div>
<div ref="queryConsoleBody" class="query-console-body">
@@ -35,7 +35,7 @@
@close-context="isContext = false"
>
<div class="context-element" @click="copyQuery">
<span class="d-flex"><i class="mdi mdi-18px mdi-content-copy text-light pr-1" /> {{ t('word.copy') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-content-copy text-light pr-1" /> {{ t('general.copy') }}</span>
</div>
</BaseContextMenu>
</template>

View File

@@ -10,27 +10,27 @@
@click="saveChanges"
>
<i class="mdi mdi-24px mdi-content-save mr-1" />
<span>{{ t('word.save') }}</span>
<span>{{ t('general.save') }}</span>
</button>
<button
:disabled="!isChanged"
class="btn btn-link btn-sm mr-0"
:title="t('message.clearChanges')"
:title="t('database.clearChanges')"
@click="clearChanges"
>
<i class="mdi mdi-24px mdi-delete-sweep mr-1" />
<span>{{ t('word.clear') }}</span>
<span>{{ t('general.clear') }}</span>
</button>
<div class="divider-vert py-3" />
<button class="btn btn-dark btn-sm" @click="showParamsModal">
<i class="mdi mdi-24px mdi-dots-horizontal mr-1" />
<span>{{ t('word.parameters') }}</span>
<span>{{ t('database.parameters') }}</span>
</button>
</div>
<div class="workspace-query-info">
<div class="d-flex" :title="t('word.schema')">
<div class="d-flex" :title="t('database.schema')">
<i class="mdi mdi-18px mdi-database mr-1" /><b>{{ schema }}</b>
</div>
</div>
@@ -41,7 +41,7 @@
<div class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.name') }}
{{ t('general.name') }}
</label>
<input
ref="firstInput"
@@ -54,7 +54,7 @@
<div v-if="customizations.languages" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.language') }}
{{ t('application.language') }}
</label>
<BaseSelect
v-model="localFunction.language"
@@ -66,11 +66,11 @@
<div v-if="customizations.definer" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.definer') }}
{{ t('database.definer') }}
</label>
<BaseSelect
v-model="localFunction.definer"
:options="[{value: '', name:t('message.currentUser')}, ...workspace.users]"
:options="[{value: '', name:t('database.currentUser')}, ...workspace.users]"
:option-label="(user: any) => user.value === '' ? user.name : `${user.name}@${user.host}`"
:option-track-by="(user: any) => user.value === '' ? '' : `\`${user.name}\`@\`${user.host}\``"
class="form-select"
@@ -80,7 +80,7 @@
<div class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.returns') }}
{{ t('database.returns') }}
</label>
<div class="input-group">
<BaseSelect
@@ -100,7 +100,7 @@
class="form-input"
type="number"
min="0"
:placeholder="t('word.length')"
:placeholder="t('database.length')"
>
</div>
</div>
@@ -108,7 +108,7 @@
<div v-if="customizations.comment" class="column">
<div class="form-group">
<label class="form-label">
{{ t('word.comment') }}
{{ t('database.comment') }}
</label>
<input
v-model="localFunction.comment"
@@ -120,7 +120,7 @@
<div class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('message.sqlSecurity') }}
{{ t('database.sqlSecurity') }}
</label>
<BaseSelect
v-model="localFunction.security"
@@ -132,7 +132,7 @@
<div v-if="customizations.functionDataAccess" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('message.dataAccess') }}
{{ t('database.dataAccess') }}
</label>
<BaseSelect
v-model="localFunction.dataAccess"
@@ -145,7 +145,7 @@
<div class="form-group">
<label class="form-label d-invisible">.</label>
<label class="form-checkbox form-inline">
<input v-model="localFunction.deterministic" type="checkbox"><i class="form-icon" /> {{ t('word.deterministic') }}
<input v-model="localFunction.deterministic" type="checkbox"><i class="form-icon" /> {{ t('database.deterministic') }}
</label>
</div>
</div>
@@ -153,7 +153,7 @@
</div>
<div class="workspace-query-results column col-12 mt-2 p-relative">
<BaseLoader v-if="isLoading" />
<label class="form-label ml-2">{{ t('message.functionBody') }}</label>
<label class="form-label ml-2">{{ t('database.functionBody') }}</label>
<QueryEditor
v-show="isSelected"
ref="queryEditor"

View File

@@ -10,27 +10,27 @@
@click="saveChanges"
>
<i class="mdi mdi-24px mdi-content-save mr-1" />
<span>{{ t('word.save') }}</span>
<span>{{ t('general.save') }}</span>
</button>
<button
:disabled="!isChanged"
class="btn btn-link btn-sm mr-0"
:title="t('message.clearChanges')"
:title="t('database.clearChanges')"
@click="clearChanges"
>
<i class="mdi mdi-24px mdi-delete-sweep mr-1" />
<span>{{ t('word.clear') }}</span>
<span>{{ t('general.clear') }}</span>
</button>
<div class="divider-vert py-3" />
<button class="btn btn-dark btn-sm" @click="showParamsModal">
<i class="mdi mdi-24px mdi-dots-horizontal mr-1" />
<span>{{ t('word.parameters') }}</span>
<span>{{ t('database.parameters') }}</span>
</button>
</div>
<div class="workspace-query-info">
<div class="d-flex" :title="t('word.schema')">
<div class="d-flex" :title="t('database.schema')">
<i class="mdi mdi-18px mdi-database mr-1" /><b>{{ schema }}</b>
</div>
</div>
@@ -41,7 +41,7 @@
<div class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.name') }}
{{ t('general.name') }}
</label>
<input
ref="firstInput"
@@ -54,7 +54,7 @@
<div v-if="customizations.languages" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.language') }}
{{ t('application.language') }}
</label>
<BaseSelect
v-model="localRoutine.language"
@@ -66,11 +66,11 @@
<div v-if="customizations.definer" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.definer') }}
{{ t('database.definer') }}
</label>
<BaseSelect
v-model="localRoutine.definer"
:options="[{value: '', name:t('message.currentUser')}, ...workspace.users]"
:options="[{value: '', name:t('database.currentUser')}, ...workspace.users]"
:option-label="(user: any) => user.value === '' ? user.name : `${user.name}@${user.host}`"
:option-track-by="(user: any) => user.value === '' ? '' : `\`${user.name}\`@\`${user.host}\``"
class="form-select"
@@ -80,7 +80,7 @@
<div v-if="customizations.comment" class="column">
<div class="form-group">
<label class="form-label">
{{ t('word.comment') }}
{{ t('database.comment') }}
</label>
<input
v-model="localRoutine.comment"
@@ -92,7 +92,7 @@
<div class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('message.sqlSecurity') }}
{{ t('database.sqlSecurity') }}
</label>
<BaseSelect
v-model="localRoutine.security"
@@ -104,7 +104,7 @@
<div v-if="customizations.procedureDataAccess" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('message.dataAccess') }}
{{ t('database.dataAccess') }}
</label>
<BaseSelect
v-model="localRoutine.dataAccess"
@@ -117,7 +117,7 @@
<div class="form-group">
<label class="form-label d-invisible">.</label>
<label class="form-checkbox form-inline">
<input v-model="localRoutine.deterministic" type="checkbox"><i class="form-icon" /> {{ t('word.deterministic') }}
<input v-model="localRoutine.deterministic" type="checkbox"><i class="form-icon" /> {{ t('database.deterministic') }}
</label>
</div>
</div>
@@ -125,7 +125,7 @@
</div>
<div class="workspace-query-results column col-12 mt-2 p-relative">
<BaseLoader v-if="isLoading" />
<label class="form-label ml-2">{{ t('message.routineBody') }}</label>
<label class="form-label ml-2">{{ t('database.routineBody') }}</label>
<QueryEditor
v-show="isSelected"
ref="queryEditor"

View File

@@ -10,26 +10,26 @@
@click="saveChanges"
>
<i class="mdi mdi-24px mdi-content-save mr-1" />
<span>{{ t('word.save') }}</span>
<span>{{ t('general.save') }}</span>
</button>
<button
:disabled="!isChanged"
class="btn btn-link btn-sm mr-0"
:title="t('message.clearChanges')"
:title="t('database.clearChanges')"
@click="clearChanges"
>
<i class="mdi mdi-24px mdi-delete-sweep mr-1" />
<span>{{ t('word.clear') }}</span>
<span>{{ t('general.clear') }}</span>
</button>
<div class="divider-vert py-3" />
<button class="btn btn-dark btn-sm" @click="showTimingModal">
<i class="mdi mdi-24px mdi-timer mr-1" />
<span>{{ t('word.timing') }}</span>
<span>{{ t('database.timing') }}</span>
</button>
</div>
<div class="workspace-query-info">
<div class="d-flex" :title="t('word.schema')">
<div class="d-flex" :title="t('database.schema')">
<i class="mdi mdi-18px mdi-database mr-1" /><b>{{ schema }}</b>
</div>
</div>
@@ -39,7 +39,7 @@
<div class="columns">
<div class="column col-auto">
<div class="form-group">
<label class="form-label">{{ t('word.name') }}</label>
<label class="form-label">{{ t('general.name') }}</label>
<input
ref="firstInput"
v-model="localScheduler.name"
@@ -50,11 +50,11 @@
</div>
<div class="column col-auto">
<div class="form-group">
<label class="form-label">{{ t('word.definer') }}</label>
<label class="form-label">{{ t('database.definer') }}</label>
<BaseSelect
v-model="localScheduler.definer"
:options="users"
:option-label="(user: any) => user.value === '' ? t('message.currentUser') : `${user.name}@${user.host}`"
:option-label="(user: any) => user.value === '' ? t('database.currentUser') : `${user.name}@${user.host}`"
:option-track-by="(user: any) => user.value === '' ? '' : `\`${user.name}\`@\`${user.host}\``"
class="form-select"
/>
@@ -62,7 +62,7 @@
</div>
<div class="column">
<div class="form-group">
<label class="form-label">{{ t('word.comment') }}</label>
<label class="form-label">{{ t('database.comment') }}</label>
<input
v-model="localScheduler.comment"
class="form-input"
@@ -72,7 +72,7 @@
</div>
<div class="column">
<div class="form-group">
<label class="form-label mr-2">{{ t('word.state') }}</label>
<label class="form-label mr-2">{{ t('database.state') }}</label>
<label class="form-radio form-inline">
<input
v-model="localScheduler.state"
@@ -103,7 +103,7 @@
</div>
<div class="workspace-query-results column col-12 mt-2 p-relative">
<BaseLoader v-if="isLoading" />
<label class="form-label ml-2">{{ t('message.schedulerBody') }}</label>
<label class="form-label ml-2">{{ t('database.schedulerBody') }}</label>
<QueryEditor
v-show="isSelected"
ref="queryEditor"

View File

@@ -10,16 +10,16 @@
@click="saveChanges"
>
<i class="mdi mdi-24px mdi-content-save mr-1" />
<span>{{ t('word.save') }}</span>
<span>{{ t('general.save') }}</span>
</button>
<button
:disabled="!isChanged || isSaving"
class="btn btn-link btn-sm mr-0"
:title="t('message.clearChanges')"
:title="t('database.clearChanges')"
@click="clearChanges"
>
<i class="mdi mdi-24px mdi-delete-sweep mr-1" />
<span>{{ t('word.clear') }}</span>
<span>{{ t('general.clear') }}</span>
</button>
<div class="divider-vert py-3" />
@@ -27,32 +27,33 @@
<button
:disabled="isSaving"
class="btn btn-dark btn-sm"
:title="t('message.addNewField')"
:title="t('database.addNewField')"
@click="addField"
>
<i class="mdi mdi-24px mdi-playlist-plus mr-1" />
<span>{{ t('word.add') }}</span>
<span>{{ t('general.add') }}</span>
</button>
<button
:disabled="isSaving || !localFields.length"
class="btn btn-dark btn-sm"
:title="t('message.manageIndexes')"
:title="t('database.manageIndexes')"
@click="showIntdexesModal"
>
<i class="mdi mdi-24px mdi-key mdi-rotate-45 mr-1" />
<span>{{ t('word.indexes') }}</span>
<span>{{ t('database.indexes') }}</span>
</button>
<button
class="btn btn-dark btn-sm"
:disabled="isSaving || !localFields.length"
:title="t('database.manageForeignKeys')"
@click="showForeignModal"
>
<i class="mdi mdi-24px mdi-key-link mr-1" />
<span>{{ t('word.foreignKeys') }}</span>
<span>{{ t('database.foreignKeys') }}</span>
</button>
</div>
<div class="workspace-query-info">
<div class="d-flex" :title="t('word.schema')">
<div class="d-flex" :title="t('database.schema')">
<i class="mdi mdi-18px mdi-database mr-1" /><b>{{ schema }}</b>
</div>
</div>
@@ -62,7 +63,7 @@
<div class="columns mb-4">
<div class="column col-auto">
<div class="form-group">
<label class="form-label">{{ t('word.name') }}</label>
<label class="form-label">{{ t('general.name') }}</label>
<input
ref="firstInput"
v-model="localOptions.name"
@@ -73,7 +74,7 @@
</div>
<div v-if="workspace.customizations.comment" class="column">
<div class="form-group">
<label class="form-label">{{ t('word.comment') }}</label>
<label class="form-label">{{ t('database.comment') }}</label>
<input
v-model="localOptions.comment"
class="form-input"
@@ -85,7 +86,7 @@
<div v-if="workspace.customizations.collations" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.collation') }}
{{ t('database.collation') }}
</label>
<BaseSelect
v-model="localOptions.collation"
@@ -100,7 +101,7 @@
<div v-if="workspace.customizations.engines" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.engine') }}
{{ t('database.engine') }}
</label>
<BaseSelect
v-model="localOptions.engine"
@@ -315,7 +316,7 @@ const addField = () => {
const uid = uidGen();
localFields.value.push({
_antares_id: uid,
name: `${t('word.field', 1)}_${uid.substring(0, 4)}`,
name: `${t('database.field', 1)}_${uid.substring(0, 4)}`,
key: '',
// eslint-disable-next-line @typescript-eslint/no-explicit-any
type: (workspace.value.dataTypes[0] as any).types[0].name,

View File

@@ -1,12 +1,12 @@
<template>
<div class="column col-12 empty">
<p class="h6 empty-subtitle">
{{ t('message.thereAreNoTableFields') }}
{{ t('database.thereAreNoTableFields') }}
</p>
<div class="empty-action">
<button class="btn btn-gray d-flex" @click="emit('new-field')">
<i class="mdi mdi-24px mdi-playlist-plus mr-2" />
{{ t('message.addNewField') }}
{{ t('database.addNewField') }}
</button>
</div>
</div>

View File

@@ -10,20 +10,20 @@
@click="saveChanges"
>
<i class="mdi mdi-24px mdi-content-save mr-1" />
<span>{{ t('word.save') }}</span>
<span>{{ t('general.save') }}</span>
</button>
<button
:disabled="!isChanged"
class="btn btn-link btn-sm mr-0"
:title="t('message.clearChanges')"
:title="t('database.clearChanges')"
@click="clearChanges"
>
<i class="mdi mdi-24px mdi-delete-sweep mr-1" />
<span>{{ t('word.clear') }}</span>
<span>{{ t('general.clear') }}</span>
</button>
</div>
<div class="workspace-query-info">
<div class="d-flex" :title="t('word.schema')">
<div class="d-flex" :title="t('database.schema')">
<i class="mdi mdi-18px mdi-database mr-1" /><b>{{ schema }}</b>
</div>
</div>
@@ -33,7 +33,7 @@
<div class="columns">
<div class="column col-auto">
<div class="form-group">
<label class="form-label">{{ t('word.name') }}</label>
<label class="form-label">{{ t('general.name') }}</label>
<input
ref="firstInput"
v-model="localTrigger.name"
@@ -44,11 +44,11 @@
</div>
<div v-if="customizations.definer" class="column col-auto">
<div class="form-group">
<label class="form-label">{{ t('word.definer') }}</label>
<label class="form-label">{{ t('database.definer') }}</label>
<BaseSelect
v-model="localTrigger.definer"
:options="users"
:option-label="(user: any) => user.value === '' ? t('message.currentUser') : `${user.name}@${user.host}`"
:option-label="(user: any) => user.value === '' ? t('database.currentUser') : `${user.name}@${user.host}`"
:option-track-by="(user: any) => user.value === '' ? '' : `\`${user.name}\`@\`${user.host}\``"
class="form-select"
/>
@@ -57,7 +57,7 @@
<fieldset class="column columns mb-0" :disabled="customizations.triggerOnlyRename">
<div class="column col-auto">
<div class="form-group">
<label class="form-label">{{ t('word.table') }}</label>
<label class="form-label">{{ t('database.table') }}</label>
<BaseSelect
v-model="localTrigger.table"
:options="schemaTables"
@@ -69,7 +69,7 @@
</div>
<div class="column col-auto">
<div class="form-group">
<label class="form-label">{{ t('word.event') }}</label>
<label class="form-label">{{ t('database.event') }}</label>
<div class="input-group">
<BaseSelect
v-model="localTrigger.activation"
@@ -100,7 +100,7 @@
</div>
<div class="workspace-query-results column col-12 mt-2 p-relative">
<BaseLoader v-if="isLoading" />
<label class="form-label ml-2">{{ t('message.triggerStatement') }}</label>
<label class="form-label ml-2">{{ t('database.triggerStatement') }}</label>
<QueryEditor
v-show="isSelected"
ref="queryEditor"

View File

@@ -10,16 +10,16 @@
@click="saveChanges"
>
<i class="mdi mdi-24px mdi-content-save mr-1" />
<span>{{ t('word.save') }}</span>
<span>{{ t('general.save') }}</span>
</button>
<button
:disabled="!isChanged"
class="btn btn-link btn-sm mr-0"
:title="t('message.clearChanges')"
:title="t('database.clearChanges')"
@click="clearChanges"
>
<i class="mdi mdi-24px mdi-delete-sweep mr-1" />
<span>{{ t('word.clear') }}</span>
<span>{{ t('general.clear') }}</span>
</button>
</div>
</div>
@@ -29,7 +29,7 @@
<div class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.name') }}
{{ t('general.name') }}
</label>
<input
ref="firstInput"
@@ -42,7 +42,7 @@
<div v-if="customizations.triggerFunctionlanguages" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.language') }}
{{ t('application.language') }}
</label>
<BaseSelect
v-model="localFunction.language"
@@ -54,12 +54,12 @@
<div v-if="customizations.definer" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.definer') }}
{{ t('database.definer') }}
</label>
<BaseSelect
v-model="localFunction.definer"
:options="workspace.users"
:option-label="(user: any) => user.value === '' ? t('message.currentUser') : `${user.name}@${user.host}`"
:option-label="(user: any) => user.value === '' ? t('database.currentUser') : `${user.name}@${user.host}`"
:option-track-by="(user: any) => user.value === '' ? '' : `\`${user.name}\`@\`${user.host}\``"
class="form-select"
/>
@@ -67,7 +67,7 @@
</div>
<div v-if="customizations.comment" class="form-group">
<label class="form-label">
{{ t('word.comment') }}
{{ t('database.comment') }}
</label>
<input
v-model="localFunction.comment"
@@ -79,7 +79,7 @@
</div>
<div class="workspace-query-results column col-12 mt-2 p-relative">
<BaseLoader v-if="isLoading" />
<label class="form-label ml-2">{{ t('message.functionBody') }}</label>
<label class="form-label ml-2">{{ t('database.functionBody') }}</label>
<QueryEditor
v-show="isSelected"
ref="queryEditor"

View File

@@ -10,20 +10,20 @@
@click="saveChanges"
>
<i class="mdi mdi-24px mdi-content-save mr-1" />
<span>{{ t('word.save') }}</span>
<span>{{ t('general.save') }}</span>
</button>
<button
:disabled="!isChanged"
class="btn btn-link btn-sm mr-0"
:title="t('message.clearChanges')"
:title="t('database.clearChanges')"
@click="clearChanges"
>
<i class="mdi mdi-24px mdi-delete-sweep mr-1" />
<span>{{ t('word.clear') }}</span>
<span>{{ t('general.clear') }}</span>
</button>
</div>
<div class="workspace-query-info">
<div class="d-flex" :title="t('word.schema')">
<div class="d-flex" :title="t('database.schema')">
<i class="mdi mdi-18px mdi-database mr-1" /><b>{{ schema }}</b>
</div>
</div>
@@ -33,7 +33,7 @@
<div class="columns">
<div class="column col-auto">
<div class="form-group">
<label class="form-label">{{ t('word.name') }}</label>
<label class="form-label">{{ t('general.name') }}</label>
<input
ref="firstInput"
v-model="localView.name"
@@ -44,11 +44,11 @@
</div>
<div class="column col-auto">
<div v-if="workspace.customizations.definer" class="form-group">
<label class="form-label">{{ t('word.definer') }}</label>
<label class="form-label">{{ t('database.definer') }}</label>
<BaseSelect
v-model="localView.definer"
:options="users"
:option-label="(user: any) => user.value === '' ? t('message.currentUser') : `${user.name}@${user.host}`"
:option-label="(user: any) => user.value === '' ? t('database.currentUser') : `${user.name}@${user.host}`"
:option-track-by="(user: any) => user.value === '' ? '' : `\`${user.name}\`@\`${user.host}\``"
class="form-select"
/>
@@ -56,7 +56,7 @@
</div>
<div class="column col-auto mr-2">
<div v-if="workspace.customizations.viewSqlSecurity" class="form-group">
<label class="form-label">{{ t('message.sqlSecurity') }}</label>
<label class="form-label">{{ t('database.sqlSecurity') }}</label>
<BaseSelect
v-model="localView.security"
:options="['DEFINER', 'INVOKER']"
@@ -66,7 +66,7 @@
</div>
<div class="column col-auto mr-2">
<div v-if="workspace.customizations.viewAlgorithm" class="form-group">
<label class="form-label">{{ t('word.algorithm') }}</label>
<label class="form-label">{{ t('database.algorithm') }}</label>
<BaseSelect
v-model="localView.algorithm"
:options="['UNDEFINED', 'MERGE', 'TEMPTABLE']"
@@ -76,7 +76,7 @@
</div>
<div v-if="workspace.customizations.viewUpdateOption" class="column col-auto mr-2">
<div class="form-group">
<label class="form-label">{{ t('message.updateOption') }}</label>
<label class="form-label">{{ t('database.updateOption') }}</label>
<BaseSelect
v-model="localView.updateOption"
:option-track-by="(user: any) => user.value"
@@ -89,7 +89,7 @@
</div>
<div class="workspace-query-results column col-12 mt-2 p-relative">
<BaseLoader v-if="isLoading" />
<label class="form-label ml-2">{{ t('message.selectStatement') }}</label>
<label class="form-label ml-2">{{ t('database.selectStatement') }}</label>
<QueryEditor
v-show="isSelected"
ref="queryEditor"

View File

@@ -10,16 +10,16 @@
@click="saveChanges"
>
<i class="mdi mdi-24px mdi-content-save mr-1" />
<span>{{ t('word.save') }}</span>
<span>{{ t('general.save') }}</span>
</button>
<button
:disabled="!isChanged"
class="btn btn-link btn-sm mr-0"
:title="t('message.clearChanges')"
:title="t('database.clearChanges')"
@click="clearChanges"
>
<i class="mdi mdi-24px mdi-delete-sweep mr-1" />
<span>{{ t('word.clear') }}</span>
<span>{{ t('general.clear') }}</span>
</button>
<div class="divider-vert py-3" />
@@ -30,15 +30,15 @@
@click="runFunctionCheck"
>
<i class="mdi mdi-24px mdi-play mr-1" />
<span>{{ t('word.run') }}</span>
<span>{{ t('general.run') }}</span>
</button>
<button class="btn btn-dark btn-sm" @click="showParamsModal">
<i class="mdi mdi-24px mdi-dots-horizontal mr-1" />
<span>{{ t('word.parameters') }}</span>
<span>{{ t('database.parameters') }}</span>
</button>
</div>
<div class="workspace-query-info">
<div class="d-flex" :title="t('word.schema')">
<div class="d-flex" :title="t('database.schema')">
<i class="mdi mdi-18px mdi-database mr-1" /><b>{{ schema }}</b>
</div>
</div>
@@ -49,7 +49,7 @@
<div class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.name') }}
{{ t('general.name') }}
</label>
<input
ref="firstInput"
@@ -63,7 +63,7 @@
<div v-if="customizations.languages" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.language') }}
{{ t('application.language') }}
</label>
<BaseSelect
v-model="localFunction.language"
@@ -75,11 +75,11 @@
<div v-if="customizations.definer" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.definer') }}
{{ t('database.definer') }}
</label>
<BaseSelect
v-model="localFunction.definer"
:options="[{value: '', name:t('message.currentUser')}, ...workspace.users]"
:options="[{value: '', name:t('database.currentUser')}, ...workspace.users]"
:option-label="(user: any) => user.value === '' ? user.name : `${user.name}@${user.host}`"
:option-track-by="(user: any) => user.value === '' ? '' : `\`${user.name}\`@\`${user.host}\``"
class="form-select"
@@ -89,7 +89,7 @@
<div class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.returns') }}
{{ t('database.returns') }}
</label>
<div class="input-group">
<BaseSelect
@@ -109,7 +109,7 @@
class="form-input"
type="number"
min="0"
:placeholder="t('word.length')"
:placeholder="t('database.length')"
>
</div>
</div>
@@ -117,7 +117,7 @@
<div v-if="customizations.comment" class="column">
<div class="form-group">
<label class="form-label">
{{ t('word.comment') }}
{{ t('database.comment') }}
</label>
<input
v-model="localFunction.comment"
@@ -129,7 +129,7 @@
<div class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('message.sqlSecurity') }}
{{ t('database.sqlSecurity') }}
</label>
<BaseSelect
v-model="localFunction.security"
@@ -141,7 +141,7 @@
<div v-if="customizations.functionDataAccess" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('message.dataAccess') }}
{{ t('database.dataAccess') }}
</label>
<BaseSelect
v-model="localFunction.dataAccess"
@@ -154,7 +154,7 @@
<div class="form-group">
<label class="form-label d-invisible">.</label>
<label class="form-checkbox form-inline">
<input v-model="localFunction.deterministic" type="checkbox"><i class="form-icon" /> {{ t('word.deterministic') }}
<input v-model="localFunction.deterministic" type="checkbox"><i class="form-icon" /> {{ t('database.deterministic') }}
</label>
</div>
</div>
@@ -162,7 +162,7 @@
</div>
<div class="workspace-query-results column col-12 mt-2 p-relative">
<BaseLoader v-if="isLoading" />
<label class="form-label ml-2">{{ t('message.functionBody') }}</label>
<label class="form-label ml-2">{{ t('database.functionBody') }}</label>
<QueryEditor
v-show="isSelected"
ref="queryEditor"

View File

@@ -1,6 +1,6 @@
<template>
<ConfirmModal
:confirm-text="t('word.confirm')"
:confirm-text="t('general.confirm')"
size="medium"
class="options-modal"
@confirm="confirmParametersChange"
@@ -9,7 +9,7 @@
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-dots-horizontal mr-1" />
<span class="cut-text">{{ t('word.parameters') }} "{{ func }}"</span>
<span class="cut-text">{{ t('database.parameters') }} "{{ func }}"</span>
</div>
</template>
<template #body>
@@ -20,16 +20,16 @@
<div class="d-flex">
<button class="btn btn-dark btn-sm d-flex" @click="addParameter">
<i class="mdi mdi-24px mdi-plus mr-1" />
<span>{{ t('word.add') }}</span>
<span>{{ t('general.add') }}</span>
</button>
<button
class="btn btn-dark btn-sm d-flex ml-2 mr-0"
:title="t('message.clearChanges')"
:title="t('database.clearChanges')"
:disabled="!isChanged"
@click.prevent="clearChanges"
>
<i class="mdi mdi-24px mdi-delete-sweep mr-1" />
<span>{{ t('word.clear') }}</span>
<span>{{ t('general.clear') }}</span>
</button>
</div>
</div>
@@ -55,7 +55,7 @@
<div class="tile-action">
<button
class="btn btn-link remove-field p-0 mr-2"
:title="t('word.delete')"
:title="t('general.delete')"
@click.prevent="removeParameter(param._antares_id)"
>
<i class="mdi mdi-close" />
@@ -74,7 +74,7 @@
>
<div class="form-group">
<label class="form-label col-3">
{{ t('word.name') }}
{{ t('general.name') }}
</label>
<div class="column">
<input
@@ -86,7 +86,7 @@
</div>
<div class="form-group">
<label class="form-label col-3">
{{ t('word.type') }}
{{ t('database.type') }}
</label>
<div class="column">
<BaseSelect
@@ -102,7 +102,7 @@
</div>
<div v-if="customizations.parametersLength" class="form-group">
<label class="form-label col-3">
{{ t('word.length') }}
{{ t('database.length') }}
</label>
<div class="column">
<input
@@ -115,7 +115,7 @@
</div>
<div v-if="customizations.functionContext" class="form-group">
<label class="form-label col-3">
{{ t('word.context') }}
{{ t('database.context') }}
</label>
<div class="column">
<label class="form-radio">
@@ -150,11 +150,11 @@
<i class="mdi mdi-dots-horizontal mdi-48px" />
</div>
<p class="empty-title h5">
{{ t('message.thereAreNoParameters') }}
{{ t('database.thereAreNoParameters') }}
</p>
<div class="empty-action">
<button class="btn btn-primary" @click="addParameter">
{{ t('message.createNewParameter') }}
{{ t('database.createNewParameter') }}
</button>
</div>
</div>

View File

@@ -10,16 +10,16 @@
@click="saveChanges"
>
<i class="mdi mdi-24px mdi-content-save mr-1" />
<span>{{ t('word.save') }}</span>
<span>{{ t('general.save') }}</span>
</button>
<button
:disabled="!isChanged"
class="btn btn-link btn-sm mr-0"
:title="t('message.clearChanges')"
:title="t('database.clearChanges')"
@click="clearChanges"
>
<i class="mdi mdi-24px mdi-delete-sweep mr-1" />
<span>{{ t('word.clear') }}</span>
<span>{{ t('general.clear') }}</span>
</button>
<div class="divider-vert py-3" />
@@ -30,15 +30,15 @@
@click="runRoutineCheck"
>
<i class="mdi mdi-24px mdi-play mr-1" />
<span>{{ t('word.run') }}</span>
<span>{{ t('general.run') }}</span>
</button>
<button class="btn btn-dark btn-sm" @click="showParamsModal">
<i class="mdi mdi-24px mdi-dots-horizontal mr-1" />
<span>{{ t('word.parameters') }}</span>
<span>{{ t('database.parameters') }}</span>
</button>
</div>
<div class="workspace-query-info">
<div class="d-flex" :title="t('word.schema')">
<div class="d-flex" :title="t('database.schema')">
<i class="mdi mdi-18px mdi-database mr-1" /><b>{{ schema }}</b>
</div>
</div>
@@ -49,7 +49,7 @@
<div class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.name') }}
{{ t('general.name') }}
</label>
<input
ref="firstInput"
@@ -63,7 +63,7 @@
<div v-if="customizations.languages" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.language') }}
{{ t('application.language') }}
</label>
<BaseSelect
v-model="localRoutine.language"
@@ -75,11 +75,11 @@
<div v-if="customizations.definer" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.definer') }}
{{ t('database.definer') }}
</label>
<BaseSelect
v-model="localRoutine.definer"
:options="[{value: '', name: t('message.currentUser')}, ...workspace.users]"
:options="[{value: '', name: t('database.currentUser')}, ...workspace.users]"
:option-label="(user: any) => user.value === '' ? user.name : `${user.name}@${user.host}`"
:option-track-by="(user: any) => user.value === '' ? '' : `\`${user.name}\`@\`${user.host}\``"
class="form-select"
@@ -89,7 +89,7 @@
<div v-if="customizations.comment" class="column">
<div class="form-group">
<label class="form-label">
{{ t('word.comment') }}
{{ t('database.comment') }}
</label>
<input
v-model="localRoutine.comment"
@@ -101,7 +101,7 @@
<div class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('message.sqlSecurity') }}
{{ t('database.sqlSecurity') }}
</label>
<BaseSelect
v-model="localRoutine.security"
@@ -113,7 +113,7 @@
<div v-if="customizations.procedureDataAccess" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('message.dataAccess') }}
{{ t('database.dataAccess') }}
</label>
<BaseSelect
v-model="localRoutine.dataAccess"
@@ -126,7 +126,7 @@
<div class="form-group">
<label class="form-label d-invisible">.</label>
<label class="form-checkbox form-inline">
<input v-model="localRoutine.deterministic" type="checkbox"><i class="form-icon" /> {{ t('word.deterministic') }}
<input v-model="localRoutine.deterministic" type="checkbox"><i class="form-icon" /> {{ t('database.deterministic') }}
</label>
</div>
</div>
@@ -134,7 +134,7 @@
</div>
<div class="workspace-query-results column col-12 mt-2 p-relative">
<BaseLoader v-if="isLoading" />
<label class="form-label ml-2">{{ t('message.routineBody') }}</label>
<label class="form-label ml-2">{{ t('database.routineBody') }}</label>
<QueryEditor
v-show="isSelected"
ref="queryEditor"

View File

@@ -1,6 +1,6 @@
<template>
<ConfirmModal
:confirm-text="t('word.confirm')"
:confirm-text="t('general.confirm')"
size="medium"
class="options-modal"
@confirm="confirmParametersChange"
@@ -9,7 +9,7 @@
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-dots-horizontal mr-1" />
<span class="cut-text">{{ t('word.parameters') }} "{{ routine }}"</span>
<span class="cut-text">{{ t('database.parameters') }} "{{ routine }}"</span>
</div>
</template>
<template #body>
@@ -20,16 +20,16 @@
<div class="d-flex">
<button class="btn btn-dark btn-sm d-flex" @click="addParameter">
<i class="mdi mdi-24px mdi-plus mr-1" />
<span>{{ t('word.add') }}</span>
<span>{{ t('general.add') }}</span>
</button>
<button
class="btn btn-dark btn-sm d-flex ml-2 mr-0"
:title="t('message.clearChanges')"
:title="t('database.clearChanges')"
:disabled="!isChanged"
@click.prevent="clearChanges"
>
<i class="mdi mdi-24px mdi-delete-sweep mr-1" />
<span>{{ t('word.clear') }}</span>
<span>{{ t('general.clear') }}</span>
</button>
</div>
</div>
@@ -55,7 +55,7 @@
<div class="tile-action">
<button
class="btn btn-link remove-field p-0 mr-2"
:title="t('word.delete')"
:title="t('general.delete')"
@click.prevent="removeParameter(param._antares_id)"
>
<i class="mdi mdi-close" />
@@ -74,7 +74,7 @@
>
<div class="form-group">
<label class="form-label col-3">
{{ t('word.name') }}
{{ t('general.name') }}
</label>
<div class="column">
<input
@@ -86,7 +86,7 @@
</div>
<div class="form-group">
<label class="form-label col-3">
{{ t('word.type') }}
{{ t('database.type') }}
</label>
<div class="column">
<BaseSelect
@@ -102,7 +102,7 @@
</div>
<div v-if="customizations.parametersLength" class="form-group">
<label class="form-label col-3">
{{ t('word.length') }}
{{ t('database.length') }}
</label>
<div class="column">
<input
@@ -115,7 +115,7 @@
</div>
<div v-if="customizations.procedureContext" class="form-group">
<label class="form-label col-3">
{{ t('word.context') }}
{{ t('database.context') }}
</label>
<div class="column">
<label
@@ -138,11 +138,11 @@
<i class="mdi mdi-dots-horizontal mdi-48px" />
</div>
<p class="empty-title h5">
{{ t('message.thereAreNoParameters') }}
{{ t('database.thereAreNoParameters') }}
</p>
<div class="empty-action">
<button class="btn btn-primary" @click="addParameter">
{{ t('message.createNewParameter') }}
{{ t('database.createNewParameter') }}
</button>
</div>
</div>

View File

@@ -10,26 +10,26 @@
@click="saveChanges"
>
<i class="mdi mdi-24px mdi-content-save mr-1" />
<span>{{ t('word.save') }}</span>
<span>{{ t('general.save') }}</span>
</button>
<button
:disabled="!isChanged"
class="btn btn-link btn-sm mr-0"
:title="t('message.clearChanges')"
:title="t('database.clearChanges')"
@click="clearChanges"
>
<i class="mdi mdi-24px mdi-delete-sweep mr-1" />
<span>{{ t('word.clear') }}</span>
<span>{{ t('general.clear') }}</span>
</button>
<div class="divider-vert py-3" />
<button class="btn btn-dark btn-sm" @click="showTimingModal">
<i class="mdi mdi-24px mdi-timer mr-1" />
<span>{{ t('word.timing') }}</span>
<span>{{ t('database.timing') }}</span>
</button>
</div>
<div class="workspace-query-info">
<div class="d-flex" :title="t('word.schema')">
<div class="d-flex" :title="t('database.schema')">
<i class="mdi mdi-18px mdi-database mr-1" /><b>{{ schema }}</b>
</div>
</div>
@@ -39,7 +39,7 @@
<div class="columns">
<div class="column col-auto">
<div class="form-group">
<label class="form-label">{{ t('word.name') }}</label>
<label class="form-label">{{ t('general.name') }}</label>
<input
v-model="localScheduler.name"
class="form-input"
@@ -49,11 +49,11 @@
</div>
<div class="column col-auto">
<div class="form-group">
<label class="form-label">{{ t('word.definer') }}</label>
<label class="form-label">{{ t('database.definer') }}</label>
<BaseSelect
v-model="localScheduler.definer"
:options="users"
:option-label="(user: any) => user.value === '' ? t('message.currentUser') : `${user.name}@${user.host}`"
:option-label="(user: any) => user.value === '' ? t('database.currentUser') : `${user.name}@${user.host}`"
:option-track-by="(user: any) => user.value === '' ? '' : `\`${user.name}\`@\`${user.host}\``"
class="form-select"
/>
@@ -61,7 +61,7 @@
</div>
<div class="column">
<div class="form-group">
<label class="form-label">{{ t('word.comment') }}</label>
<label class="form-label">{{ t('database.comment') }}</label>
<input
v-model="localScheduler.comment"
class="form-input"
@@ -71,7 +71,7 @@
</div>
<div class="column">
<div class="form-group">
<label class="form-label mr-2">{{ t('word.state') }}</label>
<label class="form-label mr-2">{{ t('database.state') }}</label>
<label class="form-radio form-inline">
<input
v-model="localScheduler.state"
@@ -102,7 +102,7 @@
</div>
<div class="workspace-query-results column col-12 mt-2 p-relative">
<BaseLoader v-if="isLoading" />
<label class="form-label ml-2">{{ t('message.schedulerBody') }}</label>
<label class="form-label ml-2">{{ t('database.schedulerBody') }}</label>
<QueryEditor
v-show="isSelected"
ref="queryEditor"

View File

@@ -1,6 +1,6 @@
<template>
<ConfirmModal
:confirm-text="t('word.confirm')"
:confirm-text="t('general.confirm')"
size="400"
:disable-autofocus="true"
@confirm="confirmOptionsChange"
@@ -9,14 +9,14 @@
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-timer mr-1" />
<span class="cut-text">{{ t('word.timing') }} "{{ localOptions.name }}"</span>
<span class="cut-text">{{ t('database.timing') }} "{{ localOptions.name }}"</span>
</div>
</template>
<template #body>
<form class="form-horizontal">
<div class="form-group">
<label class="form-label col-4">
{{ t('word.execution') }}
{{ t('database.execution') }}
</label>
<div class="column">
<BaseSelect
@@ -62,7 +62,7 @@
</div>
<div class="form-group">
<label class="form-label col-4">
{{ t('word.starts') }}
{{ t('database.starts') }}
</label>
<div class="column">
<div class="input-group">
@@ -83,7 +83,7 @@
</div>
<div class="form-group">
<label class="form-label col-4">
{{ t('word.ends') }}
{{ t('database.ends') }}
</label>
<div class="column">
<div class="input-group">
@@ -125,7 +125,7 @@
<div class="col-4" />
<div class="column">
<label class="form-checkbox form-inline mt-2">
<input v-model="optionsProxy.preserve" type="checkbox"><i class="form-icon" /> {{ t('message.preserveOnCompletion') }}
<input v-model="optionsProxy.preserve" type="checkbox"><i class="form-icon" /> {{ t('database.preserveOnCompletion') }}
</label>
</div>
</div>

View File

@@ -10,16 +10,16 @@
@click="saveChanges"
>
<i class="mdi mdi-24px mdi-content-save mr-1" />
<span>{{ t('word.save') }}</span>
<span>{{ t('general.save') }}</span>
</button>
<button
:disabled="!isChanged || isSaving"
class="btn btn-link btn-sm mr-0"
:title="t('message.clearChanges')"
:title="t('database.clearChanges')"
@click="clearChanges"
>
<i class="mdi mdi-24px mdi-delete-sweep mr-1" />
<span>{{ t('word.clear') }}</span>
<span>{{ t('general.clear') }}</span>
</button>
<div class="divider-vert py-3" />
@@ -27,28 +27,29 @@
<button
:disabled="isSaving"
class="btn btn-dark btn-sm"
:title="t('message.addNewField')"
:title="t('database.addNewField')"
@click="addField"
>
<i class="mdi mdi-24px mdi-playlist-plus mr-1" />
<span>{{ t('word.add') }}</span>
<span>{{ t('general.add') }}</span>
</button>
<button
:disabled="isSaving"
class="btn btn-dark btn-sm"
:title="t('message.manageIndexes')"
:title="t('database.manageIndexes')"
@click="showIntdexesModal"
>
<i class="mdi mdi-24px mdi-key mdi-rotate-45 mr-1" />
<span>{{ t('word.indexes') }}</span>
<span>{{ t('database.indexes') }}</span>
</button>
<button
class="btn btn-dark btn-sm mr-0"
:disabled="isSaving"
:title="t('database.manageIndexes')"
@click="showForeignModal"
>
<i class="mdi mdi-24px mdi-key-link mr-1" />
<span>{{ t('word.foreignKeys') }}</span>
<span>{{ t('database.foreignKeys') }}</span>
</button>
<div class="divider-vert py-3" />
@@ -60,11 +61,11 @@
@click="showDdlModal"
>
<i class="mdi mdi-24px mdi-code-tags mr-1" />
<span>{{ t('word.ddl') }}</span>
<span>{{ t('database.ddl') }}</span>
</button>
</div>
<div class="workspace-query-info">
<div class="d-flex" :title="t('word.schema')">
<div class="d-flex" :title="t('database.schema')">
<i class="mdi mdi-18px mdi-database mr-1" /><b>{{ schema }}</b>
</div>
</div>
@@ -74,7 +75,7 @@
<div class="columns mb-4">
<div class="column col-auto">
<div class="form-group">
<label class="form-label">{{ t('word.name') }}</label>
<label class="form-label">{{ t('general.name') }}</label>
<input
v-model="localOptions.name"
class="form-input"
@@ -84,7 +85,7 @@
</div>
<div v-if="workspace.customizations.comment" class="column">
<div class="form-group">
<label class="form-label">{{ t('word.comment') }}</label>
<label class="form-label">{{ t('database.comment') }}</label>
<input
v-model="localOptions.comment"
class="form-input"
@@ -96,7 +97,7 @@
<div v-if="workspace.customizations.autoIncrement" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.autoIncrement') }}
{{ t('database.autoIncrement') }}
</label>
<input
ref="firstInput"
@@ -110,7 +111,7 @@
<div v-if="workspace.customizations.collations" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.collation') }}
{{ t('database.collation') }}
</label>
<BaseSelect
v-model="localOptions.collation"
@@ -125,7 +126,7 @@
<div v-if="workspace.customizations.engines" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.engine') }}
{{ t('database.engine') }}
</label>
<BaseSelect
v-model="localOptions.engine"
@@ -559,7 +560,7 @@ const addField = () => {
const uid = uidGen();
localFields.value.push({
_antares_id: uid,
name: `${t('word.field', 1)}_${uid.substring(0, 4)}`,
name: `${t('database.field', 1)}_${uid.substring(0, 4)}`,
key: '',
// eslint-disable-next-line @typescript-eslint/no-explicit-any
type: (workspace.value.dataTypes[0] as any).types[0].name,

View File

@@ -4,7 +4,7 @@
@close-context="closeContext"
>
<div class="context-element">
<span class="d-flex"><i class="mdi mdi-18px mdi-key-plus text-light pr-1" /> {{ t('message.createNewIndex') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-key-plus text-light pr-1" /> {{ t('database.createNewIndex') }}</span>
<i class="mdi mdi-18px mdi-chevron-right text-light pl-1" />
<div class="context-submenu">
<div
@@ -19,7 +19,7 @@
</div>
</div>
<div v-if="indexes.length" class="context-element">
<span class="d-flex"><i class="mdi mdi-18px mdi-key-arrow-right text-light pr-1" /> {{ t('message.addToIndex') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-key-arrow-right text-light pr-1" /> {{ t('database.addToIndex') }}</span>
<i class="mdi mdi-18px mdi-chevron-right text-light pl-1" />
<div class="context-submenu">
<div
@@ -34,10 +34,10 @@
</div>
</div>
<div class="context-element" @click="duplicateField">
<span class="d-flex"><i class="mdi mdi-18px mdi-content-duplicate text-light pr-1" /> {{ t('word.duplicate') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-content-duplicate text-light pr-1" /> {{ t('general.duplicate') }}</span>
</div>
<div class="context-element" @click="deleteField">
<span class="d-flex"><i class="mdi mdi-18px mdi-delete text-light pr-1" /> {{ t('message.deleteField') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-delete text-light pr-1" /> {{ t('database.deleteField') }}</span>
</div>
</BaseContextMenu>
</template>

View File

@@ -1,16 +1,16 @@
<template>
<ConfirmModal
:confirm-text="t('word.confirm')"
:confirm-text="t('general.confirm')"
size="large"
class="options-modal"
:cancel-text="t('word.close')"
:cancel-text="t('general.close')"
:hide-footer="true"
@hide="$emit('hide')"
>
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-code-tags mr-1" />
<span class="cut-text">{{ t('word.ddl') }} "{{ table }}"</span>
<span class="cut-text">{{ t('database.ddl') }} "{{ table }}"</span>
</div>
</template>
<template #body>

View File

@@ -21,81 +21,81 @@
<div class="tr">
<div class="th">
<div class="text-right">
{{ t('word.order') }}
{{ t('database.order') }}
</div>
</div>
<div class="th">
<div class="table-column-title">
{{ t('word.key', 2) }}
{{ t('database.key', 2) }}
</div>
</div>
<div class="th">
<div class="column-resizable min-100">
<div class="table-column-title">
{{ t('word.name') }}
{{ t('general.name') }}
</div>
</div>
</div>
<div class="th">
<div class="column-resizable min-100">
<div class="table-column-title">
{{ t('word.type') }}
{{ t('database.type') }}
</div>
</div>
</div>
<div v-if="customizations.tableArray" class="th">
<div class="column-resizable">
<div class="table-column-title">
{{ t('word.array') }}
{{ t('database.array') }}
</div>
</div>
</div>
<div class="th">
<div class="column-resizable">
<div class="table-column-title">
{{ t('word.length') }}
{{ t('database.length') }}
</div>
</div>
</div>
<div v-if="customizations.unsigned" class="th">
<div class="column-resizable">
<div class="table-column-title">
{{ t('word.unsigned') }}
{{ t('database.unsigned') }}
</div>
</div>
</div>
<div v-if="customizations.nullable" class="th">
<div class="column-resizable">
<div class="table-column-title">
{{ t('message.allowNull') }}
{{ t('database.allowNull') }}
</div>
</div>
</div>
<div v-if="customizations.zerofill" class="th">
<div class="column-resizable">
<div class="table-column-title">
{{ t('message.zeroFill') }}
{{ t('database.zeroFill') }}
</div>
</div>
</div>
<div class="th">
<div class="column-resizable">
<div class="table-column-title">
{{ t('word.default') }}
{{ t('database.default') }}
</div>
</div>
</div>
<div v-if="customizations.comment" class="th">
<div class="column-resizable">
<div class="table-column-title">
{{ t('word.comment') }}
{{ t('database.comment') }}
</div>
</div>
</div>
<div v-if="customizations.collation" class="th">
<div class="column-resizable min-100">
<div class="table-column-title">
{{ t('word.collation') }}
{{ t('database.collation') }}
</div>
</div>
</div>

View File

@@ -1,6 +1,6 @@
<template>
<ConfirmModal
:confirm-text="t('word.confirm')"
:confirm-text="t('general.confirm')"
size="medium"
class="options-modal"
@confirm="confirmForeignsChange"
@@ -9,7 +9,7 @@
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-key-link mr-1" />
<span class="cut-text">{{ t('word.foreignKeys') }} "{{ table }}"</span>
<span class="cut-text">{{ t('database.foreignKeys') }} "{{ table }}"</span>
</div>
</template>
<template #body>
@@ -20,16 +20,16 @@
<div class="d-flex">
<button class="btn btn-dark btn-sm d-flex" @click="addForeign">
<i class="mdi mdi-24px mdi-link-plus mr-1" />
<span>{{ t('word.add') }}</span>
<span>{{ t('general.add') }}</span>
</button>
<button
class="btn btn-dark btn-sm d-flex ml-2 mr-0"
:title="t('message.clearChanges')"
:title="t('database.clearChanges')"
:disabled="!isChanged"
@click.prevent="clearChanges"
>
<i class="mdi mdi-24px mdi-delete-sweep mr-1" />
<span>{{ t('word.clear') }}</span>
<span>{{ t('general.clear') }}</span>
</button>
</div>
</div>
@@ -67,7 +67,7 @@
<div class="tile-action">
<button
class="btn btn-link remove-field p-0 mr-2"
:title="t('word.delete')"
:title="t('general.delete')"
@click.prevent="removeIndex(foreign._antares_id)"
>
<i class="mdi mdi-close" />
@@ -86,7 +86,7 @@
>
<div class="form-group">
<label class="form-label col-3">
{{ t('word.name') }}
{{ t('general.name') }}
</label>
<div class="column">
<input
@@ -98,7 +98,7 @@
</div>
<div class="form-group mb-4">
<label class="form-label col-3">
{{ t('word.field', 1) }}
{{ t('database.field', 1) }}
</label>
<div class="fields-list column pt-1">
<label
@@ -114,7 +114,7 @@
</div>
<div class="form-group">
<label class="form-label col-3">
{{ t('message.referenceTable') }}
{{ t('database.referenceTable') }}
</label>
<div class="column">
<BaseSelect
@@ -129,7 +129,7 @@
</div>
<div class="form-group mb-4">
<label class="form-label col-3">
{{ t('message.referenceField') }}
{{ t('database.referenceField') }}
</label>
<div class="fields-list column pt-1">
<label
@@ -145,7 +145,7 @@
</div>
<div class="form-group">
<label class="form-label col-3">
{{ t('message.onUpdate') }}
{{ t('database.onUpdate') }}
</label>
<div class="column">
<BaseSelect
@@ -157,7 +157,7 @@
</div>
<div class="form-group">
<label class="form-label col-3">
{{ t('message.onDelete') }}
{{ t('database.onDelete') }}
</label>
<div class="column">
<BaseSelect
@@ -174,11 +174,11 @@
<i class="mdi mdi-key-link mdi-48px" />
</div>
<p class="empty-title h5">
{{ t('message.thereAreNoForeign') }}
{{ t('database.thereAreNoForeign') }}
</p>
<div class="empty-action">
<button class="btn btn-primary" @click="addForeign">
{{ t('message.createNewForeign') }}
{{ t('database.createNewForeign') }}
</button>
</div>
</div>

View File

@@ -1,6 +1,6 @@
<template>
<ConfirmModal
:confirm-text="t('word.confirm')"
:confirm-text="t('general.confirm')"
size="medium"
class="options-modal"
@confirm="confirmIndexesChange"
@@ -9,7 +9,7 @@
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-key mdi-rotate-45 mr-1" />
<span class="cut-text">{{ t('word.indexes') }} "{{ table }}"</span>
<span class="cut-text">{{ t('database.indexes') }} "{{ table }}"</span>
</div>
</template>
<template #body>
@@ -20,16 +20,16 @@
<div class="d-flex">
<button class="btn btn-dark btn-sm d-flex" @click="addIndex">
<i class="mdi mdi-24px mdi-key-plus mr-1" />
<span>{{ t('word.add') }}</span>
<span>{{ t('general.add') }}</span>
</button>
<button
class="btn btn-dark btn-sm d-flex ml-2 mr-0"
:title="t('message.clearChanges')"
:title="t('database.clearChanges')"
:disabled="!isChanged"
@click.prevent="clearChanges"
>
<i class="mdi mdi-24px mdi-delete-sweep mr-1" />
<span>{{ t('word.clear') }}</span>
<span>{{ t('general.clear') }}</span>
</button>
</div>
</div>
@@ -50,12 +50,12 @@
<div class="tile-title">
{{ index.name }}
</div>
<small class="tile-subtitle text-gray">{{ index.type }} · {{ index.fields.length }} {{ t('word.field', index.fields.length) }}</small>
<small class="tile-subtitle text-gray">{{ index.type }} · {{ index.fields.length }} {{ t('database.field', index.fields.length) }}</small>
</div>
<div class="tile-action">
<button
class="btn btn-link remove-field p-0 mr-2"
:title="t('word.delete')"
:title="t('general.delete')"
@click.prevent="removeIndex(index._antares_id)"
>
<i class="mdi mdi-close" />
@@ -74,7 +74,7 @@
>
<div class="form-group">
<label class="form-label col-3">
{{ t('word.name') }}
{{ t('general.name') }}
</label>
<div class="column">
<input
@@ -86,7 +86,7 @@
</div>
<div class="form-group">
<label class="form-label col-3">
{{ t('word.type') }}
{{ t('database.type') }}
</label>
<div class="column">
<BaseSelect
@@ -99,7 +99,7 @@
</div>
<div class="form-group">
<label class="form-label col-3">
{{ t('word.field', fields.length) }}
{{ t('database.field', fields.length) }}
</label>
<div class="fields-list column pt-1">
<label
@@ -119,11 +119,11 @@
<i class="mdi mdi-key-outline mdi-48px" />
</div>
<p class="empty-title h5">
{{ t('message.thereAreNoIndexes') }}
{{ t('database.thereAreNoIndexes') }}
</p>
<div class="empty-action">
<button class="btn btn-primary" @click="addIndex">
{{ t('message.createNewIndex') }}
{{ t('database.createNewIndex') }}
</button>
</div>
</div>

View File

@@ -220,7 +220,7 @@
</div>
<ConfirmModal
v-if="isDefaultModal"
:confirm-text="t('word.confirm')"
:confirm-text="t('general.confirm')"
size="400"
@confirm="editOFF"
@hide="hideDefaultModal"
@@ -228,7 +228,7 @@
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-playlist-edit mr-1" />
<span class="cut-text">{{ t('word.default') }} "{{ row.name }}"</span>
<span class="cut-text">{{ t('database.default') }} "{{ row.name }}"</span>
</div>
</template>
<template #body>
@@ -251,7 +251,7 @@
value="custom"
type="radio"
name="default"
><i class="form-icon" /> {{ t('message.customValue') }}
><i class="form-icon" /> {{ t('database.customValue') }}
</label>
<div class="column">
<input
@@ -292,7 +292,7 @@
type="radio"
name="default"
value="expression"
><i class="form-icon" /> {{ t('word.expression') }}
><i class="form-icon" /> {{ t('database.expression') }}
</label>
<div class="column">
<input
@@ -307,7 +307,7 @@
<div v-if="customizations.onUpdate">
<div class="form-group">
<label class="form-label col-4">
{{ t('message.onUpdate') }}
{{ t('database.onUpdate') }}
</label>
<div class="column">
<input

View File

@@ -10,20 +10,20 @@
@click="saveChanges"
>
<i class="mdi mdi-24px mdi-content-save mr-1" />
<span>{{ t('word.save') }}</span>
<span>{{ t('general.save') }}</span>
</button>
<button
:disabled="!isChanged"
class="btn btn-link btn-sm mr-0"
:title="t('message.clearChanges')"
:title="t('database.clearChanges')"
@click="clearChanges"
>
<i class="mdi mdi-24px mdi-delete-sweep mr-1" />
<span>{{ t('word.clear') }}</span>
<span>{{ t('general.clear') }}</span>
</button>
</div>
<div class="workspace-query-info">
<div class="d-flex" :title="t('word.schema')">
<div class="d-flex" :title="t('database.schema')">
<i class="mdi mdi-18px mdi-database mr-1" /><b>{{ schema }}</b>
</div>
</div>
@@ -33,7 +33,7 @@
<div class="columns">
<div class="column col-auto">
<div class="form-group">
<label class="form-label">{{ t('word.name') }}</label>
<label class="form-label">{{ t('general.name') }}</label>
<input
v-model="localTrigger.name"
class="form-input"
@@ -43,11 +43,11 @@
</div>
<div v-if="customizations.definer" class="column col-auto">
<div class="form-group">
<label class="form-label">{{ t('word.definer') }}</label>
<label class="form-label">{{ t('database.definer') }}</label>
<BaseSelect
v-model="localTrigger.definer"
:options="users"
:option-label="(user: any) => user.value === '' ? t('message.currentUser') : `${user.name}@${user.host}`"
:option-label="(user: any) => user.value === '' ? t('database.currentUser') : `${user.name}@${user.host}`"
:option-track-by="(user: any) => user.value === '' ? '' : `\`${user.name}\`@\`${user.host}\``"
class="form-select"
/>
@@ -56,7 +56,7 @@
<fieldset class="column columns mb-0" :disabled="customizations.triggerOnlyRename">
<div class="column col-auto">
<div class="form-group">
<label class="form-label">{{ t('word.table') }}</label>
<label class="form-label">{{ t('database.table') }}</label>
<BaseSelect
v-model="localTrigger.table"
:options="schemaTables"
@@ -68,7 +68,7 @@
</div>
<div class="column col-auto">
<div class="form-group">
<label class="form-label">{{ t('word.event') }}</label>
<label class="form-label">{{ t('database.event') }}</label>
<div class="input-group">
<BaseSelect
v-model="localTrigger.activation"
@@ -100,7 +100,7 @@
</div>
<div class="workspace-query-results column col-12 mt-2 p-relative">
<BaseLoader v-if="isLoading" />
<label class="form-label ml-2">{{ t('message.triggerStatement') }}</label>
<label class="form-label ml-2">{{ t('database.triggerStatement') }}</label>
<QueryEditor
v-show="isSelected"
ref="queryEditor"

View File

@@ -10,16 +10,16 @@
@click="saveChanges"
>
<i class="mdi mdi-24px mdi-content-save mr-1" />
<span>{{ t('word.save') }}</span>
<span>{{ t('general.save') }}</span>
</button>
<button
:disabled="!isChanged"
class="btn btn-link btn-sm mr-0"
:title="t('message.clearChanges')"
:title="t('database.clearChanges')"
@click="clearChanges"
>
<i class="mdi mdi-24px mdi-delete-sweep mr-1" />
<span>{{ t('word.clear') }}</span>
<span>{{ t('general.clear') }}</span>
</button>
</div>
</div>
@@ -29,7 +29,7 @@
<div v-if="customizations.triggerFunctionlanguages" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.language') }}
{{ t('application.language') }}
</label>
<BaseSelect
v-model="localFunction.language"
@@ -41,12 +41,12 @@
<div v-if="customizations.definer" class="column col-auto">
<div class="form-group">
<label class="form-label">
{{ t('word.definer') }}
{{ t('database.definer') }}
</label>
<BaseSelect
v-model="localFunction.definer"
:options="workspace.users"
:option-label="(user: any) => user.value === '' ? t('message.currentUser') : `${user.name}@${user.host}`"
:option-label="(user: any) => user.value === '' ? t('database.currentUser') : `${user.name}@${user.host}`"
:option-track-by="(user: any) => user.value === '' ? '' : `\`${user.name}\`@\`${user.host}\``"
class="form-select"
/>
@@ -54,7 +54,7 @@
</div>
<div v-if="customizations.comment" class="form-group">
<label class="form-label">
{{ t('word.comment') }}
{{ t('database.comment') }}
</label>
<input
v-model="localFunction.comment"
@@ -66,7 +66,7 @@
</div>
<div class="workspace-query-results column col-12 mt-2 p-relative">
<BaseLoader v-if="isLoading" />
<label class="form-label ml-2">{{ t('message.functionBody') }}</label>
<label class="form-label ml-2">{{ t('database.functionBody') }}</label>
<QueryEditor
v-show="isSelected"
ref="queryEditor"

View File

@@ -10,20 +10,20 @@
@click="saveChanges"
>
<i class="mdi mdi-24px mdi-content-save mr-1" />
<span>{{ t('word.save') }}</span>
<span>{{ t('general.save') }}</span>
</button>
<button
:disabled="!isChanged"
class="btn btn-link btn-sm mr-0"
:title="t('message.clearChanges')"
:title="t('database.clearChanges')"
@click="clearChanges"
>
<i class="mdi mdi-24px mdi-delete-sweep mr-1" />
<span>{{ t('word.clear') }}</span>
<span>{{ t('general.clear') }}</span>
</button>
</div>
<div class="workspace-query-info">
<div class="d-flex" :title="t('word.schema')">
<div class="d-flex" :title="t('database.schema')">
<i class="mdi mdi-18px mdi-database mr-1" /><b>{{ schema }}</b>
</div>
</div>
@@ -33,7 +33,7 @@
<div class="columns">
<div class="column col-auto">
<div class="form-group">
<label class="form-label">{{ t('word.name') }}</label>
<label class="form-label">{{ t('general.name') }}</label>
<input
v-model="localView.name"
class="form-input"
@@ -43,11 +43,11 @@
</div>
<div class="column col-auto">
<div v-if="workspace.customizations.definer" class="form-group">
<label class="form-label">{{ t('word.definer') }}</label>
<label class="form-label">{{ t('database.definer') }}</label>
<BaseSelect
v-model="localView.definer"
:options="users"
:option-label="(user: any) => user.value === '' ? t('message.currentUser') : `${user.name}@${user.host}`"
:option-label="(user: any) => user.value === '' ? t('database.currentUser') : `${user.name}@${user.host}`"
:option-track-by="(user: any) => user.value === '' ? '' : `\`${user.name}\`@\`${user.host}\``"
class="form-select"
/>
@@ -55,7 +55,7 @@
</div>
<div class="column col-auto mr-2">
<div v-if="workspace.customizations.viewSqlSecurity" class="form-group">
<label class="form-label">{{ t('message.sqlSecurity') }}</label>
<label class="form-label">{{ t('database.sqlSecurity') }}</label>
<BaseSelect
v-model="localView.security"
:options="['DEFINER', 'INVOKER']"
@@ -65,7 +65,7 @@
</div>
<div class="column col-auto mr-2">
<div v-if="workspace.customizations.viewAlgorithm" class="form-group">
<label class="form-label">{{ t('word.algorithm') }}</label>
<label class="form-label">{{ t('database.algorithm') }}</label>
<BaseSelect
v-model="localView.algorithm"
:options="['UNDEFINED', 'MERGE', 'TEMPTABLE']"
@@ -75,7 +75,7 @@
</div>
<div v-if="workspace.customizations.viewUpdateOption" class="column col-auto mr-2">
<div class="form-group">
<label class="form-label">{{ t('message.updateOption') }}</label>
<label class="form-label">{{ t('database.updateOption') }}</label>
<BaseSelect
v-model="localView.updateOption"
:option-track-by="(user: any) => user.value"
@@ -88,7 +88,7 @@
</div>
<div class="workspace-query-results column col-12 mt-2 p-relative">
<BaseLoader v-if="isLoading" />
<label class="form-label ml-2">{{ t('message.selectStatement') }}</label>
<label class="form-label ml-2">{{ t('database.selectStatement') }}</label>
<QueryEditor
v-show="isSelected"
ref="queryEditor"

View File

@@ -24,11 +24,11 @@
v-if="showCancel && isQuering"
class="btn btn-primary btn-sm cancellable"
:disabled="!query"
:title="t('word.cancel')"
:title="t('general.cancel')"
@click="killTabQuery()"
>
<i class="mdi mdi-24px mdi-window-close" />
<span class="d-invisible pr-1">{{ t('word.run') }}</span>
<span class="d-invisible pr-1">{{ t('general.run') }}</span>
</button>
<button
v-else
@@ -38,7 +38,7 @@
@click="runQuery(query)"
>
<i class="mdi mdi-24px mdi-play pr-1" />
<span>{{ t('word.run') }}</span>
<span>{{ t('general.run') }}</span>
</button>
</div>
<button
@@ -48,7 +48,7 @@
@click="commitTab()"
>
<i class="mdi mdi-24px mdi-cube-send pr-1" />
<span>{{ t('word.commit') }}</span>
<span>{{ t('database.commit') }}</span>
</button>
<button
v-if="!autocommit"
@@ -57,7 +57,7 @@
@click="rollbackTab()"
>
<i class="mdi mdi-24px mdi-undo-variant pr-1" />
<span>{{ t('word.rollback') }}</span>
<span>{{ t('database.rollback') }}</span>
</button>
<button
class="btn btn-link btn-sm mr-0"
@@ -65,7 +65,7 @@
@click="clear()"
>
<i class="mdi mdi-24px mdi-delete-sweep pr-1" />
<span>{{ t('word.clear') }}</span>
<span>{{ t('general.clear') }}</span>
</button>
<div class="divider-vert py-3" />
@@ -76,7 +76,7 @@
@click="beautify()"
>
<i class="mdi mdi-24px mdi-brush pr-1" />
<span>{{ t('word.format') }}</span>
<span>{{ t('general.format') }}</span>
</button>
<button
class="btn btn-dark btn-sm"
@@ -84,7 +84,7 @@
@click="openHistoryModal()"
>
<i class="mdi mdi-24px mdi-history pr-1" />
<span>{{ t('word.history') }}</span>
<span>{{ t('general.history') }}</span>
</button>
<div class="dropdown table-dropdown pr-2">
<button
@@ -93,7 +93,7 @@
tabindex="0"
>
<i class="mdi mdi-24px mdi-file-export mr-1" />
<span>{{ t('word.export') }}</span>
<span>{{ t('database.export') }}</span>
<i class="mdi mdi-24px mdi-menu-down" />
</button>
<ul class="menu text-left">
@@ -104,18 +104,18 @@
<a class="c-hand" @click="downloadTable('csv')">CSV</a>
</li>
<li class="menu-item">
<a class="c-hand" @click="downloadTable('php')">{{ t('message.phpArray') }}</a>
<a class="c-hand" @click="downloadTable('php')">{{ t('application.phpArray') }}</a>
</li>
<li class="menu-item">
<a class="c-hand" @click="downloadTable('sql')">SQL INSERT</a>
</li>
</ul>
</div>
<div class="input-group pr-2" :title="t('message.commitMode')">
<div class="input-group pr-2" :title="t('database.commitMode')">
<i class="input-group-addon addon-sm mdi mdi-24px mdi-source-commit p-0" />
<BaseSelect
v-model="autocommit"
:options="[{value: true, label: t('message.autoCommit')}, {value: false, label: t('message.manualCommit')}]"
:options="[{value: true, label: t('database.autoCommit')}, {value: false, label: t('database.manualCommit')}]"
:option-label="(opt: any) => opt.label"
:option-track-by="(opt: any) => opt.value"
class="form-select select-sm text-bold"
@@ -126,30 +126,30 @@
<div
v-if="results.length"
class="d-flex"
:title="t('message.queryDuration')"
:title="t('database.queryDuration')"
>
<i class="mdi mdi-timer-sand mdi-rotate-180 pr-1" /> <b>{{ durationsCount / 1000 }}s</b>
</div>
<div
v-if="resultsCount"
class="d-flex"
:title="t('word.results')"
:title="t('general.results')"
>
<i class="mdi mdi-equal pr-1" /> <b>{{ resultsCount.toLocaleString() }}</b>
</div>
<div
v-if="hasAffected"
class="d-flex"
:title="t('message.affectedRows')"
:title="t('database.affectedRows')"
>
<i class="mdi mdi-target pr-1" /> <b>{{ affectedCount }}</b>
</div>
<div class="input-group" :title="t('word.schema')">
<div class="input-group" :title="t('database.schema')">
<i class="input-group-addon addon-sm mdi mdi-24px mdi-database" />
<BaseSelect
v-model="selectedSchema"
:options="[{value: null, label: t('message.noSchema')}, ...databaseSchemas.map(el => ({label: el, value: el}))]"
:options="[{value: null, label: t('database.noSchema')}, ...databaseSchemas.map(el => ({label: el, value: el}))]"
class="form-select select-sm text-bold"
/>
</div>
@@ -468,7 +468,7 @@ const commitTab = async () => {
await Schema.commitTab(params);
setUnsavedChanges({ uid: props.connection.uid, tUid: props.tabUid, isChanged: false });
addNotification({ status: 'success', message: t('message.actionSuccessful', { action: 'COMMIT' }) });
addNotification({ status: 'success', message: t('general.actionSuccessful', { action: 'COMMIT' }) });
}
catch (err) {
addNotification({ status: 'error', message: err.stack });
@@ -487,7 +487,7 @@ const rollbackTab = async () => {
await Schema.rollbackTab(params);
setUnsavedChanges({ uid: props.connection.uid, tUid: props.tabUid, isChanged: false });
addNotification({ status: 'success', message: t('message.actionSuccessful', { action: 'ROLLBACK' }) });
addNotification({ status: 'success', message: t('general.actionSuccessful', { action: 'ROLLBACK' }) });
}
catch (err) {
addNotification({ status: 'error', message: err.stack });

View File

@@ -102,12 +102,12 @@
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-delete mr-1" />
<span class="cut-text">{{ t('message.deleteRows', selectedRows.length) }}</span>
<span class="cut-text">{{ t('database.deleteRows', selectedRows.length) }}</span>
</div>
</template>
<template #body>
<div class="mb-2">
{{ t('message.confirmToDeleteRows', selectedRows.length) }}
{{ t('database.confirmToDeleteRows', selectedRows.length) }}
</div>
</template>
</ConfirmModal>
@@ -120,12 +120,12 @@
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-file-export mr-1" />
<span class="cut-text">{{ t('message.sqlExportOptions') }}</span>
<span class="cut-text">{{ t('database.sqlExportOptions') }}</span>
</div>
</template>
<template #body>
<div class="columns">
<label class="column col-12 h6 mb-2 cut-text">{{ t('message.targetTable') }}</label>
<label class="column col-12 h6 mb-2 cut-text">{{ t('database.targetTable') }}</label>
<div class="column col-12">
<input
v-model.number="sqlExportOptions.targetTable"
@@ -134,7 +134,7 @@
:placeholder="chunkModalRequest"
>
</div>
<label class="column col-12 h6 mb-2 mt-4 cut-text">{{ t('message.newInsertStmtEvery') }}:</label>
<label class="column col-12 h6 mb-2 mt-4 cut-text">{{ t('database.newInsertStmtEvery') }}:</label>
<div class="column col-6">
<input
v-model.number="sqlExportOptions.sqlInsertAfter"
@@ -146,7 +146,7 @@
<BaseSelect
v-model="sqlExportOptions.sqlInsertDivider"
class="form-select"
:options="[{value: 'bytes', label: 'KiB'}, {value: 'rows', label: t('word.row', 2)}]"
:options="[{value: 'bytes', label: 'KiB'}, {value: 'rows', label: t('database.row', 2)}]"
/>
</div>
</div>
@@ -161,14 +161,14 @@
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-file-export mr-1" />
<span class="cut-text">{{ t('message.csvExportOptions') }}</span>
<span class="cut-text">{{ t('application.csvExportOptions') }}</span>
</div>
</template>
<template #body>
<div class="columns">
<div class="form-group column col-12 columns col-gapless">
<div class="column col-5">
<label class="form-label cut-text">{{ t('message.csvFieldDelimiter') }}:</label>
<label class="form-label cut-text">{{ t('application.csvFieldDelimiter') }}:</label>
</div>
<div class="column col-7">
<input
@@ -180,23 +180,23 @@
</div>
<div class="form-group column col-12 columns col-gapless">
<div class="column col-5">
<label class="form-label cut-text">{{ t('message.csvStringDelimiter') }}:</label>
<label class="form-label cut-text">{{ t('application.csvStringDelimiter') }}:</label>
</div>
<div class="column col-7">
<BaseSelect
v-model="csvExportOptions.stringDelimiter"
class="form-select"
:options="[
{value: '', label: t('word.none')},
{value: 'single', label: t('word.singleQuote')},
{value: 'double', label: t('word.doubleQuote')}
{value: '', label: t('general.none')},
{value: 'single', label: t('general.singleQuote')},
{value: 'double', label: t('general.doubleQuote')}
]"
/>
</div>
</div>
<div class="form-group column col-12 columns col-gapless">
<div class="column col-5">
<label class="form-label cut-text">{{ t('message.csvLinesTerminator') }}:</label>
<label class="form-label cut-text">{{ t('application.csvLinesTerminator') }}:</label>
</div>
<div class="column col-7">
<textarea
@@ -210,7 +210,7 @@
<div class="form-group column col-12 columns col-gapless">
<div class="column col-5">
<label class="form-label">
{{ t('message.csvIncludeHeader') }}
{{ t('application.csvIncludeHeader') }}
</label>
</div>
<div class="column col-7">

View File

@@ -4,7 +4,7 @@
@close-context="closeContext"
>
<div class="context-element">
<span class="d-flex"><i class="mdi mdi-18px mdi-content-copy text-light pr-1" /> {{ t('word.copy') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-content-copy text-light pr-1" /> {{ t('general.copy') }}</span>
<i class="mdi mdi-18px mdi-chevron-right text-light pl-1" />
<div class="context-submenu">
<div
@@ -13,32 +13,32 @@
@click="copyCell"
>
<span class="d-flex">
<i class="mdi mdi-18px mdi-numeric-0 mdi-rotate-90 text-light pr-1" /> {{ t('word.cell', 1) }}
<i class="mdi mdi-18px mdi-numeric-0 mdi-rotate-90 text-light pr-1" /> {{ t('database.cell', 1) }}
</span>
</div>
<div class="context-element" @click="copyRow('html')">
<span class="d-flex">
<i class="mdi mdi-18px mdi-table-row text-light pr-1" /> {{ t('word.row', selectedRows.length) }} ({{ t('word.table') }})
<i class="mdi mdi-18px mdi-table-row text-light pr-1" /> {{ t('database.row', selectedRows.length) }} ({{ t('database.table') }})
</span>
</div>
<div class="context-element" @click="copyRow('json')">
<span class="d-flex">
<i class="mdi mdi-18px mdi-table-row text-light pr-1" /> {{ t('word.row', selectedRows.length) }} (JSON)
<i class="mdi mdi-18px mdi-table-row text-light pr-1" /> {{ t('database.row', selectedRows.length) }} (JSON)
</span>
</div>
<div class="context-element" @click="copyRow('csv')">
<span class="d-flex">
<i class="mdi mdi-18px mdi-table-row text-light pr-1" /> {{ t('word.row', selectedRows.length) }} (CSV)
<i class="mdi mdi-18px mdi-table-row text-light pr-1" /> {{ t('database.row', selectedRows.length) }} (CSV)
</span>
</div>
<div class="context-element" @click="copyRow('php')">
<span class="d-flex">
<i class="mdi mdi-18px mdi-table-row text-light pr-1" /> {{ t('word.row', selectedRows.length) }} (PHP)
<i class="mdi mdi-18px mdi-table-row text-light pr-1" /> {{ t('database.row', selectedRows.length) }} (PHP)
</span>
</div>
<div class="context-element" @click="copyRow('sql')">
<span class="d-flex">
<i class="mdi mdi-18px mdi-table-row text-light pr-1" /> {{ t('word.row', selectedRows.length) }} (SQL INSERT)
<i class="mdi mdi-18px mdi-table-row text-light pr-1" /> {{ t('database.row', selectedRows.length) }} (SQL INSERT)
</span>
</div>
</div>
@@ -49,7 +49,7 @@
@click="duplicateRow"
>
<span class="d-flex">
<i class="mdi mdi-18px mdi-content-duplicate text-light pr-1" /> {{ t('word.duplicate') }}
<i class="mdi mdi-18px mdi-content-duplicate text-light pr-1" /> {{ t('general.duplicate') }}
</span>
</div>
<div
@@ -57,7 +57,7 @@
class="context-element"
>
<span class="d-flex">
<i class="mdi mdi-18px mdi-auto-fix text-light pr-1" /> {{ t('message.fillCell') }}
<i class="mdi mdi-18px mdi-auto-fix text-light pr-1" /> {{ t('database.fillCell') }}
</span>
<i class="mdi mdi-18px mdi-chevron-right text-light pl-1" />
<div class="context-submenu">
@@ -79,7 +79,7 @@
@click="setNull"
>
<span class="d-flex">
<i class="mdi mdi-18px mdi-null text-light pr-1" /> {{ t('message.setNull') }}
<i class="mdi mdi-18px mdi-null text-light pr-1" /> {{ t('database.setNull') }}
</span>
</div>
<div
@@ -88,7 +88,7 @@
@click="showConfirmModal"
>
<span class="d-flex">
<i class="mdi mdi-18px mdi-delete text-light pr-1" /> {{ t('message.deleteRows', selectedRows.length) }}
<i class="mdi mdi-18px mdi-delete text-light pr-1" /> {{ t('database.deleteRows', selectedRows.length) }}
</span>
</div>
</BaseContextMenu>

View File

@@ -73,7 +73,7 @@
</div>
<ConfirmModal
v-if="isTextareaEditor"
:confirm-text="t('word.update')"
:confirm-text="t('application.update')"
size="medium"
:disable-autofocus="true"
@confirm="editOFF"
@@ -81,7 +81,7 @@
>
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-playlist-edit mr-1" /> <span class="cut-text">{{ t('word.edit') }} "{{ editingField }}"</span>
<i class="mdi mdi-24px mdi-playlist-edit mr-1" /> <span class="cut-text">{{ t('general.edit') }} "{{ editingField }}"</span>
</div>
</template>
<template #body>
@@ -96,7 +96,7 @@
<div class="editor-field-info p-vcentered">
<div class="d-flex p-vcentered">
<label for="editorMode" class="form-label mr-2">
<b>{{ t('word.content') }}</b>:
<b>{{ t('general.content') }}</b>:
</label>
<BaseSelect
id="editorMode"
@@ -110,10 +110,10 @@
<div class="d-flex">
<div class="p-vcentered">
<div class="mr-4">
<b>{{ t('word.size') }}</b>: {{ editingContent ? editingContent.length : 0 }}
<b>{{ t('general.size') }}</b>: {{ editingContent ? editingContent.length : 0 }}
</div>
<div v-if="editingType">
<b>{{ t('word.type') }}</b>: {{ editingType.toUpperCase() }}
<b>{{ t('database.type') }}</b>: {{ editingType.toUpperCase() }}
</div>
</div>
</div>
@@ -138,14 +138,14 @@
</ConfirmModal>
<ConfirmModal
v-if="isBlobEditor"
:confirm-text="t('word.update')"
:confirm-text="t('application.update')"
@confirm="editOFF"
@hide="hideEditorModal"
>
<template #header>
<div class="d-flex">
<i class="mdi mdi-24px mdi-playlist-edit mr-1" />
<span class="cut-text">{{ t('word.edit') }} "{{ editingField }}"</span>
<span class="cut-text">{{ t('general.edit') }} "{{ editingField }}"</span>
</div>
</template>
<template #body>
@@ -162,11 +162,11 @@
</div>
<div class="editor-buttons mt-2">
<button class="btn btn-link btn-sm" @click="downloadFile">
<span>{{ t('word.download') }}</span>
<span>{{ t('general.download') }}</span>
<i class="mdi mdi-24px mdi-download ml-1" />
</button>
<button class="btn btn-link btn-sm" @click="prepareToDelete">
<span>{{ t('word.delete') }}</span>
<span>{{ t('general.delete') }}</span>
<i class="mdi mdi-24px mdi-delete-forever ml-1" />
</button>
</div>
@@ -174,15 +174,15 @@
</Transition>
<div class="editor-field-info">
<div>
<b>{{ t('word.size') }}</b>: {{ formatBytes(editingContent.length) }}<br>
<b>{{ t('word.mimeType') }}</b>: {{ contentInfo.mime }}
<b>{{ t('general.size') }}</b>: {{ formatBytes(editingContent.length) }}<br>
<b>{{ t('general.mimeType') }}</b>: {{ contentInfo.mime }}
</div>
<div v-if="editingType">
<b>{{ t('word.type') }}</b>: {{ editingType.toUpperCase() }}
<b>{{ t('database.type') }}</b>: {{ editingType.toUpperCase() }}
</div>
</div>
<div class="mt-3">
<label>{{ t('message.uploadFile') }}</label>
<label>{{ t('general.uploadFile') }}</label>
<input
class="form-input"
type="file"

View File

@@ -8,7 +8,7 @@
<button
class="btn btn-dark btn-sm mr-0 pr-1"
:class="{'loading':isQuering}"
:title="`${t('word.refresh')}`"
:title="`${t('general.refresh')}`"
@click="reloadTable"
>
<i v-if="!+autorefreshTimer" class="mdi mdi-24px mdi-refresh mr-1" />
@@ -18,7 +18,7 @@
<i class="mdi mdi-24px mdi-menu-down" />
</div>
<div class="menu px-3">
<span>{{ t('word.autoRefresh') }}: <b>{{ +autorefreshTimer ? `${autorefreshTimer}s` : 'OFF' }}</b></span>
<span>{{ t('general.autoRefresh') }}: <b>{{ +autorefreshTimer ? `${autorefreshTimer}s` : 'OFF' }}</b></span>
<input
v-model="autorefreshTimer"
class="slider no-border"
@@ -35,7 +35,7 @@
<button
class="btn btn-dark btn-sm mr-0"
:disabled="isQuering || page === 1"
:title="t('message.previousResultsPage')"
:title="t('application.previousResultsPage')"
@click="pageChange('prev')"
>
<i class="mdi mdi-24px mdi-skip-previous" />
@@ -46,7 +46,7 @@
{{ page }}
</div>
<div class="menu px-3">
<span>{{ t('message.pageNumber') }}</span>
<span>{{ t('general.pageNumber') }}</span>
<input
ref="pageSelect"
v-model="pageProxy"
@@ -61,7 +61,7 @@
<button
class="btn btn-dark btn-sm mr-0"
:disabled="isQuering || (results.length && results[0].rows.length < limit)"
:title="t('message.nextResultsPage')"
:title="t('application.nextResultsPage')"
@click="pageChange('next')"
>
<i class="mdi mdi-24px mdi-skip-next" />
@@ -72,7 +72,7 @@
<button
class="btn btn-sm"
:title="t('word.filter')"
:title="t('general.filter')"
:disabled="isQuering"
:class="{'btn-primary': isSearch, 'btn-dark': !isSearch}"
@click="isSearch = !isSearch"
@@ -86,7 +86,7 @@
@click="showFakerModal()"
>
<i class="mdi mdi-24px mdi-playlist-plus mr-1" />
<span>{{ t('message.insertRow', 2) }}</span>
<span>{{ t('database.insertRow', 2) }}</span>
</button>
<div class="dropdown table-dropdown">
@@ -96,7 +96,7 @@
tabindex="0"
>
<i class="mdi mdi-24px mdi-file-export mr-1" />
<span>{{ t('word.export') }}</span>
<span>{{ t('database.export') }}</span>
<i class="mdi mdi-24px mdi-menu-down" />
</button>
<ul class="menu text-left">
@@ -107,7 +107,7 @@
<a class="c-hand" @click="downloadTable('csv')">CSV</a>
</li>
<li class="menu-item">
<a class="c-hand" @click="downloadTable('php')">{{ t('message.phpArray') }}</a>
<a class="c-hand" @click="downloadTable('php')">{{ t('application.phpArray') }}</a>
</li>
<li class="menu-item">
<a class="c-hand" @click="downloadTable('sql')">SQL INSERT</a>
@@ -120,33 +120,33 @@
<button
class="btn btn-dark btn-sm"
:disabled="isQuering"
:title="t('word.settings')"
:title="t('application.settings')"
@click="openTableSettingTab()"
>
<i class="mdi mdi-24px mdi-cog" />
<!-- <span>{{ t('word.settings') }}</span> -->
<!-- <span>{{ t('application.settings') }}</span> -->
</button>
</div>
<div class="workspace-query-info">
<div
v-if="results.length"
class="d-flex"
:title="t('message.queryDuration')"
:title="t('database.queryDuration')"
>
<i class="mdi mdi-timer-sand mdi-rotate-180 pr-1" /> <b>{{ results[0].duration / 1000 }}s</b>
</div>
<div v-if="results.length && results[0].rows">
{{ t('word.results') }}: <b>{{ localeString(results[0].rows.length) }}</b>
{{ t('general.results') }}: <b>{{ localeString(results[0].rows.length) }}</b>
</div>
<div v-if="hasApproximately || (page > 1 && approximateCount)">
{{ t('word.total') }}: <b
:title="!customizations.tableRealCount ? t('word.approximately') : ''"
{{ t('database.total') }}: <b
:title="!customizations.tableRealCount ? t('database.approximately') : ''"
>
<span v-if="!customizations.tableRealCount"></span>
{{ localeString(approximateCount) }}
</b>
</div>
<div class="d-flex" :title="t('word.schema')">
<div class="d-flex" :title="t('database.schema')">
<i class="mdi mdi-18px mdi-database mr-1" /><b>{{ schema }}</b>
</div>
</div>
@@ -166,7 +166,7 @@
<i class="mdi mdi-48px mdi-island" />
</div>
<p class="h4 empty-subtitle">
{{ t('message.noResultsPresent') }}
{{ t('database.noResultsPresent') }}
</p>
</div>
<WorkspaceTabQueryTable

View File

@@ -51,7 +51,7 @@
class="btn btn-sm btn-primary mr-0 ml-2"
type="submit"
>
{{ t('word.filter') }}
{{ t('general.filter') }}
</button>
<button
class="btn btn-sm btn-dark mr-0 ml-2"

View File

@@ -4,19 +4,19 @@
@close-context="closeContext"
>
<div class="context-element" @click.stop="closeAllTabs">
<span class="d-flex"><i class="mdi mdi-18px mdi-asterisk text-light pr-1" /> {{ t('message.closeAllTabs') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-asterisk text-light pr-1" /> {{ t('application.closeAllTabs') }}</span>
</div>
<div class="context-element" @click.stop="closeOtherTabs">
<span class="d-flex"><i class="mdi mdi-18px mdi-not-equal text-light pr-1" /> {{ t('message.closeOtherTabs') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-not-equal text-light pr-1" /> {{ t('application.closeOtherTabs') }}</span>
</div>
<div class="context-element" @click.stop="closeLeftTabs">
<span class="d-flex"><i class="mdi mdi-18px mdi-less-than text-light pr-1" /> {{ t('message.closeTabsToLeft') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-less-than text-light pr-1" /> {{ t('application.closeTabsToLeft') }}</span>
</div>
<div class="context-element" @click.stop="closeRightTabs">
<span class="d-flex"><i class="mdi mdi-18px mdi-greater-than text-light pr-1" /> {{ t('message.closeTabsToRight') }}</span>
<span class="d-flex"><i class="mdi mdi-18px mdi-greater-than text-light pr-1" /> {{ t('application.closeTabsToRight') }}</span>
</div>
</BaseContextMenu>
</template>

View File

@@ -1,5 +1,5 @@
export const arSA = {
word: {
general: {
edit: 'تعديل',
save: 'حفظ',
close: 'إغلاق',
@@ -7,6 +7,23 @@ export const arSA = {
confirm: 'تأكيد',
cancel: 'إلغاء',
send: 'إرسال',
refresh: 'تحديث',
version: 'النسخة',
donate: 'إدعم',
run: 'شغل',
results: 'النتائج',
size: 'الحجم',
mimeType: 'نوع الميديا',
download: 'تحميل',
add: 'أضف',
data: 'بيانات',
properties: 'خصائص',
insert: 'أدرج',
seconds: 'ثواني',
deleteConfirm: 'هل أنت متأكد من حذف الإتصال؟',
uploadFile: 'رفع ملف'
},
connection: {
connectionName: 'إسم الإتصال',
client: 'العميل',
hostName: 'إسم المستضيف',
@@ -18,31 +35,6 @@ export const arSA = {
connected: 'متصل',
disconnect: 'إلغاء الإتصال',
disconnected: 'غير متصل',
refresh: 'تحديث',
settings: 'الإعدادات',
general: 'عام',
themes: 'الأنماط',
update: 'تحديث',
about: 'حول',
language: 'اللغة',
version: 'النسخة',
donate: 'إدعم',
run: 'شغل',
schema: 'Schema',
results: 'النتائج',
size: 'الحجم',
seconds: 'ثواني',
type: 'نوع',
mimeType: 'نوع الميديا',
download: 'تحميل',
add: 'أضف',
data: 'بيانات',
properties: 'خصائص',
insert: 'أدرج'
},
message: {
appWelcome: 'مرحبا بك في عميل الSQL انتاريس!',
appFirstStep: 'خطوتك الأولى قم بإنشاء إتصال جديد بقاعدة بيانات.',
addConnection: 'إضافة إتصال',
createConnection: 'إنشاء إتصال',
createNewConnection: 'إنشاء إتصال جديد',
@@ -50,8 +42,25 @@ export const arSA = {
testConnection: 'إختبر الإتصال',
editConnection: 'عدل الإتصال',
deleteConnection: 'إحذف الإتصال',
deleteConfirm: 'هل أنت متأكد من حذف الإتصال؟',
connectionSuccessfullyMade: 'تم الإتصال بنجاح!',
connectionSuccessfullyMade: 'تم الإتصال بنجاح!'
},
database: {
schema: 'Schema',
type: 'نوع',
unableEditFieldWithoutPrimary: 'لا يمكن تعديل الخانة بدون وجود مفتاح رئيسي في النتائج',
editCell: 'تعديل الخلية',
deleteRows: 'حذف صف | حذف {count} صفوف',
confirmToDeleteRows: 'هل أنت متأكد من حذف صف واحد؟? | هل أنت متأكد من حذف {count} صف?',
addNewRow: 'إضافة صف جديد',
numberOfInserts: 'عدد الإدراجات'
},
application: {
settings: 'الإعدادات',
general: 'عام',
themes: 'الأنماط',
update: 'تحديث',
about: 'حول',
language: 'اللغة',
madeWithJS: 'بني بـ 💛 و جافاسكربت!',
checkForUpdates: 'تأكد من التحديثات',
noUpdatesAvailable: 'لا توجد تحديثات',
@@ -61,13 +70,6 @@ export const arSA = {
downloadingUpdate: 'جاري تحميل التحديث',
updateDownloaded: 'تم تحميل التحديث',
restartToInstall: 'قم بإعادة تشغيل انتاريس للتحديث',
unableEditFieldWithoutPrimary: 'لا يمكن تعديل الخانة بدون وجود مفتاح رئيسي في النتائج',
editCell: 'تعديل الخلية',
deleteRows: 'حذف صف | حذف {count} صفوف',
confirmToDeleteRows: 'هل أنت متأكد من حذف صف واحد؟? | هل أنت متأكد من حذف {count} صف?',
notificationsTimeout: 'إنتهاء التنبيهات',
uploadFile: 'رفع ملف',
addNewRow: 'إضافة صف جديد',
numberOfInserts: 'عدد الإدراجات'
notificationsTimeout: 'إنتهاء التنبيهات'
}
};

522
src/renderer/i18n/ca-ES.ts Normal file
View File

@@ -0,0 +1,522 @@
export const caES = {
general: {
edit: 'Editar',
save: 'Desar',
close: 'Tancar',
delete: 'Esborrar',
confirm: 'Confirmar',
cancel: 'Cancel·lar',
send: 'Enviar',
refresh: 'Actualitzar',
autoRefresh: 'Actualització automàtica',
version: 'Versió',
donate: 'Donar',
run: 'Executar',
results: 'Resultats',
size: 'Mida',
mimeType: 'Tipus MIME',
download: 'Descarregar',
add: 'Afegir',
data: 'Dades',
properties: 'Propietats',
insert: 'Inserir',
name: 'Nom',
clear: 'Netejar',
seconds: 'Segons',
options: 'Opcions',
discard: 'Descartar',
stay: 'Quedar-se',
author: 'Autor',
upload: 'Pujar',
browse: 'Navegar',
content: 'Contingut',
cut: 'Tallar',
copy: 'Copiar',
paste: 'Enganxar',
tools: 'Eines',
format: 'Format',
all: 'Tot',
duplicate: 'Duplicar',
new: 'Nou',
history: 'Històric',
select: 'Seleccionar',
filter: 'Filtre',
change: 'Canviar',
includes: 'Inclou',
completed: 'Completat',
aborted: 'Avortat',
disabled: 'Deshabilitat',
enable: 'Habilitar',
disable: 'Deshabilitar',
contributors: 'Contribuïdors',
pin: 'Fixar',
unpin: 'Desfixar',
folder: 'Carpeta | Carpetes',
none: 'Cap',
singleQuote: 'Cometa simple',
doubleQuote: 'Cometa doble',
deleteConfirm: 'Confirmes la cancel·lació de',
uploadFile: 'Puja fitxer',
manualValue: 'Valor manual',
selectAll: 'Selecciona tot',
pageNumber: 'Número de pàgina',
directoryPath: 'Ruta del directori',
actionSuccessful: '{action} realitzat amb èxit',
outputFormat: 'Format de sortida',
singleFile: 'Arxiu {ext} únic',
zipCompressedFile: 'Arxiu {ext} comprimit en ZIP'
},
connection: {
connectionName: 'Nom de la connexió',
client: 'Client',
hostName: 'Nom de l\'amfitrió',
port: 'Port',
user: 'Usuari',
password: 'Contrasenya',
credentials: 'Credencials',
connect: 'Connectar',
connected: 'Connectat',
disconnect: 'Desconnectar',
disconnected: 'Desconnectat',
ssl: 'SSL',
privateKey: 'Clau privada',
certificate: 'Certificat',
caCertificate: 'Certificat CA',
ciphers: 'Xifrats',
sshTunnel: 'Túnel SSH',
passphrase: 'Frase de contrasenya',
connectionString: 'Cadena de connexió',
addConnection: 'Afegeix connexió',
createConnection: 'Crea connexió',
createNewConnection: 'Crea una nova connexió',
askCredentials: 'Demana credencials',
testConnection: 'Prova la connexió',
editConnection: 'Edita la connexió',
deleteConnection: 'Esborra la connexió',
connectionSuccessfullyMade: 'Connexió realitzada amb èxit!',
enableSsl: 'Activa SSL',
enableSsh: 'Activa SSH',
readOnlyMode: 'Mode de lectura',
untrustedConnection: 'Connexió no confiable',
allConnections: 'Totes les connexions',
searchForConnections: 'Cerca connexions'
},
database: {
schema: 'Esquema',
type: 'Tipus',
foreignKeys: 'Claus foranes',
length: 'Longitud',
unsigned: 'Sense signe',
default: 'Per defecte',
comment: 'Comentari',
collation: 'Ordenació',
key: 'Clau | Claus',
order: 'Ordre',
expression: 'Expressió',
autoIncrement: 'Autoincrement',
engine: 'Motor',
field: 'Camp | Camps',
approximately: 'Aproximadament',
total: 'Total',
table: 'Taula',
view: 'Vista',
indexes: 'Índexs',
definer: 'Definidor',
algorithm: 'Algorisme',
trigger: 'Desencadenador | Desencadenadors',
storedRoutine: 'Rutina emmagatzemada | Rutines emmagatzemades',
scheduler: 'Planificador | Planificadors',
event: 'Esdeveniment',
parameters: 'Paràmetres',
function: 'Funció | Funcions',
deterministic: 'Determinista',
context: 'Context',
export: 'Exportar',
import: 'Importar',
returns: 'Retorna',
timing: 'Temporització',
state: 'Estat',
execution: 'Execució',
starts: 'Comença',
ends: 'Acaba',
variables: 'Variables',
processes: 'Processos',
database: 'Base de dades',
array: 'Matriu',
structure: 'Estructura',
row: 'Fila | Files',
cell: 'Cel·la | Cel·les',
triggerFunction: 'Funció de desencadenador | Funcions de desencadenador',
routine: 'Rutina',
commit: 'Validar',
rollback: 'Desfer',
resultsTable: 'Taula de resultats',
ddl: 'DDL',
drop: 'Descartar',
unableEditFieldWithoutPrimary: 'No es pot editar un camp sense una clau primària en el conjunt de resultats',
editCell: 'Edita la cel·la',
deleteRows: 'Esborra fila | Esborra {count} files',
confirmToDeleteRows: 'Confirmes esborrar una fila? | Confirmes esborrar {count} files?',
addNewRow: 'Afegeix una nova fila',
numberOfInserts: 'Nombre d\'insercions',
affectedRows: 'Files afectades',
createNewDatabase: 'Crea una nova base de dades',
databaseName: 'Nom de la base de dades',
serverDefault: 'Per defecte del servidor',
deleteDatabase: 'Esborra la base de dades',
editDatabase: 'Edita la base de dades',
clearChanges: 'Neteja els canvis',
addNewField: 'Afegeix un nou camp',
manageIndexes: 'Gestiona els índexs',
manageForeignKeys: 'Gestiona les claus foranes',
allowNull: 'Permet NULL',
zeroFill: 'Omplir amb zeros',
customValue: 'Valor personalitzat',
onUpdate: 'A l\'actualitzar',
deleteField: 'Esborra camp',
createNewIndex: 'Crea un nou índex',
addToIndex: 'Afegeix a l\'índex',
createNewTable: 'Crea una nova taula',
emptyTable: 'Taula buida',
deleteTable: 'Esborra la taula',
emptyConfirm: 'Confirmes buidar',
thereAreNoIndexes: 'No hi ha índexs',
thereAreNoForeign: 'No hi ha claus foranes',
createNewForeign: 'Crea una nova clau forana',
referenceTable: 'Taula de referència',
referenceField: 'Camp de referència',
foreignFields: 'Camps foranis',
invalidDefault: 'Valor per defecte no vàlid',
onDelete: 'Al esborrar',
selectStatement: 'Sentència SELECT',
triggerStatement: 'Sentència TRIGGER',
sqlSecurity: 'Seguretat SQL',
updateOption: 'Opció d\'actualització',
deleteView: 'Esborra vista',
createNewView: 'Crea una nova vista',
deleteTrigger: 'Esborra disparador',
createNewTrigger: 'Crea un nou disparador',
currentUser: 'Usuari actual',
routineBody: 'Cos de la rutina',
dataAccess: 'Accés a dades',
thereAreNoParameters: 'No hi ha paràmetres',
createNewParameter: 'Crea un nou paràmetre',
createNewRoutine: 'Crea una nova rutina emmagatzemada',
deleteRoutine: 'Esborra rutina emmagatzemada',
functionBody: 'Cos de la funció',
createNewFunction: 'Crea una nova funció',
deleteFunction: 'Esborra funció',
schedulerBody: 'Cos del planificador',
createNewScheduler: 'Crea un nou planificador',
deleteScheduler: 'Esborra planificador',
preserveOnCompletion: 'Conserva en finalitzar',
tableFiller: 'Ompletaula',
fakeDataLanguage: 'Idioma de dades fictícies',
queryDuration: 'Durada de la consulta',
setNull: 'Estableix NULL',
processesList: 'Llista de processos',
processInfo: 'Informació del procés',
manageUsers: 'Gestiona usuaris',
createNewSchema: 'Crea un nou esquema',
schemaName: 'Nom de l\'esquema',
editSchema: 'Edita l\'esquema',
deleteSchema: 'Esborra l\'esquema',
duplicateTable: 'Duplica taula',
noSchema: 'No hi ha esquema',
runQuery: 'Executa consulta',
thereAreNoTableFields: 'No hi ha camps a la taula',
newTable: 'Nova taula',
newView: 'Nova vista',
newTrigger: 'Nou disparador',
newRoutine: 'Nova rutina',
newFunction: 'Nova funció',
newScheduler: 'Nou planificador',
newTriggerFunction: 'Nova funció de disparador',
thereIsNoQueriesYet: 'Encara no hi ha consultes',
searchForQueries: 'Cerca consultes',
killProcess: 'Mata procés',
exportSchema: 'Exporta esquema',
importSchema: 'Importa esquema',
newInsertStmtEvery: 'Nova sentència INSERT cada',
processingTableExport: 'Processant {table}',
fetchingTableExport: 'Obtenint dades de {table}',
writingTableExport: 'Escrivint dades de {table}',
checkAllTables: 'Marca totes les taules',
uncheckAllTables: 'Desmarca totes les taules',
killQuery: 'Mata consulta',
insertRow: 'Insereix fila | Insereix files',
commitMode: 'Mode de validació',
autoCommit: 'Validació automàtica',
manualCommit: 'Validació manual',
disableFKChecks: 'Desactiva les comprovacions de claus foranes',
formatQuery: 'Formata consulta',
queryHistory: 'Històric de consultes',
clearQuery: 'Neteja consulta',
fillCell: 'Omplir cel·la',
executeSelectedQuery: 'Executa la consulta seleccionada',
noResultsPresent: 'No hi ha resultats',
sqlExportOptions: 'Opcions d\'exportació SQL',
targetTable: 'Taula objectiu',
switchDatabase: 'Canvia la base de dades',
importQueryErrors: 'Avís: ha ocorregut {n} error | Avís: han ocorregut {n} errors',
executedQueries: '{n} consulta executada | {n} consultes executades'
},
application: {
settings: 'Configuració',
general: 'General',
themes: 'Temes',
update: 'Actualitzar',
about: 'Sobre',
language: 'Idioma',
light: 'Clar',
dark: 'Fosc',
autoCompletion: 'Autocompletat',
application: 'Aplicació',
editor: 'Editor',
scratchpad: 'Bloc de notes',
changelog: 'Registre de canvis',
small: 'Petit',
medium: 'Mitjà',
large: 'Gran',
console: 'Consola',
shortcuts: 'Dreceres',
appearance: 'Aparença',
color: 'Color',
label: 'Etiqueta',
icon: 'Icona',
madeWithJS: 'Fet amb 💛 i JavaScript!',
checkForUpdates: 'Comprova actualitzacions',
noUpdatesAvailable: 'No hi ha actualitzacions disponibles',
checkingForUpdate: 'Comprovant actualitzacions',
checkFailure: 'La comprovació ha fallat, si us plau, torna-ho a intentar més tard',
updateAvailable: 'Actualització disponible',
downloadingUpdate: 'Descarregant actualització',
updateDownloaded: 'Actualització descarregada',
restartToInstall: 'Reinicia Antares per instal·lar',
notificationsTimeout: 'Temps d\'espera de notificacions',
openNewTab: 'Obre una nova pestanya',
unsavedChanges: 'Canvis no desats',
discardUnsavedChanges: 'Tens alguns canvis no desats. Tancant aquesta pestanya aquests canvis es descartaran.',
applicationTheme: 'Tema de l\'aplicació',
editorTheme: 'Tema de l\'editor',
wrapLongLines: 'Ajusta línies llargues',
includeBetaUpdates: 'Inclou actualitzacions beta',
markdownSupported: 'Suporta markdown',
plantATree: 'Planta un arbre',
dataTabPageSize: 'Mida de pàgina de la pestanya DATA',
noOpenTabs: 'No hi ha pestanyes obertes, navega per la barra de l\'esquerra o:',
restorePreviousSession: 'Restaura la sessió anterior',
closeTab: 'Tanca pestanya',
goToDownloadPage: 'Ves a la pàgina de descàrrega',
disableBlur: 'Desactiva el desenfoc',
missingOrIncompleteTranslation: 'Traducció absent o incompleta?',
findOutHowToContribute: 'Descobreix com contribuir',
disableScratchpad: 'Desactiva el bloc de notes',
reportABug: 'Informa d\'un error',
nextTab: 'Pestanya següent',
previousTab: 'Pestanya anterior',
selectTabNumber: 'Selecciona el número de pestanya {param}',
toggleConsole: 'Commuta la consola',
addShortcut: 'Afegeix drecera',
editShortcut: 'Edita drecera',
deleteShortcut: 'Esborra drecera',
restoreDefaults: 'Restaura els valors per defecte',
restoreDefaultsQuestion: 'Confirmes restaurar els valors per defecte?',
registerAShortcut: 'Registra una drecera',
invalidShortcutMessage: 'Combinació no vàlida, continua escrivint',
shortcutAlreadyExists: 'La drecera ja existeix',
saveContent: 'Desa el contingut',
openAllConnections: 'Obre totes les connexions',
openSettings: 'Obre configuració',
openScratchpad: 'Obre el bloc de notes',
runOrReload: 'Executa o recarrega',
openFilter: 'Obre filtre',
nextResultsPage: 'Pàgina de resultats següent',
previousResultsPage: 'Pàgina de resultats anterior',
editFolder: 'Edita carpeta',
folderName: 'Nom de la carpeta',
deleteFolder: 'Esborra carpeta',
editConnectionAppearance: 'Edita l\'aparença de la connexió',
defaultCopyType: 'Tipus de còpia per defecte',
showTableSize: 'Mostra la mida de la taula a la barra lateral',
showTableSizeDescription: 'Només MySQL/MariaDB. Activar aquesta opció pot afectar el rendiment en esquemes amb moltes taules.',
searchForSchemas: 'Cerca esquemes',
searchForElements: 'Cerca elements',
switchSearchMethod: 'Canvia el mètode de cerca',
closeAllTabs: 'Tanca totes les pestanyes',
closeOtherTabs: 'Tanca altres pestanyes',
closeTabsToLeft: 'Tanca pestanyes a l\'esquerra',
closeTabsToRight: 'Tanca pestanyes a la dreta',
csvFieldDelimiter: 'Delimitador de camp',
csvLinesTerminator: 'Terminador de línia',
csvStringDelimiter: 'Delimitador de cadena',
csvIncludeHeader: 'Inclou capçalera',
csvExportOptions: 'Opcions d\'exportació CSV',
phpArray: 'Matriu PHP'
},
faker: {
address: 'Adreça',
commerce: 'Comerç',
company: 'Empresa',
database: 'Base de dades',
date: 'Data',
finance: 'Finances',
git: 'Git',
hacker: 'Hacker',
internet: 'Internet',
lorem: 'Lorem',
name: 'Nom',
music: 'Música',
phone: 'Telèfon',
random: 'Aleatori',
system: 'Sistema',
time: 'Hora',
vehicle: 'Vehicle',
zipCode: 'Codi postal',
zipCodeByState: 'Codi postal per estat',
city: 'Ciutat',
cityPrefix: 'Prefix de ciutat',
citySuffix: 'Sufix de ciutat',
streetName: 'Nom del carrer',
streetAddress: 'Adreça del carrer',
streetSuffix: 'Sufix del carrer',
streetPrefix: 'Prefix del carrer',
secondaryAddress: 'Adreça secundària',
county: 'Comtat',
country: 'País',
countryCode: 'Codi de país',
state: 'Estat',
stateAbbr: 'Abreviatura de l\'estat',
latitude: 'Latitud',
longitude: 'Longitud',
direction: 'Direcció',
cardinalDirection: 'Direcció cardinal',
ordinalDirection: 'Direcció ordinal',
nearbyGPSCoordinate: 'Coordenada GPS propera',
timeZone: 'Zona horària',
color: 'Color',
department: 'Departament',
productName: 'Nom del producte',
price: 'Preu',
productAdjective: 'Adjectiu del producte',
productMaterial: 'Material del producte',
product: 'Producte',
productDescription: 'Descripció del producte',
suffixes: 'Sufixos',
companyName: 'Nom de l\'empresa',
companySuffix: 'Sufix de l\'empresa',
catchPhrase: 'Frase feta',
bs: 'BS',
catchPhraseAdjective: 'Adjectiu de la frase feta',
catchPhraseDescriptor: 'Descriptor de la frase feta',
catchPhraseNoun: 'Substantiu de la frase feta',
bsAdjective: 'Adjectiu BS',
bsBuzz: 'Buzz BS',
bsNoun: 'Substantiu BS',
column: 'Columna',
type: 'Tipus',
collation: 'Ordenació',
engine: 'Motor',
past: 'Passat',
now: 'Ara',
future: 'Futur',
between: 'Entre',
recent: 'Recent',
soon: 'Aviat',
month: 'Mes',
weekday: 'Dia de la setmana',
account: 'Compte',
accountName: 'Nom del compte',
routingNumber: 'Número de ruta',
mask: 'Màscara',
amount: 'Quantitat',
transactionType: 'Tipus de transacció',
currencyCode: 'Codi de moneda',
currencyName: 'Nom de la moneda',
currencySymbol: 'Símbol de moneda',
bitcoinAddress: 'Adreça Bitcoin',
litecoinAddress: 'Adreça Litecoin',
creditCardNumber: 'Número de targeta de crèdit',
creditCardCVV: 'CVV de la targeta de crèdit',
ethereumAddress: 'Adreça Ethereum',
iban: 'Iban',
bic: 'Bic',
transactionDescription: 'Descripció de la transacció',
branch: 'Branca',
commitEntry: 'Entrada de commit',
commitMessage: 'Missatge de commit',
commitSha: 'SHA de commit',
shortSha: 'SHA curt',
abbreviation: 'Abreviació',
adjective: 'Adjectiu',
noun: 'Substantiu',
verb: 'Verb',
ingverb: 'Gerundi',
phrase: 'Frase',
avatar: 'Avatar',
email: 'Correu electrònic',
exampleEmail: 'Correu electrònic d\'exemple',
userName: 'Nom d\'usuari',
protocol: 'Protocol',
url: 'Url',
domainName: 'Nom de domini',
domainSuffix: 'Sufix de domini',
domainWord: 'Paraula de domini',
ip: 'Ip',
ipv6: 'Ipv6',
userAgent: 'Agent d\'usuari',
mac: 'Mac',
password: 'Contrasenya',
word: 'Paraula',
words: 'Paraules',
sentence: 'Frase',
slug: 'Slug',
sentences: 'Frases',
paragraph: 'Paràgraf',
paragraphs: 'Paràgrafs',
text: 'Text',
lines: 'Línies',
genre: 'Gènere',
firstName: 'Nom',
lastName: 'Cognom',
middleName: 'Segon nom',
findName: 'Nom complet',
jobTitle: 'Títol del treball',
gender: 'Gènere',
prefix: 'Prefix',
suffix: 'Sufix',
title: 'Títol',
jobDescriptor: 'Descriptor de treball',
jobArea: 'Àrea de treball',
jobType: 'Tipus de treball',
phoneNumber: 'Número de telèfon',
phoneNumberFormat: 'Format de número de telèfon',
phoneFormats: 'Formats de telèfon',
number: 'Número',
float: 'Decimal',
arrayElement: 'Element de matriu',
arrayElements: 'Elements de matriu',
objectElement: 'Element d\'objecte',
uuid: 'Uuid',
boolean: 'Booleà',
image: 'Imatge',
locale: 'Localització',
alpha: 'Alfa',
alphaNumeric: 'Alfanumèric',
hexaDecimal: 'Hexadecimal',
fileName: 'Nom del fitxer',
commonFileName: 'Nom de fitxer comú',
mimeType: 'Tipus de mime',
commonFileType: 'Tipus de fitxer comú',
commonFileExt: 'Extensió de fitxer comú',
fileType: 'Tipus de fitxer',
fileExt: 'Extensió de fitxer',
directoryPath: 'Ruta del directori',
filePath: 'Ruta del fitxer',
semver: 'Semver',
manufacturer: 'Fabricant',
model: 'Model',
fuel: 'Combustible',
vin: 'Vin'
}
};

526
src/renderer/i18n/cs-CZ.ts Normal file
View File

@@ -0,0 +1,526 @@
export const csCZ = {
general: { // General purpose terms
edit: 'Upravit',
save: 'Uložit',
close: 'Zavřít',
delete: 'Smazat',
confirm: 'Potvrdit',
cancel: 'Zrušit',
send: 'Poslat',
refresh: 'Obnovit',
autoRefresh: 'Auto-obnova',
version: 'Verze',
donate: 'Příspěvek',
run: 'Spustit',
results: 'Výsledky',
size: 'Velikost',
mimeType: 'Mime-Type',
download: 'Stáhnout',
add: 'Přidat',
data: 'Data',
properties: 'Vlastnosti', // Lawondyss: Not used
name: 'Název',
clear: 'Vyčistit',
options: 'Možnosti',
insert: 'Vložit',
discard: 'Zahodit',
stay: 'Zůstat',
author: 'Autor',
upload: 'Nahrát',
browse: 'Procházet',
content: 'Obsah',
cut: 'Vyjmout',
copy: 'Kopírovat',
paste: 'Vložit',
duplicate: 'Duplikovat',
tools: 'Nástroje',
seconds: 'sekundy',
all: 'Vše',
new: 'Nové',
select: 'Vybrat',
change: 'Změnit',
includes: 'Zahrnout',
completed: 'Dokončeno',
aborted: 'Zrušeno',
disabled: 'Vypnuto',
enable: 'Zapnuto',
disable: 'Vypnout',
contributors: 'Přispěvatelé',
pin: 'Připnout', // Lawondyss: Not used
unpin: 'Odepnout', // Lawondyss: Not used
folder: 'Složka | Složky', // Lawondyss: Used only 1
none: 'Nic',
singleQuote: 'Apostrofy',
doubleQuote: 'Uvozovky',
deleteConfirm: 'Skutečně chcete smazat',
uploadFile: 'Nahrát soubor',
format: 'Formátovat', // Format code
history: 'Historie',
filter: 'Filtrovat',
manualValue: 'Vlastní hodnota',
selectAll: 'Vybrat vše',
pageNumber: 'Číslo stránky',
directoryPath: 'Adresář',
actionSuccessful: '{action} úspěšný',
outputFormat: 'Formát výstupu',
singleFile: 'Jediný {ext} soubor',
zipCompressedFile: 'ZIP komprimovaný {ext} soubor'
},
connection: { // Database connection
connectionName: 'Název',
hostName: 'Host',
client: 'Klient',
port: 'Port',
user: 'Uživatel',
password: 'Heslo',
credentials: 'Pověření',
connect: 'Připojit',
connected: 'Připojeno', // Lawondyss: Not used
disconnect: 'Odpojit',
disconnected: 'Odpojeno', // Lawondyss: Not used
ssl: 'SSL',
enableSsl: 'Použít SSL',
privateKey: 'Soukromý klíč',
certificate: 'Certifikát',
caCertificate: 'CA certifikát',
ciphers: 'Šifrování',
untrustedConnection: 'Nedůvěryhodné připojení',
passphrase: 'Heslová fráze',
sshTunnel: 'SSH tunel',
enableSsh: 'Použít SSH',
connectionString: 'String připojení',
addConnection: 'Add connection',
createConnection: 'Vytvořit připojení', // Lawondyss: Not used
createNewConnection: 'Vytvořit nové připojení',
askCredentials: 'Vyžadovat přihlášení',
testConnection: 'Vyzkoušet',
editConnection: 'Upravit připojení', // Lawondyss: Not used
deleteConnection: 'Smazat připojení',
connectionSuccessfullyMade: 'Spojení úspěšně navázáno!',
readOnlyMode: 'Pouze pro čtení',
allConnections: 'Všechna připojení',
searchForConnections: 'Hledat připojení'
},
database: { // Database related terms
schema: 'Schéma',
type: 'Typ',
insert: 'Vložit', // Lawondyss: Not used
indexes: 'Indexy',
foreignKeys: 'Cizí klíče',
length: 'Délka',
unsigned: 'Unsigned',
default: 'Výchozí',
comment: 'Komentář',
key: 'Klíč | Klíče', // Lawondyss: Used only 2
order: 'Pořadí',
expression: 'Výraz',
autoIncrement: 'Auto Increment',
engine: 'Engine',
field: 'Sloupec | Sloupce',
approximately: 'Přibližně',
total: 'Celkem',
table: 'Tabulka | Tabulky', // Lawondyss: Used only without argument
view: 'Pohled | Pohledy', // Lawondyss: Used only without argument
definer: 'Definér',
algorithm: 'Algoritmus',
trigger: 'Trigger | Triggery',
storedRoutine: 'Stored routina | Stored routiny',
scheduler: 'Scheduler | Schedulery',
event: 'Akce',
parameters: 'Parametry',
function: 'Funkce | Funkce',
deterministic: 'Deterministická',
context: 'Kontext',
export: 'Export',
import: 'Import',
returns: 'Vrací',
timing: 'Načasování',
state: 'Stav',
execution: 'Spustit',
starts: 'Od',
ends: 'Do',
variables: 'Proměnné',
processes: 'Procesy',
database: 'Databáze',
array: 'Pole',
structure: 'Struktura',
row: 'Řádek | Řádky',
cell: 'Buňka | Buňky',
triggerFunction: 'Trigger funkce | Trigger funkce',
routine: 'Routina | Routiny', // Lawondyss: Not used
drop: 'Drop',
commit: 'Commit',
rollback: 'Rollback',
ddl: 'DDL',
collation: 'Porovnání',
resultsTable: 'Tabulka výsledků',
unableEditFieldWithoutPrimary: 'Nelze upravit buňku bez primárního klíče ve výsledku', // Lawondyss: Not used
editCell: 'Upravit buňku', // Lawondyss: Not used
deleteRows: 'Smazat řádek | Smazat {count} řádků',
confirmToDeleteRows: 'Skutečně chcete smazat řádek? | Skutečně chcete smazat {count} řádků?',
addNewRow: 'Přidat nový řádek', // Lawondyss: Not used
numberOfInserts: 'Počet opakování',
affectedRows: 'Ovlivněno řádků',
createNewDatabase: 'Vytvořit novou databázi', // Lawondyss: Not used
databaseName: 'Název databáze', // Lawondyss: Not use
serverDefault: 'Porovnání serveru',
deleteDatabase: 'Smazat databázi', // Lawondyss: Not used
editDatabase: 'Upravit databázi', // Lawondyss: Not used
clearChanges: 'Zrušit změny',
addNewField: 'Přidat nový sloupec',
manageIndexes: 'Správa indexů',
manageForeignKeys: 'Správa cizích klíčů',
allowNull: 'Povolit NULL',
zeroFill: 'Doplnit nuly',
customValue: 'Vlastní hodnota',
onUpdate: 'Při změně',
deleteField: 'Smazat sloupec',
createNewIndex: 'Vytvořit nový index',
addToIndex: 'Přidat do indexu',
createNewTable: 'Vytvořit novou databázi', // Lawondyss: Not used
emptyTable: 'Smazat obsah tabulky',
duplicateTable: 'Duplikovat tabulku',
deleteTable: 'Smazat tabulku',
emptyConfirm: 'Skutečně smazat obsah tabulky',
thereAreNoIndexes: 'Nemá žádné indexy',
thereAreNoForeign: 'Nemá žádné cizí klíče',
createNewForeign: 'Vytvořit nový cizí klíč',
referenceTable: 'Ref. tabulka',
referenceField: 'Ref. sloupec',
foreignFields: 'Cizí sloupce', // Lawondyss: Not used
invalidDefault: 'Neplatná výchozí hodnota',
onDelete: 'Při smazání',
selectStatement: 'Definice pohledu',
triggerStatement: 'Definice triggeru',
sqlSecurity: 'SQL zabezpečení',
updateOption: 'Volba aktualizace',
deleteView: 'Smazat pohled',
createNewView: 'Vytvořit nový pohled', // Lawondyss: Not used
deleteTrigger: 'Smazat trigger',
createNewTrigger: 'Vytvořit nový trigger',
currentUser: 'Současný uživatel',
routineBody: 'Definice routiny',
dataAccess: 'Přístup k datům',
thereAreNoParameters: 'Nemá žádné parametry',
createNewParameter: 'Vytvořit nový parametr',
createNewRoutine: 'Vytvořit novou stored routinu',
deleteRoutine: 'Smazat stored routinu',
functionBody: 'Definice funkce',
createNewFunction: 'Vytvořit novou funkci',
deleteFunction: 'Smazat funkci',
schedulerBody: 'Definice Scheduleru',
createNewScheduler: 'Vytvořit nový scheduler',
deleteScheduler: 'Smazat scheduler',
preserveOnCompletion: 'Uchovat po dokončení',
tableFiller: 'Vyplňovač tabulky', // Lawondyss: Not used
fakeDataLanguage: 'Jazyk pro fake data',
queryDuration: 'Doba trvání dotazu',
setNull: 'Nastavit NULL',
processesList: 'Seznam procesů',
processInfo: 'Informace o procesu',
manageUsers: 'Správa uživatelů',
createNewSchema: 'Vytvořit nové schéma',
schemaName: 'Název schématu',
editSchema: 'Upravit schéma',
deleteSchema: 'Smazat schema',
noSchema: 'Bez schématu',
runQuery: 'Spustit dotaz', // Lawondyss: Not used
thereAreNoTableFields: 'Nemá žádné sloupce',
newTable: 'Nová tabulka',
newView: 'Nový pohled',
newTrigger: 'Nový trigger',
newRoutine: 'Nová routina',
newFunction: 'Nová funkce',
newScheduler: 'Nový scheduler',
newTriggerFunction: 'Nová trigger funkce',
thereIsNoQueriesYet: 'Nejsou tu žádné dotazy',
searchForQueries: 'Hledání dotazů',
killProcess: 'Zabít proces',
exportSchema: 'Exportovat schéma',
importSchema: 'Importovat schéma',
newInsertStmtEvery: 'Nový INSERT každých',
processingTableExport: 'Zpracovávám tabulku {table}',
fetchingTableExport: 'Získávám data tabulky {table}',
writingTableExport: 'Zapisuji data tabulky {table}',
checkAllTables: 'Vybrat všechny tabulky',
uncheckAllTables: 'Vybrat žádnou tabulku',
killQuery: 'Zabít dotaz', // Lawondyss: Not used
insertRow: 'Vložit řádek | Vložit řádky', // Lawondyss: Used only 2
commitMode: 'Způsob commitování',
autoCommit: 'Auto commit',
manualCommit: 'Ruční commit',
importQueryErrors: 'Varování: došlo k chybě {n} | Varování: došlo k chybám {n}', // Lawondyss: Used without n argument
executedQueries: '{n} dotaz spuštěn | {n} dotazy spuštěny', // Lawondyss: Used withoum n argument
disableFKChecks: 'Vypnout kontrolu cizích klíčů',
formatQuery: 'Formátovat dotaz', // Lawondyss: Not used, probably duplicate to general.format
queryHistory: 'Historie dotazů', // Lawondyss: Not used, probably duplicate to general.history
clearQuery: 'Clear query', // Lawondyss: Not used, probably duplicate to general.clear
fillCell: 'Vyplnit buňku',
executeSelectedQuery: 'Spustit vybraný dotaz',
noResultsPresent: 'Nejsou k dispozici žádné výsledky',
sqlExportOptions: 'Možnosti exportu SQL',
targetTable: 'Cílová tabulka',
switchDatabase: 'Přepnout databázi',
searchForElements: 'Vyhledávání prvků',
searchForSchemas: 'Vyhledávání schémat'
},
application: { // Application related terms
settings: 'Nastavení',
scratchpad: 'Zápisník',
disableScratchpad: 'Vypnout zápisník',
console: 'Konzole',
general: 'Obecné',
themes: 'Motivy',
update: 'Aktualizace',
about: 'Informace',
language: 'Jazyk',
shortcuts: 'Zkratky',
key: 'Klávesa | Klávesy', // Keyboard key // Lawondyss: Usedn only 2
event: 'Akce',
light: 'Světlý',
dark: 'Tmavý',
autoCompletion: 'Dokončování',
application: 'Aplikace',
editor: 'Editor',
changelog: 'Changelog',
small: 'Malé', // Lawondyss: Not used, probably obsolete font size settings
medium: 'Střední', // Lawondyss: Not used, probably obsolete font size settings
large: 'Velké', // Lawondyss: Not used, probably obsolete font size settings
appearance: 'Vzhled',
color: 'Barva',
label: 'Název',
icon: 'Ikona',
madeWithJS: 'Vytvořeno s 💛 a JavaScriptem!',
checkForUpdates: 'Zkontrolovat aktualizace',
noUpdatesAvailable: 'Žádné dostupné aktualizace',
checkingForUpdate: 'Kontrola aktualizací',
checkFailure: 'Kontrola selhala, zkuste to prosím později',
updateAvailable: 'Dostupná aktualizace',
downloadingUpdate: 'Stahuji aktualizaci',
updateDownloaded: 'Aktualizace stažena',
restartToInstall: 'Pro instalaci restartujte Antares',
includeBetaUpdates: 'Včetně beta aktualizací',
notificationsTimeout: 'Časový limit pro oznámení',
openNewTab: 'Otevřít novou kartu',
unsavedChanges: 'Neuložené změny',
discardUnsavedChanges: 'Máte nějaké neuložené změny. Zavřením této karty budou tyto změny zrušeny.',
applicationTheme: 'Motiv aplikace',
editorTheme: 'Motiv editoru',
wrapLongLines: 'Zalamovat dlouhé řádky',
markdownSupported: 'Podporován Markdown',
plantATree: 'Zasaďte strom', // Lawondyss: Not used
dataTabPageSize: 'Počet řádků na stránku',
noOpenTabs: 'Žádné otevřené karty, vyberte z elementů vlevo nebo:',
restorePreviousSession: 'Pamatovat si otevřené karty',
closeTab: 'Zavřít kartu',
goToDownloadPage: 'Pro stažení přejít na stránku',
disableBlur: 'Vypnout rozostření',
missingOrIncompleteTranslation: 'Chybějící nebo neúplný překlad?',
findOutHowToContribute: 'Zjistěte, jak můžete přispět.',
reportABug: 'Nahlásit chybu',
nextTab: 'Další karta',
previousTab: 'Předešlá karta',
selectTabNumber: 'Vybrat kartu číslo {param}',
toggleConsole: 'Přepnout konzoli',
addShortcut: 'Přidat zkratku',
editShortcut: 'Upravit zkratku',
deleteShortcut: 'Smazat zkratku',
restoreDefaults: 'Obnovit výchozí',
restoreDefaultsQuestion: 'Opravdu chcete obnovit výchozí zkratky?',
registerAShortcut: 'Stiskněte požadované klávesy',
invalidShortcutMessage: 'Neplatná kombinace, pokračujte v zadávání',
shortcutAlreadyExists: 'Zkratka již existuje',
saveContent: 'Uložit obsah',
openAllConnections: 'Otevřít všechna připojení',
openSettings: 'Otevřít nastavení',
openScratchpad: 'Otevřít zápisník',
runOrReload: 'Spustit dotaz',
openFilter: 'Otevřít filtr',
nextResultsPage: 'Další stránka výsledků',
previousResultsPage: 'Předešlá stránka výsledků',
editFolder: 'Upravit složku',
folderName: 'Název složky',
deleteFolder: 'Smazat složku', // Lawondyss: Not used
editConnectionAppearance: 'Upravit vzhled připojení', // Lawondyss: Not used
defaultCopyType: 'Výchozí typ kopírování',
showTableSize: 'Velikost tabulky v panelu',
showTableSizeDescription: 'Pouze MySQL/MariaDB. Povolení této možnosti může ovlivnit výkon u schémat s mnoha tabulkami.',
switchSearchMethod: 'Přepnout způsob vyhledávání',
phpArray: 'PHP pole',
closeAllTabs: 'Zavřít všechny karty',
closeOtherTabs: 'Zavřít ostatní karty',
closeTabsToLeft: 'Zavřít karty vlevo',
closeTabsToRight: 'Zavřít karty vpravo',
csvFieldDelimiter: 'Oddělovař',
csvLinesTerminator: 'Konec řádku',
csvStringDelimiter: 'Obalit text',
csvIncludeHeader: 'Včetně hlavičky',
csvExportOptions: 'Možnosti CSV exportu',
scratchPadDefaultValue: '# JAK PODPOŘIT ANTARES\n\n- [ ] Dát Antares hvězdičku [GitHub repo](https://github.com/antares-sql/antares)\n- [ ] Poslat názor či radu\n- [ ] Nahlásit chybu\n- [ ] Pokud se líbí, sdílet Antares s přáteli\n\n# O ZÁPISNÍKU\n\nToto je zápisník, který uchovává vaše **osobní poznámky**. Podporuje `markdown` formát, ale můžete použít obyčejný text.\nTento obsah je pouze ukázky, neváhejte ho smazat, abyste si udělali místo na poznámky.\n'
},
faker: { // Faker.js methods, used in random generated content
address: 'Address',
commerce: 'Commerce',
company: 'Company',
database: 'Database',
date: 'Date',
finance: 'Finance',
git: 'Git',
hacker: 'Hacker',
internet: 'Internet',
lorem: 'Lorem',
name: 'Name',
music: 'Music',
phone: 'Phone',
random: 'Random',
system: 'System',
time: 'Time',
vehicle: 'Vehicle',
zipCode: 'Zip code',
zipCodeByState: 'Zip code by state',
city: 'City',
cityPrefix: 'City prefix',
citySuffix: 'City suffix',
streetName: 'Street name',
streetAddress: 'Street address',
streetSuffix: 'Street suffix',
streetPrefix: 'Street prefix',
secondaryAddress: 'Secondary address',
county: 'County',
country: 'Country',
countryCode: 'Country code',
state: 'State',
stateAbbr: 'State abbreviation',
latitude: 'Latitude',
longitude: 'Longitude',
direction: 'Direction',
cardinalDirection: 'Cardinal direction',
ordinalDirection: 'Ordinal direction',
nearbyGPSCoordinate: 'Nearby GPS coordinate',
timeZone: 'Time zone',
color: 'Color',
department: 'Department',
productName: 'Product name',
price: 'Price',
productAdjective: 'Product adjective',
productMaterial: 'Product material',
product: 'Product',
productDescription: 'Product description',
suffixes: 'Suffixes',
companyName: 'Company name',
companySuffix: 'Company suffix',
catchPhrase: 'Catch phrase',
bs: 'BS',
catchPhraseAdjective: 'Catch phrase adjective',
catchPhraseDescriptor: 'Catch phrase descriptor',
catchPhraseNoun: 'Catch phrase noun',
bsAdjective: 'BS adjective',
bsBuzz: 'BS buzz',
bsNoun: 'BS noun',
column: 'Column',
type: 'Type',
collation: 'Collation',
engine: 'Engine',
past: 'Past',
now: 'Now',
future: 'Future',
between: 'Between',
recent: 'Recent',
soon: 'Soon',
month: 'Month',
weekday: 'Weekday',
account: 'Account',
accountName: 'Account name',
routingNumber: 'Routing number',
mask: 'Mask',
amount: 'Amount',
transactionType: 'Transaction type',
currencyCode: 'Currency code',
currencyName: 'Currency name',
currencySymbol: 'Currency symbol',
bitcoinAddress: 'Bitcoin address',
litecoinAddress: 'Litecoin address',
creditCardNumber: 'Credit card number',
creditCardCVV: 'Credit card CVV',
ethereumAddress: 'Ethereum address',
iban: 'Iban',
bic: 'Bic',
transactionDescription: 'Transaction description',
branch: 'Branch',
commitEntry: 'Commit entry',
commitMessage: 'Commit message',
commitSha: 'Commit SHA',
shortSha: 'Short SHA',
abbreviation: 'Abbreviation',
adjective: 'Adjective',
noun: 'Noun',
verb: 'Verb',
ingverb: 'Ingverb',
phrase: 'Phrase',
avatar: 'Avatar',
email: 'Email',
exampleEmail: 'Example email',
userName: 'Username',
protocol: 'Protocol',
url: 'Url',
domainName: 'Domin name',
domainSuffix: 'Domain suffix',
domainWord: 'Domain word',
ip: 'Ip',
ipv6: 'Ipv6',
userAgent: 'User agent',
mac: 'Mac',
password: 'Password',
word: 'Word',
words: 'Words',
sentence: 'Sentence',
slug: 'Slug',
sentences: 'Sentences',
paragraph: 'Paragraph',
paragraphs: 'Paragraphs',
text: 'Text',
lines: 'Lines',
genre: 'Genre',
firstName: 'First name',
lastName: 'Last name',
middleName: 'Middle name',
findName: 'Full name',
jobTitle: 'Job title',
gender: 'Gender',
prefix: 'Prefix',
suffix: 'Suffix',
title: 'Title',
jobDescriptor: 'Job descriptor',
jobArea: 'Job area',
jobType: 'Job type',
phoneNumber: 'Phone number',
phoneNumberFormat: 'Phone number format',
phoneFormats: 'Phone formats',
number: 'Number',
float: 'Float',
arrayElement: 'Array element',
arrayElements: 'Array elements',
objectElement: 'Object element',
uuid: 'Uuid',
boolean: 'Boolean',
image: 'Image',
locale: 'Locale',
alpha: 'Alpha',
alphaNumeric: 'Alphanumeric',
hexaDecimal: 'Hexadecimal',
fileName: 'File name',
commonFileName: 'Common file name',
mimeType: 'Mime type',
commonFileType: 'Common file type',
commonFileExt: 'Common file extension',
fileType: 'File type',
fileExt: 'File extension',
directoryPath: 'Directory path',
filePath: 'File path',
semver: 'Semver',
manufacturer: 'Manufacturer',
model: 'Model',
fuel: 'Fuel',
vin: 'Vin'
}
}

View File

@@ -1,5 +1,5 @@
export const deDE = {
word: {
general: {
edit: 'Bearbeiten',
save: 'Speichern',
close: 'Schließen',
@@ -7,6 +7,40 @@ export const deDE = {
confirm: 'Bestätigen',
cancel: 'Abbrechen',
send: 'Senden',
refresh: 'Aktualisieren',
autoRefresh: 'Auto-Aktualisierung',
version: 'Version',
donate: 'Spenden',
run: 'Ausführen',
results: 'Ergebnisse',
size: 'Größe',
mimeType: 'Mime-Type',
download: 'Herunterladen',
add: 'Hinzufügen',
data: 'Daten',
properties: 'Eigenschaften',
insert: 'Einfügen',
name: 'Name',
clear: 'Leeren',
seconds: 'Sekunden',
options: 'Optionen',
discard: 'Verwerfen',
stay: 'Warten',
author: 'Autor',
upload: 'Hochladen',
browse: 'Suchen',
content: 'Inhalt',
cut: 'Ausschneiden',
copy: 'Kopieren',
paste: 'Einfügen',
tools: 'Tools',
format: 'Formatierung',
deleteConfirm: 'Bestätige den Abbruch von',
uploadFile: 'Datei hochladen',
manualValue: 'Manueller Wert',
selectAll: 'Alle auswählen'
},
connection: {
connectionName: 'Verbindungsname',
client: 'Client',
hostName: 'Hostname',
@@ -18,39 +52,32 @@ export const deDE = {
connected: 'Verbunden',
disconnect: 'Trennen',
disconnected: 'Getrennt',
refresh: 'Aktualisieren',
settings: 'Einstellungen',
general: 'Allgemein',
themes: 'Designs',
update: 'Aktualisierung',
about: 'Über',
language: 'Sprache',
version: 'Version',
donate: 'Spenden',
run: 'Ausführen',
ssl: 'SSL',
privateKey: 'Privater Schlüssel',
certificate: 'Zertifikat',
caCertificate: 'CA Zertifikat',
ciphers: 'Chiffren',
sshTunnel: 'SSH Tunnel',
addConnection: 'Verbindung hinzufügen',
createConnection: 'Verbindung erstellen',
createNewConnection: 'Neue Verbindung erstellen',
askCredentials: 'Frage nach Zugangsdaten',
testConnection: 'Verbindung testen',
editConnection: 'Verbindung bearbeiten',
deleteConnection: 'Verbindung löschen',
connectionSuccessfullyMade: 'Verbindung erfolgreich erstellt!',
enableSsl: 'Aktiviere SSL',
enableSsh: 'Aktiviere SSH'
},
database: {
schema: 'Schema',
results: 'Ergebnisse',
size: 'Größe',
seconds: 'Sekunden',
type: 'Typ',
mimeType: 'Mime-Type',
download: 'Herunterladen',
add: 'Hinzufügen',
data: 'Daten',
properties: 'Eigenschaften',
insert: 'Einfügen',
connecting: 'Verbinden',
name: 'Name',
collation: 'Kollation',
clear: 'Leeren',
options: 'Optionen',
autoRefresh: 'Auto-Aktualisierung',
indexes: 'Indizes',
foreignKeys: 'Fremdschlüssel',
length: 'Länge',
unsigned: 'Unsigniert',
default: 'Standard',
comment: 'Kommentar',
collation: 'Kollation',
key: 'Schlüssel',
order: 'Sortierung',
expression: 'Ausdruck',
@@ -60,15 +87,8 @@ export const deDE = {
approximately: 'Ungefähr',
total: 'Gesamt',
table: 'Tabelle',
discard: 'Verwerfen',
stay: 'Warten',
author: 'Autor',
light: 'Hell',
dark: 'Dunkel',
autoCompletion: 'Auto-Vervollständigung',
application: 'Anwendung',
editor: 'Editor',
view: 'Ansicht',
indexes: 'Indizes',
definer: 'Bestimmer',
algorithm: 'Algorithmus',
trigger: 'Auslöser',
@@ -86,57 +106,16 @@ export const deDE = {
execution: 'Ausführung',
starts: 'Startet',
ends: 'Endet',
ssl: 'SSL',
privateKey: 'Privater Schlüssel',
certificate: 'Zertifikat',
caCertificate: 'CA Zertifikat',
ciphers: 'Chiffren',
upload: 'Hochladen',
browse: 'Suchen',
faker: 'Faker',
content: 'Inhalt',
cut: 'Ausschneiden',
copy: 'Kopieren',
paste: 'Einfügen',
tools: 'Tools',
variables: 'Variablen',
processes: 'Prozesse',
database: 'Datenbank',
scratchpad: 'Scratchpad',
array: 'Array',
format: 'Formatierung',
sshTunnel: 'SSH Tunnel'
},
message: {
appWelcome: 'Willkommen im Antares SQL Client!',
appFirstStep: 'Dein erster Schritt: Erstelle eine neue Datenbankverbindung.',
addConnection: 'Verbindung hinzufügen',
createConnection: 'Verbindung erstellen',
createNewConnection: 'Neue Verbindung erstellen',
askCredentials: 'Frage nach Zugangsdaten',
testConnection: 'Verbindung testen',
editConnection: 'Verbindung bearbeiten',
deleteConnection: 'Verbindung löschen',
deleteConfirm: 'Bestätige den Abbruch von',
connectionSuccessfullyMade: 'Verbindung erfolgreich erstellt!',
madeWithJS: 'Mit 💛 und JavaScript gemacht!',
checkForUpdates: 'Suche nach Aktualisierungen',
noUpdatesAvailable: 'Keine Aktualisierungen verfügbar',
checkingForUpdate: 'Suche nach Aktualisierungen',
checkFailure: 'Suche fehlgeschlagen, bitte versuche es später noch einmal',
updateAvailable: 'Aktualisierung verfügbar',
downloadingUpdate: 'Aktualisierung wird heruntergeladen',
updateDownloaded: 'Aktualisierung heruntergeladen',
restartToInstall: 'Starte Antares neu für die Installation',
unableEditFieldWithoutPrimary: 'Feld kann ohne Primärschlüssel in Ergebnisliste nicht bearbeitet werden',
editCell: 'Zelle bearbeiten',
deleteRows: 'Zeile löschen | Lösche {count} Zeilen',
confirmToDeleteRows: 'Eine Zeile wirklich löschen? | {count} Zeilen wirklich löschen?',
notificationsTimeout: 'Timeout für Benachrichtigungen',
uploadFile: 'Datei hochladen',
addNewRow: 'Neue Zeile hinzufügen',
numberOfInserts: 'Anzahl der eingefügten Zeilen',
openNewTab: 'Öffne einen neuen Tab',
affectedRows: 'Betroffene Zeilen',
createNewDatabase: 'Erstelle ein neue Datenbank',
databaseName: 'Datenbankname',
@@ -158,8 +137,6 @@ export const deDE = {
emptyTable: 'Tabelle leeren',
deleteTable: 'Tabelle löschen',
emptyConfirm: 'Wirklich leeren?',
unsavedChanges: 'Ungespeicherte Änderungen',
discardUnsavedChanges: 'Du hast ungespeicherte Änderungen. Wenn du den Tab verlässt, werden diese Änderungen verworfen.',
thereAreNoIndexes: 'Es gibt keine Indizes',
thereAreNoForeign: 'Es gibt keine Fremdschlüssel',
createNewForeign: 'Neuen Fremdschlüssel erstellen',
@@ -168,9 +145,6 @@ export const deDE = {
foreignFields: 'Fremdfelder',
invalidDefault: 'Ungültiger Standard',
onDelete: 'Bei Löschung',
applicationTheme: 'Anwendungsdesign',
editorTheme: 'Editordesign',
wrapLongLines: 'Lange Zeilen umbrechen',
selectStatement: 'Select-Anweisung',
triggerStatement: 'Trigger-Anweisung',
sqlSecurity: 'SQL-Sicherheit',
@@ -193,14 +167,9 @@ export const deDE = {
createNewScheduler: 'Neuen Zeitplaner erstellen',
deleteScheduler: 'Zeitplaner löschen',
preserveOnCompletion: 'Bei Vervollständigung erhalten',
enableSsl: 'Aktiviere SSL',
manualValue: 'Manueller Wert',
tableFiller: 'Tabellenfüller',
fakeDataLanguage: 'Fingierte Datensprache',
searchForElements: 'Suche nach Elemente',
selectAll: 'Alle auswählen',
queryDuration: 'Dauer der Abfrage',
includeBetaUpdates: 'Beta-Aktualisierungen berücksichtigen',
setNull: 'Setze NULL',
processesList: 'Prozessliste',
processInfo: 'Prozessinformationen',
@@ -208,11 +177,42 @@ export const deDE = {
createNewSchema: 'Neues Schema erstellen',
schemaName: 'Schemaname',
editSchema: 'Schema bearbeiten',
deleteSchema: 'Schema löschen',
deleteSchema: 'Schema löschen'
},
application: {
settings: 'Einstellungen',
general: 'Allgemein',
themes: 'Designs',
update: 'Aktualisierung',
about: 'Über',
language: 'Sprache',
light: 'Hell',
dark: 'Dunkel',
autoCompletion: 'Auto-Vervollständigung',
application: 'Anwendung',
editor: 'Editor',
scratchpad: 'Scratchpad',
madeWithJS: 'Mit 💛 und JavaScript gemacht!',
checkForUpdates: 'Suche nach Aktualisierungen',
noUpdatesAvailable: 'Keine Aktualisierungen verfügbar',
checkingForUpdate: 'Suche nach Aktualisierungen',
checkFailure: 'Suche fehlgeschlagen, bitte versuche es später noch einmal',
updateAvailable: 'Aktualisierung verfügbar',
downloadingUpdate: 'Aktualisierung wird heruntergeladen',
updateDownloaded: 'Aktualisierung heruntergeladen',
restartToInstall: 'Starte Antares neu für die Installation',
notificationsTimeout: 'Timeout für Benachrichtigungen',
openNewTab: 'Öffne einen neuen Tab',
unsavedChanges: 'Ungespeicherte Änderungen',
discardUnsavedChanges: 'Du hast ungespeicherte Änderungen. Wenn du den Tab verlässt, werden diese Änderungen verworfen.',
applicationTheme: 'Anwendungsdesign',
editorTheme: 'Editordesign',
wrapLongLines: 'Lange Zeilen umbrechen',
includeBetaUpdates: 'Beta-Aktualisierungen berücksichtigen',
markdownSupported: 'Unterstützt Markdown',
plantATree: 'Pflanze einen Baum',
dataTabPageSize: 'Einträge pro Tab / Seite',
enableSsh: 'Aktiviere SSH'
searchForElements: 'Suche nach Elemente'
},
faker: {
address: 'Adresse',

View File

@@ -1,5 +1,5 @@
export const enUS = {
word: {
general: { // General purpose terms
edit: 'Edit',
save: 'Save',
close: 'Close',
@@ -7,9 +7,70 @@ export const enUS = {
confirm: 'Confirm',
cancel: 'Cancel',
send: 'Send',
refresh: 'Refresh',
autoRefresh: 'Auto-refresh',
version: 'Version',
donate: 'Donate',
run: 'Run',
results: 'Results',
size: 'Size',
mimeType: 'Mime-Type',
download: 'Download',
add: 'Add',
data: 'Data',
properties: 'Properties',
name: 'Name',
clear: 'Clear',
options: 'Options',
insert: 'Insert',
discard: 'Discard',
stay: 'Stay',
author: 'Author',
upload: 'Upload',
browse: 'Browse',
content: 'Content',
cut: 'Cut',
copy: 'Copy',
paste: 'Paste',
duplicate: 'Duplicate',
tools: 'Tools',
seconds: 'Seconds',
all: 'All',
new: 'New',
select: 'Select',
change: 'Change',
include: 'Include',
includes: 'Includes',
completed: 'Completed',
aborted: 'Aborted',
disabled: 'Disabled',
enable: 'Enable',
disable: 'Disable',
contributors: 'Contributors',
pin: 'Pin',
unpin: 'Unpin',
folder: 'Folder | Folders',
none: 'None',
singleQuote: 'Single quote',
doubleQuote: 'Double quote',
deleteConfirm: 'Do you confirm the cancellation of',
uploadFile: 'Upload file',
format: 'Format', // Format code
history: 'History',
filter: 'Filter',
manualValue: 'Manual value',
selectAll: 'Select all',
pageNumber: 'Page number',
directoryPath: 'Directory path',
actionSuccessful: '{action} successful',
outputFormat: 'Output format',
singleFile: 'Single {ext} file',
zipCompressedFile: 'ZIP compressed {ext} file'
},
connection: { // Database connection
connectionName: 'Connection name',
client: 'Client',
hostName: 'Host name',
client: 'Client',
port: 'Port',
user: 'User',
password: 'Password',
@@ -18,33 +79,33 @@ export const enUS = {
connected: 'Connected',
disconnect: 'Disconnect',
disconnected: 'Disconnected',
refresh: 'Refresh',
settings: 'Settings',
general: 'General',
themes: 'Themes',
update: 'Update',
about: 'About',
language: 'Language',
version: 'Version',
donate: 'Donate',
run: 'Run',
ssl: 'SSL',
enableSsl: 'Enable SSL',
privateKey: 'Private key',
certificate: 'Certificate',
caCertificate: 'CA certificate',
ciphers: 'Ciphers',
untrustedConnection: 'Untrusted connection',
passphrase: 'Passphrase',
sshTunnel: 'SSH tunnel',
enableSsh: 'Enable SSH',
connectionString: 'Connection string',
addConnection: 'Add connection',
createConnection: 'Create connection',
createNewConnection: 'Create new connection',
askCredentials: 'Ask for credentials',
testConnection: 'Test connection',
editConnection: 'Edit connection',
deleteConnection: 'Delete connection',
connectionSuccessfullyMade: 'Connection successfully made!',
readOnlyMode: 'Read-only mode',
allConnections: 'All connections',
searchForConnections: 'Search for connections'
},
database: { // Database related terms
schema: 'Schema',
results: 'Results',
size: 'Size',
seconds: 'Seconds',
type: 'Type',
mimeType: 'Mime-Type',
download: 'Download',
add: 'Add',
data: 'Data',
properties: 'Properties',
insert: 'Insert',
connecting: 'Connecting',
name: 'Name',
collation: 'Collation',
clear: 'Clear',
options: 'Options',
autoRefresh: 'Auto-refresh',
indexes: 'Indexes',
foreignKeys: 'Foreign keys',
length: 'Length',
@@ -59,16 +120,8 @@ export const enUS = {
field: 'Field | Fields',
approximately: 'Approximately',
total: 'Total',
table: 'Table',
discard: 'Discard',
stay: 'Stay',
author: 'Author',
light: 'Light',
dark: 'Dark',
autoCompletion: 'Auto Completion',
application: 'Application',
editor: 'Editor',
view: 'View',
table: 'Table | Tables',
view: 'View | Views',
definer: 'Definer',
algorithm: 'Algorithm',
trigger: 'Trigger | Triggers',
@@ -87,104 +140,27 @@ export const enUS = {
execution: 'Execution',
starts: 'Starts',
ends: 'Ends',
ssl: 'SSL',
privateKey: 'Private key',
certificate: 'Certificate',
caCertificate: 'CA certificate',
ciphers: 'Ciphers',
upload: 'Upload',
browse: 'Browse',
faker: 'Faker',
content: 'Content',
cut: 'Cut',
copy: 'Copy',
paste: 'Paste',
tools: 'Tools',
variables: 'Variables',
processes: 'Processes',
database: 'Database',
scratchpad: 'Scratchpad',
array: 'Array',
changelog: 'Changelog',
format: 'Format',
sshTunnel: 'SSH tunnel',
structure: 'Structure',
small: 'Small',
medium: 'Medium',
large: 'Large',
row: 'Row | Rows',
cell: 'Cell | Cells',
triggerFunction: 'Trigger function | Trigger functions',
all: 'All',
duplicate: 'Duplicate',
routine: 'Routine',
new: 'New',
history: 'History',
select: 'Select',
passphrase: 'Passphrase',
filter: 'Filter',
change: 'Change',
views: 'Views',
triggers: 'Triggers',
routines: 'Routines',
functions: 'Functions',
schedulers: 'Schedulers',
includes: 'Includes',
routine: 'Routine | Routines',
drop: 'Drop',
completed: 'Completed',
aborted: 'Aborted',
disabled: 'Disabled',
enable: 'Enable',
disable: 'Disable',
commit: 'Commit',
rollback: 'Rollback',
connectionString: 'Connection string',
contributors: 'Contributors',
pin: 'Pin',
unpin: 'Unpin',
console: 'Console',
shortcuts: 'Shortcuts',
folder: 'Folder | Folders',
appearance: 'Appearance',
color: 'Color',
label: 'Label',
icon: 'Icon',
resultsTable: 'Results table',
ddl: 'DDL',
none: 'None',
singleQuote: 'Single quote',
doubleQuote: 'Double quote'
},
message: {
appWelcome: 'Welcome to Antares SQL Client!',
appFirstStep: 'Your first step: create a new database connection.',
addConnection: 'Add connection',
createConnection: 'Create connection',
createNewConnection: 'Create new connection',
askCredentials: 'Ask for credentials',
testConnection: 'Test connection',
editConnection: 'Edit connection',
deleteConnection: 'Delete connection',
deleteConfirm: 'Do you confirm the cancellation of',
connectionSuccessfullyMade: 'Connection successfully made!',
madeWithJS: 'Made with 💛 and JavaScript!',
checkForUpdates: 'Check for updates',
noUpdatesAvailable: 'No updates available',
checkingForUpdate: 'Checking for updates',
checkFailure: 'Check failed, please try later',
updateAvailable: 'Update available',
downloadingUpdate: 'Downloading update',
updateDownloaded: 'Update downloaded',
restartToInstall: 'Restart Antares to install',
collation: 'Collation',
resultsTable: 'Results table',
unableEditFieldWithoutPrimary: 'Unable to edit a field without a primary key in resultset',
editCell: 'Edit cell',
deleteRows: 'Delete row | Delete {count} rows',
confirmToDeleteRows: 'Do you confirm to delete one row? | Do you confirm to delete {count} rows?',
notificationsTimeout: 'Notifications timeout',
uploadFile: 'Upload file',
addNewRow: 'Add new row',
numberOfInserts: 'Number of inserts',
openNewTab: 'Open a new tab',
affectedRows: 'Affected rows',
createNewDatabase: 'Create new Database',
databaseName: 'Database name',
@@ -204,10 +180,10 @@ export const enUS = {
addToIndex: 'Add to index',
createNewTable: 'Create new table',
emptyTable: 'Empty table',
duplicateTable: 'Duplicate table',
deleteTable: 'Delete table',
exportTable: 'Export table',
emptyConfirm: 'Do you confirm to empty',
unsavedChanges: 'Unsaved changes',
discardUnsavedChanges: 'You have some unsaved changes. Closing this tab these changes will be discarded.',
thereAreNoIndexes: 'There are no indexes',
thereAreNoForeign: 'There are no foreign keys',
createNewForeign: 'Create new foreign key',
@@ -216,9 +192,6 @@ export const enUS = {
foreignFields: 'Foreign fields',
invalidDefault: 'Invalid default',
onDelete: 'On delete',
applicationTheme: 'Application Theme',
editorTheme: 'Editor Theme',
wrapLongLines: 'Wrap long lines',
selectStatement: 'Select statement',
triggerStatement: 'Trigger statement',
sqlSecurity: 'SQL security',
@@ -241,14 +214,9 @@ export const enUS = {
createNewScheduler: 'Create new scheduler',
deleteScheduler: 'Delete scheduler',
preserveOnCompletion: 'Preserve on completion',
enableSsl: 'Enable SSL',
manualValue: 'Manual value',
tableFiller: 'Table Filler',
fakeDataLanguage: 'Fake data language',
searchForElements: 'Search for elements',
selectAll: 'Select all',
queryDuration: 'Query duration',
includeBetaUpdates: 'Include beta updates',
setNull: 'Set NULL',
processesList: 'Processes list',
processInfo: 'Process info',
@@ -257,15 +225,7 @@ export const enUS = {
schemaName: 'Schema name',
editSchema: 'Edit schema',
deleteSchema: 'Delete schema',
markdownSupported: 'Markdown supported',
plantATree: 'Plant a Tree',
dataTabPageSize: 'DATA tab page size',
enableSsh: 'Enable SSH',
pageNumber: 'Page number',
duplicateTable: 'Duplicate table',
noOpenTabs: 'There are no open tabs, navigate on the left bar or:',
noSchema: 'No schema',
restorePreviousSession: 'Restore previous session',
runQuery: 'Run query',
thereAreNoTableFields: 'There are no table fields',
newTable: 'New table',
@@ -278,37 +238,92 @@ export const enUS = {
thereIsNoQueriesYet: 'There is no queries yet',
searchForQueries: 'Search for queries',
killProcess: 'Kill process',
closeTab: 'Close tab',
exportSchema: 'Export schema',
importSchema: 'Import schema',
directoryPath: 'Directory path',
newInsertStmtEvery: 'New INSERT statement every',
processingTableExport: 'Processing {table}',
fetchingTableExport: 'Fetching {table} data',
writingTableExport: 'Writing {table} data',
checkAllTables: 'Check all tables',
uncheckAllTables: 'Uncheck all tables',
goToDownloadPage: 'Go to download page',
readOnlyMode: 'Read-only mode',
killQuery: 'Kill query',
insertRow: 'Insert row | Insert rows',
commitMode: 'Commit mode',
autoCommit: 'Auto commit',
manualCommit: 'Manual commit',
actionSuccessful: '{action} successful',
importQueryErrors: 'Warning: {n} error has occurred | Warning: {n} errors occurred',
executedQueries: '{n} query executed | {n} queries executed',
outputFormat: 'Output format',
singleFile: 'Single {ext} file',
zipCompressedFile: 'ZIP compressed {ext} file',
disableFKChecks: 'Disable foreign key checks',
formatQuery: 'Format query',
queryHistory: 'Query history',
clearQuery: 'Clear query',
fillCell: 'Fill cell',
executeSelectedQuery: 'Execute selected query',
noResultsPresent: 'No results present',
sqlExportOptions: 'SQL export options',
targetTable: 'Target table',
switchDatabase: 'Switch the database',
searchForElements: 'Search for elements',
searchForSchemas: 'Search for schemas'
},
application: { // Application related terms
settings: 'Settings',
scratchpad: 'Scratchpad',
disableScratchpad: 'Disable scratchpad',
console: 'Console',
general: 'General',
themes: 'Themes',
update: 'Update',
about: 'About',
language: 'Language',
shortcuts: 'Shortcuts',
key: 'Key | Keys', // Keyboard key
event: 'Event',
light: 'Light',
dark: 'Dark',
autoCompletion: 'Auto Completion',
application: 'Application',
editor: 'Editor',
changelog: 'Changelog',
small: 'Small',
medium: 'Medium',
large: 'Large',
appearance: 'Appearance',
color: 'Color',
label: 'Label',
icon: 'Icon',
fileName: 'File name',
choseFile: 'Chose file',
data: 'Data',
password: 'Password',
required: 'Required',
madeWithJS: 'Made with 💛 and JavaScript!',
checkForUpdates: 'Check for updates',
noUpdatesAvailable: 'No updates available',
checkingForUpdate: 'Checking for updates',
checkFailure: 'Check failed, please try later',
updateAvailable: 'Update available',
downloadingUpdate: 'Downloading update',
updateDownloaded: 'Update downloaded',
restartToInstall: 'Restart Antares to install',
includeBetaUpdates: 'Include beta updates',
notificationsTimeout: 'Notifications timeout',
openNewTab: 'Open a new tab',
unsavedChanges: 'Unsaved changes',
discardUnsavedChanges: 'You have some unsaved changes. Closing this tab these changes will be discarded.',
applicationTheme: 'Application Theme',
editorTheme: 'Editor Theme',
wrapLongLines: 'Wrap long lines',
markdownSupported: 'Markdown supported',
plantATree: 'Plant a Tree',
dataTabPageSize: 'DATA tab page size',
noOpenTabs: 'There are no open tabs, navigate on the left bar or:',
restorePreviousSession: 'Restore previous session',
closeTab: 'Close tab',
goToDownloadPage: 'Go to download page',
disableBlur: 'Disable blur',
untrustedConnection: 'Untrusted connection',
missingOrIncompleteTranslation: 'Missing or incomplete translation?',
findOutHowToContribute: 'Find out how to contribute',
disableFKChecks: 'Disable foreign key checks',
allConnections: 'All connections',
searchForConnections: 'Search for connections',
disableScratchpad: 'Disable scratchpad',
reportABug: 'Report a bug',
nextTab: 'Next tab',
previousTab: 'Previous tab',
@@ -327,40 +342,41 @@ export const enUS = {
openSettings: 'Open settings',
openScratchpad: 'Open scratchpad',
runOrReload: 'Run or reload',
formatQuery: 'Format query',
queryHistory: 'Query history',
clearQuery: 'Clear query',
openFilter: 'Open filter',
nextResultsPage: 'Next results page',
previousResultsPage: 'Previous results page',
fillCell: 'Fill cell',
editFolder: 'Edit folder',
folderName: 'Folder name',
deleteFolder: 'Delete folder',
editConnectionAppearance: 'Edit connection appearance',
executeSelectedQuery: 'Execute selected query',
defaultCopyType: 'Default copy type',
showTableSize: 'Show table size in sidebar',
showTableSizeDescription: 'MySQL/MariaDB only. Enable this option may affects performance on schema with many tables.',
searchForSchemas: 'Search for schemas',
switchSearchMethod: 'Switch search method',
noResultsPresent: 'No results present',
sqlExportOptions: 'SQL export options',
targetTable: 'Target table',
phpArray: 'PHP array',
closeAllTabs: 'Close all tabs',
closeOtherTabs: 'Close other tabs',
closeTabsToLeft: 'Close tabs to the left',
closeTabsToRight: 'Close tabs to the right',
switchDatabase: 'Switch the database',
csvExportOptions: 'CSV export options',
csvFieldDelimiter: 'Field delimiter',
csvLinesTerminator: 'Line terminator',
csvStringDelimiter: 'String delimiter',
csvIncludeHeader: 'Include header',
scratchPadDefaultValue: '# HOW TO SUPPORT ANTARES\n\n- [ ] Leave a star to Antares [GitHub repo](https://github.com/antares-sql/antares)\n- [ ] Send feedbacks and advices\n- [ ] Report for bugs\n- [ ] If you enjoy, share Antares with friends\n\n# ABOUT SCRATCHPAD\n\nThis is a scratchpad where you can save your **personal notes**. It supports `markdown` format, but you are free to use plain text.\nThis content is just a placeholder, feel free to clear it to make space for your notes.\n'
csvExportOptions: 'CSV export options',
exportData: 'Export data',
exportDataExplanation: 'Export saved connections to Antares. You will be asked for a password to encrypt the exported file.',
importData: 'Import data',
importDataExplanation: 'Imports an .antares file containing connections. You will need to enter the password defined during export.',
includeConnectionPasswords: 'Include connection passwords',
includeFolders: 'Include folders',
encryptionPassword: 'Encryption password',
encryptionPasswordError: 'The encryption password must be at least 8 characters long.',
ignoreDuplicates: 'Ignore duplicates',
wrongImportPassword: 'Wrong import password',
wrongFileFormat: 'Wrong file format',
dataImportSuccess: 'Data successfully imported'
},
faker: {
faker: { // Faker.js methods, used in random generated content
address: 'Address',
commerce: 'Commerce',
company: 'Company',

View File

@@ -1,5 +1,5 @@
export const esES = {
word: {
general: {
edit: 'Editar',
save: 'Guardar',
close: 'Cerrar',
@@ -7,6 +7,23 @@ export const esES = {
confirm: 'Confirmar',
cancel: 'Cancelar',
send: 'Enviar',
refresh: 'Refrescar',
version: 'Versión',
donate: 'Donar',
run: 'Ejecutar',
results: 'Resultados',
size: 'Tamaño',
mimeType: 'Mime-Type',
download: 'Descargar',
add: 'Añadir',
data: 'Datos',
properties: 'Propiedades',
insert: 'Insertar',
seconds: 'Segundos',
deleteConfirm: 'Confirmas la cancelación de',
uploadFile: 'Cargar fichero'
},
connection: {
connectionName: 'Nombre de la conexión',
client: 'Cliente',
hostName: 'Servidor',
@@ -18,32 +35,6 @@ export const esES = {
connected: 'Conectado',
disconnect: 'Desconectar',
disconnected: 'Desconectado',
refresh: 'Refrescar',
settings: 'Configuración',
general: 'General',
themes: 'Temas',
update: 'Actualizar',
about: 'Sobre',
language: 'Idioma',
version: 'Versión',
donate: 'Donar',
run: 'Ejecutar',
schema: 'Esquema',
results: 'Resultados',
size: 'Tamaño',
seconds: 'Segundos',
type: 'Tipo',
mimeType: 'Mime-Type',
download: 'Descargar',
add: 'Añadir',
data: 'Datos',
properties: 'Propiedades',
insert: 'Insertar',
connecting: 'Conectando'
},
message: {
appWelcome: 'Bienvenido a Antares Cliente SQL!',
appFirstStep: 'Primer paso: Crear una conexión a una Base de Datos.',
addConnection: 'Añadir conexión',
createConnection: 'Crear conexión',
createNewConnection: 'Crear nueva conexión',
@@ -51,8 +42,26 @@ export const esES = {
testConnection: 'Comprobar conexión',
editConnection: 'Editar conexión',
deleteConnection: 'Eliminar conexión',
deleteConfirm: 'Confirmas la cancelación de',
connectionSuccessfullyMade: 'Conexión realizada correctamente!',
connectionSuccessfullyMade: 'Conexión realizada correctamente!'
},
database: {
schema: 'Esquema',
type: 'Tipo',
unableEditFieldWithoutPrimary: 'No se puede editar una campo sin Llave Primaria en el registro',
editCell: 'Editar celda',
deleteRows: 'Eliminar fila | Eliminar {count} filas',
confirmToDeleteRows: '¿Quiere realmente eliminar una fila? | ¿Quiere realmente eliminar {count} filas?',
addNewRow: 'Añadir nueva fila',
numberOfInserts: 'Numero de inserciones',
affectedRows: 'Filas afectadas'
},
application: {
settings: 'Configuración',
general: 'General',
themes: 'Temas',
update: 'Actualizar',
about: 'Sobre',
language: 'Idioma',
madeWithJS: 'Hecho con 💛 y JavaScript!',
checkForUpdates: 'Comprobar actualizaciones',
noUpdatesAvailable: 'No hay actualizaciones',
@@ -62,15 +71,7 @@ export const esES = {
downloadingUpdate: 'Descargando actualización',
updateDownloaded: 'Descargada actualización',
restartToInstall: 'Reiniciar Antares para instalar',
unableEditFieldWithoutPrimary: 'No se puede editar una campo sin Llave Primaria en el registro',
editCell: 'Editar celda',
deleteRows: 'Eliminar fila | Eliminar {count} filas',
confirmToDeleteRows: '¿Quiere realmente eliminar una fila? | ¿Quiere realmente eliminar {count} filas?',
notificationsTimeout: 'Tiempo de espera',
uploadFile: 'Cargar fichero',
addNewRow: 'Añadir nueva fila',
numberOfInserts: 'Numero de inserciones',
openNewTab: 'Abrir nueva pestaña',
affectedRows: 'Filas afectadas'
openNewTab: 'Abrir nueva pestaña'
}
};

View File

@@ -1,5 +1,5 @@
export const frFR = {
word: {
general: {
edit: 'Editer',
save: 'Sauvegarder',
close: 'Fermer',
@@ -7,6 +7,65 @@ export const frFR = {
confirm: 'Confirmer',
cancel: 'Annuler',
send: 'Envoyer',
refresh: 'Rafraîchir',
autoRefresh: 'Auto-rafraîchissement',
version: 'Version',
donate: 'Faire une don',
run: 'Éxécuter',
results: 'Résultats',
size: 'Taille',
mimeType: 'Mime-Type',
download: 'Télécharger',
add: 'Ajouter',
data: 'Donnée',
properties: 'Propriétés',
insert: 'Insérer',
name: 'Nom',
clear: 'Effacer',
seconds: 'Secondes',
options: 'Options',
discard: 'Annuler',
stay: 'Rester',
author: 'Auteur',
upload: 'Téléverser',
browse: 'Naviguer',
content: 'Contenu',
cut: 'Couper',
copy: 'Copier',
paste: 'Coller',
tools: 'Outils',
all: 'Tout',
duplicate: 'Dupliquer',
new: 'Nouveau',
history: 'Historique',
select: 'Sélectionner',
filter: 'Filtre',
change: 'Changement',
includes: 'Inclut',
completed: 'Terminé',
aborted: 'Annulé',
disabled: 'Désactivé',
enable: 'activer',
disable: 'Désactiver',
contributors: 'Contributeurs',
pin: 'Épingler',
unpin: 'Désépingler',
folder: 'Dossier | Dossiers',
none: 'Aucun',
singleQuote: 'Simple guillemets',
doubleQuote: 'Double guillemets',
deleteConfirm: 'Confirmez-vous l\'annulation de',
uploadFile: 'Télécharger un fichier',
manualValue: 'Valeur manuelle',
selectAll: 'Tout sélectionner',
pageNumber: 'Numéro de la page',
directoryPath: 'chemin du répertoire',
actionSuccessful: '{action} réussie',
outputFormat: 'Format de sortie',
singleFile: 'Fichier seul avec l\'extension {ext}',
zipCompressedFile: 'Fichier compréssé avec l\'extension {ext}'
},
connection: {
connectionName: 'Nom de la connexion',
client: 'Client',
hostName: 'Nom du host',
@@ -18,39 +77,38 @@ export const frFR = {
connected: 'Connecté',
disconnect: 'Déconnection',
disconnected: 'Déconnecté',
refresh: 'Rafraîchir',
settings: 'Paramètres',
general: 'Général',
themes: 'Thèmes',
update: 'Mise à jour',
about: 'À propos',
language: 'Langue',
version: 'Version',
donate: 'Faire une don',
run: 'Éxécuter',
ssl: 'SSL',
privateKey: 'Clé privée',
certificate: 'Certificat',
caCertificate: 'Certificat CA',
ciphers: 'Codes secrets',
sshTunnel: 'Tunnel SSH',
passphrase: 'Phrase secrète',
connectionString: 'Chaîne de connexion',
addConnection: 'Ajouter une connexion',
createConnection: 'Créer une connexion',
createNewConnection: 'Créer une nouvelle connexion',
askCredentials: 'Demander les informations d\'identification',
testConnection: 'Tester la connexion',
editConnection: 'Modifier la connexion',
deleteConnection: 'Supprimer la connexion',
connectionSuccessfullyMade: 'Connexion établie avec succès !',
enableSsl: 'Activer le SSL',
enableSsh: 'Activer le SSH',
readOnlyMode: 'Mode lecture seule',
untrustedConnection: 'Connexion non approuvée',
allConnections: 'Toutes les connexions',
searchForConnections: 'Rechercher des connexions'
},
database: {
schema: 'Schéma',
results: 'Résultats',
size: 'Taille',
seconds: 'Secondes',
type: 'Type',
mimeType: 'Mime-Type',
download: 'Télécharger',
add: 'Ajouter',
data: 'Donnée',
properties: 'Propriétés',
insert: 'Insérer',
connecting: 'Connexion en cours',
name: 'Nom',
collation: 'Langage',
clear: 'Effacer',
options: 'Options',
autoRefresh: 'Auto-rafraîchissement',
indexes: 'Indexs',
foreignKeys: 'Clés étrangères',
length: 'Longueur',
unsigned: 'Non signé',
default: 'Par défaut',
comment: 'Commentaire',
collation: 'Langage',
key: 'Clé | Clés',
order: 'Ordre',
expression: 'Expression',
@@ -60,17 +118,9 @@ export const frFR = {
approximately: 'Approximativement',
total: 'Total',
table: 'Table',
discard: 'Annuler',
stay: 'Rester',
author: 'Auteur',
light: 'Clair',
dark: 'Sombre',
autoCompletion: 'Prédiction Automatique',
application: 'Application',
editor: 'Éditeur',
view: 'Vue',
indexes: 'Indexs',
definer: 'Définisseur',
algorithme: 'Algorithme',
trigger: 'Déclencheur | Déclencheurs',
storedRoutine: 'Routine stockée | Routines stockées',
scheduler: 'Planificateur | Planificateurs',
@@ -87,104 +137,25 @@ export const frFR = {
execution: 'Éxécution',
starts: 'Commence',
ends: 'Termine',
ssl: 'SSL',
privateKey: 'Clé privée',
certificate: 'Certificat',
caCertificate: 'Certificat CA',
ciphers: 'Codes secrets',
upload: 'Téléverser',
browse: 'Naviguer',
faker: 'Imposteur',
content: 'Contenu',
cut: 'Couper',
copy: 'Copier',
paste: 'Coller',
tools: 'Outils',
variables: 'Variables',
processes: 'Processus',
Database: 'Base de données',
scratchpad: 'Bloc-notes',
array: 'Tableau',
changelog: 'Journal des modifications',
Format: 'Format',
sshTunnel: 'Tunnel SSH',
structure: 'Structure',
small: 'Petit',
medium: 'Moyen',
large: 'Grand',
row: 'Ligne | Lignes',
cell: 'Cellule | Cellules',
triggerFunction: 'Fonction de déclenchement | Fonctions de déclenchement',
all: 'Tout',
duplicate: 'Dupliquer',
routine: 'Routine',
new: 'Nouveau',
history: 'Historique',
select: 'Sélectionner',
passphrase: 'Phrase secrète',
filter: 'Filtre',
change: 'Changement',
views: 'Vues',
triggers: 'Déclencheurs',
routines: 'Routines',
fonctions: 'Fonctions',
schedulers: 'Programmateurs',
includes: 'Inclut',
drop: 'Effacer',
completed: 'Terminé',
aborted: 'Annulé',
disabled: 'Désactivé',
enable: 'activer',
disable: 'Désactiver',
commit: 'Appliquer',
rollback: 'Retour arrière',
connectionString: 'Chaîne de connexion',
contributors: 'Contributeurs',
pin: 'Épingler',
unpin: 'Désépingler',
console: 'Console',
shortcuts: 'Raccourcis',
folder: 'Dossier | Dossiers',
appearance: 'Apparence',
color: 'Couleur',
label: 'Libellé',
icon: 'Icône',
resultsTable: 'Table des résultats',
ddl: 'DDL',
none: 'Aucun',
singleQuote: 'Simple guillemets',
doubleQuote: 'Double guillemets'
},
message: {
appWelcome: 'Bienvenue dans le client SQL Antares!',
appFirstStep: 'Votre première étape : créer une nouvelle connexion à la base de données.',
addConnection: 'Ajouter une connexion',
createConnection: 'Créer une connexion',
createNewConnection: 'Créer une nouvelle connexion',
askCredentials: 'Demander les informations d\'identification',
testConnection: 'Tester la connexion',
editConnection: 'Modifier la connexion',
deleteConnection: 'Supprimer la connexion',
deleteConfirm: 'Confirmez-vous l\'annulation de',
connectionSuccessfullyMade: 'Connexion établie avec succès !',
madeWithJS: 'Fait avec 💛 et JavaScript !',
checkForUpdates: 'Vérifier les mises à jour',
noUpdatesAvailable: 'Aucune mise à jour disponible',
checkingForUpdate: 'Vérification des mises à jour',
checkFailure: 'La vérification a échoué, veuillez essayer plus tard',
updateAvailable: 'Mise à jour disponible',
downloadingUpdate: 'Téléchargement de la mise à jour',
updateDownloaded: 'Mise à jour téléchargée',
restartToInstall: 'Redémarrer Antares pour installer',
drop: 'Effacer',
unableEditFieldWithoutPrimary: 'Impossible de modifier un champ sans clé primaire dans le jeu de résultats',
editCell: 'Éditer la cellule',
deleteRows: 'Effacer la ligne | Effacer {count} lignes',
confirmToDeleteRows: 'Confirmez-vous la suppression d\'une ligne ? | Confirmez-vous la suppression de {count} lignes ?',
notificationsTimeout: 'Délai d\'attente pour les notifications',
uploadFile: 'Télécharger un fichier',
addNewRow: 'Ajouter une nouvelle ligne',
numberOfInserts: 'Nombre d\'insertions',
openNewTab: 'Ouvrir un nouvel onglet',
affectedRows: 'Lignes affectées',
createNewDatabase: 'Créer une nouvelle base de données',
databaseName: 'Nom de la base de données',
@@ -206,8 +177,6 @@ export const frFR = {
emptyTable: 'Vider la table',
deleteTable: 'Supprimer une table',
emptyConfirm: 'Confirmez-vous que vous souhaitez vider la table ?',
unsavedChanges: 'Modifications non sauvegardées',
discardUnsavedChanges: 'Vous avez des modifications non sauvegardées. En fermant cet onglet, ces modifications seront supprimées.',
thereAreNoIndexes: 'Il n\'y a pas d\'index',
thereAreNoForeign: 'Il n\'y a pas de clés étrangères',
createNewForeign: 'Créer une nouvelle clé étrangère',
@@ -216,9 +185,6 @@ export const frFR = {
foreignFields: 'Champs étrangers',
invalidDefault: 'Valeur par défaut invalide',
onDelete: 'lors de l\'effacement',
applicationTheme: 'Thème de l\'application',
editorTheme: 'Thème de l\'éditeur',
wrapLongLines: 'Retour à la ligne pour les lignes longues',
selectStatement: 'Sélectionner un état',
triggerStatement: 'Déclencher un état',
sqlSecurity: 'Sécurité SQL',
@@ -241,14 +207,9 @@ export const frFR = {
createNewScheduler: 'Créer un nouveau programmateur',
deleteScheduler: 'Effacer un programmateur',
preserveOnCompletion: 'Préserver à la terminaison',
enableSsl: 'Activer le SSL',
manualValue: 'Valeur manuelle',
tableFiller: 'Remplisseur de table',
fakeDataLanguage: 'Langue des fausses données',
searchForElements: 'Rechercher des éléments',
selectAll: 'Tout sélectionner',
queryDuration: 'Temps de requête',
includeBetaUpdates: 'Inclure les mises à jour beta',
setNull: 'Définir comme NULL',
processesList: 'Liste des processus',
processInfo: 'Information sur le processus',
@@ -257,15 +218,8 @@ export const frFR = {
schemaName: 'Nom du Schéma',
editSchema: 'Modifier le schéma',
deleteSchema: 'Effacer le schéma',
markdownSupported: 'Support du Markdown',
plantATree: 'Planter un arbre',
dataTabPageSize: 'Taille de la page de l\'onglet données',
enableSsh: 'Activer le SSH',
pageNumber: 'Numéro de la page',
duplicateTable: 'Dupliquer la table',
noOpenTabs: 'Il n\'y a pas d\'onglet ouvert, naviguer vers la barre gauche ou :',
noSchema: 'Aucun schéma',
restorePreviousSession: 'Restaurer la session précédente',
runQuery: 'Lancer la requête',
thereAreNoTableFields: 'Il n\'y a pas de champ table',
newTable: 'Nouvelle table',
@@ -278,36 +232,82 @@ export const frFR = {
thereIsNoQueriesYet: 'Il n\'y a pas encore de requête',
searchForQueries: 'Rechercher des requêtes',
killProcess: 'Terminer un processus',
closeTab: 'Fermer un onglet',
exportSchema: 'Exporter un schéma',
importSchema: 'Importer un schéma',
directoryPath: 'chemin du répertoire',
newInsertStmtEvery: 'Nouvelle déclaration d\'insertion tous les',
processingTableExport: 'Traitement {table}',
fetchingTableExport: 'Recherche des données de la table {table}',
writingTableExport: 'Ecriture des données de la table {table}',
checkAllTables: 'Vérification de toutes les tables',
uncheckAllTables: 'Désélectionner toutes les tables',
goToDownloadPage: 'Aller vers la page de téléchargement',
readOnlyMode: 'Mode lecture seule',
killQuery: 'Terminer une requête',
insertRow: 'Insérer une ligne | Insérer des lignes',
commitMode: 'Mode insertion directe',
autoCommit: 'Insertion directe automatique',
manualCommit: 'Insertion directe manuelle',
actionSuccessful: '{action} réussie',
disableFKChecks: 'Désactiver les vérifications de clé étrangère',
formatQuery: 'Formater la requête',
queryHistory: 'Historique de requête',
clearQuery: 'Effacer la requête',
fillCell: 'Remplir la cellule',
executeSelectedQuery: 'Exécuter la requête sélectionnée',
noResultsPresent: 'Aucun résultat présent',
sqlExportOptions: 'Options d\'export SQL',
targetTable: 'Table cible',
switchDatabase: 'Changer la base de données',
importQueryErrors: 'Attention : {n} erreurs se sont produites | Attention: {n} erreurs sont apparues',
executedQueries: '{n} requêtes ont été exécutées | {n} requêtes exécutées',
outputFormat: 'Format de sortie',
singleFile: 'Fichier seul avec l\'extension {ext}',
zipCompressedFile: 'Fichier compréssé avec l\'extension {ext}',
executedQueries: '{n} requêtes ont été exécutées | {n} requêtes exécutées'
},
application: {
settings: 'Paramètres',
general: 'Général',
themes: 'Thèmes',
update: 'Mise à jour',
about: 'À propos',
language: 'Langue',
light: 'Clair',
dark: 'Sombre',
autoCompletion: 'Prédiction Automatique',
application: 'Application',
editor: 'Éditeur',
scratchpad: 'Bloc-notes',
changelog: 'Journal des modifications',
small: 'Petit',
medium: 'Moyen',
large: 'Grand',
console: 'Console',
shortcuts: 'Raccourcis',
appearance: 'Apparence',
color: 'Couleur',
label: 'Libellé',
icon: 'Icône',
madeWithJS: 'Fait avec 💛 et JavaScript !',
checkForUpdates: 'Vérifier les mises à jour',
noUpdatesAvailable: 'Aucune mise à jour disponible',
checkingForUpdate: 'Vérification des mises à jour',
checkFailure: 'La vérification a échoué, veuillez essayer plus tard',
updateAvailable: 'Mise à jour disponible',
downloadingUpdate: 'Téléchargement de la mise à jour',
updateDownloaded: 'Mise à jour téléchargée',
restartToInstall: 'Redémarrer Antares pour installer',
notificationsTimeout: 'Délai d\'attente pour les notifications',
openNewTab: 'Ouvrir un nouvel onglet',
unsavedChanges: 'Modifications non sauvegardées',
discardUnsavedChanges: 'Vous avez des modifications non sauvegardées. En fermant cet onglet, ces modifications seront supprimées.',
applicationTheme: 'Thème de l\'application',
editorTheme: 'Thème de l\'éditeur',
wrapLongLines: 'Retour à la ligne pour les lignes longues',
includeBetaUpdates: 'Inclure les mises à jour beta',
markdownSupported: 'Support du Markdown',
plantATree: 'Planter un arbre',
dataTabPageSize: 'Taille de la page de l\'onglet données',
noOpenTabs: 'Il n\'y a pas d\'onglet ouvert, naviguer vers la barre gauche ou :',
restorePreviousSession: 'Restaurer la session précédente',
closeTab: 'Fermer un onglet',
goToDownloadPage: 'Aller vers la page de téléchargement',
disableBlur: 'Désactiver le flou',
untrustedConnection: 'Connexion non approuvée',
missingOrIncompleteTranslation: 'Traduction manquante ou incomplète?',
findOutHowToContribute: 'Trouver comment contribuer',
disableFKChecks: 'Désactiver les vérifications de clé étrangère',
allConnections: 'Toutes les connexions',
searchForConnections: 'Rechercher des connexions',
disableScratchpad: 'Désactiver le bloc-notes',
reportABug: 'Signaler un bug',
nextTab: 'Onglet suivant',
@@ -327,38 +327,29 @@ export const frFR = {
openSettings: 'Ouvrir les paramètres',
openScratchpad: 'Ouvrir le bloc-notes',
runOrReload: 'Exécuter ou rafraîchir',
formatQuery: 'Formater la requête',
queryHistory: 'Historique de requête',
clearQuery: 'Effacer la requête',
openFilter: 'Ouvrir le filtre',
nextResultsPage: 'Page de résultats suivante',
previousResultsPage: 'Page de résultats précédente',
fillCell: 'Remplir la cellule',
editFolder: 'Editer le dossier',
folderName: 'Nom du dossier',
deleteFolder: 'Supprimer le dossier',
editConnectionAppearance: 'Editer l\'apparence de la connexion',
executeSelectedQuery: 'Exécuter la requête sélectionnée',
defaultCopyType: 'Type de copie par défaut',
showTableSize: 'Afficher la taille de la table dans la barre latérale',
showTableSizeDescription: 'MySQL/MariaDB seulement. Activer cette option peut affecter les performances du schéma sur plusieurs tables.',
searchForSchemas: 'Rechercher des shémas',
searchForElements: 'Rechercher des éléments',
switchSearchMethod: 'Changer la méthode de recherche',
noResultsPresent: 'Aucun résultat présent',
sqlExportOptions: 'Options d\'export SQL',
targetTable: 'Table cible',
phpArray: 'Tableau PHP',
closeAllTabs: 'Fermer tous les onglets',
closeOtherTabs: 'Fermer les autres onglets',
closeTabsToLeft: 'Fermer les onglets à gauche',
closeTabsToRight: 'Fermer les onglets à droite',
switchDatabase: 'Changer la base de données',
csvExportOptions: 'Options d\'export CSV',
csvFieldDelimiter: 'Délimiteur de champ',
csvLinesTerminator: 'Fin de ligne',
csvStringDelimiter: 'Séparateur',
csvIncludeHeader: 'Inclure l\'en-tête',
scratchPadDefaultValue: '# COMMENT SOUTENIR ANTARES\n\n- [ ] Laissez une etoile à Antares [GitHub repo](https://github.com/antares-sql/antares)\n- [ ] Envoyez vos avis et conseils\n- [ ] Signalez les bugs\n- [ ] Si vous l\'appréciez, partagez Antares avec des amis\n\n# A PROPOS DU BLOC-NOTES\n\nCeci est un bloc-notes où vous pouvez sauvegarder vos **notes personnelles**. Il supporte le format `markdown`, mais vous êtes libre d\'utiliser du texte standard.\nCe contenu est juste un modèle, vous pouvez a tout moment l\'effacer pour le remplacer par vos notes.\n'
csvExportOptions: 'Options d\'export CSV',
phpArray: 'Tableau PHP'
},
faker: {
address: 'Adresse',

View File

@@ -1,5 +1,5 @@
export const idID = {
word: {
general: {
edit: 'Ubah',
save: 'Simpan',
close: 'Tutup',
@@ -7,6 +7,63 @@ export const idID = {
confirm: 'Iya',
cancel: 'Batal',
send: 'Kirim',
refresh: 'Segarkan',
autoRefresh: 'Segarkan otomatis',
version: 'Versi',
donate: 'Donasi',
run: 'Jalankan',
results: 'Hasil',
size: 'Ukuran',
mimeType: 'Tipe Mime',
download: 'Unduh',
add: 'Tambahkan',
data: 'Data',
properties: 'Properti',
insert: 'Masukan',
name: 'Nama',
clear: 'Jernih',
seconds: 'Detik',
options: 'Pilihan',
discard: 'Membuang',
stay: 'Tinggal',
author: 'Pengarang',
upload: 'Mengunggah',
browse: 'Jelajahi',
content: 'Isi',
cut: 'Potong',
copy: 'Salin',
paste: 'Tempel',
tools: 'Peralatan',
format: 'Format',
all: 'Semua',
duplicate: 'Duplikat',
new: 'Baru',
history: 'Histori',
select: 'Pilih',
filter: 'Saring',
change: 'Mengubah',
includes: 'Termasuk',
completed: 'Selesai',
aborted: 'Dibatalkan',
disabled: 'Dinonaaktivkan',
enable: 'Aktifkan',
disable: 'Nonaktifkan',
contributors: 'Kontributor',
pin: 'Pin',
unpin: 'Unpin',
folder: 'Folder | Folder',
deleteConfirm: 'Apakah Anda mengkonfirmasi pembatalan',
uploadFile: 'Unggah data',
manualValue: 'Nilai manual',
selectAll: 'Pilih Semua',
pageNumber: 'Nomor halaman',
directoryPath: 'Jalur direktori',
actionSuccessful: '{aksi} berhasil',
outputFormat: 'Format keluaran',
singleFile: 'File {ext} tunggal',
zipCompressedFile: 'File {ext} terkompresi ZIP'
},
connection: {
connectionName: 'Nama Koneksi',
client: 'Klien',
hostName: 'Nama Host',
@@ -18,39 +75,38 @@ export const idID = {
connected: 'Tersambung',
disconnect: 'Putuskan',
disconnected: 'Terputus',
refresh: 'Segarkan',
settings: 'Pengaturan',
general: 'Umum',
themes: 'Tema',
update: 'Memperbarui',
about: 'Tentang',
language: 'Bahasa',
version: 'Versi',
donate: 'Donasi',
run: 'Jalankan',
ssl: 'SSL',
privateKey: 'Kunci pribadi',
certificate: 'Sertifikat',
caCertificate: 'Sertifikat CA',
ciphers: 'Chipher',
sshTunnel: 'Tunel SSH',
passphrase: 'Frasa sandi',
connectionString: 'Rangkaian sambungan',
addConnection: 'Tambahkan koneksi',
createConnection: 'Buat koneksi',
createNewConnection: 'Buat koneksi baru',
askCredentials: 'Mintalah kredensial',
testConnection: 'Tes koneksi',
editConnection: 'Mengedit koneksi',
deleteConnection: 'Hapus koneksi',
connectionSuccessfullyMade: 'Sambungan berhasil dibuat!',
enableSsl: 'Aktifkan SSL',
enableSsh: 'Aktifkan SSH',
readOnlyMode: 'Mode hanya baca',
untrustedConnection: 'Koneksi tidak tepercaya',
allConnections: 'Semua koneksi',
searchForConnections: 'Cari koneksi'
},
database: {
schema: 'Skema',
results: 'Hasil',
size: 'Ukuran',
seconds: 'Detik',
type: 'Jenis',
mimeType: 'Tipe Mime',
download: 'Unduh',
add: 'Tambahkan',
data: 'Data',
properties: 'Properti',
insert: 'Masukan',
connecting: 'Menghubungkan',
name: 'Nama',
collation: 'Kolasi',
clear: 'Jernih',
options: 'Pilihan',
autoRefresh: 'Segarkan otomatis',
indexes: 'Indeks',
foreignKeys: 'Foreign Key',
length: 'Panjangnya',
unsigned: 'Unsigned',
default: 'Bawaan',
comment: 'Komentar',
collation: 'Kolasi',
key: 'Key | Keys',
order: 'Urutan',
expression: 'Ekspresi',
@@ -60,15 +116,8 @@ export const idID = {
approximately: 'Sekitar',
total: 'Total',
table: 'Tabel',
discard: 'Membuang',
stay: 'Tinggal',
author: 'Pengarang',
light: 'Terang',
dark: 'Gelap',
autoCompletion: 'Penyelesaian Otomatis',
application: 'Aplikasi',
editor: 'Editor',
view: 'Melihat',
indexes: 'Indeks',
definer: 'Definisi',
algorithm: 'Algoritma',
trigger: 'Trigger | Trigger',
@@ -87,99 +136,24 @@ export const idID = {
execution: 'Eksekusi',
starts: 'Mulai',
ends: 'Berakhir',
ssl: 'SSL',
privateKey: 'Kunci pribadi',
certificate: 'Sertifikat',
caCertificate: 'Sertifikat CA',
ciphers: 'Chipher',
upload: 'Mengunggah',
browse: 'Jelajahi',
faker: 'Pemalsu',
content: 'Isi',
cut: 'Potong',
copy: 'Salin',
paste: 'Tempel',
tools: 'Peralatan',
variables: 'Variabel',
processes: 'Proses',
database: 'Basis data',
scratchpad: 'Papan penggaris',
array: 'Array',
changelog: 'Changelog',
format: 'Format',
sshTunnel: 'Tunel SSH',
structure: 'Struktur',
small: 'Kecil',
medium: 'Sedang',
large: 'Besar',
row: 'Baris | Baris',
cell: 'Sel | Sel',
triggerFunction: 'Fungsi trigger | Fungsi trigger',
all: 'Semua',
duplicate: 'Duplikat',
routine: 'Rutin',
new: 'Baru',
history: 'Histori',
select: 'Pilih',
passphrase: 'Frasa sandi',
filter: 'Saring',
change: 'Mengubah',
views: 'Tampilan',
triggers: 'Pemicu',
routines: 'Rutinitas',
functions: 'Fungsi',
schedulers: 'Penjadwal',
includes: 'Termasuk',
drop: 'Menjatuhkan',
completed: 'Selesai',
aborted: 'Dibatalkan',
disabled: 'Dinonaaktivkan',
enable: 'Aktifkan',
disable: 'Nonaktifkan',
commit: 'Komit',
rollback: 'Kembalikan',
connectionString: 'Rangkaian sambungan',
contributors: 'Kontributor',
pin: 'Pin',
unpin: 'Unpin',
console: 'Konsol',
shortcuts: 'Shortcut',
folder: 'Folder | Folder',
appearance: 'Appearance',
color: 'Color',
label: 'Label',
icon: 'Icon'
},
message: {
appWelcome: 'Selamat datang di Antares SQL Client!',
appFirstStep: 'Langkah pertama Anda: buat koneksi database baru.',
addConnection: 'Tambahkan koneksi',
createConnection: 'Buat koneksi',
createNewConnection: 'Buat koneksi baru',
askCredentials: 'Mintalah kredensial',
testConnection: 'Tes koneksi',
editConnection: 'Mengedit koneksi',
deleteConnection: 'Hapus koneksi',
deleteConfirm: 'Apakah Anda mengkonfirmasi pembatalan',
connectionSuccessfullyMade: 'Sambungan berhasil dibuat!',
madeWithJS: 'Dibuat dengan 💛 dan JavaScript!',
checkForUpdates: 'Periksa pembaruan',
noUpdatesAvailable: 'Tidak ada pembaruan yang tersedia',
checkingForUpdate: 'Memeriksa pembaruan',
checkFailure: 'Pemeriksaan gagal, coba lagi nanti',
updateAvailable: 'Pembaruan tersedia',
downloadingUpdate: 'Mengunduh pembaruan',
updateDownloaded: 'Pembaruan diunduh',
restartToInstall: 'Mulai ulang Antares untuk menginstal',
drop: 'Menjatuhkan',
unableEditFieldWithoutPrimary: 'Tidak dapat mengedit bidang tanpa kunci utama di kumpulan hasil',
editCell: 'Mengedit sel',
deleteRows: 'Hapus baris | Hapus {count} baris',
confirmToDeleteRows: 'Apakah Anda mengonfirmasi untuk menghapus satu baris? | Apakah Anda mengonfirmasi untuk menghapus {count} baris?',
notificationsTimeout: 'Batas waktu pemberitahuan',
uploadFile: 'Unggah data',
addNewRow: 'Tambahkan baris baru',
numberOfInserts: 'Jumlah sisipan',
openNewTab: 'Buka tab baru',
affectedRows: 'Baris yang terpengaruh',
createNewDatabase: 'Buat Basis Data baru',
databaseName: 'Nama basis data',
@@ -201,8 +175,6 @@ export const idID = {
emptyTable: 'Kosongkan Tabel',
deleteTable: 'Hapus tabel',
emptyConfirm: 'Apakah Anda mengkonfirmasi untuk mengosongkan',
unsavedChanges: 'Perubahan belum disimpan',
discardUnsavedChanges: 'Anda memiliki beberapa perubahan yang belum disimpan. Dengan menutup tab ini akan membuang perubahan',
thereAreNoIndexes: 'Tidak ada indeks',
thereAreNoForeign: 'Tidak ada kunci asing',
createNewForeign: 'Buat kunci asing baru',
@@ -211,9 +183,6 @@ export const idID = {
foreignFields: 'Bidang asing',
invalidDefault: 'Standar tidak valid',
onDelete: 'Saat hapus',
applicationTheme: 'Tema Aplikasi',
editorTheme: 'Tema Editor',
wrapLongLines: 'Bungkus garis panjang',
selectStatement: 'Pilih pernyataan',
triggerStatement: 'Pernyataan pemicu',
sqlSecurity: 'keamanan SQL',
@@ -236,14 +205,9 @@ export const idID = {
createNewScheduler: 'Buat penjadwal baru',
deleteScheduler: 'Hapus penjadwal',
preserveOnCompletion: 'Pertahankan saat selesai',
enableSsl: 'Aktifkan SSL',
manualValue: 'Nilai manual',
tableFiller: 'Pengisi Tabel',
fakeDataLanguage: 'Bahasa data palsu',
searchForElements: 'Cari elemen',
selectAll: 'Pilih Semua',
queryDuration: 'Durasi kueri',
includeBetaUpdates: 'Sertakan pembaruan beta',
setNull: 'Tetapkan NULL',
processesList: 'Daftar proses',
processInfo: 'Info proses',
@@ -252,15 +216,8 @@ export const idID = {
schemaName: 'Nama skema',
editSchema: 'Edit skema',
deleteSchema: 'Hapus skema',
markdownSupported: 'Markdown didukung',
plantATree: 'Menanam pohon',
dataTabPageSize: 'Ukuran halaman tab DATA',
enableSsh: 'Aktifkan SSH',
pageNumber: 'Nomor halaman',
duplicateTable: 'Duplikat Tabel',
noOpenTabs: 'Tidak ada tab terbuka, navigasikan di bilah kiri atau:',
noSchema: 'Tidak ada skema',
restorePreviousSession: 'Kembalikan sesi sebelumnya',
runQuery: 'Jalankan kueri',
thereAreNoTableFields: 'Tidak ada bidang tabel',
newTable: 'Tabel baru',
@@ -273,36 +230,78 @@ export const idID = {
thereIsNoQueriesYet: 'Belum ada kueri',
searchForQueries: 'Telusuri kueri',
killProcess: 'Membunuh proses',
closeTab: 'Tutup tab',
exportSchema: 'Skema ekspor',
importSchema: 'Skema impor',
directoryPath: 'Jalur direktori',
newInsertStmtEvery: 'Pernyataan INSERT baru setiap',
processingTableExport: 'Memproses {table}',
fetchingTableExport: 'Mengambil data {table}',
writingTableExport: 'Menulis data {table} ',
checkAllTables: 'Periksa semua tabel',
uncheckAllTables: 'Hapus centang semua tabel',
goToDownloadPage: 'Buka halaman unduh',
readOnlyMode: 'Mode hanya baca',
killQuery: 'Bunuh kueri',
insertRow: 'Sisipkan baris | Sisipkan baris',
commitMode: 'Mode komit',
autoCommit: 'Komit otomatis',
manualCommit: 'Komit manual',
actionSuccessful: '{aksi} berhasil',
disableFKChecks: 'Nonaktifkan pemeriksaan kunci asing',
formatQuery: 'Format query',
queryHistory: 'Histori query',
clearQuery: 'Bersihkan query',
fillCell: 'Isi sel',
executeSelectedQuery: 'Eksekusi query yang dipilih',
importQueryErrors: 'Peringatan: {n} kesalahan telah terjadi | Peringatan: {n} kesalahan telah terjadi',
executedQueries: '{n} permintaan dieksekusi | {n} permintaan dieksekusi',
outputFormat: 'Format keluaran',
singleFile: 'File {ext} tunggal',
zipCompressedFile: 'File {ext} terkompresi ZIP',
executedQueries: '{n} permintaan dieksekusi | {n} permintaan dieksekusi'
},
application: {
settings: 'Pengaturan',
general: 'Umum',
themes: 'Tema',
update: 'Memperbarui',
about: 'Tentang',
language: 'Bahasa',
light: 'Terang',
dark: 'Gelap',
autoCompletion: 'Penyelesaian Otomatis',
application: 'Aplikasi',
editor: 'Editor',
scratchpad: 'Papan penggaris',
changelog: 'Changelog',
small: 'Kecil',
medium: 'Sedang',
large: 'Besar',
console: 'Konsol',
shortcuts: 'Shortcut',
appearance: 'Appearance',
color: 'Color',
label: 'Label',
icon: 'Icon',
madeWithJS: 'Dibuat dengan 💛 dan JavaScript!',
checkForUpdates: 'Periksa pembaruan',
noUpdatesAvailable: 'Tidak ada pembaruan yang tersedia',
checkingForUpdate: 'Memeriksa pembaruan',
checkFailure: 'Pemeriksaan gagal, coba lagi nanti',
updateAvailable: 'Pembaruan tersedia',
downloadingUpdate: 'Mengunduh pembaruan',
updateDownloaded: 'Pembaruan diunduh',
restartToInstall: 'Mulai ulang Antares untuk menginstal',
notificationsTimeout: 'Batas waktu pemberitahuan',
openNewTab: 'Buka tab baru',
unsavedChanges: 'Perubahan belum disimpan',
discardUnsavedChanges: 'Anda memiliki beberapa perubahan yang belum disimpan. Dengan menutup tab ini akan membuang perubahan',
applicationTheme: 'Tema Aplikasi',
editorTheme: 'Tema Editor',
wrapLongLines: 'Bungkus garis panjang',
includeBetaUpdates: 'Sertakan pembaruan beta',
markdownSupported: 'Markdown didukung',
plantATree: 'Menanam pohon',
dataTabPageSize: 'Ukuran halaman tab DATA',
noOpenTabs: 'Tidak ada tab terbuka, navigasikan di bilah kiri atau:',
restorePreviousSession: 'Kembalikan sesi sebelumnya',
closeTab: 'Tutup tab',
goToDownloadPage: 'Buka halaman unduh',
disableBlur: 'Nonaktifkan buram',
untrustedConnection: 'Koneksi tidak tepercaya',
missingOrIncompleteTranslation: 'Terjemahan hilang atau tidak lengkap?',
findOutHowToContribute: 'Cari tahu cara berkontribusi',
disableFKChecks: 'Nonaktifkan pemeriksaan kunci asing',
allConnections: 'Semua koneksi',
searchForConnections: 'Cari koneksi',
disableScratchpad: 'Nonaktifkan papan tulis',
reportABug: 'Laporkan bug',
nextTab: 'Tab setelahnya',
@@ -322,19 +321,15 @@ export const idID = {
openSettings: 'Buka Pengaturan',
openScratchpad: 'Buka scratchpad',
runOrReload: 'Jalankan atau reload',
formatQuery: 'Format query',
queryHistory: 'Histori query',
clearQuery: 'Bersihkan query',
openFilter: 'Buka filter',
nextResultsPage: 'Next results page',
previousResultsPage: 'Previous results page',
fillCell: 'Isi sel',
editFolder: 'Ubah folder',
folderName: 'Nama folder',
deleteFolder: 'Hapus folder',
editConnectionAppearance: 'Ubah connection appearance',
executeSelectedQuery: 'Eksekusi query yang dipilih',
defaultCopyType: 'Jenis salin default'
defaultCopyType: 'Jenis salin default',
searchForElements: 'Cari elemen'
},
faker: {
address: 'Alamat',

View File

@@ -13,6 +13,8 @@ import { ruRU } from './ru-RU';
import { idID } from './id-ID';
import { koKR } from './ko-KR';
import { nlNL } from './nl-NL';
import { caES } from './ca-ES';
import { csCZ } from './cs-CZ';
const messages = {
'en-US': enUS,
'it-IT': itIT,
@@ -27,7 +29,9 @@ const messages = {
'ru-RU': ruRU,
'id-ID': idID,
'ko-KR': koKR,
'nl-NL': nlNL
'nl-NL': nlNL,
'ca-ES': caES,
'cs-CZ': csCZ,
};
type NestedPartial<T> = {

View File

@@ -1,5 +1,5 @@
export const itIT = {
word: {
general: {
edit: 'Modifica',
save: 'Salva',
close: 'Chiudi',
@@ -7,6 +7,63 @@ export const itIT = {
confirm: 'Conferma',
cancel: 'Annulla',
send: 'Invia',
refresh: 'Aggiorna',
autoRefresh: 'Auto-aggiorna',
version: 'Versione',
donate: 'Dona',
run: 'Esegui',
results: 'Risultati',
size: 'Dimensioni',
mimeType: 'Mime-Type',
download: 'Scarica',
add: 'Aggiungi',
data: 'Dati',
properties: 'Proprietà',
insert: 'Inserisci',
name: 'Nome',
clear: 'Scarta',
seconds: 'Secondi',
options: 'Opzioni',
discard: 'Scarta',
stay: 'Resta',
author: 'Autore',
upload: 'Carica',
browse: 'Sfoglia',
content: 'Contenuto',
cut: 'Taglia',
copy: 'Copia',
paste: 'Incolla',
tools: 'Strumenti',
format: 'Formatta',
all: 'Tutto',
duplicate: 'Duplica',
new: 'Nuovo',
history: 'Cronologia',
select: 'Seleziona',
filter: 'Filtra',
change: 'Cambia',
includes: 'Includi',
completed: 'Completato',
aborted: 'Annullato',
disabled: 'Disabilitato',
enable: 'Abilita',
disable: 'Disabilita',
contributors: 'Contributori',
pin: 'Fissa',
unpin: 'Sgancia',
folder: 'Cartella | Cartelle',
deleteConfirm: 'Confermi l\'eliminazione di',
uploadFile: 'Carica file',
manualValue: 'Valore manuale',
selectAll: 'Seleziona tutto',
pageNumber: 'Numero pagina',
directoryPath: 'Percorso directory',
actionSuccessful: '{action} riuscito',
outputFormat: 'Formato output',
singleFile: 'Singolo file {ext}',
zipCompressedFile: 'File {ext} zippato'
},
connection: {
connectionName: 'Nome connessione',
client: 'Client',
hostName: 'Nome host',
@@ -18,39 +75,38 @@ export const itIT = {
connected: 'Connesso',
disconnect: 'Disconnetti',
disconnected: 'Disconnesso',
refresh: 'Aggiorna',
settings: 'Impostazioni',
general: 'Generale',
themes: 'Temi',
update: 'Aggiorna',
about: 'Informazioni',
language: 'Lingua',
version: 'Versione',
donate: 'Dona',
run: 'Esegui',
ssl: 'SSL',
privateKey: 'Chiave privata',
certificate: 'Certificato',
caCertificate: 'Certificato CA',
ciphers: 'Ciphers',
sshTunnel: 'SSH tunnel',
passphrase: 'Passphrase',
connectionString: 'Connection string',
addConnection: 'Aggiungi connessione',
createConnection: 'Crea connessione',
createNewConnection: 'Crea nuova connessione',
askCredentials: 'Chiedi credenziali',
testConnection: 'Testa connessione',
editConnection: 'Modifica connessione',
deleteConnection: 'Elimina connessione',
connectionSuccessfullyMade: 'Connessione avvenuta con successo!',
enableSsl: 'Abilita SSL',
enableSsh: 'Abilita SSH',
readOnlyMode: 'Modalità sola lettura',
untrustedConnection: 'Connessione non affidabile',
allConnections: 'Tutte le connessioni',
searchForConnections: 'Cerca una connessione'
},
database: {
schema: 'Schema',
results: 'Risultati',
size: 'Dimensioni',
seconds: 'Secondi',
type: 'Tipo',
mimeType: 'Mime-Type',
download: 'Scarica',
add: 'Aggiungi',
data: 'Dati',
properties: 'Proprietà',
insert: 'Inserisci',
connecting: 'Connessione in corso',
name: 'Nome',
collation: 'Confronto',
clear: 'Scarta',
options: 'Opzioni',
autoRefresh: 'Auto-aggiorna',
indexes: 'Indici',
foreignKeys: 'Chiavi esterne',
length: 'Lunghezza',
unsigned: 'Senza segno',
default: 'Default',
comment: 'Commento',
collation: 'Confronto',
key: 'Chiave | Chiavi',
order: 'Ordine',
expression: 'Espressione',
@@ -60,15 +116,8 @@ export const itIT = {
approximately: 'Approssimativamente',
total: 'Totali',
table: 'Tabella',
discard: 'Scarta',
stay: 'Resta',
author: 'Autore',
light: 'Chiaro',
dark: 'Scuro',
autoCompletion: 'Auto Completamento',
application: 'Applicazione',
editor: 'Editor',
view: 'Vista',
indexes: 'Indici',
definer: 'Definer',
algorithm: 'Algoritmo',
trigger: 'Trigger | Triggers',
@@ -87,100 +136,25 @@ export const itIT = {
execution: 'Esecuzione',
starts: 'Inizia',
ends: 'Finisce',
ssl: 'SSL',
privateKey: 'Chiave privata',
certificate: 'Certificato',
caCertificate: 'Certificato CA',
ciphers: 'Ciphers',
upload: 'Carica',
browse: 'Sfoglia',
faker: 'Faker',
content: 'Contenuto',
cut: 'Taglia',
copy: 'Copia',
paste: 'Incolla',
tools: 'Strumenti',
variables: 'Variabili',
processes: 'Processi',
database: 'Database',
scratchpad: 'Blocco appunti',
array: 'Array',
changelog: 'Changelog',
format: 'Formatta',
sshTunnel: 'SSH tunnel',
structure: 'Structure',
small: 'Piccolo',
medium: 'Medio',
large: 'Largo',
row: 'Riga | Righe',
cell: 'Cella | Celle',
triggerFunction: 'Funzione di trigger | Funzioni di trigger',
all: 'Tutto',
duplicate: 'Duplica',
routine: 'Routine',
new: 'Nuovo',
history: 'Cronologia',
select: 'Seleziona',
passphrase: 'Passphrase',
filter: 'Filtra',
change: 'Cambia',
views: 'Viste',
triggers: 'Trigger',
routines: 'Routine',
functions: 'Function',
schedulers: 'Scheduler',
includes: 'Includi',
drop: 'Drop',
completed: 'Completato',
aborted: 'Annullato',
disabled: 'Disabilitato',
enable: 'Abilita',
disable: 'Disabilita',
commit: 'Commit',
rollback: 'Rollback',
connectionString: 'Connection string',
contributors: 'Contributori',
pin: 'Fissa',
unpin: 'Sgancia',
console: 'Console',
shortcuts: 'Scorciatoie',
folder: 'Cartella | Cartelle',
appearance: 'Aspetto',
color: 'Colore',
label: 'Etichetta',
icon: 'Icona',
resultsTable: 'Tabella risultati'
},
message: {
appWelcome: 'Benvenuto in Antares SQL Client!',
appFirstStep: 'Primo step: crea una nuova connessione.',
addConnection: 'Aggiungi connessione',
createConnection: 'Crea connessione',
createNewConnection: 'Crea nuova connessione',
askCredentials: 'Chiedi credenziali',
testConnection: 'Testa connessione',
editConnection: 'Modifica connessione',
deleteConnection: 'Elimina connessione',
deleteConfirm: 'Confermi l\'eliminazione di',
connectionSuccessfullyMade: 'Connessione avvenuta con successo!',
madeWithJS: 'Fatto con 💛 e JavaScript!',
checkForUpdates: 'Cerca aggiornamenti',
noUpdatesAvailable: 'Nessun aggiornamento disponibile',
checkingForUpdate: 'Controllo aggiornamenti in corso',
checkFailure: 'Controllo fallito, riprova più tardi',
updateAvailable: 'Aggiornamento disponibile',
downloadingUpdate: 'Download dell\'aggiornamento',
updateDownloaded: 'Aggiornamento scaricato',
restartToInstall: 'Riavvia Antares per installare l\'aggiornamento',
resultsTable: 'Tabella risultati',
drop: 'Drop',
unableEditFieldWithoutPrimary: 'Impossibile modificare il campo senza una primary key nel resultset',
editCell: 'Modifica cella',
deleteRows: 'Elimina riga | Elimina {count} righe',
confirmToDeleteRows: 'Confermi di voler cancellare una riga? | Confermi di voler cancellare {count} righe?',
notificationsTimeout: 'Timeout Notifiche',
uploadFile: 'Carica file',
addNewRow: 'Aggiungi nuova riga',
numberOfInserts: 'Numero di insert',
openNewTab: 'Apri nuova scheda',
affectedRows: 'Righe interessate',
createNewDatabase: 'Crea nuovo database',
databaseName: 'Nome database',
@@ -202,8 +176,6 @@ export const itIT = {
emptyTable: 'Svuota tabella',
deleteTable: 'Cancella tabella',
emptyConfirm: 'Confermi di voler svuotare',
unsavedChanges: 'Modifiche non salvate',
discardUnsavedChanges: 'Hai modifiche non salvate. Lasciando questa scheda le modifiche saranno scartate.',
thereAreNoIndexes: 'Non ci sono indici',
thereAreNoForeign: 'Non ci sono chiavi esterne',
createNewForeign: 'Crea nuova chiave esterna',
@@ -212,9 +184,6 @@ export const itIT = {
foreignFields: 'Campi esterni',
invalidDefault: 'Default non valido',
onDelete: 'All\'eliminazione',
applicationTheme: 'Tema applicazione',
editorTheme: 'Tema editor',
wrapLongLines: 'A capo righe lunghe',
selectStatement: 'Dichiarazione select',
triggerStatement: 'Dichiarazione trigger',
sqlSecurity: 'Sicurezza SQL',
@@ -237,14 +206,9 @@ export const itIT = {
createNewScheduler: 'Crea nuovo scheduler',
deleteScheduler: 'Elimina scheduler',
preserveOnCompletion: 'Preserva al completamento',
enableSsl: 'Abilita SSL',
manualValue: 'Valore manuale',
tableFiller: 'Riempitore Tabella',
fakeDataLanguage: 'Lingua dati falsi',
searchForElements: 'Cerca elementi',
selectAll: 'Seleziona tutto',
queryDuration: 'Durata query',
includeBetaUpdates: 'Includi aggiornamenti beta',
setNull: 'Imposta NULL',
processesList: 'Lista processi',
processInfo: 'Info processo',
@@ -253,15 +217,8 @@ export const itIT = {
schemaName: 'Nome schema',
editSchema: 'Modifica schema',
deleteSchema: 'Elimina schema',
markdownSupported: 'Markdown supportato',
plantATree: 'Pianta un albero',
dataTabPageSize: 'Grandezza pagina tab DATI',
enableSsh: 'Abilita SSH',
pageNumber: 'Numero pagina',
duplicateTable: 'Duplica tabella',
noOpenTabs: 'Non ci sono tab aperte, naviga nella barra sinistra o:',
noSchema: 'Nessuno schema',
restorePreviousSession: 'Ripristina sessione precedente',
runQuery: 'Esegui query',
thereAreNoTableFields: 'Non ci sono campi della tabella',
newTable: 'Nuova tabella',
@@ -274,36 +231,79 @@ export const itIT = {
thereIsNoQueriesYet: 'Non ci sono ancora query',
searchForQueries: 'Cerca query',
killProcess: 'Uccidi processo',
closeTab: 'Chiudi tab',
exportSchema: 'Esporta schema',
importSchema: 'Importa schema',
directoryPath: 'Percorso directory',
newInsertStmtEvery: 'Nuova istruzione INSERT ogni',
processingTableExport: 'Processo {table}',
fetchingTableExport: 'Ricavo i dati {table}',
writingTableExport: 'Scrittura dati {table}',
checkAllTables: 'Seleziona tutte le tabelle',
uncheckAllTables: 'Deseleziona tutte le tabelle',
goToDownloadPage: 'Vai alla pagina di download',
readOnlyMode: 'Modalità sola lettura',
killQuery: 'Interrompi query',
insertRow: 'Inserisci riga | Inserisci righe',
commitMode: 'Modalità commit',
autoCommit: 'Auto commit',
manualCommit: 'Commit manuale',
actionSuccessful: '{action} riuscito',
disableFKChecks: 'DIsabilita controllo foreigh key',
formatQuery: 'Formatta query',
queryHistory: 'Cronologia query',
clearQuery: 'Pulisci query',
fillCell: 'Riempi cella',
executeSelectedQuery: 'Esegui la query selezionata',
noResultsPresent: 'Nessun risultato presente',
importQueryErrors: 'Attenzione: si è verificato un errore | Attenzione si sono verificati {n} errori',
executedQueries: '{n} query eseguite | {n} query eseguite',
outputFormat: 'Formato output',
singleFile: 'Singolo file {ext}',
zipCompressedFile: 'File {ext} zippato',
executedQueries: '{n} query eseguite | {n} query eseguite'
},
application: {
settings: 'Impostazioni',
general: 'Generale',
themes: 'Temi',
update: 'Aggiorna',
about: 'Informazioni',
language: 'Lingua',
light: 'Chiaro',
dark: 'Scuro',
autoCompletion: 'Auto Completamento',
application: 'Applicazione',
editor: 'Editor',
scratchpad: 'Blocco appunti',
changelog: 'Changelog',
small: 'Piccolo',
medium: 'Medio',
large: 'Largo',
console: 'Console',
shortcuts: 'Scorciatoie',
appearance: 'Aspetto',
color: 'Colore',
label: 'Etichetta',
icon: 'Icona',
madeWithJS: 'Fatto con 💛 e JavaScript!',
checkForUpdates: 'Cerca aggiornamenti',
noUpdatesAvailable: 'Nessun aggiornamento disponibile',
checkingForUpdate: 'Controllo aggiornamenti in corso',
checkFailure: 'Controllo fallito, riprova più tardi',
updateAvailable: 'Aggiornamento disponibile',
downloadingUpdate: 'Download dell\'aggiornamento',
updateDownloaded: 'Aggiornamento scaricato',
restartToInstall: 'Riavvia Antares per installare l\'aggiornamento',
notificationsTimeout: 'Timeout Notifiche',
openNewTab: 'Apri nuova scheda',
unsavedChanges: 'Modifiche non salvate',
discardUnsavedChanges: 'Hai modifiche non salvate. Lasciando questa scheda le modifiche saranno scartate.',
applicationTheme: 'Tema applicazione',
editorTheme: 'Tema editor',
wrapLongLines: 'A capo righe lunghe',
includeBetaUpdates: 'Includi aggiornamenti beta',
markdownSupported: 'Markdown supportato',
plantATree: 'Pianta un albero',
dataTabPageSize: 'Grandezza pagina tab DATI',
noOpenTabs: 'Non ci sono tab aperte, naviga nella barra sinistra o:',
restorePreviousSession: 'Ripristina sessione precedente',
closeTab: 'Chiudi tab',
goToDownloadPage: 'Vai alla pagina di download',
disableBlur: 'Disabilita sfocatura',
untrustedConnection: 'Connessione non affidabile',
missingOrIncompleteTranslation: 'Traduzione mancante o incompleta?',
findOutHowToContribute: 'Scopri come contribuire',
disableFKChecks: 'DIsabilita controllo foreigh key',
allConnections: 'Tutte le connessioni',
searchForConnections: 'Cerca una connessione',
disableScratchpad: 'Disabilita scratchpad',
reportABug: 'Segnala un bug',
nextTab: 'Prossima tab',
@@ -323,24 +323,19 @@ export const itIT = {
openSettings: 'Apri le impostazioni',
openScratchpad: 'Apri lo scratchpad',
runOrReload: 'Esegui o ricarica',
formatQuery: 'Formatta query',
queryHistory: 'Cronologia query',
clearQuery: 'Pulisci query',
openFilter: 'Apri il filtro',
nextResultsPage: 'Prossima pagina risultati',
previousResultsPage: 'Pagina risultati precedente',
fillCell: 'Riempi cella',
editFolder: 'Modifica cartella',
folderName: 'Nome cartella',
deleteFolder: 'Cancella cartella',
editConnectionAppearance: 'Modifica aspetto connessione',
executeSelectedQuery: 'Esegui la query selezionata',
defaultCopyType: 'Tipo di copia default',
showTableSize: 'Mostra dimensioni tabella nella sidebar',
showTableSizeDescription: 'Solo MySQL/MariaDB. Abilitare questa opzione può compromettere le performance in schemi con molte tabelle.',
searchForSchemas: 'Cerca schemi',
switchSearchMethod: 'Cambia metodo di ricerca',
noResultsPresent: 'Nessun risultato presente'
searchForElements: 'Cerca elementi',
switchSearchMethod: 'Cambia metodo di ricerca'
},
faker: {
address: 'Indirizzo',

View File

@@ -1,5 +1,5 @@
export const jaJP = {
word: {
general: {
edit: '編集',
save: '保存',
close: '閉じる',
@@ -7,6 +7,45 @@ export const jaJP = {
confirm: '確認',
cancel: 'キャンセル',
send: '送信',
refresh: 'リフレッシュ',
autoRefresh: 'オートリフレシュ',
version: 'バージョン',
donate: '寄付する',
run: '実行',
results: '結果',
size: 'サイズ',
mimeType: 'マイムタイプ',
download: 'ダウンロード',
add: '追加',
data: 'データ',
properties: 'プロパティ',
insert: '挿入',
name: '名称',
clear: 'クリア',
seconds: '秒数',
options: 'オプション',
discard: '破棄',
stay: 'ステイ',
author: '作者',
upload: 'アップロード',
browse: '閲覧',
content: 'コンテンツ',
cut: 'カット',
copy: 'コピー',
paste: '貼り付け',
tools: 'ツール',
format: 'フォーマット',
all: 'すべて',
duplicate: 'デュプリケート',
history: '履歴',
select: '選択',
deleteConfirm: 'のキャンセルを確認しますか?',
uploadFile: 'ファイルのアップロード',
manualValue: 'マニュアル値',
selectAll: 'すべてを選択する',
pageNumber: 'ページ番号'
},
connection: {
connectionName: '接続名',
client: 'クライアント',
hostName: 'ホスト名',
@@ -18,39 +57,32 @@ export const jaJP = {
connected: '接続中',
disconnect: '接続解除',
disconnected: '接続解除',
refresh: 'リフレッシュ',
settings: '設定',
general: '一般',
themes: 'テーマ',
update: '更新情報',
// about: 'お問い合わせ',
language: '言語',
version: 'バージョン',
donate: '寄付する',
run: '実行',
ssl: 'SSL',
privateKey: '秘密鍵',
certificate: '証明書',
caCertificate: 'CA 証明書',
ciphers: '暗号',
sshTunnel: 'SSH トンネル',
addConnection: '接続の追加',
createConnection: '接続の作成',
createNewConnection: '新しい接続の作成',
askCredentials: '認証情報の入力',
testConnection: '接続のテスト',
editConnection: '接続の編集',
deleteConnection: '接続の削除',
connectionSuccessfullyMade: '接続に成功しました。',
enableSsl: 'SSL 対応',
enableSsh: 'SSH を有効にする'
},
database: {
schema: 'スキーマ',
results: '結果',
size: 'サイズ',
seconds: '秒数',
type: 'タイプ',
mimeType: 'マイムタイプ',
download: 'ダウンロード',
add: '追加',
data: 'データ',
properties: 'プロパティ',
insert: '挿入',
connecting: '接続',
name: '名称',
collation: '照合',
clear: 'クリア',
options: 'オプション',
autoRefresh: 'オートリフレシュ',
indexes: 'インデックス',
foreignKeys: '外部キー',
length: '長さ',
unsigned: '符号なし',
default: 'デフォルト',
comment: 'コメント',
collation: '照合',
key: 'キー | キー',
order: '順序',
expression: '表現',
@@ -60,15 +92,8 @@ export const jaJP = {
approximately: '約',
total: '合計',
table: 'テーブル',
discard: '破棄',
stay: 'ステイ',
author: '作者',
light: 'ライト',
dark: 'ダーク',
autoCompletion: 'オートコンプリート',
application: 'アプリケーション',
editor: 'エディター',
view: 'ビュー',
indexes: 'インデックス',
definer: 'デファイナー',
algorithm: 'アルゴリズム',
trigger: 'トリガー | トリガー',
@@ -77,7 +102,6 @@ export const jaJP = {
event: 'イベント',
parameters: 'パラメータ',
function: '関数 | 関数',
// deterministic: '決定論的',
context: 'コンテキスト',
export: 'エクスポート',
returns: '戻り値',
@@ -86,71 +110,21 @@ export const jaJP = {
execution: '実行',
starts: '開始',
ends: '終了',
ssl: 'SSL',
privateKey: '秘密鍵',
certificate: '証明書',
caCertificate: 'CA 証明書',
ciphers: '暗号',
upload: 'アップロード',
browse: '閲覧',
faker: 'フェイカー',
content: 'コンテンツ',
cut: 'カット',
copy: 'コピー',
paste: '貼り付け',
tools: 'ツール',
variables: '変数',
processes: 'プロセス',
database: 'データベース',
scratchpad: 'スクラッチパッド',
array: '配列',
changelog: '変更履歴',
format: 'フォーマット',
sshTunnel: 'SSH トンネル',
structure: '構造',
// small: '小規模',
// medium: '中型',
// large: 'ラージ',
row: 'ロウ | ロウ',
cell: 'セル | セル',
triggerFunction: 'トリガー関数 | トリガー関数',
all: 'すべて',
duplicate: 'デュプリケート',
routine: 'ルーチン',
// new: '新機能',
history: '履歴',
select: '選択'
},
message: {
appWelcome: 'Antares SQL Client へようこそ!',
appFirstStep: '最初のステップは、新しいデータベース接続を作成することです。',
addConnection: '接続の追加',
createConnection: '接続の作成',
createNewConnection: '新しい接続の作成',
askCredentials: '認証情報の入力',
testConnection: '接続のテスト',
editConnection: '接続の編集',
deleteConnection: '接続の削除',
deleteConfirm: 'のキャンセルを確認しますか?',
connectionSuccessfullyMade: '接続に成功しました。',
madeWithJS: '💛 と JavaScript で作られています。',
checkForUpdates: '更新情報の確認',
noUpdatesAvailable: 'アップデートがありません',
checkingForUpdate: 'アップデートを確認中',
checkFailure: 'チェックに失敗しました、後で試してください',
updateAvailable: 'アップデートが利用可能です',
downloadingUpdate: 'アップデートのダウンロード',
updateDownloaded: 'アップデートのダウンロード',
restartToInstall: 'Antares を再起動してインストールしてください',
unableEditFieldWithoutPrimary: '主キーのないフィールドを結果セットで編集できない',
editCell: 'セルの編集',
deleteRows: '行の削除 | {count} 行の削除',
confirmToDeleteRows: '1つの行を削除することを確認しますか | {count} 行を削除することを確認しますか?',
notificationsTimeout: '通知のタイムアウト',
uploadFile: 'ファイルのアップロード',
addNewRow: '新しい行の追加',
numberOfInserts: 'インサート数',
openNewTab: '新しいタブを開く',
affectedRows: '影響を受ける行',
createNewDatabase: '新規データベースの作成',
databaseName: 'データベース名',
@@ -172,8 +146,6 @@ export const jaJP = {
emptyTable: '空のテーブル',
deleteTable: 'テーブルの削除',
emptyConfirm: '空にすることを確認しますか?',
unsavedChanges: '保存されていない変更',
discardUnsavedChanges: '保存されていない変更があります。このタブを閉じると、これらの変更は破棄されます。',
thereAreNoIndexes: 'インデックスがありません',
thereAreNoForeign: '外部キーがありません。',
createNewForeign: '新しい外部キーの作成',
@@ -182,9 +154,6 @@ export const jaJP = {
foreignFields: '外部フィールド',
invalidDefault: '無効なデフォルト',
onDelete: '削除時',
applicationTheme: 'アプリケーションテーマ',
editorTheme: 'エディターテーマ',
wrapLongLines: '長い行の折り返し',
selectStatement: '選択文',
triggerStatement: 'トリガー文',
sqlSecurity: 'SQL セキュリティ',
@@ -207,14 +176,9 @@ export const jaJP = {
createNewScheduler: 'スケジューラの新規作成',
deleteScheduler: 'スケジューラの削除',
preserveOnCompletion: '完了時に保存する',
enableSsl: 'SSL 対応',
manualValue: 'マニュアル値',
tableFiller: 'テーブルフィラー',
fakeDataLanguage: 'フェイクデータの言語',
searchForElements: '要素の検索',
selectAll: 'すべてを選択する',
queryDuration: '問い合わせ期間',
includeBetaUpdates: 'ベータ版アップデートを含む',
setNull: 'NULL の設定',
processesList: 'プロセス一覧',
processInfo: 'プロセス情報',
@@ -223,15 +187,8 @@ export const jaJP = {
schemaName: 'スキーマ名',
editSchema: 'スキーマの編集',
deleteSchema: 'スキーマの削除',
markdownSupported: 'マークダウン対応',
// plantATree: '木を植える',
dataTabPageSize: 'DATA タブのページサイズ',
enableSsh: 'SSH を有効にする',
pageNumber: 'ページ番号',
duplicateTable: 'テーブルを複製する',
noOpenTabs: '開いているタブがありません。左のバーでナビゲートするか',
noSchema: 'スキーマなし',
restorePreviousSession: '前のセッションに戻す',
runQuery: 'クエリの実行',
thereAreNoTableFields: 'テーブルのフィールドがありません',
newTable: '新しいテーブル',
@@ -245,6 +202,42 @@ export const jaJP = {
searchForQueries: 'クエリの検索',
killProcess: 'プロセスの停止'
},
application: {
settings: '設定',
general: '一般',
themes: 'テーマ',
update: '更新情報',
language: '言語',
light: 'ライト',
dark: 'ダーク',
autoCompletion: 'オートコンプリート',
application: 'アプリケーション',
editor: 'エディター',
scratchpad: 'スクラッチパッド',
changelog: '変更履歴',
madeWithJS: '💛 と JavaScript で作られています。',
checkForUpdates: '更新情報の確認',
noUpdatesAvailable: 'アップデートがありません',
checkingForUpdate: 'アップデートを確認中',
checkFailure: 'チェックに失敗しました、後で試してください',
updateAvailable: 'アップデートが利用可能です',
downloadingUpdate: 'アップデートのダウンロード',
updateDownloaded: 'アップデートのダウンロード',
restartToInstall: 'Antares を再起動してインストールしてください',
notificationsTimeout: '通知のタイムアウト',
openNewTab: '新しいタブを開く',
unsavedChanges: '保存されていない変更',
discardUnsavedChanges: '保存されていない変更があります。このタブを閉じると、これらの変更は破棄されます。',
applicationTheme: 'アプリケーションテーマ',
editorTheme: 'エディターテーマ',
wrapLongLines: '長い行の折り返し',
includeBetaUpdates: 'ベータ版アップデートを含む',
markdownSupported: 'マークダウン対応',
dataTabPageSize: 'DATA タブのページサイズ',
noOpenTabs: '開いているタブがありません。左のバーでナビゲートするか',
restorePreviousSession: '前のセッションに戻す',
searchForElements: '要素の検索'
},
faker: {
address: '住所',
commerce: 'コマース',

View File

@@ -1,5 +1,5 @@
export const koKR = {
word: {
general: {
edit: '편집',
save: '저장',
close: '닫기',
@@ -7,6 +7,63 @@ export const koKR = {
confirm: '확인',
cancel: '취소',
send: '보내기',
refresh: '새로고침',
autoRefresh: '자동 새로고침',
version: '버전',
donate: '기부',
run: '실행',
results: '결과',
size: '크기',
mimeType: 'Mime 타입',
download: '다운로드',
add: '추가',
data: '데이터',
properties: '속성',
insert: '삽입',
name: '이름',
clear: '초기화',
seconds: '초',
options: '옵션',
discard: '취소',
stay: '계속하기',
author: '작성자',
upload: '업로드',
browse: '찾아보기',
content: '컨텐츠',
cut: '잘라내기',
copy: '복사',
paste: '붙여넣기',
tools: '도구',
format: '형식',
all: '모두',
duplicate: '복제',
new: '새로 만들기',
history: '기록',
select: '선택',
filter: '필터',
change: '변경',
includes: '포함',
completed: '완료됨',
aborted: '중단됨',
disabled: '비활성화됨',
enable: '활성화',
disable: '비활성화',
contributors: '기여자',
pin: '고정',
unpin: '고정 해제',
folder: '폴더 | 폴더들',
deleteConfirm: '취소를 확인하시겠습니까',
uploadFile: '파일 업로드',
manualValue: '수동 값',
selectAll: '전체 조회',
pageNumber: '페이지 번호',
directoryPath: '디렉터리 경로',
actionSuccessful: '{action} 성공',
outputFormat: '출력 형식',
singleFile: '단일 {ext} 파일',
zipCompressedFile: 'ZIP 압축 {ext} 파일'
},
connection: {
connectionName: '연결 이름',
client: '클라이언트',
hostName: '호스트 이름',
@@ -18,39 +75,38 @@ export const koKR = {
connected: '연결됨',
disconnect: '연결 해제',
disconnected: '연결 해제됨',
refresh: '새로고침',
settings: '설정',
general: '일반',
themes: '테마',
update: '업데이트',
about: '정보',
language: '언어',
version: '버전',
donate: '기부',
run: '실행',
ssl: 'SSL',
privateKey: '개인 키',
certificate: '인증서',
caCertificate: 'CA 인증서',
ciphers: '암호화',
sshTunnel: 'SSH 터널',
passphrase: '암호',
connectionString: '연결 문자열',
addConnection: '연결 추가',
createConnection: '연결 생성',
createNewConnection: '새로운 연결 생성',
askCredentials: '자격 증명 요청',
testConnection: '연결 테스트',
editConnection: '연결 편집',
deleteConnection: '연결 삭제',
connectionSuccessfullyMade: '성공적으로 연결되었습니다!',
enableSsl: 'SSL 활성화',
enableSsh: 'SSH 활성화',
readOnlyMode: '읽기 전용 모드',
untrustedConnection: '신뢰할 수 없는 연결',
allConnections: '모든 연결',
searchForConnections: '연결 검색'
},
database: {
schema: '스키마',
results: '결과',
size: '크기',
seconds: '초',
type: '유형',
mimeType: 'Mime 타입',
download: '다운로드',
add: '추가',
data: '데이터',
properties: '속성',
insert: '삽입',
connecting: '연결 중',
name: '이름',
collation: 'Collation',
clear: '초기화',
options: '옵션',
autoRefresh: '자동 새로고침',
indexes: '인덱스',
foreignKeys: '외래 키',
length: '길이',
unsigned: 'Unsigned',
default: '기본값',
comment: '설명',
collation: 'Collation',
key: '키 | 키들',
order: '순서',
expression: '식',
@@ -60,15 +116,8 @@ export const koKR = {
approximately: '대략',
total: '전체',
table: '테이블',
discard: '취소',
stay: '계속하기',
author: '작성자',
light: '라이트',
dark: '다크',
autoCompletion: '자동 완성',
application: '애플리케이션',
editor: '편집기',
view: '보기',
indexes: '인덱스',
definer: '정의자',
algorithm: '알고리즘',
trigger: '트리거 | 트리거들',
@@ -87,100 +136,25 @@ export const koKR = {
execution: '실행',
starts: '시작',
ends: '종료',
ssl: 'SSL',
privateKey: '개인 키',
certificate: '인증서',
caCertificate: 'CA 인증서',
ciphers: '암호화',
upload: '업로드',
browse: '찾아보기',
faker: 'Faker',
content: '컨텐츠',
cut: '잘라내기',
copy: '복사',
paste: '붙여넣기',
tools: '도구',
variables: '변수',
processes: '프로세스',
database: '데이터베이스',
scratchpad: '스크래치패드',
array: '배열',
changelog: '변경 로그',
format: '형식',
sshTunnel: 'SSH 터널',
structure: '구조',
small: '작음',
medium: '중간',
large: '큼',
row: '행 | 행들',
cell: '셀 | 셀들',
triggerFunction: '트리거 함수 | 트리거 함수들',
all: '모두',
duplicate: '복제',
routine: '루틴',
new: '새로 만들기',
history: '기록',
select: '선택',
passphrase: '암호',
filter: '필터',
change: '변경',
views: '뷰',
triggers: '트리거',
routines: '루틴',
functions: '함수',
schedulers: '스케줄러',
includes: '포함',
drop: '삭제',
completed: '완료됨',
aborted: '중단됨',
disabled: '비활성화됨',
enable: '활성화',
disable: '비활성화',
commit: '커밋',
rollback: '롤백',
connectionString: '연결 문자열',
contributors: '기여자',
pin: '고정',
unpin: '고정 해제',
console: '콘솔',
shortcuts: '바로가기',
folder: '폴더 | 폴더들',
appearance: '외형',
color: '색상',
label: '라벨',
icon: '아이콘',
resultsTable: '결과 테이블'
},
message: {
appWelcome: 'Antares SQL 클라이언트에 오신 것을 환영합니다!',
appFirstStep: '첫 번째 단계: 새 데이터베이스 연결',
addConnection: '연결 추가',
createConnection: '연결 생성',
createNewConnection: '새로운 연결 생성',
askCredentials: '자격 증명 요청',
testConnection: '연결 테스트',
editConnection: '연결 편집',
deleteConnection: '연결 삭제',
deleteConfirm: '취소를 확인하시겠습니까',
connectionSuccessfullyMade: '성공적으로 연결되었습니다!',
madeWithJS: '💛과 JavaScript로 만들어졌습니다!',
checkForUpdates: '업데이트 확인',
noUpdatesAvailable: '업데이트가 없습니다',
checkingForUpdate: '업데이트 확인 중',
checkFailure: '확인 실패, 나중에 다시 시도해주세요',
updateAvailable: '업데이트 가능',
downloadingUpdate: '업데이트 다운로드 중',
updateDownloaded: '업데이트 다운로드 완료',
restartToInstall: 'Antares를 다시 실행해주세요',
resultsTable: '결과 테이블',
drop: '삭제',
unableEditFieldWithoutPrimary: '기본 키 없이 필드를 편집할 수 없습니다.',
editCell: '셀 편집',
deleteRows: '행 삭제 | {count}개의 행 삭제',
confirmToDeleteRows: '행을 삭제하시겠습니까? | {count}개의 행을 삭제하시겠습니까?',
notificationsTimeout: '알림 시간 초과',
uploadFile: '파일 업로드',
addNewRow: '새 행 추가',
numberOfInserts: '삽입 횟수',
openNewTab: '새 탭 열기',
affectedRows: '영향 받은 행',
createNewDatabase: '새 데이터베이스 생성',
databaseName: '데이터베이스 이름',
@@ -202,8 +176,6 @@ export const koKR = {
emptyTable: '테이블 비우기',
deleteTable: '테이블 삭제',
emptyConfirm: '비우시겠습니까',
unsavedChanges: '저장되지 않은 변경사항',
discardUnsavedChanges: '저장되지 않은 변경사항이 있습니다. 탭을 닫으면 이러한 변경사항이 삭제됩니다.',
thereAreNoIndexes: '인덱스가 없습니다.',
thereAreNoForeign: '외래 키가 없습니다.',
createNewForeign: '새로운 외래 키 생성',
@@ -212,9 +184,6 @@ export const koKR = {
foreignFields: '외래 필드',
invalidDefault: '잘못된 기본값',
onDelete: '삭제 시',
applicationTheme: '애플리케이션 테마',
editorTheme: '편집기 테마',
wrapLongLines: '긴 줄 바꿈',
selectStatement: 'SELECT 문',
triggerStatement: '트리거 문',
sqlSecurity: 'SQL 보안',
@@ -237,14 +206,9 @@ export const koKR = {
createNewScheduler: '새 스케줄러 생성',
deleteScheduler: '스케줄러 삭제',
preserveOnCompletion: '완료 후 보존',
enableSsl: 'SSL 활성화',
manualValue: '수동 값',
tableFiller: '테이블 채우기',
fakeDataLanguage: '가짜 데이터 언어',
searchForElements: '요소 검색',
selectAll: '전체 조회',
queryDuration: '쿼리 시간',
includeBetaUpdates: '베타 업데이트 포함',
setNull: 'NULL 설정',
processesList: '프로세스 목록',
processInfo: '프로세스 정보',
@@ -253,15 +217,8 @@ export const koKR = {
schemaName: '스키마 이름',
editSchema: '스키마 편집',
deleteSchema: '스키마 삭제',
markdownSupported: '마크다운 지원',
plantATree: '나무 심기',
dataTabPageSize: '데이터 탭 페이지 크기',
enableSsh: 'SSH 활성화',
pageNumber: '페이지 번호',
duplicateTable: '테이블 복제',
noOpenTabs: '열린 탭이 없습니다.',
noSchema: '스키마 없음',
restorePreviousSession: '이전 세션 복원',
runQuery: '쿼리 실행',
thereAreNoTableFields: '테이블 필드가 없습니다',
newTable: '새 테이블',
@@ -274,36 +231,78 @@ export const koKR = {
thereIsNoQueriesYet: '아직 쿼리가 없습니다',
searchForQueries: '쿼리 검색',
killProcess: '프로세스 종료',
closeTab: '탭 닫기',
exportSchema: '스키마 내보내기',
importSchema: '스키마 가져오기',
directoryPath: '디렉터리 경로',
newInsertStmtEvery: '마다 새 INSERT 문',
processingTableExport: '{table} 처리 중',
fetchingTableExport: '{table} 데이터 가져오는 중',
writingTableExport: '{table} 데이터 쓰는 중',
checkAllTables: '모든 테이블 선택',
uncheckAllTables: '모든 테이블 선택 취소',
goToDownloadPage: '다운로드 페이지로 이동',
readOnlyMode: '읽기 전용 모드',
killQuery: '쿼리 종료',
insertRow: '행 삽입 | 행 삽입',
commitMode: '커밋 모드',
autoCommit: '자동 커밋',
manualCommit: '수동 커밋',
actionSuccessful: '{action} 성공',
disableFKChecks: '외래 키 검사 비활성화',
formatQuery: '쿼리 형식',
queryHistory: '쿼리 기록',
clearQuery: '쿼리 지우기',
fillCell: '셀 채우기',
executeSelectedQuery: '선택한 쿼리 실행',
importQueryErrors: '경고: {n}개의 오류 발생 | 경고: {n}개의 오류 발생',
executedQueries: '{n}개의 쿼리 실행 | {n}개의 쿼리 실행',
outputFormat: '출력 형식',
singleFile: '단일 {ext} 파일',
zipCompressedFile: 'ZIP 압축 {ext} 파일',
executedQueries: '{n}개의 쿼리 실행 | {n}개의 쿼리 실행'
},
application: {
settings: '설정',
general: '일반',
themes: '테마',
update: '업데이트',
about: '정보',
language: '언어',
light: '라이트',
dark: '다크',
autoCompletion: '자동 완성',
application: '애플리케이션',
editor: '편집기',
scratchpad: '스크래치패드',
changelog: '변경 로그',
small: '작음',
medium: '중간',
large: '큼',
console: '콘솔',
shortcuts: '바로가기',
appearance: '외형',
color: '색상',
label: '라벨',
icon: '아이콘',
madeWithJS: '💛과 JavaScript로 만들어졌습니다!',
checkForUpdates: '업데이트 확인',
noUpdatesAvailable: '업데이트가 없습니다',
checkingForUpdate: '업데이트 확인 중',
checkFailure: '확인 실패, 나중에 다시 시도해주세요',
updateAvailable: '업데이트 가능',
downloadingUpdate: '업데이트 다운로드 중',
updateDownloaded: '업데이트 다운로드 완료',
restartToInstall: 'Antares를 다시 실행해주세요',
notificationsTimeout: '알림 시간 초과',
openNewTab: '새 탭 열기',
unsavedChanges: '저장되지 않은 변경사항',
discardUnsavedChanges: '저장되지 않은 변경사항이 있습니다. 탭을 닫으면 이러한 변경사항이 삭제됩니다.',
applicationTheme: '애플리케이션 테마',
editorTheme: '편집기 테마',
wrapLongLines: '긴 줄 바꿈',
includeBetaUpdates: '베타 업데이트 포함',
markdownSupported: '마크다운 지원',
plantATree: '나무 심기',
dataTabPageSize: '데이터 탭 페이지 크기',
noOpenTabs: '열린 탭이 없습니다.',
restorePreviousSession: '이전 세션 복원',
closeTab: '탭 닫기',
goToDownloadPage: '다운로드 페이지로 이동',
disableBlur: 'blur 비활성화',
untrustedConnection: '신뢰할 수 없는 연결',
missingOrIncompleteTranslation: '누락 혹은 불완전한 번역?',
findOutHowToContribute: '기여 방법 알아보기',
disableFKChecks: '외래 키 검사 비활성화',
allConnections: '모든 연결',
searchForConnections: '연결 검색',
disableScratchpad: '스크래치패드 비활성화',
reportABug: '버그 신고',
nextTab: '다음 탭',
@@ -323,22 +322,18 @@ export const koKR = {
openSettings: '설정 열기',
openScratchpad: '스크래치패드 열기',
runOrReload: '실행 또는 다시 로드',
formatQuery: '쿼리 형식',
queryHistory: '쿼리 기록',
clearQuery: '쿼리 지우기',
openFilter: '필터 열기',
nextResultsPage: '다음 결과 페이지',
previousResultsPage: '이전 결과 페이지',
fillCell: '셀 채우기',
editFolder: '폴더 수정',
folderName: '폴더 이름',
deleteFolder: '폴더 삭제',
editConnectionAppearance: '연결 형태 수정',
executeSelectedQuery: '선택한 쿼리 실행',
defaultCopyType: '기본 복사 유형',
showTableSize: '사이드바에 테이블 크기 표시',
showTableSizeDescription: 'MySQL/MariaDB 전용입니다. 이 옵션을 사용하면 많은 테이블이 있는 스키마의 성능에 영향을 줄 수 있습니다.',
searchForSchemas: '스키마 검색',
searchForElements: '요소 검색',
switchSearchMethod: '검색 방법 전환'
},
faker: {

View File

@@ -1,5 +1,5 @@
export const nlNL = {
word: {
general: {
edit: 'Bewerk',
save: 'Opslaan',
close: 'Sluiten',
@@ -7,6 +7,66 @@ export const nlNL = {
confirm: 'Bevestig',
cancel: 'Annuleer',
send: 'Verstuur',
refresh: 'Ververs',
autoRefresh: 'Automatisch verversen',
version: 'Versie',
donate: 'Doneer',
run: 'Uitvoeren',
results: 'Resultaten',
size: 'Grootte',
mimeType: 'Mime-Type',
download: 'Download',
add: 'Toevoegen',
data: 'Data',
properties: 'Eigenschappen',
insert: 'Invoegen',
name: 'Naam',
clear: 'Wis',
seconds: 'Seconden',
options: 'Opties',
discard: 'Discard',
stay: 'Stay',
author: 'Auteur',
upload: 'Upload',
browse: 'Blader',
content: 'Content',
cut: 'Cut',
copy: 'Kopieer',
paste: 'Plak',
tools: 'Gereedschap',
format: 'Format',
all: 'Alle',
duplicate: 'Dupliceer',
new: 'Nieuw',
history: 'Geschiedenis',
select: 'Selecteer',
filter: 'Filter',
change: 'Wijzig',
includes: 'Includes',
completed: 'Completed',
aborted: 'Aborted',
disabled: 'Uitgeschakeld',
enable: 'Inschakelen',
disable: 'Uitschakelen',
contributors: 'Contributors',
pin: 'Vastzetten',
unpin: 'Losmaken',
folder: 'Folder | Folders',
none: 'Geen',
singleQuote: 'Enkel aanhalingsteken',
doubleQuote: 'Dubbel aanhalingsteken',
deleteConfirm: 'Bevestig het verwijderen van',
uploadFile: 'Upload bestand',
manualValue: 'Handmatige waarde',
selectAll: 'Selecteer alles',
pageNumber: 'Paginanummer',
directoryPath: 'Directory path',
actionSuccessful: '{action} succesvol',
outputFormat: 'Uitvoerformaat',
singleFile: 'Enkel {ext}-bestand',
zipCompressedFile: 'ZIP gecomprimeerd {ext}-bestand'
},
connection: {
connectionName: 'Naam verbinding',
client: 'Client',
hostName: 'Servernaam',
@@ -18,39 +78,38 @@ export const nlNL = {
connected: 'Verbonden',
disconnect: 'Verbreek verbinding',
disconnected: 'Verbinding verbroken',
refresh: 'Ververs',
settings: 'Instellingen',
general: 'Algemeen',
themes: 'Thema\'s',
update: 'Bijwerken',
about: 'Over',
language: 'Taal',
version: 'Versie',
donate: 'Doneer',
run: 'Uitvoeren',
ssl: 'SSL',
privateKey: 'Private key',
certificate: 'Certificaat',
caCertificate: 'CA certificaat',
ciphers: 'Encryptiesleutels',
sshTunnel: 'SSH tunnel',
passphrase: 'Passphrase',
connectionString: 'Connection string',
addConnection: 'Voeg verbinding toe',
createConnection: 'Maak verbinding',
createNewConnection: 'Maak nieuwe connection',
askCredentials: 'Vraag om credentials',
testConnection: 'Test verbinding',
editConnection: 'Bewerk verbinding',
deleteConnection: 'Verwijder verbinding',
connectionSuccessfullyMade: 'Connection successfully made!',
enableSsl: 'SSL inschakelen',
enableSsh: 'SSH inschakelen',
readOnlyMode: 'Alleen lezen modus',
untrustedConnection: 'Niet vertrouwde verbinding',
allConnections: 'Alle verbindingen',
searchForConnections: 'Search for connections'
},
database: {
schema: 'Schema',
results: 'Resultaten',
size: 'Grootte',
seconds: 'Seconden',
type: 'Type',
mimeType: 'Mime-Type',
download: 'Download',
add: 'Toevoegen',
data: 'Data',
properties: 'Eigenschappen',
insert: 'Invoegen',
connecting: 'Verbinden',
name: 'Naam',
collation: 'Collation',
clear: 'Wis',
options: 'Opties',
autoRefresh: 'Automatisch verversen',
indexes: 'Indexes',
foreignKeys: 'Foreign keys',
length: 'Lengte',
unsigned: 'Unsigned',
default: 'Standaard',
comment: 'Opmerking',
collation: 'Collation',
key: 'Key | Keys',
order: 'Sorteer',
expression: 'Expression',
@@ -60,15 +119,8 @@ export const nlNL = {
approximately: 'Ongeveer',
total: 'Totaal',
table: 'Tabel',
discard: 'Discard',
stay: 'Stay',
author: 'Auteur',
light: 'Licht',
dark: 'Donker',
autoCompletion: 'Auto Completion',
application: 'Applicatie',
editor: 'Editor',
view: 'View',
indexes: 'Indexes',
definer: 'Definer',
algorithm: 'Algoritme',
trigger: 'Trigger | Triggers',
@@ -87,104 +139,26 @@ export const nlNL = {
execution: 'Execution',
starts: 'Starts',
ends: 'Ends',
ssl: 'SSL',
privateKey: 'Private key',
certificate: 'Certificaat',
caCertificate: 'CA certificaat',
ciphers: 'Encryptiesleutels',
upload: 'Upload',
browse: 'Blader',
faker: 'Faker',
content: 'Content',
cut: 'Cut',
copy: 'Kopieer',
paste: 'Plak',
tools: 'Gereedschap',
variables: 'Variabelen',
processes: 'Processes',
database: 'Database',
scratchpad: 'Kladblok',
array: 'Array',
changelog: 'Changelog',
format: 'Format',
sshTunnel: 'SSH tunnel',
structure: 'Structuur',
small: 'Klein',
medium: 'Medium',
large: 'Groot',
row: 'Rij | Rijen',
cell: 'Cel | Cellen',
triggerFunction: 'Trigger function | Trigger functions',
all: 'Alle', // Schema: 'Alle'
duplicate: 'Dupliceer',
routine: 'Routine',
new: 'Nieuw',
history: 'Geschiedenis',
select: 'Selecteer',
passphrase: 'Passphrase',
filter: 'Filter',
change: 'Wijzig',
views: 'Views',
triggers: 'Triggers',
routines: 'Routines',
functions: 'Functions',
schedulers: 'Schedulers',
includes: 'Includes',
drop: 'Drop',
completed: 'Completed',
aborted: 'Aborted',
disabled: 'Uitgeschakeld',
enable: 'Inschakelen',
disable: 'Uitschakelen',
commit: 'Commit',
rollback: 'Rollback',
connectionString: 'Connection string',
contributors: 'Contributors',
pin: 'Vastzetten',
unpin: 'Losmaken',
console: 'Console',
shortcuts: 'Sneltoetsen',
folder: 'Folder | Folders',
appearance: 'Uiterlijk',
color: 'Kleur',
label: 'Label',
icon: 'Pictogram',
resultsTable: 'Resultaten tabel',
ddl: 'DDL',
none: 'Geen',
singleQuote: 'Enkel aanhalingsteken',
doubleQuote: 'Dubbel aanhalingsteken'
},
message: {
appWelcome: 'Welkom bij Antares SQL Client!',
appFirstStep: 'Eerste stap: maak een nieuwe databaseverbinding.',
addConnection: 'Voeg verbinding toe',
createConnection: 'Maak verbinding',
createNewConnection: 'Maak nieuwe connection',
askCredentials: 'Vraag om credentials',
testConnection: 'Test verbinding',
editConnection: 'Bewerk verbinding',
deleteConnection: 'Verwijder verbinding',
deleteConfirm: 'Bevestig het verwijderen van',
connectionSuccessfullyMade: 'Connection successfully made!',
madeWithJS: 'Gemaakt met 💛 en JavaScript!',
checkForUpdates: 'Controleer op updates',
noUpdatesAvailable: 'Geen updates beschikbaar',
checkingForUpdate: 'Aan het controleren op updates',
checkFailure: 'Controle gefaald, probeer het later opnieuw',
updateAvailable: 'Update beschikbaar',
downloadingUpdate: 'Update wordt gedownload',
updateDownloaded: 'Update gedownload',
restartToInstall: 'Herstart Antares om te installeren',
drop: 'Drop',
unableEditFieldWithoutPrimary: 'Unable to edit a field without a primary key in result set',
editCell: 'Wijzig cell',
deleteRows: 'Verwijder rij | Verwijder {count} rijen',
confirmToDeleteRows: 'Do you confirm to delete one row? | Do you confirm to delete {count} rows?',
notificationsTimeout: 'Notifications timeout',
uploadFile: 'Upload bestand',
addNewRow: 'Voeg een nieuwe rij toe',
numberOfInserts: 'Aantal inserts',
openNewTab: 'Open een nieuw tabblad',
affectedRows: 'Affected rows',
createNewDatabase: 'Maak nieuwe Database',
databaseName: 'Database naam',
@@ -206,8 +180,6 @@ export const nlNL = {
emptyTable: 'Maak tabel leeg',
deleteTable: 'Verwijder tabel',
emptyConfirm: 'Do you confirm to empty',
unsavedChanges: 'Onopgeslagen wijzigingen',
discardUnsavedChanges: 'Je hebt onopgeslagen wijzigingen. Closing this tab these changes will be discarded.',
thereAreNoIndexes: 'Er zijn geen indexes',
thereAreNoForeign: 'Er zijn geen foreign keys',
createNewForeign: 'Maak nieuwe foreign key',
@@ -216,9 +188,6 @@ export const nlNL = {
foreignFields: 'Foreign fields',
invalidDefault: 'Ongeldige standaardwaarde',
onDelete: 'On delete',
applicationTheme: 'Applicatie thema',
editorTheme: 'Editor Theme',
wrapLongLines: 'Wrap long lines',
selectStatement: 'Select statement',
triggerStatement: 'Trigger statement',
sqlSecurity: 'SQL security',
@@ -241,14 +210,9 @@ export const nlNL = {
createNewScheduler: 'Maak nieuwe scheduler',
deleteScheduler: 'Verwijder scheduler',
preserveOnCompletion: 'Preserve on completion',
enableSsl: 'SSL inschakelen',
manualValue: 'Handmatige waarde',
tableFiller: 'Table Filler',
fakeDataLanguage: 'Fake data language',
searchForElements: 'Zoek naar elementen',
selectAll: 'Selecteer alles',
queryDuration: 'Query duration',
includeBetaUpdates: 'Include beta updates',
setNull: 'Zet op NULL',
processesList: 'Proceslijst',
processInfo: 'Procesinformatie',
@@ -257,15 +221,8 @@ export const nlNL = {
schemaName: 'Naam schema',
editSchema: 'Bewerk schema',
deleteSchema: 'Verwijder schema',
markdownSupported: 'Markdown wordt ondersteund',
plantATree: 'Plant een boom',
dataTabPageSize: 'DATA tab page size',
enableSsh: 'SSH inschakelen',
pageNumber: 'Paginanummer',
duplicateTable: 'Dupliceer table',
noOpenTabs: 'There are no open tabs, navigate on the left bar or:',
noSchema: 'Geen schema',
restorePreviousSession: 'Herstel vorige sessie',
runQuery: 'Run query',
thereAreNoTableFields: 'There are no table fields',
newTable: 'Nieuwe table',
@@ -278,36 +235,82 @@ export const nlNL = {
thereIsNoQueriesYet: 'There is no queries yet',
searchForQueries: 'Search for queries',
killProcess: 'Sluit proces af',
closeTab: 'Sluit tabblad',
exportSchema: 'Exporteer schema',
importSchema: 'Importeer schema',
directoryPath: 'Directory path',
newInsertStmtEvery: 'New INSERT statement every',
processingTableExport: 'Verwerken {table}',
fetchingTableExport: 'Ophalen data van {table} data',
writingTableExport: 'Writing {table} data',
checkAllTables: 'Selecteer alle tabellen',
uncheckAllTables: 'Deselecteer alle tabellen',
goToDownloadPage: 'Ga naar de downloadpagina',
readOnlyMode: 'Alleen lezen modus',
killQuery: 'Kill query',
insertRow: 'Rij invoegen | Rijen invoegen',
commitMode: 'Commit modus',
autoCommit: 'Automatische commit',
manualCommit: 'Handmatige commit',
actionSuccessful: '{action} succesvol',
disableFKChecks: 'Foreign key checks uitschakelen',
formatQuery: 'Formatteer query',
queryHistory: 'Query geschiedenis',
clearQuery: 'Wis query',
fillCell: 'Vul cel',
executeSelectedQuery: 'Execute selected query',
noResultsPresent: 'Geen resultaten beschikbaar',
sqlExportOptions: 'SQL export options',
targetTable: 'Doeltabel',
switchDatabase: 'Wissel van database',
importQueryErrors: 'Waarschuwing: {n} fout is opgetreden | Waarschuwing: {n} fouten opgetreden',
executedQueries: '{n} query uitgevoerd | {n} queries uitgevoerd',
outputFormat: 'Uitvoerformaat',
singleFile: 'Enkel {ext}-bestand',
zipCompressedFile: 'ZIP gecomprimeerd {ext}-bestand',
executedQueries: '{n} query uitgevoerd | {n} queries uitgevoerd'
},
application: {
settings: 'Instellingen',
general: 'Algemeen',
themes: 'Thema\'s',
update: 'Bijwerken',
about: 'Over',
language: 'Taal',
light: 'Licht',
dark: 'Donker',
autoCompletion: 'Auto Completion',
application: 'Applicatie',
editor: 'Editor',
scratchpad: 'Kladblok',
changelog: 'Changelog',
small: 'Klein',
medium: 'Medium',
large: 'Groot',
console: 'Console',
shortcuts: 'Sneltoetsen',
appearance: 'Uiterlijk',
color: 'Kleur',
label: 'Label',
icon: 'Pictogram',
madeWithJS: 'Gemaakt met 💛 en JavaScript!',
checkForUpdates: 'Controleer op updates',
noUpdatesAvailable: 'Geen updates beschikbaar',
checkingForUpdate: 'Aan het controleren op updates',
checkFailure: 'Controle gefaald, probeer het later opnieuw',
updateAvailable: 'Update beschikbaar',
downloadingUpdate: 'Update wordt gedownload',
updateDownloaded: 'Update gedownload',
restartToInstall: 'Herstart Antares om te installeren',
notificationsTimeout: 'Notifications timeout',
openNewTab: 'Open een nieuw tabblad',
unsavedChanges: 'Onopgeslagen wijzigingen',
discardUnsavedChanges: 'Je hebt onopgeslagen wijzigingen. Closing this tab these changes will be discarded.',
applicationTheme: 'Applicatie thema',
editorTheme: 'Editor Theme',
wrapLongLines: 'Wrap long lines',
includeBetaUpdates: 'Include beta updates',
markdownSupported: 'Markdown wordt ondersteund',
plantATree: 'Plant een boom',
dataTabPageSize: 'DATA tab page size',
noOpenTabs: 'There are no open tabs, navigate on the left bar or:',
restorePreviousSession: 'Herstel vorige sessie',
closeTab: 'Sluit tabblad',
goToDownloadPage: 'Ga naar de downloadpagina',
disableBlur: 'Vervagen uitschakelen',
untrustedConnection: 'Niet vertrouwde verbinding',
missingOrIncompleteTranslation: 'Missing or incomplete translation?',
findOutHowToContribute: 'Ontdek hoe je kunt bijdragen',
disableFKChecks: 'Foreign key checks uitschakelen',
allConnections: 'Alle verbindingen',
searchForConnections: 'Search for connections',
disableScratchpad: 'Kladblok uitschakelen',
reportABug: 'Bug melden',
nextTab: 'Volgende tabblad',
@@ -327,40 +330,29 @@ export const nlNL = {
openSettings: 'Open instellingen',
openScratchpad: 'Open kladblok',
runOrReload: 'Run or reload',
formatQuery: 'Formatteer query',
queryHistory: 'Query geschiedenis',
clearQuery: 'Wis query',
openFilter: 'Open filter',
nextResultsPage: 'Volgende resultaatpagina',
previousResultsPage: 'Vorige resultaatpagina',
fillCell: 'Vul cel',
editFolder: 'Wijzig folder',
folderName: 'Foldernaam',
deleteFolder: 'Verwijder folder',
editConnectionAppearance: 'Edit connection appearance',
executeSelectedQuery: 'Execute selected query',
defaultCopyType: 'Default copy type',
showTableSize: 'Show table size in sidebar',
showTableSizeDescription: 'MySQL/MariaDB only. Enable this option may affects performance on schema with many tables.',
searchForSchemas: 'Zoek naar schemas',
searchForElements: 'Zoek naar elementen',
switchSearchMethod: 'Switch search method',
noResultsPresent: 'Geen resultaten beschikbaar',
sqlExportOptions: 'SQL export options',
targetTable: 'Doeltabel',
phpArray: 'PHP array',
closeAllTabs: 'Sluit alle tabbladen',
closeOtherTabs: 'Sluit overige tabbladen',
closeTabsToLeft: 'Sluit tabbladen naar links',
closeTabsToRight: 'Sluit tabbladen naar rechts',
switchDatabase: 'Wissel van database',
csvExportOptions: 'CSV exportinstellingen',
csvFieldDelimiter: 'Scheidingsteken woorden',
csvLinesTerminator: 'Scheidingsteken regels',
csvStringDelimiter: 'Scheidingsteken strings',
csvIncludeHeader: 'Inclusief kopregel',
expandSettingsBar: 'Favorietenbalk uitvouwen',
collapseSettingsBar: 'Favorietenbalk uitvouwen',
searchConnections: 'Doorzoek favorieten'
csvExportOptions: 'CSV exportinstellingen',
phpArray: 'PHP array'
},
faker: {
address: 'Address',

Some files were not shown because too many files have changed in this diff Show More