Compare commits

..

14 Commits

Author SHA1 Message Date
Henry
d811ce9c44 chore: translations 2025-09-08 23:21:49 +01:00
Henry
7f496adf63 feat: allow multiple subscriptions 2025-09-08 23:20:02 +01:00
Henry
38803f6696 feat(cloud): show pro workspace features 2025-09-08 22:09:45 +01:00
Henry
99459415d5 chore: translations 2025-09-07 23:09:42 +01:00
Henry
5a4835091f feat(cloud): unlimited seats (#166)
* feat: add unlimitedSeats to subscription

* feat: set unlimited seats to true for pro plans

* feat: add unlimited invites messaging

* feat: upgrade to pro via auth client

* feat: add subscription repo funcs

* chore: move subscription utils to shared

* feat: skip updating subscription if unlimited seats
2025-09-07 22:50:20 +01:00
Henry
061a54dadd fix: extract memberPublicId from callbackURL after accepting invitation (#165) 2025-09-06 22:51:39 +01:00
Henry
a532fa1ce2 feat(cloud): enable promo codes for checkout 2025-09-04 22:52:31 +01:00
Henry
2a355238a4 feat(cloud): prevent cloud mailer from sending emails 2025-09-04 22:30:21 +01:00
Henry
874353e8b8 feat(cloud): update proration behavior to invoice at next subscription cycle 2025-09-04 22:03:19 +01:00
Henry
18e60333ae fix(cloud): use next-runtime-env on members page 2025-09-03 21:08:08 +01:00
Henry
d729785802 chore(cloud): use next-runtime-env for baseURL 2025-09-02 23:22:59 +01:00
Henry
abbbb4b928 chore(cloud): remove stripe customer creation from auth hook 2025-09-02 23:02:01 +01:00
Henry
3cea9377e6 chore(cloud): update env vars 2025-09-02 22:49:36 +01:00
Henry
06c268bed1 feat(cloud): enable seat based pricing (#161)
* feat: setup subscriptions

* feat: prompt user to create subscription if inactive

* feat: update subscription when increasing/decreasing workspace members

* feat: rework upgrade

* chore: remove pricing notice

* chore: add translations

* chore: update proration comment
2025-09-02 22:36:09 +01:00
35 changed files with 3638 additions and 599 deletions

View File

@@ -55,6 +55,7 @@ checksums:
Billing%20portal/singular: dc3afa14ffe19f5920992a0c9d49d525 Billing%20portal/singular: dc3afa14ffe19f5920992a0c9d49d525
Blog%20Post/singular: 38e027f212be445dc530e427fc642a20 Blog%20Post/singular: 38e027f212be445dc530e427fc642a20
Board/singular: 101ff39aab674c033c15ab978d0d8bac Board/singular: 101ff39aab674c033c15ab978d0d8bac
Board%20analytics%20(coming%20soon)/singular: 3f648e6fe3849ee2ac5cdf410ac9ea06
Board%20name%20cannot%20exceed%20100%20characters/singular: 985c0177744ec56d8dac84f66ec284ca Board%20name%20cannot%20exceed%20100%20characters/singular: 985c0177744ec56d8dac84f66ec284ca
Board%20name%20is%20required/singular: dbd0c6cc945ab19e702fc27f970a023b Board%20name%20is%20required/singular: dbd0c6cc945ab19e702fc27f970a023b
Board%20not%20found/singular: 5af9844595fa8aed5985066620435515 Board%20not%20found/singular: 5af9844595fa8aed5985066620435515
@@ -87,7 +88,6 @@ checksums:
Complete%20control%20and%20ownership%3A/singular: 0d8b682ba873272217425ccfc96aa9cd Complete%20control%20and%20ownership%3A/singular: 0d8b682ba873272217425ccfc96aa9cd
completed%20a%20checklist%20item/singular: 757b04c6c80cc927e1c597c0ad4fda33 completed%20a%20checklist%20item/singular: 757b04c6c80cc927e1c597c0ad4fda33
completed%20checklist%20item%20%3C0%3E%7B0%7D%3C%2F0%3E/singular: 71ec18acf051fc909a48a07ca3578673 completed%20checklist%20item%20%3C0%3E%7B0%7D%3C%2F0%3E/singular: 71ec18acf051fc909a48a07ca3578673
Confirm%20URL%20change/singular: e14b4ce081d1ef6194b37e1814e97b39
Confirm%20your%20new%20password/singular: a0d2935d7b63f8dd19d7c0de47524416 Confirm%20your%20new%20password/singular: a0d2935d7b63f8dd19d7c0de47524416
Connect%20Trello/singular: 4440a0b9e387ef7136e3958e7a089213 Connect%20Trello/singular: 4440a0b9e387ef7136e3958e7a089213
Connect%20your%20favorite%20tools%20to%20streamline%20your%20workflow./singular: 033c5dcdb059ccb634aef7fe63f2f45d Connect%20your%20favorite%20tools%20to%20streamline%20your%20workflow./singular: 033c5dcdb059ccb634aef7fe63f2f45d
@@ -113,7 +113,7 @@ checksums:
Critical/singular: eb327cd411b50aee954f8d1d215d003a Critical/singular: eb327cd411b50aee954f8d1d215d003a
Current%20password%20is%20required/singular: 72536bca9598680027f2be8ce80ac280 Current%20password%20is%20required/singular: 72536bca9598680027f2be8ce80ac280
Custom%20domain/singular: b09e7a9c187b7163b4a6cfc78042fe42 Custom%20domain/singular: b09e7a9c187b7163b4a6cfc78042fe42
Custom%20URLs%20are%20a%20premium%20feature.%20You'll%20be%20directed%20to%20upgrade%20your%20account./singular: b52e4f6122cf739c9551d29beb89b25e Custom%20workspace%20URL/singular: 7ba841d0946eb04fa3d17d74365be37b
Customer%20Support/singular: 50e3c77e22e41061ca85ea2f02625a2e Customer%20Support/singular: 50e3c77e22e41061ca85ea2f02625a2e
Dark/singular: 73e6e208ba628b26e90fcf6dce15e1b2 Dark/singular: 73e6e208ba628b26e90fcf6dce15e1b2
Delete/singular: 8bcf303dd10a645b5baacb02b47d72c9 Delete/singular: 8bcf303dd10a645b5baacb02b47d72c9
@@ -230,6 +230,7 @@ checksums:
Labels/singular: 6f15627a90002323eac018274b6922d6 Labels/singular: 6f15627a90002323eac018274b6922d6
Labels%20%26%20Filters/singular: 8f0bdd6084516f8241cb613178114390 Labels%20%26%20Filters/singular: 8f0bdd6084516f8241cb613178114390
Language/singular: 277fd1a41cc237a437cd1d5e4a80463b Language/singular: 277fd1a41cc237a437cd1d5e4a80463b
Launch%20offer/singular: 624592ba2ecf647a3fe60d493c1ee71a
Learning/singular: 90e91da3f870f065f2da9aa9adf53514 Learning/singular: 90e91da3f870f065f2da9aa9adf53514
Legal/singular: 00d3f08da61a21887009819cf93fb414 Legal/singular: 00d3f08da61a21887009819cf93fb414
License/singular: ac2bcac75151e2fcd9eb768cea275a77 License/singular: ac2bcac75151e2fcd9eb768cea275a77
@@ -296,6 +297,8 @@ checksums:
Priority%20email%20support/singular: 678538c912a770b1e1416ecdb8e299b1 Priority%20email%20support/singular: 678538c912a770b1e1416ecdb8e299b1
Privacy%20policy/singular: 462c6a536b52873e4498785c66dd48c8 Privacy%20policy/singular: 462c6a536b52873e4498785c66dd48c8
Private/singular: d740d0660e68c61db1853489356030ae Private/singular: d740d0660e68c61db1853489356030ae
Pro%20Plan/singular: 76a09fd843b496610f8cf1dced417b62
Pro%20Plan%20%E2%88%9E/singular: a898be9e4610706b9b8146a209e8ba16
Profile%20image%20updated/singular: 1ba6609b50bc217a36ab659563e78dae Profile%20image%20updated/singular: 1ba6609b50bc217a36ab659563e78dae
Profile%20picture/singular: d9b5e595877ffe2557486a987dd28274 Profile%20picture/singular: d9b5e595877ffe2557486a987dd28274
Public/singular: c834f11dab0881632aded3f01d4f8fa9 Public/singular: c834f11dab0881632aded3f01d4f8fa9
@@ -344,6 +347,7 @@ checksums:
Software%20Development/singular: 67659097ef6bcb194839858b2c4f3a3c Software%20Development/singular: 67659097ef6bcb194839858b2c4f3a3c
Star%20on%20Github/singular: e5cb0428f1ac6485688f120d78742875 Star%20on%20Github/singular: e5cb0428f1ac6485688f120d78742875
Success/singular: c43827becada6750f7a25890905f38b9 Success/singular: c43827becada6750f7a25890905f38b9
Supercharge%20your%20workspace%20for%20just%20%2429%2Fmonth.%20Here's%20what%20you'll%20get%3A/singular: 21af8119141afcce5f12da489f34db6a
Support/singular: 55aab5fd0f31a9cb055a2edeeedfaf63 Support/singular: 55aab5fd0f31a9cb055a2edeeedfaf63
Support%20the%20development%20of%20the%20project/singular: c63bab228ab2b1be4370c668a99cd278 Support%20the%20development%20of%20the%20project/singular: c63bab228ab2b1be4370c668a99cd278
System/singular: 803281c327a02a2feba182f4a2b38311 System/singular: 803281c327a02a2feba182f4a2b38311
@@ -399,6 +403,7 @@ checksums:
Unlimited%20cards/singular: f44c1050c4d6aa39c8cdf5f4a7d12577 Unlimited%20cards/singular: f44c1050c4d6aa39c8cdf5f4a7d12577
Unlimited%20comments/singular: 31dbcf487c49a9997142e96bb3ab0040 Unlimited%20comments/singular: 31dbcf487c49a9997142e96bb3ab0040
Unlimited%20lists/singular: 5c418701b27b9acbc5dd199719007362 Unlimited%20lists/singular: 5c418701b27b9acbc5dd199719007362
Unlimited%20members/singular: f2949ca2dc18b0063af92e60779abb65
Update/singular: 079fc039262fd31b10532929685c2d1b Update/singular: 079fc039262fd31b10532929685c2d1b
Update%20label/singular: 97880b503dfe956941c5f23025a1c102 Update%20label/singular: 97880b503dfe956941c5f23025a1c102
updated%20a%20checklist%20item/singular: 198e1d1d503f4b69b752dd84d0cc0e9d updated%20a%20checklist%20item/singular: 198e1d1d503f4b69b752dd84d0cc0e9d
@@ -406,6 +411,7 @@ checksums:
updated%20the%20title/singular: 98cf8f12923ec1a58e767e3a40863b21 updated%20the%20title/singular: 98cf8f12923ec1a58e767e3a40863b21
updated%20the%20title%20to%20%3C0%3E%7B0%7D%3C%2F0%3E/singular: aca196d729401d8adc5c8ca9d558840e updated%20the%20title%20to%20%3C0%3E%7B0%7D%3C%2F0%3E/singular: aca196d729401d8adc5c8ca9d558840e
Upgrade/singular: 63c3b52882e0d779859307d672c178c2 Upgrade/singular: 63c3b52882e0d779859307d672c178c2
Upgrade%20to%20Pro/singular: 972773025e763ddf53273df6d37a729a
Upgrade%20to%20Team%20Plan/singular: 40e2ef151266937f8bbe63b3d361f645 Upgrade%20to%20Team%20Plan/singular: 40e2ef151266937f8bbe63b3d361f645
Urgent/singular: e79afcd4398e52e10e7e8243a7eecabe Urgent/singular: e79afcd4398e52e10e7e8243a7eecabe
URL%20can%20only%20contain%20letters%2C%20numbers%2C%20and%20hyphens/singular: 875d37d2d920f98ef60a314eda8a5d9a URL%20can%20only%20contain%20letters%2C%20numbers%2C%20and%20hyphens/singular: 875d37d2d920f98ef60a314eda8a5d9a
@@ -451,6 +457,7 @@ checksums:
You%20can%20self-host%20by%20following%20the%20instructions%20in%20our%20%3C0%3Erepo%3C%2F0%3E./singular: a6152a41b2d8f64d5a657e5b8bc808a9 You%20can%20self-host%20by%20following%20the%20instructions%20in%20our%20%3C0%3Erepo%3C%2F0%3E./singular: a6152a41b2d8f64d5a657e5b8bc808a9
You%20have%20been%20logged%20in%20successfully./singular: ef8fad1dce13ae4112f17c5258655fea You%20have%20been%20logged%20in%20successfully./singular: ef8fad1dce13ae4112f17c5258655fea
You%20have%20been%20signed%20up%20successfully./singular: f614a6e3b45f5ffb9a3b0fb420fef84b You%20have%20been%20signed%20up%20successfully./singular: f614a6e3b45f5ffb9a3b0fb420fef84b
You%20have%20unlimited%20seats%20with%20your%20Pro%20Plan.%20There%20is%20no%20additional%20charge%20for%20new%20members!/singular: e3dc59a5ba7211cd3d8516b3a79d85ca
Your%20account%20has%20been%20deleted./singular: 8c8d944e07388c5877effdb2c2803dcf Your%20account%20has%20been%20deleted./singular: 8c8d944e07388c5877effdb2c2803dcf
Your%20boards%20have%20been%20imported./singular: 403972e7a25afc2415762c1c2b1ec868 Your%20boards%20have%20been%20imported./singular: 403972e7a25afc2415762c1c2b1ec868
Your%20display%20name%20has%20been%20updated./singular: 15e5fff36c554c16ec5214427fae1bf4 Your%20display%20name%20has%20been%20updated./singular: 15e5fff36c554c16ec5214427fae1bf4

View File

@@ -36,12 +36,12 @@ msgstr "{0} Labels"
msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({boardCount})}}" msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({boardCount})}}"
msgstr "{boardCount, plural, one {Board importieren (1)} other {Boards importieren ({boardCount})}}" msgstr "{boardCount, plural, one {Board importieren (1)} other {Boards importieren ({boardCount})}}"
#: src/views/members/components/InviteMemberForm.tsx:91 #: src/views/members/components/InviteMemberForm.tsx:92
#: src/views/members/components/InviteMemberForm.tsx:106 #: src/views/members/components/InviteMemberForm.tsx:104
msgid "$10/month" msgid "$10/month"
msgstr "$10/Monat" msgstr "$10/Monat"
#: src/views/members/components/InviteMemberForm.tsx:106 #: src/views/members/components/InviteMemberForm.tsx:104
msgid "$8/month" msgid "$8/month"
msgstr "$8/Monat" msgstr "$8/Monat"
@@ -97,7 +97,7 @@ msgid "Add label"
msgstr "Label hinzufügen" msgstr "Label hinzufügen"
#: src/views/card/components/MemberSelector.tsx:130 #: src/views/card/components/MemberSelector.tsx:130
#: src/views/members/components/InviteMemberForm.tsx:149 #: src/views/members/components/InviteMemberForm.tsx:147
msgid "Add member" msgid "Add member"
msgstr "Mitglied hinzufügen" msgstr "Mitglied hinzufügen"
@@ -132,7 +132,7 @@ msgstr "hat Checklistenelement <0>{0}</0> hinzugefügt"
msgid "added label <0>{0}</0>" msgid "added label <0>{0}</0>"
msgstr "hat Label <0>{0}</0> hinzugefügt" msgstr "hat Label <0>{0}</0> hinzugefügt"
#: src/views/members/components/InviteMemberForm.tsx:186 #: src/views/members/components/InviteMemberForm.tsx:187
msgid "Adding a new member will cost an additional {price} ({billingType}) per seat." msgid "Adding a new member will cost an additional {price} ({billingType}) per seat."
msgstr "Das Hinzufügen eines neuen Mitglieds kostet zusätzlich {price} ({billingType}) pro Platz." msgstr "Das Hinzufügen eines neuen Mitglieds kostet zusätzlich {price} ({billingType}) pro Platz."
@@ -148,7 +148,7 @@ msgstr "Alle Systeme funktionieren"
msgid "Already have an account? <0><1>Sign in</1></0>" msgid "Already have an account? <0><1>Sign in</1></0>"
msgstr "Du hast bereits ein Konto? <0><1>Anmelden</1></0>" msgstr "Du hast bereits ein Konto? <0><1>Anmelden</1></0>"
#: src/views/settings/index.tsx:102 #: src/views/settings/index.tsx:113
msgid "An error occurred while disconnecting your Trello account." msgid "An error occurred while disconnecting your Trello account."
msgstr "Beim Trennen deines Trello-Kontos ist ein Fehler aufgetreten." msgstr "Beim Trennen deines Trello-Kontos ist ein Fehler aufgetreten."
@@ -156,7 +156,7 @@ msgstr "Beim Trennen deines Trello-Kontos ist ein Fehler aufgetreten."
msgid "An unexpected error occurred. Please try again later." msgid "An unexpected error occurred. Please try again later."
msgstr "Ein unerwarteter Fehler ist aufgetreten. Bitte versuchen Sie es später erneut." msgstr "Ein unerwarteter Fehler ist aufgetreten. Bitte versuchen Sie es später erneut."
#: src/views/settings/index.tsx:259 #: src/views/settings/index.tsx:282
msgid "API keys" msgid "API keys"
msgstr "API-Schlüssel" msgstr "API-Schlüssel"
@@ -218,20 +218,20 @@ msgstr "Backlog"
msgid "Basic Kanban" msgid "Basic Kanban"
msgstr "Einfaches Kanban" msgstr "Einfaches Kanban"
#: src/views/members/components/InviteMemberForm.tsx:107 #: src/views/members/components/InviteMemberForm.tsx:105
msgid "billed annually" msgid "billed annually"
msgstr "jährlich abgerechnet" msgstr "jährlich abgerechnet"
#: src/views/members/components/InviteMemberForm.tsx:107 #: src/views/members/components/InviteMemberForm.tsx:105
msgid "billed monthly" msgid "billed monthly"
msgstr "monatlich abgerechnet" msgstr "monatlich abgerechnet"
#: src/views/boards/components/TemplateBoards.tsx:55 #: src/views/boards/components/TemplateBoards.tsx:55
#: src/views/settings/index.tsx:198 #: src/views/settings/index.tsx:221
msgid "Billing" msgid "Billing"
msgstr "Abrechnung" msgstr "Abrechnung"
#: src/views/settings/index.tsx:208 #: src/views/settings/index.tsx:231
msgid "Billing portal" msgid "Billing portal"
msgstr "Abrechnungsportal" msgstr "Abrechnungsportal"
@@ -243,6 +243,10 @@ msgstr "Blogbeitrag"
msgid "Board" msgid "Board"
msgstr "Board" msgstr "Board"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:80
msgid "Board analytics (coming soon)"
msgstr "Board-Analytik (demnächst verfügbar)"
#: src/views/boards/components/NewBoardForm.tsx:21 #: src/views/boards/components/NewBoardForm.tsx:21
msgid "Board name cannot exceed 100 characters" msgid "Board name cannot exceed 100 characters"
msgstr "Der Name des Boards darf 100 Zeichen nicht überschreiten" msgstr "Der Name des Boards darf 100 Zeichen nicht überschreiten"
@@ -309,9 +313,9 @@ msgstr "Fehlerbericht"
#: src/views/card/components/DeleteCommentConfirmation.tsx:76 #: src/views/card/components/DeleteCommentConfirmation.tsx:76
#: src/views/members/components/DeleteMemberConfirmation.tsx:55 #: src/views/members/components/DeleteMemberConfirmation.tsx:55
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168 #: src/views/settings/components/ChangePasswordConfirmation.tsx:168
#: src/views/settings/components/CustomURLConfirmation.tsx:50
#: src/views/settings/components/DeleteAccountConfirmation.tsx:88 #: src/views/settings/components/DeleteAccountConfirmation.tsx:88
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98
#: src/views/settings/components/UpgradeToProConfirmation.tsx:94
msgid "Cancel" msgid "Cancel"
msgstr "Abbrechen" msgstr "Abbrechen"
@@ -325,12 +329,12 @@ msgstr "Kartentitel"
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109 #: src/views/settings/components/ChangePasswordConfirmation.tsx:109
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178 #: src/views/settings/components/ChangePasswordConfirmation.tsx:178
#: src/views/settings/index.tsx:291 #: src/views/settings/index.tsx:314
#: src/views/settings/index.tsx:301 #: src/views/settings/index.tsx:324
msgid "Change Password" msgid "Change Password"
msgstr "Passwort ändern" msgstr "Passwort ändern"
#: src/views/settings/index.tsx:190 #: src/views/settings/index.tsx:213
msgid "Change the language of the app." msgid "Change the language of the app."
msgstr "Ändere die Sprache der App." msgstr "Ändere die Sprache der App."
@@ -389,16 +393,12 @@ msgstr "hat ein Checklistenelement abgeschlossen"
msgid "completed checklist item <0>{0}</0>" msgid "completed checklist item <0>{0}</0>"
msgstr "hat Checklistenelement <0>{0}</0> abgeschlossen" msgstr "hat Checklistenelement <0>{0}</0> abgeschlossen"
#: src/views/settings/components/CustomURLConfirmation.tsx:42
msgid "Confirm URL change"
msgstr "URL-Änderung bestätigen"
#: src/views/settings/components/ChangePasswordConfirmation.tsx:150 #: src/views/settings/components/ChangePasswordConfirmation.tsx:150
msgid "Confirm your new password" msgid "Confirm your new password"
msgstr "Bestätigen Sie Ihr neues Passwort" msgstr "Bestätigen Sie Ihr neues Passwort"
#: src/views/boards/components/ImportBoardsForm.tsx:157 #: src/views/boards/components/ImportBoardsForm.tsx:157
#: src/views/settings/index.tsx:235 #: src/views/settings/index.tsx:258
msgid "Connect Trello" msgid "Connect Trello"
msgstr "Trello verbinden" msgstr "Trello verbinden"
@@ -406,7 +406,7 @@ msgstr "Trello verbinden"
msgid "Connect your favorite tools to streamline your workflow." msgid "Connect your favorite tools to streamline your workflow."
msgstr "Verbinde deine Lieblingstools, um deinen Arbeitsablauf zu optimieren." msgstr "Verbinde deine Lieblingstools, um deinen Arbeitsablauf zu optimieren."
#: src/views/settings/index.tsx:222 #: src/views/settings/index.tsx:245
msgid "Connect your Trello account to import boards." msgid "Connect your Trello account to import boards."
msgstr "Verbinde dein Trello-Konto, um Boards zu importieren." msgstr "Verbinde dein Trello-Konto, um Boards zu importieren."
@@ -499,9 +499,9 @@ msgstr "Aktuelles Passwort ist erforderlich"
msgid "Custom domain" msgid "Custom domain"
msgstr "Benutzerdefinierte Domain" msgstr "Benutzerdefinierte Domain"
#: src/views/settings/components/CustomURLConfirmation.tsx:45 #: src/views/settings/components/UpgradeToProConfirmation.tsx:74
msgid "Custom URLs are a premium feature. You'll be directed to upgrade your account." msgid "Custom workspace URL"
msgstr "Benutzerdefinierte URLs sind eine Premium-Funktion. Du wirst zur Aktualisierung deines Kontos weitergeleitet." msgstr "Benutzerdefinierte Workspace-URL"
#: src/views/boards/components/TemplateBoards.tsx:41 #: src/views/boards/components/TemplateBoards.tsx:41
msgid "Customer Support" msgid "Customer Support"
@@ -520,8 +520,8 @@ msgid "Delete"
msgstr "Löschen" msgstr "Löschen"
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96 #: src/views/settings/components/DeleteAccountConfirmation.tsx:96
#: src/views/settings/index.tsx:309 #: src/views/settings/index.tsx:332
#: src/views/settings/index.tsx:319 #: src/views/settings/index.tsx:342
msgid "Delete account" msgid "Delete account"
msgstr "Konto löschen" msgstr "Konto löschen"
@@ -542,8 +542,8 @@ msgid "Delete list"
msgstr "Liste löschen" msgstr "Liste löschen"
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
#: src/views/settings/index.tsx:272 #: src/views/settings/index.tsx:295
#: src/views/settings/index.tsx:283 #: src/views/settings/index.tsx:306
msgid "Delete workspace" msgid "Delete workspace"
msgstr "Workspace löschen" msgstr "Workspace löschen"
@@ -569,7 +569,7 @@ msgstr "hat Checklistenelement <0>{0}</0> gelöscht"
msgid "Design" msgid "Design"
msgstr "Design" msgstr "Design"
#: src/views/settings/index.tsx:250 #: src/views/settings/index.tsx:273
msgid "Disconnect Trello" msgid "Disconnect Trello"
msgstr "Trello trennen" msgstr "Trello trennen"
@@ -577,7 +577,7 @@ msgstr "Trello trennen"
msgid "Discuss and collaborate on cards." msgid "Discuss and collaborate on cards."
msgstr "Diskutiere und arbeite gemeinsam an Karten." msgstr "Diskutiere und arbeite gemeinsam an Karten."
#: src/views/settings/index.tsx:151 #: src/views/settings/index.tsx:162
msgid "Display name" msgid "Display name"
msgstr "Anzeigename" msgstr "Anzeigename"
@@ -647,7 +647,7 @@ msgstr "Bearbeitung"
msgid "email" msgid "email"
msgstr "E-Mail" msgstr "E-Mail"
#: src/views/members/components/InviteMemberForm.tsx:163 #: src/views/members/components/InviteMemberForm.tsx:161
msgid "Email" msgid "Email"
msgstr "E-Mail" msgstr "E-Mail"
@@ -695,12 +695,12 @@ msgstr "Fehler beim Löschen des Labels"
msgid "Error deleting workspace" msgid "Error deleting workspace"
msgstr "Fehler beim Löschen des Arbeitsbereichs" msgstr "Fehler beim Löschen des Arbeitsbereichs"
#: src/views/settings/index.tsx:101 #: src/views/settings/index.tsx:112
msgid "Error disconnecting Trello" msgid "Error disconnecting Trello"
msgstr "Fehler beim Trennen von Trello" msgstr "Fehler beim Trennen von Trello"
#: src/views/members/components/InviteMemberForm.tsx:76 #: src/views/members/components/InviteMemberForm.tsx:71
#: src/views/members/components/InviteMemberForm.tsx:82 #: src/views/members/components/InviteMemberForm.tsx:77
msgid "Error inviting member" msgid "Error inviting member"
msgstr "Fehler beim Einladen des Mitglieds" msgstr "Fehler beim Einladen des Mitglieds"
@@ -724,7 +724,8 @@ msgstr "Fehler beim Aktualisieren des Arbeitsbereichsnamens"
msgid "Error updating workspace URL" msgid "Error updating workspace URL"
msgstr "Fehler beim Aktualisieren der Workspace-URL" msgstr "Fehler beim Aktualisieren der Workspace-URL"
#: src/views/members/components/InviteMemberForm.tsx:132 #: src/views/members/components/InviteMemberForm.tsx:130
#: src/views/settings/components/UpgradeToProConfirmation.tsx:41
msgid "Error upgrading subscription" msgid "Error upgrading subscription"
msgstr "Fehler beim Upgrade des Abonnements" msgstr "Fehler beim Upgrade des Abonnements"
@@ -794,8 +795,8 @@ msgstr "Für langfristige Nachhaltigkeit erkennen wir an, dass alle guten Open-S
msgid "Free" msgid "Free"
msgstr "Kostenlos" msgstr "Kostenlos"
#: src/views/members/components/InviteMemberForm.tsx:192 #: src/views/members/components/InviteMemberForm.tsx:193
#: src/views/members/index.tsx:184 #: src/views/members/index.tsx:189
msgid "Free Plan" msgid "Free Plan"
msgstr "Kostenloser Plan" msgstr "Kostenloser Plan"
@@ -950,24 +951,24 @@ msgstr "Integrationen"
msgid "Interviewing" msgid "Interviewing"
msgstr "Vorstellungsgespräch" msgstr "Vorstellungsgespräch"
#: src/views/members/components/InviteMemberForm.tsx:45 #: src/views/members/components/InviteMemberForm.tsx:40
msgid "Invalid email address" msgid "Invalid email address"
msgstr "Ungültige E-Mail-Adresse" msgstr "Ungültige E-Mail-Adresse"
#: src/views/members/index.tsx:193 #: src/views/members/index.tsx:201
msgid "Invite" msgid "Invite"
msgstr "Einladen" msgstr "Einladen"
#: src/views/members/components/InviteMemberForm.tsx:207 #: src/views/members/components/InviteMemberForm.tsx:208
msgid "Invite another" msgid "Invite another"
msgstr "Weitere Person einladen" msgstr "Weitere Person einladen"
#: src/views/card/components/MemberSelector.tsx:112 #: src/views/card/components/MemberSelector.tsx:112
#: src/views/members/components/InviteMemberForm.tsx:231 #: src/views/members/components/InviteMemberForm.tsx:233
msgid "Invite member" msgid "Invite member"
msgstr "Mitglied einladen" msgstr "Mitglied einladen"
#: src/views/members/components/InviteMemberForm.tsx:195 #: src/views/members/components/InviteMemberForm.tsx:196
msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace." msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace."
msgstr "Das Einladen von Mitgliedern erfordert einen Team-Plan. Sie werden weitergeleitet, um Ihren Workspace zu upgraden." msgstr "Das Einladen von Mitgliedern erfordert einen Team-Plan. Sie werden weitergeleitet, um Ihren Workspace zu upgraden."
@@ -998,10 +999,14 @@ msgstr "Labels"
msgid "Labels & Filters" msgid "Labels & Filters"
msgstr "Labels & Filter" msgstr "Labels & Filter"
#: src/views/settings/index.tsx:187 #: src/views/settings/index.tsx:210
msgid "Language" msgid "Language"
msgstr "Sprache" msgstr "Sprache"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:67
msgid "Launch offer"
msgstr "Einführungsangebot"
#: src/views/boards/components/TemplateBoards.tsx:83 #: src/views/boards/components/TemplateBoards.tsx:83
msgid "Learning" msgid "Learning"
msgstr "Lernen" msgstr "Lernen"
@@ -1067,12 +1072,12 @@ msgstr "Mittlere Priorität"
#: src/views/board/components/Filters.tsx:93 #: src/views/board/components/Filters.tsx:93
#: src/views/board/components/NewCardForm.tsx:357 #: src/views/board/components/NewCardForm.tsx:357
#: src/views/card/index.tsx:125 #: src/views/card/index.tsx:125
#: src/views/members/index.tsx:171 #: src/views/members/index.tsx:172
msgid "Members" msgid "Members"
msgstr "Mitglieder" msgstr "Mitglieder"
#. placeholder {0}: workspace.name ?? "Workspace" #. placeholder {0}: workspace.name ?? "Workspace"
#: src/views/members/index.tsx:167 #: src/views/members/index.tsx:168
msgid "Members | {0}" msgid "Members | {0}"
msgstr "Mitglieder | {0}" msgstr "Mitglieder | {0}"
@@ -1080,7 +1085,7 @@ msgstr "Mitglieder | {0}"
msgid "Monthly" msgid "Monthly"
msgstr "Monatlich" msgstr "Monatlich"
#: src/views/members/components/InviteMemberForm.tsx:92 #: src/views/members/components/InviteMemberForm.tsx:93
msgid "monthly billing" msgid "monthly billing"
msgstr "monatliche Abrechnung" msgstr "monatliche Abrechnung"
@@ -1180,11 +1185,11 @@ msgstr "Angebot"
msgid "Onboarding" msgid "Onboarding"
msgstr "Einarbeitung" msgstr "Einarbeitung"
#: src/views/settings/index.tsx:312 #: src/views/settings/index.tsx:335
msgid "Once you delete your account, there is no going back. This action cannot be undone." msgid "Once you delete your account, there is no going back. This action cannot be undone."
msgstr "Sobald Sie Ihr Konto löschen, gibt es kein Zurück mehr. Diese Aktion kann nicht rückgängig gemacht werden." msgstr "Sobald Sie Ihr Konto löschen, gibt es kein Zurück mehr. Diese Aktion kann nicht rückgängig gemacht werden."
#: src/views/settings/index.tsx:275 #: src/views/settings/index.tsx:298
msgid "Once you delete your workspace, there is no going back. This action cannot be undone." msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
msgstr "Sobald Sie Ihren Arbeitsbereich löschen, gibt es kein Zurück mehr. Diese Aktion kann nicht rückgängig gemacht werden." msgstr "Sobald Sie Ihren Arbeitsbereich löschen, gibt es kein Zurück mehr. Diese Aktion kann nicht rückgängig gemacht werden."
@@ -1220,7 +1225,7 @@ msgstr "Passwörter stimmen nicht überein"
msgid "Payment frequency" msgid "Payment frequency"
msgstr "Zahlungshäufigkeit" msgstr "Zahlungshäufigkeit"
#: src/views/members/index.tsx:128 #: src/views/members/index.tsx:129
msgid "Pending" msgid "Pending"
msgstr "Ausstehend" msgstr "Ausstehend"
@@ -1282,8 +1287,8 @@ msgstr "Bitte wähle eine Datei zum Hochladen aus."
#: src/views/card/components/NewCommentForm.tsx:31 #: src/views/card/components/NewCommentForm.tsx:31
#: src/views/card/index.tsx:173 #: src/views/card/index.tsx:173
#: src/views/members/components/DeleteMemberConfirmation.tsx:28 #: src/views/members/components/DeleteMemberConfirmation.tsx:28
#: src/views/members/components/InviteMemberForm.tsx:83 #: src/views/members/components/InviteMemberForm.tsx:78
#: src/views/members/components/InviteMemberForm.tsx:133 #: src/views/members/components/InviteMemberForm.tsx:131
#: src/views/settings/components/Avatar.tsx:40 #: src/views/settings/components/Avatar.tsx:40
#: src/views/settings/components/Avatar.tsx:98 #: src/views/settings/components/Avatar.tsx:98
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40 #: src/views/settings/components/DeleteAccountConfirmation.tsx:40
@@ -1292,6 +1297,7 @@ msgstr "Bitte wähle eine Datei zum Hochladen aus."
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:62 #: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:62
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:57 #: src/views/settings/components/UpdateWorkspaceNameForm.tsx:57
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:74 #: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:74
#: src/views/settings/components/UpgradeToProConfirmation.tsx:42
msgid "Please try again later, or contact customer support." msgid "Please try again later, or contact customer support."
msgstr "Bitte versuche es später noch einmal oder kontaktiere den Kundensupport." msgstr "Bitte versuche es später noch einmal oder kontaktiere den Kundensupport."
@@ -1302,6 +1308,7 @@ msgid "Pricing"
msgstr "Preise" msgstr "Preise"
#: src/views/home/components/Pricing.tsx:56 #: src/views/home/components/Pricing.tsx:56
#: src/views/settings/components/UpgradeToProConfirmation.tsx:86
msgid "Priority email support" msgid "Priority email support"
msgstr "Prioritäts-E-Mail-Support" msgstr "Prioritäts-E-Mail-Support"
@@ -1313,11 +1320,19 @@ msgstr "Datenschutzrichtlinie"
msgid "Private" msgid "Private"
msgstr "Privat" msgstr "Privat"
#: src/views/members/index.tsx:186
msgid "Pro Plan"
msgstr "Pro-Plan"
#: src/views/members/components/InviteMemberForm.tsx:182
msgid "Pro Plan ∞"
msgstr "Pro-Plan ∞"
#: src/views/settings/components/Avatar.tsx:26 #: src/views/settings/components/Avatar.tsx:26
msgid "Profile image updated" msgid "Profile image updated"
msgstr "Profilbild aktualisiert" msgstr "Profilbild aktualisiert"
#: src/views/settings/index.tsx:146 #: src/views/settings/index.tsx:157
msgid "Profile picture" msgid "Profile picture"
msgstr "Profilbild" msgstr "Profilbild"
@@ -1353,7 +1368,7 @@ msgstr "Remote"
msgid "Remove" msgid "Remove"
msgstr "Entfernen" msgstr "Entfernen"
#: src/views/members/index.tsx:142 #: src/views/members/index.tsx:143
msgid "Remove member" msgid "Remove member"
msgstr "Mitglied entfernen" msgstr "Mitglied entfernen"
@@ -1409,7 +1424,7 @@ msgstr "Widerrufen"
msgid "Roadmap" msgid "Roadmap"
msgstr "Roadmap" msgstr "Roadmap"
#: src/views/members/index.tsx:215 #: src/views/members/index.tsx:223
msgid "Role" msgid "Role"
msgstr "Rolle" msgstr "Rolle"
@@ -1458,12 +1473,12 @@ msgid "Senior"
msgstr "Senior" msgstr "Senior"
#: src/components/SideNavigation.tsx:78 #: src/components/SideNavigation.tsx:78
#: src/views/settings/index.tsx:140 #: src/views/settings/index.tsx:151
msgid "Settings" msgid "Settings"
msgstr "Einstellungen" msgstr "Einstellungen"
#. placeholder {0}: workspace.name ?? "Workspace" #. placeholder {0}: workspace.name ?? "Workspace"
#: src/views/settings/index.tsx:136 #: src/views/settings/index.tsx:147
msgid "Settings | {0}" msgid "Settings | {0}"
msgstr "Einstellungen | {0}" msgstr "Einstellungen | {0}"
@@ -1514,6 +1529,10 @@ msgstr "Stern auf Github"
msgid "Success" msgid "Success"
msgstr "Erfolg" msgstr "Erfolg"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:55
msgid "Supercharge your workspace for just $29/month. Here's what you'll get:"
msgstr "Optimiere deinen Workspace für nur $29/Monat. Das bekommst du dafür:"
#: src/components/UserMenu.tsx:180 #: src/components/UserMenu.tsx:180
msgid "Support" msgid "Support"
msgstr "Support" msgstr "Support"
@@ -1526,8 +1545,8 @@ msgstr "Unterstütze die Entwicklung des Projekts"
msgid "System" msgid "System"
msgstr "System" msgstr "System"
#: src/views/members/components/InviteMemberForm.tsx:183 #: src/views/members/components/InviteMemberForm.tsx:182
#: src/views/members/index.tsx:184 #: src/views/members/index.tsx:188
msgid "Team Plan" msgid "Team Plan"
msgstr "Team-Plan" msgstr "Team-Plan"
@@ -1612,7 +1631,7 @@ msgstr "Menü umschalten"
msgid "Track all card changes with detailed activity history." msgid "Track all card changes with detailed activity history."
msgstr "Verfolge alle kartenänderungen mit detaillierter aktivitätshistorie." msgstr "Verfolge alle kartenänderungen mit detaillierter aktivitätshistorie."
#: src/views/settings/index.tsx:94 #: src/views/settings/index.tsx:105
msgid "Trello disconnected" msgid "Trello disconnected"
msgstr "Trello getrennt" msgstr "Trello getrennt"
@@ -1743,6 +1762,10 @@ msgstr "Unbegrenzte kommentare"
msgid "Unlimited lists" msgid "Unlimited lists"
msgstr "Unbegrenzte listen" msgstr "Unbegrenzte listen"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:64
msgid "Unlimited members"
msgstr "Unbegrenzte Mitglieder"
#: src/views/board/components/UpdateBoardSlugForm.tsx:174 #: src/views/board/components/UpdateBoardSlugForm.tsx:174
#: src/views/settings/components/UpdateDisplayNameForm.tsx:79 #: src/views/settings/components/UpdateDisplayNameForm.tsx:79
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90 #: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
@@ -1772,11 +1795,16 @@ msgstr "hat den Titel aktualisiert"
msgid "updated the title to <0>{0}</0>" msgid "updated the title to <0>{0}</0>"
msgstr "hat den Titel in <0>{0}</0> geändert" msgstr "hat den Titel in <0>{0}</0> geändert"
#: src/views/settings/components/CustomURLConfirmation.tsx:52 #: src/views/settings/components/UpgradeToProConfirmation.tsx:99
msgid "Upgrade" msgid "Upgrade"
msgstr "Upgrade" msgstr "Upgrade"
#: src/views/members/components/InviteMemberForm.tsx:222 #: src/views/settings/components/UpgradeToProConfirmation.tsx:52
#: src/views/settings/index.tsx:202
msgid "Upgrade to Pro"
msgstr "Upgrade auf Pro"
#: src/views/members/components/InviteMemberForm.tsx:224
msgid "Upgrade to Team Plan" msgid "Upgrade to Team Plan"
msgstr "Upgrade auf Team-Plan" msgstr "Upgrade auf Team-Plan"
@@ -1801,11 +1829,11 @@ msgstr "URL muss mindestens 3 Zeichen lang sein"
msgid "Use template" msgid "Use template"
msgstr "Vorlage verwenden" msgstr "Vorlage verwenden"
#: src/views/members/index.tsx:209 #: src/views/members/index.tsx:217
msgid "User" msgid "User"
msgstr "Benutzer" msgstr "Benutzer"
#: src/views/members/components/InviteMemberForm.tsx:77 #: src/views/members/components/InviteMemberForm.tsx:72
msgid "User is already a member of this workspace" msgid "User is already a member of this workspace"
msgstr "Benutzer ist bereits Mitglied dieses Arbeitsbereichs" msgstr "Benutzer ist bereits Mitglied dieses Arbeitsbereichs"
@@ -1813,11 +1841,11 @@ msgstr "Benutzer ist bereits Mitglied dieses Arbeitsbereichs"
msgid "Video" msgid "Video"
msgstr "Video" msgstr "Video"
#: src/views/settings/index.tsx:262 #: src/views/settings/index.tsx:285
msgid "View and manage your API keys." msgid "View and manage your API keys."
msgstr "API-Schlüssel anzeigen und verwalten." msgstr "API-Schlüssel anzeigen und verwalten."
#: src/views/settings/index.tsx:201 #: src/views/settings/index.tsx:224
msgid "View and manage your billing and subscription." msgid "View and manage your billing and subscription."
msgstr "Verwalte deine Abrechnung und dein Abonnement." msgstr "Verwalte deine Abrechnung und dein Abonnement."
@@ -1877,7 +1905,7 @@ msgstr "Arbeitsbereich"
msgid "Workspace deleted" msgid "Workspace deleted"
msgstr "Workspace gelöscht" msgstr "Workspace gelöscht"
#: src/views/settings/index.tsx:177 #: src/views/settings/index.tsx:188
msgid "Workspace description" msgid "Workspace description"
msgstr "Workspace-Beschreibung" msgstr "Workspace-Beschreibung"
@@ -1899,7 +1927,7 @@ msgid "Workspace members"
msgstr "Workspace-mitglieder" msgstr "Workspace-mitglieder"
#: src/components/NewWorkspaceForm.tsx:81 #: src/components/NewWorkspaceForm.tsx:81
#: src/views/settings/index.tsx:158 #: src/views/settings/index.tsx:169
msgid "Workspace name" msgid "Workspace name"
msgstr "Name des Workspaces" msgstr "Name des Workspaces"
@@ -1919,7 +1947,7 @@ msgstr "Workspace-Name aktualisiert"
msgid "Workspace slug updated" msgid "Workspace slug updated"
msgstr "Workspace-Slug aktualisiert" msgstr "Workspace-Slug aktualisiert"
#: src/views/settings/index.tsx:167 #: src/views/settings/index.tsx:178
msgid "Workspace URL" msgid "Workspace URL"
msgstr "Workspace-URL" msgstr "Workspace-URL"
@@ -1935,7 +1963,7 @@ msgstr "Jährlich"
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits." msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
msgstr "Ja, wir bieten einen dauerhaft kostenlosen plan für die individuelle nutzung an. Keine einschränkungen, keine paywalls, keine limits." msgstr "Ja, wir bieten einen dauerhaft kostenlosen plan für die individuelle nutzung an. Keine einschränkungen, keine paywalls, keine limits."
#: src/views/settings/index.tsx:294 #: src/views/settings/index.tsx:317
msgid "You are about to change your password." msgid "You are about to change your password."
msgstr "Sie sind dabei, Ihr Passwort zu ändern." msgstr "Sie sind dabei, Ihr Passwort zu ändern."
@@ -1959,6 +1987,10 @@ msgstr "Sie haben sich erfolgreich angemeldet."
msgid "You have been signed up successfully." msgid "You have been signed up successfully."
msgstr "Sie haben sich erfolgreich registriert." msgstr "Sie haben sich erfolgreich registriert."
#: src/views/members/components/InviteMemberForm.tsx:186
msgid "You have unlimited seats with your Pro Plan. There is no additional charge for new members!"
msgstr "Sie haben unbegrenzte Plätze mit Ihrem Pro-Plan. Für neue Mitglieder fallen keine zusätzlichen Kosten an!"
#: src/views/settings/components/DeleteAccountConfirmation.tsx:28 #: src/views/settings/components/DeleteAccountConfirmation.tsx:28
msgid "Your account has been deleted." msgid "Your account has been deleted."
msgstr "Dein Konto wurde gelöscht." msgstr "Dein Konto wurde gelöscht."
@@ -1979,11 +2011,11 @@ msgstr "Ihr Passwort wurde geändert."
msgid "Your profile image has been updated." msgid "Your profile image has been updated."
msgstr "Dein Profilbild wurde aktualisiert." msgstr "Dein Profilbild wurde aktualisiert."
#: src/views/settings/index.tsx:95 #: src/views/settings/index.tsx:106
msgid "Your Trello account has been disconnected." msgid "Your Trello account has been disconnected."
msgstr "Dein Trello-Konto wurde getrennt." msgstr "Dein Trello-Konto wurde getrennt."
#: src/views/settings/index.tsx:244 #: src/views/settings/index.tsx:267
msgid "Your Trello account is connected." msgid "Your Trello account is connected."
msgstr "Dein Trello-Konto ist verbunden." msgstr "Dein Trello-Konto ist verbunden."

File diff suppressed because one or more lines are too long

View File

@@ -40,12 +40,12 @@ msgstr "{boardCount, plural, one {Import board (1)} other {Import boards ({board
#~ msgid "#1 Hacker News" #~ msgid "#1 Hacker News"
#~ msgstr "#1 Hacker News" #~ msgstr "#1 Hacker News"
#: src/views/members/components/InviteMemberForm.tsx:91 #: src/views/members/components/InviteMemberForm.tsx:92
#: src/views/members/components/InviteMemberForm.tsx:106 #: src/views/members/components/InviteMemberForm.tsx:104
msgid "$10/month" msgid "$10/month"
msgstr "$10/month" msgstr "$10/month"
#: src/views/members/components/InviteMemberForm.tsx:106 #: src/views/members/components/InviteMemberForm.tsx:104
msgid "$8/month" msgid "$8/month"
msgstr "$8/month" msgstr "$8/month"
@@ -113,7 +113,7 @@ msgid "Add label"
msgstr "Add label" msgstr "Add label"
#: src/views/card/components/MemberSelector.tsx:130 #: src/views/card/components/MemberSelector.tsx:130
#: src/views/members/components/InviteMemberForm.tsx:149 #: src/views/members/components/InviteMemberForm.tsx:147
msgid "Add member" msgid "Add member"
msgstr "Add member" msgstr "Add member"
@@ -152,7 +152,7 @@ msgstr "added label <0>{0}</0>"
#~ msgid "added label <0>{label}</0>" #~ msgid "added label <0>{label}</0>"
#~ msgstr "added label <0>{label}</0>" #~ msgstr "added label <0>{label}</0>"
#: src/views/members/components/InviteMemberForm.tsx:186 #: src/views/members/components/InviteMemberForm.tsx:187
msgid "Adding a new member will cost an additional {price} ({billingType}) per seat." msgid "Adding a new member will cost an additional {price} ({billingType}) per seat."
msgstr "Adding a new member will cost an additional {price} ({billingType}) per seat." msgstr "Adding a new member will cost an additional {price} ({billingType}) per seat."
@@ -172,7 +172,7 @@ msgstr "All systems operational"
msgid "Already have an account? <0><1>Sign in</1></0>" msgid "Already have an account? <0><1>Sign in</1></0>"
msgstr "Already have an account? <0><1>Sign in</1></0>" msgstr "Already have an account? <0><1>Sign in</1></0>"
#: src/views/settings/index.tsx:102 #: src/views/settings/index.tsx:113
msgid "An error occurred while disconnecting your Trello account." msgid "An error occurred while disconnecting your Trello account."
msgstr "An error occurred while disconnecting your Trello account." msgstr "An error occurred while disconnecting your Trello account."
@@ -180,7 +180,7 @@ msgstr "An error occurred while disconnecting your Trello account."
msgid "An unexpected error occurred. Please try again later." msgid "An unexpected error occurred. Please try again later."
msgstr "An unexpected error occurred. Please try again later." msgstr "An unexpected error occurred. Please try again later."
#: src/views/settings/index.tsx:259 #: src/views/settings/index.tsx:282
msgid "API keys" msgid "API keys"
msgstr "API keys" msgstr "API keys"
@@ -254,20 +254,20 @@ msgstr "Backlog"
msgid "Basic Kanban" msgid "Basic Kanban"
msgstr "Basic Kanban" msgstr "Basic Kanban"
#: src/views/members/components/InviteMemberForm.tsx:107 #: src/views/members/components/InviteMemberForm.tsx:105
msgid "billed annually" msgid "billed annually"
msgstr "billed annually" msgstr "billed annually"
#: src/views/members/components/InviteMemberForm.tsx:107 #: src/views/members/components/InviteMemberForm.tsx:105
msgid "billed monthly" msgid "billed monthly"
msgstr "billed monthly" msgstr "billed monthly"
#: src/views/boards/components/TemplateBoards.tsx:55 #: src/views/boards/components/TemplateBoards.tsx:55
#: src/views/settings/index.tsx:198 #: src/views/settings/index.tsx:221
msgid "Billing" msgid "Billing"
msgstr "Billing" msgstr "Billing"
#: src/views/settings/index.tsx:208 #: src/views/settings/index.tsx:231
msgid "Billing portal" msgid "Billing portal"
msgstr "Billing portal" msgstr "Billing portal"
@@ -279,6 +279,10 @@ msgstr "Blog Post"
msgid "Board" msgid "Board"
msgstr "Board" msgstr "Board"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:80
msgid "Board analytics (coming soon)"
msgstr "Board analytics (coming soon)"
#: src/views/boards/components/NewBoardForm.tsx:21 #: src/views/boards/components/NewBoardForm.tsx:21
msgid "Board name cannot exceed 100 characters" msgid "Board name cannot exceed 100 characters"
msgstr "Board name cannot exceed 100 characters" msgstr "Board name cannot exceed 100 characters"
@@ -353,9 +357,9 @@ msgstr "Bug Report"
#: src/views/card/components/DeleteCommentConfirmation.tsx:76 #: src/views/card/components/DeleteCommentConfirmation.tsx:76
#: src/views/members/components/DeleteMemberConfirmation.tsx:55 #: src/views/members/components/DeleteMemberConfirmation.tsx:55
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168 #: src/views/settings/components/ChangePasswordConfirmation.tsx:168
#: src/views/settings/components/CustomURLConfirmation.tsx:50
#: src/views/settings/components/DeleteAccountConfirmation.tsx:88 #: src/views/settings/components/DeleteAccountConfirmation.tsx:88
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98
#: src/views/settings/components/UpgradeToProConfirmation.tsx:94
msgid "Cancel" msgid "Cancel"
msgstr "Cancel" msgstr "Cancel"
@@ -369,12 +373,12 @@ msgstr "Card title"
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109 #: src/views/settings/components/ChangePasswordConfirmation.tsx:109
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178 #: src/views/settings/components/ChangePasswordConfirmation.tsx:178
#: src/views/settings/index.tsx:291 #: src/views/settings/index.tsx:314
#: src/views/settings/index.tsx:301 #: src/views/settings/index.tsx:324
msgid "Change Password" msgid "Change Password"
msgstr "Change Password" msgstr "Change Password"
#: src/views/settings/index.tsx:190 #: src/views/settings/index.tsx:213
msgid "Change the language of the app." msgid "Change the language of the app."
msgstr "Change the language of the app." msgstr "Change the language of the app."
@@ -433,16 +437,16 @@ msgstr "completed a checklist item"
msgid "completed checklist item <0>{0}</0>" msgid "completed checklist item <0>{0}</0>"
msgstr "completed checklist item <0>{0}</0>" msgstr "completed checklist item <0>{0}</0>"
#: src/views/settings/components/CustomURLConfirmation.tsx:42 #: src/views/settings/components/CustomURLConfirmation.tsx:47
msgid "Confirm URL change" #~ msgid "Confirm URL change"
msgstr "Confirm URL change" #~ msgstr "Confirm URL change"
#: src/views/settings/components/ChangePasswordConfirmation.tsx:150 #: src/views/settings/components/ChangePasswordConfirmation.tsx:150
msgid "Confirm your new password" msgid "Confirm your new password"
msgstr "Confirm your new password" msgstr "Confirm your new password"
#: src/views/boards/components/ImportBoardsForm.tsx:157 #: src/views/boards/components/ImportBoardsForm.tsx:157
#: src/views/settings/index.tsx:235 #: src/views/settings/index.tsx:258
msgid "Connect Trello" msgid "Connect Trello"
msgstr "Connect Trello" msgstr "Connect Trello"
@@ -450,7 +454,7 @@ msgstr "Connect Trello"
msgid "Connect your favorite tools to streamline your workflow." msgid "Connect your favorite tools to streamline your workflow."
msgstr "Connect your favorite tools to streamline your workflow." msgstr "Connect your favorite tools to streamline your workflow."
#: src/views/settings/index.tsx:222 #: src/views/settings/index.tsx:245
msgid "Connect your Trello account to import boards." msgid "Connect your Trello account to import boards."
msgstr "Connect your Trello account to import boards." msgstr "Connect your Trello account to import boards."
@@ -551,9 +555,13 @@ msgstr "Current password is required"
msgid "Custom domain" msgid "Custom domain"
msgstr "Custom domain" msgstr "Custom domain"
#: src/views/settings/components/CustomURLConfirmation.tsx:45 #: src/views/settings/components/CustomURLConfirmation.tsx:50
msgid "Custom URLs are a premium feature. You'll be directed to upgrade your account." #~ msgid "Custom URLs are a premium feature. You'll be directed to upgrade your account."
msgstr "Custom URLs are a premium feature. You'll be directed to upgrade your account." #~ msgstr "Custom URLs are a premium feature. You'll be directed to upgrade your account."
#: src/views/settings/components/UpgradeToProConfirmation.tsx:74
msgid "Custom workspace URL"
msgstr "Custom workspace URL"
#: src/views/boards/components/TemplateBoards.tsx:41 #: src/views/boards/components/TemplateBoards.tsx:41
msgid "Customer Support" msgid "Customer Support"
@@ -572,8 +580,8 @@ msgid "Delete"
msgstr "Delete" msgstr "Delete"
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96 #: src/views/settings/components/DeleteAccountConfirmation.tsx:96
#: src/views/settings/index.tsx:309 #: src/views/settings/index.tsx:332
#: src/views/settings/index.tsx:319 #: src/views/settings/index.tsx:342
msgid "Delete account" msgid "Delete account"
msgstr "Delete account" msgstr "Delete account"
@@ -594,8 +602,8 @@ msgid "Delete list"
msgstr "Delete list" msgstr "Delete list"
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
#: src/views/settings/index.tsx:272 #: src/views/settings/index.tsx:295
#: src/views/settings/index.tsx:283 #: src/views/settings/index.tsx:306
msgid "Delete workspace" msgid "Delete workspace"
msgstr "Delete workspace" msgstr "Delete workspace"
@@ -621,7 +629,7 @@ msgstr "deleted checklist item <0>{0}</0>"
msgid "Design" msgid "Design"
msgstr "Design" msgstr "Design"
#: src/views/settings/index.tsx:250 #: src/views/settings/index.tsx:273
msgid "Disconnect Trello" msgid "Disconnect Trello"
msgstr "Disconnect Trello" msgstr "Disconnect Trello"
@@ -629,7 +637,7 @@ msgstr "Disconnect Trello"
msgid "Discuss and collaborate on cards." msgid "Discuss and collaborate on cards."
msgstr "Discuss and collaborate on cards." msgstr "Discuss and collaborate on cards."
#: src/views/settings/index.tsx:151 #: src/views/settings/index.tsx:162
msgid "Display name" msgid "Display name"
msgstr "Display name" msgstr "Display name"
@@ -699,7 +707,7 @@ msgstr "Editing"
msgid "email" msgid "email"
msgstr "email" msgstr "email"
#: src/views/members/components/InviteMemberForm.tsx:163 #: src/views/members/components/InviteMemberForm.tsx:161
msgid "Email" msgid "Email"
msgstr "Email" msgstr "Email"
@@ -747,12 +755,12 @@ msgstr "Error deleting label"
msgid "Error deleting workspace" msgid "Error deleting workspace"
msgstr "Error deleting workspace" msgstr "Error deleting workspace"
#: src/views/settings/index.tsx:101 #: src/views/settings/index.tsx:112
msgid "Error disconnecting Trello" msgid "Error disconnecting Trello"
msgstr "Error disconnecting Trello" msgstr "Error disconnecting Trello"
#: src/views/members/components/InviteMemberForm.tsx:76 #: src/views/members/components/InviteMemberForm.tsx:71
#: src/views/members/components/InviteMemberForm.tsx:82 #: src/views/members/components/InviteMemberForm.tsx:77
msgid "Error inviting member" msgid "Error inviting member"
msgstr "Error inviting member" msgstr "Error inviting member"
@@ -776,7 +784,8 @@ msgstr "Error updating workspace name"
msgid "Error updating workspace URL" msgid "Error updating workspace URL"
msgstr "Error updating workspace URL" msgstr "Error updating workspace URL"
#: src/views/members/components/InviteMemberForm.tsx:132 #: src/views/members/components/InviteMemberForm.tsx:130
#: src/views/settings/components/UpgradeToProConfirmation.tsx:41
msgid "Error upgrading subscription" msgid "Error upgrading subscription"
msgstr "Error upgrading subscription" msgstr "Error upgrading subscription"
@@ -847,8 +856,8 @@ msgstr "For long-term sustainability, we recognise all good open source projects
msgid "Free" msgid "Free"
msgstr "Free" msgstr "Free"
#: src/views/members/components/InviteMemberForm.tsx:192 #: src/views/members/components/InviteMemberForm.tsx:193
#: src/views/members/index.tsx:184 #: src/views/members/index.tsx:189
msgid "Free Plan" msgid "Free Plan"
msgstr "Free Plan" msgstr "Free Plan"
@@ -1007,24 +1016,24 @@ msgstr "Integrations"
msgid "Interviewing" msgid "Interviewing"
msgstr "Interviewing" msgstr "Interviewing"
#: src/views/members/components/InviteMemberForm.tsx:45 #: src/views/members/components/InviteMemberForm.tsx:40
msgid "Invalid email address" msgid "Invalid email address"
msgstr "Invalid email address" msgstr "Invalid email address"
#: src/views/members/index.tsx:193 #: src/views/members/index.tsx:201
msgid "Invite" msgid "Invite"
msgstr "Invite" msgstr "Invite"
#: src/views/members/components/InviteMemberForm.tsx:207 #: src/views/members/components/InviteMemberForm.tsx:208
msgid "Invite another" msgid "Invite another"
msgstr "Invite another" msgstr "Invite another"
#: src/views/card/components/MemberSelector.tsx:112 #: src/views/card/components/MemberSelector.tsx:112
#: src/views/members/components/InviteMemberForm.tsx:231 #: src/views/members/components/InviteMemberForm.tsx:233
msgid "Invite member" msgid "Invite member"
msgstr "Invite member" msgstr "Invite member"
#: src/views/members/components/InviteMemberForm.tsx:195 #: src/views/members/components/InviteMemberForm.tsx:196
msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace." msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace."
msgstr "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace." msgstr "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace."
@@ -1055,10 +1064,14 @@ msgstr "Labels"
msgid "Labels & Filters" msgid "Labels & Filters"
msgstr "Labels & Filters" msgstr "Labels & Filters"
#: src/views/settings/index.tsx:187 #: src/views/settings/index.tsx:210
msgid "Language" msgid "Language"
msgstr "Language" msgstr "Language"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:67
msgid "Launch offer"
msgstr "Launch offer"
#: src/views/boards/components/TemplateBoards.tsx:83 #: src/views/boards/components/TemplateBoards.tsx:83
msgid "Learning" msgid "Learning"
msgstr "Learning" msgstr "Learning"
@@ -1124,12 +1137,12 @@ msgstr "Medium Priority"
#: src/views/board/components/Filters.tsx:93 #: src/views/board/components/Filters.tsx:93
#: src/views/board/components/NewCardForm.tsx:357 #: src/views/board/components/NewCardForm.tsx:357
#: src/views/card/index.tsx:125 #: src/views/card/index.tsx:125
#: src/views/members/index.tsx:171 #: src/views/members/index.tsx:172
msgid "Members" msgid "Members"
msgstr "Members" msgstr "Members"
#. placeholder {0}: workspace.name ?? "Workspace" #. placeholder {0}: workspace.name ?? "Workspace"
#: src/views/members/index.tsx:167 #: src/views/members/index.tsx:168
msgid "Members | {0}" msgid "Members | {0}"
msgstr "Members | {0}" msgstr "Members | {0}"
@@ -1137,7 +1150,7 @@ msgstr "Members | {0}"
msgid "Monthly" msgid "Monthly"
msgstr "Monthly" msgstr "Monthly"
#: src/views/members/components/InviteMemberForm.tsx:92 #: src/views/members/components/InviteMemberForm.tsx:93
msgid "monthly billing" msgid "monthly billing"
msgstr "monthly billing" msgstr "monthly billing"
@@ -1245,11 +1258,11 @@ msgstr "Offer"
msgid "Onboarding" msgid "Onboarding"
msgstr "Onboarding" msgstr "Onboarding"
#: src/views/settings/index.tsx:312 #: src/views/settings/index.tsx:335
msgid "Once you delete your account, there is no going back. This action cannot be undone." msgid "Once you delete your account, there is no going back. This action cannot be undone."
msgstr "Once you delete your account, there is no going back. This action cannot be undone." msgstr "Once you delete your account, there is no going back. This action cannot be undone."
#: src/views/settings/index.tsx:275 #: src/views/settings/index.tsx:298
msgid "Once you delete your workspace, there is no going back. This action cannot be undone." msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
msgstr "Once you delete your workspace, there is no going back. This action cannot be undone." msgstr "Once you delete your workspace, there is no going back. This action cannot be undone."
@@ -1285,7 +1298,7 @@ msgstr "Passwords do not match"
msgid "Payment frequency" msgid "Payment frequency"
msgstr "Payment frequency" msgstr "Payment frequency"
#: src/views/members/index.tsx:128 #: src/views/members/index.tsx:129
msgid "Pending" msgid "Pending"
msgstr "Pending" msgstr "Pending"
@@ -1347,8 +1360,8 @@ msgstr "Please select a file to upload."
#: src/views/card/components/NewCommentForm.tsx:31 #: src/views/card/components/NewCommentForm.tsx:31
#: src/views/card/index.tsx:173 #: src/views/card/index.tsx:173
#: src/views/members/components/DeleteMemberConfirmation.tsx:28 #: src/views/members/components/DeleteMemberConfirmation.tsx:28
#: src/views/members/components/InviteMemberForm.tsx:83 #: src/views/members/components/InviteMemberForm.tsx:78
#: src/views/members/components/InviteMemberForm.tsx:133 #: src/views/members/components/InviteMemberForm.tsx:131
#: src/views/settings/components/Avatar.tsx:40 #: src/views/settings/components/Avatar.tsx:40
#: src/views/settings/components/Avatar.tsx:98 #: src/views/settings/components/Avatar.tsx:98
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40 #: src/views/settings/components/DeleteAccountConfirmation.tsx:40
@@ -1357,6 +1370,7 @@ msgstr "Please select a file to upload."
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:62 #: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:62
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:57 #: src/views/settings/components/UpdateWorkspaceNameForm.tsx:57
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:74 #: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:74
#: src/views/settings/components/UpgradeToProConfirmation.tsx:42
msgid "Please try again later, or contact customer support." msgid "Please try again later, or contact customer support."
msgstr "Please try again later, or contact customer support." msgstr "Please try again later, or contact customer support."
@@ -1367,6 +1381,7 @@ msgid "Pricing"
msgstr "Pricing" msgstr "Pricing"
#: src/views/home/components/Pricing.tsx:56 #: src/views/home/components/Pricing.tsx:56
#: src/views/settings/components/UpgradeToProConfirmation.tsx:86
msgid "Priority email support" msgid "Priority email support"
msgstr "Priority email support" msgstr "Priority email support"
@@ -1378,11 +1393,19 @@ msgstr "Privacy policy"
msgid "Private" msgid "Private"
msgstr "Private" msgstr "Private"
#: src/views/members/index.tsx:186
msgid "Pro Plan"
msgstr "Pro Plan"
#: src/views/members/components/InviteMemberForm.tsx:182
msgid "Pro Plan ∞"
msgstr "Pro Plan ∞"
#: src/views/settings/components/Avatar.tsx:26 #: src/views/settings/components/Avatar.tsx:26
msgid "Profile image updated" msgid "Profile image updated"
msgstr "Profile image updated" msgstr "Profile image updated"
#: src/views/settings/index.tsx:146 #: src/views/settings/index.tsx:157
msgid "Profile picture" msgid "Profile picture"
msgstr "Profile picture" msgstr "Profile picture"
@@ -1418,7 +1441,7 @@ msgstr "Remote"
msgid "Remove" msgid "Remove"
msgstr "Remove" msgstr "Remove"
#: src/views/members/index.tsx:142 #: src/views/members/index.tsx:143
msgid "Remove member" msgid "Remove member"
msgstr "Remove member" msgstr "Remove member"
@@ -1478,7 +1501,7 @@ msgstr "Revoke"
msgid "Roadmap" msgid "Roadmap"
msgstr "Roadmap" msgstr "Roadmap"
#: src/views/members/index.tsx:215 #: src/views/members/index.tsx:223
msgid "Role" msgid "Role"
msgstr "Role" msgstr "Role"
@@ -1531,12 +1554,12 @@ msgid "Senior"
msgstr "Senior" msgstr "Senior"
#: src/components/SideNavigation.tsx:78 #: src/components/SideNavigation.tsx:78
#: src/views/settings/index.tsx:140 #: src/views/settings/index.tsx:151
msgid "Settings" msgid "Settings"
msgstr "Settings" msgstr "Settings"
#. placeholder {0}: workspace.name ?? "Workspace" #. placeholder {0}: workspace.name ?? "Workspace"
#: src/views/settings/index.tsx:136 #: src/views/settings/index.tsx:147
msgid "Settings | {0}" msgid "Settings | {0}"
msgstr "Settings | {0}" msgstr "Settings | {0}"
@@ -1587,6 +1610,10 @@ msgstr "Star on Github"
msgid "Success" msgid "Success"
msgstr "Success" msgstr "Success"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:55
msgid "Supercharge your workspace for just $29/month. Here's what you'll get:"
msgstr "Supercharge your workspace for just $29/month. Here's what you'll get:"
#: src/components/UserMenu.tsx:180 #: src/components/UserMenu.tsx:180
msgid "Support" msgid "Support"
msgstr "Support" msgstr "Support"
@@ -1599,8 +1626,8 @@ msgstr "Support the development of the project"
msgid "System" msgid "System"
msgstr "System" msgstr "System"
#: src/views/members/components/InviteMemberForm.tsx:183 #: src/views/members/components/InviteMemberForm.tsx:182
#: src/views/members/index.tsx:184 #: src/views/members/index.tsx:188
msgid "Team Plan" msgid "Team Plan"
msgstr "Team Plan" msgstr "Team Plan"
@@ -1689,7 +1716,7 @@ msgstr "Toggle menu"
msgid "Track all card changes with detailed activity history." msgid "Track all card changes with detailed activity history."
msgstr "Track all card changes with detailed activity history." msgstr "Track all card changes with detailed activity history."
#: src/views/settings/index.tsx:94 #: src/views/settings/index.tsx:105
msgid "Trello disconnected" msgid "Trello disconnected"
msgstr "Trello disconnected" msgstr "Trello disconnected"
@@ -1824,6 +1851,10 @@ msgstr "Unlimited comments"
msgid "Unlimited lists" msgid "Unlimited lists"
msgstr "Unlimited lists" msgstr "Unlimited lists"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:64
msgid "Unlimited members"
msgstr "Unlimited members"
#: src/views/board/components/UpdateBoardSlugForm.tsx:174 #: src/views/board/components/UpdateBoardSlugForm.tsx:174
#: src/views/settings/components/UpdateDisplayNameForm.tsx:79 #: src/views/settings/components/UpdateDisplayNameForm.tsx:79
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90 #: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
@@ -1857,11 +1888,16 @@ msgstr "updated the title to <0>{0}</0>"
#~ msgid "updated the title to <0>{toTitle}</0>" #~ msgid "updated the title to <0>{toTitle}</0>"
#~ msgstr "updated the title to <0>{toTitle}</0>" #~ msgstr "updated the title to <0>{toTitle}</0>"
#: src/views/settings/components/CustomURLConfirmation.tsx:52 #: src/views/settings/components/UpgradeToProConfirmation.tsx:99
msgid "Upgrade" msgid "Upgrade"
msgstr "Upgrade" msgstr "Upgrade"
#: src/views/members/components/InviteMemberForm.tsx:222 #: src/views/settings/components/UpgradeToProConfirmation.tsx:52
#: src/views/settings/index.tsx:202
msgid "Upgrade to Pro"
msgstr "Upgrade to Pro"
#: src/views/members/components/InviteMemberForm.tsx:224
msgid "Upgrade to Team Plan" msgid "Upgrade to Team Plan"
msgstr "Upgrade to Team Plan" msgstr "Upgrade to Team Plan"
@@ -1886,11 +1922,11 @@ msgstr "URL must be at least 3 characters long"
msgid "Use template" msgid "Use template"
msgstr "Use template" msgstr "Use template"
#: src/views/members/index.tsx:209 #: src/views/members/index.tsx:217
msgid "User" msgid "User"
msgstr "User" msgstr "User"
#: src/views/members/components/InviteMemberForm.tsx:77 #: src/views/members/components/InviteMemberForm.tsx:72
msgid "User is already a member of this workspace" msgid "User is already a member of this workspace"
msgstr "User is already a member of this workspace" msgstr "User is already a member of this workspace"
@@ -1898,11 +1934,11 @@ msgstr "User is already a member of this workspace"
msgid "Video" msgid "Video"
msgstr "Video" msgstr "Video"
#: src/views/settings/index.tsx:262 #: src/views/settings/index.tsx:285
msgid "View and manage your API keys." msgid "View and manage your API keys."
msgstr "View and manage your API keys." msgstr "View and manage your API keys."
#: src/views/settings/index.tsx:201 #: src/views/settings/index.tsx:224
msgid "View and manage your billing and subscription." msgid "View and manage your billing and subscription."
msgstr "View and manage your billing and subscription." msgstr "View and manage your billing and subscription."
@@ -1966,7 +2002,7 @@ msgstr "Workspace"
msgid "Workspace deleted" msgid "Workspace deleted"
msgstr "Workspace deleted" msgstr "Workspace deleted"
#: src/views/settings/index.tsx:177 #: src/views/settings/index.tsx:188
msgid "Workspace description" msgid "Workspace description"
msgstr "Workspace description" msgstr "Workspace description"
@@ -1988,7 +2024,7 @@ msgid "Workspace members"
msgstr "Workspace members" msgstr "Workspace members"
#: src/components/NewWorkspaceForm.tsx:81 #: src/components/NewWorkspaceForm.tsx:81
#: src/views/settings/index.tsx:158 #: src/views/settings/index.tsx:169
msgid "Workspace name" msgid "Workspace name"
msgstr "Workspace name" msgstr "Workspace name"
@@ -2008,7 +2044,7 @@ msgstr "Workspace name updated"
msgid "Workspace slug updated" msgid "Workspace slug updated"
msgstr "Workspace slug updated" msgstr "Workspace slug updated"
#: src/views/settings/index.tsx:167 #: src/views/settings/index.tsx:178
msgid "Workspace URL" msgid "Workspace URL"
msgstr "Workspace URL" msgstr "Workspace URL"
@@ -2024,7 +2060,7 @@ msgstr "Yearly"
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits." msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
msgstr "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits." msgstr "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
#: src/views/settings/index.tsx:294 #: src/views/settings/index.tsx:317
msgid "You are about to change your password." msgid "You are about to change your password."
msgstr "You are about to change your password." msgstr "You are about to change your password."
@@ -2048,6 +2084,10 @@ msgstr "You have been logged in successfully."
msgid "You have been signed up successfully." msgid "You have been signed up successfully."
msgstr "You have been signed up successfully." msgstr "You have been signed up successfully."
#: src/views/members/components/InviteMemberForm.tsx:186
msgid "You have unlimited seats with your Pro Plan. There is no additional charge for new members!"
msgstr "You have unlimited seats with your Pro Plan. There is no additional charge for new members!"
#: src/views/settings/components/DeleteAccountConfirmation.tsx:28 #: src/views/settings/components/DeleteAccountConfirmation.tsx:28
msgid "Your account has been deleted." msgid "Your account has been deleted."
msgstr "Your account has been deleted." msgstr "Your account has been deleted."
@@ -2068,11 +2108,11 @@ msgstr "Your password has been changed."
msgid "Your profile image has been updated." msgid "Your profile image has been updated."
msgstr "Your profile image has been updated." msgstr "Your profile image has been updated."
#: src/views/settings/index.tsx:95 #: src/views/settings/index.tsx:106
msgid "Your Trello account has been disconnected." msgid "Your Trello account has been disconnected."
msgstr "Your Trello account has been disconnected." msgstr "Your Trello account has been disconnected."
#: src/views/settings/index.tsx:244 #: src/views/settings/index.tsx:267
msgid "Your Trello account is connected." msgid "Your Trello account is connected."
msgstr "Your Trello account is connected." msgstr "Your Trello account is connected."

File diff suppressed because one or more lines are too long

View File

@@ -36,12 +36,12 @@ msgstr "{0} etiquetas"
msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({boardCount})}}" msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({boardCount})}}"
msgstr "{boardCount, plural, one {Importar tablero (1)} other {Importar tableros ({boardCount})}}" msgstr "{boardCount, plural, one {Importar tablero (1)} other {Importar tableros ({boardCount})}}"
#: src/views/members/components/InviteMemberForm.tsx:91 #: src/views/members/components/InviteMemberForm.tsx:92
#: src/views/members/components/InviteMemberForm.tsx:106 #: src/views/members/components/InviteMemberForm.tsx:104
msgid "$10/month" msgid "$10/month"
msgstr "$10/mes" msgstr "$10/mes"
#: src/views/members/components/InviteMemberForm.tsx:106 #: src/views/members/components/InviteMemberForm.tsx:104
msgid "$8/month" msgid "$8/month"
msgstr "$8/mes" msgstr "$8/mes"
@@ -97,7 +97,7 @@ msgid "Add label"
msgstr "Añadir etiqueta" msgstr "Añadir etiqueta"
#: src/views/card/components/MemberSelector.tsx:130 #: src/views/card/components/MemberSelector.tsx:130
#: src/views/members/components/InviteMemberForm.tsx:149 #: src/views/members/components/InviteMemberForm.tsx:147
msgid "Add member" msgid "Add member"
msgstr "Añadir miembro" msgstr "Añadir miembro"
@@ -132,7 +132,7 @@ msgstr "añadió el elemento <0>{0}</0> a la lista de verificación"
msgid "added label <0>{0}</0>" msgid "added label <0>{0}</0>"
msgstr "añadió la etiqueta <0>{0}</0>" msgstr "añadió la etiqueta <0>{0}</0>"
#: src/views/members/components/InviteMemberForm.tsx:186 #: src/views/members/components/InviteMemberForm.tsx:187
msgid "Adding a new member will cost an additional {price} ({billingType}) per seat." msgid "Adding a new member will cost an additional {price} ({billingType}) per seat."
msgstr "Añadir un nuevo miembro costará {price} adicionales ({billingType}) por asiento." msgstr "Añadir un nuevo miembro costará {price} adicionales ({billingType}) por asiento."
@@ -148,7 +148,7 @@ msgstr "Todos los sistemas operativos"
msgid "Already have an account? <0><1>Sign in</1></0>" msgid "Already have an account? <0><1>Sign in</1></0>"
msgstr "¿Ya tienes una cuenta? <0><1>Iniciar sesión</1></0>" msgstr "¿Ya tienes una cuenta? <0><1>Iniciar sesión</1></0>"
#: src/views/settings/index.tsx:102 #: src/views/settings/index.tsx:113
msgid "An error occurred while disconnecting your Trello account." msgid "An error occurred while disconnecting your Trello account."
msgstr "Ocurrió un error al desconectar tu cuenta de Trello." msgstr "Ocurrió un error al desconectar tu cuenta de Trello."
@@ -156,7 +156,7 @@ msgstr "Ocurrió un error al desconectar tu cuenta de Trello."
msgid "An unexpected error occurred. Please try again later." msgid "An unexpected error occurred. Please try again later."
msgstr "Ha ocurrido un error inesperado. Por favor, inténtalo de nuevo más tarde." msgstr "Ha ocurrido un error inesperado. Por favor, inténtalo de nuevo más tarde."
#: src/views/settings/index.tsx:259 #: src/views/settings/index.tsx:282
msgid "API keys" msgid "API keys"
msgstr "Claves API" msgstr "Claves API"
@@ -218,20 +218,20 @@ msgstr "Pendientes"
msgid "Basic Kanban" msgid "Basic Kanban"
msgstr "Kanban básico" msgstr "Kanban básico"
#: src/views/members/components/InviteMemberForm.tsx:107 #: src/views/members/components/InviteMemberForm.tsx:105
msgid "billed annually" msgid "billed annually"
msgstr "facturado anualmente" msgstr "facturado anualmente"
#: src/views/members/components/InviteMemberForm.tsx:107 #: src/views/members/components/InviteMemberForm.tsx:105
msgid "billed monthly" msgid "billed monthly"
msgstr "facturado mensualmente" msgstr "facturado mensualmente"
#: src/views/boards/components/TemplateBoards.tsx:55 #: src/views/boards/components/TemplateBoards.tsx:55
#: src/views/settings/index.tsx:198 #: src/views/settings/index.tsx:221
msgid "Billing" msgid "Billing"
msgstr "Facturación" msgstr "Facturación"
#: src/views/settings/index.tsx:208 #: src/views/settings/index.tsx:231
msgid "Billing portal" msgid "Billing portal"
msgstr "Portal de facturación" msgstr "Portal de facturación"
@@ -243,6 +243,10 @@ msgstr "Entrada de blog"
msgid "Board" msgid "Board"
msgstr "Tablero" msgstr "Tablero"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:80
msgid "Board analytics (coming soon)"
msgstr "Análisis de tableros (próximamente)"
#: src/views/boards/components/NewBoardForm.tsx:21 #: src/views/boards/components/NewBoardForm.tsx:21
msgid "Board name cannot exceed 100 characters" msgid "Board name cannot exceed 100 characters"
msgstr "El nombre del tablero no puede exceder los 100 caracteres" msgstr "El nombre del tablero no puede exceder los 100 caracteres"
@@ -309,9 +313,9 @@ msgstr "Informe de error"
#: src/views/card/components/DeleteCommentConfirmation.tsx:76 #: src/views/card/components/DeleteCommentConfirmation.tsx:76
#: src/views/members/components/DeleteMemberConfirmation.tsx:55 #: src/views/members/components/DeleteMemberConfirmation.tsx:55
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168 #: src/views/settings/components/ChangePasswordConfirmation.tsx:168
#: src/views/settings/components/CustomURLConfirmation.tsx:50
#: src/views/settings/components/DeleteAccountConfirmation.tsx:88 #: src/views/settings/components/DeleteAccountConfirmation.tsx:88
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98
#: src/views/settings/components/UpgradeToProConfirmation.tsx:94
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
@@ -325,12 +329,12 @@ msgstr "Título de la tarjeta"
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109 #: src/views/settings/components/ChangePasswordConfirmation.tsx:109
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178 #: src/views/settings/components/ChangePasswordConfirmation.tsx:178
#: src/views/settings/index.tsx:291 #: src/views/settings/index.tsx:314
#: src/views/settings/index.tsx:301 #: src/views/settings/index.tsx:324
msgid "Change Password" msgid "Change Password"
msgstr "Cambiar contraseña" msgstr "Cambiar contraseña"
#: src/views/settings/index.tsx:190 #: src/views/settings/index.tsx:213
msgid "Change the language of the app." msgid "Change the language of the app."
msgstr "Cambiar el idioma de la aplicación." msgstr "Cambiar el idioma de la aplicación."
@@ -389,16 +393,12 @@ msgstr "completó un elemento de la lista de verificación"
msgid "completed checklist item <0>{0}</0>" msgid "completed checklist item <0>{0}</0>"
msgstr "completó el elemento <0>{0}</0> de la lista de verificación" msgstr "completó el elemento <0>{0}</0> de la lista de verificación"
#: src/views/settings/components/CustomURLConfirmation.tsx:42
msgid "Confirm URL change"
msgstr "Confirmar cambio de URL"
#: src/views/settings/components/ChangePasswordConfirmation.tsx:150 #: src/views/settings/components/ChangePasswordConfirmation.tsx:150
msgid "Confirm your new password" msgid "Confirm your new password"
msgstr "Confirma tu nueva contraseña" msgstr "Confirma tu nueva contraseña"
#: src/views/boards/components/ImportBoardsForm.tsx:157 #: src/views/boards/components/ImportBoardsForm.tsx:157
#: src/views/settings/index.tsx:235 #: src/views/settings/index.tsx:258
msgid "Connect Trello" msgid "Connect Trello"
msgstr "Conectar Trello" msgstr "Conectar Trello"
@@ -406,7 +406,7 @@ msgstr "Conectar Trello"
msgid "Connect your favorite tools to streamline your workflow." msgid "Connect your favorite tools to streamline your workflow."
msgstr "Conecta tus herramientas favoritas para agilizar tu flujo de trabajo." msgstr "Conecta tus herramientas favoritas para agilizar tu flujo de trabajo."
#: src/views/settings/index.tsx:222 #: src/views/settings/index.tsx:245
msgid "Connect your Trello account to import boards." msgid "Connect your Trello account to import boards."
msgstr "Conecta tu cuenta de Trello para importar tableros." msgstr "Conecta tu cuenta de Trello para importar tableros."
@@ -499,9 +499,9 @@ msgstr "Se requiere la contraseña actual"
msgid "Custom domain" msgid "Custom domain"
msgstr "Dominio personalizado" msgstr "Dominio personalizado"
#: src/views/settings/components/CustomURLConfirmation.tsx:45 #: src/views/settings/components/UpgradeToProConfirmation.tsx:74
msgid "Custom URLs are a premium feature. You'll be directed to upgrade your account." msgid "Custom workspace URL"
msgstr "Las URL personalizadas son una función premium. Serás dirigido a actualizar tu cuenta." msgstr "URL personalizada del espacio de trabajo"
#: src/views/boards/components/TemplateBoards.tsx:41 #: src/views/boards/components/TemplateBoards.tsx:41
msgid "Customer Support" msgid "Customer Support"
@@ -520,8 +520,8 @@ msgid "Delete"
msgstr "Eliminar" msgstr "Eliminar"
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96 #: src/views/settings/components/DeleteAccountConfirmation.tsx:96
#: src/views/settings/index.tsx:309 #: src/views/settings/index.tsx:332
#: src/views/settings/index.tsx:319 #: src/views/settings/index.tsx:342
msgid "Delete account" msgid "Delete account"
msgstr "Eliminar cuenta" msgstr "Eliminar cuenta"
@@ -542,8 +542,8 @@ msgid "Delete list"
msgstr "Eliminar lista" msgstr "Eliminar lista"
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
#: src/views/settings/index.tsx:272 #: src/views/settings/index.tsx:295
#: src/views/settings/index.tsx:283 #: src/views/settings/index.tsx:306
msgid "Delete workspace" msgid "Delete workspace"
msgstr "Eliminar espacio de trabajo" msgstr "Eliminar espacio de trabajo"
@@ -569,7 +569,7 @@ msgstr "eliminó el elemento <0>{0}</0> de la lista de verificación"
msgid "Design" msgid "Design"
msgstr "Diseño" msgstr "Diseño"
#: src/views/settings/index.tsx:250 #: src/views/settings/index.tsx:273
msgid "Disconnect Trello" msgid "Disconnect Trello"
msgstr "Desconectar Trello" msgstr "Desconectar Trello"
@@ -577,7 +577,7 @@ msgstr "Desconectar Trello"
msgid "Discuss and collaborate on cards." msgid "Discuss and collaborate on cards."
msgstr "Discute y colabora en las tarjetas." msgstr "Discute y colabora en las tarjetas."
#: src/views/settings/index.tsx:151 #: src/views/settings/index.tsx:162
msgid "Display name" msgid "Display name"
msgstr "Nombre visible" msgstr "Nombre visible"
@@ -647,7 +647,7 @@ msgstr "Editando"
msgid "email" msgid "email"
msgstr "correo electrónico" msgstr "correo electrónico"
#: src/views/members/components/InviteMemberForm.tsx:163 #: src/views/members/components/InviteMemberForm.tsx:161
msgid "Email" msgid "Email"
msgstr "Correo electrónico" msgstr "Correo electrónico"
@@ -695,12 +695,12 @@ msgstr "Error al eliminar la etiqueta"
msgid "Error deleting workspace" msgid "Error deleting workspace"
msgstr "Error al eliminar el espacio de trabajo" msgstr "Error al eliminar el espacio de trabajo"
#: src/views/settings/index.tsx:101 #: src/views/settings/index.tsx:112
msgid "Error disconnecting Trello" msgid "Error disconnecting Trello"
msgstr "Error al desconectar Trello" msgstr "Error al desconectar Trello"
#: src/views/members/components/InviteMemberForm.tsx:76 #: src/views/members/components/InviteMemberForm.tsx:71
#: src/views/members/components/InviteMemberForm.tsx:82 #: src/views/members/components/InviteMemberForm.tsx:77
msgid "Error inviting member" msgid "Error inviting member"
msgstr "Error al invitar al miembro" msgstr "Error al invitar al miembro"
@@ -724,7 +724,8 @@ msgstr "Error al actualizar el nombre del espacio de trabajo"
msgid "Error updating workspace URL" msgid "Error updating workspace URL"
msgstr "Error al actualizar la URL del espacio de trabajo" msgstr "Error al actualizar la URL del espacio de trabajo"
#: src/views/members/components/InviteMemberForm.tsx:132 #: src/views/members/components/InviteMemberForm.tsx:130
#: src/views/settings/components/UpgradeToProConfirmation.tsx:41
msgid "Error upgrading subscription" msgid "Error upgrading subscription"
msgstr "Error al actualizar la suscripción" msgstr "Error al actualizar la suscripción"
@@ -794,8 +795,8 @@ msgstr "Para la sostenibilidad a largo plazo, reconocemos que todos los buenos p
msgid "Free" msgid "Free"
msgstr "Gratis" msgstr "Gratis"
#: src/views/members/components/InviteMemberForm.tsx:192 #: src/views/members/components/InviteMemberForm.tsx:193
#: src/views/members/index.tsx:184 #: src/views/members/index.tsx:189
msgid "Free Plan" msgid "Free Plan"
msgstr "Plan gratuito" msgstr "Plan gratuito"
@@ -950,24 +951,24 @@ msgstr "Integraciones"
msgid "Interviewing" msgid "Interviewing"
msgstr "Entrevistando" msgstr "Entrevistando"
#: src/views/members/components/InviteMemberForm.tsx:45 #: src/views/members/components/InviteMemberForm.tsx:40
msgid "Invalid email address" msgid "Invalid email address"
msgstr "Dirección de correo electrónico no válida" msgstr "Dirección de correo electrónico no válida"
#: src/views/members/index.tsx:193 #: src/views/members/index.tsx:201
msgid "Invite" msgid "Invite"
msgstr "Invitar" msgstr "Invitar"
#: src/views/members/components/InviteMemberForm.tsx:207 #: src/views/members/components/InviteMemberForm.tsx:208
msgid "Invite another" msgid "Invite another"
msgstr "Invitar a otro" msgstr "Invitar a otro"
#: src/views/card/components/MemberSelector.tsx:112 #: src/views/card/components/MemberSelector.tsx:112
#: src/views/members/components/InviteMemberForm.tsx:231 #: src/views/members/components/InviteMemberForm.tsx:233
msgid "Invite member" msgid "Invite member"
msgstr "Invitar miembro" msgstr "Invitar miembro"
#: src/views/members/components/InviteMemberForm.tsx:195 #: src/views/members/components/InviteMemberForm.tsx:196
msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace." msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace."
msgstr "Invitar miembros requiere un Plan de Equipo. Serás redirigido para actualizar tu espacio de trabajo." msgstr "Invitar miembros requiere un Plan de Equipo. Serás redirigido para actualizar tu espacio de trabajo."
@@ -998,10 +999,14 @@ msgstr "Etiquetas"
msgid "Labels & Filters" msgid "Labels & Filters"
msgstr "Etiquetas y filtros" msgstr "Etiquetas y filtros"
#: src/views/settings/index.tsx:187 #: src/views/settings/index.tsx:210
msgid "Language" msgid "Language"
msgstr "Idioma" msgstr "Idioma"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:67
msgid "Launch offer"
msgstr "Oferta de lanzamiento"
#: src/views/boards/components/TemplateBoards.tsx:83 #: src/views/boards/components/TemplateBoards.tsx:83
msgid "Learning" msgid "Learning"
msgstr "Aprendizaje" msgstr "Aprendizaje"
@@ -1067,12 +1072,12 @@ msgstr "Prioridad media"
#: src/views/board/components/Filters.tsx:93 #: src/views/board/components/Filters.tsx:93
#: src/views/board/components/NewCardForm.tsx:357 #: src/views/board/components/NewCardForm.tsx:357
#: src/views/card/index.tsx:125 #: src/views/card/index.tsx:125
#: src/views/members/index.tsx:171 #: src/views/members/index.tsx:172
msgid "Members" msgid "Members"
msgstr "Miembros" msgstr "Miembros"
#. placeholder {0}: workspace.name ?? "Workspace" #. placeholder {0}: workspace.name ?? "Workspace"
#: src/views/members/index.tsx:167 #: src/views/members/index.tsx:168
msgid "Members | {0}" msgid "Members | {0}"
msgstr "Miembros | {0}" msgstr "Miembros | {0}"
@@ -1080,7 +1085,7 @@ msgstr "Miembros | {0}"
msgid "Monthly" msgid "Monthly"
msgstr "Mensual" msgstr "Mensual"
#: src/views/members/components/InviteMemberForm.tsx:92 #: src/views/members/components/InviteMemberForm.tsx:93
msgid "monthly billing" msgid "monthly billing"
msgstr "facturación mensual" msgstr "facturación mensual"
@@ -1180,11 +1185,11 @@ msgstr "Oferta"
msgid "Onboarding" msgid "Onboarding"
msgstr "Incorporación" msgstr "Incorporación"
#: src/views/settings/index.tsx:312 #: src/views/settings/index.tsx:335
msgid "Once you delete your account, there is no going back. This action cannot be undone." msgid "Once you delete your account, there is no going back. This action cannot be undone."
msgstr "Una vez que elimines tu cuenta, no hay vuelta atrás. Esta acción no se puede deshacer." msgstr "Una vez que elimines tu cuenta, no hay vuelta atrás. Esta acción no se puede deshacer."
#: src/views/settings/index.tsx:275 #: src/views/settings/index.tsx:298
msgid "Once you delete your workspace, there is no going back. This action cannot be undone." msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
msgstr "Una vez que elimines tu espacio de trabajo, no hay vuelta atrás. Esta acción no se puede deshacer." msgstr "Una vez que elimines tu espacio de trabajo, no hay vuelta atrás. Esta acción no se puede deshacer."
@@ -1220,7 +1225,7 @@ msgstr "Las contraseñas no coinciden"
msgid "Payment frequency" msgid "Payment frequency"
msgstr "Frecuencia de pago" msgstr "Frecuencia de pago"
#: src/views/members/index.tsx:128 #: src/views/members/index.tsx:129
msgid "Pending" msgid "Pending"
msgstr "Pendiente" msgstr "Pendiente"
@@ -1282,8 +1287,8 @@ msgstr "Por favor selecciona un archivo para subir."
#: src/views/card/components/NewCommentForm.tsx:31 #: src/views/card/components/NewCommentForm.tsx:31
#: src/views/card/index.tsx:173 #: src/views/card/index.tsx:173
#: src/views/members/components/DeleteMemberConfirmation.tsx:28 #: src/views/members/components/DeleteMemberConfirmation.tsx:28
#: src/views/members/components/InviteMemberForm.tsx:83 #: src/views/members/components/InviteMemberForm.tsx:78
#: src/views/members/components/InviteMemberForm.tsx:133 #: src/views/members/components/InviteMemberForm.tsx:131
#: src/views/settings/components/Avatar.tsx:40 #: src/views/settings/components/Avatar.tsx:40
#: src/views/settings/components/Avatar.tsx:98 #: src/views/settings/components/Avatar.tsx:98
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40 #: src/views/settings/components/DeleteAccountConfirmation.tsx:40
@@ -1292,6 +1297,7 @@ msgstr "Por favor selecciona un archivo para subir."
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:62 #: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:62
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:57 #: src/views/settings/components/UpdateWorkspaceNameForm.tsx:57
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:74 #: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:74
#: src/views/settings/components/UpgradeToProConfirmation.tsx:42
msgid "Please try again later, or contact customer support." msgid "Please try again later, or contact customer support."
msgstr "Por favor, inténtalo de nuevo más tarde o contacta con atención al cliente." msgstr "Por favor, inténtalo de nuevo más tarde o contacta con atención al cliente."
@@ -1302,6 +1308,7 @@ msgid "Pricing"
msgstr "Precios" msgstr "Precios"
#: src/views/home/components/Pricing.tsx:56 #: src/views/home/components/Pricing.tsx:56
#: src/views/settings/components/UpgradeToProConfirmation.tsx:86
msgid "Priority email support" msgid "Priority email support"
msgstr "Soporte prioritario por email" msgstr "Soporte prioritario por email"
@@ -1313,11 +1320,19 @@ msgstr "Política de privacidad"
msgid "Private" msgid "Private"
msgstr "Privado" msgstr "Privado"
#: src/views/members/index.tsx:186
msgid "Pro Plan"
msgstr "Plan Pro"
#: src/views/members/components/InviteMemberForm.tsx:182
msgid "Pro Plan ∞"
msgstr "Plan Pro ∞"
#: src/views/settings/components/Avatar.tsx:26 #: src/views/settings/components/Avatar.tsx:26
msgid "Profile image updated" msgid "Profile image updated"
msgstr "Imagen de perfil actualizada" msgstr "Imagen de perfil actualizada"
#: src/views/settings/index.tsx:146 #: src/views/settings/index.tsx:157
msgid "Profile picture" msgid "Profile picture"
msgstr "Foto de perfil" msgstr "Foto de perfil"
@@ -1353,7 +1368,7 @@ msgstr "Remoto"
msgid "Remove" msgid "Remove"
msgstr "Eliminar" msgstr "Eliminar"
#: src/views/members/index.tsx:142 #: src/views/members/index.tsx:143
msgid "Remove member" msgid "Remove member"
msgstr "Eliminar miembro" msgstr "Eliminar miembro"
@@ -1409,7 +1424,7 @@ msgstr "Revocar"
msgid "Roadmap" msgid "Roadmap"
msgstr "Hoja de ruta" msgstr "Hoja de ruta"
#: src/views/members/index.tsx:215 #: src/views/members/index.tsx:223
msgid "Role" msgid "Role"
msgstr "Rol" msgstr "Rol"
@@ -1458,12 +1473,12 @@ msgid "Senior"
msgstr "Senior" msgstr "Senior"
#: src/components/SideNavigation.tsx:78 #: src/components/SideNavigation.tsx:78
#: src/views/settings/index.tsx:140 #: src/views/settings/index.tsx:151
msgid "Settings" msgid "Settings"
msgstr "Configuración" msgstr "Configuración"
#. placeholder {0}: workspace.name ?? "Workspace" #. placeholder {0}: workspace.name ?? "Workspace"
#: src/views/settings/index.tsx:136 #: src/views/settings/index.tsx:147
msgid "Settings | {0}" msgid "Settings | {0}"
msgstr "Configuración | {0}" msgstr "Configuración | {0}"
@@ -1514,6 +1529,10 @@ msgstr "Estrella en Github"
msgid "Success" msgid "Success"
msgstr "Éxito" msgstr "Éxito"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:55
msgid "Supercharge your workspace for just $29/month. Here's what you'll get:"
msgstr "Potencia tu espacio de trabajo por solo $29/mes. Esto es lo que obtendrás:"
#: src/components/UserMenu.tsx:180 #: src/components/UserMenu.tsx:180
msgid "Support" msgid "Support"
msgstr "Soporte" msgstr "Soporte"
@@ -1526,8 +1545,8 @@ msgstr "Apoya el desarrollo del proyecto"
msgid "System" msgid "System"
msgstr "Sistema" msgstr "Sistema"
#: src/views/members/components/InviteMemberForm.tsx:183 #: src/views/members/components/InviteMemberForm.tsx:182
#: src/views/members/index.tsx:184 #: src/views/members/index.tsx:188
msgid "Team Plan" msgid "Team Plan"
msgstr "Plan de Equipo" msgstr "Plan de Equipo"
@@ -1612,7 +1631,7 @@ msgstr "Alternar menú"
msgid "Track all card changes with detailed activity history." msgid "Track all card changes with detailed activity history."
msgstr "Rastrea todos los cambios en las tarjetas con un historial de actividad detallado." msgstr "Rastrea todos los cambios en las tarjetas con un historial de actividad detallado."
#: src/views/settings/index.tsx:94 #: src/views/settings/index.tsx:105
msgid "Trello disconnected" msgid "Trello disconnected"
msgstr "Trello desconectado" msgstr "Trello desconectado"
@@ -1743,6 +1762,10 @@ msgstr "Comentarios ilimitados"
msgid "Unlimited lists" msgid "Unlimited lists"
msgstr "Listas ilimitadas" msgstr "Listas ilimitadas"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:64
msgid "Unlimited members"
msgstr "Miembros ilimitados"
#: src/views/board/components/UpdateBoardSlugForm.tsx:174 #: src/views/board/components/UpdateBoardSlugForm.tsx:174
#: src/views/settings/components/UpdateDisplayNameForm.tsx:79 #: src/views/settings/components/UpdateDisplayNameForm.tsx:79
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90 #: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
@@ -1772,11 +1795,16 @@ msgstr "actualizó el título"
msgid "updated the title to <0>{0}</0>" msgid "updated the title to <0>{0}</0>"
msgstr "actualizó el título a <0>{0}</0>" msgstr "actualizó el título a <0>{0}</0>"
#: src/views/settings/components/CustomURLConfirmation.tsx:52 #: src/views/settings/components/UpgradeToProConfirmation.tsx:99
msgid "Upgrade" msgid "Upgrade"
msgstr "Actualizar" msgstr "Actualizar"
#: src/views/members/components/InviteMemberForm.tsx:222 #: src/views/settings/components/UpgradeToProConfirmation.tsx:52
#: src/views/settings/index.tsx:202
msgid "Upgrade to Pro"
msgstr "Actualizar a Pro"
#: src/views/members/components/InviteMemberForm.tsx:224
msgid "Upgrade to Team Plan" msgid "Upgrade to Team Plan"
msgstr "Actualizar al Plan de Equipo" msgstr "Actualizar al Plan de Equipo"
@@ -1801,11 +1829,11 @@ msgstr "La URL debe tener al menos 3 caracteres"
msgid "Use template" msgid "Use template"
msgstr "Usar plantilla" msgstr "Usar plantilla"
#: src/views/members/index.tsx:209 #: src/views/members/index.tsx:217
msgid "User" msgid "User"
msgstr "Usuario" msgstr "Usuario"
#: src/views/members/components/InviteMemberForm.tsx:77 #: src/views/members/components/InviteMemberForm.tsx:72
msgid "User is already a member of this workspace" msgid "User is already a member of this workspace"
msgstr "El usuario ya es miembro de este espacio de trabajo" msgstr "El usuario ya es miembro de este espacio de trabajo"
@@ -1813,11 +1841,11 @@ msgstr "El usuario ya es miembro de este espacio de trabajo"
msgid "Video" msgid "Video"
msgstr "Video" msgstr "Video"
#: src/views/settings/index.tsx:262 #: src/views/settings/index.tsx:285
msgid "View and manage your API keys." msgid "View and manage your API keys."
msgstr "Ver y gestionar tus claves API." msgstr "Ver y gestionar tus claves API."
#: src/views/settings/index.tsx:201 #: src/views/settings/index.tsx:224
msgid "View and manage your billing and subscription." msgid "View and manage your billing and subscription."
msgstr "Ver y gestionar tu facturación y suscripción." msgstr "Ver y gestionar tu facturación y suscripción."
@@ -1877,7 +1905,7 @@ msgstr "Espacio de trabajo"
msgid "Workspace deleted" msgid "Workspace deleted"
msgstr "Espacio de trabajo eliminado" msgstr "Espacio de trabajo eliminado"
#: src/views/settings/index.tsx:177 #: src/views/settings/index.tsx:188
msgid "Workspace description" msgid "Workspace description"
msgstr "Descripción del espacio de trabajo" msgstr "Descripción del espacio de trabajo"
@@ -1899,7 +1927,7 @@ msgid "Workspace members"
msgstr "Miembros del espacio de trabajo" msgstr "Miembros del espacio de trabajo"
#: src/components/NewWorkspaceForm.tsx:81 #: src/components/NewWorkspaceForm.tsx:81
#: src/views/settings/index.tsx:158 #: src/views/settings/index.tsx:169
msgid "Workspace name" msgid "Workspace name"
msgstr "Nombre del espacio de trabajo" msgstr "Nombre del espacio de trabajo"
@@ -1919,7 +1947,7 @@ msgstr "Nombre del espacio de trabajo actualizado"
msgid "Workspace slug updated" msgid "Workspace slug updated"
msgstr "Slug del espacio de trabajo actualizado" msgstr "Slug del espacio de trabajo actualizado"
#: src/views/settings/index.tsx:167 #: src/views/settings/index.tsx:178
msgid "Workspace URL" msgid "Workspace URL"
msgstr "URL del espacio de trabajo" msgstr "URL del espacio de trabajo"
@@ -1935,7 +1963,7 @@ msgstr "Anual"
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits." msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
msgstr "Sí, ofrecemos un plan gratuito para siempre para uso individual. Sin restricciones, sin muros de pago, sin límites." msgstr "Sí, ofrecemos un plan gratuito para siempre para uso individual. Sin restricciones, sin muros de pago, sin límites."
#: src/views/settings/index.tsx:294 #: src/views/settings/index.tsx:317
msgid "You are about to change your password." msgid "You are about to change your password."
msgstr "Estás a punto de cambiar tu contraseña." msgstr "Estás a punto de cambiar tu contraseña."
@@ -1959,6 +1987,10 @@ msgstr "Has iniciado sesión correctamente."
msgid "You have been signed up successfully." msgid "You have been signed up successfully."
msgstr "Te has registrado correctamente." msgstr "Te has registrado correctamente."
#: src/views/members/components/InviteMemberForm.tsx:186
msgid "You have unlimited seats with your Pro Plan. There is no additional charge for new members!"
msgstr "Tienes plazas ilimitadas con tu Plan Pro. ¡No hay cargos adicionales por nuevos miembros!"
#: src/views/settings/components/DeleteAccountConfirmation.tsx:28 #: src/views/settings/components/DeleteAccountConfirmation.tsx:28
msgid "Your account has been deleted." msgid "Your account has been deleted."
msgstr "Tu cuenta ha sido eliminada." msgstr "Tu cuenta ha sido eliminada."
@@ -1979,11 +2011,11 @@ msgstr "Tu contraseña ha sido cambiada."
msgid "Your profile image has been updated." msgid "Your profile image has been updated."
msgstr "Tu imagen de perfil ha sido actualizada." msgstr "Tu imagen de perfil ha sido actualizada."
#: src/views/settings/index.tsx:95 #: src/views/settings/index.tsx:106
msgid "Your Trello account has been disconnected." msgid "Your Trello account has been disconnected."
msgstr "Tu cuenta de Trello ha sido desconectada." msgstr "Tu cuenta de Trello ha sido desconectada."
#: src/views/settings/index.tsx:244 #: src/views/settings/index.tsx:267
msgid "Your Trello account is connected." msgid "Your Trello account is connected."
msgstr "Tu cuenta de Trello está conectada." msgstr "Tu cuenta de Trello está conectada."

