Browse Source

Merge branch 'brymut-add-more-import-export-options'

Lauri Ojansivu 5 năm trước cách đây
mục cha
commit
aa084b7a7e
63 tập tin đã thay đổi với 1820 bổ sung267 xóa
  1. 37 0
      client/components/import/csvMembersMapper.js
  2. 1 1
      client/components/import/import.jade
  3. 40 12
      client/components/import/import.js
  4. 18 1
      client/components/sidebar/sidebar.jade
  5. 58 0
      client/components/sidebar/sidebar.js
  6. 18 1
      i18n/ar.i18n.json
  7. 18 1
      i18n/bg.i18n.json
  8. 18 1
      i18n/br.i18n.json
  9. 18 1
      i18n/ca.i18n.json
  10. 18 1
      i18n/cs.i18n.json
  11. 18 1
      i18n/da.i18n.json
  12. 18 1
      i18n/de.i18n.json
  13. 18 1
      i18n/el.i18n.json
  14. 18 1
      i18n/en-GB.i18n.json
  15. 18 1
      i18n/en.i18n.json
  16. 18 1
      i18n/eo.i18n.json
  17. 18 1
      i18n/es-AR.i18n.json
  18. 18 1
      i18n/es.i18n.json
  19. 18 1
      i18n/eu.i18n.json
  20. 18 1
      i18n/fa.i18n.json
  21. 18 1
      i18n/fi.i18n.json
  22. 18 1
      i18n/fr.i18n.json
  23. 18 1
      i18n/gl.i18n.json
  24. 18 1
      i18n/he.i18n.json
  25. 18 1
      i18n/hi.i18n.json
  26. 18 1
      i18n/hu.i18n.json
  27. 18 1
      i18n/hy.i18n.json
  28. 18 1
      i18n/id.i18n.json
  29. 18 1
      i18n/ig.i18n.json
  30. 18 1
      i18n/it.i18n.json
  31. 18 1
      i18n/ja.i18n.json
  32. 18 1
      i18n/ka.i18n.json
  33. 18 1
      i18n/km.i18n.json
  34. 18 1
      i18n/ko.i18n.json
  35. 18 1
      i18n/lv.i18n.json
  36. 18 1
      i18n/mk.i18n.json
  37. 18 1
      i18n/mn.i18n.json
  38. 18 1
      i18n/nb.i18n.json
  39. 18 1
      i18n/nl.i18n.json
  40. 18 1
      i18n/oc.i18n.json
  41. 18 1
      i18n/pl.i18n.json
  42. 24 7
      i18n/pt-BR.i18n.json
  43. 18 1
      i18n/pt.i18n.json
  44. 18 1
      i18n/ro.i18n.json
  45. 18 1
      i18n/ru.i18n.json
  46. 18 1
      i18n/sl.i18n.json
  47. 18 1
      i18n/sr.i18n.json
  48. 18 1
      i18n/sv.i18n.json
  49. 18 1
      i18n/sw.i18n.json
  50. 18 1
      i18n/ta.i18n.json
  51. 18 1
      i18n/th.i18n.json
  52. 18 1
      i18n/tr.i18n.json
  53. 18 1
      i18n/uk.i18n.json
  54. 18 1
      i18n/vi.i18n.json
  55. 18 1
      i18n/zh-CN.i18n.json
  56. 18 1
      i18n/zh-HK.i18n.json
  57. 18 1
      i18n/zh-TW.i18n.json
  58. 313 0
      models/csvCreator.js
  59. 47 193
      models/export.js
  60. 344 0
      models/exporter.js
  61. 8 2
      models/import.js
  62. 10 0
      package-lock.json
  63. 2 0
      package.json

+ 37 - 0
client/components/import/csvMembersMapper.js

@@ -0,0 +1,37 @@
+export function getMembersToMap(data) {
+  // we will work on the list itself (an ordered array of objects) when a
+  // mapping is done, we add a 'wekan' field to the object representing the
+  // imported member
+
+  const membersToMap = [];
+  const importedMembers = [];
+  let membersIndex;
+
+  for (let i = 0; i < data[0].length; i++) {
+    if (data[0][i].toLowerCase() === 'members') {
+      membersIndex = i;
+    }
+  }
+
+  for (let i = 1; i < data.length; i++) {
+    if (data[i][membersIndex]) {
+      for (const importedMember of data[i][membersIndex].split(' ')) {
+        if (importedMember && importedMembers.indexOf(importedMember) === -1) {
+          importedMembers.push(importedMember);
+        }
+      }
+    }
+  }
+
+  for (let importedMember of importedMembers) {
+    importedMember = {
+      username: importedMember,
+      id: importedMember,
+    };
+    const wekanUser = Users.findOne({ username: importedMember.username });
+    if (wekanUser) importedMember.wekanId = wekanUser._id;
+    membersToMap.push(importedMember);
+  }
+
+  return membersToMap;
+}

+ 1 - 1
client/components/import/import.jade

@@ -13,7 +13,7 @@ template(name="import")
 template(name="importTextarea")
   form
     p: label(for='import-textarea') {{_ instruction}} {{_ 'import-board-instruction-about-errors'}}
-    textarea.js-import-json(placeholder="{{_ 'import-json-placeholder'}}" autofocus)
+    textarea.js-import-json(placeholder="{{_ importPlaceHolder}}" autofocus)
       | {{jsonText}}
     input.primary.wide(type="submit" value="{{_ 'import'}}")
 

+ 40 - 12
client/components/import/import.js

@@ -1,5 +1,8 @@
 import trelloMembersMapper from './trelloMembersMapper';
 import wekanMembersMapper from './wekanMembersMapper';
