Browse Source

Merge branch 'feature-custom-fields' of https://github.com/feuerball11/wekan into feature-custom-fields

IgnatzHome 7 years ago
parent
commit
a433f7d9fe
76 changed files with 3081 additions and 444 deletions
  1. 8 6
      .github/ISSUE_TEMPLATE.md
  2. 99 1
      CHANGELOG.md
  3. 4 0
      CONTRIBUTING.md
  4. 0 5
      Contributing.md
  5. 9 6
      Dockerfile
  6. 1 0
      README.md
  7. 129 0
      SECURITY.md
  8. 12 4
      client/components/boards/boardArchive.jade
  9. 12 0
      client/components/boards/boardArchive.js
  10. 2 0
      client/components/boards/boardBody.js
  11. 6 0
      client/components/boards/boardHeader.js
  12. 8 6
      client/components/cards/cardDate.js
  13. 46 2
      client/components/cards/cardDetails.jade
  14. 41 1
      client/components/cards/cardDetails.js
  15. 2 1
      client/components/cards/cardDetails.styl
  16. 53 1
      client/components/cards/labels.styl
  17. 22 1
      client/components/cards/minicard.jade
  18. 7 0
      client/components/cards/minicard.styl
  19. 2 2
      client/components/sidebar/sidebarCustomFields.jade
  20. 19 0
      client/components/sidebar/sidebarFilters.jade
  21. 10 0
      client/components/sidebar/sidebarFilters.js
  22. 315 10
      client/lib/filter.js
  23. 1 1
      docker-compose.yml
  24. 33 2
      i18n/ar.i18n.json
  25. 130 99
      i18n/bg.i18n.json
  26. 33 2
      i18n/br.i18n.json
  27. 33 2
      i18n/ca.i18n.json
  28. 32 1
      i18n/cs.i18n.json
  29. 37 6
      i18n/de.i18n.json
  30. 33 2
      i18n/el.i18n.json
  31. 33 2
      i18n/en-GB.i18n.json
  32. 11 2
      i18n/en.i18n.json
  33. 33 2
      i18n/eo.i18n.json
  34. 32 1
      i18n/es-AR.i18n.json
  35. 34 3
      i18n/es.i18n.json
  36. 33 2
      i18n/eu.i18n.json
  37. 52 21
      i18n/fa.i18n.json
  38. 32 1
      i18n/fi.i18n.json
  39. 32 1
      i18n/fr.i18n.json
  40. 33 2
      i18n/gl.i18n.json
  41. 32 1
      i18n/he.i18n.json
  42. 49 18
      i18n/hu.i18n.json
  43. 33 2
      i18n/hy.i18n.json
  44. 33 2
      i18n/id.i18n.json
  45. 33 2
      i18n/ig.i18n.json
  46. 36 5
      i18n/it.i18n.json
  47. 33 2
      i18n/ja.i18n.json
  48. 478 0
      i18n/km.i18n.json
  49. 33 2
      i18n/ko.i18n.json
  50. 33 2
      i18n/lv.i18n.json
  51. 33 2
      i18n/mn.i18n.json
  52. 33 2
      i18n/nb.i18n.json
  53. 33 2
      i18n/nl.i18n.json
  54. 33 2
      i18n/pl.i18n.json
  55. 70 39
      i18n/pt-BR.i18n.json
  56. 33 2
      i18n/pt.i18n.json
  57. 33 2
      i18n/ro.i18n.json
  58. 34 3
      i18n/ru.i18n.json
  59. 33 2
      i18n/sr.i18n.json
  60. 54 23
      i18n/sv.i18n.json
  61. 33 2
      i18n/ta.i18n.json
  62. 33 2
      i18n/th.i18n.json
  63. 33 2
      i18n/tr.i18n.json
  64. 33 2
      i18n/uk.i18n.json
  65. 33 2
      i18n/vi.i18n.json
  66. 32 1
      i18n/zh-CN.i18n.json
  67. 33 2
      i18n/zh-TW.i18n.json
  68. 79 79
      models/attachments.js
  69. 3 0
      models/boards.js
  70. 34 3
      models/cards.js
  71. 2 3
      package.json
  72. 2 2
      sandstorm-pkgdef.capnp
  73. 5 5
      sandstorm.js
  74. 40 13
      server/migrations.js
  75. 23 5
      server/publications/people.js
  76. 17 8
      snapcraft.yaml

+ 8 - 6
.github/ISSUE_TEMPLATE.md

@@ -2,15 +2,17 @@
 
 **Server Setup Information**:
 
+* Did you test in newest Wekan?:
+* Wekan version:
+* If this is about old version of Wekan, what upgrade problem you have?:
 * Operating System:
-* Deployment Method(snap/sandstorm/mongodb bundle):
-* Http frontend (Caddy, Nginx, Apache, see config examples from Wekan GitHub wiki first):
+* Deployment Method(snap/docker/sandstorm/mongodb bundle/source):
+* Http frontend if any (Caddy, Nginx, Apache, see config examples from Wekan GitHub wiki first):
 * Node Version:
 * MongoDB Version:
 * ROOT_URL environment variable http(s)://(subdomain).example.com(/suburl):
 
 **Problem description**:
-- *be as explicit as you can*
-- *describe the problem and its symptoms*
-- *explain how to reproduce*
-- *attach whatever information that can help understanding the context (screen capture, log files in .zip file)*
+- *REQUIRED: Add recorded animated gif about how it works currently, and screenshot mockups how it should work*
+- *Explain steps how to reproduce*
+- *Attach log files in .zip file)*

+ 99 - 1
CHANGELOG.md

