-
![]()
+
{{ appName }}
{{ $t('word.version') }} {{ appVersion }}
diff --git a/src/renderer/components/TheTitleBar.vue b/src/renderer/components/TheTitleBar.vue
index f82d6d5d..8480a0ed 100644
--- a/src/renderer/components/TheTitleBar.vue
+++ b/src/renderer/components/TheTitleBar.vue
@@ -1,11 +1,11 @@
-
+
diff --git a/src/renderer/components/WorkspaceEmptyState.vue b/src/renderer/components/WorkspaceEmptyState.vue
index 77b9fd11..e35ed859 100644
--- a/src/renderer/components/WorkspaceEmptyState.vue
+++ b/src/renderer/components/WorkspaceEmptyState.vue
@@ -1,7 +1,16 @@
{{ $t('message.noOpenTabs') }}
diff --git a/src/renderer/components/WorkspaceTabQueryTable.vue b/src/renderer/components/WorkspaceTabQueryTable.vue
index 610e00ef..1c13d49e 100644
--- a/src/renderer/components/WorkspaceTabQueryTable.vue
+++ b/src/renderer/components/WorkspaceTabQueryTable.vue
@@ -367,7 +367,7 @@ export default {
},
deleteSelected () {
this.closeContext();
- const rows = this.localResults.filter(row => this.selectedRows.includes(row._id)).map(row => {
+ const rows = JSON.parse(JSON.stringify(this.localResults)).filter(row => this.selectedRows.includes(row._id)).map(row => {
delete row._id;
return row;
});
diff --git a/src/renderer/i18n/vi-VN.js b/src/renderer/i18n/vi-VN.js
index f2575172..d89565c9 100644
--- a/src/renderer/i18n/vi-VN.js
+++ b/src/renderer/i18n/vi-VN.js
@@ -1,413 +1,413 @@
module.exports = {
- word: {
- edit: 'Chỉnh sửa',
- save: 'Lưu',
- close: 'Đóng',
- delete: 'Xoá',
- confirm: 'Xác nhận',
- cancel: 'Huỷ',
- send: 'Gửi',
- connectionName: 'Tên kết nối',
- client: 'Client',
- hostName: 'Tên máy chủ',
- port: 'Cổng',
- user: 'Người dùng',
- password: 'Mật khẩu',
- credentials: 'Thông tin xác thực',
- connect: 'Kết nối',
- connected: 'Đã kết nối',
- disconnect: 'Ngắt kết nối',
- disconnected: 'Đã ngắt kết nối',
- refresh: 'Làm mới',
- settings: 'Cài đặt',
- general: 'Chung',
- themes: 'Giao diện',
- update: 'Cập nhật',
- about: 'Giới thiệu',
- language: 'Ngôn ngữ',
- version: 'Phiên bản',
- donate: 'Ủng hộ',
- run: 'Chạy',
- schema: 'Schema',
- results: 'Kết quả',
- size: 'Kích thước',
- seconds: 'Giây',
- type: 'Kiểu',
- mimeType: 'Mime-Type',
- download: 'Tải xuống',
- add: 'Thêm',
- data: 'Dữ liệu',
- properties: 'Thuộc tính',
- insert: 'Nhập',
- connecting: 'Đang kết nối',
- name: 'Tên',
- collation: 'Đối chiếu',
- clear: 'Xoá',
- options: 'Tuỳ chọn',
- autoRefresh: 'Tự động làm mới',
- indexes: 'Index',
- foreignKeys: 'Khoá ngoại',
- length: 'Độ dài',
- unsigned: 'Unsigned',
- default: 'Mặc định',
- comment: 'Nhận xét',
- key: 'Khoá | Khoá',
- order: 'Sắp xếp',
- expression: 'Biểu hiện',
- autoIncrement: 'Tự động tăng',
- engine: 'Engine',
- field: 'Trường | Trường',
- approximately: 'Khoảng',
- total: 'Toàn bộ',
- table: 'Bảng',
- discard: 'Bỏ',
- stay: 'Ở lại',
- author: 'Tác giả',
- light: 'Sáng',
- dark: 'Tối',
- autoCompletion: 'Tự động hoàn thành',
- application: 'Ứng dụng',
- editor: 'Người chỉnh sửa',
- view: 'Xem',
- definer: 'Định nghĩa',
- algorithm: 'Thuật toán',
- trigger: 'Kích hoạt | Kích hoạt',
- storedRoutine: 'Quy trình đã lưu | Quy trình đã lưu',
- scheduler: 'Lập lịch trình | Lập lịch trình',
- event: 'Sự kiện',
- parameters: 'Tham số',
- function: 'Chức năng | Chức năng',
- deterministic: 'Xác định',
- context: 'Context',
- export: 'Xuất',
- returns: 'Returns',
- timing: 'Thời gian',
- state: 'Trạng thái',
- execution: 'Thực thi',
- starts: 'Bắt đầu',
- ends: 'Kết thúc',
- ssl: 'SSL',
- privateKey: 'Mã khoá riêng tư',
- certificate: 'Chứng chỉ',
- caCertificate: 'Chứng chỉ CA',
- ciphers: 'Ciphers',
- upload: 'Tải lên',
- browse: 'Duyệt',
- faker: 'Faker',
- content: 'Nội dung',
- cut: 'Cắt',
- copy: 'Sao chép',
- paste: 'Dán',
- tools: 'Công cụ',
- variables: 'Biến',
- processes: 'Quá trình',
- database: 'Cơ sở dữ liệu',
- scratchpad: 'Scratchpad',
- array: 'Mảng',
- changelog: 'Nhật ký thay đổi',
- format: 'Định dạng',
- sshTunnel: 'SSH tunnel',
- structure: 'Structure',
- small: 'Nhỏ',
- medium: 'Vừa',
- large: 'Lớn',
- row: 'Hàng | Hàng',
- cell: 'Ô | Ô',
- triggerFunction: 'Trigger function | Trigger functions',
- all: 'Tất cả',
- duplicate: 'Bản sao',
- routine: 'Routine',
- new: 'Mới',
- history: 'Lịch sử',
- select: 'Chọn',
- passphrase: 'Cụm mật khẩu'
- },
- message: {
- appWelcome: 'Chào bạn đến với Antares SQL Client!',
- appFirstStep: 'Bước đầu tiên: tạo một kết nối tới cơ sở dữ liệu.',
- addConnection: 'Thêm kết nối',
- createConnection: 'Tạo kết nối',
- createNewConnection: 'Tạo kết nối mới',
- askCredentials: 'Yêu cầu thông tin đăng nhập',
- testConnection: 'Chạy thử kết nối',
- editConnection: 'Sửa kết nối',
- deleteConnection: 'Xoá kết nối',
- deleteCorfirm: 'Bạn có xác nhận việc hủy bỏ',
- connectionSuccessfullyMade: 'Kết nối được thực hiện thành công!',
- madeWithJS: 'Được tạo bằng 💛 và JavaScript!',
- checkForUpdates: 'Kiểm tra cập nhật',
- noUpdatesAvailable: 'Không có bản cập nhật nào',
- checkingForUpdate: 'Đang kiểm tra cập nhật',
- checkFailure: 'Kiểm tra thất bại, vui lòng thử lại sau',
- updateAvailable: 'Cập nhật có sẵn',
- downloadingUpdate: 'Đang tải bản cập nhật',
- updateDownloaded: 'Đã tải bản cập nhạt',
- restartToInstall: 'Khởi động lại Antares để cài đặt',
- unableEditFieldWithoutPrimary: 'Không thể chỉnh sửa trường mà không có khóa chính trong kết quả',
- editCell: 'Sửa ô',
- deleteRows: 'Xoá hàng | Xoá {count} hàng',
- confirmToDeleteRows: 'Bạn có xác nhận xóa một hàng không? | Bạn có xác nhận xóa {count} hàng không?',
- notificationsTimeout: 'Thông báo hết giờ',
- uploadFile: 'Tải lên tệp',
- addNewRow: 'Thêm hàng mới',
- numberOfInserts: 'Số lần nhập',
- openNewTab: 'Mở trong tab mới',
- affectedRows: 'Các hàng bị ảnh hưởng',
- createNewDatabase: 'Tạo Cơ sở dữ liệu mới',
- databaseName: 'Tên cơ sở dữ liệu',
- serverDefault: 'Máy chủ mặc định',
- deleteDatabase: 'Xoá cơ sở dữ liệu',
- editDatabase: 'Sửa cơ sở dữ liệu',
- clearChanges: 'Xóa các thay đổi',
- addNewField: 'Thêm trường mới',
- manageIndexes: 'Quản lý index',
- manageForeignKeys: 'Quản lý khoá ngoại',
- allowNull: 'Cho phép NULL',
- zeroFill: 'Không điền',
- customValue: 'Tuỳ chỉnh giá trị',
- onUpdate: 'Đang cập nhật',
- deleteField: 'Xoá trường',
- createNewIndex: 'Tạo index mới',
- addToIndex: 'Thêm vào index',
- createNewTable: 'Tạo bảng mới',
- emptyTable: 'Bảng trống',
- deleteTable: 'Xoá bảng',
- emptyCorfirm: 'Bạn có xác nhận để làm trống không',
- unsavedChanges: 'Chưa lưu lại thay đổi',
- discardUnsavedChanges: 'Bạn có một số thay đổi chưa được lưu. Đóng tab này, những thay đổi này sẽ bị huỷ bỏ.',
- thereAreNoIndexes: 'Không có index',
- thereAreNoForeign: 'Không có khoá ngoại',
- createNewForeign: 'Tạo khoá ngoại mới',
- referenceTable: 'Tham khảo bảng',
- referenceField: 'Tham khảo trường',
- foreignFields: 'Trường ngoại',
- invalidDefault: 'Mặc định không hợp lệ',
- onDelete: 'Đang xoá',
- applicationTheme: 'Chủ đề ứng dụng',
- editorTheme: 'Trình chỉnh sửa chủ đề',
- wrapLongLines: 'Wrap long lines',
- selectStatement: 'Chọn câu lệnh',
- triggerStatement: 'Kích hoạt câu lệnh',
- sqlSecurity: 'Bảo mật SQL',
- updateOption: 'Cập nhật tuỳ chọn',
- deleteView: 'Xóa chế độ xem',
- createNewView: 'Tạo chế độ xem mới',
- deleteTrigger: 'Xóa trình kích hoạt',
- createNewTrigger: 'Tạo trình kích hoạt mới',
- currentUser: 'Người dùng hiện tại',
- routineBody: 'Body quy trình',
- dataAccess: 'Truy cập dữ liệu',
- thereAreNoParameters: 'Không có tham số',
- createNewParameter: 'Tạo tham số mới',
- createNewRoutine: 'Tạo quy trình lưu trữ mới',
- deleteRoutine: 'Xoá quy trình lưu trữ',
- functionBody: 'Body chức năng',
- createNewFunction: 'Tạo chức năng mới',
- deleteFunction: 'Xoá chức năng',
- schedulerBody: 'Body trình lập lịch',
- createNewScheduler: 'Tạo lịch trình mới',
- deleteScheduler: 'Xóa trình lên lịch',
- preserveOnCompletion: 'Bảo tồn khi hoàn thành',
- enableSsl: 'Bật SSL',
- manualValue: 'Giá trị thủ công',
- tableFiller: 'Bộ lọc bảng',
- fakeDataLanguage: 'Ngôn ngữ dữ liệu giả mạo',
- searchForElements: 'Tìm kiếm yếu tố',
- selectAll: 'Chọn tất cả',
- queryDuration: 'Thời lượng truy vấn',
- includeBetaUpdates: 'Bao gồm các bản cập nhật beta',
- setNull: 'Đặt NULL',
- processesList: 'Danh sách quy trình',
- processInfo: 'Thông tin quá trình',
- manageUsers: 'Quản lý người dùng',
- createNewSchema: 'Tạo schema mới',
- schemaName: 'Tên schema',
- editSchema: 'Sửa schema',
- deleteSchema: 'Xoá schema',
- markdownSupported: 'Hỗ trợ Markdown',
- plantATree: 'Trồng cây',
- dataTabPageSize: 'Kích thước trang tab DATA',
- enableSsh: 'Bật SSH',
- pageNumber: 'Số trang',
- duplicateTable: 'Sao chép bản',
- noOpenTabs: 'Không có tab nào đang mở, điều hướng trên thanh bên trái hoặc:',
- noSchema: 'Không có schema',
- restorePreviourSession: 'Khôi phục phiên trước',
- runQuery: 'Chạy truy vấn',
- thereAreNoTableFields: 'Không có trường bảng',
- newTable: 'Bảng mới',
- newView: 'Chế độ xem mới',
- newTrigger: 'Trình kích hoạt mới',
- newRoutine: 'Quy trình mới',
- newFunction: 'Chức năng mới',
- newScheduler: 'Bộ lập lịch mới',
- newTriggerFunction: 'Chức năng kích hoạt mới',
- thereIsNoQueriesYet: 'Không có truy vấn nào',
- searchForQueries: 'Tìm kiếm truy vấn',
- killProcess: 'Huỷ quá trình'
- },
- faker: {
- address: 'Địa chỉ',
- commerce: 'Thương mại',
- company: 'Công ty',
- database: 'Cơ sở dữ liệu',
- date: 'Ngày',
- finance: 'Tài chánh',
- git: 'Git',
- hacker: 'Tin tặc',
- internet: 'Mạng Internet',
- lorem: 'Lorem',
- name: 'Tên',
- music: 'Âm nhạc',
- phone: 'Số điện thoại',
- random: 'Ngẫu nhiên',
- system: 'Hệ thống',
- time: 'Thời gian',
- vehicle: 'Phương tiện giao thông',
- zipCode: 'Mã Bưu Chính',
- zipCodeByState: 'Mã Bưu Chính theo tiểu bang',
- city: 'Thành phố',
- cityPrefix: 'Tiền tố thành phố',
- citySuffix: 'Hậu tố thành phố',
- streetName: 'Tên đường',
- streetAddress: 'Địa chỉ đường',
- streetSuffix: 'Hậu tố đường',
- streetPrefix: 'Tiền tố đường',
- secondaryAddress: 'Địa chỉ phụ',
- county: 'Quận',
- country: 'Quốc gia',
- countryCode: 'Mã quốc gia',
- state: 'Tiểu bang',
- stateAbbr: 'Viết tắt của tiểu bang',
- latitude: 'Vĩ độ',
- longitude: 'Kinh độ',
- direction: 'Hướng',
- cardinalDirection: 'Hướng cốt yếu',
- ordinalDirection: 'Hướng thứ tự',
- nearbyGPSCoordinate: 'Tọa độ GPS lân cận',
- timeZone: 'Múi giờ',
- color: 'Màu',
- department: 'Phòng',
- productName: 'Tên sản phẩm',
- price: 'Giá',
- productAdjective: 'Tính từ sản phẩm',
- productMaterial: 'Chất liệu sản phẩm',
- product: 'Sản phẩm',
- productDescription: 'Mô tả sản phẩm',
- suffixes: 'Hậu tố',
- companyName: 'Tên công ty',
- companySuffix: 'Hậu tố công ty',
- catchPhrase: 'Khẩu hiệu',
- bs: 'BS',
- catchPhraseAdjective: 'Bắt cụm từ tính từ',
- catchPhraseDescriptor: 'Bắt bộ mô tả cụm từ',
- catchPhraseNoun: 'Bắt cụm từ danh từ',
- bsAdjective: 'BS tính từ',
- bsBuzz: 'BS buzz',
- bsNoun: 'BS danh từ',
- column: 'Cột',
- type: 'Loại',
- collation: 'Đối chiếu',
- engine: 'Engine',
- past: 'Quá khứ',
- future: 'Tương lai',
- between: 'Giữa',
- recent: 'Gần đây',
- soon: 'Sớm',
- month: 'Tháng',
- weekday: 'Ngày trong tuần',
- account: 'Tài khoản',
- accountName: 'Tên tài khoản',
- routingNumber: 'Số định tuyến',
- mask: 'Mặt nạ',
- amount: 'Số tiền',
- transactionType: 'Loại giao dịch',
- currencyCode: 'Mã tiền tệ',
- currencyName: 'Tên tiền tệ',
- currencySymbol: 'Ký hiệu tiền tệ',
- bitcoinAddress: 'Địa chỉ Bitcoin',
- litecoinAddress: 'Địa chỉ Litecoin',
- creditCardNumber: 'Số thẻ tín dụng',
- creditCardCVV: 'CVV thẻ tín dụng',
- ethereumAddress: 'Địa chỉ Ethereum',
- iban: 'Iban',
- bic: 'Bic',
- transactionDescription: 'Mô tả giao dịch',
- branch: 'Nhánh',
- commitEntry: 'Nhập cam kết',
- commitMessage: 'Thông báo cam kết',
- commitSha: 'Cam kết SHA',
- shortSha: 'SHA ngắn',
- abbreviation: 'Viết tắt',
- adjective: 'Tính từ',
- noun: 'Danh từ',
- verb: 'Động từ',
- ingverb: 'Động từ ing',
- phrase: 'Cụm từ',
- avatar: 'Ảnh đại diện',
- email: 'Email',
- exampleEmail: 'Email ví dụ',
- userName: 'Tên người dùng',
- protocol: 'Giao thức',
- url: 'Url',
- domainName: 'Tên miền',
- domainSuffix: 'Hậu tố miền',
- domainWord: 'Từ miền',
- ip: 'Ip',
- ipv6: 'Ipv6',
- userAgent: 'User agent',
- mac: 'Mac',
- password: 'Mật khẩu',
- word: 'Từ',
- words: 'Từ',
- sentence: 'Câu',
- slug: 'Slug',
- sentences: 'Câu',
- paragraph: 'Đoạn văn',
- paragraphs: 'Đoạn văn',
- text: 'Văn bản',
- lines: 'Dòng',
- genre: 'Thể loại',
- firstName: 'Tên',
- lastName: 'Họ',
- middleName: 'Tên đệm',
- findName: 'Tên đầy đủ',
- jobTitle: 'Chức vụ',
- gender: 'Giới tính',
- prefix: 'Tiền tố',
- suffix: 'Hậu tố',
- title: 'Tiêu đề',
- jobDescriptor: 'Mô tả công việc',
- jobArea: 'Lĩnh vực việc làm',
- jobType: 'Loại công việc',
- phoneNumber: 'Số điện thoại',
- phoneNumberFormat: 'Định dạng số điện thoại',
- phoneFormats: 'Định dạng điện thoại',
- number: 'Số',
- float: 'Float',
- arrayElement: 'Phân tử array',
- arrayElements: 'Phân tử array',
- objectElement: 'Phần tử object',
- uuid: 'Uuid',
- boolean: 'Boolean',
- image: 'Hình ảnh',
- locale: 'Ngôn ngữ',
- alpha: 'Alpha',
- alphaNumeric: 'Chữ và số',
- hexaDecimal: 'Hệ thập lục phân',
- fileName: 'File name',
- commonFileName: 'Tên tệp chung',
- mimeType: 'Kiểu mine',
- commonFileType: 'Loại tệp chung',
- commonFileExt: 'Phần mở rộng tệp chung',
- fileType: 'Loại tệp',
- fileExt: 'Phần mở rộng tệp',
- directoryPath: 'Đường dẫn thư mục',
- filePath: 'Đường dẫn tệp',
- semver: 'Semver',
- manufacturer: 'Manufacturer',
- model: 'Model',
- fuel: 'Fuel',
- vin: 'Vin'
- }
-};
\ No newline at end of file
+ word: {
+ edit: 'Chỉnh sửa',
+ save: 'Lưu',
+ close: 'Đóng',
+ delete: 'Xoá',
+ confirm: 'Xác nhận',
+ cancel: 'Huỷ',
+ send: 'Gửi',
+ connectionName: 'Tên kết nối',
+ client: 'Client',
+ hostName: 'Tên máy chủ',
+ port: 'Cổng',
+ user: 'Người dùng',
+ password: 'Mật khẩu',
+ credentials: 'Thông tin xác thực',
+ connect: 'Kết nối',
+ connected: 'Đã kết nối',
+ disconnect: 'Ngắt kết nối',
+ disconnected: 'Đã ngắt kết nối',
+ refresh: 'Làm mới',
+ settings: 'Cài đặt',
+ general: 'Chung',
+ themes: 'Giao diện',
+ update: 'Cập nhật',
+ about: 'Giới thiệu',
+ language: 'Ngôn ngữ',
+ version: 'Phiên bản',
+ donate: 'Ủng hộ',
+ run: 'Chạy',
+ schema: 'Schema',
+ results: 'Kết quả',
+ size: 'Kích thước',
+ seconds: 'Giây',
+ type: 'Kiểu',
+ mimeType: 'Mime-Type',
+ download: 'Tải xuống',
+ add: 'Thêm',
+ data: 'Dữ liệu',
+ properties: 'Thuộc tính',
+ insert: 'Nhập',
+ connecting: 'Đang kết nối',
+ name: 'Tên',
+ collation: 'Đối chiếu',
+ clear: 'Xoá',
+ options: 'Tuỳ chọn',
+ autoRefresh: 'Tự động làm mới',
+ indexes: 'Index',
+ foreignKeys: 'Khoá ngoại',
+ length: 'Độ dài',
+ unsigned: 'Unsigned',
+ default: 'Mặc định',
+ comment: 'Nhận xét',
+ key: 'Khoá | Khoá',
+ order: 'Sắp xếp',
+ expression: 'Biểu hiện',
+ autoIncrement: 'Tự động tăng',
+ engine: 'Engine',
+ field: 'Trường | Trường',
+ approximately: 'Khoảng',
+ total: 'Toàn bộ',
+ table: 'Bảng',
+ discard: 'Bỏ',
+ stay: 'Ở lại',
+ author: 'Tác giả',
+ light: 'Sáng',
+ dark: 'Tối',
+ autoCompletion: 'Tự động hoàn thành',
+ application: 'Ứng dụng',
+ editor: 'Người chỉnh sửa',
+ view: 'Xem',
+ definer: 'Định nghĩa',
+ algorithm: 'Thuật toán',
+ trigger: 'Kích hoạt | Kích hoạt',
+ storedRoutine: 'Quy trình đã lưu | Quy trình đã lưu',
+ scheduler: 'Lập lịch trình | Lập lịch trình',
+ event: 'Sự kiện',
+ parameters: 'Tham số',
+ function: 'Chức năng | Chức năng',
+ deterministic: 'Xác định',
+ context: 'Context',
+ export: 'Xuất',
+ returns: 'Returns',
+ timing: 'Thời gian',
+ state: 'Trạng thái',
+ execution: 'Thực thi',
+ starts: 'Bắt đầu',
+ ends: 'Kết thúc',
+ ssl: 'SSL',
+ privateKey: 'Mã khoá riêng tư',
+ certificate: 'Chứng chỉ',
+ caCertificate: 'Chứng chỉ CA',
+ ciphers: 'Ciphers',
+ upload: 'Tải lên',
+ browse: 'Duyệt',
+ faker: 'Faker',
+ content: 'Nội dung',
+ cut: 'Cắt',
+ copy: 'Sao chép',
+ paste: 'Dán',
+ tools: 'Công cụ',
+ variables: 'Biến',
+ processes: 'Quá trình',
+ database: 'Cơ sở dữ liệu',
+ scratchpad: 'Scratchpad',
+ array: 'Mảng',
+ changelog: 'Nhật ký thay đổi',
+ format: 'Định dạng',
+ sshTunnel: 'SSH tunnel',
+ structure: 'Structure',
+ small: 'Nhỏ',
+ medium: 'Vừa',
+ large: 'Lớn',
+ row: 'Hàng | Hàng',
+ cell: 'Ô | Ô',
+ triggerFunction: 'Trigger function | Trigger functions',
+ all: 'Tất cả',
+ duplicate: 'Bản sao',
+ routine: 'Routine',
+ new: 'Mới',
+ history: 'Lịch sử',
+ select: 'Chọn',
+ passphrase: 'Cụm mật khẩu'
+ },
+ message: {
+ appWelcome: 'Chào bạn đến với Antares SQL Client!',
+ appFirstStep: 'Bước đầu tiên: tạo một kết nối tới cơ sở dữ liệu.',
+ addConnection: 'Thêm kết nối',
+ createConnection: 'Tạo kết nối',
+ createNewConnection: 'Tạo kết nối mới',
+ askCredentials: 'Yêu cầu thông tin đăng nhập',
+ testConnection: 'Chạy thử kết nối',
+ editConnection: 'Sửa kết nối',
+ deleteConnection: 'Xoá kết nối',
+ deleteCorfirm: 'Bạn có xác nhận việc hủy bỏ',
+ connectionSuccessfullyMade: 'Kết nối được thực hiện thành công!',
+ madeWithJS: 'Được tạo bằng 💛 và JavaScript!',
+ checkForUpdates: 'Kiểm tra cập nhật',
+ noUpdatesAvailable: 'Không có bản cập nhật nào',
+ checkingForUpdate: 'Đang kiểm tra cập nhật',
+ checkFailure: 'Kiểm tra thất bại, vui lòng thử lại sau',
+ updateAvailable: 'Cập nhật có sẵn',
+ downloadingUpdate: 'Đang tải bản cập nhật',
+ updateDownloaded: 'Đã tải bản cập nhạt',
+ restartToInstall: 'Khởi động lại Antares để cài đặt',
+ unableEditFieldWithoutPrimary: 'Không thể chỉnh sửa trường mà không có khóa chính trong kết quả',
+ editCell: 'Sửa ô',
+ deleteRows: 'Xoá hàng | Xoá {count} hàng',
+ confirmToDeleteRows: 'Bạn có xác nhận xóa một hàng không? | Bạn có xác nhận xóa {count} hàng không?',
+ notificationsTimeout: 'Thông báo hết giờ',
+ uploadFile: 'Tải lên tệp',
+ addNewRow: 'Thêm hàng mới',
+ numberOfInserts: 'Số lần nhập',
+ openNewTab: 'Mở trong tab mới',
+ affectedRows: 'Các hàng bị ảnh hưởng',
+ createNewDatabase: 'Tạo Cơ sở dữ liệu mới',
+ databaseName: 'Tên cơ sở dữ liệu',
+ serverDefault: 'Máy chủ mặc định',
+ deleteDatabase: 'Xoá cơ sở dữ liệu',
+ editDatabase: 'Sửa cơ sở dữ liệu',
+ clearChanges: 'Xóa các thay đổi',
+ addNewField: 'Thêm trường mới',
+ manageIndexes: 'Quản lý index',
+ manageForeignKeys: 'Quản lý khoá ngoại',
+ allowNull: 'Cho phép NULL',
+ zeroFill: 'Không điền',
+ customValue: 'Tuỳ chỉnh giá trị',
+ onUpdate: 'Đang cập nhật',
+ deleteField: 'Xoá trường',
+ createNewIndex: 'Tạo index mới',
+ addToIndex: 'Thêm vào index',
+ createNewTable: 'Tạo bảng mới',
+ emptyTable: 'Bảng trống',
+ deleteTable: 'Xoá bảng',
+ emptyCorfirm: 'Bạn có xác nhận để làm trống không',
+ unsavedChanges: 'Chưa lưu lại thay đổi',
+ discardUnsavedChanges: 'Bạn có một số thay đổi chưa được lưu. Đóng tab này, những thay đổi này sẽ bị huỷ bỏ.',
+ thereAreNoIndexes: 'Không có index',
+ thereAreNoForeign: 'Không có khoá ngoại',
+ createNewForeign: 'Tạo khoá ngoại mới',
+ referenceTable: 'Tham khảo bảng',
+ referenceField: 'Tham khảo trường',
+ foreignFields: 'Trường ngoại',
+ invalidDefault: 'Mặc định không hợp lệ',
+ onDelete: 'Đang xoá',
+ applicationTheme: 'Chủ đề ứng dụng',
+ editorTheme: 'Trình chỉnh sửa chủ đề',
+ wrapLongLines: 'Wrap long lines',
+ selectStatement: 'Chọn câu lệnh',
+ triggerStatement: 'Kích hoạt câu lệnh',
+ sqlSecurity: 'Bảo mật SQL',
+ updateOption: 'Cập nhật tuỳ chọn',
+ deleteView: 'Xóa chế độ xem',
+ createNewView: 'Tạo chế độ xem mới',
+ deleteTrigger: 'Xóa trình kích hoạt',
+ createNewTrigger: 'Tạo trình kích hoạt mới',
+ currentUser: 'Người dùng hiện tại',
+ routineBody: 'Body quy trình',
+ dataAccess: 'Truy cập dữ liệu',
+ thereAreNoParameters: 'Không có tham số',
+ createNewParameter: 'Tạo tham số mới',
+ createNewRoutine: 'Tạo quy trình lưu trữ mới',
+ deleteRoutine: 'Xoá quy trình lưu trữ',
+ functionBody: 'Body chức năng',
+ createNewFunction: 'Tạo chức năng mới',
+ deleteFunction: 'Xoá chức năng',
+ schedulerBody: 'Body trình lập lịch',
+ createNewScheduler: 'Tạo lịch trình mới',
+ deleteScheduler: 'Xóa trình lên lịch',
+ preserveOnCompletion: 'Bảo tồn khi hoàn thành',
+ enableSsl: 'Bật SSL',
+ manualValue: 'Giá trị thủ công',
+ tableFiller: 'Bộ lọc bảng',
+ fakeDataLanguage: 'Ngôn ngữ dữ liệu giả mạo',
+ searchForElements: 'Tìm kiếm yếu tố',
+ selectAll: 'Chọn tất cả',
+ queryDuration: 'Thời lượng truy vấn',
+ includeBetaUpdates: 'Bao gồm các bản cập nhật beta',
+ setNull: 'Đặt NULL',
+ processesList: 'Danh sách quy trình',
+ processInfo: 'Thông tin quá trình',
+ manageUsers: 'Quản lý người dùng',
+ createNewSchema: 'Tạo schema mới',
+ schemaName: 'Tên schema',
+ editSchema: 'Sửa schema',
+ deleteSchema: 'Xoá schema',
+ markdownSupported: 'Hỗ trợ Markdown',
+ plantATree: 'Trồng cây',
+ dataTabPageSize: 'Kích thước trang tab DATA',
+ enableSsh: 'Bật SSH',
+ pageNumber: 'Số trang',
+ duplicateTable: 'Sao chép bản',
+ noOpenTabs: 'Không có tab nào đang mở, điều hướng trên thanh bên trái hoặc:',
+ noSchema: 'Không có schema',
+ restorePreviourSession: 'Khôi phục phiên trước',
+ runQuery: 'Chạy truy vấn',
+ thereAreNoTableFields: 'Không có trường bảng',
+ newTable: 'Bảng mới',
+ newView: 'Chế độ xem mới',
+ newTrigger: 'Trình kích hoạt mới',
+ newRoutine: 'Quy trình mới',
+ newFunction: 'Chức năng mới',
+ newScheduler: 'Bộ lập lịch mới',
+ newTriggerFunction: 'Chức năng kích hoạt mới',
+ thereIsNoQueriesYet: 'Không có truy vấn nào',
+ searchForQueries: 'Tìm kiếm truy vấn',
+ killProcess: 'Huỷ quá trình'
+ },
+ faker: {
+ address: 'Địa chỉ',
+ commerce: 'Thương mại',
+ company: 'Công ty',
+ database: 'Cơ sở dữ liệu',
+ date: 'Ngày',
+ finance: 'Tài chánh',
+ git: 'Git',
+ hacker: 'Tin tặc',
+ internet: 'Mạng Internet',
+ lorem: 'Lorem',
+ name: 'Tên',
+ music: 'Âm nhạc',
+ phone: 'Số điện thoại',
+ random: 'Ngẫu nhiên',
+ system: 'Hệ thống',
+ time: 'Thời gian',
+ vehicle: 'Phương tiện giao thông',
+ zipCode: 'Mã Bưu Chính',
+ zipCodeByState: 'Mã Bưu Chính theo tiểu bang',
+ city: 'Thành phố',
+ cityPrefix: 'Tiền tố thành phố',
+ citySuffix: 'Hậu tố thành phố',
+ streetName: 'Tên đường',
+ streetAddress: 'Địa chỉ đường',
+ streetSuffix: 'Hậu tố đường',
+ streetPrefix: 'Tiền tố đường',
+ secondaryAddress: 'Địa chỉ phụ',
+ county: 'Quận',
+ country: 'Quốc gia',
+ countryCode: 'Mã quốc gia',
+ state: 'Tiểu bang',
+ stateAbbr: 'Viết tắt của tiểu bang',
+ latitude: 'Vĩ độ',
+ longitude: 'Kinh độ',
+ direction: 'Hướng',
+ cardinalDirection: 'Hướng cốt yếu',
+ ordinalDirection: 'Hướng thứ tự',
+ nearbyGPSCoordinate: 'Tọa độ GPS lân cận',
+ timeZone: 'Múi giờ',
+ color: 'Màu',
+ department: 'Phòng',
+ productName: 'Tên sản phẩm',
+ price: 'Giá',
+ productAdjective: 'Tính từ sản phẩm',
+ productMaterial: 'Chất liệu sản phẩm',
+ product: 'Sản phẩm',
+ productDescription: 'Mô tả sản phẩm',
+ suffixes: 'Hậu tố',
+ companyName: 'Tên công ty',
+ companySuffix: 'Hậu tố công ty',
+ catchPhrase: 'Khẩu hiệu',
+ bs: 'BS',
+ catchPhraseAdjective: 'Bắt cụm từ tính từ',
+ catchPhraseDescriptor: 'Bắt bộ mô tả cụm từ',
+ catchPhraseNoun: 'Bắt cụm từ danh từ',
+ bsAdjective: 'BS tính từ',
+ bsBuzz: 'BS buzz',
+ bsNoun: 'BS danh từ',
+ column: 'Cột',
+ type: 'Loại',
+ collation: 'Đối chiếu',
+ engine: 'Engine',
+ past: 'Quá khứ',
+ future: 'Tương lai',
+ between: 'Giữa',
+ recent: 'Gần đây',
+ soon: 'Sớm',
+ month: 'Tháng',
+ weekday: 'Ngày trong tuần',
+ account: 'Tài khoản',
+ accountName: 'Tên tài khoản',
+ routingNumber: 'Số định tuyến',
+ mask: 'Mặt nạ',
+ amount: 'Số tiền',
+ transactionType: 'Loại giao dịch',
+ currencyCode: 'Mã tiền tệ',
+ currencyName: 'Tên tiền tệ',
+ currencySymbol: 'Ký hiệu tiền tệ',
+ bitcoinAddress: 'Địa chỉ Bitcoin',
+ litecoinAddress: 'Địa chỉ Litecoin',
+ creditCardNumber: 'Số thẻ tín dụng',
+ creditCardCVV: 'CVV thẻ tín dụng',
+ ethereumAddress: 'Địa chỉ Ethereum',
+ iban: 'Iban',
+ bic: 'Bic',
+ transactionDescription: 'Mô tả giao dịch',
+ branch: 'Nhánh',
+ commitEntry: 'Nhập cam kết',
+ commitMessage: 'Thông báo cam kết',
+ commitSha: 'Cam kết SHA',
+ shortSha: 'SHA ngắn',
+ abbreviation: 'Viết tắt',
+ adjective: 'Tính từ',
+ noun: 'Danh từ',
+ verb: 'Động từ',
+ ingverb: 'Động từ ing',
+ phrase: 'Cụm từ',
+ avatar: 'Ảnh đại diện',
+ email: 'Email',
+ exampleEmail: 'Email ví dụ',
+ userName: 'Tên người dùng',
+ protocol: 'Giao thức',
+ url: 'Url',
+ domainName: 'Tên miền',
+ domainSuffix: 'Hậu tố miền',
+ domainWord: 'Từ miền',
+ ip: 'Ip',
+ ipv6: 'Ipv6',
+ userAgent: 'User agent',
+ mac: 'Mac',
+ password: 'Mật khẩu',
+ word: 'Từ',
+ words: 'Từ',
+ sentence: 'Câu',
+ slug: 'Slug',
+ sentences: 'Câu',
+ paragraph: 'Đoạn văn',
+ paragraphs: 'Đoạn văn',
+ text: 'Văn bản',
+ lines: 'Dòng',
+ genre: 'Thể loại',
+ firstName: 'Tên',
+ lastName: 'Họ',
+ middleName: 'Tên đệm',
+ findName: 'Tên đầy đủ',
+ jobTitle: 'Chức vụ',
+ gender: 'Giới tính',
+ prefix: 'Tiền tố',
+ suffix: 'Hậu tố',
+ title: 'Tiêu đề',
+ jobDescriptor: 'Mô tả công việc',
+ jobArea: 'Lĩnh vực việc làm',
+ jobType: 'Loại công việc',
+ phoneNumber: 'Số điện thoại',
+ phoneNumberFormat: 'Định dạng số điện thoại',
+ phoneFormats: 'Định dạng điện thoại',
+ number: 'Số',
+ float: 'Float',
+ arrayElement: 'Phân tử array',
+ arrayElements: 'Phân tử array',
+ objectElement: 'Phần tử object',
+ uuid: 'Uuid',
+ boolean: 'Boolean',
+ image: 'Hình ảnh',
+ locale: 'Ngôn ngữ',
+ alpha: 'Alpha',
+ alphaNumeric: 'Chữ và số',
+ hexaDecimal: 'Hệ thập lục phân',
+ fileName: 'File name',
+ commonFileName: 'Tên tệp chung',
+ mimeType: 'Kiểu mine',
+ commonFileType: 'Loại tệp chung',
+ commonFileExt: 'Phần mở rộng tệp chung',
+ fileType: 'Loại tệp',
+ fileExt: 'Phần mở rộng tệp',
+ directoryPath: 'Đường dẫn thư mục',
+ filePath: 'Đường dẫn tệp',
+ semver: 'Semver',
+ manufacturer: 'Manufacturer',
+ model: 'Model',
+ fuel: 'Fuel',
+ vin: 'Vin'
+ }
+};
diff --git a/src/renderer/index.ejs b/src/renderer/index.ejs
new file mode 100644
index 00000000..9fd1dc62
--- /dev/null
+++ b/src/renderer/index.ejs
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+ <% if (htmlWebpackPlugin.options.nodeModules) { %>
+
+ <% } %>
+
+
+
+
+
+
diff --git a/src/renderer/main.js b/src/renderer/index.js
similarity index 100%
rename from src/renderer/main.js
rename to src/renderer/index.js
diff --git a/src/renderer/store/index.js b/src/renderer/store/index.js
index 510f5dba..7c49ff85 100644
--- a/src/renderer/store/index.js
+++ b/src/renderer/store/index.js
@@ -13,6 +13,7 @@ import notifications from './modules/notifications.store';
import ipcUpdates from './plugins/ipcUpdates';
import ipcExceptions from './plugins/ipcExceptions';
+import ipcShortcuts from './plugins/ipcShortcuts';
Vue.use(Vuex);
@@ -29,6 +30,7 @@ export default new Vuex.Store({
},
plugins: [
ipcUpdates,
- ipcExceptions
+ ipcExceptions,
+ ipcShortcuts
]
});
diff --git a/src/renderer/store/plugins/ipcShortcuts.js b/src/renderer/store/plugins/ipcShortcuts.js
new file mode 100644
index 00000000..c9410357
--- /dev/null
+++ b/src/renderer/store/plugins/ipcShortcuts.js
@@ -0,0 +1,12 @@
+import { ipcRenderer } from 'electron';
+
+export default store => {
+ ipcRenderer.on('toggle-preferences', (event, error) => {
+ store.dispatch('application/showSettingModal', 'general');
+ });
+
+ ipcRenderer.on('open-updates-preferences', (event, error) => {
+ store.dispatch('application/showSettingModal', 'update');
+ ipcRenderer.send('check-for-updates');
+ });
+};
diff --git a/webpack.config.js b/webpack.config.js
deleted file mode 100644
index 554a8502..00000000
--- a/webpack.config.js
+++ /dev/null
@@ -1,27 +0,0 @@
-const webpack = require('webpack');
-
-module.exports = {
- stats: 'errors-warnings',
- plugins: [
- new webpack.DefinePlugin({
- 'process.env': {
- PACKAGE_VERSION: JSON.stringify(require('./package.json').version)
- }
- })
- ],
- module: {
- rules: [
- {
- test: /\.scss$/,
- use: [
- {
- loader: 'sass-loader',
- options: {
- additionalData: '@import "@/scss/_variables.scss";'
- }
- }
- ]
- }
- ]
- }
-};
diff --git a/webpack.main.config.js b/webpack.main.config.js
new file mode 100644
index 00000000..620c1708
--- /dev/null
+++ b/webpack.main.config.js
@@ -0,0 +1,70 @@
+const path = require('path');
+const { CleanWebpackPlugin } = require('clean-webpack-plugin');
+const ProgressPlugin = require('progress-webpack-plugin');
+
+const { dependencies, devDependencies } = require('./package.json');
+
+const externals = Object.keys(dependencies).concat(Object.keys(devDependencies));
+const isDevMode = process.env.NODE_ENV === 'development';
+const whiteListedModules = [];
+
+module.exports = [
+ { // Main
+ name: 'main',
+ mode: process.env.NODE_ENV,
+ devtool: isDevMode ? 'eval-source-map' : false,
+ entry: {
+ main: path.join(__dirname, './src/main/main.js')
+ },
+ target: 'electron-main',
+ output: {
+ libraryTarget: 'commonjs2',
+ path: path.join(__dirname, 'dist'),
+ filename: '[name].js'
+ },
+ node: {
+ global: true,
+ __dirname: isDevMode,
+ __filename: isDevMode
+ },
+ externals: externals.filter((d) => !whiteListedModules.includes(d)),
+ resolve: {
+ extensions: ['.js', '.json'],
+ alias: {
+ src: path.join(__dirname, 'src/'),
+ common: path.resolve(__dirname, 'src/common')
+ },
+ fallback: {
+ 'pg-native': false,
+ 'cpu-features': false,
+ cardinal: false
+ }
+ },
+ plugins: [
+ new ProgressPlugin(true),
+ new CleanWebpackPlugin({ root: path.join(__dirname, 'dist') })
+ ],
+ module: {
+ rules: [
+ {
+ test: /\.node$/,
+ loader: 'node-loader',
+ options: {
+ name: '[path][name].[ext]'
+ }
+ },
+ {
+ test: /\.js$/,
+ exclude: /node_modules/,
+ loader: 'babel-loader'
+ },
+ {
+ test: /\.(png|jpg|gif)$/,
+ use: [{
+ loader: 'file-loader'
+ }]
+ }
+ ]
+ }
+ }
+];
diff --git a/webpack.renderer.config.js b/webpack.renderer.config.js
new file mode 100644
index 00000000..27d6dc7e
--- /dev/null
+++ b/webpack.renderer.config.js
@@ -0,0 +1,147 @@
+const path = require('path');
+const webpack = require('webpack');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+const { VueLoaderPlugin } = require('vue-loader');
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
+const ProgressPlugin = require('progress-webpack-plugin');
+
+const { dependencies, devDependencies, version } = require('./package.json');
+
+const externals = Object.keys(dependencies).concat(Object.keys(devDependencies));
+const isDevMode = process.env.NODE_ENV === 'development';
+const whiteListedModules = ['vue'];
+
+const config = {
+ name: 'renderer',
+ mode: process.env.NODE_ENV,
+ devtool: isDevMode ? 'eval-source-map' : false,
+ entry: {
+ renderer: path.join(__dirname, './src/renderer/index.js')
+ },
+ target: 'electron-renderer',
+ output: {
+ libraryTarget: 'commonjs2',
+ path: path.resolve(__dirname, 'dist'),
+ filename: '[name].js',
+ publicPath: ''
+ },
+ node: {
+ global: true,
+ __dirname: isDevMode,
+ __filename: isDevMode
+ },
+ externals: externals.filter((d) => !whiteListedModules.includes(d)),
+ resolve: {
+ alias: {
+ vue$: 'vue/dist/vue.common.js',
+ common: path.resolve(__dirname, 'src/common'),
+ '@': path.resolve(__dirname, 'src/renderer')
+ },
+ extensions: ['', '.js', '.vue', '.json'],
+ fallback: {
+ fs: false,
+ path: false,
+ util: false,
+ crypto: false,
+ assert: false,
+ os: false
+ }
+ },
+ plugins: [
+ new ProgressPlugin(true),
+ new HtmlWebpackPlugin({
+ excludeChunks: ['processTaskWorker'],
+ filename: 'index.html',
+ template: path.resolve(__dirname, 'src/renderer/index.ejs'),
+ nodeModules: isDevMode
+ ? path.resolve(__dirname, '../node_modules')
+ : false
+ }),
+ new MiniCssExtractPlugin({
+ filename: '[name].css',
+ chunkFilename: '[id].css'
+ }),
+ new VueLoaderPlugin(),
+ new webpack.DefinePlugin({
+ 'process.env': {
+ PACKAGE_VERSION: `"${version}"`
+ }
+ })
+ ],
+ module: {
+ rules: [
+ {
+ test: /\.js$/,
+ use: 'babel-loader',
+ exclude: /node_modules/
+ },
+ {
+ test: /\.node$/,
+ use: 'node-loader'
+ },
+ {
+ test: /\.vue$/,
+ loader: 'vue-loader'
+ },
+ {
+ test: /\.s(c|a)ss$/,
+ use: [
+ { loader: MiniCssExtractPlugin.loader },
+ { loader: 'css-loader' },
+ {
+ loader: 'sass-loader',
+ options: {
+ additionalData: '@import "@/scss/_variables.scss";',
+ sassOptions: { quietDeps: true }
+ }
+ }
+ ]
+ },
+ {
+ test: /\.css$/,
+ use: [
+ {
+ loader: MiniCssExtractPlugin.loader,
+ options: {
+ publicPath: ''
+ }
+ },
+ {
+ loader: 'css-loader',
+ options: {
+ url: true
+ }
+ }
+ ]
+ },
+ {
+ test: /\.(png|jpe?g|gif|tif?f|bmp|webp|svg)(\?.*)?$/,
+ type: 'asset/resource',
+ generator: {
+ filename: 'images/[hash][ext][query]'
+ }
+ },
+ {
+ test: /\.(woff|woff2|ttf|eot)$/,
+ type: 'asset',
+ parser: {
+ dataUrlCondition: {
+ maxSize: 8 * 1024
+ }
+ },
+ generator: {
+ filename: 'fonts/[hash][ext][query]'
+ }
+ }
+ ]
+ }
+};
+
+if (isDevMode) {
+ // any dev only config
+ config.plugins.push(
+ new webpack.HotModuleReplacementPlugin()
+ );
+}
+
+module.exports = config;