diff options
author | Lauri Ojansivu <x@xet7.org> | 2018-03-17 09:36:51 +0200 |
---|---|---|
committer | Lauri Ojansivu <x@xet7.org> | 2018-03-17 09:36:51 +0200 |
commit | fa0fd5f21f8b34e959c93ece068be6315eecf8d4 (patch) | |
tree | f9775e82095f8c27e511acdcc2937537d3b958c0 | |
parent | dfc55371072bcd877f49d043dc65c3f2ef76c651 (diff) | |
parent | 83848dbee2e6e283e33667cfa9649aafc7c07f4e (diff) | |
download | wekan-fa0fd5f21f8b34e959c93ece068be6315eecf8d4.tar.gz wekan-fa0fd5f21f8b34e959c93ece068be6315eecf8d4.tar.bz2 wekan-fa0fd5f21f8b34e959c93ece068be6315eecf8d4.zip |
Merge branch 'devel'
-rw-r--r-- | CHANGELOG.md | 11 | ||||
-rw-r--r-- | client/components/boards/boardBody.js | 103 | ||||
-rw-r--r-- | client/components/cards/cardDetails.js | 2 | ||||
-rw-r--r-- | client/components/import/import.jade | 19 | ||||
-rw-r--r-- | client/components/lists/list.js | 74 | ||||
-rw-r--r-- | client/components/swimlanes/swimlanes.jade | 2 | ||||
-rw-r--r-- | client/components/swimlanes/swimlanes.js | 76 | ||||
-rw-r--r-- | client/components/swimlanes/swimlanes.styl | 3 | ||||
-rw-r--r-- | docker-compose.yml | 2 | ||||
-rw-r--r-- | i18n/bg.i18n.json | 118 | ||||
-rw-r--r-- | i18n/hy.i18n.json | 439 | ||||
-rw-r--r-- | i18n/it.i18n.json | 32 | ||||
-rw-r--r-- | i18n/mn.i18n.json | 20 | ||||
-rw-r--r-- | models/activities.js | 3 | ||||
-rw-r--r-- | package.json | 2 | ||||
-rw-r--r-- | sandstorm-pkgdef.capnp | 4 | ||||
-rw-r--r-- | sandstorm.js | 4 | ||||
-rw-r--r-- | snapcraft.yaml | 2 |
18 files changed, 689 insertions, 227 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f360351..7883cfa3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,12 @@ -# Upcoming Wekan release +# v0.78 2018-03-17 Wekan release This release adds the following new features: - [Allow swimlanes reordering](https://github.com/wekan/wekan/commit/37c94622e476f50bf2387bc8b140454d66200e78); - [Import missing card fields: isOvertime, startAt and spentTime](https://github.com/wekan/wekan/commit/b475127c53031fa498da139a7d16f3e54d43b90d); -- [Lists view is the default view when creating boards](https://github.com/wekan/wekan/commit/1ca9e96f35389c0eec2290e8e1207801ee25f907). +- [Lists view is the default view when creating boards](https://github.com/wekan/wekan/commit/1ca9e96f35389c0eec2290e8e1207801ee25f907); +- [Enabled import at Sandtorm. Keep there big DANGER warning about data loss bug.](https://github.com/wekan/wekan/commit/22923d08af4f1a63ded1d92fe6918436b598592b); +- [Add language: Armenian](https://github.com/wekan/wekan/commit/75693d16e2a0f3d201c1036ab06e6d40eb1c0adc). and fixes the following bugs: @@ -24,6 +26,11 @@ and fixes the following bugs: - [Fix swimlane header rotation on Google Chrome. After this change both Firefox 58 and Google Chrome 64 have properly rotated swimlane header.](https://github.com/wekan/wekan/commit/9a1b1a5bedbe44827de109731a3c3b1a07790d3e); - [Fix card copy and move with swimlanes](https://github.com/wekan/wekan/commit/4b53b0c90a57593c0fe2d808d2298e85f488bfa9). +- [Fix scroll board when opening cardDetails](https://github.com/wekan/wekan/commit/454523dd4744b2bccb6805dad59abd664fdacb31); +- [Fix swimlane info not displayed in activities](https://github.com/wekan/wekan/commit/bb37d8fa964c0d03721a664387e74300fde09eef); +- [Fix sandstorm default swimlane creation](https://github.com/wekan/wekan/commit/f470323ee746c4e79f07d166d511867408194eb6); +- [Extend lists to bottom of frame in lists view](https://github.com/wekan/wekan/commit/c62a2ee11febf7f98456c97dc3973509b4bfe119); +- [Fix drag and drop issues when re-enter board](https://github.com/wekan/wekan/commit/5b0f7f8aef115b202aaff6bc25bb514426dc2009). Thanks to GitHub users andresmanelli, GhassenRjab, kubiko, lumatijev, lunatic4ever and xet7 for their contributions. diff --git a/client/components/boards/boardBody.js b/client/components/boards/boardBody.js index 94f9af39..aa7b6a75 100644 --- a/client/components/boards/boardBody.js +++ b/client/components/boards/boardBody.js @@ -1,12 +1,8 @@ const subManager = new SubsManager(); +const { calculateIndex } = Utils; BlazeComponent.extendComponent({ - openNewListForm() { - this.childComponents('addListForm')[0].open(); - }, onCreated() { - this.draggingActive = new ReactiveVar(false); - this.showOverlay = new ReactiveVar(false); this.isBoardReady = new ReactiveVar(false); // The pattern we use to manually handle data loading is described here: @@ -24,30 +20,70 @@ BlazeComponent.extendComponent({ }); }); }); + }, - this._isDragging = false; - this._lastDragPositionX = 0; + onlyShowCurrentCard() { + return Utils.isMiniScreen() && Session.get('currentCard'); + }, + +}).register('board'); +BlazeComponent.extendComponent({ + onCreated() { + this.showOverlay = new ReactiveVar(false); + this.draggingActive = new ReactiveVar(false); + this._isDragging = false; // Used to set the overlay this.mouseHasEnterCardDetails = false; }, + onRendered() { + const boardComponent = this; + const $swimlanesDom = boardComponent.$('.js-swimlanes'); - // XXX Flow components allow us to avoid creating these two setter methods by - // exposing a public API to modify the component state. We need to investigate - // best practices here. - setIsDragging(bool) { - this.draggingActive.set(bool); - }, + $swimlanesDom.sortable({ + tolerance: 'pointer', + appendTo: '.board-canvas', + helper: 'clone', + handle: '.js-swimlane-header', + items: '.js-swimlane:not(.placeholder)', + placeholder: 'swimlane placeholder', + distance: 7, + start(evt, ui) { + ui.placeholder.height(ui.helper.height()); + EscapeActions.executeUpTo('popup-close'); + boardComponent.setIsDragging(true); + }, + stop(evt, ui) { + // To attribute the new index number, we need to get the DOM element + // of the previous and the following card -- if any. + const prevSwimlaneDom = ui.item.prev('.js-swimlane').get(0); + const nextSwimlaneDom = ui.item.next('.js-swimlane').get(0); + const sortIndex = calculateIndex(prevSwimlaneDom, nextSwimlaneDom, 1); - scrollLeft(position = 0) { - const lists = this.$('.js-lists'); - lists && lists.animate({ - scrollLeft: position, + $swimlanesDom.sortable('cancel'); + const swimlaneDomElement = ui.item.get(0); + const swimlane = Blaze.getData(swimlaneDomElement); + + Swimlanes.update(swimlane._id, { + $set: { + sort: sortIndex.base, + }, + }); + + boardComponent.setIsDragging(false); + }, }); - }, - onlyShowCurrentCard() { - return Utils.isMiniScreen() && Session.get('currentCard'); + function userIsMember() { + return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly(); + } + + // If there is no data in the board (ie, no lists) we autofocus the list + // creation form by clicking on the corresponding element. + const currentBoard = Boards.findOne(Session.get('currentBoard')); + if (userIsMember() && currentBoard.lists().count() === 0) { + boardComponent.openNewListForm(); + } }, isViewSwimlanes() { @@ -62,6 +98,16 @@ BlazeComponent.extendComponent({ return (board.view === 'board-view-lists'); }, + openNewListForm() { + if (this.isViewSwimlanes()) { + this.childComponents('swimlane')[0] + .childComponents('addListAndSwimlaneForm')[0].open(); + } else if (this.isViewLists()) { + this.childComponents('listsGroup')[0] + .childComponents('addListForm')[0].open(); + } + }, + events() { return [{ // XXX The board-overlay div should probably be moved to the parent @@ -78,4 +124,19 @@ BlazeComponent.extendComponent({ }, }]; }, -}).register('board'); + + // XXX Flow components allow us to avoid creating these two setter methods by + // exposing a public API to modify the component state. We need to investigate + // best practices here. + setIsDragging(bool) { + this.draggingActive.set(bool); + }, + + scrollLeft(position = 0) { + const swimlanes = this.$('.js-swimlanes'); + swimlanes && swimlanes.animate({ + scrollLeft: position, + }); + }, + +}).register('boardBody'); diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js index 701bcd1b..ab8a6288 100644 --- a/client/components/cards/cardDetails.js +++ b/client/components/cards/cardDetails.js @@ -44,8 +44,8 @@ BlazeComponent.extendComponent({ const cardPanelWidth = 510; const bodyBoardComponent = this.parentComponent().parentComponent(); - const $cardContainer = bodyBoardComponent.$('.js-lists'); const $cardView = this.$(this.firstNode()); + const $cardContainer = bodyBoardComponent.$('.js-swimlanes'); const cardContainerScroll = $cardContainer.scrollLeft(); const cardContainerWidth = $cardContainer.width(); diff --git a/client/components/import/import.jade b/client/components/import/import.jade index c6dc1bef..a1fbd83b 100644 --- a/client/components/import/import.jade +++ b/client/components/import/import.jade @@ -11,17 +11,14 @@ template(name="import") +Template.dynamic(template=currentTemplate) template(name="importTextarea") - unless isSandstorm - form - p: label(for='import-textarea') {{_ instruction}} - textarea.js-import-json(placeholder="{{_ 'import-json-placeholder'}}" autofocus) - | {{jsonText}} - if isSandstorm - p.warning {{_ 'import-sandstorm-warning'}} - input.primary.wide(type="submit" value="{{_ 'import'}}") - if isSandstorm - p.warning 'Import disabled because of data loss bug https://github.com/wekan/wekan/issues/1430' - + form + p: label(for='import-textarea') {{_ instruction}} + textarea.js-import-json(placeholder="{{_ 'import-json-placeholder'}}" autofocus) + | {{jsonText}} + if isSandstorm + h1.warning DANGER !!! THIS DESTROYS YOUR IMPORTED DATA, CAUSES BOARD NOT FOUND ERROR WHEN YOU OPEN THIS GRAIN AGAIN https://github.com/wekan/wekan/issues/1430 + p.warning {{_ 'import-sandstorm-warning'}} + input.primary.wide(type="submit" value="{{_ 'import'}}") template(name="importMapMembers") h2 {{_ 'import-map-members'}} diff --git a/client/components/lists/list.js b/client/components/lists/list.js index 081b1e50..38a87674 100644 --- a/client/components/lists/list.js +++ b/client/components/lists/list.js @@ -19,85 +19,11 @@ BlazeComponent.extendComponent({ // comment below provides further details. onRendered() { const boardComponent = this.parentComponent().parentComponent(); - const $listsDom = boardComponent.$('.js-lists'); - - if (!Session.get('currentCard')) { - boardComponent.scrollLeft(); - } - - // We want to animate the card details window closing. We rely on CSS - // transition for the actual animation. - $listsDom._uihooks = { - removeElement(node) { - const removeNode = _.once(() => { - node.parentNode.removeChild(node); - }); - if ($(node).hasClass('js-card-details')) { - $(node).css({ - flexBasis: 0, - padding: 0, - }); - $listsDom.one(CSSEvents.transitionend, removeNode); - } else { - removeNode(); - } - }, - }; - - $listsDom.sortable({ - tolerance: 'pointer', - helper: 'clone', - handle: '.js-list-header', - items: '.js-list:not(.js-list-composer)', - placeholder: 'list placeholder', - distance: 7, - start(evt, ui) { - ui.placeholder.height(ui.helper.height()); - EscapeActions.executeUpTo('popup-close'); - boardComponent.setIsDragging(true); - }, - stop(evt, ui) { - // To attribute the new index number, we need to get the DOM element - // of the previous and the following card -- if any. - const prevListDom = ui.item.prev('.js-list').get(0); - const nextListDom = ui.item.next('.js-list').get(0); - const sortIndex = calculateIndex(prevListDom, nextListDom, 1); - - $listsDom.sortable('cancel'); - const listDomElement = ui.item.get(0); - const list = Blaze.getData(listDomElement); - - Lists.update(list._id, { - $set: { - sort: sortIndex.base, - }, - }); - - boardComponent.setIsDragging(false); - }, - }); function userIsMember() { return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly(); } - // Disable drag-dropping while in multi-selection mode, or if the current user - // is not a board member - boardComponent.autorun(() => { - const $listDom = $listsDom; - if ($listDom.data('sortable')) { - $listsDom.sortable('option', 'disabled', - MultiSelection.isActive() || !userIsMember()); - } - }); - - // If there is no data in the board (ie, no lists) we autofocus the list - // creation form by clicking on the corresponding element. - const currentBoard = Boards.findOne(Session.get('currentBoard')); - if (userIsMember() && currentBoard.lists().count() === 0) { - boardComponent.openNewListForm(); - } - const itemsSelector = '.js-minicard:not(.placeholder, .js-card-composer)'; const $cards = this.$('.js-minicards'); $cards.sortable({ diff --git a/client/components/swimlanes/swimlanes.jade b/client/components/swimlanes/swimlanes.jade index 0c3fc5de..76f54c66 100644 --- a/client/components/swimlanes/swimlanes.jade +++ b/client/components/swimlanes/swimlanes.jade @@ -18,7 +18,7 @@ template(name="swimlane") +addListAndSwimlaneForm template(name="listsGroup") - .swimlane.js-lists + .swimlane.list-group.js-lists if isMiniScreen if currentList +list(currentList) diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index dacb487e..3dd7f208 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -3,15 +3,37 @@ const { calculateIndex } = Utils; BlazeComponent.extendComponent({ onRendered() { const boardComponent = this.parentComponent(); - const $swimlanesDom = boardComponent.$('.js-swimlanes'); + const $listsDom = this.$('.js-lists'); + + if (!Session.get('currentCard')) { + boardComponent.scrollLeft(); + } + + // We want to animate the card details window closing. We rely on CSS + // transition for the actual animation. + $listsDom._uihooks = { + removeElement(node) { + const removeNode = _.once(() => { + node.parentNode.removeChild(node); + }); + if ($(node).hasClass('js-card-details')) { + $(node).css({ + flexBasis: 0, + padding: 0, + }); + $listsDom.one(CSSEvents.transitionend, removeNode); + } else { + removeNode(); + } + }, + }; - $swimlanesDom.sortable({ + $listsDom.sortable({ tolerance: 'pointer', - appendTo: '.board-canvas', helper: 'clone', - handle: '.js-swimlane-header', - items: '.js-swimlane:not(.placeholder)', - placeholder: 'swimlane placeholder', + handle: '.js-list-header', + items: '.js-list:not(.js-list-composer)', + placeholder: 'list placeholder', distance: 7, start(evt, ui) { ui.placeholder.height(ui.helper.height()); @@ -21,15 +43,15 @@ BlazeComponent.extendComponent({ stop(evt, ui) { // To attribute the new index number, we need to get the DOM element // of the previous and the following card -- if any. - const prevSwimlaneDom = ui.item.prev('.js-swimlane').get(0); - const nextSwimlaneDom = ui.item.next('.js-swimlane').get(0); - const sortIndex = calculateIndex(prevSwimlaneDom, nextSwimlaneDom, 1); + const prevListDom = ui.item.prev('.js-list').get(0); + const nextListDom = ui.item.next('.js-list').get(0); + const sortIndex = calculateIndex(prevListDom, nextListDom, 1); - $swimlanesDom.sortable('cancel'); - const swimlaneDomElement = ui.item.get(0); - const swimlane = Blaze.getData(swimlaneDomElement); + $listsDom.sortable('cancel'); + const listDomElement = ui.item.get(0); + const list = Blaze.getData(listDomElement); - Swimlanes.update(swimlane._id, { + Lists.update(list._id, { $set: { sort: sortIndex.base, }, @@ -38,6 +60,20 @@ BlazeComponent.extendComponent({ boardComponent.setIsDragging(false); }, }); + + function userIsMember() { + return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly(); + } + + // Disable drag-dropping while in multi-selection mode, or if the current user + // is not a board member + boardComponent.autorun(() => { + const $listDom = $listsDom; + if ($listDom.data('sortable')) { + $listsDom.sortable('option', 'disabled', + MultiSelection.isActive() || !userIsMember()); + } + }); }, onCreated() { this.draggingActive = new ReactiveVar(false); @@ -50,20 +86,6 @@ BlazeComponent.extendComponent({ return this._id; }, - // XXX Flow components allow us to avoid creating these two setter methods by - // exposing a public API to modify the component state. We need to investigate - // best practices here. - setIsDragging(bool) { - this.draggingActive.set(bool); - }, - - scrollLeft(position = 0) { - const lists = this.$('.js-lists'); - lists && lists.animate({ - scrollLeft: position, - }); - }, - currentCardIsInThisList(listId, swimlaneId) { const currentCard = Cards.findOne(Session.get('currentCard')); const currentBoardId = Session.get('currentBoard'); diff --git a/client/components/swimlanes/swimlanes.styl b/client/components/swimlanes/swimlanes.styl index 29054d32..555bcd3b 100644 --- a/client/components/swimlanes/swimlanes.styl +++ b/client/components/swimlanes/swimlanes.styl @@ -49,3 +49,6 @@ .swimlane-header-menu position: absolute padding: 20px 20px + +.list-group + height: 100% diff --git a/docker-compose.yml b/docker-compose.yml index a92651a7..fd570e5a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,7 +3,7 @@ version: '2' services: wekandb: - image: mongo:3.2.19 + image: mongo:3.2.18 container_name: wekan-db restart: always command: mongod --smallfiles --oplogSize 128 diff --git a/i18n/bg.i18n.json b/i18n/bg.i18n.json index 3d2b1fc0..568bd458 100644 --- a/i18n/bg.i18n.json +++ b/i18n/bg.i18n.json @@ -24,7 +24,7 @@ "act-withBoardTitle": "[Wekan] __board__", "act-withCardTitle": "[__board__] __card__", "actions": "Actions", - "activities": "Дейности", + "activities": "Действия", "activity": "Дейности", "activity-added": "добави %s към %s", "activity-archived": "архивира %s", @@ -62,7 +62,7 @@ "all-boards": "Всички дъски", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", - "apply": "Apply", + "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.", "archive": "Архив", "archive-all": "Архивирай всички", @@ -83,7 +83,7 @@ "attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.", "attachmentDeletePopup-title": "Желаете ли да изтриете прикачения файл?", "attachments": "Прикачени файлове", - "auto-watch": "Automatically watch boards when they are created", + "auto-watch": "Автоматично наблюдаване на дъските, когато са създадени", "avatar-too-big": "Аватарът е прекалено голям (максимум 70KB)", "back": "Назад", "board-change-color": "Промени цвета", @@ -94,7 +94,7 @@ "boardChangeColorPopup-title": "Change Board Background", "boardChangeTitlePopup-title": "Rename Board", "boardChangeVisibilityPopup-title": "Change Visibility", - "boardChangeWatchPopup-title": "Change Watch", + "boardChangeWatchPopup-title": "Промени наблюдаването", "boardMenuPopup-title": "Board Menu", "boards": "Дъски", "board-view": "Board View", @@ -102,7 +102,7 @@ "board-view-lists": "Списъци", "bucket-example": "Like “Bucket List” for example", "cancel": "Cancel", - "card-archived": "This card is archived.", + "card-archived": "Тази карта е архивирана", "card-comments-title": "Тази карта има %s коментар.", "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.", "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.", @@ -110,16 +110,16 @@ "card-due": "Готова за", "card-due-on": "Готова за", "card-spent": "Изработено време", - "card-edit-attachments": "Edit attachments", - "card-edit-labels": "Edit labels", - "card-edit-members": "Edit members", + "card-edit-attachments": "Промени прикачените файлове", + "card-edit-labels": "Промени етикетите", + "card-edit-members": "Промени членовете", "card-labels-title": "Променете етикетите за тази карта", "card-members-title": "Add or remove members of the board from the card.", "card-start": "Начало", "card-start-on": "Starts on", "cardAttachmentsPopup-title": "Attach From", "cardDeletePopup-title": "Желаете да изтриете картата?", - "cardDetailsActionsPopup-title": "Card Actions", + "cardDetailsActionsPopup-title": "Опции", "cardLabelsPopup-title": "Етикети", "cardMembersPopup-title": "Членове", "cardMorePopup-title": "Още", @@ -133,8 +133,8 @@ "changeLanguagePopup-title": "Промени езика", "changePasswordPopup-title": "Промени паролата", "changePermissionsPopup-title": "Change Permissions", - "changeSettingsPopup-title": "Change Settings", - "checklists": "Checklists", + "changeSettingsPopup-title": "Промяна на настройките", + "checklists": "Списъци със задачи", "click-to-star": "Click to star this board.", "click-to-unstar": "Натиснете, за да премахнете тази дъска от любими.", "clipboard": "Clipboard or drag & drop", @@ -157,9 +157,9 @@ "comment-only-desc": "Може да коментира само в карти.", "computer": "Computer", "confirm-checklist-delete-dialog": "Are you sure you want to delete checklist", - "copy-card-link-to-clipboard": "Copy card link to clipboard", - "copyCardPopup-title": "Copy Card", - "copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards", + "copy-card-link-to-clipboard": "Копирай връзката на картата в клипборда", + "copyCardPopup-title": "Копирай картата", + "copyChecklistToManyCardsPopup-title": "Копирай шаблона за чеклисти в много карти", "copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format", "copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]", "create": "Create", @@ -169,19 +169,19 @@ "current": "current", "date": "Дата", "decline": "Decline", - "default-avatar": "Default avatar", + "default-avatar": "Основен аватар", "delete": "Изтрий", "deleteLabelPopup-title": "Желаете да изтриете етикета?", - "description": "Description", + "description": "Описание", "disambiguateMultiLabelPopup-title": "Disambiguate Label Action", "disambiguateMultiMemberPopup-title": "Disambiguate Member Action", "discard": "Discard", "done": "Done", "download": "Сваляне", - "edit": "Edit", + "edit": "Промени", "edit-avatar": "Промени аватара", "edit-profile": "Промяна на профила", - "edit-wip-limit": "Edit WIP Limit", + "edit-wip-limit": "Промени WIP лимита", "soft-wip-limit": "Soft WIP Limit", "editCardStartDatePopup-title": "Промени началната дата", "editCardDueDatePopup-title": "Промени датата за готовност", @@ -189,18 +189,18 @@ "editLabelPopup-title": "Change Label", "editNotificationPopup-title": "Промени известията", "editProfilePopup-title": "Промяна на профила", - "email": "Email", + "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-fail": "Sending email failed", - "email-fail-text": "Error trying to send email", - "email-invalid": "Invalid email", - "email-invite": "Invite via Email", + "email-fail": "Неуспешно изпращане на имейла", + "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-sent": "Email sent", + "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.", "enable-wip-limit": "Enable WIP Limit", @@ -214,7 +214,7 @@ "error-user-notAllowSelf": "You can not invite yourself", "error-user-notCreated": "This user is not created", "error-username-taken": "This username is already taken", - "error-email-taken": "Email has already been taken", + "error-email-taken": "Имейлът е вече зает", "export-board": "Export board", "filter": "Филтър", "filter-cards": "Филтрирай картите", @@ -224,7 +224,7 @@ "filter-on": "Има приложени филтри", "filter-on-desc": "В момента филтрирате картите в тази дъска. Моля, натиснете тук, за да промените филтъра.", "filter-to-selection": "Филтрирай избраните", - "fullname": "Full Name", + "fullname": "Име", "header-logo-title": "Go back to your boards page.", "hide-system-messages": "Скриване на системните съобщения", "headerBarCreateBoardPopup-title": "Create Board", @@ -245,8 +245,8 @@ "import-show-user-mapping": "Review members mapping", "import-user-select": "Pick the Wekan user you want to use as this member", "importMapMembersAddPopup-title": "Select Wekan member", - "info": "Version", - "initials": "Initials", + "info": "Версия", + "initials": "Инициали", "invalid-date": "Невалидна дата", "invalid-time": "Невалиден час", "invalid-user": "Невалиден потребител", @@ -262,11 +262,11 @@ "leave-board": "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": "Leave Board ?", - "link-card": "Link to this card", - "list-archive-cards": "Archive all cards in this list", + "link-card": "Връзка към тази карта", + "list-archive-cards": "Архивирай всички карти в този списък", "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view archived cards and bring them back to the board, click “Menu” > “Archived Items”.", - "list-move-cards": "Move all cards in this list", - "list-select-cards": "Select all cards in this list", + "list-move-cards": "Премести всички карти в този списък", + "list-select-cards": "Избери всички карти в този списък", "listActionPopup-title": "List Actions", "swimlaneActionPopup-title": "Swimlane Actions", "listImportCardPopup-title": "Import a Trello card", @@ -283,9 +283,9 @@ "members": "Членове", "menu": "Меню", "move-selection": "Move selection", - "moveCardPopup-title": "Move Card", - "moveCardToBottom-title": "Move to Bottom", - "moveCardToTop-title": "Move to Top", + "moveCardPopup-title": "Премести картата", + "moveCardToBottom-title": "Премести в края", + "moveCardToTop-title": "Премести в началото", "moveSelectionPopup-title": "Move selection", "multi-selection": "Множествен избор", "multi-selection-on": "Множественият избор е приложен", @@ -300,8 +300,8 @@ "normal": "Normal", "normal-desc": "Can view and edit cards. Can't change settings.", "not-accepted-yet": "Invitation 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-participate": "Получавате информация за всички карти, в които сте отбелязани или сте създали", + "notify-watch": "Получавате информация за всички дъски, списъци и карти, които наблюдавате", "optional": "optional", "or": "or", "page-maybe-private": "This page may be private. You may be able to view it by <a href='%s'>logging in</a>.", @@ -345,7 +345,7 @@ "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Отвори/затвори сайдбара с филтри", "shortcut-toggle-sidebar": "Toggle Board Sidebar", - "show-cards-minimum-count": "Show cards count if list contains more than", + "show-cards-minimum-count": "Покажи бройката на картите, ако списъка съдържа повече от", "sidebar-open": "Open Sidebar", "sidebar-close": "Close Sidebar", "signupPopup-title": "Create an Account", @@ -355,27 +355,27 @@ "subscribe": "Subscribe", "team": "Team", "this-board": "this board", - "this-card": "this card", - "spent-time-hours": "Изработено време (часове)", - "overtime-hours": "Оувъртайм (часове)", + "this-card": "тази карта", + "spent-time-hours": "Изработено време (часа)", + "overtime-hours": "Оувъртайм (часа)", "overtime": "Оувъртайм", "has-overtime-cards": "Има карти с оувъртайм", "has-spenttime-cards": "Има карти с изработено време", "time": "Време", "title": "Title", - "tracking": "Tracking", + "tracking": "Следене", "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.", "unassign-member": "Unassign member", "unsaved-description": "You have an unsaved description.", - "unwatch": "Unwatch", + "unwatch": "Спри наблюдаването", "upload": "Upload", - "upload-avatar": "Upload an avatar", - "uploaded-avatar": "Uploaded an avatar", + "upload-avatar": "Качване на аватар", + "uploaded-avatar": "Качихте аватар", "username": "Потребителско име", "view-it": "View it", "warn-list-archived": "warning: this card is in an archived list", - "watch": "Watch", - "watching": "Watching", + "watch": "Наблюдавай", + "watching": "Наблюдава", "watching-info": "You will be notified of any change in this board", "welcome-board": "Welcome Board", "welcome-swimlane": "Milestone 1", @@ -394,8 +394,8 @@ "invite-people": "Покани хора", "to-boards": "To board(s)", "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-host-description": "Адресът на SMTP сървъра, който обслужва Вашите имейли.", + "smtp-port-description": "Портът, който Вашият SMTP сървър използва за изходящи имейли.", "smtp-tls-description": "Разреши TLS поддръжка за SMTP сървъра", "smtp-host": "SMTP хост", "smtp-port": "SMTP порт", @@ -403,12 +403,12 @@ "smtp-password": "Парола", "smtp-tls": "TLS поддръжка", "send-from": "От", - "send-smtp-test": "Send a test email to yourself", + "send-smtp-test": "Изпрати тестов имейл на себе си", "invitation-code": "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-smtp-test-subject": "SMTP Test Email From Wekan", - "email-smtp-test-text": "You have successfully sent an email", + "email-smtp-test-subject": "SMTP тестов имейл, изпратен от Wekan", + "email-smtp-test-text": "Успешно изпратихте имейл", "error-invitation-code-not-exist": "Invitation code doesn't exist", "error-notAuthorized": "You are not authorized to view this page.", "outgoing-webhooks": "Outgoing Webhooks", @@ -422,18 +422,18 @@ "OS_Freemem": "Свободна памет", "OS_Loadavg": "ОС средно натоварване", "OS_Platform": "ОС платформа", - "OS_Release": "OS Release", - "OS_Totalmem": "OS Total Memory", - "OS_Type": "OS Type", - "OS_Uptime": "OS Uptime", - "hours": "часове", + "OS_Release": "ОС Версия", + "OS_Totalmem": "ОС Общо памет", + "OS_Type": "Тип ОС", + "OS_Uptime": "OS Ъптайм", + "hours": "часа", "minutes": "минути", "seconds": "секунди", "yes": "Да", "no": "Не", "accounts": "Профили", - "accounts-allowEmailChange": "Allow Email Change", + "accounts-allowEmailChange": "Разреши промяна на имейла", "createdAt": "Създаден на", - "verified": "Verified", + "verified": "Потвърден", "active": "Активен" }
\ No newline at end of file diff --git a/i18n/hy.i18n.json b/i18n/hy.i18n.json new file mode 100644 index 00000000..2b23b1b4 --- /dev/null +++ b/i18n/hy.i18n.json @@ -0,0 +1,439 @@ +{ + "accept": "Ընդունել", + "act-activity-notify": "[Wekan] Activity Notification", + "act-addAttachment": "attached __attachment__ to __card__", + "act-addChecklist": "added checklist __checklist__ to __card__", + "act-addChecklistItem": "ավելացրել է __checklistItem__ __checklist__ on __card__-ին", + "act-addComment": "մեկնաբանել է __card__: __comment__", + "act-createBoard": "created __board__", + "act-createCard": "added __card__ to __list__", + "act-createList": "added __list__ to __board__", + "act-addBoardMember": "added __member__ to __board__", + "act-archivedBoard": "archived __board__", + "act-archivedCard": "archived __card__", + "act-archivedList": "archived __list__", + "act-archivedSwimlane": "archived __swimlane__", + "act-importBoard": "imported __board__", + "act-importCard": "imported __card__", + "act-importList": "imported __list__", + "act-joinMember": "added __member__ to __card__", + "act-moveCard": "moved __card__ from __oldList__ to __list__", + "act-removeBoardMember": "removed __member__ from __board__", + "act-restoredCard": "restored __card__ to __board__", + "act-unjoinMember": "removed __member__ from __card__", + "act-withBoardTitle": "[Wekan] __board__", + "act-withCardTitle": "[__board__] __card__", + "actions": "Actions", + "activities": "Activities", + "activity": "Activity", + "activity-added": "added %s to %s", + "activity-archived": "archived %s", + "activity-attached": "attached %s to %s", + "activity-created": "created %s", + "activity-excluded": "excluded %s from %s", + "activity-imported": "imported %s into %s from %s", + "activity-imported-board": "imported %s from %s", + "activity-joined": "joined %s", + "activity-moved": "moved %s from %s to %s", + "activity-on": "on %s", + "activity-removed": "removed %s from %s", + "activity-sent": "sent %s to %s", + "activity-unjoined": "unjoined %s", + "activity-checklist-added": "added checklist to %s", + "activity-checklist-item-added": "added checklist item to '%s' in %s", + "add": "Add", + "add-attachment": "Add Attachment", + "add-board": "Add Board", + "add-card": "Add Card", + "add-swimlane": "Add Swimlane", + "add-checklist": "Add Checklist", + "add-checklist-item": "Add an item to checklist", + "add-cover": "Add Cover", + "add-label": "Add Label", + "add-list": "Add List", + "add-members": "Add Members", + "added": "Added", + "addMemberPopup-title": "Members", + "admin": "Admin", + "admin-desc": "Can view and edit cards, remove members, and change settings for the board.", + "admin-announcement": "Announcement", + "admin-announcement-active": "Active System-Wide Announcement", + "admin-announcement-title": "Announcement from Administrator", + "all-boards": "All boards", + "and-n-other-card": "And __count__ other card", + "and-n-other-card_plural": "And __count__ other cards", + "apply": "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.", + "archive": "Archive", + "archive-all": "Archive All", + "archive-board": "Archive Board", + "archive-card": "Archive Card", + "archive-list": "Archive List", + "archive-swimlane": "Archive Swimlane", + "archive-selection": "Archive selection", + "archiveBoardPopup-title": "Archive Board?", + "archived-items": "Archived Items", + "archived-boards": "Archived Boards", + "restore-board": "Restore Board", + "no-archived-boards": "No Archived Boards.", + "archives": "Archives", + "assign-member": "Assign member", + "attached": "attached", + "attachment": "Attachment", + "attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.", + "attachmentDeletePopup-title": "Delete Attachment?", + "attachments": "Attachments", + "auto-watch": "Automatically watch boards when they are created", + "avatar-too-big": "The avatar is too large (70KB max)", + "back": "Back", + "board-change-color": "Change color", + "board-nb-stars": "%s stars", + "board-not-found": "Board not found", + "board-private-info": "This board will be <strong>private</strong>.", + "board-public-info": "This board will be <strong>public</strong>.", + "boardChangeColorPopup-title": "Change Board Background", + "boardChangeTitlePopup-title": "Rename Board", + "boardChangeVisibilityPopup-title": "Change Visibility", + "boardChangeWatchPopup-title": "Change Watch", + "boardMenuPopup-title": "Board Menu", + "boards": "Boards", + "board-view": "Board View", + "board-view-swimlanes": "Swimlanes", + "board-view-lists": "Lists", + "bucket-example": "Like “Bucket List” for example", + "cancel": "Cancel", + "card-archived": "This card is archived.", + "card-comments-title": "This card has %s comment.", + "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.", + "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 archive a card to remove it from the board and preserve the activity.", + "card-due": "Due", + "card-due-on": "Due on", + "card-spent": "Spent Time", + "card-edit-attachments": "Edit attachments", + "card-edit-labels": "Edit labels", + "card-edit-members": "Edit members", + "card-labels-title": "Change the labels for the card.", + "card-members-title": "Add or remove members of the board from the card.", + "card-start": "Start", + "card-start-on": "Starts on", + "cardAttachmentsPopup-title": "Attach From", + "cardDeletePopup-title": "Delete Card?", + "cardDetailsActionsPopup-title": "Card Actions", + "cardLabelsPopup-title": "Labels", + "cardMembersPopup-title": "Members", + "cardMorePopup-title": "More", + "cards": "Cards", + "change": "Change", + "change-avatar": "Change Avatar", + "change-password": "Change Password", + "change-permissions": "Change permissions", + "change-settings": "Change Settings", + "changeAvatarPopup-title": "Change Avatar", + "changeLanguagePopup-title": "Change Language", + "changePasswordPopup-title": "Change Password", + "changePermissionsPopup-title": "Change Permissions", + "changeSettingsPopup-title": "Change Settings", + "checklists": "Checklists", + "click-to-star": "Click to star this board.", + "click-to-unstar": "Click to unstar this board.", + "clipboard": "Clipboard or drag & drop", + "close": "Close", + "close-board": "Close Board", + "close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.", + "color-black": "black", + "color-blue": "blue", + "color-green": "green", + "color-lime": "lime", + "color-orange": "orange", + "color-pink": "pink", + "color-purple": "purple", + "color-red": "red", + "color-sky": "sky", + "color-yellow": "yellow", + "comment": "Comment", + "comment-placeholder": "Write Comment", + "comment-only": "Comment only", + "comment-only-desc": "Can comment on cards only.", + "computer": "Computer", + "confirm-checklist-delete-dialog": "Are you sure you want to delete checklist", + "copy-card-link-to-clipboard": "Copy card link to clipboard", + "copyCardPopup-title": "Copy Card", + "copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards", + "copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format", + "copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]", + "create": "Create", + "createBoardPopup-title": "Create Board", + "chooseBoardSourcePopup-title": "Import board", + "createLabelPopup-title": "Create Label", + "current": "current", + "date": "Date", + "decline": "Decline", + "default-avatar": "Default avatar", + "delete": "Delete", + "deleteLabelPopup-title": "Delete Label?", + "description": "Description", + "disambiguateMultiLabelPopup-title": "Disambiguate Label Action", + "disambiguateMultiMemberPopup-title": "Disambiguate Member Action", + "discard": "Discard", + "done": "Done", + "download": "Download", + "edit": "Edit", + "edit-avatar": "Change Avatar", + "edit-profile": "Edit Profile", + "edit-wip-limit": "Edit WIP Limit", + "soft-wip-limit": "Soft WIP Limit", + "editCardStartDatePopup-title": "Change start date", + "editCardDueDatePopup-title": "Change due date", + "editCardSpentTimePopup-title": "Change spent time", + "editLabelPopup-title": "Change Label", + "editNotificationPopup-title": "Edit Notification", + "editProfilePopup-title": "Edit Profile", + "email": "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-fail": "Sending email failed", + "email-fail-text": "Error trying to send email", + "email-invalid": "Invalid email", + "email-invite": "Invite via Email", + "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-sent": "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.", + "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-json-malformed": "Your text is not valid JSON", + "error-json-schema": "Your JSON data does not include the proper information in the correct format", + "error-list-doesNotExist": "This list does not exist", + "error-user-doesNotExist": "This user does not exist", + "error-user-notAllowSelf": "You can not invite yourself", + "error-user-notCreated": "This user is not created", + "error-username-taken": "This username is already taken", + "error-email-taken": "Email has already been taken", + "export-board": "Export board", + "filter": "Filter", + "filter-cards": "Filter Cards", + "filter-clear": "Clear filter", + "filter-no-label": "No label", + "filter-no-member": "No member", + "filter-on": "Filter is on", + "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.", + "filter-to-selection": "Filter to selection", + "fullname": "Full Name", + "header-logo-title": "Go back to your boards page.", + "hide-system-messages": "Hide system messages", + "headerBarCreateBoardPopup-title": "Create Board", + "home": "Home", + "import": "Import", + "import-board": "import board", + "import-board-c": "Import board", + "import-board-title-trello": "Import board from Trello", + "import-board-title-wekan": "Import board from Wekan", + "import-sandstorm-warning": "Imported board will delete all existing data on board and replace it with imported board.", + "from-trello": "From Trello", + "from-wekan": "From 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-json-placeholder": "Paste your valid JSON data here", + "import-map-members": "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-user-select": "Pick the Wekan user you want to use as this member", + "importMapMembersAddPopup-title": "Select Wekan member", + "info": "Version", + "initials": "Initials", + "invalid-date": "Invalid date", + "invalid-time": "Invalid time", + "invalid-user": "Invalid user", + "joined": "joined", + "just-invited": "You are just invited to this board", + "keyboard-shortcuts": "Keyboard shortcuts", + "label-create": "Create Label", + "label-default": "%s label (default)", + "label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.", + "labels": "Labels", + "language": "Language", + "last-admin-desc": "You can’t change roles because there must be at least one admin.", + "leave-board": "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": "Leave Board ?", + "link-card": "Link to this card", + "list-archive-cards": "Archive all cards in this list", + "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view archived cards and bring them back to the board, click “Menu” > “Archived Items”.", + "list-move-cards": "Move all cards in this list", + "list-select-cards": "Select all cards in this list", + "listActionPopup-title": "List Actions", + "swimlaneActionPopup-title": "Swimlane Actions", + "listImportCardPopup-title": "Import a Trello card", + "listMorePopup-title": "More", + "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 archive a list to remove it from the board and preserve the activity.", + "lists": "Lists", + "swimlanes": "Swimlanes", + "log-out": "Log Out", + "log-in": "Log In", + "loginPopup-title": "Log In", + "memberMenuPopup-title": "Member Settings", + "members": "Members", + "menu": "Menu", + "move-selection": "Move selection", + "moveCardPopup-title": "Move Card", + "moveCardToBottom-title": "Move to Bottom", + "moveCardToTop-title": "Move to Top", + "moveSelectionPopup-title": "Move selection", + "multi-selection": "Multi-Selection", + "multi-selection-on": "Multi-Selection is on", + "muted": "Muted", + "muted-info": "You will never be notified of any changes in this board", + "my-boards": "My Boards", + "name": "Name", + "no-archived-cards": "No archived cards.", + "no-archived-lists": "No archived lists.", + "no-archived-swimlanes": "No archived swimlanes.", + "no-results": "No results", + "normal": "Normal", + "normal-desc": "Can view and edit cards. Can't change settings.", + "not-accepted-yet": "Invitation 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", + "optional": "optional", + "or": "or", + "page-maybe-private": "This page may be private. You may be able to view it by <a href='%s'>logging in</a>.", + "page-not-found": "Page not found.", + "password": "Password", + "paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)", + "participating": "Participating", + "preview": "Preview", + "previewAttachedImagePopup-title": "Preview", + "previewClipboardImagePopup-title": "Preview", + "private": "Private", + "private-desc": "This board is private. Only people added to the board can view and edit it.", + "profile": "Profile", + "public": "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.", + "quick-access-description": "Star a board to add a shortcut in this bar.", + "remove-cover": "Remove Cover", + "remove-from-board": "Remove from Board", + "remove-label": "Remove Label", + "listDeletePopup-title": "Delete List ?", + "remove-member": "Remove Member", + "remove-member-from-card": "Remove from Card", + "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.", + "removeMemberPopup-title": "Remove Member?", + "rename": "Rename", + "rename-board": "Rename Board", + "restore": "Restore", + "save": "Save", + "search": "Search", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", + "select-color": "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", + "shortcut-clear-filters": "Clear all filters", + "shortcut-close-dialog": "Close Dialog", + "shortcut-filter-my-cards": "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", + "signupPopup-title": "Create an Account", + "star-board-title": "Click to star this board. It will show up at top of your boards list.", + "starred-boards": "Starred Boards", + "starred-boards-description": "Starred boards show up at the top of your boards list.", + "subscribe": "Subscribe", + "team": "Team", + "this-board": "this board", + "this-card": "this card", + "spent-time-hours": "Spent time (hours)", + "overtime-hours": "Overtime (hours)", + "overtime": "Overtime", + "has-overtime-cards": "Has overtime cards", + "has-spenttime-cards": "Has spent time cards", + "time": "Time", + "title": "Title", + "tracking": "Tracking", + "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.", + "unassign-member": "Unassign member", + "unsaved-description": "You have an unsaved description.", + "unwatch": "Unwatch", + "upload": "Upload", + "upload-avatar": "Upload an avatar", + "uploaded-avatar": "Uploaded an avatar", + "username": "Username", + "view-it": "View it", + "warn-list-archived": "warning: this card is in an archived list", + "watch": "Watch", + "watching": "Watching", + "watching-info": "You will be notified of any change in this board", + "welcome-board": "Welcome Board", + "welcome-swimlane": "Milestone 1", + "welcome-list1": "Basics", + "welcome-list2": "Advanced", + "what-to-do": "What do you want to do?", + "wipLimitErrorPopup-title": "Invalid WIP Limit", + "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": "Admin Panel", + "settings": "Settings", + "people": "People", + "registration": "Registration", + "disable-self-registration": "Disable Self-Registration", + "invite": "Invite", + "invite-people": "Invite People", + "to-boards": "To board(s)", + "email-addresses": "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-host": "SMTP Host", + "smtp-port": "SMTP Port", + "smtp-username": "Username", + "smtp-password": "Password", + "smtp-tls": "TLS support", + "send-from": "From", + "send-smtp-test": "Send a test email to yourself", + "invitation-code": "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-smtp-test-subject": "SMTP Test Email From Wekan", + "email-smtp-test-text": "You have successfully sent an email", + "error-invitation-code-not-exist": "Invitation code doesn't exist", + "error-notAuthorized": "You are not authorized to view this page.", + "outgoing-webhooks": "Outgoing Webhooks", + "outgoingWebhooksPopup-title": "Outgoing Webhooks", + "new-outgoing-webhook": "New Outgoing Webhook", + "no-name": "(Unknown)", + "Wekan_version": "Wekan version", + "Node_version": "Node version", + "OS_Arch": "OS Arch", + "OS_Cpus": "OS CPU Count", + "OS_Freemem": "OS Free Memory", + "OS_Loadavg": "OS Load Average", + "OS_Platform": "OS Platform", + "OS_Release": "OS Release", + "OS_Totalmem": "OS Total Memory", + "OS_Type": "OS Type", + "OS_Uptime": "OS Uptime", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "yes": "Yes", + "no": "No", + "accounts": "Accounts", + "accounts-allowEmailChange": "Allow Email Change", + "createdAt": "Created at", + "verified": "Verified", + "active": "Active" +}
\ No newline at end of file diff --git a/i18n/it.i18n.json b/i18n/it.i18n.json index 21f84184..58579442 100644 --- a/i18n/it.i18n.json +++ b/i18n/it.i18n.json @@ -45,7 +45,7 @@ "add-attachment": "Aggiungi Allegato", "add-board": "Aggiungi Bacheca", "add-card": "Aggiungi Scheda", - "add-swimlane": "Add Swimlane", + "add-swimlane": "Aggiungi Corsia", "add-checklist": "Aggiungi Checklist", "add-checklist-item": "Aggiungi un elemento alla checklist", "add-cover": "Aggiungi copertina", @@ -69,7 +69,7 @@ "archive-board": "Archivia bacheca", "archive-card": "Archivia scheda", "archive-list": "Archivia Lista", - "archive-swimlane": "Archive Swimlane", + "archive-swimlane": "Archivia Corsia", "archive-selection": "Archivia selezione", "archiveBoardPopup-title": "Archivia Bacheca?", "archived-items": "Elementi archiviati", @@ -97,8 +97,8 @@ "boardChangeWatchPopup-title": "Cambia faccia", "boardMenuPopup-title": "Menu bacheca", "boards": "Bacheche", - "board-view": "Board View", - "board-view-swimlanes": "Swimlanes", + "board-view": "Visualizza bacheca", + "board-view-swimlanes": "Corsie", "board-view-lists": "Liste", "bucket-example": "Per esempio come \"una lista di cose da fare\"", "cancel": "Cancella", @@ -159,9 +159,9 @@ "confirm-checklist-delete-dialog": "Sei sicuro di voler cancellare questa checklist?", "copy-card-link-to-clipboard": "Copia link della scheda sulla clipboard", "copyCardPopup-title": "Copia Scheda", - "copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards", - "copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format", - "copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]", + "copyChecklistToManyCardsPopup-title": "Copia template checklist su più schede", + "copyChecklistToManyCardsPopup-instructions": "Titolo e la descrizione della scheda di destinazione in questo formato JSON", + "copyChecklistToManyCardsPopup-format": "[ {\"title\": \"Titolo prima scheda\", \"description\":\"Descrizione prima scheda\"}, {\"title\":\"Titolo seconda scheda\",\"description\":\"Descrizione seconda scheda\"},{\"title\":\"Titolo ultima scheda\",\"description\":\"Descrizione ultima scheda\"} ]", "create": "Crea", "createBoardPopup-title": "Crea bacheca", "chooseBoardSourcePopup-title": "Importa bacheca", @@ -268,14 +268,14 @@ "list-move-cards": "Sposta tutte le schede in questa lista", "list-select-cards": "Selezione tutte le schede in questa lista", "listActionPopup-title": "Azioni disponibili", - "swimlaneActionPopup-title": "Swimlane Actions", + "swimlaneActionPopup-title": "Azioni corsia", "listImportCardPopup-title": "Importa una scheda di Trello", "listMorePopup-title": "Altro", "link-list": "Link a questa lista", "list-delete-pop": "Tutte le azioni saranno rimosse dal flusso attività e non sarai in grado di recuperare la lista. Non potrai tornare indietro.", "list-delete-suggest-archive": "Puoi archiviare una lista per rimuoverla dalla bacheca e preservarne l'attività.", "lists": "Liste", - "swimlanes": "Swimlanes", + "swimlanes": "Corsie", "log-out": "Log Out", "log-in": "Log In", "loginPopup-title": "Log In", @@ -295,7 +295,7 @@ "name": "Nome", "no-archived-cards": "Nessuna scheda archiviata.", "no-archived-lists": "Nessuna lista archiviata.", - "no-archived-swimlanes": "No archived swimlanes.", + "no-archived-swimlanes": "Nessuna scheda archiviata.", "no-results": "Nessun risultato", "normal": "Normale", "normal-desc": "Può visionare e modificare le schede. Non può cambiare le impostazioni.", @@ -331,8 +331,8 @@ "restore": "Ripristina", "save": "Salva", "search": "Cerca", - "search-cards": "Search from card titles and descriptions on this board", - "search-example": "Text to search for?", + "search-cards": "Ricerca per titolo e descrizione scheda su questa bacheca", + "search-example": "Testo da ricercare?", "select-color": "Seleziona Colore", "set-wip-limit-value": "Seleziona un limite per il massimo numero di attività in questa lista", "setWipLimitPopup-title": "Imposta limite di work in progress", @@ -359,8 +359,8 @@ "spent-time-hours": "Tempo trascorso (ore)", "overtime-hours": "Overtime (ore)", "overtime": "Overtime", - "has-overtime-cards": "Has overtime cards", - "has-spenttime-cards": "Has spent time cards", + "has-overtime-cards": "Ci sono scheda scadute", + "has-spenttime-cards": "Ci sono scheda con tempo impiegato", "time": "Ora", "title": "Titolo", "tracking": "Monitoraggio", @@ -378,7 +378,7 @@ "watching": "Stai seguendo", "watching-info": "Sarai notificato per tutte le modifiche in questa bacheca", "welcome-board": "Bacheca di benvenuto", - "welcome-swimlane": "Milestone 1", + "welcome-swimlane": "Pietra miliare 1", "welcome-list1": "Basi", "welcome-list2": "Avanzate", "what-to-do": "Cosa vuoi fare?", @@ -407,7 +407,7 @@ "invitation-code": "Codice d'invito", "email-invite-register-subject": "__inviter__ ti ha inviato un invito", "email-invite-register-text": "Gentile __user__,\n\n__inviter__ ti ha invitato su Wekan per collaborare.\n\nPer favore segui il link qui sotto:\n__url__\n\nIl tuo codice d'invito è: __icode__\n\nGrazie.", - "email-smtp-test-subject": "SMTP Test Email From Wekan", + "email-smtp-test-subject": "Test invio email SMTP per Wekan", "email-smtp-test-text": "Hai inviato un'email con successo", "error-invitation-code-not-exist": "Il codice d'invito non esiste", "error-notAuthorized": "Non sei autorizzato ad accedere a questa pagina.", diff --git a/i18n/mn.i18n.json b/i18n/mn.i18n.json index fedfcadc..43418301 100644 --- a/i18n/mn.i18n.json +++ b/i18n/mn.i18n.json @@ -125,15 +125,15 @@ "cardMorePopup-title": "More", "cards": "Cards", "change": "Change", - "change-avatar": "Change Avatar", - "change-password": "Change Password", + "change-avatar": "Аватар өөрчлөх", + "change-password": "Нууц үг солих", "change-permissions": "Change permissions", - "change-settings": "Change Settings", - "changeAvatarPopup-title": "Change Avatar", - "changeLanguagePopup-title": "Change Language", - "changePasswordPopup-title": "Change Password", + "change-settings": "Тохиргоо өөрчлөх", + "changeAvatarPopup-title": "Аватар өөрчлөх", + "changeLanguagePopup-title": "Хэл солих", + "changePasswordPopup-title": "Нууц үг солих", "changePermissionsPopup-title": "Change Permissions", - "changeSettingsPopup-title": "Change Settings", + "changeSettingsPopup-title": "Тохиргоо өөрчлөх", "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", @@ -179,7 +179,7 @@ "done": "Done", "download": "Download", "edit": "Edit", - "edit-avatar": "Change Avatar", + "edit-avatar": "Аватар өөрчлөх", "edit-profile": "Бүртгэл засварлах", "edit-wip-limit": "Edit WIP Limit", "soft-wip-limit": "Soft WIP Limit", @@ -187,7 +187,7 @@ "editCardDueDatePopup-title": "Change due date", "editCardSpentTimePopup-title": "Change spent time", "editLabelPopup-title": "Change Label", - "editNotificationPopup-title": "Edit Notification", + "editNotificationPopup-title": "Мэдэгдэл тохируулах", "editProfilePopup-title": "Бүртгэл засварлах", "email": "Email", "email-enrollAccount-subject": "An account created for you on __siteName__", @@ -276,7 +276,7 @@ "list-delete-suggest-archive": "You can archive a list to remove it from the board and preserve the activity.", "lists": "Lists", "swimlanes": "Swimlanes", - "log-out": "Log Out", + "log-out": "Гарах", "log-in": "Log In", "loginPopup-title": "Log In", "memberMenuPopup-title": "Гишүүний тохиргоо", diff --git a/models/activities.js b/models/activities.js index be290dce..bd33303a 100644 --- a/models/activities.js +++ b/models/activities.js @@ -23,6 +23,9 @@ Activities.helpers({ list() { return Lists.findOne(this.listId); }, + swimlane() { + return Swimlanes.findOne(this.swimlaneId); + }, oldList() { return Lists.findOne(this.oldListId); }, diff --git a/package.json b/package.json index 2ddf64f8..ec6ff169 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "0.77.0", + "version": "0.78.0", "description": "The open-source Trello-like kanban", "private": true, "scripts": { diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp index 6b7b5f17..4d478e1c 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 = 62, + appVersion = 63, # Increment this for every release. - appMarketingVersion = (defaultText = "0.77.0~2018-02-23"), + appMarketingVersion = (defaultText = "0.78.0~2018-03-17"), # Human-readable presentation of the app version. minUpgradableAppVersion = 0, diff --git a/sandstorm.js b/sandstorm.js index 3dcbf03c..3ea85fef 100644 --- a/sandstorm.js +++ b/sandstorm.js @@ -252,6 +252,10 @@ if (isSandstorm && Meteor.isServer) { Users.after.insert((userId, doc) => { if (!Boards.findOne(sandstormBoard._id)) { Boards.insert(sandstormBoard, { validate: false }); + Swimlanes.insert({ + title: 'Default', + boardId: sandstormBoard._id, + }); Activities.update( { activityTypeId: sandstormBoard._id }, { $set: { userId: doc._id }} diff --git a/snapcraft.yaml b/snapcraft.yaml index 1de64b71..e28987db 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -65,7 +65,7 @@ apps: parts: mongodb: - source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.2.19.tgz + source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.2.18.tgz plugin: dump stage-packages: [libssl1.0.0] filesets: |