Compare commits

..

2 Commits

Author SHA1 Message Date
Henry
b7c9eaedb7 chore: remove build from readme compose 2026-02-28 23:07:16 +00:00
Henry
2d0c467ba8 docs: add migrate service to self hosting guide 2026-02-28 22:58:59 +00:00
34 changed files with 502 additions and 5739 deletions

View File

@@ -6,6 +6,8 @@ name: Docker
# documentation.
on:
schedule:
- cron: "21 21 * * *"
push:
# Only trigger on tags (releases), not main branch pushes
# Main branch builds are handled by workflow_run after Translate completes
@@ -82,8 +84,7 @@ jobs:
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=raw,value=latest,enable=${{ github.ref_type == 'tag' }}
type=raw,value=edge,enable={{is_default_branch}}
type=raw,value=latest,enable={{is_default_branch}}
- name: Extract Docker metadata (migrate)
id: meta-migrate
@@ -96,8 +97,7 @@ jobs:
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=raw,value=latest,enable=${{ github.ref_type == 'tag' }}
type=raw,value=edge,enable={{is_default_branch}}
type=raw,value=latest,enable={{is_default_branch}}
# Extract version from git tag or ref
# Uses git describe to get latest tag + commit hash in SemVer format: 1.2.3+abc1234

View File

@@ -39,10 +39,6 @@ checksums:
0xWkkH/placeholders/boardCount/0: 8cc7c9ba5252e9266c6eb8434fae00f3
0xWkkH/origin/0/0: 3c57a918258af4b44c187f58d203345f
0xWkkH/translation: 72358c550bd1a99fcb6e8952f0f947ef
yndBF%2B/translation: 9fb995d992256a9db7822d430ad75ba0
yndBF%2B/message: 9fb995d992256a9db7822d430ad75ba0
yndBF%2B/placeholders/projectCount/0: 23257c47018d21aeae42cf5bd0aa9932
yndBF%2B/origin/0/0: 3c57a918258af4b44c187f58d203345f
9lFfqv/message: 6cb28ff89203e2eca3fdd69396dd00d6
9lFfqv/origin/0/0: fadd5a5b6963ec5f261072f7e8d2140b
9lFfqv/translation: 6cb28ff89203e2eca3fdd69396dd00d6
@@ -85,9 +81,9 @@ checksums:
7L01XJ/message: c46571856723b03262fd33f511116298
7L01XJ/origin/0/0: feacdaf2791aaddec128f463ffa2e807
7L01XJ/translation: c46571856723b03262fd33f511116298
F6pfE9/translation: 3e1ec025c4a50830bbb9ad57a176630a
F6pfE9/message: 3e1ec025c4a50830bbb9ad57a176630a
F6pfE9/origin/0/0: 4b563046ba98abb3777fb1c3560866aa
F6pfE9/translation: 3e1ec025c4a50830bbb9ad57a176630a
XJOV1Y/message: 1948763de8e531483a798b68195e297e
XJOV1Y/origin/0/0: 15fd9c05fc09ccbbb54aadc4aa5e5501
XJOV1Y/origin/1/0: 9c8b544f5db130cd7c5eda9064ba3957
@@ -215,12 +211,6 @@ checksums:
WnEwDO/message: 2959fd276248208b65cb27ed46b20135
WnEwDO/origin/0/0: d6f5120f072a821219608624f361384e
WnEwDO/translation: 2959fd276248208b65cb27ed46b20135
j1%2BHPc/translation: baf4c3cd580291f41458f9ed28102c49
j1%2BHPc/message: baf4c3cd580291f41458f9ed28102c49
j1%2BHPc/origin/0/0: 9d4260644f1a12f41d6b72574eeb111c
Dz63YI/translation: 8e43abcd6e039b51084937e4829f58ad
Dz63YI/message: 8e43abcd6e039b51084937e4829f58ad
Dz63YI/origin/0/0: 9d4260644f1a12f41d6b72574eeb111c
WmPhYW/message: 0aa3973b860c1faf8d9123aebf567e40
WmPhYW/origin/0/0: 9d4260644f1a12f41d6b72574eeb111c
WmPhYW/translation: 0aa3973b860c1faf8d9123aebf567e40
@@ -258,12 +248,12 @@ checksums:
yb%2Ffjw/message: 2f5426445800ecd5a3102aac940d459c
yb%2Ffjw/origin/0/0: eb63312c63f6c8d2a5b6520c89012123
yb%2Ffjw/translation: 2f5426445800ecd5a3102aac940d459c
aKJHG%2B/translation: 63de765f7fd7bc5238a3e36532306b6b
aKJHG%2B/message: 63de765f7fd7bc5238a3e36532306b6b
aKJHG%2B/origin/0/0: 0ad2af981579a62b084b3d41462c5546
aKJHG%2B/translation: 63de765f7fd7bc5238a3e36532306b6b
TdfEV7/translation: cf5127ecfd7e43a35466a1ba5fe16450
TdfEV7/message: cf5127ecfd7e43a35466a1ba5fe16450
TdfEV7/origin/0/0: 4b563046ba98abb3777fb1c3560866aa
TdfEV7/translation: cf5127ecfd7e43a35466a1ba5fe16450
lo8xBK/message: f9b67026c5ef86ac4d5944380d571961
lo8xBK/placeholders/entityLabel/0: 5745fa1af326b9ac2b140cbbef90cdeb
lo8xBK/origin/0/0: 68450df287fb46ea629e818732c1291a
@@ -351,9 +341,9 @@ checksums:
YhvWXb/origin/0/0: ff4a160eca5f8da4f075fd1dd6061fa6
YhvWXb/origin/1/0: dbad0c8d7863cb41f5495264f82e7081
YhvWXb/translation: 336a8c70a91adc49c15266167ee84cc0
i0ZMQl/translation: f739058266a2cb6a3d7cca14de09c69a
i0ZMQl/message: f739058266a2cb6a3d7cca14de09c69a
i0ZMQl/origin/0/0: 0ad2af981579a62b084b3d41462c5546
i0ZMQl/translation: f739058266a2cb6a3d7cca14de09c69a
wewm3j/message: 985c0177744ec56d8dac84f66ec284ca
wewm3j/origin/0/0: bcd95e286f12800a3e7ee0a71feb3ca5
wewm3j/translation: 985c0177744ec56d8dac84f66ec284ca
@@ -366,9 +356,9 @@ checksums:
XNxYxq/message: b0e6a79e1751b734e1060a1034a893d6
XNxYxq/origin/0/0: c0b59968b2b234167c488a05cc38710b
XNxYxq/translation: b0e6a79e1751b734e1060a1034a893d6
tbNcu4/translation: 3817a16b436504bb8d96ca5ee62078cc
tbNcu4/message: 3817a16b436504bb8d96ca5ee62078cc
tbNcu4/origin/0/0: 0ad2af981579a62b084b3d41462c5546
tbNcu4/translation: 3817a16b436504bb8d96ca5ee62078cc
Xid3K6/message: ba018946ffdf85e55d701a9c27595b4d
Xid3K6/origin/0/0: 2e937f7560901c3de71a592b4fd80f34
Xid3K6/translation: ba018946ffdf85e55d701a9c27595b4d
@@ -393,9 +383,9 @@ checksums:
8TveY%2B/origin/0/0: 94d3e20c29bb517dd394711d7524e478
8TveY%2B/origin/1/0: c0b59968b2b234167c488a05cc38710b
8TveY%2B/translation: 8fff51c5872e051beb9b718336665e80
0RE1AJ/translation: c9a1699f5037acf87aaa6515d0f16910
0RE1AJ/message: c9a1699f5037acf87aaa6515d0f16910
0RE1AJ/origin/0/0: f78c0a7870158f5dab5216bcd6092e49
0RE1AJ/translation: c9a1699f5037acf87aaa6515d0f16910
ZDo4HN/message: 736332f2e4488609e42d2be8547d296e
ZDo4HN/origin/0/0: eb63312c63f6c8d2a5b6520c89012123
ZDo4HN/translation: 736332f2e4488609e42d2be8547d296e
@@ -628,21 +618,13 @@ checksums:
479pdJ/message: a0d2935d7b63f8dd19d7c0de47524416
479pdJ/origin/0/0: 0627e0040ca4939c9a57349e98c51797
479pdJ/translation: a0d2935d7b63f8dd19d7c0de47524416
iSLIjg/translation: 8778ee245078a8be4a2ce855c8c56edc
iSLIjg/message: 8778ee245078a8be4a2ce855c8c56edc
iSLIjg/origin/0/0: 3c57a918258af4b44c187f58d203345f
3jod3l/translation: 71ca612e433a9ed61ccfbfe1cc87c78b
3jod3l/message: 71ca612e433a9ed61ccfbfe1cc87c78b
3jod3l/origin/0/0: 9d4260644f1a12f41d6b72574eeb111c
nk7caK/message: 4440a0b9e387ef7136e3958e7a089213
nk7caK/origin/0/0: 9d4260644f1a12f41d6b72574eeb111c
nk7caK/origin/0/0: 3c57a918258af4b44c187f58d203345f
nk7caK/origin/1/0: 9d4260644f1a12f41d6b72574eeb111c
nk7caK/translation: 4440a0b9e387ef7136e3958e7a089213
sDLCvT/message: 033c5dcdb059ccb634aef7fe63f2f45d
sDLCvT/origin/0/0: d77eb1f90f2fa86a55181629d88d237a
sDLCvT/translation: 033c5dcdb059ccb634aef7fe63f2f45d
MCIXdZ/translation: ad3738e5eeabcebd3478cdc2545f543f
MCIXdZ/message: ad3738e5eeabcebd3478cdc2545f543f
MCIXdZ/origin/0/0: 9d4260644f1a12f41d6b72574eeb111c
5eZwRW/message: 84a510a7485f43e43f2191bd161171d7
5eZwRW/origin/0/0: 9d4260644f1a12f41d6b72574eeb111c
5eZwRW/translation: 84a510a7485f43e43f2191bd161171d7
@@ -844,9 +826,6 @@ checksums:
f8fH8W/message: 991b75727b6784c1a063a7462b76186d
f8fH8W/origin/0/0: eb63312c63f6c8d2a5b6520c89012123
f8fH8W/translation: 991b75727b6784c1a063a7462b76186d
Odv3J6/translation: f3cc49ba2dc3f9c33917f8a749d68bf5
Odv3J6/message: f3cc49ba2dc3f9c33917f8a749d68bf5
Odv3J6/origin/0/0: 9d4260644f1a12f41d6b72574eeb111c
YBBifR/message: a2dd737d133887d34504728c7e7f05e3
YBBifR/origin/0/0: 9d4260644f1a12f41d6b72574eeb111c
YBBifR/translation: a2dd737d133887d34504728c7e7f05e3
@@ -996,9 +975,6 @@ checksums:
55xJ%2FO/message: ebecb5c1b72ba4b063117241f5ba4f2d
55xJ%2FO/origin/0/0: 0627e0040ca4939c9a57349e98c51797
55xJ%2FO/translation: ebecb5c1b72ba4b063117241f5ba4f2d
yhLUU8/translation: e879ffdeccbe5b00fa7ece09114d149f
yhLUU8/message: e879ffdeccbe5b00fa7ece09114d149f
yhLUU8/origin/0/0: 9d4260644f1a12f41d6b72574eeb111c
cji2nM/message: cbedc3f3213dfc4fdc8b7503ae1a5cd6
cji2nM/origin/0/0: 8628ddb6f4ded25c0f17e2cbda8207d3
cji2nM/translation: cbedc3f3213dfc4fdc8b7503ae1a5cd6
@@ -1014,9 +990,6 @@ checksums:
9s9O5h/message: 0aec9bd8170bc84f5ea5c9a47c52ed26
9s9O5h/origin/0/0: 83911e3eacbad4583e2b1647a784d154
9s9O5h/translation: 0aec9bd8170bc84f5ea5c9a47c52ed26
gQ%2F02p/translation: 08e8dfeafa38796abcdcc258917428d6
gQ%2F02p/message: 08e8dfeafa38796abcdcc258917428d6
gQ%2F02p/origin/0/0: 9d4260644f1a12f41d6b72574eeb111c
lKAvEd/message: a8766853864eddc480113778a708871b
lKAvEd/origin/0/0: 9d4260644f1a12f41d6b72574eeb111c
lKAvEd/translation: a8766853864eddc480113778a708871b
@@ -1182,14 +1155,7 @@ checksums:
7hktsm/translation: 8e5e7bd026b5bec46bbfdce02ab9e0b8
RkXlPZ/message: 6e1cf3c00fa6fbe24afcc78ea3b5f3e4
RkXlPZ/origin/0/0: 98e2302d0d8d12ce65c4140b87450673
RkXlPZ/origin/1/0: 9d4260644f1a12f41d6b72574eeb111c
RkXlPZ/translation: 6e1cf3c00fa6fbe24afcc78ea3b5f3e4
PVT7q7/translation: 8fa30040ec891db0b5b7d893786514ab
PVT7q7/message: 8fa30040ec891db0b5b7d893786514ab
PVT7q7/origin/0/0: 9d4260644f1a12f41d6b72574eeb111c
"%2FbBVaD/translation": 79b9a6153d695ff0175aa804b1c0286b
"%2FbBVaD/message": 79b9a6153d695ff0175aa804b1c0286b
"%2FbBVaD/origin/0/0": 9d4260644f1a12f41d6b72574eeb111c
7eMo%2BU/message: 6251589da1964d55afabdfd64c84c335
7eMo%2BU/origin/0/0: 6cda8b872e4902cbc0191d9375adf4ef
7eMo%2BU/translation: 6251589da1964d55afabdfd64c84c335
@@ -1262,11 +1228,9 @@ checksums:
l3s5ri/translation: 348b8ab981de5b7f1fca6d7302263bbd
2MPcep/message: 7e749df6f068b9cdf1055ea38c9a80af
2MPcep/origin/0/0: 3c57a918258af4b44c187f58d203345f
2MPcep/origin/1/0: 3c57a918258af4b44c187f58d203345f
2MPcep/translation: 7e749df6f068b9cdf1055ea38c9a80af
BEVzjL/message: bcec1f271c82ddffc91ebc22021b03cb
BEVzjL/origin/0/0: 3c57a918258af4b44c187f58d203345f
BEVzjL/origin/1/0: 3c57a918258af4b44c187f58d203345f
BEVzjL/translation: bcec1f271c82ddffc91ebc22021b03cb
rRM7r0/message: d66d13649f81342f8b3a4f3b54370c20
rRM7r0/origin/0/0: d77eb1f90f2fa86a55181629d88d237a
@@ -1554,9 +1518,9 @@ checksums:
"%2FglL9Q/placeholders/0/0": 07bd981d42ffe27ee81d1dffa7dc0d43
"%2FglL9Q/origin/0/0": f78c0a7870158f5dab5216bcd6092e49
"%2FglL9Q/translation": a7a95e1dfdb4396da9e2be0e27f42323
tlhgDC/translation: b96a6f8fa3267ec01e68e61656382b2e
tlhgDC/message: b96a6f8fa3267ec01e68e61656382b2e
tlhgDC/origin/0/0: f78c0a7870158f5dab5216bcd6092e49
tlhgDC/translation: b96a6f8fa3267ec01e68e61656382b2e
Eg99Sc/message: f718c896810da3612202887f9a4374fa
Eg99Sc/origin/0/0: d96af8a06c2e38a72238bcd16e426859
Eg99Sc/translation: f718c896810da3612202887f9a4374fa
@@ -1581,9 +1545,6 @@ checksums:
fvLNDy/message: f18ee3d7230cc33b68bd17b429d1d442
fvLNDy/origin/0/0: fc0c18a095a68277a0f90a115942683b
fvLNDy/translation: f18ee3d7230cc33b68bd17b429d1d442
i30J2U/translation: 8b7ec59963fb26e13948600c55c8de1d
i30J2U/message: 8b7ec59963fb26e13948600c55c8de1d
i30J2U/origin/0/0: 3c57a918258af4b44c187f58d203345f
ERpq2P/message: 5db6294712528cd897b15ae36f4fd834
ERpq2P/placeholders/debouncedQuery/0: 8471823afb4210cf564ca0d8bef9dd66
ERpq2P/origin/0/0: 89a76a14edc1c0b7876d79d7571bb8fb
@@ -1739,41 +1700,40 @@ checksums:
tyHiOa/origin/10/0: fc0c18a095a68277a0f90a115942683b
tyHiOa/origin/11/0: fc0c18a095a68277a0f90a115942683b
tyHiOa/origin/12/0: 3c57a918258af4b44c187f58d203345f
tyHiOa/origin/13/0: 3c57a918258af4b44c187f58d203345f
tyHiOa/origin/14/0: 3a89a46ac678e34dc8eb687b07a4ad4b
tyHiOa/origin/13/0: 3a89a46ac678e34dc8eb687b07a4ad4b
tyHiOa/origin/14/0: a31bf5b0f5348dedcad98939fcf7f93f
tyHiOa/origin/15/0: a31bf5b0f5348dedcad98939fcf7f93f
tyHiOa/origin/16/0: a31bf5b0f5348dedcad98939fcf7f93f
tyHiOa/origin/17/0: 6e60e97757a446204985b5c4374ed66d
tyHiOa/origin/18/0: d2cacb98e99d5163eff64f9c4c9cbb47
tyHiOa/origin/19/0: b2059fa4b8b99cc10440da26475b234c
tyHiOa/origin/20/0: 2a382c1cdf010f01a8e95c3e05f6df53
tyHiOa/origin/21/0: d55f532bb5ae247e3a018978be0da463
tyHiOa/origin/22/0: 4b4f55c033add8db69178563832227c6
tyHiOa/origin/23/0: 2201bf679c663a732d7f1b3c3ce3897f
tyHiOa/origin/24/0: 27ce4b16f6ada6ca35ac8d1adff329c5
tyHiOa/origin/25/0: a55c169a847bdde3b119eeb97e202c30
tyHiOa/origin/26/0: faa852a0c0e3c81fe948e394029c1ba5
tyHiOa/origin/27/0: a2dd1fc876bd42b9db7ca7aaa57ac5e2
tyHiOa/origin/28/0: e59eec882722e98169cc27f545facfe7
tyHiOa/origin/29/0: b1f4eb6768222ea825703105f6014486
tyHiOa/origin/16/0: 6e60e97757a446204985b5c4374ed66d
tyHiOa/origin/17/0: d2cacb98e99d5163eff64f9c4c9cbb47
tyHiOa/origin/18/0: b2059fa4b8b99cc10440da26475b234c
tyHiOa/origin/19/0: 2a382c1cdf010f01a8e95c3e05f6df53
tyHiOa/origin/20/0: d55f532bb5ae247e3a018978be0da463
tyHiOa/origin/21/0: 4b4f55c033add8db69178563832227c6
tyHiOa/origin/22/0: 2201bf679c663a732d7f1b3c3ce3897f
tyHiOa/origin/23/0: 27ce4b16f6ada6ca35ac8d1adff329c5
tyHiOa/origin/24/0: a55c169a847bdde3b119eeb97e202c30
tyHiOa/origin/25/0: faa852a0c0e3c81fe948e394029c1ba5
tyHiOa/origin/26/0: a2dd1fc876bd42b9db7ca7aaa57ac5e2
tyHiOa/origin/27/0: e59eec882722e98169cc27f545facfe7
tyHiOa/origin/28/0: b1f4eb6768222ea825703105f6014486
tyHiOa/origin/29/0: 15fd9c05fc09ccbbb54aadc4aa5e5501
tyHiOa/origin/30/0: 15fd9c05fc09ccbbb54aadc4aa5e5501
tyHiOa/origin/31/0: 15fd9c05fc09ccbbb54aadc4aa5e5501
tyHiOa/origin/32/0: 68450df287fb46ea629e818732c1291a
tyHiOa/origin/31/0: 68450df287fb46ea629e818732c1291a
tyHiOa/origin/32/0: afee530613110e248ffde6b56872ebed
tyHiOa/origin/33/0: afee530613110e248ffde6b56872ebed
tyHiOa/origin/34/0: afee530613110e248ffde6b56872ebed
tyHiOa/origin/35/0: afee530613110e248ffde6b56872ebed
tyHiOa/origin/35/0: 8628ddb6f4ded25c0f17e2cbda8207d3
tyHiOa/origin/36/0: 8628ddb6f4ded25c0f17e2cbda8207d3
tyHiOa/origin/37/0: 8628ddb6f4ded25c0f17e2cbda8207d3
tyHiOa/origin/38/0: 7493592314bc3b96ad96127a949ba1ba
tyHiOa/origin/39/0: 03c00909b41be01231cd3e843c8ee44e
tyHiOa/origin/40/0: 5c60161e173f5eae9276d8e4c70b4ebb
tyHiOa/origin/41/0: 83911e3eacbad4583e2b1647a784d154
tyHiOa/origin/42/0: d465da67c0a870d198eb7f313569c137
tyHiOa/origin/43/0: 33bf266228f835e12c0bfb0e5efb3be9
tyHiOa/origin/44/0: ff48991e314b0b3e989a4dac59860fd5
tyHiOa/origin/45/0: 30791e26a172d47d3cb0693e82679246
tyHiOa/origin/46/0: dbad0c8d7863cb41f5495264f82e7081
tyHiOa/origin/47/0: 0dccc39d0debbf3e089cb6d292de762b
tyHiOa/origin/37/0: 7493592314bc3b96ad96127a949ba1ba
tyHiOa/origin/38/0: 03c00909b41be01231cd3e843c8ee44e
tyHiOa/origin/39/0: 5c60161e173f5eae9276d8e4c70b4ebb
tyHiOa/origin/40/0: 83911e3eacbad4583e2b1647a784d154
tyHiOa/origin/41/0: d465da67c0a870d198eb7f313569c137
tyHiOa/origin/42/0: 33bf266228f835e12c0bfb0e5efb3be9
tyHiOa/origin/43/0: ff48991e314b0b3e989a4dac59860fd5
tyHiOa/origin/44/0: 30791e26a172d47d3cb0693e82679246
tyHiOa/origin/45/0: dbad0c8d7863cb41f5495264f82e7081
tyHiOa/origin/46/0: 0dccc39d0debbf3e089cb6d292de762b
tyHiOa/translation: 21ffcf0b00e7cd7b64f7454a95762e1d
PZCqeW/message: 325dea6dd0348a27a6818db2c1340c98
PZCqeW/origin/0/0: 8628ddb6f4ded25c0f17e2cbda8207d3
@@ -1954,7 +1914,6 @@ checksums:
K3iLeO/translation: e3bf6f95419169f460fb6918a0afc512
wgNoIs/message: eedc7cdb02de467c15dc418a066a77f2
wgNoIs/origin/0/0: 3c57a918258af4b44c187f58d203345f
wgNoIs/origin/1/0: 3c57a918258af4b44c187f58d203345f
wgNoIs/translation: eedc7cdb02de467c15dc418a066a77f2
rYUZIe/message: c7b0ec447415ff62856803a4d7838bd6
rYUZIe/origin/0/0: 3c57a918258af4b44c187f58d203345f
@@ -2114,12 +2073,12 @@ checksums:
nhMhRr/message: 07edd8c50685a52c0969d711df26d768
nhMhRr/origin/0/0: 1fd8ccf586705354bcae6e1186108fc7
nhMhRr/translation: 07edd8c50685a52c0969d711df26d768
NcFrgC/translation: bd15a7b3d8b4bce18cd42682ea1ec164
NcFrgC/message: bd15a7b3d8b4bce18cd42682ea1ec164
NcFrgC/origin/0/0: 0ad2af981579a62b084b3d41462c5546
NcFrgC/translation: bd15a7b3d8b4bce18cd42682ea1ec164
C6gv54/translation: 1573c77059bc92df17e661befda8d9b7
C6gv54/message: 1573c77059bc92df17e661befda8d9b7
C6gv54/origin/0/0: 0ad2af981579a62b084b3d41462c5546
C6gv54/translation: 1573c77059bc92df17e661befda8d9b7
jlB2RY/message: 67a76bf346ab4b48563269e9d941a64a
jlB2RY/origin/0/0: 0627e0040ca4939c9a57349e98c51797
jlB2RY/translation: 67a76bf346ab4b48563269e9d941a64a
@@ -2196,9 +2155,6 @@ checksums:
4gAX8s/message: 29dea3e0b6238874f8c7a27619df8e36
4gAX8s/origin/0/0: 634473ef965836871efe40875a36b6ab
4gAX8s/translation: 29dea3e0b6238874f8c7a27619df8e36
L5WQLg/translation: 38a978eab728978612d1dee8bdeb915b
L5WQLg/message: 38a978eab728978612d1dee8bdeb915b
L5WQLg/origin/0/0: 9d4260644f1a12f41d6b72574eeb111c
eEQyz%2B/message: 0d3bac559c71ec4b8734f9f212320de5
eEQyz%2B/origin/0/0: d77eb1f90f2fa86a55181629d88d237a
eEQyz%2B/translation: 0d3bac559c71ec4b8734f9f212320de5
@@ -2320,9 +2276,9 @@ checksums:
TFv5tM/message: 4f2240aeff6f7275feb33ca3f608e48c
TFv5tM/origin/0/0: 7493592314bc3b96ad96127a949ba1ba
TFv5tM/translation: 4f2240aeff6f7275feb33ca3f608e48c
It4%2FFS/translation: ae1527c2765592f13980acb66997e570
It4%2FFS/message: ae1527c2765592f13980acb66997e570
It4%2FFS/origin/0/0: 0ad2af981579a62b084b3d41462c5546
It4%2FFS/translation: ae1527c2765592f13980acb66997e570
E8zYtd/message: b683cc07092348c1e75dba40b1262b85
E8zYtd/placeholders/0/0: 182720128698512d43d1bf43824cd7f8
E8zYtd/origin/0/0: 1d6b5f88cdad160a67842f6b65387448
@@ -2615,24 +2571,12 @@ checksums:
tca56%2F/message: 19d84e934877efc0fef285ff3d6e7849
tca56%2F/origin/0/0: 12c1fab543c8848bcb10107d47336736
tca56%2F/translation: 19d84e934877efc0fef285ff3d6e7849
HcT8J4/translation: 19478f9152e6879c9c029198e635b44d
HcT8J4/message: 19478f9152e6879c9c029198e635b44d
HcT8J4/origin/0/0: 9d4260644f1a12f41d6b72574eeb111c
AdxYds/translation: a265e2d3b01efd3fe04ac251d2ff6afc
AdxYds/message: a265e2d3b01efd3fe04ac251d2ff6afc
AdxYds/origin/0/0: 9d4260644f1a12f41d6b72574eeb111c
PELbXB/translation: 6984aed03bbcd94041c5dd20f62e56ed
PELbXB/message: 6984aed03bbcd94041c5dd20f62e56ed
PELbXB/origin/0/0: 9d4260644f1a12f41d6b72574eeb111c
Ozt2vv/message: 8f730f68d52b7efa727aa0784282ebcb
Ozt2vv/origin/0/0: 0627e0040ca4939c9a57349e98c51797
Ozt2vv/translation: 8f730f68d52b7efa727aa0784282ebcb
"%2FtOdd2/message": 099e1780348cd7bf617721344371a430
"%2FtOdd2/origin/0/0": 03c00909b41be01231cd3e843c8ee44e
"%2FtOdd2/translation": 099e1780348cd7bf617721344371a430
"%2BjbXzb/translation": c07e27183a52361fc05b919c2a3f5c1f
"%2BjbXzb/message": c07e27183a52361fc05b919c2a3f5c1f
"%2BjbXzb/origin/0/0": 3c57a918258af4b44c187f58d203345f
CJWDTP/message: 126aeeb73f7e4cad338056e4c933f39b
CJWDTP/origin/0/0: 9d4260644f1a12f41d6b72574eeb111c
CJWDTP/translation: 126aeeb73f7e4cad338056e4c933f39b

