Compare commits
44 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f11c4881f3 | |||
| 6398c6d7ce | |||
| 973ce8c3a7 | |||
| fe7b0e2bc7 | |||
| 0d82fd51c7 | |||
| 3b4d905485 | |||
| 53c63f0f4b | |||
| 5553e3cd8d | |||
| 67ee130a9e | |||
| 18d908fa63 | |||
| c61f58854e | |||
| f789ecd2f1 | |||
| 1fdc30804a | |||
| 5ba10d0acb | |||
| 12803d8154 | |||
| 36c391ccff | |||
| 765fb6297c | |||
| 66255769ad | |||
| 04a8d38641 | |||
| 859d020031 | |||
| 3c541117d0 | |||
| 80ca2e5215 | |||
| 19f2aa2997 | |||
| ec657f30c7 | |||
| 7e84d495f5 | |||
| c3baedd93c | |||
| ae9676f744 | |||
| 7ec156a5d1 | |||
| b80cbea1bc | |||
| 4600fa9f32 | |||
| 6e0b3e5cdc | |||
| 519ff87f5d | |||
| d4a363e37e | |||
| a3cfc45fef | |||
| 60602e02d9 | |||
| 44366f7872 | |||
| 2f18d8c204 | |||
| 08efbee52b | |||
| eac8d78c5d | |||
| db73673374 | |||
| 281cdb7264 | |||
| 101c80d820 | |||
| 1e06f65d9e | |||
| eea85709ed |
@@ -43,7 +43,7 @@ jobs:
|
||||
repository: dbgate/dbgate-pro
|
||||
token: ${{ secrets.GH_TOKEN }}
|
||||
path: dbgate-pro
|
||||
ref: f27a03d4aff5b00a009643df146a9c17bdbf7801
|
||||
ref: 626a30d67f40e910e8c3ed89ec34d5aa58c1f7e2
|
||||
- name: Merge dbgate/dbgate-pro
|
||||
run: |
|
||||
mkdir ../dbgate-pro
|
||||
|
||||
@@ -43,7 +43,7 @@ jobs:
|
||||
repository: dbgate/dbgate-pro
|
||||
token: ${{ secrets.GH_TOKEN }}
|
||||
path: dbgate-pro
|
||||
ref: f27a03d4aff5b00a009643df146a9c17bdbf7801
|
||||
ref: 626a30d67f40e910e8c3ed89ec34d5aa58c1f7e2
|
||||
- name: Merge dbgate/dbgate-pro
|
||||
run: |
|
||||
mkdir ../dbgate-pro
|
||||
|
||||
@@ -39,7 +39,7 @@ jobs:
|
||||
repository: dbgate/dbgate-pro
|
||||
token: ${{ secrets.GH_TOKEN }}
|
||||
path: dbgate-pro
|
||||
ref: f27a03d4aff5b00a009643df146a9c17bdbf7801
|
||||
ref: 626a30d67f40e910e8c3ed89ec34d5aa58c1f7e2
|
||||
- name: Merge dbgate/dbgate-pro
|
||||
run: |
|
||||
mkdir ../dbgate-pro
|
||||
|
||||
@@ -44,7 +44,7 @@ jobs:
|
||||
repository: dbgate/dbgate-pro
|
||||
token: ${{ secrets.GH_TOKEN }}
|
||||
path: dbgate-pro
|
||||
ref: f27a03d4aff5b00a009643df146a9c17bdbf7801
|
||||
ref: 626a30d67f40e910e8c3ed89ec34d5aa58c1f7e2
|
||||
- name: Merge dbgate/dbgate-pro
|
||||
run: |
|
||||
mkdir ../dbgate-pro
|
||||
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
repository: dbgate/dbgate-pro
|
||||
token: ${{ secrets.GH_TOKEN }}
|
||||
path: dbgate-pro
|
||||
ref: f27a03d4aff5b00a009643df146a9c17bdbf7801
|
||||
ref: 626a30d67f40e910e8c3ed89ec34d5aa58c1f7e2
|
||||
- name: Merge dbgate/dbgate-pro
|
||||
run: |
|
||||
mkdir ../dbgate-pro
|
||||
|
||||
@@ -26,7 +26,7 @@ jobs:
|
||||
repository: dbgate/dbgate-pro
|
||||
token: ${{ secrets.GH_TOKEN }}
|
||||
path: dbgate-pro
|
||||
ref: f27a03d4aff5b00a009643df146a9c17bdbf7801
|
||||
ref: 626a30d67f40e910e8c3ed89ec34d5aa58c1f7e2
|
||||
- name: Merge dbgate/dbgate-pro
|
||||
run: |
|
||||
mkdir ../dbgate-pro
|
||||
|
||||
@@ -24,6 +24,7 @@ docker/plugins
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
.env.translation
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
|
||||
@@ -8,6 +8,16 @@ Builds:
|
||||
- linux - application for linux
|
||||
- win - application for Windows
|
||||
|
||||
## 6.7.1 - not released yet
|
||||
- ADDED: LANGUAGE environment variable for the web version. #1266
|
||||
- ADDED: New localizations (Italian, Portugese (Brazil), Japanese)
|
||||
- ADDED: Option to detect language from browser settings in web version
|
||||
- FIXED: Check updates option no longer available in 6.7.0 #1263
|
||||
- FIXED: A MERGE statement must be terminated by a semi-colon (;), but dbgate stripped it. #1257
|
||||
- ADDED: Show table size #552
|
||||
- ADDED: Sort tables by size and by row count
|
||||
- ADDED: Connect to Legacy MongoDB (Premium) #540
|
||||
|
||||
## 6.7.0
|
||||
- ADDED: Added localization support, now you can use DbGate in multiple languages (French, Spanish, German, Czech, Slovak, Simplified Chinese) #347 #705 #939 #1079
|
||||
- CHANGED: Solved many issues with binary fields, huge performance improvements in binary fields processing
|
||||
|
||||
@@ -118,7 +118,7 @@ module.exports = ({ editMenu, isMac }, currentTranslations = null) => [
|
||||
{ command: 'tabs.changelog', hideDisabled: true },
|
||||
{ command: 'about.show', hideDisabled: true },
|
||||
{ divider: true },
|
||||
{ command: 'file.checkForUpdates', hideDisabled: true },
|
||||
{ command: 'app.checkForUpdates', hideDisabled: true },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
@@ -0,0 +1,132 @@
|
||||
require('dotenv').config({ path: '.env.translation' });
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const OpenAI = require('openai');
|
||||
|
||||
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
|
||||
|
||||
const translationsDir = path.join(__dirname, '../../translations');
|
||||
const enFilePath = path.join(translationsDir, 'en.json');
|
||||
|
||||
const languageNames = {
|
||||
'cs.json': 'Czech',
|
||||
'de.json': 'German',
|
||||
'es.json': 'Spanish',
|
||||
'fr.json': 'French',
|
||||
'it.json': 'Italian',
|
||||
'ja.json': 'Japanese',
|
||||
'pt.json': 'Portuguese',
|
||||
'sk.json': 'Slovak',
|
||||
'zh.json': 'Chinese'
|
||||
};
|
||||
|
||||
// Read source (english)
|
||||
const enTranslations = JSON.parse(fs.readFileSync(enFilePath, 'utf8'));
|
||||
const enKeys = Object.keys(enTranslations);
|
||||
|
||||
// Get all translation files
|
||||
const translationFiles = fs.readdirSync(translationsDir)
|
||||
.filter(file => file.endsWith('.json') && file !== 'en.json')
|
||||
.sort();
|
||||
|
||||
console.log(`Found ${enKeys.length} keys in en.json\n`);
|
||||
console.log('='.repeat(80));
|
||||
|
||||
async function translateMissingIds({file, translations, missingIds}){
|
||||
const languageName = languageNames[file];
|
||||
if (!languageName) {
|
||||
console.log(`No language name mapping for file: ${file}`);
|
||||
return;
|
||||
}
|
||||
|
||||
// Build object with only missing translations
|
||||
const needed = {};
|
||||
missingIds.forEach(key => {
|
||||
needed[key] = enTranslations[key];
|
||||
});
|
||||
|
||||
// Get all existing translations as style examples
|
||||
const existingTranslations = {};
|
||||
Object.keys(translations).forEach(key => {
|
||||
if (translations[key] && !translations[key].startsWith('***')) {
|
||||
existingTranslations[key] = {
|
||||
en: enTranslations[key],
|
||||
translated: translations[key]
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
const prompt = `You are a professional translator for DbGate, a database management application.
|
||||
|
||||
Translate the following English UI strings to ${languageName}.
|
||||
|
||||
IMPORTANT RULES:
|
||||
1. Preserve ALL placeholders exactly as they appear: {plugin}, {columnNumber}, {0}, {1}, etc.
|
||||
2. Maintain technical terminology appropriately for database software
|
||||
3. Match the translation style, tone, and formality of the existing translations shown below
|
||||
4. Keep the same level of brevity or verbosity as the existing translations
|
||||
5. Return ONLY valid JSON - no markdown, no explanations, no code blocks
|
||||
6. Use the same keys as provided
|
||||
|
||||
EXISTING TRANSLATIONS (for style reference):
|
||||
${JSON.stringify(existingTranslations, null, 2)}
|
||||
|
||||
STRINGS TO TRANSLATE:
|
||||
${JSON.stringify(needed, null, 2)}
|
||||
|
||||
Return format: {"key": "translated value", ...}`;
|
||||
|
||||
const response = await client.chat.completions.create({
|
||||
model: 'gpt-5.1',
|
||||
messages: [
|
||||
{ role: 'system', content: 'You are a professional translator specializing in software localization. Match the style and tone of existing translations. Return only valid JSON.' },
|
||||
{ role: 'user', content: prompt }
|
||||
],
|
||||
temperature: 0.2
|
||||
});
|
||||
|
||||
let translatedJson = response.choices[0].message.content.trim();
|
||||
|
||||
// Remove markdown code blocks if present
|
||||
translatedJson = translatedJson.replace(/^```json\n?/, '').replace(/\n?```$/, '');
|
||||
|
||||
return JSON.parse(translatedJson);
|
||||
}
|
||||
|
||||
(async () => {
|
||||
for (const file of translationFiles) {
|
||||
const filePath = path.join(translationsDir, file);
|
||||
const translations = JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
||||
|
||||
const missingIds = enKeys.filter(key => !translations.hasOwnProperty(key) || (typeof translations[key] === 'string' && translations[key].startsWith('***')));
|
||||
|
||||
|
||||
console.log(`\n${file.toUpperCase()}`);
|
||||
console.log('-'.repeat(80));
|
||||
|
||||
if (missingIds.length === 0) {
|
||||
console.log('✓ All translations complete!');
|
||||
continue;
|
||||
} else {
|
||||
console.log(`Found ${missingIds.length} untranslated IDs\n`);
|
||||
}
|
||||
|
||||
const newTranslations = await translateMissingIds({file, translations, missingIds});
|
||||
|
||||
if (!newTranslations) {
|
||||
console.log(`Skipping file due to translation error: ${file}`);
|
||||
continue;
|
||||
}
|
||||
|
||||
for (const [key, value] of Object.entries(newTranslations)) {
|
||||
translations[key] = value;
|
||||
console.log(`Translated: ${key} => ${value}`);
|
||||
}
|
||||
|
||||
fs.writeFileSync(filePath, JSON.stringify(translations, null, 2) + '\n', 'utf8');
|
||||
console.log(`\n✓ Updated translations written to ${file}`);
|
||||
}
|
||||
|
||||
console.log('\n' + '='.repeat(80));
|
||||
console.log('Translation complete!\n');
|
||||
})();
|
||||
@@ -4,6 +4,7 @@ const volatilePackages = [
|
||||
'@clickhouse/client',
|
||||
'bson', // this package is already bundled and is used in mongodb
|
||||
'mongodb',
|
||||
'mongodb-old',
|
||||
'mongodb-client-encryption',
|
||||
'tedious',
|
||||
'msnodesqlv8',
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"private": true,
|
||||
"version": "6.7.0",
|
||||
"version": "6.7.1-premium-beta.3",
|
||||
"name": "dbgate-all",
|
||||
"workspaces": [
|
||||
"packages/*",
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
"cors": "^2.8.5",
|
||||
"cross-env": "^6.0.3",
|
||||
"dbgate-datalib": "^6.0.0-alpha.1",
|
||||
"dbgate-query-splitter": "^4.11.7",
|
||||
"dbgate-query-splitter": "^4.11.9",
|
||||
"dbgate-sqltree": "^6.0.0-alpha.1",
|
||||
"dbgate-tools": "^6.0.0-alpha.1",
|
||||
"debug": "^4.3.4",
|
||||
|
||||
@@ -35,8 +35,8 @@ module.exports = {
|
||||
},
|
||||
|
||||
refreshPublicFiles_meta: true,
|
||||
async refreshPublicFiles({ isRefresh }) {
|
||||
await refreshPublicFiles(isRefresh);
|
||||
async refreshPublicFiles({ isRefresh }, req) {
|
||||
await refreshPublicFiles(isRefresh, req?.headers?.['x-ui-language']);
|
||||
return {
|
||||
status: 'ok',
|
||||
};
|
||||
|
||||
@@ -71,6 +71,7 @@ module.exports = {
|
||||
const isLicenseValid = checkedLicense?.status == 'ok';
|
||||
const logoutUrl = storageConnectionError ? null : await authProvider.getLogoutUrl();
|
||||
const adminConfig = storageConnectionError ? null : await storage.readConfig({ group: 'admin' });
|
||||
const settingsConfig = storageConnectionError ? null : await storage.readConfig({ group: 'settings' });
|
||||
|
||||
storage.startRefreshLicense();
|
||||
|
||||
@@ -121,6 +122,7 @@ module.exports = {
|
||||
allowPrivateCloud: platformInfo.isElectron || !!process.env.ALLOW_DBGATE_PRIVATE_CLOUD,
|
||||
...currentVersion,
|
||||
redirectToDbGateCloudLogin: !!process.env.REDIRECT_TO_DBGATE_CLOUD_LOGIN,
|
||||
preferrendLanguage: settingsConfig?.['storage.language'] || process.env.LANGUAGE || null,
|
||||
};
|
||||
|
||||
return configResult;
|
||||
|
||||
@@ -14,7 +14,11 @@ const JsonLinesDatabase = require('../utility/JsonLinesDatabase');
|
||||
const processArgs = require('../utility/processArgs');
|
||||
const { safeJsonParse, getLogger, extractErrorLogData } = require('dbgate-tools');
|
||||
const platformInfo = require('../utility/platformInfo');
|
||||
const { connectionHasPermission, testConnectionPermission, loadPermissionsFromRequest } = require('../utility/hasPermission');
|
||||
const {
|
||||
connectionHasPermission,
|
||||
testConnectionPermission,
|
||||
loadPermissionsFromRequest,
|
||||
} = require('../utility/hasPermission');
|
||||
const pipeForkLogs = require('../utility/pipeForkLogs');
|
||||
const requireEngineDriver = require('../utility/requireEngineDriver');
|
||||
const { getAuthProviderById } = require('../auth/authProvider');
|
||||
@@ -116,7 +120,10 @@ function getPortalCollections() {
|
||||
}
|
||||
}
|
||||
|
||||
logger.info({ connections: connections.map(pickSafeConnectionInfo) }, 'DBGM-00005 Using connections from ENV variables');
|
||||
logger.info(
|
||||
{ connections: connections.map(pickSafeConnectionInfo) },
|
||||
'DBGM-00005 Using connections from ENV variables'
|
||||
);
|
||||
const noengine = connections.filter(x => !x.engine);
|
||||
if (noengine.length > 0) {
|
||||
logger.warn(
|
||||
@@ -502,7 +509,11 @@ module.exports = {
|
||||
state,
|
||||
client: 'web',
|
||||
});
|
||||
res.redirect(authResp.url);
|
||||
if (authResp?.url) {
|
||||
res.redirect(authResp.url);
|
||||
return;
|
||||
}
|
||||
res.json({ error: 'No URL returned from auth provider' });
|
||||
},
|
||||
|
||||
dbloginApp_meta: true,
|
||||
|
||||
@@ -1533,6 +1533,12 @@ module.exports = {
|
||||
"columnName": "name",
|
||||
"dataType": "varchar(250)",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"pureName": "team_file_types",
|
||||
"columnName": "format",
|
||||
"dataType": "varchar(50)",
|
||||
"notNull": false
|
||||
}
|
||||
],
|
||||
"foreignKeys": [],
|
||||
@@ -1549,7 +1555,13 @@ module.exports = {
|
||||
"preloadedRows": [
|
||||
{
|
||||
"id": -1,
|
||||
"name": "sql"
|
||||
"name": "sql",
|
||||
"format": "text"
|
||||
},
|
||||
{
|
||||
"id": -2,
|
||||
"name": "diagrams",
|
||||
"format": "json"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -193,7 +193,7 @@ async function getCloudSigninHeaders(holder = null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
async function updateCloudFiles(isRefresh) {
|
||||
async function updateCloudFiles(isRefresh, language) {
|
||||
let lastCloudFilesTags;
|
||||
try {
|
||||
lastCloudFilesTags = await fs.readFile(path.join(datadir(), 'cloud-files-tags.txt'), 'utf-8');
|
||||
@@ -218,6 +218,7 @@ async function updateCloudFiles(isRefresh) {
|
||||
...getLicenseHttpHeaders(),
|
||||
...(await getCloudInstanceHeaders()),
|
||||
'x-app-version': currentVersion.version,
|
||||
'x-app-language': language || 'en',
|
||||
},
|
||||
}
|
||||
);
|
||||
@@ -274,7 +275,7 @@ async function ensurePromoWidgetDataLoaded() {
|
||||
promoWidgetDataLoaded = true;
|
||||
}
|
||||
|
||||
async function updatePremiumPromoWidget() {
|
||||
async function updatePremiumPromoWidget(language) {
|
||||
await ensurePromoWidgetDataLoaded();
|
||||
|
||||
const tags = (await collectCloudFilesSearchTags()).join(',');
|
||||
@@ -286,6 +287,7 @@ async function updatePremiumPromoWidget() {
|
||||
...getLicenseHttpHeaders(),
|
||||
...(await getCloudInstanceHeaders()),
|
||||
'x-app-version': currentVersion.version,
|
||||
'x-app-language': language || 'en',
|
||||
},
|
||||
}
|
||||
);
|
||||
@@ -300,18 +302,21 @@ async function updatePremiumPromoWidget() {
|
||||
socket.emitChanged(`promo-widget-changed`);
|
||||
}
|
||||
|
||||
async function refreshPublicFiles(isRefresh) {
|
||||
async function refreshPublicFiles(isRefresh, uiLanguage) {
|
||||
const language = platformInfo.isElectron
|
||||
? (await config.getCachedSettings())?.['localization.language'] || 'en'
|
||||
: uiLanguage;
|
||||
if (!cloudFiles) {
|
||||
await loadCloudFiles();
|
||||
}
|
||||
try {
|
||||
await updateCloudFiles(isRefresh);
|
||||
await updateCloudFiles(isRefresh, language);
|
||||
} catch (err) {
|
||||
logger.error(extractErrorLogData(err), 'DBGM-00166 Error updating cloud files');
|
||||
}
|
||||
const configSettings = await config.get();
|
||||
if (!isProApp() || configSettings?.trialDaysLeft != null) {
|
||||
await updatePremiumPromoWidget();
|
||||
await updatePremiumPromoWidget(language);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"blueimp-md5": "^2.19.0",
|
||||
"dbgate-query-splitter": "^4.11.7",
|
||||
"dbgate-query-splitter": "^4.11.9",
|
||||
"dbgate-sqltree": "^6.0.0-alpha.1",
|
||||
"debug": "^4.3.4",
|
||||
"json-stable-stringify": "^1.0.1",
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
"chartjs-plugin-datalabels": "^2.2.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"dbgate-datalib": "^6.0.0-alpha.1",
|
||||
"dbgate-query-splitter": "^4.11.7",
|
||||
"dbgate-query-splitter": "^4.11.9",
|
||||
"dbgate-sqltree": "^6.0.0-alpha.1",
|
||||
"dbgate-tools": "^6.0.0-alpha.1",
|
||||
"dbgate-types": "^6.0.0-alpha.1",
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
initializeAppUpdates();
|
||||
installCloudListeners();
|
||||
refreshPublicCloudFiles();
|
||||
saveSelectedLanguageToCache();
|
||||
saveSelectedLanguageToCache(config.preferrendLanguage);
|
||||
|
||||
const electron = getElectron();
|
||||
if (electron) {
|
||||
|
||||
@@ -396,17 +396,17 @@
|
||||
functionName: 'tableReader',
|
||||
},
|
||||
hasPermission('dbops/model/edit') && {
|
||||
label: _t('dbObject.dropCollection', { defaultMessage: 'Drop collection/container'}),
|
||||
label: _t('dbObject.dropCollection', { defaultMessage: 'Drop collection/container' }),
|
||||
isDropCollection: true,
|
||||
requiresWriteAccess: true,
|
||||
},
|
||||
hasPermission('dbops/table/rename') && {
|
||||
label: _t('dbObject.renameCollection', { defaultMessage: 'Rename collection/container'}),
|
||||
label: _t('dbObject.renameCollection', { defaultMessage: 'Rename collection/container' }),
|
||||
isRenameCollection: true,
|
||||
requiresWriteAccess: true,
|
||||
},
|
||||
hasPermission('dbops/table/backup') && {
|
||||
label: _t('dbObject.createCollectionBackup', { defaultMessage: 'Create collection/container backup'}),
|
||||
label: _t('dbObject.createCollectionBackup', { defaultMessage: 'Create collection/container backup' }),
|
||||
isDuplicateCollection: true,
|
||||
requiresWriteAccess: true,
|
||||
},
|
||||
@@ -590,7 +590,10 @@
|
||||
});
|
||||
} else if (menu.isDropCollection) {
|
||||
showModal(ConfirmModal, {
|
||||
message: _t('dbObject.confirmDropCollection', { defaultMessage: 'Really drop collection {name}?', values: { name: data.pureName } }),
|
||||
message: _t('dbObject.confirmDropCollection', {
|
||||
defaultMessage: 'Really drop collection {name}?',
|
||||
values: { name: data.pureName },
|
||||
}),
|
||||
onConfirm: async () => {
|
||||
const dbid = _.pick(data, ['conid', 'database']);
|
||||
runOperationOnDatabase(dbid, {
|
||||
@@ -621,7 +624,10 @@
|
||||
const driver = await getDriver();
|
||||
|
||||
showModal(ConfirmModal, {
|
||||
message: _t('dbObject.confirmCloneCollection', { defaultMessage: 'Really create collection/container copy named {name}?', values: { name: newName } }),
|
||||
message: _t('dbObject.confirmCloneCollection', {
|
||||
defaultMessage: 'Really create collection/container copy named {name}?',
|
||||
values: { name: newName },
|
||||
}),
|
||||
onConfirm: async () => {
|
||||
const dbid = _.pick(data, ['conid', 'database']);
|
||||
runOperationOnDatabase(dbid, {
|
||||
@@ -721,9 +727,7 @@
|
||||
if (!item.submenu) {
|
||||
if (!item) return item;
|
||||
|
||||
return {...item,
|
||||
label: _tval(item.label)
|
||||
};
|
||||
return { ...item, label: _tval(item.label) };
|
||||
}
|
||||
return {
|
||||
...item,
|
||||
@@ -773,7 +777,9 @@
|
||||
openNewTab(
|
||||
{
|
||||
// title: getObjectTitle(connection, schemaName, pureName),
|
||||
title: tabComponent ? getObjectTitle(connection, schemaName, pureName) : _t('dbObject.query', { defaultMessage: 'Query #' }),
|
||||
title: tabComponent
|
||||
? getObjectTitle(connection, schemaName, pureName)
|
||||
: _t('dbObject.query', { defaultMessage: 'Query #' }),
|
||||
focused: tabComponent == null,
|
||||
tooltip,
|
||||
icon:
|
||||
@@ -1040,6 +1046,7 @@
|
||||
import { getSupportedScriptTemplates } from '../utility/applyScriptTemplate';
|
||||
import { getBoolSettingsValue, getOpenDetailOnArrowsSettings } from '../settings/settingsTools';
|
||||
import { isProApp } from '../utility/proTools';
|
||||
import formatFileSize from '../utility/formatFileSize';
|
||||
|
||||
export let data;
|
||||
export let passProps;
|
||||
@@ -1068,6 +1075,9 @@
|
||||
if (data.tableRowCount != null) {
|
||||
res.push(`${formatRowCount(data.tableRowCount)} rows`);
|
||||
}
|
||||
if (data.sizeBytes) {
|
||||
res.push(formatFileSize(data.sizeBytes));
|
||||
}
|
||||
if (data.tableEngine) {
|
||||
res.push(data.tableEngine);
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@ registerCommand({
|
||||
toolbar: true,
|
||||
icon: 'icon new-connection',
|
||||
toolbarName: __t('command.new.connection', { defaultMessage: 'Add connection' }),
|
||||
category: __t('command.new', { defaultMessage: 'New'}),
|
||||
category: __t('command.new', { defaultMessage: 'New' }),
|
||||
toolbarOrder: 1,
|
||||
name: __t('command.new.connection', { defaultMessage: 'Connection' }),
|
||||
testEnabled: () => !getCurrentConfig()?.runAsPortal && !getCurrentConfig()?.storageDatabase,
|
||||
@@ -561,7 +561,10 @@ registerCommand({
|
||||
testEnabled: () => true,
|
||||
onClick: () => {
|
||||
showModal(ConfirmModal, {
|
||||
message: _t('command.file.resetLayoutConfirm', { defaultMessage: 'Really reset layout data? All opened tabs, settings and layout data will be lost. Connections and saved files will be preserved. After this, restart DbGate for applying changes.' }),
|
||||
message: _t('command.file.resetLayoutConfirm', {
|
||||
defaultMessage:
|
||||
'Really reset layout data? All opened tabs, settings and layout data will be lost. Connections and saved files will be preserved. After this, restart DbGate for applying changes.',
|
||||
}),
|
||||
onConfirm: async () => {
|
||||
await apiCall('config/delete-settings');
|
||||
localStorage.clear();
|
||||
@@ -665,7 +668,9 @@ registerCommand({
|
||||
'currentArchive',
|
||||
];
|
||||
for (const key of keys) removeLocalStorage(key);
|
||||
showSnackbarSuccess(_t('command.view.restart', { defaultMessage: 'Restart DbGate (or reload on web) for applying changes' }));
|
||||
showSnackbarSuccess(
|
||||
_t('command.view.restart', { defaultMessage: 'Restart DbGate (or reload on web) for applying changes' })
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
@@ -799,7 +804,9 @@ registerCommand({
|
||||
registerCommand({
|
||||
id: 'file.exit',
|
||||
category: __t('command.file', { defaultMessage: 'File' }),
|
||||
name: isMac() ? __t('command.file.quit', { defaultMessage: 'Quit' }) : __t('command.file.exit', { defaultMessage: 'Exit' }),
|
||||
name: isMac()
|
||||
? __t('command.file.quit', { defaultMessage: 'Quit' })
|
||||
: __t('command.file.exit', { defaultMessage: 'Exit' }),
|
||||
// keyText: isMac() ? 'Command+Q' : null,
|
||||
testEnabled: () => getElectron() != null,
|
||||
onClick: () => getElectron().send('quit-app'),
|
||||
@@ -862,6 +869,7 @@ export function registerFileCommands({
|
||||
undoRedo = false,
|
||||
executeAdditionalCondition = null,
|
||||
copyPaste = false,
|
||||
defaultTeamFolder = false,
|
||||
}) {
|
||||
if (save) {
|
||||
registerCommand({
|
||||
@@ -874,7 +882,7 @@ export function registerFileCommands({
|
||||
toolbar: true,
|
||||
isRelatedToTab: true,
|
||||
testEnabled: () => getCurrentEditor() != null,
|
||||
onClick: () => saveTabFile(getCurrentEditor(), 'save', folder, format, fileExtension),
|
||||
onClick: () => saveTabFile(getCurrentEditor(), 'save', folder, format, fileExtension, defaultTeamFolder),
|
||||
});
|
||||
registerCommand({
|
||||
id: idPrefix + '.saveAs',
|
||||
@@ -882,14 +890,14 @@ export function registerFileCommands({
|
||||
category,
|
||||
name: __t('command.saveAs', { defaultMessage: 'Save As' }),
|
||||
testEnabled: () => getCurrentEditor() != null,
|
||||
onClick: () => saveTabFile(getCurrentEditor(), 'save-as', folder, format, fileExtension),
|
||||
onClick: () => saveTabFile(getCurrentEditor(), 'save-as', folder, format, fileExtension, defaultTeamFolder),
|
||||
});
|
||||
registerCommand({
|
||||
id: idPrefix + '.saveToDisk',
|
||||
category,
|
||||
name: __t('command.saveToDisk', { defaultMessage: 'Save to disk' }),
|
||||
testEnabled: () => getCurrentEditor() != null && getElectron() != null,
|
||||
onClick: () => saveTabFile(getCurrentEditor(), 'save-to-disk', folder, format, fileExtension),
|
||||
onClick: () => saveTabFile(getCurrentEditor(), 'save-to-disk', folder, format, fileExtension, defaultTeamFolder),
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -86,14 +86,26 @@
|
||||
submenuKey += 1;
|
||||
return;
|
||||
}
|
||||
if (item.switchStore && item.switchValue) {
|
||||
item.switchStore.update(x => ({
|
||||
...x,
|
||||
[item.switchValue]: !x[item.switchValue],
|
||||
}));
|
||||
if (item.switchStore) {
|
||||
if (item.switchValue) {
|
||||
item.switchStore.update(x => ({
|
||||
...x,
|
||||
[item.switchValue]: !x[item.switchValue],
|
||||
}));
|
||||
}
|
||||
|
||||
if (item.switchOption && item.switchOptionValue) {
|
||||
item.switchStore.update(x => ({
|
||||
...x,
|
||||
[item.switchOption]: item.switchOptionValue,
|
||||
}));
|
||||
}
|
||||
switchIndex++;
|
||||
return;
|
||||
if (!item.closeOnSwitchClick) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
dispatchClose();
|
||||
if (onCloseParent) onCloseParent();
|
||||
if (item.onClick) item.onClick();
|
||||
@@ -163,6 +175,16 @@
|
||||
{/if}
|
||||
{/key}
|
||||
{/if}
|
||||
{#if item.switchOption && item.switchStoreGetter}
|
||||
{@const optionValue = item.switchStoreGetter()[item.switchOption]}
|
||||
{#key switchIndex}
|
||||
{#if optionValue === item.switchOptionValue || (item.switchOptionIsDefault && !optionValue)}
|
||||
<FontIcon icon="icon check" padRight />
|
||||
{:else}
|
||||
<FontIcon icon="icon invisible-box" padRight />
|
||||
{/if}
|
||||
{/key}
|
||||
{/if}
|
||||
{item.text || item.label}
|
||||
</span>
|
||||
{#if item.keyText}
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
import { closeCurrentModal, showModal } from './modalTools';
|
||||
import FormCloudFolderSelect from '../forms/FormCloudFolderSelect.svelte';
|
||||
import FormCheckboxField from '../forms/FormCheckboxField.svelte';
|
||||
import { useConfig } from '../utility/metadataLoaders';
|
||||
import { showSnackbarError } from '../utility/snackbar';
|
||||
|
||||
export let data;
|
||||
export let name;
|
||||
@@ -24,26 +26,39 @@
|
||||
export let onSave = undefined;
|
||||
export let folid;
|
||||
export let skipLocal = false;
|
||||
export let defaultTeamFolder = false;
|
||||
// export let cntid;
|
||||
|
||||
const values = writable({ name, cloudFolder: folid ?? '__local' });
|
||||
const configValue = useConfig();
|
||||
|
||||
const values = writable({
|
||||
name,
|
||||
cloudFolder: folid ?? '__local',
|
||||
saveToTeamFolder: !!(getCurrentConfig()?.storageDatabase && defaultTeamFolder),
|
||||
});
|
||||
|
||||
const electron = getElectron();
|
||||
|
||||
const handleSubmit = async e => {
|
||||
const { name, cloudFolder } = e.detail;
|
||||
if ($values['saveToTeamFolder']) {
|
||||
const { teamFileId } = await apiCall('team-files/create-new', { fileType: folder, file: name, data });
|
||||
closeCurrentModal();
|
||||
if (onSave) {
|
||||
onSave(name, {
|
||||
savedFile: name,
|
||||
savedFolder: folder,
|
||||
savedFilePath: null,
|
||||
savedCloudFolderId: null,
|
||||
savedCloudContentId: null,
|
||||
savedTeamFileId: teamFileId,
|
||||
});
|
||||
const resp = await apiCall('team-files/create-new', { fileType: folder, file: name, data });
|
||||
if (resp?.apiErrorMessage) {
|
||||
showSnackbarError(resp.apiErrorMessage);
|
||||
} else if (resp?.teamFileId) {
|
||||
closeCurrentModal();
|
||||
if (onSave) {
|
||||
onSave(name, {
|
||||
savedFile: name,
|
||||
savedFolder: folder,
|
||||
savedFilePath: null,
|
||||
savedCloudFolderId: null,
|
||||
savedCloudContentId: null,
|
||||
savedTeamFileId: resp.teamFileId,
|
||||
});
|
||||
}
|
||||
} else {
|
||||
showSnackbarError('Failed to save to team folder.');
|
||||
}
|
||||
} else if (cloudFolder === '__local') {
|
||||
await apiCall('files/save', { folder, file: name, data, format });
|
||||
@@ -124,7 +139,7 @@
|
||||
]}
|
||||
/>
|
||||
{/if}
|
||||
{#if getCurrentConfig().storageDatabase}
|
||||
{#if $configValue?.storageDatabase}
|
||||
<FormCheckboxField label="Save to team folder" name="saveToTeamFolder" />
|
||||
{/if}
|
||||
|
||||
|
||||
@@ -194,7 +194,10 @@ ORDER BY
|
||||
{ value: 'en', label: 'English' },
|
||||
{ value: 'es', label: 'Español' },
|
||||
{ value: 'fr', label: 'Français' },
|
||||
{ value: 'it', label: 'Italiano' },
|
||||
{ value: 'pt', label: 'Português (Brasil)' },
|
||||
{ value: 'sk', label: 'Slovenčina' },
|
||||
{ value: 'ja', label: '日本語' },
|
||||
{ value: 'zh', label: '中文' },
|
||||
]}
|
||||
defaultValue={getSelectedLanguage()}
|
||||
@@ -223,11 +226,13 @@ ORDER BY
|
||||
})}
|
||||
defaultValue="100"
|
||||
/>
|
||||
<FormCheckboxField
|
||||
name="dataGrid.showHintColumns"
|
||||
label={_t('settings.dataGrid.showHintColumns', { defaultMessage: 'Show foreign key hints' })}
|
||||
defaultValue={true}
|
||||
/>
|
||||
{#if isProApp()}
|
||||
<FormCheckboxField
|
||||
name="dataGrid.showHintColumns"
|
||||
label={_t('settings.dataGrid.showHintColumns', { defaultMessage: 'Show foreign key hints' })}
|
||||
defaultValue={true}
|
||||
/>
|
||||
{/if}
|
||||
<!-- <FormCheckboxField name="dataGrid.showHintColumns" label="Show foreign key hints" defaultValue={true} /> -->
|
||||
|
||||
<FormCheckboxField
|
||||
|
||||
@@ -200,6 +200,7 @@ export const DEFAULT_OBJECT_SEARCH_SETTINGS = {
|
||||
sqlObjectText: false,
|
||||
tableEngine: false,
|
||||
tablesWithRows: false,
|
||||
sortBy: undefined as string
|
||||
};
|
||||
|
||||
export const DEFAULT_CONNECTION_SEARCH_SETTINGS = {
|
||||
|
||||
@@ -758,7 +758,7 @@
|
||||
title="Upgrade to Premium"
|
||||
data-testid="TabsPanel_buttonUpgrade"
|
||||
>
|
||||
<FontIcon icon="icon premium" padRight /> Upgrade
|
||||
<FontIcon icon="icon premium" /> Upgrade
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
@@ -803,6 +803,9 @@
|
||||
cursor: pointer;
|
||||
font-size: 10pt;
|
||||
padding: 5px;
|
||||
margin-top: 3px;
|
||||
margin-right: 3px;
|
||||
font-size: 8pt;
|
||||
}
|
||||
.upgrade-button:hover {
|
||||
background: linear-gradient(135deg, #0f5a85, #5c1870);
|
||||
@@ -822,7 +825,7 @@
|
||||
}
|
||||
|
||||
.tabs-upgrade-button {
|
||||
right: 120px;
|
||||
right: 110px;
|
||||
}
|
||||
.tabs.can-split {
|
||||
right: 60px;
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
folder: 'diagrams',
|
||||
format: 'json',
|
||||
fileExtension: 'diagram',
|
||||
defaultTeamFolder: true,
|
||||
|
||||
undoRedo: true,
|
||||
});
|
||||
|
||||
@@ -52,6 +52,7 @@
|
||||
findReplace: true,
|
||||
executeAdditionalCondition: () => getCurrentEditor()?.hasConnection() && hasPermission('dbops/query'),
|
||||
copyPaste: true,
|
||||
defaultTeamFolder: true,
|
||||
});
|
||||
registerCommand({
|
||||
id: 'query.executeCurrent',
|
||||
|
||||
@@ -4,6 +4,9 @@ import de from '../../../translations/de.json';
|
||||
import fr from '../../../translations/fr.json';
|
||||
import es from '../../../translations/es.json';
|
||||
import zh from '../../../translations/zh.json';
|
||||
import pt from '../../../translations/pt.json';
|
||||
import it from '../../../translations/it.json';
|
||||
import ja from '../../../translations/ja.json';
|
||||
|
||||
import MessageFormat, { MessageFunction } from '@messageformat/core';
|
||||
import { getStringSettingsValue } from './settings/settingsTools';
|
||||
@@ -16,8 +19,11 @@ const translations = {
|
||||
sk,
|
||||
de,
|
||||
fr,
|
||||
es,
|
||||
zh,
|
||||
es,
|
||||
pt,
|
||||
it,
|
||||
ja,
|
||||
};
|
||||
const supportedLanguages = Object.keys(translations);
|
||||
|
||||
@@ -27,13 +33,16 @@ const defaultLanguage = 'en';
|
||||
|
||||
let selectedLanguageCache: string | null = null;
|
||||
|
||||
export function getSelectedLanguage(): string {
|
||||
export function getSelectedLanguage(preferrendLanguage?: string): string {
|
||||
if (selectedLanguageCache) return selectedLanguageCache;
|
||||
|
||||
// const browserLanguage = getBrowserLanguage();
|
||||
if (preferrendLanguage == 'auto') {
|
||||
preferrendLanguage = getBrowserLanguage();
|
||||
}
|
||||
|
||||
const selectedLanguage = getElectron()
|
||||
? getStringSettingsValue('localization.language', null)
|
||||
: localStorage.getItem('selectedLanguage');
|
||||
? getStringSettingsValue('localization.language', preferrendLanguage)
|
||||
: localStorage.getItem('selectedLanguage') ?? preferrendLanguage;
|
||||
|
||||
if (!selectedLanguage || !supportedLanguages.includes(selectedLanguage)) return defaultLanguage;
|
||||
return selectedLanguage;
|
||||
@@ -47,8 +56,8 @@ export async function setSelectedLanguage(language: string) {
|
||||
}
|
||||
}
|
||||
|
||||
export function saveSelectedLanguageToCache() {
|
||||
selectedLanguageCache = getSelectedLanguage();
|
||||
export function saveSelectedLanguageToCache(preferrendLanguage?: string) {
|
||||
selectedLanguageCache = getSelectedLanguage(preferrendLanguage);
|
||||
}
|
||||
|
||||
export function getBrowserLanguage(): string {
|
||||
|
||||
@@ -186,6 +186,7 @@ export async function apiCall(
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'x-api-session-id': getApiSessionId(),
|
||||
'x-ui-language': localStorage.getItem('selectedLanguage') || 'en',
|
||||
...resolveApiHeaders(),
|
||||
},
|
||||
body: JSON.stringify(args, serializeJsTypesReplacer),
|
||||
|
||||
@@ -11,7 +11,7 @@ import getElectron from './getElectron';
|
||||
// return derived(editorStore, editor => editor != null);
|
||||
// }
|
||||
|
||||
export default async function saveTabFile(editor, saveMode, folder, format, fileExtension) {
|
||||
export default async function saveTabFile(editor, saveMode, folder, format, fileExtension, defaultTeamFolder) {
|
||||
const tabs = get(openedTabs);
|
||||
const tabid = editor.activator.tabid;
|
||||
const data = editor.getData();
|
||||
@@ -94,6 +94,7 @@ export default async function saveTabFile(editor, saveMode, folder, format, file
|
||||
filePath: savedFilePath,
|
||||
onSave,
|
||||
folid: savedCloudFolderId,
|
||||
defaultTeamFolder,
|
||||
// cntid: savedCloudContentId,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -79,12 +79,30 @@
|
||||
|
||||
// $: console.log('OBJECTS', $objects);
|
||||
|
||||
$: sortArgs =
|
||||
$databaseObjectAppObjectSearchSettings.sortBy == 'rowCount'
|
||||
? [
|
||||
['rowCount', 'sizeBytes', 'schemaName', 'pureName'],
|
||||
['desc', 'desc', 'asc', 'asc'],
|
||||
]
|
||||
: $databaseObjectAppObjectSearchSettings.sortBy == 'sizeBytes'
|
||||
? [
|
||||
['sizeBytes', 'rowCount', 'schemaName', 'pureName'],
|
||||
['desc', 'desc', 'asc', 'asc'],
|
||||
]
|
||||
: [
|
||||
['schemaName', 'pureName'],
|
||||
['asc', 'asc'],
|
||||
];
|
||||
|
||||
$: objectList = _.flatten([
|
||||
...['tables', 'collections', 'views', 'matviews', 'procedures', 'functions', 'triggers', 'schedulerEvents'].map(
|
||||
objectTypeField =>
|
||||
_.sortBy(
|
||||
_.orderBy(
|
||||
(($objects || {})[objectTypeField] || []).map(obj => ({ ...obj, objectTypeField })),
|
||||
['schemaName', 'pureName']
|
||||
sortArgs[0],
|
||||
// @ts-ignore
|
||||
sortArgs[1]
|
||||
)
|
||||
),
|
||||
...appsForDb.map(app =>
|
||||
@@ -133,19 +151,62 @@
|
||||
const res = [];
|
||||
res.push({ label: _t('sqlObject.searchBy', { defaultMessage: 'Search by:' }), isBold: true, disabled: true });
|
||||
if (driver?.databaseEngineTypes?.includes('document')) {
|
||||
res.push({ label: _t('sqlObject.collectionName', { defaultMessage: 'Collection name' }), switchValue: 'pureName' });
|
||||
res.push({
|
||||
label: _t('sqlObject.collectionName', { defaultMessage: 'Collection name' }),
|
||||
switchValue: 'pureName',
|
||||
});
|
||||
}
|
||||
if (driver?.databaseEngineTypes?.includes('sql')) {
|
||||
res.push({ label: _t('sqlObject.tableViewProcedureName', { defaultMessage: 'Table/view/procedure name' }), switchValue: 'pureName' });
|
||||
res.push({
|
||||
label: _t('sqlObject.tableViewProcedureName', { defaultMessage: 'Table/view/procedure name' }),
|
||||
switchValue: 'pureName',
|
||||
});
|
||||
res.push({ label: _t('sqlObject.schemaName', { defaultMessage: 'Schema' }), switchValue: 'schemaName' });
|
||||
res.push({ label: _t('sqlObject.columnName', { defaultMessage: 'Column name' }), switchValue: 'columnName' });
|
||||
res.push({ label: _t('sqlObject.columnDataType', { defaultMessage: 'Column data type' }), switchValue: 'columnDataType' });
|
||||
res.push({ label: _t('sqlObject.tableComment', { defaultMessage: 'Table comment' }), switchValue: 'tableComment' });
|
||||
res.push({ label: _t('sqlObject.columnComment', { defaultMessage: 'Column comment' }), switchValue: 'columnComment' });
|
||||
res.push({ label: _t('sqlObject.viewProcedureTriggerText', { defaultMessage: 'View/procedure/trigger text' }), switchValue: 'sqlObjectText' });
|
||||
res.push({
|
||||
label: _t('sqlObject.columnDataType', { defaultMessage: 'Column data type' }),
|
||||
switchValue: 'columnDataType',
|
||||
});
|
||||
res.push({
|
||||
label: _t('sqlObject.tableComment', { defaultMessage: 'Table comment' }),
|
||||
switchValue: 'tableComment',
|
||||
});
|
||||
res.push({
|
||||
label: _t('sqlObject.columnComment', { defaultMessage: 'Column comment' }),
|
||||
switchValue: 'columnComment',
|
||||
});
|
||||
res.push({
|
||||
label: _t('sqlObject.viewProcedureTriggerText', { defaultMessage: 'View/procedure/trigger text' }),
|
||||
switchValue: 'sqlObjectText',
|
||||
});
|
||||
res.push({ label: _t('sqlObject.tableEngine', { defaultMessage: 'Table engine' }), switchValue: 'tableEngine' });
|
||||
res.push({ label: _t('sqlObject.tablesWithRows', { defaultMessage: 'Only tables with rows' }), switchValue: 'tablesWithRows' });
|
||||
res.push({
|
||||
label: _t('sqlObject.tablesWithRows', { defaultMessage: 'Only tables with rows' }),
|
||||
switchValue: 'tablesWithRows',
|
||||
});
|
||||
}
|
||||
|
||||
res.push({ label: _t('sqlObject.sortBy', { defaultMessage: 'Sort by:' }), isBold: true, disabled: true });
|
||||
res.push({
|
||||
label: _t('sqlObject.name', { defaultMessage: 'Name' }),
|
||||
switchOption: 'sortBy',
|
||||
switchOptionValue: 'name',
|
||||
switchOptionIsDefault: true,
|
||||
closeOnSwitchClick: true,
|
||||
});
|
||||
res.push({
|
||||
label: _t('sqlObject.rowCount', { defaultMessage: 'Row count' }),
|
||||
switchOption: 'sortBy',
|
||||
switchOptionValue: 'rowCount',
|
||||
closeOnSwitchClick: true,
|
||||
});
|
||||
res.push({
|
||||
label: _t('sqlObject.sizeBytes', { defaultMessage: 'Size (bytes)' }),
|
||||
switchOption: 'sortBy',
|
||||
switchOptionValue: 'sizeBytes',
|
||||
closeOnSwitchClick: true,
|
||||
});
|
||||
|
||||
return res.map(item => ({
|
||||
...item,
|
||||
switchStore: databaseObjectAppObjectSearchSettings,
|
||||
@@ -193,19 +254,25 @@
|
||||
|
||||
<WidgetsInnerContainer hideContent={differentFocusedDb}>
|
||||
<ErrorInfo
|
||||
message={_t('sqlObject.databaseEmpty', { defaultMessage: 'Database {database} is empty or structure is not loaded, press Refresh button to reload structure', values: { database } })}
|
||||
message={_t('sqlObject.databaseEmpty', {
|
||||
defaultMessage:
|
||||
'Database {database} is empty or structure is not loaded, press Refresh button to reload structure',
|
||||
values: { database },
|
||||
})}
|
||||
icon="img alert"
|
||||
/>
|
||||
<div class="m-1" />
|
||||
<InlineButton on:click={handleRefreshDatabase}>{_t('common.refresh', { defaultMessage: 'Refresh' })}</InlineButton>
|
||||
{#if driver?.databaseEngineTypes?.includes('sql')}
|
||||
<div class="m-1" />
|
||||
<InlineButton on:click={() => runCommand('new.table')}>{_t('database.newTable', { defaultMessage: 'New table' })}</InlineButton>
|
||||
<InlineButton on:click={() => runCommand('new.table')}
|
||||
>{_t('database.newTable', { defaultMessage: 'New table' })}</InlineButton
|
||||
>
|
||||
{/if}
|
||||
{#if driver?.databaseEngineTypes?.includes('document')}
|
||||
<div class="m-1" />
|
||||
<InlineButton on:click={() => runCommand('new.collection')}
|
||||
>{_t('sqlObject.newCollection', { defaultMessage: 'New collection/container'})}</InlineButton
|
||||
>{_t('sqlObject.newCollection', { defaultMessage: 'New collection/container' })}</InlineButton
|
||||
>
|
||||
{/if}
|
||||
</WidgetsInnerContainer>
|
||||
@@ -233,7 +300,7 @@
|
||||
{/if}
|
||||
<InlineButton
|
||||
on:click={handleRefreshDatabase}
|
||||
title={_t('sqlObjectList.refreshDatabase', { defaultMessage: "Refresh database connection and object list" })}
|
||||
title={_t('sqlObjectList.refreshDatabase', { defaultMessage: 'Refresh database connection and object list' })}
|
||||
square
|
||||
data-testid="SqlObjectList_refreshButton"
|
||||
>
|
||||
@@ -260,7 +327,10 @@
|
||||
data-testid="SqlObjectList_container"
|
||||
>
|
||||
{#if ($status && ($status.name == 'pending' || $status.name == 'checkStructure' || $status.name == 'loadStructure') && $objects) || !$objects}
|
||||
<LoadingInfo message={$status?.feedback?.analysingMessage || _t('sqlObject.loadingStructure', { defaultMessage: 'Loading database structure' })} />
|
||||
<LoadingInfo
|
||||
message={$status?.feedback?.analysingMessage ||
|
||||
_t('sqlObject.loadingStructure', { defaultMessage: 'Loading database structure' })}
|
||||
/>
|
||||
{:else}
|
||||
<AppObjectListHandler
|
||||
bind:this={domListHandler}
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
"dependencies": {
|
||||
"dbgate-tools": "^6.0.0-alpha.1",
|
||||
"lodash": "^4.17.21",
|
||||
"dbgate-query-splitter": "^4.11.7"
|
||||
"dbgate-query-splitter": "^4.11.9"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@duckdb/node-api": "^1.2.1-alpha.16"
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
"wkx": "^0.5.0",
|
||||
"pg-copy-streams": "^6.0.6",
|
||||
"node-firebird": "^1.1.9",
|
||||
"dbgate-query-splitter": "^4.11.7",
|
||||
"dbgate-query-splitter": "^4.11.9",
|
||||
"dbgate-tools": "^6.0.0-alpha.1",
|
||||
"lodash": "^4.17.21",
|
||||
"pg": "^8.11.5"
|
||||
|
||||
@@ -37,11 +37,12 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"bson": "^6.8.0",
|
||||
"dbgate-query-splitter": "^4.11.7",
|
||||
"dbgate-query-splitter": "^4.11.9",
|
||||
"dbgate-tools": "^6.0.0-alpha.1",
|
||||
"is-promise": "^4.0.0",
|
||||
"lodash": "^4.17.21",
|
||||
"mongodb": "^6.3.0",
|
||||
"mongodb-old": "npm:mongodb@6.16.0",
|
||||
"@mongosh/browser-runtime-electron": "^3.16.4",
|
||||
"@mongosh/service-provider-node-driver": "^3.10.2"
|
||||
},
|
||||
|
||||
@@ -16,12 +16,16 @@ class Analyser extends DatabaseAnalyser {
|
||||
collections
|
||||
.filter((x) => x.type == 'collection')
|
||||
.map((x) =>
|
||||
this.dbhan
|
||||
.getDatabase()
|
||||
.collection(x.name)
|
||||
.aggregate([{ $collStats: { count: {} } }])
|
||||
.toArray()
|
||||
.then((resp) => ({ name: x.name, count: resp[0].count }))
|
||||
this.dbhan
|
||||
.getDatabase()
|
||||
.collection(x.name)
|
||||
.aggregate([{ $collStats: { count: {}, storageStats: {} } }])
|
||||
.toArray()
|
||||
.then((resp) => ({
|
||||
name: x.name,
|
||||
count: resp[0].count,
|
||||
size: resp[0].storageStats?.size
|
||||
}))
|
||||
)
|
||||
);
|
||||
} catch (e) {
|
||||
@@ -29,11 +33,13 @@ class Analyser extends DatabaseAnalyser {
|
||||
stats = {};
|
||||
}
|
||||
|
||||
|
||||
const res = this.mergeAnalyseResult({
|
||||
collections: [
|
||||
...collections.map((x, index) => ({
|
||||
pureName: x.name,
|
||||
tableRowCount: stats[index]?.count,
|
||||
sizeBytes: stats[index]?.size,
|
||||
uniqueKey: [{ columnName: '_id' }],
|
||||
partitionKey: [{ columnName: '_id' }],
|
||||
clusterKey: [{ columnName: '_id' }],
|
||||
|
||||
+31
-21
@@ -1,10 +1,11 @@
|
||||
const _ = require('lodash');
|
||||
const { EventEmitter } = require('events');
|
||||
const stream = require('stream');
|
||||
const driverBase = require('../frontend/driver');
|
||||
const driverBases = require('../frontend/drivers');
|
||||
const Analyser = require('./Analyser');
|
||||
const isPromise = require('is-promise');
|
||||
const { MongoClient, ObjectId, AbstractCursor, Long } = require('mongodb');
|
||||
const mongodb = require('mongodb');
|
||||
const { ObjectId } = require('mongodb');
|
||||
const { EJSON } = require('bson');
|
||||
const { serializeJsTypesForJsonStringify, deserializeJsTypesFromJsonParse, getLogger } = require('dbgate-tools');
|
||||
const createBulkInsertStream = require('./createBulkInsertStream');
|
||||
@@ -18,7 +19,8 @@ let isProApp;
|
||||
|
||||
const logger = getLogger('mongoDriver');
|
||||
|
||||
function serializeMongoData(row) {
|
||||
function serializeMongoData(row, driverBase) {
|
||||
const { Long } = driverBase.useLegacyDriver ? require('mongodb-old') : mongodb;
|
||||
return EJSON.serialize(
|
||||
serializeJsTypesForJsonStringify(row, (value) => {
|
||||
if (value instanceof Long) {
|
||||
@@ -33,10 +35,10 @@ function serializeMongoData(row) {
|
||||
);
|
||||
}
|
||||
|
||||
async function readCursor(cursor, options) {
|
||||
async function readCursor(cursor, options, driverBase) {
|
||||
options.recordset({ __isDynamicStructure: true });
|
||||
await cursor.forEach((row) => {
|
||||
options.row(serializeMongoData(row));
|
||||
options.row(serializeMongoData(row, driverBase));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -86,8 +88,8 @@ async function getScriptableDb(dbhan) {
|
||||
// }
|
||||
// }
|
||||
|
||||
/** @type {import('dbgate-types').EngineDriver<MongoClient, import('mongodb').Db>} */
|
||||
const driver = {
|
||||
/** @type {import('dbgate-types').EngineDriver<import('mongodb').MongoClient, import('mongodb').Db>} */
|
||||
const drivers = driverBases.map((driverBase) => ({
|
||||
...driverBase,
|
||||
analyserClass: Analyser,
|
||||
async connect({ server, port, user, password, database, useDatabaseUrl, databaseUrl, ssl, useSshTunnel }) {
|
||||
@@ -120,6 +122,8 @@ const driver = {
|
||||
options.tlsInsecure = !ssl.rejectUnauthorized;
|
||||
}
|
||||
|
||||
const { MongoClient } = driverBase.useLegacyDriver ? require('mongodb-old') : mongodb;
|
||||
|
||||
const client = new MongoClient(mongoUrl, options);
|
||||
await client.connect();
|
||||
return {
|
||||
@@ -314,8 +318,10 @@ const driver = {
|
||||
return;
|
||||
}
|
||||
|
||||
const { AbstractCursor } = driverBase.useLegacyDriver ? require('mongodb-old') : mongodb;
|
||||
|
||||
if (exprValue instanceof AbstractCursor) {
|
||||
await readCursor(exprValue, options);
|
||||
await readCursor(exprValue, options, driverBase);
|
||||
} else if (isPromise(exprValue)) {
|
||||
try {
|
||||
const resValue = await exprValue;
|
||||
@@ -427,7 +433,7 @@ const driver = {
|
||||
const cursorStream = exprValue.stream();
|
||||
|
||||
cursorStream.on('data', (row) => {
|
||||
pass.write(serializeMongoData(row));
|
||||
pass.write(serializeMongoData(row, driverBase));
|
||||
});
|
||||
|
||||
// propagate error
|
||||
@@ -487,10 +493,12 @@ const driver = {
|
||||
let cursor = await collection.aggregate(deserializeMongoData(convertToMongoAggregate(options.aggregate)));
|
||||
const rows = await cursor.toArray();
|
||||
return {
|
||||
rows: rows.map(serializeMongoData).map((x) => ({
|
||||
...x._id,
|
||||
..._.omit(x, ['_id']),
|
||||
})),
|
||||
rows: rows
|
||||
.map((row) => serializeMongoData(row, driverBase))
|
||||
.map((x) => ({
|
||||
...x._id,
|
||||
..._.omit(x, ['_id']),
|
||||
})),
|
||||
};
|
||||
} else {
|
||||
// console.log('options.condition', JSON.stringify(options.condition, undefined, 2));
|
||||
@@ -500,7 +508,7 @@ const driver = {
|
||||
if (options.limit) cursor = cursor.limit(options.limit);
|
||||
const rows = await cursor.toArray();
|
||||
return {
|
||||
rows: rows.map(serializeMongoData),
|
||||
rows: rows.map((row) => serializeMongoData(row, driverBase)),
|
||||
};
|
||||
}
|
||||
} catch (err) {
|
||||
@@ -613,10 +621,12 @@ const driver = {
|
||||
]);
|
||||
const rows = await cursor.toArray();
|
||||
return _.uniqBy(
|
||||
rows.map(serializeMongoData).map(({ _id }) => {
|
||||
if (_.isArray(_id) || _.isPlainObject(_id)) return { value: null };
|
||||
return { value: _id };
|
||||
}),
|
||||
rows
|
||||
.map((row) => serializeMongoData(row, driverBase))
|
||||
.map(({ _id }) => {
|
||||
if (_.isArray(_id) || _.isPlainObject(_id)) return { value: null };
|
||||
return { value: _id };
|
||||
}),
|
||||
(x) => x.value
|
||||
);
|
||||
} catch (err) {
|
||||
@@ -753,10 +763,10 @@ const driver = {
|
||||
|
||||
return result;
|
||||
},
|
||||
};
|
||||
}));
|
||||
|
||||
driver.initialize = (dbgateEnv) => {
|
||||
drivers.initialize = (dbgateEnv) => {
|
||||
isProApp = dbgateEnv.isProApp;
|
||||
};
|
||||
|
||||
module.exports = driver;
|
||||
module.exports = drivers;
|
||||
@@ -1,4 +1,4 @@
|
||||
const driver = require('./driver');
|
||||
const drivers = require('./drivers');
|
||||
const {
|
||||
formatProfilerEntry,
|
||||
extractProfileTimestamp,
|
||||
@@ -7,13 +7,13 @@ const {
|
||||
|
||||
module.exports = {
|
||||
packageName: 'dbgate-plugin-mongo',
|
||||
drivers: [driver],
|
||||
drivers,
|
||||
functions: {
|
||||
formatProfilerEntry,
|
||||
extractProfileTimestamp,
|
||||
aggregateProfileChartEntry,
|
||||
},
|
||||
initialize(dbgateEnv) {
|
||||
driver.initialize(dbgateEnv);
|
||||
drivers.initialize(dbgateEnv);
|
||||
},
|
||||
};
|
||||
|
||||
+20
-5
@@ -16,9 +16,12 @@ function jsonStringifyWithObjectId(obj) {
|
||||
return JSON.stringify(obj, mongoReplacer, 2)
|
||||
.replace(/\{\s*\"\$oid\"\s*\:\s*\"([0-9a-f]+)\"\s*\}/g, (m, id) => `ObjectId("${id}")`)
|
||||
.replace(/\{\s*\"\$bigint\"\s*\:\s*\"([0-9]+)\"\s*\}/g, (m, num) => `${num}n`)
|
||||
.replace(/\{\s*"\$binary"\s*:\s*\{\s*"base64"\s*:\s*"([^"]+)"(?:\s*,\s*"subType"\s*:\s*"([0-9a-fA-F]{2})")?\s*\}\s*\}/g, (m, base64, subType) => {
|
||||
return `BinData(${parseInt(subType || "00", 16)}, "${base64}")`;
|
||||
});
|
||||
.replace(
|
||||
/\{\s*"\$binary"\s*:\s*\{\s*"base64"\s*:\s*"([^"]+)"(?:\s*,\s*"subType"\s*:\s*"([0-9a-fA-F]{2})")?\s*\}\s*\}/g,
|
||||
(m, base64, subType) => {
|
||||
return `BinData(${parseInt(subType || '00', 16)}, "${base64}")`;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/** @type {import('dbgate-types').SqlDialect} */
|
||||
@@ -34,7 +37,7 @@ const dialect = {
|
||||
};
|
||||
|
||||
/** @type {import('dbgate-types').EngineDriver} */
|
||||
const driver = {
|
||||
const mongoDriverBase = {
|
||||
...driverBase,
|
||||
dumperClass: Dumper,
|
||||
databaseEngineTypes: ['document'],
|
||||
@@ -193,4 +196,16 @@ const driver = {
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = driver;
|
||||
const mongoDriver = {
|
||||
...mongoDriverBase,
|
||||
};
|
||||
|
||||
const legacyMongoDriver = {
|
||||
...mongoDriverBase,
|
||||
engine: 'mongo-legacy@dbgate-plugin-mongo',
|
||||
title: 'MongoDB 4 - Legacy',
|
||||
premiumOnly: true,
|
||||
useLegacyDriver: true,
|
||||
};
|
||||
|
||||
module.exports = [mongoDriver, legacyMongoDriver];
|
||||
@@ -1,9 +1,9 @@
|
||||
import driver from './driver';
|
||||
import drivers from './drivers';
|
||||
import { formatProfilerEntry, extractProfileTimestamp, aggregateProfileChartEntry } from './profilerFunctions';
|
||||
|
||||
export default {
|
||||
packageName: 'dbgate-plugin-mongo',
|
||||
drivers: [driver],
|
||||
drivers,
|
||||
functions: {
|
||||
formatProfilerEntry,
|
||||
extractProfileTimestamp,
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
"dependencies": {
|
||||
"@azure/identity": "^4.6.0",
|
||||
"async-lock": "^1.2.6",
|
||||
"dbgate-query-splitter": "^4.11.7",
|
||||
"dbgate-query-splitter": "^4.11.9",
|
||||
"dbgate-tools": "^6.0.0-alpha.1",
|
||||
"lodash": "^4.17.21",
|
||||
"tedious": "^18.6.1"
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
"webpack-cli": "^5.1.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"dbgate-query-splitter": "^4.11.7",
|
||||
"dbgate-query-splitter": "^4.11.9",
|
||||
"dbgate-tools": "^6.0.0-alpha.1",
|
||||
"lodash": "^4.17.21",
|
||||
"mysql2": "^3.11.3"
|
||||
|
||||
@@ -3,6 +3,7 @@ select
|
||||
TABLE_NAME as pureName,
|
||||
TABLE_TYPE as objectType,
|
||||
TABLE_ROWS as tableRowCount,
|
||||
DATA_LENGTH + INDEX_LENGTH as sizeBytes,
|
||||
case when ENGINE='InnoDB' then CREATE_TIME else coalesce(UPDATE_TIME, CREATE_TIME) end as modifyDate
|
||||
from information_schema.tables
|
||||
where TABLE_SCHEMA = '#DATABASE#'
|
||||
|
||||
@@ -4,6 +4,7 @@ select
|
||||
TABLE_ROWS as tableRowCount,
|
||||
ENGINE as tableEngine,
|
||||
TABLE_COMMENT as objectComment,
|
||||
DATA_LENGTH + INDEX_LENGTH as sizeBytes,
|
||||
case when ENGINE='InnoDB' then CREATE_TIME else coalesce(UPDATE_TIME, CREATE_TIME) end as modifyDate
|
||||
from information_schema.tables
|
||||
where TABLE_SCHEMA = '#DATABASE#' and (TABLE_TYPE='BASE TABLE' or TABLE_TYPE='SYSTEM VERSIONED') and TABLE_NAME =OBJECT_ID_CONDITION;
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
"webpack-cli": "^5.1.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"dbgate-query-splitter": "^4.11.7",
|
||||
"dbgate-query-splitter": "^4.11.9",
|
||||
"dbgate-tools": "^6.0.0-alpha.1",
|
||||
"lodash": "^4.17.21"
|
||||
},
|
||||
|
||||
@@ -131,6 +131,8 @@ class Analyser extends DatabaseAnalyser {
|
||||
// schemaName: table.schema_name,
|
||||
objectId: `tables:${table.pure_name}`,
|
||||
contentHash: table.hash_code_columns ? `${table.hash_code_columns}-${table.hash_code_constraints}` : null,
|
||||
sizeBytes: table.size_bytes,
|
||||
tableRowCount: table.table_row_count,
|
||||
};
|
||||
return {
|
||||
...newTable,
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
module.exports = `
|
||||
select
|
||||
-- owner "schema_name",
|
||||
table_name "pure_name"
|
||||
table_name "pure_name",
|
||||
num_rows * avg_row_len "size_bytes",
|
||||
num_rows "table_row_count"
|
||||
from
|
||||
all_tables
|
||||
where OWNER='$owner' AND 'tables:' || TABLE_NAME =OBJECT_ID_CONDITION
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
"dependencies": {
|
||||
"wkx": "^0.5.0",
|
||||
"pg-copy-streams": "^6.0.6",
|
||||
"dbgate-query-splitter": "^4.11.7",
|
||||
"dbgate-query-splitter": "^4.11.9",
|
||||
"dbgate-tools": "^6.0.0-alpha.1",
|
||||
"lodash": "^4.17.21",
|
||||
"pg": "^8.11.5"
|
||||
|
||||
@@ -255,6 +255,7 @@ class Analyser extends DatabaseAnalyser {
|
||||
const newTable = {
|
||||
pureName: table.pure_name,
|
||||
schemaName: table.schema_name,
|
||||
sizeBytes: table.size_bytes,
|
||||
objectId: `tables:${table.schema_name}.${table.pure_name}`,
|
||||
contentHash: table.hash_code_columns ? `${table.hash_code_columns}-${table.hash_code_constraints}` : null,
|
||||
};
|
||||
@@ -410,6 +411,7 @@ class Analyser extends DatabaseAnalyser {
|
||||
objectId: `tables:${x.schema_name}.${x.pure_name}`,
|
||||
pureName: x.pure_name,
|
||||
schemaName: x.schema_name,
|
||||
sizeBytes: x.size_bytes,
|
||||
contentHash: `${x.hash_code_columns}-${x.hash_code_constraints}`,
|
||||
}))
|
||||
: null,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
module.exports = `
|
||||
select infoTables.table_schema as "schema_name", infoTables.table_name as "pure_name"
|
||||
select infoTables.table_schema as "schema_name", infoTables.table_name as "pure_name",
|
||||
pg_relation_size('"'||infoTables.table_schema||'"."'||infoTables.table_name||'"') as "size_bytes"
|
||||
from information_schema.tables infoTables
|
||||
where infoTables.table_type not like '%VIEW%'
|
||||
and ('tables:' || infoTables.table_schema || '.' || infoTables.table_name) =OBJECT_ID_CONDITION
|
||||
|
||||
@@ -16,7 +16,8 @@ select infoTables.table_schema as "schema_name", infoTables.table_name as "pure_
|
||||
)) as "hash_code_constraints"
|
||||
from information_schema.table_constraints infoConstraints
|
||||
where infoConstraints.table_schema = infoTables.table_schema and infoConstraints.table_name = infoTables.table_name
|
||||
)
|
||||
),
|
||||
pg_relation_size('"'||infoTables.table_schema||'"."'||infoTables.table_name||'"') as "size_bytes"
|
||||
|
||||
from information_schema.tables infoTables
|
||||
where infoTables.table_type not like '%VIEW%'
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
"webpack-cli": "^5.1.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"dbgate-query-splitter": "^4.11.7",
|
||||
"dbgate-query-splitter": "^4.11.9",
|
||||
"dbgate-tools": "^6.0.0-alpha.1",
|
||||
"lodash": "^4.17.21",
|
||||
"async": "^3.2.3",
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
"dependencies": {
|
||||
"dbgate-tools": "^6.0.0-alpha.1",
|
||||
"lodash": "^4.17.21",
|
||||
"dbgate-query-splitter": "^4.11.7"
|
||||
"dbgate-query-splitter": "^4.11.9"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"libsql": "0.5.0-pre.6",
|
||||
|
||||
+102
-1
@@ -3,6 +3,11 @@
|
||||
"app.loading_plugin": "Načítám plugin {plugin} ...",
|
||||
"app.preparingPlugins": "Příprava pluginů...",
|
||||
"app.starting": "Spouštění DbGate",
|
||||
"cellDataWidget.autodetect": "Autodetekce - {autoDetectTitle}",
|
||||
"cellDataWidget.formatNotSelected": "Formát není vybrán",
|
||||
"cellDataWidget.mustSelectOneCell": "Musí být vybrána jedna buňka",
|
||||
"cellDataWidget.noDataSelected": "Nejsou vybrána žádná data",
|
||||
"cellDataWidget.title": "Zobrazení dat buňky",
|
||||
"chart.detect": "Rozpoznat graf",
|
||||
"chart.open": "Otevřít graf",
|
||||
"clipboard.SQLInsert": "SQL INSERT příkazy",
|
||||
@@ -40,6 +45,10 @@
|
||||
"columnEditor.isSparse": "Řídký",
|
||||
"columnEditor.isUnsigned": "Bez znaménka",
|
||||
"columnEditor.isZerofill": "Doplňování nul",
|
||||
"columnLine.addReference": "Přidat referenci",
|
||||
"columnLine.sortAscending": "Seřadit vzestupně",
|
||||
"columnLine.sortDescending": "Seřadit sestupně",
|
||||
"columnLine.unsort": "Zrušit řazení",
|
||||
"columnsConstraintEditor.addNewColumn": "Přidat nový sloupec",
|
||||
"columnsConstraintEditor.chooseColumn": "Vybrat sloupec",
|
||||
"columnsConstraintEditor.selectColumn": "Vybrat sloupec",
|
||||
@@ -289,6 +298,7 @@
|
||||
"commandModal.showKeyCombination": "Zadejte požadovanou kombinaci kláves a stiskněte ENTER",
|
||||
"common.addNew": "Přidat nový",
|
||||
"common.advanced": "Pokročilé",
|
||||
"common.allFields": "Všechny {field}",
|
||||
"common.archive": "Archiv (JSONL)",
|
||||
"common.cancel": "Zrušit",
|
||||
"common.close": "Zavřít",
|
||||
@@ -315,6 +325,7 @@
|
||||
"common.kill": "Ukončit",
|
||||
"common.loadingData": "Načítání dat",
|
||||
"common.name": "Název",
|
||||
"common.newConnection": "Nové připojení",
|
||||
"common.notSelectedOptional": "(nezvoleno - volitelné)",
|
||||
"common.parameters": "Parametry",
|
||||
"common.passwordEncrypted": "Heslo je zašifrované",
|
||||
@@ -324,6 +335,7 @@
|
||||
"common.queryEditor": "Editor SQL dotazů",
|
||||
"common.refresh": "Obnovit",
|
||||
"common.remove": "Odstranit",
|
||||
"common.removeAll": "Odstranit vše",
|
||||
"common.reset": "Resetovat",
|
||||
"common.save": "Uložit",
|
||||
"common.saveAndNext": "Uložit a další",
|
||||
@@ -331,6 +343,7 @@
|
||||
"common.schema": "Schéma",
|
||||
"common.search": "Hledat",
|
||||
"common.searchBy": "Hledat podle:",
|
||||
"common.server": "Server",
|
||||
"common.sqlGenerator": "SQL Generátor",
|
||||
"common.table": "Tabulka",
|
||||
"common.testingConnection": "Testování připojení",
|
||||
@@ -574,6 +587,12 @@
|
||||
"dbObject.triggers": "Triggery",
|
||||
"dbObject.truncateTable": "Vyprázdnit tabulku",
|
||||
"dbObject.views": "Pohledy",
|
||||
"designerTable.addReferences": "Přidat reference",
|
||||
"designerTable.changeColor": "Změnit barvu",
|
||||
"designerTable.defineVirtualForeignKey": "Definovat virtuální cizí klíč",
|
||||
"designerTable.newAlias": "Nový alias",
|
||||
"designerTable.removeTableAlias": "Odstranit alias tabulky",
|
||||
"designerTable.setTableAlias": "Nastavit alias tabulky",
|
||||
"error.driverNotFound": "Neplatné připojení k databázi, ovladač nebyl nalezen",
|
||||
"error.selectedCloudConnection": "Vybrané připojení je z DbGate cloudu",
|
||||
"error.selectedNotCloudConnection": "Vybrané připojení není z DbGate cloudu",
|
||||
@@ -588,6 +607,15 @@
|
||||
"file.queryDesignerFiles": "Soubory návrháře dotazů",
|
||||
"file.sqlFiles": "Soubory SQL",
|
||||
"file.sqliteDatabase": "Databáze SQLite",
|
||||
"files.allSupportedFiles": "Všechny podporované soubory",
|
||||
"files.favorites": "Oblíbené",
|
||||
"files.openFile": "Otevřít soubor",
|
||||
"files.refreshFiles": "Obnovit soubory",
|
||||
"files.savedFiles": "Uložené soubory",
|
||||
"files.searchSavedFiles": "Hledat v uložených souborech",
|
||||
"files.sqlFiles": "Soubory SQL",
|
||||
"files.teamFiles": "Týmové soubory",
|
||||
"files.uploadFile": "Nahrát soubor",
|
||||
"filter.after": "Po...",
|
||||
"filter.and": "A",
|
||||
"filter.arrayIsEmpty": "Pole je prázdné",
|
||||
@@ -669,16 +697,69 @@
|
||||
"foreignKeyEditor.refColumn": "Referenční sloupec - ",
|
||||
"foreignKeyEditor.referencedTable": "Odkazovaná tabulka",
|
||||
"foreignKeyEditor.tableNotSet": "(tabulka není nastavena)",
|
||||
"history.queryHistory": "Historie dotazů",
|
||||
"history.recentlyClosedTabs": "Nedávno zavřené karty",
|
||||
"history.searchQueryHistory": "Hledat v historii dotazů",
|
||||
"importExport.action": "Akce",
|
||||
"importExport.addWebUrl": "Přidat webovou URL",
|
||||
"importExport.advancedConfiguration": "Pokročilá konfigurace",
|
||||
"importExport.archiveFolder": "Složka archivu",
|
||||
"importExport.columns": "Sloupce",
|
||||
"importExport.createZipFileInArchive": "Vytvořit ZIP soubor v archivu",
|
||||
"importExport.currentArchive": "Aktuální archiv",
|
||||
"importExport.currentDatabase": "Aktuální DB",
|
||||
"importExport.dragDropImportedFilesHere": "Přetáhněte sem importované soubory",
|
||||
"importExport.exportToZipArchive": "Exportovat do ZIP archivu",
|
||||
"importExport.exportToZipFile": "Exportovat do ZIP souboru",
|
||||
"importExport.generateScript": "Vygenerovat skript",
|
||||
"importExport.importFromZipArchive": "Importovat z ZIP archivu",
|
||||
"importExport.importFromZipFile": "Importovat z ZIP souboru (v archivní složce)",
|
||||
"importExport.mapSourceTablesFiles": "Mapovat zdrojové tabulky/soubory",
|
||||
"importExport.messages": "Zprávy",
|
||||
"importExport.newArchive": "Nový archiv",
|
||||
"importExport.outputFiles": "Výstupní soubory",
|
||||
"importExport.preview": "Náhled",
|
||||
"importExport.processingImportExport": "Zpracovávání importu/exportu ...",
|
||||
"importExport.run": "Spustit",
|
||||
"importExport.schedule": "Plán",
|
||||
"importExport.source": "Zdroj",
|
||||
"importExport.sourceConfiguration": "Konfigurace zdroje",
|
||||
"importExport.sourceFiles": "Zdrojové soubory",
|
||||
"importExport.startVariableIndex": "Počáteční index proměnné",
|
||||
"importExport.status": "Stav",
|
||||
"importExport.stop": "Zastavit",
|
||||
"importExport.storageType": "Typ úložiště",
|
||||
"importExport.tablesViewsCollections": "Tabulky / pohledy / kolekce",
|
||||
"importExport.target": "Cíl",
|
||||
"importExport.targetConfiguration": "Konfigurace cíle",
|
||||
"indexEditor.filteredIndexCondition": "Podmínka filtrovaného indexu",
|
||||
"indexEditor.indexName": "Název indexu",
|
||||
"indexEditor.isUnique": "Je jedinečný index",
|
||||
"logs.autoScroll": "Automatické posouvání",
|
||||
"logs.caller": "Volající:",
|
||||
"logs.callerTab": "Volající",
|
||||
"logs.chooseDate": "Vyberte datum",
|
||||
"logs.codeTab": "Kód",
|
||||
"logs.connectionId": "ID připojení:",
|
||||
"logs.connectionTab": "Připojení",
|
||||
"logs.database": "Databáze:",
|
||||
"logs.databaseTab": "Databáze",
|
||||
"logs.date": "Datum:",
|
||||
"logs.dateTab": "Datum",
|
||||
"logs.details": "Detaily",
|
||||
"logs.engine": "Engine:",
|
||||
"logs.engineTab": "Engine",
|
||||
"logs.loadingNextRows": "Načítání dalších řádků...",
|
||||
"logs.message": "Zpráva:",
|
||||
"logs.messageCode": "Kód zprávy:",
|
||||
"logs.messageTab": "Zpráva",
|
||||
"logs.name": "Název:",
|
||||
"logs.nameTab": "Název",
|
||||
"logs.noDataForSelectedDate": "Pro vybrané datum nejsou k dispozici žádná data",
|
||||
"logs.recentLogs": "Nedávné logy",
|
||||
"logs.refresh": "Obnovit",
|
||||
"logs.time": "Čas:",
|
||||
"logs.timeTab": "Čas",
|
||||
"menu.edit": "Upravit",
|
||||
"menu.file": "Soubor",
|
||||
"menu.help": "Nápověda",
|
||||
@@ -703,6 +784,11 @@
|
||||
"newObject.sqlGeneratorDisabled": "SQL generátor není pro aktuální databázi k dispozici",
|
||||
"newObject.tableDescription": "Vytvořit tabulku v aktuální databázi",
|
||||
"newObject.tableDisabled": "Vytvoření tabulky není pro aktuální databázi k dispozici",
|
||||
"plugins.searchExtensionsOnWeb": "Hledat rozšíření na webu",
|
||||
"publicCloudWidget.onlyRelevantFilesListed": "Jsou zobrazeny pouze soubory relevantní pro vaše připojení, platformu a edici DbGate. Nejprve prosím definujte připojení.",
|
||||
"publicCloudWidget.refreshFiles": "Obnovit soubory",
|
||||
"publicCloudWidget.refreshList": "Obnovit seznam",
|
||||
"publicCloudWidget.searchPublicFiles": "Hledat veřejné soubory",
|
||||
"query.limitRows": "Omezit na {queryRowsLimit} řádků",
|
||||
"query.named": ":proměnná",
|
||||
"query.noParameters": "(žádné parametry)",
|
||||
@@ -819,10 +905,14 @@
|
||||
"sqlObject.columnName": "Název sloupce",
|
||||
"sqlObject.databaseEmpty": "Databáze {database} je prázdná nebo struktura není načtena, stiskněte tlačítko Obnovit pro znovunačtení struktury",
|
||||
"sqlObject.loadingStructure": "Načítání struktury databáze",
|
||||
"sqlObject.name": "Název",
|
||||
"sqlObject.newCollection": "Nová kolekce/kontejner",
|
||||
"sqlObject.rowCount": "Počet řádků",
|
||||
"sqlObject.schemaName": "Schéma",
|
||||
"sqlObject.search.placeholder": "Hledat v tabulkách, pohledech, procedurách",
|
||||
"sqlObject.searchBy": "Hledat podle:",
|
||||
"sqlObject.sizeBytes": "Velikost (bajty)",
|
||||
"sqlObject.sortBy": "Seřadit podle:",
|
||||
"sqlObject.tableComment": "Komentář tabulky",
|
||||
"sqlObject.tableEngine": "Engine tabulky",
|
||||
"sqlObject.tableViewProcedureName": "Název tabulky/pohledu/procedury",
|
||||
@@ -902,6 +992,17 @@
|
||||
"widget.keys": "Klíče",
|
||||
"widget.pinned": "Připnuté",
|
||||
"widget.tablesViewsFunctions": "Tabulky, pohledy, funkce",
|
||||
"widgets.addNew": "Přidat nový",
|
||||
"widgets.administration": "Administrace",
|
||||
"widgets.archive": "Archiv (uložená tabulková data)",
|
||||
"widgets.availableExtensions": "Dostupná rozšíření",
|
||||
"widgets.databaseConnections": "Databázová připojení",
|
||||
"widgets.dbgateCloud": "DbGate Cloud",
|
||||
"widgets.favoritesAndSavedFiles": "Oblíbené a uložené soubory",
|
||||
"widgets.installedExtensions": "Nainstalovaná rozšíření",
|
||||
"widgets.managePlugins": "Spravovat pluginy",
|
||||
"widgets.premiumPromo": "Premium promo",
|
||||
"widgets.queryHistoryAndClosedTabs": "Historie dotazů a zavřené karty",
|
||||
"widgets.selectedCellDataDetailView": "Detailní zobrazení dat vybrané buňky",
|
||||
"widgets.viewApplicationLogs": "Zobrazit aplikační logy"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,11 @@
|
||||
"app.loading_plugin": "Lade Plugin {plugin} ...",
|
||||
"app.preparingPlugins": "Plugins werden vorbereitet...",
|
||||
"app.starting": "Starte DbGate",
|
||||
"cellDataWidget.autodetect": "Automatisch erkennen - {autoDetectTitle}",
|
||||
"cellDataWidget.formatNotSelected": "Format nicht ausgewählt",
|
||||
"cellDataWidget.mustSelectOneCell": "Es muss eine Zelle ausgewählt sein",
|
||||
"cellDataWidget.noDataSelected": "Keine Daten ausgewählt",
|
||||
"cellDataWidget.title": "Zell-Datenansicht",
|
||||
"chart.detect": "Diagramm erkennen",
|
||||
"chart.open": "Diagramm öffnen",
|
||||
"clipboard.SQLInsert": "SQL INSERTs",
|
||||
@@ -40,6 +45,10 @@
|
||||
"columnEditor.isSparse": "Sparse",
|
||||
"columnEditor.isUnsigned": "Vorzeichenlos",
|
||||
"columnEditor.isZerofill": "Mit Nullen auffüllen",
|
||||
"columnLine.addReference": "Referenz hinzufügen",
|
||||
"columnLine.sortAscending": "Aufsteigend sortieren",
|
||||
"columnLine.sortDescending": "Absteigend sortieren",
|
||||
"columnLine.unsort": "Sortierung aufheben",
|
||||
"columnsConstraintEditor.addNewColumn": "Neue Spalte hinzufügen",
|
||||
"columnsConstraintEditor.chooseColumn": "Spalte auswählen",
|
||||
"columnsConstraintEditor.selectColumn": "Spalte auswählen",
|
||||
@@ -289,6 +298,7 @@
|
||||
"commandModal.showKeyCombination": "Gewünschte Tastenkombination eingeben und ENTER drücken",
|
||||
"common.addNew": "Neu hinzufügen",
|
||||
"common.advanced": "Erweitert",
|
||||
"common.allFields": "Alle {field}",
|
||||
"common.archive": "Archiv (JSONL)",
|
||||
"common.cancel": "Abbrechen",
|
||||
"common.close": "Schließen",
|
||||
@@ -315,6 +325,7 @@
|
||||
"common.kill": "Beenden",
|
||||
"common.loadingData": "Lade Daten",
|
||||
"common.name": "Name",
|
||||
"common.newConnection": "Neue Verbindung",
|
||||
"common.notSelectedOptional": "(nicht ausgewählt - optional)",
|
||||
"common.parameters": "Parameter",
|
||||
"common.passwordEncrypted": "Passwort ist verschlüsselt",
|
||||
@@ -324,6 +335,7 @@
|
||||
"common.queryEditor": "SQL-Abfrage-Editor",
|
||||
"common.refresh": "Aktualisieren",
|
||||
"common.remove": "Entfernen",
|
||||
"common.removeAll": "Alle entfernen",
|
||||
"common.reset": "Zurücksetzen",
|
||||
"common.save": "Speichern",
|
||||
"common.saveAndNext": "Speichern und weiter",
|
||||
@@ -331,6 +343,7 @@
|
||||
"common.schema": "Schema",
|
||||
"common.search": "Suchen",
|
||||
"common.searchBy": "Suchen nach:",
|
||||
"common.server": "Server",
|
||||
"common.sqlGenerator": "SQL-Generator",
|
||||
"common.table": "Tabelle",
|
||||
"common.testingConnection": "Verbindung wird getestet",
|
||||
@@ -574,6 +587,12 @@
|
||||
"dbObject.triggers": "Trigger",
|
||||
"dbObject.truncateTable": "Tabelle leeren",
|
||||
"dbObject.views": "Sichten",
|
||||
"designerTable.addReferences": "Referenzen hinzufügen",
|
||||
"designerTable.changeColor": "Farbe ändern",
|
||||
"designerTable.defineVirtualForeignKey": "Virtuellen Fremdschlüssel definieren",
|
||||
"designerTable.newAlias": "Neuer Alias",
|
||||
"designerTable.removeTableAlias": "Tabellenalias entfernen",
|
||||
"designerTable.setTableAlias": "Tabellenalias setzen",
|
||||
"error.driverNotFound": "Ungültige Datenbankverbindung, Treiber nicht gefunden",
|
||||
"error.selectedCloudConnection": "Ausgewählte Verbindung ist von DbGate Cloud",
|
||||
"error.selectedNotCloudConnection": "Ausgewählte Verbindung ist nicht von DbGate Cloud",
|
||||
@@ -588,6 +607,15 @@
|
||||
"file.queryDesignerFiles": "Abfrage-Designer-Dateien",
|
||||
"file.sqlFiles": "SQL-Dateien",
|
||||
"file.sqliteDatabase": "SQLite-Datenbank",
|
||||
"files.allSupportedFiles": "Alle unterstützten Dateien",
|
||||
"files.favorites": "Favoriten",
|
||||
"files.openFile": "Datei öffnen",
|
||||
"files.refreshFiles": "Dateien aktualisieren",
|
||||
"files.savedFiles": "Gespeicherte Dateien",
|
||||
"files.searchSavedFiles": "Gespeicherte Dateien suchen",
|
||||
"files.sqlFiles": "SQL-Dateien",
|
||||
"files.teamFiles": "Team-Dateien",
|
||||
"files.uploadFile": "Datei hochladen",
|
||||
"filter.after": "Nach...",
|
||||
"filter.and": "Und",
|
||||
"filter.arrayIsEmpty": "Array ist leer",
|
||||
@@ -669,16 +697,69 @@
|
||||
"foreignKeyEditor.refColumn": "Ref-Spalte - ",
|
||||
"foreignKeyEditor.referencedTable": "Referenzierte Tabelle",
|
||||
"foreignKeyEditor.tableNotSet": "(Tabelle nicht festgelegt)",
|
||||
"history.queryHistory": "Abfrageverlauf",
|
||||
"history.recentlyClosedTabs": "Kürzlich geschlossene Tabs",
|
||||
"history.searchQueryHistory": "Abfrageverlauf durchsuchen",
|
||||
"importExport.action": "Aktion",
|
||||
"importExport.addWebUrl": "Web-URL hinzufügen",
|
||||
"importExport.advancedConfiguration": "Erweiterte Konfiguration",
|
||||
"importExport.archiveFolder": "Archivordner",
|
||||
"importExport.columns": "Spalten",
|
||||
"importExport.createZipFileInArchive": "ZIP-Datei im Archiv erstellen",
|
||||
"importExport.currentArchive": "Aktuelles Archiv",
|
||||
"importExport.currentDatabase": "Aktuelle DB",
|
||||
"importExport.dragDropImportedFilesHere": "Importierte Dateien hierher ziehen und ablegen",
|
||||
"importExport.exportToZipArchive": "In ZIP-Archiv exportieren",
|
||||
"importExport.exportToZipFile": "In ZIP-Datei exportieren",
|
||||
"importExport.generateScript": "Skript generieren",
|
||||
"importExport.importFromZipArchive": "Aus ZIP-Archiv importieren",
|
||||
"importExport.importFromZipFile": "Aus ZIP-Datei importieren (im Archivordner)",
|
||||
"importExport.mapSourceTablesFiles": "Quelltabellen/-dateien zuordnen",
|
||||
"importExport.messages": "Meldungen",
|
||||
"importExport.newArchive": "Neues Archiv",
|
||||
"importExport.outputFiles": "Ausgabedateien",
|
||||
"importExport.preview": "Vorschau",
|
||||
"importExport.processingImportExport": "Import/Export wird verarbeitet ...",
|
||||
"importExport.run": "Ausführen",
|
||||
"importExport.schedule": "Zeitplan",
|
||||
"importExport.source": "Quelle",
|
||||
"importExport.sourceConfiguration": "Quellenkonfiguration",
|
||||
"importExport.sourceFiles": "Quelldateien",
|
||||
"importExport.startVariableIndex": "Startvariablenindex",
|
||||
"importExport.status": "Status",
|
||||
"importExport.stop": "Stopp",
|
||||
"importExport.storageType": "Speichertyp",
|
||||
"importExport.tablesViewsCollections": "Tabellen / Sichten / Sammlungen",
|
||||
"importExport.target": "Ziel",
|
||||
"importExport.targetConfiguration": "Zielkonfiguration",
|
||||
"indexEditor.filteredIndexCondition": "Gefilterte Index-Bedingung",
|
||||
"indexEditor.indexName": "Index-Name",
|
||||
"indexEditor.isUnique": "Ist eindeutiger Index",
|
||||
"logs.autoScroll": "Automatisches Scrollen",
|
||||
"logs.caller": "Aufrufer:",
|
||||
"logs.callerTab": "Aufrufer",
|
||||
"logs.chooseDate": "Datum auswählen",
|
||||
"logs.codeTab": "Code",
|
||||
"logs.connectionId": "Verbindungs-ID:",
|
||||
"logs.connectionTab": "Verbindung",
|
||||
"logs.database": "Datenbank:",
|
||||
"logs.databaseTab": "Datenbank",
|
||||
"logs.date": "Datum:",
|
||||
"logs.dateTab": "Datum",
|
||||
"logs.details": "Details",
|
||||
"logs.engine": "Engine:",
|
||||
"logs.engineTab": "Engine",
|
||||
"logs.loadingNextRows": "Lade nächste Zeilen...",
|
||||
"logs.message": "Nachricht:",
|
||||
"logs.messageCode": "Nachrichtencode:",
|
||||
"logs.messageTab": "Nachricht",
|
||||
"logs.name": "Name:",
|
||||
"logs.nameTab": "Name",
|
||||
"logs.noDataForSelectedDate": "Keine Daten für ausgewähltes Datum",
|
||||
"logs.recentLogs": "Letzte Protokolle",
|
||||
"logs.refresh": "Aktualisieren",
|
||||
"logs.time": "Zeit:",
|
||||
"logs.timeTab": "Zeit",
|
||||
"menu.edit": "Bearbeiten",
|
||||
"menu.file": "Datei",
|
||||
"menu.help": "Hilfe",
|
||||
@@ -703,6 +784,11 @@
|
||||
"newObject.sqlGeneratorDisabled": "SQL-Generator ist für aktuelle Datenbank nicht verfügbar",
|
||||
"newObject.tableDescription": "Tabelle in der aktuellen Datenbank erstellen",
|
||||
"newObject.tableDisabled": "Tabellenerstellung ist für aktuelle Datenbank nicht verfügbar",
|
||||
"plugins.searchExtensionsOnWeb": "Erweiterungen im Web suchen",
|
||||
"publicCloudWidget.onlyRelevantFilesListed": "Es werden nur Dateien aufgelistet, die für Ihre Verbindungen, Plattform und DbGate-Edition relevant sind. Bitte definieren Sie zuerst Verbindungen.",
|
||||
"publicCloudWidget.refreshFiles": "Dateien aktualisieren",
|
||||
"publicCloudWidget.refreshList": "Liste aktualisieren",
|
||||
"publicCloudWidget.searchPublicFiles": "Öffentliche Dateien suchen",
|
||||
"query.limitRows": "Auf {queryRowsLimit} Zeilen begrenzen",
|
||||
"query.named": ":Variable",
|
||||
"query.noParameters": "(keine Parameter)",
|
||||
@@ -819,10 +905,14 @@
|
||||
"sqlObject.columnName": "Spaltenname",
|
||||
"sqlObject.databaseEmpty": "Datenbank {database} ist leer oder Struktur ist nicht geladen, drücken Sie die Schaltfläche Aktualisieren, um die Struktur neu zu laden",
|
||||
"sqlObject.loadingStructure": "Lade Datenbankstruktur",
|
||||
"sqlObject.name": "Name",
|
||||
"sqlObject.newCollection": "Neue Sammlung/Container",
|
||||
"sqlObject.rowCount": "Zeilenanzahl",
|
||||
"sqlObject.schemaName": "Schema",
|
||||
"sqlObject.search.placeholder": "In Tabellen, Ansichten, Prozeduren suchen",
|
||||
"sqlObject.searchBy": "Suchen nach:",
|
||||
"sqlObject.sizeBytes": "Größe (Bytes)",
|
||||
"sqlObject.sortBy": "Sortieren nach:",
|
||||
"sqlObject.tableComment": "Tabellenkommentar",
|
||||
"sqlObject.tableEngine": "Tabellen-Engine",
|
||||
"sqlObject.tableViewProcedureName": "Name von Tabelle/Ansicht/Prozedur",
|
||||
@@ -902,6 +992,17 @@
|
||||
"widget.keys": "Schlüssel",
|
||||
"widget.pinned": "Angeheftet",
|
||||
"widget.tablesViewsFunctions": "Tabellen, Ansichten, Funktionen",
|
||||
"widgets.addNew": "Neu hinzufügen",
|
||||
"widgets.administration": "Administration",
|
||||
"widgets.archive": "Archiv (gespeicherte tabellarische Daten)",
|
||||
"widgets.availableExtensions": "Verfügbare Erweiterungen",
|
||||
"widgets.databaseConnections": "Datenbankverbindungen",
|
||||
"widgets.dbgateCloud": "DbGate Cloud",
|
||||
"widgets.favoritesAndSavedFiles": "Favoriten & gespeicherte Dateien",
|
||||
"widgets.installedExtensions": "Installierte Erweiterungen",
|
||||
"widgets.managePlugins": "Plugins verwalten",
|
||||
"widgets.premiumPromo": "Premium-Werbung",
|
||||
"widgets.queryHistoryAndClosedTabs": "Abfrageverlauf & geschlossene Tabs",
|
||||
"widgets.selectedCellDataDetailView": "Detailansicht der ausgewählten Zelldaten",
|
||||
"widgets.viewApplicationLogs": "Anwendungsprotokolle anzeigen"
|
||||
}
|
||||
|
||||
+102
-1
@@ -3,7 +3,11 @@
|
||||
"app.loading_plugin": "Loading plugin {plugin} ...",
|
||||
"app.preparingPlugins": "Preparing plugins ...",
|
||||
"app.starting": "Starting DbGate",
|
||||
"connection.authToken": "Auth token",
|
||||
"cellDataWidget.autodetect": "Autodetect - {autoDetectTitle}",
|
||||
"cellDataWidget.formatNotSelected": "Format not selected",
|
||||
"cellDataWidget.mustSelectOneCell": "Must be selected one cell",
|
||||
"cellDataWidget.noDataSelected": "No data selected",
|
||||
"cellDataWidget.title": "Cell data view",
|
||||
"chart.detect": "Detect chart",
|
||||
"chart.open": "Open chart",
|
||||
"clipboard.SQLInsert": "SQL INSERTs",
|
||||
@@ -41,6 +45,10 @@
|
||||
"columnEditor.isSparse": "Sparse",
|
||||
"columnEditor.isUnsigned": "Unsigned",
|
||||
"columnEditor.isZerofill": "Zero fill",
|
||||
"columnLine.addReference": "Add reference",
|
||||
"columnLine.sortAscending": "Sort ascending",
|
||||
"columnLine.sortDescending": "Sort descending",
|
||||
"columnLine.unsort": "Unsort",
|
||||
"columnsConstraintEditor.addNewColumn": "Add new column",
|
||||
"columnsConstraintEditor.chooseColumn": "Choose column",
|
||||
"columnsConstraintEditor.selectColumn": "Select column",
|
||||
@@ -290,6 +298,7 @@
|
||||
"commandModal.showKeyCombination": "Show desired key combination and press ENTER",
|
||||
"common.addNew": "Add new",
|
||||
"common.advanced": "Advanced",
|
||||
"common.allFields": "All {field}",
|
||||
"common.archive": "Archive (JSONL)",
|
||||
"common.cancel": "Cancel",
|
||||
"common.close": "Close",
|
||||
@@ -316,6 +325,7 @@
|
||||
"common.kill": "Kill",
|
||||
"common.loadingData": "Loading data",
|
||||
"common.name": "Name",
|
||||
"common.newConnection": "New Connection",
|
||||
"common.notSelectedOptional": "(not selected - optional)",
|
||||
"common.parameters": "Parameters",
|
||||
"common.passwordEncrypted": "Password is encrypted",
|
||||
@@ -325,6 +335,7 @@
|
||||
"common.queryEditor": "SQL query editor",
|
||||
"common.refresh": "Refresh",
|
||||
"common.remove": "Remove",
|
||||
"common.removeAll": "Remove all",
|
||||
"common.reset": "Reset",
|
||||
"common.save": "Save",
|
||||
"common.saveAndNext": "Save and next",
|
||||
@@ -332,6 +343,7 @@
|
||||
"common.schema": "Schema",
|
||||
"common.search": "Search",
|
||||
"common.searchBy": "Search by:",
|
||||
"common.server": "Server",
|
||||
"common.sqlGenerator": "SQL Generator",
|
||||
"common.table": "Table",
|
||||
"common.testingConnection": "Testing connection",
|
||||
@@ -340,6 +352,7 @@
|
||||
"connection.allowedDatabasesRegex": "Allowed databases regular expression",
|
||||
"connection.askPassword": "Don't save, ask for password",
|
||||
"connection.askUser": "Don't save, ask for login and password",
|
||||
"connection.authToken": "Auth token",
|
||||
"connection.authentication": "Authentication",
|
||||
"connection.autoDetectNatMap": "Auto detect NAT map (use for Redis Cluster in Docker network)",
|
||||
"connection.chooseType": "Choose type",
|
||||
@@ -574,6 +587,12 @@
|
||||
"dbObject.triggers": "Triggers",
|
||||
"dbObject.truncateTable": "Truncate table",
|
||||
"dbObject.views": "Views",
|
||||
"designerTable.addReferences": "Add references",
|
||||
"designerTable.changeColor": "Change color",
|
||||
"designerTable.defineVirtualForeignKey": "Define virtual foreign key",
|
||||
"designerTable.newAlias": "New alias",
|
||||
"designerTable.removeTableAlias": "Remove table alias",
|
||||
"designerTable.setTableAlias": "Set table alias",
|
||||
"error.driverNotFound": "Invalid database connection, driver not found",
|
||||
"error.selectedCloudConnection": "Selected connection is from DbGate cloud",
|
||||
"error.selectedNotCloudConnection": "Selected connection is not from DbGate cloud",
|
||||
@@ -588,6 +607,15 @@
|
||||
"file.queryDesignerFiles": "Query designer files",
|
||||
"file.sqlFiles": "SQL files",
|
||||
"file.sqliteDatabase": "SQLite database",
|
||||
"files.allSupportedFiles": "All supported files",
|
||||
"files.favorites": "Favorites",
|
||||
"files.openFile": "Open file",
|
||||
"files.refreshFiles": "Refresh files",
|
||||
"files.savedFiles": "Saved files",
|
||||
"files.searchSavedFiles": "Search saved files",
|
||||
"files.sqlFiles": "SQL files",
|
||||
"files.teamFiles": "Team files",
|
||||
"files.uploadFile": "Upload file",
|
||||
"filter.after": "After...",
|
||||
"filter.and": "And",
|
||||
"filter.arrayIsEmpty": "Array is empty",
|
||||
@@ -669,16 +697,69 @@
|
||||
"foreignKeyEditor.refColumn": "Ref column - ",
|
||||
"foreignKeyEditor.referencedTable": "Referenced table",
|
||||
"foreignKeyEditor.tableNotSet": "(table not set)",
|
||||
"history.queryHistory": "Query history",
|
||||
"history.recentlyClosedTabs": "Recently closed tabs",
|
||||
"history.searchQueryHistory": "Search query history",
|
||||
"importExport.action": "Action",
|
||||
"importExport.addWebUrl": "Add web URL",
|
||||
"importExport.advancedConfiguration": "Advanced configuration",
|
||||
"importExport.archiveFolder": "Archive folder",
|
||||
"importExport.columns": "Columns",
|
||||
"importExport.createZipFileInArchive": "Create ZIP file in archive",
|
||||
"importExport.currentArchive": "Current archive",
|
||||
"importExport.currentDatabase": "Current DB",
|
||||
"importExport.dragDropImportedFilesHere": "Drag & drop imported files here",
|
||||
"importExport.exportToZipArchive": "Output ZIP archive",
|
||||
"importExport.exportToZipFile": "Export to ZIP file",
|
||||
"importExport.generateScript": "Generate script",
|
||||
"importExport.importFromZipArchive": "Input ZIP archive",
|
||||
"importExport.importFromZipFile": "Import from ZIP file (in archive folder)",
|
||||
"importExport.mapSourceTablesFiles": "Map source tables/files",
|
||||
"importExport.messages": "Messages",
|
||||
"importExport.newArchive": "New archive",
|
||||
"importExport.outputFiles": "Output files",
|
||||
"importExport.preview": "Preview",
|
||||
"importExport.processingImportExport": "Processing import/export ...",
|
||||
"importExport.run": "Run",
|
||||
"importExport.schedule": "Schedule",
|
||||
"importExport.source": "Source",
|
||||
"importExport.sourceConfiguration": "Source configuration",
|
||||
"importExport.sourceFiles": "Source files",
|
||||
"importExport.startVariableIndex": "Start variable index",
|
||||
"importExport.status": "Status",
|
||||
"importExport.stop": "Stop",
|
||||
"importExport.storageType": "Storage type",
|
||||
"importExport.tablesViewsCollections": "Tables / views / collections",
|
||||
"importExport.target": "Target",
|
||||
"importExport.targetConfiguration": "Target configuration",
|
||||
"indexEditor.filteredIndexCondition": "Filtered index condition",
|
||||
"indexEditor.indexName": "Index name",
|
||||
"indexEditor.isUnique": "Is unique index",
|
||||
"logs.autoScroll": "Auto-scroll",
|
||||
"logs.caller": "Caller:",
|
||||
"logs.callerTab": "Caller",
|
||||
"logs.chooseDate": "Choose date",
|
||||
"logs.codeTab": "Code",
|
||||
"logs.connectionId": "Connection ID:",
|
||||
"logs.connectionTab": "Connection",
|
||||
"logs.database": "Database:",
|
||||
"logs.databaseTab": "Database",
|
||||
"logs.date": "Date:",
|
||||
"logs.dateTab": "Date",
|
||||
"logs.details": "Details",
|
||||
"logs.engine": "Engine:",
|
||||
"logs.engineTab": "Engine",
|
||||
"logs.loadingNextRows": "Loading next rows...",
|
||||
"logs.message": "Message:",
|
||||
"logs.messageCode": "Message code:",
|
||||
"logs.messageTab": "Message",
|
||||
"logs.name": "Name:",
|
||||
"logs.nameTab": "Name",
|
||||
"logs.noDataForSelectedDate": "No data for selected date",
|
||||
"logs.recentLogs": "Recent logs",
|
||||
"logs.refresh": "Refresh",
|
||||
"logs.time": "Time:",
|
||||
"logs.timeTab": "Time",
|
||||
"menu.edit": "Edit",
|
||||
"menu.file": "File",
|
||||
"menu.help": "Help",
|
||||
@@ -703,6 +784,11 @@
|
||||
"newObject.sqlGeneratorDisabled": "SQL Generator is not available for current database",
|
||||
"newObject.tableDescription": "Create table in the current database",
|
||||
"newObject.tableDisabled": "Table creation is not available for current database",
|
||||
"plugins.searchExtensionsOnWeb": "Search extensions on web",
|
||||
"publicCloudWidget.onlyRelevantFilesListed": "Only files relevant for your connections, platform and DbGate edition are listed. Please define connections at first.",
|
||||
"publicCloudWidget.refreshFiles": "Refresh files",
|
||||
"publicCloudWidget.refreshList": "Refresh list",
|
||||
"publicCloudWidget.searchPublicFiles": "Search public files",
|
||||
"query.limitRows": "Limit {queryRowsLimit} rows",
|
||||
"query.named": ":variable",
|
||||
"query.noParameters": "(no parameters)",
|
||||
@@ -819,10 +905,14 @@
|
||||
"sqlObject.columnName": "Column name",
|
||||
"sqlObject.databaseEmpty": "Database {database} is empty or structure is not loaded, press Refresh button to reload structure",
|
||||
"sqlObject.loadingStructure": "Loading database structure",
|
||||
"sqlObject.name": "Name",
|
||||
"sqlObject.newCollection": "New collection/container",
|
||||
"sqlObject.rowCount": "Row count",
|
||||
"sqlObject.schemaName": "Schema",
|
||||
"sqlObject.search.placeholder": "Search in tables, views, procedures",
|
||||
"sqlObject.searchBy": "Search by:",
|
||||
"sqlObject.sizeBytes": "Size (bytes)",
|
||||
"sqlObject.sortBy": "Sort by:",
|
||||
"sqlObject.tableComment": "Table comment",
|
||||
"sqlObject.tableEngine": "Table engine",
|
||||
"sqlObject.tableViewProcedureName": "Table/view/procedure name",
|
||||
@@ -902,6 +992,17 @@
|
||||
"widget.keys": "Keys",
|
||||
"widget.pinned": "Pinned",
|
||||
"widget.tablesViewsFunctions": "Tables, views, functions",
|
||||
"widgets.addNew": "Add New",
|
||||
"widgets.administration": "Administration",
|
||||
"widgets.archive": "Archive (saved tabular data)",
|
||||
"widgets.availableExtensions": "Available extensions",
|
||||
"widgets.databaseConnections": "Database connections",
|
||||
"widgets.dbgateCloud": "DbGate Cloud",
|
||||
"widgets.favoritesAndSavedFiles": "Favorites & Saved files",
|
||||
"widgets.installedExtensions": "Installed extensions",
|
||||
"widgets.managePlugins": "Manage plugins",
|
||||
"widgets.premiumPromo": "Premium promo",
|
||||
"widgets.queryHistoryAndClosedTabs": "Query history & Closed tabs",
|
||||
"widgets.selectedCellDataDetailView": "Selected cell data detail view",
|
||||
"widgets.viewApplicationLogs": "View application logs"
|
||||
}
|
||||
@@ -3,6 +3,11 @@
|
||||
"app.loading_plugin": "Cargando plugin {plugin} ...",
|
||||
"app.preparingPlugins": "Preparando plugins ...",
|
||||
"app.starting": "Iniciando DbGate",
|
||||
"cellDataWidget.autodetect": "Detección automática - {autoDetectTitle}",
|
||||
"cellDataWidget.formatNotSelected": "Formato no seleccionado",
|
||||
"cellDataWidget.mustSelectOneCell": "Debe seleccionarse una celda",
|
||||
"cellDataWidget.noDataSelected": "No hay datos seleccionados",
|
||||
"cellDataWidget.title": "Vista de datos de celda",
|
||||
"chart.detect": "Detectar gráfico",
|
||||
"chart.open": "Abrir gráfico",
|
||||
"clipboard.SQLInsert": "SQL INSERTs",
|
||||
@@ -40,6 +45,10 @@
|
||||
"columnEditor.isSparse": "Dispersa",
|
||||
"columnEditor.isUnsigned": "Sin signo",
|
||||
"columnEditor.isZerofill": "Relleno con ceros",
|
||||
"columnLine.addReference": "Agregar referencia",
|
||||
"columnLine.sortAscending": "Ordenar ascendente",
|
||||
"columnLine.sortDescending": "Ordenar descendente",
|
||||
"columnLine.unsort": "Quitar orden",
|
||||
"columnsConstraintEditor.addNewColumn": "Agregar nueva columna",
|
||||
"columnsConstraintEditor.chooseColumn": "Elegir columna",
|
||||
"columnsConstraintEditor.selectColumn": "Seleccionar columna",
|
||||
@@ -289,6 +298,7 @@
|
||||
"commandModal.showKeyCombination": "Muestre la combinación de teclas deseada y presione ENTER",
|
||||
"common.addNew": "Agregar nuevo",
|
||||
"common.advanced": "Avanzado",
|
||||
"common.allFields": "Todos {field}",
|
||||
"common.archive": "Archivo (JSONL)",
|
||||
"common.cancel": "Cancelar",
|
||||
"common.close": "Cerrar",
|
||||
@@ -315,6 +325,7 @@
|
||||
"common.kill": "Terminar",
|
||||
"common.loadingData": "Cargando datos",
|
||||
"common.name": "Nombre",
|
||||
"common.newConnection": "Nueva conexión",
|
||||
"common.notSelectedOptional": "(no seleccionado - opcional)",
|
||||
"common.parameters": "Parámetros",
|
||||
"common.passwordEncrypted": "La contraseña está encriptada",
|
||||
@@ -324,6 +335,7 @@
|
||||
"common.queryEditor": "Editor de consultas SQL",
|
||||
"common.refresh": "Refrescar",
|
||||
"common.remove": "Eliminar",
|
||||
"common.removeAll": "Eliminar todo",
|
||||
"common.reset": "Restablecer",
|
||||
"common.save": "Guardar",
|
||||
"common.saveAndNext": "Guardar y siguiente",
|
||||
@@ -331,6 +343,7 @@
|
||||
"common.schema": "Esquema",
|
||||
"common.search": "Buscar",
|
||||
"common.searchBy": "Buscar por:",
|
||||
"common.server": "Servidor",
|
||||
"common.sqlGenerator": "Generador SQL",
|
||||
"common.table": "Tabla",
|
||||
"common.testingConnection": "Probando conexión",
|
||||
@@ -574,6 +587,12 @@
|
||||
"dbObject.triggers": "Disparadores",
|
||||
"dbObject.truncateTable": "Truncar tabla",
|
||||
"dbObject.views": "Vistas",
|
||||
"designerTable.addReferences": "Agregar referencias",
|
||||
"designerTable.changeColor": "Cambiar color",
|
||||
"designerTable.defineVirtualForeignKey": "Definir clave foránea virtual",
|
||||
"designerTable.newAlias": "Nuevo alias",
|
||||
"designerTable.removeTableAlias": "Eliminar alias de tabla",
|
||||
"designerTable.setTableAlias": "Establecer alias de tabla",
|
||||
"error.driverNotFound": "Conexión de base de datos inválida, controlador no encontrado",
|
||||
"error.selectedCloudConnection": "La conexión seleccionada es de la nube de DbGate",
|
||||
"error.selectedNotCloudConnection": "La conexión seleccionada no es de la nube de DbGate",
|
||||
@@ -588,6 +607,15 @@
|
||||
"file.queryDesignerFiles": "Archivos de diseñador de consultas",
|
||||
"file.sqlFiles": "Archivos SQL",
|
||||
"file.sqliteDatabase": "Base de datos SQLite",
|
||||
"files.allSupportedFiles": "Todos los archivos soportados",
|
||||
"files.favorites": "Favoritos",
|
||||
"files.openFile": "Abrir archivo",
|
||||
"files.refreshFiles": "Refrescar archivos",
|
||||
"files.savedFiles": "Archivos guardados",
|
||||
"files.searchSavedFiles": "Buscar archivos guardados",
|
||||
"files.sqlFiles": "Archivos SQL",
|
||||
"files.teamFiles": "Archivos de equipo",
|
||||
"files.uploadFile": "Subir archivo",
|
||||
"filter.after": "Después de...",
|
||||
"filter.and": "Y",
|
||||
"filter.arrayIsEmpty": "El arreglo está vacío",
|
||||
@@ -669,16 +697,69 @@
|
||||
"foreignKeyEditor.refColumn": "Columna ref - ",
|
||||
"foreignKeyEditor.referencedTable": "Tabla referenciada",
|
||||
"foreignKeyEditor.tableNotSet": "(tabla no establecida)",
|
||||
"history.queryHistory": "Historial de consultas",
|
||||
"history.recentlyClosedTabs": "Pestañas cerradas recientemente",
|
||||
"history.searchQueryHistory": "Buscar en historial de consultas",
|
||||
"importExport.action": "Acción",
|
||||
"importExport.addWebUrl": "Agregar URL web",
|
||||
"importExport.advancedConfiguration": "Configuración avanzada",
|
||||
"importExport.archiveFolder": "Carpeta de archivo",
|
||||
"importExport.columns": "Columnas",
|
||||
"importExport.createZipFileInArchive": "Crear archivo ZIP en el archivo",
|
||||
"importExport.currentArchive": "Archivo actual",
|
||||
"importExport.currentDatabase": "BD actual",
|
||||
"importExport.dragDropImportedFilesHere": "Arrastre y suelte aquí los archivos importados",
|
||||
"importExport.exportToZipArchive": "Archivo ZIP de salida",
|
||||
"importExport.exportToZipFile": "Exportar a archivo ZIP",
|
||||
"importExport.generateScript": "Generar script",
|
||||
"importExport.importFromZipArchive": "Archivo ZIP de entrada",
|
||||
"importExport.importFromZipFile": "Importar desde archivo ZIP (en carpeta de archivo)",
|
||||
"importExport.mapSourceTablesFiles": "Mapear tablas/archivos de origen",
|
||||
"importExport.messages": "Mensajes",
|
||||
"importExport.newArchive": "Nuevo archivo",
|
||||
"importExport.outputFiles": "Archivos de salida",
|
||||
"importExport.preview": "Vista previa",
|
||||
"importExport.processingImportExport": "Procesando importación/exportación ...",
|
||||
"importExport.run": "Ejecutar",
|
||||
"importExport.schedule": "Programar",
|
||||
"importExport.source": "Origen",
|
||||
"importExport.sourceConfiguration": "Configuración de origen",
|
||||
"importExport.sourceFiles": "Archivos de origen",
|
||||
"importExport.startVariableIndex": "Índice inicial de variable",
|
||||
"importExport.status": "Estado",
|
||||
"importExport.stop": "Detener",
|
||||
"importExport.storageType": "Tipo de almacenamiento",
|
||||
"importExport.tablesViewsCollections": "Tablas / vistas / colecciones",
|
||||
"importExport.target": "Destino",
|
||||
"importExport.targetConfiguration": "Configuración de destino",
|
||||
"indexEditor.filteredIndexCondition": "Condición de índice filtrado",
|
||||
"indexEditor.indexName": "Nombre de índice",
|
||||
"indexEditor.isUnique": "Es índice único",
|
||||
"logs.autoScroll": "Desplazamiento automático",
|
||||
"logs.caller": "Llamador:",
|
||||
"logs.callerTab": "Llamador",
|
||||
"logs.chooseDate": "Elegir fecha",
|
||||
"logs.codeTab": "Código",
|
||||
"logs.connectionId": "ID de conexión:",
|
||||
"logs.connectionTab": "Conexión",
|
||||
"logs.database": "Base de datos:",
|
||||
"logs.databaseTab": "Base de datos",
|
||||
"logs.date": "Fecha:",
|
||||
"logs.dateTab": "Fecha",
|
||||
"logs.details": "Detalles",
|
||||
"logs.engine": "Motor:",
|
||||
"logs.engineTab": "Motor",
|
||||
"logs.loadingNextRows": "Cargando siguientes filas...",
|
||||
"logs.message": "Mensaje:",
|
||||
"logs.messageCode": "Código de mensaje:",
|
||||
"logs.messageTab": "Mensaje",
|
||||
"logs.name": "Nombre:",
|
||||
"logs.nameTab": "Nombre",
|
||||
"logs.noDataForSelectedDate": "No hay datos para la fecha seleccionada",
|
||||
"logs.recentLogs": "Registros recientes",
|
||||
"logs.refresh": "Refrescar",
|
||||
"logs.time": "Hora:",
|
||||
"logs.timeTab": "Hora",
|
||||
"menu.edit": "Editar",
|
||||
"menu.file": "Archivo",
|
||||
"menu.help": "Ayuda",
|
||||
@@ -703,6 +784,11 @@
|
||||
"newObject.sqlGeneratorDisabled": "El generador SQL no está disponible para la base de datos actual",
|
||||
"newObject.tableDescription": "Crear tabla en la base de datos actual",
|
||||
"newObject.tableDisabled": "La creación de tablas no está disponible para la base de datos actual",
|
||||
"plugins.searchExtensionsOnWeb": "Buscar extensiones en la web",
|
||||
"publicCloudWidget.onlyRelevantFilesListed": "Solo se listan archivos relevantes para sus conexiones, plataforma y edición de DbGate. Defina primero las conexiones.",
|
||||
"publicCloudWidget.refreshFiles": "Refrescar archivos",
|
||||
"publicCloudWidget.refreshList": "Refrescar lista",
|
||||
"publicCloudWidget.searchPublicFiles": "Buscar archivos públicos",
|
||||
"query.limitRows": "Limitar {queryRowsLimit} filas",
|
||||
"query.named": ":variable",
|
||||
"query.noParameters": "(sin parámetros)",
|
||||
@@ -819,10 +905,14 @@
|
||||
"sqlObject.columnName": "Nombre de columna",
|
||||
"sqlObject.databaseEmpty": "La base de datos {database} está vacía o la estructura no está cargada, presione el botón Refrescar para recargar la estructura",
|
||||
"sqlObject.loadingStructure": "Cargando estructura de base de datos",
|
||||
"sqlObject.name": "Nombre",
|
||||
"sqlObject.newCollection": "Nueva colección/contenedor",
|
||||
"sqlObject.rowCount": "Recuento de filas",
|
||||
"sqlObject.schemaName": "Esquema",
|
||||
"sqlObject.search.placeholder": "Buscar en tablas, vistas, procedimientos",
|
||||
"sqlObject.searchBy": "Buscar por:",
|
||||
"sqlObject.sizeBytes": "Tamaño (bytes)",
|
||||
"sqlObject.sortBy": "Ordenar por:",
|
||||
"sqlObject.tableComment": "Comentario de tabla",
|
||||
"sqlObject.tableEngine": "Motor de tabla",
|
||||
"sqlObject.tableViewProcedureName": "Nombre de tabla/vista/procedimiento",
|
||||
@@ -902,6 +992,17 @@
|
||||
"widget.keys": "Claves",
|
||||
"widget.pinned": "Anclado",
|
||||
"widget.tablesViewsFunctions": "Tablas, vistas, funciones",
|
||||
"widgets.addNew": "Agregar nuevo",
|
||||
"widgets.administration": "Administración",
|
||||
"widgets.archive": "Archivo (datos tabulares guardados)",
|
||||
"widgets.availableExtensions": "Extensiones disponibles",
|
||||
"widgets.databaseConnections": "Conexiones de base de datos",
|
||||
"widgets.dbgateCloud": "DbGate Cloud",
|
||||
"widgets.favoritesAndSavedFiles": "Favoritos y archivos guardados",
|
||||
"widgets.installedExtensions": "Extensiones instaladas",
|
||||
"widgets.managePlugins": "Administrar plugins",
|
||||
"widgets.premiumPromo": "Promoción Premium",
|
||||
"widgets.queryHistoryAndClosedTabs": "Historial de consultas y pestañas cerradas",
|
||||
"widgets.selectedCellDataDetailView": "Vista detallada de datos de celda seleccionada",
|
||||
"widgets.viewApplicationLogs": "Ver registros de la aplicación"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,11 @@
|
||||
"app.loading_plugin": "Chargement du plugin {plugin}...",
|
||||
"app.preparingPlugins": "Préparation des plugins...",
|
||||
"app.starting": "Démarrage de DbGate",
|
||||
"cellDataWidget.autodetect": "Détection automatique - {autoDetectTitle}",
|
||||
"cellDataWidget.formatNotSelected": "Format non sélectionné",
|
||||
"cellDataWidget.mustSelectOneCell": "Une seule cellule doit être sélectionnée",
|
||||
"cellDataWidget.noDataSelected": "Aucune donnée sélectionnée",
|
||||
"cellDataWidget.title": "Vue des données de cellule",
|
||||
"chart.detect": "Détecter le graphique",
|
||||
"chart.open": "Ouvrir le graphique",
|
||||
"clipboard.SQLInsert": "INSERT SQL",
|
||||
@@ -40,6 +45,10 @@
|
||||
"columnEditor.isSparse": "Sparse",
|
||||
"columnEditor.isUnsigned": "Non signé",
|
||||
"columnEditor.isZerofill": "Remplissage de zéros",
|
||||
"columnLine.addReference": "Ajouter une référence",
|
||||
"columnLine.sortAscending": "Trier par ordre croissant",
|
||||
"columnLine.sortDescending": "Trier par ordre décroissant",
|
||||
"columnLine.unsort": "Annuler le tri",
|
||||
"columnsConstraintEditor.addNewColumn": "Ajouter une nouvelle colonne",
|
||||
"columnsConstraintEditor.chooseColumn": "Choisir une colonne",
|
||||
"columnsConstraintEditor.selectColumn": "Sélectionner une colonne",
|
||||
@@ -289,6 +298,7 @@
|
||||
"commandModal.showKeyCombination": "Afficher la combinaison de touches souhaitée et appuyez sur ENTRÉE",
|
||||
"common.addNew": "Ajouter un nouvel élément",
|
||||
"common.advanced": "Avancé",
|
||||
"common.allFields": "Tous les {field}",
|
||||
"common.archive": "Archive (JSONL)",
|
||||
"common.cancel": "Annuler",
|
||||
"common.close": "Fermer",
|
||||
@@ -315,6 +325,7 @@
|
||||
"common.kill": "Tuer",
|
||||
"common.loadingData": "Chargement des données",
|
||||
"common.name": "Nom",
|
||||
"common.newConnection": "Nouvelle connexion",
|
||||
"common.notSelectedOptional": "(non sélectionné - optionnel)",
|
||||
"common.parameters": "Paramètres",
|
||||
"common.passwordEncrypted": "Le mot de passe est chiffré",
|
||||
@@ -324,6 +335,7 @@
|
||||
"common.queryEditor": "Éditeur de requêtes SQL",
|
||||
"common.refresh": "Rafraîchir",
|
||||
"common.remove": "Supprimer",
|
||||
"common.removeAll": "Tout supprimer",
|
||||
"common.reset": "Réinitialiser",
|
||||
"common.save": "Enregistrer",
|
||||
"common.saveAndNext": "Enregistrer et passer au suivant",
|
||||
@@ -331,6 +343,7 @@
|
||||
"common.schema": "Schéma",
|
||||
"common.search": "Rechercher",
|
||||
"common.searchBy": "Rechercher par :",
|
||||
"common.server": "Serveur",
|
||||
"common.sqlGenerator": "Générateur SQL",
|
||||
"common.table": "Table",
|
||||
"common.testingConnection": "Test de connexion",
|
||||
@@ -574,6 +587,12 @@
|
||||
"dbObject.triggers": "Déclencheurs",
|
||||
"dbObject.truncateTable": "Tronquer la table",
|
||||
"dbObject.views": "Vues",
|
||||
"designerTable.addReferences": "Ajouter des références",
|
||||
"designerTable.changeColor": "Changer la couleur",
|
||||
"designerTable.defineVirtualForeignKey": "Définir une clé étrangère virtuelle",
|
||||
"designerTable.newAlias": "Nouvel alias",
|
||||
"designerTable.removeTableAlias": "Supprimer l'alias de table",
|
||||
"designerTable.setTableAlias": "Définir l'alias de table",
|
||||
"error.driverNotFound": "Connexion de base de données non valide, pilote introuvable",
|
||||
"error.selectedCloudConnection": "La connexion sélectionnée provient du cloud DbGate",
|
||||
"error.selectedNotCloudConnection": "La connexion sélectionnée ne provient pas du cloud DbGate",
|
||||
@@ -588,6 +607,15 @@
|
||||
"file.queryDesignerFiles": "Fichiers du concepteur de requêtes",
|
||||
"file.sqlFiles": "Fichiers SQL",
|
||||
"file.sqliteDatabase": "Base de données SQLite",
|
||||
"files.allSupportedFiles": "Tous les fichiers pris en charge",
|
||||
"files.favorites": "Favoris",
|
||||
"files.openFile": "Ouvrir le fichier",
|
||||
"files.refreshFiles": "Rafraîchir les fichiers",
|
||||
"files.savedFiles": "Fichiers enregistrés",
|
||||
"files.searchSavedFiles": "Rechercher dans les fichiers enregistrés",
|
||||
"files.sqlFiles": "Fichiers SQL",
|
||||
"files.teamFiles": "Fichiers d'équipe",
|
||||
"files.uploadFile": "Téléverser un fichier",
|
||||
"filter.after": "Après...",
|
||||
"filter.and": "Et",
|
||||
"filter.arrayIsEmpty": "Le tableau est vide",
|
||||
@@ -669,16 +697,69 @@
|
||||
"foreignKeyEditor.refColumn": "Colonne réf. - ",
|
||||
"foreignKeyEditor.referencedTable": "Table référencée",
|
||||
"foreignKeyEditor.tableNotSet": "(table non définie)",
|
||||
"history.queryHistory": "Historique des requêtes",
|
||||
"history.recentlyClosedTabs": "Onglets récemment fermés",
|
||||
"history.searchQueryHistory": "Rechercher dans l'historique des requêtes",
|
||||
"importExport.action": "Action",
|
||||
"importExport.addWebUrl": "Ajouter une URL web",
|
||||
"importExport.advancedConfiguration": "Configuration avancée",
|
||||
"importExport.archiveFolder": "Dossier d'archive",
|
||||
"importExport.columns": "Colonnes",
|
||||
"importExport.createZipFileInArchive": "Créer un fichier ZIP dans l'archive",
|
||||
"importExport.currentArchive": "Archive actuelle",
|
||||
"importExport.currentDatabase": "BD actuelle",
|
||||
"importExport.dragDropImportedFilesHere": "Glissez-déposez les fichiers importés ici",
|
||||
"importExport.exportToZipArchive": "Archive ZIP de sortie",
|
||||
"importExport.exportToZipFile": "Exporter vers un fichier ZIP",
|
||||
"importExport.generateScript": "Générer un script",
|
||||
"importExport.importFromZipArchive": "Archive ZIP d'entrée",
|
||||
"importExport.importFromZipFile": "Importer depuis un fichier ZIP (dans le dossier d'archive)",
|
||||
"importExport.mapSourceTablesFiles": "Mapper les tables/fichiers source",
|
||||
"importExport.messages": "Messages",
|
||||
"importExport.newArchive": "Nouvelle archive",
|
||||
"importExport.outputFiles": "Fichiers de sortie",
|
||||
"importExport.preview": "Aperçu",
|
||||
"importExport.processingImportExport": "Traitement de l'import/export...",
|
||||
"importExport.run": "Exécuter",
|
||||
"importExport.schedule": "Planifier",
|
||||
"importExport.source": "Source",
|
||||
"importExport.sourceConfiguration": "Configuration de la source",
|
||||
"importExport.sourceFiles": "Fichiers source",
|
||||
"importExport.startVariableIndex": "Index de variable de départ",
|
||||
"importExport.status": "Statut",
|
||||
"importExport.stop": "Arrêter",
|
||||
"importExport.storageType": "Type de stockage",
|
||||
"importExport.tablesViewsCollections": "Tables / vues / collections",
|
||||
"importExport.target": "Cible",
|
||||
"importExport.targetConfiguration": "Configuration de la cible",
|
||||
"indexEditor.filteredIndexCondition": "Condition d'index filtré",
|
||||
"indexEditor.indexName": "Nom de l'index",
|
||||
"indexEditor.isUnique": "Est un index unique",
|
||||
"logs.autoScroll": "Défilement automatique",
|
||||
"logs.caller": "Appelant :",
|
||||
"logs.callerTab": "Appelant",
|
||||
"logs.chooseDate": "Choisir la date",
|
||||
"logs.codeTab": "Code",
|
||||
"logs.connectionId": "ID de connexion :",
|
||||
"logs.connectionTab": "Connexion",
|
||||
"logs.database": "Base de données :",
|
||||
"logs.databaseTab": "Base de données",
|
||||
"logs.date": "Date :",
|
||||
"logs.dateTab": "Date",
|
||||
"logs.details": "Détails",
|
||||
"logs.engine": "Moteur :",
|
||||
"logs.engineTab": "Moteur",
|
||||
"logs.loadingNextRows": "Chargement des lignes suivantes...",
|
||||
"logs.message": "Message :",
|
||||
"logs.messageCode": "Code du message :",
|
||||
"logs.messageTab": "Message",
|
||||
"logs.name": "Nom :",
|
||||
"logs.nameTab": "Nom",
|
||||
"logs.noDataForSelectedDate": "Aucune donnée pour la date sélectionnée",
|
||||
"logs.recentLogs": "Journaux récents",
|
||||
"logs.refresh": "Rafraîchir",
|
||||
"logs.time": "Heure :",
|
||||
"logs.timeTab": "Heure",
|
||||
"menu.edit": "Modifier",
|
||||
"menu.file": "Fichier",
|
||||
"menu.help": "Aide",
|
||||
@@ -703,6 +784,11 @@
|
||||
"newObject.sqlGeneratorDisabled": "Le générateur SQL n'est pas disponible pour la base de données actuelle",
|
||||
"newObject.tableDescription": "Créer une table dans la base de données actuelle",
|
||||
"newObject.tableDisabled": "La création de table n'est pas disponible pour la base de données actuelle",
|
||||
"plugins.searchExtensionsOnWeb": "Rechercher des extensions sur le web",
|
||||
"publicCloudWidget.onlyRelevantFilesListed": "Seuls les fichiers pertinents pour vos connexions, votre plateforme et votre édition de DbGate sont listés. Veuillez d'abord définir des connexions.",
|
||||
"publicCloudWidget.refreshFiles": "Rafraîchir les fichiers",
|
||||
"publicCloudWidget.refreshList": "Rafraîchir la liste",
|
||||
"publicCloudWidget.searchPublicFiles": "Rechercher des fichiers publics",
|
||||
"query.limitRows": "Limiter à {queryRowsLimit} lignes",
|
||||
"query.named": ":variable",
|
||||
"query.noParameters": "(aucun paramètre)",
|
||||
@@ -819,10 +905,14 @@
|
||||
"sqlObject.columnName": "Nom de colonne",
|
||||
"sqlObject.databaseEmpty": "La base de données {database} est vide ou la structure n'est pas chargée, appuyez sur le bouton Rafraîchir pour recharger la structure",
|
||||
"sqlObject.loadingStructure": "Chargement de la structure de la base de données",
|
||||
"sqlObject.name": "Nom",
|
||||
"sqlObject.newCollection": "Nouvelle collection/conteneur",
|
||||
"sqlObject.rowCount": "Nombre de lignes",
|
||||
"sqlObject.schemaName": "Schéma",
|
||||
"sqlObject.search.placeholder": "Rechercher dans les tables, vues, procédures",
|
||||
"sqlObject.searchBy": "Rechercher par :",
|
||||
"sqlObject.sizeBytes": "Taille (octets)",
|
||||
"sqlObject.sortBy": "Trier par :",
|
||||
"sqlObject.tableComment": "Commentaire de table",
|
||||
"sqlObject.tableEngine": "Moteur de table",
|
||||
"sqlObject.tableViewProcedureName": "Nom de table/vue/procédure",
|
||||
@@ -902,6 +992,17 @@
|
||||
"widget.keys": "Clés",
|
||||
"widget.pinned": "Épinglé",
|
||||
"widget.tablesViewsFunctions": "Tables, vues, fonctions",
|
||||
"widgets.addNew": "Ajouter un nouvel élément",
|
||||
"widgets.administration": "Administration",
|
||||
"widgets.archive": "Archive (données tabulaires enregistrées)",
|
||||
"widgets.availableExtensions": "Extensions disponibles",
|
||||
"widgets.databaseConnections": "Connexions de base de données",
|
||||
"widgets.dbgateCloud": "DbGate Cloud",
|
||||
"widgets.favoritesAndSavedFiles": "Favoris et fichiers enregistrés",
|
||||
"widgets.installedExtensions": "Extensions installées",
|
||||
"widgets.managePlugins": "Gérer les plugins",
|
||||
"widgets.premiumPromo": "Promotion Premium",
|
||||
"widgets.queryHistoryAndClosedTabs": "Historique des requêtes et onglets fermés",
|
||||
"widgets.selectedCellDataDetailView": "Vue détaillée des données de la cellule sélectionnée",
|
||||
"widgets.viewApplicationLogs": "Afficher les journaux de l'application"
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+102
-1
@@ -3,6 +3,11 @@
|
||||
"app.loading_plugin": "Načítavam plugin {plugin} ...",
|
||||
"app.preparingPlugins": "Príprava pluginov...",
|
||||
"app.starting": "Spúšťam DbGate",
|
||||
"cellDataWidget.autodetect": "Autodetekcia - {autoDetectTitle}",
|
||||
"cellDataWidget.formatNotSelected": "Formát nie je zvolený",
|
||||
"cellDataWidget.mustSelectOneCell": "Musí byť vybraná jedna bunka",
|
||||
"cellDataWidget.noDataSelected": "Nie sú vybrané žiadne dáta",
|
||||
"cellDataWidget.title": "Zobrazenie dát bunky",
|
||||
"chart.detect": "Rozpoznať graf",
|
||||
"chart.open": "Otvoriť graf",
|
||||
"clipboard.SQLInsert": "SQL INSERT príkazy",
|
||||
@@ -40,6 +45,10 @@
|
||||
"columnEditor.isSparse": "Riedky",
|
||||
"columnEditor.isUnsigned": "Bez znamienka",
|
||||
"columnEditor.isZerofill": "Výplň nulami",
|
||||
"columnLine.addReference": "Pridať referenciu",
|
||||
"columnLine.sortAscending": "Zoradiť vzostupne",
|
||||
"columnLine.sortDescending": "Zoradiť zostupne",
|
||||
"columnLine.unsort": "Zrušiť zoradenie",
|
||||
"columnsConstraintEditor.addNewColumn": "Pridať nový stĺpec",
|
||||
"columnsConstraintEditor.chooseColumn": "Vybrať stĺpec",
|
||||
"columnsConstraintEditor.selectColumn": "Vybrať stĺpec",
|
||||
@@ -289,6 +298,7 @@
|
||||
"commandModal.showKeyCombination": "Zobraziť požadovanú klávesovú kombináciu a stlačiť ENTER",
|
||||
"common.addNew": "Pridať nový",
|
||||
"common.advanced": "Pokročilé",
|
||||
"common.allFields": "Všetky {field}",
|
||||
"common.archive": "Archivovať (JSONL)",
|
||||
"common.cancel": "Zrušiť",
|
||||
"common.close": "Zavrieť",
|
||||
@@ -315,6 +325,7 @@
|
||||
"common.kill": "Ukončiť",
|
||||
"common.loadingData": "Načítavanie dát",
|
||||
"common.name": "Názov",
|
||||
"common.newConnection": "Nové pripojenie",
|
||||
"common.notSelectedOptional": "(nezvolené - voliteľné)",
|
||||
"common.parameters": "Parametre",
|
||||
"common.passwordEncrypted": "Heslo je zašifrované",
|
||||
@@ -324,6 +335,7 @@
|
||||
"common.queryEditor": "Editor SQL dotazov",
|
||||
"common.refresh": "Obnoviť",
|
||||
"common.remove": "Odstrániť",
|
||||
"common.removeAll": "Odstrániť všetko",
|
||||
"common.reset": "Resetovať",
|
||||
"common.save": "Uložiť",
|
||||
"common.saveAndNext": "Uložiť a pokračovať",
|
||||
@@ -331,6 +343,7 @@
|
||||
"common.schema": "Schéma",
|
||||
"common.search": "Hledat",
|
||||
"common.searchBy": "Hľadať podľa:",
|
||||
"common.server": "Server",
|
||||
"common.sqlGenerator": "SQL Generátor",
|
||||
"common.table": "Tabuľka",
|
||||
"common.testingConnection": "Testovanie pripojenia",
|
||||
@@ -574,6 +587,12 @@
|
||||
"dbObject.triggers": "Triggery",
|
||||
"dbObject.truncateTable": "Orezanie tabuľky",
|
||||
"dbObject.views": "Pohľady",
|
||||
"designerTable.addReferences": "Pridať referencie",
|
||||
"designerTable.changeColor": "Zmeniť farbu",
|
||||
"designerTable.defineVirtualForeignKey": "Definovať virtuálny cudzí kľúč",
|
||||
"designerTable.newAlias": "Nový alias",
|
||||
"designerTable.removeTableAlias": "Odstrániť alias tabuľky",
|
||||
"designerTable.setTableAlias": "Nastaviť alias tabuľky",
|
||||
"error.driverNotFound": "Neplatné pripojenie k databáze, ovládač nenájdený",
|
||||
"error.selectedCloudConnection": "Vybrané pripojenie je z DbGate cloudu",
|
||||
"error.selectedNotCloudConnection": "Vybrané pripojenie nie je z DbGate cloudu",
|
||||
@@ -588,6 +607,15 @@
|
||||
"file.queryDesignerFiles": "Súbory návrhu dotazu",
|
||||
"file.sqlFiles": "SQL súbory",
|
||||
"file.sqliteDatabase": "SQLite databáza",
|
||||
"files.allSupportedFiles": "Všetky podporované súbory",
|
||||
"files.favorites": "Obľúbené",
|
||||
"files.openFile": "Otvoriť súbor",
|
||||
"files.refreshFiles": "Obnoviť súbory",
|
||||
"files.savedFiles": "Uložené súbory",
|
||||
"files.searchSavedFiles": "Hľadať v uložených súboroch",
|
||||
"files.sqlFiles": "SQL súbory",
|
||||
"files.teamFiles": "Tímové súbory",
|
||||
"files.uploadFile": "Nahrať súbor",
|
||||
"filter.after": "Po...",
|
||||
"filter.and": "A",
|
||||
"filter.arrayIsEmpty": "Pole je prázdne",
|
||||
@@ -669,16 +697,69 @@
|
||||
"foreignKeyEditor.refColumn": "Referencovaný stĺpec - ",
|
||||
"foreignKeyEditor.referencedTable": "Referencovaná tabuľka - ",
|
||||
"foreignKeyEditor.tableNotSet": "(tabuľka nie je nastavená)",
|
||||
"history.queryHistory": "História dotazov",
|
||||
"history.recentlyClosedTabs": "Nedávno zatvorené karty",
|
||||
"history.searchQueryHistory": "Hľadať v histórii dotazov",
|
||||
"importExport.action": "Akcia",
|
||||
"importExport.addWebUrl": "Pridať web URL",
|
||||
"importExport.advancedConfiguration": "Pokročilá konfigurácia",
|
||||
"importExport.archiveFolder": "Archívny priečinok",
|
||||
"importExport.columns": "Stĺpce",
|
||||
"importExport.createZipFileInArchive": "Vytvoriť ZIP súbor v archíve",
|
||||
"importExport.currentArchive": "Aktuálny archív",
|
||||
"importExport.currentDatabase": "Aktuálna DB",
|
||||
"importExport.dragDropImportedFilesHere": "Pretiahnite importované súbory sem",
|
||||
"importExport.exportToZipArchive": "Exportovať do ZIP archívu",
|
||||
"importExport.exportToZipFile": "Exportovať do ZIP súboru",
|
||||
"importExport.generateScript": "Generovať skript",
|
||||
"importExport.importFromZipArchive": "Importovať zo ZIP archívu",
|
||||
"importExport.importFromZipFile": "Importovať zo ZIP súboru (v archívnej zložke)",
|
||||
"importExport.mapSourceTablesFiles": "Mapovať zdrojové tabuľky/súbory",
|
||||
"importExport.messages": "Správy",
|
||||
"importExport.newArchive": "Nový archív",
|
||||
"importExport.outputFiles": "Výstupné súbory",
|
||||
"importExport.preview": "Náhľad",
|
||||
"importExport.processingImportExport": "Spracovanie importu/exportu ...",
|
||||
"importExport.run": "Spustiť",
|
||||
"importExport.schedule": "Plánovanie",
|
||||
"importExport.source": "Zdroj",
|
||||
"importExport.sourceConfiguration": "Konfigurácia zdroja",
|
||||
"importExport.sourceFiles": "Zdrojové súbory",
|
||||
"importExport.startVariableIndex": "Počiatočný index premennej",
|
||||
"importExport.status": "Stav",
|
||||
"importExport.stop": "Zastaviť",
|
||||
"importExport.storageType": "Typ úložiska",
|
||||
"importExport.tablesViewsCollections": "Tabuľky / pohľady / kolekcie",
|
||||
"importExport.target": "Cieľ",
|
||||
"importExport.targetConfiguration": "Konfigurácia cieľa",
|
||||
"indexEditor.filteredIndexCondition": "Podmienka filtrovaného indexu",
|
||||
"indexEditor.indexName": "Názov indexu",
|
||||
"indexEditor.isUnique": "Je jedinečný index",
|
||||
"logs.autoScroll": "Automatické rolovanie",
|
||||
"logs.caller": "Volajúci:",
|
||||
"logs.callerTab": "Volajúci",
|
||||
"logs.chooseDate": "Vybrať dátum",
|
||||
"logs.codeTab": "Kód",
|
||||
"logs.connectionId": "ID pripojenia:",
|
||||
"logs.connectionTab": "Pripojenie",
|
||||
"logs.database": "Databáza:",
|
||||
"logs.databaseTab": "Databáza",
|
||||
"logs.date": "Dátum:",
|
||||
"logs.dateTab": "Dátum",
|
||||
"logs.details": "Detaily",
|
||||
"logs.engine": "Engine:",
|
||||
"logs.engineTab": "Engine",
|
||||
"logs.loadingNextRows": "Načítavanie ďalších riadkov...",
|
||||
"logs.message": "Správa:",
|
||||
"logs.messageCode": "Kód správy:",
|
||||
"logs.messageTab": "Správa",
|
||||
"logs.name": "Názov:",
|
||||
"logs.nameTab": "Názov",
|
||||
"logs.noDataForSelectedDate": "Pre zvolený dátum nie sú k dispozícii žiadne dáta",
|
||||
"logs.recentLogs": "Nedávne logy",
|
||||
"logs.refresh": "Obnoviť",
|
||||
"logs.time": "Čas:",
|
||||
"logs.timeTab": "Čas",
|
||||
"menu.edit": "Upraviť",
|
||||
"menu.file": "Súbor",
|
||||
"menu.help": "Pomoc",
|
||||
@@ -703,6 +784,11 @@
|
||||
"newObject.sqlGeneratorDisabled": "SQL Generátor nie je k dispozícii pre aktuálnu databázu",
|
||||
"newObject.tableDescription": "Vytvoriť tabuľku v aktuálnej databáze",
|
||||
"newObject.tableDisabled": "Vytvorenie tabuľky nie je k dispozícii pre aktuálnu databázu",
|
||||
"plugins.searchExtensionsOnWeb": "Hľadať rozšírenia na webe",
|
||||
"publicCloudWidget.onlyRelevantFilesListed": "Sú zobrazené iba súbory relevantné pre vaše pripojenia, platformu a edíciu DbGate. Najprv definujte pripojenia.",
|
||||
"publicCloudWidget.refreshFiles": "Obnoviť súbory",
|
||||
"publicCloudWidget.refreshList": "Obnoviť zoznam",
|
||||
"publicCloudWidget.searchPublicFiles": "Hľadať verejné súbory",
|
||||
"query.limitRows": "Obmedziť na {queryRowsLimit} riadkov",
|
||||
"query.named": ":premenná",
|
||||
"query.noParameters": "(žiadne parametre)",
|
||||
@@ -819,10 +905,14 @@
|
||||
"sqlObject.columnName": "Názov stĺpca",
|
||||
"sqlObject.databaseEmpty": "Databáza {database} je prázdna alebo štruktúra nie je načítaná, stlačte tlačidlo Obnoviť pre opätovné načítanie štruktúry",
|
||||
"sqlObject.loadingStructure": "Načítavanie štruktúry databázy",
|
||||
"sqlObject.name": "Názov",
|
||||
"sqlObject.newCollection": "Nová kolekcia/kontajner",
|
||||
"sqlObject.rowCount": "Počet riadkov",
|
||||
"sqlObject.schemaName": "Schéma",
|
||||
"sqlObject.search.placeholder": "Hľadať v tabuľkách, pohľadoch, procedúrach",
|
||||
"sqlObject.searchBy": "Hľadať podľa:",
|
||||
"sqlObject.sizeBytes": "Veľkosť (bajty)",
|
||||
"sqlObject.sortBy": "Zoradiť podľa:",
|
||||
"sqlObject.tableComment": "Komentár tabuľky",
|
||||
"sqlObject.tableEngine": "Engine tabuľky",
|
||||
"sqlObject.tableViewProcedureName": "Názov tabuľky/pohľadu/procedúry",
|
||||
@@ -902,6 +992,17 @@
|
||||
"widget.keys": "Kľúče",
|
||||
"widget.pinned": "Pripnuté",
|
||||
"widget.tablesViewsFunctions": "Tabuľky, pohľady, funkcie",
|
||||
"widgets.addNew": "Pridať nový",
|
||||
"widgets.administration": "Administrácia",
|
||||
"widgets.archive": "Archív (uložené tabuľkové dáta)",
|
||||
"widgets.availableExtensions": "Dostupné rozšírenia",
|
||||
"widgets.databaseConnections": "Databázové pripojenia",
|
||||
"widgets.dbgateCloud": "DbGate Cloud",
|
||||
"widgets.favoritesAndSavedFiles": "Obľúbené a uložené súbory",
|
||||
"widgets.installedExtensions": "Nainštalované rozšírenia",
|
||||
"widgets.managePlugins": "Spravovať pluginy",
|
||||
"widgets.premiumPromo": "Premium promo",
|
||||
"widgets.queryHistoryAndClosedTabs": "História dotazov a zatvorené karty",
|
||||
"widgets.selectedCellDataDetailView": "Detailné zobrazenie dát vybranej bunky",
|
||||
"widgets.viewApplicationLogs": "Zobraziť aplikačné logy"
|
||||
}
|
||||
}
|
||||
|
||||
+102
-1
@@ -3,6 +3,11 @@
|
||||
"app.loading_plugin": "正在加载插件 {plugin} ...",
|
||||
"app.preparingPlugins": "正在准备插件 ...",
|
||||
"app.starting": "正在启动 DbGate",
|
||||
"cellDataWidget.autodetect": "自动检测 - {autoDetectTitle}",
|
||||
"cellDataWidget.formatNotSelected": "未选择格式",
|
||||
"cellDataWidget.mustSelectOneCell": "必须选择一个单元格",
|
||||
"cellDataWidget.noDataSelected": "未选择数据",
|
||||
"cellDataWidget.title": "单元格数据视图",
|
||||
"chart.detect": "检测图表",
|
||||
"chart.open": "打开图表",
|
||||
"clipboard.SQLInsert": "SQL INSERT 语句",
|
||||
@@ -40,6 +45,10 @@
|
||||
"columnEditor.isSparse": "稀疏",
|
||||
"columnEditor.isUnsigned": "无符号",
|
||||
"columnEditor.isZerofill": "零填充",
|
||||
"columnLine.addReference": "添加引用",
|
||||
"columnLine.sortAscending": "升序排序",
|
||||
"columnLine.sortDescending": "降序排序",
|
||||
"columnLine.unsort": "取消排序",
|
||||
"columnsConstraintEditor.addNewColumn": "添加新列",
|
||||
"columnsConstraintEditor.chooseColumn": "选择列",
|
||||
"columnsConstraintEditor.selectColumn": "选择列",
|
||||
@@ -289,6 +298,7 @@
|
||||
"commandModal.showKeyCombination": "显示所需的键盘组合并按回车键",
|
||||
"common.addNew": "添加新项",
|
||||
"common.advanced": "高级",
|
||||
"common.allFields": "所有 {field}",
|
||||
"common.archive": "归档 (JSONL)",
|
||||
"common.cancel": "取消",
|
||||
"common.close": "关闭",
|
||||
@@ -315,6 +325,7 @@
|
||||
"common.kill": "终止",
|
||||
"common.loadingData": "正在加载数据",
|
||||
"common.name": "名称",
|
||||
"common.newConnection": "新建连接",
|
||||
"common.notSelectedOptional": "(未选择 - 可选)",
|
||||
"common.parameters": "参数",
|
||||
"common.passwordEncrypted": "密码已加密",
|
||||
@@ -324,6 +335,7 @@
|
||||
"common.queryEditor": "SQL 查询编辑器",
|
||||
"common.refresh": "刷新",
|
||||
"common.remove": "移除",
|
||||
"common.removeAll": "全部移除",
|
||||
"common.reset": "重置",
|
||||
"common.save": "保存",
|
||||
"common.saveAndNext": "保存并下一个",
|
||||
@@ -331,6 +343,7 @@
|
||||
"common.schema": "模式",
|
||||
"common.search": "搜索",
|
||||
"common.searchBy": "搜索方式:",
|
||||
"common.server": "服务器",
|
||||
"common.sqlGenerator": "SQL 生成器",
|
||||
"common.table": "表",
|
||||
"common.testingConnection": "正在测试连接",
|
||||
@@ -574,6 +587,12 @@
|
||||
"dbObject.triggers": "触发器",
|
||||
"dbObject.truncateTable": "截断表",
|
||||
"dbObject.views": "视图",
|
||||
"designerTable.addReferences": "添加引用",
|
||||
"designerTable.changeColor": "更改颜色",
|
||||
"designerTable.defineVirtualForeignKey": "定义虚拟外键",
|
||||
"designerTable.newAlias": "新建别名",
|
||||
"designerTable.removeTableAlias": "移除表别名",
|
||||
"designerTable.setTableAlias": "设置表别名",
|
||||
"error.driverNotFound": "无效的数据库连接,未找到驱动程序",
|
||||
"error.selectedCloudConnection": "选定的连接来自DbGate云",
|
||||
"error.selectedNotCloudConnection": "选定的连接不来自DbGate云",
|
||||
@@ -588,6 +607,15 @@
|
||||
"file.queryDesignerFiles": "查询设计器文件",
|
||||
"file.sqlFiles": "SQL文件",
|
||||
"file.sqliteDatabase": "SQLite数据库",
|
||||
"files.allSupportedFiles": "所有支持的文件",
|
||||
"files.favorites": "收藏",
|
||||
"files.openFile": "打开文件",
|
||||
"files.refreshFiles": "刷新文件",
|
||||
"files.savedFiles": "已保存文件",
|
||||
"files.searchSavedFiles": "搜索已保存文件",
|
||||
"files.sqlFiles": "SQL 文件",
|
||||
"files.teamFiles": "团队文件",
|
||||
"files.uploadFile": "上传文件",
|
||||
"filter.after": "之后...",
|
||||
"filter.and": "且",
|
||||
"filter.arrayIsEmpty": "数组为空",
|
||||
@@ -669,16 +697,69 @@
|
||||
"foreignKeyEditor.refColumn": "引用列 - ",
|
||||
"foreignKeyEditor.referencedTable": "引用表",
|
||||
"foreignKeyEditor.tableNotSet": "(未设置表)",
|
||||
"history.queryHistory": "查询历史",
|
||||
"history.recentlyClosedTabs": "最近关闭的标签页",
|
||||
"history.searchQueryHistory": "搜索查询历史",
|
||||
"importExport.action": "操作",
|
||||
"importExport.addWebUrl": "添加 Web URL",
|
||||
"importExport.advancedConfiguration": "高级配置",
|
||||
"importExport.archiveFolder": "归档文件夹",
|
||||
"importExport.columns": "列",
|
||||
"importExport.createZipFileInArchive": "在存档中创建ZIP文件",
|
||||
"importExport.currentArchive": "当前归档",
|
||||
"importExport.currentDatabase": "当前数据库",
|
||||
"importExport.dragDropImportedFilesHere": "将导入的文件拖放到此处",
|
||||
"importExport.exportToZipArchive": "输出ZIP存档",
|
||||
"importExport.exportToZipFile": "导出到ZIP文件",
|
||||
"importExport.generateScript": "生成脚本",
|
||||
"importExport.importFromZipArchive": "输入ZIP存档",
|
||||
"importExport.importFromZipFile": "从ZIP文件导入(在存档文件夹中)",
|
||||
"importExport.mapSourceTablesFiles": "映射源表/文件",
|
||||
"importExport.messages": "消息",
|
||||
"importExport.newArchive": "新建归档",
|
||||
"importExport.outputFiles": "输出文件",
|
||||
"importExport.preview": "预览",
|
||||
"importExport.processingImportExport": "正在处理导入/导出 ...",
|
||||
"importExport.run": "运行",
|
||||
"importExport.schedule": "计划",
|
||||
"importExport.source": "源",
|
||||
"importExport.sourceConfiguration": "源配置",
|
||||
"importExport.sourceFiles": "源文件",
|
||||
"importExport.startVariableIndex": "起始变量索引",
|
||||
"importExport.status": "状态",
|
||||
"importExport.stop": "停止",
|
||||
"importExport.storageType": "存储类型",
|
||||
"importExport.tablesViewsCollections": "表 / 视图 / 集合",
|
||||
"importExport.target": "目标",
|
||||
"importExport.targetConfiguration": "目标配置",
|
||||
"indexEditor.filteredIndexCondition": "过滤索引条件",
|
||||
"indexEditor.indexName": "索引名称",
|
||||
"indexEditor.isUnique": "是唯一索引",
|
||||
"logs.autoScroll": "自动滚动",
|
||||
"logs.caller": "调用方:",
|
||||
"logs.callerTab": "调用方",
|
||||
"logs.chooseDate": "选择日期",
|
||||
"logs.codeTab": "代码",
|
||||
"logs.connectionId": "连接 ID:",
|
||||
"logs.connectionTab": "连接",
|
||||
"logs.database": "数据库:",
|
||||
"logs.databaseTab": "数据库",
|
||||
"logs.date": "日期:",
|
||||
"logs.dateTab": "日期",
|
||||
"logs.details": "详情",
|
||||
"logs.engine": "引擎:",
|
||||
"logs.engineTab": "引擎",
|
||||
"logs.loadingNextRows": "正在加载下一批行...",
|
||||
"logs.message": "消息:",
|
||||
"logs.messageCode": "消息代码:",
|
||||
"logs.messageTab": "消息",
|
||||
"logs.name": "名称:",
|
||||
"logs.nameTab": "名称",
|
||||
"logs.noDataForSelectedDate": "所选日期无数据",
|
||||
"logs.recentLogs": "最近日志",
|
||||
"logs.refresh": "刷新",
|
||||
"logs.time": "时间:",
|
||||
"logs.timeTab": "时间",
|
||||
"menu.edit": "编辑",
|
||||
"menu.file": "文件",
|
||||
"menu.help": "帮助",
|
||||
@@ -703,6 +784,11 @@
|
||||
"newObject.sqlGeneratorDisabled": "当前数据库不支持SQL生成器",
|
||||
"newObject.tableDescription": "在当前数据库中创建表",
|
||||
"newObject.tableDisabled": "当前数据库不支持创建表",
|
||||
"plugins.searchExtensionsOnWeb": "在网页上搜索扩展",
|
||||
"publicCloudWidget.onlyRelevantFilesListed": "仅列出与您的连接、平台和 DbGate 版本相关的文件。请先定义连接。",
|
||||
"publicCloudWidget.refreshFiles": "刷新文件",
|
||||
"publicCloudWidget.refreshList": "刷新列表",
|
||||
"publicCloudWidget.searchPublicFiles": "搜索公共文件",
|
||||
"query.limitRows": "限制 {queryRowsLimit} 行",
|
||||
"query.named": ":variable",
|
||||
"query.noParameters": "(无参数)",
|
||||
@@ -819,10 +905,14 @@
|
||||
"sqlObject.columnName": "列名称",
|
||||
"sqlObject.databaseEmpty": "数据库 {database} 为空或结构未加载,请按刷新按钮重新加载结构",
|
||||
"sqlObject.loadingStructure": "加载数据库结构",
|
||||
"sqlObject.name": "名称",
|
||||
"sqlObject.newCollection": "新集合/容器",
|
||||
"sqlObject.rowCount": "行数",
|
||||
"sqlObject.schemaName": "模式",
|
||||
"sqlObject.search.placeholder": "在表、视图、存储过程中搜索",
|
||||
"sqlObject.searchBy": "搜索条件:",
|
||||
"sqlObject.sizeBytes": "大小(字节)",
|
||||
"sqlObject.sortBy": "排序方式:",
|
||||
"sqlObject.tableComment": "表注释",
|
||||
"sqlObject.tableEngine": "表引擎",
|
||||
"sqlObject.tableViewProcedureName": "表/视图/存储过程名称",
|
||||
@@ -902,6 +992,17 @@
|
||||
"widget.keys": "键",
|
||||
"widget.pinned": "已固定",
|
||||
"widget.tablesViewsFunctions": "表、视图、函数",
|
||||
"widgets.addNew": "添加新项",
|
||||
"widgets.administration": "管理",
|
||||
"widgets.archive": "归档(已保存的表格数据)",
|
||||
"widgets.availableExtensions": "可用扩展",
|
||||
"widgets.databaseConnections": "数据库连接",
|
||||
"widgets.dbgateCloud": "DbGate 云",
|
||||
"widgets.favoritesAndSavedFiles": "收藏和已保存文件",
|
||||
"widgets.installedExtensions": "已安装扩展",
|
||||
"widgets.managePlugins": "管理插件",
|
||||
"widgets.premiumPromo": "高级版推广",
|
||||
"widgets.queryHistoryAndClosedTabs": "查询历史和已关闭标签页",
|
||||
"widgets.selectedCellDataDetailView": "选定单元格数据详细视图",
|
||||
"widgets.viewApplicationLogs": "查看应用程序日志"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ checkout-and-merge-pro:
|
||||
repository: dbgate/dbgate-pro
|
||||
token: ${{ secrets.GH_TOKEN }}
|
||||
path: dbgate-pro
|
||||
ref: f27a03d4aff5b00a009643df146a9c17bdbf7801
|
||||
ref: 626a30d67f40e910e8c3ed89ec34d5aa58c1f7e2
|
||||
- name: Merge dbgate/dbgate-pro
|
||||
run: |
|
||||
mkdir ../dbgate-pro
|
||||
|
||||
@@ -2669,6 +2669,13 @@
|
||||
dependencies:
|
||||
sparse-bitfield "^3.0.3"
|
||||
|
||||
"@mongodb-js/saslprep@^1.3.0":
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@mongodb-js/saslprep/-/saslprep-1.3.2.tgz#51e5cad2f24b8759702d9cc185da0a3ef3784bad"
|
||||
integrity sha512-QgA5AySqB27cGTXBFmnpifAi7HxoGUeezwo6p9dI03MuDB6Pp33zgclqVb6oVK3j6I9Vesg0+oojW2XxB59SGg==
|
||||
dependencies:
|
||||
sparse-bitfield "^3.0.3"
|
||||
|
||||
"@mongodb-js/socksv5@^0.0.10":
|
||||
version "0.0.10"
|
||||
resolved "https://registry.yarnpkg.com/@mongodb-js/socksv5/-/socksv5-0.0.10.tgz#d734c9799a5d011caaf43788e16925aca90712d8"
|
||||
@@ -6159,6 +6166,11 @@ dbgate-query-splitter@^4.11.7:
|
||||
resolved "https://registry.yarnpkg.com/dbgate-query-splitter/-/dbgate-query-splitter-4.11.7.tgz#f9d53b3ceafbd76355152677b87ae453598b4a88"
|
||||
integrity sha512-2J0Gc2hyZrHnrLBpI6Tw8MvP7V01eTj+SMHLeG9ggVf6Y8JB/6JBK5kPwhz77SwZw/InhpaweCUBoHFCJUv/kg==
|
||||
|
||||
dbgate-query-splitter@^4.11.9:
|
||||
version "4.11.9"
|
||||
resolved "https://registry.yarnpkg.com/dbgate-query-splitter/-/dbgate-query-splitter-4.11.9.tgz#1461ec652caf6b44d7b94109610f497695c4aef6"
|
||||
integrity sha512-WaN9VFgmIpIvpNDUFNV1P0m7TimCAk2Itgk4lKndxC+ixhersHfLfGcea5gcKS1ie8+SRoKlFsfe/MIehvOA9A==
|
||||
|
||||
debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
|
||||
version "2.6.9"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||
@@ -10685,7 +10697,7 @@ mongodb-connection-string-url@^3.0.0:
|
||||
"@types/whatwg-url" "^11.0.2"
|
||||
whatwg-url "^13.0.0"
|
||||
|
||||
mongodb-connection-string-url@^3.0.1:
|
||||
mongodb-connection-string-url@^3.0.1, mongodb-connection-string-url@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz#e223089dfa0a5fa9bf505f8aedcbc67b077b33e7"
|
||||
integrity sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==
|
||||
@@ -10698,6 +10710,15 @@ mongodb-ns@^2.4.0:
|
||||
resolved "https://registry.yarnpkg.com/mongodb-ns/-/mongodb-ns-2.4.2.tgz#481592316d3a2be68accbba3aca2cb660eb6da1d"
|
||||
integrity sha512-gYJjEYG4v4a1WSXgUf81OBoBRlj+Z1SlnQVO392fC/4a1CN7CLWDITajZWPFTPh/yRozYk6sHHtZwZmQhodBEA==
|
||||
|
||||
"mongodb-old@npm:mongodb@^6.16.0":
|
||||
version "6.21.0"
|
||||
resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-6.21.0.tgz#f83355905900f2e7a912593f0315d5e2e0bda576"
|
||||
integrity sha512-URyb/VXMjJ4da46OeSXg+puO39XH9DeQpWCslifrRn9JWugy0D+DvvBvkm2WxmHe61O/H19JM66p1z7RHVkZ6A==
|
||||
dependencies:
|
||||
"@mongodb-js/saslprep" "^1.3.0"
|
||||
bson "^6.10.4"
|
||||
mongodb-connection-string-url "^3.0.2"
|
||||
|
||||
mongodb-redact@^1.1.5:
|
||||
version "1.1.8"
|
||||
resolved "https://registry.yarnpkg.com/mongodb-redact/-/mongodb-redact-1.1.8.tgz#47323bd7fcdb033d75ccf539e4fa3685fa5221c5"
|
||||
|
||||
Reference in New Issue
Block a user