@@ -1,3 +1,101 @@
+# v1.04 2018-06-12 Wekan release
+
+This release adds the following new features:
+
+* [Add Khmer language](https://github.com/wekan/wekan/commit/2156e458690d0dc34a761a48fd7fa3b54af79031);
+* [Change label text colour to black for specific label colours for better
+   visibility](https://github.com/wekan/wekan/pull/1689).
+
+and fixes the following bugs:
+
+* [SECURITY FIX: Do not publish all of people collection. This bug has probably been present
+   since addition of Admin Panel](https://github.com/wekan/wekan/commit/dda49d2f07f9c50d5d57acfd5c7eee6492f93b33);
+* [Modify card covers/mini-cards so that: 1) received date is shown unless there is a start date
+   2) due date is shown, unless there is an end date](https://github.com/wekan/wekan/pull/1685).
+
+Thanks to GitHub users rjevnikar and xet7 for their contributions.
+Thanks to Adrian Genaid for security fix, he's now added to [Hall of Fame](https://wekan.github.io/hall-of-fame/).
+Thanks to translators.
+
+# v1.03 2018-06-08 Wekan release
+
+This release adds the following new features:
+
+* [Update to newest Sandstorm fork of Node.js that includes performance
+   etc fixes](https://github.com/wekan/wekan/commit/90d55777f7298d243ed0de03c934cea239a31272);
+* [Additional label colors. Assigned By and Requested By text fields
+   on card. Delete board from Recycle Bin](https://github.com/wekan/wekan/pull/1679).
+
+and possibly fixes the following bugs, please test:
+
+* [Try to fix: Missing board-view-lists Field after DB updated to
+   Wekan 1.02](https://github.com/wekan/wekan/issues/1675).
+
+Thanks to GitHub users JamesLavin, rjevnikar and xet7 for their contributions.
+
+# v1.02 2018-05-26 Wekan release
+
+This release fixes the following bugs:
+
+* [Remove binary version of bcrypt](https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac)
+  because of [vulnerability](https://nodesecurity.io/advisories/612) that has [issue that is not fixed
+  yet](https://github.com/kelektiv/node.bcrypt.js/issues/604)
+  and [not yet merged pull request](https://github.com/kelektiv/node.bcrypt.js/pull/606).
+  This may cause some slowdown;
+* [Snap: Filtering out swap file created at build time, adding stage package](https://github.com/wekan/wekan/pull/1660);
+* [Fix Received Date and End Date on Cards](https://github.com/wekan/wekan/issues/1654).
+
+Thanks to GitHub users kubiko, xadagaras and xet7 for their contributions.
+
+# v1.01 2018-05-23 Wekan release
+
+This release possibly fixes the following bugs, please test:
+
+* [Possible quickfix for all customFields Import errors, please test](https://github.com/wekan/wekan/pull/1653).
+
+Thanks to GitHub users feuerball11 and xet7 for their contributions.
+
+# v1.00 2018-05-21 Wekan release
+
+This release fixes the following bugs:
+
+* [Typo in English translation: brakets to brackets](https://github.com/wekan/wekan/issues/1647).
+
+Thanks to GitHub user yarons for contributions.
+
+# v0.99 2018-05-21 Wekan release
+
+This release adds the following new features:
+
+* [Advanced Filter for Custom Fields](https://github.com/wekan/wekan/pull/1646).
+
+Thanks to GitHub users feuerball11 and xet7 for their contributions.
+
+# v0.98 2018-05-19 Wekan release
+
+This release adds the following new features:
+
+* [Filtering by Custom Field](https://github.com/wekan/wekan/pull/1645);
+* Update to NPM 6.0.1 and MongoDB 3.2.20.
+
+Thanks to GitHub users feuerball11 and xet7 for their contributions.
+
+# v0.97 2018-05-19 Wekan release
+
+Updated translations.
+
+# v0.96 2018-05-19 Wekan release
+
+This release adds the following new features:
+
+* [Custom Fields](https://github.com/wekan/wekan/issues/807). Note: Import/Export is not implemented yet.
+
+and fixes the following bugs:
+
+* [Fix: checklistItems broken after upgrade](https://github.com/wekan/wekan/issues/1636).
+
+Thanks to GitHub users feuerball11, franksiler, papoola and xet7 for their contributions.
+
 # v0.95 2018-05-08 Wekan release
 
 This release adds the following new features:
@@ -6,7 +104,7 @@ This release adds the following new features:
 * [Add a new API route to create a new label in a given board](https://github.com/wekan/wekan/pull/1630);
 * [Admin Panel: Option to block username change](https://github.com/wekan/wekan/pull/1627).
 
-and fixed the following bugs:
+and fixes the following bugs:
 
 * [Error: title is required](https://github.com/wekan/wekan/issues/1576).
     

+ 4 - 0
CONTRIBUTING.md

@@ -0,0 +1,4 @@
+To get started, [please sign the Contributor License Agreement](https://www.clahub.com/agreements/wekan/wekan).
+
+[Then, please read documentation at wiki](https://github.com/wekan/wekan/wiki).
+

+ 0 - 5
Contributing.md

@@ -1,5 +0,0 @@
-# Contributing
-
-Please see wiki for all documentation:
-
-<https://github.com/wekan/wekan/wiki>

+ 9 - 6
Dockerfile

@@ -19,7 +19,7 @@ ENV NODE_VERSION ${NODE_VERSION:-v8.11.1}
 ENV METEOR_RELEASE ${METEOR_RELEASE:-1.6.0.1}
 ENV USE_EDGE ${USE_EDGE:-false}
 ENV METEOR_EDGE ${METEOR_EDGE:-1.5-beta.17}
-ENV NPM_VERSION ${NPM_VERSION:-5.5.1}
+ENV NPM_VERSION ${NPM_VERSION:-latest}
 ENV FIBERS_VERSION ${FIBERS_VERSION:-2.0.0}
 ENV ARCHITECTURE ${ARCHITECTURE:-linux-x64}
 ENV SRC_PATH ${SRC_PATH:-./}
@@ -49,7 +49,7 @@ RUN \
     # Description at https://releases.wekan.team/node.txt
     # SHA256SUM: 18c99d5e79e2fe91e75157a31be30e5420787213684d4048eb91e602e092725d
     wget https://releases.wekan.team/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
-    echo "c85ed210a360c50d55baaf7b49419236e5241515ed21410d716f4c1f5deedb12  node-v8.11.1-linux-x64.tar.gz" >> SHASUMS256.txt.asc && \
+    echo "509e79f1bfccc849b65bd3f207a56095dfa608f17502997e844fa9c9d01e6c20  node-v8.11.1-linux-x64.tar.gz" >> SHASUMS256.txt.asc && \
     \
     # Verify nodejs authenticity
     grep ${NODE_VERSION}-${ARCHITECTURE}.tar.gz SHASUMS256.txt.asc | shasum -a 256 -c - && \
@@ -125,12 +125,15 @@ RUN \
     gosu wekan:wekan /home/wekan/.meteor/meteor build --directory /home/wekan/app_build && \
     cp /home/wekan/app/fix-download-unicode/cfs_access-point.txt /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
     chown wekan:wekan /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
-    cd /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt && \
-    gosu wekan:wekan rm -rf node_modules/bcrypt && \
-    gosu wekan:wekan npm install bcrypt && \
+    #Removed binary version of bcrypt because of security vulnerability that is not fixed yet.
+    #https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac
+    #https://github.com/wekan/wekan/commit/7eeabf14be3c63fae2226e561ef8a0c1390c8d3c
+    #cd /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt && \
+    #gosu wekan:wekan rm -rf node_modules/bcrypt && \
+    #gosu wekan:wekan npm install bcrypt && \
     cd /home/wekan/app_build/bundle/programs/server/ && \
     gosu wekan:wekan npm install && \
-    gosu wekan:wekan npm install bcrypt && \
+    #gosu wekan:wekan npm install bcrypt && \
     mv /home/wekan/app_build/bundle /build && \
     \
     # Cleanup

+ 1 - 0
README.md

@@ -14,6 +14,7 @@
 [![Code Climate](https://codeclimate.com/github/wekan/wekan/badges/gpa.svg "Code Climate")](https://codeclimate.com/github/wekan/wekan)
 [![Project Dependencies](https://david-dm.org/wekan/wekan.svg "Project Dependencies")](https://david-dm.org/wekan/wekan)
 [![Code analysis at Open Hub](https://img.shields.io/badge/code%20analysis-at%20Open%20Hub-brightgreen.svg "Code analysis at Open Hub")](https://www.openhub.net/p/wekan)
+[![Greenkeeper badge](https://badges.greenkeeper.io/wekan/wekan.svg)](https://greenkeeper.io/)
 
 Please read [FAQ](https://github.com/wekan/wekan/wiki/FAQ).
 Please don't feed the trolls and spammers that are mentioned in the FAQ :)

+ 129 - 0
SECURITY.md

@@ -0,0 +1,129 @@
+Security is very important to us. If discover any issue regarding security, please disclose
+the information responsibly by sending an email to security (at) wekan.team and not by
+creating a GitHub issue. We will respond swiftly to fix verifiable security issues.
+
+We thank you with a place at our hall of fame page, that is
+at https://wekan.github.io/hall-of-fame . Others have just posted public GitHub issue,
+so they are not at that hall-of-fame page.
+
+## How should reports be formatted?
+
+```
+Name: %name
+Twitter: %twitter
+Bug type: %bugtype
+Domain: %domain
+Severity: %severity
+URL: %url
+PoC: %poc
+CVSS (optional): %cvss
+CWSS (optional): %cwss
+```
+
+## Who can participate in the program
+
+Anyone who reports a unique security issue in scope and does not disclose it to
+a third party before we have patched and updated may be upon their approval
+added to the Wekan Hall of Fame.
+
+## Which domains are in scope?
+
+No any public domains, because all those are donated to Wekan Open Source project,
+and we don't have any permissions to do security scans on those donated servers.
+
+Please don't perform research that could impact other users. Secondly, please keep
+the reports short and succinct. If we fail to understand the logics of your bug, we will tell you.
+
+You can [Install Wekan](https://github.com/wekan/wekan/releases) to your own computer
+and scan it's vulnerabilities there.
+
+## About Wekan versions
+
+There is only 2 versions of Wekan: Standalone Wekan, and Sandstorm Wekan.
+
+### Standalone Wekan Security
+
+Standalone Wekan includes all non-Sandstorm platforms. Some Standalone Wekan platforms
+like Snap and Docker have their own specific sandboxing etc features.
+
+Standalone Wekan by default does not load any files from Internet, like fonts, CSS, etc.
+This also means all Standalone Wekan functionality works in offline local networks.
+Wekan is used by companies that have [thousands of users](https://github.com/wekan/wekan/wiki/AWS) and at healthcare.
+
+Wekan uses xss package for input fields like cards, as you can see from
+[package.json](https://github.com/wekan/wekan/blob/devel/package.json). Other used versions can be seen from
+[Meteor versions file](https://github.com/wekan/wekan/blob/devel/.meteor/versions).
+Forms can include markdown links, html, image tags etc like you see at https://wekan.github.io .
+It's possible to add attachments to cards, and markdown/html links to files.
+
+Wekan attachments are not accessible without logging in. Import from Trello works by copying
+Trello export JSON to Wekan Trello import page, and in Trello JSON file there is direct links to all publicly
+accessible Trello attachment files, that Standalone Wekan downloads directly to Wekan MongoDB database in
+[CollectionFS](https://github.com/wekan/wekan/pull/875) format. When Wekan board is exported in
+Wekan JSON format, all board attachments are included in Wekan JSON file as base64 encoded text.
+That Wekan JSON format file can be imported to Sandstorm Wekan with all the attachments, when we get
+latest Wekan version working on Sandstorm, only couple of bugs are left before that. In Sandstorm it's not
+possible yet to import from Trello with attachments, because Wekan does not implement Sandstorm-compatible
+access to outside of Wekan grain.
+
+Standalone Wekan only has password auth currently, there is work in progress to add
+[oauth2](https://github.com/wekan/wekan/pull/1578), [Openid](https://github.com/wekan/wekan/issues/538),
+[LDAP](https://github.com/wekan/wekan/issues/119) etc. If you need more login security for Standalone Wekan now,
+it's possible add additional [Google Auth proxybouncer](https://github.com/wekan/wekan/wiki/Let's-Encrypt-and-Google-Auth) in front of password auth, and then use Google Authenticator for Google Auth. Standalone Wekan does have [brute force protection with eluck:accounts-lockout and browser-policy clickjacking protection](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md#v080-2018-04-04-wekan-release). You can also optionally use some [WAF](https://en.wikipedia.org/wiki/Web_application_firewall)
+like for example [AWS WAF](https://aws.amazon.com/waf/).
+
+[All Wekan Platforms](https://github.com/wekan/wekan/wiki/Platforms)
+
+### Sandstorm Wekan Security
+
+On Sandstorm platform using environment variable Standalone Wekan features like Admin Panel etc are
+turned off, because Sandstorm platform provides SSO for all apps running on Sandstorm. 
+
+[Sandstorm](https://sandstorm.io) is separate Open Source platform that has been
+[security audited](https://sandstorm.io/news/2017-03-02-security-review) and found bugs fixed.
+Sandstorm also has passwordless login, LDAP, SAML, Google etc auth options already.
+At Sandstorm code is read-only and signed by app maintainers, only grain content can be modified.
+Wekan at Sandstorm runs in sandboxed grain, it does not have access elsewhere without user-visible
+PowerBox request or opening randomly-generated API key URL.
+Also read [Sandstorm Security Practices](https://docs.sandstorm.io/en/latest/using/security-practices/) and
+[Sandstorm Security non-events](https://docs.sandstorm.io/en/latest/using/security-non-events/).
+For Sandstorm specific security issues you can contact [kentonv](https://github.com/kentonv) by email. 
+
+## What Wekan bugs are eligible?
+
+Any typical web security bugs. If any of the previously mentioned is somehow problematic and
+a security issue, we'd like to know about it, and also how to fix it:
+
+- Cross-site Scripting
+- Open redirect
+- Cross-site request forgery
+- File inclusion
+- Authentication bypass
+- Server-side code execution
+
+## What Wekan bugs are NOT eligible?
+
+Typical already known or "no impact" bugs such as:
+
+- Brute force password guessign. Currently there is
+  [brute force protection with eluck:accounts-lockout](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md#v080-2018-04-04-wekan-release).
+- Security issues related to that Wekan uses Meteor 1.6.0.1 related packages, and upgrading to newer
+  Meteor 1.6.1 is complicated process that requires lots of changes to many dependency packages.
+  Upgrading [has been tried many times, spending a lot of time](https://github.com/meteor/meteor/issues/9609)
+  but there still is issues. Helping with package upgrades is very welcome.
+- [Wekan API old tokens not replaced correctly](https://github.com/wekan/wekan/issues/1437)
+- Missing Cookie flags on non-session cookies or 3rd party cookies
+- Logout CSRF
+- Social engineering
+- Denial of service
+- SSL BEAST/CRIME/etc. Wekan does not have SSL built-in, it uses Caddy/Nginx/Apache etc at front.
+  Integrated Caddy support is updated often.
+- Email spoofing, SPF, DMARC & DKIM. Wekan does not include email server.
+
+Wekan is Open Source with MIT license, and free to use also for commercial use.
+We welcome all fixes to improve security by email to security (at) wekan.team .
+
+## Bonus Points
+
+If your Responsible Security Disclosure includes code for fixing security issue,
+you get bonus points, as seen on [Hall of Fame](https://wekan.github.io/hall-of-fame).

+ 12 - 4
client/components/boards/boardArchive.jade

@@ -6,9 +6,17 @@ template(name="archivedBoards")
   ul.archived-lists
     each archivedBoards
       li.archived-lists-item
-        button.js-restore-board
-          i.fa.fa-undo
-          | {{_ 'restore-board'}}
-        = title
+        div.board-header-btns
+          button.board-header-btn.js-delete-board
+            i.fa.fa-trash-o
+            | {{_ 'delete-board'}}
+          button.board-header-btn.js-restore-board
+            i.fa.fa-undo
+            | {{_ 'restore-board'}}
+          = title
     else
       li.no-items-message {{_ 'no-archived-boards'}}
+
+template(name="boardDeletePopup")
+  p {{_ 'delete-board-confirm-popup'}}
+  button.js-confirm.negate.full(type="submit") {{_ 'delete'}}

+ 12 - 0
client/components/boards/boardArchive.js

@@ -29,6 +29,18 @@ BlazeComponent.extendComponent({
         board.restore();
         Utils.goBoardId(board._id);
       },
+      'click .js-delete-board': Popup.afterConfirm('boardDelete', function() {
+        Popup.close();
+        const isSandstorm = Meteor.settings && Meteor.settings.public &&
+          Meteor.settings.public.sandstorm;
+        if (isSandstorm && Session.get('currentBoard')) {
+          const currentBoard = Boards.findOne(Session.get('currentBoard'));
+          Boards.remove(currentBoard._id);
+        }
+        const board = this.currentData();
+        Boards.remove(board._id);
+        FlowRouter.go('home');
+      }),
     }];
   },
 }).register('archivedBoards');

+ 2 - 0
client/components/boards/boardBody.js

@@ -88,11 +88,13 @@ BlazeComponent.extendComponent({
 
   isViewSwimlanes() {
     const currentUser = Meteor.user();
+    if (!currentUser) return false;
     return (currentUser.profile.boardView === 'board-view-swimlanes');
   },
 
   isViewLists() {
     const currentUser = Meteor.user();
+    if (!currentUser) return true;
     return (currentUser.profile.boardView === 'board-view-lists');
   },
 

+ 6 - 0
client/components/boards/boardHeader.js

@@ -17,6 +17,12 @@ Template.boardMenuPopup.events({
     // confirm that the board was successfully archived.
     FlowRouter.go('home');
   }),
+  'click .js-delete-board': Popup.afterConfirm('deleteBoard', function() {
+    const currentBoard = Boards.findOne(Session.get('currentBoard'));
+    Popup.close();
+    Boards.remove(currentBoard._id);
+    FlowRouter.go('home');
+  }),
   'click .js-outgoing-webhooks': Popup.open('outgoingWebhooks'),
   'click .js-import-board': Popup.open('chooseBoardSource'),
 });

+ 8 - 6
client/components/cards/cardDate.js

@@ -93,7 +93,7 @@ Template.dateBadge.helpers({
 });
 
 // editCardReceivedDatePopup
-(class extends EditCardDate {
+(class extends DatePicker {
   onCreated() {
     super.onCreated();
     this.data().receivedAt && this.date.set(moment(this.data().receivedAt));
@@ -156,7 +156,7 @@ Template.dateBadge.helpers({
 }).register('editCardDueDatePopup');
 
 // editCardEndDatePopup
-(class extends EditCardDate {
+(class extends DatePicker {
   onCreated() {
     super.onCreated();
     this.data().endAt && this.date.set(moment(this.data().endAt));
@@ -279,11 +279,14 @@ class CardDueDate extends CardDate {
 
   classes() {
     let classes = 'due-date' + ' ';
-    if (this.now.get().diff(this.date.get(), 'days') >= 2)
+    if ((this.now.get().diff(this.date.get(), 'days') >= 2) &&
+       (this.date.get().isBefore(this.data().endAt)))
       classes += 'long-overdue';
-    else if (this.now.get().diff(this.date.get(), 'minute') >= 0)
+    else if ((this.now.get().diff(this.date.get(), 'minute') >= 0) &&
+       (this.date.get().isBefore(this.data().endAt)))
       classes += 'due';
-    else if (this.now.get().diff(this.date.get(), 'days') >= -1)
+    else if ((this.now.get().diff(this.date.get(), 'days') >= -1) &&
+       (this.date.get().isBefore(this.data().endAt)))
       classes += 'almost-due';
     return classes;
   }
@@ -355,4 +358,3 @@ CardEndDate.register('cardEndDate');
     return this.date.get().format('l');
   }
 }).register('minicardEndDate');
-

+ 46 - 2
client/components/cards/cardDetails.jade

@@ -108,6 +108,39 @@ template(name="cardDetails")
       +viewer
         = description
 
+    .card-details-items
+      .card-details-item.card-details-item-name
+        h3.card-details-item-title {{_ 'requested-by'}}
+        if canModifyCard
+          +inlinedForm(classNames="js-card-details-requester")
+            +editCardRequesterForm
+          else
+            a.js-open-inlined-form
+              if requestedBy
+                +viewer
+                  = requestedBy
+              else
+                | {{_ 'add'}}
+        else if requestedBy
+          +viewer
+            = requestedBy
+
+      .card-details-item.card-details-item-name
+        h3.card-details-item-title {{_ 'assigned-by'}}
+        if canModifyCard
+          +inlinedForm(classNames="js-card-details-assigner")
+            +editCardAssignerForm
+          else
+            a.js-open-inlined-form
+              if assignedBy
+                +viewer
+                  = assignedBy
+              else
+                | {{_ 'add'}}
+        else if requestedBy
+          +viewer
+            = assignedBy
+
     hr
     +checklists(cardId = _id)
 
@@ -141,6 +174,18 @@ template(name="editCardTitleForm")
     button.primary.confirm.js-submit-edit-card-title-form(type="submit") {{_ 'save'}}
     a.fa.fa-times-thin.js-close-inlined-form
 
+template(name="editCardRequesterForm")
+  input.js-edit-card-requester(type='text' autofocus value=requestedBy)
+  .edit-controls.clearfix
+    button.primary.confirm.js-submit-edit-card-requester-form(type="submit") {{_ 'save'}}
+    a.fa.fa-times-thin.js-close-inlined-form
+
+template(name="editCardAssignerForm")
+  input.js-edit-card-assigner(type='text' autofocus value=assignedBy)
+  .edit-controls.clearfix
+    button.primary.confirm.js-submit-edit-card-assigner-form(type="submit") {{_ 'save'}}
+    a.fa.fa-times-thin.js-close-inlined-form
+
 template(name="cardDetailsActionsPopup")
   ul.pop-over-list
     li: a.js-toggle-watch-card {{#if isWatching}}{{_ 'unwatch'}}{{else}}{{_ 'watch'}}{{/if}}
@@ -150,8 +195,8 @@ template(name="cardDetailsActionsPopup")
       li: a.js-members {{_ 'card-edit-members'}}
       li: a.js-labels {{_ 'card-edit-labels'}}
       li: a.js-attachments {{_ 'card-edit-attachments'}}
-      li: a.js-received-date {{_ 'editCardReceivedDatePopup-title'}}
       li: a.js-custom-fields {{_ 'card-edit-custom-fields'}}
+      li: a.js-received-date {{_ 'editCardReceivedDatePopup-title'}}
       li: a.js-start-date {{_ 'editCardStartDatePopup-title'}}
       li: a.js-due-date {{_ 'editCardDueDatePopup-title'}}
       li: a.js-end-date {{_ 'editCardEndDatePopup-title'}}
@@ -178,7 +223,6 @@ template(name="copyCardPopup")
     = title
   +boardsAndLists
 
-
 template(name="copyChecklistToManyCardsPopup")
   label(for='copy-checklist-cards-title') {{_ 'copyChecklistToManyCardsPopup-instructions'}}:
   textarea#copy-card-title.minicard-composer-textarea.js-card-title(autofocus)

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

@@ -150,6 +150,20 @@ BlazeComponent.extendComponent({
           this.data().setTitle(title);
         }
       },
+      'submit .js-card-details-assigner'(evt) {
+        evt.preventDefault();
+        const assigner = this.currentComponent().getValue().trim();
+        if (assigner) {
+          this.data().setAssignedBy(assigner);
+        }
+      },
+      'submit .js-card-details-requester'(evt) {
+        evt.preventDefault();
+        const requester = this.currentComponent().getValue().trim();
+        if (requester) {
+          this.data().setRequestedBy(requester);
+        }
+      },
       'click .js-member': Popup.open('cardMember'),
       'click .js-add-members': Popup.open('cardMembers'),
       'click .js-add-labels': Popup.open('cardLabels'),
@@ -221,8 +235,8 @@ Template.cardDetailsActionsPopup.events({
   'click .js-members': Popup.open('cardMembers'),
   'click .js-labels': Popup.open('cardLabels'),
   'click .js-attachments': Popup.open('cardAttachments'),
-  'click .js-received-date': Popup.open('editCardReceivedDate'),
   'click .js-custom-fields': Popup.open('cardCustomFields'),
+  'click .js-received-date': Popup.open('editCardReceivedDate'),
   'click .js-start-date': Popup.open('editCardStartDate'),
   'click .js-due-date': Popup.open('editCardDueDate'),
   'click .js-end-date': Popup.open('editCardEndDate'),
@@ -269,6 +283,32 @@ Template.editCardTitleForm.events({
   },
 });
 
+Template.editCardRequesterForm.onRendered(function() {
+  autosize(this.$('.js-edit-card-requester'));
+});
+
+Template.editCardRequesterForm.events({
+  'keydown .js-edit-card-requester'(evt) {
+    // If enter key was pressed, submit the data
+    if (evt.keyCode === 13) {
+      $('.js-submit-edit-card-requester-form').click();
+    }
+  },
+});
+
+Template.editCardAssignerForm.onRendered(function() {
+  autosize(this.$('.js-edit-card-assigner'));
+});
+
+Template.editCardAssignerForm.events({
+  'keydown .js-edit-card-assigner'(evt) {
+    // If enter key was pressed, submit the data
+    if (evt.keyCode === 13) {
+      $('.js-submit-edit-card-assigner-form').click();
+    }
+  },
+});
+
 Template.moveCardPopup.events({
   'click .js-done' () {
     // XXX We should *not* get the currentCard from the global state, but

+ 2 - 1
client/components/cards/cardDetails.styl

@@ -82,7 +82,8 @@
       &.card-details-item-start,
       &.card-details-item-due,
       &.card-details-item-end,
-      &.card-details-item-customfield
+      &.card-details-item-customfield,
+      &.card-details-item-name
         max-width: 50%
         flex-grow: 1
 

+ 53 - 1
client/components/cards/labels.styl

@@ -3,7 +3,7 @@
 // XXX Use .board-widget-labels as a flexbox container
 .card-label
   border-radius: 4px
-  color: white
+  color: white  //Default white text, in select cases,  changed to black to improve contrast between label colour and text
   display: inline-block
   font-weight: 700
   font-size: 13px
@@ -48,9 +48,11 @@
 
 .card-label-yellow
   background-color: #fad900
+  color: #000000 //Black text for better visibility
 
 .card-label-orange
   background-color: #ff9f19
+  color: #000000 //Black text for better visibility
 
 .card-label-red
   background-color: #eb4646
@@ -63,6 +65,7 @@
 
 .card-label-pink
   background-color: #ff78cb
+  color: #000000 //Black text for better visibility
 
 .card-label-sky
   background-color: #00c2e0
@@ -72,6 +75,55 @@
 
 .card-label-lime
   background-color: #51e898
+  color: #000000 //Black text for better visibility
+
+.card-label-silver
+  background-color: #c0c0c0
+  color: #000000 //Black text for better visibility
+
+.card-label-peachpuff
+  background-color: #ffdab9
+  color: #000000 //Black text for better visibility
+
+.card-label-crimson
+  background-color: #dc143c
+
+.card-label-plum
+  background-color: #dda0dd
+  color: #000000 //Black text for better visibility
+
+.card-label-darkgreen
+  background-color: #006400
+
+.card-label-slateblue
+  background-color: #6a5acd
+
+.card-label-magenta
+  background-color: #ff00ff
+
+.card-label-gold
+  background-color: #ffd700
+  color: #000000 //Black text for better visibility
+
+.card-label-navy
+  background-color: #000080
+
+.card-label-gray
+  background-color: #808080
+
+.card-label-saddlebrown
+  background-color: #8b4513
+
+.card-label-paleturquoise
+  background-color: #afeeee
+  color: #000000 //Black text for better visibility
+
+.card-label-mistyrose
+  background-color: #ffe4e1
+  color: #000000 //Black text for better visibility
+
+.card-label-indigo
+  background-color: #4b0082
 
 .edit-label,
 .create-label

+ 22 - 1
client/components/cards/minicard.jade

@@ -10,20 +10,41 @@ template(name="minicard")
       +viewer
         = title
     .dates
+      if receivedAt
+        unless startAt
+          unless dueAt
+            unless endAt
+              .date
+                +miniCardReceivedDate
       if startAt
         .date
           +minicardStartDate
       if dueAt
+        unless endAt
+          .date
+            +minicardDueDate
+      if endAt
         .date
-          +minicardDueDate
+          +minicardEndDate
       if spentTime
         .date
           +cardSpentTime
 
+    .minicard-custom-fields
+      each customFieldsWD
+        if definition.showOnCard
+          .minicard-custom-field
+            .minicard-custom-field-item
+              = definition.name
+            .minicard-custom-field-item
+              +viewer
+                = trueValue
+
     if members
       .minicard-members.js-minicard-members
         each members
           +userAvatar(userId=this)
+
     .badges
       if comments.count
         .badge(title="{{_ 'card-comments-title' comments.count }}")

+ 7 - 0
client/components/cards/minicard.styl

@@ -77,6 +77,13 @@
       height: @width
       border-radius: 2px
       margin-left: 3px
+  .minicard-custom-fields
+    display:block;
+  .minicard-custom-field
+    display:flex;
+  .minicard-custom-field-item
+    max-width:50%;
+    flex-grow:1;
   .minicard-title
     p:last-child
       margin-bottom: 0

+ 2 - 2
client/components/sidebar/sidebarCustomFields.jade

@@ -37,7 +37,7 @@ template(name="createCustomFieldPopup")
             each dropdownItems.get
                 input.js-dropdown-item(type="text" value=name placeholder="")
             input.js-dropdown-item.last(type="text" value="" placeholder="{{_ 'custom-field-dropdown-options-placeholder'}}")
-        a.flex.js-field-show-on-card
+        a.flex.js-field-show-on-card(class="{{#if showOnCard}}is-checked{{/if}}")
             .materialCheckBox(class="{{#if showOnCard}}is-checked{{/if}}")
 
             span {{_ 'show-field-on-card'}}
@@ -49,4 +49,4 @@ template(name="createCustomFieldPopup")
 
 template(name="deleteCustomFieldPopup")
     p {{_ "custom-field-delete-pop"}}
-    button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
+    button.js-confirm.negate.full(type="submit") {{_ 'delete'}}

+ 19 - 0
client/components/sidebar/sidebarFilters.jade

@@ -40,6 +40,25 @@ template(name="filterSidebar")
               | (<span class="username">{{ username }}</span>)
             if Filter.members.isSelected _id
               i.fa.fa-check
+  hr
+  ul.sidebar-list
+    li(class="{{#if Filter.customFields.isSelected undefined}}active{{/if}}")
+          a.name.js-toggle-custom-fields-filter
+            span.sidebar-list-item-description
+              | {{_ 'filter-no-custom-fields'}}
+            if Filter.customFields.isSelected undefined
+              i.fa.fa-check
+    each currentBoard.customFields
+      li(class="{{#if Filter.customFields.isSelected _id}}active{{/if}}")
+        a.name.js-toggle-custom-fields-filter
+          span.sidebar-list-item-description
+            {{ name }}
+          if Filter.customFields.isSelected _id
+              i.fa.fa-check
+  hr
+  span {{_ 'advanced-filter-label'}}
+  input.js-field-advanced-filter(type="text")
+  span {{_ 'advanced-filter-description'}}
   if Filter.isActive
     hr
     a.sidebar-btn.js-clear-all

+ 10 - 0
client/components/sidebar/sidebarFilters.js

@@ -11,6 +11,16 @@ BlazeComponent.extendComponent({
         Filter.members.toggle(this.currentData()._id);
         Filter.resetExceptions();
       },
+      'click .js-toggle-custom-fields-filter'(evt) {
+        evt.preventDefault();
+        Filter.customFields.toggle(this.currentData()._id);
+        Filter.resetExceptions();
+      },
+      'change .js-field-advanced-filter'(evt) {
+        evt.preventDefault();
+        Filter.advanced.set(this.find('.js-field-advanced-filter').value.trim());
+        Filter.resetExceptions();
+      },
       'click .js-clear-all'(evt) {
         evt.preventDefault();
         Filter.reset();

+ 315 - 10
client/lib/filter.js

@@ -10,10 +10,13 @@ function showFilterSidebar() {
 
 // Use a "set" filter for a field that is a set of documents uniquely
 // identified. For instance `{ labels: ['labelA', 'labelC', 'labelD'] }`.
+// use "subField" for searching inside object Fields.
+// For instance '{ 'customFields._id': ['field1','field2']} (subField would be: _id)
 class SetFilter {
-  constructor() {
+  constructor(subField = '') {
     this._dep = new Tracker.Dependency();
     this._selectedElements = [];
+    this.subField = subField;
   }
 
   isSelected(val) {
@@ -76,6 +79,295 @@ class SetFilter {
   }
 }
 
+
+// Advanced filter forms a MongoSelector from a users String.
+// Build by: Ignatz 19.05.2018 (github feuerball11)
+class AdvancedFilter {
+  constructor() {
+    this._dep = new Tracker.Dependency();
+    this._filter = '';
+    this._lastValide = {};
+  }
+
+  set(str) {
+    this._filter = str;
+    this._dep.changed();
+  }
+
+  reset() {
+    this._filter = '';
+    this._lastValide = {};
+    this._dep.changed();
+  }
+
+  _isActive() {
+    this._dep.depend();
+    return this._filter !== '';
+  }
+
+  _filterToCommands() {
+    const commands = [];
+    let current = '';
+    let string = false;
+    let wasString = false;
+    let ignore = false;
+    for (let i = 0; i < this._filter.length; i++) {
+      const char = this._filter.charAt(i);
+      if (ignore) {
+        ignore = false;
+        continue;
+      }
+      if (char === '\'') {
+        string = !string;
+        if (string) wasString = true;
+        continue;
+      }
+      if (char === '\\') {
+        ignore = true;
+        continue;
+      }
+      if (char === ' ' && !string) {
+        commands.push({ 'cmd': current, 'string': wasString });
+        wasString = false;
+        current = '';
+        continue;
+      }
+      current += char;
+    }
+    if (current !== '') {
+      commands.push({ 'cmd': current, 'string': wasString });
+    }
+    return commands;
+  }
+
+  _fieldNameToId(field) {
+    const found = CustomFields.findOne({ 'name': field });
+    return found._id;
+  }
+
+  _fieldValueToId(field, value)
+  {
+    const found = CustomFields.findOne({ 'name': field });
+    if (found.settings.dropdownItems && found.settings.dropdownItems.length > 0)
+      {
+      for (let i = 0; i < found.settings.dropdownItems.length; i++)
+        {
+        if (found.settings.dropdownItems[i].name === value)
+          {
+          return found.settings.dropdownItems[i]._id;
+        }
+      }
+    }
+    return value;
+  }
+
+  _arrayToSelector(commands) {
+    try {
+      //let changed = false;
+      this._processSubCommands(commands);
+    }
+    catch (e) { return this._lastValide; }
+    this._lastValide = { $or: commands };
+    return { $or: commands };
+  }
+
+  _processSubCommands(commands) {
+    const subcommands = [];
+    let level = 0;
+    let start = -1;
+    for (let i = 0; i < commands.length; i++) {
+      if (commands[i].cmd) {
+        switch (commands[i].cmd) {
+        case '(':
+          {
+            level++;
+            if (start === -1) start = i;
+            continue;
+          }
+        case ')':
+          {
+            level--;
+            commands.splice(i, 1);
+            i--;
+            continue;
+          }
+        default:
+          {
+            if (level > 0) {
+              subcommands.push(commands[i]);
+              commands.splice(i, 1);
+              i--;
+              continue;
+            }
+          }
+        }
+      }
+    }
+    if (start !== -1) {
+      this._processSubCommands(subcommands);
+      if (subcommands.length === 1)
+        commands.splice(start, 0, subcommands[0]);
+      else
+        commands.splice(start, 0, subcommands);
+    }
+    this._processConditions(commands);
+    this._processLogicalOperators(commands);
+  }
+
+  _processConditions(commands) {
+    for (let i = 0; i < commands.length; i++) {
+      if (!commands[i].string && commands[i].cmd) {
+        switch (commands[i].cmd) {
+        case '=':
+        case '==':
+        case '===':
+          {
+            const field = commands[i - 1].cmd;
+            const str = commands[i + 1].cmd;
+            commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': {$in: [this._fieldValueToId(field, str), parseInt(str, 10)]} };
+            commands.splice(i - 1, 1);
+            commands.splice(i, 1);
+          //changed = true;
+            i--;
+            break;
+          }
+        case '!=':
+        case '!==':
+          {
+            const field = commands[i - 1].cmd;
+            const str = commands[i + 1].cmd;
+            commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $not: {$in: [this._fieldValueToId(field, str), parseInt(str, 10)]} } };
+            commands.splice(i - 1, 1);
+            commands.splice(i, 1);
+          //changed = true;
+            i--;
+            break;
+          }
+        case '>':
+        case 'gt':
+        case 'Gt':
+        case 'GT':
+          {
+            const field = commands[i - 1].cmd;
+            const str = commands[i + 1].cmd;
+            commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $gt: parseInt(str, 10) } };
+            commands.splice(i - 1, 1);
+            commands.splice(i, 1);
+          //changed = true;
+            i--;
+            break;
+          }
+        case '>=':
+        case '>==':
+        case 'gte':
+        case 'Gte':
+        case 'GTE':
+          {
+            const field = commands[i - 1].cmd;
+            const str = commands[i + 1].cmd;
+            commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $gte:  parseInt(str, 10) } };
+            commands.splice(i - 1, 1);
+            commands.splice(i, 1);
+          //changed = true;
+            i--;
+            break;
+          }
+        case '<':
+        case 'lt':
+        case 'Lt':
+        case 'LT':
+          {
+            const field = commands[i - 1].cmd;
+            const str = commands[i + 1].cmd;
+            commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $lt:  parseInt(str, 10) } };
+            commands.splice(i - 1, 1);
+            commands.splice(i, 1);
+          //changed = true;
+            i--;
+            break;
+          }
+        case '<=':
+        case '<==':
+        case 'lte':
+        case 'Lte':
+        case 'LTE':
+          {
+            const field = commands[i - 1].cmd;
+            const str = commands[i + 1].cmd;
+            commands[i] = { 'customFields._id': this._fieldNameToId(field), 'customFields.value': { $lte:  parseInt(str, 10) } };
+            commands.splice(i - 1, 1);
+            commands.splice(i, 1);
+          //changed = true;
+            i--;
+            break;
+          }
+
+        }
+      }
+    }
+  }
+
+  _processLogicalOperators(commands) {
+    for (let i = 0; i < commands.length; i++) {
+      if (!commands[i].string && commands[i].cmd) {
+        switch (commands[i].cmd) {
+        case 'or':
+        case 'Or':
+        case 'OR':
+        case '|':
+        case '||':
+          {
+            const op1 = commands[i - 1];
+            const op2 = commands[i + 1];
+            commands[i] = { $or: [op1, op2] };
+            commands.splice(i - 1, 1);
+            commands.splice(i, 1);
+          //changed = true;
+            i--;
+            break;
+          }
+        case 'and':
+        case 'And':
+        case 'AND':
+        case '&':
+        case '&&':
+          {
+            const op1 = commands[i - 1];
+            const op2 = commands[i + 1];
+            commands[i] = { $and: [op1, op2] };
+            commands.splice(i - 1, 1);
+            commands.splice(i, 1);
+          //changed = true;
+            i--;
+            break;
+          }
+
+        case 'not':
+        case 'Not':
+        case 'NOT':
+        case '!':
+          {
+            const op1 = commands[i + 1];
+            commands[i] = { $not: op1 };
+            commands.splice(i + 1, 1);
+          //changed = true;
+            i--;
+            break;
+          }
+
+        }
+      }
+    }
+  }
+
+  _getMongoSelector() {
+    this._dep.depend();
+    const commands = this._filterToCommands();
+    return this._arrayToSelector(commands);
+  }
+
+}
+
 // The global Filter object.
 // XXX It would be possible to re-write this object more elegantly, and removing
 // the need to provide a list of `_fields`. We also should move methods into the
@@ -86,8 +378,10 @@ Filter = {
   // before changing the schema.
   labelIds: new SetFilter(),
   members: new SetFilter(),
+  customFields: new SetFilter('_id'),
+  advanced: new AdvancedFilter(),
 
-  _fields: ['labelIds', 'members'],
+  _fields: ['labelIds', 'members', 'customFields'],
 
   // We don't filter cards that have been added after the last filter change. To
   // implement this we keep the id of these cards in this `_exceptions` fields
@@ -98,7 +392,7 @@ Filter = {
   isActive() {
     return _.any(this._fields, (fieldName) => {
       return this[fieldName]._isActive();
-    });
+    }) || this.advanced._isActive();
   },
 
   _getMongoSelector() {
@@ -111,7 +405,12 @@ Filter = {
     this._fields.forEach((fieldName) => {
       const filter = this[fieldName];
       if (filter._isActive()) {
-        filterSelector[fieldName] = filter._getMongoSelector();
+        if (filter.subField !== '') {
+          filterSelector[`${fieldName}.${filter.subField}`] = filter._getMongoSelector();
+        }
+        else {
+          filterSelector[fieldName] = filter._getMongoSelector();
+        }
         emptySelector[fieldName] = filter._getEmptySelector();
         if (emptySelector[fieldName] !== null) {
           includeEmptySelectors = true;
@@ -119,13 +418,18 @@ Filter = {
       }
     });
 
-    const exceptionsSelector = {_id: {$in: this._exceptions}};
+    const exceptionsSelector = { _id: { $in: this._exceptions } };
     this._exceptionsDep.depend();
 
-    if (includeEmptySelectors)
-      return {$or: [filterSelector, exceptionsSelector, emptySelector]};
-    else
-      return {$or: [filterSelector, exceptionsSelector]};
+    const selectors = [exceptionsSelector];
+
+    if (_.any(this._fields, (fieldName) => {
+      return this[fieldName]._isActive();
+    })) selectors.push(filterSelector);
+    if (includeEmptySelectors) selectors.push(emptySelector);
+    if (this.advanced._isActive()) selectors.push(this.advanced._getMongoSelector());
+
+    return { $or: selectors };
   },
 
   mongoSelector(additionalSelector) {
@@ -133,7 +437,7 @@ Filter = {
     if (_.isUndefined(additionalSelector))
       return filterSelector;
     else
-      return {$and: [filterSelector, additionalSelector]};
+      return { $and: [filterSelector, additionalSelector] };
   },
 
   reset() {
@@ -141,6 +445,7 @@ Filter = {
       const filter = this[fieldName];
       filter.reset();
     });
+    this.advanced.reset();
     this.resetExceptions();
   },
 

+ 1 - 1
docker-compose.yml

@@ -3,7 +3,7 @@ version: '2'
 services:
 
   wekandb:
-    image: mongo:3.2.19
+    image: mongo:3.2.20
     container_name: wekan-db
     restart: always
     command: mongod --smallfiles --oplogSize 128

+ 33 - 2
i18n/ar.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "علق على __comment__ : __card__",
     "act-createBoard": "احدث __board__",
     "act-createCard": "اضاف __card__ الى __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "اضاف __list__ الى __board__",
     "act-addBoardMember": "اضاف __member__ الى __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "إرفاق %s ل %s",
     "activity-created": "أنشأ %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "استبعاد %s عن %s",
     "activity-imported": "imported %s into %s from %s",
     "activity-imported-board": "imported %s from %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "%s تعليقات لهذه البطاقة",
     "card-delete-notice": "هذا حذف أبديّ . سوف تفقد كل الإجراءات المنوطة بهذه البطاقة",
     "card-delete-pop": "سيتم إزالة جميع الإجراءات من تبعات النشاط، وأنك لن تكون قادرا على إعادة فتح البطاقة. لا يوجد التراجع.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "مستحق",
     "card-due-on": "مستحق في",
     "card-spent": "Spent Time",
     "card-edit-attachments": "تعديل المرفقات",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "تعديل العلامات",
     "card-edit-members": "تعديل الأعضاء",
     "card-labels-title": "تعديل علامات البطاقة.",
@@ -118,6 +121,8 @@
     "card-start": "بداية",
     "card-start-on": "يبدأ في",
     "cardAttachmentsPopup-title": "إرفاق من",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "حذف البطاقة ?",
     "cardDetailsActionsPopup-title": "إجراءات على البطاقة",
     "cardLabelsPopup-title": "علامات",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "إنشاء لوحة",
     "chooseBoardSourcePopup-title": "استيراد لوحة",
     "createLabelPopup-title": "إنشاء علامة",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "الحالي",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "تاريخ",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "تاريخ",
     "decline": "Decline",
     "default-avatar": "صورة شخصية افتراضية",
     "delete": "حذف",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "حذف العلامة ?",
     "description": "وصف",
     "disambiguateMultiLabelPopup-title": "تحديد الإجراء على العلامة",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "تغيير تاريخ البدء",
     "editCardDueDatePopup-title": "تغيير تاريخ الاستحقاق",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "تعديل العلامة",
     "editNotificationPopup-title": "تصحيح الإشعار",
@@ -222,9 +242,12 @@
     "filter-clear": "مسح التصفية",
     "filter-no-label": "لا يوجد ملصق",
     "filter-no-member": "ليس هناك أي عضو",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "التصفية تشتغل",
     "filter-on-desc": "أنت بصدد تصفية بطاقات هذه اللوحة. اضغط هنا لتعديل التصفية.",
     "filter-to-selection": "تصفية بالتحديد",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "الإسم الكامل",
     "header-logo-title": "الرجوع إلى صفحة اللوحات",
     "hide-system-messages": "إخفاء رسائل النظام",
@@ -366,6 +389,7 @@
     "title": "عنوان",
     "tracking": "تتبع",
     "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
     "unassign-member": "إلغاء تعيين العضو",
     "unsaved-description": "لديك وصف غير محفوظ",
     "unwatch": "غير مُشاهد",
@@ -430,6 +454,7 @@
     "hours": "الساعات",
     "minutes": "الدقائق",
     "seconds": "الثواني",
+    "show-field-on-card": "Show this field on card",
     "yes": "نعم",
     "no": "لا",
     "accounts": "الحسابات",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 130 - 99
i18n/bg.i18n.json

@@ -1,44 +1,46 @@
 {
     "accept": "Accept",
     "act-activity-notify": "[Wekan] Известия за дейности",
-    "act-addAttachment": "attached __attachment__ to __card__",
-    "act-addChecklist": "added checklist __checklist__ to __card__",
-    "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
+    "act-addAttachment": "прикачи __attachment__ към __card__",
+    "act-addChecklist": "добави списък със задачи __checklist__ към __card__",
+    "act-addChecklistItem": "добави __checklistItem__ към списък със задачи __checklist__ в __card__",
     "act-addComment": "Коментира в __card__: __comment__",
-    "act-createBoard": "created __board__",
-    "act-createCard": "added __card__ to __list__",
-    "act-createList": "added __list__ to __board__",
-    "act-addBoardMember": "added __member__ to __board__",
-    "act-archivedBoard": "__board__ moved to Recycle Bin",
-    "act-archivedCard": "__card__ moved to Recycle Bin",
-    "act-archivedList": "__list__ moved to Recycle Bin",
-    "act-archivedSwimlane": "__swimlane__ moved to Recycle Bin",
-    "act-importBoard": "imported __board__",
-    "act-importCard": "imported __card__",
-    "act-importList": "imported __list__",
-    "act-joinMember": "added __member__ to __card__",
-    "act-moveCard": "moved __card__ from __oldList__ to __list__",
-    "act-removeBoardMember": "removed __member__ from __board__",
-    "act-restoredCard": "restored __card__ to __board__",
-    "act-unjoinMember": "removed __member__ from __card__",
+    "act-createBoard": "създаде __board__",
+    "act-createCard": "добави __card__ към __list__",
+    "act-createCustomField": "създаде собствено поле __customField__",
+    "act-createList": "добави __list__ към __board__",
+    "act-addBoardMember": "добави __member__ към __board__",
+    "act-archivedBoard": "__board__ беше преместен в Кошчето",
+    "act-archivedCard": "__card__ беше преместена в Кошчето",
+    "act-archivedList": "__list__ беше преместен в Кошчето",
+    "act-archivedSwimlane": "__swimlane__ беше преместен в Кошчето",
+    "act-importBoard": "импортира __board__",
+    "act-importCard": "импортира __card__",
+    "act-importList": "импортира __list__",
+    "act-joinMember": "добави __member__ към __card__",
+    "act-moveCard": "премести __card__ от __oldList__ в __list__",
+    "act-removeBoardMember": "премахна __member__ от __board__",
+    "act-restoredCard": "възстанови __card__ в __board__",
+    "act-unjoinMember": "премахна __member__ от __card__",
     "act-withBoardTitle": "[Wekan] __board__",
     "act-withCardTitle": "[__board__] __card__",
     "actions": "Actions",
     "activities": "Действия",
     "activity": "Дейности",
     "activity-added": "добави %s към %s",
-    "activity-archived": "%s moved to Recycle Bin",
+    "activity-archived": "премести %s в Кошчето",
     "activity-attached": "прикачи %s към %s",
     "activity-created": "създаде %s",
+    "activity-customfield-created": "създаде собствено поле %s",
     "activity-excluded": "изключи %s от %s",
     "activity-imported": "импортира %s в/във %s от %s",
     "activity-imported-board": "импортира %s от %s",
-    "activity-joined": "joined %s",
+    "activity-joined": "се присъедини към %s",
     "activity-moved": "премести %s от %s в/във %s",
     "activity-on": "на %s",
     "activity-removed": "премахна %s от %s",
     "activity-sent": "изпрати %s до %s",
-    "activity-unjoined": "unjoined %s",
+    "activity-unjoined": "вече не е част от %s",
     "activity-checklist-added": "добави списък със задачи към %s",
     "activity-checklist-item-added": "добави точка към '%s' в/във %s",
     "add": "Добави",
@@ -58,29 +60,29 @@
     "admin-desc": "Can view and edit cards, remove members, and change settings for the board.",
     "admin-announcement": "Съобщение",
     "admin-announcement-active": "Active System-Wide Announcement",
-    "admin-announcement-title": "Announcement from Administrator",
+    "admin-announcement-title": "Съобщение от администратора",
     "all-boards": "Всички дъски",
-    "and-n-other-card": "And __count__ other card",
-    "and-n-other-card_plural": "And __count__ other cards",
+    "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.",
-    "archive": "Move to Recycle Bin",
-    "archive-all": "Move All to Recycle Bin",
-    "archive-board": "Move Board to Recycle Bin",
-    "archive-card": "Move Card to Recycle Bin",
-    "archive-list": "Move List to Recycle Bin",
-    "archive-swimlane": "Move Swimlane to Recycle Bin",
-    "archive-selection": "Move selection to Recycle Bin",
-    "archiveBoardPopup-title": "Move Board to Recycle Bin?",
-    "archived-items": "Recycle Bin",
-    "archived-boards": "Boards in Recycle Bin",
-    "restore-board": "Restore Board",
-    "no-archived-boards": "No Boards in Recycle Bin.",
-    "archives": "Recycle Bin",
-    "assign-member": "Assign member",
+    "app-is-offline": "Wekan зарежда, моля изчакайте! Презареждането на страницата може да доведе до загуба на данни. Ако Wekan не се зареди, моля проверете дали сървъра му работи.",
+    "archive": "Премести в Кошчето",
+    "archive-all": "Премести всички в Кошчето",
+    "archive-board": "Премести Дъската в Кошчето",
+    "archive-card": "Премести Картата в Кошчето",
+    "archive-list": "Премести Списъка в Кошчето",
+    "archive-swimlane": "Премести Коридора в Кошчето",
+    "archive-selection": "Премести избраните в Кошчето",
+    "archiveBoardPopup-title": "Сигурни ли сте, че искате да преместите Дъската в Кошчето?",
+    "archived-items": "Кошче",
+    "archived-boards": "Дъски в Кошчето",
+    "restore-board": "Възстанови Дъската",
+    "no-archived-boards": "Няма Дъски в Кошчето.",
+    "archives": "Кошче",
+    "assign-member": "Възложи на член от екипа",
     "attached": "прикачен",
     "attachment": "Прикаченн файл",
-    "attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.",
+    "attachment-delete-pop": "Изтриването на прикачен файл е завинаги. Няма как да бъде възстановен.",
     "attachmentDeletePopup-title": "Желаете ли да изтриете прикачения файл?",
     "attachments": "Прикачени файлове",
     "auto-watch": "Автоматично наблюдаване на дъските, когато са създадени",
@@ -88,36 +90,39 @@
     "back": "Назад",
     "board-change-color": "Промени цвета",
     "board-nb-stars": "%s звезди",
-    "board-not-found": "Board not found",
+    "board-not-found": "Дъската не е намерена",
     "board-private-info": "This board will be <strong>private</strong>.",
     "board-public-info": "This board will be <strong>public</strong>.",
     "boardChangeColorPopup-title": "Change Board Background",
-    "boardChangeTitlePopup-title": "Rename Board",
+    "boardChangeTitlePopup-title": "Промени името на Дъската",
     "boardChangeVisibilityPopup-title": "Change Visibility",
     "boardChangeWatchPopup-title": "Промени наблюдаването",
-    "boardMenuPopup-title": "Board Menu",
+    "boardMenuPopup-title": "Меню на Дъската",
     "boards": "Дъски",
     "board-view": "Board View",
     "board-view-swimlanes": "Коридори",
     "board-view-lists": "Списъци",
     "bucket-example": "Like “Bucket List” for example",
     "cancel": "Cancel",
-    "card-archived": "This card is moved to Recycle Bin.",
+    "card-archived": "Картата е преместена в Кошчето.",
     "card-comments-title": "Тази карта има %s коментар.",
     "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
     "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Готова за",
     "card-due-on": "Готова за",
     "card-spent": "Изработено време",
     "card-edit-attachments": "Промени прикачените файлове",
+    "card-edit-custom-fields": "Промени собствените полета",
     "card-edit-labels": "Промени етикетите",
     "card-edit-members": "Промени членовете",
-    "card-labels-title": "Променете етикетите за тази карта",
-    "card-members-title": "Add or remove members of the board from the card.",
+    "card-labels-title": "Промени етикетите за картата.",
+    "card-members-title": "Добави или премахни членове на Дъската от тази карта.",
     "card-start": "Начало",
-    "card-start-on": "Starts on",
-    "cardAttachmentsPopup-title": "Attach From",
+    "card-start-on": "Започва на",
+    "cardAttachmentsPopup-title": "Прикачи от",
+    "cardCustomField-datePopup-title": "Промени датата",
+    "cardCustomFieldsPopup-title": "Промени собствените полета",
     "cardDeletePopup-title": "Желаете да изтриете картата?",
     "cardDetailsActionsPopup-title": "Опции",
     "cardLabelsPopup-title": "Етикети",
@@ -125,7 +130,7 @@
     "cardMorePopup-title": "Още",
     "cards": "Карти",
     "cards-count": "Карти",
-    "change": "Change",
+    "change": "Промени",
     "change-avatar": "Промени аватара",
     "change-password": "Промени паролата",
     "change-permissions": "Change permissions",
@@ -138,26 +143,26 @@
     "checklists": "Списъци със задачи",
     "click-to-star": "Click to star this board.",
     "click-to-unstar": "Натиснете, за да премахнете тази дъска от любими.",
-    "clipboard": "Clipboard or drag & drop",
-    "close": "Close",
-    "close-board": "Close Board",
+    "clipboard": "Клипборда или с драг & дроп",
+    "close": "Затвори",
+    "close-board": "Затвори Дъската",
     "close-board-pop": "You will be able to restore the board by clicking the “Recycle Bin” button from the home header.",
-    "color-black": "black",
-    "color-blue": "blue",
-    "color-green": "green",
-    "color-lime": "lime",
-    "color-orange": "orange",
-    "color-pink": "pink",
-    "color-purple": "purple",
-    "color-red": "red",
-    "color-sky": "sky",
-    "color-yellow": "yellow",
+    "color-black": "черно",
+    "color-blue": "синьо",
+    "color-green": "зелено",
+    "color-lime": "лайм",
+    "color-orange": "оранжево",
+    "color-pink": "розово",
+    "color-purple": "пурпурно",
+    "color-red": "червено",
+    "color-sky": "светло синьо",
+    "color-yellow": "жълто",
     "comment": "Коментирай",
     "comment-placeholder": "Напиши коментар",
     "comment-only": "Само коментар",
     "comment-only-desc": "Може да коментира само в карти.",
-    "computer": "Computer",
-    "confirm-checklist-delete-dialog": "Are you sure you want to delete checklist",
+    "computer": "Компютър",
+    "confirm-checklist-delete-dialog": "Сигурни ли сте, че искате да изтриете този чеклист?",
     "copy-card-link-to-clipboard": "Копирай връзката на картата в клипборда",
     "copyCardPopup-title": "Копирай картата",
     "copyChecklistToManyCardsPopup-title": "Копирай шаблона за чеклисти в много карти",
@@ -167,31 +172,46 @@
     "createBoardPopup-title": "Create Board",
     "chooseBoardSourcePopup-title": "Import board",
     "createLabelPopup-title": "Create Label",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "current",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Чекбокс",
+    "custom-field-date": "Дата",
+    "custom-field-dropdown": "Падащо меню",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Номер",
+    "custom-field-text": "Текст",
+    "custom-fields": "Собствени полета",
     "date": "Дата",
-    "decline": "Decline",
+    "decline": "Отказ",
     "default-avatar": "Основен аватар",
     "delete": "Изтрий",
+    "deleteCustomFieldPopup-title": "Изтриване на Собственото поле?",
     "deleteLabelPopup-title": "Желаете да изтриете етикета?",
     "description": "Описание",
     "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
     "disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
-    "discard": "Discard",
-    "done": "Done",
+    "discard": "Отказ",
+    "done": "Готово",
     "download": "Сваляне",
     "edit": "Промени",
     "edit-avatar": "Промени аватара",
     "edit-profile": "Промяна на профила",
     "edit-wip-limit": "Промени WIP лимита",
-    "soft-wip-limit": "Soft WIP Limit",
+    "soft-wip-limit": "\"Мек\" WIP лимит",
     "editCardStartDatePopup-title": "Промени началната дата",
     "editCardDueDatePopup-title": "Промени датата за готовност",
+    "editCustomFieldPopup-title": "Промени Полето",
     "editCardSpentTimePopup-title": "Промени изработеното време",
-    "editLabelPopup-title": "Change Label",
+    "editLabelPopup-title": "Промяна на Етикета",
     "editNotificationPopup-title": "Промени известията",
     "editProfilePopup-title": "Промяна на профила",
     "email": "Имейл",
-    "email-enrollAccount-subject": "An account created for you on __siteName__",
+    "email-enrollAccount-subject": "Ваш профил беше създаден на __siteName__",
     "email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
     "email-fail": "Неуспешно изпращане на имейла",
     "email-fail-text": "Възникна грешка при изпращането на имейла",
@@ -204,7 +224,7 @@
     "email-sent": "Имейлът е изпратен",
     "email-verifyEmail-subject": "Verify your email address on __siteName__",
     "email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.",
-    "enable-wip-limit": "Enable WIP Limit",
+    "enable-wip-limit": "Включи WIP лимита",
     "error-board-doesNotExist": "This board does not exist",
     "error-board-notAdmin": "You need to be admin of this board to do that",
     "error-board-notAMember": "You need to be a member of this board to do that",
@@ -220,16 +240,19 @@
     "filter": "Филтър",
     "filter-cards": "Филтрирай картите",
     "filter-clear": "Премахване на филтрите",
-    "filter-no-label": "No label",
-    "filter-no-member": "No member",
+    "filter-no-label": "без етикет",
+    "filter-no-member": "без член",
+    "filter-no-custom-fields": "Няма Собствени полета",
     "filter-on": "Има приложени филтри",
     "filter-on-desc": "В момента филтрирате картите в тази дъска. Моля, натиснете тук, за да промените филтъра.",
     "filter-to-selection": "Филтрирай избраните",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Име",
     "header-logo-title": "Go back to your boards page.",
     "hide-system-messages": "Скриване на системните съобщения",
     "headerBarCreateBoardPopup-title": "Create Board",
-    "home": "Home",
+    "home": "Начало",
     "import": "Import",
     "import-board": "import board",
     "import-board-c": "Import board",
@@ -245,13 +268,13 @@
     "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": "Избери Wekan член",
     "info": "Версия",
     "initials": "Инициали",
     "invalid-date": "Невалидна дата",
     "invalid-time": "Невалиден час",
     "invalid-user": "Невалиден потребител",
-    "joined": "joined",
+    "joined": "присъедини ",
     "just-invited": "You are just invited to this board",
     "keyboard-shortcuts": "Keyboard shortcuts",
     "label-create": "Създай етикет",
@@ -264,17 +287,17 @@
     "leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
     "leaveBoardPopup-title": "Leave Board ?",
     "link-card": "Връзка към тази карта",
-    "list-archive-cards": "Move all cards in this list to Recycle Bin",
+    "list-archive-cards": "Премести всички карти от този списък в Кошчето",
     "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Recycle Bin and bring them back to the board, click “Menu” > “Recycle Bin”.",
     "list-move-cards": "Премести всички карти в този списък",
     "list-select-cards": "Избери всички карти в този списък",
     "listActionPopup-title": "List Actions",
     "swimlaneActionPopup-title": "Swimlane Actions",
-    "listImportCardPopup-title": "Import a Trello card",
+    "listImportCardPopup-title": "Импорт на карта от Trello",
     "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.",
-    "list-delete-suggest-archive": "You can move a list to Recycle Bin to remove it from the board and preserve the activity.",
+    "list-delete-suggest-archive": "Можете да преместите списък в Кошчето, за да го премахнете от Дъската и запазите активността.",
     "lists": "Списъци",
     "swimlanes": "Коридори",
     "log-out": "Изход",
@@ -294,9 +317,9 @@
     "muted-info": "You will never be notified of any changes in this board",
     "my-boards": "Моите дъски",
     "name": "Име",
-    "no-archived-cards": "No cards in Recycle Bin.",
-    "no-archived-lists": "No lists in Recycle Bin.",
-    "no-archived-swimlanes": "No swimlanes in Recycle Bin.",
+    "no-archived-cards": "Няма карти в Кошчето.",
+    "no-archived-lists": "Няма списъци в Кошчето.",
+    "no-archived-swimlanes": "Няма коридори в Кошчето.",
     "no-results": "No results",
     "normal": "Normal",
     "normal-desc": "Can view and edit cards. Can't change settings.",
@@ -323,12 +346,12 @@
     "remove-from-board": "Remove from Board",
     "remove-label": "Remove Label",
     "listDeletePopup-title": "Желаете да изтриете списъка?",
-    "remove-member": "Remove Member",
-    "remove-member-from-card": "Remove from Card",
+    "remove-member": "Премахни член",
+    "remove-member-from-card": "Премахни от картата",
     "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
     "removeMemberPopup-title": "Remove Member?",
     "rename": "Rename",
-    "rename-board": "Rename Board",
+    "rename-board": "Промени името на Дъската",
     "restore": "Възстанови",
     "save": "Запази",
     "search": "Търсене",
@@ -336,8 +359,8 @@
     "search-example": "Text to search for?",
     "select-color": "Избери цвят",
     "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
-    "setWipLimitPopup-title": "Set WIP Limit",
-    "shortcut-assign-self": "Assign yourself to current card",
+    "setWipLimitPopup-title": "Въведи WIP лимит",
+    "shortcut-assign-self": "Добави себе си към тази карта",
     "shortcut-autocomplete-emoji": "Autocomplete emoji",
     "shortcut-autocomplete-members": "Autocomplete members",
     "shortcut-clear-filters": "Изчистване на всички филтри",
@@ -356,7 +379,7 @@
     "subscribe": "Subscribe",
     "team": "Team",
     "this-board": "this board",
-    "this-card": "тази карта",
+    "this-card": "картата",
     "spent-time-hours": "Изработено време (часа)",
     "overtime-hours": "Оувъртайм (часа)",
     "overtime": "Оувъртайм",
@@ -366,6 +389,7 @@
     "title": "Title",
     "tracking": "Следене",
     "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
     "unassign-member": "Unassign member",
     "unsaved-description": "You have an unsaved description.",
     "unwatch": "Спри наблюдаването",
@@ -374,7 +398,7 @@
     "uploaded-avatar": "Качихте аватар",
     "username": "Потребителско име",
     "view-it": "View it",
-    "warn-list-archived": "warning: this card is in an list at Recycle Bin",
+    "warn-list-archived": "внимание: тази карта е в списък, който е в Кошчето",
     "watch": "Наблюдавай",
     "watching": "Наблюдава",
     "watching-info": "You will be notified of any change in this board",
@@ -383,9 +407,9 @@
     "welcome-list1": "Basics",
     "welcome-list2": "Advanced",
     "what-to-do": "What do you want to do?",
-    "wipLimitErrorPopup-title": "Invalid WIP Limit",
+    "wipLimitErrorPopup-title": "Невалиден WIP лимит",
     "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
-    "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.",
+    "wipLimitErrorPopup-dialog-pt2": "Моля, преместете някои от задачите от този списък или въведете по-висок WIP лимит.",
     "admin-panel": "Администраторски панел",
     "settings": "Настройки",
     "people": "Хора",
@@ -430,6 +454,7 @@
     "hours": "часа",
     "minutes": "минути",
     "seconds": "секунди",
+    "show-field-on-card": "Покажи това поле в картата",
     "yes": "Да",
     "no": "Не",
     "accounts": "Профили",
@@ -438,10 +463,16 @@
     "createdAt": "Създаден на",
     "verified": "Потвърден",
     "active": "Активен",
-    "card-received": "Received",
-    "card-received-on": "Received on",
-    "card-end": "End",
-    "card-end-on": "Ends on",
-    "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "card-received": "Получена",
+    "card-received-on": "Получена на",
+    "card-end": "Завършена",
+    "card-end-on": "Завършена на",
+    "editCardReceivedDatePopup-title": "Промени датата на получаване",
+    "editCardEndDatePopup-title": "Промени датата на завършване",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 33 - 2
i18n/br.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "commented on __card__: __comment__",
     "act-createBoard": "created __board__",
     "act-createCard": "added __card__ to __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "added __list__ to __board__",
     "act-addBoardMember": "added __member__ to __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "%s liammet ouzh %s",
     "activity-created": "%s krouet",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "excluded %s from %s",
     "activity-imported": "%s enporzhiet eus %s da %s",
     "activity-imported-board": "%s enporzhiet da %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "This card has %s comment.",
     "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
     "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Due",
     "card-due-on": "Due on",
     "card-spent": "Spent Time",
     "card-edit-attachments": "Edit attachments",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Edit labels",
     "card-edit-members": "Edit members",
     "card-labels-title": "Change the labels for the card.",
@@ -118,6 +121,8 @@
     "card-start": "Start",
     "card-start-on": "Starts on",
     "cardAttachmentsPopup-title": "Attach From",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Diverkañ ar gartenn ?",
     "cardDetailsActionsPopup-title": "Card Actions",
     "cardLabelsPopup-title": "Labels",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Create Board",
     "chooseBoardSourcePopup-title": "Import board",
     "createLabelPopup-title": "Create Label",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "current",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Date",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Date",
     "decline": "Decline",
     "default-avatar": "Default avatar",
     "delete": "Diverkañ",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Delete Label?",
     "description": "Description",
     "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "Change start date",
     "editCardDueDatePopup-title": "Change due date",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "Change Label",
     "editNotificationPopup-title": "Edit Notification",
@@ -222,9 +242,12 @@
     "filter-clear": "Clear filter",
     "filter-no-label": "No label",
     "filter-no-member": "No member",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Filter is on",
     "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
     "filter-to-selection": "Filter to selection",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Full Name",
     "header-logo-title": "Go back to your boards page.",
     "hide-system-messages": "Hide system messages",
@@ -366,6 +389,7 @@
     "title": "Title",
     "tracking": "Tracking",
     "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
     "unassign-member": "Unassign member",
     "unsaved-description": "You have an unsaved description.",
     "unwatch": "Unwatch",
@@ -430,6 +454,7 @@
     "hours": "hours",
     "minutes": "minutes",
     "seconds": "seconds",
+    "show-field-on-card": "Show this field on card",
     "yes": "Yes",
     "no": "No",
     "accounts": "Accounts",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 33 - 2
i18n/ca.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "comentat a __card__: __comment__",
     "act-createBoard": "creat __board__",
     "act-createCard": "afegit/da __card__ a __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "afegit/da __list__ a __board__",
     "act-addBoardMember": "afegit/da __member__ a __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "ha adjuntat %s a %s",
     "activity-created": "ha creat %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "ha exclòs %s de %s",
     "activity-imported": "importat %s dins %s des de %s",
     "activity-imported-board": "importat %s des de %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "Aquesta fitxa té %s comentaris.",
     "card-delete-notice": "L'esborrat és permanent. Perdreu totes les accions associades a aquesta fitxa.",
     "card-delete-pop": "Totes les accions s'eliminaran de l'activitat i no podreu tornar a obrir la fitxa. No es pot desfer.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Finalitza",
     "card-due-on": "Finalitza a",
     "card-spent": "Temps Dedicat",
     "card-edit-attachments": "Edita arxius adjunts",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Edita etiquetes",
     "card-edit-members": "Edita membres",
     "card-labels-title": "Canvia les etiquetes de la fitxa",
@@ -118,6 +121,8 @@
     "card-start": "Comença",
     "card-start-on": "Comença a",
     "cardAttachmentsPopup-title": "Adjunta des de",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Esborrar fitxa?",
     "cardDetailsActionsPopup-title": "Accions de fitxes",
     "cardLabelsPopup-title": "Etiquetes",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Crea tauler",
     "chooseBoardSourcePopup-title": "Importa Tauler",
     "createLabelPopup-title": "Crea etiqueta",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "Actual",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Data",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Data",
     "decline": "Declina",
     "default-avatar": "Avatar per defecte",
     "delete": "Esborra",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Esborra etiqueta",
     "description": "Descripció",
     "disambiguateMultiLabelPopup-title": "Desfe l'ambigüitat en les etiquetes",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "Canvia data d'inici",
     "editCardDueDatePopup-title": "Canvia data de finalització",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Canvia temps dedicat",
     "editLabelPopup-title": "Canvia etiqueta",
     "editNotificationPopup-title": "Edita la notificació",
@@ -222,9 +242,12 @@
     "filter-clear": "Elimina filtre",
     "filter-no-label": "Sense etiqueta",
     "filter-no-member": "Sense membres",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Filtra per",
     "filter-on-desc": "Estau filtrant fitxes en aquest tauler. Feu clic aquí per editar el filtre.",
     "filter-to-selection": "Filtra selecció",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Nom complet",
     "header-logo-title": "Torna a la teva pàgina de taulers",
     "hide-system-messages": "Oculta missatges del sistema",
@@ -366,6 +389,7 @@
     "title": "Títol",
     "tracking": "En seguiment",
     "tracking-info": "Seràs notificat per cada canvi a aquelles fitxes de les que n'eres creador o membre",
+    "type": "Type",
     "unassign-member": "Desassignar membre",
     "unsaved-description": "Tens una descripció sense desar.",
     "unwatch": "Suprimeix observació",
@@ -430,6 +454,7 @@
     "hours": "hores",
     "minutes": "minuts",
     "seconds": "segons",
+    "show-field-on-card": "Show this field on card",
     "yes": "Si",
     "no": "No",
     "accounts": "Comptes",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 32 - 1
i18n/cs.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "komentář k __card__: __comment__",
     "act-createBoard": "přidání __board__",
     "act-createCard": "přidání __card__ do __list__",
+    "act-createCustomField": "vytvořeno vlastní pole __customField__",
     "act-createList": "přidání __list__ do __board__",
     "act-addBoardMember": "přidání __member__ do __board__",
     "act-archivedBoard": "__board__ bylo přesunuto do koše",
@@ -30,6 +31,7 @@
     "activity-archived": "%s bylo přesunuto do koše",
     "activity-attached": "přiloženo %s k %s",
     "activity-created": "%s vytvořeno",
+    "activity-customfield-created": "vytvořeno vlastní pole %s",
     "activity-excluded": "%s vyjmuto z %s",
     "activity-imported": "importován %s do %s z %s",
     "activity-imported-board": "importován %s z %s",
@@ -111,6 +113,7 @@
     "card-due-on": "Do",
     "card-spent": "Strávený čas",
     "card-edit-attachments": "Upravit přílohy",
+    "card-edit-custom-fields": "Upravit vlastní pole",
     "card-edit-labels": "Upravit štítky",
     "card-edit-members": "Upravit členy",
     "card-labels-title": "Změnit štítky karty.",
@@ -118,6 +121,8 @@
     "card-start": "Start",
     "card-start-on": "Začít dne",
     "cardAttachmentsPopup-title": "Přiložit formulář",
+    "cardCustomField-datePopup-title": "Změnit datum",
+    "cardCustomFieldsPopup-title": "Upravit vlastní pole",
     "cardDeletePopup-title": "Smazat kartu?",
     "cardDetailsActionsPopup-title": "Akce karty",
     "cardLabelsPopup-title": "Štítky",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Vytvořit tablo",
     "chooseBoardSourcePopup-title": "Importovat tablo",
     "createLabelPopup-title": "Vytvořit štítek",
+    "createCustomField": "Vytvořit pole",
+    "createCustomFieldPopup-title": "Vytvořit pole",
     "current": "Aktuální",
+    "custom-field-delete-pop": "Nelze vrátit zpět. Toto odebere toto vlastní pole ze všech karet a zničí jeho historii.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Datum",
+    "custom-field-dropdown": "Rozbalovací seznam",
+    "custom-field-dropdown-none": "(prázdné)",
+    "custom-field-dropdown-options": "Seznam možností",
+    "custom-field-dropdown-options-placeholder": "Stiskněte enter pro přidání více možností",
+    "custom-field-dropdown-unknown": "(neznámé)",
+    "custom-field-number": "Číslo",
+    "custom-field-text": "Text",
+    "custom-fields": "Vlastní pole",
     "date": "Datum",
     "decline": "Zamítnout",
     "default-avatar": "Výchozí avatar",
     "delete": "Smazat",
+    "deleteCustomFieldPopup-title": "Smazat vlastní pole",
     "deleteLabelPopup-title": "Smazat štítek?",
     "description": "Popis",
     "disambiguateMultiLabelPopup-title": "Dvojznačný štítek akce",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Mírný WIP limit",
     "editCardStartDatePopup-title": "Změnit datum startu úkolu",
     "editCardDueDatePopup-title": "Změnit datum dokončení úkolu",
+    "editCustomFieldPopup-title": "Upravit pole",
     "editCardSpentTimePopup-title": "Změnit strávený čas",
     "editLabelPopup-title": "Změnit štítek",
     "editNotificationPopup-title": "Změnit notifikace",
@@ -222,9 +242,12 @@
     "filter-clear": "Vyčistit filtr",
     "filter-no-label": "Žádný štítek",
     "filter-no-member": "Žádný člen",
+    "filter-no-custom-fields": "Žádné vlastní pole",
     "filter-on": "Filtr je zapnut",
     "filter-on-desc": "Filtrujete karty tohoto tabla. Pro úpravu filtru klikni sem.",
     "filter-to-selection": "Filtrovat výběr",
+    "advanced-filter-label": "Pokročilý filtr",
+    "advanced-filter-description": "Pokročilý filtr dovoluje zapsat řetězec následujících operátorů: == != <= >= && || () Operátory jsou odděleny mezerou. Můžete filtrovat všechny vlastní pole zadáním jejich názvů nebo hodnot. Například: Pole1 == Hodnota1. Poznámka: Pokud pole nebo hodnoty obsahují mezery, je potřeba je obalit v jednoduchých uvozovkách. Například: 'Pole 1' == 'Hodnota 1'. Můžete také kombinovat více podmínek. Například P1 == H1 || P1 == H2. Obvykle jsou operátory interpretovány zleva doprava. Jejich pořadí můžete měnit pomocí závorek. Například: P1 == H1 && (P2 == H2 || P2 == H3 )",
     "fullname": "Celé jméno",
     "header-logo-title": "Jit zpět na stránku s tably.",
     "hide-system-messages": "Skrýt systémové zprávy",
@@ -366,6 +389,7 @@
     "title": "Název",
     "tracking": "Pozorující",
     "tracking-info": "Budete informováni o všech změnách v kartách, u kterých jste tvůrce nebo člen.",
+    "type": "Typ",
     "unassign-member": "Vyřadit člena",
     "unsaved-description": "Popis neni uložen.",
     "unwatch": "Přestat sledovat",
@@ -430,6 +454,7 @@
     "hours": "hodin",
     "minutes": "minut",
     "seconds": "sekund",
+    "show-field-on-card": "Ukázat toto pole na kartě",
     "yes": "Ano",
     "no": "Ne",
     "accounts": "Účty",
@@ -443,5 +468,11 @@
     "card-end": "Konec",
     "card-end-on": "Končí v",
     "editCardReceivedDatePopup-title": "Změnit datum přijetí",
-    "editCardEndDatePopup-title": "Změnit datum konce"
+    "editCardEndDatePopup-title": "Změnit datum konce",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Smazat tablo?",
+    "delete-board": "Smazat tablo"
 }

+ 37 - 6
i18n/de.i18n.json

@@ -2,11 +2,12 @@
     "accept": "Akzeptieren",
     "act-activity-notify": "[Wekan] Aktivitätsbenachrichtigung",
     "act-addAttachment": "hat __attachment__ an __card__ angehängt",
-    "act-addChecklist": "hat die Checklist __checklist__ zu __card__ hinzugefügt",
+    "act-addChecklist": "hat die Checkliste __checklist__ zu __card__ hinzugefügt",
     "act-addChecklistItem": "hat __checklistItem__ zur Checkliste __checklist__ in __card__ hinzugefügt",
     "act-addComment": "hat __card__ kommentiert: __comment__",
     "act-createBoard": "hat __board__ erstellt",
     "act-createCard": "hat __card__ zu __list__ hinzugefügt",
+    "act-createCustomField": "benutzerdefiniertes Feld __customField__ angelegt",
     "act-createList": "hat __list__ zu __board__ hinzugefügt",
     "act-addBoardMember": "hat __member__ zu __board__ hinzugefügt",
     "act-archivedBoard": "__board__ in den Papierkorb verschoben",
@@ -27,9 +28,10 @@
     "activities": "Aktivitäten",
     "activity": "Aktivität",
     "activity-added": "hat %s zu %s hinzugefügt",
-    "activity-archived": "%s in den Papierkorb verschoben",
+    "activity-archived": "hat %s in den Papierkorb verschoben",
     "activity-attached": "hat %s an %s angehängt",
     "activity-created": "hat %s erstellt",
+    "activity-customfield-created": "hat das benutzerdefinierte Feld %s erstellt",
     "activity-excluded": "hat %s von %s ausgeschlossen",
     "activity-imported": "hat %s in %s von %s importiert",
     "activity-imported-board": "hat %s von %s importiert",
@@ -40,14 +42,14 @@
     "activity-sent": "hat %s an %s gesendet",
     "activity-unjoined": "hat %s verlassen",
     "activity-checklist-added": "hat eine Checkliste zu %s hinzugefügt",
-    "activity-checklist-item-added": "hat einen Punkt zur Checkliste '%s' in %s hinzugefügt",
+    "activity-checklist-item-added": "hat eine Checklistenposition zu '%s' in %s hinzugefügt",
     "add": "Hinzufügen",
     "add-attachment": "Datei anhängen",
     "add-board": "neues Board",
     "add-card": "Karte hinzufügen",
     "add-swimlane": "Swimlane hinzufügen",
     "add-checklist": "Checkliste hinzufügen",
-    "add-checklist-item": "Punkt zu einer Checkliste hinzufügen",
+    "add-checklist-item": "Position zu einer Checkliste hinzufügen",
     "add-cover": "Cover hinzufügen",
     "add-label": "Label hinzufügen",
     "add-list": "Liste hinzufügen",
@@ -111,6 +113,7 @@
     "card-due-on": "Fällig am",
     "card-spent": "Aufgewendete Zeit",
     "card-edit-attachments": "Anhänge ändern",
+    "card-edit-custom-fields": "Benutzerdefinierte Felder editieren",
     "card-edit-labels": "Labels ändern",
     "card-edit-members": "Mitglieder ändern",
     "card-labels-title": "Labels für diese Karte ändern.",
@@ -118,6 +121,8 @@
     "card-start": "Start",
     "card-start-on": "Start am",
     "cardAttachmentsPopup-title": "Anhängen von",
+    "cardCustomField-datePopup-title": "Datum ändern",
+    "cardCustomFieldsPopup-title": "Benutzerdefinierte Felder editieren",
     "cardDeletePopup-title": "Karte löschen?",
     "cardDetailsActionsPopup-title": "Kartenaktionen",
     "cardLabelsPopup-title": "Labels",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Board erstellen",
     "chooseBoardSourcePopup-title": "Board importieren",
     "createLabelPopup-title": "Label erstellen",
+    "createCustomField": "Feld erstellen",
+    "createCustomFieldPopup-title": "Feld erstellen",
     "current": "aktuell",
+    "custom-field-delete-pop": "Dies wird das Feld aus allen Karten entfernen und den dazugehörigen Verlauf löschen. Die Aktion kann nicht rückgängig gemacht werden.",
+    "custom-field-checkbox": "Kontrollkästchen",
+    "custom-field-date": "Datum",
+    "custom-field-dropdown": "Dropdownliste",
+    "custom-field-dropdown-none": "(keiner)",
+    "custom-field-dropdown-options": "Listenoptionen",
+    "custom-field-dropdown-options-placeholder": "Drücken Sie die Eingabetaste, um weitere Optionen hinzuzufügen",
+    "custom-field-dropdown-unknown": "(unbekannt)",
+    "custom-field-number": "Zahl",
+    "custom-field-text": "Text",
+    "custom-fields": "Benutzerdefinierte Felder",
     "date": "Datum",
     "decline": "Ablehnen",
     "default-avatar": "Standard Profilbild",
     "delete": "Löschen",
+    "deleteCustomFieldPopup-title": "Benutzerdefiniertes Feld löschen?",
     "deleteLabelPopup-title": "Label löschen?",
     "description": "Beschreibung",
     "disambiguateMultiLabelPopup-title": "Labels vereinheitlichen",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP-Limit",
     "editCardStartDatePopup-title": "Startdatum ändern",
     "editCardDueDatePopup-title": "Fälligkeitsdatum ändern",
+    "editCustomFieldPopup-title": "Feld bearbeiten",
     "editCardSpentTimePopup-title": "Aufgewendete Zeit ändern",
     "editLabelPopup-title": "Label ändern",
     "editNotificationPopup-title": "Benachrichtigung ändern",
@@ -222,9 +242,12 @@
     "filter-clear": "Filter entfernen",
     "filter-no-label": "Kein Label",
     "filter-no-member": "Kein Mitglied",
+    "filter-no-custom-fields": "Keine benutzerdefinierten Felder",
     "filter-on": "Filter ist aktiv",
     "filter-on-desc": "Sie filtern die Karten in diesem Board. Klicken Sie, um den Filter zu bearbeiten.",
     "filter-to-selection": "Ergebnisse auswählen",
+    "advanced-filter-label": "Erweiterter Filter",
+    "advanced-filter-description": "Der erweiterte Filter erlaubt die Eingabe von Zeichenfolgen, die folgende Operatoren enthalten: == != <= >= && || ( ). Ein Leerzeichen wird als Trennzeichen zwischen den Operatoren verwendet. Sie können nach allen benutzerdefinierten Feldern filtern, indem Sie deren Namen und Werte eingeben. Zum Beispiel: Feld1 == Wert1. Beachten Sie: Wenn Felder oder Werte Leerzeichen enthalten, müssen Sie sie in einfache Anführungszeichen setzen. Zum Beispiel: 'Feld 1' == 'Wert 1'. Sie können außerdem mehrere Bedingungen kombinieren. Zum Beispiel: F1 == W1 || F1 == W2. Normalerweise werden alle Operatoren von links nach rechts interpretiert. Sie können die Reihenfolge ändern, indem Sie Klammern setzen. Zum Beispiel: F1 == W1 && ( F2 == W2 || F2 == W3 )",
     "fullname": "Vollständiger Name",
     "header-logo-title": "Zurück zur Board Seite.",
     "hide-system-messages": "Systemmeldungen ausblenden",
@@ -355,7 +378,7 @@
     "starred-boards-description": "Markierte Boards erscheinen oben in ihrer Boardliste.",
     "subscribe": "Abonnieren",
     "team": "Team",
-    "this-board": "dieses Board",
+    "this-board": "diesem Board",
     "this-card": "diese Karte",
     "spent-time-hours": "Aufgewendete Zeit (Stunden)",
     "overtime-hours": "Mehrarbeit (Stunden)",
@@ -366,6 +389,7 @@
     "title": "Titel",
     "tracking": "Folgen",
     "tracking-info": "Sie werden über alle Änderungen an Karten benachrichtigt, an denen Sie als Ersteller oder Mitglied beteiligt sind.",
+    "type": "Typ",
     "unassign-member": "Mitglied entfernen",
     "unsaved-description": "Sie haben eine nicht gespeicherte Änderung.",
     "unwatch": "Beobachtung entfernen",
@@ -430,6 +454,7 @@
     "hours": "Stunden",
     "minutes": "Minuten",
     "seconds": "Sekunden",
+    "show-field-on-card": "Zeige dieses Feld auf der Karte",
     "yes": "Ja",
     "no": "Nein",
     "accounts": "Konten",
@@ -443,5 +468,11 @@
     "card-end": "Ende",
     "card-end-on": "Endet am",
     "editCardReceivedDatePopup-title": "Empfangsdatum ändern",
-    "editCardEndDatePopup-title": "Enddatum ändern"
+    "editCardEndDatePopup-title": "Enddatum ändern",
+    "assigned-by": "Zugewiesen von",
+    "requested-by": "Angefordert von",
+    "board-delete-notice": "Löschen kann nicht rückgängig gemacht werden. Sie werden alle Listen, Karten und Aktionen, die mit diesem Board verbunden sind, verlieren.",
+    "delete-board-confirm-popup": "Alle Listen, Karten, Labels und Akivitäten werden gelöscht und Sie können die Inhalte des Boards nicht wiederherstellen! Die Aktion kann nicht rückgängig gemacht werden.",
+    "boardDeletePopup-title": "Board löschen?",
+    "delete-board": "Board löschen"
 }

+ 33 - 2
i18n/el.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "commented on __card__: __comment__",
     "act-createBoard": "created __board__",
     "act-createCard": "added __card__ to __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "added __list__ to __board__",
     "act-addBoardMember": "added __member__ to __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "attached %s to %s",
     "activity-created": "created %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "excluded %s from %s",
     "activity-imported": "imported %s into %s from %s",
     "activity-imported-board": "imported %s from %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "This card has %s comment.",
     "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
     "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Έως",
     "card-due-on": "Έως τις",
     "card-spent": "Spent Time",
     "card-edit-attachments": "Edit attachments",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Edit labels",
     "card-edit-members": "Edit members",
     "card-labels-title": "Change the labels for the card.",
@@ -118,6 +121,8 @@
     "card-start": "Start",
     "card-start-on": "Starts on",
     "cardAttachmentsPopup-title": "Attach From",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Διαγραφή Κάρτας;",
     "cardDetailsActionsPopup-title": "Card Actions",
     "cardLabelsPopup-title": "Ετικέτες",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Create Board",
     "chooseBoardSourcePopup-title": "Import board",
     "createLabelPopup-title": "Create Label",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "current",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Ημερομηνία",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Ημερομηνία",
     "decline": "Decline",
     "default-avatar": "Default avatar",
     "delete": "Διαγραφή",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Delete Label?",
     "description": "Description",
     "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "Change start date",
     "editCardDueDatePopup-title": "Change due date",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "Change Label",
     "editNotificationPopup-title": "Edit Notification",
@@ -222,9 +242,12 @@
     "filter-clear": "Clear filter",
     "filter-no-label": "No label",
     "filter-no-member": "Κανένα μέλος",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Filter is on",
     "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
     "filter-to-selection": "Filter to selection",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Πλήρες Όνομα",
     "header-logo-title": "Go back to your boards page.",
     "hide-system-messages": "Hide system messages",
@@ -366,6 +389,7 @@
     "title": "Τίτλος",
     "tracking": "Tracking",
     "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
     "unassign-member": "Unassign member",
     "unsaved-description": "You have an unsaved description.",
     "unwatch": "Unwatch",
@@ -430,6 +454,7 @@
     "hours": "ώρες",
     "minutes": "λεπτά",
     "seconds": "δευτερόλεπτα",
+    "show-field-on-card": "Show this field on card",
     "yes": "Ναι",
     "no": "Όχι",
     "accounts": "Λογαριασμοί",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 33 - 2
i18n/en-GB.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "commented on __card__: __comment__",
     "act-createBoard": "created __board__",
     "act-createCard": "added __card__ to __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "added __list__ to __board__",
     "act-addBoardMember": "added __member__ to __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "attached %s to %s",
     "activity-created": "created %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "excluded %s from %s",
     "activity-imported": "imported %s into %s from %s",
     "activity-imported-board": "imported %s from %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "This card has %s comment.",
     "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
     "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
-    "card-delete-suggest-archive": "You can move a card to the Recycle Bin to remove it from the board and preserve its activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Due",
     "card-due-on": "Due on",
     "card-spent": "Spent Time",
     "card-edit-attachments": "Edit attachments",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Edit labels",
     "card-edit-members": "Edit members",
     "card-labels-title": "Change the labels for the card.",
@@ -118,6 +121,8 @@
     "card-start": "Start",
     "card-start-on": "Starts on",
     "cardAttachmentsPopup-title": "Attach From",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Delete Card?",
     "cardDetailsActionsPopup-title": "Card Actions",
     "cardLabelsPopup-title": "Labels",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Create Board",
     "chooseBoardSourcePopup-title": "Import board",
     "createLabelPopup-title": "Create Label",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "current",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Date",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Date",
     "decline": "Decline",
     "default-avatar": "Default avatar",
     "delete": "Delete",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Delete Label?",
     "description": "Description",
     "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "Change start date",
     "editCardDueDatePopup-title": "Change due date",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "Change Label",
     "editNotificationPopup-title": "Edit Notification",
@@ -222,9 +242,12 @@
     "filter-clear": "Clear filter",
     "filter-no-label": "No label",
     "filter-no-member": "No member",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Filter is on",
     "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
     "filter-to-selection": "Filter to selection",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Full Name",
     "header-logo-title": "Go back to your boards page.",
     "hide-system-messages": "Hide system messages",
@@ -366,6 +389,7 @@
     "title": "Title",
     "tracking": "Tracking",
     "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
     "unassign-member": "Unassign member",
     "unsaved-description": "You have an unsaved description.",
     "unwatch": "Unwatch",
@@ -430,6 +454,7 @@
     "hours": "hours",
     "minutes": "minutes",
     "seconds": "seconds",
+    "show-field-on-card": "Show this field on card",
     "yes": "Yes",
     "no": "No",
     "accounts": "Accounts",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 11 - 2
i18n/en.i18n.json

@@ -108,7 +108,7 @@
     "card-comments-title": "This card has %s comment.",
     "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
     "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Due",
     "card-due-on": "Due on",
     "card-spent": "Spent Time",
@@ -242,9 +242,12 @@
     "filter-clear": "Clear filter",
     "filter-no-label": "No label",
     "filter-no-member": "No member",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Filter is on",
     "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
     "filter-to-selection": "Filter to selection",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Full Name",
     "header-logo-title": "Go back to your boards page.",
     "hide-system-messages": "Hide system messages",
@@ -465,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 33 - 2
i18n/eo.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "commented on __card__: __comment__",
     "act-createBoard": "Kreiis __board__",
     "act-createCard": "Aldonis __card__ al __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "Aldonis __card__ al __board__",
     "act-addBoardMember": "Aldonis __member__ al __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "attached %s to %s",
     "activity-created": "Kreiis %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "excluded %s from %s",
     "activity-imported": "imported %s into %s from %s",
     "activity-imported-board": "imported %s from %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "This card has %s comment.",
     "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
     "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Due",
     "card-due-on": "Due on",
     "card-spent": "Spent Time",
     "card-edit-attachments": "Edit attachments",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Redakti etikedojn",
     "card-edit-members": "Redakti membrojn",
     "card-labels-title": "Change the labels for the card.",
@@ -118,6 +121,8 @@
     "card-start": "Komenco",
     "card-start-on": "Komencas je la",
     "cardAttachmentsPopup-title": "Attach From",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Delete Card?",
     "cardDetailsActionsPopup-title": "Card Actions",
     "cardLabelsPopup-title": "Etikedoj",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Krei tavolon",
     "chooseBoardSourcePopup-title": "Import board",
     "createLabelPopup-title": "Create Label",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "current",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Dato",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Dato",
     "decline": "Decline",
     "default-avatar": "Default avatar",
     "delete": "Delete",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Delete Label?",
     "description": "Description",
     "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "Redakti komencdaton",
     "editCardDueDatePopup-title": "Change due date",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "Ŝanĝi etikedon",
     "editNotificationPopup-title": "Edit Notification",
@@ -222,9 +242,12 @@
     "filter-clear": "Clear filter",
     "filter-no-label": "Nenia etikedo",
     "filter-no-member": "Nenia membro",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Filter is on",
     "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
     "filter-to-selection": "Filter to selection",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Full Name",
     "header-logo-title": "Go back to your boards page.",
     "hide-system-messages": "Hide system messages",
@@ -366,6 +389,7 @@
     "title": "Titolo",
     "tracking": "Tracking",
     "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
     "unassign-member": "Unassign member",
     "unsaved-description": "You have an unsaved description.",
     "unwatch": "Unwatch",
@@ -430,6 +454,7 @@
     "hours": "hours",
     "minutes": "minutes",
     "seconds": "seconds",
+    "show-field-on-card": "Show this field on card",
     "yes": "Yes",
     "no": "No",
     "accounts": "Accounts",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

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

@@ -7,6 +7,7 @@
     "act-addComment": "comentado en __card__: __comment__",
     "act-createBoard": "__board__ creado",
     "act-createCard": "agregada __card__ a __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "agregada __list__ a __board__",
     "act-addBoardMember": "agregado __member__ a __board__",
     "act-archivedBoard": "__board__ movido a Papelera de Reciclaje",
@@ -30,6 +31,7 @@
     "activity-archived": "%s movido a Papelera de Reciclaje",
     "activity-attached": "adjuntadas %s a %s",
     "activity-created": "creadas %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "excluidas %s de %s",
     "activity-imported": "importadas %s en %s de %s",
     "activity-imported-board": "importadas %s de %s",
@@ -111,6 +113,7 @@
     "card-due-on": "Vence en",
     "card-spent": "Tiempo Empleado",
     "card-edit-attachments": "Editar adjuntos",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Editar etiquetas",
     "card-edit-members": "Editar miembros",
     "card-labels-title": "Cambiar las etiquetas de la tarjeta.",
@@ -118,6 +121,8 @@
     "card-start": "Empieza",
     "card-start-on": "Empieza el",
     "cardAttachmentsPopup-title": "Adjuntar De",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "¿Borrar Tarjeta?",
     "cardDetailsActionsPopup-title": "Acciones de la Tarjeta",
     "cardLabelsPopup-title": "Etiquetas",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Crear Tablero",
     "chooseBoardSourcePopup-title": "Importar tablero",
     "createLabelPopup-title": "Crear Etiqueta",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "actual",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Fecha",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Fecha",
     "decline": "Rechazar",
     "default-avatar": "Avatar por defecto",
     "delete": "Borrar",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "¿Borrar Etiqueta?",
     "description": "Descripción",
     "disambiguateMultiLabelPopup-title": "Desambiguación de Acción de Etiqueta",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Límite TEP suave",
     "editCardStartDatePopup-title": "Cambiar fecha de inicio",
     "editCardDueDatePopup-title": "Cambiar fecha de vencimiento",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Cambiar tiempo empleado",
     "editLabelPopup-title": "Cambiar Etiqueta",
     "editNotificationPopup-title": "Editar Notificación",
@@ -222,9 +242,12 @@
     "filter-clear": "Sacar filtro",
     "filter-no-label": "Sin etiqueta",
     "filter-no-member": "No es miembro",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "El filtro está activado",
     "filter-on-desc": "Estás filtrando cartas en este tablero. Clickeá acá para editar el filtro.",
     "filter-to-selection": "Filtrar en la selección",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Nombre Completo",
     "header-logo-title": "Retroceder a tu página de tableros.",
     "hide-system-messages": "Esconder mensajes del sistema",
@@ -366,6 +389,7 @@
     "title": "Título",
     "tracking": "Seguimiento",
     "tracking-info": "Serás notificado de cualquier cambio a aquellas tarjetas en las que seas creador o miembro.",
+    "type": "Type",
     "unassign-member": "Desasignar miembro",
     "unsaved-description": "Tienes una descripción sin guardar.",
     "unwatch": "Dejar de seguir",
@@ -430,6 +454,7 @@
     "hours": "horas",
     "minutes": "minutos",
     "seconds": "segundos",
+    "show-field-on-card": "Show this field on card",
     "yes": "Si",
     "no": "No",
     "accounts": "Cuentas",
@@ -443,5 +468,11 @@
     "card-end": "Termino",
     "card-end-on": "Termina en",
     "editCardReceivedDatePopup-title": "Cambiar fecha de recepción",
-    "editCardEndDatePopup-title": "Cambiar fecha de término"
+    "editCardEndDatePopup-title": "Cambiar fecha de término",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 34 - 3
i18n/es.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "ha comentado en __card__: __comment__",
     "act-createBoard": "ha creado __board__",
     "act-createCard": "ha añadido __card__ a __list__",
+    "act-createCustomField": "creado el campo personalizado __customField__",
     "act-createList": "ha añadido __list__ a __board__",
     "act-addBoardMember": "ha añadido a __member__ a __board__",
     "act-archivedBoard": "__board__ se ha enviado a la papelera de reciclaje",
@@ -30,6 +31,7 @@
     "activity-archived": "%s se ha enviado a la papelera de reciclaje",
     "activity-attached": "ha adjuntado %s a %s",
     "activity-created": "ha creado %s",
+    "activity-customfield-created": "creado el campo personalizado %s",
     "activity-excluded": "ha excluido %s de %s",
     "activity-imported": "ha importado %s a %s desde %s",
     "activity-imported-board": "ha importado %s desde %s",
@@ -111,6 +113,7 @@
     "card-due-on": "Vence el",
     "card-spent": "Tiempo consumido",
     "card-edit-attachments": "Editar los adjuntos",
+    "card-edit-custom-fields": "Editar los campos personalizados",
     "card-edit-labels": "Editar las etiquetas",
     "card-edit-members": "Editar los miembros",
     "card-labels-title": "Cambia las etiquetas de la tarjeta",
@@ -118,6 +121,8 @@
     "card-start": "Comienza",
     "card-start-on": "Comienza el",
     "cardAttachmentsPopup-title": "Adjuntar desde",
+    "cardCustomField-datePopup-title": "Cambiar la fecha",
+    "cardCustomFieldsPopup-title": "Editar los campos personalizados",
     "cardDeletePopup-title": "¿Eliminar la tarjeta?",
     "cardDetailsActionsPopup-title": "Acciones de la tarjeta",
     "cardLabelsPopup-title": "Etiquetas",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Crear tablero",
     "chooseBoardSourcePopup-title": "Importar un tablero",
     "createLabelPopup-title": "Crear etiqueta",
+    "createCustomField": "Crear un campo",
+    "createCustomFieldPopup-title": "Crear un campo",
     "current": "actual",
+    "custom-field-delete-pop": "Se eliminará este campo personalizado de todas las tarjetas y se destruirá su historial. Esta acción no puede deshacerse.",
+    "custom-field-checkbox": "Casilla de verificación",
+    "custom-field-date": "Fecha",
+    "custom-field-dropdown": "Lista desplegable",
+    "custom-field-dropdown-none": "(nada)",
+    "custom-field-dropdown-options": "Opciones de la lista",
+    "custom-field-dropdown-options-placeholder": "Pulsa Intro para añadir más opciones",
+    "custom-field-dropdown-unknown": "(desconocido)",
+    "custom-field-number": "Número",
+    "custom-field-text": "Texto",
+    "custom-fields": "Campos personalizados",
     "date": "Fecha",
     "decline": "Declinar",
     "default-avatar": "Avatar por defecto",
     "delete": "Eliminar",
+    "deleteCustomFieldPopup-title": "¿Borrar el campo personalizado?",
     "deleteLabelPopup-title": "¿Eliminar la etiqueta?",
     "description": "Descripción",
     "disambiguateMultiLabelPopup-title": "Desambiguar la acción de etiqueta",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Límite del trabajo en proceso flexible",
     "editCardStartDatePopup-title": "Cambiar la fecha de comienzo",
     "editCardDueDatePopup-title": "Cambiar la fecha de vencimiento",
+    "editCustomFieldPopup-title": "Editar el campo",
     "editCardSpentTimePopup-title": "Cambiar el tiempo consumido",
     "editLabelPopup-title": "Cambiar la etiqueta",
     "editNotificationPopup-title": "Editar las notificaciones",
@@ -222,9 +242,12 @@
     "filter-clear": "Limpiar el filtro",
     "filter-no-label": "Sin etiqueta",
     "filter-no-member": "Sin miembro",
-    "filter-on": "Filtro activado",
+    "filter-no-custom-fields": "Sin campos personalizados",
+    "filter-on": "Filtrado activado",
     "filter-on-desc": "Estás filtrando tarjetas en este tablero. Haz clic aquí para editar el filtro.",
     "filter-to-selection": "Filtrar la selección",
+    "advanced-filter-label": "Filtrado avanzado",
+    "advanced-filter-description": "El filtrado avanzado permite escribir una cadena que contiene los siguientes operadores: == != <= >= && || ( ) Se utiliza un espacio como separador entre los operadores. Se pueden filtrar todos los campos personalizados escribiendo sus nombres y valores. Por ejemplo: Campo1 == Valor1. Nota: Si los campos o valores contienen espacios, debe encapsularlos entre comillas simples. Por ejemplo: 'Campo 1' == 'Valor 1'. También puedes combinar múltiples condiciones. Por ejemplo: C1 == V1 || C1 = V2. Normalmente todos los operadores se interpretan de izquierda a derecha. Puede cambiar el orden colocando corchetes. Por ejemplo: C1 == V1 y ( C2 == V2 || C2 == V3 )",
     "fullname": "Nombre completo",
     "header-logo-title": "Volver a tu página de tableros",
     "hide-system-messages": "Ocultar las notificaciones de actividad",
@@ -256,7 +279,7 @@
     "keyboard-shortcuts": "Atajos de teclado",
     "label-create": "Crear una etiqueta",
     "label-default": "etiqueta %s (por defecto)",
-    "label-delete-pop": "Esto eliminará esta etiqueta de todas las tarjetas y destruirá su historial. Esta acción no puede deshacerse.",
+    "label-delete-pop": "Se eliminará esta etiqueta de todas las tarjetas y se destruirá su historial. Esta acción no puede deshacerse.",
     "labels": "Etiquetas",
     "language": "Cambiar el idioma",
     "last-admin-desc": "No puedes cambiar roles porque debe haber al menos un administrador.",
@@ -366,6 +389,7 @@
     "title": "Título",
     "tracking": "Siguiendo",
     "tracking-info": "Serás notificado de cualquier cambio en las tarjetas en las que participas como creador o miembro.",
+    "type": "Tipo",
     "unassign-member": "Desvincular al miembro",
     "unsaved-description": "Tienes una descripción por añadir.",
     "unwatch": "Dejar de vigilar",
@@ -430,6 +454,7 @@
     "hours": "horas",
     "minutes": "minutos",
     "seconds": "segundos",
+    "show-field-on-card": "Mostrar este campo en la tarjeta",
     "yes": "Sí",
     "no": "No",
     "accounts": "Cuentas",
@@ -443,5 +468,11 @@
     "card-end": "Finalizado",
     "card-end-on": "Finalizado el",
     "editCardReceivedDatePopup-title": "Cambiar la fecha de recepción",
-    "editCardEndDatePopup-title": "Cambiar la fecha de finalización"
+    "editCardEndDatePopup-title": "Cambiar la fecha de finalización",
+    "assigned-by": "Asignado por",
+    "requested-by": "Solicitado por",
+    "board-delete-notice": "Se eliminarán todas las listas, tarjetas y acciones asociadas a este tablero. Esta acción no puede deshacerse.",
+    "delete-board-confirm-popup": "Se eliminarán todas las listas, tarjetas, etiquetas y actividades, y no podrás recuperar los contenidos del tablero. Esta acción no puede deshacerse.",
+    "boardDeletePopup-title": "¿Borrar el tablero?",
+    "delete-board": "Borrar el tablero"
 }

+ 33 - 2
i18n/eu.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "__card__ txartelean iruzkina: __comment__",
     "act-createBoard": "__board__ sortuta",
     "act-createCard": "__card__ __list__ zerrrendara gehituta",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "__list__ __board__ arbelera gehituta",
     "act-addBoardMember": "__member__ __board__ arbelera gehituta",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "%s %s(e)ra erantsita",
     "activity-created": "%s sortuta",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "%s %s(e)tik kanpo utzita",
     "activity-imported": "%s inportatuta %s(e)ra %s(e)tik",
     "activity-imported-board": "%s inportatuta %s(e)tik",
@@ -106,11 +108,12 @@
     "card-comments-title": "Txartel honek iruzkin %s  dauka.",
     "card-delete-notice": "Ezabaketa behin betiko da. Txartel honi lotutako ekintza guztiak galduko dituzu.",
     "card-delete-pop": "Ekintza guztiak ekintza jariotik kenduko dira eta ezin izango duzu txartela berrireki. Ez dago desegiterik.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Epemuga",
     "card-due-on": "Epemuga",
     "card-spent": "Erabilitako denbora",
     "card-edit-attachments": "Editatu eranskinak",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Editatu etiketak",
     "card-edit-members": "Editatu kideak",
     "card-labels-title": "Aldatu txartelaren etiketak",
@@ -118,6 +121,8 @@
     "card-start": "Hasiera",
     "card-start-on": "Hasiera",
     "cardAttachmentsPopup-title": "Erantsi hemendik",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Ezabatu txartela?",
     "cardDetailsActionsPopup-title": "Txartel-ekintzak",
     "cardLabelsPopup-title": "Etiketak",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Sortu arbela",
     "chooseBoardSourcePopup-title": "Inportatu arbela",
     "createLabelPopup-title": "Sortu etiketa",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "unekoa",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Data",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Data",
     "decline": "Ukatu",
     "default-avatar": "Lehenetsitako avatarra",
     "delete": "Ezabatu",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Ezabatu etiketa?",
     "description": "Deskripzioa",
     "disambiguateMultiLabelPopup-title": "Argitu etiketaren ekintza",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "WIP muga malgua",
     "editCardStartDatePopup-title": "Aldatu hasiera data",
     "editCardDueDatePopup-title": "Aldatu epemuga data",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Aldatu erabilitako denbora",
     "editLabelPopup-title": "Aldatu etiketa",
     "editNotificationPopup-title": "Editatu jakinarazpena",
@@ -222,9 +242,12 @@
     "filter-clear": "Garbitu iragazkia",
     "filter-no-label": "Etiketarik ez",
     "filter-no-member": "Kiderik ez",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Iragazkia gaituta dago",
     "filter-on-desc": "Arbel honetako txartela iragazten ari zara. Egin klik hemen iragazkia editatzeko.",
     "filter-to-selection": "Iragazketa aukerara",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Izen abizenak",
     "header-logo-title": "Itzuli zure arbelen orrira.",
     "hide-system-messages": "Ezkutatu sistemako mezuak",
@@ -366,6 +389,7 @@
     "title": "Izenburua",
     "tracking": "Jarraitzen",
     "tracking-info": "Sortzaile edo kide gisa parte-hartzen duzun txartelei egindako aldaketak jakinaraziko zaizkizu.",
+    "type": "Type",
     "unassign-member": "Kendu kidea",
     "unsaved-description": "Gorde gabeko deskripzio bat duzu",
     "unwatch": "Utzi ikuskatzeari",
@@ -430,6 +454,7 @@
     "hours": "ordu",
     "minutes": "minutu",
     "seconds": "segundo",
+    "show-field-on-card": "Show this field on card",
     "yes": "Bai",
     "no": "Ez",
     "accounts": "Kontuak",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 52 - 21
i18n/fa.i18n.json

@@ -7,12 +7,13 @@
     "act-addComment": "درج نظر برای __card__: __comment__",
     "act-createBoard": "__board__ ایجاد شد",
     "act-createCard": "__card__  به __list__ اضافه شد",
+    "act-createCustomField": "فیلد __customField__ ایجاد شد",
     "act-createList": "__list__ به __board__ اضافه شد",
     "act-addBoardMember": "__member__ به __board__ اضافه شد",
-    "act-archivedBoard": "__board__ moved to Recycle Bin",
-    "act-archivedCard": "__card__ moved to Recycle Bin",
-    "act-archivedList": "__list__ moved to Recycle Bin",
-    "act-archivedSwimlane": "__swimlane__ moved to Recycle Bin",
+    "act-archivedBoard": "__board__ به سطل زباله ریخته شد",
+    "act-archivedCard": "__card__ به سطل زباله منتقل شد",
+    "act-archivedList": "__list__ به سطل زباله منتقل شد",
+    "act-archivedSwimlane": "__swimlane__ به سطل زباله منتقل شد",
     "act-importBoard": "__board__ وارد شده",
     "act-importCard": "__card__ وارد شده",
     "act-importList": "__list__ وارد شده",
@@ -27,9 +28,10 @@
     "activities": "فعالیت ها",
     "activity": "فعالیت",
     "activity-added": "%s به %s اضافه شد",
-    "activity-archived": "%s moved to Recycle Bin",
+    "activity-archived": "%s به سطل زباله منتقل شد",
     "activity-attached": "%s به %s پیوست شد",
     "activity-created": "%s ایجاد شد",
+    "activity-customfield-created": "%s فیلدشخصی ایجاد شد",
     "activity-excluded": "%s  از %s مستثنی گردید",
     "activity-imported": "%s از %s وارد %s شد",
     "activity-imported-board": "%s از %s وارد شد",
@@ -64,19 +66,19 @@
     "and-n-other-card_plural": "و __count__ کارت دیگر",
     "apply": "اعمال",
     "app-is-offline": "Wekan در حال بارگذاری است. لطفا صبر کنید. نوسازی صفحه، منجر به از دست رفتن داده‌ها می‌شود. اگر Wekan بارگذاری نشد، لطفا بررسی کنید که سرور Wekan متوقف نشده باشد.",
-    "archive": "Move to Recycle Bin",
-    "archive-all": "Move All to Recycle Bin",
-    "archive-board": "Move Board to Recycle Bin",
-    "archive-card": "Move Card to Recycle Bin",
-    "archive-list": "Move List to Recycle Bin",
-    "archive-swimlane": "Move Swimlane to Recycle Bin",
-    "archive-selection": "Move selection to Recycle Bin",
-    "archiveBoardPopup-title": "Move Board to Recycle Bin?",
-    "archived-items": "Recycle Bin",
-    "archived-boards": "Boards in Recycle Bin",
+    "archive": "ریختن به سطل زباله",
+    "archive-all": "ریختن همه به سطل زباله",
+    "archive-board": "ریختن تخته به سطل زباله",
+    "archive-card": "ریختن کارت به سطل زباله",
+    "archive-list": "ریختن لیست به سطل زباله",
+    "archive-swimlane": "ریختن مسیرشنا به سطل زباله",
+    "archive-selection": "انتخاب شده ها را به سطل زباله بریز",
+    "archiveBoardPopup-title": "آیا تخته به سطل زباله ریخته شود؟",
+    "archived-items": "سطل زباله",
+    "archived-boards": "تخته هایی که به زباله ریخته شده است",
     "restore-board": "بازیابی تخته",
-    "no-archived-boards": "No Boards in Recycle Bin.",
-    "archives": "Recycle Bin",
+    "no-archived-boards": "هیچ تخته ای در سطل زباله وجود ندارد",
+    "archives": "سطل زباله",
     "assign-member": "تعیین عضو",
     "attached": "ضمیمه شده",
     "attachment": "ضمیمه",
@@ -102,15 +104,16 @@
     "board-view-lists": "فهرست‌ها",
     "bucket-example": "برای مثال چیزی شبیه \"لیست سبدها\"",
     "cancel": "انصراف",
-    "card-archived": "This card is moved to Recycle Bin.",
+    "card-archived": "این کارت به سطل زباله ریخته شده است",
     "card-comments-title": "این کارت دارای %s نظر است.",
     "card-delete-notice": "حذف دائمی. تمامی موارد مرتبط با این کارت از بین خواهند رفت.",
     "card-delete-pop": "همه اقدامات از این پردازه (خوراک) حذف خواهد شد و امکان بازگرداندن کارت وجود نخواهد داشت.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "ناشی از",
     "card-due-on": "مقتضی بر",
     "card-spent": "زمان صرف شده",
     "card-edit-attachments": "ویرایش ضمائم",
+    "card-edit-custom-fields": "ویرایش فیلدهای شخصی",
     "card-edit-labels": "ویرایش برچسب",
     "card-edit-members": "ویرایش اعضا",
     "card-labels-title": "تغییر برچسب کارت",
@@ -118,6 +121,8 @@
     "card-start": "شروع",
     "card-start-on": "شروع از",
     "cardAttachmentsPopup-title": "ضمیمه از",
+    "cardCustomField-datePopup-title": "تغییر تاریخ",
+    "cardCustomFieldsPopup-title": "ویرایش فیلدهای شخصی",
     "cardDeletePopup-title": "آیا می خواهید کارت را حذف کنید؟",
     "cardDetailsActionsPopup-title": "اعمال کارت",
     "cardLabelsPopup-title": "برچسب ها",
@@ -141,7 +146,7 @@
     "clipboard": "ذخیره در حافظه ویا بردار-رهاکن",
     "close": "بستن",
     "close-board": "بستن برد",
-    "close-board-pop": "You will be able to restore the board by clicking the “Recycle Bin” button from the home header.",
+    "close-board-pop": "شما با کلیک روی دکمه \"سطل زباله\" در قسمت خانه می توانید تخته را بازیابی کنید.",
     "color-black": "مشکی",
     "color-blue": "آبی",
     "color-green": "سبز",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "ایجاد تخته",
     "chooseBoardSourcePopup-title": "بارگذاری تخته",
     "createLabelPopup-title": "ایجاد برچسب",
+    "createCustomField": "ایجاد فیلد",
+    "createCustomFieldPopup-title": "ایجاد فیلد",
     "current": "جاری",
+    "custom-field-delete-pop": "این اقدام فیلدشخصی را بهمراه تمامی تاریخچه آن از کارت ها پاک می کند و برگشت پذیر نمی باشد",
+    "custom-field-checkbox": "جعبه انتخابی",
+    "custom-field-date": "تاریخ",
+    "custom-field-dropdown": "لیست افتادنی",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "لیست امکانات",
+    "custom-field-dropdown-options-placeholder": "کلید Enter را جهت افزودن امکانات بیشتر فشار دهید",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "عدد",
+    "custom-field-text": "متن",
+    "custom-fields": "فیلدهای شخصی",
     "date": "تاریخ",
     "decline": "رد",
     "default-avatar": "تصویر پیش فرض",
     "delete": "حذف",
+    "deleteCustomFieldPopup-title": "آیا فیلدشخصی پاک شود؟",
     "deleteLabelPopup-title": "آیا می خواهید برچسب را حذف کنید؟",
     "description": "توضیحات",
     "disambiguateMultiLabelPopup-title": "عمل ابهام زدایی از برچسب",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "تغییر تاریخ آغاز",
     "editCardDueDatePopup-title": "تغییر تاریخ بدلیل",
+    "editCustomFieldPopup-title": "ویرایش فیلد",
     "editCardSpentTimePopup-title": "تغییر زمان صرف شده",
     "editLabelPopup-title": "تغیر برچسب",
     "editNotificationPopup-title": "اصلاح اعلان",
@@ -222,9 +242,12 @@
     "filter-clear": "حذف صافی ـFilterـ",
     "filter-no-label": "بدون برچسب",
     "filter-no-member": "بدون عضو",
+    "filter-no-custom-fields": "هیچ فیلدشخصی ای وجود ندارد",
     "filter-on": "صافی ـFilterـ فعال است",
     "filter-on-desc": "شما صافی ـFilterـ برای کارتهای تخته را روشن کرده اید. جهت ویرایش کلیک نمایید.",
     "filter-to-selection": "صافی ـFilterـ برای موارد انتخابی",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "نام و نام خانوادگی",
     "header-logo-title": "بازگشت به صفحه تخته.",
     "hide-system-messages": "عدم نمایش پیامهای سیستمی",
@@ -366,6 +389,7 @@
     "title": "عنوان",
     "tracking": "پیگردی",
     "tracking-info": "شما از هرگونه تغییر در کارتهایی که بعنوان ایجاد کننده ویا عضو آن هستید، آگاه خواهید شد",
+    "type": "Type",
     "unassign-member": "عدم انتصاب کاربر",
     "unsaved-description": "شما توضیحات ذخیره نشده دارید.",
     "unwatch": "عدم دیده بانی",
@@ -430,6 +454,7 @@
     "hours": "ساعت",
     "minutes": "دقیقه",
     "seconds": "ثانیه",
+    "show-field-on-card": "Show this field on card",
     "yes": "بله",
     "no": "خیر",
     "accounts": "حساب‌ها",
@@ -443,5 +468,11 @@
     "card-end": "پایان",
     "card-end-on": "پایان در",
     "editCardReceivedDatePopup-title": "تغییر تاریخ رسید",
-    "editCardEndDatePopup-title": "تغییر تاریخ پایان"
+    "editCardEndDatePopup-title": "تغییر تاریخ پایان",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 32 - 1
i18n/fi.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "kommentoitu __card__: __comment__",
     "act-createBoard": "luotu __board__",
     "act-createCard": "lisätty __card__ listalle __list__",
+    "act-createCustomField": "luotu mukautettu kenttä __customField__",
     "act-createList": "lisätty __list__ taululle __board__",
     "act-addBoardMember": "lisätty __member__ taululle __board__",
     "act-archivedBoard": "__board__ siirretty roskakoriin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s siirretty roskakoriin",
     "activity-attached": "liitetty %s kohteeseen %s",
     "activity-created": "luotu %s",
+    "activity-customfield-created": "luotu mukautettu kenttä %s",
     "activity-excluded": "poistettu %s kohteesta %s",
     "activity-imported": "tuotu %s kohteeseen %s lähteestä %s",
     "activity-imported-board": "tuotu %s lähteestä %s",
@@ -111,6 +113,7 @@
     "card-due-on": "Erääntyy",
     "card-spent": "Käytetty aika",
     "card-edit-attachments": "Muokkaa liitetiedostoja",
+    "card-edit-custom-fields": "Muokkaa mukautettuja kenttiä",
     "card-edit-labels": "Muokkaa tunnisteita",
     "card-edit-members": "Muokkaa jäseniä",
     "card-labels-title": "Muokkaa kortin tunnisteita.",
@@ -118,6 +121,8 @@
     "card-start": "Alkaa",
     "card-start-on": "Alkaa",
     "cardAttachmentsPopup-title": "Liitä mistä",
+    "cardCustomField-datePopup-title": "Muokkaa päivää",
+    "cardCustomFieldsPopup-title": "Muokkaa mukautettuja kenttiä",
     "cardDeletePopup-title": "Poista kortti?",
     "cardDetailsActionsPopup-title": "Kortti toimet",
     "cardLabelsPopup-title": "Tunnisteet",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Luo taulu",
     "chooseBoardSourcePopup-title": "Tuo taulu",
     "createLabelPopup-title": "Luo tunniste",
+    "createCustomField": "Luo kenttä",
+    "createCustomFieldPopup-title": "Luo kenttä",
     "current": "nykyinen",
+    "custom-field-delete-pop": "Tätä ei voi peruuttaa. Tämä poistaa tämän mukautetun kentän kaikista korteista ja poistaa sen historian.",
+    "custom-field-checkbox": "Valintaruutu",
+    "custom-field-date": "Päivämäärä",
+    "custom-field-dropdown": "Pudotusvalikko",
+    "custom-field-dropdown-none": "(ei mitään)",
+    "custom-field-dropdown-options": "Luettelon vaihtoehdot",
+    "custom-field-dropdown-options-placeholder": "Paina Enter lisätäksesi lisää vaihtoehtoja",
+    "custom-field-dropdown-unknown": "(tuntematon)",
+    "custom-field-number": "Numero",
+    "custom-field-text": "Teksti",
+    "custom-fields": "Mukautetut kentät",
     "date": "Päivämäärä",
     "decline": "Kieltäydy",
     "default-avatar": "Oletus profiilikuva",
     "delete": "Poista",
+    "deleteCustomFieldPopup-title": "Poista mukautettu kenttä?",
     "deleteLabelPopup-title": "Poista tunniste?",
     "description": "Kuvaus",
     "disambiguateMultiLabelPopup-title": "Yksikäsitteistä tunniste toiminta",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Pehmeä WIP raja",
     "editCardStartDatePopup-title": "Muokkaa aloituspäivää",
     "editCardDueDatePopup-title": "Muokkaa eräpäivää",
+    "editCustomFieldPopup-title": "Muokkaa kenttää",
     "editCardSpentTimePopup-title": "Muuta käytettyä aikaa",
     "editLabelPopup-title": "Muokkaa tunnistetta",
     "editNotificationPopup-title": "Muokkaa ilmoituksia",
@@ -222,9 +242,12 @@
     "filter-clear": "Poista suodatin",
     "filter-no-label": "Ei tunnistetta",
     "filter-no-member": "Ei jäseniä",
+    "filter-no-custom-fields": "Ei mukautettuja kenttiä",
     "filter-on": "Suodatus on päällä",
     "filter-on-desc": "Suodatat kortteja tällä taululla. Klikkaa tästä muokataksesi suodatinta.",
     "filter-to-selection": "Suodata valintaan",
+    "advanced-filter-label": "Edistynyt suodatin",
+    "advanced-filter-description": "Edistynyt suodatin mahdollistaa merkkijonon, joka sisältää seuraavat operaattorit: ==! = <=> = && || () Operaattorien välissä käytetään välilyöntiä. Voit suodattaa kaikki mukautetut kentät kirjoittamalla niiden nimet ja arvot. Esimerkiksi: Field1 == Value1. Huomaa: Jos kentillä tai arvoilla on välilyöntejä, sinun on sijoitettava ne yksittäisiin lainausmerkkeihin. Esimerkki: 'Kenttä 1' == 'Arvo 1'. Voit myös yhdistää useita ehtoja. Esimerkiksi: F1 == V1 || F1 = V2. Yleensä kaikki operaattorit tulkitaan vasemmalta oikealle. Voit muuttaa järjestystä asettamalla sulkuja. Esimerkiksi: F1 == V1 ja (F2 == V2 || F2 == V3)",
     "fullname": "Koko nimi",
     "header-logo-title": "Palaa taulut sivullesi.",
     "hide-system-messages": "Piilota järjestelmäviestit",
@@ -366,6 +389,7 @@
     "title": "Otsikko",
     "tracking": "Ilmoitukset",
     "tracking-info": "Sinulle ilmoitetaan muutoksista korteissa joihin olet osallistunut luojana tai jäsenenä.",
+    "type": "Tyyppi",
     "unassign-member": "Peru jäsenvalinta",
     "unsaved-description": "Sinulla on tallentamaton kuvaus.",
     "unwatch": "Lopeta seuraaminen",
@@ -430,6 +454,7 @@
     "hours": "tuntia",
     "minutes": "minuuttia",
     "seconds": "sekuntia",
+    "show-field-on-card": "Näytä tämä kenttä kortilla",
     "yes": "Kyllä",
     "no": "Ei",
     "accounts": "Tilit",
@@ -443,5 +468,11 @@
     "card-end": "Loppuu",
     "card-end-on": "Loppuu",
     "editCardReceivedDatePopup-title": "Vaihda vastaanottamispäivää",
-    "editCardEndDatePopup-title": "Vaihda loppumispäivää"
+    "editCardEndDatePopup-title": "Vaihda loppumispäivää",
+    "assigned-by": "Tehtävänantaja",
+    "requested-by": "Pyytäjä",
+    "board-delete-notice": "Poistaminen on lopullista. Menetät kaikki listat, kortit ja toimet tällä taululla.",
+    "delete-board-confirm-popup": "Kaikki listat, kortit, tunnisteet ja toimet poistetaan ja et pysty palauttamaan taulun sisältöä. Tätä ei voi peruuttaa.",
+    "boardDeletePopup-title": "Poista taulu?",
+    "delete-board": "Poista taulu"
 }

+ 32 - 1
i18n/fr.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "a commenté __card__ : __comment__",
     "act-createBoard": "a créé __board__",
     "act-createCard": "a ajouté __card__ à __list__",
+    "act-createCustomField": "a créé le champ personnalisé __customField__",
     "act-createList": "a ajouté __list__ à __board__",
     "act-addBoardMember": "a ajouté __member__ à __board__",
     "act-archivedBoard": "__board__ a été déplacé vers la corbeille",
@@ -30,6 +31,7 @@
     "activity-archived": "%s a été déplacé vers la corbeille",
     "activity-attached": "a attaché %s à %s",
     "activity-created": "a créé %s",
+    "activity-customfield-created": "a créé le champ personnalisé %s",
     "activity-excluded": "a exclu %s de %s",
     "activity-imported": "a importé %s vers %s depuis %s",
     "activity-imported-board": "a importé %s depuis %s",
@@ -111,6 +113,7 @@
     "card-due-on": "Échéance le",
     "card-spent": "Temps passé",
     "card-edit-attachments": "Modifier les pièces jointes",
+    "card-edit-custom-fields": "Éditer les champs personnalisés",
     "card-edit-labels": "Modifier les étiquettes",
     "card-edit-members": "Modifier les membres",
     "card-labels-title": "Modifier les étiquettes de la carte.",
@@ -118,6 +121,8 @@
     "card-start": "Début",
     "card-start-on": "Commence le",
     "cardAttachmentsPopup-title": "Joindre depuis",
+    "cardCustomField-datePopup-title": "Changer la date",
+    "cardCustomFieldsPopup-title": "Éditer les champs personnalisés",
     "cardDeletePopup-title": "Supprimer la carte ?",
     "cardDetailsActionsPopup-title": "Actions sur la carte",
     "cardLabelsPopup-title": "Étiquettes",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Créer un tableau",
     "chooseBoardSourcePopup-title": "Importer un tableau",
     "createLabelPopup-title": "Créer une étiquette",
+    "createCustomField": "Créer un champ personnalisé",
+    "createCustomFieldPopup-title": "Créer un champ personnalisé",
     "current": "actuel",
+    "custom-field-delete-pop": "Cette action n'est pas réversible. Elle supprimera ce champ personnalisé de toutes les cartes et détruira son historique.",
+    "custom-field-checkbox": "Case à cocher",
+    "custom-field-date": "Date",
+    "custom-field-dropdown": "Liste de choix",
+    "custom-field-dropdown-none": "(aucun)",
+    "custom-field-dropdown-options": "Options de liste",
+    "custom-field-dropdown-options-placeholder": "Appuyez sur Entrée pour ajouter d'autres options",
+    "custom-field-dropdown-unknown": "(inconnu)",
+    "custom-field-number": "Nombre",
+    "custom-field-text": "Texte",
+    "custom-fields": "Champs personnalisés",
     "date": "Date",
     "decline": "Refuser",
     "default-avatar": "Avatar par défaut",
     "delete": "Supprimer",
+    "deleteCustomFieldPopup-title": "Supprimer le champ personnalisé ?",
     "deleteLabelPopup-title": "Supprimer l'étiquette ?",
     "description": "Description",
     "disambiguateMultiLabelPopup-title": "Préciser l'action sur l'étiquette",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Limite WIP douce",
     "editCardStartDatePopup-title": "Modifier la date de début",
     "editCardDueDatePopup-title": "Modifier la date d'échéance",
+    "editCustomFieldPopup-title": "Éditer le champ personnalisé",
     "editCardSpentTimePopup-title": "Changer le temps passé",
     "editLabelPopup-title": "Modifier l'étiquette",
     "editNotificationPopup-title": "Modifier la notification",
@@ -222,9 +242,12 @@
     "filter-clear": "Supprimer les filtres",
     "filter-no-label": "Aucune étiquette",
     "filter-no-member": "Aucun membre",
+    "filter-no-custom-fields": "Pas de champs personnalisés",
     "filter-on": "Le filtre est actif",
     "filter-on-desc": "Vous êtes en train de filtrer les cartes sur ce tableau. Cliquez ici pour modifier les filtres.",
     "filter-to-selection": "Filtre vers la sélection",
+    "advanced-filter-label": "Filtre avancé",
+    "advanced-filter-description": "Le filtre avancé permet d'écrire une chaîne contenant les opérateur suivants : == != <= >= && || ( ). Les opérateurs doivent être séparés par des espaces. Vous pouvez filtrer tous les champs personnalisés en saisissant leur nom et leur valeur. Par exemple : champ1 == valeur1. Note : si des champs ou valeurs contiennent des espaces, vous devez les mettre entre apostrophes. Par exemple : 'champ 1' = 'valeur 1'. Il est également possible de combiner plusieurs conditions. Par exemple : f1 == v1 || f2 == v2. Normalement, tous les opérateurs sont interprétés de gauche à droite. Vous pouvez changer l'ordre à l'aide de parenthèses. Par exemple : f1 == v1 and (f2 == v2 || f2 == v3).",
     "fullname": "Nom complet",
     "header-logo-title": "Retourner à la page des tableaux",
     "hide-system-messages": "Masquer les messages système",
@@ -366,6 +389,7 @@
     "title": "Titre",
     "tracking": "Suivi",
     "tracking-info": "Vous serez notifié de toute modification concernant les cartes pour lesquelles vous êtes impliqué en tant que créateur ou membre.",
+    "type": "Type",
     "unassign-member": "Retirer le membre",
     "unsaved-description": "Vous avez une description non sauvegardée",
     "unwatch": "Arrêter de suivre",
@@ -430,6 +454,7 @@
     "hours": "heures",
     "minutes": "minutes",
     "seconds": "secondes",
+    "show-field-on-card": "Afficher ce champ sur la carte",
     "yes": "Oui",
     "no": "Non",
     "accounts": "Comptes",
@@ -443,5 +468,11 @@
     "card-end": "Fin",
     "card-end-on": "Se termine le",
     "editCardReceivedDatePopup-title": "Changer la date de réception",
-    "editCardEndDatePopup-title": "Changer la date de fin"
+    "editCardEndDatePopup-title": "Changer la date de fin",
+    "assigned-by": "Assigné par",
+    "requested-by": "Demandé par",
+    "board-delete-notice": "La suppression est définitive. Vous perdrez toutes vos listes, cartes et actions associées à ce tableau.",
+    "delete-board-confirm-popup": "Toutes les listes, cartes, étiquettes et activités seront supprimées et vous ne pourrez pas retrouver le contenu du tableau. Il n'y a pas d'annulation possible.",
+    "boardDeletePopup-title": "Supprimer le tableau ?",
+    "delete-board": "Supprimer le tableau"
 }

+ 33 - 2
i18n/gl.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "commented on __card__: __comment__",
     "act-createBoard": "created __board__",
     "act-createCard": "added __card__ to __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "added __list__ to __board__",
     "act-addBoardMember": "added __member__ to __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "attached %s to %s",
     "activity-created": "created %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "excluded %s from %s",
     "activity-imported": "imported %s into %s from %s",
     "activity-imported-board": "imported %s from %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "This card has %s comment.",
     "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
     "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Due",
     "card-due-on": "Due on",
     "card-spent": "Spent Time",
     "card-edit-attachments": "Editar anexos",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Editar etiquetas",
     "card-edit-members": "Editar membros",
     "card-labels-title": "Cambiar as etiquetas da tarxeta.",
@@ -118,6 +121,8 @@
     "card-start": "Start",
     "card-start-on": "Starts on",
     "cardAttachmentsPopup-title": "Attach From",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Delete Card?",
     "cardDetailsActionsPopup-title": "Card Actions",
     "cardLabelsPopup-title": "Etiquetas",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Crear taboleiro",
     "chooseBoardSourcePopup-title": "Importar taboleiro",
     "createLabelPopup-title": "Crear etiqueta",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "actual",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Data",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Data",
     "decline": "Rexeitar",
     "default-avatar": "Avatar predeterminado",
     "delete": "Eliminar",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Eliminar a etiqueta?",
     "description": "Descrición",
     "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "Cambiar a data de inicio",
     "editCardDueDatePopup-title": "Cambiar a data límite",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "Cambiar a etiqueta",
     "editNotificationPopup-title": "Editar a notificación",
@@ -222,9 +242,12 @@
     "filter-clear": "Limpar filtro",
     "filter-no-label": "Non hai etiquetas",
     "filter-no-member": "Non hai membros",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "O filtro está activado",
     "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
     "filter-to-selection": "Filter to selection",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Nome completo",
     "header-logo-title": "Retornar á páxina dos seus taboleiros.",
     "hide-system-messages": "Agochar as mensaxes do sistema",
@@ -366,6 +389,7 @@
     "title": "Título",
     "tracking": "Seguimento",
     "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
     "unassign-member": "Unassign member",
     "unsaved-description": "You have an unsaved description.",
     "unwatch": "Unwatch",
@@ -430,6 +454,7 @@
     "hours": "hours",
     "minutes": "minutes",
     "seconds": "seconds",
+    "show-field-on-card": "Show this field on card",
     "yes": "Yes",
     "no": "No",
     "accounts": "Accounts",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 32 - 1
i18n/he.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "התקבלה תגובה על הכרטיס __card__:‏ __comment__",
     "act-createBoard": "הלוח __board__ נוצר",
     "act-createCard": "הכרטיס __card__ התווסף לרשימה __list__",
+    "act-createCustomField": "נוצר שדה בהתאמה אישית __customField__",
     "act-createList": "הרשימה __list__ התווספה ללוח __board__",
     "act-addBoardMember": "המשתמש __member__ נוסף ללוח __board__",
     "act-archivedBoard": "__board__ הועבר לסל המחזור",
@@ -30,6 +31,7 @@
     "activity-archived": "%s הועבר לסל המחזור",
     "activity-attached": "%s צורף ל%s",
     "activity-created": "%s נוצר",
+    "activity-customfield-created": "נוצר שדה בהתאמה אישית %s",
     "activity-excluded": "%s לא נכלל ב%s",
     "activity-imported": "%s ייובא מ%s אל %s",
     "activity-imported-board": "%s ייובא מ%s",
@@ -111,6 +113,7 @@
     "card-due-on": "תאריך יעד",
     "card-spent": "זמן שהושקע",
     "card-edit-attachments": "עריכת קבצים מצורפים",
+    "card-edit-custom-fields": "עריכת שדות בהתאמה אישית",
     "card-edit-labels": "עריכת תוויות",
     "card-edit-members": "עריכת חברים",
     "card-labels-title": "שינוי תוויות לכרטיס.",
@@ -118,6 +121,8 @@
     "card-start": "התחלה",
     "card-start-on": "מתחיל ב־",
     "cardAttachmentsPopup-title": "לצרף מ־",
+    "cardCustomField-datePopup-title": "החלפת תאריך",
+    "cardCustomFieldsPopup-title": "עריכת שדות בהתאמה אישית",
     "cardDeletePopup-title": "למחוק כרטיס?",
     "cardDetailsActionsPopup-title": "פעולות על הכרטיס",
     "cardLabelsPopup-title": "תוויות",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "יצירת לוח",
     "chooseBoardSourcePopup-title": "ייבוא לוח",
     "createLabelPopup-title": "יצירת תווית",
+    "createCustomField": "יצירת שדה",
+    "createCustomFieldPopup-title": "יצירת שדה",
     "current": "נוכחי",
+    "custom-field-delete-pop": "אין אפשרות לבטל את הפעולה. הפעולה תסיר את השדה שהותאם אישית מכל הכרטיסים ותשמיד את ההיסטוריה שלו.",
+    "custom-field-checkbox": "תיבת סימון",
+    "custom-field-date": "תאריך",
+    "custom-field-dropdown": "רשימה נגללת",
+    "custom-field-dropdown-none": "(ללא)",
+    "custom-field-dropdown-options": "אפשרויות רשימה",
+    "custom-field-dropdown-options-placeholder": "יש ללחוץ על enter כדי להוסיף עוד אפשרויות",
+    "custom-field-dropdown-unknown": "(לא ידוע)",
+    "custom-field-number": "מספר",
+    "custom-field-text": "טקסט",
+    "custom-fields": "שדות מותאמים אישית",
     "date": "תאריך",
     "decline": "סירוב",
     "default-avatar": "תמונת משתמש כבררת מחדל",
     "delete": "מחיקה",
+    "deleteCustomFieldPopup-title": "למחוק שדה מותאם אישית?",
     "deleteLabelPopup-title": "למחוק תווית?",
     "description": "תיאור",
     "disambiguateMultiLabelPopup-title": "הבהרת פעולת תווית",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "מגבלת „בעבודה” רכה",
     "editCardStartDatePopup-title": "שינוי מועד התחלה",
     "editCardDueDatePopup-title": "שינוי מועד סיום",
+    "editCustomFieldPopup-title": "עריכת שדה",
     "editCardSpentTimePopup-title": "שינוי הזמן שהושקע",
     "editLabelPopup-title": "שינוי תווית",
     "editNotificationPopup-title": "שינוי דיווח",
@@ -222,9 +242,12 @@
     "filter-clear": "ניקוי המסנן",
     "filter-no-label": "אין תווית",
     "filter-no-member": "אין חבר כזה",
+    "filter-no-custom-fields": "אין שדות מותאמים אישית",
     "filter-on": "המסנן פועל",
     "filter-on-desc": "מסנן כרטיסים פעיל בלוח זה. יש ללחוץ כאן לעריכת המסנן.",
     "filter-to-selection": "סינון לבחירה",
+    "advanced-filter-label": "מסנן מתקדם",
+    "advanced-filter-description": "המסנן המתקדם מאפשר לך לכתוב מחרוזת שמכילה את הפעולות הבאות: == != <= >= && || ( ) רווח מכהן כמפריד בין הפעולות. ניתן לסנן את כל השדות המותאמים אישית על ידי הקלדת שמם והערך שלהם. למשל: שדה1 == ערך1. לתשומת לבך: אם שדות או ערכים מכילים רווח, יש לעטוף אותם במירכא מכל צד. למשל: 'שדה 1' == 'ערך 1'. ניתן גם לשלב מגוון תנאים. למשל: F1 == V1 || F1 = V2. על פי רוב כל הפעולות מפוענחות משמאל לימין. ניתן לשנות את הסדר על ידי הצבת סוגריים. למשל: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "שם מלא",
     "header-logo-title": "חזרה לדף הלוחות שלך.",
     "hide-system-messages": "הסתרת הודעות מערכת",
@@ -366,6 +389,7 @@
     "title": "כותרת",
     "tracking": "מעקב",
     "tracking-info": "על כל שינוי בכרטיסים בהם הייתה לך מעורבות ברמת היצירה או כחברות תגיע אליך הודעה.",
+    "type": "סוג",
     "unassign-member": "ביטול הקצאת חבר",
     "unsaved-description": "יש לך תיאור לא שמור.",
     "unwatch": "ביטול מעקב",
@@ -430,6 +454,7 @@
     "hours": "שעות",
     "minutes": "דקות",
     "seconds": "שניות",
+    "show-field-on-card": "הצגת שדה זה בכרטיס",
     "yes": "כן",
     "no": "לא",
     "accounts": "חשבונות",
@@ -443,5 +468,11 @@
     "card-end": "סיום",
     "card-end-on": "מועד הסיום",
     "editCardReceivedDatePopup-title": "החלפת מועד הקבלה",
-    "editCardEndDatePopup-title": "החלפת מועד הסיום"
+    "editCardEndDatePopup-title": "החלפת מועד הסיום",
+    "assigned-by": "הוקצה על ידי",
+    "requested-by": "התבקש על ידי",
+    "board-delete-notice": "מחיקה היא לצמיתות. כל הרשימות, הכרטיבים והפעולות שקשורים בלוח הזה ילכו לאיבוד.",
+    "delete-board-confirm-popup": "כל הרשימות, הכרטיסים, התווית והפעולות יימחקו ולא תהיה לך דרך לשחזר את תכני הלוח. אין אפשרות לבטל.",
+    "boardDeletePopup-title": "למחוק את הלוח?",
+    "delete-board": "מחיקת לוח"
 }

+ 49 - 18
i18n/hu.i18n.json

@@ -7,11 +7,12 @@
     "act-addComment": "hozzászólt a(z) __card__ kártyán: __comment__",
     "act-createBoard": "létrehozta a táblát: __board__",
     "act-createCard": "__card__ kártyát adott hozzá a listához: __list__",
+    "act-createCustomField": "létrehozta a(z) __customField__ egyéni listát",
     "act-createList": "__list__ listát adott hozzá a táblához: __board__",
     "act-addBoardMember": "__member__ tagot hozzáadta a táblához: __board__",
-    "act-archivedBoard": "A __board__ tábla a lomtárba került.",
-    "act-archivedCard": "A __card__ kártya a lomtárba került.",
-    "act-archivedList": "A __list__ lista a lomtárba került.",
+    "act-archivedBoard": "A(z) __board__ tábla áthelyezve a lomtárba",
+    "act-archivedCard": "A(z) __card__ kártya áthelyezve a lomtárba",
+    "act-archivedList": "A(z) __list__ lista áthelyezve a lomtárba",
     "act-archivedSwimlane": "__swimlane__ moved to Recycle Bin",
     "act-importBoard": "importálta a táblát: __board__",
     "act-importCard": "importálta a kártyát: __card__",
@@ -27,9 +28,10 @@
     "activities": "Tevékenységek",
     "activity": "Tevékenység",
     "activity-added": "%s hozzáadva ehhez: %s",
-    "activity-archived": "%s lomtárba helyezve",
+    "activity-archived": "%s áthelyezve a lomtárba",
     "activity-attached": "%s mellékletet csatolt a kártyához: %s",
     "activity-created": "%s létrehozva",
+    "activity-customfield-created": "létrehozta a(z) %s egyéni mezőt",
     "activity-excluded": "%s kizárva innen: %s",
     "activity-imported": "%s importálva ebbe: %s, innen: %s",
     "activity-imported-board": "%s importálva innen: %s",
@@ -97,7 +99,7 @@
     "boardChangeWatchPopup-title": "Megfigyelés megváltoztatása",
     "boardMenuPopup-title": "Tábla menü",
     "boards": "Táblák",
-    "board-view": "Board View",
+    "board-view": "Tábla nézet",
     "board-view-swimlanes": "Swimlanes",
     "board-view-lists": "Listák",
     "bucket-example": "Mint például „Bakancslista”",
@@ -106,11 +108,12 @@
     "card-comments-title": "Ez a kártya %s hozzászólást tartalmaz.",
     "card-delete-notice": "A törlés végleges. Az összes műveletet elveszíti, amely ehhez a kártyához tartozik.",
     "card-delete-pop": "Az összes művelet el lesz távolítva a tevékenységlistából, és nem lesz képes többé újra megnyitni a kártyát. Nincs visszaállítási lehetőség.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Esedékes",
     "card-due-on": "Esedékes ekkor",
     "card-spent": "Eltöltött idő",
     "card-edit-attachments": "Mellékletek szerkesztése",
+    "card-edit-custom-fields": "Egyéni mezők szerkesztése",
     "card-edit-labels": "Címkék szerkesztése",
     "card-edit-members": "Tagok szerkesztése",
     "card-labels-title": "A kártya címkéinek megváltoztatása.",
@@ -118,6 +121,8 @@
     "card-start": "Kezdés",
     "card-start-on": "Kezdés ekkor",
     "cardAttachmentsPopup-title": "Innen csatolva",
+    "cardCustomField-datePopup-title": "Dátum megváltoztatása",
+    "cardCustomFieldsPopup-title": "Egyéni mezők szerkesztése",
     "cardDeletePopup-title": "Törli a kártyát?",
     "cardDetailsActionsPopup-title": "Kártyaműveletek",
     "cardLabelsPopup-title": "Címkék",
@@ -160,18 +165,32 @@
     "confirm-checklist-delete-dialog": "Biztosan törölni szeretné az ellenőrzőlistát?",
     "copy-card-link-to-clipboard": "Kártya hivatkozásának másolása a vágólapra",
     "copyCardPopup-title": "Kártya másolása",
-    "copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
-    "copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
-    "copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
+    "copyChecklistToManyCardsPopup-title": "Ellenőrzőlista sablon másolása több kártyára",
+    "copyChecklistToManyCardsPopup-instructions": "A célkártyák címe és a leírások ebben a JSON formátumban",
+    "copyChecklistToManyCardsPopup-format": "[ {\"title\": \"Első kártya címe\", \"description\":\"Első kártya leírása\"}, {\"title\":\"Második kártya címe\",\"description\":\"Második kártya leírása\"},{\"title\":\"Utolsó kártya címe\",\"description\":\"Utolsó kártya leírása\"} ]",
     "create": "Létrehozás",
     "createBoardPopup-title": "Tábla létrehozása",
     "chooseBoardSourcePopup-title": "Tábla importálása",
     "createLabelPopup-title": "Címke létrehozása",
+    "createCustomField": "Mező létrehozása",
+    "createCustomFieldPopup-title": "Mező létrehozása",
     "current": "jelenlegi",
+    "custom-field-delete-pop": "Nincs visszavonás. Ez el fogja távolítani az egyéni mezőt az összes kártyáról, és megsemmisíti az előzményeit.",
+    "custom-field-checkbox": "Jelölőnégyzet",
+    "custom-field-date": "Dátum",
+    "custom-field-dropdown": "Legördülő lista",
+    "custom-field-dropdown-none": "(nincs)",
+    "custom-field-dropdown-options": "Lista lehetőségei",
+    "custom-field-dropdown-options-placeholder": "Nyomja meg az Enter billentyűt több lehetőség hozzáadásához",
+    "custom-field-dropdown-unknown": "(ismeretlen)",
+    "custom-field-number": "Szám",
+    "custom-field-text": "Szöveg",
+    "custom-fields": "Egyéni mezők",
     "date": "Dátum",
     "decline": "Elutasítás",
     "default-avatar": "Alapértelmezett avatár",
     "delete": "Törlés",
+    "deleteCustomFieldPopup-title": "Törli az egyéni mezőt?",
     "deleteLabelPopup-title": "Törli a címkét?",
     "description": "Leírás",
     "disambiguateMultiLabelPopup-title": "Címkeművelet egyértelműsítése",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Gyenge WIP korlát",
     "editCardStartDatePopup-title": "Kezdődátum megváltoztatása",
     "editCardDueDatePopup-title": "Esedékesség dátumának megváltoztatása",
+    "editCustomFieldPopup-title": "Mező szerkesztése",
     "editCardSpentTimePopup-title": "Eltöltött idő megváltoztatása",
     "editLabelPopup-title": "Címke megváltoztatása",
     "editNotificationPopup-title": "Értesítés szerkesztése",
@@ -222,9 +242,12 @@
     "filter-clear": "Szűrő törlése",
     "filter-no-label": "Nincs címke",
     "filter-no-member": "Nincs tag",
+    "filter-no-custom-fields": "Nincsenek egyéni mezők",
     "filter-on": "Szűrő bekapcsolva",
     "filter-on-desc": "A kártyaszűrés be van kapcsolva ezen a táblán. Kattintson ide a szűrő szerkesztéséhez.",
     "filter-to-selection": "Szűrés a kijelöléshez",
+    "advanced-filter-label": "Speciális szűrő",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Teljes név",
     "header-logo-title": "Vissza a táblák oldalára.",
     "hide-system-messages": "Rendszerüzenetek elrejtése",
@@ -366,6 +389,7 @@
     "title": "Cím",
     "tracking": "Követés",
     "tracking-info": "Értesítve lesz az összes olyan kártya változásáról, amelyen létrehozóként vagy tagként vesz részt.",
+    "type": "Típus",
     "unassign-member": "Tag hozzárendelésének megszüntetése",
     "unsaved-description": "Van egy mentetlen leírása.",
     "unwatch": "Megfigyelés megszüntetése",
@@ -374,12 +398,12 @@
     "uploaded-avatar": "Egy avatár feltöltve",
     "username": "Felhasználónév",
     "view-it": "Megtekintés",
-    "warn-list-archived": "warning: this card is in an list at Recycle Bin",
+    "warn-list-archived": "figyelem: ez a kártya egy lomtárban lévő listán van",
     "watch": "Megfigyelés",
     "watching": "Megfigyelés",
     "watching-info": "Értesítve lesz a táblán lévő összes változásról",
     "welcome-board": "Üdvözlő tábla",
-    "welcome-swimlane": "Milestone 1",
+    "welcome-swimlane": "1. mérföldkő",
     "welcome-list1": "Alapok",
     "welcome-list2": "Speciális",
     "what-to-do": "Mit szeretne tenni?",
@@ -430,18 +454,25 @@
     "hours": "óra",
     "minutes": "perc",
     "seconds": "másodperc",
+    "show-field-on-card": "A mező megjelenítése a kártyán",
     "yes": "Igen",
     "no": "Nem",
     "accounts": "Fiókok",
     "accounts-allowEmailChange": "E-mail megváltoztatásának engedélyezése",
-    "accounts-allowUserNameChange": "Allow Username Change",
+    "accounts-allowUserNameChange": "Felhasználónév megváltoztatásának engedélyezése",
     "createdAt": "Létrehozva",
     "verified": "Ellenőrizve",
     "active": "Aktív",
-    "card-received": "Received",
-    "card-received-on": "Received on",
-    "card-end": "End",
-    "card-end-on": "Ends on",
-    "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "card-received": "Érkezett",
+    "card-received-on": "Ekkor érkezett",
+    "card-end": "Befejezés",
+    "card-end-on": "Befejeződik ekkor",
+    "editCardReceivedDatePopup-title": "Érkezési dátum megváltoztatása",
+    "editCardEndDatePopup-title": "Befejezési dátum megváltoztatása",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 33 - 2
i18n/hy.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "մեկնաբանել է __card__: __comment__",
     "act-createBoard": "created __board__",
     "act-createCard": "added __card__ to __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "added __list__ to __board__",
     "act-addBoardMember": "added __member__ to __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "attached %s to %s",
     "activity-created": "created %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "excluded %s from %s",
     "activity-imported": "imported %s into %s from %s",
     "activity-imported-board": "imported %s from %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "This card has %s comment.",
     "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
     "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Due",
     "card-due-on": "Due on",
     "card-spent": "Spent Time",
     "card-edit-attachments": "Edit attachments",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Edit labels",
     "card-edit-members": "Edit members",
     "card-labels-title": "Change the labels for the card.",
@@ -118,6 +121,8 @@
     "card-start": "Start",
     "card-start-on": "Starts on",
     "cardAttachmentsPopup-title": "Attach From",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Delete Card?",
     "cardDetailsActionsPopup-title": "Card Actions",
     "cardLabelsPopup-title": "Labels",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Create Board",
     "chooseBoardSourcePopup-title": "Import board",
     "createLabelPopup-title": "Create Label",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "current",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Date",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Date",
     "decline": "Decline",
     "default-avatar": "Default avatar",
     "delete": "Delete",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Delete Label?",
     "description": "Description",
     "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "Change start date",
     "editCardDueDatePopup-title": "Change due date",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "Change Label",
     "editNotificationPopup-title": "Edit Notification",
@@ -222,9 +242,12 @@
     "filter-clear": "Clear filter",
     "filter-no-label": "No label",
     "filter-no-member": "No member",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Filter is on",
     "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
     "filter-to-selection": "Filter to selection",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Full Name",
     "header-logo-title": "Go back to your boards page.",
     "hide-system-messages": "Hide system messages",
@@ -366,6 +389,7 @@
     "title": "Title",
     "tracking": "Tracking",
     "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
     "unassign-member": "Unassign member",
     "unsaved-description": "You have an unsaved description.",
     "unwatch": "Unwatch",
@@ -430,6 +454,7 @@
     "hours": "hours",
     "minutes": "minutes",
     "seconds": "seconds",
+    "show-field-on-card": "Show this field on card",
     "yes": "Yes",
     "no": "No",
     "accounts": "Accounts",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 33 - 2
i18n/id.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "Dikomentari di__kartu__:__comment__",
     "act-createBoard": "Panel__dibuat__",
     "act-createCard": "Kartu__dilampirkan__ke__Daftar",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "Daftar__ditambahkan__ke__Panel",
     "act-addBoardMember": "Partisipan__ditambahkan__ke__Kartu",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "dilampirkan %s ke %s",
     "activity-created": "dibuat %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "tidak termasuk %s dari %s",
     "activity-imported": "diimpor %s kedalam %s dari %s",
     "activity-imported-board": "diimpor %s dari %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "Kartu ini punya %s komentar",
     "card-delete-notice": "Menghapus sama dengan permanen. Anda akan kehilangan semua aksi yang terhubung ke kartu ini",
     "card-delete-pop": "Semua aksi akan dihapus dari aktivitas dan anda tidak bisa lagi buka kartu ini",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Jatuh Tempo",
     "card-due-on": "Jatuh Tempo pada",
     "card-spent": "Spent Time",
     "card-edit-attachments": "Sunting lampiran",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Sunting label",
     "card-edit-members": "Sunting anggota",
     "card-labels-title": "Ubah label kartu",
@@ -118,6 +121,8 @@
     "card-start": "Mulai",
     "card-start-on": "Mulai pada",
     "cardAttachmentsPopup-title": "Lampirkan dari",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Hapus kartu",
     "cardDetailsActionsPopup-title": "Aksi Kartu",
     "cardLabelsPopup-title": "Daftar Label",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Buat Panel",
     "chooseBoardSourcePopup-title": "Import board",
     "createLabelPopup-title": "Buat Label",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "sekarang",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Tanggal",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Tanggal",
     "decline": "Tolak",
     "default-avatar": "Avatar standar",
     "delete": "Hapus",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Hapus label?",
     "description": "Deskripsi",
     "disambiguateMultiLabelPopup-title": "Abaikan label Aksi",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "Ubah tanggal mulai",
     "editCardDueDatePopup-title": "Ubah tanggal selesai",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "Ubah Label",
     "editNotificationPopup-title": "Sunting Pemberitahuan",
@@ -222,9 +242,12 @@
     "filter-clear": "Bersihkan penyaringan",
     "filter-no-label": "Tidak ada label",
     "filter-no-member": "Tidak ada anggota",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Penyaring aktif",
     "filter-on-desc": "Anda memfilter kartu di panel ini. Klik di sini untuk menyunting filter",
     "filter-to-selection": "Saring berdasarkan yang dipilih",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Nama Lengkap",
     "header-logo-title": "Kembali ke laman panel anda",
     "hide-system-messages": "Sembunyikan pesan-pesan sistem",
@@ -366,6 +389,7 @@
     "title": "Judul",
     "tracking": "Pelacakan",
     "tracking-info": "Anda akan dinotifikasi semua perubahan di kartu tersebut diaman anda terlibat sebagai creator atau partisipan",
+    "type": "Type",
     "unassign-member": "Tidak sertakan partisipan",
     "unsaved-description": "Anda memiliki deskripsi yang belum disimpan.",
     "unwatch": "Tidak mengamati",
@@ -430,6 +454,7 @@
     "hours": "hours",
     "minutes": "minutes",
     "seconds": "seconds",
+    "show-field-on-card": "Show this field on card",
     "yes": "Yes",
     "no": "No",
     "accounts": "Accounts",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 33 - 2
i18n/ig.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "commented on __card__: __comment__",
     "act-createBoard": "created __board__",
     "act-createCard": "added __card__ to __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "added __list__ to __board__",
     "act-addBoardMember": "added __member__ to __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "attached %s to %s",
     "activity-created": "created %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "excluded %s from %s",
     "activity-imported": "imported %s into %s from %s",
     "activity-imported-board": "imported %s from %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "This card has %s comment.",
     "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
     "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Due",
     "card-due-on": "Due on",
     "card-spent": "Spent Time",
     "card-edit-attachments": "Edit attachments",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Edit labels",
     "card-edit-members": "Edit members",
     "card-labels-title": "Change the labels for the card.",
@@ -118,6 +121,8 @@
     "card-start": "Bido",
     "card-start-on": "Starts on",
     "cardAttachmentsPopup-title": "Attach From",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Delete Card?",
     "cardDetailsActionsPopup-title": "Card Actions",
     "cardLabelsPopup-title": "Aha",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Create Board",
     "chooseBoardSourcePopup-title": "Import board",
     "createLabelPopup-title": "Create Label",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "current",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Date",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Date",
     "decline": "Decline",
     "default-avatar": "Default avatar",
     "delete": "Delete",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Delete Label?",
     "description": "Description",
     "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "Change start date",
     "editCardDueDatePopup-title": "Change due date",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "Change Label",
     "editNotificationPopup-title": "Edit Notification",
@@ -222,9 +242,12 @@
     "filter-clear": "Clear filter",
     "filter-no-label": "No label",
     "filter-no-member": "No member",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Filter is on",
     "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
     "filter-to-selection": "Filter to selection",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Full Name",
     "header-logo-title": "Go back to your boards page.",
     "hide-system-messages": "Hide system messages",
@@ -366,6 +389,7 @@
     "title": "Title",
     "tracking": "Tracking",
     "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
     "unassign-member": "Unassign member",
     "unsaved-description": "You have an unsaved description.",
     "unwatch": "Unwatch",
@@ -430,6 +454,7 @@
     "hours": "elekere",
     "minutes": "nkeji",
     "seconds": "seconds",
+    "show-field-on-card": "Show this field on card",
     "yes": "Ee",
     "no": "Mba",
     "accounts": "Accounts",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 36 - 5
i18n/it.i18n.json

@@ -3,10 +3,11 @@
     "act-activity-notify": "[Wekan] Notifiche attività",
     "act-addAttachment": "ha allegato __attachment__ a __card__",
     "act-addChecklist": "aggiunta checklist __checklist__ a __card__",
-    "act-addChecklistItem": "aggiunto __checklistItem__ alla checklist __checklist__ su __card__",
+    "act-addChecklistItem": "aggiunto __checklistItem__ alla checklist __checklist__ di __card__",
     "act-addComment": "ha commentato su __card__: __comment__",
     "act-createBoard": "ha creato __board__",
     "act-createCard": "ha aggiunto __card__ a __list__",
+    "act-createCustomField": "campo personalizzato __customField__ creato",
     "act-createList": "ha aggiunto __list__ a __board__",
     "act-addBoardMember": "ha aggiunto __member__ a __board__",
     "act-archivedBoard": "__board__ spostata nel cestino",
@@ -18,7 +19,7 @@
     "act-importList": "ha importato __list__",
     "act-joinMember": "ha aggiunto __member__ a __card__",
     "act-moveCard": "ha spostato __card__ da __oldList__ a __list__",
-    "act-removeBoardMember": "ha rimosso __member__ da __board__",
+    "act-removeBoardMember": "ha rimosso __member__ a __board__",
     "act-restoredCard": "ha ripristinato __card__ su __board__",
     "act-unjoinMember": "ha rimosso __member__ da __card__",
     "act-withBoardTitle": "[Wekan] __board__",
@@ -30,6 +31,7 @@
     "activity-archived": "%s spostato nel cestino",
     "activity-attached": "allegato %s a %s",
     "activity-created": "creato %s",
+    "activity-customfield-created": "Campo personalizzato creato",
     "activity-excluded": "escluso %s da %s",
     "activity-imported": "importato %s in %s da %s",
     "activity-imported-board": "importato %s da %s",
@@ -111,6 +113,7 @@
     "card-due-on": "Scade",
     "card-spent": "Tempo trascorso",
     "card-edit-attachments": "Modifica allegati",
+    "card-edit-custom-fields": "Modifica campo personalizzato",
     "card-edit-labels": "Modifica etichette",
     "card-edit-members": "Modifica membri",
     "card-labels-title": "Cambia le etichette per questa scheda.",
@@ -118,6 +121,8 @@
     "card-start": "Inizio",
     "card-start-on": "Inizia",
     "cardAttachmentsPopup-title": "Allega da",
+    "cardCustomField-datePopup-title": "Cambia data",
+    "cardCustomFieldsPopup-title": "Modifica campo personalizzato",
     "cardDeletePopup-title": "Elimina scheda?",
     "cardDetailsActionsPopup-title": "Azioni scheda",
     "cardLabelsPopup-title": "Etichette",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Crea bacheca",
     "chooseBoardSourcePopup-title": "Importa bacheca",
     "createLabelPopup-title": "Crea etichetta",
+    "createCustomField": "Crea campo",
+    "createCustomFieldPopup-title": "Crea campo",
     "current": "corrente",
+    "custom-field-delete-pop": "Non potrai tornare indietro. Questa azione rimuoverà questo campo personalizzato da tutte le schede ed eliminerà ogni sua traccia.",
+    "custom-field-checkbox": "Casella di scelta",
+    "custom-field-date": "Data",
+    "custom-field-dropdown": "Lista a discesa",
+    "custom-field-dropdown-none": "(nessun)",
+    "custom-field-dropdown-options": "Lista opzioni",
+    "custom-field-dropdown-options-placeholder": "Premi invio per aggiungere altre opzioni",
+    "custom-field-dropdown-unknown": "(sconosciuto)",
+    "custom-field-number": "Numero",
+    "custom-field-text": "Testo",
+    "custom-fields": "Campi personalizzati",
     "date": "Data",
     "decline": "Declina",
     "default-avatar": "Avatar predefinito",
     "delete": "Elimina",
+    "deleteCustomFieldPopup-title": "Elimina il campo personalizzato?",
     "deleteLabelPopup-title": "Eliminare etichetta?",
     "description": "Descrizione",
     "disambiguateMultiLabelPopup-title": "Disambiguare l'azione Etichetta",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Limite Work in progress soft",
     "editCardStartDatePopup-title": "Cambia data di inizio",
     "editCardDueDatePopup-title": "Cambia data di scadenza",
+    "editCustomFieldPopup-title": "Modifica campo",
     "editCardSpentTimePopup-title": "Cambia tempo trascorso",
     "editLabelPopup-title": "Cambia etichetta",
     "editNotificationPopup-title": "Modifica notifiche",
@@ -222,9 +242,12 @@
     "filter-clear": "Pulisci filtri",
     "filter-no-label": "Nessuna etichetta",
     "filter-no-member": "Nessun membro",
+    "filter-no-custom-fields": "Nessun campo personalizzato",
     "filter-on": "Il filtro è attivo",
     "filter-on-desc": "Stai filtrando le schede su questa bacheca. Clicca qui per modificare il filtro,",
     "filter-to-selection": "Seleziona",
+    "advanced-filter-label": "Filtro avanzato",
+    "advanced-filter-description": "Il filtro avanzato consente di scrivere una stringa contenente i seguenti operatori: == != <= >= && || ( ). Lo spazio è usato come separatore tra gli operatori. E' possibile filtrare per tutti i campi personalizzati, digitando i loro nomi e valori. Ad esempio: Campo1 == Valore1. Nota: Se i campi o i valori contengono spazi, devi racchiuderli dentro le virgolette singole. Ad esempio: 'Campo 1' == 'Valore 1'. E' possibile combinare condizioni multiple. Ad esempio: F1 == V1 || F1 = V2. Normalmente tutti gli operatori sono interpretati da sinistra a destra. Puoi modificare l'ordine utilizzando le parentesi. Ad Esempio: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Nome completo",
     "header-logo-title": "Torna alla tua bacheca.",
     "hide-system-messages": "Nascondi i messaggi di sistema",
@@ -366,6 +389,7 @@
     "title": "Titolo",
     "tracking": "Monitoraggio",
     "tracking-info": "Sarai notificato per tutte le modifiche alle schede delle quali sei creatore o membro.",
+    "type": "Tipo",
     "unassign-member": "Rimuovi membro",
     "unsaved-description": "Hai una descrizione non salvata",
     "unwatch": "Non seguire",
@@ -393,7 +417,7 @@
     "disable-self-registration": "Disabilita Auto-registrazione",
     "invite": "Invita",
     "invite-people": "Invita persone",
-    "to-boards": "torna alle bacheche(a)",
+    "to-boards": "Alla(e) bacheche(a)",
     "email-addresses": "Indirizzi email",
     "smtp-host-description": "L'indirizzo del server SMTP che gestisce le tue email.",
     "smtp-port-description": "La porta che il tuo server SMTP utilizza per le email in uscita.",
@@ -430,11 +454,12 @@
     "hours": "ore",
     "minutes": "minuti",
     "seconds": "secondi",
+    "show-field-on-card": "Visualizza questo campo sulla scheda",
     "yes": "Sì",
     "no": "No",
     "accounts": "Profili",
     "accounts-allowEmailChange": "Permetti modifica dell'email",
-    "accounts-allowUserNameChange": "Allow Username Change",
+    "accounts-allowUserNameChange": "Consenti la modifica del nome utente",
     "createdAt": "creato alle",
     "verified": "Verificato",
     "active": "Attivo",
@@ -443,5 +468,11 @@
     "card-end": "Fine",
     "card-end-on": "Termina il",
     "editCardReceivedDatePopup-title": "Cambia data ricezione",
-    "editCardEndDatePopup-title": "Cambia data finale"
+    "editCardEndDatePopup-title": "Cambia data finale",
+    "assigned-by": "Assegnato da",
+    "requested-by": "Richiesto da",
+    "board-delete-notice": "L'eliminazione è permanente. Tutte le azioni, liste e schede associate a questa bacheca andranno perse.",
+    "delete-board-confirm-popup": "Tutte le liste, schede, etichette e azioni saranno rimosse e non sarai più in grado di recuperare il contenuto della bacheca. L'azione non è annullabile.",
+    "boardDeletePopup-title": "Eliminare la bacheca?",
+    "delete-board": "Elimina bacheca"
 }

+ 33 - 2
i18n/ja.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "__card__: __comment__ をコメントしました",
     "act-createBoard": "__board__ を作成しました",
     "act-createCard": "__list__ に __card__ を追加しました",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "__board__ に __list__ を追加しました",
     "act-addBoardMember": "__board__ に __member__ を追加しました",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "%s を %s に添付しました",
     "activity-created": "%s を作成しました",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "%s を %s から除外しました",
     "activity-imported": "imported %s into %s from %s",
     "activity-imported-board": "imported %s from %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "%s 件のコメントがあります。",
     "card-delete-notice": "削除は取り消しできません。このカードに関係するすべてのアクションがなくなります。",
     "card-delete-pop": "すべての内容がアクティビティから削除されます。この削除は元に戻すことができません。",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "期限",
     "card-due-on": "期限日",
     "card-spent": "Spent Time",
     "card-edit-attachments": "添付ファイルの編集",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "ラベルの編集",
     "card-edit-members": "メンバーの編集",
     "card-labels-title": "カードのラベルを変更する",
@@ -118,6 +121,8 @@
     "card-start": "開始",
     "card-start-on": "開始日",
     "cardAttachmentsPopup-title": "Attach From",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "カードを削除しますか?",
     "cardDetailsActionsPopup-title": "カード操作",
     "cardLabelsPopup-title": "ラベル",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "ボードの作成",
     "chooseBoardSourcePopup-title": "ボードをインポート",
     "createLabelPopup-title": "ラベルの作成",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "現在",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "日付",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "日付",
     "decline": "拒否",
     "default-avatar": "デフォルトのアバター",
     "delete": "削除",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "ラベルを削除しますか?",
     "description": "詳細",
     "disambiguateMultiLabelPopup-title": "不正なラベル操作",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "開始日の変更",
     "editCardDueDatePopup-title": "期限の変更",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "ラベルの変更",
     "editNotificationPopup-title": "通知の変更",
@@ -222,9 +242,12 @@
     "filter-clear": "フィルターの解除",
     "filter-no-label": "ラベルなし",
     "filter-no-member": "メンバーなし",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "フィルター有効",
     "filter-on-desc": "このボードのカードをフィルターしています。フィルターを編集するにはこちらをクリックしてください。",
     "filter-to-selection": "フィルターした項目を全選択",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "フルネーム",
     "header-logo-title": "自分のボードページに戻る。",
     "hide-system-messages": "システムメッセージを隠す",
@@ -366,6 +389,7 @@
     "title": "タイトル",
     "tracking": "トラッキング",
     "tracking-info": "これらのカードへの変更が通知されるようになります。",
+    "type": "Type",
     "unassign-member": "未登録のメンバー",
     "unsaved-description": "未保存の変更があります。",
     "unwatch": "アンウォッチ",
@@ -430,6 +454,7 @@
     "hours": "時",
     "minutes": "分",
     "seconds": "秒",
+    "show-field-on-card": "Show this field on card",
     "yes": "はい",
     "no": "いいえ",
     "accounts": "アカウント",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 478 - 0
i18n/km.i18n.json

@@ -0,0 +1,478 @@
+{
+    "accept": "យល់ព្រម",
+    "act-activity-notify": "[Wekan] សកម្មភាពជូនដំណឹង",
+    "act-addAttachment": "attached __attachment__ to __card__",
+    "act-addChecklist": "added checklist __checklist__ to __card__",
+    "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
+    "act-addComment": "commented on __card__: __comment__",
+    "act-createBoard": "created __board__",
+    "act-createCard": "added __card__ to __list__",
+    "act-createCustomField": "created custom field __customField__",
+    "act-createList": "added __list__ to __board__",
+    "act-addBoardMember": "added __member__ to __board__",
+    "act-archivedBoard": "__board__ moved to Recycle Bin",
+    "act-archivedCard": "__card__ moved to Recycle Bin",
+    "act-archivedList": "__list__ moved to Recycle Bin",
+    "act-archivedSwimlane": "__swimlane__ moved to Recycle Bin",
+    "act-importBoard": "imported __board__",
+    "act-importCard": "imported __card__",
+    "act-importList": "imported __list__",
+    "act-joinMember": "added __member__ to __card__",
+    "act-moveCard": "moved __card__ from __oldList__ to __list__",
+    "act-removeBoardMember": "removed __member__ from __board__",
+    "act-restoredCard": "restored __card__ to __board__",
+    "act-unjoinMember": "removed __member__ from __card__",
+    "act-withBoardTitle": "[Wekan] __board__",
+    "act-withCardTitle": "[__board__] __card__",
+    "actions": "Actions",
+    "activities": "Activities",
+    "activity": "Activity",
+    "activity-added": "added %s to %s",
+    "activity-archived": "%s moved to Recycle Bin",
+    "activity-attached": "attached %s to %s",
+    "activity-created": "created %s",
+    "activity-customfield-created": "created custom field %s",
+    "activity-excluded": "excluded %s from %s",
+    "activity-imported": "imported %s into %s from %s",
+    "activity-imported-board": "imported %s from %s",
+    "activity-joined": "joined %s",
+    "activity-moved": "moved %s from %s to %s",
+    "activity-on": "on %s",
+    "activity-removed": "removed %s from %s",
+    "activity-sent": "sent %s to %s",
+    "activity-unjoined": "unjoined %s",
+    "activity-checklist-added": "added checklist to %s",
+    "activity-checklist-item-added": "added checklist item to '%s' in %s",
+    "add": "Add",
+    "add-attachment": "Add Attachment",
+    "add-board": "Add Board",
+    "add-card": "Add Card",
+    "add-swimlane": "Add Swimlane",
+    "add-checklist": "Add Checklist",
+    "add-checklist-item": "Add an item to checklist",
+    "add-cover": "Add Cover",
+    "add-label": "Add Label",
+    "add-list": "Add List",
+    "add-members": "Add Members",
+    "added": "Added",
+    "addMemberPopup-title": "Members",
+    "admin": "Admin",
+    "admin-desc": "Can view and edit cards, remove members, and change settings for the board.",
+    "admin-announcement": "Announcement",
+    "admin-announcement-active": "Active System-Wide Announcement",
+    "admin-announcement-title": "Announcement from Administrator",
+    "all-boards": "All boards",
+    "and-n-other-card": "And __count__ other card",
+    "and-n-other-card_plural": "And __count__ other cards",
+    "apply": "Apply",
+    "app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.",
+    "archive": "Move to Recycle Bin",
+    "archive-all": "Move All to Recycle Bin",
+    "archive-board": "Move Board to Recycle Bin",
+    "archive-card": "Move Card to Recycle Bin",
+    "archive-list": "Move List to Recycle Bin",
+    "archive-swimlane": "Move Swimlane to Recycle Bin",
+    "archive-selection": "Move selection to Recycle Bin",
+    "archiveBoardPopup-title": "Move Board to Recycle Bin?",
+    "archived-items": "Recycle Bin",
+    "archived-boards": "Boards in Recycle Bin",
+    "restore-board": "Restore Board",
+    "no-archived-boards": "No Boards in Recycle Bin.",
+    "archives": "Recycle Bin",
+    "assign-member": "Assign member",
+    "attached": "attached",
+    "attachment": "Attachment",
+    "attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.",
+    "attachmentDeletePopup-title": "Delete Attachment?",
+    "attachments": "Attachments",
+    "auto-watch": "Automatically watch boards when they are created",
+    "avatar-too-big": "The avatar is too large (70KB max)",
+    "back": "Back",
+    "board-change-color": "Change color",
+    "board-nb-stars": "%s stars",
+    "board-not-found": "Board not found",
+    "board-private-info": "This board will be <strong>private</strong>.",
+    "board-public-info": "This board will be <strong>public</strong>.",
+    "boardChangeColorPopup-title": "Change Board Background",
+    "boardChangeTitlePopup-title": "Rename Board",
+    "boardChangeVisibilityPopup-title": "Change Visibility",
+    "boardChangeWatchPopup-title": "Change Watch",
+    "boardMenuPopup-title": "Board Menu",
+    "boards": "Boards",
+    "board-view": "Board View",
+    "board-view-swimlanes": "Swimlanes",
+    "board-view-lists": "Lists",
+    "bucket-example": "Like “Bucket List” for example",
+    "cancel": "Cancel",
+    "card-archived": "This card is moved to Recycle Bin.",
+    "card-comments-title": "This card has %s comment.",
+    "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
+    "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
+    "card-due": "Due",
+    "card-due-on": "Due on",
+    "card-spent": "Spent Time",
+    "card-edit-attachments": "Edit attachments",
+    "card-edit-custom-fields": "Edit custom fields",
+    "card-edit-labels": "Edit labels",
+    "card-edit-members": "Edit members",
+    "card-labels-title": "Change the labels for the card.",
+    "card-members-title": "Add or remove members of the board from the card.",
+    "card-start": "Start",
+    "card-start-on": "Starts on",
+    "cardAttachmentsPopup-title": "Attach From",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
+    "cardDeletePopup-title": "Delete Card?",
+    "cardDetailsActionsPopup-title": "Card Actions",
+    "cardLabelsPopup-title": "Labels",
+    "cardMembersPopup-title": "Members",
+    "cardMorePopup-title": "More",
+    "cards": "Cards",
+    "cards-count": "Cards",
+    "change": "Change",
+    "change-avatar": "Change Avatar",
+    "change-password": "Change Password",
+    "change-permissions": "Change permissions",
+    "change-settings": "Change Settings",
+    "changeAvatarPopup-title": "Change Avatar",
+    "changeLanguagePopup-title": "Change Language",
+    "changePasswordPopup-title": "Change Password",
+    "changePermissionsPopup-title": "Change Permissions",
+    "changeSettingsPopup-title": "Change Settings",
+    "checklists": "Checklists",
+    "click-to-star": "Click to star this board.",
+    "click-to-unstar": "Click to unstar this board.",
+    "clipboard": "Clipboard or drag & drop",
+    "close": "Close",
+    "close-board": "Close Board",
+    "close-board-pop": "You will be able to restore the board by clicking the “Recycle Bin” button from the home header.",
+    "color-black": "black",
+    "color-blue": "blue",
+    "color-green": "green",
+    "color-lime": "lime",
+    "color-orange": "orange",
+    "color-pink": "pink",
+    "color-purple": "purple",
+    "color-red": "red",
+    "color-sky": "sky",
+    "color-yellow": "yellow",
+    "comment": "Comment",
+    "comment-placeholder": "Write Comment",
+    "comment-only": "Comment only",
+    "comment-only-desc": "Can comment on cards only.",
+    "computer": "Computer",
+    "confirm-checklist-delete-dialog": "Are you sure you want to delete checklist",
+    "copy-card-link-to-clipboard": "Copy card link to clipboard",
+    "copyCardPopup-title": "Copy Card",
+    "copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
+    "copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
+    "copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
+    "create": "Create",
+    "createBoardPopup-title": "Create Board",
+    "chooseBoardSourcePopup-title": "Import board",
+    "createLabelPopup-title": "Create Label",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
+    "current": "current",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Date",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
+    "date": "Date",
+    "decline": "Decline",
+    "default-avatar": "Default avatar",
+    "delete": "Delete",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
+    "deleteLabelPopup-title": "Delete Label?",
+    "description": "Description",
+    "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
+    "disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
+    "discard": "Discard",
+    "done": "Done",
+    "download": "Download",
+    "edit": "Edit",
+    "edit-avatar": "Change Avatar",
+    "edit-profile": "Edit Profile",
+    "edit-wip-limit": "Edit WIP Limit",
+    "soft-wip-limit": "Soft WIP Limit",
+    "editCardStartDatePopup-title": "Change start date",
+    "editCardDueDatePopup-title": "Change due date",
+    "editCustomFieldPopup-title": "Edit Field",
+    "editCardSpentTimePopup-title": "Change spent time",
+    "editLabelPopup-title": "Change Label",
+    "editNotificationPopup-title": "Edit Notification",
+    "editProfilePopup-title": "Edit Profile",
+    "email": "Email",
+    "email-enrollAccount-subject": "An account created for you on __siteName__",
+    "email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
+    "email-fail": "Sending email failed",
+    "email-fail-text": "Error trying to send email",
+    "email-invalid": "Invalid email",
+    "email-invite": "Invite via Email",
+    "email-invite-subject": "__inviter__ sent you an invitation",
+    "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.",
+    "email-resetPassword-subject": "Reset your password on __siteName__",
+    "email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.",
+    "email-sent": "Email sent",
+    "email-verifyEmail-subject": "Verify your email address on __siteName__",
+    "email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.",
+    "enable-wip-limit": "Enable WIP Limit",
+    "error-board-doesNotExist": "This board does not exist",
+    "error-board-notAdmin": "You need to be admin of this board to do that",
+    "error-board-notAMember": "You need to be a member of this board to do that",
+    "error-json-malformed": "Your text is not valid JSON",
+    "error-json-schema": "Your JSON data does not include the proper information in the correct format",
+    "error-list-doesNotExist": "This list does not exist",
+    "error-user-doesNotExist": "This user does not exist",
+    "error-user-notAllowSelf": "You can not invite yourself",
+    "error-user-notCreated": "This user is not created",
+    "error-username-taken": "This username is already taken",
+    "error-email-taken": "Email has already been taken",
+    "export-board": "Export board",
+    "filter": "Filter",
+    "filter-cards": "Filter Cards",
+    "filter-clear": "Clear filter",
+    "filter-no-label": "No label",
+    "filter-no-member": "No member",
+    "filter-no-custom-fields": "No Custom Fields",
+    "filter-on": "Filter is on",
+    "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
+    "filter-to-selection": "Filter to selection",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
+    "fullname": "Full Name",
+    "header-logo-title": "Go back to your boards page.",
+    "hide-system-messages": "Hide system messages",
+    "headerBarCreateBoardPopup-title": "Create Board",
+    "home": "Home",
+    "import": "Import",
+    "import-board": "import board",
+    "import-board-c": "Import board",
+    "import-board-title-trello": "Import board from Trello",
+    "import-board-title-wekan": "Import board from Wekan",
+    "import-sandstorm-warning": "Imported board will delete all existing data on board and replace it with imported board.",
+    "from-trello": "From Trello",
+    "from-wekan": "From Wekan",
+    "import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
+    "import-board-instruction-wekan": "In your Wekan board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
+    "import-json-placeholder": "Paste your valid JSON data here",
+    "import-map-members": "Map members",
+    "import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users",
+    "import-show-user-mapping": "Review members mapping",
+    "import-user-select": "Pick the Wekan user you want to use as this member",
+    "importMapMembersAddPopup-title": "Select Wekan member",
+    "info": "Version",
+    "initials": "Initials",
+    "invalid-date": "Invalid date",
+    "invalid-time": "Invalid time",
+    "invalid-user": "Invalid user",
+    "joined": "joined",
+    "just-invited": "You are just invited to this board",
+    "keyboard-shortcuts": "Keyboard shortcuts",
+    "label-create": "Create Label",
+    "label-default": "%s label (default)",
+    "label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.",
+    "labels": "Labels",
+    "language": "Language",
+    "last-admin-desc": "You can’t change roles because there must be at least one admin.",
+    "leave-board": "Leave Board",
+    "leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
+    "leaveBoardPopup-title": "Leave Board ?",
+    "link-card": "Link to this card",
+    "list-archive-cards": "Move all cards in this list to Recycle Bin",
+    "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Recycle Bin and bring them back to the board, click “Menu” > “Recycle Bin”.",
+    "list-move-cards": "Move all cards in this list",
+    "list-select-cards": "Select all cards in this list",
+    "listActionPopup-title": "List Actions",
+    "swimlaneActionPopup-title": "Swimlane Actions",
+    "listImportCardPopup-title": "Import a Trello card",
+    "listMorePopup-title": "More",
+    "link-list": "Link to this list",
+    "list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
+    "list-delete-suggest-archive": "You can move a list to Recycle Bin to remove it from the board and preserve the activity.",
+    "lists": "Lists",
+    "swimlanes": "Swimlanes",
+    "log-out": "Log Out",
+    "log-in": "Log In",
+    "loginPopup-title": "Log In",
+    "memberMenuPopup-title": "Member Settings",
+    "members": "Members",
+    "menu": "Menu",
+    "move-selection": "Move selection",
+    "moveCardPopup-title": "Move Card",
+    "moveCardToBottom-title": "Move to Bottom",
+    "moveCardToTop-title": "Move to Top",
+    "moveSelectionPopup-title": "Move selection",
+    "multi-selection": "Multi-Selection",
+    "multi-selection-on": "Multi-Selection is on",
+    "muted": "Muted",
+    "muted-info": "You will never be notified of any changes in this board",
+    "my-boards": "My Boards",
+    "name": "Name",
+    "no-archived-cards": "No cards in Recycle Bin.",
+    "no-archived-lists": "No lists in Recycle Bin.",
+    "no-archived-swimlanes": "No swimlanes in Recycle Bin.",
+    "no-results": "No results",
+    "normal": "Normal",
+    "normal-desc": "Can view and edit cards. Can't change settings.",
+    "not-accepted-yet": "Invitation not accepted yet",
+    "notify-participate": "Receive updates to any cards you participate as creater or member",
+    "notify-watch": "Receive updates to any boards, lists, or cards you’re watching",
+    "optional": "optional",
+    "or": "or",
+    "page-maybe-private": "This page may be private. You may be able to view it by <a href='%s'>logging in</a>.",
+    "page-not-found": "Page not found.",
+    "password": "Password",
+    "paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
+    "participating": "Participating",
+    "preview": "Preview",
+    "previewAttachedImagePopup-title": "Preview",
+    "previewClipboardImagePopup-title": "Preview",
+    "private": "Private",
+    "private-desc": "This board is private. Only people added to the board can view and edit it.",
+    "profile": "Profile",
+    "public": "Public",
+    "public-desc": "This board is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the board can edit.",
+    "quick-access-description": "Star a board to add a shortcut in this bar.",
+    "remove-cover": "Remove Cover",
+    "remove-from-board": "Remove from Board",
+    "remove-label": "Remove Label",
+    "listDeletePopup-title": "Delete List ?",
+    "remove-member": "Remove Member",
+    "remove-member-from-card": "Remove from Card",
+    "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
+    "removeMemberPopup-title": "Remove Member?",
+    "rename": "Rename",
+    "rename-board": "Rename Board",
+    "restore": "Restore",
+    "save": "Save",
+    "search": "Search",
+    "search-cards": "Search from card titles and descriptions on this board",
+    "search-example": "Text to search for?",
+    "select-color": "Select Color",
+    "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
+    "setWipLimitPopup-title": "Set WIP Limit",
+    "shortcut-assign-self": "Assign yourself to current card",
+    "shortcut-autocomplete-emoji": "Autocomplete emoji",
+    "shortcut-autocomplete-members": "Autocomplete members",
+    "shortcut-clear-filters": "Clear all filters",
+    "shortcut-close-dialog": "បិទផ្ទាំង",
+    "shortcut-filter-my-cards": "តម្រងកាតរបស់ខ្ញុំ",
+    "shortcut-show-shortcuts": "Bring up this shortcuts list",
+    "shortcut-toggle-filterbar": "Toggle Filter Sidebar",
+    "shortcut-toggle-sidebar": "Toggle Board Sidebar",
+    "show-cards-minimum-count": "Show cards count if list contains more than",
+    "sidebar-open": "Open Sidebar",
+    "sidebar-close": "Close Sidebar",
+    "signupPopup-title": "បង្កើតគណនីមួយ",
+    "star-board-title": "Click to star this board. It will show up at top of your boards list.",
+    "starred-boards": "Starred Boards",
+    "starred-boards-description": "Starred boards show up at the top of your boards list.",
+    "subscribe": "Subscribe",
+    "team": "Team",
+    "this-board": "this board",
+    "this-card": "កាតនេះ",
+    "spent-time-hours": "ចំណាយពេល (ម៉ោង)",
+    "overtime-hours": "លើសពេល (ម៉ោង)",
+    "overtime": "លើសពេល",
+    "has-overtime-cards": "មានកាតលើសពេល",
+    "has-spenttime-cards": "មានកាតដែលបានចំណាយពេល",
+    "time": "Time",
+    "title": "Title",
+    "tracking": "Tracking",
+    "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
+    "unassign-member": "Unassign member",
+    "unsaved-description": "You have an unsaved description.",
+    "unwatch": "Unwatch",
+    "upload": "Upload",
+    "upload-avatar": "Upload an avatar",
+    "uploaded-avatar": "Uploaded an avatar",
+    "username": "Username",
+    "view-it": "View it",
+    "warn-list-archived": "warning: this card is in an list at Recycle Bin",
+    "watch": "Watch",
+    "watching": "Watching",
+    "watching-info": "You will be notified of any change in this board",
+    "welcome-board": "Welcome Board",
+    "welcome-swimlane": "Milestone 1",
+    "welcome-list1": "Basics",
+    "welcome-list2": "Advanced",
+    "what-to-do": "What do you want to do?",
+    "wipLimitErrorPopup-title": "Invalid WIP Limit",
+    "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
+    "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.",
+    "admin-panel": "Admin Panel",
+    "settings": "Settings",
+    "people": "People",
+    "registration": "Registration",
+    "disable-self-registration": "Disable Self-Registration",
+    "invite": "Invite",
+    "invite-people": "Invite People",
+    "to-boards": "To board(s)",
+    "email-addresses": "Email Addresses",
+    "smtp-host-description": "The address of the SMTP server that handles your emails.",
+    "smtp-port-description": "The port your SMTP server uses for outgoing emails.",
+    "smtp-tls-description": "Enable TLS support for SMTP server",
+    "smtp-host": "SMTP Host",
+    "smtp-port": "SMTP Port",
+    "smtp-username": "Username",
+    "smtp-password": "Password",
+    "smtp-tls": "TLS support",
+    "send-from": "From",
+    "send-smtp-test": "Send a test email to yourself",
+    "invitation-code": "Invitation Code",
+    "email-invite-register-subject": "__inviter__ sent you an invitation",
+    "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
+    "email-smtp-test-subject": "SMTP Test Email From Wekan",
+    "email-smtp-test-text": "You have successfully sent an email",
+    "error-invitation-code-not-exist": "Invitation code doesn't exist",
+    "error-notAuthorized": "You are not authorized to view this page.",
+    "outgoing-webhooks": "Outgoing Webhooks",
+    "outgoingWebhooksPopup-title": "Outgoing Webhooks",
+    "new-outgoing-webhook": "New Outgoing Webhook",
+    "no-name": "(Unknown)",
+    "Wekan_version": "Wekan version",
+    "Node_version": "Node version",
+    "OS_Arch": "OS Arch",
+    "OS_Cpus": "OS CPU Count",
+    "OS_Freemem": "OS Free Memory",
+    "OS_Loadavg": "OS Load Average",
+    "OS_Platform": "OS Platform",
+    "OS_Release": "OS Release",
+    "OS_Totalmem": "OS Total Memory",
+    "OS_Type": "OS Type",
+    "OS_Uptime": "OS Uptime",
+    "hours": "hours",
+    "minutes": "minutes",
+    "seconds": "seconds",
+    "show-field-on-card": "Show this field on card",
+    "yes": "Yes",
+    "no": "No",
+    "accounts": "Accounts",
+    "accounts-allowEmailChange": "Allow Email Change",
+    "accounts-allowUserNameChange": "Allow Username Change",
+    "createdAt": "Created at",
+    "verified": "Verified",
+    "active": "Active",
+    "card-received": "Received",
+    "card-received-on": "Received on",
+    "card-end": "End",
+    "card-end-on": "Ends on",
+    "editCardReceivedDatePopup-title": "Change received date",
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
+}

+ 33 - 2
i18n/ko.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "__card__에 내용 추가 : __comment__",
     "act-createBoard": "__board__ 생성",
     "act-createCard": "__list__에 __card__ 추가",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "__board__에 __list__ 추가",
     "act-addBoardMember": "__board__에 __member__ 추가",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "%s를 %s에 첨부함",
     "activity-created": "%s 생성됨",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "%s를 %s에서 제외함",
     "activity-imported": "imported %s into %s from %s",
     "activity-imported-board": "imported %s from %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "이 카드에 %s 코멘트가 있습니다.",
     "card-delete-notice": "영구 삭제입니다. 이 카드와 관련된 모든 작업들을 잃게됩니다.",
     "card-delete-pop": "모든 작업이 활동 내역에서 제거되며 카드를 다시 열 수 없습니다. 복구가 안되니 주의하시기 바랍니다.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "종료일",
     "card-due-on": "종료일",
     "card-spent": "Spent Time",
     "card-edit-attachments": "첨부 파일 수정",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "라벨 수정",
     "card-edit-members": "멤버 수정",
     "card-labels-title": "카드의 라벨 변경.",
@@ -118,6 +121,8 @@
     "card-start": "시작일",
     "card-start-on": "시작일",
     "cardAttachmentsPopup-title": "첨부 파일",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "카드를 삭제합니까?",
     "cardDetailsActionsPopup-title": "카드 액션",
     "cardLabelsPopup-title": "라벨",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "보드 생성",
     "chooseBoardSourcePopup-title": "보드 가져오기",
     "createLabelPopup-title": "라벨 생성",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "경향",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "날짜",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "날짜",
     "decline": "쇠퇴",
     "default-avatar": "기본 아바타",
     "delete": "삭제",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "라벨을 삭제합니까?",
     "description": "설명",
     "disambiguateMultiLabelPopup-title": "라벨 액션의 모호성 제거",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "원만한 WIP 제한",
     "editCardStartDatePopup-title": "시작일 변경",
     "editCardDueDatePopup-title": "종료일 변경",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "라벨 변경",
     "editNotificationPopup-title": "알림 수정",
@@ -222,9 +242,12 @@
     "filter-clear": "필터 초기화",
     "filter-no-label": "라벨 없음",
     "filter-no-member": "멤버 없음",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "필터 사용",
     "filter-on-desc": "보드에서 카드를 필터링합니다. 여기를 클릭하여 필터를 수정합니다.",
     "filter-to-selection": "선택 항목으로 필터링",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "실명",
     "header-logo-title": "보드 페이지로 돌아가기.",
     "hide-system-messages": "시스템 메시지 숨기기",
@@ -366,6 +389,7 @@
     "title": "제목",
     "tracking": "추적",
     "tracking-info": "보드 생성자 또는 멤버로 참여하는 모든 카드에 대한 변경사항 알림 받음",
+    "type": "Type",
     "unassign-member": "멤버 할당 해제",
     "unsaved-description": "저장되지 않은 설명이 있습니다.",
     "unwatch": "감시 해제",
@@ -430,6 +454,7 @@
     "hours": "hours",
     "minutes": "minutes",
     "seconds": "seconds",
+    "show-field-on-card": "Show this field on card",
     "yes": "Yes",
     "no": "No",
     "accounts": "Accounts",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 33 - 2
i18n/lv.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "komentēja __card__: __comment__",
     "act-createBoard": "izveidoja __board__",
     "act-createCard": "pievienoja __card__ to __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "pievienoja __list__ to __board__",
     "act-addBoardMember": "pievienoja __member__ to __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "pievienoja %s pie %s",
     "activity-created": "izveidoja%s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "izslēdza%s no%s",
     "activity-imported": "importēja %s iekšā%s no%s",
     "activity-imported-board": "imported %s from %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "This card has %s comment.",
     "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
     "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Due",
     "card-due-on": "Due on",
     "card-spent": "Spent Time",
     "card-edit-attachments": "Edit attachments",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Edit labels",
     "card-edit-members": "Edit members",
     "card-labels-title": "Change the labels for the card.",
@@ -118,6 +121,8 @@
     "card-start": "Start",
     "card-start-on": "Starts on",
     "cardAttachmentsPopup-title": "Attach From",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Delete Card?",
     "cardDetailsActionsPopup-title": "Card Actions",
     "cardLabelsPopup-title": "Labels",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Create Board",
     "chooseBoardSourcePopup-title": "Import board",
     "createLabelPopup-title": "Create Label",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "current",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Date",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Date",
     "decline": "Decline",
     "default-avatar": "Default avatar",
     "delete": "Delete",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Delete Label?",
     "description": "Description",
     "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "Change start date",
     "editCardDueDatePopup-title": "Change due date",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "Change Label",
     "editNotificationPopup-title": "Edit Notification",
@@ -222,9 +242,12 @@
     "filter-clear": "Clear filter",
     "filter-no-label": "No label",
     "filter-no-member": "No member",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Filter is on",
     "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
     "filter-to-selection": "Filter to selection",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Full Name",
     "header-logo-title": "Go back to your boards page.",
     "hide-system-messages": "Hide system messages",
@@ -366,6 +389,7 @@
     "title": "Title",
     "tracking": "Tracking",
     "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
     "unassign-member": "Unassign member",
     "unsaved-description": "You have an unsaved description.",
     "unwatch": "Unwatch",
@@ -430,6 +454,7 @@
     "hours": "hours",
     "minutes": "minutes",
     "seconds": "seconds",
+    "show-field-on-card": "Show this field on card",
     "yes": "Yes",
     "no": "No",
     "accounts": "Accounts",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 33 - 2
i18n/mn.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "commented on __card__: __comment__",
     "act-createBoard": "created __board__",
     "act-createCard": "added __card__ to __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "added __list__ to __board__",
     "act-addBoardMember": "added __member__ to __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "attached %s to %s",
     "activity-created": "created %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "excluded %s from %s",
     "activity-imported": "imported %s into %s from %s",
     "activity-imported-board": "imported %s from %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "This card has %s comment.",
     "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
     "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Due",
     "card-due-on": "Due on",
     "card-spent": "Spent Time",
     "card-edit-attachments": "Edit attachments",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Edit labels",
     "card-edit-members": "Edit members",
     "card-labels-title": "Change the labels for the card.",
@@ -118,6 +121,8 @@
     "card-start": "Start",
     "card-start-on": "Starts on",
     "cardAttachmentsPopup-title": "Attach From",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Delete Card?",
     "cardDetailsActionsPopup-title": "Card Actions",
     "cardLabelsPopup-title": "Labels",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Самбар үүсгэх",
     "chooseBoardSourcePopup-title": "Import board",
     "createLabelPopup-title": "Шошго үүсгэх",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "current",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Date",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Date",
     "decline": "Decline",
     "default-avatar": "Default avatar",
     "delete": "Delete",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Delete Label?",
     "description": "Description",
     "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "Change start date",
     "editCardDueDatePopup-title": "Change due date",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "Change Label",
     "editNotificationPopup-title": "Мэдэгдэл тохируулах",
@@ -222,9 +242,12 @@
     "filter-clear": "Clear filter",
     "filter-no-label": "No label",
     "filter-no-member": "No member",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Filter is on",
     "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
     "filter-to-selection": "Filter to selection",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Full Name",
     "header-logo-title": "Go back to your boards page.",
     "hide-system-messages": "Hide system messages",
@@ -366,6 +389,7 @@
     "title": "Title",
     "tracking": "Tracking",
     "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
     "unassign-member": "Unassign member",
     "unsaved-description": "You have an unsaved description.",
     "unwatch": "Unwatch",
@@ -430,6 +454,7 @@
     "hours": "hours",
     "minutes": "minutes",
     "seconds": "seconds",
+    "show-field-on-card": "Show this field on card",
     "yes": "Yes",
     "no": "No",
     "accounts": "Accounts",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 33 - 2
i18n/nb.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "kommenterte til __card__: __comment__",
     "act-createBoard": "opprettet __board__",
     "act-createCard": "la __card__ til __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "la __list__ til __board__",
     "act-addBoardMember": "la __member__ til __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "la %s til %s",
     "activity-created": "opprettet %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "ekskluderte %s fra %s",
     "activity-imported": "importerte %s til %s fra %s",
     "activity-imported-board": "importerte %s fra %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "Dette kortet har %s kommentar.",
     "card-delete-notice": "Sletting er permanent. Du vil miste alle hendelser knyttet til dette kortet.",
     "card-delete-pop": "Alle handlinger vil fjernes fra feeden for aktiviteter og du vil ikke kunne åpne kortet på nytt. Det er ingen mulighet å angre.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Frist",
     "card-due-on": "Frist til",
     "card-spent": "Spent Time",
     "card-edit-attachments": "Rediger vedlegg",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Rediger etiketter",
     "card-edit-members": "Endre medlemmer",
     "card-labels-title": "Endre etiketter for kortet.",
@@ -118,6 +121,8 @@
     "card-start": "Start",
     "card-start-on": "Starter på",
     "cardAttachmentsPopup-title": "Legg ved fra",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Slett kort?",
     "cardDetailsActionsPopup-title": "Kort-handlinger",
     "cardLabelsPopup-title": "Etiketter",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Create Board",
     "chooseBoardSourcePopup-title": "Import board",
     "createLabelPopup-title": "Create Label",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "current",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Date",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Date",
     "decline": "Decline",
     "default-avatar": "Default avatar",
     "delete": "Delete",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Delete Label?",
     "description": "Description",
     "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "Change start date",
     "editCardDueDatePopup-title": "Change due date",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "Change Label",
     "editNotificationPopup-title": "Edit Notification",
@@ -222,9 +242,12 @@
     "filter-clear": "Clear filter",
     "filter-no-label": "No label",
     "filter-no-member": "No member",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Filter is on",
     "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
     "filter-to-selection": "Filter to selection",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Full Name",
     "header-logo-title": "Go back to your boards page.",
     "hide-system-messages": "Hide system messages",
@@ -366,6 +389,7 @@
     "title": "Title",
     "tracking": "Tracking",
     "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
     "unassign-member": "Unassign member",
     "unsaved-description": "You have an unsaved description.",
     "unwatch": "Unwatch",
@@ -430,6 +454,7 @@
     "hours": "hours",
     "minutes": "minutes",
     "seconds": "seconds",
+    "show-field-on-card": "Show this field on card",
     "yes": "Yes",
     "no": "No",
     "accounts": "Accounts",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 33 - 2
i18n/nl.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "gereageerd op __card__:__comment__",
     "act-createBoard": "aangemaakte __bord__",
     "act-createCard": "toegevoegd __kaart__ aan __lijst__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "toegevoegd __lijst__ aan __bord__",
     "act-addBoardMember": "__member__ aan __board__ toegevoegd",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "%s bijgevoegd aan %s",
     "activity-created": "%s aangemaakt",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "%s uitgesloten van %s",
     "activity-imported": "%s geimporteerd in %s van %s",
     "activity-imported-board": "%s geimporteerd van %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "Deze kaart heeft %s reactie.",
     "card-delete-notice": "Verwijdering is permanent. Als je dit doet, verlies je alle informatie die op deze kaart is opgeslagen.",
     "card-delete-pop": "Alle acties worden verwijderd van de activiteiten feed, en er zal geen mogelijkheid zijn om de kaart opnieuw te openen. Deze actie kan je niet ongedaan maken.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Deadline: ",
     "card-due-on": "Deadline: ",
     "card-spent": "gespendeerde tijd",
     "card-edit-attachments": "Wijzig bijlagen",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Wijzig labels",
     "card-edit-members": "Wijzig leden",
     "card-labels-title": "Wijzig de labels vam de kaart.",
@@ -118,6 +121,8 @@
     "card-start": "Begin",
     "card-start-on": "Begint op",
     "cardAttachmentsPopup-title": "Voeg bestand toe vanuit",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Kaart verwijderen?",
     "cardDetailsActionsPopup-title": "Kaart actie ondernemen",
     "cardLabelsPopup-title": "Labels",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Bord aanmaken",
     "chooseBoardSourcePopup-title": "Importeer bord",
     "createLabelPopup-title": "Label aanmaken",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "Huidige",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Datum",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Datum",
     "decline": "Weigeren",
     "default-avatar": "Standaard avatar",
     "delete": "Verwijderen",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Verwijder label?",
     "description": "Beschrijving",
     "disambiguateMultiLabelPopup-title": "Disambigueer Label Actie",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Zachte WIP limiet",
     "editCardStartDatePopup-title": "Wijzig start datum",
     "editCardDueDatePopup-title": "Wijzig deadline",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Verander gespendeerde tijd",
     "editLabelPopup-title": "Wijzig label",
     "editNotificationPopup-title": "Wijzig notificatie",
@@ -222,9 +242,12 @@
     "filter-clear": "Reset filter",
     "filter-no-label": "Geen label",
     "filter-no-member": "Geen lid",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Filter staat aan",
     "filter-on-desc": "Je bent nu kaarten aan het filteren op dit bord. Klik hier om het filter te wijzigen.",
     "filter-to-selection": "Filter zoals selectie",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Volledige naam",
     "header-logo-title": "Ga terug naar jouw borden pagina.",
     "hide-system-messages": "Verberg systeemberichten",
@@ -366,6 +389,7 @@
     "title": "Titel",
     "tracking": "Volgen",
     "tracking-info": "Je wordt op de hoogte gesteld als er veranderingen zijn aan de kaarten waar je lid of maker van bent.",
+    "type": "Type",
     "unassign-member": "Lid ontkennen",
     "unsaved-description": "Je hebt een niet opgeslagen beschrijving.",
     "unwatch": "Niet bekijken",
@@ -430,6 +454,7 @@
     "hours": "uren",
     "minutes": "minuten",
     "seconds": "seconden",
+    "show-field-on-card": "Show this field on card",
     "yes": "Ja",
     "no": "Nee",
     "accounts": "Accounts",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 33 - 2
i18n/pl.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "commented on __card__: __comment__",
     "act-createBoard": "created __board__",
     "act-createCard": "added __card__ to __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "added __list__ to __board__",
     "act-addBoardMember": "added __member__ to __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s przeniesiono do Kosza",
     "activity-attached": "załączono %s z %s",
     "activity-created": "utworzono %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "wyłączono %s z %s",
     "activity-imported": "zaimportowano %s to %s z %s",
     "activity-imported-board": "zaimportowano %s z %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "Ta karta ma %s komentarzy.",
     "card-delete-notice": "Usunięcie jest trwałe. Stracisz wszystkie akcje powiązane z tą kartą.",
     "card-delete-pop": "Wszystkie akcje będą usunięte z widoku aktywności, nie można będzie ponownie otworzyć karty.  Usunięcie jest nieodwracalne.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Due",
     "card-due-on": "Due on",
     "card-spent": "Spent Time",
     "card-edit-attachments": "Edytuj załączniki",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Edytuj etykiety",
     "card-edit-members": "Edytuj członków",
     "card-labels-title": "Zmień etykiety karty",
@@ -118,6 +121,8 @@
     "card-start": "Start",
     "card-start-on": "Starts on",
     "cardAttachmentsPopup-title": "Załącz z",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Usunąć kartę?",
     "cardDetailsActionsPopup-title": "Card Actions",
     "cardLabelsPopup-title": "Etykiety",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Utwórz tablicę",
     "chooseBoardSourcePopup-title": "Import tablicy",
     "createLabelPopup-title": "Utwórz etykietę",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "obecny",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Data",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Data",
     "decline": "Odrzuć",
     "default-avatar": "Domyślny avatar",
     "delete": "Usuń",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Usunąć etykietę?",
     "description": "Opis",
     "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "Change start date",
     "editCardDueDatePopup-title": "Change due date",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "Zmień etykietę",
     "editNotificationPopup-title": "Edit Notification",
@@ -222,9 +242,12 @@
     "filter-clear": "Usuń filter",
     "filter-no-label": "Brak etykiety",
     "filter-no-member": "No member",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Filtr jest włączony",
     "filter-on-desc": "Filtrujesz karty na tej tablicy. Kliknij tutaj by edytować filtr.",
     "filter-to-selection": "Odfiltruj zaznaczenie",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Full Name",
     "header-logo-title": "Wróć do swojej strony z tablicami.",
     "hide-system-messages": "Ukryj wiadomości systemowe",
@@ -366,6 +389,7 @@
     "title": "Tytuł",
     "tracking": "Tracking",
     "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
     "unassign-member": "Nieprzypisany członek",
     "unsaved-description": "You have an unsaved description.",
     "unwatch": "Unwatch",
@@ -430,6 +454,7 @@
     "hours": "godzin",
     "minutes": "minut",
     "seconds": "sekund",
+    "show-field-on-card": "Show this field on card",
     "yes": "Tak",
     "no": "Nie",
     "accounts": "Konto",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 70 - 39
i18n/pt-BR.i18n.json

@@ -3,16 +3,17 @@
     "act-activity-notify": "[Wekan] Notificação de Atividade",
     "act-addAttachment": "anexo __attachment__ de __card__",
     "act-addChecklist": "added checklist __checklist__ no __card__",
-    "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
+    "act-addChecklistItem": "adicionado __checklistitem__ para a lista de checagem __checklist__ em __card__",
     "act-addComment": "comentou em __card__: __comment__",
     "act-createBoard": "criou __board__",
     "act-createCard": "__card__ adicionado à __list__",
+    "act-createCustomField": "criado campo customizado __customField__",
     "act-createList": "__list__ adicionada à __board__",
     "act-addBoardMember": "__member__ adicionado à __board__",
-    "act-archivedBoard": "__board__ moved to Recycle Bin",
-    "act-archivedCard": "__card__ moved to Recycle Bin",
-    "act-archivedList": "__list__ moved to Recycle Bin",
-    "act-archivedSwimlane": "__swimlane__ moved to Recycle Bin",
+    "act-archivedBoard": "__board__ movido para a lixeira",
+    "act-archivedCard": "__card__ movido para a lixeira",
+    "act-archivedList": "__list__ movido para a lixeira",
+    "act-archivedSwimlane": "__swimlane__ movido para a lixeira",
     "act-importBoard": "__board__ importado",
     "act-importCard": "__card__ importado",
     "act-importList": "__list__ importada",
@@ -27,9 +28,10 @@
     "activities": "Atividades",
     "activity": "Atividade",
     "activity-added": "adicionou %s a %s",
-    "activity-archived": "%s moved to Recycle Bin",
+    "activity-archived": "%s movido para a lixeira",
     "activity-attached": "anexou %s a %s",
     "activity-created": "criou %s",
+    "activity-customfield-created": "criado campo customizado %s",
     "activity-excluded": "excluiu %s de %s",
     "activity-imported": "importado %s em %s de %s",
     "activity-imported-board": "importado %s de %s",
@@ -45,7 +47,7 @@
     "add-attachment": "Adicionar Anexos",
     "add-board": "Adicionar Quadro",
     "add-card": "Adicionar Cartão",
-    "add-swimlane": "Add Swimlane",
+    "add-swimlane": "Adicionar Swimlane",
     "add-checklist": "Adicionar Checklist",
     "add-checklist-item": "Adicionar um item à lista de verificação",
     "add-cover": "Adicionar Capa",
@@ -64,19 +66,19 @@
     "and-n-other-card_plural": "E __count__ outros cartões",
     "apply": "Aplicar",
     "app-is-offline": "O Wekan está carregando, por favor espere. Recarregar a página irá causar perda de dado. Se o Wekan não carregar por favor verifique se o servidor Wekan não está parado.",
-    "archive": "Move to Recycle Bin",
-    "archive-all": "Move All to Recycle Bin",
-    "archive-board": "Move Board to Recycle Bin",
-    "archive-card": "Move Card to Recycle Bin",
-    "archive-list": "Move List to Recycle Bin",
-    "archive-swimlane": "Move Swimlane to Recycle Bin",
-    "archive-selection": "Move selection to Recycle Bin",
-    "archiveBoardPopup-title": "Move Board to Recycle Bin?",
-    "archived-items": "Recycle Bin",
-    "archived-boards": "Boards in Recycle Bin",
+    "archive": "Mover para a lixeira",
+    "archive-all": "Mover tudo para a lixeira",
+    "archive-board": "Mover quadro para a lixeira",
+    "archive-card": "Mover cartão para a lixeira",
+    "archive-list": "Mover lista para a lixeira",
+    "archive-swimlane": "Mover Swimlane para a lixeira",
+    "archive-selection": "Mover seleção para a lixeira",
+    "archiveBoardPopup-title": "Mover o quadro para a lixeira?",
+    "archived-items": "Lixeira",
+    "archived-boards": "Quadros na lixeira",
     "restore-board": "Restaurar Quadro",
-    "no-archived-boards": "No Boards in Recycle Bin.",
-    "archives": "Recycle Bin",
+    "no-archived-boards": "Não há quadros na lixeira",
+    "archives": "Lixeira",
     "assign-member": "Atribuir Membro",
     "attached": "anexado",
     "attachment": "Anexo",
@@ -102,15 +104,16 @@
     "board-view-lists": "Listas",
     "bucket-example": "\"Bucket List\", por exemplo",
     "cancel": "Cancelar",
-    "card-archived": "This card is moved to Recycle Bin.",
+    "card-archived": "Este cartão foi movido para a lixeira",
     "card-comments-title": "Este cartão possui %s comentários.",
     "card-delete-notice": "A exclusão será permanente. Você perderá todas as ações associadas a este cartão.",
     "card-delete-pop": "Todas as ações serão removidas da lista de Atividades e vocês não poderá re-abrir o cartão. Não há como desfazer.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "Você pode mover um cartão para fora da lixeira e movê-lo para o quadro e preservar a atividade.",
     "card-due": "Data fim",
     "card-due-on": "Finaliza em",
     "card-spent": "Tempo Gasto",
     "card-edit-attachments": "Editar anexos",
+    "card-edit-custom-fields": "Editar campos customizados",
     "card-edit-labels": "Editar etiquetas",
     "card-edit-members": "Editar membros",
     "card-labels-title": "Alterar etiquetas do cartão.",
@@ -118,6 +121,8 @@
     "card-start": "Data início",
     "card-start-on": "Começa em",
     "cardAttachmentsPopup-title": "Anexar a partir de",
+    "cardCustomField-datePopup-title": "Mudar data",
+    "cardCustomFieldsPopup-title": "Editar campos customizados",
     "cardDeletePopup-title": "Excluir Cartão?",
     "cardDetailsActionsPopup-title": "Ações do cartão",
     "cardLabelsPopup-title": "Etiquetas",
@@ -141,7 +146,7 @@
     "clipboard": "Área de Transferência ou arraste e solte",
     "close": "Fechar",
     "close-board": "Fechar Quadro",
-    "close-board-pop": "You will be able to restore the board by clicking the “Recycle Bin” button from the home header.",
+    "close-board-pop": "Você poderá restaurar o quadro clicando no botão lixeira no cabeçalho da página inicial",
     "color-black": "preto",
     "color-blue": "azul",
     "color-green": "verde",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Criar Quadro",
     "chooseBoardSourcePopup-title": "Importar quadro",
     "createLabelPopup-title": "Criar Etiqueta",
+    "createCustomField": "Criar campo",
+    "createCustomFieldPopup-title": "Criar campo",
     "current": "atual",
+    "custom-field-delete-pop": "Não existe desfazer. Isso irá remover o campo customizado de todos os cartões e destruir seu histórico",
+    "custom-field-checkbox": "Caixa de seleção",
+    "custom-field-date": "Data",
+    "custom-field-dropdown": "Lista suspensa",
+    "custom-field-dropdown-none": "(nada)",
+    "custom-field-dropdown-options": "Lista de opções",
+    "custom-field-dropdown-options-placeholder": "Pressione enter para adicionar mais opções",
+    "custom-field-dropdown-unknown": "(desconhecido)",
+    "custom-field-number": "Número",
+    "custom-field-text": "Texto",
+    "custom-fields": "Campos customizados",
     "date": "Data",
     "decline": "Rejeitar",
     "default-avatar": "Avatar padrão",
     "delete": "Excluir",
+    "deleteCustomFieldPopup-title": "Deletar campo customizado?",
     "deleteLabelPopup-title": "Excluir Etiqueta?",
     "description": "Descrição",
     "disambiguateMultiLabelPopup-title": "Desambiguar ações de etiquetas",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Limite de WIP",
     "editCardStartDatePopup-title": "Altera data de início",
     "editCardDueDatePopup-title": "Altera data fim",
+    "editCustomFieldPopup-title": "Editar campo",
     "editCardSpentTimePopup-title": "Editar tempo gasto",
     "editLabelPopup-title": "Alterar Etiqueta",
     "editNotificationPopup-title": "Editar Notificações",
@@ -222,9 +242,12 @@
     "filter-clear": "Limpar filtro",
     "filter-no-label": "Sem labels",
     "filter-no-member": "Sem membros",
+    "filter-no-custom-fields": "Não há campos customizados",
     "filter-on": "Filtro está ativo",
     "filter-on-desc": "Você está filtrando cartões neste quadro. Clique aqui para editar o filtro.",
     "filter-to-selection": "Filtrar esta seleção",
+    "advanced-filter-label": "Filtro avançado",
+    "advanced-filter-description": "Um Filtro Avançado permite escrever uma string contendo os seguintes operadores: == != <= >= && || () Um espaço é utilizado como separador entre os operadores. Você pode filtrar todos os campos customizados digitando seus nomes e valores. Por exemplo: campo1 == valor1. Nota: se campos ou valores contém espaços, você precisa encapsular eles em aspas simples. Por exemplo: 'campo 1' == 'valor 1'. Você também pode combinar múltiplas condições. Por exemplo: F1 == V1 || F1 == V2. Normalmente todos os operadores são interpretados da esquerda para a direita. Você pode mudar a ordem ao incluir parênteses. Por exemplo: F1 == V1 e (F2 == V2 || F2 == V3)",
     "fullname": "Nome Completo",
     "header-logo-title": "Voltar para a lista de quadros.",
     "hide-system-messages": "Esconde mensagens de sistema",
@@ -264,17 +287,17 @@
     "leave-board-pop": "Tem a certeza de que pretende sair de __boardTitle__? Você será removido de todos os cartões neste quadro.",
     "leaveBoardPopup-title": "Sair do Quadro ?",
     "link-card": "Vincular a este cartão",
-    "list-archive-cards": "Move all cards in this list to Recycle Bin",
-    "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Recycle Bin and bring them back to the board, click “Menu” > “Recycle Bin”.",
+    "list-archive-cards": "Mover todos os cartões nesta lista para a lixeira",
+    "list-archive-cards-pop": "Isso irá remover todos os cartões nesta lista do quadro. Para visualizar cartões na lixeira e trazê-los de volta ao quadro, clique em \"Menu\" > \"Lixeira\".",
     "list-move-cards": "Mover todos os cartões desta lista",
     "list-select-cards": "Selecionar todos os cartões nesta lista",
     "listActionPopup-title": "Listar Ações",
-    "swimlaneActionPopup-title": "Swimlane Actions",
+    "swimlaneActionPopup-title": "Ações de Swimlane",
     "listImportCardPopup-title": "Importe um cartão do Trello",
     "listMorePopup-title": "Mais",
     "link-list": "Vincular a esta lista",
     "list-delete-pop": "Todas as ações serão removidas da lista de atividades e você não poderá recuperar a lista. Não há como desfazer.",
-    "list-delete-suggest-archive": "You can move a list to Recycle Bin to remove it from the board and preserve the activity.",
+    "list-delete-suggest-archive": "Você pode mover a lista para a lixeira para removê-la do quadro e preservar a atividade.",
     "lists": "Listas",
     "swimlanes": "Swimlanes",
     "log-out": "Sair",
@@ -294,9 +317,9 @@
     "muted-info": "Você nunca receberá qualquer notificação desse board",
     "my-boards": "Meus Quadros",
     "name": "Nome",
-    "no-archived-cards": "No cards in Recycle Bin.",
-    "no-archived-lists": "No lists in Recycle Bin.",
-    "no-archived-swimlanes": "No swimlanes in Recycle Bin.",
+    "no-archived-cards": "Não há cartões na lixeira",
+    "no-archived-lists": "Não há listas na lixeira",
+    "no-archived-swimlanes": "Não há swimlanes na lixeira",
     "no-results": "Nenhum resultado.",
     "normal": "Normal",
     "normal-desc": "Pode ver e editar cartões. Não pode alterar configurações.",
@@ -361,11 +384,12 @@
     "overtime-hours": "Tempo extras (Horas)",
     "overtime": "Tempo extras",
     "has-overtime-cards": "Tem cartões de horas extras",
-    "has-spenttime-cards": "Has spent time cards",
+    "has-spenttime-cards": "Gastou cartões de tempo",
     "time": "Tempo",
     "title": "Título",
     "tracking": "Tracking",
     "tracking-info": "Você será notificado se houver qualquer alteração em cards em que você é o criador ou membro",
+    "type": "Tipo",
     "unassign-member": "Membro não associado",
     "unsaved-description": "Você possui uma descrição não salva",
     "unwatch": "Deixar de observar",
@@ -374,12 +398,12 @@
     "uploaded-avatar": "Avatar carregado",
     "username": "Nome de usuário",
     "view-it": "Visualizar",
-    "warn-list-archived": "warning: this card is in an list at Recycle Bin",
+    "warn-list-archived": "Aviso: este cartão está em uma lista na lixeira",
     "watch": "Observar",
     "watching": "Observando",
     "watching-info": "Você será notificado em qualquer alteração desse board",
     "welcome-board": "Board de Boas Vindas",
-    "welcome-swimlane": "Milestone 1",
+    "welcome-swimlane": "Marco 1",
     "welcome-list1": "Básico",
     "welcome-list2": "Avançado",
     "what-to-do": "O que você gostaria de fazer?",
@@ -430,18 +454,25 @@
     "hours": "horas",
     "minutes": "minutos",
     "seconds": "segundos",
+    "show-field-on-card": "Mostrar este campo no cartão",
     "yes": "Sim",
     "no": "Não",
     "accounts": "Contas",
     "accounts-allowEmailChange": "Permitir Mudança de Email",
-    "accounts-allowUserNameChange": "Allow Username Change",
+    "accounts-allowUserNameChange": "Permitir alteração de nome de usuário",
     "createdAt": "Criado em",
     "verified": "Verificado",
     "active": "Ativo",
-    "card-received": "Received",
-    "card-received-on": "Received on",
-    "card-end": "End",
-    "card-end-on": "Ends on",
-    "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "card-received": "Recebido",
+    "card-received-on": "Recebido em",
+    "card-end": "Fim",
+    "card-end-on": "Termina em",
+    "editCardReceivedDatePopup-title": "Modificar data de recebimento",
+    "editCardEndDatePopup-title": "Mudar data de fim",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 33 - 2
i18n/pt.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "commented on __card__: __comment__",
     "act-createBoard": "created __board__",
     "act-createCard": "added __card__ to __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "added __list__ to __board__",
     "act-addBoardMember": "added __member__ to __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "attached %s to %s",
     "activity-created": "Criado %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "excluded %s from %s",
     "activity-imported": "imported %s into %s from %s",
     "activity-imported-board": "imported %s from %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "This card has %s comment.",
     "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
     "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Due",
     "card-due-on": "Due on",
     "card-spent": "Spent Time",
     "card-edit-attachments": "Edit attachments",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Edit labels",
     "card-edit-members": "Edit members",
     "card-labels-title": "Change the labels for the card.",
@@ -118,6 +121,8 @@
     "card-start": "Start",
     "card-start-on": "Starts on",
     "cardAttachmentsPopup-title": "Attach From",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Delete Card?",
     "cardDetailsActionsPopup-title": "Card Actions",
     "cardLabelsPopup-title": "Etiquetas",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Create Board",
     "chooseBoardSourcePopup-title": "Import board",
     "createLabelPopup-title": "Create Label",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "current",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Date",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Date",
     "decline": "Decline",
     "default-avatar": "Default avatar",
     "delete": "Delete",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Delete Label?",
     "description": "Description",
     "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "Change start date",
     "editCardDueDatePopup-title": "Change due date",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "Change Label",
     "editNotificationPopup-title": "Edit Notification",
@@ -222,9 +242,12 @@
     "filter-clear": "Clear filter",
     "filter-no-label": "No label",
     "filter-no-member": "No member",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Filter is on",
     "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
     "filter-to-selection": "Filter to selection",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Full Name",
     "header-logo-title": "Go back to your boards page.",
     "hide-system-messages": "Hide system messages",
@@ -366,6 +389,7 @@
     "title": "Title",
     "tracking": "Tracking",
     "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
     "unassign-member": "Unassign member",
     "unsaved-description": "You have an unsaved description.",
     "unwatch": "Unwatch",
@@ -430,6 +454,7 @@
     "hours": "hours",
     "minutes": "minutes",
     "seconds": "seconds",
+    "show-field-on-card": "Show this field on card",
     "yes": "Yes",
     "no": "Não",
     "accounts": "Contas",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 33 - 2
i18n/ro.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "commented on __card__: __comment__",
     "act-createBoard": "created __board__",
     "act-createCard": "added __card__ to __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "added __list__ to __board__",
     "act-addBoardMember": "added __member__ to __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "attached %s to %s",
     "activity-created": "created %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "excluded %s from %s",
     "activity-imported": "imported %s into %s from %s",
     "activity-imported-board": "imported %s from %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "This card has %s comment.",
     "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
     "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Due",
     "card-due-on": "Due on",
     "card-spent": "Spent Time",
     "card-edit-attachments": "Edit attachments",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Edit labels",
     "card-edit-members": "Edit members",
     "card-labels-title": "Change the labels for the card.",
@@ -118,6 +121,8 @@
     "card-start": "Start",
     "card-start-on": "Starts on",
     "cardAttachmentsPopup-title": "Attach From",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Delete Card?",
     "cardDetailsActionsPopup-title": "Card Actions",
     "cardLabelsPopup-title": "Labels",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Create Board",
     "chooseBoardSourcePopup-title": "Import board",
     "createLabelPopup-title": "Create Label",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "current",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Date",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Date",
     "decline": "Decline",
     "default-avatar": "Default avatar",
     "delete": "Delete",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Delete Label?",
     "description": "Description",
     "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "Change start date",
     "editCardDueDatePopup-title": "Change due date",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "Change Label",
     "editNotificationPopup-title": "Edit Notification",
@@ -222,9 +242,12 @@
     "filter-clear": "Clear filter",
     "filter-no-label": "No label",
     "filter-no-member": "No member",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Filter is on",
     "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
     "filter-to-selection": "Filter to selection",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Full Name",
     "header-logo-title": "Go back to your boards page.",
     "hide-system-messages": "Hide system messages",
@@ -366,6 +389,7 @@
     "title": "Titlu",
     "tracking": "Tracking",
     "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
     "unassign-member": "Unassign member",
     "unsaved-description": "You have an unsaved description.",
     "unwatch": "Unwatch",
@@ -430,6 +454,7 @@
     "hours": "hours",
     "minutes": "minutes",
     "seconds": "seconds",
+    "show-field-on-card": "Show this field on card",
     "yes": "Yes",
     "no": "No",
     "accounts": "Accounts",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 34 - 3
i18n/ru.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "прокомментировал __card__: __comment__",
     "act-createBoard": "создал __board__",
     "act-createCard": "добавил __card__ в __list__",
+    "act-createCustomField": "Расширенный фильтр позволяет написать строку, содержащую следующие операторы: ==! = <=> = && || () Пространство используется как разделитель между Операторами. Вы можете фильтровать все пользовательские поля, введя их имена и значения. Например: Field1 == Value1. Примечание. Если поля или значения содержат пробелы, вам необходимо инкапсулировать их в одинарные кавычки. Например: «Поле 1» == «Значение 1». Также вы можете комбинировать несколько условий. Например: F1 == V1 || F1 = V2. Обычно все операторы интерпретируются слева направо. Вы можете изменить порядок, разместив скобки. Например: F1 == V1 и (F2 == V2 || F2 == V3)",
     "act-createList": "добавил __list__ для __board__",
     "act-addBoardMember": "добавил __member__ в __board__",
     "act-archivedBoard": "Доска __board__ перемещена в Корзину",
@@ -30,6 +31,7 @@
     "activity-archived": "%s перемещено в Корзину",
     "activity-attached": "прикрепил %s к %s",
     "activity-created": "создал %s",
+    "activity-customfield-created": "создать настраиваемое поле",
     "activity-excluded": "исключил %s из %s",
     "activity-imported": "импортировал %s в %s из %s",
     "activity-imported-board": "импортировал %s из %s",
@@ -111,6 +113,7 @@
     "card-due-on": "Выполнить до",
     "card-spent": "Затраченное время",
     "card-edit-attachments": "Изменить вложения",
+    "card-edit-custom-fields": "Редактировать настраиваемые поля",
     "card-edit-labels": "Изменить метку",
     "card-edit-members": "Изменить участников",
     "card-labels-title": "Изменить метки для этой карточки.",
@@ -118,6 +121,8 @@
     "card-start": "Дата начала",
     "card-start-on": "Начнётся с",
     "cardAttachmentsPopup-title": "Прикрепить из",
+    "cardCustomField-datePopup-title": "Изменить дату",
+    "cardCustomFieldsPopup-title": "редактировать настраиваемые поля",
     "cardDeletePopup-title": "Удалить карточку?",
     "cardDetailsActionsPopup-title": "Действия в карточке",
     "cardLabelsPopup-title": "Метки",
@@ -161,17 +166,31 @@
     "copy-card-link-to-clipboard": "Копировать ссылку на карточку в буфер обмена",
     "copyCardPopup-title": "Копировать карточку",
     "copyChecklistToManyCardsPopup-title": "Копировать шаблон контрольного списка в несколько карточек",
-    "copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
+    "copyChecklistToManyCardsPopup-instructions": "Названия и описания целевых карт в формате JSON",
     "copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
     "create": "Создать",
     "createBoardPopup-title": "Создать доску",
     "chooseBoardSourcePopup-title": "Импортировать доску",
     "createLabelPopup-title": "Создать метку",
+    "createCustomField": "Создать поле",
+    "createCustomFieldPopup-title": "Создать поле",
     "current": "текущий",
+    "custom-field-delete-pop": "Отменить нельзя. Это удалит настраиваемое поле со всех карт и уничтожит его историю.",
+    "custom-field-checkbox": "Галочка",
+    "custom-field-date": "Дата",
+    "custom-field-dropdown": "Выпадающий список",
+    "custom-field-dropdown-none": "(нет)",
+    "custom-field-dropdown-options": "Параметры списка",
+    "custom-field-dropdown-options-placeholder": "Нажмите «Ввод», чтобы добавить дополнительные параметры.",
+    "custom-field-dropdown-unknown": "(неизвестно)",
+    "custom-field-number": "Номер",
+    "custom-field-text": "Текст",
+    "custom-fields": "Настраиваемые поля",
     "date": "Дата",
     "decline": "Отклонить",
     "default-avatar": "Аватар по умолчанию",
     "delete": "Удалить",
+    "deleteCustomFieldPopup-title": "Удалить настраиваемые поля?",
     "deleteLabelPopup-title": "Удалить метку?",
     "description": "Описание",
     "disambiguateMultiLabelPopup-title": "Разрешить конфликт меток",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Мягкий лимит на кол-во задач",
     "editCardStartDatePopup-title": "Изменить дату начала",
     "editCardDueDatePopup-title": "Изменить дату выполнения",
+    "editCustomFieldPopup-title": "Редактировать поле",
     "editCardSpentTimePopup-title": "Изменить затраченное время",
     "editLabelPopup-title": "Изменить метки",
     "editNotificationPopup-title": "Редактировать уведомления",
@@ -222,9 +242,12 @@
     "filter-clear": "Очистить фильтр",
     "filter-no-label": "Нет метки",
     "filter-no-member": "Нет участников",
+    "filter-no-custom-fields": "Нет настраиваемых полей",
     "filter-on": "Включен фильтр",
     "filter-on-desc": "Показываются карточки, соответствующие настройкам фильтра. Нажмите для редактирования.",
     "filter-to-selection": "Filter to selection",
+    "advanced-filter-label": "Расширенный фильтр",
+    "advanced-filter-description": "Расширенный фильтр позволяет написать строку, содержащую следующие операторы: ==! = <=> = && || () Пространство используется как разделитель между Операторами. Вы можете фильтровать все пользовательские поля, введя их имена и значения. Например: Field1 == Value1. Примечание: Если поля или значения содержат пробелы, вам необходимо 'брать' их в одинарные кавычки. Например: 'Поле 1' == 'Значение 1'. Также вы можете комбинировать несколько условий. Например: F1 == V1 || F1 = V2. Обычно все операторы интерпретируются слева направо. Вы можете изменить порядок, разместив скобки. Например: F1 == V1 и (F2 == V2 || F2 == V3)",
     "fullname": "Полное имя",
     "header-logo-title": "Вернуться к доскам.",
     "hide-system-messages": "Скрыть системные сообщения",
@@ -366,6 +389,7 @@
     "title": "Название",
     "tracking": "Отслеживание",
     "tracking-info": "Вы будете уведомлены о любых изменениях в тех карточках, в которых вы являетесь создателем или участником.",
+    "type": "Тип",
     "unassign-member": "Отменить назначение участника",
     "unsaved-description": "У вас есть несохраненное описание.",
     "unwatch": "Перестать следить",
@@ -430,11 +454,12 @@
     "hours": "часы",
     "minutes": "минуты",
     "seconds": "секунды",
+    "show-field-on-card": "Показать это поле на карте",
     "yes": "Да",
     "no": "Нет",
     "accounts": "Учетные записи",
     "accounts-allowEmailChange": "Разрешить изменение электронной почты",
-    "accounts-allowUserNameChange": "Allow Username Change",
+    "accounts-allowUserNameChange": "Разрешить изменение имени пользователя",
     "createdAt": "Создано на",
     "verified": "Проверено",
     "active": "Действующий",
@@ -443,5 +468,11 @@
     "card-end": "Дата окончания",
     "card-end-on": "Завершится до",
     "editCardReceivedDatePopup-title": "Изменить дату получения",
-    "editCardEndDatePopup-title": "Изменить дату завершения"
+    "editCardEndDatePopup-title": "Изменить дату завершения",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 33 - 2
i18n/sr.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "commented on __card__: __comment__",
     "act-createBoard": "created __board__",
     "act-createCard": "added __card__ to __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "added __list__ to __board__",
     "act-addBoardMember": "added __member__ to __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "prikačio %s u %s",
     "activity-created": "kreirao %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "izuzmi %s iz %s",
     "activity-imported": "uvezao %s u %s iz %s",
     "activity-imported-board": "uvezao %s iz %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "Ova kartica ima %s komentar.",
     "card-delete-notice": "Brisanje je trajno. Izgubićeš sve akcije povezane sa ovom karticom.",
     "card-delete-pop": "Sve akcije će biti uklonjene sa liste aktivnosti i kartica neće moći biti ponovo otvorena. Nema vraćanja unazad.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Krajnji datum",
     "card-due-on": "Završava se",
     "card-spent": "Spent Time",
     "card-edit-attachments": "Uredi priloge",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Uredi natpise",
     "card-edit-members": "Uredi članove",
     "card-labels-title": "Promeni natpis na kartici.",
@@ -118,6 +121,8 @@
     "card-start": "Početak",
     "card-start-on": "Počinje",
     "cardAttachmentsPopup-title": "Attach From",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Delete Card?",
     "cardDetailsActionsPopup-title": "Card Actions",
     "cardLabelsPopup-title": "Labels",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Create Board",
     "chooseBoardSourcePopup-title": "Import board",
     "createLabelPopup-title": "Create Label",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "current",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Datum",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Datum",
     "decline": "Decline",
     "default-avatar": "Default avatar",
     "delete": "Delete",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Delete Label?",
     "description": "Description",
     "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "Izmeni početni datum",
     "editCardDueDatePopup-title": "Izmeni krajnji datum",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "Change Label",
     "editNotificationPopup-title": "Izmeni notifikaciju",
@@ -222,9 +242,12 @@
     "filter-clear": "Clear filter",
     "filter-no-label": "Nema oznake",
     "filter-no-member": "Nema člana",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Filter is on",
     "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
     "filter-to-selection": "Filter to selection",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Full Name",
     "header-logo-title": "Go back to your boards page.",
     "hide-system-messages": "Sakrij sistemske poruke",
@@ -366,6 +389,7 @@
     "title": "Naslov",
     "tracking": "Praćenje",
     "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
     "unassign-member": "Unassign member",
     "unsaved-description": "Imaš nesnimljen opis.",
     "unwatch": "Ne posmatraj",
@@ -430,6 +454,7 @@
     "hours": "hours",
     "minutes": "minutes",
     "seconds": "seconds",
+    "show-field-on-card": "Show this field on card",
     "yes": "Yes",
     "no": "No",
     "accounts": "Accounts",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 54 - 23
i18n/sv.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "kommenterade __card__: __comment__",
     "act-createBoard": "skapade __board__",
     "act-createCard": "lade till __card__ to __list__",
+    "act-createCustomField": "skapa anpassat fält __customField__",
     "act-createList": "lade till __list__ to __board__",
     "act-addBoardMember": "lade till __member__ to __board__",
     "act-archivedBoard": "__board__ flyttad till papperskorgen",
@@ -30,6 +31,7 @@
     "activity-archived": "%s flyttad till papperskorgen",
     "activity-attached": "bifogade %s to %s",
     "activity-created": "skapade %s",
+    "activity-customfield-created": "skapa anpassat fält %s",
     "activity-excluded": "exkluderade %s från %s",
     "activity-imported": "importerade %s till %s från %s",
     "activity-imported-board": "importerade %s från %s",
@@ -45,7 +47,7 @@
     "add-attachment": "Lägg till bilaga",
     "add-board": "Lägg till anslagstavla",
     "add-card": "Lägg till kort",
-    "add-swimlane": "Add Swimlane",
+    "add-swimlane": "Lägg till simbana",
     "add-checklist": "Lägg till checklista",
     "add-checklist-item": "Lägg till ett objekt till kontrollista",
     "add-cover": "Lägg till omslag",
@@ -66,16 +68,16 @@
     "app-is-offline": "Wekan laddar, vänta. Uppdatering av sidan kommer att leda till förlust av data. Om Wekan inte laddas, kontrollera att Wekan-servern inte har stoppats.",
     "archive": "Flytta till papperskorgen",
     "archive-all": "Flytta alla till papperskorgen",
-    "archive-board": "Move Board to Recycle Bin",
-    "archive-card": "Move Card to Recycle Bin",
-    "archive-list": "Move List to Recycle Bin",
-    "archive-swimlane": "Move Swimlane to Recycle Bin",
-    "archive-selection": "Move selection to Recycle Bin",
-    "archiveBoardPopup-title": "Move Board to Recycle Bin?",
+    "archive-board": "Flytta anslagstavla till papperskorgen",
+    "archive-card": "Flytta kort till papperskorgen",
+    "archive-list": "Flytta lista till papperskorgen",
+    "archive-swimlane": "Flytta simbana till papperskorgen",
+    "archive-selection": "Flytta val till papperskorgen",
+    "archiveBoardPopup-title": "Flytta anslagstavla till papperskorgen?",
     "archived-items": "Papperskorgen",
-    "archived-boards": "Boards in Recycle Bin",
+    "archived-boards": "Anslagstavlor i papperskorgen",
     "restore-board": "Återställ anslagstavla",
-    "no-archived-boards": "No Boards in Recycle Bin.",
+    "no-archived-boards": "Inga anslagstavlor i papperskorgen",
     "archives": "Papperskorgen",
     "assign-member": "Tilldela medlem",
     "attached": "bifogad",
@@ -98,7 +100,7 @@
     "boardMenuPopup-title": "Anslagstavla meny",
     "boards": "Anslagstavlor",
     "board-view": "Board View",
-    "board-view-swimlanes": "Swimlanes",
+    "board-view-swimlanes": "Simbanor",
     "board-view-lists": "Listor",
     "bucket-example": "Gilla \"att-göra-innan-jag-dör-lista\" till exempel",
     "cancel": "Avbryt",
@@ -106,11 +108,12 @@
     "card-comments-title": "Detta kort har %s kommentar.",
     "card-delete-notice": "Ta bort är permanent. Du kommer att förlora alla åtgärder i samband med detta kort.",
     "card-delete-pop": "Alla åtgärder kommer att tas bort från aktivitetsflöde och du kommer inte att kunna öppna kortet igen. Det går inte att ångra.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Förfaller",
     "card-due-on": "Förfaller på",
     "card-spent": "Spenderad tid",
     "card-edit-attachments": "Redigera bilaga",
+    "card-edit-custom-fields": "Redigera anpassade fält",
     "card-edit-labels": "Redigera etiketter",
     "card-edit-members": "Redigera medlemmar",
     "card-labels-title": "Ändra etiketter för kortet.",
@@ -118,6 +121,8 @@
     "card-start": "Börja",
     "card-start-on": "Börja med",
     "cardAttachmentsPopup-title": "Bifoga från",
+    "cardCustomField-datePopup-title": "Ändra datum",
+    "cardCustomFieldsPopup-title": "Redigera anpassade fält",
     "cardDeletePopup-title": "Ta bort kort?",
     "cardDetailsActionsPopup-title": "Kortåtgärder",
     "cardLabelsPopup-title": "Etiketter",
@@ -161,17 +166,31 @@
     "copy-card-link-to-clipboard": "Kopiera kortlänk till urklipp",
     "copyCardPopup-title": "Kopiera kort",
     "copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
-    "copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
+    "copyChecklistToManyCardsPopup-instructions": "Destinationskorttitlar och beskrivningar i detta JSON-format",
     "copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
     "create": "Skapa",
     "createBoardPopup-title": "Skapa anslagstavla",
     "chooseBoardSourcePopup-title": "Importera anslagstavla",
     "createLabelPopup-title": "Skapa etikett",
+    "createCustomField": "Skapa fält",
+    "createCustomFieldPopup-title": "Skapa fält",
     "current": "aktuell",
+    "custom-field-delete-pop": "Det går inte att ångra. Detta tar bort det här anpassade fältet från alla kort och förstör dess historia.",
+    "custom-field-checkbox": "Kryssruta",
+    "custom-field-date": "Datum",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(inga)",
+    "custom-field-dropdown-options": "Listalternativ",
+    "custom-field-dropdown-options-placeholder": "Tryck på enter för att lägga till fler alternativ",
+    "custom-field-dropdown-unknown": "(okänd)",
+    "custom-field-number": "Nummer",
+    "custom-field-text": "Text",
+    "custom-fields": "Anpassade fält",
     "date": "Datum",
     "decline": "Nedgång",
     "default-avatar": "Standard avatar",
     "delete": "Ta bort",
+    "deleteCustomFieldPopup-title": "Ta bort anpassade fält?",
     "deleteLabelPopup-title": "Ta bort etikett?",
     "description": "Beskrivning",
     "disambiguateMultiLabelPopup-title": "Otvetydig etikettåtgärd",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Mjuk WIP-gräns",
     "editCardStartDatePopup-title": "Ändra startdatum",
     "editCardDueDatePopup-title": "Ändra förfallodatum",
+    "editCustomFieldPopup-title": "Redigera fält",
     "editCardSpentTimePopup-title": "Ändra spenderad tid",
     "editLabelPopup-title": "Ändra etikett",
     "editNotificationPopup-title": "Redigera avisering",
@@ -222,9 +242,12 @@
     "filter-clear": "Rensa filter",
     "filter-no-label": "Ingen etikett",
     "filter-no-member": "Ingen medlem",
+    "filter-no-custom-fields": "Inga anpassade fält",
     "filter-on": "Filter är på",
     "filter-on-desc": "Du filtrerar kort på denna anslagstavla. Klicka här för att redigera filter.",
     "filter-to-selection": "Filter till val",
+    "advanced-filter-label": "Avancerat filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Namn",
     "header-logo-title": "Gå tillbaka till din anslagstavlor-sida.",
     "hide-system-messages": "Göm systemmeddelanden",
@@ -269,14 +292,14 @@
     "list-move-cards": "Flytta alla kort i denna lista",
     "list-select-cards": "Välj alla kort i denna lista",
     "listActionPopup-title": "Liståtgärder",
-    "swimlaneActionPopup-title": "Swimlane Actions",
+    "swimlaneActionPopup-title": "Simbana-åtgärder",
     "listImportCardPopup-title": "Importera ett Trello kort",
     "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.",
-    "list-delete-suggest-archive": "You can move a list to Recycle Bin to remove it from the board and preserve the activity.",
+    "list-delete-suggest-archive": "Du kan flytta en lista till papperskorgen för att ta bort den från brädet och bevara aktiviteten.",
     "lists": "Listor",
-    "swimlanes": "Swimlanes",
+    "swimlanes": "Simbanor ",
     "log-out": "Logga ut",
     "log-in": "Logga in",
     "loginPopup-title": "Logga in",
@@ -296,7 +319,7 @@
     "name": "Namn",
     "no-archived-cards": "Inga kort i papperskorgen.",
     "no-archived-lists": "Inga listor i papperskorgen.",
-    "no-archived-swimlanes": "No swimlanes in Recycle Bin.",
+    "no-archived-swimlanes": "Inga simbanor i papperskorgen.",
     "no-results": "Inga reslutat",
     "normal": "Normal",
     "normal-desc": "Kan se och redigera kort. Kan inte ändra inställningar.",
@@ -332,7 +355,7 @@
     "restore": "Återställ",
     "save": "Spara",
     "search": "Sök",
-    "search-cards": "Search from card titles and descriptions on this board",
+    "search-cards": "Sök från korttitlar och beskrivningar på det här brädet",
     "search-example": "Text att söka efter?",
     "select-color": "Välj färg",
     "set-wip-limit-value": "Ange en gräns för det maximala antalet uppgifter i den här listan",
@@ -361,11 +384,12 @@
     "overtime-hours": "Övertid (timmar)",
     "overtime": "Övertid",
     "has-overtime-cards": "Har övertidskort",
-    "has-spenttime-cards": "Has spent time cards",
+    "has-spenttime-cards": "Har spenderat tidkort",
     "time": "Tid",
     "title": "Titel",
     "tracking": "Spårning",
     "tracking-info": "Du kommer att meddelas om eventuella ändringar av dessa kort du deltar i som skapare eller medlem.",
+    "type": "Skriv",
     "unassign-member": "Ta bort tilldelad medlem",
     "unsaved-description": "Du har en osparad beskrivning.",
     "unwatch": "Avbevaka",
@@ -374,7 +398,7 @@
     "uploaded-avatar": "Laddade upp en avatar",
     "username": "Änvandarnamn",
     "view-it": "Visa det",
-    "warn-list-archived": "warning: this card is in an list at Recycle Bin",
+    "warn-list-archived": "varning: det här kortet finns i en lista i papperskorgen",
     "watch": "Bevaka",
     "watching": "Bevakar",
     "watching-info": "Du kommer att meddelas om alla ändringar på denna anslagstavla",
@@ -430,18 +454,25 @@
     "hours": "timmar",
     "minutes": "minuter",
     "seconds": "sekunder",
+    "show-field-on-card": "Visa detta fält på kort",
     "yes": "Ja",
     "no": "Nej",
     "accounts": "Konton",
     "accounts-allowEmailChange": "Tillåt e-poständring",
-    "accounts-allowUserNameChange": "Allow Username Change",
+    "accounts-allowUserNameChange": "Tillåt användarnamnändring",
     "createdAt": "Skapad vid",
     "verified": "Verifierad",
     "active": "Aktiv",
     "card-received": "Mottagen",
-    "card-received-on": "Received on",
+    "card-received-on": "Mottagen den",
     "card-end": "Slut",
-    "card-end-on": "Ends on",
+    "card-end-on": "Slutar den",
     "editCardReceivedDatePopup-title": "Ändra mottagningsdatum",
-    "editCardEndDatePopup-title": "Ändra slutdatum"
+    "editCardEndDatePopup-title": "Ändra slutdatum",
+    "assigned-by": "Tilldelad av",
+    "requested-by": "Efterfrågad av",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Ta bort anslagstavla?",
+    "delete-board": "Ta bort anslagstavla"
 }

+ 33 - 2
i18n/ta.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "commented on __card__: __comment__",
     "act-createBoard": "created __board__",
     "act-createCard": "added __card__ to __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "added __list__ to __board__",
     "act-addBoardMember": "added __member__ to __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "attached %s to %s",
     "activity-created": "created %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "excluded %s from %s",
     "activity-imported": "imported %s into %s from %s",
     "activity-imported-board": "imported %s from %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "This card has %s comment.",
     "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
     "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Due",
     "card-due-on": "Due on",
     "card-spent": "Spent Time",
     "card-edit-attachments": "Edit attachments",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Edit labels",
     "card-edit-members": "Edit members",
     "card-labels-title": "Change the labels for the card.",
@@ -118,6 +121,8 @@
     "card-start": "Start",
     "card-start-on": "Starts on",
     "cardAttachmentsPopup-title": "Attach From",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Delete Card?",
     "cardDetailsActionsPopup-title": "Card Actions",
     "cardLabelsPopup-title": "Labels",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Create Board",
     "chooseBoardSourcePopup-title": "Import board",
     "createLabelPopup-title": "Create Label",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "current",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Date",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Date",
     "decline": "Decline",
     "default-avatar": "Default avatar",
     "delete": "Delete",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Delete Label?",
     "description": "Description",
     "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "Change start date",
     "editCardDueDatePopup-title": "Change due date",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "Change Label",
     "editNotificationPopup-title": "Edit Notification",
@@ -222,9 +242,12 @@
     "filter-clear": "Clear filter",
     "filter-no-label": "No label",
     "filter-no-member": "No member",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Filter is on",
     "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
     "filter-to-selection": "Filter to selection",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Full Name",
     "header-logo-title": "Go back to your boards page.",
     "hide-system-messages": "Hide system messages",
@@ -366,6 +389,7 @@
     "title": "Title",
     "tracking": "Tracking",
     "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
     "unassign-member": "Unassign member",
     "unsaved-description": "You have an unsaved description.",
     "unwatch": "Unwatch",
@@ -430,6 +454,7 @@
     "hours": "hours",
     "minutes": "minutes",
     "seconds": "seconds",
+    "show-field-on-card": "Show this field on card",
     "yes": "Yes",
     "no": "No",
     "accounts": "Accounts",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 33 - 2
i18n/th.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "ออกความเห็นที่ __card__: __comment__",
     "act-createBoard": "สร้าง __board__",
     "act-createCard": "เพิ่ม __card__ ไปยัง __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "เพิ่ม __list__ ไปยัง __board__",
     "act-addBoardMember": "เพิ่ม __member__ ไปยัง __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "แนบ %s ไปยัง %s",
     "activity-created": "สร้าง %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "ยกเว้น %s จาก %s",
     "activity-imported": "ถูกนำเข้า %s ไปยัง %s จาก %s",
     "activity-imported-board": "นำเข้า %s จาก %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "การ์ดนี้มี %s ความเห็น.",
     "card-delete-notice": "เป็นการลบถาวร คุณจะสูญเสียข้อมูลที่เกี่ยวข้องกับการ์ดนี้ทั้งหมด",
     "card-delete-pop": "การดำเนินการทั้งหมดจะถูกลบจาก feed กิจกรรมและคุณไม่สามารถเปิดได้อีกครั้งหรือยกเลิกการทำ",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "ครบกำหนด",
     "card-due-on": "ครบกำหนดเมื่อ",
     "card-spent": "Spent Time",
     "card-edit-attachments": "แก้ไขสิ่งที่แนบมา",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "แก้ไขป้ายกำกับ",
     "card-edit-members": "แก้ไขสมาชิก",
     "card-labels-title": "เปลี่ยนป้ายกำกับของการ์ด",
@@ -118,6 +121,8 @@
     "card-start": "เริ่ม",
     "card-start-on": "เริ่มเมื่อ",
     "cardAttachmentsPopup-title": "แนบจาก",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "ลบการ์ดนี้หรือไม่",
     "cardDetailsActionsPopup-title": "การดำเนินการการ์ด",
     "cardLabelsPopup-title": "ป้ายกำกับ",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "สร้างบอร์ด",
     "chooseBoardSourcePopup-title": "Import board",
     "createLabelPopup-title": "สร้างป้ายกำกับ",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "ปัจจุบัน",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "วันที่",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "วันที่",
     "decline": "ปฎิเสธ",
     "default-avatar": "ภาพเริ่มต้น",
     "delete": "ลบ",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "ลบป้ายกำกับนี้หรือไม่",
     "description": "คำอธิบาย",
     "disambiguateMultiLabelPopup-title": "การดำเนินการกำกับป้ายชัดเจน",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "เปลี่ยนวันเริ่มต้น",
     "editCardDueDatePopup-title": "เปลี่ยนวันครบกำหนด",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "เปลี่ยนป้ายกำกับ",
     "editNotificationPopup-title": "แก้ไขการแจ้งเตือน",
@@ -222,9 +242,12 @@
     "filter-clear": "ล้างตัวกรอง",
     "filter-no-label": "ไม่มีฉลาก",
     "filter-no-member": "ไม่มีสมาชิก",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "กรองบน",
     "filter-on-desc": "คุณกำลังกรองการ์ดในบอร์ดนี้ คลิกที่นี่เพื่อแก้ไขตัวกรอง",
     "filter-to-selection": "กรองตัวเลือก",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "ชื่อ นามสกุล",
     "header-logo-title": "ย้อนกลับไปที่หน้าบอร์ดของคุณ",
     "hide-system-messages": "ซ่อนข้อความของระบบ",
@@ -366,6 +389,7 @@
     "title": "หัวข้อ",
     "tracking": "ติดตาม",
     "tracking-info": "คุณจะได้รับแจ้งการเปลี่ยนแปลงใด ๆ กับการ์ดที่คุณมีส่วนร่วมในฐานะผู้สร้างหรือสมาชิก",
+    "type": "Type",
     "unassign-member": "ยกเลิกสมาชิก",
     "unsaved-description": "คุณมีคำอธิบายที่ไม่ได้บันทึก",
     "unwatch": "เลิกเฝ้าดู",
@@ -430,6 +454,7 @@
     "hours": "hours",
     "minutes": "minutes",
     "seconds": "seconds",
+    "show-field-on-card": "Show this field on card",
     "yes": "Yes",
     "no": "No",
     "accounts": "Accounts",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 33 - 2
i18n/tr.i18n.json

@@ -7,6 +7,7 @@
     "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-createCustomField": "__customField__ adlı özel alan yaratıldı",
     "act-createList": "__list__ listesini __board__ panosuna ekledi",
     "act-addBoardMember": "__member__ kullanıcısını __board__ panosuna ekledi",
     "act-archivedBoard": "__board__ Geri Dönüşüm Kutusu'na taşındı",
@@ -30,6 +31,7 @@
     "activity-archived": "%s Geri Dönüşüm Kutusu'na taşındı",
     "activity-attached": "%s içine %s ekledi",
     "activity-created": "%s öğesini oluşturdu",
+    "activity-customfield-created": "%s adlı özel alan yaratıldı",
     "activity-excluded": "%s içinden %s çıkarttı",
     "activity-imported": "%s kaynağından %s öğesini %s öğesinin içine taşıdı ",
     "activity-imported-board": "%s i %s içinden aktardı",
@@ -111,6 +113,7 @@
     "card-due-on": "Bitiş tarihi:",
     "card-spent": "Harcanan Zaman",
     "card-edit-attachments": "Ek dosyasını düzenle",
+    "card-edit-custom-fields": "Özel alanları düzenle",
     "card-edit-labels": "Etiketleri düzenle",
     "card-edit-members": "Üyeleri düzenle",
     "card-labels-title": "Bu kart için etiketleri düzenle",
@@ -118,6 +121,8 @@
     "card-start": "Başlama",
     "card-start-on": "Başlama tarihi:",
     "cardAttachmentsPopup-title": "Eklenme",
+    "cardCustomField-datePopup-title": "Tarihi değiştir",
+    "cardCustomFieldsPopup-title": "Özel alanları düzenle",
     "cardDeletePopup-title": "Kart Silinsin mi?",
     "cardDetailsActionsPopup-title": "Kart işlemleri",
     "cardLabelsPopup-title": "Etiketler",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Pano Oluşturma",
     "chooseBoardSourcePopup-title": "Panoyu içe aktar",
     "createLabelPopup-title": "Etiket Oluşturma",
+    "createCustomField": "Alanı yarat",
+    "createCustomFieldPopup-title": "Alanı yarat",
     "current": "mevcut",
+    "custom-field-delete-pop": "Bunun geri dönüşü yoktur. Bu özel alan tüm kartlardan kaldırılıp tarihçesi yokedilecektir.",
+    "custom-field-checkbox": "İşaret kutusu",
+    "custom-field-date": "Tarih",
+    "custom-field-dropdown": "Açılır liste",
+    "custom-field-dropdown-none": "(hiçbiri)",
+    "custom-field-dropdown-options": "Liste seçenekleri",
+    "custom-field-dropdown-options-placeholder": "Başka seçenekler eklemek için giriş tuşuna basınız",
+    "custom-field-dropdown-unknown": "(bilinmeyen)",
+    "custom-field-number": "Sayı",
+    "custom-field-text": "Metin",
+    "custom-fields": "Özel alanlar",
     "date": "Tarih",
     "decline": "Reddet",
     "default-avatar": "Varsayılan avatar",
     "delete": "Sil",
+    "deleteCustomFieldPopup-title": "Özel alan silinsin mi?",
     "deleteLabelPopup-title": "Etiket Silinsin mi?",
     "description": "Açıklama",
     "disambiguateMultiLabelPopup-title": "Etiket işlemini izah et",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Zayıf Devam Eden İş Sınırı",
     "editCardStartDatePopup-title": "Başlangıç tarihini değiştir",
     "editCardDueDatePopup-title": "Bitiş tarihini değiştir",
+    "editCustomFieldPopup-title": "Alanı düzenle",
     "editCardSpentTimePopup-title": "Harcanan zamanı değiştir",
     "editLabelPopup-title": "Etiket Değiştir",
     "editNotificationPopup-title": "Bildirimi değiştir",
@@ -222,9 +242,12 @@
     "filter-clear": "Filtreyi temizle",
     "filter-no-label": "Etiket yok",
     "filter-no-member": "Üye yok",
+    "filter-no-custom-fields": "Hiç özel alan yok",
     "filter-on": "Filtre aktif",
     "filter-on-desc": "Bu panodaki kartları filtreliyorsunuz. Fitreyi düzenlemek için tıklayın.",
     "filter-to-selection": "Seçime göre filtreleme yap",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Ad Soyad",
     "header-logo-title": "Panolar sayfanıza geri dön.",
     "hide-system-messages": "Sistem mesajlarını gizle",
@@ -366,6 +389,7 @@
     "title": "Başlık",
     "tracking": "Takip",
     "tracking-info": "Oluşturduğunuz veya üyesi olduğunuz tüm kartlardaki değişiklikler size bildirim olarak gelecek.",
+    "type": "Tür",
     "unassign-member": "Üyeye atamayı kaldır",
     "unsaved-description": "Kaydedilmemiş bir açıklama metnin bulunmakta",
     "unwatch": "Takibi bırak",
@@ -430,11 +454,12 @@
     "hours": "saat",
     "minutes": "dakika",
     "seconds": "saniye",
+    "show-field-on-card": "Bu alanı kartta göster",
     "yes": "Evet",
     "no": "Hayır",
     "accounts": "Hesaplar",
     "accounts-allowEmailChange": "E-posta Değiştirmeye İzin Ver",
-    "accounts-allowUserNameChange": "Allow Username Change",
+    "accounts-allowUserNameChange": "Kullanıcı adı değiştirmeye izin ver",
     "createdAt": "Oluşturulma tarihi",
     "verified": "Doğrulanmış",
     "active": "Aktif",
@@ -443,5 +468,11 @@
     "card-end": "Bitiş",
     "card-end-on": "Bitiş zamanı",
     "editCardReceivedDatePopup-title": "Giriş tarihini değiştir",
-    "editCardEndDatePopup-title": "Bitiş tarihini değiştir"
+    "editCardEndDatePopup-title": "Bitiş tarihini değiştir",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 33 - 2
i18n/uk.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "комментар в __card__: __comment__",
     "act-createBoard": "__board__ створенна",
     "act-createCard": "__card__ карта додана до __list__ листа",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "added __list__ to __board__",
     "act-addBoardMember": "added __member__ to __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "attached %s to %s",
     "activity-created": "created %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "excluded %s from %s",
     "activity-imported": "imported %s into %s from %s",
     "activity-imported-board": "imported %s from %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "This card has %s comment.",
     "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
     "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Due",
     "card-due-on": "Due on",
     "card-spent": "Spent Time",
     "card-edit-attachments": "Edit attachments",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Edit labels",
     "card-edit-members": "Edit members",
     "card-labels-title": "Change the labels for the card.",
@@ -118,6 +121,8 @@
     "card-start": "Start",
     "card-start-on": "Starts on",
     "cardAttachmentsPopup-title": "Attach From",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Delete Card?",
     "cardDetailsActionsPopup-title": "Card Actions",
     "cardLabelsPopup-title": "Labels",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Create Board",
     "chooseBoardSourcePopup-title": "Import board",
     "createLabelPopup-title": "Create Label",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "current",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Date",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Date",
     "decline": "Decline",
     "default-avatar": "Default avatar",
     "delete": "Delete",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Delete Label?",
     "description": "Description",
     "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "Change start date",
     "editCardDueDatePopup-title": "Change due date",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "Change Label",
     "editNotificationPopup-title": "Edit Notification",
@@ -222,9 +242,12 @@
     "filter-clear": "Clear filter",
     "filter-no-label": "No label",
     "filter-no-member": "No member",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Filter is on",
     "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
     "filter-to-selection": "Filter to selection",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Full Name",
     "header-logo-title": "Go back to your boards page.",
     "hide-system-messages": "Hide system messages",
@@ -366,6 +389,7 @@
     "title": "Title",
     "tracking": "Tracking",
     "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
     "unassign-member": "Unassign member",
     "unsaved-description": "You have an unsaved description.",
     "unwatch": "Unwatch",
@@ -430,6 +454,7 @@
     "hours": "hours",
     "minutes": "minutes",
     "seconds": "seconds",
+    "show-field-on-card": "Show this field on card",
     "yes": "Yes",
     "no": "No",
     "accounts": "Accounts",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 33 - 2
i18n/vi.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "đã bình luận trong __card__: __comment__",
     "act-createBoard": "đã tạo __board__",
     "act-createCard": "đã thêm __card__ vào __list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "đã thêm __list__ vào __board__",
     "act-addBoardMember": "đã thêm __member__ vào __board__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "đã đính kèm %s vào %s",
     "activity-created": "đã tạo %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "đã loại bỏ %s khỏi %s",
     "activity-imported": "đã nạp %s vào %s từ %s",
     "activity-imported-board": "đã nạp %s từ %s",
@@ -106,11 +108,12 @@
     "card-comments-title": "Thẻ này có %s bình luận.",
     "card-delete-notice": "Hành động xóa là không thể khôi phục. Bạn sẽ mất hết các hoạt động liên quan đến thẻ này.",
     "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "Due",
     "card-due-on": "Due on",
     "card-spent": "Spent Time",
     "card-edit-attachments": "Edit attachments",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "Edit labels",
     "card-edit-members": "Edit members",
     "card-labels-title": "Change the labels for the card.",
@@ -118,6 +121,8 @@
     "card-start": "Start",
     "card-start-on": "Starts on",
     "cardAttachmentsPopup-title": "Attach From",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "Delete Card?",
     "cardDetailsActionsPopup-title": "Card Actions",
     "cardLabelsPopup-title": "Labels",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "Create Board",
     "chooseBoardSourcePopup-title": "Import board",
     "createLabelPopup-title": "Create Label",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "current",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "Date",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "Date",
     "decline": "Decline",
     "default-avatar": "Default avatar",
     "delete": "Delete",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "Delete Label?",
     "description": "Description",
     "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "Change start date",
     "editCardDueDatePopup-title": "Change due date",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "Change Label",
     "editNotificationPopup-title": "Edit Notification",
@@ -222,9 +242,12 @@
     "filter-clear": "Clear filter",
     "filter-no-label": "No label",
     "filter-no-member": "No member",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "Filter is on",
     "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
     "filter-to-selection": "Filter to selection",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "Full Name",
     "header-logo-title": "Go back to your boards page.",
     "hide-system-messages": "Hide system messages",
@@ -366,6 +389,7 @@
     "title": "Title",
     "tracking": "Tracking",
     "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+    "type": "Type",
     "unassign-member": "Unassign member",
     "unsaved-description": "You have an unsaved description.",
     "unwatch": "Unwatch",
@@ -430,6 +454,7 @@
     "hours": "hours",
     "minutes": "minutes",
     "seconds": "seconds",
+    "show-field-on-card": "Show this field on card",
     "yes": "Yes",
     "no": "No",
     "accounts": "Accounts",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

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

@@ -7,6 +7,7 @@
     "act-addComment": "在 __card__ 发布评论: __comment__",
     "act-createBoard": "创建看板 __board__",
     "act-createCard": "添加卡片 __card__  至列表 __list__",
+    "act-createCustomField": "创建了自定义字段 __customField__",
     "act-createList": "添加列表 __list__  至看板 __board__",
     "act-addBoardMember": "添加成员 __member__  至看板 __board__",
     "act-archivedBoard": "__board__ 已被移入回收站 ",
@@ -30,6 +31,7 @@
     "activity-archived": "%s 已被移入回收站",
     "activity-attached": "添加附件 %s 至 %s",
     "activity-created": "创建 %s",
+    "activity-customfield-created": "创建了自定义字段 %s",
     "activity-excluded": "排除 %s 从 %s",
     "activity-imported": "导入 %s 至 %s 从 %s 中",
     "activity-imported-board": "已导入 %s 从 %s 中",
@@ -111,6 +113,7 @@
     "card-due-on": "期限",
     "card-spent": "耗时",
     "card-edit-attachments": "编辑附件",
+    "card-edit-custom-fields": "编辑自定义字段",
     "card-edit-labels": "编辑标签",
     "card-edit-members": "编辑成员",
     "card-labels-title": "更改该卡片上的标签",
@@ -118,6 +121,8 @@
     "card-start": "开始",
     "card-start-on": "始于",
     "cardAttachmentsPopup-title": "附件来源",
+    "cardCustomField-datePopup-title": "修改日期",
+    "cardCustomFieldsPopup-title": "编辑自定义字段",
     "cardDeletePopup-title": "彻底删除卡片?",
     "cardDetailsActionsPopup-title": "卡片操作",
     "cardLabelsPopup-title": "标签",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "创建看板",
     "chooseBoardSourcePopup-title": "导入看板",
     "createLabelPopup-title": "创建标签",
+    "createCustomField": "创建字段",
+    "createCustomFieldPopup-title": "创建字段",
     "current": "当前",
+    "custom-field-delete-pop": "没有撤销,此动作将从所有卡片中移除自定义字段并销毁历史。",
+    "custom-field-checkbox": "选择框",
+    "custom-field-date": "日期",
+    "custom-field-dropdown": "下拉列表",
+    "custom-field-dropdown-none": "(无)",
+    "custom-field-dropdown-options": "列表选项",
+    "custom-field-dropdown-options-placeholder": "回车可以加入更多选项",
+    "custom-field-dropdown-unknown": "(未知)",
+    "custom-field-number": "数字",
+    "custom-field-text": "文本",
+    "custom-fields": "自定义字段",
     "date": "日期",
     "decline": "拒绝",
     "default-avatar": "默认头像",
     "delete": "删除",
+    "deleteCustomFieldPopup-title": "删除自定义字段?",
     "deleteLabelPopup-title": "删除标签?",
     "description": "描述",
     "disambiguateMultiLabelPopup-title": "标签消歧 [?]",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "软在制品限制",
     "editCardStartDatePopup-title": "修改起始日期",
     "editCardDueDatePopup-title": "修改截止日期",
+    "editCustomFieldPopup-title": "编辑字段",
     "editCardSpentTimePopup-title": "修改耗时",
     "editLabelPopup-title": "更改标签",
     "editNotificationPopup-title": "编辑通知",
@@ -222,9 +242,12 @@
     "filter-clear": "清空过滤器",
     "filter-no-label": "无标签",
     "filter-no-member": "无成员",
+    "filter-no-custom-fields": "无自定义字段",
     "filter-on": "过滤器启用",
     "filter-on-desc": "你正在过滤该看板上的卡片,点此编辑过滤。",
     "filter-to-selection": "要选择的过滤器",
+    "advanced-filter-label": "高级过滤器",
+    "advanced-filter-description": "高级过滤器可以使用包含如下操作符的字符串进行过滤:== != <= >= && || ( ) 。操作符之间用空格隔开。输入字段名和数值就可以过滤所有自定义字段。例如:Field1 == Value1. 注意如果字段名或数值包含空格,需要用单引号。例如: 'Field 1' == 'Value 1'。支持组合使用多个条件,例如: F1 == V1 || F1 = V2。通常以从左到右的顺序进行判断。可以通过括号修改顺序,例如:F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "全称",
     "header-logo-title": "返回您的看板页",
     "hide-system-messages": "隐藏系统消息",
@@ -366,6 +389,7 @@
     "title": "标题",
     "tracking": "跟踪",
     "tracking-info": "当任何包含您(作为创建者或成员)的卡片发生变更时,您将得到通知。",
+    "type": "类型",
     "unassign-member": "取消分配成员",
     "unsaved-description": "存在未保存的描述",
     "unwatch": "取消关注",
@@ -430,6 +454,7 @@
     "hours": "小时",
     "minutes": "分钟",
     "seconds": "秒",
+    "show-field-on-card": "在卡片上显示此字段",
     "yes": "是",
     "no": "否",
     "accounts": "账号",
@@ -443,5 +468,11 @@
     "card-end": "终止",
     "card-end-on": "终止于",
     "editCardReceivedDatePopup-title": "修改接收日期",
-    "editCardEndDatePopup-title": "修改终止日期"
+    "editCardEndDatePopup-title": "修改终止日期",
+    "assigned-by": "分配人",
+    "requested-by": "需求人",
+    "board-delete-notice": "删除时永久操作,将会丢失此看板上的所有列表、卡片和动作。",
+    "delete-board-confirm-popup": "所有列表、卡片、标签和活动都回被删除,将无法恢复看板内容。不支持撤销。",
+    "boardDeletePopup-title": "删除看板?",
+    "delete-board": "删除看板"
 }

+ 33 - 2
i18n/zh-TW.i18n.json

@@ -7,6 +7,7 @@
     "act-addComment": "評論__card__: __comment__",
     "act-createBoard": "完成新增 __board__",
     "act-createCard": "將__card__加入__list__",
+    "act-createCustomField": "created custom field __customField__",
     "act-createList": "新增__list__至__board__",
     "act-addBoardMember": "在__board__中新增成員__member__",
     "act-archivedBoard": "__board__ moved to Recycle Bin",
@@ -30,6 +31,7 @@
     "activity-archived": "%s moved to Recycle Bin",
     "activity-attached": "新增附件 %s 至 %s",
     "activity-created": "建立 %s",
+    "activity-customfield-created": "created custom field %s",
     "activity-excluded": "排除 %s 從 %s",
     "activity-imported": "匯入 %s 至 %s 從 %s 中",
     "activity-imported-board": "已匯入 %s 從 %s 中",
@@ -106,11 +108,12 @@
     "card-comments-title": "該卡片有 %s 則評論",
     "card-delete-notice": "徹底刪除的操作不可復原,你將會遺失該卡片相關的所有操作記錄。",
     "card-delete-pop": "所有的動作將從活動動態中被移除且您將無法重新打開該卡片。此操作無法復原。",
-    "card-delete-suggest-archive": "You can move a card Recycle Bin to remove it from the board and preserve the activity.",
+    "card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
     "card-due": "到期",
     "card-due-on": "到期",
     "card-spent": "Spent Time",
     "card-edit-attachments": "編輯附件",
+    "card-edit-custom-fields": "Edit custom fields",
     "card-edit-labels": "編輯標籤",
     "card-edit-members": "編輯成員",
     "card-labels-title": "更改該卡片上的標籤",
@@ -118,6 +121,8 @@
     "card-start": "開始",
     "card-start-on": "開始",
     "cardAttachmentsPopup-title": "附件來源",
+    "cardCustomField-datePopup-title": "Change date",
+    "cardCustomFieldsPopup-title": "Edit custom fields",
     "cardDeletePopup-title": "徹底刪除卡片?",
     "cardDetailsActionsPopup-title": "卡片動作",
     "cardLabelsPopup-title": "標籤",
@@ -167,11 +172,25 @@
     "createBoardPopup-title": "建立看板",
     "chooseBoardSourcePopup-title": "匯入看板",
     "createLabelPopup-title": "建立標籤",
+    "createCustomField": "Create Field",
+    "createCustomFieldPopup-title": "Create Field",
     "current": "目前",
+    "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+    "custom-field-checkbox": "Checkbox",
+    "custom-field-date": "日期",
+    "custom-field-dropdown": "Dropdown List",
+    "custom-field-dropdown-none": "(none)",
+    "custom-field-dropdown-options": "List Options",
+    "custom-field-dropdown-options-placeholder": "Press enter to add more options",
+    "custom-field-dropdown-unknown": "(unknown)",
+    "custom-field-number": "Number",
+    "custom-field-text": "Text",
+    "custom-fields": "Custom Fields",
     "date": "日期",
     "decline": "拒絕",
     "default-avatar": "預設大頭貼",
     "delete": "刪除",
+    "deleteCustomFieldPopup-title": "Delete Custom Field?",
     "deleteLabelPopup-title": "刪除標籤?",
     "description": "描述",
     "disambiguateMultiLabelPopup-title": "清除標籤動作歧義",
@@ -186,6 +205,7 @@
     "soft-wip-limit": "Soft WIP Limit",
     "editCardStartDatePopup-title": "更改開始日期",
     "editCardDueDatePopup-title": "更改到期日期",
+    "editCustomFieldPopup-title": "Edit Field",
     "editCardSpentTimePopup-title": "Change spent time",
     "editLabelPopup-title": "更改標籤",
     "editNotificationPopup-title": "更改通知",
@@ -222,9 +242,12 @@
     "filter-clear": "清空過濾條件",
     "filter-no-label": "沒有標籤",
     "filter-no-member": "沒有成員",
+    "filter-no-custom-fields": "No Custom Fields",
     "filter-on": "過濾條件啟用",
     "filter-on-desc": "你正在過濾該看板上的卡片,點此編輯過濾條件。",
     "filter-to-selection": "要選擇的過濾條件",
+    "advanced-filter-label": "Advanced Filter",
+    "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. Also you can combine multiple conditions. For Example: F1 == V1 || F1 = V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 and ( F2 == V2 || F2 == V3 )",
     "fullname": "全稱",
     "header-logo-title": "返回您的看板頁面",
     "hide-system-messages": "隱藏系統訊息",
@@ -366,6 +389,7 @@
     "title": "標題",
     "tracking": "追蹤",
     "tracking-info": "你將會收到與你有關的卡片的所有變更通知",
+    "type": "Type",
     "unassign-member": "取消分配成員",
     "unsaved-description": "未儲存的描述",
     "unwatch": "取消觀察",
@@ -430,6 +454,7 @@
     "hours": "小時",
     "minutes": "分鐘",
     "seconds": "秒",
+    "show-field-on-card": "Show this field on card",
     "yes": "是",
     "no": "否",
     "accounts": "帳號",
@@ -443,5 +468,11 @@
     "card-end": "End",
     "card-end-on": "Ends on",
     "editCardReceivedDatePopup-title": "Change received date",
-    "editCardEndDatePopup-title": "Change end date"
+    "editCardEndDatePopup-title": "Change end date",
+    "assigned-by": "Assigned By",
+    "requested-by": "Requested By",
+    "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+    "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+    "boardDeletePopup-title": "Delete Board?",
+    "delete-board": "Delete Board"
 }

+ 79 - 79
models/attachments.js

@@ -1,90 +1,90 @@
-  Attachments = new FS.Collection('attachments', {
-    stores: [
+Attachments = new FS.Collection('attachments', {
+  stores: [
 
-      // XXX Add a new store for cover thumbnails so we don't load big images in
-      // the general board view
-      new FS.Store.GridFS('attachments', {
-        // If the uploaded document is not an image we need to enforce browser
-        // download instead of execution. This is particularly important for HTML
-        // files that the browser will just execute if we don't serve them with the
-        // appropriate `application/octet-stream` MIME header which can lead to user
-        // data leaks. I imagine other formats (like PDF) can also be attack vectors.
-        // See https://github.com/wekan/wekan/issues/99
-        // XXX Should we use `beforeWrite` option of CollectionFS instead of
-        // collection-hooks?
-        // We should use `beforeWrite`.
-        beforeWrite: (fileObj) => {
-          if (!fileObj.isImage()) {
-            return {
-              type: 'application/octet-stream',
-            };
-          }
-          return {};
-        },
-      }),
-    ],
-  });
-
-
-  if (Meteor.isServer) {
-    Attachments.allow({
-      insert(userId, doc) {
-        return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
-      },
-      update(userId, doc) {
-        return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
-      },
-      remove(userId, doc) {
-        return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
-      },
-      // We authorize the attachment download either:
-      // - if the board is public, everyone (even unconnected) can download it
-      // - if the board is private, only board members can download it
-      download(userId, doc) {
-        const board = Boards.findOne(doc.boardId);
-        if (board.isPublic()) {
-          return true;
-        } else {
-          return board.hasMember(userId);
+    // XXX Add a new store for cover thumbnails so we don't load big images in
+    // the general board view
+    new FS.Store.GridFS('attachments', {
+      // If the uploaded document is not an image we need to enforce browser
+      // download instead of execution. This is particularly important for HTML
+      // files that the browser will just execute if we don't serve them with the
+      // appropriate `application/octet-stream` MIME header which can lead to user
+      // data leaks. I imagine other formats (like PDF) can also be attack vectors.
+      // See https://github.com/wekan/wekan/issues/99
+      // XXX Should we use `beforeWrite` option of CollectionFS instead of
+      // collection-hooks?
+      // We should use `beforeWrite`.
+      beforeWrite: (fileObj) => {
+        if (!fileObj.isImage()) {
+          return {
+            type: 'application/octet-stream',
+          };
         }
+        return {};
       },
+    }),
+  ],
+});
 
-      fetch: ['boardId'],
-    });
-  }
-
-  // XXX Enforce a schema for the Attachments CollectionFS
 
-  if (Meteor.isServer) {
-    Attachments.files.after.insert((userId, doc) => {
-      // If the attachment doesn't have a source field
-      // or its source is different than import
-      if (!doc.source || doc.source !== 'import') {
-        // Add activity about adding the attachment
-        Activities.insert({
-          userId,
-          type: 'card',
-          activityType: 'addAttachment',
-          attachmentId: doc._id,
-          boardId: doc.boardId,
-          cardId: doc.cardId,
-        });
+if (Meteor.isServer) {
+  Attachments.allow({
+    insert(userId, doc) {
+      return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
+    },
+    update(userId, doc) {
+      return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
+    },
+    remove(userId, doc) {
+      return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
+    },
+    // We authorize the attachment download either:
+    // - if the board is public, everyone (even unconnected) can download it
+    // - if the board is private, only board members can download it
+    download(userId, doc) {
+      const board = Boards.findOne(doc.boardId);
+      if (board.isPublic()) {
+        return true;
       } else {
-        // Don't add activity about adding the attachment as the activity
-        // be imported and delete source field
-        Attachments.update({
-          _id: doc._id,
-        }, {
-          $unset: {
-            source: '',
-          },
-        });
+        return board.hasMember(userId);
       }
-    });
+    },
+
+    fetch: ['boardId'],
+  });
+}
 
-    Attachments.files.after.remove((userId, doc) => {
-      Activities.remove({
+// XXX Enforce a schema for the Attachments CollectionFS
+
+if (Meteor.isServer) {
+  Attachments.files.after.insert((userId, doc) => {
+    // If the attachment doesn't have a source field
+    // or its source is different than import
+    if (!doc.source || doc.source !== 'import') {
+      // Add activity about adding the attachment
+      Activities.insert({
+        userId,
+        type: 'card',
+        activityType: 'addAttachment',
         attachmentId: doc._id,
+        boardId: doc.boardId,
+        cardId: doc.cardId,
       });
+    } else {
+      // Don't add activity about adding the attachment as the activity
+      // be imported and delete source field
+      Attachments.update({
+        _id: doc._id,
+      }, {
+        $unset: {
+          source: '',
+        },
+      });
+    }
+  });
+
+  Attachments.files.after.remove((userId, doc) => {
+    Activities.remove({
+      attachmentId: doc._id,
     });
-  }
+  });
+}

+ 3 - 0
models/boards.js

@@ -94,6 +94,9 @@ Boards.attachSchema(new SimpleSchema({
     allowedValues: [
       'green', 'yellow', 'orange', 'red', 'purple',
       'blue', 'sky', 'lime', 'pink', 'black',
+      'silver', 'peachpuff', 'crimson', 'plum', 'darkgreen',
+      'slateblue', 'magenta', 'gold', 'navy', 'gray',
+      'saddlebrown', 'paleturquoise', 'mistyrose', 'indigo',
     ],
   },
   // XXX We might want to maintain more informations under the member sub-

+ 34 - 3
models/cards.js

@@ -66,6 +66,14 @@ Cards.attachSchema(new SimpleSchema({
     type: String,
     optional: true,
   },
+  requestedBy: {
+    type: String,
+    optional: true,
+  },
+  assignedBy: {
+    type: String,
+    optional: true,
+  },
   labelIds: {
     type: [String],
     optional: true,
@@ -220,13 +228,28 @@ Cards.helpers({
     }).fetch();
 
     // match right definition to each field
+    if (!this.customFields) return [];
     return this.customFields.map((customField) => {
+      const definition = definitions.find((definition) => {
+        return definition._id === customField._id;
+      });
+      //search for "True Value" which is for DropDowns other then the Value (which is the id)
+      let trueValue = customField.value;
+      if (definition.settings.dropdownItems && definition.settings.dropdownItems.length > 0)
+      {
+        for (let i = 0; i < definition.settings.dropdownItems.length; i++)
+        {
+          if (definition.settings.dropdownItems[i]._id === customField.value)
+          {
+            trueValue = definition.settings.dropdownItems[i].name;
+          }
+        }
+      }
       return {
         _id: customField._id,
         value: customField.value,
-        definition: definitions.find((definition) => {
-          return definition._id === customField._id;
-        }),
+        trueValue,
+        definition,
       };
     });
 
@@ -267,6 +290,14 @@ Cards.mutations({
     return {$set: {description}};
   },
 
+  setRequestedBy(requestedBy) {
+    return {$set: {requestedBy}};
+  },
+
+  setAssignedBy(assignedBy) {
+    return {$set: {assignedBy}};
+  },
+
   move(swimlaneId, listId, sortIndex) {
     const list = Lists.findOne(listId);
     const mutatedFields = {

+ 2 - 3
package.json

@@ -1,6 +1,6 @@
 {
   "name": "wekan",
-  "version": "0.95.0",
+  "version": "1.04.0",
   "description": "The open-source Trello-like kanban",
   "private": true,
   "scripts": {
@@ -20,11 +20,10 @@
   },
   "homepage": "https://wekan.github.io",
   "devDependencies": {
-    "eslint": "^2.0.0"
+    "eslint": "^4.19.1"
   },
   "dependencies": {
     "babel-runtime": "^6.26.0",
-    "bcrypt": "^2.0.1",
     "bson-ext": "^2.0.0",
     "es6-promise": "^4.2.4",
     "meteor-node-stubs": "^0.4.1",

+ 2 - 2
sandstorm-pkgdef.capnp

@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
     appTitle = (defaultText = "Wekan"),
     # The name of the app as it is displayed to the user.
 
-    appVersion = 80,
+    appVersion = 89,
     # Increment this for every release.
 
-    appMarketingVersion = (defaultText = "0.95.0~2018-05-08"),
+    appMarketingVersion = (defaultText = "1.04.0~2018-06-12"),
     # Human-readable presentation of the app version.
 
     minUpgradableAppVersion = 0,

+ 5 - 5
sandstorm.js

@@ -75,7 +75,7 @@ if (isSandstorm && Meteor.isServer) {
         session.claimRequest(token).then((response) => {
           const identity = response.cap.castAs(Identity.Identity);
           const promises = [api.getIdentityId(identity), identity.getProfile(),
-                            httpBridge.saveIdentity(identity)];
+            httpBridge.saveIdentity(identity)];
           return Promise.all(promises).then((responses) => {
             const identityId = responses[0].id.toString('hex').slice(0, 32);
             const profile = responses[1].profile;
@@ -115,9 +115,9 @@ if (isSandstorm && Meteor.isServer) {
           const identity = response.identity;
           return identity.getProfile().then(() => {
             return { identity,
-                     mentioned: !!user.mentioned,
-                     subscribed: !!user.subscribed,
-                   };
+              mentioned: !!user.mentioned,
+              subscribed: !!user.subscribed,
+            };
           });
         }).catch(() => {
           // Ignore identities that fail to restore. Either they were added before we set
@@ -132,7 +132,7 @@ if (isSandstorm && Meteor.isServer) {
 
         return session.activity(event);
       }).then(() => done(),
-              (e) => done(e));
+        (e) => done(e));
     })();
   }
 

+ 40 - 13
server/migrations.js

@@ -167,9 +167,9 @@ Migrations.add('add-swimlanes', () => {
     Cards.find({ boardId: board._id }).forEach((card) => {
       if (!card.hasOwnProperty('swimlaneId')) {
         Cards.direct.update(
-            { _id: card._id },
-            { $set: { swimlaneId } },
-            noValidate
+          { _id: card._id },
+          { $set: { swimlaneId } },
+          noValidate
         );
       }
     });
@@ -180,9 +180,9 @@ Migrations.add('add-views', () => {
   Boards.find().forEach((board) => {
     if (!board.hasOwnProperty('view')) {
       Boards.direct.update(
-          { _id: board._id },
-          { $set: { view: 'board-view-swimlanes' } },
-          noValidate
+        { _id: board._id },
+        { $set: { view: 'board-view-swimlanes' } },
+        noValidate
       );
     }
   });
@@ -193,7 +193,7 @@ Migrations.add('add-checklist-items', () => {
     // Create new items
     _.sortBy(checklist.items, 'sort').forEach((item, index) => {
       ChecklistItems.direct.insert({
-        title: checklist.title,
+        title: item.title,
         sort: index,
         isFinished: item.isFinished,
         checklistId: checklist._id,
@@ -211,12 +211,14 @@ Migrations.add('add-checklist-items', () => {
 
 Migrations.add('add-profile-view', () => {
   Users.find().forEach((user) => {
-    // Set default view
-    Users.direct.update(
-      { _id: user._id },
-      { $set: { 'profile.boardView': 'board-view-lists' } },
-      noValidate
-    );
+    if (!user.hasOwnProperty('profile.boardView')) {
+      // Set default view
+      Users.direct.update(
+        { _id: user._id },
+        { $set: { 'profile.boardView': 'board-view-lists' } },
+        noValidate
+      );
+    }
   });
 });
 
@@ -231,3 +233,28 @@ Migrations.add('add-custom-fields-to-cards', () => {
     },
   }, noValidateMulti);
 });
+
+Migrations.add('add-requester-field', () => {
+  Cards.update({
+    requestedBy: {
+      $exists: false,
+    },
+  }, {
+    $set: {
+      requestedBy:'',
+    },
+  }, noValidateMulti);
+});
+
+Migrations.add('add-assigner-field', () => {
+  Cards.update({
+    assignedBy: {
+      $exists: false,
+    },
+  }, {
+    $set: {
+      assignedBy:'',
+    },
+  }, noValidateMulti);
+});
+

+ 23 - 5
server/publications/people.js

@@ -1,7 +1,25 @@
-Meteor.publish('people', (limit) => {
+Meteor.publish('people', function(limit) {
   check(limit, Number);
-  return Users.find({}, {
-    limit,
-    sort: {createdAt: -1},
-  });
+
+  if (!Match.test(this.userId, String)) {
+    return [];
+  }
+
+  const user = Users.findOne(this.userId);
+  if (user && user.isAdmin) {
+    return Users.find({}, {
+      limit,
+      sort: {createdAt: -1},
+      fields: {
+        'username': 1,
+        'profile.fullname': 1,
+        'isAdmin': 1,
+        'emails': 1,
+        'createdAt': 1,
+        'loginDisabled': 1,
+      },
+    });
+  } else {
+    return [];
+  }
 });

+ 17 - 8
snapcraft.yaml

@@ -65,7 +65,7 @@ apps:
 
 parts:
     mongodb:
-        source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.2.19.tgz
+        source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.2.20.tgz
         plugin: dump
         stage-packages: [libssl1.0.0]
         filesets:
@@ -83,7 +83,7 @@ parts:
         plugin: nodejs
         node-engine: 8.11.1
         node-packages:
-            - npm@5.5.1
+            - npm
             - node-gyp
             - node-pre-gyp
             - fibers@2.0.0
@@ -96,6 +96,8 @@ parts:
             - npm
             - curl
             - execstack
+        stage-packages:
+            - libfontconfig1
         override-build: |
             echo "Cleaning environment first"
             rm -rf ~/.meteor ~/.npm /usr/local/lib/node_modules
@@ -109,7 +111,7 @@ parts:
             # Download node version 8.11.1 that has fix included, node binary copied from Sandstorm
             # Description at https://releases.wekan.team/node.txt
             # SHA256SUM: 18c99d5e79e2fe91e75157a31be30e5420787213684d4048eb91e602e092725d
-            echo "18c99d5e79e2fe91e75157a31be30e5420787213684d4048eb91e602e092725d  node" >> node-SHASUMS256.txt.asc
+            echo "5f2703af5f7bd48e85fc8ed32d61de7c7cf81c53d0dcd73f6c218ed87e950fae  node" >> node-SHASUMS256.txt.asc
             curl https://releases.wekan.team/node -o node
             # Verify Fibers patched node authenticity
             echo "Fibers 100% CPU issue patched node authenticity:"
@@ -138,13 +140,18 @@ parts:
             meteor npm install --allow-superuser
             meteor build .build --directory --allow-superuser
             cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js
-            cd .build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt
-            rm -rf node_modules/bcrypt
-            meteor npm install --save bcrypt
+            #Removed binary version of bcrypt because of security vulnerability that is not fixed yet.
+            #https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac
+            #https://github.com/wekan/wekan/commit/7eeabf14be3c63fae2226e561ef8a0c1390c8d3c
+            #cd .build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt
+            #rm -rf node_modules/bcrypt
+            #meteor npm install --save bcrypt
+            # Change from npm-bcrypt directory back to .build/bundle/programs/server directory.
+            #cd ../../../../
             # Change to directory .build/bundle/programs/server
-            cd ../../../../
+            cd .build/bundle/programs/server
             npm install
-            meteor npm install --save bcrypt
+            #meteor npm install --save bcrypt
             # Change back to Wekan source directory
             cd ../../../..
             cp -r .build/bundle/* $SNAPCRAFT_PART_INSTALL/
@@ -153,6 +160,8 @@ parts:
             execstack --clear-execstack $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
         organize:
             README: README.wekan
+        prime:
+            - -lib/node_modules/node-pre-gyp/node_modules/tar/lib/.unpack.js.swp
 
     helpers:
         source: snap-src