File diff suppressed because one or more lines are too long

View File

@@ -36,12 +36,12 @@ msgstr "{0} étiquettes"
msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({boardCount})}}" msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({boardCount})}}"
msgstr "{boardCount, plural, one {Importer le tableau (1)} other {Importer les tableaux ({boardCount})}}" msgstr "{boardCount, plural, one {Importer le tableau (1)} other {Importer les tableaux ({boardCount})}}"
#: src/views/members/components/InviteMemberForm.tsx:91 #: src/views/members/components/InviteMemberForm.tsx:92
#: src/views/members/components/InviteMemberForm.tsx:106 #: src/views/members/components/InviteMemberForm.tsx:104
msgid "$10/month" msgid "$10/month"
msgstr "10 $/mois" msgstr "10 $/mois"
#: src/views/members/components/InviteMemberForm.tsx:106 #: src/views/members/components/InviteMemberForm.tsx:104
msgid "$8/month" msgid "$8/month"
msgstr "8 $/mois" msgstr "8 $/mois"
@@ -97,7 +97,7 @@ msgid "Add label"
msgstr "Ajouter une étiquette" msgstr "Ajouter une étiquette"
#: src/views/card/components/MemberSelector.tsx:130 #: src/views/card/components/MemberSelector.tsx:130
#: src/views/members/components/InviteMemberForm.tsx:149 #: src/views/members/components/InviteMemberForm.tsx:147
msgid "Add member" msgid "Add member"
msgstr "Ajouter un membre" msgstr "Ajouter un membre"
@@ -132,7 +132,7 @@ msgstr "a ajouté l'élément <0>{0}</0> à la checklist"
msgid "added label <0>{0}</0>" msgid "added label <0>{0}</0>"
msgstr "a ajouté l'étiquette <0>{0}</0>" msgstr "a ajouté l'étiquette <0>{0}</0>"
#: src/views/members/components/InviteMemberForm.tsx:186 #: src/views/members/components/InviteMemberForm.tsx:187
msgid "Adding a new member will cost an additional {price} ({billingType}) per seat." msgid "Adding a new member will cost an additional {price} ({billingType}) per seat."
msgstr "L'ajout d'un nouveau membre coûtera {price} supplémentaires ({billingType}) par siège." msgstr "L'ajout d'un nouveau membre coûtera {price} supplémentaires ({billingType}) par siège."
@@ -148,7 +148,7 @@ msgstr "Tous les systèmes opérationnels"
msgid "Already have an account? <0><1>Sign in</1></0>" msgid "Already have an account? <0><1>Sign in</1></0>"
msgstr "Vous avez déjà un compte ? <0><1>Connectez-vous</1></0>" msgstr "Vous avez déjà un compte ? <0><1>Connectez-vous</1></0>"
#: src/views/settings/index.tsx:102 #: src/views/settings/index.tsx:113
msgid "An error occurred while disconnecting your Trello account." msgid "An error occurred while disconnecting your Trello account."
msgstr "Une erreur s'est produite lors de la déconnexion de votre compte Trello." msgstr "Une erreur s'est produite lors de la déconnexion de votre compte Trello."
@@ -156,7 +156,7 @@ msgstr "Une erreur s'est produite lors de la déconnexion de votre compte Trello
msgid "An unexpected error occurred. Please try again later." msgid "An unexpected error occurred. Please try again later."
msgstr "Une erreur inattendue s'est produite. Veuillez réessayer plus tard." msgstr "Une erreur inattendue s'est produite. Veuillez réessayer plus tard."
#: src/views/settings/index.tsx:259 #: src/views/settings/index.tsx:282
msgid "API keys" msgid "API keys"
msgstr "Clés API" msgstr "Clés API"
@@ -218,20 +218,20 @@ msgstr "Backlog"
msgid "Basic Kanban" msgid "Basic Kanban"
msgstr "Kanban basique" msgstr "Kanban basique"
#: src/views/members/components/InviteMemberForm.tsx:107 #: src/views/members/components/InviteMemberForm.tsx:105
msgid "billed annually" msgid "billed annually"
msgstr "facturation annuelle" msgstr "facturation annuelle"
#: src/views/members/components/InviteMemberForm.tsx:107 #: src/views/members/components/InviteMemberForm.tsx:105
msgid "billed monthly" msgid "billed monthly"
msgstr "facturation mensuelle" msgstr "facturation mensuelle"
#: src/views/boards/components/TemplateBoards.tsx:55 #: src/views/boards/components/TemplateBoards.tsx:55
#: src/views/settings/index.tsx:198 #: src/views/settings/index.tsx:221
msgid "Billing" msgid "Billing"
msgstr "Facturation" msgstr "Facturation"
#: src/views/settings/index.tsx:208 #: src/views/settings/index.tsx:231
msgid "Billing portal" msgid "Billing portal"
msgstr "Portail de facturation" msgstr "Portail de facturation"
@@ -243,6 +243,10 @@ msgstr "Article de blog"
msgid "Board" msgid "Board"
msgstr "Tableau" msgstr "Tableau"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:80
msgid "Board analytics (coming soon)"
msgstr "Analyses de tableau (bientôt disponible)"
#: src/views/boards/components/NewBoardForm.tsx:21 #: src/views/boards/components/NewBoardForm.tsx:21
msgid "Board name cannot exceed 100 characters" msgid "Board name cannot exceed 100 characters"
msgstr "Le nom du tableau ne peut pas dépasser 100 caractères" msgstr "Le nom du tableau ne peut pas dépasser 100 caractères"
@@ -309,9 +313,9 @@ msgstr "Rapport de bug"
#: src/views/card/components/DeleteCommentConfirmation.tsx:76 #: src/views/card/components/DeleteCommentConfirmation.tsx:76
#: src/views/members/components/DeleteMemberConfirmation.tsx:55 #: src/views/members/components/DeleteMemberConfirmation.tsx:55
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168 #: src/views/settings/components/ChangePasswordConfirmation.tsx:168
#: src/views/settings/components/CustomURLConfirmation.tsx:50
#: src/views/settings/components/DeleteAccountConfirmation.tsx:88 #: src/views/settings/components/DeleteAccountConfirmation.tsx:88
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98
#: src/views/settings/components/UpgradeToProConfirmation.tsx:94
msgid "Cancel" msgid "Cancel"
msgstr "Annuler" msgstr "Annuler"
@@ -325,12 +329,12 @@ msgstr "Titre de la carte"
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109 #: src/views/settings/components/ChangePasswordConfirmation.tsx:109
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178 #: src/views/settings/components/ChangePasswordConfirmation.tsx:178
#: src/views/settings/index.tsx:291 #: src/views/settings/index.tsx:314
#: src/views/settings/index.tsx:301 #: src/views/settings/index.tsx:324
msgid "Change Password" msgid "Change Password"
msgstr "Modifier le mot de passe" msgstr "Modifier le mot de passe"
#: src/views/settings/index.tsx:190 #: src/views/settings/index.tsx:213
msgid "Change the language of the app." msgid "Change the language of the app."
msgstr "Changer la langue de l'application." msgstr "Changer la langue de l'application."
@@ -389,16 +393,12 @@ msgstr "a terminé un élément de la checklist"
msgid "completed checklist item <0>{0}</0>" msgid "completed checklist item <0>{0}</0>"
msgstr "a terminé l'élément <0>{0}</0> de la checklist" msgstr "a terminé l'élément <0>{0}</0> de la checklist"
#: src/views/settings/components/CustomURLConfirmation.tsx:42
msgid "Confirm URL change"
msgstr "Confirmer le changement d'URL"
#: src/views/settings/components/ChangePasswordConfirmation.tsx:150 #: src/views/settings/components/ChangePasswordConfirmation.tsx:150
msgid "Confirm your new password" msgid "Confirm your new password"
msgstr "Confirmez votre nouveau mot de passe" msgstr "Confirmez votre nouveau mot de passe"
#: src/views/boards/components/ImportBoardsForm.tsx:157 #: src/views/boards/components/ImportBoardsForm.tsx:157
#: src/views/settings/index.tsx:235 #: src/views/settings/index.tsx:258
msgid "Connect Trello" msgid "Connect Trello"
msgstr "Connecter Trello" msgstr "Connecter Trello"
@@ -406,7 +406,7 @@ msgstr "Connecter Trello"
msgid "Connect your favorite tools to streamline your workflow." msgid "Connect your favorite tools to streamline your workflow."
msgstr "Connectez vos outils favoris pour simplifier votre flux de travail." msgstr "Connectez vos outils favoris pour simplifier votre flux de travail."
#: src/views/settings/index.tsx:222 #: src/views/settings/index.tsx:245
msgid "Connect your Trello account to import boards." msgid "Connect your Trello account to import boards."
msgstr "Connectez votre compte Trello pour importer des tableaux." msgstr "Connectez votre compte Trello pour importer des tableaux."
@@ -499,9 +499,9 @@ msgstr "Le mot de passe actuel est requis"
msgid "Custom domain" msgid "Custom domain"
msgstr "Domaine personnalisé" msgstr "Domaine personnalisé"
#: src/views/settings/components/CustomURLConfirmation.tsx:45 #: src/views/settings/components/UpgradeToProConfirmation.tsx:74
msgid "Custom URLs are a premium feature. You'll be directed to upgrade your account." msgid "Custom workspace URL"
msgstr "Les URL personnalisées sont une fonctionnalité premium. Vous serez dirigé vers la mise à niveau de votre compte." msgstr "URL d'espace de travail personnalisée"
#: src/views/boards/components/TemplateBoards.tsx:41 #: src/views/boards/components/TemplateBoards.tsx:41
msgid "Customer Support" msgid "Customer Support"
@@ -520,8 +520,8 @@ msgid "Delete"
msgstr "Supprimer" msgstr "Supprimer"
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96 #: src/views/settings/components/DeleteAccountConfirmation.tsx:96
#: src/views/settings/index.tsx:309 #: src/views/settings/index.tsx:332
#: src/views/settings/index.tsx:319 #: src/views/settings/index.tsx:342
msgid "Delete account" msgid "Delete account"
msgstr "Supprimer le compte" msgstr "Supprimer le compte"
@@ -542,8 +542,8 @@ msgid "Delete list"
msgstr "Supprimer la liste" msgstr "Supprimer la liste"
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
#: src/views/settings/index.tsx:272 #: src/views/settings/index.tsx:295
#: src/views/settings/index.tsx:283 #: src/views/settings/index.tsx:306
msgid "Delete workspace" msgid "Delete workspace"
msgstr "Supprimer l'espace de travail" msgstr "Supprimer l'espace de travail"
@@ -569,7 +569,7 @@ msgstr "a supprimé l'élément <0>{0}</0> de la checklist"
msgid "Design" msgid "Design"
msgstr "Design" msgstr "Design"
#: src/views/settings/index.tsx:250 #: src/views/settings/index.tsx:273
msgid "Disconnect Trello" msgid "Disconnect Trello"
msgstr "Déconnecter Trello" msgstr "Déconnecter Trello"
@@ -577,7 +577,7 @@ msgstr "Déconnecter Trello"
msgid "Discuss and collaborate on cards." msgid "Discuss and collaborate on cards."
msgstr "Discutez et collaborez sur les cartes." msgstr "Discutez et collaborez sur les cartes."
#: src/views/settings/index.tsx:151 #: src/views/settings/index.tsx:162
msgid "Display name" msgid "Display name"
msgstr "Nom d'affichage" msgstr "Nom d'affichage"
@@ -647,7 +647,7 @@ msgstr "Édition"
msgid "email" msgid "email"
msgstr "e-mail" msgstr "e-mail"
#: src/views/members/components/InviteMemberForm.tsx:163 #: src/views/members/components/InviteMemberForm.tsx:161
msgid "Email" msgid "Email"
msgstr "E-mail" msgstr "E-mail"
@@ -695,12 +695,12 @@ msgstr "Erreur lors de la suppression de l'étiquette"
msgid "Error deleting workspace" msgid "Error deleting workspace"
msgstr "Erreur lors de la suppression de l'espace de travail" msgstr "Erreur lors de la suppression de l'espace de travail"
#: src/views/settings/index.tsx:101 #: src/views/settings/index.tsx:112
msgid "Error disconnecting Trello" msgid "Error disconnecting Trello"
msgstr "Erreur lors de la déconnexion de Trello" msgstr "Erreur lors de la déconnexion de Trello"
#: src/views/members/components/InviteMemberForm.tsx:76 #: src/views/members/components/InviteMemberForm.tsx:71
#: src/views/members/components/InviteMemberForm.tsx:82 #: src/views/members/components/InviteMemberForm.tsx:77
msgid "Error inviting member" msgid "Error inviting member"
msgstr "Erreur lors de l'invitation du membre" msgstr "Erreur lors de l'invitation du membre"
@@ -724,7 +724,8 @@ msgstr "Erreur lors de la mise à jour du nom de l'espace de travail"
msgid "Error updating workspace URL" msgid "Error updating workspace URL"
msgstr "Erreur lors de la mise à jour de l'URL de l'espace de travail" msgstr "Erreur lors de la mise à jour de l'URL de l'espace de travail"
#: src/views/members/components/InviteMemberForm.tsx:132 #: src/views/members/components/InviteMemberForm.tsx:130
#: src/views/settings/components/UpgradeToProConfirmation.tsx:41
msgid "Error upgrading subscription" msgid "Error upgrading subscription"
msgstr "Erreur lors de la mise à niveau de l'abonnement" msgstr "Erreur lors de la mise à niveau de l'abonnement"
@@ -794,8 +795,8 @@ msgstr "Pour une durabilité à long terme, nous reconnaissons que tous les bons
msgid "Free" msgid "Free"
msgstr "Gratuit" msgstr "Gratuit"
#: src/views/members/components/InviteMemberForm.tsx:192 #: src/views/members/components/InviteMemberForm.tsx:193
#: src/views/members/index.tsx:184 #: src/views/members/index.tsx:189
msgid "Free Plan" msgid "Free Plan"
msgstr "Forfait gratuit" msgstr "Forfait gratuit"
@@ -950,24 +951,24 @@ msgstr "Intégrations"
msgid "Interviewing" msgid "Interviewing"
msgstr "Entretien" msgstr "Entretien"
#: src/views/members/components/InviteMemberForm.tsx:45 #: src/views/members/components/InviteMemberForm.tsx:40
msgid "Invalid email address" msgid "Invalid email address"
msgstr "Adresse e-mail invalide" msgstr "Adresse e-mail invalide"
#: src/views/members/index.tsx:193 #: src/views/members/index.tsx:201
msgid "Invite" msgid "Invite"
msgstr "Inviter" msgstr "Inviter"
#: src/views/members/components/InviteMemberForm.tsx:207 #: src/views/members/components/InviteMemberForm.tsx:208
msgid "Invite another" msgid "Invite another"
msgstr "Inviter un autre" msgstr "Inviter un autre"
#: src/views/card/components/MemberSelector.tsx:112 #: src/views/card/components/MemberSelector.tsx:112
#: src/views/members/components/InviteMemberForm.tsx:231 #: src/views/members/components/InviteMemberForm.tsx:233
msgid "Invite member" msgid "Invite member"
msgstr "Inviter un membre" msgstr "Inviter un membre"
#: src/views/members/components/InviteMemberForm.tsx:195 #: src/views/members/components/InviteMemberForm.tsx:196
msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace." msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace."
msgstr "L'invitation de membres nécessite un forfait d'équipe. Vous serez redirigé pour mettre à niveau votre espace de travail." msgstr "L'invitation de membres nécessite un forfait d'équipe. Vous serez redirigé pour mettre à niveau votre espace de travail."
@@ -998,10 +999,14 @@ msgstr "Étiquettes"
msgid "Labels & Filters" msgid "Labels & Filters"
msgstr "Étiquettes & filtres" msgstr "Étiquettes & filtres"
#: src/views/settings/index.tsx:187 #: src/views/settings/index.tsx:210
msgid "Language" msgid "Language"
msgstr "Langue" msgstr "Langue"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:67
msgid "Launch offer"
msgstr "Offre de lancement"
#: src/views/boards/components/TemplateBoards.tsx:83 #: src/views/boards/components/TemplateBoards.tsx:83
msgid "Learning" msgid "Learning"
msgstr "Apprentissage" msgstr "Apprentissage"
@@ -1067,12 +1072,12 @@ msgstr "Priorité moyenne"
#: src/views/board/components/Filters.tsx:93 #: src/views/board/components/Filters.tsx:93
#: src/views/board/components/NewCardForm.tsx:357 #: src/views/board/components/NewCardForm.tsx:357
#: src/views/card/index.tsx:125 #: src/views/card/index.tsx:125
#: src/views/members/index.tsx:171 #: src/views/members/index.tsx:172
msgid "Members" msgid "Members"
msgstr "Membres" msgstr "Membres"
#. placeholder {0}: workspace.name ?? "Workspace" #. placeholder {0}: workspace.name ?? "Workspace"
#: src/views/members/index.tsx:167 #: src/views/members/index.tsx:168
msgid "Members | {0}" msgid "Members | {0}"
msgstr "Membres | {0}" msgstr "Membres | {0}"
@@ -1080,7 +1085,7 @@ msgstr "Membres | {0}"
msgid "Monthly" msgid "Monthly"
msgstr "Mensuel" msgstr "Mensuel"
#: src/views/members/components/InviteMemberForm.tsx:92 #: src/views/members/components/InviteMemberForm.tsx:93
msgid "monthly billing" msgid "monthly billing"
msgstr "facturation mensuelle" msgstr "facturation mensuelle"
@@ -1180,11 +1185,11 @@ msgstr "Offre"
msgid "Onboarding" msgid "Onboarding"
msgstr "Intégration" msgstr "Intégration"
#: src/views/settings/index.tsx:312 #: src/views/settings/index.tsx:335
msgid "Once you delete your account, there is no going back. This action cannot be undone." msgid "Once you delete your account, there is no going back. This action cannot be undone."
msgstr "Une fois que vous supprimez votre compte, il n'y a pas de retour possible. Cette action ne peut pas être annulée." msgstr "Une fois que vous supprimez votre compte, il n'y a pas de retour possible. Cette action ne peut pas être annulée."
#: src/views/settings/index.tsx:275 #: src/views/settings/index.tsx:298
msgid "Once you delete your workspace, there is no going back. This action cannot be undone." msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
msgstr "Une fois que vous supprimez votre espace de travail, il n'y a pas de retour possible. Cette action ne peut pas être annulée." msgstr "Une fois que vous supprimez votre espace de travail, il n'y a pas de retour possible. Cette action ne peut pas être annulée."
@@ -1220,7 +1225,7 @@ msgstr "Les mots de passe ne correspondent pas"
msgid "Payment frequency" msgid "Payment frequency"
msgstr "Fréquence de paiement" msgstr "Fréquence de paiement"
#: src/views/members/index.tsx:128 #: src/views/members/index.tsx:129
msgid "Pending" msgid "Pending"
msgstr "En attente" msgstr "En attente"
@@ -1282,8 +1287,8 @@ msgstr "Veuillez sélectionner un fichier à télécharger."
#: src/views/card/components/NewCommentForm.tsx:31 #: src/views/card/components/NewCommentForm.tsx:31
#: src/views/card/index.tsx:173 #: src/views/card/index.tsx:173
#: src/views/members/components/DeleteMemberConfirmation.tsx:28 #: src/views/members/components/DeleteMemberConfirmation.tsx:28
#: src/views/members/components/InviteMemberForm.tsx:83 #: src/views/members/components/InviteMemberForm.tsx:78
#: src/views/members/components/InviteMemberForm.tsx:133 #: src/views/members/components/InviteMemberForm.tsx:131
#: src/views/settings/components/Avatar.tsx:40 #: src/views/settings/components/Avatar.tsx:40
#: src/views/settings/components/Avatar.tsx:98 #: src/views/settings/components/Avatar.tsx:98
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40 #: src/views/settings/components/DeleteAccountConfirmation.tsx:40
@@ -1292,6 +1297,7 @@ msgstr "Veuillez sélectionner un fichier à télécharger."
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:62 #: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:62
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:57 #: src/views/settings/components/UpdateWorkspaceNameForm.tsx:57
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:74 #: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:74
#: src/views/settings/components/UpgradeToProConfirmation.tsx:42
msgid "Please try again later, or contact customer support." msgid "Please try again later, or contact customer support."
msgstr "Veuillez réessayer plus tard ou contacter le service client." msgstr "Veuillez réessayer plus tard ou contacter le service client."
@@ -1302,6 +1308,7 @@ msgid "Pricing"
msgstr "Tarifs" msgstr "Tarifs"
#: src/views/home/components/Pricing.tsx:56 #: src/views/home/components/Pricing.tsx:56
#: src/views/settings/components/UpgradeToProConfirmation.tsx:86
msgid "Priority email support" msgid "Priority email support"
msgstr "Support par e-mail prioritaire" msgstr "Support par e-mail prioritaire"
@@ -1313,11 +1320,19 @@ msgstr "Politique de confidentialité"
msgid "Private" msgid "Private"
msgstr "Privé" msgstr "Privé"
#: src/views/members/index.tsx:186
msgid "Pro Plan"
msgstr "Plan Pro"
#: src/views/members/components/InviteMemberForm.tsx:182
msgid "Pro Plan ∞"
msgstr "Plan Pro ∞"
#: src/views/settings/components/Avatar.tsx:26 #: src/views/settings/components/Avatar.tsx:26
msgid "Profile image updated" msgid "Profile image updated"
msgstr "Image de profil mise à jour" msgstr "Image de profil mise à jour"
#: src/views/settings/index.tsx:146 #: src/views/settings/index.tsx:157
msgid "Profile picture" msgid "Profile picture"
msgstr "Photo de profil" msgstr "Photo de profil"
@@ -1353,7 +1368,7 @@ msgstr "À distance"
msgid "Remove" msgid "Remove"
msgstr "Supprimer" msgstr "Supprimer"
#: src/views/members/index.tsx:142 #: src/views/members/index.tsx:143
msgid "Remove member" msgid "Remove member"
msgstr "Supprimer le membre" msgstr "Supprimer le membre"
@@ -1409,7 +1424,7 @@ msgstr "Révoquer"
msgid "Roadmap" msgid "Roadmap"
msgstr "Feuille de route" msgstr "Feuille de route"
#: src/views/members/index.tsx:215 #: src/views/members/index.tsx:223
msgid "Role" msgid "Role"
msgstr "Rôle" msgstr "Rôle"
@@ -1458,12 +1473,12 @@ msgid "Senior"
msgstr "Senior" msgstr "Senior"
#: src/components/SideNavigation.tsx:78 #: src/components/SideNavigation.tsx:78
#: src/views/settings/index.tsx:140 #: src/views/settings/index.tsx:151
msgid "Settings" msgid "Settings"
msgstr "Paramètres" msgstr "Paramètres"
#. placeholder {0}: workspace.name ?? "Workspace" #. placeholder {0}: workspace.name ?? "Workspace"
#: src/views/settings/index.tsx:136 #: src/views/settings/index.tsx:147
msgid "Settings | {0}" msgid "Settings | {0}"
msgstr "Paramètres | {0}" msgstr "Paramètres | {0}"
@@ -1514,6 +1529,10 @@ msgstr "Étoile sur Github"
msgid "Success" msgid "Success"
msgstr "Succès" msgstr "Succès"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:55
msgid "Supercharge your workspace for just $29/month. Here's what you'll get:"
msgstr "Optimisez votre espace de travail pour seulement 29 $/mois. Voici ce que vous obtiendrez :"
#: src/components/UserMenu.tsx:180 #: src/components/UserMenu.tsx:180
msgid "Support" msgid "Support"
msgstr "Assistance" msgstr "Assistance"
@@ -1526,8 +1545,8 @@ msgstr "Soutenir le développement du projet"
msgid "System" msgid "System"
msgstr "Système" msgstr "Système"
#: src/views/members/components/InviteMemberForm.tsx:183 #: src/views/members/components/InviteMemberForm.tsx:182
#: src/views/members/index.tsx:184 #: src/views/members/index.tsx:188
msgid "Team Plan" msgid "Team Plan"
msgstr "Forfait d'équipe" msgstr "Forfait d'équipe"
@@ -1612,7 +1631,7 @@ msgstr "Basculer le menu"
msgid "Track all card changes with detailed activity history." msgid "Track all card changes with detailed activity history."
msgstr "Suivez tous les changements de cartes avec un historique d'activité détaillé." msgstr "Suivez tous les changements de cartes avec un historique d'activité détaillé."
#: src/views/settings/index.tsx:94 #: src/views/settings/index.tsx:105
msgid "Trello disconnected" msgid "Trello disconnected"
msgstr "Trello déconnecté" msgstr "Trello déconnecté"
@@ -1743,6 +1762,10 @@ msgstr "Commentaires illimités"
msgid "Unlimited lists" msgid "Unlimited lists"
msgstr "Listes illimitées" msgstr "Listes illimitées"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:64
msgid "Unlimited members"
msgstr "Membres illimités"
#: src/views/board/components/UpdateBoardSlugForm.tsx:174 #: src/views/board/components/UpdateBoardSlugForm.tsx:174
#: src/views/settings/components/UpdateDisplayNameForm.tsx:79 #: src/views/settings/components/UpdateDisplayNameForm.tsx:79
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90 #: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
@@ -1772,11 +1795,16 @@ msgstr "a mis à jour le titre"
msgid "updated the title to <0>{0}</0>" msgid "updated the title to <0>{0}</0>"
msgstr "a mis à jour le titre en <0>{0}</0>" msgstr "a mis à jour le titre en <0>{0}</0>"
#: src/views/settings/components/CustomURLConfirmation.tsx:52 #: src/views/settings/components/UpgradeToProConfirmation.tsx:99
msgid "Upgrade" msgid "Upgrade"
msgstr "Mettre à niveau" msgstr "Mettre à niveau"
#: src/views/members/components/InviteMemberForm.tsx:222 #: src/views/settings/components/UpgradeToProConfirmation.tsx:52
#: src/views/settings/index.tsx:202
msgid "Upgrade to Pro"
msgstr "Passer à Pro"
#: src/views/members/components/InviteMemberForm.tsx:224
msgid "Upgrade to Team Plan" msgid "Upgrade to Team Plan"
msgstr "Passer au forfait d'équipe" msgstr "Passer au forfait d'équipe"
@@ -1801,11 +1829,11 @@ msgstr "L'URL doit comporter au moins 3 caractères"
msgid "Use template" msgid "Use template"
msgstr "Utiliser le modèle" msgstr "Utiliser le modèle"
#: src/views/members/index.tsx:209 #: src/views/members/index.tsx:217
msgid "User" msgid "User"
msgstr "Utilisateur" msgstr "Utilisateur"
#: src/views/members/components/InviteMemberForm.tsx:77 #: src/views/members/components/InviteMemberForm.tsx:72
msgid "User is already a member of this workspace" msgid "User is already a member of this workspace"
msgstr "L'utilisateur est déjà membre de cet espace de travail" msgstr "L'utilisateur est déjà membre de cet espace de travail"
@@ -1813,11 +1841,11 @@ msgstr "L'utilisateur est déjà membre de cet espace de travail"
msgid "Video" msgid "Video"
msgstr "Vidéo" msgstr "Vidéo"
#: src/views/settings/index.tsx:262 #: src/views/settings/index.tsx:285
msgid "View and manage your API keys." msgid "View and manage your API keys."
msgstr "Consultez et gérez vos clés API." msgstr "Consultez et gérez vos clés API."
#: src/views/settings/index.tsx:201 #: src/views/settings/index.tsx:224
msgid "View and manage your billing and subscription." msgid "View and manage your billing and subscription."
msgstr "Consultez et gérez votre facturation et votre abonnement." msgstr "Consultez et gérez votre facturation et votre abonnement."
@@ -1877,7 +1905,7 @@ msgstr "Espace de travail"
msgid "Workspace deleted" msgid "Workspace deleted"
msgstr "Espace de travail supprimé" msgstr "Espace de travail supprimé"
#: src/views/settings/index.tsx:177 #: src/views/settings/index.tsx:188
msgid "Workspace description" msgid "Workspace description"
msgstr "Description de l'espace de travail" msgstr "Description de l'espace de travail"
@@ -1899,7 +1927,7 @@ msgid "Workspace members"
msgstr "Membres de l'espace de travail" msgstr "Membres de l'espace de travail"
#: src/components/NewWorkspaceForm.tsx:81 #: src/components/NewWorkspaceForm.tsx:81
#: src/views/settings/index.tsx:158 #: src/views/settings/index.tsx:169
msgid "Workspace name" msgid "Workspace name"
msgstr "Nom de l'espace de travail" msgstr "Nom de l'espace de travail"
@@ -1919,7 +1947,7 @@ msgstr "Nom de l'espace de travail mis à jour"
msgid "Workspace slug updated" msgid "Workspace slug updated"
msgstr "Slug de l'espace de travail mis à jour" msgstr "Slug de l'espace de travail mis à jour"
#: src/views/settings/index.tsx:167 #: src/views/settings/index.tsx:178
msgid "Workspace URL" msgid "Workspace URL"
msgstr "URL de l'espace de travail" msgstr "URL de l'espace de travail"
@@ -1935,7 +1963,7 @@ msgstr "Annuel"
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits." msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
msgstr "Oui, nous proposons un plan gratuit à vie pour un usage individuel. Aucune restriction, aucun paywall, aucune limite." msgstr "Oui, nous proposons un plan gratuit à vie pour un usage individuel. Aucune restriction, aucun paywall, aucune limite."
#: src/views/settings/index.tsx:294 #: src/views/settings/index.tsx:317
msgid "You are about to change your password." msgid "You are about to change your password."
msgstr "Vous êtes sur le point de modifier votre mot de passe." msgstr "Vous êtes sur le point de modifier votre mot de passe."
@@ -1959,6 +1987,10 @@ msgstr "Vous vous êtes connecté avec succès."
msgid "You have been signed up successfully." msgid "You have been signed up successfully."
msgstr "Vous vous êtes inscrit avec succès." msgstr "Vous vous êtes inscrit avec succès."
#: src/views/members/components/InviteMemberForm.tsx:186
msgid "You have unlimited seats with your Pro Plan. There is no additional charge for new members!"
msgstr "Vous disposez de places illimitées avec votre Plan Pro. Il n'y a pas de frais supplémentaires pour les nouveaux membres !"
#: src/views/settings/components/DeleteAccountConfirmation.tsx:28 #: src/views/settings/components/DeleteAccountConfirmation.tsx:28
msgid "Your account has been deleted." msgid "Your account has been deleted."
msgstr "Votre compte a été supprimé." msgstr "Votre compte a été supprimé."
@@ -1979,11 +2011,11 @@ msgstr "Votre mot de passe a été modifié."
msgid "Your profile image has been updated." msgid "Your profile image has been updated."
msgstr "Votre image de profil a été mise à jour." msgstr "Votre image de profil a été mise à jour."
#: src/views/settings/index.tsx:95 #: src/views/settings/index.tsx:106
msgid "Your Trello account has been disconnected." msgid "Your Trello account has been disconnected."
msgstr "Votre compte Trello a été déconnecté." msgstr "Votre compte Trello a été déconnecté."
#: src/views/settings/index.tsx:244 #: src/views/settings/index.tsx:267
msgid "Your Trello account is connected." msgid "Your Trello account is connected."
msgstr "Votre compte Trello est connecté." msgstr "Votre compte Trello est connecté."

