mirror of
https://github.com/Fabio286/antares.git
synced 2025-06-05 21:59:22 +02:00
Compare commits
21 Commits
v0.7.29-be
...
v0.7.29-be
Author | SHA1 | Date | |
---|---|---|---|
2120a59d41 | |||
2cda4a1fa1 | |||
76c8cd1beb | |||
14aeebed9c | |||
|
1a1118452a | ||
|
4b0f596405 | ||
|
eb749f0f66 | ||
|
d78e59dd09 | ||
7969294a93 | |||
2ae016f0b6 | |||
b4f33bc474 | |||
f185463866 | |||
3fa0bd3cd1 | |||
|
0d3ef39822 | ||
|
a02913f4e5 | ||
f9f993cbcd | |||
|
ebd1a75445 | ||
4201532081 | |||
|
c5cb586358 | ||
|
c111b2c0f5 | ||
b70ed124eb |
@@ -293,6 +293,24 @@
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "zwei-c",
|
||||
"name": "CHANG, CHIH WEI",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/55912811?v=4",
|
||||
"profile": "https://github.com/zwei-c",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "mirrorb",
|
||||
"name": "GaoChun",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/34116207?v=4",
|
||||
"profile": "https://github.com/mirrorb",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
}
|
||||
],
|
||||
"contributorsPerLine": 7,
|
||||
|
23
CHANGELOG.md
23
CHANGELOG.md
@@ -2,6 +2,29 @@
|
||||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
|
||||
### [0.7.29-beta.2](https://github.com/antares-sql/antares/compare/v0.7.29-beta.1...v0.7.29-beta.2) (2024-10-02)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **UI:** new context menu and some minor improvements to query tabs, closes [#867](https://github.com/antares-sql/antares/issues/867) ([14aeebe](https://github.com/antares-sql/antares/commit/14aeebed9cd8e475548f5e0ade105f4b11954cb2))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **MySQL:** incorrect representation of the DATE if the year is prior to 1900, fixes [#860](https://github.com/antares-sql/antares/issues/860) ([7969294](https://github.com/antares-sql/antares/commit/7969294a93a51861c57d4396c7a0d89ecc7e8a84))
|
||||
* **MySQL:** missing exported values for DEFAULT_GENERATED table fields, fixes [#854](https://github.com/antares-sql/antares/issues/854) ([2cda4a1](https://github.com/antares-sql/antares/commit/2cda4a1fa1c80f3567e160caf0b93bc19d76fbaa))
|
||||
* **PostgreSQL:** error changing the comment for a specific table name ([eb749f0](https://github.com/antares-sql/antares/commit/eb749f0f66bf6547053e30b1503c8b2990ae5950))
|
||||
* **PostgreSQL:** unable to change table comment to empty ([d78e59d](https://github.com/antares-sql/antares/commit/d78e59dd0910d3ea6ec5183a8748420b2db57050))
|
||||
|
||||
### [0.7.29-beta.1](https://github.com/antares-sql/antares/compare/v0.7.29-beta.0...v0.7.29-beta.1) (2024-09-28)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **PostgreSQL:** table and field comments ([ebd1a75](https://github.com/antares-sql/antares/commit/ebd1a7544594eb4498560cc64de4b94146ee8439))
|
||||
* **translation:** traditional chinese translation, closes [#869](https://github.com/antares-sql/antares/issues/869) ([b70ed12](https://github.com/antares-sql/antares/commit/b70ed124eb753091a6afe637d75e59ee9771c8eb))
|
||||
|
||||
### [0.7.29-beta.0](https://github.com/antares-sql/antares/compare/v0.7.28...v0.7.29-beta.0) (2024-09-23)
|
||||
|
||||
|
||||
|
@@ -152,6 +152,8 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/bagusindrayana"><img src="https://avatars.githubusercontent.com/u/36830534?v=4?s=100" width="100px;" alt="Bagus Indrayana"/><br /><sub><b>Bagus Indrayana</b></sub></a><br /><a href="https://github.com/antares-sql/antares/commits?author=bagusindrayana" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/penguinlab"><img src="https://avatars.githubusercontent.com/u/10959317?v=4?s=100" width="100px;" alt="Naoki Ishikawa"/><br /><sub><b>Naoki Ishikawa</b></sub></a><br /><a href="#translation-penguinlab" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://fazevedo.dev"><img src="https://avatars.githubusercontent.com/u/1640325?v=4?s=100" width="100px;" alt="Filipe Azevedo"/><br /><sub><b>Filipe Azevedo</b></sub></a><br /><a href="https://github.com/antares-sql/antares/commits?author=mangas" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/zwei-c"><img src="https://avatars.githubusercontent.com/u/55912811?v=4?s=100" width="100px;" alt="CHANG, CHIH WEI"/><br /><sub><b>CHANG, CHIH WEI</b></sub></a><br /><a href="#translation-zwei-c" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mirrorb"><img src="https://avatars.githubusercontent.com/u/34116207?v=4?s=100" width="100px;" alt="GaoChun"/><br /><sub><b>GaoChun</b></sub></a><br /><a href="https://github.com/antares-sql/antares/commits?author=mirrorb" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "antares",
|
||||
"version": "0.7.29-beta.0",
|
||||
"version": "0.7.29-beta.2",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "antares",
|
||||
"version": "0.7.29-beta.0",
|
||||
"version": "0.7.29-beta.2",
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
|
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "antares",
|
||||
"productName": "Antares",
|
||||
"version": "0.7.29-beta.0",
|
||||
"version": "0.7.29-beta.2",
|
||||
"description": "A modern, fast and productivity driven SQL client with a focus in UX.",
|
||||
"license": "MIT",
|
||||
"repository": "https://github.com/antares-sql/antares.git",
|
||||
|
@@ -62,6 +62,7 @@ export const customizations: Customizations = {
|
||||
indexes: true,
|
||||
foreigns: true,
|
||||
nullable: true,
|
||||
comment: true,
|
||||
tableArray: true,
|
||||
procedureSql: '$procedure$\r\n\r\n$procedure$',
|
||||
procedureContext: true,
|
||||
|
@@ -232,12 +232,13 @@ export class MySQLClient extends BaseClient {
|
||||
const dbConfig = await this.getDbConfig();
|
||||
const connection = await mysql.createConnection({
|
||||
...dbConfig,
|
||||
typeCast: (field, next) => {
|
||||
if (field.type === 'DATETIME')
|
||||
return field.string();
|
||||
else
|
||||
return next();
|
||||
}
|
||||
dateStrings: true
|
||||
// typeCast: (field, next) => {
|
||||
// if (field.type === 'DATETIME')
|
||||
// return field.string();
|
||||
// else
|
||||
// return next();
|
||||
// }
|
||||
});
|
||||
|
||||
return connection;
|
||||
@@ -249,12 +250,13 @@ export class MySQLClient extends BaseClient {
|
||||
...dbConfig,
|
||||
connectionLimit: this._poolSize,
|
||||
enableKeepAlive: true,
|
||||
typeCast: (field, next) => {
|
||||
if (field.type === 'DATETIME')
|
||||
return field.string();
|
||||
else
|
||||
return next();
|
||||
}
|
||||
dateStrings: true
|
||||
// typeCast: (field, next) => {
|
||||
// if (field.type === 'DATETIME')
|
||||
// return field.string();
|
||||
// else
|
||||
// return next();
|
||||
// }
|
||||
});
|
||||
|
||||
this._keepaliveTimer = setInterval(async () => {
|
||||
@@ -661,7 +663,7 @@ export class MySQLClient extends BaseClient {
|
||||
charset: field.CHARACTER_SET_NAME,
|
||||
collation: field.COLLATION_NAME,
|
||||
autoIncrement: field.EXTRA.includes('auto_increment'),
|
||||
generated: field.EXTRA.toLowerCase().includes('generated'),
|
||||
generated: ['VIRTUAL GENERATED', 'VIRTUAL STORED'].includes(field.EXTRA),
|
||||
onUpdate: field.EXTRA.toLowerCase().includes('on update')
|
||||
? field.EXTRA.substr(field.EXTRA.indexOf('on update') + 9, field.EXTRA.length).trim()
|
||||
: '',
|
||||
|
@@ -498,16 +498,27 @@ export class PostgreSQLClient extends BaseClient {
|
||||
column_default: string;
|
||||
character_set_name: string;
|
||||
collation_name: string;
|
||||
column_comment: string;
|
||||
}
|
||||
/* eslint-enable camelcase */
|
||||
|
||||
const { rows } = await this
|
||||
.select('*')
|
||||
.schema('information_schema')
|
||||
.from('columns')
|
||||
.where({ table_schema: `= '${schema}'`, table_name: `= '${table}'` })
|
||||
.orderBy({ ordinal_position: 'ASC' })
|
||||
.run<TableColumnsResult>();
|
||||
// Table columns
|
||||
const { rows } = await this.raw<antares.QueryResult<TableColumnsResult>>(`
|
||||
WITH comments AS (
|
||||
SELECT attr.attname AS column, des.description AS comment, pgc.relname
|
||||
FROM pg_attribute AS attr, pg_description AS des, pg_class AS pgc
|
||||
WHERE pgc.oid = attr.attrelid
|
||||
AND des.objoid = pgc.oid
|
||||
AND pg_table_is_visible(pgc.oid)
|
||||
AND attr.attnum = des.objsubid
|
||||
)
|
||||
SELECT cols.*, comments.comment AS column_comment
|
||||
FROM "information_schema"."columns" AS cols
|
||||
LEFT JOIN comments ON comments.column = cols.column_name AND comments.relname = cols.table_name
|
||||
WHERE cols.table_schema = '${schema}'
|
||||
AND cols.table_name = '${table}'
|
||||
ORDER BY "ordinal_position" ASC
|
||||
`);
|
||||
|
||||
return rows.map(field => {
|
||||
let type = field.data_type;
|
||||
@@ -536,7 +547,7 @@ export class PostgreSQLClient extends BaseClient {
|
||||
collation: field.collation_name,
|
||||
autoIncrement: false,
|
||||
onUpdate: null,
|
||||
comment: ''
|
||||
comment: field.column_comment
|
||||
};
|
||||
});
|
||||
}
|
||||
@@ -873,6 +884,7 @@ export class PostgreSQLClient extends BaseClient {
|
||||
const newIndexes: string[] = [];
|
||||
const manageIndexes: string[] = [];
|
||||
const newForeigns: string[] = [];
|
||||
const modifyComment: string[] = [];
|
||||
|
||||
let sql = `CREATE TABLE "${schema}"."${options.name}"`;
|
||||
|
||||
@@ -888,6 +900,8 @@ export class PostgreSQLClient extends BaseClient {
|
||||
${field.nullable ? 'NULL' : 'NOT NULL'}
|
||||
${field.default !== null ? `DEFAULT ${field.default || '\'\''}` : ''}
|
||||
${field.onUpdate ? `ON UPDATE ${field.onUpdate}` : ''}`);
|
||||
if (field.comment != null)
|
||||
modifyComment.push(`COMMENT ON COLUMN "${schema}"."${options.name}"."${field.name}" IS '${field.comment}'`);
|
||||
});
|
||||
|
||||
// ADD INDEX
|
||||
@@ -908,8 +922,12 @@ export class PostgreSQLClient extends BaseClient {
|
||||
newForeigns.push(`CONSTRAINT "${foreign.constraintName}" FOREIGN KEY ("${foreign.field}") REFERENCES "${schema}"."${foreign.refTable}" ("${foreign.refField}") ON UPDATE ${foreign.onUpdate} ON DELETE ${foreign.onDelete}`);
|
||||
});
|
||||
|
||||
sql = `${sql} (${[...newColumns, ...newIndexes, ...newForeigns].join(', ')})`;
|
||||
if (manageIndexes.length) sql = `${sql}; ${manageIndexes.join(';')}`;
|
||||
sql = `${sql} (${[...newColumns, ...newIndexes, ...newForeigns].join(', ')}); `;
|
||||
if (manageIndexes.length) sql = `${sql} ${manageIndexes.join(';')}; `;
|
||||
// TABLE COMMENT
|
||||
if (options.comment != null) sql = `${sql} COMMENT ON TABLE "${schema}"."${options.name}" IS '${options.comment}'; `;
|
||||
// FIELDS COMMENT
|
||||
if (modifyComment.length) sql = `${sql} ${modifyComment.join(';')}; `;
|
||||
|
||||
return await this.raw(sql);
|
||||
}
|
||||
@@ -934,6 +952,7 @@ export class PostgreSQLClient extends BaseClient {
|
||||
const renameColumns: string[] = [];
|
||||
const createSequences: string[] = [];
|
||||
const manageIndexes: string[] = [];
|
||||
const modifyComment: string[] = [];
|
||||
|
||||
// ADD FIELDS
|
||||
additions.forEach(addition => {
|
||||
@@ -947,6 +966,8 @@ export class PostgreSQLClient extends BaseClient {
|
||||
${addition.nullable ? 'NULL' : 'NOT NULL'}
|
||||
${addition.default !== null ? `DEFAULT ${addition.default || '\'\''}` : ''}
|
||||
${addition.onUpdate ? `ON UPDATE ${addition.onUpdate}` : ''}`);
|
||||
if (addition.comment != null)
|
||||
modifyComment.push(`COMMENT ON COLUMN "${schema}"."${table}"."${addition.name}" IS '${addition.comment}'`);
|
||||
});
|
||||
|
||||
// ADD INDEX
|
||||
@@ -999,6 +1020,8 @@ export class PostgreSQLClient extends BaseClient {
|
||||
|
||||
if (change.orgName !== change.name)
|
||||
renameColumns.push(`ALTER TABLE "${schema}"."${table}" RENAME COLUMN "${change.orgName}" TO "${change.name}"`);
|
||||
if (change.comment != null)
|
||||
modifyComment.push(`COMMENT ON COLUMN "${schema}"."${table}"."${change.name}" IS '${change.comment}'`);
|
||||
});
|
||||
|
||||
// CHANGE INDEX
|
||||
@@ -1046,8 +1069,11 @@ export class PostgreSQLClient extends BaseClient {
|
||||
if (alterColumns.length) sql += `ALTER TABLE "${schema}"."${table}" ${alterColumns.join(', ')}; `;
|
||||
if (createSequences.length) sql = `${createSequences.join(';')}; ${sql}`;
|
||||
if (manageIndexes.length) sql = `${manageIndexes.join(';')}; ${sql}`;
|
||||
// TABLE COMMENT
|
||||
if (options.comment != null) sql = `${sql} COMMENT ON TABLE "${schema}"."${table}" IS '${options.comment}'; `;
|
||||
// FIELDS COMMENT
|
||||
if (modifyComment.length) sql = `${sql} ${modifyComment.join(';')}; `;
|
||||
if (options.name) sql += `ALTER TABLE "${schema}"."${table}" RENAME TO "${options.name}"; `;
|
||||
|
||||
// RENAME
|
||||
if (renameColumns.length) sql = `${renameColumns.join(';')}; ${sql}`;
|
||||
|
||||
|
@@ -141,8 +141,11 @@ onMounted(() => {
|
||||
|
||||
while (node) {
|
||||
if (node.nodeName.match(/^(input|textarea)$/i) || node.isContentEditable) {
|
||||
InputMenu.popup({ window: getCurrentWindow() });
|
||||
break;
|
||||
if (!node.parentNode.className.split(' ').includes('editor-query')) {
|
||||
InputMenu.popup({ window: getCurrentWindow() });
|
||||
console.log(node.parentNode.className);
|
||||
break;
|
||||
}
|
||||
}
|
||||
node = node.parentNode;
|
||||
}
|
||||
|
@@ -612,7 +612,7 @@ const otherContributors = computed(() => {
|
||||
return contributors
|
||||
.split(',')
|
||||
.filter(c => !c.includes(appAuthor))
|
||||
.sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));
|
||||
.sort((a, b) => a.toLowerCase().trim().localeCompare(b.toLowerCase()));
|
||||
});
|
||||
|
||||
const selectTab = (tab: string) => {
|
||||
|
@@ -3,6 +3,7 @@
|
||||
<div
|
||||
:id="`editor-${id}`"
|
||||
class="editor"
|
||||
:class="editorClasses"
|
||||
:style="{height: `${height}px`}"
|
||||
/>
|
||||
</div>
|
||||
@@ -54,7 +55,8 @@ const props = defineProps({
|
||||
schema: { type: String, default: '' },
|
||||
autoFocus: { type: Boolean, default: false },
|
||||
readOnly: { type: Boolean, default: false },
|
||||
height: { type: Number, default: 200 }
|
||||
height: { type: Number, default: 200 },
|
||||
editorClasses: { type: String, default: '' }
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
@@ -405,18 +407,17 @@ defineExpose({ editor });
|
||||
|
||||
.ace_gutter-cell.ace_breakpoint {
|
||||
&::before {
|
||||
content: '\F0403';
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 3px;
|
||||
top: 2px;
|
||||
color: var(--primary-color);
|
||||
left: 0px;
|
||||
top: 8px;
|
||||
display: inline-block;
|
||||
font: normal normal normal 24px/1 "Material Design Icons", sans-serif;
|
||||
font-size: inherit;
|
||||
text-rendering: auto;
|
||||
line-height: inherit;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-left: 8px solid transparent;
|
||||
border-top: 8px solid transparent;
|
||||
border-right: 8px solid var(--primary-color);
|
||||
transform: rotate(-45deg);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
@@ -15,6 +15,7 @@
|
||||
:schema="breadcrumbsSchema"
|
||||
:is-selected="isSelected"
|
||||
:height="editorHeight"
|
||||
editor-classes="editor-query"
|
||||
/>
|
||||
<div ref="resizer" class="query-area-resizer" />
|
||||
<div ref="queryAreaFooter" class="workspace-query-runner-footer">
|
||||
@@ -273,6 +274,7 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getCurrentWindow, Menu } from '@electron/remote';
|
||||
import { Ace } from 'ace-builds';
|
||||
import { ConnectionParams } from 'common/interfaces/antares';
|
||||
import { uidGen } from 'common/libs/uidGen';
|
||||
@@ -475,6 +477,8 @@ const runQuery = async (query: string) => {
|
||||
saveHistory(params);
|
||||
if (!autocommit.value)
|
||||
setUnsavedChanges({ uid: props.connection.uid, tUid: props.tabUid, isChanged: true });
|
||||
|
||||
queryEditor.value.editor.focus();
|
||||
}
|
||||
else
|
||||
addNotification({ status: 'error', message: response });
|
||||
@@ -739,7 +743,11 @@ const openFile = async () => {
|
||||
|
||||
const saveFileAs = async () => {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
const result: any = await Application.showSaveDialog({ filters: [{ name: 'SQL', extensions: ['sql'] }], defaultPath: `${queryName.value || 'query'}.sql` });
|
||||
const result: any = await Application.showSaveDialog({
|
||||
filters: [{ name: 'SQL', extensions: ['sql'] }],
|
||||
defaultPath: (!queryName.value.includes('.sql') ? `${queryName.value}.sql` :queryName.value) || 'query.sql'
|
||||
});
|
||||
|
||||
if (result && !result.canceled) {
|
||||
await Application.writeFile(result.filePath, query.value);
|
||||
addNotification({ status: 'success', message: t('general.actionSuccessful', { action: t('application.saveFile') }) });
|
||||
@@ -750,9 +758,13 @@ const saveFileAs = async () => {
|
||||
};
|
||||
|
||||
const saveFile = async () => {
|
||||
await Application.writeFile(filePath.value, query.value);
|
||||
addNotification({ status: 'success', message: t('general.actionSuccessful', { action: t('application.saveFile') }) });
|
||||
lastSavedQuery.value = toRaw(query.value);
|
||||
if (filePath.value) {
|
||||
await Application.writeFile(filePath.value, query.value);
|
||||
addNotification({ status: 'success', message: t('general.actionSuccessful', { action: t('application.saveFile') }) });
|
||||
lastSavedQuery.value = toRaw(query.value);
|
||||
}
|
||||
else
|
||||
saveFileAs();
|
||||
};
|
||||
|
||||
const loadFileContent = async (file: string) => {
|
||||
@@ -785,6 +797,67 @@ onMounted(() => {
|
||||
|
||||
if (props.tab.filePath)
|
||||
loadFileContent(props.tab.filePath);
|
||||
|
||||
queryEditor.value.editor.container.addEventListener('contextmenu', (e) => {
|
||||
const InputMenu = Menu.buildFromTemplate([
|
||||
{
|
||||
label: t('general.run'),
|
||||
click: () => runQuery(query.value)
|
||||
},
|
||||
{
|
||||
label: t('general.clear'),
|
||||
click: () => clear()
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
label: t('application.saveFile'),
|
||||
click: () => saveFile()
|
||||
},
|
||||
{
|
||||
label: t('application.saveFileAs'),
|
||||
click: () => saveFileAs()
|
||||
},
|
||||
{
|
||||
label: t('application.openFile'),
|
||||
click: () => openFile()
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
label: t('general.cut'),
|
||||
role: 'cut'
|
||||
},
|
||||
{
|
||||
label: t('general.copy'),
|
||||
role: 'copy'
|
||||
},
|
||||
{
|
||||
label: t('general.paste'),
|
||||
role: 'paste'
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
label: t('general.selectAll'),
|
||||
role: 'selectAll'
|
||||
}
|
||||
]);
|
||||
e.preventDefault();
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
let node: any = e.target;
|
||||
while (node) {
|
||||
if (node.nodeName.match(/^(input|textarea)$/i) || node.isContentEditable) {
|
||||
InputMenu.popup({ window: getCurrentWindow() });
|
||||
break;
|
||||
}
|
||||
node = node.parentNode;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
|
@@ -17,6 +17,8 @@ import { ruRU } from './ru-RU';
|
||||
import { ukUA } from './uk-UA';
|
||||
import { viVN } from './vi-VN';
|
||||
import { zhCN } from './zh-CN';
|
||||
import { zhTW } from './zh-TW';
|
||||
|
||||
const messages = {
|
||||
'en-US': enUS,
|
||||
'it-IT': itIT,
|
||||
@@ -34,7 +36,8 @@ const messages = {
|
||||
'nl-NL': nlNL,
|
||||
'ca-ES': caES,
|
||||
'cs-CZ': csCZ,
|
||||
'uk-UA': ukUA
|
||||
'uk-UA': ukUA,
|
||||
'zh-TW': zhTW
|
||||
};
|
||||
|
||||
type NestedPartial<T> = {
|
||||
|
@@ -9,6 +9,7 @@ export const localesNames: Record<string, string> = {
|
||||
'vi-VN': 'Tiếng Việt',
|
||||
'ja-JP': '日本語',
|
||||
'zh-CN': '简体中文',
|
||||
'zh-TW': '正體中文',
|
||||
'ru-RU': 'Русский',
|
||||
'id-ID': 'Bahasa Indonesia',
|
||||
'ko-KR': '한국어',
|
||||
|
569
src/renderer/i18n/zh-TW.ts
Normal file
569
src/renderer/i18n/zh-TW.ts
Normal file
@@ -0,0 +1,569 @@
|
||||
export const zhTW = {
|
||||
general: {
|
||||
// 通用術語
|
||||
edit: '編輯',
|
||||
save: '保存',
|
||||
close: '關閉',
|
||||
delete: '刪除',
|
||||
confirm: '確定',
|
||||
cancel: '取消',
|
||||
send: '發送',
|
||||
refresh: '重新整理',
|
||||
autoRefresh: '自動重新整理',
|
||||
version: '版本',
|
||||
donate: '捐贈',
|
||||
run: '執行',
|
||||
results: '結果',
|
||||
size: '大小',
|
||||
mimeType: 'MIME類型',
|
||||
download: '下載',
|
||||
add: '新增',
|
||||
data: '資料',
|
||||
properties: '屬性',
|
||||
name: '名稱',
|
||||
clear: '清除',
|
||||
options: '選項',
|
||||
insert: '插入',
|
||||
discard: '丟棄',
|
||||
stay: '等待',
|
||||
author: '作者',
|
||||
upload: '上傳',
|
||||
browse: '瀏覽',
|
||||
content: '內容',
|
||||
cut: '剪下',
|
||||
copy: '複製',
|
||||
paste: '貼上',
|
||||
duplicate: '副本',
|
||||
tools: '工具',
|
||||
seconds: '秒',
|
||||
all: '全部',
|
||||
new: '新',
|
||||
select: '選擇',
|
||||
change: '變更',
|
||||
include: '包含',
|
||||
includes: '包含',
|
||||
completed: '已完成',
|
||||
aborted: '中止',
|
||||
disabled: '已禁用',
|
||||
enable: '啟用',
|
||||
disable: '禁用',
|
||||
contributors: '貢獻者',
|
||||
pin: '固定',
|
||||
unpin: '取消固定',
|
||||
folder: '檔案夾 | 檔案夾',
|
||||
none: '無',
|
||||
singleQuote: '單引號',
|
||||
doubleQuote: '雙引號',
|
||||
deleteConfirm: '您是否確認取消',
|
||||
uploadFile: '上傳檔案',
|
||||
format: '格式碼', // 格式碼
|
||||
history: '曆史',
|
||||
filter: '過濾器',
|
||||
manualValue: '手動值',
|
||||
selectAll: '選擇全部',
|
||||
pageNumber: '頁數',
|
||||
directoryPath: '目錄路徑',
|
||||
actionSuccessful: '{action} 成功',
|
||||
outputFormat: '輸出格式',
|
||||
singleFile: '單個 {ext} 檔案',
|
||||
zipCompressedFile: 'ZIP 壓縮 {ext} 檔案',
|
||||
copyName: '複製名稱',
|
||||
search: '搜索',
|
||||
title: '標題',
|
||||
archive: '封存',
|
||||
undo: '重做',
|
||||
moveTo: '移動到'
|
||||
},
|
||||
connection: {
|
||||
// 資料庫連接
|
||||
connection: '連線',
|
||||
connectionName: '連線名稱',
|
||||
hostName: '主機名',
|
||||
client: '資料庫類型',
|
||||
port: '連線埠',
|
||||
user: '使用者',
|
||||
password: '密碼',
|
||||
credentials: '憑證',
|
||||
connect: '連線',
|
||||
connected: '已連線',
|
||||
disconnect: '斷開連線',
|
||||
disconnected: '斷開連線',
|
||||
ssl: 'SSL',
|
||||
enableSsl: '啟用 SSL',
|
||||
privateKey: '私鑰',
|
||||
certificate: '證書',
|
||||
caCertificate: 'CA 證書',
|
||||
ciphers: '密碼',
|
||||
untrustedConnection: '不受信任的連線',
|
||||
passphrase: '密碼提示',
|
||||
sshTunnel: 'SSH 通道',
|
||||
enableSsh: '啟用 SSH',
|
||||
connectionString: '連接字符串',
|
||||
addConnection: '新增連線',
|
||||
createConnection: '建立連線',
|
||||
createNewConnection: '建立新連線',
|
||||
askCredentials: '詢問憑據',
|
||||
testConnection: '測試連線',
|
||||
editConnection: '編輯連線',
|
||||
deleteConnection: '刪除連線',
|
||||
connectionSuccessfullyMade: '連線成功了!',
|
||||
readOnlyMode: '唯讀模式',
|
||||
allConnections: '所有連線',
|
||||
searchForConnections: '搜索連線',
|
||||
keepAliveInterval: '保持活躍間隔',
|
||||
singleConnection: '單一連線'
|
||||
},
|
||||
database: {
|
||||
// 資料庫庫相關術語
|
||||
schema: '模式(schema)',
|
||||
type: '類型',
|
||||
insert: '插入',
|
||||
indexes: '索引',
|
||||
foreignKeys: '外鍵',
|
||||
length: '長度',
|
||||
unsigned: '無符號',
|
||||
default: '預設',
|
||||
comment: '註釋',
|
||||
key: '鍵 | 鍵',
|
||||
order: '排序',
|
||||
expression: '表達式',
|
||||
autoIncrement: '自動增量',
|
||||
engine: '引擎',
|
||||
field: '字段 | 字段',
|
||||
approximately: '大約',
|
||||
total: '總計',
|
||||
table: '表 | 表',
|
||||
view: '視圖 | 視圖',
|
||||
definer: '定義者',
|
||||
algorithm: '算法',
|
||||
trigger: '觸發器 | 觸發器',
|
||||
storedRoutine: '存儲例程 | 存儲例程',
|
||||
scheduler: '調度器 | 調度器',
|
||||
event: '事件',
|
||||
parameters: '參數',
|
||||
function: '函數 | 函數',
|
||||
deterministic: '確定的',
|
||||
context: '上下文',
|
||||
export: '匯出',
|
||||
import: '匯入',
|
||||
returns: '回傳',
|
||||
timing: '定時',
|
||||
state: '狀態',
|
||||
execution: '執行',
|
||||
starts: '開始',
|
||||
ends: '結束',
|
||||
variables: '變數',
|
||||
processes: '進程',
|
||||
database: '資料庫',
|
||||
array: '數據',
|
||||
structure: '結構',
|
||||
row: '行 | 行',
|
||||
cell: '單元格 | 單元格',
|
||||
triggerFunction: '觸發器函數 | 觸發器函數',
|
||||
routine: '例程 | 例程',
|
||||
drop: 'Drop',
|
||||
commit: '提交',
|
||||
rollback: '回滾',
|
||||
ddl: '資料定義語言',
|
||||
collation: '排序規則',
|
||||
resultsTable: '結果表',
|
||||
unableEditFieldWithoutPrimary: '無法編輯結果集中一個沒有主鍵的字段',
|
||||
editCell: '編輯單元格',
|
||||
deleteRows: '刪除行 | 刪除 {count} 行',
|
||||
confirmToDeleteRows: '您是否確認要刪除一行? | 您是否確認要刪除 {count} 行?',
|
||||
addNewRow: '新增行',
|
||||
numberOfInserts: '插入的數量',
|
||||
affectedRows: '受影響的行',
|
||||
createNewDatabase: '建立新資料庫',
|
||||
databaseName: '資料庫名稱',
|
||||
serverDefault: '預設伺服器',
|
||||
deleteDatabase: '刪除資料庫',
|
||||
editDatabase: '編輯資料庫',
|
||||
clearChanges: '清除變更',
|
||||
addNewField: '新增新字段',
|
||||
manageIndexes: '管理索引',
|
||||
manageForeignKeys: '管理外鍵',
|
||||
allowNull: '允許 NULL',
|
||||
zeroFill: 'zeroFill',
|
||||
customValue: '自定義值',
|
||||
onUpdate: '在更新',
|
||||
deleteField: '刪除字段',
|
||||
createNewIndex: '建立新索引',
|
||||
addToIndex: '新增到索引',
|
||||
createNewTable: '建立新表',
|
||||
emptyTable: '清空表',
|
||||
duplicateTable: '重複表',
|
||||
deleteTable: '刪除表',
|
||||
exportTable: '導出表',
|
||||
emptyConfirm: '您是否確認清空',
|
||||
thereAreNoIndexes: '沒有索引',
|
||||
thereAreNoForeign: '沒有外鍵',
|
||||
createNewForeign: '建立新外鍵',
|
||||
referenceTable: '參考表',
|
||||
referenceField: '參考字段',
|
||||
foreignFields: '外鍵字段',
|
||||
invalidDefault: '無效預設值',
|
||||
onDelete: '在刪除',
|
||||
selectStatement: '選擇語句',
|
||||
triggerStatement: '觸發器語句',
|
||||
sqlSecurity: 'SQL 安全',
|
||||
updateOption: '更新選項',
|
||||
deleteView: '刪除視圖',
|
||||
createNewView: '建立新視圖',
|
||||
deleteTrigger: '刪除觸發器',
|
||||
createNewTrigger: '建立新觸發器',
|
||||
currentUser: '當前使用者',
|
||||
routineBody: '例程主體',
|
||||
dataAccess: '數據訪問',
|
||||
thereAreNoParameters: '沒有參數',
|
||||
createNewParameter: '建立新參數',
|
||||
createNewRoutine: '建立新存儲例程',
|
||||
deleteRoutine: '刪除存儲例程',
|
||||
functionBody: '函數體',
|
||||
createNewFunction: '建立新函數',
|
||||
deleteFunction: '刪除函數',
|
||||
schedulerBody: '調度器主體',
|
||||
createNewScheduler: '建立新調度器',
|
||||
deleteScheduler: '刪除調度器',
|
||||
preserveOnCompletion: '完成時保留',
|
||||
tableFiller: '表填充器',
|
||||
fakeDataLanguage: '僞造的數據語言',
|
||||
queryDuration: '查詢持續時間',
|
||||
setNull: '設定 NULL',
|
||||
processesList: '進程列表',
|
||||
processInfo: '進程信息',
|
||||
manageUsers: '管理使用者',
|
||||
createNewSchema: '建立新模式(schema)',
|
||||
schemaName: '模式名稱',
|
||||
editSchema: '編輯模式',
|
||||
deleteSchema: '刪除模式',
|
||||
noSchema: '沒有模式',
|
||||
runQuery: '運行查詢',
|
||||
thereAreNoTableFields: '沒有表的字段',
|
||||
newTable: '新表',
|
||||
newView: '新視圖',
|
||||
newTrigger: '新觸發器',
|
||||
newRoutine: '新例程',
|
||||
newFunction: '新函數',
|
||||
newScheduler: '新調度器',
|
||||
newTriggerFunction: '新觸發器函數',
|
||||
thereAreNoQueriesYet: '目前還沒有任何查詢',
|
||||
searchForQueries: '搜索查詢',
|
||||
killProcess: '終止進程',
|
||||
exportSchema: '導出模式(schema)',
|
||||
importSchema: '導入模式(schema)',
|
||||
newInsertStmtEvery: '每條新的 INSERT 語句',
|
||||
processingTableExport: '處理 {table}',
|
||||
fetchingTableExport: '正在獲取 {table} 數據',
|
||||
writingTableExport: '正在寫入 {table} 數據',
|
||||
checkAllTables: '檢查所有表',
|
||||
uncheckAllTables: '不檢查所有表',
|
||||
killQuery: '終止查詢',
|
||||
insertRow: '插入單行 | 插入多行',
|
||||
commitMode: '提交模式',
|
||||
autoCommit: '自動提交',
|
||||
manualCommit: '手動提交',
|
||||
importQueryErrors: '警告: 發生了 {n} 個錯誤 | 警告: 發生了 {n} 個錯誤',
|
||||
executedQueries: '{n} 個查詢已執行 | {n} 個查詢已執行',
|
||||
disableFKChecks: '禁用外鍵檢查',
|
||||
formatQuery: '格式查詢',
|
||||
queryHistory: '查詢曆史',
|
||||
clearQuery: '清除查詢',
|
||||
fillCell: '填充單元格',
|
||||
executeSelectedQuery: '執行所選查詢',
|
||||
noResultsPresent: '沒有結果',
|
||||
sqlExportOptions: 'SQL 導出選項',
|
||||
targetTable: '目標表',
|
||||
switchDatabase: '切換資料庫',
|
||||
searchForElements: '搜索元素',
|
||||
searchForSchemas: '搜索模式(schema)',
|
||||
savedQueries: '已保存的查詢'
|
||||
},
|
||||
application: {
|
||||
// 應用程式相關術語
|
||||
settings: '設定',
|
||||
console: '控製臺',
|
||||
general: '常規',
|
||||
themes: '主題',
|
||||
update: '更新',
|
||||
about: '關於',
|
||||
language: '語言',
|
||||
shortcuts: '捷徑',
|
||||
key: '按鍵 | 按鍵', // 鍵盤按鍵
|
||||
event: '事件',
|
||||
light: '明亮',
|
||||
dark: '暗黑',
|
||||
autoCompletion: '自動完成',
|
||||
application: '應用程式',
|
||||
editor: '編輯器',
|
||||
changelog: '變更日誌',
|
||||
small: '小',
|
||||
medium: '中',
|
||||
large: '大',
|
||||
appearance: '外觀',
|
||||
color: '顔色',
|
||||
label: '標簽',
|
||||
icon: '圖示',
|
||||
fileName: '檔案名稱',
|
||||
choseFile: '選擇檔案',
|
||||
data: '數據',
|
||||
password: '密碼',
|
||||
required: '依賴',
|
||||
madeWithJS: '使用 💛 和 JavaScript 製作!',
|
||||
checkForUpdates: '檢查更新',
|
||||
noUpdatesAvailable: '無可用更新',
|
||||
checkingForUpdate: '正在檢查更新',
|
||||
checkFailure: '檢查失敗,請稍後再試',
|
||||
updateAvailable: '可用更新',
|
||||
downloadingUpdate: '正在下載更新',
|
||||
updateDownloaded: '已下載更新',
|
||||
restartToInstall: '重啟 Antares 以進行安裝',
|
||||
includeBetaUpdates: '包含測試版更新',
|
||||
notificationsTimeout: '通知超時',
|
||||
openNewTab: '打開一個新標簽',
|
||||
unsavedChanges: '未保存的變更',
|
||||
discardUnsavedChanges: '您有一些未保存的變更, 關閉此標簽將放棄這些變更.',
|
||||
applicationTheme: '應用程式主題',
|
||||
editorTheme: '編輯器主題',
|
||||
wrapLongLines: '將長行換行顯示',
|
||||
markdownSupported: '支援 Markdown',
|
||||
plantATree: '種植一棵樹',
|
||||
dataTabPageSize: '資料標簽的頁面大小',
|
||||
noOpenTabs: '沒有打開的標簽, 請在左側欄上導航或:',
|
||||
restorePreviousSession: '恢複上一個會話',
|
||||
closeTab: '關閉標簽',
|
||||
goToDownloadPage: '轉到下載頁面',
|
||||
disableBlur: '禁用模糊',
|
||||
missingOrIncompleteTranslation: '有缺失或不完整的翻譯?',
|
||||
findOutHowToContribute: '了解如何做出貢獻',
|
||||
reportABug: '報告錯誤',
|
||||
nextTab: '下一個標簽',
|
||||
previousTab: '上一個標簽',
|
||||
selectTabNumber: '選擇標簽編號 {param}',
|
||||
toggleConsole: '切換控製臺',
|
||||
addShortcut: '新增捷徑',
|
||||
editShortcut: '編輯捷徑',
|
||||
deleteShortcut: '刪除捷徑',
|
||||
restoreDefaults: '恢複預設',
|
||||
restoreDefaultsQuestion: '是否確認恢複預設值?',
|
||||
registerAShortcut: '註冊捷徑',
|
||||
invalidShortcutMessage: '無效組合,請繼續鍵入',
|
||||
shortcutAlreadyExists: '捷徑已存在',
|
||||
saveContent: '保存內容',
|
||||
openAllConnections: '打開所有連接',
|
||||
openSettings: '打開設定',
|
||||
openScratchpad: '打開草稿欄',
|
||||
runOrReload: '運行或重新加載',
|
||||
openFilter: '打開過濾器',
|
||||
nextResultsPage: '下一個結果頁',
|
||||
previousResultsPage: '上一個結果頁',
|
||||
editFolder: '編輯檔案夾',
|
||||
folderName: '檔案夾名稱',
|
||||
deleteFolder: '刪除檔案夾',
|
||||
editConnectionAppearance: '編輯連接的外觀',
|
||||
defaultCopyType: '預設複製類型',
|
||||
showTableSize: '在側邊欄顯示表大小',
|
||||
showTableSizeDescription: '僅限 MySQL/MariaDB. 啓用此選項可能會影響許多表的模式(schema)的性能.',
|
||||
switchSearchMethod: '切換搜索方法',
|
||||
phpArray: 'PHP 陣列',
|
||||
closeAllTabs: '關閉所有標簽',
|
||||
closeOtherTabs: '關閉其他標簽',
|
||||
closeTabsToLeft: '關閉左側的標簽',
|
||||
closeTabsToRight: '關閉右側的標簽',
|
||||
csvFieldDelimiter: '字段分隔符',
|
||||
csvLinesTerminator: '行終止符',
|
||||
csvStringDelimiter: '字符串分隔符',
|
||||
csvIncludeHeader: '包含頁眉',
|
||||
csvExportOptions: 'CSV 導出選項',
|
||||
exportData: '導出數據',
|
||||
exportDataExplanation: '將保存的連接導出到 Antares. 係統將要求您輸入密碼以加密導出的檔案.',
|
||||
importData: '導入數據',
|
||||
importDataExplanation: '導入包含連接的 .antares 檔案. 您需要輸入在導出過程中定義的密碼.',
|
||||
includeConnectionPasswords: '包含連接密碼',
|
||||
includeFolders: '包含檔案夾',
|
||||
encryptionPassword: '加密密碼',
|
||||
encryptionPasswordError: '加密密碼的長度必須至少為 8 個字符.',
|
||||
ignoreDuplicates: '忽略重複',
|
||||
wrongImportPassword: '錯誤的導入密碼',
|
||||
wrongFileFormat: '錯誤的檔案格式',
|
||||
dataImportSuccess: '數據已成功導入',
|
||||
note: '筆記 | 筆記',
|
||||
thereAreNoNotesYet: '目前還沒有筆記',
|
||||
addNote: '新增筆記',
|
||||
editNote: '編輯筆記',
|
||||
saveAsNote: '另存為筆記',
|
||||
showArchivedNotes: '顯示歸檔筆記',
|
||||
hideArchivedNotes: '隱藏歸檔筆記',
|
||||
tag: '筆記標簽', // Note tag,
|
||||
saveFile: '保存檔案',
|
||||
saveFileAs: '將檔案另存為',
|
||||
openFile: '打開檔案',
|
||||
openNotes: '打開筆記'
|
||||
},
|
||||
faker: {
|
||||
// Faker.js 方法,用於隨機生成的內容
|
||||
address: '地址',
|
||||
commerce: '商業',
|
||||
company: '公司',
|
||||
database: '資料庫',
|
||||
date: '日期',
|
||||
finance: '財務',
|
||||
git: 'Git',
|
||||
hacker: '駭客',
|
||||
internet: '網際網路',
|
||||
lorem: 'Lorem',
|
||||
name: '姓名',
|
||||
music: '音樂',
|
||||
phone: '電話',
|
||||
random: '隨機',
|
||||
system: '系統',
|
||||
time: '時間',
|
||||
vehicle: '車輛',
|
||||
zipCode: '郵政編碼',
|
||||
zipCodeByState: '各州的郵政編碼',
|
||||
city: '城市',
|
||||
cityPrefix: '城市前綴',
|
||||
citySuffix: '城市字尾',
|
||||
streetName: '街道名稱',
|
||||
streetAddress: '街道地址',
|
||||
streetSuffix: '街道字尾',
|
||||
streetPrefix: '街道前綴',
|
||||
secondaryAddress: '次要地址',
|
||||
county: '縣',
|
||||
country: '國家',
|
||||
countryCode: '國家代碼',
|
||||
state: '州',
|
||||
stateAbbr: '州簡稱',
|
||||
latitude: '緯度',
|
||||
longitude: '經度',
|
||||
direction: '\'方向\'',
|
||||
cardinalDirection: '方位',
|
||||
ordinalDirection: '順序方向',
|
||||
nearbyGPSCoordinate: '附近的 GPS 坐標',
|
||||
timeZone: '時區',
|
||||
color: '顔色',
|
||||
department: '部門',
|
||||
productName: '産品名稱',
|
||||
price: '價格',
|
||||
productAdjective: '産品形容詞',
|
||||
productMaterial: '産品材料',
|
||||
product: '産品',
|
||||
productDescription: '産品說明',
|
||||
suffixes: '字尾',
|
||||
companyName: '公司名稱',
|
||||
companySuffix: '公司字尾',
|
||||
catchPhrase: '流行語',
|
||||
bs: 'BS',
|
||||
catchPhraseAdjective: '流行語形容詞',
|
||||
catchPhraseDescriptor: '流行語說明',
|
||||
catchPhraseNoun: '流行語名詞',
|
||||
bsAdjective: 'BS 形容詞',
|
||||
bsBuzz: 'BS 嗡嗡聲',
|
||||
bsNoun: 'BS 名稱',
|
||||
column: '列',
|
||||
type: '類型',
|
||||
collation: '排序規則',
|
||||
engine: '引擎',
|
||||
past: '過去',
|
||||
now: '現在',
|
||||
future: '未來',
|
||||
between: '之間',
|
||||
recent: '最近',
|
||||
soon: '很快',
|
||||
month: '月',
|
||||
weekday: '工作日',
|
||||
account: '帳戶',
|
||||
accountName: '帳戶名稱',
|
||||
routingNumber: '路由編號',
|
||||
mask: '掩碼',
|
||||
amount: '金額',
|
||||
transactionType: '交易類型',
|
||||
currencyCode: '貨幣代碼',
|
||||
currencyName: '貨幣名稱',
|
||||
currencySymbol: '貨幣符號',
|
||||
bitcoinAddress: '位元幣地址',
|
||||
litecoinAddress: '萊特幣地址',
|
||||
creditCardNumber: '信用卡號碼',
|
||||
creditCardCVV: '信用卡CVV',
|
||||
ethereumAddress: '以太坊地址',
|
||||
iban: 'Iban',
|
||||
bic: 'Bic',
|
||||
transactionDescription: '交易描述',
|
||||
branch: '分支',
|
||||
commitEntry: '提交條目',
|
||||
commitMessage: '提交信息',
|
||||
commitSha: '提交 SHA',
|
||||
shortSha: '短的 SHA',
|
||||
abbreviation: '縮寫',
|
||||
adjective: '形容詞',
|
||||
noun: '名詞',
|
||||
verb: '動詞',
|
||||
ingverb: '英式動詞',
|
||||
phrase: '短語',
|
||||
avatar: '頭像',
|
||||
email: '電子信箱',
|
||||
exampleEmail: '示例電子郵件',
|
||||
userName: '使用者名',
|
||||
protocol: '協議',
|
||||
url: '統一資源定位地址',
|
||||
domainName: '域名',
|
||||
domainSuffix: '域名字尾',
|
||||
domainWord: '域詞',
|
||||
ip: 'Ip',
|
||||
ipv6: 'Ipv6',
|
||||
userAgent: '使用者代理',
|
||||
mac: 'Mac',
|
||||
password: '密碼',
|
||||
word: '單詞',
|
||||
words: '單詞',
|
||||
sentence: '句子',
|
||||
slug: 'Slug',
|
||||
sentences: '句子',
|
||||
paragraph: '段落',
|
||||
paragraphs: '段落',
|
||||
text: '文本',
|
||||
lines: '行',
|
||||
genre: '類型',
|
||||
firstName: '名',
|
||||
lastName: '姓氏',
|
||||
middleName: '中間名',
|
||||
findName: '全名',
|
||||
jobTitle: '職位名稱',
|
||||
gender: '性別',
|
||||
prefix: '前綴',
|
||||
suffix: '字尾',
|
||||
title: '頭銜',
|
||||
jobDescriptor: '工作描述',
|
||||
jobArea: '工作領域',
|
||||
jobType: '工作類型',
|
||||
phoneNumber: '電話號碼',
|
||||
phoneNumberFormat: '電話號碼格式',
|
||||
phoneFormats: '電話格式',
|
||||
number: '號碼',
|
||||
float: 'Float',
|
||||
arrayElement: '陣列元素',
|
||||
arrayElements: '陣列元素',
|
||||
objectElement: '物件元素',
|
||||
uuid: 'Uuid',
|
||||
boolean: '布林',
|
||||
image: '鏡像',
|
||||
locale: '區域',
|
||||
alpha: '阿爾法',
|
||||
alphaNumeric: 'α 數字',
|
||||
hexaDecimal: '十六進製',
|
||||
fileName: '檔案名',
|
||||
commonFileName: '普通檔案名',
|
||||
mimeType: 'MIME類型',
|
||||
commonFileType: '常見檔案類型',
|
||||
commonFileExt: '常見檔案擴展名',
|
||||
fileType: '檔案類型',
|
||||
fileExt: '檔案擴展名',
|
||||
directoryPath: '目錄路徑',
|
||||
filePath: '檔案路徑',
|
||||
semver: 'Semver',
|
||||
manufacturer: '製造商',
|
||||
model: '型號',
|
||||
fuel: 'Fuel',
|
||||
vin: 'Vin'
|
||||
}
|
||||
};
|
@@ -256,6 +256,10 @@ option:checked {
|
||||
}
|
||||
|
||||
&.active {
|
||||
a {
|
||||
border-bottom-color: transparent;
|
||||
}
|
||||
|
||||
.tab-link {
|
||||
border-color: transparent;
|
||||
}
|
||||
|
@@ -255,6 +255,11 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
&.result-tabs .tab-item {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.workspace-query-runner .workspace-query-runner-footer .workspace-query-buttons .btn {
|
||||
color: $body-font-color-dark;
|
||||
}
|
||||
|
Reference in New Issue
Block a user