diff --git a/.github/assets/DO.svg b/.github/assets/DO.svg new file mode 100644 index 00000000..f9752c2e --- /dev/null +++ b/.github/assets/DO.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.github/assets/MySigMail.svg b/.github/assets/MySigMail.svg new file mode 100644 index 00000000..e34a7c21 --- /dev/null +++ b/.github/assets/MySigMail.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/.github/assets/subscribe.gif b/.github/assets/subscribe.gif new file mode 100644 index 00000000..43a5e006 Binary files /dev/null and b/.github/assets/subscribe.gif differ diff --git a/CHANGELOG.md b/CHANGELOG.md index b510204a..aeebfd6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +## [3.4.1](https://github.com/massCodeIO/massCode/compare/v3.4.0...v3.4.1) (2022-08-29) + + +### Bug Fixes + +* **grammars:** update xml & xsl [#263](https://github.com/massCodeIO/massCode/issues/263) ([#268](https://github.com/massCodeIO/massCode/issues/268)) ([fa79043](https://github.com/massCodeIO/massCode/commit/fa7904344f1261bcba5f2b711fd290d33275afc8)) + + + # [3.4.0](https://github.com/massCodeIO/massCode/compare/v3.3.0...v3.4.0) (2022-08-22) diff --git a/README.md b/README.md index 601870e2..c6618421 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,19 @@ Alfred

+

+ SPONSORS +

+ +

+ + + +   + + + +