File diff suppressed because one or more lines are too long

View File

@@ -36,12 +36,12 @@ msgstr "{0} etichette"
msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({boardCount})}}" msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({boardCount})}}"
msgstr "{boardCount, plural, one {Importa bacheca (1)} other {Importa bacheche ({boardCount})}}" msgstr "{boardCount, plural, one {Importa bacheca (1)} other {Importa bacheche ({boardCount})}}"
#: src/views/members/components/InviteMemberForm.tsx:91 #: src/views/members/components/InviteMemberForm.tsx:92
#: src/views/members/components/InviteMemberForm.tsx:106 #: src/views/members/components/InviteMemberForm.tsx:104
msgid "$10/month" msgid "$10/month"
msgstr "$10/mese" msgstr "$10/mese"
#: src/views/members/components/InviteMemberForm.tsx:106 #: src/views/members/components/InviteMemberForm.tsx:104
msgid "$8/month" msgid "$8/month"
msgstr "$8/mese" msgstr "$8/mese"
@@ -97,7 +97,7 @@ msgid "Add label"
msgstr "Aggiungi etichetta" msgstr "Aggiungi etichetta"
#: src/views/card/components/MemberSelector.tsx:130 #: src/views/card/components/MemberSelector.tsx:130
#: src/views/members/components/InviteMemberForm.tsx:149 #: src/views/members/components/InviteMemberForm.tsx:147
msgid "Add member" msgid "Add member"
msgstr "Aggiungi membro" msgstr "Aggiungi membro"
@@ -132,7 +132,7 @@ msgstr "ha aggiunto l'elemento <0>{0}</0> alla checklist"
msgid "added label <0>{0}</0>" msgid "added label <0>{0}</0>"
msgstr "ha aggiunto l'etichetta <0>{0}</0>" msgstr "ha aggiunto l'etichetta <0>{0}</0>"
#: src/views/members/components/InviteMemberForm.tsx:186 #: src/views/members/components/InviteMemberForm.tsx:187
msgid "Adding a new member will cost an additional {price} ({billingType}) per seat." msgid "Adding a new member will cost an additional {price} ({billingType}) per seat."
msgstr "L'aggiunta di un nuovo membro costerà un supplemento di {price} ({billingType}) per posto." msgstr "L'aggiunta di un nuovo membro costerà un supplemento di {price} ({billingType}) per posto."
@@ -148,7 +148,7 @@ msgstr "Tutti i sistemi operativi"
msgid "Already have an account? <0><1>Sign in</1></0>" msgid "Already have an account? <0><1>Sign in</1></0>"
msgstr "Hai già un account? <0><1>Accedi</1></0>" msgstr "Hai già un account? <0><1>Accedi</1></0>"
#: src/views/settings/index.tsx:102 #: src/views/settings/index.tsx:113
msgid "An error occurred while disconnecting your Trello account." msgid "An error occurred while disconnecting your Trello account."
msgstr "Si è verificato un errore durante la disconnessione del tuo account Trello." msgstr "Si è verificato un errore durante la disconnessione del tuo account Trello."
@@ -156,7 +156,7 @@ msgstr "Si è verificato un errore durante la disconnessione del tuo account Tre
msgid "An unexpected error occurred. Please try again later." msgid "An unexpected error occurred. Please try again later."
msgstr "Si è verificato un errore imprevisto. Riprova più tardi." msgstr "Si è verificato un errore imprevisto. Riprova più tardi."
#: src/views/settings/index.tsx:259 #: src/views/settings/index.tsx:282
msgid "API keys" msgid "API keys"
msgstr "Chiavi API" msgstr "Chiavi API"
@@ -218,20 +218,20 @@ msgstr "Backlog"
msgid "Basic Kanban" msgid "Basic Kanban"
msgstr "Kanban base" msgstr "Kanban base"
#: src/views/members/components/InviteMemberForm.tsx:107 #: src/views/members/components/InviteMemberForm.tsx:105
msgid "billed annually" msgid "billed annually"
msgstr "fatturato annualmente" msgstr "fatturato annualmente"
#: src/views/members/components/InviteMemberForm.tsx:107 #: src/views/members/components/InviteMemberForm.tsx:105
msgid "billed monthly" msgid "billed monthly"
msgstr "fatturato mensilmente" msgstr "fatturato mensilmente"
#: src/views/boards/components/TemplateBoards.tsx:55 #: src/views/boards/components/TemplateBoards.tsx:55
#: src/views/settings/index.tsx:198 #: src/views/settings/index.tsx:221
msgid "Billing" msgid "Billing"
msgstr "Fatturazione" msgstr "Fatturazione"
#: src/views/settings/index.tsx:208 #: src/views/settings/index.tsx:231
msgid "Billing portal" msgid "Billing portal"
msgstr "Portale di fatturazione" msgstr "Portale di fatturazione"
@@ -243,6 +243,10 @@ msgstr "Post del blog"
msgid "Board" msgid "Board"
msgstr "Bacheca" msgstr "Bacheca"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:80
msgid "Board analytics (coming soon)"
msgstr "Analisi della bacheca (prossimamente)"
#: src/views/boards/components/NewBoardForm.tsx:21 #: src/views/boards/components/NewBoardForm.tsx:21
msgid "Board name cannot exceed 100 characters" msgid "Board name cannot exceed 100 characters"
msgstr "Il nome della bacheca non può superare i 100 caratteri" msgstr "Il nome della bacheca non può superare i 100 caratteri"
@@ -309,9 +313,9 @@ msgstr "Segnalazione bug"
#: src/views/card/components/DeleteCommentConfirmation.tsx:76 #: src/views/card/components/DeleteCommentConfirmation.tsx:76
#: src/views/members/components/DeleteMemberConfirmation.tsx:55 #: src/views/members/components/DeleteMemberConfirmation.tsx:55
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168 #: src/views/settings/components/ChangePasswordConfirmation.tsx:168
#: src/views/settings/components/CustomURLConfirmation.tsx:50
#: src/views/settings/components/DeleteAccountConfirmation.tsx:88 #: src/views/settings/components/DeleteAccountConfirmation.tsx:88
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98
#: src/views/settings/components/UpgradeToProConfirmation.tsx:94
msgid "Cancel" msgid "Cancel"
msgstr "Annulla" msgstr "Annulla"
@@ -325,12 +329,12 @@ msgstr "Titolo della carta"
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109 #: src/views/settings/components/ChangePasswordConfirmation.tsx:109
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178 #: src/views/settings/components/ChangePasswordConfirmation.tsx:178
#: src/views/settings/index.tsx:291 #: src/views/settings/index.tsx:314
#: src/views/settings/index.tsx:301 #: src/views/settings/index.tsx:324
msgid "Change Password" msgid "Change Password"
msgstr "Cambia password" msgstr "Cambia password"
#: src/views/settings/index.tsx:190 #: src/views/settings/index.tsx:213
msgid "Change the language of the app." msgid "Change the language of the app."
msgstr "Cambia la lingua dell'app." msgstr "Cambia la lingua dell'app."
@@ -389,16 +393,12 @@ msgstr "ha completato un elemento della checklist"
msgid "completed checklist item <0>{0}</0>" msgid "completed checklist item <0>{0}</0>"
msgstr "ha completato l'elemento <0>{0}</0> della checklist" msgstr "ha completato l'elemento <0>{0}</0> della checklist"
#: src/views/settings/components/CustomURLConfirmation.tsx:42
msgid "Confirm URL change"
msgstr "Conferma modifica URL"
#: src/views/settings/components/ChangePasswordConfirmation.tsx:150 #: src/views/settings/components/ChangePasswordConfirmation.tsx:150
msgid "Confirm your new password" msgid "Confirm your new password"
msgstr "Conferma la tua nuova password" msgstr "Conferma la tua nuova password"
#: src/views/boards/components/ImportBoardsForm.tsx:157 #: src/views/boards/components/ImportBoardsForm.tsx:157
#: src/views/settings/index.tsx:235 #: src/views/settings/index.tsx:258
msgid "Connect Trello" msgid "Connect Trello"
msgstr "Connetti Trello" msgstr "Connetti Trello"
@@ -406,7 +406,7 @@ msgstr "Connetti Trello"
msgid "Connect your favorite tools to streamline your workflow." msgid "Connect your favorite tools to streamline your workflow."
msgstr "Connetti i tuoi strumenti preferiti per semplificare il tuo flusso di lavoro." msgstr "Connetti i tuoi strumenti preferiti per semplificare il tuo flusso di lavoro."
#: src/views/settings/index.tsx:222 #: src/views/settings/index.tsx:245
msgid "Connect your Trello account to import boards." msgid "Connect your Trello account to import boards."
msgstr "Connetti il tuo account Trello per importare le bacheche." msgstr "Connetti il tuo account Trello per importare le bacheche."
@@ -499,9 +499,9 @@ msgstr "La password attuale è obbligatoria"
msgid "Custom domain" msgid "Custom domain"
msgstr "Dominio personalizzato" msgstr "Dominio personalizzato"
#: src/views/settings/components/CustomURLConfirmation.tsx:45 #: src/views/settings/components/UpgradeToProConfirmation.tsx:74
msgid "Custom URLs are a premium feature. You'll be directed to upgrade your account." msgid "Custom workspace URL"
msgstr "Gli URL personalizzati sono una funzionalità premium. Sarai indirizzato all'aggiornamento del tuo account." msgstr "URL personalizzato dell'area di lavoro"
#: src/views/boards/components/TemplateBoards.tsx:41 #: src/views/boards/components/TemplateBoards.tsx:41
msgid "Customer Support" msgid "Customer Support"
@@ -520,8 +520,8 @@ msgid "Delete"
msgstr "Elimina" msgstr "Elimina"
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96 #: src/views/settings/components/DeleteAccountConfirmation.tsx:96
#: src/views/settings/index.tsx:309 #: src/views/settings/index.tsx:332
#: src/views/settings/index.tsx:319 #: src/views/settings/index.tsx:342
msgid "Delete account" msgid "Delete account"
msgstr "Elimina account" msgstr "Elimina account"
@@ -542,8 +542,8 @@ msgid "Delete list"
msgstr "Elimina lista" msgstr "Elimina lista"
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
#: src/views/settings/index.tsx:272 #: src/views/settings/index.tsx:295
#: src/views/settings/index.tsx:283 #: src/views/settings/index.tsx:306
msgid "Delete workspace" msgid "Delete workspace"
msgstr "Elimina spazio di lavoro" msgstr "Elimina spazio di lavoro"
@@ -569,7 +569,7 @@ msgstr "ha eliminato l'elemento <0>{0}</0> della checklist"
msgid "Design" msgid "Design"
msgstr "Design" msgstr "Design"
#: src/views/settings/index.tsx:250 #: src/views/settings/index.tsx:273
msgid "Disconnect Trello" msgid "Disconnect Trello"
msgstr "Disconnetti Trello" msgstr "Disconnetti Trello"
@@ -577,7 +577,7 @@ msgstr "Disconnetti Trello"
msgid "Discuss and collaborate on cards." msgid "Discuss and collaborate on cards."
msgstr "Discuti e collabora sulle schede." msgstr "Discuti e collabora sulle schede."
#: src/views/settings/index.tsx:151 #: src/views/settings/index.tsx:162
msgid "Display name" msgid "Display name"
msgstr "Nome visualizzato" msgstr "Nome visualizzato"
@@ -647,7 +647,7 @@ msgstr "Modifica"
msgid "email" msgid "email"
msgstr "email" msgstr "email"
#: src/views/members/components/InviteMemberForm.tsx:163 #: src/views/members/components/InviteMemberForm.tsx:161
msgid "Email" msgid "Email"
msgstr "Email" msgstr "Email"
@@ -695,12 +695,12 @@ msgstr "Errore durante l'eliminazione dell'etichetta"
msgid "Error deleting workspace" msgid "Error deleting workspace"
msgstr "Errore durante l'eliminazione dell'area di lavoro" msgstr "Errore durante l'eliminazione dell'area di lavoro"
#: src/views/settings/index.tsx:101 #: src/views/settings/index.tsx:112
msgid "Error disconnecting Trello" msgid "Error disconnecting Trello"
msgstr "Errore durante la disconnessione da Trello" msgstr "Errore durante la disconnessione da Trello"
#: src/views/members/components/InviteMemberForm.tsx:76 #: src/views/members/components/InviteMemberForm.tsx:71
#: src/views/members/components/InviteMemberForm.tsx:82 #: src/views/members/components/InviteMemberForm.tsx:77
msgid "Error inviting member" msgid "Error inviting member"
msgstr "Errore durante l'invito del membro" msgstr "Errore durante l'invito del membro"
@@ -724,7 +724,8 @@ msgstr "Errore durante l'aggiornamento del nome dell'area di lavoro"
msgid "Error updating workspace URL" msgid "Error updating workspace URL"
msgstr "Errore durante l'aggiornamento dell'URL dell'area di lavoro" msgstr "Errore durante l'aggiornamento dell'URL dell'area di lavoro"
#: src/views/members/components/InviteMemberForm.tsx:132 #: src/views/members/components/InviteMemberForm.tsx:130
#: src/views/settings/components/UpgradeToProConfirmation.tsx:41
msgid "Error upgrading subscription" msgid "Error upgrading subscription"
msgstr "Errore nell'aggiornamento dell'abbonamento" msgstr "Errore nell'aggiornamento dell'abbonamento"
@@ -794,8 +795,8 @@ msgstr "Per la sostenibilità a lungo termine, riconosciamo che tutti i buoni pr
msgid "Free" msgid "Free"
msgstr "Gratuito" msgstr "Gratuito"
#: src/views/members/components/InviteMemberForm.tsx:192 #: src/views/members/components/InviteMemberForm.tsx:193
#: src/views/members/index.tsx:184 #: src/views/members/index.tsx:189
msgid "Free Plan" msgid "Free Plan"
msgstr "Piano gratuito" msgstr "Piano gratuito"
@@ -950,24 +951,24 @@ msgstr "Integrazioni"
msgid "Interviewing" msgid "Interviewing"
msgstr "Colloquio" msgstr "Colloquio"
#: src/views/members/components/InviteMemberForm.tsx:45 #: src/views/members/components/InviteMemberForm.tsx:40
msgid "Invalid email address" msgid "Invalid email address"
msgstr "Indirizzo email non valido" msgstr "Indirizzo email non valido"
#: src/views/members/index.tsx:193 #: src/views/members/index.tsx:201
msgid "Invite" msgid "Invite"
msgstr "Invita" msgstr "Invita"
#: src/views/members/components/InviteMemberForm.tsx:207 #: src/views/members/components/InviteMemberForm.tsx:208
msgid "Invite another" msgid "Invite another"
msgstr "Invita un altro" msgstr "Invita un altro"
#: src/views/card/components/MemberSelector.tsx:112 #: src/views/card/components/MemberSelector.tsx:112
#: src/views/members/components/InviteMemberForm.tsx:231 #: src/views/members/components/InviteMemberForm.tsx:233
msgid "Invite member" msgid "Invite member"
msgstr "Invita membro" msgstr "Invita membro"
#: src/views/members/components/InviteMemberForm.tsx:195 #: src/views/members/components/InviteMemberForm.tsx:196
msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace." msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace."
msgstr "L'invito di membri richiede un Piano Team. Sarai reindirizzato per aggiornare il tuo spazio di lavoro." msgstr "L'invito di membri richiede un Piano Team. Sarai reindirizzato per aggiornare il tuo spazio di lavoro."
@@ -998,10 +999,14 @@ msgstr "Etichette"
msgid "Labels & Filters" msgid "Labels & Filters"
msgstr "Etichette & Filtri" msgstr "Etichette & Filtri"
#: src/views/settings/index.tsx:187 #: src/views/settings/index.tsx:210
msgid "Language" msgid "Language"
msgstr "Lingua" msgstr "Lingua"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:67
msgid "Launch offer"
msgstr "Offerta di lancio"
#: src/views/boards/components/TemplateBoards.tsx:83 #: src/views/boards/components/TemplateBoards.tsx:83
msgid "Learning" msgid "Learning"
msgstr "Apprendimento" msgstr "Apprendimento"
@@ -1067,12 +1072,12 @@ msgstr "Media priorità"
#: src/views/board/components/Filters.tsx:93 #: src/views/board/components/Filters.tsx:93
#: src/views/board/components/NewCardForm.tsx:357 #: src/views/board/components/NewCardForm.tsx:357
#: src/views/card/index.tsx:125 #: src/views/card/index.tsx:125
#: src/views/members/index.tsx:171 #: src/views/members/index.tsx:172
msgid "Members" msgid "Members"
msgstr "Membri" msgstr "Membri"
#. placeholder {0}: workspace.name ?? "Workspace" #. placeholder {0}: workspace.name ?? "Workspace"
#: src/views/members/index.tsx:167 #: src/views/members/index.tsx:168
msgid "Members | {0}" msgid "Members | {0}"
msgstr "Membri | {0}" msgstr "Membri | {0}"
@@ -1080,7 +1085,7 @@ msgstr "Membri | {0}"
msgid "Monthly" msgid "Monthly"
msgstr "Mensile" msgstr "Mensile"
#: src/views/members/components/InviteMemberForm.tsx:92 #: src/views/members/components/InviteMemberForm.tsx:93
msgid "monthly billing" msgid "monthly billing"
msgstr "fatturazione mensile" msgstr "fatturazione mensile"
@@ -1180,11 +1185,11 @@ msgstr "Offerta"
msgid "Onboarding" msgid "Onboarding"
msgstr "Inserimento" msgstr "Inserimento"
#: src/views/settings/index.tsx:312 #: src/views/settings/index.tsx:335
msgid "Once you delete your account, there is no going back. This action cannot be undone." msgid "Once you delete your account, there is no going back. This action cannot be undone."
msgstr "Una volta eliminato il tuo account, non si può tornare indietro. Questa azione non può essere annullata." msgstr "Una volta eliminato il tuo account, non si può tornare indietro. Questa azione non può essere annullata."
#: src/views/settings/index.tsx:275 #: src/views/settings/index.tsx:298
msgid "Once you delete your workspace, there is no going back. This action cannot be undone." msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
msgstr "Una volta eliminata l'area di lavoro, non si può tornare indietro. Questa azione non può essere annullata." msgstr "Una volta eliminata l'area di lavoro, non si può tornare indietro. Questa azione non può essere annullata."
@@ -1220,7 +1225,7 @@ msgstr "Le password non corrispondono"
msgid "Payment frequency" msgid "Payment frequency"
msgstr "Frequenza di pagamento" msgstr "Frequenza di pagamento"
#: src/views/members/index.tsx:128 #: src/views/members/index.tsx:129
msgid "Pending" msgid "Pending"
msgstr "In attesa" msgstr "In attesa"
@@ -1282,8 +1287,8 @@ msgstr "Seleziona un file da caricare."
#: src/views/card/components/NewCommentForm.tsx:31 #: src/views/card/components/NewCommentForm.tsx:31
#: src/views/card/index.tsx:173 #: src/views/card/index.tsx:173
#: src/views/members/components/DeleteMemberConfirmation.tsx:28 #: src/views/members/components/DeleteMemberConfirmation.tsx:28
#: src/views/members/components/InviteMemberForm.tsx:83 #: src/views/members/components/InviteMemberForm.tsx:78
#: src/views/members/components/InviteMemberForm.tsx:133 #: src/views/members/components/InviteMemberForm.tsx:131
#: src/views/settings/components/Avatar.tsx:40 #: src/views/settings/components/Avatar.tsx:40
#: src/views/settings/components/Avatar.tsx:98 #: src/views/settings/components/Avatar.tsx:98
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40 #: src/views/settings/components/DeleteAccountConfirmation.tsx:40
@@ -1292,6 +1297,7 @@ msgstr "Seleziona un file da caricare."
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:62 #: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:62
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:57 #: src/views/settings/components/UpdateWorkspaceNameForm.tsx:57
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:74 #: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:74
#: src/views/settings/components/UpgradeToProConfirmation.tsx:42
msgid "Please try again later, or contact customer support." msgid "Please try again later, or contact customer support."
msgstr "Riprova più tardi o contatta l'assistenza clienti." msgstr "Riprova più tardi o contatta l'assistenza clienti."
@@ -1302,6 +1308,7 @@ msgid "Pricing"
msgstr "Prezzi" msgstr "Prezzi"
#: src/views/home/components/Pricing.tsx:56 #: src/views/home/components/Pricing.tsx:56
#: src/views/settings/components/UpgradeToProConfirmation.tsx:86
msgid "Priority email support" msgid "Priority email support"
msgstr "Supporto email prioritario" msgstr "Supporto email prioritario"
@@ -1313,11 +1320,19 @@ msgstr "Informativa sulla privacy"
msgid "Private" msgid "Private"
msgstr "Privato" msgstr "Privato"
#: src/views/members/index.tsx:186
msgid "Pro Plan"
msgstr "Piano Pro"
#: src/views/members/components/InviteMemberForm.tsx:182
msgid "Pro Plan ∞"
msgstr "Piano Pro ∞"
#: src/views/settings/components/Avatar.tsx:26 #: src/views/settings/components/Avatar.tsx:26
msgid "Profile image updated" msgid "Profile image updated"
msgstr "Immagine del profilo aggiornata" msgstr "Immagine del profilo aggiornata"
#: src/views/settings/index.tsx:146 #: src/views/settings/index.tsx:157
msgid "Profile picture" msgid "Profile picture"
msgstr "Immagine del profilo" msgstr "Immagine del profilo"
@@ -1353,7 +1368,7 @@ msgstr "Remoto"
msgid "Remove" msgid "Remove"
msgstr "Rimuovi" msgstr "Rimuovi"
#: src/views/members/index.tsx:142 #: src/views/members/index.tsx:143
msgid "Remove member" msgid "Remove member"
msgstr "Rimuovi membro" msgstr "Rimuovi membro"
@@ -1409,7 +1424,7 @@ msgstr "Revoca"
msgid "Roadmap" msgid "Roadmap"
msgstr "Roadmap" msgstr "Roadmap"
#: src/views/members/index.tsx:215 #: src/views/members/index.tsx:223
msgid "Role" msgid "Role"
msgstr "Ruolo" msgstr "Ruolo"
@@ -1458,12 +1473,12 @@ msgid "Senior"
msgstr "Senior" msgstr "Senior"
#: src/components/SideNavigation.tsx:78 #: src/components/SideNavigation.tsx:78
#: src/views/settings/index.tsx:140 #: src/views/settings/index.tsx:151
msgid "Settings" msgid "Settings"
msgstr "Impostazioni" msgstr "Impostazioni"
#. placeholder {0}: workspace.name ?? "Workspace" #. placeholder {0}: workspace.name ?? "Workspace"
#: src/views/settings/index.tsx:136 #: src/views/settings/index.tsx:147
msgid "Settings | {0}" msgid "Settings | {0}"
msgstr "Impostazioni | {0}" msgstr "Impostazioni | {0}"
@@ -1514,6 +1529,10 @@ msgstr "Metti una stella su Github"
msgid "Success" msgid "Success"
msgstr "Operazione riuscita" msgstr "Operazione riuscita"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:55
msgid "Supercharge your workspace for just $29/month. Here's what you'll get:"
msgstr "Potenzia la tua area di lavoro per soli $29/mese. Ecco cosa otterrai:"
#: src/components/UserMenu.tsx:180 #: src/components/UserMenu.tsx:180
msgid "Support" msgid "Support"
msgstr "Supporto" msgstr "Supporto"
@@ -1526,8 +1545,8 @@ msgstr "Sostieni lo sviluppo del progetto"
msgid "System" msgid "System"
msgstr "Sistema" msgstr "Sistema"
#: src/views/members/components/InviteMemberForm.tsx:183 #: src/views/members/components/InviteMemberForm.tsx:182
#: src/views/members/index.tsx:184 #: src/views/members/index.tsx:188
msgid "Team Plan" msgid "Team Plan"
msgstr "Piano Team" msgstr "Piano Team"
@@ -1612,7 +1631,7 @@ msgstr "Attiva/disattiva menu"
msgid "Track all card changes with detailed activity history." msgid "Track all card changes with detailed activity history."
msgstr "Tieni traccia di tutte le modifiche alle schede con una cronologia dettagliata delle attività." msgstr "Tieni traccia di tutte le modifiche alle schede con una cronologia dettagliata delle attività."
#: src/views/settings/index.tsx:94 #: src/views/settings/index.tsx:105
msgid "Trello disconnected" msgid "Trello disconnected"
msgstr "Trello disconnesso" msgstr "Trello disconnesso"
@@ -1743,6 +1762,10 @@ msgstr "Commenti illimitati"
msgid "Unlimited lists" msgid "Unlimited lists"
msgstr "Liste illimitate" msgstr "Liste illimitate"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:64
msgid "Unlimited members"
msgstr "Membri illimitati"
#: src/views/board/components/UpdateBoardSlugForm.tsx:174 #: src/views/board/components/UpdateBoardSlugForm.tsx:174
#: src/views/settings/components/UpdateDisplayNameForm.tsx:79 #: src/views/settings/components/UpdateDisplayNameForm.tsx:79
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90 #: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
@@ -1772,11 +1795,16 @@ msgstr "ha aggiornato il titolo"
msgid "updated the title to <0>{0}</0>" msgid "updated the title to <0>{0}</0>"
msgstr "ha aggiornato il titolo in <0>{0}</0>" msgstr "ha aggiornato il titolo in <0>{0}</0>"
#: src/views/settings/components/CustomURLConfirmation.tsx:52 #: src/views/settings/components/UpgradeToProConfirmation.tsx:99
msgid "Upgrade" msgid "Upgrade"
msgstr "Aggiorna" msgstr "Aggiorna"
#: src/views/members/components/InviteMemberForm.tsx:222 #: src/views/settings/components/UpgradeToProConfirmation.tsx:52
#: src/views/settings/index.tsx:202
msgid "Upgrade to Pro"
msgstr "Passa a Pro"
#: src/views/members/components/InviteMemberForm.tsx:224
msgid "Upgrade to Team Plan" msgid "Upgrade to Team Plan"
msgstr "Passa al Piano Team" msgstr "Passa al Piano Team"
@@ -1801,11 +1829,11 @@ msgstr "L'URL deve contenere almeno 3 caratteri"
msgid "Use template" msgid "Use template"
msgstr "Usa template" msgstr "Usa template"
#: src/views/members/index.tsx:209 #: src/views/members/index.tsx:217
msgid "User" msgid "User"
msgstr "Utente" msgstr "Utente"
#: src/views/members/components/InviteMemberForm.tsx:77 #: src/views/members/components/InviteMemberForm.tsx:72
msgid "User is already a member of this workspace" msgid "User is already a member of this workspace"
msgstr "L'utente è già membro di questo spazio di lavoro" msgstr "L'utente è già membro di questo spazio di lavoro"
@@ -1813,11 +1841,11 @@ msgstr "L'utente è già membro di questo spazio di lavoro"
msgid "Video" msgid "Video"
msgstr "Video" msgstr "Video"
#: src/views/settings/index.tsx:262 #: src/views/settings/index.tsx:285
msgid "View and manage your API keys." msgid "View and manage your API keys."
msgstr "Visualizza e gestisci le tue chiavi API." msgstr "Visualizza e gestisci le tue chiavi API."
#: src/views/settings/index.tsx:201 #: src/views/settings/index.tsx:224
msgid "View and manage your billing and subscription." msgid "View and manage your billing and subscription."
msgstr "Visualizza e gestisci la tua fatturazione e abbonamento." msgstr "Visualizza e gestisci la tua fatturazione e abbonamento."
@@ -1877,7 +1905,7 @@ msgstr "Spazio di lavoro"
msgid "Workspace deleted" msgid "Workspace deleted"
msgstr "Spazio di lavoro eliminato" msgstr "Spazio di lavoro eliminato"
#: src/views/settings/index.tsx:177 #: src/views/settings/index.tsx:188
msgid "Workspace description" msgid "Workspace description"
msgstr "Descrizione dello spazio di lavoro" msgstr "Descrizione dello spazio di lavoro"
@@ -1899,7 +1927,7 @@ msgid "Workspace members"
msgstr "Membri del workspace" msgstr "Membri del workspace"
#: src/components/NewWorkspaceForm.tsx:81 #: src/components/NewWorkspaceForm.tsx:81
#: src/views/settings/index.tsx:158 #: src/views/settings/index.tsx:169
msgid "Workspace name" msgid "Workspace name"
msgstr "Nome dello spazio di lavoro" msgstr "Nome dello spazio di lavoro"
@@ -1919,7 +1947,7 @@ msgstr "Nome dello spazio di lavoro aggiornato"
msgid "Workspace slug updated" msgid "Workspace slug updated"
msgstr "Slug dell'area di lavoro aggiornato" msgstr "Slug dell'area di lavoro aggiornato"
#: src/views/settings/index.tsx:167 #: src/views/settings/index.tsx:178
msgid "Workspace URL" msgid "Workspace URL"
msgstr "URL dello spazio di lavoro" msgstr "URL dello spazio di lavoro"
@@ -1935,7 +1963,7 @@ msgstr "Annuale"
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits." msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
msgstr "Sì, offriamo un piano gratuito per sempre per uso individuale. Nessuna restrizione, nessun paywall, nessun limite." msgstr "Sì, offriamo un piano gratuito per sempre per uso individuale. Nessuna restrizione, nessun paywall, nessun limite."
#: src/views/settings/index.tsx:294 #: src/views/settings/index.tsx:317
msgid "You are about to change your password." msgid "You are about to change your password."
msgstr "Stai per cambiare la tua password." msgstr "Stai per cambiare la tua password."
@@ -1959,6 +1987,10 @@ msgstr "Hai effettuato l'accesso con successo."
msgid "You have been signed up successfully." msgid "You have been signed up successfully."
msgstr "Ti sei registrato con successo." msgstr "Ti sei registrato con successo."
#: src/views/members/components/InviteMemberForm.tsx:186
msgid "You have unlimited seats with your Pro Plan. There is no additional charge for new members!"
msgstr "Hai posti illimitati con il tuo Piano Pro. Non ci sono costi aggiuntivi per i nuovi membri!"
#: src/views/settings/components/DeleteAccountConfirmation.tsx:28 #: src/views/settings/components/DeleteAccountConfirmation.tsx:28
msgid "Your account has been deleted." msgid "Your account has been deleted."
msgstr "Il tuo account è stato eliminato." msgstr "Il tuo account è stato eliminato."
@@ -1979,11 +2011,11 @@ msgstr "La tua password è stata modificata."
msgid "Your profile image has been updated." msgid "Your profile image has been updated."
msgstr "La tua immagine del profilo è stata aggiornata." msgstr "La tua immagine del profilo è stata aggiornata."
#: src/views/settings/index.tsx:95 #: src/views/settings/index.tsx:106
msgid "Your Trello account has been disconnected." msgid "Your Trello account has been disconnected."
msgstr "Il tuo account Trello è stato disconnesso." msgstr "Il tuo account Trello è stato disconnesso."
#: src/views/settings/index.tsx:244 #: src/views/settings/index.tsx:267
msgid "Your Trello account is connected." msgid "Your Trello account is connected."
msgstr "Il tuo account Trello è connesso." msgstr "Il tuo account Trello è connesso."

