Browse Source

Merge branch 'master' of https://github.com/wekan/wekan into search

John R. Supplee 4 years ago
parent
commit
103cfb936d
87 changed files with 24154 additions and 755 deletions
  1. 0 1
      .gitignore
  2. 1 1
      .tx/config
  3. 60 0
      CHANGELOG.md
  4. 4 4
      README.md
  5. 1 1
      Stackerfile.yml
  6. 1 1
      client/components/boards/boardBody.js
  7. 5 2
      client/components/boards/boardHeader.jade
  8. 10 8
      client/components/boards/boardHeader.js
  9. 0 1
      client/components/cards/cardDetails.jade
  10. 3 1
      client/components/cards/cardDetails.js
  11. 10 2
      client/components/main/layouts.js
  12. 3 3
      client/components/settings/peopleBody.jade
  13. 2 5
      client/components/settings/settingBody.jade
  14. 19 1
      client/components/settings/settingBody.js
  15. 10 2
      client/components/users/userHeader.js
  16. 4 1
      i18n/ar-EG.i18n.json
  17. 4 1
      i18n/ar.i18n.json
  18. 4 1
      i18n/bg.i18n.json
  19. 4 1
      i18n/br.i18n.json
  20. 4 1
      i18n/ca.i18n.json
  21. 5 2
      i18n/cs.i18n.json
  22. 4 1
      i18n/da.i18n.json
  23. 4 1
      i18n/de.i18n.json
  24. 4 1
      i18n/el.i18n.json
  25. 4 1
      i18n/en-GB.i18n.json
  26. 4 1
      i18n/en.i18n.json
  27. 4 1
      i18n/eo.i18n.json
  28. 4 1
      i18n/es-AR.i18n.json
  29. 4 1
      i18n/es-CL.i18n.json
  30. 987 0
      i18n/es-LA.i18n.json
  31. 4 1
      i18n/es-MX.i18n.json
  32. 4 1
      i18n/es-PE.i18n.json
  33. 4 1
      i18n/es-PY.i18n.json
  34. 4 1
      i18n/es.i18n.json
  35. 4 1
      i18n/eu.i18n.json
  36. 4 1
      i18n/fa-IR.i18n.json
  37. 4 1
      i18n/fa.i18n.json
  38. 4 1
      i18n/fi.i18n.json
  39. 4 1
      i18n/fr.i18n.json
  40. 4 1
      i18n/gl.i18n.json
  41. 4 1
      i18n/he.i18n.json
  42. 4 1
      i18n/hi.i18n.json
  43. 36 33
      i18n/hr.i18n.json
  44. 4 1
      i18n/hu.i18n.json
  45. 4 1
      i18n/hy.i18n.json
  46. 4 1
      i18n/id.i18n.json
  47. 4 1
      i18n/ig.i18n.json
  48. 4 1
      i18n/it.i18n.json
  49. 7 4
      i18n/ja.i18n.json
  50. 4 1
      i18n/ka.i18n.json
  51. 4 1
      i18n/km.i18n.json
  52. 4 1
      i18n/ko.i18n.json
  53. 4 1
      i18n/lt.i18n.json
  54. 4 1
      i18n/lv.i18n.json
  55. 4 1
      i18n/mk.i18n.json
  56. 4 1
      i18n/mn.i18n.json
  57. 5 2
      i18n/nl.i18n.json
  58. 4 1
      i18n/oc.i18n.json
  59. 4 1
      i18n/pa.i18n.json
  60. 5 2
      i18n/pl.i18n.json
  61. 4 1
      i18n/pt-BR.i18n.json
  62. 4 1
      i18n/pt.i18n.json
  63. 4 1
      i18n/ro.i18n.json
  64. 20 17
      i18n/ru.i18n.json
  65. 4 1
      i18n/sk.i18n.json
  66. 4 1
      i18n/sl.i18n.json
  67. 4 1
      i18n/sr.i18n.json
  68. 4 1
      i18n/sv.i18n.json
  69. 4 1
      i18n/sw.i18n.json
  70. 4 1
      i18n/ta.i18n.json
  71. 4 1
      i18n/th.i18n.json
  72. 4 1
      i18n/tr.i18n.json
  73. 4 1
      i18n/uk.i18n.json
  74. 153 150
      i18n/vi.i18n.json
  75. 23 20
      i18n/zh-CN.i18n.json
  76. 4 1
      i18n/zh-HK.i18n.json
  77. 4 1
      i18n/zh-TW.i18n.json
  78. 50 27
      models/trelloCreator.js
  79. 19 0
      models/users.js
  80. 2 1
      openapi/generate_openapi.py
  81. 324 214
      package-lock.json
  82. 2 2
      package.json
  83. 18518 192
      public/api/wekan.html
  84. 3647 1
      public/api/wekan.yml
  85. 5 0
      releases/rebuild-docs-install-deps.sh
  86. 3 0
      releases/translations/pull-translations.sh
  87. 2 2
      sandstorm-pkgdef.capnp

+ 0 - 1
.gitignore

@@ -31,5 +31,4 @@ Thumbs.db
 ehthumbs.db
 ehthumbs.db
 .eslintcache
 .eslintcache
 .meteor/local
 .meteor/local
-.meteor-1.6-snap/.meteor/local
 .devcontainer/docker-compose.extend.yml
 .devcontainer/docker-compose.extend.yml

+ 1 - 1
.tx/config

@@ -39,7 +39,7 @@ host = https://www.transifex.com
 # tap:i18n requires us to use `-` separator in the language identifiers whereas
 # tap:i18n requires us to use `-` separator in the language identifiers whereas
 # Transifex uses a `_` separator, without an option to customize it on one side
 # Transifex uses a `_` separator, without an option to customize it on one side
 # or the other, so we need to do a Manual mapping.
 # or the other, so we need to do a Manual mapping.
-lang_map = ar_EG:ar-EG, bg_BG:bg, en_GB:en-GB, es_AR:es-AR, es_CL:es-CL, es_PE:es-PE, es_MX:es-MX, es_TX:es-TX, es_PY:es-PY, el_GR:el, fa_IR:fa-IR, fi_FI:fi, hu_HU:hu, id_ID:id, mn_MN:mn, no:nb, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, sl_SI:sl, zh_CN:zh-CN, zh_TW:zh-TW, zh_HK:zh-HK
+lang_map = ar_EG:ar-EG, bg_BG:bg, en_GB:en-GB, es_AR:es-AR, es_CL:es-CL, es_419:es-LA, es_PE:es-PE, es_MX:es-MX, es_TX:es-TX, es_PY:es-PY, el_GR:el, fa_IR:fa-IR, fi_FI:fi, hu_HU:hu, id_ID:id, mn_MN:mn, no:nb, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, sl_SI:sl, zh_CN:zh-CN, zh_TW:zh-TW, zh_HK:zh-HK
 
 
 [wekan.application]
 [wekan.application]
 file_filter = i18n/<lang>.i18n.json
 file_filter = i18n/<lang>.i18n.json

+ 60 - 0
CHANGELOG.md

@@ -1,3 +1,63 @@
+# v5.09 2021-03-26 Wekan release
+
+This release adds the following improvements:
+
+- [Replace edit icon by plus-square on new links](https://github.com/wekan/wekan/pull/3671).
+  Thanks to sim51.
+
+and fixes the following bugs:
+
+- [Fix openapi docs generation](https://github.com/wekan/wekan/pull/3672).
+  Thanks to bentiss.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v5.08 2021-03-26 Wekan release
+
+This release adds the following new features:
+
+- [Admin Panel/Settings/Accounts: Hide system messages of all users](https://github.com/wekan/wekan/commit/a249ffc8054189d8e3db9b4c8f082cc7ce7dcb52).
+  Thanks to bbyszio, r4nc0r and xet7.
+
+and adds the following improvements:
+
+- [Add Trello attached links to the card description](https://github.com/wekan/wekan/pull/3669).
+  Thanks to jrsupplee.
+- [Added package-lock.json and updated .gitignore](https://github.com/wekan/wekan/commit/d532a3591f338cec9a3839d43d9a1e9d69f59dc2).
+  Thanks to xet7.
+
+and adds the following new translations:
+
+- [Added translation: español de América Latina](https://github.com/wekan/wekan/commit/ccc9efb2703efda4e199a861920b9ec88e634b59).
+  Thanks to translators.
+
+and fixes the following bugs:
+
+- [Fix typos in translations](https://github.com/wekan/wekan/commit/a0e1b6f918dbb252a13db05d6b9e1f832c28654f).
+  Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v5.07 2021-03-19 Wekan release
+
+This release fixes the following bugs:
+
+- [Fixed sort cards feature](https://github.com/wekan/wekan/pull/3662).
+  Thanks to ednamaeG.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v5.06 2021-03-18 Wekan release
+
+This release fixes the following bugs:
+
+- [Fixed Bug: Calendar & parent cards URLs used absolute URLs](https://github.com/wekan/wekan/pull/3648).
+  Thanks to Majed6.
+- [Fixed Bug: copy to clipboard uses pathname](https://github.com/wekan/wekan/pull/3661).
+  Thanks to Majed6.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
 # v5.05 2021-03-11 Wekan release
 # v5.05 2021-03-11 Wekan release
 
 
 This release fixes the following bugs:
 This release fixes the following bugs:

+ 4 - 4
README.md

@@ -1,4 +1,4 @@
-[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/wekan/wekan) 
+[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/wekan/wekan)
 
 
 # Wekan - Open Source kanban
 # Wekan - Open Source kanban
 
 
@@ -32,7 +32,7 @@ It's better than at chat where details get lost when chat scrolls up.
 
 
 ## FAQ
 ## FAQ
 
 
-**NOTE**: 
+**NOTE**:
 - Please read the [FAQ](https://github.com/wekan/wekan/wiki/FAQ) first
 - Please read the [FAQ](https://github.com/wekan/wekan/wiki/FAQ) first
 - Please don't feed the [trolls](https://github.com/wekan/wekan/wiki/FAQ#why-am-i-called-a-troll) and [spammers](https://github.com/wekan/wekan/wiki/FAQ#why-am-i-called-a-spammer) that are mentioned in the FAQ :)
 - Please don't feed the [trolls](https://github.com/wekan/wekan/wiki/FAQ#why-am-i-called-a-troll) and [spammers](https://github.com/wekan/wekan/wiki/FAQ#why-am-i-called-a-spammer) that are mentioned in the FAQ :)
 
 
@@ -52,7 +52,7 @@ that by providing one-click installation on various platforms.
 
 
 - Wekan is used in [most countries of the world](https://snapcraft.io/wekan).
 - Wekan is used in [most countries of the world](https://snapcraft.io/wekan).
 - Wekan largest user has 13k users using Wekan in their company.
 - Wekan largest user has 13k users using Wekan in their company.
-- Wekan has been [translated](https://transifex.com/wekan/wekan) to about 61 languages.
+- Wekan has been [translated](https://transifex.com/wekan/wekan) to about 62 languages.
 - [Features][features]: Wekan has real-time user interface.
 - [Features][features]: Wekan has real-time user interface.
 - [Platforms][platforms]: Wekan supports many platforms.
 - [Platforms][platforms]: Wekan supports many platforms.
   Wekan is critical part of new platforms Wekan is currently being integrated to.
   Wekan is critical part of new platforms Wekan is currently being integrated to.
@@ -64,7 +64,7 @@ that by providing one-click installation on various platforms.
   [More Platforms](https://github.com/wekan/wekan/wiki/Platforms), bundle for RasPi3 ARM and other CPUs where Node.js and MongoDB exists.
   [More Platforms](https://github.com/wekan/wekan/wiki/Platforms), bundle for RasPi3 ARM and other CPUs where Node.js and MongoDB exists.
 - 1 GB RAM minimum free for Wekan. Production server should have minimum total 4 GB RAM.
 - 1 GB RAM minimum free for Wekan. Production server should have minimum total 4 GB RAM.
   For thousands of users, for example with [Docker](https://github.com/wekan/wekan/blob/master/docker-compose.yml): 3 frontend servers,
   For thousands of users, for example with [Docker](https://github.com/wekan/wekan/blob/master/docker-compose.yml): 3 frontend servers,
-  each having 2 CPU and 2 wekan-app containers. One backend wekan-db server with many CPUs.  
+  each having 2 CPU and 2 wekan-app containers. One backend wekan-db server with many CPUs.
 - Enough disk space and alerts about low disk space. If you run out disk space, MongoDB database gets corrupted.
 - Enough disk space and alerts about low disk space. If you run out disk space, MongoDB database gets corrupted.
 - SECURITY: Updating to newest Wekan version very often. Please check you do not have automatic updates of Sandstorm or Snap turned off.
 - SECURITY: Updating to newest Wekan version very often. Please check you do not have automatic updates of Sandstorm or Snap turned off.
   Old versions have security issues because of old versions Node.js etc. Only newest Wekan is supported.
   Old versions have security issues because of old versions Node.js etc. Only newest Wekan is supported.

+ 1 - 1
Stackerfile.yml

@@ -1,5 +1,5 @@
 appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
 appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
-appVersion: "v5.05.0"
+appVersion: "v5.09.0"
 files:
 files:
   userUploads:
   userUploads:
     - README.md
     - README.md

+ 1 - 1
client/components/boards/boardBody.js

@@ -360,7 +360,7 @@ BlazeComponent.extendComponent({
             end: end || card.endAt,
             end: end || card.endAt,
             allDay:
             allDay:
               Math.abs(end.getTime() - start.getTime()) / 1000 === 24 * 3600,
               Math.abs(end.getTime() - start.getTime()) / 1000 === 24 * 3600,
-            url: FlowRouter.url('card', {
+            url: FlowRouter.path('card', {
               boardId: currentBoard._id,
               boardId: currentBoard._id,
               slug: currentBoard.slug,
               slug: currentBoard.slug,
               cardId: card._id,
               cardId: card._id,

+ 5 - 2
client/components/boards/boardHeader.jade

@@ -34,9 +34,12 @@ template(name="boardHeaderBar")
             if $eq watchLevel "muted"
             if $eq watchLevel "muted"
               i.fa.fa-bell-slash
               i.fa.fa-bell-slash
             span {{_ watchLevel}}
             span {{_ watchLevel}}
-          a.board-header-btn.js-sort-cards(title="{{_ 'sort-cards'}}")
+          a.board-header-btn(title="{{_ 'sort-cards'}}" class="{{#if isSortActive }}emphasis{{else}} js-sort-cards {{/if}}")
             i.fa.fa-sort
             i.fa.fa-sort
-            | {{_ 'sort-cards'}} {{sortCardsBy.get}}
+            span {{#if isSortActive }}{{_ 'Sort is on'}}{{else}}{{_ 'sort-cards'}}{{/if}}
+            if isSortActive
+              a.board-header-btn-close.js-sort-reset(title="Remove Sort")
+                i.fa.fa-times-thin
 
 
         else
         else
           a.board-header-btn.js-log-in(
           a.board-header-btn.js-log-in(

+ 10 - 8
client/components/boards/boardHeader.js

@@ -54,6 +54,10 @@ Template.boardChangeTitlePopup.events({
 });
 });
 
 
 BlazeComponent.extendComponent({
 BlazeComponent.extendComponent({
+  onCreated() {
+    // set sort to default
+    Session.set('sortBy', '');
+  },
   watchLevel() {
   watchLevel() {
     const currentBoard = Boards.findOne(Session.get('currentBoard'));
     const currentBoard = Boards.findOne(Session.get('currentBoard'));
     return currentBoard && currentBoard.getWatchLevel(Meteor.userId());
     return currentBoard && currentBoard.getWatchLevel(Meteor.userId());
@@ -129,6 +133,9 @@ BlazeComponent.extendComponent({
           Sidebar.setView();
           Sidebar.setView();
           Filter.reset();
           Filter.reset();
         },
         },
+        'click .js-sort-reset'() {
+          Session.set('sortBy', '');
+        },
         'click .js-open-search-view'() {
         'click .js-open-search-view'() {
           Sidebar.setView('search');
           Sidebar.setView('search');
         },
         },
@@ -162,6 +169,9 @@ Template.boardHeaderBar.helpers({
   boardView() {
   boardView() {
     return Utils.boardView();
     return Utils.boardView();
   },
   },
+  isSortActive() {
+    return Session.get('sortBy') ? true : false;
+  },
 });
 });
 
 
 Template.boardChangeViewPopup.events({
 Template.boardChangeViewPopup.events({
@@ -407,14 +417,6 @@ BlazeComponent.extendComponent({
           sortCardsBy.set(TAPi18n.__('date-created-oldest-first'));
           sortCardsBy.set(TAPi18n.__('date-created-oldest-first'));
           Popup.close();
           Popup.close();
         },
         },
-        'click .js-sort-default'() {
-          const sortBy = {
-            sort: 1,
-          };
-          Session.set('sortBy', sortBy);
-          sortCardsBy.set(TAPi18n.__('default'));
-          Popup.close();
-        },
       },
       },
     ];
     ];
   },
   },

+ 0 - 1
client/components/cards/cardDetails.jade

@@ -12,7 +12,6 @@ template(name="cardDetails")
             a.fa.fa-link.card-copy-button.js-copy-link(
             a.fa.fa-link.card-copy-button.js-copy-link(
               class="fa-link"
               class="fa-link"
               title="{{_ 'copy-card-link-to-clipboard'}}"
               title="{{_ 'copy-card-link-to-clipboard'}}"
-              value="{{ originRelativeUrl }}"
             )
             )
         if isMiniScreen
         if isMiniScreen
           a.fa.fa-times-thin.close-card-details-mobile-web.js-close-card-details
           a.fa.fa-times-thin.close-card-details-mobile-web.js-close-card-details

+ 3 - 1
client/components/cards/cardDetails.js

@@ -114,7 +114,7 @@ BlazeComponent.extendComponent({
     if (card) {
     if (card) {
       const board = Boards.findOne(card.boardId);
       const board = Boards.findOne(card.boardId);
       if (board) {
       if (board) {
-        result = FlowRouter.url('card', {
+        result = FlowRouter.path('card', {
           boardId: card.boardId,
           boardId: card.boardId,
           slug: board.slug,
           slug: board.slug,
           cardId: card._id,
           cardId: card._id,
@@ -291,6 +291,8 @@ BlazeComponent.extendComponent({
         },
         },
         'click .js-copy-link'() {
         'click .js-copy-link'() {
           StringToCopyElement = document.getElementById('cardURL_copy');
           StringToCopyElement = document.getElementById('cardURL_copy');
+          StringToCopyElement.value =
+            window.location.origin + window.location.pathname;
           StringToCopyElement.select();
           StringToCopyElement.select();
           if (document.execCommand('copy')) {
           if (document.execCommand('copy')) {
             StringToCopyElement.blur();
             StringToCopyElement.blur();

+ 10 - 2
client/components/main/layouts.js

@@ -77,8 +77,6 @@ Template.userFormsLayout.helpers({
       } else if (lang.name === 'ar-EG') {
       } else if (lang.name === 'ar-EG') {
         // ar-EG = Arabic (Egypt), simply Masri (مَصرى, [ˈmɑsˤɾi], Egyptian, Masr refers to Cairo)
         // ar-EG = Arabic (Egypt), simply Masri (مَصرى, [ˈmɑsˤɾi], Egyptian, Masr refers to Cairo)
         name = 'مَصرى';
         name = 'مَصرى';
-      } else if (lang.name === 'es-PY') {
-        name = 'Español de Paraguayo';
       } else if (lang.name === 'fa-IR') {
       } else if (lang.name === 'fa-IR') {
         // fa-IR = Persian (Iran)
         // fa-IR = Persian (Iran)
         name = 'فارسی/پارسی (ایران‎)';
         name = 'فارسی/پارسی (ایران‎)';
@@ -94,6 +92,14 @@ Template.userFormsLayout.helpers({
         name = 'Latviešu';
         name = 'Latviešu';
       } else if (lang.name === 'Español') {
       } else if (lang.name === 'Español') {
         name = 'español';
         name = 'español';
+      } else if (lang.name === 'es_419') {
+        name = 'español de América Latina';
+      } else if (lang.name === 'es-419') {
+        name = 'español de América Latina';
+      } else if (lang.name === 'Español de América Latina') {
+        name = 'español de América Latina';
+      } else if (lang.name === 'es-LA') {
+        name = 'español de América Latina';
       } else if (lang.name === 'Español de Argentina') {
       } else if (lang.name === 'Español de Argentina') {
         name = 'español de Argentina';
         name = 'español de Argentina';
       } else if (lang.name === 'Español de Chile') {
       } else if (lang.name === 'Español de Chile') {
@@ -104,6 +110,8 @@ Template.userFormsLayout.helpers({
         name = 'español de México';
         name = 'español de México';
       } else if (lang.name === 'es-PY') {
       } else if (lang.name === 'es-PY') {
         name = 'español de Paraguayo';
         name = 'español de Paraguayo';
+      } else if (lang.name === 'Español de Paraguayo') {
+        name = 'español de Paraguayo';
       } else if (lang.name === 'Español de Perú') {
       } else if (lang.name === 'Español de Perú') {
         name = 'español de Perú';
         name = 'español de Perú';
       } else if (lang.name === 'Español de Puerto Rico') {
       } else if (lang.name === 'Español de Puerto Rico') {

+ 3 - 3
client/components/settings/peopleBody.jade

@@ -117,17 +117,17 @@ template(name="peopleGeneral")
 
 
 template(name="newOrgRow")
 template(name="newOrgRow")
   a.new-org
   a.new-org
-    i.fa.fa-edit
+    i.fa.fa-plus-square
     | {{_ 'new'}}
     | {{_ 'new'}}
 
 
 template(name="newTeamRow")
 template(name="newTeamRow")
   a.new-team
   a.new-team
-    i.fa.fa-edit
+    i.fa.fa-plus-square
     | {{_ 'new'}}
     | {{_ 'new'}}
 
 
 template(name="newUserRow")
 template(name="newUserRow")
   a.new-user
   a.new-user
-    i.fa.fa-edit
+    i.fa.fa-plus-square
     | {{_ 'new'}}
     | {{_ 'new'}}
 
 
 template(name="orgRow")
 template(name="orgRow")

+ 2 - 5
client/components/settings/settingBody.jade

@@ -122,6 +122,8 @@ template(name='email')
 
 
 template(name='accountSettings')
 template(name='accountSettings')
   ul#account-setting.setting-detail
   ul#account-setting.setting-detail
+    li
+      button.js-all-hide-system-messages.primary {{_ 'hide-system-messages-of-all-users'}}
     li.accounts-form
     li.accounts-form
       .title {{_ 'accounts-allowEmailChange'}}
       .title {{_ 'accounts-allowEmailChange'}}
       .form-group.flex
       .form-group.flex
@@ -129,23 +131,18 @@ template(name='accountSettings')
         span {{_ 'yes'}}
         span {{_ 'yes'}}
         input.wekan-form-control#accounts-allowEmailChange(type="radio" name="allowEmailChange" value="false" checked="{{#unless allowEmailChange}}checked{{/unless}}")
         input.wekan-form-control#accounts-allowEmailChange(type="radio" name="allowEmailChange" value="false" checked="{{#unless allowEmailChange}}checked{{/unless}}")
         span {{_ 'no'}}
         span {{_ 'no'}}
-    li
-    li.accounts-form
       .title {{_ 'accounts-allowUserNameChange'}}
       .title {{_ 'accounts-allowUserNameChange'}}
       .form-group.flex
       .form-group.flex
         input.wekan-form-control#accounts-allowUserNameChange(type="radio" name="allowUserNameChange" value="true" checked="{{#if allowUserNameChange}}checked{{/if}}")
         input.wekan-form-control#accounts-allowUserNameChange(type="radio" name="allowUserNameChange" value="true" checked="{{#if allowUserNameChange}}checked{{/if}}")
         span {{_ 'yes'}}
         span {{_ 'yes'}}
         input.wekan-form-control#accounts-allowUserNameChange(type="radio" name="allowUserNameChange" value="false" checked="{{#unless allowUserNameChange}}checked{{/unless}}")
         input.wekan-form-control#accounts-allowUserNameChange(type="radio" name="allowUserNameChange" value="false" checked="{{#unless allowUserNameChange}}checked{{/unless}}")
         span {{_ 'no'}}
         span {{_ 'no'}}
-    li
-    li.accounts-form
       .title {{_ 'accounts-allowUserDelete'}}
       .title {{_ 'accounts-allowUserDelete'}}
       .form-group.flex
       .form-group.flex
         input.wekan-form-control#accounts-allowUserDelete(type="radio" name="allowUserDelete" value="true" checked="{{#if allowUserDelete}}checked{{/if}}")
         input.wekan-form-control#accounts-allowUserDelete(type="radio" name="allowUserDelete" value="true" checked="{{#if allowUserDelete}}checked{{/if}}")
         span {{_ 'yes'}}
         span {{_ 'yes'}}
         input.wekan-form-control#accounts-allowUserDelete(type="radio" name="allowUserDelete" value="false" checked="{{#unless allowUserDelete}}checked{{/unless}}")
         input.wekan-form-control#accounts-allowUserDelete(type="radio" name="allowUserDelete" value="false" checked="{{#unless allowUserDelete}}checked{{/unless}}")
         span {{_ 'no'}}
         span {{_ 'no'}}
-    li
       button.js-accounts-save.primary {{_ 'save'}}
       button.js-accounts-save.primary {{_ 'save'}}
 
 
 template(name='announcementSettings')
 template(name='announcementSettings')

+ 19 - 1
client/components/settings/settingBody.js

@@ -274,7 +274,6 @@ BlazeComponent.extendComponent({
       $set: { booleanValue: allowUserDelete },
       $set: { booleanValue: allowUserDelete },
     });
     });
   },
   },
-
   allowEmailChange() {
   allowEmailChange() {
     return AccountSettings.findOne('accounts-allowEmailChange').booleanValue;
     return AccountSettings.findOne('accounts-allowEmailChange').booleanValue;
   },
   },
@@ -284,12 +283,31 @@ BlazeComponent.extendComponent({
   allowUserDelete() {
   allowUserDelete() {
     return AccountSettings.findOne('accounts-allowUserDelete').booleanValue;
     return AccountSettings.findOne('accounts-allowUserDelete').booleanValue;
   },
   },
+  allHideSystemMessages() {
+    Meteor.call('setAllUsersHideSystemMessages', (err, ret) => {
+      if (!err && ret) {
+        if (ret === true) {
+          const message = `${TAPi18n.__(
+            'now-system-messages-of-all-users-are-hidden',
+          )}`;
+          alert(message);
+        }
+      } else {
+        const reason = err.reason || '';
+        const message = `${TAPi18n.__(err.error)}\n${reason}`;
+        alert(message);
+      }
+    });
+  },
 
 
   events() {
   events() {
     return [
     return [
       {
       {
         'click button.js-accounts-save': this.saveAccountsChange,
         'click button.js-accounts-save': this.saveAccountsChange,
       },
       },
+      {
+        'click button.js-all-hide-system-messages': this.allHideSystemMessages,
+      },
     ];
     ];
   },
   },
 }).register('accountSettings');
 }).register('accountSettings');

+ 10 - 2
client/components/users/userHeader.js

@@ -171,8 +171,6 @@ Template.changeLanguagePopup.helpers({
       } else if (lang.name === 'ar-EG') {
       } else if (lang.name === 'ar-EG') {
         // ar-EG = Arabic (Egypt), simply Masri (مَصرى, [ˈmɑsˤɾi], Egyptian, Masr refers to Cairo)
         // ar-EG = Arabic (Egypt), simply Masri (مَصرى, [ˈmɑsˤɾi], Egyptian, Masr refers to Cairo)
         name = 'مَصرى';
         name = 'مَصرى';
-      } else if (lang.name === 'es-PY') {
-        name = 'Español de Paraguayo';
       } else if (lang.name === 'fa-IR') {
       } else if (lang.name === 'fa-IR') {
         // fa-IR = Persian (Iran)
         // fa-IR = Persian (Iran)
         name = 'فارسی/پارسی (ایران‎)';
         name = 'فارسی/پارسی (ایران‎)';
@@ -188,6 +186,14 @@ Template.changeLanguagePopup.helpers({
         name = 'Latviešu';
         name = 'Latviešu';
       } else if (lang.name === 'Español') {
       } else if (lang.name === 'Español') {
         name = 'español';
         name = 'español';
+      } else if (lang.name === 'es_419') {
+        name = 'español de América Latina';
+      } else if (lang.name === 'es-419') {
+        name = 'español de América Latina';
+      } else if (lang.name === 'Español de América Latina') {
+        name = 'español de América Latina';
+      } else if (lang.name === 'es-LA') {
+        name = 'español de América Latina';
       } else if (lang.name === 'Español de Argentina') {
       } else if (lang.name === 'Español de Argentina') {
         name = 'español de Argentina';
         name = 'español de Argentina';
       } else if (lang.name === 'Español de Chile') {
       } else if (lang.name === 'Español de Chile') {
@@ -198,6 +204,8 @@ Template.changeLanguagePopup.helpers({
         name = 'español de México';
         name = 'español de México';
       } else if (lang.name === 'es-PY') {
       } else if (lang.name === 'es-PY') {
         name = 'español de Paraguayo';
         name = 'español de Paraguayo';
+      } else if (lang.name === 'Español de Paraguayo') {
+        name = 'español de Paraguayo';
       } else if (lang.name === 'Español de Perú') {
       } else if (lang.name === 'Español de Perú') {
         name = 'español de Perú';
         name = 'español de Perú';
       } else if (lang.name === 'Español de Puerto Rico') {
       } else if (lang.name === 'Español de Puerto Rico') {

+ 4 - 1
i18n/ar-EG.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/ar.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/bg.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/br.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/ca.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 5 - 2
i18n/cs.i18n.json

@@ -906,7 +906,7 @@
   "operator-modified": "modifikováno",
   "operator-modified": "modifikováno",
   "operator-sort": "třídění",
   "operator-sort": "třídění",
   "operator-comment": "komentář",
   "operator-comment": "komentář",
-  "operator-has": "has",
+  "operator-has": "",
   "operator-limit": "limit",
   "operator-limit": "limit",
   "predicate-archived": "archivováno",
   "predicate-archived": "archivováno",
   "predicate-open": "otevřít",
   "predicate-open": "otevřít",
@@ -980,5 +980,8 @@
   "due-date": "Požadovaný termín",
   "due-date": "Požadovaný termín",
   "title-alphabetically": "Nadpis (Abecedně)",
   "title-alphabetically": "Nadpis (Abecedně)",
   "created-at-newest-first": "Vyvtořeno (Od nejnovějších)",
   "created-at-newest-first": "Vyvtořeno (Od nejnovějších)",
-  "created-at-oldest-first": "Vytvořeno (Od nejstarších)"
+  "created-at-oldest-first": "Vytvořeno (Od nejstarších)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/da.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/de.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Fälligkeitsdatum",
   "due-date": "Fälligkeitsdatum",
   "title-alphabetically": "Überschrift (alphabetisch)",
   "title-alphabetically": "Überschrift (alphabetisch)",
   "created-at-newest-first": "Erstelldatum (neueste zuerst)",
   "created-at-newest-first": "Erstelldatum (neueste zuerst)",
-  "created-at-oldest-first": "Erstelldatum (älteste zuerst)"
+  "created-at-oldest-first": "Erstelldatum (älteste zuerst)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Alle System-Nachrichten aller Nutzer verbergen",
+  "now-system-messages-of-all-users-are-hidden": "Alle System-Nachrichten aller Nutzer sind nun verborgen"
 }
 }

+ 4 - 1
i18n/el.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/en-GB.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/en.i18n.json

@@ -983,5 +983,8 @@
   "server-error-troubleshooting": "Please submit the error generated by the server.\nFor a snap installation on Linux, run: `sudo journalctl -u 'snap.wekan.*'`",
   "server-error-troubleshooting": "Please submit the error generated by the server.\nFor a snap installation on Linux, run: `sudo journalctl -u 'snap.wekan.*'`",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/eo.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/es-AR.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/es-CL.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 987 - 0
i18n/es-LA.i18n.json

@@ -0,0 +1,987 @@
+{
+  "accept": "Accept",
+  "act-activity-notify": "Activity Notification",
+  "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-createBoard": "created board __board__",
+  "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+  "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+  "act-createCustomField": "created custom field __customField__ at board __board__",
+  "act-deleteCustomField": "deleted custom field __customField__ at board __board__",
+  "act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-createList": "added list __list__ to board __board__",
+  "act-addBoardMember": "added member __member__ to board __board__",
+  "act-archivedBoard": "Board __board__ moved to Archive",
+  "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+  "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+  "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+  "act-importBoard": "imported board __board__",
+  "act-importCard": "imported card  __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+  "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+  "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+  "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+  "act-removeBoardMember": "removed member __member__ from board __board__",
+  "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+  "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-withBoardTitle": "__board__",
+  "act-withCardTitle": "[__board__] __card__",
+  "actions": "Actions",
+  "activities": "Activities",
+  "activity": "Activity",
+  "activity-added": "added %s to %s",
+  "activity-archived": "%s moved to Archive",
+  "activity-attached": "attached %s to %s",
+  "activity-created": "created %s",
+  "activity-customfield-created": "created custom field %s",
+  "activity-excluded": "excluded %s from %s",
+  "activity-imported": "imported %s into %s from %s",
+  "activity-imported-board": "imported %s from %s",
+  "activity-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-subtask-added": "added subtask to %s",
+  "activity-checked-item": "checked %s in checklist %s of %s",
+  "activity-unchecked-item": "unchecked %s in checklist %s of %s",
+  "activity-checklist-added": "added checklist to %s",
+  "activity-checklist-removed": "removed a checklist from %s",
+  "activity-checklist-completed": "completed checklist %s of %s",
+  "activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
+  "activity-checklist-item-added": "added checklist item to '%s' in %s",
+  "activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
+  "add": "Add",
+  "activity-checked-item-card": "checked %s in checklist %s",
+  "activity-unchecked-item-card": "unchecked %s in checklist %s",
+  "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "activity-checklist-uncompleted-card": "uncompleted the checklist %s",
+  "activity-editComment": "edited comment %s",
+  "activity-deleteComment": "deleted comment %s",
+  "activity-receivedDate": "edited received date to %s of %s",
+  "activity-startDate": "edited start date to %s of %s",
+  "activity-dueDate": "edited due date to %s of %s",
+  "activity-endDate": "edited end date to %s of %s",
+  "add-attachment": "Add Attachment",
+  "add-board": "Add Board",
+  "add-card": "Add Card",
+  "add-swimlane": "Add Swimlane",
+  "add-subtask": "Add Subtask",
+  "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": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.",
+  "archive": "Move to Archive",
+  "archive-all": "Move All to Archive",
+  "archive-board": "Move Board to Archive",
+  "archive-card": "Move Card to Archive",
+  "archive-list": "Move List to Archive",
+  "archive-swimlane": "Move Swimlane to Archive",
+  "archive-selection": "Move selection to Archive",
+  "archiveBoardPopup-title": "Move Board to Archive?",
+  "archived-items": "Archive",
+  "archived-boards": "Boards in Archive",
+  "restore-board": "Restore Board",
+  "no-archived-boards": "No Boards in Archive.",
+  "archives": "Archive",
+  "template": "Template",
+  "templates": "Templates",
+  "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 (520KB 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 Settings",
+  "boardChangeViewPopup-title": "Board View",
+  "boards": "Boards",
+  "board-view": "Board View",
+  "board-view-cal": "Calendar",
+  "board-view-swimlanes": "Swimlanes",
+  "board-view-collapse": "Collapse",
+  "board-view-gantt": "Gantt",
+  "board-view-lists": "Lists",
+  "bucket-example": "Like “Bucket List” for example",
+  "cancel": "Cancel",
+  "card-archived": "This card is moved to Archive.",
+  "board-archived": "This board is moved to Archive.",
+  "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 move a card to Archive 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-custom-fields": "Edit custom fields",
+  "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",
+  "cardCustomField-datePopup-title": "Change date",
+  "cardCustomFieldsPopup-title": "Edit custom fields",
+  "cardStartVotingPopup-title": "Start a vote",
+  "positiveVoteMembersPopup-title": "Proponents",
+  "negativeVoteMembersPopup-title": "Opponents",
+  "card-edit-voting": "Edit voting",
+  "editVoteEndDatePopup-title": "Change vote end date",
+  "allowNonBoardMembers": "Allow all logged in users",
+  "vote-question": "Voting question",
+  "vote-public": "Show who voted what",
+  "vote-for-it": "for it",
+  "vote-against": "against",
+  "deleteVotePopup-title": "Delete vote?",
+  "vote-delete-pop": "Deleting is permanent. You will lose all actions associated with this vote.",
+  "cardDeletePopup-title": "Delete Card?",
+  "cardDetailsActionsPopup-title": "Card Actions",
+  "cardLabelsPopup-title": "Labels",
+  "cardMembersPopup-title": "Members",
+  "cardMorePopup-title": "More",
+  "cardTemplatePopup-title": "Create template",
+  "cards": "Cards",
+  "cards-count": "Cards",
+  "casSignIn": "Sign In with CAS",
+  "cardType-card": "Card",
+  "cardType-linkedCard": "Linked Card",
+  "cardType-linkedBoard": "Linked Board",
+  "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",
+  "subtasks": "Subtasks",
+  "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 “Archive” button from the home header.",
+  "color-black": "black",
+  "color-blue": "blue",
+  "color-crimson": "crimson",
+  "color-darkgreen": "darkgreen",
+  "color-gold": "gold",
+  "color-gray": "gray",
+  "color-green": "green",
+  "color-indigo": "indigo",
+  "color-lime": "lime",
+  "color-magenta": "magenta",
+  "color-mistyrose": "mistyrose",
+  "color-navy": "navy",
+  "color-orange": "orange",
+  "color-paleturquoise": "paleturquoise",
+  "color-peachpuff": "peachpuff",
+  "color-pink": "pink",
+  "color-plum": "plum",
+  "color-purple": "purple",
+  "color-red": "red",
+  "color-saddlebrown": "saddlebrown",
+  "color-silver": "silver",
+  "color-sky": "sky",
+  "color-slateblue": "slateblue",
+  "color-white": "white",
+  "color-yellow": "yellow",
+  "unset-color": "Unset",
+  "comment": "Comment",
+  "comment-placeholder": "Write Comment",
+  "comment-only": "Comment only",
+  "comment-only-desc": "Can comment on cards only.",
+  "no-comments": "No comments",
+  "no-comments-desc": "Can not see comments and activities.",
+  "worker": "Worker",
+  "worker-desc": "Can only move cards, assign itself to card and comment.",
+  "computer": "Computer",
+  "confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
+  "confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
+  "copy-card-link-to-clipboard": "Copy card link to clipboard",
+  "linkCardPopup-title": "Link Card",
+  "searchElementPopup-title": "Search",
+  "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",
+  "createCustomField": "Create Field",
+  "createCustomFieldPopup-title": "Create Field",
+  "current": "current",
+  "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+  "custom-field-checkbox": "Checkbox",
+  "custom-field-currency": "Currency",
+  "custom-field-currency-option": "Currency Code",
+  "custom-field-date": "Date",
+  "custom-field-dropdown": "Dropdown List",
+  "custom-field-dropdown-none": "(none)",
+  "custom-field-dropdown-options": "List Options",
+  "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+  "custom-field-dropdown-unknown": "(unknown)",
+  "custom-field-number": "Number",
+  "custom-field-text": "Text",
+  "custom-fields": "Custom Fields",
+  "date": "Date",
+  "decline": "Decline",
+  "default-avatar": "Default avatar",
+  "delete": "Delete",
+  "deleteCustomFieldPopup-title": "Delete Custom Field?",
+  "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",
+  "editCustomFieldPopup-title": "Edit Field",
+  "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-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) 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-orgname-taken": "This organization name is already taken",
+  "error-teamname-taken": "This team name is already taken",
+  "error-email-taken": "Email has already been taken",
+  "export-board": "Export board",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "export-board-excel": "Export board to Excel",
+  "user-can-not-export-excel": "User can not export Excel",
+  "export-board-html": "Export board to HTML",
+  "exportBoardPopup-title": "Export board",
+  "sort": "Sort",
+  "sort-desc": "Click to Sort List",
+  "list-sort-by": "Sort the List By:",
+  "list-label-modifiedAt": "Last Access Time",
+  "list-label-title": "Name of the List",
+  "list-label-sort": "Your Manual Order",
+  "list-label-short-modifiedAt": "(L)",
+  "list-label-short-title": "(N)",
+  "list-label-short-sort": "(M)",
+  "filter": "Filter",
+  "filter-cards": "Filter Cards or Lists",
+  "list-filter-label": "Filter List by Title",
+  "filter-clear": "Clear filter",
+  "filter-labels-label": "Filter by label",
+  "filter-no-label": "No label",
+  "filter-member-label": "Filter by member",
+  "filter-no-member": "No member",
+  "filter-assignee-label": "Filter by assignee",
+  "filter-no-assignee": "No assignee",
+  "filter-custom-fields-label": "Filter by Custom Fields",
+  "filter-no-custom-fields": "No Custom Fields",
+  "filter-show-archive": "Show archived lists",
+  "filter-hide-empty": "Hide empty lists",
+  "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",
+  "other-filters-label": "Other Filters",
+  "advanced-filter-label": "Advanced Filter",
+  "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i",
+  "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",
+  "impersonate-user": "Impersonate user",
+  "link": "Link",
+  "import-board": "import board",
+  "import-board-c": "Import board",
+  "import-board-title-trello": "Import board from Trello",
+  "import-board-title-wekan": "Import board from previous export",
+  "import-board-title-csv": "Import board from CSV/TSV",
+  "from-trello": "From Trello",
+  "from-wekan": "From previous export",
+  "from-csv": "From CSV/TSV",
+  "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-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
+  "import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
+  "import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.",
+  "import-json-placeholder": "Paste your valid JSON data here",
+  "import-csv-placeholder": "Paste your valid CSV/TSV 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 your users",
+  "import-members-map-note": "Note: Unmapped members will be assigned to the current user.",
+  "import-show-user-mapping": "Review members mapping",
+  "import-user-select": "Pick your existing user you want to use as this member",
+  "importMapMembersAddPopup-title": "Select 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": "Move all cards in this list to Archive",
+  "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.",
+  "list-move-cards": "Move all cards in this list",
+  "list-select-cards": "Select all cards in this list",
+  "set-color-list": "Set Color",
+  "listActionPopup-title": "List Actions",
+  "settingsUserPopup-title": "User Settings",
+  "swimlaneActionPopup-title": "Swimlane Actions",
+  "swimlaneAddPopup-title": "Add a Swimlane below",
+  "listImportCardPopup-title": "Import a Trello card",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
+  "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 move a list to Archive 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-label": "Set label for selection",
+  "multi-selection-member": "Set member for 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 cards in Archive.",
+  "no-archived-lists": "No lists in Archive.",
+  "no-archived-swimlanes": "No swimlanes in Archive.",
+  "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",
+  "rules": "Rules",
+  "search-cards": "Search from card/list titles, descriptions and custom fields on this board",
+  "search-example": "Write text you search and press Enter",
+  "select-color": "Select Color",
+  "select-board": "Select Board",
+  "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-searchbar": "Toggle Search 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.",
+  "type": "Type",
+  "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",
+  "custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL",
+  "custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL",
+  "custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27",
+  "custom-login-logo-image-url": "Custom Login Logo Image URL",
+  "custom-login-logo-link-url": "Custom Login Logo Link URL",
+  "text-below-custom-login-logo": "Text below Custom Login Logo",
+  "automatic-linked-url-schemes": "Custom URL Schemes which should automatically be clickable. One URL Scheme per line",
+  "username": "Username",
+  "import-usernames": "Import Usernames",
+  "view-it": "View it",
+  "warn-list-archived": "warning: this card is in an list at Archive",
+  "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",
+  "card-templates-swimlane": "Card Templates",
+  "list-templates-swimlane": "List Templates",
+  "board-templates-swimlane": "Board Templates",
+  "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 kanban board 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",
+  "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.",
+  "webhook-title": "Webhook Name",
+  "webhook-token": "Token (Optional for Authentication)",
+  "outgoing-webhooks": "Outgoing Webhooks",
+  "bidirectional-webhooks": "Two-Way Webhooks",
+  "outgoingWebhooksPopup-title": "Outgoing Webhooks",
+  "boardCardTitlePopup-title": "Card Title Filter",
+  "disable-webhook": "Disable This Webhook",
+  "global-webhook": "Global Webhooks",
+  "new-outgoing-webhook": "New Outgoing Webhook",
+  "no-name": "(Unknown)",
+  "Node_version": "Node version",
+  "Meteor_version": "Meteor version",
+  "MongoDB_version": "MongoDB version",
+  "MongoDB_storage_engine": "MongoDB storage engine",
+  "MongoDB_Oplog_enabled": "MongoDB Oplog enabled",
+  "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",
+  "days": "days",
+  "hours": "hours",
+  "minutes": "minutes",
+  "seconds": "seconds",
+  "show-field-on-card": "Show this field on card",
+  "automatically-field-on-card": "Add field to new cards",
+  "always-field-on-card": "Add field to all cards",
+  "showLabel-field-on-card": "Show field label on minicard",
+  "yes": "Yes",
+  "no": "No",
+  "accounts": "Accounts",
+  "accounts-allowEmailChange": "Allow Email Change",
+  "accounts-allowUserNameChange": "Allow Username Change",
+  "createdAt": "Created at",
+  "modifiedAt": "Modified at",
+  "verified": "Verified",
+  "active": "Active",
+  "card-received": "Received",
+  "card-received-on": "Received on",
+  "card-end": "End",
+  "card-end-on": "Ends on",
+  "editCardReceivedDatePopup-title": "Change received date",
+  "editCardEndDatePopup-title": "Change end date",
+  "setCardColorPopup-title": "Set color",
+  "setCardActionsColorPopup-title": "Choose a color",
+  "setSwimlaneColorPopup-title": "Choose a color",
+  "setListColorPopup-title": "Choose a color",
+  "assigned-by": "Assigned By",
+  "requested-by": "Requested By",
+  "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+  "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+  "boardDeletePopup-title": "Delete Board?",
+  "delete-board": "Delete Board",
+  "default-subtasks-board": "Subtasks for __board__ board",
+  "default": "Default",
+  "queue": "Queue",
+  "subtask-settings": "Subtasks Settings",
+  "card-settings": "Card Settings",
+  "boardSubtaskSettingsPopup-title": "Board Subtasks Settings",
+  "boardCardSettingsPopup-title": "Card Settings",
+  "deposit-subtasks-board": "Deposit subtasks to this board:",
+  "deposit-subtasks-list": "Landing list for subtasks deposited here:",
+  "show-parent-in-minicard": "Show parent in minicard:",
+  "prefix-with-full-path": "Prefix with full path",
+  "prefix-with-parent": "Prefix with parent",
+  "subtext-with-full-path": "Subtext with full path",
+  "subtext-with-parent": "Subtext with parent",
+  "change-card-parent": "Change card's parent",
+  "parent-card": "Parent card",
+  "source-board": "Source board",
+  "no-parent": "Don't show parent",
+  "activity-added-label": "added label '%s' to %s",
+  "activity-removed-label": "removed label '%s' from %s",
+  "activity-delete-attach": "deleted an attachment from %s",
+  "activity-added-label-card": "added label '%s'",
+  "activity-removed-label-card": "removed label '%s'",
+  "activity-delete-attach-card": "deleted an attachment",
+  "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+  "activity-unset-customfield": "unset custom field '%s' in %s",
+  "r-rule": "Rule",
+  "r-add-trigger": "Add trigger",
+  "r-add-action": "Add action",
+  "r-board-rules": "Board rules",
+  "r-add-rule": "Add rule",
+  "r-view-rule": "View rule",
+  "r-delete-rule": "Delete rule",
+  "r-new-rule-name": "New rule title",
+  "r-no-rules": "No rules",
+  "r-trigger": "Trigger",
+  "r-action": "Action",
+  "r-when-a-card": "When a card",
+  "r-is": "is",
+  "r-is-moved": "is moved",
+  "r-added-to": "Added to",
+  "r-removed-from": "Removed from",
+  "r-the-board": "the board",
+  "r-list": "list",
+  "list": "List",
+  "set-filter": "Set Filter",
+  "r-moved-to": "Moved to",
+  "r-moved-from": "Moved from",
+  "r-archived": "Moved to Archive",
+  "r-unarchived": "Restored from Archive",
+  "r-a-card": "a card",
+  "r-when-a-label-is": "When a label is",
+  "r-when-the-label": "When the label",
+  "r-list-name": "list name",
+  "r-when-a-member": "When a member is",
+  "r-when-the-member": "When the member",
+  "r-name": "name",
+  "r-when-a-attach": "When an attachment",
+  "r-when-a-checklist": "When a checklist is",
+  "r-when-the-checklist": "When the checklist",
+  "r-completed": "Completed",
+  "r-made-incomplete": "Made incomplete",
+  "r-when-a-item": "When a checklist item is",
+  "r-when-the-item": "When the checklist item",
+  "r-checked": "Checked",
+  "r-unchecked": "Unchecked",
+  "r-move-card-to": "Move card to",
+  "r-top-of": "Top of",
+  "r-bottom-of": "Bottom of",
+  "r-its-list": "its list",
+  "r-archive": "Move to Archive",
+  "r-unarchive": "Restore from Archive",
+  "r-card": "card",
+  "r-add": "Add",
+  "r-remove": "Remove",
+  "r-label": "label",
+  "r-member": "member",
+  "r-remove-all": "Remove all members from the card",
+  "r-set-color": "Set color to",
+  "r-checklist": "checklist",
+  "r-check-all": "Check all",
+  "r-uncheck-all": "Uncheck all",
+  "r-items-check": "items of checklist",
+  "r-check": "Check",
+  "r-uncheck": "Uncheck",
+  "r-item": "item",
+  "r-of-checklist": "of checklist",
+  "r-send-email": "Send an email",
+  "r-to": "to",
+  "r-of": "of",
+  "r-subject": "subject",
+  "r-rule-details": "Rule details",
+  "r-d-move-to-top-gen": "Move card to top of its list",
+  "r-d-move-to-top-spec": "Move card to top of list",
+  "r-d-move-to-bottom-gen": "Move card to bottom of its list",
+  "r-d-move-to-bottom-spec": "Move card to bottom of list",
+  "r-d-send-email": "Send email",
+  "r-d-send-email-to": "to",
+  "r-d-send-email-subject": "subject",
+  "r-d-send-email-message": "message",
+  "r-d-archive": "Move card to Archive",
+  "r-d-unarchive": "Restore card from Archive",
+  "r-d-add-label": "Add label",
+  "r-d-remove-label": "Remove label",
+  "r-create-card": "Create new card",
+  "r-in-list": "in list",
+  "r-in-swimlane": "in swimlane",
+  "r-d-add-member": "Add member",
+  "r-d-remove-member": "Remove member",
+  "r-d-remove-all-member": "Remove all member",
+  "r-d-check-all": "Check all items of a list",
+  "r-d-uncheck-all": "Uncheck all items of a list",
+  "r-d-check-one": "Check item",
+  "r-d-uncheck-one": "Uncheck item",
+  "r-d-check-of-list": "of checklist",
+  "r-d-add-checklist": "Add checklist",
+  "r-d-remove-checklist": "Remove checklist",
+  "r-by": "by",
+  "r-add-checklist": "Add checklist",
+  "r-with-items": "with items",
+  "r-items-list": "item1,item2,item3",
+  "r-add-swimlane": "Add swimlane",
+  "r-swimlane-name": "swimlane name",
+  "r-board-note": "Note: leave a field empty to match every possible value.",
+  "r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
+  "r-when-a-card-is-moved": "When a card is moved to another list",
+  "r-set": "Set",
+  "r-update": "Update",
+  "r-datefield": "date field",
+  "r-df-start-at": "start",
+  "r-df-due-at": "due",
+  "r-df-end-at": "end",
+  "r-df-received-at": "received",
+  "r-to-current-datetime": "to current date/time",
+  "r-remove-value-from": "Remove value from",
+  "ldap": "LDAP",
+  "oauth2": "OAuth2",
+  "cas": "CAS",
+  "authentication-method": "Authentication method",
+  "authentication-type": "Authentication type",
+  "custom-product-name": "Custom Product Name",
+  "layout": "Layout",
+  "hide-logo": "Hide Logo",
+  "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
+  "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
+  "error-undefined": "Something went wrong",
+  "error-ldap-login": "An error occurred while trying to login",
+  "display-authentication-method": "Display Authentication Method",
+  "default-authentication-method": "Default Authentication Method",
+  "duplicate-board": "Duplicate Board",
+  "org-number": "The number of organizations is:",
+  "team-number": "The number of teams is:",
+  "people-number": "The number of people is:",
+  "swimlaneDeletePopup-title": "Delete Swimlane ?",
+  "swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
+  "restore-all": "Restore all",
+  "delete-all": "Delete all",
+  "loading": "Loading, please wait.",
+  "previous_as": "last time was",
+  "act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__",
+  "act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)",
+  "act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)",
+  "act-a-receivedAt": "modified received time to __timeValue__ from (__timeOldValue__)",
+  "a-dueAt": "modified due time to be",
+  "a-endAt": "modified ending time to be",
+  "a-startAt": "modified starting time to be",
+  "a-receivedAt": "modified received time to be",
+  "almostdue": "current due time %s is approaching",
+  "pastdue": "current due time %s is past",
+  "duenow": "current due time %s is today",
+  "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+  "act-withDue": "__list__/__card__ due reminders [__board__]",
+  "act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
+  "act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
+  "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
+  "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
+  "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
+  "accounts-allowUserDelete": "Allow users to self delete their account",
+  "hide-minicard-label-text": "Hide minicard label text",
+  "show-desktop-drag-handles": "Show desktop drag handles",
+  "assignee": "Assignee",
+  "cardAssigneesPopup-title": "Assignee",
+  "addmore-detail": "Add a more detailed description",
+  "show-on-card": "Show on Card",
+  "new": "New",
+  "editOrgPopup-title": "Edit Organization",
+  "newOrgPopup-title": "New Organization",
+  "editTeamPopup-title": "Edit Team",
+  "newTeamPopup-title": "New Team",
+  "editUserPopup-title": "Edit User",
+  "newUserPopup-title": "New User",
+  "notifications": "Notifications",
+  "view-all": "View All",
+  "filter-by-unread": "Filter by Unread",
+  "mark-all-as-read": "Mark all as read",
+  "remove-all-read": "Remove all read",
+  "allow-rename": "Allow Rename",
+  "allowRenamePopup-title": "Allow Rename",
+  "start-day-of-week": "Set day of the week start",
+  "monday": "Monday",
+  "tuesday": "Tuesday",
+  "wednesday": "Wednesday",
+  "thursday": "Thursday",
+  "friday": "Friday",
+  "saturday": "Saturday",
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived",
+  "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
+  "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list",
+  "hide-checked-items": "Hide checked items",
+  "task": "Task",
+  "create-task": "Create Task",
+  "ok": "OK",
+  "organizations": "Organizations",
+  "teams": "Teams",
+  "displayName": "Display Name",
+  "shortName": "Short Name",
+  "website": "Website",
+  "person": "Person",
+  "my-cards": "My Cards",
+  "card": "Card",
+  "board": "Board",
+  "context-separator": "/",
+  "myCardsSortChange-title": "My Cards Sort",
+  "myCardsSortChangePopup-title": "My Cards Sort",
+  "myCardsSortChange-choice-board": "By Board",
+  "myCardsSortChange-choice-dueat": "By Due Date",
+  "dueCards-title": "Due Cards",
+  "dueCardsViewChange-title": "Due Cards View",
+  "dueCardsViewChangePopup-title": "Due Cards View",
+  "dueCardsViewChange-choice-me": "Me",
+  "dueCardsViewChange-choice-all": "All Users",
+  "dueCardsViewChange-choice-all-description": "Shows all incomplete cards with a *Due* date from boards for which the user has permission.",
+  "broken-cards": "Broken Cards",
+  "board-title-not-found": "Board '%s' not found.",
+  "swimlane-title-not-found": "Swimlane '%s' not found.",
+  "list-title-not-found": "List '%s' not found.",
+  "label-not-found": "Label '%s' not found.",
+  "label-color-not-found": "Label color %s not found.",
+  "user-username-not-found": "Username '%s' not found.",
+  "comment-not-found": "Card with comment containing text '%s' not found.",
+  "globalSearch-title": "Search All Boards",
+  "no-cards-found": "No Cards Found",
+  "one-card-found": "One Card Found",
+  "n-cards-found": "%s Cards Found",
+  "n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found",
+  "operator-board": "board",
+  "operator-board-abbrev": "b",
+  "operator-swimlane": "swimlane",
+  "operator-swimlane-abbrev": "s",
+  "operator-list": "list",
+  "operator-list-abbrev": "l",
+  "operator-label": "label",
+  "operator-label-abbrev": "#",
+  "operator-user": "user",
+  "operator-user-abbrev": "@",
+  "operator-member": "member",
+  "operator-member-abbrev": "m",
+  "operator-assignee": "assignee",
+  "operator-assignee-abbrev": "a",
+  "operator-status": "status",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
+  "operator-sort": "sort",
+  "operator-comment": "comment",
+  "operator-has": "has",
+  "operator-limit": "limit",
+  "predicate-archived": "archived",
+  "predicate-open": "open",
+  "predicate-ended": "ended",
+  "predicate-all": "all",
+  "predicate-overdue": "overdue",
+  "predicate-week": "week",
+  "predicate-month": "month",
+  "predicate-quarter": "quarter",
+  "predicate-year": "year",
+  "predicate-due": "due",
+  "predicate-modified": "modified",
+  "predicate-created": "created",
+  "predicate-attachment": "attachment",
+  "predicate-description": "description",
+  "predicate-checklist": "checklist",
+  "predicate-start": "start",
+  "predicate-end": "end",
+  "predicate-assignee": "assignee",
+  "predicate-member": "member",
+  "predicate-public": "public",
+  "predicate-private": "private",
+  "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
+  "operator-sort-invalid": "sort of '%s' is invalid",
+  "operator-status-invalid": "'%s' is not a valid status",
+  "operator-has-invalid": "%s is not a valid existence check",
+  "operator-limit-invalid": "%s is not a valid limit.  Limit should be a positive integer.",
+  "next-page": "Next Page",
+  "previous-page": "Previous Page",
+  "heading-notes": "Notes",
+  "globalSearch-instructions-heading": "Search Instructions",
+  "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
+  "globalSearch-instructions-operators": "Available operators:",
+  "globalSearch-instructions-operator-board": "`__operator_board__:<title>` - cards in boards matching the specified *<title>*",
+  "globalSearch-instructions-operator-list": "`__operator_list__:<title>` - cards in lists matching the specified *<title>*",
+  "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - cards in swimlanes matching the specified *<title>*",
+  "globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - cards with a comment containing *<text>*.",
+  "globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - cards that have a label matching *<color>* or *<name>",
+  "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name | color>` - shorthand for `__operator_label__:<color>` or `__operator_label__:<name>`",
+  "globalSearch-instructions-operator-user": "`__operator_user__:<username>` - cards where *<username>* is a *member* or *assignee*",
+  "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - shorthand for `user:<username>`",
+  "globalSearch-instructions-operator-member": "`__operator_member__:<username>` - cards where *<username>* is a *member*",
+  "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - cards where *<username>* is an *assignee*",
+  "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - cards which are due up to *<n>* days from now.  `__operator_due__:__predicate_overdue__ lists all cards past their due date.",
+  "globalSearch-instructions-operator-created": "`__operator_created__:<n>` - cards which were created *<n>* days ago or less",
+  "globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - cards which were modified *<n>* days ago or less",
+  "globalSearch-instructions-operator-status": "`__operator_status__:<status>` - where *<status>* is one of the following:",
+  "globalSearch-instructions-status-archived": "`__predicate_archived__` - archived cards",
+  "globalSearch-instructions-status-all": "`__predicate_all__` - all archived and unarchived cards",
+  "globalSearch-instructions-status-ended": "`__predicate_ended__` - cards with an end date",
+  "globalSearch-instructions-status-public": "`__predicate_public__` - cards only in public boards",
+  "globalSearch-instructions-status-private": "`__predicate_private__` - cards only in private boards",
+  "globalSearch-instructions-operator-has": "`__operator_has__:<field>` - where *<field>* is one of `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` or `__predicate_member__`.  Placing a `-` in front of *<field>* searches for the absence of a value in that field (e.g. `has:-due` searches for cards without a due date).",
+  "globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - where *<sort-name>* is one of `__predicate_due__`, `__predicate_created__` or `__predicate_modified__`.  For a descending sort, place a `-` in front of the sort name.",
+  "globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - where *<n>* is a positive integer expressing the number of cards to be displayed per page.",
+  "globalSearch-instructions-notes-1": "Multiple operators may be specified.",
+  "globalSearch-instructions-notes-2": "Similar operators are *OR*ed together.  Cards that match any of the conditions will be returned.\n`__operator_list__:Available __operator_list__:Blocked` would return cards contained in any list named *Blocked* or *Available*.",
+  "globalSearch-instructions-notes-3": "Differing operators are *AND*ed together.  Only cards that match all of the differing operators are returned.  `__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.",
+  "globalSearch-instructions-notes-3-2": "Days can be specified as a positive or negative integer or using `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__` for the current period.",
+  "globalSearch-instructions-notes-4": "Text searches are case insensitive.",
+  "globalSearch-instructions-notes-5": "By default archived cards are not searched.",
+  "link-to-search": "Link to this search",
+  "excel-font": "Arial",
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names",
+  "archived-at": "archived at",
+  "sort-cards": "Sort Cards",
+  "cardsSortPopup-title": "Sort Cards",
+  "due-date": "Due Date",
+  "title-alphabetically": "Title (Alphabetically)",
+  "created-at-newest-first": "Created At (Newest First)",
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
+}

+ 4 - 1
i18n/es-MX.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/es-PE.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/es-PY.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/es.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/eu.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/fa-IR.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/fa.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "تاریخ اجرا",
   "due-date": "تاریخ اجرا",
   "title-alphabetically": "تیتر (به صورت الفبا)",
   "title-alphabetically": "تیتر (به صورت الفبا)",
   "created-at-newest-first": "ساخته شده در تاریخ (با اولویت جدید تر)",
   "created-at-newest-first": "ساخته شده در تاریخ (با اولویت جدید تر)",
-  "created-at-oldest-first": "ساخته شده در تاریخ (با اولویت قدیمی تر)"
+  "created-at-oldest-first": "ساخته شده در تاریخ (با اولویت قدیمی تر)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/fi.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Eräpäivä",
   "due-date": "Eräpäivä",
   "title-alphabetically": "Otsikko (Aakkosjärjestyksessä)",
   "title-alphabetically": "Otsikko (Aakkosjärjestyksessä)",
   "created-at-newest-first": "Luotu (Uusin ensin)",
   "created-at-newest-first": "Luotu (Uusin ensin)",
-  "created-at-oldest-first": "Luotu (Vanhin ensin)"
+  "created-at-oldest-first": "Luotu (Vanhin ensin)",
+  "links-heading": "Linkit",
+  "hide-system-messages-of-all-users": "Piilota kaikkien käyttäjien järjestelmäviestit",
+  "now-system-messages-of-all-users-are-hidden": "Nyt kaikkien käyttäjien järjestelmäviestit on piilotettu"
 }
 }

+ 4 - 1
i18n/fr.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Date d'échéance",
   "due-date": "Date d'échéance",
   "title-alphabetically": "Titre (Alphabétiquement)",
   "title-alphabetically": "Titre (Alphabétiquement)",
   "created-at-newest-first": "Date de création (Plus récentes en premier)",
   "created-at-newest-first": "Date de création (Plus récentes en premier)",
-  "created-at-oldest-first": "Date de création (Plus anciennes en premier)"
+  "created-at-oldest-first": "Date de création (Plus anciennes en premier)",
+  "links-heading": "Liens",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/gl.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/he.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "מועד סיום",
   "due-date": "מועד סיום",
   "title-alphabetically": "כותרת (לפי האלפבית)",
   "title-alphabetically": "כותרת (לפי האלפבית)",
   "created-at-newest-first": "מועד יצירה (החדש ביותר בהתחלה)",
   "created-at-newest-first": "מועד יצירה (החדש ביותר בהתחלה)",
-  "created-at-oldest-first": "מועד יצירה (הישן ביותר בהתחלה)"
+  "created-at-oldest-first": "מועד יצירה (הישן ביותר בהתחלה)",
+  "links-heading": "קישורים",
+  "hide-system-messages-of-all-users": "להסתיר את הודעות המערכת של כל המשתמשים",
+  "now-system-messages-of-all-users-are-hidden": "כעת הודעות המערכת של כל המשתמשים מוסתרות"
 }
 }

+ 4 - 1
i18n/hi.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 36 - 33
i18n/hr.i18n.json

@@ -132,10 +132,10 @@
   "board-private-info": "This board will be <strong>private</strong>.",
   "board-private-info": "This board will be <strong>private</strong>.",
   "board-public-info": "This board will be <strong>public</strong>.",
   "board-public-info": "This board will be <strong>public</strong>.",
   "boardChangeColorPopup-title": "Change Board Background",
   "boardChangeColorPopup-title": "Change Board Background",
-  "boardChangeTitlePopup-title": "Rename Board",
-  "boardChangeVisibilityPopup-title": "Change Visibility",
-  "boardChangeWatchPopup-title": "Change Watch",
-  "boardMenuPopup-title": "Board Settings",
+  "boardChangeTitlePopup-title": "Preimenuj ploču",
+  "boardChangeVisibilityPopup-title": "Promijeni vidljivost",
+  "boardChangeWatchPopup-title": "Promijeni praćenje",
+  "boardMenuPopup-title": "Postavke ploče",
   "boardChangeViewPopup-title": "Board View",
   "boardChangeViewPopup-title": "Board View",
   "boards": "Ploče",
   "boards": "Ploče",
   "board-view": "Board View",
   "board-view": "Board View",
@@ -144,27 +144,27 @@
   "board-view-collapse": "Collapse",
   "board-view-collapse": "Collapse",
   "board-view-gantt": "Gantt",
   "board-view-gantt": "Gantt",
   "board-view-lists": "Liste",
   "board-view-lists": "Liste",
-  "bucket-example": "Like “Bucket List” for example",
+  "bucket-example": "Na primjer, poput \"Liste zadataka\"",
   "cancel": "Odustani",
   "cancel": "Odustani",
   "card-archived": "Ova kartica prebačena je u arhivu.",
   "card-archived": "Ova kartica prebačena je u arhivu.",
   "board-archived": "Ova ploča prebačena je u arhivu.",
   "board-archived": "Ova ploča prebačena je u arhivu.",
   "card-comments-title": "Broj komentara na ovoj kartici je %s.",
   "card-comments-title": "Broj komentara na ovoj kartici je %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.",
-  "card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
-  "card-due": "Due",
-  "card-due-on": "Due on",
+  "card-delete-notice": "Brisanje je trajno. Izgubit ćete sve radnje povezane s ovom karticom.",
+  "card-delete-pop": "Sve radnje će biti uklonjene iz liste aktivnosti i nećete moći ponovo otvoriti karticu. Nema poništavanja radnje.",
+  "card-delete-suggest-archive": "Karticu možete premjestiti u arhivu da biste je uklonili s ploče i sačuvali aktivnost.",
+  "card-due": "Dospijeće",
+  "card-due-on": "Dospijeće na",
   "card-spent": "Provedeno vrijeme",
   "card-spent": "Provedeno vrijeme",
   "card-edit-attachments": "Uredi privitke",
   "card-edit-attachments": "Uredi privitke",
   "card-edit-custom-fields": "Uredi prilagođena polja",
   "card-edit-custom-fields": "Uredi prilagođena polja",
   "card-edit-labels": "Uredi oznake",
   "card-edit-labels": "Uredi oznake",
   "card-edit-members": "Uredi korisnike",
   "card-edit-members": "Uredi korisnike",
-  "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",
-  "cardCustomField-datePopup-title": "Change date",
+  "card-labels-title": "Promijenite oznake na kartici.",
+  "card-members-title": "Dodajte ili uklonite članove ploče s kartice.",
+  "card-start": "Početak",
+  "card-start-on": "Počinje od",
+  "cardAttachmentsPopup-title": "Privitak od",
+  "cardCustomField-datePopup-title": "Promjena datuma",
   "cardCustomFieldsPopup-title": "Uredi prilagođena polja",
   "cardCustomFieldsPopup-title": "Uredi prilagođena polja",
   "cardStartVotingPopup-title": "Pokreni glasanje",
   "cardStartVotingPopup-title": "Pokreni glasanje",
   "positiveVoteMembersPopup-title": "Proponents",
   "positiveVoteMembersPopup-title": "Proponents",
@@ -186,7 +186,7 @@
   "cardTemplatePopup-title": "Dodati predložak",
   "cardTemplatePopup-title": "Dodati predložak",
   "cards": "Kartice",
   "cards": "Kartice",
   "cards-count": "Kartice",
   "cards-count": "Kartice",
-  "casSignIn": "Sign In with CAS",
+  "casSignIn": "Prijavite se s CAS-om",
   "cardType-card": "Kartica",
   "cardType-card": "Kartica",
   "cardType-linkedCard": "Povezane kartice",
   "cardType-linkedCard": "Povezane kartice",
   "cardType-linkedBoard": "Povezane ploče",
   "cardType-linkedBoard": "Povezane ploče",
@@ -202,12 +202,12 @@
   "changeSettingsPopup-title": "Promijeni postavke",
   "changeSettingsPopup-title": "Promijeni postavke",
   "subtasks": "Podzadaci",
   "subtasks": "Podzadaci",
   "checklists": "Liste provjere",
   "checklists": "Liste provjere",
-  "click-to-star": "Click to star this board.",
-  "click-to-unstar": "Click to unstar this board.",
-  "clipboard": "Clipboard or drag & drop",
+  "click-to-star": "Kliknite da biste ovu ploču označili zvjezdicom.",
+  "click-to-unstar": "Kliknite da biste uklonili zvjezdicu s ove ploče.",
+  "clipboard": "Međuspremnik ili povucite i ispustite",
   "close": "Zatvori",
   "close": "Zatvori",
   "close-board": "Zatvori ploču",
   "close-board": "Zatvori ploču",
-  "close-board-pop": "You will be able to restore the board by clicking the “Archive” button from the home header.",
+  "close-board-pop": "Ploču ćete moći vratiti klikom na gumb \"Arhiviraj\" u zaglavlju.",
   "color-black": "crna",
   "color-black": "crna",
   "color-blue": "plava",
   "color-blue": "plava",
   "color-crimson": "tamnocrvena",
   "color-crimson": "tamnocrvena",
@@ -219,26 +219,26 @@
   "color-lime": "lime",
   "color-lime": "lime",
   "color-magenta": "magenta",
   "color-magenta": "magenta",
   "color-mistyrose": "mistyrose",
   "color-mistyrose": "mistyrose",
-  "color-navy": "navy",
+  "color-navy": "mornarsko plava",
   "color-orange": "orange",
   "color-orange": "orange",
   "color-paleturquoise": "paleturquoise",
   "color-paleturquoise": "paleturquoise",
   "color-peachpuff": "peachpuff",
   "color-peachpuff": "peachpuff",
-  "color-pink": "pink",
+  "color-pink": "ružičasta",
   "color-plum": "plum",
   "color-plum": "plum",
-  "color-purple": "purple",
-  "color-red": "red",
+  "color-purple": "ljubičasta",
+  "color-red": "crvena",
   "color-saddlebrown": "saddlebrown",
   "color-saddlebrown": "saddlebrown",
-  "color-silver": "silver",
+  "color-silver": "srebrna",
   "color-sky": "sky",
   "color-sky": "sky",
   "color-slateblue": "slateblue",
   "color-slateblue": "slateblue",
-  "color-white": "white",
-  "color-yellow": "yellow",
+  "color-white": "bijela",
+  "color-yellow": "žuta",
   "unset-color": "Unset",
   "unset-color": "Unset",
   "comment": "Komentiraj",
   "comment": "Komentiraj",
   "comment-placeholder": "Napiši komentar",
   "comment-placeholder": "Napiši komentar",
   "comment-only": "Comment only",
   "comment-only": "Comment only",
   "comment-only-desc": "Can comment on cards only.",
   "comment-only-desc": "Can comment on cards only.",
-  "no-comments": "No comments",
+  "no-comments": "Nema komentara",
   "no-comments-desc": "Can not see comments and activities.",
   "no-comments-desc": "Can not see comments and activities.",
   "worker": "Worker",
   "worker": "Worker",
   "worker-desc": "Can only move cards, assign itself to card and comment.",
   "worker-desc": "Can only move cards, assign itself to card and comment.",
@@ -266,8 +266,8 @@
   "custom-field-date": "Datum",
   "custom-field-date": "Datum",
   "custom-field-dropdown": "Padajuća lista",
   "custom-field-dropdown": "Padajuća lista",
   "custom-field-dropdown-none": "(none)",
   "custom-field-dropdown-none": "(none)",
-  "custom-field-dropdown-options": "List Options",
-  "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+  "custom-field-dropdown-options": "Opcije popisa",
+  "custom-field-dropdown-options-placeholder": "Pritisnite enter da biste dodali više opcija",
   "custom-field-dropdown-unknown": "(nepoznato)",
   "custom-field-dropdown-unknown": "(nepoznato)",
   "custom-field-number": "Broj",
   "custom-field-number": "Broj",
   "custom-field-text": "Tekst",
   "custom-field-text": "Tekst",
@@ -478,7 +478,7 @@
   "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
   "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": "Ukloniti korisnika?",
   "removeMemberPopup-title": "Ukloniti korisnika?",
   "rename": "Preimenovati",
   "rename": "Preimenovati",
-  "rename-board": "Rename Board",
+  "rename-board": "Preimenuj ploču",
   "restore": "Restore",
   "restore": "Restore",
   "save": "Spremi",
   "save": "Spremi",
   "search": "Traži",
   "search": "Traži",
@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/hu.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/hy.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/id.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/ig.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/it.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Data di scadenza",
   "due-date": "Data di scadenza",
   "title-alphabetically": "Titolo (ordine alfabetico)",
   "title-alphabetically": "Titolo (ordine alfabetico)",
   "created-at-newest-first": "Data di creazione (dalla più nuova)",
   "created-at-newest-first": "Data di creazione (dalla più nuova)",
-  "created-at-oldest-first": "Data di creazione (dalla più vecchia)"
+  "created-at-oldest-first": "Data di creazione (dalla più vecchia)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 7 - 4
i18n/ja.i18n.json

@@ -322,8 +322,8 @@
   "error-user-notAllowSelf": "自分を招待することはできません。",
   "error-user-notAllowSelf": "自分を招待することはできません。",
   "error-user-notCreated": "ユーザーが作成されていません",
   "error-user-notCreated": "ユーザーが作成されていません",
   "error-username-taken": "このユーザ名は既に使用されています",
   "error-username-taken": "このユーザ名は既に使用されています",
-  "error-orgname-taken": "This organization name is already taken",
-  "error-teamname-taken": "This team name is already taken",
+  "error-orgname-taken": "この組織名はすでに使われています",
+  "error-teamname-taken": "このチーム名はすでに使われています",
   "error-email-taken": "メールは既に受け取られています",
   "error-email-taken": "メールは既に受け取られています",
   "export-board": "ボードのエクスポート",
   "export-board": "ボードのエクスポート",
   "export-board-json": "ボードをJSONにエクスポート",
   "export-board-json": "ボードをJSONにエクスポート",
@@ -931,7 +931,7 @@
   "predicate-private": "非公開",
   "predicate-private": "非公開",
   "operator-unknown-error": "%sは演算子ではありません",
   "operator-unknown-error": "%sは演算子ではありません",
   "operator-number-expected": "演算子 __operator__ には数値の指定が必要ですが、「__value__」が入力されました",
   "operator-number-expected": "演算子 __operator__ には数値の指定が必要ですが、「__value__」が入力されました",
-  "operator-sort-invalid": "sort of '%s' is invalid",
+  "operator-sort-invalid": "ソート「%s」は無効です",
   "operator-status-invalid": "「%s」は無効なステータスです",
   "operator-status-invalid": "「%s」は無効なステータスです",
   "operator-has-invalid": "%s is not a valid existence check",
   "operator-has-invalid": "%s is not a valid existence check",
   "operator-limit-invalid": "%s is not a valid limit.  Limit should be a positive integer.",
   "operator-limit-invalid": "%s is not a valid limit.  Limit should be a positive integer.",
@@ -980,5 +980,8 @@
   "due-date": "期限日",
   "due-date": "期限日",
   "title-alphabetically": "タイトル(アルファベット順)",
   "title-alphabetically": "タイトル(アルファベット順)",
   "created-at-newest-first": "作成日(新しいものから)",
   "created-at-newest-first": "作成日(新しいものから)",
-  "created-at-oldest-first": "作成日(古いものから)"
+  "created-at-oldest-first": "作成日(古いものから)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/ka.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/km.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/ko.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/lt.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/lv.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/mk.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/mn.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 5 - 2
i18n/nl.i18n.json

@@ -532,7 +532,7 @@
   "custom-login-logo-image-url": "URL Voor Maatwerk Login Logo Afbeelding",
   "custom-login-logo-image-url": "URL Voor Maatwerk Login Logo Afbeelding",
   "custom-login-logo-link-url": "URL Voor Maatwerk Login Logo Link",
   "custom-login-logo-link-url": "URL Voor Maatwerk Login Logo Link",
   "text-below-custom-login-logo": "Tekst onder Maatwerk Login Logo",
   "text-below-custom-login-logo": "Tekst onder Maatwerk Login Logo",
-  "automatic-linked-url-schemes": "Maatwerk URL's die automatisch klikbaar zouden moeten zijn. Een URL per regel.",
+  "automatic-linked-url-schemes": "Maatwerk URL-schema's die automatisch klikbaar zouden moeten zijn. Een URL per regel.",
   "username": "Gebruikersnaam",
   "username": "Gebruikersnaam",
   "import-usernames": "Importeer Gebruikersnamen",
   "import-usernames": "Importeer Gebruikersnamen",
   "view-it": "Bekijk het",
   "view-it": "Bekijk het",
@@ -980,5 +980,8 @@
   "due-date": "vervaldatum",
   "due-date": "vervaldatum",
   "title-alphabetically": "Titel (Alfabetisch)",
   "title-alphabetically": "Titel (Alfabetisch)",
   "created-at-newest-first": "Aangemaakt op (Nieuwste Eerst)",
   "created-at-newest-first": "Aangemaakt op (Nieuwste Eerst)",
-  "created-at-oldest-first": "Aangemaakt op (Oudste Eerst)"
+  "created-at-oldest-first": "Aangemaakt op (Oudste Eerst)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Verberg systeemberichten voor alle gebruikers",
+  "now-system-messages-of-all-users-are-hidden": "Systeemberichten zijn nu verborgen voor alle gebruikers"
 }
 }

+ 4 - 1
i18n/oc.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/pa.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 5 - 2
i18n/pl.i18n.json

@@ -532,7 +532,7 @@
   "custom-login-logo-image-url": "URL obrazu logo ekranu logowania",
   "custom-login-logo-image-url": "URL obrazu logo ekranu logowania",
   "custom-login-logo-link-url": "URL linku logo ekranu logowania",
   "custom-login-logo-link-url": "URL linku logo ekranu logowania",
   "text-below-custom-login-logo": "Tekst pod logo na ekranie logowania",
   "text-below-custom-login-logo": "Tekst pod logo na ekranie logowania",
-  "automatic-linked-url-schemes": "Custom URL Schemes which should automatically be clickable. One URL Scheme per line",
+  "automatic-linked-url-schemes": "Schematy adresów URL, które powinny być automatycznie przekształcane w aktywne. Wpisz jeden schemat URL w każdej linii",
   "username": "Nazwa użytkownika",
   "username": "Nazwa użytkownika",
   "import-usernames": "Importuj użytkowników",
   "import-usernames": "Importuj użytkowników",
   "view-it": "Zobacz",
   "view-it": "Zobacz",
@@ -980,5 +980,8 @@
   "due-date": "terminu wykonania",
   "due-date": "terminu wykonania",
   "title-alphabetically": "nazwy (alfabetycznie)",
   "title-alphabetically": "nazwy (alfabetycznie)",
   "created-at-newest-first": "daty utworzenia (najpierw najnowsze)",
   "created-at-newest-first": "daty utworzenia (najpierw najnowsze)",
-  "created-at-oldest-first": "daty utworzenia (najpierw najstarsze)"
+  "created-at-oldest-first": "daty utworzenia (najpierw najstarsze)",
+  "links-heading": "Linki",
+  "hide-system-messages-of-all-users": "Ukryj powiadomienia systemowe wszystkich użytkowników",
+  "now-system-messages-of-all-users-are-hidden": "Odtąd powiadomienia systemowe wszystkich użytkowników będą ukryte"
 }
 }

+ 4 - 1
i18n/pt-BR.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Prazo Final",
   "due-date": "Prazo Final",
   "title-alphabetically": "Título (alfabeticamente) ",
   "title-alphabetically": "Título (alfabeticamente) ",
   "created-at-newest-first": "Criado em (o mais recente primeiro) ",
   "created-at-newest-first": "Criado em (o mais recente primeiro) ",
-  "created-at-oldest-first": "Criado em (o mais antigo primeiro) "
+  "created-at-oldest-first": "Criado em (o mais antigo primeiro) ",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Esconder mensagens do sistema para todos os usuários",
+  "now-system-messages-of-all-users-are-hidden": "Agora as mensagens do sistema para todos os usuários estão escondidas "
 }
 }

+ 4 - 1
i18n/pt.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/ro.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 20 - 17
i18n/ru.i18n.json

@@ -943,30 +943,30 @@
   "globalSearch-instructions-operators": "Доступные операторы:",
   "globalSearch-instructions-operators": "Доступные операторы:",
   "globalSearch-instructions-operator-board": "`__operator_board__:<title>` - карточки соответствуют: *<title>*",
   "globalSearch-instructions-operator-board": "`__operator_board__:<title>` - карточки соответствуют: *<title>*",
   "globalSearch-instructions-operator-list": "`__operator_list__:<title>` - карточки в списке соответствуют: *<title>*",
   "globalSearch-instructions-operator-list": "`__operator_list__:<title>` - карточки в списке соответствуют: *<title>*",
-  "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - cards in swimlanes matching the specified *<title>*",
-  "globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - cards with a comment containing *<text>*.",
-  "globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - cards that have a label matching *<color>* or *<name>",
-  "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name | color>` - shorthand for `__operator_label__:<color>` or `__operator_label__:<name>`",
-  "globalSearch-instructions-operator-user": "`__operator_user__:<username>` - cards where *<username>* is a *member* or *assignee*",
-  "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - shorthand for `user:<username>`",
-  "globalSearch-instructions-operator-member": "`__operator_member__:<username>` - cards where *<username>* is a *member*",
-  "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - cards where *<username>* is an *assignee*",
-  "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - cards which are due up to *<n>* days from now.  `__operator_due__:__predicate_overdue__ lists all cards past their due date.",
-  "globalSearch-instructions-operator-created": "`__operator_created__:<n>` - cards which were created *<n>* days ago or less",
-  "globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - cards which were modified *<n>* days ago or less",
-  "globalSearch-instructions-operator-status": "`__operator_status__:<status>` - where *<status>* is one of the following:",
+  "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - карточки на дорожках, соответствующих *<title>*",
+  "globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - карточки с комментарием содержащим *<text>*.",
+  "globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - карточки, которые имеют метку соответствующую *<color>* or *<name>",
+  "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name | color>` - сокращение для `__operator_label__:<color>` или `__operator_label__:<name>`",
+  "globalSearch-instructions-operator-user": "`__operator_user__:<username>` - карточки в которых *<username>* *участник* или *исполнитель*",
+  "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - сокращение для `пользователь:<username>`",
+  "globalSearch-instructions-operator-member": "`__operator_member__:<username>` - карточки, в которых *<username>* *участник*",
+  "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - карточки, в которых *<username>* *исполнитель*",
+  "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - карточки с датой завершения до *<n>* дней от текущей даты.  `__operator_due__:__predicate_overdue__ список всех просроченных карточек.",
+  "globalSearch-instructions-operator-created": "`__operator_created__:<n>` - карточки, которые были созданы до *<n>* дней назад",
+  "globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - карточки, который изменены до *<n>* дней назад",
+  "globalSearch-instructions-operator-status": "`__operator_status__:<status>` - где *<status>* что-то из следующего:",
   "globalSearch-instructions-status-archived": "`__predicate_archived__` - архивированные карточки",
   "globalSearch-instructions-status-archived": "`__predicate_archived__` - архивированные карточки",
   "globalSearch-instructions-status-all": "`__predicate_all__` - все архивированные и не архивированные карточки",
   "globalSearch-instructions-status-all": "`__predicate_all__` - все архивированные и не архивированные карточки",
   "globalSearch-instructions-status-ended": "`__predicate_ended__` - карточки с датой завершения",
   "globalSearch-instructions-status-ended": "`__predicate_ended__` - карточки с датой завершения",
   "globalSearch-instructions-status-public": "`__predicate_public__` - карточки только на публичных досках",
   "globalSearch-instructions-status-public": "`__predicate_public__` - карточки только на публичных досках",
   "globalSearch-instructions-status-private": "`__predicate_private__` - карточки только на личных досках",
   "globalSearch-instructions-status-private": "`__predicate_private__` - карточки только на личных досках",
-  "globalSearch-instructions-operator-has": "`__operator_has__:<field>` - where *<field>* is one of `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` or `__predicate_member__`.  Placing a `-` in front of *<field>* searches for the absence of a value in that field (e.g. `has:-due` searches for cards without a due date).",
-  "globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - where *<sort-name>* is one of `__predicate_due__`, `__predicate_created__` or `__predicate_modified__`.  For a descending sort, place a `-` in front of the sort name.",
-  "globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - where *<n>* is a positive integer expressing the number of cards to be displayed per page.",
+  "globalSearch-instructions-operator-has": "`__operator_has__:<field>` - где *<field>* что-либо из `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` или `__predicate_member__`.  Указание `-` перед *<field>* производит поиск по отсутствию значения в указанном поле. (напр. `has:-due` поиск карточек без даты завершения).",
+  "globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - где*<sort-name>* что-либо из `__predicate_due__`, `__predicate_created__` или `__predicate_modified__`.  Для сортировки по убыванию, укажите `-` перед названием сортировки.",
+  "globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - где *<n>* положительное целое определяющее количество карточек на одной странице.",
   "globalSearch-instructions-notes-1": "Может быть задано несколько операторов.",
   "globalSearch-instructions-notes-1": "Может быть задано несколько операторов.",
   "globalSearch-instructions-notes-2": "Одинаковые операторы объединяются логическим \"ИЛИ\", например:\n`__operator_list__:Available __operator_list__:Blocked` вернет карточки, которые содержатся в списке *Blocked* или *Available*.",
   "globalSearch-instructions-notes-2": "Одинаковые операторы объединяются логическим \"ИЛИ\", например:\n`__operator_list__:Available __operator_list__:Blocked` вернет карточки, которые содержатся в списке *Blocked* или *Available*.",
   "globalSearch-instructions-notes-3": "Разные операторы объединяются логическим \"И\". Возвращаются только объекты удовлетворяющие всем заданным условиям.`__operator_list__:Available __operator_label__:red` вернет карточки, которые содержатся в списке *Available* и имеют метку *red*.",
   "globalSearch-instructions-notes-3": "Разные операторы объединяются логическим \"И\". Возвращаются только объекты удовлетворяющие всем заданным условиям.`__operator_list__:Available __operator_label__:red` вернет карточки, которые содержатся в списке *Available* и имеют метку *red*.",
-  "globalSearch-instructions-notes-3-2": "Days can be specified as a positive or negative integer or using `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__` for the current period.",
+  "globalSearch-instructions-notes-3-2": "Количество дней может быть задано положительным или отрицательным целым или используя `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` или `__predicate_year__` для текущего периода.",
   "globalSearch-instructions-notes-4": "Текстовый поиск нечувствителен к регистру символов.",
   "globalSearch-instructions-notes-4": "Текстовый поиск нечувствителен к регистру символов.",
   "globalSearch-instructions-notes-5": "По умолчанию, поиск в архивированных карточках не производится.",
   "globalSearch-instructions-notes-5": "По умолчанию, поиск в архивированных карточках не производится.",
   "link-to-search": "Ссылка на этот поиск",
   "link-to-search": "Ссылка на этот поиск",
@@ -980,5 +980,8 @@
   "due-date": "Назначенная дата",
   "due-date": "Назначенная дата",
   "title-alphabetically": "Название (по алфавиту)",
   "title-alphabetically": "Название (по алфавиту)",
   "created-at-newest-first": "Дата создания (сначала новые)",
   "created-at-newest-first": "Дата создания (сначала новые)",
-  "created-at-oldest-first": "Дата создания (сначала старые)"
+  "created-at-oldest-first": "Дата создания (сначала старые)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/sk.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/sl.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/sr.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/sv.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Förfallodatum",
   "due-date": "Förfallodatum",
   "title-alphabetically": "Titel (Alfabetisk)",
   "title-alphabetically": "Titel (Alfabetisk)",
   "created-at-newest-first": "Skapad den (Nyast först)",
   "created-at-newest-first": "Skapad den (Nyast först)",
-  "created-at-oldest-first": "Skapad den (äldst först)"
+  "created-at-oldest-first": "Skapad den (äldst först)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/sw.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/ta.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/th.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/tr.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/uk.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 153 - 150
i18n/vi.i18n.json

@@ -1,52 +1,52 @@
 {
 {
   "accept": "Chấp nhận",
   "accept": "Chấp nhận",
   "act-activity-notify": "Thông báo hoạt động",
   "act-activity-notify": "Thông báo hoạt động",
-  "act-addAttachment": "thêm tập tin đính kèm __attachment__  vào thẻ __list__ tại danh sách __list__  tại đường bơi __swimlane__ tại bảng __board__",
-  "act-deleteAttachment": "xóa tập tin đính kèm __attachment__ tại thẻ __card__ tại danh sách __list__ tại đường bơi __swimlane__ tại bảng __board__ ",
-  "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-addLabel": "Đã thêm nhãn __label__ vào thẻ  __card__ tại danh sách __list__ tại luồng __swimlane__ tại bảng __board__",
-  "act-addedLabel": "Đã thêm nhãn __label__ vào thẻ  __card__ tại danh sách __list__ tại luồng __swimlane__ tại bảng __board__",
-  "act-removeLabel": "Đã xóa nhãn __label__ từ thẻ  __card__ tại danh sách __list__ tại luồng __swimlane__ tại bảng __board__",
-  "act-removedLabel": "Đã xóa nhãn __label__ từ thẻ  __card__ tại danh sách __list__ tại luồng __swimlane__ tại bảng __board__",
-  "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-completeChecklist": "đã hoàn thành checklist __checklist__ tại thẻ __card__ tại danh sách __list__ tại luồng __swimlane__ tại bảng __board__",
-  "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
-  "act-createBoard": "created board __board__",
-  "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
-  "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+  "act-addAttachment": "thêm tập tin đính kèm __attachment__  vào thẻ __list__ tại danh sách __list__  tại làn ngang __swimlane__ tại bảng __board__",
+  "act-deleteAttachment": "xóa tập tin đính kèm __attachment__ tại thẻ __card__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__ ",
+  "act-addSubtask": "đã thêm nhiệm vụ con __subtask__ vào thẻ __card__ tại danh sách __list__ tại làn ngang __swimlane__ at board __board__",
+  "act-addLabel": "Đã thêm nhãn __label__ vào thẻ  __card__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
+  "act-addedLabel": "Đã thêm nhãn __label__ vào thẻ  __card__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
+  "act-removeLabel": "Đã xóa nhãn __label__ từ thẻ  __card__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
+  "act-removedLabel": "Đã xóa nhãn __label__ từ thẻ  __card__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
+  "act-addChecklist": "đã thêm checklist __checklist__ vào thẻ __card__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
+  "act-addChecklistItem": "đã thêm mục checklist __checklistItem__ vào checklist __checklist__ tại thẻ __card__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
+  "act-removeChecklist": "đã xóa checklist __checklist__ từ thẻ __card__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
+  "act-removeChecklistItem": "đã xóa mục checklist __checklistItem__ từ checklist __checkList__ tại thẻ __card__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
+  "act-checkedItem": "đã đánh dấu hoàn thành mục __checklistItem__ của checklist __checklist__ tại thẻ __card__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
+  "act-uncheckedItem": "đã bỏ đánh dấu hoàn thành mục __checklistItem__ của checklist __checklist__ tại thẻ __card__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
+  "act-completeChecklist": "đã hoàn thành checklist __checklist__ tại thẻ __card__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
+  "act-uncompleteChecklist": "đã bỏ đánh dấu hoàn thành checklist __checklist__ tại thẻ __card__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
+  "act-addComment": "đã bình luận trên thẻ __card__: __comment__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
+  "act-editComment": "đã sửa bình luận trên thẻ __card__: __comment__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
+  "act-deleteComment": "đã xóa bình luận trên thẻ __card__: __comment__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
+  "act-createBoard": "đã tạo bảng __board__",
+  "act-createSwimlane": "đã tạo làn ngang __swimlane__ tới bảng __board__",
+  "act-createCard": "đã tạo thẻ __card__ vào danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
   "act-createCustomField": "đã tạo trường __customField__ tại bảng __board__",
   "act-createCustomField": "đã tạo trường __customField__ tại bảng __board__",
   "act-deleteCustomField": "đã xóa trường tùy chỉnh __customField__ tại bảng __board__",
   "act-deleteCustomField": "đã xóa trường tùy chỉnh __customField__ tại bảng __board__",
-  "act-setCustomField": "trường tùy chỉnh đã chỉnh sửa __customField__: __customFieldValue__ Tại thẻ __card__ tại danh sách __list__ tại luồng __swimlane__ tại bảng __board__",
-  "act-createList": "added list __list__ to board __board__",
+  "act-setCustomField": "trường tùy chỉnh đã chỉnh sửa __customField__: __customFieldValue__ Tại thẻ __card__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
+  "act-createList": "đã thêm danh sách __list__ vàng bảng __board__",
   "act-addBoardMember": "đã thêm thành viên __member__ vào bảng __board__",
   "act-addBoardMember": "đã thêm thành viên __member__ vào bảng __board__",
-  "act-archivedBoard": "Board __board__ moved to Archive",
-  "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
-  "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
-  "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+  "act-archivedBoard": "Bảng __board__ đã được chuyển đến Lưu trữ",
+  "act-archivedCard": "Thẻ __card__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__ được chuyển vào Lưu trữ",
+  "act-archivedList": "Danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__ đã chuyển đến Lưu trữ",
+  "act-archivedSwimlane": "Làn ngang __swimlane__ tại bảng __board__ được chuyển đến Lưu trữ",
   "act-importBoard": "đã nhập bảng __board__",
   "act-importBoard": "đã nhập bảng __board__",
-  "act-importCard": "imported card  __card__ to list __list__ at swimlane __swimlane__ at board __board__",
-  "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
-  "act-joinMember": "đã thêm thành viên __member__ vào thẻ __card__ tại danh sách __list__ tại luồng __swimlane__ at board __board__",
-  "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
-  "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
-  "act-removeBoardMember": "removed member __member__ from board __board__",
-  "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
-  "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+  "act-importCard": "đã nhập thẻ  __card__ vào danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
+  "act-importList": "đã nhập danh sách __list__ vào làn ngang __swimlane__ tại bảng __board__",
+  "act-joinMember": "đã thêm thành viên __member__ vào thẻ __card__ tại danh sách __list__ tại làn ngang __swimlane__ at board __board__",
+  "act-moveCard": "đã di chuyển thẻ __card__ tại bảng __board__ từ danh sách __oldList__ tại làn ngang __oldSwimlane__ tới danh sách __list__ tại làn ngang __swimlane__",
+  "act-moveCardToOtherBoard": "đã di chuyển thẻ __card__ từ danh sách __oldList__ tại làn ngang __oldSwimlane__ tại bảng __oldBoard__ tới danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
+  "act-removeBoardMember": "đã xóa thành viên __member__ khỏi bảng __board__",
+  "act-restoredCard": "đã khôi phục thẻ __card__ vào danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
+  "act-unjoinMember": "đã xóa thành viên __member__ từ thẻ __card__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
   "act-withBoardTitle": "__board__",
   "act-withBoardTitle": "__board__",
   "act-withCardTitle": "[__board__] __card__",
   "act-withCardTitle": "[__board__] __card__",
   "actions": "Hành Động",
   "actions": "Hành Động",
   "activities": "Hoạt Động",
   "activities": "Hoạt Động",
   "activity": "Hoạt Động",
   "activity": "Hoạt Động",
   "activity-added": "đã thêm %s vào %s",
   "activity-added": "đã thêm %s vào %s",
-  "activity-archived": "%s đã chuyển đến Lưu trữ",
+  "activity-archived": "đã chuyển %s đến Lưu trữ",
   "activity-attached": "đã đính kèm %s vào %s",
   "activity-attached": "đã đính kèm %s vào %s",
   "activity-created": "đã tạo %s",
   "activity-created": "đã tạo %s",
   "activity-customfield-created": "đã tạo trường tuỳ chỉnh %s",
   "activity-customfield-created": "đã tạo trường tuỳ chỉnh %s",
@@ -71,7 +71,7 @@
   "add": "Thêm",
   "add": "Thêm",
   "activity-checked-item-card": "đã hoàn thành %s trong checklist %s",
   "activity-checked-item-card": "đã hoàn thành %s trong checklist %s",
   "activity-unchecked-item-card": "đã bỏ đánh dấu hoàn thành %s trong checklist %s",
   "activity-unchecked-item-card": "đã bỏ đánh dấu hoàn thành %s trong checklist %s",
-  "activity-checklist-completed-card": "đã hoàn thành checklist __checklist__ tại thẻ __card__ tại danh sách __list__ tại luồng __swimlane__ tại bảng __board__",
+  "activity-checklist-completed-card": "đã hoàn thành checklist __checklist__ tại thẻ __card__ tại danh sách __list__ tại làn ngang __swimlane__ tại bảng __board__",
   "activity-checklist-uncompleted-card": "chưa hoàn thành checklist",
   "activity-checklist-uncompleted-card": "chưa hoàn thành checklist",
   "activity-editComment": "lời bình đã sửa",
   "activity-editComment": "lời bình đã sửa",
   "activity-deleteComment": "đã xoá lời bình %s",
   "activity-deleteComment": "đã xoá lời bình %s",
@@ -82,7 +82,7 @@
   "add-attachment": "Thêm Bản Đính Kèm",
   "add-attachment": "Thêm Bản Đính Kèm",
   "add-board": "Thêm Bảng",
   "add-board": "Thêm Bảng",
   "add-card": "Thêm Thẻ",
   "add-card": "Thêm Thẻ",
-  "add-swimlane": "Add Swimlane",
+  "add-swimlane": "Thêm làn ngang",
   "add-subtask": "Thêm Nhiệm vụ phụ",
   "add-subtask": "Thêm Nhiệm vụ phụ",
   "add-checklist": "Thêm Danh Sách Kiểm Tra",
   "add-checklist": "Thêm Danh Sách Kiểm Tra",
   "add-checklist-item": "Thêm Một Mục Vào Danh Sách Kiểm Tra",
   "add-checklist-item": "Thêm Một Mục Vào Danh Sách Kiểm Tra",
@@ -100,14 +100,14 @@
   "all-boards": "Tất cả các bảng",
   "all-boards": "Tất cả các bảng",
   "and-n-other-card": "Và __count__ thẻ khác",
   "and-n-other-card": "Và __count__ thẻ khác",
   "and-n-other-card_plural": "Và __count__ thẻ khác",
   "and-n-other-card_plural": "Và __count__ thẻ khác",
-  "apply": "Ứng Dụng",
+  "apply": "Áp Dụng",
   "app-is-offline": "Đang tải, vui lòng đợi. Làm mới trang sẽ làm mất dữ liệu. Nếu quá trình tải không hoạt động, vui lòng kiểm tra lại máy chủ.",
   "app-is-offline": "Đang tải, vui lòng đợi. Làm mới trang sẽ làm mất dữ liệu. Nếu quá trình tải không hoạt động, vui lòng kiểm tra lại máy chủ.",
   "archive": "Di chuyển đến Lưu trữ",
   "archive": "Di chuyển đến Lưu trữ",
   "archive-all": "Di chuyển tất cả vào Lưu trữ",
   "archive-all": "Di chuyển tất cả vào Lưu trữ",
   "archive-board": "Di chuyển Bảng sang Lưu trữ",
   "archive-board": "Di chuyển Bảng sang Lưu trữ",
   "archive-card": "Di chuyển Thẻ vào Lưu trữ",
   "archive-card": "Di chuyển Thẻ vào Lưu trữ",
   "archive-list": "Di chuyển Danh sách vào Lưu trữ",
   "archive-list": "Di chuyển Danh sách vào Lưu trữ",
-  "archive-swimlane": "Move Swimlane to Archive",
+  "archive-swimlane": "Di chuyển Làn ngang vào Lưu trữ",
   "archive-selection": "Di chuyển lựa chọn vào Lưu trữ",
   "archive-selection": "Di chuyển lựa chọn vào Lưu trữ",
   "archiveBoardPopup-title": "Chuyển Bảng sang Lưu trữ?",
   "archiveBoardPopup-title": "Chuyển Bảng sang Lưu trữ?",
   "archived-items": "Lưu Trữ",
   "archived-items": "Lưu Trữ",
@@ -129,8 +129,8 @@
   "board-change-color": "Đổi màu",
   "board-change-color": "Đổi màu",
   "board-nb-stars": "%s sao",
   "board-nb-stars": "%s sao",
   "board-not-found": "Không tìm được bảng",
   "board-not-found": "Không tìm được bảng",
-  "board-private-info": "Bảng này sẽ chuyển sang <strong> chế độ private</strong>.",
-  "board-public-info": "Bảng này sẽ chuyển sang <strong> chế độ public</strong>.",
+  "board-private-info": "Bảng này sẽ chuyển sang chế độ <strong>riêng tư</strong>.",
+  "board-public-info": "Bảng này sẽ chuyển sang chế độ <strong>công khai</strong>.",
   "boardChangeColorPopup-title": "Thay hình nền của bảng",
   "boardChangeColorPopup-title": "Thay hình nền của bảng",
   "boardChangeTitlePopup-title": "Đổi tên bảng",
   "boardChangeTitlePopup-title": "Đổi tên bảng",
   "boardChangeVisibilityPopup-title": "Đổi cách hiển thị",
   "boardChangeVisibilityPopup-title": "Đổi cách hiển thị",
@@ -140,11 +140,11 @@
   "boards": "Bảng",
   "boards": "Bảng",
   "board-view": "Kiểu xem Bảng",
   "board-view": "Kiểu xem Bảng",
   "board-view-cal": "Lịch",
   "board-view-cal": "Lịch",
-  "board-view-swimlanes": "Thu gọn",
+  "board-view-swimlanes": "Làn ngang",
   "board-view-collapse": "Thu gọn",
   "board-view-collapse": "Thu gọn",
-  "board-view-gantt": "Gantt",
+  "board-view-gantt": "Biểu đồ Gantt",
   "board-view-lists": "Danh sách",
   "board-view-lists": "Danh sách",
-  "bucket-example": "Like “Bucket List” for example",
+  "bucket-example": "Ví dụ như \"Danh sách nhóm\"",
   "cancel": "Hủy",
   "cancel": "Hủy",
   "card-archived": "Thẻ này đã được chuyển đến Lưu trữ.",
   "card-archived": "Thẻ này đã được chuyển đến Lưu trữ.",
   "board-archived": "Bảng này đã được chuyển đến Lưu trữ.",
   "board-archived": "Bảng này đã được chuyển đến Lưu trữ.",
@@ -184,12 +184,12 @@
   "cardMembersPopup-title": "Thành Viên",
   "cardMembersPopup-title": "Thành Viên",
   "cardMorePopup-title": "Thêm nữa",
   "cardMorePopup-title": "Thêm nữa",
   "cardTemplatePopup-title": "Tạo mẫu",
   "cardTemplatePopup-title": "Tạo mẫu",
-  "cards": "Cards",
-  "cards-count": "Cards",
+  "cards": "Thẻ",
+  "cards-count": "Thẻ",
   "casSignIn": "Đăng nhập bằng CAS",
   "casSignIn": "Đăng nhập bằng CAS",
   "cardType-card": "Thẻ",
   "cardType-card": "Thẻ",
-  "cardType-linkedCard": "Linked Card",
-  "cardType-linkedBoard": "Linked Board",
+  "cardType-linkedCard": "Thẻ đã liên kết",
+  "cardType-linkedBoard": "Bảng đã liên kết",
   "change": "Thay đổi",
   "change": "Thay đổi",
   "change-avatar": "Thay đổi hình đại diện",
   "change-avatar": "Thay đổi hình đại diện",
   "change-password": "Đổi mật khẩu",
   "change-password": "Đổi mật khẩu",
@@ -201,7 +201,7 @@
   "changePermissionsPopup-title": "Thay đổi quyền",
   "changePermissionsPopup-title": "Thay đổi quyền",
   "changeSettingsPopup-title": "Thay đổi Cài đặt",
   "changeSettingsPopup-title": "Thay đổi Cài đặt",
   "subtasks": "Nhiệm vụ phụ",
   "subtasks": "Nhiệm vụ phụ",
-  "checklists": "Checklists",
+  "checklists": "Danh sách việc cần hoàn thành",
   "click-to-star": "Bấm để gắn dấu sao bảng này.",
   "click-to-star": "Bấm để gắn dấu sao bảng này.",
   "click-to-unstar": "Bấm để bỏ gắn bảng này.",
   "click-to-unstar": "Bấm để bỏ gắn bảng này.",
   "clipboard": "Clipboard hoặc kéo và thả",
   "clipboard": "Clipboard hoặc kéo và thả",
@@ -233,7 +233,7 @@
   "color-slateblue": "slateblue",
   "color-slateblue": "slateblue",
   "color-white": "white",
   "color-white": "white",
   "color-yellow": "yellow",
   "color-yellow": "yellow",
-  "unset-color": "Unset",
+  "unset-color": "Không đặt",
   "comment": "Bình luận",
   "comment": "Bình luận",
   "comment-placeholder": "Viết Bình Luận",
   "comment-placeholder": "Viết Bình Luận",
   "comment-only": "Chỉ bình luận",
   "comment-only": "Chỉ bình luận",
@@ -260,7 +260,7 @@
   "createCustomFieldPopup-title": "Tạo Trường",
   "createCustomFieldPopup-title": "Tạo Trường",
   "current": "hiện tại",
   "current": "hiện tại",
   "custom-field-delete-pop": "Không thể hoàn tác. Thao tác này sẽ xóa trường tùy chỉnh này khỏi tất cả các thẻ và hủy lịch sử của nó.",
   "custom-field-delete-pop": "Không thể hoàn tác. Thao tác này sẽ xóa trường tùy chỉnh này khỏi tất cả các thẻ và hủy lịch sử của nó.",
-  "custom-field-checkbox": "Checkbox",
+  "custom-field-checkbox": "Hộp kiểm",
   "custom-field-currency": "Tiền tệ",
   "custom-field-currency": "Tiền tệ",
   "custom-field-currency-option": "Mã tiền tệ",
   "custom-field-currency-option": "Mã tiền tệ",
   "custom-field-date": "Ngày",
   "custom-field-date": "Ngày",
@@ -315,8 +315,8 @@
   "error-board-notAdmin": "Bạn cần phải là quản trị viên của bảng này để làm điều đó",
   "error-board-notAdmin": "Bạn cần phải là quản trị viên của bảng này để làm điều đó",
   "error-board-notAMember": "Bạn cần phải là thành viên của bảng này để làm điều đó",
   "error-board-notAMember": "Bạn cần phải là thành viên của bảng này để làm điều đó",
   "error-json-malformed": "Văn bản của bạn không phải là JSON hợp lệ",
   "error-json-malformed": "Văn bản của bạn không phải là JSON hợp lệ",
-  "error-json-schema": "Your JSON data does not include the proper information in the correct format",
-  "error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format",
+  "error-json-schema": "Dữ liệu JSON của bạn không bao gồm thông tin thích hợp ở định dạng chính xác",
+  "error-csv-schema": "CSV (Giá trị được phân tách bằng dấu phẩy)/TSV (Giá trị được phân cách bằng tab) của bạn không bao gồm thông tin thích hợp ở định dạng chính xác",
   "error-list-doesNotExist": "Danh sách này không tồn tại",
   "error-list-doesNotExist": "Danh sách này không tồn tại",
   "error-user-doesNotExist": "Người dùng này không tồn tại",
   "error-user-doesNotExist": "Người dùng này không tồn tại",
   "error-user-notAllowSelf": "Bạn không thể mời chính mình",
   "error-user-notAllowSelf": "Bạn không thể mời chính mình",
@@ -382,8 +382,8 @@
   "import-board-instruction-csv": "Dán Giá trị được phân tách bằng dấu phẩy(CSV)/ Giá trị được phân cách bằng tab (TSV) của bạn.",
   "import-board-instruction-csv": "Dán Giá trị được phân tách bằng dấu phẩy(CSV)/ Giá trị được phân cách bằng tab (TSV) của bạn.",
   "import-board-instruction-wekan": "Trong bảng của bạn, hãy chuyển đến \"Menu\", sau đó \"Xuất bảng\" và sao chép văn bản trong tệp đã tải xuống.",
   "import-board-instruction-wekan": "Trong bảng của bạn, hãy chuyển đến \"Menu\", sau đó \"Xuất bảng\" và sao chép văn bản trong tệp đã tải xuống.",
   "import-board-instruction-about-errors": "Nếu bạn gặp lỗi khi nhập bảng, đôi khi quá trình nhập vẫn hoạt động và bảng ở trang Tất cả bảng.",
   "import-board-instruction-about-errors": "Nếu bạn gặp lỗi khi nhập bảng, đôi khi quá trình nhập vẫn hoạt động và bảng ở trang Tất cả bảng.",
-  "import-json-placeholder": "Paste your valid JSON data here",
-  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
+  "import-json-placeholder": "Dán dữ liệu JSON hợp lệ của bạn vào đây",
+  "import-csv-placeholder": "Dán dữ liệu CSV/TSV hợp lệ của bạn vào đây",
   "import-map-members": "Bản đồ thành viên",
   "import-map-members": "Bản đồ thành viên",
   "import-members-map": "Bảng nhập khẩu của bạn có một số thành viên. Vui lòng ánh xạ các thành viên bạn muốn nhập với người dùng của mình",
   "import-members-map": "Bảng nhập khẩu của bạn có một số thành viên. Vui lòng ánh xạ các thành viên bạn muốn nhập với người dùng của mình",
   "import-members-map-note": "Lưu ý: Các thành viên chưa được ánh xạ sẽ được chỉ định cho người dùng hiện tại.",
   "import-members-map-note": "Lưu ý: Các thành viên chưa được ánh xạ sẽ được chỉ định cho người dùng hiện tại.",
@@ -415,8 +415,8 @@
   "set-color-list": "Đặt Màu",
   "set-color-list": "Đặt Màu",
   "listActionPopup-title": "Liệt kê các hành động",
   "listActionPopup-title": "Liệt kê các hành động",
   "settingsUserPopup-title": "Cài đặt người dùng",
   "settingsUserPopup-title": "Cài đặt người dùng",
-  "swimlaneActionPopup-title": "Swimlane Actions",
-  "swimlaneAddPopup-title": "Add a Swimlane below",
+  "swimlaneActionPopup-title": "Hành động trên Làn ngang",
+  "swimlaneAddPopup-title": "Thêm một Làn ngang bên dưới",
   "listImportCardPopup-title": "Nhập thẻ Trello",
   "listImportCardPopup-title": "Nhập thẻ Trello",
   "listImportCardsTsvPopup-title": "Nhập Excel CSV/TSV",
   "listImportCardsTsvPopup-title": "Nhập Excel CSV/TSV",
   "listMorePopup-title": "Thêm nữa",
   "listMorePopup-title": "Thêm nữa",
@@ -424,7 +424,7 @@
   "list-delete-pop": "Tất cả các hành động sẽ bị xóa khỏi nguồn cấp dữ liệu hoạt động và bạn sẽ không thể khôi phục danh sách. Không có hoàn tác.",
   "list-delete-pop": "Tất cả các hành động sẽ bị xóa khỏi nguồn cấp dữ liệu hoạt động và bạn sẽ không thể khôi phục danh sách. Không có hoàn tác.",
   "list-delete-suggest-archive": "Bạn có thể di chuyển danh sách vào Lưu trữ để xóa danh sách đó khỏi Bảng và duy trì hoạt động.",
   "list-delete-suggest-archive": "Bạn có thể di chuyển danh sách vào Lưu trữ để xóa danh sách đó khỏi Bảng và duy trì hoạt động.",
   "lists": "Danh sách",
   "lists": "Danh sách",
-  "swimlanes": "Thu gọn",
+  "swimlanes": "Làn ngang",
   "log-out": "Đăng Xuất",
   "log-out": "Đăng Xuất",
   "log-in": "Đăng nhập",
   "log-in": "Đăng nhập",
   "loginPopup-title": "Đăng nhập",
   "loginPopup-title": "Đăng nhập",
@@ -446,7 +446,7 @@
   "name": "Tên",
   "name": "Tên",
   "no-archived-cards": "Không có thẻ nào trong Lưu trữ.",
   "no-archived-cards": "Không có thẻ nào trong Lưu trữ.",
   "no-archived-lists": "Không có danh sách nào trong Lưu trữ.",
   "no-archived-lists": "Không có danh sách nào trong Lưu trữ.",
-  "no-archived-swimlanes": "No swimlanes in Archive.",
+  "no-archived-swimlanes": "Không có Làn ngang nào trong Lưu trữ.",
   "no-results": "Không có kết quả",
   "no-results": "Không có kết quả",
   "normal": "Bình thường",
   "normal": "Bình thường",
   "normal-desc": "Có thể xem và chỉnh sửa thẻ. Không thể thay đổi cài đặt.",
   "normal-desc": "Có thể xem và chỉnh sửa thẻ. Không thể thay đổi cài đặt.",
@@ -467,7 +467,7 @@
   "private-desc": "Bảng này là riêng tư. Chỉ những người được thêm vào bảng mới có thể xem và chỉnh sửa nó.",
   "private-desc": "Bảng này là riêng tư. Chỉ những người được thêm vào bảng mới có thể xem và chỉnh sửa nó.",
   "profile": "Hồ sơ",
   "profile": "Hồ sơ",
   "public": "Công khai",
   "public": "Công khai",
-  "public-desc": "Bảng này là công khai. Nó hiển thị với bất kỳ ai có liên kết và sẽ hiển thị trong các công cụ tìm kiếm như Google. Chỉ những người được thêm vào diễn đàn mới có thể chỉnh sửa.",
+  "public-desc": "Bảng này là công khai. Nó hiển thị với bất kỳ ai có liên kết và sẽ hiển thị trong các công cụ tìm kiếm như Google. Chỉ những người được thêm vào Bảng mới có thể chỉnh sửa.",
   "quick-access-description": "Gắn dấu sao bảng để thêm lối tắt trong thanh này.",
   "quick-access-description": "Gắn dấu sao bảng để thêm lối tắt trong thanh này.",
   "remove-cover": "Remove Cover",
   "remove-cover": "Remove Cover",
   "remove-from-board": "Xóa khỏi Bảng",
   "remove-from-board": "Xóa khỏi Bảng",
@@ -519,10 +519,10 @@
   "title": "Tiêu đề",
   "title": "Tiêu đề",
   "tracking": "Đang theo dõi",
   "tracking": "Đang theo dõi",
   "tracking-info": "Bạn sẽ được thông báo về bất kỳ thay đổi nào đối với những thẻ mà bạn tham gia với tư cách là người sáng tạo hoặc thành viên.",
   "tracking-info": "Bạn sẽ được thông báo về bất kỳ thay đổi nào đối với những thẻ mà bạn tham gia với tư cách là người sáng tạo hoặc thành viên.",
-  "type": "Type",
+  "type": "Kiểu",
   "unassign-member": "Bỏ chỉ định thành viên",
   "unassign-member": "Bỏ chỉ định thành viên",
   "unsaved-description": "Bạn có một mô tả chưa được lưu.",
   "unsaved-description": "Bạn có một mô tả chưa được lưu.",
-  "unwatch": "Unwatch",
+  "unwatch": "Bỏ theo dõi",
   "upload": "Tải lên",
   "upload": "Tải lên",
   "upload-avatar": "Tải lên hình đại diện",
   "upload-avatar": "Tải lên hình đại diện",
   "uploaded-avatar": "Đã tải lên hình đại diện",
   "uploaded-avatar": "Đã tải lên hình đại diện",
@@ -533,16 +533,16 @@
   "custom-login-logo-link-url": "Đăng nhập tùy chỉnh - Url liên kết Logo",
   "custom-login-logo-link-url": "Đăng nhập tùy chỉnh - Url liên kết Logo",
   "text-below-custom-login-logo": "Đăng nhập tùy chỉnh - Văn bản bên dưới Logo",
   "text-below-custom-login-logo": "Đăng nhập tùy chỉnh - Văn bản bên dưới Logo",
   "automatic-linked-url-schemes": "Lược đồ URL tùy chỉnh sẽ tự động có thể nhấp được. Một Lược đồ URL trên mỗi dòng",
   "automatic-linked-url-schemes": "Lược đồ URL tùy chỉnh sẽ tự động có thể nhấp được. Một Lược đồ URL trên mỗi dòng",
-  "username": "Username",
-  "import-usernames": "Import Usernames",
+  "username": "Tài khoản",
+  "import-usernames": "Nhập khẩu Usernames",
   "view-it": "Xem",
   "view-it": "Xem",
   "warn-list-archived": "cảnh báo: thẻ này nằm trong một danh sách tại Lưu trữ",
   "warn-list-archived": "cảnh báo: thẻ này nằm trong một danh sách tại Lưu trữ",
-  "watch": "Watch",
+  "watch": "Theo dõi",
   "watching": "Đang xem",
   "watching": "Đang xem",
   "watching-info": "Bạn sẽ được thông báo về bất kỳ thay đổi nào trong bảng này",
   "watching-info": "Bạn sẽ được thông báo về bất kỳ thay đổi nào trong bảng này",
   "welcome-board": "Welcome Board",
   "welcome-board": "Welcome Board",
   "welcome-swimlane": "Milestone 1",
   "welcome-swimlane": "Milestone 1",
-  "welcome-list1": "Basics",
+  "welcome-list1": "Cơ bản",
   "welcome-list2": "Nâng cao",
   "welcome-list2": "Nâng cao",
   "card-templates-swimlane": "Mẫu Thẻ",
   "card-templates-swimlane": "Mẫu Thẻ",
   "list-templates-swimlane": "Mẫu Danh sách",
   "list-templates-swimlane": "Mẫu Danh sách",
@@ -558,17 +558,17 @@
   "disable-self-registration": "Vô hiệu hoá tự đăng ký",
   "disable-self-registration": "Vô hiệu hoá tự đăng ký",
   "invite": "Mời",
   "invite": "Mời",
   "invite-people": "Mời mọi người",
   "invite-people": "Mời mọi người",
-  "to-boards": "To board(s)",
+  "to-boards": "Đến bảng(s)",
   "email-addresses": "Địa chỉ Email",
   "email-addresses": "Địa chỉ Email",
   "smtp-host-description": "Địa chỉ của máy chủ SMTP xử lý email của bạn.",
   "smtp-host-description": "Địa chỉ của máy chủ SMTP xử lý email của bạn.",
   "smtp-port-description": "Cổng mà máy chủ SMTP của bạn sử dụng cho các email gửi đi.",
   "smtp-port-description": "Cổng mà máy chủ SMTP của bạn sử dụng cho các email gửi đi.",
   "smtp-tls-description": "Bật hỗ trợ TLS cho máy chủ SMTP",
   "smtp-tls-description": "Bật hỗ trợ TLS cho máy chủ SMTP",
   "smtp-host": "SMTP Host",
   "smtp-host": "SMTP Host",
   "smtp-port": "SMTP Port",
   "smtp-port": "SMTP Port",
-  "smtp-username": "Username",
+  "smtp-username": "Tài khoản",
   "smtp-password": "Mật khẩu",
   "smtp-password": "Mật khẩu",
   "smtp-tls": "Hỗ trợ TLS",
   "smtp-tls": "Hỗ trợ TLS",
-  "send-from": "From",
+  "send-from": "Từ",
   "send-smtp-test": "Gửi một email thử nghiệm cho chính bạn",
   "send-smtp-test": "Gửi một email thử nghiệm cho chính bạn",
   "invitation-code": "Mã lời mời",
   "invitation-code": "Mã lời mời",
   "email-invite-register-subject": "__inviter__ đã gửi cho bạn lời mời",
   "email-invite-register-subject": "__inviter__ đã gửi cho bạn lời mời",
@@ -577,15 +577,15 @@
   "email-smtp-test-text": "Bạn đã gửi thành công một email",
   "email-smtp-test-text": "Bạn đã gửi thành công một email",
   "error-invitation-code-not-exist": "Mã lời mời không tồn tại",
   "error-invitation-code-not-exist": "Mã lời mời không tồn tại",
   "error-notAuthorized": "Bạn không được phép xem trang này.",
   "error-notAuthorized": "Bạn không được phép xem trang này.",
-  "webhook-title": "Webhook Name",
+  "webhook-title": "Tên Webhook",
   "webhook-token": "Mã thông báo (Tùy chọn để xác thực)",
   "webhook-token": "Mã thông báo (Tùy chọn để xác thực)",
-  "outgoing-webhooks": "Outgoing Webhooks",
-  "bidirectional-webhooks": "Two-Way Webhooks",
-  "outgoingWebhooksPopup-title": "Outgoing Webhooks",
+  "outgoing-webhooks": "Webhooks gửi đi",
+  "bidirectional-webhooks": "Webhooks hai chiều",
+  "outgoingWebhooksPopup-title": "Webhook gửi đi",
   "boardCardTitlePopup-title": "Lọc tiêu đề thẻ",
   "boardCardTitlePopup-title": "Lọc tiêu đề thẻ",
   "disable-webhook": "Vô hiệu hóa Webhook này",
   "disable-webhook": "Vô hiệu hóa Webhook này",
-  "global-webhook": "Global Webhooks",
-  "new-outgoing-webhook": "New Outgoing Webhook",
+  "global-webhook": "Webhook toàn cầu",
+  "new-outgoing-webhook": "Webhook gửi đi mới",
   "no-name": "(Không xác định)",
   "no-name": "(Không xác định)",
   "Node_version": "Phiên bản Node",
   "Node_version": "Phiên bản Node",
   "Meteor_version": "Phiên bản Meteor",
   "Meteor_version": "Phiên bản Meteor",
@@ -593,14 +593,14 @@
   "MongoDB_storage_engine": "MongoDB storage engine",
   "MongoDB_storage_engine": "MongoDB storage engine",
   "MongoDB_Oplog_enabled": "MongoDB Oplog enabled",
   "MongoDB_Oplog_enabled": "MongoDB Oplog enabled",
   "OS_Arch": "OS Arch",
   "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",
+  "OS_Cpus": "S CPU",
+  "OS_Freemem": "Bộ nhớ trống",
+  "OS_Loadavg": "Tải trung bình",
+  "OS_Platform": "Nền tảng",
+  "OS_Release": "Phiên bản",
+  "OS_Totalmem": "Tổng bộ nhớ hệ điều hành",
+  "OS_Type": "Kiểu hệ điều hành",
+  "OS_Uptime": "Thời gian chạy",
   "days": "ngày",
   "days": "ngày",
   "hours": "giờ",
   "hours": "giờ",
   "minutes": "phút",
   "minutes": "phút",
@@ -643,14 +643,14 @@
   "boardCardSettingsPopup-title": "Cài đặt thẻ",
   "boardCardSettingsPopup-title": "Cài đặt thẻ",
   "deposit-subtasks-board": "Gửi các nhiệm vụ phụ vào bảng này:",
   "deposit-subtasks-board": "Gửi các nhiệm vụ phụ vào bảng này:",
   "deposit-subtasks-list": "Danh sách đích cho các nhiệm vụ phụ được gửi tại đây:",
   "deposit-subtasks-list": "Danh sách đích cho các nhiệm vụ phụ được gửi tại đây:",
-  "show-parent-in-minicard": "Show parent in minicard:",
+  "show-parent-in-minicard": "Hiện cha mẹ trong minicard:",
   "prefix-with-full-path": "Tiền tố với đường dẫn đầy đủ",
   "prefix-with-full-path": "Tiền tố với đường dẫn đầy đủ",
   "prefix-with-parent": "Tiền tố với cha mẹ",
   "prefix-with-parent": "Tiền tố với cha mẹ",
   "subtext-with-full-path": "Văn bản phụ với đường dẫn đầy đủ",
   "subtext-with-full-path": "Văn bản phụ với đường dẫn đầy đủ",
-  "subtext-with-parent": "Subtext with parent",
+  "subtext-with-parent": "Văn bản phụ với cha mẹ",
   "change-card-parent": "Thay đổi phụ huynh của thẻ",
   "change-card-parent": "Thay đổi phụ huynh của thẻ",
-  "parent-card": "Parent card",
-  "source-board": "Source board",
+  "parent-card": "Thẻ cha",
+  "source-board": "Bảng nguồn",
   "no-parent": "Không hiển thị cho cha mẹ",
   "no-parent": "Không hiển thị cho cha mẹ",
   "activity-added-label": "đã thêm nhãn '%s' vào %s",
   "activity-added-label": "đã thêm nhãn '%s' vào %s",
   "activity-removed-label": "đã xóa nhãn '%s' khỏi %s",
   "activity-removed-label": "đã xóa nhãn '%s' khỏi %s",
@@ -672,41 +672,41 @@
   "r-trigger": "Kích hoạt",
   "r-trigger": "Kích hoạt",
   "r-action": "Hoạt động",
   "r-action": "Hoạt động",
   "r-when-a-card": "Khi một thẻ",
   "r-when-a-card": "Khi một thẻ",
-  "r-is": "is",
+  "r-is": "",
   "r-is-moved": "được chuyển đi",
   "r-is-moved": "được chuyển đi",
-  "r-added-to": "Added to",
+  "r-added-to": "Đã thêm vào",
   "r-removed-from": "Bị loại khỏi",
   "r-removed-from": "Bị loại khỏi",
-  "r-the-board": "the board",
+  "r-the-board": "bảng",
   "r-list": "danh sách",
   "r-list": "danh sách",
-  "list": "List",
+  "list": "Danh sách",
   "set-filter": "Đặt bộ lọc",
   "set-filter": "Đặt bộ lọc",
   "r-moved-to": "Chuyển đến",
   "r-moved-to": "Chuyển đến",
-  "r-moved-from": "Moved from",
-  "r-archived": "Moved to Archive",
-  "r-unarchived": "Restored from Archive",
-  "r-a-card": "a card",
+  "r-moved-from": "Đã di chuyển từ",
+  "r-archived": "Đã chuyển đến Lưu trữ",
+  "r-unarchived": "Đã khôi phục từ lưu trữ",
+  "r-a-card": "thẻ",
   "r-when-a-label-is": "Khi một nhãn là",
   "r-when-a-label-is": "Khi một nhãn là",
   "r-when-the-label": "Khi nhãn",
   "r-when-the-label": "Khi nhãn",
-  "r-list-name": "list name",
+  "r-list-name": "tên danh sách",
   "r-when-a-member": "Khi một thành viên là",
   "r-when-a-member": "Khi một thành viên là",
   "r-when-the-member": "Khi thành viên",
   "r-when-the-member": "Khi thành viên",
-  "r-name": "name",
+  "r-name": "n",
   "r-when-a-attach": "Khi một tệp đính kèm",
   "r-when-a-attach": "Khi một tệp đính kèm",
   "r-when-a-checklist": "Khi một checklist là",
   "r-when-a-checklist": "Khi một checklist là",
   "r-when-the-checklist": "Khi checklist",
   "r-when-the-checklist": "Khi checklist",
-  "r-completed": "Completed",
-  "r-made-incomplete": "Made incomplete",
+  "r-completed": "Đã hoàn thành",
+  "r-made-incomplete": "Làm chưa hoàn thành",
   "r-when-a-item": "Khi một mục checklist là",
   "r-when-a-item": "Khi một mục checklist là",
   "r-when-the-item": "Khi mục checklist",
   "r-when-the-item": "Khi mục checklist",
-  "r-checked": "Checked",
-  "r-unchecked": "Unchecked",
+  "r-checked": "Đã chọn",
+  "r-unchecked": "Đã bỏ chọn",
   "r-move-card-to": "Di chuyển thẻ đến",
   "r-move-card-to": "Di chuyển thẻ đến",
-  "r-top-of": "Top of",
-  "r-bottom-of": "Bottom of",
+  "r-top-of": "Trên cùng của",
+  "r-bottom-of": "Dưới cùng của",
   "r-its-list": "danh sách của nó",
   "r-its-list": "danh sách của nó",
   "r-archive": "Di chuyển đến Lưu trữ",
   "r-archive": "Di chuyển đến Lưu trữ",
-  "r-unarchive": "Restore from Archive",
-  "r-card": "card",
+  "r-unarchive": "Khôi phục từ Lưu trữ",
+  "r-card": "thẻ",
   "r-add": "Thêm",
   "r-add": "Thêm",
   "r-remove": "Xóa",
   "r-remove": "Xóa",
   "r-label": "nhãn",
   "r-label": "nhãn",
@@ -714,17 +714,17 @@
   "r-remove-all": "Xóa tất cả thành viên khỏi thẻ",
   "r-remove-all": "Xóa tất cả thành viên khỏi thẻ",
   "r-set-color": "Đặt màu cho",
   "r-set-color": "Đặt màu cho",
   "r-checklist": "checklist",
   "r-checklist": "checklist",
-  "r-check-all": "Check all",
-  "r-uncheck-all": "Uncheck all",
+  "r-check-all": "Đánh dấu tất cả",
+  "r-uncheck-all": "Bỏ đánh dấu tất cả",
   "r-items-check": "mục của checklist",
   "r-items-check": "mục của checklist",
-  "r-check": "Check",
-  "r-uncheck": "Uncheck",
+  "r-check": "Chọn",
+  "r-uncheck": "Bỏ chọn",
   "r-item": "mục",
   "r-item": "mục",
   "r-of-checklist": "của checklist",
   "r-of-checklist": "của checklist",
   "r-send-email": "Gửi email",
   "r-send-email": "Gửi email",
   "r-to": "đến",
   "r-to": "đến",
   "r-of": "của",
   "r-of": "của",
-  "r-subject": "subject",
+  "r-subject": "Chủ đề",
   "r-rule-details": "Chi tiết quy tắc",
   "r-rule-details": "Chi tiết quy tắc",
   "r-d-move-to-top-gen": "Di chuyển thẻ lên đầu danh sách của nó",
   "r-d-move-to-top-gen": "Di chuyển thẻ lên đầu danh sách của nó",
   "r-d-move-to-top-spec": "Di chuyển thẻ lên đầu của danh sách",
   "r-d-move-to-top-spec": "Di chuyển thẻ lên đầu của danh sách",
@@ -732,15 +732,15 @@
   "r-d-move-to-bottom-spec": "Di chuyển thẻ xuống cuối của danh sách",
   "r-d-move-to-bottom-spec": "Di chuyển thẻ xuống cuối của danh sách",
   "r-d-send-email": "Gửi email",
   "r-d-send-email": "Gửi email",
   "r-d-send-email-to": "đến",
   "r-d-send-email-to": "đến",
-  "r-d-send-email-subject": "subject",
+  "r-d-send-email-subject": "Chủ đề",
   "r-d-send-email-message": "tin nhắn",
   "r-d-send-email-message": "tin nhắn",
   "r-d-archive": "Di chuyển thẻ vào Lưu trữ",
   "r-d-archive": "Di chuyển thẻ vào Lưu trữ",
-  "r-d-unarchive": "Restore card from Archive",
+  "r-d-unarchive": "Khôi phục thẻ từ Lưu trữ",
   "r-d-add-label": "Thêm nhãn",
   "r-d-add-label": "Thêm nhãn",
   "r-d-remove-label": "Xóa nhãn",
   "r-d-remove-label": "Xóa nhãn",
   "r-create-card": "Tạo thẻ mới",
   "r-create-card": "Tạo thẻ mới",
   "r-in-list": "trong danh sách",
   "r-in-list": "trong danh sách",
-  "r-in-swimlane": "in swimlane",
+  "r-in-swimlane": "trong làn ngang",
   "r-d-add-member": "Thêm thành viên",
   "r-d-add-member": "Thêm thành viên",
   "r-d-remove-member": "Xóa thành viên",
   "r-d-remove-member": "Xóa thành viên",
   "r-d-remove-all-member": "Xóa tất cả thành viên",
   "r-d-remove-all-member": "Xóa tất cả thành viên",
@@ -755,8 +755,8 @@
   "r-add-checklist": "Thêm checklist",
   "r-add-checklist": "Thêm checklist",
   "r-with-items": "với các mục",
   "r-with-items": "với các mục",
   "r-items-list": "item1,item2,item3",
   "r-items-list": "item1,item2,item3",
-  "r-add-swimlane": "Add swimlane",
-  "r-swimlane-name": "swimlane name",
+  "r-add-swimlane": "Thêm làn ngang",
+  "r-swimlane-name": "tên làn ngang",
   "r-board-note": "Lưu ý: để trống một trường để khớp với mọi giá trị có thể.",
   "r-board-note": "Lưu ý: để trống một trường để khớp với mọi giá trị có thể.",
   "r-checklist-note": "Lưu ý: các mục của danh sách kiểm tra phải được viết dưới dạng các giá trị được phân tách bằng dấu phẩy.",
   "r-checklist-note": "Lưu ý: các mục của danh sách kiểm tra phải được viết dưới dạng các giá trị được phân tách bằng dấu phẩy.",
   "r-when-a-card-is-moved": "Khi một thẻ được chuyển sang một danh sách khác",
   "r-when-a-card-is-moved": "Khi một thẻ được chuyển sang một danh sách khác",
@@ -794,18 +794,18 @@
   "loading": "Đang tải, vui lòng đợi.",
   "loading": "Đang tải, vui lòng đợi.",
   "previous_as": "lần trước là",
   "previous_as": "lần trước là",
   "act-a-dueAt": "sửa đổi thời gian đến hạn \nKhi nào: __timeValue__\nỞ đâu: __card__\n đến hạn trước đó là __timeOldValue__",
   "act-a-dueAt": "sửa đổi thời gian đến hạn \nKhi nào: __timeValue__\nỞ đâu: __card__\n đến hạn trước đó là __timeOldValue__",
-  "act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)",
+  "act-a-endAt": "đã sửa đổi thời gian kết thúc thành __timeValue__ từ (__timeOldValue__)",
   "act-a-startAt": "sửa đổi thời gian bắt đầu thành __timeValue__ from (__timeOldValue__)",
   "act-a-startAt": "sửa đổi thời gian bắt đầu thành __timeValue__ from (__timeOldValue__)",
-  "act-a-receivedAt": "modified received time to __timeValue__ from (__timeOldValue__)",
+  "act-a-receivedAt": "đã sửa đổi thời gian nhận thành __timeValue__ từ (__timeOldValue__)",
   "a-dueAt": "sửa đổi thời gian đến hạn thành",
   "a-dueAt": "sửa đổi thời gian đến hạn thành",
-  "a-endAt": "modified ending time to be",
+  "a-endAt": "đã sửa đổi thời gian kết thúc thành",
   "a-startAt": "thời gian bắt đầu được sửa đổi thành",
   "a-startAt": "thời gian bắt đầu được sửa đổi thành",
   "a-receivedAt": "đã sửa đổi thời gian nhận được",
   "a-receivedAt": "đã sửa đổi thời gian nhận được",
-  "almostdue": "current due time %s is approaching",
-  "pastdue": "current due time %s is past",
-  "duenow": "current due time %s is today",
-  "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
-  "act-withDue": "__list__/__card__ due reminders [__board__]",
+  "almostdue": "thời gian đến hạn hiện tại %s đang đến gần",
+  "pastdue": "thời gian đến hạn hiện tại %s đã qua",
+  "duenow": "giờ đến hạn hiện tại %s là hôm nay",
+  "act-newDue": "__list__/__card__ có lời nhắc đến hạn lần 1 [__board__]",
+  "act-withDue": "__list__/__card__ lời nhắc đến hạn [__board__]",
   "act-almostdue": "đang nhắc nhở thời hạn hiện tại là (__timeValue__) của __card__ đang đến gần",
   "act-almostdue": "đang nhắc nhở thời hạn hiện tại là (__timeValue__) của __card__ đang đến gần",
   "act-pastdue": "đang nhắc nhở thời hạn hiện tại (__timeValue__) của __card__ đã qua",
   "act-pastdue": "đang nhắc nhở thời hạn hiện tại (__timeValue__) của __card__ đã qua",
   "act-duenow": "đã được nhắc nhở hiện tại đến hạn (__timeValue__) của __card__ bây giờ là",
   "act-duenow": "đã được nhắc nhở hiện tại đến hạn (__timeValue__) của __card__ bây giờ là",
@@ -813,7 +813,7 @@
   "delete-user-confirm-popup": "Bạn có chắc chắn muốn xóa tài khoản này không? Không thể hoàn tác.",
   "delete-user-confirm-popup": "Bạn có chắc chắn muốn xóa tài khoản này không? Không thể hoàn tác.",
   "accounts-allowUserDelete": "Cho phép người dùng tự xóa tài khoản của họ",
   "accounts-allowUserDelete": "Cho phép người dùng tự xóa tài khoản của họ",
   "hide-minicard-label-text": "Ẩn nhãn minicard",
   "hide-minicard-label-text": "Ẩn nhãn minicard",
-  "show-desktop-drag-handles": "Show desktop drag handles",
+  "show-desktop-drag-handles": "Hiển thị nút kéo thả trên Desktop",
   "assignee": "Người được giao",
   "assignee": "Người được giao",
   "cardAssigneesPopup-title": "Người được giao",
   "cardAssigneesPopup-title": "Người được giao",
   "addmore-detail": "Thêm mô tả chi tiết hơn",
   "addmore-detail": "Thêm mô tả chi tiết hơn",
@@ -841,7 +841,7 @@
   "saturday": "Thứ bảy",
   "saturday": "Thứ bảy",
   "sunday": "Chủ nhật",
   "sunday": "Chủ nhật",
   "status": "Trạng thái",
   "status": "Trạng thái",
-  "swimlane": "Swimlane",
+  "swimlane": "Làn ngang",
   "owner": "Chủ sở hữu",
   "owner": "Chủ sở hữu",
   "last-modified-at": "Sửa đổi lần cuối lúc",
   "last-modified-at": "Sửa đổi lần cuối lúc",
   "last-activity": "Hoạt động cuối",
   "last-activity": "Hoạt động cuối",
@@ -858,7 +858,7 @@
   "displayName": "Tên Hiển Thị",
   "displayName": "Tên Hiển Thị",
   "shortName": "Tên ngắn",
   "shortName": "Tên ngắn",
   "website": "Website",
   "website": "Website",
-  "person": "Person",
+  "person": "Cá nhân",
   "my-cards": "Thẻ của tôi",
   "my-cards": "Thẻ của tôi",
   "card": "Thẻ",
   "card": "Thẻ",
   "board": "Bảng",
   "board": "Bảng",
@@ -867,7 +867,7 @@
   "myCardsSortChangePopup-title": "Sắp xếp thẻ của tôi",
   "myCardsSortChangePopup-title": "Sắp xếp thẻ của tôi",
   "myCardsSortChange-choice-board": "Theo bảng",
   "myCardsSortChange-choice-board": "Theo bảng",
   "myCardsSortChange-choice-dueat": "Theo Ngày đến hạn",
   "myCardsSortChange-choice-dueat": "Theo Ngày đến hạn",
-  "dueCards-title": "Due Cards",
+  "dueCards-title": "Thẻ đến hạn",
   "dueCardsViewChange-title": "Xem Thẻ đến hạn",
   "dueCardsViewChange-title": "Xem Thẻ đến hạn",
   "dueCardsViewChangePopup-title": "Xem Thẻ đến hạn",
   "dueCardsViewChangePopup-title": "Xem Thẻ đến hạn",
   "dueCardsViewChange-choice-me": "Tôi",
   "dueCardsViewChange-choice-me": "Tôi",
@@ -875,7 +875,7 @@
   "dueCardsViewChange-choice-all-description": "Hiển thị tất cả các thẻ chưa hoàn thành có ngày *Đến hạn* từ bảng mà người dùng có quyền.",
   "dueCardsViewChange-choice-all-description": "Hiển thị tất cả các thẻ chưa hoàn thành có ngày *Đến hạn* từ bảng mà người dùng có quyền.",
   "broken-cards": "Thẻ bị hỏng",
   "broken-cards": "Thẻ bị hỏng",
   "board-title-not-found": "Không tìm thấy bảng '%s'",
   "board-title-not-found": "Không tìm thấy bảng '%s'",
-  "swimlane-title-not-found": "Swimlane '%s' not found.",
+  "swimlane-title-not-found": "Không tìm thấy làn ngang '%s'",
   "list-title-not-found": "Không tìm thấy danh sách '%s'",
   "list-title-not-found": "Không tìm thấy danh sách '%s'",
   "label-not-found": "Không tìm thấy nhãn '%s'",
   "label-not-found": "Không tìm thấy nhãn '%s'",
   "label-color-not-found": "Không tìm thấy màu nhãn %s",
   "label-color-not-found": "Không tìm thấy màu nhãn %s",
@@ -888,13 +888,13 @@
   "n-n-of-n-cards-found": "__start__-__end__ của __total__ Thẻ được Tìm thấy",
   "n-n-of-n-cards-found": "__start__-__end__ của __total__ Thẻ được Tìm thấy",
   "operator-board": "bảng",
   "operator-board": "bảng",
   "operator-board-abbrev": "b",
   "operator-board-abbrev": "b",
-  "operator-swimlane": "swimlane",
+  "operator-swimlane": "làn ngang",
   "operator-swimlane-abbrev": "s",
   "operator-swimlane-abbrev": "s",
   "operator-list": "danh sách",
   "operator-list": "danh sách",
   "operator-list-abbrev": "l",
   "operator-list-abbrev": "l",
   "operator-label": "nhãn",
   "operator-label": "nhãn",
   "operator-label-abbrev": "#",
   "operator-label-abbrev": "#",
-  "operator-user": "user",
+  "operator-user": "người dùng",
   "operator-user-abbrev": "@",
   "operator-user-abbrev": "@",
   "operator-member": "thành viên",
   "operator-member": "thành viên",
   "operator-member-abbrev": "m",
   "operator-member-abbrev": "m",
@@ -929,12 +929,12 @@
   "predicate-member": "thành viên",
   "predicate-member": "thành viên",
   "predicate-public": "công khai",
   "predicate-public": "công khai",
   "predicate-private": "riêng tư",
   "predicate-private": "riêng tư",
-  "operator-unknown-error": "%s is not an operator",
-  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
-  "operator-sort-invalid": "sort of '%s' is invalid",
-  "operator-status-invalid": "'%s' is not a valid status",
-  "operator-has-invalid": "%s is not a valid existence check",
-  "operator-limit-invalid": "%s is not a valid limit.  Limit should be a positive integer.",
+  "operator-unknown-error": "%s không phải là một toán tử",
+  "operator-number-expected": "toán tử __operator__ chấp nhận một số, có giá trị '__value__'",
+  "operator-sort-invalid": "sắp xếp của '%s' không hợp lệ",
+  "operator-status-invalid": "'%s' không phải là trạng thái hợp lệ",
+  "operator-has-invalid": "%s không phải là một kiểm tra sự tồn tại hợp lệ",
+  "operator-limit-invalid": "%s không phải là giới hạn hợp lệ. Giới hạn phải là một số nguyên dương.",
   "next-page": "Trang tiếp theo",
   "next-page": "Trang tiếp theo",
   "previous-page": "Trang trước",
   "previous-page": "Trang trước",
   "heading-notes": "Ghi chú",
   "heading-notes": "Ghi chú",
@@ -943,30 +943,30 @@
   "globalSearch-instructions-operators": "Các toán tử có sẵn:",
   "globalSearch-instructions-operators": "Các toán tử có sẵn:",
   "globalSearch-instructions-operator-board": "`__operator_board__:<title>` - thẻ trong bảng phù hợp với *<title>*",
   "globalSearch-instructions-operator-board": "`__operator_board__:<title>` - thẻ trong bảng phù hợp với *<title>*",
   "globalSearch-instructions-operator-list": "`__operator_list__:<title>` - thẻ trong danh sách phù hợp với *<title>*",
   "globalSearch-instructions-operator-list": "`__operator_list__:<title>` - thẻ trong danh sách phù hợp với *<title>*",
-  "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - thẻ trong luồng phù hợp với *<title>*",
-  "globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - cards with a comment containing *<text>*.",
+  "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - thẻ trong làn ngang phù hợp với *<title>*",
+  "globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - thẻ có nhận xét chứa *<text>*.",
   "globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - thẻ có nhãn phù hợp *<color>* hoặc *<name>",
   "globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - thẻ có nhãn phù hợp *<color>* hoặc *<name>",
   "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name | color>` - viết tắt cho `__operator_label__:<color>` hoặc `__operator_label__:<name>`",
   "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name | color>` - viết tắt cho `__operator_label__:<color>` hoặc `__operator_label__:<name>`",
   "globalSearch-instructions-operator-user": "`__operator_user__:<username>` - thẻ trong đó *<username>* là *thành viên* hoặc *người được giao*",
   "globalSearch-instructions-operator-user": "`__operator_user__:<username>` - thẻ trong đó *<username>* là *thành viên* hoặc *người được giao*",
   "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - viết tắt cho `người dùng:<username>`",
   "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - viết tắt cho `người dùng:<username>`",
   "globalSearch-instructions-operator-member": "`__operator_member__:<username>` - thẻ trong đó *<username>* là *thành viên*",
   "globalSearch-instructions-operator-member": "`__operator_member__:<username>` - thẻ trong đó *<username>* là *thành viên*",
-  "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - cards where *<username>* is an *assignee*",
+  "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - thẻ trong đó *<username>* là *người được giao*",
   "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - thẻ có thời hạn lên đến *<n>* ngày kể từ bây giờ.  `__operator_due__:__predicate_overdue__ liệt kê tất cả các thẻ đã quá hạn sử dụng.",
   "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - thẻ có thời hạn lên đến *<n>* ngày kể từ bây giờ.  `__operator_due__:__predicate_overdue__ liệt kê tất cả các thẻ đã quá hạn sử dụng.",
-  "globalSearch-instructions-operator-created": "`__operator_created__:<n>` - cards which were created *<n>* days ago or less",
-  "globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - cards which were modified *<n>* days ago or less",
-  "globalSearch-instructions-operator-status": "`__operator_status__:<status>` - where *<status>* is one of the following:",
-  "globalSearch-instructions-status-archived": "`__predicate_archived__` - archived cards",
-  "globalSearch-instructions-status-all": "`__predicate_all__` - all archived and unarchived cards",
+  "globalSearch-instructions-operator-created": "`__operator_created__:<n>` - thẻ đã được tạo *<n>* ngày trước hoặc ít hơn",
+  "globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - thẻ đã được sửa đổi *<n>* ngày trước hoặc ít hơn",
+  "globalSearch-instructions-operator-status": "`__operator_status__:<status>` - trong đó *<status>* là một trong các giá trị sau:",
+  "globalSearch-instructions-status-archived": "`__predicate_archived__` - thẻ đã lưu trữ",
+  "globalSearch-instructions-status-all": "`__predicate_all__` - tất cả các thẻ lưu trữ và hủy lưu trữ",
   "globalSearch-instructions-status-ended": "`__predicate_ended__` - thẻ với ngày kết thúc",
   "globalSearch-instructions-status-ended": "`__predicate_ended__` - thẻ với ngày kết thúc",
-  "globalSearch-instructions-status-public": "`__predicate_public__` - cards only in public boards",
-  "globalSearch-instructions-status-private": "`__predicate_private__` - cards only in private boards",
+  "globalSearch-instructions-status-public": "`__predicate_public__` - chỉ thẻ trong bảng công khai",
+  "globalSearch-instructions-status-private": "`__predicate_private__` - chỉ thẻ trong bảng riêng tư",
   "globalSearch-instructions-operator-has": "`__operator_has__:<field>` - trong đó *<field>* là một trong `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` hoặc `__predicate_member__`.  Đặt dấu `-` trước *<field>* sẽ tìm kiếm sự không có giá trị trong trường đó (ví dụ. `has:-due` tìm kiếm các thẻ không có ngày đến hạn).",
   "globalSearch-instructions-operator-has": "`__operator_has__:<field>` - trong đó *<field>* là một trong `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` hoặc `__predicate_member__`.  Đặt dấu `-` trước *<field>* sẽ tìm kiếm sự không có giá trị trong trường đó (ví dụ. `has:-due` tìm kiếm các thẻ không có ngày đến hạn).",
-  "globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - where *<sort-name>* is one of `__predicate_due__`, `__predicate_created__` or `__predicate_modified__`.  For a descending sort, place a `-` in front of the sort name.",
+  "globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - trong đó *<sort-name>* là một trong `__predicate_due__`, `__predicate_created__` hoặc `__predicate_modified__`.  Đối với sắp xếp giảm dần, hãy đặt dấu `-` trước tên sắp xếp.",
   "globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - trong đó *<n>* là một số nguyên dương thể hiện số lượng thẻ được hiển thị trên mỗi trang.",
   "globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - trong đó *<n>* là một số nguyên dương thể hiện số lượng thẻ được hiển thị trên mỗi trang.",
   "globalSearch-instructions-notes-1": "Nhiều toán tử có thể được chỉ định.",
   "globalSearch-instructions-notes-1": "Nhiều toán tử có thể được chỉ định.",
   "globalSearch-instructions-notes-2": "Các toán tử tương tự là *OR* cùng nhau. Các thẻ phù hợp với bất kỳ điều kiện nào sẽ được trả lại.\n`__operator_list__:Available __operator_list__:Blocked` sẽ trả lại các thẻ có trong bất kỳ danh sách nào có tên *Blocked* hoặc *Available*.",
   "globalSearch-instructions-notes-2": "Các toán tử tương tự là *OR* cùng nhau. Các thẻ phù hợp với bất kỳ điều kiện nào sẽ được trả lại.\n`__operator_list__:Available __operator_list__:Blocked` sẽ trả lại các thẻ có trong bất kỳ danh sách nào có tên *Blocked* hoặc *Available*.",
   "globalSearch-instructions-notes-3": "Các toán tử khác nhau là *AND* kết hợp với nhau. Chỉ những thẻ phù hợp với tất cả các toán tử khác nhau mới được trả lại. `__operator_list__:Available __operator_label__:red` chỉ trả về các thẻ trong danh sách *Có sẵn* với nhãn *red*.",
   "globalSearch-instructions-notes-3": "Các toán tử khác nhau là *AND* kết hợp với nhau. Chỉ những thẻ phù hợp với tất cả các toán tử khác nhau mới được trả lại. `__operator_list__:Available __operator_label__:red` chỉ trả về các thẻ trong danh sách *Có sẵn* với nhãn *red*.",
-  "globalSearch-instructions-notes-3-2": "Days can be specified as a positive or negative integer or using `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__` for the current period.",
+  "globalSearch-instructions-notes-3-2": "Ngày có thể được chỉ định dưới dạng số nguyên dương hoặc âm hoặc sử dụng `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` hoặc `__predicate_year__` cho giai đoạn hiện tại.",
   "globalSearch-instructions-notes-4": "Tìm kiếm văn bản không phân biệt chữ hoa chữ thường.",
   "globalSearch-instructions-notes-4": "Tìm kiếm văn bản không phân biệt chữ hoa chữ thường.",
   "globalSearch-instructions-notes-5": "Theo mặc định, thẻ đã lưu trữ không được tìm kiếm.",
   "globalSearch-instructions-notes-5": "Theo mặc định, thẻ đã lưu trữ không được tìm kiếm.",
   "link-to-search": "Liên kết đến tìm kiếm này",
   "link-to-search": "Liên kết đến tìm kiếm này",
@@ -980,5 +980,8 @@
   "due-date": "Ngày đến hạn",
   "due-date": "Ngày đến hạn",
   "title-alphabetically": "Tiêu đề (theo thứ tự bảng chữ cái)",
   "title-alphabetically": "Tiêu đề (theo thứ tự bảng chữ cái)",
   "created-at-newest-first": "Được tạo lúc (Mới nhất đầu tiên)",
   "created-at-newest-first": "Được tạo lúc (Mới nhất đầu tiên)",
-  "created-at-oldest-first": "Được tạo lúc (Cũ nhất trước)"
+  "created-at-oldest-first": "Được tạo lúc (Cũ nhất trước)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 23 - 20
i18n/zh-CN.i18n.json

@@ -322,8 +322,8 @@
   "error-user-notAllowSelf": "无法邀请自己",
   "error-user-notAllowSelf": "无法邀请自己",
   "error-user-notCreated": "该用户未能成功创建",
   "error-user-notCreated": "该用户未能成功创建",
   "error-username-taken": "此用户名已存在",
   "error-username-taken": "此用户名已存在",
-  "error-orgname-taken": "This organization name is already taken",
-  "error-teamname-taken": "This team name is already taken",
+  "error-orgname-taken": "此组织名称已被使用",
+  "error-teamname-taken": "此团队名称已被使用",
   "error-email-taken": "此EMail已存在",
   "error-email-taken": "此EMail已存在",
   "export-board": "导出看板",
   "export-board": "导出看板",
   "export-board-json": "看板导出为JSON",
   "export-board-json": "看板导出为JSON",
@@ -399,7 +399,7 @@
   "just-invited": "您刚刚被邀请加入此看板",
   "just-invited": "您刚刚被邀请加入此看板",
   "keyboard-shortcuts": "键盘快捷键",
   "keyboard-shortcuts": "键盘快捷键",
   "label-create": "创建标签",
   "label-create": "创建标签",
-  "label-default": "%s 标签 (默认)",
+  "label-default": "%s 标签(默认)",
   "label-delete-pop": "此操作不可逆,这将会删除该标签并清除它的历史记录。",
   "label-delete-pop": "此操作不可逆,这将会删除该标签并清除它的历史记录。",
   "labels": "标签",
   "labels": "标签",
   "language": "语言",
   "language": "语言",
@@ -528,10 +528,10 @@
   "uploaded-avatar": "头像已经上传",
   "uploaded-avatar": "头像已经上传",
   "custom-top-left-corner-logo-image-url": "通过图片链接设置左上角图标",
   "custom-top-left-corner-logo-image-url": "通过图片链接设置左上角图标",
   "custom-top-left-corner-logo-link-url": "设置左上角图标链接地址",
   "custom-top-left-corner-logo-link-url": "设置左上角图标链接地址",
-  "custom-top-left-corner-logo-height": "设置左上角图标高度. 默认值: 27",
-  "custom-login-logo-image-url": "设置登图标链接地址",
-  "custom-login-logo-link-url": "通过连接上传logo",
-  "text-below-custom-login-logo": "自定义登陆图标下方文字",
+  "custom-top-left-corner-logo-height": "设置左上角图标高度。默认值:27",
+  "custom-login-logo-image-url": "设置登图标链接地址",
+  "custom-login-logo-link-url": "设置登录图标链接",
+  "text-below-custom-login-logo": "设置登录图标下方文字",
   "automatic-linked-url-schemes": "Custom URL Schemes which should automatically be clickable. One URL Scheme per line",
   "automatic-linked-url-schemes": "Custom URL Schemes which should automatically be clickable. One URL Scheme per line",
   "username": "用户名",
   "username": "用户名",
   "import-usernames": "导入用户名",
   "import-usernames": "导入用户名",
@@ -635,7 +635,7 @@
   "boardDeletePopup-title": "删除看板?",
   "boardDeletePopup-title": "删除看板?",
   "delete-board": "删除看板",
   "delete-board": "删除看板",
   "default-subtasks-board": "__board__ 看板的子任务",
   "default-subtasks-board": "__board__ 看板的子任务",
-  "default": "缺省",
+  "default": "默认",
   "queue": "队列",
   "queue": "队列",
   "subtask-settings": "子任务设置",
   "subtask-settings": "子任务设置",
   "card-settings": "卡片设置",
   "card-settings": "卡片设置",
@@ -776,13 +776,13 @@
   "authentication-type": "认证类型",
   "authentication-type": "认证类型",
   "custom-product-name": "自定义产品名称",
   "custom-product-name": "自定义产品名称",
   "layout": "布局",
   "layout": "布局",
-  "hide-logo": "隐藏LOGO",
+  "hide-logo": "隐藏图标",
   "add-custom-html-after-body-start": "添加定制的HTML在开始<body>之前",
   "add-custom-html-after-body-start": "添加定制的HTML在开始<body>之前",
   "add-custom-html-before-body-end": "添加定制的HTML在结束</body>之后",
   "add-custom-html-before-body-end": "添加定制的HTML在结束</body>之后",
   "error-undefined": "出了点问题",
   "error-undefined": "出了点问题",
-  "error-ldap-login": "尝试登时出错",
+  "error-ldap-login": "尝试登时出错",
   "display-authentication-method": "显示认证方式",
   "display-authentication-method": "显示认证方式",
-  "default-authentication-method": "缺省认证方式",
+  "default-authentication-method": "默认认证方式",
   "duplicate-board": "复制看板",
   "duplicate-board": "复制看板",
   "org-number": "组织数量为:",
   "org-number": "组织数量为:",
   "team-number": "团队数量为:",
   "team-number": "团队数量为:",
@@ -885,7 +885,7 @@
   "no-cards-found": "无法查询到卡片",
   "no-cards-found": "无法查询到卡片",
   "one-card-found": "查询到一个卡片",
   "one-card-found": "查询到一个卡片",
   "n-cards-found": "查询到%s个卡片",
   "n-cards-found": "查询到%s个卡片",
-  "n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found",
+  "n-n-of-n-cards-found": "__start__-__end__ 共 __total__ 卡片被找到",
   "operator-board": "看板",
   "operator-board": "看板",
   "operator-board-abbrev": "b",
   "operator-board-abbrev": "b",
   "operator-swimlane": "泳道",
   "operator-swimlane": "泳道",
@@ -968,17 +968,20 @@
   "globalSearch-instructions-notes-3": "Differing operators are *AND*ed together.  Only cards that match all of the differing operators are returned.  `__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.",
   "globalSearch-instructions-notes-3": "Differing operators are *AND*ed together.  Only cards that match all of the differing operators are returned.  `__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.",
   "globalSearch-instructions-notes-3-2": "Days can be specified as a positive or negative integer or using `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__` for the current period.",
   "globalSearch-instructions-notes-3-2": "Days can be specified as a positive or negative integer or using `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__` for the current period.",
   "globalSearch-instructions-notes-4": "文本搜索大小写不敏感。",
   "globalSearch-instructions-notes-4": "文本搜索大小写不敏感。",
-  "globalSearch-instructions-notes-5": "By default archived cards are not searched.",
+  "globalSearch-instructions-notes-5": "默认情况下,不搜索存档卡片。",
   "link-to-search": "关联至本次查询",
   "link-to-search": "关联至本次查询",
   "excel-font": "Arial",
   "excel-font": "Arial",
   "number": "数字",
   "number": "数字",
   "label-colors": "标签颜色",
   "label-colors": "标签颜色",
   "label-names": "标签名",
   "label-names": "标签名",
-  "archived-at": "archived at",
-  "sort-cards": "Sort Cards",
-  "cardsSortPopup-title": "Sort Cards",
-  "due-date": "Due Date",
-  "title-alphabetically": "Title (Alphabetically)",
-  "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "archived-at": "归档于",
+  "sort-cards": "排序卡片",
+  "cardsSortPopup-title": "排序卡片",
+  "due-date": "截至日期",
+  "title-alphabetically": "标题(按字母顺序)",
+  "created-at-newest-first": "创建时间(最新)",
+  "created-at-oldest-first": "创建时间(最旧)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/zh-HK.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "Due Date",
   "due-date": "Due Date",
   "title-alphabetically": "Title (Alphabetically)",
   "title-alphabetically": "Title (Alphabetically)",
   "created-at-newest-first": "Created At (Newest First)",
   "created-at-newest-first": "Created At (Newest First)",
-  "created-at-oldest-first": "Created At (Oldest First)"
+  "created-at-oldest-first": "Created At (Oldest First)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 4 - 1
i18n/zh-TW.i18n.json

@@ -980,5 +980,8 @@
   "due-date": "到期日",
   "due-date": "到期日",
   "title-alphabetically": "標題 (按字母順序)",
   "title-alphabetically": "標題 (按字母順序)",
   "created-at-newest-first": "創建於(最新優先)",
   "created-at-newest-first": "創建於(最新優先)",
-  "created-at-oldest-first": "創建於(最早優先)"
+  "created-at-oldest-first": "創建於(最早優先)",
+  "links-heading": "Links",
+  "hide-system-messages-of-all-users": "Hide system messages of all users",
+  "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden"
 }
 }

+ 50 - 27
models/trelloCreator.js

@@ -416,39 +416,62 @@ export class TrelloCreator {
       const attachments = this.attachments[card.id];
       const attachments = this.attachments[card.id];
       const trelloCoverId = card.idAttachmentCover;
       const trelloCoverId = card.idAttachmentCover;
       if (attachments) {
       if (attachments) {
+        const links = [];
         attachments.forEach(att => {
         attachments.forEach(att => {
-          const file = new FS.File();
-          // Simulating file.attachData on the client generates multiple errors
-          // - HEAD returns null, which causes exception down the line
-          // - the template then tries to display the url to the attachment which causes other errors
-          // so we make it server only, and let UI catch up once it is done, forget about latency comp.
-          const self = this;
-          if (Meteor.isServer) {
-            file.attachData(att.url, function(error) {
-              file.boardId = boardId;
-              file.cardId = cardId;
-              file.userId = self._user(att.idMemberCreator);
-              // The field source will only be used to prevent adding
-              // attachments' related activities automatically
-              file.source = 'import';
-              if (error) {
-                throw error;
-              } else {
-                const wekanAtt = Attachments.insert(file, () => {
-                  // we do nothing
-                });
-                self.attachmentIds[att.id] = wekanAtt._id;
-                //
-                if (trelloCoverId === att.id) {
-                  Cards.direct.update(cardId, {
-                    $set: { coverId: wekanAtt._id },
+          // if the attachment `name` and `url` are the same, then the
+          // attachment is an attached link
+          if (att.name === att.url) {
+            links.push(att.url);
+          } else {
+            const file = new FS.File();
+            // Simulating file.attachData on the client generates multiple errors
+            // - HEAD returns null, which causes exception down the line
+            // - the template then tries to display the url to the attachment which causes other errors
+            // so we make it server only, and let UI catch up once it is done, forget about latency comp.
+            const self = this;
+            if (Meteor.isServer) {
+              file.attachData(att.url, function(error) {
+                file.boardId = boardId;
+                file.cardId = cardId;
+                file.userId = self._user(att.idMemberCreator);
+                // The field source will only be used to prevent adding
+                // attachments' related activities automatically
+                file.source = 'import';
+                if (error) {
+                  throw error;
+                } else {
+                  const wekanAtt = Attachments.insert(file, () => {
+                    // we do nothing
                   });
                   });
+                  self.attachmentIds[att.id] = wekanAtt._id;
+                  //
+                  if (trelloCoverId === att.id) {
+                    Cards.direct.update(cardId, {
+                      $set: { coverId: wekanAtt._id },
+                    });
+                  }
                 }
                 }
-              }
-            });
+              });
+            }
           }
           }
           // todo XXX set cover - if need be
           // todo XXX set cover - if need be
         });
         });
+
+        if (links.length) {
+          let desc = cardToCreate.description.trim();
+          if (desc) {
+            desc += '\n\n';
+          }
+          desc += `## ${TAPi18n.__('links-heading')}\n`;
+          links.forEach(link => {
+            desc += `* ${link}\n`;
+          });
+          Cards.direct.update(cardId, {
+            $set: {
+              description: desc,
+            },
+          });
+        }
       }
       }
       result.push(cardId);
       result.push(cardId);
     });
     });

+ 19 - 0
models/users.js

@@ -797,6 +797,25 @@ Meteor.methods({
 
 
 if (Meteor.isServer) {
 if (Meteor.isServer) {
   Meteor.methods({
   Meteor.methods({
+    setAllUsersHideSystemMessages() {
+      if (Meteor.user() && Meteor.user().isAdmin) {
+        // If setting is missing, add it
+        Users.update(
+          { 'profile.hiddenSystemMessages': { $exists: false } },
+          { $set: { 'profile.hiddenSystemMessages': true } },
+          { multi: true },
+        );
+        // If setting is false, set it to true
+        Users.update(
+          { 'profile.hiddenSystemMessages': false },
+          { $set: { 'profile.hiddenSystemMessages': true } },
+          { multi: true },
+        );
+        return true;
+      } else {
+        return false;
+      }
+    },
     setCreateUser(
     setCreateUser(
       fullname,
       fullname,
       username,
       username,

+ 2 - 1
openapi/generate_openapi.py

@@ -1,6 +1,7 @@
 #!/bin/env python3
 #!/bin/env python3
 
 
 import argparse
 import argparse
+import esprima
 import json
 import json
 import logging
 import logging
 import os
 import os
@@ -14,7 +15,7 @@ err_context = 3
 
 
 
 
 def get_req_body_elems(obj, elems):
 def get_req_body_elems(obj, elems):
-    if obj.type == 'FunctionExpression':
+    if obj.type in ['FunctionExpression', 'ArrowFunctionExpression']:
         get_req_body_elems(obj.body, elems)
         get_req_body_elems(obj.body, elems)
     elif obj.type == 'BlockStatement':
     elif obj.type == 'BlockStatement':
         for s in obj.body:
         for s in obj.body:

File diff suppressed because it is too large
+ 324 - 214
package-lock.json


+ 2 - 2
package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "wekan",
   "name": "wekan",
-  "version": "v5.05.0",
+  "version": "v5.09.0",
   "description": "Open-Source kanban",
   "description": "Open-Source kanban",
   "private": true,
   "private": true,
   "scripts": {
   "scripts": {
@@ -72,7 +72,7 @@
     "ldapjs": "^2.2.3",
     "ldapjs": "^2.2.3",
     "markdown-it": "^12.0.4",
     "markdown-it": "^12.0.4",
     "markdown-it-emoji": "^2.0.0",
     "markdown-it-emoji": "^2.0.0",
-    "meteor-node-stubs": "^1.0.1",
+    "meteor-node-stubs": "^1.0.2",
     "mongodb": "^3.6.4",
     "mongodb": "^3.6.4",
     "os": "^0.1.1",
     "os": "^0.1.1",
     "page": "^1.11.5",
     "page": "^1.11.5",

File diff suppressed because it is too large
+ 18518 - 192
public/api/wekan.html


+ 3647 - 1
public/api/wekan.yml

@@ -1,7 +1,7 @@
 swagger: '2.0'
 swagger: '2.0'
 info:
 info:
   title: Wekan REST API
   title: Wekan REST API
-  version: v5.05
+  version: v5.09
   description: |
   description: |
     The REST API allows you to control and extend Wekan with ease.
     The REST API allows you to control and extend Wekan with ease.
 
 
@@ -134,4 +134,3650 @@ paths:
           description: |
           description: |
             Error in registration
             Error in registration
 
 
+  /api/boards:
+    get:
+      operationId: get_public_boards
+      summary: Get all public boards
+      tags:
+        - Boards
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: array
+            items:
+              type: object
+              properties:
+                _id:
+                  type: string
+                title:
+                  type: string
+    post:
+      operationId: new_board
+      summary: Create a board
+      description: |
+        This allows to create a board.
+
+         The color has to be chosen between `belize`, `nephritis`, `pomegranate`,
+         `pumpkin`, `wisteria`, `moderatepink`, `strongcyan`,
+         `limegreen`, `midnight`, `dark`, `relax`, `corteza`:
+
+         <img src="https://wekan.github.io/board-colors.png" width="40%" alt="Wekan logo" />
+      tags:
+        - Boards
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: title
+          in: formData
+          description: |
+            the new title of the board
+          type: string
+          required: true
+        - name: owner
+          in: formData
+          description: |
+            "ABCDE12345" <= User ID in Wekan.
+                 (Not username or email)
+          type: string
+          required: true
+        - name: isAdmin
+          in: formData
+          description: |
+            is the owner an admin of the board (default true)
+          type: boolean
+          required: false
+        - name: isActive
+          in: formData
+          description: |
+            is the board active (default true)
+          type: boolean
+          required: false
+        - name: isNoComments
+          in: formData
+          description: |
+            disable comments (default false)
+          type: boolean
+          required: false
+        - name: isCommentOnly
+          in: formData
+          description: |
+            only enable comments (default false)
+          type: boolean
+          required: false
+        - name: isWorker
+          in: formData
+          description: |
+            only move cards, assign himself to card and comment (default false)
+          type: boolean
+          required: false
+        - name: permission
+          in: formData
+          description: |
+            "private" board <== Set to "public" if you
+                 want public Wekan board
+          type: string
+          required: false
+        - name: color
+          in: formData
+          description: |
+            the color of the board
+          type: string
+          required: false
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+              defaultSwimlaneId:
+                type: string
+  /api/boards/{board}:
+    get:
+      operationId: get_board
+      summary: Get the board with that particular ID
+      tags:
+        - Boards
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the ID of the board to retrieve the data
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            $ref: "#/definitions/Boards"
+    delete:
+      operationId: delete_board
+      summary: Delete a board
+      tags:
+        - Boards
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the ID of the board
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+  /api/boards/{board}/attachments:
+    get:
+      operationId: get_board_attachments
+      summary: Get the list of attachments of a board
+      tags:
+        - Boards
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: array
+            items:
+              type: object
+              properties:
+                attachmentId:
+                  type: string
+                attachmentName:
+                  type: string
+                attachmentType:
+                  type: string
+                cardId:
+                  type: string
+                listId:
+                  type: string
+                swimlaneId:
+                  type: string
+  /api/boards/{board}/cards/{card}/checklists:
+    get:
+      operationId: get_all_checklists
+      summary: Get the list of checklists attached to a card
+      tags:
+        - Checklists
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: card
+          in: path
+          description: |
+            the card ID
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: array
+            items:
+              type: object
+              properties:
+                _id:
+                  type: string
+                title:
+                  type: string
+    post:
+      operationId: new_checklist
+      summary: create a new checklist
+      tags:
+        - Checklists
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: title
+          in: formData
+          description: |
+            the title of the new checklist
+          type: string
+          required: true
+        - name: items
+          in: formData
+          description: |
+            the list of items on the new checklist
+          type: string
+          required: false
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: card
+          in: path
+          description: |
+            the card ID
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/boards/{board}/cards/{card}/checklists/{checklist}:
+    get:
+      operationId: get_checklist
+      summary: Get a checklist
+      tags:
+        - Checklists
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: card
+          in: path
+          description: |
+            the card ID
+          type: string
+          required: true
+        - name: checklist
+          in: path
+          description: |
+            the ID of the checklist
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              cardId:
+                type: string
+              title:
+                type: string
+              finishedAt:
+                type: string
+              createdAt:
+                type: string
+              sort:
+                type: number
+              items:
+                type: array
+                items:
+                  type: object
+                  properties:
+                    _id:
+                      type: string
+                    title:
+                      type: string
+                    isFinished:
+                      type: boolean
+    delete:
+      operationId: delete_checklist
+      summary: Delete a checklist
+      description: |
+        The checklist will be removed, not put in the recycle bin.
+      tags:
+        - Checklists
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: card
+          in: path
+          description: |
+            the card ID
+          type: string
+          required: true
+        - name: checklist
+          in: path
+          description: |
+            the ID of the checklist to remove
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}:
+    get:
+      operationId: get_checklist_item
+      summary: Get a checklist item
+      tags:
+        - ChecklistItems
+        - Checklists
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: card
+          in: path
+          description: |
+            the card ID
+          type: string
+          required: true
+        - name: checklist
+          in: path
+          description: |
+            the checklist ID
+          type: string
+          required: true
+        - name: item
+          in: path
+          description: |
+            the ID of the item
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            $ref: "#/definitions/ChecklistItems"
+    put:
+      operationId: edit_checklist_item
+      summary: Edit a checklist item
+      tags:
+        - ChecklistItems
+        - Checklists
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: isFinished
+          in: formData
+          description: |
+            is the item checked?
+          type: string
+          required: false
+        - name: title
+          in: formData
+          description: |
+            the new text of the item
+          type: string
+          required: false
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: card
+          in: path
+          description: |
+            the card ID
+          type: string
+          required: true
+        - name: checklist
+          in: path
+          description: |
+            the checklist ID
+          type: string
+          required: true
+        - name: item
+          in: path
+          description: |
+            the ID of the item
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+    delete:
+      operationId: delete_checklist_item
+      summary: Delete a checklist item
+      description: |
+        Note: this operation can't be reverted.
+      tags:
+        - ChecklistItems
+        - Checklists
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: card
+          in: path
+          description: |
+            the card ID
+          type: string
+          required: true
+        - name: checklist
+          in: path
+          description: |
+            the checklist ID
+          type: string
+          required: true
+        - name: item
+          in: path
+          description: |
+            the ID of the item to be removed
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/boards/{board}/cards/{card}/comments:
+    get:
+      operationId: get_all_comments
+      summary: Get all comments attached to a card
+      tags:
+        - CardComments
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID of the card
+          type: string
+          required: true
+        - name: card
+          in: path
+          description: |
+            the ID of the card
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: array
+            items:
+              type: object
+              properties:
+                _id:
+                  type: string
+                comment:
+                  type: string
+                authorId:
+                  type: string
+    post:
+      operationId: new_comment
+      summary: Add a comment on a card
+      tags:
+        - CardComments
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: authorId
+          in: formData
+          description: |
+            the user who 'posted' the comment
+          type: string
+          required: true
+        - name: comment
+          in: formData
+          description: the comment value
+          type: string
+          required: true
+        - name: board
+          in: path
+          description: |
+            the board ID of the card
+          type: string
+          required: true
+        - name: card
+          in: path
+          description: |
+            the ID of the card
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/boards/{board}/cards/{card}/comments/{comment}:
+    get:
+      operationId: get_comment
+      summary: Get a comment on a card
+      tags:
+        - CardComments
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID of the card
+          type: string
+          required: true
+        - name: card
+          in: path
+          description: |
+            the ID of the card
+          type: string
+          required: true
+        - name: comment
+          in: path
+          description: |
+            the ID of the comment to retrieve
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            $ref: "#/definitions/CardComments"
+    delete:
+      operationId: delete_comment
+      summary: Delete a comment on a card
+      tags:
+        - CardComments
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID of the card
+          type: string
+          required: true
+        - name: card
+          in: path
+          description: |
+            the ID of the card
+          type: string
+          required: true
+        - name: comment
+          in: path
+          description: |
+            the ID of the comment to delete
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue}:
+    get:
+      operationId: get_cards_by_custom_field
+      summary: Get all Cards that matchs a value of a specific custom field
+      tags:
+        - Cards
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: customField
+          in: path
+          description: |
+            the list ID
+          type: string
+          required: true
+        - name: customFieldValue
+          in: path
+          description: |
+            the value to look for
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: array
+            items:
+              type: object
+              properties:
+                _id:
+                  type: string
+                title:
+                  type: string
+                description:
+                  type: string
+                listId:
+                  type: string
+                swinlaneId:
+                  type: string
+  /api/boards/{board}/custom-fields:
+    get:
+      operationId: get_all_custom_fields
+      summary: Get the list of Custom Fields attached to a board
+      tags:
+        - CustomFields
+      parameters:
+        - name: board
+          in: path
+          description: the board value
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: array
+            items:
+              type: object
+              properties:
+                _id:
+                  type: string
+                name:
+                  type: string
+                type:
+                  type: string
+    post:
+      operationId: new_custom_field
+      summary: Create a Custom Field
+      tags:
+        - CustomFields
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: name
+          in: formData
+          description: |
+            the name of the custom field
+          type: string
+          required: true
+        - name: type
+          in: formData
+          description: |
+            the type of the custom field
+          type: string
+          required: true
+        - name: settings
+          in: formData
+          description: |
+            the settings object of the custom field
+          type: string
+          required: true
+        - name: showOnCard
+          in: formData
+          description: |
+            should we show the custom field on cards?
+          type: boolean
+          required: true
+        - name: automaticallyOnCard
+          in: formData
+          description: |
+            should the custom fields automatically be added on cards?
+          type: boolean
+          required: true
+        - name: showLabelOnMiniCard
+          in: formData
+          description: |
+            should the label of the custom field be shown on minicards?
+          type: boolean
+          required: true
+        - name: authorId
+          in: formData
+          description: the authorId value
+          type: string
+          required: true
+        - name: board
+          in: path
+          description: the board value
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/boards/{board}/custom-fields/{customField}:
+    get:
+      operationId: get_custom_field
+      summary: Get a Custom Fields attached to a board
+      tags:
+        - CustomFields
+      parameters:
+        - name: board
+          in: path
+          description: the board value
+          type: string
+          required: true
+        - name: customField
+          in: path
+          description: |
+            the ID of the custom field
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: array
+            items:
+              type: object
+              properties:
+                _id:
+                  type: string
+                boardIds:
+                  type: string
+    put:
+      operationId: edit_custom_field
+      summary: Update a Custom Field
+      tags:
+        - CustomFields
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: name
+          in: formData
+          description: |
+            the name of the custom field
+          type: string
+          required: true
+        - name: type
+          in: formData
+          description: |
+            the type of the custom field
+          type: string
+          required: true
+        - name: settings
+          in: formData
+          description: |
+            the settings object of the custom field
+          type: string
+          required: true
+        - name: showOnCard
+          in: formData
+          description: |
+            should we show the custom field on cards
+          type: boolean
+          required: true
+        - name: automaticallyOnCard
+          in: formData
+          description: |
+            should the custom fields automatically be added on cards
+          type: boolean
+          required: true
+        - name: alwaysOnCard
+          in: formData
+          description: the alwaysOnCard value
+          type: string
+          required: true
+        - name: showLabelOnMiniCard
+          in: formData
+          description: |
+            should the label of the custom field be shown on minicards
+          type: boolean
+          required: true
+        - name: board
+          in: path
+          description: the board value
+          type: string
+          required: true
+        - name: customField
+          in: path
+          description: the customField value
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+    delete:
+      operationId: delete_custom_field
+      summary: Delete a Custom Fields attached to a board
+      description: |
+        The Custom Field can't be retrieved after this operation
+      tags:
+        - CustomFields
+      parameters:
+        - name: board
+          in: path
+          description: the board value
+          type: string
+          required: true
+        - name: customField
+          in: path
+          description: |
+            the ID of the custom field
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/boards/{board}/custom-fields/{customField}/dropdown-items:
+    post:
+      operationId: add_custom_field_dropdown_items
+      summary: Update a Custom Field's dropdown items
+      tags:
+        - CustomFields
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: items
+          in: formData
+          description: |
+            names of the custom field
+          type: string
+          required: false
+        - name: board
+          in: path
+          description: the board value
+          type: string
+          required: true
+        - name: customField
+          in: path
+          description: the customField value
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}:
+    put:
+      operationId: edit_custom_field_dropdown_item
+      summary: Update a Custom Field's dropdown item
+      tags:
+        - CustomFields
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: name
+          in: formData
+          description: |
+            names of the custom field
+          type: string
+          required: true
+        - name: board
+          in: path
+          description: the board value
+          type: string
+          required: true
+        - name: customField
+          in: path
+          description: the customField value
+          type: string
+          required: true
+        - name: dropdownItem
+          in: path
+          description: the dropdownItem value
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+    delete:
+      operationId: delete_custom_field_dropdown_item
+      summary: Update a Custom Field's dropdown items
+      tags:
+        - CustomFields
+      parameters:
+        - name: board
+          in: path
+          description: the board value
+          type: string
+          required: true
+        - name: customField
+          in: path
+          description: the customField value
+          type: string
+          required: true
+        - name: dropdownItem
+          in: path
+          description: the dropdownItem value
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/boards/{board}/export:
+    get:
+      operationId: exportJson
+      summary: This route is used to export the board to a json file format.
+      description: |
+        If user is already logged-in, pass loginToken as param
+         "authToken": '/api/boards/:boardId/export?authToken=:token'
+
+         See https://blog.kayla.com.au/server-side-route-authentication-in-meteor/
+         for detailed explanations
+      tags:
+        - Boards
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the ID of the board we are exporting
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+  /api/boards/{board}/integrations:
+    get:
+      operationId: get_all_integrations
+      summary: Get all integrations in board
+      tags:
+        - Integrations
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: array
+            items:
+              $ref: "#/definitions/Integrations"
+    post:
+      operationId: new_integration
+      summary: Create a new integration
+      tags:
+        - Integrations
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: url
+          in: formData
+          description: |
+            the URL of the integration
+          type: string
+          required: true
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/boards/{board}/integrations/{int}:
+    get:
+      operationId: get_integration
+      summary: Get a single integration in board
+      tags:
+        - Integrations
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: int
+          in: path
+          description: |
+            the integration ID
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            $ref: "#/definitions/Integrations"
+    put:
+      operationId: edit_integration
+      summary: Edit integration data
+      tags:
+        - Integrations
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: enabled
+          in: formData
+          description: |
+            is the integration enabled?
+          type: string
+          required: false
+        - name: title
+          in: formData
+          description: |
+            new name of the integration
+          type: string
+          required: false
+        - name: url
+          in: formData
+          description: |
+            new URL of the integration
+          type: string
+          required: false
+        - name: token
+          in: formData
+          description: |
+            new token of the integration
+          type: string
+          required: false
+        - name: activities
+          in: formData
+          description: |
+            new list of activities of the integration
+          type: string
+          required: false
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: int
+          in: path
+          description: |
+            the integration ID
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+    delete:
+      operationId: delete_integration
+      summary: Delete integration
+      tags:
+        - Integrations
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: int
+          in: path
+          description: |
+            the integration ID
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/boards/{board}/integrations/{int}/activities:
+    delete:
+      operationId: delete_integration_activities
+      summary: Delete subscribed activities
+      tags:
+        - Integrations
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: int
+          in: path
+          description: |
+            the integration ID
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            $ref: "#/definitions/Integrations"
+    post:
+      operationId: new_integration_activities
+      summary: Add subscribed activities
+      tags:
+        - Integrations
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: activities
+          in: formData
+          description: the activities value
+          type: string
+          required: true
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: int
+          in: path
+          description: |
+            the integration ID
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            $ref: "#/definitions/Integrations"
+  /api/boards/{board}/labels:
+    put:
+      operationId: add_board_label
+      summary: Add a label to a board
+      description: |
+        If the board doesn't have the name/color label, this function
+         adds the label to the board.
+      tags:
+        - Boards
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: label
+          in: formData
+          description: the label value
+          type: string
+          required: true
+        - name: board
+          in: path
+          description: |
+            the board
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: string
+  /api/boards/{board}/lists:
+    get:
+      operationId: get_all_lists
+      summary: Get the list of Lists attached to a board
+      tags:
+        - Lists
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: array
+            items:
+              type: object
+              properties:
+                _id:
+                  type: string
+                title:
+                  type: string
+    post:
+      operationId: new_list
+      summary: Add a List to a board
+      tags:
+        - Lists
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: title
+          in: formData
+          description: |
+            the title of the List
+          type: string
+          required: true
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/boards/{board}/lists/{list}:
+    get:
+      operationId: get_list
+      summary: Get a List attached to a board
+      tags:
+        - Lists
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: list
+          in: path
+          description: |
+            the List ID
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            $ref: "#/definitions/Lists"
+    delete:
+      operationId: delete_list
+      summary: Delete a List
+      description: |
+        This **deletes** a list from a board.
+         The list is not put in the recycle bin.
+      tags:
+        - Lists
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: list
+          in: path
+          description: |
+            the ID of the list to remove
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/boards/{board}/lists/{list}/cards:
+    get:
+      operationId: get_all_cards
+      summary: Get all Cards attached to a List
+      tags:
+        - Cards
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: list
+          in: path
+          description: |
+            the list ID
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: array
+            items:
+              type: object
+              properties:
+                _id:
+                  type: string
+                title:
+                  type: string
+                description:
+                  type: string
+    post:
+      operationId: new_card
+      summary: Create a new Card
+      tags:
+        - Cards
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: authorId
+          in: formData
+          description: the authorId value
+          type: string
+          required: true
+        - name: members
+          in: formData
+          description: |
+            the member IDs list of the new card
+          type: string
+          required: false
+        - name: assignees
+          in: formData
+          description: |
+            the array of maximum one ID of assignee of the new card
+          type: string
+          required: false
+        - name: title
+          in: formData
+          description: |
+            the title of the new card
+          type: string
+          required: true
+        - name: description
+          in: formData
+          description: |
+            the description of the new card
+          type: string
+          required: true
+        - name: swimlaneId
+          in: formData
+          description: |
+            the swimlane ID of the new card
+          type: string
+          required: true
+        - name: board
+          in: path
+          description: |
+            the board ID of the new card
+          type: string
+          required: true
+        - name: list
+          in: path
+          description: |
+            the list ID of the new card
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/boards/{board}/lists/{list}/cards/{card}:
+    get:
+      operationId: get_card
+      summary: Get a Card
+      tags:
+        - Cards
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: list
+          in: path
+          description: |
+            the list ID of the card
+          type: string
+          required: true
+        - name: card
+          in: path
+          description: |
+            the card ID
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            $ref: "#/definitions/Cards"
+    put:
+      operationId: edit_card
+      summary: Edit Fields in a Card
+      description: |
+        Edit a card
+
+         The color has to be chosen between `white`, `green`, `yellow`, `orange`,
+         `red`, `purple`, `blue`, `sky`, `lime`, `pink`, `black`, `silver`,
+         `peachpuff`, `crimson`, `plum`, `darkgreen`, `slateblue`, `magenta`,
+         `gold`, `navy`, `gray`, `saddlebrown`, `paleturquoise`, `mistyrose`,
+         `indigo`:
+
+         <img src="/card-colors.png" width="40%" alt="Wekan card colors" />
+
+         Note: setting the color to white has the same effect than removing it.
+      tags:
+        - Cards
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: title
+          in: formData
+          description: |
+            the new title of the card
+          type: string
+          required: false
+        - name: sort
+          in: formData
+          description: |
+            the new sort value of the card
+          type: string
+          required: false
+        - name: parentId
+          in: formData
+          description: |
+            change the parent of the card
+          type: string
+          required: false
+        - name: description
+          in: formData
+          description: |
+            the new description of the card
+          type: string
+          required: false
+        - name: color
+          in: formData
+          description: |
+            the new color of the card
+          type: string
+          required: false
+        - name: vote
+          in: formData
+          description: |
+            the vote object
+          type: object
+          required: false
+        - name: labelIds
+          in: formData
+          description: |
+            the new list of label IDs attached to the card
+          type: string
+          required: false
+        - name: requestedBy
+          in: formData
+          description: |
+            the new requestedBy field of the card
+          type: string
+          required: false
+        - name: assignedBy
+          in: formData
+          description: |
+            the new assignedBy field of the card
+          type: string
+          required: false
+        - name: receivedAt
+          in: formData
+          description: |
+            the new receivedAt field of the card
+          type: string
+          required: false
+        - name: startAt
+          in: formData
+          description: |
+            the new startAt field of the card
+          type: string
+          required: false
+        - name: dueAt
+          in: formData
+          description: |
+            the new dueAt field of the card
+          type: string
+          required: false
+        - name: endAt
+          in: formData
+          description: |
+            the new endAt field of the card
+          type: string
+          required: false
+        - name: spentTime
+          in: formData
+          description: |
+            the new spentTime field of the card
+          type: string
+          required: false
+        - name: isOverTime
+          in: formData
+          description: |
+            the new isOverTime field of the card
+          type: boolean
+          required: false
+        - name: customFields
+          in: formData
+          description: |
+            the new customFields value of the card
+          type: string
+          required: false
+        - name: members
+          in: formData
+          description: |
+            the new list of member IDs attached to the card
+          type: string
+          required: false
+        - name: assignees
+          in: formData
+          description: |
+            the array of maximum one ID of assignee attached to the card
+          type: string
+          required: false
+        - name: swimlaneId
+          in: formData
+          description: |
+            the new swimlane ID of the card
+          type: string
+          required: false
+        - name: listId
+          in: formData
+          description: |
+            the new list ID of the card (move operation)
+          type: string
+          required: false
+        - name: authorId
+          in: formData
+          description: |
+            change the owner of the card
+          type: string
+          required: false
+        - name: board
+          in: path
+          description: |
+            the board ID of the card
+          type: string
+          required: true
+        - name: list
+          in: path
+          description: |
+            the list ID of the card
+          type: string
+          required: true
+        - name: card
+          in: path
+          description: |
+            the ID of the card
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+    delete:
+      operationId: delete_card
+      summary: Delete a card from a board
+      description: |
+        This operation **deletes** a card, and therefore the card
+         is not put in the recycle bin.
+      tags:
+        - Cards
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID of the card
+          type: string
+          required: true
+        - name: list
+          in: path
+          description: |
+            the list ID of the card
+          type: string
+          required: true
+        - name: card
+          in: path
+          description: |
+            the ID of the card
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/boards/{board}/members/{member}:
+    post:
+      operationId: set_board_member_permission
+      summary: Change the permission of a member of a board
+      tags:
+        - Boards
+        - Users
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: isAdmin
+          in: formData
+          description: |
+            admin capability
+          type: boolean
+          required: true
+        - name: isNoComments
+          in: formData
+          description: |
+            NoComments capability
+          type: boolean
+          required: true
+        - name: isCommentOnly
+          in: formData
+          description: |
+            CommentsOnly capability
+          type: boolean
+          required: true
+        - name: isWorker
+          in: formData
+          description: |
+            Worker capability
+          type: boolean
+          required: true
+        - name: board
+          in: path
+          description: |
+            the ID of the board that we are changing
+          type: string
+          required: true
+        - name: member
+          in: path
+          description: |
+            the ID of the user to change permissions
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+  /api/boards/{board}/members/{user}/add:
+    post:
+      operationId: add_board_member
+      summary: Add New Board Member with Role
+      description: |
+        Only the admin user (the first user) can call the REST API.
+
+         **Note**: see [Boards.set_board_member_permission](#set_board_member_permission)
+         to later change the permissions.
+      tags:
+        - Users
+        - Boards
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: action
+          in: formData
+          description: the action value
+          type: string
+          required: true
+        - name: isAdmin
+          in: formData
+          description: |
+            is the user an admin of the board
+          type: boolean
+          required: true
+        - name: isNoComments
+          in: formData
+          description: |
+            disable comments
+          type: boolean
+          required: true
+        - name: isCommentOnly
+          in: formData
+          description: |
+            only enable comments
+          type: boolean
+          required: true
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: user
+          in: path
+          description: |
+            the user ID
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+              title:
+                type: string
+  /api/boards/{board}/members/{user}/remove:
+    post:
+      operationId: remove_board_member
+      summary: Remove Member from Board
+      description: |
+        Only the admin user (the first user) can call the REST API.
+      tags:
+        - Users
+        - Boards
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: action
+          in: formData
+          description: |
+            the action (needs to be `remove`)
+          type: string
+          required: true
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: user
+          in: path
+          description: |
+            the user ID
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+              title:
+                type: string
+  /api/boards/{board}/swimlanes:
+    get:
+      operationId: get_all_swimlanes
+      summary: Get the list of swimlanes attached to a board
+      tags:
+        - Swimlanes
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the ID of the board
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: array
+            items:
+              type: object
+              properties:
+                _id:
+                  type: string
+                title:
+                  type: string
+    post:
+      operationId: new_swimlane
+      summary: Add a swimlane to a board
+      tags:
+        - Swimlanes
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: title
+          in: formData
+          description: |
+            the new title of the swimlane
+          type: string
+          required: true
+        - name: board
+          in: path
+          description: |
+            the ID of the board
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/boards/{board}/swimlanes/{swimlane}:
+    get:
+      operationId: get_swimlane
+      summary: Get a swimlane
+      tags:
+        - Swimlanes
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the ID of the board
+          type: string
+          required: true
+        - name: swimlane
+          in: path
+          description: |
+            the ID of the swimlane
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            $ref: "#/definitions/Swimlanes"
+    delete:
+      operationId: delete_swimlane
+      summary: Delete a swimlane
+      description: |
+        The swimlane will be deleted, not moved to the recycle bin
+      tags:
+        - Swimlanes
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the ID of the board
+          type: string
+          required: true
+        - name: swimlane
+          in: path
+          description: |
+            the ID of the swimlane
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/boards/{board}/swimlanes/{swimlane}/cards:
+    get:
+      operationId: get_swimlane_cards
+      summary: get all cards attached to a swimlane
+      tags:
+        - Cards
+      parameters:
+        - name: board
+          in: path
+          description: |
+            the board ID
+          type: string
+          required: true
+        - name: swimlane
+          in: path
+          description: |
+            the swimlane ID
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: array
+            items:
+              type: object
+              properties:
+                _id:
+                  type: string
+                title:
+                  type: string
+                description:
+                  type: string
+                listId:
+                  type: string
+  /api/boards_count:
+    get:
+      operationId: get_boards_count
+      summary: Get public and private boards count
+      tags:
+        - Boards
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              private:
+                type: integer
+              public:
+                type: integer
+  /api/createtoken/{user}:
+    post:
+      operationId: create_user_token
+      summary: Create a user token
+      description: |
+        Only the admin user (the first user) can call the REST API.
+      tags:
+        - Users
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: user
+          in: path
+          description: |
+            the ID of the user to create token for.
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/user:
+    get:
+      operationId: get_current_user
+      summary: returns the current user
+      tags:
+        - Users
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            $ref: "#/definitions/Users"
+  /api/users:
+    get:
+      operationId: get_all_users
+      summary: return all the users
+      description: |
+        Only the admin user (the first user) can call the REST API.
+      tags:
+        - Users
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: array
+            items:
+              type: object
+              properties:
+                _id:
+                  type: string
+                username:
+                  type: string
+    post:
+      operationId: new_user
+      summary: Create a new user
+      description: |
+        Only the admin user (the first user) can call the REST API.
+      tags:
+        - Users
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: username
+          in: formData
+          description: |
+            the new username
+          type: string
+          required: true
+        - name: email
+          in: formData
+          description: |
+            the email of the new user
+          type: string
+          required: true
+        - name: password
+          in: formData
+          description: |
+            the password of the new user
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/users/{user}:
+    get:
+      operationId: get_user
+      summary: get a given user
+      description: |
+        Only the admin user (the first user) can call the REST API.
+      tags:
+        - Users
+      parameters:
+        - name: user
+          in: path
+          description: |
+            the user ID or username
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            $ref: "#/definitions/Users"
+    put:
+      operationId: edit_user
+      summary: edit a given user
+      description: |
+        Only the admin user (the first user) can call the REST API.
+
+         Possible values for *action*:
+         - `takeOwnership`: The admin takes the ownership of ALL boards of the user (archived and not archived) where the user is admin on.
+         - `disableLogin`: Disable a user (the user is not allowed to login and his login tokens are purged)
+         - `enableLogin`: Enable a user
+      tags:
+        - Users
+      consumes:
+        - multipart/form-data
+        - application/json
+      parameters:
+        - name: action
+          in: formData
+          description: |
+            the action
+          type: string
+          required: true
+        - name: user
+          in: path
+          description: |
+            the user ID
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+              title:
+                type: string
+    delete:
+      operationId: delete_user
+      summary: Delete a user
+      description: |
+        Only the admin user (the first user) can call the REST API.
+      tags:
+        - Users
+      parameters:
+        - name: user
+          in: path
+          description: |
+            the ID of the user to delete
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: object
+            properties:
+              _id:
+                type: string
+  /api/users/{user}/boards:
+    get:
+      operationId: get_boards_from_user
+      summary: Get all boards attached to a user
+      tags:
+        - Boards
+      parameters:
+        - name: user
+          in: path
+          description: |
+            the ID of the user to retrieve the data
+          type: string
+          required: true
+      produces:
+        - application/json
+      security:
+          - UserSecurity: []
+      responses:
+        '200':
+          description: |-
+            200 response
+          schema:
+            type: array
+            items:
+              type: object
+              properties:
+                _id:
+                  type: string
+                title:
+                  type: string
 definitions:
 definitions:
+  Boards:
+    type: object
+    description:  This is a Board.
+    properties:
+      title:
+        description: |
+           The title of the board
+        type: string
+      slug:
+        description: |
+           The title slugified.
+        type: string
+      archived:
+        description: |
+           Is the board archived?
+        type: boolean
+      archivedAt:
+        description: |
+           Latest archiving time of the board
+        type: string
+        x-nullable: true
+      createdAt:
+        description: |
+           Creation time of the board
+        type: string
+      modifiedAt:
+        description: |
+           Last modification time of the board
+        type: string
+        x-nullable: true
+      stars:
+        description: |
+           How many stars the board has
+        type: number
+      labels:
+        description: |
+           List of labels attached to a board
+        type: array
+        items:
+          $ref: "#/definitions/BoardsLabels"
+      members:
+        description: |
+           List of members of a board
+        type: array
+        items:
+          $ref: "#/definitions/BoardsMembers"
+      permission:
+        description: |
+           visibility of the board
+        type: string
+        enum:
+          - public
+          - private
+      color:
+        description: |
+           The color of the board.
+        type: string
+        enum:
+          - belize
+          - nephritis
+          - pomegranate
+          - pumpkin
+          - wisteria
+          - moderatepink
+          - strongcyan
+          - limegreen
+          - midnight
+          - dark
+          - relax
+          - corteza
+          - clearblue
+          - natural
+          - modern
+          - moderndark
+      description:
+        description: |
+           The description of the board
+        type: string
+        x-nullable: true
+      subtasksDefaultBoardId:
+        description: |
+           The default board ID assigned to subtasks.
+        type: string
+        x-nullable: true
+      subtasksDefaultListId:
+        description: |
+           The default List ID assigned to subtasks.
+        type: string
+        x-nullable: true
+      dateSettingsDefaultBoardId:
+        type: string
+        x-nullable: true
+      dateSettingsDefaultListId:
+        type: string
+        x-nullable: true
+      allowsSubtasks:
+        description: |
+           Does the board allows subtasks?
+        type: boolean
+      allowsAttachments:
+        description: |
+           Does the board allows attachments?
+        type: boolean
+      allowsChecklists:
+        description: |
+           Does the board allows checklists?
+        type: boolean
+      allowsComments:
+        description: |
+           Does the board allows comments?
+        type: boolean
+      allowsDescriptionTitle:
+        description: |
+           Does the board allows description title?
+        type: boolean
+      allowsDescriptionText:
+        description: |
+           Does the board allows description text?
+        type: boolean
+      allowsActivities:
+        description: |
+           Does the board allows comments?
+        type: boolean
+      allowsLabels:
+        description: |
+           Does the board allows labels?
+        type: boolean
+      allowsAssignee:
+        description: |
+           Does the board allows assignee?
+        type: boolean
+      allowsMembers:
+        description: |
+           Does the board allows members?
+        type: boolean
+      allowsRequestedBy:
+        description: |
+           Does the board allows requested by?
+        type: boolean
+      allowsAssignedBy:
+        description: |
+           Does the board allows requested by?
+        type: boolean
+      allowsReceivedDate:
+        description: |
+           Does the board allows received date?
+        type: boolean
+      allowsStartDate:
+        description: |
+           Does the board allows start date?
+        type: boolean
+      allowsEndDate:
+        description: |
+           Does the board allows end date?
+        type: boolean
+      allowsDueDate:
+        description: |
+           Does the board allows due date?
+        type: boolean
+      presentParentTask:
+        description: |
+           Controls how to present the parent task:
+
+           - `prefix-with-full-path`: add a prefix with the full path
+           - `prefix-with-parent`: add a prefisx with the parent name
+           - `subtext-with-full-path`: add a subtext with the full path
+           - `subtext-with-parent`: add a subtext with the parent name
+           - `no-parent`: does not show the parent at all
+        type: string
+        enum:
+          - prefix-with-full-path
+          - prefix-with-parent
+          - subtext-with-full-path
+          - subtext-with-parent
+          - no-parent
+        x-nullable: true
+      startAt:
+        description: |
+           Starting date of the board.
+        type: string
+        x-nullable: true
+      dueAt:
+        description: |
+           Due date of the board.
+        type: string
+        x-nullable: true
+      endAt:
+        description: |
+           End date of the board.
+        type: string
+        x-nullable: true
+      spentTime:
+        description: |
+           Time spent in the board.
+        type: number
+        x-nullable: true
+      isOvertime:
+        description: |
+           Is the board overtimed?
+        type: boolean
+        x-nullable: true
+      type:
+        description: |
+           The type of board
+        type: string
+      sort:
+        description: |
+           Sort value
+        type: number
+    required:
+      - title
+      - slug
+      - archived
+      - createdAt
+      - stars
+      - labels
+      - members
+      - permission
+      - color
+      - allowsSubtasks
+      - allowsAttachments
+      - allowsChecklists
+      - allowsComments
+      - allowsDescriptionTitle
+      - allowsDescriptionText
+      - allowsActivities
+      - allowsLabels
+      - allowsAssignee
+      - allowsMembers
+      - allowsRequestedBy
+      - allowsAssignedBy
+      - allowsReceivedDate
+      - allowsStartDate
+      - allowsEndDate
+      - allowsDueDate
+      - type
+      - sort
+  BoardsLabels:
+    type: object
+    properties:
+      _id:
+        description: |
+           Unique id of a label
+        type: string
+      name:
+        description: |
+           Name of a label
+        type: string
+      color:
+        description: |
+           color of a label.
+
+           Can be amongst `green`, `yellow`, `orange`, `red`, `purple`,
+           `blue`, `sky`, `lime`, `pink`, `black`,
+           `silver`, `peachpuff`, `crimson`, `plum`, `darkgreen`,
+           `slateblue`, `magenta`, `gold`, `navy`, `gray`,
+           `saddlebrown`, `paleturquoise`, `mistyrose`, `indigo`
+        type: string
+        enum:
+          - green
+          - yellow
+          - orange
+          - red
+          - purple
+          - blue
+          - sky
+          - lime
+          - pink
+          - black
+          - silver
+          - peachpuff
+          - crimson
+          - plum
+          - darkgreen
+          - slateblue
+          - magenta
+          - gold
+          - navy
+          - gray
+          - saddlebrown
+          - paleturquoise
+          - mistyrose
+          - indigo
+    required:
+      - _id
+      - color
+  BoardsMembers:
+    type: object
+    properties:
+      userId:
+        description: |
+           The uniq ID of the member
+        type: string
+      isAdmin:
+        description: |
+           Is the member an admin of the board?
+        type: boolean
+      isActive:
+        description: |
+           Is the member active?
+        type: boolean
+      isNoComments:
+        description: |
+           Is the member not allowed to make comments
+        type: boolean
+      isCommentOnly:
+        description: |
+           Is the member only allowed to comment on the board
+        type: boolean
+      isWorker:
+        description: |
+           Is the member only allowed to move card, assign himself to card and comment
+        type: boolean
+    required:
+      - userId
+      - isAdmin
+      - isActive
+  CardComments:
+    type: object
+    description:  A comment on a card
+    properties:
+      boardId:
+        description: |
+           the board ID
+        type: string
+      cardId:
+        description: |
+           the card ID
+        type: string
+      text:
+        description: |
+           the text of the comment
+        type: string
+      createdAt:
+        description: |
+           when was the comment created
+        type: string
+      modifiedAt:
+        type: string
+      userId:
+        description: |
+           the author ID of the comment
+        type: string
+    required:
+      - boardId
+      - cardId
+      - text
+      - createdAt
+      - modifiedAt
+      - userId
+  Cards:
+    type: object
+    properties:
+      title:
+        description: |
+           the title of the card
+        type: string
+        x-nullable: true
+      archived:
+        description: |
+           is the card archived
+        type: boolean
+      archivedAt:
+        description: |
+           latest archiving date
+        type: string
+        x-nullable: true
+      parentId:
+        description: |
+           ID of the parent card
+        type: string
+        x-nullable: true
+      listId:
+        description: |
+           List ID where the card is
+        type: string
+        x-nullable: true
+      swimlaneId:
+        description: |
+           Swimlane ID where the card is
+        type: string
+      boardId:
+        description: |
+           Board ID of the card
+        type: string
+        x-nullable: true
+      coverId:
+        description: |
+           Cover ID of the card
+        type: string
+        x-nullable: true
+      color:
+        type: string
+        enum:
+          - white
+          - green
+          - yellow
+          - orange
+          - red
+          - purple
+          - blue
+          - sky
+          - lime
+          - pink
+          - black
+          - silver
+          - peachpuff
+          - crimson
+          - plum
+          - darkgreen
+          - slateblue
+          - magenta
+          - gold
+          - navy
+          - gray
+          - saddlebrown
+          - paleturquoise
+          - mistyrose
+          - indigo
+        x-nullable: true
+      createdAt:
+        description: |
+           creation date
+        type: string
+      modifiedAt:
+        type: string
+      customFields:
+        description: |
+           list of custom fields
+        type: array
+        items:
+          $ref: "#/definitions/CardsCustomfields"
+        x-nullable: true
+      dateLastActivity:
+        description: |
+           Date of last activity
+        type: string
+      description:
+        description: |
+           description of the card
+        type: string
+        x-nullable: true
+      requestedBy:
+        description: |
+           who requested the card (ID of the user)
+        type: string
+        x-nullable: true
+      assignedBy:
+        description: |
+           who assigned the card (ID of the user)
+        type: string
+        x-nullable: true
+      labelIds:
+        description: |
+           list of labels ID the card has
+        type: array
+        items:
+          type: string
+          x-nullable: true
+        x-nullable: true
+      members:
+        description: |
+           list of members (user IDs)
+        type: array
+        items:
+          type: string
+          x-nullable: true
+        x-nullable: true
+      assignees:
+        description: |
+           who is assignee of the card (user ID),
+           maximum one ID of assignee in array.
+        type: array
+        items:
+          type: string
+          x-nullable: true
+        x-nullable: true
+      receivedAt:
+        description: |
+           Date the card was received
+        type: string
+        x-nullable: true
+      startAt:
+        description: |
+           Date the card was started to be worked on
+        type: string
+        x-nullable: true
+      dueAt:
+        description: |
+           Date the card is due
+        type: string
+        x-nullable: true
+      endAt:
+        description: |
+           Date the card ended
+        type: string
+        x-nullable: true
+      spentTime:
+        description: |
+           How much time has been spent on this
+        type: number
+        x-nullable: true
+      isOvertime:
+        description: |
+           is the card over time?
+        type: boolean
+        x-nullable: true
+      userId:
+        description: |
+           user ID of the author of the card
+        type: string
+      sort:
+        description: |
+           Sort value
+        type: number
+      subtaskSort:
+        description: |
+           subtask sort value
+        type: number
+        x-nullable: true
+      type:
+        description: |
+           type of the card
+        type: string
+      linkedId:
+        description: |
+           ID of the linked card
+        type: string
+        x-nullable: true
+      vote:
+        description: |
+           vote object, see below
+        $ref: "#/definitions/CardsVote"
+        x-nullable: true
+    required:
+      - archived
+      - swimlaneId
+      - createdAt
+      - modifiedAt
+      - dateLastActivity
+      - userId
+      - sort
+      - type
+  CardsVote:
+    type: object
+    properties:
+      question:
+        type: string
+      positive:
+        description: |
+           list of members (user IDs)
+        type: array
+        items:
+          type: string
+          x-nullable: true
+      negative:
+        description: |
+           list of members (user IDs)
+        type: array
+        items:
+          type: string
+          x-nullable: true
+      end:
+        type: string
+      public:
+        type: boolean
+      allowNonBoardMembers:
+        type: boolean
+    required:
+      - question
+      - public
+      - allowNonBoardMembers
+  CardsCustomfields:
+    type: object
+  ChecklistItems:
+    type: object
+    description:  An item in a checklist
+    properties:
+      title:
+        description: |
+           the text of the item
+        type: string
+      sort:
+        description: |
+           the sorting field of the item
+        type: number
+      isFinished:
+        description: |
+           Is the item checked?
+        type: boolean
+      checklistId:
+        description: |
+           the checklist ID the item is attached to
+        type: string
+      cardId:
+        description: |
+           the card ID the item is attached to
+        type: string
+      createdAt:
+        type: string
+        x-nullable: true
+      modifiedAt:
+        type: string
+    required:
+      - title
+      - sort
+      - isFinished
+      - checklistId
+      - cardId
+      - modifiedAt
+  Checklists:
+    type: object
+    description:  A Checklist
+    properties:
+      cardId:
+        description: |
+           The ID of the card the checklist is in
+        type: string
+      title:
+        description: |
+           the title of the checklist
+        type: string
+      finishedAt:
+        description: |
+           When was the checklist finished
+        type: string
+        x-nullable: true
+      createdAt:
+        description: |
+           Creation date of the checklist
+        type: string
+      modifiedAt:
+        type: string
+      sort:
+        description: |
+           sorting value of the checklist
+        type: number
+    required:
+      - cardId
+      - title
+      - createdAt
+      - modifiedAt
+      - sort
+  CustomFields:
+    type: object
+    description:  A custom field on a card in the board
+    properties:
+      boardIds:
+        description: |
+           the ID of the board
+        type: array
+        items:
+          type: string
+      name:
+        description: |
+           name of the custom field
+        type: string
+      type:
+        description: |
+           type of the custom field
+        type: string
+        enum:
+          - text
+          - number
+          - date
+          - dropdown
+          - checkbox
+          - currency
+      settings:
+        description: |
+           settings of the custom field
+        $ref: "#/definitions/CustomFieldsSettings"
+      showOnCard:
+        description: |
+           should we show on the cards this custom field
+        type: boolean
+      automaticallyOnCard:
+        description: |
+           should the custom fields automatically be added on cards?
+        type: boolean
+      alwaysOnCard:
+        description: |
+           should the custom field be automatically added to all cards?
+        type: boolean
+      showLabelOnMiniCard:
+        description: |
+           should the label of the custom field be shown on minicards?
+        type: boolean
+      createdAt:
+        type: string
+        x-nullable: true
+      modifiedAt:
+        type: string
+    required:
+      - boardIds
+      - name
+      - type
+      - settings
+      - showOnCard
+      - automaticallyOnCard
+      - alwaysOnCard
+      - showLabelOnMiniCard
+      - modifiedAt
+  CustomFieldsSettings:
+    type: object
+    properties:
+      currencyCode:
+        type: string
+      dropdownItems:
+        description: |
+           list of drop down items objects
+        type: array
+        items:
+          $ref: "#/definitions/CustomFieldsSettingsDropdownitems"
+  CustomFieldsSettingsDropdownitems:
+    type: object
+  Integrations:
+    type: object
+    description:  Integration with third-party applications
+    properties:
+      enabled:
+        description: |
+           is the integration enabled?
+        type: boolean
+      title:
+        description: |
+           name of the integration
+        type: string
+        x-nullable: true
+      type:
+        description: |
+           type of the integratation (Default to 'outgoing-webhooks')
+        type: string
+      activities:
+        description: |
+           activities the integration gets triggered (list)
+        type: array
+        items:
+          type: string
+      url:
+        type: string
+      token:
+        description: |
+           token of the integration
+        type: string
+        x-nullable: true
+      boardId:
+        description: |
+           Board ID of the integration
+        type: string
+      createdAt:
+        description: |
+           Creation date of the integration
+        type: string
+      modifiedAt:
+        type: string
+      userId:
+        description: |
+           user ID who created the interation
+        type: string
+    required:
+      - enabled
+      - type
+      - activities
+      - url
+      - boardId
+      - createdAt
+      - modifiedAt
+      - userId
+  Lists:
+    type: object
+    description:  A list (column) in the Wekan board.
+    properties:
+      title:
+        description: |
+           the title of the list
+        type: string
+      starred:
+        description: |
+           if a list is stared
+           then we put it on the top
+        type: boolean
+        x-nullable: true
+      archived:
+        description: |
+           is the list archived
+        type: boolean
+      archivedAt:
+        description: |
+           latest archiving date
+        type: string
+        x-nullable: true
+      boardId:
+        description: |
+           the board associated to this list
+        type: string
+      swimlaneId:
+        description: |
+           the swimlane associated to this list. Used for templates
+        type: string
+      createdAt:
+        description: |
+           creation date
+        type: string
+      sort:
+        description: |
+           is the list sorted
+        type: number
+        x-nullable: true
+      updatedAt:
+        description: |
+           last update of the list
+        type: string
+        x-nullable: true
+      modifiedAt:
+        type: string
+      wipLimit:
+        description: |
+           WIP object, see below
+        $ref: "#/definitions/ListsWiplimit"
+        x-nullable: true
+      color:
+        description: |
+           the color of the list
+        type: string
+        enum:
+          - white
+          - green
+          - yellow
+          - orange
+          - red
+          - purple
+          - blue
+          - sky
+          - lime
+          - pink
+          - black
+          - peachpuff
+          - crimson
+          - plum
+          - darkgreen
+          - slateblue
+          - magenta
+          - gold
+          - navy
+          - gray
+          - saddlebrown
+          - paleturquoise
+          - mistyrose
+          - indigo
+        x-nullable: true
+      type:
+        description: |
+           The type of list
+        type: string
+    required:
+      - title
+      - archived
+      - boardId
+      - swimlaneId
+      - createdAt
+      - modifiedAt
+      - type
+  ListsWiplimit:
+    type: object
+    properties:
+      value:
+        description: |
+           value of the WIP
+        type: number
+      enabled:
+        description: |
+           is the WIP enabled
+        type: boolean
+      soft:
+        description: |
+           is the WIP a soft or hard requirement
+        type: boolean
+    required:
+      - value
+      - enabled
+      - soft
+  Swimlanes:
+    type: object
+    description:  A swimlane is an line in the kaban board.
+    properties:
+      title:
+        description: |
+           the title of the swimlane
+        type: string
+      archived:
+        description: |
+           is the swimlane archived?
+        type: boolean
+      archivedAt:
+        description: |
+           latest archiving date of the swimlane
+        type: string
+        x-nullable: true
+      boardId:
+        description: |
+           the ID of the board the swimlane is attached to
+        type: string
+      createdAt:
+        description: |
+           creation date of the swimlane
+        type: string
+      sort:
+        description: |
+           the sort value of the swimlane
+        type: number
+        x-nullable: true
+      color:
+        description: |
+           the color of the swimlane
+        type: string
+        enum:
+          - white
+          - green
+          - yellow
+          - orange
+          - red
+          - purple
+          - blue
+          - sky
+          - lime
+          - pink
+          - black
+          - peachpuff
+          - crimson
+          - plum
+          - darkgreen
+          - slateblue
+          - magenta
+          - gold
+          - navy
+          - gray
+          - saddlebrown
+          - paleturquoise
+          - mistyrose
+          - indigo
+        x-nullable: true
+      updatedAt:
+        description: |
+           when was the swimlane last edited
+        type: string
+        x-nullable: true
+      modifiedAt:
+        type: string
+      type:
+        description: |
+           The type of swimlane
+        type: string
+    required:
+      - title
+      - archived
+      - boardId
+      - createdAt
+      - modifiedAt
+      - type
+  Users:
+    type: object
+    description:  A User in wekan
+    properties:
+      username:
+        description: |
+           the username of the user
+        type: string
+        x-nullable: true
+      emails:
+        description: |
+           the list of emails attached to a user
+        type: array
+        items:
+          $ref: "#/definitions/UsersEmails"
+        x-nullable: true
+      createdAt:
+        description: |
+           creation date of the user
+        type: string
+      modifiedAt:
+        type: string
+      profile:
+        description: |
+           profile settings
+        $ref: "#/definitions/UsersProfile"
+        x-nullable: true
+      services:
+        description: |
+           services field of the user
+        type: object
+        x-nullable: true
+      heartbeat:
+        description: |
+           last time the user has been seen
+        type: string
+        x-nullable: true
+      isAdmin:
+        description: |
+           is the user an admin of the board?
+        type: boolean
+        x-nullable: true
+      createdThroughApi:
+        description: |
+           was the user created through the API?
+        type: boolean
+        x-nullable: true
+      loginDisabled:
+        description: |
+           loginDisabled field of the user
+        type: boolean
+        x-nullable: true
+      authenticationMethod:
+        description: |
+           authentication method of the user
+        type: string
+      sessionData:
+        description: |
+           profile settings
+        $ref: "#/definitions/UsersSessiondata"
+        x-nullable: true
+      importUsernames:
+        description: |
+           username for imported
+        type: array
+        items:
+          type: string
+          x-nullable: true
+        x-nullable: true
+    required:
+      - createdAt
+      - modifiedAt
+      - authenticationMethod
+  UsersEmails:
+    type: object
+    properties:
+      address:
+        description: |
+           The email address
+        type: string
+      verified:
+        description: |
+           Has the email been verified
+        type: boolean
+    required:
+      - address
+      - verified
+  UsersProfile:
+    type: object
+    properties:
+      avatarUrl:
+        description: |
+           URL of the avatar of the user
+        type: string
+      emailBuffer:
+        description: |
+           list of email buffers of the user
+        type: array
+        items:
+          type: string
+          x-nullable: true
+      fullname:
+        description: |
+           full name of the user
+        type: string
+      showDesktopDragHandles:
+        description: |
+           does the user want to hide system messages?
+        type: boolean
+      hideCheckedItems:
+        description: |
+           does the user want to hide checked checklist items?
+        type: boolean
+      hiddenSystemMessages:
+        description: |
+           does the user want to hide system messages?
+        type: boolean
+      hiddenMinicardLabelText:
+        description: |
+           does the user want to hide minicard label texts?
+        type: boolean
+      initials:
+        description: |
+           initials of the user
+        type: string
+      invitedBoards:
+        description: |
+           board IDs the user has been invited to
+        type: array
+        items:
+          type: string
+          x-nullable: true
+      language:
+        description: |
+           language of the user
+        type: string
+      notifications:
+        description: |
+           enabled notifications for the user
+        type: array
+        items:
+          $ref: "#/definitions/UsersProfileNotifications"
+      activity:
+        description: |
+           The id of the activity this notification references
+        type: string
+      read:
+        description: |
+           the date on which this notification was read
+        type: string
+      showCardsCountAt:
+        description: |
+           showCardCountAt field of the user
+        type: number
+      startDayOfWeek:
+        description: |
+           startDayOfWeek field of the user
+        type: number
+      starredBoards:
+        description: |
+           list of starred board IDs
+        type: array
+        items:
+          type: string
+          x-nullable: true
+      icode:
+        description: |
+           icode
+        type: string
+      boardView:
+        description: |
+           boardView field of the user
+        type: string
+        enum:
+          - board-view-swimlanes
+          - board-view-lists
+          - board-view-cal
+      listSortBy:
+        description: |
+           default sort list for user
+        type: string
+        enum:
+          - -modifiedat
+          - modifiedat
+          - -title
+          - title
+          - -sort
+          - sort
+      templatesBoardId:
+        description: |
+           Reference to the templates board
+        type: string
+      cardTemplatesSwimlaneId:
+        description: |
+           Reference to the card templates swimlane Id
+        type: string
+      listTemplatesSwimlaneId:
+        description: |
+           Reference to the list templates swimlane Id
+        type: string
+      boardTemplatesSwimlaneId:
+        description: |
+           Reference to the board templates swimlane Id
+        type: string
+    required:
+      - activity
+      - templatesBoardId
+      - cardTemplatesSwimlaneId
+      - listTemplatesSwimlaneId
+      - boardTemplatesSwimlaneId
+  UsersSessiondata:
+    type: object
+    properties:
+      totalHits:
+        description: |
+           Total hits from last search
+        type: number
+      lastHit:
+        description: |
+           last hit that was returned
+        type: number

+ 5 - 0
releases/rebuild-docs-install-deps.sh

@@ -4,6 +4,11 @@
 sudo apt-get install python3-pip
 sudo apt-get install python3-pip
 sudo pip3 install -U setuptools wheel
 sudo pip3 install -U setuptools wheel
 sudo npm install -g api2html
 sudo npm install -g api2html
+mkdir -p ~/python
+cd ~/python
+git clone --depth 1 -b master https://github.com/Kronuz/esprima-python
+cd ~/python/esprima-python
+sudo python3 setup.py install --record files.txt
 cd ~/repos/wekan
 cd ~/repos/wekan
 mkdir -p public/api
 mkdir -p public/api
 
 

+ 3 - 0
releases/translations/pull-translations.sh

@@ -151,6 +151,9 @@ tx pull -f -l es_AR
 echo "Spanish (Chile):"
 echo "Spanish (Chile):"
 tx pull -f -l es_CL
 tx pull -f -l es_CL
 
 
+echo "Spanish (Latin America)":
+tx pull -f -l es_419
+
 echo "Spanish (Mexico)":
 echo "Spanish (Mexico)":
 tx pull -f -l es_MX
 tx pull -f -l es_MX
 
 

+ 2 - 2
sandstorm-pkgdef.capnp

@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
     appTitle = (defaultText = "Wekan"),
     appTitle = (defaultText = "Wekan"),
     # The name of the app as it is displayed to the user.
     # The name of the app as it is displayed to the user.
 
 
-    appVersion = 505,
+    appVersion = 509,
     # Increment this for every release.
     # Increment this for every release.
 
 
-    appMarketingVersion = (defaultText = "5.05.0~2021-03-11"),
+    appMarketingVersion = (defaultText = "5.09.0~2021-03-26"),
     # Human-readable presentation of the app version.
     # Human-readable presentation of the app version.
 
 
     minUpgradableAppVersion = 0,
     minUpgradableAppVersion = 0,

Some files were not shown because too many files changed in this diff