## Support @@ -89,6 +102,8 @@ The goal of creating this application was mostly my own growth as a developer. A - News and updates on [Twitter](https://twitter.com/anton_reshetov). - [Discussions](https://github.com/massCodeIO/massCode/discussions). +![](.github/assets/subscribe.gif) + ## Other You can also [download](https://github.com/antonreshetov/massCode) massCode v1. diff --git a/package.json b/package.json index 42daf251..45f45f3d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "masscode", "productName": "massCode", - "version": "3.4.1", + "version": "3.5.0", "description": "A free and open source code snippets manager for developers", "license": "AGPL-3.0", "main": "build/src/main/index.js", @@ -50,11 +50,11 @@ "codemirror": "^5.65.7", "codemirror-textmate": "^1.1.0", "date-fns": "^2.28.0", + "dom-to-image": "^2.6.0", "electron-store": "^8.0.1", "floating-vue": "^2.0.0-beta.17", "fs-extra": "^10.0.1", "highlight.js": "^11.5.1", - "html2canvas": "^1.4.1", "i18next": "^21.8.14", "i18next-fs-backend": "^1.1.4", "interactjs": "^1.10.11", @@ -83,6 +83,7 @@ "@commitlint/config-conventional": "^15.0.0", "@tsconfig/node14": "^1.0.1", "@types/codemirror": "^5.60.5", + "@types/dom-to-image": "^2.6.4", "@types/estree": "^0.0.51", "@types/i18next-fs-backend": "^1.1.2", "@types/lowdb": "^1.0.11", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3600af11..d9cda0be 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,7 @@ specifiers: '@sipec/vue3-tags-input': ^3.0.4 '@tsconfig/node14': ^1.0.1 '@types/codemirror': ^5.60.5 + '@types/dom-to-image': ^2.6.4 '@types/estree': ^0.0.51 '@types/i18next-fs-backend': ^1.1.2 '@types/lowdb': ^1.0.11 @@ -36,6 +37,7 @@ specifiers: codemirror-textmate: ^1.1.0 copyfiles: ^2.4.1 date-fns: ^2.28.0 + dom-to-image: ^2.6.0 dotenv: ^16.0.1 electron: ^16.2.3 electron-builder: ^23.1.0 @@ -52,7 +54,6 @@ specifiers: fs-extra: ^10.0.1 handlebars: ^4.7.7 highlight.js: ^11.5.1 - html2canvas: ^1.4.1 husky: ^7.0.0 i18next: ^21.8.14 i18next-fs-backend: ^1.1.4 @@ -100,11 +101,11 @@ dependencies: codemirror: 5.65.7 codemirror-textmate: 1.1.0_codemirror@5.65.7+onigasm@2.2.5 date-fns: 2.28.0 + dom-to-image: 2.6.0 electron-store: 8.0.1 floating-vue: 2.0.0-beta.17_vue@3.2.33 fs-extra: 10.0.1 highlight.js: 11.5.1 - html2canvas: 1.4.1 i18next: 21.8.14 i18next-fs-backend: 1.1.4 interactjs: 1.10.11 @@ -133,6 +134,7 @@ devDependencies: '@commitlint/config-conventional': 15.0.0 '@tsconfig/node14': 1.0.1 '@types/codemirror': 5.60.5 + '@types/dom-to-image': 2.6.4 '@types/estree': 0.0.51 '@types/i18next-fs-backend': 1.1.2 '@types/lowdb': 1.0.11 @@ -2111,6 +2113,10 @@ packages: '@types/ms': 0.7.31 dev: true + /@types/dom-to-image/2.6.4: + resolution: {integrity: sha512-UddUdGF1qulrSDulkz3K2Ypq527MR6ixlgAzqLbxSiQ0icx0XDlIV+h4+edmjq/1dqn0KgN0xGSe1kI9t+vGuw==} + dev: true + /@types/ejs/2.7.0: resolution: {integrity: sha512-kM2g9Fdk/du24fKuuQhA/LBleFR4Z4JP2MVKpLxQQSzofF1uJ06D+c05zfLDAkkDO55aEeNwJih0gHrE/Ci20A==} dev: true @@ -3682,11 +3688,6 @@ packages: pascalcase: 0.1.1 dev: true - /base64-arraybuffer/1.0.2: - resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==} - engines: {node: '>= 0.6.0'} - dev: false - /base64-js/1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true @@ -4724,12 +4725,6 @@ packages: timsort: 0.3.0 dev: false - /css-line-break/2.1.0: - resolution: {integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==} - dependencies: - utrie: 1.0.2 - dev: false - /css-select-base-adapter/0.1.1: resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} dev: false @@ -5722,6 +5717,10 @@ packages: domhandler: 4.3.0 entities: 2.2.0 + /dom-to-image/2.6.0: + resolution: {integrity: sha512-Dt0QdaHmLpjURjU7Tnu3AgYSF2LuOmksSGsUcE6ItvJoCWTBEmiMXcqBdNSAm9+QbbwD7JMoVsuuKX6ZVQv1qA==} + dev: false + /domelementtype/1.3.1: resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} dev: false @@ -7869,14 +7868,6 @@ packages: resolution: {integrity: sha1-wc56MWjIxmFAM6S194d/OyJfnDg=} dev: false - /html2canvas/1.4.1: - resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==} - engines: {node: '>=8.0.0'} - dependencies: - css-line-break: 2.1.0 - text-segmentation: 1.0.3 - dev: false - /htmlparser2/6.1.0: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} dependencies: @@ -12114,12 +12105,6 @@ packages: engines: {node: '>=0.10'} dev: true - /text-segmentation/1.0.3: - resolution: {integrity: sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==} - dependencies: - utrie: 1.0.2 - dev: false - /text-table/0.2.0: resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} dev: true @@ -12759,12 +12744,6 @@ packages: resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=} engines: {node: '>= 0.4.0'} - /utrie/1.0.2: - resolution: {integrity: sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==} - dependencies: - base64-arraybuffer: 1.0.2 - dev: false - /uuid/3.4.0: resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. diff --git a/src/main/services/i18n/language.ts b/src/main/services/i18n/language.ts index 9cc30910..e6100bf5 100644 --- a/src/main/services/i18n/language.ts +++ b/src/main/services/i18n/language.ts @@ -1,8 +1,10 @@ export const language = { de_DE: 'Deutsch', + el: 'Ελληνικά', en: 'English', es_ES: 'Español', pt_BR: 'Português (Brasil)', + uk_UA: 'Українська', ru: 'Русский', zh_CN: '中文 (简体)', zh_TW: '中文 (繁體)', diff --git a/src/main/services/i18n/locales/el/common.json b/src/main/services/i18n/locales/el/common.json new file mode 100644 index 00000000..14a7c988 --- /dev/null +++ b/src/main/services/i18n/locales/el/common.json @@ -0,0 +1,64 @@ +{ + "button": { + "moveStorage": "Μετακίνηση Αποθηκευτικού Χώρου", + "openStorage": "Άνοιγμα Αποθηκευτικού Χώρου", + "newStorage": "Νέος Αποθηκευτικός Χώρος", + "fromMassCodeV1": "Από massCode v1.0", + "fromSnippetsLab": "Από SnippetsLab", + "confirm": "Επιβεβαίωση", + "cancel": "Ακύρωση", + "update": ["Μετάβαση στο GitHub", "Εντάξει"], + "ok": "Εντάξει" + }, + "newFolder": "Νέος Φάκελος", + "newSnippet": "Νέο Απόσπασμα", + "newFragment": "Νέο Τμήμα", + "addDescription": "Προσθήκη Περιγραφής", + "addToFavorites": "Προσθήκη στα Αγαπημένα", + "addTag": "Προσθήκη Ετικέτας", + "exportToHtml": "Εξαγωγή σε HTML", + "saveScreenshot": "Αποθήκευση Στιγμιοτύπου Οθόνης", + "rename": "Μετονομασία", + "duplicate": "Αντίγραφο", + "delete": "Διαγραφή", + "deleteNow": "Διαγραφή Τώρα", + "defaultLanguage": "Προεπιλεγμένη Γλώσσα", + "removeFromFavorites": "Αφαίρεση από τα Αγαπημένα", + "emptyTrash": "Άδειασμα Κάδου", + "close": "Κλείσιμο", + "folder": { + "untitled": "Άτιτλος φάκελος", + "plural": "Φάκελοι" + }, + "snippet": { + "untitled": "Άτιτλο Απόσπασμα", + "plural": "Αποσπάσματα", + "emptyName": "Πληκτρολογήστε ονομασία αποσπάσματος", + "selectedMultiple": "{{count}} Αποσπάσματα Επιλέχθηκαν", + "noSelected": "Δεν Επιλέχθηκε Απόσπασμα" + }, + "fragment": "Τμήμα", + "search": "Αναζήτηση", + "line": "Γραμμή", + "column": "Στήλη", + "sidebar": { + "inbox": "Εισερχόμενα", + "favorites": "Αγαπημένα", + "allSnippets": "Όλα τα Αποσπάσματα", + "trash": "Κάδος", + "untitled": "Άτιτλος φάκελος", + "folders": "Φάκελοι", + "library": "Βιβλιοθήκη", + "tags": "Ετικέτες" + }, + "darkMode": "Σκοτεινή Λειτουργία", + "background": "Φόντο", + "restartApp": "Επανεκκίνηση του massCode", + "updateAvailable": "Διαθέσιμη Ενημέρωση", + "hide": "Απόκρυψη", + "show": "Εμφάνιση", + "collapse-all": "Απόκρυψη Όλων", + "expand-all": "Εμφάνιση Όλων", + "restore": "Επαναφορά", + "copy-snippet-link": "Αντιγραφή Συνδέσμου Αποσπάσματος" +} diff --git a/src/main/services/i18n/locales/el/dialog.json b/src/main/services/i18n/locales/el/dialog.json new file mode 100644 index 00000000..6850a52f --- /dev/null +++ b/src/main/services/i18n/locales/el/dialog.json @@ -0,0 +1,13 @@ +{ + "deleteConfirm": "Είστε σίγουροι ότι θέλετε να διαγράψετε οριστικά το {{name}};", + "deleteConfirmMultipleSnippets": "Είστε σίγουροι ότι θέλετε να διαγράψετε οριστικά {{count}} επιλεγμένα αποσπάσματα;", + "noUndo": "Δεν μπορείτε να αναιρέσετε αυτήν την ενέργεια.", + "allSnippetsMoveToTrash": "Όλα τα αποσπάσματα σε αυτόν τον φάκελο θα μετακινηθούν στον Κάδο.", + "deleteTag": "Αυτό θα προκαλέσει επίσης την αφαίρεση αυτής της ετικέτας από όλα τα αποσπάσματα.", + "emptyTrash": "Είστε σίγουροι ότι θέλετε να διαγράψετε οριστικά όλα τα αποσπάσματα στον Κάδο;", + "migrateConfirm": [ + "Θέλετε σίγουρα να μεταφέρετε από το {{name}};", + "Κατά την μεταφορά, η παρούσα βιβλιοθήκη θα αντικατασταθεί." + ], + "createDb": "Παρακαλούμε επιλέξτε άλλο φάκελο" +} diff --git a/src/main/services/i18n/locales/el/menu.json b/src/main/services/i18n/locales/el/menu.json new file mode 100644 index 00000000..6981fec0 --- /dev/null +++ b/src/main/services/i18n/locales/el/menu.json @@ -0,0 +1,85 @@ +{ + "app": { + "label": "massCode", + "preferences": "Προτιμήσεις", + "update": { + "label": "Έλεγχος για Ενημερώσεις....", + "message": "Η έκδοση {{newVersion}} είναι διαθέσιμη για λήψη.\nΗ έκδοσή σας είναι {{oldVersion}}.", + "button": ["Μεταβείτε στην Λήψη", "Εντάξει"], + "noUpdate": "Δεν υπάρχουν διαθέσιμες ενημερώσεις." + }, + "quit": "Έξοδος από το massCode", + "about": "Σχετικά με το massCode", + "hide": "Απόκρυψη του massCode", + "hideOther": "Απόκρυψη Υπολοίπων", + "showAll": "Εμφάνιση Όλων" + }, + "help": { + "label": "Βοήθεια", + "website": "Ιστότοπος", + "documentation": "Τεκμηρίωση", + "viewInGitHub": "Προβολή στο GitHub", + "changeLog": "Αρχείο Καταγραφής Αλλαγών", + "reportIssue": "Αναφορά Προβλήματος", + "giveStar": "Δώστε ένα Αστέρι", + "extension": { + "vscode": "Επέκταση VS Code", + "raycast": "Επέκταση Raycast", + "alfred": "Επέκταση Alfred" + }, + "donate": { + "openCollective": "Συνεισφέρετε στο Open Collective", + "payPal": "Συνεισφέρετε μέσω PayPal", + "gumroad": "Συνεισφέρετε μέσω Gumroad (Visa, Mastercard, κλπ.)" + }, + "twitter": "Twitter", + "devTools": "Εναλλαγή των Developer Tools", + "links": { + "snippets": "Συλλογή Αποσπασμάτων" + } + }, + "file": { + "label": "Αρχείο", + "find": "Εύρεση" + }, + "view": { + "label": "Προβολή", + "sortBy": { + "label": "Ταξινόμηση Αποκομμάτων Κατά", + "dateModified": "Ημερομηνία Τροποποίησης", + "dateCreated": "Ημερομηνία Δημιουργίας", + "name": "Ονομασία" + } + }, + "edit": { + "label": "Επεξεργασία", + "undo": "Αναίρεση", + "redo": "Επανάληψη", + "cut": "Αποκοπή", + "copy": "Αντιγραφή", + "paste": "Επικόλληση", + "delete": "Διαγραφή", + "selectAll": "Επιλογή Όλων" + }, + "editor": { + "label": "Διορθωτής", + "copy": "Αντιγραφή Αποσπάσματος στο Πρόχειρο", + "format": "Μορφοποίηση", + "previewCode": "Προεπισκόπηση Κώδικα", + "previewScreenshot": "Προεπισκόπηση Στιγμιοτύπου Οθόνης", + "previewMarkdown": "Προεπισκόπηση Markdown", + "fontSizeIncrease": "Μέγεθος Γραμματοσειράς Αύξηση", + "fontSizeDecrease": "Μέγεθος Γραμματοσειράς Μείωση", + "fontSizeReset": "Μέγεθος Γραμματοσειράς Επαναφορά" + }, + "markdown": { + "label": "Markdown", + "presentationMode": "Λειτουργία Παρουσίασης", + "preview": "Προεπισκόπηση" + }, + "history": { + "label": "Ιστορικό", + "back": "Πίσω", + "forward": "Μπροστά" + } +} diff --git a/src/main/services/i18n/locales/el/preferences.json b/src/main/services/i18n/locales/el/preferences.json new file mode 100644 index 00000000..1799f8d2 --- /dev/null +++ b/src/main/services/i18n/locales/el/preferences.json @@ -0,0 +1,49 @@ +{ + "title": "Προτιμήσεις", + "storage": { + "label": "Αποθηκευτικός Χώρος", + "migrate": "Μετακίνηση", + "count": "Καταμέτρηση" + }, + "editor": { + "label": "Διορθωτής", + "fontSize": "Μέγεθος Γραμματοσειράς", + "fontFamily": "Γραμματοσειρά", + "wrap": { + "label": "Αναδίπλωση", + "wordWrap": "Αναδίπλωση Λέξεων", + "off": "Ανενεργό" + }, + "tabSize": "Μέγεθος Tab", + "showInvisibles": "Εμφάνιση Κρυφών", + "highlightLine": "Επισήμανση Γραμμής", + "highlightGutter": "Επισήμανση Περιθωρίου", + "matchBrackets": "Αντιστοίχιση Αγκύλων", + "prettier": { + "label": "Prettier", + "trailingComma": { + "label": "Κόμμα Ουράς", + "none": "Καθόλου", + "all": "Όλα", + "es6": "ES6" + }, + "semi": "Semi", + "singleQuote": "Μονά Εισαγωγικά" + } + }, + "appearance": { + "label": "Εμφάνιση", + "theme": { + "label": "Θέμα", + "light": "Φωτεινό", + "dark": "Σκοτεινό" + } + }, + "language": { + "label": "Γλώσσα" + }, + "markdown": { + "label": "Markdown", + "codeRenderer": "Απεικόνιση Μπλοκ Κώδικα" + } +} diff --git a/src/main/services/i18n/locales/el/special.json b/src/main/services/i18n/locales/el/special.json new file mode 100644 index 00000000..c6c1c030 --- /dev/null +++ b/src/main/services/i18n/locales/el/special.json @@ -0,0 +1,29 @@ +{ + "description": { + "storage": "Για να χρησιμοποιήσετε υπηρεσίες συγχρονισμού όπως iCloud Drive, Google Drive ή Dropbox, απλώς μεταφέρετε τον αποθηκευτικό χώρο στους αντίστοιχους συγχρονισμένους φακέλους", + "migrate": { + "1": "Για μεταφορά από το massCode v1.0 επιλέξτε τον φάκελο που περιέχει τα αρχεία της βάσης δεδομένων.", + "2": "Για μεταφορά από το SnippetsLab επιλέξτε αρχείο JSON.", + "3": [ + "Ορισμένοι Περιορισμοί. Κατά την μεταφορά από το SnippetsLab:", + "Όλοι οι φάκελοι θα είναι πρώτου επιπέδου καθώς το αρχείο JSON (κάτω από την έκδοση 2.1) δεν αντιπροσωπεύει ένθετους φακέλους.", + "Αποσπάσματα με μη υποστηριζόμενες γλώσσες θα ορίζονται ως Απλό Κείμενο (προεπιλογή)." + ] + }, + "htmlCssPreview": "Προσθέστε τμήματα με γλώσσες HTML & CSS για να δείτε αποτέλεσμα.", + "codeBlockRenderer": [ + "Όταν χρησιμοποιείτε το Codemirror, η γλώσσα που θα οριστεί για το μπλοκ κώδικα πρέπει να αντιστοιχεί σε μία από τις τιμές των", + "γλωσσών" + ] + }, + "success": { + "migrate": "Η DB μετακινήθηκε επιτυχώς." + }, + "error": { + "folderContainDb": "Ο φάκελος περιέχει ήδη το \"db.json\".", + "folderNotContainDb": "Ο φάκελος δεν περιέχει το \"db.json\"." + }, + "unsponsored": "Χωρίς Χορηγία", + "supportMessage": "Γειά, Anton εδώ 👋