File diff suppressed because one or more lines are too long

View File

@@ -36,12 +36,12 @@ msgstr "{0} labels"
msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({boardCount})}}" msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({boardCount})}}"
msgstr "{boardCount, plural, one {Bord importeren (1)} other {Borden importeren ({boardCount})}}" msgstr "{boardCount, plural, one {Bord importeren (1)} other {Borden importeren ({boardCount})}}"
#: src/views/members/components/InviteMemberForm.tsx:91 #: src/views/members/components/InviteMemberForm.tsx:92
#: src/views/members/components/InviteMemberForm.tsx:106 #: src/views/members/components/InviteMemberForm.tsx:104
msgid "$10/month" msgid "$10/month"
msgstr "$10/maand" msgstr "$10/maand"
#: src/views/members/components/InviteMemberForm.tsx:106 #: src/views/members/components/InviteMemberForm.tsx:104
msgid "$8/month" msgid "$8/month"
msgstr "$8/maand" msgstr "$8/maand"
@@ -97,7 +97,7 @@ msgid "Add label"
msgstr "Label toevoegen" msgstr "Label toevoegen"
#: src/views/card/components/MemberSelector.tsx:130 #: src/views/card/components/MemberSelector.tsx:130
#: src/views/members/components/InviteMemberForm.tsx:149 #: src/views/members/components/InviteMemberForm.tsx:147
msgid "Add member" msgid "Add member"
msgstr "Lid toevoegen" msgstr "Lid toevoegen"
@@ -132,7 +132,7 @@ msgstr "heeft checklistitem <0>{0}</0> toegevoegd"
msgid "added label <0>{0}</0>" msgid "added label <0>{0}</0>"
msgstr "heeft label <0>{0}</0> toegevoegd" msgstr "heeft label <0>{0}</0> toegevoegd"
#: src/views/members/components/InviteMemberForm.tsx:186 #: src/views/members/components/InviteMemberForm.tsx:187
msgid "Adding a new member will cost an additional {price} ({billingType}) per seat." msgid "Adding a new member will cost an additional {price} ({billingType}) per seat."
msgstr "Het toevoegen van een nieuw lid kost een extra {price} ({billingType}) per plaats." msgstr "Het toevoegen van een nieuw lid kost een extra {price} ({billingType}) per plaats."
@@ -148,7 +148,7 @@ msgstr "Alle systemen operationeel"
msgid "Already have an account? <0><1>Sign in</1></0>" msgid "Already have an account? <0><1>Sign in</1></0>"
msgstr "Heb je al een account? <0><1>Log in</1></0>" msgstr "Heb je al een account? <0><1>Log in</1></0>"
#: src/views/settings/index.tsx:102 #: src/views/settings/index.tsx:113
msgid "An error occurred while disconnecting your Trello account." msgid "An error occurred while disconnecting your Trello account."
msgstr "Er is een fout opgetreden bij het verbreken van de verbinding met je Trello-account." msgstr "Er is een fout opgetreden bij het verbreken van de verbinding met je Trello-account."
@@ -156,7 +156,7 @@ msgstr "Er is een fout opgetreden bij het verbreken van de verbinding met je Tre
msgid "An unexpected error occurred. Please try again later." msgid "An unexpected error occurred. Please try again later."
msgstr "Er is een onverwachte fout opgetreden. Probeer het later opnieuw." msgstr "Er is een onverwachte fout opgetreden. Probeer het later opnieuw."
#: src/views/settings/index.tsx:259 #: src/views/settings/index.tsx:282
msgid "API keys" msgid "API keys"
msgstr "API-sleutels" msgstr "API-sleutels"
@@ -218,20 +218,20 @@ msgstr "Backlog"
msgid "Basic Kanban" msgid "Basic Kanban"
msgstr "Basis kanban" msgstr "Basis kanban"
#: src/views/members/components/InviteMemberForm.tsx:107 #: src/views/members/components/InviteMemberForm.tsx:105
msgid "billed annually" msgid "billed annually"
msgstr "jaarlijks gefactureerd" msgstr "jaarlijks gefactureerd"
#: src/views/members/components/InviteMemberForm.tsx:107 #: src/views/members/components/InviteMemberForm.tsx:105
msgid "billed monthly" msgid "billed monthly"
msgstr "maandelijks gefactureerd" msgstr "maandelijks gefactureerd"
#: src/views/boards/components/TemplateBoards.tsx:55 #: src/views/boards/components/TemplateBoards.tsx:55
#: src/views/settings/index.tsx:198 #: src/views/settings/index.tsx:221
msgid "Billing" msgid "Billing"
msgstr "Facturering" msgstr "Facturering"
#: src/views/settings/index.tsx:208 #: src/views/settings/index.tsx:231
msgid "Billing portal" msgid "Billing portal"
msgstr "Factureringsportaal" msgstr "Factureringsportaal"
@@ -243,6 +243,10 @@ msgstr "Blogbericht"
msgid "Board" msgid "Board"
msgstr "Bord" msgstr "Bord"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:80
msgid "Board analytics (coming soon)"
msgstr "Bordanalyses (binnenkort beschikbaar)"
#: src/views/boards/components/NewBoardForm.tsx:21 #: src/views/boards/components/NewBoardForm.tsx:21
msgid "Board name cannot exceed 100 characters" msgid "Board name cannot exceed 100 characters"
msgstr "Bordnaam mag niet langer zijn dan 100 tekens" msgstr "Bordnaam mag niet langer zijn dan 100 tekens"
@@ -309,9 +313,9 @@ msgstr "Bugrapport"
#: src/views/card/components/DeleteCommentConfirmation.tsx:76 #: src/views/card/components/DeleteCommentConfirmation.tsx:76
#: src/views/members/components/DeleteMemberConfirmation.tsx:55 #: src/views/members/components/DeleteMemberConfirmation.tsx:55
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168 #: src/views/settings/components/ChangePasswordConfirmation.tsx:168
#: src/views/settings/components/CustomURLConfirmation.tsx:50
#: src/views/settings/components/DeleteAccountConfirmation.tsx:88 #: src/views/settings/components/DeleteAccountConfirmation.tsx:88
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98
#: src/views/settings/components/UpgradeToProConfirmation.tsx:94
msgid "Cancel" msgid "Cancel"
msgstr "Annuleren" msgstr "Annuleren"
@@ -325,12 +329,12 @@ msgstr "Kaarttitel"
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109 #: src/views/settings/components/ChangePasswordConfirmation.tsx:109
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178 #: src/views/settings/components/ChangePasswordConfirmation.tsx:178
#: src/views/settings/index.tsx:291 #: src/views/settings/index.tsx:314
#: src/views/settings/index.tsx:301 #: src/views/settings/index.tsx:324
msgid "Change Password" msgid "Change Password"
msgstr "Wachtwoord wijzigen" msgstr "Wachtwoord wijzigen"
#: src/views/settings/index.tsx:190 #: src/views/settings/index.tsx:213
msgid "Change the language of the app." msgid "Change the language of the app."
msgstr "Wijzig de taal van de app." msgstr "Wijzig de taal van de app."
@@ -389,16 +393,12 @@ msgstr "heeft een checklistitem voltooid"
msgid "completed checklist item <0>{0}</0>" msgid "completed checklist item <0>{0}</0>"
msgstr "heeft checklistitem <0>{0}</0> voltooid" msgstr "heeft checklistitem <0>{0}</0> voltooid"
#: src/views/settings/components/CustomURLConfirmation.tsx:42
msgid "Confirm URL change"
msgstr "URL-wijziging bevestigen"
#: src/views/settings/components/ChangePasswordConfirmation.tsx:150 #: src/views/settings/components/ChangePasswordConfirmation.tsx:150
msgid "Confirm your new password" msgid "Confirm your new password"
msgstr "Bevestig je nieuwe wachtwoord" msgstr "Bevestig je nieuwe wachtwoord"
#: src/views/boards/components/ImportBoardsForm.tsx:157 #: src/views/boards/components/ImportBoardsForm.tsx:157
#: src/views/settings/index.tsx:235 #: src/views/settings/index.tsx:258
msgid "Connect Trello" msgid "Connect Trello"
msgstr "Verbind Trello" msgstr "Verbind Trello"
@@ -406,7 +406,7 @@ msgstr "Verbind Trello"
msgid "Connect your favorite tools to streamline your workflow." msgid "Connect your favorite tools to streamline your workflow."
msgstr "Verbind je favoriete tools om je werkstroom te stroomlijnen." msgstr "Verbind je favoriete tools om je werkstroom te stroomlijnen."
#: src/views/settings/index.tsx:222 #: src/views/settings/index.tsx:245
msgid "Connect your Trello account to import boards." msgid "Connect your Trello account to import boards."
msgstr "Verbind je Trello-account om borden te importeren." msgstr "Verbind je Trello-account om borden te importeren."
@@ -499,9 +499,9 @@ msgstr "Huidig wachtwoord is vereist"
msgid "Custom domain" msgid "Custom domain"
msgstr "Aangepast domein" msgstr "Aangepast domein"
#: src/views/settings/components/CustomURLConfirmation.tsx:45 #: src/views/settings/components/UpgradeToProConfirmation.tsx:74
msgid "Custom URLs are a premium feature. You'll be directed to upgrade your account." msgid "Custom workspace URL"
msgstr "Aangepaste URL's zijn een premium functie. Je wordt doorgestuurd om je account te upgraden." msgstr "Aangepaste werkruimte-URL"
#: src/views/boards/components/TemplateBoards.tsx:41 #: src/views/boards/components/TemplateBoards.tsx:41
msgid "Customer Support" msgid "Customer Support"
@@ -520,8 +520,8 @@ msgid "Delete"
msgstr "Verwijderen" msgstr "Verwijderen"
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96 #: src/views/settings/components/DeleteAccountConfirmation.tsx:96
#: src/views/settings/index.tsx:309 #: src/views/settings/index.tsx:332
#: src/views/settings/index.tsx:319 #: src/views/settings/index.tsx:342
msgid "Delete account" msgid "Delete account"
msgstr "Account verwijderen" msgstr "Account verwijderen"
@@ -542,8 +542,8 @@ msgid "Delete list"
msgstr "Lijst verwijderen" msgstr "Lijst verwijderen"
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
#: src/views/settings/index.tsx:272 #: src/views/settings/index.tsx:295
#: src/views/settings/index.tsx:283 #: src/views/settings/index.tsx:306
msgid "Delete workspace" msgid "Delete workspace"
msgstr "Werkruimte verwijderen" msgstr "Werkruimte verwijderen"
@@ -569,7 +569,7 @@ msgstr "heeft checklistitem <0>{0}</0> verwijderd"
msgid "Design" msgid "Design"
msgstr "Ontwerp" msgstr "Ontwerp"
#: src/views/settings/index.tsx:250 #: src/views/settings/index.tsx:273
msgid "Disconnect Trello" msgid "Disconnect Trello"
msgstr "Trello ontkoppelen" msgstr "Trello ontkoppelen"
@@ -577,7 +577,7 @@ msgstr "Trello ontkoppelen"
msgid "Discuss and collaborate on cards." msgid "Discuss and collaborate on cards."
msgstr "Bespreek en werk samen aan kaarten." msgstr "Bespreek en werk samen aan kaarten."
#: src/views/settings/index.tsx:151 #: src/views/settings/index.tsx:162
msgid "Display name" msgid "Display name"
msgstr "Weergavenaam" msgstr "Weergavenaam"
@@ -647,7 +647,7 @@ msgstr "Bewerken"
msgid "email" msgid "email"
msgstr "e-mail" msgstr "e-mail"
#: src/views/members/components/InviteMemberForm.tsx:163 #: src/views/members/components/InviteMemberForm.tsx:161
msgid "Email" msgid "Email"
msgstr "E-mail" msgstr "E-mail"
@@ -695,12 +695,12 @@ msgstr "Fout bij het verwijderen van label"
msgid "Error deleting workspace" msgid "Error deleting workspace"
msgstr "Fout bij verwijderen werkruimte" msgstr "Fout bij verwijderen werkruimte"
#: src/views/settings/index.tsx:101 #: src/views/settings/index.tsx:112
msgid "Error disconnecting Trello" msgid "Error disconnecting Trello"
msgstr "Fout bij ontkoppelen van Trello" msgstr "Fout bij ontkoppelen van Trello"
#: src/views/members/components/InviteMemberForm.tsx:76 #: src/views/members/components/InviteMemberForm.tsx:71
#: src/views/members/components/InviteMemberForm.tsx:82 #: src/views/members/components/InviteMemberForm.tsx:77
msgid "Error inviting member" msgid "Error inviting member"
msgstr "Fout bij het uitnodigen van lid" msgstr "Fout bij het uitnodigen van lid"
@@ -724,7 +724,8 @@ msgstr "Fout bij bijwerken naam werkruimte"
msgid "Error updating workspace URL" msgid "Error updating workspace URL"
msgstr "Fout bij het bijwerken van werkruimte-URL" msgstr "Fout bij het bijwerken van werkruimte-URL"
#: src/views/members/components/InviteMemberForm.tsx:132 #: src/views/members/components/InviteMemberForm.tsx:130
#: src/views/settings/components/UpgradeToProConfirmation.tsx:41
msgid "Error upgrading subscription" msgid "Error upgrading subscription"
msgstr "Fout bij het upgraden van abonnement" msgstr "Fout bij het upgraden van abonnement"
@@ -794,8 +795,8 @@ msgstr "Voor duurzaamheid op lange termijn erkennen we dat alle goede open sourc
msgid "Free" msgid "Free"
msgstr "Gratis" msgstr "Gratis"
#: src/views/members/components/InviteMemberForm.tsx:192 #: src/views/members/components/InviteMemberForm.tsx:193
#: src/views/members/index.tsx:184 #: src/views/members/index.tsx:189
msgid "Free Plan" msgid "Free Plan"
msgstr "Gratis plan" msgstr "Gratis plan"
@@ -950,24 +951,24 @@ msgstr "Integraties"
msgid "Interviewing" msgid "Interviewing"
msgstr "Interviewen" msgstr "Interviewen"
#: src/views/members/components/InviteMemberForm.tsx:45 #: src/views/members/components/InviteMemberForm.tsx:40
msgid "Invalid email address" msgid "Invalid email address"
msgstr "Ongeldig e-mailadres" msgstr "Ongeldig e-mailadres"
#: src/views/members/index.tsx:193 #: src/views/members/index.tsx:201
msgid "Invite" msgid "Invite"
msgstr "Uitnodigen" msgstr "Uitnodigen"
#: src/views/members/components/InviteMemberForm.tsx:207 #: src/views/members/components/InviteMemberForm.tsx:208
msgid "Invite another" msgid "Invite another"
msgstr "Nog iemand uitnodigen" msgstr "Nog iemand uitnodigen"
#: src/views/card/components/MemberSelector.tsx:112 #: src/views/card/components/MemberSelector.tsx:112
#: src/views/members/components/InviteMemberForm.tsx:231 #: src/views/members/components/InviteMemberForm.tsx:233
msgid "Invite member" msgid "Invite member"
msgstr "Lid uitnodigen" msgstr "Lid uitnodigen"
#: src/views/members/components/InviteMemberForm.tsx:195 #: src/views/members/components/InviteMemberForm.tsx:196
msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace." msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace."
msgstr "Voor het uitnodigen van leden is een teamplan vereist. Je wordt doorgestuurd om je werkruimte te upgraden." msgstr "Voor het uitnodigen van leden is een teamplan vereist. Je wordt doorgestuurd om je werkruimte te upgraden."
@@ -998,10 +999,14 @@ msgstr "Labels"
msgid "Labels & Filters" msgid "Labels & Filters"
msgstr "Labels & filters" msgstr "Labels & filters"
#: src/views/settings/index.tsx:187 #: src/views/settings/index.tsx:210
msgid "Language" msgid "Language"
msgstr "Taal" msgstr "Taal"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:67
msgid "Launch offer"
msgstr "Introductieaanbieding"
#: src/views/boards/components/TemplateBoards.tsx:83 #: src/views/boards/components/TemplateBoards.tsx:83
msgid "Learning" msgid "Learning"
msgstr "Leren" msgstr "Leren"
@@ -1067,12 +1072,12 @@ msgstr "Gemiddelde prioriteit"
#: src/views/board/components/Filters.tsx:93 #: src/views/board/components/Filters.tsx:93
#: src/views/board/components/NewCardForm.tsx:357 #: src/views/board/components/NewCardForm.tsx:357
#: src/views/card/index.tsx:125 #: src/views/card/index.tsx:125
#: src/views/members/index.tsx:171 #: src/views/members/index.tsx:172
msgid "Members" msgid "Members"
msgstr "Leden" msgstr "Leden"
#. placeholder {0}: workspace.name ?? "Workspace" #. placeholder {0}: workspace.name ?? "Workspace"
#: src/views/members/index.tsx:167 #: src/views/members/index.tsx:168
msgid "Members | {0}" msgid "Members | {0}"
msgstr "Leden | {0}" msgstr "Leden | {0}"
@@ -1080,7 +1085,7 @@ msgstr "Leden | {0}"
msgid "Monthly" msgid "Monthly"
msgstr "Maandelijks" msgstr "Maandelijks"
#: src/views/members/components/InviteMemberForm.tsx:92 #: src/views/members/components/InviteMemberForm.tsx:93
msgid "monthly billing" msgid "monthly billing"
msgstr "maandelijkse facturering" msgstr "maandelijkse facturering"
@@ -1180,11 +1185,11 @@ msgstr "Aanbod"
msgid "Onboarding" msgid "Onboarding"
msgstr "Inwerktraject" msgstr "Inwerktraject"
#: src/views/settings/index.tsx:312 #: src/views/settings/index.tsx:335
msgid "Once you delete your account, there is no going back. This action cannot be undone." msgid "Once you delete your account, there is no going back. This action cannot be undone."
msgstr "Zodra je je account verwijdert, is er geen weg terug. Deze actie kan niet ongedaan worden gemaakt." msgstr "Zodra je je account verwijdert, is er geen weg terug. Deze actie kan niet ongedaan worden gemaakt."
#: src/views/settings/index.tsx:275 #: src/views/settings/index.tsx:298
msgid "Once you delete your workspace, there is no going back. This action cannot be undone." msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
msgstr "Zodra je je werkruimte verwijdert, is er geen weg terug. Deze actie kan niet ongedaan worden gemaakt." msgstr "Zodra je je werkruimte verwijdert, is er geen weg terug. Deze actie kan niet ongedaan worden gemaakt."
@@ -1220,7 +1225,7 @@ msgstr "Wachtwoorden komen niet overeen"
msgid "Payment frequency" msgid "Payment frequency"
msgstr "Betalingsfrequentie" msgstr "Betalingsfrequentie"
#: src/views/members/index.tsx:128 #: src/views/members/index.tsx:129
msgid "Pending" msgid "Pending"
msgstr "In behandeling" msgstr "In behandeling"
@@ -1282,8 +1287,8 @@ msgstr "Selecteer een bestand om te uploaden."
#: src/views/card/components/NewCommentForm.tsx:31 #: src/views/card/components/NewCommentForm.tsx:31
#: src/views/card/index.tsx:173 #: src/views/card/index.tsx:173
#: src/views/members/components/DeleteMemberConfirmation.tsx:28 #: src/views/members/components/DeleteMemberConfirmation.tsx:28
#: src/views/members/components/InviteMemberForm.tsx:83 #: src/views/members/components/InviteMemberForm.tsx:78
#: src/views/members/components/InviteMemberForm.tsx:133 #: src/views/members/components/InviteMemberForm.tsx:131
#: src/views/settings/components/Avatar.tsx:40 #: src/views/settings/components/Avatar.tsx:40
#: src/views/settings/components/Avatar.tsx:98 #: src/views/settings/components/Avatar.tsx:98
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40 #: src/views/settings/components/DeleteAccountConfirmation.tsx:40
@@ -1292,6 +1297,7 @@ msgstr "Selecteer een bestand om te uploaden."
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:62 #: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:62
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:57 #: src/views/settings/components/UpdateWorkspaceNameForm.tsx:57
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:74 #: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:74
#: src/views/settings/components/UpgradeToProConfirmation.tsx:42
msgid "Please try again later, or contact customer support." msgid "Please try again later, or contact customer support."
msgstr "Probeer het later opnieuw of neem contact op met de klantenservice." msgstr "Probeer het later opnieuw of neem contact op met de klantenservice."
@@ -1302,6 +1308,7 @@ msgid "Pricing"
msgstr "Prijzen" msgstr "Prijzen"
#: src/views/home/components/Pricing.tsx:56 #: src/views/home/components/Pricing.tsx:56
#: src/views/settings/components/UpgradeToProConfirmation.tsx:86
msgid "Priority email support" msgid "Priority email support"
msgstr "Prioriteit e-mailondersteuning" msgstr "Prioriteit e-mailondersteuning"
@@ -1313,11 +1320,19 @@ msgstr "Privacybeleid"
msgid "Private" msgid "Private"
msgstr "Privé" msgstr "Privé"
#: src/views/members/index.tsx:186
msgid "Pro Plan"
msgstr "Pro Plan"
#: src/views/members/components/InviteMemberForm.tsx:182
msgid "Pro Plan ∞"
msgstr "Pro Plan ∞"
#: src/views/settings/components/Avatar.tsx:26 #: src/views/settings/components/Avatar.tsx:26
msgid "Profile image updated" msgid "Profile image updated"
msgstr "Profielafbeelding bijgewerkt" msgstr "Profielafbeelding bijgewerkt"
#: src/views/settings/index.tsx:146 #: src/views/settings/index.tsx:157
msgid "Profile picture" msgid "Profile picture"
msgstr "Profielfoto" msgstr "Profielfoto"
@@ -1353,7 +1368,7 @@ msgstr "Op afstand"
msgid "Remove" msgid "Remove"
msgstr "Verwijderen" msgstr "Verwijderen"
#: src/views/members/index.tsx:142 #: src/views/members/index.tsx:143
msgid "Remove member" msgid "Remove member"
msgstr "Lid verwijderen" msgstr "Lid verwijderen"
@@ -1409,7 +1424,7 @@ msgstr "Intrekken"
msgid "Roadmap" msgid "Roadmap"
msgstr "Roadmap" msgstr "Roadmap"
#: src/views/members/index.tsx:215 #: src/views/members/index.tsx:223
msgid "Role" msgid "Role"
msgstr "Rol" msgstr "Rol"
@@ -1458,12 +1473,12 @@ msgid "Senior"
msgstr "Senior" msgstr "Senior"
#: src/components/SideNavigation.tsx:78 #: src/components/SideNavigation.tsx:78
#: src/views/settings/index.tsx:140 #: src/views/settings/index.tsx:151
msgid "Settings" msgid "Settings"
msgstr "Instellingen" msgstr "Instellingen"
#. placeholder {0}: workspace.name ?? "Workspace" #. placeholder {0}: workspace.name ?? "Workspace"
#: src/views/settings/index.tsx:136 #: src/views/settings/index.tsx:147
msgid "Settings | {0}" msgid "Settings | {0}"
msgstr "Instellingen | {0}" msgstr "Instellingen | {0}"
@@ -1514,6 +1529,10 @@ msgstr "Star op Github"
msgid "Success" msgid "Success"
msgstr "Geslaagd" msgstr "Geslaagd"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:55
msgid "Supercharge your workspace for just $29/month. Here's what you'll get:"
msgstr "Geef je werkruimte een boost voor slechts $29/maand. Dit krijg je:"
#: src/components/UserMenu.tsx:180 #: src/components/UserMenu.tsx:180
msgid "Support" msgid "Support"
msgstr "Ondersteuning" msgstr "Ondersteuning"
@@ -1526,8 +1545,8 @@ msgstr "Ondersteun de ontwikkeling van het project"
msgid "System" msgid "System"
msgstr "Systeem" msgstr "Systeem"
#: src/views/members/components/InviteMemberForm.tsx:183 #: src/views/members/components/InviteMemberForm.tsx:182
#: src/views/members/index.tsx:184 #: src/views/members/index.tsx:188
msgid "Team Plan" msgid "Team Plan"
msgstr "Teamplan" msgstr "Teamplan"
@@ -1612,7 +1631,7 @@ msgstr "Menu in-/uitschakelen"
msgid "Track all card changes with detailed activity history." msgid "Track all card changes with detailed activity history."
msgstr "Volg alle kaartwijzigingen met gedetailleerde activiteitengeschiedenis." msgstr "Volg alle kaartwijzigingen met gedetailleerde activiteitengeschiedenis."
#: src/views/settings/index.tsx:94 #: src/views/settings/index.tsx:105
msgid "Trello disconnected" msgid "Trello disconnected"
msgstr "Trello ontkoppeld" msgstr "Trello ontkoppeld"
@@ -1743,6 +1762,10 @@ msgstr "Onbeperkt aantal opmerkingen"
msgid "Unlimited lists" msgid "Unlimited lists"
msgstr "Onbeperkt aantal lijsten" msgstr "Onbeperkt aantal lijsten"
#: src/views/settings/components/UpgradeToProConfirmation.tsx:64
msgid "Unlimited members"
msgstr "Onbeperkt aantal leden"
#: src/views/board/components/UpdateBoardSlugForm.tsx:174 #: src/views/board/components/UpdateBoardSlugForm.tsx:174
#: src/views/settings/components/UpdateDisplayNameForm.tsx:79 #: src/views/settings/components/UpdateDisplayNameForm.tsx:79
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90 #: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
@@ -1772,11 +1795,16 @@ msgstr "titel bijgewerkt"
msgid "updated the title to <0>{0}</0>" msgid "updated the title to <0>{0}</0>"
msgstr "titel bijgewerkt naar <0>{0}</0>" msgstr "titel bijgewerkt naar <0>{0}</0>"
#: src/views/settings/components/CustomURLConfirmation.tsx:52 #: src/views/settings/components/UpgradeToProConfirmation.tsx:99
msgid "Upgrade" msgid "Upgrade"
msgstr "Upgraden" msgstr "Upgraden"
#: src/views/members/components/InviteMemberForm.tsx:222 #: src/views/settings/components/UpgradeToProConfirmation.tsx:52
#: src/views/settings/index.tsx:202
msgid "Upgrade to Pro"
msgstr "Upgraden naar Pro"
#: src/views/members/components/InviteMemberForm.tsx:224
msgid "Upgrade to Team Plan" msgid "Upgrade to Team Plan"
msgstr "Upgraden naar teamplan" msgstr "Upgraden naar teamplan"
@@ -1801,11 +1829,11 @@ msgstr "URL moet minimaal 3 tekens lang zijn"
msgid "Use template" msgid "Use template"
msgstr "Sjabloon gebruiken" msgstr "Sjabloon gebruiken"
#: src/views/members/index.tsx:209 #: src/views/members/index.tsx:217
msgid "User" msgid "User"
msgstr "Gebruiker" msgstr "Gebruiker"
#: src/views/members/components/InviteMemberForm.tsx:77 #: src/views/members/components/InviteMemberForm.tsx:72
msgid "User is already a member of this workspace" msgid "User is already a member of this workspace"
msgstr "Gebruiker is al lid van deze werkruimte" msgstr "Gebruiker is al lid van deze werkruimte"
@@ -1813,11 +1841,11 @@ msgstr "Gebruiker is al lid van deze werkruimte"
msgid "Video" msgid "Video"
msgstr "Video" msgstr "Video"
#: src/views/settings/index.tsx:262 #: src/views/settings/index.tsx:285
msgid "View and manage your API keys." msgid "View and manage your API keys."
msgstr "Bekijk en beheer je API-sleutels." msgstr "Bekijk en beheer je API-sleutels."
#: src/views/settings/index.tsx:201 #: src/views/settings/index.tsx:224
msgid "View and manage your billing and subscription." msgid "View and manage your billing and subscription."
msgstr "Bekijk en beheer je facturering en abonnement." msgstr "Bekijk en beheer je facturering en abonnement."
@@ -1877,7 +1905,7 @@ msgstr "Werkruimte"
msgid "Workspace deleted" msgid "Workspace deleted"
msgstr "Werkruimte verwijderd" msgstr "Werkruimte verwijderd"
#: src/views/settings/index.tsx:177 #: src/views/settings/index.tsx:188
msgid "Workspace description" msgid "Workspace description"
msgstr "Werkruimte beschrijving" msgstr "Werkruimte beschrijving"
@@ -1899,7 +1927,7 @@ msgid "Workspace members"
msgstr "Werkruimteleden" msgstr "Werkruimteleden"
#: src/components/NewWorkspaceForm.tsx:81 #: src/components/NewWorkspaceForm.tsx:81
#: src/views/settings/index.tsx:158 #: src/views/settings/index.tsx:169
msgid "Workspace name" msgid "Workspace name"
msgstr "Naam werkruimte" msgstr "Naam werkruimte"
@@ -1919,7 +1947,7 @@ msgstr "Werkruimtenaam bijgewerkt"
msgid "Workspace slug updated" msgid "Workspace slug updated"
msgstr "Werkruimte-slug bijgewerkt" msgstr "Werkruimte-slug bijgewerkt"
#: src/views/settings/index.tsx:167 #: src/views/settings/index.tsx:178
msgid "Workspace URL" msgid "Workspace URL"
msgstr "Werkruimte URL" msgstr "Werkruimte URL"
@@ -1935,7 +1963,7 @@ msgstr "Jaarlijks"
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits." msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
msgstr "Ja, we bieden een voor altijd gratis plan voor individueel gebruik. Geen beperkingen, geen betaalmuren, geen limieten." msgstr "Ja, we bieden een voor altijd gratis plan voor individueel gebruik. Geen beperkingen, geen betaalmuren, geen limieten."
#: src/views/settings/index.tsx:294 #: src/views/settings/index.tsx:317
msgid "You are about to change your password." msgid "You are about to change your password."
msgstr "Je staat op het punt je wachtwoord te wijzigen." msgstr "Je staat op het punt je wachtwoord te wijzigen."
@@ -1959,6 +1987,10 @@ msgstr "Je bent succesvol ingelogd."
msgid "You have been signed up successfully." msgid "You have been signed up successfully."
msgstr "Je bent succesvol geregistreerd." msgstr "Je bent succesvol geregistreerd."
#: src/views/members/components/InviteMemberForm.tsx:186
msgid "You have unlimited seats with your Pro Plan. There is no additional charge for new members!"
msgstr "Je hebt onbeperkte plaatsen met je Pro Plan. Er zijn geen extra kosten voor nieuwe leden!"
#: src/views/settings/components/DeleteAccountConfirmation.tsx:28 #: src/views/settings/components/DeleteAccountConfirmation.tsx:28
msgid "Your account has been deleted." msgid "Your account has been deleted."
msgstr "Je account is verwijderd." msgstr "Je account is verwijderd."
@@ -1979,11 +2011,11 @@ msgstr "Je wachtwoord is gewijzigd."
msgid "Your profile image has been updated." msgid "Your profile image has been updated."
msgstr "Je profielafbeelding is bijgewerkt." msgstr "Je profielafbeelding is bijgewerkt."
#: src/views/settings/index.tsx:95 #: src/views/settings/index.tsx:106
msgid "Your Trello account has been disconnected." msgid "Your Trello account has been disconnected."
msgstr "Je Trello-account is ontkoppeld." msgstr "Je Trello-account is ontkoppeld."
#: src/views/settings/index.tsx:244 #: src/views/settings/index.tsx:267
msgid "Your Trello account is connected." msgid "Your Trello account is connected."
msgstr "Je Trello-account is verbonden." msgstr "Je Trello-account is verbonden."

