diff options
author | Lauri Ojansivu <x@xet7.org> | 2018-07-30 17:42:57 +0300 |
---|---|---|
committer | Lauri Ojansivu <x@xet7.org> | 2018-07-30 17:42:57 +0300 |
commit | 92bb646977793bd0e6c1e0557404172ffe4ad95d (patch) | |
tree | 196392e56a21ad2956df26f87555cfb45ac706b4 | |
parent | 2bb80956dd54aa6af0a56b863bc5d047305f8a8a (diff) | |
parent | 43c38f87a53ed25456f45e5666b6a3a06dd1dbc3 (diff) | |
download | wekan-92bb646977793bd0e6c1e0557404172ffe4ad95d.tar.gz wekan-92bb646977793bd0e6c1e0557404172ffe4ad95d.tar.bz2 wekan-92bb646977793bd0e6c1e0557404172ffe4ad95d.zip |
Merge branch 'devel'
-rw-r--r-- | CHANGELOG.md | 13 | ||||
-rw-r--r-- | Dockerfile | 2 | ||||
-rw-r--r-- | client/lib/utils.js | 45 | ||||
-rw-r--r-- | config/router.js | 6 | ||||
-rw-r--r-- | docker-compose.yml | 1 | ||||
-rw-r--r-- | i18n/de.i18n.json | 14 | ||||
-rw-r--r-- | i18n/es.i18n.json | 56 | ||||
-rw-r--r-- | i18n/ka.i18n.json | 250 | ||||
-rw-r--r-- | i18n/pt-BR.i18n.json | 64 | ||||
-rw-r--r-- | i18n/sv.i18n.json | 10 | ||||
-rw-r--r-- | i18n/zh-CN.i18n.json | 56 | ||||
-rw-r--r-- | models/settings.js | 17 | ||||
-rw-r--r-- | models/users.js | 13 | ||||
-rw-r--r-- | package.json | 6 | ||||
-rw-r--r-- | sandstorm-pkgdef.capnp | 4 | ||||
-rw-r--r-- | server/policy.js | 9 | ||||
-rwxr-xr-x | snap-src/bin/config | 20 | ||||
-rwxr-xr-x | snap-src/bin/wekan-help | 4 |
18 files changed, 357 insertions, 233 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index e1364c00..24370dde 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,21 @@ +# v1.22 2018-07-30 Wekan release + +This release adds the following new features: + +- [Backup script now uses mongodump from snap to + do backups](https://github.com/wekan/wekan/wiki/Backup); +- [Integration of Matomo](https://github.com/wekan/wekan/pull/1806); +- [Enable/Disable API with env var](https://github.com/wekan/wekan/pull/1799). + +Thanks to GitHub user Akuket and xet7 for their contributions. + # v1.21 2018-07-18 Wekan release This release adds the following new features: - [Add logo from Wekan website to login logo](https://github.com/wekan/wekan/commit/4eed23afe06d5fab8d45ba3decc7c1d3b85efbd8). -This release fixes the following bugs: +and fixes the following bugs: - [Allow to resend invites](https://github.com/wekan/wekan/pull/1785). @@ -1,5 +1,5 @@ FROM debian:buster-slim -MAINTAINER wekan +LABEL maintainer="wekan" # Declare Arguments ARG NODE_VERSION diff --git a/client/lib/utils.js b/client/lib/utils.js index 6b8e3524..5349e500 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -144,6 +144,51 @@ Utils = { } }); }, + + setMatomo(data){ + window._paq = window._paq || []; + window._paq.push(['setDoNotTrack', data.doNotTrack]); + if (data.withUserName){ + window._paq.push(['setUserId', Meteor.user().username]); + } + window._paq.push(['trackPageView']); + window._paq.push(['enableLinkTracking']); + + (function() { + window._paq.push(['setTrackerUrl', `${data.address}piwik.php`]); + window._paq.push(['setSiteId', data.siteId]); + + const script = document.createElement('script'); + Object.assign(script, { + id: 'scriptMatomo', + type: 'text/javascript', + async: 'true', + defer: 'true', + src: `${data.address}piwik.js`, + }); + + const s = document.getElementsByTagName('script')[0]; + s.parentNode.insertBefore(script, s); + })(); + + Session.set('matomo', true); + }, + + manageMatomo() { + const matomo = Session.get('matomo'); + if (matomo === undefined){ + Meteor.call('getMatomoConf', (err, data) => { + if (err && err.error[0] === 'var-not-exist'){ + Session.set('matomo', false); // siteId || address server not defined + } + if (!err){ + Utils.setMatomo(data); + } + }); + } else if (matomo) { + window._paq.push(['trackPageView']); + } + }, }; // A simple tracker dependency that we invalidate every time the window is diff --git a/config/router.js b/config/router.js index 1f80004a..91d08897 100644 --- a/config/router.js +++ b/config/router.js @@ -14,6 +14,8 @@ FlowRouter.route('/', { Filter.reset(); EscapeActions.executeAll(); + Utils.manageMatomo(); + BlazeLayout.render('defaultLayout', { headerBar: 'boardListHeaderBar', content: 'boardList', @@ -38,6 +40,8 @@ FlowRouter.route('/b/:id/:slug', { EscapeActions.executeUpTo('popup-close'); } + Utils.manageMatomo(); + BlazeLayout.render('defaultLayout', { headerBar: 'boardHeaderBar', content: 'board', @@ -53,6 +57,8 @@ FlowRouter.route('/b/:boardId/:slug/:cardId', { Session.set('currentBoard', params.boardId); Session.set('currentCard', params.cardId); + Utils.manageMatomo(); + BlazeLayout.render('defaultLayout', { headerBar: 'boardHeaderBar', content: 'board', diff --git a/docker-compose.yml b/docker-compose.yml index eb82c3aa..b2e12629 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -37,6 +37,7 @@ services: environment: - MONGO_URL=mongodb://wekandb:27017/wekan - ROOT_URL=http://localhost + - WITH_API=false depends_on: - wekandb diff --git a/i18n/de.i18n.json b/i18n/de.i18n.json index 5e8ce176..bb4a317d 100644 --- a/i18n/de.i18n.json +++ b/i18n/de.i18n.json @@ -489,14 +489,14 @@ "boardSubtaskSettingsPopup-title": "Boardeinstellungen für Teilaufgaben", "show-subtasks-field": "Karten können Teilaufgaben haben", "deposit-subtasks-board": "Teilaufgaben in diesem Board ablegen:", - "deposit-subtasks-list": "Zielliste für die dort abgelegten Teilaufgaben:", - "show-parent-in-minicard": "Zeige übergeordnetes Element auf Minikarte", - "prefix-with-full-path": "Prefix mit vollständigem Pfad", - "prefix-with-parent": "Präfix mit übergeordneten Element", - "subtext-with-full-path": "Subtext mit vollständigem Pfad", - "subtext-with-parent": "Subtext mit übergeordneten Element", + "deposit-subtasks-list": "Zielliste für hier abgelegte Teilaufgaben:", + "show-parent-in-minicard": "Übergeordnetes Element auf Minikarte anzeigen:", + "prefix-with-full-path": "Vollständiger Pfad über Titel", + "prefix-with-parent": "Über Titel", + "subtext-with-full-path": "Vollständiger Pfad unter Titel", + "subtext-with-parent": "Unter Titel", "change-card-parent": "Übergeordnete Karte ändern", "parent-card": "Übergeordnete Karte", "source-board": "Quellboard", - "no-parent": "Eltern nicht zeigen" + "no-parent": "Nicht anzeigen" }
\ No newline at end of file diff --git a/i18n/es.i18n.json b/i18n/es.i18n.json index 6f2d6cd6..c49f7e17 100644 --- a/i18n/es.i18n.json +++ b/i18n/es.i18n.json @@ -2,7 +2,7 @@ "accept": "Aceptar", "act-activity-notify": "[Wekan] Notificación de actividad", "act-addAttachment": "ha adjuntado __attachment__ a __card__", - "act-addSubtask": "added subtask __checklist__ to __card__", + "act-addSubtask": "ha añadido la subtarea __checklist__ a __card__", "act-addChecklist": "ha añadido la lista de verificación __checklist__ a __card__", "act-addChecklistItem": "ha añadido __checklistItem__ a la lista de verificación __checklist__ en __card__", "act-addComment": "ha comentado en __card__: __comment__", @@ -20,9 +20,9 @@ "act-importList": "ha importado __list__", "act-joinMember": "ha añadido a __member__ a __card__", "act-moveCard": "ha movido __card__ desde __oldList__ a __list__", - "act-removeBoardMember": "ha desvinculado a __member__ de __board__", + "act-removeBoardMember": "ha eliminado a __member__ de __board__", "act-restoredCard": "ha restaurado __card__ en __board__", - "act-unjoinMember": "ha desvinculado a __member__ de __card__", + "act-unjoinMember": "ha eliminado a __member__ de __card__", "act-withBoardTitle": "[Wekan] __board__", "act-withCardTitle": "[__board__] __card__", "actions": "Acciones", @@ -42,7 +42,7 @@ "activity-removed": "ha eliminado %s de %s", "activity-sent": "ha enviado %s a %s", "activity-unjoined": "se ha desvinculado de %s", - "activity-subtask-added": "added subtask to %s", + "activity-subtask-added": "ha añadido la subtarea a %s", "activity-checklist-added": "ha añadido una lista de verificación a %s", "activity-checklist-item-added": "ha añadido el elemento de la lista de verificación a '%s' en %s", "add": "Añadir", @@ -50,7 +50,7 @@ "add-board": "Añadir tablero", "add-card": "Añadir una tarjeta", "add-swimlane": "Añadir un carril de flujo", - "add-subtask": "Add Subtask", + "add-subtask": "Añadir subtarea", "add-checklist": "Añadir una lista de verificación", "add-checklist-item": "Añadir un elemento a la lista de verificación", "add-cover": "Añadir portada", @@ -103,7 +103,7 @@ "boardMenuPopup-title": "Menú del tablero", "boards": "Tableros", "board-view": "Vista del tablero", - "board-view-cal": "Calendar", + "board-view-cal": "Calendario", "board-view-swimlanes": "Carriles", "board-view-lists": "Listas", "bucket-example": "Como “Cosas por hacer” por ejemplo", @@ -134,7 +134,7 @@ "cardMorePopup-title": "Más", "cards": "Tarjetas", "cards-count": "Tarjetas", - "casSignIn": "Sign In with CAS", + "casSignIn": "Iniciar sesión con CAS", "change": "Cambiar", "change-avatar": "Cambiar el avatar", "change-password": "Cambiar la contraseña", @@ -145,7 +145,7 @@ "changePasswordPopup-title": "Cambiar la contraseña", "changePermissionsPopup-title": "Cambiar los permisos", "changeSettingsPopup-title": "Cambiar las preferencias", - "subtasks": "Subtasks", + "subtasks": "Subtareas", "checklists": "Lista de verificación", "click-to-star": "Haz clic para destacar este tablero.", "click-to-unstar": "Haz clic para dejar de destacar este tablero.", @@ -168,8 +168,8 @@ "comment-only": "Sólo comentarios", "comment-only-desc": "Solo puedes comentar en las tarjetas.", "computer": "el ordenador", - "confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?", - "confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?", + "confirm-subtask-delete-dialog": "¿Seguro que quieres eliminar la subtarea?", + "confirm-checklist-delete-dialog": "¿Seguro que quieres eliminar la lista de verificación?", "copy-card-link-to-clipboard": "Copiar el enlace de la tarjeta al portapapeles", "copyCardPopup-title": "Copiar la tarjeta", "copyChecklistToManyCardsPopup-title": "Copiar la plantilla de la lista de verificación en varias tarjetas", @@ -310,7 +310,7 @@ "log-out": "Finalizar la sesión", "log-in": "Iniciar sesión", "loginPopup-title": "Iniciar sesión", - "memberMenuPopup-title": "Mis preferencias", + "memberMenuPopup-title": "Preferencias de miembro", "members": "Miembros", "menu": "Menú", "move-selection": "Mover la selección", @@ -482,21 +482,21 @@ "delete-board-confirm-popup": "Se eliminarán todas las listas, tarjetas, etiquetas y actividades, y no podrás recuperar los contenidos del tablero. Esta acción no puede deshacerse.", "boardDeletePopup-title": "¿Borrar el tablero?", "delete-board": "Borrar el tablero", - "default-subtasks-board": "Subtasks for __board__ board", - "default": "Default", - "queue": "Queue", - "subtask-settings": "Subtasks Settings", - "boardSubtaskSettingsPopup-title": "Board Subtasks Settings", - "show-subtasks-field": "Cards can have subtasks", - "deposit-subtasks-board": "Deposit subtasks to this board:", - "deposit-subtasks-list": "Landing list for subtasks deposited here:", - "show-parent-in-minicard": "Show parent in minicard:", - "prefix-with-full-path": "Prefix with full path", - "prefix-with-parent": "Prefix with parent", - "subtext-with-full-path": "Subtext with full path", - "subtext-with-parent": "Subtext with parent", - "change-card-parent": "Change card's parent", - "parent-card": "Parent card", - "source-board": "Source board", - "no-parent": "Don't show parent" + "default-subtasks-board": "Subtareas para el tablero __board__", + "default": "Por defecto", + "queue": "Cola", + "subtask-settings": "Subtareas del tablero", + "boardSubtaskSettingsPopup-title": "Configuración de las subtareas del tablero", + "show-subtasks-field": "Las tarjetas pueden tener subtareas", + "deposit-subtasks-board": "Depositar subtareas en este tablero:", + "deposit-subtasks-list": "Lista de destino para subtareas depositadas aquí:", + "show-parent-in-minicard": "Mostrar el padre en una minitarjeta:", + "prefix-with-full-path": "Prefijo con ruta completa", + "prefix-with-parent": "Prefijo con el padre", + "subtext-with-full-path": "Subtexto con ruta completa", + "subtext-with-parent": "Subtexto con el padre", + "change-card-parent": "Cambiar la tarjeta padre", + "parent-card": "Tarjeta padre", + "source-board": "Tablero de origen", + "no-parent": "No mostrar la tarjeta padre" }
\ No newline at end of file diff --git a/i18n/ka.i18n.json b/i18n/ka.i18n.json index 11c8f5e8..63a448bb 100644 --- a/i18n/ka.i18n.json +++ b/i18n/ka.i18n.json @@ -2,23 +2,23 @@ "accept": "დათანხმება", "act-activity-notify": "[ვეკანი] აქტივობის შეტყობინება", "act-addAttachment": "მიბმულია__მიბმა __ბარათზე__", - "act-addSubtask": "added subtask __checklist__ to __card__", - "act-addChecklist": "added checklist __checklist__ to __card__", - "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__", - "act-addComment": "commented on __card__: __comment__", + "act-addSubtask": "დამატებულია ქვესაქმიანობა__ჩამონათვალი__ ბარათზე__", + "act-addChecklist": "დაამატა ჩამონათვალი__ჩამონათვალი__ ბარათზე__", + "act-addChecklistItem": "დაამატა __ჩამონათვალის ელემენტი__ ჩამონათვალში __ჩამონათვალი __ბარათზე__", + "act-addComment": "დააკომენტარა__ბარათზე__: __კომენტარი__", "act-createBoard": "შექმნილია __დაფა__", - "act-createCard": "added __card__ to __list__", - "act-createCustomField": "created custom field __customField__", - "act-createList": "added __list__ to __board__", - "act-addBoardMember": "added __member__ to __board__", - "act-archivedBoard": "__board__ moved to Recycle Bin", - "act-archivedCard": "__card__ moved to Recycle Bin", - "act-archivedList": "__list__ moved to Recycle Bin", - "act-archivedSwimlane": "__swimlane__ moved to Recycle Bin", + "act-createCard": "დაამატა __ბარათი__ ჩამონათვალში__", + "act-createCustomField": "შექმნა სტანდარტული ველი __სტანდარტული ველი__", + "act-createList": "დაამატა __ჩამონათვალი__ დაფაზე__", + "act-addBoardMember": "დაამატა __წევრი__ დაფაზე__", + "act-archivedBoard": "__board__ გადატანილია სანაგვე ურნაში", + "act-archivedCard": "__ბარათი__ გადატანილია სანაგვე ურნაში", + "act-archivedList": "__list__ გადატანილია სანაგვე ურნაში", + "act-archivedSwimlane": "__swimlane__ გადატანილია სანაგვე ურნაში", "act-importBoard": "იმპორტირებულია__დაფა__", "act-importCard": "იმპორტირებულია __ბარათი__", "act-importList": "იმპორტირებულია __სია__", - "act-joinMember": "added __member__ to __card__", + "act-joinMember": "დაამატა __წევრი__ ბარათზე__", "act-moveCard": "moved __card__ from __oldList__ to __list__", "act-removeBoardMember": "removed __member__ from __board__", "act-restoredCard": "restored __card__ to __board__", @@ -30,65 +30,65 @@ "activity": "აქტივობები", "activity-added": "დამატებულია %s ზე %s", "activity-archived": "%s-მა გადაინაცვლა წაშლილებში", - "activity-attached": "attached %s to %s", + "activity-attached": "მიბმულია %s %s-დან", "activity-created": "შექმნილია %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", - "activity-imported-board": "imported %s from %s", + "activity-imported-board": "იმპორტირებულია%s %s-დან", "activity-joined": "შეუერთდა %s", "activity-moved": "moved %s from %s to %s", - "activity-on": "on %s", + "activity-on": " %s-ზე", "activity-removed": "წაიშალა %s %s-დან", "activity-sent": "sent %s to %s", "activity-unjoined": "არ შემოუერთდა %s", - "activity-subtask-added": "added subtask to %s", - "activity-checklist-added": "added checklist to %s", - "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-subtask-added": "დაამატა ქვესაქმიანობა %s", + "activity-checklist-added": "დაემატა ჩამონათვალი %s-ს", + "activity-checklist-item-added": "დამატებულია ჩამონათვალის ელემენტები '%s' %s-ში", "add": "დამატება", "add-attachment": "მიბმული ფაილის დამატება", "add-board": "დაფის დამატება", "add-card": "ბარათის დამატება", - "add-swimlane": "Add Swimlane", + "add-swimlane": "ბილიკის დამატება", "add-subtask": "ქვესაქმიანობის დამატება", "add-checklist": "კატალოგის დამატება", "add-checklist-item": "დაამატეთ საგანი ჩამონათვალს", - "add-cover": "Add Cover", + "add-cover": "გარეკანის დამატება", "add-label": "ნიშნის დამატება", "add-list": "ჩამონათვალის დამატება", "add-members": "წევრების დამატება", - "added": "დამატებულია", + "added": "-მა დაამატა", "addMemberPopup-title": "წევრები", "admin": "ადმინი", "admin-desc": "შეუძლია ნახოს და შეასწოროს ბარათები, წაშალოს წევრები და შეცვალოს დაფის პარამეტრები. ", "admin-announcement": "განცხადება", "admin-announcement-active": "Active System-Wide Announcement", - "admin-announcement-title": "Announcement from Administrator", + "admin-announcement-title": "შეტყობინება ადმინისტრატორისთვის", "all-boards": "ყველა დაფა", - "and-n-other-card": "And __count__ other card", - "and-n-other-card_plural": "And __count__ other cards", + "and-n-other-card": "და __count__ სხვა ბარათი", + "and-n-other-card_plural": "და __count__ სხვა ბარათები", "apply": "გამოყენება", - "app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.", + "app-is-offline": "Wekan იტვირთება, გთხოვთ დაელოდოთ. გვერდის განახლებამ შეიძლება გამოიწვიოს მონაცემების დაკარგვა. იმ შემთხვევაში თუ Wekan არ იტვირთება, შეამოწმეთ სერვერი მუშაობს თუ არა. ", "archive": "სანაგვე ურნაში გადატანა", "archive-all": "ყველას სანაგვე ურნაში გადატანა", - "archive-board": "Move Board to Recycle Bin", - "archive-card": "Move Card to Recycle Bin", - "archive-list": "Move List to Recycle Bin", - "archive-swimlane": "Move Swimlane to Recycle Bin", - "archive-selection": "Move selection to Recycle Bin", - "archiveBoardPopup-title": "Move Board to Recycle Bin?", + "archive-board": "გადავიტანოთ დაფა სანაგვე ურნაში ", + "archive-card": "გადავიტანოთ ბარათი სანაგვე ურნაში ", + "archive-list": "გავიტანოთ ჩამონათვალი სანაგვე ურნაში ", + "archive-swimlane": "გადავიტანოთ ბილიკი სანაგვე ურნაში ", + "archive-selection": "გადავიტანოთ მონიშნული სანაგვე ურნაში ", + "archiveBoardPopup-title": "გადავიტანოთ დაფა სანაგვე ურნაში ", "archived-items": "სანაგვე ურნა", - "archived-boards": "Boards in Recycle Bin", + "archived-boards": "დაფები სანაგვე ურნაში ", "restore-board": "ბარათის აღდგენა", - "no-archived-boards": "No Boards in Recycle Bin.", + "no-archived-boards": "სანაგვე ურნაში დაფები არ მოიძებნა.", "archives": "სანაგვე ურნა", - "assign-member": "Assign member", + "assign-member": "უფლებამოსილი წევრი", "attached": "მიბმული", "attachment": "მიბმული ფიალი", "attachment-delete-pop": "მიბმული ფაილის წაშლა მუდმივია. შეუძლებელია მისი უკან დაბრუნება. ", "attachmentDeletePopup-title": "გსურთ მიბმული ფაილის წაშლა? ", "attachments": "მიბმული ფაილები", - "auto-watch": "Automatically watch boards when they are created", + "auto-watch": "დაფის ავტომატური ნახვა მას შემდეგ რაც ის შეიქმნება", "avatar-too-big": "დიდი მოცულობის სურათი (მაქსიმუმ 70KB)", "back": "უკან", "board-change-color": "ფერის შეცვლა", @@ -99,22 +99,22 @@ "boardChangeColorPopup-title": "დაფის ფონის ცვლილება", "boardChangeTitlePopup-title": "დაფის სახელის ცვლილება", "boardChangeVisibilityPopup-title": "ხილვადობის შეცვლა", - "boardChangeWatchPopup-title": "Change Watch", + "boardChangeWatchPopup-title": "საათის შეცვლა", "boardMenuPopup-title": "დაფის მენიუ", "boards": "დაფები", "board-view": "დაფის ნახვა", "board-view-cal": "კალენდარი", - "board-view-swimlanes": "Swimlanes", + "board-view-swimlanes": "ბილიკები", "board-view-lists": "ჩამონათვალი", - "bucket-example": "Like “Bucket List” for example", + "bucket-example": "მოიწონეთ “Bucket List” მაგალითად", "cancel": "გაუქმება", - "card-archived": "This card is moved to Recycle Bin.", - "card-comments-title": "This card has %s comment.", - "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.", + "card-archived": "ბარათი გადატანილია სანაგვე ურნაში ", + "card-comments-title": "ამ ბარათს ჰქონდა%s კომენტარი.", + "card-delete-notice": "წაშლის შემთხვევაში ამ ბარათთან ასცირებული ყველა მოქმედება დაიკარგება.", "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.", "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.", - "card-due": "Due", - "card-due-on": "Due on", + "card-due": "საბოლოო ვადა ", + "card-due-on": "საბოლოო ვადა", "card-spent": "დახარჯული დრო", "card-edit-attachments": "მიბმული ფაილის შესწორება", "card-edit-custom-fields": "Edit custom fields", @@ -128,13 +128,13 @@ "cardCustomField-datePopup-title": "დროის ცვლილება", "cardCustomFieldsPopup-title": "Edit custom fields", "cardDeletePopup-title": "წავშალოთ ბარათი? ", - "cardDetailsActionsPopup-title": "Card Actions", + "cardDetailsActionsPopup-title": "ბარათის მოქმედებები", "cardLabelsPopup-title": "ნიშნები", "cardMembersPopup-title": "წევრები", "cardMorePopup-title": "მეტი", "cards": "ბარათები", "cards-count": "ბარათები", - "casSignIn": "Sign In with CAS", + "casSignIn": "შესვლა CAS-ით", "change": "ცვლილება", "change-avatar": "სურათის შეცვლა", "change-password": "პაროლის შეცვლა", @@ -148,8 +148,8 @@ "subtasks": "ქვეამოცანა", "checklists": "კატალოგი", "click-to-star": "დააჭირეთ დაფის ვარსკვლავით მოსანიშნად", - "click-to-unstar": "Click to unstar this board.", - "clipboard": "Clipboard or drag & drop", + "click-to-unstar": "დააკლიკეთ დაფიდან ვარსკვლავის მოსახსნელად. ", + "clipboard": "Clipboard ან drag & drop", "close": "დახურვა", "close-board": "დაფის დახურვა", "close-board-pop": "You will be able to restore the board by clicking the “Recycle Bin” button from the home header.", @@ -166,7 +166,7 @@ "comment": "კომენტარი", "comment-placeholder": "დაწერეთ კომენტარი", "comment-only": "მხოლოდ კომენტარები", - "comment-only-desc": "Can comment on cards only.", + "comment-only-desc": "თქვენ შეგიძლიათ კომენტარის გაკეთება მხოლოდ ბარათებზე.", "computer": "კომპიუტერი", "confirm-subtask-delete-dialog": "დარწმუნებული ხართ, რომ გსურთ ქვესაქმიანობის წაშლა? ", "confirm-checklist-delete-dialog": "დარწმუნებული ხართ, რომ გსურთ კატალოგის წაშლა ? ", @@ -186,16 +186,16 @@ "custom-field-checkbox": "Checkbox", "custom-field-date": "თარიღი", "custom-field-dropdown": "ჩამოსაშლელი სია", - "custom-field-dropdown-none": "(none)", + "custom-field-dropdown-none": "(ცარიელი)", "custom-field-dropdown-options": "List Options", - "custom-field-dropdown-options-placeholder": "Press enter to add more options", + "custom-field-dropdown-options-placeholder": "დამატებითი პარამეტრების სანახავად დააჭირეთ enter-ს. ", "custom-field-dropdown-unknown": "(უცნობი)", "custom-field-number": "რიცხვი", "custom-field-text": "ტექსტი", "custom-fields": "Custom Fields", "date": "თარიღი", "decline": "უარყოფა", - "default-avatar": "Default avatar", + "default-avatar": "სტანდარტული ავატარი", "delete": "წაშლა", "deleteCustomFieldPopup-title": "Delete Custom Field?", "deleteLabelPopup-title": "ნამდვილად გსურთ ნიშნის წაშლა? ", @@ -211,7 +211,7 @@ "edit-wip-limit": " WIP ლიმიტის შესწორება", "soft-wip-limit": "Soft WIP Limit", "editCardStartDatePopup-title": "დაწყების დროის შეცვლა", - "editCardDueDatePopup-title": "Change due date", + "editCardDueDatePopup-title": "შეცვალეთ დედლაინი", "editCustomFieldPopup-title": "ველების შესწორება", "editCardSpentTimePopup-title": "დახარჯული დროის შეცვლა", "editLabelPopup-title": "ნიშნის შეცვლა", @@ -219,31 +219,31 @@ "editProfilePopup-title": "პროფილის შესწორება", "email": "ელ.ფოსტა", "email-enrollAccount-subject": "An account created for you on __siteName__", - "email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.", + "email-enrollAccount-text": "მოგესალმებით __user__,\n\nამ სერვისის გამოსაყენებლად დააკლიკეთ ქვედა ბმულს.\n\n__url__\n\nმადლობა.", "email-fail": "ელ.ფოსტის გაგზავნა ვერ მოხერხდა", - "email-fail-text": "Error trying to send email", + "email-fail-text": "ელ.ფოსტის გაგზავნისას დაფიქსირდა შეცდომა", "email-invalid": "არასწორი ელ.ფოსტა", "email-invite": "მოწვევა ელ.ფოსტის მეშვეობით", - "email-invite-subject": "__inviter__ sent you an invitation", - "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.", - "email-resetPassword-subject": "Reset your password on __siteName__", - "email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.", + "email-invite-subject": "__inviter__ გამოგიგზავნათ მოწვევა", + "email-invite-text": "ძვირფასო __user__,\n\n__inviter__ გიწვევთ დაფაზე \"__board__\" თანამშრომლობისთვის.\n\nგთხოვთ მიყვეთ ქვემოთ მოცემულ ბმულს:\n\n__url__\n\nმადლობა.", + "email-resetPassword-subject": "შეცვალეთ თქვენი პაროლი __siteName-ზე__", + "email-resetPassword-text": "გამარჯობა__user__,\n\nპაროლის შესაცვლელად დააკლიკეთ ქვედა ბმულს .\n\n__url__\n\nმადლობა.", "email-sent": "ელ.ფოსტა გაგზავნილია", - "email-verifyEmail-subject": "Verify your email address on __siteName__", - "email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.", + "email-verifyEmail-subject": "შეამოწმეთ ელ.ფოსტის მისამართი __siteName-ზე__", + "email-verifyEmail-text": "გამარჯობა __user__,\n\nანგარიშის ელ.ფოსტის შესამოწმებლად დააკლიკეთ ქვედა ბმულს.\n\n__url__\n\nმადლობა.", "enable-wip-limit": "Enable WIP Limit", - "error-board-doesNotExist": "This board does not exist", - "error-board-notAdmin": "You need to be admin of this board to do that", - "error-board-notAMember": "You need to be a member of this board to do that", + "error-board-doesNotExist": "მსგავსი დაფა არ არსებობს", + "error-board-notAdmin": "ამის გასაკეთებლად საჭიროა იყოთ დაფის ადმინისტრატორი", + "error-board-notAMember": "ამის გასაკეთებლად საჭიროა იყოთ დაფის წევრი", "error-json-malformed": "შენი ტექსტი არ არის ვალიდური JSON", "error-json-schema": "Your JSON data does not include the proper information in the correct format", "error-list-doesNotExist": "ეს ცხრილი არ არსებობს", - "error-user-doesNotExist": "This user does not exist", - "error-user-notAllowSelf": "You can not invite yourself", + "error-user-doesNotExist": "მსგავსი მომხმარებელი არ არსებობს", + "error-user-notAllowSelf": "თქვენ არ შეგიძლიათ საკუთარი თავის მოწვევა", "error-user-notCreated": "მომხმარებელი არ შეიქმნა", "error-username-taken": "არსებობს მსგავსი მომხმარებელი", "error-email-taken": "უკვე არსებობს მსგავსი ელ.ფოსტა", - "export-board": "Export board", + "export-board": "დაფის ექსპორტი", "filter": "ფილტრი", "filter-cards": "ბარათების გაფილტვრა", "filter-clear": "ფილტრის გასუფთავება", @@ -251,7 +251,7 @@ "filter-no-member": "არ არის წევრები ", "filter-no-custom-fields": "No Custom Fields", "filter-on": "ფილტრი ჩართულია", - "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.", + "filter-on-desc": "თქვენ ფილტრავთ ბარათებს ამ დაფაზე. დააკლიკეთ აქ ფილტრაციის შესწორებისთვის. ", "filter-to-selection": "მონიშნულის გაფილტვრა", "advanced-filter-label": "გაფართოებული ფილტრაცია", "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", @@ -268,14 +268,14 @@ "import-sandstorm-warning": "იმპორტირებული დაფა წაშლის ყველა არსებულ მონაცემს დაფაზე და შეანაცვლებს მას იმპორტირებული დაფა. ", "from-trello": "Trello-დან", "from-wekan": "Wekan-დან", - "import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.", - "import-board-instruction-wekan": "In your Wekan board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.", + "import-board-instruction-trello": "თქვენს Trello დაფაზე, შედით \"მენიუ\"-ში, შემდეგ დააკლიკეთ \"მეტი\", \"ამოპრინტერება და ექსპორტი\", \"JSON-ის ექსპორტი\" და დააკოპირეთ შედეგი. ", + "import-board-instruction-wekan": "თქვენს Wekan დაფაზე, შედით \"მენიუ\"-ში შემდეგ დააკლიკეთ \"დაფის ექსპორტი\" და დააკოპირეთ ტექსტი ჩამოტვირთულ ფაილში.", "import-json-placeholder": "მოათავსეთ თქვენი ვალიდური JSON მონაცემები აქ. ", "import-map-members": "რუკის წევრები", - "import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users", - "import-show-user-mapping": "Review members mapping", + "import-members-map": "თქვენს იმპორტირებულ დაფას ჰყავს მომხმარებლები. გთხოვთ დაამატოთ ის წევრები რომლის იმპორტიც გსურთ Wekan მომხმარებლებში", + "import-show-user-mapping": "მომხმარებლის რუკების განხილვა", "import-user-select": "Pick the Wekan user you want to use as this member", - "importMapMembersAddPopup-title": "Select Wekan member", + "importMapMembersAddPopup-title": "მონიშნეთ Wekan მომხმარებელი", "info": "ვერსია", "initials": "ინიციალები", "invalid-date": "არასწორი თარიღი", @@ -293,20 +293,20 @@ "leave-board": "დატოვეთ დაფა", "leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.", "leaveBoardPopup-title": "გსურთ დაფის დატოვება? ", - "link-card": "Link to this card", + "link-card": "დააკავშირეთ ამ ბარათთან", "list-archive-cards": "Move all cards in this list to Recycle Bin", "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Recycle Bin and bring them back to the board, click “Menu” > “Recycle Bin”.", "list-move-cards": "გადაიტანე ყველა ბარათი ამ სიაში", "list-select-cards": "მონიშნე ყველა ბარათი ამ სიაში", "listActionPopup-title": "მოქმედებების სია", - "swimlaneActionPopup-title": "Swimlane Actions", + "swimlaneActionPopup-title": "ბილიკის მოქმედებები", "listImportCardPopup-title": "Trello ბარათის იმპორტი", "listMorePopup-title": "მეტი", - "link-list": "Link to this list", - "list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.", - "list-delete-suggest-archive": "You can move a list to Recycle Bin to remove it from the board and preserve the activity.", + "link-list": "დააკავშირეთ ამ ჩამონათვალთან", + "list-delete-pop": "ყველა მოქმედება წაიშლება აქტივობების ველიდან და თქვენ ვეღარ შეძლებთ მის აღდგენას ჩამონათვალში", + "list-delete-suggest-archive": "თქვენ შეგიძლიათ გადაიტანოთ ჩამონათვალი სანაგვე ურნაში, იმისთვის, რომ წაშალოთ დაფიდან და შეინახოთ აქტივობა. ", "lists": "ჩამონათვალი", - "swimlanes": "Swimlanes", + "swimlanes": "ბილიკები", "log-out": "გამოსვლა", "log-in": "შესვლა", "loginPopup-title": "შესვლა", @@ -318,24 +318,24 @@ "moveCardToBottom-title": "ქვევით ჩამოწევა", "moveCardToTop-title": "ზევით აწევა", "moveSelectionPopup-title": "მონიშნულის მოძრაობა", - "multi-selection": "Multi-Selection", - "multi-selection-on": "Multi-Selection is on", + "multi-selection": "რამდენიმეს მონიშვნა", + "multi-selection-on": "რამდენიმეს მონიშვნა ჩართულია", "muted": "ხმა გათიშულია", - "muted-info": "You will never be notified of any changes in this board", + "muted-info": "თქვენ აღარ მიიღებთ შეტყობინებას ამ დაფაზე მიმდინარე ცვლილებების შესახებ. ", "my-boards": "ჩემი დაფები", "name": "სახელი", - "no-archived-cards": "No cards in Recycle Bin.", - "no-archived-lists": "No lists in Recycle Bin.", - "no-archived-swimlanes": "No swimlanes in Recycle Bin.", + "no-archived-cards": "სანაგვე ურნაში ბარათები არ მოიძებნა.", + "no-archived-lists": "სანაგვე ურნაში ჩამონათვალი არ მოიძებნა. ", + "no-archived-swimlanes": "სანაგვე ურნაში ბილიკები არ მოიძებნა.", "no-results": "შედეგის გარეშე", "normal": "ნორმალური", - "normal-desc": "Can view and edit cards. Can't change settings.", + "normal-desc": "შეუძლია ნახოს და შეასწოროს ბარათები. ამ პარამეტრების შეცვლა შეუძლებელია. ", "not-accepted-yet": "მოწვევა ჯერ არ დადასტურებულა", "notify-participate": "Receive updates to any cards you participate as creater or member", - "notify-watch": "Receive updates to any boards, lists, or cards you’re watching", + "notify-watch": "მიიღეთ განახლებები ყველა დაფაზე, ჩამონათვალზე ან ბარათებზე, რომელსაც თქვენ აკვირდებით", "optional": "არჩევითი", "or": "ან", - "page-maybe-private": "This page may be private. You may be able to view it by <a href='%s'>logging in</a>.", + "page-maybe-private": "ეს გვერდი შესაძლოა იყოს კერძო. თქვენ შეგეძლებათ მისი ნახვა <a href='%s'>logging in</a> მეშვეობით.", "page-not-found": "გვერდი არ მოიძებნა.", "password": "პაროლი", "paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)", @@ -344,12 +344,12 @@ "previewAttachedImagePopup-title": "წინასწარ ნახვა", "previewClipboardImagePopup-title": "წინასწარ ნახვა", "private": "კერძო", - "private-desc": "This board is private. Only people added to the board can view and edit it.", + "private-desc": "ეს არის კერძო დაფა. დაფაზე წვდომის, ნახვის და რედაქტირების უფლება აქვთ მხოლოდ მასზე დამატებულ წევრებს. ", "profile": "პროფილი", "public": "საჯარო", - "public-desc": "This board is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the board can edit.", + "public-desc": "ეს დაფა არის საჯარო. ის ხილვადია ყველასთვის და შესაძლოა გამოჩნდეს საძიებო სისტემებში. შესწორების უფლება აქვს მხოლოდ მასზე დამატებულ პირებს. ", "quick-access-description": "Star a board to add a shortcut in this bar.", - "remove-cover": "Remove Cover", + "remove-cover": "გარეკანის წაშლა", "remove-from-board": "დაფიდან წაშლა", "remove-label": "ნიშნის წაშლა", "listDeletePopup-title": "ნამდვილად გსურთ სიის წაშლა? ", @@ -363,25 +363,25 @@ "save": "დამახსოვრება", "search": "ძებნა", "search-cards": "Search from card titles and descriptions on this board", - "search-example": "Text to search for?", + "search-example": "საძიებო ტექსტი", "select-color": "ფერის მონიშვნა", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", - "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-assign-self": "Assign yourself to current card", - "shortcut-autocomplete-emoji": "Autocomplete emoji", - "shortcut-autocomplete-members": "Autocomplete members", + "setWipLimitPopup-title": "დააყენეთ WIP ლიმიტი", + "shortcut-assign-self": "მონიშნეთ საკუთარი თავი აღნიშნულ ბარათზე", + "shortcut-autocomplete-emoji": "emoji-ის ავტომატური შევსება", + "shortcut-autocomplete-members": "მომხმარებლების ავტომატური შევსება", "shortcut-clear-filters": "ყველა ფილტრის გასუფთავება", "shortcut-close-dialog": "დიალოგის დახურვა", "shortcut-filter-my-cards": "ჩემი ბარათების გაფილტვრა", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-sidebar": "Toggle Board Sidebar", - "show-cards-minimum-count": "Show cards count if list contains more than", - "sidebar-open": "Open Sidebar", - "sidebar-close": "Close Sidebar", + "show-cards-minimum-count": "აჩვენეთ ბარათების დათვლილი რაოდენობა თუ ჩამონათვალი შეიცავს უფრო მეტს ვიდრე ", + "sidebar-open": "გახსენით მცირე სტატია", + "sidebar-close": "დახურეთ მცირე სტატია", "signupPopup-title": "ანგარიშის შექმნა", "star-board-title": "Click to star this board. It will show up at top of your boards list.", - "starred-boards": "Starred Boards", + "starred-boards": "ვარსკვლავიანი დაფები", "starred-boards-description": "Starred boards show up at the top of your boards list.", "subscribe": "გამოწერა", "team": "ჯგუფი", @@ -394,18 +394,18 @@ "has-spenttime-cards": "Has spent time cards", "time": "დრო", "title": "სათაური", - "tracking": "Tracking", + "tracking": "მონიტორინგი", "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.", - "type": "Type", - "unassign-member": "Unassign member", - "unsaved-description": "You have an unsaved description.", - "unwatch": "Unwatch", + "type": "ტიპი", + "unassign-member": "არაუფლებამოსილი წევრი", + "unsaved-description": "თქვან გაქვთ დაუმახსოვრებელი აღწერა. ", + "unwatch": "ნახვის გამორთვა", "upload": "ატვირთვა", "upload-avatar": "სურათის ატვირთვა", "uploaded-avatar": "სურათი ატვირთულია", "username": "მომხმარებლის სახელი", "view-it": "ნახვა", - "warn-list-archived": "warning: this card is in an list at Recycle Bin", + "warn-list-archived": "გაფრთხილება: ეს ბარათი არის ჩამონათვალში სანაგვე ურნაში", "watch": "ნახვა", "watching": "ნახვის პროცესი", "watching-info": "You will be notified of any change in this board", @@ -413,8 +413,8 @@ "welcome-swimlane": "Milestone 1", "welcome-list1": "ბაზისური ", "welcome-list2": "Advanced", - "what-to-do": "What do you want to do?", - "wipLimitErrorPopup-title": "Invalid WIP Limit", + "what-to-do": "რისი გაკეთება გსურთ? ", + "wipLimitErrorPopup-title": "არასწორი WIP ლიმიტი", "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.", "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.", "admin-panel": "ადმინის პანელი", @@ -424,11 +424,11 @@ "disable-self-registration": "თვით რეგისტრაციის გამორთვა", "invite": "მოწვევა", "invite-people": "ხალხის მოწვევა", - "to-boards": "To board(s)", + "to-boards": "დაფა(ებ)ზე", "email-addresses": "ელ.ფოსტის მისამართები", "smtp-host-description": "The address of the SMTP server that handles your emails.", "smtp-port-description": "The port your SMTP server uses for outgoing emails.", - "smtp-tls-description": "Enable TLS support for SMTP server", + "smtp-tls-description": "ჩართეთ TLS მხარდაჭერა SMTP სერვერისთვის", "smtp-host": "SMTP Host", "smtp-port": "SMTP Port", "smtp-username": "მომხმარებლის სახელი", @@ -437,8 +437,8 @@ "send-from": "დან", "send-smtp-test": "გაუგზავნეთ სატესტო ელ.ფოსტა საკუთარ თავს", "invitation-code": "მოწვევის კოდი", - "email-invite-register-subject": "__inviter__ sent you an invitation", - "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.", + "email-invite-register-subject": "__inviter__ გამოგიგზავნათ მოწვევა", + "email-invite-register-text": "ძვირგასო __user__,\n\n__inviter__ გიწვევთ Wekan-ში თანამშრომლობისთვის.\n\nგთხოვთ მიყვეთ ქვემოთ მოცემულ ბმულს:\n__url__\n\nდა ჩაწეროთ თქვენი მოწვევის კოდი: __icode__\n\nმადლობა.", "email-smtp-test-subject": "SMTP Test Email From Wekan", "email-smtp-test-text": "თქვენ წარმატებით გააგზავნეთ ელ.ფოსტა.", "error-invitation-code-not-exist": "მსგავსი მოსაწვევი კოდი არ არსებობს", @@ -451,17 +451,17 @@ "Node_version": "Node version", "OS_Arch": "OS Arch", "OS_Cpus": "OS CPU Count", - "OS_Freemem": "OS Free Memory", + "OS_Freemem": "OS თავისუფალი მეხსიერება", "OS_Loadavg": "OS Load Average", - "OS_Platform": "OS Platform", - "OS_Release": "OS Release", - "OS_Totalmem": "OS Total Memory", - "OS_Type": "OS Type", + "OS_Platform": "OS პლატფორმა", + "OS_Release": "OS რელიზი", + "OS_Totalmem": "OS მთლიანი მეხსიერება", + "OS_Type": "OS ტიპი", "OS_Uptime": "OS Uptime", "hours": "საათები", "minutes": "წუთები", "seconds": "წამები", - "show-field-on-card": "Show this field on card", + "show-field-on-card": "აჩვენეთ ეს ველი ბარათზე", "yes": "დიახ", "no": "არა", "accounts": "ანგარიშები", @@ -475,19 +475,19 @@ "card-end": "დასასრული", "card-end-on": "დასრულდება : ", "editCardReceivedDatePopup-title": "Change received date", - "editCardEndDatePopup-title": "Change end date", - "assigned-by": "Assigned By", + "editCardEndDatePopup-title": "შეცვალეთ საბოლოო თარიღი", + "assigned-by": "უფლებამოსილების გამცემი ", "requested-by": "მომთხოვნი", - "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.", - "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.", + "board-delete-notice": "წაშლის შემთხვევაში თქვენ დაკარგავთ ამ დაფასთან ასოცირებულ ყველა მონაცემს მათ შორის : ჩამონათვალს, ბარათებს და მოქმედებებს. ", + "delete-board-confirm-popup": "ყველა ჩამონათვალი, ბარათი, ნიშანი და აქტივობა წაიშლება და თქვენ ვეღარ შეძლებთ მის აღდგენას. ", "boardDeletePopup-title": "წავშალოთ დაფა? ", "delete-board": "დაფის წაშლა", - "default-subtasks-board": "Subtasks for __board__ board", + "default-subtasks-board": "ქვესაქმიანობა __board__ დაფისთვის", "default": "Default", "queue": "რიგი", "subtask-settings": "ქვესაქმიანობების პარამეტრები", "boardSubtaskSettingsPopup-title": "Board Subtasks Settings", - "show-subtasks-field": "Cards can have subtasks", + "show-subtasks-field": "ბარათებს შესაძლოა ჰქონდეს ქვესაქმიანობები", "deposit-subtasks-board": "Deposit subtasks to this board:", "deposit-subtasks-list": "Landing list for subtasks deposited here:", "show-parent-in-minicard": "Show parent in minicard:", @@ -497,6 +497,6 @@ "subtext-with-parent": "Subtext with parent", "change-card-parent": "Change card's parent", "parent-card": "Parent card", - "source-board": "Source board", + "source-board": "ძირითადი დაფა", "no-parent": "Don't show parent" }
\ No newline at end of file diff --git a/i18n/pt-BR.i18n.json b/i18n/pt-BR.i18n.json index 6135ae54..82bdf952 100644 --- a/i18n/pt-BR.i18n.json +++ b/i18n/pt-BR.i18n.json @@ -2,7 +2,7 @@ "accept": "Aceitar", "act-activity-notify": "[Wekan] Notificação de Atividade", "act-addAttachment": "anexo __attachment__ de __card__", - "act-addSubtask": "added subtask __checklist__ to __card__", + "act-addSubtask": "Subtarefa adicionada__checklist__ao__cartão", "act-addChecklist": "added checklist __checklist__ no __card__", "act-addChecklistItem": "adicionado __checklistitem__ para a lista de checagem __checklist__ em __card__", "act-addComment": "comentou em __card__: __comment__", @@ -42,7 +42,7 @@ "activity-removed": "removeu %s de %s", "activity-sent": "enviou %s de %s", "activity-unjoined": "saiu de %s", - "activity-subtask-added": "added subtask to %s", + "activity-subtask-added": "Adcionar subtarefa à", "activity-checklist-added": "Adicionado lista de verificação a %s", "activity-checklist-item-added": "adicionado o item de checklist para '%s' em %s", "add": "Novo", @@ -50,7 +50,7 @@ "add-board": "Adicionar Quadro", "add-card": "Adicionar Cartão", "add-swimlane": "Adicionar Swimlane", - "add-subtask": "Add Subtask", + "add-subtask": "Adicionar subtarefa", "add-checklist": "Adicionar Checklist", "add-checklist-item": "Adicionar um item à lista de verificação", "add-cover": "Adicionar Capa", @@ -103,7 +103,7 @@ "boardMenuPopup-title": "Menu do Quadro", "boards": "Quadros", "board-view": "Visão de quadro", - "board-view-cal": "Calendar", + "board-view-cal": "Calendário", "board-view-swimlanes": "Swimlanes", "board-view-lists": "Listas", "bucket-example": "\"Bucket List\", por exemplo", @@ -134,7 +134,7 @@ "cardMorePopup-title": "Mais", "cards": "Cartões", "cards-count": "Cartões", - "casSignIn": "Sign In with CAS", + "casSignIn": "Entrar com CAS", "change": "Alterar", "change-avatar": "Alterar Avatar", "change-password": "Alterar Senha", @@ -145,7 +145,7 @@ "changePasswordPopup-title": "Alterar Senha", "changePermissionsPopup-title": "Alterar Permissões", "changeSettingsPopup-title": "Altera configurações", - "subtasks": "Subtasks", + "subtasks": "Subtarefas", "checklists": "Checklists", "click-to-star": "Marcar quadro como favorito.", "click-to-unstar": "Remover quadro dos favoritos.", @@ -168,8 +168,8 @@ "comment-only": "Somente comentários", "comment-only-desc": "Pode comentar apenas em cartões.", "computer": "Computador", - "confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?", - "confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?", + "confirm-subtask-delete-dialog": "Tem certeza que deseja deletar a subtarefa?", + "confirm-checklist-delete-dialog": "Tem certeza que quer deletar o checklist?", "copy-card-link-to-clipboard": "Copiar link do cartão para a área de transferência", "copyCardPopup-title": "Copiar o cartão", "copyChecklistToManyCardsPopup-title": "Copiar modelo de checklist para vários cartões", @@ -254,7 +254,7 @@ "filter-on-desc": "Você está filtrando cartões neste quadro. Clique aqui para editar o filtro.", "filter-to-selection": "Filtrar esta seleção", "advanced-filter-label": "Filtro avançado", - "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", + "advanced-filter-description": "Filtros avançados permitem escrever uma \"string\" contendo os seguintes operadores: == != <= >= && || (). Um espaco é utilizado como separador entre os operadores. Você pode filtrar para todos os campos personalizados escrevendo os nomes e valores. Exemplo: Campo1 == Valor1. Nota^Se o campo ou valor tiver espaços você precisa encapsular eles em citações sozinhas. Exemplo: Campo1 == Eu\\sou. Também você pode combinar múltiplas condições. Exemplo: C1 == V1 || C1 == V2. Normalmente todos os operadores são interpretados da esquerda para direita. Você pode alterar a ordem colocando parênteses - como ma expressão matemática. Exemplo: C1 == V1 && (C2 == V2 || C2 == V3). Você tamb~em pode pesquisar campos de texto usando regex: C1 == /Tes.*/i", "fullname": "Nome Completo", "header-logo-title": "Voltar para a lista de quadros.", "hide-system-messages": "Esconde mensagens de sistema", @@ -476,27 +476,27 @@ "card-end-on": "Termina em", "editCardReceivedDatePopup-title": "Modificar data de recebimento", "editCardEndDatePopup-title": "Mudar data de fim", - "assigned-by": "Assigned By", - "requested-by": "Requested By", - "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.", - "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.", - "boardDeletePopup-title": "Delete Board?", - "delete-board": "Delete Board", - "default-subtasks-board": "Subtasks for __board__ board", - "default": "Default", - "queue": "Queue", - "subtask-settings": "Subtasks Settings", - "boardSubtaskSettingsPopup-title": "Board Subtasks Settings", - "show-subtasks-field": "Cards can have subtasks", - "deposit-subtasks-board": "Deposit subtasks to this board:", - "deposit-subtasks-list": "Landing list for subtasks deposited here:", - "show-parent-in-minicard": "Show parent in minicard:", - "prefix-with-full-path": "Prefix with full path", - "prefix-with-parent": "Prefix with parent", - "subtext-with-full-path": "Subtext with full path", - "subtext-with-parent": "Subtext with parent", - "change-card-parent": "Change card's parent", - "parent-card": "Parent card", - "source-board": "Source board", - "no-parent": "Don't show parent" + "assigned-by": "Atribuído por", + "requested-by": "Solicitado por", + "board-delete-notice": "Deletar é permanente. Você perderá todas as listas, cartões e ações associados nesse painel.", + "delete-board-confirm-popup": "Todas as listas, cartões, etiquetas e atividades serão deletadas e você não poderá recuperar o conteúdo do painel. Não há como desfazer.", + "boardDeletePopup-title": "Deletar painel?", + "delete-board": "Deletar painel", + "default-subtasks-board": "Subtarefas para __painel__ painel", + "default": "Padrão", + "queue": "Fila", + "subtask-settings": "Configurações de subtarefas", + "boardSubtaskSettingsPopup-title": "Configurações das subtarefas do painel", + "show-subtasks-field": "Cartões podem ter subtarefas", + "deposit-subtasks-board": "Inserir subtarefas à este painel:", + "deposit-subtasks-list": "Listas de subtarefas inseridas aqui:", + "show-parent-in-minicard": "Mostrar Pai do mini cartão:", + "prefix-with-full-path": "Prefixo com caminho completo", + "prefix-with-parent": "Prefixo com Pai", + "subtext-with-full-path": "Subtexto com caminho completo", + "subtext-with-parent": "Subtexto com Pai", + "change-card-parent": "Mudar Pai do cartão", + "parent-card": "Pai do cartão", + "source-board": "Painel de fonte", + "no-parent": "Não mostrar Pai" }
\ No newline at end of file diff --git a/i18n/sv.i18n.json b/i18n/sv.i18n.json index dd9f365b..b0d50237 100644 --- a/i18n/sv.i18n.json +++ b/i18n/sv.i18n.json @@ -2,7 +2,7 @@ "accept": "Acceptera", "act-activity-notify": "[Wekan] Aktivitetsavisering", "act-addAttachment": "bifogade __attachment__ to __card__", - "act-addSubtask": "added subtask __checklist__ to __card__", + "act-addSubtask": "lade till deluppgift __checklist__ till __card__", "act-addChecklist": "lade till checklist __checklist__ till __card__", "act-addChecklistItem": "lade till __checklistItem__ till checklistan __checklist__ on __card__", "act-addComment": "kommenterade __card__: __comment__", @@ -42,7 +42,7 @@ "activity-removed": "tog bort %s från %s", "activity-sent": "skickade %s till %s", "activity-unjoined": "gick ur %s", - "activity-subtask-added": "added subtask to %s", + "activity-subtask-added": "lade till deluppgift till %s", "activity-checklist-added": "lade kontrollista till %s", "activity-checklist-item-added": "lade checklista objekt till '%s' i %s", "add": "Lägg till", @@ -50,7 +50,7 @@ "add-board": "Lägg till anslagstavla", "add-card": "Lägg till kort", "add-swimlane": "Lägg till simbana", - "add-subtask": "Add Subtask", + "add-subtask": "Lägg till deluppgift", "add-checklist": "Lägg till checklista", "add-checklist-item": "Lägg till ett objekt till kontrollista", "add-cover": "Lägg till omslag", @@ -486,9 +486,9 @@ "default": "Standard", "queue": "Kö", "subtask-settings": "Deluppgift inställningar", - "boardSubtaskSettingsPopup-title": "Board Subtasks Settings", + "boardSubtaskSettingsPopup-title": "Deluppgiftsinställningar för anslagstavla", "show-subtasks-field": "Kort kan ha deluppgifter", - "deposit-subtasks-board": "Deposit subtasks to this board:", + "deposit-subtasks-board": "Insättnings deluppgifter på denna anslagstavla:", "deposit-subtasks-list": "Landing list for subtasks deposited here:", "show-parent-in-minicard": "Show parent in minicard:", "prefix-with-full-path": "Prefix with full path", diff --git a/i18n/zh-CN.i18n.json b/i18n/zh-CN.i18n.json index bbc060fb..f8e3821f 100644 --- a/i18n/zh-CN.i18n.json +++ b/i18n/zh-CN.i18n.json @@ -2,7 +2,7 @@ "accept": "接受", "act-activity-notify": "[Wekan] 活动通知", "act-addAttachment": "添加附件 __attachment__ 至卡片 __card__", - "act-addSubtask": "added subtask __checklist__ to __card__", + "act-addSubtask": "添加清单 __checklist__ 到__card__", "act-addChecklist": "添加清单 __checklist__ 到 __card__", "act-addChecklistItem": "向 __card__ 中的清单 __checklist__ 添加 __checklistItem__", "act-addComment": "在 __card__ 发布评论: __comment__", @@ -42,7 +42,7 @@ "activity-removed": "从 %s 中移除 %s", "activity-sent": "发送 %s 至 %s", "activity-unjoined": "已解除 %s 关联", - "activity-subtask-added": "added subtask to %s", + "activity-subtask-added": "添加子任务到%s", "activity-checklist-added": "已经将清单添加到 %s", "activity-checklist-item-added": "添加清单项至'%s' 于 %s", "add": "添加", @@ -50,7 +50,7 @@ "add-board": "添加看板", "add-card": "添加卡片", "add-swimlane": "添加泳道图", - "add-subtask": "Add Subtask", + "add-subtask": "添加子任务", "add-checklist": "添加待办清单", "add-checklist-item": "扩充清单", "add-cover": "添加封面", @@ -103,7 +103,7 @@ "boardMenuPopup-title": "看板菜单", "boards": "看板", "board-view": "看板视图", - "board-view-cal": "Calendar", + "board-view-cal": "日历", "board-view-swimlanes": "泳道图", "board-view-lists": "列表", "bucket-example": "例如 “目标清单”", @@ -134,7 +134,7 @@ "cardMorePopup-title": "更多", "cards": "卡片", "cards-count": "卡片", - "casSignIn": "Sign In with CAS", + "casSignIn": "用CAS登录", "change": "变更", "change-avatar": "更改头像", "change-password": "更改密码", @@ -145,7 +145,7 @@ "changePasswordPopup-title": "更改密码", "changePermissionsPopup-title": "更改权限", "changeSettingsPopup-title": "更改设置", - "subtasks": "Subtasks", + "subtasks": "子任务", "checklists": "清单", "click-to-star": "点此来标记该看板", "click-to-unstar": "点此来去除该看板的标记", @@ -168,8 +168,8 @@ "comment-only": "仅能评论", "comment-only-desc": "只能在卡片上评论。", "computer": "从本机上传", - "confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?", - "confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?", + "confirm-subtask-delete-dialog": "确定要删除子任务吗?", + "confirm-checklist-delete-dialog": "确定要删除清单吗?", "copy-card-link-to-clipboard": "复制卡片链接到剪贴板", "copyCardPopup-title": "复制卡片", "copyChecklistToManyCardsPopup-title": "复制清单模板至多个卡片", @@ -200,8 +200,8 @@ "deleteCustomFieldPopup-title": "删除自定义字段?", "deleteLabelPopup-title": "删除标签?", "description": "描述", - "disambiguateMultiLabelPopup-title": "标签消歧 [?]", - "disambiguateMultiMemberPopup-title": "成员消歧 [?]", + "disambiguateMultiLabelPopup-title": "消除标签歧义", + "disambiguateMultiMemberPopup-title": "消除成员歧义", "discard": "放弃", "done": "完成", "download": "下载", @@ -209,7 +209,7 @@ "edit-avatar": "更改头像", "edit-profile": "编辑资料", "edit-wip-limit": "编辑最大任务数", - "soft-wip-limit": "软在制品限制", + "soft-wip-limit": "最大任务数软限制", "editCardStartDatePopup-title": "修改起始日期", "editCardDueDatePopup-title": "修改截止日期", "editCustomFieldPopup-title": "编辑字段", @@ -482,21 +482,21 @@ "delete-board-confirm-popup": "所有列表、卡片、标签和活动都回被删除,将无法恢复看板内容。不支持撤销。", "boardDeletePopup-title": "删除看板?", "delete-board": "删除看板", - "default-subtasks-board": "Subtasks for __board__ board", - "default": "Default", - "queue": "Queue", - "subtask-settings": "Subtasks Settings", - "boardSubtaskSettingsPopup-title": "Board Subtasks Settings", - "show-subtasks-field": "Cards can have subtasks", - "deposit-subtasks-board": "Deposit subtasks to this board:", - "deposit-subtasks-list": "Landing list for subtasks deposited here:", - "show-parent-in-minicard": "Show parent in minicard:", - "prefix-with-full-path": "Prefix with full path", - "prefix-with-parent": "Prefix with parent", - "subtext-with-full-path": "Subtext with full path", - "subtext-with-parent": "Subtext with parent", - "change-card-parent": "Change card's parent", - "parent-card": "Parent card", - "source-board": "Source board", - "no-parent": "Don't show parent" + "default-subtasks-board": "__board__ 看板的子任务", + "default": "缺省", + "queue": "队列", + "subtask-settings": "子任务设置", + "boardSubtaskSettingsPopup-title": "看板子任务设置", + "show-subtasks-field": "卡片包含子任务", + "deposit-subtasks-board": "将子任务放入以下看板:", + "deposit-subtasks-list": "将子任务放入以下列表:", + "show-parent-in-minicard": "显示上一级卡片:", + "prefix-with-full-path": "完整路径前缀", + "prefix-with-parent": "上级前缀", + "subtext-with-full-path": "子标题显示完整路径", + "subtext-with-parent": "子标题显示上级", + "change-card-parent": "修改卡片的上级", + "parent-card": "上级卡片", + "source-board": "源看板", + "no-parent": "不显示上级" }
\ No newline at end of file diff --git a/models/settings.js b/models/settings.js index 308d867d..3b9b4eae 100644 --- a/models/settings.js +++ b/models/settings.js @@ -96,6 +96,14 @@ if (Meteor.isServer) { return (min + Math.round(rand * range)); } + function getEnvVar(name){ + const value = process.env[name]; + if (value){ + return value; + } + throw new Meteor.Error(['var-not-exist', `The environment variable ${name} does not exist`]); + } + function sendInvitationEmail (_id){ const icode = InvitationCodes.findOne(_id); const author = Users.findOne(Meteor.userId()); @@ -180,5 +188,14 @@ if (Meteor.isServer) { email: user.emails[0].address, }; }, + + getMatomoConf(){ + return { + address: getEnvVar('MATOMO_ADDRESS'), + siteId: getEnvVar('MATOMO_SITE_ID'), + doNotTrack: process.env.MATOMO_DO_NOT_TRACK || false, + withUserName: process.env.MATOMO_WITH_USERNAME || false, + }; + }, }); } diff --git a/models/users.js b/models/users.js index 9d859664..9b070c43 100644 --- a/models/users.js +++ b/models/users.js @@ -622,9 +622,20 @@ if (Meteor.isServer) { }); } - // USERS REST API if (Meteor.isServer) { + // Middleware which checks that API is enabled. + JsonRoutes.Middleware.use(function (req, res, next) { + const api = req.url.search('api'); + if (api === 1 && process.env.WITH_API === 'true' || api === -1){ + return next(); + } + else { + res.writeHead(301, {Location: '/'}); + return res.end(); + } + }); + JsonRoutes.add('GET', '/api/user', function(req, res) { try { Authentication.checkLoggedIn(req.userId); diff --git a/package.json b/package.json index afc3c419..48561127 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "1.21.0", + "version": "1.22.0", "description": "The open-source Trello-like kanban", "private": true, "scripts": { @@ -28,6 +28,8 @@ "es6-promise": "^4.2.4", "meteor-node-stubs": "^0.4.1", "os": "^0.1.1", - "xss": "^0.3.8" + "page": "^1.8.6", + "qs": "^6.5.2", + "xss": "^1.0.3" } } diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp index 32867885..48e228b9 100644 --- a/sandstorm-pkgdef.capnp +++ b/sandstorm-pkgdef.capnp @@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = ( appTitle = (defaultText = "Wekan"), # The name of the app as it is displayed to the user. - appVersion = 106, + appVersion = 107, # Increment this for every release. - appMarketingVersion = (defaultText = "1.21.0~2018-07-18"), + appMarketingVersion = (defaultText = "1.22.0~2018-07-30"), # Human-readable presentation of the app version. minUpgradableAppVersion = 0, diff --git a/server/policy.js b/server/policy.js new file mode 100644 index 00000000..17c90c1c --- /dev/null +++ b/server/policy.js @@ -0,0 +1,9 @@ +import { BrowserPolicy } from 'meteor/browser-policy-common'; + +Meteor.startup(() => { + const matomoUrl = process.env.MATOMO_ADDRESS; + if (matomoUrl){ + BrowserPolicy.content.allowScriptOrigin(matomoUrl); + BrowserPolicy.content.allowImageOrigin(matomoUrl); + } +}); diff --git a/snap-src/bin/config b/snap-src/bin/config index 813c3d3f..46fa2c3f 100755 --- a/snap-src/bin/config +++ b/snap-src/bin/config @@ -3,7 +3,7 @@ # All supported keys are defined here together with descriptions and default values # list of supported keys -keys="MONGODB_BIND_UNIX_SOCKET MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT" +keys="MONGODB_BIND_UNIX_SOCKET MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME" # default values DESCRIPTION_MONGODB_BIND_UNIX_SOCKET="mongodb binding unix socket:\n"\ @@ -47,3 +47,21 @@ KEY_CADDY_ENABLED="caddy-enabled" DESCRIPTION_CADDY_BIND_PORT="Port on which caddy will expect proxy, value set here will be set in $SNAP_COMMON/Caddyfile" DEFAULT_CADDY_BIND_PORT="3001" KEY_CADDY_BIND_PORT="caddy-bind-port" + +DESCRIPTION_WITH_API="Enable/disable the api of wekan" +DEFAULT_WITH_API="false" +KEY_WITH_API="with-api" + +DESCRIPTION_MATOMO_ADDRESS="The address of the server where matomo is hosted" +KEY_MATOMO_ADDRESS="matomo-address" + +DESCRIPTION_MATOMO_SITE_ID="The value of the site ID given in matomo server for wekan" +KEY_MATOMO_SITE_ID="matomo-site-id" + +DESCRIPTION_MATOMO_DO_NOT_TRACK="The option do not track which enables users to not be tracked by matomo" +DEFAULT_CADDY_BIND_PORT="false" +KEY_MATOMO_DO_NOT_TRACK="matomo-do-not-track" + +DESCRIPTION_MATOMO_WITH_USERNAME="The option that allows matomo to retrieve the username" +DEFAULT_CADDY_BIND_PORT="false" +KEY_MATOMO_WITH_USERNAME="matomo-with-username" diff --git a/snap-src/bin/wekan-help b/snap-src/bin/wekan-help index ee565500..5c3f9b31 100755 --- a/snap-src/bin/wekan-help +++ b/snap-src/bin/wekan-help @@ -28,6 +28,10 @@ echo -e "\t\t-connect mongodb-plug with slot from snap providing mongodb" echo -e "\t\t-disable mongodb in $SNAP_NAME by calling: $ snap set $SNAP_NAME set disable-mongodb='true'" echo -e "\t\t-set mongodb-bind-unix-socket to point to serving mongodb. Use relative path inside shared directory, e.g run/mongodb-27017.sock" echo -e "\n" +echo -e "To enable the API of wekan:" +echo -e "\t$ snap set $SNAP_NAME WITH_API='true'" +echo -e "\t-Disable the API:" +echo -e "\t$ snap set $SNAP_NAME WITH_API='false'" # parse config file for supported settings keys echo -e "wekan supports settings keys" echo -e "values can be changed by calling\n$ snap set $SNAP_NAME <key name>='<key value>'" |