View File

@@ -34,7 +34,7 @@
"comments": [],
"origin": [
["src/views/boards/index.tsx", 48],
["src/views/card/index.tsx", 308]
["src/views/card/index.tsx", 309]
],
"translation": "{0} | {1}"
},
@@ -80,18 +80,9 @@
"boardCount": ["boardCount"]
},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 489]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 299]],
"translation": "{boardCount, plural, one {Board importieren (1)} other {Boards importieren ({boardCount})}}"
},
"yndBF+": {
"message": "{projectCount, plural, one {Import project (1)} other {Import projects ({projectCount})}}",
"placeholders": {
"projectCount": ["projectCount"]
},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 341]],
"translation": "{projectCount, plural, one {Projekt importieren (1)} other {Projekte importieren ({projectCount})}}"
},
"9lFfqv": {
"message": "/month",
"placeholders": {},
@@ -206,7 +197,7 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 446],
["src/views/card/index.tsx", 447],
["src/views/public/board/CardModal.tsx", 189]
],
"translation": "Aktivität"
@@ -501,25 +492,11 @@
"origin": [["src/views/auth/signup/index.tsx", 90]],
"translation": "Haben Sie bereits ein Konto? <0><1>Anmelden</1></0>"
},
"j1+HPc": {
"message": "An error occurred while connecting your GitHub account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 107]],
"translation": "Beim Verbinden Ihres GitHub-Kontos ist ein Fehler aufgetreten."
},
"Dz63YI": {
"message": "An error occurred while disconnecting your GitHub account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 130]],
"translation": "Beim Trennen Ihres GitHub-Kontos ist ein Fehler aufgetreten."
},
"WmPhYW": {
"message": "An error occurred while disconnecting your Trello account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 87]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 61]],
"translation": "Beim Trennen Ihres Trello-Kontos ist ein Fehler aufgetreten."
},
"ZXSPJt": {
@@ -814,7 +791,7 @@
"comments": [],
"origin": [
["src/views/board/index.tsx", 400],
["src/views/card/index.tsx", 308],
["src/views/card/index.tsx", 309],
["src/views/public/board/index.tsx", 125]
],
"translation": "Board"
@@ -1228,7 +1205,7 @@
"message": "Card",
"placeholders": {},
"comments": [],
"origin": [["src/views/card/index.tsx", 308]],
"origin": [["src/views/card/index.tsx", 309]],
"translation": "Karte"
},
"fEY2vP": {
@@ -1236,8 +1213,8 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 354],
["src/views/card/index.tsx", 391]
["src/views/card/index.tsx", 355],
["src/views/card/index.tsx", 392]
],
"translation": "Karte nicht gefunden"
},
@@ -1379,7 +1356,7 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 345],
["src/views/card/index.tsx", 346],
["src/views/members/components/EditMemberPermissionsModal.tsx", 172],
["src/views/settings/components/NewApiKeyModal.tsx", 136]
],
@@ -1496,25 +1473,14 @@
],
"translation": "Bestätigen Sie Ihr neues Passwort"
},
"iSLIjg": {
"message": "Connect",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 195]],
"translation": "Verbinden"
},
"3jod3l": {
"message": "Connect GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 212]],
"translation": "GitHub verbinden"
},
"nk7caK": {
"message": "Connect Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 162]],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 157],
["src/views/settings/IntegrationsSettings.tsx", 93]
],
"translation": "Trello verbinden"
},
"sDLCvT": {
@@ -1524,18 +1490,11 @@
"origin": [["src/views/home/components/Features.tsx", 122]],
"translation": "Verbinden Sie Ihre bevorzugten Tools, um Ihren Workflow zu optimieren."
},
"MCIXdZ": {
"message": "Connect your GitHub account to import projects.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 191]],
"translation": "Verbinden Sie Ihr GitHub-Konto, um Projekte zu importieren."
},
"5eZwRW": {
"message": "Connect your Trello account to import boards.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 149]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 80]],
"translation": "Verbinden Sie Ihr Trello-Konto, um Boards zu importieren."
},
"jfC/xh": {
@@ -1999,18 +1958,11 @@
"origin": [["src/views/boards/components/TemplateBoards.tsx", 45]],
"translation": "Design"
},
"Odv3J6": {
"message": "Disconnect GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 223]],
"translation": "GitHub trennen"
},
"YBBifR": {
"message": "Disconnect Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 177]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 108]],
"translation": "Trello trennen"
},
"1sRmLC": {
@@ -2355,13 +2307,6 @@
],
"translation": "Fehler beim Ändern des Passworts"
},
"yhLUU8": {
"message": "Error connecting GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 106]],
"translation": "Fehler beim Verbinden von GitHub"
},
"cji2nM": {
"message": "Error creating invite link",
"placeholders": {},
@@ -2401,18 +2346,11 @@
],
"translation": "Fehler beim Löschen des Arbeitsbereichs"
},
"gQ/02p": {
"message": "Error disconnecting GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 129]],
"translation": "Fehler beim Trennen von GitHub"
},
"lKAvEd": {
"message": "Error disconnecting Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 86]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 60]],
"translation": "Fehler beim Trennen von Trello"
},
"rarRW/": {
@@ -2793,26 +2731,9 @@
"message": "GitHub",
"placeholders": {},
"comments": [],
"origin": [
["src/views/home/components/Footer.tsx", 37],
["src/views/settings/IntegrationsSettings.tsx", 186]
],
"origin": [["src/views/home/components/Footer.tsx", 37]],
"translation": "GitHub"
},
"PVT7q7": {
"message": "GitHub connected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 99]],
"translation": "GitHub verbunden"
},
"/bBVaD": {
"message": "GitHub disconnected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 122]],
"translation": "GitHub getrennt"
},
"7eMo+U": {
"message": "Go Home",
"placeholders": {},
@@ -2991,20 +2912,14 @@
"message": "Import complete",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 229],
["src/views/boards/components/ImportBoardsForm.tsx", 381]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 191]],
"translation": "Import abgeschlossen"
},
"BEVzjL": {
"message": "Import failed",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 242],
["src/views/boards/components/ImportBoardsForm.tsx", 394]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 204]],
"translation": "Import fehlgeschlagen"
},
"rRM7r0": {
@@ -3598,7 +3513,7 @@
"message": "New import",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 513]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 322]],
"translation": "Neuer Import"
},
"n1GRql": {
@@ -3698,7 +3613,7 @@
"message": "No boards found",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 432]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 242]],
"translation": "Keine Boards gefunden"
},
"OpNhRn": {
@@ -3743,13 +3658,6 @@
"origin": [["src/views/board/index.tsx", 527]],
"translation": "Es wurden noch keine Listen erstellt"
},
"i30J2U": {
"message": "No projects found",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 283]],
"translation": "Keine Projekte gefunden"
},
"ERpq2P": {
"message": "No results found for \"{debouncedQuery}\".",
"placeholders": {
@@ -4113,8 +4021,7 @@
["src/views/board/components/VisibilityButton.tsx", 57],
["src/views/board/index.tsx", 181],
["src/views/board/index.tsx", 237],
["src/views/boards/components/ImportBoardsForm.tsx", 243],
["src/views/boards/components/ImportBoardsForm.tsx", 395],
["src/views/boards/components/ImportBoardsForm.tsx", 205],
["src/views/card/components/AttachmentThumbnails.tsx", 74],
["src/views/card/components/ChecklistItemRow.tsx", 69],
["src/views/card/components/ChecklistItemRow.tsx", 97],
@@ -4568,17 +4475,14 @@
"message": "Select all",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 315],
["src/views/boards/components/ImportBoardsForm.tsx", 464]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 274]],
"translation": "Alle auswählen"
},
"rYUZIe": {
"message": "Select source",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 195]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 157]],
"translation": "Quelle auswählen"
},
"ppaRWv": {
@@ -4665,7 +4569,7 @@
"message": "Settings | Integrations",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 138]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 69]],
"translation": "Einstellungen | Integrationen"
},
"F/FPk/": {
@@ -5160,13 +5064,6 @@
"origin": [["src/views/home/components/Header.tsx", 114]],
"translation": "Menü umschalten"
},
"L5WQLg": {
"message": "Token is required",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 19]],
"translation": "Token ist erforderlich"
},
"eEQyz+": {
"message": "Track all card changes with detailed activity history.",
"placeholders": {},
@@ -5180,7 +5077,7 @@
"comments": [],
"origin": [
["src/views/pricing/components/FeatureComparisonTable.tsx", 218],
["src/views/settings/IntegrationsSettings.tsx", 142]
["src/views/settings/IntegrationsSettings.tsx", 73]
],
"translation": "Trello"
},
@@ -5188,7 +5085,7 @@
"message": "Trello disconnected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 79]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 53]],
"translation": "Trello getrennt"
},
"kxEs5t": {
@@ -6124,7 +6021,7 @@
"message": "Your boards have been imported.",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 382]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 192]],
"translation": "Ihre Boards wurden importiert."
},
"LqWW5F": {
@@ -6141,27 +6038,6 @@
"origin": [["src/views/card/components/AttachmentUpload.tsx", 46]],
"translation": "Ihre Datei wurde erfolgreich hochgeladen."
},
"HcT8J4": {
"message": "Your GitHub account has been connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 100]],
"translation": "Ihr GitHub-Konto wurde verbunden."
},
"AdxYds": {
"message": "Your GitHub account has been disconnected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 123]],
"translation": "Ihr GitHub-Konto wurde getrennt."
},
"PELbXB": {
"message": "Your GitHub account is connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 220]],
"translation": "Ihr GitHub-Konto ist verbunden."
},
"Ozt2vv": {
"message": "Your password has been changed.",
"placeholders": {},
@@ -6178,25 +6054,18 @@
"origin": [["src/views/settings/components/Avatar.tsx", 190]],
"translation": "Ihr Profilbild wurde aktualisiert."
},
"+jbXzb": {
"message": "Your projects have been imported.",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 230]],
"translation": "Ihre Projekte wurden importiert."
},
"CJWDTP": {
"message": "Your Trello account has been disconnected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 80]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 54]],
"translation": "Ihr Trello-Konto wurde getrennt."
},
"WRsbHO": {
"message": "Your Trello account is connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 171]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 102]],
"translation": "Ihr Trello-Konto ist verbunden."
},
"25fAUC": {

File diff suppressed because one or more lines are too long

View File

@@ -59,7 +59,7 @@
],
[
"src/views/card/index.tsx",
308
309
]
],
"translation": "{0} | {1}"
@@ -139,27 +139,11 @@
"origin": [
[
"src/views/boards/components/ImportBoardsForm.tsx",
489
299
]
],
"translation": "{boardCount, plural, one {Import board (1)} other {Import boards ({boardCount})}}"
},
"yndBF+": {
"message": "{projectCount, plural, one {Import project (1)} other {Import projects ({projectCount})}}",
"placeholders": {
"projectCount": [
"projectCount"
]
},
"comments": [],
"origin": [
[
"src/views/boards/components/ImportBoardsForm.tsx",
341
]
],
"translation": "{projectCount, plural, one {Import project (1)} other {Import projects ({projectCount})}}"
},
"9lFfqv": {
"message": "/month",
"placeholders": {},
@@ -347,7 +331,7 @@
"origin": [
[
"src/views/card/index.tsx",
446
447
],
[
"src/views/public/board/CardModal.tsx",
@@ -846,30 +830,6 @@
],
"translation": "Already have an account? <0><1>Sign in</1></0>"
},
"j1+HPc": {
"message": "An error occurred while connecting your GitHub account.",
"placeholders": {},
"comments": [],
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
107
]
],
"translation": "An error occurred while connecting your GitHub account."
},
"Dz63YI": {
"message": "An error occurred while disconnecting your GitHub account.",
"placeholders": {},
"comments": [],
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
130
]
],
"translation": "An error occurred while disconnecting your GitHub account."
},
"WmPhYW": {
"message": "An error occurred while disconnecting your Trello account.",
"placeholders": {},
@@ -877,7 +837,7 @@
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
87
61
]
],
"translation": "An error occurred while disconnecting your Trello account."
@@ -1365,7 +1325,7 @@
],
[
"src/views/card/index.tsx",
308
309
],
[
"src/views/public/board/index.tsx",
@@ -2061,7 +2021,7 @@
"origin": [
[
"src/views/card/index.tsx",
308
309
]
],
"translation": "Card"
@@ -2073,11 +2033,11 @@
"origin": [
[
"src/views/card/index.tsx",
354
355
],
[
"src/views/card/index.tsx",
391
392
]
],
"translation": "Card not found"
@@ -2301,7 +2261,7 @@
"origin": [
[
"src/views/card/index.tsx",
345
346
],
[
"src/views/members/components/EditMemberPermissionsModal.tsx",
@@ -2498,38 +2458,18 @@
],
"translation": "Confirm your new password"
},
"iSLIjg": {
"message": "Connect",
"placeholders": {},
"comments": [],
"origin": [
[
"src/views/boards/components/ImportBoardsForm.tsx",
195
]
],
"translation": "Connect"
},
"3jod3l": {
"message": "Connect GitHub",
"placeholders": {},
"comments": [],
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
212
]
],
"translation": "Connect GitHub"
},
"nk7caK": {
"message": "Connect Trello",
"placeholders": {},
"comments": [],
"origin": [
[
"src/views/boards/components/ImportBoardsForm.tsx",
157
],
[
"src/views/settings/IntegrationsSettings.tsx",
162
93
]
],
"translation": "Connect Trello"
@@ -2546,18 +2486,6 @@
],
"translation": "Connect your favorite tools to streamline your workflow."
},
"MCIXdZ": {
"message": "Connect your GitHub account to import projects.",
"placeholders": {},
"comments": [],
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
191
]
],
"translation": "Connect your GitHub account to import projects."
},
"5eZwRW": {
"message": "Connect your Trello account to import boards.",
"placeholders": {},
@@ -2565,7 +2493,7 @@
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
149
80
]
],
"translation": "Connect your Trello account to import boards."
@@ -3362,18 +3290,6 @@
],
"translation": "Design"
},
"Odv3J6": {
"message": "Disconnect GitHub",
"placeholders": {},
"comments": [],
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
223
]
],
"translation": "Disconnect GitHub"
},
"YBBifR": {
"message": "Disconnect Trello",
"placeholders": {},
@@ -3381,7 +3297,7 @@
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
177
108
]
],
"translation": "Disconnect Trello"
@@ -3970,18 +3886,6 @@
],
"translation": "Error Changing Password"
},
"yhLUU8": {
"message": "Error connecting GitHub",
"placeholders": {},
"comments": [],
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
106
]
],
"translation": "Error connecting GitHub"
},
"cji2nM": {
"message": "Error creating invite link",
"placeholders": {},
@@ -4042,18 +3946,6 @@
],
"translation": "Error deleting workspace"
},
"gQ/02p": {
"message": "Error disconnecting GitHub",
"placeholders": {},
"comments": [],
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
129
]
],
"translation": "Error disconnecting GitHub"
},
"lKAvEd": {
"message": "Error disconnecting Trello",
"placeholders": {},
@@ -4061,7 +3953,7 @@
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
86
60
]
],
"translation": "Error disconnecting Trello"
@@ -4714,38 +4606,10 @@
[
"src/views/home/components/Footer.tsx",
37
],
[
"src/views/settings/IntegrationsSettings.tsx",
186
]
],
"translation": "GitHub"
},
"PVT7q7": {
"message": "GitHub connected",
"placeholders": {},
"comments": [],
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
99
]
],
"translation": "GitHub connected"
},
"/bBVaD": {
"message": "GitHub disconnected",
"placeholders": {},
"comments": [],
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
122
]
],
"translation": "GitHub disconnected"
},
"7eMo+U": {
"message": "Go Home",
"placeholders": {},
@@ -5041,11 +4905,7 @@
"origin": [
[
"src/views/boards/components/ImportBoardsForm.tsx",
229
],
[
"src/views/boards/components/ImportBoardsForm.tsx",
381
191
]
],
"translation": "Import complete"
@@ -5057,11 +4917,7 @@
"origin": [
[
"src/views/boards/components/ImportBoardsForm.tsx",
242
],
[
"src/views/boards/components/ImportBoardsForm.tsx",
394
204
]
],
"translation": "Import failed"
@@ -6076,7 +5932,7 @@
"origin": [
[
"src/views/boards/components/ImportBoardsForm.tsx",
513
322
]
],
"translation": "New import"
@@ -6240,7 +6096,7 @@
"origin": [
[
"src/views/boards/components/ImportBoardsForm.tsx",
432
242
]
],
"translation": "No boards found"
@@ -6317,18 +6173,6 @@
],
"translation": "No lists have been created yet"
},
"i30J2U": {
"message": "No projects found",
"placeholders": {},
"comments": [],
"origin": [
[
"src/views/boards/components/ImportBoardsForm.tsx",
283
]
],
"translation": "No projects found"
},
"ERpq2P": {
"message": "No results found for \"{debouncedQuery}\".",
"placeholders": {
@@ -6948,11 +6792,7 @@
],
[
"src/views/boards/components/ImportBoardsForm.tsx",
243
],
[
"src/views/boards/components/ImportBoardsForm.tsx",
395
205
],
[
"src/views/card/components/AttachmentThumbnails.tsx",
@@ -7807,11 +7647,7 @@
"origin": [
[
"src/views/boards/components/ImportBoardsForm.tsx",
315
],
[
"src/views/boards/components/ImportBoardsForm.tsx",
464
274
]
],
"translation": "Select all"
@@ -7823,7 +7659,7 @@
"origin": [
[
"src/views/boards/components/ImportBoardsForm.tsx",
195
157
]
],
"translation": "Select source"
@@ -7971,7 +7807,7 @@
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
138
69
]
],
"translation": "Settings | Integrations"
@@ -8776,18 +8612,6 @@
],
"translation": "Toggle menu"
},
"L5WQLg": {
"message": "Token is required",
"placeholders": {},
"comments": [],
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
19
]
],
"translation": "Token is required"
},
"eEQyz+": {
"message": "Track all card changes with detailed activity history.",
"placeholders": {},
@@ -8811,7 +8635,7 @@
],
[
"src/views/settings/IntegrationsSettings.tsx",
142
73
]
],
"translation": "Trello"
@@ -8823,7 +8647,7 @@
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
79
53
]
],
"translation": "Trello disconnected"
@@ -10423,7 +10247,7 @@
"origin": [
[
"src/views/boards/components/ImportBoardsForm.tsx",
382
192
]
],
"translation": "Your boards have been imported."
@@ -10452,42 +10276,6 @@
],
"translation": "Your file has been uploaded successfully."
},
"HcT8J4": {
"message": "Your GitHub account has been connected.",
"placeholders": {},
"comments": [],
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
100
]
],
"translation": "Your GitHub account has been connected."
},
"AdxYds": {
"message": "Your GitHub account has been disconnected.",
"placeholders": {},
"comments": [],
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
123
]
],
"translation": "Your GitHub account has been disconnected."
},
"PELbXB": {
"message": "Your GitHub account is connected.",
"placeholders": {},
"comments": [],
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
220
]
],
"translation": "Your GitHub account is connected."
},
"Ozt2vv": {
"message": "Your password has been changed.",
"placeholders": {},
@@ -10512,18 +10300,6 @@
],
"translation": "Your profile image has been updated."
},
"+jbXzb": {
"message": "Your projects have been imported.",
"placeholders": {},
"comments": [],
"origin": [
[
"src/views/boards/components/ImportBoardsForm.tsx",
230
]
],
"translation": "Your projects have been imported."
},
"CJWDTP": {
"message": "Your Trello account has been disconnected.",
"placeholders": {},
@@ -10531,7 +10307,7 @@
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
80
54
]
],
"translation": "Your Trello account has been disconnected."
@@ -10543,7 +10319,7 @@
"origin": [
[
"src/views/settings/IntegrationsSettings.tsx",
171
102
]
],
"translation": "Your Trello account is connected."