File diff suppressed because one or more lines are too long

View File

@@ -3,6 +3,7 @@ import { env } from "next-runtime-env";
import { z } from "zod"; import { z } from "zod";
import { createNextApiContext } from "@kan/api/trpc"; import { createNextApiContext } from "@kan/api/trpc";
import * as subscriptionRepo from "@kan/db/repository/subscription.repo";
import * as workspaceRepo from "@kan/db/repository/workspace.repo"; import * as workspaceRepo from "@kan/db/repository/workspace.repo";
import { createStripeClient } from "@kan/stripe"; import { createStripeClient } from "@kan/stripe";
@@ -40,17 +41,22 @@ export default async function handler(
const body = req.body as CheckoutSessionRequest; const body = req.body as CheckoutSessionRequest;
const { successUrl, cancelUrl, slug, workspacePublicId } = body; const { successUrl, cancelUrl, slug, workspacePublicId } = body;
if (!successUrl || !cancelUrl || !slug || !workspacePublicId) { if (!successUrl || !cancelUrl || !workspacePublicId) {
return res.status(400).json({ error: "Missing required fields" }); return res.status(400).json({ error: "Missing required fields" });
} }
const slugResult = workspaceSlugSchema.safeParse(slug); if (slug) {
const slugResult = workspaceSlugSchema.safeParse(slug);
if (!slugResult.success) { if (!slugResult.success) {
return new Response(JSON.stringify({ error: "Invalid workspace slug" }), { return new Response(
status: 400, JSON.stringify({ error: "Invalid workspace slug" }),
headers: { "Content-Type": "application/json" }, {
}); status: 400,
headers: { "Content-Type": "application/json" },
},
);
}
} }
const workspace = await workspaceRepo.getAllByUserId(db, user.id); const workspace = await workspaceRepo.getAllByUserId(db, user.id);
@@ -66,20 +72,37 @@ export default async function handler(
}); });
} }
const subscription = await subscriptionRepo.create(db, {
plan: "pro",
referenceId: workspacePublicId,
userId: user.id,
stripeCustomerId: user.stripeCustomerId ?? "",
status: "incomplete",
});
const subscriptionId = subscription?.id;
if (!subscriptionId) {
return res.status(500).json({ error: "Error creating subscription" });
}
const session = await stripe.checkout.sessions.create({ const session = await stripe.checkout.sessions.create({
mode: "subscription", mode: "subscription",
line_items: [ line_items: [
{ {
price: process.env.STRIPE_PRO_PLAN_PRICE_ID, price: process.env.STRIPE_PRO_PLAN_MONTHLY_PRICE_ID,
quantity: 1, quantity: 1,
}, },
], ],
success_url: `${env("NEXT_PUBLIC_BASE_URL")}${successUrl}`, success_url: `${env("NEXT_PUBLIC_BASE_URL")}${successUrl}`,
cancel_url: `${env("NEXT_PUBLIC_BASE_URL")}${cancelUrl}`, cancel_url: `${env("NEXT_PUBLIC_BASE_URL")}${cancelUrl}`,
client_reference_id: workspacePublicId,
customer: user.stripeCustomerId ?? undefined, customer: user.stripeCustomerId ?? undefined,
metadata: { metadata: {
workspaceSlug: slug, ...(slug && { workspaceSlug: slug }),
workspacePublicId, workspacePublicId,
userId: user.id,
subscriptionId,
}, },
}); });

