Compare commits

..
128 Commits
Author SHA1 Message Date
Alex van Andel 1566a80e40 v3.1.4
release.yml / release (push) Canceled after 0s
2023-07-21 10:02:01 +01:00
Nafees NazikandCarina Wollendorfer 797d3a7f98 fix: set up organization field validation (#10154)
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
2023-07-21 08:48:43 +00:00
c7a276eb1d fix: remove app dialog while removing installed calendar (#10234)
* Fix remove app dialog while removing installed calendar

* fix: dialog in webhook, otp

Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>

* fix: more dialogs

Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>

* fix: margin

Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>

---------

Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
2023-07-21 08:46:16 +00:00
Crowdin Bot 1709e23135 New Crowdin translations by Github Action 2023-07-21 08:35:03 +00:00
Leo Giovanetti d1778fdce8 fix: 2FA from CAL to GOOGLE (#10288)
* Fixing 2FA from CAL to GOOGLE

* Missing change

* Missing logic for converted providers

* Fixing edge case and applying feedback

* Leftovers
2023-07-21 09:32:03 +01:00
Joe Au-Yeung b49952b8d8 Fix prettier error on App component (#10287) 2023-07-21 09:31:02 +01:00
Alex van Andel 5b280b2188 fix: team event emails; sending & email subject (#10289) 2023-07-20 19:29:08 -04:00
Alex van Andel 3818093652 fix: Add attendees to getLuckyUser algorithm (#10285)
* Add attendees to getLuckyUser algorithm

* Fix unit test for getLuckyUser
2023-07-20 22:51:15 +01:00
Crowdin Bot 56f4310c24 New Crowdin translations by Github Action 2023-07-20 20:31:50 +00:00
Peer Richelsen 7ec7195ae9 fixed empty screen width (#10278) 2023-07-20 20:29:05 +00:00
Joe Au-Yeung 514db3466f fix: Flaky 2FA tests (#10283) 2023-07-20 19:40:35 +00:00
alannncandPeer Richelsen cd88b688f4 fix: including parentId when filter by eventTypeId happens (#10262)
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
2023-07-20 12:19:13 -07:00
Omar López 939a32813f Revert "chore: Make embed and app-store tests required" (#10282) 2023-07-20 11:58:07 -07:00
Joe Au-Yeung 66c1e29d91 fix: Default to Daily if Viable (#10279)
* Default to daily if viable

* Add Zod schema parsing
2023-07-20 12:57:10 -04:00
Crowdin Bot 3c57082fa6 New Crowdin translations by Github Action 2023-07-20 12:10:47 +00:00
Hariom Balhara fc4a2bd186 make embed and app-store tests required (#10271) 2023-07-20 14:08:09 +02:00
Hariom Balhara 3f900966b0 Fix flash of non-transparent background (#10265) 2023-07-20 09:17:46 +02:00
Leo GiovanettiandOmar López 8ba4b4d50e feat: Pending members selection (#10168)
* Pending members selection

* Discard changes to .vscode/launch.json

* revert yarn.lock

---------

Co-authored-by: Omar López <zomars@me.com>
2023-07-20 11:23:15 +05:30
GitStart-Cal.comandgitstart-calcom d2104dac5a test: Create unit tests for react components in packages/ui/components/breadcrumb (CALCOM-614) (#10256)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
2023-07-20 07:13:23 +02:00
GitStart-Cal.comandgitstart-calcom 9ad2731358 test: add unit tests for packages/ui/components/badge (CALCOM-613) (#10255)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
2023-07-20 07:11:53 +02:00
GitStart-Cal.comandgitstart-calcom c34fdab5af test: Create unit tests for react components in packages/ui/components/card (CALCOM-617) (#10257)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
2023-07-20 07:06:15 +02:00
Hariom BalharaandCarina Wollendorfer f1c981fdcf feat: firstAndLastName variant for name field (#8671)
* Add split full name variant

* Share propsType across fieldTypes and components

* Simplify Components

* Add assertions for required field indicator

* Fix test as name cant be used as a custom field right now

* Make it disabled during reschedule

* Fix UI issues in dark mode

* Support adding links in boolean checkbox

* Revert "Support adding links in boolean checkbox"

This reverts commit 31252f8a5f445f8289a09445124109a4a9c3d33b.

* Make sure getBookingFields isnt import client side

* PR feedback addressed from Carina

* DRY Code

* Fix Dialog

---------

Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
2023-07-20 07:03:50 +02:00
Anik Dhabal Babu 47f65bb19f fix: More Brand color for calendar view (#10252) 2023-07-20 00:32:25 +02:00
GitStart-Cal.comandgitstart-calcom 587d3c1088 fix: duplicate event-type dialog not using the new dialog footer (CALCOM-10258) (#10260)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
2023-07-20 00:15:03 +02:00
sean-brydon 610c86837a feat: orgs - user management v2
figma: https://www.figma.com/file/ZJNAFHCAq6rnuGRgUFxjzQ/Organizations----New-features?type=design&node-id=4304-330348&mode=design&t=nKonHZpucwxnqwQI-4 (Not all features are in this PR)
loom: https://www.loom.com/share/30e8ef20a5b34a708dca160d8c04ae6f

shoutout @shadcn for the base of this table <3 

Member View: 
![CleanShot 2023-07-14 at 14 09 02](https://github.com/calcom/cal.com/assets/55134778/5db6eedb-bece-4955-91f0-9f2b3b042300)

Admin view:
![CleanShot 2023-07-14 at 14 09 07](https://github.com/calcom/cal.com/assets/55134778/708c624d-1990-4075-8b32-d4587d09deff)

How to test 
- Create ORG
- add members
- view settings -> orgs -> members
2023-07-19 12:45:13 -07:00
Crowdin Bot 676452b4f4 New Crowdin translations by Github Action 2023-07-19 18:47:31 +00:00
Carina WollendorferandCarinaWolli 8a432b45a4 fix: issue with date overrides in some timezones (#10254)
* fix date overrides

* add test

---------

Co-authored-by: CarinaWolli <wollencarina@gmail.com>
2023-07-19 19:44:41 +01:00
Crowdin Bot 92ad652666 New Crowdin translations by Github Action 2023-07-19 16:15:23 +00:00
Mingjie Jiang 617ddcaa3b chore: Improve and standardize simplified and traditional Chinese localizations (#9902) 2023-07-19 16:12:09 +00:00
Crowdin Bot ef7f3e7900 New Crowdin translations by Github Action 2023-07-19 16:10:58 +00:00
4e0a549a50 fix: Fix bookingPage UI issues in dark mode (#10203)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
2023-07-19 16:07:07 +00:00
Crowdin Bot 8f95d27469 New Crowdin translations by Github Action 2023-07-19 15:44:41 +00:00
8902f7efa1 fix: /event-type /apps - doesn't match designs (CALCOM-9180) (#9549)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
2023-07-19 17:41:37 +02:00
GitStart-Cal.comandgitstart-calcom bd7eadd721 test: Create unit tests for react components in packages/ui/components/alert (tests-alert-component) (#9897)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
2023-07-19 17:22:41 +02:00
Crowdin Bot 02e34a7bde New Crowdin translations by Github Action 2023-07-19 15:21:40 +00:00
sean-brydonandShivam Kalra d51e1ab47d fix: Fixes error for unknown JSON when creating an account (#10248)
Co-authored-by: Shivam Kalra <shivamkalra98@gmail.com>
2023-07-19 15:18:31 +00:00
Crowdin Bot ebe60c36bd New Crowdin translations by Github Action
release.yml / release (push) Canceled after 0s
2023-07-19 14:33:31 +00:00
Monto 26e458be6d feat: dynamic time format rendering in workflows based on user settings (#10229) 2023-07-19 10:30:37 -04:00
Crowdin Bot 1ad4f7247e New Crowdin translations by Github Action 2023-07-19 12:37:55 +00:00
Crowdin Bot e0237acac9 New Crowdin translations by Github Action 2023-07-19 12:35:34 +00:00
Crowdin Bot 2dc0bb4888 New Crowdin translations by Github Action 2023-07-19 12:33:09 +00:00
sean-brydon dfffd8b577 fix: revert i18n hook changes (#10249) 2023-07-19 12:30:25 +00:00
Crowdin Bot e6f2ba2c25 New Crowdin translations by Github Action 2023-07-19 09:22:27 +00:00
sean-brydonandKeith Williams 628a29e89c chore: fixing some initial re-renders (#10185)
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
2023-07-19 09:19:53 +00:00
Crowdin Bot 2fd9ef2733 New Crowdin translations by Github Action 2023-07-19 09:05:08 +00:00
Crowdin Bot c9f2d6bc93 New Crowdin translations by Github Action 2023-07-19 09:01:24 +00:00
Peer Richelsen a83aea30da Update package.json 2023-07-19 10:58:27 +02:00
Hariom BalharaandShivam Kalra b516a2af44 Get OAuth working for local (#10054)
Co-authored-by: Shivam Kalra <shivamkalra98@gmail.com>
2023-07-19 09:15:05 +02:00
Crowdin Bot d0e831975d New Crowdin translations by Github Action 2023-07-19 06:40:31 +00:00
Crowdin Bot b906c7caf7 New Crowdin translations by Github Action 2023-07-19 06:37:40 +00:00
Crowdin Bot 152dbe58c9 New Crowdin translations by Github Action 2023-07-19 06:34:49 +00:00
Crowdin Bot b4c154a6af New Crowdin translations by Github Action 2023-07-19 06:32:11 +00:00
Crowdin Bot 99cea7a326 New Crowdin translations by Github Action 2023-07-19 06:29:40 +00:00
Crowdin Bot d0ae519851 New Crowdin translations by Github Action 2023-07-19 06:27:16 +00:00
Crowdin Bot d185c665b8 New Crowdin translations by Github Action 2023-07-19 06:24:21 +00:00
Crowdin Bot baa9ddf46a New Crowdin translations by Github Action 2023-07-19 06:21:52 +00:00
Alex van Andel e8f5090acc Fix: Flaky 2FA test due to waiting redundant Enter (#10236) 2023-07-19 08:19:16 +02:00
Crowdin Bot 0661b96cd2 New Crowdin translations by Github Action 2023-07-19 05:10:16 +00:00
Crowdin Bot 3a64506c9e New Crowdin translations by Github Action 2023-07-19 05:07:31 +00:00
Crowdin Bot f1b705e022 New Crowdin translations by Github Action 2023-07-19 05:05:00 +00:00
Crowdin Bot c768d52539 New Crowdin translations by Github Action 2023-07-19 05:02:24 +00:00
Crowdin Bot 7d3ba5c55c New Crowdin translations by Github Action 2023-07-19 04:59:34 +00:00
Crowdin Bot e643afaa80 New Crowdin translations by Github Action 2023-07-19 04:57:05 +00:00
Crowdin Bot 4cd3479cfd New Crowdin translations by Github Action 2023-07-19 04:54:39 +00:00
Crowdin Bot 7efddfd213 New Crowdin translations by Github Action 2023-07-19 04:51:59 +00:00
Crowdin Bot a8c362dbf3 New Crowdin translations by Github Action 2023-07-19 04:49:27 +00:00
Crowdin Bot f6b3cc0c7c New Crowdin translations by Github Action 2023-07-19 04:46:55 +00:00
Hariom Balhara 902bb71273 Prefill logged in info (#10240) 2023-07-19 06:44:13 +02:00
db021cc696 fix: update list for countries that don't support alphanumeric sender ids (#10232)
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
2023-07-18 21:31:45 +00:00
Jaideep GuntupalliandUdit Takkar a2645c2ed4 feat: replaced slack icon with Discord (#10193)
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
2023-07-18 21:30:17 +00:00
Anik Dhabal Babu 1ec9a6924c feddback added (#10221) 2023-07-18 21:29:56 +00:00
Leo Giovanetti 09068b39e6 perf: Event-type config page (#10238) 2023-07-18 23:18:08 +02:00
Crowdin Bot 9069a2412d New Crowdin translations by Github Action 2023-07-18 20:30:45 +00:00
zomars 6b5c8935c5 fix: formatting 2023-07-18 13:27:54 -07:00
Crowdin Bot d27ff41682 New Crowdin translations by Github Action 2023-07-18 19:53:12 +00:00
Crowdin Bot c6ca736daa New Crowdin translations by Github Action 2023-07-18 19:50:00 +00:00
Carina WollendorferandCarinaWolli cedb2b72e9 fix: add missing booking paid webhook trigger to dropdwon (#10237)
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
2023-07-18 19:46:53 +00:00
Hariom Balhara 11081cb5d8 fix: Embed - Non transparent background when color-scheme of embedding document and cal.com iframe don't match (#10033)
## What does this PR do?

Fixes #10032

Before:
https://www.loom.com/share/1890e4eebf41426aaf66d8b4909d0765
After:
https://www.loom.com/share/8b00c41587f2467ab05ef48e4ed523ef


## Type of change

<!-- Please delete bullets that are not relevant. -->

- Bug fix (non-breaking change which fixes an issue)

## How should this be tested?

- See loom

## Mandatory Tasks

- [x] Make sure you have self-reviewed the code. A decent size PR without self-review might be rejected.

## Checklist
- I haven't added tests that prove my fix is effective or that my feature works
2023-07-18 09:46:35 -07:00
Hariom Balhara 34d65f67a9 fix: Avoid resetting state one every render. (#10210) 2023-07-18 16:42:40 +00:00
Keith Williams e4c49d0e0b fix: Added step to create env file for bundle analysis (#10224) 2023-07-18 09:20:17 -07:00
Peer Richelsen 43a30aa51d Update package.json
release.yml / release (push) Canceled after 0s
2023-07-18 18:14:14 +02:00
Jay Pitroda eb13057157 fix: booking error on invalid timezone (#10209) 2023-07-18 16:09:31 +00:00
Syed Ali Shahbaz bb4d587359 fix: lint errors introduced in PR#10225 (#10230) 2023-07-18 15:58:32 +00:00
Crowdin Bot 3d7c32c0d8 New Crowdin translations by Github Action 2023-07-18 15:41:03 +00:00
39508b3daa fix: booking page: location icon is not showing up (CALCOM-9951) (#9993)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
2023-07-18 15:37:39 +00:00
Richard PoelderlandKeith Williams e79c818edb chore: Add website deps to yarn.lock (#10219)
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
2023-07-18 14:37:16 +00:00
Mehul 8a1023087f fix: inconsistent duration labels (#10223) 2023-07-18 15:10:28 +01:00
Crowdin Bot 9343aee778 New Crowdin translations by Github Action 2023-07-18 13:52:15 +00:00
Syed Ali Shahbaz 89f645c450 fix: Hotfix-bookings list breaks on unsupported timezone (#10225)
* Adds a check for supportedTimezone values

* adds timezone support check for attendees
2023-07-18 13:49:23 +00:00
Crowdin Bot da5d90eb07 New Crowdin translations by Github Action 2023-07-18 11:29:18 +00:00
Crowdin Bot 9f30f95dd9 New Crowdin translations by Github Action 2023-07-18 11:26:41 +00:00
Crowdin Bot bc0c1341f6 New Crowdin translations by Github Action 2023-07-18 11:24:09 +00:00
Crowdin Bot 1c0a51cc02 New Crowdin translations by Github Action 2023-07-18 11:21:42 +00:00
Crowdin Bot 7cfe7647f3 New Crowdin translations by Github Action 2023-07-18 11:17:58 +00:00
Crowdin Bot cc91834ddd New Crowdin translations by Github Action 2023-07-18 11:14:53 +00:00
Crowdin Bot 2cb1a62906 New Crowdin translations by Github Action 2023-07-18 11:12:13 +00:00
Crowdin Bot 6135d449ec New Crowdin translations by Github Action 2023-07-18 11:09:31 +00:00
Crowdin Bot 073b29c214 New Crowdin translations by Github Action 2023-07-18 11:06:19 +00:00
Crowdin Bot ea99dc5520 New Crowdin translations by Github Action 2023-07-18 11:03:30 +00:00
Crowdin Bot c3280a62b7 New Crowdin translations by Github Action 2023-07-18 11:00:47 +00:00
Crowdin Bot a41b42359a New Crowdin translations by Github Action 2023-07-18 10:57:56 +00:00
Crowdin Bot cc15fb5285 New Crowdin translations by Github Action 2023-07-18 10:55:10 +00:00
Crowdin Bot e554268592 New Crowdin translations by Github Action 2023-07-18 10:52:35 +00:00
Crowdin Bot f4c2764cbf New Crowdin translations by Github Action 2023-07-18 10:49:58 +00:00
Crowdin Bot ac54ccdd70 New Crowdin translations by Github Action 2023-07-18 10:47:26 +00:00
Hariom BalharaandShivam Kalra b3216634c9 fix: Add missing auth package to yarn.lock (#10214)
Co-authored-by: Shivam Kalra <shivamkalra98@gmail.com>
2023-07-18 12:44:38 +02:00
Crowdin Bot 6c437edc0e New Crowdin translations by Github Action 2023-07-18 10:11:17 +00:00
Crowdin Bot bed153b497 New Crowdin translations by Github Action 2023-07-18 10:08:12 +00:00
2be245eefc add CAL_URL to fix og image issue (#10172)
Co-authored-by: Raghul D <v-raghuld@microsoft.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
2023-07-18 10:05:28 +00:00
Crowdin Bot caf3b40687 New Crowdin translations by Github Action 2023-07-18 09:33:33 +00:00
Crowdin Bot 5650bd6409 New Crowdin translations by Github Action 2023-07-18 09:30:53 +00:00
Crowdin Bot 94a86acdaa New Crowdin translations by Github Action 2023-07-18 09:28:07 +00:00
Crowdin Bot defd49f986 New Crowdin translations by Github Action 2023-07-18 09:25:37 +00:00
Crowdin Bot 679d3da957 New Crowdin translations by Github Action 2023-07-18 09:23:02 +00:00
Crowdin Bot e84fd39e11 New Crowdin translations by Github Action 2023-07-18 09:20:12 +00:00
Crowdin Bot 1d74e9c201 New Crowdin translations by Github Action 2023-07-18 09:17:11 +00:00
Crowdin Bot 3356cbc1df New Crowdin translations by Github Action 2023-07-18 09:13:52 +00:00
Crowdin Bot 4584f666e0 New Crowdin translations by Github Action 2023-07-18 09:10:50 +00:00
Crowdin Bot c9078cfd94 New Crowdin translations by Github Action 2023-07-18 09:07:49 +00:00
Crowdin Bot 4ae1c2aa8c New Crowdin translations by Github Action 2023-07-18 09:05:11 +00:00
Crowdin Bot cf15f5f2a2 New Crowdin translations by Github Action 2023-07-18 09:01:52 +00:00
Crowdin Bot d21f42c257 New Crowdin translations by Github Action 2023-07-18 08:58:31 +00:00
Crowdin Bot 92a0dff2c7 New Crowdin translations by Github Action 2023-07-18 08:55:56 +00:00
Udit Takkar 47add7e7fc fix: modals regression (#10211)
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
2023-07-18 09:53:01 +01:00
Hariom Balhara 6dfc19247e fix: Embed theme not working using Embed API (#10163)
## What does this PR do?

Fixes #10187
See [Tests Done](https://www.loom.com/share/f03e0191b60143d8b45a505042dbfa11)

## Type of change
  - [x] Bug fix (non-breaking change which fixes an issue)

## How should this be tested?
- [x] Configure embed to use `dark` theme and verify that dark theme is shown on event booking page(when user has light theme set). This is failing in main
- Additional Tests for embed to avoid any new regression
	- [x] - Configure "auto" theme using embed API and see it reacts to system theme
	- [x] - Don't configure any theme and see that "light" theme is shown even when we switch system theme(Because User has configured light theme in App)
-  Tests outside embed to avoid any new regression
	- [x] - See that light theme is shown even after switching system theme
	- [x] - Now, switch the user theme to dark and see that it reflects the change. 

## Mandatory Tasks

 [x] Make sure you have self-reviewed the code. A decent size PR without self-review might be rejected.
2023-07-17 18:02:42 -07:00
2db4998eaa fix: wrong slot starting times for half hour times zones (#10161)
* fix timezone zone issue for first slot

* fix failed test in getSchedule

* Update apps/web/test/lib/getSchedule.test.ts

---------

Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: alannnc <alannnc@gmail.com>
2023-07-18 00:57:34 +00:00
alannncandLeo Giovanetti dad4fd17fb fix: Improve continue button on org-add-team and validations [CAL-2015] (#10122)
* Improve continue button on team add and validations

* Fix server validations for orgs create team

* Remove unused prop form input

* add comment for context

* Fix duplicatedSlugs not working properly

* Fix continue button disabled state, added more examples for team names

* Fix initial state for inputValues on addTeamForm

* Don't allow whitespaces only inputs on create teams

* Use rhf instead of react useState

---------

Co-authored-by: Leo Giovanetti <hello@leog.me>
2023-07-17 17:17:29 -07:00
c26efcabe4 fix: customTemplate() function fails when no locale is given (#10201)
* fallback to en for locale

* remove console.log

* Fix nit changes

---------

Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: alannnc <alannnc@gmail.com>
2023-07-17 16:38:37 -07:00
226 changed files with 8893 additions and 1951 deletions
+6 -6
View File
@@ -22,18 +22,18 @@ Any other relevant information. For example, why do you consider this a bug and
### Actual Results
- What's happening right now that is different from what is expected
- What's happening right now that is different from what is expected
### Expected Results
- This is an ideal result that the system should get after the tests are performed
- This is an ideal result that the system should get after the tests are performed
### Technical details
- Browser version, screen recording, console logs, network requests: You can make a recording with [Bird Eats Bug](https://birdeatsbug.com/).
- Node.js version
- Anything else that you think could be an issue.
- Browser version, screen recording, console logs, network requests: You can make a recording with [Bird Eats Bug](https://birdeatsbug.com/).
- Node.js version
- Anything else that you think could be an issue.
### Evidence
- How was this tested? This is quite mandatory in terms of bugs. Providing evidence of your testing with screenshots or/and videos is an amazing way to prove the bug and a troubleshooting chance to find the solution.
- How was this tested? This is quite mandatory in terms of bugs. Providing evidence of your testing with screenshots or/and videos is an amazing way to prove the bug and a troubleshooting chance to find the solution.
+13 -12
View File
@@ -11,31 +11,32 @@ Fixes # (issue)
## Requirement/Documentation
<!-- Please provide all documents that are important to understand the reason of that PR. -->
- If there is a requirement document, please, share it here.
- If there is ab UI/UX design document, please, share it here.
- If there is a requirement document, please, share it here.
- If there is ab UI/UX design document, please, share it here.
## Type of change
<!-- Please delete bullets that are not relevant. -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] Chore (refactoring code, technical debt, workflow improvements)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] This change requires a documentation update
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] Chore (refactoring code, technical debt, workflow improvements)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] This change requires a documentation update
## How should this be tested?
<!-- Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration. Write details that help to start the tests -->
- Are there environment variables that should be set?
- What are the minimal test data to have?
- What is expected (happy path) to have (input and output)?
- Any other important info that could help to test that PR
- Are there environment variables that should be set?
- What are the minimal test data to have?
- What is expected (happy path) to have (input and output)?
- Any other important info that could help to test that PR
## Mandatory Tasks
- [ ] Make sure you have self-reviewed the code. A decent size PR without self-review might be rejected.
- [ ] Make sure you have self-reviewed the code. A decent size PR without self-review might be rejected.
## Checklist
@@ -7,8 +7,13 @@ on:
- main
jobs:
env:
name: Create env file
uses: ./.github/workflows/env-create-file.yml
secrets: inherit
build:
name: Production build
needs: env
if: ${{ github.event_name == 'push' }}
uses: ./.github/workflows/production-build.yml
secrets: inherit
-1
View File
@@ -90,7 +90,6 @@ That's where Cal.com comes in. Self-hosted or hosted by us. White-label by desig
- [Prisma.io](https://prisma.io/?ref=cal.com)
- [Daily.co](https://go.cal.com/daily)
## Contact us
Meet our sales team for any commercial inquiries.
+1 -1
View File
@@ -7,7 +7,7 @@
<a href="https://cal.com/docs/enterprise-features/api#api-server-specifications">Read the API docs</a>
</div>
# Commercial Cal.com Public API
# Commercial Cal.com Public API
Welcome to the Public API ("/apps/api") of the Cal.com.
+7 -7
View File
@@ -191,8 +191,8 @@ export default function MyApp() {
${uiInstructionCode}
})();
}, [])
return <Cal
calLink="${calLink}"
return <Cal
calLink="${calLink}"
style={{width:"${width}",height:"${height}",overflow:"scroll"}}
${previewState.layout ? "config={{layout: '" + previewState.layout + "'}}" : ""}${
IS_SELF_HOSTED
@@ -243,11 +243,11 @@ export default function App() {
${uiInstructionCode}
})();
}, [])
return <button
return <button
data-cal-link="${calLink}"${IS_SELF_HOSTED ? `\ndata-cal-origin="${EMBED_CAL_ORIGIN}"` : ""}
${`data-cal-config='${JSON.stringify({
layout: previewState.layout,
})}'`}
})}'`}
>Click me</button>;
};`;
},
@@ -292,10 +292,10 @@ ${uiInstructionCode}`;
}) => {
return code`
// Important: Please add following attributes to the element you want to open Cal on click
// \`data-cal-link="${calLink}"\`
// \`data-cal-link="${calLink}"\`
// \`data-cal-config='${JSON.stringify({
layout: previewState.layout,
})}'\`
})}'\`
${uiInstructionCode}`;
},
@@ -1182,7 +1182,7 @@ const EmbedTypeCodeAndPreviewDialogContent = ({
</div>
</div>
<div className="flex w-2/3 flex-col p-8">
<HorizontalTabs data-testid="embed-tabs" tabs={parsedTabs} linkProps={{ shallow: true }} />
<HorizontalTabs data-testid="embed-tabs" tabs={parsedTabs} linkShallow />
{tabs.map((tab) => {
return (
<div
+2 -4
View File
@@ -1,4 +1,3 @@
import { isEmpty } from "lodash";
import { useTranslation } from "next-i18next";
import { useEffect } from "react";
@@ -20,13 +19,13 @@ export function useViewerI18n() {
/**
* Auto-switches locale client-side to the logged in user's preference
*/
const I18nLanguageHandler = (): null => {
const I18nLanguageHandler = () => {
const { i18n } = useTranslation("common");
const locale = useViewerI18n().data?.locale || i18n.language;
useEffect(() => {
// bail early when i18n = {}
if (isEmpty(i18n)) return;
if (Object.keys(i18n).length === 0) return;
// if locale is ready and the i18n.language does != locale - changeLanguage
if (locale && i18n.language !== locale) {
i18n.changeLanguage(locale);
@@ -35,7 +34,6 @@ const I18nLanguageHandler = (): null => {
document.dir = i18n.dir();
document.documentElement.setAttribute("lang", locale);
}, [locale, i18n]);
return null;
};
+40 -39
View File
@@ -3,7 +3,7 @@ import type { IframeHTMLAttributes } from "react";
import React, { useState, useEffect } from "react";
import { useRouter } from "next/router";
import { CAL_URL } from "@calcom/lib/constants";
import type { RouterOutputs } from "@calcom/trpc/react";
import type { RouterOutputs } from "@calcom/trpc/react";
import useAddAppMutation from "@calcom/app-store/_utils/useAddAppMutation";
import { InstallAppButton, AppDependencyComponent } from "@calcom/app-store/components";
@@ -217,7 +217,7 @@ const Component = ({
};
}
return (
<InstallAppButtonChild appCategories={categories} userAdminTeams={appDbQuery.data?.userAdminTeams} addAppMutationInput={{type, variant, slug}} credentials={appDbQuery.data?.credentials} {...props} />
<InstallAppButtonChild appCategories={categories} userAdminTeams={appDbQuery.data?.userAdminTeams} addAppMutationInput={{ type, variant, slug }} credentials={appDbQuery.data?.credentials} {...props} />
);
}}
/>
@@ -426,7 +426,7 @@ const InstallAppButtonChild = ({
size="base">
{multiInstall ? t("install_another") : t("install_app")}
</Button>
}
return (
@@ -444,49 +444,50 @@ const InstallAppButtonChild = ({
</DropdownMenuTrigger>
<DropdownMenuPortal>
<DropdownMenuContent
onInteractOutside={(event) => {
if (mutation.isLoading) event.preventDefault();
}}
onInteractOutside={(event) => {
if (mutation.isLoading) event.preventDefault();
}}
>
{mutation.isLoading && (
<div className="z-1 fixed inset-0 flex items-center justify-center bg-black bg-opacity-50">
<Spinner />
</div>
)}
<div className="z-1 fixed inset-0 flex items-center justify-center bg-black bg-opacity-50">
<Spinner />
</div>
)}
<DropdownMenuLabel>{t("install_app_on")}</DropdownMenuLabel>
{userAdminTeams.map((team) => {
const isInstalled = credentials &&
credentials.some((credential) =>
credential?.teamId ? credential?.teamId === team.id : credential.userId === team.id
)
credentials.some((credential) =>
credential?.teamId ? credential?.teamId === team.id : credential.userId === team.id
)
return (
<DropdownItem
type="button"
data-testid={team.isUser ? "install-app-button-personal" : "anything else"}
key={team.id}
disabled={
isInstalled
}
StartIcon={(props) => (
<Avatar
alt={team.logo || ""}
imageSrc={team.logo || `${CAL_URL}/${team.logo}/avatar.png`} // if no image, use default avatar
size="sm"
{...props}
/>
)}
onClick={() => {
mutation.mutate(
team.isUser ? addAppMutationInput : { ...addAppMutationInput, teamId: team.id }
);
}}>
<p>{team.name}{" "}
{isInstalled &&
`(${t("installed")})`}</p>
</DropdownItem>
)})}
<DropdownItem
type="button"
data-testid={team.isUser ? "install-app-button-personal" : "anything else"}
key={team.id}
disabled={
isInstalled
}
StartIcon={(props) => (
<Avatar
alt={team.logo || ""}
imageSrc={team.logo || `${CAL_URL}/${team.logo}/avatar.png`} // if no image, use default avatar
size="sm"
{...props}
/>
)}
onClick={() => {
mutation.mutate(
team.isUser ? addAppMutationInput : { ...addAppMutationInput, teamId: team.id }
);
}}>
<p>{team.name}{" "}
{isInstalled &&
`(${t("installed")})`}</p>
</DropdownItem>
)
})}
</DropdownMenuContent>
</DropdownMenuPortal>
</Dropdown>
@@ -0,0 +1,119 @@
import type {
DefaultEventLocationType,
EventLocationTypeFromApp,
LocationObject,
} from "@calcom/app-store/locations";
import { getEventLocationType, getTranslatedLocation } from "@calcom/app-store/locations";
import { classNames } from "@calcom/lib";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { Tooltip } from "@calcom/ui";
import { Link } from "@calcom/ui/components/icon";
const excludeNullValues = (value: unknown) => !!value;
function RenderIcon({
eventLocationType,
isTooltip,
}: {
eventLocationType: DefaultEventLocationType | EventLocationTypeFromApp;
isTooltip: boolean;
}) {
return (
<img
src={eventLocationType.iconUrl}
className={classNames(
"me-[10px] h-4 w-4 opacity-70 dark:opacity-100",
!eventLocationType.iconUrl?.startsWith("/app-store") ? "dark:invert-[.65]" : "",
!eventLocationType.iconUrl?.startsWith("/app-store") && isTooltip && "invert"
)}
alt={`${eventLocationType.label} icon`}
/>
);
}
function RenderLocationTooltip({ locations }: { locations: LocationObject[] }) {
const { t } = useLocale();
return (
<div className="my-2 me-2 flex w-full flex-col space-y-3 break-words">
<p>{t("select_on_next_step")}</p>
{locations.map(
(
location: Pick<Partial<LocationObject>, "link" | "address"> &
Omit<LocationObject, "link" | "address">,
index: number
) => {
const eventLocationType = getEventLocationType(location.type);
if (!eventLocationType) {
return null;
}
const translatedLocation = getTranslatedLocation(location, eventLocationType, t);
return (
<div key={`${location.type}-${index}`} className="font-sm flex flex-row items-center">
<RenderIcon eventLocationType={eventLocationType} isTooltip />
<p className="line-clamp-1">{translatedLocation}</p>
</div>
);
}
)}
</div>
);
}
export function AvailableEventLocations({ locations }: { locations: LocationObject[] }) {
const { t } = useLocale();
const renderLocations = locations.map(
(
location: Pick<Partial<LocationObject>, "link" | "address"> & Omit<LocationObject, "link" | "address">,
index: number
) => {
const eventLocationType = getEventLocationType(location.type);
if (!eventLocationType) {
// It's possible that the location app got uninstalled
return null;
}
if (eventLocationType.variable === "hostDefault") {
return null;
}
const translatedLocation = getTranslatedLocation(location, eventLocationType, t);
return (
<div key={`${location.type}-${index}`} className="flex flex-row items-center text-sm font-medium">
{eventLocationType.iconUrl === "/link.svg" ? (
<Link className="text-default ml-[2px] h-4 w-4 ltr:mr-[10px] rtl:ml-[10px] " />
) : (
<RenderIcon eventLocationType={eventLocationType} isTooltip={false} />
)}
<Tooltip content={translatedLocation}>
<p className="line-clamp-1">{translatedLocation}</p>
</Tooltip>
</div>
);
}
);
const filteredLocations = renderLocations.filter(excludeNullValues) as JSX.Element[];
return filteredLocations.length > 1 ? (
<div className="flex flex-row items-center text-sm font-medium">
<img
src="/map-pin.svg"
className={classNames("me-[10px] h-4 w-4 opacity-70 dark:invert")}
alt="map-pin"
/>
<Tooltip content={<RenderLocationTooltip locations={locations} />}>
<p className="line-clamp-1">
{t("location_options", {
locationCount: filteredLocations.length,
})}
</p>
</Tooltip>
</div>
) : filteredLocations.length === 1 ? (
<div className="text-default mr-6 flex w-full flex-col space-y-4 break-words text-sm">
{filteredLocations}
</div>
) : null;
}
@@ -5,7 +5,7 @@ import { useEffect, useState } from "react";
import { Controller, useFormContext } from "react-hook-form";
import short from "short-uuid";
import { v5 as uuidv5 } from "uuid";
import { z } from "zod";
import type { z } from "zod";
import type { EventNameObjectType } from "@calcom/core/event";
import { getEventName } from "@calcom/core/event";
@@ -17,14 +17,23 @@ import {
allowDisablingHostConfirmationEmails,
} from "@calcom/features/ee/workflows/lib/allowDisablingStandardEmails";
import { FormBuilder } from "@calcom/features/form-builder/FormBuilder";
import { EditableSchema } from "@calcom/features/form-builder/FormBuilderFieldsSchema"
import type { EditableSchema } from "@calcom/features/form-builder/schema";
import { BookerLayoutSelector } from "@calcom/features/settings/BookerLayoutSelector";
import { classNames } from "@calcom/lib";
import { APP_NAME, CAL_URL } from "@calcom/lib/constants";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import type { Prisma } from "@calcom/prisma/client";
import { trpc } from "@calcom/trpc/react";
import { Button, Checkbox, Label, SettingsToggle, showToast, TextField, Tooltip, Alert } from "@calcom/ui";
import {
Button,
CheckboxField,
Label,
SettingsToggle,
showToast,
TextField,
Tooltip,
Alert,
} from "@calcom/ui";
import { Edit, Copy } from "@calcom/ui/components/icon";
import RequiresConfirmationController from "./RequiresConfirmationController";
@@ -87,7 +96,9 @@ export const EventAdvancedTab = ({ eventType, team }: Pick<EventTypeSetupProps,
return {
...field,
hidden: !enabled,
editable: (!enabled ? "system-but-hidden" : "system-but-optional") as z.infer<typeof EditableSchema>
editable: (!enabled ? "system-but-hidden" : "system-but-optional") as z.infer<
typeof EditableSchema
>,
};
}
return field;
@@ -340,7 +351,7 @@ export const EventAdvancedTab = ({ eventType, team }: Pick<EventTypeSetupProps,
}}
/>
<div className="mt-2">
<Checkbox
<CheckboxField
description={t("show_attendees")}
disabled={seatsLocked.disabled}
onChange={(e) => formMethods.setValue("seatsShowAttendees", e.target.checked)}
+16 -2
View File
@@ -1,3 +1,5 @@
import { Trans } from "next-i18next";
import Link from "next/link";
import type { EventTypeSetupProps, FormValues } from "pages/event-types/[type]";
import { useFormContext } from "react-hook-form";
@@ -158,9 +160,21 @@ export const EventAppsTab = ({ eventType }: { eventType: EventType }) => {
{!shouldLockDisableProps("apps").disabled && (
<div className="bg-muted rounded-md p-8">
{!isLoading && notInstalledApps?.length ? (
<h2 className="text-emphasis text-lg font-semibold">{t("available_apps")}</h2>
<>
<h2 className="text-emphasis mb-2 text-xl font-semibold leading-5 tracking-[0.01em]">
{t("available_apps_lower_case")}
</h2>
<p className="text-default mb-6 text-sm font-normal">
<Trans i18nKey="available_apps_desc">
You have no apps installed. View popular apps below and explore more in our &nbsp;
<Link className="cursor-pointer underline" href="/apps">
App Store
</Link>
</Trans>
</p>
</>
) : null}
<div className="before:border-0">
<div className="bg-default border-subtle divide-subtle divide-y rounded-md border before:border-0">
{notInstalledApps?.map((app) => (
<EventTypeAppCard
getAppData={getAppDataGetter(app.slug as EventTypeAppsList)}
@@ -1,5 +1,5 @@
import type { EventTypeSetup, FormValues } from "pages/event-types/[type]";
import { useState } from "react";
import { useState, memo } from "react";
import { Controller, useFormContext } from "react-hook-form";
import type { OptionProps, SingleValueProps } from "react-select";
import { components } from "react-select";
@@ -71,86 +71,91 @@ const format = (date: Date, hour12: boolean) =>
hourCycle: hour12 ? "h12" : "h24",
}).format(new Date(dayjs.utc(date).format("YYYY-MM-DDTHH:mm:ss")));
const EventTypeScheduleDetails = ({
isManagedEventType,
selectedScheduleValue,
}: {
isManagedEventType: boolean;
selectedScheduleValue: AvailabilityOption | undefined;
}) => {
const { data: loggedInUser } = useMeQuery();
const timeFormat = loggedInUser?.timeFormat;
const { t, i18n } = useLocale();
const { watch } = useFormContext<FormValues>();
const EventTypeScheduleDetails = memo(
({
isManagedEventType,
selectedScheduleValue,
}: {
isManagedEventType: boolean;
selectedScheduleValue: AvailabilityOption | undefined;
}) => {
const { data: loggedInUser } = useMeQuery();
const timeFormat = loggedInUser?.timeFormat;
const { t, i18n } = useLocale();
const { watch } = useFormContext<FormValues>();
const scheduleId = watch("schedule");
const { isLoading, data: schedule } = trpc.viewer.availability.schedule.get.useQuery(
{
scheduleId: scheduleId || loggedInUser?.defaultScheduleId || selectedScheduleValue?.value || undefined,
isManagedEventType,
},
{ enabled: !!scheduleId || !!loggedInUser?.defaultScheduleId || !!selectedScheduleValue }
);
const scheduleId = watch("schedule");
const { isLoading, data: schedule } = trpc.viewer.availability.schedule.get.useQuery(
{
scheduleId:
scheduleId || loggedInUser?.defaultScheduleId || selectedScheduleValue?.value || undefined,
isManagedEventType,
},
{ enabled: !!scheduleId || !!loggedInUser?.defaultScheduleId || !!selectedScheduleValue }
);
const filterDays = (dayNum: number) =>
schedule?.schedule.filter((item) => item.days.includes((dayNum + 1) % 7)) || [];
const filterDays = (dayNum: number) =>
schedule?.schedule.filter((item) => item.days.includes((dayNum + 1) % 7)) || [];
return (
<div className="border-default space-y-4 rounded border px-6 pb-4">
<ol className="table border-collapse text-sm">
{weekdayNames(i18n.language, 1, "long").map((day, index) => {
const isAvailable = !!filterDays(index).length;
return (
<li key={day} className="my-6 flex border-transparent last:mb-2">
<span
className={classNames(
"w-20 font-medium sm:w-32 ",
!isAvailable ? "text-subtle line-through" : "text-default"
)}>
{day}
</span>
{isLoading ? (
<SkeletonText className="block h-5 w-60" />
) : isAvailable ? (
<div className="space-y-3 text-right">
{filterDays(index).map((dayRange, i) => (
<div key={i} className="text-default flex items-center leading-4">
<span className="w-16 sm:w-28 sm:text-left">
{format(dayRange.startTime, timeFormat === 12)}
</span>
<span className="ms-4">-</span>
<div className="ml-6 sm:w-28">{format(dayRange.endTime, timeFormat === 12)}</div>
</div>
))}
</div>
) : (
<span className="text-subtle ml-6 sm:ml-0">{t("unavailable")}</span>
)}
</li>
);
})}
</ol>
<hr className="border-subtle" />
<div className="flex flex-col justify-center gap-2 sm:flex-row sm:justify-between">
<span className="text-default flex items-center justify-center text-sm sm:justify-start">
<Globe className="h-3.5 w-3.5 ltr:mr-2 rtl:ml-2" />
{schedule?.timeZone || <SkeletonText className="block h-5 w-32" />}
</span>
{!!schedule?.id && !schedule.isManaged && (
<Button
href={`/availability/${schedule.id}`}
disabled={isLoading}
color="minimal"
EndIcon={ExternalLink}
target="_blank"
rel="noopener noreferrer">
{t("edit_availability")}
</Button>
)}
return (
<div className="border-default space-y-4 rounded border px-6 pb-4">
<ol className="table border-collapse text-sm">
{weekdayNames(i18n.language, 1, "long").map((day, index) => {
const isAvailable = !!filterDays(index).length;
return (
<li key={day} className="my-6 flex border-transparent last:mb-2">
<span
className={classNames(
"w-20 font-medium sm:w-32 ",
!isAvailable ? "text-subtle line-through" : "text-default"
)}>
{day}
</span>
{isLoading ? (
<SkeletonText className="block h-5 w-60" />
) : isAvailable ? (
<div className="space-y-3 text-right">
{filterDays(index).map((dayRange, i) => (
<div key={i} className="text-default flex items-center leading-4">
<span className="w-16 sm:w-28 sm:text-left">
{format(dayRange.startTime, timeFormat === 12)}
</span>
<span className="ms-4">-</span>
<div className="ml-6 sm:w-28">{format(dayRange.endTime, timeFormat === 12)}</div>
</div>
))}
</div>
) : (
<span className="text-subtle ml-6 sm:ml-0">{t("unavailable")}</span>
)}
</li>
);
})}
</ol>
<hr className="border-subtle" />
<div className="flex flex-col justify-center gap-2 sm:flex-row sm:justify-between">
<span className="text-default flex items-center justify-center text-sm sm:justify-start">
<Globe className="h-3.5 w-3.5 ltr:mr-2 rtl:ml-2" />
{schedule?.timeZone || <SkeletonText className="block h-5 w-32" />}
</span>
{!!schedule?.id && !schedule.isManaged && (
<Button
href={`/availability/${schedule.id}`}
disabled={isLoading}
color="minimal"
EndIcon={ExternalLink}
target="_blank"
rel="noopener noreferrer">
{t("edit_availability")}
</Button>
)}
</div>
</div>
</div>
);
};
);
}
);
EventTypeScheduleDetails.displayName = "EventTypeScheduleDetails";
const EventTypeSchedule = ({ eventType }: { eventType: EventTypeSetup }) => {
const { t } = useLocale();
+12 -7
View File
@@ -19,16 +19,17 @@ interface IUserToValue {
email: string;
}
const mapUserToValue = ({ id, name, username, email }: IUserToValue) => ({
const mapUserToValue = ({ id, name, username, email }: IUserToValue, pendingString: string) => ({
value: `${id || ""}`,
label: `${name || ""}`,
label: `${name || email || ""}${!username ? ` (${pendingString})` : ""}`,
avatar: `${WEBAPP_URL}/${username}/avatar.png`,
email,
});
export const mapMemberToChildrenOption = (
member: EventTypeSetupProps["teamMembers"][number],
slug: string
slug: string,
pendingString: string
) => {
return {
slug,
@@ -43,7 +44,7 @@ export const mapMemberToChildrenOption = (
eventTypeSlugs: member.eventTypes ?? [],
},
value: `${member.id ?? ""}`,
label: member.name ?? "",
label: `${member.name || member.email || ""}${!member.username ? ` (${pendingString})` : ""}`,
};
};
@@ -291,9 +292,13 @@ export const EventTeamTab = ({
// description: t("round_robin_description"),
},
];
const teamMembersOptions = teamMembers.map(mapUserToValue);
const childrenEventTypeOptions = teamMembers.map((member) => {
return mapMemberToChildrenOption(member, eventType.slug);
const pendingMembers = (member: (typeof teamMembers)[number]) =>
!!eventType.team?.parentId || !!member.username;
const teamMembersOptions = teamMembers
.filter(pendingMembers)
.map((member) => mapUserToValue(member, t("pending")));
const childrenEventTypeOptions = teamMembers.filter(pendingMembers).map((member) => {
return mapMemberToChildrenOption(member, eventType.slug, t("pending"));
});
const isManagedEventType = eventType.schedulingType === SchedulingType.MANAGED;
return (
@@ -407,13 +407,13 @@ function EventTypeSingleLayout({
className="primary-navigation"
tabs={EventTypeTabs}
sticky
linkProps={{ shallow: true }}
linkShallow
itemClassname="items-start"
iconClassName="md:mt-px"
/>
</div>
<div className="p-2 md:mx-0 md:p-0 xl:hidden">
<HorizontalTabs tabs={EventTypeTabs} linkProps={{ shallow: true }} />
<HorizontalTabs tabs={EventTypeTabs} linkShallow />
</div>
<div className="w-full ltr:mr-2 rtl:ml-2">
<div
@@ -12,7 +12,7 @@ import TwoFactorAuthAPI from "./TwoFactorAuthAPI";
interface DisableTwoFactorAuthModalProps {
open: boolean;
onOpenChange: () => void;
disablePassword?: boolean;
/** Called when the user closes the modal without disabling two-factor auth */
onCancel: () => void;
/** Called when the user disables two-factor auth */
@@ -27,6 +27,7 @@ interface DisableTwoFactorValues {
const DisableTwoFactorAuthModal = ({
onDisable,
onCancel,
disablePassword,
open,
onOpenChange,
}: DisableTwoFactorAuthModalProps) => {
@@ -75,19 +76,21 @@ const DisableTwoFactorAuthModal = ({
<DialogContent title={t("disable_2fa")} description={t("disable_2fa_recommendation")} type="creation">
<Form form={form} handleSubmit={handleDisable}>
<div className="mb-8">
<PasswordField
labelProps={{
className: "block text-sm font-medium text-default",
}}
{...form.register("password")}
className="border-default mt-1 block w-full rounded-md border px-3 py-2 text-sm focus:border-black focus:outline-none focus:ring-black"
/>
{!disablePassword && (
<PasswordField
labelProps={{
className: "block text-sm font-medium text-default",
}}
{...form.register("password")}
className="border-default mt-1 block w-full rounded-md border px-3 py-2 text-sm focus:border-black focus:outline-none focus:ring-black"
/>
)}
<TwoFactor center={false} />
{errorMessage && <p className="mt-1 text-sm text-red-700">{errorMessage}</p>}
</div>
<DialogFooter showDivider className="mt-5 sm:mt-4 sm:flex sm:flex-row-reverse">
<DialogFooter showDivider className="relative mt-5">
<Button color="secondary" onClick={onCancel}>
{t("cancel")}
</Button>
@@ -185,7 +185,7 @@ const EnableTwoFactorModal = ({ onEnable, onCancel, open, onOpenChange }: Enable
)}
</div>
</WithStep>
<DialogFooter className="mt-8 sm:flex sm:flex-row-reverse" showDivider>
<DialogFooter className="mt-8" showDivider>
<Button color="secondary" onClick={onCancel}>
{t("cancel")}
</Button>
+2 -2
View File
@@ -3,7 +3,7 @@ import type { GroupBase, Props, InputProps, SingleValue, MultiValue } from "reac
import ReactSelect, { components } from "react-select";
import classNames from "@calcom/lib/classNames";
import useTheme from "@calcom/lib/hooks/useTheme";
import { useGetTheme } from "@calcom/lib/hooks/useTheme";
export type SelectProps<
Option,
@@ -30,7 +30,7 @@ function Select<
Group extends GroupBase<Option> = GroupBase<Option>
>({ className, ...props }: SelectProps<Option, IsMulti, Group>) {
const [mounted, setMounted] = useState<boolean>(false);
const { resolvedTheme, forcedTheme } = useTheme();
const { resolvedTheme, forcedTheme } = useGetTheme();
const hasDarkTheme = !forcedTheme && resolvedTheme === "dark";
const darkThemeColors = {
/** Dark Theme starts */
+25 -6
View File
@@ -48,7 +48,18 @@ type AppPropsWithChildren = AppProps & {
children: ReactNode;
};
const CustomI18nextProvider = (props: AppPropsWithChildren) => {
const getEmbedNamespace = (query: ReturnType<typeof useRouter>["query"]) => {
// Mostly embed query param should be available on server. Use that there.
// Use the most reliable detection on client
return typeof window !== "undefined" ? window.getEmbedNamespace() : (query.embed as string) || null;
};
// We dont need to pass nonce to the i18n provider - this was causing x2-x3 re-renders on a hard refresh
type AppPropsWithoutNonce = Omit<AppPropsWithChildren, "pageProps"> & {
pageProps: Omit<AppPropsWithChildren["pageProps"], "nonce">;
};
const CustomI18nextProvider = (props: AppPropsWithoutNonce) => {
/**
* i18n should never be clubbed with other queries, so that it's caching can be managed independently.
* We intend to not cache i18n query
@@ -87,7 +98,7 @@ const CalcomThemeProvider = (props: CalcomThemeProps) => {
// Use namespace of embed to ensure same namespaced embed are displayed with same theme. This allows different embeds on the same website to be themed differently
// One such example is our Embeds Demo and Testing page at http://localhost:3100
// Having `getEmbedNamespace` defined on window before react initializes the app, ensures that embedNamespace is available on the first mount and can be used as part of storageKey
const embedNamespace = typeof window !== "undefined" ? window.getEmbedNamespace() : null;
const embedNamespace = getEmbedNamespace(router.query);
const isEmbedMode = typeof embedNamespace === "string";
return (
@@ -158,10 +169,10 @@ function getThemeProviderProps({
? ThemeSupport.None
: ThemeSupport.App;
const isBookingPageThemSupportRequired = themeSupport === ThemeSupport.Booking;
const isBookingPageThemeSupportRequired = themeSupport === ThemeSupport.Booking;
const themeBasis = props.themeBasis;
if ((isBookingPageThemSupportRequired || isEmbedMode) && !themeBasis) {
if ((isBookingPageThemeSupportRequired || isEmbedMode) && !themeBasis) {
console.warn(
"`themeBasis` is required for booking page theme support. Not providing it will cause theme flicker."
);
@@ -184,7 +195,7 @@ function getThemeProviderProps({
`embed-theme-${embedNamespace}${appearanceIdSuffix}${embedExplicitlySetThemeSuffix}`
: themeSupport === ThemeSupport.App
? "app-theme"
: isBookingPageThemSupportRequired
: isBookingPageThemeSupportRequired
? `booking-theme${appearanceIdSuffix}`
: undefined;
@@ -216,11 +227,19 @@ const AppProviders = (props: AppPropsWithChildren) => {
const session = trpc.viewer.public.session.useQuery().data;
// No need to have intercom on public pages - Good for Page Performance
const isPublicPage = usePublicPage();
const { pageProps, ...rest } = props;
const { _nonce, ...restPageProps } = pageProps;
const propsWithoutNonce = {
pageProps: {
...restPageProps,
},
...rest,
};
const RemainingProviders = (
<EventCollectionProvider options={{ apiPath: "/api/collect-events" }}>
<SessionProvider session={session || undefined}>
<CustomI18nextProvider {...props}>
<CustomI18nextProvider {...propsWithoutNonce}>
<TooltipProvider>
{/* color-scheme makes background:transparent not work which is required by embed. We need to ensure next-theme adds color-scheme to `body` instead of `html`(https://github.com/pacocoursey/next-themes/blob/main/src/index.tsx#L74). Once that's done we can enable color-scheme support */}
<CalcomThemeProvider
+21
View File
@@ -446,6 +446,27 @@ const nextConfig = {
destination: "/apps/installed/conferencing",
permanent: true,
},
// OAuth callbacks when sent to localhost:3000(w would be expected) should be redirected to corresponding to WEBAPP_URL
...(process.env.NODE_ENV === "development" &&
// Safer to enable the redirect only when the user is opting to test out organizations
process.env.ORGANIZATIONS_ENABLED &&
// Prevent infinite redirect by checking that we aren't already on localhost
process.env.NEXT_PUBLIC_WEBAPP_URL !== "http://localhost:3000"
? [
{
has: [
{
type: "header",
key: "host",
value: "localhost:3000",
},
],
source: "/api/integrations/:args*",
destination: `${process.env.NEXT_PUBLIC_WEBAPP_URL}/api/integrations/:args*`,
permanent: false,
},
]
: []),
];
if (process.env.NEXT_PUBLIC_WEBAPP_URL === "https://app.cal.com") {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@calcom/web",
"version": "3.1.1",
"version": "3.1.4",
"private": true,
"scripts": {
"analyze": "ANALYZE=true next build",
+4 -17
View File
@@ -1,13 +1,14 @@
import type { GetStaticPropsContext } from "next";
import Link from "next/link";
import { useRouter } from "next/router";
import { useEffect, useState } from "react";
import React, { useEffect, useState } from "react";
import { orgDomainConfig, subdomainSuffix } from "@calcom/features/ee/organizations/lib/orgDomains";
import { DOCS_URL, JOIN_DISCORD, WEBSITE_URL, IS_CALCOM } from "@calcom/lib/constants";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { HeadSeo } from "@calcom/ui";
import { BookOpen, Check, ChevronRight, FileText, Shield } from "@calcom/ui/components/icon";
import { Discord } from "@calcom/ui/components/icon/Discord";
import PageWrapper from "@components/PageWrapper";
@@ -205,14 +206,7 @@ export default function Custom404() {
className="relative flex items-start space-x-4 py-6 rtl:space-x-reverse">
<div className="flex-shrink-0">
<span className="bg-muted flex h-12 w-12 items-center justify-center rounded-lg">
<svg
className="text-default h-6 w-6"
fill="currentColor"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 127.14 96.36">
<title>Discord Logo</title>
<path d="M107.7 8.07A105.15 105.15 0 0 0 81.47 0a72.06 72.06 0 0 0-3.36 6.83 97.68 97.68 0 0 0-29.11 0A72.37 72.37 0 0 0 45.64 0a105.89 105.89 0 0 0-26.25 8.09C2.79 32.65-1.71 56.6.54 80.21a105.73 105.73 0 0 0 32.17 16.15 77.7 77.7 0 0 0 6.89-11.11 68.42 68.42 0 0 1-10.85-5.18c.91-.66 1.8-1.34 2.66-2a75.57 75.57 0 0 0 64.32 0c.87.71 1.76 1.39 2.66 2a68.68 68.68 0 0 1-10.87 5.19 77 77 0 0 0 6.89 11.1 105.25 105.25 0 0 0 32.19-16.14c2.64-27.38-4.51-51.11-18.9-72.15ZM42.45 65.69C36.18 65.69 31 60 31 53s5-12.74 11.43-12.74S54 46 53.89 53s-5.05 12.69-11.44 12.69Zm42.24 0C78.41 65.69 73.25 60 73.25 53s5-12.74 11.44-12.74S96.23 46 96.12 53s-5.04 12.69-11.43 12.69Z" />
</svg>
<Discord className="text-default h-6 w-6" />
</span>
</div>
<div className="min-w-0 flex-1">
@@ -350,14 +344,7 @@ export default function Custom404() {
className="relative flex items-start space-x-4 py-6 rtl:space-x-reverse">
<div className="flex-shrink-0">
<span className="bg-muted flex h-12 w-12 items-center justify-center rounded-lg">
<svg
className="text-default h-6 w-6"
fill="currentColor"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 127.14 96.36">
<title>Discord Logo</title>
<path d="M107.7 8.07A105.15 105.15 0 0 0 81.47 0a72.06 72.06 0 0 0-3.36 6.83 97.68 97.68 0 0 0-29.11 0A72.37 72.37 0 0 0 45.64 0a105.89 105.89 0 0 0-26.25 8.09C2.79 32.65-1.71 56.6.54 80.21a105.73 105.73 0 0 0 32.17 16.15 77.7 77.7 0 0 0 6.89-11.11 68.42 68.42 0 0 1-10.85-5.18c.91-.66 1.8-1.34 2.66-2a75.57 75.57 0 0 0 64.32 0c.87.71 1.76 1.39 2.66 2a68.68 68.68 0 0 1-10.87 5.19 77 77 0 0 0 6.89 11.1 105.25 105.25 0 0 0 32.19-16.14c2.64-27.38-4.51-51.11-18.9-72.15ZM42.45 65.69C36.18 65.69 31 60 31 53s5-12.74 11.43-12.74S54 46 53.89 53s-5.05 12.69-11.44 12.69Zm42.24 0C78.41 65.69 73.25 60 73.25 53s5-12.74 11.44-12.74S96.23 46 96.12 53s-5.04 12.69-11.43 12.69Z" />
</svg>
<Discord className="text-default h-6 w-6" />
</span>
</div>
<div className="min-w-0 flex-1">
+1
View File
@@ -40,6 +40,7 @@ export default function Type({ slug, user, booking, away, isBrandingHidden, resc
);
}
Type.isBookingPage = true;
Type.PageWrapper = PageWrapper;
async function getDynamicGroupPageProps(context: GetServerSidePropsContext) {
+4 -3
View File
@@ -28,17 +28,18 @@ class MyDocument extends Document<Props> {
// Use a dummy URL as default so that URL parsing works for relative URLs as well. We care about searchParams and pathname only
const parsedUrl = new URL(asPath, "https://dummyurl");
const isEmbed = parsedUrl.pathname.endsWith("/embed") || parsedUrl.searchParams.get("embedType") !== null;
const embedColorScheme = parsedUrl.searchParams.get("ui.color-scheme");
const initialProps = await Document.getInitialProps(ctx);
return { isEmbed, nonce, ...initialProps };
return { isEmbed, embedColorScheme, nonce, ...initialProps };
}
render() {
const { locale } = this.props.__NEXT_DATA__;
const { isEmbed } = this.props;
const { isEmbed, embedColorScheme } = this.props;
const nonceParsed = z.string().safeParse(this.props.nonce);
const nonce = nonceParsed.success ? nonceParsed.data : "";
return (
<Html lang={locale}>
<Html lang={locale} style={embedColorScheme ? { colorScheme: embedColorScheme as string } : undefined}>
<Head nonce={nonce}>
<link rel="apple-touch-icon" sizes="180x180" href="/api/logo?type=apple-touch-icon" />
<link rel="icon" type="image/png" sizes="32x32" href="/api/logo?type=favicon-32" />
+3 -1
View File
@@ -12,7 +12,9 @@ import { IdentityProvider } from "@calcom/prisma/enums";
import { teamMetadataSchema } from "@calcom/prisma/zod-utils";
const signupSchema = z.object({
username: z.string(),
username: z.string().refine((value) => !value.includes("+"), {
message: "String should not contain a plus symbol (+).",
}),
email: z.string().email(),
password: z.string().min(7),
language: z.string().optional(),
@@ -6,6 +6,7 @@ import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
import { verifyPassword } from "@calcom/features/auth/lib/verifyPassword";
import { symmetricDecrypt } from "@calcom/lib/crypto";
import prisma from "@calcom/prisma";
import { IdentityProvider } from "@calcom/prisma/client";
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
if (req.method !== "POST") {
@@ -28,7 +29,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
return res.status(401).json({ message: "Not authenticated" });
}
if (!user.password) {
if (!user.password && user.identityProvider === IdentityProvider.CAL) {
return res.status(400).json({ error: ErrorCode.UserMissingPassword });
}
@@ -36,9 +37,11 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
return res.json({ message: "Two factor disabled" });
}
const isCorrectPassword = await verifyPassword(req.body.password, user.password);
if (!isCorrectPassword) {
return res.status(400).json({ error: ErrorCode.IncorrectPassword });
if (user.password && user.identityProvider === IdentityProvider.CAL) {
const isCorrectPassword = await verifyPassword(req.body.password, user.password);
if (!isCorrectPassword) {
return res.status(400).json({ error: ErrorCode.IncorrectPassword });
}
}
// if user has 2fa
if (user.twoFactorEnabled) {
+1 -1
View File
@@ -57,7 +57,7 @@ export default function Login({
.string()
.min(1, `${t("error_required_field")}`)
.email(`${t("enter_valid_email")}`),
password: z.string().min(1, `${t("error_required_field")}`),
password: !!totpEmail ? z.literal("") : z.string().min(1, `${t("error_required_field")}`),
})
// Passthrough other fields like totpCode
.passthrough();
+5 -1
View File
@@ -279,7 +279,11 @@ export default function Availability() {
</Dropdown>
<div className="border-default border-l-2" />
<Button className="ml-4 lg:ml-0" type="submit" form="availability-form">
<Button
className="ml-4 lg:ml-0"
type="submit"
form="availability-form"
loading={updateMutation.isLoading}>
{t("save")}
</Button>
</div>
+2 -2
View File
@@ -23,9 +23,9 @@ import {
useIsEmbed,
} from "@calcom/embed-core/embed-iframe";
import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
import { SystemField } from "@calcom/features/bookings/lib/SystemField";
import { getBookingWithResponses } from "@calcom/features/bookings/lib/get-booking";
import {
SystemField,
getBookingFieldsWithSystemFields,
SMS_REMINDER_NUMBER_FIELD,
} from "@calcom/features/bookings/lib/getBookingFields";
@@ -278,7 +278,7 @@ export default function Success(props: SuccessProps) {
// This is a weird case where the same route can be opened in booking flow as a success page or as a booking detail page from the app
// As Booking Page it has to support configured theme, but as booking detail page it should not do any change. Let Shell.tsx handle it.
useTheme(isSuccessBookingPage ? props.profile.theme : undefined);
useTheme(isSuccessBookingPage ? props.profile.theme : "system");
useBrandColors({
brandColor: props.profile.brandColor,
darkBrandColor: props.profile.darkBrandColor,
+1
View File
@@ -39,6 +39,7 @@ export default function Type({ slug, user, booking, away, isBrandingHidden, isTe
}
Type.PageWrapper = PageWrapper;
Type.isBookingPage = true;
async function getUserPageProps(context: GetServerSidePropsContext) {
const { link, slug } = paramsSchema.parse(context.params);
+65 -58
View File
@@ -66,7 +66,6 @@ import {
User as UserIcon,
} from "@calcom/ui/components/icon";
import { withQuery } from "@lib/QueryCell";
import useMeQuery from "@lib/hooks/useMeQuery";
import { EmbedButton, EmbedDialog } from "@components/Embed";
@@ -835,13 +834,76 @@ const SetupProfileBanner = ({ closeAction }: { closeAction: () => void }) => {
);
};
const Main = () => {
const isMobile = useMediaQuery("(max-width: 768px)");
const router = useRouter();
const filters = getTeamsFiltersFromQuery(router.query);
const orgBranding = useOrgBrandingValues();
// TODO: Maybe useSuspenseQuery to focus on success case only? Remember that it would crash the page when there is an error in query. Also, it won't support skeleton
const res = trpc.viewer.eventTypes.getByViewer.useQuery(filters && { filters });
if (res.status === "loading") {
return <SkeletonLoader />;
}
if (res.status === "error") {
return <Alert severity="error" title="Something went wrong" message={res.error.message} />;
}
const data = res.data;
const isFilteredByOnlyOneItem =
(filters?.teamIds?.length === 1 || filters?.userIds?.length === 1) && data.eventTypeGroups.length === 1;
return (
<>
{data.eventTypeGroups.length > 1 || isFilteredByOnlyOneItem ? (
<>
{isMobile ? (
<MobileTeamsTab eventTypeGroups={data.eventTypeGroups} />
) : (
data.eventTypeGroups.map((group: EventTypeGroup, index: number) => (
<div className="flex flex-col" key={group.profile.slug}>
<EventTypeListHeading
profile={group.profile}
membershipCount={group.metadata.membershipCount}
teamId={group.teamId}
orgSlug={orgBranding?.slug}
/>
<EventTypeList
types={group.eventTypes}
group={group}
groupIndex={index}
readOnly={group.metadata.readOnly}
/>
</div>
))
)}
</>
) : (
data.eventTypeGroups.length === 1 && (
<EventTypeList
types={data.eventTypeGroups[0].eventTypes}
group={data.eventTypeGroups[0]}
groupIndex={0}
readOnly={data.eventTypeGroups[0].metadata.readOnly}
/>
)
)}
{data.eventTypeGroups.length === 0 && <CreateFirstEventTypeView />}
<EmbedDialog />
{router.query.dialog === "duplicate" && <DuplicateDialog />}
</>
);
};
const EventTypesPage = () => {
const { t } = useLocale();
const router = useRouter();
const { open } = useIntercom();
const { query } = router;
const { data: user } = useMeQuery();
const isMobile = useMediaQuery("(max-width: 768px)");
const [showProfileBanner, setShowProfileBanner] = useState(false);
const orgBranding = useOrgBrandingValues();
@@ -860,10 +922,6 @@ const EventTypesPage = () => {
);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const filters = getTeamsFiltersFromQuery(router.query);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const WithQuery = withQuery(trpc.viewer.eventTypes.getByViewer as any, filters && { filters });
return (
<div>
@@ -879,58 +937,7 @@ const EventTypesPage = () => {
afterHeading={showProfileBanner && <SetupProfileBanner closeAction={closeBanner} />}
beforeCTAactions={<Actions />}
CTA={<CTA />}>
<WithQuery
customLoader={<SkeletonLoader />}
success={({ data }) => {
const isFilteredByOnlyOneItem =
(filters?.teamIds?.length === 1 || filters?.userIds?.length === 1) &&
data.eventTypeGroups.length === 1;
return (
<>
{data.eventTypeGroups.length > 1 || isFilteredByOnlyOneItem ? (
<>
{isMobile ? (
<MobileTeamsTab eventTypeGroups={data.eventTypeGroups} />
) : (
data.eventTypeGroups.map((group: EventTypeGroup, index: number) => (
<div className="flex flex-col" key={group.profile.slug}>
<EventTypeListHeading
profile={group.profile}
membershipCount={group.metadata.membershipCount}
teamId={group.teamId}
orgSlug={orgBranding?.slug}
/>
<EventTypeList
types={group.eventTypes}
group={group}
groupIndex={index}
readOnly={group.metadata.readOnly}
/>
</div>
))
)}
</>
) : (
data.eventTypeGroups.length === 1 && (
<EventTypeList
types={data.eventTypeGroups[0].eventTypes}
group={data.eventTypeGroups[0]}
groupIndex={0}
readOnly={data.eventTypeGroups[0].metadata.readOnly}
/>
)
)}
{data.eventTypeGroups.length === 0 && <CreateFirstEventTypeView />}
<EmbedDialog />
{router.query.dialog === "duplicate" && <DuplicateDialog />}
</>
);
}}
/>
<Main />
</Shell>
</div>
);
@@ -60,3 +60,4 @@ export default function Page(props: Props) {
}
Page.PageWrapper = PageWrapper;
Page.isBookingPage = true;
@@ -37,4 +37,5 @@ export default function Page(props: Props) {
return <UserPage {...(props as UserPageProps)} />;
}
Page.isBookingPage = true;
Page.PageWrapper = PageWrapper;
@@ -34,14 +34,15 @@ const TwoFactorAuthView = () => {
if (isLoading) return <SkeletonLoader />;
const isCalProvider = user?.identityProvider === "CAL";
const canSetupTwoFactor = !isCalProvider && !user?.twoFactorEnabled;
return (
<>
<Meta title={t("2fa")} description={t("set_up_two_factor_authentication")} />
{!isCalProvider && <Alert severity="neutral" message={t("2fa_disabled")} />}
{canSetupTwoFactor && <Alert severity="neutral" message={t("2fa_disabled")} />}
<div className="mt-6 flex items-start space-x-4">
<Switch
data-testid="two-factor-switch"
disabled={!isCalProvider}
disabled={canSetupTwoFactor}
checked={user?.twoFactorEnabled}
onCheckedChange={() =>
user?.twoFactorEnabled ? setDisableModalOpen(true) : setEnableModalOpen(true)
@@ -72,6 +73,7 @@ const TwoFactorAuthView = () => {
<DisableTwoFactorModal
open={disableModalOpen}
disablePassword={!isCalProvider}
onOpenChange={() => setDisableModalOpen(!disableModalOpen)}
onDisable={() => {
setDisableModalOpen(false);
+14 -7
View File
@@ -1,3 +1,4 @@
import { zodResolver } from "@hookform/resolvers/zod";
import type { GetServerSidePropsContext } from "next";
import { signIn } from "next-auth/react";
import { useRouter } from "next/router";
@@ -23,13 +24,18 @@ import PageWrapper from "@components/PageWrapper";
import { IS_GOOGLE_LOGIN_ENABLED } from "../server/lib/constants";
import { ssrInit } from "../server/lib/ssr";
type FormValues = {
username: string;
email: string;
password: string;
apiError: string;
token?: string;
};
const signupSchema = z.object({
username: z.string().refine((value) => !value.includes("+"), {
message: "String should not contain a plus symbol (+).",
}),
email: z.string().email(),
password: z.string().min(7),
language: z.string().optional(),
token: z.string().optional(),
apiError: z.string().optional(), // Needed to display API errors doesnt get passed to the API
});
type FormValues = z.infer<typeof signupSchema>;
type SignupProps = inferSSRProps<typeof getServerSideProps>;
@@ -39,6 +45,7 @@ export default function Signup({ prepopulateFormValues, token, orgSlug }: Signup
const flags = useFlagMap();
const telemetry = useTelemetry();
const methods = useForm<FormValues>({
resolver: zodResolver(signupSchema),
defaultValues: prepopulateFormValues,
});
const {
+10 -6
View File
@@ -130,7 +130,9 @@ function TeamPage({ team, isUnpublished, markdownStrippedBio, isValidOrgDomain }
<div className="ms-3 inline-block truncate">
<span className="text-default text-sm font-bold">{ch.name}</span>
<span className="text-subtle block text-xs">
{t("number_member", { count: ch.members.length })}
{t("number_member", {
count: ch.members.filter((mem) => mem.user.username !== null).length,
})}
</span>
</div>
</div>
@@ -138,11 +140,13 @@ function TeamPage({ team, isUnpublished, markdownStrippedBio, isValidOrgDomain }
className="mr-6"
size="sm"
truncateAfter={4}
items={ch.members.map(({ user: member }) => ({
alt: member.name || "",
image: `/${member.username}/avatar.png`,
title: member.name || "",
}))}
items={ch.members
.filter((mem) => mem.user.username !== null)
.map(({ user: member }) => ({
alt: member.name || "",
image: `/${member.username}/avatar.png`,
title: member.name || "",
}))}
/>
</Link>
</li>
+1
View File
@@ -42,6 +42,7 @@ export default function Type({ slug, user, booking, away, isBrandingHidden, org
}
Type.PageWrapper = PageWrapper;
Type.isBookingPage = true;
const paramsSchema = z.object({
type: z.string().transform((s) => slugify(s)),
+2 -3
View File
@@ -36,7 +36,6 @@ test.describe("2FA Tests", async () => {
*/
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
await fillOtp({ page, secret: "123456", noRetry: true });
await page.press('input[name="2fa6"]', "Enter");
await expect(page.locator('[data-testid="error-submitting-code"]')).toBeVisible();
await fillOtp({
@@ -44,9 +43,9 @@ test.describe("2FA Tests", async () => {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
secret: secret!,
});
await page.press('input[name="2fa6"]', "Enter");
await expect(page.locator(`[data-testid=two-factor-switch][data-state="checked"]`)).toBeVisible();
await page.waitForSelector(`[data-testid=two-factor-switch]`);
await expect(page.locator(`[data-testid=two-factor-switch]`).isChecked()).toBeTruthy();
return user;
});
@@ -5,6 +5,7 @@ import { uuid } from "short-uuid";
import prisma from "@calcom/prisma";
import { WebhookTriggerEvents } from "@calcom/prisma/enums";
import type { CalendarEvent } from "@calcom/types/Calendar";
import { test } from "./lib/fixtures";
import { createHttpServer, waitFor, selectFirstAvailableTimeSlotNextMonth } from "./lib/testUtils";
@@ -40,6 +41,101 @@ test.describe("Manage Booking Questions", () => {
await runTestStepsCommonForTeamAndUserEventType(page, context, webhookReceiver);
});
test("Split 'Full name' into 'First name' and 'Last name'", async ({
page,
users,
context,
}, testInfo) => {
// Considering there are many steps in it, it would need more than default test timeout
test.setTimeout(testInfo.timeout * 3);
const user = await createAndLoginUserWithEventTypes({ page, users });
const webhookReceiver = await addWebhook(user);
await test.step("Go to first EventType Page ", async () => {
const $eventTypes = page.locator("[data-testid=event-types] > li a");
const firstEventTypeElement = $eventTypes.first();
await firstEventTypeElement.click();
});
await test.step("Open the 'Name' field dialog", async () => {
await page.click('[href$="tabName=advanced"]');
await page.locator('[data-testid="field-name"] [data-testid="edit-field-action"]').click();
});
await test.step("Toggle on the variant toggle and save Event Type", async () => {
await page.click('[data-testid="variant-toggle"]');
await page.click("[data-testid=field-add-save]");
await saveEventType(page);
});
await test.step("Book a time slot with firstName and lastName provided separately", async () => {
await doOnFreshPreview(page, context, async (page) => {
await expectSystemFieldsToBeThereOnBookingPage({ page, isFirstAndLastNameVariant: true });
await bookTimeSlot({
page,
name: { firstName: "John", lastName: "Doe" },
email: "booker@example.com",
});
await expect(page.locator("[data-testid=success-page]")).toBeVisible();
expect(await page.locator('[data-testid="attendee-name-John Doe"]').nth(0).textContent()).toBe(
"John Doe"
);
await expectWebhookToBeCalled(webhookReceiver, {
triggerEvent: WebhookTriggerEvents.BOOKING_CREATED,
payload: {
attendees: [
{
// It would have full Name only
name: "John Doe",
email: "booker@example.com",
},
],
responses: {
name: {
label: "your_name",
value: {
firstName: "John",
lastName: "Doe",
},
},
email: {
label: "email_address",
value: "booker@example.com",
},
},
},
});
});
});
await test.step("Verify that we can prefill name and other fields correctly", async () => {
await doOnFreshPreview(page, context, async (page) => {
const url = page.url();
const prefillUrl = new URL(url);
prefillUrl.searchParams.append("name", "John Johny Janardan");
prefillUrl.searchParams.append("email", "john@example.com");
prefillUrl.searchParams.append("guests", "guest1@example.com");
prefillUrl.searchParams.append("guests", "guest2@example.com");
prefillUrl.searchParams.append("notes", "This is an additional note");
await page.goto(prefillUrl.toString());
await bookTimeSlot({ page, skipSubmission: true });
await expectSystemFieldsToBeThereOnBookingPage({
page,
isFirstAndLastNameVariant: true,
values: {
name: {
firstName: "John",
lastName: "Johny Janardan",
},
email: "john@example.com",
guests: ["guest1@example.com", "guest2@example.com"],
notes: "This is an additional note",
},
});
});
});
});
});
test.describe("For Team EventType", () => {
@@ -91,12 +187,23 @@ async function runTestStepsCommonForTeamAndUserEventType(
}
) {
await page.click('[href$="tabName=advanced"]');
await test.step("Check that all the system questions are shown in the list", async () => {
await page.locator("[data-testid=field-name]").isVisible();
await page.locator("[data-testid=field-email]").isVisible();
await page.locator("[data-testid=field-notes]").isVisible();
await page.locator("[data-testid=field-guests]").isVisible();
await page.locator("[data-testid=field-rescheduleReason]").isVisible();
// It is conditional
// await page.locator("data-testid=field-location").isVisible();
});
await test.step("Add Question and see that it's shown on Booking Page at appropriate position", async () => {
await addQuestionAndSave({
page,
question: {
name: "how_are_you",
type: "Name",
type: "Address",
label: "How are you?",
placeholder: "I'm fine, thanks",
required: true,
@@ -104,13 +211,13 @@ async function runTestStepsCommonForTeamAndUserEventType(
});
await doOnFreshPreview(page, context, async (page) => {
const allFieldsLocator = await expectSystemFieldsToBeThere(page);
const allFieldsLocator = await expectSystemFieldsToBeThereOnBookingPage({ page });
const userFieldLocator = allFieldsLocator.nth(5);
await expect(userFieldLocator.locator('[name="how_are_you"]')).toBeVisible();
// There are 2 labels right now. Will be one in future. The second one is hidden
expect(await getLabelText(userFieldLocator)).toBe("How are you?");
await expect(userFieldLocator.locator("input[type=text]")).toBeVisible();
await expect(userFieldLocator.locator("input")).toBeVisible();
});
});
@@ -190,8 +297,6 @@ async function runTestStepsCommonForTeamAndUserEventType(
},
});
expect(payload.location).toBe("integrations:daily");
expect(payload.attendees[0]).toMatchObject({
name: "Booker",
email: "booker@example.com",
@@ -217,7 +322,24 @@ async function runTestStepsCommonForTeamAndUserEventType(
});
}
async function expectSystemFieldsToBeThere(page: Page) {
async function expectSystemFieldsToBeThereOnBookingPage({
page,
isFirstAndLastNameVariant,
values,
}: {
page: Page;
isFirstAndLastNameVariant?: boolean;
values?: Partial<{
name: {
firstName?: string;
lastName?: string;
fullName?: string;
};
email: string;
notes: string;
guests: string[];
}>;
}) {
const allFieldsLocator = page.locator("[data-fob-field-name]:not(.hidden)");
const nameLocator = allFieldsLocator.nth(0);
const emailLocator = allFieldsLocator.nth(1);
@@ -226,11 +348,44 @@ async function expectSystemFieldsToBeThere(page: Page) {
const additionalNotes = allFieldsLocator.nth(3);
const guestsLocator = allFieldsLocator.nth(4);
await expect(nameLocator.locator('[name="name"]')).toBeVisible();
await expect(emailLocator.locator('[name="email"]')).toBeVisible();
if (isFirstAndLastNameVariant) {
if (values?.name) {
await expect(nameLocator.locator('[name="firstName"]')).toHaveValue(values?.name?.firstName || "");
await expect(nameLocator.locator('[name="lastName"]')).toHaveValue(values?.name?.lastName || "");
expect(await nameLocator.locator(".testid-firstName > label").innerText()).toContain("*");
} else {
await expect(nameLocator.locator('[name="firstName"]')).toBeVisible();
await expect(nameLocator.locator('[name="lastName"]')).toBeVisible();
}
} else {
if (values?.name) {
await expect(nameLocator.locator('[name="name"]')).toHaveValue(values?.name?.fullName || "");
}
await expect(nameLocator.locator('[name="name"]')).toBeVisible();
expect(await nameLocator.locator("label").innerText()).toContain("*");
}
await expect(additionalNotes.locator('[name="notes"]')).toBeVisible();
await expect(guestsLocator.locator("button")).toBeVisible();
if (values?.email) {
await expect(emailLocator.locator('[name="email"]')).toHaveValue(values?.email || "");
} else {
await expect(emailLocator.locator('[name="email"]')).toBeVisible();
}
if (values?.notes) {
await expect(additionalNotes.locator('[name="notes"]')).toHaveValue(values?.notes);
} else {
await expect(additionalNotes.locator('[name="notes"]')).toBeVisible();
}
if (values?.guests) {
const allGuestsLocators = guestsLocator.locator('[type="email"]');
for (let i = 0; i < values.guests.length; i++) {
await expect(allGuestsLocators.nth(i)).toHaveValue(values.guests[i] || "");
}
await expect(guestsLocator.locator("[data-testid='add-another-guest']")).toBeVisible();
} else {
await expect(guestsLocator.locator("[data-testid='add-guests']")).toBeVisible();
}
return allFieldsLocator;
}
@@ -238,11 +393,33 @@ async function expectSystemFieldsToBeThere(page: Page) {
// Verify webhook is sent with the correct data, DB is correct (including metadata)
//TODO: Verify that prefill works
async function bookTimeSlot({ page, name, email }: { page: Page; name: string; email: string }) {
// --- fill form
await page.fill('[name="name"]', name);
await page.fill('[name="email"]', email);
await page.press('[name="email"]', "Enter");
async function bookTimeSlot({
page,
name,
email,
skipSubmission = false,
}: {
page: Page;
name?: string | { firstName: string; lastName?: string };
email?: string;
skipSubmission?: boolean;
}) {
if (name) {
if (typeof name === "string") {
await page.fill('[name="name"]', name);
} else {
await page.fill('[name="firstName"]', name.firstName);
if (name.lastName) {
await page.fill('[name="lastName"]', name.lastName);
}
}
}
if (email) {
await page.fill('[name="email"]', email);
}
if (!skipSubmission) {
await page.press('[name="email"]', "Enter");
}
}
/**
@@ -424,3 +601,22 @@ async function addWebhook(
return webhookReceiver;
}
async function expectWebhookToBeCalled(
webhookReceiver: Awaited<ReturnType<typeof addWebhook>>,
expectedBody: {
triggerEvent: WebhookTriggerEvents;
payload: Omit<Partial<CalendarEvent>, "attendees"> & {
attendees: Partial<CalendarEvent["attendees"][number]>[];
};
}
) {
await waitFor(() => {
expect(webhookReceiver.requestList.length).toBe(1);
});
const [request] = webhookReceiver.requestList;
const body = request.body;
expect(body).toMatchObject(expectedBody);
}
+191 -1
View File
@@ -11,11 +11,23 @@
"calcom_explained_new_user": "Dokončete nastavení svého účtu {{appName}}! Jste jen několik kroků od vyřešení všech svých problémů s plánováním.",
"have_any_questions": "Máte otázky? Jsme tu, abychom vám pomohli.",
"reset_password_subject": "{{appName}}: Pokyny pro obnovení hesla",
"verify_email_subject": "{{appName}}: Ověřte svůj účet",
"check_your_email": "Zkontrolujte svůj e-mail",
"verify_email_page_body": "Odeslali jsme e-mail na adresu {{email}}. E-mailovou adresu je důležité ověřit, aby byla zaručena co nejlepší doručitelnost e-mailů a kalendářů z {{appName}}.",
"verify_email_banner_body": "Ověřte svoji e-mailovou adresu, abyste zaručili co nejlepší doručitelnost e-mailů a kalendáře",
"verify_email_email_header": "Ověřte svoji e-mailovou adresu",
"verify_email_email_button": "Ověřit e-mail",
"verify_email_email_body": "Ověřte svoji e-mailovou adresu kliknutím na tlačítko níže.",
"verify_email_email_link_text": "Zde je odkaz pro případ, že nemáte rádi klikání na tlačítka:",
"email_sent": "E-mail byl odeslán",
"event_declined_subject": "Odmítnuto: {{title}} v {{date}}",
"event_cancelled_subject": "Zrušeno: {{title}} ({{date}})",
"event_request_declined": "Žádost o událost byla zamítnuta",
"event_request_declined_recurring": "Žádost o opakovanou událost byla zamítnuta",
"event_request_cancelled": "Vaše plánovaná událost byla zrušena",
"organizer": "Organizátor",
"need_to_reschedule_or_cancel": "Přeplánovat nebo zrušit?",
"no_options_available": "Nejsou k dispozici žádné možnosti",
"cancellation_reason": "Důvod zrušení",
"cancellation_reason_placeholder": "Proč rušíte?\n",
"rejection_reason": "Důvod odmítnutí",
@@ -75,7 +87,9 @@
"your_meeting_has_been_booked": "Vaše schůzka byla rezervována",
"event_type_has_been_rescheduled_on_time_date": "Váš {{title}} byl přeplánován na {{date}}.",
"event_has_been_rescheduled": "Změna - Vaše událost byla přesunuta na jindy",
"request_reschedule_subtitle": "{{organizer}} zrušil rezervaci a požádal vás, abyste si vybrali jiný termín.",
"request_reschedule_title_organizer": "Požádali jste uživatele {{attendee}} o změnu časového plánu",
"request_reschedule_subtitle_organizer": "Zrušili jste rezervaci a účastník {{attendee}} by si s vámi měl rezervovat nový čas.",
"rescheduled_event_type_subject": "Žádost o přesunutí schůzky: {{eventType}} s {{name}} dne {{date}}",
"requested_to_reschedule_subject_attendee": "Akce vyžadovaná k přeplánování: zarezervujte si nový čas pro událost {{eventType}} s osobou {{name}}",
"hi_user_name": "Hezký den, {{name}}",
@@ -104,6 +118,7 @@
"team_info": "Informace o týmu",
"request_another_invitation_email": "Pokud si nepřejete použít e-mail {{toEmail}} pro {{appName}} nebo už účet na {{appName}} máte, požádejte prosím o další pozvánku na jiný e-mail.",
"you_have_been_invited": "Byli jste pozváni do týmu {{teamName}}",
"user_invited_you": "Uživatel {{user}} vás pozval, abyste se připojili k subjektu {{entity}} {{team}} v aplikaci {{appName}}",
"hidden_team_member_title": "V tomto týmu nejste viditelní",
"hidden_team_member_message": "Vaše místo není zaplacené. Buď přejděte na tarif Pro, nebo informujte vlastníka týmu, že za vaše místo může zaplatit.",
"hidden_team_owner_message": "Pro využívání týmů potřebujete tarif Pro, budete skrytí, než přejdete na vyšší verzi.",
@@ -114,6 +129,8 @@
"team_upgrade_banner_description": "Děkujeme vám za vyzkoušení našeho nového týmového plánu. Všimli jsme si, že váš tým „{{teamName}}“ je nutné upgradovat.",
"upgrade_banner_action": "Upgradovat zde",
"team_upgraded_successfully": "Váš tým byl úspěšně přešel na vyšší verzi!",
"org_upgrade_banner_description": "Děkujeme, že jste vyzkoušeli tarif naší organizace. Všimli jsme si, že vaše organizace „{{teamName}}“ vyžaduje upgrade.",
"org_upgraded_successfully": "Vaše organizace byla upgradována!",
"use_link_to_reset_password": "Pro obnovení hesla použijte odkaz níž",
"hey_there": "Zdravíme,",
"forgot_your_password_calcom": "Zapomněli jste heslo? - {{appName}}",
@@ -180,6 +197,7 @@
"blog": "Blog",
"blog_description": "Přečtěte si naše nejnovější novinky a články",
"join_our_community": "Připojte se k naší komunitě",
"join_our_discord": "Připojte se k našemu Discordu",
"404_claim_entity_user": "Nárokujte si své uživatelské jméno a plánujte události",
"popular_pages": "Oblíbené stránky",
"register_now": "Zaregistrovat se nyní",
@@ -187,6 +205,7 @@
"page_doesnt_exist": "Tato stránka neexistuje.",
"check_spelling_mistakes_or_go_back": "Zkontrolovat chyby pravopisu nebo se vrátit na předchozí stránku.",
"404_page_not_found": "404: Tato stránka nebyla nalezena.",
"booker_event_not_found": "Nepodařilo se nám najít událost, kterou se snažíte rezervovat.",
"getting_started": "Začínáme",
"15min_meeting": "15 min schůzka",
"30min_meeting": "30 min schůzka",
@@ -222,11 +241,14 @@
"done": "Hotovo",
"all_done": "Hotovo!",
"all": "Všechny aplikace",
"yours": "Váš účet",
"available_apps": "Dostupné aplikace",
"check_email_reset_password": "Podívejte se do e-mailu. Poslali jsme vám odkaz pro obnovení hesla.",
"finish": "Dokončit",
"organization_general_description": "Správa nastavení jazyka a časového pásma vašeho týmu",
"few_sentences_about_yourself": "Pár vět o vás. Budou se zobrazovat na URL vaší osobní stránky.",
"nearly_there": "Téměř hotovo!",
"nearly_there_instructions": "Poslední věc... stručný popis o vás a fotografie vám pomůžou získat rezervace a lidi aspoň budou vědět, koho si rezervují.",
"set_availability_instructions": "Určete si časové intervaly, kdy jste pravidelně dostupní. Později můžete vytvořit další a přiřadit je různým kalendářům.",
"set_availability": "Nastavte, jak jste dostupní",
"continue_without_calendar": "Pokračovat bez kalendáře",
@@ -282,6 +304,18 @@
"success": "Povedlo se",
"failed": "Nezdařilo se",
"password_has_been_reset_login": "Vaše heslo bylo obnoveno. Nyní se můžete přihlásit pomocí nově vytvořeného hesla.",
"layout": "Rozvržení",
"bookerlayout_default_title": "Výchozí zobrazení",
"bookerlayout_description": "Můžete si jich vybrat více a vaši rezervující si mohou zobrazení přepínat.",
"bookerlayout_user_settings_title": "Rozvržení rezervace",
"bookerlayout_user_settings_description": "Můžete si jich vybrat více a vaši rezervující si mohou zobrazení přepínat. Lze nadefinovat pro každou událost zvlášť.",
"bookerlayout_month_view": "Měsíční",
"bookerlayout_week_view": "Týdenní",
"bookerlayout_column_view": "Sloupec",
"bookerlayout_error_min_one_enabled": "Musí být povoleno alespoň jedno rozvržení.",
"bookerlayout_error_default_not_enabled": "Rozvržení, které jste vybrali jako výchozí zobrazení, není součástí povolených rozvržení.",
"bookerlayout_error_unknown_layout": "Vámi vybrané rozvržení není platné rozvržení.",
"bookerlayout_override_global_settings": "Tohle lze nastavit pro všechny typy událostí v <2>nastavení / vzhledu</2> nebo <6>nadefinovat pouze pro tuto událost</6>.",
"unexpected_error_try_again": "Došlo k neočekávané chybě. Zkuste to znovu.",
"sunday_time_error": "Neplatný čas v neděli",
"monday_time_error": "Neplatný čas v pondělí",
@@ -294,6 +328,7 @@
"error_end_time_next_day": "Čas konce nemůže být delší než 24 hodin",
"back_to_bookings": "Zpět na rezervace",
"free_to_pick_another_event_type": "Kdykoliv si můžete vybrat jinou událost.",
"cancelled": "Zrušeno",
"cancellation_successful": "Zrušení proběhlo úspěšně",
"really_cancel_booking": "Opravdu chcete zrušit svou rezervaci?",
"cannot_cancel_booking": "Tuto rezervaci nelze zrušit",
@@ -302,6 +337,12 @@
"cancelling_event_recurring": "Tato událost je jedním z případů opakující se události.",
"cancelling_all_recurring": "Toto jsou všechny zbývající instance opakující se události.",
"error_with_status_code_occured": "Došlo k chybě se stavovým kódem {{status}}.",
"error_event_type_url_duplicate": "Typ události s touto adresou URL již existuje.",
"error_event_type_unauthorized_create": "Tuto událost nelze vytvořit",
"error_event_type_unauthorized_update": "Tuto událost nelze upravit",
"error_workflow_unauthorized_create": "Tento pracovní postup nelze vytvořit",
"error_schedule_unauthorized_create": "Nejste schopni vytvořit tento plán",
"booking_already_cancelled": "Tato rezervace již byla zrušena",
"booking_already_accepted_rejected": "Tato rezervace již byla přijata nebo zamítnuta",
"go_back_home": "Přejít na úvod",
"or_go_back_home": "Nebo přejít na úvod",
@@ -311,10 +352,12 @@
"no_status_bookings_yet_description": "Nemáte žádné {{status}} rezervace. {{description}}",
"event_between_users": "{{eventName}} mezi {{host}} a {{attendeeName}}",
"bookings": "Rezervace",
"booking_not_found": "Rezervace nenalezena",
"bookings_description": "Zobrazte si nadcházející a proběhlé události rezervovaní prostřednictvím odkazu na typ události.",
"upcoming_bookings": "Jakmile si někdo rezervuje váš čas, zobrazí se to zde.",
"recurring_bookings": "Jakmile si někdo s vámi zarezervuje opakovanou schůzku, zobrazí se to zde.",
"past_bookings": "Vaše proběhlé rezervace se zobrazí zde.",
"cancelled_bookings": "Zde se zobrazují vaše zrušené rezervace.",
"unconfirmed_bookings": "Vaše nepotvrzené rezervace se zobrazí zde.",
"unconfirmed_bookings_tooltip": "Nepotvrzené rezervace",
"on": "dne",
@@ -348,15 +391,19 @@
"user_dynamic_booking_disabled": "Někteří uživatelé ve skupině mají v současné době zakázané dynamické skupinové rezervace",
"allow_dynamic_booking_tooltip": "Odkazy na skupinové rezervace, které lze vytvořit dynamicky přidáním více uživatelských jmen s „+“. příklad: „{{appName}}/bailey+peer“",
"allow_dynamic_booking": "Povolit účastníkům rezervovat vás prostřednictvím dynamických skupinových rezervací",
"dynamic_booking": "Dynamické odkazy na skupiny",
"email": "E-mailová adresa",
"email_placeholder": "vas@email.cz",
"full_name": "Jméno a příjmení",
"browse_api_documentation": "Procházejte naši API dokumentaci",
"leverage_our_api": "Pro plnou kontrolu a přizpůsobení využijte naše API.",
"create_webhook": "Vytvořit webhook",
"booking_cancelled": "Rezervace zrušena",
"booking_rescheduled": "Rezervace přesunuta",
"recording_ready": "Odkaz ke stažení záznamu je připraven",
"booking_created": "Rezervace vytvořena",
"booking_rejected": "Rezervace zamítnuta",
"booking_requested": "Rezervace vyžádána",
"meeting_ended": "Schůzka skončila",
"form_submitted": "Formulář byl odeslán",
"event_triggers": "Eventy na základě akce",
@@ -366,6 +413,8 @@
"team_webhooks": "Týmové Webhooky",
"create_new_webhook_to_account": "Vytvořit nový webhook pro váš účet",
"new_webhook": "Nový webhook",
"receive_cal_meeting_data": "Nechte si zaslat data o schůzce v {{appName}} na zadanou adresu URL v reálném čase, pokud dojde k naplánování nebo zrušení schůzky.",
"receive_cal_event_meeting_data": "Nechte si zaslat data o schůzce v {{appName}} na zadanou adresu URL v reálném čase, pokud dojde k naplánování nebo zrušení této schůzky.",
"responsive_fullscreen_iframe": "Responzivní iframe na celou obrazovku",
"loading": "Načítám...",
"deleting": "Odstraňování...",
@@ -428,6 +477,7 @@
"max_limit_allowed_hint": "Maximální povolená délka je {{limit}} znaků",
"invalid_password_hint": "Heslo musí být minimálně {{passwordLength}} znaků dlouhé, obsahovat alespoň jedno číslo a obsahovat kombinaci velkých a malých písmen",
"incorrect_password": "Heslo není správné.",
"incorrect_email_password": "E-mail nebo heslo jsou nesprávné.",
"use_setting": "Použít nastavení",
"am_pm": "am/pm",
"time_options": "Nastavení času",
@@ -455,6 +505,7 @@
"additional_guests": "Přidat hosty",
"your_name": "Vaše jméno",
"your_full_name": "Vaše celé jméno",
"no_name": "Žádné jméno",
"email_address": "E-mailová adresa",
"enter_valid_email": "Zadejte platný e-mail",
"location": "Místo",
@@ -498,10 +549,13 @@
"your_team_updated_successfully": "Váš tým byl úspěšně aktualizován.",
"about": "O aplikaci",
"team_description": "Pár vět o vašem týmu. Objeví se na URL stránce vašeho týmu.",
"org_description": "Několik vět o vaší organizaci. Zobrazí se na adrese URL vaší organizace.",
"members": "Členové",
"organization_members": "Členové organizace",
"member": "Člen",
"number_member_one": "Počet členů: {{count}}",
"number_member_other": "Počet členů: {{count}}",
"number_selected": "Vybráno: {{count}}",
"owner": "Vlastník",
"admin": "Administrátor",
"administrator_user": "Uživatel administrátor",
@@ -532,6 +586,8 @@
"confirm_all": "Potvrdit vše",
"disband_team": "Rozpustit tým",
"disband_team_confirmation_message": "Opravdu chcete rozpustit tento tým? Všichni, kterým jste tento týmový odkaz poslali, ho nebudou moct dál používat pro rezervace.",
"disband_org": "Rozpustit organizaci",
"disband_org_confirmation_message": "Opravdu chcete tuto organizaci rozpustit? Všechny týmy a členové budou odstraněni.",
"remove_member_confirmation_message": "Opravdu chcete odstranit tohoto člena z týmu?",
"confirm_disband_team": "Ano, rozpustit tým",
"confirm_remove_member": "Ano, odebrat člena",
@@ -606,6 +662,7 @@
"event_type_updated_successfully": "Typ události {{eventTypeTitle}} byl úspěšně aktualizován",
"event_type_deleted_successfully": "Typ události byl úspěšně smazán",
"hours": "Hodiny",
"people": "Lidé",
"your_email": "Váš e-mail",
"change_avatar": "Změnit avatar",
"language": "Jazyk",
@@ -638,9 +695,11 @@
"create_new_team": "Vytvořit nový tým",
"open_invitations": "Otevřené pozvánky",
"new_team": "Nový tým",
"create_first_team_and_invite_others": "Vytvořte svůj první tým a pozvěte ostatní uživatele ke spolupráci.",
"create_team_to_get_started": "Začněte vytvořením týmu",
"teams": "Týmy",
"team": "Tým",
"organization": "Organizace",
"team_billing": "Fakturace týmů",
"team_billing_description": "Správa účtování pro váš tým",
"upgrade_to_flexible_pro_title": "Změnili jsme fakturaci pro týmy",
@@ -715,6 +774,7 @@
"cal_provide_huddle01_meeting_url": "{{appName}} poskytne URL Huddle01 web3 video meetingu.",
"cal_provide_teams_meeting_url": "{{appName}} poskytne URL schůzky aplikace MS Teams. POZNÁMKA: MUSÍ SE JEDNAT O PRACOVNÍ NEBO ŠKOLNÍ ÚČET",
"require_payment": "Vyžadovat platbu",
"you_need_to_add_a_name": "Musíte přidat název",
"commission_per_transaction": "provize za transakci",
"event_type_updated_successfully_description": "Typ události byl úspěšně aktualizován.",
"hide_event_type": "Skrýt typ události",
@@ -805,18 +865,25 @@
"installed_apps": "Nainstalované aplikace",
"free_to_use_apps": "Zdarma",
"no_category_apps": "Žádné aplikace v kategorii {{category}}",
"all_apps": "Všechny aplikace",
"no_category_apps_description_calendar": "Přidejte aplikaci kalendáře, ať máte přehled v zájmu prevence dvojích rezervací",
"no_category_apps_description_conferencing": "Zkuste přidat aplikaci pro videokonference s klienty.",
"no_category_apps_description_payment": "Přidejte platební aplikaci, která usnadní provádění transakcí mezi vámi a vašimi klienty",
"no_category_apps_description_analytics": "Přidejte analytickou aplikaci pro vaše rezervační stránky",
"no_category_apps_description_automation": "Přidejte aplikaci pro automatizaci",
"no_category_apps_description_other": "Přidejte jakýkoli jiný typ aplikace pro nejrůznější činnosti",
"no_category_apps_description_web3": "Přidejte aplikaci web3 pro vaše rezervační stránky",
"no_category_apps_description_messaging": "Přidejte aplikaci pro zasílání zpráv a nastavte vlastní oznámení a připomenutí",
"no_category_apps_description_crm": "Přidejte aplikaci CRM, ať jste v obraze, s kým jste se setkali",
"installed_app_calendar_description": "Nastavte si kalendáře, ať můžete kontrolovat konflikty a zabránit tak dvojím rezervacím.",
"installed_app_payment_description": "Nakonfigurujte služby zpracování plateb, které se mají používat při strhávání plateb od klientů.",
"installed_app_analytics_description": "Nakonfigurujte aplikace, které chcete použít pro své rezervační stránky",
"installed_app_other_description": "Všechny vaše nainstalované aplikace z ostatních kategorií.",
"installed_app_conferencing_description": "Nakonfigurujte konferenční aplikace, které chcete používat",
"installed_app_automation_description": "Konfigurovat aplikace pro automatizaci",
"installed_app_web3_description": "Nakonfigurujte aplikace web3, které se mají použít pro vaše rezervační stránky",
"installed_app_messaging_description": "Nakonfigurujte aplikace pro zasílání zpráv a nastavte vlastní oznámení a připomenutí",
"installed_app_crm_description": "Nakonfigurujte aplikace CRM, které se mají používat ke sledování toho, s kým jste se setkali",
"analytics": "Analytické nástroje",
"empty_installed_apps_headline": "Nenainstalovány žádné aplikace",
"empty_installed_apps_description": "Aplikace vám umožní zlepšit pracovní postupy a výrazně zkvalitnit plánování.",
@@ -842,6 +909,7 @@
"create_events_on": "Vytvořit události v:",
"enterprise_license": "Jedná se o firemní funkci",
"enterprise_license_description": "Pokud chcete povolit tuto funkci, získejte klíč pro nasazení v konzoli {{consoleUrl}} a přidejte ho do souboru .env jako CALCOM_LICENSE_KEY. Pokud váš tým již licenci má, kontaktujte prosím {{supportMail}} a požádejte o pomoc.",
"enterprise_license_development": "Tuto funkci můžete vyzkoušet v režimu vývoje. Produkční použití vyžaduje od správce zadání licenčního klíče v <2>/auth/setup</2>.",
"missing_license": "Chybějící licence",
"signup_requires": "Je vyžadována komerční licence",
"signup_requires_description": "{{companyName}} v současné době nenabízí bezplatnou open source verzi stránky registrace. Chcete-li získat plný přístup ke komponentám registrace, musíte získat komerční licenci. Pro osobní použití doporučujeme Prisma Data Platform nebo jakékoli jiné Postgres rozhraní pro vytváření účtů.",
@@ -911,6 +979,7 @@
"confirm_delete_api_key": "Odvolat tento klíč API",
"revoke_api_key": "Odvolat klíč API",
"api_key_copied": "Klíč API zkopírován!",
"api_key_expires_on": "Platnost klíče API vyprší dne",
"delete_api_key_confirm_title": "Trvale odebrat tento klíč API z vašeho účtu?",
"copy": "Kopírovat",
"expire_date": "Datum uplynutí platnosti",
@@ -933,6 +1002,9 @@
"user_impersonation_heading": "Přizpůsobení uživatele",
"user_impersonation_description": "Náš tým podpory se bude moci dočasně přihlásit místo vás, aby nám pomohl rychle vyřešit jakékoli problémy, které nám nahlásíte.",
"team_impersonation_description": "Umožňuje vašim vlastníkům/správcům týmu dočasně se přihlásit jako vy.",
"make_team_private": "Soukromý tým",
"make_team_private_description": "Po zapnutí této funkce nebudou členové vašeho týmu vidět ostatní členy týmu.",
"you_cannot_see_team_members": "V soukromém týmu nelze vidět všechny členy týmu.",
"allow_booker_to_select_duration": "Umožnit rezervující osobě vybrat dobu trvání",
"impersonate_user_tip": "Všechna použití této funkce jsou kontrolována.",
"impersonating_user_warning": "Zosobnění uživatelského jména „{{user}}“.",
@@ -1000,16 +1072,21 @@
"event_location": "Místo události",
"reschedule_optional": "Důvod pro změnu plánu (volitelné)",
"reschedule_placeholder": "Dejte ostatním vědět, proč potřebujete změnit plán",
"event_cancelled": "Tato událost je zrušena",
"emailed_information_about_cancelled_event": "Poslali jsme vám a ostatním účastníkům informační e-mail.",
"this_input_will_shown_booking_this_event": "Toto pole se zobrazí při rezervaci této události",
"meeting_url_in_conformation_email": "Adresa URL schůzky je v potvrzovacím e-mailu",
"url_start_with_https": "Adresa URL musí začínat http:// nebo https://",
"number_provided": "Bude uvedeno telefonní číslo",
"before_event_trigger": "před zahájením události",
"event_cancelled_trigger": "při zrušení události",
"new_event_trigger": "při rezervaci nové události",
"email_host_action": "odeslání e-mailu hostiteli",
"email_attendee_action": "odeslat e-mail účastníkům",
"sms_attendee_action": "Odeslat SMS účastníkovi",
"sms_number_action": "odeslání SMS na konkrétní číslo",
"whatsapp_number_action": "odeslat Whatsapp na konkrétní číslo",
"whatsapp_attendee_action": "odeslat Whatsapp účastníkovi",
"workflows": "Pracovní postupy",
"new_workflow_btn": "Nový pracovní postup",
"add_new_workflow": "Přidat nový pracovní postup",
@@ -1073,6 +1150,8 @@
"choose_template": "Vyberte si šablonu",
"custom": "Vlastní",
"reminder": "Upomínka",
"rescheduled": "Změna termínu",
"completed": "Dokončeno",
"reminder_email": "Upomínka: událost {{eventType}} s uživatelem {{name}} dne {{date}}",
"not_triggering_existing_bookings": "Nespustí se u již existujících rezervací, protože uživatel bude při rezervaci události požádán o zadání telefonního čísla.",
"minute_one": "{{count}} min",
@@ -1170,6 +1249,7 @@
"start_of_week": "Začátek týdne",
"recordings_title": "Nahrávky",
"recording": "Nahrávka",
"happy_scheduling": "Hezké plánování",
"select_calendars": "Vyberte kalendáře, u kterých chcete kontrolovat konflikty v zájmu prevence dvojích rezervací.",
"check_for_conflicts": "Zkontrolovat konflikty",
"view_recordings": "Zobrazit nahrávky",
@@ -1211,6 +1291,7 @@
"conferencing_description": "Přidejte si oblíbené videokonferenční pro vaše schůzky",
"add_conferencing_app": "Přidat videokonferenční aplikaci",
"password_description": "Správa nastavení hesel k vašemu účtu",
"set_up_two_factor_authentication": "Nastavení dvoufaktorového ověřování",
"we_just_need_basic_info": "K nastavení vašeho profilu potřebujeme jen několik základních informací.",
"skip": "Přeskočit",
"do_this_later": "Provést později",
@@ -1224,6 +1305,8 @@
"connect_analytics_apps": "Připojit analytické aplikace",
"connect_other_apps": "Propojit další aplikace",
"connect_web3_apps": "Připojení aplikací web3",
"connect_messaging_apps": "Připojení aplikací pro zasílání zpráv",
"connect_crm_apps": "Připojení aplikací CRM",
"current_step_of_total": "Krok {{currentStep}} / {{maxSteps}}",
"add_variable": "Přidat proměnnou",
"custom_phone_number": "Vlastní telefonní číslo",
@@ -1236,12 +1319,14 @@
"location_info": "Místo události",
"additional_notes_info": "Další poznámky k rezervaci",
"attendee_name_info": "Jméno osoby provádějící rezervaci",
"organizer_name_info": "Jméno organizátora",
"to": "Komu",
"workflow_turned_on_successfully": "Pracovní postup {{workflowName}} byl {{offOn}}",
"download_responses": "Stáhnout odpovědi",
"download_responses_description": "Stáhněte si všechny odpovědi do formuláře ve formátu CSV.",
"download": "Stáhnout",
"download_recording": "Stáhnout nahrávku",
"recording_from_your_recent_call": "Nahrávka z vašeho nedávného hovoru v {{appName}} je připravena ke stažení.",
"create_your_first_form": "Vytvořte svůj první formulář",
"create_your_first_form_description": "Pomocí adresných formulářů můžete klást kvalifikační otázky a adresovat je správné osobě nebo typu události.",
"create_your_first_webhook": "Vytvořte svůj první webhook",
@@ -1250,7 +1335,9 @@
"event_one": "událost",
"event_other": "událostí",
"profile_team_description": "Správa nastavení profilu vašeho týmu",
"profile_org_description": "Správa nastavení profilu organizace",
"members_team_description": "Uživatelé, kteří jsou ve skupině",
"organization_description": "Správa správců a členů vaší organizace",
"team_url": "Adresa URL týmu",
"team_members": "Členové týmu",
"more": "Více",
@@ -1291,6 +1378,7 @@
"routing_forms_send_email_owner": "Odeslat e-mail vlastníkovi",
"routing_forms_send_email_owner_description": "Po odeslání formuláře bude vlastníkovi odeslán e-mail",
"add_new_form": "Přidat nový formulář",
"add_new_team_form": "Přidání nového formuláře do vašeho týmu",
"create_your_first_route": "Vytvořte svoje první směrování",
"route_to_the_right_person": "Nasměrovat té správné osobě na základě odpovědí ve vašem formuláři",
"form_description": "Vytvořte vlastní formulář, který adresujete rezervující osobě",
@@ -1376,6 +1464,7 @@
"new_event_type_availability": "Dostupnost pro {{eventTypeTitle}}",
"error_editing_availability": "Chyba při úpravě dostupnosti",
"dont_have_permission": "Nemáte oprávnění k přístupu k tomuto dokumentu.",
"saml_config": "SAML",
"saml_configuration_placeholder": "Vložte sem SAML metadata vašeho Identity Providera",
"saml_email_required": "Zadejte prosím e-mail, abychom mohli určit vašeho SAML Identity Providera",
"saml_sp_title": "Podrobnosti poskytovatele služby",
@@ -1394,15 +1483,19 @@
"yearly": "Ročně",
"checkout": "Platba",
"your_team_disbanded_successfully": "Váš tým byl úspěšně rozpuštěn",
"your_org_disbanded_successfully": "Vaše organizace byla rozpuštěna",
"error_creating_team": "Chyba při vytváření týmu",
"you": "Vy",
"resend_email": "Znovu odeslat e-mail",
"member_already_invited": "Člen byl už pozván",
"enter_email_or_username": "Zadejte e-mail nebo uživatelské jméno",
"team_name_taken": "Toto jméno je už obsazeno",
"must_enter_team_name": "Musíte zadat název týmu",
"team_url_required": "Musíte zadat adresu URL týmu",
"url_taken": "Tato adresa URL je už obsazená",
"problem_registering_domain": "Při registraci subdomény došlo k problému, zkuste to prosím znovu nebo kontaktujte správce",
"team_publish": "Zveřejnit tým",
"number_text_notifications": "Telefonní číslo (SMS oznámení)",
"attendee_email_variable": "E-mail účastníka",
"attendee_email_info": "E-mail osoby provádějící rezervaci",
"kbar_search_placeholder": "Zadejte příkaz nebo vyhledejte...",
@@ -1425,6 +1518,8 @@
"find_the_best_person": "Najděte nejlepší dostupnou osobu a procházejte tým.",
"fixed_round_robin": "Pevný „round robin“",
"add_one_fixed_attendee": "Přidejte jednoho pevně stanoveného účastníka a „round robin“ přes daný počet účastníků.",
"calcom_is_better_with_team": "{{appName}} je lepší pro týmy",
"the_calcom_team": "Tým společnosti {{companyName}}",
"add_your_team_members": "Přidejte členy týmu k typům událostí. Použijte kolektivní plánování, abyste zahrnuli všechny, případně vyhledejte tu nejvhodnější osobu s plánováním „round robin“.",
"booking_limit_reached": "Byl dosažen limit rezervací pro tento typ události",
"duration_limit_reached": "Byl dosažen limit doby trvání pro tento typ události",
@@ -1443,6 +1538,7 @@
"navigate_installed_apps": "Přejděte na nainstalované aplikace",
"disabled_calendar": "Pokud máte nainstalovaný jiný kalendář, budou do něj přidány nové rezervace. Pokud ne, připojte nový kalendář, abyste nepřišli o žádné nové rezervace.",
"enable_apps": "Povolit aplikace",
"enable_apps_description": "Zapněte aplikace, které mohou uživatelé integrovat s aplikací {{appName}}",
"purchase_license": "Kupte si licenci",
"already_have_key": "Klíč již mám:",
"already_have_key_suggestion": "Zkopírujte sem svou stávající proměnnou prostředí CALCOM_LICENSE_KEY.",
@@ -1456,6 +1552,9 @@
"no_available_apps": "Nejsou k dispozici žádné aplikace",
"no_available_apps_description": "Zkontrolujte, zda máte ve svém nasazení v části „packages/app-store“ k dispozici aplikace",
"no_apps": "V této instanci Cal nejsou povoleny žádné aplikace",
"no_apps_configured": "Zatím nebyla nakonfigurována žádná aplikace",
"enable_in_settings": "Aplikace můžete zapnout v nastavení",
"please_contact_admin": "Kontaktujte prosím svého správce",
"apps_settings": "Nastavení aplikací",
"fill_this_field": "Vyplňte prosím toto pole",
"options": "Možnosti",
@@ -1559,7 +1658,10 @@
"delete_sso_configuration_confirmation_description": "Opravdu chcete odstranit konfiguraci {{connectionType}}? Členové vašeho týmu, kteří používají přihlášení {{connectionType}}, ztratí přístup k webu Cal.com.",
"organizer_timezone": "Časové pásmo organizátora",
"email_user_cta": "Zobrazit pozvánku",
"email_no_user_invite_heading": "Byli jste pozváni, abyste se připojili k subjektu {{{entity}} v aplikaci {{appName}}",
"email_no_user_invite_subheading": "Uživatel {{invitedBy}} vás pozval, abyste se připojili k jeho týmu v aplikaci {{appName}}. {{appName}} je plánovač událostí, který vám a vašemu týmu umožňuje plánovat schůzky bez e-mailového ping-pongu.",
"email_user_invite_subheading": "Uživatel {{invitedBy}} vás pozval, abyste se připojili k týmu {{teamName}} subjektu ({{entity}}) v aplikaci {{appName}}. {{appName}} je plánovač událostí, který vám a vašemu subjektu ({{entity}}) umožňuje plánovat schůzky bez e-mailového pingpongu.",
"email_no_user_invite_steps_intro": "Provedeme vás několika krátkými kroky a za malou chvíli si budete se svým subjektem ({{entity}}) užívat plánování bez stresu.",
"email_no_user_step_one": "Vyberte si uživatelské jméno",
"email_no_user_step_two": "Připojte svůj účet kalendáře",
"email_no_user_step_three": "Nastavte si dostupnost",
@@ -1570,6 +1672,8 @@
"scheduler": "{Scheduler}",
"no_workflows": "Žádné pracovní postupy",
"change_filter": "Změňte filtr, abyste viděli osobní i týmové pracovní postupy.",
"change_filter_common": "Změňte filtr a prohlédněte si výsledky.",
"no_results_for_filter": "Tento filtr neposkytl žádné výsledky",
"recommended_next_steps": "Doporučené další kroky",
"create_a_managed_event": "Vytvořte typ spravované události",
"meetings_are_better_with_the_right": "Schůzky jsou lepší, když jsou na nich přítomni ti správní členové týmu. Pozvěte je.",
@@ -1580,7 +1684,9 @@
"no_longer_attending": "Této události se již neúčastníte",
"attendee_no_longer_attending_subject": "Účastník se již neúčastní události {{title}} v den {{date}}",
"attendee_no_longer_attending": "Účastník se již neúčastní vaší události",
"attendee_no_longer_attending_subtitle": "Uživatel {{name}} zrušil svou účast. V tomto časovém intervalu se tedy uvolnilo místo",
"create_event_on": "Vytvořit událost v:",
"create_routing_form_on": "Vytvoření směrovacího formuláře v",
"default_app_link_title": "Nastavte výchozí odkaz na aplikaci",
"default_app_link_description": "Nastavení výchozího odkazu na aplikaci umožní, aby všechny nově vytvořené typy událostí používaly vámi nastavený odkaz na aplikaci.",
"organizer_default_conferencing_app": "Výchozí aplikace organizátora",
@@ -1590,6 +1696,7 @@
"booking_questions_title": "Otázky k rezervaci",
"booking_questions_description": "Přizpůsobte otázky položené na stránce rezervace",
"add_a_booking_question": "Přidat otázku",
"identifier": "Identifikátor",
"duplicate_email": "Duplicitní e-mail",
"booking_with_payment_cancelled": "Platba za tuto událost již není možná",
"booking_with_payment_cancelled_already_paid": "Vrácení peněz za tuto rezervační platbu je na cestě.",
@@ -1600,6 +1707,7 @@
"show_on_booking_page": "Zobrazit na stránce rezervace",
"get_started_zapier_templates": "Začněte používat šablony Zapier",
"team_is_unpublished": "Tým {{team}} není zveřejněn",
"team_is_unpublished_description": "Tento odkaz subjektu ({{entity}}) není v současné době k dispozici. Kontaktujte prosím vlastníka subjektu ({{entity}}) nebo ho požádejte o jeho zveřejnění.",
"team_member": "Člen týmu",
"a_routing_form": "Směrovací formulář",
"form_description_placeholder": "Popis formuláře",
@@ -1629,13 +1737,16 @@
"spot_popular_event_types": "Identifikujte oblíbené typy událostí",
"spot_popular_event_types_description": "Zjistěte, které typy vašich událostí získávají nejvíce kliknutí a rezervací",
"no_responses_yet": "Zatím žádné odpovědi",
"no_routes_defined": "Není definováno žádné směrování",
"this_will_be_the_placeholder": "Toto bude zástupný znak",
"error_booking_event": "Při rezervaci události došlo k chybě, obnovte prosím stránku a zkuste to znovu.",
"timeslot_missing_title": "Nebyl vybrán žádný časový slot",
"timeslot_missing_description": "Vyberte časový slot, aby mohla být událost zaregistrována.",
"timeslot_missing_cta": "Vybrat časový slot",
"switch_monthly": "Přepnout na měsíční zobrazení",
"switch_weekly": "Přepnout na týdenní zobrazení",
"switch_multiday": "Přepnout na denní zobrazení",
"switch_columnview": "Přepněte na sloupcové zobrazení",
"num_locations": "Počet míst konání: {{num}}",
"select_on_next_step": "Vyberte v dalším kroku",
"this_meeting_has_not_started_yet": "Tato schůzka ještě nezačala",
@@ -1674,6 +1785,7 @@
"managed_event_dialog_title_one": "Adresa URL /{{slug}} již existuje pro {{count}} člena. Chcete ji nahradit?",
"managed_event_dialog_title_other": "Adresa URL /{{slug}} již existuje pro ({{count}}) členy. Chcete ji nahradit?",
"managed_event_dialog_information_one": "<strong>{{names}}</strong> již používá adresu URL <strong>/{{slug}}</strong>.",
"managed_event_dialog_information_other": "<strong>{{names}}</strong> již používají adresu URL <strong>/{{slug}}</strong>.",
"managed_event_dialog_clarification": "Pokud se rozhodnete ji nahradit, pošleme jim upozornění. Pokud ji nechcete přepsat, vraťte se a odstraňte ji.",
"review_event_type": "Revidovat typ události",
"looking_for_more_analytics": "Hledáte další analytické informace?",
@@ -1689,12 +1801,14 @@
"least_booked_members": "Nejméně rezervovaných členů",
"events_created": "Události vytvořeny",
"events_completed": "Události dokončeny",
"events_cancelled": "Události zrušeny",
"events_rescheduled": "Události přesunuty",
"from_last_period": "z posledního období",
"from_to_date_period": "Od: {{startDate}} do: {{endDate}}",
"redirect_url_warning": "Přidáním přesměrování se stránka úspěchu vypne. Nezapomeňte na vlastní stránce úspěchu uvést „Rezervace potvrzena“.",
"event_trends": "Trendy událostí",
"clear_filters": "Vymazat filtry",
"clear": "Vymazat",
"hold": "Blokace",
"on_booking_option": "Vybrat platbu při rezervaci",
"hold_option": "Účtovat poplatek za nedostavení se",
@@ -1721,6 +1835,18 @@
"complete_your_booking": "Dokončete svou rezervaci",
"complete_your_booking_subject": "Dokončete svou rezervaci: {{title}} dne {{date}}",
"confirm_your_details": "Potvrďte své údaje",
"copy_invite_link": "Zkopírovat odkaz pozvánky",
"edit_invite_link": "Upravit nastavení odkazu",
"invite_link_copied": "Odkaz pozvánky zkopírován",
"invite_link_deleted": "Odkaz pozvánky odstraněn",
"invite_link_updated": "Nastavení odkazu pozvánky uloženo",
"link_expires_after": "Platnost odkazů vyprší za...",
"one_day": "1 den",
"seven_days": "7 dní",
"thirty_days": "30 dní",
"three_months": "3 měsíce",
"one_year": "1 rok",
"team_invite_received": "Byli jste pozváni do týmu {{teamName}}",
"currency_string": "{{amount, currency}}",
"charge_card_dialog_body": "Chystáte se účtovat účastníkovi {{amount, currency}}. Opravdu chcete pokračovat?",
"charge_attendee": "Naúčtovat účastníkovi {{amount, currency}}",
@@ -1729,6 +1855,7 @@
"email_invite_team_bulk": "Počet pozvaných uživatelů: {{userCount}}",
"error_collecting_card": "Chyba při výběru karty",
"image_size_limit_exceed": "Velikost nahraného obrázku by neměla překročit limit 5 MB",
"unauthorized_workflow_error_message": "{{errorCode}}: Nejste oprávněni zapnout nebo vypnout tento pracovní postup.",
"inline_embed": "Vložit na řádek",
"load_inline_content": "Načte váš typ události přímo do řádků s ostatním obsahem webu.",
"floating_pop_up_button": "Plovoucí překryvné tlačítko",
@@ -1748,6 +1875,69 @@
"connect_google_workspace": "Propojit s Google Workspace",
"google_workspace_admin_tooltip": "Používání této funkce vyžaduje, abyste byli administrátory pracovního prostoru",
"first_event_type_webhook_description": "Vytvořte svůj první webhook pro tento typ události",
"install_app_on": "Nainstalovat aplikaci v",
"create_for": "Vytvořit pro",
"insights_all_org_filter": "Všechny aplikace"
"setup_organization": "Nastavení organizace",
"organization_banner_description": "Vytvořte prostředí, ve kterém budou moct vaše týmy vytvářet sdílené aplikace, pracovní postupy a typy událostí s kolektivním plánováním nebo plánováním typu round-robin.",
"organization_banner_title": "Správa organizace s více týmy",
"set_up_your_organization": "Nastavení organizace",
"organizations_description": "Organizace jsou sdílená prostředí, ve kterých mohou týmy vytvářet sdílené typy událostí, aplikace, pracovní postupy a mnoho dalšího.",
"must_enter_organization_name": "Je nutné zadat název organizace",
"must_enter_organization_admin_email": "Je nutné zadat e-mailovou adresu organizace",
"admin_email": "E-mailová adresa vaší organizace",
"admin_username": "Uživatelské jméno správce",
"organization_name": "Název organizace",
"organization_url": "Adresa URL organizace",
"organization_verify_header": "Ověřte e-mailovou adresu organizace",
"organization_verify_email_body": "Pomocí uvedeného kódu ověřte vaši e-mailovou adresu, abyste mohli pokračovat v nastavení vaší organizace.",
"additional_url_parameters": "Další parametry adresy URL",
"about_your_organization": "Informace o vaší organizaci",
"about_your_organization_description": "Organizace jsou sdílená prostředí, ve kterých můžete vytvořit několik týmů se sdílenými členy, typy událostí, aplikacemi, pracovními postupy a mnoha dalšími věcmi.",
"create_your_teams": "Vytvoření týmů",
"create_your_teams_description": "Přidejte do své organizace členy a pusťte se do společného plánování.",
"invite_organization_admins": "Pozvěte správce své organizace",
"invite_organization_admins_description": "Tito správci budou mít přístup ke všem týmům ve vaší organizaci. Správce a členy týmů můžete přidat později.",
"set_a_password": "Nastavte heslo",
"set_a_password_description": "Tím se vytvoří nový uživatelský účet s e-mailem vaší organizace a tímto heslem.",
"organization_logo": "Logo organizace",
"organization_about_description": "Několik vět o vaší organizaci. Objeví se na veřejné stránce profilu vaší organizace.",
"ill_do_this_later": "Udělám to později",
"verify_your_email": "Ověřte svůj e-mail",
"enter_digit_code": "Zadejte šestimístný kód, který jsme vám zaslali na {{email}}",
"verify_email_organization": "Ověřte svůj e-mail a vytvořte organizaci",
"code_provided_invalid": "Zadaný kód není platný, zkuste to znovu",
"email_already_used": "E-mail se již používá",
"organization_admin_invited_heading": "Byli jste pozváni do organizace {{orgName}}",
"organization_admin_invited_body": "Připojte se k týmu organizace {{orgName}} a začněte se soustředit na samotné schůzky, ne na vytváření schůzek!",
"duplicated_slugs_warning": "Následující týmy nemohly být vytvořeny kvůli duplicitním slugům: {{slugs}}",
"team_names_empty": "Názvy týmů nemohou být prázdné",
"team_names_repeated": "Názvy týmů se nemohou opakovat",
"user_belongs_organization": "Uživatel patří do organizace",
"org_no_teams_yet": "Tato organizace zatím neobsahuje žádné týmy",
"org_no_teams_yet_description": "Pokud jste správce, nezapomeňte vytvořit týmy, které se zde budou zobrazovat.",
"set_up": "Nastavení",
"set_up_your_profile": "Nastavení profilu",
"set_up_your_profile_description": "Dejte lidem vědět, co v rámci organizace {{orgName}} děláte, pokud si otevřou váš veřejný odkaz.",
"my_profile": "Můj profil",
"my_settings": "Moje nastavení",
"crm": "CRM",
"messaging": "Zasílání zpráv",
"sender_id_info": "Jméno nebo číslo zobrazené jako odesílatel SMS (některé země nepovolují alfanumerické ID odesílatele).",
"org_admins_can_create_new_teams": "Nové týmy může vytvářet pouze správce vaší organizace",
"google_new_spam_policy": "Nové zásady společnosti Google týkající se nevyžádané pošty by mohly zabránit tomu, abyste dostávali e-mailová oznámení a oznámení kalendáře o této rezervaci.",
"resolve": "Vyřešit",
"no_organization_slug": "Při vytváření týmů pro tuto organizaci došlo k chybě. Chybějící slug adresy URL.",
"org_name": "Název organizace",
"org_url": "Adresa URL organizace",
"copy_link_org": "Zkopírovat odkaz na organizaci",
"404_the_org": "Organizace",
"404_the_team": "Tým",
"404_claim_entity_org": "Vyžádejte si subdoménu pro svou organizaci",
"404_claim_entity_team": "Vyžádejte si tento tým a začněte kolektivně spravovat rozvrhy",
"insights_all_org_filter": "Všechny aplikace",
"insights_team_filter": "Tým: {{teamName}}",
"insights_user_filter": "Uživatel: {{userName}}",
"insights_subtitle": "Zobrazte si přehled o rezervacích napříč vašimi událostmi",
"custom_plan": "Vlastní plán",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Přidejte své nové řetězce nahoru ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
+200 -2
View File
@@ -11,11 +11,24 @@
"calcom_explained_new_user": "Beenden Sie die Einrichtung Ihres {{appName}} -Kontos! Sie sind nur ein paar Schritte von der Lösung aller Probleme in der Zeitplanung entfernt.",
"have_any_questions": "Haben Sie Fragen? Wir sind hier um Ihnen zu helfen.",
"reset_password_subject": "{{appName}}: Anleitung zum Zurücksetzen des Passworts",
"verify_email_subject": "{{appName}}: Bestätigen Sie Ihr Konto",
"check_your_email": "Schauen Sie in Ihrem E-Mail-Postfach nach",
"verify_email_page_body": "Wir haben eine E-Mail an {{email}} gesendet. Es ist wichtig, Ihre E-Mail-Adresse zu bestätigen, um die beste Zustellbarkeit für E-Mails und Kalender von {{appName}} zu gewährleisten.",
"verify_email_banner_body": "Bestätigen Sie Ihre E-Mail-Adresse, um die beste Zustellbarkeit von E-Mails und Kalenderdaten zu gewährleisten",
"verify_email_email_header": "Bestätigen Sie Ihre E-Mail-Adresse",
"verify_email_email_button": "E-Mail bestätigen",
"copy_somewhere_safe": "Speichern Sie diesen API-Schlüssel an einem sicheren Ort. Sie können ihn nicht erneut ansehen.",
"verify_email_email_body": "Bitte bestätigen Sie Ihre E-Mail-Adresse, indem Sie unten auf die Schaltfläche klicken.",
"verify_email_email_link_text": "Hier ist der Link, falls Sie lieber keine Schaltflächen anklicken möchten:",
"email_sent": "E-Mail erfolgreich gesendet",
"event_declined_subject": "Abgelehnt: {{title}} am {{date}}",
"event_cancelled_subject": "Storniert: {{title}} am {{date}}",
"event_request_declined": "Ihre Event-Anfrage wurde abgelehnt",
"event_request_declined_recurring": "Ihre wiederkehrende Terminanfrage wurde abgelehnt",
"event_request_cancelled": "Ihr geplanter Termin wurde abgesagt",
"organizer": "Organisator",
"need_to_reschedule_or_cancel": "Möchten Sie einen neuen Termin finden oder absagen?",
"no_options_available": "Keine Optionen verfügbar",
"cancellation_reason": "Grund für Ihre Absage (optional)",
"cancellation_reason_placeholder": "Warum sagen Sie ab? (optional)",
"rejection_reason": "Grund für die Ablehnung",
@@ -72,10 +85,12 @@
"booking_submitted_subject": "Buchung eingereicht: {{title}} am {{date}}",
"download_recording_subject": "Aufnahme herunterladen: {{title}} am {{date}}",
"download_your_recording": "Ihre Aufnahme herunterladen",
"your_meeting_has_been_booked": "Dein Termin wurde gebucht",
"your_meeting_has_been_booked": "Ihr Termin wurde gebucht",
"event_type_has_been_rescheduled_on_time_date": "Ihr {{title}} wurde auf den {{date}} verschoben.",
"event_has_been_rescheduled": "Ihr Termin wurde verschoben.",
"request_reschedule_subtitle": "{{organizer}} hat die Buchung storniert und Sie gebeten, eine andere Zeit auszuwählen.",
"request_reschedule_title_organizer": "Sie haben {{attendee}} zur Neuplanung aufgefordert",
"request_reschedule_subtitle_organizer": "Sie haben die Buchung storniert und {{attendee}} muss eine neue Buchungszeit mit Ihnen vereinbaren.",
"rescheduled_event_type_subject": "Anfrage für Neuplanung gesendet: {{eventType}} mit {{name}} am {{date}}",
"requested_to_reschedule_subject_attendee": "Aktion erforderlich - Neuplanung: Bitte buchen Sie eine neue Zeit für „{{eventType}}“ mit {{name}}",
"hi_user_name": "Hallo, {{name}}",
@@ -104,6 +119,7 @@
"team_info": "Informationen zum Team",
"request_another_invitation_email": "Falls Sie {{toEmail}} lieber nicht als Ihre {{appName}}-E-Mail verwenden möchten oder bereits über ein {{appName}}-Konto verfügen, fordern Sie bitte eine weitere Einladung zu dieser E-Mail an.",
"you_have_been_invited": "Sie wurden eingeladen, dem Team {{teamName}} beizutreten",
"user_invited_you": "{{user}} hat Sie eingeladen, dem {{entity}} {{team}} auf {{appName}} beizutreten",
"hidden_team_member_title": "Sie sind in diesem Team ausgeblendet",
"hidden_team_member_message": "Ihre Teammitgliedschaft ist nicht bezahlt, entweder upgraden Sie Ihren Account auf Pro oder lassen den Team-Organisator wissen, dass er für Ihren Platz im Team bezahlen kann.",
"hidden_team_owner_message": "Sie benötigen einen Pro-Account um die Teamfunktionen zu verweden. Sie werden dem Team nicht angezeigt, bis der Account upgegradet wurde.",
@@ -114,6 +130,8 @@
"team_upgrade_banner_description": "Vielen Dank, dass Sie unseren neuen Teamplan getestet haben. Wir haben festgestellt, dass Ihr Team „{{teamName}}“ aktualisiert werden muss.",
"upgrade_banner_action": "Hier aufrüsten",
"team_upgraded_successfully": "Das Update für Ihr Team war erfolgreich!",
"org_upgrade_banner_description": "Vielen Dank, dass Sie unseren neuen Organisationsplan getestet haben. Wir haben festgestellt, dass Ihre Organisation „{{teamName}}“ ein Upgrade benötigt.",
"org_upgraded_successfully": "Das Update für Ihre Organisation war erfolgreich!",
"use_link_to_reset_password": "Benutzen Sie den Link, um Ihr Passwort zurückzusetzen",
"hey_there": "Hallo,",
"forgot_your_password_calcom": "Passwort vergessen? - {{appName}}",
@@ -180,6 +198,7 @@
"blog": "Blog",
"blog_description": "Lesen Sie unsere Neuigkeiten und Artikel",
"join_our_community": "Treten Sie unserer Community bei",
"join_our_discord": "Treten Sie unserem Discord-Server bei",
"404_claim_entity_user": "Benutzername registrieren und Termine vergeben",
"popular_pages": "Beliebte Seiten",
"register_now": "Jetzt registrieren",
@@ -187,6 +206,7 @@
"page_doesnt_exist": "Diese Seite existiert nicht.",
"check_spelling_mistakes_or_go_back": "Prüfen Sie auf Rechtschreibfehler oder gehen Sie zur vorherigen Seite zurück.",
"404_page_not_found": "Fehler 404: Diese Seite konnte nicht gefunden werden.",
"booker_event_not_found": "Wir konnten den Termin nicht finden, den Sie buchen möchten.",
"getting_started": "Los geht's",
"15min_meeting": "15 Minuten Termin",
"30min_meeting": "30 Minuten Termin",
@@ -222,11 +242,16 @@
"done": "Erledigt",
"all_done": "Erledigt!",
"all": "Alle Apps",
"yours": "Ihr Konto",
"available_apps": "Verfügbare Apps",
"available_apps_lower_case": "Verfügbare Apps",
"available_apps_desc": "Sie haben keine Apps installiert. Sehen Sie sich beliebte Apps unten an und entdecken Sie noch mehr in unserem <1>App Store</1>",
"check_email_reset_password": "Überprüfen Sie Ihre E-Mail. Wir haben Ihnen einen Link zum Zurücksetzen Ihres Passworts gesendet.",
"finish": "Fertig",
"organization_general_description": "Einstellungen für die Sprache und Zeitzone Ihres Teams verwalten",
"few_sentences_about_yourself": "Schreiben Sie eine kurze Beschreibung, welche auf Ihrer persönlichen URL-Seite erscheinen wird.",
"nearly_there": "Fast fertig",
"nearly_there_instructions": "Zu guter Letzt: Ein Foto und eine Kurzbeschreibung zu Ihnen helfen, öfter gebucht zu werden, da Kunden dann besser wissen, wen sie buchen.",
"set_availability_instructions": "Definieren Sie Zeiträume, wenn Sie wiederkehrend verfügbar sind. Sie können später weitere Zeiträume erstellen und verschiedenen Kalendern zuordnen.",
"set_availability": "Verfügbarkeit festlegen",
"continue_without_calendar": "Ohne Kalender fortfahren",
@@ -282,6 +307,18 @@
"success": "Das hat geklappt",
"failed": "Fehlschlagen",
"password_has_been_reset_login": "Ihr Passwort wurde zurückgesetzt. Sie können sich jetzt mit Ihrem neu erstellten Passwort anmelden.",
"layout": "Layout",
"bookerlayout_default_title": "Standardansicht",
"bookerlayout_description": "Sie können mehrere auswählen und Ihre Bucher können die Ansicht wechseln.",
"bookerlayout_user_settings_title": "Buchungslayout",
"bookerlayout_user_settings_description": "Sie können mehrere auswählen und Bucher können die Ansicht wechseln. Dies kann pro Termin überschrieben werden.",
"bookerlayout_month_view": "Monat",
"bookerlayout_week_view": "Woche",
"bookerlayout_column_view": "Spalte",
"bookerlayout_error_min_one_enabled": "Es muss mindestens ein Layout aktiviert sein.",
"bookerlayout_error_default_not_enabled": "Das Layout, das Sie als Standardansicht ausgewählt haben, ist nicht Teil der aktivierten Layouts.",
"bookerlayout_error_unknown_layout": "Das ausgewählte Layout ist kein gültiges Layout.",
"bookerlayout_override_global_settings": "Sie können dies für alle Ihre Termintypen über <2>Einstellungen / Darstellung </2> oder <6>nur für diesen Termin überschreiben</6> einstellen.",
"unexpected_error_try_again": "Ein unerwarteter Fehler ist aufgetreten. Versuchen Sie es erneut.",
"sunday_time_error": "Ungültige Zeit am Sonntag",
"monday_time_error": "Ungültige Zeit am Montag",
@@ -294,6 +331,7 @@
"error_end_time_next_day": "Die Endzeit darf nicht größer als 24 Stunden sein",
"back_to_bookings": "Zurück zu den Buchungen",
"free_to_pick_another_event_type": "Sie können jederzeit einen anderen Termin wählen.",
"cancelled": "Storniert",
"cancellation_successful": "Stornierung erfolgreich",
"really_cancel_booking": "Möchten Sie wirklich stornieren?",
"cannot_cancel_booking": "Sie können diese Buchung nicht stornieren",
@@ -302,6 +340,12 @@
"cancelling_event_recurring": "Der Termin ist eine Instanz eines wiederkehrenden Termins.",
"cancelling_all_recurring": "Dies sind alle verbleibende Instanzen im wiederkehrenden Termin.",
"error_with_status_code_occured": "Ein Fehler mit dem Statuscode {{status}} ist aufgetreten.",
"error_event_type_url_duplicate": "Ein Termintyp mit dieser URL existiert bereits.",
"error_event_type_unauthorized_create": "Sie können diesen Termin nicht erstellen",
"error_event_type_unauthorized_update": "Sie können diesen Termin nicht bearbeiten",
"error_workflow_unauthorized_create": "Sie können diesen Workflow nicht erstellen",
"error_schedule_unauthorized_create": "Sie können diesen Verfügbarkeitsplan nicht erstellen",
"booking_already_cancelled": "Diese Buchung wurde bereits storniert",
"booking_already_accepted_rejected": "Diese Buchung wurde bereits angenommen oder abgelehnt",
"go_back_home": "Zurück zum Anfang",
"or_go_back_home": "Oder navigieren Sie zurück",
@@ -311,10 +355,12 @@
"no_status_bookings_yet_description": "Sie haben keine {{status}} Buchungen. {{description}}",
"event_between_users": "{{eventName}} zwischen {{host}} und {{attendeeName}}",
"bookings": "Buchungen",
"booking_not_found": "Buchung nicht gefunden",
"bookings_description": "Sehen Sie anstehende und vergangene Veranstaltungen, die über Ihre Events gebucht wurden.",
"upcoming_bookings": "Sobald jemand eine Zeit bei Ihnen bucht können Sie das hier sehen.",
"recurring_bookings": "Sobald jemand einen wiederkehrenden Termin mit Ihnen bucht wird er hier erscheinen.",
"past_bookings": "Ihre früheren Buchungen werden hier angezeigt.",
"cancelled_bookings": "Ihre stornierten Buchungen werden hier angezeigt.",
"unconfirmed_bookings": "Ihre unbestätigten Buchungen werden hier angezeigt.",
"unconfirmed_bookings_tooltip": "Unbestätigte Buchungen",
"on": "auf",
@@ -348,17 +394,22 @@
"user_dynamic_booking_disabled": "Einige der Benutzer in der Gruppe haben derzeit dynamische Gruppenbuchungen deaktiviert",
"allow_dynamic_booking_tooltip": "Gruppenbuchungslinks, die dynamisch durch Hinzufügen mehrerer Benutzernamen mit einem '+' erstellt werden können. Beispiel: '{{appName}}/bailey+peer'",
"allow_dynamic_booking": "Ermöglichen Sie es den Teilnehmenden, Sie über dynamische Gruppenbuchungen zu buchen",
"dynamic_booking": "Dynamische Gruppenlinks",
"email": "E-Mail",
"email_placeholder": "max@example.com",
"full_name": "Vollständiger Name",
"browse_api_documentation": "Durchsuchen Sie unsere API Dokumentation",
"leverage_our_api": "Nutzen Sie unsere API für die volle Kontrolle und Anpassbarkeit.",
"create_webhook": "Webhook erstellen",
"booking_cancelled": "Buchung storniert",
"booking_rescheduled": "Termin verlegt",
"recording_ready": "Download-Link der Aufnahme ist nun verfügbar",
"booking_created": "Termin erstellt",
"booking_rejected": "Buchung abgelehnt",
"booking_requested": "Buchung angefragt",
"meeting_ended": "Meeting beendet",
"form_submitted": "Formular gesendet",
"booking_paid": "Buchung bezahlt",
"event_triggers": "Event-Auslöser",
"subscriber_url": "Subscriber-URL",
"create_new_webhook": "Einen neuen Webhook erstellen",
@@ -366,6 +417,8 @@
"team_webhooks": "Team-Webhooks",
"create_new_webhook_to_account": "Erstellen Sie einen neuen Webhook in Ihrem Account",
"new_webhook": "Neuer Webhook",
"receive_cal_meeting_data": "Erhalten Sie {{appName}} Termindaten unter einer bestimmten URL in Echtzeit, wenn ein Termin geplant oder abgesagt wird.",
"receive_cal_event_meeting_data": "Erhalten Sie {{appName}} Termindaten unter einer bestimmten URL in Echtzeit, wenn dieser Termin geplant oder abgesagt wird.",
"responsive_fullscreen_iframe": "Responsives Vollbild-iFrame",
"loading": "Wird geladen...",
"deleting": "Lösche...",
@@ -428,6 +481,7 @@
"max_limit_allowed_hint": "Muss {{limit}} oder weniger Zeichen lang sein",
"invalid_password_hint": "Das Passwort muss mindestens {{passwordLength}} Zeichen lang sein und mindestens eine Nummer beinhalten, sowie eine Mischung aus Groß- und Kleinbuchstaben sein",
"incorrect_password": "Passwort ist falsch",
"incorrect_email_password": "Die E-Mail-Adresse oder das Passwort ist falsch.",
"use_setting": "Benutze Einstellung",
"am_pm": "am/pm",
"time_options": "Zeitoptionen",
@@ -455,6 +509,7 @@
"additional_guests": "+ Weitere Gäste",
"your_name": "Ihr Name",
"your_full_name": "Ihr vollständiger Name",
"no_name": "Kein Name",
"email_address": "E-Mail Adresse",
"enter_valid_email": "Bitte geben Sie eine gültige Emaildresse ein",
"location": "Ort",
@@ -498,10 +553,13 @@
"your_team_updated_successfully": "Ihr Team wurde erfolgreich aktualisiert.",
"about": "Beschreibung",
"team_description": "Ein paar Sätze über Ihr Team auf der öffentlichen Teamseite.",
"org_description": "Ein paar Sätze zu Ihrer Organisation. Dies wird auf der URL-Seite Ihrer Organisation erscheinen.",
"members": "Mitglieder",
"organization_members": "Organisationsmitglieder",
"member": "Mitglied",
"number_member_one": "{{count}} Mitglied",
"number_member_other": "{{count}} Mitglieder",
"number_selected": "{{count}} ausgewählt",
"owner": "Inhaber",
"admin": "Administrator",
"administrator_user": "Administrator Benutzer",
@@ -532,6 +590,8 @@
"confirm_all": "Alle bestätigen",
"disband_team": "Team auflösen",
"disband_team_confirmation_message": "Bist du sicher, dass du dieses Team auflösen möchtest? Jeder der diesen Team-Link erhalten hat, kann Sie nicht mehr buchen.",
"disband_org": "Organisation auflösen",
"disband_org_confirmation_message": "Sind Sie sicher, dass Sie diese Organisation auflösen möchten? Alle Teams und Mitglieder werden gelöscht.",
"remove_member_confirmation_message": "Sind Sie sicher, dass Sie dieses Mitglied aus dem Team entfernen möchten?",
"confirm_disband_team": "Ja, Team auflösen",
"confirm_remove_member": "Ja, Mitglied entfernen",
@@ -606,6 +666,7 @@
"event_type_updated_successfully": "{{eventTypeTitle}} Ereignistyp erfolgreich aktualisiert",
"event_type_deleted_successfully": "Termintyp erfolgreich gelöscht",
"hours": "Stunden",
"people": "Personen",
"your_email": "Ihre E-Mail-Adresse",
"change_avatar": "Profilbild ändern",
"language": "Sprache",
@@ -638,9 +699,11 @@
"create_new_team": "Ein neues Team erstellen",
"open_invitations": "Offene Einladungen",
"new_team": "Neues Team",
"create_first_team_and_invite_others": "Erstellen Sie Ihr erstes Team und laden Sie andere Benutzer ein, zusammenzuarbeiten.",
"create_team_to_get_started": "Erstellen Sie ein Team um loszulegen",
"teams": "Teams",
"team": "Team",
"organization": "Organisation",
"team_billing": "Abrechnung der Teams",
"team_billing_description": "Verwalte die Abrechungen deines Teams",
"upgrade_to_flexible_pro_title": "Wir haben die Abrechnung für Teams geändert",
@@ -715,6 +778,7 @@
"cal_provide_huddle01_meeting_url": "{{appName}} wird eine Huddle01 web3 Video-Meeting URL zur Verfügung stellen.",
"cal_provide_teams_meeting_url": "{{appName}} wird eine MS Teams Meeting-URL zur Verfügung stellen. HINWEIS: SIE BRAUCHEN EIN BERUFS- ODER SCHULKONTO",
"require_payment": "Zahlung erforderlich",
"you_need_to_add_a_name": "Sie müssen einen Namen hinzufügen",
"commission_per_transaction": "Provision pro Transaktion",
"event_type_updated_successfully_description": "Ihr Termintyp wurde erfolgreich aktualisiert.",
"hide_event_type": "Termintyp ausblenden",
@@ -805,18 +869,25 @@
"installed_apps": "Installierte Apps",
"free_to_use_apps": "Kostenlos",
"no_category_apps": "Keine {{category}} Apps",
"all_apps": "Alle Apps",
"no_category_apps_description_calendar": "Fügen Sie eine Kalender-App hinzu, in der nach Konflikten gesucht werden soll, um Doppelbuchungen zu vermeiden",
"no_category_apps_description_conferencing": "Versuchen Sie, eine Konferenz-App für Videoanrufe mit Ihren Kunden hinzuzufügen",
"no_category_apps_description_payment": "Fügen Sie eine Zahlungs-App hinzu, um die Transaktion zwischen Ihnen und Ihren Kunden zu erleichtern",
"no_category_apps_description_analytics": "Fügen Sie eine Analyse-App für Ihre Buchungsseiten hinzu",
"no_category_apps_description_automation": "Fügen Sie eine Automatisierungs-App hinzu, die verwendet werden soll",
"no_category_apps_description_other": "Füge jede beliebige andere Art von App hinzu, um alle möglichen Dinge zu tun",
"no_category_apps_description_web3": "Fügen Sie eine web3-App für Ihre Buchungsseiten hinzu",
"no_category_apps_description_messaging": "Fügen Sie eine Nachrichten-App hinzu, um benutzerdefinierte Benachrichtigungen und Erinnerungen einzurichten",
"no_category_apps_description_crm": "Fügen Sie eine CRM-App hinzu, um einen Überblick über die Personen zu behalten, mit denen Sie sich getroffen haben",
"installed_app_calendar_description": "Legen Sie den/die Kalender in denen nach Konflikten gesucht werden sollen fest, um Doppelbuchungen zu vermeiden.",
"installed_app_payment_description": "Konfigurieren Sie die Zahlungsdienstleister, welcher bei der Belastung Ihrer Kunden verwendet werden sollen.",
"installed_app_analytics_description": "Konfigurieren Sie, welche Analyse-Apps für Ihre Buchungsseiten verwendet werden sollen",
"installed_app_other_description": "Alle von Ihnen installierten Apps aus anderen Kategorien.",
"installed_app_conferencing_description": "Konfigurieren Sie, welche Konferenz-Apps verwendet werden sollen",
"installed_app_automation_description": "Konfigurieren Sie, welche Automatisierungs-Apps verwendet werden sollen",
"installed_app_web3_description": "Konfigurieren Sie, welche web3-Apps für Ihre Buchungsseiten verwendet werden sollen",
"installed_app_messaging_description": "Konfigurieren Sie zur Einrichtung benutzerdefinierter Benachrichtigungen und Erinnerungen, welche Nachrichten-Apps verwendet werden sollen",
"installed_app_crm_description": "Konfigurieren Sie, welche CRM-Apps verwendet werden sollen, um einen Überblick über die Personen zu behalten, mit denen Sie sich getroffen haben",
"analytics": "Analyse",
"empty_installed_apps_headline": "Keine Apps installiert",
"empty_installed_apps_description": "Apps erlauben es Ihnen, Ihren Arbeitsfluss zu verbessern und Ihre Planung viel besser zu gestalten.",
@@ -842,6 +913,7 @@
"create_events_on": "Erstelle Termine in:",
"enterprise_license": "Das ist eine Enterprise-Funktion",
"enterprise_license_description": "Um diese Funktion zu aktivieren, holen Sie sich einen Deployment-Schlüssel von der {{consoleUrl}}-Konsole und fügen Sie ihn als CALCOM_LICENSE_KEY zu Ihrer .env hinzu. Wenn Ihr Team bereits eine Lizenz hat, wenden Sie sich bitte an {{supportMail}} für Hilfe.",
"enterprise_license_development": "Sie können diese Funktion im Entwicklungsmodus testen. Zur Nutzung im Produktionsmodus, besuchen Sie bitte <2>/auth/setup</2>, um einen Lizenzschlüssel einzugeben.",
"missing_license": "Lizenz fehlt",
"signup_requires": "Kommerzielle Lizenz erforderlich",
"signup_requires_description": "{{companyName}} bietet zur Zeit keine kostenlose Open-Source-Version der Anmeldeseite an. Um vollen Zugriff auf die Registrierungskomponenten zu erhalten, müssen Sie eine kommerzielle Lizenz erwerben. Für den persönlichen Gebrauch empfehlen wir die Prisma Data Platform oder jede andere Postgres-Schnittstelle zur Erstellung von Accounts.",
@@ -911,6 +983,7 @@
"confirm_delete_api_key": "Diesen API-Schlüssel widerrufen",
"revoke_api_key": "API-Schlüssel widerrufen",
"api_key_copied": "API-Schlüssel kopiert!",
"api_key_expires_on": "Der API-Schlüssel läuft ab am",
"delete_api_key_confirm_title": "Diesen API-Schlüssel dauerhaft von Ihrem Konto entfernen?",
"copy": "Kopieren",
"expire_date": "Ablaufdatum",
@@ -933,6 +1006,9 @@
"user_impersonation_heading": "Benutzeridentitätswechsel",
"user_impersonation_description": "Erlaubt es unserem Support-Team, sich vorübergehend mit Ihrem Konto anzumelden, um jegliche Probleme, die Sie gemeldet haben, schneller zu lösen.",
"team_impersonation_description": "Ermöglicht den Team-Administratoren, sich vorübergehend als Sie einzuloggen.",
"make_team_private": "Team privat stellen",
"make_team_private_description": "Deine Teammitglieder können keine anderen Teammitglieder sehen, wenn dies aktiviert ist.",
"you_cannot_see_team_members": "Sie können nicht alle Teammitglieder eines privaten Teams sehen.",
"allow_booker_to_select_duration": "Bucher erlauben, die Länge zu wählen",
"impersonate_user_tip": "Alle Verwendungen dieser Funktion werden geprüft.",
"impersonating_user_warning": "Imitiere den Account {{user}}.",
@@ -1000,16 +1076,21 @@
"event_location": "Ort des Ereignisses",
"reschedule_optional": "Grund für die Verschiebung (optional)",
"reschedule_placeholder": "Lassen Sie andere wissen, warum Sie den Termin verschieben müssen",
"event_cancelled": "Dieser Termin ist abgesagt",
"emailed_information_about_cancelled_event": "Wir haben Ihnen und den anderen Teilnehmern eine E-Mail gesendet, damit alle Bescheid wissen.",
"this_input_will_shown_booking_this_event": "Diese Eingabe wird bei der Buchung dieses Termins angezeigt",
"meeting_url_in_conformation_email": "Termin-URL ist in der Bestätigungsmail",
"url_start_with_https": "URL muss mit http:// oder https:// beginnen",
"number_provided": "Telefonnummer wird angegeben",
"before_event_trigger": "vor Beginn des Termins",
"event_cancelled_trigger": "wenn der Termin abgesagt wird",
"new_event_trigger": "wenn ein neer Termin gebucht wird",
"email_host_action": "E-Mail an den Veranstalter senden",
"email_attendee_action": "E-Mail an Teilnehmende senden",
"sms_attendee_action": "SMS an Teilnehmende senden",
"sms_number_action": "SMS an eine bestimmte Nummer senden",
"whatsapp_number_action": "WhatsApp-Nachricht an eine bestimmte Nummer senden",
"whatsapp_attendee_action": "WhatsApp-Nachricht an Teilnehmer senden",
"workflows": "Workflows",
"new_workflow_btn": "Neuer Workflow",
"add_new_workflow": "Einen neuen Workflow hinzufügen",
@@ -1073,6 +1154,8 @@
"choose_template": "Vorlage auswählen",
"custom": "Benutzerdefiniert",
"reminder": "Erinnerung",
"rescheduled": "Neu geplant",
"completed": "Erledigt",
"reminder_email": "Erinnerung: {{eventType}} mit {{name}} bei {{date}}",
"not_triggering_existing_bookings": "Wird nicht für bereits bestehende Buchungen ausgelöst, da der Benutzer bei der Buchung nach einer Telefonnummer gefragt wird.",
"minute_one": "{{count}} Minute",
@@ -1170,6 +1253,7 @@
"start_of_week": "Wochenstart",
"recordings_title": "Aufnahmen",
"recording": "Aufnahme",
"happy_scheduling": "Fröhliche Terminplanung",
"select_calendars": "Wählen Sie aus, in welchen Kalendern Sie nach Konflikten suchen wollen, um Doppelbuchungen zu vermeiden.",
"check_for_conflicts": "Auf Konflikte prüfen",
"view_recordings": "Aufnahmen anzeigen",
@@ -1211,6 +1295,7 @@
"conferencing_description": "Fügen Sie Ihre favorisierten Videokonferenz-Apps für Ihre Meetings hinzu",
"add_conferencing_app": "Konferenz-App hinzufügen",
"password_description": "Einstellungen für Ihre Konto-Passwörter verwalten",
"set_up_two_factor_authentication": "Zwei-Faktor-Authentifizierung einrichten",
"we_just_need_basic_info": "Wir benötigen nur ein paar grundlegende Informationen, um Ihr Profil einzurichten.",
"skip": "Überspringen",
"do_this_later": "Später machen",
@@ -1224,6 +1309,8 @@
"connect_analytics_apps": "Analyse-Apps verbinden",
"connect_other_apps": "Andere Apps verbinden",
"connect_web3_apps": "web3-Apps verbinden",
"connect_messaging_apps": "Nachrichten-Apps verbinden",
"connect_crm_apps": "CRM-Apps verbinden",
"current_step_of_total": "Schritt {{currentStep}} von {{maxSteps}}",
"add_variable": "Variable hinzufügen",
"custom_phone_number": "Benutzerdefinierte Telefonnummer",
@@ -1236,12 +1323,14 @@
"location_info": "Der Ort des Events",
"additional_notes_info": "Die zusätzlichen Anmerkungen der Buchung",
"attendee_name_info": "Name der buchenden Person",
"organizer_name_info": "Name des Organisators",
"to": "An",
"workflow_turned_on_successfully": "{{workflowName}} Workflow erfolgreich {{offOn}}geschaltet",
"download_responses": "Antworten herunterladen",
"download_responses_description": "Laden Sie alle Antworten zu Ihrem Formular im CSV-Format herunter.",
"download": "Herunterladen",
"download_recording": "Aufnahme herunterladen",
"recording_from_your_recent_call": "Eine Aufnahme von Ihrem letzten Anruf auf {{appName}} steht zum Download bereit",
"create_your_first_form": "Erstellen Sie Ihr erstes Formular",
"create_your_first_form_description": "Mithilfe von Leitungsformularen können Sie qualifizierende Fragen stellen und zur richtigen Person oder zum richtigen Veranstaltungstyp weiterleiten.",
"create_your_first_webhook": "Erstellen Sie Ihren ersten Webhook",
@@ -1250,7 +1339,9 @@
"event_one": "Ereignis",
"event_other": "Ereignisse",
"profile_team_description": "Einstellungen für Ihr Teamprofil verwalten",
"profile_org_description": "Einstellungen für Ihr Organisationsprofil verwalten",
"members_team_description": "Benutzer in der Gruppe",
"organization_description": "Administratoren und Mitglieder in Ihrer Organisation verwalten",
"team_url": "Team-URL",
"team_members": "Teammitglieder",
"more": "Mehr",
@@ -1291,6 +1382,7 @@
"routing_forms_send_email_owner": "E-Mail an Eigentümer senden",
"routing_forms_send_email_owner_description": "Sendet eine E-Mail an den Eigentümer, wenn das Formular abgeschickt wird",
"add_new_form": "Neues Formular hinzufügen",
"add_new_team_form": "Neues Formular zu Ihrem Team hinzufügen",
"create_your_first_route": "Erstellen Sie Ihre erste Weiterleitung",
"route_to_the_right_person": "Anhand der Formularantworten an die richtige Person weiterleiten",
"form_description": "Erstellen Sie Ihr Formular, um einen Bucher zu anzuleiten",
@@ -1376,6 +1468,7 @@
"new_event_type_availability": "{{eventTypeTitle}} | Verfügbarkeit",
"error_editing_availability": "Fehler beim Bearbeiten der Verfügbarkeit",
"dont_have_permission": "Ihnen fehlt die Berechtigung, auf diese Ressource zuzugreifen.",
"saml_config": "SAML",
"saml_configuration_placeholder": "Bitte fügen Sie die SAML-Metadaten von Ihrem SAML-Anbieter hier ein",
"saml_email_required": "Bitte geben Sie eine E-Mail ein, damit wir Ihren SAML Anbieter finden können",
"saml_sp_title": "Einzelheiten zum Dienstanbieter",
@@ -1394,15 +1487,19 @@
"yearly": "Jährlich",
"checkout": "Kasse",
"your_team_disbanded_successfully": "Ihr Team wurde erfolgreich aufgelöst",
"your_org_disbanded_successfully": "Ihre Organisation wurde erfolgreich aufgelöst",
"error_creating_team": "Fehler beim Erstellen des Teams",
"you": "Sie",
"resend_email": "E-Mail erneut senden",
"member_already_invited": "Mitglied wurde bereits eingeladen",
"enter_email_or_username": "E-Mail oder Benutzername eingeben",
"team_name_taken": "Dieser Name ist bereits vergeben",
"must_enter_team_name": "Team-Name muss eingegeben werden",
"team_url_required": "Team-URL muss eingegeben werden",
"url_taken": "Diese URL ist bereits vergeben",
"problem_registering_domain": "Es gab ein Problem bei der Registrierung der Subdomain, bitte versuchen Sie es erneut oder kontaktieren Sie einen Administrator",
"team_publish": "Team veröffentlichen",
"number_text_notifications": "Telefonnummer (Text-Benachrichtigungen)",
"attendee_email_variable": "Teilnehmer E-Mail",
"attendee_email_info": "Die E-Mail-Adresse der buchenden Person",
"kbar_search_placeholder": "Geben Sie einen Befehl ein oder suchen Sie ...",
@@ -1425,6 +1522,8 @@
"find_the_best_person": "Finden Sie die beste verfügbare Person und rotieren Sie durch Ihr Team.",
"fixed_round_robin": "Festgelegter Round Robin",
"add_one_fixed_attendee": "Fügen Sie einen festen Teilnehmer und einen Round Robin mit einer Reihe von Teilnehmern hinzu.",
"calcom_is_better_with_team": "{{appName}} ist mit Teams besser",
"the_calcom_team": "Das {{companyName}} Team",
"add_your_team_members": "Fügen Sie Ihre Teammitglieder zu Ihren Termintypen hinzu. Nutzen Sie kollektive Planung, um alle einzubinden oder finden Sie die geeignetste Person mit der Round Robin Planung.",
"booking_limit_reached": "Das Buchungslimit für diesen Termintyp wurde erreicht",
"duration_limit_reached": "Das Zeitlimit für diesen Termintyp wurde erreicht",
@@ -1443,6 +1542,7 @@
"navigate_installed_apps": "Zu installierten Apps wechseln",
"disabled_calendar": "Wenn Sie einen anderen Kalender installiert haben, werden neue Buchungen zu dem Kalender hinzugefügt. Verbinden Sie andernfalls einen neuen Kalender, damit Sie keine neuen Buchungen verpassen.",
"enable_apps": "Apps aktivieren",
"enable_apps_description": "Apps aktivieren, die Benutzer mit {{appName}} integrieren können",
"purchase_license": "Lizenz kaufen",
"already_have_key": "Ich habe bereits einen Schlüssel:",
"already_have_key_suggestion": "Bitte fügen Sie Ihre vorhandene CALCOM_LICENSE_KEY Umgebungsvariable hier ein.",
@@ -1456,6 +1556,9 @@
"no_available_apps": "Es gibt keine verfügbaren Apps",
"no_available_apps_description": "Bitte stellen Sie sicher, dass sich unter „packages/app-store“ Apps in Ihrem Deployment befinden",
"no_apps": "In dieser Instanz von Cal sind keine Apps aktiviert",
"no_apps_configured": "Es wurde noch keine App konfiguriert",
"enable_in_settings": "Sie können Apps in den Einstellungen aktivieren",
"please_contact_admin": "Bitte kontaktieren Sie Ihren Administrator",
"apps_settings": "Apps-Einstellungen",
"fill_this_field": "Bitte füllen Sie dieses Feld aus",
"options": "Optionen",
@@ -1559,7 +1662,10 @@
"delete_sso_configuration_confirmation_description": "Sind Sie sicher, dass Sie die {{connectionType}}-Konfiguration löschen möchten? Ihre Teammitglieder, die sich über {{connectionType}} anmelden, werden keinen Zugriff mehr auf Cal.com haben.",
"organizer_timezone": "Zeitzone des Veranstalters",
"email_user_cta": "Einladung anzeigen",
"email_no_user_invite_heading": "Sie wurden eingeladen, einem {{entity}} in {{appName}} beizutreten",
"email_no_user_invite_subheading": "{{invitedBy}} hat Sie eingeladen, dem Team in {{appName}} beizutreten. {{appName}} ist der Event-Planer, der es Ihnen und Ihrem Team ermöglicht, Meetings ohne ständiges hin und her zu planen.",
"email_user_invite_subheading": "{{invitedBy}} hat Sie eingeladen, dem {{entity}} „{{teamName}}“ in {{appName}} beizutreten. {{appName}} ist der Terminplaner, der es Ihnen und Ihrem {{entity}} ermöglicht, Meetings ohne ständiges hin und her zu planen.",
"email_no_user_invite_steps_intro": "Wir begleiten Sie durch ein paar Schritte, danach können Sie in kürzester Zeit stressfreie Planung mit Ihrem {{entity}} genießen.",
"email_no_user_step_one": "Wählen Sie Ihren Benutzernamen",
"email_no_user_step_two": "Verbinden Sie Ihr Kalenderkonto",
"email_no_user_step_three": "Legen Sie Ihre Verfügbarkeit fest",
@@ -1570,6 +1676,8 @@
"scheduler": "{Scheduler}",
"no_workflows": "Keine Workflows",
"change_filter": "Ändern Sie den Filter, um Ihre eigenen und Ihre Team-Workflows anzuzeigen.",
"change_filter_common": "Ändern Sie Ihre Filteroptionen um die Ergebnisse zu sehen.",
"no_results_for_filter": "Keine Ergebnisse für diesen Filter",
"recommended_next_steps": "Empfohlene nächste Schritte",
"create_a_managed_event": "Einen verwalteten Ereignistyp erstellen",
"meetings_are_better_with_the_right": "Meetings sind mit den richtigen Teammitgliedern besser. Laden Sie sie jetzt ein.",
@@ -1580,7 +1688,9 @@
"no_longer_attending": "Sie nehmen an diesem Termin nicht mehr teil",
"attendee_no_longer_attending_subject": "Ein Teilnehmer nimmt nicht mehr an {{title}} am {{date}} teil",
"attendee_no_longer_attending": "Ein Teilnehmer nimmt nicht mehr an Ihrem Termin teil",
"attendee_no_longer_attending_subtitle": "{{name}} hat abgesagt. Das bedeutet, dass ein Platz für dieses Zeitfenster geöffnet wurde",
"create_event_on": "Erstelle Termin am",
"create_routing_form_on": "Weiterleitungsformular erstellen am",
"default_app_link_title": "Standard-App-Link festlegen",
"default_app_link_description": "Mit dem Festlegen eines Standard-App-Links können alle neu erstellten Ereignistypen den App-Link verwenden, den Sie gesetzt haben.",
"organizer_default_conferencing_app": "Standard-App des Organisators",
@@ -1590,6 +1700,7 @@
"booking_questions_title": "Buchungsfragen",
"booking_questions_description": "Passen Sie die Fragen an, die auf der Buchungsseite gefragt werden",
"add_a_booking_question": "Frage hinzufügen",
"identifier": "Bezeichner",
"duplicate_email": "E-Mail ist doppelt vorhanden",
"booking_with_payment_cancelled": "Zahlung für dieses Ereignis ist nicht mehr möglich",
"booking_with_payment_cancelled_already_paid": "Eine Rückerstattung für diese Buchungszahlung ist auf dem Weg.",
@@ -1600,6 +1711,7 @@
"show_on_booking_page": "Auf der Buchungsseite anzeigen",
"get_started_zapier_templates": "Legen Sie mit Zapier-Vorlagen los",
"team_is_unpublished": "{{team}} ist unveröffentlicht",
"team_is_unpublished_description": "Dieser {{entity}}-Link ist derzeit nicht verfügbar. Bitte kontaktieren Sie den {{entity}}-Besitzer oder fragen Sie ihn, ob er ihn veröffentlicht.",
"team_member": "Teammitglied",
"a_routing_form": "Ein Weiterleitungsformular",
"form_description_placeholder": "Formularbeschreibung",
@@ -1629,13 +1741,16 @@
"spot_popular_event_types": "Machen Sie beliebte Ereignistypen ausfindig",
"spot_popular_event_types_description": "Sehen Sie, welche Ihrer Ereignistypen die meisten Klicks und Buchungen erhalten",
"no_responses_yet": "Noch keine Antworten",
"no_routes_defined": "Keine Routen definiert",
"this_will_be_the_placeholder": "Dies wird der Platzhalter sein",
"error_booking_event": "Bei der Buchung dieses Termins ist ein Fehler aufgetreten, bitte aktualisieren Sie die Seite und versuchen Sie es erneut",
"timeslot_missing_title": "Kein Zeitfenster ausgewählt",
"timeslot_missing_description": "Bitte wählen Sie einen Zeitraum aus, um den Termin zu buchen.",
"timeslot_missing_cta": "Zeitfenster auswählen",
"switch_monthly": "Zur monatlichen Ansicht wechseln",
"switch_weekly": "Zur Wochenansicht wechseln",
"switch_multiday": "Zur Tagesansicht wechseln",
"switch_columnview": "Zur Spaltenansicht wechseln",
"num_locations": "{{num}} Veranstaltungsort-Optionen",
"select_on_next_step": "Im nächsten Schritt auswählen",
"this_meeting_has_not_started_yet": "Dieses Meeting hat noch nicht begonnen",
@@ -1674,6 +1789,7 @@
"managed_event_dialog_title_one": "Die URL /{{slug}} wird bereits von {{count}} Mitglied genutzt. Möchten Sie sie ersetzen?",
"managed_event_dialog_title_other": "Die URL /{{slug}} wird bereits von {{count}} Mitgliedern genutzt. Möchten Sie sie ersetzen?",
"managed_event_dialog_information_one": "<strong>{{names}}</strong> verwendet bereits die URL <strong>/{{slug}}</strong>-.",
"managed_event_dialog_information_other": "<strong>{{names}}</strong> verwenden bereits die URL <strong>/{{slug}}</strong>-.",
"managed_event_dialog_clarification": "Wenn Sie die URL ersetzen, werden wir sie benachrichtigen. Gehen Sie zurück und entfernen Sie sie, wenn Sie sie nicht überschreiben möchten.",
"review_event_type": "Ereignistyp überprüfen",
"looking_for_more_analytics": "Suchen Sie nach weiteren Analysedaten?",
@@ -1689,12 +1805,14 @@
"least_booked_members": "Am wenigsten gebuchte Mitglieder",
"events_created": "Ereignisse erstellt",
"events_completed": "Ereignisse abgeschlossen",
"events_cancelled": "Termine abgesagt",
"events_rescheduled": "Ereignisse neu geplant",
"from_last_period": "seit dem letzten Zeitraum",
"from_to_date_period": "Von: {{startDate}} Bis: {{endDate}}",
"redirect_url_warning": "Das Hinzufügen einer Umleitung wird die Erfolgsseite deaktivieren. Erwähnen Sie \"Buchung bestätigt\" auf Ihrer benutzerdefinierten Erfolgsseite.",
"event_trends": "Ereignistrends",
"clear_filters": "Filter löschen",
"clear": "Löschen",
"hold": "Halten",
"on_booking_option": "Zahlung bei Buchung erhalten",
"hold_option": "Gebühr für das Nichterscheinen berechnen",
@@ -1721,6 +1839,18 @@
"complete_your_booking": "Schließen Sie Ihre Buchung ab",
"complete_your_booking_subject": "Schließen Sie Ihre Buchung ab: {{title}} am {{date}}",
"confirm_your_details": "Bestätigen Sie Ihre Daten",
"copy_invite_link": "Einladungslink kopieren",
"edit_invite_link": "Linkeinstellungen bearbeiten",
"invite_link_copied": "Einladungslink kopiert",
"invite_link_deleted": "Einladungslink gelöscht",
"invite_link_updated": "Einladungslink-Einstellungen gespeichert",
"link_expires_after": "Links verfallen nach...",
"one_day": "1 Tag",
"seven_days": "7 Tage",
"thirty_days": "30 Tage",
"three_months": "3 Monate",
"one_year": "1 Jahr",
"team_invite_received": "Sie wurden eingeladen, ein Mitglied von {{teamName}} zu werden",
"currency_string": "{{amount, currency}}",
"charge_card_dialog_body": "Sie sind im Begriff, dem Teilnehmer {{amount, currency}} in Rechnung zu stellen. Sind Sie sicher, dass Sie fortfahren möchten?",
"charge_attendee": "Teilnehmer {{amount, currency}} berechnen",
@@ -1729,6 +1859,7 @@
"email_invite_team_bulk": "{{userCount}} Benutzer wurden eingeladen",
"error_collecting_card": "Kartenfehler",
"image_size_limit_exceed": "Das hochgeladene Bild sollte die maximale Größe von 5 MB nicht überschreiten",
"unauthorized_workflow_error_message": "{{errorCode}}: Sie sind nicht berechtigt, diesen Workflow zu aktivieren oder zu deaktivieren",
"inline_embed": "Inline-Einbettung",
"load_inline_content": "Laden Sie Ihren Termintyp direkt inline mit Ihren anderen Website-Inhalten.",
"floating_pop_up_button": "Bewegliche Pop-Up-Schaltfläche",
@@ -1737,6 +1868,9 @@
"open_dialog_with_element_click": "Öffnet Ihren Cal-Dialog, wenn jemand ein Bedienelement anklickt.",
"need_help_embedding": "Brauchen Sie Hilfe? Sehen Sie sich unsere Anleitungen zum Einbetten von Cal auf Wix, Squarespace, oder WordPress an, schauen Sie sich unsere häufig gestellten Fragen an oder erkunden Sie erweiterte Einbettungsoptionen.",
"book_my_cal": "Mich per Cal buchen",
"first_name": "Vorname",
"last_name": "Nachname",
"first_last_name": "Vorname, Nachname",
"invite_as": "Einladen als",
"form_updated_successfully": "Formular erfolgreich aktualisiert.",
"disable_attendees_confirmation_emails": "Standardmäßige Bestätigungs-E-Mails für Teilnehmer deaktivieren",
@@ -1748,6 +1882,70 @@
"connect_google_workspace": "Google Workspace verbinden",
"google_workspace_admin_tooltip": "Sie müssen ein Workspace-Admin sein, um diese Funktion nutzen zu können",
"first_event_type_webhook_description": "Erstellen Sie Ihren ersten Webhook für diesen Termintypen",
"install_app_on": "App installieren auf",
"create_for": "Erstellen für",
"insights_all_org_filter": "Alle Apps"
"setup_organization": "Eine Organisation einrichten",
"organization_banner_description": "Schaffen Sie eine Umgebung, in der Teams gemeinsame Apps, Workflows und Termintypen mit Round Robin und kollektiver Terminplanung erstellen können.",
"organization_banner_title": "Verwalten Sie Organisationen mit mehreren Teams",
"set_up_your_organization": "Ihre Organisation einrichten",
"organizations_description": "Organisationen sind geteilte Umgebungen, in denen Teams gemeinsame Termintypen, Apps, Workflows und mehr erstellen können.",
"must_enter_organization_name": "Es muss ein Organisationsname eingegeben werden",
"must_enter_organization_admin_email": "Sie müssen Ihre Organisations-Mailadresse eingeben",
"admin_email": "Ihre Organisations-E-Mail-Adresse",
"admin_username": "Benutzername des Administrators",
"organization_name": "Name der Organisation",
"organization_url": "URL der Organisation",
"organization_verify_header": "Bestätigen Sie Ihre Organisations-Mailadresse",
"organization_verify_email_body": "Bitte verwenden Sie den folgenden Code, um Ihre E-Mail-Adresse zu bestätigen, um die Einrichtung Ihrer Organisation fortzusetzen.",
"additional_url_parameters": "Zusätzliche URL-Parameter",
"about_your_organization": "Über Ihre Organisation",
"about_your_organization_description": "Organisationen sind geteilte Umgebungen, in denen Sie mehrere Teams mit gemeinsamen Mitgliedern, Termintypen, Apps, Workflows und mehr erstellen können.",
"create_your_teams": "Erstellen Sie Ihre Teams",
"create_your_teams_description": "Fangen Sie an, gemeinsam zu planen, indem Sie Ihre Teammitglieder zu Ihrer Organisation hinzufügen",
"invite_organization_admins": "Laden Sie die Administratoren Ihrer Organisation ein",
"invite_organization_admins_description": "Diese Administratoren haben Zugriff auf alle Teams in Ihrer Organisation. Sie können Team-Administratoren und -mitglieder später hinzufügen.",
"set_a_password": "Legen Sie ein Passwort fest",
"set_a_password_description": "Dies wird ein neues Benutzerkonto mit Ihrer Organisations-Mailadresse und diesem Passwort erstellen.",
"organization_logo": "Logo der Organisation",
"organization_about_description": "Ein paar Sätze zu Ihrer Organisation. Dies wird auf der öffentlichen Profilseite Ihrer Organisation erscheinen.",
"ill_do_this_later": "Ich werde das später tun",
"verify_your_email": "Bestätigen Sie Ihre E-Mail",
"enter_digit_code": "Geben Sie den 6-stelligen Code ein, den wir an {{email}} gesendet haben",
"verify_email_organization": "Bestätigen Sie Ihre E-Mail, um eine Organisation zu erstellen",
"code_provided_invalid": "Der eingegebene Code ist ungültig, versuchen Sie es erneut",
"email_already_used": "Die E-Mail-Adresse wird bereits verwendet",
"organization_admin_invited_heading": "Sie wurden eingeladen, ein Mitglied von {{orgName}} zu werden",
"organization_admin_invited_body": "Schließen Sie sich Ihrem Team bei {{orgName}} an und konzentrieren Sie sich auf Ihre Meetings, nicht auf das Planen von Meetings!",
"duplicated_slugs_warning": "Die folgenden Teams konnten aufgrund von doppelten Slugs nicht erstellt werden: {{slugs}}",
"team_names_empty": "Teamnamen dürfen nicht leer sein",
"team_names_repeated": "Teamnamen dürfen nicht wiederholt vorkommen",
"user_belongs_organization": "Der Benutzer gehört einer Organisation an",
"org_no_teams_yet": "Diese Organisation hat noch keine Teams",
"org_no_teams_yet_description": "Falls Sie ein Administrator sind, sollten Sie unbedingt Teams erstellen, welche hier angezeigt werden können.",
"set_up": "Einrichten",
"set_up_your_profile": "Richten Sie Ihr Profil ein",
"set_up_your_profile_description": "Lassen Sie Leute wissen, wer Sie innerhalb von {{orgName}} sind und wann sie mit Ihrem öffentlichen Link arbeiten.",
"my_profile": "Mein Profil",
"my_settings": "Meine Einstellungen",
"crm": "CRM",
"messaging": "Nachrichten",
"sender_id_info": "Name oder Nummer, welcher bzw. welche als Absender einer SMS angezeigt wird (einige Länder erlauben keine alphanumerischen Absender-IDs)",
"org_admins_can_create_new_teams": "Nur der Administrator Ihrer Organisation kann neue Teams erstellen",
"google_new_spam_policy": "Die neuen Spam-Richtlinien von Google könnten verhindern, dass Sie E-Mail- und Kalenderbenachrichtigungen zu dieser Buchung erhalten.",
"resolve": "Beheben",
"no_organization_slug": "Beim Erstellen von Teams für diese Organisation ist ein Fehler aufgetreten. URL Slug fehlt.",
"org_name": "Name der Organisation",
"org_url": "URL der Organisation",
"copy_link_org": "Link zur Organisation kopieren",
"404_the_org": "Die Organisation",
"404_the_team": "Das Team",
"404_claim_entity_org": "Beanspruchen Sie Ihre Subdomain für Ihre Organisation",
"404_claim_entity_team": "Dieses Team beanspruchen und gemeinsam mit der Verwaltung von Verfügbarkeitsplänen beginnen",
"insights_all_org_filter": "Alle Apps",
"insights_team_filter": "Team: {{teamName}}",
"insights_user_filter": "Benutzer: {{userName}}",
"insights_subtitle": "Sehen Sie sich Buchungs-Insights über Ihre Termine an",
"custom_plan": "Benutzerdefinierter Plan",
"org_max_team_warnings": "Weitere Teams können Sie zu einem späteren Zeitpunkt hinzufügen.",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Fügen Sie Ihre neuen Zeichenketten über dieser hinzu ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -244,6 +244,8 @@
"all": "All",
"yours": "Your account",
"available_apps": "Available Apps",
"available_apps_lower_case": "Available apps",
"available_apps_desc": "You have no apps installed. View popular apps below and explore more in our <1>App Store</1>",
"check_email_reset_password": "Check your email. We sent you a link to reset your password.",
"finish": "Finish",
"organization_general_description": "Manage settings for your team language and timezone",
@@ -407,6 +409,7 @@
"booking_requested": "Booking Requested",
"meeting_ended": "Meeting Ended",
"form_submitted": "Form Submitted",
"booking_paid": "Booking Paid",
"event_triggers": "Event Triggers",
"subscriber_url": "Subscriber URL",
"create_new_webhook": "Create a new webhook",
@@ -1867,6 +1870,9 @@
"open_dialog_with_element_click": "Open your Cal dialog when someone clicks an element.",
"need_help_embedding": "Need help? See our guides for embedding Cal on Wix, Squarespace, or WordPress, check our common questions, or explore advanced embed options.",
"book_my_cal": "Book my Cal",
"first_name": "First name",
"last_name": "Last name",
"first_last_name": "First name, Last name",
"invite_as": "Invite as",
"form_updated_successfully": "Form updated successfully.",
"disable_attendees_confirmation_emails": "Disable default confirmation emails for attendees",
@@ -1941,6 +1947,14 @@
"insights_team_filter": "Team: {{teamName}}",
"insights_user_filter": "User: {{userName}}",
"insights_subtitle": "View booking insights across your events",
"location_options": "{{locationCount}} location options",
"custom_plan": "Custom Plan",
"org_team_names_example": "e.g. Marketing Team",
"org_team_names_example_1": "e.g. Marketing Team",
"org_team_names_example_2": "e.g. Sales Team",
"org_team_names_example_3": "e.g. Design Team",
"org_team_names_example_4": "e.g. Engineering Team",
"org_team_names_example_5": "e.g. Data Analytics Team",
"org_max_team_warnings": "You will be able to add more teams later on.",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
+191 -1
View File
@@ -11,11 +11,23 @@
"calcom_explained_new_user": "¡Termine de configurar su cuenta de {{appName}}! Solo le faltan unos pasos para resolver todos sus problemas de programación.",
"have_any_questions": "¿Tienes preguntas? Estamos aquí para ayudar.",
"reset_password_subject": "{{appName}}: Instrucciones para restablecer la contraseña",
"verify_email_subject": "{{appName}}: verifique su cuenta",
"check_your_email": "Revise su correo electrónico",
"verify_email_page_body": "Enviamos un correo electrónico a {{email}}. Es importante que verifique su dirección de correo electrónico para garantizar que {{appName}} le ofrezca el mejor servicio de entrega de correos y calendarios.",
"verify_email_banner_body": "Verifique su dirección de correo electrónico para garantizar la mejor entrega de correo electrónico y calendario",
"verify_email_email_header": "Verifique su dirección de correo electrónico",
"verify_email_email_button": "Verificar correo electrónico",
"verify_email_email_body": "Verifique su dirección de correo electrónico al hacer clic en el botón a continuación.",
"verify_email_email_link_text": "Este es el enlace en caso de que no le guste hacer clic en los botones:",
"email_sent": "Correo electrónico enviado correctamente",
"event_declined_subject": "Rechazado: {{title}} en {{date}}",
"event_cancelled_subject": "Cancelado: {{title}} el {{date}}",
"event_request_declined": "Su solicitud de reunión ha sido rechazada",
"event_request_declined_recurring": "Su solicitud de evento recurrente se ha rechazado",
"event_request_cancelled": "Se canceló su evento programado",
"organizer": "Organizador",
"need_to_reschedule_or_cancel": "¿Necesita reprogramar o cancelar?",
"no_options_available": "No hay opciones disponibles",
"cancellation_reason": "Motivo de la cancelación (opcional)",
"cancellation_reason_placeholder": "¿Por qué razón está cancelando?",
"rejection_reason": "Motivo del rechazo",
@@ -75,7 +87,9 @@
"your_meeting_has_been_booked": "Su reunión ha sido reservada",
"event_type_has_been_rescheduled_on_time_date": "Tu {{title}} ha sido reprogramado para el {{date}}.",
"event_has_been_rescheduled": "Tu evento ha sido reprogramado.",
"request_reschedule_subtitle": "{{organizer}} ha cancelado la reserva y le ha solicitado que elija otra hora.",
"request_reschedule_title_organizer": "Le ha solicitado a {{attendee}} que reprograme",
"request_reschedule_subtitle_organizer": "Usted ha cancelado la reserva y {{attendee}} deberá seleccionar una nueva hora de reserva con usted.",
"rescheduled_event_type_subject": "Solicitud de reprogramación enviada: {{eventType}} con {{name}} el {{date}}",
"requested_to_reschedule_subject_attendee": "Reprogramar acción requerida: reserva una nueva hora para {{eventType}} con {{name}}",
"hi_user_name": "Hola {{name}}",
@@ -104,6 +118,7 @@
"team_info": "Información del equipo",
"request_another_invitation_email": "Si prefiere no utilizar {{toEmail}} como su correo electrónico de {{appName}} o ya tiene una cuenta de {{appName}}, por favor solicite otra invitación a ese email.",
"you_have_been_invited": "Has sido invitado a unirte al equipo {{teamName}}",
"user_invited_you": "{{user}} lo invitó a unirse al equipo {{entity}} {{team}} en {{appName}}",
"hidden_team_member_title": "Estás oculto en este equipo",
"hidden_team_member_message": "No está paga tu plaza, actualiza a PRO o infórmale al propietario del equipo para que pague tu plaza.",
"hidden_team_owner_message": "Necesitas una cuenta Pro para gestionar equipos, permanecerás oculto hasta que se realice la mejora.",
@@ -114,6 +129,8 @@
"team_upgrade_banner_description": "Gracias por probar nuestro nuevo plan de equipo. Notamos que su equipo \"{{teamName}}\" necesita actualizarse.",
"upgrade_banner_action": "Actualizar aquí",
"team_upgraded_successfully": "¡Tu equipo se actualizó con éxito!",
"org_upgrade_banner_description": "Gracias por probar nuestro nuevo plan de equipo. Notamos que su equipo \"{{teamName}}\" necesita actualizarse.",
"org_upgraded_successfully": "Su organización se actualizó con éxito.",
"use_link_to_reset_password": "Utilice el enlace de abajo para restablecer su contraseña",
"hey_there": "Hola,",
"forgot_your_password_calcom": "¿Olvidaste tu contraseña? - {{appName}}",
@@ -180,6 +197,7 @@
"blog": "Blog",
"blog_description": "Lee nuestras últimas noticias y artículos",
"join_our_community": "Únete a nuestra comunidad",
"join_our_discord": "Únase a nuestro Discord",
"404_claim_entity_user": "Reclama tu nombre de usuario y programa eventos",
"popular_pages": "Páginas Populares",
"register_now": "Regístrate Ahora",
@@ -187,6 +205,7 @@
"page_doesnt_exist": "Esta página no existe.",
"check_spelling_mistakes_or_go_back": "Comprueba errores ortográficos o vuelve a la página anterior.",
"404_page_not_found": "404: Esta página no se ha encontrado.",
"booker_event_not_found": "No pudimos encontrar el evento que está intentando reservar.",
"getting_started": "Empezar",
"15min_meeting": "Reunión de 15 min",
"30min_meeting": "Reunión de 30 min",
@@ -222,11 +241,14 @@
"done": "Hecho",
"all_done": "¡Todo listo!",
"all": "Todas las aplicaciones",
"yours": "Su cuenta",
"available_apps": "Aplicaciones disponibles",
"check_email_reset_password": "Revisa tu email. Te hemos enviado un enlace para restablecer tu contraseña.",
"finish": "Terminar",
"organization_general_description": "Administre los ajustes para el idioma y la zona horaria de su equipo",
"few_sentences_about_yourself": "Unas pocas frases sobre ti mismo. Esto aparecerá en tu página de url personal.",
"nearly_there": "¡Ya casi está!",
"nearly_there_instructions": "Lo último, una breve descripción sobre usted y una foto realmente lo ayudan a obtener reservas y a que las personas sepan con quién están reservando.",
"set_availability_instructions": "Defina los intervalos de tiempo cuando esté disponible de forma recurrente. Puede crear más tarde y asignarlos a diferentes calendarios.",
"set_availability": "Establecer Disponibilidad",
"continue_without_calendar": "Continuar sin calendario",
@@ -282,6 +304,18 @@
"success": "Éxito",
"failed": "Falló",
"password_has_been_reset_login": "Su contraseña ha sido restablecida. Ahora puede iniciar sesión con su nueva contraseña.",
"layout": "Diseño",
"bookerlayout_default_title": "Vista predeterminada",
"bookerlayout_description": "Puede seleccionar varios y sus reservadores pueden cambiar de vista.",
"bookerlayout_user_settings_title": "Diseño de reserva",
"bookerlayout_user_settings_description": "Puede seleccionar varios y los reservadores pueden cambiar de vista. Esto se puede anular por evento.",
"bookerlayout_month_view": "Mes",
"bookerlayout_week_view": "Semanal",
"bookerlayout_column_view": "Columna",
"bookerlayout_error_min_one_enabled": "Al menos un diseño tiene que estar habilitado.",
"bookerlayout_error_default_not_enabled": "El diseño que seleccionó como vista predeterminada no es parte de los diseños habilitados.",
"bookerlayout_error_unknown_layout": "El diseño seleccionado no es un diseño válido.",
"bookerlayout_override_global_settings": "Puede gestionar esto para todos sus tipos de eventos en <2>configuración / apariencia</2> o <6>sobrescribir solo para este evento</6>.",
"unexpected_error_try_again": "Ocurrió un error inesperado. Inténtelo de nuevo.",
"sunday_time_error": "Hora inválida del domingo",
"monday_time_error": "Hora inválida del lunes",
@@ -294,6 +328,7 @@
"error_end_time_next_day": "La hora final no puede ser mayor de 24 horas",
"back_to_bookings": "Volver a Reservas",
"free_to_pick_another_event_type": "No dude en elegir otro evento en cualquier momento.",
"cancelled": "Cancelado",
"cancellation_successful": "Cancelación Realizada",
"really_cancel_booking": "¿Realmente deseas cancelar tu reserva?",
"cannot_cancel_booking": "No puedes cancelar esta reserva",
@@ -302,6 +337,12 @@
"cancelling_event_recurring": "El evento es un caso de un evento recurrente.",
"cancelling_all_recurring": "Todas estas son instancias restantes en el evento recurrente.",
"error_with_status_code_occured": "Se produjo un error con el código de estado {{status}}.",
"error_event_type_url_duplicate": "Ya existe un tipo de evento con esta URL.",
"error_event_type_unauthorized_create": "No puede crear este evento",
"error_event_type_unauthorized_update": "No puede editar este evento",
"error_workflow_unauthorized_create": "No puede crear este flujo de trabajo",
"error_schedule_unauthorized_create": "No puede crear este programa",
"booking_already_cancelled": "Esta reserva ya se canceló",
"booking_already_accepted_rejected": "Esta reserva ya se aceptó o rechazó",
"go_back_home": "Volver a Inicio",
"or_go_back_home": "O Volver al Inicio",
@@ -311,10 +352,12 @@
"no_status_bookings_yet_description": "No tienes {{status}} reservas. {{description}}",
"event_between_users": "{{eventName}} entre {{host}} y {{attendeeName}}",
"bookings": "Reservas",
"booking_not_found": "Reserva no encontrada",
"bookings_description": "Vea eventos futuros y pasados reservados a través de sus enlaces de tipo de eventos.",
"upcoming_bookings": "Tan pronto como alguien reserve una hora contigo, aparecerá aquí.",
"recurring_bookings": "Tan pronto como alguien reserve una reunión recurrente con usted, aparecerá aquí.",
"past_bookings": "Sus reservas pasadas aparecerán aquí.",
"cancelled_bookings": "Las reservas canceladas aparecerán aquí.",
"unconfirmed_bookings": "Las reservas sin confirmar aparecerán aquí.",
"unconfirmed_bookings_tooltip": "Reservas sin confirmar",
"on": "en",
@@ -348,15 +391,19 @@
"user_dynamic_booking_disabled": "Actualmente, algunos de los usuarios del grupo tienen desactivadas las reservas dinámicas grupales",
"allow_dynamic_booking_tooltip": "Los enlaces de reservas grupales se pueden crear dinámicamente añadiendo varios nombres de usuario con un '+'. Ejemplo: '{{appName}}/bailey+peer'",
"allow_dynamic_booking": "Permitir que los asistentes lo reserven a través de reservas dinámicas de grupo",
"dynamic_booking": "Enlaces dinámicos de grupo",
"email": "Correo electrónico",
"email_placeholder": "nombre@ejemplo.com",
"full_name": "Nombre Completo",
"browse_api_documentation": "Consulte la documentación de nuestra API",
"leverage_our_api": "Aproveche nuestra API para un control total y personalización.",
"create_webhook": "Crear Webhook",
"booking_cancelled": "Reserva cancelada",
"booking_rescheduled": "Reserva habilitada",
"recording_ready": "Enlace de descarga de grabación listo",
"booking_created": "Reserva Creada",
"booking_rejected": "Reserva rechazada",
"booking_requested": "Reserva solicitada",
"meeting_ended": "Reunión finalizada",
"form_submitted": "Formulario enviado",
"event_triggers": "Activadores de Eventos",
@@ -366,6 +413,8 @@
"team_webhooks": "Webhooks del equipo",
"create_new_webhook_to_account": "Crear un nuevo webhook en tu cuenta",
"new_webhook": "Nuevo Webhook",
"receive_cal_meeting_data": "Reciba datos de reuniones de {{appName}} en una URL específica, en tiempo real, cuando se programe o cancele un evento.",
"receive_cal_event_meeting_data": "Reciba datos de reuniones de {{appName}} en una URL específica, en tiempo real, cuando se programe o cancele un evento.",
"responsive_fullscreen_iframe": "Iframe receptivo a pantalla completa",
"loading": "Cargando...",
"deleting": "Eliminando...",
@@ -428,6 +477,7 @@
"max_limit_allowed_hint": "Debe tener {{limit}} o menos caracteres",
"invalid_password_hint": "La contraseña debe tener un mínimo de {{passwordLength}} caracteres que contengan al menos un número y una mezcla de letras mayúsculas y minúsculas",
"incorrect_password": "La Contraseña es Incorrecta.",
"incorrect_email_password": "El correo electrónico o la contraseña son incorrectos.",
"use_setting": "Usar Ajuste",
"am_pm": "am/pm",
"time_options": "Opciones Horas",
@@ -455,6 +505,7 @@
"additional_guests": "Añadir invitados",
"your_name": "Tu Nombre",
"your_full_name": "Su nombre completo",
"no_name": "Sin nombre",
"email_address": "Email",
"enter_valid_email": "Ingresa un correo electrónico válido",
"location": "Ubicación",
@@ -498,10 +549,13 @@
"your_team_updated_successfully": "Tu equipo ha sido actualizado con éxito.",
"about": "Acerca de",
"team_description": "Comentarios sobre tu equipo. Esta información aparecerá en la página de la URL de tu equipo.",
"org_description": "Algunas frases sobre su organización. Esto aparecerá en la página de la URL de su organización.",
"members": "Miembros",
"organization_members": "Miembros de la organización",
"member": "Miembro",
"number_member_one": "{{count}} miembro",
"number_member_other": "{{count}} miembros",
"number_selected": "{{count}} seleccionados",
"owner": "Propietario",
"admin": "Administrador",
"administrator_user": "Usuario administrador",
@@ -532,6 +586,8 @@
"confirm_all": "Confirmar todo",
"disband_team": "Disolver Equipo",
"disband_team_confirmation_message": "¿Estás seguro de que quieres disolver este equipo? Cualquiera con quien has compartido este enlace de equipo ya no podrá reservar usando el mismo.",
"disband_org": "Disolver la organización",
"disband_org_confirmation_message": "¿Está seguro de que desea disolver esta organización? Todos los equipos y miembros se eliminarán.",
"remove_member_confirmation_message": "¿Estás seguro de que quieres eliminar este miembro del equipo?",
"confirm_disband_team": "Sí, Disolver Equipo",
"confirm_remove_member": "Sí, Eliminar Miembro",
@@ -606,6 +662,7 @@
"event_type_updated_successfully": "{{eventTypeTitle}} tipo de evento actualizado con éxito",
"event_type_deleted_successfully": "Tipo de evento eliminado con éxito",
"hours": "Horas",
"people": "Personas",
"your_email": "Tu Email",
"change_avatar": "Cambiar Avatar",
"language": "Lenguaje",
@@ -638,9 +695,11 @@
"create_new_team": "Crear Nuevo Equipo",
"open_invitations": "Invitaciones Abiertas",
"new_team": "Nuevo Equipo",
"create_first_team_and_invite_others": "Cree su primer equipo e invite a otros usuarios a trabajar juntos.",
"create_team_to_get_started": "Crea un equipo para empezar",
"teams": "Equipos",
"team": "Equipo",
"organization": "Organización",
"team_billing": "Facturación del equipo",
"team_billing_description": "Gestione la facturación para su equipo",
"upgrade_to_flexible_pro_title": "Hemos cambiado la facturación de los equipos",
@@ -715,6 +774,7 @@
"cal_provide_huddle01_meeting_url": "{{appName}} proporcionará una URL de la videollamada de Huddle01 Web3.",
"cal_provide_teams_meeting_url": "{{appName}} proporcionará una URL de reunión de MS Teams. NOTA: DEBE TENER UNA CUENTA DE TRABAJO O INSTITUCIÓN",
"require_payment": "Requiere Pago",
"you_need_to_add_a_name": "Necesita agregar un nombre",
"commission_per_transaction": "Comisión por Transacción",
"event_type_updated_successfully_description": "Tu Evento fue Actualizado con Éxito.",
"hide_event_type": "Ocultar Tipo de Evento",
@@ -805,18 +865,25 @@
"installed_apps": "Aplicaciones instaladas",
"free_to_use_apps": "Gratis",
"no_category_apps": "No hay aplicaciones de {{category}}",
"all_apps": "Todas las aplicaciones",
"no_category_apps_description_calendar": "Añade una aplicación de calendario para comprobar si hay conflictos y evitar reservas duplicadas",
"no_category_apps_description_conferencing": "Intente agregar una aplicación de conferencia para videollamadas con sus clientes",
"no_category_apps_description_payment": "Añade una aplicación de pagos para facilitar las transacciones con tus clientes",
"no_category_apps_description_analytics": "Añada una aplicación de análisis para sus páginas de reserva",
"no_category_apps_description_automation": "Añada una aplicación de automatización para utilizar",
"no_category_apps_description_other": "Añade cualquier otro tipo de aplicación para hacer todo tipo de tareas",
"no_category_apps_description_web3": "Agregue una aplicación web3 para sus páginas de reserva",
"no_category_apps_description_messaging": "Agregue una aplicación de mensajería para configurar notificaciones y recordatorios personalizados",
"no_category_apps_description_crm": "Agregue una aplicación CRM para realizar un seguimiento de con quiénes se ha reunido",
"installed_app_calendar_description": "Configure el(los) calendario(s) para comprobar conflictos y evitar reservas duplicadas.",
"installed_app_payment_description": "Configura los servicios de procesamiento de pagos que vas a utilizar para cobrar a tus clientes.",
"installed_app_analytics_description": "Configure qué aplicaciones de análisis va a utilizar para sus páginas de reserva",
"installed_app_other_description": "Todas tus aplicaciones instaladas de otras categorías.",
"installed_app_conferencing_description": "Configure qué aplicaciones de conferencia usará",
"installed_app_automation_description": "Configure qué aplicaciones de automatización va a utilizar",
"installed_app_web3_description": "Configure qué aplicaciones web3 usar para sus páginas de reserva",
"installed_app_messaging_description": "Configure qué aplicaciones de mensajería usar para configurar notificaciones y recordatorios personalizados",
"installed_app_crm_description": "Configure qué aplicaciones de CRM usar para realizar un seguimiento de las personas con las que se ha reunido",
"analytics": "Análisis",
"empty_installed_apps_headline": "No hay aplicaciones instaladas",
"empty_installed_apps_description": "Las aplicaciones te permiten mejorar significativamente tu flujo de trabajo y mejorar tu agendamiento.",
@@ -842,6 +909,7 @@
"create_events_on": "Crear eventos en",
"enterprise_license": "Esta es una función empresarial",
"enterprise_license_description": "Para habilitar esta función, obtenga una clave de despliegue en la consola {{consoleUrl}} y añádala a su .env como CALCOM_LICENSE_KEY. Si su equipo ya tiene una licencia, póngase en contacto con {{supportMail}} para obtener ayuda.",
"enterprise_license_development": "Puede probar esta función en el modo de desarrollo. Para el uso de producción, haga que un administrador vaya a <2>/auth/setup</2> para ingresar una clave de licencia.",
"missing_license": "Falta la licencia",
"signup_requires": "Licencia comercial requerida",
"signup_requires_description": "Actualmente, {{companyName}} no ofrece una versión gratuita de código abierto de la página de registro. Para recibir acceso completo a los componentes de registro es necesario adquirir una licencia comercial. Para uso personal, recomendamos la Plataforma de Datos Prisma o cualquier otra interfaz Postgres para crear cuentas.",
@@ -911,6 +979,7 @@
"confirm_delete_api_key": "Revocar esta clave API",
"revoke_api_key": "Revocar clave API",
"api_key_copied": "¡Clave API copiada!",
"api_key_expires_on": "La clave API caducará el",
"delete_api_key_confirm_title": "¿Eliminar permanentemente esta clave de API de tu cuenta?",
"copy": "Copiar",
"expire_date": "Fecha de caducidad",
@@ -933,6 +1002,9 @@
"user_impersonation_heading": "Suplantación de usuario",
"user_impersonation_description": "Permite a nuestro equipo de soporte iniciar sesión temporalmente para ayudar a resolver rápidamente cualquier problema reportado.",
"team_impersonation_description": "Permita a los administradores de su equipo iniciar sesión temporalmente como usted.",
"make_team_private": "Hacer que el equipo sea privado",
"make_team_private_description": "Los miembros de su equipo no podrán ver a otros miembros del equipo cuando esto esté activado.",
"you_cannot_see_team_members": "No puede ver a todos los miembros de un equipo privado.",
"allow_booker_to_select_duration": "Permitir que el encargado de las reservas seleccione la duración",
"impersonate_user_tip": "Todos los usos de esta función son revisados.",
"impersonating_user_warning": "Suplantando nombre de usuario \"{{user}}\".",
@@ -1000,16 +1072,21 @@
"event_location": "Ubicación del evento",
"reschedule_optional": "Razón para reagendar (opcional)",
"reschedule_placeholder": "Informa a los demás la razón por la que necesitas reagendar",
"event_cancelled": "Este evento se canceló",
"emailed_information_about_cancelled_event": "Le enviamos un correo electrónico a usted y a los demás asistentes para informarles.",
"this_input_will_shown_booking_this_event": "Esta entrada se mostrará al reservar este evento.",
"meeting_url_in_conformation_email": "La URL de la reunión está en el correo de confirmación",
"url_start_with_https": "La URL debe empezar por http:// o https://",
"number_provided": "Se proporcionará el número de teléfono",
"before_event_trigger": "antes del inicio del evento",
"event_cancelled_trigger": "cuando se cancela el evento",
"new_event_trigger": "cuando se reserva un nuevo evento",
"email_host_action": "enviar correo electrónico al anfitrión",
"email_attendee_action": "enviar correo electrónico a los asistentes",
"sms_attendee_action": "Enviar un SMS al asistente",
"sms_number_action": "enviar SMS a un número específico",
"whatsapp_number_action": "enviar un mensaje de Whatsapp a un número específico",
"whatsapp_attendee_action": "enviar un mensae de Whatsapp al asistente",
"workflows": "Flujos de trabajo",
"new_workflow_btn": "Flujo de trabajo nuevo",
"add_new_workflow": "Agregar un flujo de trabajo nuevo",
@@ -1073,6 +1150,8 @@
"choose_template": "Elija una plantilla",
"custom": "Personalizado",
"reminder": "Recordatorio",
"rescheduled": "Reprogramado",
"completed": "Completado",
"reminder_email": "Recordatorio: {{eventType}} con {{name}} el {{date}}",
"not_triggering_existing_bookings": "No se activará para las reservas ya existentes, ya que se le pedirá al usuario un número de teléfono al reservar el evento.",
"minute_one": "{{count}} minuto",
@@ -1170,6 +1249,7 @@
"start_of_week": "Inicio de la semana",
"recordings_title": "Grabaciones",
"recording": "Grabación",
"happy_scheduling": "Feliz programación",
"select_calendars": "Seleccione los calendarios en los que desee comprobar conflictos para evitar reservas dobles.",
"check_for_conflicts": "Comprobar conflictos",
"view_recordings": "Ver grabaciones",
@@ -1211,6 +1291,7 @@
"conferencing_description": "Añada sus aplicaciones de videoconferencia favoritas para sus reuniones",
"add_conferencing_app": "Añadir aplicación de conferencia",
"password_description": "Administra los ajustes para las contraseñas de tu cuenta",
"set_up_two_factor_authentication": "Configure su autenticación de doble factor",
"we_just_need_basic_info": "Solo necesitamos información básica para configurar tu perfil.",
"skip": "Omitir",
"do_this_later": "Hacerlo más tarde",
@@ -1224,6 +1305,8 @@
"connect_analytics_apps": "Conecte aplicaciones de análisis",
"connect_other_apps": "Conectar otras aplicaciones",
"connect_web3_apps": "Conectar aplicaciones web3",
"connect_messaging_apps": "Conectar aplicaciones de mensajería",
"connect_crm_apps": "Conectar aplicaciones CRM",
"current_step_of_total": "Paso {{currentStep}} de {{maxSteps}}",
"add_variable": "Añadir variable",
"custom_phone_number": "Número de teléfono personalizado",
@@ -1236,12 +1319,14 @@
"location_info": "Ubicación del evento",
"additional_notes_info": "Notas adicionales de la reserva",
"attendee_name_info": "Nombre de la persona que reserva",
"organizer_name_info": "Nombre del organizador",
"to": "Para",
"workflow_turned_on_successfully": "El flujo de trabajo {{workflowName}} se ha activado {{offOn}} con éxito",
"download_responses": "Descargar respuestas",
"download_responses_description": "Descargue todas las respuestas de su formulario en formato CSV.",
"download": "Descargar",
"download_recording": "Descargar grabación",
"recording_from_your_recent_call": "Una grabación de su llamada reciente en {{appName}} está lista para descargarla",
"create_your_first_form": "Crea tu primer formulario",
"create_your_first_form_description": "Con los formularios de orientación puedes hacer preguntas calificadoras y encaminarte hacia la persona o tipo de evento correctos.",
"create_your_first_webhook": "Crea tu primer Webhook",
@@ -1250,7 +1335,9 @@
"event_one": "evento",
"event_other": "eventos",
"profile_team_description": "Administra los ajustes para el perfil de tu equipo",
"profile_org_description": "Administre la configuración para el perfil de su organización",
"members_team_description": "Usuarios que están en el grupo",
"organization_description": "Gestione los administradores y miembros de su organización",
"team_url": "URL del equipo",
"team_members": "Miembros del equipo",
"more": "Más",
@@ -1291,6 +1378,7 @@
"routing_forms_send_email_owner": "Enviar correo electrónico al propietario",
"routing_forms_send_email_owner_description": "Mande un correo electrónico al propietario cuando se envía el formulario",
"add_new_form": "Añadir formulario nuevo",
"add_new_team_form": "Añada un nuevo formulario a su equipo",
"create_your_first_route": "Cree su primera ruta",
"route_to_the_right_person": "Ruta a la persona adecuada en función de las respuestas a su formulario",
"form_description": "Crea tu formulario para dirigirlo a un agente de reservas",
@@ -1376,6 +1464,7 @@
"new_event_type_availability": "Disponibilidad para {{eventTypeTitle}}",
"error_editing_availability": "Error al editar la disponibilidad",
"dont_have_permission": "No tiene permiso para acceder a este recurso.",
"saml_config": "SAML",
"saml_configuration_placeholder": "Pega los metadatos SAML de tu Proveedor de Identidad aquí",
"saml_email_required": "Por favor, introduce un correo electrónico para que podamos encontrar tu Proveedor de Identidad SAML",
"saml_sp_title": "Detalles del proveedor de servicios",
@@ -1394,15 +1483,19 @@
"yearly": "Anual",
"checkout": "Proceder al pago",
"your_team_disbanded_successfully": "Su equipo se ha disuelto con éxito",
"your_org_disbanded_successfully": "Su organización se ha disuelto con éxito",
"error_creating_team": "Error al crear el equipo",
"you": "Usted",
"resend_email": "Reenviar correo electrónico",
"member_already_invited": "El miembro ya se ha invitado",
"enter_email_or_username": "Introduzca un correo electrónico o nombre de usuario",
"team_name_taken": "Este nombre ya está en uso",
"must_enter_team_name": "Debe introducir un nombre de equipo",
"team_url_required": "Debe introducir una URL del equipo",
"url_taken": "Esta URL ya está en uso",
"problem_registering_domain": "Hubo un problema con el registro del subdominio, intente nuevamente o comuníquese con un administrador",
"team_publish": "Publicar equipo",
"number_text_notifications": "Número de teléfono (Notificaciones de texto)",
"attendee_email_variable": "Correo electrónico del asistente",
"attendee_email_info": "El correo electrónico de la persona que reserva",
"kbar_search_placeholder": "Escriba un comando o búsqueda...",
@@ -1425,6 +1518,8 @@
"find_the_best_person": "Encuentre a la mejor persona disponible y haga una rotación en su equipo.",
"fixed_round_robin": "Rotación fija por turnos",
"add_one_fixed_attendee": "Agregue un asistente fijo y realice rotación por turnos a través de un número de asistentes.",
"calcom_is_better_with_team": "{{appName}} funciona mejor con equipos",
"the_calcom_team": "El equipo de {{companyName}}",
"add_your_team_members": "Añada los miembros de su equipo a sus tipos de eventos. Utilice la programación colectiva para incluir a todos o encuentre a la persona más adecuada con programación de rotación por turnos.",
"booking_limit_reached": "Se ha alcanzado el límite de reserva para este tipo de evento",
"duration_limit_reached": "Se ha alcanzado el límite de duración para este tipo de evento",
@@ -1443,6 +1538,7 @@
"navigate_installed_apps": "Ir a las aplicaciones instaladas",
"disabled_calendar": "Si tiene otro calendario instalado, las nuevas reservas se añadirán a él. De lo contrario, conecte un nuevo calendario para que no se pierda ninguna reserva nueva.",
"enable_apps": "Activar aplicaciones",
"enable_apps_description": "Habilite las aplicaciones que los usuarios pueden integrar con {{appName}}",
"purchase_license": "Compre una licencia",
"already_have_key": "Ya tengo una clave:",
"already_have_key_suggestion": "Copie aquí su variable de entorno CALCOM_LICENSE_KEY existente.",
@@ -1456,6 +1552,9 @@
"no_available_apps": "No hay aplicaciones disponibles",
"no_available_apps_description": "Verifique que haya aplicaciones en su implementación en 'packages/app-store'",
"no_apps": "No hay aplicaciones activadas en esta instancia de Cal",
"no_apps_configured": "Aún no se ha configurado ninguna aplicación",
"enable_in_settings": "Puede activar aplicaciones en la configuración",
"please_contact_admin": "Póngase en contacto con su administrador",
"apps_settings": "Configuración de aplicaciones",
"fill_this_field": "Complete este campo",
"options": "Opciones",
@@ -1559,7 +1658,10 @@
"delete_sso_configuration_confirmation_description": "¿Está seguro de que desea eliminar la configuración de {{connectionType}}? Los miembros de su equipo que utilicen el inicio de sesión {{connectionType}} ya no podrán acceder a Cal.com.",
"organizer_timezone": "Zona horaria del organizador",
"email_user_cta": "Ver la invitación",
"email_no_user_invite_heading": "Lo invitaron a unirse a {{appName}} {{entity}}",
"email_no_user_invite_subheading": "{{invitedBy}} lo invitó a unirse a su equipo en {{appName}}. {{appName}} es el programador de eventos que les permite a usted y a su equipo programar reuniones sin necesidad de enviar correos electrónicos.",
"email_user_invite_subheading": "{{invitedBy}} lo ha invitado a unirse a su {{entity}} \"{{teamName}}\" en {{appName}}. {{appName}} es el planificador de eventos que le permite a usted y a su {{entity}} programar reuniones sin correos electrónicos de ida y vuelta.",
"email_no_user_invite_steps_intro": "Lo guiaremos a través de unos pocos pasos y disfrutará de una programación sin estrés con su {{entity}} en muy poco tiempo.",
"email_no_user_step_one": "Elija su nombre de usuario",
"email_no_user_step_two": "Conecte su cuenta de calendario",
"email_no_user_step_three": "Establezca su disponibilidad",
@@ -1570,6 +1672,8 @@
"scheduler": "{Scheduler}",
"no_workflows": "No hay flujos de trabajo",
"change_filter": "Cambie el filtro para ver sus flujos de trabajo personales y de equipo.",
"change_filter_common": "Cambie el filtro para ver los resultados.",
"no_results_for_filter": "No hay resultados para el filtro",
"recommended_next_steps": "Siguientes pasos recomendados",
"create_a_managed_event": "Crear un tipo de evento administrado",
"meetings_are_better_with_the_right": "Las reuniones son mejores si están los miembros adecuados del equipo. Invítelos ahora.",
@@ -1580,7 +1684,9 @@
"no_longer_attending": "Ya no asistirá a este evento",
"attendee_no_longer_attending_subject": "Un asistente ya no asistirá a {{title}} a las {{date}}",
"attendee_no_longer_attending": "Un asistente ya no asistirá a su evento",
"attendee_no_longer_attending_subtitle": "{{name}} ha cancelado. Esto significa que está disponible una plaza para esta franja horaria",
"create_event_on": "Crear evento en",
"create_routing_form_on": "Crear formulario de enrutamiento el",
"default_app_link_title": "Establecer un enlace de aplicación predeterminado",
"default_app_link_description": "Establecer un enlace de aplicación predeterminado permite que todos los tipos de eventos recién creados utilicen el enlace de aplicación que establezca.",
"organizer_default_conferencing_app": "Aplicación por defecto del organizador",
@@ -1590,6 +1696,7 @@
"booking_questions_title": "Preguntas sobre la reserva",
"booking_questions_description": "Personalice las preguntas que se hacen en la página de reservas",
"add_a_booking_question": "Agregar una pregunta",
"identifier": "Identificador",
"duplicate_email": "El correo electrónico está duplicado",
"booking_with_payment_cancelled": "Ya no es posible pagar por este evento",
"booking_with_payment_cancelled_already_paid": "Un reembolso por el pago de esta reserva está en camino.",
@@ -1600,6 +1707,7 @@
"show_on_booking_page": "Mostrar en la página de reserva",
"get_started_zapier_templates": "Comience con las plantillas de Zapier",
"team_is_unpublished": "{{team}} no está publicado",
"team_is_unpublished_description": "Este enlace de {{entity}} no está disponible actualmente. Póngase en contacto con el propietario de {{entity}} o pídale que lo publique.",
"team_member": "Miembro del equipo",
"a_routing_form": "Un formulario de enrutamiento",
"form_description_placeholder": "Descripción del formulario",
@@ -1629,13 +1737,16 @@
"spot_popular_event_types": "Detectar tipos de eventos populares",
"spot_popular_event_types_description": "Consulte cuál de sus tipos de eventos están recibiendo más clics y reservas",
"no_responses_yet": "Aún no hay respuestas",
"no_routes_defined": "No hay rutas definidas",
"this_will_be_the_placeholder": "Este será el marcador de posición",
"error_booking_event": "Ocurrió un error al reservar el evento, actualice la página e intente nuevamente",
"timeslot_missing_title": "No hay intervalo de tiempo seleccionado",
"timeslot_missing_description": "Seleccione un intervalo de tiempo para reservar el evento.",
"timeslot_missing_cta": "Seleccionar intervalo de tiempo",
"switch_monthly": "Cambiar a la vista mensual",
"switch_weekly": "Cambiar a la vista semanal",
"switch_multiday": "Cambiar a la vista diaria",
"switch_columnview": "Cambiar a la vista de columna",
"num_locations": "{{num}} opciones de ubicación",
"select_on_next_step": "Seleccionar en el siguiente paso",
"this_meeting_has_not_started_yet": "Esta reunión aún no ha comenzado",
@@ -1674,6 +1785,7 @@
"managed_event_dialog_title_one": "La url /{{slug}} ya existe para {{count}} miembro. ¿Desea reemplazarla?",
"managed_event_dialog_title_other": "La url /{{slug}} ya existe para {{count}} miembros. ¿Desea reemplazarla?",
"managed_event_dialog_information_one": "<strong>{{names}}</strong> ya usa la url <strong>/{{slug}}</strong>.",
"managed_event_dialog_information_other": "<strong>{{names}}</strong> ya usan la url <strong>/{{slug}}</strong>.",
"managed_event_dialog_clarification": "Si elige reemplazarlo, se lo notificaremos. Regrese y elimínelos si no desea sobrescribirlo.",
"review_event_type": "Revisar tipo de evento",
"looking_for_more_analytics": "¿Busca más datos de análisis?",
@@ -1689,12 +1801,14 @@
"least_booked_members": "Miembros con menos reservas",
"events_created": "Eventos creados",
"events_completed": "Eventos completados",
"events_cancelled": "Eventos cancelados",
"events_rescheduled": "Eventos reprogramados",
"from_last_period": "desde el último período",
"from_to_date_period": "Desde: {{startDate}} Hasta: {{endDate}}",
"redirect_url_warning": "Agregar una redirección deshabilitará la página de éxito. Asegúrese de mencionar \"Reserva confirmada\" en su página de éxito personalizada.",
"event_trends": "Tendencias del evento",
"clear_filters": "Eliminar filtros",
"clear": "Borrar",
"hold": "Retener",
"on_booking_option": "Cobrar el pago durante la reserva",
"hold_option": "Cobrar comisión por no presentarse",
@@ -1721,6 +1835,18 @@
"complete_your_booking": "Complete su reserva",
"complete_your_booking_subject": "Complete su reserva: {{title}} el {{date}}",
"confirm_your_details": "Confirme sus datos",
"copy_invite_link": "Copiar enlace de invitación",
"edit_invite_link": "Editar ajustes de enlace",
"invite_link_copied": "Enlace de invitación copiado",
"invite_link_deleted": "Enlace de invitación eliminado",
"invite_link_updated": "Configuración de enlace de invitación guardada",
"link_expires_after": "Enlaces establecidos para expirar después de...",
"one_day": "1 día",
"seven_days": "7 días",
"thirty_days": "30 días",
"three_months": "3 meses",
"one_year": "1 año",
"team_invite_received": "Lo han invitado a unirse a {{teamName}}",
"currency_string": "{{amount, currency}}",
"charge_card_dialog_body": "Está a punto de cobrarle {{amount, currency}} al asistente. ¿Está seguro de que desea continuar?",
"charge_attendee": "Cobrar al asistente {{amount, currency}}",
@@ -1729,6 +1855,7 @@
"email_invite_team_bulk": "Se han invitado {{userCount}} usuarios",
"error_collecting_card": "Error al cargar la tarjeta",
"image_size_limit_exceed": "La imagen cargada no debe exceder el límite de tamaño de 5 Mb",
"unauthorized_workflow_error_message": "{{errorCode}}: No está autorizado para habilitar o deshabilitar este flujo de trabajo",
"inline_embed": "Incrustar en línea",
"load_inline_content": "Carga su tipo de evento directamente en línea con otro contenido de su sitio web.",
"floating_pop_up_button": "Botón emergente flotante",
@@ -1748,6 +1875,69 @@
"connect_google_workspace": "Conectar Google Workspace",
"google_workspace_admin_tooltip": "Debe ser administrador para usar esta función",
"first_event_type_webhook_description": "Cree su primer webhook para este tipo de evento",
"install_app_on": "Instalar aplicación en",
"create_for": "Crear para",
"insights_all_org_filter": "Todas las aplicaciones"
"setup_organization": "Configurar una organización",
"organization_banner_description": "Cree entornos en los que sus equipos puedan crear aplicaciones, flujos de trabajo y tipos de eventos compartidos con programación por turnos y colectiva.",
"organization_banner_title": "Gestione organizaciones con varios equipos",
"set_up_your_organization": "Configure su organización",
"organizations_description": "Las organizaciones son entornos compartidos donde los equipos pueden crear tipos de eventos, aplicaciones, flujos de trabajo compartidos y más.",
"must_enter_organization_name": "Debe introducir el nombre de una organización",
"must_enter_organization_admin_email": "Debe introducir la dirección de correo electrónico de su organización",
"admin_email": "Dirección de correo electrónico de su organización",
"admin_username": "Nombre de usuario del administrador",
"organization_name": "Nombre de la organización",
"organization_url": "URL de la organización",
"organization_verify_header": "Verifique el correo electrónico de su organización",
"organization_verify_email_body": "Utilice el código a continuación para verificar su dirección de correo electrónico para seguir configurando su organización.",
"additional_url_parameters": "Parámetros adicionales de URL",
"about_your_organization": "Acerca de su organización",
"about_your_organization_description": "Las organizaciones son entornos compartidos donde puede crear varios equipos con miembros, tipos de eventos, aplicaciones, flujos de trabajo compartidos y más.",
"create_your_teams": "Cree sus equipos",
"create_your_teams_description": "Comiencen a programar juntos agregando miembros de su equipo a su organización",
"invite_organization_admins": "Invite a los administradores de su organización",
"invite_organization_admins_description": "Estos administradores tendrán acceso a todos los equipos de su organización. Puede agregar administradores y miembros del equipo más tarde.",
"set_a_password": "Establezca una contraseña",
"set_a_password_description": "Esto creará una nueva cuenta de usuario con el correo electrónico de su organización y esta contraseña.",
"organization_logo": "Logo de la organización",
"organization_about_description": "Algunas frases sobre su organización. Esto aparecerá en la página de perfil público de su organización.",
"ill_do_this_later": "Lo haré más tarde",
"verify_your_email": "Verifique su correo electrónico",
"enter_digit_code": "Ingrese el código de 6 dígitos que enviamos a {{email}}",
"verify_email_organization": "Verifique su correo electrónico para crear una organización",
"code_provided_invalid": "El código proporcionado no es válido, inténtelo de nuevo",
"email_already_used": "El correo electrónico ya se está utilizando",
"organization_admin_invited_heading": "Lo han invitado a unirse a {{orgName}}",
"organization_admin_invited_body": "Únase a su equipo en {{orgName}} y comience a concentrarse en las reuniones, no en hacer reuniones.",
"duplicated_slugs_warning": "No se pudieron crear los siguientes equipos debido a slugs duplicados: {{slugs}}",
"team_names_empty": "Los nombres de equipo no pueden estar vacíos",
"team_names_repeated": "Los nombres de equipo no se pueden repetir",
"user_belongs_organization": "El usuario pertenece a una organización",
"org_no_teams_yet": "Esta organización aún no tiene equipos",
"org_no_teams_yet_description": "Si usted es un administrador, asegúrese de crear equipos para que se muestren aquí.",
"set_up": "Configurar",
"set_up_your_profile": "Configure su perfil",
"set_up_your_profile_description": "Informe a las personas quién es usted dentro de {{orgName}} cuándo interactúan con su enlace público.",
"my_profile": "Mi perfil",
"my_settings": "Mi configuración",
"crm": "CRM",
"messaging": "Mensajería",
"sender_id_info": "Nombre o número que se muestra como el remitente de un SMS (algunos países no permiten ID de remitente alfanumérico)",
"org_admins_can_create_new_teams": "Sólo el administrador de su organización puede crear nuevos equipos",
"google_new_spam_policy": "La nueva política de spam de Google podría evitar que reciba notificaciones por correo electrónico y calendario sobre esta reserva.",
"resolve": "Resolver",
"no_organization_slug": "Hubo un error al crear equipos para esta organización. Falta el slug de URL.",
"org_name": "Nombre de la organización",
"org_url": "URL de la organización",
"copy_link_org": "Copiar enlace a la organización",
"404_the_org": "La organización",
"404_the_team": "El equipo",
"404_claim_entity_org": "Reclame su subdominio para su organización",
"404_claim_entity_team": "Reclama este equipo y empiece a gestionar los horarios de forma colectiva",
"insights_all_org_filter": "Todas las aplicaciones",
"insights_team_filter": "Equipo: {{teamName}}",
"insights_user_filter": "Usuario: {{userName}}",
"insights_subtitle": "Mire información de insights en todos sus eventos",
"custom_plan": "Plan personalizado",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Agregue sus nuevas cadenas arriba ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -244,6 +244,8 @@
"all": "Tous",
"yours": "Votre compte",
"available_apps": "Applications disponibles",
"available_apps_lower_case": "Applications disponibles",
"available_apps_desc": "Aucune application installée. Consultez les applications populaires ci-dessous et découvrez-en plus dans notre <1>App Store</1>.",
"check_email_reset_password": "Vérifiez vos e-mails. Nous vous avons envoyé un lien pour réinitialiser votre mot de passe.",
"finish": "Terminer",
"organization_general_description": "Gérez les paramètres de langue et de fuseau horaire de votre équipe.",
@@ -407,6 +409,7 @@
"booking_requested": "Réservation demandée",
"meeting_ended": "Rendez-vous terminé",
"form_submitted": "Formulaire envoyé",
"booking_paid": "Réservation payée",
"event_triggers": "Déclencheurs d'événement",
"subscriber_url": "Lien de l'abonné",
"create_new_webhook": "Créez un nouveau webhook",
@@ -1865,6 +1868,9 @@
"open_dialog_with_element_click": "Ouvre votre boîte de dialogue Cal lorsque quelqu'un clique sur un élément.",
"need_help_embedding": "Besoin d'aide ? Consultez nos guides pour intégrer Cal sur Wix, Squarespace ou WordPress, consultez nos questions fréquentes ou explorez les options d'intégration avancées.",
"book_my_cal": "Prendre rendez-vous",
"first_name": "Prénom",
"last_name": "Nom",
"first_last_name": "Prénom, Nom",
"invite_as": "Inviter en tant que",
"form_updated_successfully": "Formulaire mis à jour avec succès.",
"disable_attendees_confirmation_emails": "Désactiver les e-mails de confirmation par défaut pour les participants",
@@ -1939,6 +1945,14 @@
"insights_team_filter": "Équipe : {{teamName}}",
"insights_user_filter": "Utilisateur : {{userName}}",
"insights_subtitle": "Visualisez les statistiques de réservation à travers vos événements",
"location_options": "{{locationCount}} options de lieu",
"custom_plan": "Plan personnalisé",
"org_team_names_example": "p. ex. Équipe marketing",
"org_team_names_example_1": "p. ex. Équipe marketing",
"org_team_names_example_2": "p. ex. Équipe de vente",
"org_team_names_example_3": "p. ex. Équipe de design",
"org_team_names_example_4": "p. ex. Équipe d'ingénierie",
"org_team_names_example_5": "p. ex. Équipe d'analyse de données",
"org_max_team_warnings": "Vous pourrez ajouter plus d'équipes plus tard.",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Ajoutez vos nouvelles chaînes ci-dessus ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -1658,7 +1658,10 @@
"delete_sso_configuration_confirmation_description": "Eliminare la configurazione {{connectionType}}? I membri del tuo team che utilizzano l'accesso {{connectionType}} non saranno più in grado di accedere a Cal.com.",
"organizer_timezone": "Fuso orario organizzatore",
"email_user_cta": "Visualizza invito",
"email_no_user_invite_heading": "Hai ricevuto un invito a unirti a {{entity}} di {{appName}}",
"email_no_user_invite_subheading": "{{invitedBy}} ti ha invitato a unirti al suo team su {{appName}}. {{appName}} è uno strumento di pianificazione di eventi che permette al tuo team di pianificare le riunioni senza scambiare decine di e-mail.",
"email_user_invite_subheading": "{{invitedBy}} ti ha invitato a unirti a {{entity}} `{{teamName}}` su {{appName}}. {{appName}} è uno strumento di pianificazione di eventi che permette a te e al tuo {{entity}} di pianificare le riunioni senza scambiare decine di e-mail.",
"email_no_user_invite_steps_intro": "Ti assisteremo nei passaggi iniziali in modo che tu possa pianificare eventi per il tuo {{entity}} senza stress e in pochissimo tempo.",
"email_no_user_step_one": "Scegli il tuo nome utente",
"email_no_user_step_two": "Collega il tuo account di calendario",
"email_no_user_step_three": "Imposta la tua disponibilità",
@@ -1669,6 +1672,8 @@
"scheduler": "{Scheduler}",
"no_workflows": "Nessun flusso di lavoro",
"change_filter": "Modifica il filtro per vedere i flussi di lavoro personali e di squadra.",
"change_filter_common": "Cambia i criteri di filtro per vedere i risultati.",
"no_results_for_filter": "Nessun risultato per il filtro",
"recommended_next_steps": "Passaggi successivi consigliati",
"create_a_managed_event": "Crea un tipo di evento gestito",
"meetings_are_better_with_the_right": "Le riunioni sono efficaci quando sono presenti le persone giuste. Invitale adesso.",
@@ -1679,7 +1684,9 @@
"no_longer_attending": "Non partecipi più a questo evento",
"attendee_no_longer_attending_subject": "Un partecipante non partecipa più a {{title}} con il seguente orario {{date}}",
"attendee_no_longer_attending": "Un partecipante non partecipa più al tuo evento",
"attendee_no_longer_attending_subtitle": "{{name}} ha disdetto. Di conseguenza, si è liberato un posto in questa fascia oraria",
"create_event_on": "Crea evento in",
"create_routing_form_on": "Crea modulo di instradamento su",
"default_app_link_title": "Imposta il link dell'app predefinita",
"default_app_link_description": "L'impostazione di un link dell'app predefinita permette a tutti i nuovi tipi di eventi di usare il link dell'app impostato.",
"organizer_default_conferencing_app": "Applicazione predefinita dell'organizzatore",
@@ -1700,6 +1707,7 @@
"show_on_booking_page": "Mostra nella pagina di prenotazione",
"get_started_zapier_templates": "Inizia con i modelli Zapier",
"team_is_unpublished": "{{team}} non è pubblicato",
"team_is_unpublished_description": "Questo link di {{entity}} non è attualmente disponibile. Contatta il proprietario di {{entity}} o chiedigli di pubblicarlo.",
"team_member": "Membro del team",
"a_routing_form": "Un modulo di instradamento",
"form_description_placeholder": "Descrizione modulo",
@@ -1731,6 +1739,7 @@
"no_responses_yet": "Per ora non ci sono risposte",
"no_routes_defined": "Nessun percorso definito",
"this_will_be_the_placeholder": "Questo sarà il segnaposto",
"error_booking_event": "Si è verificato un errore durante la prenotazione dell'evento. Aggiorna la pagina e riprova",
"timeslot_missing_title": "Nessuna fascia oraria selezionata",
"timeslot_missing_description": "Seleziona una fascia oraria per prenotare l'evento.",
"timeslot_missing_cta": "Seleziona fascia oraria",
@@ -1776,6 +1785,7 @@
"managed_event_dialog_title_one": "L'URL /{{slug}} esiste già per {{count}} membro. Vuoi sostituirlo?",
"managed_event_dialog_title_other": "L'URL /{{slug}} esiste già per {{count}} membri. Vuoi sostituirlo?",
"managed_event_dialog_information_one": "<strong>{{names}}</strong> utilizza già l'URL <strong>/{{slug}}</strong>.",
"managed_event_dialog_information_other": "<strong>{{names}}</strong> utilizzano già l'URL <strong>/{{slug}}</strong>.",
"managed_event_dialog_clarification": "Se decidi di sostituirlo, i membri ne saranno avvisati. Torna indietro e rimuovili se non desideri sovrascriverlo.",
"review_event_type": "Rivedi tipo di evento",
"looking_for_more_analytics": "Hai bisogno di più dati analitici?",
@@ -1791,12 +1801,14 @@
"least_booked_members": "Membri meno prenotati",
"events_created": "Eventi creati",
"events_completed": "Eventi completati",
"events_cancelled": "Eventi cancellati",
"events_rescheduled": "Eventi riprogrammati",
"from_last_period": "dal periodo precedente",
"from_to_date_period": "Da: {{startDate}} A: {{endDate}}",
"redirect_url_warning": "Aggiungendo un reindirizzamento, viene disabilitata la pagina di conferma dell'esito. Assicurati che nella pagina di conferma dell'esito personalizzata compaia la dicitura \"Prenotazione confermata\".",
"event_trends": "Tendenze eventi",
"clear_filters": "Cancella filtri",
"clear": "Cancella",
"hold": "Preautorizzazione",
"on_booking_option": "Raccogli pagamento alla prenotazione",
"hold_option": "Addebita penale per mancata presentazione",
@@ -1832,6 +1844,8 @@
"one_day": "1 giorno",
"seven_days": "7 giorni",
"thirty_days": "30 giorni",
"three_months": "3 mesi",
"one_year": "1 anno",
"team_invite_received": "Hai ricevuto un invito a unirti al team {{teamName}}",
"currency_string": "{{amount, currency}}",
"charge_card_dialog_body": "Stai per addebitare {{amount, currency}} al partecipante. Confermi di voler proseguire?",
@@ -1861,9 +1875,69 @@
"connect_google_workspace": "Collega Google Workspace",
"google_workspace_admin_tooltip": "Per usare questa funzione è necessario essere amministratori di Workspace",
"first_event_type_webhook_description": "Crea il primo webhook per questo tipo di evento",
"install_app_on": "Installa l'app su",
"create_for": "Crea per",
"setup_organization": "Imposta un'organizzazione",
"organization_banner_description": "Crea un ambiente dove i tuoi team potranno creare applicazioni condivise, flussi di lavoro e tipi di eventi con pianificazioni di gruppo e round robin.",
"organization_banner_title": "Gestisci organizzazioni con più team",
"set_up_your_organization": "Imposta la tua organizzazione",
"organizations_description": "Le organizzazioni sono ambienti condivisi dove i team possono creare tipi di eventi, applicazioni, flussi di lavoro condivisi e tanto altro.",
"must_enter_organization_name": "È necessario inserire un nome di organizzazione",
"must_enter_organization_admin_email": "È necessario inserire l'indirizzo e-mail dell'organizzazione",
"admin_email": "Indirizzo e-mail dell'organizzazione",
"admin_username": "Nome utente dell'amministratore",
"organization_name": "Nome dell'organizzazione",
"organization_url": "URL dell'organizzazione",
"organization_verify_header": "Verifica l'e-mail della tua organizzazione",
"organization_verify_email_body": "Usa il codice sottostante per verificare il tuo indirizzo e-mail e continuare a impostare l'organizzazione.",
"additional_url_parameters": "Parametri URL aggiuntivi",
"about_your_organization": "Informazioni sulla tua organizzazione",
"about_your_organization_description": "Le organizzazioni sono ambienti condivisi dove è possibile creare più team con membri, tipi di eventi, applicazioni, flussi di lavoro condivisi e tanto altro.",
"create_your_teams": "Crea i tuoi team",
"create_your_teams_description": "Inizia la pianificazione condivisa aggiungendo i membri del tuo team alla tua organizzazione",
"invite_organization_admins": "Invita gli amministratori dell'organizzazione",
"invite_organization_admins_description": "Gli amministratori avranno l'accesso a tutti i team della tua organizzazione. Puoi aggiungere amministratori e membri dei team in un secondo tempo.",
"set_a_password": "Imposta una password",
"set_a_password_description": "Verrà creato un nuovo account utente con l'indirizzo e-mail della tua organizzazione e questa password.",
"organization_logo": "Logo dell'organizzazione",
"organization_about_description": "Qualche informazione sulla tua organizzazione. Le informazioni appariranno nella pagina di profilo dell'organizzazione.",
"ill_do_this_later": "Lo farò più tardi",
"verify_your_email": "Verifica l'e-mail",
"enter_digit_code": "Immetti il codice di 6 cifre che ti è stato inviato a {{email}}",
"verify_email_organization": "Verifica il tuo indirizzo email per creare un'organizzazione",
"code_provided_invalid": "Il codice immesso non è valido, riprova",
"email_already_used": "Indirizzo email già in uso",
"organization_admin_invited_heading": "Hai ricevuto un invito a unirti a {{orgName}}",
"organization_admin_invited_body": "Unisciti al tuo team su {{orgName}} per concentrarti sulle riunioni, non sulla loro pianificazione!",
"duplicated_slugs_warning": "Non è stato possibile creare i seguenti team a causa di slug duplicati: {{slugs}}",
"team_names_empty": "I nomi di team non possono essere vuoti",
"team_names_repeated": "I nomi di team non possono essere ripetuti",
"user_belongs_organization": "L'utente appartiene a un'organizzazione",
"org_no_teams_yet": "Questa organizzazione non ha ancora nessun team",
"org_no_teams_yet_description": "Se sei un amministratore, assicurati di creare dei team da mostrare qui.",
"set_up": "Imposta",
"set_up_your_profile": "Imposta il tuo profilo",
"set_up_your_profile_description": "Fai sapere agli utenti la tua posizione all'interno di {{orgName}} quando interagiscono con il tuo link pubblico.",
"my_profile": "Il mio profilo",
"my_settings": "Le mie impostazioni",
"crm": "CRM",
"messaging": "Messaggistica",
"sender_id_info": "Nome o numero mostrato come mittente di un SMS (alcuni paesi non consentono ID alfanumerici dei mittenti)",
"org_admins_can_create_new_teams": "Solo l'amministratore della tua organizzazione può creare nuovi team",
"google_new_spam_policy": "Le nuove norme sullo spam di Google potrebbero impedirti di ricevere email e notifiche di calendario in merito a questa prenotazione.",
"resolve": "Risolvi",
"no_organization_slug": "Si è verificato un errore durante la creazione di team per questa organizzazione. Slug di URL mancante.",
"org_name": "Nome dell'organizzazione",
"org_url": "URL dell'organizzazione",
"copy_link_org": "Copia link all'organizzazione",
"404_the_org": "L'organizzazione",
"404_the_team": "Il team",
"404_claim_entity_org": "Richiedi il sottodominio per la tua organizzazione",
"404_claim_entity_team": "Richiedi questo team e inizia a gestire le pianificazioni collettivamente",
"insights_all_org_filter": "Tutte le app",
"insights_team_filter": "Team: {{teamName}}",
"insights_user_filter": "Utente: {{userName}}",
"insights_subtitle": "Visualizza le informazioni sulle prenotazioni per tutti i tuoi eventi",
"custom_plan": "Piano personalizzato",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑↑ Aggiungi qui le tue nuove stringhe al di sopra di questa riga ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ ↑"
}
+191 -1
View File
@@ -11,11 +11,23 @@
"calcom_explained_new_user": "{{appName}} アカウントのセットアップを完了してください。あと数ステップでスケジューリングの問題をすべて解決できます。",
"have_any_questions": "ご不明な点があれば、お気軽にお問い合わせください。",
"reset_password_subject": "{{appName}}: パスワードのリセット手順",
"verify_email_subject": "{{appName}}:アカウントを確認",
"check_your_email": "メールを確認してください",
"verify_email_page_body": "{{email}} にメールを送信しました。{{appName}} からのメール配信とカレンダーが確実に連携するようにするには、メールアドレスの確認が重要です。",
"verify_email_banner_body": "メール配信とカレンダーが確実に連携するようにするには、メールアドレスを確認してください。",
"verify_email_email_header": "メールアドレスの確認",
"verify_email_email_button": "メールを確認",
"verify_email_email_body": "以下のボタンをクリックして、メールアドレスを確認してください。",
"verify_email_email_link_text": "ボタンをクリックしたくない場合は、こちらにリンクがあります:",
"email_sent": "メールが正常に送信されました",
"event_declined_subject": "却下: {{title}} {{date}}",
"event_cancelled_subject": "キャンセル済み:{{date}} の{{title}}",
"event_request_declined": "イベントのリクエストが拒否されました",
"event_request_declined_recurring": "繰り返しイベントのリクエストが拒否されました",
"event_request_cancelled": "予定されたイベントがキャンセルされました",
"organizer": "主催者",
"need_to_reschedule_or_cancel": "再スケジュールまたはキャンセルが必要ですか?",
"no_options_available": "利用できるオプションがありません",
"cancellation_reason": "キャンセルの理由 (オプション)",
"cancellation_reason_placeholder": "キャンセルが必要な理由をお教えください",
"rejection_reason": "拒否の理由",
@@ -75,7 +87,9 @@
"your_meeting_has_been_booked": "ミーティングが予約されました",
"event_type_has_been_rescheduled_on_time_date": "あなたの {{title}} は {{date}} に再スケジュールされました。",
"event_has_been_rescheduled": "更新 - イベントのスケジュールが変更されました",
"request_reschedule_subtitle": "{{organizer}}が予約をキャンセルし、別の時間帯を選ぶようにあなたにリクエストしました。",
"request_reschedule_title_organizer": "{{attendee}} にスケジュールの変更をリクエストしました",
"request_reschedule_subtitle_organizer": "あなたが予約をキャンセルしたので、{{attendee}}とあなたは新しい予約の時間帯を選ぶ必要があります。",
"rescheduled_event_type_subject": "スケジュール変更のリクエストを送信しました: {{date}} の {{name}} との {{eventType}}",
"requested_to_reschedule_subject_attendee": "スケジュール変更のアクションが必要です: {{name}} との {{eventType}} に新しい時間を予約してください",
"hi_user_name": "こんにちは、{{name}} さん",
@@ -104,6 +118,7 @@
"team_info": "チームの情報",
"request_another_invitation_email": "{{toEmail}} を {{appName}} のメールアドレスとして使用しない場合、または {{appName}} アカウントをすでに持っている場合は、そのメールへの招待を別にリクエストしてください。",
"you_have_been_invited": "チーム {{teamName}} への参加を招待されました。",
"user_invited_you": "{{entity}}の{{team}}に参加するよう、{{user}}が {{appName}} であなたを招待しました",
"hidden_team_member_title": "あなたはこのチームで非表示にされています",
"hidden_team_member_message": "座席料の支払いが完了していません。Pro へとアップグレードするか、チームのオーナーにあなたの座席料の支払いをご依頼ください。",
"hidden_team_owner_message": "チームをご利用いただくためには、Pro アカウントが必要です。アップグレードするまでは非表示となります。",
@@ -114,6 +129,8 @@
"team_upgrade_banner_description": "新しいチームプランをお試しいただき、ありがとうございます。あなたのチーム「{{teamName}}」には、アップグレードが必要なようです。",
"upgrade_banner_action": "アップグレードはこちら",
"team_upgraded_successfully": "チームのアップグレードが正常に完了しました!",
"org_upgrade_banner_description": "Organization プランをお試しいただきありがとうございます。Organization「{{teamName}}」はアップグレードが必要です。",
"org_upgraded_successfully": "あなたのOrganizationは正常にアップグレードされました!",
"use_link_to_reset_password": "以下のリンクを使用してパスワードをリセットしてください",
"hey_there": "こんにちは!",
"forgot_your_password_calcom": "パスワードをお忘れですか? - {{appName}}",
@@ -180,6 +197,7 @@
"blog": "ブログ",
"blog_description": "最新のニュースや記事を読む",
"join_our_community": "コミュニティーに参加する",
"join_our_discord": "私たちのDiscordに参加する",
"404_claim_entity_user": "ユーザー名を獲得してイベントをスケジュールする",
"popular_pages": "人気のページ",
"register_now": "今すぐ登録",
@@ -187,6 +205,7 @@
"page_doesnt_exist": "このページは存在しません。",
"check_spelling_mistakes_or_go_back": "スペルミスを確認するか、前のページに戻ってください。",
"404_page_not_found": "404: このページは見つかりませんでした。",
"booker_event_not_found": "予約しようとしているイベントは見つかりませんでした。",
"getting_started": "はじめに",
"15min_meeting": "15 分間のミーティング",
"30min_meeting": "30 分間のミーティング",
@@ -222,11 +241,14 @@
"done": "完了",
"all_done": "すべて完了!",
"all": "すべて",
"yours": "アカウント",
"available_apps": "利用可能なアプリ",
"check_email_reset_password": "メールをご確認ください。パスワードをリセットするためのリンクを送信しました。",
"finish": "完了",
"organization_general_description": "チームの言語とタイムゾーンの設定を管理します",
"few_sentences_about_yourself": "あなたについてのいくつかの文章。これはあなたの個人URLページに表示されます。",
"nearly_there": "あと少しで完了です!",
"nearly_there_instructions": "最後に、短い自己紹介と写真があれば、予約してもらったり、誰と予約しているのかを知らせるのに役立ちます。",
"set_availability_instructions": "定期的に利用できる時間の範囲を定義します。後でこれらをさらに作成し、別のカレンダーに割り当てることができます。",
"set_availability": "利用可否の設定",
"continue_without_calendar": "カレンダーなしで続行",
@@ -282,6 +304,18 @@
"success": "成功",
"failed": "失敗",
"password_has_been_reset_login": "パスワードがリセットされました。新しく作成したパスワードでログインできるようになりました。",
"layout": "レイアウト",
"bookerlayout_default_title": "デフォルトの表示",
"bookerlayout_description": "複数を選択することができ、予約者は表示を切り替えることができます。",
"bookerlayout_user_settings_title": "予約のレイアウト",
"bookerlayout_user_settings_description": "複数を選択することができ、予約者は表示を切り替えられます。これはイベントごとに上書きできます。",
"bookerlayout_month_view": "月",
"bookerlayout_week_view": "週",
"bookerlayout_column_view": "カラム",
"bookerlayout_error_min_one_enabled": "少なくとも 1 つのレイアウトを有効にする必要があります。",
"bookerlayout_error_default_not_enabled": "デフォルト表示として選択したレイアウトは、有効なレイアウトに含まれていません。",
"bookerlayout_error_unknown_layout": "選択したレイアウトは有効なレイアウトではありません。",
"bookerlayout_override_global_settings": "<2>設定 / 外観</2>または<6>このイベントのみ上書き</6>ですべてのイベントの種類を管理できます。",
"unexpected_error_try_again": "予期しないエラーが発生しました。もう一度お試しください。",
"sunday_time_error": "日曜日の時間が無効です",
"monday_time_error": "月曜日の時間が無効です",
@@ -294,6 +328,7 @@
"error_end_time_next_day": "終了時刻に 24 時を超える時刻を設定することはできません",
"back_to_bookings": "予約に戻る",
"free_to_pick_another_event_type": "他の好きなイベントを選んでください。",
"cancelled": "キャンセル済み",
"cancellation_successful": "キャンセルしました",
"really_cancel_booking": "本当に予約をキャンセルしますか?",
"cannot_cancel_booking": "この予約はキャンセルできません",
@@ -302,6 +337,12 @@
"cancelling_event_recurring": "このイベントは、繰り返しイベントに含まれている 1 つのインスタンスです。",
"cancelling_all_recurring": "これらはすべて、繰り返しイベントに含まれているインスタンスの残りです。",
"error_with_status_code_occured": "ステータスコード {{status}} に関するエラーが発生しました。",
"error_event_type_url_duplicate": "この URL のイベントの種類はすでに存在します。",
"error_event_type_unauthorized_create": "このイベントを作成することができません",
"error_event_type_unauthorized_update": "このイベントを編集することができません",
"error_workflow_unauthorized_create": "このワークフローを作成することができません",
"error_schedule_unauthorized_create": "このスケジュールを作成することができません",
"booking_already_cancelled": "この予約はすでにキャンセルされています",
"booking_already_accepted_rejected": "この予約はすでに承認または拒否が行われています。",
"go_back_home": "ホームに戻る",
"or_go_back_home": "またはホームに戻る",
@@ -311,10 +352,12 @@
"no_status_bookings_yet_description": "{{status}} の予約がありません。 {{description}}",
"event_between_users": "{{host}} と {{attendeeName}} が出席する{{eventName}}",
"bookings": "予約",
"booking_not_found": "予約が見つかりません",
"bookings_description": "イベントタイプリンクを通じて予約された今後のイベントと過去のイベントを表示します。",
"upcoming_bookings": "誰かがあなたとの時間を予約すると、すぐにここに表示されます。",
"recurring_bookings": "別のユーザーがあなたとの繰り返しイベントを予約すると、ここに表示されます。",
"past_bookings": "過去の予約はここに表示されます。",
"cancelled_bookings": "キャンセルされた予約はここに表示されます",
"unconfirmed_bookings": "未確認の予約はここに表示されます。",
"unconfirmed_bookings_tooltip": "未確認の予約",
"on": "上",
@@ -348,15 +391,19 @@
"user_dynamic_booking_disabled": "グループ内の一部のユーザーは、現在動的なグループ予約を無効にしています",
"allow_dynamic_booking_tooltip": "\"+\" を使って複数のユーザー名を追加することで動的に作成できるグループ予約リンク。例: \"{{appName}}/bailey+peer\"",
"allow_dynamic_booking": "出席者が動的なグループ予約を通じてあなたを予約できるようにする",
"dynamic_booking": "動的なグループリンク",
"email": "Eメールアドレス",
"email_placeholder": "jdoe@example.com",
"full_name": "フルネーム",
"browse_api_documentation": "APIドキュメントを参照する",
"leverage_our_api": "APIを活用して、完全な制御とカスタマイズが可能です。",
"create_webhook": "Webhook を作成",
"booking_cancelled": "キャンセルされた予約",
"booking_rescheduled": "予約の再スケジュール済",
"recording_ready": "録音をダウンロードするためのリンクが準備できています",
"booking_created": "予約を作成しました",
"booking_rejected": "拒否された予約",
"booking_requested": "リクエストされた予約",
"meeting_ended": "ミーティングが終了しました",
"form_submitted": "フォームが送信されました",
"event_triggers": "イベントトリガー",
@@ -366,6 +413,8 @@
"team_webhooks": "チームのウェブフック",
"create_new_webhook_to_account": "アカウントに新しいウェブフックを作成します",
"new_webhook": "新しいウェブフック",
"receive_cal_meeting_data": "イベントが予定またはキャンセルされた場合、特定の URL で開かれる {{appName}} ミーティングデータをリアルタイムに受信する。",
"receive_cal_event_meeting_data": "このイベントが予定またはキャンセルされた場合、特定の URL で開かれる {{appName}} ミーティングデータをリアルタイムに受信する。",
"responsive_fullscreen_iframe": "レスポンシブフルスクリーン iframe",
"loading": "読み込み中...",
"deleting": "削除中...",
@@ -428,6 +477,7 @@
"max_limit_allowed_hint": "{{limit}} 文字以下で入力してください",
"invalid_password_hint": "パスワードには少なくとも 1 文字以上数字を含め、アルファベットの大文字と小文字を両方使用した上で {{passwordLength}} 文字以上の長さに設定してください",
"incorrect_password": "パスワードが正しくありません。",
"incorrect_email_password": "ユーザー名またはパスワードが正しくありません。",
"use_setting": "設定を使用",
"am_pm": "午前/午後",
"time_options": "時刻オプション",
@@ -455,6 +505,7 @@
"additional_guests": "ゲストを追加",
"your_name": "あなたの名前",
"your_full_name": "あなたのフルネーム",
"no_name": "名前がありません",
"email_address": "メールアドレス",
"enter_valid_email": "有効なメールアドレスを入力してください",
"location": "所在地",
@@ -498,10 +549,13 @@
"your_team_updated_successfully": "チームが正常に更新されました。",
"about": "このアプリについて",
"team_description": "あなたのチームについての簡単な説明文です。あなたのチームの URL ページに表示されます。",
"org_description": "あなたの組織についての簡単な説明文です。あなたの組織の URL ページに表示されます。",
"members": "メンバー",
"organization_members": "Organization のメンバー",
"member": "メンバー",
"number_member_one": "{{count}} 人のメンバー",
"number_member_other": "{{count}} 人のメンバー",
"number_selected": "{{count}} 件が選択されました",
"owner": "所有者",
"admin": "管理者",
"administrator_user": "管理者ユーザー",
@@ -532,6 +586,8 @@
"confirm_all": "すべて確認",
"disband_team": "チームを解散する",
"disband_team_confirmation_message": "このチームを解散しますか? あなたがこのチームのリンクを共有した人は、それを使って予約することができなくなります。",
"disband_org": "Organization を解散する",
"disband_org_confirmation_message": "この Organization を解散しますか?すべてのチームとメンバーが削除されます。",
"remove_member_confirmation_message": "このメンバーをチームから削除してもよろしいですか?",
"confirm_disband_team": "はい、チームを解散します。",
"confirm_remove_member": "はい、メンバーを削除します",
@@ -606,6 +662,7 @@
"event_type_updated_successfully": "{{eventTypeTitle}} イベント種別が正常に更新されました",
"event_type_deleted_successfully": "イベント種別が正常に削除されました",
"hours": "時間",
"people": "ユーザー",
"your_email": "あなたのメールアドレス",
"change_avatar": "アバターを変更",
"language": "言語",
@@ -638,9 +695,11 @@
"create_new_team": "新しいチームを作成",
"open_invitations": "招待状を開く",
"new_team": "新しいチーム",
"create_first_team_and_invite_others": "最初のチームを作成し、一緒に仕事をするために他のユーザーを招待してください。",
"create_team_to_get_started": "始めるためにチームを作成",
"teams": "チーム",
"team": "チーム",
"organization": "Organization",
"team_billing": "チームの請求",
"team_billing_description": "チームの請求情報を管理します",
"upgrade_to_flexible_pro_title": "チームへの請求内容を変更しました",
@@ -715,6 +774,7 @@
"cal_provide_huddle01_meeting_url": "{{appName}} は Huddle01 web3 ビデオミーティングの URL を提供する。",
"cal_provide_teams_meeting_url": "{{appName}} は、MS Teams のミーティングの URL を提供する。注: 職場や学校のアカウントが必要です。",
"require_payment": "有料",
"you_need_to_add_a_name": "名前を追加する必要があります",
"commission_per_transaction": "取引あたりのコミッション",
"event_type_updated_successfully_description": "イベントタイプが正常に更新されました。",
"hide_event_type": "イベントタイプを非表示にする",
@@ -805,18 +865,25 @@
"installed_apps": "インストールされているアプリ",
"free_to_use_apps": "無料",
"no_category_apps": "{{category}} アプリはありません",
"all_apps": "すべてのアプリ",
"no_category_apps_description_calendar": "ダブルブッキングを防ぐために、スケジュールの重複をチェックするカレンダーアプリを追加しましょう",
"no_category_apps_description_conferencing": "顧客とのビデオ通話には会議アプリを追加します",
"no_category_apps_description_payment": "決済アプリを追加して、顧客との取引を容易にしましょう",
"no_category_apps_description_analytics": "予約ページに分析アプリを追加する",
"no_category_apps_description_automation": "使用する自動化アプリを追加する",
"no_category_apps_description_other": "その他のアプリを追加して、様々なことを実現しましょう",
"no_category_apps_description_web3": "予約ページに Web3 アプリを追加",
"no_category_apps_description_messaging": "カスタム通知とリマインダーを設定するにはメッセージングアプリを追加します",
"no_category_apps_description_crm": "会った人を記録するには CRM アプリを追加します",
"installed_app_calendar_description": "ダブルブッキングを防ぐために、カレンダーの重複をチェックするように設定します。",
"installed_app_payment_description": "顧客に請求をする際に使用する決済処理サービスを設定しましょう。",
"installed_app_analytics_description": "予約ページでどの分析アプリを使用するかを構成する",
"installed_app_other_description": "その他のカテゴリーからインストールしたすべてのアプリ。",
"installed_app_conferencing_description": "どの会議アプリを使用するかを設定します",
"installed_app_automation_description": "どの自動化アプリを使用するかを構成する",
"installed_app_web3_description": "予約ページでどの Web3 アプリを使用するかを構成します",
"installed_app_messaging_description": "カスタム通知とリマインダーの設定にどのメッセージングアプリを使用するかを設定します",
"installed_app_crm_description": "会った人の記録にどの CRM アプリを使用するかを設定します",
"analytics": "分析",
"empty_installed_apps_headline": "アプリがインストールされていません",
"empty_installed_apps_description": "アプリを使えば、ワークフローの質を高め、スケジュールライフを大幅に改善することができます。",
@@ -842,6 +909,7 @@
"create_events_on": "以下にイベントを作成する:",
"enterprise_license": "これは企業向けの機能です",
"enterprise_license_description": "この機能を有効にするには、{{consoleUrl}} コンソールでデプロイメントキーを入手して .env に CALCOM_LICENSE_KEY として追加してください。既にチームがライセンスを持っている場合は {{supportMail}} にお問い合わせください。",
"enterprise_license_development": "この機能は開発モードでテストできます。本番環境で使用するには管理者に<2>/権限/設定</2>に行ってライセンスキーを入力してもらってください。",
"missing_license": "ライセンスが見つかりません",
"signup_requires": "商用ライセンスが必要です",
"signup_requires_description": "{{companyName}} は、現時点ではサインアップページの無料のオープンソース版を提供しておりません。サインアップコンポーネントへのフルアクセスをご利用いただくためには、商用ライセンスを取得する必要があります。個人での利用につきましては、Prisma Data Platform またはその他の Postgres インターフェースを使用してアカウントの作成を行うことをお勧めしております。",
@@ -911,6 +979,7 @@
"confirm_delete_api_key": "この API キーを取り消す",
"revoke_api_key": "API キーの取り消し",
"api_key_copied": "API キーをコピーしました!",
"api_key_expires_on": "APIキーの期限が切れるのは",
"delete_api_key_confirm_title": "この API キーをご利用のアカウントから完全に削除しますか?",
"copy": "コピー",
"expire_date": "有効期限",
@@ -933,6 +1002,9 @@
"user_impersonation_heading": "ユーザーなりすまし",
"user_impersonation_description": "サポートチームがあなたとして一時的にサインインすることを許可し、あなたが当社に報告した問題を迅速に解決できるようにします。",
"team_impersonation_description": "チームの所有者/管理者が一時的にあなたとしてサインインできるようにします。",
"make_team_private": "チームを非公開にする",
"make_team_private_description": "これをオンにすると、チームメンバーは他のチームメンバーを確認することができなくなります。",
"you_cannot_see_team_members": "非公開チームではすべてのチームメンバーを確認できません。",
"allow_booker_to_select_duration": "予約者が時間を選択できるようにする",
"impersonate_user_tip": "この機能の使用はすべて監査されています。",
"impersonating_user_warning": "ユーザー名 \"{{user}}\" になりすましています。",
@@ -1000,16 +1072,21 @@
"event_location": "イベントの場所",
"reschedule_optional": "スケジュール変更の理由 (任意)",
"reschedule_placeholder": "スケジュール変更が必要な理由を他の人に知らせる",
"event_cancelled": "このイベントはキャンセルされました",
"emailed_information_about_cancelled_event": "あなたと他の出席者に電子メールでお知らせしました。",
"this_input_will_shown_booking_this_event": "この入力は、このイベントを予約する際に表示されます",
"meeting_url_in_conformation_email": "ミーティングURLは確認メールに記載されています",
"url_start_with_https": "URLは、http://またはhttps://で始まる必要があります",
"number_provided": "電話番号が提供されます",
"before_event_trigger": "イベント開始前に",
"event_cancelled_trigger": "イベントキャンセル時に",
"new_event_trigger": "新しいイベント予約時に",
"email_host_action": "ホストにメールを送信",
"email_attendee_action": "出席者にメールを送る",
"sms_attendee_action": "出席者に SMS を送信",
"sms_number_action": "特定の番号に SMS を送信",
"whatsapp_number_action": "特定の番号に Whatsapp メッセージを送信",
"whatsapp_attendee_action": "出席者に Whatsapp メッセージを送信",
"workflows": "ワークフロー",
"new_workflow_btn": "新しいワークフロー",
"add_new_workflow": "新しいワークフローを追加",
@@ -1073,6 +1150,8 @@
"choose_template": "テンプレートを選択する",
"custom": "カスタム",
"reminder": "リマインダー",
"rescheduled": "スケジュールを変更済み",
"completed": "完了済み",
"reminder_email": "リマインダー:{{date}} の {{name}} との {{eventType}}",
"not_triggering_existing_bookings": "イベントの予約時に電話番号の入力を求められるため、すでにある予約はトリガーされません。",
"minute_one": "{{count}} 分",
@@ -1170,6 +1249,7 @@
"start_of_week": "週の始まり",
"recordings_title": "録音",
"recording": "録音",
"happy_scheduling": "スケジュール設定をお楽しみください",
"select_calendars": "ダブルブッキングを防ぐために、スケジュールの重なりをチェックするカレンダーを選択してください。",
"check_for_conflicts": "スケジュールの重なりをチェック",
"view_recordings": "録音を表示",
@@ -1211,6 +1291,7 @@
"conferencing_description": "お気に入りのビデオ会議アプリを追加し、会議で使用できます",
"add_conferencing_app": "会議アプリを追加",
"password_description": "アカウントのパスワードの設定を管理します",
"set_up_two_factor_authentication": "二要素認証を設定する",
"we_just_need_basic_info": "プロフィールを設定するための基本的な情報が必要です。",
"skip": "スキップ",
"do_this_later": "後で行う",
@@ -1224,6 +1305,8 @@
"connect_analytics_apps": "分析アプリを接続する",
"connect_other_apps": "その他のアプリを接続",
"connect_web3_apps": "Web3 アプリを接続",
"connect_messaging_apps": "メッセージングアプリを接続",
"connect_crm_apps": "CRM アプリを接続",
"current_step_of_total": "ステップ {{currentStep}}/{{maxSteps}}",
"add_variable": "変数を追加",
"custom_phone_number": "カスタム電話番号",
@@ -1236,12 +1319,14 @@
"location_info": "イベントの場所",
"additional_notes_info": "予約の追加メモ",
"attendee_name_info": "予約者名",
"organizer_name_info": "主催者名",
"to": "送信先",
"workflow_turned_on_successfully": "{{workflowName}} ワークフローが正常に {{offOn}} になりました",
"download_responses": "回答をダウンロード",
"download_responses_description": "CSV 形式ですべての回答をフォームにダウンロードします。",
"download": "ダウンロード",
"download_recording": "レコーディングをダウンロード",
"recording_from_your_recent_call": "{{appName}} での最近の通話のレコーディングがダウンロードできます",
"create_your_first_form": "最初のフォームを作成",
"create_your_first_form_description": "ルーティングフォームを使用すれば、絞り込みの質問を通して適切な人物やイベントの種類へとルーティングを行うことができます。",
"create_your_first_webhook": "最初のウェブフックを作成",
@@ -1250,7 +1335,9 @@
"event_one": "イベント",
"event_other": "イベント",
"profile_team_description": "チームプロフィールの設定を管理します",
"profile_org_description": "組織のプロフィールの設定を管理します",
"members_team_description": "グループに所属しているユーザー",
"organization_description": "組織の管理者とメンバーを管理します",
"team_url": "チーム URL",
"team_members": "チームメンバー",
"more": "詳細情報",
@@ -1291,6 +1378,7 @@
"routing_forms_send_email_owner": "所有者にメールを送信",
"routing_forms_send_email_owner_description": "フォームの送信時に所有者にメールを送信します",
"add_new_form": "新しいフォームを追加",
"add_new_team_form": "新しいフォームをチームに追加",
"create_your_first_route": "最初のルートを作成",
"route_to_the_right_person": "フォームへの回答に基づいて適切なユーザーにルーティングする",
"form_description": "予約者をルーティングするフォームを作成します",
@@ -1376,6 +1464,7 @@
"new_event_type_availability": "{{eventTypeTitle}} 空き状況",
"error_editing_availability": "空き状況の編集中にエラーが発生しました",
"dont_have_permission": "このリソースへのアクセスは許可されていません。",
"saml_config": "SAML",
"saml_configuration_placeholder": "ID プロバイダーから提供されている SAML のメタデータをこちらに貼り付けてください",
"saml_email_required": "SAML ID プロバイダーを見つけるために、メールアドレスを入力してください",
"saml_sp_title": "サービスプロバイダーの詳細情報",
@@ -1394,15 +1483,19 @@
"yearly": "毎年",
"checkout": "チェックアウト",
"your_team_disbanded_successfully": "チームは正常に解散されました",
"your_org_disbanded_successfully": "組織は正常に解散されました",
"error_creating_team": "チームの作成中にエラーが発生しました",
"you": "あなた",
"resend_email": "メールを再送信",
"member_already_invited": "メンバーは既に招待されています",
"enter_email_or_username": "メールアドレスまたはユーザー名を入力してください",
"team_name_taken": "この名前は既に使用されています",
"must_enter_team_name": "チーム名の入力は必須です",
"team_url_required": "チームの URL の入力は必須です",
"url_taken": "この URL は既に使用されています",
"problem_registering_domain": "サブドメインの登録に問題がありました。もう一度やり直すか、管理者にお問い合せください",
"team_publish": "チームを公開",
"number_text_notifications": "電話番号(テキスト通知)",
"attendee_email_variable": "出席者のメールアドレス",
"attendee_email_info": "予約者のメールアドレス",
"kbar_search_placeholder": "コマンドを入力するか、検索してください...",
@@ -1425,6 +1518,8 @@
"find_the_best_person": "割り当てが可能な最適なユーザーを見つけて、チームで順番に分担します。",
"fixed_round_robin": "固定ラウンドロビン",
"add_one_fixed_attendee": "固定された出席者を 1 人追加し、複数の出席者についてラウンドロビン方式で出席スケジュールを決定します。",
"calcom_is_better_with_team": "{{appName}} はチームでの使用に適しています",
"the_calcom_team": "{{companyName}} チーム",
"add_your_team_members": "イベントの種類にチームメンバーを追加します。一括スケジューリングで全員を参加させたり、ラウンドロビンスケジューリングで最適な人を設定したりすることができます。",
"booking_limit_reached": "このイベントタイプの予約上限に達しました",
"duration_limit_reached": "このイベントの種類の期間の上限に達しました",
@@ -1443,6 +1538,7 @@
"navigate_installed_apps": "インストールされているアプリに移動",
"disabled_calendar": "他のカレンダーがインストールされている場合、新しい予約はそのカレンダーに追加されます。そうでない場合には、新しいカレンダーへと接続します。そのため、新しい予約を見逃すことはなくなります。",
"enable_apps": "アプリを有効にする",
"enable_apps_description": "ユーザーが {{appName}} と連携できるアプリを有効にします",
"purchase_license": "ライセンスを購入",
"already_have_key": "すでにキーを持っています:",
"already_have_key_suggestion": "ここに既存の CALCOM_LICENSE_KEY 環境変数をコピーしてください。",
@@ -1456,6 +1552,9 @@
"no_available_apps": "利用可能なアプリはありません",
"no_available_apps_description": "\"packages/app-store\" 直下のデプロイメントにアプリがあることをご確認ください",
"no_apps": "Cal のこのインスタンスで有効化されているアプリはありません",
"no_apps_configured": "まだアプリが設定されていません",
"enable_in_settings": "設定でアプリを有効にできます",
"please_contact_admin": "管理者に連絡してください",
"apps_settings": "アプリ設定",
"fill_this_field": "このフィールドに入力してください",
"options": "オプション",
@@ -1559,7 +1658,10 @@
"delete_sso_configuration_confirmation_description": "{{connectionType}} の構成を削除してもよろしいですか?{{connectionType}} でのログインを使用しているチームメンバーは、Cal.com にアクセスできなくなります。",
"organizer_timezone": "主催者のタイムゾーン",
"email_user_cta": "招待を表示",
"email_no_user_invite_heading": "{{appName}} の {{entity}} に参加するよう招待されました",
"email_no_user_invite_subheading": "{{invitedBy}} は {{appName}} のチームに参加するようあなたを招待しました。{{appName}} は、イベント調整スケジューラーです。チームと延々とメールのやりとりをすることなくミーティングのスケジュール設定を行うことができます。",
"email_user_invite_subheading": "{{invitedBy}}から {{entity}} の「{{teamName}}」に参加するよう招待されました。{{appName}} はイベント調整スケジューラーで、{{entity}} 内で延々とメールのやりとりをすることなく、ミーティングのスケジュールを設定できます。",
"email_no_user_invite_steps_intro": "いくつかの短い手順を踏むだけで、すぐに {{entity}} とのストレスフリーなスケジュール設定をお楽しみいただけます。",
"email_no_user_step_one": "ユーザー名を選択",
"email_no_user_step_two": "カレンダーアカウントを接続",
"email_no_user_step_three": "空き状況を設定する",
@@ -1570,6 +1672,8 @@
"scheduler": "{Scheduler}",
"no_workflows": "ワークフローがありません",
"change_filter": "個人やチームのワークフローを表示するためのフィルターを変更します。",
"change_filter_common": "結果を表示するフィルターを変更します。",
"no_results_for_filter": "このフィルターの結果はありません",
"recommended_next_steps": "推奨される次のステップ",
"create_a_managed_event": "管理されたイベントの種類を作成",
"meetings_are_better_with_the_right": "ミーティングは適切なチームメンバーの参加によってより良いものになります。今すぐ彼らを招待しましょう。",
@@ -1580,7 +1684,9 @@
"no_longer_attending": "このイベントには出席しなくなりました",
"attendee_no_longer_attending_subject": "出席者は {{date}} の {{title}} には出席しなくなりました",
"attendee_no_longer_attending": "出席者はあなたのイベントに出席しなくなりました",
"attendee_no_longer_attending_subtitle": "{{name}} がキャンセルしました。これにより、この時間帯の座席が 1 つ利用可能になりました",
"create_event_on": "次のカレンダーにイベントを作成",
"create_routing_form_on": "次のことについてルーティングフォームを作成",
"default_app_link_title": "デフォルトのアプリリンクを設定",
"default_app_link_description": "デフォルトのアプリリンクを設定することで、新たに作成するすべてのイベントの種類が設定したアプリリンクを使用できるようになります。",
"organizer_default_conferencing_app": "主催者のデフォルトのアプリ",
@@ -1590,6 +1696,7 @@
"booking_questions_title": "予約の質問",
"booking_questions_description": "予約ページで尋ねる質問をカスタマイズする",
"add_a_booking_question": "質問を追加",
"identifier": "識別子",
"duplicate_email": "メールが重複しています",
"booking_with_payment_cancelled": "このイベントの支払いはもうできません",
"booking_with_payment_cancelled_already_paid": "この予約に関するお支払いの払い戻しについては、現在処理中です。",
@@ -1600,6 +1707,7 @@
"show_on_booking_page": "予約ページに表示",
"get_started_zapier_templates": "Zapier テンプレートの使用を開始する",
"team_is_unpublished": "{{team}} は公開されていません",
"team_is_unpublished_description": "この {{entity}} のリンクは現在利用できません。{{entity}} の所有者に問い合わせるか、リンクを公開するように依頼してください。",
"team_member": "チームメンバー",
"a_routing_form": "ルーティングフォーム",
"form_description_placeholder": "フォームの説明",
@@ -1629,13 +1737,16 @@
"spot_popular_event_types": "人気のあるイベントの種類を見つける",
"spot_popular_event_types_description": "どのイベントの種類が最もクリックされ、予約されているのかを確認します",
"no_responses_yet": "回答はまだありません",
"no_routes_defined": "ルーティングが定義されていません",
"this_will_be_the_placeholder": "これがプレースホルダーになります",
"error_booking_event": "イベントを予約する際にエラーが発生しました。ページを再読み込みして、もう一度お試しください",
"timeslot_missing_title": "時間帯が選択されていません",
"timeslot_missing_description": "イベントを予約するには時間帯を選択してください。",
"timeslot_missing_cta": "時間帯を選択",
"switch_monthly": "月単位の表示に切り替える",
"switch_weekly": "週単位の表示に切り替える",
"switch_multiday": "1 日単位の表示に切り替える",
"switch_columnview": "カラム表示に切り替える",
"num_locations": "{{num}} か所の場所のオプション",
"select_on_next_step": "次のステップで選択",
"this_meeting_has_not_started_yet": "このミーティングはまだ開始されていません",
@@ -1674,6 +1785,7 @@
"managed_event_dialog_title_one": "{{count}} 人のメンバーがすでに URL /{{slug}} を使用しています。置き換えますか?",
"managed_event_dialog_title_other": "{{count}} 人のメンバーがすでに URL /{{slug}} を使用しています。置き換えますか?",
"managed_event_dialog_information_one": "<strong>{{names}}</strong> がすでに URL <strong>/{{slug}}</strong> を使用しています。",
"managed_event_dialog_information_other": "<strong>{{names}}</strong>はすでに<strong>/{{slug}}</strong>の URL を使用しています。",
"managed_event_dialog_clarification": "置き換えを選択すると、通知が送られます。上書きしたくない場合には、戻って削除してください。",
"review_event_type": "イベントの種類を確認",
"looking_for_more_analytics": "詳しい分析情報をお探しですか?",
@@ -1689,12 +1801,14 @@
"least_booked_members": "最も予約数が少ないメンバー",
"events_created": "イベントが作成されました",
"events_completed": "イベントが完了しました",
"events_cancelled": "イベントがキャンセルされました",
"events_rescheduled": "イベントのスケジュールが変更されました",
"from_last_period": "最後の期間から",
"from_to_date_period": "開始: {{startDate}} 終了: {{endDate}}",
"redirect_url_warning": "リダイレクトを追加すると、予約完了ページが無効化されます。カスタム予約完了ページには、必ず \"予約が完了しました\" と記載してください。",
"event_trends": "イベントの傾向",
"clear_filters": "フィルターをクリア",
"clear": "クリア",
"hold": "保留",
"on_booking_option": "予約時に料金を徴収する",
"hold_option": "不参加費用を請求する",
@@ -1721,6 +1835,18 @@
"complete_your_booking": "予約を完了する",
"complete_your_booking_subject": "次の予約を完了する: {{date}} の {{title}}",
"confirm_your_details": "詳細を確認",
"copy_invite_link": "招待リンクをコピー",
"edit_invite_link": "リンクの設定を編集",
"invite_link_copied": "招待リンクをコピーしました",
"invite_link_deleted": "招待リンクを削除しました",
"invite_link_updated": "招待リンクの設定を保存しました",
"link_expires_after": "リンクが期限切れとなるまで、あと...",
"one_day": "1 日",
"seven_days": "7 日",
"thirty_days": "30 日",
"three_months": "3 ヶ月",
"one_year": "1 年",
"team_invite_received": "{{teamName}} に参加するよう招待されました",
"currency_string": "{{amount, currency}}",
"charge_card_dialog_body": "出席者に {{amount, currency}} を請求しようとしています。続けてもよろしいですか?",
"charge_attendee": "出席者に {{amount, currency}} を請求",
@@ -1729,6 +1855,7 @@
"email_invite_team_bulk": "{{userCount}} 人のユーザーが招待されました",
"error_collecting_card": "カードの収集中にエラーが発生しました",
"image_size_limit_exceed": "アップロードする画像のサイズは 5 MB 以下にする必要があります",
"unauthorized_workflow_error_message": "{{errorCode}}:このワークフローを有効または無効にする権限がありません",
"inline_embed": "インライン埋め込み",
"load_inline_content": "イベントの種類を他のウェブサイト内コンテンツにインラインで直接読み込みます。",
"floating_pop_up_button": "フローティングポップアップボタン",
@@ -1748,6 +1875,69 @@
"connect_google_workspace": "Google Workspace を接続",
"google_workspace_admin_tooltip": "この機能を使うには Workspace の管理者になる必要があります",
"first_event_type_webhook_description": "このイベントの種類の最初の Webhook を作成",
"install_app_on": "次にアプリをインストール",
"create_for": "作成対象",
"insights_all_org_filter": "すべて"
"setup_organization": "Organization をセットアップ",
"organization_banner_description": "チームがラウンドロビンスケジューリングや一括スケジューリングで、共有アプリ、ワークフロー、イベントの種類を作成できる環境を作成します。",
"organization_banner_title": "複数のチームを持つ組織を管理",
"set_up_your_organization": "組織をセットアップ",
"organizations_description": "組織はチームが共有するイベントの種類、アプリ、ワークフローなどを作成できる共有環境です。",
"must_enter_organization_name": "組織の名前の入力は必須です",
"must_enter_organization_admin_email": "組織のメールアドレスの入力は必須です",
"admin_email": "組織のメールアドレス",
"admin_username": "管理者のユーザー名",
"organization_name": "組織の名前",
"organization_url": "Organization の URL",
"organization_verify_header": "組織のメールアドレスを確認してください",
"organization_verify_email_body": "組織のセットアップを続行するには、以下のコードを使ってメールアドレスを確認してください。",
"additional_url_parameters": "追加の URL パラメータ",
"about_your_organization": "あなたの組織について",
"about_your_organization_description": "組織は共有するメンバー、イベントの種類、アプリ、ワークフローなどを含む複数のチームを作成できる共有環境です。",
"create_your_teams": "チームを作成",
"create_your_teams_description": "組織にチームメンバーを追加して、共同のスケジューリングを開始します",
"invite_organization_admins": "組織の管理者を招待",
"invite_organization_admins_description": "これらの管理者は組織のすべてのチームにアクセスできます。チームの管理者とメンバーは後で追加できます。",
"set_a_password": "パスワードを設定",
"set_a_password_description": "これにより、組織のメールアドレスとこのパスワードを使って、新規ユーザーアカウントが作成されます。",
"organization_logo": "Organization のロゴ",
"organization_about_description": "あなたの組織についての簡単な説明文です。あなたの組織の公開 プロフィールページに表示されます。",
"ill_do_this_later": "これは後でする",
"verify_your_email": "メールを確認",
"enter_digit_code": "{{email}} に送信した6桁のコードを入力してください",
"verify_email_organization": "組織を作成するには、メールを確認してください",
"code_provided_invalid": "提供されたコードは有効ではありません。もう一度お試しください",
"email_already_used": "メールはすでに使用されています",
"organization_admin_invited_heading": "{{orgName}} に参加するよう招待されました",
"organization_admin_invited_body": "{{orgName}} のチームに参加して、これからはスケジューリングではなくミーティングに集中しましょう!",
"duplicated_slugs_warning": "次のチームはスラッグが重複しているため作成できませんでした:{{slugs}}",
"team_names_empty": "チーム名は空欄にできません",
"team_names_repeated": "チーム名を繰り返し使用することはできません",
"user_belongs_organization": "ユーザーは組織の一員です",
"org_no_teams_yet": "この組織にはまだチームがありません",
"org_no_teams_yet_description": "管理者である場合は、必ずここに表示されるチームを作成してください。",
"set_up": "設定",
"set_up_your_profile": "プロフィールを設定",
"set_up_your_profile_description": "あなたのことを {{orgName}} 内、そして公開リンクを見る人に知ってもらいます。",
"my_profile": "プロフィール",
"my_settings": "設定",
"crm": "CRM",
"messaging": "メッセージング",
"sender_id_info": "SMS の送信者として表示される名前または番号(国によっては英数字の送信者 ID を許可しない場合があります)",
"org_admins_can_create_new_teams": "組織の管理者のみが新規チームを作成できます",
"google_new_spam_policy": "Goggleのスパムに関する新しいポリシーにより、この予約についてのメールやカレンダー通知を受け取れなくなる可能性があります。",
"resolve": "解決する",
"no_organization_slug": "この組織のチームの作成中にエラーが発生しました。URL スラッグがありません。",
"org_name": "組織の名前",
"org_url": "組織の URL",
"copy_link_org": "組織へのリンクをコピー",
"404_the_org": "組織",
"404_the_team": "チーム",
"404_claim_entity_org": "組織のサブドメインを取得",
"404_claim_entity_team": "このチームを取得して、これからはスケジュールをまとめて管理しましょう",
"insights_all_org_filter": "すべて",
"insights_team_filter": "チーム:{{teamName}}",
"insights_user_filter": "ユーザー:{{userName}}",
"insights_subtitle": "イベント全体の予約 Insights を表示",
"custom_plan": "カスタムプラン",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ この上に新しい文字列を追加 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
+189 -1
View File
@@ -13,11 +13,21 @@
"reset_password_subject": "{{appName}}: Instructies voor het opnieuw instellen van uw wachtwoord",
"verify_email_subject": "{{appName}}: Verifieer je account",
"check_your_email": "Controleer je e-mail",
"verify_email_page_body": "We hebben een e-mail naar {{email}} gestuurd. Het is belangrijk om uw e-mailadres te verifiëren om de beste bezorgbaarheid van e-mails en agenda's van {{appName}} te garanderen.",
"verify_email_banner_body": "Verifieer uw e-mailadres om de beste bezorgbaarheid van e-mails en agenda's te garanderen",
"verify_email_email_header": "Verifieer uw e-mailadres",
"verify_email_email_button": "E-mailadres verifiëren",
"verify_email_email_body": "Verifieer uw e-mailadres door op de onderstaande knop te klikken.",
"verify_email_email_link_text": "Hier is de link voor het geval u niet graag op knoppen klikt:",
"email_sent": "E-mail verzonden",
"event_declined_subject": "Afgewezen: {{title}}",
"event_cancelled_subject": "Geannuleerd: {{title}} op {{date}}",
"event_request_declined": "Uw gebeurtenisverzoek is geweigerd",
"event_request_declined_recurring": "Uw verzoek voor een terugkerende gebeurtenis is geweigerd",
"event_request_cancelled": "Uw geplande gebeurtenis is geannuleerd",
"organizer": "Organisator",
"need_to_reschedule_or_cancel": "Moet u verplaatsen of annuleren?",
"no_options_available": "Geen opties beschikbaar",
"cancellation_reason": "Reden voor annulering (optioneel)",
"cancellation_reason_placeholder": "Waarom annuleert u?",
"rejection_reason": "Reden voor weigering",
@@ -77,7 +87,9 @@
"your_meeting_has_been_booked": "Uw afspraak is geboekt",
"event_type_has_been_rescheduled_on_time_date": "Uw {{title}} is verplaatst naar {{date}}.",
"event_has_been_rescheduled": "Bijgewerkt - Uw gebeurtenis is verplaatst",
"request_reschedule_subtitle": "{{organizer}} heeft de boeking geannuleerd en u verzocht een andere tijd te kiezen.",
"request_reschedule_title_organizer": "U heeft {{attendee}} gevraagd om te verplaatsen",
"request_reschedule_subtitle_organizer": "U heeft de boeking geannuleerd en {{attendee}} moet samen met u een nieuwe boekingstijd kiezen.",
"rescheduled_event_type_subject": "Verplaatst: {{eventType}} met {{name}} op {{date}}",
"requested_to_reschedule_subject_attendee": "Actie vereist voor verplaatsing: boek een nieuwe tijd voor {{eventType}} met {{name}}",
"hi_user_name": "Hallo {{name}}",
@@ -106,6 +118,7 @@
"team_info": "Teaminformatie",
"request_another_invitation_email": "Als u {{toEmail}} liever niet als uw {{appName}} e-mail wilt gebruiken of al een {{appName}} account heeft, vraag dan een andere uitnodiging aan voor die e-mail.",
"you_have_been_invited": "U bent uitgenodigd om lid te worden van het team {{teamName}}",
"user_invited_you": "{{user}} heeft u uitgenodigd om lid te worden van het {{entity}} {{team}} op {{appName}}",
"hidden_team_member_title": "U bent verborgen in dit team",
"hidden_team_member_message": "Uw plaats is niet betaald. Upgrade naar Pro of laat de teameigenaar weten dat deze uw plaats kan betalen.",
"hidden_team_owner_message": "U heeft een Pro-account nodig om teams te gebruiken, u bent verborgen tot u upgradet.",
@@ -116,6 +129,8 @@
"team_upgrade_banner_description": "Bedankt voor het testen van ons nieuwe teamabonnement. We hebben geconstateerd dat uw team \"{{teamName}}\" moet worden geüpgraded.",
"upgrade_banner_action": "Hier upgraden",
"team_upgraded_successfully": "Uw team is geüpgraded!",
"org_upgrade_banner_description": "Bedankt voor het testen van ons organisatie-abonnement. We hebben geconstateerd dat uw organisatie \"{{teamName}}\" moet worden geüpgraded.",
"org_upgraded_successfully": "Uw organisatie is geüpgraded!",
"use_link_to_reset_password": "Gebruik de onderstaande link om uw wachtwoord te resetten",
"hey_there": "Hallo daar,",
"forgot_your_password_calcom": "Wachtwoord vergeten? - {{appName}}",
@@ -182,6 +197,7 @@
"blog": "Blog",
"blog_description": "Lees ons laatste nieuws en artikelen",
"join_our_community": "Word lid van onze community",
"join_our_discord": "Word lid van onze Discord",
"404_claim_entity_user": "Claim uw gebruikersnaam en plan evenementen",
"popular_pages": "Populaire pagina's",
"register_now": "Registreer nu",
@@ -189,6 +205,7 @@
"page_doesnt_exist": "Deze pagina bestaat niet.",
"check_spelling_mistakes_or_go_back": "Controleer op spelfouten of ga terug naar de vorige pagina.",
"404_page_not_found": "404: Deze pagina kan niet worden gevonden.",
"booker_event_not_found": "We kunnen de gebeurtenis die u probeert te boeken niet vinden.",
"getting_started": "Aan de slag",
"15min_meeting": "15 Minuten afspraak",
"30min_meeting": "30 Minuten afspraak",
@@ -224,11 +241,14 @@
"done": "Voltooid",
"all_done": "Helemaal klaar!",
"all": "Alle apps",
"yours": "Uw account",
"available_apps": "Beschikbare apps",
"check_email_reset_password": "Controleer uw e-mail. We hebben u een link gestuurd om uw wachtwoord opnieuw in te stellen.",
"finish": "Voltooien",
"organization_general_description": "Beheer de instellingen voor uw teamtaal en -tijdzone",
"few_sentences_about_yourself": "Een korte introductie over uzelf. Dit wordt weergegeven op uw persoonlijke pagina.",
"nearly_there": "Bijna klaar!",
"nearly_there_instructions": "Tot slot, een korte beschrijving van u en een foto helpt u echt boekingen te krijgen en laat iedereen weten bij wie ze zijn geboekt.",
"set_availability_instructions": "Bepaal tijdbereiken waarin u periodiek beschikbaar bent. U kunt op een later tijdstip terugkomen en hier meer van aanmaken en toewijzen aan verschillende kalenders.",
"set_availability": "Beschikbaarheid bepalen",
"continue_without_calendar": "Doorgaan zonder kalender",
@@ -284,6 +304,18 @@
"success": "Geslaagd",
"failed": "Mislukt",
"password_has_been_reset_login": "Uw wachtwoord is opnieuw ingesteld. U kunt nu inloggen met uw nieuwe wachtwoord.",
"layout": "Indeling",
"bookerlayout_default_title": "Standaardweergave",
"bookerlayout_description": "U kunt er meerdere selecteren en uw boekers kunnen van weergave wisselen.",
"bookerlayout_user_settings_title": "Boekingsindeling",
"bookerlayout_user_settings_description": "U kunt er meerdere selecteren en boekers kunnen van weergave wisselen. Dit kan per gebeurtenis worden aangepast.",
"bookerlayout_month_view": "Maand",
"bookerlayout_week_view": "Wekelijks",
"bookerlayout_column_view": "Kolom",
"bookerlayout_error_min_one_enabled": "Er moet minimaal één indeling ingeschakeld zijn.",
"bookerlayout_error_default_not_enabled": "De indeling die u als standaardweergave heeft geselecteerd, maakt geen deel uit van de ingeschakelde indelingen.",
"bookerlayout_error_unknown_layout": "De door u geselecteerde indeling is geen geldige indeling.",
"bookerlayout_override_global_settings": "U kunt dit voor al uw gebeurtenistypen beheren in <2>Instellingen/Weergave</2> of <6>overschrijven voor alleen deze gebeurtenis</6>.",
"unexpected_error_try_again": "Er is een onverwachte fout opgetreden. Probeer het opnieuw.",
"sunday_time_error": "Ongeldige tijd op zondag",
"monday_time_error": "Ongeldige tijd op maandag",
@@ -296,6 +328,7 @@
"error_end_time_next_day": "De eindtijd mag niet meer dan 24 uur later zijn",
"back_to_bookings": "Terug naar afspraken",
"free_to_pick_another_event_type": "U kunt op elk moment een andere afspraak maken.",
"cancelled": "Geannuleerd",
"cancellation_successful": "Annulering geslaagd",
"really_cancel_booking": "Weet u zeker dat u deze afspraak wilt annuleren?",
"cannot_cancel_booking": "U kunt deze afspraak niet annuleren",
@@ -304,6 +337,12 @@
"cancelling_event_recurring": "De gebeurtenis is één exemplaar van een terugkerende gebeurtenis.",
"cancelling_all_recurring": "Dit zijn alle resterende exemplaren van de terugkerende gebeurtenis.",
"error_with_status_code_occured": "Er is een fout opgetreden met de code {{status}}.",
"error_event_type_url_duplicate": "Er bestaat al een gebeurtenistype met deze URL.",
"error_event_type_unauthorized_create": "U kunt deze gebeurtenis niet maken",
"error_event_type_unauthorized_update": "U kunt deze gebeurtenis niet bewerken",
"error_workflow_unauthorized_create": "U kunt deze werkstroom niet maken",
"error_schedule_unauthorized_create": "U kunt deze planning niet maken",
"booking_already_cancelled": "Deze boeking is al geannuleerd",
"booking_already_accepted_rejected": "Deze boeking is al geaccepteerd of geweigerd",
"go_back_home": "Terug naar startpagina",
"or_go_back_home": "Of ga terug naar de startpagina",
@@ -313,10 +352,12 @@
"no_status_bookings_yet_description": "U heeft nog geen {{status}} afspraken. {{description}}",
"event_between_users": "{{eventName}} tussen {{host}} en {{attendeeName}}",
"bookings": "Afspraken",
"booking_not_found": "Boeking niet gevonden",
"bookings_description": "Bekijk geplande en voorgaande afspraken die geboekt zijn door middel van uw links.",
"upcoming_bookings": "Zodra iemand een tijd boekt zal deze hier verschijnen.",
"recurring_bookings": "Zodra iemand een terugkerende afspraak met u boekt, verschijnt die hier.",
"past_bookings": "Uw oude afspraken zullen hier verschijnen.",
"cancelled_bookings": "Uw geannuleerde boekingen worden hier weergegeven.",
"unconfirmed_bookings": "Uw niet-bevestigde afspraken zullen hier verschijnen.",
"unconfirmed_bookings_tooltip": "Niet-bevestigde boekingen",
"on": "aan",
@@ -350,15 +391,19 @@
"user_dynamic_booking_disabled": "Sommige gebruikers in de groep hebben momenteel dynamische groepsboekingen uitgeschakeld",
"allow_dynamic_booking_tooltip": "Groepsboekingslinks die dynamisch kunnen worden aangemaakt door meerdere gebruikersnamen toe te voegen met een \"+\", bijvoorbeeld: \"{{appName}}/bailey+peer",
"allow_dynamic_booking": "Sta deelnemers toe om u te boeken via dynamische groepsboekingen",
"dynamic_booking": "Dynamische groepslinks",
"email": "E-mailadres",
"email_placeholder": "jjansen@voorbeeld.nl",
"full_name": "Volledige naam",
"browse_api_documentation": "Bekijk onze API-documentatie",
"leverage_our_api": "Gebruik onze API voor volledige controle en aanpasbaarheid.",
"create_webhook": "Webhook maken",
"booking_cancelled": "Boeking geannuleerd",
"booking_rescheduled": "Afspraak verplaatst",
"recording_ready": "Opnamedownloadlink gereed",
"booking_created": "Boeking aangemaakt",
"booking_rejected": "Boeking geweigerd",
"booking_requested": "Boeking aangevraagd",
"meeting_ended": "Vergadering beëindigd",
"form_submitted": "Formulier verzonden",
"event_triggers": "Webhook activaties",
@@ -368,6 +413,8 @@
"team_webhooks": "Teamwebhooks",
"create_new_webhook_to_account": "Maak een nieuwe webhook aan voor uw account",
"new_webhook": "Maak een Webhook",
"receive_cal_meeting_data": "Ontvang {{appName}}-afspraakgegevens in realtime via een opgegeven URL wanneer een gebeurtenis wordt gepland of geannuleerd.",
"receive_cal_event_meeting_data": "Ontvang {{appName}}-afspraakgegevens in realtime via een opgegeven URL wanneer een gebeurtenis wordt gepland of geannuleerd.",
"responsive_fullscreen_iframe": "Responsieve iframe",
"loading": "Laden...",
"deleting": "Verwijderen...",
@@ -430,6 +477,7 @@
"max_limit_allowed_hint": "Moet {{limit}}} of minder tekens lang zijn",
"invalid_password_hint": "Het wachtwoord moet minimaal {{passwordLength}} tekens lang zijn, minimaal 1 cijfer bevatten en bestaan uit een mix van hoofd- en kleine letters",
"incorrect_password": "Uw wachtwoord is incorrect.",
"incorrect_email_password": "E-mailadres of wachtwoord is onjuist.",
"use_setting": "Instelling gebruiken",
"am_pm": "am/pm",
"time_options": "Tijd, datum en tijdzone instellen",
@@ -457,6 +505,7 @@
"additional_guests": "Gasten toevoegen",
"your_name": "Uw naam",
"your_full_name": "Uw volledige naam",
"no_name": "Geen naam",
"email_address": "E-mail adres",
"enter_valid_email": "Voer een geldig e-mailadres in",
"location": "Locatie",
@@ -500,10 +549,13 @@
"your_team_updated_successfully": "Uw team is succesvol bijgewerkt.",
"about": "Introductie",
"team_description": "Een paar zinnen over uw team. Dit is zichtbaar op uw teampagina.",
"org_description": "Een paar zinnen over uw organisatie. Dit wordt weergegeven op op uw organisatiepagina.",
"members": "Leden",
"organization_members": "Organisatieleden",
"member": "Lid",
"number_member_one": "{{count}} lid",
"number_member_other": "{{count}} leden",
"number_selected": "{{count}} geselecteerd",
"owner": "Eigenaar",
"admin": "Beheerder",
"administrator_user": "Beheerdersgebruiker",
@@ -534,6 +586,8 @@
"confirm_all": "Alles bevestigen",
"disband_team": "Team ontbinden",
"disband_team_confirmation_message": "Weet u zeker dat u dit team wilt ontbinden? Iedereen met wie u deze teampagina heeft gedeeld zal hem niet meer kunnen gebruiken om te boeken.",
"disband_org": "Organisatie ontbinden",
"disband_org_confirmation_message": "Weet u zeker dat u deze organisatie wilt ontbinden? Alle teams en leden worden verwijderd.",
"remove_member_confirmation_message": "Weet u zeker dat u dit lid uit het team wilt verwijderen?",
"confirm_disband_team": "Ja, ontbind team",
"confirm_remove_member": "Ja, verwijder lid",
@@ -608,6 +662,7 @@
"event_type_updated_successfully": "Evenement is bijgewerkt",
"event_type_deleted_successfully": "Evenement is verwijderd",
"hours": "Uren",
"people": "Mensen",
"your_email": "Uw E-mailadres",
"change_avatar": "Wijzig avatar",
"language": "Taal",
@@ -640,9 +695,11 @@
"create_new_team": "Nieuw team aanmaken",
"open_invitations": "Openstaande uitnodigingen",
"new_team": "Nieuw Team",
"create_first_team_and_invite_others": "Maak uw eerste team en nodig andere gebruikers uit om samen te werken.",
"create_team_to_get_started": "Maak een team aan om aan de slag te gaan",
"teams": "Teams",
"team": "Team",
"organization": "Organisatie",
"team_billing": "Teamfacturatie",
"team_billing_description": "Beheer de facturering voor uw team",
"upgrade_to_flexible_pro_title": "We hebben het factureren gewijzigd voor teams",
@@ -717,6 +774,7 @@
"cal_provide_huddle01_meeting_url": "{{appName}} zal een Huddle01 web3 meeting-URL meegeven in de afspraak bevestiging.",
"cal_provide_teams_meeting_url": "{{appName}} geeft een vergaderings-URL voor MS Teams. OPMERKING: MOET EEN WERK- OF SCHOOLACCOUNT HEBBEN",
"require_payment": "Betaling vereisen",
"you_need_to_add_a_name": "U moet een naam toevoegen",
"commission_per_transaction": "commissie per transactie",
"event_type_updated_successfully_description": "Uw evenement is met succes bijgewerkt.",
"hide_event_type": "Verberg evenement",
@@ -807,18 +865,25 @@
"installed_apps": "Geinstalleerde apps",
"free_to_use_apps": "Gratis",
"no_category_apps": "Geen apps voor {{category}}",
"all_apps": "Alle apps",
"no_category_apps_description_calendar": "Voeg een agenda-app toe om te controleren op conflicten om dubbele boekingen te voorkomen",
"no_category_apps_description_conferencing": "Probeer een conferentieapp toe te voegen voor videogesprekken met uw klanten",
"no_category_apps_description_payment": "Voeg een betaalapp toe om transacties tussen u en uw klanten te vergemakkelijken",
"no_category_apps_description_analytics": "Voeg een analyse-app toe aan uw boekingspagina's",
"no_category_apps_description_automation": "Voeg een automatiseringsapp toe om te gebruiken",
"no_category_apps_description_other": "Voeg een ander type app toe om allerlei soorten dingen te doen",
"no_category_apps_description_web3": "Voeg een web3-app toe aan uw boekingspagina's",
"no_category_apps_description_messaging": "Voeg een berichtenapp toe om aangepaste meldingen en herinneringen in te stellen",
"no_category_apps_description_crm": "Voeg een CRM-app toe om bij te houden met wie u heeft ontmoet",
"installed_app_calendar_description": "Stel de agenda('s) in om te controleren op conflicten om dubbele boekingen te voorkomen.",
"installed_app_payment_description": "Configureer welke betalingsverwerkingsdiensten u wilt gebruiken bij het factureren aan uw klanten.",
"installed_app_analytics_description": "Configureer welke analyse-apps moeten worden gebruikt voor uw boekingspagina's",
"installed_app_other_description": "Alle geïnstalleerde apps uit andere categorieën.",
"installed_app_conferencing_description": "Configureer welke conferentieapps moeten worden gebruikt",
"installed_app_automation_description": "Configureer welke automatiseringsapps moeten worden gebruikt",
"installed_app_web3_description": "Configureer welke web3-apps moeten worden gebruikt voor uw boekingspagina's",
"installed_app_messaging_description": "Configureer welke berichtenapps moeten worden gebruikt voor het instellen van aangepaste meldingen en herinneringen",
"installed_app_crm_description": "Configureer welke CRM-apps moeten worden gebruikt voor het bijhouden van wie u hebt ontmoet",
"analytics": "Analyse",
"empty_installed_apps_headline": "Geen apps geïnstalleerd",
"empty_installed_apps_description": "Met apps kunt u uw workflow en uw planning aanzienlijk verbeteren.",
@@ -844,6 +909,7 @@
"create_events_on": "Maak gebeurtenissen aan in de",
"enterprise_license": "Dit is een bedrijfsfunctie",
"enterprise_license_description": "Om deze functie in te schakelen, krijgt u een implementatiesleutel op de {{consoleUrl}}-console en voegt u deze toe aan uw .env als CALCOM_LICENSE_KEY. Als uw team al een licentie heeft, neem dan contact op met {{supportMail}} voor hulp.",
"enterprise_license_development": "U kunt deze functie in ontwikkelingsmodus testen. Voor productiegebruik moet een beheerder naar <2>/auth/setup</2> gaan om een licentiesleutel in te voeren.",
"missing_license": "Ontbrekende licentie",
"signup_requires": "Commerciële licentie vereist",
"signup_requires_description": "{{companyName}} biedt momenteel geen gratis opensourceversie van de registratiepagina aan. Om volledige toegang te krijgen tot de registratieonderdelen moet u een commerciële licentie verkrijgen. Voor persoonlijk gebruik raden we aan om accounts aan te maken op het Prisma Data Platform of een andere Postgres-interface.",
@@ -913,6 +979,7 @@
"confirm_delete_api_key": "Deze API-sleutel intrekken",
"revoke_api_key": "API-sleutel intrekken",
"api_key_copied": "API-sleutel gekopieerd!",
"api_key_expires_on": "De API-sleutel verloopt op",
"delete_api_key_confirm_title": "Deze API-sleutel permanent van uw account verwijderen?",
"copy": "Kopiëren",
"expire_date": "Verloopdatum",
@@ -935,6 +1002,9 @@
"user_impersonation_heading": "Imitatie van gebruiker",
"user_impersonation_description": "Hiermee kan ons ondersteuningsteam tijdelijk als u inloggen zodat we eventuele problemen die u aan ons meldt snel op kunnen lossen.",
"team_impersonation_description": "Hiermee kunnen uw teamleden zich tijdelijk aanmelden als u.",
"make_team_private": "Team privé maken",
"make_team_private_description": "Uw teamleden kunnen geen andere teamleden zien wanneer dit ingeschakeld is.",
"you_cannot_see_team_members": "U kunt niet alle teamleden van een privéteam zien.",
"allow_booker_to_select_duration": "Booker toestaan om een duur te selecteren",
"impersonate_user_tip": "Alle gebruik van deze functie wordt gecontroleerd.",
"impersonating_user_warning": "Gebruikersnaam \"{{user}}\" wordt geïmiteerd.",
@@ -1002,16 +1072,21 @@
"event_location": "Locatie gebeurtenis",
"reschedule_optional": "Reden voor verplaatsen (optioneel)",
"reschedule_placeholder": "Informeer anderen waarom u het moet verplaatsen",
"event_cancelled": "Deze gebeurtenis is geannuleerd",
"emailed_information_about_cancelled_event": "We hebben u en de andere deelnemers een e-mail gestuurd om hen te informeren.",
"this_input_will_shown_booking_this_event": "Deze invoer wordt getoond tijdens het boeken van dit evenement",
"meeting_url_in_conformation_email": "De vergader-URL wordt vermeld in de bevestigings-e-mail",
"url_start_with_https": "URL moet beginnen met http:// of https://",
"number_provided": "Telefoonnummer wordt verstrekt",
"before_event_trigger": "voordat de gebeurtenis begint",
"event_cancelled_trigger": "wanneer de gebeurtenis is geannuleerd",
"new_event_trigger": "wanneer een nieuwe gebeurtenis is geboekt",
"email_host_action": "e-mail naar organisator versturen",
"email_attendee_action": "e-mail naar deelnemers versturen",
"sms_attendee_action": "Sms naar deelnemer versturen",
"sms_number_action": "sms naar een specifiek nummer sturen",
"whatsapp_number_action": "WhatsApp-bericht naar een specifiek nummer versturen",
"whatsapp_attendee_action": "WhatsApp-bericht naar deelnemer versturen",
"workflows": "Werkstromen",
"new_workflow_btn": "Nieuwe werkstroom",
"add_new_workflow": "Een nieuwe werkstroom toevoegen",
@@ -1075,6 +1150,8 @@
"choose_template": "Kies een sjabloon",
"custom": "Aangepast",
"reminder": "Herinnering",
"rescheduled": "Opnieuw gepland",
"completed": "Voltooid",
"reminder_email": "Herinnering: {{eventType}} met {{name}} op {{date}}",
"not_triggering_existing_bookings": "Wordt niet geactiveerd voor bestaande boekingen, omdat de gebruiker om zijn/haar telefoonnummer gevraagd wordt bij het boeken van de gebeurtenis.",
"minute_one": "{{count}} minuut",
@@ -1172,6 +1249,7 @@
"start_of_week": "Begin van de week",
"recordings_title": "Opnames",
"recording": "Opname",
"happy_scheduling": "Veel plezier met plannen",
"select_calendars": "Selecteer de agenda's die u wilt controleren op conflicten om dubbele boekingen te voorkomen.",
"check_for_conflicts": "Controleer op conflicten",
"view_recordings": "Opnames weergeven",
@@ -1213,6 +1291,7 @@
"conferencing_description": "Beheer uw favoriete apps voor videoconferenties voor uw vergaderingen",
"add_conferencing_app": "Conferentieapp toevoegen",
"password_description": "Beheer de instellingen voor uw accountwachtwoorden",
"set_up_two_factor_authentication": "Stel uw tweestapsverificatie in",
"we_just_need_basic_info": "We hebben alleen wat basisinformatie nodig om uw profiel te kunnen configureren.",
"skip": "Overslaan",
"do_this_later": "Doe dit later",
@@ -1226,6 +1305,8 @@
"connect_analytics_apps": "Koppel analyse-apps",
"connect_other_apps": "Andere apps koppelen",
"connect_web3_apps": "Web3-apps koppelen",
"connect_messaging_apps": "Berichtenapps koppelen",
"connect_crm_apps": "CRM-apps koppelen",
"current_step_of_total": "Stap {{currentStep}} van {{maxSteps}}",
"add_variable": "Variabele toevoegen",
"custom_phone_number": "Aangepast telefoonnummer",
@@ -1238,12 +1319,14 @@
"location_info": "De locatie van de gebeurtenis",
"additional_notes_info": "De aanvullende opmerkingen bij de boeking",
"attendee_name_info": "De naam van de persoon die boekt",
"organizer_name_info": "Naam organisator",
"to": "Aan",
"workflow_turned_on_successfully": "De werkstroom {{workflowName}} is {{offOn}}",
"download_responses": "Reacties downloaden",
"download_responses_description": "Download alle reacties op uw formulier in CSV-indeling.",
"download": "Downloaden",
"download_recording": "Opname downloaden",
"recording_from_your_recent_call": "Een opname van uw recente gesprek op {{appName}} is klaar om te downloaden",
"create_your_first_form": "Maak uw eerste formulier",
"create_your_first_form_description": "Met routeringsformulieren kunt u kwalificerende vragen stellen en doorverwijzen naar de juiste persoon of het juiste type gebeurtenis.",
"create_your_first_webhook": "Maak uw eerste webhook",
@@ -1252,7 +1335,9 @@
"event_one": "gebeurtenis",
"event_other": "gebeurtenissen",
"profile_team_description": "Beheer de instellingen van uw teamprofiel",
"profile_org_description": "Beheer de instellingen van uw organisatieprofiel",
"members_team_description": "Gebruikers in de groep",
"organization_description": "Beheer de beheerders en leden in uw organisatie",
"team_url": "Team-URL",
"team_members": "Teamleden",
"more": "Meer",
@@ -1293,6 +1378,7 @@
"routing_forms_send_email_owner": "E-mail naar eigenaar versturen",
"routing_forms_send_email_owner_description": "Verstuurt een e-mail naar de eigenaar wanneer het formulier is verzonden",
"add_new_form": "Nieuw formulier toevoegen",
"add_new_team_form": "Voeg een nieuw formulier toe aan uw team",
"create_your_first_route": "Maak uw eerste route",
"route_to_the_right_person": "Route naar de juiste persoon op basis van de antwoorden op uw formulier",
"form_description": "Maak uw formulier om naar een boeker door te verwijzen",
@@ -1378,6 +1464,7 @@
"new_event_type_availability": "Beschikbaarheid {{eventTypeTitle}}",
"error_editing_availability": "Fout bij het bewerken van de beschikbaarheid",
"dont_have_permission": "U heeft geen machting voor toegang tot dit hulpmiddel.",
"saml_config": "SAML",
"saml_configuration_placeholder": "Plak de SAML-metagegevens van uw identiteitsprovider hier",
"saml_email_required": "Voer een e-mailadres in zodat we uw SAML-identiteitsprovider kunnen vinden",
"saml_sp_title": "Serviceprovidergegevens",
@@ -1396,15 +1483,19 @@
"yearly": "Jaarlijks",
"checkout": "Kassa",
"your_team_disbanded_successfully": "Uw team is ontbonden",
"your_org_disbanded_successfully": "Uw organisatie is ontbonden",
"error_creating_team": "Fout bij het aanmaken van team",
"you": "U",
"resend_email": "E-mail opnieuw versturen",
"member_already_invited": "Lid is al uitgenodigd",
"enter_email_or_username": "Voer een e-mailadres of gebruikersnaam in",
"team_name_taken": "Deze naam is al in gebruik",
"must_enter_team_name": "Moet een teamnaam invoeren",
"team_url_required": "Moet een team-URL invoeren",
"url_taken": "Deze URL is al in gebruik",
"problem_registering_domain": "Er is een probleem opgetreden bij het registreren van het subdomein, probeer het opnieuw of neem contact op met een beheerder",
"team_publish": "Team publiceren",
"number_text_notifications": "Telefoonnummer (berichtmeldingen)",
"attendee_email_variable": "E-mailadres deelnemer",
"attendee_email_info": "Het e-mailadres van de persoon die boekt",
"kbar_search_placeholder": "Typ een opdracht of zoek...",
@@ -1427,6 +1518,8 @@
"find_the_best_person": "Zoek de beste beschikbare persoon en blader door uw team.",
"fixed_round_robin": "Vaste round-robin",
"add_one_fixed_attendee": "Voeg één vaste deelnemer en round-robin toe via een aantal deelnemers.",
"calcom_is_better_with_team": "{{appName}} is beter met teams",
"the_calcom_team": "Het {{companyName}}-team",
"add_your_team_members": "Voeg uw teamleden toe aan uw gebeurtenistypes. Gebruik collectieve planning om iedereen op te nemen of zoek de meest geschikte persoon met round robin-planning.",
"booking_limit_reached": "Boekingslimiet voor dit gebeurtenistype is bereikt",
"duration_limit_reached": "Duurlimiet voor dit gebeurtenistype is bereikt",
@@ -1445,6 +1538,7 @@
"navigate_installed_apps": "Naar geïnstalleerde apps",
"disabled_calendar": "Als u een andere agenda heeft geïnstalleerd, worden nieuwe boekingen daaraan toegevoegd. Zo niet, koppel dan een nieuwe agenda zodat u geen nieuwe boekingen mist.",
"enable_apps": "Apps inschakelen",
"enable_apps_description": "Schakel apps in die gebruikers kunnen integreren met {{appName}}",
"purchase_license": "Koop een licentie",
"already_have_key": "Ik heb al een code:",
"already_have_key_suggestion": "Kopieer hier uw bestaande CALCOM_LICENSE_KEY-omgevingsvariabele.",
@@ -1458,6 +1552,9 @@
"no_available_apps": "Er zijn geen beschikbare apps",
"no_available_apps_description": "Zorg ervoor dat er apps zijn in uw implementatie onder \"packages/app-store\"",
"no_apps": "Er zijn geen apps ingeschakeld in dit exemplaar van Cal",
"no_apps_configured": "Er is nog geen app geconfigureerd",
"enable_in_settings": "U kunt apps inschakelen in de instellingen",
"please_contact_admin": "Neem contact op met uw beheerder",
"apps_settings": "Appsinstellingen",
"fill_this_field": "Vul dit veld in",
"options": "Opties",
@@ -1561,7 +1658,10 @@
"delete_sso_configuration_confirmation_description": "Weet u zeker dat u de {{connectionType}}-configuratie wilt verwijderen? Uw teamleden die {{connectionType}}-aanmelding gebruiken hebben niet langer toegang tot Cal.com.",
"organizer_timezone": "Tijdzone organisator",
"email_user_cta": "Uitnodiging weergeven",
"email_no_user_invite_heading": "U bent uitgenodigd om lid te worden van {{appName}} {{entity}}",
"email_no_user_invite_subheading": "{{invitedBy}} heeft u uitgenodigd om lid te worden van zijn team op {{appName}}. {{appName}} is de gebeurtenissenplanner die u en uw team in staat stelt vergaderingen te plannen zonder heen en weer te e-mailen.",
"email_user_invite_subheading": "{{invitedBy}} heeft u uitgenodigd om lid te worden van zijn {{entity}} '{{teamName}}' op {{appName}}. {{appName}} is de gebeurtenissenplanner die u en uw {{entity}} in staat stelt afspraken te plannen zonder heen en weer te e-mailen.",
"email_no_user_invite_steps_intro": "We doorlopen samen een paar korte stappen en in een mum van tijd kunt u genieten van een stressvrije planning met uw {{entity}}.",
"email_no_user_step_one": "Kies uw gebruikersnaam",
"email_no_user_step_two": "Koppel uw agenda-account",
"email_no_user_step_three": "Stel uw beschikbaarheid in",
@@ -1572,6 +1672,8 @@
"scheduler": "{Scheduler}",
"no_workflows": "Geen werkstromen",
"change_filter": "Wijzig het filter om uw persoonlijke en teamwerkstromen te zien.",
"change_filter_common": "Wijzig het filter om de resultaten te zien.",
"no_results_for_filter": "Geen resultaten voor het filter",
"recommended_next_steps": "Aanbevolen volgende stappen",
"create_a_managed_event": "Maak een beheerd gebeurtenistype",
"meetings_are_better_with_the_right": "Vergaderingen zijn beter met de juiste teamleden erbij. Nodig ze nu uit.",
@@ -1582,7 +1684,9 @@
"no_longer_attending": "U neemt niet langer deel aan deze gebeurtenis",
"attendee_no_longer_attending_subject": "Een deelnemer neemt niet langer deel aan {{title}} op {{date}}",
"attendee_no_longer_attending": "Een deelnemer neemt niet langer deel aan uw gebeurtenis",
"attendee_no_longer_attending_subtitle": "{{name}} heeft geannuleerd. Dit betekent dat er een plaats is vrijgekomen voor dit tijdslot",
"create_event_on": "Gebeurtenis aanmaken op",
"create_routing_form_on": "Maak routeringsformulier op",
"default_app_link_title": "Stel een standaard app-link in",
"default_app_link_description": "Door een standaard app-link in te stellen kunnen alle nieuw gemaakte gebeurtenistypes de door u ingestelde app-link gebruiken.",
"organizer_default_conferencing_app": "Standaardapp organisator",
@@ -1592,6 +1696,7 @@
"booking_questions_title": "Boekingsvragen",
"booking_questions_description": "Pas de gestelde vragen op de boekingspagina aan",
"add_a_booking_question": "Vraag toevoegen",
"identifier": "ID",
"duplicate_email": "E-mailadres dubbel",
"booking_with_payment_cancelled": "Betalen voor deze gebeurtenis is niet meer mogelijk",
"booking_with_payment_cancelled_already_paid": "Een terugbetaling voor deze boeking is onderweg.",
@@ -1602,6 +1707,7 @@
"show_on_booking_page": "Weergeven op boekingspagina",
"get_started_zapier_templates": "Aan de slag met Zapier-sjablonen",
"team_is_unpublished": "{{team}} is niet gepubliceerd",
"team_is_unpublished_description": "Deze {{entity}}-link is momenteel niet beschikbaar. Neem contact op met de {{entity}}-eigenaar of vraag hem het te publiceren.",
"team_member": "Teamlid",
"a_routing_form": "Een routeringsformulier",
"form_description_placeholder": "Formulierbeschrijving",
@@ -1631,13 +1737,16 @@
"spot_popular_event_types": "Spot populaire gebeurtenistypen",
"spot_popular_event_types_description": "Bekijk welke van uw gebeurtenistypen de meeste kliks en boekingen ontvangen",
"no_responses_yet": "Nog geen reacties",
"no_routes_defined": "Geen routes bepaald",
"this_will_be_the_placeholder": "Dit wordt de plaatshouder",
"error_booking_event": "Er is een fout opgetreden bij het boeken van de gebeurtenis, vernieuw de pagina en probeer het opnieuw",
"timeslot_missing_title": "Geen tijdslot geselecteerd",
"timeslot_missing_description": "Selecteer een tijdslot om de gebeurtenis te boeken.",
"timeslot_missing_cta": "Tijdslot selecteren",
"switch_monthly": "Overschakelen naar maandelijkse weergave",
"switch_weekly": "Overschakelen naar wekelijkse weergave",
"switch_multiday": "Overschakelen naar dagelijkse weergave",
"switch_columnview": "Overschakelen naar kolomweergave",
"num_locations": "{{num}} locatieopties",
"select_on_next_step": "Selecteer bij de volgende stap",
"this_meeting_has_not_started_yet": "Deze vergadering is nog niet begonnen",
@@ -1676,6 +1785,7 @@
"managed_event_dialog_title_one": "De URL /{{slug}} bestaat al voor {{count}} lid. Wilt u deze vervangen?",
"managed_event_dialog_title_other": "De URL /{{slug}} bestaat al voor {{count}} leden. Wilt u deze vervangen?",
"managed_event_dialog_information_one": "<strong>{{names}}</strong> gebruikt de URL <strong>/{{slug}}</strong> al.",
"managed_event_dialog_information_other": "<strong>{{names}}</strong> gebruiken de URL <strong>/{{slug}}</strong> al.",
"managed_event_dialog_clarification": "Als u ervoor kiest om de URL te vervangen, informeren wij de leden daarover. Ga terug en verwijder ze als u de URL niet wilt overschrijven.",
"review_event_type": "Gebeurtenistype bekijken",
"looking_for_more_analytics": "Op zoek naar meer analyses?",
@@ -1691,12 +1801,14 @@
"least_booked_members": "Minst geboekte leden",
"events_created": "Gemaakte gebeurtenissen",
"events_completed": "Voltooide gebeurtenissen",
"events_cancelled": "Geannuleerde gebeurtenissen",
"events_rescheduled": "Verplaatste gebeurtenissen",
"from_last_period": "van afgelopen periode",
"from_to_date_period": "Van: {{startDate}} Tot: {{endDate}}",
"redirect_url_warning": "Als u een omleiding toevoegt, wordt de succespagina uitgeschakeld. Zorg ervoor dat u op uw aangepaste succespagina \"Boeking bevestigd\" vermeldt.",
"event_trends": "Gebeurtenistrends",
"clear_filters": "Filters wissen",
"clear": "Wissen",
"hold": "Vasthouden",
"on_booking_option": "Betaling ontvangen bij boeken",
"hold_option": "Afwezigheidsvergoeding in rekening brengen",
@@ -1723,6 +1835,18 @@
"complete_your_booking": "Voltooi uw boeking",
"complete_your_booking_subject": "Voltooi uw boeking: {{title}} op {{date}}",
"confirm_your_details": "Bevestig uw gegevens",
"copy_invite_link": "Uitnodigingslink kopiëren",
"edit_invite_link": "Linkinstellingen bewerken",
"invite_link_copied": "Uitnodigingslink gekopieerd",
"invite_link_deleted": "Uitnodigingslink verwijderd",
"invite_link_updated": "Uitnodigingslinkinstellingen opgeslagen",
"link_expires_after": "Links verlopen na...",
"one_day": "1 dag",
"seven_days": "7 dagen",
"thirty_days": "30 dagen",
"three_months": "3 maanden",
"one_year": "1 jaar",
"team_invite_received": "U bent uitgenodigd om lid te worden van {{teamName}}",
"currency_string": "{{amount, currency}}",
"charge_card_dialog_body": "U staat op het punt om de deelnemer {{amount, currency}} in rekening te brengen. Weet u zeker dat u wilt doorgaan?",
"charge_attendee": "Deelnemer {{amount, currency}} in rekening brengen",
@@ -1731,6 +1855,7 @@
"email_invite_team_bulk": "{{userCount}} gebruikers zijn uitgenodigd",
"error_collecting_card": "Fout bij incasseren van kaart",
"image_size_limit_exceed": "De geüploade afbeelding mag niet groter zijn dan 5 MB",
"unauthorized_workflow_error_message": "{{errorCode}}: u bent niet geautoriseerd om deze werkstroom in of uit te schakelen",
"inline_embed": "Inline insluiting",
"load_inline_content": "Laadt uw gebeurtenistype rechtstreeks inline met uw andere websitecontent.",
"floating_pop_up_button": "Zwevende pop-upknop",
@@ -1750,6 +1875,69 @@
"connect_google_workspace": "Google Workspace koppelen",
"google_workspace_admin_tooltip": "U moet een Google Workspace-beheerder zijn om deze functie te gebruiken",
"first_event_type_webhook_description": "Maak uw eerste webhook voor dit gebeurtenistype",
"install_app_on": "Installeer app op",
"create_for": "Maken voor",
"insights_all_org_filter": "Alle apps"
"setup_organization": "Stel een organisatie in",
"organization_banner_description": "Maak een omgeving waarin uw teams gedeelde apps, werkstromen en gebeurtenistypen kunnen maken met round-robin en collectieve planning.",
"organization_banner_title": "Beheer organisaties met meerdere teams",
"set_up_your_organization": "Stel uw organisatie in",
"organizations_description": "Organisaties zijn gedeelde omgevingen waar teams gedeelde gebeurtenistypen, apps, werkstromen en meer kunnen maken.",
"must_enter_organization_name": "U moet een organisatienaam invoeren",
"must_enter_organization_admin_email": "U moet het e-mailadres van uw organisatie invoeren",
"admin_email": "E-mailadres van uw organisatie",
"admin_username": "Gebruikersnaam beheerder",
"organization_name": "Organisatienaam",
"organization_url": "Organisatie-URL",
"organization_verify_header": "Verifieer het e-mailadres van uw organisatie",
"organization_verify_email_body": "Gebruik de onderstaande code om uw e-mailadres te verifiëren en door te gaan met het instellen van uw organisatie.",
"additional_url_parameters": "Extra URL-parameters",
"about_your_organization": "Over uw organisatie",
"about_your_organization_description": "Organisaties zijn gedeelde omgevingen waar u meerdere teams met gedeelde gebeurtenistypen, apps, werkstromen en meer kunt maken.",
"create_your_teams": "Maak uw teams",
"create_your_teams_description": "Begin met samen plannen door uw teamleden aan uw organisatie toe te voegen",
"invite_organization_admins": "Nodig uw organisatiebeheerders uit",
"invite_organization_admins_description": "Deze beheerders hebben toegang tot alle teams in uw organisatie. U kunt later teambeheerders en -leden toevoegen.",
"set_a_password": "Stel een wachtwoord in",
"set_a_password_description": "Hierdoor wordt een nieuwe gebruikersaccount gemaakt met het e-mailadres van uw organisatie en dit wachtwoord.",
"organization_logo": "Organisatielogo",
"organization_about_description": "Een paar zinnen over uw organisatie. Dit wordt weergegeven op de openbare profielpagina van uw organisatie.",
"ill_do_this_later": "Ik doe dit later",
"verify_your_email": "Verifieer uw e-mailadres",
"enter_digit_code": "Voer de 6-cijferige code in die we naar {{email}} hebben gestuurd",
"verify_email_organization": "Verifieer uw e-mailadres om een organisatie te maken",
"code_provided_invalid": "De opgegeven code is ongeldig, probeer het opnieuw",
"email_already_used": "Het e-mailadres wordt al gebruikt",
"organization_admin_invited_heading": "U bent uitgenodigd om lid te worden van {{orgName}}",
"organization_admin_invited_body": "Word lid van uw team bij {{orgName}} en begin u met het richten op afspraken, niet op het maken van afspraken!",
"duplicated_slugs_warning": "De volgende teams konden niet worden gemaakt vanwege dubbele slugs: {{slugs}}",
"team_names_empty": "Teamnamen mogen niet leeg zijn",
"team_names_repeated": "Teamnamen mogen niet herhaald worden",
"user_belongs_organization": "Gebruiker behoort tot een organisatie",
"org_no_teams_yet": "Deze organisatie heeft nog geen teams",
"org_no_teams_yet_description": "Als u een beheerder bent, zorg er dan voor dat u teams maakt die hier weergegeven worden.",
"set_up": "Instellen",
"set_up_your_profile": "Stel uw profiel in",
"set_up_your_profile_description": "Laat mensen weten wie u bent binnen {{orgName}} en wanneer ze uw openbare link gebruiken.",
"my_profile": "Mijn profiel",
"my_settings": "Mijn instellingen",
"crm": "CRM",
"messaging": "Berichten",
"sender_id_info": "Naam of nummer weergegeven als de afzender van een sms (sommige landen staan geen alfanumerieke afzender-ID's toe)",
"org_admins_can_create_new_teams": "Alleen de beheerder van uw organisatie kan nieuwe teams maken",
"google_new_spam_policy": "Het nieuwe spambeleid van Google kan ervoor zorgen dat u geen e-mail- en agendameldingen over deze boeking ontvangt.",
"resolve": "Oplossen",
"no_organization_slug": "Er is een fout opgetreden bij het maken van teams voor deze organisatie. Ontbrekende URL-slug.",
"org_name": "Organisatienaam",
"org_url": "Organisatie-URL",
"copy_link_org": "Kopieer link naar organisatie",
"404_the_org": "De organisatie",
"404_the_team": "Het team",
"404_claim_entity_org": "Claim uw subdomein voor uw organisatie",
"404_claim_entity_team": "Claim dit team en begin met het gezamenlijk beheren van planningen",
"insights_all_org_filter": "Alle apps",
"insights_team_filter": "Team: {{teamName}}",
"insights_user_filter": "Gebruiker: {{userName}}",
"insights_subtitle": "Bekijk boekingsinsights voor al uw gebeurtenissen",
"custom_plan": "Aangepast abonnement",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Voeg uw nieuwe strings hierboven toe ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
+189 -6
View File
@@ -11,14 +11,23 @@
"calcom_explained_new_user": "Dokończ konfigurację konta aplikacji {{appName}}! Od rozwiązania wszystkich Twoich problemów z układaniem grafików dzieli Cię tylko kilka kroków.",
"have_any_questions": "Masz pytania? Jesteśmy tutaj, aby pomóc.",
"reset_password_subject": "{{appName}}: Instrukcje resetowania hasła",
"verify_email_subject": "{{appName}}: Zweryfikuj swoje konto",
"check_your_email": "Sprawdź swój e-mail",
"verify_email_email_button": "Potwierdź e-mail",
"verify_email_subject": "{{appName}}: zweryfikuj swoje konto",
"check_your_email": "Sprawdź adres e-mail",
"verify_email_page_body": "Wysłaliśmy wiadomość e-mail na adres {{email}}. Weryfikacja adresu e-mail jest bardzo ważna, ponieważ umożliwia upewnienie się, czy kalendarz i wiadomości e-mail z aplikacji {{appName}} będą działać prawidłowo.",
"verify_email_banner_body": "Potwierdź adres email, aby upewnić się, że wiadomości e-mail i powiadomienia z kalendarza będą do Ciebie docierać.",
"verify_email_email_header": "Zweryfikuj adres e-mail",
"verify_email_email_button": "Potwierdź adres e-mail",
"verify_email_email_body": "Potwierdź adres e-mail poprzez kliknięcie poniższego przycisku.",
"verify_email_email_link_text": "Oto link, jeśli nie lubisz klikać przycisków:",
"email_sent": "Wysłano wiadomość e-mail",
"event_declined_subject": "Odrzucono: {{title}} w dniu {{date}}",
"event_cancelled_subject": "Anulowano: {{title}}, {{date}}",
"event_request_declined": "Twoja prośba o wydarzenie została odrzucona",
"event_request_declined_recurring": "Twoja prośba o wydarzenie cykliczne została odrzucona",
"event_request_cancelled": "Twoje zaplanowane wydarzenie zostało anulowane",
"organizer": "Organizator",
"need_to_reschedule_or_cancel": "Potrzebujesz zmienić harmonogram lub anulować?",
"no_options_available": "Brak dostępnych opcji",
"cancellation_reason": "Powód anulowania (opcjonalnie)",
"cancellation_reason_placeholder": "Dlaczego anulujesz?",
"rejection_reason": "Powód odrzucenia",
@@ -78,7 +87,9 @@
"your_meeting_has_been_booked": "Twoje spotkanie zostało zarezerwowane",
"event_type_has_been_rescheduled_on_time_date": "Twój {{title}} został przełożony na {{date}}.",
"event_has_been_rescheduled": "Zaktualizowano - Twoje wydarzenie zostało przełożone",
"request_reschedule_subtitle": "Organizator ({{organizer}}) anulował rezerwację i prosi Cię o wybranie innego terminu.",
"request_reschedule_title_organizer": "{{attendee}} poproszono o zmianę harmonogramu",
"request_reschedule_subtitle_organizer": "Rezerwacja została przez Ciebie anulowana i uczestnik ({{attendee}}) musi wybrać z nowy termin rezerwacji u Ciebie.",
"rescheduled_event_type_subject": "Wysłano prośbę o zmianę terminu: {{eventType}} o nazwie {{name}}, z {{date}}",
"requested_to_reschedule_subject_attendee": "Działanie wymagało zmiany harmonogramu: Zarezerwuj nową godzinę na wydarzenie {{eventType}} z {{name}}",
"hi_user_name": "Cześć {{name}}",
@@ -107,6 +118,7 @@
"team_info": "Informacje o zespole",
"request_another_invitation_email": "Jeśli wolisz nie używać {{toEmail}} jako adresu e-mail {{appName}} lub masz już konto {{appName}}, poproś o inne zaproszenie na ten e-mail.",
"you_have_been_invited": "Zostałeś zaproszony do dołączenia do zespołu {{teamName}}",
"user_invited_you": "Użytkownik {{user}} zaprosił Cię do dołączenia do zespołu {{team}} ({{entity}}) w aplikacji {{appName}}.",
"hidden_team_member_title": "Jesteś ukryty w tym zespole",
"hidden_team_member_message": "Twoje miejsce nie jest opłacone, przejdź na wersję Pro lub poinformuj właściciela zespołu o tym, że może zapłacić za Twoje miejsce.",
"hidden_team_owner_message": "Potrzebujesz konta pro aby korzystać z zespołów, jesteś ukryty do czasu ulepszenia.",
@@ -117,6 +129,8 @@
"team_upgrade_banner_description": "Dziękujemy za wypróbowanie naszego nowego planu zespołowego. Zauważyliśmy, że Twój zespół „{{teamName}}” trzeba ulepszyć.",
"upgrade_banner_action": "Ulepsz tutaj",
"team_upgraded_successfully": "Twój zespół został pomyślnie zaktualizowany!",
"org_upgrade_banner_description": "Dziękujemy za wypróbowanie naszego planu Organization. Zauważyliśmy, że Twój zespół „{{teamName}}” z planu Organization trzeba ulepszyć.",
"org_upgraded_successfully": "Twój zespół z planu Organization został pomyślnie zaktualizowany!",
"use_link_to_reset_password": "Użyj poniższego linku, aby zresetować swoje hasło",
"hey_there": "Cześć,",
"forgot_your_password_calcom": "Nie pamiętasz swojego hasła? - {{appName}}",
@@ -183,6 +197,7 @@
"blog": "Blog",
"blog_description": "Przeczytaj nasze najnowsze wiadomości i artykuły",
"join_our_community": "Dołącz do naszej społeczności",
"join_our_discord": "Dołącz do naszego Discorda",
"404_claim_entity_user": "Odbierz swoją nazwę użytkownika i harmonogram wydarzeń",
"popular_pages": "Popularne strony",
"register_now": "Załóż konto teraz",
@@ -190,6 +205,7 @@
"page_doesnt_exist": "Ta strona nie istnieje.",
"check_spelling_mistakes_or_go_back": "Sprawdź błędy pisowni lub wróć do poprzedniej strony.",
"404_page_not_found": "404: Nie znaleziono tej strony.",
"booker_event_not_found": "Nie mogliśmy znaleźć wydarzenia, które próbujesz zarezerwować.",
"getting_started": "Pierwsze kroki",
"15min_meeting": "15 minutowe spotkanie",
"30min_meeting": "30 minutowe spotkanie",
@@ -225,11 +241,14 @@
"done": "Gotowe",
"all_done": "Wszystko gotowe!",
"all": "Wszystkie",
"yours": "Twoje konto",
"available_apps": "Dostępne aplikacje",
"check_email_reset_password": "Sprawdź swój e-mail. Wysłaliśmy Ci link do zresetowania hasła.",
"finish": "Ukończ",
"organization_general_description": "Zarządzaj ustawieniami języka i strefy czasowej Twojego zespołu.",
"few_sentences_about_yourself": "Kilka zdań o Tobie. To pojawi się na Twojej osobistej stronie URL.",
"nearly_there": "Prawie gotowe!",
"nearly_there_instructions": "Ostatnia wskazówka – krótka informacja na Twój temat i zdjęcie naprawdę pomogą Ci zwiększyć liczbę rezerwacji i ułatwią rezerwującym upewnienie się, z kim umawiają spotkanie.",
"set_availability_instructions": "Określ zakresy czasu, kiedy jesteś generalnie dostępny/a. Możesz utworzyć ich więcej później i przypisać je do różnych kalendarzy.",
"set_availability": "Ustaw swoją dostępność",
"continue_without_calendar": "Kontynuuj bez kalendarza",
@@ -285,7 +304,18 @@
"success": "Sukces",
"failed": "Niepowodzenie",
"password_has_been_reset_login": "Twoje hasło zostało zresetowane. Możesz teraz zalogować się przy użyciu nowo utworzonego hasła.",
"layout": "Układ",
"bookerlayout_default_title": "Widok domyślny",
"bookerlayout_description": "Możesz wybrać kilka układów, a osoby rezerwujące będą mogły zmieniać widoki.",
"bookerlayout_user_settings_title": "Układ rezerwacji",
"bookerlayout_user_settings_description": "Możesz wybrać kilka układów, a osoby rezerwujące będą mogły zmieniać widoki. To ustawienie można zmieniać w poszczególnych wydarzeniach.",
"bookerlayout_month_view": "Miesięczny",
"bookerlayout_week_view": "Tygodniowy",
"bookerlayout_column_view": "Kolumna",
"bookerlayout_error_min_one_enabled": "Trzeba włączyć co najmniej jeden układ.",
"bookerlayout_error_default_not_enabled": "Układ wybrany jako widok domyślny nie jest częścią włączonych układów.",
"bookerlayout_error_unknown_layout": "Wybrany układ nie jest prawidłowym układem.",
"bookerlayout_override_global_settings": "Możesz zarządzać tym ustawieniem w odniesieniu do wszystkich typów wydarzeń w sekcji <2>Ustawienia / Wygląd</2> lub <6>zastąpić je tylko w przypadku tego wydarzenia</6>.",
"unexpected_error_try_again": "Wystąpił nieoczekiwany błąd. Spróbuj ponownie.",
"sunday_time_error": "Nieprawidłowy czas na niedzielę",
"monday_time_error": "Nieprawidłowy czas na poniedziałek",
@@ -298,6 +328,7 @@
"error_end_time_next_day": "Czas zakończenia nie może być dłuższy niż 24 godziny",
"back_to_bookings": "Powrót do rezerwacji",
"free_to_pick_another_event_type": "Możesz wybrać inne wydarzenie w dowolnym momencie.",
"cancelled": "Anulowano",
"cancellation_successful": "Anulowano pomyślnie",
"really_cancel_booking": "Czy na pewno anulować Twoją rezerwację?",
"cannot_cancel_booking": "Nie możesz anulować tej rezerwacji",
@@ -306,6 +337,12 @@
"cancelling_event_recurring": "Wydarzenie jest jednym z wystąpień wydarzenia cyklicznego.",
"cancelling_all_recurring": "Są to wszystkie pozostałe wystąpienia wydarzenia cyklicznego.",
"error_with_status_code_occured": "Wystąpił błąd z kodem statusu {{status}}.",
"error_event_type_url_duplicate": "Typ wydarzenia o podanym adresie URL już istnieje.",
"error_event_type_unauthorized_create": "Nie możesz utworzyć tego wydarzenia.",
"error_event_type_unauthorized_update": "Nie możesz edytować tego wydarzenia.",
"error_workflow_unauthorized_create": "Nie możesz utworzyć tego przepływu pracy.",
"error_schedule_unauthorized_create": "Nie możesz utworzyć tego harmonogramu.",
"booking_already_cancelled": "Ta rezerwacja została już anulowana.",
"booking_already_accepted_rejected": "Ta rezerwacja została już zaakceptowana lub odrzucona",
"go_back_home": "Wróć do strony głównej",
"or_go_back_home": "Lub wróć do strony głównej",
@@ -315,7 +352,7 @@
"no_status_bookings_yet_description": "Nie masz {{status}} rezerwacji. {{description}}",
"event_between_users": "{{eventName}} między {{host}} a {{attendeeName}}",
"bookings": "Rezerwacje",
"booking_not_found": "Rezerwacja nie została znaleziona",
"booking_not_found": "Rezerwacja nie została znaleziona.",
"bookings_description": "Zobacz nadchodzące i przeszłe wydarzenia zarezerwowane za pomocą linków tego wydarzenia.",
"upcoming_bookings": "Jak tylko ktoś zarezerwuje czas z Tobą, to pojawi się tutaj.",
"recurring_bookings": "Jak tylko ktoś zarezerwuje cykliczne spotkanie z Tobą, to pojawi się ono tutaj.",
@@ -354,16 +391,19 @@
"user_dynamic_booking_disabled": "Niektórzy użytkownicy w grupie obecnie wyłączyli dynamiczne rezerwacje grupowe",
"allow_dynamic_booking_tooltip": "Grupuj linki do rezerwacji, które mogą być tworzone dynamicznie przez dodanie wielu nazw użytkowników z '+'. przykład: '{{appName}}/bailey+peer'",
"allow_dynamic_booking": "Pozwól uczestnikom rezerwować cię przez dynamiczne rezerwacje grupowe",
"dynamic_booking": "Dynamiczne linki grup",
"email": "E-mail",
"email_placeholder": "jkowalski@przyklad.com",
"full_name": "Imię i nazwisko",
"browse_api_documentation": "Przeglądaj naszą dokumentację API",
"leverage_our_api": "Wykorzystaj nasze API dla pełnej kontroli i dopasowania do swoich potrzeb.",
"create_webhook": "Utwórz Webhook",
"booking_cancelled": "Rezerwacja została anulowana",
"booking_cancelled": "Anulowano rezerwację",
"booking_rescheduled": "Rezerwacja Przełożona",
"recording_ready": "Link do pobrania nagrania gotowy",
"booking_created": "Rezerwacja Utworzona",
"booking_rejected": "Odrzucono rezerwację",
"booking_requested": "Poproszono o rezerwację",
"meeting_ended": "Spotkanie zakończone",
"form_submitted": "Przesłano formularz",
"event_triggers": "Wyzwalacze Zdarzeń",
@@ -373,6 +413,8 @@
"team_webhooks": "Webhooki zespołu",
"create_new_webhook_to_account": "Utwórz nowy webhook do swojego konta",
"new_webhook": "Nowy Webhook",
"receive_cal_meeting_data": "Możesz otrzymywać dane ze spotkania w aplikacji {{appName}} pod określonym adresem URL, w czasie rzeczywistym, gdy wydarzenie jest zaplanowane lub anulowane.",
"receive_cal_event_meeting_data": "Otrzymuj dane ze spotkania {{appName}} pod określonym adresem URL, w czasie rzeczywistym, gdy wydarzenie jest zaplanowane lub anulowane.",
"responsive_fullscreen_iframe": "Responsywny pełnoekranowy iframe",
"loading": "Wczytywanie...",
"deleting": "Usuwanie...",
@@ -435,6 +477,7 @@
"max_limit_allowed_hint": "Może składać się z maksymalnie {{limit}} znaków",
"invalid_password_hint": "Hasło musi składać się z co najmniej {{passwordLength}} znaków, zawierać co najmniej jedną cyfrę oraz kombinację wielkich i małych liter",
"incorrect_password": "Hasło jest nieprawidłowe.",
"incorrect_email_password": "Nieprawidłowy adres e-mail lub hasło.",
"use_setting": "Użyj ustawień",
"am_pm": "rano/po południu",
"time_options": "Opcje czasu",
@@ -462,6 +505,7 @@
"additional_guests": "Dodaj gości",
"your_name": "Twoje imię",
"your_full_name": "Twoje imię i nazwisko",
"no_name": "Brak nazwy",
"email_address": "Adres e-mail",
"enter_valid_email": "Wprowadź prawidłowy adres e-mail",
"location": "Lokalizacja",
@@ -505,10 +549,13 @@
"your_team_updated_successfully": "Twój zespół został pomyślnie zaktualizowany.",
"about": "O aplikacji",
"team_description": "Kilka zdań na temat Twojego zespołu. Będą wyświetlane na stronie adresu URL Twojego zespołu.",
"org_description": "Kilka zdań na temat Twojej organizacji. Pojawią się na stronie adresu URL Twojej organizacji.",
"members": "Członkowie",
"organization_members": "Członkowie organizacji",
"member": "Członek",
"number_member_one": "{{count}} członek",
"number_member_other": "{{count}} członków",
"number_selected": "Wybrano: {{count}}",
"owner": "Właściciel",
"admin": "Administrator",
"administrator_user": "Użytkownik-administrator",
@@ -539,6 +586,8 @@
"confirm_all": "Potwierdź wszystko",
"disband_team": "Rozwiąż Zespół",
"disband_team_confirmation_message": "Czy na pewno chcesz rozwiązać ten zespół? Każdy, kto podzielił się tym linkiem zespołowym, nie będzie już mógł zarezerwować za jego użyciem.",
"disband_org": "Rozwiąż organizację",
"disband_org_confirmation_message": "Czy na pewno chcesz rozwiązać tę organizację? Wszystkie zespoły i wszyscy członkowie zostaną usunięci.",
"remove_member_confirmation_message": "Czy na pewno chcesz usunąć tego użytkownika z zespołu?",
"confirm_disband_team": "Tak, rozwiąż zespół",
"confirm_remove_member": "Tak, usuń członka",
@@ -613,6 +662,7 @@
"event_type_updated_successfully": "{{eventTypeTitle}} typ wydarzenia został pomyślnie zaktualizowany",
"event_type_deleted_successfully": "Typ wydarzenia usunięty pomyślnie",
"hours": "Godziny",
"people": "Osoby",
"your_email": "Twój e-mail",
"change_avatar": "Zmień Awatar",
"language": "Język",
@@ -645,9 +695,11 @@
"create_new_team": "Utwórz nowy zespół",
"open_invitations": "Otwórz Zaproszenia",
"new_team": "Nowy zespół",
"create_first_team_and_invite_others": "Utwórz swój pierwszy zespół i zaproś innych użytkowników do współpracy.",
"create_team_to_get_started": "Utwórz drużynę, aby rozpocząć",
"teams": "Drużyny",
"team": "Zespół",
"organization": "Organizacja",
"team_billing": "Rozliczenie zespołu",
"team_billing_description": "Zarządzaj rozliczeniami swojego zespołu",
"upgrade_to_flexible_pro_title": "Zmieniliśmy rozliczenie dla zespołów",
@@ -722,6 +774,7 @@
"cal_provide_huddle01_meeting_url": "{{appName}} zapewni URL spotkania Huddle01 Web3.",
"cal_provide_teams_meeting_url": "{{appName}} zapewni adres URL do spotkania na MS Teams. UWAGA: MOŻE POBIERAĆ RACHUNEK PRACY LUB SCHOOLU",
"require_payment": "Wymagaj płatności",
"you_need_to_add_a_name": "Musisz dodać nazwę.",
"commission_per_transaction": "prowizja za transakcję",
"event_type_updated_successfully_description": "Twój typ wydarzenia został pomyślnie zaktualizowany.",
"hide_event_type": "Ukryj typ zdarzenia",
@@ -812,18 +865,25 @@
"installed_apps": "Zainstalowane apps",
"free_to_use_apps": "Darmowe",
"no_category_apps": "Brak aplikacji z kategorii {{category}}",
"all_apps": "Wszystkie aplikacje",
"no_category_apps_description_calendar": "Dodaj aplikację kalendarza, aby wykrywać konflikty i unikać podwójnych rezerwacji",
"no_category_apps_description_conferencing": "Spróbuj dodać aplikację konferencyjną, aby nawiązywać połączenia wideo z klientami.",
"no_category_apps_description_payment": "Dodaj aplikację płatniczą, aby ułatwić transakcje z klientami.",
"no_category_apps_description_analytics": "Dodaj aplikację analityczną do stron rezerwacji",
"no_category_apps_description_automation": "Dodaj aplikację automatyzującą, która ma być używana",
"no_category_apps_description_other": "Dodaj dowolny typ aplikacji, aby uzyskać dostęp do różnych innych funkcji",
"no_category_apps_description_web3": "Dodaj aplikację web3 do stron rezerwacji",
"no_category_apps_description_messaging": "Dodaj aplikację do wysyłania wiadomości, aby skonfigurować własne powiadomienia i przypomnienia.",
"no_category_apps_description_crm": "Dodaj aplikację CRM, aby monitorować to, z kim się spotykasz.",
"installed_app_calendar_description": "Ustaw kalendarze, aby wykrywać konflikty i unikać podwójnych rezerwacji.",
"installed_app_payment_description": "Skonfiguruj usługi przetwarzania płatności, których chcesz używać do pobierania opłat od klientów.",
"installed_app_analytics_description": "Skonfiguruj, które aplikacje analityczne mają być używane na stronach rezerwacji",
"installed_app_other_description": "Wszystkie zainstalowane aplikacje z innych kategorii.",
"installed_app_conferencing_description": "Skonfiguruj, z których aplikacji konferencyjnych chcesz korzystać.",
"installed_app_automation_description": "Skonfiguruj, które aplikacje automatyzujące mają być używane",
"installed_app_web3_description": "Skonfiguruj aplikacje web3, które mają być używane na stronach rezerwacji",
"installed_app_messaging_description": "Skonfiguruj aplikacje, które będą używane do ustawiania własnych powiadomień i przypomnień.",
"installed_app_crm_description": "Skonfiguruj aplikacje CRM, za pomocą których chcesz monitorować to, z kim się spotykasz.",
"analytics": "Analityka",
"empty_installed_apps_headline": "Brak zainstalowanych aplikacji",
"empty_installed_apps_description": "Aplikacje umożliwiają znaczne usprawnienie przebiegu pracy i uproszczenie planowania.",
@@ -849,6 +909,7 @@
"create_events_on": "Utwórz wydarzenia w",
"enterprise_license": "To funkcja dla przedsiębiorstw",
"enterprise_license_description": "Aby włączyć tę funkcję, uzyskaj klucz wdrożenia na konsoli {{consoleUrl}} i dodaj go do swojego pliku .env jako CALCOM_LICENSE_KEY. Jeśli Twój zespół ma już licencję, napisz na adres {{supportMail}}, aby uzyskać pomoc.",
"enterprise_license_development": "Możesz przetestować tę funkcję w trybie deweloperskim. Aby wykorzystać ją w celach produkcyjnych, poproś administratora o wprowadzenie klucza licencyjnego w poleceniu <2>/auth/setup</2>.",
"missing_license": "Brakująca licencja",
"signup_requires": "Wymagana licencja handlowa",
"signup_requires_description": "{{companyName}} obecnie nie oferuje darmowej otwartej wersji strony rejestracji. Aby uzyskać pełny dostęp do komponentów rejestracji, musisz zdobyć licencję komercyjną. Do użytku osobistego zalecamy platformę danych Prisma lub jakikolwiek inny interfejs Postgres do tworzenia kont.",
@@ -918,6 +979,7 @@
"confirm_delete_api_key": "Unieważnij ten klucz API",
"revoke_api_key": "Unieważnij klucz API",
"api_key_copied": "Skopiowano klucz API!",
"api_key_expires_on": "Klucz API wygaśnie w dniu",
"delete_api_key_confirm_title": "Czy chcesz trwale usunąć ten klucz API ze swojego konta?",
"copy": "Kopiuj",
"expire_date": "Data wygaśnięcia",
@@ -940,6 +1002,9 @@
"user_impersonation_heading": "Podszywanie się pod użytkownika",
"user_impersonation_description": "Pozwala naszemu zespołowi pomocy na tymczasowe zalogowanie się jako użytkownik w celu szybkiego rozwiązania wszelkich zgłaszanych nam problemów.",
"team_impersonation_description": "Umożliwia właścicielom/administratorom zespołu tymczasowe zalogowanie się jako Ty.",
"make_team_private": "Ustaw zespół jako prywatny",
"make_team_private_description": "Gdy to ustawienie jest włączone, członkowie zespołu nie będą mogli zobaczyć innych osób z zespołu.",
"you_cannot_see_team_members": "Nie możesz zobaczyć wszystkich członków zespołu prywatnego.",
"allow_booker_to_select_duration": "Zezwól rezerwującemu na wybranie czasu trwania",
"impersonate_user_tip": "Wszystkie przypadki użycia tej funkcji są kontrolowane.",
"impersonating_user_warning": "Podszywanie się pod użytkownika „{{user}}”.",
@@ -1007,16 +1072,21 @@
"event_location": "Lokalizacja wydarzenia",
"reschedule_optional": "Powód przełożenia (opcjonalnie)",
"reschedule_placeholder": "Poinformuj innych o powodach przełożenia wydarzenia",
"event_cancelled": "To wydarzenie zostało anulowane.",
"emailed_information_about_cancelled_event": "Wysłaliśmy wiadomość e-mail Tobie i innym uczestnikom, aby ich o tym poinformować.",
"this_input_will_shown_booking_this_event": "To wejście zostanie wyświetlone podczas rezerwacji tego wydarzenia",
"meeting_url_in_conformation_email": "Adres URL spotkania znajduje się w wiadomości e-mail z potwierdzeniem",
"url_start_with_https": "Adres URL musi zaczynać się od http:// lub https://",
"number_provided": "Numer telefonu zostanie podany.",
"before_event_trigger": "przed rozpoczęciem wydarzenia",
"event_cancelled_trigger": "gdy wydarzenie zostanie anulowane",
"new_event_trigger": "gdy nowe wydarzenie zostanie zarezerwowane",
"email_host_action": "wyślij wiadomość e-mail do hosta",
"email_attendee_action": "wyślij wiadomość e-mail do uczestników",
"sms_attendee_action": "Wyślij wiadomość SMS do uczestnika",
"sms_number_action": "wyślij wiadomość SMS na określony numer",
"whatsapp_number_action": "wyślij wiadomość w aplikacji Whatsapp na określony numer",
"whatsapp_attendee_action": "wyślij wiadomość w aplikacji Whatsapp do uczestnika",
"workflows": "Przepływy pracy",
"new_workflow_btn": "Nowy przepływ pracy",
"add_new_workflow": "Dodaj nowy przepływ pracy",
@@ -1080,6 +1150,8 @@
"choose_template": "Wybierz szablon",
"custom": "Niestandard.",
"reminder": "Przypomnienie",
"rescheduled": "Przełożono",
"completed": "Ukończono",
"reminder_email": "Przypomnienie: {{eventType}} z {{name}} w dniu {{date}}",
"not_triggering_existing_bookings": "Nie uruchomi się w przypadku już istniejących rezerwacji, ponieważ użytkownik zostanie poproszony o numer telefonu podczas rezerwacji wydarzenia.",
"minute_one": "{{count}} min",
@@ -1177,6 +1249,7 @@
"start_of_week": "Początek tygodnia",
"recordings_title": "Nagrania",
"recording": "Nagranie",
"happy_scheduling": "Miłego planowania",
"select_calendars": "Wybierz kalendarze, które chcesz sprawdzić pod kątem konfliktów, aby uniknąć podwójnych rezerwacji.",
"check_for_conflicts": "Sprawdź konflikty",
"view_recordings": "Wyświetl nagrania",
@@ -1218,6 +1291,7 @@
"conferencing_description": "Dodaj ulubione aplikacje do wideokonferencji, aby umożliwić korzystanie z nich podczas spotkań",
"add_conferencing_app": "Dodaj aplikację konferencyjną",
"password_description": "Zarządzaj ustawieniami haseł do kont",
"set_up_two_factor_authentication": "Skonfiguruj uwierzytelnianie dwuskładnikowe",
"we_just_need_basic_info": "Potrzebujemy podstawowych informacji, aby skonfigurować Twój profil.",
"skip": "Pomiń",
"do_this_later": "Zrób to później",
@@ -1231,6 +1305,8 @@
"connect_analytics_apps": "Połącz aplikacje analityczne",
"connect_other_apps": "Połącz inne aplikacje",
"connect_web3_apps": "Połącz aplikacje web3",
"connect_messaging_apps": "Połącz aplikacje do wysyłania wiadomości",
"connect_crm_apps": "Połącz aplikacje CRM",
"current_step_of_total": "Krok {{currentStep}} z {{maxSteps}}",
"add_variable": "Dodaj zmienną",
"custom_phone_number": "Niestandardowy numer telefonu",
@@ -1243,12 +1319,14 @@
"location_info": "Lokalizacja wydarzenia",
"additional_notes_info": "Dodatkowe uwagi dotyczące rezerwacji",
"attendee_name_info": "Imię i nazwisko osoby rezerwującej",
"organizer_name_info": "Nazwa organizatora",
"to": "Do",
"workflow_turned_on_successfully": "Przepływ pracy {{workflowName}} został {{offOn}}",
"download_responses": "Pobierz odpowiedzi",
"download_responses_description": "Pobierz wszystkie odpowiedzi do formularza w formacie CSV.",
"download": "Pobierz",
"download_recording": "Pobierz nagranie",
"recording_from_your_recent_call": "Nagranie z ostatniego połączenia w aplikacji {{appName}} jest gotowe do pobrania.",
"create_your_first_form": "Utwórz pierwszy formularz",
"create_your_first_form_description": "Za pomocą formularzy przekierowujących możesz zadawać pytania profilujące i przekierowywać użytkowników do odpowiednich osób lub typów wydarzeń.",
"create_your_first_webhook": "Utwórz pierwszy Webhook",
@@ -1257,7 +1335,9 @@
"event_one": "wydarzenie",
"event_other": "wydarzenia",
"profile_team_description": "Zarządzaj ustawieniami profilu zespołu",
"profile_org_description": "Zarządzaj ustawieniami profilu Twojej organizacji",
"members_team_description": "Użytkownicy należący do grupy",
"organization_description": "Zarządzaj administratorami i użytkownikami w Twojej organizacji",
"team_url": "Adres URL zespołu",
"team_members": "Członkowie zespołu",
"more": "Więcej",
@@ -1298,6 +1378,7 @@
"routing_forms_send_email_owner": "Wyślij wiadomość e-mail do właściciela",
"routing_forms_send_email_owner_description": "Wysyła wiadomość e-mail do właściciela, gdy formularz zostanie przesłany.",
"add_new_form": "Dodaj nowy formularz",
"add_new_team_form": "Dodaj nowy formularz do zespołu",
"create_your_first_route": "Utwórz pierwsze przekierowanie",
"route_to_the_right_person": "Przekierowuj do właściwej osoby na podstawie odpowiedzi na Twój formularz",
"form_description": "Utwórz formularz, aby przekierowywać osoby rezerwujące",
@@ -1383,6 +1464,7 @@
"new_event_type_availability": "{{eventTypeTitle}} – dostępność",
"error_editing_availability": "Błąd edytowania dostępności",
"dont_have_permission": "Nie masz uprawnień dostępu do tego zasobu.",
"saml_config": "SAML",
"saml_configuration_placeholder": "Wklej tutaj metadane SAML od dostawcy tożsamości",
"saml_email_required": "Wprowadź e-mail, abyśmy mogli znaleźć dostawcę tożsamości SAML",
"saml_sp_title": "Szczegóły usługodawcy",
@@ -1401,15 +1483,19 @@
"yearly": "Co rok",
"checkout": "Do kasy",
"your_team_disbanded_successfully": "Twój zespół został rozwiązany.",
"your_org_disbanded_successfully": "Twoja organizacja została rozwiązana.",
"error_creating_team": "Podczas tworzenia zespołu wystąpił błąd",
"you": "Ty",
"resend_email": "Wyślij wiadomość e-mail ponownie",
"member_already_invited": "Członek został już zaproszony",
"enter_email_or_username": "Wprowadź adres e-mail lub nazwę użytkownika",
"team_name_taken": "Ta nazwa jest już zajęta",
"must_enter_team_name": "Musisz wprowadzić nazwę zespołu",
"team_url_required": "Musisz wprowadzić adres URL zespołu",
"url_taken": "Ten adres URL jest już zajęty",
"problem_registering_domain": "Wystąpił problem z rejestracją subdomeny, spróbuj ponownie lub skontaktuj się z administratorem.",
"team_publish": "Opublikuj zespół",
"number_text_notifications": "Numer telefonu (powiadomienia SMS)",
"attendee_email_variable": "Adres e-mail uczestnika",
"attendee_email_info": "Adres e-mail osoby rezerwującej",
"kbar_search_placeholder": "Wpisz polecenie lub wyszukaj...",
@@ -1432,6 +1518,8 @@
"find_the_best_person": "Znajdź najlepszą dostępną osobę i przejrzyj listę członków swojego zespołu.",
"fixed_round_robin": "Stały algorytm karuzelowy",
"add_one_fixed_attendee": "Dodaj jednego stałego uczestnika i przeglądaj uczestników zgodnie z algorytmem karuzelowym",
"calcom_is_better_with_team": "Aplikacja {{appName}} jest lepsza z zespołami",
"the_calcom_team": "Zespół {{companyName}}",
"add_your_team_members": "Dodaj członków zespołu do typów wydarzeń. Użyj zbiorowego ustalania harmonogramu, aby uwzględnić wszystkich lub znajdź najodpowiedniejszą osobę za pomocą algorytmu karuzelowego.",
"booking_limit_reached": "Osiągnięto limit rezerwacji tego typu wydarzenia",
"duration_limit_reached": "Osiągnięto limit czasu trwania tego typu wydarzenia",
@@ -1450,6 +1538,7 @@
"navigate_installed_apps": "Przejdź do zainstalowanych aplikacji",
"disabled_calendar": "Jeśli masz zainstalowany inny kalendarz, nowe rezerwacje zostaną dodane do niego. Jeśli nie, podłącz nowy kalendarz, aby nie przegapić żadnych nowych rezerwacji.",
"enable_apps": "Włącz aplikacje",
"enable_apps_description": "Włącz aplikacje, które użytkownicy mogą zintegrować z aplikacją {{appName}}",
"purchase_license": "Kup licencję",
"already_have_key": "Mam już klucz:",
"already_have_key_suggestion": "Skopiuj istniejącą zmienną środowiskową CALCOM_LICENSE_KEY tutaj.",
@@ -1463,6 +1552,9 @@
"no_available_apps": "Brak dostępnych aplikacji",
"no_available_apps_description": "Upewnij się, że w Twoim wdrożeniu w folderze „packages/app-store” znajdują są aplikacje.",
"no_apps": "W tym wystąpieniu usługi Cal nie ma włączonych aplikacji",
"no_apps_configured": "Nie skonfigurowano jeszcze żadnej aplikacji",
"enable_in_settings": "Możesz włączyć aplikacje w ustawieniach.",
"please_contact_admin": "Skontaktuj się z administratorem",
"apps_settings": "Ustawienia aplikacji",
"fill_this_field": "Wypełnij to pole",
"options": "Opcje",
@@ -1566,7 +1658,10 @@
"delete_sso_configuration_confirmation_description": "Czy na pewno chcesz usunąć konfigurację {{connectionType}}? Członkowie zespołu, którzy używają logowania {{connectionType}} nie będą już mogli uzyskać dostępu do Cal.com.",
"organizer_timezone": "Strefa czasowa organizatora",
"email_user_cta": "Wyświetl zaproszenie",
"email_no_user_invite_heading": "Zaproszono Cię do dołączenia do aplikacji {{appName}} ({{entity}})",
"email_no_user_invite_subheading": "Użytkownik {{invitedBy}} zaprasza Cię do dołączenia do jego zespołu w aplikacji {{appName}}. Aplikacja {{appName}} to terminarz do planowania wydarzeń, który umożliwi Tobie i Twojemu zespołowi planowanie spotkań bez czasochłonnej wymiany wiadomości e-mail.",
"email_user_invite_subheading": "Użytkownik {{invitedBy}} zaprasza Cię do dołączenia do jego zespołu „{{teamName}}” ({{entity}}) w aplikacji {{appName}}. Aplikacja {{appName}} to terminarz do planowania wydarzeń, który umożliwi {{entity}} planowanie spotkań bez czasochłonnej wymiany wiadomości e-mail.",
"email_no_user_invite_steps_intro": "Przeprowadzimy Cię przez kilka krótkich etapów i wkrótce w ramach {{entity}} zaczniesz z przyjemnością korzystać z bezstresowego narzędzia planowania.",
"email_no_user_step_one": "Wybierz nazwę użytkownika",
"email_no_user_step_two": "Połącz swoje konto kalendarza",
"email_no_user_step_three": "Ustaw swoją dostępność",
@@ -1577,6 +1672,8 @@
"scheduler": "{Scheduler}",
"no_workflows": "Brak przepływów pracy",
"change_filter": "Zmień filtr, aby zobaczyć osobiste i zespołowe przepływy pracy.",
"change_filter_common": "Zmień filtr, aby zobaczyć wyniki.",
"no_results_for_filter": "Brak wyników dla filtra",
"recommended_next_steps": "Zalecane następne kroki",
"create_a_managed_event": "Utwórz typ zarządzanego wydarzenia",
"meetings_are_better_with_the_right": "Spotkania idą lepiej, gdy uczestniczą w nich właściwi członkowie zespołu. Zaproś ich teraz.",
@@ -1587,7 +1684,9 @@
"no_longer_attending": "Nie bierzesz już udziału w tym wydarzeniu",
"attendee_no_longer_attending_subject": "Uczestnik nie bierze już udziału w wydarzeniu {{title}} odbywającym się {{date}}",
"attendee_no_longer_attending": "Uczestnik nie bierze już udziału w Twoim wydarzeniu.",
"attendee_no_longer_attending_subtitle": "Użytkownik {{name}} anulował rezerwację. To znaczy, że zwolniło się miejsce w tym terminie",
"create_event_on": "Utwórz wydarzenie w kalendarzu",
"create_routing_form_on": "Utwórz formularz przekierowania na",
"default_app_link_title": "Ustaw domyślny link do aplikacji",
"default_app_link_description": "Ustawienie domyślnego linku do aplikacji pozwala wszystkim nowo utworzonym typom wydarzeń na używanie ustawionego przez Ciebie linku do aplikacji.",
"organizer_default_conferencing_app": "Domyślna aplikacja organizatora",
@@ -1597,6 +1696,7 @@
"booking_questions_title": "Pytania dotyczące rezerwacji",
"booking_questions_description": "Dostosuj pytania zadawane na stronie rezerwacji",
"add_a_booking_question": "Dodaj pytanie",
"identifier": "Identyfikator",
"duplicate_email": "Adres e-mail jest zduplikowany",
"booking_with_payment_cancelled": "Nie można już zapłacić za to wydarzenie",
"booking_with_payment_cancelled_already_paid": "Zwrot środków za tę rezerwację jest już w drodze.",
@@ -1607,6 +1707,7 @@
"show_on_booking_page": "Pokaż na stronie rezerwacji",
"get_started_zapier_templates": "Zacznij korzystać z szablonów Zapier",
"team_is_unpublished": "Zespół {{team}} nie został opublikowany",
"team_is_unpublished_description": "Link jednostki {{entity}} jest obecnie niedostępny. Skontaktuj się z właścicielem jednostki {{entity}} lub poproś o jego opublikowanie.",
"team_member": "Członek zespołu",
"a_routing_form": "Formularz przekierowania",
"form_description_placeholder": "Opis formularza",
@@ -1636,13 +1737,16 @@
"spot_popular_event_types": "Przekonaj się, które typy wydarzeń są popularne",
"spot_popular_event_types_description": "Zobacz, które typy wydarzeń są najczęściej klikane i rezerwowane",
"no_responses_yet": "Nie ma jeszcze odpowiedzi",
"no_routes_defined": "Brak zdefiniowanych przekierowań",
"this_will_be_the_placeholder": "To będzie symbol zastępczy",
"error_booking_event": "Podczas rezerwacji wydarzenia wystąpił błąd, odśwież stronę i spróbuj ponownie.",
"timeslot_missing_title": "Nie wybrano przedziału czasowego",
"timeslot_missing_description": "Wybierz przedział czasowy, aby zarezerwować wydarzenie.",
"timeslot_missing_cta": "Wybierz przedział czasowy",
"switch_monthly": "Przełącz na widok miesiąca",
"switch_weekly": "Przełącz na widok tygodnia",
"switch_multiday": "Przełącz na widok dnia",
"switch_columnview": "Przełącz na widok kolumny",
"num_locations": "Lokalizacje do wyboru: {{num}}",
"select_on_next_step": "Wybierz następny krok",
"this_meeting_has_not_started_yet": "To spotkanie jeszcze się nie rozpoczęło",
@@ -1681,6 +1785,7 @@
"managed_event_dialog_title_one": "Adres URL /{{slug}} już istnieje dla {{count}} członka. Czy chcesz go zastąpić?",
"managed_event_dialog_title_other": "Adres URL /{{slug}} już istnieje dla {{count}} członków. Czy chcesz go zastąpić?",
"managed_event_dialog_information_one": "<strong>{{names}}</strong> używa już adresu URL <strong>/{{slug}}</strong>.",
"managed_event_dialog_information_other": "<strong>{{names}}</strong> używają już adresu URL <strong>/{{slug}}</strong>.",
"managed_event_dialog_clarification": "Jeśli zdecydujesz się go zastąpić, powiadomimy te osoby. Wróć i usuń je, jeśli nie chcesz zastępować adresu.",
"review_event_type": "Sprawdź typ wydarzenia",
"looking_for_more_analytics": "Szukasz dokładniejszych danych analitycznych?",
@@ -1696,12 +1801,14 @@
"least_booked_members": "Najrzadziej rezerwowani członkowie",
"events_created": "Utworzone wydarzenia",
"events_completed": "Ukończone wydarzenia",
"events_cancelled": "Anulowane wydarzenia",
"events_rescheduled": "Przełożone wydarzenia",
"from_last_period": "od ostatniego okresu",
"from_to_date_period": "Od: {{startDate}} Do: {{endDate}}",
"redirect_url_warning": "Dodanie przekierowania wyłączy stronę powodzenia. Upewnij się, że na Twojej niestandardowej stronie powodzenia znajduje się wzmianka o potwierdzeniu rezerwacji.",
"event_trends": "Trendy wydarzeń",
"clear_filters": "Wyczyść filtry",
"clear": "Wyczyść",
"hold": "Zablokowano",
"on_booking_option": "Pobierz płatność przy rezerwacji",
"hold_option": "Pobierz opłatę za niestawienie się",
@@ -1728,6 +1835,18 @@
"complete_your_booking": "Ukończ rezerwację",
"complete_your_booking_subject": "Ukończ rezerwację: {{title}} dnia {{date}}",
"confirm_your_details": "Potwierdź swoje dane",
"copy_invite_link": "Skopij link zaproszenia",
"edit_invite_link": "Edytuj ustawienia linku",
"invite_link_copied": "Skopiowano link zaproszenia",
"invite_link_deleted": "Usunięto link zaproszenia",
"invite_link_updated": "Zapisano ustawienia linku zaproszenia",
"link_expires_after": "Linki wygasną po upływie...",
"one_day": "1 dnia",
"seven_days": "7 dni",
"thirty_days": "30 dni",
"three_months": "3 miesięcy",
"one_year": "roku",
"team_invite_received": "Zaproszono Cię do zespołu {{teamName}}",
"currency_string": "{{amount, currency}}",
"charge_card_dialog_body": "Zamierzasz obciążyć uczestnika kwotą {{amount, currency}}. Czy na pewno chcesz kontynuować?",
"charge_attendee": "Obciąż uczestnika kwotą {{amount, currency}}",
@@ -1736,6 +1855,7 @@
"email_invite_team_bulk": "Zaproszono {{userCount}} użytkowników",
"error_collecting_card": "Błąd podczas pobierania należności z karty",
"image_size_limit_exceed": "Rozmiar przesyłanego obrazu nie powinien przekraczać limitu 5 MB",
"unauthorized_workflow_error_message": "{{errorCode}}: nie masz uprawnień do włączenia lub wyłączenia tego przepływu pracy.",
"inline_embed": "Osadź w stronie",
"load_inline_content": "Wczytuje typ wydarzenia bezpośrednio w treści Twojej strony internetowej.",
"floating_pop_up_button": "Pływający przycisk wyskakujący",
@@ -1755,6 +1875,69 @@
"connect_google_workspace": "Podłącz usługę Google Workspace",
"google_workspace_admin_tooltip": "Aby skorzystać z tej funkcji, musisz być administratorem usługi Workspace.",
"first_event_type_webhook_description": "Utwórz swój pierwszy element webhook dla tego typu wydarzenia",
"install_app_on": "Zainstaluj aplikację na:",
"create_for": "Utwórz dla",
"insights_all_org_filter": "Wszystkie"
"setup_organization": "Skonfiguruj organizację",
"organization_banner_description": "Utwórz środowisko, w którym zespoły będą mogły dzielić się aplikacjami, przepływami pracy i typami wydarzeń przy użyciu algorytmu karuzelowego lub zbiorowego ustalania harmonogramu.",
"organization_banner_title": "Zarządzaj organizacjami z wieloma zespołami",
"set_up_your_organization": "Skonfiguruj organizację",
"organizations_description": "Organizacje to współdzielone środowiska, w których zespoły mogą tworzyć wspólne typy wydarzeń, aplikacje, przepływy pracy i nie tylko.",
"must_enter_organization_name": "Nazwa organizacji jest wymagana.",
"must_enter_organization_admin_email": "Adres e-mail organizacji jest wymagany.",
"admin_email": "Adres e-mail organizacji",
"admin_username": "Nazwa użytkownika administratora",
"organization_name": "Nazwa organizacji",
"organization_url": "Adres URL organizacji",
"organization_verify_header": "Zweryfikuj adres e-mail organizacji",
"organization_verify_email_body": "Użyj poniższego kodu, aby zweryfikować adres e-mail i kontynuować konfigurację organizacji.",
"additional_url_parameters": "Dodatkowe parametry adresu URL",
"about_your_organization": "Informacje o Twojej organizacji",
"about_your_organization_description": "Organizacje to współdzielone środowiska, w których możesz utworzyć wiele zespołów ze wspólnymi członkami, typami wydarzeń, aplikacjami, przepływami pracy i nie tylko.",
"create_your_teams": "Utwórz zespoły",
"create_your_teams_description": "Zacznij wspólne planowanie poprzez dodanie członków zespołu do Twojej organizacji",
"invite_organization_admins": "Zaproś administratorów organizacji",
"invite_organization_admins_description": "Administratorzy będą mieli dostęp do wszystkich zespołów w Twojej organizacji. Administratorów i członków zespołu możesz dodać później.",
"set_a_password": "Ustaw hasło",
"set_a_password_description": "Spowoduje to utworzenie nowego konta użytkownika z adresem e-mail Twojej organizacji i wybranym hasłem.",
"organization_logo": "Logo organizacji",
"organization_about_description": "Kilka zdań na temat Twojej organizacji. Pojawią się na publicznej stronie profilowej Twojej organizacji.",
"ill_do_this_later": "Zrobię to później",
"verify_your_email": "Potwierdź adres e-mail",
"enter_digit_code": "Wprowadź 6-cyfrowy kod, który wysłaliśmy na adres {{email}}",
"verify_email_organization": "Potwierdź adres e-mail, aby utworzyć organizację",
"code_provided_invalid": "Podany kod jest nieprawidłowy, spróbuj ponownie.",
"email_already_used": "Adres e-mail jest już używany.",
"organization_admin_invited_heading": "Zaproszono Cię do organizacji {{orgName}}",
"organization_admin_invited_body": "Dołącz do Twojego zespołu w organizacji {{orgName}} i zacznij skupiać się na spotkaniu, a nie jego umawianiu!",
"duplicated_slugs_warning": "Następujące zespoły nie mogły zostać utworzone z powodu zduplikowanych slugów: {{slugs}}",
"team_names_empty": "Nazwy zespołów nie mogą być puste.",
"team_names_repeated": "Nazwy zespołów nie mogą się powtarzać.",
"user_belongs_organization": "Użytkownik należy do organizacji.",
"org_no_teams_yet": "W tej organizacji nie ma jeszcze żadnych zespołów.",
"org_no_teams_yet_description": "Jeśli jesteś administratorem, pamiętaj o utworzeniu zespołów, które będą wyświetlane tutaj.",
"set_up": "Skonfiguruj",
"set_up_your_profile": "Skonfiguruj profil",
"set_up_your_profile_description": "Określ, jakie informacje o Twojej roli w organizacji {{orgName}} zobaczą osoby, które klikną Twój link publiczny.",
"my_profile": "Mój profil",
"my_settings": "Moje ustawienia",
"crm": "CRM",
"messaging": "Wiadomości",
"sender_id_info": "Nazwa lub numer wyświetlany jako nadawca wiadomości SMS (niektóre kraje nie zezwalają na alfanumeryczne identyfikatory nadawcy)",
"org_admins_can_create_new_teams": "Tylko administrator Twojej organizacji może tworzyć nowe zespoły.",
"google_new_spam_policy": "Nowa polityka firmy Google dotycząca spamu może uniemożliwić Ci otrzymywanie powiadomień e-mail i kalendarza na temat tej rezerwacji.",
"resolve": "Rozwiąż",
"no_organization_slug": "Podczas tworzenia zespołów tej organizacji wystąpił błąd. Brakujący slug adresu URL.",
"org_name": "Nazwa organizacji",
"org_url": "Adres URL organizacji",
"copy_link_org": "Skopiuj link do organizacji",
"404_the_org": "Organizacja",
"404_the_team": "Zespół",
"404_claim_entity_org": "Zajmij subdomenę dla Twojej organizacji",
"404_claim_entity_team": "Zajmij ten zespół i zacznij wspólnie zarządzać harmonogramami",
"insights_all_org_filter": "Wszystkie",
"insights_team_filter": "Zespół: {{teamName}}",
"insights_user_filter": "Użytkownik: {{userName}}",
"insights_subtitle": "Wyświetl wskaźniki rezerwacji z różnych wydarzeń",
"custom_plan": "Plan niestandardowy",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Dodaj nowe ciągi powyżej ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -13,6 +13,8 @@
"reset_password_subject": "{{appName}}: Instruções para redefinir sua senha",
"verify_email_subject": "{{appName}}: Verificar sua conta",
"check_your_email": "Verifique seu e-mail",
"verify_email_page_body": "Enviamos um e-mail para {{email}}. É importante verificar seu endereço de e-mail para garantir o fornecimento do melhor e-mail e calendário de {{appName}}.",
"verify_email_banner_body": "Verifique seu endereço de e-mail para garantir o fornecimento do melhor e-mail e calendário",
"verify_email_email_header": "Verifique seu endereço de e-mail",
"verify_email_email_button": "Verificar e-mail",
"verify_email_email_body": "Por favor, verifique seu endereço de e-mail clicando no botão abaixo.",
@@ -85,6 +87,7 @@
"your_meeting_has_been_booked": "A sua reunião foi agendada",
"event_type_has_been_rescheduled_on_time_date": "Seu {{title}} foi remarcado para {{date}}.",
"event_has_been_rescheduled": "Atualização - O seu evento foi reagendado",
"request_reschedule_subtitle": "{{organizer}} cancelou a reserva e solicitou que você escolhesse outro horário.",
"request_reschedule_title_organizer": "Você solicitou que {{attendee}} reagendasse",
"request_reschedule_subtitle_organizer": "Você cancelou a reserva e {{attendee}} escolherá um novo horário.",
"rescheduled_event_type_subject": "Solicitação de reagendamento enviado: {{eventType}} com {{name}} às {{date}}",
@@ -115,6 +118,7 @@
"team_info": "Informações da equipe",
"request_another_invitation_email": "Se não quiser utilizar {{toEmail}} como email do {{appName}}, ou já tem uma conta em {{appName}}, por favor peça outro convite para esse email.",
"you_have_been_invited": "Você recebeu um convite para se juntar ao time {{teamName}}",
"user_invited_you": "{{user}} convidou para ingressar na equipe {{team}} de {{entity}} em {{appName}}",
"hidden_team_member_title": "Você está oculto nesta equipe",
"hidden_team_member_message": "Seu assento não é pago, atualize para a versão Pro ou avise o proprietário da equipe de que é possível pagar pelo seu assento.",
"hidden_team_owner_message": "É preciso ter uma conta Pro para usar equipes, você permanecerá oculto até a atualização.",
@@ -125,6 +129,8 @@
"team_upgrade_banner_description": "Agradecemos por testar nosso novo plano de equipe. Notamos que a sua equipe \"{{teamName}}\" precisa ser atualizada.",
"upgrade_banner_action": "Atualizar aqui",
"team_upgraded_successfully": "Sua equipe foi atualizada com êxito!",
"org_upgrade_banner_description": "Agradecemos por testar nosso novo plano Organization. Notamos que a sua organização \"{{teamName}}\" precisa ser atualizada.",
"org_upgraded_successfully": "Sua Organização foi atualizada com êxito!",
"use_link_to_reset_password": "Use o link abaixo para redefinir a sua senha",
"hey_there": "Olá,",
"forgot_your_password_calcom": "Esqueceu sua senha? - {{appName}}",
@@ -199,6 +205,7 @@
"page_doesnt_exist": "Esta página não existe.",
"check_spelling_mistakes_or_go_back": "Verificar erros ortográficos ou voltar à página anterior.",
"404_page_not_found": "404: Não foi possível encontrar esta página.",
"booker_event_not_found": "Não foi possível achar o evento que você está tentando reservar.",
"getting_started": "Começar",
"15min_meeting": "Reunião de 15 min",
"30min_meeting": "Reunião de 30 min",
@@ -238,8 +245,10 @@
"available_apps": "Aplicativos disponíveis",
"check_email_reset_password": "Verifique o seu email. Enviamos um link para redefinir a sua senha.",
"finish": "Finalizar",
"organization_general_description": "Gerencie as configurações para o idioma e o fuso horário da sua equipe",
"few_sentences_about_yourself": "Fale um pouco sobre você. Isto será exibido em sua página pessoal.",
"nearly_there": "Quase lá!",
"nearly_there_instructions": "Por último, uma breve descrição de você mesmo e uma foto ajudam a conseguir agendamentos e a mostrar às pessoas com quem elas estão agendando.",
"set_availability_instructions": "Definir períodos em que você está disponível de forma recorrente. Mais tarde você poderá criar outros períodos e atribuí-los a diferentes calendários.",
"set_availability": "Definir disponibilidade",
"continue_without_calendar": "Continuar sem calendário",
@@ -295,10 +304,18 @@
"success": "Sucesso",
"failed": "Falhou",
"password_has_been_reset_login": "A sua senha foi redefinida. Agora pode fazer login com a sua senha recém-criada.",
"layout": "Layout",
"bookerlayout_default_title": "Visualização padrão",
"bookerlayout_description": "Você pode selecionar várias opções, e os reservantes podem alternar entre as visualizações.",
"bookerlayout_user_settings_title": "Layout da reserva",
"bookerlayout_user_settings_description": "Você pode selecionar várias opções, e os reservantes podem alternar entre as visualizações. Pode ser sobrescrito a cada evento.",
"bookerlayout_month_view": "Mês",
"bookerlayout_week_view": "Semanalmente",
"bookerlayout_column_view": "Coluna",
"bookerlayout_error_min_one_enabled": "Pelo menos um layout precisa ser habilitado.",
"bookerlayout_error_default_not_enabled": "O layout selecionado como visualização padrão não faz parte dos layouts habilitados.",
"bookerlayout_error_unknown_layout": "O layout selecionado não é válido.",
"bookerlayout_override_global_settings": "Você pode gerenciar isso para todos os seus tipos de evento em <2>Configurações/Aparência</2> ou <6>sobrescrever apenas para este evento</6>.",
"unexpected_error_try_again": "Ocorreu um erro inesperado. Tente novamente.",
"sunday_time_error": "Horário inválido no domingo",
"monday_time_error": "Horário inválido na segunda-feira",
@@ -320,6 +337,12 @@
"cancelling_event_recurring": "O evento é uma instância de um evento recorrente.",
"cancelling_all_recurring": "Estas são todas as instâncias restantes no evento recorrente.",
"error_with_status_code_occured": "Ocorreu um erro com o status code {{status}}.",
"error_event_type_url_duplicate": "Já existe um tipo de evento para esta URL.",
"error_event_type_unauthorized_create": "Não é possível criar este evento",
"error_event_type_unauthorized_update": "Não é possível editar este evento",
"error_workflow_unauthorized_create": "Não é possível criar este fluxo de trabalho",
"error_schedule_unauthorized_create": "Não é possível criar esta agenda",
"booking_already_cancelled": "Esta agenda já foi cancelada",
"booking_already_accepted_rejected": "Esta reserva já foi aceita ou recusada",
"go_back_home": "Voltar à Página Inicial",
"or_go_back_home": "Ou volte à página inicial",
@@ -329,6 +352,7 @@
"no_status_bookings_yet_description": "Você não possui reservas {{status}}. {{description}}",
"event_between_users": "{{eventName}} entre {{host}} e {{attendeeName}}",
"bookings": "Reservas",
"booking_not_found": "Reserva não encontrada",
"bookings_description": "Veja os eventos futuros e passados reservados através dos links de tipos de eventos.",
"upcoming_bookings": "Assim que alguém reservar uma hora, ela aparecerá aqui.",
"recurring_bookings": "Assim que alguém reservar uma reunião recorrente com você, essa pessoa aparecerá aqui.",
@@ -367,15 +391,19 @@
"user_dynamic_booking_disabled": "Alguns usuários do grupo desativaram as reservas de grupos dinâmicas",
"allow_dynamic_booking_tooltip": "Agrupe links de reserva que podem ser criados dinamicamente ao adicionar vários nomes de usuário com \"+\", por exemplo: \"{{appName}}/bailey+peer\"",
"allow_dynamic_booking": "Permita que os participantes façam reservas com as reservas de grupo dinâmicas",
"dynamic_booking": "Links de grupo dinâmicos",
"email": "Email",
"email_placeholder": "nome@exemplo.com",
"full_name": "Nome Completo",
"browse_api_documentation": "Consulte a nossa documentação da API",
"leverage_our_api": "Utilize nossa API para controle e personalização completa.",
"create_webhook": "Criar Webhook",
"booking_cancelled": "Reserva cancelada",
"booking_rescheduled": "Reserva Reagendada",
"recording_ready": "Link para download de gravação pronto",
"booking_created": "Reserva Criada",
"booking_rejected": "Reserva recusada",
"booking_requested": "Reserva solicitada",
"meeting_ended": "Reunião encerrada",
"form_submitted": "Formulário enviado",
"event_triggers": "Gatilhos de eventos",
@@ -385,6 +413,8 @@
"team_webhooks": "Webhooks da equipe",
"create_new_webhook_to_account": "Criar um webhook para sua conta",
"new_webhook": "Novo Webhook",
"receive_cal_meeting_data": "Receba dados da reunião {{appName}} em uma, URL especificada, em tempo real, quando um evento for agendado ou cancelado.",
"receive_cal_event_meeting_data": "Receba em tempo real dados da reunião do {{appName}} em um URL especificada quando este evento for agendado ou cancelado.",
"responsive_fullscreen_iframe": "Iframe responsivo de tela inteira",
"loading": "Carregando...",
"deleting": "Excluindo...",
@@ -447,6 +477,7 @@
"max_limit_allowed_hint": "O tamanho deve ser de {{limit}} ou menos caracteres",
"invalid_password_hint": "A senha precisa ter pelo menos sete caracteres com pelo menos um número e ser uma combinação de letras maiúsculas e minúsculas",
"incorrect_password": "Senha incorreta.",
"incorrect_email_password": "A senha ou o nome de usuário está incorreto.",
"use_setting": "Usar configurações",
"am_pm": "manhã/tarde",
"time_options": "Opções de horário",
@@ -555,6 +586,8 @@
"confirm_all": "Confirmar tudo",
"disband_team": "Desfazer Time",
"disband_team_confirmation_message": "Tem certeza de que deseja desfazer esta equipe? Qualquer pessoa com quem você compartilhou este link da equipe não será mais capaz de fazer novos agendamentos.",
"disband_org": "Desfazer organização",
"disband_org_confirmation_message": "Tem certeza de que deseja desfazer esta Org? Todos os membros e equipes serão excluídos.",
"remove_member_confirmation_message": "Tem certeza de que deseja remover este membro do time?",
"confirm_disband_team": "Sim, disfazer time",
"confirm_remove_member": "Sim, remover membro",
@@ -629,6 +662,7 @@
"event_type_updated_successfully": "Tipo de evento atualizado com sucesso",
"event_type_deleted_successfully": "Tipo de evento removido com sucesso",
"hours": "Horas",
"people": "Pessoas",
"your_email": "Seu Email",
"change_avatar": "Alterar Avatar",
"language": "Idioma",
@@ -831,6 +865,7 @@
"installed_apps": "Apps instalados",
"free_to_use_apps": "Grátis",
"no_category_apps": "Sem aplicativos de {{category}}",
"all_apps": "Todos os aplicativos",
"no_category_apps_description_calendar": "Adicione um aplicativo de calendário para verificar se há conflitos para evitar agendamentos duplos",
"no_category_apps_description_conferencing": "Tente adicionar um aplicativo para chamadas de vídeo com seus clientes",
"no_category_apps_description_payment": "Adicione um aplicativo de pagamento para facilitar a transação entre você e seus clientes",
@@ -838,12 +873,17 @@
"no_category_apps_description_automation": "Adicione um aplicativo de automação para usar",
"no_category_apps_description_other": "Adicione qualquer outro tipo de aplicativo para fazer todos os tipos de coisas",
"no_category_apps_description_web3": "Adicione um aplicativo web3 para suas páginas de reservas",
"no_category_apps_description_messaging": "Adicione um aplicativo de mensagem para definir lembretes e notificações personalizados",
"no_category_apps_description_crm": "Adicione um aplicativo CRM para acompanhar todos os integrantes das suas reuniões",
"installed_app_calendar_description": "Defina o(s) calendário(s) para verificar se há conflitos e evitar reservas duplas.",
"installed_app_payment_description": "Configure quais serviços de processamento de pagamento serão usados no carregamento de seus clientes.",
"installed_app_analytics_description": "Configure quais aplicativos de análise serão usados nas suas páginas de reservas",
"installed_app_other_description": "Todos os seus aplicativos instalados de outras categorias.",
"installed_app_conferencing_description": "Configure quais aplicativos de conferência serão usados",
"installed_app_automation_description": "Configure quais aplicativos de automação serão usados",
"installed_app_web3_description": "Configure quais aplicativos web3 serão usados nas suas páginas de reservas",
"installed_app_messaging_description": "Configure quais aplicativos de mensagem usar para definir lembretes e notificações",
"installed_app_crm_description": "Configure quais aplicativos CRM usar para acompanhar os integrantes das suas reuniões",
"analytics": "Análise",
"empty_installed_apps_headline": "Nenhum app instalado",
"empty_installed_apps_description": "Os aplicativos permitem que você melhore o fluxo de trabalho e melhore significativamente sua vida de agendamento.",
@@ -869,6 +909,7 @@
"create_events_on": "Criar eventos em",
"enterprise_license": "Este não é um recurso corporativo",
"enterprise_license_description": "Para ativar este recurso, obtenha uma chave de desenvolvimento no console {{consoleUrl}} e adicione ao seu .env como CALCOM_LICENSE_KEY. Caso sua equipe já tenha uma licença, entre em contato com {{supportMail}} para obter ajuda.",
"enterprise_license_development": "Você pdoe testar este recurso no modo de desenvolvimento. Para uso em produção, solicite que um administrador acesse <2>/auth/setup</2> e insira uma chave de licença.",
"missing_license": "Falta a licença",
"signup_requires": "Licença comercial obrigatória",
"signup_requires_description": "Atualmente a {{companyName}} não oferece nenhuma versão gratuita de código aberto da página de inscrição. Para obter acesso completo aos componentes da inscrição, você precisa adquirir uma licença comercial. Para uso pessoal, recomendamos o Prisma Data Platform ou outras interfaces em Postgres para criação de contas.",
@@ -938,6 +979,7 @@
"confirm_delete_api_key": "Revogar esta chave de API",
"revoke_api_key": "Revogar chave de API",
"api_key_copied": "Chave de API copiada!",
"api_key_expires_on": "A chave de API expira em",
"delete_api_key_confirm_title": "Remover permanentemente esta chave de API da sua conta?",
"copy": "Copiar",
"expire_date": "Data de vencimento",
@@ -960,6 +1002,9 @@
"user_impersonation_heading": "Representação do usuário",
"user_impersonation_description": "Permite que a nossa equipe de suporte entre temporariamente como você para ajudar a resolver rapidamente os problemas relatados.",
"team_impersonation_description": "Permite que os administradores da sua equipe façam login como você.",
"make_team_private": "Tornar equipe privada",
"make_team_private_description": "Os membros da sua equipe não poderão ver outros membros da equipe após habilitar isso.",
"you_cannot_see_team_members": "Você não poderá ver todos os membros da equipe de uma equipe privada.",
"allow_booker_to_select_duration": "Permitir que o reservante selecione a duração",
"impersonate_user_tip": "Todos os usos desse recurso são auditados.",
"impersonating_user_warning": "Representando o nome de usuário \"{{user}}\".",
@@ -1027,16 +1072,21 @@
"event_location": "Local do evento",
"reschedule_optional": "Motivo de reagendamento (opcional)",
"reschedule_placeholder": "Diga por que você precisa reagendar",
"event_cancelled": "Este evento foi cancelado",
"emailed_information_about_cancelled_event": "Avisamos por e-mail aos outros participantes e a você.",
"this_input_will_shown_booking_this_event": "Este campo será mostrado na reserva deste evento",
"meeting_url_in_conformation_email": "O URL da reunião está no e-mail de confirmação",
"url_start_with_https": "O URL precisa começar com http:// ou https://",
"number_provided": "O número de telefone será fornecido",
"before_event_trigger": "antes do início do evento",
"event_cancelled_trigger": "quando o evento for cancelado",
"new_event_trigger": "quando um novo evento for reservado",
"email_host_action": "enviar e-mail para o host",
"email_attendee_action": "enviar e-mail aos participantes",
"sms_attendee_action": "Enviar SMS para participante",
"sms_number_action": "enviar SMS para um número específico",
"whatsapp_number_action": "enviar mensagem por WhatsApp para um número específico",
"whatsapp_attendee_action": "enviar mensagem por WhatsApp para participante",
"workflows": "Fluxos de trabalho",
"new_workflow_btn": "Novo fluxo de trabalho",
"add_new_workflow": "Adicionar um novo workflow",
@@ -1100,6 +1150,8 @@
"choose_template": "Escolher um modelo",
"custom": "Personalizado",
"reminder": "Lembrete",
"rescheduled": "Reagendado",
"completed": "Concluído",
"reminder_email": "Lembrete: {{eventType}} com {{name}} em {{date}}",
"not_triggering_existing_bookings": "Não será acionado para reservas já existentes, pois o usuário deverá fornecer o número de telefone ao fazer um pedido no evento.",
"minute_one": "{{count}} minuto",
@@ -1197,6 +1249,7 @@
"start_of_week": "Início da semana",
"recordings_title": "Gravações",
"recording": "Gravação",
"happy_scheduling": "Bom agendamento",
"select_calendars": "Selecionar em quais calendários você deseja verificar se há conflitos para evitar dupla reserva.",
"check_for_conflicts": "Verificar se há conflitos",
"view_recordings": "Ver gravações",
@@ -1238,6 +1291,7 @@
"conferencing_description": "Gerencie seus aplicativos de videoconferência para suas reuniões",
"add_conferencing_app": "Adicionar aplicativo de conferência",
"password_description": "Gerencie as configurações para as senhas da sua conta",
"set_up_two_factor_authentication": "Definir autenticação de dois fatores",
"we_just_need_basic_info": "Precisamos apenas de algumas informações básicas para configurar seu perfil.",
"skip": "Pular",
"do_this_later": "Mais tarde",
@@ -1251,6 +1305,8 @@
"connect_analytics_apps": "Conecte aplicativos de análise",
"connect_other_apps": "Conectar outros aplicativos",
"connect_web3_apps": "Conecte aplicativos web3",
"connect_messaging_apps": "Conectar com aplicativos de mensagem",
"connect_crm_apps": "Conecte aplicativos CRM",
"current_step_of_total": "Passo {{currentStep}} de {{maxSteps}}",
"add_variable": "Adicionar variável",
"custom_phone_number": "Número de telefone personalizado",
@@ -1263,12 +1319,14 @@
"location_info": "O local do evento",
"additional_notes_info": "Notas adicionais da reserva",
"attendee_name_info": "O nome da pessoa que fez a reserva",
"organizer_name_info": "Nome do organizador",
"to": "Para",
"workflow_turned_on_successfully": "Fluxo de trabalho {{workflowName}} atualizado para {{offOn}} com sucesso",
"download_responses": "Baixar respostas",
"download_responses_description": "Baixe todas as respostas para seu formulário em formato CSV.",
"download": "Baixar",
"download_recording": "Baixar gravação",
"recording_from_your_recent_call": "Uma gravação da sua chamada recente no {{appName}} está pronta para ser baixada",
"create_your_first_form": "Criar seu primeiro formulário",
"create_your_first_form_description": "Com os Formulários de roteamento, você pode fazer perguntas e encaminhar para a pessoa correta ou o tipo de evento.",
"create_your_first_webhook": "Criar seu primeiro Webhook",
@@ -1277,7 +1335,9 @@
"event_one": "evento",
"event_other": "eventos",
"profile_team_description": "Gerenciar as configurações para o perfil da sua equipe",
"profile_org_description": "Gerencie as configurações para o perfil da sua organização",
"members_team_description": "Usuários que estão no grupo",
"organization_description": "Gerencie os administradores e membros da sua organização",
"team_url": "URL da equipe",
"team_members": "Membros da equipe",
"more": "Mais",
@@ -1318,6 +1378,7 @@
"routing_forms_send_email_owner": "Enviar e-mail ao proprietário",
"routing_forms_send_email_owner_description": "Envia um e-mail ao proprietário após o envio do formulário",
"add_new_form": "Adicionar novo formulário",
"add_new_team_form": "Adicionar novo formulário à sua equipe",
"create_your_first_route": "Crie sua primeira rota",
"route_to_the_right_person": "Roteie para a pessoa certa com base nas respostas do seu formulário",
"form_description": "Crie o seu formulário para encaminhar um reservante",
@@ -1403,6 +1464,7 @@
"new_event_type_availability": "Disponibilidade de {{eventTypeTitle}}",
"error_editing_availability": "Erro ao editar disponibilidade",
"dont_have_permission": "Você não tem permissão para acessar este recurso.",
"saml_config": "SAML",
"saml_configuration_placeholder": "Por favor cole o SAML metadata do seu Provedor de Identidade aqui",
"saml_email_required": "Por favor insira um endereço de e-mail para que possamos encontrar o seu Provedor de Identidade",
"saml_sp_title": "Detalhes do Provedor de Serviços",
@@ -1421,15 +1483,19 @@
"yearly": "Anual",
"checkout": "Finalizar compra",
"your_team_disbanded_successfully": "Sua equipe foi desfeita com êxito",
"your_org_disbanded_successfully": "Sua organização foi desfeita com êxito",
"error_creating_team": "Erro ao criar equipe",
"you": "Você",
"resend_email": "Reenviar e-mail",
"member_already_invited": "O membro já foi convidado",
"enter_email_or_username": "Insira um e-mail ou nome de usuário",
"team_name_taken": "Este nome já está em uso",
"must_enter_team_name": "É preciso inserir um nome de equipe",
"team_url_required": "É preciso inserir uma URL de equipe",
"url_taken": "Este URL já está em uso",
"problem_registering_domain": "Houve um problema ao registrar o subdomínio, tente novamente ou fale com o administrador",
"team_publish": "Publicar equipe",
"number_text_notifications": "Número de telefone (notificações via texto)",
"attendee_email_variable": "E-mail do participante",
"attendee_email_info": "O e-mail da pessoa que fez a reserva",
"kbar_search_placeholder": "Digite um comando ou procure...",
@@ -1452,6 +1518,8 @@
"find_the_best_person": "Encontre a pessoa mais indicada disponível e percorra sua equipe.",
"fixed_round_robin": "Round-robin fixo",
"add_one_fixed_attendee": "Adicione um participante fixo e utilize o round-robin em uma determinada quantidade de participantes.",
"calcom_is_better_with_team": "{{appName}} é melhor com equipes",
"the_calcom_team": "A equipe de {{companyName}}",
"add_your_team_members": "Adicione membros da sua equipe aos seus tipos de evento. Use programação coletiva para incluir todos ou encontre a pessoa mais apropriada pela programação com round-robin.",
"booking_limit_reached": "O limite de reseva para este tipo de evento foi atingido",
"duration_limit_reached": "O limite de duração para este tipo de evento foi atingido",
@@ -1470,6 +1538,7 @@
"navigate_installed_apps": "Ir para aplicativos instalados",
"disabled_calendar": "Se você tiver outro calendário instalado, novas reservas serão adicionadas a ele. Caso contrário, conecte um novo calendário para não perder novas reservas.",
"enable_apps": "Ativar aplicativos",
"enable_apps_description": "Ative aplicativos que os usuários podem integrar com o {{appName}}",
"purchase_license": "Comprar uma licença",
"already_have_key": "Já tenho uma chave:",
"already_have_key_suggestion": "Copie a variável de ambiente CALCOM_LICENSE_KEY existente aqui.",
@@ -1483,6 +1552,9 @@
"no_available_apps": "Não há aplicativos disponíveis",
"no_available_apps_description": "Verifique se há aplicativos na sua implantação, em \"packages/app-store\"",
"no_apps": "Não há aplicativos ativados nesta instância do Cal",
"no_apps_configured": "Nenhum aplicativo foi configurado ainda",
"enable_in_settings": "Você pode habilitar aplicativos nas configurações",
"please_contact_admin": "Entre em contato com o administrador",
"apps_settings": "Configurações do app",
"fill_this_field": "Preencha este campo",
"options": "Opções",
@@ -1586,7 +1658,10 @@
"delete_sso_configuration_confirmation_description": "Você tem certeza que deseja remover a configuração de {{connectionType}}? Os membros do seu time que utilizam {{connectionType}} para fazer login não conseguirão acessar o Cal.com.",
"organizer_timezone": "Fuso horário do organizador",
"email_user_cta": "Ver convite",
"email_no_user_invite_heading": "Você recebeu um convite para ingressar em {{entity}} de {{appName}}",
"email_no_user_invite_subheading": "Você recebeu um convite de {{invitedBy}} para ingressar em sua equipe em {{appName}}. {{appName}} é um agendador que concilia eventos e permite que sua equipe agende reuniões sem precisar trocar e-mails.",
"email_user_invite_subheading": "Você recebeu um convite de {{invitedBy}} para ingressar na equipe \"{{teamName}}\" de {{entity}} em {{appName}}. {{appName}} é um agendador que concilia eventos e permite que {{entity}} agende reuniões sem precisar trocar e-mails.",
"email_no_user_invite_steps_intro": "Orientaremos ao longo de alguns passos rápidos para que você comece logo a agendar eventos com {{entity}} sem preocupação.",
"email_no_user_step_one": "Escolha seu nome de usuário",
"email_no_user_step_two": "Conecte com sua conta de calendário",
"email_no_user_step_three": "Defina sua disponibilidade",
@@ -1597,6 +1672,8 @@
"scheduler": "{Scheduler}",
"no_workflows": "Sem fluxos de trabalho",
"change_filter": "Mude o filtro para ver seus fluxos de trabalho pessoais e da equipe.",
"change_filter_common": "Altere o filtro para ver os resultados.",
"no_results_for_filter": "Nenhum resultado para filtrar",
"recommended_next_steps": "Próximos passos recomendados",
"create_a_managed_event": "Crie um tipo de evento gerenciado",
"meetings_are_better_with_the_right": "Reuniões são melhores com a presença dos membros certos da equipe. Convide-os agora.",
@@ -1607,7 +1684,9 @@
"no_longer_attending": "Você não está mais participando deste evento",
"attendee_no_longer_attending_subject": "Um participante não está mais participando de {{title}} às {{date}}",
"attendee_no_longer_attending": "Um participante não está mais participando do seu evento",
"attendee_no_longer_attending_subtitle": "{{name}} cancelou. Quer dizer que um assento foi liberado para este período de tempo",
"create_event_on": "Criar evento em",
"create_routing_form_on": "Criar formulário de roteamento em",
"default_app_link_title": "Defina um link padrão para o app",
"default_app_link_description": "Definir um link padrão para o app permite que todos os tipos de evento recém-criados usem o link definido para o app.",
"organizer_default_conferencing_app": "Aplicativo padrão do organizador",
@@ -1617,6 +1696,7 @@
"booking_questions_title": "Perguntas sobre reserva",
"booking_questions_description": "Personalize as perguntas feitas na página de reservas",
"add_a_booking_question": "Adicione uma pergunta",
"identifier": "Identificador",
"duplicate_email": "Este e-mail já existe",
"booking_with_payment_cancelled": "Não é mais possível pagar por este evento",
"booking_with_payment_cancelled_already_paid": "Um reembolso pelo pagamento desta reserva está a caminho.",
@@ -1627,6 +1707,7 @@
"show_on_booking_page": "Mostrar na página de reservas",
"get_started_zapier_templates": "Comece agora com modelos do Zapier",
"team_is_unpublished": "Publicação de {{team}} cancelada",
"team_is_unpublished_description": "O link de {{entity}} não está disponível por enquanto. Fale com o proprietário de {{entity}} ou peça que seja publicado.",
"team_member": "Membro da equipe",
"a_routing_form": "Formulário de roteamento",
"form_description_placeholder": "Descrição do formulário",
@@ -1656,13 +1737,16 @@
"spot_popular_event_types": "Localizar tipos de evento populares",
"spot_popular_event_types_description": "Veja quais tipos de eventos estão recebendo a maioria dos cliques e reservas",
"no_responses_yet": "Sem respostas por enquanto",
"no_routes_defined": "Nenhuma rota definida",
"this_will_be_the_placeholder": "Este será o espaço reservado",
"error_booking_event": "Ocorreu um erro ao reservar o evento, atualize a página e tente novamente",
"timeslot_missing_title": "Nenhuma alocação de tempo selecionada",
"timeslot_missing_description": "Selecione uma alocação de tempo para reservar o evento.",
"timeslot_missing_cta": "Selecione a alocação de tempo",
"switch_monthly": "Trocar para visualização mensal",
"switch_weekly": "Trocar para visualização semanal",
"switch_multiday": "Trocar para visualização diária",
"switch_columnview": "Trocar para visualização de coluna",
"num_locations": "{{num}} opções de local",
"select_on_next_step": "Selecione na próxima etapa",
"this_meeting_has_not_started_yet": "Esta reunião ainda não começou",
@@ -1701,6 +1785,7 @@
"managed_event_dialog_title_one": "O url/{{slug}} já existe para {{count}} membro. Deseja substituir?",
"managed_event_dialog_title_other": "O url/{{slug}} já existe para {{count}} membros. Deseja substituir?",
"managed_event_dialog_information_one": "<strong>{{names}}</strong> já está usando o url <strong>/{{slug}}</strong>.",
"managed_event_dialog_information_other": "<strong>{{names}}</strong> já estão usando o url <strong>/{{slug}}</strong>.",
"managed_event_dialog_clarification": "Se você escolher substituir, serão enviadas notificações. Volte e remova caso não queira sobrescrever.",
"review_event_type": "Revisar tipo de evento",
"looking_for_more_analytics": "Procurando mais análises?",
@@ -1716,12 +1801,14 @@
"least_booked_members": "Membros com menos reservas",
"events_created": "Eventos criados",
"events_completed": "Eventos concluídos",
"events_cancelled": "Eventos cancelados",
"events_rescheduled": "Eventos reagendados",
"from_last_period": "do último período",
"from_to_date_period": "De: {{startDate}} Para: {{endDate}}",
"redirect_url_warning": "A página de sucesso será desabilitada ao adicionar um redirecionamento. Não se esqueça de mencionar \"Reserva confirmada\" na sua página de sucesso personalizada.",
"event_trends": "Tendências de evento",
"clear_filters": "Limpar filtros",
"clear": "Limpar",
"hold": "Segurar",
"on_booking_option": "Coletar pagamento na reserva",
"hold_option": "Carregar taxa de não comparecimento",
@@ -1748,6 +1835,18 @@
"complete_your_booking": "Conclua sua reserva",
"complete_your_booking_subject": "Conclua sua reserva: {{title}} à(s) {{date}}",
"confirm_your_details": "Confirme suas informações",
"copy_invite_link": "Copiar link de convite",
"edit_invite_link": "Editar configurações do link",
"invite_link_copied": "Link de convite copiado",
"invite_link_deleted": "Link de convite excluído",
"invite_link_updated": "Configurações do link de convite salvas",
"link_expires_after": "Link configurado para expirar após...",
"one_day": "1 dia",
"seven_days": "7 dias",
"thirty_days": "30 dias",
"three_months": "3 meses",
"one_year": "1 ano",
"team_invite_received": "Você recebeu um convite para ingressar em {{teamName}}",
"currency_string": "{{amount, currency}}",
"charge_card_dialog_body": "Você está prestes a cobrar {{amount, currency}} do participante. Tem certeza de que deseja continuar?",
"charge_attendee": "Cobrar {{amount, currency}} do participante",
@@ -1756,6 +1855,7 @@
"email_invite_team_bulk": "{{userCount}} usuários foram convidados",
"error_collecting_card": "Erro ao coletar cartão",
"image_size_limit_exceed": "A imagem carregada não deve ultrapassar o limite de 5 MB",
"unauthorized_workflow_error_message": "{{errorCode}}: você não tem autorização para habilidar ou desabilitar este fluxo de trabalho",
"inline_embed": "Inserção embutida",
"load_inline_content": "Carrega seu tipo de evento embutido diretamente no conteúdo restante do site.",
"floating_pop_up_button": "Botão pop-up flutuante",
@@ -1775,6 +1875,69 @@
"connect_google_workspace": "Conectar com o Google Workspace",
"google_workspace_admin_tooltip": "Você deve ser administrador do Google Workspace para usar este recurso",
"first_event_type_webhook_description": "Crie seu primeiro webhook para este tipo de evento",
"install_app_on": "Instalar aplicativo em",
"create_for": "Criar para",
"insights_all_org_filter": "Todos os apps"
"setup_organization": "Definir uma Organização",
"organization_banner_description": "Crie um ambiente onde suas equipes podem criar tipos de evento, fluxos de trabalho e aplicativos compartilhados com agendamento coletivo e round robin.",
"organization_banner_title": "Gerenciar organizações com múltiplas equipes",
"set_up_your_organization": "Configurar sua organização",
"organizations_description": "Organizações são ambientes compartilhados em que as equipes podem criar fluxos de trabalho, aplicativos, tipos de evento compartilhados e muito mais.",
"must_enter_organization_name": "Requer um nome de organização",
"must_enter_organization_admin_email": "Requer o endereço de e-mail da sua organização",
"admin_email": "Endereço de e-mail da sua organização",
"admin_username": "Nome do usuário do administrador",
"organization_name": "Nome da organização",
"organization_url": "URL da organização",
"organization_verify_header": "Verifique o e-mail da sua organização",
"organization_verify_email_body": "Use o código abaixo para verificar seu endereço de e-mail e continuar a configuração da sua organização.",
"additional_url_parameters": "Parâmetros adicionais de URL",
"about_your_organization": "Sobre a sua organização",
"about_your_organization_description": "Organizações são ambientes compartilhados em que você pode criar múltiplas equipes com membros, fluxos de trabalho, aplicativos, tipos de evento compartilhados e muito mais.",
"create_your_teams": "Criar suas equipes",
"create_your_teams_description": "Comece a agendar juntos ao adicionar os membros das suas equipes à sua organização",
"invite_organization_admins": "Convidar administradores da sua organização",
"invite_organization_admins_description": "Estes administradores terão acesso a todas as equipes na sua organização. Você pode adicionar administradores e membros da equipe mais tarde.",
"set_a_password": "Definir senha",
"set_a_password_description": "Será criada uma nova conta de usuário com o e-mail da sua organização e esta senha.",
"organization_logo": "Logotipo da organização",
"organization_about_description": "Uma breve descrição sobre sua organização. Isso aparecerá na página do perfli público da sua organização.",
"ill_do_this_later": "Farei isso mais tarde",
"verify_your_email": "Verifique seu e-mail",
"enter_digit_code": "Insira o código de seis dígitos enviado para {{email}}",
"verify_email_organization": "Verifique seu e-mail para criar uma organização",
"code_provided_invalid": "O código inserido não é válido, tente novamente",
"email_already_used": "Este e-mail já está sendo usado",
"organization_admin_invited_heading": "Você recebeu um convite para ingressar em {{orgName}}",
"organization_admin_invited_body": "Ingresse na sua equipe em {{orgName}} e comece a focar na reunião, não em fazer reuniões!",
"duplicated_slugs_warning": "Não foi possível criar as equipes a seguir devido a campos de dados dinâmicos: {{slugs}}",
"team_names_empty": "Nomes de equipe não podem ser vazios",
"team_names_repeated": "Nomes de equipe não podem ser repetidos",
"user_belongs_organization": "O usuário pertence a uma organização",
"org_no_teams_yet": "Esta organização ainda não tem nenhuma equipe",
"org_no_teams_yet_description": "Se você for administrador, não se esqueça de criar equipes para mostrar aqui.",
"set_up": "Configurar",
"set_up_your_profile": "Configurar seu perfil",
"set_up_your_profile_description": "Deixe que as pessoas saibam quem você é em {{orgName}} e quando interagirem com seu link público.",
"my_profile": "Meu perfil",
"my_settings": "Minhas configurações",
"crm": "CRM",
"messaging": "Mensagens",
"sender_id_info": "Nome ou número mostrado como remetente do SMS (alguns países não permitem IDs de remetentes com caracteres alfanuméricos)",
"org_admins_can_create_new_teams": "Apenas o administrador da sua organização pode criar equipes novas",
"google_new_spam_policy": "A nova política de spams do Google pode impedir o recebimento de notificações do calendário e e-mail sobre esta reserva.",
"resolve": "Resolver",
"no_organization_slug": "Houve um erro ao criar equipes para esta organizazção. Falta o campo de dados dinâmico da URL.",
"org_name": "Nome da organização",
"org_url": "URL da organização",
"copy_link_org": "Copiar link para a organização",
"404_the_org": "A organização",
"404_the_team": "A equipe",
"404_claim_entity_org": "Solicite o subdomínio para a sua organização",
"404_claim_entity_team": "Solicite esta equipe e comece a gerenciar agendamentos coletivamente",
"insights_all_org_filter": "Todos os apps",
"insights_team_filter": "Equipe: {{teamName}}",
"insights_user_filter": "Usuário: {{userName}}",
"insights_subtitle": "Veja insights de reserva em seus eventos",
"custom_plan": "Plano personalizado",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Adicione suas novas strings aqui em cima ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
+117 -1
View File
@@ -12,12 +12,22 @@
"have_any_questions": "Tem perguntas? Estamos disponíveis para ajudar.",
"reset_password_subject": "{{appName}}: Instruções de redefinição da senha",
"verify_email_subject": "{{appName}}: Verificar sua conta",
"check_your_email": "Confirme o seu e-mail",
"verify_email_page_body": "Nós enviamos um e-mail para {{email}}. É importante verificar seu endereço de e-mail para garantir que você receberá as comunicações de {{appName}}.",
"verify_email_banner_body": "Confirme o seu endereço de e-mail para garantir a melhor entrega possível de correio eletrónico e de agenda",
"verify_email_email_header": "Confirme o seu endereço de e-mail",
"verify_email_email_button": "Confirmar o seu e-mail",
"verify_email_email_body": "Confirme o seu endereço de e-mail clicando no botão abaixo.",
"verify_email_email_link_text": "Aqui está a ligação caso não goste de clicar em botões:",
"email_sent": "E-mail enviado com sucesso",
"event_declined_subject": "Declinado: {{title}} em {{date}}",
"event_cancelled_subject": "Cancelado: {{title}} a {{date}}",
"event_request_declined": "O seu pedido de evento foi declinado",
"event_request_declined_recurring": "O seu pedido de evento recorrente foi recusado",
"event_request_cancelled": "O seu evento agendado foi cancelado",
"organizer": "Organizador",
"need_to_reschedule_or_cancel": "Precisa reagendar ou cancelar?",
"no_options_available": "Não existem opções disponíveis",
"cancellation_reason": "Motivo do cancelamento",
"cancellation_reason_placeholder": "Porque está a cancelar? (opcional)",
"rejection_reason": "Motivo da rejeição",
@@ -77,7 +87,9 @@
"your_meeting_has_been_booked": "A sua reunião foi reservada",
"event_type_has_been_rescheduled_on_time_date": "Seu {{title}} foi remarcado para {{date}}.",
"event_has_been_rescheduled": "O seu evento foi reagendado.",
"request_reschedule_subtitle": "{{organizer}} cancelou a reserva e pediu para que escolhesse outro horário.",
"request_reschedule_title_organizer": "Solicitou um reagendamento a {{attendee}}",
"request_reschedule_subtitle_organizer": "Você cancelou a reserva e {{attendee}} deve escolher um novo horário para a reserva consigo.",
"rescheduled_event_type_subject": "Pedido de reagendamento enviado: {{eventType}} com {{name}} em {{date}}",
"requested_to_reschedule_subject_attendee": "Acção necessária para reagendamento: Por favor reserve uma nova hora para {{eventType}} com {{name}}",
"hi_user_name": "Olá {{name}}",
@@ -106,6 +118,7 @@
"team_info": "Informações da equipa",
"request_another_invitation_email": "Se não quiser utilizar {{toEmail}} como email do {{appName}}, ou já tem uma conta em {{appName}}, por favor peça outro convite para esse email.",
"you_have_been_invited": "Recebeu um convite para juntar-se à equipa {{teamName}}",
"user_invited_you": "{{user}} enviou um convite para se juntar a {{team}} de {{entity}} em {{appName}}",
"hidden_team_member_title": "Está oculto nesta equipa",
"hidden_team_member_message": "O seu lugar não está pago, faça upgrade para PRO ou informe ao proprietário da equipa que pode pagar pelo seu lugar.",
"hidden_team_owner_message": "Precisa de uma conta Pro para usar equipas, ficará oculto até que actualize.",
@@ -116,6 +129,8 @@
"team_upgrade_banner_description": "Obrigado por experimentar o nosso novo plano de equipa. Verificámos que a sua equipa \"{{teamName}}\" necessita de ser atualizada.",
"upgrade_banner_action": "Atualize aqui",
"team_upgraded_successfully": "A sua equipa foi actualizada com sucesso!",
"org_upgrade_banner_description": "Obrigado por experimentar o nosso plano Organization. Verificámos que a sua Organização \"{{teamName}}\" necessita de ser atualizada.",
"org_upgraded_successfully": "A sua Organização foi atualizada com sucesso!",
"use_link_to_reset_password": "Use a ligação abaixo para redefinir a sua senha",
"hey_there": "Olá,",
"forgot_your_password_calcom": "Esqueceu-se da sua senha? - {{appName}}",
@@ -182,6 +197,7 @@
"blog": "Blog",
"blog_description": "Leia as nossas últimas notícias e artigos",
"join_our_community": "Junte-se à nossa comunidade",
"join_our_discord": "Junte-se ao nosso Discord",
"404_claim_entity_user": "Obtenha o seu nome de utilizador e agende eventos",
"popular_pages": "Páginas populares",
"register_now": "Registe-se Agora",
@@ -189,6 +205,7 @@
"page_doesnt_exist": "Esta página não existe.",
"check_spelling_mistakes_or_go_back": "Verificar erros ortográficos ou voltar à página anterior.",
"404_page_not_found": "404: Não foi possível encontrar esta página.",
"booker_event_not_found": "Não conseguimos encontrar o evento que está a tentar reservar.",
"getting_started": "Começar",
"15min_meeting": "Reunião de 15 min",
"30min_meeting": "Reunião de 30 min",
@@ -224,11 +241,14 @@
"done": "Concluído",
"all_done": "Tudo pronto!",
"all": "Todos as aplicações",
"yours": "A sua conta",
"available_apps": "Aplicações disponíveis",
"check_email_reset_password": "Verifique o seu email. Enviámos uma ligação para redefinir a sua senha.",
"finish": "Terminar",
"organization_general_description": "Faça a gestão das definições do idioma e fuso horário da sua equipa",
"few_sentences_about_yourself": "Algumas frases sobre si. Isto será mostrado na sua página pessoal.",
"nearly_there": "Está quase",
"nearly_there_instructions": "Por último, uma breve descrição sobre si e uma fotografia ajudam a obter reservas e a mostrar às pessoas com quem estão a reservar.",
"set_availability_instructions": "Definir períodos em que está disponível numa base recorrente. Mais tarde poderá criar mais destes, e atribuí-los a diferentes calendários.",
"set_availability": "Definir disponibilidade",
"continue_without_calendar": "Continuar sem calendário",
@@ -284,6 +304,18 @@
"success": "Sucesso",
"failed": "Falhou",
"password_has_been_reset_login": "A sua senha foi redefinida. Agora pode iniciar sessão com a sua senha recém-criada.",
"layout": "Disposição",
"bookerlayout_default_title": "Vista predefinida",
"bookerlayout_description": "Pode selecionar várias e os seus clientes podem mudar de visualização.",
"bookerlayout_user_settings_title": "Disposição da reserva",
"bookerlayout_user_settings_description": "Pode selecionar várias e os clientes podem alternar entre vistas. Isto pode ser sobreposto para cada evento.",
"bookerlayout_month_view": "Mês",
"bookerlayout_week_view": "Semanal",
"bookerlayout_column_view": "Coluna",
"bookerlayout_error_min_one_enabled": "Tem de estar ativa pelo menos uma disposição.",
"bookerlayout_error_default_not_enabled": "A disposição selecionada como a vista predefinida não faz parte das disposições ativas.",
"bookerlayout_error_unknown_layout": "A disposição que selecionou não é uma disposição válida.",
"bookerlayout_override_global_settings": "Pode gerir isto para todos os seus tipos de eventos em <2>definições/ aparência</2> ou <6>sobrepor apenas para este evento</6>.",
"unexpected_error_try_again": "Ocorreu um erro inesperado. Tente de novo.",
"sunday_time_error": "Hora inválida no domingo",
"monday_time_error": "Hora inválida na segunda-feira",
@@ -296,6 +328,7 @@
"error_end_time_next_day": "A hora de fim não pode ser superior a 24 horas",
"back_to_bookings": "Voltar às Reservas",
"free_to_pick_another_event_type": "Sinta-se à vontade para escolher outro evento a qualquer hora.",
"cancelled": "Cancelado",
"cancellation_successful": "Cancelado com Sucesso",
"really_cancel_booking": "Deseja realmente cancelar a sua reserva?",
"cannot_cancel_booking": "Não pode cancelar esta reserva",
@@ -358,6 +391,7 @@
"user_dynamic_booking_disabled": "Alguns dos utilizadores do grupo desactivaram as reservas dinâmicas de grupos",
"allow_dynamic_booking_tooltip": "As ligações de reservas dinâmicas de grupos podem ser criadas dinamicamente ao adicionar múltiplos nomes de utilizador com um '+'. Por exemplo: '{{appName}}/duarte+marta'",
"allow_dynamic_booking": "Permitir que os participantes façam reservas consigo através de reservas dinâmicas de grupos",
"dynamic_booking": "Ligações dinâmicas de grupos",
"email": "Email",
"email_placeholder": "nome@exemplo.com",
"full_name": "Nome Completo",
@@ -379,6 +413,8 @@
"team_webhooks": "Webhooks da equipa",
"create_new_webhook_to_account": "Criar um webhook na sua conta",
"new_webhook": "Novo Webhook",
"receive_cal_meeting_data": "Receba os dados em tempo real da reunião {{appName}} num URL especificado quando um evento for agendado ou cancelado.",
"receive_cal_event_meeting_data": "Receba os dados em tempo real da reunião {{appName}} num URL especificado quando este evento for agendado ou cancelado.",
"responsive_fullscreen_iframe": "Iframe responsivo de ecrã inteiro",
"loading": "A carregar...",
"deleting": "A eliminar...",
@@ -441,6 +477,7 @@
"max_limit_allowed_hint": "Pode ter um máximo de {{limit}} caracteres",
"invalid_password_hint": "A palavra-passe deve ter no mínimo {{passwordLength}} caracteres, com pelo menos um número e uma mistura de letras maiúsculas e minúsculas",
"incorrect_password": "Palavra-Passe incorreta",
"incorrect_email_password": "O e-mail ou a palavra-passe estão incorretos.",
"use_setting": "Usar Configuração",
"am_pm": "am/pm",
"time_options": "Opções de Hora",
@@ -512,10 +549,13 @@
"your_team_updated_successfully": "A sua equipa foi atualizada com sucesso.",
"about": "Sobre",
"team_description": "Algumas frases sobre a sua equipa. Isso aparecerá na página url da sua equipa.",
"org_description": "Algumas frases sobre a sua organização. Isto será apresentado no URL da página da sua organização.",
"members": "Membros",
"organization_members": "Membros da organização",
"member": "Membro",
"number_member_one": "{{count}} membro",
"number_member_other": "{{count}} membros",
"number_selected": "{{count}} selecionado(s)",
"owner": "Proprietário",
"admin": "Administrador",
"administrator_user": "Administrador",
@@ -546,6 +586,8 @@
"confirm_all": "Confirmar tudo",
"disband_team": "Dissolver Equipa",
"disband_team_confirmation_message": "De certeza que quer desmantelar esta equipa? Qualquer pessoa com quem tenha partilhado esta ligação de equipa deixará de poder fazer reservas através da respectiva ligação.",
"disband_org": "Dissolver Organização",
"disband_org_confirmation_message": "Tem a certeza que deseja dissolver esta Organização? Todas as equipas e membros serão eliminados.",
"remove_member_confirmation_message": "Tem a certeza de que deseja remover este membro da equipa?",
"confirm_disband_team": "Sim, dissolver equipa",
"confirm_remove_member": "Sim, remover membro",
@@ -620,6 +662,7 @@
"event_type_updated_successfully": "Tipo de evento atualizado com sucesso",
"event_type_deleted_successfully": "Tipo de evento eliminado com sucesso",
"hours": "Horas",
"people": "Pessoas",
"your_email": "Seu Email",
"change_avatar": "Alterar Avatar",
"language": "Idioma",
@@ -652,6 +695,7 @@
"create_new_team": "Criar uma Equipa",
"open_invitations": "Convites Abertos",
"new_team": "Nova Equipa",
"create_first_team_and_invite_others": "Crie a sua primeira equipa e convide outros utilizadores para trabalhar em conjunto.",
"create_team_to_get_started": "Criar uma equipa para começar",
"teams": "Equipas",
"team": "Equipa",
@@ -730,6 +774,7 @@
"cal_provide_huddle01_meeting_url": "O {{appName}} irá fornecer um URL de reunião vídeo do Huddle01 Web3.",
"cal_provide_teams_meeting_url": "O {{appName}} fornecerá um URL de reunião para MS Teams. ATENÇÃO: TEM DE TER UMA CONTA DE TRABALHO OU ESCOLAR",
"require_payment": "Requer Pagamento",
"you_need_to_add_a_name": "É necessário adicionar um nome",
"commission_per_transaction": "comissão por transação",
"event_type_updated_successfully_description": "O seu tipo de evento foi atualizado com sucesso.",
"hide_event_type": "Ocultar Tipo de Evento",
@@ -822,11 +867,13 @@
"no_category_apps": "Sem aplicações de {{category}}",
"all_apps": "Todas as aplicações",
"no_category_apps_description_calendar": "Adicione uma aplicação de calendário para verificar se existem conflitos e assim evitar sobreposição de marcações",
"no_category_apps_description_conferencing": "Experimente adicionar uma aplicação de conferência para chamadas vídeo com os seus clientes",
"no_category_apps_description_payment": "Adicione uma aplicação de pagamentos para facilitar a transação entre si e os seus clientes",
"no_category_apps_description_analytics": "Adicionar uma aplicação de análise às suas páginas de reservas",
"no_category_apps_description_automation": "Adicionar uma aplicação de automatização a utilizar",
"no_category_apps_description_other": "Adicione qualquer outro tipo de aplicações para fazer todos os tipos de coisas",
"no_category_apps_description_web3": "Adicione uma aplicação web3 às suas páginas de reservas",
"no_category_apps_description_messaging": "Adicione uma aplicação de mensagens para configurar notificações e lembretes personalizados",
"no_category_apps_description_crm": "Adicione um aplicativo CRM para manter o controle de com quem você encontrou",
"installed_app_calendar_description": "Defina o(s) calendário(s) para verificar se existem conflitos e assim evitar marcações sobrepostas.",
"installed_app_payment_description": "Configure os serviços de processamento de pagamentos que serão utilizados nas cobranças aos seus clientes.",
@@ -862,6 +909,7 @@
"create_events_on": "Criar eventos em:",
"enterprise_license": "Esta é uma funcionalidade empresarial",
"enterprise_license_description": "Para ativar esta funcionalidade, obtenha uma chave de instalação na consola {{consoleUrl}} e adicione-a ao seu .env como CALCOM_LICENSE_KEY. Se a sua equipa já tem uma licença, entre em contacto com {{supportMail}} para obter ajuda.",
"enterprise_license_development": "Pode testar este recurso no modo de desenvolvimento. Para utilização em produção, um administrador deverá aceder a <2>/auth/setup</2> para inserir a chave da licença.",
"missing_license": "Licença em falta",
"signup_requires": "Necessita de licença comercial",
"signup_requires_description": "De momento a {{companyName}} não oferece uma versão gratuita de código aberto da página de registo. Para aceder completamente aos componentes de registo tem de adquirir uma licença comercial. Para uso pessoal, recomendamos a Prisma Data Platform ou qualquer outra interface Postgres para criar contas.",
@@ -954,6 +1002,9 @@
"user_impersonation_heading": "Representação de utilizador",
"user_impersonation_description": "Permite à nossa equipa de suporte iniciar sessão temporariamente em seu nome para rapidamente resolver quaisquer erros que nos reporte.",
"team_impersonation_description": "Permite que os administradores da sua equipa iniciem a sessão temporariamente em seu nome.",
"make_team_private": "Tornar a equipa privada",
"make_team_private_description": "Os membros da sua equipa não poderão ver outros membros da equipa quando esta opção estiver ativada.",
"you_cannot_see_team_members": "Não pode ver todos os membros da equipa de uma equipa privada.",
"allow_booker_to_select_duration": "Permitir que o responsável pela reserva selecione a duração",
"impersonate_user_tip": "Todas as utilizações desta funcionalidade são auditadas.",
"impersonating_user_warning": "Representar o nome de utilizador \"{{user}}\".",
@@ -1198,6 +1249,7 @@
"start_of_week": "Início da semana",
"recordings_title": "Gravações",
"recording": "Gravação",
"happy_scheduling": "Votos de bons agendamentos",
"select_calendars": "Selecione os calendários nos quais pretende procurar por conflitos para evitar sobreposição de reservas.",
"check_for_conflicts": "Verificar se existem conflitos",
"view_recordings": "Ver gravações",
@@ -1326,6 +1378,7 @@
"routing_forms_send_email_owner": "Enviar e-mail ao proprietário",
"routing_forms_send_email_owner_description": "Envia um e-mail ao proprietário quando o formulário for submetido",
"add_new_form": "Adicionar novo formulário",
"add_new_team_form": "Adicionar novo formulário à sua equipa",
"create_your_first_route": "Crie a sua primeira rota",
"route_to_the_right_person": "Encaminhe para a pessoa certa com base nas respostas ao seu formulário",
"form_description": "Crie o seu formulário para encaminhar um reservante",
@@ -1430,6 +1483,7 @@
"yearly": "Anual",
"checkout": "Finalização da compra",
"your_team_disbanded_successfully": "A sua equipa foi dissolvida com sucesso",
"your_org_disbanded_successfully": "A sua organização foi dissolvida com sucesso",
"error_creating_team": "Erro ao criar a equipa",
"you": "Você",
"resend_email": "Reenviar e-mail",
@@ -1439,6 +1493,7 @@
"must_enter_team_name": "Deve especificar um nome para a equipa",
"team_url_required": "Deve especificar um endereço para a equipa",
"url_taken": "Este endereço já está a ser utilizado",
"problem_registering_domain": "Houve um problema ao registar o subdomínio. Tente novamente ou contacte um administrador",
"team_publish": "Publicar equipa",
"number_text_notifications": "Número de telefone (notificações de texto)",
"attendee_email_variable": "E-mail do participante",
@@ -1603,7 +1658,10 @@
"delete_sso_configuration_confirmation_description": "Tem a certeza que pretende eliminar a configuração {{connectionType}}? Os membros da sua equipa que utilizem {{connectionType}} para o início de sessão deixarão de poder aceder a Cal.com.",
"organizer_timezone": "Fuso horário do organizador",
"email_user_cta": "Ver convite",
"email_no_user_invite_heading": "Foi convidado para se juntar a um {{entity}} {{appName}}",
"email_no_user_invite_subheading": "Recebeu um convite de {{invitedBy}} para fazer parte da respetiva equipa em {{appName}}. {{appName}} é um ferramenta de conciliação e agendamento de eventos que lhe permite a si e à sua equipa agendar reuniões sem o pingue-pongue de e-mails.",
"email_user_invite_subheading": "Recebeu um convite de {{invitedBy}} para fazer parte da sua {{entity}} `{{teamName}}` em {{appName}}. {{appName}} é uma ferramenta de conciliação e agendamento de eventos que lhe permite a si e à sua {{entity}} agendar reuniões sem o pingue-pongue de mensagens eletrónicas.",
"email_no_user_invite_steps_intro": "Vamos ajudar com alguns pequenos passos para que você e a sua {{entity}} possam desfrutar rapidamente de uma gestão de agendamentos sem complicações.",
"email_no_user_step_one": "Escolha o seu nome de utilizador",
"email_no_user_step_two": "Associe a sua conta de calendário",
"email_no_user_step_three": "Defina a sua Disponibilidade",
@@ -1614,6 +1672,8 @@
"scheduler": "{Scheduler}",
"no_workflows": "Sem fluxos de trabalho",
"change_filter": "Altere o filtro para ver os seus fluxos de trabalho pessoais e da equipa.",
"change_filter_common": "Alterar o filtro para ver os resultados.",
"no_results_for_filter": "Sem resultados para o filtro",
"recommended_next_steps": "Próximos passos recomendados",
"create_a_managed_event": "Criar um tipo de evento gerido",
"meetings_are_better_with_the_right": "Os eventos são melhores com os elementos certos da equipa. Convide-os agora.",
@@ -1624,7 +1684,9 @@
"no_longer_attending": "Você já não vai estar presente neste evento",
"attendee_no_longer_attending_subject": "Um participante não irá estar presente em {{title}} em {{date}}",
"attendee_no_longer_attending": "Um participante já não irá participar no seu evento",
"attendee_no_longer_attending_subtitle": "{{name}} cancelou. Isto significa que existe uma nova disponibilidade para este horário",
"create_event_on": "Criar evento em",
"create_routing_form_on": "Criar formulário de encaminhamento em",
"default_app_link_title": "Definir uma ligação predefinida de aplicação",
"default_app_link_description": "Ao definir uma ligação predefinida da aplicação, permite que todos os tipos de eventos recém-criados utilizem a ligação de aplicação que definiu.",
"organizer_default_conferencing_app": "Aplicação predefinida do organizador",
@@ -1645,6 +1707,7 @@
"show_on_booking_page": "Mostrar na página de reservas",
"get_started_zapier_templates": "Comece a utilizar os modelos Zapier",
"team_is_unpublished": "A equipa {{team}} ainda não está publicada",
"team_is_unpublished_description": "Esta ligação de {{entity}} não está disponível neste momento. Por favor, entre em contacto com o responsável por {{entity}} ou solicite-lhe a respetiva publicação.",
"team_member": "Membro da equipa",
"a_routing_form": "Um formulário de encaminhamento",
"form_description_placeholder": "Descrição do formulário",
@@ -1674,7 +1737,9 @@
"spot_popular_event_types": "Identifique tipos de eventos populares",
"spot_popular_event_types_description": "Veja quais os tipos de eventos que estão a receber mais cliques e reservas",
"no_responses_yet": "Ainda sem respostas",
"no_routes_defined": "Sem rotas definidas",
"this_will_be_the_placeholder": "Isto será o marcador de posição",
"error_booking_event": "Ocorreu um erro ao reservar o evento. Atualize a página e tente novamente",
"timeslot_missing_title": "Nenhuma janela horária selecionada",
"timeslot_missing_description": "Selecione uma janela horária para reservar o evento.",
"timeslot_missing_cta": "Selecionar janela horária",
@@ -1720,6 +1785,7 @@
"managed_event_dialog_title_one": "A URL /{{slug}} já existe para {{count}} membro. Pretende substituir a mesma?",
"managed_event_dialog_title_other": "A URL /{{slug}} já existe para {{count}} membros. Pretende substituir a mesma?",
"managed_event_dialog_information_one": "<strong>{{names}}</strong> já está a utilizar a URL <strong>/{{slug}}</strong>.",
"managed_event_dialog_information_other": "<strong>{{names}}</strong> já estão a utilizar o URL <strong>/{{slug}}</strong>.",
"managed_event_dialog_clarification": "Se optar pela substituição, iremos notificá-los. Retroceda e remova-os se não quiser substituir.",
"review_event_type": "Rever Tipo de Evento",
"looking_for_more_analytics": "À procura de mais análises?",
@@ -1772,6 +1838,15 @@
"copy_invite_link": "Copiar link do convite",
"edit_invite_link": "Editar configurações do link",
"invite_link_copied": "Link do convite copiado",
"invite_link_deleted": "Ligação do convite copiada",
"invite_link_updated": "Definições da ligação de convite guardadas",
"link_expires_after": "Ligações definidas para expirar depois...",
"one_day": "1 dia",
"seven_days": "7 dias",
"thirty_days": "30 dias",
"three_months": "3 meses",
"one_year": "1 ano",
"team_invite_received": "Recebeu um convite para se juntar a {{teamName}}",
"currency_string": "{{amount, currency}}",
"charge_card_dialog_body": "Está em vias de cobrar {{amount, currency}} ao participante. Tem a certeza que pretende continuar?",
"charge_attendee": "Cobrar {{amount, currency}} ao participante",
@@ -1780,6 +1855,7 @@
"email_invite_team_bulk": "Foram convidados {{userCount}} utilizadores",
"error_collecting_card": "Erro ao processar o cartão",
"image_size_limit_exceed": "A imagem enviada não deve exceder o limite de tamanho de 5MB",
"unauthorized_workflow_error_message": "{{errorCode}}: Não tem autorização para ativar ou desativar este fluxo de trabalho",
"inline_embed": "Incorporação em linha",
"load_inline_content": "Carrega o seu tipo de evento diretamente e em linha, em conjunto com os conteúdos do seu outro site.",
"floating_pop_up_button": "Botão pop-up flutuante",
@@ -1799,7 +1875,30 @@
"connect_google_workspace": "Associar o Google Workspace",
"google_workspace_admin_tooltip": "Tem de ser um Administrador do Workspace para utilizar esta funcionalidade",
"first_event_type_webhook_description": "Crie o seu primeiro webhook para este tipo de evento",
"install_app_on": "Instalar aplicação em",
"create_for": "Criar para",
"setup_organization": "Configurar uma Organização",
"organization_banner_description": "Crie um ambiente onde as suas equipas possam criar aplicações partilhadas, fluxos de trabalho e tipos de eventos com distribuição equilibrada e agendamento coletivo.",
"organization_banner_title": "Faça a gestão de múltiplas organizações com múltiplas equipas",
"set_up_your_organization": "Configurar a sua organização",
"organizations_description": "As organizações são ambientes partilhados onde as equipas podem criar tipos de eventos partilhados, aplicações, fluxos de trabalho e muito mais.",
"must_enter_organization_name": "Deve indicar um nome para a organização",
"must_enter_organization_admin_email": "Deve indicar o endereço de e-mail da sua organização",
"admin_email": "O endereço de e-mail da sua organização",
"admin_username": "Nome de utilizador do administrador",
"organization_name": "Nome da organização",
"organization_url": "URL da organização",
"organization_verify_header": "Confirme o e-mail da sua organização",
"organization_verify_email_body": "Utilize o código abaixo para confirmar o seu endereço de e-mail para continuar a configurar a sua organização.",
"additional_url_parameters": "Parâmetros adicionais da URL",
"about_your_organization": "Sobre a sua organização",
"about_your_organization_description": "As organizações são ambientes partilhados onde pode criar, entre outras coisas, várias equipas com membros, tipos de eventos, aplicações e fluxos de trabalho partilhados.",
"create_your_teams": "Crie as suas equipas",
"create_your_teams_description": "Comece a agendar em conjunto adicionando os membros da sua equipa à sua organização",
"invite_organization_admins": "Convide os administradores da sua organização",
"invite_organization_admins_description": "Estes administradores terão acesso a todas as equipas na sua organização. Pode adicionar administradores e membros da equipa mais tarde.",
"set_a_password": "Definir uma palavra-passe",
"set_a_password_description": "Isto irá criar uma conta de utilizador com o e-mail da sua organização e esta palavra-passe.",
"organization_logo": "Logo da Organização",
"organization_about_description": "Breve descrição sobre sua organização. Isso vai aparecer na página de perfil pública da sua organização.",
"ill_do_this_later": "Farei isso depois",
@@ -1808,20 +1907,37 @@
"verify_email_organization": "Verifique seu e-mail para criar uma organização",
"code_provided_invalid": "O código fornecido inválido, tente novamente",
"email_already_used": "E-mail já está sendo usado",
"organization_admin_invited_heading": "Recebeu um convite para se juntar a {{orgName}}",
"organization_admin_invited_body": "Junte-se à sua equipa em {{orgName}} e comece a concentrar-se em reunir e não em fazer reuniões!",
"duplicated_slugs_warning": "Os seguintes times não puderam ser criados devido a slugs duplicados: {{slugs}}",
"team_names_empty": "Nomes de equipes não podem estar vazios",
"team_names_repeated": "Nomes de equipes não podem se repetir",
"user_belongs_organization": "Usuário pertence a uma organização",
"org_no_teams_yet": "Essaorganização ainda não tem times",
"org_no_teams_yet_description": "Se é um administrador, deve criar equipas para serem apresentadas aqui.",
"set_up": "Configurar",
"set_up_your_profile": "Configurar o seu perfil",
"set_up_your_profile_description": "Deixe as pessoas saber quem você é dentro de {{orgName}} e quando interagem com a sua ligação pública.",
"my_profile": "Meu perfil",
"my_settings": "Minhas configurações",
"crm": "CRM",
"messaging": "Mensagens",
"sender_id_info": "Nome ou número mostrado como remetente de um SMS (alguns países não permitem identificadores alfanuméricos de remetentes)",
"org_admins_can_create_new_teams": "Apenas o administrador da sua organização pode criar equipas",
"google_new_spam_policy": "A nova política de SPAM do Google pode impedir que receba notificações de e-mail e de agenda sobre esta reserva.",
"resolve": "Resolver",
"no_organization_slug": "Ocorreu um erro ao criar equipas para esta organização. Falta o slug do URL.",
"org_name": "Nome da organização",
"org_url": "URL da Organização",
"copy_link_org": "Copie o link para organização",
"404_the_org": "A organização",
"404_the_team": "O time",
"404_claim_entity_org": "Reivindicar o seu subdomínio para a sua organização",
"404_claim_entity_team": "Reivindicar esta equipa e começar a gerir os horários em grupo",
"insights_all_org_filter": "Todos as aplicações",
"insights_team_filter": "Time: {{teamName}}",
"insights_user_filter": "Usuário {{userName}}"
"insights_user_filter": "Usuário {{userName}}",
"insights_subtitle": "Veja as informações de reservas sobre os seus eventos",
"custom_plan": "Plano Personalizado",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Adicione as suas novas strings acima aqui ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
+110 -1
View File
@@ -1305,6 +1305,8 @@
"connect_analytics_apps": "Conectați aplicații de analiză",
"connect_other_apps": "Conectați alte aplicații",
"connect_web3_apps": "Conectați aplicații Web3",
"connect_messaging_apps": "Conectați aplicații de mesagerie",
"connect_crm_apps": "Conectați aplicații CRM",
"current_step_of_total": "Pasul {{currentStep}} din {{maxSteps}}",
"add_variable": "Adăugare variabilă",
"custom_phone_number": "Număr de telefon personalizat",
@@ -1317,12 +1319,14 @@
"location_info": "Locul de desfășurare a evenimentului",
"additional_notes_info": "Observații suplimentare privind rezervarea",
"attendee_name_info": "Numele persoanei care efectuează rezervarea",
"organizer_name_info": "Numele organizatorului",
"to": "Către",
"workflow_turned_on_successfully": "Fluxul de lucru {{workflowName}} a fost {{offOn}} cu succes",
"download_responses": "Descărcați răspunsurile",
"download_responses_description": "Descărcați în format CSV toate răspunsurile la formularul dvs.",
"download": "Descarcă",
"download_recording": "Descărcați înregistrarea",
"recording_from_your_recent_call": "O înregistrare a apelului dvs. recent de pe {{appName}} poate fi acum descărcată",
"create_your_first_form": "Creați primul dvs. formular",
"create_your_first_form_description": "Cu ajutorul formularelor de direcționare, puteți adresa întrebări de calificare și le puteți redirecționa persoanei sau tipului de eveniment potrivit.",
"create_your_first_webhook": "Creați primul dvs. webhook",
@@ -1331,7 +1335,9 @@
"event_one": "eveniment",
"event_other": "evenimente",
"profile_team_description": "Gestionați setările pentru profilul echipei dvs.",
"profile_org_description": "Gestionați setările profilului organizației dvs.",
"members_team_description": "Utilizatori care sunt în grup",
"organization_description": "Gestionați administratorii și membrii din organizația dvs.",
"team_url": "URL-ul echipei",
"team_members": "Membrii echipei",
"more": "Mai mult",
@@ -1372,6 +1378,7 @@
"routing_forms_send_email_owner": "Trimiteți un e-mail către proprietar",
"routing_forms_send_email_owner_description": "Trimite un e-mail către proprietar atunci când este trimis formularul",
"add_new_form": "Adăugați un formular nou",
"add_new_team_form": "Adăugați un formular nou pentru echipa dvs.",
"create_your_first_route": "Creați-vă primul parcurs",
"route_to_the_right_person": "Direcționați către persoana potrivită, pe baza răspunsurilor la formularul dvs.",
"form_description": "Creați formularul pentru direcționarea unei persoane care face rezervare",
@@ -1457,6 +1464,7 @@
"new_event_type_availability": "Disponibilitate {{eventTypeTitle}}",
"error_editing_availability": "Eroare la editarea disponibilității",
"dont_have_permission": "Nu aveți permisiunea de a accesa această resursă.",
"saml_config": "SAML",
"saml_configuration_placeholder": "Inserați aici metadatele SAML generate de furnizorul dvs. de identitate",
"saml_email_required": "Introduceți un e-mail pentru a vă putea găsi furnizorul de identitate SAML",
"saml_sp_title": "Detaliile furnizorului de servicii",
@@ -1475,15 +1483,19 @@
"yearly": "Anual",
"checkout": "Finalizare cumpărături",
"your_team_disbanded_successfully": "Echipa dvs. a fost desființată cu succes",
"your_org_disbanded_successfully": "Organizația dvs. a fost desființată cu succes",
"error_creating_team": "Eroare la crearea echipei",
"you": "Dvs.",
"resend_email": "Retrimitere e-mail",
"member_already_invited": "Membrul a fost deja invitat",
"enter_email_or_username": "Introduceți un e-mail sau un nume de utilizator",
"team_name_taken": "Acest nume este folosit deja",
"must_enter_team_name": "Trebuie să introduceți un nume de echipă",
"team_url_required": "Trebuie să introduceți un URL de echipă",
"url_taken": "Acest URL este folosit deja",
"problem_registering_domain": "A survenit o problemă la înregistrarea subdomeniului. Încercați din nou sau contactați un administrator",
"team_publish": "Publicați echipa",
"number_text_notifications": "Număr de telefon (notificări text)",
"attendee_email_variable": "E-mail participant",
"attendee_email_info": "E-mailul persoanei care efectuează rezervarea",
"kbar_search_placeholder": "Scrie o comandă sau caută...",
@@ -1506,6 +1518,8 @@
"find_the_best_person": "Găsește cea mai bună persoană disponibilă și treci succesiv prin membrii echipei tale.",
"fixed_round_robin": "Sistem „round-robin” fix",
"add_one_fixed_attendee": "Adaugă un participant fix şi unul din sistemul „round-robin” dintr-un număr de participanţi.",
"calcom_is_better_with_team": "{{appName}} funcționează mai bine cu echipe",
"the_calcom_team": "Echipa {{companyName}}",
"add_your_team_members": "Adaugă membrii echipei tale la tipurile tale de evenimente. Folosește programarea colectivă pentru a include pe toată lumea sau găsește persoana cea mai potrivită cu programarea „round-robin”.",
"booking_limit_reached": "A fost atinsă limita de rezervare pentru acest tip de eveniment",
"duration_limit_reached": "Durata limită pentru acest tip de eveniment a fost atinsă",
@@ -1524,6 +1538,7 @@
"navigate_installed_apps": "Mergi la aplicațiile instalate",
"disabled_calendar": "Dacă ai un alt calendar instalat, rezervările noi vor fi adăugate la acesta. Dacă nu ai, conectează un calendar nou, astfel încât să nu ratezi nicio rezervare nouă.",
"enable_apps": "Activează aplicații",
"enable_apps_description": "Activați aplicațiile pe care utilizatorii le pot integra cu {{appName}}",
"purchase_license": "Achiziționați o licență",
"already_have_key": "Am deja o cheie:",
"already_have_key_suggestion": "Copiați aici variabila de mediu CALCOM_LICENSE_KEY existentă.",
@@ -1537,6 +1552,9 @@
"no_available_apps": "Nu există nicio aplicație disponibilă",
"no_available_apps_description": "Asigură-te că există aplicații în implementare sub „packages/app-store”",
"no_apps": "Nu există nicio aplicație activată în această instanță de Cal",
"no_apps_configured": "Nu a fost configurată nicio aplicație încă",
"enable_in_settings": "Puteți activa aplicații din setări",
"please_contact_admin": "Contactați administratorul",
"apps_settings": "Setări aplicații",
"fill_this_field": "Te rugăm să completezi acest câmp",
"options": "Opțiuni",
@@ -1640,7 +1658,10 @@
"delete_sso_configuration_confirmation_description": "Sigur doriți să ștergeți configurația {{connectionType}}? Membrii echipei dvs. care utilizează conectarea prin {{connectionType}} nu vor mai putea accesa Cal.com.",
"organizer_timezone": "Fusul orar al organizatorului",
"email_user_cta": "Vizualizare invitație",
"email_no_user_invite_heading": "Ați fost invitat să vă alăturați la o {{entity}} {{appName}}",
"email_no_user_invite_subheading": "{{invitedBy}} v-a invitat să faceți parte din echipa sa de pe {{appName}}. {{appName}} este un instrument de planificare a evenimentelor, care vă permite dvs. și echipei dvs. să programați ședințe fără a face ping-pong prin e-mail.",
"email_user_invite_subheading": "{{invitedBy}} v-a invitat să faceți parte din {{entity}} sa „{{teamName}}” de pe {{appName}}. {{appName}} este un instrument de planificare a evenimentelor, prin care dvs. și {{entity}} dvs. puteți să programați ședințe fără a face ping-pong prin e-mail.",
"email_no_user_invite_steps_intro": "Vom parcurge împreună câțiva pași simpli și vă veți bucura alături de {{entity}} dvs. de programări fără probleme, în cel mai scurt timp.",
"email_no_user_step_one": "Alegeți-vă numele de utilizator",
"email_no_user_step_two": "Conectați-vă contul de calendar",
"email_no_user_step_three": "Setați-vă disponibilitatea",
@@ -1651,6 +1672,8 @@
"scheduler": "{Scheduler}",
"no_workflows": "Niciun flux de lucru",
"change_filter": "Schimbați filtrul pentru a vedea fluxurile de lucru personale și de echipă.",
"change_filter_common": "Schimbați filtrul pentru a vedea rezultatele.",
"no_results_for_filter": "Nu există niciun rezultat pentru filtru",
"recommended_next_steps": "Următorii pași recomandați",
"create_a_managed_event": "Creați un tip de eveniment gestionat",
"meetings_are_better_with_the_right": "Ședințele sunt mai agreabile dacă participă membrii potriviți ai echipei. Invitați-i acum.",
@@ -1661,7 +1684,9 @@
"no_longer_attending": "Nu mai participați la acest eveniment",
"attendee_no_longer_attending_subject": "Un participant nu mai ia parte la {{title}} de la {{date}}",
"attendee_no_longer_attending": "Un participant nu mai ia parte la evenimentul dvs.",
"attendee_no_longer_attending_subtitle": "{{name}} a anulat. Acest lucru înseamnă că s-a eliberat un loc pentru acest interval de timp",
"create_event_on": "Creați eveniment pe",
"create_routing_form_on": "Creare formular de redirecționare la",
"default_app_link_title": "Setați un link implicit pentru aplicații",
"default_app_link_description": "Setarea unui link implicit pentru aplicații permite tuturor tipurilor de evenimente nou-create să utilizeze linkul pentru aplicații pe care l-ați setat.",
"organizer_default_conferencing_app": "Aplicația implicită a organizatorului",
@@ -1671,6 +1696,7 @@
"booking_questions_title": "Întrebări legate de rezervare",
"booking_questions_description": "Personalizați întrebările adresate pe pagina de rezervare",
"add_a_booking_question": "Adăugați o întrebare",
"identifier": "Identificator",
"duplicate_email": "E-mailul este duplicat",
"booking_with_payment_cancelled": "Nu se mai poate plăti pentru acest eveniment",
"booking_with_payment_cancelled_already_paid": "Există o rambursare în curs pentru plata acestei rezervări.",
@@ -1681,6 +1707,7 @@
"show_on_booking_page": "Afișare pe pagina de rezervare",
"get_started_zapier_templates": "Faceți primii pași cu șabloanele Zapier",
"team_is_unpublished": "Echipa {{team}} nu este publicată",
"team_is_unpublished_description": "Acest link de {{entity}} nu este disponibil momentan. Contactați proprietarul {{entity}} sau rugați-l să îl publice.",
"team_member": "Membru al echipei",
"a_routing_form": "Un formular de parcurs",
"form_description_placeholder": "Descriere formular",
@@ -1710,13 +1737,16 @@
"spot_popular_event_types": "Identificați tipurile de evenimente populare",
"spot_popular_event_types_description": "Vedeți care dintre tipurile de evenimente primesc cele mai multe clicuri și rezervări",
"no_responses_yet": "Nu există încă răspunsuri",
"no_routes_defined": "Nu a fost definit niciun parcurs",
"this_will_be_the_placeholder": "Acesta va fi substituentul",
"error_booking_event": "A survenit o eroare la rezervarea evenimentului. Reîmprospătați pagina și încercați din nou",
"timeslot_missing_title": "Niciun interval de timp selectat",
"timeslot_missing_description": "Selectați un interval de timp pentru a rezerva evenimentul.",
"timeslot_missing_cta": "Selectare interval de timp",
"switch_monthly": "Comutare la vizualizarea lunară",
"switch_weekly": "Comutare la vizualizarea săptămânală",
"switch_multiday": "Comutare la vizualizarea zilnică",
"switch_columnview": "Comutare la vizualizarea coloană",
"num_locations": "{{num}} (de) opțiuni privind locul",
"select_on_next_step": "Selectați în etapa următoare",
"this_meeting_has_not_started_yet": "Această întâlnire nu a început încă",
@@ -1755,6 +1785,7 @@
"managed_event_dialog_title_one": "URL-ul /{{slug}} există deja pentru {{count}} membru. Doriți să îl înlocuiți?",
"managed_event_dialog_title_other": "URL-ul /{{slug}} există deja pentru {{count}} (de) membri. Doriți să îl înlocuiți?",
"managed_event_dialog_information_one": "<strong>{{names}}</strong> folosește deja URL-ul <strong>/{{slug}}</strong>.",
"managed_event_dialog_information_other": "<strong>{{names}}</strong> folosesc deja adresa URL <strong>/{{slug}}</strong>.",
"managed_event_dialog_clarification": "Îi vom anunța dacă alegeți să îl înlocuiți. Reveniți și ștergeți-i dacă nu doriți să îl suprascrieți.",
"review_event_type": "Revizuiți tipul de eveniment",
"looking_for_more_analytics": "Căutați mai multe analize?",
@@ -1770,12 +1801,14 @@
"least_booked_members": "Membrii cu cele mai puține rezervări",
"events_created": "Evenimente create",
"events_completed": "Evenimente finalizate",
"events_cancelled": "Evenimente anulate",
"events_rescheduled": "Evenimente reprogramate",
"from_last_period": "din ultima perioadă",
"from_to_date_period": "De la: {{startDate}} La: {{endDate}}",
"redirect_url_warning": "Adăugarea unei redirecționări va dezactiva pagina cu mesajul de succes. Nu uitați să menționați „Rezervare confirmată” pe pagina cu mesajul de succes personalizat.",
"event_trends": "Tendințe eveniment",
"clear_filters": "Ștergere filtre",
"clear": "Ștergere",
"hold": "Reținere",
"on_booking_option": "Percepere plată pentru rezervare",
"hold_option": "Percepere taxă de neprezentare",
@@ -1802,6 +1835,18 @@
"complete_your_booking": "Finalizați rezervarea",
"complete_your_booking_subject": "Finalizați rezervarea: {{title}}, pe {{date}}",
"confirm_your_details": "Confirmați-vă detaliile",
"copy_invite_link": "Copiere link de invitație",
"edit_invite_link": "Editare setări link",
"invite_link_copied": "Link de invitație copiat",
"invite_link_deleted": "Link de invitație șters",
"invite_link_updated": "Setări link de invitație salvate",
"link_expires_after": "Linkurile vor expira după...",
"one_day": "1 zi",
"seven_days": "7 zile",
"thirty_days": "30 de zile",
"three_months": "3 luni",
"one_year": "1 an",
"team_invite_received": "Ați fost invitat să faceți parte din {{teamName}}",
"currency_string": "{{amount, currency}}",
"charge_card_dialog_body": "Urmează să percepeți {{amount, currency}} de la participant. Sigur doriți să continuați?",
"charge_attendee": "Percepeți {{amount, currency}} de la participant",
@@ -1810,6 +1855,7 @@
"email_invite_team_bulk": "{{userCount}} (de) utilizatori au fost invitați",
"error_collecting_card": "Eroare la procesarea tranzacției cu cardul",
"image_size_limit_exceed": "Imaginea încărcată nu trebuie să depășească dimensiunea limită de 5 MB",
"unauthorized_workflow_error_message": "{{errorCode}}: nu sunteți autorizat să activați sau să dezactivați acest flux de lucru",
"inline_embed": "Încorporare în linie",
"load_inline_content": "Încarcă tipul dvs. de eveniment direct în linie, cu restul conținutului de pe site-ul dvs.",
"floating_pop_up_button": "Buton pop-up flotant",
@@ -1829,6 +1875,69 @@
"connect_google_workspace": "Conectare la Google Workspace",
"google_workspace_admin_tooltip": "Trebuie să fiți administrator Workspace pentru a putea utiliza această caracteristică",
"first_event_type_webhook_description": "Creați primul dvs. webhook pentru acest tip de eveniment",
"install_app_on": "Instalați aplicația pe",
"create_for": "Creare pentru",
"insights_all_org_filter": "Toate aplicațiile"
"setup_organization": "Configurare organizație",
"organization_banner_description": "Creați un mediu în care echipele dvs. să poată crea aplicații, fluxuri de lucru și tipuri de evenimente partajate, folosind programarea colectivă sau cu alocare prin rotație.",
"organization_banner_title": "Gestionați organizații cu mai multe echipe",
"set_up_your_organization": "Configurați organizația",
"organizations_description": "Organizațiile sunt medii partajate în care echipele pot crea tipuri de evenimente, aplicații, fluxuri de lucru partajate și multe altele.",
"must_enter_organization_name": "Trebuie să introduceți un nume de organizație",
"must_enter_organization_admin_email": "Trebuie să introduceți adresa de e-mail a organizației",
"admin_email": "Adresa de e-mail a organizației dvs.",
"admin_username": "Numele de utilizator al administratorului",
"organization_name": "Nume organizație",
"organization_url": "Adresă URL organizație",
"organization_verify_header": "Verificați e-mailul organizației",
"organization_verify_email_body": "Utilizați codul de mai jos ca să verificați adresa de e-mail pentru a continua configurarea organizației.",
"additional_url_parameters": "Parametri suplimentari URL",
"about_your_organization": "Despre organizația dvs.",
"about_your_organization_description": "Organizațiile sunt medii partajate în care puteți crea mai multe echipe cu membri, tipuri de evenimente, aplicații, fluxuri de lucru partajate și multe altele.",
"create_your_teams": "Creați echipe",
"create_your_teams_description": "Începeți să programați împreună adăugând membrii echipei la organizația dvs.",
"invite_organization_admins": "Invitați administratorii organizației dvs.",
"invite_organization_admins_description": "Acești administratori vor avea acces la toate echipele din organizația dvs. Puteți adăuga ulterior administratori și membri de echipă.",
"set_a_password": "Setați o parolă",
"set_a_password_description": "Aceasta va crea un nou cont de utilizator cu e-mailul organizația dvs. și această parolă.",
"organization_logo": "Siglă organizație",
"organization_about_description": "Câteva propoziții despre organizația dvs. Acestea vor fi afișate pe pagina cu profilul public al organizației.",
"ill_do_this_later": "Voi face acest lucru mai târziu",
"verify_your_email": "Verificați-vă e-mailul",
"enter_digit_code": "Introduceți codul de 6 cifre pe care l-am trimis la {{email}}",
"verify_email_organization": "Verificați-vă e-mailul pentru a crea o organizație",
"code_provided_invalid": "Codul furnizat nu este valid, încercați din nou",
"email_already_used": "E-mailul este utilizat deja",
"organization_admin_invited_heading": "Ați fost invitat să faceți parte din {{orgName}}",
"organization_admin_invited_body": "Alăturați-vă echipei din de la {{orgName}} și începeți să vă concentrați pe întâlniri, nu pe organizarea acestora!",
"duplicated_slugs_warning": "Următoarele echipe nu au putut fi create din cauza unor sluguri duplicat: {{slugs}}",
"team_names_empty": "Numele de echipă nu pot fi necompletate",
"team_names_repeated": "Numele de echipă nu pot fi repetate",
"user_belongs_organization": "Utilizatorul aparține unei organizații",
"org_no_teams_yet": "Această organizație nu are încă echipe",
"org_no_teams_yet_description": "Dacă sunteți un administrator, creați echipe pentru a fi afișate aici.",
"set_up": "Configurare",
"set_up_your_profile": "Configurați-vă profilul",
"set_up_your_profile_description": "Spuneți-le oamenilor care este rolul dvs. în cadrul {{orgName}} și când interacționează cu linkul dvs. public.",
"my_profile": "Profilul meu",
"my_settings": "Setările mele",
"crm": "CRM",
"messaging": "Mesagerie",
"sender_id_info": "Numele sau numărul afișat ca expeditor al unui SMS (unele țări nu permit ID-uri alfanumerice ale expeditorului)",
"org_admins_can_create_new_teams": "Numai administratorul organizației dvs. poate crea echipe noi",
"google_new_spam_policy": "Noua politică de spam a Google vă poate împiedica să primiți orice notificare prin e-mail sau calendar cu privire la această rezervare.",
"resolve": "Rezolvați",
"no_organization_slug": "A survenit o eroare la crearea echipelor pentru această organizație. Slug URL lipsă.",
"org_name": "Nume organizație",
"org_url": "Adresă URL organizație",
"copy_link_org": "Copiați linkul către organizație",
"404_the_org": "Organizația",
"404_the_team": "Echipa",
"404_claim_entity_org": "Revendicați subdomeniul pentru organizația dvs.",
"404_claim_entity_team": "Revendicați această echipă și începeți să gestionați programele în mod colectiv",
"insights_all_org_filter": "Toate aplicațiile",
"insights_team_filter": "Echipă: {{teamName}}",
"insights_user_filter": "Utilizator: {{userName}}",
"insights_subtitle": "Vizualizați perspective cu privire la rezervări pentru toate evenimentele dvs.",
"custom_plan": "Plan personalizat",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Adăugați stringurile noi deasupra acestui rând ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
+184 -1
View File
@@ -13,11 +13,21 @@
"reset_password_subject": "{{appName}}: Инструкция по сбросу пароля",
"verify_email_subject": "{{appName}}: Подтвердите учетную запись",
"check_your_email": "Проверьте почту",
"verify_email_page_body": "Мы отправили письмо на адрес {{email}}. Обязательно подтвердите адрес электронной почты, чтобы электронная почта и календарь {{appName}} работали с максимальной эффективностью.",
"verify_email_banner_body": "Подтвердите адрес электронной почты, чтобы электронная почта и календарь работали с максимальной эффективностью",
"verify_email_email_header": "Подтвердите ваш адрес электронной почты",
"verify_email_email_button": "Подтвердите адрес электронной почты",
"verify_email_email_body": "Подтвердите адрес электронной почты, нажав кнопку ниже.",
"verify_email_email_link_text": "Вот ссылка на случай, если вы не любите нажимать на кнопки:",
"email_sent": "Письмо успешно отправлено",
"event_declined_subject": "Отклонено: {{title}} {{date}}",
"event_cancelled_subject": "Отмена: {{title}} {{date}}",
"event_request_declined": "Ваш запрос на встречу отклонен",
"event_request_declined_recurring": "Ваш запрос на повторяющееся событие отклонен",
"event_request_cancelled": "Ваша запланированная встреча была отменена",
"organizer": "Организатор",
"need_to_reschedule_or_cancel": "Хотите перенести или отменить?",
"no_options_available": "Нет доступных вариантов",
"cancellation_reason": "Причина отмены (необязательно)",
"cancellation_reason_placeholder": "Укажите причину отмены подписки",
"rejection_reason": "Причина отказа",
@@ -77,7 +87,9 @@
"your_meeting_has_been_booked": "Ваша встреча была забронирована",
"event_type_has_been_rescheduled_on_time_date": "Ваше {{title}} было перенесено на {{date}}.",
"event_has_been_rescheduled": "Ваше событие было перенесено.",
"request_reschedule_subtitle": "{{organizer}} отменил(-а) бронирование и попросил(-а) вас выбрать другое время.",
"request_reschedule_title_organizer": "Вы запросили у {{attendee}} изменение расписания",
"request_reschedule_subtitle_organizer": "Вы отменили бронирование; теперь {{attendee}} и вам нужно выбрать новое время.",
"rescheduled_event_type_subject": "Запрос на перенос отправлен: {{eventType}} с {{name}}, {{date}}",
"requested_to_reschedule_subject_attendee": "Требуется перенести бронирование: забронируйте новое время для {{eventType}} с {{name}}",
"hi_user_name": "Привет {{name}}",
@@ -118,6 +130,7 @@
"upgrade_banner_action": "Изменить",
"team_upgraded_successfully": "Вы успешно перешли на новый тариф для своей команды!",
"org_upgrade_banner_description": "Спасибо, что попробовали наш новый тариф Organization. Для работы с «{{teamName}}» нужно перейти на тариф Organization.",
"org_upgraded_successfully": "Вы успешно перешли на тариф Organization!",
"use_link_to_reset_password": "Используйте ссылку ниже, чтобы сбросить пароль",
"hey_there": "Привет,",
"forgot_your_password_calcom": "Забыли пароль? - {{appName}}",
@@ -184,6 +197,7 @@
"blog": "Блог",
"blog_description": "Прочитайте наши последние новости и статьи",
"join_our_community": "Присоединяйтесь к нашему сообществу",
"join_our_discord": "Присоединяйтесь к нам в Discord",
"404_claim_entity_user": "Забронируйте своё имя пользователя и начните планировать встречи",
"popular_pages": "Популярные страницы",
"register_now": "Зарегистрироваться",
@@ -191,6 +205,7 @@
"page_doesnt_exist": "Эта страница не существует.",
"check_spelling_mistakes_or_go_back": "Проверьте наличие ошибок, или вернитесь на предыдущую страницу.",
"404_page_not_found": "404: Страница не найдена.",
"booker_event_not_found": "Нам не удалось найти событие, которое вы пытаетесь забронировать.",
"getting_started": "Начало работы",
"15min_meeting": "Встреча на 15 минут",
"30min_meeting": "Встреча на 30 минут",
@@ -226,11 +241,14 @@
"done": "Готово",
"all_done": "Готово!",
"all": "Все приложения",
"yours": "Ваш аккаунт",
"available_apps": "Доступные приложения",
"check_email_reset_password": "Проверьте вашу электронную почту, мы отправили вам ссылку для сброса пароля.",
"finish": "Завершить",
"organization_general_description": "Настройте язык и часовой пояс для своей команды",
"few_sentences_about_yourself": "Напишите несколько предложений о себе. Они будут отображаться на вашей публичной странице.",
"nearly_there": "Почти готово!",
"nearly_there_instructions": "И последнее: добавьте краткую информацию о себе и свою фотографию; так людям будет проще понять, с кем они бронируют встречу.",
"set_availability_instructions": "Определите диапазон времени, в который вы обычно доступны. В дальнейшем можно будет добавить ещё диапазоны и назначить их разным календарям.",
"set_availability": "Задайте время в которое вы доступны",
"continue_without_calendar": "Продолжить без подключения календаря",
@@ -286,6 +304,18 @@
"success": "Успешно",
"failed": "Ошибка",
"password_has_been_reset_login": "Ваш пароль был сброшен. Теперь вы можете войти с новым паролем.",
"layout": "Макет",
"bookerlayout_default_title": "Представление по умолчанию",
"bookerlayout_description": "Вы можете выбрать несколько представлений; пользователи, оформляющие бронирование, могут переключать представления.",
"bookerlayout_user_settings_title": "Макет забронированного события",
"bookerlayout_user_settings_description": "Вы можете выбрать несколько представлений; пользователи, оформляющие бронирование, могут переключать представления. Эту настройку можно переопределять для каждого события.",
"bookerlayout_month_view": "Месяц",
"bookerlayout_week_view": "Еженедельно",
"bookerlayout_column_view": "Столбец",
"bookerlayout_error_min_one_enabled": "Нужно выбрать по крайней мере один макет.",
"bookerlayout_error_default_not_enabled": "Макет, который вы выбрали как представление по умолчанию, не входит в число доступных макетов.",
"bookerlayout_error_unknown_layout": "Вы выбрали недопустимый макет.",
"bookerlayout_override_global_settings": "Эту настройку можно указать для всех типов событий в <2>настройках / оформление</2> или <6>переопределить только для этого события</6>.",
"unexpected_error_try_again": "Произошла непредвиденная ошибка. Попробуйте еще раз.",
"sunday_time_error": "Недопустимое время в воскресенье",
"monday_time_error": "Недопустимое время в понедельник",
@@ -298,6 +328,7 @@
"error_end_time_next_day": "Время окончания не может позже 24 часов",
"back_to_bookings": "Вернуться к списку бронирований",
"free_to_pick_another_event_type": "Вы можете выбрать любое другое событие.",
"cancelled": "Отменено",
"cancellation_successful": "Отмена прошла успешно",
"really_cancel_booking": "Вы действительно хотите отменить бронирование?",
"cannot_cancel_booking": "Вы не можете отменить это бронирование",
@@ -306,6 +337,12 @@
"cancelling_event_recurring": "Данное событие — один из экземпляров повторяющегося события.",
"cancelling_all_recurring": "Это все оставшиеся экземпляры повторяющегося события.",
"error_with_status_code_occured": "Произошла ошибка с кодом состояния {{status}}.",
"error_event_type_url_duplicate": "Тип события с этим URL-адресом уже существует.",
"error_event_type_unauthorized_create": "Вы не можете создать это событие",
"error_event_type_unauthorized_update": "Вы не можете редактировать это событие",
"error_workflow_unauthorized_create": "Вы не можете создать этот рабочий процесс",
"error_schedule_unauthorized_create": "Вы не можете создать это расписание",
"booking_already_cancelled": "Это бронирование уже отменено",
"booking_already_accepted_rejected": "Это бронирование уже принято или отклонено",
"go_back_home": "Вернуться домой",
"or_go_back_home": "Или вернитесь домой",
@@ -315,10 +352,12 @@
"no_status_bookings_yet_description": "У вас нет {{status}} бронирований. {{description}}",
"event_between_users": "{{eventName}} между {{host}} и {{attendeeName}}",
"bookings": "Бронирования",
"booking_not_found": "Бронирование не найдено",
"bookings_description": "Просматривайте предстоящие и прошедшие события, забронированные по ссылкам событий.",
"upcoming_bookings": "Как только кто-то забронирует встречу с вами она будет отображена здесь.",
"recurring_bookings": "Как только кто-то забронирует повторяющуюся встречу с вами, она будет отображена здесь.",
"past_bookings": "Здесь появятся ваши прошлые бронирования.",
"cancelled_bookings": "Здесь появятся ваши отменённые бронирования.",
"unconfirmed_bookings": "Здесь можно увидеть бронирования, которые вы еще не подтвердили.",
"unconfirmed_bookings_tooltip": "Неподтвержденные бронирования",
"on": "на",
@@ -352,15 +391,19 @@
"user_dynamic_booking_disabled": "Некоторые участники группы отключили функцию динамического группового бронирования",
"allow_dynamic_booking_tooltip": "Ссылки для группового бронирования, которые можно создавать динамически, указывая несколько имен пользователей при помощи знака «+». Пример: «{{appName}}/bailey+peer»",
"allow_dynamic_booking": "Разрешить участникам бронировать встречи с вами при помощи динамического группового бронирования",
"dynamic_booking": "Динамические ссылки группы",
"email": "Адрес электронной почты",
"email_placeholder": "jdoe@example.com",
"full_name": "Имя",
"browse_api_documentation": "Посмотрите нашу документацию API",
"leverage_our_api": "Используйте наш API для возможности полного управления и настройки.",
"create_webhook": "Создать веб-хук",
"booking_cancelled": "Бронирование отменено",
"booking_rescheduled": "Бронирование изменено",
"recording_ready": "Ссылка для скачивания записи готова",
"booking_created": "Бронирование создано",
"booking_rejected": "Бронирование отклонено",
"booking_requested": "Поступил запрос на бронирование",
"meeting_ended": "Встреча завершилась",
"form_submitted": "Форма отправлена",
"event_triggers": "Триггеры событий",
@@ -370,6 +413,8 @@
"team_webhooks": "Командные вебхуки",
"create_new_webhook_to_account": "Создайте новый вебхук для вашей учетной записи",
"new_webhook": "Новый веб-хук",
"receive_cal_meeting_data": "Получайте данные о создании или отмене встреч в {{appName}} по указанному URL-адресу в реальном времени.",
"receive_cal_event_meeting_data": "Получайте данные о планировании или отмене этого события в {{appName}} по указанному URL-адресу в реальном времени.",
"responsive_fullscreen_iframe": "Адаптивный полноэкранный iframe",
"loading": "Загрузка...",
"deleting": "Выполняется удаление...",
@@ -432,6 +477,7 @@
"max_limit_allowed_hint": "Не более {{limit}} символов",
"invalid_password_hint": "Пароль должен быть не короче {{passwordLength}} символов и содержать заглавные и строчные буквы, а также не менее одной цифры",
"incorrect_password": "Неверный пароль",
"incorrect_email_password": "Неверный адрес электронной почты или пароль.",
"use_setting": "Использовать настройки",
"am_pm": "am/pm",
"time_options": "Настройки времени",
@@ -459,6 +505,7 @@
"additional_guests": "Добавить гостей",
"your_name": "Ваше имя",
"your_full_name": "ФИО",
"no_name": "Нет имени",
"email_address": "Адрес электронной почты",
"enter_valid_email": "Укажите допустимый адрес электронной почты",
"location": "Местоположение",
@@ -502,10 +549,13 @@
"your_team_updated_successfully": "Ваша команда успешно обновлена.",
"about": "О нас",
"team_description": "Краткое описание вашей команды. Этот текст будет показываться на странице вашей команды.",
"org_description": "Краткое описание вашей организации. Этот текст будет виден на странице вашей организации.",
"members": "Участники",
"organization_members": "Сотрудники организации",
"member": "Участник",
"number_member_one": "Участники: {{count}}",
"number_member_other": "Участники: {{count}}",
"number_selected": "Выбрано: {{count}}",
"owner": "Владелец",
"admin": "Админ",
"administrator_user": "Администратор",
@@ -536,6 +586,8 @@
"confirm_all": "Подтвердить все",
"disband_team": "Распустить команду",
"disband_team_confirmation_message": "Вы уверены, что хотите распустить эту команду? Любой, с кем вы поделились ссылкой на эту команду, больше не сможет забронировать её.",
"disband_org": "Распустить организацию",
"disband_org_confirmation_message": "Распустить эту организацию? Все команды и сотрудники будут удалены.",
"remove_member_confirmation_message": "Вы уверены, что хотите удалить этого участника из команды?",
"confirm_disband_team": "Да, распустить команду",
"confirm_remove_member": "Да, удалить участника",
@@ -610,6 +662,7 @@
"event_type_updated_successfully": "Тип события {{eventTypeTitle}} успешно обновлен",
"event_type_deleted_successfully": "Тип события успешно удален",
"hours": "Часы",
"people": "Люди",
"your_email": "Ваш адрес электронной почты",
"change_avatar": "Изменить аватар",
"language": "Язык",
@@ -642,9 +695,11 @@
"create_new_team": "Создание новой команды",
"open_invitations": "Открыть список приглашений",
"new_team": "Новая команда",
"create_first_team_and_invite_others": "Создайте свою первую команду и пригласите других пользователей работать вместе с вами.",
"create_team_to_get_started": "Создайте команду, чтобы начать работу",
"teams": "Команды",
"team": "Команда",
"organization": "Организация",
"team_billing": "Условия расчета для команд",
"team_billing_description": "Управление биллингом вашей команды",
"upgrade_to_flexible_pro_title": "Мы изменили условия расчета для команд",
@@ -719,6 +774,7 @@
"cal_provide_huddle01_meeting_url": "{{appName}} создаст ссылку на встречу в Huddle01 Web3.",
"cal_provide_teams_meeting_url": "{{appName}} предоставит URL-адрес встречи в MS Teams. ПРИМЕЧАНИЕ: У ВАС ДОЛЖЕН БЫТЬ КОРПОРАТИВНЫЙ ИЛИ СТУДЕНЧЕСКИЙ АККАУНТ",
"require_payment": "Требуется оплата",
"you_need_to_add_a_name": "Нужно добавить имя",
"commission_per_transaction": "комиссия за сделку",
"event_type_updated_successfully_description": "Ваш шаблон события успешно обновлён.",
"hide_event_type": "Скрыть шаблон события",
@@ -809,18 +865,25 @@
"installed_apps": "Установленные приложения",
"free_to_use_apps": "Бесплатные",
"no_category_apps": "Нет приложений в категории «{{category}}»",
"all_apps": "Все приложения",
"no_category_apps_description_calendar": "Добавьте приложение календаря, чтобы проверять наличие конфликтов для избежания двойного бронирования",
"no_category_apps_description_conferencing": "Попробуйте добавить приложение конференц-связи для интеграции видеозвонков с клиентами",
"no_category_apps_description_payment": "Добавьте платежное приложение, чтобы упростить транзакции с клиентами",
"no_category_apps_description_analytics": "Добавьте приложение аналитики для использования на страницах бронирования",
"no_category_apps_description_automation": "Добавьте приложение для автоматизации",
"no_category_apps_description_other": "Добавляйте всевозможные приложения для решения своих задач",
"no_category_apps_description_web3": "Добавьте приложение web3 для использования на страницах бронирования",
"no_category_apps_description_messaging": "Добавьте мессенджер, чтобы настроить пользовательские уведомления и напоминания",
"no_category_apps_description_crm": "Добавьте CRM, чтобы отслеживать, с кем у вас были встречи",
"installed_app_calendar_description": "Настройте проверку календарей на предмет конфликтов для избежания двойного бронирования.",
"installed_app_payment_description": "Выберите службы обработки платежей для получения оплаты от клиентов.",
"installed_app_analytics_description": "Выберите приложения аналитики для страниц бронирования",
"installed_app_other_description": "Все установленные приложения из других категорий.",
"installed_app_conferencing_description": "Выберите приложения для видеоконференций",
"installed_app_automation_description": "Выберите приложения для автоматизации",
"installed_app_web3_description": "Выберите приложения web3 для страниц бронирования",
"installed_app_messaging_description": "Выберите мессенджеры, в которых вы хотите настроить пользовательские уведомления и напоминания",
"installed_app_crm_description": "Выберите CRM-приложения, в которых вы хотите отслеживать, с кем у вас были встречи",
"analytics": "Аналитика",
"empty_installed_apps_headline": "Нет установленных приложений",
"empty_installed_apps_description": "Приложения позволяют значительно улучшить рабочий процесс и жить по расписанию.",
@@ -846,6 +909,7 @@
"create_events_on": "Создавать события в календаре:",
"enterprise_license": "Это функция корпоративного тарифного плана",
"enterprise_license_description": "Чтобы включить эту функцию, получите ключ развертывания на консоли {{consoleUrl}} и добавьте его в .env как CALCOM_LICENSE_KEY. Если у вашей команды уже есть лицензия, пожалуйста, обратитесь за помощью в {{supportMail}}.",
"enterprise_license_development": "Протестируйте эту функцию в режиме разработки. Для использования в рабочем режиме администратор должен перейти по ссылке <2>/auth/setup</2> и ввести лицензионный ключ.",
"missing_license": "Отсутствует лицензия",
"signup_requires": "Требуется коммерческая лицензия",
"signup_requires_description": "В настоящее время компания {{companyName}} не предлагает бесплатную версию страницы регистрации с открытым исходным кодом. Чтобы получить полный доступ к компонентам входа в систему, необходимо приобрести коммерческую лицензию. Для личного пользования мы рекомендуем Prisma Data Platform или любой другой интерфейс Postgres для создания учетных записей.",
@@ -915,6 +979,7 @@
"confirm_delete_api_key": "Отозвать ключ API",
"revoke_api_key": "Отозвать ключ API",
"api_key_copied": "Ключ API скопирован.",
"api_key_expires_on": "Срок действия ключа API истекает",
"delete_api_key_confirm_title": "Удалить этот ключ API из вашего аккаунта навсегда?",
"copy": "Копировать",
"expire_date": "Срок действия",
@@ -937,6 +1002,9 @@
"user_impersonation_heading": "Вход от имени пользователя",
"user_impersonation_description": "Позволяет нашей службе поддержки временно входить в систему от вашего имени, чтобы быстро решать любые проблемы, о которых вы нам сообщаете.",
"team_impersonation_description": "Позволяет участникам и администраторам вашей команды временно входить в систему под вашим именем.",
"make_team_private": "Сделать команду защищенной",
"make_team_private_description": "Если эта опция включена, участники вашей команды не смогут видеть других участников команды.",
"you_cannot_see_team_members": "Вы не можете видеть всех участников защищенной команды.",
"allow_booker_to_select_duration": "Разрешить пользователю, оформляющему бронирование, выбирать длительность",
"impersonate_user_tip": "Все варианты использования этой функции проверяются.",
"impersonating_user_warning": "Олицетворение пользователя \"{{user}}\".",
@@ -1004,16 +1072,21 @@
"event_location": "Местоположение события",
"reschedule_optional": "Причина переноса (дополнительно)",
"reschedule_placeholder": "Расскажите другим, почему вам нужно изменить расписание",
"event_cancelled": "Это событие отменено",
"emailed_information_about_cancelled_event": "Мы сообщили об этом вам и другим участникам по электронной почте.",
"this_input_will_shown_booking_this_event": "Этот вопрос будет показан при бронировании события по этому шаблону",
"meeting_url_in_conformation_email": "Ссылка на встречу находится в письме с подтверждением",
"url_start_with_https": "URL-адрес должен начинаться с http:// или https://",
"number_provided": "Будет указан номер телефона",
"before_event_trigger": "до начала события",
"event_cancelled_trigger": "когда событие отменено",
"new_event_trigger": "когда будет забронировано новое событие",
"email_host_action": "отправить письмо организатору",
"email_attendee_action": "отправить письмо участникам",
"sms_attendee_action": "Отправить SMS-сообщение участнику",
"sms_number_action": "отправка SMS-сообщение на указанный номер",
"whatsapp_number_action": "отправка сообщение в Whatsapp на указанный номер",
"whatsapp_attendee_action": "отправить участнику сообщение в Whatsapp",
"workflows": "Рабочие процессы",
"new_workflow_btn": "Новый рабочий процесс",
"add_new_workflow": "Добавить новый рабочий процесс",
@@ -1077,6 +1150,8 @@
"choose_template": "Выбрать шаблон",
"custom": "Пользовательский",
"reminder": "Напоминание",
"rescheduled": "Перенесено",
"completed": "Выполнено",
"reminder_email": "Напоминание: {{eventType}} с {{name}} {{date}}",
"not_triggering_existing_bookings": "Не работает для уже созданных бронирований, так как при бронировании события пользователь должен будет ввести номер телефона.",
"minute_one": "{{count}} минута",
@@ -1174,6 +1249,7 @@
"start_of_week": "Начало недели",
"recordings_title": "Записи",
"recording": "Запись",
"happy_scheduling": "Счастливого планирования",
"select_calendars": "Выберите, в каких календарях нужно проверить наличие конфликтов и дублированного бронирования.",
"check_for_conflicts": "Проверить наличие конфликтов",
"view_recordings": "Просмотреть записи",
@@ -1215,6 +1291,7 @@
"conferencing_description": "Настройка приложений для видеоконференций, используемых для проведения онлайн-встреч",
"add_conferencing_app": "Добавить приложение для видеоконференций",
"password_description": "Настройка паролей для аккаунта",
"set_up_two_factor_authentication": "Настроить двухфакторную аутентификацию",
"we_just_need_basic_info": "Для настройки вашего профиля необходимо указать основную информацию.",
"skip": "Пропустить",
"do_this_later": "Настроить позже",
@@ -1228,6 +1305,8 @@
"connect_analytics_apps": "Подключить приложения аналитики",
"connect_other_apps": "Подключить другие приложения",
"connect_web3_apps": "Подключить приложения web3",
"connect_messaging_apps": "Подключить мессенджеры",
"connect_crm_apps": "Подключить CRM-приложения",
"current_step_of_total": "Шаг {{currentStep}} из {{maxSteps}}",
"add_variable": "Добавить переменную",
"custom_phone_number": "Номер телефона для отправки уведомлений",
@@ -1240,12 +1319,14 @@
"location_info": "Место проведения события",
"additional_notes_info": "Дополнительные заметки о бронировании",
"attendee_name_info": "Участник, на которого оформляется бронирование",
"organizer_name_info": "Имя организатора",
"to": "Кому",
"workflow_turned_on_successfully": "Состояние рабочего процесса «{{workflowName}}» изменено на «{{offOn}}»",
"download_responses": "Скачать ответы",
"download_responses_description": "Скачать все ответы пользователей, заполнивших форму, в формате CSV.",
"download": "Скачать",
"download_recording": "Скачать запись",
"recording_from_your_recent_call": "Запись вашего недавнего созвана в {{appName}} готова для скачивания",
"create_your_first_form": "Создайте первую форму",
"create_your_first_form_description": "Формы маршрутизации позволяют задавать пользователям уточняющие вопросы, чтобы перенаправлять их к соответствующему лицу или типу события.",
"create_your_first_webhook": "Создайте свой первый вебхук",
@@ -1254,7 +1335,9 @@
"event_one": "событие",
"event_other": "событий",
"profile_team_description": "Настройка профиля вашей команды",
"profile_org_description": "Настроить профиль организации",
"members_team_description": "Пользователи, входящие в группу",
"organization_description": "Управляйте администраторами и сотрудниками вашей организации",
"team_url": "URL-адрес команды",
"team_members": "Участники команды",
"more": "Еще",
@@ -1295,6 +1378,7 @@
"routing_forms_send_email_owner": "Отправляйте письма владельцу",
"routing_forms_send_email_owner_description": "Отправляйте владельцу формы электронное письмо, когда пользователь ее заполняет",
"add_new_form": "Добавить новую форму",
"add_new_team_form": "Добавить новую форму в команду",
"create_your_first_route": "Создайте первый маршрут",
"route_to_the_right_person": "Перенаправляйте клиентов к нужному участнику команды исходя из ответов при заполнении формы",
"form_description": "Создайте форму для перенаправления пользователей при бронировании",
@@ -1380,6 +1464,7 @@
"new_event_type_availability": "{{eventTypeTitle}} | Доступность",
"error_editing_availability": "Ошибка при редактировании доступности",
"dont_have_permission": "У вас нет разрешения на доступ к этому ресурсу.",
"saml_config": "SAML",
"saml_configuration_placeholder": "Пожалуйста, вставьте здесь метаданные SAML от вашего провайдера",
"saml_email_required": "Пожалуйста, введите адрес электронной почты, чтобы мы могли найти ваш SAML идентификатор провайдера",
"saml_sp_title": "Детали поставщика услуг",
@@ -1398,15 +1483,19 @@
"yearly": "Ежегодная",
"checkout": "Оплатить заказ",
"your_team_disbanded_successfully": "Ваша команда расформирована",
"your_org_disbanded_successfully": "Ваша организация расформирована",
"error_creating_team": "Ошибка при создании команды",
"you": "Вы",
"resend_email": "Отправить письмо еще раз",
"member_already_invited": "Участник уже приглашен",
"enter_email_or_username": "Введите адрес электронной почты или имя пользователя",
"team_name_taken": "Это название уже занято",
"must_enter_team_name": "Необходимо ввести название команды",
"team_url_required": "Необходимо ввести URL-адрес команды",
"url_taken": "Этот URL-адрес уже занят",
"problem_registering_domain": "Возникла проблема с регистрацией поддомена. Попробуйте еще раз или свяжитесь с администратором",
"team_publish": "Опубликовать команду",
"number_text_notifications": "Номер телефона (SMS-уведомления)",
"attendee_email_variable": "Электронная почта участника",
"attendee_email_info": "Электронная почта участника, на которого оформляется бронирование",
"kbar_search_placeholder": "Введите команду или начните поиск...",
@@ -1429,6 +1518,8 @@
"find_the_best_person": "Выбирайте наиболее подходящего сотрудника из команды в порядке очередности.",
"fixed_round_robin": "Фиксированная очередность",
"add_one_fixed_attendee": "Добавьте одного фиксированного участника и назначайте участников по очереди.",
"calcom_is_better_with_team": "{{appName}} отлично подходит для командной работы",
"the_calcom_team": "Команда {{companyName}}",
"add_your_team_members": "Добавьте участников команды к типам мероприятий. Благодаря совместному планированию можно включить в мероприятие всех пользователей или найти наиболее подходящего пользователя с циклическим планированием.",
"booking_limit_reached": "Достигнут лимит бронирования для этого типа события",
"duration_limit_reached": "Достигнут лимит продолжительности бронирования для этого типа события",
@@ -1447,6 +1538,7 @@
"navigate_installed_apps": "Перейти к установленным приложениям",
"disabled_calendar": "Если у вас установлен другой календарь, в него будут добавляться новые бронирования. Если у вас нет установленного календаря, подключите новый календарь, чтобы не пропускать новые бронирования.",
"enable_apps": "Включить приложения",
"enable_apps_description": "Выберите приложения, которые пользователи могут интегрировать с {{appName}}",
"purchase_license": "Купить лицензию",
"already_have_key": "У меня уже есть ключ:",
"already_have_key_suggestion": "Скопируйте сюда переменную окружения CALCOM_LICENSE_KEY.",
@@ -1460,6 +1552,9 @@
"no_available_apps": "Нет доступных приложений",
"no_available_apps_description": "Убедитесь, что в вашей установке в 'packages/app-store' есть приложения",
"no_apps": "В этом экземпляре Cal нет включенных приложений",
"no_apps_configured": "Нет настроенных приложений",
"enable_in_settings": "Выберите приложения в настройках",
"please_contact_admin": "Свяжитесь с вашим администратором",
"apps_settings": "Настройки приложений",
"fill_this_field": "Заполните это поле",
"options": "Настройки",
@@ -1565,6 +1660,8 @@
"email_user_cta": "Посмотреть приглашение",
"email_no_user_invite_heading": "Вас пригласили в {{appName}} {{entity}}",
"email_no_user_invite_subheading": "{{invitedBy}} пригласил(-а) вас в команду в {{appName}}. {{appName}} — это гибкий планировщик событий, с помощью которого пользователи и целые команды могут планировать встречи без утомительной переписки по электронной почте.",
"email_user_invite_subheading": "{{invitedBy}} пригласил(а) вас в команду {{entity}} `{{teamName}}` в {{appName}}. {{appName}} — это гибкий планировщик событий, с помощью которого вы и ваша компания {{entity}} можете планировать встречи без утомительной переписки по электронной почте.",
"email_no_user_invite_steps_intro": "Всего несколько шагов — и вы сможете оперативно и без стресса планировать встречи с {{entity}}.",
"email_no_user_step_one": "Выберите имя пользователя",
"email_no_user_step_two": "Подключите аккаунт календаря",
"email_no_user_step_three": "Задайте время, в которое вы доступны",
@@ -1575,6 +1672,8 @@
"scheduler": "{Scheduler}",
"no_workflows": "Нет рабочих процессов",
"change_filter": "Измените фильтр, чтобы видеть свои рабочие процессы и рабочие процессы своей команды.",
"change_filter_common": "Измените фильтр, чтобы увидеть результаты.",
"no_results_for_filter": "Поиск с заданным фильтром не дал результатов",
"recommended_next_steps": "Рекомендуемые следующие шаги",
"create_a_managed_event": "Создайте тип событий, которыми вы будете управлять",
"meetings_are_better_with_the_right": "Встречи проходят эффективнее, когда на них присутствуют подходящие участники команды. Пригласите их сейчас.",
@@ -1585,6 +1684,7 @@
"no_longer_attending": "Вы отказались от посещения этого мероприятия",
"attendee_no_longer_attending_subject": "Участник отказался от посещения мероприятия {{title}} в {{date}}",
"attendee_no_longer_attending": "Участник отказался от посещения вашего мероприятия",
"attendee_no_longer_attending_subtitle": "{{name}} отказался(-ась) от посещения мероприятия. Этот промежуток времени снова свободен",
"create_event_on": "Создать событие в календаре",
"create_routing_form_on": "Создать форму маршрутизации",
"default_app_link_title": "Установить ссылку на приложение по умолчанию",
@@ -1596,6 +1696,7 @@
"booking_questions_title": "Вопросы при бронировании",
"booking_questions_description": "Настройка вопросов, задаваемых пользователю на странице бронирования",
"add_a_booking_question": "Добавить вопрос",
"identifier": "Идентификатор",
"duplicate_email": "Адрес электронной почты уже существует",
"booking_with_payment_cancelled": "Оплата этого события больше невозможна",
"booking_with_payment_cancelled_already_paid": "Выполняется возврат оплаты за бронирование.",
@@ -1606,6 +1707,7 @@
"show_on_booking_page": "Показывать на странице бронирования",
"get_started_zapier_templates": "Начать работу с шаблонами Zapier",
"team_is_unpublished": "Команда {{team}} снята с публикации",
"team_is_unpublished_description": "Эта ссылка на {{entity}} в настоящее время недоступна. Свяжитесь с владельцем {{entity}} и попросите его опубликовать ее.",
"team_member": "Участник команды",
"a_routing_form": "Форма маршрутизации",
"form_description_placeholder": "Описание формы",
@@ -1635,13 +1737,16 @@
"spot_popular_event_types": "Определяйте наиболее популярные типы событий",
"spot_popular_event_types_description": "Узнайте, какие типы событий собирают больше всего кликов и бронирований",
"no_responses_yet": "Ответов пока нет",
"no_routes_defined": "Маршруты не определены",
"this_will_be_the_placeholder": "Это текст-заполнитель",
"error_booking_event": "При бронировании события произошла ошибка. Обновите страницу и повторите попытку",
"timeslot_missing_title": "Не выбран интервал времени",
"timeslot_missing_description": "Чтобы забронировать событие, выберите интервал времени.",
"timeslot_missing_cta": "Выбрать интервал времени",
"switch_monthly": "Перейти в режим «месяц»",
"switch_weekly": "Перейти в режим «неделя»",
"switch_multiday": "Перейти в режим «день»",
"switch_columnview": "Перейти в режим «столбцы»",
"num_locations": "Варианты местоположений: {{num}}",
"select_on_next_step": "Выбрать на следующем этапе",
"this_meeting_has_not_started_yet": "Эта встреча еще не началась",
@@ -1680,6 +1785,7 @@
"managed_event_dialog_title_one": "URL-адрес /{{slug}} уже используется {{count}} участником. Заменить?",
"managed_event_dialog_title_other": "URL-адрес /{{slug}} уже используется {{count}} участниками. Заменить?",
"managed_event_dialog_information_one": "<strong>{{names}}</strong> уже используют URL-адрес <strong>/{{slug}}</strong>.",
"managed_event_dialog_information_other": "<strong>{{names}}</strong> уже используют URL-адрес <strong>/{{slug}}</strong>.",
"managed_event_dialog_clarification": "В случае замены мы уведомим пользователей. Если вы не хотите выполнять перезапись, вернитесь назад и удалите типы событий.",
"review_event_type": "Пересмотреть тип события",
"looking_for_more_analytics": "Нужно больше аналитики?",
@@ -1695,12 +1801,14 @@
"least_booked_members": "Участники с наименьшим числом бронирований",
"events_created": "Созданные события",
"events_completed": "Завершенные события",
"events_cancelled": "Отмененные события",
"events_rescheduled": "Перенесенные события",
"from_last_period": "с последнего периода",
"from_to_date_period": "С: {{startDate}} По: {{endDate}}",
"redirect_url_warning": "При использовании перенаправления страница успешного бронирования будет отключена. Не забудьте упомянуть «Бронирование подтверждено» на собственной странице оповещения об успешном бронировании.",
"event_trends": "Тренды событий",
"clear_filters": "Сбросить фильтры",
"clear": "Очистить",
"hold": "Заморозить",
"on_booking_option": "Списывать оплату при бронировании",
"hold_option": "Взимать комиссию за неявку",
@@ -1727,6 +1835,18 @@
"complete_your_booking": "Завершить бронирование",
"complete_your_booking_subject": "Завершите бронирование: {{title}}, {{date}}",
"confirm_your_details": "Подтвердите свои данные",
"copy_invite_link": "Скопировать ссылку приглашения",
"edit_invite_link": "Изменить настройки ссылки",
"invite_link_copied": "Ссылка с приглашением скопирована",
"invite_link_deleted": "Ссылка на приглашение удалена",
"invite_link_updated": "Настройки ссылки с приглашением сохранены",
"link_expires_after": "Ссылки истекают через...",
"one_day": "1 день",
"seven_days": "7 дней",
"thirty_days": "30 дней",
"three_months": "3 месяца",
"one_year": "1 год",
"team_invite_received": "Вас пригласили в {{teamName}}",
"currency_string": "{{amount, currency}}",
"charge_card_dialog_body": "Вы собираетесь списать с участника {{amount, currency}}. Продолжить?",
"charge_attendee": "Списать с участника {{amount, currency}}",
@@ -1735,6 +1855,7 @@
"email_invite_team_bulk": "Приглашено пользователей: {{userCount}}",
"error_collecting_card": "Ошибка при обработке карты",
"image_size_limit_exceed": "Размер загружаемого изображения не должен превышать 5 МБ",
"unauthorized_workflow_error_message": "{{errorCode}}: У вас нет права включать или отключать этот рабочий процесс",
"inline_embed": "Встраивание в содержимое сайта",
"load_inline_content": "Отображение события вместе с другим содержимым сайта.",
"floating_pop_up_button": "Плавающая кнопка",
@@ -1754,7 +1875,69 @@
"connect_google_workspace": "Подключить Google Workspace",
"google_workspace_admin_tooltip": "Эту функцию может использовать только администратор Workspace",
"first_event_type_webhook_description": "Создайте первый вебхук для этого типа событий",
"install_app_on": "Установить приложение на",
"create_for": "Создать для",
"setup_organization": "Настроить организацию",
"organization_banner_description": "Создайте среду, в которой ваши команды смогут открывать совместный доступ к приложениям, рабочим процессам и типам событий, составляя расписание совместно или по очереди.",
"organization_banner_title": "Управляйте организациями с несколькими командами",
"set_up_your_organization": "Настройте организацию",
"organizations_description": "Организация – это общая рабочая среда, в которой команды могут создавать общие типы событий, приложения, рабочие процессы и многое другое.",
"must_enter_organization_name": "Необходимо ввести название организации",
"must_enter_organization_admin_email": "Необходимо ввести адрес электронной почты вашей организации",
"admin_email": "Адрес электронной почты вашей организации",
"admin_username": "Имя пользователя администратора",
"organization_name": "Название организации",
"organization_url": "URL-адрес организации",
"organization_verify_header": "Подтвердите адрес электронной почты вашей организации",
"organization_verify_email_body": "С помощью кода ниже подтвердите свой адрес электронной почты, чтобы продолжить настройку организации.",
"additional_url_parameters": "Дополнительные параметры URL-адреса",
"about_your_organization": "Об организации",
"about_your_organization_description": "Организация – это общая рабочая среда, в которой можно создавать несколько команд с общими сотрудниками, типами событий, приложениями, рабочими процессами и т. п.",
"create_your_teams": "Создать команды",
"create_your_teams_description": "Добавьте участников команды в организацию и начните планировать дела вместе",
"invite_organization_admins": "Пригласите администраторов вашей организации",
"invite_organization_admins_description": "Эти администраторы будут иметь доступ ко всем командам вашей организации. Администраторов и участников команд можно добавить позже.",
"set_a_password": "Установить пароль",
"set_a_password_description": "Будет создан новый пользовательский аккаунт с адресом электронной почты вашей организации и этим паролем.",
"organization_logo": "Логотип организации",
"organization_about_description": "Краткое описание вашей организации. Этот текст будет виден в публичном профиле вашей организации.",
"ill_do_this_later": "Позже",
"verify_your_email": "Подтвердите адрес электронной почты",
"enter_digit_code": "Введите 6-значный код, который мы отправили на {{email}}",
"verify_email_organization": "Подтвердите свой адрес электронной почты для создания организации",
"code_provided_invalid": "Указанный код недействителен, попробуйте еще раз",
"email_already_used": "Адрес электронной почты уже используется",
"organization_admin_invited_heading": "Вас пригласили в {{orgName}}",
"organization_admin_invited_body": "Станьте частью команды {{orgName}} – и вы сможете уделять внимание встречам, а не их планированию!",
"duplicated_slugs_warning": "Не удалось создать следующие команды из-за дублирующихся слагов: {{slugs}}",
"team_names_empty": "Имена команд не могут быть пустыми",
"team_names_repeated": "Имена команд не могут быть повторяться",
"user_belongs_organization": "Пользователь относится к организации",
"org_no_teams_yet": "У этой организации еще нет команд",
"org_no_teams_yet_description": "Если вы администратор, не забудьте создать команды, которые будут отображаться здесь.",
"set_up": "Настроить",
"set_up_your_profile": "Настроить профиль",
"set_up_your_profile_description": "Расскажите, чем вы занимаетесь в {{orgName}}. Эта информация будет отобраться в ваших публичных ссылках.",
"my_profile": "Мой профиль",
"my_settings": "Мои настройки",
"crm": "CRM",
"messaging": "Сообщения",
"sender_id_info": "Имя или номер, отображаемые как отправитель SMS-сообщения (в некоторых странах не допускаются буквенно-цифровые идентификаторы)",
"org_admins_can_create_new_teams": "Только администратор вашей организации может создавать новые команды",
"google_new_spam_policy": "Из-за новой политики Google по выявлению спама вы можете не получить письма и уведомления календаря об этом забронированном событии.",
"resolve": "Разрешить",
"no_organization_slug": "При создании команд для этой организации произошла ошибка. Отсутствует слаг URL-адреса.",
"org_name": "Название организации",
"org_url": "URL-адрес организации",
"copy_link_org": "Скопировать ссылку на организацию",
"404_the_org": "Организация",
"404_the_team": "Команда",
"404_claim_entity_org": "Получите поддомен для вашей организации",
"404_claim_entity_team": "Направьте запрос в команду и начните составлять расписания вместе",
"insights_all_org_filter": "Все приложения"
"insights_all_org_filter": "Все приложения",
"insights_team_filter": "Команда: {{teamName}}",
"insights_user_filter": "Пользователь: {{userName}}",
"insights_subtitle": "Insights: просматривайте информацию о бронировании по всем вашим событиям",
"custom_plan": "Пользовательский тариф",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Добавьте строки выше ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
+93 -1
View File
@@ -118,6 +118,7 @@
"team_info": "Ekip Bilgileri",
"request_another_invitation_email": "{{appName}} e-posta adresiniz olarak {{toEmail}} adresini kullanmak istemiyorsanız veya zaten bir {{appName}} hesabınız varsa lütfen bu e-posta için başka bir davet talebinde bulunun.",
"you_have_been_invited": "{{teamName}} ekibine katılmaya davet edildiniz",
"user_invited_you": "{{user}}, sizi {{appName}} uygulamasındaki {{entity}} {{team}} ekibine katılmaya davet etti",
"hidden_team_member_title": "Bu ekipte gizlisiniz",
"hidden_team_member_message": "Yeriniz ücretli değil. Hesabınızı Pro'ya yükseltin veya ekip yöneticisinden yeriniz için ödeme yapmasını isteyin.",
"hidden_team_owner_message": "Ekipler özelliğini kullanmak için bir Pro hesabına ihtiyacınız var. Hesabınızı yükseltene kadar gizli olarak kalacaksınız.",
@@ -129,6 +130,7 @@
"upgrade_banner_action": "Buradan yükseltin",
"team_upgraded_successfully": "Ekibiniz başarıyla yükseltildi!",
"org_upgrade_banner_description": "Yeni Kurumsal planımızı denediğiniz için teşekkür ederiz. \"{{teamName}}\" adlı kuruluşunuzun planının yükseltilmesi gerektiğini fark ettik.",
"org_upgraded_successfully": "Kuruluşunuz başarıyla yükseltildi!",
"use_link_to_reset_password": "Şifrenizi sıfırlamak için aşağıdaki bağlantıyı kullanın",
"hey_there": "Selam,",
"forgot_your_password_calcom": "Şifrenizi mi unuttunuz? - {{appName}}",
@@ -503,6 +505,7 @@
"additional_guests": "Misafir ekle",
"your_name": "Adınız",
"your_full_name": "Tam adınız",
"no_name": "Ad yok",
"email_address": "E-posta adresi",
"enter_valid_email": "Lütfen geçerli bir e-posta adresi girin",
"location": "Konum",
@@ -546,6 +549,7 @@
"your_team_updated_successfully": "Ekibiniz başarıyla güncellendi.",
"about": "Hakkında",
"team_description": "Birkaç cümleyle ekibinizden bahsedin. Bu, ekibinizin URL sayfasında görünecektir.",
"org_description": "Birkaç cümleyle kuruluşunuzdan bahsedin. Bu, kuruluşunuzun URL sayfasında görünecektir.",
"members": "Üyeler",
"organization_members": "Kuruluş üyeleri",
"member": "Üye",
@@ -582,6 +586,7 @@
"confirm_all": "Tümünü onayla",
"disband_team": "Ekibi Dağıt",
"disband_team_confirmation_message": "Bu ekibi dağıtmak istediğinizden emin misiniz? Bu ekip bağlantısını paylaştığınız herkes artık bu bağlantıyı kullanarak rezervasyon yapamayacaktır.",
"disband_org": "Kuruluşu Dağıt",
"disband_org_confirmation_message": "Bu kuruluşu dağıtmak istediğinizden emin misiniz? Tüm ekipler ve üyeler silinecek.",
"remove_member_confirmation_message": "Bu üyeyi ekipten çıkarmak istediğinizden emin misiniz?",
"confirm_disband_team": "Evet, ekibi dağıt",
@@ -657,6 +662,7 @@
"event_type_updated_successfully": "{{eventTypeTitle}} etkinlik türü başarıyla güncellendi",
"event_type_deleted_successfully": "Etkinlik türü başarıyla silindi",
"hours": "Saat",
"people": "İnsan",
"your_email": "E-postanız",
"change_avatar": "Avatarı değiştir",
"language": "Dil",
@@ -689,9 +695,11 @@
"create_new_team": "Yeni ekip oluştur",
"open_invitations": "Açık Davetler",
"new_team": "Yeni Ekip",
"create_first_team_and_invite_others": "İlk ekibinizi oluşturun ve diğer kullanıcıları birlikte çalışmaya davet edin.",
"create_team_to_get_started": "Başlamak için bir ekip oluşturun",
"teams": "Ekipler",
"team": "Ekip",
"organization": "Kuruluş",
"team_billing": "Ekip Faturası",
"team_billing_description": "Ekibiniz için faturalandırmayı yönetin",
"upgrade_to_flexible_pro_title": "Ekipler için faturayı değiştirdik",
@@ -766,6 +774,7 @@
"cal_provide_huddle01_meeting_url": "{{appName}}, bir Huddle01 web3 görüntülü toplantı URL'si sağlayacaktır.",
"cal_provide_teams_meeting_url": "{{appName}}, bir MS Teams toplantı URL'si sağlayacaktır. NOT: İŞ VEYA OKUL HESABINIZIN OLMASI GEREKİR",
"require_payment": "Ödemeyi Gerekli Kılın",
"you_need_to_add_a_name": "Bir ad eklemeniz gerekiyor",
"commission_per_transaction": "işlem başına komisyon",
"event_type_updated_successfully_description": "Etkinlik türünüz başarıyla güncellendi.",
"hide_event_type": "Etkinlik türünü gizle",
@@ -856,18 +865,25 @@
"installed_apps": "Yüklü Uygulamalar",
"free_to_use_apps": "Ücretsiz",
"no_category_apps": "{{category}} uygulaması yok",
"all_apps": "Tüm uygulamalar",
"no_category_apps_description_calendar": "Çifte rezervasyonları önlemek amacıyla çakışmaları kontrol etmek için bir takvim uygulaması ekleyin",
"no_category_apps_description_conferencing": "Müşterilerinizle görüntülü aramalar yapmak için bir konferans uygulaması eklemeyi deneyin",
"no_category_apps_description_payment": "Müşterilerinizle aranızdaki işlemleri kolaylaştırmak için bir ödeme uygulaması ekleyin",
"no_category_apps_description_analytics": "Rezervasyon sayfalarınız için bir analiz uygulaması ekleyin",
"no_category_apps_description_automation": "Kullanılacak otomasyon uygulamasını ekleyin",
"no_category_apps_description_other": "Her türlü işlemi yapmak için farklı bir uygulama ekleyin",
"no_category_apps_description_web3": "Rezervasyon sayfalarınız için bir web3 uygulaması ekleyin",
"no_category_apps_description_messaging": "Özel bildirimler ve hatırlatıcılar ayarlamak için bir mesajlaşma uygulaması ekleyin",
"no_category_apps_description_crm": "Tanıştığınız kullanıcıları takip etmek için bir CRM uygulaması ekleyin",
"installed_app_calendar_description": "Çifte rezervasyonları önlemek amacıyla çakışmaları kontrol etmek için takvimleri ayarlayın.",
"installed_app_payment_description": "Müşterilerinizden ücret alırken hangi ödeme işleme hizmetlerinin kullanılacağını yapılandırın.",
"installed_app_analytics_description": "Rezervasyon sayfalarınız için hangi analiz uygulamalarını kullanacağınızı yapılandırın",
"installed_app_other_description": "Diğer kategorilerdeki tüm yüklü uygulamalarınız.",
"installed_app_conferencing_description": "Hangi konferans uygulamalarının kullanılacağını belirleyin",
"installed_app_automation_description": "Kullanılacak otomasyon uygulamalarını yapılandırın",
"installed_app_web3_description": "Rezervasyon sayfalarınız için hangi web3 uygulamalarının kullanılacağını yapılandırın",
"installed_app_messaging_description": "Özel bildirimleri ve hatırlatıcıları ayarlamak için hangi mesajlaşma uygulamalarının kullanılacağını belirleyin",
"installed_app_crm_description": "Tanıştığınız kullanıcıları takip etmek için hangi CRM uygulamalarının kullanılacağını belirleyin",
"analytics": "Analizler",
"empty_installed_apps_headline": "Yüklü uygulama yok",
"empty_installed_apps_description": "Uygulamalar, iş akışınızı iyileştirmenize ve planlama sürecinizi önemli ölçüde geliştirmenize olanak tanır.",
@@ -893,6 +909,7 @@
"create_events_on": "Şurada etkinlik oluşturun:",
"enterprise_license": "Bu bir kurumsal özelliktir",
"enterprise_license_description": "Bu özelliği etkinleştirmek için {{consoleUrl}} konsolundan bir dağıtım anahtarı alın ve bunu .env dosyanıza CALCOM_LICENSE_KEY olarak ekleyin. Ekibinizin zaten bir lisansı varsa yardım için lütfen {{supportMail}} adresinden iletişime geçin.",
"enterprise_license_development": "Bu özelliği geliştirme modunda deneyebilirsiniz. Üretim kullanımı için bir yöneticinin <2>yetkilendirme/kurulum</2> seçeneklerine giderek ve bir lisans anahtarı girmesi gerekir.",
"missing_license": "Eksik Lisans",
"signup_requires": "Ticari lisans gerekli",
"signup_requires_description": "{{companyName}} şu anda kayıt sayfasının ücretsiz, açık kaynaklı bir sürümünü sunmamaktadır. Kayıt bileşenlerine tam erişim elde etmek için ticari bir lisans almanız gerekiyor. Kişisel kullanım için hesap oluşturmak üzere Prisma Data veya başka bir Postgres arayüzü öneriyoruz.",
@@ -962,6 +979,7 @@
"confirm_delete_api_key": "Bu API anahtarını iptal et",
"revoke_api_key": "API anahtarını iptal et",
"api_key_copied": "API anahtarı kopyalandı!",
"api_key_expires_on": "API anahtarının süresi şu tarihte dolacak:",
"delete_api_key_confirm_title": "Bu API anahtarı hesabınızdan kalıcı olarak kaldırılsın mı?",
"copy": "Kopyala",
"expire_date": "Son tarih",
@@ -984,6 +1002,9 @@
"user_impersonation_heading": "Kullanıcı Kimliğine Bürünme",
"user_impersonation_description": "Bize bildirdiğiniz hataları hızlı bir şekilde çözmek için destek ekibimizin sizin adınıza geçici olarak oturum açmasına izin verir.",
"team_impersonation_description": "Ekip üyelerinizin sizin adınıza geçici olarak oturum açmasına izin verir.",
"make_team_private": "Ekibi özel yap",
"make_team_private_description": "Bu özellik açıldığında ekip üyeleriniz diğer ekip üyelerini göremez.",
"you_cannot_see_team_members": "Özel bir ekibin tüm ekip üyelerini göremezsiniz.",
"allow_booker_to_select_duration": "Rezervasyon yapan kişinin süreyi seçmesine izin ver",
"impersonate_user_tip": "Bu özelliğin tüm kullanımları denetlenir.",
"impersonating_user_warning": "\"{{user}}\" kullanıcı adı kimliğine bürünme.",
@@ -1051,16 +1072,21 @@
"event_location": "Etkinliğin konumu",
"reschedule_optional": "Yeniden planlama nedeni (isteğe bağlı)",
"reschedule_placeholder": "Neden yeniden planlama ihtiyacı duyduğunuzu diğer kişilere bildirin",
"event_cancelled": "Bu etkinlik iptal edildi",
"emailed_information_about_cancelled_event": "Sizi ve diğer katılımcıları bilgilendirmek için bir e-posta gönderdik.",
"this_input_will_shown_booking_this_event": "Bu girdi, bu etkinlik için rezervasyon yapılırken gösterilecek",
"meeting_url_in_conformation_email": "Toplantı URL'si onay e-postasında mevcut",
"url_start_with_https": "URL'nin http:// veya https:// ile başlaması gerekiyor",
"number_provided": "Telefon numarası sağlanacaktır",
"before_event_trigger": "etkinlik başlamadan önce",
"event_cancelled_trigger": "etkinlik iptal edildiğinde",
"new_event_trigger": "yeni bir etkinlik için rezervasyon yapıldığında",
"email_host_action": "organizatöre e-posta gönder",
"email_attendee_action": "katılımcılara e-posta gönder",
"sms_attendee_action": "Katılımcıya SMS gönder",
"sms_number_action": "belirli bir numaraya SMS gönder",
"whatsapp_number_action": "belirli bir numaraya Whatsapp mesajı gönder",
"whatsapp_attendee_action": "katılımcıya Whatsapp mesajı gönder",
"workflows": "İş akışları",
"new_workflow_btn": "Yeni İş Akışı",
"add_new_workflow": "Yeni iş akışı ekle",
@@ -1124,6 +1150,8 @@
"choose_template": "Bir şablon seçin",
"custom": "Özel",
"reminder": "Hatırlatıcı",
"rescheduled": "Yeniden planlandı",
"completed": "Tamamlandı",
"reminder_email": "Hatırlatma: {{date}} tarihinde {{name}} ile {{eventType}}",
"not_triggering_existing_bookings": "Etkinlik rezervasyonu yapılırken kullanıcıdan bir telefon numarası belirtmesi isteneceğinden mevcut rezervasyonlar için etkinleştirilmeyecektir.",
"minute_one": "{{count}} dakika",
@@ -1221,6 +1249,7 @@
"start_of_week": "Haftanın başlangıcı",
"recordings_title": "Kayıtlar",
"recording": "Kayıt",
"happy_scheduling": "İyi planlamalar",
"select_calendars": "Çifte rezervasyonu önlemek için çakışmaları kontrol etmek istediğiniz takvimleri seçin.",
"check_for_conflicts": "Çakışmaları kontrol edin",
"view_recordings": "Kayıtları görüntüle",
@@ -1262,6 +1291,7 @@
"conferencing_description": "Toplantılarınız için favori video konferans uygulamalarınızı yönetin",
"add_conferencing_app": "Konferans Uygulaması ekle",
"password_description": "Hesap şifreleriniz için ayarları yönetin",
"set_up_two_factor_authentication": "İki Faktörlü Kimlik Doğrulamanızı ayarlayın",
"we_just_need_basic_info": "Profil kurulumunuzu almak için sadece bazı temel bilgilere ihtiyacımız var.",
"skip": "Atla",
"do_this_later": "Bunu daha sonra yap",
@@ -1275,6 +1305,8 @@
"connect_analytics_apps": "Analiz uygulamaları bağlayın",
"connect_other_apps": "Diğer uygulamaları bağlayın",
"connect_web3_apps": "Web3 uygulamalarını bağlayın",
"connect_messaging_apps": "Mesajlaşma uygulamalarını bağlayın",
"connect_crm_apps": "CRM uygulamalarını bağlayın",
"current_step_of_total": "{{currentStep}} / {{maxSteps}}. Adım",
"add_variable": "Değişken ekle",
"custom_phone_number": "Özel telefon numarası",
@@ -1287,12 +1319,14 @@
"location_info": "Etkinlik yeri",
"additional_notes_info": "Ek rezervasyon notları",
"attendee_name_info": "Rezervasyon yaptıran kişinin adı",
"organizer_name_info": "Düzenleyenin adı",
"to": "Kime",
"workflow_turned_on_successfully": "{{workflowName}} iş akışı başarıyla {{offOn}} hale getirildi",
"download_responses": "Yanıtları İndir",
"download_responses_description": "Formunuza gelen tüm yanıtları CSV formatında indirin.",
"download": "İndir",
"download_recording": "Kaydı İndir",
"recording_from_your_recent_call": "{{appName}} uygulamasındaki son aramanızın kaydı indirilmeye hazır",
"create_your_first_form": "İlk formunuzu oluşturun",
"create_your_first_form_description": "Yönlendirme Formları ile yeterlik soruları sorabilir ve bunları doğru kişiye veya etkinlik türüne yönlendirebilirsiniz.",
"create_your_first_webhook": "İlk Web kancanızı oluşturun",
@@ -1301,7 +1335,9 @@
"event_one": "etkinlik",
"event_other": "etkinlik",
"profile_team_description": "Ekip profiliniz için ayarları yönetin",
"profile_org_description": "Kuruluş profiliniz için ayarları yönetin",
"members_team_description": "Gruptaki kullanıcılar",
"organization_description": "Kuruluşunuzdaki yöneticileri ve üyeleri yönetin",
"team_url": "Ekip URL'si",
"team_members": "Ekip üyeleri",
"more": "Daha fazla",
@@ -1342,6 +1378,7 @@
"routing_forms_send_email_owner": "Sahibine E-posta Gönderin",
"routing_forms_send_email_owner_description": "Form gönderildiğinde sahibine bir e-posta gönderir",
"add_new_form": "Yeni form ekle",
"add_new_team_form": "Ekibinize yeni bir form ekleyin",
"create_your_first_route": "İlk yönlendirmenizi oluşturun",
"route_to_the_right_person": "Formunuza verilen yanıtlara göre doğru kişiye yönlendirin",
"form_description": "Rezervasyon yapan kişiyi yönlendirmek için formunuzu oluşturun",
@@ -1446,6 +1483,7 @@
"yearly": "Yıllık",
"checkout": "Ödeme yap",
"your_team_disbanded_successfully": "Ekibiniz başarıyla dağıtıldı",
"your_org_disbanded_successfully": "Kuruluşunuz başarıyla dağıtıldı",
"error_creating_team": "Ekip oluşturulurken bir hata oluştu",
"you": "Siz",
"resend_email": "E-postayı tekrar gönder",
@@ -1455,6 +1493,7 @@
"must_enter_team_name": "Ekip adı girilmelidir",
"team_url_required": "Ekip URL'si girilmelidir",
"url_taken": "Bu URL zaten kullanılıyor",
"problem_registering_domain": "Alt alan adı kaydıyla ilgili bir sorun oluştu, lütfen tekrar deneyin veya bir yöneticiyle iletişime geçin",
"team_publish": "Ekibi yayınla",
"number_text_notifications": "Telefon numarası (SMS bildirimleri)",
"attendee_email_variable": "Katılımcı e-postası",
@@ -1479,6 +1518,7 @@
"find_the_best_person": "Mevcut en iyi kişiyi bulun ve ekip üyeleriniz arasında rotasyon yapın.",
"fixed_round_robin": "Sabit döngü",
"add_one_fixed_attendee": "Bir sabit katılımcı ekleyin ve katılımcı sayısına göre rotasyon yapın.",
"calcom_is_better_with_team": "{{appName}}, ekiplerle daha iyidir",
"the_calcom_team": "{{companyName}} ekibi",
"add_your_team_members": "Ekip üyelerinizi etkinlik türlerinize ekleyin. Herkesi eklemek için toplu planlamayı kullanın veya döngüsel planlama ile en uygun kişiyi bulun.",
"booking_limit_reached": "Bu etkinlik türü için Rezervasyon Sınırına ulaşıldı",
@@ -1498,6 +1538,7 @@
"navigate_installed_apps": "Yüklü uygulamalara git",
"disabled_calendar": "Yüklü başka bir takviminiz varsa yeni randevular bu takvime eklenir. Aksi takdirde yeni bir takvim bağlamazsanız yeni rezervasyonları kaçırabilirsiniz.",
"enable_apps": "Uygulamaları Etkinleştir",
"enable_apps_description": "Kullanıcıların {{appName}} ile entegre edebileceği uygulamaları etkinleştirin",
"purchase_license": "Lisans satın alın",
"already_have_key": "Zaten bir anahtarım var:",
"already_have_key_suggestion": "Lütfen mevcut CALCOM_LICENSE_KEY ortam değişkeninizi buraya kopyalayın.",
@@ -1617,7 +1658,10 @@
"delete_sso_configuration_confirmation_description": "{{connectionType}} yapılandırmasını silmek istediğinizden emin misiniz? {{connectionType}} girişini kullanan ekip üyeleriniz artık Cal.com'a erişemeyecek.",
"organizer_timezone": "Organizatörün saat dilimi",
"email_user_cta": "Daveti görüntüle",
"email_no_user_invite_heading": "{{appName}} {{entity}} uygulamasına katılmaya davet edildiniz",
"email_no_user_invite_subheading": "{{invitedBy}}, sizi {{appName}} ekibine katılmaya davet etti. {{appName}}, size ve ekibinize e-posta iletişimine ihtiyaç duymadan toplantı planlama yapma olanağı sağlayan bir etkinlik planlayıcıdır.",
"email_user_invite_subheading": "{{invitedBy}}, sizi {{appName}} uygulamasındaki {{entity}} `{{teamName}}` ekibine katılmaya davet etti. {{appName}}, size ve {{entity}} ekibinize e-posta iletişimine ihtiyaç duymadan toplantı planlama yapma olanağı sağlayan bir etkinlik planlayıcıdır.",
"email_no_user_invite_steps_intro": "{{entity}} ekibinizle birlikte kısa sürede ve sorunsuz planlama yapmanın keyfini çıkarmanız için birkaç adımda size rehberlik edeceğiz.",
"email_no_user_step_one": "Kullanıcı adınızı seçin",
"email_no_user_step_two": "Takvim hesabınızı bağlayın",
"email_no_user_step_three": "Müsaitlik durumunuzu ayarlayın",
@@ -1628,6 +1672,7 @@
"scheduler": "{Scheduler}",
"no_workflows": "İş akışı yok",
"change_filter": "Kişisel ve ekip iş akışlarınızı görmek için filtreyi değiştirin.",
"change_filter_common": "Sonuçları görmek için filtreyi değiştirin.",
"no_results_for_filter": "Filtre için hiçbir sonuç bulunamadı",
"recommended_next_steps": "Önerilen sonraki adımlar",
"create_a_managed_event": "Yönetilen bir olay türü oluşturun",
@@ -1641,6 +1686,7 @@
"attendee_no_longer_attending": "Bir katılımcı artık etkinliğinize katılmıyor",
"attendee_no_longer_attending_subtitle": "{{name}} etkinlik katılımını iptal etti. Bu, bu zaman aralığı için bir yerin açıldığı anlamına gelir",
"create_event_on": "Şu tarih için etkinlik oluşturun:",
"create_routing_form_on": "Şurası için yönlendirme formu oluştur:",
"default_app_link_title": "Varsayılan uygulama bağlantısını ayarlayın",
"default_app_link_description": "Varsayılan uygulama bağlantısını ayarlamak, yeni oluşturulan tüm etkinlik türlerinin ayarladığınız uygulama bağlantısını kullanmasına olanak tanır.",
"organizer_default_conferencing_app": "Organizatörün varsayılan uygulaması",
@@ -1650,6 +1696,7 @@
"booking_questions_title": "Rezervasyon soruları",
"booking_questions_description": "Rezervasyon sayfasında sorulan soruları özelleştirin",
"add_a_booking_question": "Soru ekle",
"identifier": "Tanımlayıcı",
"duplicate_email": "E-posta yinelenmiş",
"booking_with_payment_cancelled": "Artık bu etkinlik için ödeme yapılamıyor",
"booking_with_payment_cancelled_already_paid": "Bu rezervasyon ödemesi için iade yolda.",
@@ -1660,6 +1707,7 @@
"show_on_booking_page": "Rezervasyon sayfasında göster",
"get_started_zapier_templates": "Zapier şablonlarını kullanmaya başlayın",
"team_is_unpublished": "{{team}} paylaşılmadı",
"team_is_unpublished_description": "Bu {{entity}} bağlantısı şu anda kullanılamıyor. Lütfen {{entity}} sahibiyle iletişime geçin veya ondan bir bağlantı paylaşmasını isteyin.",
"team_member": "Ekip üyesi",
"a_routing_form": "Yönlendirme Formu",
"form_description_placeholder": "Form Açıklaması",
@@ -1689,6 +1737,7 @@
"spot_popular_event_types": "Popüler etkinlik türlerini tespit edin",
"spot_popular_event_types_description": "Hangi etkinlik türünüzün en çok tıklandığını ve rezervasyon aldığını görün",
"no_responses_yet": "Henüz yanıt yok",
"no_routes_defined": "Yönlendirmeler tanımlanmadı",
"this_will_be_the_placeholder": "Bu, yer tutucu olacak",
"error_booking_event": "Etkinlik rezervasyonu yapılırken bir hata oluştu, lütfen sayfayı yenileyerek tekrar deneyin",
"timeslot_missing_title": "Zaman aralığı seçilmedi",
@@ -1697,6 +1746,7 @@
"switch_monthly": "Aylık görünüme geç",
"switch_weekly": "Haftalık görünüme geç",
"switch_multiday": "Gün görünümüne geç",
"switch_columnview": "Sütun görünümüne geç",
"num_locations": "{{num}} konum seçeneği",
"select_on_next_step": "Bir sonraki adımda seç",
"this_meeting_has_not_started_yet": "Bu toplantı henüz başlamadı",
@@ -1735,6 +1785,7 @@
"managed_event_dialog_title_one": "URL /{{slug}}, {{count}} üye için zaten mevcut. Bunu değiştirmek istiyor musunuz?",
"managed_event_dialog_title_other": "URL /{{slug}}, {{count}} üye için zaten mevcut. Bunu değiştirmek istiyor musunuz?",
"managed_event_dialog_information_one": "<strong>{{names}}</strong> zaten <strong>/{{slug}}</strong> URL'sini kullanıyor.",
"managed_event_dialog_information_other": "<strong>{{names}}</strong> zaten <strong>/{{slug}}</strong> URL'sini kullanıyor.",
"managed_event_dialog_clarification": "Değiştirmeyi seçmeniz durumunda onları bilgilendiririz. Üzerine yazmak istemiyorsanız geri dönerek onları kaldırın.",
"review_event_type": "Etkinlik Türünü inceleyin",
"looking_for_more_analytics": "Daha fazla analiz mi arıyorsunuz?",
@@ -1789,11 +1840,13 @@
"invite_link_copied": "Davet bağlantısı kopyalandı",
"invite_link_deleted": "Davet bağlantısı silindi",
"invite_link_updated": "Davet bağlantısı ayarları kaydedildi",
"link_expires_after": "Bağlantının sona erme süresi ayarlandı...",
"one_day": "1 gün",
"seven_days": "7 gün",
"thirty_days": "30 gün",
"three_months": "3 ay",
"one_year": "1 yıl",
"team_invite_received": "{{teamName}} ekibine katılmaya davet edildiniz",
"currency_string": "{{amount, currency}}",
"charge_card_dialog_body": "Katılımcıdan {{amount, currency}} tahsil etmek üzeresiniz. Devam etmek istediğinizden emin misiniz?",
"charge_attendee": "Katılımcıdan {{amount, currency}} tahsil edin",
@@ -1802,6 +1855,7 @@
"email_invite_team_bulk": "{{userCount}} kullanıcı davet edildi",
"error_collecting_card": "Kart bilgileri alınırken hata oluştu",
"image_size_limit_exceed": "Yüklenen resim boyutu 5 MB boyut limitini aşmamalıdır",
"unauthorized_workflow_error_message": "{{errorCode}}: Bu iş akışını etkinleştirme veya devre dışı bırakma yetkiniz yok",
"inline_embed": "Satır İçine Yerleştir",
"load_inline_content": "Etkinlik türünüzü doğrudan diğer web sitesi içeriğinizle birlikte yükler.",
"floating_pop_up_button": "Kayan açılır düğme",
@@ -1821,8 +1875,13 @@
"connect_google_workspace": "Google Workspace'i bağlayın",
"google_workspace_admin_tooltip": "Bu özelliği kullanmak için Çalışma Alanı Yöneticisi olmalısınız",
"first_event_type_webhook_description": "Bu etkinlik türü için ilk web kancanızı oluşturun",
"install_app_on": "Uygulamayı şuraya yükle:",
"create_for": "Oluşturun",
"setup_organization": "Bir Kuruluş Oluşturun",
"organization_banner_description": "Ekiplerinizin, döngüsel ve toplu planlama ile paylaşılan uygulamalar, iş akışları ve olay türleri oluşturabileceği bir ortam oluşturun.",
"organization_banner_title": "Kuruluşları birden çok ekiple yönetin",
"set_up_your_organization": "Kuruluşunuzu düzenleyin",
"organizations_description": "Kuruluşlar, ekiplerin paylaşımlı etkinlik türleri, uygulamalar, iş akışları ve daha fazlasını oluşturabileceği paylaşımlı ortamlardır.",
"must_enter_organization_name": "Bir kuruluş adı girilmelidir",
"must_enter_organization_admin_email": "Kuruluşunuzun e-posta adresini girmelisiniz",
"admin_email": "Kuruluşunuzun e-posta adresi",
@@ -1833,19 +1892,52 @@
"organization_verify_email_body": "Kuruluşunuzu düzenlemeye devam etmek ve e-posta adresinizi doğrulamak için lütfen aşağıdaki kodu kullanın.",
"additional_url_parameters": "Ek URL parametreleri",
"about_your_organization": "Kuruluşunuz hakkında",
"about_your_organization_description": "Kuruluşlar; paylaşımlı üyeler, etkinlik türleri, uygulamalar, iş akışları ve daha fazlasıyla birden çok ekip oluşturabileceğiniz paylaşımlı ortamlardır.",
"create_your_teams": "Ekibinizi oluşuturun",
"create_your_teams_description": "Ekip üyelerinizi kuruluşunuza ekleyerek planlama işlerinizi birlikte yapmaya başlayın",
"invite_organization_admins": "Kuruluşunuzun yöneticilerini davet edin",
"invite_organization_admins_description": "Bu yöneticilerin kuruluşunuzdaki tüm ekiplere erişimi olacaktır. Ekip yöneticilerini ve üyeleri daha sonra ekleyebilirsiniz.",
"set_a_password": "Bir şifre belirleyin",
"set_a_password_description": "Kuruluşunuzun e-posta adresi ve bu şifre ile yeni bir kullanıcı hesabı oluşturulacaktır.",
"organization_logo": "Kuruluş Logosu",
"organization_about_description": "Birkaç cümleyle kuruluşunuzdan bahsedin. Bu, kuruluşunuzun herkese açık profil sayfasında görünecektir.",
"ill_do_this_later": "Bunu daha sonra yapacağım",
"verify_your_email": "E-posta adresinizi doğrulayın",
"enter_digit_code": "{{email}} adresine gönderdiğimiz 6 haneli kodu girin",
"verify_email_organization": "Bir kuruluş oluşturmak için e-postanızı doğrulayın",
"code_provided_invalid": "Sağlanan kod geçerli değil, tekrar deneyin",
"email_already_used": "E-posta zaten kullanılıyor",
"organization_admin_invited_heading": "{{orgName}} ekibine katılmaya davet edildiniz",
"organization_admin_invited_body": "{{orgName}} ekibine katılın ve toplantıları planlamaya değil, toplantılarınıza odaklanın!",
"duplicated_slugs_warning": "Aşağıdaki ekipler, yinelenen bilgi hataları nedeniyle oluşturulamadı: {{slugs}}",
"team_names_empty": "Ekip adları boş olamaz",
"team_names_repeated": "Takım adları tekrar edilemez",
"user_belongs_organization": "Kullanıcı bir kuruluşa ait",
"org_no_teams_yet": "Bu kuruluşun henüz ekibi yok",
"org_no_teams_yet_description": "Yöneticiyseniz, burada gösterilecek ekipler oluşturduğunuzdan emin olun.",
"set_up": "Düzenle",
"set_up_your_profile": "Profilinizi düzenleyin",
"set_up_your_profile_description": "{{orgName}}'deki kişilerin kim olduğunuzu ve herkese açık bir bağlantı aracılığıyla sizinle nasıl bağlantı kuracaklarını bilmelerini sağlayın.",
"my_profile": "Profilim",
"my_settings": "Ayarlarım",
"crm": "CRM",
"messaging": "Mesajlaşma",
"sender_id_info": "SMS'i gönderen alanında gösterilen ad veya numara (bazı ülkeler alfasayısal gönderen kimliklerine izin vermez)",
"org_admins_can_create_new_teams": "Yalnızca kuruluşunuzun yöneticisi yeni ekipler oluşturabilir",
"google_new_spam_policy": "Google'ın yeni spam politikası nedeniyle bu rezervasyon için e-posta veya takvim bildirimleri alamayabilirsiniz.",
"resolve": "Çöz",
"no_organization_slug": "Bu kuruluş için ekipler oluşturulurken bir hata oluştu. URL bilgisi eksik.",
"org_name": "Kuruluş adı",
"org_url": "Kuruluş URL'si",
"copy_link_org": "Bağlantıyı kuruluşa kopyala",
"404_the_org": "Kuruluş",
"404_the_team": "Ekip",
"404_claim_entity_org": "Kuruluşunuz için alt alan adınızı talep edin",
"404_claim_entity_team": "Bu ekibi sahiplenin ve planlamaları toplu şekilde yönetmeye başlayın",
"insights_all_org_filter": "Tümü",
"insights_team_filter": "Ekip: {{teamName}}",
"insights_user_filter": "Kullanıcı: {{userName}}",
"custom_plan": "Özel Plan"
"insights_subtitle": "Etkinlikleriniz için rezervasyon analizlerini görüntüleyin",
"custom_plan": "Özel Plan",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Yeni dizelerinizi yukarıya ekleyin ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
+182 -1
View File
@@ -14,12 +14,20 @@
"verify_email_subject": "{{appName}}; Xác minh tài khoản của bạn",
"check_your_email": "Kiểm tra email của bạn",
"verify_email_page_body": "Chúng tôi đã gửi một email đến {{email}}. Điều quan trọng là cần xác minh địa chỉ email để bảo đảm {{appName}} có thể gửi được email và lịch đến một cách ổn thoả nhất.",
"verify_email_banner_body": "Xác minh địa chỉ email của bạn nhằm bảo đảm gửi đi được email và lịch hẹn thật ổn thoả",
"verify_email_email_header": "Xác minh địa chỉ email của bạn",
"verify_email_email_button": "Xác minh email",
"verify_email_email_body": "Vui lòng xác minh địa chỉ email của bạn bằng cách nhấp vào nút bên dưới.",
"verify_email_email_link_text": "Đây là liên kết phòng trường hợp bạn không thích nhấp vào nút:",
"email_sent": "Email đã gửi thành công",
"event_declined_subject": "Đã từ chối: {{title}} tại {{date}}",
"event_cancelled_subject": "Đã huỷ: {{title}} vào {{date}}",
"event_request_declined": "Lời mời sự kiện của bạn đã bị từ chối",
"event_request_declined_recurring": "Lời mời sự kiện định kỳ của bạn đã bị từ chối",
"event_request_cancelled": "Sự kiện của bạn đã bị huỷ",
"organizer": "Tổ chức",
"need_to_reschedule_or_cancel": "Cần phải đổi lịch hẹn hoặc huỷ?",
"no_options_available": "Không tuỳ chọn nào khả dụng",
"cancellation_reason": "Lý do hủy",
"cancellation_reason_placeholder": "Lý do bạn muốn hủy?",
"rejection_reason": "Lý do từ chối",
@@ -79,7 +87,9 @@
"your_meeting_has_been_booked": "Cuộc họp của bạn đã được đặt",
"event_type_has_been_rescheduled_on_time_date": "{{title}} của bạn đã được chuyển sang ngày {{date}}.",
"event_has_been_rescheduled": "Đã cập nhật - Sự kiện của bạn đã được đổi",
"request_reschedule_subtitle": "{{organizer}} đã huỷ đặt chỗ đó và yêu cầu bạn chọn thời gian khác.",
"request_reschedule_title_organizer": "Bạn đã yêu cầu {{attendee}} xếp lại lịch",
"request_reschedule_subtitle_organizer": "Bạn đã huỷ mục đặt chỗ này và {{attendee}} nên chọn thời gian đặt chỗ mới với bạn.",
"rescheduled_event_type_subject": "Đã gửi yêu cầu xếp lại lịch: {{eventType}} với {{name}} lúc {{date}}",
"requested_to_reschedule_subject_attendee": "Thao tác cần làm để xếp lại lịch: Vui lòng đặt thời gian mới cho {{eventType}} với {{name}}",
"hi_user_name": "Xin chào {{name}}",
@@ -120,6 +130,7 @@
"upgrade_banner_action": "Nâng cấp tại đây",
"team_upgraded_successfully": "Nhóm bạn đã được nâng cấp thành công!",
"org_upgrade_banner_description": "Cám ơn bạn đã dùng thử gói Tổ chức. Chúng tôi để ý thấy Tổ chức \"{{teamName}}\" của bạn cần được nâng cấp.",
"org_upgraded_successfully": "Tổ chức của bạn đã được nâng cấp thành công!",
"use_link_to_reset_password": "Sử dụng đường link dưới đây để thay đổi mật khẩu của bạn",
"hey_there": "Xin chào,",
"forgot_your_password_calcom": "Quên mật khẩu của bạn? - {{appName}}",
@@ -186,6 +197,7 @@
"blog": "Blog",
"blog_description": "Đọc tin tức và bài báo mới nhất của chúng tôi",
"join_our_community": "Tham gia cộng đồng của chúng tôi",
"join_our_discord": "Gia nhập Discord của chúng tôi",
"404_claim_entity_user": "Lấy tên người dùng của bạn và lên lịch sự kiện",
"popular_pages": "Các trang phổ biến",
"register_now": "Đăng ký ngay",
@@ -193,6 +205,7 @@
"page_doesnt_exist": "Trang này không tồn tại.",
"check_spelling_mistakes_or_go_back": "Kiểm tra lỗi chính tả hoặc quay lại trang trước.",
"404_page_not_found": "404: Không thể tìm thấy trang này.",
"booker_event_not_found": "Chúng tôi không thể tìm thấy sự kiện mà bạn đang tìm cách đặt hẹn.",
"getting_started": "Bắt Đầu",
"15min_meeting": "Cuộc họp 15 phút",
"30min_meeting": "Cuộc họp 30 phút",
@@ -228,11 +241,14 @@
"done": "Xong",
"all_done": "Đã xong hết!",
"all": "Tất cả",
"yours": "Tài khoản của bạn",
"available_apps": "Ứng dụng hiện có",
"check_email_reset_password": "Kiểm tra hộp thư điện tử của bạn. Chúng tôi đã gửi cho bạn một liên kết để đặt lại mật khẩu của bạn.",
"finish": "Hoàn thành",
"organization_general_description": "Quản lí cài đặt cho ngôn ngữ và múi giờ của nhóm bạn",
"few_sentences_about_yourself": "Vài câu về bản thân bạn - nó sẽ xuất hiện trên trang cá nhân của bạn.",
"nearly_there": "Sắp xong rồi!",
"nearly_there_instructions": "Điều cuối cùng, mô tả ngắn gọn về bạn và một bức ảnh để giúp bạn nhận lịch hẹn dễ hơn và cho mọi người biết họ đang đặt lịch hẹn với ai.",
"set_availability_instructions": "Xác định những phạm vi thời gian bạn có thể chấp nhận lịch hẹn định kỳ. Bạn có thể tạo thêm phạm vi thời gian này sau và gán chúng vào các lịch khác nhau.",
"set_availability": "Đặt lịch khả dụng của bạn",
"continue_without_calendar": "Tiếp tục mà không có lịch",
@@ -288,6 +304,18 @@
"success": "Thành công",
"failed": "Thất bại",
"password_has_been_reset_login": "Mật khẩu của bạn đã được thiết lập lại. Bây giờ bạn có thể đăng nhập bằng mật khẩu mới tạo của mình.",
"layout": "Bố trí",
"bookerlayout_default_title": "Giao diện mặc định",
"bookerlayout_description": "Bạn có thể chọn nhiều dạng và người đặt lịch hẹn có thể chuyển đổi qua lại các giao diện.",
"bookerlayout_user_settings_title": "Bố trí lịch hẹn",
"bookerlayout_user_settings_description": "Bạn có thể chọn nhiều dạng và người đặt lịch hẹn có thể chuyển đổi qua lại các giao diện. Dạng này có thể được thay thế tuỳ theo loại sự kiện.",
"bookerlayout_month_view": "Tháng",
"bookerlayout_week_view": "Hằng tuần",
"bookerlayout_column_view": "Cột",
"bookerlayout_error_min_one_enabled": "Ít nhất phải bật một bố trí.",
"bookerlayout_error_default_not_enabled": "Bố trí mà bạn chọn làm giao diện mặc định không phải là một phần của những bố trí đã bật.",
"bookerlayout_error_unknown_layout": "Bố trí mà bạn chọn không phải là bố trí hợp lệ.",
"bookerlayout_override_global_settings": "Bạn có thể quản lý cái này cho tất cả những loại sự kiện của bạn, trong phần <2>cài đặt / hiển thị</2> hoặc <6>ghi đè chỉ cho sự kiện này</6>.",
"unexpected_error_try_again": "Đã xảy ra lỗi không mong muốn. Hãy thử lại.",
"sunday_time_error": "Thời gian không hợp lệ vào Chủ Nhật",
"monday_time_error": "Thời gian không hợp lệ vào Thứ Hai",
@@ -300,6 +328,7 @@
"error_end_time_next_day": "Thời gian kết thúc không được lớn hơn 24 giờ",
"back_to_bookings": "Quay lại các lịch hẹn",
"free_to_pick_another_event_type": "Hãy tuỳ ý chọn một sự kiện khác bất cứ lúc nào.",
"cancelled": "Đã hủy",
"cancellation_successful": "Hủy thành công",
"really_cancel_booking": "Thực sự hủy lịch hẹn của bạn?",
"cannot_cancel_booking": "Bạn không thể hủy lịch hẹn này",
@@ -308,6 +337,12 @@
"cancelling_event_recurring": "Sự kiện này là một trường hợp về một sự kiện định kỳ.",
"cancelling_all_recurring": "Đây là tất cả những trường hợp còn lại trong sự kiện định kỳ.",
"error_with_status_code_occured": "Đã xảy ra lỗi với mã trạng thái {{status}}.",
"error_event_type_url_duplicate": "Đã tồn tại một loại sự kiện với URL này.",
"error_event_type_unauthorized_create": "Bạn không thể tạo sự kiện này",
"error_event_type_unauthorized_update": "Bạn không thể sửa sự kiện này",
"error_workflow_unauthorized_create": "Bạn không thể tạo tiến dộ công việc này",
"error_schedule_unauthorized_create": "Bạn không thể tạo lịch này",
"booking_already_cancelled": "Lịch hẹn này đã bị hủy",
"booking_already_accepted_rejected": "Lịch hẹn này đã được chấp nhận hoặc từ chối",
"go_back_home": "Trở về trang chủ",
"or_go_back_home": "Hoặc trở về trang chủ",
@@ -317,10 +352,12 @@
"no_status_bookings_yet_description": "Bạn không có lịch hẹn {{status}} nào. {{description}}",
"event_between_users": "{{eventName}} giữa {{host}} và {{attendeeName}}",
"bookings": "Các lịch hẹn",
"booking_not_found": "Lịch hẹn không tìm thấy",
"bookings_description": "Xem các sự kiện sắp tới và \btrong quá khứ mà đã đặt thông qua các liên kết loại sự kiện của bạn.",
"upcoming_bookings": "Ngay sau khi ai đó đặt lịch với bạn, nó sẽ hiển thị ở đây.",
"recurring_bookings": "Ngay sau khi ai đó đặt hẹn một cuộc họp định kỳ với bạn, nó sẽ hiển thị ở đây.",
"past_bookings": "Các lịch hẹn trước đây của bạn sẽ hiển thị ở đây.",
"cancelled_bookings": "Các lịch hẹn đã hủy của bạn sẽ hiển thị ở đây.",
"unconfirmed_bookings": "Lịch hẹn chưa xác nhận của bạn sẽ hiển thị ở đây.",
"unconfirmed_bookings_tooltip": "Lịch hẹn chưa xác nhận",
"on": "vào",
@@ -354,15 +391,19 @@
"user_dynamic_booking_disabled": "Một số người dùng trong nhóm hiện đã tắt chức năng đặt chỗ động cho nhóm",
"allow_dynamic_booking_tooltip": "Những liên kết đặt chỗ nhóm vốn có thể được tạo linh động bằng cách thêm nhiều tên người dùng bằng một dấu '+'. Ví dụ như '{{appName}}/bailey+peer'",
"allow_dynamic_booking": "Cho phép người tham gia đặt chỗ cho bạn thông qua chức năng đặt chỗ động cho nhóm",
"dynamic_booking": "Liên kết động cho nhóm",
"email": "Email",
"email_placeholder": "nvana@vidu.com",
"full_name": "Họ và tên",
"browse_api_documentation": "Xem qua tài liệu API của chúng tôi",
"leverage_our_api": "Tận dụng API của chúng tôi để có toàn quyền kiểm soát và chỉnh sửa theo ý bạn.",
"create_webhook": "Tạo Webhook",
"booking_cancelled": "Lịch hẹn đã bị hủy",
"booking_rescheduled": "Lịch hẹn đã được đổi",
"recording_ready": "Đã sẵn sàng liên kết tải xuống bản ghi",
"booking_created": "Lịch hẹn đã được tạo",
"booking_rejected": "Lịch hẹn đã bị từ chối",
"booking_requested": "Lịch hẹn đã được yêu cầu",
"meeting_ended": "Cuộc họp đã kết thúc",
"form_submitted": "Biểu mẫu đã được gửi",
"event_triggers": "Sự kiện kích hoạt",
@@ -372,6 +413,8 @@
"team_webhooks": "Webhooks Nhóm",
"create_new_webhook_to_account": "Tạo một webhook mới cho tài khoản của bạn",
"new_webhook": "Webhook mới",
"receive_cal_meeting_data": "Nhận dữ liệu cuộc họp {{appName}} tại một URL được chỉ định, trong thời gian thực, khi một sự kiện được lên lịch hoặc hủy bỏ.",
"receive_cal_event_meeting_data": "Nhận dữ liệu cuộc họp {{appName}} tại một URL được chỉ định, trong thời gian thực, khi sự kiện này được lên lịch hoặc hủy bỏ.",
"responsive_fullscreen_iframe": "Iframe responsive toàn màn hình",
"loading": "Đang tải...",
"deleting": "Đang xóa...",
@@ -434,6 +477,7 @@
"max_limit_allowed_hint": "Phải dài {{limit}} ký tự trở xuống",
"invalid_password_hint": "Mật khẩu phải có tối thiểu {{passwordLength}} ký tự chứa ít nhất một con số và phải kết hợp chữ cái in hoa lẫn in thường",
"incorrect_password": "Mật khẩu không đúng.",
"incorrect_email_password": "Sai email hoặc sai mật khẩu.",
"use_setting": "Sử dụng cài đặt",
"am_pm": "\u001dam/pm",
"time_options": "Tùy chọn thời gian",
@@ -461,6 +505,7 @@
"additional_guests": "Thêm khách",
"your_name": "Tên của bạn",
"your_full_name": "Tên đầy đủ của bạn",
"no_name": "Vô danh",
"email_address": "Địa chỉ email",
"enter_valid_email": "Vui lòng điền vào email hợp lệ",
"location": "Vị trí",
@@ -504,10 +549,13 @@
"your_team_updated_successfully": "Nhóm của bạn đã được cập nhật thành công.",
"about": "Về",
"team_description": "Một vài câu về nhóm của bạn. Thông tin này sẽ xuất hiện trên trang URL của nhóm của bạn.",
"org_description": "Một vài câu về tổ chức của bạn. Thông tin này sẽ xuất hiện trên trang URL của tổ chức của bạn.",
"members": "Các thành viên",
"organization_members": "Thành viên trong tổ chức",
"member": "Thành viên",
"number_member_one": "{{count}} thành viên",
"number_member_other": "{{count}} thành viên",
"number_selected": "{{count}} đã chọn",
"owner": "Chủ nhóm",
"admin": "Quản trị viên",
"administrator_user": "Người dùng quản trị viên",
@@ -538,6 +586,8 @@
"confirm_all": "Xác nhận tất cả",
"disband_team": "Giải tán nhóm",
"disband_team_confirmation_message": "Bạn có chắc chắn muốn giải tán nhóm này không? Bất kỳ ai mà bạn đã chia sẻ liên kết nhóm này sẽ không thể đặt lịch hẹn với nó nữa.",
"disband_org": "Giải tán tổ chức",
"disband_org_confirmation_message": "Bạn có chắc chắn muốn giải tán Tổ chức này? Tất cả các nhóm và thành viên sẽ bị xoá.",
"remove_member_confirmation_message": "Bạn có chắc chắn muốn xóa thành viên này khỏi nhóm không?",
"confirm_disband_team": "Có, giải tán nhóm",
"confirm_remove_member": "Có, xóa thành viên",
@@ -612,6 +662,7 @@
"event_type_updated_successfully": "Đã cập nhật thành công loại sự kiện {{eventTypeTitle}}",
"event_type_deleted_successfully": "Đã xóa thành công loại sự kiện",
"hours": "Giờ",
"people": "Mọi người",
"your_email": "Email của bạn",
"change_avatar": "Thay đổi hình đại diện",
"language": "Ngôn ngữ",
@@ -644,9 +695,11 @@
"create_new_team": "Tạo một nhóm mới",
"open_invitations": "Lời mời đang chờ",
"new_team": "Nhóm mới",
"create_first_team_and_invite_others": "Tạo nhóm đầu tiên của bạn và mời những người khác làm việc chung với bạn.",
"create_team_to_get_started": "Tạo một nhóm để bắt đầu",
"teams": "Các nhóm",
"team": "Nhóm",
"organization": "Tổ chức",
"team_billing": "Thanh toán nhóm",
"team_billing_description": "Quản lí thanh toán cho đội ngũ của bạn",
"upgrade_to_flexible_pro_title": "Chúng tôi đã thay đổi thanh toán cho các nhóm",
@@ -721,6 +774,7 @@
"cal_provide_huddle01_meeting_url": "{{appName}} sẽ cung cấp URL cuộc họp video Huddle01 web3.",
"cal_provide_teams_meeting_url": "{{appName}} sẽ cung cấp URL cuộc họp MS Teams. LƯU Ý: PHẢI CÓ TÀI KHOẢN CÔNG VIỆC HOẶC TRƯỜNG HỌC",
"require_payment": "Yêu cầu thanh toán",
"you_need_to_add_a_name": "Bạn cần thêm vào một tên",
"commission_per_transaction": "hoa hồng cho mỗi giao dịch",
"event_type_updated_successfully_description": "Loại sự kiện của bạn đã được cập nhật thành công.",
"hide_event_type": "Ẩn loại sự kiện",
@@ -811,18 +865,25 @@
"installed_apps": "Ứng dụng đã cài đặt",
"free_to_use_apps": "Miễn phí",
"no_category_apps": "Không có ứng dụng {{category}}",
"all_apps": "Tất cả các ứng dụng",
"no_category_apps_description_calendar": "Thêm một ứng dụng lịch để kiểm tra xung đột nhằm tránh đặt lịch hẹn trùng",
"no_category_apps_description_conferencing": "Thử thêm vào một ứng dụng hội nghị dành cho các cuộc gọi video với khách hàng của bạn",
"no_category_apps_description_payment": "Thêm một ứng dụng thanh toán để đơn giản hoá giao dịch giữa bạn và khách hàng",
"no_category_apps_description_analytics": "Thêm một ứng dụng phân tích cho những trang lịch hẹn của bạn",
"no_category_apps_description_automation": "Thêm một ứng dụng tự động hoá để sử dụng",
"no_category_apps_description_other": "Thêm loại ứng dụng khác để làm mọi loại công việc",
"no_category_apps_description_web3": "Thêm một ứng dụng web3 cho những trang lịch hẹn của bạn",
"no_category_apps_description_messaging": "Thêm một ứng dụng nhắn tin để thiết lập thông báo & lời nhắc tuỳ chỉnh",
"no_category_apps_description_crm": "Thêm một ứng dụng CRM để theo dõi người mà bạn đã họp cùng",
"installed_app_calendar_description": "Đặt (các) lịch làm nhiệm vụ kiểm tra xung đột nhằm ngăn tình trạng đặt lịch trùng.",
"installed_app_payment_description": "Cấu hình loại dịch vụ xử lí thanh toán nào sẽ được dùng đến khi thu phí khách hàng.",
"installed_app_analytics_description": "Cấu hình ứng dụng phân tích nào để sử dụng cho những trang lịch hẹn của bạn",
"installed_app_other_description": "Tất cả những ứng dụng bạn đã cài từ những danh mục khác.",
"installed_app_conferencing_description": "Cấu hình ứng dụng hội nghị nào nên dùng",
"installed_app_automation_description": "Cấu hình ứng dụng tự động hoá nên dùng",
"installed_app_web3_description": "Cấu hình ứng dụng web3 nào cần để sử dụng cho những trang lịch hẹn của bạn",
"installed_app_messaging_description": "Cấu hình ứng dụng nhắn tin nào cần dùng để thiết lập thông báo & lời nhắc tuỳ chỉnh",
"installed_app_crm_description": "Cấu hình ứng dụng CRM nào cần dùng để theo dõi những người mà bạn đã họp cùng",
"analytics": "Phân tích",
"empty_installed_apps_headline": "Chưa cài ứng dụng nào",
"empty_installed_apps_description": "Ứng dụng cho phép bạn cải thiện tiến độ công việc và cải thiện đáng kể việc sắp xếp tổ chức.",
@@ -848,6 +909,7 @@
"create_events_on": "Tạo sự kiện trên",
"enterprise_license": "Đây là tính năng doanh nghiệp",
"enterprise_license_description": "Để bật tính năng này, nhận khoá triển khai tại console {{consoleUrl}} và thêm nó vào .env của bạn ở dạng CALCOM_LICENSE_KEY. Nếu nhóm của bạn đã có giấy phép, vui lòng liên hệ {{supportMail}} để được trợ giúp.",
"enterprise_license_development": "Bạn có thể kiểm tra tính năng này ở thể thức phát triển. Để sử dụng ở dạng sản xuất, hãy nhờ quản trị viên vào phần <2>/auth/setup</2> để nhập một khoá giấy phép.",
"missing_license": "Giấy phép bị thiếu",
"signup_requires": "Yêu cầu giấy phép thương mại",
"signup_requires_description": "{{companyName}} hiện không cung cấp phiên bản nguồn mở miễn phí của trang đăng ký. Để nhận toàn quyền truy cập vào các thành phần đăng ký, bạn cần có giấy phép thương mại. Đối với mục đích sử dụng cá nhân, chúng tôi khuyên bạn nên sử dụng Nền tảng dữ liệu Prisma hoặc bất kỳ giao diện Postgres nào khác để tạo tài khoản.",
@@ -917,6 +979,7 @@
"confirm_delete_api_key": "Thu hồi khóa API này",
"revoke_api_key": "Thu hồi khóa API",
"api_key_copied": "Khoá API đã sao chép!",
"api_key_expires_on": "Khoá API sẽ hết hạn vào",
"delete_api_key_confirm_title": "Xoá bỏ vĩnh viễn khóa API này ra khỏi tài khoản của bạn?",
"copy": "Sao chép",
"expire_date": "Ngày hết hiệu lực",
@@ -939,6 +1002,9 @@
"user_impersonation_heading": "Mạo danh người dùng",
"user_impersonation_description": "Cho phép đội ngũ hỗ trợ tạm thời đăng nhập với tư cách là bạn nhằm giúp chúng tôi nhanh chóng giải quyết mọi vấn đề mà bạn báo cáo cho chúng tôi.",
"team_impersonation_description": "Cho phép các quản trị viên của nhóm bạn tạm thời đăng nhập bằng danh tính của bạn.",
"make_team_private": "Để nhóm ở mức riêng tư",
"make_team_private_description": "Thành viên nhóm của bạn sẽ không thể thấy thành viên nhóm khác khi cái này được bật.",
"you_cannot_see_team_members": "Bạn không thể thấy tất cả thành viên nhóm của một nhóm riêng tư.",
"allow_booker_to_select_duration": "Cho phép người đặt hẹn chọn khoảng thời gian",
"impersonate_user_tip": "Tất cả những lần dùng tính năng này đều bị kiểm toán.",
"impersonating_user_warning": "Đang mạo danh tên người dùng \"{{user}}\".",
@@ -1006,16 +1072,21 @@
"event_location": "Địa điểm sự kiện",
"reschedule_optional": "Lí do xếp lịch lại (tuỳ chọn)",
"reschedule_placeholder": "Cho người khác biết nguyên do bạn cần xếp lịch lại",
"event_cancelled": "Sự kiệnn này bị huỷ",
"emailed_information_about_cancelled_event": "Chúng tôi đã gửi email cho bạn và những người tham dự khác để cho họ biết.",
"this_input_will_shown_booking_this_event": "Trường này sẽ được hiển thị khi đặt sự kiện này",
"meeting_url_in_conformation_email": "Url cuộc họp nằm trong email xác nhận",
"url_start_with_https": "URL cần bắt đầu bằng http:// hoặc https://",
"number_provided": "Số điện thoại sẽ được cung ứng",
"before_event_trigger": "trước khi sự kiện bắt đầu",
"event_cancelled_trigger": "khi sự kiện bị huỷ",
"new_event_trigger": "khi sự kiện mới được đặt lịch hẹn",
"email_host_action": "gửi email đến chủ sự kiện",
"email_attendee_action": "gửi email đến người tham gia",
"sms_attendee_action": "Gửi SMS đến người tham gia",
"sms_number_action": "gửi SMS đến một số cụ thể",
"whatsapp_number_action": "gửi WhatsApp đến một số cụ thể",
"whatsapp_attendee_action": "gửi WhatsApp đến người tham gia",
"workflows": "Tiến độ công việc",
"new_workflow_btn": "Dòng công việc mới",
"add_new_workflow": "Thêm một tiến độ công việc mới",
@@ -1079,6 +1150,8 @@
"choose_template": "Chọn mẫu",
"custom": "Tuỳ chỉnh",
"reminder": "Lời nhắc",
"rescheduled": "Thay đổi lịch hẹn",
"completed": "Đã hoàn thành",
"reminder_email": "Lời nhắc: {{eventType}} với {{name}} vào {{date}}",
"not_triggering_existing_bookings": "Sẽ không kích hoạt đối với những lịch hẹn đã có do người dùng sẽ được yêu cầu số điện thoại khi đặt lịch hẹn cho sự kiện.",
"minute_one": "{{count}} phút",
@@ -1176,6 +1249,7 @@
"start_of_week": "Khởi đầu tuần",
"recordings_title": "Bản ghi âm",
"recording": "Bản ghi âm",
"happy_scheduling": "Chúc bạn đặt lịch vui vẻ",
"select_calendars": "Chọn lịch nào mà bạn muốn kiểm tra xung đột nhằm tránh đặt lịch hẹn trùng.",
"check_for_conflicts": "Kiểm tra xung đột",
"view_recordings": "Xem các bản ghi âm",
@@ -1217,6 +1291,7 @@
"conferencing_description": "Quản lí ứng dụng hội nghị video dùng cho các cuộc họp",
"add_conferencing_app": "Thêm ứng dụng hội nghị",
"password_description": "Quản lí cài đặt cho mật khẩu tài khoản",
"set_up_two_factor_authentication": "Thiết lập xác thực hai yếu tố",
"we_just_need_basic_info": "Chúng tôi chỉ cần một số thông tin cơ bản để thiết lập hồ sơ của bạn.",
"skip": "Bỏ qua",
"do_this_later": "Làm việc này sau",
@@ -1230,6 +1305,8 @@
"connect_analytics_apps": "Kết nối các ứng dụng phân tích",
"connect_other_apps": "Kết nối các ứng dụng khác",
"connect_web3_apps": "Kết nối các ứng dụng web3",
"connect_messaging_apps": "Kết nối các ứng dụng nhắn tin",
"connect_crm_apps": "Kết nối các ứng dụng CRM",
"current_step_of_total": "Bước {{currentStep}}/{{maxSteps}}",
"add_variable": "Thêm biến số",
"custom_phone_number": "Số điện thoại tùy chỉnh",
@@ -1242,12 +1319,14 @@
"location_info": "Địa điểm sự kiện",
"additional_notes_info": "Ghi chú thêm cho lịch hẹn",
"attendee_name_info": "Tên người tham gia lịch hẹn",
"organizer_name_info": "Tên của tổ chức",
"to": "Đến",
"workflow_turned_on_successfully": "Đã {{offOn}} thành công dòng công việc {{workflowName}}",
"download_responses": "Tải xuống phản hồi",
"download_responses_description": "Tải xuống tất cả phản hồi vào biểu mẫu của bạn ở định dạng CSV.",
"download": "Tải về",
"download_recording": "Tải xuống bản ghi âm",
"recording_from_your_recent_call": "Một bản ghi âm từ cuộc gọi gần đây trên {{appName}} đã sẵn sàng để tải xuống",
"create_your_first_form": "Tạo biểu mẫu đầu tiên",
"create_your_first_form_description": "Với Biểu mẫu định hướng, bạn có thể hỏi một số câu sơ tuyển và định hướng đến đúng người hay đúng loại sự kiện.",
"create_your_first_webhook": "Tạo Webhook đầu tiên",
@@ -1256,7 +1335,9 @@
"event_one": "sự kiện",
"event_other": "sự kiện",
"profile_team_description": "Quản lí cài đặt cho hồ sơ nhóm của bạn",
"profile_org_description": "Quản lí cài đặt cho hồ sơ tổ chức của bạn",
"members_team_description": "Những người dùng đang ở trong nhóm",
"organization_description": "Quản lí những quản trị viên và thành viên trong tổ chức của bạn",
"team_url": "URL nhóm",
"team_members": "Thành viên nhóm",
"more": "Khác",
@@ -1297,6 +1378,7 @@
"routing_forms_send_email_owner": "Gửi email đến chủ sở hữu",
"routing_forms_send_email_owner_description": "Gửi một email đến chủ sở hữu khi biểu mẫu được gửi đi",
"add_new_form": "Thêm biểu mẫu mới",
"add_new_team_form": "Thêm biểu mẫu mới vào nhóm bạn",
"create_your_first_route": "Tạo định hướng đầu tiên của bạn",
"route_to_the_right_person": "Định hướng đến người phù hợp dựa trên những câu trả lời cho biểu mẫu của bạn",
"form_description": "Tạo biểu mẫu của bạn để định hướng người đặt lịch hẹn",
@@ -1382,6 +1464,7 @@
"new_event_type_availability": "Tình trạng trống lịch của {{eventTypeTitle}}",
"error_editing_availability": "Lỗi sửa tình trạng trống lịch",
"dont_have_permission": "Bạn không có quyền truy cập tài nguyên này.",
"saml_config": "SAML",
"saml_configuration_placeholder": "Vui lòng dán metadata SAML từ Nhà cung cấp danh tính của bạn tại đây",
"saml_email_required": "Vui lòng nhập email để chúng tôi có thể tìm thấy Nhà cung cấp danh tính SAML của bạn",
"saml_sp_title": "Chi tiết nhà cung cấp dịch vụ",
@@ -1400,15 +1483,19 @@
"yearly": "Hằng năm",
"checkout": "Thanh toán",
"your_team_disbanded_successfully": "Nhóm của bạn đã được giải tán thành công",
"your_org_disbanded_successfully": "Tổ chức của bạn đã được giải tán thành công",
"error_creating_team": "Lỗi khi tạo nhóm",
"you": "Bạn",
"resend_email": "Gửi lại email",
"member_already_invited": "Thành viên đã được mời rồi",
"enter_email_or_username": "Nhập một email hoặc tên người dùng",
"team_name_taken": "Tên này đã có người lấy rồi",
"must_enter_team_name": "Cần phải nhập một tên nhóm",
"team_url_required": "Cần phải nhập một URL của nhóm",
"url_taken": "URL này đã có người lấy rồi",
"problem_registering_domain": "Có vấn đề với việc đăng ký tên miền phụ, vui lòng thử lại hoặc liên lạc với quản trị viên",
"team_publish": "Đăng nhóm",
"number_text_notifications": "Số điện thoại (thông báo tin nhắn van bản)",
"attendee_email_variable": "Email người tham dự",
"attendee_email_info": "Email người tham gia lịch hẹn",
"kbar_search_placeholder": "Nhập một lệnh hoặc tìm kiếm...",
@@ -1431,6 +1518,8 @@
"find_the_best_person": "Tìm người tốt nhất có được và xoay vòng trong nhóm bạn.",
"fixed_round_robin": "Round robin cố định",
"add_one_fixed_attendee": "Thêm một người tham dự và round robin cố định thông qua số người tham dự.",
"calcom_is_better_with_team": "{{appName}} tốt hơn với nhóm",
"the_calcom_team": "Nhóm của {{companyName}}",
"add_your_team_members": "Thêm những thành viên nhóm của bạn vào những loại sự kiện của bạn. Sử dụng lên lịch tập thể để bao gồm mọi người hoặc tìm người thích hợp nhất với chức năng lên lịch round robin.",
"booking_limit_reached": "Đã đạt mức giới hạn đặt hẹn cho loại sự kiện này",
"duration_limit_reached": "Đã đạt mức giới hạn thời gian cho loại sự kiện này",
@@ -1449,6 +1538,7 @@
"navigate_installed_apps": "Đến những ứng dụng được cài đặt",
"disabled_calendar": "Nếu bạn có lịch khác được cài đặt, những mục đặt hẹn mới sẽ được thêm vào đó. Nếu không thì hãy kết nối với lịch mới để bạn không bỏ lỡ bất cứ mục đặt hẹn mới nào.",
"enable_apps": "Kích hoạt ứng dụng",
"enable_apps_description": "Kích hoạt những ứng dụng mà người dùng có thể tích hợp với {{appName}}",
"purchase_license": "Mua một giấy phép",
"already_have_key": "Tôi đã có một khoá:",
"already_have_key_suggestion": "Vui lòng sao chép biến số môi trường CALCOM_LICENSE_KEY hiện có của bạn tại đây.",
@@ -1462,6 +1552,9 @@
"no_available_apps": "Không có ứng dụng nào khả dụng",
"no_available_apps_description": "Vui lòng bảo đảm rằng có những ứng dụng trong phần triển khai trong 'packages/app-store'",
"no_apps": "Không ứng dụng được kích hoạt cho thể hiện này của Cal",
"no_apps_configured": "Chưa cấu hình ứng dụng nào",
"enable_in_settings": "Bạn có thể bật các ứng dụng trong cài đặt",
"please_contact_admin": "Vui lòng liên lạc với quản trị viên",
"apps_settings": "Cài đặt của ứng dụng",
"fill_this_field": "Vui lòng điền vào trường này",
"options": "Tuỳ chọn",
@@ -1567,6 +1660,8 @@
"email_user_cta": "Xem lời mời",
"email_no_user_invite_heading": "Bạn đã được mời gia nhập {{entity}} {{appName}}",
"email_no_user_invite_subheading": "{{invitedBy}} đã mời bạn gia nhập nhóm của họ trên {{appName}}. {{appName}} là công cụ lên lịch sắp xếp sự kiện cho phép bạn và nhóm bạn lên lịch các cuộc gặp mà không cần trao đổi email nhiều.",
"email_user_invite_subheading": "{{invitedBy}} đã mời bạn gia nhập {{entity}} '{{teamName}}' của họ trên {{appName}}. {{appName}} là công cụ lên lịch sắp xếp sự kiện cho phép bạn và {{entity}} của bạn lên lịch các cuộc gặp mà không cần trao đổi email nhiều.",
"email_no_user_invite_steps_intro": "Chúng tôi sẽ hướng dẫn cho bạn qua vài bước nhỏ và bạn sẽ tận hưởng được ngay cảm giác thoải mái không căng thẳng trong việc lên lịch cùng {{entity}} của mình.",
"email_no_user_step_one": "Chọn tên người dùng của bạn",
"email_no_user_step_two": "Kết nối tài khoản lịch của bạn",
"email_no_user_step_three": "Đặt lịch khả dụng của bạn",
@@ -1577,6 +1672,8 @@
"scheduler": "{Scheduler}",
"no_workflows": "Không có dòng công việc",
"change_filter": "Đổi bộ lọc để xem dòng công việc của cá nhân và của nhóm.",
"change_filter_common": "Thay đổi bộ lọc để xem kết quả.",
"no_results_for_filter": "Không có kết quả nào dành cho bộ lọc",
"recommended_next_steps": "Những bước tiếp theo được đề xuất",
"create_a_managed_event": "Tạo một loại sự kiện được quản lý",
"meetings_are_better_with_the_right": "Các cuộc họp sẽ ổn hơn khi có những thành viên nhóm phù hợp ở đó. Hãy mời họ ngay.",
@@ -1587,6 +1684,7 @@
"no_longer_attending": "Bạn không còn tham gia sự kiện này nữa",
"attendee_no_longer_attending_subject": "Một người tham dự không còn tham dự {{title}} vào {{date}}",
"attendee_no_longer_attending": "Một người tham dự không còn tham dự sự kiện của bạn",
"attendee_no_longer_attending_subtitle": "{{name}} đã hủy. Điều này nghĩa là còn lại một suất cho thời điểm này",
"create_event_on": "Tạo sự kiện vào",
"create_routing_form_on": "Tạo biểu mẫu định hướng trên",
"default_app_link_title": "Đặt một liên kết ứng dụng mặc định",
@@ -1598,6 +1696,7 @@
"booking_questions_title": "Các câu hỏi lịch hẹn",
"booking_questions_description": "Tùy chỉnh các câu hỏi ở trang đặt lịch hẹn",
"add_a_booking_question": "Thêm một câu hỏi",
"identifier": "Mã định danh",
"duplicate_email": "Email bị trùng",
"booking_with_payment_cancelled": "Việc thanh toán cho sự kiện này không còn khả thi nữa",
"booking_with_payment_cancelled_already_paid": "Đang thực hiện một khoản hoàn tiền cho phần thanh toán lịch hẹn này.",
@@ -1608,6 +1707,7 @@
"show_on_booking_page": "Hiện trên trang lịch hẹn",
"get_started_zapier_templates": "Bắt đầu với các mẫu Zapier",
"team_is_unpublished": "{{team}} chưa được công bố",
"team_is_unpublished_description": "Liên kết {{entity}} này hiện không khả dụng. Hãy liên lạc với chủ {{entity}} hoặc yêu cầu họ công bố liên kết đó.",
"team_member": "Thành viên nhóm",
"a_routing_form": "Một biểu mẫu định hướng",
"form_description_placeholder": "Mô tả biểu mẫu",
@@ -1637,13 +1737,16 @@
"spot_popular_event_types": "Nhận ra các loại sự kiện phổ biến",
"spot_popular_event_types_description": "Xem loại sự kiện nào của bạn nhận được nhiều lần nhấp chuột và nhiều lịch hẹn nhất",
"no_responses_yet": "Chưa có hồi đáp",
"no_routes_defined": "Không xác định được định hướng",
"this_will_be_the_placeholder": "Đây sẽ là mã giữ chỗ",
"error_booking_event": "Có lỗi khi đặt lịch sự kiện, hãy làm mới trang rồi thử lại",
"timeslot_missing_title": "Chưa chọn suất thời gian nào",
"timeslot_missing_description": "Vui lòng chọn một suất thời gian để đặt lịch sự kiện.",
"timeslot_missing_cta": "Chọn suất thời gian",
"switch_monthly": "Chuyển sang giao diện tháng",
"switch_weekly": "Chuyển sang giao diện tuần",
"switch_multiday": "Chuyển sang giao diện ngày",
"switch_columnview": "Chuyển sang giao diện cột",
"num_locations": "{{num}} lựa chọn vị trí",
"select_on_next_step": "Chọn ở bước kế tiếp",
"this_meeting_has_not_started_yet": "Cuộc hẹn này chưa được bắt đầu",
@@ -1682,6 +1785,7 @@
"managed_event_dialog_title_one": "URL / {{slug}} đã có sẵn cho {{count}} thành viên. Bạn có muốn thay thế nó?",
"managed_event_dialog_title_other": "URL /{{slug}} đã có sẵn cho {{count}} thành viên. Bạn có muốn thay thế nó?",
"managed_event_dialog_information_one": "<strong>{{names}}</strong> đã dùng URL <strong>/{{slug}}</strong> rồi.",
"managed_event_dialog_information_other": "<strong>{{names}}</strong> đã dùng URL <strong>/{{slug}}</strong> rồi.",
"managed_event_dialog_clarification": "Nếu bạn chọn phương án thay thế nó, chúng tôi sẽ thông báo cho họ biết. Hãy quay lại và xóa bỏ họ nếu bạn không muốn ghi đè nó.",
"review_event_type": "Xem lại loại sự kiện",
"looking_for_more_analytics": "Bạn muốn có thêm thông tin phân tích?",
@@ -1697,12 +1801,14 @@
"least_booked_members": "Thành viên được đặt lịch hẹn ít nhất",
"events_created": "Những sự kiện đã tạo",
"events_completed": "Những sự kiện đã hoàn thành",
"events_cancelled": "Những sự kiện đã hủy",
"events_rescheduled": "Những sự kiện đã đặt lịch lại",
"from_last_period": "từ thời gian gần nhất",
"from_to_date_period": "Từ: {{startDate}} Đến: {{endDate}}",
"redirect_url_warning": "Thêm mục chuyển hướng sẽ tắt đi trang thành công. Hãy bảo đảm có đề cập \"Lịch hẹn đã xác nhận\" trên trang thành công tuỳ chỉnh riêng của bạn.",
"event_trends": "Xu hướng sự kiện",
"clear_filters": "Xóa bộ lọc",
"clear": "Xoá",
"hold": "Tạm giữ",
"on_booking_option": "Thu tiền thanh toán cho lịch hẹn",
"hold_option": "Tính phí vắng mặt",
@@ -1729,6 +1835,18 @@
"complete_your_booking": "Hoàn thành lịch hẹn của bạn",
"complete_your_booking_subject": "Hoàn thành lịch hẹn của bạn: {{title}} vào {{date}}",
"confirm_your_details": "Xác nhận các chi tiết của bạn",
"copy_invite_link": "Sao chép liên kết mời",
"edit_invite_link": "Sửa cài đặt liên kết",
"invite_link_copied": "Liên kết lời mời đã được sao chép",
"invite_link_deleted": "Liên kết lời mời đã được xoá",
"invite_link_updated": "Đã lưu cài đặt cho liên kết lời mời",
"link_expires_after": "Các liên kết được đặt hết hạn sau...",
"one_day": "1 ngày",
"seven_days": "7 ngày",
"thirty_days": "30 ngày",
"three_months": "3 tháng",
"one_year": "1 năm",
"team_invite_received": "Bạn đã được mời để gia nhập {{teamName}}",
"currency_string": "{{amount, currency}}",
"charge_card_dialog_body": "Bạn sắp sửa thu phí người tham gia một khoản {{amount, currency}}. Bạn có chắc chắn muốn tiếp tục?",
"charge_attendee": "Thu phí người tham gia một khoản {{amount, currency}}",
@@ -1737,6 +1855,7 @@
"email_invite_team_bulk": "{{userCount}} người dùng đã được mời",
"error_collecting_card": "Lỗi khi thu thập thẻ",
"image_size_limit_exceed": "Ảnh tải lên không được vượt quá giới hạn kích cỡ 5mb",
"unauthorized_workflow_error_message": "{{errorCode}}: Bạn không được uỷ quyền để bật hoặc tắt tiến độ công việc này",
"inline_embed": "Nhúng inline",
"load_inline_content": "Tải trực tiếp loại sự kiện của bạn ở dạng nội tuyến với nội dung khác trên website của bạn.",
"floating_pop_up_button": "Nút popup dạng nổi",
@@ -1756,7 +1875,69 @@
"connect_google_workspace": "Kết nối Google Workspace",
"google_workspace_admin_tooltip": "Bạn phải là một Quản trị viên Không gian làm việc để dùng tính năng này",
"first_event_type_webhook_description": "Tạo webhook đầu tiên của bạn cho loại sự kiện này",
"install_app_on": "Cài đặt ứng dụng trên",
"create_for": "Tạo cho",
"setup_organization": "Thiết lập một Tổ chức",
"organization_banner_description": "Tạo một môi trường tại đó các nhóm của bạn có thể tạo những ứng dụng, tiến độ công việc và loại sự kiện mà có thể chia sẻ được, với chức năng đặt lịch dạng round-robin và tập thể.",
"organization_banner_title": "Quản lý các tổ chức có nhiều nhóm",
"set_up_your_organization": "Thiết lập tổ chức của bạn",
"organizations_description": "Tổ chức là môi trường chia sẻ tại đó các nhóm có thể tạo loại sự kiện, ứng dụng, tiến độ công việc, v. v. vốn được chia sẻ dùng chung.",
"must_enter_organization_name": "Cần phải nhập tên tổ chức",
"must_enter_organization_admin_email": "Cần phải nhập địa chỉ email của tổ chức",
"admin_email": "Địa chỉ email của tổ chức",
"admin_username": "Tên người dùng quản trị viên",
"organization_name": "Tên tổ chức",
"organization_url": "URL của tổ chức",
"organization_verify_header": "Xác minh email của tổ chức",
"organization_verify_email_body": "Vui lòng sử dụng mã bên dưới để xác minh địa chỉ email của bạn để tiếp tục thiết lập tổ chức của bạn.",
"additional_url_parameters": "Tham số URL bổ sung",
"about_your_organization": "Giới thiệu tổ chức của bạn",
"about_your_organization_description": "Tổ chức là môi trường chia sẻ tại đó bạn có thể tạo nhiều nhóm có thành viên chung, loại sự kiện chung, ứng dụng chung, tiến độ công việc chung, v.v..",
"create_your_teams": "Tạo nhóm của bạn",
"create_your_teams_description": "Bắt đầu đặt lịch cùng nhau bằng cách thêm thành viên nhóm bạn vào tổ chức",
"invite_organization_admins": "Mời những quản trị viên của tổ chức",
"invite_organization_admins_description": "Những quản trị viên này có quyền truy cập mọi nhóm trong tổ chức. Bạn có thể thêm quản trị viên và thành viên của nhóm sau đó.",
"set_a_password": "Đặt mật khẩu",
"set_a_password_description": "Thao tác này sẽ tạo một tài khoản người dùng mới với email của tổ chức và mật khẩu này.",
"organization_logo": "Logo của tổ chức",
"organization_about_description": "Một vài câu về tổ chức của bạn. Thông tin này sẽ xuất hiện trên trang hồ sơ công cộng của tổ chức.",
"ill_do_this_later": "Tôi sẽ làm sau",
"verify_your_email": "Xác minh email của bạn",
"enter_digit_code": "Nhập mã 6 chữ số mà chúng tôi đã gửi tới {{email}}",
"verify_email_organization": "Xác minh email của bạn để tạo một tổ chức",
"code_provided_invalid": "Mã cung cấp là mã không hợp lệ, hãy thử lại",
"email_already_used": "Email đã được dùng",
"organization_admin_invited_heading": "Bạn đã được mời để gia nhập {{orgName}}",
"organization_admin_invited_body": "Gia nhập nhóm của bạn tại {{orgName}} và bắt đầu tập trung vào cuộc họp, chứ không còn lo tạo ra cuộc họp!",
"duplicated_slugs_warning": "Những nhóm sau không thể tạo do có slug trùng lặp: {{slugs}}",
"team_names_empty": "Tên nhóm không được để trống",
"team_names_repeated": "Tên nhóm không được lặp lại",
"user_belongs_organization": "Người dùng thuộc về một nhóm",
"org_no_teams_yet": "Tổ chức này chưa có nhóm nào",
"org_no_teams_yet_description": "Nếu bạn là một quản trị viên, hãy bảo đảm tạo nhóm các nhóm cần được hiển thị tại đây.",
"set_up": "Thiết lập",
"set_up_your_profile": "Thiết lập hồ sơ của bạn",
"set_up_your_profile_description": "Hãy để mọi người biết bạn là ai trong {{orgName}}, và họ biết khi nhấp vào liên kết công cộng của bạn.",
"my_profile": "Hồ sơ của tôi",
"my_settings": "Cài đặt của tôi",
"crm": "CRM",
"messaging": "Nhắn tin",
"sender_id_info": "Tên hoặc số hiển thị ở chỗ người gửi SMS (một số quốc gia không cho phép ID người gửi dạng chữ lẫn số)",
"org_admins_can_create_new_teams": "Chỉ quản trị viên của tổ chức mới tạo được nhóm mới",
"google_new_spam_policy": "Chính sách spam mới của Google có thể ngăn bạn không cho nhận bất kì thông báo nào về email và lịch liên quan đến lịch hẹn này.",
"resolve": "Giải quyết",
"no_organization_slug": "Có lỗi khi tạo nhóm cho tổ chức này. Slug URL bị thiếu.",
"org_name": "Tên tổ chức",
"org_url": "URL của tổ chức",
"copy_link_org": "Sao chép liên kết đến tổ chức",
"404_the_org": "Tổ chức",
"404_the_team": "Nhóm",
"404_claim_entity_org": "Lấy tên miền phụ cho tổ chức của bạn",
"404_claim_entity_team": "Lấy nhóm này và bắt đầu quản lý lịch hẹn theo tập thể",
"insights_all_org_filter": "Tất cả"
"insights_all_org_filter": "Tất cả",
"insights_team_filter": "Nhóm: {{teamName}}",
"insights_user_filter": "Người dùng: {{userName}}",
"insights_subtitle": "Xem số liệu của lịch hẹn ở mọi sự kiện của bạn",
"custom_plan": "Gói Tuỳ chỉnh",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -17,6 +17,7 @@
"verify_email_banner_body": "验证您的电子邮件地址以确保最佳的电子邮件和日历递送能力",
"verify_email_email_header": "验证您的电子邮件地址",
"verify_email_email_button": "验证电子邮件",
"copy_somewhere_safe": "将此 API 密钥保存在安全的地方。您将无法再次查看它。",
"verify_email_email_body": "请点击下面的按钮来验证您的电子邮件地址。",
"verify_email_email_link_text": "如果您不喜欢点击按钮,请点击以下链接:",
"email_sent": "电子邮件已成功发送",
@@ -118,7 +119,7 @@
"team_info": "团队信息",
"request_another_invitation_email": "如果您不希望使用 {{toEmail}} 作为您的 {{appName}} 邮箱或已经有一个 {{appName}} 账户,请使用您希望使用的邮箱再次请求一封邮件。",
"you_have_been_invited": "您已被邀请加入团队 {{teamName}}",
"user_invited_you": "{{user}} 邀请您在 {{appName}} 上加入 {{entity}} {{team}}",
"user_invited_you": "{{user}} 邀请您在 {{appName}} 上加入{{entity}} {{team}}",
"hidden_team_member_title": "您在这个团队中被隐藏",
"hidden_team_member_message": "您的位置尚未付费,请升级到专业版或通知团队管理员为您付费。",
"hidden_team_owner_message": "需要一个专业版账户才能使用团队,在升级前您将一直被隐藏。",
@@ -243,6 +244,8 @@
"all": "所有应用",
"yours": "您的账户",
"available_apps": "可用应用",
"available_apps_lower_case": "可用的应用",
"available_apps_desc": "您尚未安装任何应用。在我们的<1>应用商店</1>中查看热门应用,并探索更多内容。",
"check_email_reset_password": "请检查您的邮箱,我们向您发送了一个重置密码的链接。",
"finish": "完成",
"organization_general_description": "管理您的团队语言和时区的设置",
@@ -337,7 +340,7 @@
"cancelling_event_recurring": "该活动是定期活动的一个实例。",
"cancelling_all_recurring": "这些是定期活动中的所有剩余实例。",
"error_with_status_code_occured": "发生错误,状态码 {{status}}",
"error_event_type_url_duplicate": "使用此 URL 的活动类型已存在。",
"error_event_type_url_duplicate": "使用此链接的活动类型已存在。",
"error_event_type_unauthorized_create": "您无法创建此活动",
"error_event_type_unauthorized_update": "您无法编辑此活动",
"error_workflow_unauthorized_create": "您无法创建此工作流程",
@@ -349,7 +352,7 @@
"no_meeting_found": "未找到会议",
"no_meeting_found_description": "此会议不存在。联系会议所有者获取更新后的链接。",
"no_status_bookings_yet": "暂无 {{status}} 预约",
"no_status_bookings_yet_description": "您没有{{status}}预约,{{description}}",
"no_status_bookings_yet_description": "您没有 {{status}} 预约,{{description}}",
"event_between_users": "{{host}} 和 {{attendeeName}} 之间的 {{eventName}}",
"bookings": "预约",
"booking_not_found": "找不到预约",
@@ -399,35 +402,36 @@
"leverage_our_api": "利用我们的 API 来实现完全控制和高度定制。",
"create_webhook": "创建 Webhook",
"booking_cancelled": "预约已取消",
"booking_rescheduled": "预约已重新安排",
"booking_rescheduled": "预约已改期",
"recording_ready": "录制内容下载链接就绪",
"booking_created": "预约已创建",
"booking_rejected": "预约被拒绝",
"booking_requested": "预约已请求",
"meeting_ended": "会议已结束",
"form_submitted": "表格已提交",
"booking_paid": "预约已付款",
"event_triggers": "事件触发",
"subscriber_url": "订阅者链接",
"create_new_webhook": "创建一个新的 webhook",
"create_new_webhook": "创建一个新的 Webhook",
"webhooks": "Webhook",
"team_webhooks": "团队 Webhook",
"create_new_webhook_to_account": "为您的账户创建一个新的Webhook",
"create_new_webhook_to_account": "为您的账户创建一个新的 Webhook",
"new_webhook": "新建 Webhook",
"receive_cal_meeting_data": "当安排或取消活动后,在指定 URL 实时接收 {{appName}} 会议数据。",
"receive_cal_event_meeting_data": "当安排或取消此活动后,在指定 URL 实时接收 {{appName}} 会议数据。",
"responsive_fullscreen_iframe": "全屏响应式iframe",
"receive_cal_meeting_data": "当安排或取消活动后,在指定链接实时接收 {{appName}} 会议数据。",
"receive_cal_event_meeting_data": "当安排或取消此活动后,在指定链接实时接收 {{appName}} 会议数据。",
"responsive_fullscreen_iframe": "全屏响应式 iframe",
"loading": "加载中...",
"deleting": "正在删除...",
"standard_iframe": "标准 iframe",
"developer": "开发人员",
"manage_developer_settings": "管理您的开发人员设置。",
"iframe_embed": "嵌入 iframe",
"embed_calcom": "用最简单的方式将{{appName}}嵌入您的网站",
"embed_calcom": "用最简单的方式将 {{appName}} 嵌入您的网站",
"integrate_using_embed_or_webhooks": "将我们的功能嵌入式集成进您的网站,或者使用自定义Webhook获得实时预约信息。",
"schedule_a_meeting": "安排会议",
"view_and_manage_billing_details": "查看和管理您的账单详情",
"view_and_edit_billing_details": "查看和编辑您的账单详情,以及取消订阅。",
"go_to_billing_portal": "转到账单门户网站",
"go_to_billing_portal": "前往付费入口",
"need_anything_else": "还有其他需要?",
"further_billing_help": "如果您在支付帐单时需要任何进一步的帮助,我们的支持团队会给您提供帮助。",
"contact": "联系",
@@ -549,7 +553,7 @@
"your_team_updated_successfully": "您的团队更新成功。",
"about": "关于",
"team_description": "请写一段简单的团队介绍,该介绍将会显示在您的团队链接页面上。",
"org_description": "关于您的组织的几句话。这将显示在您组织的 URL 页面上。",
"org_description": "关于您的组织的几句话。这将显示在您组织的链接页面上。",
"members": "成员",
"organization_members": "组织成员",
"member": "成员",
@@ -706,8 +710,8 @@
"upgrade_to_flexible_pro_message": "您的团队中有没有位置的成员。升级到专业版来获得更多位置。",
"changed_team_billing_info": "自2022年1月起,我们将按每个位置向团队成员收取费用。 您的团队中免费获得专业版的成员现在正在进行为期14天的试用。 试用期结束后,这些成员将在您的团队中隐藏,除非您现在升级到专业版。",
"create_manage_teams_collaborative": "创建并管理团队以使用协作功能。",
"only_available_on_pro_plan": "此功能仅在Pro套餐中可用",
"remove_cal_branding_description": "若想从您的预约页面中去掉{{appName}}品牌标志,您需要升级到专业版账户。",
"only_available_on_pro_plan": "此功能仅在 Pro 套餐中可用",
"remove_cal_branding_description": "若想从您的预约页面中去掉 {{appName}} 的品牌标志,您需要升级到专业版账户。",
"edit_profile_info_description": "编辑您的个人资料,在您的预约链接上显示。",
"change_email_tip": "您可能需要注销并重新登录才能使更改生效。",
"little_something_about": "一些关于你自己的描述。",
@@ -767,12 +771,12 @@
"set_link_meeting": "设置会议链接",
"cal_invitee_phone_number_scheduling": "{{appName}} 将要求您的受邀者在安排时间之前提供电话号码。",
"cal_provide_google_meet_location": "{{appName}} 将提供 Google Meet 位置。",
"cal_provide_zoom_meeting_url": "{{appName}}将提供Zoom会议链接",
"cal_provide_tandem_meeting_url": "{{appName}} 将提供Tandem会议链接",
"cal_provide_video_meeting_url": "{{appName}}将提供Daily视频会议链接",
"cal_provide_jitsi_meeting_url": "{{appName}} 将提供Jitsi Meet视频会议链接",
"cal_provide_huddle01_meeting_url": "{{appName}} 将提供Huddle01 Web3视频会议链接",
"cal_provide_teams_meeting_url": "{{appName}} 将提供 MS Teams 会议 URL。注意: 必须拥有工作或学校帐户",
"cal_provide_zoom_meeting_url": "{{appName}}将提供 Zoom 会议链接",
"cal_provide_tandem_meeting_url": "{{appName}} 将提供 Tandem 会议链接",
"cal_provide_video_meeting_url": "{{appName}}将提供 Daily 视频会议链接",
"cal_provide_jitsi_meeting_url": "{{appName}} 将提供 Jitsi Meet 视频会议链接",
"cal_provide_huddle01_meeting_url": "{{appName}} 将提供 Huddle01 web3 视频会议链接",
"cal_provide_teams_meeting_url": "{{appName}} 将提供 MS Teams 会议 URL。注意: 须拥有工作或学校帐户",
"require_payment": "需要付款",
"you_need_to_add_a_name": "您需要添加名称",
"commission_per_transaction": "每笔交易的佣金",
@@ -846,7 +850,7 @@
"user_away_description": "您试图预约的人已将自己置于离开状态,因此不接受新预约。",
"meet_people_with_the_same_tokens": "会见使用相同令牌的人",
"only_book_people_and_allow": "仅和拥有相同令牌、分布式自治组织或非同质化代币的人的预约。",
"account_created_with_identity_provider": "您的账户是使用身份提供商创建的。",
"account_created_with_identity_provider": "您的账户是使用身份提供方创建的。",
"account_managed_by_identity_provider": "您的账户由 {{provider}} 管理",
"account_managed_by_identity_provider_description": "要更改您的电子邮件,密码,启用两步验证及更多功能,请访问您的 {{provider}} 账户设置。",
"signin_with_google": "使用Google登录",
@@ -1326,6 +1330,7 @@
"download_responses_description": "以 CSV 格式下载对表格的所有回复。",
"download": "下载",
"download_recording": "下载录制内容",
"recording_from_your_recent_call": "您最近在 {{appName}} 上的通话录音可供下载",
"create_your_first_form": "创建您的第一个表格",
"create_your_first_form_description": "利用途径表格,您可以提出符合条件的问题,并可根据途径找到正确的人或活动类型。",
"create_your_first_webhook": "创建您的第一个 Webhook",
@@ -1334,6 +1339,7 @@
"event_one": "活动",
"event_other": "活动",
"profile_team_description": "管理团队资料的设置",
"profile_org_description": "管理组织资料的设置",
"members_team_description": "组中的用户",
"organization_description": "管理您组织中的管理员和成员",
"team_url": "团队链接",
@@ -1463,8 +1469,8 @@
"error_editing_availability": "编辑可预约时间时出错",
"dont_have_permission": "您无权访问此资源。",
"saml_config": "SAML",
"saml_configuration_placeholder": "请将从身份提供商获取的 SAML metadata 粘贴到这里",
"saml_email_required": "请输入您的邮箱,以便我们找到您的 SAML 身份提供商",
"saml_configuration_placeholder": "请将从身份提供方获取的 SAML metadata 粘贴到这里",
"saml_email_required": "请输入您的邮箱,以便我们找到您的 SAML 身份提供方",
"saml_sp_title": "服务提供商详细信息",
"saml_sp_description": "您的身份提供程序 (IdP) 将要求您提供以下详细信息以完成 SAML 应用程序配置。",
"saml_sp_acs_url": "ACS 链接",
@@ -1658,6 +1664,8 @@
"email_user_cta": "查看邀请",
"email_no_user_invite_heading": "您已被邀请加入 {{appName}} {{entity}}",
"email_no_user_invite_subheading": "{{invitedBy}} 已邀请您加入他们在 {{appName}} 上的团队。{{appName}} 是一个活动安排调度程序,让您和您的团队无需通过电子邮件沟通即可安排会议。",
"email_user_invite_subheading": "{{invitedBy}} 已邀请您加入他们在 {{appName}} 上的{{entity}}“{{teamName}}”。{{appName}} 是一个活动安排调度程序,让您和您的{{entity}}无需通过电子邮件沟通即可安排会议。",
"email_no_user_invite_steps_intro": "我们将引导您完成几个简短步骤,您将立即与您的{{entity}}一起享受无压力的日程安排。",
"email_no_user_step_one": "选择您的用户名",
"email_no_user_step_two": "连接您的日历账户",
"email_no_user_step_three": "设置您的可预约时间",
@@ -1668,6 +1676,8 @@
"scheduler": "{Scheduler}",
"no_workflows": "无工作流程",
"change_filter": "更改筛选器以查看您的个人和团队工作流程。",
"change_filter_common": "更改筛选器以查看结果。",
"no_results_for_filter": "筛选器没有结果",
"recommended_next_steps": "建议的后续步骤",
"create_a_managed_event": "创建托管活动类型",
"meetings_are_better_with_the_right": "有合适的团队成员参加会议会更好。立即邀请他们。",
@@ -1678,7 +1688,9 @@
"no_longer_attending": "您不再参加此活动",
"attendee_no_longer_attending_subject": "一名参与者不再参加于 {{date}} 举行的 {{title}} ",
"attendee_no_longer_attending": "一名参与者不再参加您的活动",
"attendee_no_longer_attending_subtitle": "{{name}} 已取消。这意味着该时段有一个位置空出来",
"create_event_on": "创建活动于",
"create_routing_form_on": "创建途径表格于",
"default_app_link_title": "设置默认应用链接",
"default_app_link_description": "设置默认应用链接可以让所有新创建的活动类型使用您设置的应用链接。",
"organizer_default_conferencing_app": "组织者的默认应用",
@@ -1699,6 +1711,7 @@
"show_on_booking_page": "在预约页面上显示",
"get_started_zapier_templates": "开始使用 Zapier 模板",
"team_is_unpublished": "{{team}} 已被取消发布",
"team_is_unpublished_description": "该{{entity}}链接当前不可用。请联系{{entity}}所有者或请他们发布。",
"team_member": "团队成员",
"a_routing_form": "途径表格",
"form_description_placeholder": "表格描述",
@@ -1728,7 +1741,9 @@
"spot_popular_event_types": "发现热门的活动类型",
"spot_popular_event_types_description": "查看获得最多点击和预约的活动类型",
"no_responses_yet": "尚无回复",
"no_routes_defined": "未定义任何途径",
"this_will_be_the_placeholder": "这将是占位符",
"error_booking_event": "预约活动时出错,请刷新页面并重试",
"timeslot_missing_title": "未选择时间段",
"timeslot_missing_description": "请选择要预约活动的时间段。",
"timeslot_missing_cta": "选择时间段",
@@ -1774,6 +1789,7 @@
"managed_event_dialog_title_one": "{{count}} 个成员已具有链接/{{slug}}。是否要将其替换?",
"managed_event_dialog_title_other": "{{count}} 个成员已具有链接/{{slug}}。是否要将其替换?",
"managed_event_dialog_information_one": "<strong>{{names}}</strong> 已经在使用 <strong>/{{slug}}</strong> 链接。",
"managed_event_dialog_information_other": "<strong>{{names}}</strong> 已经在使用 <strong>/{{slug}}</strong> 链接。",
"managed_event_dialog_clarification": "如果您选择将其替换,我们会通知他们。如果您不想将其覆盖,请返回并移除。",
"review_event_type": "查看活动类型",
"looking_for_more_analytics": "寻找更多的分析?",
@@ -1843,6 +1859,7 @@
"email_invite_team_bulk": "已邀请 {{userCount}} 名用户",
"error_collecting_card": "收集卡时出错",
"image_size_limit_exceed": "上传的图像不应超过 5MB 大小限制",
"unauthorized_workflow_error_message": "{{errorCode}}:您无权启用或禁用此工作流程",
"inline_embed": "内联嵌入",
"load_inline_content": "将您的活动类型直接与您的其他网站内容内联加载。",
"floating_pop_up_button": "浮动弹出式按钮",
@@ -1862,35 +1879,69 @@
"connect_google_workspace": "连接 Google Workspace",
"google_workspace_admin_tooltip": "您必须是 Workspace 管理员才能使用此功能",
"first_event_type_webhook_description": "为此活动类型创建第一个 Webhook",
"install_app_on": "安装应用在",
"create_for": "创建",
"setup_organization": "设置组织",
"organization_banner_description": "创建一个环境,让团队可以在其中通过轮流和集体日程安排来创建共享的应用、工作流程和活动类型。",
"organization_banner_title": "管理具有多个团队的组织",
"set_up_your_organization": "设置您的组织",
"organizations_description": "组织是一个共享环境,团队可以在其中创建共享的活动类型、应用、工作流程等。",
"must_enter_organization_name": "必须输入组织名称",
"must_enter_organization_admin_email": "必须输入您组织的电子邮件地址",
"admin_email": "您组织的电子邮件地址",
"admin_username": "管理员用户名",
"organization_name": "组织名称",
"organization_url": "组织 URL",
"organization_url": "组织链接",
"organization_verify_header": "验证您的组织电子邮件",
"organization_verify_email_body": "请使用下面的代码验证您的电子邮件地址以继续设置您的组织。",
"additional_url_parameters": "其他 URL 参数",
"additional_url_parameters": "其他链接参数",
"about_your_organization": "关于您的组织",
"about_your_organization_description": "组织是一个共享环境,您可以在其中创建多个具有共享的成员、活动类型、应用、工作流程等要素的团队。",
"create_your_teams": "创建您的团队",
"create_your_teams_description": "通过向您的组织添加团队成员,开始一起进行日程安排",
"invite_organization_admins": "邀请您的组织管理员",
"invite_organization_admins_description": "这些管理员将有权访问您组织中的所有团队。您可以稍后添加团队管理员和成员。",
"set_a_password": "设置密码",
"set_a_password_description": "这将使用您的组织电子邮件和此密码创建一个新的用户账户。",
"organization_logo": "组织标志",
"organization_about_description": "关于您的组织的几句话。这将显示在您组织的公开资料页面上。",
"ill_do_this_later": "稍后再做",
"verify_your_email": "验证您的电子邮件",
"enter_digit_code": "输入我们发送至 {{email}} 的 6 位代码",
"verify_email_organization": "验证您的电子邮件以创建组织",
"code_provided_invalid": "提供的代码无效,请重试",
"email_already_used": "电子邮件已被使用",
"organization_admin_invited_heading": "您已被邀请加入 {{orgName}}",
"organization_admin_invited_body": "加入您在 {{orgName}} 的团队,开始专注于会议本身,而不是会议的安排上!",
"duplicated_slugs_warning": "由于 slug 重复,无法创建以下团队:{{slugs}}",
"team_names_empty": "团队名称不能为空",
"team_names_repeated": "团队名称不能重复",
"user_belongs_organization": "用户属于某个组织",
"org_no_teams_yet": "此组织尚无团队",
"org_no_teams_yet_description": "如果您是管理员,请务必创建要在此处显示的团队。",
"set_up": "设置",
"set_up_your_profile": "设置您的个人资料",
"set_up_your_profile_description": "让人们知道您在 {{orgName}} 中的身份,以及他们何时与您的公共链接互动。",
"my_profile": "我的个人资料",
"my_settings": "我的设置",
"crm": "CRM",
"messaging": "消息",
"sender_id_info": "显示为短信发件人的姓名或号码(某些国家/地区不允许使用字母数字发件人 ID)",
"org_admins_can_create_new_teams": "只有您组织的管理员可以创建新团队",
"google_new_spam_policy": "Google 的新垃圾邮件政策可能会阻止您收到任何有关此预约的电子邮件和日历通知。",
"resolve": "解决",
"no_organization_slug": "为该组织创建团队时出错。缺少链接 slug。",
"org_name": "组织名称",
"org_url": "组织链接",
"copy_link_org": "复制组织链接",
"404_the_org": "组织",
"404_the_team": "团队",
"404_claim_entity_org": "为您的组织声明子域",
"404_claim_entity_team": "声明此团队并开始集体管理时间表",
"insights_all_org_filter": "所有应用",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ 在上面这里添加新的字符串 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
"insights_team_filter": "团队:{{teamName}}",
"insights_user_filter": "用户:{{userName}}",
"insights_subtitle": "查看您的活动的预约洞察",
"custom_plan": "自定义计划",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ 在此上方添加您的新字符串 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
+130 -15
View File
@@ -1,6 +1,6 @@
{
"identity_provider": "身分提供者",
"trial_days_left": "試用 PRO 方案還有 $t(day, {\"count\": {{days}} })",
"trial_days_left": "您的 PRO 試用期還有 $t(day, {\"count\": {{days}} }) 到期",
"day_one": "{{count}} 天",
"day_other": "{{count}} 天",
"second_one": "{{count}} 秒",
@@ -306,9 +306,9 @@
"password_has_been_reset_login": "密碼已經重置。現在即可使用新建立的密碼登入。",
"layout": "版面",
"bookerlayout_default_title": "預設檢視",
"bookerlayout_description": "您可以選擇多個版面,以便您的預約者切換檢視。",
"bookerlayout_description": "您可以選擇多個版面,以便預約者切換檢視。",
"bookerlayout_user_settings_title": "預約版面",
"bookerlayout_user_settings_description": "您可以選擇多個版面,以便您的預約者切換檢視。您可根據不同活動來覆寫此設定。",
"bookerlayout_user_settings_description": "您可以選擇多個版面,以便預約者切換檢視。您可根據不同活動來覆寫此設定。",
"bookerlayout_month_view": "月",
"bookerlayout_week_view": "週",
"bookerlayout_column_view": "欄",
@@ -349,7 +349,7 @@
"no_meeting_found": "找不到會議",
"no_meeting_found_description": "會議不存在。請聯繫會議主持人取得新連結。",
"no_status_bookings_yet": "暫無 {{status}} 的預約",
"no_status_bookings_yet_description": "沒有{{status}}的預約。{{description}}",
"no_status_bookings_yet_description": "沒有 {{status}} 的預約。{{description}}",
"event_between_users": "{{host}} 和 {{attendeeName}} 的 {{eventName}}",
"bookings": "預約",
"booking_not_found": "找不到預約",
@@ -398,7 +398,7 @@
"browse_api_documentation": "瀏覽 API 文件",
"leverage_our_api": "請充分利用 API 徹底掌握與客製化。",
"create_webhook": "建立 Webhook",
"booking_cancelled": "預約已取消",
"booking_cancelled": "已取消預約",
"booking_rescheduled": "已重新安排預約",
"recording_ready": "錄製內容下載連結已就緒",
"booking_created": "已建立預約",
@@ -411,17 +411,17 @@
"create_new_webhook": "建立新的 Webhook",
"webhooks": "Webhook",
"team_webhooks": "團隊 Webhook",
"create_new_webhook_to_account": "建立這個帳號的新 Webhook",
"create_new_webhook_to_account": "為您的帳號建立一個的新 Webhook",
"new_webhook": "新 Webhook",
"receive_cal_meeting_data": "預定或取消活動時,即時在指定的網址收到 {{appName}} 會議資料。",
"receive_cal_event_meeting_data": "預定或取消活動時,即時在指定的網址收到 {{appName}} 會議資料。",
"responsive_fullscreen_iframe": "全螢幕響應式 Iframe",
"responsive_fullscreen_iframe": "全螢幕響應式 iframe",
"loading": "讀取中...",
"deleting": "正在刪除......",
"standard_iframe": "標準 Iframe",
"standard_iframe": "標準 iframe",
"developer": "開發人員",
"manage_developer_settings": "管理您的開發人員設定。",
"iframe_embed": "嵌入式 Iframe",
"iframe_embed": "嵌入式 iframe",
"embed_calcom": "在網站上嵌入 {{appName}} 最簡單的方法。",
"integrate_using_embed_or_webhooks": "使用嵌入的方法整合進網站,或是以自訂 Webhook 的方式獲取即時預約資訊。",
"schedule_a_meeting": "預定會議",
@@ -846,7 +846,7 @@
"user_away_description": "試圖預約的人已經設定為離開狀態,因此不接受新預約。",
"meet_people_with_the_same_tokens": "認識有相同 Token 的人",
"only_book_people_and_allow": "只預約/接受預約有相同 Token、DAO 或 NFT 的人。",
"account_created_with_identity_provider": "帳號是使用 Identity Provider 建立的。",
"account_created_with_identity_provider": "帳號是使用身分提供者建立的。",
"account_managed_by_identity_provider": "帳號歸 {{provider}} 管轄",
"account_managed_by_identity_provider_description": "要更改電子郵件、密碼、兩階段認證⋯⋯等,請造訪 {{provider}} 的帳號設定。",
"signin_with_google": "透過 Google 登入",
@@ -979,7 +979,7 @@
"confirm_delete_api_key": "撤銷此 API 金鑰",
"revoke_api_key": "撤銷 API 金鑰",
"api_key_copied": "已複製 API 金鑰!",
"api_key_expires_on": "API 金鑰的到期時間為",
"api_key_expires_on": "API 金鑰的到期時間",
"delete_api_key_confirm_title": "確定要將此 API 金鑰從您的帳號永久移除?",
"copy": "複製",
"expire_date": "到期日",
@@ -1003,7 +1003,7 @@
"user_impersonation_description": "允許支援團隊以您的身分暫時登入,以便快速解決您通報給我們的任何問題。",
"team_impersonation_description": "允許您的團隊擁有者/管理員暫時以您的身分登入。",
"make_team_private": "設為私人團隊",
"make_team_private_description": "啟用此設定時,您的團隊成員將無法查看其他團隊成員。",
"make_team_private_description": "啟用此設定時,團隊成員將無法查看其他團隊成員。",
"you_cannot_see_team_members": "您無法查看私人團隊的所有團隊成員。",
"allow_booker_to_select_duration": "允許預約者選擇時間長度",
"impersonate_user_tip": "此功能的所有使用已經過稽核。",
@@ -1085,6 +1085,8 @@
"email_attendee_action": "傳送電子郵件給與會者",
"sms_attendee_action": "傳送簡訊給與會者",
"sms_number_action": "傳送簡訊至特定號碼",
"whatsapp_number_action": "傳送 Whatsapp 至特定號碼",
"whatsapp_attendee_action": "傳送 Whatsapp 給與會者",
"workflows": "工作流程",
"new_workflow_btn": "新工作流程",
"add_new_workflow": "新增工作流程",
@@ -1148,6 +1150,8 @@
"choose_template": "選擇範本",
"custom": "自訂",
"reminder": "提醒",
"rescheduled": "已重新預定",
"completed": "已完成",
"reminder_email": "提醒:{{date}} 與 {{name}} 的 {{eventType}}",
"not_triggering_existing_bookings": "不為現有預約觸發,使用者會在預約活動時收到輸入電話號碼的提示。",
"minute_one": "{{count}} 分鐘",
@@ -1245,6 +1249,7 @@
"start_of_week": "一週開始",
"recordings_title": "錄製",
"recording": "錄製",
"happy_scheduling": "祝排程愉快",
"select_calendars": "選擇您想要檢查衝突的行事曆來避免重複預約。",
"check_for_conflicts": "檢查衝突",
"view_recordings": "檢視錄製內容",
@@ -1286,6 +1291,7 @@
"conferencing_description": "為您的會議加入最愛的視訊會議應用程式",
"add_conferencing_app": "新增會議應用程式",
"password_description": "管理帳號密碼設定",
"set_up_two_factor_authentication": "設定兩階段驗證",
"we_just_need_basic_info": "我們只需要一些基本資料,就能完成您的個人資料設定。",
"skip": "略過",
"do_this_later": "稍後再說",
@@ -1299,6 +1305,8 @@
"connect_analytics_apps": "連至分析應用程式",
"connect_other_apps": "連接其他應用程式",
"connect_web3_apps": "連接 web3 應用程式",
"connect_messaging_apps": "連接傳訊應用程式",
"connect_crm_apps": "連接 CRM 應用程式",
"current_step_of_total": "第 {{currentStep}} 步,共 {{maxSteps}} 步",
"add_variable": "新增變數",
"custom_phone_number": "自訂電話號碼",
@@ -1311,12 +1319,14 @@
"location_info": "活動地點",
"additional_notes_info": "預約額外備註",
"attendee_name_info": "預約人姓名",
"organizer_name_info": "主辦者姓名",
"to": "至",
"workflow_turned_on_successfully": "「{{workflowName}}」工作流程已成功{{offOn}}",
"download_responses": "下載回應",
"download_responses_description": "以 CSV 格式下載您表單的所有回覆。",
"download": "下載",
"download_recording": "下載錄製內容",
"recording_from_your_recent_call": "您最近在 {{appName}} 的通話錄製內容已可供下載",
"create_your_first_form": "建立您的第一份表單",
"create_your_first_form_description": "您可使用引導表單提出符合條件的問題,並引導至適當的人員或活動類型。",
"create_your_first_webhook": "建立您的第一個 Webhook",
@@ -1325,7 +1335,9 @@
"event_one": "活動",
"event_other": "活動",
"profile_team_description": "管理團隊資料設定",
"profile_org_description": "管理組織資料設定",
"members_team_description": "群組中的使用者",
"organization_description": "管理您組織的管理者和成員",
"team_url": "團隊網址",
"team_members": "團隊成員",
"more": "更多",
@@ -1366,6 +1378,7 @@
"routing_forms_send_email_owner": "傳送電子郵件給擁有者",
"routing_forms_send_email_owner_description": "表單提交後傳送電子郵件給擁有者",
"add_new_form": "新增新表單",
"add_new_team_form": "為團隊新增表單",
"create_your_first_route": "建立第一份引導表單",
"route_to_the_right_person": "根據表單回覆引導至合適的人員",
"form_description": "建立您的表單來引導預約者",
@@ -1451,8 +1464,9 @@
"new_event_type_availability": "{{eventTypeTitle}} 開放時間",
"error_editing_availability": "編輯開放時間時發生錯誤",
"dont_have_permission": "您沒有權限存取此資源。",
"saml_configuration_placeholder": "請把 Identity Provider 的 SAML Metadata 貼到這裡。",
"saml_email_required": "請輸入讓我們可以找到 SAML Identity Provider 的電子郵件",
"saml_config": "SAML",
"saml_configuration_placeholder": "請把身分提供者的 SAML Metadata 貼到這裡。",
"saml_email_required": "請輸入讓我們可以找到 SAML 身分提供者的電子郵件",
"saml_sp_title": "服務供應方詳細資訊",
"saml_sp_description": "您的 Identity Provider (IdP) 會要求您提供下列詳細資料,以完成 SAML 應用程式設定。",
"saml_sp_acs_url": "ACS 網址",
@@ -1469,15 +1483,19 @@
"yearly": "每年",
"checkout": "結帳",
"your_team_disbanded_successfully": "已成功解散您的團隊",
"your_org_disbanded_successfully": "已成功解散您的組織",
"error_creating_team": "建立團隊時發生錯誤",
"you": "您",
"resend_email": "重新傳送電子郵件",
"member_already_invited": "已邀請成員",
"enter_email_or_username": "輸入電子郵件或使用者名稱",
"team_name_taken": "已有人使用此名稱",
"must_enter_team_name": "團隊名稱為必填",
"team_url_required": "團隊網址為必填",
"url_taken": "已有人使用此網址",
"problem_registering_domain": "註冊子網域時發生問題,請再試一次或聯絡管理員",
"team_publish": "發佈團隊",
"number_text_notifications": "電話號碼 (簡訊通知)",
"attendee_email_variable": "與會者電子郵件",
"attendee_email_info": "預約人電子郵件",
"kbar_search_placeholder": "輸入指令或搜尋…",
@@ -1500,6 +1518,8 @@
"find_the_best_person": "尋找可預約的最佳人選,並由團隊成員輪流擔任。",
"fixed_round_robin": "固定輪流制",
"add_one_fixed_attendee": "新增一名固定的與會者,並由多名與會者輪流擔任。",
"calcom_is_better_with_team": "{{appName}} 團隊使用更有利",
"the_calcom_team": "{{companyName}} 團隊",
"add_your_team_members": "將團隊成員新增到活動類型。使用全體預定即可納入所有使用者,也可以使用輪流制預定找出最合適的人選。",
"booking_limit_reached": "已達此活動類型的預約限制",
"duration_limit_reached": "已達此活動類型的時間上限",
@@ -1518,6 +1538,7 @@
"navigate_installed_apps": "前往已安裝的應用程式",
"disabled_calendar": "如果您安裝了其他行事曆,新的預約就會新增到該行事曆中。如果沒有,請連至新行事曆,這樣才不會錯過任何新的預約。",
"enable_apps": "啟用應用程式",
"enable_apps_description": "啟用使用者可與 {{appName}} 整合的應用程式",
"purchase_license": "購買授權",
"already_have_key": "我已經有金鑰:",
"already_have_key_suggestion": "請複製您目前的 CALCOM_LICENSE_KEY 環境變數至此處。",
@@ -1531,6 +1552,9 @@
"no_available_apps": "沒有任何可用的應用程式",
"no_available_apps_description": "請確認「packages/app-store」下方的部署了應用程式",
"no_apps": "此 Cal 實例中並未啟用任何應用程式",
"no_apps_configured": "尚未設定任何應用程式",
"enable_in_settings": "您可以在設定中啟用應用程式",
"please_contact_admin": "請聯絡您的管理員",
"apps_settings": "應用程式設定",
"fill_this_field": "請填寫此欄位",
"options": "選項",
@@ -1634,7 +1658,10 @@
"delete_sso_configuration_confirmation_description": "確定要刪除 {{connectionType}} 設定?使用 {{connectionType}} 登入的團隊成員將再也無法存取 Cal.com。",
"organizer_timezone": "主辦者時區",
"email_user_cta": "檢視邀請",
"email_no_user_invite_heading": "您已獲邀加入 {{appName}} {{entity}}",
"email_no_user_invite_subheading": "{{invitedBy}} 已邀請您加入對方在 {{appName}} 上的團隊。{{appName}} 是活動多工排程工具,可讓您和您的團隊無須透過繁複的電子郵件往來就能輕鬆預定會議。",
"email_user_invite_subheading": "{{invitedBy}} 已邀請您加入對方在 {{appName}} 上的 {{entity}}「{{teamName}}」團隊。{{appName}} 為一款活動多功能排程工具,可讓您和 {{entity}} 無須透過繁複的電子郵件往來,就能輕鬆預定會議。",
"email_no_user_invite_steps_intro": "我們會逐步引導您完成幾個簡短的步驟,然後您就能馬上與 {{entity}} 享受沒有壓力的排程預定功能。",
"email_no_user_step_one": "選擇使用者名稱",
"email_no_user_step_two": "連結行事曆帳號",
"email_no_user_step_three": "設定開放時間",
@@ -1645,6 +1672,8 @@
"scheduler": "{Scheduler}",
"no_workflows": "無工作流程",
"change_filter": "變更篩選條件,即可查看您個人和團隊的工作流程。",
"change_filter_common": "變更篩選條件以查看結果。",
"no_results_for_filter": "此篩選條件找不到結果",
"recommended_next_steps": "建議的後續步驟",
"create_a_managed_event": "建立受管活動類型",
"meetings_are_better_with_the_right": "找對團隊成員開會,開會更有效率。立即邀請他們。",
@@ -1655,7 +1684,9 @@
"no_longer_attending": "您不再參加這個活動",
"attendee_no_longer_attending_subject": "一位與會者不再參加 {{date}} 的 {{title}}",
"attendee_no_longer_attending": "一位與會者不再參加您的活動",
"attendee_no_longer_attending_subtitle": "{{name}} 已取消,這代表此時段空出了一個座位",
"create_event_on": "活動建立日期",
"create_routing_form_on": "建立引導表單於",
"default_app_link_title": "設定預設應用程式連結",
"default_app_link_description": "設定預設應用程式連結,即可讓所有全新建立的活動類型使用您設定的應用程式連結。",
"organizer_default_conferencing_app": "主辦者的預設應用程式",
@@ -1665,6 +1696,7 @@
"booking_questions_title": "預約問題",
"booking_questions_description": "自訂預約頁面上的提問問題",
"add_a_booking_question": "新增問題",
"identifier": "識別項",
"duplicate_email": "電子郵件重複",
"booking_with_payment_cancelled": "無法再為此活動付費",
"booking_with_payment_cancelled_already_paid": "此預約付款的退款已在辦理中。",
@@ -1675,6 +1707,7 @@
"show_on_booking_page": "在預約頁面上顯示",
"get_started_zapier_templates": "開始使用 Zapier 範本",
"team_is_unpublished": "已取消發佈 {{team}}",
"team_is_unpublished_description": "此 {{entity}} 連結目前無法使用。請聯絡 {{entity}} 擁有者,或請對方發佈。",
"team_member": "團隊成員",
"a_routing_form": "引導表單",
"form_description_placeholder": "表單說明",
@@ -1704,13 +1737,16 @@
"spot_popular_event_types": "找出熱門活動類型",
"spot_popular_event_types_description": "查看哪種活動類型的點閱次數及預約次數最多",
"no_responses_yet": "還沒有回應",
"no_routes_defined": "未定義任何引導路由",
"this_will_be_the_placeholder": "此處會是佔位符",
"error_booking_event": "預約活動時發生錯誤,請重新整理頁面然後再試一次",
"timeslot_missing_title": "未選擇任何時段",
"timeslot_missing_description": "請選擇要預約活動的時段。",
"timeslot_missing_cta": "選擇時段",
"switch_monthly": "切換至每月檢視",
"switch_weekly": "切換至每週檢視",
"switch_multiday": "切換至每日檢視",
"switch_columnview": "切換至欄檢視",
"num_locations": "{{num}} 個地點選項",
"select_on_next_step": "於下一步選擇",
"this_meeting_has_not_started_yet": "此會議尚未開始",
@@ -1749,6 +1785,7 @@
"managed_event_dialog_title_one": "{{count}} 位成員已有網址 /{{slug}}。是否要替換?",
"managed_event_dialog_title_other": "{{count}} 位成員已有網址 /{{slug}}。是否要替換?",
"managed_event_dialog_information_one": "<strong>{{names}}</strong> 已在使用 <strong>/{{slug}}</strong> 網址。",
"managed_event_dialog_information_other": "<strong>{{names}}</strong> 已在使用 <strong>/{{slug}}</strong> 網址。",
"managed_event_dialog_clarification": "如果您選擇取代,我們會通知他們;如果不想覆寫既有網址,請返回並移除。",
"review_event_type": "查看活動類型",
"looking_for_more_analytics": "在找更多分析嗎?",
@@ -1764,12 +1801,14 @@
"least_booked_members": "最少預約的成員",
"events_created": "已建立的活動",
"events_completed": "已完成的活動",
"events_cancelled": "已取消的活動",
"events_rescheduled": "已重新預定的活動",
"from_last_period": "從上一個時段",
"from_to_date_period": "開始:{{startDate}} 結束:{{endDate}}",
"redirect_url_warning": "加入重新導向功能會停用成功頁面。請務必在自訂的成功頁面中註明「預約已確認」。",
"event_trends": "活動趨勢",
"clear_filters": "清除篩選條件",
"clear": "清除",
"hold": "保留",
"on_booking_option": "預約時收款",
"hold_option": "收取缺席費",
@@ -1796,6 +1835,18 @@
"complete_your_booking": "完成您的預約",
"complete_your_booking_subject": "完成您的預約:{{date}} 的 {{title}}",
"confirm_your_details": "確認詳細資料",
"copy_invite_link": "複製邀請連結",
"edit_invite_link": "編輯連結設定",
"invite_link_copied": "邀請連結已複製",
"invite_link_deleted": "邀請連結已刪除",
"invite_link_updated": "邀請連結設定已儲存",
"link_expires_after": "連結設定效期…",
"one_day": "1 天",
"seven_days": "7 天",
"thirty_days": "30 天",
"three_months": "3 個月",
"one_year": "1 年",
"team_invite_received": "您已獲邀加入 {{teamName}}",
"currency_string": "{{amount, currency}}",
"charge_card_dialog_body": "您即將向與會者收取 {{amount, currency}}。確定要繼續嗎?",
"charge_attendee": "向與會者收取 {{amount, currency}}",
@@ -1804,6 +1855,7 @@
"email_invite_team_bulk": "已邀請 {{userCount}} 位使用者",
"error_collecting_card": "卡片發生錯誤",
"image_size_limit_exceed": "上傳的圖片大小不得超過 5MB 限制",
"unauthorized_workflow_error_message": "{{errorCode}}:您未獲得授權,無法啟用或停用此工作流程",
"inline_embed": "內嵌式嵌入",
"load_inline_content": "直接載入您的活動類型及內嵌在其他網站的內容。",
"floating_pop_up_button": "浮動式彈出按鈕",
@@ -1823,6 +1875,69 @@
"connect_google_workspace": "連接 Google Workspace",
"google_workspace_admin_tooltip": "您必須是 Workspace 管理員才能使用此功能",
"first_event_type_webhook_description": "為此活動類型建立第一個 Webhook",
"install_app_on": "安裝應用程式於",
"create_for": "建立",
"insights_all_org_filter": "所有應用程式"
"setup_organization": "設定組織",
"organization_banner_description": "建立環境,供團隊利用輪流制和全體預定功能建立共用的應用程式、工作流程和活動類型。",
"organization_banner_title": "管理有多個團隊的組織",
"set_up_your_organization": "設定您的組織",
"organizations_description": "團隊可在組織這個共用環境中建立共用的活動類型、應用程式、工作流程等。",
"must_enter_organization_name": "必須輸入組織名稱",
"must_enter_organization_admin_email": "必須輸入您的組織電子郵件地址",
"admin_email": "您的組織電子郵件地址",
"admin_username": "管理員使用者名稱",
"organization_name": "組織名稱",
"organization_url": "組織網址",
"organization_verify_header": "驗證您的組織電子郵件",
"organization_verify_email_body": "請使用以下驗證碼驗證您的電子郵件地址,以便繼續設定您的組織。",
"additional_url_parameters": "其他網址參數",
"about_your_organization": "關於您的組織",
"about_your_organization_description": "您可在組織這個共用環境中建立多個團隊,包括共用成員、活動類型、應用程式、工作流程等。",
"create_your_teams": "建立您的團隊",
"create_your_teams_description": "將團隊成員新增到組織,開始一起排程",
"invite_organization_admins": "邀請組織管理員",
"invite_organization_admins_description": "這些管理員將可存取組織中的所有團隊。您可稍後再新增團隊管理員和成員。",
"set_a_password": "設定密碼",
"set_a_password_description": "這麼做會使用貴組織電子郵件和此密碼建立新的使用者帳戶。",
"organization_logo": "組織標誌",
"organization_about_description": "請提供關於組織的簡介,這會顯示在組織的公開簡介網頁上。",
"ill_do_this_later": "之後再說",
"verify_your_email": "驗證電子郵件",
"enter_digit_code": "輸入我們傳送至 {{email}} 的 6 位數驗證碼",
"verify_email_organization": "驗證您的電子郵件,以建立組織",
"code_provided_invalid": "提供的驗證碼無效,再試一次",
"email_already_used": "電子郵件已有人使用",
"organization_admin_invited_heading": "您已獲邀加入 {{orgName}}",
"organization_admin_invited_body": "加入您在 {{orgName}} 的團隊,開始專注於會議本身,不必費心於會議的前置作業!",
"duplicated_slugs_warning": "由於重複的 slugs,下列團隊無法建立:{{slugs}}",
"team_names_empty": "團隊名稱不得留空",
"team_names_repeated": "團隊名稱不得重複",
"user_belongs_organization": "使用者屬於組織",
"org_no_teams_yet": "此組織尚未有團隊",
"org_no_teams_yet_description": "若您是管理員,請務必建立團隊,團隊才會顯示在這裡。",
"set_up": "設定",
"set_up_your_profile": "設定個人資料",
"set_up_your_profile_description": "向大家介紹您在 {{orgName}} 擔任的職務,以及他們何時可以使用您的公開連結。",
"my_profile": "我的個人資料",
"my_settings": "我的設定",
"crm": "CRM",
"messaging": "傳訊",
"sender_id_info": "顯示為簡訊傳送者的名稱或電話號碼 (部分國家/地區不允許英數字元的傳送者 ID)",
"org_admins_can_create_new_teams": "只有組織管理員才能建立新團隊",
"google_new_spam_policy": "Google 新的垃圾郵件政策可能會使您收不到關於此預約的任何電子郵件和行事曆通知。",
"resolve": "解決",
"no_organization_slug": "為此組織建立團隊時發生錯誤。缺少網址 slug。",
"org_name": "組織名稱",
"org_url": "組織網址",
"copy_link_org": "複製組織連結",
"404_the_org": "組織",
"404_the_team": "團隊",
"404_claim_entity_org": "認領組織的子網域",
"404_claim_entity_team": "認領此團隊並開始共同管理行程表",
"insights_all_org_filter": "所有應用程式",
"insights_team_filter": "團隊:{{teamName}}",
"insights_user_filter": "使用者:{{userName}}",
"insights_subtitle": "查看所有活動的預約洞見",
"custom_plan": "自訂方案",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ 在此上方添加您的新字符串 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
+3 -1
View File
@@ -451,6 +451,7 @@ describe("getSchedule", () => {
endTime: `${plus2DateString}T18:29:59.999Z`,
timeZone: Timezones["+5:30"],
});
expect(scheduleForEventWith30Length).toHaveTimeSlots(
[
`04:00:00.000Z`,
@@ -484,8 +485,9 @@ describe("getSchedule", () => {
timeZone: Timezones["+5:30"],
});
// `slotInterval` takes precedence over `length`
// 4:30 is utc so it is 10:00 in IST
expect(scheduleForEventWith30minsLengthAndSlotInterval2hrs).toHaveTimeSlots(
[`04:00:00.000Z`, `06:00:00.000Z`, `08:00:00.000Z`, `10:00:00.000Z`, `12:00:00.000Z`],
[`04:30:00.000Z`, `06:30:00.000Z`, `08:30:00.000Z`, `10:30:00.000Z`, `12:30:00.000Z`],
{
dateString: plus2DateString,
}
@@ -33,6 +33,7 @@ it("can find lucky user with maximize availability", async () => {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
prismaMock.user.findMany.mockResolvedValue(users);
prismaMock.booking.findMany.mockResolvedValue([]);
await expect(
getLuckyUser("MAXIMIZE_AVAILABILITY", {
+1
View File
@@ -77,6 +77,7 @@
"@deploysentinel/playwright": "^0.3.3",
"@playwright/test": "^1.31.2",
"@snaplet/copycat": "^0.3.0",
"@testing-library/jest-dom": "^5.16.5",
"@types/dompurify": "^2.4.0",
"c8": "^7.13.0",
"dotenv-checker": "^1.1.5",
+22 -9
View File
@@ -38,27 +38,38 @@ export default function AppCard({
return (
<div
className={classNames(
"border-subtle mb-4",
app.isInstalled ? "mt-2" : "mt-6",
"rounded-md border",
"border-subtle",
app?.isInstalled && "mb-4 rounded-md border",
!app.enabled && "grayscale"
)}>
<div className={classNames(app.isInstalled ? "p-4 text-sm sm:p-4" : "px-5 py-4 text-sm sm:px-5")}>
<div className="flex w-full flex-col gap-2 sm:flex-row sm:gap-0">
{/* Don't know why but w-[42px] isn't working, started happening when I started using next/dynamic */}
<Link href={"/apps/" + app.slug} className="mr-3 h-auto w-10 rounded-sm">
<Link
href={"/apps/" + app.slug}
className={classNames(app?.isInstalled ? "mr-[11px]" : "mr-3", "h-auto w-10 rounded-sm")}>
<img
className={classNames(
app?.logo.includes("-dark") && "dark:invert",
`w-full ${app.isInstalled ? "min-w-[42px]" : "min-w-[32.47px]"}`
app?.isInstalled ? "min-w-[42px]" : "min-w-[40px]",
"w-full"
)}
src={app?.logo}
alt={app?.name}
/>
</Link>
<div className="flex flex-col">
<span className="text-emphasis text-base font-semibold leading-4">{app?.name}</span>
<p className="text-default max-w-md truncate pt-2 text-sm font-normal ltr:pr-2 rtl:pl-2">
<div className="flex flex-col pe-3">
<div className="text-emphasis">
<span className={classNames(app?.isInstalled && "text-base", "font-semibold leading-4")}>
{app?.name}
</span>
{!app?.isInstalled && (
<span className="bg-emphasis ml-1 rounded px-1 py-0.5 text-xs font-medium leading-3 tracking-[0.01em]">
{app?.categories[0].charAt(0).toUpperCase() + app?.categories[0].slice(1)}
</span>
)}
</div>
<p title={app?.description} className="text-default line-clamp-1 pt-1 text-sm font-normal">
{description || app?.description}
</p>
</div>
@@ -105,7 +116,9 @@ export default function AppCard({
</div>
<div ref={animationRef}>
{app?.isInstalled && switchChecked && <hr className="border-subtle" />}
{app?.isInstalled && switchChecked ? <div className="p-4 text-sm sm:px-4">{children}</div> : null}
{app?.isInstalled && switchChecked ? (
<div className="p-4 pt-5 text-sm [&_input]:mb-0 [&_input]:leading-4">{children}</div>
) : null}
</div>
</div>
);
@@ -33,15 +33,10 @@ const AppCategoryNavigation = ({
return (
<div className={cs("flex flex-col gap-x-6 md:p-0 xl:flex-row", classNames?.root ?? className)}>
<div className="hidden xl:block">
<VerticalTabs
tabs={appCategories}
sticky
linkProps={{ shallow: true }}
itemClassname={classNames?.verticalTabsItem}
/>
<VerticalTabs tabs={appCategories} sticky linkShallow itemClassname={classNames?.verticalTabsItem} />
</div>
<div className="block overflow-x-scroll xl:hidden">
<HorizontalTabs tabs={appCategories} linkProps={{ shallow: true }} />
<HorizontalTabs tabs={appCategories} linkShallow />
</div>
<main className={classNames?.container ?? containerClassname} ref={animationRef}>
{children}
@@ -76,7 +76,7 @@ export default function OmniInstallAppButton({
className="[@media(max-width:260px)]:w-full [@media(max-width:260px)]:justify-center"
StartIcon={Plus}
{...props}>
{t("install")}
{t("add")}
</Button>
);
}}
+2 -2
View File
@@ -1,7 +1,7 @@
import { google } from "googleapis";
import type { NextApiRequest, NextApiResponse } from "next";
import { WEBAPP_URL } from "@calcom/lib/constants";
import { WEBAPP_URL_FOR_OAUTH } from "@calcom/lib/constants";
import { encodeOAuthState } from "../../_utils/encodeOAuthState";
import getAppKeysFromSlug from "../../_utils/getAppKeysFromSlug";
@@ -22,7 +22,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
if (typeof appKeys.client_secret === "string") client_secret = appKeys.client_secret;
if (!client_id) return res.status(400).json({ message: "Google client_id missing." });
if (!client_secret) return res.status(400).json({ message: "Google client_secret missing." });
const redirect_uri = WEBAPP_URL + "/api/integrations/googlecalendar/callback";
const redirect_uri = WEBAPP_URL_FOR_OAUTH + "/api/integrations/googlecalendar/callback";
const oAuth2Client = new google.auth.OAuth2(client_id, client_secret, redirect_uri);
const authUrl = oAuth2Client.generateAuthUrl({
@@ -1,7 +1,7 @@
import { google } from "googleapis";
import type { NextApiRequest, NextApiResponse } from "next";
import { WEBAPP_URL, CAL_URL } from "@calcom/lib/constants";
import { WEBAPP_URL_FOR_OAUTH, CAL_URL } from "@calcom/lib/constants";
import { getSafeRedirectUrl } from "@calcom/lib/getSafeRedirectUrl";
import prisma from "@calcom/prisma";
@@ -30,7 +30,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
if (!client_id) return res.status(400).json({ message: "Google client_id missing." });
if (!client_secret) return res.status(400).json({ message: "Google client_secret missing." });
const redirect_uri = WEBAPP_URL + "/api/integrations/googlecalendar/callback";
const redirect_uri = WEBAPP_URL_FOR_OAUTH + "/api/integrations/googlecalendar/callback";
const oAuth2Client = new google.auth.OAuth2(client_id, client_secret, redirect_uri);
+4 -1
View File
@@ -42,7 +42,10 @@ export type DefaultEventLocationType = {
}
);
type EventLocationTypeFromApp = Ensure<EventLocationTypeFromAppMeta, "defaultValueVariable" | "variable">;
export type EventLocationTypeFromApp = Ensure<
EventLocationTypeFromAppMeta,
"defaultValueVariable" | "variable"
>;
export type EventLocationType = DefaultEventLocationType | EventLocationTypeFromApp;
@@ -23,6 +23,27 @@ const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({
}}
switchChecked={enabled}
teamId={eventType.team?.id || undefined}>
<div className="flex flex-col gap-2">
<TextField
name="Plausible URL"
defaultValue="https://plausible.io/js/script.js"
placeholder="https://plausible.io/js/script.js"
value={plausibleUrl}
disabled={disabled}
onChange={(e) => {
setAppData("PLAUSIBLE_URL", e.target.value);
}}
/>
<TextField
disabled={disabled}
name="Tracked Domain"
placeholder="yourdomain.com"
value={trackingId}
onChange={(e) => {
setAppData("trackingId", e.target.value);
}}
/>
</div>
<TextField
name="Plausible URL"
defaultValue="https://plausible.io/js/script.js"
@@ -46,7 +46,7 @@ const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({
}}
switchChecked={enabled}
teamId={eventType.team?.id || undefined}>
<div className="flex w-full flex-col gap-2 text-sm">
<div className="flex w-full flex-col gap-5 text-sm">
<div className="flex w-full">
<TextField
name="hello"
@@ -145,7 +145,7 @@ function NewFormDialog({ appUrl }: { appUrl: string }) {
/>
)}
</div>
<DialogFooter showDivider className="mt-12 flex flex-row-reverse gap-x-2">
<DialogFooter showDivider className="mt-12">
<DialogClose />
<Button loading={mutation.isLoading} data-testid="add-form" type="submit">
{t("continue")}
+1
View File
@@ -12,6 +12,7 @@ items:
Skiff is a privacy-first, end-to-end encrypted workspace with Mail, Pages, Drive, and Calendar applications. Skiff Calendar integrates with Cal.com, enabling you to schedule appointments, organize events, and use your preferred video conferencing product.
## Features
- **Full workspace** — beyond email and calendar, Skiff enables writing and collaborating on end-to-end encrypted notes or wikis. You can also upload, preview, and share files.
- **Native applications** — Skiff has native macOS, Windows, iOS, and Android applications, ensuring you can stay on top of your schedule from any device.
- **Multiple accounts** — all Skiff products support multiple accounts, or sharing your entire team to collaborate inside one workspace.
+17 -1
View File
@@ -5,6 +5,7 @@ import type { z } from "zod";
import { getCalendar } from "@calcom/app-store/_utils/getCalendar";
import { FAKE_DAILY_CREDENTIAL } from "@calcom/app-store/dailyvideo/lib/VideoApiAdapter";
import { appKeysSchema as calVideoKeysSchema } from "@calcom/app-store/dailyvideo/zod";
import { getEventLocationTypeFromApp } from "@calcom/app-store/locations";
import { MeetLocationType } from "@calcom/app-store/locations";
import getApps from "@calcom/app-store/utils";
@@ -94,7 +95,22 @@ export default class EventManager {
public async create(event: CalendarEvent): Promise<CreateUpdateResult> {
const evt = processLocation(event);
// Fallback to cal video if no location is set
if (!evt.location) evt["location"] = "integrations:daily";
if (!evt.location) {
// See if cal video is enabled & has keys
const calVideo = await prisma.app.findFirst({
where: {
slug: "daily-video",
},
select: {
keys: true,
enabled: true,
},
});
const calVideoKeys = calVideoKeysSchema.safeParse(calVideo?.keys);
if (calVideo?.enabled && calVideoKeys.success) evt["location"] = "integrations:daily";
}
// Fallback to Cal Video if Google Meet is selected w/o a Google Cal
if (evt.location === MeetLocationType && evt.destinationCalendar?.integration !== "google_calendar") {
+2 -1
View File
@@ -7,6 +7,7 @@ export type EventNameObjectType = {
attendeeName: string;
eventType: string;
eventName?: string | null;
teamName?: string | null;
host: string;
location?: string;
bookingFields?: Prisma.JsonObject;
@@ -17,7 +18,7 @@ export function getEventName(eventNameObj: EventNameObjectType, forAttendeeView
if (!eventNameObj.eventName)
return eventNameObj.t("event_between_users", {
eventName: eventNameObj.eventType,
host: eventNameObj.host,
host: eventNameObj.teamName || eventNameObj.host,
attendeeName: eventNameObj.attendeeName,
interpolation: {
escapeValue: false,
@@ -70,16 +70,7 @@ export default class OrganizerScheduledEmail extends BaseEmail {
protected getNodeMailerPayload(): Record<string, unknown> {
const clonedCalEvent = cloneDeep(this.calEvent);
const toAddresses = [this.calEvent.organizer.email];
if (this.calEvent.team) {
this.calEvent.team.members.forEach((member) => {
const memberAttendee = this.calEvent.attendees.find((attendee) => attendee.email === member.email);
if (memberAttendee) {
toAddresses.push(memberAttendee.email);
}
});
}
const toAddresses = [this.teamMember?.email || this.calEvent.organizer.email];
return {
icalEvent: {
+3
View File
@@ -82,10 +82,13 @@
</style>
</head>
<body>
<span style="display: block"><a href="?color-scheme=dark">With Dark Color Scheme for the Page</a></span>
<span style="display: block"><a href="?nonResponsive">Non responsive version of this page here</a></span>
<span style="display: block"
><a href="?only=prerender-test">Go to Pre-render test page only</a><small></small
></span>
<button onclick="document.documentElement.style.colorScheme='dark'">Toggle Dark Scheme</button>
<button onclick="document.documentElement.style.colorScheme='light'">Toggle Light Scheme</button>
<div>
<script>
if (only === "all" || only === "prerender-test") {
+32 -2
View File
@@ -6,8 +6,38 @@ const callback = function (e) {
console.log("Event: ", e.type, detail);
};
document.addEventListener("click", (e) => {
const target = e.target as HTMLElement;
if ("href" in target && typeof target.href === "string") {
const toUrl = new URL(target.href);
const pageUrl = new URL(document.URL);
for (const [name, value] of pageUrl.searchParams.entries()) {
if (toUrl.searchParams.get(name) === null) {
toUrl.searchParams.append(decodeURIComponent(name), value);
}
}
location.href = `?${toUrl.searchParams.toString()}#${toUrl.hash}`;
e.preventDefault();
}
});
const searchParams = new URL(document.URL).searchParams;
const only = searchParams.get("only");
const colorScheme = searchParams.get("color-scheme");
if (colorScheme) {
document.documentElement.style.colorScheme = colorScheme;
}
const themeInParam = searchParams.get("theme");
const validThemes = ["light", "dark", "auto"] as const;
const theme = validThemes.includes((themeInParam as (typeof validThemes)[number]) || "")
? (themeInParam as (typeof validThemes)[number])
: null;
if (themeInParam && !theme) {
throw new Error(`Invalid theme: ${themeInParam}`);
}
const calLink = searchParams.get("cal-link");
if (only === "all" || only === "ns:default") {
Cal("init", {
@@ -331,7 +361,7 @@ Cal("init", "routingFormDark", {
if (only === "all" || only == "ns:floatingButton") {
Cal.ns.floatingButton("floatingButton", {
calLink: "pro",
calLink: calLink || "pro",
config: {
iframeAttrs: {
id: "floatingtest",
@@ -340,7 +370,7 @@ if (only === "all" || only == "ns:floatingButton") {
email: "johndoe@gmail.com",
notes: "Test Meeting",
guests: ["janedoe@example.com", "test@example.com"],
theme: "dark",
...(theme ? { theme } : {}),
},
});
}
@@ -44,6 +44,7 @@ async function bookFirstFreeUserEventThroughEmbed({
return booking;
}
//TODO: Change these tests to use a user/eventType per embed type atleast. This is so that we can test different themes,layouts configured in App or per EventType
test.describe("Popup Tests", () => {
test.afterEach(async () => {
await deleteAllBookingsByEmail("embed-user@example.com");
@@ -102,56 +103,6 @@ test.describe("Popup Tests", () => {
});
});
test("should open embed iframe on floating button clicked", async ({
page,
addEmbedListeners,
getActionFiredDetails,
}) => {
const calNamespace = "floatingButton";
await addEmbedListeners(calNamespace);
await page.goto("/?only=ns:floatingButton");
await page.click('[data-cal-namespace="floatingButton"] > button');
const embedIframe = await getEmbedIframe({ calNamespace, page, pathname: "/pro" });
await expect(embedIframe).toBeEmbedCalLink(calNamespace, getActionFiredDetails, {
pathname: "/pro",
});
if (!embedIframe) {
throw new Error("Embed iframe not found");
}
const { uid: bookingId } = await bookFirstEvent("pro", embedIframe, page);
const booking = await getBooking(bookingId);
expect(booking.attendees.length).toBe(3);
});
test("should open embed iframe with dark theme on floating button clicked", async ({
page,
addEmbedListeners,
getActionFiredDetails,
}) => {
const calNamespace = "floatingButton";
await addEmbedListeners(calNamespace);
await page.goto("/?only=ns:floatingButton");
await page.click('[data-cal-namespace="floatingButton"] > button');
const embedIframe = await getEmbedIframe({ calNamespace, page, pathname: "/pro" });
await expect(embedIframe).toBeEmbedCalLink(calNamespace, getActionFiredDetails, {
pathname: "/pro",
});
if (!embedIframe) {
throw new Error("Embed iframe not found");
}
const html = embedIframe.locator("html");
await expect(html).toHaveAttribute("class", "dark");
});
todo("Add snapshot test for embed iframe");
test("should open Routing Forms embed on click", async ({
@@ -186,4 +137,112 @@ test.describe("Popup Tests", () => {
});
await expect(embedIframe.locator("text=Seeded Form - Pro")).toBeVisible();
});
test.describe("Floating Button Popup", () => {
test.describe("Pro User - Configured in App with default setting of system theme", () => {
test("should open embed iframe according to system theme when no theme is configured through Embed API", async ({
page,
addEmbedListeners,
getActionFiredDetails,
}) => {
const calNamespace = "floatingButton";
await addEmbedListeners(calNamespace);
await page.goto("/?only=ns:floatingButton");
await page.click('[data-cal-namespace="floatingButton"] > button');
const embedIframe = await getEmbedIframe({ calNamespace, page, pathname: "/pro" });
await expect(embedIframe).toBeEmbedCalLink(calNamespace, getActionFiredDetails, {
pathname: "/pro",
});
if (!embedIframe) {
throw new Error("Embed iframe not found");
}
const html = embedIframe.locator("html");
// Expect "light" theme as configured in App for pro user.
await expect(html).toHaveAttribute("class", "light");
const { uid: bookingId } = await bookFirstEvent("pro", embedIframe, page);
const booking = await getBooking(bookingId);
expect(booking.attendees.length).toBe(3);
});
test("should open embed iframe according to system theme when configured with 'auto' theme using Embed API", async ({
page,
addEmbedListeners,
getActionFiredDetails,
}) => {
const calNamespace = "floatingButton";
await addEmbedListeners(calNamespace);
await page.goto("/?only=ns:floatingButton");
await page.click('[data-cal-namespace="floatingButton"] > button');
const embedIframe = await getEmbedIframe({ calNamespace, page, pathname: "/pro" });
await expect(embedIframe).toBeEmbedCalLink(calNamespace, getActionFiredDetails, {
pathname: "/pro",
});
if (!embedIframe) {
throw new Error("Embed iframe not found");
}
const html = embedIframe.locator("html");
const prefersDarkScheme = await page.evaluate(() => {
return window.matchMedia("(prefers-color-scheme: dark)").matches;
});
// Detect browser preference and expect accordingly
await expect(html).toHaveAttribute("class", prefersDarkScheme ? "dark" : "light");
});
test("should open embed iframe(Booker Profile Page) with dark theme when configured with dark theme using Embed API", async ({
page,
addEmbedListeners,
getActionFiredDetails,
}) => {
const calNamespace = "floatingButton";
await addEmbedListeners(calNamespace);
await page.goto("/?only=ns:floatingButton&theme=dark");
await page.click('[data-cal-namespace="floatingButton"] > button');
const embedIframe = await getEmbedIframe({ calNamespace, page, pathname: "/pro" });
await expect(embedIframe).toBeEmbedCalLink(calNamespace, getActionFiredDetails, {
pathname: "/pro",
});
if (!embedIframe) {
throw new Error("Embed iframe not found");
}
const html = embedIframe.locator("html");
await expect(html).toHaveAttribute("class", "dark");
});
test("should open embed iframe(Event Booking Page) with dark theme when configured with dark theme using Embed API", async ({
page,
addEmbedListeners,
getActionFiredDetails,
}) => {
const calNamespace = "floatingButton";
await addEmbedListeners(calNamespace);
await page.goto("/?only=ns:floatingButton&cal-link=pro/30min&theme=dark");
await page.click('[data-cal-namespace="floatingButton"] > button');
const embedIframe = await getEmbedIframe({ calNamespace, page, pathname: "/pro/30min" });
await expect(embedIframe).toBeEmbedCalLink(calNamespace, getActionFiredDetails, {
pathname: "/pro/30min",
});
if (!embedIframe) {
throw new Error("Embed iframe not found");
}
const html = embedIframe.locator("html");
await expect(html).toHaveAttribute("class", "dark");
});
});
});
});
+15 -1
View File
@@ -18,6 +18,7 @@ export type UiConfig = {
//TODO: Extract from tailwind the list of all custom variables and support them in auto-completion as well as runtime validation. Followup with listing all variables in Embed Snippet Generator UI.
cssVarsPerTheme?: Record<Theme, Record<string, string>>;
layout?: BookerLayouts;
colorScheme?: string | null;
};
type SetStyles = React.Dispatch<React.SetStateAction<EmbedStyles>>;
@@ -336,6 +337,10 @@ const methods = {
window.CalEmbed.applyCssVars(uiConfig.cssVarsPerTheme);
}
if (uiConfig.colorScheme) {
actOnColorScheme(uiConfig.colorScheme);
}
if (embedStore.setUiConfig) {
runAllUiSetters(uiConfig);
}
@@ -461,10 +466,12 @@ if (isBrowser) {
embedStore.uiConfig = {
// TODO: Add theme as well here
// theme:
colorScheme: url.searchParams.get("ui.color-scheme"),
layout: url.searchParams.get("layout") as BookerLayouts,
};
actOnColorScheme(embedStore.uiConfig.colorScheme);
if (url.searchParams.get("prerender") !== "true" && window?.isEmbed?.()) {
log("Initializing embed-iframe");
// HACK
@@ -523,3 +530,10 @@ function runAllUiSetters(uiConfig: UiConfig) {
embedStore.uiConfig = uiConfig;
embedStore.setUiConfig.forEach((setUiConfig) => setUiConfig(uiConfig));
}
function actOnColorScheme(colorScheme: string | null | undefined) {
if (!colorScheme) {
return;
}
document.documentElement.style.colorScheme = colorScheme;
}
+101 -14
View File
@@ -116,6 +116,31 @@ function validate(data: Record<string, unknown>, schema: ValidationSchema) {
}
}
function getColorScheme(el: Element) {
const pageColorScheme = getComputedStyle(el).colorScheme;
if (pageColorScheme === "dark" || pageColorScheme === "light") {
return pageColorScheme;
}
return null;
}
function withColorScheme(
queryObject: PrefillAndIframeAttrsConfig & { guest?: string | string[] },
containerEl: Element
) {
// If color-scheme not explicitly configured, keep it same as the webpage that has the iframe
// This is done to avoid having an opaque background of iframe that arises when they aren't same. We really need to have a transparent background to make embed part of the page
// https://fvsch.com/transparent-iframes#:~:text=the%20resolution%20was%3A-,If%20the%20color%20scheme%20of%20an%20iframe%20differs%20from%20embedding%20document%2C%20iframe%20gets%20an%20opaque%20canvas%20background%20appropriate%20to%20its%20color%20scheme.,-So%20the%20dark
if (!queryObject["ui.color-scheme"]) {
const colorScheme = getColorScheme(containerEl);
// Only handle two color-schemes for now. We don't want to have unintented affect by always explicitly adding color-scheme
if (colorScheme) {
queryObject["ui.color-scheme"] = colorScheme;
}
}
return queryObject;
}
type SingleInstructionMap = {
// TODO: This makes api("on", {}) loose it's generic type. Find a way to fix it.
// e.g. api("on", { action: "__dimensionChanged", callback: (e) => { /* `e.detail.data` has all possible values for all events/actions */} });
@@ -139,8 +164,8 @@ export type PrefillAndIframeAttrsConfig = Record<string, string | string[] | Rec
// TODO: It should have a dedicated prefill prop
// prefill: {},
// TODO: Move layout and theme as nested props of ui as it makes it clear that these two can be configured using `ui` instruction as well any time.
// ui: {layout; theme}
// TODO: Rename layout and theme as ui.layout and ui.theme as it makes it clear that these two can be configured using `ui` instruction as well any time.
"ui.color-scheme"?: string;
layout?: `${BookerLayouts}`;
theme?: EmbedThemeConfig;
};
@@ -217,6 +242,9 @@ export class Cal {
};
}
/**
* Iframe is added invisible and shown only after color-scheme is set by the embedded calLink to avoid flash of non-transparent(white/black) background
*/
createIframe({
calLink,
queryObject = {},
@@ -255,9 +283,14 @@ export class Cal {
urlInstance.pathname = `${urlInstance.pathname}/embed`;
}
urlInstance.searchParams.set("embed", this.namespace);
if (config.debug) {
urlInstance.searchParams.set("debug", "" + config.debug);
}
// Keep iframe invisible, till the embedded calLink sets its color-scheme. This is so that there is no flash of non-transparent(white/black) background
iframe.style.visibility = "hidden";
if (config.uiDebug) {
iframe.style.border = "1px solid green";
}
@@ -334,6 +367,13 @@ export class Cal {
this.actionManager.on("__iframeReady", () => {
this.iframeReady = true;
if (this.iframe) {
// It's a bit late to make the iframe visible here. We just needed to wait for the HTML tag of the embedded calLink to be rendered(which then informs the browser of the color-scheme)
// Right now it would wait for embed-iframe.js bundle to be loaded as well. We can speed that up by inlining the JS that informs about color-scheme being set in the HTML.
// But it's okay to do it here for now because the embedded calLink also keeps itself hidden till it receives `parentKnowsIframeReady` message(It has it's own reasons for that)
// Once the embedded calLink starts not hiding the document, we should optimize this line to make the iframe visible earlier than this.
this.iframe.style.visibility = "visible";
}
this.doInIframe({ method: "parentKnowsIframeReady" } as const);
this.iframeDoQueue.forEach((doInIframeArg) => {
this.doInIframe(doInIframeArg);
@@ -369,7 +409,7 @@ export class Cal {
class CalApi {
cal: Cal;
static initializedNamespaces = [] as string[];
constructor(cal: Cal) {
this.cal = cal;
}
@@ -379,6 +419,8 @@ class CalApi {
config = (namespaceOrConfig || {}) as Config;
}
CalApi.initializedNamespaces.push(this.cal.namespace);
const { calOrigin: calOrigin, origin: origin, ...restConfig } = config;
this.cal.__config.calOrigin = calOrigin || origin || this.cal.__config.calOrigin;
@@ -421,23 +463,31 @@ class CalApi {
if (typeof config.iframeAttrs === "string" || config.iframeAttrs instanceof Array) {
throw new Error("iframeAttrs should be an object");
}
config.embedType = "inline";
const iframe = this.cal.createIframe({ calLink, queryObject: Cal.getQueryObject(config) });
iframe.style.height = "100%";
iframe.style.width = "100%";
const element =
const containerEl =
elementOrSelector instanceof HTMLElement
? elementOrSelector
: document.querySelector(elementOrSelector);
if (!element) {
if (!containerEl) {
throw new Error("Element not found");
}
element.classList.add("cal-inline-container");
config.embedType = "inline";
const iframe = this.cal.createIframe({
calLink,
queryObject: withColorScheme(Cal.getQueryObject(config), containerEl),
});
iframe.style.height = "100%";
iframe.style.width = "100%";
containerEl.classList.add("cal-inline-container");
const template = document.createElement("template");
template.innerHTML = `<cal-inline style="max-height:inherit;height:inherit;min-height:inherit;display:flex;position:relative;flex-wrap:wrap;width:100%"></cal-inline><style>.cal-inline-container::-webkit-scrollbar{display:none}.cal-inline-container{scrollbar-width:none}</style>`;
this.cal.inlineEl = template.content.children[0];
this.cal.inlineEl.appendChild(iframe);
element.appendChild(template.content);
containerEl.appendChild(template.content);
}
floatingButton({
@@ -523,8 +573,14 @@ class CalApi {
if (typeof config.iframeAttrs === "string" || config.iframeAttrs instanceof Array) {
throw new Error("iframeAttrs should be an object");
}
config.embedType = "modal";
const iframe = this.cal.createIframe({ calLink, calOrigin, queryObject: Cal.getQueryObject(config) });
const containerEl = document.body;
const iframe = this.cal.createIframe({
calLink,
queryObject: withColorScheme(Cal.getQueryObject(config), containerEl),
});
iframe.style.borderRadius = "8px";
iframe.style.height = "100%";
@@ -537,7 +593,7 @@ class CalApi {
this.cal.actionManager.on("__closeIframe", () => {
this.cal.modalBox.setAttribute("state", "closed");
});
document.body.appendChild(template.content);
containerEl.appendChild(template.content);
}
on<T extends keyof EventDataMap>({
@@ -646,7 +702,9 @@ export interface CalWindow extends Window {
Cal: GlobalCal;
}
globalCal.instance = new Cal("", globalCal.q);
const DEFAULT_NAMESPACE = "";
globalCal.instance = new Cal(DEFAULT_NAMESPACE, globalCal.q);
for (const [ns, api] of Object.entries(globalCal.ns)) {
api.instance = new Cal(ns, api.q);
}
@@ -711,3 +769,32 @@ document.addEventListener("click", (e) => {
calOrigin,
});
});
let currentColorScheme: string | null = null;
(function watchAndActOnColorSchemeChange() {
// TODO: Maybe find a better way to identify change in color-scheme, a mutation observer seems overkill for this. Settle with setInterval for now.
setInterval(() => {
const colorScheme = getColorScheme(document.body);
if (colorScheme && colorScheme !== currentColorScheme) {
currentColorScheme = colorScheme;
// Go through all the embeds on the same page and update all of them with this info
CalApi.initializedNamespaces.forEach((ns) => {
const api = getEmbedApiFn(ns);
api("ui", {
colorScheme: colorScheme,
});
});
}
}, 50);
})();
function getEmbedApiFn(ns: string) {
let api;
if (ns === DEFAULT_NAMESPACE) {
api = globalCal;
} else {
api = globalCal.ns[ns];
}
return api;
}
@@ -5,14 +5,12 @@ import { trpc } from "@calcom/trpc/react";
import type { ButtonProps } from "@calcom/ui";
import {
Button,
ConfirmationDialogContent,
Dialog,
DialogContent,
DialogTrigger,
showToast,
DialogFooter,
DialogClose,
} from "@calcom/ui";
import { Trash, AlertCircle } from "@calcom/ui/components/icon";
import { Trash } from "@calcom/ui/components/icon";
export default function DisconnectIntegration({
credentialId,
@@ -62,18 +60,15 @@ export default function DisconnectIntegration({
{label && label}
</Button>
</DialogTrigger>
<DialogContent
<ConfirmationDialogContent
variety="danger"
title={t("remove_app")}
description={t("are_you_sure_you_want_to_remove_this_app")}
type="confirmation"
Icon={AlertCircle}>
<DialogFooter>
<DialogClose onClick={() => setModalOpen(false)} />
<DialogClose color="primary" onClick={() => mutation.mutate({ id: credentialId })}>
{t("yes_remove_app")}
</DialogClose>
</DialogFooter>
</DialogContent>
confirmBtnText={t("yes_remove_app")}
onConfirm={() => {
mutation.mutate({ id: credentialId });
}}>
<p className="mt-5">{t("are_you_sure_you_want_to_remove_this_app")}</p>
</ConfirmationDialogContent>
</Dialog>
</>
);
@@ -115,7 +115,7 @@ const providers: Provider[] = [
throw new Error(ErrorCode.IncorrectEmailPassword);
}
if (user.password || !credentials.totpCode) {
if (user.password && !credentials.totpCode) {
if (!user.password) {
throw new Error(ErrorCode.IncorrectEmailPassword);
}
@@ -560,7 +560,7 @@ export const AUTH_OPTIONS: AuthOptions = {
console.error("Error while linking account of already existing user");
}
}
if (existingUser.twoFactorEnabled) {
if (existingUser.twoFactorEnabled && existingUser.identityProvider === idP) {
return loginWithTotp(existingUser);
} else {
return true;
@@ -600,7 +600,11 @@ export const AUTH_OPTIONS: AuthOptions = {
if (existingUserWithEmail) {
// if self-hosted then we can allow auto-merge of identity providers if email is verified
if (!hostedCal && existingUserWithEmail.emailVerified) {
if (
!hostedCal &&
existingUserWithEmail.emailVerified &&
existingUserWithEmail.identityProvider !== IdentityProvider.CAL
) {
if (existingUserWithEmail.twoFactorEnabled) {
return loginWithTotp(existingUserWithEmail);
} else {
+4 -4
View File
@@ -23,7 +23,7 @@ import { useBookerStore, useInitializeBookerStore } from "./store";
import type { BookerLayout, BookerProps } from "./types";
import { useEvent } from "./utils/event";
import { validateLayout } from "./utils/layout";
import { getQueryParam } from './utils/query-param';
import { getQueryParam } from "./utils/query-param";
import { useBrandColors } from "./utils/use-brand-colors";
const PoweredBy = dynamic(() => import("@calcom/ee/components/PoweredBy"));
@@ -120,9 +120,9 @@ const BookerComponent = ({
layout !== _layout
) {
const validLayout = bookerLayouts.enabledLayouts.find((userLayout) => userLayout === layout);
validLayout && setLayout(validLayout)
validLayout && setLayout(validLayout);
}
}, [bookerLayouts, validateLayout, setLayout,_layout]);
}, [bookerLayouts, validateLayout, setLayout, _layout]);
useEffect(() => {
if (event.isLoading) return setBookerState("loading");
@@ -302,4 +302,4 @@ export const Booker = (props: BookerProps) => {
<BookerComponent {...props} />
</LazyMotion>
);
};
};
@@ -1,6 +1,7 @@
import { zodResolver } from "@hookform/resolvers/zod";
import type { UseMutationResult } from "@tanstack/react-query";
import { useMutation } from "@tanstack/react-query";
import { useSession } from "next-auth/react";
import type { TFunction } from "next-i18next";
import { useRouter } from "next/router";
import { useEffect, useMemo, useRef } from "react";
@@ -22,6 +23,7 @@ import { getBookingFieldsWithSystemFields } from "@calcom/features/bookings/lib/
import getBookingResponsesSchema, {
getBookingResponsesPartialSchema,
} from "@calcom/features/bookings/lib/getBookingResponsesSchema";
import { getFullName } from "@calcom/features/form-builder/utils";
import { bookingSuccessRedirect } from "@calcom/lib/bookingSuccessRedirect";
import { MINUTES_TO_BOOK } from "@calcom/lib/constants";
import { useLocale } from "@calcom/lib/hooks/useLocale";
@@ -40,6 +42,7 @@ type BookEventFormProps = {
};
export const BookEventForm = ({ onCancel }: BookEventFormProps) => {
const session = useSession();
const reserveSlotMutation = trpc.viewer.public.slots.reserveSlot.useMutation({
trpc: { context: { skipBatch: true } },
});
@@ -114,8 +117,12 @@ export const BookEventForm = ({ onCancel }: BookEventFormProps) => {
});
const defaultUserValues = {
email: rescheduleUid ? bookingData?.attendees[0].email : parsedQuery["email"] || "",
name: rescheduleUid ? bookingData?.attendees[0].name : parsedQuery["name"] || "",
email: rescheduleUid
? bookingData?.attendees[0].email
: parsedQuery["email"] || session.data?.user?.email || "",
name: rescheduleUid
? bookingData?.attendees[0].name
: parsedQuery["name"] || session.data?.user?.name || "",
};
if (!isRescheduling) {
@@ -193,12 +200,13 @@ export const BookEventForm = ({ onCancel }: BookEventFormProps) => {
const createBookingMutation = useMutation(createBooking, {
onSuccess: async (responseData) => {
const { uid, paymentUid } = responseData;
const fullName = getFullName(bookingForm.getValues("responses.name"));
if (paymentUid) {
return await router.push(
createPaymentLink({
paymentUid,
date: timeslot,
name: bookingForm.getValues("responses.name"),
name: fullName,
email: bookingForm.getValues("responses.email"),
absolute: false,
})
@@ -2,11 +2,11 @@ import { useFormContext } from "react-hook-form";
import type { LocationObject } from "@calcom/app-store/locations";
import getLocationOptionsForSelect from "@calcom/features/bookings/lib/getLocationOptionsForSelect";
import { FormBuilderField } from "@calcom/features/form-builder";
import { FormBuilderField } from "@calcom/features/form-builder/FormBuilderField";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import type { RouterOutputs } from "@calcom/trpc/react";
import { SystemField } from "../../../lib/getBookingFields";
import { SystemField } from "../../../lib/SystemField";
export const BookingFields = ({
fields,
@@ -26,6 +26,7 @@ export const BookingFields = ({
return (
// TODO: It might make sense to extract this logic into BookingFields config, that would allow to quickly configure system fields and their editability in fresh booking and reschedule booking view
// The logic here intends to make modifications to booking fields based on the way we want to specifically show Booking Form
<div>
{fields.map((field, index) => {
// During reschedule by default all system fields are readOnly. Make them editable on case by case basis.
@@ -33,7 +34,6 @@ export const BookingFields = ({
let readOnly =
(field.editable === "system" || field.editable === "system-but-optional") && !!rescheduleUid;
let noLabel = false;
let hidden = !!field.hidden;
const fieldViews = field.views;
@@ -88,28 +88,10 @@ export const BookingFields = ({
field.options = options.filter(
(location): location is NonNullable<(typeof options)[number]> => !!location
);
// If we have only one option and it has an input, we don't show the field label because Option name acts as label.
// e.g. If it's just Attendee Phone Number option then we don't show `Location` label
if (field.options.length === 1) {
if (field.optionsInputs[field.options[0].value]) {
noLabel = true;
} else {
// If there's only one option and it doesn't have an input, we don't show the field at all because it's visible in the left side bar
hidden = true;
}
}
}
const label = noLabel ? "" : field.label || t(field.defaultLabel || "");
const placeholder = field.placeholder || t(field.defaultPlaceholder || "");
return (
<FormBuilderField
className="mb-4"
field={{ ...field, label, placeholder, hidden }}
readOnly={readOnly}
key={index}
/>
<FormBuilderField className="mb-4" field={{ ...field, hidden }} readOnly={readOnly} key={index} />
);
})}
</div>
+1 -1
View File
@@ -128,7 +128,7 @@ export const useBookerStore = create<BookerStore>((set, get) => ({
if (["week_view", "column_view"].includes(layout) && !get().selectedDate) {
set({ selectedDate: dayjs().format("YYYY-MM-DD") });
}
updateQueryParam("layout", layout)
updateQueryParam("layout", layout);
return set({ layout });
},
selectedDate: getQueryParam("date") || null,
@@ -1,5 +1,3 @@
import { useEffect } from "react";
import useGetBrandingColours from "@calcom/lib/getBrandColours";
import useTheme from "@calcom/lib/hooks/useTheme";
import { useCalcomTheme } from "@calcom/ui";
@@ -17,10 +15,7 @@ export const useBrandColors = ({
lightVal: brandColor,
darkVal: darkBrandColor,
});
useCalcomTheme(brandTheme);
const { setTheme } = useTheme(theme);
useEffect(() => {
if (theme) setTheme(theme);
}, [setTheme, theme]);
useCalcomTheme(brandTheme);
useTheme(theme);
};
@@ -5,7 +5,7 @@ import { useLocale } from "@calcom/lib/hooks/useLocale";
import type { RouterOutputs } from "@calcom/trpc/react";
import { trpc } from "@calcom/trpc/react";
import { AnimatedPopover } from "@calcom/ui";
import { Checkbox } from "@calcom/ui";
import { CheckboxField } from "@calcom/ui";
import { groupBy } from "../groupBy";
import { useFilterQuery } from "../lib/useFilterQuery";
@@ -73,7 +73,7 @@ export const EventTypeFilter = () => {
</div>
{groupedEventTypes[teamName].map((eventType) => (
<div key={eventType.id} className="flex items-center px-4 py-1.5">
<Checkbox
<CheckboxField
checked={query.eventTypeIds?.includes(eventType.id)}
onChange={(e) => {
if (e.target.checked) {
@@ -5,11 +5,11 @@ import classNames from "@calcom/lib/classNames";
import getPaymentAppData from "@calcom/lib/getPaymentAppData";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { Clock, CheckSquare, RefreshCcw, CreditCard } from "@calcom/ui/components/icon";
import { AvailableEventLocations } from "@calcom/web/components/booking/AvailableEventLocations";
import type { PublicEvent } from "../../types";
import { EventDetailBlocks } from "../../types";
import { EventDuration } from "./Duration";
import { EventLocations } from "./Locations";
import { EventOccurences } from "./Occurences";
import { EventPrice } from "./Price";
@@ -63,7 +63,7 @@ export const EventMetaBlock = ({
highlight,
contentClassName,
className,
isDark
isDark,
}: EventMetaProps) => {
if (!React.Children.count(children)) return null;
@@ -81,9 +81,10 @@ export const EventMetaBlock = ({
// @TODO: Use SVG's instead of images, so we can get rid of the filter.
className={classNames(
"mr-2 mt-[2px] h-4 w-4 flex-shrink-0",
isDark===undefined && "[filter:invert(0.5)_brightness(0.5)]",
(isDark===undefined || isDark) && "dark:[filter:invert(0.65)_brightness(0.9)]"
)}/>
isDark === undefined && "[filter:invert(0.5)_brightness(0.5)]",
(isDark === undefined || isDark) && "dark:[filter:invert(0.65)_brightness(0.9)]"
)}
/>
) : (
<>{!!Icon && <Icon className="relative z-20 mr-2 mt-[2px] h-4 w-4 flex-shrink-0" />}</>
)}
@@ -128,7 +129,7 @@ export const EventDetails = ({ event, blocks = defaultEventDetailsBlocks }: Even
if (!event?.locations?.length) return null;
return (
<React.Fragment key={block}>
<EventLocations event={event} />
<AvailableEventLocations locations={event.locations} />
</React.Fragment>
);
@@ -27,7 +27,7 @@ export const EventDuration = ({ event }: { event: PublicEvent }) => {
{event.metadata.multipleDuration.map((duration) => (
<Badge
variant="gray"
className={classNames(selectedDuration === duration && "bg-inverted text-inverted")}
className={classNames(selectedDuration === duration && "bg-brand-default text-brand")}
size="md"
key={duration}
onClick={() => setSelectedDuration(duration)}>{`${duration} ${t("minute_timeUnit")}`}</Badge>
@@ -1,8 +1,8 @@
import { getEventLocationType, getTranslatedLocation } from "@calcom/app-store/locations";
import { classNames } from "@calcom/lib";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { Tooltip } from "@calcom/ui";
import { MapPin } from "@calcom/ui/components/icon";
import { classNames } from "@calcom/lib";
import type { PublicEvent } from "../../types";
import { EventMetaBlock } from "./Details";
@@ -20,7 +20,7 @@ export const EventLocations = ({ event }: { event: PublicEvent }) => {
return translatedLocation;
};
const eventLocationType = getEventLocationType(locations[0].type);
const icon = (locations.length > 1 || !eventLocationType?.iconUrl) ? MapPin : eventLocationType.iconUrl;
const icon = locations.length > 1 || !eventLocationType?.iconUrl ? MapPin : eventLocationType.iconUrl;
return (
<EventMetaBlock icon={icon} isDark={eventLocationType?.iconUrl?.includes("-dark")}>
@@ -44,13 +44,15 @@ export const EventLocations = ({ event }: { event: PublicEvent }) => {
<li key={`${location.type}-${index}`} className="mt-1">
<div className="flex flex-row items-center">
<img
src={getEventLocationType(location.type)?.iconUrl}
className={classNames(
"h-3 w-3 opacity-70 ltr:mr-[10px] rtl:ml-[10px] dark:opacity-100 ",
!getEventLocationType(location.type)?.iconUrl?.startsWith("/app-store") ? "dark:invert-[.65]" : ""
)}
alt={`${getEventLocationType(location.type)?.label} icon`}
/>
src={getEventLocationType(location.type)?.iconUrl}
className={classNames(
"h-3 w-3 opacity-70 ltr:mr-[10px] rtl:ml-[10px] dark:opacity-100 ",
!getEventLocationType(location.type)?.iconUrl?.startsWith("/app-store")
? "dark:invert-[.65]"
: ""
)}
alt={`${getEventLocationType(location.type)?.label} icon`}
/>
<span>{getLocationToDisplay(location)}</span>
</div>
</li>
@@ -0,0 +1,11 @@
import { z } from "zod";
export const SystemField = z.enum([
"name",
"email",
"location",
"notes",
"guests",
"rescheduleReason",
"smsReminderNumber",
]);
@@ -1,15 +1,21 @@
import type { EventTypeCustomInput, EventType, Prisma, Workflow } from "@prisma/client";
import { z } from "zod";
import type { z } from "zod";
import slugify from "@calcom/lib/slugify";
import { EventTypeCustomInputType } from "@calcom/prisma/enums";
import {
BookingFieldType,
BookingFieldTypeEnum,
customInputSchema,
eventTypeBookingFields,
EventTypeMetaDataSchema,
} from "@calcom/prisma/zod-utils";
type Fields = z.infer<typeof eventTypeBookingFields>;
if (typeof window !== "undefined") {
console.warn("This file should not be imported on the client side");
}
export const SMS_REMINDER_NUMBER_FIELD = "smsReminderNumber";
/**
@@ -42,18 +48,6 @@ export const getSmsReminderNumberSource = ({
editUrl: `/workflows/${workflowId}`,
});
type Fields = z.infer<typeof eventTypeBookingFields>;
export const SystemField = z.enum([
"name",
"email",
"location",
"notes",
"guests",
"rescheduleReason",
"smsReminderNumber",
]);
/**
* This fn is the key to ensure on the fly mapping of customInputs to bookingFields and ensuring that all the systems fields are present and correctly ordered in bookingFields
*/
@@ -125,12 +119,12 @@ export const ensureBookingInputsHaveSystemFields = ({
// If bookingFields is set already, the migration is done.
const handleMigration = !bookingFields.length;
const CustomInputTypeToFieldType = {
[EventTypeCustomInputType.TEXT]: BookingFieldType.text,
[EventTypeCustomInputType.TEXTLONG]: BookingFieldType.textarea,
[EventTypeCustomInputType.NUMBER]: BookingFieldType.number,
[EventTypeCustomInputType.BOOL]: BookingFieldType.boolean,
[EventTypeCustomInputType.RADIO]: BookingFieldType.radio,
[EventTypeCustomInputType.PHONE]: BookingFieldType.phone,
[EventTypeCustomInputType.TEXT]: BookingFieldTypeEnum.text,
[EventTypeCustomInputType.TEXTLONG]: BookingFieldTypeEnum.textarea,
[EventTypeCustomInputType.NUMBER]: BookingFieldTypeEnum.number,
[EventTypeCustomInputType.BOOL]: BookingFieldTypeEnum.boolean,
[EventTypeCustomInputType.RADIO]: BookingFieldTypeEnum.radio,
[EventTypeCustomInputType.PHONE]: BookingFieldTypeEnum.phone,
};
const smsNumberSources = [] as NonNullable<(typeof bookingFields)[number]["sources"]>;
@@ -151,10 +145,12 @@ export const ensureBookingInputsHaveSystemFields = ({
// These fields should be added before other user fields
const systemBeforeFields: typeof bookingFields = [
{
defaultLabel: "your_name",
type: "name",
// This is the `name` of the main field
name: "name",
editable: "system",
// This Label is used in Email only as of now.
defaultLabel: "your_name",
required: true,
sources: [
{
@@ -332,7 +328,6 @@ export const ensureBookingInputsHaveSystemFields = ({
};
}
}
bookingFields = bookingFields.concat(missingSystemAfterFields);
return eventTypeBookingFields.brand<"HAS_SYSTEM_FIELDS">().parse(bookingFields);
@@ -1,7 +1,8 @@
import { isValidPhoneNumber } from "libphonenumber-js";
import z from "zod";
import type { ALL_VIEWS } from "@calcom/features/form-builder/FormBuilderFieldsSchema";
import type { ALL_VIEWS } from "@calcom/features/form-builder/schema";
import { fieldTypesSchemaMap, dbReadResponseSchema } from "@calcom/features/form-builder/schema";
import type { eventTypeBookingFields } from "@calcom/prisma/zod-utils";
import { bookingResponses, emailSchemaRefinement } from "@calcom/prisma/zod-utils";
@@ -9,19 +10,8 @@ type EventType = Parameters<typeof preprocess>[0]["eventType"];
// eslint-disable-next-line @typescript-eslint/ban-types
type View = ALL_VIEWS | (string & {});
export const bookingResponse = z.union([
z.string(),
z.boolean(),
z.string().array(),
z.object({
optionValue: z.string(),
value: z.string(),
}),
// For variantsConfig case
z.record(z.string()),
]);
export const bookingResponsesDbSchema = z.record(bookingResponse);
export const bookingResponse = dbReadResponseSchema;
export const bookingResponsesDbSchema = z.record(dbReadResponseSchema);
const catchAllSchema = bookingResponsesDbSchema;
@@ -82,6 +72,16 @@ function preprocess<T extends z.ZodType>({
// If the field is not applicable in the current view, then we don't need to do any processing
return;
}
const fieldTypeSchema = fieldTypesSchemaMap[field.type as keyof typeof fieldTypesSchemaMap];
// TODO: Move all the schemas along with their respective types to fieldTypeSchema, that would make schemas shared across Routing Forms builder and Booking Question Formm builder
if (fieldTypeSchema) {
newResponses[field.name] = fieldTypeSchema.preprocess({
response: value,
isPartialSchema,
field,
});
return newResponses;
}
if (field.type === "boolean") {
// Turn a boolean in string to a real boolean
newResponses[field.name] = value === "true" || value === true;
@@ -149,6 +149,19 @@ function preprocess<T extends z.ZodType>({
return;
}
const fieldTypeSchema = fieldTypesSchemaMap[bookingField.type as keyof typeof fieldTypesSchemaMap];
if (fieldTypeSchema) {
fieldTypeSchema.superRefine({
response: value,
ctx,
m,
field: bookingField,
isPartialSchema,
});
return;
}
if (bookingField.type === "multiemail") {
const emailsParsed = emailSchema.array().safeParse(value);
if (!emailsParsed.success) {
@@ -217,9 +230,9 @@ function preprocess<T extends z.ZodType>({
return;
}
if (
["address", "text", "select", "name", "number", "radio", "textarea"].includes(bookingField.type)
) {
// Use fieldTypeConfig.propsType to validate for propsType=="text" or propsType=="select" as in those cases, the response would be a string.
// If say we want to do special validation for 'address' that can be added to `fieldTypesSchemaMap`
if (["address", "text", "select", "number", "radio", "textarea"].includes(bookingField.type)) {
const schema = stringSchema;
if (!schema.safeParse(value).success) {
ctx.addIssue({ code: z.ZodIssueCode.custom, message: m("Invalid string") });
@@ -1,6 +1,6 @@
import type z from "zod";
import { SystemField } from "@calcom/features/bookings/lib/getBookingFields";
import { SystemField } from "@calcom/features/bookings/lib/SystemField";
import type { bookingResponsesDbSchema } from "@calcom/features/bookings/lib/getBookingResponsesSchema";
import { getBookingWithResponses } from "@calcom/lib/getBooking";
import { eventTypeBookingFields } from "@calcom/prisma/zod-utils";
@@ -43,6 +43,7 @@ export const getCalEventResponses = ({
parsedBookingFields.forEach((field) => {
const label = field.label || field.defaultLabel;
if (!label) {
//TODO: This error must be thrown while saving event-type as well so that such an event-type can't be saved
throw new Error('Missing label for booking field "' + field.name + '"');
}
@@ -22,6 +22,7 @@ import { HttpError } from "@calcom/lib/http-error";
import logger from "@calcom/lib/logger";
import { handleRefundError } from "@calcom/lib/payment/handleRefundError";
import { getTranslation } from "@calcom/lib/server/i18n";
import { getTimeFormatStringFromUserTimeFormat } from "@calcom/lib/timeFormat";
import prisma, { bookingMinimalSelect } from "@calcom/prisma";
import { BookingStatus, MembershipRole, WorkflowMethods, WebhookTriggerEvents } from "@calcom/prisma/enums";
import { schemaBookingCancelParams } from "@calcom/prisma/zod-utils";
@@ -44,6 +45,7 @@ async function getBookingToDelete(id: number | undefined, uid: string | undefine
credentials: true, // Not leaking at the moment, be careful with
email: true,
timeZone: true,
timeFormat: true,
name: true,
destinationCalendar: true,
},
@@ -154,6 +156,7 @@ async function handler(req: CustomRequest) {
name: true,
email: true,
timeZone: true,
timeFormat: true,
locale: true,
},
});
@@ -207,6 +210,7 @@ async function handler(req: CustomRequest) {
email: organizer.email,
name: organizer.name ?? "Nameless",
timeZone: organizer.timeZone,
timeFormat: getTimeFormatStringFromUserTimeFormat(organizer.timeFormat),
language: { translate: tOrganizer, locale: organizer.locale ?? "en" },
},
attendees: attendeesList,
@@ -540,6 +544,7 @@ async function handler(req: CustomRequest) {
email: bookingToDelete.user?.email ?? "dev@calendso.com",
name: bookingToDelete.user?.name ?? "no user",
timeZone: bookingToDelete.user?.timeZone ?? "",
timeFormat: getTimeFormatStringFromUserTimeFormat(organizer.timeFormat),
language: { translate: tOrganizer, locale: organizer.locale ?? "en" },
},
attendees: attendeesList,
@@ -42,6 +42,7 @@ import { deleteScheduledEmailReminder } from "@calcom/features/ee/workflows/lib/
import { scheduleWorkflowReminders } from "@calcom/features/ee/workflows/lib/reminders/reminderScheduler";
import { deleteScheduledSMSReminder } from "@calcom/features/ee/workflows/lib/reminders/smsReminderManager";
import { deleteScheduledWhatsappReminder } from "@calcom/features/ee/workflows/lib/reminders/whatsappReminderManager";
import { getFullName } from "@calcom/features/form-builder/utils";
import type { GetSubscriberOptions } from "@calcom/features/webhooks/lib/getWebhooks";
import getWebhooks from "@calcom/features/webhooks/lib/getWebhooks";
import { isPrismaObjOrUndefined, parseRecurringEvent } from "@calcom/lib";
@@ -60,7 +61,7 @@ import { getBookerUrl } from "@calcom/lib/server/getBookerUrl";
import { getTranslation } from "@calcom/lib/server/i18n";
import { slugify } from "@calcom/lib/slugify";
import { updateWebUser as syncServicesUpdateWebUser } from "@calcom/lib/sync/SyncServiceManager";
import { TimeFormat } from "@calcom/lib/timeFormat";
import { getTimeFormatStringFromUserTimeFormat } from "@calcom/lib/timeFormat";
import prisma, { userSelect } from "@calcom/prisma";
import type { BookingReference } from "@calcom/prisma/client";
import { BookingStatus, SchedulingType, WebhookTriggerEvents, WorkflowMethods } from "@calcom/prisma/enums";
@@ -598,6 +599,7 @@ function getBookingData({
throw new Error("`responses` must not be nullish");
}
const responses = reqBody.responses;
const { userFieldsResponses: calEventUserFieldsResponses, responses: calEventResponses } =
getCalEventResponses({
bookingFields: eventType.bookingFields,
@@ -722,6 +724,8 @@ async function handler(
eventType,
});
const fullName = getFullName(bookerName);
const tAttendees = await getTranslation(language ?? "en", "common");
const tGuests = await getTranslation("en", "common");
log.debug(`Booking eventType ${eventTypeId} started`);
@@ -937,7 +941,7 @@ async function handler(
const invitee = [
{
email: bookerEmail,
name: bookerName,
name: fullName,
timeZone: reqBody.timeZone,
language: { translate: tAttendees, locale: language ?? "en" },
},
@@ -990,9 +994,11 @@ async function handler(
const eventNameObject = {
//TODO: Can we have an unnamed attendee? If not, I would really like to throw an error here.
attendeeName: bookerName || "Nameless",
attendeeName: fullName || "Nameless",
eventType: eventType.title,
eventName: eventType.eventName,
// we send on behalf of team if >1 round robin attendee | collective
teamName: eventType.schedulingType === "COLLECTIVE" || users.length > 1 ? eventType.team?.name : null,
// TODO: Can we have an unnamed organizer? If not, I would really like to throw an error here.
host: organizerUser.name || "Nameless",
location: bookingLocation,
@@ -1027,7 +1033,7 @@ async function handler(
username: organizerUser.username || undefined,
timeZone: organizerUser.timeZone,
language: { translate: tOrganizer, locale: organizerUser.locale ?? "en" },
timeFormat: organizerUser.timeFormat === 24 ? TimeFormat.TWENTY_FOUR_HOUR : TimeFormat.TWELVE_HOUR,
timeFormat: getTimeFormatStringFromUserTimeFormat(organizerUser.timeFormat),
},
responses: "calEventResponses" in reqBody ? reqBody.calEventResponses : null,
userFieldsResponses: calEventUserFieldsResponses,
@@ -49,7 +49,7 @@ export function DateValues({ days, containerNavRef }: Props) {
<span
className={classNames(
"items-center justify-center p-1",
isToday && "bg-inverted text-inverted rounded-full"
isToday && "bg-brand-default text-brand rounded-full"
)}>
{day.format("DD")}
</span>
@@ -101,7 +101,7 @@ function Cell({ isDisabled, topOffsetMinutes, timeSlot }: CellProps) {
{!isDisabled && hoverEventDuration !== 0 && (
<div
className={classNames(
"opacity-4 bg-subtle hover:bg-emphasis text-emphasis dark:border-emphasis absolute hidden rounded-[4px] border-[1px] border-gray-900 px-[6px] py-1 text-xs font-semibold leading-5 group-hover:flex group-hover:cursor-pointer",
"opacity-4 bg-brand-default hover:bg-brand-default text-brand dark:border-emphasis absolute hidden rounded-[4px] border-[1px] border-gray-900 px-[6px] py-1 text-xs font-semibold leading-5 group-hover:flex group-hover:cursor-pointer",
hoverEventDuration && hoverEventDuration > 15 && "items-start pt-3",
hoverEventDuration && hoverEventDuration < 15 && "items-center"
)}
@@ -1,40 +1,67 @@
import { ArrowRight } from "lucide-react";
import { useRouter } from "next/router";
import { useState } from "react";
import { useForm, useFieldArray } from "react-hook-form";
import { z } from "zod";
import { classNames } from "@calcom/lib";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
import { Button, showToast, TextField } from "@calcom/ui";
import { Plus, X } from "@calcom/ui/components/icon";
import { Plus, X, ArrowRight } from "@calcom/ui/components/icon";
const querySchema = z.object({
id: z.string().transform((val) => parseInt(val)),
});
const schema = z.object({
teams: z
.array(
z.object({
name: z.string().min(2, "org_team_name_min_2_chars").trim(),
})
)
.min(1, "At least one team is required"),
});
export const AddNewTeamsForm = () => {
const { t } = useLocale();
const router = useRouter();
const { id: orgId } = querySchema.parse(router.query);
const [counter, setCounter] = useState(1);
const [inputValues, setInputValues] = useState<string[]>([""]);
const { register, control, handleSubmit, formState, trigger, setValue, getValues } = useForm({
defaultValues: { teams: [{ name: "" }] }, // Set initial values
resolver: async (data) => {
try {
const validatedData = await schema.parseAsync(data);
return { values: validatedData, errors: {} };
} catch (error) {
if (error instanceof z.ZodError) {
return {
values: {
teams: [],
},
errors: error.formErrors.fieldErrors,
};
}
return { values: {}, errors: { teams: { message: "Error validating input" } } };
}
},
});
const { fields, append, remove } = useFieldArray({
control,
name: "teams",
});
const handleCounterIncrease = () => {
setCounter((prevCounter) => prevCounter + 1);
setInputValues((prevInputValues) => [...prevInputValues, ""]);
};
const handleInputChange = (index: number, value: string) => {
const newInputValues = [...inputValues];
newInputValues[index] = value;
setInputValues(newInputValues);
if (counter >= 0 && counter < 5) {
setCounter((prevCounter) => prevCounter + 1);
append({ name: "" });
}
};
const handleRemoveInput = (index: number) => {
const newInputValues = [...inputValues];
newInputValues.splice(index, 1);
setInputValues(newInputValues);
remove(index);
setCounter((prevCounter) => prevCounter - 1);
};
@@ -42,6 +69,8 @@ export const AddNewTeamsForm = () => {
async onSuccess(data) {
if (data.duplicatedSlugs.length) {
showToast(t("duplicated_slugs_warning", { slugs: data.duplicatedSlugs.join(", ") }), "warning");
// Server will return array of duplicated slugs, so we need to wait for user to read the warning
// before pushing to next page
setTimeout(() => {
router.push(`/event-types`);
}, 3000);
@@ -54,54 +83,69 @@ export const AddNewTeamsForm = () => {
},
});
const handleInputChange = (index: number, event: any) => {
const { name, value } = event.target;
setValue(`teams.${index}.name`, value);
trigger(`teams.${index}.name`);
};
const handleFormSubmit = () => {
if (formState.isValid) {
const fields = getValues("teams");
createTeamsMutation.mutate({ orgId, teamNames: fields.map((field) => field.name) });
}
};
return (
<>
{Array.from({ length: counter }, (_, index) => (
<div className="relative" key={index}>
<TextField
key={index}
value={inputValues[index]}
onChange={(e) => handleInputChange(index, e.target.value)}
addOnClassname="bg-transparent p-0 border-l-0"
addOnSuffix={
index > 0 && (
<Button
color="minimal"
className="group/remove mx-2 px-0 hover:bg-transparent"
onClick={() => handleRemoveInput(index)}>
<X className="bg-subtle text group-hover/remove:text-inverted group-hover/remove:bg-inverted h-5 w-5 rounded-full p-1" />
</Button>
)
}
/>
</div>
))}
<Button
StartIcon={Plus}
color="secondary"
disabled={createTeamsMutation.isLoading}
onClick={handleCounterIncrease}>
{t("add_a_team")}
</Button>
<Button
EndIcon={ArrowRight}
color="primary"
className="mt-6 w-full justify-center"
disabled={createTeamsMutation.isLoading}
onClick={() => {
if (inputValues.includes("")) {
showToast(t("team_names_empty"), "error");
} else {
const duplicates = inputValues.filter((item, index) => inputValues.indexOf(item) !== index);
if (duplicates.length) {
showToast("team_names_repeated", "error");
} else {
createTeamsMutation.mutate({ orgId, teamNames: inputValues });
}
}
}}>
{t("continue")}
</Button>
<form onSubmit={handleSubmit(handleFormSubmit)}>
{fields.map((field, index) => (
<div className={classNames("relative", index > 0 ? "mb-2" : "")} key={field.id}>
<TextField
key={field.id}
{...register(`teams.${index}.name`)}
label=""
onChange={(e) => handleInputChange(index, e)}
addOnClassname="bg-transparent p-0 border-l-0"
className={index > 0 ? "mb-2" : ""}
placeholder={t(`org_team_names_example_${index + 1}`) || t("org_team_names_example")}
addOnSuffix={
index > 0 && (
<Button
color="minimal"
className="group/remove mx-2 px-0 hover:bg-transparent"
onClick={() => handleRemoveInput(index)}
aria-label="Remove Team">
<X className="bg-subtle text group-hover/remove:text-inverted group-hover/remove:bg-inverted h-5 w-5 rounded-full p-1" />
</Button>
)
}
minLength={2}
maxLength={63}
/>
</div>
))}
{counter === 5 && <p className="text-subtle my-2 text-sm">{t("org_max_team_warnings")}</p>}
{counter < 5 && (
<Button
StartIcon={Plus}
color="secondary"
disabled={createTeamsMutation.isLoading}
onClick={handleCounterIncrease}
aria-label={t("add_a_team")}
className="my-1">
{t("add_a_team")}
</Button>
)}
<Button
EndIcon={ArrowRight}
color="primary"
className="mt-6 w-full justify-center"
disabled={!formState.isValid || createTeamsMutation.isLoading || createTeamsMutation.isSuccess}
onClick={handleFormSubmit}>
{t("continue")}
</Button>
</form>
</>
);
};
@@ -223,8 +223,11 @@ export const CreateANewOrganizationForm = ({ slug }: { slug?: string }) => {
defaultValue={value}
onChange={(e) => {
const domain = extractDomainFromEmail(e?.target.value);
newOrganizationFormMethods.setValue("adminEmail", e?.target.value);
newOrganizationFormMethods.setValue("adminUsername", e?.target.value.split("@")[0]);
newOrganizationFormMethods.setValue("adminEmail", e?.target.value.trim());
newOrganizationFormMethods.setValue(
"adminUsername",
e?.target.value.split("@")[0].trim()
);
if (newOrganizationFormMethods.getValues("slug") === "") {
newOrganizationFormMethods.setValue("slug", domain);
}
@@ -256,7 +259,7 @@ export const CreateANewOrganizationForm = ({ slug }: { slug?: string }) => {
label={t("organization_name")}
defaultValue={value}
onChange={(e) => {
newOrganizationFormMethods.setValue("name", e?.target.value);
newOrganizationFormMethods.setValue("name", e?.target.value.trim());
if (newOrganizationFormMethods.formState.touchedFields["slug"] === undefined) {
newOrganizationFormMethods.setValue("slug", slugify(e?.target.value));
}
@@ -1,133 +1,17 @@
import { useRouter } from "next/router";
import { useState } from "react";
import LicenseRequired from "@calcom/features/ee/common/components/LicenseRequired";
import MemberInvitationModal from "@calcom/features/ee/teams/components/MemberInvitationModal";
import MemberListItem from "@calcom/features/ee/teams/components/MemberListItem";
import TeamInviteList from "@calcom/features/ee/teams/components/TeamInviteList";
import { getLayout } from "@calcom/features/settings/layouts/SettingsLayout";
import { UserListTable } from "@calcom/features/users/components/UserTable/UserListTable";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { MembershipRole } from "@calcom/prisma/enums";
import { trpc } from "@calcom/trpc/react";
import type { RouterOutputs } from "@calcom/trpc/react";
import { Button, Meta, TextField, showToast } from "@calcom/ui";
import { Plus } from "@calcom/ui/components/icon";
type Team = RouterOutputs["viewer"]["teams"]["get"];
interface MembersListProps {
team: Team | undefined;
}
const checkIfExist = (comp: string, query: string) =>
comp.toLowerCase().replace(/\s+/g, "").includes(query.toLowerCase().replace(/\s+/g, ""));
function MembersList(props: MembersListProps) {
const { team } = props;
const { t } = useLocale();
const [query, setQuery] = useState<string>("");
const members = team?.members;
const membersList = members
? members && query === ""
? members
: members.filter((member) => {
const email = member.email ? checkIfExist(member.email, query) : false;
const username = member.username ? checkIfExist(member.username, query) : false;
const name = member.name ? checkIfExist(member.name, query) : false;
return email || username || name;
})
: undefined;
return (
<div className="flex flex-col gap-y-3">
<TextField
type="search"
autoComplete="false"
onChange={(e) => setQuery(e.target.value)}
value={query}
placeholder={`${t("search")}...`}
/>
{membersList?.length && team ? (
<ul className="divide-subtle border-subtle divide-y rounded-md border ">
{membersList.map((member) => {
return <MemberListItem key={member.id} team={team} member={member} />;
})}
</ul>
) : null}
</div>
);
}
import { Meta } from "@calcom/ui";
const MembersView = () => {
const { t, i18n } = useLocale();
const router = useRouter();
const utils = trpc.useContext();
const showDialog = router.query.inviteModal === "true";
const [showMemberInvitationModal, setShowMemberInvitationModal] = useState(showDialog);
const { data: team, isLoading } = trpc.viewer.organizations.listMembers.useQuery(undefined, {
onError: () => {
router.push("/settings");
},
});
const inviteMemberMutation = trpc.viewer.teams.inviteMember.useMutation({
async onSuccess(data) {
await utils.viewer.organizations.listMembers.invalidate();
setShowMemberInvitationModal(false);
if (data.sendEmailInvitation) {
if (Array.isArray(data.usernameOrEmail)) {
showToast(
t("email_invite_team_bulk", {
userCount: data.usernameOrEmail.length,
}),
"success"
);
} else {
showToast(
t("email_invite_team", {
email: data.usernameOrEmail,
}),
"success"
);
}
}
},
onError: (error) => {
showToast(error.message, "error");
},
});
const isInviteOpen = !team?.membership.accepted;
const isAdminOrOwner =
team && (team.membership.role === MembershipRole.OWNER || team.membership.role === MembershipRole.ADMIN);
const { t } = useLocale();
return (
<LicenseRequired>
<Meta
title={t("organization_members")}
description={t("organization_description")}
CTA={
isAdminOrOwner ? (
<Button
type="button"
color="primary"
StartIcon={Plus}
className="ml-auto"
onClick={() => setShowMemberInvitationModal(true)}
data-testid="new-organization-member-button">
{t("add")}
</Button>
) : (
<></>
)
}
/>
{!isLoading && (
<>
<div>
{team && (
<Meta title={t("organization_members")} description={t("organization_description")} />
<div>
{/* {team && (
<>
{isInviteOpen && (
<TeamInviteList
@@ -144,30 +28,9 @@ const MembersView = () => {
/>
)}
</>
)}
<MembersList team={team} />
</div>
{showMemberInvitationModal && team && (
<MemberInvitationModal
teamId={team.id}
isOpen={showMemberInvitationModal}
members={team.members}
onExit={() => setShowMemberInvitationModal(false)}
isLoading={inviteMemberMutation.isLoading}
onSubmit={(values) => {
inviteMemberMutation.mutate({
teamId: team.id,
language: i18n.language,
role: values.role,
usernameOrEmail: values.emailOrUsername,
sendEmailInvitation: values.sendInviteEmail,
isOrg: true,
});
}}
/>
)}
</>
)}
)} */}
<UserListTable />
</div>
</LicenseRequired>
);
};
@@ -14,6 +14,7 @@ import { IS_PRODUCTION } from "@calcom/lib/constants";
import { getErrorFromUnknown } from "@calcom/lib/errors";
import { HttpError as HttpCode } from "@calcom/lib/http-error";
import { getTranslation } from "@calcom/lib/server/i18n";
import { getTimeFormatStringFromUserTimeFormat } from "@calcom/lib/timeFormat";
import { prisma, bookingMinimalSelect } from "@calcom/prisma";
import { BookingStatus } from "@calcom/prisma/enums";
import { EventTypeMetaDataSchema } from "@calcom/prisma/zod-utils";
@@ -59,6 +60,7 @@ async function getBooking(bookingId: number) {
id: true,
username: true,
timeZone: true,
timeFormat: true,
email: true,
name: true,
locale: true,
@@ -108,6 +110,7 @@ async function getBooking(bookingId: number) {
email: user.email,
name: user.name!,
timeZone: user.timeZone,
timeFormat: getTimeFormatStringFromUserTimeFormat(user.timeFormat),
language: { translate: t, locale: user.locale ?? "en" },
id: user.id,
},
@@ -163,6 +166,7 @@ async function handlePaymentSuccess(event: Stripe.Event) {
username: true,
credentials: true,
timeZone: true,
timeFormat: true,
email: true,
name: true,
locale: true,
@@ -216,6 +220,7 @@ async function handlePaymentSuccess(event: Stripe.Event) {
email: user.email,
name: user.name!,
timeZone: user.timeZone,
timeFormat: getTimeFormatStringFromUserTimeFormat(user.timeFormat),
language: { translate: t, locale: user.locale ?? "en" },
},
attendees: attendeesList,
@@ -11,7 +11,7 @@ import type { StripePaymentData, StripeSetupIntentData } from "@calcom/app-store
import { bookingSuccessRedirect } from "@calcom/lib/bookingSuccessRedirect";
import { CAL_URL } from "@calcom/lib/constants";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { Button, Checkbox } from "@calcom/ui";
import { Button, CheckboxField } from "@calcom/ui";
import type { EventType } from ".prisma/client";
@@ -101,7 +101,7 @@ const PaymentForm = (props: Props) => {
</div>
{paymentOption === "HOLD" && (
<div className="bg-info mb-5 mt-2 rounded-md p-3">
<Checkbox
<CheckboxField
description={t("acknowledge_booking_no_show_fee", {
amount: props.payment.amount / 100,
formatParams: { amount: { currency: props.payment.currency } },
@@ -116,8 +116,7 @@ const PaymentForm = (props: Props) => {
color="minimal"
disabled={!holdAcknowledged || ["processing", "error"].includes(state.status)}
id="cancel"
onClick={() => router.back()}
>
onClick={() => router.back()}>
<span id="button-text">{t("cancel")}</span>
</Button>
<Button

Some files were not shown because too many files have changed in this diff Show More