mirror of
https://github.com/wekan/wekan.git
synced 2026-11-06 05:52:33 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e8939bc1e6 | ||
|
|
bc8d58011c | ||
|
|
0bf8cae81c | ||
|
|
984ec160da | ||
|
|
a2df80e64d | ||
|
|
3aaf8f9b61 | ||
|
|
1dfc223ca0 | ||
|
|
604cc455e0 | ||
|
|
e85072a14a | ||
|
|
1621f3784a | ||
|
|
ba6ad20a30 | ||
|
|
3847157753 | ||
|
|
4e77133aca | ||
|
|
77c696e37b | ||
|
|
e3f17be14d | ||
|
|
5ca4ebe09a | ||
|
|
3117e419bb | ||
|
|
3eba4aa782 | ||
|
|
127f1fb04e | ||
|
|
14b4f5b5ed | ||
|
|
e6a4abd394 | ||
|
|
25cdc4db0d | ||
|
|
c062d93d57 | ||
|
|
e014d5c816 | ||
|
|
84ab805ec1 | ||
|
|
a9a5ac7a07 | ||
|
|
0119e62da5 | ||
|
|
284d4b25ea | ||
|
|
75df523ef0 | ||
|
|
e5c844fca7 | ||
|
|
8a84707726 | ||
|
|
9f7eac158e | ||
|
|
9b729b502e | ||
|
|
cef965f73f | ||
|
|
43dd98f8a1 | ||
|
|
2cd772fcf5 | ||
|
|
eaa1d823de | ||
|
|
1a41c72c21 | ||
|
|
7943a17432 | ||
|
|
d41e17d6a0 | ||
|
|
4ec2cbcd5a | ||
|
|
1ce2d8cc88 | ||
|
|
8f76c7b2b0 | ||
|
|
b07c4d0a7b | ||
|
|
5b43b7159e | ||
|
|
7ce71dbb2e | ||
|
|
d615e599f4 | ||
|
|
aad00cdba2 | ||
|
|
07800da9af | ||
|
|
da0d338e33 | ||
|
|
c3c091635d | ||
|
|
8c499823cb | ||
|
|
1844425e8f | ||
|
|
68dd14140f | ||
|
|
1ba32f5269 | ||
|
|
30f36a7f31 | ||
|
|
20b9c9ddd6 | ||
|
|
0e9aed5a4b | ||
|
|
27d8468be0 | ||
|
|
d01526bbff | ||
|
|
ab3b48b334 | ||
|
|
b0da9097c1 | ||
|
|
158130cbfc | ||
|
|
53328f40c6 | ||
|
|
e7eeaf0b10 | ||
|
|
609b07a8db | ||
|
|
7545bb5506 | ||
|
|
457713968c | ||
|
|
372a58c112 | ||
|
|
527962966b | ||
|
|
a37e7d1cc7 | ||
|
|
33ad40d012 | ||
|
|
44b5e12de9 | ||
|
|
1207b573b5 | ||
|
|
a26295a2fb | ||
|
|
b2da9ac8d4 | ||
|
|
53dcf7379d | ||
|
|
dfa6c78d4f | ||
|
|
795850ed05 | ||
|
|
9ef7f4a07a | ||
|
|
cb2394a95d | ||
|
|
ac368de06a | ||
|
|
b26494766f | ||
|
|
68ab63c7fe | ||
|
|
e3e71b254a | ||
|
|
fc4eadedc9 | ||
|
|
9dca403782 | ||
|
|
dd90995db7 | ||
|
|
f8e31745d8 | ||
|
|
736d308860 | ||
|
|
9eca7a3941 | ||
|
|
af436e16c4 | ||
|
|
b1b414e850 | ||
|
|
57da3885a2 | ||
|
|
cb9c897309 | ||
|
|
81f07baeb8 | ||
|
|
001c258f96 | ||
|
|
9d77b9d7b7 | ||
|
|
2242da4176 | ||
|
|
0a3a28ef29 | ||
|
|
dcf5aa65b0 | ||
|
|
dd3be179ca | ||
|
|
bc1f149ea3 | ||
|
|
0dd11ea573 | ||
|
|
5feb83d919 | ||
|
|
8980668686 | ||
|
|
0d4e48ddd6 | ||
|
|
a01b175895 | ||
|
|
83f63c9efa | ||
|
|
3b031bd901 | ||
|
|
e2a7e300c9 | ||
|
|
844f59e12e | ||
|
|
1a3d7b5da4 | ||
|
|
3d2bdf4f22 | ||
|
|
b9fe1f1639 | ||
|
|
a39a7b90b1 | ||
|
|
5d1c979e3b | ||
|
|
d00dc6056b | ||
|
|
878a24f586 | ||
|
|
6d08181edd | ||
|
|
d5596f05b7 | ||
|
|
22b280a18e | ||
|
|
2e7c4ede2a | ||
|
|
ed77abd90d | ||
|
|
45fb547947 | ||
|
|
477ad737d3 | ||
|
|
a2802a850b | ||
|
|
5cbe27be7e | ||
|
|
8b21158736 | ||
|
|
651c6f8fb6 | ||
|
|
5b67312f0f | ||
|
|
1a222c4477 |
No files matched your search
@@ -22,7 +22,9 @@ name: Release All Platforms
|
||||
# commits and pushes the bump to wekan/wekan main
|
||||
# - prepare: tags the bumped main as v<new_version> and extracts release notes
|
||||
# - website: updates the wekan/wekan.fi repo (install page + API docs) and pushes
|
||||
# - charts: updates and publishes the wekan/charts Helm chart and pushes
|
||||
# - charts: updates and publishes the wekan/charts Helm chart and pushes,
|
||||
# only AFTER the `docker` job has published the image (skipped if
|
||||
# docker fails)
|
||||
# - build-*: builds the amd64 bundle (full Meteor 3 build), then rebuilds native
|
||||
# modules for arm64 from that amd64 base
|
||||
# - release: creates the GitHub Release with the newest CHANGELOG.md notes and
|
||||
@@ -210,12 +212,14 @@ jobs:
|
||||
cd ..
|
||||
./wekan/releases/release-website.sh "${{ inputs.old_version }}" "${{ inputs.new_version }}"
|
||||
|
||||
# ─── 1c. Update and publish the Helm chart repo (parallel) ──────────────────
|
||||
# ─── 1c. Update and publish the Helm chart repo (after docker) ──────────────
|
||||
# Bumps the WeKan version in wekan/charts, packages the chart and publishes it
|
||||
# to the gh-pages Helm index, then pushes both branches. Runs in parallel with
|
||||
# the platform builds; packaging the chart does not need the built artifacts.
|
||||
# to the gh-pages Helm index, then pushes both branches. Runs only AFTER the
|
||||
# `docker` job succeeds: the chart points users at the freshly published
|
||||
# multi-arch image, so we don't advertise a new chart version until that image
|
||||
# is actually on the registries. If `docker` fails, this job is skipped.
|
||||
charts:
|
||||
needs: bump
|
||||
needs: docker
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout wekan repo (for releases/release-charts.sh + version refs)
|
||||
@@ -796,7 +800,20 @@ jobs:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Install snapcraft
|
||||
run: sudo snap install snapcraft --classic
|
||||
# The Snap Store intermittently rejects the install with
|
||||
# 'error: cannot install "snapcraft": too many requests' (a 429-style
|
||||
# rate limit) that instantly fails the whole snap job before any build.
|
||||
# Retry a few times so one transient store throttle does not fail the
|
||||
# release (same spirit as the remote-build retry below).
|
||||
run: |
|
||||
set -uo pipefail
|
||||
for i in 1 2 3 4 5; do
|
||||
sudo snap install snapcraft --classic && exit 0
|
||||
echo "snapcraft install attempt $i/5 failed (Snap Store throttle?); retrying in 30s..."
|
||||
sleep 30
|
||||
done
|
||||
echo "::error::snapcraft install failed after 5 attempts (Snap Store rate limit)."
|
||||
exit 1
|
||||
|
||||
- name: Provide Launchpad credentials for remote-build
|
||||
env:
|
||||
|
||||
+800
-144
File diff suppressed because it is too large.
Load diff
+1
-1
@@ -2,10 +2,10 @@
|
||||
|
||||
For all code at WeKan GitHub Organization https://github.com/wekan
|
||||
|
||||
- For pull requests, mention only those participants that are **human**.
|
||||
- All code in pull requests need to have permission already to add it to WeKan with MIT license, and will become MIT license.
|
||||
- For any dependencies, permissive licenses like https://copyfree.org are preferred
|
||||
- For anything currently that is non-permissive (like GPL, AGPL, SSPL), those will be replaced with permissive-licensed alternatives
|
||||
- Any intelligence allowed: Human, AI or any other. No discrimination, please have world peace. Mentioning participants optional.
|
||||
- All code is checked and validated by xet7 and many different security AI. If code is real working fix or feature, it usually will be merged.
|
||||
- All known vulnerabilities have been fixed at newest WeKan, please upgrade https://wekan.fi/upgrade/
|
||||
- There is no known backdoors. If WeKan is installed by someone else, first registered user is Admin and has Admin Panel access.
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ LABEL org.opencontainers.image.source="https://github.com/wekan/wekan"
|
||||
# TARGETARCH and TARGETVARIANT are automatically provided by Docker Buildx
|
||||
ARG TARGETARCH
|
||||
ARG TARGETVARIANT
|
||||
ARG VERSION=9.74
|
||||
ARG VERSION=9.82
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
ENV BUILD_DEPS="apt-utils gnupg wget bzip2 g++ curl libarchive-tools build-essential git ca-certificates python3 unzip"
|
||||
|
||||
@@ -103,7 +103,7 @@ By working directly with WeKan ® you get the benefit of active maintenance and
|
||||
|
||||
## Getting Started with Development
|
||||
|
||||
The default branch uses Meteor 3.5-rc.2 with Node.js 24.x.
|
||||
The main branch uses Meteor 3.5 with Node.js 24.x.
|
||||
See [CHANGELOG.md](https://github.com/wekan/wekan/blob/main/CHANGELOG.md) for the latest runtime updates.
|
||||
|
||||
To contribute, [create a fork](https://github.com/wekan/wekan/blob/main/docs/DeveloperDocs/Build-and-Create-Pull-Request.md#2-create-fork-of-httpsgithubcomwekanwekan-at-github-web-page) and run `./rebuild-wekan.sh` (or `./rebuild-wekan.bat` on Windows) as detailed [here](https://github.com/wekan/wekan/blob/main/docs/DeveloperDocs/Build-and-Create-Pull-Request.md#3-select-option-1-to-install-dependencies-and-then-enter). Once you're ready, please test your code and [submit a pull request (PR)](https://github.com/wekan/wekan/blob/main/docs/DeveloperDocs/Build-and-Create-Pull-Request.md#7-test).
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
|
||||
appVersion: "v9.74.0"
|
||||
appVersion: "v9.82.0"
|
||||
files:
|
||||
userUploads:
|
||||
- README.md
|
||||
|
||||
@@ -37,6 +37,8 @@ If *nix: chmod +x api.py => ./api.py users
|
||||
python3 api.py lists BOARDID # Lists of BOARDID
|
||||
python3 api.py list BOARDID LISTID # Info of LISTID
|
||||
python3 api.py createlist BOARDID LISTTITLE # Create list
|
||||
python3 api.py editlist BOARDID LISTID NEWLISTTITLE # Edit list title
|
||||
python3 api.py editlistcolor BOARDID LISTID COLOR (Color available: `white`, `green`, `yellow`, `orange`, `red`, `purple`, `blue`, `sky`, `lime`, `pink`, `black`, `silver`, `peachpuff`, `crimson`, `plum`, `darkgreen`, `slateblue`, `magenta`, `gold`, `navy`, `gray`, `saddlebrown`, `paleturquoise`, `mistyrose`, `indigo`) # Edit list color
|
||||
python3 api.py addcard AUTHORID BOARDID SWIMLANEID LISTID CARDTITLE CARDDESCRIPTION
|
||||
python3 api.py editcard BOARDID LISTID CARDID NEWCARDTITLE NEWCARDDESCRIPTION
|
||||
python3 api.py getcard BOARDID LISTID CARDID # Get card info
|
||||
@@ -432,6 +434,49 @@ if arguments == 5:
|
||||
|
||||
if arguments >= 4:
|
||||
|
||||
if sys.argv[1] == 'editlist':
|
||||
|
||||
# ------- EDIT LIST START -----------
|
||||
boardid = sys.argv[2]
|
||||
listid = sys.argv[3]
|
||||
newlisttitle = sys.argv[4]
|
||||
edlist = wekanurl + apiboards + boardid + s + l + s + listid
|
||||
print(edlist)
|
||||
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
|
||||
put_data = {'title': '{}'.format(newlisttitle)}
|
||||
body = requests.put(edlist, data=put_data, headers=headers)
|
||||
print("=== EDIT LIST ===\n")
|
||||
body = requests.get(edlist, headers=headers)
|
||||
data2 = body.text.replace('}', "}\n")
|
||||
print(data2)
|
||||
# ------- EDIT LIST END -----------
|
||||
|
||||
if sys.argv[1] == 'editlistcolor':
|
||||
|
||||
# ------- EDIT LIST COLOR START -----------
|
||||
boardid = sys.argv[2]
|
||||
listid = sys.argv[3]
|
||||
newcolor = sys.argv[4]
|
||||
|
||||
valid_colors = ['white', 'green', 'yellow', 'orange', 'red', 'purple', 'blue', 'sky', 'lime', 'pink', 'black',
|
||||
'silver', 'peachpuff', 'crimson', 'plum', 'darkgreen', 'slateblue', 'magenta', 'gold', 'navy',
|
||||
'gray', 'saddlebrown', 'paleturquoise', 'mistyrose', 'indigo']
|
||||
|
||||
if newcolor not in valid_colors:
|
||||
print("Invalid color. Choose a color from the list.")
|
||||
sys.exit(1)
|
||||
|
||||
edlist = wekanurl + apiboards + boardid + s + l + s + listid
|
||||
print(edlist)
|
||||
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
|
||||
put_data = {'color': '{}'.format(newcolor)}
|
||||
body = requests.put(edlist, data=put_data, headers=headers)
|
||||
print("=== EDIT LIST COLOR ===\n")
|
||||
body = requests.get(edlist, headers=headers)
|
||||
data2 = body.text.replace('}', "}\n")
|
||||
print(data2)
|
||||
# ------- EDIT LIST COLOR END -----------
|
||||
|
||||
if sys.argv[1] == 'newuser':
|
||||
|
||||
# ------- CREATE NEW USER START -----------
|
||||
|
||||
@@ -15,6 +15,20 @@
|
||||
.reactions-popup .add-comment-reaction:hover {
|
||||
background-color: #b0c4de;
|
||||
}
|
||||
/* Eye / eye-slash icon toggle for showing/hiding activities. Open eye
|
||||
(.eye-icon) = activities shown; crossed eye (.eye-slash-icon) = hidden.
|
||||
Matches the password-visibility toggle used on the login/register pages. */
|
||||
.activities-eye-toggle {
|
||||
cursor: pointer;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.4em;
|
||||
text-decoration: none;
|
||||
}
|
||||
.activities-eye-toggle .eye-icon,
|
||||
.activities-eye-toggle .eye-slash-icon {
|
||||
line-height: 1;
|
||||
}
|
||||
.activities {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
@@ -106,10 +106,10 @@ template(name="activity")
|
||||
|
||||
//- comment activity ----------------------------------------------------
|
||||
if($eq activity.activityType 'deleteComment')
|
||||
| {{{_ 'activity-deleteComment' activity.commentId}}}.
|
||||
| {{{_ 'activity-deleteComment' (sanitize activity.commentDisplayText)}}}.
|
||||
|
||||
if($eq activity.activityType 'editComment')
|
||||
| {{{_ 'activity-editComment' activity.commentId}}}.
|
||||
| {{{_ 'activity-editComment' (sanitize activity.commentDisplayText)}}}.
|
||||
|
||||
if($eq activity.activityType 'addComment')
|
||||
| {{{_ 'activity-on' cardLink}}}
|
||||
@@ -133,6 +133,9 @@ template(name="activity")
|
||||
if($eq activity.activityType 'a-changedTitle')
|
||||
| {{{_ 'activity-changedTitle' (sanitize activity.value) cardLink}}}.
|
||||
|
||||
if($eq activity.activityType 'a-changedDescription')
|
||||
| {{{_ 'activity-changedDescription' cardLink}}}.
|
||||
|
||||
//- customField activity ------------------------------------------------
|
||||
if($eq activity.activityType 'createCustomField')
|
||||
| {{_ 'activity-customfield-created' customField}}.
|
||||
|
||||
@@ -6,11 +6,13 @@ import '/client/lib/dragscrollTouch';
|
||||
import { boardConverter } from '/client/lib/boardConverter';
|
||||
import { formatDateByUserPreference } from '/imports/lib/dateUtils';
|
||||
import { toFullCalendarFirstDay } from '/client/lib/calendarFirstDay';
|
||||
import { weekNumberByFirstDay } from '/models/lib/weekStart';
|
||||
import Swimlanes from '/models/swimlanes';
|
||||
import Lists from '/models/lists';
|
||||
import TableVisibilityModeSettings from '/models/tableVisibilityModeSettings';
|
||||
import { EscapeActions } from '/client/lib/escapeActions';
|
||||
import { Utils } from '/client/lib/utils';
|
||||
import { Filter } from '/client/lib/filter';
|
||||
|
||||
// SubsManager removed for Meteor 3 migration
|
||||
const { calculateIndex } = Utils;
|
||||
@@ -578,7 +580,15 @@ Template.boardBody.onRendered(function () {
|
||||
});
|
||||
|
||||
dragscroll.reset();
|
||||
Utils.setBackgroundImage();
|
||||
// #4978: apply the board background inside a reactive autorun instead of a
|
||||
// one-shot call. Switching directly between boards (e.g. the favorites bar)
|
||||
// reuses this template instance and never re-fires onRendered, so the
|
||||
// background used to stay on the previously shown board. Reading the current
|
||||
// board inside setBackgroundImage() tracks both board switches and background
|
||||
// edits; it performs no DB writes, so there is no autorun write loop.
|
||||
this.autorun(() => {
|
||||
Utils.setBackgroundImage();
|
||||
});
|
||||
});
|
||||
|
||||
Template.boardBody.onDestroyed(function () {
|
||||
@@ -929,6 +939,11 @@ Template.calendarView.onRendered(function () {
|
||||
document.documentElement.dir = TAPi18n.getLanguageDirection();
|
||||
|
||||
this.autorun(function () {
|
||||
// #5656: refetch calendar events whenever the active board Filter changes
|
||||
// so the Calendar view stays in sync with the other views. Reading the
|
||||
// Filter's reactive state here establishes the dependency; the events()
|
||||
// callback below applies the actual selector.
|
||||
Filter.isActive();
|
||||
const calendarEl = document.getElementById('calendar-view');
|
||||
if (calendarEl && calendarEl._wekanCalendar) {
|
||||
calendarEl._wekanCalendar.refetchEvents();
|
||||
@@ -959,6 +974,12 @@ Template.calendarView.helpers({
|
||||
editable: true,
|
||||
selectable: true,
|
||||
weekNumbers: true,
|
||||
// #4946: FullCalendar's default weekNumberCalculation is locale-based
|
||||
// (Sunday-anchored for many locales), so the week-number column ignored
|
||||
// the user's start-day-of-week setting even though `firstDay` moved the
|
||||
// grid. Compute the number from the SAME firstDay so the label matches the
|
||||
// way the week is laid out.
|
||||
weekNumberCalculation: date => weekNumberByFirstDay(date, firstDay),
|
||||
// Use non-localized AM/PM time format to avoid confusing notations like 上/下/中
|
||||
// Use full 'am'/'pm' instead of single-letter 'a'/'p' for clarity
|
||||
eventTimeFormat: {
|
||||
@@ -1002,6 +1023,12 @@ Template.calendarView.helpers({
|
||||
isRTL: TAPi18n.isRTL(),
|
||||
events(fetchInfo, callback) {
|
||||
const currentBoard = Utils.getCurrentBoard();
|
||||
// #5656: apply the active board Filter (member / assignee / due-date /
|
||||
// label / custom-field) so the Calendar view shows the same scoped set
|
||||
// of cards as the Board / Lists / Swimlanes views.
|
||||
const filterSelector = Filter.isActive()
|
||||
? Filter._getMongoSelector()
|
||||
: undefined;
|
||||
const events = [];
|
||||
const pushEvent = function (card, title, start, end, extraCls) {
|
||||
start = start || card.startAt;
|
||||
@@ -1026,12 +1053,12 @@ Template.calendarView.helpers({
|
||||
});
|
||||
};
|
||||
currentBoard
|
||||
.cardsInInterval(fetchInfo.start, fetchInfo.end)
|
||||
.cardsInInterval(fetchInfo.start, fetchInfo.end, filterSelector)
|
||||
.forEach(function (card) {
|
||||
pushEvent(card);
|
||||
});
|
||||
currentBoard
|
||||
.cardsDueInBetween(fetchInfo.start, fetchInfo.end)
|
||||
.cardsDueInBetween(fetchInfo.start, fetchInfo.end, filterSelector)
|
||||
.forEach(function (card) {
|
||||
pushEvent(
|
||||
card,
|
||||
|
||||
@@ -1078,6 +1078,13 @@ body.grey-icons-enabled .checkmark-no-grey {
|
||||
margin: 8px; /* Space between board items */
|
||||
}
|
||||
|
||||
/* #6439: highlight the board a dragged board will be dropped before, when
|
||||
reordering in the Custom (drag order) sort mode. */
|
||||
.js-board.board-reorder-over {
|
||||
outline: 2px dashed #3498db;
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
/* Reset background for add-board button */
|
||||
.js-add-board {
|
||||
background-color: transparent !important;
|
||||
|
||||
@@ -6,6 +6,10 @@ import TableVisibilityModeSettings from '/models/tableVisibilityModeSettings';
|
||||
import { BoardMultiSelection } from '/client/lib/boardMultiSelection';
|
||||
import { EscapeActions } from '/client/lib/escapeActions';
|
||||
import { Utils } from '/client/lib/utils';
|
||||
import {
|
||||
isDragReorderEnabled,
|
||||
computeReorderedSortIndex,
|
||||
} from '/models/lib/boardSortReorder';
|
||||
|
||||
// SubsManager removed for Meteor 3 migration
|
||||
|
||||
@@ -59,6 +63,15 @@ const DEFAULT_WORKSPACE_ICON = '📁';
|
||||
// Matches the Admin Panel > People page size.
|
||||
const BOARDS_PER_PAGE = 25;
|
||||
|
||||
// #6439: the effective All Boards sort mode for the current user, defaulting to
|
||||
// 'custom' (manual drag order) when unknown. Used to gate board drag-reordering.
|
||||
function currentAllBoardsSortBy() {
|
||||
const cu = ReactiveCache.getCurrentUser();
|
||||
return cu && typeof cu.getAllBoardsSortBy === 'function'
|
||||
? cu.getAllBoardsSortBy()
|
||||
: 'custom';
|
||||
}
|
||||
|
||||
function getCurrentWorkspacesTree() {
|
||||
const currentUser = ReactiveCache.getCurrentUser();
|
||||
const tree =
|
||||
@@ -973,6 +986,55 @@ Template.boardList.events({
|
||||
document.querySelectorAll('.workspace-node.board-drag-hint, .js-select-menu.board-drag-hint').forEach((el) => {
|
||||
el.classList.remove('board-drag-hint');
|
||||
});
|
||||
document.querySelectorAll('.js-board.board-reorder-over').forEach((el) => {
|
||||
el.classList.remove('board-reorder-over');
|
||||
});
|
||||
},
|
||||
// #6439: reorder boards on the All Boards page by dropping one board onto
|
||||
// another. Only active in the "custom" (manual drag order) sort mode — in the
|
||||
// sorted modes the order comes from the title, so a board is not a valid drop
|
||||
// target (which is why, before this, the browser showed the not-allowed cursor
|
||||
// and nothing persisted). The reorder decision/index math lives in the pure,
|
||||
// unit-tested models/lib/boardSortReorder.js.
|
||||
'dragover .js-board'(evt, tpl) {
|
||||
if (!isDragReorderEnabled(currentAllBoardsSortBy())) return;
|
||||
// A multi-board drag is a share/assign gesture, not a reorder.
|
||||
const dt = evt.originalEvent.dataTransfer;
|
||||
if (dt && dt.getData('application/x-board-multi') === 'true') return;
|
||||
evt.preventDefault();
|
||||
evt.stopPropagation();
|
||||
if (dt) dt.dropEffect = 'move';
|
||||
evt.currentTarget.classList.add('board-reorder-over');
|
||||
},
|
||||
'dragleave .js-board'(evt) {
|
||||
evt.currentTarget.classList.remove('board-reorder-over');
|
||||
},
|
||||
'drop .js-board'(evt, tpl) {
|
||||
if (!isDragReorderEnabled(currentAllBoardsSortBy())) return;
|
||||
const dt = evt.originalEvent.dataTransfer;
|
||||
if (dt && dt.getData('application/x-board-multi') === 'true') return;
|
||||
const draggedId = dt ? dt.getData('text/plain') : '';
|
||||
if (!draggedId) return;
|
||||
evt.preventDefault();
|
||||
evt.stopPropagation();
|
||||
evt.currentTarget.classList.remove('board-reorder-over');
|
||||
const targetId = this._id;
|
||||
// #6442: current display order of the board grid. Read each board's _id from
|
||||
// its Blaze data context (the same source dragstart uses via `this._id`) —
|
||||
// NOT el.classList[0]. On `li.js-board(class="{{_id}} …")` Jade emits the
|
||||
// literal `js-board` class FIRST, so classList[0] is the string "js-board"
|
||||
// for every board; the old code therefore produced ['js-board','js-board',…],
|
||||
// computeReorderedSortIndex could not find the dragged/target ids among them,
|
||||
// returned null, and the drop silently did nothing (board snapped back).
|
||||
const orderedIds = Array.from(tpl.findAll('.js-board'))
|
||||
.map((el) => Blaze.getData(el)?._id)
|
||||
.filter(Boolean);
|
||||
const mapping = computeReorderedSortIndex(orderedIds, draggedId, targetId);
|
||||
if (!mapping) return;
|
||||
const currentUser = ReactiveCache.getCurrentUser();
|
||||
if (currentUser && typeof currentUser.setBoardSortIndexes === 'function') {
|
||||
currentUser.setBoardSortIndexes(mapping);
|
||||
}
|
||||
},
|
||||
'click .js-clone-board'(evt) {
|
||||
if (confirm(TAPi18n.__('duplicate-board-confirm'))) {
|
||||
|
||||
@@ -66,7 +66,7 @@ template(name="tableView")
|
||||
td.table-view-cell-labels
|
||||
.div
|
||||
each label in row.labels
|
||||
span.card-label(class="card-label-{{label.color}}" title="{{label.name}}")
|
||||
span.card-label(class="{{labelColorClass label.color}}" style="{{labelColorStyle label.color}}" title="{{label.name}}")
|
||||
+viewer
|
||||
= label.name
|
||||
if showReceivedColumn
|
||||
|
||||
@@ -6,7 +6,7 @@ template(name="cardDetails")
|
||||
+attachmentViewer
|
||||
|
||||
section.card-details.js-card-details.nodragscroll(class='{{#if cardMaximized}}card-details-maximized{{/if}}' class='{{#if isPopup}}card-details-popup{{/if}}' class='{{#unless isVerticalScrollbars}}no-scrollbars{{/unless}}' class='{{#if cardCollapsed}}card-details-collapsed{{/if}}'): .card-details-canvas
|
||||
.card-details-header(class='{{#if colorClass}}card-details-{{colorClass}}{{/if}}')
|
||||
.card-details-header(class='{{#if colorClass}}card-details-{{colorClass}}{{/if}}' style='{{colorStyle}}')
|
||||
+inlinedForm(classNames="js-card-details-title")
|
||||
+editCardTitleForm
|
||||
else
|
||||
@@ -127,7 +127,7 @@ template(name="cardDetails")
|
||||
| {{_ 'labels'}}
|
||||
a(class="{{#if canModifyCard}}js-add-labels{{else}}is-disabled{{/if}}" title="{{_ 'card-labels-title'}}")
|
||||
each labels
|
||||
span.card-label(class="card-label-{{color}}" title=name)
|
||||
span.card-label(class="{{labelColorClass color}}" style="{{labelColorStyle color}}" title=name)
|
||||
+viewer
|
||||
= name
|
||||
if canModifyCard
|
||||
@@ -741,12 +741,12 @@ template(name="cardDetails")
|
||||
i.fa.fa-history
|
||||
| {{ _ 'activities'}}
|
||||
if currentUser.isBoardMember
|
||||
.material-toggle-switch(title="{{_ 'show-activities'}}")
|
||||
if showActivities
|
||||
input.toggle-switch(type="checkbox" id="toggleShowActivitiesCard" checked="checked")
|
||||
else
|
||||
input.toggle-switch(type="checkbox" id="toggleShowActivitiesCard")
|
||||
label.toggle-label(for="toggleShowActivitiesCard")
|
||||
if showActivities
|
||||
a.activities-eye-toggle.js-toggle-show-activities-card(title="{{_ 'hide-activities'}}" aria-label="{{_ 'hide-activities'}}")
|
||||
i.fa.fa-eye.eye-icon
|
||||
else
|
||||
a.activities-eye-toggle.js-toggle-show-activities-card(title="{{_ 'show-activities'}}" aria-label="{{_ 'show-activities'}}")
|
||||
i.fa.fa-eye-slash.eye-slash-icon
|
||||
|
||||
if currentUser.isBoardAdmin
|
||||
if isLoaded.get
|
||||
@@ -1199,6 +1199,10 @@ template(name="setCardColorPopup")
|
||||
span.card-label.palette-color.js-palette-color(class="card-details-{{color}}")
|
||||
if(isSelected color)
|
||||
i.fa.fa-check
|
||||
// #5514: native color wheel for picking a custom RGB / hex color
|
||||
.color-wheel-wrap
|
||||
label(for="cardColorWheel") {{_ 'custom-color'}}
|
||||
input.js-card-color-wheel#cardColorWheel(type="color" value=currentColorHex title="{{_ 'custom-color'}}")
|
||||
button.primary.confirm.js-submit {{_ 'save'}}
|
||||
button.js-remove-color.negate.wide.right {{_ 'unset-color'}}
|
||||
|
||||
|
||||
@@ -50,7 +50,10 @@ import Users from '/models/users';
|
||||
import Lists from '/models/lists';
|
||||
import CardComments from '/models/cardComments';
|
||||
import { ALLOWED_COLORS } from '/config/const';
|
||||
import { isHexColor, toHex } from '/models/lib/contrastColor';
|
||||
import { uniqBy } from '/imports/lib/collectionHelpers';
|
||||
import { memberTargetBoardId } from '/models/lib/linkedCardMembers';
|
||||
import { isSubmitKey } from '/models/lib/editorSubmitKey';
|
||||
import { UserAvatar } from '../users/userAvatar';
|
||||
import { Filter } from '/client/lib/filter';
|
||||
import { BoardSwimlaneListCardDialog } from '/client/lib/dialogWithBoardSwimlaneListCard';
|
||||
@@ -1045,7 +1048,7 @@ Template.cardDetails.events({
|
||||
const card = Template.currentData();
|
||||
await card.toggleHideCheckedChecklistItems();
|
||||
},
|
||||
async 'change #toggleShowActivitiesCard'() {
|
||||
async 'click .js-toggle-show-activities-card'() {
|
||||
const card = Template.currentData();
|
||||
await card.toggleShowActivities();
|
||||
},
|
||||
@@ -1497,9 +1500,11 @@ Template.editCardTitleForm.events({
|
||||
Utils.showCopied(promise, $tooltip);
|
||||
},
|
||||
'keydown .js-edit-card-title'(event) {
|
||||
// If enter key was pressed, submit the data
|
||||
// Unless the shift key is also being pressed
|
||||
if (event.keyCode === 13 && !event.shiftKey) {
|
||||
// #4236: match the card description field — Ctrl/Cmd+Enter saves; plain
|
||||
// Enter (and Shift+Enter) insert a new line instead of submitting. The old
|
||||
// handler submitted on any Enter without Shift, so Enter could not add a
|
||||
// newline in the title.
|
||||
if (isSubmitKey(event)) {
|
||||
$('.js-submit-edit-card-title-form').click();
|
||||
}
|
||||
},
|
||||
@@ -1657,7 +1662,25 @@ Template.cardLocationsPopup.events({
|
||||
});
|
||||
|
||||
const filterMembers = (filterTerm) => {
|
||||
let currBoard = Utils.getCurrentBoard();
|
||||
// #5676: for a linked card the members live on the REAL card it points at,
|
||||
// which may be on another board (that is what getMembers()/toggleMember() act
|
||||
// on). Offer that board's members instead of the viewing board's, so the
|
||||
// picker is consistent with where membership is actually stored. Falls back to
|
||||
// the current board for normal cards or when the real card isn't loaded yet.
|
||||
const card = getCurrentCardFromContext();
|
||||
let currBoard = null;
|
||||
if (card) {
|
||||
const boardId = memberTargetBoardId(card, id => ReactiveCache.getCard(id));
|
||||
if (boardId) {
|
||||
currBoard = ReactiveCache.getBoard(boardId);
|
||||
}
|
||||
}
|
||||
if (!currBoard) {
|
||||
currBoard = Utils.getCurrentBoard();
|
||||
}
|
||||
if (!currBoard) {
|
||||
return [];
|
||||
}
|
||||
let members = currBoard.activeMembers();
|
||||
|
||||
if (filterTerm) {
|
||||
@@ -2013,6 +2036,10 @@ Template.setCardColorPopup.helpers({
|
||||
}
|
||||
return tpl.currentColor.get() === color;
|
||||
},
|
||||
// #5514: current color as a '#rrggbb' hex for the native color wheel <input>.
|
||||
currentColorHex() {
|
||||
return toHex(Template.instance().currentColor.get()) || '#0079bf';
|
||||
},
|
||||
});
|
||||
|
||||
Template.setCardColorPopup.events({
|
||||
@@ -2020,6 +2047,13 @@ Template.setCardColorPopup.events({
|
||||
const paletteData = Blaze.getData(event.currentTarget);
|
||||
tpl.currentColor.set(paletteData?.color);
|
||||
},
|
||||
// #5514: picking from the native color wheel stores a custom hex.
|
||||
'input .js-card-color-wheel'(event, tpl) {
|
||||
const value = event.currentTarget.value;
|
||||
if (isHexColor(value)) {
|
||||
tpl.currentColor.set(value);
|
||||
}
|
||||
},
|
||||
async 'click .js-submit'(event, tpl) {
|
||||
event.preventDefault();
|
||||
const card = Cards.findOne(getCardId());
|
||||
|
||||
@@ -1,3 +1,24 @@
|
||||
/* #5514: native color-wheel (custom RGB / hex) picker wrapper, shared by the
|
||||
label / list / swimlane / card color popups. */
|
||||
.color-wheel-wrap {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
margin: 6px 0 10px 0;
|
||||
}
|
||||
.color-wheel-wrap label {
|
||||
margin: 0;
|
||||
}
|
||||
.color-wheel-wrap input[type="color"] {
|
||||
width: 44px;
|
||||
height: 28px;
|
||||
padding: 0;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
background: none;
|
||||
}
|
||||
|
||||
.card-label {
|
||||
border: 1px solid #000;
|
||||
border-radius: 4px;
|
||||
|
||||
@@ -4,9 +4,12 @@ template(name="formLabel")
|
||||
|
||||
label {{_ "select-color"}}
|
||||
.palette-colors: each labels
|
||||
span.card-label.palette-color.js-palette-color(class="card-label-{{color}}")
|
||||
span.card-label.palette-color.js-palette-color(class="{{labelColorClass color}}" style="{{labelColorStyle color}}")
|
||||
if(isSelected color)
|
||||
i.fa.fa-check
|
||||
.color-wheel-wrap
|
||||
label(for="labelColorWheel") {{_ 'custom-color'}}
|
||||
input.js-label-color-wheel#labelColorWheel(type="color" value=currentColorHex title="{{_ 'custom-color'}}")
|
||||
|
||||
template(name="createLabelPopup")
|
||||
form.create-label
|
||||
@@ -31,8 +34,8 @@ template(name="cardLabelsPopup")
|
||||
a.card-label-edit-button.fa.fa-pencil.js-edit-label
|
||||
if isTouchScreenOrShowDesktopDragHandles
|
||||
span.fa.label-handle(class="fa-arrows" title="{{_ 'dragLabel'}}")
|
||||
span.card-label.card-label-selectable.js-select-label.card-label-wrapper(class="card-label-{{color}}"
|
||||
class="{{# if isLabelSelected ../_id }}active{{/if}}")
|
||||
span.card-label.card-label-selectable.js-select-label.card-label-wrapper(class="{{labelColorClass color}}"
|
||||
class="{{# if isLabelSelected ../_id }}active{{/if}}" style="{{labelColorStyle color}}")
|
||||
+viewer
|
||||
= name
|
||||
if(isLabelSelected ../_id)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { ReactiveCache } from '/imports/reactiveCache';
|
||||
import { LABEL_COLORS } from '/models/metadata/colors';
|
||||
import { isHexColor, toHex } from '/models/lib/contrastColor';
|
||||
import { EscapeActions } from '/client/lib/escapeActions';
|
||||
import { Utils } from '/client/lib/utils';
|
||||
|
||||
@@ -28,6 +29,11 @@ Template.formLabel.helpers({
|
||||
isSelected(color) {
|
||||
return Template.instance().currentColor.get() === color;
|
||||
},
|
||||
// #5514: current color as a '#rrggbb' hex for the color-wheel <input>, which
|
||||
// only accepts hex. Named colors map to their palette hex; fall back to green.
|
||||
currentColorHex() {
|
||||
return toHex(Template.instance().currentColor.get()) || '#3cb500';
|
||||
},
|
||||
});
|
||||
|
||||
Template.formLabel.events({
|
||||
@@ -36,6 +42,13 @@ Template.formLabel.events({
|
||||
const selectedColor = paletteData?.color || Template.currentData()?.color || getFallbackLabelColor();
|
||||
tpl.currentColor.set(selectedColor);
|
||||
},
|
||||
// #5514: picking a color from the native color wheel stores a custom hex.
|
||||
'input .js-label-color-wheel'(event, tpl) {
|
||||
const value = event.currentTarget.value;
|
||||
if (isHexColor(value)) {
|
||||
tpl.currentColor.set(value);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Template.createLabelPopup.helpers({
|
||||
@@ -131,7 +144,16 @@ Template.createLabelPopup.events({
|
||||
? selectedColorIcon.closest('.js-palette-color')
|
||||
: null;
|
||||
const selectedColorData = selectedPaletteNode && Blaze.getData(selectedPaletteNode);
|
||||
const color = selectedColorData?.color || getFallbackLabelColor();
|
||||
// #5514: a named swatch (has the check icon) wins; otherwise fall back to
|
||||
// the custom color-wheel hex, then to the default palette color.
|
||||
let color = selectedColorData?.color;
|
||||
if (!color) {
|
||||
const wheel = templateInstance.find('.js-label-color-wheel');
|
||||
if (wheel && isHexColor(wheel.value)) {
|
||||
color = wheel.value;
|
||||
}
|
||||
}
|
||||
color = color || getFallbackLabelColor();
|
||||
board.addLabel(name, color);
|
||||
Popup.back();
|
||||
},
|
||||
@@ -158,7 +180,16 @@ Template.editLabelPopup.events({
|
||||
? selectedColorIcon.closest('.js-palette-color')
|
||||
: null;
|
||||
const selectedColorData = selectedPaletteNode && Blaze.getData(selectedPaletteNode);
|
||||
const color = selectedColorData?.color || getFallbackLabelColor();
|
||||
// #5514: a named swatch (has the check icon) wins; otherwise fall back to
|
||||
// the custom color-wheel hex, then to the default palette color.
|
||||
let color = selectedColorData?.color;
|
||||
if (!color) {
|
||||
const wheel = templateInstance.find('.js-label-color-wheel');
|
||||
if (wheel && isHexColor(wheel.value)) {
|
||||
color = wheel.value;
|
||||
}
|
||||
}
|
||||
color = color || getFallbackLabelColor();
|
||||
board.editLabel(this._id, name, color);
|
||||
Popup.back();
|
||||
},
|
||||
|
||||
@@ -183,6 +183,13 @@
|
||||
}
|
||||
.minicard .minicard-title {
|
||||
margin-inline-end: 1.5vw;
|
||||
/* #6444: isolate each title's bidirectional context. The title is a
|
||||
dir="auto" .viewer; under a global dir="rtl" document, non-isolated
|
||||
dir="auto" runs share bidi state, so typing a strong RTL (e.g. Arabic)
|
||||
character into another list's dir="auto" composer re-resolved the shared
|
||||
context and visibly reflowed OTHER lists' minicard titles (no data change,
|
||||
reverts on refresh). Isolation makes each title a self-contained run. */
|
||||
unicode-bidi: isolate;
|
||||
}
|
||||
.minicard .minicard-title .card-number {
|
||||
color: #b3b3b3;
|
||||
@@ -448,6 +455,10 @@
|
||||
min-height: 50px;
|
||||
margin-bottom: 20px;
|
||||
overflow-y: auto;
|
||||
/* #6444: isolate the composer's dir="auto" bidi run so typing a strong RTL
|
||||
character here cannot perturb the rendering of the surrounding minicard
|
||||
titles under a dir="rtl" document. */
|
||||
unicode-bidi: isolate;
|
||||
}
|
||||
.parent-prefix {
|
||||
color: #b3b3b3;
|
||||
|
||||
@@ -3,7 +3,8 @@ template(name="minicard")
|
||||
class="{{#if isLinkedCard}}linked-card{{/if}}"
|
||||
class="{{#if isLinkedBoard}}linked-board{{/if}}"
|
||||
class="{{agingClass}}"
|
||||
class="{{#if colorClass}}minicard-{{colorClass}}{{/if}}")
|
||||
class="{{#if colorClass}}minicard-{{colorClass}}{{/if}}"
|
||||
style="{{colorStyle}}")
|
||||
if canMoveCard
|
||||
if isTouchScreenOrShowDesktopDragHandles
|
||||
.handle
|
||||
@@ -93,11 +94,11 @@ template(name="minicard")
|
||||
.minicard-labels(class="{{#if hiddenMinicardLabelText}}minicard-labels-no-text{{/if}}")
|
||||
each labels
|
||||
unless hiddenMinicardLabelText
|
||||
span.js-card-label.card-label(class="card-label-{{color}}" title=name)
|
||||
span.js-card-label.card-label(class="{{labelColorClass color}}" style="{{labelColorStyle color}}" title=name)
|
||||
+viewer
|
||||
= name
|
||||
if hiddenMinicardLabelText
|
||||
.minicard-label(class="card-label-{{color}}" title="{{name}}")
|
||||
.minicard-label(class="{{labelColorClass color}}" style="{{labelColorStyle color}}" title="{{name}}")
|
||||
|
||||
.minicard-custom-fields
|
||||
each customFieldsWD
|
||||
|
||||
@@ -6,6 +6,11 @@ import uploadProgressManager from '../../lib/uploadProgressManager';
|
||||
import { Utils } from '/client/lib/utils';
|
||||
import ChecklistItems from '/models/checklistItems';
|
||||
import Cards from '/models/cards';
|
||||
import { resolveCoverId } from '/models/lib/linkedCardCover';
|
||||
import {
|
||||
parseChecklistItemTitles,
|
||||
buildChecklistItemPayload,
|
||||
} from '/models/lib/checklistItemTitles';
|
||||
import { normalizeDependencies } from '/models/metadata/dependencies';
|
||||
|
||||
function getMinicardFlag(board, onMinicardField, legacyField, defaultValue) {
|
||||
@@ -164,8 +169,12 @@ Template.minicard.helpers({
|
||||
}
|
||||
},
|
||||
cover() {
|
||||
if (!this.coverId) return null;
|
||||
const attachment = ReactiveCache.getAttachment(this.coverId);
|
||||
// #5666: for a linked card the cover lives on the real card it points at, so
|
||||
// resolve the cover id through it (mirroring getTitle/getDue/...); a plain
|
||||
// card resolves to its own coverId.
|
||||
const coverId = resolveCoverId(this, id => ReactiveCache.getCard(id));
|
||||
if (!coverId) return null;
|
||||
const attachment = ReactiveCache.getAttachment(coverId);
|
||||
if (!attachment) return null;
|
||||
const coverLink = typeof attachment.link === 'function' ? attachment.link() : '';
|
||||
if (!coverLink) return null;
|
||||
@@ -376,6 +385,28 @@ Template.minicardChecklist.helpers({
|
||||
},
|
||||
});
|
||||
|
||||
// #6440: create the checklist item(s) for the minicard add-item form. Shared by
|
||||
// the Save-button click handler and the (rarely reached) form-submit handler.
|
||||
// The Save button needs an explicit click handler because the minicard — and so
|
||||
// the add-item <form> — is rendered inside the `a.minicard-wrapper` anchor, where
|
||||
// the native form `submit` event never reaches the Blaze event map; without this
|
||||
// the "+" add-item on the minicard did nothing. The blank-input guard and the
|
||||
// title parsing live in the pure, unit-tested models/lib/checklistItemTitles.js.
|
||||
function addMinicardChecklistItems(textarea, checklist) {
|
||||
if (!textarea || !checklist) return;
|
||||
const titles = parseChecklistItemTitles(textarea.value);
|
||||
if (titles.length === 0) return;
|
||||
const items = checklist.items();
|
||||
const lastItem = items[items.length - 1] || null;
|
||||
let sortIndex = Utils.calculateIndexData(lastItem, null).base;
|
||||
titles.forEach(title => {
|
||||
ChecklistItems.insert(buildChecklistItemPayload(title, checklist, sortIndex));
|
||||
sortIndex += 1;
|
||||
});
|
||||
textarea.value = '';
|
||||
textarea.focus();
|
||||
}
|
||||
|
||||
Template.minicardChecklist.events({
|
||||
'click .js-convert-checklist-item-to-card'(event) {
|
||||
event.stopPropagation();
|
||||
@@ -417,25 +448,26 @@ Template.minicardChecklist.events({
|
||||
}
|
||||
$form.find('.js-close-inlined-form').trigger('click');
|
||||
},
|
||||
// #6440: explicit click handler for the minicard "+" add-item Save button.
|
||||
// The native form `submit` event does not fire on the minicard (the form is
|
||||
// inside the `a.minicard-wrapper` anchor), so — unlike card-detail — we cannot
|
||||
// rely on `submit .js-add-checklist-item`. This mirrors the already-working
|
||||
// `click .js-submit-edit-checklist-item-form` above.
|
||||
'click .js-submit-add-checklist-item-form'(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
const $form = $(event.currentTarget).closest('form');
|
||||
const textarea = $form.find('textarea.js-add-checklist-item')[0];
|
||||
const formData = Blaze.getData($form[0]) || Template.currentData() || {};
|
||||
addMinicardChecklistItems(textarea, formData.checklist);
|
||||
},
|
||||
// Kept for completeness (e.g. card-detail-style contexts); on the minicard this
|
||||
// rarely fires, so the click handler above is the real path. See #6440.
|
||||
'submit .js-add-checklist-item'(event, tpl) {
|
||||
event.preventDefault();
|
||||
const textarea = tpl.find('textarea.js-add-checklist-item');
|
||||
if (!textarea) return;
|
||||
const title = textarea.value.trim();
|
||||
const data = Template.currentData() || {};
|
||||
const checklist = data.checklist;
|
||||
if (!checklist || !title) return;
|
||||
const items = checklist.items();
|
||||
const lastItem = items[items.length - 1] || null;
|
||||
const sortIndex = Utils.calculateIndexData(lastItem, null).base;
|
||||
ChecklistItems.insert({
|
||||
title,
|
||||
checklistId: checklist._id,
|
||||
cardId: checklist.cardId,
|
||||
sort: sortIndex,
|
||||
});
|
||||
textarea.value = '';
|
||||
textarea.focus();
|
||||
addMinicardChecklistItems(textarea, data.checklist);
|
||||
},
|
||||
'click .js-delete-checklist-item': Popup.afterConfirm('checklistItemDelete', function () {
|
||||
Popup.back();
|
||||
|
||||
@@ -736,9 +736,28 @@ form.inlined-form .list-composer {
|
||||
flex: 1 1 auto;
|
||||
flex-direction: column;
|
||||
display: flex;
|
||||
overflow-y: auto;
|
||||
/* #5439: always show a scrollbar on the list body across desktop and mobile
|
||||
browsers (overlay scrollbars on macOS/iOS/Android/Firefox otherwise auto-
|
||||
hide it). Keep these declarations in sync with models/lib/scrollbarCss.js
|
||||
(alwaysVisibleScrollbarCss), which is unit tested. */
|
||||
overflow-y: scroll;
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: rgba(0, 0, 0, 0.35) rgba(0, 0, 0, 0.08);
|
||||
scrollbar-gutter: stable;
|
||||
padding: 5px 11px;
|
||||
}
|
||||
.list-body::-webkit-scrollbar {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
.list-body::-webkit-scrollbar-track {
|
||||
background: rgba(0, 0, 0, 0.08);
|
||||
}
|
||||
.list-body::-webkit-scrollbar-thumb {
|
||||
background: rgba(0, 0, 0, 0.35);
|
||||
border-radius: 5px;
|
||||
}
|
||||
.list-body .minicards {
|
||||
flex-grow: 1;
|
||||
flex-shrink: 0;
|
||||
|
||||
@@ -46,7 +46,7 @@ template(name="addCardForm")
|
||||
if getLabels
|
||||
.minicard-labels
|
||||
each getLabels
|
||||
.minicard-label(class="card-label-{{color}}" title="{{name}}")
|
||||
.minicard-label(class="{{labelColorClass color}}" style="{{labelColorStyle color}}" title="{{name}}")
|
||||
textarea.minicard-composer-textarea.js-card-title(autofocus dir="auto")
|
||||
if members.get
|
||||
.minicard-members.js-minicard-composer-members
|
||||
|
||||
@@ -9,6 +9,9 @@ import Swimlanes from '/models/swimlanes';
|
||||
import { Filter } from '/client/lib/filter';
|
||||
import { MultiSelection } from '/client/lib/multiSelection';
|
||||
import { Utils } from '/client/lib/utils';
|
||||
import { isLinkableCardTarget } from '/models/lib/linkedCardTarget';
|
||||
import { listCardsSelector } from '/models/lib/swimlaneFilter';
|
||||
import { sortCardsByTitle } from '/models/lib/sortCardsByTitle';
|
||||
import autosize from 'autosize';
|
||||
|
||||
// SubsManager removed for Meteor 3 migration
|
||||
@@ -338,19 +341,21 @@ Template.listBody.helpers({
|
||||
if (!sortBy) {
|
||||
sortBy = defaultSort;
|
||||
}
|
||||
const selector = {
|
||||
listId: Template.currentData()._id,
|
||||
archived: false,
|
||||
};
|
||||
if (swimlaneId) {
|
||||
// Fallback: also show cards with no swimlaneId (null/empty) so that
|
||||
// pre-migration / orphaned cards are always visible without a DB migration.
|
||||
selector.$or = [
|
||||
{ swimlaneId },
|
||||
{ swimlaneId: null }, // null covers null AND missing field
|
||||
{ swimlaneId: '' }, // empty string from shared-lists era
|
||||
];
|
||||
}
|
||||
// #6441: build the swimlane-membership fallback as a single `swimlaneId:
|
||||
// { $in: [...] }` clause (via the shared, unit-tested helper) instead of a
|
||||
// bare top-level `$or`, so it never competes with the board Filter's own
|
||||
// top-level `$or` (labels/members/exceptions) and the label filter applies
|
||||
// board-wide across every swimlane.
|
||||
// #6443: in the first swimlane also surface orphaned cards (a swimlaneId
|
||||
// pointing at a deleted swimlane) so they are not invisible in swimlane view.
|
||||
const list = Template.currentData();
|
||||
const selector = listCardsSelector(
|
||||
list._id,
|
||||
swimlaneId,
|
||||
list.orphanedCardsSwimlaneIds
|
||||
? list.orphanedCardsSwimlaneIds(swimlaneId)
|
||||
: undefined,
|
||||
);
|
||||
const ret = ReactiveCache.getCards(Filter.mongoSelector(selector), {
|
||||
// sort: ['sort'],
|
||||
sort: sortBy,
|
||||
@@ -706,14 +711,19 @@ Template.linkCardPopup.helpers({
|
||||
archived: false,
|
||||
linkedId: { $nin: ownCardsIds },
|
||||
_id: { $nin: ownCardsIds },
|
||||
type: { $nin: ['template-card'] },
|
||||
// #5808: never offer an existing linked card/board as a link target —
|
||||
// linking to one builds a chain of linkedId pointers that renders the
|
||||
// card inaccessible. Only real cards may be linked.
|
||||
type: { $nin: ['template-card', 'cardType-linkedCard', 'cardType-linkedBoard'] },
|
||||
};
|
||||
if (tpl.selectedBoardId.get()) selector.boardId = tpl.selectedBoardId.get();
|
||||
if (tpl.selectedSwimlaneId.get()) selector.swimlaneId = tpl.selectedSwimlaneId.get();
|
||||
if (tpl.selectedListId.get()) selector.listId = tpl.selectedListId.get();
|
||||
|
||||
const ret = ReactiveCache.getCards(selector, { sort: { sort: 1 } });
|
||||
return ret;
|
||||
// #5394: sort the Cards dropdown alphabetically by title
|
||||
// (case-insensitive) so a card can be found on boards with many cards.
|
||||
return sortCardsByTitle(ret);
|
||||
},
|
||||
|
||||
isTitleDefault(title) {
|
||||
@@ -790,6 +800,17 @@ Template.linkCardPopup.events({
|
||||
Popup.back();
|
||||
return;
|
||||
}
|
||||
// #5808: refuse to link to a linked card/board or to a card that links back
|
||||
// to this board — those build a chain/cycle of linkedId pointers that renders
|
||||
// the cards inaccessible. The <select> already filters these out, but its
|
||||
// options can be stale, so re-check the resolved target here.
|
||||
const targetCard = ReactiveCache.getCard(linkedId);
|
||||
const ownCardsIds = tpl.board.cards().map(card => card.getRealId());
|
||||
if (!isLinkableCardTarget(targetCard, ownCardsIds)) {
|
||||
alert(TAPi18n.__('error-linked-card-not-allowed'));
|
||||
Popup.back();
|
||||
return;
|
||||
}
|
||||
const nextCardNumber = await tpl.board.getNextCardNumber();
|
||||
const sortIndex = tpl.getSortIndex();
|
||||
const _id = Cards.insert({
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
template(name="listHeader")
|
||||
.list-header.js-list-header.nodragscroll(
|
||||
class="{{#if limitToShowCardsCount}}list-header-card-count{{/if}}"
|
||||
class=colorClass)
|
||||
class=colorClass
|
||||
style=colorStyle)
|
||||
//- #459: keyboard/screen-reader list reordering (visually hidden, focusable).
|
||||
.list-move-buttons.sr-only
|
||||
a.js-list-move-left(href="#" role="button" aria-label="{{_ 'move-list-left'}}") {{_ 'move-list-left'}}
|
||||
@@ -279,6 +280,10 @@ template(name="setListColorPopup")
|
||||
span.card-label.palette-color.js-palette-color(class="card-details-{{color}}")
|
||||
if(isSelected color)
|
||||
i.fa.fa-check
|
||||
// #5514: native color wheel for picking a custom RGB / hex color
|
||||
.color-wheel-wrap
|
||||
label(for="listColorWheel") {{_ 'custom-color'}}
|
||||
input.js-list-color-wheel#listColorWheel(type="color" value=currentColorHex title="{{_ 'custom-color'}}")
|
||||
button.primary.confirm.js-submit {{_ 'save'}}
|
||||
button.js-remove-color.negate.wide.right {{_ 'unset-color'}}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import dragscroll from '@wekanteam/dragscroll';
|
||||
import { BoardSwimlaneListDialog } from '/client/lib/dialogWithBoardSwimlaneList';
|
||||
import Cards from '/models/cards';
|
||||
import { LIST_COLORS } from '/models/metadata/colors';
|
||||
import { isHexColor, toHex } from '/models/lib/contrastColor';
|
||||
import { MultiSelection } from '/client/lib/multiSelection';
|
||||
import { Utils } from '/client/lib/utils';
|
||||
|
||||
@@ -476,6 +477,10 @@ Template.setListColorPopup.helpers({
|
||||
return tpl.currentColor.get() === color;
|
||||
}
|
||||
},
|
||||
// #5514: current color as a '#rrggbb' hex for the native color wheel <input>.
|
||||
currentColorHex() {
|
||||
return toHex(Template.instance().currentColor.get()) || '#0079bf';
|
||||
},
|
||||
});
|
||||
|
||||
Template.setListColorPopup.events({
|
||||
@@ -483,6 +488,13 @@ Template.setListColorPopup.events({
|
||||
const paletteData = Blaze.getData(event.currentTarget);
|
||||
tpl.currentColor.set(paletteData?.color);
|
||||
},
|
||||
// #5514: picking from the native color wheel stores a custom hex.
|
||||
'input .js-list-color-wheel'(event, tpl) {
|
||||
const value = event.currentTarget.value;
|
||||
if (isHexColor(value)) {
|
||||
tpl.currentColor.set(value);
|
||||
}
|
||||
},
|
||||
async 'submit form'(event, tpl) {
|
||||
event.preventDefault();
|
||||
try {
|
||||
|
||||
@@ -83,14 +83,23 @@ Template.userFormsLayout.onRendered(() => {
|
||||
})();
|
||||
});
|
||||
|
||||
// #4394 (security): a one-shot $('.at-signup-link').hide() does not survive
|
||||
// the useraccounts form re-rendering that happens after a failed login (e.g.
|
||||
// an LDAP "User not Found") — the links were recreated without the inline
|
||||
// display:none and reappeared even though registration / forgot-password
|
||||
// were disabled in the Admin Panel. Toggle a class on the stable <body>
|
||||
// ancestor and hide the links via CSS (userForm.css) so the rule keeps
|
||||
// applying to every freshly re-rendered copy of the links.
|
||||
Meteor.call('isDisableRegistration', (_, result) => {
|
||||
if (result) {
|
||||
document.body.classList.add('registration-disabled');
|
||||
$('.at-signup-link').hide();
|
||||
}
|
||||
});
|
||||
|
||||
Meteor.call('isDisableForgotPassword', (_, result) => {
|
||||
if (result) {
|
||||
document.body.classList.add('forgotpwd-disabled');
|
||||
$('.at-pwd-link').hide();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -94,7 +94,7 @@ template(name="myCards")
|
||||
td
|
||||
.div
|
||||
each label in card.labelIds
|
||||
span.card-label(class="card-label-{{labelColor board label}}" title=name)
|
||||
span.card-label(class="{{labelColorClass (labelColor board label)}}" style="{{labelColorStyle (labelColor board label)}}" title=name)
|
||||
| {{labelName board label}}
|
||||
td
|
||||
if card.dueAt
|
||||
|
||||
@@ -4,6 +4,7 @@ import Actions from '/models/actions';
|
||||
import Rules from '/models/rules';
|
||||
import Triggers from '/models/triggers';
|
||||
import { Utils } from '/client/lib/utils';
|
||||
import { canSelectBoardInRules } from '/models/lib/rulesBoardSelector';
|
||||
|
||||
Template.boardActions.onCreated(function () {
|
||||
this.subscribe('boards');
|
||||
@@ -11,19 +12,30 @@ Template.boardActions.onCreated(function () {
|
||||
|
||||
Template.boardActions.helpers({
|
||||
boards() {
|
||||
const ret = ReactiveCache.getBoards(
|
||||
{
|
||||
archived: false,
|
||||
'members.userId': Meteor.userId(),
|
||||
_id: {
|
||||
$ne: ReactiveCache.getCurrentUser().getTemplatesBoardId(),
|
||||
},
|
||||
},
|
||||
// #5698: don't restrict to boards where the user is a DIRECT member — that
|
||||
// hid every board reached through an Organization / Team / email-domain
|
||||
// share (the reporter's whole board dropdown was empty, current board
|
||||
// included). Filter the already access-scoped client cache with the same
|
||||
// visibility rule as Boards.userBoards() so org/team/domain boards show too.
|
||||
const user = ReactiveCache.getCurrentUser();
|
||||
if (!user) return [];
|
||||
const ctx = {
|
||||
userId: user._id,
|
||||
orgIds: typeof user.orgIds === 'function' ? user.orgIds() : [],
|
||||
teamIds: typeof user.teamIds === 'function' ? user.teamIds() : [],
|
||||
emailDomains:
|
||||
typeof user.emailDomains === 'function' ? user.emailDomains() : [],
|
||||
};
|
||||
const templatesBoardId = user.getTemplatesBoardId();
|
||||
const boards = ReactiveCache.getBoards(
|
||||
{ archived: false },
|
||||
{
|
||||
sort: { sort: 1 /* boards default sorting */ },
|
||||
},
|
||||
);
|
||||
return ret;
|
||||
return boards.filter(board =>
|
||||
canSelectBoardInRules(board, ctx, templatesBoardId),
|
||||
);
|
||||
},
|
||||
|
||||
loadingBoardsLabel() {
|
||||
@@ -94,38 +106,19 @@ Template.boardActions.events({
|
||||
const boardId = Session.get('currentBoard');
|
||||
const destBoardId = tpl.find('#board-id').value;
|
||||
const desc = Utils.getTriggerActionDesc(event, tpl);
|
||||
if (actionSelected === 'top') {
|
||||
const triggerId = Triggers.insert(trigger);
|
||||
const actionId = Actions.insert({
|
||||
actionType: 'moveCardToTop',
|
||||
listName,
|
||||
swimlaneName,
|
||||
boardId: destBoardId,
|
||||
desc,
|
||||
});
|
||||
Rules.insert({
|
||||
title: ruleName,
|
||||
triggerId,
|
||||
actionId,
|
||||
boardId,
|
||||
});
|
||||
}
|
||||
if (actionSelected === 'bottom') {
|
||||
const triggerId = Triggers.insert(trigger);
|
||||
const actionId = Actions.insert({
|
||||
actionType: 'moveCardToBottom',
|
||||
listName,
|
||||
swimlaneName,
|
||||
boardId: destBoardId,
|
||||
desc,
|
||||
});
|
||||
Rules.insert({
|
||||
title: ruleName,
|
||||
triggerId,
|
||||
actionId,
|
||||
boardId,
|
||||
});
|
||||
}
|
||||
// #5536: create the rule on the server (see server/rulesButton.js →
|
||||
// rules.createRule) instead of three optimistic client Collection.insert()
|
||||
// calls. The optimistic writes landed in minimongo limbo once the wizard
|
||||
// subscription stopped, so the cross-board move action rendered BLANK; and
|
||||
// the client allow/deny rules rejected them outright for non-owner members.
|
||||
// The action keeps its own destination `boardId` (the board to move to).
|
||||
Meteor.call('rules.createRule', boardId, ruleName, trigger, {
|
||||
actionType: actionSelected === 'bottom' ? 'moveCardToBottom' : 'moveCardToTop',
|
||||
listName,
|
||||
swimlaneName,
|
||||
boardId: destBoardId,
|
||||
desc,
|
||||
});
|
||||
},
|
||||
'click .js-add-gen-move-action'(event, tpl) {
|
||||
const desc = Utils.getTriggerActionDesc(event, tpl);
|
||||
@@ -191,20 +184,16 @@ Template.boardActions.events({
|
||||
const boardId = Session.get('currentBoard');
|
||||
const destBoardId = tpl.find('#board-id-link').value;
|
||||
const desc = Utils.getTriggerActionDesc(event, tpl);
|
||||
const triggerId = Triggers.insert(trigger);
|
||||
const actionId = Actions.insert({
|
||||
// #5536: create on the server so the cross-board link action does not land
|
||||
// blank in minimongo limbo / get rejected by client allow/deny. The action
|
||||
// keeps its own destination `boardId` (the board to link the card into).
|
||||
Meteor.call('rules.createRule', boardId, ruleName, trigger, {
|
||||
actionType: 'linkCard',
|
||||
listName,
|
||||
swimlaneName,
|
||||
boardId: destBoardId,
|
||||
desc,
|
||||
});
|
||||
Rules.insert({
|
||||
title: ruleName,
|
||||
triggerId,
|
||||
actionId,
|
||||
boardId,
|
||||
});
|
||||
},
|
||||
'click .js-sort-list-action'(event, tpl) {
|
||||
const data = Template.currentData();
|
||||
|
||||
@@ -100,8 +100,15 @@ template(name="cardActions")
|
||||
option(value="receivedAt") {{_'r-df-received-at'}}
|
||||
div.trigger-dropdown
|
||||
input(id="reldate-days",type="number",value="0")
|
||||
div.trigger-dropdown
|
||||
select(id="reldate-unit")
|
||||
option(value="minutes") {{_'r-unit-minutes'}}
|
||||
option(value="hours") {{_'r-unit-hours'}}
|
||||
option(value="days",selected="selected") {{_'r-unit-days'}}
|
||||
option(value="weeks") {{_'r-unit-weeks'}}
|
||||
option(value="months") {{_'r-unit-months'}}
|
||||
div.trigger-text
|
||||
| {{_'r-days-after'}}
|
||||
| {{_'r-later'}}
|
||||
div.trigger-button.js-set-reldate-action.js-goto-rules
|
||||
i.fa.fa-plus
|
||||
|
||||
|
||||
@@ -238,12 +238,16 @@ Template.cardActions.events({
|
||||
const boardId = Session.get('currentBoard');
|
||||
const desc = Utils.getTriggerActionDesc(event, tpl);
|
||||
const dateField = tpl.find('#reldate-datefield').value;
|
||||
// `days` keeps its name for backward compatibility: it is the numeric
|
||||
// amount, interpreted together with `unit` (minutes/hours/days/weeks/months).
|
||||
const days = parseInt(tpl.find('#reldate-days').value, 10) || 0;
|
||||
const unit = tpl.find('#reldate-unit').value;
|
||||
const triggerId = Triggers.insert(trigger);
|
||||
const actionId = Actions.insert({
|
||||
actionType: 'setDateRelative',
|
||||
dateField,
|
||||
days,
|
||||
unit,
|
||||
boardId,
|
||||
desc,
|
||||
});
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
import { ReactiveCache } from '/imports/reactiveCache';
|
||||
import Actions from '/models/actions';
|
||||
import Rules from '/models/rules';
|
||||
import Triggers from '/models/triggers';
|
||||
|
||||
function boardRuleIds() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
@@ -62,9 +60,10 @@ Template.rulesList.events({
|
||||
getSelected().forEach(ruleId => {
|
||||
const rule = ReactiveCache.getRule(ruleId);
|
||||
if (rule) {
|
||||
Rules.remove(rule._id);
|
||||
Actions.remove(rule.actionId);
|
||||
Triggers.remove(rule.triggerId);
|
||||
// Delete the rule + its trigger + action server-side (see
|
||||
// server/rulesButton.js `rules.deleteRule`): three client-side
|
||||
// Collection.remove() calls were rejected with 403 "Access denied".
|
||||
Meteor.call('rules.deleteRule', rule._id);
|
||||
}
|
||||
});
|
||||
setSelected([]);
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
import { ReactiveCache } from '/imports/reactiveCache';
|
||||
import { FlowRouter } from 'meteor/ostrio:flow-router-extra';
|
||||
import { Utils } from '/client/lib/utils';
|
||||
import Actions from '/models/actions';
|
||||
import Rules from '/models/rules';
|
||||
import Triggers from '/models/triggers';
|
||||
|
||||
Template.rulesMain.onCreated(function () {
|
||||
this.rulesCurrentTab = new ReactiveVar('rulesList');
|
||||
@@ -83,9 +80,12 @@ function sanitizeObject(obj) {
|
||||
Template.rulesMain.events({
|
||||
'click .js-delete-rule'() {
|
||||
const rule = Template.currentData();
|
||||
Rules.remove(rule._id);
|
||||
Actions.remove(rule.actionId);
|
||||
Triggers.remove(rule.triggerId);
|
||||
// Delete the rule + its trigger + action in one server call. Doing this
|
||||
// client-side as three separate Collection.remove() calls failed with 403
|
||||
// "Access denied" whenever a trigger/action document's boardId did not
|
||||
// resolve to a board in the allow() rule; the method authorizes once and
|
||||
// removes all three server-side.
|
||||
Meteor.call('rules.deleteRule', rule._id);
|
||||
},
|
||||
'click .js-goto-trigger'(event, tpl) {
|
||||
event.preventDefault();
|
||||
|
||||
@@ -12,7 +12,7 @@ template(name="rulesWorkflow")
|
||||
.workflow-node.workflow-node-when
|
||||
span.workflow-node-label {{_ 'r-when'}}
|
||||
span.workflow-node-text= builderTriggerLabel
|
||||
a.workflow-slot-clear.js-clear-when(title="{{_ 'remove'}}") ✕
|
||||
a.workflow-slot-clear.js-clear-when(title="{{_ 'r-remove'}}") ✕
|
||||
else
|
||||
span.workflow-slot-placeholder {{_ 'r-when'}}: {{_ 'r-drop-trigger'}}
|
||||
.workflow-arrow
|
||||
@@ -22,7 +22,7 @@ template(name="rulesWorkflow")
|
||||
.workflow-node.workflow-node-then
|
||||
span.workflow-node-label {{_ 'r-action'}}
|
||||
span.workflow-node-text= builderActionLabel
|
||||
a.workflow-slot-clear.js-clear-then(title="{{_ 'remove'}}") ✕
|
||||
a.workflow-slot-clear.js-clear-then(title="{{_ 'r-remove'}}") ✕
|
||||
else
|
||||
span.workflow-slot-placeholder {{_ 'r-action'}}: {{_ 'r-drop-action'}}
|
||||
.workflow-builder-controls
|
||||
|
||||
@@ -12,31 +12,44 @@ import Triggers from '/models/triggers';
|
||||
// can be built entirely by dragging. Parameterized rules (specific list, label,
|
||||
// member, schedule time, …) are still created with the form builder on the
|
||||
// List view.
|
||||
// Each palette entry carries an i18n `labelKey` (translated at render time via
|
||||
// TAPi18n.__) instead of a hardcoded English string, so the whole workflow view
|
||||
// follows the UI language. `labelParams` is passed to TAPi18n.__ for labels that
|
||||
// need a placeholder (e.g. the scheduled time). Existing rule keys are reused
|
||||
// where they fit; workflow-only labels use new `r-w-*` keys (see en.i18n.json).
|
||||
const TRIGGER_PALETTE = [
|
||||
{ label: 'Card is created', doc: { activityType: 'createCard', listName: '*', swimlaneName: '*', cardTitle: '*', userId: '*' } },
|
||||
{ label: 'Card is moved', doc: { activityType: 'moveCard', listName: '*', oldListName: '*', swimlaneName: '*', cardTitle: '*', userId: '*' } },
|
||||
{ label: 'Card is archived', doc: { activityType: 'archivedCard', userId: '*' } },
|
||||
{ label: 'Card is unarchived', doc: { activityType: 'restoredCard', userId: '*' } },
|
||||
{ label: 'Any label is added', doc: { activityType: 'addedLabel', labelId: '*', userId: '*' } },
|
||||
{ label: 'Any label is removed', doc: { activityType: 'removedLabel', labelId: '*', userId: '*' } },
|
||||
{ label: 'A member is added', doc: { activityType: 'joinMember', username: '*', userId: '*' } },
|
||||
{ label: 'A member is removed', doc: { activityType: 'unjoinMember', username: '*', userId: '*' } },
|
||||
{ label: 'A checklist is added', doc: { activityType: 'addChecklist', checklistName: '*', userId: '*' } },
|
||||
{ label: 'An attachment is added', doc: { activityType: 'addAttachment', userId: '*' } },
|
||||
{ label: 'Every day at 09:00', doc: { activityType: 'scheduledTrigger', scheduleKind: 'calendar', scheduleType: 'daily', atTime: '09:00', listName: '*', swimlaneName: '*' } },
|
||||
{ labelKey: 'r-w-card-created', doc: { activityType: 'createCard', listName: '*', swimlaneName: '*', cardTitle: '*', userId: '*' } },
|
||||
{ labelKey: 'r-when-a-card-is-moved', doc: { activityType: 'moveCard', listName: '*', oldListName: '*', swimlaneName: '*', cardTitle: '*', userId: '*' } },
|
||||
{ labelKey: 'r-w-card-archived', doc: { activityType: 'archivedCard', userId: '*' } },
|
||||
{ labelKey: 'r-w-card-unarchived', doc: { activityType: 'restoredCard', userId: '*' } },
|
||||
{ labelKey: 'r-w-label-added', doc: { activityType: 'addedLabel', labelId: '*', userId: '*' } },
|
||||
{ labelKey: 'r-w-label-removed', doc: { activityType: 'removedLabel', labelId: '*', userId: '*' } },
|
||||
{ labelKey: 'r-w-member-added', doc: { activityType: 'joinMember', username: '*', userId: '*' } },
|
||||
{ labelKey: 'r-w-member-removed', doc: { activityType: 'unjoinMember', username: '*', userId: '*' } },
|
||||
{ labelKey: 'r-w-checklist-added', doc: { activityType: 'addChecklist', checklistName: '*', userId: '*' } },
|
||||
{ labelKey: 'r-w-attachment-added', doc: { activityType: 'addAttachment', userId: '*' } },
|
||||
{ labelKey: 'r-w-every-day-at', labelParams: { time: '09:00' }, doc: { activityType: 'scheduledTrigger', scheduleKind: 'calendar', scheduleType: 'daily', atTime: '09:00', listName: '*', swimlaneName: '*' } },
|
||||
];
|
||||
|
||||
const ACTION_PALETTE = [
|
||||
{ label: 'Move card to top', doc: { actionType: 'moveCardToTop', listName: '*', swimlaneName: '*' } },
|
||||
{ label: 'Move card to bottom', doc: { actionType: 'moveCardToBottom', listName: '*', swimlaneName: '*' } },
|
||||
{ label: 'Archive card', doc: { actionType: 'archive' } },
|
||||
{ label: 'Unarchive card', doc: { actionType: 'unarchive' } },
|
||||
{ label: 'Mark card complete', doc: { actionType: 'markCardComplete' } },
|
||||
{ label: 'Mark card incomplete', doc: { actionType: 'markCardIncomplete' } },
|
||||
{ label: 'Remove all members', doc: { actionType: 'removeMember', username: '*' } },
|
||||
{ label: 'Set received date to now', doc: { actionType: 'setDate', dateField: 'receivedAt' } },
|
||||
{ labelKey: 'r-d-move-to-top-gen', doc: { actionType: 'moveCardToTop', listName: '*', swimlaneName: '*' } },
|
||||
{ labelKey: 'r-d-move-to-bottom-gen', doc: { actionType: 'moveCardToBottom', listName: '*', swimlaneName: '*' } },
|
||||
{ labelKey: 'r-d-archive', doc: { actionType: 'archive' } },
|
||||
{ labelKey: 'r-d-unarchive', doc: { actionType: 'unarchive' } },
|
||||
{ labelKey: 'r-mark-complete', doc: { actionType: 'markCardComplete' } },
|
||||
{ labelKey: 'r-mark-incomplete', doc: { actionType: 'markCardIncomplete' } },
|
||||
{ labelKey: 'r-remove-all', doc: { actionType: 'removeMember', username: '*' } },
|
||||
{ labelKey: 'r-w-set-received-now', doc: { actionType: 'setDate', dateField: 'receivedAt' } },
|
||||
];
|
||||
|
||||
// Translate a palette entry's label for display / storage in the current UI
|
||||
// language (matches the classic Rules view, which also stores already-translated
|
||||
// description text at creation time).
|
||||
function paletteLabel(entry) {
|
||||
if (!entry) return '';
|
||||
return TAPi18n.__(entry.labelKey, entry.labelParams);
|
||||
}
|
||||
|
||||
Template.rulesWorkflow.onCreated(function () {
|
||||
this.builderTrigger = new ReactiveVar(null);
|
||||
this.builderAction = new ReactiveVar(null);
|
||||
@@ -52,24 +65,22 @@ Template.rulesWorkflow.helpers({
|
||||
return Utils.getCurrentBoard();
|
||||
},
|
||||
triggerPalette() {
|
||||
return TRIGGER_PALETTE.map((t, idx) => ({ idx, label: t.label }));
|
||||
return TRIGGER_PALETTE.map((t, idx) => ({ idx, label: paletteLabel(t) }));
|
||||
},
|
||||
actionPalette() {
|
||||
return ACTION_PALETTE.map((a, idx) => ({ idx, label: a.label }));
|
||||
return ACTION_PALETTE.map((a, idx) => ({ idx, label: paletteLabel(a) }));
|
||||
},
|
||||
builderTrigger() {
|
||||
return Template.instance().builderTrigger.get();
|
||||
},
|
||||
builderTriggerLabel() {
|
||||
const t = Template.instance().builderTrigger.get();
|
||||
return t ? t.label : '';
|
||||
return paletteLabel(Template.instance().builderTrigger.get());
|
||||
},
|
||||
builderAction() {
|
||||
return Template.instance().builderAction.get();
|
||||
},
|
||||
builderActionLabel() {
|
||||
const a = Template.instance().builderAction.get();
|
||||
return a ? a.label : '';
|
||||
return paletteLabel(Template.instance().builderAction.get());
|
||||
},
|
||||
createDisabled() {
|
||||
const tpl = Template.instance();
|
||||
@@ -96,9 +107,11 @@ function persistRule(tpl) {
|
||||
if (!t || !a) return;
|
||||
const boardId = Session.get('currentBoard');
|
||||
const titleField = tpl.find('.js-workflow-rule-title');
|
||||
const title = (titleField.value || '').trim() || `${t.label} → ${a.label}`;
|
||||
const triggerId = Triggers.insert({ ...t.doc, boardId, desc: t.label });
|
||||
const actionId = Actions.insert({ ...a.doc, boardId, desc: a.label });
|
||||
const tLabel = paletteLabel(t);
|
||||
const aLabel = paletteLabel(a);
|
||||
const title = (titleField.value || '').trim() || `${tLabel} → ${aLabel}`;
|
||||
const triggerId = Triggers.insert({ ...t.doc, boardId, desc: tLabel });
|
||||
const actionId = Actions.insert({ ...a.doc, boardId, desc: aLabel });
|
||||
Rules.insert({ title, triggerId, actionId, boardId });
|
||||
tpl.builderTrigger.set(null);
|
||||
tpl.builderAction.set(null);
|
||||
@@ -140,7 +153,7 @@ Template.rulesWorkflow.events({
|
||||
const a = ACTION_PALETTE[tpl.dragItem.idx];
|
||||
const boardId = Session.get('currentBoard');
|
||||
const oldActionId = rule.actionId;
|
||||
const newActionId = Actions.insert({ ...a.doc, boardId, desc: a.label });
|
||||
const newActionId = Actions.insert({ ...a.doc, boardId, desc: paletteLabel(a) });
|
||||
Rules.update(ruleId, { $set: { actionId: newActionId } });
|
||||
if (oldActionId) Actions.remove(oldActionId);
|
||||
tpl.dragItem = null;
|
||||
@@ -163,8 +176,9 @@ Template.rulesWorkflow.events({
|
||||
const ruleId = node && node.dataset.ruleId;
|
||||
const rule = ReactiveCache.getRule(ruleId);
|
||||
if (!rule) return;
|
||||
Rules.remove(rule._id);
|
||||
Actions.remove(rule.actionId);
|
||||
Triggers.remove(rule.triggerId);
|
||||
// Delete the rule + its trigger + action server-side (see
|
||||
// server/rulesButton.js `rules.deleteRule`): three client-side
|
||||
// Collection.remove() calls were rejected with 403 "Access denied".
|
||||
Meteor.call('rules.deleteRule', rule._id);
|
||||
},
|
||||
});
|
||||
@@ -378,3 +378,62 @@ table td:first-child {
|
||||
.roles-settings .roles-description {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
/* Admin Panel > People > Domains table: search + column sort + pagination,
|
||||
matching the Board Table view / other admin tables. */
|
||||
.domain-controls {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.domain-controls input.js-domain-search {
|
||||
flex: 1 1 auto;
|
||||
height: 30px;
|
||||
padding: 0 8px;
|
||||
border: 1px solid #bbb;
|
||||
border-radius: 0.4vw;
|
||||
}
|
||||
|
||||
.domain-controls button.js-domain-search-button {
|
||||
height: 30px;
|
||||
padding: 0 12px;
|
||||
border: 1px solid #bbb;
|
||||
background: #fff;
|
||||
border-radius: 0.4vw;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.domain-pagination {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.domain-pagination button {
|
||||
min-width: 32px;
|
||||
height: 30px;
|
||||
padding: 0 10px;
|
||||
border: 1px solid #bbb;
|
||||
background: #fff;
|
||||
border-radius: 0.4vw;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.domain-pagination button.disabled {
|
||||
opacity: 0.5;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.domain-page-info {
|
||||
min-width: 72px;
|
||||
text-align: center;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
th.js-domain-sort {
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
}
|
||||
@@ -122,7 +122,7 @@ template(name="people")
|
||||
else if templatesSetting.get
|
||||
+templatesGeneral
|
||||
else if domainSetting.get
|
||||
+domainGeneral(domainList=domainList)
|
||||
+domainGeneral
|
||||
|
||||
|
||||
template(name="orgGeneral")
|
||||
@@ -239,11 +239,18 @@ template(name="selectAllUser")
|
||||
input.allUserChkBox(type="checkbox", id="chkSelectAll")
|
||||
|
||||
template(name="domainGeneral")
|
||||
.domain-controls
|
||||
input.js-domain-search(type="text" placeholder="{{_ 'search'}}" aria-label="{{_ 'search'}}")
|
||||
button.js-domain-search-button(type="button") {{_ 'search'}}
|
||||
.domain-pagination
|
||||
button.js-domain-prev-page(type="button" class="{{#unless hasPrevPage}}disabled{{/unless}}" aria-label="{{_ 'previous'}}") {{_ 'previous'}}
|
||||
span.domain-page-info {{currentPage}} / {{totalPages}}
|
||||
button.js-domain-next-page(type="button" class="{{#unless hasNextPage}}disabled{{/unless}}" aria-label="{{_ 'next'}}") {{_ 'next'}}
|
||||
table
|
||||
thead
|
||||
tr
|
||||
th {{_ 'domain'}}
|
||||
th {{_ 'domain-user-count'}}
|
||||
th.js-domain-sort(scope="col" data-sort="domain") {{_ 'domain'}} {{domainSortIndicator 'domain'}}
|
||||
th.js-domain-sort(scope="col" data-sort="count") {{_ 'domain-user-count'}} {{domainSortIndicator 'count'}}
|
||||
tbody
|
||||
if domainList.length
|
||||
each domainList
|
||||
|
||||
@@ -14,6 +14,7 @@ import InviteToBoardRolesSettings, {
|
||||
const orgsPerPage = 25;
|
||||
const teamsPerPage = 25;
|
||||
const usersPerPage = 25;
|
||||
const domainsPerPage = 25;
|
||||
let userOrgsTeamsAction = ""; //poosible actions 'addOrg', 'addTeam', 'removeOrg' or 'removeTeam' when adding or modifying a user
|
||||
let selectedUserChkBoxUserIds = [];
|
||||
|
||||
@@ -28,9 +29,9 @@ Template.people.onCreated(function () {
|
||||
this.lockedUsersSetting = new ReactiveVar(false);
|
||||
this.rolesSetting = new ReactiveVar(false);
|
||||
this.templatesSetting = new ReactiveVar(false);
|
||||
// #5850: Admin Panel > People > Domains tab.
|
||||
// #5850: Admin Panel > People > Domains tab. The domains table itself
|
||||
// (domainGeneral) now owns its data via getDomainsWithUserCountsPage.
|
||||
this.domainSetting = new ReactiveVar(false);
|
||||
this.domains = new ReactiveVar([]);
|
||||
this.subscribe('inviteToBoardRolesSettings');
|
||||
this.findOrgsOptions = new ReactiveVar({});
|
||||
this.findTeamsOptions = new ReactiveVar({});
|
||||
@@ -205,12 +206,9 @@ Template.people.onCreated(function () {
|
||||
this.templatesSetting.set('templates-setting' === targetID);
|
||||
this.domainSetting.set('domains-setting' === targetID);
|
||||
|
||||
// #5850: load the domains + per-domain user counts when the tab opens.
|
||||
if ('domains-setting' === targetID) {
|
||||
Meteor.call('getDomainsWithUserCounts', (err, res) => {
|
||||
if (!err) this.domains.set(res || []);
|
||||
});
|
||||
}
|
||||
// The Domains table (domainGeneral) now fetches its own single page from
|
||||
// getDomainsWithUserCountsPage (server-side search / sort / pagination), so
|
||||
// the parent no longer eagerly loads every domain into the browser.
|
||||
|
||||
// When switching to locked users tab, refresh the locked users list
|
||||
if ('locked-users-setting' === targetID) {
|
||||
@@ -292,9 +290,6 @@ Template.people.helpers({
|
||||
domainSetting() {
|
||||
return Template.instance().domainSetting;
|
||||
},
|
||||
domainList() {
|
||||
return Template.instance().domains.get();
|
||||
},
|
||||
orgList() {
|
||||
const tpl = Template.instance();
|
||||
// The 'org' publication already returns only the current page (server-side
|
||||
@@ -1897,3 +1892,96 @@ Template.settingsUserPopup.helpers({
|
||||
return Template.instance().errorMessage.get();
|
||||
},
|
||||
});
|
||||
|
||||
// Admin Panel > People > Domains table. Self-contained (like the Board Table
|
||||
// view): it keeps its own search / sort / page state and fetches only ONE page
|
||||
// from the server method getDomainsWithUserCountsPage, so the whole domain list
|
||||
// is never loaded into the browser.
|
||||
Template.domainGeneral.onCreated(function () {
|
||||
this.searchQuery = new ReactiveVar('');
|
||||
this.sortField = new ReactiveVar('domain'); // domain | count
|
||||
this.sortDirection = new ReactiveVar(1); // 1 ascending, -1 descending
|
||||
this.page = new ReactiveVar(1);
|
||||
this.pageData = new ReactiveVar({ rows: [], total: 0, totalPages: 1 });
|
||||
|
||||
this.autorun(() => {
|
||||
const params = {
|
||||
search: this.searchQuery.get(),
|
||||
sortField: this.sortField.get(),
|
||||
sortDirection: this.sortDirection.get(),
|
||||
page: this.page.get(),
|
||||
perPage: domainsPerPage,
|
||||
};
|
||||
Meteor.call('getDomainsWithUserCountsPage', params, (err, res) => {
|
||||
if (!err && res) {
|
||||
this.pageData.set(res);
|
||||
// Server clamps the page into range; mirror that so the controls agree.
|
||||
if (typeof res.page === 'number' && res.page !== this.page.get()) {
|
||||
this.page.set(res.page);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Template.domainGeneral.helpers({
|
||||
domainList() {
|
||||
return Template.instance().pageData.get().rows;
|
||||
},
|
||||
currentPage() {
|
||||
return Template.instance().page.get();
|
||||
},
|
||||
totalPages() {
|
||||
return Template.instance().pageData.get().totalPages || 1;
|
||||
},
|
||||
hasPrevPage() {
|
||||
return Template.instance().page.get() > 1;
|
||||
},
|
||||
hasNextPage() {
|
||||
const tpl = Template.instance();
|
||||
return tpl.page.get() < (tpl.pageData.get().totalPages || 1);
|
||||
},
|
||||
// Excel-like sort arrow on the active column, matching the Board Table view.
|
||||
domainSortIndicator(field) {
|
||||
const tpl = Template.instance();
|
||||
if (tpl.sortField.get() !== field) return '';
|
||||
return tpl.sortDirection.get() === 1 ? '▲' : '▼';
|
||||
},
|
||||
});
|
||||
|
||||
Template.domainGeneral.events({
|
||||
'click .js-domain-search-button'(event, tpl) {
|
||||
event.preventDefault();
|
||||
tpl.searchQuery.set(tpl.$('.js-domain-search').val() || '');
|
||||
tpl.page.set(1);
|
||||
},
|
||||
'keydown .js-domain-search'(event, tpl) {
|
||||
if (event.keyCode === 13) {
|
||||
event.preventDefault();
|
||||
tpl.searchQuery.set(tpl.$('.js-domain-search').val() || '');
|
||||
tpl.page.set(1);
|
||||
}
|
||||
},
|
||||
'click .js-domain-prev-page'(event, tpl) {
|
||||
event.preventDefault();
|
||||
const current = tpl.page.get();
|
||||
if (current > 1) tpl.page.set(current - 1);
|
||||
},
|
||||
'click .js-domain-next-page'(event, tpl) {
|
||||
event.preventDefault();
|
||||
const current = tpl.page.get();
|
||||
if (current < (tpl.pageData.get().totalPages || 1)) tpl.page.set(current + 1);
|
||||
},
|
||||
'click .js-domain-sort'(event, tpl) {
|
||||
event.preventDefault();
|
||||
const field = event.currentTarget.dataset.sort;
|
||||
if (!field) return;
|
||||
if (tpl.sortField.get() === field) {
|
||||
tpl.sortDirection.set(tpl.sortDirection.get() * -1);
|
||||
} else {
|
||||
tpl.sortField.set(field);
|
||||
tpl.sortDirection.set(1);
|
||||
}
|
||||
tpl.page.set(1);
|
||||
},
|
||||
});
|
||||
@@ -6,6 +6,7 @@ import AccessibilitySettings from '/models/accessibilitySettings';
|
||||
import AccountSettings from '/models/accountSettings';
|
||||
import Announcements from '/models/announcements';
|
||||
import Settings from '/models/settings';
|
||||
import { resolveDefaultAuthenticationMethod } from '/models/lib/authenticationMethod';
|
||||
import TableVisibilityModeSettings from '/models/tableVisibilityModeSettings';
|
||||
// import {
|
||||
// cronMigrationProgress,
|
||||
@@ -803,7 +804,17 @@ Template.setting.events({
|
||||
$('input[name=hideBoardMemberList]:checked').val() === 'true';
|
||||
const displayAuthenticationMethod =
|
||||
$('input[name=displayAuthenticationMethod]:checked').val() === 'true';
|
||||
const defaultAuthenticationMethod = $('#defaultAuthenticationMethod').val();
|
||||
// #5879: the <select> options are populated by an async Meteor.call, so its
|
||||
// value can still be '' / null when Save is clicked. Saving that empty value
|
||||
// over the required `defaultAuthenticationMethod` string silently failed
|
||||
// validation, so the Layout save looked like it hung / did nothing. Fall back
|
||||
// to the currently stored method so a real value is never overwritten by ''.
|
||||
const currentDefaultAuthenticationMethod =
|
||||
ReactiveCache.getCurrentSetting()?.defaultAuthenticationMethod;
|
||||
const defaultAuthenticationMethod = resolveDefaultAuthenticationMethod(
|
||||
$('#defaultAuthenticationMethod').val(),
|
||||
currentDefaultAuthenticationMethod,
|
||||
);
|
||||
const spinnerName = ($('#spinnerName').val() || '').trim();
|
||||
|
||||
try {
|
||||
|
||||
@@ -55,9 +55,14 @@ template(name='homeSidebar')
|
||||
i.fa.fa-comment-o
|
||||
| {{_ 'activities'}}
|
||||
|
||||
a.flex.js-toggle-show-activities(title="{{_ 'show-activities'}}")
|
||||
i.fa(class="{{#if showActivities}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
span {{_ 'show-activities'}}
|
||||
if showActivities
|
||||
a.flex.activities-eye-toggle.js-toggle-show-activities(title="{{_ 'hide-activities'}}" aria-label="{{_ 'hide-activities'}}")
|
||||
i.fa.fa-eye.eye-icon
|
||||
span {{_ 'hide-activities'}}
|
||||
else
|
||||
a.flex.activities-eye-toggle.js-toggle-show-activities(title="{{_ 'show-activities'}}" aria-label="{{_ 'show-activities'}}")
|
||||
i.fa.fa-eye-slash.eye-slash-icon
|
||||
span {{_ 'show-activities'}}
|
||||
+activities(mode="board")
|
||||
|
||||
template(name="membersWidget")
|
||||
@@ -823,7 +828,7 @@ template(name="labelsWidget")
|
||||
| {{_ 'labels'}}
|
||||
.board-widget-content
|
||||
each currentBoard.labels
|
||||
a.card-label(class="card-label-{{color}}"
|
||||
a.card-label(class="{{labelColorClass color}}" style="{{labelColorStyle color}}"
|
||||
class="{{#if currentUser.isNotCommentOnly}}{{#if currentUser.isNotWorker}}js-label{{/if}}{{/if}}")
|
||||
span.card-label-name
|
||||
+viewer
|
||||
|
||||
@@ -29,7 +29,7 @@ template(name="filterSidebar")
|
||||
each currentBoard.labels
|
||||
li
|
||||
a.name.js-toggle-label-filter(data-filter-id="{{_id}}")
|
||||
span.card-label.square(class="card-label-{{color}}")
|
||||
span.card-label.square(class="{{labelColorClass color}}" style="{{labelColorStyle color}}")
|
||||
span.sidebar-list-item-description
|
||||
if name
|
||||
= name
|
||||
@@ -188,7 +188,7 @@ template(name="multiselectionSidebar")
|
||||
each currentBoard.labels
|
||||
li
|
||||
a.name.js-toggle-label-multiselection
|
||||
span.card-label.square(class="card-label-{{color}}")
|
||||
span.card-label.square(class="{{labelColorClass color}}" style="{{labelColorStyle color}}")
|
||||
span.sidebar-list-item-description
|
||||
if name
|
||||
= name
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
template(name="swimlaneHeader")
|
||||
.swimlane-header-wrap.js-swimlane-header(class=colorClass title="{{_ 'rename'}}")
|
||||
.swimlane-header-wrap.js-swimlane-header(class=colorClass style=colorStyle title="{{_ 'rename'}}")
|
||||
if this.isTemplateContainer
|
||||
+swimlaneFixedHeader(this)
|
||||
else
|
||||
@@ -120,6 +120,10 @@ template(name="setSwimlaneColorPopup")
|
||||
span.card-label.palette-color.js-palette-color(class="card-details-{{color}}")
|
||||
if(isSelected color)
|
||||
i.fa.fa-check
|
||||
// #5514: native color wheel for picking a custom RGB / hex color
|
||||
.flush-left.color-wheel-wrap
|
||||
label(for="swimlaneColorWheel") {{_ 'custom-color'}}
|
||||
input.js-swimlane-color-wheel#swimlaneColorWheel(type="color" value=currentColorHex title="{{_ 'custom-color'}}")
|
||||
// Buttons aligned left too
|
||||
.flush-left
|
||||
button.primary.confirm.js-submit(style="margin-inline-start:0") {{_ 'save'}}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { TAPi18n } from '/imports/i18n';
|
||||
import { ReactiveCache } from '/imports/reactiveCache';
|
||||
import { SWIMLANE_COLORS } from '/models/metadata/colors';
|
||||
import { isHexColor, toHex } from '/models/lib/contrastColor';
|
||||
import Swimlanes from '/models/swimlanes';
|
||||
import { Utils } from '/client/lib/utils';
|
||||
const { calculateIndexData } = Utils;
|
||||
@@ -166,6 +167,10 @@ Template.setSwimlaneColorPopup.helpers({
|
||||
isSelected(color) {
|
||||
return Template.instance().currentColor.get() === color;
|
||||
},
|
||||
// #5514: current color as a '#rrggbb' hex for the native color wheel <input>.
|
||||
currentColorHex() {
|
||||
return toHex(Template.instance().currentColor.get()) || '#0079bf';
|
||||
},
|
||||
});
|
||||
|
||||
Template.setSwimlaneColorPopup.events({
|
||||
@@ -178,6 +183,13 @@ Template.setSwimlaneColorPopup.events({
|
||||
const paletteData = Blaze.getData(event.currentTarget);
|
||||
tpl.currentColor.set(paletteData?.color);
|
||||
},
|
||||
// #5514: picking from the native color wheel stores a custom hex.
|
||||
'input .js-swimlane-color-wheel'(event, tpl) {
|
||||
const value = event.currentTarget.value;
|
||||
if (isHexColor(value)) {
|
||||
tpl.currentColor.set(value);
|
||||
}
|
||||
},
|
||||
async 'click .js-submit'(event, tpl) {
|
||||
event.preventDefault();
|
||||
await tpl.currentSwimlane.setColor(tpl.currentColor.get());
|
||||
|
||||
@@ -98,6 +98,19 @@ body.mobile-mode .auth-layout .auth-dialog .at-form .password-input-container .p
|
||||
margin-top: 2vh;
|
||||
color: #4d4d4d;
|
||||
}
|
||||
/* #4394 (security): when registration / forgot-password are disabled in the
|
||||
Admin Panel, keep the corresponding links hidden even after useraccounts
|
||||
re-renders the form on a failed login. The class lives on the stable <body>
|
||||
ancestor (set in layouts.js), so this rule re-hides every recreated copy of
|
||||
the link — unlike a one-shot inline display:none that the re-render dropped. */
|
||||
body.registration-disabled .at-signup-link,
|
||||
body.registration-disabled .at-signUp {
|
||||
display: none !important;
|
||||
}
|
||||
body.forgotpwd-disabled .at-pwd-link,
|
||||
body.forgotpwd-disabled .at-forgotPwd {
|
||||
display: none !important;
|
||||
}
|
||||
.auth-layout .auth-dialog .at-form .at-signup-link .at-signUp,
|
||||
.auth-layout .auth-dialog .at-form .at-signin-link .at-signUp,
|
||||
.auth-layout .auth-dialog .at-form .at-forgotPwd .at-signUp,
|
||||
|
||||
@@ -29,6 +29,27 @@ import {
|
||||
calendar,
|
||||
} from '/imports/lib/dateUtils';
|
||||
import { Utils } from '/client/lib/utils';
|
||||
import { isHexColor, contrastText } from '/models/lib/contrastColor';
|
||||
|
||||
// #5514: a color (label / list / swimlane / card) may be either a named palette
|
||||
// color rendered via a CSS class (e.g. `card-label-green`) or a custom
|
||||
// '#rrggbb' hex chosen from the color wheel. For a hex value there is no CSS
|
||||
// class, so we emit an inline `background-color` plus an automatically readable
|
||||
// text `color` (contrastText). These helpers let templates keep the class path
|
||||
// for named colors and switch to inline styles for hex.
|
||||
|
||||
// Class for a label chip: `card-label-<name>` for named colors, empty for hex.
|
||||
Blaze.registerHelper('labelColorClass', color =>
|
||||
isHexColor(color) ? '' : `card-label-${color}`,
|
||||
);
|
||||
|
||||
// Inline style for a label chip: background + readable text for a hex color,
|
||||
// empty for a named color (its CSS class already sets both).
|
||||
Blaze.registerHelper('labelColorStyle', color =>
|
||||
isHexColor(color)
|
||||
? `background-color:${color};color:${contrastText(color)};`
|
||||
: '',
|
||||
);
|
||||
|
||||
Blaze.registerHelper('currentBoard', () => {
|
||||
const ret = Utils.getCurrentBoard();
|
||||
|
||||
+19
-29
@@ -19,8 +19,9 @@ import {
|
||||
now,
|
||||
createDate,
|
||||
fromNow,
|
||||
calendar
|
||||
calendar
|
||||
} from '/imports/lib/dateUtils';
|
||||
import { weekRange } from '/models/lib/weekStart';
|
||||
// Sidebar is imported late to avoid circular dependency (sidebar.js needs its
|
||||
// jade template loaded first, but router.js → filter.js would load it too early)
|
||||
let _Sidebar;
|
||||
@@ -119,44 +120,33 @@ class DateFilter {
|
||||
// weeks up to today +/- offset. This considers the user's preferred
|
||||
// start of week day (as defined by Meteor).
|
||||
relativeWeek(offset, week) {
|
||||
if (this._filterState == 'thisweek') {
|
||||
// #4881: toggle per-week so clicking the same button again clears it, but
|
||||
// clicking the OTHER week switches to it instead of just resetting (the old
|
||||
// code reset on either state, so you could not go straight from "this week"
|
||||
// to "next week").
|
||||
const targetState = week === 'next' ? 'nextweek' : 'thisweek';
|
||||
if (this._filterState === targetState) {
|
||||
this.reset();
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._filterState == 'nextweek') {
|
||||
this.reset();
|
||||
return;
|
||||
}
|
||||
|
||||
// getStartDayOfWeek returns the offset from Sunday of the user's
|
||||
// preferred starting day of the week. This date should be added
|
||||
// to the moment start of week to get the real start of week date.
|
||||
// The default is 1, meaning Monday.
|
||||
// #4881: the old window came from startOf(now(), 'week'), but native
|
||||
// dateUtils.startOf() has no 'week' case, so it returned "now" unchanged and
|
||||
// the window started at today + startDayOfWeek — i.e. it selected NEXT
|
||||
// week's cards for "this week" and ignored the configured start weekday.
|
||||
// weekRange() computes the correct window that CONTAINS today for the user's
|
||||
// configured start day of week (0=Sunday..6=Saturday, default Monday).
|
||||
const currentUser = ReactiveCache.getCurrentUser();
|
||||
const weekStartDay = currentUser ? currentUser.getStartDayOfWeek() : 1;
|
||||
const weekOffset = week === 'next' ? 1 : 0;
|
||||
const { start: WeekStart, end: WeekEnd } = weekRange(now(), weekStartDay, weekOffset);
|
||||
|
||||
if (week === 'this') {
|
||||
// Create week start and end dates
|
||||
var WeekStart = startOf(add(startOf(now(), 'week'), weekStartDay, 'days'), 'day');
|
||||
var WeekEnd = endOf(add(WeekStart, 6, 'days'), 'day');
|
||||
|
||||
this._updateState('thisweek');
|
||||
} else if (week === 'next') {
|
||||
// Create next week start and end dates
|
||||
var WeekStart = startOf(add(startOf(now(), 'week'), weekStartDay + 7, 'days'), 'day');
|
||||
var WeekEnd = endOf(add(WeekStart, 6, 'days'), 'day');
|
||||
|
||||
this._updateState('nextweek');
|
||||
}
|
||||
|
||||
var startDate = WeekStart;
|
||||
var endDate = WeekEnd;
|
||||
this._updateState(targetState);
|
||||
|
||||
if (offset >= 0) {
|
||||
this._filter = { $gte: startDate, $lte: endDate };
|
||||
this._filter = { $gte: WeekStart, $lte: WeekEnd };
|
||||
} else {
|
||||
this._filter = { $lte: startDate, $gte: endDate };
|
||||
this._filter = { $lte: WeekStart, $gte: WeekEnd };
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+27
-101
@@ -4,6 +4,7 @@ import { Tracker } from 'meteor/tracker';
|
||||
import { TAPi18n } from '/imports/i18n';
|
||||
import { EscapeActions } from '/client/lib/escapeActions';
|
||||
import { Utils } from '/client/lib/utils';
|
||||
import { computePopupOffset } from '/client/lib/popupOffset';
|
||||
|
||||
window.Popup = new (class {
|
||||
constructor() {
|
||||
@@ -222,108 +223,33 @@ window.Popup = new (class {
|
||||
return () => {
|
||||
Utils.windowResizeDep.depend();
|
||||
|
||||
if (Utils.isMiniScreen()) return { left: 0, top: 0 };
|
||||
// #5667: read the current page scroll and the opener's document offset,
|
||||
// then delegate the geometry to the pure, unit-tested computePopupOffset.
|
||||
// It lays the popup out in VIEWPORT coordinates — so a date-picker opened
|
||||
// low on a scrolled page stays fully visible instead of extending past the
|
||||
// visible area — and returns document coordinates for the absolute style.
|
||||
const hasOpener = !!($element && $element.length);
|
||||
const offset = hasOpener ? $element.offset() : null;
|
||||
const opener = hasOpener
|
||||
? { top: offset.top, left: offset.left, height: $element.outerHeight() }
|
||||
: null;
|
||||
|
||||
const viewportWidth = $(window).width();
|
||||
const viewportHeight = $(window).height();
|
||||
const viewportPadding = 10;
|
||||
// Calculate actual popup width based on CSS: min(380px, 55vw)
|
||||
const popupWidth = Math.min(380, viewportWidth * 0.55);
|
||||
|
||||
// Card details popup: dock it to the top of the viewport so it overlays
|
||||
// the global and board header bars (its z-index already sits above them)
|
||||
// instead of opening downward from the clicked minicard.
|
||||
if (popupName === 'cardDetailsPopup') {
|
||||
const cardWidth = Math.min(600, viewportWidth * 0.8);
|
||||
const centeredLeft = (viewportWidth - cardWidth) / 2;
|
||||
// top is forced to 0 in CSS (.pop-over[data-popup="cardDetailsPopup"])
|
||||
// so the card overlays the header bars; use the full viewport height.
|
||||
return {
|
||||
left: Math.max(viewportPadding, centeredLeft),
|
||||
top: 0,
|
||||
maxHeight: viewportHeight,
|
||||
};
|
||||
}
|
||||
|
||||
// If the opener element is missing (e.g., programmatic open), fallback to viewport origin
|
||||
if (!$element || $element.length === 0) {
|
||||
return {
|
||||
left: viewportPadding,
|
||||
top: viewportPadding,
|
||||
maxHeight: viewportHeight - viewportPadding * 2,
|
||||
};
|
||||
}
|
||||
|
||||
const offset = $element.offset();
|
||||
const openerTop = offset.top;
|
||||
const openerBottom = offset.top + $element.outerHeight();
|
||||
const clampedLeft = Math.max(
|
||||
viewportPadding,
|
||||
Math.min(offset.left, viewportWidth - popupWidth - viewportPadding),
|
||||
);
|
||||
|
||||
// Check if this is an admin panel edit popup
|
||||
const isAdminEditPopup = $element.hasClass('edit-user') ||
|
||||
$element.hasClass('edit-org') ||
|
||||
$element.hasClass('edit-team');
|
||||
|
||||
if (isAdminEditPopup) {
|
||||
// Center the popup horizontally and use full height
|
||||
const centeredLeft = (viewportWidth - popupWidth) / 2;
|
||||
|
||||
return {
|
||||
left: Math.max(viewportPadding, centeredLeft), // Ensure popup doesn't go off screen
|
||||
top: viewportPadding, // Start from top with small margin
|
||||
maxHeight: viewportHeight - viewportPadding * 2, // Use full height minus small margins
|
||||
};
|
||||
}
|
||||
|
||||
// Calculate available heights around the opener
|
||||
const spaceBelow = viewportHeight - openerBottom - viewportPadding;
|
||||
const spaceAbove = openerTop - viewportPadding;
|
||||
const preferBelow = spaceBelow >= spaceAbove;
|
||||
|
||||
// For language popup, don't use dynamic height to avoid overlapping board
|
||||
const isLanguagePopup = $element.hasClass('js-change-language');
|
||||
let availableHeight;
|
||||
|
||||
if (isLanguagePopup) {
|
||||
// For language popup, position content area below right vertical scrollbar
|
||||
const languageTop = openerBottom;
|
||||
const languageAvailable = Math.max(
|
||||
0,
|
||||
viewportHeight - languageTop - viewportPadding,
|
||||
);
|
||||
const calculatedHeight = Math.min(
|
||||
languageAvailable,
|
||||
viewportHeight * 0.5,
|
||||
); // Max 50% of viewport
|
||||
|
||||
return {
|
||||
left: clampedLeft,
|
||||
top: languageTop,
|
||||
maxHeight: Math.max(calculatedHeight, 0),
|
||||
};
|
||||
} else {
|
||||
// For other popups, choose the side with more space and keep popup fully in viewport.
|
||||
if (preferBelow) {
|
||||
availableHeight = Math.max(0, Math.min(spaceBelow, viewportHeight * 0.8));
|
||||
return {
|
||||
left: clampedLeft,
|
||||
top: openerBottom,
|
||||
maxHeight: availableHeight,
|
||||
};
|
||||
}
|
||||
|
||||
availableHeight = Math.max(0, Math.min(spaceAbove, viewportHeight * 0.8));
|
||||
const top = Math.max(viewportPadding, openerTop - availableHeight);
|
||||
|
||||
return {
|
||||
left: clampedLeft,
|
||||
top,
|
||||
maxHeight: availableHeight,
|
||||
};
|
||||
}
|
||||
return computePopupOffset({
|
||||
viewportWidth: $(window).width(),
|
||||
viewportHeight: $(window).height(),
|
||||
scrollTop: $(window).scrollTop() || 0,
|
||||
scrollLeft: $(window).scrollLeft() || 0,
|
||||
opener,
|
||||
popupName,
|
||||
isMiniScreen: Utils.isMiniScreen(),
|
||||
isAdminEditPopup:
|
||||
hasOpener &&
|
||||
($element.hasClass('edit-user') ||
|
||||
$element.hasClass('edit-org') ||
|
||||
$element.hasClass('edit-team')),
|
||||
isLanguagePopup: hasOpener && $element.hasClass('js-change-language'),
|
||||
viewportPadding: 10,
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
'use strict';
|
||||
|
||||
// Pure geometry for Popup._getOffset — extracted so the positioning math is
|
||||
// unit-testable without a DOM / Meteor (see tests/popupOffset.test.cjs).
|
||||
//
|
||||
// #5667 ("Problem when scrolling in a map with date fields"): a date-picker
|
||||
// calendar (due/start/end date, or a date custom field) opened low on the screen
|
||||
// appeared partly outside the visible area, and — because the pop-over is
|
||||
// `position: absolute` (document coordinates) — trying to scroll it into view
|
||||
// moved it along with the page, so the calendar could never be seen fully.
|
||||
//
|
||||
// Root cause: _getOffset computed the space above / below the opener (and the
|
||||
// clamped `top`) from the opener's DOCUMENT offset (`$el.offset()`) mixed with
|
||||
// the VIEWPORT height, ignoring the page scroll. On a scrolled page that placed
|
||||
// the anchored popup outside the visible viewport.
|
||||
//
|
||||
// Fix: do the space / clamp math in VIEWPORT coordinates (subtract
|
||||
// scrollTop/scrollLeft), then convert the chosen top/left back to DOCUMENT
|
||||
// coordinates (add the scroll back) for the absolute style. The popup box is then
|
||||
// always laid out fully within the visible viewport. When the page is not
|
||||
// scrolled (scrollTop === scrollLeft === 0) the output is identical to the
|
||||
// previous behaviour, so nothing regresses in the common case.
|
||||
|
||||
function computePopupOffset(params) {
|
||||
const {
|
||||
viewportWidth,
|
||||
viewportHeight,
|
||||
scrollTop = 0,
|
||||
scrollLeft = 0,
|
||||
// Opener document offset { top, left, height }, or null for a programmatic
|
||||
// open with no reference element.
|
||||
opener = null,
|
||||
popupName,
|
||||
isMiniScreen = false,
|
||||
isAdminEditPopup = false,
|
||||
isLanguagePopup = false,
|
||||
viewportPadding = 10,
|
||||
} = params;
|
||||
|
||||
if (isMiniScreen) return { left: 0, top: 0 };
|
||||
|
||||
// Actual popup width from CSS: min(380px, 55vw).
|
||||
const popupWidth = Math.min(380, viewportWidth * 0.55);
|
||||
|
||||
// Card details popup: docked to the top of the viewport (CSS also forces
|
||||
// top:0) so it overlays the header bars instead of opening from the minicard.
|
||||
if (popupName === 'cardDetailsPopup') {
|
||||
const cardWidth = Math.min(600, viewportWidth * 0.8);
|
||||
const centeredLeft = (viewportWidth - cardWidth) / 2;
|
||||
return {
|
||||
left: Math.max(viewportPadding, centeredLeft),
|
||||
top: scrollTop, // viewport top in document coords
|
||||
maxHeight: viewportHeight,
|
||||
};
|
||||
}
|
||||
|
||||
// No opener element: fall back to the top-left of the VISIBLE viewport.
|
||||
if (!opener) {
|
||||
return {
|
||||
left: viewportPadding + scrollLeft,
|
||||
top: viewportPadding + scrollTop,
|
||||
maxHeight: viewportHeight - viewportPadding * 2,
|
||||
};
|
||||
}
|
||||
|
||||
// Opener position in viewport coordinates (this is the #5667 fix: the previous
|
||||
// code used the raw document offset here).
|
||||
const openerTopVp = opener.top - scrollTop;
|
||||
const openerBottomVp = openerTopVp + opener.height;
|
||||
const openerLeftVp = opener.left - scrollLeft;
|
||||
|
||||
const clampedLeftVp = Math.max(
|
||||
viewportPadding,
|
||||
Math.min(openerLeftVp, viewportWidth - popupWidth - viewportPadding),
|
||||
);
|
||||
const clampedLeft = clampedLeftVp + scrollLeft;
|
||||
|
||||
// Admin panel edit popups: horizontally centered, anchored to the viewport top.
|
||||
if (isAdminEditPopup) {
|
||||
const centeredLeft = (viewportWidth - popupWidth) / 2;
|
||||
return {
|
||||
left: Math.max(viewportPadding, centeredLeft),
|
||||
top: viewportPadding + scrollTop,
|
||||
maxHeight: viewportHeight - viewportPadding * 2,
|
||||
};
|
||||
}
|
||||
|
||||
const spaceBelow = viewportHeight - openerBottomVp - viewportPadding;
|
||||
const spaceAbove = openerTopVp - viewportPadding;
|
||||
const preferBelow = spaceBelow >= spaceAbove;
|
||||
|
||||
// Language popup: fixed-ish height below the opener, capped at 50% viewport.
|
||||
if (isLanguagePopup) {
|
||||
const languageTopVp = openerBottomVp;
|
||||
const languageAvailable = Math.max(
|
||||
0,
|
||||
viewportHeight - languageTopVp - viewportPadding,
|
||||
);
|
||||
const calculatedHeight = Math.min(languageAvailable, viewportHeight * 0.5);
|
||||
return {
|
||||
left: clampedLeft,
|
||||
top: languageTopVp + scrollTop,
|
||||
maxHeight: Math.max(calculatedHeight, 0),
|
||||
};
|
||||
}
|
||||
|
||||
// Other popups: open on the side with more room and stay fully in the viewport.
|
||||
if (preferBelow) {
|
||||
const maxHeight = Math.max(0, Math.min(spaceBelow, viewportHeight * 0.8));
|
||||
return { left: clampedLeft, top: openerBottomVp + scrollTop, maxHeight };
|
||||
}
|
||||
|
||||
const maxHeight = Math.max(0, Math.min(spaceAbove, viewportHeight * 0.8));
|
||||
const topVp = Math.max(viewportPadding, openerTopVp - maxHeight);
|
||||
return { left: clampedLeft, top: topVp + scrollTop, maxHeight };
|
||||
}
|
||||
|
||||
module.exports = { computePopupOffset };
|
||||
+16
-6
@@ -4,16 +4,26 @@ import { Tracker } from 'meteor/tracker';
|
||||
import { findWhere, where, uniqBy, groupBy, indexBy, debounce, once } from '/imports/lib/collectionHelpers';
|
||||
import Settings from '/models/settings';
|
||||
import Users from '/models/users';
|
||||
import { computeBoardBackground } from '/models/lib/boardBackground';
|
||||
|
||||
export const Utils = {
|
||||
async setBackgroundImage(url) {
|
||||
const currentBoard = Utils.getCurrentBoard();
|
||||
if (currentBoard.backgroundImageURL !== undefined) {
|
||||
$(".board-wrapper").css({"background":"url(" + currentBoard.backgroundImageURL + ")","background-size":"cover"});
|
||||
$(".swimlane,.swimlane .list,.swimlane .list .list-body,.swimlane .list:first-child .list-body").css({"background-color":"transparent"});
|
||||
$(".minicard").css({"opacity": "0.9"});
|
||||
} else if (currentBoard["background-color"]) {
|
||||
await currentBoard.setColor(currentBoard["background-color"]);
|
||||
const bg = computeBoardBackground(currentBoard);
|
||||
const swimlaneSelector =
|
||||
".swimlane,.swimlane .list,.swimlane .list .list-body,.swimlane .list:first-child .list-body";
|
||||
if (bg.type === "image") {
|
||||
$(".board-wrapper").css({ "background": "url(" + bg.url + ")", "background-size": "cover" });
|
||||
$(swimlaneSelector).css({ "background-color": "transparent" });
|
||||
$(".minicard").css({ "opacity": "0.9" });
|
||||
} else {
|
||||
// #4978: clear any inline background left over from a previously shown
|
||||
// board, so switching image -> color or image -> plain (e.g. via the
|
||||
// favorites bar) actually removes the old image. The board's color, when
|
||||
// any, is applied reactively via the `.board-wrapper` colorClass.
|
||||
$(".board-wrapper").css({ "background": "", "background-size": "" });
|
||||
$(swimlaneSelector).css({ "background-color": "" });
|
||||
$(".minicard").css({ "opacity": "" });
|
||||
}
|
||||
},
|
||||
/** returns the current board id
|
||||
|
||||
@@ -300,4 +300,19 @@ if (Meteor.isServer) {
|
||||
Accounts.sendResetPasswordEmail,
|
||||
(code, message) => new Meteor.Error(code, message),
|
||||
);
|
||||
|
||||
// #5672: "Internal Server Error When Signing Up Despite Successful Account
|
||||
// Creation". useraccounts' ATCreateUserServer creates the account and then
|
||||
// calls Accounts.sendVerificationEmail(); when SMTP is not configured that
|
||||
// send throws AFTER the user is inserted, so the createUser method returns a
|
||||
// raw HTTP 500 even though the account exists and can sign in. The
|
||||
// verification email is best-effort at sign-up, so swallow + log a transport
|
||||
// failure (registration then completes and redirects to sign-in). An
|
||||
// "already verified" error is re-thrown so ATResendVerificationEmail still
|
||||
// reports it. Unit-tested in tests/verificationEmail.test.cjs.
|
||||
const { wrapSendVerificationEmail } = require('/server/lib/verificationEmail');
|
||||
Accounts.sendVerificationEmail = wrapSendVerificationEmail(
|
||||
Accounts.sendVerificationEmail,
|
||||
message => console.warn(message),
|
||||
);
|
||||
}
|
||||
@@ -10,7 +10,7 @@ This is without container (without Docker or Snap).
|
||||
|
||||
Right click and download files 1-4:
|
||||
|
||||
1. [wekan-9.74-win64.zip](https://github.com/wekan/wekan/releases/download/v9.74/wekan-9.74-win64.zip) or newest available at https://github.com/wekan/wekan/releases/
|
||||
1. [wekan-9.82-win64.zip](https://github.com/wekan/wekan/releases/download/v9.82/wekan-9.82-win64.zip) or newest available at https://github.com/wekan/wekan/releases/
|
||||
|
||||
2. [node.exe](https://nodejs.org/dist/latest-v24.x/win-x64/node.exe)
|
||||
|
||||
@@ -22,7 +22,7 @@ Right click and download files 1-4:
|
||||
|
||||
6. Double click `mongodb-windows-x86_64-7.0.34-signed.msi` . In installer, uncheck downloading MongoDB compass.
|
||||
|
||||
7. Unzip `wekan-9.74-win64.zip` , inside it is directory `bundle`, to it copy other files:
|
||||
7. Unzip `wekan-9.82-win64.zip` , inside it is directory `bundle`, to it copy other files:
|
||||
|
||||
```
|
||||
bundle (directory)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Menerima",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Cipta ruangan",
|
||||
"createCustomFieldPopup-title": "Cipta ruangan",
|
||||
"current": "sekarang",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "Tidak boleh undur semula. Ianya akan menghapuskan ruangan khas daripada semua kad dan padamkan sejarahnya.",
|
||||
"custom-field-checkbox": "kotak semak",
|
||||
"custom-field-currency": "Matawang",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "CSV anda(Nilai yang dipisahkan koma)/TSV (Nilai yang dipisahkan tab) tidak termasuk informasi yang tepat dalam format yang benar",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Daftar ini tidak ada",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Nama pengguna ini tidak ada",
|
||||
"error-user-notAllowSelf": "Anda tidak bisa mengundang diri sendiri",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Nama Lengkap",
|
||||
"header-logo-title": "Kembali ke laman panel anda",
|
||||
"show-activities": "Tunjukkan Aktiviti",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Buat Panel",
|
||||
"home": "Beranda",
|
||||
"import": "Impor",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Picu",
|
||||
"r-action": "Tindakan",
|
||||
"r-when-a-card": "Ketika kartu",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Aanvaar",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Skep veld",
|
||||
"createCustomFieldPopup-title": "Skep veld",
|
||||
"current": "huidige",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "Daar is geen ongedaan maak nie. Dit sal hierdie pasgemaakte veld van alle kaarte verwyder en sy geskiedenis vernietig.",
|
||||
"custom-field-checkbox": "Merkblokkie",
|
||||
"custom-field-currency": "Geldeenheid",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Jou CSV (Comma Separated Values)/TSV (Tab Separated Values) sluit nie die korrekte inligting in die korrekte formaat in nie",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Hierdie lys bestaan nie",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Hierdie gebruiker bestaan nie",
|
||||
"error-user-notAllowSelf": "Jy kan nie jouself nooi nie",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Volle Naam",
|
||||
"header-logo-title": "Gaan terug na jou bordbladsy.",
|
||||
"show-activities": "Wys aktiwiteite",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Skep bord",
|
||||
"home": "Tuis",
|
||||
"import": "Invoer",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Sneller",
|
||||
"r-action": "Aksie",
|
||||
"r-when-a-card": "Wanneer 'n kaart",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Aanvaar",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Skep veld",
|
||||
"createCustomFieldPopup-title": "Skep veld",
|
||||
"current": "huidige",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "Daar is geen ongedaan maak nie. Dit sal hierdie pasgemaakte veld van alle kaarte verwyder en sy geskiedenis vernietig.",
|
||||
"custom-field-checkbox": "Merkblokkie",
|
||||
"custom-field-currency": "Geldeenheid",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Jou CSV (Comma Separated Values)/TSV (Tab Separated Values) sluit nie die korrekte inligting in die korrekte formaat in nie",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Hierdie lys bestaan nie",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Hierdie gebruiker bestaan nie",
|
||||
"error-user-notAllowSelf": "Jy kan nie jouself nooi nie",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Volle Naam",
|
||||
"header-logo-title": "Gaan terug na jou bordbladsy.",
|
||||
"show-activities": "Wys aktiwiteite",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Skep bord",
|
||||
"home": "Tuis",
|
||||
"import": "Invoer",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Sneller",
|
||||
"r-action": "Aksie",
|
||||
"r-when-a-card": "Wanneer 'n kaart",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "قبول",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "انشاء حقل",
|
||||
"createCustomFieldPopup-title": "انشاء حقل",
|
||||
"current": "الحالي",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "این اقدام فیلد سفارشی را بهمراه تمامی تاریخچه آن از کارت ها پاک می کند و برگشت پذیر نمی باشد",
|
||||
"custom-field-checkbox": "جعبه انتخابی",
|
||||
"custom-field-currency": "عملة",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "لا يتضمن ملف CSV (القيم المفصولة بفواصل)/TSV (القيم المفصولة بعلامات التبويب) الخاص بك المعلومات الصحيحة بالتنسيق الصحيح",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "این لیست موجود نیست",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "این کاربر وجود ندارد",
|
||||
"error-user-notAllowSelf": "لا يمكنك دعوة نفسك",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "الإسم الكامل",
|
||||
"header-logo-title": "الرجوع إلى صفحة اللوحات",
|
||||
"show-activities": "عرض الأنشطة",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "إنشاء لوحة",
|
||||
"home": "الرئيسية",
|
||||
"import": "وارد کردن",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "تریگر",
|
||||
"r-action": "عملیات",
|
||||
"r-when-a-card": "زمانی که کارت",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "قبول",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "انشاء حقل",
|
||||
"createCustomFieldPopup-title": "انشاء حقل",
|
||||
"current": "الحالي",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "این اقدام فیلد سفارشی را بهمراه تمامی تاریخچه آن از کارت ها پاک می کند و برگشت پذیر نمی باشد",
|
||||
"custom-field-checkbox": "جعبه انتخابی",
|
||||
"custom-field-currency": "عملة",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "لا يتضمن ملف CSV (القيم المفصولة بفواصل)/TSV (القيم المفصولة بعلامات التبويب) الخاص بك المعلومات الصحيحة بالتنسيق الصحيح",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "این لیست موجود نیست",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "این کاربر وجود ندارد",
|
||||
"error-user-notAllowSelf": "لا يمكنك دعوة نفسك",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "الإسم الكامل",
|
||||
"header-logo-title": "الرجوع إلى صفحة اللوحات",
|
||||
"show-activities": "عرض الأنشطة",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "إنشاء لوحة",
|
||||
"home": "الرئيسية",
|
||||
"import": "وارد کردن",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "تریگر",
|
||||
"r-action": "عملیات",
|
||||
"r-when-a-card": "زمانی که کارت",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "قبول",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "انشاء حقل",
|
||||
"createCustomFieldPopup-title": "انشاء حقل",
|
||||
"current": "الحالي",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "این اقدام فیلد سفارشی را بهمراه تمامی تاریخچه آن از کارت ها پاک می کند و برگشت پذیر نمی باشد",
|
||||
"custom-field-checkbox": "جعبه انتخابی",
|
||||
"custom-field-currency": "عملة",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "لا يتضمن ملف CSV (القيم المفصولة بفواصل)/TSV (القيم المفصولة بعلامات التبويب) الخاص بك المعلومات الصحيحة بالتنسيق الصحيح",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "این لیست موجود نیست",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "این کاربر وجود ندارد",
|
||||
"error-user-notAllowSelf": "لا يمكنك دعوة نفسك",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "الإسم الكامل",
|
||||
"header-logo-title": "الرجوع إلى صفحة اللوحات",
|
||||
"show-activities": "عرض الأنشطة",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "إنشاء لوحة",
|
||||
"home": "الرئيسية",
|
||||
"import": "وارد کردن",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "تریگر",
|
||||
"r-action": "عملیات",
|
||||
"r-when-a-card": "زمانی که کارت",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "قبول",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "انشاء حقل",
|
||||
"createCustomFieldPopup-title": "انشاء حقل",
|
||||
"current": "الحالي",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "این اقدام فیلد سفارشی را بهمراه تمامی تاریخچه آن از کارت ها پاک می کند و برگشت پذیر نمی باشد",
|
||||
"custom-field-checkbox": "جعبه انتخابی",
|
||||
"custom-field-currency": "عملة",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "لا يتضمن ملف CSV (القيم المفصولة بفواصل)/TSV (القيم المفصولة بعلامات التبويب) الخاص بك المعلومات الصحيحة بالتنسيق الصحيح",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "این لیست موجود نیست",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "این کاربر وجود ندارد",
|
||||
"error-user-notAllowSelf": "لا يمكنك دعوة نفسك",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "الإسم الكامل",
|
||||
"header-logo-title": "الرجوع إلى صفحة اللوحات",
|
||||
"show-activities": "عرض الأنشطة",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "إنشاء لوحة",
|
||||
"home": "الرئيسية",
|
||||
"import": "وارد کردن",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "تریگر",
|
||||
"r-action": "عملیات",
|
||||
"r-when-a-card": "زمانی که کارت",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Aceptar",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Crear un campo",
|
||||
"createCustomFieldPopup-title": "Crear un campo",
|
||||
"current": "actual",
|
||||
"custom-color": "Custom color",
|
||||
"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-currency": "Moneda",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Su CSV(Valores separados por coma)/TSV(Valores separados por tab) no incluyen la información apropiada en el formato correcto",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "La lista no existe",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "El usuario no existe",
|
||||
"error-user-notAllowSelf": "No puedes invitarte a ti mismo",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Nombre completo",
|
||||
"header-logo-title": "Volver a tu página de tableros",
|
||||
"show-activities": "Mostrar actividades",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Crear tablero",
|
||||
"home": "Inicio",
|
||||
"import": "Importar",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "disparador",
|
||||
"r-action": "acción",
|
||||
"r-when-a-card": "Cuando una tarjeta",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Qəbul edin",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Sahə yaradın",
|
||||
"createCustomFieldPopup-title": "Sahə yaradın",
|
||||
"current": "cari",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "Geri qaytarma yoxdur. Bu, bu fərdi sahəni bütün kartlardan siləcək və onun tarixçəsini məhv edəcək.",
|
||||
"custom-field-checkbox": "Yoxlama qutusu",
|
||||
"custom-field-currency": "Valyuta",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Sizin CSV(Vergüllə Ayrılmış Dəyərlər)/TSV (Vergüllə Ayrılmış Dəyərlər) düzgün formatda düzgün məlumatları ehtiva etmir",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Bu siyahı mövcud deyil",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Bu istifadəçi mövcud deyil",
|
||||
"error-user-notAllowSelf": "Özünüzü dəvət edə bilməzsiniz",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Tam adı",
|
||||
"header-logo-title": "Lövhələr səhifəsinə qayıdın.",
|
||||
"show-activities": "Fəaliyyətləri göstərin",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Şura yaradın",
|
||||
"home": "Ev",
|
||||
"import": "İdxal",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Tətik",
|
||||
"r-action": "Fəaliyyət",
|
||||
"r-when-a-card": "Bir kart olanda",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Qəbul edin",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Sahə yaradın",
|
||||
"createCustomFieldPopup-title": "Sahə yaradın",
|
||||
"current": "cari",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "Geri qaytarma yoxdur. Bu, bu fərdi sahəni bütün kartlardan siləcək və onun tarixçəsini məhv edəcək.",
|
||||
"custom-field-checkbox": "Yoxlama qutusu",
|
||||
"custom-field-currency": "Valyuta",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Sizin CSV(Vergüllə Ayrılmış Dəyərlər)/TSV (Vergüllə Ayrılmış Dəyərlər) düzgün formatda düzgün məlumatları ehtiva etmir",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Bu siyahı mövcud deyil",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Bu istifadəçi mövcud deyil",
|
||||
"error-user-notAllowSelf": "Özünüzü dəvət edə bilməzsiniz",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Tam adı",
|
||||
"header-logo-title": "Lövhələr səhifəsinə qayıdın.",
|
||||
"show-activities": "Fəaliyyətləri göstərin",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Şura yaradın",
|
||||
"home": "Ev",
|
||||
"import": "İdxal",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Tətik",
|
||||
"r-action": "Fəaliyyət",
|
||||
"r-when-a-card": "Bir kart olanda",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Qəbul edin",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Sahə yaradın",
|
||||
"createCustomFieldPopup-title": "Sahə yaradın",
|
||||
"current": "cari",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "Geri qaytarma yoxdur. Bu, bu fərdi sahəni bütün kartlardan siləcək və onun tarixçəsini məhv edəcək.",
|
||||
"custom-field-checkbox": "Yoxlama qutusu",
|
||||
"custom-field-currency": "Valyuta",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Sizin CSV(Vergüllə Ayrılmış Dəyərlər)/TSV (Vergüllə Ayrılmış Dəyərlər) düzgün formatda düzgün məlumatları ehtiva etmir",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Bu siyahı mövcud deyil",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Bu istifadəçi mövcud deyil",
|
||||
"error-user-notAllowSelf": "Özünüzü dəvət edə bilməzsiniz",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Tam adı",
|
||||
"header-logo-title": "Lövhələr səhifəsinə qayıdın.",
|
||||
"show-activities": "Fəaliyyətləri göstərin",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Şura yaradın",
|
||||
"home": "Ev",
|
||||
"import": "İdxal",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Tətik",
|
||||
"r-action": "Fəaliyyət",
|
||||
"r-when-a-card": "Bir kart olanda",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Accept",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Create Field",
|
||||
"createCustomFieldPopup-title": "Create Field",
|
||||
"current": "current",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
|
||||
"custom-field-checkbox": "Checkbox",
|
||||
"custom-field-currency": "Currency",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format ",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "This list does not exist",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "This user does not exist",
|
||||
"error-user-notAllowSelf": "You can not invite yourself",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Full Name",
|
||||
"header-logo-title": "Go back to your boards page.",
|
||||
"show-activities": "Show Activities",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Create Board",
|
||||
"home": "Home",
|
||||
"import": "Import",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Trigger",
|
||||
"r-action": "Action",
|
||||
"r-when-a-card": "When a card",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Приемам",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Създай Поле",
|
||||
"createCustomFieldPopup-title": "Създай Поле",
|
||||
"current": "сегашен",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "Опозив ове радње неће бити могућ. Радњом се уклања ова придружена рубрика из свих предмета и уништива њена претходна историја употребе.",
|
||||
"custom-field-checkbox": "Чекбокс",
|
||||
"custom-field-currency": "Валута",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Ваш CSV(Вредности раздвојене зарезом)/TSV (Вредности раздвојене табулатором) не укључује исправну информацију у предвиђеном облику",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Този списък не съществува",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Този потребител не съществува",
|
||||
"error-user-notAllowSelf": "Не можете да поканите себе си",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Име",
|
||||
"header-logo-title": "Назад към страницата с Вашите табла.",
|
||||
"show-activities": "Писани записник",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Създай Табло",
|
||||
"home": "Начало",
|
||||
"import": "Импорт",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Добави спусък",
|
||||
"r-action": "Действие",
|
||||
"r-when-a-card": "Когато карта",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Asantiñ",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Créer un champ personnalisé",
|
||||
"createCustomFieldPopup-title": "Créer un champ personnalisé",
|
||||
"current": "actuel",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "Cette action est irréversible. Elle supprimera ce champ personnalisé de toutes les cartes et détruira son historique.",
|
||||
"custom-field-checkbox": "Case à cocher",
|
||||
"custom-field-currency": "Devise",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Votre fichier CSV (valeurs séparées par des virgules) / TSV (valeurs séparées par des tabulations) ne contient pas d'informations au bon format",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Cette liste n'existe pas",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Cet utilisateur n'existe pas",
|
||||
"error-user-notAllowSelf": "Vous ne pouvez pas vous inviter vous-même",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Nom complet",
|
||||
"header-logo-title": "Retourner à la page des tableaux",
|
||||
"show-activities": "Afficher les activités",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Créer un tableau",
|
||||
"home": "Accueil",
|
||||
"import": "Importer",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Déclencheur",
|
||||
"r-action": "Action",
|
||||
"r-when-a-card": "Quand une carte",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Accepta",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Crear campament",
|
||||
"createCustomFieldPopup-title": "Crear campament",
|
||||
"current": "Real",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "No hi ha cap desfer. Això eliminarà aquest camp personalitzat de totes les cartes i destruirà el seu historial.",
|
||||
"custom-field-checkbox": "casella de selecció",
|
||||
"custom-field-currency": "Moneda",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "El teu CSV no inclou la informació en el format correcte.",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "La llista no existeix",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "L'usuari no existeix",
|
||||
"error-user-notAllowSelf": "No et pots convidar a la teva matriu",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Nom complet",
|
||||
"header-logo-title": "Torna a la teva pàgina de taulers",
|
||||
"show-activities": "Show Activities",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Crea tauler",
|
||||
"home": "Inici",
|
||||
"import": "importa",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Disparador",
|
||||
"r-action": "Acció",
|
||||
"r-when-a-card": "Quan una fitxa",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Acceptar",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Crear campament",
|
||||
"createCustomFieldPopup-title": "Crear campament",
|
||||
"current": "Real",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "No hi ha cap desfer. Això eliminarà aquest camp personalitzat de totes les cartes i destruirà el seu historial.",
|
||||
"custom-field-checkbox": "casella de selecció",
|
||||
"custom-field-currency": "Moneda",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "El teu CSV no inclou la informació en el format correcte.",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "La llista no existeix",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "L'usuari no existeix",
|
||||
"error-user-notAllowSelf": "No et pots convidar a la teva matriu",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Nom complet",
|
||||
"header-logo-title": "Torna a la teva pàgina de taulers",
|
||||
"show-activities": "Mostrar actividades",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Crea tauler",
|
||||
"home": "Inici",
|
||||
"import": "importa",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Disparador",
|
||||
"r-action": "Acció",
|
||||
"r-when-a-card": "Quan una fitxa",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Accepta",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Crear campament",
|
||||
"createCustomFieldPopup-title": "Crear campament",
|
||||
"current": "Real",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "No hi ha cap desfer. Això eliminarà aquest camp personalitzat de totes les cartes i destruirà el seu historial.",
|
||||
"custom-field-checkbox": "casella de selecció",
|
||||
"custom-field-currency": "Moneda",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "El teu CSV no inclou la informació en el format correcte.",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "La llista no existeix",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "L'usuari no existeix",
|
||||
"error-user-notAllowSelf": "No et pots convidar a la teva matriu",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Nom complet",
|
||||
"header-logo-title": "Torna a la teva pàgina de taulers",
|
||||
"show-activities": "Show Activities",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Crea tauler",
|
||||
"home": "Inici",
|
||||
"import": "importa",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Disparador",
|
||||
"r-action": "Acció",
|
||||
"r-when-a-card": "Quan una fitxa",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "接受",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "创建字段",
|
||||
"createCustomFieldPopup-title": "创建字段",
|
||||
"current": "当前的",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "无法撤消。这将从所有卡中删除此自定义字段并销毁其历史记录。",
|
||||
"custom-field-checkbox": "复选框",
|
||||
"custom-field-currency": "货币",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "您的 CSV(逗号分隔值)/TSV(制表符分隔值)未包含格式正确的正确信息",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "该列表不存在",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "该用户不存在",
|
||||
"error-user-notAllowSelf": "您不能邀请自己",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "姓名",
|
||||
"header-logo-title": "返回您的图板页面。",
|
||||
"show-activities": "展会活动",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "创建板",
|
||||
"home": "家",
|
||||
"import": "进口",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "扳机",
|
||||
"r-action": "行动",
|
||||
"r-when-a-card": "当一张卡",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Přijmout",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Vytvořit pole",
|
||||
"createCustomFieldPopup-title": "Vytvořit pole",
|
||||
"current": "Aktuální",
|
||||
"custom-color": "Custom color",
|
||||
"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-currency": "Měna",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Váš CSV (Comma Separated Values)/TSV (Tab Separated Values) neobsahuje správné informace ve správném formátu.",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Tento sloupec ;neexistuje",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Tento uživatel neexistuje",
|
||||
"error-user-notAllowSelf": "Nemůžeš pozvat sám sebe",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Celé jméno",
|
||||
"header-logo-title": "Jit zpět na stránku s tably.",
|
||||
"show-activities": "Show Activities",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Vytvořit tablo",
|
||||
"home": "Domů",
|
||||
"import": "Import",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Spouštěč",
|
||||
"r-action": "Akce",
|
||||
"r-when-a-card": "Pokud karta",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Přijmout",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Vytvořit pole",
|
||||
"createCustomFieldPopup-title": "Vytvořit pole",
|
||||
"current": "Aktuální",
|
||||
"custom-color": "Custom color",
|
||||
"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-currency": "Měna",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Váš CSV (Comma Separated Values)/TSV (Tab Separated Values) neobsahuje správné informace ve správném formátu.",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Tento sloupec ;neexistuje",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Tento uživatel neexistuje",
|
||||
"error-user-notAllowSelf": "Nemůžeš pozvat sám sebe",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Celé jméno",
|
||||
"header-logo-title": "Jit zpět na stránku s tably.",
|
||||
"show-activities": "Show Activities",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Vytvořit tablo",
|
||||
"home": "Domů",
|
||||
"import": "Import",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Spouštěč",
|
||||
"r-action": "Akce",
|
||||
"r-when-a-card": "Pokud karta",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Derbyn",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Creu Maes",
|
||||
"createCustomFieldPopup-title": "Creu Maes",
|
||||
"current": "presennol",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "Does dim dadwneud. Bydd hyn yn dileu'r maes arfer hwn o bob cerdyn ac yn dinistrio ei hanes.",
|
||||
"custom-field-checkbox": "Blwch ticio",
|
||||
"custom-field-currency": "Arian cyfred",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Nid yw eich CSV(Comma Separated Values)/TSV (Tab Separated Values) yn cynnwys y wybodaeth gywir yn y fformat cywir",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Nid yw'r rhestr hon yn bodoli",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Nid yw'r defnyddiwr hwn yn bodoli",
|
||||
"error-user-notAllowSelf": "Ni allwch wahodd eich hun",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Enw Llawn",
|
||||
"header-logo-title": "Ewch yn ôl i dudalen eich byrddau.",
|
||||
"show-activities": "Gweithgareddau Sioe",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Creu Bwrdd",
|
||||
"home": "Cartref",
|
||||
"import": "Mewnforio",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Sbardun",
|
||||
"r-action": "Gweithred",
|
||||
"r-when-a-card": "Pan fydd cerdyn",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Derbyn",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Creu Maes",
|
||||
"createCustomFieldPopup-title": "Creu Maes",
|
||||
"current": "presennol",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "Does dim dadwneud. Bydd hyn yn dileu'r maes arfer hwn o bob cerdyn ac yn dinistrio ei hanes.",
|
||||
"custom-field-checkbox": "Blwch ticio",
|
||||
"custom-field-currency": "Arian cyfred",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Nid yw eich CSV(Comma Separated Values)/TSV (Tab Separated Values) yn cynnwys y wybodaeth gywir yn y fformat cywir",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Nid yw'r rhestr hon yn bodoli",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Nid yw'r defnyddiwr hwn yn bodoli",
|
||||
"error-user-notAllowSelf": "Ni allwch wahodd eich hun",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Enw Llawn",
|
||||
"header-logo-title": "Ewch yn ôl i dudalen eich byrddau.",
|
||||
"show-activities": "Gweithgareddau Sioe",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Creu Bwrdd",
|
||||
"home": "Cartref",
|
||||
"import": "Mewnforio",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Sbardun",
|
||||
"r-action": "Gweithred",
|
||||
"r-when-a-card": "Pan fydd cerdyn",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Accepter",
|
||||
"activity-changedTitle": "ændrede titel til %s af %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "slettede kortet __card__ fra listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
|
||||
"act-removeBoard": "slettede tavlen __board__",
|
||||
"act-removeList": "slettede listen __list__ fra tavlen __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Opret felt",
|
||||
"createCustomFieldPopup-title": "Opret felt",
|
||||
"current": "nuværende",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "Du kan ikke fortryde handlingen. Dette vil fjerne dette brugerdefinerede felt fra alle kort og tilintetgøre dens historik.",
|
||||
"custom-field-checkbox": "Afkrydsningsfelt",
|
||||
"custom-field-currency": "Valuta",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Din CSV (Comma Separated Values)/TSV (Tab Separated Values) indeholder ikke gyldig information i korrekt format",
|
||||
"error-import-empty-board": "Denne eksport indeholder intet tavleindhold (ingen svømmebaner, lister eller kort). Den kan være oprettet af en ældre WeKan-version med en kendt eksportfejl. Eksporter tavlen igen med den aktuelle version, og importer den nye fil.",
|
||||
"error-list-doesNotExist": "Listen findes ikke",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Brugeren findes ikke",
|
||||
"error-user-notAllowSelf": "Du kan ikke invitere dig selv",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Fuldt navn",
|
||||
"header-logo-title": "Gå tilbage til siden med dine tavler",
|
||||
"show-activities": "Visa aktiviteter",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Opret tavle",
|
||||
"home": "Hjem",
|
||||
"import": "Importér",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Træk en trigger og en handling ind i byggeren, og tilføj derefter reglen. Træk en handling over på en eksisterende regel for at ændre, hvad den gør.",
|
||||
"r-drop-trigger": "træk en udløser hertil",
|
||||
"r-drop-action": "træk en handling hertil",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Eksporter regler til JSON",
|
||||
"r-export-csv": "Eksporter regler til CSV",
|
||||
"r-import-json": "Importer regler fra JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Markér kort som ikke fuldført",
|
||||
"r-move-all-cards": "Flyt alle kort i en liste",
|
||||
"r-set-date-relative": "Angiv dato i forhold til dags dato",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Udløser",
|
||||
"r-action": "Handling",
|
||||
"r-when-a-card": "Når et kort",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Akzeptieren",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Feld erstellen",
|
||||
"createCustomFieldPopup-title": "Feld erstellen",
|
||||
"current": "aktuell",
|
||||
"custom-color": "Custom color",
|
||||
"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-currency": "Währung",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Deine CSV(Kommatgetrennte Werte)/TSV (Tab getrennte Werte) enthält keine korrekten Informationen im geforderten Format ",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Diese Liste existiert nicht",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Dieser Nutzer existiert nicht",
|
||||
"error-user-notAllowSelf": "Sie können sich nicht selbst einladen.",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Vollständiger Name",
|
||||
"header-logo-title": "Zurück zur Board Seite.",
|
||||
"show-activities": "Aktivitäten anzeigen",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Board erstellen",
|
||||
"home": "Home",
|
||||
"import": "Importieren",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Auslöser",
|
||||
"r-action": "Aktion",
|
||||
"r-when-a-card": "Wenn Karte",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Akzeptieren",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Feld erstellen",
|
||||
"createCustomFieldPopup-title": "Feld erstellen",
|
||||
"current": "aktuell",
|
||||
"custom-color": "Custom color",
|
||||
"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-currency": "Währung",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Deine CSV(Kommatgetrennte Werte)/TSV (Tab getrennte Werte) enthält keine korrekten Informationen im geforderten Format ",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Diese Liste existiert nicht",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Dieser Nutzer existiert nicht",
|
||||
"error-user-notAllowSelf": "Sie können sich nicht selbst einladen.",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Vollständiger Name",
|
||||
"header-logo-title": "Zurück zur Board Seite.",
|
||||
"show-activities": "Aktivitäten anzeigen",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Board erstellen",
|
||||
"home": "Home",
|
||||
"import": "Importieren",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Auslöser",
|
||||
"r-action": "Aktion",
|
||||
"r-when-a-card": "Wenn Karte",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Akzeptieren",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Feld erstellen",
|
||||
"createCustomFieldPopup-title": "Feld erstellen",
|
||||
"current": "aktuell",
|
||||
"custom-color": "Custom color",
|
||||
"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-currency": "Währung",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Deine CSV(Kommatgetrennte Werte)/TSV (Tab getrennte Werte) enthält keine korrekten Informationen im geforderten Format ",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Diese Liste existiert nicht",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Dieser Nutzer existiert nicht",
|
||||
"error-user-notAllowSelf": "Sie können sich nicht selbst einladen.",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Vollständiger Name",
|
||||
"header-logo-title": "Zurück zur Board Seite.",
|
||||
"show-activities": "Aktivitäten anzeigen",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Board erstellen",
|
||||
"home": "Home",
|
||||
"import": "Importieren",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Auslöser",
|
||||
"r-action": "Aktion",
|
||||
"r-when-a-card": "Wenn Karte",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Akzeptieren",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Feld erstellen",
|
||||
"createCustomFieldPopup-title": "Feld erstellen",
|
||||
"current": "aktuell",
|
||||
"custom-color": "Custom color",
|
||||
"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-currency": "Währung",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Deine CSV(Kommatgetrennte Werte)/TSV (Tab getrennte Werte) enthält keine korrekten Informationen im geforderten Format ",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Diese Liste existiert nicht",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Dieser Nutzer existiert nicht",
|
||||
"error-user-notAllowSelf": "Sie können sich nicht selbst einladen.",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Vollständiger Name",
|
||||
"header-logo-title": "Zurück zur Board Seite.",
|
||||
"show-activities": "Aktivitäten anzeigen",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Board erstellen",
|
||||
"home": "Home",
|
||||
"import": "Importieren",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Auslöser",
|
||||
"r-action": "Aktion",
|
||||
"r-when-a-card": "Wenn Karte",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Αποδοχή",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Δημιουργία Πεδίου",
|
||||
"createCustomFieldPopup-title": "Δημιουργία Πεδίου",
|
||||
"current": "τρέχων",
|
||||
"custom-color": "Custom color",
|
||||
"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-currency": "Νόμισμα",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Il tuo file CSV (Comma Separated Values) / TSV (Tab Separated Values) non contiene le giuste informazioni nel formato corretto",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Η λίστα δεν υπάρχει",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Ο χρήστης δεν υπάρχει",
|
||||
"error-user-notAllowSelf": "Δε μπορείτε να αυτοπροσκληθείτε",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Πλήρες Όνομα",
|
||||
"header-logo-title": "Επιστροφή στη σελίδα των πινάκων σας.",
|
||||
"show-activities": "Mostra Attività",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Δημιουργία Πίνακα",
|
||||
"home": "Αρχική",
|
||||
"import": "Εισαγωγή",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Déclencheur",
|
||||
"r-action": "Ενέργεια",
|
||||
"r-when-a-card": "Όταν μία κάρτα",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Αποδοχή",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Δημιουργία Πεδίου",
|
||||
"createCustomFieldPopup-title": "Δημιουργία Πεδίου",
|
||||
"current": "τρέχων",
|
||||
"custom-color": "Custom color",
|
||||
"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-currency": "Νόμισμα",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Il tuo file CSV (Comma Separated Values) / TSV (Tab Separated Values) non contiene le giuste informazioni nel formato corretto",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Η λίστα δεν υπάρχει",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Ο χρήστης δεν υπάρχει",
|
||||
"error-user-notAllowSelf": "Δε μπορείτε να αυτοπροσκληθείτε",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Πλήρες Όνομα",
|
||||
"header-logo-title": "Επιστροφή στη σελίδα των πινάκων σας.",
|
||||
"show-activities": "Mostra Attività",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Δημιουργία Πίνακα",
|
||||
"home": "Αρχική",
|
||||
"import": "Εισαγωγή",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Déclencheur",
|
||||
"r-action": "Ενέργεια",
|
||||
"r-when-a-card": "Όταν μία κάρτα",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Accept",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Create Field",
|
||||
"createCustomFieldPopup-title": "Create Field",
|
||||
"current": "current",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
|
||||
"custom-field-checkbox": "Checkbox",
|
||||
"custom-field-currency": "Currency",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format ",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "This list does not exist",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "This user does not exist",
|
||||
"error-user-notAllowSelf": "You can not invite yourself",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Full Name",
|
||||
"header-logo-title": "Go back to your boards page.",
|
||||
"show-activities": "Show Activities",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Create Board",
|
||||
"home": "Home",
|
||||
"import": "Import",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Trigger",
|
||||
"r-action": "Action",
|
||||
"r-when-a-card": "When a card",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Accept",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Create Field",
|
||||
"createCustomFieldPopup-title": "Create Field",
|
||||
"current": "current",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
|
||||
"custom-field-checkbox": "Checkbox",
|
||||
"custom-field-currency": "Currency",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format ",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "This list does not exist",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "This user does not exist",
|
||||
"error-user-notAllowSelf": "You can not invite yourself",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Full Name",
|
||||
"header-logo-title": "Go back to your boards page.",
|
||||
"show-activities": "Show Activities",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Create Board",
|
||||
"home": "Home",
|
||||
"import": "Import",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Trigger",
|
||||
"r-action": "Action",
|
||||
"r-when-a-card": "When a card",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Accept",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Create Field",
|
||||
"createCustomFieldPopup-title": "Create Field",
|
||||
"current": "current",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
|
||||
"custom-field-checkbox": "Checkbox",
|
||||
"custom-field-currency": "Currency",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format ",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "This list does not exist",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "This user does not exist",
|
||||
"error-user-notAllowSelf": "You can not invite yourself",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Full Name",
|
||||
"header-logo-title": "Go back to your boards page.",
|
||||
"show-activities": "Show Activities",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Create Board",
|
||||
"home": "Home",
|
||||
"import": "Import",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Trigger",
|
||||
"r-action": "Action",
|
||||
"r-when-a-card": "When a card",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Accept",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Create Field",
|
||||
"createCustomFieldPopup-title": "Create Field",
|
||||
"current": "current",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
|
||||
"custom-field-checkbox": "Checkbox",
|
||||
"custom-field-currency": "Currency",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format ",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "This list does not exist",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "This user does not exist",
|
||||
"error-user-notAllowSelf": "You can not invite yourself",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Full Name",
|
||||
"header-logo-title": "Go back to your boards page.",
|
||||
"show-activities": "Show Activities",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Create Board",
|
||||
"home": "Home",
|
||||
"import": "Import",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Trigger",
|
||||
"r-action": "Action",
|
||||
"r-when-a-card": "When a card",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Accept",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Create Field",
|
||||
"createCustomFieldPopup-title": "Create Field",
|
||||
"current": "current",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
|
||||
"custom-field-checkbox": "Checkbox",
|
||||
"custom-field-currency": "Currency",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format ",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "This list does not exist",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "This user does not exist",
|
||||
"error-user-notAllowSelf": "You can not invite yourself",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Full Name",
|
||||
"header-logo-title": "Go back to your boards page.",
|
||||
"show-activities": "Show Activities",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Create Board",
|
||||
"home": "Home",
|
||||
"import": "Import",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Trigger",
|
||||
"r-action": "Action",
|
||||
"r-when-a-card": "When a card",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Accept",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Create Field",
|
||||
"createCustomFieldPopup-title": "Create Field",
|
||||
"current": "current",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
|
||||
"custom-field-checkbox": "Checkbox",
|
||||
"custom-field-currency": "Currency",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format ",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "This list does not exist",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "This user does not exist",
|
||||
"error-user-notAllowSelf": "You can not invite yourself",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Full Name",
|
||||
"header-logo-title": "Go back to your boards page.",
|
||||
"show-activities": "Show Activities",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Create Board",
|
||||
"home": "Home",
|
||||
"import": "Import",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Trigger",
|
||||
"r-action": "Action",
|
||||
"r-when-a-card": "When a card",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Accept",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Create Field",
|
||||
"createCustomFieldPopup-title": "Create Field",
|
||||
"current": "current",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
|
||||
"custom-field-checkbox": "Checkbox",
|
||||
"custom-field-currency": "Currency",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format ",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "This list does not exist",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "This user does not exist",
|
||||
"error-user-notAllowSelf": "You can not invite yourself",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Full Name",
|
||||
"header-logo-title": "Go back to your boards page.",
|
||||
"show-activities": "Show Activities",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Create Board",
|
||||
"home": "Home",
|
||||
"import": "Import",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Trigger",
|
||||
"r-action": "Action",
|
||||
"r-when-a-card": "When a card",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Accept",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Create Field",
|
||||
"createCustomFieldPopup-title": "Create Field",
|
||||
"current": "current",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
|
||||
"custom-field-checkbox": "Checkbox",
|
||||
"custom-field-currency": "Currency",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format ",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "This list does not exist",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "This user does not exist",
|
||||
"error-user-notAllowSelf": "You can not invite yourself",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Full Name",
|
||||
"header-logo-title": "Go back to your boards page.",
|
||||
"show-activities": "Show Activities",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Create Board",
|
||||
"home": "Home",
|
||||
"import": "Import",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Trigger",
|
||||
"r-action": "Action",
|
||||
"r-when-a-card": "When a card",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Accept",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Create Field",
|
||||
"createCustomFieldPopup-title": "Create Field",
|
||||
"current": "current",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
|
||||
"custom-field-checkbox": "Checkbox",
|
||||
"custom-field-currency": "Currency",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format ",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "This list does not exist",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "This user does not exist",
|
||||
"error-user-notAllowSelf": "You can not invite yourself",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Full Name",
|
||||
"header-logo-title": "Go back to your boards page.",
|
||||
"show-activities": "Show Activities",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Create Board",
|
||||
"home": "Home",
|
||||
"import": "Import",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Trigger",
|
||||
"r-action": "Action",
|
||||
"r-when-a-card": "When a card",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Accept",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Create Field",
|
||||
"createCustomFieldPopup-title": "Create Field",
|
||||
"current": "current",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
|
||||
"custom-field-checkbox": "Checkbox",
|
||||
"custom-field-currency": "Currency",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format ",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "This list does not exist",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "This user does not exist",
|
||||
"error-user-notAllowSelf": "You can not invite yourself",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Full Name",
|
||||
"header-logo-title": "Go back to your boards page.",
|
||||
"show-activities": "Show Activities",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Create Board",
|
||||
"home": "Home",
|
||||
"import": "Import",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Trigger",
|
||||
"r-action": "Action",
|
||||
"r-when-a-card": "When a card",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Accept",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Create Field",
|
||||
"createCustomFieldPopup-title": "Create Field",
|
||||
"current": "current",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
|
||||
"custom-field-checkbox": "Checkbox",
|
||||
"custom-field-currency": "Currency",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format ",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "This list does not exist",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "This user does not exist",
|
||||
"error-user-notAllowSelf": "You can not invite yourself",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Full Name",
|
||||
"header-logo-title": "Go back to your boards page.",
|
||||
"show-activities": "Show Activities",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Create Board",
|
||||
"home": "Home",
|
||||
"import": "Import",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Trigger",
|
||||
"r-action": "Action",
|
||||
"r-when-a-card": "When a card",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Accept",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Create Field",
|
||||
"createCustomFieldPopup-title": "Create Field",
|
||||
"current": "current",
|
||||
"custom-color": "Custom color",
|
||||
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
|
||||
"custom-field-checkbox": "Checkbox",
|
||||
"custom-field-currency": "Currency",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format ",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "This list does not exist",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "This user does not exist",
|
||||
"error-user-notAllowSelf": "You can not invite yourself",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Full Name",
|
||||
"header-logo-title": "Go back to your boards page.",
|
||||
"show-activities": "Show Activities",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Create Board",
|
||||
"home": "Home",
|
||||
"import": "Import",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Trigger",
|
||||
"r-action": "Action",
|
||||
"r-when-a-card": "When a card",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Akcepti",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Crear un campo",
|
||||
"createCustomFieldPopup-title": "Crear un campo",
|
||||
"current": "actual",
|
||||
"custom-color": "Custom color",
|
||||
"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-currency": "Moneda",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Su CSV(Valores separados por coma)/TSV(Valores separados por tab) no incluyen la información apropiada en el formato correcto",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Tio listo ne ekzistas",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Tio uzanto ne ekzistas",
|
||||
"error-user-notAllowSelf": "No puedes invitarte a ti mismo",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Plena nomo",
|
||||
"header-logo-title": "Volver a tu página de tableros",
|
||||
"show-activities": "Mostrar actividades",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Krei tavolon",
|
||||
"home": "Hejmo",
|
||||
"import": "Importi",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "disparador",
|
||||
"r-action": "acción",
|
||||
"r-when-a-card": "Cuando una tarjeta",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Aceptar",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Crear Campo",
|
||||
"createCustomFieldPopup-title": "Crear Campo",
|
||||
"current": "actual",
|
||||
"custom-color": "Custom color",
|
||||
"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-currency": "Moneda",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Su CSV(Valores separados por coma)/TSV(Valores separados por tab) no incluyen la información apropiada en el formato correcto",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "Esta lista no existe",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "Este usuario no existe",
|
||||
"error-user-notAllowSelf": "No podés invitarte a vos mismo",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Nombre Completo",
|
||||
"header-logo-title": "Retroceder a tu página de tableros.",
|
||||
"show-activities": "Mostrar actividades",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Crear Tablero",
|
||||
"home": "Inicio",
|
||||
"import": "Importar",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "disparador",
|
||||
"r-action": "acción",
|
||||
"r-when-a-card": "Cuando una tarjeta",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Aceptar",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Crear un campo",
|
||||
"createCustomFieldPopup-title": "Crear un campo",
|
||||
"current": "actual",
|
||||
"custom-color": "Custom color",
|
||||
"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-currency": "Moneda",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Su CSV(Valores separados por coma)/TSV(Valores separados por tab) no incluyen la información apropiada en el formato correcto",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "La lista no existe",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "El usuario no existe",
|
||||
"error-user-notAllowSelf": "No puedes invitarte a ti mismo",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Nombre completo",
|
||||
"header-logo-title": "Volver a tu página de tableros",
|
||||
"show-activities": "Mostrar actividades",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Crear tablero",
|
||||
"home": "Inicio",
|
||||
"import": "Importar",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "disparador",
|
||||
"r-action": "acción",
|
||||
"r-when-a-card": "Cuando una tarjeta",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Aceptar",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Crear un campo",
|
||||
"createCustomFieldPopup-title": "Crear un campo",
|
||||
"current": "actual",
|
||||
"custom-color": "Custom color",
|
||||
"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-currency": "Moneda",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Su CSV(Valores separados por coma)/TSV(Valores separados por tab) no incluyen la información apropiada en el formato correcto",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "La lista no existe",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "El usuario no existe",
|
||||
"error-user-notAllowSelf": "No puedes invitarte a ti mismo",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Nombre completo",
|
||||
"header-logo-title": "Volver a tu página de tableros",
|
||||
"show-activities": "Mostrar actividades",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Crear tablero",
|
||||
"home": "Inicio",
|
||||
"import": "Importar",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "disparador",
|
||||
"r-action": "acción",
|
||||
"r-when-a-card": "Cuando una tarjeta",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Aceptar",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Crear un campo",
|
||||
"createCustomFieldPopup-title": "Crear un campo",
|
||||
"current": "actual",
|
||||
"custom-color": "Custom color",
|
||||
"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-currency": "Moneda",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Su CSV(Valores separados por coma)/TSV(Valores separados por tab) no incluyen la información apropiada en el formato correcto",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "La lista no existe",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "El usuario no existe",
|
||||
"error-user-notAllowSelf": "No puedes invitarte a ti mismo",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Nombre completo",
|
||||
"header-logo-title": "Volver a tu página de tableros",
|
||||
"show-activities": "Mostrar actividades",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Crear tablero",
|
||||
"home": "Inicio",
|
||||
"import": "Importar",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "disparador",
|
||||
"r-action": "acción",
|
||||
"r-when-a-card": "Cuando una tarjeta",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Aceptar",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Crear un campo",
|
||||
"createCustomFieldPopup-title": "Crear un campo",
|
||||
"current": "actual",
|
||||
"custom-color": "Custom color",
|
||||
"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-currency": "Divisa",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Su CSV(Valores separados por coma)/TSV(Valores separados por tab) no incluyen la información apropiada en el formato correcto",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "La lista no existe",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "El usuario no existe",
|
||||
"error-user-notAllowSelf": "No se puede invitar a sí mismo",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Nombre completo",
|
||||
"header-logo-title": "Volver a su página de tableros",
|
||||
"show-activities": "Mostrar actividades",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Crear tablero",
|
||||
"home": "Inicio",
|
||||
"import": "Importar",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "Desencadenador",
|
||||
"r-action": "Acción",
|
||||
"r-when-a-card": "Cuando una tarjeta",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Aceptar",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Crear un campo",
|
||||
"createCustomFieldPopup-title": "Crear un campo",
|
||||
"current": "actual",
|
||||
"custom-color": "Custom color",
|
||||
"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-currency": "Moneda",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Su CSV(Valores separados por coma)/TSV(Valores separados por tab) no incluyen la información apropiada en el formato correcto",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "La lista no existe",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "El usuario no existe",
|
||||
"error-user-notAllowSelf": "No puedes invitarte a ti mismo",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Nombre completo",
|
||||
"header-logo-title": "Volver a tu página de tableros",
|
||||
"show-activities": "Mostrar actividades",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Crear tablero",
|
||||
"home": "Inicio",
|
||||
"import": "Importar",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "disparador",
|
||||
"r-action": "acción",
|
||||
"r-when-a-card": "Cuando una tarjeta",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"accept": "Aceptar",
|
||||
"activity-changedTitle": "changed title to %s of %s",
|
||||
"activity-changedDescription": "changed description of %s",
|
||||
"act-deleteCard": "deleted card __card__ from list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoard": "deleted board __board__",
|
||||
"act-removeList": "deleted list __list__ at board __board__",
|
||||
@@ -441,6 +442,7 @@
|
||||
"createCustomField": "Crear un campo",
|
||||
"createCustomFieldPopup-title": "Crear un campo",
|
||||
"current": "actual",
|
||||
"custom-color": "Custom color",
|
||||
"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-currency": "Moneda",
|
||||
@@ -508,6 +510,7 @@
|
||||
"error-csv-schema": "Su CSV(Valores separados por coma)/TSV(Valores separados por tab) no incluyen la información apropiada en el formato correcto",
|
||||
"error-import-empty-board": "This export contains no board content (no swimlanes, lists or cards). It may have been created by an older WeKan version with a known export bug. Please re-export the board with the current version and import the new file.",
|
||||
"error-list-doesNotExist": "La lista no existe",
|
||||
"error-linked-card-not-allowed": "You can only link to a normal card. Linking to another linked card, or to a card that links back to this board, is not allowed because it would make the cards inaccessible.",
|
||||
"error-user-disabled": "This user account is disabled",
|
||||
"error-user-doesNotExist": "El usuario no existe",
|
||||
"error-user-notAllowSelf": "No puedes invitarte a ti mismo",
|
||||
@@ -581,6 +584,7 @@
|
||||
"fullname": "Nombre completo",
|
||||
"header-logo-title": "Volver a tu página de tableros",
|
||||
"show-activities": "Mostrar actividades",
|
||||
"hide-activities": "Hide Activities",
|
||||
"headerBarCreateBoardPopup-title": "Crear tablero",
|
||||
"home": "Inicio",
|
||||
"import": "Importar",
|
||||
@@ -1015,6 +1019,17 @@
|
||||
"r-workflow-help": "Drag a trigger and an action into the builder, then add the rule. Drag an action onto an existing rule to change what it does.",
|
||||
"r-drop-trigger": "drop a trigger here",
|
||||
"r-drop-action": "drop an action here",
|
||||
"r-w-card-created": "Card is created",
|
||||
"r-w-card-archived": "Card is archived",
|
||||
"r-w-card-unarchived": "Card is unarchived",
|
||||
"r-w-label-added": "Any label is added",
|
||||
"r-w-label-removed": "Any label is removed",
|
||||
"r-w-member-added": "A member is added",
|
||||
"r-w-member-removed": "A member is removed",
|
||||
"r-w-checklist-added": "A checklist is added",
|
||||
"r-w-attachment-added": "An attachment is added",
|
||||
"r-w-every-day-at": "Every day at __time__",
|
||||
"r-w-set-received-now": "Set received date to now",
|
||||
"r-export-json": "Export rules to JSON",
|
||||
"r-export-csv": "Export rules to CSV",
|
||||
"r-import-json": "Import rules from JSON",
|
||||
@@ -1068,6 +1083,12 @@
|
||||
"r-mark-incomplete": "Mark card incomplete",
|
||||
"r-move-all-cards": "Move all cards in list",
|
||||
"r-set-date-relative": "Set date relative to now",
|
||||
"r-later": "later",
|
||||
"r-unit-minutes": "minute(s)",
|
||||
"r-unit-hours": "hour(s)",
|
||||
"r-unit-days": "day(s)",
|
||||
"r-unit-weeks": "week(s)",
|
||||
"r-unit-months": "month(s)",
|
||||
"r-trigger": "disparador",
|
||||
"r-action": "acción",
|
||||
"r-when-a-card": "Cuando una tarjeta",
|
||||
|
||||
Loaded 100 of 314 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user