View File

@@ -36,7 +36,7 @@ export default async function handler(
const event = stripe.webhooks.constructEvent( const event = stripe.webhooks.constructEvent(
rawBody, rawBody,
sig, sig,
process.env.STRIPE_WEBHOOK_SECRET!, process.env.STRIPE_WEBHOOK_SECRET_LEGACY!,
); );
const { db } = await createNextApiContext(req); const { db } = await createNextApiContext(req);

View File

@@ -7,7 +7,9 @@ import { HiXMark } from "react-icons/hi2";
import { z } from "zod"; import { z } from "zod";
import type { InviteMemberInput } from "@kan/api/types"; import type { InviteMemberInput } from "@kan/api/types";
import type { Subscription } from "@kan/shared/utils";
import { authClient } from "@kan/auth/client"; import { authClient } from "@kan/auth/client";
import { getSubscriptionByPlan } from "@kan/shared/utils";
import Button from "~/components/Button"; import Button from "~/components/Button";
import Input from "~/components/Input"; import Input from "~/components/Input";
@@ -19,20 +21,13 @@ import { api } from "~/utils/api";
export function InviteMemberForm({ export function InviteMemberForm({
numberOfMembers, numberOfMembers,
activeTeamSubscription, subscriptions,
unlimitedSeats,
userId, userId,
}: { }: {
numberOfMembers: number; numberOfMembers: number;
activeTeamSubscription: subscriptions: Subscription[] | undefined;
| { unlimitedSeats: boolean;
id: number | null;
plan: string;
status: string;
seats: number | null;
periodStart: Date | null;
periodEnd: Date | null;
}
| undefined;
userId: string | undefined; userId: string | undefined;
}) { }) {
const utils = api.useUtils(); const utils = api.useUtils();
@@ -87,16 +82,19 @@ export function InviteMemberForm({
}, },
}); });
const teamSubscription = getSubscriptionByPlan(subscriptions, "team");
const proSubscription = getSubscriptionByPlan(subscriptions, "pro");
const hasTeamSubscription = !!teamSubscription;
const hasProSubscription = !!proSubscription;
let isYearly = false; let isYearly = false;
let price = t`$10/month`; let price = t`$10/month`;
let billingType = t`monthly billing`; let billingType = t`monthly billing`;
if ( if (teamSubscription?.periodStart && teamSubscription?.periodEnd) {
activeTeamSubscription?.periodStart && const periodStartDate = new Date(teamSubscription.periodStart);
activeTeamSubscription?.periodEnd const periodEndDate = new Date(teamSubscription.periodEnd);
) {
const periodStartDate = new Date(activeTeamSubscription.periodStart);
const periodEndDate = new Date(activeTeamSubscription.periodEnd);
const diffInDays = Math.round( const diffInDays = Math.round(
(periodEndDate.getTime() - periodStartDate.getTime()) / (periodEndDate.getTime() - periodStartDate.getTime()) /
(1000 * 60 * 60 * 24), (1000 * 60 * 60 * 24),
@@ -163,7 +161,8 @@ export function InviteMemberForm({
placeholder={t`Email`} placeholder={t`Email`}
disabled={ disabled={
env("NEXT_PUBLIC_KAN_ENV") === "cloud" && env("NEXT_PUBLIC_KAN_ENV") === "cloud" &&
!activeTeamSubscription?.id !hasTeamSubscription &&
!hasProSubscription
} }
{...register("email", { required: true })} {...register("email", { required: true })}
onKeyDown={async (e) => { onKeyDown={async (e) => {
@@ -177,13 +176,15 @@ export function InviteMemberForm({
{env("NEXT_PUBLIC_KAN_ENV") === "cloud" && ( {env("NEXT_PUBLIC_KAN_ENV") === "cloud" && (
<div className="mt-3 rounded-md bg-light-100 p-3 text-xs text-light-900 dark:bg-dark-200 dark:text-dark-900"> <div className="mt-3 rounded-md bg-light-100 p-3 text-xs text-light-900 dark:bg-dark-200 dark:text-dark-900">
{activeTeamSubscription?.id ? ( {hasTeamSubscription || hasProSubscription ? (
<div> <div>
<span className="font-medium text-emerald-500 dark:text-emerald-400"> <span className="font-medium text-emerald-500 dark:text-emerald-400">
{t`Team Plan`} {hasTeamSubscription ? t`Team Plan` : t`Pro Plan ∞`}
</span> </span>
<p className="mt-1"> <p className="mt-1">
{t`Adding a new member will cost an additional ${price} (${billingType}) per seat.`} {unlimitedSeats
? t`You have unlimited seats with your Pro Plan. There is no additional charge for new members!`
: t`Adding a new member will cost an additional ${price} (${billingType}) per seat.`}
</p> </p>
</div> </div>
) : ( ) : (
@@ -201,7 +202,7 @@ export function InviteMemberForm({
</div> </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"> <div className="mt-12 flex items-center justify-end border-t border-light-600 px-5 pb-5 pt-5 dark:border-dark-600">
{activeTeamSubscription?.id && {(hasTeamSubscription || hasProSubscription) &&
env("NEXT_PUBLIC_KAN_ENV") === "cloud" && ( env("NEXT_PUBLIC_KAN_ENV") === "cloud" && (
<Toggle <Toggle
label={t`Invite another`} label={t`Invite another`}
@@ -213,7 +214,8 @@ export function InviteMemberForm({
)} )}
<div> <div>
{env("NEXT_PUBLIC_KAN_ENV") === "cloud" && {env("NEXT_PUBLIC_KAN_ENV") === "cloud" &&
!activeTeamSubscription?.id ? ( !hasTeamSubscription &&
!hasProSubscription ? (
<Button <Button
type="button" type="button"
onClick={handleUpgrade} onClick={handleUpgrade}

View File

@@ -1,8 +1,11 @@
import { t } from "@lingui/core/macro"; import { t } from "@lingui/core/macro";
import { env } from "next-runtime-env";
import { HiEllipsisHorizontal, HiOutlinePlusSmall } from "react-icons/hi2"; import { HiEllipsisHorizontal, HiOutlinePlusSmall } from "react-icons/hi2";
import { twMerge } from "tailwind-merge"; import { twMerge } from "tailwind-merge";
import type { Subscription } from "@kan/shared/utils";
import { authClient } from "@kan/auth/client"; import { authClient } from "@kan/auth/client";
import { getSubscriptionByPlan, hasUnlimitedSeats } from "@kan/shared/utils";
import Avatar from "~/components/Avatar"; import Avatar from "~/components/Avatar";
import Button from "~/components/Button"; import Button from "~/components/Button";
@@ -11,7 +14,6 @@ import FeedbackModal from "~/components/FeedbackModal";
import Modal from "~/components/modal"; import Modal from "~/components/modal";
import { NewWorkspaceForm } from "~/components/NewWorkspaceForm"; import { NewWorkspaceForm } from "~/components/NewWorkspaceForm";
import { PageHead } from "~/components/PageHead"; import { PageHead } from "~/components/PageHead";
import { env } from "~/env";
import { useModal } from "~/providers/modal"; import { useModal } from "~/providers/modal";
import { useWorkspace } from "~/providers/workspace"; import { useWorkspace } from "~/providers/workspace";
import { api } from "~/utils/api"; import { api } from "~/utils/api";
@@ -30,13 +32,12 @@ export default function MembersPage() {
const { data: session } = authClient.useSession(); const { data: session } = authClient.useSession();
const subscription = data?.subscriptions; const subscriptions = data?.subscriptions as Subscription[] | undefined;
const activeTeamSubscription = subscription?.find( const teamSubscription = getSubscriptionByPlan(subscriptions, "team");
(sub: any) => const proSubscription = getSubscriptionByPlan(subscriptions, "pro");
sub.status === "active" ||
(sub.status === "trialing" && sub.plan === "team"), const unlimitedSeats = hasUnlimitedSeats(subscriptions);
);
const TableRow = ({ const TableRow = ({
memberPublicId, memberPublicId,
@@ -171,17 +172,24 @@ export default function MembersPage() {
{t`Members`} {t`Members`}
</h1> </h1>
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">
{env.NEXT_PUBLIC_KAN_ENV === "cloud" && ( {env("NEXT_PUBLIC_KAN_ENV") === "cloud" && (
<div <div
className={twMerge( className={twMerge(
"flex items-center rounded-full border px-3 py-1 text-center text-xs", "flex items-center rounded-full border px-3 py-1 text-center text-xs",
activeTeamSubscription teamSubscription || proSubscription
? "border-emerald-300 bg-emerald-50 text-emerald-400 dark:border-emerald-700 dark:bg-emerald-950 dark:text-emerald-400" ? "border-emerald-300 bg-emerald-50 text-emerald-400 dark:border-emerald-700 dark:bg-emerald-950 dark:text-emerald-400"
: "border-light-300 bg-light-50 text-light-1000 dark:border-dark-300 dark:bg-dark-50 dark:text-dark-900", : "border-light-300 bg-light-50 text-light-1000 dark:border-dark-300 dark:bg-dark-50 dark:text-dark-900",
)} )}
> >
<span className="font-medium"> <span className="font-medium">
{activeTeamSubscription ? t`Team Plan` : t`Free Plan`} {proSubscription
? t`Pro Plan`
: teamSubscription
? t`Team Plan`
: t`Free Plan`}
{proSubscription && unlimitedSeats && (
<span className="ml-1 text-xs"></span>
)}
</span> </span>
</div> </div>
)} )}
@@ -268,7 +276,8 @@ export default function MembersPage() {
<InviteMemberForm <InviteMemberForm
userId={session?.user.id} userId={session?.user.id}
numberOfMembers={data?.members.length ?? 1} numberOfMembers={data?.members.length ?? 1}
activeTeamSubscription={activeTeamSubscription} subscriptions={subscriptions}
unlimitedSeats={unlimitedSeats}
/> />
</Modal> </Modal>

View File

@@ -1,56 +0,0 @@
import { t } from "@lingui/core/macro";
import Button from "~/components/Button";
import { useModal } from "~/providers/modal";
export function CustomURLConfirmation({
workspacePublicId,
}: {
workspacePublicId: string;
}) {
const { closeModal, entityId } = useModal();
const handleUpgrade = async () => {
try {
const response = await fetch("/api/stripe/create_checkout_session", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
slug: entityId,
workspacePublicId: workspacePublicId,
cancelUrl: "/settings",
successUrl: "/settings",
}),
});
const { url } = (await response.json()) as { url: string };
if (url) {
window.location.href = url;
}
} catch (error) {
console.error("Error creating checkout session:", error);
}
};
return (
<div className="p-5">
<div className="flex w-full flex-col justify-between pb-4">
<h2 className="text-md pb-4 font-medium text-neutral-900 dark:text-dark-1000">
{t`Confirm URL change`}
</h2>
<p className="text-sm font-medium text-light-900 dark:text-dark-900">
{t`Custom URLs are a premium feature. You'll be directed to upgrade your account.`}
</p>
</div>
<div className="mt-5 flex justify-end space-x-2 sm:mt-6">
<Button onClick={() => closeModal()} variant="secondary">
{t`Cancel`}
</Button>
<Button onClick={handleUpgrade}>{t`Upgrade`}</Button>
</div>
</div>
);
}

View File

@@ -98,7 +98,7 @@ const UpdateWorkspaceUrlForm = ({
if (!isWorkspaceSlugAvailable?.isAvailable) return; if (!isWorkspaceSlugAvailable?.isAvailable) return;
if (workspacePlan !== "pro" && env("NEXT_PUBLIC_KAN_ENV") === "cloud") if (workspacePlan !== "pro" && env("NEXT_PUBLIC_KAN_ENV") === "cloud")
return openModal("UPDATE_WORKSPACE_URL", data.slug); return openModal("UPGRADE_TO_PRO", data.slug);
updateWorkspaceSlug.mutate({ updateWorkspaceSlug.mutate({
workspacePublicId, workspacePublicId,

View File

@@ -0,0 +1,103 @@
import { t } from "@lingui/core/macro";
import { HiBolt, HiCheckBadge } from "react-icons/hi2";
import Button from "~/components/Button";
import { useModal } from "~/providers/modal";
import { usePopup } from "~/providers/popup";
export function UpgradeToProConfirmation({
workspacePublicId,
}: {
userId: string;
workspacePublicId: string;
}) {
const { closeModal, entityId } = useModal();
const { showPopup } = usePopup();
const handleUpgrade = async () => {
try {
const response = await fetch("/api/stripe/create_checkout_session", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
...(entityId && { workspaceSlug: entityId }),
workspacePublicId: workspacePublicId,
cancelUrl: "/settings",
successUrl: "/settings",
}),
});
const { url } = (await response.json()) as { url: string };
if (url) {
window.location.href = url;
}
} catch (error) {
console.error("Error creating checkout session:", error);
showPopup({
header: t`Error upgrading subscription`,
message: t`Please try again later, or contact customer support.`,
icon: "error",
});
}
};
return (
<div className="p-5">
<div className="flex w-full flex-col justify-between pb-4">
<h2 className="text-md pb-4 font-bold text-neutral-900 dark:text-dark-1000">
{t`Upgrade to Pro`}
</h2>
<p className="mb-4 text-sm font-medium text-light-900 dark:text-dark-900">
{t`Supercharge your workspace for just $29/month. Here's what you'll get:`}
</p>
<div className="rounded-md bg-light-100 p-3 text-xs text-light-900 dark:bg-dark-200 dark:text-dark-900">
<div className="space-y-3">
<div className="flex items-center space-x-3">
<HiCheckBadge className="h-5 w-5 flex-shrink-0 text-light-1000 dark:text-dark-950" />
<div className="flex items-center space-x-2">
<span className="text-sm text-neutral-900 dark:text-dark-1000">
{t`Unlimited members`}
</span>
<span className="inline-flex items-center rounded-full bg-emerald-500/10 px-2 py-0.5 text-[10px] font-medium text-emerald-600 ring-1 ring-inset ring-emerald-500/20 dark:text-emerald-400 sm:text-[10px]">
{t`Launch offer`}
</span>
</div>
</div>
<div className="flex items-center space-x-3">
<HiCheckBadge className="h-5 w-5 flex-shrink-0 text-light-1000 dark:text-dark-950" />
<span className="text-sm text-neutral-900 dark:text-dark-1000">
{t`Custom workspace URL`}
</span>
</div>
<div className="flex items-center space-x-3">
<HiCheckBadge className="h-5 w-5 flex-shrink-0 text-light-1000 dark:text-dark-950" />
<span className="text-sm text-neutral-900 dark:text-dark-1000">
{t`Board analytics (coming soon)`}
</span>
</div>
<div className="flex items-center space-x-3">
<HiCheckBadge className="h-5 w-5 flex-shrink-0 text-light-1000 dark:text-dark-950" />
<span className="text-sm text-neutral-900 dark:text-dark-1000">
{t`Priority email support`}
</span>
</div>
</div>
</div>
</div>
<div className="mt-5 flex justify-end space-x-2 sm:mt-6">
<Button onClick={() => closeModal()} variant="secondary">
{t`Cancel`}
</Button>
<Button
onClick={handleUpgrade}
iconRight={<HiBolt />}
>{t`Upgrade`}</Button>
</div>
</div>
);
}

View File

@@ -2,7 +2,10 @@ import { useRouter } from "next/router";
import { t } from "@lingui/core/macro"; import { t } from "@lingui/core/macro";
import { env } from "next-runtime-env"; import { env } from "next-runtime-env";
import { useEffect, useRef } from "react"; import { useEffect, useRef } from "react";
import { HiMiniArrowTopRightOnSquare } from "react-icons/hi2"; import { HiBolt, HiMiniArrowTopRightOnSquare } from "react-icons/hi2";
import type { Subscription } from "@kan/shared/utils";
import { hasActiveSubscription } from "@kan/shared/utils";
import Button from "~/components/Button"; import Button from "~/components/Button";
import FeedbackModal from "~/components/FeedbackModal"; import FeedbackModal from "~/components/FeedbackModal";
@@ -17,13 +20,13 @@ import { api } from "~/utils/api";
import Avatar from "./components/Avatar"; import Avatar from "./components/Avatar";
import { ChangePasswordFormConfirmation } from "./components/ChangePasswordConfirmation"; import { ChangePasswordFormConfirmation } from "./components/ChangePasswordConfirmation";
import CreateAPIKeyForm from "./components/CreateAPIKeyForm"; import CreateAPIKeyForm from "./components/CreateAPIKeyForm";
import { CustomURLConfirmation } from "./components/CustomURLConfirmation";
import { DeleteAccountConfirmation } from "./components/DeleteAccountConfirmation"; import { DeleteAccountConfirmation } from "./components/DeleteAccountConfirmation";
import { DeleteWorkspaceConfirmation } from "./components/DeleteWorkspaceConfirmation"; import { DeleteWorkspaceConfirmation } from "./components/DeleteWorkspaceConfirmation";
import UpdateDisplayNameForm from "./components/UpdateDisplayNameForm"; import UpdateDisplayNameForm from "./components/UpdateDisplayNameForm";
import UpdateWorkspaceDescriptionForm from "./components/UpdateWorkspaceDescriptionForm"; import UpdateWorkspaceDescriptionForm from "./components/UpdateWorkspaceDescriptionForm";
import UpdateWorkspaceNameForm from "./components/UpdateWorkspaceNameForm"; import UpdateWorkspaceNameForm from "./components/UpdateWorkspaceNameForm";
import UpdateWorkspaceUrlForm from "./components/UpdateWorkspaceUrlForm"; import UpdateWorkspaceUrlForm from "./components/UpdateWorkspaceUrlForm";
import { UpgradeToProConfirmation } from "./components/UpgradeToProConfirmation";
export default function SettingsPage() { export default function SettingsPage() {
const { modalContentType, openModal, isOpen } = useModal(); const { modalContentType, openModal, isOpen } = useModal();
@@ -37,6 +40,14 @@ export default function SettingsPage() {
env("NEXT_PUBLIC_ALLOW_CREDENTIALS")?.toLowerCase() === "true"; env("NEXT_PUBLIC_ALLOW_CREDENTIALS")?.toLowerCase() === "true";
const { data } = api.user.getUser.useQuery(); const { data } = api.user.getUser.useQuery();
const { data: workspaceData } = api.workspace.byId.useQuery({
workspacePublicId: workspace.publicId,
});
const subscriptions = workspaceData?.subscriptions as
| Subscription[]
| undefined;
const { const {
data: integrations, data: integrations,
refetch: refetchIntegrations, refetch: refetchIntegrations,
@@ -180,6 +191,18 @@ export default function SettingsPage() {
workspacePublicId={workspace.publicId} workspacePublicId={workspace.publicId}
workspaceDescription={workspace.description ?? ""} workspaceDescription={workspace.description ?? ""}
/> />
{env("NEXT_PUBLIC_KAN_ENV") === "cloud" &&
!hasActiveSubscription(subscriptions, "pro") && (
<div className="mt-8">
<Button
onClick={() => openModal("UPGRADE_TO_PRO")}
iconRight={<HiBolt />}
>
{t`Upgrade to Pro`}
</Button>
</div>
)}
</div> </div>
<div className="mb-8 border-t border-light-300 dark:border-dark-300"> <div className="mb-8 border-t border-light-300 dark:border-dark-300">
@@ -346,9 +369,12 @@ export default function SettingsPage() {
<Modal <Modal
modalSize="sm" modalSize="sm"
isVisible={isOpen && modalContentType === "UPDATE_WORKSPACE_URL"} isVisible={isOpen && modalContentType === "UPGRADE_TO_PRO"}
> >
<CustomURLConfirmation workspacePublicId={workspace.publicId} /> <UpgradeToProConfirmation
userId={data?.id ?? ""}
workspacePublicId={workspace.publicId}
/>
</Modal> </Modal>
<Modal <Modal

View File

@@ -22,6 +22,11 @@ services:
# Stripe # Stripe
- STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY} - STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY}
- STRIPE_WEBHOOK_SECRET=${STRIPE_WEBHOOK_SECRET} - STRIPE_WEBHOOK_SECRET=${STRIPE_WEBHOOK_SECRET}
- STRIPE_WEBHOOK_SECRET_LEGACY=${STRIPE_WEBHOOK_SECRET_LEGACY}
- STRIPE_TEAM_PLAN_MONTHLY_PRICE_ID=${STRIPE_TEAM_PLAN_MONTHLY_PRICE_ID}
- STRIPE_TEAM_PLAN_YEARLY_PRICE_ID=${STRIPE_TEAM_PLAN_YEARLY_PRICE_ID}
- STRIPE_PRO_PLAN_MONTHLY_PRICE_ID=${STRIPE_PRO_PLAN_MONTHLY_PRICE_ID}
- STRIPE_PRO_PLAN_YEARLY_PRICE_ID=${STRIPE_PRO_PLAN_YEARLY_PRICE_ID}
# Email # Email
- SMTP_HOST=${SMTP_HOST} - SMTP_HOST=${SMTP_HOST}

View File

@@ -2,8 +2,10 @@ import { TRPCError } from "@trpc/server";
import { z } from "zod"; import { z } from "zod";
import * as memberRepo from "@kan/db/repository/member.repo"; import * as memberRepo from "@kan/db/repository/member.repo";
import * as subscriptionRepo from "@kan/db/repository/subscription.repo";
import * as userRepo from "@kan/db/repository/user.repo"; import * as userRepo from "@kan/db/repository/user.repo";
import * as workspaceRepo from "@kan/db/repository/workspace.repo"; import * as workspaceRepo from "@kan/db/repository/workspace.repo";
import { getSubscriptionByPlan, hasUnlimitedSeats } from "@kan/shared/utils";
import { updateSubscriptionSeats } from "@kan/stripe"; import { updateSubscriptionSeats } from "@kan/stripe";
import { createTRPCRouter, protectedProcedure } from "../trpc"; import { createTRPCRouter, protectedProcedure } from "../trpc";
@@ -62,29 +64,34 @@ export const memberRouter = createTRPCRouter({
} }
if (process.env.NEXT_PUBLIC_KAN_ENV === "cloud") { if (process.env.NEXT_PUBLIC_KAN_ENV === "cloud") {
const subscriptions = await ctx.auth.api.listActiveSubscriptions({ const subscriptions = await subscriptionRepo.getByReferenceId(
workspacePublicId: workspace.publicId, ctx.db,
}); workspace.publicId,
// get the active subscription
const activeSubscription = subscriptions.find(
(sub) =>
sub.status === "active" ||
(sub.status === "trialing" && sub.plan === "team"),
); );
if (!activeSubscription) { // get the active subscriptions
const activeTeamSubscription = getSubscriptionByPlan(
subscriptions,
"team",
);
const activeProSubscription = getSubscriptionByPlan(
subscriptions,
"pro",
);
const unlimitedSeats = hasUnlimitedSeats(subscriptions);
if (!activeTeamSubscription && !activeProSubscription) {
throw new TRPCError({ throw new TRPCError({
message: `Workspace with public ID ${workspace.publicId} does not have an active subscription`, message: `Workspace with public ID ${workspace.publicId} does not have an active subscription`,
code: "NOT_FOUND", code: "NOT_FOUND",
}); });
} }
// Update the Stripe subscription to add a seat with immediate proration // Update the Stripe subscription
if (activeSubscription.stripeSubscriptionId) { if (activeTeamSubscription?.stripeSubscriptionId && !unlimitedSeats) {
try { try {
await updateSubscriptionSeats( await updateSubscriptionSeats(
activeSubscription.stripeSubscriptionId, activeTeamSubscription.stripeSubscriptionId,
1, 1,
); );
} catch (error) { } catch (error) {
@@ -204,22 +211,23 @@ export const memberRouter = createTRPCRouter({
// Handle subscription seat decrement for cloud environment // Handle subscription seat decrement for cloud environment
if (process.env.NEXT_PUBLIC_KAN_ENV === "cloud") { if (process.env.NEXT_PUBLIC_KAN_ENV === "cloud") {
const subscriptions = await ctx.auth.api.listActiveSubscriptions({ const subscriptions = await subscriptionRepo.getByReferenceId(
workspacePublicId: workspace.publicId, ctx.db,
}); workspace.publicId,
// get the active subscription
const activeSubscription = subscriptions.find(
(sub) =>
sub.status === "active" ||
(sub.status === "trialing" && sub.plan === "team"),
); );
// get the active subscriptions
const activeTeamSubscription = getSubscriptionByPlan(
subscriptions,
"team",
);
const unlimitedSeats = hasUnlimitedSeats(subscriptions);
// Only decrease seats if there's an active subscription and stripeSubscriptionId // Only decrease seats if there's an active subscription and stripeSubscriptionId
if (activeSubscription?.stripeSubscriptionId) { if (activeTeamSubscription?.stripeSubscriptionId && !unlimitedSeats) {
try { try {
await updateSubscriptionSeats( await updateSubscriptionSeats(
activeSubscription.stripeSubscriptionId, activeTeamSubscription.stripeSubscriptionId,
-1, -1,
); );
} catch (error) { } catch (error) {

View File

@@ -10,6 +10,7 @@ import { env } from "next-runtime-env";
import type { dbClient } from "@kan/db/client"; import type { dbClient } from "@kan/db/client";
import * as memberRepo from "@kan/db/repository/member.repo"; import * as memberRepo from "@kan/db/repository/member.repo";
import * as subscriptionRepo from "@kan/db/repository/subscription.repo";
import * as userRepo from "@kan/db/repository/user.repo"; import * as userRepo from "@kan/db/repository/user.repo";
import * as workspaceRepo from "@kan/db/repository/workspace.repo"; import * as workspaceRepo from "@kan/db/repository/workspace.repo";
import * as schema from "@kan/db/schema"; import * as schema from "@kan/db/schema";
@@ -114,13 +115,13 @@ async function downloadImage(url: string): Promise<Buffer> {
export const initAuth = (db: dbClient) => { export const initAuth = (db: dbClient) => {
return betterAuth({ return betterAuth({
secret: process.env.BETTER_AUTH_SECRET!, secret: process.env.BETTER_AUTH_SECRET!,
baseURL: process.env.NEXT_PUBLIC_BASE_URL!, baseURL: env("NEXT_PUBLIC_BASE_URL"),
trustedOrigins: process.env.BETTER_AUTH_TRUSTED_ORIGINS trustedOrigins: process.env.BETTER_AUTH_TRUSTED_ORIGINS
? [ ? [
process.env.NEXT_PUBLIC_BASE_URL!, env("NEXT_PUBLIC_BASE_URL") ?? "",
...process.env.BETTER_AUTH_TRUSTED_ORIGINS.split(","), ...process.env.BETTER_AUTH_TRUSTED_ORIGINS.split(","),
] ]
: [process.env.NEXT_PUBLIC_BASE_URL!], : [env("NEXT_PUBLIC_BASE_URL") ?? ""],
database: drizzleAdapter(db, { database: drizzleAdapter(db, {
provider: "pg", provider: "pg",
schema: { schema: {
@@ -196,6 +197,31 @@ export const initAuth = (db: dbClient) => {
return isUserInWorkspace; return isUserInWorkspace;
}, },
getCheckoutSessionParams: () => {
return {
params: {
allow_promotion_codes: true,
},
};
},
onSubscriptionComplete: async ({
subscription,
stripeSubscription,
}) => {
// Set unlimited seats to true for pro plans
if (subscription.plan === "pro") {
await subscriptionRepo.updateByStripeSubscriptionId(
db,
stripeSubscription.id,
{
unlimitedSeats: true,
},
);
console.log(
`Pro subscription ${stripeSubscription.id} activated with unlimited seats`,
);
}
},
}, },
}), }),
] ]
@@ -317,37 +343,17 @@ export const initAuth = (db: dbClient) => {
}, },
hooks: { hooks: {
after: createAuthMiddleware(async (ctx) => { after: createAuthMiddleware(async (ctx) => {
if (ctx.path.startsWith("/get-session")) { if (
const user = ctx.context.session?.user;
if (
env("NEXT_PUBLIC_KAN_ENV") === "cloud" &&
user &&
!user.stripeCustomerId
) {
const stripe = createStripeClient();
const stripeCustomer = await stripe.customers.create({
email: user.email,
metadata: {
userId: user.id,
},
});
await userRepo.update(db, user.id, {
stripeCustomerId: stripeCustomer.id,
});
}
} else if (
ctx.path === "/magic-link/verify" && ctx.path === "/magic-link/verify" &&
(ctx.query?.callbackURL as string | undefined)?.includes( (ctx.query?.callbackURL as string | undefined)?.includes(
"type=invite", "type=invite",
) && )
ctx.query?.memberPublicId
) { ) {
const userId = ctx.context.newSession?.session.userId; const userId = ctx.context.newSession?.session.userId;
const memberPublicId = ctx.query.memberPublicId as string; const callbackURL = ctx.query?.callbackURL as string | undefined;
const memberPublicId = callbackURL?.split("memberPublicId=")[1];
if (userId) { if (userId && memberPublicId) {
const member = await memberRepo.getByPublicId(db, memberPublicId); const member = await memberRepo.getByPublicId(db, memberPublicId);
if (member?.id) { if (member?.id) {

View File

@@ -0,0 +1 @@
ALTER TABLE "subscription" ADD COLUMN "unlimitedSeats" boolean DEFAULT false NOT NULL;

File diff suppressed because it is too large Load Diff

View File

@@ -71,6 +71,13 @@
"when": 1756803246096, "when": 1756803246096,
"tag": "20250902085406_AddSubscriptions", "tag": "20250902085406_AddSubscriptions",
"breakpoints": true "breakpoints": true
},
{
"idx": 10,
"version": "7",
"when": 1757271312974,
"tag": "20250907185512_AddUnlimitedSeatsToSubscription",
"breakpoints": true
} }
] ]
} }

View File

@@ -0,0 +1,91 @@
import { eq } from "drizzle-orm";
import type { dbClient } from "@kan/db/client";
import { subscription } from "@kan/db/schema";
export const updateById = async (
db: dbClient,
subscriptionId: number,
updates: {
unlimitedSeats?: boolean;
status?: string;
seats?: number | null;
periodStart?: Date | null;
periodEnd?: Date | null;
cancelAtPeriodEnd?: boolean | null;
},
) => {
const [result] = await db
.update(subscription)
.set({
...updates,
updatedAt: new Date(),
})
.where(eq(subscription.id, subscriptionId))
.returning({
id: subscription.id,
plan: subscription.plan,
status: subscription.status,
unlimitedSeats: subscription.unlimitedSeats,
});
return result;
};
export const updateByStripeSubscriptionId = async (
db: dbClient,
stripeSubscriptionId: string,
updates: {
unlimitedSeats?: boolean;
status?: string;
seats?: number | null;
periodStart?: Date | null;
periodEnd?: Date | null;
cancelAtPeriodEnd?: boolean | null;
},
) => {
const [result] = await db
.update(subscription)
.set({
...updates,
updatedAt: new Date(),
})
.where(eq(subscription.stripeSubscriptionId, stripeSubscriptionId))
.returning({
id: subscription.id,
plan: subscription.plan,
status: subscription.status,
unlimitedSeats: subscription.unlimitedSeats,
});
return result;
};
export const getByStripeSubscriptionId = async (
db: dbClient,
stripeSubscriptionId: string,
) => {
return await db.query.subscription.findFirst({
where: eq(subscription.stripeSubscriptionId, stripeSubscriptionId),
});
};
export const getByReferenceId = async (db: dbClient, referenceId: string) => {
return await db.query.subscription.findMany({
where: eq(subscription.referenceId, referenceId),
});
};
export const create = async (
db: dbClient,
data: {
plan: string;
referenceId: string;
userId: string;
stripeCustomerId: string;
status: string;
},
) => {
const [result] = await db.insert(subscription).values(data).returning();
return result;
};

View File

@@ -127,6 +127,7 @@ export const getByPublicIdWithMembers = (
plan: true, plan: true,
status: true, status: true,
seats: true, seats: true,
unlimitedSeats: true,
periodStart: true, periodStart: true,
periodEnd: true, periodEnd: true,
}, },

View File

@@ -23,6 +23,7 @@ export const subscription = pgTable("subscription", {
periodEnd: timestamp("periodEnd"), periodEnd: timestamp("periodEnd"),
cancelAtPeriodEnd: boolean("cancelAtPeriodEnd"), cancelAtPeriodEnd: boolean("cancelAtPeriodEnd"),
seats: integer("seats"), seats: integer("seats"),
unlimitedSeats: boolean("unlimitedSeats").default(false).notNull(),
trialStart: timestamp("trialStart"), trialStart: timestamp("trialStart"),
trialEnd: timestamp("trialEnd"), trialEnd: timestamp("trialEnd"),
createdAt: timestamp("createdAt").notNull().defaultNow(), createdAt: timestamp("createdAt").notNull().defaultNow(),

View File

@@ -45,14 +45,14 @@ export const sendEmail = async (
html, html,
}; };
if (cloudMailerClient) { // if (cloudMailerClient) {
const response = await cloudMailerClient.emails.send({ // const response = await cloudMailerClient.emails.send({
...options, // ...options,
body: html, // body: html,
}); // });
return response; // return response;
} // }
const response = await transporter.sendMail(options); const response = await transporter.sendMail(options);

View File

@@ -1,2 +1,3 @@
export * from "./generateUID"; export * from "./generateUID";
export * from "./generateSlug"; export * from "./generateSlug";
export * from "./subscriptions";

View File

@@ -0,0 +1,57 @@
export type SubscriptionStatus =
| "active"
| "trialing"
| "past_due"
| "canceled"
| "unpaid";
export type SubscriptionPlan = "team" | "pro";
export interface Subscription {
id: number | null;
plan: string;
status: string;
seats: number | null;
unlimitedSeats: boolean;
periodStart: Date | null;
periodEnd: Date | null;
referenceId: string;
stripeSubscriptionId: string | null;
stripeCustomerId: string | null;
createdAt: Date;
updatedAt: Date;
}
export const getActiveSubscriptions = (
subscriptions: Subscription[] | undefined,
) => {
if (!subscriptions) return [];
return subscriptions.filter(
(sub) => sub.status === "active" || sub.status === "trialing",
);
};
export const getSubscriptionByPlan = (
subscriptions: Subscription[] | undefined,
plan: SubscriptionPlan,
) => {
if (!subscriptions) return undefined;
return subscriptions.find(
(sub) =>
sub.plan === plan &&
(sub.status === "active" || sub.status === "trialing"),
);
};
export const hasActiveSubscription = (
subscriptions: Subscription[] | undefined,
plan: SubscriptionPlan,
) => {
return getSubscriptionByPlan(subscriptions, plan) !== undefined;
};
export const hasUnlimitedSeats = (
subscriptions: Subscription[] | undefined,
) => {
const activeSubscriptions = getActiveSubscriptions(subscriptions);
return activeSubscriptions.some((sub) => sub.unlimitedSeats);
};

View File

@@ -64,7 +64,7 @@ export const updateSubscriptionSeats = async (
quantity: newQuantity, quantity: newQuantity,
}, },
], ],
proration_behavior: "always_invoice", // Invoice immediately proration_behavior: "create_prorations",
}, },
); );

View File

@@ -99,7 +99,11 @@
"NEXT_PUBLIC_WHITE_LABEL_HIDE_POWERED_BY", "NEXT_PUBLIC_WHITE_LABEL_HIDE_POWERED_BY",
"STRIPE_SECRET_KEY", "STRIPE_SECRET_KEY",
"STRIPE_WEBHOOK_SECRET", "STRIPE_WEBHOOK_SECRET",
"STRIPE_PRO_PLAN_PRICE_ID", "STRIPE_WEBHOOK_SECRET_LEGACY",
"STRIPE_PRO_PLAN_MONTHLY_PRICE_ID",
"STRIPE_PRO_PLAN_YEARLY_PRICE_ID",
"STRIPE_TEAM_PLAN_MONTHLY_PRICE_ID",
"STRIPE_TEAM_PLAN_YEARLY_PRICE_ID",
"NEXT_PUBLIC_STORAGE_DOMAIN", "NEXT_PUBLIC_STORAGE_DOMAIN",
"NEXT_PUBLIC_STORAGE_URL", "NEXT_PUBLIC_STORAGE_URL",
"NEXT_PUBLIC_AVATAR_BUCKET_NAME", "NEXT_PUBLIC_AVATAR_BUCKET_NAME",