\nΕυχαριστώ που χρησιμοποιείτε το massCode. Εάν βρίσκετε αυτήν την εφαρμογή χρήσιμη, παρακαλώ {{-tagStart}} συνεισφέρετε {{-tagEnd}}. Θα με εμπνεύσει να συνεχίσω την ανάπτυξη του έργου.", + "snippetsShowcase": "Βιτρίνα Αποσπασμάτων" +} diff --git a/src/main/services/i18n/locales/en/special.json b/src/main/services/i18n/locales/en/special.json index e5be9f03..d360c177 100644 --- a/src/main/services/i18n/locales/en/special.json +++ b/src/main/services/i18n/locales/en/special.json @@ -1,6 +1,6 @@ { "description": { - "storage": "To use sync services like iCloud Drive, Google Drive of Dropbox, simply move storage to the corresponding synced folders", + "storage": "To use sync services like iCloud Drive, Google Drive or Dropbox, simply move storage to the corresponding synced folders", "migrate": { "1": "To migrate from massCode v1.0 select the folder containing the database files.", "2": "To migrate from SnippetsLab select JSON file.", diff --git a/src/main/services/i18n/locales/uk_UA/common.json b/src/main/services/i18n/locales/uk_UA/common.json new file mode 100644 index 00000000..261265fa --- /dev/null +++ b/src/main/services/i18n/locales/uk_UA/common.json @@ -0,0 +1,63 @@ +{ + "button": { + "moveStorage": "Перемістити", + "openStorage": "Відкрити", + "newStorage": "Створити нове", + "fromMassCodeV1": "Із massCode v1.0", + "fromSnippetsLab": "Із SnippetsLab", + "confirm": "Підтвердити", + "cancel": "Скасувати", + "ok": "Добре" + }, + "newFolder": "Нова папка", + "newSnippet": "Новий сніпет", + "newFragment": "Новий фраґмент", + "addDescription": "Додати опис", + "addToFavorites": "Додати в обране", + "addTag": "Додати тег", + "exportToHtml": "Експорт в HTML", + "saveScreenshot": "Зберігти скриншот", + "rename": "Перейменувати", + "duplicate": "Дублікат", + "delete": "Видалити", + "deleteNow": "Видалити зараз", + "defaultLanguage": "Мова за замовчуванням", + "removeFromFavorites": "Видалити з уподобань", + "emptyTrash": "Очистити смітник", + "close": "Зачинити", + "folder": { + "untitled": "Нова папка", + "plural": "Папки" + }, + "snippet": { + "untitled": "Новий сніпет", + "plural": "Сніпитів", + "emptyName": "Введіть імʼя сніпета", + "selectedMultiple": "{{count}} сніпетів обрано", + "noSelected": "Не обрано жодного сніпета" + }, + "fragment": "Фрагмент", + "search": "Пошук", + "line": "Рядок", + "column": "Колонка", + "sidebar": { + "inbox": "Вхідні", + "favorites": "Уподобання", + "allSnippets": "Всі сніпети", + "trash": "Смітник", + "untitled": "Нова папка", + "folders": "Папки", + "library": "Бібліотека", + "tags": "Теги" + }, + "darkMode": "Темний режим", + "background": "Фон", + "restartApp": "Перезавантажити massCode", + "updateAvailable": "Доступно обновление", + "hide": "Сховати", + "show": "Показати", + "collapse-all": "Закрити все", + "expand-all": "Відкрити все", + "restore": "Відновити", + "copy-snippet-link": "Скопіювати посилання" +} diff --git a/src/main/services/i18n/locales/uk_UA/dialog.json b/src/main/services/i18n/locales/uk_UA/dialog.json new file mode 100644 index 00000000..a481046c --- /dev/null +++ b/src/main/services/i18n/locales/uk_UA/dialog.json @@ -0,0 +1,13 @@ +{ + "deleteConfirm": "Ви впевнені, що хочете остаточно видалити {{name}}?", + "deleteConfirmMultipleSnippets": "Ви впевнені, що хочете остаточно видалити {{count}} обраних сніпетів?", + "noUndo": "Цю дії неможливо скасувати.", + "allSnippetsMoveToTrash": "Всі сніпети у цій теці буде пересунуто до смітника.", + "deleteTag": "Це так само стосується всіх сніпетів, що містять цей тег.", + "emptyTrash": "Ви впевнені, що хочете безповоротно очистити Смітник?", + "migrateConfirm": [ + "Ви впевнені, що хочете мігрувати {{name}}?", + "Під час міграції, поточна бібліотека буде перезаписана." + ], + "createDb": "Будь ласка, оберіть іншу папку." +} diff --git a/src/main/services/i18n/locales/uk_UA/menu.json b/src/main/services/i18n/locales/uk_UA/menu.json new file mode 100644 index 00000000..9d3b2329 --- /dev/null +++ b/src/main/services/i18n/locales/uk_UA/menu.json @@ -0,0 +1,84 @@ +{ + "app": { + "label": "massCode", + "preferences": "Параметри", + "update": { + "label": "Перевірити оновлення....", + "message": "Версія {{newVersion}} доступна для скачування.\nПоточна версія {{oldVersion}}.", + "button": ["Перейти до завантаження", "OK"], + "noUpdate": "В даний час немає доступних оновлень." + }, + "quit": "Вийти з massCode", + "about": "Про massCode", + "hide": "Сховати massCode", + "hideOther": "Сховати інші", + "showAll": "Показати всі" + }, + "help": { + "label": "Підтримка", + "website": "Сайт", + "documentation": "Документація", + "viewInGitHub": "Переглянути у GitHub", + "changeLog": "Список змін", + "reportIssue": "Відкрити Issue", + "giveStar": "Поставити зірку", + "extension": { + "vscode": "VS Code росширення", + "raycast": "Raycast росширення", + "alfred": "Alfred росширення" + }, + "donate": { + "openCollective": "Пожертвувати через Open Collective", + "payPal": "Пожертвувати через PayPal", + "gumroad": "Пожертвувати через Gumroad (Visa, Mastercard, и тд.)" + }, + "twitter": "Twitter", + "devTools": "Відкрити інструменти разробника", + "links": { + "snippets": "Колекція сніпетів" + } + }, + "file": { + "label": "Файл", + "find": "Знайти" + }, + "view": { + "label": "Вид", + "sortBy": { + "label": "Сортувати сніпети по", + "dateModified": "Дата модифікації", + "dateCreated": "Дата створення", + "name": "Імені" + } + }, + "edit": { + "label": "Змінити", + "undo": "Скасувати", + "redo": "Повторити", + "cut": "Вирізати", + "copy": "Скопіювати", + "paste": "Вставити", + "delete": "Видалити", + "selectAll": "Вибрати все" + }, + "editor": { + "label": "Редактор", + "copy": "Скопіювати сніпет у буфер", + "format": "Форматувати", + "previewCode": "Перегляд результату HTML/CSS", + "previewScreenshot": "Перегляд скріншота", + "fontSizeIncrease": "Збільшити шрифт", + "fontSizeDecrease": "Зменшити шрифт", + "fontSizeReset": "Скинути размір шрифта" + }, + "markdown": { + "label": "Markdown", + "presentationMode": "Режим презентації", + "preview": "Перегляд Markdown" + }, + "history": { + "label": "Істория", + "back": "Назад", + "forward": "Вперед" + } +} diff --git a/src/main/services/i18n/locales/uk_UA/preferences.json b/src/main/services/i18n/locales/uk_UA/preferences.json new file mode 100644 index 00000000..0b011799 --- /dev/null +++ b/src/main/services/i18n/locales/uk_UA/preferences.json @@ -0,0 +1,49 @@ +{ + "title": "Параметри", + "storage": { + "label": "Сховище", + "migrate": "Міграція", + "count": "Кількість" + }, + "editor": { + "label": "Редактор", + "fontSize": "Размір шрифта", + "fontFamily": "Семейство шрифтів", + "wrap": { + "label": "Перенесення", + "wordWrap": "Перенесення по словам", + "off": "Відключити" + }, + "tabSize": "Розмір відступу", + "showInvisibles": "Показ невидимих символів", + "highlightLine": "Підсвітка рядку", + "highlightGutter": "Підсвітка gutter", + "matchBrackets": "Підсвітка дужок", + "prettier": { + "label": "Prettier", + "trailingComma": { + "label": "Кома у кінці", + "none": "Ні", + "all": "Усі", + "es6": "ES6" + }, + "semi": "Крапка з комою", + "singleQuote": "Одинарні лапки" + } + }, + "appearance": { + "label": "Зовнішній вид", + "theme": { + "label": "Вигляд", + "light": "Світла", + "dark": "Темна" + } + }, + "language": { + "label": "Мова" + }, + "markdown": { + "label": "Markdown", + "codeRenderer": "Рендерер блоків коду" + } +} diff --git a/src/main/services/i18n/locales/uk_UA/special.json b/src/main/services/i18n/locales/uk_UA/special.json new file mode 100644 index 00000000..982f7148 --- /dev/null +++ b/src/main/services/i18n/locales/uk_UA/special.json @@ -0,0 +1,29 @@ +{ + "description": { + "storage": "Щоб використовувати такі служби синхронізації, як iCloud Drive, Google Drive або Dropbox, просто перенесіть сховище у відповідні синхронізовані папки.", + "migrate": { + "1": "Для міграції з massCode v1.0 оберіть папку, що містить файли баз даних.", + "2": "Для міграції з SnippetsLab оберіть файл JSON.", + "3": [ + "Деякі обмеження. Під час міграції з SnippetsLab:", + "Усі папки будуть першого рівня, оскільки файл JSON (нижче v2.1) не представляє підтеки.", + "Сніпети з непідтримуваними мовами будуть встановлені на стандартний простий текст." + ] + }, + "htmlCssPreview": "Добавьте фрагменты с языками HTML и CSS для просмотра результата.", + "codeBlockRenderer": [ + "При использовании Codemirror, устанавливаемый язык для блока кода должен соответствовать одному из значений", + "языков" + ] + }, + "success": { + "migrate": "БД успішно перенесено." + }, + "error": { + "folderContainDb": "Папка вже містить \"db.json\".", + "folderNotContainDb": "Папка не містить \"db.json\"." + }, + "unsponsored": "Неспонсоровані", + "supportMessage": "Привіт, це Антон 👋

