summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLauri Ojansivu <x@xet7.org>2017-07-19 21:20:40 +0300
committerLauri Ojansivu <x@xet7.org>2017-07-19 21:20:40 +0300
commit57f9c1df69c61fc0d2921f89309df9262935356d (patch)
tree9c2a77164560a45edf196972b2a066f975329263
parent52619ef622a4257001516cb63acd66af02832ff4 (diff)
parentf3f15f83b0a85ee3bf0c74b7a66d0dff43d678db (diff)
downloadwekan-57f9c1df69c61fc0d2921f89309df9262935356d.tar.gz
wekan-57f9c1df69c61fc0d2921f89309df9262935356d.tar.bz2
wekan-57f9c1df69c61fc0d2921f89309df9262935356d.zip
Merge branch 'GhassenRjab-attachment-base64' into devel
Export and import attachments as base64 encoded files. Thanks to GhassenRjab ! Update translations.
-rw-r--r--CHANGELOG.md8
-rw-r--r--client/components/import/import.js4
-rw-r--r--i18n/ar.i18n.json100
-rw-r--r--i18n/eu.i18n.json14
-rw-r--r--i18n/fr.i18n.json14
-rw-r--r--i18n/he.i18n.json22
-rw-r--r--i18n/it.i18n.json18
-rw-r--r--i18n/ru.i18n.json54
-rw-r--r--i18n/tr.i18n.json30
-rw-r--r--models/export.js24
-rw-r--r--models/wekanCreator.js51
11 files changed, 192 insertions, 147 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 35dad66e..4d9acf35 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,11 @@
+# Upcoming Wekan release
+
+This release adds the following new features:
+
+* [Export and import attachments as base64 encoded files](https://github.com/wekan/wekan/pull/1134);
+
+Thanks to GitHub user GhassenRjab for contributions.
+
# v0.28 2017-07-15 Wekan release
SECURITY ISSUE [Files accessible without authentication](https://github.com/wekan/wekan/issues/1105)
diff --git a/client/components/import/import.js b/client/components/import/import.js
index d02637d6..d72a02dd 100644
--- a/client/components/import/import.js
+++ b/client/components/import/import.js
@@ -3,7 +3,7 @@ import wekanMembersMapper from './wekanMembersMapper';
BlazeComponent.extendComponent({
title() {
- return `import-board-title-${Session.get('importSource')}!`;
+ return `import-board-title-${Session.get('importSource')}`;
},
}).register('importHeaderBar');
@@ -103,7 +103,7 @@ BlazeComponent.extendComponent({
},
instruction() {
- return `import-board-instruction-${Session.get('importSource')}!`;
+ return `import-board-instruction-${Session.get('importSource')}`;
},
events() {
diff --git a/i18n/ar.i18n.json b/i18n/ar.i18n.json
index b93533b3..08cbd579 100644
--- a/i18n/ar.i18n.json
+++ b/i18n/ar.i18n.json
@@ -1,5 +1,5 @@
{
- "accept": "اقبل",
+ "accept": "اقبلboard",
"act-activity-notify": "[Wekan] اشعار عن نشاط",
"act-addAttachment": "ربط __attachment__ الى __card__",
"act-addComment": "علق على __comment__ : __card__",
@@ -39,7 +39,7 @@
"activity-checklist-added": "أضاف قائمة تحقق إلى %s",
"add": "أضف",
"add-attachment": "إضافة مرفق",
- "add-board": "إضافة طاولة",
+ "add-board": "إضافة لوحة",
"add-card": "إضافة بطاقة",
"add-checklist": "إضافة قائمة تدقيق",
"add-checklist-item": "إضافة عنصر إلى قائمة التحقق",
@@ -55,18 +55,18 @@
"and-n-other-card": "And __count__ other بطاقة",
"and-n-other-card_plural": "And __count__ other بطاقات",
"apply": "طبق",
- "app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.",
- "archive": "أرشف",
- "archive-all": "أرشف الكل",
- "archive-board": "أرشف اللوحة",
- "archive-card": "أرشف البطاقة",
- "archive-list": "Archive List",
+ "app-is-offline": "يتمّ تحميل ويكان، يرجى الانتظار. سيؤدي تحديث الصفحة إلى فقدان البيانات. إذا لم يتم تحميل ويكان، يرجى التحقق من أن خادم ويكان لم يتوقف. ",
+ "archive": "أرشيف",
+ "archive-all": "أرشيف الكل",
+ "archive-board": "أرشيف اللوحة",
+ "archive-card": "أرشيف البطاقة",
+ "archive-list": "قائمة الأرشيفات",
"archive-selection": "أرشف المُحدّد",
- "archiveBoardPopup-title": "Archive Board?",
- "archived-items": "عناصر في الأرشيف",
- "archived-boards": "Archived Boards",
- "restore-board": "Restore Board",
- "no-archived-boards": "No Archived Boards.",
+ "archiveBoardPopup-title": "أرشيف اللوحة ؟",
+ "archived-items": "عناصر مؤرشفة",
+ "archived-boards": "لوحات مؤرشفة",
+ "restore-board": "استعادة اللوحة",
+ "no-archived-boards": "لا توجد لوحات مؤرشفة.",
"archives": "أرشيفات",
"assign-member": "تعيين عضو",
"attached": "أُرفق)",
@@ -74,8 +74,8 @@
"attachment-delete-pop": "حذف المرق هو حذف نهائي . لا يمكن التراجع إذا حذف.",
"attachmentDeletePopup-title": "تريد حذف المرفق ?",
"attachments": "المرفقات",
- "auto-watch": "Automatically watch boards when they are created",
- "avatar-too-big": "The avatar is too large (70KB max)",
+ "auto-watch": "مراقبة لوحات تلقائيا عندما يتم إنشاؤها",
+ "avatar-too-big": "الصورة الرمزية كبيرة جدا (70 كيلوبايت كحد أقصى)",
"back": "رجوع",
"board-change-color": "تغيير اللومr",
"board-nb-stars": "%s نجوم",
@@ -85,7 +85,7 @@
"boardChangeColorPopup-title": "تعديل خلفية الشاشة",
"boardChangeTitlePopup-title": "إعادة تسمية اللوحة",
"boardChangeVisibilityPopup-title": "تعديل وضوح الرؤية",
- "boardChangeWatchPopup-title": "Change Watch",
+ "boardChangeWatchPopup-title": "تغيير المتابعة",
"boardMenuPopup-title": "قائمة اللوحة",
"boards": "لوحات",
"bucket-example": "مثل « todo list » على سبيل المثال",
@@ -95,15 +95,15 @@
"card-delete-notice": "هذا حذف أبديّ . سوف تفقد كل الإجراءات المنوطة بهذه البطاقة",
"card-delete-pop": "سيتم إزالة جميع الإجراءات من تبعات النشاط، وأنك لن تكون قادرا على إعادة فتح البطاقة. لا يوجد التراجع.",
"card-delete-suggest-archive": "يمكنك أرشفة بطاقة لحذفها من اللوحة والمحافظة على النشاط.",
- "card-due": "Due",
- "card-due-on": "Due on",
+ "card-due": "مستحق",
+ "card-due-on": "مستحق في",
"card-edit-attachments": "تعديل المرفقات",
"card-edit-labels": "تعديل العلامات",
"card-edit-members": "تعديل الأعضاء",
"card-labels-title": "تعديل علامات البطاقة.",
"card-members-title": "إضافة او حذف أعضاء للبطاقة.",
- "card-start": "Start",
- "card-start-on": "Starts on",
+ "card-start": "بداية",
+ "card-start-on": "يبدأ في",
"cardAttachmentsPopup-title": "إرفاق من",
"cardDeletePopup-title": "حذف البطاقة ?",
"cardDetailsActionsPopup-title": "إجراءات على البطاقة",
@@ -115,13 +115,13 @@
"change-avatar": "تعديل الصورة الشخصية",
"change-password": "تغيير كلمة المرور",
"change-permissions": "تعديل الصلاحيات",
- "change-settings": "Change Settings",
+ "change-settings": "تغيير الاعدادات",
"changeAvatarPopup-title": "تعديل الصورة الشخصية",
"changeLanguagePopup-title": "تغيير اللغة",
"changePasswordPopup-title": "تغيير كلمة المرور",
"changePermissionsPopup-title": "تعديل الصلاحيات",
- "changeSettingsPopup-title": "Change Settings",
- "checklists": "Checklists",
+ "changeSettingsPopup-title": "تغيير الاعدادات",
+ "checklists": "قوائم التّدقيق",
"click-to-star": "اضغط لإضافة اللوحة للمفضلة.",
"click-to-unstar": "اضغط لحذف اللوحة من المفضلة.",
"clipboard": "Clipboard or drag & drop",
@@ -139,16 +139,16 @@
"color-sky": "sky",
"color-yellow": "yellow",
"comment": "تعليق",
- "comment-placeholder": "Write Comment",
- "comment-only": "Comment only",
- "comment-only-desc": "Can comment on cards only.",
+ "comment-placeholder": "أكتب تعليق",
+ "comment-only": "التعليق فقط",
+ "comment-only-desc": "يمكن التعليق على بطاقات فقط.",
"computer": "حاسوب",
"create": "إنشاء",
"createBoardPopup-title": "إنشاء لوحة",
- "chooseBoardSourcePopup-title": "Import board",
+ "chooseBoardSourcePopup-title": "استيراد لوحة",
"createLabelPopup-title": "إنشاء علامة",
"current": "الحالي",
- "date": "Date",
+ "date": "تاريخ",
"decline": "Decline",
"default-avatar": "صورة شخصية افتراضية",
"delete": "حذف",
@@ -162,10 +162,10 @@
"edit": "تعديل",
"edit-avatar": "تعديل الصورة الشخصية",
"edit-profile": "تعديل الملف الشخصي",
- "editCardStartDatePopup-title": "Change start date",
- "editCardDueDatePopup-title": "Change due date",
+ "editCardStartDatePopup-title": "تغيير تاريخ البدء",
+ "editCardDueDatePopup-title": "تغيير تاريخ الاستحقاق",
"editLabelPopup-title": "تعديل العلامة",
- "editNotificationPopup-title": "Edit Notification",
+ "editNotificationPopup-title": "تصحيح الإشعار",
"editProfilePopup-title": "تعديل الملف الشخصي",
"email": "البريد الإلكتروني",
"email-enrollAccount-subject": "An account created for you on __siteName__",
@@ -187,40 +187,40 @@
"error-json-schema": "Your JSON data does not include the proper information in the correct format",
"error-list-doesNotExist": "This list does not exist",
"error-user-doesNotExist": "This user does not exist",
- "error-user-notAllowSelf": "You can not invite yourself",
+ "error-user-notAllowSelf": "لا يمكنك دعوة نفسك",
"error-user-notCreated": "This user is not created",
- "error-username-taken": "This username is already taken",
+ "error-username-taken": "إسم المستخدم مأخوذ مسبقا",
"export-board": "Export board",
"filter": "تصفية",
"filter-cards": "تصفية البطاقات",
"filter-clear": "مسح التصفية",
- "filter-no-label": "No label",
- "filter-no-member": "No member",
+ "filter-no-label": "لا يوجد ملصق",
+ "filter-no-member": "ليس هناك أي عضو",
"filter-on": "التصفية تشتغل",
"filter-on-desc": "أنت بصدد تصفية بطاقات هذه اللوحة. اضغط هنا لتعديل التصفية.",
"filter-to-selection": "تصفية بالتحديد",
"fullname": "الإسم الكامل",
"header-logo-title": "الرجوع إلى صفحة اللوحات",
- "hide-system-messages": "Hide system messages",
+ "hide-system-messages": "إخفاء رسائل النظام",
"headerBarCreateBoardPopup-title": "إنشاء لوحة",
"home": "الرئيسية",
"import": "Import",
- "import-board": "import board",
+ "import-board": "استيراد لوحة",
"import-board-title-trello": "Import board from Trello",
- "import-board-title-wekan": "Import board from Wekan",
- "from-trello": "From Trello",
- "from-wekan": "From Wekan",
+ "import-board-title-wekan": "استيراد لوحة من ويكان",
+ "from-trello": "من تريلو",
+ "from-wekan": "من ويكان",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text",
- "import-board-instruction-wekan": "In your Wekan board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
+ "import-board-instruction-wekan": "في لوحة ويكان الخاصة بك، انتقل إلى 'القائمة'، ثم 'تصدير اللوحة'، ونسخ النص في الملف الذي تم تنزيله.",
"import-json-placeholder": "Paste your valid JSON data here",
- "import-map-members": "Map members",
+ "import-map-members": "رسم خريطة الأعضاء",
"import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users",
"import-show-user-mapping": "Review members mapping",
"import-user-select": "Pick the Wekan user you want to use as this member",
- "importMapMembersAddPopup-title": "Select Wekan member",
+ "importMapMembersAddPopup-title": "حدّد عضو ويكان",
"info": "معلومات",
"initials": "أولية",
- "invalid-date": "Invalid date",
+ "invalid-date": "تاريخ غير صالح",
"joined": "انضمّ",
"just-invited": "You are just invited to this board",
"keyboard-shortcuts": "اختصار لوحة المفاتيح",
@@ -239,9 +239,9 @@
"listActionPopup-title": "قائمة الإجراءات",
"listImportCardPopup-title": "Import a Trello card",
"listMorePopup-title": "المزيد",
- "link-list": "Link to this list",
+ "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.",
- "list-delete-suggest-archive": "You can archive a list to remove it from the board and preserve the activity.",
+ "list-delete-suggest-archive": "يمكنك أرشفة قائمة لحذفها من اللوحة والمحافظة على النشاط.",
"lists": "القائمات",
"log-out": "تسجيل الخروج",
"log-in": "تسجيل الدخول",
@@ -260,8 +260,8 @@
"muted-info": "You will never be notified of any changes in this board",
"my-boards": "لوحاتي",
"name": "اسم",
- "no-archived-cards": "لا يوجد بطاقة في الأرشيف.",
- "no-archived-lists": "لا يوجد قائمة في الأرشيف.",
+ "no-archived-cards": "لا توجد بطاقات مؤرشفة.",
+ "no-archived-lists": "لا توجد قوائم مؤرشفة.",
"no-results": "لا توجد نتائج",
"normal": "عادي",
"normal-desc": "يمكن مشاهدة و تعديل البطاقات. لا يمكن تغيير إعدادات الضبط.",
@@ -334,7 +334,7 @@
"watch": "Watch",
"watching": "Watching",
"watching-info": "You will be notified of any change in this board",
- "welcome-board": "Welcome Board",
+ "welcome-board": "لوحة التّرحيب",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
"what-to-do": "ماذا تريد أن تنجز?",
@@ -345,7 +345,7 @@
"disable-self-registration": "Disable Self-Registration",
"invite": "Invite",
"invite-people": "Invite People",
- "to-boards": "To board(s)",
+ "to-boards": "إلى اللوحات",
"email-addresses": "Email Addresses",
"smtp-host-description": "The address of the SMTP server that handles your emails.",
"smtp-port-description": "The port your SMTP server uses for outgoing emails.",
diff --git a/i18n/eu.i18n.json b/i18n/eu.i18n.json
index 9c3905c1..2f9342d4 100644
--- a/i18n/eu.i18n.json
+++ b/i18n/eu.i18n.json
@@ -55,7 +55,7 @@
"and-n-other-card": "Eta beste txartel __count__",
"and-n-other-card_plural": "Eta beste __count__ txartel",
"apply": "Aplikatu",
- "app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.",
+ "app-is-offline": "Wekan kargatzen ari da, itxaron mesedez. Orria freskatzeak datuen galera ekarriko luke. Wekan kargatzen ez bada, egiaztatu Wekan zerbitzaria gelditu ez dela.",
"archive": "Artxibatu",
"archive-all": "Artxibatu guztiak",
"archive-board": "Artxibatu arbela",
@@ -145,7 +145,7 @@
"computer": "Ordenagailua",
"create": "Sortu",
"createBoardPopup-title": "Sortu arbela",
- "chooseBoardSourcePopup-title": "Import board",
+ "chooseBoardSourcePopup-title": "Inportatu arbela",
"createLabelPopup-title": "Sortu etiketa",
"current": "unekoa",
"date": "Data",
@@ -205,13 +205,13 @@
"headerBarCreateBoardPopup-title": "Sortu arbela",
"home": "Hasiera",
"import": "Inportatu",
- "import-board": "import board",
+ "import-board": "inportatu arbela",
"import-board-title-trello": "Inportatu arbela Trellotik",
- "import-board-title-wekan": "Import board from Wekan",
- "from-trello": "From Trello",
- "from-wekan": "From Wekan",
+ "import-board-title-wekan": "Inportatu arbela Wekanetik",
+ "from-trello": "Trellotik",
+ "from-wekan": "Wekanetik",
"import-board-instruction-trello": "Zure Trello arbelean, aukeratu 'Menu\", 'More', 'Print and Export', 'Export JSON', eta kopiatu jasotako testua hemen.",
- "import-board-instruction-wekan": "In your Wekan board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
+ "import-board-instruction-wekan": "Zure Wekan arbelean, aukeratu 'Menua' - 'Esportatu arbela', eta kopiatu testua deskargatutako fitxategian.",
"import-json-placeholder": "Isatsi baliozko JSON datuak hemen",
"import-map-members": "Kideen mapa",
"import-members-map": "Inportatu duzun arbela kide batzuk ditu, mesedez lotu inportatu nahi dituzun kideak Wekan erabiltzaileekin",
diff --git a/i18n/fr.i18n.json b/i18n/fr.i18n.json
index db2f4c1c..dc323c8b 100644
--- a/i18n/fr.i18n.json
+++ b/i18n/fr.i18n.json
@@ -55,7 +55,7 @@
"and-n-other-card": "Et __count__ autre carte",
"and-n-other-card_plural": "Et __count__ autres cartes",
"apply": "Appliquer",
- "app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.",
+ "app-is-offline": "Chargement en cours de Wekan. Veuillez patienter. Vous risquez de perdre des données si vous recharger la page. Si Wekan ne se charge pas, veuillez vérifier si le serveur Wekan est arrêté.",
"archive": "Archiver",
"archive-all": "Tout archiver",
"archive-board": "Archiver le tableau",
@@ -145,7 +145,7 @@
"computer": "Ordinateur",
"create": "Créer",
"createBoardPopup-title": "Créer un tableau",
- "chooseBoardSourcePopup-title": "Import board",
+ "chooseBoardSourcePopup-title": "Importer un tableau",
"createLabelPopup-title": "Créer une étiquette",
"current": "actuel",
"date": "Date",
@@ -205,13 +205,13 @@
"headerBarCreateBoardPopup-title": "Créer un tableau",
"home": "Accueil",
"import": "Importer",
- "import-board": "import board",
+ "import-board": "importer un tableau",
"import-board-title-trello": "Importer le tableau depuis Trello",
- "import-board-title-wekan": "Import board from Wekan",
- "from-trello": "From Trello",
- "from-wekan": "From Wekan",
+ "import-board-title-wekan": "Importer un tableau depuis Wekan",
+ "from-trello": "Depuis Trello",
+ "from-wekan": "Depuis Wekan",
"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-wekan": "In your Wekan board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
+ "import-board-instruction-wekan": "Dans votre tableau Wekan, allez dans 'Menu', puis 'Exporter un tableau', et copier le texte du fichier téléchargé.",
"import-json-placeholder": "Collez ici les données JSON valides",
"import-map-members": "Faire correspondre aux membres",
"import-members-map": "Le tableau que vous venez d'importer contient des membres. Veuillez associer les membres que vous souhaitez importer à des utilisateurs de Wekan.",
diff --git a/i18n/he.i18n.json b/i18n/he.i18n.json
index 97260eb5..8893f26d 100644
--- a/i18n/he.i18n.json
+++ b/i18n/he.i18n.json
@@ -36,7 +36,7 @@
"activity-removed": "%s הוסר מ%s",
"activity-sent": "%s נשלח ל%s",
"activity-unjoined": "בטל צירוף %s",
- "activity-checklist-added": "נוספה רשימת משימות ל%s",
+ "activity-checklist-added": "נוספה רשימת משימות אל %s",
"add": "הוספה",
"add-attachment": "הוספת קובץ מצורף",
"add-board": "הוספת לוח",
@@ -55,7 +55,7 @@
"and-n-other-card": "וכרטיס אחר",
"and-n-other-card_plural": "ו־__count__ כרטיסים אחרים",
"apply": "החלה",
- "app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.",
+ "app-is-offline": "Wekan בטעינה, נא להמתין. רענון העמוד עשוי להוביל לאובדן מידע. אם הטעינה של Wekan נעצרה, נא לבדוק ששרת ה־Wekan לא נעצר.",
"archive": "להעביר לארכיון",
"archive-all": "להעביר הכול לארכיון",
"archive-board": "להעביר לוח לארכיון",
@@ -145,7 +145,7 @@
"computer": "מחשב",
"create": "יצירה",
"createBoardPopup-title": "יצירת לוח",
- "chooseBoardSourcePopup-title": "Import board",
+ "chooseBoardSourcePopup-title": "יבוא לוח",
"createLabelPopup-title": "יצירת תווית",
"current": "נוכחי",
"date": "תאריך",
@@ -204,14 +204,14 @@
"hide-system-messages": "הסתרת הודעות מערכת",
"headerBarCreateBoardPopup-title": "יצירת לוח",
"home": "בית",
- "import": "ייבוא",
- "import-board": "import board",
+ "import": "יבוא",
+ "import-board": "יבוא לוח",
"import-board-title-trello": "ייבוא לוח מטרלו",
- "import-board-title-wekan": "Import board from Wekan",
- "from-trello": "From Trello",
- "from-wekan": "From Wekan",
- "import-board-instruction-trello": "בלוח הטרלו שלך, עליך ללחוץ על 'Menu', ואז על 'More',‏ 'Print and Export',‏ 'Export JSON' ולהעתיק את הטקסט שנוצר.",
- "import-board-instruction-wekan": "In your Wekan board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
+ "import-board-title-wekan": "יבוא לוח מ־Wekan",
+ "from-trello": "מ־Trello",
+ "from-wekan": "מ־Wekan",
+ "import-board-instruction-trello": "בלוח הטרלו שלך, עליך ללחוץ על ‚תפריט‘, ואז על ‚עוד‘, ‚הדפסה וייצוא‘, ‚יצוא JSON‘ ולהעתיק את הטקסט שנוצר.",
+ "import-board-instruction-wekan": "בלוח ה־Wekan, יש לגשת אל ‚תפריט‘, לאחר מכן ‚יצוא לוח‘ ולהעתיק את הטקסט בקובץ שהתקבל.",
"import-json-placeholder": "יש להדביק את נתוני ה־JSON התקינים לכאן",
"import-map-members": "מיפוי חברים",
"import-members-map": "הלוחות המיובאים שלך מכילים חברים. נא למפות את החברים שברצונך לייבא למשתמשי Wekan",
@@ -237,7 +237,7 @@
"list-move-cards": "העברת כל הכרטיסים שברשימה זו",
"list-select-cards": "בחירת כל הכרטיסים שברשימה זו",
"listActionPopup-title": "פעולות רשימה",
- "listImportCardPopup-title": "ייבוא כרטיס מטרלו",
+ "listImportCardPopup-title": "יבוא כרטיס מ־Trello",
"listMorePopup-title": "עוד",
"link-list": "קישור לרשימה זו",
"list-delete-pop": "כל הפעולות תוסרנה מרצף הפעילות ולא תהיה לך אפשרות לשחזר את הרשימה. אין ביטול.",
diff --git a/i18n/it.i18n.json b/i18n/it.i18n.json
index c6006bd2..35acbdd7 100644
--- a/i18n/it.i18n.json
+++ b/i18n/it.i18n.json
@@ -55,7 +55,7 @@
"and-n-other-card": "E __count__ altra scheda",
"and-n-other-card_plural": "E __count__ altre schede",
"apply": "Applica",
- "app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.",
+ "app-is-offline": "Wekan è in caricamento, attendi per favore. Ricaricare la pagina causerà una perdita di dati. Se Wekan non si carica, controlla per favore che non ci siano problemi al server.",
"archive": "Archivia",
"archive-all": "Archivia tutto",
"archive-board": "Archivia bacheca",
@@ -145,7 +145,7 @@
"computer": "Computer",
"create": "Crea",
"createBoardPopup-title": "Crea bacheca",
- "chooseBoardSourcePopup-title": "Import board",
+ "chooseBoardSourcePopup-title": "Importa bacheca",
"createLabelPopup-title": "Crea etichetta",
"current": "corrente",
"date": "Data",
@@ -205,13 +205,13 @@
"headerBarCreateBoardPopup-title": "Crea bacheca",
"home": "Home",
"import": "Importa",
- "import-board": "import board",
+ "import-board": "Importa bacheca",
"import-board-title-trello": "Importa una bacheca da Trello",
- "import-board-title-wekan": "Import board from Wekan",
- "from-trello": "From Trello",
- "from-wekan": "From Wekan",
+ "import-board-title-wekan": "Importa bacheca da Wekan",
+ "from-trello": "Da Trello",
+ "from-wekan": "Da Wekan",
"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-wekan": "In your Wekan board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
+ "import-board-instruction-wekan": "Nella tua bacheca Wekan, vai su 'Menu', poi 'Esporta bacheca', e copia il testo nel file scaricato.",
"import-json-placeholder": "Incolla un JSON valido qui",
"import-map-members": "Mappatura dei membri",
"import-members-map": "La bacheca che hai importato ha alcuni membri. Per favore scegli i membri che vuoi vengano importati negli utenti di Wekan",
@@ -361,6 +361,6 @@
"email-invite-register-text": "Gentile __user__,\n\n__inviter__ ti ha invitato su Wekan per collaborare.\n\nPer favore segui il link qui sotto:\n__url__\n\nIl tuo codice d'invito è: __icode__\n\nGrazie.",
"error-invitation-code-not-exist": "Il codice d'invito non esiste",
"error-notAuthorized": "Non sei autorizzato ad accedere a questa pagina.",
- "outgoing-webhooks": "Outgoing Webhooks",
- "outgoingWebhooksPopup-title": "Outgoing Webhooks"
+ "outgoing-webhooks": "Server esterni",
+ "outgoingWebhooksPopup-title": "Server esterni"
} \ No newline at end of file
diff --git a/i18n/ru.i18n.json b/i18n/ru.i18n.json
index 65a7cdbc..260f0dcc 100644
--- a/i18n/ru.i18n.json
+++ b/i18n/ru.i18n.json
@@ -38,14 +38,14 @@
"activity-unjoined": "вышел из %s",
"activity-checklist-added": "добавлен список в %s",
"add": "Создать",
- "add-attachment": "Add Attachment",
- "add-board": "Add Board",
- "add-card": "Add Card",
- "add-checklist": "Add Checklist",
+ "add-attachment": "Добавить вложение",
+ "add-board": "Добавить доску",
+ "add-card": "Добавить карту",
+ "add-checklist": "Добавить список",
"add-checklist-item": "Добавить елемент в список",
"add-cover": "Прикрепить",
- "add-label": "Add Label",
- "add-list": "Add List",
+ "add-label": "Добавить метку",
+ "add-list": "Добавить простой список",
"add-members": "Добавить пользователя",
"added": "Добавлено",
"addMemberPopup-title": "Участники",
@@ -55,18 +55,18 @@
"and-n-other-card": "И __count__ другая карточка",
"and-n-other-card_plural": "И __count__ другие карточки",
"apply": "Применить",
- "app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.",
+ "app-is-offline": "Wekan загружается, пожалуйста подождите. Обновление страницы может привести к потере данных. Если Wekan не загрузился, пожалуйста проверьте что связь с сервером доступна.",
"archive": "Архивировать",
"archive-all": "Архивировать все",
"archive-board": "Архивировать доску",
"archive-card": "Архивировать карточку",
- "archive-list": "Archive List",
+ "archive-list": "Архивировать список",
"archive-selection": "Архивировать выбранное",
"archiveBoardPopup-title": "Заархивировать доску?",
"archived-items": "Объекты в архиве",
- "archived-boards": "Archived Boards",
- "restore-board": "Restore Board",
- "no-archived-boards": "No Archived Boards.",
+ "archived-boards": "Архивировать доску",
+ "restore-board": "Востановить доску",
+ "no-archived-boards": "Нет архивных досок.",
"archives": "Архивы",
"assign-member": "Пригласить пользователя",
"attached": "прикреплено",
@@ -139,13 +139,13 @@
"color-sky": "голубой",
"color-yellow": "желтый",
"comment": "Отправить",
- "comment-placeholder": "Write Comment",
+ "comment-placeholder": "Написать комментарий",
"comment-only": "Только комментирование",
"comment-only-desc": "Может комментировать только карточки.",
"computer": "Загрузить с компьютера",
"create": "Создать",
"createBoardPopup-title": "Создать доску",
- "chooseBoardSourcePopup-title": "Import board",
+ "chooseBoardSourcePopup-title": "Импортировать доску",
"createLabelPopup-title": "Создать метку",
"current": "Текущий",
"date": "Дата",
@@ -205,13 +205,13 @@
"headerBarCreateBoardPopup-title": "Создать доску",
"home": "Главная",
"import": "Импорт",
- "import-board": "import board",
+ "import-board": "импортировать доску",
"import-board-title-trello": "Импортировать доску из Trello",
- "import-board-title-wekan": "Import board from Wekan",
- "from-trello": "From Trello",
- "from-wekan": "From Wekan",
+ "import-board-title-wekan": "Импортировать доску с Wekan",
+ "from-trello": "Из Trello",
+ "from-wekan": "Их Wekan",
"import-board-instruction-trello": "На вашей Trello доске нажмите “Menu” - “More” - “Print and export - “Export JSON” и скопируйте полученный текст",
- "import-board-instruction-wekan": "In your Wekan board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
+ "import-board-instruction-wekan": "На вашей Wekan доске, перейдите в “Меню”, далее “Экспортировать доску” и скопируйте текст из файла",
"import-json-placeholder": "Вставьте JSON сюда",
"import-map-members": "Карта пользователей",
"import-members-map": "Вы ипортировали доску с пользователями. Пожалуйста, составьте карту пользователей, которых вы хотите импортировать в Wekan пользователей",
@@ -239,9 +239,9 @@
"listActionPopup-title": "Список действий",
"listImportCardPopup-title": "Импортировать Trello карточку",
"listMorePopup-title": "Поделиться",
- "link-list": "Link to this list",
- "list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
- "list-delete-suggest-archive": "You can archive a list to remove it from the board and preserve the activity.",
+ "link-list": "Ссылка на список",
+ "list-delete-pop": "Все действия будут удалены из ленты активности и вы не сможете заново открыть список. Действие необратимо.",
+ "list-delete-suggest-archive": "Вы можете заархивировать список, чтобы удалить его с доски и сохранить активность.",
"lists": "Списки",
"log-out": "Выйти",
"log-in": "Войти",
@@ -286,8 +286,8 @@
"quick-access-description": "Нажмите на звезду, что добавить ярлык доски на панель.",
"remove-cover": "Открепить",
"remove-from-board": "Удалить с доски",
- "remove-label": "Remove Label",
- "listDeletePopup-title": "Delete List ?",
+ "remove-label": "Удалить метку",
+ "listDeletePopup-title": "Удалить список?",
"remove-member": "Удалить участника",
"remove-member-from-card": "Удалить из карточки",
"remove-member-pop": "Удалить участника __name__ (__username__) из доски __boardTitle__? Участник будет удален из всех карточек. Также он получит уведомление о совершаемом действии.",
@@ -297,7 +297,7 @@
"restore": "Восстановить",
"save": "Сохранить",
"search": "Поиск",
- "select-color": "Select Color",
+ "select-color": "Выбрать цвет",
"shortcut-assign-self": "Связать себя с текущей карточкой",
"shortcut-autocomplete-emoji": "Автозаполнение emoji",
"shortcut-autocomplete-members": "Автозаполнение пользователей",
@@ -360,7 +360,7 @@
"email-invite-register-subject": "__inviter__ прислал вам приглашение",
"email-invite-register-text": "Уважаемый __user__,\n\n__inviter__ приглашает вас в Wekan для сотрудничества.\n\nПожалуйста, проследуйте по ссылке:\n__url__\n\nВаш код приглашения: __icode__\n\nСпасибо.",
"error-invitation-code-not-exist": "Код приглашения не существует",
- "error-notAuthorized": "You are not authorized to view this page.",
- "outgoing-webhooks": "Outgoing Webhooks",
- "outgoingWebhooksPopup-title": "Outgoing Webhooks"
+ "error-notAuthorized": "У вас нет доступа на просмотр этой страницы.",
+ "outgoing-webhooks": "Исходящие Веб-хуки",
+ "outgoingWebhooksPopup-title": "Исходящие Веб-хуки"
} \ No newline at end of file
diff --git a/i18n/tr.i18n.json b/i18n/tr.i18n.json
index e2d4ed42..f678a4d0 100644
--- a/i18n/tr.i18n.json
+++ b/i18n/tr.i18n.json
@@ -2,7 +2,7 @@
"accept": "Kabul Et",
"act-activity-notify": "[Wekan] Etkinlik Bildirimi",
"act-addAttachment": "__card__ kartına __attachment__ dosyasını ekledi",
- "act-addComment": "__card__ kartına bir yorum bırakıt: __comment__",
+ "act-addComment": "__card__ kartına bir yorum bıraktı: __comment__",
"act-createBoard": "__board__ panosunu oluşturdu",
"act-createCard": "__card__ kartını ___list__ listesine ekledi.",
"act-createList": "__list__ listesini __board__ panosuna ekledi",
@@ -21,7 +21,7 @@
"act-withBoardTitle": "[Wekan] __board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "İşlemler",
- "activities": "Aktiviteler",
+ "activities": "Etkinlikler",
"activity": "Etkinlik",
"activity-added": "%s içine %s ekledi",
"activity-archived": "%s arşivledi",
@@ -55,7 +55,7 @@
"and-n-other-card": "Ve __count__ diğer kart",
"and-n-other-card_plural": "Ve __count__ diğer kart",
"apply": "Uygula",
- "app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.",
+ "app-is-offline": "Wekan yükleniyor, lütfen bekleyin. Sayfayı yenilemek veri kaybına sebep olabilir. Eğer Wekan yüklenmezse, lütfen Wekan sunucusunun çalıştığından emin olun.",
"archive": "Arşivle",
"archive-all": "Tümünü Arşivle",
"archive-board": "Panoyu Arşivle",
@@ -74,7 +74,7 @@
"attachment-delete-pop": "Ek silme işlemi kalıcıdır ve geri alınamaz.",
"attachmentDeletePopup-title": "Ek Silinsin Mi?",
"attachments": "Ekler",
- "auto-watch": "Automatically watch boards when they are created",
+ "auto-watch": "Oluşan yeni panoları kendiliğinden izlemeye al",
"avatar-too-big": "Avatar boyutu çok büyük (En fazla 70KB olabilir)",
"back": "Geri",
"board-change-color": "Renk değiştir",
@@ -145,7 +145,7 @@
"computer": "Bilgisayar",
"create": "Oluştur",
"createBoardPopup-title": "Pano Oluşturma",
- "chooseBoardSourcePopup-title": "Import board",
+ "chooseBoardSourcePopup-title": "Panoyu içe aktar",
"createLabelPopup-title": "Etiket Oluşturma",
"current": "mevcut",
"date": "Tarih",
@@ -207,9 +207,9 @@
"import": "İçeri aktar",
"import-board": "import board",
"import-board-title-trello": "Trello'dan panoyu içeri aktar",
- "import-board-title-wekan": "Import board from Wekan",
- "from-trello": "From Trello",
- "from-wekan": "From Wekan",
+ "import-board-title-wekan": "Wekan'dan panoyu içe aktar",
+ "from-trello": "Trello'dan",
+ "from-wekan": "Wekan'dan",
"import-board-instruction-trello": "Trello panonuzda, 'Menü'ye gidip, ardıdan, 'daha fazlası' na tıklayın, 'Yazdır ve Çıktı al' sayfasından 'JSON biçiminde çıktı al' diyip, çıkan metni buraya kopyalayın.",
"import-board-instruction-wekan": "In your Wekan board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
"import-json-placeholder": "Geçerli JSON verisini buraya yapıştırın",
@@ -239,7 +239,7 @@
"listActionPopup-title": "Liste İşlemleri",
"listImportCardPopup-title": "Bir Trello kartını içeri aktar",
"listMorePopup-title": "Daha",
- "link-list": "Link to this list",
+ "link-list": "Listeye doğrudan bağlantı",
"list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
"list-delete-suggest-archive": "You can archive a list to remove it from the board and preserve the activity.",
"lists": "Listeler",
@@ -286,8 +286,8 @@
"quick-access-description": "Bu bara kısayol olarak bir pano eklemek için panoyu yıldızlamalısınız",
"remove-cover": "Kapak resmini kaldır",
"remove-from-board": "Panodan kaldır",
- "remove-label": "Remove Label",
- "listDeletePopup-title": "Delete List ?",
+ "remove-label": "Etiketi Kaldır",
+ "listDeletePopup-title": "Liste silinsin mi?",
"remove-member": "Üyeyi Çıkar",
"remove-member-from-card": "Karttan Çıkar",
"remove-member-pop": "__boardTitle__ panosundan __name__ (__username__) çıkarılsın mı? Üye, bu panodaki tüm kartlardan çıkarılacak ve bir bildirim alacak.",
@@ -297,7 +297,7 @@
"restore": "Geri yükleme",
"save": "Kaydet",
"search": "Arama",
- "select-color": "Select Color",
+ "select-color": "Renk Seç",
"shortcut-assign-self": "Kendini karta ekle",
"shortcut-autocomplete-emoji": "Otomatik tamamlayan emoji yüz ifadeleri",
"shortcut-autocomplete-members": "Otomatik tamamlayan üye isimleri",
@@ -354,13 +354,13 @@
"smtp-port": "SMTP portu",
"smtp-username": "Kullanıcı adı",
"smtp-password": "Parola",
- "smtp-tls": "TLS kriptolama desteği",
+ "smtp-tls": "TLS desteği",
"send-from": "Gönderen",
"invitation-code": "Davetiye kodu",
"email-invite-register-subject": "__inviter__ size bir davetiye gönderdi",
- "email-invite-register-text": "Sevgili __user__,\n\n__inviter__ Sizi koordine çalışabilmek için Wekan'a davet etti.\n\nLütfen aşağıdaki linke tıklayın:\n__url__\n\nDavetiye kodunuz: __icode__\n\nTeşekkürler.",
+ "email-invite-register-text": "Sevgili __user__,\n\n__inviter__ sizi beraber çalışabilmek için Wekan'a davet etti.\n\nLütfen aşağıdaki linke tıklayın:\n__url__\n\nDavetiye kodunuz: __icode__\n\nTeşekkürler.",
"error-invitation-code-not-exist": "Davetiye kodu bulunamadı",
- "error-notAuthorized": "You are not authorized to view this page.",
+ "error-notAuthorized": "Bu sayfayı görmek için yetkiniz yok.",
"outgoing-webhooks": "Outgoing Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks"
} \ No newline at end of file
diff --git a/models/export.js b/models/export.js
index 7b22f45d..7243cf24 100644
--- a/models/export.js
+++ b/models/export.js
@@ -55,12 +55,32 @@ class Exporter {
result.cards = Cards.find(byBoard, noBoardId).fetch();
result.comments = CardComments.find(byBoard, noBoardId).fetch();
result.activities = Activities.find(byBoard, noBoardId).fetch();
- // for attachments we only export IDs and absolute url to original doc
+ // [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 = new Buffer(0);
+ // callback has the form function (err, res) {}
+ const readStream = doc.createReadStream();
+ readStream.on('data', function(chunk) {
+ buffer = Buffer.concat([buffer, chunk]);
+ });
+ readStream.on('error', function(err) {
+ callback(err, null);
+ });
+ readStream.on('end', function() {
+ // done
+ callback(null, buffer.toString('base64'));
+ });
+ };
+ const getBase64DataSync = Meteor.wrapAsync(getBase64Data);
result.attachments = Attachments.find(byBoard).fetch().map((attachment) => {
return {
_id: attachment._id,
cardId: attachment.cardId,
- url: FlowRouter.url(attachment.url()),
+ // url: FlowRouter.url(attachment.url()),
+ file: getBase64DataSync(attachment),
+ name: attachment.original.name,
+ type: attachment.original.type,
};
});
diff --git a/models/wekanCreator.js b/models/wekanCreator.js
index b91b875a..723c5c67 100644
--- a/models/wekanCreator.js
+++ b/models/wekanCreator.js
@@ -96,7 +96,6 @@ export class WekanCreator {
archived: Boolean,
dateLastActivity: DateString,
labelIds: [String],
- members: [String],
title: String,
sort: Number,
})]);
@@ -107,7 +106,6 @@ export class WekanCreator {
// XXX refine control by validating 'color' against a list of allowed
// values (is it worth the maintenance?)
color: String,
- name: String,
})]);
}
@@ -303,21 +301,40 @@ export class WekanCreator {
// - the template then tries to display the url to the attachment which causes other errors
// so we make it server only, and let UI catch up once it is done, forget about latency comp.
if(Meteor.isServer) {
- file.attachData(att.url, function (error) {
- file.boardId = boardId;
- file.cardId = cardId;
- if (error) {
- throw(error);
- } else {
- const wekanAtt = Attachments.insert(file, () => {
- // we do nothing
- });
- //
- if(wekanCoverId === att._id) {
- Cards.direct.update(cardId, { $set: {coverId: wekanAtt._id}});
+ if (att.url) {
+ file.attachData(att.url, function (error) {
+ file.boardId = boardId;
+ file.cardId = cardId;
+ if (error) {
+ throw(error);
+ } else {
+ const wekanAtt = Attachments.insert(file, () => {
+ // we do nothing
+ });
+ //
+ if(wekanCoverId === att._id) {
+ Cards.direct.update(cardId, { $set: {coverId: wekanAtt._id}});
+ }
}
- }
- });
+ });
+ } else if (att.file) {
+ file.attachData(new Buffer(att.file, 'base64'), {type: att.type}, (error) => {
+ file.name(att.name);
+ file.boardId = boardId;
+ file.cardId = cardId;
+ if (error) {
+ throw(error);
+ } else {
+ const wekanAtt = Attachments.insert(file, () => {
+ // we do nothing
+ });
+ //
+ if(wekanCoverId === att._id) {
+ Cards.direct.update(cardId, { $set: {coverId: wekanAtt._id}});
+ }
+ }
+ });
+ }
}
// todo XXX set cover - if need be
});
@@ -406,7 +423,7 @@ export class WekanCreator {
const wekanAttachment = wekanBoard.attachments.filter((attachment) => {
return attachment._id === activity.attachmentId;
})[0];
- if(wekanAttachment.url) {
+ if(wekanAttachment.url || wekanAttachment.file) {
// we cannot actually create the Wekan attachment, because we don't yet
// have the cards to attach it to, so we store it in the instance variable.
const wekanCardId = activity.cardId;