Compare commits
17 Commits
feat/seats
...
feat/pro-l
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d460c279f7 | ||
|
|
a9c9bc2b36 | ||
|
|
867aeb3caf | ||
|
|
31a216acfb | ||
|
|
6bdca2cb2a | ||
|
|
6c04a10b1f | ||
|
|
99459415d5 | ||
|
|
5a4835091f | ||
|
|
061a54dadd | ||
|
|
a532fa1ce2 | ||
|
|
2a355238a4 | ||
|
|
874353e8b8 | ||
|
|
18e60333ae | ||
|
|
d729785802 | ||
|
|
abbbb4b928 | ||
|
|
3cea9377e6 | ||
|
|
06c268bed1 |
@@ -55,6 +55,7 @@ checksums:
|
||||
Billing%20portal/singular: dc3afa14ffe19f5920992a0c9d49d525
|
||||
Blog%20Post/singular: 38e027f212be445dc530e427fc642a20
|
||||
Board/singular: 101ff39aab674c033c15ab978d0d8bac
|
||||
Board%20analytics%20(coming%20soon)/singular: 3f648e6fe3849ee2ac5cdf410ac9ea06
|
||||
Board%20name%20cannot%20exceed%20100%20characters/singular: 985c0177744ec56d8dac84f66ec284ca
|
||||
Board%20name%20is%20required/singular: dbd0c6cc945ab19e702fc27f970a023b
|
||||
Board%20not%20found/singular: 5af9844595fa8aed5985066620435515
|
||||
@@ -87,7 +88,6 @@ checksums:
|
||||
Complete%20control%20and%20ownership%3A/singular: 0d8b682ba873272217425ccfc96aa9cd
|
||||
completed%20a%20checklist%20item/singular: 757b04c6c80cc927e1c597c0ad4fda33
|
||||
completed%20checklist%20item%20%3C0%3E%7B0%7D%3C%2F0%3E/singular: 71ec18acf051fc909a48a07ca3578673
|
||||
Confirm%20URL%20change/singular: e14b4ce081d1ef6194b37e1814e97b39
|
||||
Confirm%20your%20new%20password/singular: a0d2935d7b63f8dd19d7c0de47524416
|
||||
Connect%20Trello/singular: 4440a0b9e387ef7136e3958e7a089213
|
||||
Connect%20your%20favorite%20tools%20to%20streamline%20your%20workflow./singular: 033c5dcdb059ccb634aef7fe63f2f45d
|
||||
@@ -113,7 +113,7 @@ checksums:
|
||||
Critical/singular: eb327cd411b50aee954f8d1d215d003a
|
||||
Current%20password%20is%20required/singular: 72536bca9598680027f2be8ce80ac280
|
||||
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
|
||||
Dark/singular: 73e6e208ba628b26e90fcf6dce15e1b2
|
||||
Delete/singular: 8bcf303dd10a645b5baacb02b47d72c9
|
||||
@@ -230,6 +230,8 @@ checksums:
|
||||
Labels/singular: 6f15627a90002323eac018274b6922d6
|
||||
Labels%20%26%20Filters/singular: 8f0bdd6084516f8241cb613178114390
|
||||
Language/singular: 277fd1a41cc237a437cd1d5e4a80463b
|
||||
Launch%20offer/singular: 624592ba2ecf647a3fe60d493c1ee71a
|
||||
Launch%20offer%3A%20unlimited%20seats%20for%20just%20%2429%2Fmonth%20with%20Pro/singular: 235d1cda21811c296afdc0dcc438cc24
|
||||
Learning/singular: 90e91da3f870f065f2da9aa9adf53514
|
||||
Legal/singular: 00d3f08da61a21887009819cf93fb414
|
||||
License/singular: ac2bcac75151e2fcd9eb768cea275a77
|
||||
@@ -296,6 +298,8 @@ checksums:
|
||||
Priority%20email%20support/singular: 678538c912a770b1e1416ecdb8e299b1
|
||||
Privacy%20policy/singular: 462c6a536b52873e4498785c66dd48c8
|
||||
Private/singular: d740d0660e68c61db1853489356030ae
|
||||
Pro%20Plan/singular: 76a09fd843b496610f8cf1dced417b62
|
||||
Pro%20Plan%20%E2%88%9E/singular: a898be9e4610706b9b8146a209e8ba16
|
||||
Profile%20image%20updated/singular: 1ba6609b50bc217a36ab659563e78dae
|
||||
Profile%20picture/singular: d9b5e595877ffe2557486a987dd28274
|
||||
Public/singular: c834f11dab0881632aded3f01d4f8fa9
|
||||
@@ -344,6 +348,7 @@ checksums:
|
||||
Software%20Development/singular: 67659097ef6bcb194839858b2c4f3a3c
|
||||
Star%20on%20Github/singular: e5cb0428f1ac6485688f120d78742875
|
||||
Success/singular: c43827becada6750f7a25890905f38b9
|
||||
Supercharge%20your%20workspace%20for%20just%20%2429%2Fmonth.%20Here's%20what%20you'll%20get%3A/singular: 21af8119141afcce5f12da489f34db6a
|
||||
Support/singular: 55aab5fd0f31a9cb055a2edeeedfaf63
|
||||
Support%20the%20development%20of%20the%20project/singular: c63bab228ab2b1be4370c668a99cd278
|
||||
System/singular: 803281c327a02a2feba182f4a2b38311
|
||||
@@ -399,6 +404,7 @@ checksums:
|
||||
Unlimited%20cards/singular: f44c1050c4d6aa39c8cdf5f4a7d12577
|
||||
Unlimited%20comments/singular: 31dbcf487c49a9997142e96bb3ab0040
|
||||
Unlimited%20lists/singular: 5c418701b27b9acbc5dd199719007362
|
||||
Unlimited%20members/singular: f2949ca2dc18b0063af92e60779abb65
|
||||
Update/singular: 079fc039262fd31b10532929685c2d1b
|
||||
Update%20label/singular: 97880b503dfe956941c5f23025a1c102
|
||||
updated%20a%20checklist%20item/singular: 198e1d1d503f4b69b752dd84d0cc0e9d
|
||||
@@ -406,6 +412,7 @@ checksums:
|
||||
updated%20the%20title/singular: 98cf8f12923ec1a58e767e3a40863b21
|
||||
updated%20the%20title%20to%20%3C0%3E%7B0%7D%3C%2F0%3E/singular: aca196d729401d8adc5c8ca9d558840e
|
||||
Upgrade/singular: 63c3b52882e0d779859307d672c178c2
|
||||
Upgrade%20to%20Pro/singular: 972773025e763ddf53273df6d37a729a
|
||||
Upgrade%20to%20Team%20Plan/singular: 40e2ef151266937f8bbe63b3d361f645
|
||||
Urgent/singular: e79afcd4398e52e10e7e8243a7eecabe
|
||||
URL%20can%20only%20contain%20letters%2C%20numbers%2C%20and%20hyphens/singular: 875d37d2d920f98ef60a314eda8a5d9a
|
||||
@@ -451,6 +458,7 @@ checksums:
|
||||
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%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%20boards%20have%20been%20imported./singular: 403972e7a25afc2415762c1c2b1ec868
|
||||
Your%20display%20name%20has%20been%20updated./singular: 15e5fff36c554c16ec5214427fae1bf4
|
||||
|
||||
@@ -20,12 +20,12 @@ export default function WorkspaceMenu({
|
||||
<Menu as="div" className="relative inline-block w-full pb-3 text-left">
|
||||
<div>
|
||||
{isLoading ? (
|
||||
<div className={twMerge("mb-1", isCollapsed && "md:flex md:p-1.5")}>
|
||||
<div className={twMerge("mb-1 flex", isCollapsed && "md:p-1.5")}>
|
||||
<div className="h-6 w-6 animate-pulse rounded-md bg-light-200 dark:bg-dark-200" />
|
||||
<div
|
||||
className={twMerge(
|
||||
"ml-2 h-6 w-[150px] animate-pulse rounded-md bg-light-200 dark:bg-dark-200",
|
||||
isCollapsed && "hidden md:block",
|
||||
isCollapsed && "md:hidden",
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -36,12 +36,12 @@ msgstr "{0} Labels"
|
||||
msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({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:106
|
||||
#: src/views/members/components/InviteMemberForm.tsx:92
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
msgid "$10/month"
|
||||
msgstr "$10/Monat"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:106
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
msgid "$8/month"
|
||||
msgstr "$8/Monat"
|
||||
|
||||
@@ -97,7 +97,7 @@ msgid "Add label"
|
||||
msgstr "Label hinzufügen"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:149
|
||||
#: src/views/members/components/InviteMemberForm.tsx:147
|
||||
msgid "Add member"
|
||||
msgstr "Mitglied hinzufügen"
|
||||
|
||||
@@ -132,7 +132,7 @@ msgstr "hat Checklistenelement <0>{0}</0> hinzugefügt"
|
||||
msgid "added label <0>{0}</0>"
|
||||
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."
|
||||
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>"
|
||||
msgstr "Du hast bereits ein Konto? <0><1>Anmelden</1></0>"
|
||||
|
||||
#: src/views/settings/index.tsx:102
|
||||
#: src/views/settings/index.tsx:124
|
||||
msgid "An error occurred while disconnecting your Trello account."
|
||||
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."
|
||||
msgstr "Ein unerwarteter Fehler ist aufgetreten. Bitte versuchen Sie es später erneut."
|
||||
|
||||
#: src/views/settings/index.tsx:259
|
||||
#: src/views/settings/index.tsx:293
|
||||
msgid "API keys"
|
||||
msgstr "API-Schlüssel"
|
||||
|
||||
@@ -218,20 +218,20 @@ msgstr "Backlog"
|
||||
msgid "Basic Kanban"
|
||||
msgstr "Einfaches Kanban"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:107
|
||||
#: src/views/members/components/InviteMemberForm.tsx:105
|
||||
msgid "billed annually"
|
||||
msgstr "jährlich abgerechnet"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:107
|
||||
#: src/views/members/components/InviteMemberForm.tsx:105
|
||||
msgid "billed monthly"
|
||||
msgstr "monatlich abgerechnet"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:55
|
||||
#: src/views/settings/index.tsx:198
|
||||
#: src/views/settings/index.tsx:232
|
||||
msgid "Billing"
|
||||
msgstr "Abrechnung"
|
||||
|
||||
#: src/views/settings/index.tsx:208
|
||||
#: src/views/settings/index.tsx:242
|
||||
msgid "Billing portal"
|
||||
msgstr "Abrechnungsportal"
|
||||
|
||||
@@ -243,6 +243,10 @@ msgstr "Blogbeitrag"
|
||||
msgid "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
|
||||
msgid "Board name cannot exceed 100 characters"
|
||||
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/members/components/DeleteMemberConfirmation.tsx:55
|
||||
#: 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/DeleteWorkspaceConfirmation.tsx:98
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:94
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
@@ -325,12 +329,12 @@ msgstr "Kartentitel"
|
||||
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178
|
||||
#: src/views/settings/index.tsx:291
|
||||
#: src/views/settings/index.tsx:301
|
||||
#: src/views/settings/index.tsx:325
|
||||
#: src/views/settings/index.tsx:335
|
||||
msgid "Change Password"
|
||||
msgstr "Passwort ändern"
|
||||
|
||||
#: src/views/settings/index.tsx:190
|
||||
#: src/views/settings/index.tsx:224
|
||||
msgid "Change the language of the app."
|
||||
msgstr "Ändere die Sprache der App."
|
||||
|
||||
@@ -389,16 +393,12 @@ msgstr "hat ein Checklistenelement abgeschlossen"
|
||||
msgid "completed checklist item <0>{0}</0>"
|
||||
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
|
||||
msgid "Confirm your new password"
|
||||
msgstr "Bestätigen Sie Ihr neues Passwort"
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:157
|
||||
#: src/views/settings/index.tsx:235
|
||||
#: src/views/settings/index.tsx:269
|
||||
msgid "Connect Trello"
|
||||
msgstr "Trello verbinden"
|
||||
|
||||
@@ -406,7 +406,7 @@ msgstr "Trello verbinden"
|
||||
msgid "Connect your favorite tools to streamline your workflow."
|
||||
msgstr "Verbinde deine Lieblingstools, um deinen Arbeitsablauf zu optimieren."
|
||||
|
||||
#: src/views/settings/index.tsx:222
|
||||
#: src/views/settings/index.tsx:256
|
||||
msgid "Connect your Trello account to import boards."
|
||||
msgstr "Verbinde dein Trello-Konto, um Boards zu importieren."
|
||||
|
||||
@@ -499,9 +499,9 @@ msgstr "Aktuelles Passwort ist erforderlich"
|
||||
msgid "Custom domain"
|
||||
msgstr "Benutzerdefinierte Domain"
|
||||
|
||||
#: src/views/settings/components/CustomURLConfirmation.tsx:45
|
||||
msgid "Custom URLs are a premium feature. You'll be directed to upgrade your account."
|
||||
msgstr "Benutzerdefinierte URLs sind eine Premium-Funktion. Du wirst zur Aktualisierung deines Kontos weitergeleitet."
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:74
|
||||
msgid "Custom workspace URL"
|
||||
msgstr "Benutzerdefinierte Workspace-URL"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:41
|
||||
msgid "Customer Support"
|
||||
@@ -520,8 +520,8 @@ msgid "Delete"
|
||||
msgstr "Löschen"
|
||||
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96
|
||||
#: src/views/settings/index.tsx:309
|
||||
#: src/views/settings/index.tsx:319
|
||||
#: src/views/settings/index.tsx:343
|
||||
#: src/views/settings/index.tsx:353
|
||||
msgid "Delete account"
|
||||
msgstr "Konto löschen"
|
||||
|
||||
@@ -542,8 +542,8 @@ msgid "Delete list"
|
||||
msgstr "Liste löschen"
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
|
||||
#: src/views/settings/index.tsx:272
|
||||
#: src/views/settings/index.tsx:283
|
||||
#: src/views/settings/index.tsx:306
|
||||
#: src/views/settings/index.tsx:317
|
||||
msgid "Delete workspace"
|
||||
msgstr "Workspace löschen"
|
||||
|
||||
@@ -569,7 +569,7 @@ msgstr "hat Checklistenelement <0>{0}</0> gelöscht"
|
||||
msgid "Design"
|
||||
msgstr "Design"
|
||||
|
||||
#: src/views/settings/index.tsx:250
|
||||
#: src/views/settings/index.tsx:284
|
||||
msgid "Disconnect Trello"
|
||||
msgstr "Trello trennen"
|
||||
|
||||
@@ -577,7 +577,7 @@ msgstr "Trello trennen"
|
||||
msgid "Discuss and collaborate on cards."
|
||||
msgstr "Diskutiere und arbeite gemeinsam an Karten."
|
||||
|
||||
#: src/views/settings/index.tsx:151
|
||||
#: src/views/settings/index.tsx:173
|
||||
msgid "Display name"
|
||||
msgstr "Anzeigename"
|
||||
|
||||
@@ -647,7 +647,7 @@ msgstr "Bearbeitung"
|
||||
msgid "email"
|
||||
msgstr "E-Mail"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:163
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
msgid "Email"
|
||||
msgstr "E-Mail"
|
||||
|
||||
@@ -695,12 +695,12 @@ msgstr "Fehler beim Löschen des Labels"
|
||||
msgid "Error deleting workspace"
|
||||
msgstr "Fehler beim Löschen des Arbeitsbereichs"
|
||||
|
||||
#: src/views/settings/index.tsx:101
|
||||
#: src/views/settings/index.tsx:123
|
||||
msgid "Error disconnecting Trello"
|
||||
msgstr "Fehler beim Trennen von Trello"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:76
|
||||
#: src/views/members/components/InviteMemberForm.tsx:82
|
||||
#: src/views/members/components/InviteMemberForm.tsx:71
|
||||
#: src/views/members/components/InviteMemberForm.tsx:77
|
||||
msgid "Error inviting member"
|
||||
msgstr "Fehler beim Einladen des Mitglieds"
|
||||
|
||||
@@ -724,7 +724,8 @@ msgstr "Fehler beim Aktualisieren des Arbeitsbereichsnamens"
|
||||
msgid "Error updating 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"
|
||||
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"
|
||||
msgstr "Kostenlos"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:192
|
||||
#: src/views/members/index.tsx:184
|
||||
#: src/views/members/components/InviteMemberForm.tsx:193
|
||||
#: src/views/members/index.tsx:189
|
||||
msgid "Free Plan"
|
||||
msgstr "Kostenloser Plan"
|
||||
|
||||
@@ -950,24 +951,24 @@ msgstr "Integrationen"
|
||||
msgid "Interviewing"
|
||||
msgstr "Vorstellungsgespräch"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:45
|
||||
#: src/views/members/components/InviteMemberForm.tsx:40
|
||||
msgid "Invalid email address"
|
||||
msgstr "Ungültige E-Mail-Adresse"
|
||||
|
||||
#: src/views/members/index.tsx:193
|
||||
#: src/views/members/index.tsx:201
|
||||
msgid "Invite"
|
||||
msgstr "Einladen"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:207
|
||||
#: src/views/members/components/InviteMemberForm.tsx:208
|
||||
msgid "Invite another"
|
||||
msgstr "Weitere Person einladen"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:112
|
||||
#: src/views/members/components/InviteMemberForm.tsx:231
|
||||
#: src/views/members/components/InviteMemberForm.tsx:233
|
||||
msgid "Invite member"
|
||||
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."
|
||||
msgstr "Das Einladen von Mitgliedern erfordert einen Team-Plan. Sie werden weitergeleitet, um Ihren Workspace zu upgraden."
|
||||
|
||||
@@ -998,10 +999,18 @@ msgstr "Labels"
|
||||
msgid "Labels & Filters"
|
||||
msgstr "Labels & Filter"
|
||||
|
||||
#: src/views/settings/index.tsx:187
|
||||
#: src/views/settings/index.tsx:221
|
||||
msgid "Language"
|
||||
msgstr "Sprache"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:67
|
||||
msgid "Launch offer"
|
||||
msgstr "Einführungsangebot"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:98
|
||||
msgid "Launch offer: unlimited seats for just $29/month with Pro"
|
||||
msgstr "Einführungsangebot: unbegrenzte Plätze für nur $29/Monat mit Pro"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Learning"
|
||||
msgstr "Lernen"
|
||||
@@ -1067,12 +1076,12 @@ msgstr "Mittlere Priorität"
|
||||
#: src/views/board/components/Filters.tsx:93
|
||||
#: src/views/board/components/NewCardForm.tsx:357
|
||||
#: src/views/card/index.tsx:125
|
||||
#: src/views/members/index.tsx:171
|
||||
#: src/views/members/index.tsx:172
|
||||
msgid "Members"
|
||||
msgstr "Mitglieder"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/members/index.tsx:167
|
||||
#: src/views/members/index.tsx:168
|
||||
msgid "Members | {0}"
|
||||
msgstr "Mitglieder | {0}"
|
||||
|
||||
@@ -1080,7 +1089,7 @@ msgstr "Mitglieder | {0}"
|
||||
msgid "Monthly"
|
||||
msgstr "Monatlich"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:92
|
||||
#: src/views/members/components/InviteMemberForm.tsx:93
|
||||
msgid "monthly billing"
|
||||
msgstr "monatliche Abrechnung"
|
||||
|
||||
@@ -1180,11 +1189,11 @@ msgstr "Angebot"
|
||||
msgid "Onboarding"
|
||||
msgstr "Einarbeitung"
|
||||
|
||||
#: src/views/settings/index.tsx:312
|
||||
#: src/views/settings/index.tsx:346
|
||||
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."
|
||||
|
||||
#: src/views/settings/index.tsx:275
|
||||
#: src/views/settings/index.tsx:309
|
||||
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."
|
||||
|
||||
@@ -1216,11 +1225,11 @@ msgstr "Passwort muss mindestens 8 Zeichen lang sein"
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Passwörter stimmen nicht überein"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:96
|
||||
#: src/views/home/components/Pricing.tsx:101
|
||||
msgid "Payment frequency"
|
||||
msgstr "Zahlungshäufigkeit"
|
||||
|
||||
#: src/views/members/index.tsx:128
|
||||
#: src/views/members/index.tsx:129
|
||||
msgid "Pending"
|
||||
msgstr "Ausstehend"
|
||||
|
||||
@@ -1282,8 +1291,8 @@ msgstr "Bitte wähle eine Datei zum Hochladen aus."
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/index.tsx:173
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:83
|
||||
#: src/views/members/components/InviteMemberForm.tsx:133
|
||||
#: src/views/members/components/InviteMemberForm.tsx:78
|
||||
#: src/views/members/components/InviteMemberForm.tsx:131
|
||||
#: src/views/settings/components/Avatar.tsx:40
|
||||
#: src/views/settings/components/Avatar.tsx:98
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
||||
@@ -1292,6 +1301,7 @@ msgstr "Bitte wähle eine Datei zum Hochladen aus."
|
||||
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:62
|
||||
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:57
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:74
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:42
|
||||
msgid "Please try again later, or contact customer support."
|
||||
msgstr "Bitte versuche es später noch einmal oder kontaktiere den Kundensupport."
|
||||
|
||||
@@ -1302,6 +1312,7 @@ msgid "Pricing"
|
||||
msgstr "Preise"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:56
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:86
|
||||
msgid "Priority email support"
|
||||
msgstr "Prioritäts-E-Mail-Support"
|
||||
|
||||
@@ -1313,11 +1324,19 @@ msgstr "Datenschutzrichtlinie"
|
||||
msgid "Private"
|
||||
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
|
||||
msgid "Profile image updated"
|
||||
msgstr "Profilbild aktualisiert"
|
||||
|
||||
#: src/views/settings/index.tsx:146
|
||||
#: src/views/settings/index.tsx:168
|
||||
msgid "Profile picture"
|
||||
msgstr "Profilbild"
|
||||
|
||||
@@ -1353,7 +1372,7 @@ msgstr "Remote"
|
||||
msgid "Remove"
|
||||
msgstr "Entfernen"
|
||||
|
||||
#: src/views/members/index.tsx:142
|
||||
#: src/views/members/index.tsx:143
|
||||
msgid "Remove member"
|
||||
msgstr "Mitglied entfernen"
|
||||
|
||||
@@ -1409,7 +1428,7 @@ msgstr "Widerrufen"
|
||||
msgid "Roadmap"
|
||||
msgstr "Roadmap"
|
||||
|
||||
#: src/views/members/index.tsx:215
|
||||
#: src/views/members/index.tsx:223
|
||||
msgid "Role"
|
||||
msgstr "Rolle"
|
||||
|
||||
@@ -1458,12 +1477,12 @@ msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/components/SideNavigation.tsx:78
|
||||
#: src/views/settings/index.tsx:140
|
||||
#: src/views/settings/index.tsx:162
|
||||
msgid "Settings"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/settings/index.tsx:136
|
||||
#: src/views/settings/index.tsx:158
|
||||
msgid "Settings | {0}"
|
||||
msgstr "Einstellungen | {0}"
|
||||
|
||||
@@ -1514,6 +1533,10 @@ msgstr "Stern auf Github"
|
||||
msgid "Success"
|
||||
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
|
||||
msgid "Support"
|
||||
msgstr "Support"
|
||||
@@ -1526,8 +1549,8 @@ msgstr "Unterstütze die Entwicklung des Projekts"
|
||||
msgid "System"
|
||||
msgstr "System"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:183
|
||||
#: src/views/members/index.tsx:184
|
||||
#: src/views/members/components/InviteMemberForm.tsx:182
|
||||
#: src/views/members/index.tsx:188
|
||||
msgid "Team Plan"
|
||||
msgstr "Team-Plan"
|
||||
|
||||
@@ -1612,7 +1635,7 @@ msgstr "Menü umschalten"
|
||||
msgid "Track all card changes with detailed activity history."
|
||||
msgstr "Verfolge alle kartenänderungen mit detaillierter aktivitätshistorie."
|
||||
|
||||
#: src/views/settings/index.tsx:94
|
||||
#: src/views/settings/index.tsx:116
|
||||
msgid "Trello disconnected"
|
||||
msgstr "Trello getrennt"
|
||||
|
||||
@@ -1743,6 +1766,10 @@ msgstr "Unbegrenzte kommentare"
|
||||
msgid "Unlimited lists"
|
||||
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/settings/components/UpdateDisplayNameForm.tsx:79
|
||||
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
|
||||
@@ -1772,11 +1799,16 @@ msgstr "hat den Titel aktualisiert"
|
||||
msgid "updated the title to <0>{0}</0>"
|
||||
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"
|
||||
msgstr "Upgrade"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:222
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:52
|
||||
#: src/views/settings/index.tsx:213
|
||||
msgid "Upgrade to Pro"
|
||||
msgstr "Upgrade auf Pro"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:224
|
||||
msgid "Upgrade to Team Plan"
|
||||
msgstr "Upgrade auf Team-Plan"
|
||||
|
||||
@@ -1801,11 +1833,11 @@ msgstr "URL muss mindestens 3 Zeichen lang sein"
|
||||
msgid "Use template"
|
||||
msgstr "Vorlage verwenden"
|
||||
|
||||
#: src/views/members/index.tsx:209
|
||||
#: src/views/members/index.tsx:217
|
||||
msgid "User"
|
||||
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"
|
||||
msgstr "Benutzer ist bereits Mitglied dieses Arbeitsbereichs"
|
||||
|
||||
@@ -1813,11 +1845,11 @@ msgstr "Benutzer ist bereits Mitglied dieses Arbeitsbereichs"
|
||||
msgid "Video"
|
||||
msgstr "Video"
|
||||
|
||||
#: src/views/settings/index.tsx:262
|
||||
#: src/views/settings/index.tsx:296
|
||||
msgid "View and manage your API keys."
|
||||
msgstr "API-Schlüssel anzeigen und verwalten."
|
||||
|
||||
#: src/views/settings/index.tsx:201
|
||||
#: src/views/settings/index.tsx:235
|
||||
msgid "View and manage your billing and subscription."
|
||||
msgstr "Verwalte deine Abrechnung und dein Abonnement."
|
||||
|
||||
@@ -1877,7 +1909,7 @@ msgstr "Arbeitsbereich"
|
||||
msgid "Workspace deleted"
|
||||
msgstr "Workspace gelöscht"
|
||||
|
||||
#: src/views/settings/index.tsx:177
|
||||
#: src/views/settings/index.tsx:199
|
||||
msgid "Workspace description"
|
||||
msgstr "Workspace-Beschreibung"
|
||||
|
||||
@@ -1899,7 +1931,7 @@ msgid "Workspace members"
|
||||
msgstr "Workspace-mitglieder"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:81
|
||||
#: src/views/settings/index.tsx:158
|
||||
#: src/views/settings/index.tsx:180
|
||||
msgid "Workspace name"
|
||||
msgstr "Name des Workspaces"
|
||||
|
||||
@@ -1919,7 +1951,7 @@ msgstr "Workspace-Name aktualisiert"
|
||||
msgid "Workspace slug updated"
|
||||
msgstr "Workspace-Slug aktualisiert"
|
||||
|
||||
#: src/views/settings/index.tsx:167
|
||||
#: src/views/settings/index.tsx:189
|
||||
msgid "Workspace URL"
|
||||
msgstr "Workspace-URL"
|
||||
|
||||
@@ -1935,7 +1967,7 @@ msgstr "Jährlich"
|
||||
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."
|
||||
|
||||
#: src/views/settings/index.tsx:294
|
||||
#: src/views/settings/index.tsx:328
|
||||
msgid "You are about to change your password."
|
||||
msgstr "Sie sind dabei, Ihr Passwort zu ändern."
|
||||
|
||||
@@ -1959,6 +1991,10 @@ msgstr "Sie haben sich erfolgreich angemeldet."
|
||||
msgid "You have been signed up successfully."
|
||||
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
|
||||
msgid "Your account has been deleted."
|
||||
msgstr "Dein Konto wurde gelöscht."
|
||||
@@ -1979,11 +2015,11 @@ msgstr "Ihr Passwort wurde geändert."
|
||||
msgid "Your profile image has been updated."
|
||||
msgstr "Dein Profilbild wurde aktualisiert."
|
||||
|
||||
#: src/views/settings/index.tsx:95
|
||||
#: src/views/settings/index.tsx:117
|
||||
msgid "Your Trello account has been disconnected."
|
||||
msgstr "Dein Trello-Konto wurde getrennt."
|
||||
|
||||
#: src/views/settings/index.tsx:244
|
||||
#: src/views/settings/index.tsx:278
|
||||
msgid "Your Trello account is connected."
|
||||
msgstr "Dein Trello-Konto ist verbunden."
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -40,12 +40,12 @@ msgstr "{boardCount, plural, one {Import board (1)} other {Import boards ({board
|
||||
#~ msgid "#1 Hacker News"
|
||||
#~ msgstr "#1 Hacker News"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:91
|
||||
#: src/views/members/components/InviteMemberForm.tsx:106
|
||||
#: src/views/members/components/InviteMemberForm.tsx:92
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
msgid "$10/month"
|
||||
msgstr "$10/month"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:106
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
msgid "$8/month"
|
||||
msgstr "$8/month"
|
||||
|
||||
@@ -113,7 +113,7 @@ msgid "Add label"
|
||||
msgstr "Add label"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:149
|
||||
#: src/views/members/components/InviteMemberForm.tsx:147
|
||||
msgid "Add member"
|
||||
msgstr "Add member"
|
||||
|
||||
@@ -152,7 +152,7 @@ msgstr "added label <0>{0}</0>"
|
||||
#~ msgid "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."
|
||||
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>"
|
||||
msgstr "Already have an account? <0><1>Sign in</1></0>"
|
||||
|
||||
#: src/views/settings/index.tsx:102
|
||||
#: src/views/settings/index.tsx:124
|
||||
msgid "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."
|
||||
msgstr "An unexpected error occurred. Please try again later."
|
||||
|
||||
#: src/views/settings/index.tsx:259
|
||||
#: src/views/settings/index.tsx:293
|
||||
msgid "API keys"
|
||||
msgstr "API keys"
|
||||
|
||||
@@ -254,20 +254,20 @@ msgstr "Backlog"
|
||||
msgid "Basic Kanban"
|
||||
msgstr "Basic Kanban"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:107
|
||||
#: src/views/members/components/InviteMemberForm.tsx:105
|
||||
msgid "billed annually"
|
||||
msgstr "billed annually"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:107
|
||||
#: src/views/members/components/InviteMemberForm.tsx:105
|
||||
msgid "billed monthly"
|
||||
msgstr "billed monthly"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:55
|
||||
#: src/views/settings/index.tsx:198
|
||||
#: src/views/settings/index.tsx:232
|
||||
msgid "Billing"
|
||||
msgstr "Billing"
|
||||
|
||||
#: src/views/settings/index.tsx:208
|
||||
#: src/views/settings/index.tsx:242
|
||||
msgid "Billing portal"
|
||||
msgstr "Billing portal"
|
||||
|
||||
@@ -279,6 +279,10 @@ msgstr "Blog Post"
|
||||
msgid "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
|
||||
msgid "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/members/components/DeleteMemberConfirmation.tsx:55
|
||||
#: 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/DeleteWorkspaceConfirmation.tsx:98
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:94
|
||||
msgid "Cancel"
|
||||
msgstr "Cancel"
|
||||
|
||||
@@ -369,12 +373,12 @@ msgstr "Card title"
|
||||
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178
|
||||
#: src/views/settings/index.tsx:291
|
||||
#: src/views/settings/index.tsx:301
|
||||
#: src/views/settings/index.tsx:325
|
||||
#: src/views/settings/index.tsx:335
|
||||
msgid "Change Password"
|
||||
msgstr "Change Password"
|
||||
|
||||
#: src/views/settings/index.tsx:190
|
||||
#: src/views/settings/index.tsx:224
|
||||
msgid "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>"
|
||||
msgstr "completed checklist item <0>{0}</0>"
|
||||
|
||||
#: src/views/settings/components/CustomURLConfirmation.tsx:42
|
||||
msgid "Confirm URL change"
|
||||
msgstr "Confirm URL change"
|
||||
#: src/views/settings/components/CustomURLConfirmation.tsx:47
|
||||
#~ msgid "Confirm URL change"
|
||||
#~ msgstr "Confirm URL change"
|
||||
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:150
|
||||
msgid "Confirm your new password"
|
||||
msgstr "Confirm your new password"
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:157
|
||||
#: src/views/settings/index.tsx:235
|
||||
#: src/views/settings/index.tsx:269
|
||||
msgid "Connect Trello"
|
||||
msgstr "Connect Trello"
|
||||
|
||||
@@ -450,7 +454,7 @@ msgstr "Connect Trello"
|
||||
msgid "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:256
|
||||
msgid "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"
|
||||
msgstr "Custom domain"
|
||||
|
||||
#: src/views/settings/components/CustomURLConfirmation.tsx:45
|
||||
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."
|
||||
#: src/views/settings/components/CustomURLConfirmation.tsx:50
|
||||
#~ 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."
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:74
|
||||
msgid "Custom workspace URL"
|
||||
msgstr "Custom workspace URL"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:41
|
||||
msgid "Customer Support"
|
||||
@@ -572,8 +580,8 @@ msgid "Delete"
|
||||
msgstr "Delete"
|
||||
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96
|
||||
#: src/views/settings/index.tsx:309
|
||||
#: src/views/settings/index.tsx:319
|
||||
#: src/views/settings/index.tsx:343
|
||||
#: src/views/settings/index.tsx:353
|
||||
msgid "Delete account"
|
||||
msgstr "Delete account"
|
||||
|
||||
@@ -594,8 +602,8 @@ msgid "Delete list"
|
||||
msgstr "Delete list"
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
|
||||
#: src/views/settings/index.tsx:272
|
||||
#: src/views/settings/index.tsx:283
|
||||
#: src/views/settings/index.tsx:306
|
||||
#: src/views/settings/index.tsx:317
|
||||
msgid "Delete workspace"
|
||||
msgstr "Delete workspace"
|
||||
|
||||
@@ -621,7 +629,7 @@ msgstr "deleted checklist item <0>{0}</0>"
|
||||
msgid "Design"
|
||||
msgstr "Design"
|
||||
|
||||
#: src/views/settings/index.tsx:250
|
||||
#: src/views/settings/index.tsx:284
|
||||
msgid "Disconnect Trello"
|
||||
msgstr "Disconnect Trello"
|
||||
|
||||
@@ -629,7 +637,7 @@ msgstr "Disconnect Trello"
|
||||
msgid "Discuss and collaborate on cards."
|
||||
msgstr "Discuss and collaborate on cards."
|
||||
|
||||
#: src/views/settings/index.tsx:151
|
||||
#: src/views/settings/index.tsx:173
|
||||
msgid "Display name"
|
||||
msgstr "Display name"
|
||||
|
||||
@@ -699,7 +707,7 @@ msgstr "Editing"
|
||||
msgid "email"
|
||||
msgstr "email"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:163
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
|
||||
@@ -747,12 +755,12 @@ msgstr "Error deleting label"
|
||||
msgid "Error deleting workspace"
|
||||
msgstr "Error deleting workspace"
|
||||
|
||||
#: src/views/settings/index.tsx:101
|
||||
#: src/views/settings/index.tsx:123
|
||||
msgid "Error disconnecting Trello"
|
||||
msgstr "Error disconnecting Trello"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:76
|
||||
#: src/views/members/components/InviteMemberForm.tsx:82
|
||||
#: src/views/members/components/InviteMemberForm.tsx:71
|
||||
#: src/views/members/components/InviteMemberForm.tsx:77
|
||||
msgid "Error inviting member"
|
||||
msgstr "Error inviting member"
|
||||
|
||||
@@ -776,7 +784,8 @@ msgstr "Error updating workspace name"
|
||||
msgid "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"
|
||||
msgstr "Error upgrading subscription"
|
||||
|
||||
@@ -847,8 +856,8 @@ msgstr "For long-term sustainability, we recognise all good open source projects
|
||||
msgid "Free"
|
||||
msgstr "Free"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:192
|
||||
#: src/views/members/index.tsx:184
|
||||
#: src/views/members/components/InviteMemberForm.tsx:193
|
||||
#: src/views/members/index.tsx:189
|
||||
msgid "Free Plan"
|
||||
msgstr "Free Plan"
|
||||
|
||||
@@ -1007,24 +1016,24 @@ msgstr "Integrations"
|
||||
msgid "Interviewing"
|
||||
msgstr "Interviewing"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:45
|
||||
#: src/views/members/components/InviteMemberForm.tsx:40
|
||||
msgid "Invalid email address"
|
||||
msgstr "Invalid email address"
|
||||
|
||||
#: src/views/members/index.tsx:193
|
||||
#: src/views/members/index.tsx:201
|
||||
msgid "Invite"
|
||||
msgstr "Invite"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:207
|
||||
#: src/views/members/components/InviteMemberForm.tsx:208
|
||||
msgid "Invite another"
|
||||
msgstr "Invite another"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:112
|
||||
#: src/views/members/components/InviteMemberForm.tsx:231
|
||||
#: src/views/members/components/InviteMemberForm.tsx:233
|
||||
msgid "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."
|
||||
msgstr "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace."
|
||||
|
||||
@@ -1055,10 +1064,18 @@ msgstr "Labels"
|
||||
msgid "Labels & Filters"
|
||||
msgstr "Labels & Filters"
|
||||
|
||||
#: src/views/settings/index.tsx:187
|
||||
#: src/views/settings/index.tsx:221
|
||||
msgid "Language"
|
||||
msgstr "Language"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:67
|
||||
msgid "Launch offer"
|
||||
msgstr "Launch offer"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:98
|
||||
msgid "Launch offer: unlimited seats for just $29/month with Pro"
|
||||
msgstr "Launch offer: unlimited seats for just $29/month with Pro"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Learning"
|
||||
msgstr "Learning"
|
||||
@@ -1124,12 +1141,12 @@ msgstr "Medium Priority"
|
||||
#: src/views/board/components/Filters.tsx:93
|
||||
#: src/views/board/components/NewCardForm.tsx:357
|
||||
#: src/views/card/index.tsx:125
|
||||
#: src/views/members/index.tsx:171
|
||||
#: src/views/members/index.tsx:172
|
||||
msgid "Members"
|
||||
msgstr "Members"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/members/index.tsx:167
|
||||
#: src/views/members/index.tsx:168
|
||||
msgid "Members | {0}"
|
||||
msgstr "Members | {0}"
|
||||
|
||||
@@ -1137,7 +1154,7 @@ msgstr "Members | {0}"
|
||||
msgid "Monthly"
|
||||
msgstr "Monthly"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:92
|
||||
#: src/views/members/components/InviteMemberForm.tsx:93
|
||||
msgid "monthly billing"
|
||||
msgstr "monthly billing"
|
||||
|
||||
@@ -1245,11 +1262,11 @@ msgstr "Offer"
|
||||
msgid "Onboarding"
|
||||
msgstr "Onboarding"
|
||||
|
||||
#: src/views/settings/index.tsx:312
|
||||
#: src/views/settings/index.tsx:346
|
||||
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."
|
||||
|
||||
#: src/views/settings/index.tsx:275
|
||||
#: src/views/settings/index.tsx:309
|
||||
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."
|
||||
|
||||
@@ -1281,11 +1298,11 @@ msgstr "Password must be at least 8 characters"
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Passwords do not match"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:96
|
||||
#: src/views/home/components/Pricing.tsx:101
|
||||
msgid "Payment frequency"
|
||||
msgstr "Payment frequency"
|
||||
|
||||
#: src/views/members/index.tsx:128
|
||||
#: src/views/members/index.tsx:129
|
||||
msgid "Pending"
|
||||
msgstr "Pending"
|
||||
|
||||
@@ -1347,8 +1364,8 @@ msgstr "Please select a file to upload."
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/index.tsx:173
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:83
|
||||
#: src/views/members/components/InviteMemberForm.tsx:133
|
||||
#: src/views/members/components/InviteMemberForm.tsx:78
|
||||
#: src/views/members/components/InviteMemberForm.tsx:131
|
||||
#: src/views/settings/components/Avatar.tsx:40
|
||||
#: src/views/settings/components/Avatar.tsx:98
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
||||
@@ -1357,6 +1374,7 @@ msgstr "Please select a file to upload."
|
||||
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:62
|
||||
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:57
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:74
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:42
|
||||
msgid "Please try again later, or contact customer support."
|
||||
msgstr "Please try again later, or contact customer support."
|
||||
|
||||
@@ -1367,6 +1385,7 @@ msgid "Pricing"
|
||||
msgstr "Pricing"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:56
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:86
|
||||
msgid "Priority email support"
|
||||
msgstr "Priority email support"
|
||||
|
||||
@@ -1378,11 +1397,19 @@ msgstr "Privacy policy"
|
||||
msgid "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
|
||||
msgid "Profile image updated"
|
||||
msgstr "Profile image updated"
|
||||
|
||||
#: src/views/settings/index.tsx:146
|
||||
#: src/views/settings/index.tsx:168
|
||||
msgid "Profile picture"
|
||||
msgstr "Profile picture"
|
||||
|
||||
@@ -1418,7 +1445,7 @@ msgstr "Remote"
|
||||
msgid "Remove"
|
||||
msgstr "Remove"
|
||||
|
||||
#: src/views/members/index.tsx:142
|
||||
#: src/views/members/index.tsx:143
|
||||
msgid "Remove member"
|
||||
msgstr "Remove member"
|
||||
|
||||
@@ -1478,7 +1505,7 @@ msgstr "Revoke"
|
||||
msgid "Roadmap"
|
||||
msgstr "Roadmap"
|
||||
|
||||
#: src/views/members/index.tsx:215
|
||||
#: src/views/members/index.tsx:223
|
||||
msgid "Role"
|
||||
msgstr "Role"
|
||||
|
||||
@@ -1531,12 +1558,12 @@ msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/components/SideNavigation.tsx:78
|
||||
#: src/views/settings/index.tsx:140
|
||||
#: src/views/settings/index.tsx:162
|
||||
msgid "Settings"
|
||||
msgstr "Settings"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/settings/index.tsx:136
|
||||
#: src/views/settings/index.tsx:158
|
||||
msgid "Settings | {0}"
|
||||
msgstr "Settings | {0}"
|
||||
|
||||
@@ -1587,6 +1614,10 @@ msgstr "Star on Github"
|
||||
msgid "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
|
||||
msgid "Support"
|
||||
msgstr "Support"
|
||||
@@ -1599,8 +1630,8 @@ msgstr "Support the development of the project"
|
||||
msgid "System"
|
||||
msgstr "System"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:183
|
||||
#: src/views/members/index.tsx:184
|
||||
#: src/views/members/components/InviteMemberForm.tsx:182
|
||||
#: src/views/members/index.tsx:188
|
||||
msgid "Team Plan"
|
||||
msgstr "Team Plan"
|
||||
|
||||
@@ -1689,7 +1720,7 @@ msgstr "Toggle menu"
|
||||
msgid "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:116
|
||||
msgid "Trello disconnected"
|
||||
msgstr "Trello disconnected"
|
||||
|
||||
@@ -1824,6 +1855,10 @@ msgstr "Unlimited comments"
|
||||
msgid "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/settings/components/UpdateDisplayNameForm.tsx:79
|
||||
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
|
||||
@@ -1857,11 +1892,16 @@ msgstr "updated the title to <0>{0}</0>"
|
||||
#~ msgid "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"
|
||||
msgstr "Upgrade"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:222
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:52
|
||||
#: src/views/settings/index.tsx:213
|
||||
msgid "Upgrade to Pro"
|
||||
msgstr "Upgrade to Pro"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:224
|
||||
msgid "Upgrade to Team Plan"
|
||||
msgstr "Upgrade to Team Plan"
|
||||
|
||||
@@ -1886,11 +1926,11 @@ msgstr "URL must be at least 3 characters long"
|
||||
msgid "Use template"
|
||||
msgstr "Use template"
|
||||
|
||||
#: src/views/members/index.tsx:209
|
||||
#: src/views/members/index.tsx:217
|
||||
msgid "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"
|
||||
msgstr "User is already a member of this workspace"
|
||||
|
||||
@@ -1898,11 +1938,11 @@ msgstr "User is already a member of this workspace"
|
||||
msgid "Video"
|
||||
msgstr "Video"
|
||||
|
||||
#: src/views/settings/index.tsx:262
|
||||
#: src/views/settings/index.tsx:296
|
||||
msgid "View and manage your API keys."
|
||||
msgstr "View and manage your API keys."
|
||||
|
||||
#: src/views/settings/index.tsx:201
|
||||
#: src/views/settings/index.tsx:235
|
||||
msgid "View and manage your billing and subscription."
|
||||
msgstr "View and manage your billing and subscription."
|
||||
|
||||
@@ -1966,7 +2006,7 @@ msgstr "Workspace"
|
||||
msgid "Workspace deleted"
|
||||
msgstr "Workspace deleted"
|
||||
|
||||
#: src/views/settings/index.tsx:177
|
||||
#: src/views/settings/index.tsx:199
|
||||
msgid "Workspace description"
|
||||
msgstr "Workspace description"
|
||||
|
||||
@@ -1988,7 +2028,7 @@ msgid "Workspace members"
|
||||
msgstr "Workspace members"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:81
|
||||
#: src/views/settings/index.tsx:158
|
||||
#: src/views/settings/index.tsx:180
|
||||
msgid "Workspace name"
|
||||
msgstr "Workspace name"
|
||||
|
||||
@@ -2008,7 +2048,7 @@ msgstr "Workspace name updated"
|
||||
msgid "Workspace slug updated"
|
||||
msgstr "Workspace slug updated"
|
||||
|
||||
#: src/views/settings/index.tsx:167
|
||||
#: src/views/settings/index.tsx:189
|
||||
msgid "Workspace URL"
|
||||
msgstr "Workspace URL"
|
||||
|
||||
@@ -2024,7 +2064,7 @@ msgstr "Yearly"
|
||||
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."
|
||||
|
||||
#: src/views/settings/index.tsx:294
|
||||
#: src/views/settings/index.tsx:328
|
||||
msgid "You are about to change your password."
|
||||
msgstr "You are about to change your password."
|
||||
|
||||
@@ -2048,6 +2088,10 @@ msgstr "You have been logged in successfully."
|
||||
msgid "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
|
||||
msgid "Your account has been deleted."
|
||||
msgstr "Your account has been deleted."
|
||||
@@ -2068,11 +2112,11 @@ msgstr "Your password has been changed."
|
||||
msgid "Your profile image has been updated."
|
||||
msgstr "Your profile image has been updated."
|
||||
|
||||
#: src/views/settings/index.tsx:95
|
||||
#: src/views/settings/index.tsx:117
|
||||
msgid "Your Trello account has been disconnected."
|
||||
msgstr "Your Trello account has been disconnected."
|
||||
|
||||
#: src/views/settings/index.tsx:244
|
||||
#: src/views/settings/index.tsx:278
|
||||
msgid "Your Trello account is connected."
|
||||
msgstr "Your Trello account is connected."
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -36,12 +36,12 @@ msgstr "{0} etiquetas"
|
||||
msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({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:106
|
||||
#: src/views/members/components/InviteMemberForm.tsx:92
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
msgid "$10/month"
|
||||
msgstr "$10/mes"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:106
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
msgid "$8/month"
|
||||
msgstr "$8/mes"
|
||||
|
||||
@@ -97,7 +97,7 @@ msgid "Add label"
|
||||
msgstr "Añadir etiqueta"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:149
|
||||
#: src/views/members/components/InviteMemberForm.tsx:147
|
||||
msgid "Add member"
|
||||
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>"
|
||||
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."
|
||||
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>"
|
||||
msgstr "¿Ya tienes una cuenta? <0><1>Iniciar sesión</1></0>"
|
||||
|
||||
#: src/views/settings/index.tsx:102
|
||||
#: src/views/settings/index.tsx:124
|
||||
msgid "An error occurred while disconnecting your Trello account."
|
||||
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."
|
||||
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:293
|
||||
msgid "API keys"
|
||||
msgstr "Claves API"
|
||||
|
||||
@@ -218,20 +218,20 @@ msgstr "Pendientes"
|
||||
msgid "Basic Kanban"
|
||||
msgstr "Kanban básico"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:107
|
||||
#: src/views/members/components/InviteMemberForm.tsx:105
|
||||
msgid "billed annually"
|
||||
msgstr "facturado anualmente"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:107
|
||||
#: src/views/members/components/InviteMemberForm.tsx:105
|
||||
msgid "billed monthly"
|
||||
msgstr "facturado mensualmente"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:55
|
||||
#: src/views/settings/index.tsx:198
|
||||
#: src/views/settings/index.tsx:232
|
||||
msgid "Billing"
|
||||
msgstr "Facturación"
|
||||
|
||||
#: src/views/settings/index.tsx:208
|
||||
#: src/views/settings/index.tsx:242
|
||||
msgid "Billing portal"
|
||||
msgstr "Portal de facturación"
|
||||
|
||||
@@ -243,6 +243,10 @@ msgstr "Entrada de blog"
|
||||
msgid "Board"
|
||||
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
|
||||
msgid "Board name cannot exceed 100 characters"
|
||||
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/members/components/DeleteMemberConfirmation.tsx:55
|
||||
#: 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/DeleteWorkspaceConfirmation.tsx:98
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:94
|
||||
msgid "Cancel"
|
||||
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:178
|
||||
#: src/views/settings/index.tsx:291
|
||||
#: src/views/settings/index.tsx:301
|
||||
#: src/views/settings/index.tsx:325
|
||||
#: src/views/settings/index.tsx:335
|
||||
msgid "Change Password"
|
||||
msgstr "Cambiar contraseña"
|
||||
|
||||
#: src/views/settings/index.tsx:190
|
||||
#: src/views/settings/index.tsx:224
|
||||
msgid "Change the language of the app."
|
||||
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>"
|
||||
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
|
||||
msgid "Confirm your new password"
|
||||
msgstr "Confirma tu nueva contraseña"
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:157
|
||||
#: src/views/settings/index.tsx:235
|
||||
#: src/views/settings/index.tsx:269
|
||||
msgid "Connect Trello"
|
||||
msgstr "Conectar Trello"
|
||||
|
||||
@@ -406,7 +406,7 @@ msgstr "Conectar Trello"
|
||||
msgid "Connect your favorite tools to streamline your workflow."
|
||||
msgstr "Conecta tus herramientas favoritas para agilizar tu flujo de trabajo."
|
||||
|
||||
#: src/views/settings/index.tsx:222
|
||||
#: src/views/settings/index.tsx:256
|
||||
msgid "Connect your Trello account to import boards."
|
||||
msgstr "Conecta tu cuenta de Trello para importar tableros."
|
||||
|
||||
@@ -499,9 +499,9 @@ msgstr "Se requiere la contraseña actual"
|
||||
msgid "Custom domain"
|
||||
msgstr "Dominio personalizado"
|
||||
|
||||
#: src/views/settings/components/CustomURLConfirmation.tsx:45
|
||||
msgid "Custom URLs are a premium feature. You'll be directed to upgrade your account."
|
||||
msgstr "Las URL personalizadas son una función premium. Serás dirigido a actualizar tu cuenta."
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:74
|
||||
msgid "Custom workspace URL"
|
||||
msgstr "URL personalizada del espacio de trabajo"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:41
|
||||
msgid "Customer Support"
|
||||
@@ -520,8 +520,8 @@ msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96
|
||||
#: src/views/settings/index.tsx:309
|
||||
#: src/views/settings/index.tsx:319
|
||||
#: src/views/settings/index.tsx:343
|
||||
#: src/views/settings/index.tsx:353
|
||||
msgid "Delete account"
|
||||
msgstr "Eliminar cuenta"
|
||||
|
||||
@@ -542,8 +542,8 @@ msgid "Delete list"
|
||||
msgstr "Eliminar lista"
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
|
||||
#: src/views/settings/index.tsx:272
|
||||
#: src/views/settings/index.tsx:283
|
||||
#: src/views/settings/index.tsx:306
|
||||
#: src/views/settings/index.tsx:317
|
||||
msgid "Delete workspace"
|
||||
msgstr "Eliminar espacio de trabajo"
|
||||
|
||||
@@ -569,7 +569,7 @@ msgstr "eliminó el elemento <0>{0}</0> de la lista de verificación"
|
||||
msgid "Design"
|
||||
msgstr "Diseño"
|
||||
|
||||
#: src/views/settings/index.tsx:250
|
||||
#: src/views/settings/index.tsx:284
|
||||
msgid "Disconnect Trello"
|
||||
msgstr "Desconectar Trello"
|
||||
|
||||
@@ -577,7 +577,7 @@ msgstr "Desconectar Trello"
|
||||
msgid "Discuss and collaborate on cards."
|
||||
msgstr "Discute y colabora en las tarjetas."
|
||||
|
||||
#: src/views/settings/index.tsx:151
|
||||
#: src/views/settings/index.tsx:173
|
||||
msgid "Display name"
|
||||
msgstr "Nombre visible"
|
||||
|
||||
@@ -647,7 +647,7 @@ msgstr "Editando"
|
||||
msgid "email"
|
||||
msgstr "correo electrónico"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:163
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
msgid "Email"
|
||||
msgstr "Correo electrónico"
|
||||
|
||||
@@ -695,12 +695,12 @@ msgstr "Error al eliminar la etiqueta"
|
||||
msgid "Error deleting workspace"
|
||||
msgstr "Error al eliminar el espacio de trabajo"
|
||||
|
||||
#: src/views/settings/index.tsx:101
|
||||
#: src/views/settings/index.tsx:123
|
||||
msgid "Error disconnecting Trello"
|
||||
msgstr "Error al desconectar Trello"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:76
|
||||
#: src/views/members/components/InviteMemberForm.tsx:82
|
||||
#: src/views/members/components/InviteMemberForm.tsx:71
|
||||
#: src/views/members/components/InviteMemberForm.tsx:77
|
||||
msgid "Error inviting member"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
msgstr "Gratis"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:192
|
||||
#: src/views/members/index.tsx:184
|
||||
#: src/views/members/components/InviteMemberForm.tsx:193
|
||||
#: src/views/members/index.tsx:189
|
||||
msgid "Free Plan"
|
||||
msgstr "Plan gratuito"
|
||||
|
||||
@@ -950,24 +951,24 @@ msgstr "Integraciones"
|
||||
msgid "Interviewing"
|
||||
msgstr "Entrevistando"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:45
|
||||
#: src/views/members/components/InviteMemberForm.tsx:40
|
||||
msgid "Invalid email address"
|
||||
msgstr "Dirección de correo electrónico no válida"
|
||||
|
||||
#: src/views/members/index.tsx:193
|
||||
#: src/views/members/index.tsx:201
|
||||
msgid "Invite"
|
||||
msgstr "Invitar"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:207
|
||||
#: src/views/members/components/InviteMemberForm.tsx:208
|
||||
msgid "Invite another"
|
||||
msgstr "Invitar a otro"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:112
|
||||
#: src/views/members/components/InviteMemberForm.tsx:231
|
||||
#: src/views/members/components/InviteMemberForm.tsx:233
|
||||
msgid "Invite member"
|
||||
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."
|
||||
msgstr "Invitar miembros requiere un Plan de Equipo. Serás redirigido para actualizar tu espacio de trabajo."
|
||||
|
||||
@@ -998,10 +999,18 @@ msgstr "Etiquetas"
|
||||
msgid "Labels & Filters"
|
||||
msgstr "Etiquetas y filtros"
|
||||
|
||||
#: src/views/settings/index.tsx:187
|
||||
#: src/views/settings/index.tsx:221
|
||||
msgid "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:67
|
||||
msgid "Launch offer"
|
||||
msgstr "Oferta de lanzamiento"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:98
|
||||
msgid "Launch offer: unlimited seats for just $29/month with Pro"
|
||||
msgstr "Oferta de lanzamiento: asientos ilimitados por solo $29/mes con Pro"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Learning"
|
||||
msgstr "Aprendizaje"
|
||||
@@ -1067,12 +1076,12 @@ msgstr "Prioridad media"
|
||||
#: src/views/board/components/Filters.tsx:93
|
||||
#: src/views/board/components/NewCardForm.tsx:357
|
||||
#: src/views/card/index.tsx:125
|
||||
#: src/views/members/index.tsx:171
|
||||
#: src/views/members/index.tsx:172
|
||||
msgid "Members"
|
||||
msgstr "Miembros"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/members/index.tsx:167
|
||||
#: src/views/members/index.tsx:168
|
||||
msgid "Members | {0}"
|
||||
msgstr "Miembros | {0}"
|
||||
|
||||
@@ -1080,7 +1089,7 @@ msgstr "Miembros | {0}"
|
||||
msgid "Monthly"
|
||||
msgstr "Mensual"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:92
|
||||
#: src/views/members/components/InviteMemberForm.tsx:93
|
||||
msgid "monthly billing"
|
||||
msgstr "facturación mensual"
|
||||
|
||||
@@ -1180,11 +1189,11 @@ msgstr "Oferta"
|
||||
msgid "Onboarding"
|
||||
msgstr "Incorporación"
|
||||
|
||||
#: src/views/settings/index.tsx:312
|
||||
#: src/views/settings/index.tsx:346
|
||||
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."
|
||||
|
||||
#: src/views/settings/index.tsx:275
|
||||
#: src/views/settings/index.tsx:309
|
||||
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."
|
||||
|
||||
@@ -1216,11 +1225,11 @@ msgstr "La contraseña debe tener al menos 8 caracteres"
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Las contraseñas no coinciden"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:96
|
||||
#: src/views/home/components/Pricing.tsx:101
|
||||
msgid "Payment frequency"
|
||||
msgstr "Frecuencia de pago"
|
||||
|
||||
#: src/views/members/index.tsx:128
|
||||
#: src/views/members/index.tsx:129
|
||||
msgid "Pending"
|
||||
msgstr "Pendiente"
|
||||
|
||||
@@ -1282,8 +1291,8 @@ msgstr "Por favor selecciona un archivo para subir."
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/index.tsx:173
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:83
|
||||
#: src/views/members/components/InviteMemberForm.tsx:133
|
||||
#: src/views/members/components/InviteMemberForm.tsx:78
|
||||
#: src/views/members/components/InviteMemberForm.tsx:131
|
||||
#: src/views/settings/components/Avatar.tsx:40
|
||||
#: src/views/settings/components/Avatar.tsx:98
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
||||
@@ -1292,6 +1301,7 @@ msgstr "Por favor selecciona un archivo para subir."
|
||||
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:62
|
||||
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:57
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:74
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:42
|
||||
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."
|
||||
|
||||
@@ -1302,6 +1312,7 @@ msgid "Pricing"
|
||||
msgstr "Precios"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:56
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:86
|
||||
msgid "Priority email support"
|
||||
msgstr "Soporte prioritario por email"
|
||||
|
||||
@@ -1313,11 +1324,19 @@ msgstr "Política de privacidad"
|
||||
msgid "Private"
|
||||
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
|
||||
msgid "Profile image updated"
|
||||
msgstr "Imagen de perfil actualizada"
|
||||
|
||||
#: src/views/settings/index.tsx:146
|
||||
#: src/views/settings/index.tsx:168
|
||||
msgid "Profile picture"
|
||||
msgstr "Foto de perfil"
|
||||
|
||||
@@ -1353,7 +1372,7 @@ msgstr "Remoto"
|
||||
msgid "Remove"
|
||||
msgstr "Eliminar"
|
||||
|
||||
#: src/views/members/index.tsx:142
|
||||
#: src/views/members/index.tsx:143
|
||||
msgid "Remove member"
|
||||
msgstr "Eliminar miembro"
|
||||
|
||||
@@ -1409,7 +1428,7 @@ msgstr "Revocar"
|
||||
msgid "Roadmap"
|
||||
msgstr "Hoja de ruta"
|
||||
|
||||
#: src/views/members/index.tsx:215
|
||||
#: src/views/members/index.tsx:223
|
||||
msgid "Role"
|
||||
msgstr "Rol"
|
||||
|
||||
@@ -1458,12 +1477,12 @@ msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/components/SideNavigation.tsx:78
|
||||
#: src/views/settings/index.tsx:140
|
||||
#: src/views/settings/index.tsx:162
|
||||
msgid "Settings"
|
||||
msgstr "Configuración"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/settings/index.tsx:136
|
||||
#: src/views/settings/index.tsx:158
|
||||
msgid "Settings | {0}"
|
||||
msgstr "Configuración | {0}"
|
||||
|
||||
@@ -1514,6 +1533,10 @@ msgstr "Estrella en Github"
|
||||
msgid "Success"
|
||||
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
|
||||
msgid "Support"
|
||||
msgstr "Soporte"
|
||||
@@ -1526,8 +1549,8 @@ msgstr "Apoya el desarrollo del proyecto"
|
||||
msgid "System"
|
||||
msgstr "Sistema"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:183
|
||||
#: src/views/members/index.tsx:184
|
||||
#: src/views/members/components/InviteMemberForm.tsx:182
|
||||
#: src/views/members/index.tsx:188
|
||||
msgid "Team Plan"
|
||||
msgstr "Plan de Equipo"
|
||||
|
||||
@@ -1612,7 +1635,7 @@ msgstr "Alternar menú"
|
||||
msgid "Track all card changes with detailed activity history."
|
||||
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:116
|
||||
msgid "Trello disconnected"
|
||||
msgstr "Trello desconectado"
|
||||
|
||||
@@ -1743,6 +1766,10 @@ msgstr "Comentarios ilimitados"
|
||||
msgid "Unlimited lists"
|
||||
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/settings/components/UpdateDisplayNameForm.tsx:79
|
||||
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
|
||||
@@ -1772,11 +1799,16 @@ msgstr "actualizó el título"
|
||||
msgid "updated the title to <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"
|
||||
msgstr "Actualizar"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:222
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:52
|
||||
#: src/views/settings/index.tsx:213
|
||||
msgid "Upgrade to Pro"
|
||||
msgstr "Actualizar a Pro"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:224
|
||||
msgid "Upgrade to Team Plan"
|
||||
msgstr "Actualizar al Plan de Equipo"
|
||||
|
||||
@@ -1801,11 +1833,11 @@ msgstr "La URL debe tener al menos 3 caracteres"
|
||||
msgid "Use template"
|
||||
msgstr "Usar plantilla"
|
||||
|
||||
#: src/views/members/index.tsx:209
|
||||
#: src/views/members/index.tsx:217
|
||||
msgid "User"
|
||||
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"
|
||||
msgstr "El usuario ya es miembro de este espacio de trabajo"
|
||||
|
||||
@@ -1813,11 +1845,11 @@ msgstr "El usuario ya es miembro de este espacio de trabajo"
|
||||
msgid "Video"
|
||||
msgstr "Video"
|
||||
|
||||
#: src/views/settings/index.tsx:262
|
||||
#: src/views/settings/index.tsx:296
|
||||
msgid "View and manage your API keys."
|
||||
msgstr "Ver y gestionar tus claves API."
|
||||
|
||||
#: src/views/settings/index.tsx:201
|
||||
#: src/views/settings/index.tsx:235
|
||||
msgid "View and manage your billing and subscription."
|
||||
msgstr "Ver y gestionar tu facturación y suscripción."
|
||||
|
||||
@@ -1877,7 +1909,7 @@ msgstr "Espacio de trabajo"
|
||||
msgid "Workspace deleted"
|
||||
msgstr "Espacio de trabajo eliminado"
|
||||
|
||||
#: src/views/settings/index.tsx:177
|
||||
#: src/views/settings/index.tsx:199
|
||||
msgid "Workspace description"
|
||||
msgstr "Descripción del espacio de trabajo"
|
||||
|
||||
@@ -1899,7 +1931,7 @@ msgid "Workspace members"
|
||||
msgstr "Miembros del espacio de trabajo"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:81
|
||||
#: src/views/settings/index.tsx:158
|
||||
#: src/views/settings/index.tsx:180
|
||||
msgid "Workspace name"
|
||||
msgstr "Nombre del espacio de trabajo"
|
||||
|
||||
@@ -1919,7 +1951,7 @@ msgstr "Nombre del espacio de trabajo actualizado"
|
||||
msgid "Workspace slug updated"
|
||||
msgstr "Slug del espacio de trabajo actualizado"
|
||||
|
||||
#: src/views/settings/index.tsx:167
|
||||
#: src/views/settings/index.tsx:189
|
||||
msgid "Workspace URL"
|
||||
msgstr "URL del espacio de trabajo"
|
||||
|
||||
@@ -1935,7 +1967,7 @@ msgstr "Anual"
|
||||
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."
|
||||
|
||||
#: src/views/settings/index.tsx:294
|
||||
#: src/views/settings/index.tsx:328
|
||||
msgid "You are about to change your password."
|
||||
msgstr "Estás a punto de cambiar tu contraseña."
|
||||
|
||||
@@ -1959,6 +1991,10 @@ msgstr "Has iniciado sesión correctamente."
|
||||
msgid "You have been signed up successfully."
|
||||
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
|
||||
msgid "Your account has been deleted."
|
||||
msgstr "Tu cuenta ha sido eliminada."
|
||||
@@ -1979,11 +2015,11 @@ msgstr "Tu contraseña ha sido cambiada."
|
||||
msgid "Your profile image has been updated."
|
||||
msgstr "Tu imagen de perfil ha sido actualizada."
|
||||
|
||||
#: src/views/settings/index.tsx:95
|
||||
#: src/views/settings/index.tsx:117
|
||||
msgid "Your Trello account has been disconnected."
|
||||
msgstr "Tu cuenta de Trello ha sido desconectada."
|
||||
|
||||
#: src/views/settings/index.tsx:244
|
||||
#: src/views/settings/index.tsx:278
|
||||
msgid "Your Trello account is connected."
|
||||
msgstr "Tu cuenta de Trello está conectada."
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -36,12 +36,12 @@ msgstr "{0} étiquettes"
|
||||
msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({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:106
|
||||
#: src/views/members/components/InviteMemberForm.tsx:92
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
msgid "$10/month"
|
||||
msgstr "10 $/mois"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:106
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
msgid "$8/month"
|
||||
msgstr "8 $/mois"
|
||||
|
||||
@@ -97,7 +97,7 @@ msgid "Add label"
|
||||
msgstr "Ajouter une étiquette"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:149
|
||||
#: src/views/members/components/InviteMemberForm.tsx:147
|
||||
msgid "Add member"
|
||||
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>"
|
||||
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."
|
||||
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>"
|
||||
msgstr "Vous avez déjà un compte ? <0><1>Connectez-vous</1></0>"
|
||||
|
||||
#: src/views/settings/index.tsx:102
|
||||
#: src/views/settings/index.tsx:124
|
||||
msgid "An error occurred while disconnecting your Trello account."
|
||||
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."
|
||||
msgstr "Une erreur inattendue s'est produite. Veuillez réessayer plus tard."
|
||||
|
||||
#: src/views/settings/index.tsx:259
|
||||
#: src/views/settings/index.tsx:293
|
||||
msgid "API keys"
|
||||
msgstr "Clés API"
|
||||
|
||||
@@ -218,20 +218,20 @@ msgstr "Backlog"
|
||||
msgid "Basic Kanban"
|
||||
msgstr "Kanban basique"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:107
|
||||
#: src/views/members/components/InviteMemberForm.tsx:105
|
||||
msgid "billed annually"
|
||||
msgstr "facturation annuelle"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:107
|
||||
#: src/views/members/components/InviteMemberForm.tsx:105
|
||||
msgid "billed monthly"
|
||||
msgstr "facturation mensuelle"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:55
|
||||
#: src/views/settings/index.tsx:198
|
||||
#: src/views/settings/index.tsx:232
|
||||
msgid "Billing"
|
||||
msgstr "Facturation"
|
||||
|
||||
#: src/views/settings/index.tsx:208
|
||||
#: src/views/settings/index.tsx:242
|
||||
msgid "Billing portal"
|
||||
msgstr "Portail de facturation"
|
||||
|
||||
@@ -243,6 +243,10 @@ msgstr "Article de blog"
|
||||
msgid "Board"
|
||||
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
|
||||
msgid "Board name cannot exceed 100 characters"
|
||||
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/members/components/DeleteMemberConfirmation.tsx:55
|
||||
#: 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/DeleteWorkspaceConfirmation.tsx:98
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:94
|
||||
msgid "Cancel"
|
||||
msgstr "Annuler"
|
||||
|
||||
@@ -325,12 +329,12 @@ msgstr "Titre de la carte"
|
||||
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178
|
||||
#: src/views/settings/index.tsx:291
|
||||
#: src/views/settings/index.tsx:301
|
||||
#: src/views/settings/index.tsx:325
|
||||
#: src/views/settings/index.tsx:335
|
||||
msgid "Change Password"
|
||||
msgstr "Modifier le mot de passe"
|
||||
|
||||
#: src/views/settings/index.tsx:190
|
||||
#: src/views/settings/index.tsx:224
|
||||
msgid "Change the language of the app."
|
||||
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>"
|
||||
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
|
||||
msgid "Confirm your new password"
|
||||
msgstr "Confirmez votre nouveau mot de passe"
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:157
|
||||
#: src/views/settings/index.tsx:235
|
||||
#: src/views/settings/index.tsx:269
|
||||
msgid "Connect Trello"
|
||||
msgstr "Connecter Trello"
|
||||
|
||||
@@ -406,7 +406,7 @@ msgstr "Connecter Trello"
|
||||
msgid "Connect your favorite tools to streamline your workflow."
|
||||
msgstr "Connectez vos outils favoris pour simplifier votre flux de travail."
|
||||
|
||||
#: src/views/settings/index.tsx:222
|
||||
#: src/views/settings/index.tsx:256
|
||||
msgid "Connect your Trello account to import boards."
|
||||
msgstr "Connectez votre compte Trello pour importer des tableaux."
|
||||
|
||||
@@ -499,9 +499,9 @@ msgstr "Le mot de passe actuel est requis"
|
||||
msgid "Custom domain"
|
||||
msgstr "Domaine personnalisé"
|
||||
|
||||
#: src/views/settings/components/CustomURLConfirmation.tsx:45
|
||||
msgid "Custom URLs are a premium feature. You'll be directed to upgrade your account."
|
||||
msgstr "Les URL personnalisées sont une fonctionnalité premium. Vous serez dirigé vers la mise à niveau de votre compte."
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:74
|
||||
msgid "Custom workspace URL"
|
||||
msgstr "URL d'espace de travail personnalisée"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:41
|
||||
msgid "Customer Support"
|
||||
@@ -520,8 +520,8 @@ msgid "Delete"
|
||||
msgstr "Supprimer"
|
||||
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96
|
||||
#: src/views/settings/index.tsx:309
|
||||
#: src/views/settings/index.tsx:319
|
||||
#: src/views/settings/index.tsx:343
|
||||
#: src/views/settings/index.tsx:353
|
||||
msgid "Delete account"
|
||||
msgstr "Supprimer le compte"
|
||||
|
||||
@@ -542,8 +542,8 @@ msgid "Delete list"
|
||||
msgstr "Supprimer la liste"
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
|
||||
#: src/views/settings/index.tsx:272
|
||||
#: src/views/settings/index.tsx:283
|
||||
#: src/views/settings/index.tsx:306
|
||||
#: src/views/settings/index.tsx:317
|
||||
msgid "Delete workspace"
|
||||
msgstr "Supprimer l'espace de travail"
|
||||
|
||||
@@ -569,7 +569,7 @@ msgstr "a supprimé l'élément <0>{0}</0> de la checklist"
|
||||
msgid "Design"
|
||||
msgstr "Design"
|
||||
|
||||
#: src/views/settings/index.tsx:250
|
||||
#: src/views/settings/index.tsx:284
|
||||
msgid "Disconnect Trello"
|
||||
msgstr "Déconnecter Trello"
|
||||
|
||||
@@ -577,7 +577,7 @@ msgstr "Déconnecter Trello"
|
||||
msgid "Discuss and collaborate on cards."
|
||||
msgstr "Discutez et collaborez sur les cartes."
|
||||
|
||||
#: src/views/settings/index.tsx:151
|
||||
#: src/views/settings/index.tsx:173
|
||||
msgid "Display name"
|
||||
msgstr "Nom d'affichage"
|
||||
|
||||
@@ -647,7 +647,7 @@ msgstr "Édition"
|
||||
msgid "email"
|
||||
msgstr "e-mail"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:163
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
msgid "Email"
|
||||
msgstr "E-mail"
|
||||
|
||||
@@ -695,12 +695,12 @@ msgstr "Erreur lors de la suppression de l'étiquette"
|
||||
msgid "Error deleting workspace"
|
||||
msgstr "Erreur lors de la suppression de l'espace de travail"
|
||||
|
||||
#: src/views/settings/index.tsx:101
|
||||
#: src/views/settings/index.tsx:123
|
||||
msgid "Error disconnecting Trello"
|
||||
msgstr "Erreur lors de la déconnexion de Trello"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:76
|
||||
#: src/views/members/components/InviteMemberForm.tsx:82
|
||||
#: src/views/members/components/InviteMemberForm.tsx:71
|
||||
#: src/views/members/components/InviteMemberForm.tsx:77
|
||||
msgid "Error inviting member"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
msgstr "Gratuit"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:192
|
||||
#: src/views/members/index.tsx:184
|
||||
#: src/views/members/components/InviteMemberForm.tsx:193
|
||||
#: src/views/members/index.tsx:189
|
||||
msgid "Free Plan"
|
||||
msgstr "Forfait gratuit"
|
||||
|
||||
@@ -950,24 +951,24 @@ msgstr "Intégrations"
|
||||
msgid "Interviewing"
|
||||
msgstr "Entretien"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:45
|
||||
#: src/views/members/components/InviteMemberForm.tsx:40
|
||||
msgid "Invalid email address"
|
||||
msgstr "Adresse e-mail invalide"
|
||||
|
||||
#: src/views/members/index.tsx:193
|
||||
#: src/views/members/index.tsx:201
|
||||
msgid "Invite"
|
||||
msgstr "Inviter"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:207
|
||||
#: src/views/members/components/InviteMemberForm.tsx:208
|
||||
msgid "Invite another"
|
||||
msgstr "Inviter un autre"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:112
|
||||
#: src/views/members/components/InviteMemberForm.tsx:231
|
||||
#: src/views/members/components/InviteMemberForm.tsx:233
|
||||
msgid "Invite member"
|
||||
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."
|
||||
msgstr "L'invitation de membres nécessite un forfait d'équipe. Vous serez redirigé pour mettre à niveau votre espace de travail."
|
||||
|
||||
@@ -998,10 +999,18 @@ msgstr "Étiquettes"
|
||||
msgid "Labels & Filters"
|
||||
msgstr "Étiquettes & filtres"
|
||||
|
||||
#: src/views/settings/index.tsx:187
|
||||
#: src/views/settings/index.tsx:221
|
||||
msgid "Language"
|
||||
msgstr "Langue"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:67
|
||||
msgid "Launch offer"
|
||||
msgstr "Offre de lancement"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:98
|
||||
msgid "Launch offer: unlimited seats for just $29/month with Pro"
|
||||
msgstr "Offre de lancement : sièges illimités pour seulement 29 $/mois avec Pro"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Learning"
|
||||
msgstr "Apprentissage"
|
||||
@@ -1067,12 +1076,12 @@ msgstr "Priorité moyenne"
|
||||
#: src/views/board/components/Filters.tsx:93
|
||||
#: src/views/board/components/NewCardForm.tsx:357
|
||||
#: src/views/card/index.tsx:125
|
||||
#: src/views/members/index.tsx:171
|
||||
#: src/views/members/index.tsx:172
|
||||
msgid "Members"
|
||||
msgstr "Membres"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/members/index.tsx:167
|
||||
#: src/views/members/index.tsx:168
|
||||
msgid "Members | {0}"
|
||||
msgstr "Membres | {0}"
|
||||
|
||||
@@ -1080,7 +1089,7 @@ msgstr "Membres | {0}"
|
||||
msgid "Monthly"
|
||||
msgstr "Mensuel"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:92
|
||||
#: src/views/members/components/InviteMemberForm.tsx:93
|
||||
msgid "monthly billing"
|
||||
msgstr "facturation mensuelle"
|
||||
|
||||
@@ -1180,11 +1189,11 @@ msgstr "Offre"
|
||||
msgid "Onboarding"
|
||||
msgstr "Intégration"
|
||||
|
||||
#: src/views/settings/index.tsx:312
|
||||
#: src/views/settings/index.tsx:346
|
||||
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."
|
||||
|
||||
#: src/views/settings/index.tsx:275
|
||||
#: src/views/settings/index.tsx:309
|
||||
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."
|
||||
|
||||
@@ -1216,11 +1225,11 @@ msgstr "Le mot de passe doit comporter au moins 8 caractères"
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Les mots de passe ne correspondent pas"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:96
|
||||
#: src/views/home/components/Pricing.tsx:101
|
||||
msgid "Payment frequency"
|
||||
msgstr "Fréquence de paiement"
|
||||
|
||||
#: src/views/members/index.tsx:128
|
||||
#: src/views/members/index.tsx:129
|
||||
msgid "Pending"
|
||||
msgstr "En attente"
|
||||
|
||||
@@ -1282,8 +1291,8 @@ msgstr "Veuillez sélectionner un fichier à télécharger."
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/index.tsx:173
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:83
|
||||
#: src/views/members/components/InviteMemberForm.tsx:133
|
||||
#: src/views/members/components/InviteMemberForm.tsx:78
|
||||
#: src/views/members/components/InviteMemberForm.tsx:131
|
||||
#: src/views/settings/components/Avatar.tsx:40
|
||||
#: src/views/settings/components/Avatar.tsx:98
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
||||
@@ -1292,6 +1301,7 @@ msgstr "Veuillez sélectionner un fichier à télécharger."
|
||||
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:62
|
||||
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:57
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:74
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:42
|
||||
msgid "Please try again later, or contact customer support."
|
||||
msgstr "Veuillez réessayer plus tard ou contacter le service client."
|
||||
|
||||
@@ -1302,6 +1312,7 @@ msgid "Pricing"
|
||||
msgstr "Tarifs"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:56
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:86
|
||||
msgid "Priority email support"
|
||||
msgstr "Support par e-mail prioritaire"
|
||||
|
||||
@@ -1313,11 +1324,19 @@ msgstr "Politique de confidentialité"
|
||||
msgid "Private"
|
||||
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
|
||||
msgid "Profile image updated"
|
||||
msgstr "Image de profil mise à jour"
|
||||
|
||||
#: src/views/settings/index.tsx:146
|
||||
#: src/views/settings/index.tsx:168
|
||||
msgid "Profile picture"
|
||||
msgstr "Photo de profil"
|
||||
|
||||
@@ -1353,7 +1372,7 @@ msgstr "À distance"
|
||||
msgid "Remove"
|
||||
msgstr "Supprimer"
|
||||
|
||||
#: src/views/members/index.tsx:142
|
||||
#: src/views/members/index.tsx:143
|
||||
msgid "Remove member"
|
||||
msgstr "Supprimer le membre"
|
||||
|
||||
@@ -1409,7 +1428,7 @@ msgstr "Révoquer"
|
||||
msgid "Roadmap"
|
||||
msgstr "Feuille de route"
|
||||
|
||||
#: src/views/members/index.tsx:215
|
||||
#: src/views/members/index.tsx:223
|
||||
msgid "Role"
|
||||
msgstr "Rôle"
|
||||
|
||||
@@ -1458,12 +1477,12 @@ msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/components/SideNavigation.tsx:78
|
||||
#: src/views/settings/index.tsx:140
|
||||
#: src/views/settings/index.tsx:162
|
||||
msgid "Settings"
|
||||
msgstr "Paramètres"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/settings/index.tsx:136
|
||||
#: src/views/settings/index.tsx:158
|
||||
msgid "Settings | {0}"
|
||||
msgstr "Paramètres | {0}"
|
||||
|
||||
@@ -1514,6 +1533,10 @@ msgstr "Étoile sur Github"
|
||||
msgid "Success"
|
||||
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
|
||||
msgid "Support"
|
||||
msgstr "Assistance"
|
||||
@@ -1526,8 +1549,8 @@ msgstr "Soutenir le développement du projet"
|
||||
msgid "System"
|
||||
msgstr "Système"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:183
|
||||
#: src/views/members/index.tsx:184
|
||||
#: src/views/members/components/InviteMemberForm.tsx:182
|
||||
#: src/views/members/index.tsx:188
|
||||
msgid "Team Plan"
|
||||
msgstr "Forfait d'équipe"
|
||||
|
||||
@@ -1612,7 +1635,7 @@ msgstr "Basculer le menu"
|
||||
msgid "Track all card changes with detailed activity history."
|
||||
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:116
|
||||
msgid "Trello disconnected"
|
||||
msgstr "Trello déconnecté"
|
||||
|
||||
@@ -1743,6 +1766,10 @@ msgstr "Commentaires illimités"
|
||||
msgid "Unlimited lists"
|
||||
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/settings/components/UpdateDisplayNameForm.tsx:79
|
||||
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
|
||||
@@ -1772,11 +1799,16 @@ msgstr "a mis à jour le titre"
|
||||
msgid "updated the title to <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"
|
||||
msgstr "Mettre à niveau"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:222
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:52
|
||||
#: src/views/settings/index.tsx:213
|
||||
msgid "Upgrade to Pro"
|
||||
msgstr "Passer à Pro"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:224
|
||||
msgid "Upgrade to Team Plan"
|
||||
msgstr "Passer au forfait d'équipe"
|
||||
|
||||
@@ -1801,11 +1833,11 @@ msgstr "L'URL doit comporter au moins 3 caractères"
|
||||
msgid "Use template"
|
||||
msgstr "Utiliser le modèle"
|
||||
|
||||
#: src/views/members/index.tsx:209
|
||||
#: src/views/members/index.tsx:217
|
||||
msgid "User"
|
||||
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"
|
||||
msgstr "L'utilisateur est déjà membre de cet espace de travail"
|
||||
|
||||
@@ -1813,11 +1845,11 @@ msgstr "L'utilisateur est déjà membre de cet espace de travail"
|
||||
msgid "Video"
|
||||
msgstr "Vidéo"
|
||||
|
||||
#: src/views/settings/index.tsx:262
|
||||
#: src/views/settings/index.tsx:296
|
||||
msgid "View and manage your API keys."
|
||||
msgstr "Consultez et gérez vos clés API."
|
||||
|
||||
#: src/views/settings/index.tsx:201
|
||||
#: src/views/settings/index.tsx:235
|
||||
msgid "View and manage your billing and subscription."
|
||||
msgstr "Consultez et gérez votre facturation et votre abonnement."
|
||||
|
||||
@@ -1877,7 +1909,7 @@ msgstr "Espace de travail"
|
||||
msgid "Workspace deleted"
|
||||
msgstr "Espace de travail supprimé"
|
||||
|
||||
#: src/views/settings/index.tsx:177
|
||||
#: src/views/settings/index.tsx:199
|
||||
msgid "Workspace description"
|
||||
msgstr "Description de l'espace de travail"
|
||||
|
||||
@@ -1899,7 +1931,7 @@ msgid "Workspace members"
|
||||
msgstr "Membres de l'espace de travail"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:81
|
||||
#: src/views/settings/index.tsx:158
|
||||
#: src/views/settings/index.tsx:180
|
||||
msgid "Workspace name"
|
||||
msgstr "Nom de l'espace de travail"
|
||||
|
||||
@@ -1919,7 +1951,7 @@ msgstr "Nom de l'espace de travail mis à jour"
|
||||
msgid "Workspace slug updated"
|
||||
msgstr "Slug de l'espace de travail mis à jour"
|
||||
|
||||
#: src/views/settings/index.tsx:167
|
||||
#: src/views/settings/index.tsx:189
|
||||
msgid "Workspace URL"
|
||||
msgstr "URL de l'espace de travail"
|
||||
|
||||
@@ -1935,7 +1967,7 @@ msgstr "Annuel"
|
||||
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."
|
||||
|
||||
#: src/views/settings/index.tsx:294
|
||||
#: src/views/settings/index.tsx:328
|
||||
msgid "You are about to change your password."
|
||||
msgstr "Vous êtes sur le point de modifier votre mot de passe."
|
||||
|
||||
@@ -1959,6 +1991,10 @@ msgstr "Vous vous êtes connecté avec succès."
|
||||
msgid "You have been signed up successfully."
|
||||
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
|
||||
msgid "Your account has been deleted."
|
||||
msgstr "Votre compte a été supprimé."
|
||||
@@ -1979,11 +2015,11 @@ msgstr "Votre mot de passe a été modifié."
|
||||
msgid "Your profile image has been updated."
|
||||
msgstr "Votre image de profil a été mise à jour."
|
||||
|
||||
#: src/views/settings/index.tsx:95
|
||||
#: src/views/settings/index.tsx:117
|
||||
msgid "Your Trello account has been disconnected."
|
||||
msgstr "Votre compte Trello a été déconnecté."
|
||||
|
||||
#: src/views/settings/index.tsx:244
|
||||
#: src/views/settings/index.tsx:278
|
||||
msgid "Your Trello account is connected."
|
||||
msgstr "Votre compte Trello est connecté."
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -36,12 +36,12 @@ msgstr "{0} etichette"
|
||||
msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({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:106
|
||||
#: src/views/members/components/InviteMemberForm.tsx:92
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
msgid "$10/month"
|
||||
msgstr "$10/mese"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:106
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
msgid "$8/month"
|
||||
msgstr "$8/mese"
|
||||
|
||||
@@ -97,7 +97,7 @@ msgid "Add label"
|
||||
msgstr "Aggiungi etichetta"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:149
|
||||
#: src/views/members/components/InviteMemberForm.tsx:147
|
||||
msgid "Add member"
|
||||
msgstr "Aggiungi membro"
|
||||
|
||||
@@ -132,7 +132,7 @@ msgstr "ha aggiunto l'elemento <0>{0}</0> alla checklist"
|
||||
msgid "added label <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."
|
||||
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>"
|
||||
msgstr "Hai già un account? <0><1>Accedi</1></0>"
|
||||
|
||||
#: src/views/settings/index.tsx:102
|
||||
#: src/views/settings/index.tsx:124
|
||||
msgid "An error occurred while disconnecting your Trello account."
|
||||
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."
|
||||
msgstr "Si è verificato un errore imprevisto. Riprova più tardi."
|
||||
|
||||
#: src/views/settings/index.tsx:259
|
||||
#: src/views/settings/index.tsx:293
|
||||
msgid "API keys"
|
||||
msgstr "Chiavi API"
|
||||
|
||||
@@ -218,20 +218,20 @@ msgstr "Backlog"
|
||||
msgid "Basic Kanban"
|
||||
msgstr "Kanban base"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:107
|
||||
#: src/views/members/components/InviteMemberForm.tsx:105
|
||||
msgid "billed annually"
|
||||
msgstr "fatturato annualmente"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:107
|
||||
#: src/views/members/components/InviteMemberForm.tsx:105
|
||||
msgid "billed monthly"
|
||||
msgstr "fatturato mensilmente"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:55
|
||||
#: src/views/settings/index.tsx:198
|
||||
#: src/views/settings/index.tsx:232
|
||||
msgid "Billing"
|
||||
msgstr "Fatturazione"
|
||||
|
||||
#: src/views/settings/index.tsx:208
|
||||
#: src/views/settings/index.tsx:242
|
||||
msgid "Billing portal"
|
||||
msgstr "Portale di fatturazione"
|
||||
|
||||
@@ -243,6 +243,10 @@ msgstr "Post del blog"
|
||||
msgid "Board"
|
||||
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
|
||||
msgid "Board name cannot exceed 100 characters"
|
||||
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/members/components/DeleteMemberConfirmation.tsx:55
|
||||
#: 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/DeleteWorkspaceConfirmation.tsx:98
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:94
|
||||
msgid "Cancel"
|
||||
msgstr "Annulla"
|
||||
|
||||
@@ -325,12 +329,12 @@ msgstr "Titolo della carta"
|
||||
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178
|
||||
#: src/views/settings/index.tsx:291
|
||||
#: src/views/settings/index.tsx:301
|
||||
#: src/views/settings/index.tsx:325
|
||||
#: src/views/settings/index.tsx:335
|
||||
msgid "Change Password"
|
||||
msgstr "Cambia password"
|
||||
|
||||
#: src/views/settings/index.tsx:190
|
||||
#: src/views/settings/index.tsx:224
|
||||
msgid "Change the language of the 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>"
|
||||
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
|
||||
msgid "Confirm your new password"
|
||||
msgstr "Conferma la tua nuova password"
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:157
|
||||
#: src/views/settings/index.tsx:235
|
||||
#: src/views/settings/index.tsx:269
|
||||
msgid "Connect Trello"
|
||||
msgstr "Connetti Trello"
|
||||
|
||||
@@ -406,7 +406,7 @@ msgstr "Connetti Trello"
|
||||
msgid "Connect your favorite tools to streamline your workflow."
|
||||
msgstr "Connetti i tuoi strumenti preferiti per semplificare il tuo flusso di lavoro."
|
||||
|
||||
#: src/views/settings/index.tsx:222
|
||||
#: src/views/settings/index.tsx:256
|
||||
msgid "Connect your Trello account to import boards."
|
||||
msgstr "Connetti il tuo account Trello per importare le bacheche."
|
||||
|
||||
@@ -499,9 +499,9 @@ msgstr "La password attuale è obbligatoria"
|
||||
msgid "Custom domain"
|
||||
msgstr "Dominio personalizzato"
|
||||
|
||||
#: src/views/settings/components/CustomURLConfirmation.tsx:45
|
||||
msgid "Custom URLs are a premium feature. You'll be directed to upgrade your account."
|
||||
msgstr "Gli URL personalizzati sono una funzionalità premium. Sarai indirizzato all'aggiornamento del tuo account."
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:74
|
||||
msgid "Custom workspace URL"
|
||||
msgstr "URL personalizzato dell'area di lavoro"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:41
|
||||
msgid "Customer Support"
|
||||
@@ -520,8 +520,8 @@ msgid "Delete"
|
||||
msgstr "Elimina"
|
||||
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96
|
||||
#: src/views/settings/index.tsx:309
|
||||
#: src/views/settings/index.tsx:319
|
||||
#: src/views/settings/index.tsx:343
|
||||
#: src/views/settings/index.tsx:353
|
||||
msgid "Delete account"
|
||||
msgstr "Elimina account"
|
||||
|
||||
@@ -542,8 +542,8 @@ msgid "Delete list"
|
||||
msgstr "Elimina lista"
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
|
||||
#: src/views/settings/index.tsx:272
|
||||
#: src/views/settings/index.tsx:283
|
||||
#: src/views/settings/index.tsx:306
|
||||
#: src/views/settings/index.tsx:317
|
||||
msgid "Delete workspace"
|
||||
msgstr "Elimina spazio di lavoro"
|
||||
|
||||
@@ -569,7 +569,7 @@ msgstr "ha eliminato l'elemento <0>{0}</0> della checklist"
|
||||
msgid "Design"
|
||||
msgstr "Design"
|
||||
|
||||
#: src/views/settings/index.tsx:250
|
||||
#: src/views/settings/index.tsx:284
|
||||
msgid "Disconnect Trello"
|
||||
msgstr "Disconnetti Trello"
|
||||
|
||||
@@ -577,7 +577,7 @@ msgstr "Disconnetti Trello"
|
||||
msgid "Discuss and collaborate on cards."
|
||||
msgstr "Discuti e collabora sulle schede."
|
||||
|
||||
#: src/views/settings/index.tsx:151
|
||||
#: src/views/settings/index.tsx:173
|
||||
msgid "Display name"
|
||||
msgstr "Nome visualizzato"
|
||||
|
||||
@@ -647,7 +647,7 @@ msgstr "Modifica"
|
||||
msgid "email"
|
||||
msgstr "email"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:163
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
|
||||
@@ -695,12 +695,12 @@ msgstr "Errore durante l'eliminazione dell'etichetta"
|
||||
msgid "Error deleting workspace"
|
||||
msgstr "Errore durante l'eliminazione dell'area di lavoro"
|
||||
|
||||
#: src/views/settings/index.tsx:101
|
||||
#: src/views/settings/index.tsx:123
|
||||
msgid "Error disconnecting Trello"
|
||||
msgstr "Errore durante la disconnessione da Trello"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:76
|
||||
#: src/views/members/components/InviteMemberForm.tsx:82
|
||||
#: src/views/members/components/InviteMemberForm.tsx:71
|
||||
#: src/views/members/components/InviteMemberForm.tsx:77
|
||||
msgid "Error inviting member"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
msgstr "Gratuito"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:192
|
||||
#: src/views/members/index.tsx:184
|
||||
#: src/views/members/components/InviteMemberForm.tsx:193
|
||||
#: src/views/members/index.tsx:189
|
||||
msgid "Free Plan"
|
||||
msgstr "Piano gratuito"
|
||||
|
||||
@@ -950,24 +951,24 @@ msgstr "Integrazioni"
|
||||
msgid "Interviewing"
|
||||
msgstr "Colloquio"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:45
|
||||
#: src/views/members/components/InviteMemberForm.tsx:40
|
||||
msgid "Invalid email address"
|
||||
msgstr "Indirizzo email non valido"
|
||||
|
||||
#: src/views/members/index.tsx:193
|
||||
#: src/views/members/index.tsx:201
|
||||
msgid "Invite"
|
||||
msgstr "Invita"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:207
|
||||
#: src/views/members/components/InviteMemberForm.tsx:208
|
||||
msgid "Invite another"
|
||||
msgstr "Invita un altro"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:112
|
||||
#: src/views/members/components/InviteMemberForm.tsx:231
|
||||
#: src/views/members/components/InviteMemberForm.tsx:233
|
||||
msgid "Invite member"
|
||||
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."
|
||||
msgstr "L'invito di membri richiede un Piano Team. Sarai reindirizzato per aggiornare il tuo spazio di lavoro."
|
||||
|
||||
@@ -998,10 +999,18 @@ msgstr "Etichette"
|
||||
msgid "Labels & Filters"
|
||||
msgstr "Etichette & Filtri"
|
||||
|
||||
#: src/views/settings/index.tsx:187
|
||||
#: src/views/settings/index.tsx:221
|
||||
msgid "Language"
|
||||
msgstr "Lingua"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:67
|
||||
msgid "Launch offer"
|
||||
msgstr "Offerta di lancio"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:98
|
||||
msgid "Launch offer: unlimited seats for just $29/month with Pro"
|
||||
msgstr "Offerta di lancio: posti illimitati a soli $29/mese con Pro"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Learning"
|
||||
msgstr "Apprendimento"
|
||||
@@ -1067,12 +1076,12 @@ msgstr "Media priorità"
|
||||
#: src/views/board/components/Filters.tsx:93
|
||||
#: src/views/board/components/NewCardForm.tsx:357
|
||||
#: src/views/card/index.tsx:125
|
||||
#: src/views/members/index.tsx:171
|
||||
#: src/views/members/index.tsx:172
|
||||
msgid "Members"
|
||||
msgstr "Membri"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/members/index.tsx:167
|
||||
#: src/views/members/index.tsx:168
|
||||
msgid "Members | {0}"
|
||||
msgstr "Membri | {0}"
|
||||
|
||||
@@ -1080,7 +1089,7 @@ msgstr "Membri | {0}"
|
||||
msgid "Monthly"
|
||||
msgstr "Mensile"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:92
|
||||
#: src/views/members/components/InviteMemberForm.tsx:93
|
||||
msgid "monthly billing"
|
||||
msgstr "fatturazione mensile"
|
||||
|
||||
@@ -1180,11 +1189,11 @@ msgstr "Offerta"
|
||||
msgid "Onboarding"
|
||||
msgstr "Inserimento"
|
||||
|
||||
#: src/views/settings/index.tsx:312
|
||||
#: src/views/settings/index.tsx:346
|
||||
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."
|
||||
|
||||
#: src/views/settings/index.tsx:275
|
||||
#: src/views/settings/index.tsx:309
|
||||
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."
|
||||
|
||||
@@ -1216,11 +1225,11 @@ msgstr "La password deve contenere almeno 8 caratteri"
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Le password non corrispondono"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:96
|
||||
#: src/views/home/components/Pricing.tsx:101
|
||||
msgid "Payment frequency"
|
||||
msgstr "Frequenza di pagamento"
|
||||
|
||||
#: src/views/members/index.tsx:128
|
||||
#: src/views/members/index.tsx:129
|
||||
msgid "Pending"
|
||||
msgstr "In attesa"
|
||||
|
||||
@@ -1282,8 +1291,8 @@ msgstr "Seleziona un file da caricare."
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/index.tsx:173
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:83
|
||||
#: src/views/members/components/InviteMemberForm.tsx:133
|
||||
#: src/views/members/components/InviteMemberForm.tsx:78
|
||||
#: src/views/members/components/InviteMemberForm.tsx:131
|
||||
#: src/views/settings/components/Avatar.tsx:40
|
||||
#: src/views/settings/components/Avatar.tsx:98
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
||||
@@ -1292,6 +1301,7 @@ msgstr "Seleziona un file da caricare."
|
||||
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:62
|
||||
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:57
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:74
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:42
|
||||
msgid "Please try again later, or contact customer support."
|
||||
msgstr "Riprova più tardi o contatta l'assistenza clienti."
|
||||
|
||||
@@ -1302,6 +1312,7 @@ msgid "Pricing"
|
||||
msgstr "Prezzi"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:56
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:86
|
||||
msgid "Priority email support"
|
||||
msgstr "Supporto email prioritario"
|
||||
|
||||
@@ -1313,11 +1324,19 @@ msgstr "Informativa sulla privacy"
|
||||
msgid "Private"
|
||||
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
|
||||
msgid "Profile image updated"
|
||||
msgstr "Immagine del profilo aggiornata"
|
||||
|
||||
#: src/views/settings/index.tsx:146
|
||||
#: src/views/settings/index.tsx:168
|
||||
msgid "Profile picture"
|
||||
msgstr "Immagine del profilo"
|
||||
|
||||
@@ -1353,7 +1372,7 @@ msgstr "Remoto"
|
||||
msgid "Remove"
|
||||
msgstr "Rimuovi"
|
||||
|
||||
#: src/views/members/index.tsx:142
|
||||
#: src/views/members/index.tsx:143
|
||||
msgid "Remove member"
|
||||
msgstr "Rimuovi membro"
|
||||
|
||||
@@ -1409,7 +1428,7 @@ msgstr "Revoca"
|
||||
msgid "Roadmap"
|
||||
msgstr "Roadmap"
|
||||
|
||||
#: src/views/members/index.tsx:215
|
||||
#: src/views/members/index.tsx:223
|
||||
msgid "Role"
|
||||
msgstr "Ruolo"
|
||||
|
||||
@@ -1458,12 +1477,12 @@ msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/components/SideNavigation.tsx:78
|
||||
#: src/views/settings/index.tsx:140
|
||||
#: src/views/settings/index.tsx:162
|
||||
msgid "Settings"
|
||||
msgstr "Impostazioni"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/settings/index.tsx:136
|
||||
#: src/views/settings/index.tsx:158
|
||||
msgid "Settings | {0}"
|
||||
msgstr "Impostazioni | {0}"
|
||||
|
||||
@@ -1514,6 +1533,10 @@ msgstr "Metti una stella su Github"
|
||||
msgid "Success"
|
||||
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
|
||||
msgid "Support"
|
||||
msgstr "Supporto"
|
||||
@@ -1526,8 +1549,8 @@ msgstr "Sostieni lo sviluppo del progetto"
|
||||
msgid "System"
|
||||
msgstr "Sistema"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:183
|
||||
#: src/views/members/index.tsx:184
|
||||
#: src/views/members/components/InviteMemberForm.tsx:182
|
||||
#: src/views/members/index.tsx:188
|
||||
msgid "Team Plan"
|
||||
msgstr "Piano Team"
|
||||
|
||||
@@ -1612,7 +1635,7 @@ msgstr "Attiva/disattiva menu"
|
||||
msgid "Track all card changes with detailed activity history."
|
||||
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:116
|
||||
msgid "Trello disconnected"
|
||||
msgstr "Trello disconnesso"
|
||||
|
||||
@@ -1743,6 +1766,10 @@ msgstr "Commenti illimitati"
|
||||
msgid "Unlimited lists"
|
||||
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/settings/components/UpdateDisplayNameForm.tsx:79
|
||||
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
|
||||
@@ -1772,11 +1799,16 @@ msgstr "ha aggiornato il titolo"
|
||||
msgid "updated the title to <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"
|
||||
msgstr "Aggiorna"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:222
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:52
|
||||
#: src/views/settings/index.tsx:213
|
||||
msgid "Upgrade to Pro"
|
||||
msgstr "Passa a Pro"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:224
|
||||
msgid "Upgrade to Team Plan"
|
||||
msgstr "Passa al Piano Team"
|
||||
|
||||
@@ -1801,11 +1833,11 @@ msgstr "L'URL deve contenere almeno 3 caratteri"
|
||||
msgid "Use template"
|
||||
msgstr "Usa template"
|
||||
|
||||
#: src/views/members/index.tsx:209
|
||||
#: src/views/members/index.tsx:217
|
||||
msgid "User"
|
||||
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"
|
||||
msgstr "L'utente è già membro di questo spazio di lavoro"
|
||||
|
||||
@@ -1813,11 +1845,11 @@ msgstr "L'utente è già membro di questo spazio di lavoro"
|
||||
msgid "Video"
|
||||
msgstr "Video"
|
||||
|
||||
#: src/views/settings/index.tsx:262
|
||||
#: src/views/settings/index.tsx:296
|
||||
msgid "View and manage your API keys."
|
||||
msgstr "Visualizza e gestisci le tue chiavi API."
|
||||
|
||||
#: src/views/settings/index.tsx:201
|
||||
#: src/views/settings/index.tsx:235
|
||||
msgid "View and manage your billing and subscription."
|
||||
msgstr "Visualizza e gestisci la tua fatturazione e abbonamento."
|
||||
|
||||
@@ -1877,7 +1909,7 @@ msgstr "Spazio di lavoro"
|
||||
msgid "Workspace deleted"
|
||||
msgstr "Spazio di lavoro eliminato"
|
||||
|
||||
#: src/views/settings/index.tsx:177
|
||||
#: src/views/settings/index.tsx:199
|
||||
msgid "Workspace description"
|
||||
msgstr "Descrizione dello spazio di lavoro"
|
||||
|
||||
@@ -1899,7 +1931,7 @@ msgid "Workspace members"
|
||||
msgstr "Membri del workspace"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:81
|
||||
#: src/views/settings/index.tsx:158
|
||||
#: src/views/settings/index.tsx:180
|
||||
msgid "Workspace name"
|
||||
msgstr "Nome dello spazio di lavoro"
|
||||
|
||||
@@ -1919,7 +1951,7 @@ msgstr "Nome dello spazio di lavoro aggiornato"
|
||||
msgid "Workspace slug updated"
|
||||
msgstr "Slug dell'area di lavoro aggiornato"
|
||||
|
||||
#: src/views/settings/index.tsx:167
|
||||
#: src/views/settings/index.tsx:189
|
||||
msgid "Workspace URL"
|
||||
msgstr "URL dello spazio di lavoro"
|
||||
|
||||
@@ -1935,7 +1967,7 @@ msgstr "Annuale"
|
||||
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."
|
||||
|
||||
#: src/views/settings/index.tsx:294
|
||||
#: src/views/settings/index.tsx:328
|
||||
msgid "You are about to change your password."
|
||||
msgstr "Stai per cambiare la tua password."
|
||||
|
||||
@@ -1959,6 +1991,10 @@ msgstr "Hai effettuato l'accesso con successo."
|
||||
msgid "You have been signed up successfully."
|
||||
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
|
||||
msgid "Your account has been deleted."
|
||||
msgstr "Il tuo account è stato eliminato."
|
||||
@@ -1979,11 +2015,11 @@ msgstr "La tua password è stata modificata."
|
||||
msgid "Your profile image has been updated."
|
||||
msgstr "La tua immagine del profilo è stata aggiornata."
|
||||
|
||||
#: src/views/settings/index.tsx:95
|
||||
#: src/views/settings/index.tsx:117
|
||||
msgid "Your Trello account has been disconnected."
|
||||
msgstr "Il tuo account Trello è stato disconnesso."
|
||||
|
||||
#: src/views/settings/index.tsx:244
|
||||
#: src/views/settings/index.tsx:278
|
||||
msgid "Your Trello account is connected."
|
||||
msgstr "Il tuo account Trello è connesso."
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -36,12 +36,12 @@ msgstr "{0} labels"
|
||||
msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({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:106
|
||||
#: src/views/members/components/InviteMemberForm.tsx:92
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
msgid "$10/month"
|
||||
msgstr "$10/maand"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:106
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
msgid "$8/month"
|
||||
msgstr "$8/maand"
|
||||
|
||||
@@ -97,7 +97,7 @@ msgid "Add label"
|
||||
msgstr "Label toevoegen"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:149
|
||||
#: src/views/members/components/InviteMemberForm.tsx:147
|
||||
msgid "Add member"
|
||||
msgstr "Lid toevoegen"
|
||||
|
||||
@@ -132,7 +132,7 @@ msgstr "heeft checklistitem <0>{0}</0> toegevoegd"
|
||||
msgid "added label <0>{0}</0>"
|
||||
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."
|
||||
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>"
|
||||
msgstr "Heb je al een account? <0><1>Log in</1></0>"
|
||||
|
||||
#: src/views/settings/index.tsx:102
|
||||
#: src/views/settings/index.tsx:124
|
||||
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."
|
||||
|
||||
@@ -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."
|
||||
msgstr "Er is een onverwachte fout opgetreden. Probeer het later opnieuw."
|
||||
|
||||
#: src/views/settings/index.tsx:259
|
||||
#: src/views/settings/index.tsx:293
|
||||
msgid "API keys"
|
||||
msgstr "API-sleutels"
|
||||
|
||||
@@ -218,20 +218,20 @@ msgstr "Backlog"
|
||||
msgid "Basic Kanban"
|
||||
msgstr "Basis kanban"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:107
|
||||
#: src/views/members/components/InviteMemberForm.tsx:105
|
||||
msgid "billed annually"
|
||||
msgstr "jaarlijks gefactureerd"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:107
|
||||
#: src/views/members/components/InviteMemberForm.tsx:105
|
||||
msgid "billed monthly"
|
||||
msgstr "maandelijks gefactureerd"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:55
|
||||
#: src/views/settings/index.tsx:198
|
||||
#: src/views/settings/index.tsx:232
|
||||
msgid "Billing"
|
||||
msgstr "Facturering"
|
||||
|
||||
#: src/views/settings/index.tsx:208
|
||||
#: src/views/settings/index.tsx:242
|
||||
msgid "Billing portal"
|
||||
msgstr "Factureringsportaal"
|
||||
|
||||
@@ -243,6 +243,10 @@ msgstr "Blogbericht"
|
||||
msgid "Board"
|
||||
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
|
||||
msgid "Board name cannot exceed 100 characters"
|
||||
msgstr "Bordnaam mag niet langer zijn dan 100 tekens"
|
||||
@@ -309,9 +313,9 @@ msgstr "Bugrapport"
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:55
|
||||
#: 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/DeleteWorkspaceConfirmation.tsx:98
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:94
|
||||
msgid "Cancel"
|
||||
msgstr "Annuleren"
|
||||
|
||||
@@ -325,12 +329,12 @@ msgstr "Kaarttitel"
|
||||
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178
|
||||
#: src/views/settings/index.tsx:291
|
||||
#: src/views/settings/index.tsx:301
|
||||
#: src/views/settings/index.tsx:325
|
||||
#: src/views/settings/index.tsx:335
|
||||
msgid "Change Password"
|
||||
msgstr "Wachtwoord wijzigen"
|
||||
|
||||
#: src/views/settings/index.tsx:190
|
||||
#: src/views/settings/index.tsx:224
|
||||
msgid "Change the language of the app."
|
||||
msgstr "Wijzig de taal van de app."
|
||||
|
||||
@@ -389,16 +393,12 @@ msgstr "heeft een checklistitem voltooid"
|
||||
msgid "completed checklist item <0>{0}</0>"
|
||||
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
|
||||
msgid "Confirm your new password"
|
||||
msgstr "Bevestig je nieuwe wachtwoord"
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:157
|
||||
#: src/views/settings/index.tsx:235
|
||||
#: src/views/settings/index.tsx:269
|
||||
msgid "Connect Trello"
|
||||
msgstr "Verbind Trello"
|
||||
|
||||
@@ -406,7 +406,7 @@ msgstr "Verbind Trello"
|
||||
msgid "Connect your favorite tools to streamline your workflow."
|
||||
msgstr "Verbind je favoriete tools om je werkstroom te stroomlijnen."
|
||||
|
||||
#: src/views/settings/index.tsx:222
|
||||
#: src/views/settings/index.tsx:256
|
||||
msgid "Connect your Trello account to import boards."
|
||||
msgstr "Verbind je Trello-account om borden te importeren."
|
||||
|
||||
@@ -499,9 +499,9 @@ msgstr "Huidig wachtwoord is vereist"
|
||||
msgid "Custom domain"
|
||||
msgstr "Aangepast domein"
|
||||
|
||||
#: src/views/settings/components/CustomURLConfirmation.tsx:45
|
||||
msgid "Custom URLs are a premium feature. You'll be directed to upgrade your account."
|
||||
msgstr "Aangepaste URL's zijn een premium functie. Je wordt doorgestuurd om je account te upgraden."
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:74
|
||||
msgid "Custom workspace URL"
|
||||
msgstr "Aangepaste werkruimte-URL"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:41
|
||||
msgid "Customer Support"
|
||||
@@ -520,8 +520,8 @@ msgid "Delete"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96
|
||||
#: src/views/settings/index.tsx:309
|
||||
#: src/views/settings/index.tsx:319
|
||||
#: src/views/settings/index.tsx:343
|
||||
#: src/views/settings/index.tsx:353
|
||||
msgid "Delete account"
|
||||
msgstr "Account verwijderen"
|
||||
|
||||
@@ -542,8 +542,8 @@ msgid "Delete list"
|
||||
msgstr "Lijst verwijderen"
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
|
||||
#: src/views/settings/index.tsx:272
|
||||
#: src/views/settings/index.tsx:283
|
||||
#: src/views/settings/index.tsx:306
|
||||
#: src/views/settings/index.tsx:317
|
||||
msgid "Delete workspace"
|
||||
msgstr "Werkruimte verwijderen"
|
||||
|
||||
@@ -569,7 +569,7 @@ msgstr "heeft checklistitem <0>{0}</0> verwijderd"
|
||||
msgid "Design"
|
||||
msgstr "Ontwerp"
|
||||
|
||||
#: src/views/settings/index.tsx:250
|
||||
#: src/views/settings/index.tsx:284
|
||||
msgid "Disconnect Trello"
|
||||
msgstr "Trello ontkoppelen"
|
||||
|
||||
@@ -577,7 +577,7 @@ msgstr "Trello ontkoppelen"
|
||||
msgid "Discuss and collaborate on cards."
|
||||
msgstr "Bespreek en werk samen aan kaarten."
|
||||
|
||||
#: src/views/settings/index.tsx:151
|
||||
#: src/views/settings/index.tsx:173
|
||||
msgid "Display name"
|
||||
msgstr "Weergavenaam"
|
||||
|
||||
@@ -647,7 +647,7 @@ msgstr "Bewerken"
|
||||
msgid "email"
|
||||
msgstr "e-mail"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:163
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
msgid "Email"
|
||||
msgstr "E-mail"
|
||||
|
||||
@@ -695,12 +695,12 @@ msgstr "Fout bij het verwijderen van label"
|
||||
msgid "Error deleting workspace"
|
||||
msgstr "Fout bij verwijderen werkruimte"
|
||||
|
||||
#: src/views/settings/index.tsx:101
|
||||
#: src/views/settings/index.tsx:123
|
||||
msgid "Error disconnecting Trello"
|
||||
msgstr "Fout bij ontkoppelen van Trello"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:76
|
||||
#: src/views/members/components/InviteMemberForm.tsx:82
|
||||
#: src/views/members/components/InviteMemberForm.tsx:71
|
||||
#: src/views/members/components/InviteMemberForm.tsx:77
|
||||
msgid "Error inviting member"
|
||||
msgstr "Fout bij het uitnodigen van lid"
|
||||
|
||||
@@ -724,7 +724,8 @@ msgstr "Fout bij bijwerken naam werkruimte"
|
||||
msgid "Error updating workspace 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"
|
||||
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"
|
||||
msgstr "Gratis"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:192
|
||||
#: src/views/members/index.tsx:184
|
||||
#: src/views/members/components/InviteMemberForm.tsx:193
|
||||
#: src/views/members/index.tsx:189
|
||||
msgid "Free Plan"
|
||||
msgstr "Gratis plan"
|
||||
|
||||
@@ -950,24 +951,24 @@ msgstr "Integraties"
|
||||
msgid "Interviewing"
|
||||
msgstr "Interviewen"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:45
|
||||
#: src/views/members/components/InviteMemberForm.tsx:40
|
||||
msgid "Invalid email address"
|
||||
msgstr "Ongeldig e-mailadres"
|
||||
|
||||
#: src/views/members/index.tsx:193
|
||||
#: src/views/members/index.tsx:201
|
||||
msgid "Invite"
|
||||
msgstr "Uitnodigen"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:207
|
||||
#: src/views/members/components/InviteMemberForm.tsx:208
|
||||
msgid "Invite another"
|
||||
msgstr "Nog iemand uitnodigen"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:112
|
||||
#: src/views/members/components/InviteMemberForm.tsx:231
|
||||
#: src/views/members/components/InviteMemberForm.tsx:233
|
||||
msgid "Invite member"
|
||||
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."
|
||||
msgstr "Voor het uitnodigen van leden is een teamplan vereist. Je wordt doorgestuurd om je werkruimte te upgraden."
|
||||
|
||||
@@ -998,10 +999,18 @@ msgstr "Labels"
|
||||
msgid "Labels & Filters"
|
||||
msgstr "Labels & filters"
|
||||
|
||||
#: src/views/settings/index.tsx:187
|
||||
#: src/views/settings/index.tsx:221
|
||||
msgid "Language"
|
||||
msgstr "Taal"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:67
|
||||
msgid "Launch offer"
|
||||
msgstr "Introductieaanbieding"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:98
|
||||
msgid "Launch offer: unlimited seats for just $29/month with Pro"
|
||||
msgstr "Introductieaanbieding: onbeperkt aantal gebruikers voor slechts $29/maand met Pro"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Learning"
|
||||
msgstr "Leren"
|
||||
@@ -1067,12 +1076,12 @@ msgstr "Gemiddelde prioriteit"
|
||||
#: src/views/board/components/Filters.tsx:93
|
||||
#: src/views/board/components/NewCardForm.tsx:357
|
||||
#: src/views/card/index.tsx:125
|
||||
#: src/views/members/index.tsx:171
|
||||
#: src/views/members/index.tsx:172
|
||||
msgid "Members"
|
||||
msgstr "Leden"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/members/index.tsx:167
|
||||
#: src/views/members/index.tsx:168
|
||||
msgid "Members | {0}"
|
||||
msgstr "Leden | {0}"
|
||||
|
||||
@@ -1080,7 +1089,7 @@ msgstr "Leden | {0}"
|
||||
msgid "Monthly"
|
||||
msgstr "Maandelijks"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:92
|
||||
#: src/views/members/components/InviteMemberForm.tsx:93
|
||||
msgid "monthly billing"
|
||||
msgstr "maandelijkse facturering"
|
||||
|
||||
@@ -1180,11 +1189,11 @@ msgstr "Aanbod"
|
||||
msgid "Onboarding"
|
||||
msgstr "Inwerktraject"
|
||||
|
||||
#: src/views/settings/index.tsx:312
|
||||
#: src/views/settings/index.tsx:346
|
||||
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."
|
||||
|
||||
#: src/views/settings/index.tsx:275
|
||||
#: src/views/settings/index.tsx:309
|
||||
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."
|
||||
|
||||
@@ -1216,11 +1225,11 @@ msgstr "Wachtwoord moet minimaal 8 tekens bevatten"
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Wachtwoorden komen niet overeen"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:96
|
||||
#: src/views/home/components/Pricing.tsx:101
|
||||
msgid "Payment frequency"
|
||||
msgstr "Betalingsfrequentie"
|
||||
|
||||
#: src/views/members/index.tsx:128
|
||||
#: src/views/members/index.tsx:129
|
||||
msgid "Pending"
|
||||
msgstr "In behandeling"
|
||||
|
||||
@@ -1282,8 +1291,8 @@ msgstr "Selecteer een bestand om te uploaden."
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/index.tsx:173
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:83
|
||||
#: src/views/members/components/InviteMemberForm.tsx:133
|
||||
#: src/views/members/components/InviteMemberForm.tsx:78
|
||||
#: src/views/members/components/InviteMemberForm.tsx:131
|
||||
#: src/views/settings/components/Avatar.tsx:40
|
||||
#: src/views/settings/components/Avatar.tsx:98
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
||||
@@ -1292,6 +1301,7 @@ msgstr "Selecteer een bestand om te uploaden."
|
||||
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:62
|
||||
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:57
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:74
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:42
|
||||
msgid "Please try again later, or contact customer support."
|
||||
msgstr "Probeer het later opnieuw of neem contact op met de klantenservice."
|
||||
|
||||
@@ -1302,6 +1312,7 @@ msgid "Pricing"
|
||||
msgstr "Prijzen"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:56
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:86
|
||||
msgid "Priority email support"
|
||||
msgstr "Prioriteit e-mailondersteuning"
|
||||
|
||||
@@ -1313,11 +1324,19 @@ msgstr "Privacybeleid"
|
||||
msgid "Private"
|
||||
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
|
||||
msgid "Profile image updated"
|
||||
msgstr "Profielafbeelding bijgewerkt"
|
||||
|
||||
#: src/views/settings/index.tsx:146
|
||||
#: src/views/settings/index.tsx:168
|
||||
msgid "Profile picture"
|
||||
msgstr "Profielfoto"
|
||||
|
||||
@@ -1353,7 +1372,7 @@ msgstr "Op afstand"
|
||||
msgid "Remove"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
#: src/views/members/index.tsx:142
|
||||
#: src/views/members/index.tsx:143
|
||||
msgid "Remove member"
|
||||
msgstr "Lid verwijderen"
|
||||
|
||||
@@ -1409,7 +1428,7 @@ msgstr "Intrekken"
|
||||
msgid "Roadmap"
|
||||
msgstr "Roadmap"
|
||||
|
||||
#: src/views/members/index.tsx:215
|
||||
#: src/views/members/index.tsx:223
|
||||
msgid "Role"
|
||||
msgstr "Rol"
|
||||
|
||||
@@ -1458,12 +1477,12 @@ msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/components/SideNavigation.tsx:78
|
||||
#: src/views/settings/index.tsx:140
|
||||
#: src/views/settings/index.tsx:162
|
||||
msgid "Settings"
|
||||
msgstr "Instellingen"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/settings/index.tsx:136
|
||||
#: src/views/settings/index.tsx:158
|
||||
msgid "Settings | {0}"
|
||||
msgstr "Instellingen | {0}"
|
||||
|
||||
@@ -1514,6 +1533,10 @@ msgstr "Star op Github"
|
||||
msgid "Success"
|
||||
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
|
||||
msgid "Support"
|
||||
msgstr "Ondersteuning"
|
||||
@@ -1526,8 +1549,8 @@ msgstr "Ondersteun de ontwikkeling van het project"
|
||||
msgid "System"
|
||||
msgstr "Systeem"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:183
|
||||
#: src/views/members/index.tsx:184
|
||||
#: src/views/members/components/InviteMemberForm.tsx:182
|
||||
#: src/views/members/index.tsx:188
|
||||
msgid "Team Plan"
|
||||
msgstr "Teamplan"
|
||||
|
||||
@@ -1612,7 +1635,7 @@ msgstr "Menu in-/uitschakelen"
|
||||
msgid "Track all card changes with detailed activity history."
|
||||
msgstr "Volg alle kaartwijzigingen met gedetailleerde activiteitengeschiedenis."
|
||||
|
||||
#: src/views/settings/index.tsx:94
|
||||
#: src/views/settings/index.tsx:116
|
||||
msgid "Trello disconnected"
|
||||
msgstr "Trello ontkoppeld"
|
||||
|
||||
@@ -1743,6 +1766,10 @@ msgstr "Onbeperkt aantal opmerkingen"
|
||||
msgid "Unlimited lists"
|
||||
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/settings/components/UpdateDisplayNameForm.tsx:79
|
||||
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
|
||||
@@ -1772,11 +1799,16 @@ msgstr "titel bijgewerkt"
|
||||
msgid "updated the title to <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"
|
||||
msgstr "Upgraden"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:222
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:52
|
||||
#: src/views/settings/index.tsx:213
|
||||
msgid "Upgrade to Pro"
|
||||
msgstr "Upgraden naar Pro"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:224
|
||||
msgid "Upgrade to Team Plan"
|
||||
msgstr "Upgraden naar teamplan"
|
||||
|
||||
@@ -1801,11 +1833,11 @@ msgstr "URL moet minimaal 3 tekens lang zijn"
|
||||
msgid "Use template"
|
||||
msgstr "Sjabloon gebruiken"
|
||||
|
||||
#: src/views/members/index.tsx:209
|
||||
#: src/views/members/index.tsx:217
|
||||
msgid "User"
|
||||
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"
|
||||
msgstr "Gebruiker is al lid van deze werkruimte"
|
||||
|
||||
@@ -1813,11 +1845,11 @@ msgstr "Gebruiker is al lid van deze werkruimte"
|
||||
msgid "Video"
|
||||
msgstr "Video"
|
||||
|
||||
#: src/views/settings/index.tsx:262
|
||||
#: src/views/settings/index.tsx:296
|
||||
msgid "View and manage your API keys."
|
||||
msgstr "Bekijk en beheer je API-sleutels."
|
||||
|
||||
#: src/views/settings/index.tsx:201
|
||||
#: src/views/settings/index.tsx:235
|
||||
msgid "View and manage your billing and subscription."
|
||||
msgstr "Bekijk en beheer je facturering en abonnement."
|
||||
|
||||
@@ -1877,7 +1909,7 @@ msgstr "Werkruimte"
|
||||
msgid "Workspace deleted"
|
||||
msgstr "Werkruimte verwijderd"
|
||||
|
||||
#: src/views/settings/index.tsx:177
|
||||
#: src/views/settings/index.tsx:199
|
||||
msgid "Workspace description"
|
||||
msgstr "Werkruimte beschrijving"
|
||||
|
||||
@@ -1899,7 +1931,7 @@ msgid "Workspace members"
|
||||
msgstr "Werkruimteleden"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:81
|
||||
#: src/views/settings/index.tsx:158
|
||||
#: src/views/settings/index.tsx:180
|
||||
msgid "Workspace name"
|
||||
msgstr "Naam werkruimte"
|
||||
|
||||
@@ -1919,7 +1951,7 @@ msgstr "Werkruimtenaam bijgewerkt"
|
||||
msgid "Workspace slug updated"
|
||||
msgstr "Werkruimte-slug bijgewerkt"
|
||||
|
||||
#: src/views/settings/index.tsx:167
|
||||
#: src/views/settings/index.tsx:189
|
||||
msgid "Workspace URL"
|
||||
msgstr "Werkruimte URL"
|
||||
|
||||
@@ -1935,7 +1967,7 @@ msgstr "Jaarlijks"
|
||||
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."
|
||||
|
||||
#: src/views/settings/index.tsx:294
|
||||
#: src/views/settings/index.tsx:328
|
||||
msgid "You are about to change your password."
|
||||
msgstr "Je staat op het punt je wachtwoord te wijzigen."
|
||||
|
||||
@@ -1959,6 +1991,10 @@ msgstr "Je bent succesvol ingelogd."
|
||||
msgid "You have been signed up successfully."
|
||||
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
|
||||
msgid "Your account has been deleted."
|
||||
msgstr "Je account is verwijderd."
|
||||
@@ -1979,11 +2015,11 @@ msgstr "Je wachtwoord is gewijzigd."
|
||||
msgid "Your profile image has been updated."
|
||||
msgstr "Je profielafbeelding is bijgewerkt."
|
||||
|
||||
#: src/views/settings/index.tsx:95
|
||||
#: src/views/settings/index.tsx:117
|
||||
msgid "Your Trello account has been disconnected."
|
||||
msgstr "Je Trello-account is ontkoppeld."
|
||||
|
||||
#: src/views/settings/index.tsx:244
|
||||
#: src/views/settings/index.tsx:278
|
||||
msgid "Your Trello account is connected."
|
||||
msgstr "Je Trello-account is verbonden."
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -3,6 +3,7 @@ import { env } from "next-runtime-env";
|
||||
import { z } from "zod";
|
||||
|
||||
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 { createStripeClient } from "@kan/stripe";
|
||||
|
||||
@@ -40,17 +41,22 @@ export default async function handler(
|
||||
const body = req.body as CheckoutSessionRequest;
|
||||
const { successUrl, cancelUrl, slug, workspacePublicId } = body;
|
||||
|
||||
if (!successUrl || !cancelUrl || !slug || !workspacePublicId) {
|
||||
if (!successUrl || !cancelUrl || !workspacePublicId) {
|
||||
return res.status(400).json({ error: "Missing required fields" });
|
||||
}
|
||||
|
||||
const slugResult = workspaceSlugSchema.safeParse(slug);
|
||||
if (slug) {
|
||||
const slugResult = workspaceSlugSchema.safeParse(slug);
|
||||
|
||||
if (!slugResult.success) {
|
||||
return new Response(JSON.stringify({ error: "Invalid workspace slug" }), {
|
||||
status: 400,
|
||||
headers: { "Content-Type": "application/json" },
|
||||
});
|
||||
if (!slugResult.success) {
|
||||
return new Response(
|
||||
JSON.stringify({ error: "Invalid workspace slug" }),
|
||||
{
|
||||
status: 400,
|
||||
headers: { "Content-Type": "application/json" },
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
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({
|
||||
mode: "subscription",
|
||||
line_items: [
|
||||
{
|
||||
price: process.env.STRIPE_PRO_PLAN_PRICE_ID,
|
||||
price: process.env.STRIPE_PRO_PLAN_MONTHLY_PRICE_ID,
|
||||
quantity: 1,
|
||||
},
|
||||
],
|
||||
success_url: `${env("NEXT_PUBLIC_BASE_URL")}${successUrl}`,
|
||||
cancel_url: `${env("NEXT_PUBLIC_BASE_URL")}${cancelUrl}`,
|
||||
client_reference_id: workspacePublicId,
|
||||
customer: user.stripeCustomerId ?? undefined,
|
||||
metadata: {
|
||||
workspaceSlug: slug,
|
||||
...(slug && { workspaceSlug: slug }),
|
||||
workspacePublicId,
|
||||
userId: user.id,
|
||||
subscriptionId,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ export default async function handler(
|
||||
const event = stripe.webhooks.constructEvent(
|
||||
rawBody,
|
||||
sig,
|
||||
process.env.STRIPE_WEBHOOK_SECRET!,
|
||||
process.env.STRIPE_WEBHOOK_SECRET_LEGACY!,
|
||||
);
|
||||
|
||||
const { db } = await createNextApiContext(req);
|
||||
@@ -47,9 +47,9 @@ export default async function handler(
|
||||
|
||||
const metaData = checkoutSession.metadata;
|
||||
|
||||
if (metaData?.workspacePublicId && metaData.workspaceSlug) {
|
||||
if (metaData?.workspacePublicId) {
|
||||
await workspaceRepo.update(db, metaData.workspacePublicId, {
|
||||
slug: metaData.workspaceSlug,
|
||||
...(metaData.workspaceSlug && { slug: metaData.workspaceSlug }),
|
||||
plan: "pro",
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import PatternedBackground from "~/components/PatternedBackground";
|
||||
import { useTheme } from "next-themes";
|
||||
|
||||
import { authClient } from "@kan/auth/client";
|
||||
|
||||
import PatternedBackground from "~/components/PatternedBackground";
|
||||
import Footer from "./Footer";
|
||||
import Header from "./Header";
|
||||
import { authClient } from "@kan/auth/client";
|
||||
|
||||
export default function Layout({ children }: { children: React.ReactNode }) {
|
||||
const { theme } = useTheme();
|
||||
@@ -18,6 +20,7 @@ export default function Layout({ children }: { children: React.ReactNode }) {
|
||||
<style jsx global>{`
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
overflow: auto;
|
||||
background-color: ${!isDarkMode ? "hsl(0deg 0% 97.3%)" : "#161616"};
|
||||
}
|
||||
`}</style>
|
||||
|
||||
@@ -92,7 +92,12 @@ const Pricing = () => {
|
||||
{t`Get started for free, with no usage limits. For collaboration, upgrade to a plan that fits the size of your team.`}
|
||||
</p>
|
||||
|
||||
<div className="mt-16 flex justify-center">
|
||||
<div className="mt-12 flex flex-col items-center justify-center">
|
||||
<div className="mb-4 flex items-center gap-2 rounded-full border bg-white px-4 py-1.5 text-center text-xs font-bold text-gray-800 dark:border-dark-300 dark:bg-white dark:text-gray-800 lg:text-sm">
|
||||
<p>
|
||||
{t`Launch offer: unlimited seats for just $29/month with Pro`}
|
||||
</p>
|
||||
</div>
|
||||
<fieldset aria-label={t`Payment frequency`}>
|
||||
<RadioGroup
|
||||
value={frequency}
|
||||
@@ -165,7 +170,7 @@ const Pricing = () => {
|
||||
!tier.showPrice && "opacity-0",
|
||||
)}
|
||||
>
|
||||
{tier.price[frequency?.value || "monthly"]}
|
||||
{tier.price[frequency?.value ?? "monthly"]}
|
||||
</span>
|
||||
{tier.showPriceSuffix && (
|
||||
<span className="text-sm/6 font-semibold text-light-50 dark:text-dark-900">
|
||||
|
||||
@@ -7,7 +7,9 @@ import { HiXMark } from "react-icons/hi2";
|
||||
import { z } from "zod";
|
||||
|
||||
import type { InviteMemberInput } from "@kan/api/types";
|
||||
import type { Subscription } from "@kan/shared/utils";
|
||||
import { authClient } from "@kan/auth/client";
|
||||
import { getSubscriptionByPlan } from "@kan/shared/utils";
|
||||
|
||||
import Button from "~/components/Button";
|
||||
import Input from "~/components/Input";
|
||||
@@ -19,20 +21,13 @@ import { api } from "~/utils/api";
|
||||
|
||||
export function InviteMemberForm({
|
||||
numberOfMembers,
|
||||
activeTeamSubscription,
|
||||
subscriptions,
|
||||
unlimitedSeats,
|
||||
userId,
|
||||
}: {
|
||||
numberOfMembers: number;
|
||||
activeTeamSubscription:
|
||||
| {
|
||||
id: number | null;
|
||||
plan: string;
|
||||
status: string;
|
||||
seats: number | null;
|
||||
periodStart: Date | null;
|
||||
periodEnd: Date | null;
|
||||
}
|
||||
| undefined;
|
||||
subscriptions: Subscription[] | undefined;
|
||||
unlimitedSeats: boolean;
|
||||
userId: string | undefined;
|
||||
}) {
|
||||
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 price = t`$10/month`;
|
||||
let billingType = t`monthly billing`;
|
||||
|
||||
if (
|
||||
activeTeamSubscription?.periodStart &&
|
||||
activeTeamSubscription?.periodEnd
|
||||
) {
|
||||
const periodStartDate = new Date(activeTeamSubscription.periodStart);
|
||||
const periodEndDate = new Date(activeTeamSubscription.periodEnd);
|
||||
if (teamSubscription?.periodStart && teamSubscription?.periodEnd) {
|
||||
const periodStartDate = new Date(teamSubscription.periodStart);
|
||||
const periodEndDate = new Date(teamSubscription.periodEnd);
|
||||
const diffInDays = Math.round(
|
||||
(periodEndDate.getTime() - periodStartDate.getTime()) /
|
||||
(1000 * 60 * 60 * 24),
|
||||
@@ -163,7 +161,8 @@ export function InviteMemberForm({
|
||||
placeholder={t`Email`}
|
||||
disabled={
|
||||
env("NEXT_PUBLIC_KAN_ENV") === "cloud" &&
|
||||
!activeTeamSubscription?.id
|
||||
!hasTeamSubscription &&
|
||||
!hasProSubscription
|
||||
}
|
||||
{...register("email", { required: true })}
|
||||
onKeyDown={async (e) => {
|
||||
@@ -177,13 +176,15 @@ export function InviteMemberForm({
|
||||
|
||||
{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">
|
||||
{activeTeamSubscription?.id ? (
|
||||
{hasTeamSubscription || hasProSubscription ? (
|
||||
<div>
|
||||
<span className="font-medium text-emerald-500 dark:text-emerald-400">
|
||||
{t`Team Plan`}
|
||||
{hasTeamSubscription ? t`Team Plan` : t`Pro Plan ∞`}
|
||||
</span>
|
||||
<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>
|
||||
</div>
|
||||
) : (
|
||||
@@ -201,7 +202,7 @@ export function InviteMemberForm({
|
||||
</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">
|
||||
{activeTeamSubscription?.id &&
|
||||
{(hasTeamSubscription || hasProSubscription) &&
|
||||
env("NEXT_PUBLIC_KAN_ENV") === "cloud" && (
|
||||
<Toggle
|
||||
label={t`Invite another`}
|
||||
@@ -213,7 +214,8 @@ export function InviteMemberForm({
|
||||
)}
|
||||
<div>
|
||||
{env("NEXT_PUBLIC_KAN_ENV") === "cloud" &&
|
||||
!activeTeamSubscription?.id ? (
|
||||
!hasTeamSubscription &&
|
||||
!hasProSubscription ? (
|
||||
<Button
|
||||
type="button"
|
||||
onClick={handleUpgrade}
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { env } from "next-runtime-env";
|
||||
import { HiEllipsisHorizontal, HiOutlinePlusSmall } from "react-icons/hi2";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
|
||||
import type { Subscription } from "@kan/shared/utils";
|
||||
import { authClient } from "@kan/auth/client";
|
||||
import { getSubscriptionByPlan, hasUnlimitedSeats } from "@kan/shared/utils";
|
||||
|
||||
import Avatar from "~/components/Avatar";
|
||||
import Button from "~/components/Button";
|
||||
@@ -11,7 +14,6 @@ import FeedbackModal from "~/components/FeedbackModal";
|
||||
import Modal from "~/components/modal";
|
||||
import { NewWorkspaceForm } from "~/components/NewWorkspaceForm";
|
||||
import { PageHead } from "~/components/PageHead";
|
||||
import { env } from "~/env";
|
||||
import { useModal } from "~/providers/modal";
|
||||
import { useWorkspace } from "~/providers/workspace";
|
||||
import { api } from "~/utils/api";
|
||||
@@ -30,13 +32,12 @@ export default function MembersPage() {
|
||||
|
||||
const { data: session } = authClient.useSession();
|
||||
|
||||
const subscription = data?.subscriptions;
|
||||
const subscriptions = data?.subscriptions as Subscription[] | undefined;
|
||||
|
||||
const activeTeamSubscription = subscription?.find(
|
||||
(sub: any) =>
|
||||
sub.status === "active" ||
|
||||
(sub.status === "trialing" && sub.plan === "team"),
|
||||
);
|
||||
const teamSubscription = getSubscriptionByPlan(subscriptions, "team");
|
||||
const proSubscription = getSubscriptionByPlan(subscriptions, "pro");
|
||||
|
||||
const unlimitedSeats = hasUnlimitedSeats(subscriptions);
|
||||
|
||||
const TableRow = ({
|
||||
memberPublicId,
|
||||
@@ -171,17 +172,24 @@ export default function MembersPage() {
|
||||
{t`Members`}
|
||||
</h1>
|
||||
<div className="flex items-center gap-3">
|
||||
{env.NEXT_PUBLIC_KAN_ENV === "cloud" && (
|
||||
{env("NEXT_PUBLIC_KAN_ENV") === "cloud" && (
|
||||
<div
|
||||
className={twMerge(
|
||||
"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-light-300 bg-light-50 text-light-1000 dark:border-dark-300 dark:bg-dark-50 dark:text-dark-900",
|
||||
)}
|
||||
>
|
||||
<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>
|
||||
</div>
|
||||
)}
|
||||
@@ -268,7 +276,8 @@ export default function MembersPage() {
|
||||
<InviteMemberForm
|
||||
userId={session?.user.id}
|
||||
numberOfMembers={data?.members.length ?? 1}
|
||||
activeTeamSubscription={activeTeamSubscription}
|
||||
subscriptions={subscriptions}
|
||||
unlimitedSeats={unlimitedSeats}
|
||||
/>
|
||||
</Modal>
|
||||
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
}
|
||||
@@ -98,7 +98,7 @@ const UpdateWorkspaceUrlForm = ({
|
||||
if (!isWorkspaceSlugAvailable?.isAvailable) return;
|
||||
|
||||
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({
|
||||
workspacePublicId,
|
||||
|
||||
@@ -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 && { 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);
|
||||
|
||||
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>
|
||||
);
|
||||
}
|
||||
@@ -2,7 +2,10 @@ import { useRouter } from "next/router";
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { env } from "next-runtime-env";
|
||||
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 FeedbackModal from "~/components/FeedbackModal";
|
||||
@@ -17,13 +20,13 @@ import { api } from "~/utils/api";
|
||||
import Avatar from "./components/Avatar";
|
||||
import { ChangePasswordFormConfirmation } from "./components/ChangePasswordConfirmation";
|
||||
import CreateAPIKeyForm from "./components/CreateAPIKeyForm";
|
||||
import { CustomURLConfirmation } from "./components/CustomURLConfirmation";
|
||||
import { DeleteAccountConfirmation } from "./components/DeleteAccountConfirmation";
|
||||
import { DeleteWorkspaceConfirmation } from "./components/DeleteWorkspaceConfirmation";
|
||||
import UpdateDisplayNameForm from "./components/UpdateDisplayNameForm";
|
||||
import UpdateWorkspaceDescriptionForm from "./components/UpdateWorkspaceDescriptionForm";
|
||||
import UpdateWorkspaceNameForm from "./components/UpdateWorkspaceNameForm";
|
||||
import UpdateWorkspaceUrlForm from "./components/UpdateWorkspaceUrlForm";
|
||||
import { UpgradeToProConfirmation } from "./components/UpgradeToProConfirmation";
|
||||
|
||||
export default function SettingsPage() {
|
||||
const { modalContentType, openModal, isOpen } = useModal();
|
||||
@@ -37,6 +40,14 @@ export default function SettingsPage() {
|
||||
env("NEXT_PUBLIC_ALLOW_CREDENTIALS")?.toLowerCase() === "true";
|
||||
const { data } = api.user.getUser.useQuery();
|
||||
|
||||
const { data: workspaceData } = api.workspace.byId.useQuery({
|
||||
workspacePublicId: workspace.publicId,
|
||||
});
|
||||
|
||||
const subscriptions = workspaceData?.subscriptions as
|
||||
| Subscription[]
|
||||
| undefined;
|
||||
|
||||
const {
|
||||
data: integrations,
|
||||
refetch: refetchIntegrations,
|
||||
@@ -84,6 +95,17 @@ export default function SettingsPage() {
|
||||
}
|
||||
}, [router.query.edit]);
|
||||
|
||||
// Open upgrade modal if upgrade=pro is in URL params
|
||||
useEffect(() => {
|
||||
if (
|
||||
router.query.upgrade === "pro" &&
|
||||
env("NEXT_PUBLIC_KAN_ENV") === "cloud" &&
|
||||
!hasActiveSubscription(subscriptions, "pro")
|
||||
) {
|
||||
openModal("UPGRADE_TO_PRO");
|
||||
}
|
||||
}, [router.query.upgrade, subscriptions, openModal]);
|
||||
|
||||
const { mutateAsync: disconnectTrello } =
|
||||
api.integration.disconnect.useMutation({
|
||||
onSuccess: () => {
|
||||
@@ -180,6 +202,18 @@ export default function SettingsPage() {
|
||||
workspacePublicId={workspace.publicId}
|
||||
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 className="mb-8 border-t border-light-300 dark:border-dark-300">
|
||||
@@ -346,9 +380,12 @@ export default function SettingsPage() {
|
||||
|
||||
<Modal
|
||||
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
|
||||
|
||||
@@ -22,6 +22,11 @@ services:
|
||||
# Stripe
|
||||
- STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY}
|
||||
- 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
|
||||
- SMTP_HOST=${SMTP_HOST}
|
||||
|
||||
@@ -2,8 +2,10 @@ import { TRPCError } from "@trpc/server";
|
||||
import { z } from "zod";
|
||||
|
||||
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 workspaceRepo from "@kan/db/repository/workspace.repo";
|
||||
import { getSubscriptionByPlan, hasUnlimitedSeats } from "@kan/shared/utils";
|
||||
import { updateSubscriptionSeats } from "@kan/stripe";
|
||||
|
||||
import { createTRPCRouter, protectedProcedure } from "../trpc";
|
||||
@@ -62,29 +64,34 @@ export const memberRouter = createTRPCRouter({
|
||||
}
|
||||
|
||||
if (process.env.NEXT_PUBLIC_KAN_ENV === "cloud") {
|
||||
const subscriptions = await ctx.auth.api.listActiveSubscriptions({
|
||||
workspacePublicId: workspace.publicId,
|
||||
});
|
||||
|
||||
// get the active subscription
|
||||
const activeSubscription = subscriptions.find(
|
||||
(sub) =>
|
||||
sub.status === "active" ||
|
||||
(sub.status === "trialing" && sub.plan === "team"),
|
||||
const subscriptions = await subscriptionRepo.getByReferenceId(
|
||||
ctx.db,
|
||||
workspace.publicId,
|
||||
);
|
||||
|
||||
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({
|
||||
message: `Workspace with public ID ${workspace.publicId} does not have an active subscription`,
|
||||
code: "NOT_FOUND",
|
||||
});
|
||||
}
|
||||
|
||||
// Update the Stripe subscription to add a seat with immediate proration
|
||||
if (activeSubscription.stripeSubscriptionId) {
|
||||
// Update the Stripe subscription
|
||||
if (activeTeamSubscription?.stripeSubscriptionId && !unlimitedSeats) {
|
||||
try {
|
||||
await updateSubscriptionSeats(
|
||||
activeSubscription.stripeSubscriptionId,
|
||||
activeTeamSubscription.stripeSubscriptionId,
|
||||
1,
|
||||
);
|
||||
} catch (error) {
|
||||
@@ -204,22 +211,23 @@ export const memberRouter = createTRPCRouter({
|
||||
|
||||
// Handle subscription seat decrement for cloud environment
|
||||
if (process.env.NEXT_PUBLIC_KAN_ENV === "cloud") {
|
||||
const subscriptions = await ctx.auth.api.listActiveSubscriptions({
|
||||
workspacePublicId: workspace.publicId,
|
||||
});
|
||||
|
||||
// get the active subscription
|
||||
const activeSubscription = subscriptions.find(
|
||||
(sub) =>
|
||||
sub.status === "active" ||
|
||||
(sub.status === "trialing" && sub.plan === "team"),
|
||||
const subscriptions = await subscriptionRepo.getByReferenceId(
|
||||
ctx.db,
|
||||
workspace.publicId,
|
||||
);
|
||||
|
||||
// get the active subscriptions
|
||||
const activeTeamSubscription = getSubscriptionByPlan(
|
||||
subscriptions,
|
||||
"team",
|
||||
);
|
||||
const unlimitedSeats = hasUnlimitedSeats(subscriptions);
|
||||
|
||||
// Only decrease seats if there's an active subscription and stripeSubscriptionId
|
||||
if (activeSubscription?.stripeSubscriptionId) {
|
||||
if (activeTeamSubscription?.stripeSubscriptionId && !unlimitedSeats) {
|
||||
try {
|
||||
await updateSubscriptionSeats(
|
||||
activeSubscription.stripeSubscriptionId,
|
||||
activeTeamSubscription.stripeSubscriptionId,
|
||||
-1,
|
||||
);
|
||||
} catch (error) {
|
||||
|
||||
@@ -10,6 +10,7 @@ import { env } from "next-runtime-env";
|
||||
|
||||
import type { dbClient } from "@kan/db/client";
|
||||
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 workspaceRepo from "@kan/db/repository/workspace.repo";
|
||||
import * as schema from "@kan/db/schema";
|
||||
@@ -114,13 +115,13 @@ async function downloadImage(url: string): Promise<Buffer> {
|
||||
export const initAuth = (db: dbClient) => {
|
||||
return betterAuth({
|
||||
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
|
||||
? [
|
||||
process.env.NEXT_PUBLIC_BASE_URL!,
|
||||
env("NEXT_PUBLIC_BASE_URL") ?? "",
|
||||
...process.env.BETTER_AUTH_TRUSTED_ORIGINS.split(","),
|
||||
]
|
||||
: [process.env.NEXT_PUBLIC_BASE_URL!],
|
||||
: [env("NEXT_PUBLIC_BASE_URL") ?? ""],
|
||||
database: drizzleAdapter(db, {
|
||||
provider: "pg",
|
||||
schema: {
|
||||
@@ -196,6 +197,31 @@ export const initAuth = (db: dbClient) => {
|
||||
|
||||
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: {
|
||||
after: createAuthMiddleware(async (ctx) => {
|
||||
if (ctx.path.startsWith("/get-session")) {
|
||||
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 (
|
||||
if (
|
||||
ctx.path === "/magic-link/verify" &&
|
||||
(ctx.query?.callbackURL as string | undefined)?.includes(
|
||||
"type=invite",
|
||||
) &&
|
||||
ctx.query?.memberPublicId
|
||||
)
|
||||
) {
|
||||
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);
|
||||
|
||||
if (member?.id) {
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE "subscription" ADD COLUMN "unlimitedSeats" boolean DEFAULT false NOT NULL;
|
||||
2543
packages/db/migrations/meta/20250907185512_snapshot.json
Normal file
2543
packages/db/migrations/meta/20250907185512_snapshot.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -71,6 +71,13 @@
|
||||
"when": 1756803246096,
|
||||
"tag": "20250902085406_AddSubscriptions",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"version": "7",
|
||||
"when": 1757271312974,
|
||||
"tag": "20250907185512_AddUnlimitedSeatsToSubscription",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
91
packages/db/src/repository/subscription.repo.ts
Normal file
91
packages/db/src/repository/subscription.repo.ts
Normal 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;
|
||||
};
|
||||
@@ -127,6 +127,7 @@ export const getByPublicIdWithMembers = (
|
||||
plan: true,
|
||||
status: true,
|
||||
seats: true,
|
||||
unlimitedSeats: true,
|
||||
periodStart: true,
|
||||
periodEnd: true,
|
||||
},
|
||||
|
||||
@@ -23,6 +23,7 @@ export const subscription = pgTable("subscription", {
|
||||
periodEnd: timestamp("periodEnd"),
|
||||
cancelAtPeriodEnd: boolean("cancelAtPeriodEnd"),
|
||||
seats: integer("seats"),
|
||||
unlimitedSeats: boolean("unlimitedSeats").default(false).notNull(),
|
||||
trialStart: timestamp("trialStart"),
|
||||
trialEnd: timestamp("trialEnd"),
|
||||
createdAt: timestamp("createdAt").notNull().defaultNow(),
|
||||
|
||||
@@ -45,14 +45,14 @@ export const sendEmail = async (
|
||||
html,
|
||||
};
|
||||
|
||||
if (cloudMailerClient) {
|
||||
const response = await cloudMailerClient.emails.send({
|
||||
...options,
|
||||
body: html,
|
||||
});
|
||||
// if (cloudMailerClient) {
|
||||
// const response = await cloudMailerClient.emails.send({
|
||||
// ...options,
|
||||
// body: html,
|
||||
// });
|
||||
|
||||
return response;
|
||||
}
|
||||
// return response;
|
||||
// }
|
||||
|
||||
const response = await transporter.sendMail(options);
|
||||
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
export * from "./generateUID";
|
||||
export * from "./generateSlug";
|
||||
export * from "./subscriptions";
|
||||
|
||||
57
packages/shared/src/utils/subscriptions.ts
Normal file
57
packages/shared/src/utils/subscriptions.ts
Normal 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);
|
||||
};
|
||||
@@ -64,7 +64,7 @@ export const updateSubscriptionSeats = async (
|
||||
quantity: newQuantity,
|
||||
},
|
||||
],
|
||||
proration_behavior: "always_invoice", // Invoice immediately
|
||||
proration_behavior: "create_prorations",
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
@@ -99,7 +99,11 @@
|
||||
"NEXT_PUBLIC_WHITE_LABEL_HIDE_POWERED_BY",
|
||||
"STRIPE_SECRET_KEY",
|
||||
"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_URL",
|
||||
"NEXT_PUBLIC_AVATAR_BUCKET_NAME",
|
||||
|
||||
Reference in New Issue
Block a user