\nДякую, що користуєтесь massCode. Якщо додаток приніс вам користь, будь ласка {{-tagStart}} підтримайте проєкт {{-tagEnd}}. Це надихне мене для продовження роботи над проєктом.", + "snippetsShowcase": "Колекція сніпетів" +} diff --git a/src/renderer/components/editor/EditorPreview.vue b/src/renderer/components/editor/EditorPreview.vue index 9d2f9d7a..4940f12b 100644 --- a/src/renderer/components/editor/EditorPreview.vue +++ b/src/renderer/components/editor/EditorPreview.vue @@ -93,19 +93,30 @@ const setSrcDoc = () => { } ` - srcDoc.value = ` - ${html || htmlDefault} - + ` } + setSrcDoc() -const onSaveToHtml = () => { +const onSaveToHtml = async () => { + const formatted = await ipc.invoke('main:prettier', { + source: srcDoc.value, + parser: 'html' + }) + const a = document.createElement('a') - a.href = `data:text/plain;charset=utf-8, ${encodeURIComponent(srcDoc.value)}` - console.log(a) + a.href = `data:text/plain;charset=utf-8, ${encodeURIComponent(formatted)}` a.download = `${snippetStore.selected?.name}.html` a.click() } diff --git a/src/renderer/components/screenshot/TheScreenshot.vue b/src/renderer/components/screenshot/TheScreenshot.vue index ef20804e..493415a5 100644 --- a/src/renderer/components/screenshot/TheScreenshot.vue +++ b/src/renderer/components/screenshot/TheScreenshot.vue @@ -26,8 +26,16 @@
+ PNG   + + + + SVG  
@@ -83,7 +91,7 @@ -
+
@@ -94,23 +102,19 @@
-
diff --git a/src/renderer/components/ui/AppActionButton.vue b/src/renderer/components/ui/AppActionButton.vue index dc625659..c31f3268 100644 --- a/src/renderer/components/ui/AppActionButton.vue +++ b/src/renderer/components/ui/AppActionButton.vue @@ -15,6 +15,7 @@ border: none; background-color: transparent; outline: none; + color: var(--color-text); :deep(svg) { fill: var(--color-button-action); }