File diff suppressed because one or more lines are too long

View File

@@ -34,7 +34,7 @@
"comments": [],
"origin": [
["src/views/boards/index.tsx", 48],
["src/views/card/index.tsx", 308]
["src/views/card/index.tsx", 309]
],
"translation": "{0} | {1}"
},
@@ -80,18 +80,9 @@
"boardCount": ["boardCount"]
},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 489]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 299]],
"translation": "{boardCount, plural, one {Importar tablero (1)} other {Importar tableros ({boardCount})}}"
},
"yndBF+": {
"message": "{projectCount, plural, one {Import project (1)} other {Import projects ({projectCount})}}",
"placeholders": {
"projectCount": ["projectCount"]
},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 341]],
"translation": "{projectCount, plural, one {Importar proyecto (1)} other {Importar proyectos ({projectCount})}}"
},
"9lFfqv": {
"message": "/month",
"placeholders": {},
@@ -206,7 +197,7 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 446],
["src/views/card/index.tsx", 447],
["src/views/public/board/CardModal.tsx", 189]
],
"translation": "Actividad"
@@ -501,25 +492,11 @@
"origin": [["src/views/auth/signup/index.tsx", 90]],
"translation": "¿Ya tienes una cuenta? <0><1>Inicia sesión</1></0>"
},
"j1+HPc": {
"message": "An error occurred while connecting your GitHub account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 107]],
"translation": "Ocurrió un error al conectar tu cuenta de GitHub."
},
"Dz63YI": {
"message": "An error occurred while disconnecting your GitHub account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 130]],
"translation": "Ocurrió un error al desconectar tu cuenta de GitHub."
},
"WmPhYW": {
"message": "An error occurred while disconnecting your Trello account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 87]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 61]],
"translation": "Se produjo un error al desconectar tu cuenta de Trello."
},
"ZXSPJt": {
@@ -814,7 +791,7 @@
"comments": [],
"origin": [
["src/views/board/index.tsx", 400],
["src/views/card/index.tsx", 308],
["src/views/card/index.tsx", 309],
["src/views/public/board/index.tsx", 125]
],
"translation": "Tablero"
@@ -1228,7 +1205,7 @@
"message": "Card",
"placeholders": {},
"comments": [],
"origin": [["src/views/card/index.tsx", 308]],
"origin": [["src/views/card/index.tsx", 309]],
"translation": "Tarjeta"
},
"fEY2vP": {
@@ -1236,8 +1213,8 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 354],
["src/views/card/index.tsx", 391]
["src/views/card/index.tsx", 355],
["src/views/card/index.tsx", 392]
],
"translation": "Tarjeta no encontrada"
},
@@ -1379,7 +1356,7 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 345],
["src/views/card/index.tsx", 346],
["src/views/members/components/EditMemberPermissionsModal.tsx", 172],
["src/views/settings/components/NewApiKeyModal.tsx", 136]
],
@@ -1496,25 +1473,14 @@
],
"translation": "Confirma tu nueva contraseña"
},
"iSLIjg": {
"message": "Connect",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 195]],
"translation": "Conectar"
},
"3jod3l": {
"message": "Connect GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 212]],
"translation": "Conectar GitHub"
},
"nk7caK": {
"message": "Connect Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 162]],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 157],
["src/views/settings/IntegrationsSettings.tsx", 93]
],
"translation": "Conectar Trello"
},
"sDLCvT": {
@@ -1524,18 +1490,11 @@
"origin": [["src/views/home/components/Features.tsx", 122]],
"translation": "Conecta tus herramientas favoritas para optimizar tu flujo de trabajo."
},
"MCIXdZ": {
"message": "Connect your GitHub account to import projects.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 191]],
"translation": "Conecta tu cuenta de GitHub para importar proyectos."
},
"5eZwRW": {
"message": "Connect your Trello account to import boards.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 149]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 80]],
"translation": "Conecta tu cuenta de Trello para importar tableros."
},
"jfC/xh": {
@@ -1999,18 +1958,11 @@
"origin": [["src/views/boards/components/TemplateBoards.tsx", 45]],
"translation": "Diseño"
},
"Odv3J6": {
"message": "Disconnect GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 223]],
"translation": "Desconectar GitHub"
},
"YBBifR": {
"message": "Disconnect Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 177]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 108]],
"translation": "Desconectar Trello"
},
"1sRmLC": {
@@ -2355,13 +2307,6 @@
],
"translation": "Error al cambiar la contraseña"
},
"yhLUU8": {
"message": "Error connecting GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 106]],
"translation": "Error al conectar GitHub"
},
"cji2nM": {
"message": "Error creating invite link",
"placeholders": {},
@@ -2401,18 +2346,11 @@
],
"translation": "Error al eliminar el espacio de trabajo"
},
"gQ/02p": {
"message": "Error disconnecting GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 129]],
"translation": "Error al desconectar GitHub"
},
"lKAvEd": {
"message": "Error disconnecting Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 86]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 60]],
"translation": "Error al desconectar Trello"
},
"rarRW/": {
@@ -2793,26 +2731,9 @@
"message": "GitHub",
"placeholders": {},
"comments": [],
"origin": [
["src/views/home/components/Footer.tsx", 37],
["src/views/settings/IntegrationsSettings.tsx", 186]
],
"origin": [["src/views/home/components/Footer.tsx", 37]],
"translation": "GitHub"
},
"PVT7q7": {
"message": "GitHub connected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 99]],
"translation": "GitHub conectado"
},
"/bBVaD": {
"message": "GitHub disconnected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 122]],
"translation": "GitHub desconectado"
},
"7eMo+U": {
"message": "Go Home",
"placeholders": {},
@@ -2991,20 +2912,14 @@
"message": "Import complete",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 229],
["src/views/boards/components/ImportBoardsForm.tsx", 381]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 191]],
"translation": "Importación completada"
},
"BEVzjL": {
"message": "Import failed",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 242],
["src/views/boards/components/ImportBoardsForm.tsx", 394]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 204]],
"translation": "Importación fallida"
},
"rRM7r0": {
@@ -3598,7 +3513,7 @@
"message": "New import",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 513]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 322]],
"translation": "Nueva importación"
},
"n1GRql": {
@@ -3698,7 +3613,7 @@
"message": "No boards found",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 432]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 242]],
"translation": "No se encontraron tableros"
},
"OpNhRn": {
@@ -3743,13 +3658,6 @@
"origin": [["src/views/board/index.tsx", 527]],
"translation": "Aún no se han creado listas"
},
"i30J2U": {
"message": "No projects found",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 283]],
"translation": "No se encontraron proyectos"
},
"ERpq2P": {
"message": "No results found for \"{debouncedQuery}\".",
"placeholders": {
@@ -4113,8 +4021,7 @@
["src/views/board/components/VisibilityButton.tsx", 57],
["src/views/board/index.tsx", 181],
["src/views/board/index.tsx", 237],
["src/views/boards/components/ImportBoardsForm.tsx", 243],
["src/views/boards/components/ImportBoardsForm.tsx", 395],
["src/views/boards/components/ImportBoardsForm.tsx", 205],
["src/views/card/components/AttachmentThumbnails.tsx", 74],
["src/views/card/components/ChecklistItemRow.tsx", 69],
["src/views/card/components/ChecklistItemRow.tsx", 97],
@@ -4568,17 +4475,14 @@
"message": "Select all",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 315],
["src/views/boards/components/ImportBoardsForm.tsx", 464]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 274]],
"translation": "Seleccionar todo"
},
"rYUZIe": {
"message": "Select source",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 195]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 157]],
"translation": "Seleccionar origen"
},
"ppaRWv": {
@@ -4665,7 +4569,7 @@
"message": "Settings | Integrations",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 138]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 69]],
"translation": "Configuración | Integraciones"
},
"F/FPk/": {
@@ -5160,13 +5064,6 @@
"origin": [["src/views/home/components/Header.tsx", 114]],
"translation": "Alternar menú"
},
"L5WQLg": {
"message": "Token is required",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 19]],
"translation": "Se requiere el token"
},
"eEQyz+": {
"message": "Track all card changes with detailed activity history.",
"placeholders": {},
@@ -5180,7 +5077,7 @@
"comments": [],
"origin": [
["src/views/pricing/components/FeatureComparisonTable.tsx", 218],
["src/views/settings/IntegrationsSettings.tsx", 142]
["src/views/settings/IntegrationsSettings.tsx", 73]
],
"translation": "Trello"
},
@@ -5188,7 +5085,7 @@
"message": "Trello disconnected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 79]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 53]],
"translation": "Trello desconectado"
},
"kxEs5t": {
@@ -6124,7 +6021,7 @@
"message": "Your boards have been imported.",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 382]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 192]],
"translation": "Tus tableros han sido importados."
},
"LqWW5F": {
@@ -6141,27 +6038,6 @@
"origin": [["src/views/card/components/AttachmentUpload.tsx", 46]],
"translation": "Tu archivo se ha subido correctamente."
},
"HcT8J4": {
"message": "Your GitHub account has been connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 100]],
"translation": "Tu cuenta de GitHub ha sido conectada."
},
"AdxYds": {
"message": "Your GitHub account has been disconnected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 123]],
"translation": "Tu cuenta de GitHub ha sido desconectada."
},
"PELbXB": {
"message": "Your GitHub account is connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 220]],
"translation": "Tu cuenta de GitHub está conectada."
},
"Ozt2vv": {
"message": "Your password has been changed.",
"placeholders": {},
@@ -6178,25 +6054,18 @@
"origin": [["src/views/settings/components/Avatar.tsx", 190]],
"translation": "Tu imagen de perfil ha sido actualizada."
},
"+jbXzb": {
"message": "Your projects have been imported.",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 230]],
"translation": "Tus proyectos han sido importados."
},
"CJWDTP": {
"message": "Your Trello account has been disconnected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 80]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 54]],
"translation": "Tu cuenta de Trello ha sido desconectada."
},
"WRsbHO": {
"message": "Your Trello account is connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 171]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 102]],
"translation": "Tu cuenta de Trello está conectada."
},
"25fAUC": {

File diff suppressed because one or more lines are too long

View File

@@ -34,7 +34,7 @@
"comments": [],
"origin": [
["src/views/boards/index.tsx", 48],
["src/views/card/index.tsx", 308]
["src/views/card/index.tsx", 309]
],
"translation": "{0} | {1}"
},
@@ -80,18 +80,9 @@
"boardCount": ["boardCount"]
},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 489]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 299]],
"translation": "{boardCount, plural, one {Importer le tableau (1)} other {Importer les tableaux ({boardCount})}}"
},
"yndBF+": {
"message": "{projectCount, plural, one {Import project (1)} other {Import projects ({projectCount})}}",
"placeholders": {
"projectCount": ["projectCount"]
},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 341]],
"translation": "{projectCount, plural, one {Importer le projet (1)} other {Importer les projets ({projectCount})}}"
},
"9lFfqv": {
"message": "/month",
"placeholders": {},
@@ -206,7 +197,7 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 446],
["src/views/card/index.tsx", 447],
["src/views/public/board/CardModal.tsx", 189]
],
"translation": "Activité"
@@ -501,25 +492,11 @@
"origin": [["src/views/auth/signup/index.tsx", 90]],
"translation": "Vous avez déjà un compte ? <0><1>Se connecter</1></0>"
},
"j1+HPc": {
"message": "An error occurred while connecting your GitHub account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 107]],
"translation": "Une erreur s'est produite lors de la connexion de votre compte GitHub."
},
"Dz63YI": {
"message": "An error occurred while disconnecting your GitHub account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 130]],
"translation": "Une erreur s'est produite lors de la déconnexion de votre compte GitHub."
},
"WmPhYW": {
"message": "An error occurred while disconnecting your Trello account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 87]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 61]],
"translation": "Une erreur s'est produite lors de la déconnexion de votre compte Trello."
},
"ZXSPJt": {
@@ -814,7 +791,7 @@
"comments": [],
"origin": [
["src/views/board/index.tsx", 400],
["src/views/card/index.tsx", 308],
["src/views/card/index.tsx", 309],
["src/views/public/board/index.tsx", 125]
],
"translation": "Tableau"
@@ -1228,7 +1205,7 @@
"message": "Card",
"placeholders": {},
"comments": [],
"origin": [["src/views/card/index.tsx", 308]],
"origin": [["src/views/card/index.tsx", 309]],
"translation": "Carte"
},
"fEY2vP": {
@@ -1236,8 +1213,8 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 354],
["src/views/card/index.tsx", 391]
["src/views/card/index.tsx", 355],
["src/views/card/index.tsx", 392]
],
"translation": "Carte introuvable"
},
@@ -1379,7 +1356,7 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 345],
["src/views/card/index.tsx", 346],
["src/views/members/components/EditMemberPermissionsModal.tsx", 172],
["src/views/settings/components/NewApiKeyModal.tsx", 136]
],
@@ -1496,25 +1473,14 @@
],
"translation": "Confirmez votre nouveau mot de passe"
},
"iSLIjg": {
"message": "Connect",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 195]],
"translation": "Connecter"
},
"3jod3l": {
"message": "Connect GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 212]],
"translation": "Connecter GitHub"
},
"nk7caK": {
"message": "Connect Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 162]],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 157],
["src/views/settings/IntegrationsSettings.tsx", 93]
],
"translation": "Connecter Trello"
},
"sDLCvT": {
@@ -1524,18 +1490,11 @@
"origin": [["src/views/home/components/Features.tsx", 122]],
"translation": "Connectez vos outils préférés pour optimiser votre flux de travail."
},
"MCIXdZ": {
"message": "Connect your GitHub account to import projects.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 191]],
"translation": "Connectez votre compte GitHub pour importer des projets."
},
"5eZwRW": {
"message": "Connect your Trello account to import boards.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 149]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 80]],
"translation": "Connectez votre compte Trello pour importer des tableaux."
},
"jfC/xh": {
@@ -1999,18 +1958,11 @@
"origin": [["src/views/boards/components/TemplateBoards.tsx", 45]],
"translation": "Design"
},
"Odv3J6": {
"message": "Disconnect GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 223]],
"translation": "Déconnecter GitHub"
},
"YBBifR": {
"message": "Disconnect Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 177]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 108]],
"translation": "Déconnecter Trello"
},
"1sRmLC": {
@@ -2355,13 +2307,6 @@
],
"translation": "Erreur lors du changement de mot de passe"
},
"yhLUU8": {
"message": "Error connecting GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 106]],
"translation": "Erreur de connexion à GitHub"
},
"cji2nM": {
"message": "Error creating invite link",
"placeholders": {},
@@ -2401,18 +2346,11 @@
],
"translation": "Erreur lors de la suppression de l'espace de travail"
},
"gQ/02p": {
"message": "Error disconnecting GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 129]],
"translation": "Erreur de déconnexion de GitHub"
},
"lKAvEd": {
"message": "Error disconnecting Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 86]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 60]],
"translation": "Erreur lors de la déconnexion de Trello"
},
"rarRW/": {
@@ -2793,26 +2731,9 @@
"message": "GitHub",
"placeholders": {},
"comments": [],
"origin": [
["src/views/home/components/Footer.tsx", 37],
["src/views/settings/IntegrationsSettings.tsx", 186]
],
"origin": [["src/views/home/components/Footer.tsx", 37]],
"translation": "GitHub"
},
"PVT7q7": {
"message": "GitHub connected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 99]],
"translation": "GitHub connecté"
},
"/bBVaD": {
"message": "GitHub disconnected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 122]],
"translation": "GitHub déconnecté"
},
"7eMo+U": {
"message": "Go Home",
"placeholders": {},
@@ -2991,20 +2912,14 @@
"message": "Import complete",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 229],
["src/views/boards/components/ImportBoardsForm.tsx", 381]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 191]],
"translation": "Importation terminée"
},
"BEVzjL": {
"message": "Import failed",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 242],
["src/views/boards/components/ImportBoardsForm.tsx", 394]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 204]],
"translation": "Échec de l'importation"
},
"rRM7r0": {
@@ -3598,7 +3513,7 @@
"message": "New import",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 513]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 322]],
"translation": "Nouvel import"
},
"n1GRql": {
@@ -3698,7 +3613,7 @@
"message": "No boards found",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 432]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 242]],
"translation": "Aucun tableau trouvé"
},
"OpNhRn": {
@@ -3743,13 +3658,6 @@
"origin": [["src/views/board/index.tsx", 527]],
"translation": "Aucune liste n'a encore été créée"
},
"i30J2U": {
"message": "No projects found",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 283]],
"translation": "Aucun projet trouvé"
},
"ERpq2P": {
"message": "No results found for \"{debouncedQuery}\".",
"placeholders": {
@@ -4113,8 +4021,7 @@
["src/views/board/components/VisibilityButton.tsx", 57],
["src/views/board/index.tsx", 181],
["src/views/board/index.tsx", 237],
["src/views/boards/components/ImportBoardsForm.tsx", 243],
["src/views/boards/components/ImportBoardsForm.tsx", 395],
["src/views/boards/components/ImportBoardsForm.tsx", 205],
["src/views/card/components/AttachmentThumbnails.tsx", 74],
["src/views/card/components/ChecklistItemRow.tsx", 69],
["src/views/card/components/ChecklistItemRow.tsx", 97],
@@ -4568,17 +4475,14 @@
"message": "Select all",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 315],
["src/views/boards/components/ImportBoardsForm.tsx", 464]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 274]],
"translation": "Tout sélectionner"
},
"rYUZIe": {
"message": "Select source",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 195]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 157]],
"translation": "Sélectionner la source"
},
"ppaRWv": {
@@ -4665,7 +4569,7 @@
"message": "Settings | Integrations",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 138]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 69]],
"translation": "Paramètres | Intégrations"
},
"F/FPk/": {
@@ -5160,13 +5064,6 @@
"origin": [["src/views/home/components/Header.tsx", 114]],
"translation": "Basculer le menu"
},
"L5WQLg": {
"message": "Token is required",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 19]],
"translation": "Le jeton est requis"
},
"eEQyz+": {
"message": "Track all card changes with detailed activity history.",
"placeholders": {},
@@ -5180,7 +5077,7 @@
"comments": [],
"origin": [
["src/views/pricing/components/FeatureComparisonTable.tsx", 218],
["src/views/settings/IntegrationsSettings.tsx", 142]
["src/views/settings/IntegrationsSettings.tsx", 73]
],
"translation": "Trello"
},
@@ -5188,7 +5085,7 @@
"message": "Trello disconnected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 79]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 53]],
"translation": "Trello déconnecté"
},
"kxEs5t": {
@@ -6124,7 +6021,7 @@
"message": "Your boards have been imported.",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 382]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 192]],
"translation": "Vos tableaux ont été importés."
},
"LqWW5F": {
@@ -6141,27 +6038,6 @@
"origin": [["src/views/card/components/AttachmentUpload.tsx", 46]],
"translation": "Votre fichier a été téléchargé avec succès."
},
"HcT8J4": {
"message": "Your GitHub account has been connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 100]],
"translation": "Votre compte GitHub a été connecté."
},
"AdxYds": {
"message": "Your GitHub account has been disconnected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 123]],
"translation": "Votre compte GitHub a été déconnecté."
},
"PELbXB": {
"message": "Your GitHub account is connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 220]],
"translation": "Votre compte GitHub est connecté."
},
"Ozt2vv": {
"message": "Your password has been changed.",
"placeholders": {},
@@ -6178,25 +6054,18 @@
"origin": [["src/views/settings/components/Avatar.tsx", 190]],
"translation": "Votre image de profil a été mise à jour."
},
"+jbXzb": {
"message": "Your projects have been imported.",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 230]],
"translation": "Vos projets ont été importés."
},
"CJWDTP": {
"message": "Your Trello account has been disconnected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 80]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 54]],
"translation": "Votre compte Trello a été déconnecté."
},
"WRsbHO": {
"message": "Your Trello account is connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 171]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 102]],
"translation": "Votre compte Trello est connecté."
},
"25fAUC": {

File diff suppressed because one or more lines are too long

View File

@@ -34,7 +34,7 @@
"comments": [],
"origin": [
["src/views/boards/index.tsx", 48],
["src/views/card/index.tsx", 308]
["src/views/card/index.tsx", 309]
],
"translation": "{0} | {1}"
},
@@ -80,18 +80,9 @@
"boardCount": ["boardCount"]
},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 489]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 299]],
"translation": "{boardCount, plural, one {Importa bacheca (1)} other {Importa bacheche ({boardCount})}}"
},
"yndBF+": {
"message": "{projectCount, plural, one {Import project (1)} other {Import projects ({projectCount})}}",
"placeholders": {
"projectCount": ["projectCount"]
},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 341]],
"translation": "{projectCount, plural, one {Importa progetto (1)} other {Importa progetti ({projectCount})}}"
},
"9lFfqv": {
"message": "/month",
"placeholders": {},
@@ -206,7 +197,7 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 446],
["src/views/card/index.tsx", 447],
["src/views/public/board/CardModal.tsx", 189]
],
"translation": "Attività"
@@ -501,25 +492,11 @@
"origin": [["src/views/auth/signup/index.tsx", 90]],
"translation": "Hai già un account? <0><1>Accedi</1></0>"
},
"j1+HPc": {
"message": "An error occurred while connecting your GitHub account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 107]],
"translation": "Si è verificato un errore durante la connessione del tuo account GitHub."
},
"Dz63YI": {
"message": "An error occurred while disconnecting your GitHub account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 130]],
"translation": "Si è verificato un errore durante la disconnessione del tuo account GitHub."
},
"WmPhYW": {
"message": "An error occurred while disconnecting your Trello account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 87]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 61]],
"translation": "Si è verificato un errore durante la disconnessione del tuo account Trello."
},
"ZXSPJt": {
@@ -814,7 +791,7 @@
"comments": [],
"origin": [
["src/views/board/index.tsx", 400],
["src/views/card/index.tsx", 308],
["src/views/card/index.tsx", 309],
["src/views/public/board/index.tsx", 125]
],
"translation": "Board"
@@ -1228,7 +1205,7 @@
"message": "Card",
"placeholders": {},
"comments": [],
"origin": [["src/views/card/index.tsx", 308]],
"origin": [["src/views/card/index.tsx", 309]],
"translation": "Card"
},
"fEY2vP": {
@@ -1236,8 +1213,8 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 354],
["src/views/card/index.tsx", 391]
["src/views/card/index.tsx", 355],
["src/views/card/index.tsx", 392]
],
"translation": "Card non trovata"
},
@@ -1379,7 +1356,7 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 345],
["src/views/card/index.tsx", 346],
["src/views/members/components/EditMemberPermissionsModal.tsx", 172],
["src/views/settings/components/NewApiKeyModal.tsx", 136]
],
@@ -1496,25 +1473,14 @@
],
"translation": "Conferma la tua nuova password"
},
"iSLIjg": {
"message": "Connect",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 195]],
"translation": "Connetti"
},
"3jod3l": {
"message": "Connect GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 212]],
"translation": "Connetti GitHub"
},
"nk7caK": {
"message": "Connect Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 162]],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 157],
["src/views/settings/IntegrationsSettings.tsx", 93]
],
"translation": "Connetti Trello"
},
"sDLCvT": {
@@ -1524,18 +1490,11 @@
"origin": [["src/views/home/components/Features.tsx", 122]],
"translation": "Connetti i tuoi strumenti preferiti per semplificare il tuo flusso di lavoro."
},
"MCIXdZ": {
"message": "Connect your GitHub account to import projects.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 191]],
"translation": "Connetti il tuo account GitHub per importare progetti."
},
"5eZwRW": {
"message": "Connect your Trello account to import boards.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 149]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 80]],
"translation": "Connetti il tuo account Trello per importare le bacheche."
},
"jfC/xh": {
@@ -1999,18 +1958,11 @@
"origin": [["src/views/boards/components/TemplateBoards.tsx", 45]],
"translation": "Design"
},
"Odv3J6": {
"message": "Disconnect GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 223]],
"translation": "Disconnetti GitHub"
},
"YBBifR": {
"message": "Disconnect Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 177]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 108]],
"translation": "Disconnetti Trello"
},
"1sRmLC": {
@@ -2355,13 +2307,6 @@
],
"translation": "Errore durante la modifica della password"
},
"yhLUU8": {
"message": "Error connecting GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 106]],
"translation": "Errore nella connessione a GitHub"
},
"cji2nM": {
"message": "Error creating invite link",
"placeholders": {},
@@ -2401,18 +2346,11 @@
],
"translation": "Errore durante l'eliminazione dello spazio di lavoro"
},
"gQ/02p": {
"message": "Error disconnecting GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 129]],
"translation": "Errore nella disconnessione da GitHub"
},
"lKAvEd": {
"message": "Error disconnecting Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 86]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 60]],
"translation": "Errore durante la disconnessione da Trello"
},
"rarRW/": {
@@ -2793,26 +2731,9 @@
"message": "GitHub",
"placeholders": {},
"comments": [],
"origin": [
["src/views/home/components/Footer.tsx", 37],
["src/views/settings/IntegrationsSettings.tsx", 186]
],
"origin": [["src/views/home/components/Footer.tsx", 37]],
"translation": "GitHub"
},
"PVT7q7": {
"message": "GitHub connected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 99]],
"translation": "GitHub connesso"
},
"/bBVaD": {
"message": "GitHub disconnected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 122]],
"translation": "GitHub disconnesso"
},
"7eMo+U": {
"message": "Go Home",
"placeholders": {},
@@ -2991,20 +2912,14 @@
"message": "Import complete",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 229],
["src/views/boards/components/ImportBoardsForm.tsx", 381]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 191]],
"translation": "Importazione completata"
},
"BEVzjL": {
"message": "Import failed",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 242],
["src/views/boards/components/ImportBoardsForm.tsx", 394]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 204]],
"translation": "Importazione fallita"
},
"rRM7r0": {
@@ -3598,7 +3513,7 @@
"message": "New import",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 513]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 322]],
"translation": "Nuova importazione"
},
"n1GRql": {
@@ -3698,7 +3613,7 @@
"message": "No boards found",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 432]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 242]],
"translation": "Nessuna board trovata"
},
"OpNhRn": {
@@ -3743,13 +3658,6 @@
"origin": [["src/views/board/index.tsx", 527]],
"translation": "Nessuna lista è stata ancora creata"
},
"i30J2U": {
"message": "No projects found",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 283]],
"translation": "Nessun progetto trovato"
},
"ERpq2P": {
"message": "No results found for \"{debouncedQuery}\".",
"placeholders": {
@@ -4113,8 +4021,7 @@
["src/views/board/components/VisibilityButton.tsx", 57],
["src/views/board/index.tsx", 181],
["src/views/board/index.tsx", 237],
["src/views/boards/components/ImportBoardsForm.tsx", 243],
["src/views/boards/components/ImportBoardsForm.tsx", 395],
["src/views/boards/components/ImportBoardsForm.tsx", 205],
["src/views/card/components/AttachmentThumbnails.tsx", 74],
["src/views/card/components/ChecklistItemRow.tsx", 69],
["src/views/card/components/ChecklistItemRow.tsx", 97],
@@ -4568,17 +4475,14 @@
"message": "Select all",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 315],
["src/views/boards/components/ImportBoardsForm.tsx", 464]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 274]],
"translation": "Seleziona tutto"
},
"rYUZIe": {
"message": "Select source",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 195]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 157]],
"translation": "Seleziona origine"
},
"ppaRWv": {
@@ -4665,7 +4569,7 @@
"message": "Settings | Integrations",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 138]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 69]],
"translation": "Impostazioni | Integrazioni"
},
"F/FPk/": {
@@ -5160,13 +5064,6 @@
"origin": [["src/views/home/components/Header.tsx", 114]],
"translation": "Attiva/disattiva menu"
},
"L5WQLg": {
"message": "Token is required",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 19]],
"translation": "Il token è obbligatorio"
},
"eEQyz+": {
"message": "Track all card changes with detailed activity history.",
"placeholders": {},
@@ -5180,7 +5077,7 @@
"comments": [],
"origin": [
["src/views/pricing/components/FeatureComparisonTable.tsx", 218],
["src/views/settings/IntegrationsSettings.tsx", 142]
["src/views/settings/IntegrationsSettings.tsx", 73]
],
"translation": "Trello"
},
@@ -5188,7 +5085,7 @@
"message": "Trello disconnected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 79]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 53]],
"translation": "Trello disconnesso"
},
"kxEs5t": {
@@ -6124,7 +6021,7 @@
"message": "Your boards have been imported.",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 382]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 192]],
"translation": "Le tue board sono state importate."
},
"LqWW5F": {
@@ -6141,27 +6038,6 @@
"origin": [["src/views/card/components/AttachmentUpload.tsx", 46]],
"translation": "Il tuo file è stato caricato con successo."
},
"HcT8J4": {
"message": "Your GitHub account has been connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 100]],
"translation": "Il tuo account GitHub è stato connesso."
},
"AdxYds": {
"message": "Your GitHub account has been disconnected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 123]],
"translation": "Il tuo account GitHub è stato disconnesso."
},
"PELbXB": {
"message": "Your GitHub account is connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 220]],
"translation": "Il tuo account GitHub è connesso."
},
"Ozt2vv": {
"message": "Your password has been changed.",
"placeholders": {},
@@ -6178,25 +6054,18 @@
"origin": [["src/views/settings/components/Avatar.tsx", 190]],
"translation": "La tua immagine del profilo è stata aggiornata."
},
"+jbXzb": {
"message": "Your projects have been imported.",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 230]],
"translation": "I tuoi progetti sono stati importati."
},
"CJWDTP": {
"message": "Your Trello account has been disconnected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 80]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 54]],
"translation": "Il tuo account Trello è stato disconnesso."
},
"WRsbHO": {
"message": "Your Trello account is connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 171]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 102]],
"translation": "Il tuo account Trello è connesso."
},
"25fAUC": {

File diff suppressed because one or more lines are too long

View File

@@ -34,7 +34,7 @@
"comments": [],
"origin": [
["src/views/boards/index.tsx", 48],
["src/views/card/index.tsx", 308]
["src/views/card/index.tsx", 309]
],
"translation": "{0} | {1}"
},
@@ -80,18 +80,9 @@
"boardCount": ["boardCount"]
},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 489]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 299]],
"translation": "{boardCount, plural, one {Bord importeren (1)} other {Borden importeren ({boardCount})}}"
},
"yndBF+": {
"message": "{projectCount, plural, one {Import project (1)} other {Import projects ({projectCount})}}",
"placeholders": {
"projectCount": ["projectCount"]
},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 341]],
"translation": "{projectCount, plural, one {Project importeren (1)} other {Projecten importeren ({projectCount})}}"
},
"9lFfqv": {
"message": "/month",
"placeholders": {},
@@ -206,7 +197,7 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 446],
["src/views/card/index.tsx", 447],
["src/views/public/board/CardModal.tsx", 189]
],
"translation": "Activiteit"
@@ -501,25 +492,11 @@
"origin": [["src/views/auth/signup/index.tsx", 90]],
"translation": "Heb je al een account? <0><1>Inloggen</1></0>"
},
"j1+HPc": {
"message": "An error occurred while connecting your GitHub account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 107]],
"translation": "Er is een fout opgetreden bij het verbinden van je GitHub-account."
},
"Dz63YI": {
"message": "An error occurred while disconnecting your GitHub account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 130]],
"translation": "Er is een fout opgetreden bij het loskoppelen van je GitHub-account."
},
"WmPhYW": {
"message": "An error occurred while disconnecting your Trello account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 87]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 61]],
"translation": "Er is een fout opgetreden bij het loskoppelen van je Trello-account."
},
"ZXSPJt": {
@@ -814,7 +791,7 @@
"comments": [],
"origin": [
["src/views/board/index.tsx", 400],
["src/views/card/index.tsx", 308],
["src/views/card/index.tsx", 309],
["src/views/public/board/index.tsx", 125]
],
"translation": "Bord"
@@ -1228,7 +1205,7 @@
"message": "Card",
"placeholders": {},
"comments": [],
"origin": [["src/views/card/index.tsx", 308]],
"origin": [["src/views/card/index.tsx", 309]],
"translation": "Kaart"
},
"fEY2vP": {
@@ -1236,8 +1213,8 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 354],
["src/views/card/index.tsx", 391]
["src/views/card/index.tsx", 355],
["src/views/card/index.tsx", 392]
],
"translation": "Kaart niet gevonden"
},
@@ -1379,7 +1356,7 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 345],
["src/views/card/index.tsx", 346],
["src/views/members/components/EditMemberPermissionsModal.tsx", 172],
["src/views/settings/components/NewApiKeyModal.tsx", 136]
],
@@ -1496,25 +1473,14 @@
],
"translation": "Bevestig je nieuwe wachtwoord"
},
"iSLIjg": {
"message": "Connect",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 195]],
"translation": "Verbinden"
},
"3jod3l": {
"message": "Connect GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 212]],
"translation": "GitHub verbinden"
},
"nk7caK": {
"message": "Connect Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 162]],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 157],
["src/views/settings/IntegrationsSettings.tsx", 93]
],
"translation": "Verbind Trello"
},
"sDLCvT": {
@@ -1524,18 +1490,11 @@
"origin": [["src/views/home/components/Features.tsx", 122]],
"translation": "Verbind je favoriete tools om je workflow te stroomlijnen."
},
"MCIXdZ": {
"message": "Connect your GitHub account to import projects.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 191]],
"translation": "Verbind je GitHub-account om projecten te importeren."
},
"5eZwRW": {
"message": "Connect your Trello account to import boards.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 149]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 80]],
"translation": "Verbind je Trello-account om boards te importeren."
},
"jfC/xh": {
@@ -1999,18 +1958,11 @@
"origin": [["src/views/boards/components/TemplateBoards.tsx", 45]],
"translation": "Ontwerp"
},
"Odv3J6": {
"message": "Disconnect GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 223]],
"translation": "GitHub loskoppelen"
},
"YBBifR": {
"message": "Disconnect Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 177]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 108]],
"translation": "Trello loskoppelen"
},
"1sRmLC": {
@@ -2355,13 +2307,6 @@
],
"translation": "Fout bij wijzigen wachtwoord"
},
"yhLUU8": {
"message": "Error connecting GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 106]],
"translation": "Fout bij verbinden met GitHub"
},
"cji2nM": {
"message": "Error creating invite link",
"placeholders": {},
@@ -2401,18 +2346,11 @@
],
"translation": "Fout bij verwijderen werkruimte"
},
"gQ/02p": {
"message": "Error disconnecting GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 129]],
"translation": "Fout bij loskoppelen van GitHub"
},
"lKAvEd": {
"message": "Error disconnecting Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 86]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 60]],
"translation": "Fout bij loskoppelen Trello"
},
"rarRW/": {
@@ -2793,26 +2731,9 @@
"message": "GitHub",
"placeholders": {},
"comments": [],
"origin": [
["src/views/home/components/Footer.tsx", 37],
["src/views/settings/IntegrationsSettings.tsx", 186]
],
"origin": [["src/views/home/components/Footer.tsx", 37]],
"translation": "GitHub"
},
"PVT7q7": {
"message": "GitHub connected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 99]],
"translation": "GitHub verbonden"
},
"/bBVaD": {
"message": "GitHub disconnected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 122]],
"translation": "GitHub losgekoppeld"
},
"7eMo+U": {
"message": "Go Home",
"placeholders": {},
@@ -2991,20 +2912,14 @@
"message": "Import complete",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 229],
["src/views/boards/components/ImportBoardsForm.tsx", 381]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 191]],
"translation": "Import voltooid"
},
"BEVzjL": {
"message": "Import failed",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 242],
["src/views/boards/components/ImportBoardsForm.tsx", 394]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 204]],
"translation": "Import mislukt"
},
"rRM7r0": {
@@ -3598,7 +3513,7 @@
"message": "New import",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 513]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 322]],
"translation": "Nieuwe import"
},
"n1GRql": {
@@ -3698,7 +3613,7 @@
"message": "No boards found",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 432]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 242]],
"translation": "Geen borden gevonden"
},
"OpNhRn": {
@@ -3743,13 +3658,6 @@
"origin": [["src/views/board/index.tsx", 527]],
"translation": "Er zijn nog geen lijsten aangemaakt"
},
"i30J2U": {
"message": "No projects found",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 283]],
"translation": "Geen projecten gevonden"
},
"ERpq2P": {
"message": "No results found for \"{debouncedQuery}\".",
"placeholders": {
@@ -4113,8 +4021,7 @@
["src/views/board/components/VisibilityButton.tsx", 57],
["src/views/board/index.tsx", 181],
["src/views/board/index.tsx", 237],
["src/views/boards/components/ImportBoardsForm.tsx", 243],
["src/views/boards/components/ImportBoardsForm.tsx", 395],
["src/views/boards/components/ImportBoardsForm.tsx", 205],
["src/views/card/components/AttachmentThumbnails.tsx", 74],
["src/views/card/components/ChecklistItemRow.tsx", 69],
["src/views/card/components/ChecklistItemRow.tsx", 97],
@@ -4568,17 +4475,14 @@
"message": "Select all",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 315],
["src/views/boards/components/ImportBoardsForm.tsx", 464]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 274]],
"translation": "Alles selecteren"
},
"rYUZIe": {
"message": "Select source",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 195]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 157]],
"translation": "Selecteer bron"
},
"ppaRWv": {
@@ -4665,7 +4569,7 @@
"message": "Settings | Integrations",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 138]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 69]],
"translation": "Instellingen | Integraties"
},
"F/FPk/": {
@@ -5160,13 +5064,6 @@
"origin": [["src/views/home/components/Header.tsx", 114]],
"translation": "Menu in-/uitschakelen"
},
"L5WQLg": {
"message": "Token is required",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 19]],
"translation": "Token is vereist"
},
"eEQyz+": {
"message": "Track all card changes with detailed activity history.",
"placeholders": {},
@@ -5180,7 +5077,7 @@
"comments": [],
"origin": [
["src/views/pricing/components/FeatureComparisonTable.tsx", 218],
["src/views/settings/IntegrationsSettings.tsx", 142]
["src/views/settings/IntegrationsSettings.tsx", 73]
],
"translation": "Trello"
},
@@ -5188,7 +5085,7 @@
"message": "Trello disconnected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 79]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 53]],
"translation": "Trello losgekoppeld"
},
"kxEs5t": {
@@ -6124,7 +6021,7 @@
"message": "Your boards have been imported.",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 382]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 192]],
"translation": "Je borden zijn geïmporteerd."
},
"LqWW5F": {
@@ -6141,27 +6038,6 @@
"origin": [["src/views/card/components/AttachmentUpload.tsx", 46]],
"translation": "Je bestand is succesvol geüpload."
},
"HcT8J4": {
"message": "Your GitHub account has been connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 100]],
"translation": "Je GitHub-account is gekoppeld."
},
"AdxYds": {
"message": "Your GitHub account has been disconnected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 123]],
"translation": "Je GitHub-account is ontkoppeld."
},
"PELbXB": {
"message": "Your GitHub account is connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 220]],
"translation": "Je GitHub-account is gekoppeld."
},
"Ozt2vv": {
"message": "Your password has been changed.",
"placeholders": {},
@@ -6178,25 +6054,18 @@
"origin": [["src/views/settings/components/Avatar.tsx", 190]],
"translation": "Je profielafbeelding is bijgewerkt."
},
"+jbXzb": {
"message": "Your projects have been imported.",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 230]],
"translation": "Je projecten zijn geïmporteerd."
},
"CJWDTP": {
"message": "Your Trello account has been disconnected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 80]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 54]],
"translation": "Je Trello-account is losgekoppeld."
},
"WRsbHO": {
"message": "Your Trello account is connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 171]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 102]],
"translation": "Je Trello-account is gekoppeld."
},
"25fAUC": {

File diff suppressed because one or more lines are too long

View File

@@ -34,7 +34,7 @@
"comments": [],
"origin": [
["src/views/boards/index.tsx", 48],
["src/views/card/index.tsx", 308]
["src/views/card/index.tsx", 309]
],
"translation": "{0} | {1}"
},
@@ -80,18 +80,9 @@
"boardCount": ["boardCount"]
},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 489]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 299]],
"translation": "{boardCount, plural, one {Importuj tablicę (1)} few {Importuj tablice ({boardCount})} many {Importuj tablic ({boardCount})} other {Importuj tablice ({boardCount})}}"
},
"yndBF+": {
"message": "{projectCount, plural, one {Import project (1)} other {Import projects ({projectCount})}}",
"placeholders": {
"projectCount": ["projectCount"]
},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 341]],
"translation": "{projectCount, plural, one {Importuj projekt (1)} few {Importuj projekty ({projectCount})} many {Importuj projektów ({projectCount})} other {Importuj projekty ({projectCount})}}"
},
"9lFfqv": {
"message": "/month",
"placeholders": {},
@@ -206,7 +197,7 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 446],
["src/views/card/index.tsx", 447],
["src/views/public/board/CardModal.tsx", 189]
],
"translation": "Aktywność"
@@ -501,25 +492,11 @@
"origin": [["src/views/auth/signup/index.tsx", 90]],
"translation": "Masz już konto? <0><1>Zaloguj się</1></0>"
},
"j1+HPc": {
"message": "An error occurred while connecting your GitHub account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 107]],
"translation": "Wystąpił błąd podczas łączenia konta GitHub."
},
"Dz63YI": {
"message": "An error occurred while disconnecting your GitHub account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 130]],
"translation": "Wystąpił błąd podczas odłączania konta GitHub."
},
"WmPhYW": {
"message": "An error occurred while disconnecting your Trello account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 87]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 61]],
"translation": "Wystąpił błąd podczas odłączania konta Trello."
},
"ZXSPJt": {
@@ -814,7 +791,7 @@
"comments": [],
"origin": [
["src/views/board/index.tsx", 400],
["src/views/card/index.tsx", 308],
["src/views/card/index.tsx", 309],
["src/views/public/board/index.tsx", 125]
],
"translation": "Tablica"
@@ -1228,7 +1205,7 @@
"message": "Card",
"placeholders": {},
"comments": [],
"origin": [["src/views/card/index.tsx", 308]],
"origin": [["src/views/card/index.tsx", 309]],
"translation": "Karta"
},
"fEY2vP": {
@@ -1236,8 +1213,8 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 354],
["src/views/card/index.tsx", 391]
["src/views/card/index.tsx", 355],
["src/views/card/index.tsx", 392]
],
"translation": "Nie znaleziono karty"
},
@@ -1379,7 +1356,7 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 345],
["src/views/card/index.tsx", 346],
["src/views/members/components/EditMemberPermissionsModal.tsx", 172],
["src/views/settings/components/NewApiKeyModal.tsx", 136]
],
@@ -1496,25 +1473,14 @@
],
"translation": "Potwierdź nowe hasło"
},
"iSLIjg": {
"message": "Connect",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 195]],
"translation": "Połącz"
},
"3jod3l": {
"message": "Connect GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 212]],
"translation": "Połącz z GitHub"
},
"nk7caK": {
"message": "Connect Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 162]],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 157],
["src/views/settings/IntegrationsSettings.tsx", 93]
],
"translation": "Połącz Trello"
},
"sDLCvT": {
@@ -1524,18 +1490,11 @@
"origin": [["src/views/home/components/Features.tsx", 122]],
"translation": "Połącz swoje ulubione narzędzia, aby usprawnić pracę."
},
"MCIXdZ": {
"message": "Connect your GitHub account to import projects.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 191]],
"translation": "Połącz swoje konto GitHub, aby zaimportować projekty."
},
"5eZwRW": {
"message": "Connect your Trello account to import boards.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 149]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 80]],
"translation": "Połącz swoje konto Trello, aby zaimportować tablice."
},
"jfC/xh": {
@@ -1999,18 +1958,11 @@
"origin": [["src/views/boards/components/TemplateBoards.tsx", 45]],
"translation": "Design"
},
"Odv3J6": {
"message": "Disconnect GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 223]],
"translation": "Odłącz GitHub"
},
"YBBifR": {
"message": "Disconnect Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 177]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 108]],
"translation": "Odłącz Trello"
},
"1sRmLC": {
@@ -2355,13 +2307,6 @@
],
"translation": "Błąd podczas zmiany hasła"
},
"yhLUU8": {
"message": "Error connecting GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 106]],
"translation": "Błąd podczas łączenia z GitHub"
},
"cji2nM": {
"message": "Error creating invite link",
"placeholders": {},
@@ -2401,18 +2346,11 @@
],
"translation": "Błąd podczas usuwania przestrzeni roboczej"
},
"gQ/02p": {
"message": "Error disconnecting GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 129]],
"translation": "Błąd podczas odłączania GitHub"
},
"lKAvEd": {
"message": "Error disconnecting Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 86]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 60]],
"translation": "Błąd podczas odłączania Trello"
},
"rarRW/": {
@@ -2793,26 +2731,9 @@
"message": "GitHub",
"placeholders": {},
"comments": [],
"origin": [
["src/views/home/components/Footer.tsx", 37],
["src/views/settings/IntegrationsSettings.tsx", 186]
],
"origin": [["src/views/home/components/Footer.tsx", 37]],
"translation": "GitHub"
},
"PVT7q7": {
"message": "GitHub connected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 99]],
"translation": "GitHub połączony"
},
"/bBVaD": {
"message": "GitHub disconnected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 122]],
"translation": "GitHub odłączony"
},
"7eMo+U": {
"message": "Go Home",
"placeholders": {},
@@ -2991,20 +2912,14 @@
"message": "Import complete",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 229],
["src/views/boards/components/ImportBoardsForm.tsx", 381]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 191]],
"translation": "Import zakończony"
},
"BEVzjL": {
"message": "Import failed",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 242],
["src/views/boards/components/ImportBoardsForm.tsx", 394]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 204]],
"translation": "Import nie powiódł się"
},
"rRM7r0": {
@@ -3598,7 +3513,7 @@
"message": "New import",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 513]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 322]],
"translation": "Nowy import"
},
"n1GRql": {
@@ -3698,7 +3613,7 @@
"message": "No boards found",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 432]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 242]],
"translation": "Nie znaleziono żadnych tablic"
},
"OpNhRn": {
@@ -3743,13 +3658,6 @@
"origin": [["src/views/board/index.tsx", 527]],
"translation": "Nie utworzono jeszcze żadnych list"
},
"i30J2U": {
"message": "No projects found",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 283]],
"translation": "Nie znaleziono projektów"
},
"ERpq2P": {
"message": "No results found for \"{debouncedQuery}\".",
"placeholders": {
@@ -4113,8 +4021,7 @@
["src/views/board/components/VisibilityButton.tsx", 57],
["src/views/board/index.tsx", 181],
["src/views/board/index.tsx", 237],
["src/views/boards/components/ImportBoardsForm.tsx", 243],
["src/views/boards/components/ImportBoardsForm.tsx", 395],
["src/views/boards/components/ImportBoardsForm.tsx", 205],
["src/views/card/components/AttachmentThumbnails.tsx", 74],
["src/views/card/components/ChecklistItemRow.tsx", 69],
["src/views/card/components/ChecklistItemRow.tsx", 97],
@@ -4568,17 +4475,14 @@
"message": "Select all",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 315],
["src/views/boards/components/ImportBoardsForm.tsx", 464]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 274]],
"translation": "Zaznacz wszystko"
},
"rYUZIe": {
"message": "Select source",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 195]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 157]],
"translation": "Wybierz źródło"
},
"ppaRWv": {
@@ -4665,7 +4569,7 @@
"message": "Settings | Integrations",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 138]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 69]],
"translation": "Ustawienia | Integracje"
},
"F/FPk/": {
@@ -5160,13 +5064,6 @@
"origin": [["src/views/home/components/Header.tsx", 114]],
"translation": "Przełącz menu"
},
"L5WQLg": {
"message": "Token is required",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 19]],
"translation": "Wymagany jest token"
},
"eEQyz+": {
"message": "Track all card changes with detailed activity history.",
"placeholders": {},
@@ -5180,7 +5077,7 @@
"comments": [],
"origin": [
["src/views/pricing/components/FeatureComparisonTable.tsx", 218],
["src/views/settings/IntegrationsSettings.tsx", 142]
["src/views/settings/IntegrationsSettings.tsx", 73]
],
"translation": "Trello"
},
@@ -5188,7 +5085,7 @@
"message": "Trello disconnected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 79]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 53]],
"translation": "Trello zostało odłączone"
},
"kxEs5t": {
@@ -6124,7 +6021,7 @@
"message": "Your boards have been imported.",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 382]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 192]],
"translation": "Twoje tablice zostały zaimportowane."
},
"LqWW5F": {
@@ -6141,27 +6038,6 @@
"origin": [["src/views/card/components/AttachmentUpload.tsx", 46]],
"translation": "Twój plik został pomyślnie przesłany."
},
"HcT8J4": {
"message": "Your GitHub account has been connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 100]],
"translation": "Twoje konto GitHub zostało połączone."
},
"AdxYds": {
"message": "Your GitHub account has been disconnected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 123]],
"translation": "Twoje konto GitHub zostało odłączone."
},
"PELbXB": {
"message": "Your GitHub account is connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 220]],
"translation": "Twoje konto GitHub jest połączone."
},
"Ozt2vv": {
"message": "Your password has been changed.",
"placeholders": {},
@@ -6178,25 +6054,18 @@
"origin": [["src/views/settings/components/Avatar.tsx", 190]],
"translation": "Twoje zdjęcie profilowe zostało zaktualizowane."
},
"+jbXzb": {
"message": "Your projects have been imported.",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 230]],
"translation": "Twoje projekty zostały zaimportowane."
},
"CJWDTP": {
"message": "Your Trello account has been disconnected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 80]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 54]],
"translation": "Twoje konto Trello zostało odłączone."
},
"WRsbHO": {
"message": "Your Trello account is connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 171]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 102]],
"translation": "Twoje konto Trello jest połączone."
},
"25fAUC": {

File diff suppressed because one or more lines are too long

View File

@@ -34,7 +34,7 @@
"comments": [],
"origin": [
["src/views/boards/index.tsx", 48],
["src/views/card/index.tsx", 308]
["src/views/card/index.tsx", 309]
],
"translation": "{0} | {1}"
},
@@ -80,18 +80,9 @@
"boardCount": ["boardCount"]
},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 489]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 299]],
"translation": "{boardCount, plural, one {Importar quadro (1)} other {Importar quadros ({boardCount})}}"
},
"yndBF+": {
"message": "{projectCount, plural, one {Import project (1)} other {Import projects ({projectCount})}}",
"placeholders": {
"projectCount": ["projectCount"]
},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 341]],
"translation": "{projectCount, plural, one {Importar projeto (1)} other {Importar projetos ({projectCount})}}"
},
"9lFfqv": {
"message": "/month",
"placeholders": {},
@@ -206,7 +197,7 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 446],
["src/views/card/index.tsx", 447],
["src/views/public/board/CardModal.tsx", 189]
],
"translation": "Atividade"
@@ -501,25 +492,11 @@
"origin": [["src/views/auth/signup/index.tsx", 90]],
"translation": "Já tem uma conta? <0><1>Entrar</1></0>"
},
"j1+HPc": {
"message": "An error occurred while connecting your GitHub account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 107]],
"translation": "Ocorreu um erro ao conectar sua conta do GitHub."
},
"Dz63YI": {
"message": "An error occurred while disconnecting your GitHub account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 130]],
"translation": "Ocorreu um erro ao desconectar sua conta do GitHub."
},
"WmPhYW": {
"message": "An error occurred while disconnecting your Trello account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 87]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 61]],
"translation": "Ocorreu um erro ao desconectar sua conta do Trello."
},
"ZXSPJt": {
@@ -814,7 +791,7 @@
"comments": [],
"origin": [
["src/views/board/index.tsx", 400],
["src/views/card/index.tsx", 308],
["src/views/card/index.tsx", 309],
["src/views/public/board/index.tsx", 125]
],
"translation": "Quadro"
@@ -1228,7 +1205,7 @@
"message": "Card",
"placeholders": {},
"comments": [],
"origin": [["src/views/card/index.tsx", 308]],
"origin": [["src/views/card/index.tsx", 309]],
"translation": "Cartão"
},
"fEY2vP": {
@@ -1236,8 +1213,8 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 354],
["src/views/card/index.tsx", 391]
["src/views/card/index.tsx", 355],
["src/views/card/index.tsx", 392]
],
"translation": "Cartão não encontrado"
},
@@ -1379,7 +1356,7 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 345],
["src/views/card/index.tsx", 346],
["src/views/members/components/EditMemberPermissionsModal.tsx", 172],
["src/views/settings/components/NewApiKeyModal.tsx", 136]
],
@@ -1496,25 +1473,14 @@
],
"translation": "Confirme sua nova senha"
},
"iSLIjg": {
"message": "Connect",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 195]],
"translation": "Conectar"
},
"3jod3l": {
"message": "Connect GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 212]],
"translation": "Conectar GitHub"
},
"nk7caK": {
"message": "Connect Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 162]],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 157],
["src/views/settings/IntegrationsSettings.tsx", 93]
],
"translation": "Conectar Trello"
},
"sDLCvT": {
@@ -1524,18 +1490,11 @@
"origin": [["src/views/home/components/Features.tsx", 122]],
"translation": "Conecte suas ferramentas favoritas para otimizar seu fluxo de trabalho."
},
"MCIXdZ": {
"message": "Connect your GitHub account to import projects.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 191]],
"translation": "Conecte sua conta do GitHub para importar projetos."
},
"5eZwRW": {
"message": "Connect your Trello account to import boards.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 149]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 80]],
"translation": "Conecte sua conta do Trello para importar quadros."
},
"jfC/xh": {
@@ -1999,18 +1958,11 @@
"origin": [["src/views/boards/components/TemplateBoards.tsx", 45]],
"translation": "Design"
},
"Odv3J6": {
"message": "Disconnect GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 223]],
"translation": "Desconectar GitHub"
},
"YBBifR": {
"message": "Disconnect Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 177]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 108]],
"translation": "Desconectar Trello"
},
"1sRmLC": {
@@ -2355,13 +2307,6 @@
],
"translation": "Erro ao alterar senha"
},
"yhLUU8": {
"message": "Error connecting GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 106]],
"translation": "Erro ao conectar GitHub"
},
"cji2nM": {
"message": "Error creating invite link",
"placeholders": {},
@@ -2401,18 +2346,11 @@
],
"translation": "Erro ao excluir workspace"
},
"gQ/02p": {
"message": "Error disconnecting GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 129]],
"translation": "Erro ao desconectar GitHub"
},
"lKAvEd": {
"message": "Error disconnecting Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 86]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 60]],
"translation": "Erro ao desconectar Trello"
},
"rarRW/": {
@@ -2793,26 +2731,9 @@
"message": "GitHub",
"placeholders": {},
"comments": [],
"origin": [
["src/views/home/components/Footer.tsx", 37],
["src/views/settings/IntegrationsSettings.tsx", 186]
],
"origin": [["src/views/home/components/Footer.tsx", 37]],
"translation": "GitHub"
},
"PVT7q7": {
"message": "GitHub connected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 99]],
"translation": "GitHub conectado"
},
"/bBVaD": {
"message": "GitHub disconnected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 122]],
"translation": "GitHub desconectado"
},
"7eMo+U": {
"message": "Go Home",
"placeholders": {},
@@ -2991,20 +2912,14 @@
"message": "Import complete",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 229],
["src/views/boards/components/ImportBoardsForm.tsx", 381]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 191]],
"translation": "Importação concluída"
},
"BEVzjL": {
"message": "Import failed",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 242],
["src/views/boards/components/ImportBoardsForm.tsx", 394]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 204]],
"translation": "Falha na importação"
},
"rRM7r0": {
@@ -3598,7 +3513,7 @@
"message": "New import",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 513]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 322]],
"translation": "Nova importação"
},
"n1GRql": {
@@ -3698,7 +3613,7 @@
"message": "No boards found",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 432]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 242]],
"translation": "Nenhum quadro encontrado"
},
"OpNhRn": {
@@ -3743,13 +3658,6 @@
"origin": [["src/views/board/index.tsx", 527]],
"translation": "Nenhuma lista foi criada ainda"
},
"i30J2U": {
"message": "No projects found",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 283]],
"translation": "Nenhum projeto encontrado"
},
"ERpq2P": {
"message": "No results found for \"{debouncedQuery}\".",
"placeholders": {
@@ -4113,8 +4021,7 @@
["src/views/board/components/VisibilityButton.tsx", 57],
["src/views/board/index.tsx", 181],
["src/views/board/index.tsx", 237],
["src/views/boards/components/ImportBoardsForm.tsx", 243],
["src/views/boards/components/ImportBoardsForm.tsx", 395],
["src/views/boards/components/ImportBoardsForm.tsx", 205],
["src/views/card/components/AttachmentThumbnails.tsx", 74],
["src/views/card/components/ChecklistItemRow.tsx", 69],
["src/views/card/components/ChecklistItemRow.tsx", 97],
@@ -4568,17 +4475,14 @@
"message": "Select all",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 315],
["src/views/boards/components/ImportBoardsForm.tsx", 464]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 274]],
"translation": "Selecionar tudo"
},
"rYUZIe": {
"message": "Select source",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 195]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 157]],
"translation": "Selecionar origem"
},
"ppaRWv": {
@@ -4665,7 +4569,7 @@
"message": "Settings | Integrations",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 138]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 69]],
"translation": "Configurações | Integrações"
},
"F/FPk/": {
@@ -5160,13 +5064,6 @@
"origin": [["src/views/home/components/Header.tsx", 114]],
"translation": "Alternar menu"
},
"L5WQLg": {
"message": "Token is required",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 19]],
"translation": "Token é obrigatório"
},
"eEQyz+": {
"message": "Track all card changes with detailed activity history.",
"placeholders": {},
@@ -5180,7 +5077,7 @@
"comments": [],
"origin": [
["src/views/pricing/components/FeatureComparisonTable.tsx", 218],
["src/views/settings/IntegrationsSettings.tsx", 142]
["src/views/settings/IntegrationsSettings.tsx", 73]
],
"translation": "Trello"
},
@@ -5188,7 +5085,7 @@
"message": "Trello disconnected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 79]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 53]],
"translation": "Trello desconectado"
},
"kxEs5t": {
@@ -6124,7 +6021,7 @@
"message": "Your boards have been imported.",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 382]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 192]],
"translation": "Seus quadros foram importados."
},
"LqWW5F": {
@@ -6141,27 +6038,6 @@
"origin": [["src/views/card/components/AttachmentUpload.tsx", 46]],
"translation": "Seu arquivo foi enviado com sucesso."
},
"HcT8J4": {
"message": "Your GitHub account has been connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 100]],
"translation": "Sua conta do GitHub foi conectada."
},
"AdxYds": {
"message": "Your GitHub account has been disconnected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 123]],
"translation": "Sua conta do GitHub foi desconectada."
},
"PELbXB": {
"message": "Your GitHub account is connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 220]],
"translation": "Sua conta do GitHub está conectada."
},
"Ozt2vv": {
"message": "Your password has been changed.",
"placeholders": {},
@@ -6178,25 +6054,18 @@
"origin": [["src/views/settings/components/Avatar.tsx", 190]],
"translation": "Sua imagem de perfil foi atualizada."
},
"+jbXzb": {
"message": "Your projects have been imported.",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 230]],
"translation": "Seus projetos foram importados."
},
"CJWDTP": {
"message": "Your Trello account has been disconnected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 80]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 54]],
"translation": "Sua conta do Trello foi desconectada."
},
"WRsbHO": {
"message": "Your Trello account is connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 171]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 102]],
"translation": "Sua conta do Trello está conectada."
},
"25fAUC": {

File diff suppressed because one or more lines are too long

View File

@@ -34,7 +34,7 @@
"comments": [],
"origin": [
["src/views/boards/index.tsx", 48],
["src/views/card/index.tsx", 308]
["src/views/card/index.tsx", 309]
],
"translation": "{0} | {1}"
},
@@ -80,18 +80,9 @@
"boardCount": ["boardCount"]
},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 489]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 299]],
"translation": "{boardCount, plural, one {Импортировать доску (1)} few {Импортировать доски ({boardCount})} many {Импортировать досок ({boardCount})} other {Импортировать доски ({boardCount})}}"
},
"yndBF+": {
"message": "{projectCount, plural, one {Import project (1)} other {Import projects ({projectCount})}}",
"placeholders": {
"projectCount": ["projectCount"]
},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 341]],
"translation": "{projectCount, plural, one {Импортировать проект (1)} few {Импортировать проекта ({projectCount})} many {Импортировать проектов ({projectCount})} other {Импортировать проекта ({projectCount})}}"
},
"9lFfqv": {
"message": "/month",
"placeholders": {},
@@ -206,7 +197,7 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 446],
["src/views/card/index.tsx", 447],
["src/views/public/board/CardModal.tsx", 189]
],
"translation": "Активность"
@@ -501,25 +492,11 @@
"origin": [["src/views/auth/signup/index.tsx", 90]],
"translation": "Уже есть аккаунт? <0><1>Войти</1></0>"
},
"j1+HPc": {
"message": "An error occurred while connecting your GitHub account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 107]],
"translation": "Произошла ошибка при подключении вашего аккаунта GitHub."
},
"Dz63YI": {
"message": "An error occurred while disconnecting your GitHub account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 130]],
"translation": "Произошла ошибка при отключении вашего аккаунта GitHub."
},
"WmPhYW": {
"message": "An error occurred while disconnecting your Trello account.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 87]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 61]],
"translation": "Произошла ошибка при отключении вашей учетной записи Trello."
},
"ZXSPJt": {
@@ -814,7 +791,7 @@
"comments": [],
"origin": [
["src/views/board/index.tsx", 400],
["src/views/card/index.tsx", 308],
["src/views/card/index.tsx", 309],
["src/views/public/board/index.tsx", 125]
],
"translation": "Доска"
@@ -1228,7 +1205,7 @@
"message": "Card",
"placeholders": {},
"comments": [],
"origin": [["src/views/card/index.tsx", 308]],
"origin": [["src/views/card/index.tsx", 309]],
"translation": "Карточка"
},
"fEY2vP": {
@@ -1236,8 +1213,8 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 354],
["src/views/card/index.tsx", 391]
["src/views/card/index.tsx", 355],
["src/views/card/index.tsx", 392]
],
"translation": "Карточка не найдена"
},
@@ -1379,7 +1356,7 @@
"placeholders": {},
"comments": [],
"origin": [
["src/views/card/index.tsx", 345],
["src/views/card/index.tsx", 346],
["src/views/members/components/EditMemberPermissionsModal.tsx", 172],
["src/views/settings/components/NewApiKeyModal.tsx", 136]
],
@@ -1496,25 +1473,14 @@
],
"translation": "Подтвердите новый пароль"
},
"iSLIjg": {
"message": "Connect",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 195]],
"translation": "Подключить"
},
"3jod3l": {
"message": "Connect GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 212]],
"translation": "Подключить GitHub"
},
"nk7caK": {
"message": "Connect Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 162]],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 157],
["src/views/settings/IntegrationsSettings.tsx", 93]
],
"translation": "Подключить Trello"
},
"sDLCvT": {
@@ -1524,18 +1490,11 @@
"origin": [["src/views/home/components/Features.tsx", 122]],
"translation": "Подключите любимые инструменты, чтобы упростить рабочий процесс."
},
"MCIXdZ": {
"message": "Connect your GitHub account to import projects.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 191]],
"translation": "Подключите свой аккаунт GitHub, чтобы импортировать проекты."
},
"5eZwRW": {
"message": "Connect your Trello account to import boards.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 149]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 80]],
"translation": "Подключите ваш аккаунт Trello для импорта досок."
},
"jfC/xh": {
@@ -1999,18 +1958,11 @@
"origin": [["src/views/boards/components/TemplateBoards.tsx", 45]],
"translation": "Дизайн"
},
"Odv3J6": {
"message": "Disconnect GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 223]],
"translation": "Отключить GitHub"
},
"YBBifR": {
"message": "Disconnect Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 177]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 108]],
"translation": "Отключить Trello"
},
"1sRmLC": {
@@ -2355,13 +2307,6 @@
],
"translation": "Ошибка при смене пароля"
},
"yhLUU8": {
"message": "Error connecting GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 106]],
"translation": "Ошибка подключения GitHub"
},
"cji2nM": {
"message": "Error creating invite link",
"placeholders": {},
@@ -2401,18 +2346,11 @@
],
"translation": "Ошибка при удалении рабочего пространства"
},
"gQ/02p": {
"message": "Error disconnecting GitHub",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 129]],
"translation": "Ошибка при отключении GitHub"
},
"lKAvEd": {
"message": "Error disconnecting Trello",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 86]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 60]],
"translation": "Ошибка при отключении Trello"
},
"rarRW/": {
@@ -2793,26 +2731,9 @@
"message": "GitHub",
"placeholders": {},
"comments": [],
"origin": [
["src/views/home/components/Footer.tsx", 37],
["src/views/settings/IntegrationsSettings.tsx", 186]
],
"origin": [["src/views/home/components/Footer.tsx", 37]],
"translation": "GitHub"
},
"PVT7q7": {
"message": "GitHub connected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 99]],
"translation": "GitHub подключён"
},
"/bBVaD": {
"message": "GitHub disconnected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 122]],
"translation": "GitHub отключён"
},
"7eMo+U": {
"message": "Go Home",
"placeholders": {},
@@ -2991,20 +2912,14 @@
"message": "Import complete",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 229],
["src/views/boards/components/ImportBoardsForm.tsx", 381]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 191]],
"translation": "Импорт завершён"
},
"BEVzjL": {
"message": "Import failed",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 242],
["src/views/boards/components/ImportBoardsForm.tsx", 394]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 204]],
"translation": "Ошибка импорта"
},
"rRM7r0": {
@@ -3598,7 +3513,7 @@
"message": "New import",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 513]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 322]],
"translation": "Новый импорт"
},
"n1GRql": {
@@ -3698,7 +3613,7 @@
"message": "No boards found",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 432]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 242]],
"translation": "Доски не найдены"
},
"OpNhRn": {
@@ -3743,13 +3658,6 @@
"origin": [["src/views/board/index.tsx", 527]],
"translation": "Списки ещё не созданы"
},
"i30J2U": {
"message": "No projects found",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 283]],
"translation": "Проекты не найдены"
},
"ERpq2P": {
"message": "No results found for \"{debouncedQuery}\".",
"placeholders": {
@@ -4113,8 +4021,7 @@
["src/views/board/components/VisibilityButton.tsx", 57],
["src/views/board/index.tsx", 181],
["src/views/board/index.tsx", 237],
["src/views/boards/components/ImportBoardsForm.tsx", 243],
["src/views/boards/components/ImportBoardsForm.tsx", 395],
["src/views/boards/components/ImportBoardsForm.tsx", 205],
["src/views/card/components/AttachmentThumbnails.tsx", 74],
["src/views/card/components/ChecklistItemRow.tsx", 69],
["src/views/card/components/ChecklistItemRow.tsx", 97],
@@ -4568,17 +4475,14 @@
"message": "Select all",
"placeholders": {},
"comments": [],
"origin": [
["src/views/boards/components/ImportBoardsForm.tsx", 315],
["src/views/boards/components/ImportBoardsForm.tsx", 464]
],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 274]],
"translation": "Выбрать всё"
},
"rYUZIe": {
"message": "Select source",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 195]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 157]],
"translation": "Выбрать источник"
},
"ppaRWv": {
@@ -4665,7 +4569,7 @@
"message": "Settings | Integrations",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 138]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 69]],
"translation": "Настройки | Интеграции"
},
"F/FPk/": {
@@ -5160,13 +5064,6 @@
"origin": [["src/views/home/components/Header.tsx", 114]],
"translation": "Переключить меню"
},
"L5WQLg": {
"message": "Token is required",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 19]],
"translation": "Требуется токен"
},
"eEQyz+": {
"message": "Track all card changes with detailed activity history.",
"placeholders": {},
@@ -5180,7 +5077,7 @@
"comments": [],
"origin": [
["src/views/pricing/components/FeatureComparisonTable.tsx", 218],
["src/views/settings/IntegrationsSettings.tsx", 142]
["src/views/settings/IntegrationsSettings.tsx", 73]
],
"translation": "Trello"
},
@@ -5188,7 +5085,7 @@
"message": "Trello disconnected",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 79]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 53]],
"translation": "Trello отключён"
},
"kxEs5t": {
@@ -6124,7 +6021,7 @@
"message": "Your boards have been imported.",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 382]],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 192]],
"translation": "Ваши доски были импортированы."
},
"LqWW5F": {
@@ -6141,27 +6038,6 @@
"origin": [["src/views/card/components/AttachmentUpload.tsx", 46]],
"translation": "Ваш файл был успешно загружен."
},
"HcT8J4": {
"message": "Your GitHub account has been connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 100]],
"translation": "Ваш аккаунт GitHub был подключён."
},
"AdxYds": {
"message": "Your GitHub account has been disconnected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 123]],
"translation": "Ваш аккаунт GitHub был отключён."
},
"PELbXB": {
"message": "Your GitHub account is connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 220]],
"translation": "Ваш аккаунт GitHub подключён."
},
"Ozt2vv": {
"message": "Your password has been changed.",
"placeholders": {},
@@ -6178,25 +6054,18 @@
"origin": [["src/views/settings/components/Avatar.tsx", 190]],
"translation": "Ваше изображение профиля было обновлено."
},
"+jbXzb": {
"message": "Your projects have been imported.",
"placeholders": {},
"comments": [],
"origin": [["src/views/boards/components/ImportBoardsForm.tsx", 230]],
"translation": "Ваши проекты были импортированы."
},
"CJWDTP": {
"message": "Your Trello account has been disconnected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 80]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 54]],
"translation": "Ваш аккаунт Trello был отключён."
},
"WRsbHO": {
"message": "Your Trello account is connected.",
"placeholders": {},
"comments": [],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 171]],
"origin": [["src/views/settings/IntegrationsSettings.tsx", 102]],
"translation": "Ваш аккаунт Trello подключён."
},
"25fAUC": {

File diff suppressed because one or more lines are too long

View File

@@ -2,74 +2,48 @@ import type { NextApiRequest, NextApiResponse } from "next";
import { withRateLimit } from "@kan/api/utils/rateLimit";
import { env } from "~/env";
export default withRateLimit(
{ points: 100, duration: 60 },
async (req: NextApiRequest, res: NextApiResponse) => {
if (req.method !== "GET") {
return res.status(405).json({ message: "Method not allowed" });
if (req.method !== "GET") {
return res.status(405).json({ message: "Method not allowed" });
}
const { url, filename } = req.query;
if (!url || typeof url !== "string") {
return res.status(400).json({
message: "url parameter is required",
});
}
try {
const downloadFilename = typeof filename === "string"
? encodeURIComponent(filename)
: "attachment";
const upstream = await fetch(url);
if (!upstream.ok) {
return res.status(upstream.status).json({
message: "Failed to fetch attachment",
});
}
const { url, filename } = req.query;
const contentType =
upstream.headers.get("Content-Type") ?? "application/octet-stream";
if (!url || typeof url !== "string") {
return res.status(400).json({ message: "url parameter is required" });
}
res.setHeader("Content-Type", contentType);
res.setHeader(
"Content-Disposition",
`attachment; filename="${downloadFilename}"; filename*=UTF-8''${downloadFilename}`,
);
const s3Endpoint = env.S3_ENDPOINT;
if (s3Endpoint) {
let parsed: URL;
try {
parsed = new URL(url);
} catch {
return res.status(400).json({ message: "Invalid URL" });
}
const hostname = parsed.hostname.toLowerCase();
let allowedHost: string;
try {
allowedHost = new URL(s3Endpoint).hostname.toLowerCase();
} catch {
return res.status(500).json({ message: "Storage endpoint misconfigured" });
}
if (hostname !== allowedHost && !hostname.endsWith(`.${allowedHost}`)) {
return res.status(403).json({ message: "URL not allowed" });
}
}
try {
const downloadFilename =
typeof filename === "string"
? encodeURIComponent(filename)
: "attachment";
const upstream = await fetch(url);
if (!upstream.ok) {
return res
.status(upstream.status)
.json({ message: "Failed to fetch attachment" });
}
const contentType =
upstream.headers.get("Content-Type") ?? "application/octet-stream";
res.setHeader("Content-Type", contentType);
res.setHeader(
"Content-Disposition",
`attachment; filename="${downloadFilename}"; filename*=UTF-8''${downloadFilename}`,
);
const buffer = await upstream.arrayBuffer();
return res.send(Buffer.from(buffer));
} catch (error) {
console.error("Error downloading attachment:", error);
return res
.status(500)
.json({ message: "Failed to download attachment" });
}
const buffer = await upstream.arrayBuffer();
return res.send(Buffer.from(buffer));
} catch (error) {
console.error("Error downloading attachment:", error);
return res.status(500).json({ message: "Failed to download attachment" });
}
},
);

View File

@@ -4,7 +4,7 @@ import { t } from "@lingui/core/macro";
import { Plural, Trans } from "@lingui/react/macro";
import { Fragment, useEffect, useState } from "react";
import { Controller, useForm } from "react-hook-form";
import { FaGithub, FaTrello } from "react-icons/fa";
import { FaTrello } from "react-icons/fa";
import {
HiChevronUpDown,
HiMiniArrowTopRightOnSquare,
@@ -27,23 +27,12 @@ const integrationProviders: Record<
name: "Trello",
icon: <FaTrello />,
},
github: {
name: "GitHub",
icon: <FaGithub />,
},
};
const SelectSource = ({
handleNextStep,
}: {
handleNextStep: (provider: string) => void;
}) => {
const SelectSource = ({ handleNextStep }: { handleNextStep: () => void }) => {
const { data: integrations, refetch: refetchIntegrations } =
api.integration.providers.useQuery();
const { data: githubStatus, refetch: refetchGithubStatus } =
api.integration.getGitHubStatus.useQuery();
const { control, handleSubmit, watch } = useForm({
const { control, handleSubmit } = useForm({
defaultValues: {
source: integrations?.[0]?.provider ?? "trello",
},
@@ -58,36 +47,23 @@ const SelectSource = ({
},
);
const availableIntegrations = [
...(integrations ?? []),
...(githubStatus?.connected ? [{ provider: "github" }] : []),
];
const hasIntegrations = availableIntegrations.length > 0;
const hasIntegrations = integrations && integrations.length > 0;
useEffect(() => {
const handleFocus = () => {
void refetchIntegrations();
void refetchGithubStatus();
refetchIntegrations();
};
window.addEventListener("focus", handleFocus);
return () => {
window.removeEventListener("focus", handleFocus);
};
}, [refetchIntegrations, refetchGithubStatus]);
}, [refetchIntegrations]);
const onSubmit = () => {
const selected = watch("source");
if (
selected === "trello" &&
!integrations?.some((i) => i.provider === "trello")
) {
if (trelloUrl)
window.open(trelloUrl.url, "trello_auth", "height=800,width=600");
} else if (selected === "github" && !githubStatus?.connected) {
window.open("/settings/integrations", "_blank");
if (!hasIntegrations && trelloUrl) {
window.open(trelloUrl.url, "trello_auth", "height=800,width=600");
} else {
handleNextStep(selected);
handleNextStep();
}
};
@@ -126,7 +102,7 @@ const SelectSource = ({
>
<Listbox.Options className="absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-light-50 py-1 text-base text-neutral-900 shadow-lg ring-1 ring-light-600 ring-opacity-5 focus:outline-none dark:bg-dark-300 dark:text-dark-1000 sm:text-sm">
{hasIntegrations ? (
availableIntegrations.map((integration, index) => (
integrations.map((integration, index) => (
<Listbox.Option
key={`source_${index}`}
className="relative cursor-default select-none px-1"
@@ -147,32 +123,18 @@ const SelectSource = ({
</Listbox.Option>
))
) : (
<>
<Listbox.Option
key="trello_placeholder"
className="font-sm relative cursor-default select-none px-1"
value="trello"
>
<div className="flex items-center rounded-[5px] p-1 text-sm hover:bg-light-200 dark:hover:bg-dark-400">
{integrationProviders.trello?.icon}
<span className="ml-2 block truncate text-sm">
{integrationProviders.trello?.name}
</span>
</div>
</Listbox.Option>
<Listbox.Option
key="github_placeholder"
className="font-sm relative cursor-default select-none px-1"
value="github"
>
<div className="flex items-center rounded-[5px] p-1 text-sm hover:bg-light-200 dark:hover:bg-dark-400">
{integrationProviders.github?.icon}
<span className="ml-2 block truncate text-sm">
{integrationProviders.github?.name}
</span>
</div>
</Listbox.Option>
</>
<Listbox.Option
key="trello_placeholder"
className="font-sm relative cursor-default select-none px-1"
value="trello"
>
<div className="flex items-center rounded-[5px] p-1 text-sm hover:bg-light-200 dark:hover:bg-dark-400">
{integrationProviders.trello?.icon}
<span className="ml-2 block truncate text-sm">
{integrationProviders.trello?.name}
</span>
</div>
</Listbox.Option>
)}
</Listbox.Options>
</Transition>
@@ -192,159 +154,7 @@ const SelectSource = ({
!hasIntegrations ? <HiMiniArrowTopRightOnSquare /> : undefined
}
>
{hasIntegrations ? t`Select source` : t`Connect`}
</Button>
</div>
</div>
</form>
);
};
const ImportGithub: React.FC = () => {
const utils = api.useUtils();
const { closeModal } = useModal();
const { workspace } = useWorkspace();
const { showPopup } = usePopup();
const [isSelectAllEnabled, setIsSelectAllEnabled] = useState(false);
const refetchBoards = () => utils.board.all.refetch();
const { data: projects, isLoading: projectsLoading } =
api.import.github.getProjects.useQuery();
const {
register: registerProjects,
handleSubmit: handleSubmitProjects,
setValue,
watch,
} = useForm({
defaultValues: Object.fromEntries(
projects?.map((project) => [project.id, true]) ?? [],
),
});
const importProjects = api.import.github.importProjects.useMutation({
onSuccess: async () => {
showPopup({
header: t`Import complete`,
message: t`Your projects have been imported.`,
icon: "success",
});
try {
await refetchBoards();
closeModal();
} catch (e) {
console.log(e);
}
},
onError: () => {
showPopup({
header: t`Import failed`,
message: t`Please try again later, or contact customer support.`,
icon: "error",
});
},
});
const projectWatchers = projects?.map((project) => ({
id: project.id,
value: watch(project.id),
}));
const projectCount =
projectWatchers?.filter((w) => w.value === true).length ?? 0;
const onSubmitProjects = (values: Record<string, boolean>) => {
const projectIds = Object.keys(values).filter(
(key) => values[key] === true,
);
importProjects.mutate({
projectIds,
workspacePublicId: workspace.publicId,
});
};
const renderContent = () => {
if (projectsLoading) {
return (
<div className="flex h-full w-full flex-col items-center justify-center gap-1">
<div className="h-[30px] w-full animate-pulse rounded-[5px] bg-light-200 dark:bg-dark-300" />
<div className="h-[30px] w-full animate-pulse rounded-[5px] bg-light-200 dark:bg-dark-300" />
<div className="h-[30px] w-full animate-pulse rounded-[5px] bg-light-200 dark:bg-dark-300" />
</div>
);
}
if (!projects?.length) {
return (
<div className="flex h-full w-full items-center justify-center">
<p className="text-sm text-neutral-500 dark:text-dark-900">
{t`No projects found`}
</p>
</div>
);
}
return projects.map((project) => (
<div key={project.id}>
<label
className="flex cursor-pointer items-center rounded-[5px] p-2 hover:bg-light-100 dark:hover:bg-dark-300"
htmlFor={project.id}
>
<input
id={project.id}
type="checkbox"
className="h-[14px] w-[14px] rounded bg-transparent ring-0 focus:outline-none focus:ring-0 focus:ring-offset-0"
{...registerProjects(project.id)}
/>
<span className="ml-3 text-sm text-neutral-900 dark:text-dark-1000">
{project.name}
</span>
</label>
</div>
));
};
return (
<form onSubmit={handleSubmitProjects(onSubmitProjects)}>
<div className="h-[105px] overflow-auto px-5">{renderContent()}</div>
<div className="mt-12 flex items-center justify-end border-t border-light-600 px-5 pb-5 pt-5 dark:border-dark-600">
<Toggle
label={t`Select all`}
isChecked={!!isSelectAllEnabled}
onChange={() => {
const newState = !isSelectAllEnabled;
setIsSelectAllEnabled(newState);
for (const project of projects ?? []) {
setValue(project.id, newState);
}
}}
/>
<div className="space-x-2">
<Button
type="submit"
isLoading={importProjects.isPending}
disabled={
importProjects.isPending ||
projectsLoading ||
!projects?.length ||
!projects.some(
(project) =>
projectWatchers?.find((w) => w.id === project.id)?.value ===
true,
)
}
>
<Trans>
<Plural
value={projectCount}
one={`Import project (1)`}
other={`Import projects (${projectCount})`}
/>
</Trans>
{hasIntegrations ? t`Select source` : t`Connect Trello`}
</Button>
</div>
</div>
@@ -403,7 +213,7 @@ const ImportTrello: React.FC = () => {
value: watch(board.id),
}));
const boardCount = boardWatchers?.filter((w) => w.value === true).length ?? 0;
const boardCount = boardWatchers?.filter((w) => w.value === true).length || 0;
const onSubmitBoards = (values: Record<string, boolean>) => {
const boardIds = Object.keys(values).filter((key) => values[key] === true);
@@ -457,7 +267,7 @@ const ImportTrello: React.FC = () => {
return (
<form onSubmit={handleSubmitBoards(onSubmitBoards)}>
<div className="h-[105px] overflow-auto px-5">{renderContent()}</div>
<div className="h-[105px] overflow-scroll px-5">{renderContent()}</div>
<div className="mt-12 flex items-center justify-end border-t border-light-600 px-5 pb-5 pt-5 dark:border-dark-600">
<Toggle
@@ -467,7 +277,7 @@ const ImportTrello: React.FC = () => {
const newState = !isSelectAllEnabled;
setIsSelectAllEnabled(newState);
for (const board of boards ?? []) {
for (const board of boards || []) {
setValue(board.id, newState);
}
}}
@@ -503,7 +313,6 @@ const ImportTrello: React.FC = () => {
export function ImportBoardsForm() {
const { closeModal } = useModal();
const [step, setStep] = useState(1);
const [provider, setProvider] = useState<string | null>(null);
return (
<div>
@@ -530,16 +339,8 @@ export function ImportBoardsForm() {
</button>
</div>
{step === 1 && (
<SelectSource
handleNextStep={(p) => {
setProvider(p);
setStep(step + 1);
}}
/>
)}
{step === 2 && provider === "trello" && <ImportTrello />}
{step === 2 && provider === "github" && <ImportGithub />}
{step === 1 && <SelectSource handleNextStep={() => setStep(step + 1)} />}
{step === 2 && <ImportTrello />}
</div>
);
}

View File

@@ -3,8 +3,8 @@ import { useRouter } from "next/router";
import { t } from "@lingui/core/macro";
import { useEffect, useState } from "react";
import { useForm } from "react-hook-form";
import { HiXMark } from "react-icons/hi2";
import { IoChevronForwardSharp } from "react-icons/io5";
import { HiXMark } from "react-icons/hi2";
import { authClient } from "@kan/auth/client";
@@ -302,6 +302,7 @@ export default function CardPage({ isTemplate }: { isTemplate?: boolean }) {
if (!cardId) return <></>;
return (
<>
<PageHead
@@ -344,7 +345,7 @@ export default function CardPage({ isTemplate }: { isTemplate?: boolean }) {
className="flex h-7 w-7 items-center justify-center rounded-[5px] text-light-900 hover:bg-light-200 dark:text-dark-900 dark:hover:bg-dark-200"
aria-label={t`Close`}
>
<HiXMark className="h-4 w-4" />
<HiXMark className="h-5 w-5" />
</Link>
</div>
</>

View File

@@ -8,10 +8,10 @@ type FrequencyValue = "monthly" | "annually";
interface PlanFeature {
key: string;
label: string;
free: string | boolean | { text: string; highlight?: boolean; highlightFirstWord?: boolean };
teams: string | boolean | { text: string; highlight?: boolean; highlightFirstWord?: boolean };
pro: string | boolean | { text: string; highlight?: boolean; highlightFirstWord?: boolean };
enterprise: string | boolean | { text: string; highlight?: boolean; highlightFirstWord?: boolean };
free: string | boolean | { text: string; highlight?: string };
teams: string | boolean | { text: string; highlight?: string };
pro: string | boolean | { text: string; highlight?: string };
enterprise: string | boolean | { text: string; highlight?: string };
}
interface FeatureSection {
@@ -71,34 +71,34 @@ const FeatureComparisonTable = ({
{
key: "boards",
label: t`Boards`,
free: { text: t`Unlimited boards`, highlightFirstWord: true },
teams: { text: t`Unlimited boards`, highlightFirstWord: true },
pro: { text: t`Unlimited boards`, highlightFirstWord: true },
enterprise: { text: t`Unlimited boards`, highlightFirstWord: true },
free: { text: t`Unlimited boards`, highlight: "Unlimited" },
teams: { text: t`Unlimited boards`, highlight: "Unlimited" },
pro: { text: t`Unlimited boards`, highlight: "Unlimited" },
enterprise: { text: t`Unlimited boards`, highlight: "Unlimited" },
},
{
key: "members",
label: t`Members`,
free: { text: t`1 user`, highlightFirstWord: true },
teams: { text: t`Per-seat pricing`, highlightFirstWord: true },
pro: { text: t`Unlimited members`, highlightFirstWord: true },
enterprise: { text: t`Unlimited members`, highlightFirstWord: true },
free: { text: t`1 user`, highlight: "1" },
teams: { text: t`Per-seat pricing`, highlight: "Per-seat" },
pro: { text: t`Unlimited members`, highlight: "Unlimited" },
enterprise: { text: t`Unlimited members`, highlight: "Unlimited" },
},
{
key: "file-uploads",
label: t`File uploads`,
free: { text: t`10mb file uploads`, highlightFirstWord: true },
teams: { text: t`Unlimited file uploads`, highlightFirstWord: true },
pro: { text: t`Unlimited file uploads`, highlightFirstWord: true },
enterprise: { text: t`Unlimited file uploads`, highlightFirstWord: true },
free: { text: t`10mb file uploads`, highlight: "10mb" },
teams: { text: t`Unlimited file uploads`, highlight: "Unlimited" },
pro: { text: t`Unlimited file uploads`, highlight: "Unlimited" },
enterprise: { text: t`Unlimited file uploads`, highlight: "Unlimited" },
},
{
key: "workspace-username",
label: t`Workspace username`,
free: { text: t`Default username`, highlightFirstWord: true },
teams: { text: t`Default username`, highlightFirstWord: true },
pro: { text: t`Custom username`, highlightFirstWord: true },
enterprise: { text: t`Custom username`, highlightFirstWord: true },
free: { text: t`Default username`, highlight: "Default" },
teams: { text: t`Default username`, highlight: "Default" },
pro: { text: t`Custom username`, highlight: "Custom" },
enterprise: { text: t`Custom username`, highlight: "Custom" },
},
];
@@ -236,9 +236,9 @@ const FeatureComparisonTable = ({
key: "rest-api",
label: t`API`,
free: { text: t`Limited API access` },
teams: { text: t`Full API access`, highlight: true },
pro: { text: t`Full API access`, highlight: true },
enterprise: { text: t`Full API access`, highlight: true },
teams: { text: t`Full API access` },
pro: { text: t`Full API access` },
enterprise: { text: t`Full API access` },
},
{
key: "self-hostable",
@@ -254,18 +254,18 @@ const FeatureComparisonTable = ({
{
key: "sso",
label: t`SSO`,
free: { text: t`Google SSO`, highlight: true },
teams: { text: t`Google SSO`, highlight: true },
pro: { text: t`Google SSO`, highlight: true },
enterprise: { text: t`Google SSO + SAML`, highlight: true },
free: { text: t`Google SSO` },
teams: { text: t`Google SSO` },
pro: { text: t`Google SSO` },
enterprise: { text: t`Google SSO + SAML` },
},
{
key: "admin-roles",
label: t`Admin roles`,
free: { text: t`Admin roles`, highlight: true },
teams: { text: t`Admin roles`, highlight: true },
pro: { text: t`Admin roles`, highlight: true },
enterprise: { text: t`Advanced admin roles`, highlight: true },
free: { text: t`Admin roles` },
teams: { text: t`Admin roles` },
pro: { text: t`Admin roles` },
enterprise: { text: t`Advanced admin roles` },
},
];
@@ -334,37 +334,59 @@ const FeatureComparisonTable = ({
{ id: "enterprise", name: t`Enterprise`, tierId: "tier-enterprise" },
];
const isHighlightValue = (
value: string | boolean | { text: string; highlight?: string },
): value is { text: string; highlight?: string } => {
return typeof value === "object" && value !== null && "text" in value;
};
const shouldHighlight = (text: string): boolean => {
const lowerText = text.toLowerCase();
return ["unlimited", "multiple", "per-seat", "custom", "mentions", "full", "sso", "admin"].some(
(keyword) => lowerText.includes(keyword),
);
};
const CellValue = ({
value,
label,
}: {
value: string | boolean | { text: string; highlight?: boolean; highlightFirstWord?: boolean };
value: string | boolean | { text: string; highlight?: string };
label: string;
}) => {
if (typeof value === "object" && value !== null) {
const { text, highlight, highlightFirstWord } = value;
if (highlightFirstWord) {
const spaceIndex = text.indexOf(" ");
const firstWord = spaceIndex === -1 ? text : text.slice(0, spaceIndex);
const rest = spaceIndex === -1 ? "" : text.slice(spaceIndex);
return (
<div className="flex items-center gap-2.5">
<HiCheckCircle className="mt-0.5 h-4 w-4 shrink-0 text-light-1000 dark:text-dark-1000" />
<span className="text-sm font-medium">
<span className="text-light-1000 dark:text-dark-1000">{firstWord}</span>
<span className="text-light-950 dark:text-dark-800">{rest}</span>
</span>
</div>
// Handle object with text and highlight
if (isHighlightValue(value)) {
const { text, highlight } = value;
const isUnlimited = shouldHighlight(text);
let displayText;
if (highlight) {
const parts = text.split(new RegExp(`(${highlight})`, "gi"));
displayText = (
<>
{parts.map((part, index) =>
part.toLowerCase() === highlight.toLowerCase() ? (
<span key={index} className="text-light-1000 dark:text-dark-1000">
{part}
</span>
) : (
<span key={index} className="text-light-950 dark:text-dark-800">
{part}
</span>
),
)}
</>
);
} else {
displayText = text;
}
return (
<div className="flex items-center gap-2.5">
<HiCheckCircle
className={twMerge(
"mt-0.5 h-4 w-4 shrink-0",
highlight
isUnlimited
? "text-light-1000 dark:text-dark-1000"
: "text-light-400 dark:text-dark-600",
)}
@@ -372,18 +394,44 @@ const FeatureComparisonTable = ({
<span
className={twMerge(
"text-sm font-medium",
highlight
isUnlimited
? "text-light-1000 dark:text-dark-950"
: "text-light-950 dark:text-dark-800",
)}
>
{text}
{displayText}
</span>
</div>
);
}
if (typeof value === "string") {
const isUnlimited = shouldHighlight(value);
return (
<div className="flex items-center gap-2.5">
<HiCheckCircle
className={twMerge(
"mt-0.5 h-4 w-4 shrink-0",
isUnlimited
? "text-light-1000 dark:text-dark-1000"
: "text-light-400 dark:text-dark-600",
)}
/>
<span
className={twMerge(
"text-sm font-medium",
isUnlimited
? "text-light-1000 dark:text-dark-950"
: "text-light-950 dark:text-dark-800",
)}
>
{value}
</span>
</div>
);
}
if (value) {
// Boolean true - show checkmark icon
return (
<div className="flex items-center gap-2.5">
<HiCheckCircle className="mt-0.5 h-4 w-4 shrink-0 text-light-1000 dark:text-dark-1000" />
@@ -393,7 +441,7 @@ const FeatureComparisonTable = ({
</div>
);
}
// Boolean false - show cross icon
return (
<div className="flex items-center gap-2.5">
<HiXCircle className="mt-0.5 h-4 w-4 shrink-0 text-light-400 dark:text-dark-600" />
@@ -407,7 +455,7 @@ const FeatureComparisonTable = ({
const getFeatureValue = (
feature: PlanFeature,
planId: string,
): string | boolean | { text: string; highlight?: boolean; highlightFirstWord?: boolean } => {
): string | boolean | { text: string; highlight?: string } => {
switch (planId) {
case "free":
return feature.free;

View File

@@ -1,13 +1,9 @@
import { zodResolver } from "@hookform/resolvers/zod";
import { t } from "@lingui/core/macro";
import { useEffect } from "react";
import { useForm } from "react-hook-form";
import { HiMiniArrowTopRightOnSquare } from "react-icons/hi2";
import { z } from "zod";
import Button from "~/components/Button";
import FeedbackModal from "~/components/FeedbackModal";
import Input from "~/components/Input";
import Modal from "~/components/modal";
import { NewWorkspaceForm } from "~/components/NewWorkspaceForm";
import { PageHead } from "~/components/PageHead";
@@ -15,28 +11,10 @@ import { useModal } from "~/providers/modal";
import { usePopup } from "~/providers/popup";
import { api } from "~/utils/api";
const githubTokenSchema = z.object({
token: z.string().min(1, { message: t`Token is required` }),
});
type GitHubTokenFormValues = z.infer<typeof githubTokenSchema>;
export default function IntegrationsSettings() {
const { modalContentType, isOpen } = useModal();
const { showPopup } = usePopup();
const {
register,
handleSubmit,
formState: { isDirty, errors },
reset,
} = useForm<GitHubTokenFormValues>({
resolver: zodResolver(githubTokenSchema),
defaultValues: {
token: "",
},
});
const {
data: integrations,
refetch: refetchIntegrations,
@@ -56,25 +34,21 @@ export default function IntegrationsSettings() {
},
);
const { data: githubStatus, refetch: refetchGithubStatus } =
api.integration.getGitHubStatus.useQuery();
useEffect(() => {
const handleFocus = () => {
void refetchIntegrations();
void refetchGithubStatus();
refetchIntegrations();
};
window.addEventListener("focus", handleFocus);
return () => {
window.removeEventListener("focus", handleFocus);
};
}, [refetchIntegrations, refetchGithubStatus]);
}, [refetchIntegrations]);
const { mutateAsync: disconnectTrello } =
api.integration.disconnect.useMutation({
onSuccess: () => {
void refetchIntegrations();
void refetchTrelloUrl();
refetchIntegrations();
refetchTrelloUrl();
showPopup({
header: t`Trello disconnected`,
message: t`Your Trello account has been disconnected.`,
@@ -90,49 +64,6 @@ export default function IntegrationsSettings() {
},
});
const { mutateAsync: saveGithubToken, isPending: isSavingGithubToken } =
api.integration.saveGitHubToken.useMutation({
onSuccess: () => {
void refetchGithubStatus();
reset();
showPopup({
header: t`GitHub connected`,
message: t`Your GitHub account has been connected.`,
icon: "success",
});
},
onError: () => {
showPopup({
header: t`Error connecting GitHub`,
message: t`An error occurred while connecting your GitHub account.`,
icon: "error",
});
},
});
const onSubmitGithubToken = (data: GitHubTokenFormValues) => {
void saveGithubToken({ token: data.token });
};
const { mutateAsync: disconnectGithub } =
api.integration.disconnectGitHub.useMutation({
onSuccess: () => {
void refetchGithubStatus();
showPopup({
header: t`GitHub disconnected`,
message: t`Your GitHub account has been disconnected.`,
icon: "success",
});
},
onError: () => {
showPopup({
header: t`Error disconnecting GitHub`,
message: t`An error occurred while disconnecting your GitHub account.`,
icon: "error",
});
},
});
return (
<>
<PageHead title={t`Settings | Integrations`} />
@@ -181,51 +112,6 @@ export default function IntegrationsSettings() {
)}
</div>
<div className="mb-8 border-t border-light-300 dark:border-dark-300">
<h2 className="mb-4 mt-8 text-[14px] font-bold text-neutral-900 dark:text-dark-1000">
{t`GitHub`}
</h2>
{!githubStatus?.connected ? (
<>
<p className="mb-4 text-sm text-neutral-500 dark:text-dark-900">
{t`Connect your GitHub account to import projects.`}
</p>
<form
onSubmit={handleSubmit(onSubmitGithubToken)}
className="flex gap-2"
>
<div className="mb-4 flex w-full max-w-[325px] items-center gap-2">
<Input
type="password"
placeholder="Personal Access Token"
{...register("token")}
errorMessage={errors.token?.message}
/>
</div>
<div>
<Button
variant="secondary"
type="submit"
disabled={!isDirty || isSavingGithubToken}
isLoading={isSavingGithubToken}
>
{t`Connect GitHub`}
</Button>
</div>
</form>
</>
) : (
<>
<p className="mb-8 text-sm text-neutral-500 dark:text-dark-900">
{t`Your GitHub account is connected.`}
</p>
<Button variant="secondary" onClick={() => disconnectGithub()}>
{t`Disconnect GitHub`}
</Button>
</>
)}
</div>
{/* Global modals */}
<Modal
modalSize="md"

View File

@@ -11,12 +11,10 @@ import * as labelRepo from "@kan/db/repository/label.repo";
import * as listRepo from "@kan/db/repository/list.repo";
import * as workspaceRepo from "@kan/db/repository/workspace.repo";
import { colours } from "@kan/shared/constants";
import { generateSlug, generateUID } from "@kan/shared/utils";
import { generateUID } from "@kan/shared/utils";
import { createTRPCRouter, protectedProcedure } from "../trpc";
import { assertPermission } from "../utils/permissions";
import { assertUserInWorkspace } from "../utils/auth";
import { decryptToken } from "../utils/encryption";
import { apiKeys, urls } from "./integration";
export interface TrelloBoard {
@@ -52,51 +50,6 @@ interface TrelloCheckItem {
pos: number;
}
interface GitHubProjectsResponse {
data: {
viewer: {
projectsV2: {
nodes?: { id: string; title: string }[];
};
organizations: {
nodes: {
projectsV2: {
nodes?: { id: string; title: string }[];
};
}[];
};
};
};
errors?: unknown[];
}
interface GitHubGraphQLResponse {
data?: {
node?: GitHubProjectV2Node;
};
errors?: unknown[];
}
interface GitHubProjectV2Node {
title: string;
field?: {
options?: { id: string; name: string }[];
};
areaField?: {
options?: { id: string; name: string; color: string }[];
};
items?: {
nodes: {
fieldValueByName?: { name: string };
areaValue?: { name: string };
content?: {
title?: string;
body?: string;
};
}[];
};
}
interface TrelloCard {
id: string;
name: string | null;
@@ -511,436 +464,4 @@ export const importRouter = createTRPCRouter({
return { boardsCreated };
}),
}),
github: createTRPCRouter({
getProjects: protectedProcedure
.meta({
openapi: {
summary: "Get projects from GitHub",
method: "GET",
path: "/integrations/github/projects",
description: "Retrieves all projects from GitHub",
tags: ["Integrations"],
protect: true,
},
})
.input(z.void())
.output(z.array(z.object({ id: z.string(), name: z.string() })))
.query(async ({ ctx }) => {
const user = ctx.user;
if (!user)
throw new TRPCError({
message: "User not authenticated",
code: "UNAUTHORIZED",
});
const integration = await integrationsRepo.getProviderForUser(
ctx.db,
user.id,
"github",
);
if (!integration)
throw new TRPCError({
message: "GitHub token not found",
code: "UNAUTHORIZED",
});
const token = decryptToken(integration.accessToken);
// GraphQL query to fetch Projects V2 for the user and their organizations
const query = `
query {
viewer {
projectsV2(first: 20) {
nodes {
id
title
}
}
organizations(first: 10) {
nodes {
projectsV2(first: 10) {
nodes {
id
title
}
}
}
}
}
}
`;
const response = await fetch("https://api.github.com/graphql", {
method: "POST",
headers: {
Authorization: `token ${token}`,
"Content-Type": "application/json",
"User-Agent": "Kan-App",
},
body: JSON.stringify({ query }),
});
if (!response.ok) {
const errorText = await response.text();
console.error(
`GitHub API Error: ${response.status} ${response.statusText}`,
);
console.error(`GitHub API Response: ${errorText}`);
throw new TRPCError({
message: `Failed to fetch GitHub projects: ${response.status} ${response.statusText}`,
code: "INTERNAL_SERVER_ERROR",
});
}
const result = (await response.json()) as GitHubProjectsResponse;
if (result.errors) {
console.error("GitHub GraphQL Errors:", result.errors);
throw new TRPCError({
message: "Failed to fetch GitHub projects (GraphQL Error)",
code: "INTERNAL_SERVER_ERROR",
});
}
const userProjects = result.data.viewer.projectsV2.nodes ?? [];
const orgProjects = result.data.viewer.organizations.nodes.flatMap(
(org) => org.projectsV2.nodes ?? [],
);
const allProjects = [...userProjects, ...orgProjects];
return allProjects.map((project) => ({
id: project.id,
name: project.title,
}));
}),
importProjects: protectedProcedure
.meta({
openapi: {
summary: "Import projects from GitHub",
method: "POST",
path: "/imports/github/projects",
description: "Imports projects from GitHub",
tags: ["Imports"],
protect: true,
},
})
.input(
z.object({
projectIds: z.array(z.string()),
workspacePublicId: z.string().min(12),
}),
)
.output(z.object({ projectsImported: z.number() }))
.mutation(async ({ ctx, input }) => {
const userId = ctx.user?.id;
if (!userId) throw new TRPCError({ code: "UNAUTHORIZED" });
const integration = await integrationsRepo.getProviderForUser(
ctx.db,
userId,
"github",
);
if (!integration)
throw new TRPCError({
code: "UNAUTHORIZED",
message: "GitHub token not found",
});
const token = decryptToken(integration.accessToken);
const workspace = await workspaceRepo.getByPublicId(
ctx.db,
input.workspacePublicId,
);
if (!workspace)
throw new TRPCError({
code: "NOT_FOUND",
message: "Workspace not found",
});
await assertUserInWorkspace(ctx.db, userId, workspace.id);
const newImport = await importRepo.create(ctx.db, {
source: "github",
createdBy: userId,
});
if (!newImport) {
throw new TRPCError({
code: "INTERNAL_SERVER_ERROR",
message: "Failed to create import record",
});
}
const newImportId = newImport.id;
let projectsImported = 0;
for (const projectId of input.projectIds) {
// GraphQL query to fetch Project V2 details, status options, area options, and items
const query = `
query($id: ID!) {
node(id: $id) {
... on ProjectV2 {
title
field(name: "Status") {
... on ProjectV2SingleSelectField {
options {
id
name
}
}
}
areaField: field(name: "Area") {
... on ProjectV2SingleSelectField {
options {
id
name
color
}
}
}
items(first: 100) {
nodes {
fieldValueByName(name: "Status") {
... on ProjectV2ItemFieldSingleSelectValue {
name
}
}
areaValue: fieldValueByName(name: "Area") {
... on ProjectV2ItemFieldSingleSelectValue {
name
}
}
content {
... on Issue {
title
body
}
... on PullRequest {
title
body
}
... on DraftIssue {
title
body
}
}
}
}
}
}
}
`;
const response = await fetch("https://api.github.com/graphql", {
method: "POST",
headers: {
Authorization: `token ${token}`,
"Content-Type": "application/json",
"User-Agent": "Kan-App",
},
body: JSON.stringify({ query, variables: { id: projectId } }),
});
const result = (await response.json()) as GitHubGraphQLResponse;
if (result.errors || !result.data?.node) continue;
const projectData = result.data.node;
const statusOptions = projectData.field?.options ?? [];
const areaOptions = projectData.areaField?.options ?? [];
const items = projectData.items?.nodes ?? [];
const boardPublicId = generateUID();
const board = await boardRepo.create(ctx.db, {
publicId: boardPublicId,
name: projectData.title,
workspaceId: workspace.id,
slug: generateSlug(projectData.title),
createdBy: userId,
importId: newImportId,
});
if (!board) continue;
// Prepare Labels
const labelsInsert = areaOptions.map((option) => {
let colourCode = "#0d9488"; // Default Teal
const ghColor = option.color;
// Map GitHub colors to Kan colors
if (ghColor === "BLUE") colourCode = "#0284c7";
else if (ghColor === "GREEN") colourCode = "#65a30d";
else if (ghColor === "YELLOW") colourCode = "#ca8a04";
else if (ghColor === "ORANGE") colourCode = "#ea580c";
else if (ghColor === "RED") colourCode = "#dc2626";
else if (ghColor === "PINK") colourCode = "#db2777";
else if (ghColor === "PURPLE") colourCode = "#4f46e5";
else if (ghColor === "GRAY") colourCode = "#0d9488";
return {
publicId: generateUID(),
name: option.name,
colourCode,
createdBy: userId,
boardId: board.id,
importId: newImportId,
};
});
const createdLabels = await labelRepo.bulkCreate(
ctx.db,
labelsInsert,
);
const labelMap = new Map<string, number>();
createdLabels.forEach((label, index) => {
const originalName = areaOptions[index]?.name;
if (originalName) {
labelMap.set(originalName, label.id);
}
});
// Prepare Lists
const listsInsert: {
publicId: string;
name: string;
createdBy: string;
boardId: number;
index: number;
importId: number;
}[] = [];
if (statusOptions.length === 0) {
listsInsert.push({
publicId: generateUID(),
name: "To Do",
createdBy: userId,
boardId: board.id,
index: 0,
importId: newImportId,
});
} else {
statusOptions.forEach((option, index) => {
listsInsert.push({
publicId: generateUID(),
name: option.name,
createdBy: userId,
boardId: board.id,
index: index,
importId: newImportId,
});
});
}
const createdLists = await listRepo.bulkCreate(ctx.db, listsInsert);
const listIdMap = new Map<string, number>();
createdLists.forEach((list, index) => {
const originalName = listsInsert[index]?.name;
if (originalName) {
listIdMap.set(originalName, list.id);
}
});
// Prepare Cards
const itemsToInsert: {
item: NonNullable<
NonNullable<
NonNullable<GitHubProjectV2Node["items"]>["nodes"]
>[number]
>;
listId: number;
title: string;
description: string;
}[] = [];
for (const item of items) {
const statusName = item.fieldValueByName?.name;
const content = item.content ?? {};
const title = content.title ?? "Untitled Card";
const description = content.body ?? "";
let listId = statusName ? listIdMap.get(statusName) : undefined;
// Fallback to first list
if (!listId && createdLists.length > 0) {
listId = createdLists[0]?.id;
}
if (listId) {
itemsToInsert.push({
item,
listId,
title,
description,
});
}
}
const cardsInput = itemsToInsert.map((data, index) => ({
publicId: generateUID(),
title: data.title,
description: data.description,
createdBy: userId,
listId: data.listId,
index: index,
importId: newImportId,
}));
const createdCards = await cardRepo.bulkCreate(ctx.db, cardsInput);
// Create Activities
const activities = createdCards.map((card) => ({
type: "card.created" as const,
cardId: card.id,
createdBy: userId,
}));
if (activities.length > 0) {
await cardActivityRepo.bulkCreate(ctx.db, activities);
}
// Link Labels
const cardLabelRelations: { cardId: number; labelId: number }[] = [];
createdCards.forEach((card, index) => {
const originalItem = itemsToInsert[index]?.item;
const areaName = originalItem?.areaValue?.name;
if (areaName) {
const labelId = labelMap.get(areaName);
if (labelId) {
cardLabelRelations.push({
cardId: card.id,
labelId: labelId,
});
}
}
});
if (cardLabelRelations.length > 0) {
await cardRepo.bulkCreateCardLabelRelationships(
ctx.db,
cardLabelRelations,
);
}
projectsImported++;
}
if (projectsImported > 0 && newImportId) {
await importRepo.update(
ctx.db,
{ status: "success" },
{ importId: newImportId },
);
}
return { projectsImported };
}),
}),
});

View File

@@ -14,65 +14,7 @@ export const apiKeys = {
trello: process.env.TRELLO_APP_API_KEY,
};
import { encryptToken } from "../utils/encryption";
export const integrationRouter = createTRPCRouter({
saveGitHubToken: protectedProcedure
.input(z.object({ token: z.string() }))
.mutation(async ({ ctx, input }) => {
const user = ctx.user;
if (!user)
throw new TRPCError({
message: "User not authenticated",
code: "UNAUTHORIZED",
});
const encryptedToken = encryptToken(input.token);
const expiresAt = new Date();
expiresAt.setFullYear(expiresAt.getFullYear() + 1);
await integrationsRepo.createOrUpdateProvider(ctx.db, {
provider: "github",
userId: user.id,
accessToken: encryptedToken,
expiresAt,
});
return { success: true };
}),
disconnectGitHub: protectedProcedure.mutation(async ({ ctx }) => {
const user = ctx.user;
if (!user)
throw new TRPCError({
message: "User not authenticated",
code: "UNAUTHORIZED",
});
await integrationsRepo.deleteProviderForUser(ctx.db, user.id, "github");
return { success: true };
}),
getGitHubStatus: protectedProcedure.query(async ({ ctx }) => {
const user = ctx.user;
if (!user)
throw new TRPCError({
message: "User not authenticated",
code: "UNAUTHORIZED",
});
const connected = await integrationsRepo.isProviderAvailableForUser(
ctx.db,
user.id,
"github",
);
return { connected };
}),
providers: protectedProcedure
.meta({
openapi: {
@@ -125,7 +67,7 @@ export const integrationRouter = createTRPCRouter({
protect: true,
},
})
.input(z.object({ provider: z.enum(["trello", "github"]) }))
.input(z.object({ provider: z.enum(["trello"]) }))
.output(z.object({}))
.mutation(async ({ ctx, input }) => {
const user = ctx.user;

View File

@@ -1,53 +0,0 @@
import crypto from "crypto";
const ALGORITHM = "aes-256-gcm";
const SECRET_KEY = process.env.BETTER_AUTH_SECRET;
if (!SECRET_KEY) {
throw new Error("Encryption key is missing. Set BETTER_AUTH_SECRET.");
}
// Ensure the key is exactly 32 bytes
const key = crypto.createHash("sha256").update(String(SECRET_KEY)).digest();
export const encryptToken = (text: string) => {
const iv = crypto.randomBytes(12); // 12 bytes is the recommended IV size for GCM
const cipher = crypto.createCipheriv(ALGORITHM, key, iv);
// buffer concat is faster/cleaner for raw binary manipulation
const encrypted = Buffer.concat([
cipher.update(text, "utf8"),
cipher.final(),
]);
const authTag = cipher.getAuthTag();
// Combine IV + AuthTag + EncryptedData into one buffer
// This saves space compared to storing them as separate hex strings
const combined = Buffer.concat([iv, authTag, encrypted]);
// Return as URL-safe Base64 (ideal for cookies)
return combined.toString("base64url");
};
export const decryptToken = (text: string) => {
// Convert URL-safe Base64 back to a Buffer
const combined = Buffer.from(text, "base64url");
// Extract the parts based on fixed lengths
// IV is 12 bytes (standard for GCM)
// AuthTag is 16 bytes (standard for GCM)
const iv = combined.subarray(0, 12);
const authTag = combined.subarray(12, 28);
const encryptedText = combined.subarray(28);
const decipher = crypto.createDecipheriv(ALGORITHM, key, iv);
decipher.setAuthTag(authTag);
// If the cookie was tampered with, this will throw an error
const decrypted = Buffer.concat([
decipher.update(encryptedText),
decipher.final(),
]);
return decrypted.toString("utf8");
};

View File

@@ -1,2 +0,0 @@
ALTER TYPE "public"."source" ADD VALUE 'github';--> statement-breakpoint
ALTER TABLE "integration" ALTER COLUMN "accessToken" SET DATA TYPE text;--> statement-breakpoint

File diff suppressed because it is too large Load Diff

View File

@@ -187,30 +187,16 @@
{
"idx": 26,
"version": "7",
"when": 1770521594167,
"tag": "20260208033314_AddAttachmentToActivity",
"breakpoints": true
},
{
"idx": 27,
"version": "7",
"when": 1771192000000,
"tag": "20260129210000_AddWorkspaceWebhooks",
"breakpoints": true
},
{
"idx": 28,
"idx": 27,
"version": "7",
"when": 1772049587901,
"tag": "20260225195947_AddIsArchivedToBoard",
"breakpoints": true
},
{
"idx": 28,
"version": "7",
"when": 1771930355536,
"tag": "20260224105235_AddGitHubIntegrationSupport",
"breakpoints": true
}
]
}

View File

@@ -46,35 +46,6 @@ export const getProvidersForUser = async (db: dbClient, userId: string) => {
return integration;
};
export const createOrUpdateProvider = async (
db: dbClient,
data: {
userId: string;
provider: string;
accessToken: string;
refreshToken?: string | null;
expiresAt: Date;
},
) => {
await db
.insert(integrations)
.values({
provider: data.provider,
userId: data.userId,
accessToken: data.accessToken,
refreshToken: data.refreshToken ?? null,
expiresAt: data.expiresAt,
})
.onConflictDoUpdate({
target: [integrations.userId, integrations.provider],
set: {
accessToken: data.accessToken,
refreshToken: data.refreshToken ?? null,
expiresAt: data.expiresAt,
},
});
};
export const deleteProviderForUser = async (
db: dbClient,
userId: string,

View File

@@ -14,7 +14,7 @@ import { labels } from "./labels";
import { lists } from "./lists";
import { users } from "./users";
export const importSourceEnum = pgEnum("source", ["trello", "github"]);
export const importSourceEnum = pgEnum("source", ["trello"]);
export const importStatusEnum = pgEnum("status", [
"started",
"success",

View File

@@ -2,7 +2,6 @@ import { relations } from "drizzle-orm";
import {
pgTable,
primaryKey,
text,
timestamp,
uuid,
varchar,
@@ -17,7 +16,7 @@ export const integrations = pgTable(
userId: uuid("userId")
.notNull()
.references(() => users.id, { onDelete: "cascade" }),
accessToken: text("accessToken").notNull(),
accessToken: varchar("accessToken", { length: 255 }).notNull(),
refreshToken: varchar("refreshToken", { length: 255 }),
expiresAt: timestamp("expiresAt").notNull(),
createdAt: timestamp("createdAt")