summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLauri Ojansivu <x@xet7.org>2018-03-17 09:36:51 +0200
committerLauri Ojansivu <x@xet7.org>2018-03-17 09:36:51 +0200
commitfa0fd5f21f8b34e959c93ece068be6315eecf8d4 (patch)
treef9775e82095f8c27e511acdcc2937537d3b958c0
parentdfc55371072bcd877f49d043dc65c3f2ef76c651 (diff)
parent83848dbee2e6e283e33667cfa9649aafc7c07f4e (diff)
downloadwekan-fa0fd5f21f8b34e959c93ece068be6315eecf8d4.tar.gz
wekan-fa0fd5f21f8b34e959c93ece068be6315eecf8d4.tar.bz2
wekan-fa0fd5f21f8b34e959c93ece068be6315eecf8d4.zip
Merge branch 'devel'
-rw-r--r--CHANGELOG.md11
-rw-r--r--client/components/boards/boardBody.js103
-rw-r--r--client/components/cards/cardDetails.js2
-rw-r--r--client/components/import/import.jade19
-rw-r--r--client/components/lists/list.js74
-rw-r--r--client/components/swimlanes/swimlanes.jade2
-rw-r--r--client/components/swimlanes/swimlanes.js76
-rw-r--r--client/components/swimlanes/swimlanes.styl3
-rw-r--r--docker-compose.yml2
-rw-r--r--i18n/bg.i18n.json118
-rw-r--r--i18n/hy.i18n.json439
-rw-r--r--i18n/it.i18n.json32
-rw-r--r--i18n/mn.i18n.json20
-rw-r--r--models/activities.js3
-rw-r--r--package.json2
-rw-r--r--sandstorm-pkgdef.capnp4
-rw-r--r--sandstorm.js4
-rw-r--r--snapcraft.yaml2
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: