Compare commits

...

5 Commits

Author SHA1 Message Date
Henry
be106edfea fix: swap latest to only publish on version tags and add edge for builds 2026-03-03 21:43:26 +00:00
Henry
b4d4810f45 fix: migration order (#427) 2026-03-03 21:36:31 +00:00
hjball
239d152340 chore: compile translations 2026-03-01 22:41:43 +00:00
hjball
f294760747 chore: update translations 2026-03-01 22:41:39 +00:00
Morfixx
280d8f66dd feat: initial github integration with importing projects (#421)
* feat: initial github integration with importing projects

* fix: remove unused args

* chore: remove duplicate col

---------

Co-authored-by: Henry <henry_ball@hotmail.co.uk>
2026-03-01 22:39:25 +00:00
31 changed files with 5559 additions and 299 deletions

View File

@@ -6,8 +6,6 @@ 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
@@ -84,7 +82,8 @@ jobs:
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=raw,value=latest,enable={{is_default_branch}}
type=raw,value=latest,enable=${{ github.ref_type == 'tag' }}
type=raw,value=edge,enable={{is_default_branch}}
- name: Extract Docker metadata (migrate)
id: meta-migrate
@@ -97,7 +96,8 @@ jobs:
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=raw,value=latest,enable={{is_default_branch}}
type=raw,value=latest,enable=${{ github.ref_type == 'tag' }}
type=raw,value=edge,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,6 +39,10 @@ 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
@@ -81,9 +85,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
@@ -211,6 +215,12 @@ 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
@@ -248,12 +258,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
TdfEV7/translation: cf5127ecfd7e43a35466a1ba5fe16450
aKJHG%2B/translation: 63de765f7fd7bc5238a3e36532306b6b
TdfEV7/message: cf5127ecfd7e43a35466a1ba5fe16450
TdfEV7/origin/0/0: 4b563046ba98abb3777fb1c3560866aa
TdfEV7/translation: cf5127ecfd7e43a35466a1ba5fe16450
lo8xBK/message: f9b67026c5ef86ac4d5944380d571961
lo8xBK/placeholders/entityLabel/0: 5745fa1af326b9ac2b140cbbef90cdeb
lo8xBK/origin/0/0: 68450df287fb46ea629e818732c1291a
@@ -341,9 +351,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
@@ -356,9 +366,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
@@ -383,9 +393,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
@@ -618,13 +628,21 @@ 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: 3c57a918258af4b44c187f58d203345f
nk7caK/origin/1/0: 9d4260644f1a12f41d6b72574eeb111c
nk7caK/origin/0/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
@@ -826,6 +844,9 @@ 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
@@ -975,6 +996,9 @@ 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
@@ -990,6 +1014,9 @@ 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
@@ -1155,7 +1182,14 @@ 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
@@ -1228,9 +1262,11 @@ 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
@@ -1518,9 +1554,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
@@ -1545,6 +1581,9 @@ 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
@@ -1700,40 +1739,41 @@ checksums:
tyHiOa/origin/10/0: fc0c18a095a68277a0f90a115942683b
tyHiOa/origin/11/0: fc0c18a095a68277a0f90a115942683b
tyHiOa/origin/12/0: 3c57a918258af4b44c187f58d203345f
tyHiOa/origin/13/0: 3a89a46ac678e34dc8eb687b07a4ad4b
tyHiOa/origin/14/0: a31bf5b0f5348dedcad98939fcf7f93f
tyHiOa/origin/13/0: 3c57a918258af4b44c187f58d203345f
tyHiOa/origin/14/0: 3a89a46ac678e34dc8eb687b07a4ad4b
tyHiOa/origin/15/0: a31bf5b0f5348dedcad98939fcf7f93f
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/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/30/0: 15fd9c05fc09ccbbb54aadc4aa5e5501
tyHiOa/origin/31/0: 68450df287fb46ea629e818732c1291a
tyHiOa/origin/32/0: afee530613110e248ffde6b56872ebed
tyHiOa/origin/31/0: 15fd9c05fc09ccbbb54aadc4aa5e5501
tyHiOa/origin/32/0: 68450df287fb46ea629e818732c1291a
tyHiOa/origin/33/0: afee530613110e248ffde6b56872ebed
tyHiOa/origin/34/0: afee530613110e248ffde6b56872ebed
tyHiOa/origin/35/0: 8628ddb6f4ded25c0f17e2cbda8207d3
tyHiOa/origin/35/0: afee530613110e248ffde6b56872ebed
tyHiOa/origin/36/0: 8628ddb6f4ded25c0f17e2cbda8207d3
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/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/translation: 21ffcf0b00e7cd7b64f7454a95762e1d
PZCqeW/message: 325dea6dd0348a27a6818db2c1340c98
PZCqeW/origin/0/0: 8628ddb6f4ded25c0f17e2cbda8207d3
@@ -1914,6 +1954,7 @@ 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
@@ -2073,12 +2114,12 @@ checksums:
nhMhRr/message: 07edd8c50685a52c0969d711df26d768
nhMhRr/origin/0/0: 1fd8ccf586705354bcae6e1186108fc7
nhMhRr/translation: 07edd8c50685a52c0969d711df26d768
NcFrgC/translation: bd15a7b3d8b4bce18cd42682ea1ec164
NcFrgC/message: bd15a7b3d8b4bce18cd42682ea1ec164
NcFrgC/origin/0/0: 0ad2af981579a62b084b3d41462c5546
C6gv54/translation: 1573c77059bc92df17e661befda8d9b7
NcFrgC/translation: bd15a7b3d8b4bce18cd42682ea1ec164
C6gv54/message: 1573c77059bc92df17e661befda8d9b7
C6gv54/origin/0/0: 0ad2af981579a62b084b3d41462c5546
C6gv54/translation: 1573c77059bc92df17e661befda8d9b7
jlB2RY/message: 67a76bf346ab4b48563269e9d941a64a
jlB2RY/origin/0/0: 0627e0040ca4939c9a57349e98c51797
jlB2RY/translation: 67a76bf346ab4b48563269e9d941a64a
@@ -2155,6 +2196,9 @@ 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
@@ -2276,9 +2320,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
@@ -2571,12 +2615,24 @@ 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

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

File diff suppressed because one or more lines are too long

View File

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

File diff suppressed because one or more lines are too long

View File

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

File diff suppressed because one or more lines are too long

View File

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

File diff suppressed because one or more lines are too long

View File

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

File diff suppressed because one or more lines are too long

View File

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

File diff suppressed because one or more lines are too long

View File

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

File diff suppressed because one or more lines are too long

View File

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

File diff suppressed because one or more lines are too long

View File

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

File diff suppressed because one or more lines are too long

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 { FaTrello } from "react-icons/fa";
import { FaGithub, FaTrello } from "react-icons/fa";
import {
HiChevronUpDown,
HiMiniArrowTopRightOnSquare,
@@ -27,12 +27,23 @@ const integrationProviders: Record<
name: "Trello",
icon: <FaTrello />,
},
github: {
name: "GitHub",
icon: <FaGithub />,
},
};
const SelectSource = ({ handleNextStep }: { handleNextStep: () => void }) => {
const SelectSource = ({
handleNextStep,
}: {
handleNextStep: (provider: string) => void;
}) => {
const { data: integrations, refetch: refetchIntegrations } =
api.integration.providers.useQuery();
const { control, handleSubmit } = useForm({
const { data: githubStatus, refetch: refetchGithubStatus } =
api.integration.getGitHubStatus.useQuery();
const { control, handleSubmit, watch } = useForm({
defaultValues: {
source: integrations?.[0]?.provider ?? "trello",
},
@@ -47,23 +58,36 @@ const SelectSource = ({ handleNextStep }: { handleNextStep: () => void }) => {
},
);
const hasIntegrations = integrations && integrations.length > 0;
const availableIntegrations = [
...(integrations ?? []),
...(githubStatus?.connected ? [{ provider: "github" }] : []),
];
const hasIntegrations = availableIntegrations.length > 0;
useEffect(() => {
const handleFocus = () => {
refetchIntegrations();
void refetchIntegrations();
void refetchGithubStatus();
};
window.addEventListener("focus", handleFocus);
return () => {
window.removeEventListener("focus", handleFocus);
};
}, [refetchIntegrations]);
}, [refetchIntegrations, refetchGithubStatus]);
const onSubmit = () => {
if (!hasIntegrations && trelloUrl) {
window.open(trelloUrl.url, "trello_auth", "height=800,width=600");
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");
} else {
handleNextStep();
handleNextStep(selected);
}
};
@@ -102,7 +126,7 @@ const SelectSource = ({ handleNextStep }: { handleNextStep: () => void }) => {
>
<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 ? (
integrations.map((integration, index) => (
availableIntegrations.map((integration, index) => (
<Listbox.Option
key={`source_${index}`}
className="relative cursor-default select-none px-1"
@@ -123,18 +147,32 @@ const SelectSource = ({ handleNextStep }: { handleNextStep: () => void }) => {
</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="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.Options>
</Transition>
@@ -154,7 +192,159 @@ const SelectSource = ({ handleNextStep }: { handleNextStep: () => void }) => {
!hasIntegrations ? <HiMiniArrowTopRightOnSquare /> : undefined
}
>
{hasIntegrations ? t`Select source` : t`Connect Trello`}
{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>
</Button>
</div>
</div>
@@ -213,7 +403,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);
@@ -267,7 +457,7 @@ const ImportTrello: React.FC = () => {
return (
<form onSubmit={handleSubmitBoards(onSubmitBoards)}>
<div className="h-[105px] overflow-scroll px-5">{renderContent()}</div>
<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
@@ -277,7 +467,7 @@ const ImportTrello: React.FC = () => {
const newState = !isSelectAllEnabled;
setIsSelectAllEnabled(newState);
for (const board of boards || []) {
for (const board of boards ?? []) {
setValue(board.id, newState);
}
}}
@@ -313,6 +503,7 @@ const ImportTrello: React.FC = () => {
export function ImportBoardsForm() {
const { closeModal } = useModal();
const [step, setStep] = useState(1);
const [provider, setProvider] = useState<string | null>(null);
return (
<div>
@@ -339,8 +530,16 @@ export function ImportBoardsForm() {
</button>
</div>
{step === 1 && <SelectSource handleNextStep={() => setStep(step + 1)} />}
{step === 2 && <ImportTrello />}
{step === 1 && (
<SelectSource
handleNextStep={(p) => {
setProvider(p);
setStep(step + 1);
}}
/>
)}
{step === 2 && provider === "trello" && <ImportTrello />}
{step === 2 && provider === "github" && <ImportGithub />}
</div>
);
}

View File

@@ -1,9 +1,13 @@
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";
@@ -11,10 +15,28 @@ 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,
@@ -34,21 +56,25 @@ export default function IntegrationsSettings() {
},
);
const { data: githubStatus, refetch: refetchGithubStatus } =
api.integration.getGitHubStatus.useQuery();
useEffect(() => {
const handleFocus = () => {
refetchIntegrations();
void refetchIntegrations();
void refetchGithubStatus();
};
window.addEventListener("focus", handleFocus);
return () => {
window.removeEventListener("focus", handleFocus);
};
}, [refetchIntegrations]);
}, [refetchIntegrations, refetchGithubStatus]);
const { mutateAsync: disconnectTrello } =
api.integration.disconnect.useMutation({
onSuccess: () => {
refetchIntegrations();
refetchTrelloUrl();
void refetchIntegrations();
void refetchTrelloUrl();
showPopup({
header: t`Trello disconnected`,
message: t`Your Trello account has been disconnected.`,
@@ -64,6 +90,49 @@ 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`} />
@@ -112,6 +181,51 @@ 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,10 +11,12 @@ 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 { generateUID } from "@kan/shared/utils";
import { generateSlug, 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 {
@@ -50,6 +52,51 @@ 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;
@@ -464,4 +511,436 @@ 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,7 +14,65 @@ 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: {
@@ -67,7 +125,7 @@ export const integrationRouter = createTRPCRouter({
protect: true,
},
})
.input(z.object({ provider: z.enum(["trello"]) }))
.input(z.object({ provider: z.enum(["trello", "github"]) }))
.output(z.object({}))
.mutation(async ({ ctx, input }) => {
const user = ctx.user;

View File

@@ -0,0 +1,53 @@
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

@@ -0,0 +1,2 @@
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,16 +187,30 @@
{
"idx": 26,
"version": "7",
"when": 1771192000000,
"tag": "20260129210000_AddWorkspaceWebhooks",
"when": 1770521594167,
"tag": "20260208033314_AddAttachmentToActivity",
"breakpoints": true
},
{
"idx": 27,
"version": "7",
"when": 1771192000000,
"tag": "20260129210000_AddWorkspaceWebhooks",
"breakpoints": true
},
{
"idx": 28,
"version": "7",
"when": 1772049587901,
"tag": "20260225195947_AddIsArchivedToBoard",
"breakpoints": true
},
{
"idx": 28,
"version": "7",
"when": 1771930355536,
"tag": "20260224105235_AddGitHubIntegrationSupport",
"breakpoints": true
}
]
}

View File

@@ -46,6 +46,35 @@ 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"]);
export const importSourceEnum = pgEnum("source", ["trello", "github"]);
export const importStatusEnum = pgEnum("status", [
"started",
"success",

View File

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