+import csvMembersMapper from './csvMembersMapper';
+
+const Papa = require('papaparse');
 
 BlazeComponent.extendComponent({
   title() {
@@ -30,20 +33,30 @@ BlazeComponent.extendComponent({
     }
   },
 
-  importData(evt) {
+  importData(evt, dataSource) {
     evt.preventDefault();
-    const dataJson = this.find('.js-import-json').value;
-    try {
-      const dataObject = JSON.parse(dataJson);
-      this.setError('');
-      this.importedData.set(dataObject);
-      const membersToMap = this._prepareAdditionalData(dataObject);
-      // store members data and mapping in Session
-      // (we go deep and 2-way, so storing in data context is not a viable option)
+    const input = this.find('.js-import-json').value;
+    if (dataSource === 'csv') {
+      const csv = input.indexOf('\t') > 0 ? input.replace(/(\t)/g, ',') : input;
+      const ret = Papa.parse(csv);
+      if (ret && ret.data && ret.data.length) this.importedData.set(ret.data);
+      else throw new Meteor.Error('error-csv-schema');
+      const membersToMap = this._prepareAdditionalData(ret.data);
       this.membersToMap.set(membersToMap);
       this.nextStep();
-    } catch (e) {
-      this.setError('error-json-malformed');
+    } else {
+      try {
+        const dataObject = JSON.parse(input);
+        this.setError('');
+        this.importedData.set(dataObject);
+        const membersToMap = this._prepareAdditionalData(dataObject);
+        // store members data and mapping in Session
+        // (we go deep and 2-way, so storing in data context is not a viable option)
+        this.membersToMap.set(membersToMap);
+        this.nextStep();
+      } catch (e) {
+        this.setError('error-json-malformed');
+      }
     }
   },
 
@@ -91,6 +104,9 @@ BlazeComponent.extendComponent({
       case 'wekan':
         membersToMap = wekanMembersMapper.getMembersToMap(dataObject);
         break;
+      case 'csv':
+        membersToMap = csvMembersMapper.getMembersToMap(dataObject);
+        break;
     }
     return membersToMap;
   },
@@ -109,11 +125,23 @@ BlazeComponent.extendComponent({
     return `import-board-instruction-${Session.get('importSource')}`;
   },
 
+  importPlaceHolder() {
+    const importSource = Session.get('importSource');
+    if (importSource === 'csv') {
+      return 'import-csv-placeholder';
+    } else {
+      return 'import-json-placeholder';
+    }
+  },
+
   events() {
     return [
       {
         submit(evt) {
-          return this.parentComponent().importData(evt);
+          return this.parentComponent().importData(
+            evt,
+            Session.get('importSource'),
+          );
         },
       },
     ];

+ 18 - 1
client/components/sidebar/sidebar.jade

@@ -230,6 +230,8 @@ template(name="chooseBoardSource")
       a(href="{{pathFor '/import/trello'}}") {{_ 'from-trello'}}
     li
       a(href="{{pathFor '/import/wekan'}}") {{_ 'from-wekan'}}
+    li
+      a(href="{{pathFor '/import/csv'}}") {{_ 'from-csv'}}
 
 template(name="archiveBoardPopup")
   p {{_ 'close-board-pop'}}
@@ -300,7 +302,7 @@ template(name="boardMenuPopup")
       ul.pop-over-list
         if withApi
           li
-            a(href="{{exportUrl}}", download="{{exportFilename}}")
+            a.js-export-board
               i.fa.fa-share-alt
               | {{_ 'export-board'}}
         li
@@ -360,6 +362,21 @@ template(name="boardMenuPopup")
           i.fa.fa-sitemap
           | {{_ 'subtask-settings'}}
 
+template(name="exportBoard")
+  ul.pop-over-list
+    li
+      a(href="{{exportUrl}}", download="{{exportJsonFilename}}")
+        i.fa.fa-share-alt
+        | {{_ 'export-board-json'}}
+    li
+      a(href="{{exportCsvUrl}}", download="{{exportCsvFilename}}")
+        i.fa.fa-share-alt
+        | {{_ 'export-board-csv'}}
+    li
+      a(href="{{exportTsvUrl}}", download="{{exportTsvFilename}}")
+        i.fa.fa-share-alt
+        | {{_ 'export-board-tsv'}}
+
 template(name="labelsWidget")
   .board-widget.board-widget-labels
     h3

+ 58 - 0
client/components/sidebar/sidebar.js

@@ -213,6 +213,7 @@ Template.boardMenuPopup.events({
   'click .js-import-board': Popup.open('chooseBoardSource'),
   'click .js-subtask-settings': Popup.open('boardSubtaskSettings'),
   'click .js-card-settings': Popup.open('boardCardSettings'),
+  'click .js-export-board': Popup.open('exportBoard'),
 });
 
 Template.boardMenuPopup.onCreated(function() {
@@ -405,6 +406,63 @@ BlazeComponent.extendComponent({
   },
 }).register('chooseBoardSourcePopup');
 
+BlazeComponent.extendComponent({
+  template() {
+    return 'exportBoard';
+  },
+  withApi() {
+    return Template.instance().apiEnabled.get();
+  },
+  exportUrl() {
+    const params = {
+      boardId: Session.get('currentBoard'),
+    };
+    const queryParams = {
+      authToken: Accounts._storedLoginToken(),
+    };
+    return FlowRouter.path('/api/boards/:boardId/export', params, queryParams);
+  },
+  exportCsvUrl() {
+    const params = {
+      boardId: Session.get('currentBoard'),
+    };
+    const queryParams = {
+      authToken: Accounts._storedLoginToken(),
+    };
+    return FlowRouter.path(
+      '/api/boards/:boardId/export/csv',
+      params,
+      queryParams,
+    );
+  },
+  exportTsvUrl() {
+    const params = {
+      boardId: Session.get('currentBoard'),
+    };
+    const queryParams = {
+      authToken: Accounts._storedLoginToken(),
+      delimiter: '\t',
+    };
+    return FlowRouter.path(
+      '/api/boards/:boardId/export/csv',
+      params,
+      queryParams,
+    );
+  },
+  exportJsonFilename() {
+    const boardId = Session.get('currentBoard');
+    return `wekan-export-board-${boardId}.json`;
+  },
+  exportCsvFilename() {
+    const boardId = Session.get('currentBoard');
+    return `wekan-export-board-${boardId}.csv`;
+  },
+  exportTsvFilename() {
+    const boardId = Session.get('currentBoard');
+    return `wekan-export-board-${boardId}.tsv`;
+  },
+}).register('exportBoardPopup');
+
 Template.labelsWidget.events({
   'click .js-label': Popup.open('editLabel'),
   'click .js-add-label': Popup.open('createLabel'),

+ 18 - 1
i18n/ar.i18n.json

@@ -309,6 +309,7 @@
   "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": "لا يمكنك دعوة نفسك",
@@ -316,6 +317,10 @@
   "error-username-taken": "إسم المستخدم مأخوذ مسبقا",
   "error-email-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",
+  "exportBoardPopup-title": "Export board",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "import-board-c": "استيراد لوحة",
   "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-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": "رسم خريطة الأعضاء",
   "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
   "import-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlane Actions",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Import a Trello card",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "المزيد",
   "link-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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/bg.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "За да направите това трябва да сте член на това табло",
   "error-json-malformed": "Текстът Ви не е валиден JSON",
   "error-json-schema": "JSON информацията Ви не съдържа информация във валиден формат",
+  "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": "Този списък не съществува",
   "error-user-doesNotExist": "Този потребител не съществува",
   "error-user-notAllowSelf": "Не можете да поканите себе си",
@@ -316,6 +317,10 @@
   "error-username-taken": "Това потребителско име е вече заето",
   "error-email-taken": "Имейлът е вече зает",
   "export-board": "Експортиране на Табло",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Експортиране на Табло",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "import-board-c": "Импортирай Табло",
   "import-board-title-trello": "Импорт на табло от Trello",
   "import-board-title-wekan": "Import board from previous export",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "От 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": "Копирайте валидната Ви JSON информация тук",
+  "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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlane Actions",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Импорт на карта от Trello",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Още",
   "link-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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/br.i18n.json

@@ -309,6 +309,7 @@
   "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",
@@ -316,6 +317,10 @@
   "error-username-taken": "This username 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",
+  "exportBoardPopup-title": "Export board",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlane Actions",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Import a Trello card",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Muioc’h",
   "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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/ca.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "Necessites ser membre d'aquest tauler per dur a terme aquesta acció",
   "error-json-malformed": "El text no és JSON vàlid",
   "error-json-schema": "La dades JSON no contenen la informació en el format correcte",
+  "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": "La llista no existeix",
   "error-user-doesNotExist": "L'usuari no existeix",
   "error-user-notAllowSelf": "No et pots convidar a tu mateix",
@@ -316,6 +317,10 @@
   "error-username-taken": "Aquest usuari ja existeix",
   "error-email-taken": "L'adreça de correu electrònic ja és en ús",
   "export-board": "Exporta tauler",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Exporta tauler",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "import-board-c": "Importa tauler",
   "import-board-title-trello": "Importa tauler des de Trello",
   "import-board-title-wekan": "Import board from previous export",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "Des de Trello",
   "from-wekan": "From previous export",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "En el teu tauler Trello, ves a 'Menú', 'Més'.' Imprimir i Exportar', 'Exportar JSON', i copia el text resultant.",
+  "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": "Aferra codi JSON vàlid aquí",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Mapeja el membres",
   "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
   "import-show-user-mapping": "Revisa l'assignació de membres",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Accions de Carril de Natació",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "importa una fitxa de Trello",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Més",
   "link-list": "Enllaça a aquesta llista",
   "list-delete-pop": "Totes les accions seran esborrades de la llista d'activitats i no serà possible recuperar la llista",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/cs.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "K provedení změny musíš být členem tohoto tabla",
   "error-json-malformed": "Tvůj text není validní JSON",
   "error-json-schema": "Tato JSON data neobsahují správné informace v platném formátu",
+  "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": "Tento sloupec ;neexistuje",
   "error-user-doesNotExist": "Tento uživatel neexistuje",
   "error-user-notAllowSelf": "Nemůžeš pozvat sám sebe",
@@ -316,6 +317,10 @@
   "error-username-taken": "Toto uživatelské jméno již existuje",
   "error-email-taken": "Tento email byl již použit",
   "export-board": "Exportovat tablo",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Exportovat tablo",
   "sort": "řadit",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "řadit seznam podle",
@@ -351,12 +356,16 @@
   "import-board-c": "Importovat tablo",
   "import-board-title-trello": "Import board from Trello",
   "import-board-title-wekan": "Importovat tablo z předchozího exportu",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "Z Trella",
   "from-wekan": "Z předchozího exportu",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "Na svém Trello tablu, otevři 'Menu', pak 'More', 'Print and Export', 'Export JSON', a zkopíruj výsledný text",
+  "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
   "import-board-instruction-wekan": "Ve vašem tablu jděte do 'Menu', klikněte na 'Exportovat tablo' a zkopírujte text ze staženého souboru.",
   "import-board-instruction-about-errors": "Někdy import funguje i přestože dostáváte chyby při importování tabla, které se zobrazí na stránce Všechna tabla.",
   "import-json-placeholder": "Sem vlož validní JSON data",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Mapovat členy",
   "import-members-map": "Toto importované tablo obsahuje několik osob. Prosím namapujte osoby z importu na místní uživatelské účty.",
   "import-show-user-mapping": "Zkontrolovat namapování členů",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Akce swimlane",
   "swimlaneAddPopup-title": "Přidat swimlane dolů",
   "listImportCardPopup-title": "Importovat Trello kartu",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Více",
   "link-list": "Odkaz na tento sloupec",
   "list-delete-pop": "Všechny akce budou odstraněny z kanálu aktivity a nebude možné sloupec obnovit. Toto nelze vrátit zpět.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/da.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "Du skal være medlem af denne tavle for at gøre dette",
   "error-json-malformed": "Din tekst er ikke gyldig JSON",
   "error-json-schema": "Dine JSON-data indeholder ikke den rette information i det rette 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": "Listen findes ikke",
   "error-user-doesNotExist": "Brugeren findes ikke",
   "error-user-notAllowSelf": "Du kan ikke invitere dig selv",
@@ -316,6 +317,10 @@
   "error-username-taken": "Brugernavnet er optaget",
   "error-email-taken": "E-mailadressen er allerede optaget",
   "export-board": "Eksportér tavle",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Eksportér tavle",
   "sort": "Sortér",
   "sort-desc": "Klik for at sortere listen",
   "list-sort-by": "Sortér listen efter:",
@@ -351,12 +356,16 @@
   "import-board-c": "Importér tavle",
   "import-board-title-trello": "Importér tavle fra Trello",
   "import-board-title-wekan": "Importér tavler fra tidligere eksport",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "Fra Trello",
   "from-wekan": "Fra forrige eksport",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "I din Trello-tavle, gå til 'Menu', dernæst 'More', 'Print and Export', 'Export JSON', og kopiér den tekst som vises.",
+  "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
   "import-board-instruction-wekan": "På din tavle, gå til 'Menu', dernæst 'Eksportér tavle', og kopiér teksten i den hentede fil.",
   "import-board-instruction-about-errors": "Hvis du får fejl når der importeres en tavle, så vil importen undertiden stadig fungere, og tavlen vil være under side Alle tavler.",
   "import-json-placeholder": "Indsæt dine gyldige JSON-data her",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Kortlæg medlemmer",
   "import-members-map": "Dine importerede tavler rummer medlemmer. Kortlæg venligst de medlemmer du ønsker at importere til dine brugere.",
   "import-show-user-mapping": "Gennemse kortlægning af medlemmer",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Handlinger for svømmebane",
   "swimlaneAddPopup-title": "Tilføj en svømmebane nedenfor",
   "listImportCardPopup-title": "Importér et Trello-kort",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Mere",
   "link-list": "Link til denne liste",
   "list-delete-pop": "Alle handlinger vil blive fjernet fra aktivitetsfeedet og du vil ikke have mulighed for at genskabe listen. Der er ingen måder at fortryde. ",
@@ -786,5 +796,12 @@
   "thursday": "Torsdag",
   "friday": "Fredag",
   "saturday": "Lørdag",
-  "sunday": "Søndag"
+  "sunday": "Søndag",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/de.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "Um das zu tun, müssen Sie Mitglied dieses Boards sein",
   "error-json-malformed": "Ihre Eingabe ist kein gültiges JSON",
   "error-json-schema": "Ihre JSON-Daten enthalten nicht die gewünschten Informationen im richtigen 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": "Diese Liste existiert nicht",
   "error-user-doesNotExist": "Dieser Nutzer existiert nicht",
   "error-user-notAllowSelf": "Sie können sich nicht selbst einladen.",
@@ -316,6 +317,10 @@
   "error-username-taken": "Dieser Benutzername ist bereits vergeben",
   "error-email-taken": "E-Mail wird schon verwendet",
   "export-board": "Board exportieren",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Board exportieren",
   "sort": "Sortieren",
   "sort-desc": "Zum Sortieren der Liste klicken",
   "list-sort-by": "Sortieren der Liste nach:",
@@ -351,12 +356,16 @@
   "import-board-c": "Board importieren",
   "import-board-title-trello": "Board von Trello importieren",
   "import-board-title-wekan": "Board aus vorherigem Export importieren",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "Von Trello",
   "from-wekan": "Aus vorherigem Export",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "Gehen Sie in ihrem Trello-Board auf 'Menü', dann 'Mehr', 'Drucken und Exportieren', 'JSON-Export' und kopieren Sie den dort angezeigten Text",
+  "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
   "import-board-instruction-wekan": "Gehen Sie in Ihrem Board auf 'Menü', danach auf 'Board exportieren' und kopieren Sie den Text aus der heruntergeladenen Datei.",
   "import-board-instruction-about-errors": "Treten beim importieren eines Board Fehler auf, so kann der Import dennoch erfolgreich abgeschlossen sein und das Board ist auf der Seite \"Alle Boards\" zusehen.",
   "import-json-placeholder": "Fügen Sie die korrekten JSON-Daten hier ein",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Mitglieder zuordnen",
   "import-members-map": "Das importierte Board hat einige Mitglieder. Bitte ordnen sie die Mitglieder, die Sie importieren wollen, Ihren Benutzern zu.",
   "import-show-user-mapping": "Mitgliederzuordnung überprüfen",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlaneaktionen",
   "swimlaneAddPopup-title": "Swimlane unterhalb einfügen",
   "listImportCardPopup-title": "Eine Trello-Karte importieren",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Mehr",
   "link-list": "Link zu dieser Liste",
   "list-delete-pop": "Alle Aktionen werden aus dem Verlauf gelöscht und die Liste kann nicht wiederhergestellt werden.",
@@ -786,5 +796,12 @@
   "thursday": "Donnerstag",
   "friday": "Freitag",
   "saturday": "Samstag",
-  "sunday": "Sonntag"
+  "sunday": "Sonntag",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/el.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "You need to be a member of this board to do that",
   "error-json-malformed": "Το κείμενο δεν είναι έγκυρο 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": "Η λίστα δεν υπάρχει",
   "error-user-doesNotExist": "Ο χρήστης δεν υπάρχει",
   "error-user-notAllowSelf": "You can not invite yourself",
@@ -316,6 +317,10 @@
   "error-username-taken": "This username is already taken",
   "error-email-taken": "Email has already been taken",
   "export-board": "Εξαγωγή πίνακα",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Εξαγωγή πίνακα",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "import-board-c": "Εισαγωγή πίνακα",
   "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": "Από το 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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlane Actions",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Εισαγωγή μιας κάρτας Trello",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Περισσότερα",
   "link-list": "Link to this list",
   "list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

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

@@ -309,6 +309,7 @@
   "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",
@@ -316,6 +317,10 @@
   "error-username-taken": "This username 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",
+  "exportBoardPopup-title": "Export board",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/en.i18n.json

@@ -309,6 +309,7 @@
   "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",
@@ -316,6 +317,10 @@
   "error-username-taken": "This username 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",
+  "exportBoardPopup-title": "Export board",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/eo.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "You need to be a member of this board to do that",
   "error-json-malformed": "Via teksto estas nevalida JSON",
   "error-json-schema": "Via JSON ne enhavas la ĝustajn informojn en ĝusta formato",
+  "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": "Tio listo ne ekzistas",
   "error-user-doesNotExist": "Tio uzanto ne ekzistas",
   "error-user-notAllowSelf": "You can not invite yourself",
@@ -316,6 +317,10 @@
   "error-username-taken": "Uzantnomo jam prenita",
   "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",
+  "exportBoardPopup-title": "Export board",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlane Actions",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Import a Trello card",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Pli",
   "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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

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

@@ -309,6 +309,7 @@
   "error-board-notAMember": "Necesitás ser miembro de este tablero para hacer eso",
   "error-json-malformed": "Tu texto no es JSON válido",
   "error-json-schema": "Tus datos JSON no incluyen la información correcta en el formato adecuado",
+  "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": "Esta lista no existe",
   "error-user-doesNotExist": "Este usuario no existe",
   "error-user-notAllowSelf": "No podés invitarte a vos mismo",
@@ -316,6 +317,10 @@
   "error-username-taken": "El nombre de usuario ya existe",
   "error-email-taken": "El email ya existe",
   "export-board": "Exportar tablero",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Exportar tablero",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "import-board-c": "Importar tablero",
   "import-board-title-trello": "Importar tablero de Trello",
   "import-board-title-wekan": "Import board from previous export",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "De Trello",
   "from-wekan": "From previous export",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "En tu tablero de Trello, ve a 'Menú', luego a 'Más', 'Imprimir y Exportar', 'Exportar JSON', y copia el texto resultante.",
+  "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": "Pegá tus datos JSON válidos acá",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Mapear Miembros",
   "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
   "import-show-user-mapping": "Revisar mapeo de miembros",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Acciones de la Calle",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Importar una tarjeta Trello",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Mas",
   "link-list": "Enlace a esta lista",
   "list-delete-pop": "Todas las acciones van a ser eliminadas del agregador de actividad y no podás recuperar la lista. No se puede deshacer.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/es.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "Es necesario ser miembro de este tablero para hacer eso",
   "error-json-malformed": "El texto no es un JSON válido",
   "error-json-schema": "Sus datos JSON no incluyen la información apropiada en el formato correcto",
+  "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": "La lista no existe",
   "error-user-doesNotExist": "El usuario no existe",
   "error-user-notAllowSelf": "No puedes invitarte a ti mismo",
@@ -316,6 +317,10 @@
   "error-username-taken": "Este nombre de usuario ya está en uso",
   "error-email-taken": "Esta dirección de correo ya está en uso",
   "export-board": "Exportar el tablero",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Exportar el tablero",
   "sort": "Ordenar",
   "sort-desc": "Click para ordenar la lista",
   "list-sort-by": "Ordenar la lista por:",
@@ -351,12 +356,16 @@
   "import-board-c": "Importar un tablero",
   "import-board-title-trello": "Importar un tablero desde Trello",
   "import-board-title-wekan": "Importar tablero desde una exportación previa",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "Desde Trello",
   "from-wekan": "Desde exportación previa",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "En tu tablero de Trello, ve a 'Menú', luego 'Más' > 'Imprimir y exportar' > 'Exportar JSON', y copia el texto resultante.",
+  "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
   "import-board-instruction-wekan": "En tu tablero, vete a 'Menú', luego 'Exportar tablero', y copia el texto en el archivo descargado.",
   "import-board-instruction-about-errors": "Aunque obtengas errores cuando importes el tablero, a veces la importación funciona igualmente, y el tablero se encontrará en la página de tableros.",
   "import-json-placeholder": "Pega tus datos JSON válidos aquí",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Mapa de miembros",
   "import-members-map": "Tu tablero importado tiene algunos miembros. Por favor, mapea los miembros que quieres importar con tus usuarios.",
   "import-show-user-mapping": "Revisión de la asignación de miembros",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Acciones del carril de flujo",
   "swimlaneAddPopup-title": "Añadir un carril de flujo debajo",
   "listImportCardPopup-title": "Importar una tarjeta de Trello",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Más",
   "link-list": "Enlazar a esta lista",
   "list-delete-pop": "Todas las acciones serán eliminadas del historial de actividades y no se podrá recuperar la lista. Esta acción no puede deshacerse.",
@@ -786,5 +796,12 @@
   "thursday": "Jueves",
   "friday": "Viernes",
   "saturday": "Sábado",
-  "sunday": "Domingo"
+  "sunday": "Domingo",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/eu.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "Arbel honetako kidea izan behar zara hori egin ahal izateko",
   "error-json-malformed": "Zure testua ez da baliozko JSON",
   "error-json-schema": "Zure JSON datuek ez dute formatu zuzenaren informazio egokia",
+  "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": "Zerrenda hau ez da existitzen",
   "error-user-doesNotExist": "Erabiltzaile hau ez da existitzen",
   "error-user-notAllowSelf": "Ezin duzu zure burua gonbidatu",
@@ -316,6 +317,10 @@
   "error-username-taken": "Erabiltzaile-izen hori hartuta dago",
   "error-email-taken": "E-mail hori hartuta dago",
   "export-board": "Esportatu arbela",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Esportatu arbela",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "import-board-c": "Inportatu arbela",
   "import-board-title-trello": "Inportatu arbela Trellotik",
   "import-board-title-wekan": "Import board from previous export",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "Trellotik",
   "from-wekan": "From previous export",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "Zure Trello arbelean, aukeratu 'Menu\", 'More', 'Print and Export', 'Export JSON', eta kopiatu jasotako testua hemen.",
+  "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": "Isatsi baliozko JSON datuak hemen",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Kideen mapa",
   "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
   "import-show-user-mapping": "Berrikusi kideen mapa",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlane Actions",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Inportatu Trello txartel bat",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Gehiago",
   "link-list": "Lotura zerrenda honetara",
   "list-delete-pop": "Ekintza guztiak ekintza jariotik kenduko dira eta ezin izango duzu zerrenda berreskuratu. Ez dago desegiterik.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/fa.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "شما برای انجام آن، باید عضو این برد باشید",
   "error-json-malformed": "متن درغالب صحیح Json نمی باشد.",
   "error-json-schema": "داده های Json شما، شامل اطلاعات صحیح در غالب درستی نمی باشد.",
+  "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": "این لیست موجود نیست",
   "error-user-doesNotExist": "این کاربر وجود ندارد",
   "error-user-notAllowSelf": "عدم امکان دعوت خود",
@@ -316,6 +317,10 @@
   "error-username-taken": "این نام کاربری استفاده شده است",
   "error-email-taken": "رایانامه توسط گیرنده دریافت شده است",
   "export-board": "انتقال به بیرون برد",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "انتقال به بیرون برد",
   "sort": "مرتب سازی",
   "sort-desc": "برای مرتب سازی لیست کلیک کنید",
   "list-sort-by": "مرتب سازی لیست بر اساس:",
@@ -351,12 +356,16 @@
   "import-board-c": "وارد کردن برد",
   "import-board-title-trello": "وارد کردن برد از Trello",
   "import-board-title-wekan": "بارگذاری برد ها از آخرین خروجی",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "از Trello",
   "from-wekan": "از آخرین خروجی",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "در Trello-ی خود  به 'Menu'، 'More'، 'Print'، 'Export to JSON رفته و متن نهایی را دراینجا وارد نمایید.",
+  "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
   "import-board-instruction-wekan": "در هیئت مدیره خود، به 'Menu' بروید، سپس 'Export Board'، و متن را در فایل دانلود شده کپی کنید.",
   "import-board-instruction-about-errors": "اگر هنگام بازگردانی با خطا مواجه شدید بعضی اوقات بازگردانی انجام می شود و تمامی برد ها در داخل صفحه All Boards هستند",
   "import-json-placeholder": "اطلاعات Json معتبر خود را اینجا وارد کنید.",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "نگاشت اعضا",
   "import-members-map": "برد ها بازگردانده شده تعدادی کاربر دارند . لطفا کاربر های که می خواهید را انتخاب نمایید",
   "import-show-user-mapping": "بررسی نقشه کاربران",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlane Actions",
   "swimlaneAddPopup-title": "اضافه کردن مسیر شناور",
   "listImportCardPopup-title": "وارد کردن کارت Trello",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "بیشتر",
   "link-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.",
@@ -786,5 +796,12 @@
   "thursday": "پنجشنبه",
   "friday": "جمعه",
   "saturday": "شنبه",
-  "sunday": "یکشنبه"
+  "sunday": "یکشنبه",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/fi.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "Tehdäksesi tämän sinun täytyy olla tämän taulun jäsen",
   "error-json-malformed": "Tekstisi ei ole kelvollisessa JSON-muodossa",
   "error-json-schema": "JSON-tietosi ei sisällä oikeaa tietoa oikeassa muodossa",
+  "error-csv-schema": "CSV tietosi (pilkulla erotetut arvot)/TSV (tabilla erotetut arvot) ei sisällä oikeaa tietoa oikeassa muodossa",
   "error-list-doesNotExist": "Tätä listaa ei ole olemassa",
   "error-user-doesNotExist": "Tätä käyttäjää ei ole olemassa",
   "error-user-notAllowSelf": "Et voi kutsua itseäsi",
@@ -316,6 +317,10 @@
   "error-username-taken": "Tämä käyttäjätunnus on jo käytössä",
   "error-email-taken": "Sähköpostiosoite on jo käytössä",
   "export-board": "Vie taulu",
+  "export-board-json": "Vie taulu JSON",
+  "export-board-csv": "Vie taulu CSV",
+  "export-board-tsv": "Vie taulu TSV",
+  "exportBoardPopup-title": "Vie taulu",
   "sort": "Lajittele",
   "sort-desc": "Klikkaa lajitellaksesi listan",
   "list-sort-by": "Lajittele lista:",
@@ -351,12 +356,16 @@
   "import-board-c": "Tuo taulu",
   "import-board-title-trello": "Tuo taulu Trellosta",
   "import-board-title-wekan": "Tuo taulu edellisestä viennistä",
+  "import-board-title-csv": "Tuo taulu CSV/TSV",
   "from-trello": "Trellosta",
   "from-wekan": "Edellisestä viennistä",
+  "from-csv": "CSV/TSV muodosta",
   "import-board-instruction-trello": "Mene Trello-taulullasi 'Menu', sitten 'More', 'Print and Export', 'Export JSON', ja kopioi tuloksena saamasi teksti",
+  "import-board-instruction-csv": "Liitä pilkulla erotellut arvot (CSV)/ tabilla erotetut arvot (TSV).",
   "import-board-instruction-wekan": "Taulullasi, mene 'Valikko', sitten 'Vie taulu', ja kopioi teksti ladatusta tiedostosta.",
   "import-board-instruction-about-errors": "Jos virheitä tulee taulua tuotaessa, joskus tuonti silti toimii, ja taulu on Kaikki taulut sivulla.",
   "import-json-placeholder": "Liitä kelvollinen JSON-tietosi tähän",
+  "import-csv-placeholder": "Liitä kelvollinen CSV/TSV tietosi tähän",
   "import-map-members": "Vastaavat jäsenet",
   "import-members-map": "Tuomallasi taululla on muutamia jäseniä. Ole hyvä ja valitse tuomiasi jäseniä vastaavat käyttäjäsi",
   "import-show-user-mapping": "Tarkasta vastaavat jäsenet",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlane-toimet",
   "swimlaneAddPopup-title": "Lisää Swimlane alle",
   "listImportCardPopup-title": "Tuo Trello-kortti",
+  "listImportCardsTsvPopup-title": "Tuo Excel CSV/TSV",
   "listMorePopup-title": "Lisää",
   "link-list": "Linkki tähän listaan",
   "list-delete-pop": "Kaikki toimet poistetaan toimintasyötteestä ja listan poistaminen on lopullista. Tätä ei pysty peruuttamaan.",
@@ -786,5 +796,12 @@
   "thursday": "Torstai",
   "friday": "Perjantai",
   "saturday": "Lauantai",
-  "sunday": "Sunnuntai"
+  "sunday": "Sunnuntai",
+  "status": "Tilanne",
+  "swimlane": "Swimlane",
+  "owner": "Omistaja",
+  "last-modified-at": "Viimeksi muokattu",
+  "last-activity": "Viimeisin toiminta",
+  "voting": "Äänestys",
+  "archived": "Arkistoitu"
 }

+ 18 - 1
i18n/fr.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "Vous devez être participant de ce tableau pour faire cela",
   "error-json-malformed": "Votre texte JSON n'est pas valide",
   "error-json-schema": "Vos données JSON ne contiennent pas l'information appropriée dans un format correct",
+  "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": "Cette liste n'existe pas",
   "error-user-doesNotExist": "Cet utilisateur n'existe pas",
   "error-user-notAllowSelf": "Vous ne pouvez pas vous inviter vous-même",
@@ -316,6 +317,10 @@
   "error-username-taken": "Ce nom d'utilisateur est déjà utilisé",
   "error-email-taken": "Cette adresse mail est déjà utilisée",
   "export-board": "Exporter le tableau",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Exporter le tableau",
   "sort": "Tri",
   "sort-desc": "Cliquez pour trier la liste",
   "list-sort-by": "Trier la liste par:",
@@ -351,12 +356,16 @@
   "import-board-c": "Importer un tableau",
   "import-board-title-trello": "Importer un tableau depuis Trello",
   "import-board-title-wekan": "Importer un tableau depuis un export précédent",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "Depuis Trello",
   "from-wekan": "Depuis un export précédent",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "Dans votre tableau Trello, allez sur 'Menu', puis sur 'Plus', 'Imprimer et exporter', 'Exporter en JSON' et copiez le texte du résultat",
+  "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
   "import-board-instruction-wekan": "Dans votre tableau, allez dans 'Menu', puis 'Exporter un tableau', et copier le texte du fichier téléchargé.",
   "import-board-instruction-about-errors": "Si une erreur survient en important le tableau, il se peut que l'import ait fonctionné, et que le tableau se trouve sur la page \"Tous les tableaux\".",
   "import-json-placeholder": "Collez ici les données JSON valides",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Assigner des participants",
   "import-members-map": "Le tableau que vous venez d'importer contient des participants. Veuillez assigner les participants que vous souhaitez importer à vos utilisateurs.",
   "import-show-user-mapping": "Contrôler l'assignation des participants",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Actions du couloir",
   "swimlaneAddPopup-title": "Ajouter un couloir en dessous",
   "listImportCardPopup-title": "Importer une carte Trello",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Plus",
   "link-list": "Lien vers cette liste",
   "list-delete-pop": "Toutes les actions seront supprimées du fil d'activité et il ne sera plus possible de les récupérer. Cette action est irréversible.",
@@ -786,5 +796,12 @@
   "thursday": "Jeudi",
   "friday": "Vendredi",
   "saturday": "Samedi",
-  "sunday": "Dimanche"
+  "sunday": "Dimanche",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/gl.i18n.json

@@ -309,6 +309,7 @@
   "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": "Esta lista non existe",
   "error-user-doesNotExist": "Este usuario non existe",
   "error-user-notAllowSelf": "Non é posíbel convidarse a un mesmo",
@@ -316,6 +317,10 @@
   "error-username-taken": "Este nome de usuario xa está collido",
   "error-email-taken": "Email has already been taken",
   "export-board": "Exportar taboleiro",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Exportar taboleiro",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "import-board-c": "Importar taboleiro",
   "import-board-title-trello": "Importar taboleiro de Trello",
   "import-board-title-wekan": "Import board from previous export",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "De 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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlane Actions",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Import a Trello card",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Máis",
   "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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/he.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "עליך לקבל חברות בלוח זה כדי לעשות זאת",
   "error-json-malformed": "הטקסט שלך אינו JSON תקין",
   "error-json-schema": "נתוני ה־JSON שלך לא כוללים את המידע הנכון בתבנית הנכונה",
+  "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": "רשימה זו לא קיימת",
   "error-user-doesNotExist": "משתמש זה לא קיים",
   "error-user-notAllowSelf": "אינך יכול להזמין את עצמך",
@@ -316,6 +317,10 @@
   "error-username-taken": "המשתמש כבר קיים במערכת",
   "error-email-taken": "כתובת הדוא״ל כבר נמצאת בשימוש",
   "export-board": "ייצוא לוח",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "ייצוא לוח",
   "sort": "מיון",
   "sort-desc": "לחיצה למיון הרשימה",
   "list-sort-by": "מיון הרשימה לפי:",
@@ -351,12 +356,16 @@
   "import-board-c": "יבוא לוח",
   "import-board-title-trello": "ייבוא לוח מטרלו",
   "import-board-title-wekan": "ייבוא לוח מייצוא קודם",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "מ־Trello",
   "from-wekan": "מייצוא קודם",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "בלוח הטרלו שלך, עליך ללחוץ על ‚תפריט‘, ואז על ‚עוד‘, ‚הדפסה וייצוא‘, ‚יצוא JSON‘ ולהעתיק את הטקסט שנוצר.",
+  "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
   "import-board-instruction-wekan": "בלוח שלך עליך לגשת אל ‚תפריט’, לאחר מכן ‚ייצוא לוח’ ואז להעתיק את הטקסט מהקובץ שהתקבל.",
   "import-board-instruction-about-errors": "גם אם התקבלו שגיאות בעת יבוא לוח, ייתכן שהייבוא עבד. כדי לבדוק זאת, יש להיכנס ל„כל הלוחות”.",
   "import-json-placeholder": "יש להדביק את נתוני ה־JSON התקינים לכאן",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "מיפוי חברים",
   "import-members-map": "הלוחות המיובאים שלך מכילים חברים. נא למפות את החברים שברצונך לייבא למשתמשים שלך",
   "import-show-user-mapping": "סקירת מיפוי חברים",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "פעולות על מסלול",
   "swimlaneAddPopup-title": "הוספת מסלול מתחת",
   "listImportCardPopup-title": "יבוא כרטיס מ־Trello",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "עוד",
   "link-list": "קישור לרשימה זו",
   "list-delete-pop": "כל הפעולות תוסרנה מרצף הפעילות ולא תהיה לך אפשרות לשחזר את הרשימה. אין ביטול.",
@@ -786,5 +796,12 @@
   "thursday": "יום חמישי",
   "friday": "יום שישי",
   "saturday": "שבת",
-  "sunday": "יום ראשון"
+  "sunday": "יום ראשון",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/hi.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "You need तक be एक सदस्य of  यह बोर्ड तक do that",
   "error-json-malformed": "Your text is not valid JSON",
   "error-json-schema": "आपके JSON डेटा में सही प्रारूप में सही जानकारी शामिल नहीं है",
+  "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": "यह सूची does not exist",
   "error-user-doesNotExist": "यह user does not exist",
   "error-user-notAllowSelf": "You can not invite yourself",
@@ -316,6 +317,10 @@
   "error-username-taken": "यह username is already taken",
   "error-email-taken": "Email has already been taken",
   "export-board": "Export बोर्ड",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Export बोर्ड",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "import-board-c": "Import बोर्ड",
   "import-board-title-trello": "Import बोर्ड से 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 बोर्ड, go तक 'Menu', then 'More', 'Print और Export', 'Export JSON', और 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 सदस्य",
   "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
   "import-show-user-mapping": "Re आलोकन सदस्य mapping",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "तैरन Actions",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Import एक Trello कार्ड",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "More",
   "link-list": "Link तक  यह list",
   "list-delete-pop": "All actions हो जाएगा हटा दिया से the activity feed और you won't be able तक recover the list. There is no undo.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/hu.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "A tábla tagjának kell lennie, hogy ezt megtehesse",
   "error-json-malformed": "A szöveg nem érvényes JSON",
   "error-json-schema": "A JSON adatok nem a helyes formátumban tartalmazzák a megfelelő információkat",
+  "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": "Ez a lista nem létezik",
   "error-user-doesNotExist": "Ez a felhasználó nem létezik",
   "error-user-notAllowSelf": "Nem hívhatja meg saját magát",
@@ -316,6 +317,10 @@
   "error-username-taken": "Ez a felhasználónév már foglalt",
   "error-email-taken": "Az e-mail már foglalt",
   "export-board": "Tábla exportálása",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Tábla exportálása",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "import-board-c": "Tábla importálása",
   "import-board-title-trello": "Tábla importálása a Trello oldalról",
   "import-board-title-wekan": "Import board from previous export",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "A Trello oldalról",
   "from-wekan": "From previous export",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "A Trello tábláján menjen a „Menü”, majd a „Több”, „Nyomtatás és exportálás”, „JSON exportálása” menüpontokra, és másolja ki az eredményül kapott szöveget.",
+  "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": "Illessze be ide az érvényes JSON adatokat",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Tagok leképezése",
   "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
   "import-show-user-mapping": "Tagok leképezésének vizsgálata",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlane Actions",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Trello kártya importálása",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Több",
   "link-list": "Összekapcsolás ezzel a listával",
   "list-delete-pop": "Az összes művelet el lesz távolítva a tevékenységlistából, és nem lesz lehetősége visszaállítani a listát. Nincs visszavonás.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/hy.i18n.json

@@ -309,6 +309,7 @@
   "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",
@@ -316,6 +317,10 @@
   "error-username-taken": "This username 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",
+  "exportBoardPopup-title": "Export board",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/id.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "Anda harus jadi member panel ini untuk melakukannya",
   "error-json-malformed": "Teks Anda bukan JSON yang sah",
   "error-json-schema": "Data JSON Anda tidak mengikutsertakan informasi yang sesuai 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": "Daftar ini tidak ada",
   "error-user-doesNotExist": "Nama pengguna ini tidak ada",
   "error-user-notAllowSelf": "Anda tidak bisa mengundang diri sendiri",
@@ -316,6 +317,10 @@
   "error-username-taken": "Nama pengguna ini sudah dipakai",
   "error-email-taken": "Email has already been taken",
   "export-board": "Exspor Panel",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Exspor Panel",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "import-board-c": "Import board",
   "import-board-title-trello": "Impor panel dari 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": "Di panel Trello anda, ke 'Menu', terus 'More', 'Print and Export','Export JSON', dan salin hasilnya",
+  "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": "Tempelkan data JSON yang sah disini",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Petakan partisipan",
   "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
   "import-show-user-mapping": "Review pemetaan partisipan",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlane Actions",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Impor dari Kartu Trello",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Lainnya",
   "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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/ig.i18n.json

@@ -309,6 +309,7 @@
   "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",
@@ -316,6 +317,10 @@
   "error-username-taken": "This username 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",
+  "exportBoardPopup-title": "Export board",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/it.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "Devi essere un membro di questa bacheca per poterlo fare",
   "error-json-malformed": "Il tuo testo non è un JSON valido",
   "error-json-schema": "Il tuo file JSON non contiene le giuste informazioni nel formato corretto",
+  "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": "Questa lista non esiste",
   "error-user-doesNotExist": "Questo utente non esiste",
   "error-user-notAllowSelf": "Non puoi invitare te stesso",
@@ -316,6 +317,10 @@
   "error-username-taken": "Questo username è già utilizzato",
   "error-email-taken": "L'email è già stata presa",
   "export-board": "Esporta bacheca",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Esporta bacheca",
   "sort": "Ordina",
   "sort-desc": "Clicca per ordinare la lista",
   "list-sort-by": "Ordina la lista per:",
@@ -351,12 +356,16 @@
   "import-board-c": "Importa bacheca",
   "import-board-title-trello": "Importa una bacheca da Trello",
   "import-board-title-wekan": "Importa bacheca dall'esportazione precedente",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "Da Trello",
   "from-wekan": "Dall'esportazione precedente",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "Nella tua bacheca Trello vai a 'Menu', poi 'Altro', 'Stampa ed esporta', 'Esporta JSON', e copia il testo che compare.",
+  "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
   "import-board-instruction-wekan": "Nella tua bacheca vai su \"Menu\", poi \"Esporta la bacheca\", e copia il testo nel file scaricato",
   "import-board-instruction-about-errors": "Se hai degli errori quando importi una bacheca, qualche volta l'importazione funziona comunque, e la bacheca si trova nella pagina \"Tutte le bacheche\"",
   "import-json-placeholder": "Incolla un JSON valido qui",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Mappatura dei membri",
   "import-members-map": "La bacheca che hai importato contiene alcuni membri. Per favore scegli i membri che vuoi importare tra i tuoi utenti",
   "import-show-user-mapping": "Rivedi la mappatura dei membri",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Azioni diagramma Swimlane",
   "swimlaneAddPopup-title": "Aggiungi un diagramma Swimlane di seguito",
   "listImportCardPopup-title": "Importa una scheda di Trello",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Altro",
   "link-list": "Link a questa lista",
   "list-delete-pop": "Tutte le azioni saranno rimosse dal flusso attività e non sarai in grado di recuperare la lista. Non potrai tornare indietro.",
@@ -786,5 +796,12 @@
   "thursday": "Giovedi",
   "friday": "Venerdi",
   "saturday": "Sabato",
-  "sunday": "Domenica"
+  "sunday": "Domenica",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/ja.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "操作にはボードメンバーである必要があります",
   "error-json-malformed": "このテキストは、有効なJSON形式ではありません",
   "error-json-schema": "JSONデータが不正な値を含んでいます",
+  "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": "このリストは存在しません",
   "error-user-doesNotExist": "ユーザーが存在しません",
   "error-user-notAllowSelf": "自分を招待することはできません。",
@@ -316,6 +317,10 @@
   "error-username-taken": "このユーザ名は既に使用されています",
   "error-email-taken": "メールは既に受け取られています",
   "export-board": "ボードのエクスポート",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "ボードのエクスポート",
   "sort": "並べ替え",
   "sort-desc": "クリックでリストをソート",
   "list-sort-by": "次によりリストを並べ替え:",
@@ -351,12 +356,16 @@
   "import-board-c": "ボードをインポート",
   "import-board-title-trello": "Trelloからボードをインポート",
   "import-board-title-wekan": "以前のエクスポートからボードをインポート",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "Trelloから",
   "from-wekan": "以前のエクスポートから",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "Trelloボードの、 'Menu' → 'More' → 'Print and Export' → 'Export JSON'を選択し、テキストをコピーしてください。",
+  "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
   "import-board-instruction-wekan": "ボードの、 'メニュー' → 'ボードのエクスポート'を選択し、ダウンロードされたファイルの中のテキストをコピーしてください。",
   "import-board-instruction-about-errors": "ボードのインポート中にエラーが発生した場合、インポートがまだ進行中のまま、全てのボードページに表示されている場合があります。",
   "import-json-placeholder": "JSONデータをここに貼り付けする",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "メンバーを紐付け",
   "import-members-map": "インポートしたボードにはいくつかのメンバーが含まれています。インポートしたいメンバーをユーザーにマッピングしてください",
   "import-show-user-mapping": "メンバー紐付けの確認",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "スイムレーン操作",
   "swimlaneAddPopup-title": "直下にスイムレーンを追加",
   "listImportCardPopup-title": "Trelloのカードをインポート",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "さらに見る",
   "link-list": "このリストへのリンク",
   "list-delete-pop": "すべての内容がアクティビティから削除されます。この削除は元に戻すことができません。",
@@ -786,5 +796,12 @@
   "thursday": "木曜",
   "friday": "金曜",
   "saturday": "土曜",
-  "sunday": "日曜"
+  "sunday": "日曜",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/ka.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "ამის გასაკეთებლად საჭიროა იყოთ დაფის წევრი",
   "error-json-malformed": "შენი ტექსტი არ არის ვალიდური JSON",
   "error-json-schema": "თქვენი JSON  მონაცემები არ შეიცავს ზუსტ ინფორმაციას სწორ ფორმატში ",
+  "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": "ეს ცხრილი არ არსებობს",
   "error-user-doesNotExist": "მსგავსი მომხმარებელი არ არსებობს",
   "error-user-notAllowSelf": "თქვენ არ შეგიძლიათ საკუთარი თავის მოწვევა",
@@ -316,6 +317,10 @@
   "error-username-taken": "არსებობს მსგავსი მომხმარებელი",
   "error-email-taken": "უკვე არსებობს მსგავსი ელ.ფოსტა",
   "export-board": "დაფის ექსპორტი",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "დაფის ექსპორტი",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "import-board-c": "დაფის იმპორტი",
   "import-board-title-trello": "დაფის იმპორტი  Trello-დან",
   "import-board-title-wekan": "Import board from previous export",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "Trello-დან",
   "from-wekan": "From previous export",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "თქვენს Trello დაფაზე, შედით \"მენიუ\"-ში, შემდეგ დააკლიკეთ \"მეტი\", \"ამოპრინტერება და ექსპორტი\",  \"JSON-ის ექსპორტი\" და დააკოპირეთ შედეგი.  ",
+  "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": "მოათავსეთ თქვენი ვალიდური JSON მონაცემები აქ.  ",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "რუკის წევრები",
   "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
   "import-show-user-mapping": "მომხმარებლის რუკების განხილვა",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "ბილიკის მოქმედებები",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Trello ბარათის იმპორტი",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "მეტი",
   "link-list": "დააკავშირეთ ამ ჩამონათვალთან",
   "list-delete-pop": "ყველა მოქმედება  წაიშლება აქტივობების ველიდან და თქვენ ვეღარ შეძლებთ მის აღდგენას ჩამონათვალში",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/km.i18n.json

@@ -309,6 +309,7 @@
   "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",
@@ -316,6 +317,10 @@
   "error-username-taken": "This username 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",
+  "exportBoardPopup-title": "Export board",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/ko.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "이 작업은 보드의 멤버만 실행할 수 있습니다.",
   "error-json-malformed": "텍스트가 JSON 형식에 유효하지 않습니다.",
   "error-json-schema": "JSON 데이터에 정보가 올바른 형식으로 포함되어 있지 않습니다.",
+  "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": "목록이 없습니다.",
   "error-user-doesNotExist": "멤버의 정보가 없습니다.",
   "error-user-notAllowSelf": "자기 자신을 초대할 수 없습니다.",
@@ -316,6 +317,10 @@
   "error-username-taken": "중복된 아이디 입니다.",
   "error-email-taken": "Email has already been taken",
   "export-board": "보드 내보내기",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "보드 내보내기",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "import-board-c": "보드 가져오기",
   "import-board-title-trello": "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": "Trello 게시판에서 'Menu' -> 'More' -> 'Print and Export', 'Export JSON' 선택하여 텍스트 결과값 복사",
+  "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": "유효한 JSON 데이터를 여기에 붙여 넣으십시오.",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "보드 멤버들",
   "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
   "import-show-user-mapping": "멤버 매핑 미리보기",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlane Actions",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Trello 카드 가져 오기",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "더보기",
   "link-list": "이 리스트에 링크",
   "list-delete-pop": "모든 작업이 활동내역에서 제거되며 리스트를 복구 할 수 없습니다. 실행 취소는 불가능 합니다.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/lv.i18n.json

@@ -309,6 +309,7 @@
   "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",
@@ -316,6 +317,10 @@
   "error-username-taken": "This username 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",
+  "exportBoardPopup-title": "Export board",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/mk.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "За да направите това трябва да сте член на това табло",
   "error-json-malformed": "Текстът Ви не е валиден JSON",
   "error-json-schema": "JSON информацията Ви не съдържа информация във валиден формат",
+  "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": "Този списък не съществува",
   "error-user-doesNotExist": "Този потребител не съществува",
   "error-user-notAllowSelf": "Не можете да поканите себе си",
@@ -316,6 +317,10 @@
   "error-username-taken": "Това потребителско име е вече заето",
   "error-email-taken": "Имейлът е вече зает",
   "export-board": "Експортиране на Табло",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Експортиране на Табло",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "import-board-c": "Импортирай Табло",
   "import-board-title-trello": "Импорт на табло от Trello",
   "import-board-title-wekan": "Import board from previous export",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "От 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": "Копирайте валидната Ви JSON информация тук",
+  "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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlane Actions",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Импорт на карта от Trello",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Още",
   "link-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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/mn.i18n.json

@@ -309,6 +309,7 @@
   "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",
@@ -316,6 +317,10 @@
   "error-username-taken": "This username 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",
+  "exportBoardPopup-title": "Export board",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/nb.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "Du må være medlem av denne tavlen for å gjøre dette",
   "error-json-malformed": "Denne teksten er ikke gyldig 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": "Denne listen finnes ikke",
   "error-user-doesNotExist": "This user does not exist",
   "error-user-notAllowSelf": "You can not invite yourself",
@@ -316,6 +317,10 @@
   "error-username-taken": "This username 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",
+  "exportBoardPopup-title": "Export board",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlane Actions",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Import a Trello card",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Mer",
   "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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/nl.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "Je moet een lid zijn van dit bord om dat te doen.",
   "error-json-malformed": "JSON format klopt niet",
   "error-json-schema": "De JSON data bevat niet de juiste informatie in de juiste 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": "Deze lijst bestaat niet",
   "error-user-doesNotExist": "Deze gebruiker bestaat niet",
   "error-user-notAllowSelf": "Je kan jezelf niet uitnodigen",
@@ -316,6 +317,10 @@
   "error-username-taken": "Deze gebruikersnaam is al in gebruik",
   "error-email-taken": "Dit e-mailadres is al in gebruik",
   "export-board": "Exporteer bord",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Exporteer bord",
   "sort": "Sorteer",
   "sort-desc": "Klik om lijst te sorteren",
   "list-sort-by": "Sorteer lijst op",
@@ -351,12 +356,16 @@
   "import-board-c": "Importeer bord",
   "import-board-title-trello": "Importeer bord vanuit Trello",
   "import-board-title-wekan": "Importeer bord vanuit eerdere export",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "Vanuit Trello",
   "from-wekan": "Vanuit eerdere export",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "Op jouw Trello bord, ga naar 'Menu', dan naar 'Meer', 'Print en Exporteer', 'Exporteer JSON', en kopieer de tekst.",
+  "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
   "import-board-instruction-wekan": "Ga op je bord naar 'Menu' en klik dan 'Export board' en kopieer de tekst in het gedownloade bestand.",
   "import-board-instruction-about-errors": "Als je tijdens de import van het bord foutmeldingen krijgt is de import soms toch gelukt en vind je het bord terug op de 'Alle borden' scherm.",
   "import-json-placeholder": "Plak geldige JSON data hier",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Breng leden in kaart",
   "import-members-map": "Je geïmporteerde bord heeft een aantal leden. Koppel de leden die je wilt importeren aan je gebruikers.",
   "import-show-user-mapping": "Breng leden overzicht tevoorschijn",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlane handelingen",
   "swimlaneAddPopup-title": "Voeg hieronder een Swimlane toe",
   "listImportCardPopup-title": "Importeer een Trello kaart",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Meer",
   "link-list": "Link naar deze lijst",
   "list-delete-pop": "Alle acties zullen verwijderd worden van de activiteiten feed, en je zult deze niet meer kunnen herstellen. Er is geen herstelmogelijkheid.",
@@ -786,5 +796,12 @@
   "thursday": "Donderdag",
   "friday": "Vrijdag",
   "saturday": "Zaterdag",
-  "sunday": "Zondag"
+  "sunday": "Zondag",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/oc.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "Devètz èsser un participant del tablèu per far aquò",
   "error-json-malformed": "Vòstre tèxte es pas valid JSON",
   "error-json-schema": "Vòstre JSON es pas al format correct ",
+  "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": "Aqueste tièra existís pas",
   "error-user-doesNotExist": "Aqueste utilizator existís pas",
   "error-user-notAllowSelf": "Vos podètz pas convidar vautres meteisses",
@@ -316,6 +317,10 @@
   "error-username-taken": "Lo nom es ja pres",
   "error-email-taken": "Lo corrièl es ja pres ",
   "export-board": "Exportar lo tablèu",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Exportar lo tablèu",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "import-board-c": "Importar un tablèu",
   "import-board-title-trello": "Importar un tablèu dempuèi Trello",
   "import-board-title-wekan": "Importar un tablèu dempuèi un export passat",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "Dempuèi Trello",
   "from-wekan": "Dempuèi un export passat",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "Dins vòstre tablèu Trello, vos cal anar dins \"Menut\", puèi \"Mai\", \"Export\", \"Export JSON\", e copiar lo tèxte balhat.",
+  "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
   "import-board-instruction-wekan": "Dins vòstre tablèu, vos cal anar dins \"Menut\", puèi \"Exportar lo tablèu\", e de copiar lo tèxte del fichièr telecargat.",
   "import-board-instruction-about-errors": "Se avètz de errors al moment d'importar un tablèu, es possible que l'importacion as fonccionat, lo tablèu es belèu a la pagina \"Totes los tablèus\".",
   "import-json-placeholder": "Pegar las donadas del fichièr JSON aicí",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Mapa dels participants",
   "import-members-map": "Lo tablèu qu'avètz importat as ja de participants, vos cal far la migracion amb los utilizators actual",
   "import-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlane Actions",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Importar una carta de Trello",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Mai",
   "link-list": "Ligam d'aquesta tièra",
   "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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/pl.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "Musisz być członkiem tej tablicy, żeby wykonać tę czynność",
   "error-json-malformed": "Twoja fraza nie jest w formacie JSON",
   "error-json-schema": "Twoje dane JSON nie zawierają prawidłowych informacji w poprawnym formacie",
+  "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": "Ta lista nie isnieje",
   "error-user-doesNotExist": "Ten użytkownik nie istnieje",
   "error-user-notAllowSelf": "Nie możesz zaprosić samego siebie",
@@ -316,6 +317,10 @@
   "error-username-taken": "Ta nazwa jest już zajęta",
   "error-email-taken": "Adres email jest już zarezerwowany",
   "export-board": "Eksportuj tablicę",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Eksportuj tablicę",
   "sort": "Sortuj",
   "sort-desc": "Kliknij by sortować listę",
   "list-sort-by": "Sortuj listę przez:",
@@ -351,12 +356,16 @@
   "import-board-c": "Import tablicy",
   "import-board-title-trello": "Importuj tablicę z Trello",
   "import-board-title-wekan": "Importuj tablicę z poprzedniego eksportu",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "Z Trello",
   "from-wekan": "Z poprzedniego eksportu",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "W twojej tablicy na Trello przejdź do 'Menu', następnie 'Więcej', 'Drukuj i eksportuj', 'Eksportuj jako JSON' i skopiuj wynik",
+  "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
   "import-board-instruction-wekan": "Na Twojej tablicy przejdź do 'Menu', a następnie wybierz 'Eksportuj tablicę' i skopiuj tekst w pobranym pliku.",
   "import-board-instruction-about-errors": "W przypadku, gdy otrzymujesz błędy importowania tablicy, czasami importowanie pomimo wszystko działa poprawnie i tablica znajduje się w oknie Wszystkie tablice.",
   "import-json-placeholder": "Wklej Twoje dane JSON tutaj",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Przypisz członków",
   "import-members-map": "Twoje zaimportowane tablice mają kilku członków. Proszę wybierz członków których chcesz zaimportować dla Twoich użytkowników",
   "import-show-user-mapping": "Przejrzyj wybranych członków",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Opcje diagramu czynności",
   "swimlaneAddPopup-title": "Dodaj diagram czynności poniżej",
   "listImportCardPopup-title": "Zaimportuj kartę z Trello",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Więcej",
   "link-list": "Podepnij do tej listy",
   "list-delete-pop": "Wszystkie czynności zostaną usunięte z Aktywności i nie będziesz w stanie przywrócić listy. Nie ma możliwości cofnięcia tej operacji.",
@@ -786,5 +796,12 @@
   "thursday": "Czwartek",
   "friday": "Piątek",
   "saturday": "Sobota",
-  "sunday": "Niedziela"
+  "sunday": "Niedziela",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 24 - 7
i18n/pt-BR.i18n.json

@@ -164,15 +164,15 @@
   "cardStartVotingPopup-title": "Iniciar uma votação",
   "positiveVoteMembersPopup-title": "Proponentes",
   "negativeVoteMembersPopup-title": "Oponentes",
-  "card-edit-voting": "Edit voting",
-  "editVoteEndDatePopup-title": "Change vote end date",
-  "allowNonBoardMembers": "Allow all logged in users",
+  "card-edit-voting": "Editar votação",
+  "editVoteEndDatePopup-title": "Mudar votação e data",
+  "allowNonBoardMembers": "Permitir todos os usuários logados",
   "vote-question": "Questão em votação",
   "vote-public": "Mostrar quem votou no quê",
   "vote-for-it": "a favor",
   "vote-against": "contra",
-  "deleteVotePopup-title": "Delete vote?",
-  "vote-delete-pop": "Deleting is permanent. You will lose all actions associated with this vote.",
+  "deleteVotePopup-title": "Excluir votação?",
+  "vote-delete-pop": "A exclusão é permanente. Você perderá todas as ações associadas a esta votação.",
   "cardDeletePopup-title": "Excluir Cartão?",
   "cardDetailsActionsPopup-title": "Ações do cartão",
   "cardLabelsPopup-title": "Etiquetas",
@@ -309,6 +309,7 @@
   "error-board-notAMember": "Você precisa ser um membro desse quadro para fazer isto",
   "error-json-malformed": "Seu texto não é um JSON válido",
   "error-json-schema": "Seu JSON não inclui as informações no formato correto",
+  "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": "Esta lista não existe",
   "error-user-doesNotExist": "Este usuário não existe",
   "error-user-notAllowSelf": "Você não pode convidar a si mesmo",
@@ -316,6 +317,10 @@
   "error-username-taken": "Esse username já existe",
   "error-email-taken": "E-mail já está em uso",
   "export-board": "Exportar quadro",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Exportar quadro",
   "sort": "Ordenar",
   "sort-desc": "Clique para Ordenar Lista",
   "list-sort-by": "Ordenar a Lista por:",
@@ -351,12 +356,16 @@
   "import-board-c": "Importar quadro",
   "import-board-title-trello": "Importar quadro do Trello",
   "import-board-title-wekan": "Importar quadro a partir de exportação prévia",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "Do Trello",
   "from-wekan": "A partir de exportação prévia",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "No seu quadro do Trello, vá em 'Menu', depois em 'Mais', 'Imprimir e Exportar', 'Exportar JSON', então copie o texto emitido",
+  "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
   "import-board-instruction-wekan": "Em seu quadro vá para 'Menu', depois 'Exportar quadro' e copie o texto no arquivo baixado.",
   "import-board-instruction-about-errors": "Se você receber erros ao importar o quadro, às vezes a importação ainda funciona e o quadro está na página Todos os Quadros.",
   "import-json-placeholder": "Cole seus dados JSON válidos aqui",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Mapear membros",
   "import-members-map": "Seu quadro importado possui alguns membros. Por favor, mapeie os membros que você deseja importar para seus usuários",
   "import-show-user-mapping": "Revisar mapeamento dos membros",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Ações de Raia",
   "swimlaneAddPopup-title": "Adicionar uma Raia abaixo",
   "listImportCardPopup-title": "Importe um cartão do Trello",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Mais",
   "link-list": "Vincular a esta lista",
   "list-delete-pop": "Todas as ações serão excluidas da lista de atividades e você não poderá recuperar a lista. Não há como desfazer.",
@@ -628,7 +638,7 @@
   "r-when-a-card": "Quando um cartão",
   "r-is": "é",
   "r-is-moved": "é movido",
-  "r-added-to": "Added to",
+  "r-added-to": "adicionado a",
   "r-removed-from": "Removido de",
   "r-the-board": "o quadro",
   "r-list": "lista",
@@ -786,5 +796,12 @@
   "thursday": "Quinta",
   "friday": "Sexta",
   "saturday": "Sábado",
-  "sunday": "Domingo"
+  "sunday": "Domingo",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/pt.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "Precisa de ser um membro deste quadro para fazer isso",
   "error-json-malformed": "O seu texto não é um JSON válido",
   "error-json-schema": "O seu JSON não inclui as informações apropriadas no formato correto",
+  "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": "Esta lista não existe",
   "error-user-doesNotExist": "Este utilizador não existe",
   "error-user-notAllowSelf": "Não se pode convidar a si mesmo",
@@ -316,6 +317,10 @@
   "error-username-taken": "Esse nome de utilizador já existe",
   "error-email-taken": "Endereço de e-mail já está em uso",
   "export-board": "Exportar quadro",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Exportar quadro",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "import-board-c": "Importar quadro",
   "import-board-title-trello": "Importar quadro do Trello",
   "import-board-title-wekan": "Importar quadro a partir de exportação prévia",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "Do Trello",
   "from-wekan": "A partir de exportação prévia",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "No seu quadro do Trello, vá em 'Menu', depois em 'Mais', 'Imprimir e Exportar', 'Exportar JSON', e copie o texto resultante.",
+  "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
   "import-board-instruction-wekan": "No seu quadro vá para 'Menu', depois 'Exportar quadro' e copie o texto no ficheiro descarregado.",
   "import-board-instruction-about-errors": "Se receber erros ao importar o quadro, às vezes a importação ainda funciona e o quadro está na página Todos os Quadros.",
   "import-json-placeholder": "Cole seus dados JSON válidos aqui",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Mapear membros",
   "import-members-map": "O seu quadro importado possui alguns membros. Por favor, mapeie os membros que deseja importar para seus utilizadores",
   "import-show-user-mapping": "Rever mapeamento dos membros",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Acções de Pista",
   "swimlaneAddPopup-title": "Adicionar uma Pista abaixo",
   "listImportCardPopup-title": "Importe um cartão do Trello",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Mais",
   "link-list": "Ligar a esta lista",
   "list-delete-pop": "Todas as acções serão removidas do feed de actividade e não poderá recuperar a lista. Não há como desfazer.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/ro.i18n.json

@@ -309,6 +309,7 @@
   "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",
@@ -316,6 +317,10 @@
   "error-username-taken": "This username 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",
+  "exportBoardPopup-title": "Export board",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/ru.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "Вы должны быть участником доски, чтобы сделать это",
   "error-json-malformed": "Ваше текст не является правильным JSON",
   "error-json-schema": "Содержимое вашего JSON не содержит информацию в корректном формате",
+  "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": "Список не найден",
   "error-user-doesNotExist": "Пользователь не найден",
   "error-user-notAllowSelf": "Вы не можете пригласить себя",
@@ -316,6 +317,10 @@
   "error-username-taken": "Это имя пользователя уже занято",
   "error-email-taken": "Этот адрес уже занят",
   "export-board": "Экспортировать доску",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Экспортировать доску",
   "sort": "Сортировать",
   "sort-desc": "Нажмите, чтобы отсортировать список",
   "list-sort-by": "Сортировать список по:",
@@ -351,12 +356,16 @@
   "import-board-c": "Импортировать доску",
   "import-board-title-trello": "Импортировать доску из Trello",
   "import-board-title-wekan": "Импортировать доску, сохраненную ранее.",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "Из Trello",
   "from-wekan": "Сохраненную ранее",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "На вашей Trello доске нажмите “Menu” - “More” - “Print and export - “Export JSON” и скопируйте полученный текст",
+  "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
   "import-board-instruction-wekan": "На вашей доске перейдите в “Меню”, далее “Экспортировать доску” и скопируйте текст из скачаного файла",
   "import-board-instruction-about-errors": "Даже если при импорте возникли ошибки, иногда импортирование проходит успешно – тогда доска появится на странице «Все доски».",
   "import-json-placeholder": "Вставьте JSON сюда",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Составить карту участников",
   "import-members-map": "Вы импортировали доску с участниками. Пожалуйста, отметьте участников, которых вы хотите импортировать в качестве пользователей",
   "import-show-user-mapping": "Проверить карту участников",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Действия с дорожкой",
   "swimlaneAddPopup-title": "Добавить дорожку ниже",
   "listImportCardPopup-title": "Импортировать Trello карточку",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Поделиться",
   "link-list": "Ссылка на список",
   "list-delete-pop": "Все действия будут удалены из ленты активности участников, и вы не сможете восстановить список. Данное действие необратимо.",
@@ -786,5 +796,12 @@
   "thursday": "Четверг",
   "friday": "Пятница",
   "saturday": "Суббота",
-  "sunday": "Воскресенье"
+  "sunday": "Воскресенье",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/sl.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "Niste član table.",
   "error-json-malformed": "Vaše besedilo ni veljaven JSON",
   "error-json-schema": "Vaši JSON podatki ne vsebujejo pravilnih informacij v ustreznem formatu",
+  "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": "Seznam ne obstaja",
   "error-user-doesNotExist": "Uporabnik ne obstaja",
   "error-user-notAllowSelf": "Ne morete povabiti sebe",
@@ -316,6 +317,10 @@
   "error-username-taken": "To up. ime že obstaja",
   "error-email-taken": "E-poštni naslov je že zaseden",
   "export-board": "Izvozi tablo",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Izvozi tablo",
   "sort": "Sortiraj",
   "sort-desc": "Klikni za sortiranje seznama",
   "list-sort-by": "Sortiraj po:",
@@ -351,12 +356,16 @@
   "import-board-c": "Uvozi tablo",
   "import-board-title-trello": "Uvozi tablo iz orodja Trello",
   "import-board-title-wekan": "Uvozi tablo iz prejšnjega izvoza",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "Iz orodja Trello",
   "from-wekan": "Od prejšnjega izvoza",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "V vaši Trello tabli pojdite na 'Meni', 'Več', 'Natisni in Izvozi', 'Izvozi JSON', in kopirajte prikazano besedilo.",
+  "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
   "import-board-instruction-wekan": "V vaši tabli pojdite na 'Meni', 'Izvozi tablo' in kopirajte besedilo iz prenesene datoteke.",
   "import-board-instruction-about-errors": "Pri napakah med uvozom table v nekaterih primerih uvažanje še deluje, uvožena tabla pa je na strani Vse Table.",
   "import-json-placeholder": "Tukaj prilepite veljavne JSON podatke",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Mapiraj člane",
   "import-members-map": "Vaša uvožena tabla vsebuje nekaj članov. Prosimo mapirajte člane, ki jih želite uvoziti, z vašimi uporabniki.",
   "import-show-user-mapping": "Preglejte povezane člane",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Dejanja plavalnih stez",
   "swimlaneAddPopup-title": "Dodaj plavalno stezo spodaj",
   "listImportCardPopup-title": "Uvozi Trello kartico",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Več",
   "link-list": "Poveži s seznamom",
   "list-delete-pop": "Vsa dejanja bodo odstranjena iz vira dejavnosti in seznama ne boste mogli obnoviti. Razveljavitve ni.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/sr.i18n.json

@@ -309,6 +309,7 @@
   "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": "Korisnik ne postoji",
   "error-user-notAllowSelf": "Ne možeš pozvati samog sebe",
@@ -316,6 +317,10 @@
   "error-username-taken": "Korisničko ime je već zauzeto",
   "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",
+  "exportBoardPopup-title": "Export board",
   "sort": "Sortiraj",
   "sort-desc": "Kliknite da biste sortirali listu",
   "list-sort-by": "Poredaj listu po:",
@@ -351,12 +356,16 @@
   "import-board-c": "Import board",
   "import-board-title-trello": "Uvezi tablu iz Trella",
   "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": "Mapiraj članove",
   "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
   "import-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlane Actions",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Import a Trello card",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Više",
   "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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/sv.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "Du måste vara medlem i denna anslagstavla för att göra det",
   "error-json-malformed": "Din text är inte giltigt JSON",
   "error-json-schema": "Din JSON data inkluderar inte korrekt information i rätt 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": "Denna lista finns inte",
   "error-user-doesNotExist": "Denna användare finns inte",
   "error-user-notAllowSelf": "Du kan inte bjuda in dig själv",
@@ -316,6 +317,10 @@
   "error-username-taken": "Detta användarnamn är redan taget",
   "error-email-taken": "E-post har redan tagits",
   "export-board": "Exportera anslagstavla",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Exportera anslagstavla",
   "sort": "Sortera",
   "sort-desc": "Klicka för att sortera listan",
   "list-sort-by": "Sortera listan efter:",
@@ -351,12 +356,16 @@
   "import-board-c": "Importera anslagstavla",
   "import-board-title-trello": "Importera anslagstavla från Trello",
   "import-board-title-wekan": "Importera anslagstavla från tidigare export",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "Från Trello",
   "from-wekan": "Från tidigare export",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "I din Trello-anslagstavla, gå till 'Meny', sedan 'Mera', 'Skriv ut och exportera', 'Exportera JSON' och kopiera den resulterande text.",
+  "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
   "import-board-instruction-wekan": "På din anslagstavla, gå till \"Meny\", sedan \"Exportera anslagstavla\" och kopiera texten i den hämtade filen.",
   "import-board-instruction-about-errors": "Om du får fel vid import av anslagstavla, ibland importerar fortfarande fungerar, och styrelsen är på alla sidor för anslagstavlor.",
   "import-json-placeholder": "Klistra in giltigt JSON data här",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Kartlägg medlemmar",
   "import-members-map": "Din importerade anslagstavla har några medlemmar. Vänligen kartlägg medlemmarna du vill importera till dina användare",
   "import-show-user-mapping": "Granska medlemskartläggning",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Simbana-åtgärder",
   "swimlaneAddPopup-title": "Lägg till en simbana nedan",
   "listImportCardPopup-title": "Importera ett Trello kort",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Mera",
   "link-list": "Länk till den här listan",
   "list-delete-pop": "Alla åtgärder kommer att tas bort från aktivitetsmatningen och du kommer inte att kunna återställa listan. Det går inte att ångra.",
@@ -786,5 +796,12 @@
   "thursday": "Torsdag",
   "friday": "Fredag",
   "saturday": "Lördag",
-  "sunday": "Söndag"
+  "sunday": "Söndag",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/sw.i18n.json

@@ -309,6 +309,7 @@
   "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",
@@ -316,6 +317,10 @@
   "error-username-taken": "This username 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",
+  "exportBoardPopup-title": "Export board",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/ta.i18n.json

@@ -309,6 +309,7 @@
   "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",
@@ -316,6 +317,10 @@
   "error-username-taken": "This username 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",
+  "exportBoardPopup-title": "Export board",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "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": "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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlane Actions",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Import a Trello card",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "மேலும் ",
   "link-list": "Link to this list",
   "list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/th.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "คุณต้องเป็นสมาชิกของบอร์ดนี้ถึงจะทำได้",
   "error-json-malformed": "ข้อความของคุณไม่ใช่ JSON",
   "error-json-schema": "รูปแบบข้้้อมูล JSON ของคุณไม่ถูกต้อง",
+  "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": "รายการนี้ไม่มีอยู่",
   "error-user-doesNotExist": "ผู้ใช้นี้ไม่มีอยู่",
   "error-user-notAllowSelf": "You can not invite yourself",
@@ -316,6 +317,10 @@
   "error-username-taken": "ชื่อนี้ถูกใช้งานแล้ว",
   "error-email-taken": "Email has already been taken",
   "export-board": "ส่งออกกระดาน",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "ส่งออกกระดาน",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "import-board-c": "Import board",
   "import-board-title-trello": "นำเข้าบอร์ดจาก 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": "ใน Trello ของคุณให้ไปที่ 'Menu' และไปที่ More -> Print and Export -> Export JSON และคัดลอกข้อความจากนั้น",
+  "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": "วางข้อมูล JSON ที่ถูกต้องของคุณที่นี่",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "แผนที่สมาชิก",
   "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
   "import-show-user-mapping": "Review การทำแผนที่สมาชิก",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Swimlane Actions",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "นำเข้าการ์ด Trello",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "เพิ่มเติม",
   "link-list": "Link to this list",
   "list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/tr.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "Bu işlemi yapmak için panoya üye olmalısın.",
   "error-json-malformed": "Girilen metin geçerli bir JSON formatında değil",
   "error-json-schema": "Girdiğin JSON metni tüm bilgileri doğru biçimde barındırmıyor",
+  "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": "Liste bulunamadı",
   "error-user-doesNotExist": "Kullanıcı bulunamadı",
   "error-user-notAllowSelf": "Kendi kendini davet edemezsin",
@@ -316,6 +317,10 @@
   "error-username-taken": "Kullanıcı adı zaten alınmış",
   "error-email-taken": "Bu e-posta adresi daha önceden alınmış",
   "export-board": "Panoyu dışarı aktar",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "Panoyu dışarı aktar",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "import-board-c": "Panoyu içe aktar",
   "import-board-title-trello": "Trello'dan panoyu içeri aktar",
   "import-board-title-wekan": "Import board from previous export",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "Trello'dan",
   "from-wekan": "From previous export",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "Trello panonuzda 'Menü'ye gidip 'Daha fazlası'na tıklayın, ardından 'Yazdır ve Çıktı Al'ı seçip 'JSON biçiminde çıktı al' diyerek çıkan metni buraya kopyalayın.",
+  "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": "Geçerli JSON verisini buraya yapıştırın",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "Üyeleri eşleştirme",
   "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
   "import-show-user-mapping": "Üye eşleştirmesini kontrol et",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "Kulvar İşlemleri",
   "swimlaneAddPopup-title": "Add a Swimlane below",
   "listImportCardPopup-title": "Bir Trello kartını içeri aktar",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "Daha",
   "link-list": "Listeye doğrudan bağlantı",
   "list-delete-pop": "Etkinlik akışınızdaki tüm eylemler geri kurtarılamaz şekilde kaldırılacak. Bu işlem geri alınamaz.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/uk.i18n.json

@@ -309,6 +309,7 @@
   "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",
@@ -316,6 +317,10 @@
   "error-username-taken": "This username 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",
+  "exportBoardPopup-title": "Export board",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/vi.i18n.json

@@ -309,6 +309,7 @@
   "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",
@@ -316,6 +317,10 @@
   "error-username-taken": "This username 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",
+  "exportBoardPopup-title": "Export board",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 18 - 1
i18n/zh-CN.i18n.json

@@ -309,6 +309,7 @@
   "error-board-notAMember": "需要成为看板成员才能执行此操作",
   "error-json-malformed": "文本不是合法的 JSON",
   "error-json-schema": "JSON 数据没有用正确的格式包含合适的信息",
+  "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": "不存在此列表",
   "error-user-doesNotExist": "该用户不存在",
   "error-user-notAllowSelf": "无法邀请自己",
@@ -316,6 +317,10 @@
   "error-username-taken": "此用户名已存在",
   "error-email-taken": "此EMail已存在",
   "export-board": "导出看板",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "导出看板",
   "sort": "排序",
   "sort-desc": "点此来将列表排序",
   "list-sort-by": "按此来将列表排序:",
@@ -351,12 +356,16 @@
   "import-board-c": "导入看板",
   "import-board-title-trello": "从Trello导入看板",
   "import-board-title-wekan": "从以前的导出数据导入看板",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "自 Trello",
   "from-wekan": "自以前的导出",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "在你的Trello看板中,点击“菜单”,然后选择“更多”,“打印与导出”,“导出为 JSON” 并拷贝结果文本",
+  "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
   "import-board-instruction-wekan": "在您的看板,点击“菜单”,然后“导出看板”,复制下载文件中的文本。",
   "import-board-instruction-about-errors": "如果在导入看板时出现错误,导入工作可能仍然在进行中,并且看板已经出现在全部看板页。",
   "import-json-placeholder": "粘贴您有效的 JSON 数据至此",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "映射成员",
   "import-members-map": "您导入的看板有一些成员,请映射这些成员到您导入的用户。",
   "import-show-user-mapping": "核对成员映射",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "泳道图操作",
   "swimlaneAddPopup-title": "在下面添加一个泳道",
   "listImportCardPopup-title": "导入 Trello 卡片",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "更多",
   "link-list": "关联到这个列表",
   "list-delete-pop": "所有活动将被从活动动态中删除并且你无法恢复他们,此操作无法撤销。",
@@ -786,5 +796,12 @@
   "thursday": "周四",
   "friday": "周五",
   "saturday": "周六",
-  "sunday": "周日"
+  "sunday": "周日",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

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

@@ -309,6 +309,7 @@
   "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",
@@ -316,6 +317,10 @@
   "error-username-taken": "This username 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",
+  "exportBoardPopup-title": "Export board",
   "sort": "Sort",
   "sort-desc": "Click to Sort List",
   "list-sort-by": "Sort the List By:",
@@ -351,12 +356,16 @@
   "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-show-user-mapping": "Review members mapping",
@@ -389,6 +398,7 @@
   "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.",
@@ -786,5 +796,12 @@
   "thursday": "Thursday",
   "friday": "Friday",
   "saturday": "Saturday",
-  "sunday": "Sunday"
+  "sunday": "Sunday",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

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

@@ -309,6 +309,7 @@
   "error-board-notAMember": "需要成為看板成員才能執行此操作",
   "error-json-malformed": "不是有效的 JSON",
   "error-json-schema": "JSON 資料沒有用正確的格式包含合適的資訊",
+  "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": "不存在此列表",
   "error-user-doesNotExist": "該使用者不存在",
   "error-user-notAllowSelf": "不允許對自己執行此操作",
@@ -316,6 +317,10 @@
   "error-username-taken": "這個使用者名稱已被使用",
   "error-email-taken": "Email 已被使用",
   "export-board": "匯出看板",
+  "export-board-json": "Export board to JSON",
+  "export-board-csv": "Export board to CSV",
+  "export-board-tsv": "Export board to TSV",
+  "exportBoardPopup-title": "匯出看板",
   "sort": "排序",
   "sort-desc": "點選排序清單",
   "list-sort-by": "清單排序依照:",
@@ -351,12 +356,16 @@
   "import-board-c": "匯入看板",
   "import-board-title-trello": "匯入在 Trello 的看板",
   "import-board-title-wekan": "從上次的匯出檔匯入看板",
+  "import-board-title-csv": "Import board from CSV/TSV",
   "from-trello": "來自 Trello",
   "from-wekan": "從上次的匯出檔",
+  "from-csv": "From CSV/TSV",
   "import-board-instruction-trello": "在你的Trello看板中,點選“功能表”,然後選擇“更多”,“列印與匯出”,“匯出為 JSON” 並拷貝結果文本",
+  "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
   "import-board-instruction-wekan": "在您的看板,點擊“選單”,然後“匯出看板”,複製下載文件中的文本。",
   "import-board-instruction-about-errors": "如果在匯入看板時出現錯誤,匯入工作可能仍然在進行中,並且看板已經出現在全部看板頁。",
   "import-json-placeholder": "貼上您有效的 JSON 資料至此",
+  "import-csv-placeholder": "Paste your valid CSV/TSV data here",
   "import-map-members": "複製成員",
   "import-members-map": "您匯入的看板有一些成員,請複製這些成員到您匯入的用戶。",
   "import-show-user-mapping": "核對複製的成員",
@@ -389,6 +398,7 @@
   "swimlaneActionPopup-title": "泳道動作",
   "swimlaneAddPopup-title": "在下面新增泳道",
   "listImportCardPopup-title": "匯入 Trello 卡片",
+  "listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
   "listMorePopup-title": "更多",
   "link-list": "連結到這個清單",
   "list-delete-pop": "所有的動作都將從活動動態中被移除且您將無法再開啟該清單\b。此操作無法復原。",
@@ -786,5 +796,12 @@
   "thursday": "週四",
   "friday": "週五",
   "saturday": "週六",
-  "sunday": "週日"
+  "sunday": "週日",
+  "status": "Status",
+  "swimlane": "Swimlane",
+  "owner": "Owner",
+  "last-modified-at": "Last modified at",
+  "last-activity": "Last activity",
+  "voting": "Voting",
+  "archived": "Archived"
 }

+ 313 - 0
models/csvCreator.js

@@ -0,0 +1,313 @@
+import Boards from './boards';
+
+export class CsvCreator {
+  constructor(data) {
+    // date to be used for timestamps during import
+    this._nowDate = new Date();
+    // index to help keep track of what information a column stores
+    // each row represents a card
+    this.fieldIndex = {};
+    this.lists = {};
+    // Map of members using username => wekanid
+    this.members = data.membersMapping ? data.membersMapping : {};
+    this.swimlane = null;
+  }
+
+  /**
+   * If dateString is provided,
+   * return the Date it represents.
+   * If not, will return the date when it was first called.
+   * This is useful for us, as we want all import operations to
+   * have the exact same date for easier later retrieval.
+   *
+   * @param {String} dateString a properly formatted Date
+   */
+  _now(dateString) {
+    if (dateString) {
+      return new Date(dateString);
+    }
+    if (!this._nowDate) {
+      this._nowDate = new Date();
+    }
+    return this._nowDate;
+  }
+
+  _user(wekanUserId) {
+    if (wekanUserId && this.members[wekanUserId]) {
+      return this.members[wekanUserId];
+    }
+    return Meteor.userId();
+  }
+
+  /**
+   * Map the header row titles to an index to help assign proper values to the cards' fields
+   * Valid headers (name of card fields):
+   * title, description, status, owner, member, label, due date, start date, finish date, created at, updated at
+   * Some header aliases can also be accepted.
+   * Headers are NOT case-sensitive.
+   *
+   * @param {Array} headerRow array from row of headers of imported CSV/TSV for cards
+   */
+  mapHeadertoCardFieldIndex(headerRow) {
+    const index = {};
+    for (let i = 0; i < headerRow.length; i++) {
+      switch (headerRow[i].trim().toLowerCase()) {
+        case 'title':
+          index.title = i;
+          break;
+        case 'description':
+          index.description = i;
+          break;
+        case 'stage':
+        case 'status':
+        case 'state':
+          index.stage = i;
+          break;
+        case 'owner':
+          index.owner = i;
+          break;
+        case 'members':
+        case 'member':
+          index.members = i;
+          break;
+        case 'labels':
+        case 'label':
+          index.labels = i;
+          break;
+        case 'due date':
+        case 'deadline':
+        case 'due at':
+          index.dueAt = i;
+          break;
+        case 'start date':
+        case 'start at':
+          index.startAt = i;
+          break;
+        case 'finish date':
+        case 'end at':
+          index.endAt = i;
+          break;
+        case 'creation date':
+        case 'created at':
+          index.createdAt = i;
+          break;
+        case 'update date':
+        case 'updated at':
+        case 'modified at':
+        case 'modified on':
+          index.modifiedAt = i;
+          break;
+      }
+    }
+    this.fieldIndex = index;
+  }
+
+  createBoard(csvData) {
+    const boardToCreate = {
+      archived: false,
+      color: 'belize',
+      createdAt: this._now(),
+      labels: [],
+      members: [
+        {
+          userId: Meteor.userId(),
+          wekanId: Meteor.userId(),
+          isActive: true,
+          isAdmin: true,
+          isNoComments: false,
+          isCommentOnly: false,
+          swimlaneId: false,
+        },
+      ],
+      modifiedAt: this._now(),
+      //default is private, should inform user.
+      permission: 'private',
+      slug: 'board',
+      stars: 0,
+      title: `Imported Board ${this._now()}`,
+    };
+
+    // create labels
+    const labelsToCreate = new Set();
+    for (let i = 1; i < csvData.length; i++) {
+      if (csvData[i][this.fieldIndex.labels]) {
+        for (const importedLabel of csvData[i][this.fieldIndex.labels].split(
+          ' ',
+        )) {
+          if (importedLabel && importedLabel.length > 0) {
+            labelsToCreate.add(importedLabel);
+          }
+        }
+      }
+    }
+    for (const label of labelsToCreate) {
+      let labelName, labelColor;
+      if (label.indexOf('-') > -1) {
+        labelName = label.split('-')[0];
+        labelColor = label.split('-')[1];
+      } else {
+        labelName = label;
+      }
+      const labelToCreate = {
+        _id: Random.id(6),
+        color: labelColor ? labelColor : 'black',
+        name: labelName,
+      };
+      boardToCreate.labels.push(labelToCreate);
+    }
+
+    const boardId = Boards.direct.insert(boardToCreate);
+    Boards.direct.update(boardId, {
+      $set: {
+        modifiedAt: this._now(),
+      },
+    });
+    // log activity
+    Activities.direct.insert({
+      activityType: 'importBoard',
+      boardId,
+      createdAt: this._now(),
+      source: {
+        id: boardId,
+        system: 'CSV/TSV',
+      },
+      // We attribute the import to current user,
+      // not the author from the original object.
+      userId: this._user(),
+    });
+    return boardId;
+  }
+
+  createSwimlanes(boardId) {
+    const swimlaneToCreate = {
+      archived: false,
+      boardId,
+      createdAt: this._now(),
+      title: 'Default',
+      sort: 1,
+    };
+    const swimlaneId = Swimlanes.direct.insert(swimlaneToCreate);
+    Swimlanes.direct.update(swimlaneId, { $set: { updatedAt: this._now() } });
+    this.swimlane = swimlaneId;
+  }
+
+  createLists(csvData, boardId) {
+    let numOfCreatedLists = 0;
+    for (let i = 1; i < csvData.length; i++) {
+      const listToCreate = {
+        archived: false,
+        boardId,
+        createdAt: this._now(),
+      };
+      if (csvData[i][this.fieldIndex.stage]) {
+        const existingList = Lists.find({
+          title: csvData[i][this.fieldIndex.stage],
+          boardId,
+        }).fetch();
+        if (existingList.length > 0) {
+          continue;
+        } else {
+          listToCreate.title = csvData[i][this.fieldIndex.stage];
+        }
+      } else listToCreate.title = `Imported List ${this._now()}`;
+
+      const listId = Lists.direct.insert(listToCreate);
+      this.lists[csvData[i][this.fieldIndex.stage]] = listId;
+      numOfCreatedLists++;
+      Lists.direct.update(listId, {
+        $set: {
+          updatedAt: this._now(),
+          sort: numOfCreatedLists,
+        },
+      });
+    }
+  }
+
+  createCards(csvData, boardId) {
+    for (let i = 1; i < csvData.length; i++) {
+      const cardToCreate = {
+        archived: false,
+        boardId,
+        createdAt: csvData[i][this.fieldIndex.createdAt]
+          ? this._now(new Date(csvData[i][this.fieldIndex.createdAt]))
+          : null,
+        dateLastActivity: this._now(),
+        description: csvData[i][this.fieldIndex.description],
+        listId: this.lists[csvData[i][this.fieldIndex.stage]],
+        swimlaneId: this.swimlane,
+        sort: -1,
+        title: csvData[i][this.fieldIndex.title],
+        userId: this._user(),
+        startAt: csvData[i][this.fieldIndex.startAt]
+          ? this._now(new Date(csvData[i][this.fieldIndex.startAt]))
+          : null,
+        dueAt: csvData[i][this.fieldIndex.dueAt]
+          ? this._now(new Date(csvData[i][this.fieldIndex.dueAt]))
+          : null,
+        endAt: csvData[i][this.fieldIndex.endAt]
+          ? this._now(new Date(csvData[i][this.fieldIndex.endAt]))
+          : null,
+        spentTime: null,
+        labelIds: [],
+        modifiedAt: csvData[i][this.fieldIndex.modifiedAt]
+          ? this._now(new Date(csvData[i][this.fieldIndex.modifiedAt]))
+          : null,
+      };
+      // add the labels
+      if (csvData[i][this.fieldIndex.labels]) {
+        const board = Boards.findOne(boardId);
+        for (const importedLabel of csvData[i][this.fieldIndex.labels].split(
+          ' ',
+        )) {
+          if (importedLabel && importedLabel.length > 0) {
+            let labelToApply;
+            if (importedLabel.indexOf('-') === -1) {
+              labelToApply = board.getLabel(importedLabel, 'black');
+            } else {
+              labelToApply = board.getLabel(
+                importedLabel.split('-')[0],
+                importedLabel.split('-')[1],
+              );
+            }
+            cardToCreate.labelIds.push(labelToApply._id);
+          }
+        }
+      }
+      // add the members
+      if (csvData[i][this.fieldIndex.members]) {
+        const wekanMembers = [];
+        for (const importedMember of csvData[i][this.fieldIndex.members].split(
+          ' ',
+        )) {
+          if (this.members[importedMember]) {
+            const wekanId = this.members[importedMember];
+            if (!wekanMembers.find(wId => wId === wekanId)) {
+              wekanMembers.push(wekanId);
+            }
+          }
+        }
+        if (wekanMembers.length > 0) {
+          cardToCreate.members = wekanMembers;
+        }
+      }
+      Cards.direct.insert(cardToCreate);
+    }
+  }
+
+  create(board, currentBoardId) {
+    const isSandstorm =
+      Meteor.settings &&
+      Meteor.settings.public &&
+      Meteor.settings.public.sandstorm;
+    if (isSandstorm && currentBoardId) {
+      const currentBoard = Boards.findOne(currentBoardId);
+      currentBoard.archive();
+    }
+    this.mapHeadertoCardFieldIndex(board[0]);
+    const boardId = this.createBoard(board);
+    this.createLists(board, boardId);
+    this.createSwimlanes(boardId);
+    this.createCards(board, boardId);
+    return boardId;
+  }
+}

+ 47 - 193
models/export.js

@@ -1,3 +1,4 @@
+import { Exporter } from './exporter';
 /* global JsonRoutes */
 if (Meteor.isServer) {
   // todo XXX once we have a real API in place, move that route there
@@ -7,10 +8,10 @@ if (Meteor.isServer) {
   // on the client instead of copy/pasting the route path manually between the
   // client and the server.
   /**
-   * @operation export
+   * @operation exportJson
    * @tag Boards
    *
-   * @summary This route is used to export the board.
+   * @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'
@@ -46,199 +47,52 @@ if (Meteor.isServer) {
       JsonRoutes.sendResult(res, 403);
     }
   });
-}
-
-// exporter maybe is broken since Gridfs introduced, add fs and path
-
-export class Exporter {
-  constructor(boardId) {
-    this._boardId = boardId;
-  }
-
-  build() {
-    const fs = Npm.require('fs');
-    const os = Npm.require('os');
-    const path = Npm.require('path');
-
-    const byBoard = { boardId: this._boardId };
-    const byBoardNoLinked = {
-      boardId: this._boardId,
-      linkedId: { $in: ['', null] },
-    };
-    // we do not want to retrieve boardId in related elements
-    const noBoardId = {
-      fields: {
-        boardId: 0,
-      },
-    };
-    const result = {
-      _format: 'wekan-board-1.0.0',
-    };
-    _.extend(
-      result,
-      Boards.findOne(this._boardId, {
-        fields: {
-          stars: 0,
-        },
-      }),
-    );
-    result.lists = Lists.find(byBoard, noBoardId).fetch();
-    result.cards = Cards.find(byBoardNoLinked, noBoardId).fetch();
-    result.swimlanes = Swimlanes.find(byBoard, noBoardId).fetch();
-    result.customFields = CustomFields.find(
-      { boardIds: { $in: [this.boardId] } },
-      { fields: { boardId: 0 } },
-    ).fetch();
-    result.comments = CardComments.find(byBoard, noBoardId).fetch();
-    result.activities = Activities.find(byBoard, noBoardId).fetch();
-    result.rules = Rules.find(byBoard, noBoardId).fetch();
-    result.checklists = [];
-    result.checklistItems = [];
-    result.subtaskItems = [];
-    result.triggers = [];
-    result.actions = [];
-    result.cards.forEach(card => {
-      result.checklists.push(
-        ...Checklists.find({
-          cardId: card._id,
-        }).fetch(),
-      );
-      result.checklistItems.push(
-        ...ChecklistItems.find({
-          cardId: card._id,
-        }).fetch(),
-      );
-      result.subtaskItems.push(
-        ...Cards.find({
-          parentId: card._id,
-        }).fetch(),
-      );
-    });
-    result.rules.forEach(rule => {
-      result.triggers.push(
-        ...Triggers.find(
-          {
-            _id: rule.triggerId,
-          },
-          noBoardId,
-        ).fetch(),
-      );
-      result.actions.push(
-        ...Actions.find(
-          {
-            _id: rule.actionId,
-          },
-          noBoardId,
-        ).fetch(),
-      );
-    });
-
-    // [Old] for attachments we only export IDs and absolute url to original doc
-    // [New] Encode attachment to base64
-
-    const getBase64Data = function(doc, callback) {
-      let buffer = Buffer.allocUnsafe(0);
-      buffer.fill(0);
-
-      // callback has the form function (err, res) {}
-      const tmpFile = path.join(
-        os.tmpdir(),
-        `tmpexport${process.pid}${Math.random()}`,
-      );
-      const tmpWriteable = fs.createWriteStream(tmpFile);
-      const readStream = doc.createReadStream();
-      readStream.on('data', function(chunk) {
-        buffer = Buffer.concat([buffer, chunk]);
-      });
-
-      readStream.on('error', function(err) {
-        callback(null, null);
-      });
-      readStream.on('end', function() {
-        // done
-        fs.unlink(tmpFile, () => {
-          //ignored
-        });
 
-        callback(null, buffer.toString('base64'));
+  /**
+   * @operation exportCSV/TSV
+   * @tag Boards
+   *
+   * @summary This route is used to export the board to a CSV or TSV file format.
+   *
+   * @description If user is already logged-in, pass loginToken as param
+   *
+   * See https://blog.kayla.com.au/server-side-route-authentication-in-meteor/
+   * for detailed explanations
+   *
+   * @param {string} boardId the ID of the board we are exporting
+   * @param {string} authToken the loginToken
+   * @param {string} delimiter delimiter to use while building export. Default is comma ','
+   */
+  Picker.route('/api/boards/:boardId/export/csv', function(params, req, res) {
+    const boardId = params.boardId;
+    let user = null;
+    const loginToken = params.query.authToken;
+    if (loginToken) {
+      const hashToken = Accounts._hashLoginToken(loginToken);
+      user = Meteor.users.findOne({
+        'services.resume.loginTokens.hashedToken': hashToken,
       });
-      readStream.pipe(tmpWriteable);
-    };
-    const getBase64DataSync = Meteor.wrapAsync(getBase64Data);
-    result.attachments = Attachments.find(byBoard)
-      .fetch()
-      .map(attachment => {
-        let filebase64 = null;
-        filebase64 = getBase64DataSync(attachment);
-
-        return {
-          _id: attachment._id,
-          cardId: attachment.cardId,
-          //url: FlowRouter.url(attachment.url()),
-          file: filebase64,
-          name: attachment.original.name,
-          type: attachment.original.type,
-        };
+    } else if (!Meteor.settings.public.sandstorm) {
+      Authentication.checkUserId(req.userId);
+      user = Users.findOne({
+        _id: req.userId,
+        isAdmin: true,
       });
-
-    // we also have to export some user data - as the other elements only
-    // include id but we have to be careful:
-    // 1- only exports users that are linked somehow to that board
-    // 2- do not export any sensitive information
-    const users = {};
-    result.members.forEach(member => {
-      users[member.userId] = true;
-    });
-    result.lists.forEach(list => {
-      users[list.userId] = true;
-    });
-    result.cards.forEach(card => {
-      users[card.userId] = true;
-      if (card.members) {
-        card.members.forEach(memberId => {
-          users[memberId] = true;
-        });
-      }
-    });
-    result.comments.forEach(comment => {
-      users[comment.userId] = true;
-    });
-    result.activities.forEach(activity => {
-      users[activity.userId] = true;
-    });
-    result.checklists.forEach(checklist => {
-      users[checklist.userId] = true;
-    });
-    const byUserIds = {
-      _id: {
-        $in: Object.getOwnPropertyNames(users),
-      },
-    };
-    // we use whitelist to be sure we do not expose inadvertently
-    // some secret fields that gets added to User later.
-    const userFields = {
-      fields: {
-        _id: 1,
-        username: 1,
-        'profile.fullname': 1,
-        'profile.initials': 1,
-        'profile.avatarUrl': 1,
-      },
-    };
-    result.users = Users.find(byUserIds, userFields)
-      .fetch()
-      .map(user => {
-        // user avatar is stored as a relative url, we export absolute
-        if ((user.profile || {}).avatarUrl) {
-          user.profile.avatarUrl = FlowRouter.url(user.profile.avatarUrl);
-        }
-        return user;
+    }
+    const exporter = new Exporter(boardId);
+    if (exporter.canExport(user)) {
+      body = params.query.delimiter
+        ? exporter.buildCsv(params.query.delimiter)
+        : exporter.buildCsv();
+      res.writeHead(200, {
+        'Content-Length': body[0].length,
+        'Content-Type': params.query.delimiter ? 'text/csv' : 'text/tsv',
       });
-    return result;
-  }
-
-  canExport(user) {
-    const board = Boards.findOne(this._boardId);
-    return board && board.isVisibleBy(user);
-  }
+      res.write(body[0]);
+      res.end();
+    } else {
+      res.writeHead(403);
+      res.end('Permission Error');
+    }
+  });
 }

+ 344 - 0
models/exporter.js

@@ -0,0 +1,344 @@
+const stringify = require('csv-stringify');
+
+// exporter maybe is broken since Gridfs introduced, add fs and path
+export class Exporter {
+  constructor(boardId) {
+    this._boardId = boardId;
+  }
+
+  build() {
+    const fs = Npm.require('fs');
+    const os = Npm.require('os');
+    const path = Npm.require('path');
+
+    const byBoard = { boardId: this._boardId };
+    const byBoardNoLinked = {
+      boardId: this._boardId,
+      linkedId: { $in: ['', null] },
+    };
+    // we do not want to retrieve boardId in related elements
+    const noBoardId = {
+      fields: {
+        boardId: 0,
+      },
+    };
+    const result = {
+      _format: 'wekan-board-1.0.0',
+    };
+    _.extend(
+      result,
+      Boards.findOne(this._boardId, {
+        fields: {
+          stars: 0,
+        },
+      }),
+    );
+    result.lists = Lists.find(byBoard, noBoardId).fetch();
+    result.cards = Cards.find(byBoardNoLinked, noBoardId).fetch();
+    result.swimlanes = Swimlanes.find(byBoard, noBoardId).fetch();
+    result.customFields = CustomFields.find(
+      { boardIds: { $in: [this.boardId] } },
+      { fields: { boardId: 0 } },
+    ).fetch();
+    result.comments = CardComments.find(byBoard, noBoardId).fetch();
+    result.activities = Activities.find(byBoard, noBoardId).fetch();
+    result.rules = Rules.find(byBoard, noBoardId).fetch();
+    result.checklists = [];
+    result.checklistItems = [];
+    result.subtaskItems = [];
+    result.triggers = [];
+    result.actions = [];
+    result.cards.forEach(card => {
+      result.checklists.push(
+        ...Checklists.find({
+          cardId: card._id,
+        }).fetch(),
+      );
+      result.checklistItems.push(
+        ...ChecklistItems.find({
+          cardId: card._id,
+        }).fetch(),
+      );
+      result.subtaskItems.push(
+        ...Cards.find({
+          parentId: card._id,
+        }).fetch(),
+      );
+    });
+    result.rules.forEach(rule => {
+      result.triggers.push(
+        ...Triggers.find(
+          {
+            _id: rule.triggerId,
+          },
+          noBoardId,
+        ).fetch(),
+      );
+      result.actions.push(
+        ...Actions.find(
+          {
+            _id: rule.actionId,
+          },
+          noBoardId,
+        ).fetch(),
+      );
+    });
+
+    // [Old] for attachments we only export IDs and absolute url to original doc
+    // [New] Encode attachment to base64
+
+    const getBase64Data = function(doc, callback) {
+      let buffer = Buffer.allocUnsafe(0);
+      buffer.fill(0);
+
+      // callback has the form function (err, res) {}
+      const tmpFile = path.join(
+        os.tmpdir(),
+        `tmpexport${process.pid}${Math.random()}`,
+      );
+      const tmpWriteable = fs.createWriteStream(tmpFile);
+      const readStream = doc.createReadStream();
+      readStream.on('data', function(chunk) {
+        buffer = Buffer.concat([buffer, chunk]);
+      });
+
+      readStream.on('error', function() {
+        callback(null, null);
+      });
+      readStream.on('end', function() {
+        // done
+        fs.unlink(tmpFile, () => {
+          //ignored
+        });
+
+        callback(null, buffer.toString('base64'));
+      });
+      readStream.pipe(tmpWriteable);
+    };
+    const getBase64DataSync = Meteor.wrapAsync(getBase64Data);
+    result.attachments = Attachments.find(byBoard)
+      .fetch()
+      .map(attachment => {
+        let filebase64 = null;
+        filebase64 = getBase64DataSync(attachment);
+
+        return {
+          _id: attachment._id,
+          cardId: attachment.cardId,
+          //url: FlowRouter.url(attachment.url()),
+          file: filebase64,
+          name: attachment.original.name,
+          type: attachment.original.type,
+        };
+      });
+
+    // we also have to export some user data - as the other elements only
+    // include id but we have to be careful:
+    // 1- only exports users that are linked somehow to that board
+    // 2- do not export any sensitive information
+    const users = {};
+    result.members.forEach(member => {
+      users[member.userId] = true;
+    });
+    result.lists.forEach(list => {
+      users[list.userId] = true;
+    });
+    result.cards.forEach(card => {
+      users[card.userId] = true;
+      if (card.members) {
+        card.members.forEach(memberId => {
+          users[memberId] = true;
+        });
+      }
+    });
+    result.comments.forEach(comment => {
+      users[comment.userId] = true;
+    });
+    result.activities.forEach(activity => {
+      users[activity.userId] = true;
+    });
+    result.checklists.forEach(checklist => {
+      users[checklist.userId] = true;
+    });
+    const byUserIds = {
+      _id: {
+        $in: Object.getOwnPropertyNames(users),
+      },
+    };
+    // we use whitelist to be sure we do not expose inadvertently
+    // some secret fields that gets added to User later.
+    const userFields = {
+      fields: {
+        _id: 1,
+        username: 1,
+        'profile.fullname': 1,
+        'profile.initials': 1,
+        'profile.avatarUrl': 1,
+      },
+    };
+    result.users = Users.find(byUserIds, userFields)
+      .fetch()
+      .map(user => {
+        // user avatar is stored as a relative url, we export absolute
+        if ((user.profile || {}).avatarUrl) {
+          user.profile.avatarUrl = FlowRouter.url(user.profile.avatarUrl);
+        }
+        return user;
+      });
+    return result;
+  }
+
+  buildCsv(delimiter = ',') {
+    const result = this.build();
+    const columnHeaders = [];
+    const cardRows = [];
+    columnHeaders.push(
+      'Title',
+      'Description',
+      'Status',
+      'Swimlane',
+      'Owner',
+      'Requested by',
+      'Assigned by',
+      'Members',
+      'Assignees',
+      'Labels',
+      'Start at',
+      'Due at',
+      'End at',
+      'Over time',
+      'Spent time (hours)',
+      'Created at',
+      'Last modified at',
+      'Last activity',
+      'Vote',
+      'Archived',
+    );
+
+    /* TODO: Try to get translations working.
+             These currently only bring English translations.
+    TAPi18n.__('title'),
+    TAPi18n.__('description'),
+    TAPi18n.__('status'),
+    TAPi18n.__('swimlane'),
+    TAPi18n.__('owner'),
+    TAPi18n.__('requested-by'),
+    TAPi18n.__('assigned-by'),
+    TAPi18n.__('members'),
+    TAPi18n.__('assignee'),
+    TAPi18n.__('labels'),
+    TAPi18n.__('card-start'),
+    TAPi18n.__('card-due'),
+    TAPi18n.__('card-end'),
+    TAPi18n.__('overtime-hours'),
+    TAPi18n.__('spent-time-hours'),
+    TAPi18n.__('createdAt'),
+    TAPi18n.__('last-modified-at'),
+    TAPi18n.__('last-activity'),
+    TAPi18n.__('voting'),
+    TAPi18n.__('archived'),
+    */
+
+    const stringifier = stringify({
+      header: true,
+      delimiter,
+      columns: columnHeaders,
+    });
+
+    stringifier.on('readable', function() {
+      let row;
+      while ((row = stringifier.read())) {
+        cardRows.push(row);
+      }
+    });
+
+    stringifier.on('error', function(err) {
+      // eslint-disable-next-line no-console
+      console.error(err.message);
+    });
+
+    result.cards.forEach(card => {
+      const currentRow = [];
+      currentRow.push(card.title);
+      currentRow.push(card.description);
+      currentRow.push(
+        result.lists.find(({ _id }) => _id === card.listId).title,
+      );
+      currentRow.push(
+        result.swimlanes.find(({ _id }) => _id === card.swimlaneId).title,
+      );
+      currentRow.push(
+        result.users.find(({ _id }) => _id === card.userId).username,
+      );
+      currentRow.push(card.requestedBy ? card.requestedBy : ' ');
+      currentRow.push(card.assignedBy ? card.assignedBy : ' ');
+      let usernames = '';
+      card.members.forEach(memberId => {
+        const user = result.users.find(({ _id }) => _id === memberId);
+        usernames = `${usernames + user.username} `;
+      });
+      currentRow.push(usernames.trim());
+      let assignees = '';
+      card.assignees.forEach(assigneeId => {
+        const user = result.users.find(({ _id }) => _id === assigneeId);
+        assignees = `${assignees + user.username} `;
+      });
+      currentRow.push(assignees.trim());
+      let labels = '';
+      card.labelIds.forEach(labelId => {
+        const label = result.labels.find(({ _id }) => _id === labelId);
+        labels = `${labels + label.name}-${label.color} `;
+      });
+      currentRow.push(labels.trim());
+      currentRow.push(card.startAt ? moment(card.startAt).format('LLLL') : ' ');
+      currentRow.push(card.dueAt ? moment(card.dueAt).format('LLLL') : ' ');
+      currentRow.push(card.endAt ? moment(card.endAt).format('LLLL') : ' ');
+      currentRow.push(card.isOvertime ? 'true' : 'false');
+      currentRow.push(card.spentTime);
+      currentRow.push(
+        card.createdAt ? moment(card.createdAt).format('LLLL') : ' ',
+      );
+      currentRow.push(
+        card.modifiedAt ? moment(card.modifiedAt).format('LLLL') : ' ',
+      );
+      currentRow.push(
+        card.dateLastActivity
+          ? moment(card.dateLastActivity).format('LLLL')
+          : ' ',
+      );
+      if (card.vote.question) {
+        let positiveVoters = '';
+        let negativeVoters = '';
+        card.vote.positive.forEach(userId => {
+          const user = result.users.find(({ _id }) => _id === userId);
+          positiveVoters = `${positiveVoters + user.username} `;
+        });
+        card.vote.negative.forEach(userId => {
+          const user = result.users.find(({ _id }) => _id === userId);
+          negativeVoters = `${negativeVoters + user.username} `;
+        });
+        const votingResult = `${
+          card.vote.public
+            ? `yes-${
+                card.vote.positive.length
+              }-${positiveVoters.trimRight()}-no-${
+                card.vote.negative.length
+              }-${negativeVoters.trimRight()}`
+            : `yes-${card.vote.positive.length}-no-${card.vote.negative.length}`
+        }`;
+        currentRow.push(`${card.vote.question}-${votingResult}`);
+      } else {
+        currentRow.push(' ');
+      }
+      currentRow.push(card.archived ? 'true' : 'false');
+      stringifier.write(currentRow);
+    });
+    stringifier.end();
+    return cardRows;
+  }
+
+  canExport(user) {
+    const board = Boards.findOne(this._boardId);
+    return board && board.isVisibleBy(user);
+  }
+}

+ 8 - 2
models/import.js

@@ -1,22 +1,28 @@
 import { TrelloCreator } from './trelloCreator';
 import { WekanCreator } from './wekanCreator';
-import { Exporter } from './export';
+import { CsvCreator } from './csvCreator';
+import { Exporter } from './exporter';
 import wekanMembersMapper from './wekanmapper';
 
 Meteor.methods({
   importBoard(board, data, importSource, currentBoard) {
-    check(board, Object);
     check(data, Object);
     check(importSource, String);
     check(currentBoard, Match.Maybe(String));
     let creator;
     switch (importSource) {
       case 'trello':
+        check(board, Object);
         creator = new TrelloCreator(data);
         break;
       case 'wekan':
+        check(board, Object);
         creator = new WekanCreator(data);
         break;
+      case 'csv':
+        check(board, Array);
+        creator = new CsvCreator(data);
+        break;
     }
 
     // 1. check all parameters are ok from a syntax point of view

+ 10 - 0
package-lock.json

@@ -1033,6 +1033,11 @@
       "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz",
       "integrity": "sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4="
     },
+    "csv-stringify": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.5.0.tgz",
+      "integrity": "sha512-G05575DSO/9vFzQxZN+Srh30cNyHk0SM0ePyiTChMD5WVt7GMTVPBQf4rtgMF6mqhNCJUPw4pN8LDe8MF9EYOA=="
+    },
     "dashdash": {
       "version": "1.14.1",
       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -3864,6 +3869,11 @@
         "path-to-regexp": "~1.2.1"
       }
     },
+    "papaparse": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.2.0.tgz",
+      "integrity": "sha512-ylq1wgUSnagU+MKQtNeVqrPhZuMYBvOSL00DHycFTCxownF95gpLAk1HiHdUW77N8yxRq1qHXLdlIPyBSG9NSA=="
+    },
     "parent-module": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",

+ 2 - 0
package.json

@@ -62,6 +62,7 @@
     "bcrypt": "^3.0.7",
     "bson": "^4.0.3",
     "bunyan": "^1.8.12",
+    "csv-stringify": "^5.5.0",
     "es6-promise": "^4.2.4",
     "flatted": "^2.0.1",
     "gridfs-stream": "^0.5.3",
@@ -70,6 +71,7 @@
     "mongodb": "^3.5.7",
     "os": "^0.1.1",
     "page": "^1.11.5",
+    "papaparse": "^5.2.0",
     "qs": "^6.9.4",
     "source-map-support": "^0.5.19",
     "xss": "^1.0.6"