Compare commits

..
41 Commits
Author SHA1 Message Date
GitHub Actions 899da51f06 chore: release v5.3.9
Post release / release (push) Canceled after 0s
2025-06-09 21:56:25 +00:00
Joe Au-Yeung 4e085e404a Downgrade Next to 15.3.0 (#21746) 2025-06-09 17:21:02 +00:00
Morgan ff3aaadbaa fix: update delegation credentials api-v2 (#21739)
* fix: update delegation credentials api-v2

* fixup! fix: update delegation credentials api-v2
2025-06-09 11:46:38 +00:00
11bddbb71d feat: add setting to allow booking through a reschedule link (#21652)
* feat: add setting to disable rescheduling cancelled bookings

Co-Authored-By: hariom@cal.com <hariom@cal.com>

* fix: resolve type errors for disableReschedulingCancelledBookings field

Co-Authored-By: hariom@cal.com <hariom@cal.com>

* fix: update test expectations and builder to include disableReschedulingCancelledBookings field

Co-Authored-By: hariom@cal.com <hariom@cal.com>

* fix: add disableReschedulingCancelledBookings field to managed event types

Co-Authored-By: hariom@cal.com <hariom@cal.com>

* fix: remove duplicate disableReschedulingCancelledBookings property in test

Co-Authored-By: hariom@cal.com <hariom@cal.com>

* fix: change default value to true for disableReschedulingCancelledBookings

Co-Authored-By: hariom@cal.com <hariom@cal.com>

* fix: update managed event types to use true as default for disableReschedulingCancelledBookings

Co-Authored-By: hariom@cal.com <hariom@cal.com>

* test: add comprehensive tests for disableReschedulingCancelledBookings feature

Co-Authored-By: hariom@cal.com <hariom@cal.com>

* update and remove unnecesarry test

* update e2e test

* Update reschedule.e2e.ts

* update

* fix

* Reverse the meaning of column

* Simpify logic of rescheduling redirects

* fix test

* revert

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: hariom@cal.com <hariom@cal.com>
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
Co-authored-by: unknown <adhabal2002@gmail.com>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
2025-06-07 22:30:54 +02:00
devklepacki 55a80ba253 Fixed pl translation typo (#21723) 2025-06-06 13:59:58 +00:00
Hariom Balhara 32a89c30de fix: [object object] for name when rescheduling a past booking (#21695) 2025-06-05 09:42:48 +01:00
Parteek malikandAnik Dhabal Babu 5404eeedc2 fix: no show not updating in sync (#21687)
* fix: no show not updating in sync

* fix footer in no show dialog

* using await

---------

Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
2025-06-04 10:14:08 +00:00
Hariom Balhara d54ba90304 fix-wrong-url-on-auth-error (#21693) 2025-06-04 09:55:19 +05:30
Omar López ca206915bf fix: self hosted feature check (#21690) 2025-06-03 17:00:48 +00:00
Anik Dhabal Babu 8461b82f0d fix: Update handlers and refactor code (#21686)
* fix: update safeCredentialSelect

* Update credential.ts

* Update

* update
2025-06-03 15:32:40 +00:00
Alex van Andel 07ffc3fade fix: Remove hard dependency on NEXT_PUBLIC_API_V2_URL (#21682)
* fix: Remove hard dependency on NEXT_PUBLIC_API_V2_URL

* turn spread into a push, simpler
2025-06-02 19:21:38 +01:00
sean-brydon c2240f0bad only use event api v2 call if route is in env (#21680) 2025-06-02 17:31:35 +00:00
Zenrac 36a712f979 fix: Correct typo 'siège' to 'place' in French translation (#21671) 2025-06-02 08:54:24 +05:30
Lauris Skraucis 842ba09896 refactor: v2 reschedule booking error messages (#21647) 2025-05-30 13:24:06 +00:00
devin-ai-integration[bot] b3c822abf7 feat: move filter segment selection from localStorage to database (#21523) 2025-05-30 12:56:49 +00:00
Akarsh JainandMorgan 1f52ed7290 feat: Add loadingStateChildren prop to AvailabilitySettingsPlatformWrapper (#21602)
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
2025-05-30 10:39:02 +00:00
Lauris Skraucis a2c13e576e refactor: v2 dont allow rescheduling cancelled,rescheduled bookings (#21643) 2025-05-30 10:23:51 +00:00
Morgan 24bb52d2e9 fix: platformPlanGuard per active users plan (#21642)
* fix: platformPlanGuard per active users plan

* fix: refactor
2025-05-30 09:42:23 +00:00
Joe Au-Yeung d8145bbc78 Remove error if team members and hosts do not match (#21598) 2025-05-30 08:31:34 +00:00
Hariom BalharaandAlex van Andel 8753a6e4d6 Function return type is illegal, not sure how this passed eslint (#21567) (#21622)
Co-authored-by: Alex van Andel <me@alexvanandel.com>
2025-05-30 13:18:04 +05:30
Benny Joo b91607b5b4 fix: missing places for revalidations (#21632) 2025-05-29 22:45:41 +01:00
Sarthak Kapila af0e839f27 feat: Enable Adding Custom children components at the bottom of EventMeta within Booker using children component props (#21618)
* feat: Enable Adding Custom children components at the bottom of EventMeta

* removed default style

* added prop in BookerPlatformWrapper
2025-05-29 21:26:30 +00:00
Udit Takkar b6de03de96 Revert "perf: use app dir to fetch team feature flags in settings (#21433)" (#21628)
This reverts commit 1dca160db0.
2025-05-29 20:10:12 +00:00
e115095198 perf: migrate listHandler to AttributeRepository + cache attributes fetching in RSCs (#21552)
* refactor: migrate listHandler to AttributeRepository

Co-Authored-By: benny@cal.com <benny@cal.com>

* cache attributes list

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: benny@cal.com <benny@cal.com>
Co-authored-by: hbjORbj <sldisek783@gmail.com>
2025-05-29 15:01:44 -04:00
Lauris Skraucis c3add4bae8 fix: v2 slots reservation (#21623)
* feat: return team event type hosts username

* docs: team event types hosts username in return

* fix: ignore cancelled and rejected bookings from slot reservation

* fix: dont allow slot to overlap existing active booking

* refactor: remove log
2025-05-29 16:25:33 +00:00
Alex van Andel 3040e14624 refactor: Use a deployment repository to interact with license keys (#21613) 2025-05-29 10:58:33 -04:00
Calcom BotandLingo.dev 34993e3f36 feat: update translations via @LingoDotDev (#21260)
Co-authored-by: Lingo.dev <support@lingo.dev>
2025-05-29 14:58:17 +00:00
Sarthak Kapilaandcubic-dev-ai[bot] 8d5c6b8877 feat: OnformChange on Availability Settings Atom (#21560)
* feat: OnformChange on Availability Settings Atom

* docs: update availability-settings

* Update docs/platform/atoms/availability-settings.mdx

Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>

---------

Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2025-05-29 20:05:01 +05:30
Devanshu SharmaandMorgan c9eac73fec feat: add support for custom no schedule children in AvailabilitySettingsPlatformWrapper (#21601)
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
2025-05-29 20:02:56 +05:30
Udit Takkar ab475b80f3 fix: recording button bug (#21609)
* fix: recording btn visible bug

* fix: check for showRecordingButton

* refactor: create a reusable function
2025-05-29 14:23:51 +00:00
Benny Joo 2b79039b70 perf: upgrade to next 15.3.2 (#21610)
* perf: upgrade nextjs to 15.3.2

* update yarn lock
2025-05-29 14:50:42 +01:00
Lauris Skraucis 044df04d3f feat: v2 return team event type hosts username (#21617)
* feat: return team event type hosts username

* docs: team event types hosts username in return
2025-05-29 14:58:40 +03:00
Layan Jyoti Duttaandlayand12 2cbf805ffb Fixed generator enums in prisma db (#21595)
Co-authored-by: layand12 <d.layan@unque.me>
2025-05-28 22:49:20 +00:00
GitHub Actions d208074063 chore: release v5.3.8
Post release / release (push) Canceled after 0s
2025-05-28 21:11:43 +00:00
Joe Au-Yeung 30541da1fa Fix logging (#21593) 2025-05-28 16:30:14 +00:00
Carina WollendorferandCarinaWolli 97af0af0ba fix: only generate sms message bodies when needed (#21566)
* only generate template when needed

* rename function to getSMSMessageWithVariables

---------

Co-authored-by: CarinaWolli <wollencarina@gmail.com>
2025-05-28 16:01:40 +00:00
Faiz e9b26921da fix: misaligned and undersized tick mark in timezone dropdown (#21550) 2025-05-28 12:37:16 +00:00
Alex van Andel e4434f199d Function return type is illegal, not sure how this passed eslint (#21567) 2025-05-28 13:21:14 +01:00
Joe Au-Yeung f4b0219a0e Variable fix (#21557) 2025-05-28 02:38:20 +01:00
Joe Au-Yeung 6f1eaaa02e fix: Create separate calendar events to hide organizer (#21555)
* Add notes to `EventManager.create`

* Create `CalendarServiceEvent`

* Generate calendar description and remove attendees if event is private in `CalendarManager`

* Process event for reschedule method

* Refactor calendar services

* Clean up comment

* Type fixes

* Type fix

* Type fix
2025-05-27 20:46:26 -04:00
Udit TakkarandAlex van Andel e5868837d5 perf: service worker lifecycle method (#21532)
Co-authored-by: Alex van Andel <me@alexvanandel.com>
2025-05-27 23:12:25 +00:00
148 changed files with 3245 additions and 642 deletions
+2
View File
@@ -0,0 +1,2 @@
undecided:
- "@calcom/prisma"
View File
@@ -1,4 +1,4 @@
import prismock from "../../../../../../tests/libs/__mocks__/prisma";
import prismock from "../../../../../tests/libs/__mocks__/prisma";
import type { Request, Response } from "express";
import type { NextApiRequest, NextApiResponse } from "next";
@@ -7,12 +7,12 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import type { ILicenseKeyService } from "@calcom/ee/common/server/LicenseKeyService";
import LicenseKeyService from "@calcom/ee/common/server/LicenseKeyService";
import { hashAPIKey } from "@calcom/features/ee/api-keys/lib/apiKeys";
import type { IDeploymentRepository } from "@calcom/lib/server/repository/deployment.interface";
import prisma from "@calcom/prisma";
import { MembershipRole, UserPermissionRole } from "@calcom/prisma/enums";
import { hashAPIKey } from "~/../../../packages/features/ee/api-keys/lib/apiKeys";
import { verifyApiKey } from "../../../lib/helpers/verifyApiKey";
import { verifyApiKey } from "./verifyApiKey";
type CustomNextApiRequest = NextApiRequest & Request;
type CustomNextApiResponse = NextApiResponse & Response;
@@ -21,11 +21,16 @@ afterEach(() => {
vi.resetAllMocks();
});
describe("Verify API key", () => {
const mockDeploymentRepository: IDeploymentRepository = {
getLicenseKeyWithId: vi.fn().mockResolvedValue("mockLicenseKey"), // Mocked return value
};
// TODO: Fix the skip condition for this test suite
describe.skip("Verify API key", () => {
let service: ILicenseKeyService;
beforeEach(async () => {
service = await LicenseKeyService.create();
service = await LicenseKeyService.create(mockDeploymentRepository);
vi.spyOn(service, "checkLicense");
});
+4 -2
View File
@@ -3,6 +3,7 @@ import type { NextMiddleware } from "next-api-middleware";
import { LicenseKeySingleton } from "@calcom/ee/common/server/LicenseKeyService";
import { hashAPIKey } from "@calcom/features/ee/api-keys/lib/apiKeys";
import { IS_PRODUCTION } from "@calcom/lib/constants";
import { DeploymentRepository } from "@calcom/lib/server/repository/deployment";
import prisma from "@calcom/prisma";
import { isAdminGuard } from "../utils/isAdmin";
@@ -19,11 +20,12 @@ export const dateNotInPast = function (date: Date) {
// This verifies the apiKey and sets the user if it is valid.
export const verifyApiKey: NextMiddleware = async (req, res, next) => {
const licenseKeyService = await LicenseKeySingleton.getInstance();
const deploymentRepo = new DeploymentRepository(prisma);
const licenseKeyService = await LicenseKeySingleton.getInstance(deploymentRepo);
const hasValidLicense = await licenseKeyService.checkLicense();
if (!hasValidLicense && IS_PRODUCTION) {
return res.status(401).json({ error: "Invalid or missing CALCOM_LICENSE_KEY environment variable" });
return res.status(401).json({ message: "Invalid or missing CALCOM_LICENSE_KEY environment variable" });
}
if (!req.query.apiKey) return res.status(401).json({ message: "No apiKey provided" });
@@ -2399,6 +2399,146 @@ describe("Bookings Endpoints 2024-08-13", () => {
});
});
describe("cant't reschedule cancelled booking", () => {
it("should not be able to reschedule cancelled booking", async () => {
const cancelledBooking = await bookingsRepositoryFixture.create({
status: "CANCELLED",
user: {
connect: {
id: user.id,
},
},
startTime: new Date(Date.UTC(2050, 0, 8, 13, 0, 0)),
endTime: new Date(Date.UTC(2050, 0, 8, 14, 0, 0)),
title: "peer coding lets goo",
uid: `cancelled-booking-${randomString()}`,
eventType: {
connect: {
id: eventTypeId,
},
},
location: "integrations:daily",
customInputs: {},
metadata: {},
responses: {
name: "Oldie",
email: "oldie@gmail.com",
},
attendees: {
create: {
email: "oldie@gmail.com",
name: "Oldie",
locale: "lv",
timeZone: "Europe/Rome",
},
},
});
const body: RescheduleBookingInput_2024_08_13 = {
start: new Date(Date.UTC(2040, 0, 9, 14, 0, 0)).toISOString(),
reschedulingReason: "Flying to mars that day",
};
const response = await request(app.getHttpServer())
.post(`/v2/bookings/${cancelledBooking.uid}/reschedule`)
.send(body)
.set(CAL_API_VERSION_HEADER, VERSION_2024_08_13)
.expect(400);
expect(response.body.error.message).toEqual(
`Can't reschedule booking with uid=${cancelledBooking.uid} because it has been cancelled. Please provide uid of a booking that is not cancelled.`
);
await bookingsRepositoryFixture.deleteById(cancelledBooking.id);
});
it("should not be able to reschedule rescheduled booking", async () => {
const rescheduledBooking = await bookingsRepositoryFixture.create({
status: "CANCELLED",
rescheduled: true,
user: {
connect: {
id: user.id,
},
},
startTime: new Date(Date.UTC(2050, 0, 8, 13, 0, 0)),
endTime: new Date(Date.UTC(2050, 0, 8, 14, 0, 0)),
title: "peer coding lets goo",
uid: `cancelled-booking-${randomString()}`,
eventType: {
connect: {
id: eventTypeId,
},
},
location: "integrations:daily",
customInputs: {},
metadata: {},
responses: {
name: "Oldie",
email: "oldie@gmail.com",
},
attendees: {
create: {
email: "oldie@gmail.com",
name: "Oldie",
locale: "lv",
timeZone: "Europe/Rome",
},
},
});
const newBooking = await bookingsRepositoryFixture.create({
status: "ACCEPTED",
user: {
connect: {
id: user.id,
},
},
fromReschedule: rescheduledBooking.uid,
startTime: new Date(Date.UTC(2050, 0, 8, 13, 0, 0)),
endTime: new Date(Date.UTC(2050, 0, 8, 14, 0, 0)),
title: "peer coding lets goo",
uid: `new-booking-${randomString()}`,
eventType: {
connect: {
id: eventTypeId,
},
},
location: "integrations:daily",
customInputs: {},
metadata: {},
responses: {
name: "Oldie",
email: "oldie@gmail.com",
},
attendees: {
create: {
email: "oldie@gmail.com",
name: "Oldie",
locale: "lv",
timeZone: "Europe/Rome",
},
},
});
const body: RescheduleBookingInput_2024_08_13 = {
start: new Date(Date.UTC(2040, 0, 9, 14, 0, 0)).toISOString(),
reschedulingReason: "Flying to mars that day",
};
const response = await request(app.getHttpServer())
.post(`/v2/bookings/${rescheduledBooking.uid}/reschedule`)
.send(body)
.set(CAL_API_VERSION_HEADER, VERSION_2024_08_13)
.expect(400);
expect(response.body.error.message).toEqual(
`Can't reschedule booking with uid=${rescheduledBooking.uid} because it has been cancelled and rescheduled already to booking with uid=${newBooking.uid}. You probably want to reschedule ${newBooking.uid} instead by passing it within the request URL.`
);
await bookingsRepositoryFixture.deleteById(rescheduledBooking.id);
await bookingsRepositoryFixture.deleteById(newBooking.id);
});
});
function responseDataIsRecurranceBooking(data: any): data is RecurringBookingOutput_2024_08_13 {
return (
!Array.isArray(data) &&
@@ -637,6 +637,7 @@ export class BookingsService_2024_08_13 {
async rescheduleBooking(request: Request, bookingUid: string, body: RescheduleBookingInput) {
try {
await this.canRescheduleBooking(bookingUid);
const bookingRequest = await this.inputService.createRescheduleBookingRequest(
request,
bookingUid,
@@ -682,15 +683,29 @@ export class BookingsService_2024_08_13 {
}
return this.outputService.getOutputBooking(databaseBooking);
} catch (error) {
if (error instanceof Error) {
if (error.message === "no_available_users_found_error") {
throw new BadRequestException("User either already has booking at this time or is not available");
}
}
throw error;
this.errorsBookingsService.handleBookingError(error, false);
}
}
async canRescheduleBooking(bookingUid: string) {
const booking = await this.bookingsRepository.getByUid(bookingUid);
if (!booking) {
throw new Error(`Booking with uid=${bookingUid} was not found in the database`);
}
if (booking.status === "CANCELLED" && !booking.rescheduled) {
throw new BadRequestException(
`Can't reschedule booking with uid=${bookingUid} because it has been cancelled. Please provide uid of a booking that is not cancelled.`
);
}
if (booking.status === "CANCELLED" && booking.rescheduled) {
const rescheduledTo = await this.bookingsRepository.getByFromReschedule(bookingUid);
throw new BadRequestException(
`Can't reschedule booking with uid=${bookingUid} because it has been cancelled and rescheduled already to booking with uid=${rescheduledTo?.uid}. You probably want to reschedule ${rescheduledTo?.uid} instead by passing it within the request URL.`
);
}
return booking;
}
async cancelBooking(request: Request, bookingUid: string, body: CancelBookingInput) {
if (this.inputService.isCancelSeatedBody(body)) {
const seat = await this.bookingSeatRepository.getByReferenceUid(body.seatUid);
@@ -1,6 +1,6 @@
import { PlatformPlan } from "@/modules/auth/decorators/billing/platform-plan.decorator";
import { ApiAuthGuardUser } from "@/modules/auth/strategies/api-auth/api-auth.strategy";
import { PlatformPlanType } from "@/modules/billing/types";
import { PlatformPlanType, orderedPlans } from "@/modules/billing/types";
import { OrganizationsRepository } from "@/modules/organizations/index/organizations.repository";
import { RedisService } from "@/modules/redis/redis.service";
import { Injectable, CanActivate, ExecutionContext, ForbiddenException } from "@nestjs/common";
@@ -61,7 +61,7 @@ export class PlatformPlanGuard implements CanActivate {
!hasMinimumPlan({
currentPlan: organization.platformBilling?.plan as PlatformPlanType,
minimumPlan: minimumPlan,
plans: ["FREE", "STARTER", "ESSENTIALS", "SCALE", "ENTERPRISE"],
plans: orderedPlans,
})
) {
throw new ForbiddenException(
@@ -79,7 +79,7 @@ export class PlatformPlanGuard implements CanActivate {
type HasMinimumPlanProp = {
currentPlan: PlatformPlanType;
minimumPlan: PlatformPlanType;
plans: PlatformPlanType[];
plans: readonly PlatformPlanType[];
};
export function hasMinimumPlan(props: HasMinimumPlanProp): boolean {
@@ -87,7 +87,7 @@ export function hasMinimumPlan(props: HasMinimumPlanProp): boolean {
const minimumPlanIndex = props.plans.indexOf(props.minimumPlan);
if (currentPlanIndex === -1 || minimumPlanIndex === -1) {
throw new Error(
throw new ForbiddenException(
`PlatformPlanGuard - Invalid platform billing plan provided. Current plan: ${props.currentPlan}, Minimum plan: ${props.minimumPlan}`
);
}
+10 -1
View File
@@ -7,4 +7,13 @@ export enum PlatformPlan {
PER_ACTIVE_USER = "PER_ACTIVE_USER",
}
export type PlatformPlanType = "FREE" | "STARTER" | "ESSENTIALS" | "SCALE" | "ENTERPRISE" | "PER_ACTIVE_USER";
export const orderedPlans = [
"FREE",
"STARTER",
"ESSENTIALS",
"SCALE",
"PER_ACTIVE_USER",
"ENTERPRISE",
] as const;
export type PlatformPlanType = (typeof orderedPlans)[number];
@@ -1,11 +1,12 @@
import { PrismaReadService } from "@/modules/prisma/prisma-read.service";
import { PrismaWriteService } from "@/modules/prisma/prisma-write.service";
import { Injectable } from "@nestjs/common";
import { Prisma } from "@calcom/prisma/client";
@Injectable()
export class OrganizationsDelegationCredentialRepository {
constructor(private readonly dbRead: PrismaReadService) {}
constructor(private readonly dbRead: PrismaReadService, private readonly dbWrite: PrismaWriteService) {}
async findById(delegationCredentialId: string) {
return this.dbRead.prisma.delegationCredential.findUnique({ where: { id: delegationCredentialId } });
@@ -22,7 +23,7 @@ export class OrganizationsDelegationCredentialRepository {
delegationCredentialId: string,
data: Prisma.DelegationCredentialUncheckedUpdateInput
) {
return this.dbRead.prisma.delegationCredential.update({
return this.dbWrite.prisma.delegationCredential.update({
where: { id: delegationCredentialId },
data,
include: { workspacePlatform: true },
@@ -47,7 +47,7 @@ export class OrganizationsDelegationCredentialService {
delegatedServiceAccountUser: User,
body: UpdateDelegationCredentialInput
) {
const delegationCredential =
let delegationCredential =
await this.organizationsDelegationCredentialRepository.findByIdWithWorkspacePlatform(
delegationCredentialId
);
@@ -56,6 +56,14 @@ export class OrganizationsDelegationCredentialService {
throw new NotFoundException(`DelegationCredential with id ${delegationCredentialId} not found`);
}
if (body.serviceAccountKey !== undefined) {
const updatedDelegationCredential = await this.updateDelegationCredentialServiceAccountKey(
delegationCredential.id,
body.serviceAccountKey
);
delegationCredential = updatedDelegationCredential ?? delegationCredential;
}
if (body.enabled !== undefined) {
await this.updateDelegationCredentialEnabled(
orgId,
@@ -64,16 +72,13 @@ export class OrganizationsDelegationCredentialService {
body.enabled
);
}
if (body.serviceAccountKey !== undefined) {
await this.updateDelegationCredentialServiceAccountKey(delegationCredentialId, body.serviceAccountKey);
}
// once delegation credentials are enabled, slowly set all the destination calendars of delegated users
if (body.enabled === true && delegationCredential.enabled === false) {
await this.ensureDefaultCalendars(orgId, delegationCredential.domain);
}
return { ...delegationCredential, enabled: body?.enabled ?? delegationCredential?.enabled };
return { ...delegationCredential, enabled: body?.enabled ?? delegationCredential.enabled };
}
async ensureDefaultCalendars(orgId: number, domain: string) {
@@ -132,6 +137,7 @@ export class OrganizationsDelegationCredentialService {
delegationCredentialId,
{
serviceAccountKey: encryptedServiceAccountKey,
enabled: false,
}
);
return delegationCredential;
@@ -89,11 +89,13 @@ describe("Organizations Event Types Endpoints", () => {
teammate1 = await userRepositoryFixture.create({
email: teammate1Email,
username: teammate1Email,
name: "alice",
});
teammate2 = await userRepositoryFixture.create({
email: teammate2Email,
username: teammate2Email,
name: "bob",
});
falseTestUser = await userRepositoryFixture.create({
@@ -432,6 +434,21 @@ describe("Organizations Event Types Endpoints", () => {
const responseTeamEvent = responseBody.data.find((event) => event.teamId === team.id);
expect(responseTeamEvent).toBeDefined();
expect(responseTeamEvent?.hosts).toEqual([
{
userId: teammate1.id,
name: teammate1.name,
username: teammate1.username,
avatarUrl: teammate1.avatarUrl,
},
{
userId: teammate2.id,
name: teammate2.name,
username: teammate2.username,
avatarUrl: teammate2.avatarUrl,
},
]);
if (!responseTeamEvent) {
throw new Error("Team event not found");
}
@@ -93,7 +93,7 @@ export class OutputOrganizationsEventTypesService {
const hosts =
databaseEventType.schedulingType === "MANAGED"
? await this.getManagedEventTypeHosts(databaseEventType.id)
: await this.transformHosts(databaseEventType.hosts, databaseEventType.schedulingType);
: await this.getNonManagedEventTypeHosts(databaseEventType.hosts, databaseEventType.schedulingType);
return {
...rest,
@@ -138,13 +138,18 @@ export class OutputOrganizationsEventTypesService {
for (const child of children) {
if (child.userId) {
const user = await this.usersRepository.findById(child.userId);
transformedHosts.push({ userId: child.userId, name: user?.name || "" });
transformedHosts.push({
userId: child.userId,
name: user?.name || "",
username: user?.username || "",
avatarUrl: user?.avatarUrl,
});
}
}
return transformedHosts;
}
async transformHosts(
async getNonManagedEventTypeHosts(
databaseHosts: Host[],
schedulingType: SchedulingType | null
): Promise<TeamEventTypeResponseHost[]> {
@@ -160,6 +165,7 @@ export class OutputOrganizationsEventTypesService {
transformedHosts.push({
userId: databaseHost.userId,
name: databaseUser?.name || "",
username: databaseUser?.username || "",
mandatory: !!databaseHost.isFixed,
priority: getPriorityLabel(databaseHost.priority || 2),
avatarUrl: databaseUser?.avatarUrl,
@@ -168,6 +174,7 @@ export class OutputOrganizationsEventTypesService {
transformedHosts.push({
userId: databaseHost.userId,
name: databaseUser?.name || "",
username: databaseUser?.username || "",
avatarUrl: databaseUser?.avatarUrl,
});
}
@@ -1501,6 +1501,429 @@ describe("Slots 2024-09-04 Endpoints", () => {
});
});
describe("booking status", () => {
const startTime = "2050-09-12T11:00:00.000Z";
const testBookingUid = `booking-uid-${eventTypeId}-booking-status-test`;
describe("cant reserve", () => {
it("should not be able to reserve a slot if booking is accepted during that time", async () => {
const booking = await bookingsRepositoryFixture.create({
status: "ACCEPTED",
uid: testBookingUid,
title: "booking title",
startTime,
endTime: "2050-09-12T12:00:00.000Z",
eventType: {
connect: {
id: eventTypeId,
},
},
metadata: {},
responses: {
name: "tester",
email: "tester@example.com",
guests: [],
},
user: {
connect: {
id: user.id,
},
},
});
const reserveResponse = await request(app.getHttpServer())
.post(`/v2/slots/reservations`)
.send({
eventTypeId,
slotStart: startTime,
})
.set(CAL_API_VERSION_HEADER, VERSION_2024_09_04)
.expect(422);
expect(reserveResponse.body.error.message).toEqual(
`Can't reserve a slot if the event is already booked.`
);
await bookingsRepositoryFixture.deleteById(booking.id);
});
it("should not be able to reserve a slot if booking is pending during that time", async () => {
const booking = await bookingsRepositoryFixture.create({
status: "PENDING",
uid: testBookingUid,
title: "booking title",
startTime,
endTime: "2050-09-12T12:00:00.000Z",
eventType: {
connect: {
id: eventTypeId,
},
},
metadata: {},
responses: {
name: "tester",
email: "tester@example.com",
guests: [],
},
user: {
connect: {
id: user.id,
},
},
});
const reserveResponse = await request(app.getHttpServer())
.post(`/v2/slots/reservations`)
.send({
eventTypeId,
slotStart: startTime,
})
.set(CAL_API_VERSION_HEADER, VERSION_2024_09_04)
.expect(422);
expect(reserveResponse.body.error.message).toEqual(
`Can't reserve a slot if the event is already booked.`
);
await bookingsRepositoryFixture.deleteById(booking.id);
});
it("should not be able to reserve a slot if booking is awaiting host during that time", async () => {
const booking = await bookingsRepositoryFixture.create({
status: "AWAITING_HOST",
uid: testBookingUid,
title: "booking title",
startTime,
endTime: "2050-09-12T12:00:00.000Z",
eventType: {
connect: {
id: eventTypeId,
},
},
metadata: {},
responses: {
name: "tester",
email: "tester@example.com",
guests: [],
},
user: {
connect: {
id: user.id,
},
},
});
const reserveResponse = await request(app.getHttpServer())
.post(`/v2/slots/reservations`)
.send({
eventTypeId,
slotStart: startTime,
})
.set(CAL_API_VERSION_HEADER, VERSION_2024_09_04)
.expect(422);
expect(reserveResponse.body.error.message).toEqual(
`Can't reserve a slot if the event is already booked.`
);
await bookingsRepositoryFixture.deleteById(booking.id);
});
});
describe("can reserve", () => {
it("should be able to reserve a slot if booking is cancelled during that time", async () => {
const booking = await bookingsRepositoryFixture.create({
status: "CANCELLED",
uid: testBookingUid,
title: "booking title",
startTime,
endTime: "2050-09-12T12:00:00.000Z",
eventType: {
connect: {
id: eventTypeId,
},
},
metadata: {},
responses: {
name: "tester",
email: "tester@example.com",
guests: [],
},
user: {
connect: {
id: user.id,
},
},
});
const reserveResponse = await request(app.getHttpServer())
.post(`/v2/slots/reservations`)
.send({
eventTypeId,
slotStart: startTime,
})
.set(CAL_API_VERSION_HEADER, VERSION_2024_09_04)
.expect(201);
const reserveResponseBody: ReserveSlotOutputResponse_2024_09_04 = reserveResponse.body;
expect(reserveResponseBody.status).toEqual(SUCCESS_STATUS);
const responseReservedSlot: ReserveSlotOutputData_2024_09_04 = reserveResponseBody.data;
expect(responseReservedSlot.reservationUid).toBeDefined();
expect(responseReservedSlot.eventTypeId).toEqual(eventTypeId);
expect(responseReservedSlot.slotStart).toEqual(startTime);
expect(responseReservedSlot.slotDuration).toEqual(eventTypeLength);
expect(responseReservedSlot.slotEnd).toEqual(
DateTime.fromISO(startTime, { zone: "UTC" }).plus({ minutes: eventTypeLength }).toISO()
);
expect(responseReservedSlot.reservationDuration).toEqual(5);
await bookingsRepositoryFixture.deleteById(booking.id);
await selectedSlotsRepositoryFixture.deleteByUId(responseReservedSlot.reservationUid);
});
it("should be able to reserve a slot if booking is rejected during that time", async () => {
const booking = await bookingsRepositoryFixture.create({
status: "REJECTED",
uid: testBookingUid,
title: "booking title",
startTime,
endTime: "2050-09-12T12:00:00.000Z",
eventType: {
connect: {
id: eventTypeId,
},
},
metadata: {},
responses: {
name: "tester",
email: "tester@example.com",
guests: [],
},
user: {
connect: {
id: user.id,
},
},
});
const reserveResponse = await request(app.getHttpServer())
.post(`/v2/slots/reservations`)
.send({
eventTypeId,
slotStart: startTime,
})
.set(CAL_API_VERSION_HEADER, VERSION_2024_09_04)
.expect(201);
const reserveResponseBody: ReserveSlotOutputResponse_2024_09_04 = reserveResponse.body;
expect(reserveResponseBody.status).toEqual(SUCCESS_STATUS);
const responseReservedSlot: ReserveSlotOutputData_2024_09_04 = reserveResponseBody.data;
expect(responseReservedSlot.reservationUid).toBeDefined();
expect(responseReservedSlot.eventTypeId).toEqual(eventTypeId);
expect(responseReservedSlot.slotStart).toEqual(startTime);
expect(responseReservedSlot.slotDuration).toEqual(eventTypeLength);
expect(responseReservedSlot.slotEnd).toEqual(
DateTime.fromISO(startTime, { zone: "UTC" }).plus({ minutes: eventTypeLength }).toISO()
);
expect(responseReservedSlot.reservationDuration).toEqual(5);
await bookingsRepositoryFixture.deleteById(booking.id);
});
});
});
describe("booking overlap", () => {
const T0901 = DateTime.fromISO("2055-01-01T10:00:00.000Z").minus({ minutes: 59 }).toISO();
const T0930 = "2055-01-01T09:30:00.000Z";
const T1000 = "2055-01-01T10:00:00.000Z";
const T1015 = "2055-01-01T10:15:00.000Z";
const T1029 = DateTime.fromISO("2055-01-01T10:30:00.000Z").minus({ minutes: 1 }).toISO();
const T1030 = "2055-01-01T10:30:00.000Z";
const T1045 = "2055-01-01T10:45:00.000Z";
const T1100 = "2055-01-01T11:00:00.000Z";
const T1130 = "2055-01-01T11:30:00.000Z";
const T1200 = "2055-01-01T12:00:00.000Z";
const getBookingPayload = (startTime: string, endTime: string) => ({
status: "ACCEPTED" as const,
uid: `test-booking-overlap-${randomString()}`,
title: "Overlap Test Booking",
startTime,
endTime,
eventType: { connect: { id: eventTypeId } },
metadata: {},
responses: { name: "Tester", email: `tester-overlap-${randomString()}@example.com`, guests: [] },
user: { connect: { id: user.id } },
});
const expectedErrorMessage = "Can't reserve a slot if the event is already booked.";
describe("slot overlaps booking", () => {
it("should fail if slot reservation (10:00-11:00) starts during an existing booking (09:30-10:30)", async () => {
const booking = await bookingsRepositoryFixture.create(getBookingPayload(T0930, T1030));
const reserveResponse = await request(app.getHttpServer())
.post(`/v2/slots/reservations`)
.send({ eventTypeId, slotStart: T1000 })
.set(CAL_API_VERSION_HEADER, VERSION_2024_09_04)
.expect(422);
expect(reserveResponse.body.error.message).toEqual(expectedErrorMessage);
await bookingsRepositoryFixture.deleteById(booking.id);
});
it("should fail if slot reservation (10:00-11:00) ends during an existing booking (10:30-11:30)", async () => {
const booking = await bookingsRepositoryFixture.create(getBookingPayload(T1030, T1130));
const reserveResponse = await request(app.getHttpServer())
.post(`/v2/slots/reservations`)
.send({ eventTypeId, slotStart: T1000 })
.set(CAL_API_VERSION_HEADER, VERSION_2024_09_04)
.expect(422);
expect(reserveResponse.body.error.message).toEqual(expectedErrorMessage);
await bookingsRepositoryFixture.deleteById(booking.id);
});
it("should fail if slot reservation (10:15-11:15) is entirely contained within an existing booking (10:00-11:30)", async () => {
const booking = await bookingsRepositoryFixture.create(getBookingPayload(T1000, T1130));
const reserveResponse = await request(app.getHttpServer())
.post(`/v2/slots/reservations`)
.send({ eventTypeId, slotStart: T1015 })
.set(CAL_API_VERSION_HEADER, VERSION_2024_09_04)
.expect(422);
expect(reserveResponse.body.error.message).toEqual(expectedErrorMessage);
await bookingsRepositoryFixture.deleteById(booking.id);
});
it("should fail if slot reservation (10:00-11:00) entirely contains an existing booking (10:15-10:45)", async () => {
const booking = await bookingsRepositoryFixture.create(getBookingPayload(T1015, T1045));
const reserveResponse = await request(app.getHttpServer())
.post(`/v2/slots/reservations`)
.send({ eventTypeId, slotStart: T1000 })
.set(CAL_API_VERSION_HEADER, VERSION_2024_09_04)
.expect(422);
expect(reserveResponse.body.error.message).toEqual(expectedErrorMessage);
await bookingsRepositoryFixture.deleteById(booking.id);
});
it("should fail if slot reservation (10:00-11:00) starts at the same time as an existing booking (10:00-11:00)", async () => {
const booking = await bookingsRepositoryFixture.create(getBookingPayload(T1000, T1100));
const reserveResponse = await request(app.getHttpServer())
.post(`/v2/slots/reservations`)
.send({ eventTypeId, slotStart: T1000 })
.set(CAL_API_VERSION_HEADER, VERSION_2024_09_04)
.expect(422);
expect(reserveResponse.body.error.message).toEqual(expectedErrorMessage);
await bookingsRepositoryFixture.deleteById(booking.id);
});
it("should fail if slot reservation (10:00-11:00) ends at the same time as an existing booking (09:30-11:00)", async () => {
const booking = await bookingsRepositoryFixture.create(getBookingPayload(T0930, T1100));
const reserveResponse = await request(app.getHttpServer())
.post(`/v2/slots/reservations`)
.send({ eventTypeId, slotStart: T1000 })
.set(CAL_API_VERSION_HEADER, VERSION_2024_09_04)
.expect(422);
expect(reserveResponse.body.error.message).toEqual(expectedErrorMessage);
await bookingsRepositoryFixture.deleteById(booking.id);
});
it("should fail if slot reservation (10:29-11:29) starts just before existing booking (09:30-10:30) ends", async () => {
const booking = await bookingsRepositoryFixture.create(getBookingPayload(T0930, T1030));
const reserveResponse = await request(app.getHttpServer())
.post(`/v2/slots/reservations`)
.send({ eventTypeId, slotStart: T1029 })
.set(CAL_API_VERSION_HEADER, VERSION_2024_09_04)
.expect(422);
expect(reserveResponse.body.error.message).toEqual(expectedErrorMessage);
await bookingsRepositoryFixture.deleteById(booking.id);
});
it("should fail if slot reservation (09:01-10:01) ends just after existing booking (10:00-11:00) starts", async () => {
const booking = await bookingsRepositoryFixture.create(getBookingPayload(T1000, T1100));
const slotStartForEarlyOverlap = T0901;
const reserveResponse = await request(app.getHttpServer())
.post(`/v2/slots/reservations`)
.send({ eventTypeId, slotStart: slotStartForEarlyOverlap })
.set(CAL_API_VERSION_HEADER, VERSION_2024_09_04)
.expect(422);
expect(reserveResponse.body.error.message).toEqual(expectedErrorMessage);
await bookingsRepositoryFixture.deleteById(booking.id);
});
});
describe("slot does not overlap booking", () => {
it("should succeed if slot reservation (09:00-10:00) is immediately before an existing booking (10:00-11:00)", async () => {
const existingBooking = await bookingsRepositoryFixture.create(getBookingPayload(T1000, T1100));
const slotStartForNoOverlap = "2055-01-01T09:00:00.000Z";
const reserveResponse = await request(app.getHttpServer())
.post(`/v2/slots/reservations`)
.send({ eventTypeId, slotStart: slotStartForNoOverlap })
.set(CAL_API_VERSION_HEADER, VERSION_2024_09_04)
.expect(201);
expect(reserveResponse.body.data.reservationUid).toBeDefined();
await selectedSlotsRepositoryFixture.deleteByUId(reserveResponse.body.data.reservationUid);
await bookingsRepositoryFixture.deleteById(existingBooking.id);
});
it("should succeed if slot reservation (08:00-09:00) is before an existing booking (10:00-11:00)", async () => {
const existingBooking = await bookingsRepositoryFixture.create(getBookingPayload(T1000, T1100));
const slotStartForNoOverlap = "2055-01-01T08:00:00.000Z";
const reserveResponse = await request(app.getHttpServer())
.post(`/v2/slots/reservations`)
.send({ eventTypeId, slotStart: slotStartForNoOverlap })
.set(CAL_API_VERSION_HEADER, VERSION_2024_09_04)
.expect(201);
expect(reserveResponse.body.data.reservationUid).toBeDefined();
await selectedSlotsRepositoryFixture.deleteByUId(reserveResponse.body.data.reservationUid);
await bookingsRepositoryFixture.deleteById(existingBooking.id);
});
it("should succeed if slot reservation (11:00-12:00) is immediately after an existing booking (10:00-11:00)", async () => {
const existingBooking = await bookingsRepositoryFixture.create(getBookingPayload(T1000, T1100));
const slotStartForNoOverlap = T1100;
const reserveResponse = await request(app.getHttpServer())
.post(`/v2/slots/reservations`)
.send({ eventTypeId, slotStart: slotStartForNoOverlap })
.set(CAL_API_VERSION_HEADER, VERSION_2024_09_04)
.expect(201);
expect(reserveResponse.body.data.reservationUid).toBeDefined();
await selectedSlotsRepositoryFixture.deleteByUId(reserveResponse.body.data.reservationUid);
await bookingsRepositoryFixture.deleteById(existingBooking.id);
});
it("should succeed if slot reservation (12:00-13:00) is after an existing booking (10:00-11:00)", async () => {
const existingBooking = await bookingsRepositoryFixture.create(getBookingPayload(T1000, T1100));
const slotStartForNoOverlap = T1200;
const reserveResponse = await request(app.getHttpServer())
.post(`/v2/slots/reservations`)
.send({ eventTypeId, slotStart: slotStartForNoOverlap })
.set(CAL_API_VERSION_HEADER, VERSION_2024_09_04)
.expect(201);
expect(reserveResponse.body.data.reservationUid).toBeDefined();
await selectedSlotsRepositoryFixture.deleteByUId(reserveResponse.body.data.reservationUid);
await bookingsRepositoryFixture.deleteById(existingBooking.id);
});
});
});
afterAll(async () => {
await userRepositoryFixture.deleteByEmail(user.email);
await userRepositoryFixture.deleteByEmail(oooTestUserEmail);
@@ -19,7 +19,7 @@ import { z } from "zod";
import { getAvailableSlots } from "@calcom/platform-libraries/slots";
import { GetSlotsInput_2024_09_04, ReserveSlotInput_2024_09_04 } from "@calcom/platform-types";
import { EventType } from "@calcom/prisma/client";
import { Booking, EventType } from "@calcom/prisma/client";
const eventTypeMetadataSchema = z
.object({
@@ -109,9 +109,10 @@ export class SlotsService_2024_09_04 {
throw new BadRequestException("Invalid end date");
}
const booking = await this.slotsRepository.getBookingWithAttendeesByEventTypeIdAndStart(
const booking = await this.slotsRepository.findActiveOverlappingBooking(
input.eventTypeId,
startDate.toJSDate()
startDate.toJSDate(),
endDate.toJSDate()
);
if (eventType.seatsPerTimeSlot) {
@@ -258,9 +259,10 @@ export class SlotsService_2024_09_04 {
throw new BadRequestException("Invalid end date");
}
const booking = await this.slotsRepository.getBookingWithAttendeesByEventTypeIdAndStart(
const booking = await this.slotsRepository.findActiveOverlappingBooking(
input.eventTypeId,
startDate.toJSDate()
startDate.toJSDate(),
endDate.toJSDate()
);
if (eventType.seatsPerTimeSlot) {
@@ -12,10 +12,23 @@ export class SlotsRepository_2024_09_04 {
return this.dbRead.prisma.selectedSlots.findFirst({ where: { uid } });
}
async getBookingWithAttendeesByEventTypeIdAndStart(eventTypeId: number, startTime: Date) {
async findActiveOverlappingBooking(eventTypeId: number, slotStartTime: Date, slotEndTime: Date) {
return this.dbRead.prisma.booking.findFirst({
where: { eventTypeId, startTime },
select: { attendees: true },
where: {
eventTypeId,
startTime: {
// note(Lauris): booking starts before the potential slot reservation ends.
lt: slotEndTime,
},
endTime: {
// note(Lauris): booking ends after the potential slot reservation begins.
gt: slotStartTime,
},
status: {
in: ["ACCEPTED", "PENDING", "AWAITING_HOST"],
},
},
select: { attendees: true, status: true },
});
}
@@ -85,11 +85,13 @@ describe("Organizations Event Types Endpoints", () => {
teamMember1 = await userRepositoryFixture.create({
email: teammate1Email,
username: teammate1Email,
name: "alice",
});
teamMember2 = await userRepositoryFixture.create({
email: teammate2Email,
username: teammate2Email,
name: "bob",
});
falseTestUser = await userRepositoryFixture.create({
@@ -403,6 +405,21 @@ describe("Organizations Event Types Endpoints", () => {
const responseTeamEvent = responseBody.data.find((event) => event.teamId === team.id);
expect(responseTeamEvent).toBeDefined();
expect(responseTeamEvent?.hosts).toEqual([
{
userId: teamMember1.id,
name: teamMember1.name,
username: teamMember1.username,
avatarUrl: teamMember1.avatarUrl,
},
{
userId: teamMember2.id,
name: teamMember2.name,
username: teamMember2.username,
avatarUrl: teamMember2.avatarUrl,
},
]);
if (!responseTeamEvent) {
throw new Error("Team event not found");
}
+6 -1
View File
@@ -19060,6 +19060,10 @@
"type": "string",
"example": "John Doe"
},
"username": {
"type": "string",
"example": "john-doe"
},
"avatarUrl": {
"type": "string",
"nullable": true,
@@ -19068,7 +19072,8 @@
},
"required": [
"userId",
"name"
"name",
"username"
]
},
"EventTypeTeam": {
@@ -10,8 +10,6 @@ import React, { useEffect, useState, useMemo } from "react";
import { checkAdminOrOwner } from "@calcom/features/auth/lib/checkAdminOrOwner";
import { useOrgBranding } from "@calcom/features/ee/organizations/context/provider";
import type { OrganizationBranding } from "@calcom/features/ee/organizations/context/provider";
import type { AppFlags } from "@calcom/features/flags/config";
import { useIsFeatureEnabledForTeam } from "@calcom/features/flags/hooks/useIsFeatureEnabledForTeam";
import Shell from "@calcom/features/shell/Shell";
import { HOSTED_CAL_FEATURES, IS_CALCOM, WEBAPP_URL } from "@calcom/lib/constants";
import { getPlaceholderAvatar } from "@calcom/lib/defaultAvatarImage";
@@ -29,8 +27,6 @@ import type { VerticalTabItemProps } from "@calcom/ui/components/navigation";
import { VerticalTabItem } from "@calcom/ui/components/navigation";
import { Skeleton } from "@calcom/ui/components/skeleton";
type TeamFeatures = Record<number, Record<keyof AppFlags, boolean>> | null;
const getTabs = (orgBranding: OrganizationBranding | null) => {
const tabs: VerticalTabItemProps[] = [
{
@@ -276,7 +272,6 @@ interface SettingsSidebarContainerProps {
className?: string;
navigationIsOpenedOnMobile?: boolean;
bannersHeight?: number;
teamFeatures?: TeamFeatures;
}
const TeamListCollapsible = () => {
@@ -443,7 +438,6 @@ const SettingsSidebarContainer = ({
className = "",
navigationIsOpenedOnMobile,
bannersHeight,
teamFeatures,
}: SettingsSidebarContainerProps) => {
const searchParams = useCompatSearchParams();
const orgBranding = useOrgBranding();
@@ -455,15 +449,11 @@ const SettingsSidebarContainer = ({
}[]
>();
const session = useSession();
const isDelegationCredentialEnabled = useIsFeatureEnabledForTeam({
teamFeatures,
teamId: session.data?.user?.org?.id,
feature: "delegation-credential",
const { data } = trpc.viewer.delegationCredential.check.useQuery(undefined, {
enabled: !!session.data?.user?.org,
});
const tabsWithPermissions = useTabs({
isDelegationCredentialEnabled,
isDelegationCredentialEnabled: data?.hasDelegationCredential ?? false,
});
const { data: otherTeams } = trpc.viewer.organizations.listOtherTeams.useQuery(undefined, {
@@ -737,10 +727,9 @@ const MobileSettingsContainer = (props: { onSideContainerOpen?: () => void }) =>
export type SettingsLayoutProps = {
children: React.ReactNode;
containerClassName?: string;
teamFeatures?: TeamFeatures;
} & ComponentProps<typeof Shell>;
export default function SettingsLayoutAppDirClient({ children, teamFeatures, ...rest }: SettingsLayoutProps) {
export default function SettingsLayoutAppDirClient({ children, ...rest }: SettingsLayoutProps) {
const pathname = usePathname();
const state = useState(false);
const [sideContainerOpen, setSideContainerOpen] = state;
@@ -772,7 +761,6 @@ export default function SettingsLayoutAppDirClient({ children, teamFeatures, ...
<SidebarContainerElement
sideContainerOpen={sideContainerOpen}
setSideContainerOpen={setSideContainerOpen}
teamFeatures={teamFeatures}
/>
}
drawerState={state}
@@ -790,18 +778,10 @@ export default function SettingsLayoutAppDirClient({ children, teamFeatures, ...
);
}
type SidebarContainerElementProps = {
sideContainerOpen: boolean;
bannersHeight?: number;
setSideContainerOpen: React.Dispatch<React.SetStateAction<boolean>>;
teamFeatures?: TeamFeatures;
};
const SidebarContainerElement = ({
sideContainerOpen,
bannersHeight,
setSideContainerOpen,
teamFeatures,
}: SidebarContainerElementProps) => {
const { t } = useLocale();
return (
@@ -817,8 +797,13 @@ const SidebarContainerElement = ({
<SettingsSidebarContainer
navigationIsOpenedOnMobile={sideContainerOpen}
bannersHeight={bannersHeight}
teamFeatures={teamFeatures}
/>
</>
);
};
type SidebarContainerElementProps = {
sideContainerOpen: boolean;
bannersHeight?: number;
setSideContainerOpen: React.Dispatch<React.SetStateAction<boolean>>;
};
@@ -3,8 +3,6 @@ import { redirect } from "next/navigation";
import React from "react";
import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
import type { AppFlags } from "@calcom/features/flags/config";
import { FeaturesRepository } from "@calcom/features/flags/features.repository";
import { buildLegacyRequest } from "@lib/buildLegacyCtx";
@@ -18,22 +16,9 @@ export default async function SettingsLayoutAppDir(props: SettingsLayoutProps) {
return redirect("/auth/login");
}
let teamFeatures: Record<number, Record<keyof AppFlags, boolean>> | null = null;
// For now we only grab organization features but it would be nice to fetch these on the server side for specific team feature flags
if (session?.user.org) {
const featuresRepository = new FeaturesRepository();
const features = await featuresRepository.getTeamFeatures(session.user.org.id);
if (features) {
teamFeatures = {
[session.user.org.id]: features,
};
}
}
return (
<>
<SettingsLayoutAppDirClient {...props} teamFeatures={teamFeatures} />
<SettingsLayoutAppDirClient {...props} />
</>
);
}
@@ -1,11 +1,5 @@
import { createRouterCaller } from "app/_trpc/context";
import { _generateMetadata } from "app/_utils";
import { attributesRouter } from "@calcom/trpc/server/routers/viewer/attributes/_router";
import { viewerOrganizationsRouter } from "@calcom/trpc/server/routers/viewer/organizations/_router";
import { MembersView } from "~/members/members-view";
export const generateMetadata = async ({ params }: { params: Promise<{ id: string }> }) =>
await _generateMetadata(
(t) => t("organization_members"),
@@ -15,20 +9,4 @@ export const generateMetadata = async ({ params }: { params: Promise<{ id: strin
`/settings/organizations/${(await params).id}/members`
);
const ServerPageWrapper = async () => {
const [orgCaller, attributesCaller] = await Promise.all([
createRouterCaller(viewerOrganizationsRouter),
createRouterCaller(attributesRouter),
]);
const [org, teams, facetedTeamValues, attributes] = await Promise.all([
orgCaller.listCurrent(),
orgCaller.getTeams(),
orgCaller.getFacetedValues(),
attributesCaller.list(),
]);
return (
<MembersView org={org} teams={teams} facetedTeamValues={facetedTeamValues} attributes={attributes} />
);
};
export default ServerPageWrapper;
export { default } from "../../members/page";
@@ -0,0 +1,7 @@
"use server";
import { revalidateTag } from "next/cache";
export async function revalidateAttributesList() {
revalidateTag("viewer.attributes.list");
}
@@ -1,7 +1,8 @@
import { createRouterCaller } from "app/_trpc/context";
import { _generateMetadata } from "app/_utils";
import { unstable_cache } from "next/cache";
import { attributesRouter } from "@calcom/trpc/server/routers/viewer/attributes/_router";
import { AttributeRepository } from "@calcom/lib/server/repository/attribute";
import { viewerOrganizationsRouter } from "@calcom/trpc/server/routers/viewer/organizations/_router";
import { MembersView } from "~/members/members-view";
@@ -15,18 +16,22 @@ export const generateMetadata = async () =>
"/settings/organizations/members"
);
const getCachedAttributes = unstable_cache(
async (orgId: number) => {
return await AttributeRepository.findAllByOrgIdWithOptions({ orgId });
},
undefined,
{ revalidate: 3600, tags: ["viewer.attributes.list"] } // Cache for 1 hour
);
const Page = async () => {
const [orgCaller, attributesCaller] = await Promise.all([
createRouterCaller(viewerOrganizationsRouter),
createRouterCaller(attributesRouter),
]);
const [org, teams, facetedTeamValues, attributes] = await Promise.all([
const orgCaller = await createRouterCaller(viewerOrganizationsRouter);
const [org, teams, facetedTeamValues] = await Promise.all([
orgCaller.listCurrent(),
orgCaller.getTeams(),
orgCaller.getFacetedValues(),
attributesCaller.list(),
]);
const attributes = await getCachedAttributes(org.id);
return (
<MembersView org={org} teams={teams} facetedTeamValues={facetedTeamValues} attributes={attributes} />
);
@@ -941,7 +941,7 @@ const Attendee = (attendeeProps: AttendeeProps & NoShowProps) => {
const noShowMutation = trpc.viewer.loggedInViewerRouter.markNoShow.useMutation({
onSuccess: async (data) => {
showToast(data.message, "success");
utils.viewer.bookings.invalidate();
await utils.viewer.bookings.invalidate();
},
onError: (err) => {
showToast(err.message, "error");
@@ -1030,9 +1030,11 @@ const GroupedAttendees = (groupedAttendeeProps: GroupedAttendeeProps) => {
};
});
const { t } = useLocale();
const utils = trpc.useUtils();
const noShowMutation = trpc.viewer.loggedInViewerRouter.markNoShow.useMutation({
onSuccess: async (data) => {
showToast(t(data.message), "success");
await utils.viewer.bookings.invalidate();
},
onError: (err) => {
showToast(err.message, "error");
@@ -1133,6 +1135,7 @@ const NoShowAttendeesDialog = ({
}))
);
const utils = trpc.useUtils();
const noShowMutation = trpc.viewer.loggedInViewerRouter.markNoShow.useMutation({
onSuccess: async (data) => {
const newValue = data.attendees[0];
@@ -1142,6 +1145,7 @@ const NoShowAttendeesDialog = ({
)
);
showToast(t(data.message), "success");
await utils.viewer.bookings.invalidate();
},
onError: (err) => {
showToast(err.message, "error");
@@ -1172,7 +1176,7 @@ const NoShowAttendeesDialog = ({
</div>
</form>
))}
<DialogFooter>
<DialogFooter noSticky>
<DialogClose>{t("done")}</DialogClose>
</DialogFooter>
</DialogContent>
@@ -91,6 +91,11 @@ export function NotificationSoundHandler() {
// Don't automatically initialize - wait for user interaction
return () => {
stopSound();
if (audioContextRef.current && audioContextRef.current.state !== "closed") {
audioContextRef.current.close();
}
audioContextRef.current = null;
audioBufferRef.current = null;
};
}, []);
@@ -4,6 +4,7 @@ import { URLSearchParams } from "url";
import { z } from "zod";
import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
import { getFullName } from "@calcom/features/form-builder/utils";
import { buildEventUrlFromBooking } from "@calcom/lib/bookings/buildEventUrlFromBooking";
import { getDefaultEvent } from "@calcom/lib/defaultEvents";
import { getSafe } from "@calcom/lib/getSafe";
@@ -59,6 +60,7 @@ export async function getServerSideProps(context: GetServerSidePropsContext) {
slug: true,
allowReschedulingPastBookings: true,
disableRescheduling: true,
allowReschedulingCancelledBookings: true,
team: {
select: {
parentId: true,
@@ -109,18 +111,31 @@ export async function getServerSideProps(context: GetServerSidePropsContext) {
profileEnrichedBookingUser: enrichedBookingUser,
});
const isForcedRescheduleForCancelledBooking = allowRescheduleForCancelledBooking;
// If booking is already REJECTED, we can't reschedule this booking. Take the user to the booking page which would show it's correct status and other details.
// If the booking is CANCELLED and allowRescheduleForCancelledBooking is false, we redirect the user to the original event link.
// A booking that has been rescheduled to a new booking will also have a status of CANCELLED
const isDisabledRescheduling = booking.eventType?.disableRescheduling;
if (
isDisabledRescheduling ||
(!allowRescheduleForCancelledBooking &&
(booking.status === BookingStatus.CANCELLED || booking.status === BookingStatus.REJECTED))
) {
// This comes from query param and thus is considered forced
const canRescheduleCancelledBooking =
isForcedRescheduleForCancelledBooking || booking.eventType?.allowReschedulingCancelledBookings;
const isNonRescheduleableBooking =
booking.status === BookingStatus.CANCELLED || booking.status === BookingStatus.REJECTED;
if (isDisabledRescheduling) {
return {
redirect: {
destination: booking.status === BookingStatus.CANCELLED ? eventUrl : `/booking/${uid}`,
destination: `/booking/${uid}`,
permanent: false,
},
};
}
if (isNonRescheduleableBooking) {
const canReschedule = booking.status === BookingStatus.CANCELLED && canRescheduleCancelledBooking;
return {
redirect: {
destination: canReschedule ? eventUrl : `/booking/${uid}`,
permanent: false,
},
};
@@ -139,7 +154,7 @@ export async function getServerSideProps(context: GetServerSidePropsContext) {
if (isBookingInPast && !eventType.allowReschedulingPastBookings) {
const destinationUrlSearchParams = new URLSearchParams();
const responses = bookingSeat ? getSafe<string>(bookingSeat.data, ["responses"]) : booking.responses;
const name = getSafe<string>(responses, ["name"]);
const name = getFullName(getSafe<string | { firstName: string; lastName?: string }>(responses, ["name"]));
const email = getSafe<string>(responses, ["email"]);
if (name) destinationUrlSearchParams.set("name", name);
@@ -21,6 +21,10 @@ const paramsSchema = z.object({
slug: z.string().transform((s) => slugify(s)),
});
function hasApiV2RouteInEnv() {
return Boolean(process.env.NEXT_PUBLIC_API_V2_URL);
}
export const getServerSideProps = async (context: GetServerSidePropsContext) => {
const { req, params, query } = context;
const session = await getServerSession({ req });
@@ -67,7 +71,11 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) =>
let booking: GetBookingType | null = null;
if (rescheduleUid) {
booking = await getBookingForReschedule(`${rescheduleUid}`, session?.user?.id);
if (booking?.status === BookingStatus.CANCELLED && !allowRescheduleForCancelledBooking) {
if (
booking?.status === BookingStatus.CANCELLED &&
!allowRescheduleForCancelledBooking &&
!eventData.allowReschedulingCancelledBookings
) {
return {
redirect: {
permanent: false,
@@ -115,7 +123,8 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) =>
const allowSEOIndexing = organizationSettings?.allowSEOIndexing ?? false;
const featureRepo = new FeaturesRepository();
const useApiV2 = await featureRepo.checkIfTeamHasFeature(team.id, "use-api-v2-for-team-slots");
const teamHasApiV2Route = await featureRepo.checkIfTeamHasFeature(team.id, "use-api-v2-for-team-slots");
const useApiV2 = teamHasApiV2Route && hasApiV2RouteInEnv();
return {
props: {
@@ -207,6 +216,7 @@ const getTeamWithEventsData = async (
hidden: true,
disableCancelling: true,
disableRescheduling: true,
allowReschedulingCancelledBookings: true,
interfaceLanguage: true,
hosts: {
take: 3,
+36 -9
View File
@@ -61,7 +61,16 @@ const BUTTONS = {
},
};
export const CalAiTranscribe = () => {
export type DailyCustomTrayButtonVisualState = "default" | "sidebar-open" | "active";
export interface DailyCustomTrayButton {
iconPath: string;
iconPathDarkMode?: string;
label: string;
tooltip: string;
visualState?: DailyCustomTrayButtonVisualState;
}
export const CalAiTranscribe = ({ showRecordingButton }: { showRecordingButton: boolean }) => {
const daily = useDaily();
const { t } = useLocale();
@@ -73,6 +82,23 @@ export const CalAiTranscribe = () => {
const transcription = useTranscription();
const recording = useRecording();
const updateCustomTrayButtons = ({
recording,
transcription,
}: {
recording: DailyCustomTrayButton;
transcription: DailyCustomTrayButton;
}) => {
daily?.updateCustomTrayButtons({
...(showRecordingButton
? {
recording,
}
: {}),
transcription,
});
};
useDailyEvent(
"app-message",
useCallback((ev) => {
@@ -82,28 +108,28 @@ export const CalAiTranscribe = () => {
);
useDailyEvent("transcription-started", (ev) => {
daily?.updateCustomTrayButtons({
updateCustomTrayButtons({
recording: recording?.isRecording ? BUTTONS.STOP_RECORDING : BUTTONS.START_RECORDING,
transcription: BUTTONS.STOP_TRANSCRIPTION,
});
});
useDailyEvent("recording-started", (ev) => {
daily?.updateCustomTrayButtons({
updateCustomTrayButtons({
recording: BUTTONS.STOP_RECORDING,
transcription: transcription?.isTranscribing ? BUTTONS.STOP_TRANSCRIPTION : BUTTONS.START_TRANSCRIPTION,
});
});
useDailyEvent("transcription-stopped", (ev) => {
daily?.updateCustomTrayButtons({
updateCustomTrayButtons({
recording: recording?.isRecording ? BUTTONS.STOP_RECORDING : BUTTONS.START_RECORDING,
transcription: BUTTONS.START_TRANSCRIPTION,
});
});
useDailyEvent("recording-stopped", (ev) => {
daily?.updateCustomTrayButtons({
updateCustomTrayButtons({
recording: BUTTONS.START_RECORDING,
transcription: transcription?.isTranscribing ? BUTTONS.STOP_TRANSCRIPTION : BUTTONS.START_TRANSCRIPTION,
});
@@ -111,7 +137,7 @@ export const CalAiTranscribe = () => {
const toggleRecording = async () => {
if (recording?.isRecording) {
daily?.updateCustomTrayButtons({
updateCustomTrayButtons({
recording: BUTTONS.WAIT_FOR_RECORDING_TO_STOP,
transcription: transcription?.isTranscribing
? BUTTONS.STOP_TRANSCRIPTION
@@ -119,7 +145,7 @@ export const CalAiTranscribe = () => {
});
await daily?.stopRecording();
} else {
daily?.updateCustomTrayButtons({
updateCustomTrayButtons({
recording: BUTTONS.WAIT_FOR_RECORDING_TO_START,
transcription: transcription?.isTranscribing
? BUTTONS.STOP_TRANSCRIPTION
@@ -135,16 +161,17 @@ export const CalAiTranscribe = () => {
const toggleTranscription = async () => {
if (transcription?.isTranscribing) {
daily?.updateCustomTrayButtons({
updateCustomTrayButtons({
recording: recording?.isRecording ? BUTTONS.STOP_RECORDING : BUTTONS.START_RECORDING,
transcription: BUTTONS.WAIT_FOR_TRANSCRIPTION_TO_STOP,
});
daily?.stopTranscription();
} else {
daily?.updateCustomTrayButtons({
updateCustomTrayButtons({
recording: recording?.isRecording ? BUTTONS.STOP_RECORDING : BUTTONS.START_RECORDING,
transcription: BUTTONS.WAIT_FOR_TRANSCRIPTION_TO_START,
});
daily?.startTranscription();
}
};
@@ -106,7 +106,7 @@ export default function JoinCall(props: PageProps) {
<div
className="mx-auto hidden sm:block"
style={{ zIndex: 2, left: "30%", position: "absolute", bottom: 100, width: "auto" }}>
<CalAiTranscribe />
<CalAiTranscribe showRecordingButton={showRecordingButton} />
</div>
<div style={{ zIndex: 2, position: "relative" }}>
{calVideoLogo ? (
+7 -8
View File
@@ -48,10 +48,6 @@ if (!process.env.EMAIL_FROM) {
if (!process.env.NEXTAUTH_URL) throw new Error("Please set NEXTAUTH_URL");
if (!process.env.NEXT_PUBLIC_API_V2_URL) {
console.error("Please set NEXT_PUBLIC_API_V2_URL");
}
const getHttpsUrl = (url) => {
if (!url) return url;
if (url.startsWith("http://")) {
@@ -335,10 +331,6 @@ const nextConfig = {
].filter(Boolean);
let afterFiles = [
{
source: "/api/v2/:path*",
destination: `${process.env.NEXT_PUBLIC_API_V2_URL}/:path*`,
},
{
source: "/org/:slug",
destination: "/team/:slug",
@@ -375,6 +367,13 @@ const nextConfig = {
}, */
];
if (Boolean(process.env.NEXT_PUBLIC_API_V2_URL)) {
afterFiles.push({
source: "/api/v2/:path*",
destination: `${process.env.NEXT_PUBLIC_API_V2_URL}/:path*`,
});
}
return {
beforeFiles,
afterFiles,
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@calcom/web",
"version": "5.3.7",
"version": "5.3.9",
"private": true,
"scripts": {
"analyze": "ANALYZE=true next build",
+2 -2
View File
@@ -252,8 +252,8 @@ test.describe("pro user", () => {
await page.goto(`/reschedule/${bookingCancelledId}`);
// Should be redirected to the original event link
await expect(page).toHaveURL(new RegExp(`/${pro.username}/${eventSlug}`));
expect(page.url()).not.toContain("rescheduleUid");
await expect(cancelledHeadline).toBeVisible();
});
test("can book an event that requires confirmation and then that booking can be accepted by organizer", async ({
+4
View File
@@ -172,3 +172,7 @@ export async function listSegments(page: Page): Promise<string[]> {
await page.keyboard.press("Escape");
return segments;
}
export function locateSelectedSegmentName(page: Page, expectedName: string) {
return page.locator('[data-testid="filter-segment-select"]').filter({ hasText: expectedName });
}
+152
View File
@@ -10,6 +10,7 @@ import {
listSegments,
clearFilters,
openSegmentSubmenu,
locateSelectedSegmentName,
getByTableColumnText,
} from "./filter-helpers";
import { test } from "./lib/fixtures";
@@ -126,6 +127,157 @@ test.describe("Filter Segment Functionality", () => {
await deleteSegment(page, segmentName);
});
test("Filter segment preferences persist in database across page reloads", async ({
page,
users,
orgs,
}) => {
const orgOwner = await users.create(undefined, {
hasTeam: true,
isOrg: true,
});
const { team: org } = await orgOwner.getOrgMembership();
const memberUser = await users.create({
roleInOrganization: MembershipRole.MEMBER,
organizationId: org.id,
username: "member-user",
});
const adminUser = await users.create({
roleInOrganization: MembershipRole.ADMIN,
organizationId: org.id,
username: "admin-user",
});
await orgOwner.apiLogin();
await page.goto(`/settings/organizations/${org.slug}/members`);
const dataTable = page.getByTestId("user-list-data-table");
await expect(dataTable).toBeVisible();
await applySelectFilter(page, "role", "admin");
const segmentName = "Admin Only";
await createFilterSegment(page, segmentName);
await expect(getByTableColumnText(page, "member", adminUser.email)).toBeVisible();
await expect(getByTableColumnText(page, "member", memberUser.email)).toBeHidden();
await page.goto(`/settings/organizations/${org.slug}/members`);
await expect(locateSelectedSegmentName(page, segmentName)).toBeVisible();
await expect(dataTable).toBeVisible();
await expect(getByTableColumnText(page, "member", adminUser.email)).toBeVisible();
await expect(getByTableColumnText(page, "member", memberUser.email)).toBeHidden();
await deleteSegment(page, segmentName);
});
test("Filter segment preferences persist across different browser sessions", async ({
browser,
page,
users,
orgs,
}) => {
const orgOwner = await users.create(undefined, {
hasTeam: true,
isOrg: true,
});
const { team: org } = await orgOwner.getOrgMembership();
const adminUser = await users.create({
roleInOrganization: MembershipRole.ADMIN,
organizationId: org.id,
username: "admin-user-session",
});
await orgOwner.apiLogin();
await page.goto(`/settings/organizations/${org.slug}/members`);
await expect(page.getByTestId("user-list-data-table")).toBeVisible();
await applySelectFilter(page, "role", "admin");
const segmentName = "Cross Session Admins";
await createFilterSegment(page, segmentName);
const [secondContext, secondPage] = await orgOwner.apiLoginOnNewBrowser(browser);
await secondPage.goto(`/settings/organizations/${org.slug}/members`);
const dataTable = secondPage.getByTestId("user-list-data-table");
await expect(dataTable).toBeVisible();
await expect(locateSelectedSegmentName(secondPage, segmentName)).toBeVisible();
await expect(getByTableColumnText(secondPage, "member", adminUser.email)).toBeVisible();
await deleteSegment(secondPage, segmentName);
await secondContext.close();
});
test("Team segment preferences persist in database", async ({ page, users, prisma }) => {
const orgOwner = await users.create(undefined, {
hasTeam: true,
isOrg: true,
hasSubteam: true,
});
const { team: org } = await orgOwner.getOrgMembership();
const { team: subTeam } = await orgOwner.getFirstTeamMembership();
const adminUser = await users.create({
roleInOrganization: MembershipRole.ADMIN,
organizationId: org.id,
username: "team-admin",
});
await orgOwner.apiLogin();
await page.goto(`/settings/organizations/${org.slug}/members`);
const dataTable = page.getByTestId("user-list-data-table");
await expect(dataTable).toBeVisible();
await applySelectFilter(page, "role", "admin");
const segmentName = "Team Admin";
await createFilterSegment(page, segmentName, {
teamScope: true,
teamName: subTeam.name,
});
await page.goto(`/settings/organizations/${org.slug}/members`);
await expect(dataTable).toBeVisible();
await expect(locateSelectedSegmentName(page, segmentName)).toBeVisible();
await expect(getByTableColumnText(page, "member", adminUser.email)).toBeVisible();
await deleteSegment(page, segmentName);
});
test("Filter segment preferences are isolated per table identifier", async ({ page, users, orgs }) => {
const orgOwner = await users.create(undefined, {
hasTeam: true,
isOrg: true,
});
const { team: org } = await orgOwner.getOrgMembership();
const adminUser = await users.create({
roleInOrganization: MembershipRole.ADMIN,
organizationId: org.id,
username: "admin-table-isolation",
});
await orgOwner.apiLogin();
await page.goto(`/settings/organizations/${org.slug}/members`);
await expect(page.getByTestId("user-list-data-table")).toBeVisible();
await applySelectFilter(page, "role", "admin");
const membersSegmentName = "Members Table Segment";
await createFilterSegment(page, membersSegmentName);
await page.goto(`/settings/organizations/${org.slug}/members`);
await expect(page.getByTestId("user-list-data-table")).toBeVisible();
await expect(locateSelectedSegmentName(page, membersSegmentName)).toBeVisible();
await expect(getByTableColumnText(page, "member", adminUser.email)).toBeVisible();
await deleteSegment(page, membersSegmentName);
});
test("Admin can create and use team scope filter segments", async ({ page, users, prisma }) => {
const orgOwner = await users.create(undefined, {
hasTeam: true,
+56
View File
@@ -389,6 +389,62 @@ test.describe("Reschedule Tests", async () => {
// It is tested in teams.e2e.ts
});
test("Should redirect to cancelled page when allowReschedulingCancelledBookings is false (default)", async ({
page,
users,
bookings,
}) => {
const user = await users.create();
const eventType = user.eventTypes[0];
await prisma.eventType.update({
where: {
id: eventType.id,
},
data: {
allowReschedulingCancelledBookings: false,
},
});
const booking = await bookings.create(user.id, user.username, eventType.id, {
status: BookingStatus.CANCELLED,
});
await page.goto(`/reschedule/${booking.uid}`);
expect(page.url()).not.toContain("rescheduleUid");
await expect(page.locator('[data-testid="cancelled-headline"]')).toBeVisible();
});
test("Should allow rescheduling when allowReschedulingCancelledBookings is true", async ({
page,
users,
bookings,
}) => {
const user = await users.create();
const eventType = user.eventTypes[0];
await prisma.eventType.update({
where: {
id: eventType.id,
},
data: {
allowReschedulingCancelledBookings: true,
},
});
const booking = await bookings.create(user.id, user.username, eventType.id, {
status: BookingStatus.CANCELLED,
});
await page.goto(`/reschedule/${booking.uid}`);
await selectFirstAvailableTimeSlotNextMonth(page);
await bookTimeSlot(page);
await expect(page.locator("[data-testid=success-page]")).toBeVisible();
});
test.describe("Organization", () => {
test("Booking should be rescheduleable for a user that was moved to an organization through org domain", async ({
users,
+12 -12
View File
@@ -25,18 +25,7 @@ self.addEventListener("push", async (event) => {
});
existingNotifications.forEach((notification) => {
const options = {
body: notification.body,
icon: notification.icon,
badge: notification.badge,
data: notification.data,
silent: notification.silent,
vibrate: notification.vibrate,
requireInteraction: notification.requireInteraction,
tag: notification.tag,
};
self.registration.showNotification(notification.title, options);
notification.close();
});
// Special handling for instant meetings
@@ -87,6 +76,8 @@ self.addEventListener("notificationclick", (event) => {
});
});
};
event.waitUntil(stopSound());
}
if (!event.action) {
@@ -111,4 +102,13 @@ self.addEventListener('install', (event) => {
self.addEventListener('activate', (event) => {
console.log('Service Worker activated.');
event.waitUntil(
(async () => {
const notifications = await self.registration.getNotifications();
notifications.forEach(notification => notification.close());
return self.clients.claim();
})()
);
});
@@ -44,6 +44,10 @@
"event_cancelled_subject": "تم الإلغاء: {{title}} في {{date}}",
"event_reassigned_subject": "تم إعادة تعيين: {{title}} في {{date}}",
"event_request_declined": "تم رفض طلب الحدث الخاص بك",
"customize_calvideo_settings": "تخصيص إعدادات Cal Video",
"calvideo_settings_description": "قم بتكوين تفضيلات اجتماعات الفيديو بما في ذلك أذونات التسجيل للمضيفين والحاضرين.",
"disable_recording_for_guests": "تعطيل التسجيل للضيوف",
"disable_recording_for_organizer": "تعطيل التسجيل للمنظم",
"event_request_declined_recurring": "تم رفض طلب الحدث المتكرر الخاص بك",
"event_request_cancelled": "تم إلغاء حدثك المُجَدْوَل",
"event_request_reassigned": "تم إعادة تعيين الحدث المجدول الخاص بك",
@@ -1599,6 +1603,7 @@
"team_url": "رابط الفريق",
"team_members": "أعضاء الفريق",
"more": "المزيد",
"and_count_more": "و {{count}} أكثر",
"more_page_footer": "نعتبر تطبيق الهاتف المحمول امتداداً لتطبيق الويب، لكن يرجى العودة لتطبيق الويب إذا كنت تقوم بأي إجراءات معقدة.",
"workflow_example_1": "إرسال رسائل قصيرة للحضور للتذكير قبل 24 ساعة من بدء الحدث",
"workflow_example_2": "إرسال رسالة قصيرة مخصصة للحضور عند إعادة جدولة الحدث",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "رقم الهاتف (إشعارات الرسائل النصية)",
"attendee_email_variable": "اسم الحاضر",
"attendee_email_info": "البريد الإلكتروني للشخص الحجز",
"booking_uid": "معرف الحجز",
"kbar_search_placeholder": "اكتب أمرًا أو بحثًا...",
"invalid_credential": "لا! يبدو أن الصلاحية انتهت أو تم إلغاؤها. يرجى إعادة التثبيت مرة أخرى.",
"invalid_credential_action": "إعادة تثبيت التطبيق",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "اطرح سؤالاً",
"identifier": "المُعرِّف",
"duplicate_email": "البريد الإلكتروني مكرر",
"enter_redirect_url_on_exit_description": "أدخل عنوان URL للتوجيه حيث سيتم إرسال الحاضر بمجرد مغادرته للاجتماع.",
"booking_with_payment_cancelled": "لم يعد الدفع لهذا الحدث ممكنًا",
"booking_with_payment_cancelled_already_paid": "استرداد المبلغ المدفوع لهذا الحجز قيد التنفيذ.",
"booking_with_payment_cancelled_refunded": "تم استرداد مبلغ هذا الحجز.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "موعد الحجز",
"routing_form_insights_submitted_at": "تاريخ التقديم",
"copy_redirect_url": "نسخ عنوان URL لإعادة التوجيه",
"redirect_url_on_exit": "عنوان URL للتوجيه عند الخروج",
"total_bookings_per_period": "إجمالي الحجوزات لكل فترة",
"routed_to_per_period": "تم التوجيه إلى كل فترة",
"per_day": "لكل يوم",
@@ -3002,6 +3010,12 @@
"asc": "تصاعدي",
"desc": "تنازلي",
"verify_email_change": "تأكيد تغيير البريد الإلكتروني",
"buy_credits": "شراء رصيد",
"credits": "الرصيد",
"view_and_manage_credits": "عرض وإدارة الرصيد",
"view_and_manage_credits_description": "عرض وإدارة الرصيد لإرسال رسائل SMS. قيمة الرصيد الواحد هي 1¢ (دولار أمريكي). <0>معرفة المزيد</0>",
"buy_additional_credits": "شراء رصيد إضافي (0.01 دولار لكل رصيد)",
"overview": "نظرة عامة",
"organization_slug_taken": "الاسم المختصر للمؤسسة مستخدم بالفعل",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "لا يمكنك إنشاء مؤسسة لأنك بالفعل جزء من مؤسسة",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "تحتاج إلى إكمال عملية تأهيل المستخدم قبل إنشاء مؤسسة",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "تعذر العثور على الاسم المختصر لنشر المؤسسة",
"picklist": "قائمة الاختيار",
"most_cancelled_bookings": "الحجوزات الأكثر إلغاءً",
"interface_language": "لغة الواجهة",
"visitors_browser_language": "لغة متصفح الزائر",
"name_or_email": "الاسم أو البريد الإلكتروني",
"salesforce_round_robin_skip_fallback_to_lead_owner": "إذا لم يتم العثور على جهة اتصال، يتم الرجوع إلى مالك العميل المحتمل إذا كان موجودًا",
"credit_purchase_failed": "فشل شراء الرصيد. يرجى المحاولة مرة أخرى أو الاتصال بالدعم.",
"minimum_of_credits_required": "مطلوب 50 رصيد كحد أدنى",
"enable_delegation_credential": "تمكين بيانات اعتماد التفويض",
"enable_delegation_credential_description": "امنح Cal.com وصولاً تلقائيًا إلى تقويمات جميع أعضاء المؤسسة من خلال تمكين بيانات اعتماد التفويض.",
"disable_delegation_credential": "تعطيل بيانات اعتماد التفويض",
@@ -3165,6 +3183,20 @@
"results": "النتائج",
"view_form": "عرض النموذج",
"sms_opt_out_message": "أرسل STOP للإلغاء من رسائل SMS",
"team_credits_low_warning": "فريقك {{teamName}} على وشك نفاد الرصيد",
"user_credits_low_warning": "أنت على وشك نفاد الرصيد",
"action_required_out_of_credits": "[إجراء مطلوب] لقد نفد رصيد فريقك {{teamName}}",
"action_required_user_out_of_credits": "[إجراء مطلوب] لقد نفد رصيدك",
"low_credits_warning_message": "فريق Cal.com الخاص بك {{teamName}} على وشك نفاد الرصيد. لتجنب أي انقطاع في الخدمة، يرجى شراء رصيد إضافي. إذا نفد رصيدك، ستتوقف رسائل SMS عن الإرسال وسيتم إرسالها كرسائل بريد إلكتروني بدلاً من ذلك.",
"low_credits_warning_message_user": "حساب Cal.com الخاص بك على وشك نفاد الرصيد. لتجنب أي انقطاع في الخدمة، يرجى شراء رصيد إضافي. إذا نفد رصيدك، ستتوقف رسائل SMS عن الإرسال وسيتم إرسالها كرسائل بريد إلكتروني بدلاً من ذلك.",
"credit_limit_reached_message": "لقد نفد رصيد فريق Cal.com الخاص بك {{teamName}}. نتيجة لذلك، يتم الآن إرسال رسائل SMS عبر البريد الإلكتروني بدلاً من ذلك. لاستئناف إرسال SMS، يرجى شراء رصيد إضافي.",
"credit_limit_reached_message_user": "لقد نفدت رصيد حسابك على Cal.com. نتيجة لذلك، يتم الآن إرسال رسائل SMS عبر البريد الإلكتروني بدلاً من ذلك. لاستئناف إرسال رسائل SMS، يرجى شراء رصيد إضافي.",
"current_credit_balance": "الرصيد الحالي: {{balance}} رصيد",
"notification_about_your_booking": "إشعار بخصوص حجزك",
"monthly_credits": "الرصيد الشهري",
"total_credits": "إجمالي الرصيد: {{totalCredits}}",
"remaining_credits": "الرصيد المتبقي: {{remainingCredits}}",
"additional_credits": "رصيد إضافي",
"routing_form_next_in_queue": "{{count}} التالي في قائمة الانتظار",
"routing_form_select_members_to_email": "إرسال ردود البريد الإلكتروني إلى",
"routing_incomplete_booking_tab": "الحجوزات غير المكتملة",
@@ -3172,5 +3204,10 @@
"matching": "المطابقة",
"event_redirect": "إعادة توجيه الحدث",
"reset_form": "إعادة تعيين النموذج",
"requires_credits": "يتطلب رصيداً",
"requires_credits_tooltip": "تحتاج إلى رصيد كافٍ في حسابك لاستخدام هذه الميزة",
"available_credits": "الرصيد المتاح",
"members_affected_by_disabling_delegation_credential": "الأعضاء المتأثرون",
"no_members_affected_by_disabling_delegation_credential": "لا يوجد أعضاء متأثرون بتعطيل بيانات اعتماد التفويض",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ أضف السلاسل الجديدة أعلاه هنا ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Ləğv edildi: {{title}} {{date}} tarixində",
"event_reassigned_subject": "Yenidən təyin edildi: {{date}} tarixində {{title}}",
"event_request_declined": "Tədbir sorğunuz rədd edildi",
"customize_calvideo_settings": "Cal Video Parametrlərini Fərdiləşdirin",
"calvideo_settings_description": "Təşkilatçılar və iştirakçılar üçün yazı icazələri də daxil olmaqla video görüş tərcihlərinizi konfiqurasiya edin.",
"disable_recording_for_guests": "Qonaqlar üçün yazını deaktiv edin",
"disable_recording_for_organizer": "Təşkilatçı üçün yazını deaktiv edin",
"event_request_declined_recurring": "Təkrarlanan tədbir sorğunuz rədd edildi",
"event_request_cancelled": "Planlaşdırılmış tədbiriniz ləğv edildi",
"event_request_reassigned": "Planlaşdırılmış tədbir yenidən təyin edildi",
@@ -1599,6 +1603,7 @@
"team_url": "Komanda URL",
"team_members": "Komanda üzvləri",
"more": "Daha çox",
"and_count_more": "və {{count}} daha",
"more_page_footer": "Mobil tətbiqi veb tətbiqinin bir uzantısı kimi görürük. Hər hansı mürəkkəb əməliyyatları yerinə yetirirsinizsə, lütfən, veb tətbiqinə qayıdın.",
"workflow_example_1": "Tədbir başlamazdan 24 saat əvvəl iştirakçıya SMS xatırlatma göndərin",
"workflow_example_2": "Tədbir təxirə salındıqda iştirakçıya xüsusi SMS göndərin",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Telefon nömrəsi (SMS bildirişləri)",
"attendee_email_variable": "İştirakçının emaili",
"attendee_email_info": "Rezervasiya edən şəxsin emaili",
"booking_uid": "Rezervasiya UID",
"kbar_search_placeholder": "Əmr yazın və ya axtarın...",
"invalid_credential": "Görünür, {{appName}} üçün icazələr müddəti bitib və ya ləğv edilib.",
"invalid_credential_action": "Tətbiqi yenidən quraşdırın",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Sual əlavə et",
"identifier": "İdentifikator",
"duplicate_email": "E-poçt təkrarlanır",
"enter_redirect_url_on_exit_description": "İştirakçının görüşdən çıxdıqdan sonra yönləndiriləcəyi URL-i daxil edin.",
"booking_with_payment_cancelled": "Bu tədbir üçün ödəniş artıq mümkün deyil",
"booking_with_payment_cancelled_already_paid": "Bu rezervasiya ödənişi üçün geri ödəmə yoldadır.",
"booking_with_payment_cancelled_refunded": "Bu rezervasiya ödənişi geri ödənilib.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Rezervasiya tarixi",
"routing_form_insights_submitted_at": "Göndərilmə tarixi",
"copy_redirect_url": "Yönləndirmə URL-ni kopyala",
"redirect_url_on_exit": "Çıxışda yönləndirmə URL-i",
"total_bookings_per_period": "Dövr üzrə ümumi rezervasiyalar",
"routed_to_per_period": "Dövr üzrə yönləndirilmə",
"per_day": "Gün üzrə",
@@ -3002,6 +3010,12 @@
"asc": "Artan",
"desc": "Azalan",
"verify_email_change": "E-poçt dəyişikliyini təsdiqlə",
"buy_credits": "Kredit alın",
"credits": "Kreditlər",
"view_and_manage_credits": "Kreditləri görüntüləyin və idarə edin",
"view_and_manage_credits_description": "SMS mesajları göndərmək üçün kreditləri görüntüləyin və idarə edin. Bir kredit 1¢ (USD) dəyərindədir. <0>Daha ətraflı</0>",
"buy_additional_credits": "Əlavə kreditlər alın (kredit başına $0.01)",
"overview": "Ümumi baxış",
"organization_slug_taken": "Təşkilat slaqı artıq istifadə olunub",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Siz artıq bir təşkilatın üzvü olduğunuz üçün yeni təşkilat yarada bilməzsiniz",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Təşkilat yaratmadan əvvəl istifadəçi qeydiyyatını tamamlamalısınız",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Təşkilatı dərc etmək üçün slug tapılmadı",
"picklist": "Seçim siyahısı",
"most_cancelled_bookings": "Ən çox ləğv edilmiş rezervasiyalar",
"interface_language": "İnterfeys dili",
"visitors_browser_language": "Ziyarətçinin brauzer dili",
"name_or_email": "Ad və ya E-poçt",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Əgər əlaqə tapılmazsa, mövcud olduğu təqdirdə potensial müştəri sahibinə qayıt",
"credit_purchase_failed": "Kredit alışı uğursuz oldu. Zəhmət olmasa yenidən cəhd edin və ya dəstəklə əlaqə saxlayın.",
"minimum_of_credits_required": "Minimum 50 kredit tələb olunur",
"enable_delegation_credential": "Nümayəndəlik etimadnaməsini aktivləşdirin",
"enable_delegation_credential_description": "Nümayəndəlik etimadnaməsini aktivləşdirməklə Cal.com-a bütün təşkilat üzvlərinin təqvimlərinə avtomatik giriş imkanı verin.",
"disable_delegation_credential": "Nümayəndəlik etimadnaməsini deaktiv edin",
@@ -3165,6 +3183,20 @@
"results": "Nəticələr",
"view_form": "Formaya baxın",
"sms_opt_out_message": "SMS mesajlarından imtina etmək üçün STOP yazın",
"team_credits_low_warning": "{{teamName}} komandanızın kreditləri azalır",
"user_credits_low_warning": "Kreditləriniz azalır",
"action_required_out_of_credits": "[Tədbir Tələb Olunur] {{teamName}} komandanızın kreditləri bitdi",
"action_required_user_out_of_credits": "[Tədbir Tələb Olunur] Kreditləriniz bitdi",
"low_credits_warning_message": "Cal.com {{teamName}} komandanızın kreditləri azalır. Xidmətdə hər hansı bir fasiləni önləmək üçün, zəhmət olmasa əlavə kreditlər alın. Balansınız bitərsə, SMS mesajları göndərilməyi dayandıracaq və bunun əvəzinə e-poçt kimi göndəriləcək.",
"low_credits_warning_message_user": "Cal.com hesabınızın kreditləri azalır. Xidmətdə hər hansı bir fasiləni önləmək üçün, zəhmət olmasa əlavə kreditlər alın. Balansınız bitərsə, SMS mesajları göndərilməyi dayandıracaq və bunun əvəzinə e-poçt kimi göndəriləcək.",
"credit_limit_reached_message": "Cal.com {{teamName}} komandanızın kreditləri bitdi. Nəticədə, SMS mesajları indi e-poçt vasitəsilə göndərilir. SMS göndərməyə davam etmək üçün, zəhmət olmasa əlavə kreditlər alın.",
"credit_limit_reached_message_user": "Cal.com hesabınızın kreditləri bitib. Nəticə olaraq, SMS mesajları artıq e-poçt vasitəsilə göndərilir. SMS göndərməyə davam etmək üçün, zəhmət olmasa əlavə kreditlər alın.",
"current_credit_balance": "Cari balans: {{balance}} kredit",
"notification_about_your_booking": "Rezervasiyanız haqqında bildiriş",
"monthly_credits": "Aylıq kreditlər",
"total_credits": "Ümumi kreditlər: {{totalCredits}}",
"remaining_credits": "Qalan kreditlər: {{remainingCredits}}",
"additional_credits": "Əlavə kreditlər",
"routing_form_next_in_queue": "Növbədə {{count}} növbəti",
"routing_form_select_members_to_email": "E-poçt cavablarını göndərmək üçün üzvləri seçin",
"routing_incomplete_booking_tab": "Tamamlanmamış rezervasiyalar",
@@ -3172,5 +3204,10 @@
"matching": "Uyğunlaşdırma",
"event_redirect": "Tədbir yönləndirməsi",
"reset_form": "Formanı sıfırlayın",
"requires_credits": "Kreditlər tələb olunur",
"requires_credits_tooltip": "Bu xüsusiyyətdən istifadə etmək üçün hesabınızda kifayət qədər kredit olmalıdır",
"available_credits": "Mövcud kreditlər",
"members_affected_by_disabling_delegation_credential": "Təsir edilən üzvlər",
"no_members_affected_by_disabling_delegation_credential": "Nümayəndəlik etimadnaməsinin deaktiv edilməsindən təsirlənən üzv yoxdur",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Yeni sətirləri bura əlavə edin ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Отменено: {{title}} на {{date}}",
"event_reassigned_subject": "Преназначено: {{title}} на {{date}}",
"event_request_declined": "Вашата заявка за събитие беше отказана",
"customize_calvideo_settings": "Персонализиране на настройките на Cal Video",
"calvideo_settings_description": "Конфигурирайте предпочитания за видео срещи, включително разрешения за запис за домакини и участници.",
"disable_recording_for_guests": "Деактивиране на записа за гости",
"disable_recording_for_organizer": "Деактивиране на записа за организатора",
"event_request_declined_recurring": "Вашата заявка за повтарящо се събитие беше отказана",
"event_request_cancelled": "Вашето планирано събитие беше отменено",
"event_request_reassigned": "Планираното ви събитие беше преразпределено",
@@ -1599,6 +1603,7 @@
"team_url": "URL на екипа",
"team_members": "Членове на екипа",
"more": "Още",
"and_count_more": "и още {{count}}",
"more_page_footer": "Разглеждаме мобилното приложение като разширение на уеб приложението. Ако извършвате сложни действия, моля, върнете се към уеб приложението.",
"workflow_example_1": "Изпрати SMS напомняне 24 часа преди началото на събитието до участника",
"workflow_example_2": "Изпрати персонализиран SMS до участника, когато събитието е пренасрочено",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Телефонен номер (SMS известия)",
"attendee_email_variable": "Имейл на участник",
"attendee_email_info": "Имейлът на човека, който прави резервацията",
"booking_uid": "UID на резервацията",
"kbar_search_placeholder": "Въведете команда или търсете...",
"invalid_credential": "Изглежда, че разрешенията за {{appName}} са изтекли или са отменени.",
"invalid_credential_action": "Преинсталирайте приложението",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Добави въпрос",
"identifier": "Идентификатор",
"duplicate_email": "Имейлът е дублиран",
"enter_redirect_url_on_exit_description": "Въведете URL адрес за пренасочване, към който участникът ще бъде изпратен, след като напусне срещата.",
"booking_with_payment_cancelled": "Плащането за това събитие вече не е възможно",
"booking_with_payment_cancelled_already_paid": "Възстановяването на сумата за тази резервация е в процес на обработка.",
"booking_with_payment_cancelled_refunded": "Плащането за тази резервация е възстановено.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Резервирано за",
"routing_form_insights_submitted_at": "Изпратено на",
"copy_redirect_url": "Копирай URL за пренасочване",
"redirect_url_on_exit": "URL адрес за пренасочване при излизане",
"total_bookings_per_period": "Общо резервации за период",
"routed_to_per_period": "Пренасочени към за период",
"per_day": "За ден",
@@ -3002,6 +3010,12 @@
"asc": "Възх",
"desc": "Низх",
"verify_email_change": "Потвърди промяната на имейл",
"buy_credits": "Купете кредити",
"credits": "Кредити",
"view_and_manage_credits": "Преглед и управление на кредити",
"view_and_manage_credits_description": "Преглед и управление на кредити за изпращане на SMS съобщения. Един кредит струва 1¢ (USD). <0>Научете повече</0>",
"buy_additional_credits": "Купете допълнителни кредити ($0.01 на кредит)",
"overview": "Общ преглед",
"organization_slug_taken": "Слъгът на организацията вече е зает",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Не можете да създадете организация, тъй като вече сте част от организация",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Трябва да завършите въвеждането на потребителя, преди да създадете организация",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Не може да се намери слъг за публикуване на организацията",
"picklist": "Списък за избор",
"most_cancelled_bookings": "Най-много отменени резервации",
"interface_language": "Език на интерфейса",
"visitors_browser_language": "Език на браузъра на посетителя",
"name_or_email": "Име или имейл",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Ако не е намерен контакт, връщане към собственика на лийда, ако съществува",
"credit_purchase_failed": "Покупката на кредити е неуспешна. Моля, опитайте отново или се свържете с поддръжката.",
"minimum_of_credits_required": "Изискват се минимум 50 кредита",
"enable_delegation_credential": "Активиране на делегирани идентификационни данни",
"enable_delegation_credential_description": "Предоставете на Cal.com автоматичен достъп до календарите на всички членове на организацията чрез активиране на делегирани идентификационни данни.",
"disable_delegation_credential": "Деактивиране на делегирани идентификационни данни",
@@ -3165,6 +3183,20 @@
"results": "Резултати",
"view_form": "Преглед на формуляра",
"sms_opt_out_message": "Изпратете STOP, за да се отпишете от SMS съобщенията",
"team_credits_low_warning": "Вашият екип {{teamName}} има малко кредити",
"user_credits_low_warning": "Имате малко кредити",
"action_required_out_of_credits": "[Изисква се действие] Вашият екип {{teamName}} е изчерпал кредитите си",
"action_required_user_out_of_credits": "[Изисква се действие] Изчерпали сте кредитите си",
"low_credits_warning_message": "Вашият Cal.com екип {{teamName}} има малко кредити. За да избегнете прекъсване на услугата, моля, закупете допълнителни кредити. Ако балансът ви се изчерпи, SMS съобщенията ще спрат да се изпращат и вместо това ще бъдат изпращани като имейли.",
"low_credits_warning_message_user": "Вашият Cal.com акаунт има малко кредити. За да избегнете прекъсване на услугата, моля, закупете допълнителни кредити. Ако балансът ви се изчерпи, SMS съобщенията ще спрат да се изпращат и вместо това ще бъдат изпращани като имейли.",
"credit_limit_reached_message": "Вашият Cal.com екип {{teamName}} е изчерпал кредитите си. В резултат на това SMS съобщенията сега се изпращат чрез имейл. За да възобновите изпращането на SMS, моля, закупете допълнителни кредити.",
"credit_limit_reached_message_user": "Кредитите на вашия Cal.com акаунт са изчерпани. В резултат на това SMS съобщенията сега се изпращат чрез имейл. За да възобновите изпращането на SMS, моля, закупете допълнителни кредити.",
"current_credit_balance": "Текущ баланс: {{balance}} кредита",
"notification_about_your_booking": "Известие за вашата резервация",
"monthly_credits": "Месечни кредити",
"total_credits": "Общо кредити: {{totalCredits}}",
"remaining_credits": "Оставащи кредити: {{remainingCredits}}",
"additional_credits": "Допълнителни кредити",
"routing_form_next_in_queue": "{{count}} следващи на опашката",
"routing_form_select_members_to_email": "Изпращане на имейл отговори до",
"routing_incomplete_booking_tab": "Незавършени резервации",
@@ -3172,5 +3204,10 @@
"matching": "Съвпадение",
"event_redirect": "Пренасочване на събитие",
"reset_form": "Нулиране на формуляра",
"requires_credits": "Изисква кредити",
"requires_credits_tooltip": "Трябва да имате достатъчно кредити в акаунта си, за да използвате тази функция",
"available_credits": "Налични кредити",
"members_affected_by_disabling_delegation_credential": "Засегнати членове",
"no_members_affected_by_disabling_delegation_credential": "Няма членове, засегнати от деактивирането на пълномощията за делегиране",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Добавете новите си низове над този ред ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Cancel·lat: {{title}} el {{date}}",
"event_reassigned_subject": "Reassignat: {{title}} el {{date}}",
"event_request_declined": "La teva sol·licitud d'esdeveniment ha estat rebutjada",
"customize_calvideo_settings": "Personalitza la configuració de Cal Video",
"calvideo_settings_description": "Configura les preferències de reunions de vídeo, incloent-hi els permisos d'enregistrament per a amfitrions i assistents.",
"disable_recording_for_guests": "Desactiva l'enregistrament per als convidats",
"disable_recording_for_organizer": "Desactiva l'enregistrament per a l'organitzador",
"event_request_declined_recurring": "La teva sol·licitud d'esdeveniment recurrent ha estat rebutjada",
"event_request_cancelled": "El teu esdeveniment programat ha estat cancel·lat",
"event_request_reassigned": "El teu esdeveniment programat ha estat reassignat",
@@ -1599,6 +1603,7 @@
"team_url": "URL de l'equip",
"team_members": "Membres de l'equip",
"more": "Més",
"and_count_more": "i {{count}} més",
"more_page_footer": "Considerem l'aplicació mòbil com una extensió de l'aplicació web. Si has de realitzar accions complexes, si us plau, torna a l'aplicació web.",
"workflow_example_1": "Envia un recordatori per SMS 24 hores abans que comenci l'esdeveniment al participant",
"workflow_example_2": "Envia un SMS personalitzat al participant quan es reprogrami l'esdeveniment",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Número de telèfon (Notificacions SMS)",
"attendee_email_variable": "Correu del participant",
"attendee_email_info": "El correu de la persona que fa la reserva",
"booking_uid": "UID de la reserva",
"kbar_search_placeholder": "Escriviu una ordre o cerqueu...",
"invalid_credential": "Sembla que els permisos han caducat o han estat revocats per a {{appName}}.",
"invalid_credential_action": "Reinstal·lar app",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Afegeix una pregunta",
"identifier": "Identificador",
"duplicate_email": "El correu electrònic està duplicat",
"enter_redirect_url_on_exit_description": "Introdueix una URL de redirecció a la qual l'assistent serà enviat un cop surti de la reunió.",
"booking_with_payment_cancelled": "Ja no és possible pagar per aquest esdeveniment",
"booking_with_payment_cancelled_already_paid": "El reemborsament d'aquest pagament de reserva està en camí.",
"booking_with_payment_cancelled_refunded": "S'ha reemborsat el pagament d'aquesta reserva.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Reserva el",
"routing_form_insights_submitted_at": "Enviat el",
"copy_redirect_url": "Copia l'URL de redirecció",
"redirect_url_on_exit": "URL de redirecció en sortir",
"total_bookings_per_period": "Total de reserves per període",
"routed_to_per_period": "Redirigit a per període",
"per_day": "Per dia",
@@ -3002,6 +3010,12 @@
"asc": "Asc",
"desc": "Desc",
"verify_email_change": "Verifica el canvi de correu electrònic",
"buy_credits": "Compra crèdits",
"credits": "Crèdits",
"view_and_manage_credits": "Visualitza i gestiona els crèdits",
"view_and_manage_credits_description": "Visualitza i gestiona els crèdits per enviar missatges SMS. Un crèdit val 1¢ (USD). <0>Més informació</0>",
"buy_additional_credits": "Compra crèdits addicionals (0,01 $ per crèdit)",
"overview": "Resum",
"organization_slug_taken": "L'slug de l'organització ja està en ús",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "No podeu crear una organització perquè ja formeu part d'una",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Heu de completar la incorporació d'usuari abans de crear una organització",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "No s'ha pogut trobar l'slug per publicar l'organització",
"picklist": "Llista de selecció",
"most_cancelled_bookings": "Reserves més cancel·lades",
"interface_language": "Idioma de la interfície",
"visitors_browser_language": "Idioma del navegador del visitant",
"name_or_email": "Nom o correu electrònic",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Si no es troba cap contacte, recorre al propietari del lead si existeix",
"credit_purchase_failed": "La compra de crèdits ha fallat. Si us plau, torna-ho a provar o contacta amb suport.",
"minimum_of_credits_required": "Es requereix un mínim de 50 crèdits",
"enable_delegation_credential": "Activar credencial de delegació",
"enable_delegation_credential_description": "Concediu a Cal.com accés automàtic als calendaris de tots els membres de l'organització activant la credencial de delegació.",
"disable_delegation_credential": "Desactivar credencial de delegació",
@@ -3165,6 +3183,20 @@
"results": "Resultats",
"view_form": "Veure formulari",
"sms_opt_out_message": "Envieu STOP per cancel·lar la subscripció als missatges SMS",
"team_credits_low_warning": "El teu equip {{teamName}} s'està quedant sense crèdits",
"user_credits_low_warning": "T'estàs quedant sense crèdits",
"action_required_out_of_credits": "[Acció requerida] El teu equip {{teamName}} s'ha quedat sense crèdits",
"action_required_user_out_of_credits": "[Acció requerida] T'has quedat sense crèdits",
"low_credits_warning_message": "El teu equip de Cal.com {{teamName}} s'està quedant sense crèdits. Per evitar qualsevol interrupció del servei, si us plau, compra crèdits addicionals. Si el teu saldo s'esgota, els missatges SMS deixaran d'enviar-se i s'enviaran com a correus electrònics en el seu lloc.",
"low_credits_warning_message_user": "El teu compte de Cal.com s'està quedant sense crèdits. Per evitar qualsevol interrupció del servei, si us plau, compra crèdits addicionals. Si el teu saldo s'esgota, els missatges SMS deixaran d'enviar-se i s'enviaran com a correus electrònics en el seu lloc.",
"credit_limit_reached_message": "El teu equip de Cal.com {{teamName}} s'ha quedat sense crèdits. Com a resultat, els missatges SMS ara s'estan enviant per correu electrònic. Per reprendre l'enviament d'SMS, si us plau, compra crèdits addicionals.",
"credit_limit_reached_message_user": "El teu compte de Cal.com s'ha quedat sense crèdits. Com a resultat, els missatges SMS ara s'envien per correu electrònic. Per reprendre l'enviament d'SMS, si us plau, compra crèdits addicionals.",
"current_credit_balance": "Saldo actual: {{balance}} crèdits",
"notification_about_your_booking": "Notificació sobre la teva reserva",
"monthly_credits": "Crèdits mensuals",
"total_credits": "Total de crèdits: {{totalCredits}}",
"remaining_credits": "Crèdits restants: {{remainingCredits}}",
"additional_credits": "Crèdits addicionals",
"routing_form_next_in_queue": "{{count}} següent a la cua",
"routing_form_select_members_to_email": "Enviar respostes per correu electrònic a",
"routing_incomplete_booking_tab": "Reserves incompletes",
@@ -3172,5 +3204,10 @@
"matching": "Coincidència",
"event_redirect": "Redirecció d'esdeveniments",
"reset_form": "Restablir formulari",
"requires_credits": "Requereix crèdits",
"requires_credits_tooltip": "Necessites tenir suficients crèdits al teu compte per utilitzar aquesta funcionalitat",
"available_credits": "Crèdits disponibles",
"members_affected_by_disabling_delegation_credential": "Membres afectats",
"no_members_affected_by_disabling_delegation_credential": "Cap membre afectat per la desactivació de la credencial de delegació",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Afegiu les vostres noves cadenes a dalt ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Zrušeno: {{title}} dne {{date}}",
"event_reassigned_subject": "Přeřazeno: {{title}} dne {{date}}",
"event_request_declined": "Žádost o událost byla zamítnuta",
"customize_calvideo_settings": "Přizpůsobit nastavení Cal Video",
"calvideo_settings_description": "Nakonfigurujte preference videoschůzek včetně oprávnění k nahrávání pro hostitele a účastníky.",
"disable_recording_for_guests": "Zakázat nahrávání pro hosty",
"disable_recording_for_organizer": "Zakázat nahrávání pro organizátora",
"event_request_declined_recurring": "Žádost o opakovanou událost byla zamítnuta",
"event_request_cancelled": "Vaše plánovaná událost byla zrušena",
"event_request_reassigned": "Vaše naplánovaná událost byla přeřazena",
@@ -1599,6 +1603,7 @@
"team_url": "Adresa URL týmu",
"team_members": "Členové týmu",
"more": "Více",
"and_count_more": "a ještě {{count}}",
"more_page_footer": "Mobilní aplikaci považujeme za rozšíření webové aplikace. Pokud provádíte složitější akce, proveďte je prosím ve webové aplikaci.",
"workflow_example_1": "Odeslat účastníkovi SMS upomínku 24 hodin před začátkem akce",
"workflow_example_2": "Odeslat účastníkovi vlastní SMS, pokud je událost přeložena na jiný termín",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Telefonní číslo (SMS oznámení)",
"attendee_email_variable": "E-mail účastníka",
"attendee_email_info": "E-mail osoby provádějící rezervaci",
"booking_uid": "UID rezervace",
"kbar_search_placeholder": "Zadejte příkaz nebo vyhledejte...",
"invalid_credential": "Ale ne! Zdá se, že platnost oprávnění vypršela nebo byla zrušena. Proveďte novou instalaci.",
"invalid_credential_action": "Přeinstalovat aplikaci",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Přidat otázku",
"identifier": "Identifikátor",
"duplicate_email": "Duplicitní e-mail",
"enter_redirect_url_on_exit_description": "Zadejte URL adresu přesměrování, na kterou bude účastník odeslán po opuštění schůzky.",
"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ě.",
"booking_with_payment_cancelled_refunded": "Tato rezervační platba byla vrácena.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Čas rezervace",
"routing_form_insights_submitted_at": "Čas odeslání",
"copy_redirect_url": "Kopírovat URL pro přesměrování",
"redirect_url_on_exit": "URL přesměrování při odchodu",
"total_bookings_per_period": "Celkový počet rezervací za období",
"routed_to_per_period": "Přesměrováno za období",
"per_day": "Za den",
@@ -3002,6 +3010,12 @@
"asc": "Vzestupně",
"desc": "Sestupně",
"verify_email_change": "Ověřit změnu e-mailu",
"buy_credits": "Koupit kredity",
"credits": "Kredity",
"view_and_manage_credits": "Zobrazit a spravovat kredity",
"view_and_manage_credits_description": "Zobrazte a spravujte kredity pro odesílání SMS zpráv. Jeden kredit má hodnotu 1¢ (USD). <0>Zjistit více</0>",
"buy_additional_credits": "Koupit další kredity (0,01 $ za kredit)",
"overview": "Přehled",
"organization_slug_taken": "Slug organizace je již obsazen",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Nemůžete vytvořit organizaci, protože již jste součástí jiné organizace",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Před vytvořením organizace musíte dokončit úvodní zaškolení uživatele",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Nelze najít slug pro publikování organizace",
"picklist": "Výběrový seznam",
"most_cancelled_bookings": "Nejčastěji zrušené rezervace",
"interface_language": "Jazyk rozhraní",
"visitors_browser_language": "Jazyk prohlížeče návštěvníka",
"name_or_email": "Jméno nebo e-mail",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Pokud není nalezen žádný kontakt, použít vlastníka leadu, pokud existuje",
"credit_purchase_failed": "Nákup kreditů selhal. Zkuste to prosím znovu nebo kontaktujte podporu.",
"minimum_of_credits_required": "Vyžadováno minimálně 50 kreditů",
"enable_delegation_credential": "Povolit delegované pověření",
"enable_delegation_credential_description": "Udělte Cal.com automatický přístup ke kalendářům všech členů organizace povolením delegovaného pověření.",
"disable_delegation_credential": "Zakázat delegované pověření",
@@ -3165,6 +3183,20 @@
"results": "Výsledky",
"view_form": "Zobrazit formulář",
"sms_opt_out_message": "Odešlete STOP pro odhlášení z SMS zpráv",
"team_credits_low_warning": "Vašemu týmu {{teamName}} docházejí kredity",
"user_credits_low_warning": "Docházejí vám kredity",
"action_required_out_of_credits": "[Vyžadována akce] Vašemu týmu {{teamName}} došly kredity",
"action_required_user_out_of_credits": "[Vyžadována akce] Došly vám kredity",
"low_credits_warning_message": "Vašemu týmu Cal.com {{teamName}} docházejí kredity. Abyste předešli přerušení služby, zakupte prosím další kredity. Pokud váš zůstatek dojde, SMS zprávy se přestanou odesílat a budou místo toho odesílány jako e-maily.",
"low_credits_warning_message_user": "Vašemu účtu Cal.com docházejí kredity. Abyste předešli přerušení služby, zakupte prosím další kredity. Pokud váš zůstatek dojde, SMS zprávy se přestanou odesílat a budou místo toho odesílány jako e-maily.",
"credit_limit_reached_message": "Vašemu týmu Cal.com {{teamName}} došly kredity. V důsledku toho jsou nyní SMS zprávy odesílány prostřednictvím e-mailu. Pro obnovení odesílání SMS prosím zakupte další kredity.",
"credit_limit_reached_message_user": "Vašemu účtu Cal.com došly kredity. V důsledku toho jsou nyní SMS zprávy zasílány e-mailem. Pro obnovení zasílání SMS si prosím zakupte další kredity.",
"current_credit_balance": "Aktuální zůstatek: {{balance}} kreditů",
"notification_about_your_booking": "Oznámení o vaší rezervaci",
"monthly_credits": "Měsíční kredity",
"total_credits": "Celkem kreditů: {{totalCredits}}",
"remaining_credits": "Zbývající kredity: {{remainingCredits}}",
"additional_credits": "Dodatečné kredity",
"routing_form_next_in_queue": "{{count}} další ve frontě",
"routing_form_select_members_to_email": "Odeslat e-mailové odpovědi na",
"routing_incomplete_booking_tab": "Nedokončené rezervace",
@@ -3172,5 +3204,10 @@
"matching": "Odpovídající",
"event_redirect": "Přesměrování události",
"reset_form": "Resetovat formulář",
"requires_credits": "Vyžaduje kredity",
"requires_credits_tooltip": "Pro použití této funkce potřebujete mít na účtu dostatek kreditů",
"available_credits": "Dostupné kredity",
"members_affected_by_disabling_delegation_credential": "Dotčení členové",
"no_members_affected_by_disabling_delegation_credential": "Žádní členové nejsou dotčeni vypnutím pověření k delegování",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Přidejte své nové řetězce nahoru ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Annulleret: {{title}} den {{date}}",
"event_reassigned_subject": "Omfordelt: {{title}} den {{date}}",
"event_request_declined": "Din begivenhedsanmodning er blevet afvist",
"customize_calvideo_settings": "Tilpas Cal Video-indstillinger",
"calvideo_settings_description": "Konfigurer præferencer for videomøder, herunder optagelsestilladelser for værter og deltagere.",
"disable_recording_for_guests": "Deaktiver optagelse for gæster",
"disable_recording_for_organizer": "Deaktiver optagelse for arrangør",
"event_request_declined_recurring": "Din tilbagevendende begivenhedsanmodning er blevet afvist",
"event_request_cancelled": "Dit planlagte arrangement blev annulleret",
"event_request_reassigned": "Din planlagte begivenhed er blevet omfordelt",
@@ -1599,6 +1603,7 @@
"team_url": "Team URL",
"team_members": "Teammedlemmer",
"more": "Flere",
"and_count_more": "og {{count}} mere",
"more_page_footer": "Vi ser mobilapplikationen som en udvidelse af webapplikationen. Hvis du udfører komplicerede handlinger, henvises tilbage til webapplikationen.",
"workflow_example_1": "Send sms-påmindelse til deltageren 24 timer før begivenheden starter",
"workflow_example_2": "Send brugerdefineret SMS til deltager når begivenheden omlægges",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Telefonnummer (SMS-beskeder)",
"attendee_email_variable": "Deltagers e-mail",
"attendee_email_info": "Personen der booker's e-mail",
"booking_uid": "Booking UID",
"kbar_search_placeholder": "Indtast en kommando eller søgning...",
"invalid_credential": "Åh nej! Det ser ud til at tilladelsen er udløbet eller blevet tilbagekaldt. Geninstaller venligst igen.",
"invalid_credential_action": "Geninstaller app",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Tilføj et spørgsmål",
"identifier": "Identifikator",
"duplicate_email": "E-mail er duplikat",
"enter_redirect_url_on_exit_description": "Indtast en omdirigerings-URL, som deltageren vil blive sendt til, når de forlader mødet.",
"booking_with_payment_cancelled": "Det er ikke længere muligt at betale for denne begivenhed",
"booking_with_payment_cancelled_already_paid": "En tilbagebetaling for denne booking betaling er på vej.",
"booking_with_payment_cancelled_refunded": "Denne booking betaling er blevet refunderet.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Booket den",
"routing_form_insights_submitted_at": "Indsendt den",
"copy_redirect_url": "Kopiér omdirigeringslink",
"redirect_url_on_exit": "Omdirigerings-URL ved afslutning",
"total_bookings_per_period": "Samlede bookinger pr. periode",
"routed_to_per_period": "Dirigeret til pr. periode",
"per_day": "Pr. dag",
@@ -3002,6 +3010,12 @@
"asc": "Stigende",
"desc": "Faldende",
"verify_email_change": "Bekræft ændring af e-mail",
"buy_credits": "Køb credits",
"credits": "Credits",
"view_and_manage_credits": "Se og administrer credits",
"view_and_manage_credits_description": "Se og administrer credits til at sende SMS-beskeder. Én credit er 1¢ (USD). <0>Læs mere</0>",
"buy_additional_credits": "Køb ekstra credits ($0,01 pr. credit)",
"overview": "Oversigt",
"organization_slug_taken": "Organisationens slug er allerede taget",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Du kan ikke oprette en organisation, da du allerede er en del af en organisation",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Du skal gennemføre brugeronboarding, før du opretter en organisation",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Kunne ikke finde slug til at publicere organisationen",
"picklist": "Valgliste",
"most_cancelled_bookings": "Flest annullerede bookinger",
"interface_language": "Grænsefladesprog",
"visitors_browser_language": "Besøgerens browsersprog",
"name_or_email": "Navn eller e-mail",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Hvis ingen kontakt findes, fald tilbage til lead-ejeren, hvis denne eksisterer",
"credit_purchase_failed": "Køb af credits mislykkedes. Prøv igen eller kontakt support.",
"minimum_of_credits_required": "Minimum 50 credits kræves",
"enable_delegation_credential": "Aktivér delegationslegitimation",
"enable_delegation_credential_description": "Giv Cal.com automatisk adgang til kalendere for alle organisationsmedlemmer ved at aktivere delegationslegitimation.",
"disable_delegation_credential": "Deaktiver delegationslegitimation",
@@ -3165,6 +3183,20 @@
"results": "Resultater",
"view_form": "Vis formular",
"sms_opt_out_message": "Send STOP for at framelde SMS-beskeder",
"team_credits_low_warning": "Dit team {{teamName}} er ved at løbe tør for credits",
"user_credits_low_warning": "Du er ved at løbe tør for credits",
"action_required_out_of_credits": "[Handling påkrævet] Dit team {{teamName}} er løbet tør for credits",
"action_required_user_out_of_credits": "[Handling påkrævet] Du er løbet tør for credits",
"low_credits_warning_message": "Dit Cal.com-team {{teamName}} er ved at løbe tør for credits. For at undgå afbrydelser i tjenesten skal du købe flere credits. Hvis din saldo løber tør, vil SMS-beskeder stoppe med at blive sendt og i stedet blive sendt som e-mails.",
"low_credits_warning_message_user": "Din Cal.com-konto er ved at løbe tør for credits. For at undgå afbrydelser i tjenesten skal du købe flere credits. Hvis din saldo løber tør, vil SMS-beskeder stoppe med at blive sendt og i stedet blive sendt som e-mails.",
"credit_limit_reached_message": "Dit Cal.com-team {{teamName}} er løbet tør for credits. Som følge heraf bliver SMS-beskeder nu sendt via e-mail i stedet. For at genoptage afsendelse af SMS skal du købe flere credits.",
"credit_limit_reached_message_user": "Din Cal.com-konto er løbet tør for credits. Som følge heraf bliver SMS-beskeder nu sendt via e-mail i stedet. For at genoptage afsendelse af SMS'er skal du købe flere credits.",
"current_credit_balance": "Nuværende saldo: {{balance}} credits",
"notification_about_your_booking": "Notifikation om din booking",
"monthly_credits": "Månedlige credits",
"total_credits": "Samlede credits: {{totalCredits}}",
"remaining_credits": "Resterende credits: {{remainingCredits}}",
"additional_credits": "Ekstra credits",
"routing_form_next_in_queue": "{{count}} næste i køen",
"routing_form_select_members_to_email": "Send e-mail-svar til",
"routing_incomplete_booking_tab": "Ufuldstændige bookinger",
@@ -3172,5 +3204,10 @@
"matching": "Matchning",
"event_redirect": "Begivenheds-omdirigering",
"reset_form": "Nulstil formular",
"requires_credits": "Kræver credits",
"requires_credits_tooltip": "Du skal have nok credits på din konto for at bruge denne funktion",
"available_credits": "Tilgængelige credits",
"members_affected_by_disabling_delegation_credential": "Berørte medlemmer",
"no_members_affected_by_disabling_delegation_credential": "Ingen medlemmer berørt af deaktivering af delegationslegitimation",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Tilføj dine nye strenge ovenfor her ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Abgesagt: {{title}} am {{date}}",
"event_reassigned_subject": "Neu zugewiesen: {{title}} am {{date}}",
"event_request_declined": "Ihre Event-Anfrage wurde abgelehnt",
"customize_calvideo_settings": "Cal Video-Einstellungen anpassen",
"calvideo_settings_description": "Konfigurieren Sie Videokonferenz-Präferenzen einschließlich Aufnahmeberechtigungen für Gastgeber und Teilnehmer.",
"disable_recording_for_guests": "Aufnahme für Gäste deaktivieren",
"disable_recording_for_organizer": "Aufnahme für Organisator deaktivieren",
"event_request_declined_recurring": "Ihre wiederkehrende Terminanfrage wurde abgelehnt",
"event_request_cancelled": "Ihr geplanter Termin wurde abgesagt",
"event_request_reassigned": "Ihr geplanter Termin wurde neu zugewiesen",
@@ -1599,6 +1603,7 @@
"team_url": "Team-URL",
"team_members": "Teammitglieder",
"more": "Mehr",
"and_count_more": "und {{count}} mehr",
"more_page_footer": "Wir betrachten die mobile Anwendung als Erweiterung der Web-Anwendung. Wenn Sie komplizierte Aktionen durchführen, verwenden Sie bitte die Web-Anwendung.",
"workflow_example_1": "Eine Erinnerung per Mail an die Teilnehmer verschicken, 24 Stunden bevor das Event startet",
"workflow_example_2": "Eine Erinnerung per SMS an die Teilnehmer verschicken, eine Stunde bevor das Event startet",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Telefonnummer (SMS-Benachrichtigungen)",
"attendee_email_variable": "Teilnehmer E-Mail",
"attendee_email_info": "Die E-Mail-Adresse der buchenden Person",
"booking_uid": "Buchungs-UID",
"kbar_search_placeholder": "Geben Sie einen Befehl ein oder suchen Sie ...",
"invalid_credential": "Oh nein! Es sieht so aus, als ob die Berechtigung abgelaufen ist oder entzogen wurden. Bitte erneut installieren.",
"invalid_credential_action": "App neu installieren",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Frage hinzufügen",
"identifier": "Bezeichner",
"duplicate_email": "E-Mail ist doppelt vorhanden",
"enter_redirect_url_on_exit_description": "Geben Sie eine Weiterleitungs-URL ein, zu der der Teilnehmer gesendet wird, sobald er das Meeting verlässt.",
"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.",
"booking_with_payment_cancelled_refunded": "Diese Buchungszahlung wurde zurückerstattet.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Gebucht am",
"routing_form_insights_submitted_at": "Eingereicht am",
"copy_redirect_url": "Weiterleitungs-URL kopieren",
"redirect_url_on_exit": "Weiterleitungs-URL beim Verlassen",
"total_bookings_per_period": "Gesamtbuchungen pro Zeitraum",
"routed_to_per_period": "Weitergeleitet pro Zeitraum",
"per_day": "Pro Tag",
@@ -3002,6 +3010,12 @@
"asc": "Aufsteigend",
"desc": "Absteigend",
"verify_email_change": "E-Mail-Änderung bestätigen",
"buy_credits": "Credits kaufen",
"credits": "Credits",
"view_and_manage_credits": "Credits anzeigen und verwalten",
"view_and_manage_credits_description": "Credits für das Senden von SMS-Nachrichten anzeigen und verwalten. Ein Credit entspricht 1¢ (USD). <0>Mehr erfahren</0>",
"buy_additional_credits": "Zusätzliche Credits kaufen (0,01 $ pro Credit)",
"overview": "Übersicht",
"organization_slug_taken": "Der Organisations-Slug ist bereits vergeben",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Sie können keine Organisation erstellen, da Sie bereits Teil einer Organisation sind",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Sie müssen das Benutzer-Onboarding abschließen, bevor Sie eine Organisation erstellen können",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Konnte keinen Slug finden, um die Organisation zu veröffentlichen",
"picklist": "Auswahlliste",
"most_cancelled_bookings": "Am häufigsten abgesagte Termine",
"interface_language": "Oberflächensprache",
"visitors_browser_language": "Browsersprache des Besuchers",
"name_or_email": "Name oder E-Mail",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Wenn kein Kontakt gefunden wird, auf den Lead-Eigentümer zurückgreifen, falls vorhanden",
"credit_purchase_failed": "Kauf von Credits fehlgeschlagen. Bitte versuchen Sie es erneut oder kontaktieren Sie den Support.",
"minimum_of_credits_required": "Mindestens 50 Credits erforderlich",
"enable_delegation_credential": "Delegierungsnachweis aktivieren",
"enable_delegation_credential_description": "Gewähren Sie Cal.com automatischen Zugriff auf die Kalender aller Organisationsmitglieder, indem Sie den Delegierungsnachweis aktivieren.",
"disable_delegation_credential": "Delegierungsnachweis deaktivieren",
@@ -3165,6 +3183,20 @@
"results": "Ergebnisse",
"view_form": "Formular anzeigen",
"sms_opt_out_message": "Senden Sie STOP, um sich von SMS-Nachrichten abzumelden",
"team_credits_low_warning": "Ihrem Team {{teamName}} gehen die Credits aus",
"user_credits_low_warning": "Ihnen gehen die Credits aus",
"action_required_out_of_credits": "[Handlung erforderlich] Ihrem Team {{teamName}} sind die Credits ausgegangen",
"action_required_user_out_of_credits": "[Handlung erforderlich] Ihnen sind die Credits ausgegangen",
"low_credits_warning_message": "Ihrem Cal.com-Team {{teamName}} gehen die Credits aus. Um Unterbrechungen des Dienstes zu vermeiden, kaufen Sie bitte zusätzliche Credits. Wenn Ihr Guthaben aufgebraucht ist, werden SMS-Nachrichten nicht mehr gesendet und stattdessen als E-Mails verschickt.",
"low_credits_warning_message_user": "Ihrem Cal.com-Konto gehen die Credits aus. Um Unterbrechungen des Dienstes zu vermeiden, kaufen Sie bitte zusätzliche Credits. Wenn Ihr Guthaben aufgebraucht ist, werden SMS-Nachrichten nicht mehr gesendet und stattdessen als E-Mails verschickt.",
"credit_limit_reached_message": "Ihrem Cal.com-Team {{teamName}} sind die Credits ausgegangen. Infolgedessen werden SMS-Nachrichten jetzt per E-Mail gesendet. Um wieder SMS zu senden, kaufen Sie bitte zusätzliche Credits.",
"credit_limit_reached_message_user": "Dein Cal.com-Konto hat keine Credits mehr. Infolgedessen werden SMS-Nachrichten jetzt stattdessen per E-Mail gesendet. Um das Senden von SMS fortzusetzen, kaufe bitte zusätzliche Credits.",
"current_credit_balance": "Aktuelles Guthaben: {{balance}} Credits",
"notification_about_your_booking": "Benachrichtigung über deine Buchung",
"monthly_credits": "Monatliche Credits",
"total_credits": "Gesamte Credits: {{totalCredits}}",
"remaining_credits": "Verbleibende Credits: {{remainingCredits}}",
"additional_credits": "Zusätzliche Credits",
"routing_form_next_in_queue": "{{count}} nächste in der Warteschlange",
"routing_form_select_members_to_email": "E-Mail-Antworten senden an",
"routing_incomplete_booking_tab": "Unvollständige Buchungen",
@@ -3172,5 +3204,10 @@
"matching": "Übereinstimmung",
"event_redirect": "Event-Weiterleitung",
"reset_form": "Formular zurücksetzen",
"requires_credits": "Erfordert Credits",
"requires_credits_tooltip": "Du benötigst genügend Credits in deinem Konto, um diese Funktion zu nutzen",
"available_credits": "Verfügbare Credits",
"members_affected_by_disabling_delegation_credential": "Betroffene Mitglieder",
"no_members_affected_by_disabling_delegation_credential": "Keine Mitglieder von der Deaktivierung der Delegationsanmeldedaten betroffen",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Fügen Sie Ihre neuen Code-Zeilen über dieser hinzu ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Ακυρώθηκε: {{title}} στις {{date}}",
"event_reassigned_subject": "Ανατέθηκε εκ νέου: {{title}} στις {{date}}",
"event_request_declined": "Το αίτημα εκδήλωσής σας απορρίφθηκε",
"customize_calvideo_settings": "Προσαρμογή ρυθμίσεων Cal Video",
"calvideo_settings_description": "Διαμορφώστε τις προτιμήσεις βιντεοσυναντήσεων, συμπεριλαμβανομένων των δικαιωμάτων εγγραφής για οικοδεσπότες και συμμετέχοντες.",
"disable_recording_for_guests": "Απενεργοποίηση εγγραφής για επισκέπτες",
"disable_recording_for_organizer": "Απενεργοποίηση εγγραφής για διοργανωτή",
"event_request_declined_recurring": "Το αίτημα επαναλαμβανόμενης εκδήλωσής σας απορρίφθηκε",
"event_request_cancelled": "Η προγραμματισμένη εκδήλωσή σας ακυρώθηκε",
"event_request_reassigned": "Η προγραμματισμένη εκδήλωσή σας ανατέθηκε εκ νέου",
@@ -1599,6 +1603,7 @@
"team_url": "URL ομάδας",
"team_members": "Μέλη ομάδας",
"more": "Περισσότερα",
"and_count_more": "και {{count}} ακόμη",
"more_page_footer": "Θεωρούμε την εφαρμογή για κινητά ως επέκταση της διαδικτυακής εφαρμογής. Εάν εκτελείτε περίπλοκες ενέργειες, παρακαλούμε ανατρέξτε στη διαδικτυακή εφαρμογή.",
"workflow_example_1": "Αποστολή υπενθύμισης SMS 24 ώρες πριν την έναρξη της εκδήλωσης στον συμμετέχοντα",
"workflow_example_2": "Αποστολή προσαρμοσμένου SMS στον συμμετέχοντα όταν η εκδήλωση επαναπρογραμματιστεί",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Αριθμός τηλεφώνου (Ειδοποιήσεις SMS)",
"attendee_email_variable": "Email συμμετέχοντα",
"attendee_email_info": "Το email του ατόμου που κάνει την κράτηση",
"booking_uid": "UID κράτησης",
"kbar_search_placeholder": "Πληκτρολογήστε μια εντολή ή αναζητήστε...",
"invalid_credential": "Φαίνεται ότι τα δικαιώματα έληξαν ή ανακλήθηκαν για το {{appName}}.",
"invalid_credential_action": "Επανεγκατάσταση εφαρμογής",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Προσθήκη ερώτησης",
"identifier": "Αναγνωριστικό",
"duplicate_email": "Το email υπάρχει ήδη",
"enter_redirect_url_on_exit_description": "Εισάγετε ένα URL ανακατεύθυνσης στο οποίο θα μεταφερθεί ο συμμετέχων μόλις αποχωρήσει από τη συνάντηση.",
"booking_with_payment_cancelled": "Η πληρωμή για αυτή την εκδήλωση δεν είναι πλέον δυνατή",
"booking_with_payment_cancelled_already_paid": "Η επιστροφή χρημάτων για αυτή την κράτηση βρίσκεται σε εξέλιξη.",
"booking_with_payment_cancelled_refunded": "Η πληρωμή για αυτή την κράτηση έχει επιστραφεί.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Ώρα κράτησης",
"routing_form_insights_submitted_at": "Υποβλήθηκε στις",
"copy_redirect_url": "Αντιγραφή URL ανακατεύθυνσης",
"redirect_url_on_exit": "URL ανακατεύθυνσης κατά την έξοδο",
"total_bookings_per_period": "Συνολικές κρατήσεις ανά περίοδο",
"routed_to_per_period": "Δρομολογήθηκαν ανά περίοδο",
"per_day": "Ανά ημέρα",
@@ -3002,6 +3010,12 @@
"asc": "Αύξουσα",
"desc": "Φθίνουσα",
"verify_email_change": "Επαλήθευση αλλαγής email",
"buy_credits": "Αγορά μονάδων",
"credits": "Μονάδες",
"view_and_manage_credits": "Προβολή και διαχείριση μονάδων",
"view_and_manage_credits_description": "Προβολή και διαχείριση μονάδων για αποστολή μηνυμάτων SMS. Μία μονάδα αξίζει 1¢ (USD). <0>Μάθετε περισσότερα</0>",
"buy_additional_credits": "Αγορά επιπλέον μονάδων ($0.01 ανά μονάδα)",
"overview": "Επισκόπηση",
"organization_slug_taken": "Το αναγνωριστικό του οργανισμού χρησιμοποιείται ήδη",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Δεν μπορείτε να δημιουργήσετε έναν οργανισμό καθώς είστε ήδη μέλος ενός οργανισμού",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Πρέπει να ολοκληρώσετε την εισαγωγή χρήστη πριν δημιουργήσετε έναν οργανισμό",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Δεν βρέθηκε το slug για τη δημοσίευση του οργανισμού",
"picklist": "Λίστα επιλογών",
"most_cancelled_bookings": "Περισσότερες ακυρωμένες κρατήσεις",
"interface_language": "Γλώσσα διεπαφής",
"visitors_browser_language": "Γλώσσα προγράμματος περιήγησης επισκέπτη",
"name_or_email": "Όνομα ή Email",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Αν δεν βρεθεί επαφή, επιστροφή στον ιδιοκτήτη του lead εάν υπάρχει",
"credit_purchase_failed": "Η αγορά μονάδων απέτυχε. Παρακαλώ δοκιμάστε ξανά ή επικοινωνήστε με την υποστήριξη.",
"minimum_of_credits_required": "Απαιτούνται τουλάχιστον 50 μονάδες",
"enable_delegation_credential": "Ενεργοποίηση διαπιστευτηρίου εξουσιοδότησης",
"enable_delegation_credential_description": "Παραχωρήστε στο Cal.com αυτόματη πρόσβαση στα ημερολόγια όλων των μελών του οργανισμού ενεργοποιώντας το διαπιστευτήριο εξουσιοδότησης.",
"disable_delegation_credential": "Απενεργοποίηση διαπιστευτηρίου εξουσιοδότησης",
@@ -3165,6 +3183,20 @@
"results": "Αποτελέσματα",
"view_form": "Προβολή φόρμας",
"sms_opt_out_message": "Στείλτε STOP για να διακόψετε τα μηνύματα SMS",
"team_credits_low_warning": "Η ομάδα σας {{teamName}} έχει λίγες μονάδες",
"user_credits_low_warning": "Έχετε λίγες μονάδες",
"action_required_out_of_credits": "[Απαιτείται ενέργεια] Η ομάδα σας {{teamName}} έχει εξαντλήσει τις μονάδες της",
"action_required_user_out_of_credits": "[Απαιτείται ενέργεια] Έχετε εξαντλήσει τις μονάδες σας",
"low_credits_warning_message": "Η ομάδα σας {{teamName}} στο Cal.com έχει λίγες μονάδες. Για να αποφύγετε τυχόν διακοπή της υπηρεσίας, παρακαλούμε αγοράστε επιπλέον μονάδες. Αν το υπόλοιπό σας εξαντληθεί, τα μηνύματα SMS θα σταματήσουν να αποστέλλονται και θα αποστέλλονται ως emails αντ' αυτού.",
"low_credits_warning_message_user": "Ο λογαριασμός σας στο Cal.com έχει λίγες μονάδες. Για να αποφύγετε τυχόν διακοπή της υπηρεσίας, παρακαλούμε αγοράστε επιπλέον μονάδες. Αν το υπόλοιπό σας εξαντληθεί, τα μηνύματα SMS θα σταματήσουν να αποστέλλονται και θα αποστέλλονται ως emails αντ' αυτού.",
"credit_limit_reached_message": "Η ομάδα σας {{teamName}} στο Cal.com έχει εξαντλήσει τις μονάδες της. Ως αποτέλεσμα, τα μηνύματα SMS αποστέλλονται τώρα μέσω email. Για να συνεχίσετε την αποστολή SMS, παρακαλούμε αγοράστε επιπλέον μονάδες.",
"credit_limit_reached_message_user": "Ο λογαριασμός σας στο Cal.com έχει εξαντλήσει τις μονάδες του. Ως αποτέλεσμα, τα μηνύματα SMS αποστέλλονται τώρα μέσω email. Για να συνεχίσετε την αποστολή SMS, παρακαλούμε αγοράστε επιπλέον μονάδες.",
"current_credit_balance": "Τρέχον υπόλοιπο: {{balance}} μονάδες",
"notification_about_your_booking": "Ειδοποίηση σχετικά με την κράτησή σας",
"monthly_credits": "Μηνιαίες μονάδες",
"total_credits": "Συνολικές μονάδες: {{totalCredits}}",
"remaining_credits": "Υπολειπόμενες μονάδες: {{remainingCredits}}",
"additional_credits": "Επιπλέον μονάδες",
"routing_form_next_in_queue": "{{count}} επόμενα στην ουρά",
"routing_form_select_members_to_email": "Αποστολή απαντήσεων email σε",
"routing_incomplete_booking_tab": "Ημιτελείς Κρατήσεις",
@@ -3172,5 +3204,10 @@
"matching": "Αντιστοίχιση",
"event_redirect": "Ανακατεύθυνση εκδήλωσης",
"reset_form": "Επαναφορά φόρμας",
"requires_credits": "Απαιτεί μονάδες",
"requires_credits_tooltip": "Χρειάζεστε αρκετές μονάδες στο λογαριασμό σας για να χρησιμοποιήσετε αυτή τη λειτουργία",
"available_credits": "Διαθέσιμες μονάδες",
"members_affected_by_disabling_delegation_credential": "Επηρεαζόμενα μέλη",
"no_members_affected_by_disabling_delegation_credential": "Κανένα μέλος δεν επηρεάζεται από την απενεργοποίηση των διαπιστευτηρίων εκχώρησης",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Προσθέστε τις νέες συμβολοσειρές σας πάνω από εδώ ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -1171,6 +1171,8 @@
"confirm_delete_api_key": "Revoke this API key",
"disable_rescheduling": "Disable Rescheduling",
"description_disable_rescheduling": "Guests can no longer reschedule the event with calendar invite or email",
"allow_rescheduling_cancelled_bookings": "Allow booking through reschedule link",
"description_allow_rescheduling_cancelled_bookings": "When enabled, users will be able to create a new booking when trying to reschedule a cancelled booking",
"disable_cancelling": "Disable Cancelling",
"description_disable_cancelling": "Guests can no longer cancel the event with calendar invite or email",
"revoke_api_key": "Revoke API key",
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Cancelado: {{title}} el {{date}}",
"event_reassigned_subject": "Reasignado: {{title}} el {{date}}",
"event_request_declined": "Tu solicitud de evento ha sido rechazada",
"customize_calvideo_settings": "Personalizar configuración de Cal Video",
"calvideo_settings_description": "Configura las preferencias de reuniones por video, incluyendo permisos de grabación para anfitriones y asistentes.",
"disable_recording_for_guests": "Deshabilitar grabación para invitados",
"disable_recording_for_organizer": "Deshabilitar grabación para organizador",
"event_request_declined_recurring": "Tu solicitud de evento recurrente ha sido rechazada",
"event_request_cancelled": "Tu evento programado fue cancelado",
"event_request_reassigned": "Tu evento programado fue reasignado",
@@ -1599,6 +1603,7 @@
"team_url": "URL del equipo",
"team_members": "Miembros del equipo",
"more": "Más",
"and_count_more": "y {{count}} más",
"more_page_footer": "Consideramos la aplicación móvil como una extensión de la aplicación web. Si estás realizando acciones complicadas, por favor, vuelve a la aplicación web.",
"workflow_example_1": "Enviar recordatorio por SMS 24 horas antes de que comience el evento al asistente",
"workflow_example_2": "Enviar SMS personalizado cuando el evento se reprograma al asistente",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Número de teléfono (notificaciones SMS)",
"attendee_email_variable": "Correo electrónico del asistente",
"attendee_email_info": "Correo electrónico de la persona que reserva",
"booking_uid": "UID de reserva",
"kbar_search_placeholder": "Escribe un comando o busca...",
"invalid_credential": "Parece que los permisos expiraron o fueron revocados para {{appName}}.",
"invalid_credential_action": "Reinstalar la aplicación",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Agregar una pregunta",
"identifier": "Identificador",
"duplicate_email": "El correo electrónico está duplicado",
"enter_redirect_url_on_exit_description": "Ingresa una URL de redirección a la que el asistente será enviado una vez que abandone la reunión.",
"booking_with_payment_cancelled": "Pagar por este evento ya no es posible",
"booking_with_payment_cancelled_already_paid": "Un reembolso para este pago de reserva está en camino.",
"booking_with_payment_cancelled_refunded": "Este pago de reserva ha sido reembolsado.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Reservado el",
"routing_form_insights_submitted_at": "Enviado el",
"copy_redirect_url": "Copiar URL de redirección",
"redirect_url_on_exit": "URL de redirección al salir",
"total_bookings_per_period": "Total de reservas por período",
"routed_to_per_period": "Enrutadas por período",
"per_day": "Por día",
@@ -3002,6 +3010,12 @@
"asc": "Asc",
"desc": "Desc",
"verify_email_change": "Verificar cambio de correo electrónico",
"buy_credits": "Comprar créditos",
"credits": "Créditos",
"view_and_manage_credits": "Ver y administrar créditos",
"view_and_manage_credits_description": "Ver y administrar créditos para enviar mensajes SMS. Un crédito equivale a 1¢ (USD). <0>Más información</0>",
"buy_additional_credits": "Comprar créditos adicionales ($0.01 por crédito)",
"overview": "Resumen",
"organization_slug_taken": "El slug de la organización ya está en uso",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "No puedes crear una organización ya que ya eres parte de una organización",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Necesitas completar la incorporación de usuario antes de crear una organización",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "No se pudo encontrar el slug para publicar la organización",
"picklist": "Lista de selección",
"most_cancelled_bookings": "Reservas más canceladas",
"interface_language": "Idioma de la interfaz",
"visitors_browser_language": "Idioma del navegador del visitante",
"name_or_email": "Nombre o correo electrónico",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Si no se encuentra ningún contacto, recurrir al propietario del lead si existe",
"credit_purchase_failed": "La compra de créditos falló. Intenta nuevamente o contacta a soporte.",
"minimum_of_credits_required": "Se requiere un mínimo de 50 créditos",
"enable_delegation_credential": "Habilitar credencial de delegación",
"enable_delegation_credential_description": "Otorga a Cal.com acceso automático a los calendarios de todos los miembros de la organización habilitando la credencial de delegación.",
"disable_delegation_credential": "Deshabilitar credencial de delegación",
@@ -3165,6 +3183,20 @@
"results": "Resultados",
"view_form": "Ver formulario",
"sms_opt_out_message": "Envía STOP para cancelar los mensajes SMS",
"team_credits_low_warning": "Tu equipo {{teamName}} se está quedando sin créditos",
"user_credits_low_warning": "Te estás quedando sin créditos",
"action_required_out_of_credits": "[Acción requerida] Tu equipo {{teamName}} se ha quedado sin créditos",
"action_required_user_out_of_credits": "[Acción requerida] Te has quedado sin créditos",
"low_credits_warning_message": "Tu equipo de Cal.com {{teamName}} se está quedando sin créditos. Para evitar interrupciones en el servicio, por favor compra créditos adicionales. Si tu saldo se agota, los mensajes SMS dejarán de enviarse y se enviarán como correos electrónicos en su lugar.",
"low_credits_warning_message_user": "Tu cuenta de Cal.com se está quedando sin créditos. Para evitar interrupciones en el servicio, por favor compra créditos adicionales. Si tu saldo se agota, los mensajes SMS dejarán de enviarse y se enviarán como correos electrónicos en su lugar.",
"credit_limit_reached_message": "Tu equipo de Cal.com {{teamName}} se ha quedado sin créditos. Como resultado, los mensajes SMS ahora se están enviando por correo electrónico. Para reanudar el envío de SMS, por favor compra créditos adicionales.",
"credit_limit_reached_message_user": "Tu cuenta de Cal.com se ha quedado sin créditos. Como resultado, los mensajes SMS ahora se envían por correo electrónico. Para reanudar el envío de SMS, por favor compra créditos adicionales.",
"current_credit_balance": "Saldo actual: {{balance}} créditos",
"notification_about_your_booking": "Notificación sobre tu reserva",
"monthly_credits": "Créditos mensuales",
"total_credits": "Créditos totales: {{totalCredits}}",
"remaining_credits": "Créditos restantes: {{remainingCredits}}",
"additional_credits": "Créditos adicionales",
"routing_form_next_in_queue": "{{count}} siguiente(s) en cola",
"routing_form_select_members_to_email": "Enviar respuestas por correo electrónico a",
"routing_incomplete_booking_tab": "Reservas incompletas",
@@ -3172,5 +3204,10 @@
"matching": "Coincidencia",
"event_redirect": "Redirección de evento",
"reset_form": "Restablecer formulario",
"requires_credits": "Requiere créditos",
"requires_credits_tooltip": "Necesitas tener suficientes créditos en tu cuenta para usar esta función",
"available_credits": "Créditos disponibles",
"members_affected_by_disabling_delegation_credential": "Miembros afectados",
"no_members_affected_by_disabling_delegation_credential": "Ningún miembro afectado por la desactivación de credenciales de delegación",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Agrega tus nuevas cadenas arriba de esta línea ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Cancelado: {{title}} el {{date}}",
"event_reassigned_subject": "Reasignado: {{title}} el {{date}}",
"event_request_declined": "Su solicitud de reunión ha sido rechazada",
"customize_calvideo_settings": "Personalizar ajustes de Cal Video",
"calvideo_settings_description": "Configura las preferencias de reuniones por video, incluyendo permisos de grabación para anfitriones y asistentes.",
"disable_recording_for_guests": "Desactivar grabación para invitados",
"disable_recording_for_organizer": "Desactivar grabación para organizador",
"event_request_declined_recurring": "Su solicitud de evento recurrente se ha rechazado",
"event_request_cancelled": "Se canceló su evento programado",
"event_request_reassigned": "Tu evento programado ha sido reasignado",
@@ -1599,6 +1603,7 @@
"team_url": "URL del equipo",
"team_members": "Miembros del equipo",
"more": "Más",
"and_count_more": "y {{count}} más",
"more_page_footer": "Consideramos la aplicación móvil como una extensión de la aplicación web. Si está realizando acciones complicadas, consulta la aplicación web.",
"workflow_example_1": "Enviar recordatorio por SMS al asistente, 24 horas antes de que el evento comience",
"workflow_example_2": "Enviar SMS personalizado al asistente cuando se reprograma el evento",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Número de teléfono (notificaciones SMS)",
"attendee_email_variable": "Correo electrónico del asistente",
"attendee_email_info": "El correo electrónico de la persona que reserva",
"booking_uid": "UID de reserva",
"kbar_search_placeholder": "Escriba un comando o búsqueda...",
"invalid_credential": "¡Oh no! Parece que el permiso ha caducado o se ha revocado. Vuelva a instalarlo.",
"invalid_credential_action": "Reinstalar aplicación",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Agregar una pregunta",
"identifier": "Identificador",
"duplicate_email": "El correo electrónico está duplicado",
"enter_redirect_url_on_exit_description": "Introduce una URL de redirección a la que se enviará al asistente una vez que abandone la reunión.",
"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.",
"booking_with_payment_cancelled_refunded": "El pago de esta reserva se ha reembolsado.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Fecha de reserva",
"routing_form_insights_submitted_at": "Fecha de envío",
"copy_redirect_url": "Copiar URL de redirección",
"redirect_url_on_exit": "URL de redirección al salir",
"total_bookings_per_period": "Total de reservas por período",
"routed_to_per_period": "Enrutado a por período",
"per_day": "Por día",
@@ -3002,6 +3010,12 @@
"asc": "Asc",
"desc": "Desc",
"verify_email_change": "Verificar cambio de correo electrónico",
"buy_credits": "Comprar créditos",
"credits": "Créditos",
"view_and_manage_credits": "Ver y gestionar créditos",
"view_and_manage_credits_description": "Ver y gestionar créditos para enviar mensajes SMS. Un crédito equivale a 1¢ (USD). <0>Más información</0>",
"buy_additional_credits": "Comprar créditos adicionales ($0.01 por crédito)",
"overview": "Resumen",
"organization_slug_taken": "El slug de la organización ya está en uso",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "No puedes crear una organización ya que ya formas parte de una",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Necesitas completar la incorporación de usuario antes de crear una organización",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "No se pudo encontrar el slug para publicar la organización",
"picklist": "Lista de selección",
"most_cancelled_bookings": "Reservas más canceladas",
"interface_language": "Idioma de la interfaz",
"visitors_browser_language": "Idioma del navegador del visitante",
"name_or_email": "Nombre o correo electrónico",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Si no se encuentra ningún contacto, recurrir al propietario del lead si existe",
"credit_purchase_failed": "La compra de créditos falló. Por favor, inténtalo de nuevo o contacta con soporte.",
"minimum_of_credits_required": "Se requiere un mínimo de 50 créditos",
"enable_delegation_credential": "Habilitar credencial de delegación",
"enable_delegation_credential_description": "Concede a Cal.com acceso automático a los calendarios de todos los miembros de la organización habilitando la credencial de delegación.",
"disable_delegation_credential": "Deshabilitar credencial de delegación",
@@ -3165,6 +3183,20 @@
"results": "Resultados",
"view_form": "Ver formulario",
"sms_opt_out_message": "Envía STOP para cancelar los mensajes SMS",
"team_credits_low_warning": "Tu equipo {{teamName}} se está quedando sin créditos",
"user_credits_low_warning": "Te estás quedando sin créditos",
"action_required_out_of_credits": "[Acción requerida] Tu equipo {{teamName}} se ha quedado sin créditos",
"action_required_user_out_of_credits": "[Acción requerida] Te has quedado sin créditos",
"low_credits_warning_message": "Tu equipo de Cal.com {{teamName}} se está quedando sin créditos. Para evitar cualquier interrupción en el servicio, por favor compra créditos adicionales. Si tu saldo se agota, los mensajes SMS dejarán de enviarse y se enviarán como correos electrónicos en su lugar.",
"low_credits_warning_message_user": "Tu cuenta de Cal.com se está quedando sin créditos. Para evitar cualquier interrupción en el servicio, por favor compra créditos adicionales. Si tu saldo se agota, los mensajes SMS dejarán de enviarse y se enviarán como correos electrónicos en su lugar.",
"credit_limit_reached_message": "Tu equipo de Cal.com {{teamName}} se ha quedado sin créditos. Como resultado, los mensajes SMS ahora se están enviando por correo electrónico. Para reanudar el envío de SMS, por favor compra créditos adicionales.",
"credit_limit_reached_message_user": "Tu cuenta de Cal.com se ha quedado sin créditos. Como resultado, los mensajes SMS ahora se envían por correo electrónico. Para reanudar el envío de SMS, por favor compra créditos adicionales.",
"current_credit_balance": "Saldo actual: {{balance}} créditos",
"notification_about_your_booking": "Notificación sobre tu reserva",
"monthly_credits": "Créditos mensuales",
"total_credits": "Créditos totales: {{totalCredits}}",
"remaining_credits": "Créditos restantes: {{remainingCredits}}",
"additional_credits": "Créditos adicionales",
"routing_form_next_in_queue": "{{count}} siguiente(s) en cola",
"routing_form_select_members_to_email": "Enviar respuestas por correo electrónico a",
"routing_incomplete_booking_tab": "Reservas incompletas",
@@ -3172,5 +3204,10 @@
"matching": "Coincidencia",
"event_redirect": "Redirección de evento",
"reset_form": "Restablecer formulario",
"requires_credits": "Requiere créditos",
"requires_credits_tooltip": "Necesitas tener suficientes créditos en tu cuenta para usar esta función",
"available_credits": "Créditos disponibles",
"members_affected_by_disabling_delegation_credential": "Miembros afectados",
"no_members_affected_by_disabling_delegation_credential": "Ningún miembro afectado por la desactivación de la credencial de delegación",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Agregue sus nuevas cadenas arriba ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Tühistatud: {{title}} kell {{date}}",
"event_reassigned_subject": "Ümber määratud: {{title}} kuupäeval {{date}}",
"event_request_declined": "Teie ürituse taotlus on tagasi lükatud",
"customize_calvideo_settings": "Kohanda Cal Video seadeid",
"calvideo_settings_description": "Seadista videokoosoleku eelistused, sealhulgas salvestusõigused korraldajatele ja osalejatele.",
"disable_recording_for_guests": "Keela külaliste salvestamine",
"disable_recording_for_organizer": "Keela korraldaja salvestamine",
"event_request_declined_recurring": "Teie korduva ürituse taotlus on tagasi lükatud",
"event_request_cancelled": "Teie ajastatud üritus tühistati",
"event_request_reassigned": "Teie planeeritud sündmus määrati ümber",
@@ -1599,6 +1603,7 @@
"team_url": "Meeskonna URL",
"team_members": "Meeskonna liikmed",
"more": "Veel",
"and_count_more": "ja veel {{count}}",
"more_page_footer": "Me vaatame mobiilirakendust veebirakenduse laiendusena. Keeruliste toimingute tegemisel pöörduge tagasi veebirakenduse poole.",
"workflow_example_1": "Saada osalejatele SMS-meeldetuletus 24 tundi enne sündmuse algust",
"workflow_example_2": "Saada kohandatud SMS, kui sündmus on osalejale ümber ajastatud",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Telefoninumber (SMS-teatised)",
"attendee_email_variable": "Osalejate e-post",
"attendee_email_info": "Broneerija meiliaadress",
"booking_uid": "Broneeringu UID",
"kbar_search_placeholder": "Sisestage käsk või otsige...",
"invalid_credential": "Tundub, et rakenduse {{appName}} load on aegunud või tühistatud.",
"invalid_credential_action": "installige rakendus uuesti",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Lisa küsimus",
"identifier": "Identifitseerija",
"duplicate_email": "E-post on duplikaat",
"enter_redirect_url_on_exit_description": "Sisestage ümbersuunamise URL, kuhu osaleja suunatakse pärast koosolekult lahkumist.",
"booking_with_payment_cancelled": "Selle sündmuse eest tasumine pole enam võimalik",
"booking_with_payment_cancelled_already_paid": "Selle broneeringu makse tagasimakse on teel.",
"booking_with_payment_cancelled_refunded": "See broneeringu makse on tagastatud.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Broneeritud",
"routing_form_insights_submitted_at": "Esitatud",
"copy_redirect_url": "Kopeeri ümbersuunamise URL",
"redirect_url_on_exit": "Ümbersuunamise URL lahkumisel",
"total_bookings_per_period": "Broneeringuid perioodi kohta kokku",
"routed_to_per_period": "Suunatud perioodi kohta",
"per_day": "Päevas",
@@ -3002,6 +3010,12 @@
"asc": "Kasvav",
"desc": "Kahanev",
"verify_email_change": "Kinnita e-posti aadressi muutmine",
"buy_credits": "Osta krediiti",
"credits": "Krediidid",
"view_and_manage_credits": "Vaata ja halda krediite",
"view_and_manage_credits_description": "Vaata ja halda krediite SMS-sõnumite saatmiseks. Üks krediit on väärt 1¢ (USD). <0>Lisateave</0>",
"buy_additional_credits": "Osta lisakrediite (0,01 $ krediidi kohta)",
"overview": "Ülevaade",
"organization_slug_taken": "Organisatsiooni lühilink on juba kasutusel",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Te ei saa luua organisatsiooni, kuna olete juba osa organisatsioonist",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Enne organisatsiooni loomist peate lõpetama kasutaja liitumisprotsessi",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Organisatsiooni avaldamiseks ei leitud lühinime",
"picklist": "Valikloend",
"most_cancelled_bookings": "Enim tühistatud broneeringud",
"interface_language": "Liidese keel",
"visitors_browser_language": "Külastaja brauseri keel",
"name_or_email": "Nimi või e-post",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Kui kontakti ei leita, kasuta võimalusel liidi omanikku",
"credit_purchase_failed": "Krediidi ost ebaõnnestus. Palun proovige uuesti või võtke ühendust klienditoega.",
"minimum_of_credits_required": "Vajalik on vähemalt 50 krediiti",
"enable_delegation_credential": "Luba delegeerimise volitus",
"enable_delegation_credential_description": "Andke Cal.com-ile automaatne juurdepääs kõigi organisatsiooni liikmete kalendritele, lubades delegeerimise volituse.",
"disable_delegation_credential": "Keela delegeerimise volitus",
@@ -3165,6 +3183,20 @@
"results": "Tulemused",
"view_form": "Vaata vormi",
"sms_opt_out_message": "SMS-sõnumitest loobumiseks saatke tekst STOP",
"team_credits_low_warning": "Teie meeskonnal {{teamName}} on krediidid otsakorral",
"user_credits_low_warning": "Teie krediidid on otsakorral",
"action_required_out_of_credits": "[Tegevus vajalik] Teie meeskonnal {{teamName}} on krediidid otsas",
"action_required_user_out_of_credits": "[Tegevus vajalik] Teil on krediidid otsas",
"low_credits_warning_message": "Teie Cal.com meeskonnal {{teamName}} on krediidid otsakorral. Teenuse katkestuste vältimiseks ostke palun lisakrediite. Kui saldo saab otsa, lõpetatakse SMS-sõnumite saatmine ja need saadetakse e-kirjadena.",
"low_credits_warning_message_user": "Teie Cal.com kontol on krediidid otsakorral. Teenuse katkestuste vältimiseks ostke palun lisakrediite. Kui saldo saab otsa, lõpetatakse SMS-sõnumite saatmine ja need saadetakse e-kirjadena.",
"credit_limit_reached_message": "Teie Cal.com meeskonnal {{teamName}} on krediidid otsas. Selle tulemusena saadetakse SMS-sõnumid nüüd e-kirjadena. SMS-ide saatmise jätkamiseks ostke palun lisakrediite.",
"credit_limit_reached_message_user": "Teie Cal.com konto krediit on otsa saanud. Seetõttu saadetakse SMS-sõnumid nüüd e-posti teel. SMS-ide saatmise jätkamiseks ostke palun lisakrediiti.",
"current_credit_balance": "Praegune saldo: {{balance}} krediiti",
"notification_about_your_booking": "Teavitus teie broneeringu kohta",
"monthly_credits": "Igakuised krediidid",
"total_credits": "Kokku krediite: {{totalCredits}}",
"remaining_credits": "Allesjäänud krediidid: {{remainingCredits}}",
"additional_credits": "Lisakrediidid",
"routing_form_next_in_queue": "{{count}} järgmine järjekorras",
"routing_form_select_members_to_email": "Saada e-posti vastused",
"routing_incomplete_booking_tab": "Lõpetamata broneeringud",
@@ -3172,5 +3204,10 @@
"matching": "Sobitamine",
"event_redirect": "Sündmuse ümbersuunamine",
"reset_form": "Lähtesta vorm",
"requires_credits": "Nõuab krediite",
"requires_credits_tooltip": "Selle funktsiooni kasutamiseks peab teie kontol olema piisavalt krediiti",
"available_credits": "Saadaval krediidid",
"members_affected_by_disabling_delegation_credential": "Mõjutatud liikmed",
"no_members_affected_by_disabling_delegation_credential": "Delegatsiooni mandaadi keelamine ei mõjuta ühtegi liiget",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Bertan behera: {{title}} {{date}}(e)an",
"event_reassigned_subject": "Berresleituta: {{title}} {{date}}-ean",
"event_request_declined": "Zure gertaera-eskaera baztertua izan da",
"customize_calvideo_settings": "Cal Video ezarpenak pertsonalizatu",
"calvideo_settings_description": "Konfiguratu bideo-bileren lehentasunak, grabatzeko baimenak barne, anfitrioi eta parte-hartzaileentzat.",
"disable_recording_for_guests": "Desgaitu grabaketa gonbidatuentzat",
"disable_recording_for_organizer": "Desgaitu grabaketa antolatzailearentzat",
"event_request_declined_recurring": "Zure gertaera errepikari-eskaera baztertua izan da",
"event_request_cancelled": "Zure programatutako gertaera bertan behera utzi da",
"event_request_reassigned": "Zure programatutako gertaera berresleitua izan da",
@@ -1599,6 +1603,7 @@
"team_url": "Taldearen URLa",
"team_members": "Taldekideak",
"more": "Gehiago",
"and_count_more": "eta {{count}} gehiago",
"more_page_footer": "Mugikorrerako aplikazioa web aplikazioaren luzapen gisa ikusten dugu. Ekintza konplexuak egiten ari bazara, mesedez itzuli web aplikaziora.",
"workflow_example_1": "Bidali SMS gogorarazlea gertaera hasi baino 24 ordu lehenago partaideari",
"workflow_example_2": "Bidali SMS pertsonalizatua gertaera berriz programatzen denean parte-hartzaileari",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Telefono zenbakia (SMS jakinarazpenak)",
"attendee_email_variable": "Parte-hartzailearen helbide elektronikoa",
"attendee_email_info": "Erreserba egiten duen pertsonaren helbide elektronikoa",
"booking_uid": "Erreserba UID",
"kbar_search_placeholder": "Idatzi komando bat edo bilatu...",
"invalid_credential": "Badirudi {{appName}}-ren baimenak iraungi edo ezeztatu direla",
"invalid_credential_action": "Berriz instalatu aplikazioa",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Gehitu galdera bat",
"identifier": "Identifikatzailea",
"duplicate_email": "Posta elektronikoa bikoiztuta dago",
"enter_redirect_url_on_exit_description": "Sartu birbideratze URL bat parte-hartzailea bileraren ondoren bidaliko den tokira.",
"booking_with_payment_cancelled": "Ezin da ekitaldi honengatik ordaindu",
"booking_with_payment_cancelled_already_paid": "Erreserba honen ordainketaren itzulketa bidean dago.",
"booking_with_payment_cancelled_refunded": "Erreserba honen ordainketa itzuli da.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Erreserba data",
"routing_form_insights_submitted_at": "Bidalketa data",
"copy_redirect_url": "Kopiatu birbideratze URLa",
"redirect_url_on_exit": "Irteera ondorengo birbideratze URLa",
"total_bookings_per_period": "Epealdi bakoitzeko erreserba kopurua",
"routed_to_per_period": "Epealdi bakoitzeko birbideratutakoak",
"per_day": "Eguneko",
@@ -3002,6 +3010,12 @@
"asc": "Gorantz",
"desc": "Beherantz",
"verify_email_change": "Egiaztatu posta elektronikoaren aldaketa",
"buy_credits": "Erosi kredituak",
"credits": "Kredituak",
"view_and_manage_credits": "Ikusi eta kudeatu kredituak",
"view_and_manage_credits_description": "Ikusi eta kudeatu SMS mezuak bidaltzeko kredituak. Kreditu bat 1¢ (USD) balio du. <0>Informazio gehiago</0>",
"buy_additional_credits": "Erosi kreditu gehigarriak (0,01$ kreditu bakoitzeko)",
"overview": "Ikuspegi orokorra",
"organization_slug_taken": "Erakundearen slug-a dagoeneko hartuta dago",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Ezin duzu erakunde bat sortu dagoeneko erakunde baten parte zarelako",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Erabiltzailearen hasierako prozesua amaitu behar duzu erakunde bat sortu aurretik",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Ezin izan da erakundea argitaratzeko slug-a aurkitu",
"picklist": "Hautaketa-zerrenda",
"most_cancelled_bookings": "Bertan behera utzitako erreserba gehienak",
"interface_language": "Interfazearen hizkuntza",
"visitors_browser_language": "Bisitariaren nabigatzailearen hizkuntza",
"name_or_email": "Izena edo helbide elektronikoa",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Kontakturik aurkitzen ez bada, itzuli bezeroen arduradunera existitzen bada",
"credit_purchase_failed": "Kredituen erosketa huts egin du. Saiatu berriro edo jarri harremanetan laguntzarekin.",
"minimum_of_credits_required": "Gutxienez 50 kreditu behar dira",
"enable_delegation_credential": "Gaitu eskuordetze kredentzialak",
"enable_delegation_credential_description": "Eman Cal.com-i erakundeko kide guztien egutegietarako sarbide automatikoa eskuordetze kredentzialak gaituz.",
"disable_delegation_credential": "Desgaitu eskuordetze kredentzialak",
@@ -3165,6 +3183,20 @@
"results": "Emaitzak",
"view_form": "Formularioa Ikusi",
"sms_opt_out_message": "Bidali STOP SMS mezuetatik baja emateko",
"team_credits_low_warning": "Zure {{teamName}} taldea kreditu gutxirekin dabil",
"user_credits_low_warning": "Kreditu gutxirekin zabiltza",
"action_required_out_of_credits": "[Ekintza beharrezkoa] Zure {{teamName}} taldeari kredituak agortu zaizkio",
"action_required_user_out_of_credits": "[Ekintza beharrezkoa] Kredituak agortu zaizkizu",
"low_credits_warning_message": "Zure Cal.com {{teamName}} taldea kreditu gutxirekin dabil. Zerbitzuan etenaldirik ez izateko, erosi kreditu gehigarriak. Zure saldoa agortzen bada, SMS mezuak bidaltzeari utziko zaio eta horren ordez, mezu elektronikoak bidaliko dira.",
"low_credits_warning_message_user": "Zure Cal.com kontua kreditu gutxirekin dabil. Zerbitzuan etenaldirik ez izateko, erosi kreditu gehigarriak. Zure saldoa agortzen bada, SMS mezuak bidaltzeari utziko zaio eta horren ordez, mezu elektronikoak bidaliko dira.",
"credit_limit_reached_message": "Zure Cal.com {{teamName}} taldeari kredituak agortu zaizkio. Ondorioz, SMS mezuak orain posta elektroniko bidez bidaltzen ari dira. SMS bidalketa berriro hasteko, erosi kreditu gehigarriak.",
"credit_limit_reached_message_user": "Zure Cal.com kontuaren kredituak agortu dira. Ondorioz, SMS mezuak orain posta elektroniko bidez bidaltzen ari dira. SMS bidalketak berriz hasteko, erosi kreditu gehigarriak.",
"current_credit_balance": "Uneko saldoa: {{balance}} kreditu",
"notification_about_your_booking": "Zure erreserba buruzko jakinarazpena",
"monthly_credits": "Hileko kredituak",
"total_credits": "Kreditu totalak: {{totalCredits}}",
"remaining_credits": "Geratzen diren kredituak: {{remainingCredits}}",
"additional_credits": "Kreditu gehigarriak",
"routing_form_next_in_queue": "{{count}} hurrengo ilaran",
"routing_form_select_members_to_email": "Bidali posta elektroniko erantzunak honi",
"routing_incomplete_booking_tab": "Osatu gabeko Erreserbak",
@@ -3172,5 +3204,10 @@
"matching": "Bat egitea",
"event_redirect": "Gertaera Birbideratzea",
"reset_form": "Formularioa Berrezarri",
"requires_credits": "Kredituak behar ditu",
"requires_credits_tooltip": "Ezaugarri hau erabiltzeko kreditu nahikoa behar duzu zure kontuan",
"available_credits": "Kreditu erabilgarriak",
"members_affected_by_disabling_delegation_credential": "Eragindako kideak",
"no_members_affected_by_disabling_delegation_credential": "Ez dago kiderik delegazio kredentzialak desgaitzeak eraginda",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Gehitu zure kate berriak honen gainean ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Peruttu: {{title}} {{date}}",
"event_reassigned_subject": "Uudelleenjaettu: {{title}} {{date}}",
"event_request_declined": "Tapahtumapyyntösi on hylätty",
"customize_calvideo_settings": "Mukauta Cal Video -asetuksia",
"calvideo_settings_description": "Määritä videokokousasetukset, mukaan lukien tallennusoikeudet järjestäjille ja osallistujille.",
"disable_recording_for_guests": "Poista tallennus vierailta",
"disable_recording_for_organizer": "Poista tallennus järjestäjältä",
"event_request_declined_recurring": "Toistuva tapahtumapyyntösi on hylätty",
"event_request_cancelled": "Varattu tapahtumasi on peruttu",
"event_request_reassigned": "Varattu tapahtumasi on jaettu uudelleen",
@@ -1599,6 +1603,7 @@
"team_url": "Tiimin URL",
"team_members": "Tiimin jäsenet",
"more": "Lisää",
"and_count_more": "ja {{count}} lisää",
"more_page_footer": "Pidämme mobiilisovellusta verkkosovelluksen jatkeena. Jos suoritat monimutkaisia toimintoja, käytä verkkosovellusta.",
"workflow_example_1": "Lähetä SMS-muistutus osallistujalle 24 tuntia ennen tapahtuman alkua",
"workflow_example_2": "Lähetä mukautettu SMS osallistujalle, kun tapahtuma siirretään",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Puhelinnumero (SMS-ilmoitukset)",
"attendee_email_variable": "Osallistujan sähköposti",
"attendee_email_info": "Varaajan sähköpostiosoite",
"booking_uid": "Varauksen UID",
"kbar_search_placeholder": "Kirjoita komento tai hae...",
"invalid_credential": "Näyttää siltä, että {{appName}}-sovelluksen käyttöoikeudet ovat vanhentuneet tai peruttu.",
"invalid_credential_action": "Asenna sovellus uudelleen",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Lisää kysymys",
"identifier": "Tunniste",
"duplicate_email": "Sähköposti on jo käytössä",
"enter_redirect_url_on_exit_description": "Syötä uudelleenohjaus-URL, johon osallistuja ohjataan, kun hän poistuu kokouksesta.",
"booking_with_payment_cancelled": "Tämän tapahtuman maksaminen ei ole enää mahdollista",
"booking_with_payment_cancelled_already_paid": "Varauksen maksu palautetaan pian.",
"booking_with_payment_cancelled_refunded": "Tämän varauksen maksu on palautettu.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Varausaika",
"routing_form_insights_submitted_at": "Lähetetty",
"copy_redirect_url": "Kopioi uudelleenohjaus-URL",
"redirect_url_on_exit": "Uudelleenohjaus-URL poistuessa",
"total_bookings_per_period": "Varaukset yhteensä ajanjaksolla",
"routed_to_per_period": "Reititetty kohteeseen ajanjaksolla",
"per_day": "Päivittäin",
@@ -3002,6 +3010,12 @@
"asc": "Nouseva",
"desc": "Laskeva",
"verify_email_change": "Vahvista sähköpostin muutos",
"buy_credits": "Osta krediittejä",
"credits": "Krediitit",
"view_and_manage_credits": "Tarkastele ja hallitse krediittejä",
"view_and_manage_credits_description": "Tarkastele ja hallitse krediittejä tekstiviestien lähettämistä varten. Yksi krediitti on arvoltaan 1¢ (USD). <0>Lue lisää</0>",
"buy_additional_credits": "Osta lisää krediittejä (0,01 $ per krediitti)",
"overview": "Yleiskatsaus",
"organization_slug_taken": "Organisaation lyhytnimi on jo käytössä",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Et voi luoda organisaatiota, koska olet jo osa organisaatiota",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Sinun täytyy suorittaa käyttäjän perehdytys loppuun ennen organisaation luomista",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Organisaation julkaisemiseen tarvittavaa lyhytosoitetta ei löytynyt",
"picklist": "Valintalistaus",
"most_cancelled_bookings": "Eniten perutut varaukset",
"interface_language": "Käyttöliittymän kieli",
"visitors_browser_language": "Vierailijan selaimen kieli",
"name_or_email": "Nimi tai sähköposti",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Jos yhteyshenkilöä ei löydy, käytä liidin omistajaa, jos sellainen on olemassa",
"credit_purchase_failed": "Krediittien osto epäonnistui. Yritä uudelleen tai ota yhteyttä tukeen.",
"minimum_of_credits_required": "Vähintään 50 krediittiä vaaditaan",
"enable_delegation_credential": "Ota delegointitunniste käyttöön",
"enable_delegation_credential_description": "Myönnä Cal.comille automaattinen pääsy kaikkien organisaation jäsenten kalentereihin ottamalla delegointitunniste käyttöön.",
"disable_delegation_credential": "Poista delegointitunniste käytöstä",
@@ -3165,6 +3183,20 @@
"results": "Tulokset",
"view_form": "Näytä lomake",
"sms_opt_out_message": "Lähetä STOP peruuttaaksesi SMS-viestit",
"team_credits_low_warning": "Tiimisi {{teamName}} krediitit ovat vähissä",
"user_credits_low_warning": "Krediittisi ovat vähissä",
"action_required_out_of_credits": "[Toimenpiteitä vaaditaan] Tiimisi {{teamName}} krediitit ovat loppuneet",
"action_required_user_out_of_credits": "[Toimenpiteitä vaaditaan] Krediittisi ovat loppuneet",
"low_credits_warning_message": "Cal.com-tiimisi {{teamName}} krediitit ovat vähissä. Välttääksesi palvelun keskeytymisen, osta lisää krediittejä. Jos saldosi loppuu, tekstiviestejä ei enää lähetetä, vaan ne lähetetään sähköposteina.",
"low_credits_warning_message_user": "Cal.com-tilisi krediitit ovat vähissä. Välttääksesi palvelun keskeytymisen, osta lisää krediittejä. Jos saldosi loppuu, tekstiviestejä ei enää lähetetä, vaan ne lähetetään sähköposteina.",
"credit_limit_reached_message": "Cal.com-tiimisi {{teamName}} krediitit ovat loppuneet. Tämän seurauksena tekstiviestit lähetetään nyt sähköpostitse. Jatkaaksesi tekstiviestien lähettämistä, osta lisää krediittejä.",
"credit_limit_reached_message_user": "Cal.com-tilisi krediitit ovat loppuneet. Tämän seurauksena tekstiviestit lähetetään nyt sähköpostitse. Jatkaaksesi tekstiviestien lähettämistä, osta lisää krediittejä.",
"current_credit_balance": "Nykyinen saldo: {{balance}} krediittiä",
"notification_about_your_booking": "Ilmoitus varauksestasi",
"monthly_credits": "Kuukausittaiset krediitit",
"total_credits": "Krediittejä yhteensä: {{totalCredits}}",
"remaining_credits": "Jäljellä olevat krediitit: {{remainingCredits}}",
"additional_credits": "Lisäkrediitit",
"routing_form_next_in_queue": "{{count}} seuraavana jonossa",
"routing_form_select_members_to_email": "Lähetä sähköpostivastaukset henkilöille",
"routing_incomplete_booking_tab": "Keskeneräiset varaukset",
@@ -3172,5 +3204,10 @@
"matching": "Vastaavuus",
"event_redirect": "Tapahtuman uudelleenohjaus",
"reset_form": "Nollaa lomake",
"requires_credits": "Vaatii krediittejä",
"requires_credits_tooltip": "Tarvitset riittävästi krediittejä tililläsi käyttääksesi tätä ominaisuutta",
"available_credits": "Käytettävissä olevat krediitit",
"members_affected_by_disabling_delegation_credential": "Vaikutuksen alaiset jäsenet",
"no_members_affected_by_disabling_delegation_credential": "Valtuutustietojen poistaminen käytöstä ei vaikuta kehenkään jäseneen",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Lisää uudet merkkijonot tämän yläpuolelle ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
+42 -5
View File
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Annulé : {{title}} le {{date}}",
"event_reassigned_subject": "Réaffecté : {{title}} le {{date}}",
"event_request_declined": "Votre demande d'événement a été refusée",
"customize_calvideo_settings": "Personnaliser les paramètres de Cal Video",
"calvideo_settings_description": "Configurez les préférences de réunion vidéo, y compris les autorisations d'enregistrement pour les hôtes et les participants.",
"disable_recording_for_guests": "Désactiver l'enregistrement pour les invités",
"disable_recording_for_organizer": "Désactiver l'enregistrement pour l'organisateur",
"event_request_declined_recurring": "Votre demande d'événement récurrent a été refusée",
"event_request_cancelled": "Votre événement planifié a été annulé",
"event_request_reassigned": "Votre événement programmé a été réaffecté",
@@ -700,7 +704,7 @@
"add_team_members_description": "Invitez d'autres personnes à rejoindre votre équipe.",
"add_team_member": "Ajouter un membre d'équipe",
"invite_new_member": "Inviter un nouveau membre d'équipe",
"invite_new_member_description": "Remarque : Cela <0>coûtera un siège supplémentaire (15 $/mois)</0> sur votre abonnement.",
"invite_new_member_description": "Remarque : Cela <0>coûtera une place supplémentaire (15 $/mois)</0> sur votre abonnement.",
"invite_new_team_member": "Invitez quelqu'un à rejoindre votre équipe.",
"upload_csv_file": "Télécharger un fichier .csv",
"invite_via_email": "Inviter par e-mail",
@@ -1133,13 +1137,13 @@
"duplicate": "Dupliquer",
"offer_seats": "Proposer des places",
"offer_seats_description": "Proposez des places de réservation. Cela désactive automatiquement les réservations d'invités et d'opt-in.",
"seats_available_one": "Siège disponible",
"seats_available_other": "Sièges disponibles",
"seats_available_one": "Place disponible",
"seats_available_other": "Places disponibles",
"seats_nearly_full": "Places presque toutes occupées",
"seats_half_full": "Les places partent vite",
"number_of_seats": "Nombre de places par réservation",
"set_instant_meeting_expiry_time_offset_description": "Définir la fenêtre de participation à la réunion (secondes) : La période en secondes pendant laquelle l'hôte peut rejoindre et démarrer la réunion. Après cette période, l'URL de participation à la réunion expirera.",
"enter_number_of_seats": "Saisir le nombre de sièges",
"enter_number_of_seats": "Saisir le nombre de places",
"you_can_manage_your_schedules": "Vous pouvez gérer vos disponibilités sur la page Disponibilité.",
"booking_full": "Plus de places disponibles",
"api_keys": "Clés API",
@@ -1599,6 +1603,7 @@
"team_url": "Lien de l'équipe",
"team_members": "Membres de l'équipe",
"more": "Plus",
"and_count_more": "et {{count}} de plus",
"more_page_footer": "Nous considérons l'application mobile comme une extension de l'application web. Si vous effectuez des actions complexes, veuillez vous référer à l'application web.",
"workflow_example_1": "Envoyer un rappel par SMS 24 heures avant le début de l'événement",
"workflow_example_2": "Envoyer un SMS personnalisé au participant lorsque l'événement est replanifié",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Numéro de téléphone (notifications par SMS)",
"attendee_email_variable": "Adresse e-mail du participant",
"attendee_email_info": "Adresse e-mail du participant",
"booking_uid": "UID de réservation",
"kbar_search_placeholder": "Saisissez une commande ou une recherche...",
"invalid_credential": "Oh non ! On dirait que l’autorisation a expiré ou a été révoquée. Veuillez la réinstaller.",
"invalid_credential_action": "Réinstaller l'application",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Ajouter une question",
"identifier": "Identifiant",
"duplicate_email": "L'adresse e-mail existe déjà",
"enter_redirect_url_on_exit_description": "Saisissez une URL de redirection vers laquelle le participant sera dirigé une fois qu'il quittera la réunion.",
"booking_with_payment_cancelled": "Payer pour cet événement n'est plus possible",
"booking_with_payment_cancelled_already_paid": "Un remboursement pour ce paiement de réservation est en route.",
"booking_with_payment_cancelled_refunded": "Ce paiement de réservation a été remboursé.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Réservé le",
"routing_form_insights_submitted_at": "Soumis le",
"copy_redirect_url": "Copier l'URL de redirection",
"redirect_url_on_exit": "URL de redirection à la sortie",
"total_bookings_per_period": "Total des réservations par période",
"routed_to_per_period": "Acheminé vers par période",
"per_day": "Par jour",
@@ -3002,6 +3010,12 @@
"asc": "Asc",
"desc": "Desc",
"verify_email_change": "Vérifier le changement d'e-mail",
"buy_credits": "Acheter des crédits",
"credits": "Crédits",
"view_and_manage_credits": "Voir et gérer les crédits",
"view_and_manage_credits_description": "Consultez et gérez les crédits pour l'envoi de SMS. Un crédit vaut 1¢ (USD). <0>En savoir plus</0>",
"buy_additional_credits": "Acheter des crédits supplémentaires (0,01 $ par crédit)",
"overview": "Aperçu",
"organization_slug_taken": "L'identifiant de l'organisation est déjà pris",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Vous ne pouvez pas créer une organisation car vous faites déjà partie d'une organisation",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Vous devez terminer l'intégration utilisateur avant de créer une organisation",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Impossible de trouver le slug pour publier l'organisation",
"picklist": "Liste de sélection",
"most_cancelled_bookings": "Réservations les plus annulées",
"interface_language": "Langue de l'interface",
"visitors_browser_language": "Langue du navigateur du visiteur",
"name_or_email": "Nom ou e-mail",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Si aucun contact n'est trouvé, se rabattre sur le propriétaire du lead s'il existe",
"credit_purchase_failed": "L'achat de crédits a échoué. Veuillez réessayer ou contacter le support.",
"minimum_of_credits_required": "Minimum de 50 crédits requis",
"enable_delegation_credential": "Activer l'identifiant de délégation",
"enable_delegation_credential_description": "Accordez à Cal.com un accès automatique aux calendriers de tous les membres de l'organisation en activant l'identifiant de délégation.",
"disable_delegation_credential": "Désactiver l'identifiant de délégation",
@@ -3165,6 +3183,20 @@
"results": "Résultats",
"view_form": "Voir le formulaire",
"sms_opt_out_message": "Envoyez STOP pour vous désinscrire des messages SMS",
"team_credits_low_warning": "Votre équipe {{teamName}} manque de crédits",
"user_credits_low_warning": "Vous manquez de crédits",
"action_required_out_of_credits": "[Action requise] Votre équipe {{teamName}} n'a plus de crédits",
"action_required_user_out_of_credits": "[Action requise] Vous n'avez plus de crédits",
"low_credits_warning_message": "Votre équipe Cal.com {{teamName}} manque de crédits. Pour éviter toute interruption de service, veuillez acheter des crédits supplémentaires. Si votre solde est épuisé, les SMS cesseront d'être envoyés et seront envoyés par e-mail à la place.",
"low_credits_warning_message_user": "Votre compte Cal.com manque de crédits. Pour éviter toute interruption de service, veuillez acheter des crédits supplémentaires. Si votre solde est épuisé, les SMS cesseront d'être envoyés et seront envoyés par e-mail à la place.",
"credit_limit_reached_message": "Votre équipe Cal.com {{teamName}} n'a plus de crédits. Par conséquent, les SMS sont maintenant envoyés par e-mail. Pour reprendre l'envoi de SMS, veuillez acheter des crédits supplémentaires.",
"credit_limit_reached_message_user": "Votre compte Cal.com n'a plus de crédits. Par conséquent, les messages SMS sont désormais envoyés par e-mail. Pour reprendre l'envoi de SMS, veuillez acheter des crédits supplémentaires.",
"current_credit_balance": "Solde actuel : {{balance}} crédits",
"notification_about_your_booking": "Notification concernant votre réservation",
"monthly_credits": "Crédits mensuels",
"total_credits": "Total des crédits : {{totalCredits}}",
"remaining_credits": "Crédits restants : {{remainingCredits}}",
"additional_credits": "Crédits supplémentaires",
"routing_form_next_in_queue": "{{count}} suivant(s) dans la file d'attente",
"routing_form_select_members_to_email": "Envoyer les réponses par e-mail à",
"routing_incomplete_booking_tab": "Réservations incomplètes",
@@ -3172,5 +3204,10 @@
"matching": "Correspondance",
"event_redirect": "Redirection d'événement",
"reset_form": "Réinitialiser le formulaire",
"requires_credits": "Nécessite des crédits",
"requires_credits_tooltip": "Vous devez avoir suffisamment de crédits sur votre compte pour utiliser cette fonctionnalité",
"available_credits": "Crédits disponibles",
"members_affected_by_disabling_delegation_credential": "Membres affectés",
"no_members_affected_by_disabling_delegation_credential": "Aucun membre affecté par la désactivation des identifiants de délégation",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Ajoutez vos nouvelles chaînes ci-dessus ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "בוטל: {{title}} ב־{{date}}",
"event_reassigned_subject": "הועבר: {{title}} ב-{{date}}",
"event_request_declined": "בקשת האירוע שלך נדחתה",
"customize_calvideo_settings": "התאמה אישית של הגדרות Cal Video",
"calvideo_settings_description": "הגדר העדפות פגישות וידאו כולל הרשאות הקלטה למארחים ומשתתפים.",
"disable_recording_for_guests": "השבת הקלטה למשתתפים",
"disable_recording_for_organizer": "השבת הקלטה למארגן",
"event_request_declined_recurring": "בקשת האירוע החוזר שלך נדחתה",
"event_request_cancelled": "האירוע המתוכנן שלך בוטל",
"event_request_reassigned": "האירוע המתוכנן שלך הועבר",
@@ -1599,6 +1603,7 @@
"team_url": "כתובת ה-URL של הצוות",
"team_members": "חברי הצוות",
"more": "עוד",
"and_count_more": "ועוד {{count}}",
"more_page_footer": "אנחנו רואים באפליקציה לנייד הרחבה של אפליקציית האינטרנט. אם עליך לבצע פעולות מורכבות, כדאי לחזור לאפליקציית האינטרנט.",
"workflow_example_1": "לשלוח תזכורת באמצעות SMS למשתתף/ת 24 שעות לפני תחילת האירוע",
"workflow_example_2": "לשלוח הודעת SMS מותאמת אישית למשתתף/ת אם מועד האירוע משתנה",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "מספר טלפון (להודעות SMS)",
"attendee_email_variable": "כתובת הדוא\"ל של המשתתף",
"attendee_email_info": "כתובת הדוא\"ל של האדם שביצע את ההזמנה",
"booking_uid": "מזהה הזמנה",
"kbar_search_placeholder": "הקלד/י פקודה או חפש/י...",
"invalid_credential": "נראה שתוקף ההרשאה פג או שההרשאה בוטלה. יש להתקין מחדש שוב.",
"invalid_credential_action": "להתקין את היישום מחדש",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "הוסף שאלה",
"identifier": "מזהה",
"duplicate_email": "מייל כבר קיים",
"enter_redirect_url_on_exit_description": "הזן כתובת URL להפניה אליה המשתתף יישלח לאחר שיעזוב את הפגישה.",
"booking_with_payment_cancelled": "תשלום עבור ארוע זה כבר אינו נתמך",
"booking_with_payment_cancelled_already_paid": "זיכוי עבור התשלום של תזמון זה כבר בדרך.",
"booking_with_payment_cancelled_refunded": "התשלום עבור תזמון זה זוכה.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "מועד ההזמנה",
"routing_form_insights_submitted_at": "מועד ההגשה",
"copy_redirect_url": "העתק כתובת URL להפניה",
"redirect_url_on_exit": "כתובת URL להפניה ביציאה",
"total_bookings_per_period": "סך הפגישות לתקופה",
"routed_to_per_period": "הופנה ל- לתקופה",
"per_day": "ליום",
@@ -3002,6 +3010,12 @@
"asc": "סדר עולה",
"desc": "סדר יורד",
"verify_email_change": "אימות שינוי כתובת דוא\"ל",
"buy_credits": "קנה נקודות זכות",
"credits": "נקודות זכות",
"view_and_manage_credits": "צפה ונהל נקודות זכות",
"view_and_manage_credits_description": "צפה ונהל נקודות זכות לשליחת הודעות SMS. נקודת זכות אחת שווה 1¢ (דולר). <0>למידע נוסף</0>",
"buy_additional_credits": "קנה נקודות זכות נוספות (0.01$ לנקודה)",
"overview": "סקירה כללית",
"organization_slug_taken": "כתובת הארגון כבר תפוסה",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "אינך יכול ליצור ארגון מכיוון שאתה כבר חלק מארגון",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "עליך להשלים את תהליך הקליטה למשתמש לפני יצירת ארגון",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "לא ניתן למצוא מזהה URL לפרסום הארגון",
"picklist": "רשימת בחירה",
"most_cancelled_bookings": "הזמנות שבוטלו הכי הרבה",
"interface_language": "שפת ממשק",
"visitors_browser_language": "שפת הדפדפן של המבקר",
"name_or_email": "שם או אימייל",
"salesforce_round_robin_skip_fallback_to_lead_owner": "אם לא נמצא איש קשר, חזור לבעל הליד אם הוא קיים",
"credit_purchase_failed": "רכישת נקודות זכות נכשלה. אנא נסה שוב או פנה לתמיכה.",
"minimum_of_credits_required": "נדרשות לפחות 50 נקודות זכות",
"enable_delegation_credential": "הפעל אישור האצלה",
"enable_delegation_credential_description": "העניק ל-Cal.com גישה אוטומטית ללוחות השנה של כל חברי הארגון על ידי הפעלת אישור האצלה.",
"disable_delegation_credential": "השבת אישור האצלה",
@@ -3165,6 +3183,20 @@
"results": "תוצאות",
"view_form": "צפייה בטופס",
"sms_opt_out_message": "שלח STOP כדי לבטל את הרשמתך להודעות SMS",
"team_credits_low_warning": "לצוות שלך {{teamName}} נותרו מעט נקודות זכות",
"user_credits_low_warning": "נותרו לך מעט נקודות זכות",
"action_required_out_of_credits": "[נדרשת פעולה] לצוות שלך {{teamName}} אזלו נקודות הזכות",
"action_required_user_out_of_credits": "[נדרשת פעולה] אזלו לך נקודות הזכות",
"low_credits_warning_message": "לצוות Cal.com שלך {{teamName}} נותרו מעט נקודות זכות. כדי למנוע הפרעה בשירות, אנא רכוש נקודות זכות נוספות. אם היתרה שלך תתאפס, הודעות SMS יפסיקו להישלח ויישלחו כהודעות דוא\"ל במקום.",
"low_credits_warning_message_user": "לחשבון Cal.com שלך נותרו מעט נקודות זכות. כדי למנוע הפרעה בשירות, אנא רכוש נקודות זכות נוספות. אם היתרה שלך תתאפס, הודעות SMS יפסיקו להישלח ויישלחו כהודעות דוא\"ל במקום.",
"credit_limit_reached_message": "לצוות Cal.com שלך {{teamName}} אזלו נקודות הזכות. כתוצאה מכך, הודעות SMS נשלחות כעת באמצעות דוא\"ל במקום. כדי לחדש את שליחת ה-SMS, אנא רכוש נקודות זכות נוספות.",
"credit_limit_reached_message_user": "לחשבון Cal.com שלך נגמרו הקרדיטים. כתוצאה מכך, הודעות SMS נשלחות כעת באמצעות דוא\"ל במקום. כדי לחדש את שליחת ה-SMS, אנא רכוש קרדיטים נוספים.",
"current_credit_balance": "יתרה נוכחית: {{balance}} קרדיטים",
"notification_about_your_booking": "התראה לגבי ההזמנה שלך",
"monthly_credits": "קרדיטים חודשיים",
"total_credits": "סך הקרדיטים: {{totalCredits}}",
"remaining_credits": "קרדיטים שנותרו: {{remainingCredits}}",
"additional_credits": "קרדיטים נוספים",
"routing_form_next_in_queue": "{{count}} הבאים בתור",
"routing_form_select_members_to_email": "שלח תגובות בדוא\"ל אל",
"routing_incomplete_booking_tab": "הזמנות לא מושלמות",
@@ -3172,5 +3204,10 @@
"matching": "התאמה",
"event_redirect": "הפניית אירוע",
"reset_form": "איפוס טופס",
"requires_credits": "דורש קרדיטים",
"requires_credits_tooltip": "אתה צריך מספיק קרדיטים בחשבונך כדי להשתמש בתכונה זו",
"available_credits": "קרדיטים זמינים",
"members_affected_by_disabling_delegation_credential": "חברים מושפעים",
"no_members_affected_by_disabling_delegation_credential": "אין חברים שמושפעים מביטול אישור האצלה",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Lemondva: {{title}} ekkor: {{date}}",
"event_reassigned_subject": "Átütemezve: {{title}} ekkor: {{date}}",
"event_request_declined": "Az esemény kérésed vissza lett utasítva",
"customize_calvideo_settings": "Cal Video beállítások testreszabása",
"calvideo_settings_description": "Videótalálkozó beállítások konfigurálása, beleértve a felvételkészítési jogosultságokat a házigazdák és résztvevők számára.",
"disable_recording_for_guests": "Felvételkészítés letiltása vendégek számára",
"disable_recording_for_organizer": "Felvételkészítés letiltása szervező számára",
"event_request_declined_recurring": "Az ismétlődő esemény kérésed vissza lett utasítva",
"event_request_cancelled": "A lefoglalt időpontod vissza lett mondva",
"event_request_reassigned": "Az ütemezett eseménye átütemezésre került",
@@ -1599,6 +1603,7 @@
"team_url": "Csapat URL-je",
"team_members": "Csapattagok",
"more": "Több",
"and_count_more": "és még {{count}}",
"more_page_footer": "A mobilalkalmazást a webes alkalmazás kiterjesztésének tekintjük. Ha bonyolult műveleteket hajt végre, nézzen vissza a webalkalmazáshoz.",
"workflow_example_1": "SMS-emlékeztető küldése 24 órával az esemény kezdete előtt a résztvevőknek",
"workflow_example_2": "Egyéni SMS küldése, ha az eseményt átütemezték a résztvevőknek",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Telefonszám (SMS-értesítések)",
"attendee_email_variable": "Résztvevő e-mail",
"attendee_email_info": "A foglaló e-mail címe",
"booking_uid": "Foglalás azonosító",
"kbar_search_placeholder": "Írjon be egy parancsot vagy keressen...",
"invalid_credential": "Úgy tűnik a jogosultságok lejártak vagy vissza lettek vonva a következőhöz: {{appName}}.",
"invalid_credential_action": "Alkalmazás újratelepítése",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Kérdés hozzáadása",
"identifier": "Azonosító",
"duplicate_email": "Az e-mail duplikált",
"enter_redirect_url_on_exit_description": "Adjon meg egy átirányítási URL-t, ahová a résztvevő kerül, miután kilép a találkozóról.",
"booking_with_payment_cancelled": "Fizetés ezért az eseményért már nem lehetséges",
"booking_with_payment_cancelled_already_paid": "A visszatérítés ehhez a foglaláshoz úton van.",
"booking_with_payment_cancelled_refunded": "Ez a kifizetett foglalás már vissza lett térítve.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Foglalás időpontja",
"routing_form_insights_submitted_at": "Beküldés időpontja",
"copy_redirect_url": "Átirányítási URL másolása",
"redirect_url_on_exit": "Kilépés utáni átirányítási URL",
"total_bookings_per_period": "Összes foglalás időszakonként",
"routed_to_per_period": "Továbbítva időszakonként",
"per_day": "Naponta",
@@ -3002,6 +3010,12 @@
"asc": "Növekvő",
"desc": "Csökkenő",
"verify_email_change": "E-mail-cím módosításának megerősítése",
"buy_credits": "Kreditek vásárlása",
"credits": "Kreditek",
"view_and_manage_credits": "Kreditek megtekintése és kezelése",
"view_and_manage_credits_description": "SMS üzenetek küldéséhez szükséges kreditek megtekintése és kezelése. Egy kredit értéke 1¢ (USD). <0>További információ</0>",
"buy_additional_credits": "További kreditek vásárlása (0,01 USD kreditenként)",
"overview": "Áttekintés",
"organization_slug_taken": "A szervezet slug-ja már foglalt",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Nem hozhat létre szervezetet, mivel már tagja egy szervezetnek",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "A szervezet létrehozása előtt be kell fejeznie a felhasználói bevezetést",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Nem található slug a szervezet közzétételéhez",
"picklist": "Választólista",
"most_cancelled_bookings": "Legtöbbször lemondott foglalások",
"interface_language": "Felhasználói felület nyelve",
"visitors_browser_language": "Látogató böngészőjének nyelve",
"name_or_email": "Név vagy e-mail",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Ha nem található kapcsolat, visszalépés a lead tulajdonoshoz, ha létezik",
"credit_purchase_failed": "Kredit vásárlás sikertelen. Kérjük, próbálja újra vagy vegye fel a kapcsolatot az ügyfélszolgálattal.",
"minimum_of_credits_required": "Legalább 50 kredit szükséges",
"enable_delegation_credential": "Delegálási hitelesítő adat engedélyezése",
"enable_delegation_credential_description": "Adjon automatikus hozzáférést a Cal.com számára a szervezet összes tagjának naptárához a delegálási hitelesítő adat engedélyezésével.",
"disable_delegation_credential": "Delegálási hitelesítő adat letiltása",
@@ -3165,6 +3183,20 @@
"results": "Eredmények",
"view_form": "Űrlap megtekintése",
"sms_opt_out_message": "Küldd el a STOP szót az SMS-üzenetekről való leiratkozáshoz",
"team_credits_low_warning": "A(z) {{teamName}} csapatod kreditjei fogyóban vannak",
"user_credits_low_warning": "A kreditjeid fogyóban vannak",
"action_required_out_of_credits": "[Intézkedés szükséges] A(z) {{teamName}} csapatod kreditjei elfogytak",
"action_required_user_out_of_credits": "[Intézkedés szükséges] Elfogytak a kreditjeid",
"low_credits_warning_message": "A Cal.com {{teamName}} csapatod kreditjei fogyóban vannak. A szolgáltatás megszakadásának elkerülése érdekében vásárolj további krediteket. Ha az egyenleged elfogy, az SMS üzenetek küldése leáll, és helyette e-mailben lesznek elküldve.",
"low_credits_warning_message_user": "A Cal.com fiókod kreditjei fogyóban vannak. A szolgáltatás megszakadásának elkerülése érdekében vásárolj további krediteket. Ha az egyenleged elfogy, az SMS üzenetek küldése leáll, és helyette e-mailben lesznek elküldve.",
"credit_limit_reached_message": "A Cal.com {{teamName}} csapatod kreditjei elfogytak. Ennek eredményeként az SMS üzeneteket most e-mailben küldjük. Az SMS küldés folytatásához vásárolj további krediteket.",
"credit_limit_reached_message_user": "A Cal.com fiókod kreditjei elfogytak. Ennek következtében az SMS-üzenetek most e-mailben kerülnek kiküldésre. Az SMS-küldés folytatásához kérjük, vásárolj további krediteket.",
"current_credit_balance": "Jelenlegi egyenleg: {{balance}} kredit",
"notification_about_your_booking": "Értesítés a foglalásodról",
"monthly_credits": "Havi kreditek",
"total_credits": "Összes kredit: {{totalCredits}}",
"remaining_credits": "Fennmaradó kreditek: {{remainingCredits}}",
"additional_credits": "További kreditek",
"routing_form_next_in_queue": "{{count}} következő a sorban",
"routing_form_select_members_to_email": "E-mail válaszok küldése a következőknek",
"routing_incomplete_booking_tab": "Befejezetlen foglalások",
@@ -3172,5 +3204,10 @@
"matching": "Egyeztetés",
"event_redirect": "Esemény átirányítás",
"reset_form": "Űrlap visszaállítása",
"requires_credits": "Krediteket igényel",
"requires_credits_tooltip": "Ehhez a funkcióhoz elegendő kredittel kell rendelkezned a fiókodban",
"available_credits": "Elérhető kreditek",
"members_affected_by_disabling_delegation_credential": "Érintett tagok",
"no_members_affected_by_disabling_delegation_credential": "Nincsenek tagok, akiket érintene a delegálási hitelesítő adatok letiltása",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Adja hozzá az új karakterláncokat fent ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Cancellato: {{title}} il {{date}}",
"event_reassigned_subject": "Riassegnato: {{title}} il {{date}}",
"event_request_declined": "La tua richiesta per l'evento è stata rifiutata",
"customize_calvideo_settings": "Personalizza impostazioni Cal Video",
"calvideo_settings_description": "Configura le preferenze per le riunioni video, incluse le autorizzazioni di registrazione per host e partecipanti.",
"disable_recording_for_guests": "Disabilita registrazione per gli ospiti",
"disable_recording_for_organizer": "Disabilita registrazione per l'organizzatore",
"event_request_declined_recurring": "La tua richiesta per l'evento ricorrente è stata rifiutata",
"event_request_cancelled": "Il tuo evento programmato è stato cancellato",
"event_request_reassigned": "Il tuo evento programmato è stato riassegnato",
@@ -1599,6 +1603,7 @@
"team_url": "URL del team",
"team_members": "Membri del team",
"more": "Altro",
"and_count_more": "e altri {{count}}",
"more_page_footer": "Consideriamo l'applicazione mobile un'estensione dell'applicazione web. Se stai eseguendo delle azioni complesse, ti invitiamo a fare riferimento all'applicazione web.",
"workflow_example_1": "Invia al partecipante un promemoria via SMS 24 ore prima dell'inizio dell'evento",
"workflow_example_2": "Invia al partecipante un SMS personalizzato se l'evento viene riprogrammato",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Numero di telefono (notifiche SMS)",
"attendee_email_variable": "E-mail partecipante",
"attendee_email_info": "E-mail della persona che prenota",
"booking_uid": "UID prenotazione",
"kbar_search_placeholder": "Digita un comando o esegui una ricerca...",
"invalid_credential": "Errore! Sembra che l'autorizzazione sia scaduta o che sia stata revocata. Prova a reinstallare.",
"invalid_credential_action": "Reinstalla app",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Aggiungi una domanda",
"identifier": "Identificatore",
"duplicate_email": "Indirizzo e-mail duplicato",
"enter_redirect_url_on_exit_description": "Inserisci un URL di reindirizzamento verso cui il partecipante verrà inviato una volta terminata la riunione.",
"booking_with_payment_cancelled": "Non è più possibile pagare per questo evento",
"booking_with_payment_cancelled_already_paid": "È in corso il rimborso del pagamento per questa prenotazione.",
"booking_with_payment_cancelled_refunded": "Il pagamento per questa prenotazione è stato rimborsato.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Data prenotazione",
"routing_form_insights_submitted_at": "Data invio",
"copy_redirect_url": "Copia URL di reindirizzamento",
"redirect_url_on_exit": "URL di reindirizzamento all'uscita",
"total_bookings_per_period": "Prenotazioni totali per periodo",
"routed_to_per_period": "Instradamenti per periodo",
"per_day": "Al giorno",
@@ -3002,6 +3010,12 @@
"asc": "Crescente",
"desc": "Decrescente",
"verify_email_change": "Verifica la modifica dell'email",
"buy_credits": "Acquista crediti",
"credits": "Crediti",
"view_and_manage_credits": "Visualizza e gestisci crediti",
"view_and_manage_credits_description": "Visualizza e gestisci i crediti per l'invio di messaggi SMS. Un credito vale 1¢ (USD). <0>Scopri di più</0>",
"buy_additional_credits": "Acquista crediti aggiuntivi ($0.01 per credito)",
"overview": "Panoramica",
"organization_slug_taken": "Lo slug dell'organizzazione è già stato preso",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Non puoi creare un'organizzazione poiché fai già parte di un'organizzazione",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Devi completare l'onboarding utente prima di creare un'organizzazione",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Impossibile trovare lo slug per pubblicare l'organizzazione",
"picklist": "Lista di selezione",
"most_cancelled_bookings": "Prenotazioni più cancellate",
"interface_language": "Lingua dell'interfaccia",
"visitors_browser_language": "Lingua del browser del visitatore",
"name_or_email": "Nome o email",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Se non viene trovato alcun contatto, passa al proprietario del lead se esiste",
"credit_purchase_failed": "Acquisto crediti fallito. Riprova o contatta l'assistenza.",
"minimum_of_credits_required": "Minimo di 50 crediti richiesti",
"enable_delegation_credential": "Abilita credenziale di delega",
"enable_delegation_credential_description": "Concedi a Cal.com l'accesso automatico ai calendari di tutti i membri dell'organizzazione abilitando la credenziale di delega.",
"disable_delegation_credential": "Disabilita credenziale di delega",
@@ -3165,6 +3183,20 @@
"results": "Risultati",
"view_form": "Visualizza modulo",
"sms_opt_out_message": "Invia STOP per disattivare i messaggi SMS",
"team_credits_low_warning": "Il tuo team {{teamName}} sta esaurendo i crediti",
"user_credits_low_warning": "Stai esaurendo i crediti",
"action_required_out_of_credits": "[Azione richiesta] Il tuo team {{teamName}} ha esaurito i crediti",
"action_required_user_out_of_credits": "[Azione richiesta] Hai esaurito i crediti",
"low_credits_warning_message": "Il tuo team Cal.com {{teamName}} sta esaurendo i crediti. Per evitare interruzioni del servizio, acquista crediti aggiuntivi. Se il saldo si esaurisce, i messaggi SMS smetteranno di essere inviati e verranno inviati come email.",
"low_credits_warning_message_user": "Il tuo account Cal.com sta esaurendo i crediti. Per evitare interruzioni del servizio, acquista crediti aggiuntivi. Se il saldo si esaurisce, i messaggi SMS smetteranno di essere inviati e verranno inviati come email.",
"credit_limit_reached_message": "Il tuo team Cal.com {{teamName}} ha esaurito i crediti. Di conseguenza, i messaggi SMS vengono ora inviati tramite email. Per riprendere l'invio di SMS, acquista crediti aggiuntivi.",
"credit_limit_reached_message_user": "Il tuo account Cal.com ha esaurito i crediti. Di conseguenza, i messaggi SMS vengono ora inviati tramite email. Per riprendere l'invio di SMS, acquista crediti aggiuntivi.",
"current_credit_balance": "Saldo attuale: {{balance}} crediti",
"notification_about_your_booking": "Notifica sulla tua prenotazione",
"monthly_credits": "Crediti mensili",
"total_credits": "Crediti totali: {{totalCredits}}",
"remaining_credits": "Crediti rimanenti: {{remainingCredits}}",
"additional_credits": "Crediti aggiuntivi",
"routing_form_next_in_queue": "{{count}} successivi in coda",
"routing_form_select_members_to_email": "Invia risposte email a",
"routing_incomplete_booking_tab": "Prenotazioni incomplete",
@@ -3172,5 +3204,10 @@
"matching": "Corrispondenza",
"event_redirect": "Reindirizzamento evento",
"reset_form": "Reimposta modulo",
"requires_credits": "Richiede crediti",
"requires_credits_tooltip": "Devi avere abbastanza crediti nel tuo account per utilizzare questa funzionalità",
"available_credits": "Crediti disponibili",
"members_affected_by_disabling_delegation_credential": "Membri interessati",
"no_members_affected_by_disabling_delegation_credential": "Nessun membro interessato dalla disabilitazione delle credenziali di delega",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Aggiungi le tue nuove stringhe qui sopra ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "{{date}} に {{title}} がキャンセルされました",
"event_reassigned_subject": "再割り当て: {{date}}の{{title}}",
"event_request_declined": "イベントのリクエストが拒否されました",
"customize_calvideo_settings": "Cal Videoの設定をカスタマイズ",
"calvideo_settings_description": "ホストと参加者の録画権限を含むビデオ会議の設定を構成します。",
"disable_recording_for_guests": "ゲストの録画を無効にする",
"disable_recording_for_organizer": "主催者の録画を無効にする",
"event_request_declined_recurring": "繰り返しイベントのリクエストが拒否されました",
"event_request_cancelled": "スケジュール設定済みのイベントがキャンセルされました",
"event_request_reassigned": "予定されていたイベントが再割り当てされました",
@@ -1599,6 +1603,7 @@
"team_url": "チーム URL",
"team_members": "チームメンバー",
"more": "詳細情報",
"and_count_more": "他{{count}}件",
"more_page_footer": "私たちは、モバイルアプリケーションを Web アプリケーションの延長として捉えています。複雑な操作を行う場合には、Web アプリケーションを参照してください。",
"workflow_example_1": "イベントの開始 24 時間前に出席者に SMS で通知を送信する",
"workflow_example_2": "イベントのスケジュールが変更された際に、出席者にカスタム SMS を送信する",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "電話番号(SMS 通知)",
"attendee_email_variable": "出席者のメールアドレス",
"attendee_email_info": "予約者のメールアドレス",
"booking_uid": "予約UID",
"kbar_search_placeholder": "コマンドを入力するか、検索してください...",
"invalid_credential": "アクセス許可の有効期限が切れたか、取り消されたようです。もう一度インストールしてください。",
"invalid_credential_action": "アプリを再インストール",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "質問を追加",
"identifier": "ID",
"duplicate_email": "メールが重複しています",
"enter_redirect_url_on_exit_description": "参加者が会議を退出した後にリダイレクトされるURLを入力してください。",
"booking_with_payment_cancelled": "このイベントの支払いはもうできません",
"booking_with_payment_cancelled_already_paid": "この予約に関するお支払いの払い戻しについては、現在処理中です。",
"booking_with_payment_cancelled_refunded": "この予約に関するお支払いは、返金されています。",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "予約日時",
"routing_form_insights_submitted_at": "送信日時",
"copy_redirect_url": "リダイレクトURLをコピー",
"redirect_url_on_exit": "退出時のリダイレクトURL",
"total_bookings_per_period": "期間ごとの予約総数",
"routed_to_per_period": "期間ごとの振り分け先",
"per_day": "1日あたり",
@@ -3002,6 +3010,12 @@
"asc": "昇順",
"desc": "降順",
"verify_email_change": "メールアドレスの変更を確認",
"buy_credits": "クレジットを購入",
"credits": "クレジット",
"view_and_manage_credits": "クレジットの表示と管理",
"view_and_manage_credits_description": "SMSメッセージ送信用のクレジットを表示・管理します。1クレジットは1¢(USD)に相当します。<0>詳細を見る</0>",
"buy_additional_credits": "追加クレジットを購入(1クレジットあたり$0.01)",
"overview": "概要",
"organization_slug_taken": "組織のスラッグはすでに使用されています",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "すでに組織に所属しているため、新しい組織を作成することはできません",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "組織を作成する前にユーザーオンボーディングを完了する必要があります",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "組織を公開するためのスラッグが見つかりませんでした",
"picklist": "選択リスト",
"most_cancelled_bookings": "最もキャンセルされた予約",
"interface_language": "インターフェース言語",
"visitors_browser_language": "訪問者のブラウザ言語",
"name_or_email": "名前またはメールアドレス",
"salesforce_round_robin_skip_fallback_to_lead_owner": "連絡先が見つからない場合、リード所有者が存在すればそちらにフォールバックする",
"credit_purchase_failed": "クレジット購入に失敗しました。もう一度お試しいただくかサポートにお問い合わせください。",
"minimum_of_credits_required": "最低50クレジットが必要です",
"enable_delegation_credential": "委任認証情報を有効にする",
"enable_delegation_credential_description": "委任認証情報を有効にすることで、Cal.comに組織のすべてのメンバーのカレンダーへの自動アクセスを許可します。",
"disable_delegation_credential": "委任認証情報を無効にする",
@@ -3165,6 +3183,20 @@
"results": "結果",
"view_form": "フォームを表示",
"sms_opt_out_message": "SMSメッセージの配信を停止するにはSTOPと返信してください",
"team_credits_low_warning": "チーム{{teamName}}のクレジットが残り少なくなっています",
"user_credits_low_warning": "クレジットが残り少なくなっています",
"action_required_out_of_credits": "[対応必須] チーム{{teamName}}のクレジットがなくなりました",
"action_required_user_out_of_credits": "[対応必須] クレジットがなくなりました",
"low_credits_warning_message": "Cal.comチーム{{teamName}}のクレジットが残り少なくなっています。サービスの中断を避けるため、追加クレジットを購入してください。残高がなくなると、SMSメッセージの送信が停止し、代わりにメールで送信されます。",
"low_credits_warning_message_user": "Cal.comアカウントのクレジットが残り少なくなっています。サービスの中断を避けるため、追加クレジットを購入してください。残高がなくなると、SMSメッセージの送信が停止し、代わりにメールで送信されます。",
"credit_limit_reached_message": "Cal.comチーム{{teamName}}のクレジットがなくなりました。その結果、SMSメッセージは現在メールで送信されています。SMS送信を再開するには、追加クレジットを購入してください。",
"credit_limit_reached_message_user": "Cal.comアカウントのクレジットが不足しています。そのため、SMSメッセージはメールで送信されています。SMS送信を再開するには、追加クレジットを購入してください。",
"current_credit_balance": "現在の残高: {{balance}} クレジット",
"notification_about_your_booking": "予約に関する通知",
"monthly_credits": "月間クレジット",
"total_credits": "合計クレジット: {{totalCredits}}",
"remaining_credits": "残りのクレジット: {{remainingCredits}}",
"additional_credits": "追加クレジット",
"routing_form_next_in_queue": "キュー内の次は{{count}}件",
"routing_form_select_members_to_email": "メール返信の送信先",
"routing_incomplete_booking_tab": "未完了の予約",
@@ -3172,5 +3204,10 @@
"matching": "マッチング",
"event_redirect": "イベントリダイレクト",
"reset_form": "フォームをリセット",
"requires_credits": "クレジットが必要です",
"requires_credits_tooltip": "この機能を使用するには、アカウントに十分なクレジットが必要です",
"available_credits": "利用可能なクレジット",
"members_affected_by_disabling_delegation_credential": "影響を受けるメンバー",
"no_members_affected_by_disabling_delegation_credential": "委任認証情報の無効化による影響を受けるメンバーはいません",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ この上に新しい文字列を追加してください ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "បានលុបចោល៖ {{title}} នៅ {{date}}",
"event_reassigned_subject": "បានផ្ទេរឡើងវិញ៖ {{title}} នៅ {{date}}",
"event_request_declined": "សំណើព្រឹត្តិការណ៍របស់អ្នកត្រូវបានបដិសេធ",
"customize_calvideo_settings": "កំណត់ការកំណត់វីដេអូ Cal",
"calvideo_settings_description": "កំណត់រចនាសម្ព័ន្ធចំណូលចិត្តនៃការប្រជុំតាមវីដេអូ រួមទាំងការអនុញ្ញាតឱ្យថតសម្រាប់ម្ចាស់កម្មវិធី និងអ្នកចូលរួម។",
"disable_recording_for_guests": "បិទការថតសម្រាប់ភ្ញៀវ",
"disable_recording_for_organizer": "បិទការថតសម្រាប់អ្នករៀបចំ",
"event_request_declined_recurring": "សំណើព្រឹត្តិការណ៍កើតឡើងដដែលៗរបស់អ្នកត្រូវបានបដិសេធ",
"event_request_cancelled": "ព្រឹត្តិការណ៍ដែលបានគ្រោងទុករបស់អ្នកត្រូវបានលុបចោល",
"event_request_reassigned": "ព្រឹត្តិការណ៍ដែលបានកំណត់ពេលរបស់អ្នកត្រូវបានផ្ទេរឡើងវិញ",
@@ -1599,6 +1603,7 @@
"team_url": "URL ក្រុម",
"team_members": "សមាជិកក្រុម",
"more": "ច្រើនទៀត",
"and_count_more": "និង {{count}} ទៀត",
"more_page_footer": "យើងមើលឃើញកម្មវិធីចល័តជាការបន្ថែមនៃកម្មវិធីគេហទំព័រ។ ប្រសិនបើអ្នកកំពុងធ្វើសកម្មភាពស្មុគស្មាញណាមួយ សូមយោងទៅវិញទៅមកនៃកម្មវិធីគេហទំព័រ។",
"workflow_example_1": "ផ្ញើការរំលឹកតាមសារ SMS 24 ម៉ោងមុនព្រឹត្តិការណ៍ចាប់ផ្តើមទៅអ្នកចូលរួម",
"workflow_example_2": "ផ្ញើសារតាមសារ SMS ផ្ទាល់ខ្លួននៅពេលព្រឹត្តិការណ៍ត្រូវបានកែប្រែទៅអ្នកចូលរួម",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "លេខទូរស័ព្ទ (SMS ការជូនដំណឹង)",
"attendee_email_variable": "អ៊ីមែលអ្នកចូលរួម",
"attendee_email_info": "អ៊ីមែលរបស់អ្នកកក់",
"booking_uid": "លេខសម្គាល់ការកក់",
"kbar_search_placeholder": "វាយបញ្ជា ឬស្វែងរក...",
"invalid_credential": "វាហាក់ដូចជាសិទ្ធិបានផុតកំណត់ ឬត្រូវបានដកចេញសម្រាប់ {{appName}}.",
"invalid_credential_action": "ដំឡើងកម្មវិធីឡើងវិញ",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "បន្ថែមសំណួរ",
"identifier": "លេខសម្គាល់",
"duplicate_email": "អ៊ីមែលស្ទួន",
"enter_redirect_url_on_exit_description": "បញ្ចូល URL បញ្ជូនបន្តដែលអ្នកចូលរួមនឹងត្រូវបានបញ្ជូនទៅនៅពេលពួកគេចាកចេញពីការប្រជុំ។",
"booking_with_payment_cancelled": "ការទូទាត់សម្រាប់ព្រឹត្តិការណ៍នេះមិនអាចធ្វើបានទៀតទេ",
"booking_with_payment_cancelled_already_paid": "ការសងប្រាក់វិញសម្រាប់ការទូទាត់នេះកំពុងត្រូវបានដំណើរការ។",
"booking_with_payment_cancelled_refunded": "ការទូទាត់នេះត្រូវបានសងប្រាក់វិញ។",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "កាលបរិច្ឆេទកក់",
"routing_form_insights_submitted_at": "កាលបរិច្ឆេទដាក់ស្នើ",
"copy_redirect_url": "ចម្លងតំណ URL បញ្ជូនបន្ត",
"redirect_url_on_exit": "URL បញ្ជូនបន្តនៅពេលចាកចេញ",
"total_bookings_per_period": "ការកក់សរុបក្នុងមួយរយៈពេល",
"routed_to_per_period": "បញ្ជូនទៅក្នុងមួយរយៈពេល",
"per_day": "ក្នុងមួយថ្ងៃ",
@@ -3002,6 +3010,12 @@
"asc": "ឡើង",
"desc": "ចុះ",
"verify_email_change": "ផ្ទៀងផ្ទាត់ការផ្លាស់ប្តូរអ៊ីមែល",
"buy_credits": "ទិញក្រេឌីត",
"credits": "ក្រេឌីត",
"view_and_manage_credits": "មើល និងគ្រប់គ្រងក្រេឌីត",
"view_and_manage_credits_description": "មើល និងគ្រប់គ្រងក្រេឌីតសម្រាប់ការផ្ញើសារ SMS។ ក្រេឌីតមួយមានតម្លៃ 1¢ (USD)។ <0>ស្វែងយល់បន្ថែម</0>",
"buy_additional_credits": "ទិញក្រេឌីតបន្ថែម ($0.01 ក្នុងមួយក្រេឌីត)",
"overview": "ទិដ្ឋភាពទូទៅ",
"organization_slug_taken": "ឈ្មោះសំគាល់អង្គការត្រូវបានគេប្រើរួចហើយ",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "អ្នកមិនអាចបង្កើតអង្គការបានទេ ដោយសារអ្នកជាផ្នែកមួយនៃអង្គការរួចហើយ",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "អ្នកត្រូវតែបញ្ចប់ការណែនាំអ្នកប្រើប្រាស់ថ្មីមុនពេលបង្កើតអង្គការ",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "មិនអាចរកឃើញ slug ដើម្បីផ្សព្វផ្សាយអង្គភាពទេ",
"picklist": "បញ្ជីជម្រើស",
"most_cancelled_bookings": "ការកក់ដែលត្រូវបានលុបចោលច្រើនបំផុត",
"interface_language": "ភាសាចំណុចប្រទាក់",
"visitors_browser_language": "ភាសាកម្មវិធីរុករករបស់អ្នកទស្សនា",
"name_or_email": "ឈ្មោះ ឬអ៊ីមែល",
"salesforce_round_robin_skip_fallback_to_lead_owner": "ប្រសិនបើមិនមានទំនាក់ទំនងត្រូវបានរកឃើញទេ ត្រឡប់ទៅម្ចាស់ Lead ប្រសិនបើមាន",
"credit_purchase_failed": "ការទិញក្រេឌីតបានបរាជ័យ។ សូមព្យាយាមម្តងទៀត ឬទាក់ទងផ្នែកគាំទ្រ។",
"minimum_of_credits_required": "ត្រូវការក្រេឌីតអប្បបរមា 50",
"enable_delegation_credential": "បើកដំណើរការលិខិតសម្គាល់ប្រគល់សិទ្ធិ",
"enable_delegation_credential_description": "ផ្តល់សិទ្ធិឱ្យ Cal.com ចូលប្រើប្រតិទិនរបស់សមាជិកអង្គការទាំងអស់ដោយស្វ័យប្រវត្តិ តាមរយៈការបើកដំណើរការលិខិតសម្គាល់ប្រគល់សិទ្ធិ។",
"disable_delegation_credential": "បិទដំណើរការលិខិតសម្គាល់ប្រគល់សិទ្ធិ",
@@ -3165,6 +3183,20 @@
"results": "លទ្ធផល",
"view_form": "មើលទម្រង់",
"sms_opt_out_message": "សរសេរ STOP ដើម្បីឈប់ទទួលសារ SMS",
"team_credits_low_warning": "ក្រុមរបស់អ្នក {{teamName}} កំពុងខ្វះក្រេឌីត",
"user_credits_low_warning": "អ្នកកំពុងខ្វះក្រេឌីត",
"action_required_out_of_credits": "[តម្រូវឱ្យមានសកម្មភាព] ក្រុមរបស់អ្នក {{teamName}} អស់ក្រេឌីតហើយ",
"action_required_user_out_of_credits": "[តម្រូវឱ្យមានសកម្មភាព] អ្នកអស់ក្រេឌីតហើយ",
"low_credits_warning_message": "ក្រុម Cal.com របស់អ្នក {{teamName}} កំពុងខ្វះក្រេឌីត។ ដើម្បីជៀសវាងការរំខានណាមួយក្នុងសេវាកម្ម សូមទិញក្រេឌីតបន្ថែម។ ប្រសិនបើសមតុល្យរបស់អ្នកអស់ សារ SMS នឹងឈប់ផ្ញើ ហើយនឹងត្រូវបានផ្ញើជាអ៊ីមែលជំនួសវិញ។",
"low_credits_warning_message_user": "គណនី Cal.com របស់អ្នកកំពុងខ្វះក្រេឌីត។ ដើម្បីជៀសវាងការរំខានណាមួយក្នុងសេវាកម្ម សូមទិញក្រេឌីតបន្ថែម។ ប្រសិនបើសមតុល្យរបស់អ្នកអស់ សារ SMS នឹងឈប់ផ្ញើ ហើយនឹងត្រូវបានផ្ញើជាអ៊ីមែលជំនួសវិញ។",
"credit_limit_reached_message": "ក្រុម Cal.com របស់អ្នក {{teamName}} អស់ក្រេឌីតហើយ។ ជាលទ្ធផល សារ SMS ឥឡូវនេះកំពុងត្រូវបានផ្ញើតាមអ៊ីមែលជំនួសវិញ។ ដើម្បីបន្តការផ្ញើ SMS សូមទិញក្រេឌីតបន្ថែម។",
"credit_limit_reached_message_user": "គណនី Cal.com របស់អ្នកអស់ក្រេឌីតហើយ។ ជាលទ្ធផល សារ SMS ត្រូវបានផ្ញើតាមអ៊ីមែលជំនួសវិញ។ ដើម្បីបន្តការផ្ញើ SMS សូមទិញក្រេឌីតបន្ថែម។",
"current_credit_balance": "សមតុល្យបច្ចុប្បន្ន៖ {{balance}} ក្រេឌីត",
"notification_about_your_booking": "ការជូនដំណឹងអំពីការកក់របស់អ្នក",
"monthly_credits": "ក្រេឌីតប្រចាំខែ",
"total_credits": "ក្រេឌីតសរុប៖ {{totalCredits}}",
"remaining_credits": "ក្រេឌីតនៅសល់៖ {{remainingCredits}}",
"additional_credits": "ក្រេឌីតបន្ថែម",
"routing_form_next_in_queue": "{{count}} បន្ទាប់នៅក្នុងជួរ",
"routing_form_select_members_to_email": "ផ្ញើការឆ្លើយតបតាមអ៊ីមែលទៅកាន់",
"routing_incomplete_booking_tab": "ការកក់មិនពេញលេញ",
@@ -3172,5 +3204,10 @@
"matching": "ការផ្គូផ្គង",
"event_redirect": "ការបញ្ជូនបន្តព្រឹត្តិការណ៍",
"reset_form": "កំណត់ទម្រង់ឡើងវិញ",
"requires_credits": "តម្រូវឱ្យមានក្រេឌីត",
"requires_credits_tooltip": "អ្នកត្រូវការក្រេឌីតគ្រប់គ្រាន់នៅក្នុងគណនីរបស់អ្នកដើម្បីប្រើមុខងារនេះ",
"available_credits": "ក្រេឌីតដែលមាន",
"members_affected_by_disabling_delegation_credential": "សមាជិកដែលរងផលប៉ះពាល់",
"no_members_affected_by_disabling_delegation_credential": "គ្មានសមាជិកណាម្នាក់រងផលប៉ះពាល់ដោយការបិទលិខិតប្រគល់សិទ្ធិទេ",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ បន្ថែមខ្សែអក្សរថ្មីរបស់អ្នកនៅខាងលើនេះ ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "취소됨: {{title}}, 날짜 {{date}}",
"event_reassigned_subject": "재배정됨: {{date}}의 {{title}}",
"event_request_declined": "회의 요청이 거절되었습니다.",
"customize_calvideo_settings": "Cal 비디오 설정 사용자 지정",
"calvideo_settings_description": "호스트와 참석자를 위한 녹화 권한을 포함한 화상 회의 환경설정을 구성하세요.",
"disable_recording_for_guests": "게스트의 녹화 기능 비활성화",
"disable_recording_for_organizer": "주최자의 녹화 기능 비활성화",
"event_request_declined_recurring": "되풀이 이벤트 요청이 거부되었습니다",
"event_request_cancelled": "예약된 일정이 취소되었습니다",
"event_request_reassigned": "예약된 이벤트가 재배정되었습니다",
@@ -1599,6 +1603,7 @@
"team_url": "팀 URL",
"team_members": "팀원",
"more": "더 보기",
"and_count_more": "외 {{count}}개",
"more_page_footer": "모바일 애플리케이션은 웹 애플리케이션의 확장으로 취급됩니다. 복잡한 작업을 수행하는 경우 웹 애플리케이션을 다시 참조하십시오.",
"workflow_example_1": "이벤트가 시작되기 24시간 전에 참석자에게 SMS 알림 보내기",
"workflow_example_2": "이벤트 일정이 변경되면 참석자에게 사용자 정의 SMS 보내기",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "전화번호(SMS 알림)",
"attendee_email_variable": "참석자 이메일",
"attendee_email_info": "예약자 이메일",
"booking_uid": "예약 UID",
"kbar_search_placeholder": "명령어를 입력하거나 검색하세요...",
"invalid_credential": "죄송합니다! 권한이 만료되었거나 취소된 것 같습니다. 다시 설치하십시오.",
"invalid_credential_action": "앱 재설치",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "질문 추가",
"identifier": "ID",
"duplicate_email": "중복 이메일입니다",
"enter_redirect_url_on_exit_description": "참석자가 회의를 나갈 때 이동할 리디렉션 URL을 입력하세요.",
"booking_with_payment_cancelled": "이 이벤트는 더 이상 결제할 수 없습니다",
"booking_with_payment_cancelled_already_paid": "이 예약 결제에 대한 환불 처리가 진행 중입니다.",
"booking_with_payment_cancelled_refunded": "이 예약 결제는 환불 처리되었습니다.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "예약 시간",
"routing_form_insights_submitted_at": "제출 시간",
"copy_redirect_url": "리디렉션 URL 복사",
"redirect_url_on_exit": "종료 시 리디렉션 URL",
"total_bookings_per_period": "기간별 총 예약 수",
"routed_to_per_period": "기간별 라우팅 수",
"per_day": "일별",
@@ -3002,6 +3010,12 @@
"asc": "오름차순",
"desc": "내림차순",
"verify_email_change": "이메일 변경 확인",
"buy_credits": "크레딧 구매",
"credits": "크레딧",
"view_and_manage_credits": "크레딧 보기 및 관리",
"view_and_manage_credits_description": "SMS 메시지 전송을 위한 크레딧을 보고 관리하세요. 1크레딧은 1¢(USD)의 가치가 있습니다. <0>자세히 알아보기</0>",
"buy_additional_credits": "추가 크레딧 구매(크레딧당 $0.01)",
"overview": "개요",
"organization_slug_taken": "조직 슬러그가 이미 사용 중입니다",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "이미 조직의 일원이므로 새로운 조직을 만들 수 없습니다",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "조직을 만들기 전에 사용자 온보딩을 완료해야 합니다",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "조직을 게시할 슬러그를 찾을 수 없습니다",
"picklist": "선택 목록",
"most_cancelled_bookings": "가장 많이 취소된 예약",
"interface_language": "인터페이스 언어",
"visitors_browser_language": "방문자의 브라우저 언어",
"name_or_email": "이름 또는 이메일",
"salesforce_round_robin_skip_fallback_to_lead_owner": "연락처를 찾을 수 없는 경우, 리드 소유자가 있으면 대체",
"credit_purchase_failed": "크레딧 구매에 실패했습니다. 다시 시도하거나 지원팀에 문의하세요.",
"minimum_of_credits_required": "최소 50 크레딧이 필요합니다",
"enable_delegation_credential": "위임 자격 증명 활성화",
"enable_delegation_credential_description": "위임 자격 증명을 활성화하여 Cal.com이 모든 조직 구성원의 캘린더에 자동으로 접근할 수 있도록 허용합니다.",
"disable_delegation_credential": "위임 자격 증명 비활성화",
@@ -3165,6 +3183,20 @@
"results": "결과",
"view_form": "양식 보기",
"sms_opt_out_message": "SMS 메시지 수신을 거부하려면 STOP을 문자로 보내세요",
"team_credits_low_warning": "{{teamName}} 팀의 크레딧이 부족합니다",
"user_credits_low_warning": "크레딧이 부족합니다",
"action_required_out_of_credits": "[조치 필요] {{teamName}} 팀의 크레딧이 소진되었습니다",
"action_required_user_out_of_credits": "[조치 필요] 크레딧이 소진되었습니다",
"low_credits_warning_message": "Cal.com의 {{teamName}} 팀 크레딧이 부족합니다. 서비스 중단을 방지하려면 추가 크레딧을 구매하세요. 잔액이 소진되면 SMS 메시지 전송이 중단되고 대신 이메일로 전송됩니다.",
"low_credits_warning_message_user": "Cal.com 계정의 크레딧이 부족합니다. 서비스 중단을 방지하려면 추가 크레딧을 구매하세요. 잔액이 소진되면 SMS 메시지 전송이 중단되고 대신 이메일로 전송됩니다.",
"credit_limit_reached_message": "Cal.com의 {{teamName}} 팀 크레딧이 소진되었습니다. 그 결과, SMS 메시지가 이제 이메일을 통해 전송됩니다. SMS 전송을 재개하려면 추가 크레딧을 구매하세요.",
"credit_limit_reached_message_user": "Cal.com 계정의 크레딧이 소진되었습니다. 이로 인해 SMS 메시지가 이메일을 통해 대신 전송되고 있습니다. SMS 전송을 재개하려면 추가 크레딧을 구매하세요.",
"current_credit_balance": "현재 잔액: {{balance}} 크레딧",
"notification_about_your_booking": "예약에 관한 알림",
"monthly_credits": "월간 크레딧",
"total_credits": "총 크레딧: {{totalCredits}}",
"remaining_credits": "남은 크레딧: {{remainingCredits}}",
"additional_credits": "추가 크레딧",
"routing_form_next_in_queue": "대기열에 {{count}}개 남음",
"routing_form_select_members_to_email": "이메일 응답을 보낼 대상 선택",
"routing_incomplete_booking_tab": "미완료 예약",
@@ -3172,5 +3204,10 @@
"matching": "매칭",
"event_redirect": "이벤트 리디렉션",
"reset_form": "양식 초기화",
"requires_credits": "크레딧 필요",
"requires_credits_tooltip": "이 기능을 사용하려면 계정에 충분한 크레딧이 있어야 합니다",
"available_credits": "사용 가능한 크레딧",
"members_affected_by_disabling_delegation_credential": "영향을 받는 멤버",
"no_members_affected_by_disabling_delegation_credential": "위임 자격 증명 비활성화로 영향을 받는 멤버 없음",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ 여기에 새 문자열을 추가하세요 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Geannuleerd: {{title}} op {{date}}",
"event_reassigned_subject": "Opnieuw toegewezen: {{title}} op {{date}}",
"event_request_declined": "Uw gebeurtenisverzoek is geweigerd",
"customize_calvideo_settings": "Cal video-instellingen aanpassen",
"calvideo_settings_description": "Configureer voorkeuren voor videovergaderingen, inclusief opnamerechten voor hosts en deelnemers.",
"disable_recording_for_guests": "Opname uitschakelen voor gasten",
"disable_recording_for_organizer": "Opname uitschakelen voor organisator",
"event_request_declined_recurring": "Uw verzoek voor een terugkerende gebeurtenis is geweigerd",
"event_request_cancelled": "Uw geplande gebeurtenis is geannuleerd",
"event_request_reassigned": "Je geplande afspraak is opnieuw toegewezen",
@@ -1599,6 +1603,7 @@
"team_url": "Team-URL",
"team_members": "Teamleden",
"more": "Meer",
"and_count_more": "en nog {{count}}",
"more_page_footer": "We zien de mobiele app als een verlengstuk van de webapp. Voor ingewikkelde acties raden we u aan de webapp te gebruiken.",
"workflow_example_1": "24 uur voor het begin van de gebeurtenis een sms-herinnering naar deelnemer versturen",
"workflow_example_2": "Aangepaste sms versturen naar deelnemer wanneer gebeurtenis wordt verplaatst",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Telefoonnummer (sms-meldingen)",
"attendee_email_variable": "E-mailadres deelnemer",
"attendee_email_info": "Het e-mailadres van de persoon die boekt",
"booking_uid": "Boeking UID",
"kbar_search_placeholder": "Typ een opdracht of zoek...",
"invalid_credential": "Oh nee! Het lijkt erop dat de machtiging is verlopen of is ingetrokken. Installeer het opnieuw.",
"invalid_credential_action": "Herinstalleer de app",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Vraag toevoegen",
"identifier": "ID",
"duplicate_email": "E-mailadres dubbel",
"enter_redirect_url_on_exit_description": "Voer een doorverwijzings-URL in waarnaar de deelnemer wordt gestuurd zodra deze de vergadering verlaat.",
"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.",
"booking_with_payment_cancelled_refunded": "Deze boekingsbetaling is terugbetaald.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Geboekt op",
"routing_form_insights_submitted_at": "Ingediend op",
"copy_redirect_url": "Kopieer doorverwijzings-URL",
"redirect_url_on_exit": "Doorverwijzings-URL bij afsluiten",
"total_bookings_per_period": "Totaal aantal boekingen per periode",
"routed_to_per_period": "Doorverwezen naar per periode",
"per_day": "Per dag",
@@ -3002,6 +3010,12 @@
"asc": "Oplopend",
"desc": "Aflopend",
"verify_email_change": "Verifieer e-mailwijziging",
"buy_credits": "Credits kopen",
"credits": "Credits",
"view_and_manage_credits": "Credits bekijken en beheren",
"view_and_manage_credits_description": "Bekijk en beheer credits voor het versturen van SMS-berichten. Eén credit is 1¢ (USD) waard. <0>Meer informatie</0>",
"buy_additional_credits": "Extra credits kopen ($0.01 per credit)",
"overview": "Overzicht",
"organization_slug_taken": "Organisatie-slug is al in gebruik",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Je kunt geen organisatie aanmaken omdat je al deel uitmaakt van een organisatie",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Je moet de gebruikers-onboarding voltooien voordat je een organisatie kunt aanmaken",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Kon geen slug vinden om de organisatie te publiceren",
"picklist": "Keuzelijst",
"most_cancelled_bookings": "Meest geannuleerde boekingen",
"interface_language": "Interfacetaal",
"visitors_browser_language": "Taal van de browser van de bezoeker",
"name_or_email": "Naam of e-mail",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Als er geen contactpersoon wordt gevonden, val dan terug op de lead-eigenaar als deze bestaat",
"credit_purchase_failed": "Aankoop van credits mislukt. Probeer het opnieuw of neem contact op met de klantenservice.",
"minimum_of_credits_required": "Minimaal 50 credits vereist",
"enable_delegation_credential": "Delegatiereferentie inschakelen",
"enable_delegation_credential_description": "Geef Cal.com automatisch toegang tot de agenda's van alle organisatieleden door delegatiereferentie in te schakelen.",
"disable_delegation_credential": "Delegatiereferentie uitschakelen",
@@ -3165,6 +3183,20 @@
"results": "Resultaten",
"view_form": "Formulier bekijken",
"sms_opt_out_message": "Stuur STOP om je af te melden voor sms-berichten",
"team_credits_low_warning": "Je team {{teamName}} heeft bijna geen credits meer",
"user_credits_low_warning": "Je hebt bijna geen credits meer",
"action_required_out_of_credits": "[Actie vereist] Je team {{teamName}} heeft geen credits meer",
"action_required_user_out_of_credits": "[Actie vereist] Je hebt geen credits meer",
"low_credits_warning_message": "Het Cal.com-team {{teamName}} heeft bijna geen credits meer. Om onderbrekingen in de service te voorkomen, koop je extra credits. Als je saldo op is, worden SMS-berichten niet meer verzonden en worden ze in plaats daarvan als e-mails verzonden.",
"low_credits_warning_message_user": "Je Cal.com-account heeft bijna geen credits meer. Om onderbrekingen in de service te voorkomen, koop je extra credits. Als je saldo op is, worden SMS-berichten niet meer verzonden en worden ze in plaats daarvan als e-mails verzonden.",
"credit_limit_reached_message": "Je Cal.com-team {{teamName}} heeft geen credits meer. Hierdoor worden SMS-berichten nu via e-mail verzonden. Om weer SMS-berichten te kunnen versturen, koop je extra credits.",
"credit_limit_reached_message_user": "Je Cal.com-account heeft geen credits meer. Hierdoor worden sms-berichten nu via e-mail verzonden. Om weer sms-berichten te kunnen versturen, koop je extra credits.",
"current_credit_balance": "Huidige saldo: {{balance}} credits",
"notification_about_your_booking": "Melding over je boeking",
"monthly_credits": "Maandelijkse credits",
"total_credits": "Totaal credits: {{totalCredits}}",
"remaining_credits": "Resterende credits: {{remainingCredits}}",
"additional_credits": "Extra credits",
"routing_form_next_in_queue": "{{count}} volgende in wachtrij",
"routing_form_select_members_to_email": "Stuur e-mailreacties naar",
"routing_incomplete_booking_tab": "Onvolledige boekingen",
@@ -3172,5 +3204,10 @@
"matching": "Overeenkomend",
"event_redirect": "Evenement doorverwijzing",
"reset_form": "Formulier resetten",
"requires_credits": "Vereist credits",
"requires_credits_tooltip": "Je hebt voldoende credits op je account nodig om deze functie te gebruiken",
"available_credits": "Beschikbare credits",
"members_affected_by_disabling_delegation_credential": "Getroffen leden",
"no_members_affected_by_disabling_delegation_credential": "Geen leden getroffen door het uitschakelen van delegatiereferentie",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Voeg uw nieuwe strings hierboven toe ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Avlyst: {{title}} kl. {{date}}",
"event_reassigned_subject": "Omfordelt: {{title}} den {{date}}",
"event_request_declined": "Din hendelsesforespørsel har blitt avvist",
"customize_calvideo_settings": "Tilpass Cal Video-innstillinger",
"calvideo_settings_description": "Konfigurer preferanser for videomøter, inkludert opptakstillatelser for verter og deltakere.",
"disable_recording_for_guests": "Deaktiver opptak for gjester",
"disable_recording_for_organizer": "Deaktiver opptak for arrangør",
"event_request_declined_recurring": "Din gjentagende hendelsesforespørsel har blitt avvist",
"event_request_cancelled": "Din planlagte hendelse ble avlyst",
"event_request_reassigned": "Din planlagte hendelse ble omfordelt",
@@ -1599,6 +1603,7 @@
"team_url": "Team URL",
"team_members": "Team-medlemmer",
"more": "Mer",
"and_count_more": "og {{count}} til",
"more_page_footer": "Vi ser på mobil-applikasjonen som en utvidelse av nettapplikasjonen. Hvis du skal utføre kompliserte handlinger, vennligst gå tilbake til nettapplikasjonen.",
"workflow_example_1": "Send SMS-påminnelse til deltakeren 24 timer før hendelsen starter",
"workflow_example_2": "Send en tilpasset SMS til deltakeren når en hendelse får nytt tidspunkt",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Telefonnummer (SMS-varsler)",
"attendee_email_variable": "Deltakerens e-post",
"attendee_email_info": "Den som booker sin e-post",
"booking_uid": "Bestillings-UID",
"kbar_search_placeholder": "Skriv inn en kommando eller søk...",
"invalid_credential": "Å nei! Det ser ut til at tillatelsen er utløpt eller tilbakekalt. Vennligst installer på nytt.",
"invalid_credential_action": "Installer appen på nytt",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Legg til et spørsmål",
"identifier": "Identifikator",
"duplicate_email": "E-post er duplikat",
"enter_redirect_url_on_exit_description": "Angi en omdirigerings-URL som deltakeren vil bli sendt til når de forlater møtet.",
"booking_with_payment_cancelled": "Betaling for dette arrangementet er ikke lenger mulig",
"booking_with_payment_cancelled_already_paid": "En refusjon for denne bestillingsbetalingen er på vei.",
"booking_with_payment_cancelled_refunded": "Denne bestillingsbetalingen er refundert.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Booket",
"routing_form_insights_submitted_at": "Sendt inn",
"copy_redirect_url": "Kopier omdirigeringsadresse",
"redirect_url_on_exit": "Omdirigerings-URL ved avslutning",
"total_bookings_per_period": "Totale bestillinger per periode",
"routed_to_per_period": "Videresendt til per periode",
"per_day": "Per dag",
@@ -3002,6 +3010,12 @@
"asc": "Stigende",
"desc": "Synkende",
"verify_email_change": "Bekreft endring av e-post",
"buy_credits": "Kjøp kreditter",
"credits": "Kreditter",
"view_and_manage_credits": "Vis og administrer kreditter",
"view_and_manage_credits_description": "Vis og administrer kreditter for å sende SMS-meldinger. Én kreditt er verdt 1¢ (USD). <0>Lær mer</0>",
"buy_additional_credits": "Kjøp flere kreditter ($0.01 per kreditt)",
"overview": "Oversikt",
"organization_slug_taken": "Organisasjonens kortnavn er allerede tatt",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Du kan ikke opprette en organisasjon fordi du allerede er en del av en organisasjon",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Du må fullføre brukeronboarding før du oppretter en organisasjon",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Kunne ikke finne slug for å publisere organisasjonen",
"picklist": "Valgliste",
"most_cancelled_bookings": "Flest kansellerte bestillinger",
"interface_language": "Grensesnittspråk",
"visitors_browser_language": "Besøkendes nettleserspråk",
"name_or_email": "Navn eller e-post",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Hvis ingen kontakt blir funnet, fall tilbake til leadeier hvis den eksisterer",
"credit_purchase_failed": "Kjøp av kreditter mislyktes. Vennligst prøv igjen eller kontakt support.",
"minimum_of_credits_required": "Minimum 50 kreditter kreves",
"enable_delegation_credential": "Aktiver delegeringslegitimasjon",
"enable_delegation_credential_description": "Gi Cal.com automatisk tilgang til kalenderne til alle organisasjonsmedlemmer ved å aktivere delegeringslegitimasjon.",
"disable_delegation_credential": "Deaktiver delegeringslegitimasjon",
@@ -3165,6 +3183,20 @@
"results": "Resultater",
"view_form": "Vis skjema",
"sms_opt_out_message": "Send STOP for å melde deg av SMS-meldinger",
"team_credits_low_warning": "Teamet ditt {{teamName}} har lite kreditter igjen",
"user_credits_low_warning": "Du har lite kreditter igjen",
"action_required_out_of_credits": "[Handling kreves] Teamet ditt {{teamName}} har gått tom for kreditter",
"action_required_user_out_of_credits": "[Handling kreves] Du har gått tom for kreditter",
"low_credits_warning_message": "Cal.com-teamet ditt {{teamName}} har lite kreditter igjen. For å unngå avbrudd i tjenesten, vennligst kjøp flere kreditter. Hvis saldoen din går tom, vil SMS-meldinger slutte å bli sendt og vil i stedet bli sendt som e-poster.",
"low_credits_warning_message_user": "Cal.com-kontoen din har lite kreditter igjen. For å unngå avbrudd i tjenesten, vennligst kjøp flere kreditter. Hvis saldoen din går tom, vil SMS-meldinger slutte å bli sendt og vil i stedet bli sendt som e-poster.",
"credit_limit_reached_message": "Cal.com-teamet ditt {{teamName}} har gått tom for kreditter. Som et resultat blir SMS-meldinger nå sendt via e-post i stedet. For å gjenoppta sending av SMS, vennligst kjøp flere kreditter.",
"credit_limit_reached_message_user": "Cal.com-kontoen din har gått tom for kreditter. Som et resultat sendes SMS-meldinger nå via e-post i stedet. For å fortsette å sende SMS, vennligst kjøp flere kreditter.",
"current_credit_balance": "Nåværende saldo: {{balance}} kreditter",
"notification_about_your_booking": "Varsling om din bestilling",
"monthly_credits": "Månedlige kreditter",
"total_credits": "Totale kreditter: {{totalCredits}}",
"remaining_credits": "Gjenværende kreditter: {{remainingCredits}}",
"additional_credits": "Ekstra kreditter",
"routing_form_next_in_queue": "{{count}} neste i køen",
"routing_form_select_members_to_email": "Send e-postsvar til",
"routing_incomplete_booking_tab": "Ufullstendige bestillinger",
@@ -3172,5 +3204,10 @@
"matching": "Matching",
"event_redirect": "Hendelsesomdirigering",
"reset_form": "Tilbakestill skjema",
"requires_credits": "Krever kreditter",
"requires_credits_tooltip": "Du trenger nok kreditter på kontoen din for å bruke denne funksjonen",
"available_credits": "Tilgjengelige kreditter",
"members_affected_by_disabling_delegation_credential": "Berørte medlemmer",
"no_members_affected_by_disabling_delegation_credential": "Ingen medlemmer berørt av deaktivering av delegeringslegitimasjon",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Legg til dine nye strenger over her ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
+39 -2
View File
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Anulowano: {{title}}, {{date}}",
"event_reassigned_subject": "Przypisano ponownie: {{title}} dnia {{date}}",
"event_request_declined": "Twoja prośba o wydarzenie została odrzucona",
"customize_calvideo_settings": "Dostosuj ustawienia Cal Video",
"calvideo_settings_description": "Skonfiguruj preferencje spotkań wideo, w tym uprawnienia do nagrywania dla gospodarzy i uczestników.",
"disable_recording_for_guests": "Wyłącz nagrywanie dla gości",
"disable_recording_for_organizer": "Wyłącz nagrywanie dla organizatora",
"event_request_declined_recurring": "Twoja prośba o wydarzenie cykliczne została odrzucona",
"event_request_cancelled": "Twoje zaplanowane wydarzenie zostało anulowane",
"event_request_reassigned": "Twoje zaplanowane wydarzenie zostało przypisane ponownie",
@@ -634,7 +638,7 @@
"any_location": "Dowolna lokalizacja",
"yes": "Tak",
"no": "Nie",
"additional_notes": "Dotatkowe uwagi",
"additional_notes": "Dodatkowe uwagi",
"booking_fail": "Nie można zarezerwować spotkania.",
"reschedule_fail": "Nie udało się przełożyć spotkania.",
"share_additional_notes": "Proszę podzielić się wszystkim, co pomoże przygotować się na nasze spotkanie.",
@@ -1599,6 +1603,7 @@
"team_url": "Adres URL zespołu",
"team_members": "Członkowie zespołu",
"more": "Więcej",
"and_count_more": "i {{count}} więcej",
"more_page_footer": "Aplikacja mobilna jest jedynie rozszerzeniem aplikacji przeglądarkowej. Jeśli wykonujesz skomplikowane działania, użyj aplikacji przeglądarkowej.",
"workflow_example_1": "Wyślij do uczestnika przypomnienie SMS na 24 godziny przed rozpoczęciem wydarzenia",
"workflow_example_2": "Wyślij do uczestnika niestandardową wiadomość SMS, gdy wydarzenie zostanie przełożone",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Numer telefonu (powiadomienia SMS)",
"attendee_email_variable": "Adres e-mail uczestnika",
"attendee_email_info": "Adres e-mail osoby rezerwującej",
"booking_uid": "UID rezerwacji",
"kbar_search_placeholder": "Wpisz polecenie lub wyszukaj...",
"invalid_credential": "O nie! Wygląda na to, że uprawnienia wygasły lub zostały cofnięte. Zainstaluj aplikację ponownie.",
"invalid_credential_action": "Zainstaluj ponownie aplikację",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Dodaj pytanie",
"identifier": "Identyfikator",
"duplicate_email": "Adres e-mail jest zduplikowany",
"enter_redirect_url_on_exit_description": "Wprowadź URL przekierowania, na który uczestnik zostanie wysłany po opuszczeniu spotkania.",
"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.",
"booking_with_payment_cancelled_refunded": "Płatność za tę rezerwację została zwrócona.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Data rezerwacji",
"routing_form_insights_submitted_at": "Data przesłania",
"copy_redirect_url": "Kopiuj adres URL przekierowania",
"redirect_url_on_exit": "URL przekierowania po wyjściu",
"total_bookings_per_period": "Łączna liczba rezerwacji w okresie",
"routed_to_per_period": "Przekierowania w okresie",
"per_day": "Dziennie",
@@ -3002,6 +3010,12 @@
"asc": "Rosnąco",
"desc": "Malejąco",
"verify_email_change": "Zweryfikuj zmianę adresu email",
"buy_credits": "Kup kredyty",
"credits": "Kredyty",
"view_and_manage_credits": "Wyświetl i zarządzaj kredytami",
"view_and_manage_credits_description": "Wyświetl i zarządzaj kredytami do wysyłania wiadomości SMS. Jeden kredyt jest wart 1¢ (USD). <0>Dowiedz się więcej</0>",
"buy_additional_credits": "Kup dodatkowe kredyty (0,01 USD za kredyt)",
"overview": "Przegląd",
"organization_slug_taken": "Slug organizacji jest już zajęty",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Nie możesz utworzyć organizacji, ponieważ jesteś już częścią innej organizacji",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Musisz ukończyć proces wdrażania użytkownika przed utworzeniem organizacji",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Nie można znaleźć sluga do opublikowania organizacji",
"picklist": "Lista wyboru",
"most_cancelled_bookings": "Najczęściej anulowane rezerwacje",
"interface_language": "Język interfejsu",
"visitors_browser_language": "Język przeglądarki odwiedzającego",
"name_or_email": "Imię lub email",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Jeśli nie znaleziono kontaktu, powróć do właściciela leada, jeśli istnieje",
"credit_purchase_failed": "Zakup kredytów nie powiódł się. Spróbuj ponownie lub skontaktuj się z pomocą techniczną.",
"minimum_of_credits_required": "Wymagane jest minimum 50 kredytów",
"enable_delegation_credential": "Włącz poświadczenie delegacji",
"enable_delegation_credential_description": "Udziel Cal.com automatycznego dostępu do kalendarzy wszystkich członków organizacji, włączając poświadczenie delegacji.",
"disable_delegation_credential": "Wyłącz poświadczenie delegacji",
@@ -3165,6 +3183,20 @@
"results": "Wyniki",
"view_form": "Zobacz formularz",
"sms_opt_out_message": "Wyślij STOP, aby zrezygnować z wiadomości SMS",
"team_credits_low_warning": "Twój zespół {{teamName}} ma mało kredytów",
"user_credits_low_warning": "Masz mało kredytów",
"action_required_out_of_credits": "[Wymagane działanie] Twój zespół {{teamName}} nie ma już kredytów",
"action_required_user_out_of_credits": "[Wymagane działanie] Nie masz już kredytów",
"low_credits_warning_message": "Twój zespół Cal.com {{teamName}} ma mało kredytów. Aby uniknąć przerwy w działaniu usługi, kup dodatkowe kredyty. Jeśli saldo się wyczerpie, wiadomości SMS przestaną być wysyłane i będą wysyłane jako e-maile.",
"low_credits_warning_message_user": "Twoje konto Cal.com ma mało kredytów. Aby uniknąć przerwy w działaniu usługi, kup dodatkowe kredyty. Jeśli saldo się wyczerpie, wiadomości SMS przestaną być wysyłane i będą wysyłane jako e-maile.",
"credit_limit_reached_message": "Twój zespół Cal.com {{teamName}} nie ma już kredytów. W związku z tym wiadomości SMS są teraz wysyłane jako e-maile. Aby wznowić wysyłanie SMS-ów, kup dodatkowe kredyty.",
"credit_limit_reached_message_user": "Twoje konto Cal.com nie ma już dostępnych kredytów. W związku z tym wiadomości SMS są teraz wysyłane za pośrednictwem e-maila. Aby wznowić wysyłanie SMS-ów, prosimy o zakup dodatkowych kredytów.",
"current_credit_balance": "Aktualne saldo: {{balance}} kredytów",
"notification_about_your_booking": "Powiadomienie o Twojej rezerwacji",
"monthly_credits": "Miesięczne kredyty",
"total_credits": "Łączna liczba kredytów: {{totalCredits}}",
"remaining_credits": "Pozostałe kredyty: {{remainingCredits}}",
"additional_credits": "Dodatkowe kredyty",
"routing_form_next_in_queue": "{{count}} następny w kolejce",
"routing_form_select_members_to_email": "Wyślij odpowiedzi e-mail do",
"routing_incomplete_booking_tab": "Nieukończone rezerwacje",
@@ -3172,5 +3204,10 @@
"matching": "Dopasowanie",
"event_redirect": "Przekierowanie wydarzenia",
"reset_form": "Zresetuj formularz",
"requires_credits": "Wymaga kredytów",
"requires_credits_tooltip": "Musisz mieć wystarczającą liczbę kredytów na swoim koncie, aby korzystać z tej funkcji",
"available_credits": "Dostępne kredyty",
"members_affected_by_disabling_delegation_credential": "Dotknięci członkowie",
"no_members_affected_by_disabling_delegation_credential": "Brak członków dotkniętych wyłączeniem poświadczenia delegacji",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Dodaj nowe ciągi powyżej ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Cancelado: {{title}} em {{date}}",
"event_reassigned_subject": "Reatribuído: {{title}} em {{date}}",
"event_request_declined": "Sua solicitação de reunião foi recusada",
"customize_calvideo_settings": "Personalizar configurações do Cal Video",
"calvideo_settings_description": "Configure preferências de reuniões por vídeo, incluindo permissões de gravação para anfitriões e participantes.",
"disable_recording_for_guests": "Desativar gravação para convidados",
"disable_recording_for_organizer": "Desativar gravação para organizador",
"event_request_declined_recurring": "Sua solicitação de evento recorrente foi recusada",
"event_request_cancelled": "Seu evento agendado foi cancelado",
"event_request_reassigned": "Seu evento agendado foi reatribuído",
@@ -1599,6 +1603,7 @@
"team_url": "URL da equipe",
"team_members": "Membros da equipe",
"more": "Mais",
"and_count_more": "e mais {{count}}",
"more_page_footer": "Nós vemos o aplicativo móvel como uma extensão do aplicativo da web. Se você estiver realizando alguma ação complicada, consulte o aplicativo da web.",
"workflow_example_1": "Enviar lembrete por SMS 24 horas antes do evento começar para o participante",
"workflow_example_2": "Enviar SMS personalizado quando o evento for reagendado para o participante",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Número de telefone (notificações SMS)",
"attendee_email_variable": "E-mail do participante",
"attendee_email_info": "O e-mail da pessoa que fez a reserva",
"booking_uid": "UID da reserva",
"kbar_search_placeholder": "Digite um comando ou procure...",
"invalid_credential": "Ah, não! Parece que a permissão expirou ou foi revogada. Reinstale novamente.",
"invalid_credential_action": "Reinstale o aplicativo",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Adicione uma pergunta",
"identifier": "Identificador",
"duplicate_email": "Este e-mail já existe",
"enter_redirect_url_on_exit_description": "Insira uma URL de redirecionamento para a qual o participante será enviado ao sair da reunião.",
"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.",
"booking_with_payment_cancelled_refunded": "O pagamento desta reserva foi reembolsado.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Agendado em",
"routing_form_insights_submitted_at": "Enviado em",
"copy_redirect_url": "Copiar URL de redirecionamento",
"redirect_url_on_exit": "URL de redirecionamento ao sair",
"total_bookings_per_period": "Total de agendamentos por período",
"routed_to_per_period": "Encaminhados por período",
"per_day": "Por dia",
@@ -3002,6 +3010,12 @@
"asc": "Crescente",
"desc": "Decrescente",
"verify_email_change": "Verificar alteração de e-mail",
"buy_credits": "Comprar créditos",
"credits": "Créditos",
"view_and_manage_credits": "Visualizar e gerenciar créditos",
"view_and_manage_credits_description": "Visualize e gerencie créditos para envio de mensagens SMS. Um crédito vale 1¢ (USD). <0>Saiba mais</0>",
"buy_additional_credits": "Comprar créditos adicionais ($0.01 por crédito)",
"overview": "Visão geral",
"organization_slug_taken": "O slug da organização já está em uso",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Você não pode criar uma organização, pois já faz parte de uma",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Você precisa concluir a integração do usuário antes de criar uma organização",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Não foi possível encontrar o slug para publicar a organização",
"picklist": "Lista de seleção",
"most_cancelled_bookings": "Reservas mais canceladas",
"interface_language": "Idioma da interface",
"visitors_browser_language": "Idioma do navegador do visitante",
"name_or_email": "Nome ou e-mail",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Se nenhum contato for encontrado, recorrer ao proprietário do lead, se existir",
"credit_purchase_failed": "Compra de créditos falhou. Tente novamente ou entre em contato com o suporte.",
"minimum_of_credits_required": "Mínimo de 50 créditos necessários",
"enable_delegation_credential": "Ativar credencial de delegação",
"enable_delegation_credential_description": "Conceda ao Cal.com acesso automático aos calendários de todos os membros da organização ativando a credencial de delegação.",
"disable_delegation_credential": "Desativar credencial de delegação",
@@ -3165,6 +3183,20 @@
"results": "Resultados",
"view_form": "Visualizar formulário",
"sms_opt_out_message": "Envie STOP para cancelar o recebimento de mensagens SMS",
"team_credits_low_warning": "Sua equipe {{teamName}} está com poucos créditos",
"user_credits_low_warning": "Você está com poucos créditos",
"action_required_out_of_credits": "[Ação necessária] Sua equipe {{teamName}} ficou sem créditos",
"action_required_user_out_of_credits": "[Ação necessária] Você ficou sem créditos",
"low_credits_warning_message": "Sua equipe Cal.com {{teamName}} está com poucos créditos. Para evitar qualquer interrupção no serviço, compre créditos adicionais. Se seu saldo acabar, as mensagens SMS deixarão de ser enviadas e serão enviadas como e-mails.",
"low_credits_warning_message_user": "Sua conta Cal.com está com poucos créditos. Para evitar qualquer interrupção no serviço, compre créditos adicionais. Se seu saldo acabar, as mensagens SMS deixarão de ser enviadas e serão enviadas como e-mails.",
"credit_limit_reached_message": "Sua equipe Cal.com {{teamName}} ficou sem créditos. Como resultado, as mensagens SMS agora estão sendo enviadas por e-mail. Para retomar o envio de SMS, compre créditos adicionais.",
"credit_limit_reached_message_user": "Sua conta Cal.com ficou sem créditos. Como resultado, as mensagens SMS agora estão sendo enviadas por e-mail. Para retomar o envio de SMS, adquira créditos adicionais.",
"current_credit_balance": "Saldo atual: {{balance}} créditos",
"notification_about_your_booking": "Notificação sobre seu agendamento",
"monthly_credits": "Créditos mensais",
"total_credits": "Total de créditos: {{totalCredits}}",
"remaining_credits": "Créditos restantes: {{remainingCredits}}",
"additional_credits": "Créditos adicionais",
"routing_form_next_in_queue": "{{count}} próximo na fila",
"routing_form_select_members_to_email": "Enviar respostas por e-mail para",
"routing_incomplete_booking_tab": "Agendamentos incompletos",
@@ -3172,5 +3204,10 @@
"matching": "Correspondência",
"event_redirect": "Redirecionamento de evento",
"reset_form": "Redefinir formulário",
"requires_credits": "Requer créditos",
"requires_credits_tooltip": "Você precisa ter créditos suficientes em sua conta para usar este recurso",
"available_credits": "Créditos disponíveis",
"members_affected_by_disabling_delegation_credential": "Membros afetados",
"no_members_affected_by_disabling_delegation_credential": "Nenhum membro afetado pela desativação da credencial de delegação",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Adicione suas novas strings aqui em cima ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Cancelado: {{title}} a {{date}}",
"event_reassigned_subject": "Reatribuído: {{title}} em {{date}}",
"event_request_declined": "O seu pedido de evento foi declinado",
"customize_calvideo_settings": "Personalizar configurações do Cal Video",
"calvideo_settings_description": "Configure preferências de reuniões por vídeo, incluindo permissões de gravação para anfitriões e participantes.",
"disable_recording_for_guests": "Desativar gravação para convidados",
"disable_recording_for_organizer": "Desativar gravação para organizador",
"event_request_declined_recurring": "O seu pedido de evento recorrente foi recusado",
"event_request_cancelled": "O seu evento agendado foi cancelado",
"event_request_reassigned": "O seu evento agendado foi reatribuído",
@@ -1599,6 +1603,7 @@
"team_url": "Endereço da equipa",
"team_members": "Membros da equipa",
"more": "Mais",
"and_count_more": "e mais {{count}}",
"more_page_footer": "Vemos a aplicação móvel como uma extensão da aplicação web. Se estiver a realizar quaisquer ações complexas, consulte a aplicação web.",
"workflow_example_1": "Enviar lembrete de participação via SMS, 24 horas antes do evento começar",
"workflow_example_2": "Enviar um SMS personalizado para o participante quando o evento for reagendado",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Número de telefone (notificações SMS)",
"attendee_email_variable": "E-mail do participante",
"attendee_email_info": "O e-mail do responsável pela reserva",
"booking_uid": "UID da reserva",
"kbar_search_placeholder": "Digite um comando ou pesquise...",
"invalid_credential": "Oh não! Parece que a permissão expirou ou foi revogada. Por favor, reinstale novamente.",
"invalid_credential_action": "Reinstalar aplicação",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Adicionar uma questão",
"identifier": "Identificador",
"duplicate_email": "O e-mail está duplicado",
"enter_redirect_url_on_exit_description": "Insira um URL de redirecionamento para o qual o participante será enviado ao sair da reunião.",
"booking_with_payment_cancelled": "Já não é possível pagar para este evento",
"booking_with_payment_cancelled_already_paid": "Está a ser processado um reembolso do pagamento desta reserva.",
"booking_with_payment_cancelled_refunded": "Foi feito um reembolso do pagamento desta reserva.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Agendado em",
"routing_form_insights_submitted_at": "Enviado em",
"copy_redirect_url": "Copiar URL de redirecionamento",
"redirect_url_on_exit": "URL de redirecionamento ao sair",
"total_bookings_per_period": "Total de agendamentos por período",
"routed_to_per_period": "Encaminhados por período",
"per_day": "Por dia",
@@ -3002,6 +3010,12 @@
"asc": "Crescente",
"desc": "Decrescente",
"verify_email_change": "Verificar alteração de e-mail",
"buy_credits": "Comprar créditos",
"credits": "Créditos",
"view_and_manage_credits": "Visualizar e gerenciar créditos",
"view_and_manage_credits_description": "Visualize e gerencie créditos para envio de mensagens SMS. Um crédito vale 1¢ (USD). <0>Saiba mais</0>",
"buy_additional_credits": "Comprar créditos adicionais ($0.01 por crédito)",
"overview": "Visão geral",
"organization_slug_taken": "O slug da organização já está em uso",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Você não pode criar uma organização pois já faz parte de uma",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Você precisa completar a integração do usuário antes de criar uma organização",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Não foi possível encontrar o slug para publicar a organização",
"picklist": "Lista de seleção",
"most_cancelled_bookings": "Reservas mais canceladas",
"interface_language": "Idioma da interface",
"visitors_browser_language": "Idioma do navegador do visitante",
"name_or_email": "Nome ou e-mail",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Se nenhum contato for encontrado, recorrer ao proprietário do lead, se existir",
"credit_purchase_failed": "Compra de créditos falhou. Por favor, tente novamente ou contate o suporte.",
"minimum_of_credits_required": "Mínimo de 50 créditos necessários",
"enable_delegation_credential": "Ativar credencial de delegação",
"enable_delegation_credential_description": "Conceda ao Cal.com acesso automático aos calendários de todos os membros da organização ativando a credencial de delegação.",
"disable_delegation_credential": "Desativar credencial de delegação",
@@ -3165,6 +3183,20 @@
"results": "Resultados",
"view_form": "Ver formulário",
"sms_opt_out_message": "Envie STOP para cancelar as mensagens SMS",
"team_credits_low_warning": "Sua equipe {{teamName}} está com poucos créditos",
"user_credits_low_warning": "Você está com poucos créditos",
"action_required_out_of_credits": "[Ação necessária] Sua equipe {{teamName}} ficou sem créditos",
"action_required_user_out_of_credits": "[Ação necessária] Você ficou sem créditos",
"low_credits_warning_message": "Sua equipe Cal.com {{teamName}} está com poucos créditos. Para evitar qualquer interrupção no serviço, por favor compre créditos adicionais. Se seu saldo acabar, as mensagens SMS deixarão de ser enviadas e serão enviadas como emails em vez disso.",
"low_credits_warning_message_user": "Sua conta Cal.com está com poucos créditos. Para evitar qualquer interrupção no serviço, por favor compre créditos adicionais. Se seu saldo acabar, as mensagens SMS deixarão de ser enviadas e serão enviadas como emails em vez disso.",
"credit_limit_reached_message": "Sua equipe Cal.com {{teamName}} ficou sem créditos. Como resultado, as mensagens SMS agora estão sendo enviadas por email. Para retomar o envio de SMS, por favor compre créditos adicionais.",
"credit_limit_reached_message_user": "Sua conta Cal.com ficou sem créditos. Como resultado, as mensagens SMS agora estão sendo enviadas por e-mail. Para retomar o envio de SMS, adquira créditos adicionais.",
"current_credit_balance": "Saldo atual: {{balance}} créditos",
"notification_about_your_booking": "Notificação sobre sua reserva",
"monthly_credits": "Créditos mensais",
"total_credits": "Total de créditos: {{totalCredits}}",
"remaining_credits": "Créditos restantes: {{remainingCredits}}",
"additional_credits": "Créditos adicionais",
"routing_form_next_in_queue": "{{count}} próximo na fila",
"routing_form_select_members_to_email": "Enviar respostas por e-mail para",
"routing_incomplete_booking_tab": "Agendamentos incompletos",
@@ -3172,5 +3204,10 @@
"matching": "Correspondência",
"event_redirect": "Redirecionamento de evento",
"reset_form": "Redefinir formulário",
"requires_credits": "Requer créditos",
"requires_credits_tooltip": "Você precisa de créditos suficientes em sua conta para usar este recurso",
"available_credits": "Créditos disponíveis",
"members_affected_by_disabling_delegation_credential": "Membros afetados",
"no_members_affected_by_disabling_delegation_credential": "Nenhum membro afetado pela desativação da credencial de delegação",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Anulat: {{title}} pe {{date}}",
"event_reassigned_subject": "Realocat: {{title}} la {{date}}",
"event_request_declined": "Solicitarea pentru eveniment a fost refuzată",
"customize_calvideo_settings": "Personalizează setările Cal Video",
"calvideo_settings_description": "Configurează preferințele pentru întâlnirile video, inclusiv permisiunile de înregistrare pentru gazde și participanți.",
"disable_recording_for_guests": "Dezactivează înregistrarea pentru invitați",
"disable_recording_for_organizer": "Dezactivează înregistrarea pentru organizator",
"event_request_declined_recurring": "Solicitarea dvs. pentru evenimentul recurent a fost refuzată",
"event_request_cancelled": "Evenimentul programat a fost anulat",
"event_request_reassigned": "Evenimentul dvs. programat a fost realocat",
@@ -1599,6 +1603,7 @@
"team_url": "URL-ul echipei",
"team_members": "Membrii echipei",
"more": "Mai mult",
"and_count_more": "și încă {{count}}",
"more_page_footer": "Considerăm că aplicația mobilă este o extensie a aplicației web. Dacă efectuați orice acțiuni complicate, reveniți la aplicația web.",
"workflow_example_1": "Trimiteți participantului un memento prin SMS cu 24 de ore înainte de începerea evenimentului",
"workflow_example_2": "Trimiteți participantului un SMS personalizat atunci când evenimentul este reprogramat",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Număr de telefon (notificări SMS)",
"attendee_email_variable": "E-mail participant",
"attendee_email_info": "E-mailul persoanei care efectuează rezervarea",
"booking_uid": "UID rezervare",
"kbar_search_placeholder": "Scrie o comandă sau caută...",
"invalid_credential": "Vai, nu! Se pare că permisiunea a expirat sau a fost revocată. Reinstalați din nou.",
"invalid_credential_action": "Reinstalează aplicația",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Adăugați o întrebare",
"identifier": "Identificator",
"duplicate_email": "E-mailul este duplicat",
"enter_redirect_url_on_exit_description": "Introdu o adresă URL de redirecționare către care participantul va fi trimis după ce părăsește întâlnirea.",
"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.",
"booking_with_payment_cancelled_refunded": "Plata pentru această rezervare a fost rambursată.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Programat la",
"routing_form_insights_submitted_at": "Trimis la",
"copy_redirect_url": "Copiază URL-ul de redirecționare",
"redirect_url_on_exit": "URL de redirecționare la ieșire",
"total_bookings_per_period": "Total programări per perioadă",
"routed_to_per_period": "Direcționate către per perioadă",
"per_day": "Per zi",
@@ -3002,6 +3010,12 @@
"asc": "Crescător",
"desc": "Descrescător",
"verify_email_change": "Verifică schimbarea adresei de email",
"buy_credits": "Cumpără credite",
"credits": "Credite",
"view_and_manage_credits": "Vizualizează și gestionează creditele",
"view_and_manage_credits_description": "Vizualizează și gestionează creditele pentru trimiterea mesajelor SMS. Un credit valorează 1¢ (USD). <0>Află mai multe</0>",
"buy_additional_credits": "Cumpără credite suplimentare (0,01 USD per credit)",
"overview": "Prezentare generală",
"organization_slug_taken": "Slug-ul organizației este deja folosit",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Nu puteți crea o organizație deoarece faceți deja parte dintr-o organizație",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Trebuie să finalizați procesul de onboarding al utilizatorului înainte de a crea o organizație",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Nu s-a putut găsi slug-ul pentru publicarea organizației",
"picklist": "Listă de selecție",
"most_cancelled_bookings": "Cele mai multe rezervări anulate",
"interface_language": "Limba interfeței",
"visitors_browser_language": "Limba browserului vizitatorului",
"name_or_email": "Nume sau email",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Dacă nu este găsit niciun contact, se revine la proprietarul lead-ului dacă acesta există",
"credit_purchase_failed": "Achiziția de credite a eșuat. Te rugăm să încerci din nou sau să contactezi suportul.",
"minimum_of_credits_required": "Este necesar un minim de 50 de credite",
"enable_delegation_credential": "Activați credențialul de delegare",
"enable_delegation_credential_description": "Acordați Cal.com acces automat la calendarele tuturor membrilor organizației activând credențialul de delegare.",
"disable_delegation_credential": "Dezactivați credențialul de delegare",
@@ -3165,6 +3183,20 @@
"results": "Rezultate",
"view_form": "Vizualizează formularul",
"sms_opt_out_message": "Trimiteți STOP pentru a renunța la mesajele SMS",
"team_credits_low_warning": "Echipa ta {{teamName}} are un număr redus de credite",
"user_credits_low_warning": "Ai un număr redus de credite",
"action_required_out_of_credits": "[Acțiune necesară] Echipa ta {{teamName}} a rămas fără credite",
"action_required_user_out_of_credits": "[Acțiune necesară] Ai rămas fără credite",
"low_credits_warning_message": "Echipa ta Cal.com {{teamName}} are un număr redus de credite. Pentru a evita întreruperile în serviciu, te rugăm să achiziționezi credite suplimentare. Dacă soldul tău se epuizează, mesajele SMS nu vor mai fi trimise și vor fi trimise ca e-mailuri în schimb.",
"low_credits_warning_message_user": "Contul tău Cal.com are un număr redus de credite. Pentru a evita întreruperile în serviciu, te rugăm să achiziționezi credite suplimentare. Dacă soldul tău se epuizează, mesajele SMS nu vor mai fi trimise și vor fi trimise ca e-mailuri în schimb.",
"credit_limit_reached_message": "Echipa ta Cal.com {{teamName}} a rămas fără credite. Drept urmare, mesajele SMS sunt acum trimise prin e-mail. Pentru a relua trimiterea SMS-urilor, te rugăm să achiziționezi credite suplimentare.",
"credit_limit_reached_message_user": "Contul tău Cal.com a rămas fără credite. Drept urmare, mesajele SMS sunt acum trimise prin e-mail. Pentru a relua trimiterea SMS-urilor, te rugăm să achiziționezi credite suplimentare.",
"current_credit_balance": "Sold curent: {{balance}} credite",
"notification_about_your_booking": "Notificare despre rezervarea ta",
"monthly_credits": "Credite lunare",
"total_credits": "Total credite: {{totalCredits}}",
"remaining_credits": "Credite rămase: {{remainingCredits}}",
"additional_credits": "Credite suplimentare",
"routing_form_next_in_queue": "{{count}} următor în coadă",
"routing_form_select_members_to_email": "Trimiteți răspunsurile prin e-mail către",
"routing_incomplete_booking_tab": "Rezervări incomplete",
@@ -3172,5 +3204,10 @@
"matching": "Potrivire",
"event_redirect": "Redirecționare eveniment",
"reset_form": "Resetează formularul",
"requires_credits": "Necesită credite",
"requires_credits_tooltip": "Ai nevoie de suficiente credite în contul tău pentru a utiliza această funcție",
"available_credits": "Credite disponibile",
"members_affected_by_disabling_delegation_credential": "Membri afectați",
"no_members_affected_by_disabling_delegation_credential": "Niciun membru afectat de dezactivarea acreditivului de delegare",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Adăugați stringurile noi deasupra acestui rând ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Отмена: {{title}} {{date}}",
"event_reassigned_subject": "Переназначено: {{title}} на {{date}}",
"event_request_declined": "Ваш запрос на встречу отклонен",
"customize_calvideo_settings": "Настроить параметры Cal Video",
"calvideo_settings_description": "Настройте предпочтения видеовстреч, включая разрешения на запись для организаторов и участников.",
"disable_recording_for_guests": "Отключить запись для гостей",
"disable_recording_for_organizer": "Отключить запись для организатора",
"event_request_declined_recurring": "Ваш запрос на повторяющееся событие отклонен",
"event_request_cancelled": "Ваша запланированная встреча была отменена",
"event_request_reassigned": "Ваша запланированная встреча была переназначена",
@@ -1599,6 +1603,7 @@
"team_url": "URL-адрес команды",
"team_members": "Участники команды",
"more": "Еще",
"and_count_more": "и еще {{count}}",
"more_page_footer": "Наше мобильное приложение — это скорее дополнение к веб-приложению. Сложные действия лучше делать в веб-приложении.",
"workflow_example_1": "Отправить участникам напоминание по SMS за 24 часа до начала события",
"workflow_example_2": "Отправить участнику SMS с пользовательским содержанием при переносе события",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Номер телефона (SMS-уведомления)",
"attendee_email_variable": "Электронная почта участника",
"attendee_email_info": "Электронная почта участника, на которого оформляется бронирование",
"booking_uid": "UID бронирования",
"kbar_search_placeholder": "Введите команду или начните поиск...",
"invalid_credential": "Похоже, разрешение истекло или было отозвано. Необходима переустановка.",
"invalid_credential_action": "Переустановите приложение",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Добавить вопрос",
"identifier": "Идентификатор",
"duplicate_email": "Адрес электронной почты уже существует",
"enter_redirect_url_on_exit_description": "Введите URL-адрес перенаправления, на который участник будет отправлен после завершения встречи.",
"booking_with_payment_cancelled": "Оплата этого события больше невозможна",
"booking_with_payment_cancelled_already_paid": "Выполняется возврат оплаты за бронирование.",
"booking_with_payment_cancelled_refunded": "Возврат оплаты за бронирование выполнен.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Время бронирования",
"routing_form_insights_submitted_at": "Время отправки",
"copy_redirect_url": "Копировать URL перенаправления",
"redirect_url_on_exit": "URL-адрес перенаправления при выходе",
"total_bookings_per_period": "Всего бронирований за период",
"routed_to_per_period": "Направлено за период",
"per_day": "За день",
@@ -3002,6 +3010,12 @@
"asc": "По возрастанию",
"desc": "По убыванию",
"verify_email_change": "Подтвердить изменение email",
"buy_credits": "Купить кредиты",
"credits": "Кредиты",
"view_and_manage_credits": "Просмотр и управление кредитами",
"view_and_manage_credits_description": "Просматривайте и управляйте кредитами для отправки SMS-сообщений. Один кредит стоит 1¢ (USD). <0>Узнать больше</0>",
"buy_additional_credits": "Купить дополнительные кредиты (0,01 $ за кредит)",
"overview": "Обзор",
"organization_slug_taken": "Слаг организации уже занят",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Вы не можете создать организацию, так как уже являетесь частью организации",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Вам необходимо завершить адаптацию пользователя перед созданием организации",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Не удалось найти slug для публикации организации",
"picklist": "Список выбора",
"most_cancelled_bookings": "Наиболее часто отменяемые бронирования",
"interface_language": "Язык интерфейса",
"visitors_browser_language": "Язык браузера посетителя",
"name_or_email": "Имя или электронная почта",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Если контакт не найден, использовать владельца лида, если он существует",
"credit_purchase_failed": "Не удалось приобрести кредиты. Попробуйте еще раз или свяжитесь со службой поддержки.",
"minimum_of_credits_required": "Требуется минимум 50 кредитов",
"enable_delegation_credential": "Включить делегированные учетные данные",
"enable_delegation_credential_description": "Предоставьте Cal.com автоматический доступ к календарям всех членов организации, включив делегированные учетные данные.",
"disable_delegation_credential": "Отключить делегированные учетные данные",
@@ -3165,6 +3183,20 @@
"results": "Результаты",
"view_form": "Просмотреть форму",
"sms_opt_out_message": "Отправьте СТОП, чтобы отказаться от SMS-сообщений",
"team_credits_low_warning": "У вашей команды {{teamName}} заканчиваются кредиты",
"user_credits_low_warning": "У вас заканчиваются кредиты",
"action_required_out_of_credits": "[Требуется действие] У вашей команды {{teamName}} закончились кредиты",
"action_required_user_out_of_credits": "[Требуется действие] У вас закончились кредиты",
"low_credits_warning_message": "У вашей команды Cal.com {{teamName}} заканчиваются кредиты. Чтобы избежать перебоев в работе, пожалуйста, приобретите дополнительные кредиты. Если баланс закончится, SMS-сообщения перестанут отправляться и будут заменены на электронные письма.",
"low_credits_warning_message_user": "На вашем аккаунте Cal.com заканчиваются кредиты. Чтобы избежать перебоев в работе, пожалуйста, приобретите дополнительные кредиты. Если баланс закончится, SMS-сообщения перестанут отправляться и будут заменены на электронные письма.",
"credit_limit_reached_message": "У вашей команды Cal.com {{teamName}} закончились кредиты. В результате SMS-сообщения теперь отправляются по электронной почте. Чтобы возобновить отправку SMS, пожалуйста, приобретите дополнительные кредиты.",
"credit_limit_reached_message_user": "На вашем аккаунте Cal.com закончились кредиты. В результате SMS-сообщения теперь отправляются по электронной почте. Чтобы возобновить отправку SMS, пожалуйста, приобретите дополнительные кредиты.",
"current_credit_balance": "Текущий баланс: {{balance}} кредитов",
"notification_about_your_booking": "Уведомление о вашем бронировании",
"monthly_credits": "Ежемесячные кредиты",
"total_credits": "Всего кредитов: {{totalCredits}}",
"remaining_credits": "Оставшиеся кредиты: {{remainingCredits}}",
"additional_credits": "Дополнительные кредиты",
"routing_form_next_in_queue": "{{count}} следующий(ие) в очереди",
"routing_form_select_members_to_email": "Отправить ответы по электронной почте",
"routing_incomplete_booking_tab": "Незавершённые бронирования",
@@ -3172,5 +3204,10 @@
"matching": "Сопоставление",
"event_redirect": "Перенаправление события",
"reset_form": "Сбросить форму",
"requires_credits": "Требуются кредиты",
"requires_credits_tooltip": "Для использования этой функции на вашем аккаунте должно быть достаточно кредитов",
"available_credits": "Доступные кредиты",
"members_affected_by_disabling_delegation_credential": "Затронутые участники",
"no_members_affected_by_disabling_delegation_credential": "Нет участников, затронутых отключением делегированных учетных данных",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Добавьте строки выше ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Zrušené: {{title}} dňa {{date}}",
"event_reassigned_subject": "Pridelené: {{title}} dňa {{date}}",
"event_request_declined": "Vaša žiadosť o udalosť bola odmietnutá",
"customize_calvideo_settings": "Prispôsobiť nastavenia Cal Video",
"calvideo_settings_description": "Nakonfigurujte predvoľby video stretnutí vrátane povolení na nahrávanie pre hostiteľov a účastníkov.",
"disable_recording_for_guests": "Zakázať nahrávanie pre hostí",
"disable_recording_for_organizer": "Zakázať nahrávanie pre organizátora",
"event_request_declined_recurring": "Vaša opakujúca sa žiadosť o udalosť bola odmietnutá",
"event_request_cancelled": "Vaša naplánovaná udalosť bola zrušená",
"event_request_reassigned": "Vaša naplánovaná udalosť bola pridelená",
@@ -1599,6 +1603,7 @@
"team_url": "URL tímu",
"team_members": "Členovia tímu",
"more": "Viac",
"and_count_more": "a ďalších {{count}}",
"more_page_footer": "Mobilnú aplikáciu vnímame ako rozšírenie webovej aplikácie. Ak vykonávate zložitejšie úkony, vráťte sa prosím k webovej aplikácii.",
"workflow_example_1": "Poslať SMS pripomienku účastníkovi 24 hodín pred začiatkom udalosti",
"workflow_example_2": "Poslať vlastnú SMS účastníkovi pri preložení udalosti",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Telefónne číslo (SMS notifikácie)",
"attendee_email_variable": "Email účastníka",
"attendee_email_info": "Email osoby, ktorá rezervuje",
"booking_uid": "UID rezervácie",
"kbar_search_placeholder": "Napíšte príkaz alebo hľadajte...",
"invalid_credential": "Zdá sa, že povolenia pre {{appName}} vypršali alebo boli odvolané.",
"invalid_credential_action": "Preinštalovať aplikáciu",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Pridať otázku",
"identifier": "Identifikátor",
"duplicate_email": "Email je duplicitný",
"enter_redirect_url_on_exit_description": "Zadajte URL adresu presmerovania, na ktorú bude účastník odoslaný po opustení stretnutia.",
"booking_with_payment_cancelled": "Platba za túto udalosť už nie je možná",
"booking_with_payment_cancelled_already_paid": "Refundácia platby za túto rezerváciu je na ceste.",
"booking_with_payment_cancelled_refunded": "Platba za túto rezerváciu bola vrátená.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Čas rezervácie",
"routing_form_insights_submitted_at": "Čas odoslania",
"copy_redirect_url": "Kopírovať URL presmerovania",
"redirect_url_on_exit": "URL presmerovania pri odchode",
"total_bookings_per_period": "Celkový počet rezervácií za obdobie",
"routed_to_per_period": "Presmerované za obdobie",
"per_day": "Za deň",
@@ -3002,6 +3010,12 @@
"asc": "Vzostupne",
"desc": "Zostupne",
"verify_email_change": "Overiť zmenu e-mailu",
"buy_credits": "Kúpiť kredity",
"credits": "Kredity",
"view_and_manage_credits": "Zobraziť a spravovať kredity",
"view_and_manage_credits_description": "Zobrazte a spravujte kredity na odosielanie SMS správ. Jeden kredit má hodnotu 1¢ (USD). <0>Dozvedieť sa viac</0>",
"buy_additional_credits": "Kúpiť ďalšie kredity (0,01 $ za kredit)",
"overview": "Prehľad",
"organization_slug_taken": "Slug organizácie je už obsadený",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Nemôžete vytvoriť organizáciu, pretože už ste súčasťou organizácie",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Pred vytvorením organizácie musíte dokončiť úvodné zaškolenie používateľa",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Nepodarilo sa nájsť slug na zverejnenie organizácie",
"picklist": "Zoznam na výber",
"most_cancelled_bookings": "Najviac zrušených rezervácií",
"interface_language": "Jazyk rozhrania",
"visitors_browser_language": "Jazyk prehliadača návštevníka",
"name_or_email": "Meno alebo email",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Ak sa nenájde žiadny kontakt, použije sa vlastník leadu, ak existuje",
"credit_purchase_failed": "Nákup kreditov zlyhal. Skúste to znova alebo kontaktujte podporu.",
"minimum_of_credits_required": "Vyžaduje sa minimálne 50 kreditov",
"enable_delegation_credential": "Povoliť delegované poverenie",
"enable_delegation_credential_description": "Udeľte Cal.com automatický prístup ku kalendárom všetkých členov organizácie povolením delegovaného poverenia.",
"disable_delegation_credential": "Zakázať delegované poverenie",
@@ -3165,6 +3183,20 @@
"results": "Výsledky",
"view_form": "Zobraziť formulár",
"sms_opt_out_message": "Pošlite STOP pre odhlásenie z SMS správ",
"team_credits_low_warning": "Vášmu tímu {{teamName}} dochádzajú kredity",
"user_credits_low_warning": "Dochádzajú vám kredity",
"action_required_out_of_credits": "[Vyžaduje sa akcia] Vášmu tímu {{teamName}} došli kredity",
"action_required_user_out_of_credits": "[Vyžaduje sa akcia] Došli vám kredity",
"low_credits_warning_message": "Vášmu Cal.com tímu {{teamName}} dochádzajú kredity. Aby ste predišli prerušeniu služby, zakúpte si ďalšie kredity. Ak sa váš zostatok vyčerpá, SMS správy sa prestanú odosielať a namiesto toho budú odosielané ako e-maily.",
"low_credits_warning_message_user": "Vášmu Cal.com účtu dochádzajú kredity. Aby ste predišli prerušeniu služby, zakúpte si ďalšie kredity. Ak sa váš zostatok vyčerpá, SMS správy sa prestanú odosielať a namiesto toho budú odosielané ako e-maily.",
"credit_limit_reached_message": "Vášmu Cal.com tímu {{teamName}} došli kredity. V dôsledku toho sa SMS správy teraz odosielajú prostredníctvom e-mailu. Pre obnovenie odosielania SMS si zakúpte ďalšie kredity.",
"credit_limit_reached_message_user": "Vášmu účtu Cal.com došli kredity. V dôsledku toho sa SMS správy teraz posielajú prostredníctvom e-mailu. Pre obnovenie posielania SMS si prosím zakúpte ďalšie kredity.",
"current_credit_balance": "Aktuálny zostatok: {{balance}} kreditov",
"notification_about_your_booking": "Upozornenie o vašej rezervácii",
"monthly_credits": "Mesačné kredity",
"total_credits": "Celkové kredity: {{totalCredits}}",
"remaining_credits": "Zostávajúce kredity: {{remainingCredits}}",
"additional_credits": "Dodatočné kredity",
"routing_form_next_in_queue": "{{count}} ďalších v poradí",
"routing_form_select_members_to_email": "Poslať e-mailové odpovede na",
"routing_incomplete_booking_tab": "Nedokončené rezervácie",
@@ -3172,5 +3204,10 @@
"matching": "Párovanie",
"event_redirect": "Presmerovanie udalosti",
"reset_form": "Resetovať formulár",
"requires_credits": "Vyžaduje kredity",
"requires_credits_tooltip": "Na používanie tejto funkcie potrebujete mať na účte dostatok kreditov",
"available_credits": "Dostupné kredity",
"members_affected_by_disabling_delegation_credential": "Dotknutí členovia",
"no_members_affected_by_disabling_delegation_credential": "Žiadni členovia nie sú ovplyvnení vypnutím poverenia delegovania",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Pridajte svoje nové reťazce nad túto líniu ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Otkazano: {{title}} dana {{date}}",
"event_reassigned_subject": "Preraspoređeno: {{title}} dana {{date}}",
"event_request_declined": "Vaš zahtev za događaj je odbijen",
"customize_calvideo_settings": "Prilagodite Cal Video podešavanja",
"calvideo_settings_description": "Konfigurišite preference za video sastanke uključujući dozvole za snimanje za domaćine i učesnike.",
"disable_recording_for_guests": "Onemogući snimanje za goste",
"disable_recording_for_organizer": "Onemogući snimanje za organizatora",
"event_request_declined_recurring": "Vaš zahtev za ponavljajući događaj je odbijen",
"event_request_cancelled": "Vaš zakazani događaj je otkazan",
"event_request_reassigned": "Vaš zakazani događaj je preraspoređen",
@@ -1599,6 +1603,7 @@
"team_url": "URL tima",
"team_members": "Članovi tima",
"more": "Više",
"and_count_more": "i još {{count}}",
"more_page_footer": "Mi mobilnu aplikaciju smatramo produžetkom veb aplikacije. Ako vršite bilo kakve komplikovane radnje, molimo da se vratite na veb aplikaciju.",
"workflow_example_1": "Pošalji SMS podsetnik učesniku 24 sata pre početka događaja",
"workflow_example_2": "Pošalji prilagođeni SMS učesniku kada je događaju promenjeno vreme",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Broj telefona (obaveštenja putem SMS-a)",
"attendee_email_variable": "Imejl polaznika",
"attendee_email_info": "Imejl osobe koja rezerviše",
"booking_uid": "ID rezervacije",
"kbar_search_placeholder": "Unesite komandu ili pretražite...",
"invalid_credential": "O, ne! Izgleda da je dozvola istekla ili je povučena. Instalirajte ponovo.",
"invalid_credential_action": "Ponovo instalirajte aplikaciju",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Dodajte pitanje",
"identifier": "Identifikator",
"duplicate_email": "Imejl je duplikat",
"enter_redirect_url_on_exit_description": "Unesite URL za preusmeravanje na koji će učesnik biti poslat nakon što napusti sastanak.",
"booking_with_payment_cancelled": "Plaćanje za ovaj događaj više nije moguće",
"booking_with_payment_cancelled_already_paid": "Povraćaj novca za plaćenu rezervaciju je u toku.",
"booking_with_payment_cancelled_refunded": "Plaćanje za ovu rezervaciju je refundirano.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Vreme rezervacije",
"routing_form_insights_submitted_at": "Vreme podnošenja",
"copy_redirect_url": "Kopiraj URL za preusmeravanje",
"redirect_url_on_exit": "URL za preusmeravanje pri izlasku",
"total_bookings_per_period": "Ukupno zakazanih termina po periodu",
"routed_to_per_period": "Prosleđeno po periodu",
"per_day": "Po danu",
@@ -3002,6 +3010,12 @@
"asc": "Rastuće",
"desc": "Opadajuće",
"verify_email_change": "Potvrdi promenu email adrese",
"buy_credits": "Kupi kredite",
"credits": "Krediti",
"view_and_manage_credits": "Pregledaj i upravljaj kreditima",
"view_and_manage_credits_description": "Pregledajte i upravljajte kreditima za slanje SMS poruka. Jedan kredit vredi 1¢ (USD). <0>Saznaj više</0>",
"buy_additional_credits": "Kupi dodatne kredite ($0.01 po kreditu)",
"overview": "Pregled",
"organization_slug_taken": "Slug organizacije je već zauzet",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Ne možete kreirati organizaciju jer ste već deo neke organizacije",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Morate završiti korisničko uvođenje pre kreiranja organizacije",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Nije moguće pronaći slug za objavljivanje organizacije",
"picklist": "Lista za izbor",
"most_cancelled_bookings": "Najviše otkazanih rezervacija",
"interface_language": "Jezik interfejsa",
"visitors_browser_language": "Jezik pregledača posetioca",
"name_or_email": "Ime ili email",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Ako kontakt nije pronađen, vrati se na vlasnika potencijalnog klijenta ako postoji",
"credit_purchase_failed": "Kupovina kredita nije uspela. Pokušajte ponovo ili kontaktirajte podršku.",
"minimum_of_credits_required": "Potrebno je minimalno 50 kredita",
"enable_delegation_credential": "Omogući delegirani kredencijal",
"enable_delegation_credential_description": "Dodelite Cal.com-u automatski pristup kalendarima svih članova organizacije omogućavanjem delegiranog kredencijala.",
"disable_delegation_credential": "Onemogući delegirani kredencijal",
@@ -3165,6 +3183,20 @@
"results": "Rezultati",
"view_form": "Pregledaj formular",
"sms_opt_out_message": "Pošaljite STOP da biste se odjavili sa SMS poruka",
"team_credits_low_warning": "Vašem timu {{teamName}} ponestaje kredita",
"user_credits_low_warning": "Ponestaje vam kredita",
"action_required_out_of_credits": "[Potrebna akcija] Vašem timu {{teamName}} su potrošeni svi krediti",
"action_required_user_out_of_credits": "[Potrebna akcija] Potrošili ste sve kredite",
"low_credits_warning_message": "Vašem Cal.com timu {{teamName}} ponestaje kredita. Da biste izbegli prekid usluge, kupite dodatne kredite. Ako vaš saldo bude iscrpljen, SMS poruke će prestati da se šalju i umesto toga će biti poslate kao e-poruke.",
"low_credits_warning_message_user": "Vašem Cal.com nalogu ponestaje kredita. Da biste izbegli prekid usluge, kupite dodatne kredite. Ako vaš saldo bude iscrpljen, SMS poruke će prestati da se šalju i umesto toga će biti poslate kao e-poruke.",
"credit_limit_reached_message": "Vaš Cal.com tim {{teamName}} je potrošio sve kredite. Kao rezultat, SMS poruke se sada šalju putem e-pošte. Da biste nastavili sa slanjem SMS-ova, kupite dodatne kredite.",
"credit_limit_reached_message_user": "Vaš Cal.com nalog je ostao bez kredita. Zbog toga se SMS poruke sada šalju putem e-pošte. Da biste nastavili sa slanjem SMS poruka, molimo vas da kupite dodatne kredite.",
"current_credit_balance": "Trenutno stanje: {{balance}} kredita",
"notification_about_your_booking": "Obaveštenje o vašoj rezervaciji",
"monthly_credits": "Mesečni krediti",
"total_credits": "Ukupno kredita: {{totalCredits}}",
"remaining_credits": "Preostalo kredita: {{remainingCredits}}",
"additional_credits": "Dodatni krediti",
"routing_form_next_in_queue": "{{count}} sledeći u redu",
"routing_form_select_members_to_email": "Pošalji odgovore putem e-pošte",
"routing_incomplete_booking_tab": "Nepotpune rezervacije",
@@ -3172,5 +3204,10 @@
"matching": "Podudaranje",
"event_redirect": "Preusmeravanje događaja",
"reset_form": "Resetuj formular",
"requires_credits": "Zahteva kredite",
"requires_credits_tooltip": "Potrebno je da imate dovoljno kredita na svom nalogu da biste koristili ovu funkciju",
"available_credits": "Dostupni krediti",
"members_affected_by_disabling_delegation_credential": "Pogođeni članovi",
"no_members_affected_by_disabling_delegation_credential": "Nema članova na koje utiče onemogućavanje akreditiva za delegiranje",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Dodajte svoje nove stringove iznad ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Avbokad: {{title}} {{date}}",
"event_reassigned_subject": "Omtilldelad: {{title}} den {{date}}",
"event_request_declined": "Din bokningsförfrågan har avbjöts",
"customize_calvideo_settings": "Anpassa Cal Video-inställningar",
"calvideo_settings_description": "Konfigurera inställningar för videomöten, inklusive inspelningsbehörigheter för värdar och deltagare.",
"disable_recording_for_guests": "Inaktivera inspelning för gäster",
"disable_recording_for_organizer": "Inaktivera inspelning för organisatören",
"event_request_declined_recurring": "Din återkommande händelse har avböjts",
"event_request_cancelled": "Din schemalagda bokning ställdes in",
"event_request_reassigned": "Ditt schemalagda event har omtilldelats",
@@ -1599,6 +1603,7 @@
"team_url": "Team-URL",
"team_members": "Teammedlemmar",
"more": "Mer",
"and_count_more": "och {{count}} till",
"more_page_footer": "Vi ser mobilprogrammet som en förlängning av webbprogrammet. Om du utför komplicerade åtgärder kan du hänvisa tillbaka till webbprogrammet.",
"workflow_example_1": "Skicka SMS-påminnelse till deltagare 24 timmar innan händelsen börjar",
"workflow_example_2": "Skicka anpassade SMS till deltagare när händelsen bokas om",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Telefonnummer (SMS-aviseringar)",
"attendee_email_variable": "Deltagarens e-postadress",
"attendee_email_info": "Personens e-postadress för bokning",
"booking_uid": "Boknings-ID",
"kbar_search_placeholder": "Ange ett kommando eller sök ...",
"invalid_credential": "Åh nej! Det verkar som om behörigheten löpt ut eller återkallats. Installera om igen.",
"invalid_credential_action": "Installera om appen",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Lägg till en fråga",
"identifier": "Identifierare",
"duplicate_email": "E-postadressen är duplicerad",
"enter_redirect_url_on_exit_description": "Ange en omdirigerings-URL dit deltagaren skickas när de lämnar mötet.",
"booking_with_payment_cancelled": "Det går inte längre att betala för den här händelsen",
"booking_with_payment_cancelled_already_paid": "En återbetalning för den här bokningsbetalningen är på väg.",
"booking_with_payment_cancelled_refunded": "Den här bokningsbetalningen har återbetalats.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Bokad den",
"routing_form_insights_submitted_at": "Skickad den",
"copy_redirect_url": "Kopiera omdirigerings-URL",
"redirect_url_on_exit": "Omdirigerings-URL vid avslut",
"total_bookings_per_period": "Totalt antal bokningar per period",
"routed_to_per_period": "Dirigerade till per period",
"per_day": "Per dag",
@@ -3002,6 +3010,12 @@
"asc": "Stigande",
"desc": "Fallande",
"verify_email_change": "Verifiera ändring av e-postadress",
"buy_credits": "Köp krediter",
"credits": "Krediter",
"view_and_manage_credits": "Visa och hantera krediter",
"view_and_manage_credits_description": "Visa och hantera krediter för att skicka SMS-meddelanden. En kredit är värd 1¢ (USD). <0>Läs mer</0>",
"buy_additional_credits": "Köp fler krediter (0,01 USD per kredit)",
"overview": "Översikt",
"organization_slug_taken": "Organisationens slug är redan tagen",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Du kan inte skapa en organisation eftersom du redan är en del av en organisation",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Du måste slutföra användarintroduktionen innan du skapar en organisation",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Kunde inte hitta slug för att publicera organisationen",
"picklist": "Urvalslista",
"most_cancelled_bookings": "Flest avbokade bokningar",
"interface_language": "Gränssnittsspråk",
"visitors_browser_language": "Besökarens webbläsarspråk",
"name_or_email": "Namn eller e-post",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Om ingen kontakt hittas, återgå till lead-ägaren om sådan finns",
"credit_purchase_failed": "Köp av krediter misslyckades. Försök igen eller kontakta support.",
"minimum_of_credits_required": "Minst 50 krediter krävs",
"enable_delegation_credential": "Aktivera delegationsautentiseringsuppgift",
"enable_delegation_credential_description": "Ge Cal.com automatisk åtkomst till kalendrarna för alla organisationsmedlemmar genom att aktivera delegationsautentiseringsuppgift.",
"disable_delegation_credential": "Inaktivera delegationsautentiseringsuppgift",
@@ -3165,6 +3183,20 @@
"results": "Resultat",
"view_form": "Visa formulär",
"sms_opt_out_message": "Skriv STOP för att avbryta SMS-meddelanden",
"team_credits_low_warning": "Ditt team {{teamName}} har lågt saldo på krediter",
"user_credits_low_warning": "Du har lågt saldo på krediter",
"action_required_out_of_credits": "[Åtgärd krävs] Ditt team {{teamName}} har slut på krediter",
"action_required_user_out_of_credits": "[Åtgärd krävs] Du har slut på krediter",
"low_credits_warning_message": "Ditt Cal.com-team {{teamName}} har lågt saldo på krediter. För att undvika avbrott i tjänsten, vänligen köp fler krediter. Om ditt saldo tar slut kommer SMS-meddelanden att sluta skickas och istället skickas som e-post.",
"low_credits_warning_message_user": "Ditt Cal.com-konto har lågt saldo på krediter. För att undvika avbrott i tjänsten, vänligen köp fler krediter. Om ditt saldo tar slut kommer SMS-meddelanden att sluta skickas och istället skickas som e-post.",
"credit_limit_reached_message": "Ditt Cal.com-team {{teamName}} har slut på krediter. Som ett resultat skickas SMS-meddelanden nu via e-post istället. För att återuppta SMS-sändningar, vänligen köp fler krediter.",
"credit_limit_reached_message_user": "Ditt Cal.com-konto har slut på krediter. Som ett resultat skickas SMS nu via e-post istället. För att återuppta SMS-utskick, vänligen köp fler krediter.",
"current_credit_balance": "Nuvarande saldo: {{balance}} krediter",
"notification_about_your_booking": "Avisering om din bokning",
"monthly_credits": "Månatliga krediter",
"total_credits": "Totala krediter: {{totalCredits}}",
"remaining_credits": "Återstående krediter: {{remainingCredits}}",
"additional_credits": "Ytterligare krediter",
"routing_form_next_in_queue": "{{count}} nästa i kön",
"routing_form_select_members_to_email": "Skicka e-postsvar till",
"routing_incomplete_booking_tab": "Ofullständiga bokningar",
@@ -3172,5 +3204,10 @@
"matching": "Matchning",
"event_redirect": "Händelseomdirigering",
"reset_form": "Återställ formulär",
"requires_credits": "Kräver krediter",
"requires_credits_tooltip": "Du behöver tillräckligt med krediter på ditt konto för att använda den här funktionen",
"available_credits": "Tillgängliga krediter",
"members_affected_by_disabling_delegation_credential": "Påverkade medlemmar",
"no_members_affected_by_disabling_delegation_credential": "Inga medlemmar påverkas av att inaktivera delegeringsuppgifter",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "İptal edildi: {{date}} tarihindeki {{title}}",
"event_reassigned_subject": "Yeniden atandı: {{date}} tarihinde {{title}}",
"event_request_declined": "Etkinlik talebiniz reddedildi",
"customize_calvideo_settings": "Cal Video Ayarlarını Özelleştir",
"calvideo_settings_description": "Ev sahipleri ve katılımcılar için kayıt izinleri dahil olmak üzere görüntülü toplantı tercihlerini yapılandırın.",
"disable_recording_for_guests": "Misafirler için kaydı devre dışı bırak",
"disable_recording_for_organizer": "Organizatör için kaydı devre dışı bırak",
"event_request_declined_recurring": "Yinelenen etkinlik talebiniz reddedildi",
"event_request_cancelled": "Planlanan etkinliğiniz iptal edildi",
"event_request_reassigned": "Planlanmış etkinliğiniz yeniden atandı",
@@ -1599,6 +1603,7 @@
"team_url": "Ekip URL'si",
"team_members": "Ekip üyeleri",
"more": "Daha fazla",
"and_count_more": "ve {{count}} daha fazla",
"more_page_footer": "Mobil uygulamayı web uygulamasının bir uzantısı olarak görüyoruz. Karmaşık bir işlem yapıyorsanız lütfen web uygulamasına geri dönün.",
"workflow_example_1": "Etkinlik başlamadan 24 saat önce katılımcıya SMS hatırlatıcısı gönder",
"workflow_example_2": "Etkinlik yeniden planlandığında katılımcıya özel SMS gönder",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Telefon numarası (SMS bildirimleri)",
"attendee_email_variable": "Katılımcı e-postası",
"attendee_email_info": "Rezervasyon yaptıran kişinin e-postası",
"booking_uid": "Rezervasyon UID",
"kbar_search_placeholder": "Komut girin veya arayın...",
"invalid_credential": "Hata! İznin süresi dolmuş veya iptal edilmiş gibi görünüyor. Lütfen yeniden yükleyin.",
"invalid_credential_action": "Uygulamayı yeniden yükleyin",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Soru ekle",
"identifier": "Tanımlayıcı",
"duplicate_email": "E-posta yinelenmiş",
"enter_redirect_url_on_exit_description": "Katılımcının toplantıdan ayrıldıktan sonra yönlendirileceği bir URL girin.",
"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.",
"booking_with_payment_cancelled_refunded": "Bu rezervasyon ödemesi iade edildi.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Rezervasyon tarihi",
"routing_form_insights_submitted_at": "Gönderilme tarihi",
"copy_redirect_url": "Yönlendirme URL'sini Kopyala",
"redirect_url_on_exit": "Çıkışta yönlendirme URL'si",
"total_bookings_per_period": "Dönem başına toplam rezervasyon",
"routed_to_per_period": "Dönem başına yönlendirme",
"per_day": "Günlük",
@@ -3002,6 +3010,12 @@
"asc": "Artan",
"desc": "Azalan",
"verify_email_change": "E-posta değişikliğini doğrula",
"buy_credits": "Kredi Satın Al",
"credits": "Krediler",
"view_and_manage_credits": "Kredileri görüntüle ve yönet",
"view_and_manage_credits_description": "SMS mesajları göndermek için kredileri görüntüleyin ve yönetin. Bir kredi 1¢ (USD) değerindedir. <0>Daha fazla bilgi</0>",
"buy_additional_credits": "Ek kredi satın al (kredi başına $0.01)",
"overview": "Genel bakış",
"organization_slug_taken": "Organizasyon kısa adı zaten alınmış",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Zaten bir organizasyonun parçası olduğunuz için yeni bir organizasyon oluşturamazsınız",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Bir organizasyon oluşturmadan önce kullanıcı oryantasyonunu tamamlamanız gerekiyor",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Organizasyonu yayınlamak için kısa ad bulunamadı",
"picklist": "Seçim listesi",
"most_cancelled_bookings": "En çok iptal edilen rezervasyonlar",
"interface_language": "Arayüz dili",
"visitors_browser_language": "Ziyaretçinin tarayıcı dili",
"name_or_email": "İsim veya E-posta",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Hiçbir kişi bulunamazsa, eğer varsa müşteri adayı sahibine geri dön",
"credit_purchase_failed": "Kredi satın alma başarısız oldu. Lütfen tekrar deneyin veya destek ile iletişime geçin.",
"minimum_of_credits_required": "En az 50 kredi gerekli",
"enable_delegation_credential": "Yetki Devri Kimlik Bilgisini Etkinleştir",
"enable_delegation_credential_description": "Yetki devri kimlik bilgisini etkinleştirerek Cal.com'a tüm organizasyon üyelerinin takvimlerine otomatik erişim izni verin.",
"disable_delegation_credential": "Yetki Devri Kimlik Bilgisini Devre Dışı Bırak",
@@ -3165,6 +3183,20 @@
"results": "Sonuçlar",
"view_form": "Formu Görüntüle",
"sms_opt_out_message": "SMS mesajlarından çıkmak için STOP yazın",
"team_credits_low_warning": "{{teamName}} ekibinizin kredileri azalıyor",
"user_credits_low_warning": "Kredileriniz azalıyor",
"action_required_out_of_credits": "[İşlem Gerekli] {{teamName}} ekibinizin kredileri tükendi",
"action_required_user_out_of_credits": "[İşlem Gerekli] Kredileriniz tükendi",
"low_credits_warning_message": "Cal.com ekibiniz {{teamName}} kredileri azalıyor. Hizmet kesintisini önlemek için lütfen ek krediler satın alın. Bakiyeniz tükenirse, SMS mesajları gönderilmeyi durduracak ve bunun yerine e-posta olarak gönderilecektir.",
"low_credits_warning_message_user": "Cal.com hesabınızın kredileri azalıyor. Hizmet kesintisini önlemek için lütfen ek krediler satın alın. Bakiyeniz tükenirse, SMS mesajları gönderilmeyi durduracak ve bunun yerine e-posta olarak gönderilecektir.",
"credit_limit_reached_message": "Cal.com ekibiniz {{teamName}} kredileri tükendi. Sonuç olarak, SMS mesajları artık e-posta yoluyla gönderiliyor. SMS göndermeye devam etmek için lütfen ek krediler satın alın.",
"credit_limit_reached_message_user": "Cal.com hesabınızın kredileri tükendi. Bu nedenle, SMS mesajları artık e-posta yoluyla gönderiliyor. SMS gönderimini sürdürmek için lütfen ek krediler satın alın.",
"current_credit_balance": "Mevcut bakiye: {{balance}} kredi",
"notification_about_your_booking": "Rezervasyonunuz hakkında bildirim",
"monthly_credits": "Aylık krediler",
"total_credits": "Toplam krediler: {{totalCredits}}",
"remaining_credits": "Kalan krediler: {{remainingCredits}}",
"additional_credits": "Ek krediler",
"routing_form_next_in_queue": "Sırada {{count}} sonraki",
"routing_form_select_members_to_email": "E-posta yanıtlarını gönderilecek kişiler",
"routing_incomplete_booking_tab": "Tamamlanmamış Rezervasyonlar",
@@ -3172,5 +3204,10 @@
"matching": "Eşleşiyor",
"event_redirect": "Etkinlik Yönlendirme",
"reset_form": "Formu Sıfırla",
"requires_credits": "Kredi gerektirir",
"requires_credits_tooltip": "Bu özelliği kullanmak için hesabınızda yeterli kredi olması gerekir",
"available_credits": "Kullanılabilir krediler",
"members_affected_by_disabling_delegation_credential": "Etkilenen üyeler",
"no_members_affected_by_disabling_delegation_credential": "Yetkilendirme kimlik bilgisinin devre dışı bırakılmasından etkilenen üye yok",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Yeni dizelerinizi yukarıya ekleyin ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Скасовано: {{title}}, {{date}}",
"event_reassigned_subject": "Перепризначено: {{title}} о {{date}}",
"event_request_declined": "Ваш запит на захід відхилено",
"customize_calvideo_settings": "Налаштування Cal Video",
"calvideo_settings_description": "Налаштуйте параметри відеозустрічей, включно з дозволами на запис для організаторів та учасників.",
"disable_recording_for_guests": "Вимкнути запис для гостей",
"disable_recording_for_organizer": "Вимкнути запис для організатора",
"event_request_declined_recurring": "Ваш запит на періодичний захід відхилено",
"event_request_cancelled": "Ваш запланований захід скасовано",
"event_request_reassigned": "Вашу заплановану подію було перепризначено",
@@ -1599,6 +1603,7 @@
"team_url": "URL команди",
"team_members": "Учасники команди",
"more": "Більше",
"and_count_more": "та ще {{count}}",
"more_page_footer": "Ми вважаємо мобільний додаток розширенням вебдодатка. Якщо вам потрібно виконати якісь складні дії, скористайтесь останнім.",
"workflow_example_1": "Надсилати учаснику нагадування про захід через SMS за 24 години до початку",
"workflow_example_2": "Надсилати учаснику персоналізоване SMS у разі перенесення заходу",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Номер телефону (SMS-сповіщення)",
"attendee_email_variable": "Адреса ел. пошти учасника",
"attendee_email_info": "Адреса ел. пошти особи, яка бронює",
"booking_uid": "UID бронювання",
"kbar_search_placeholder": "Введіть команду або пошуковий запит…",
"invalid_credential": "Отакої! Схоже, дозвіл більше не дійсний або його відкликано. Перевстановіть додаток знову.",
"invalid_credential_action": "Перевстановіть додаток",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Додати запитання",
"identifier": "Ідентифікатор",
"duplicate_email": "Ця електронна адреса дублюється",
"enter_redirect_url_on_exit_description": "Введіть URL-адресу перенаправлення, на яку учасник буде перенаправлений після виходу із зустрічі.",
"booking_with_payment_cancelled": "Більше не можна оплатити цю подію",
"booking_with_payment_cancelled_already_paid": "Повернення коштів за це бронювання вже виконано.",
"booking_with_payment_cancelled_refunded": "Кошти за бронювання повернено.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Час бронювання",
"routing_form_insights_submitted_at": "Час подання",
"copy_redirect_url": "Копіювати URL-адресу перенаправлення",
"redirect_url_on_exit": "URL перенаправлення при виході",
"total_bookings_per_period": "Всього бронювань за період",
"routed_to_per_period": "Перенаправлено за період",
"per_day": "За день",
@@ -3002,6 +3010,12 @@
"asc": "За зростанням",
"desc": "За спаданням",
"verify_email_change": "Підтвердити зміну електронної пошти",
"buy_credits": "Купити кредити",
"credits": "Кредити",
"view_and_manage_credits": "Переглянути та керувати кредитами",
"view_and_manage_credits_description": "Переглядайте та керуйте кредитами для надсилання SMS-повідомлень. Один кредит коштує 1¢ (USD). <0>Дізнатися більше</0>",
"buy_additional_credits": "Купити додаткові кредити ($0.01 за кредит)",
"overview": "Огляд",
"organization_slug_taken": "Ідентифікатор організації вже зайнятий",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Ви не можете створити організацію, оскільки вже є частиною іншої організації",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Вам потрібно завершити ознайомлення користувача перед створенням організації",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Не вдалося знайти слаг для публікації організації",
"picklist": "Список вибору",
"most_cancelled_bookings": "Найбільше скасованих бронювань",
"interface_language": "Мова інтерфейсу",
"visitors_browser_language": "Мова браузера відвідувача",
"name_or_email": "Ім'я або електронна пошта",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Якщо контакт не знайдено, використовувати власника ліда, якщо він існує",
"credit_purchase_failed": "Не вдалося придбати кредити. Спробуйте ще раз або зверніться до служби підтримки.",
"minimum_of_credits_required": "Потрібно мінімум 50 кредитів",
"enable_delegation_credential": "Увімкнути облікові дані делегування",
"enable_delegation_credential_description": "Надайте Cal.com автоматичний доступ до календарів усіх членів організації, увімкнувши облікові дані делегування.",
"disable_delegation_credential": "Вимкнути облікові дані делегування",
@@ -3165,6 +3183,20 @@
"results": "Результати",
"view_form": "Переглянути форму",
"sms_opt_out_message": "Надішліть STOP, щоб відмовитися від SMS-повідомлень",
"team_credits_low_warning": "У вашої команди {{teamName}} закінчуються кредити",
"user_credits_low_warning": "У вас закінчуються кредити",
"action_required_out_of_credits": "[Потрібна дія] У вашої команди {{teamName}} закінчилися кредити",
"action_required_user_out_of_credits": "[Потрібна дія] У вас закінчилися кредити",
"low_credits_warning_message": "У вашої команди Cal.com {{teamName}} закінчуються кредити. Щоб уникнути перебоїв у обслуговуванні, будь ласка, придбайте додаткові кредити. Якщо ваш баланс вичерпається, SMS-повідомлення перестануть надсилатися і натомість будуть надсилатися як електронні листи.",
"low_credits_warning_message_user": "У вашому обліковому записі Cal.com закінчуються кредити. Щоб уникнути перебоїв у обслуговуванні, будь ласка, придбайте додаткові кредити. Якщо ваш баланс вичерпається, SMS-повідомлення перестануть надсилатися і натомість будуть надсилатися як електронні листи.",
"credit_limit_reached_message": "У вашої команди Cal.com {{teamName}} закінчилися кредити. В результаті SMS-повідомлення тепер надсилаються через електронну пошту. Щоб відновити надсилання SMS, будь ласка, придбайте додаткові кредити.",
"credit_limit_reached_message_user": "У вашому обліковому записі Cal.com закінчилися кредити. Внаслідок цього SMS-повідомлення тепер надсилаються електронною поштою. Щоб відновити надсилання SMS, будь ласка, придбайте додаткові кредити.",
"current_credit_balance": "Поточний баланс: {{balance}} кредитів",
"notification_about_your_booking": "Сповіщення про ваше бронювання",
"monthly_credits": "Щомісячні кредити",
"total_credits": "Всього кредитів: {{totalCredits}}",
"remaining_credits": "Залишок кредитів: {{remainingCredits}}",
"additional_credits": "Додаткові кредити",
"routing_form_next_in_queue": "{{count}} наступних у черзі",
"routing_form_select_members_to_email": "Надіслати відповіді електронною поштою",
"routing_incomplete_booking_tab": "Незавершені бронювання",
@@ -3172,5 +3204,10 @@
"matching": "Співставлення",
"event_redirect": "Перенаправлення події",
"reset_form": "Скинути форму",
"requires_credits": "Потребує кредитів",
"requires_credits_tooltip": "Для використання цієї функції на вашому рахунку має бути достатньо кредитів",
"available_credits": "Доступні кредити",
"members_affected_by_disabling_delegation_credential": "Користувачі, на яких вплине вимкнення облікових даних делегування",
"no_members_affected_by_disabling_delegation_credential": "Немає користувачів, на яких вплине вимкнення облікових даних делегування",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "Đã hủy: {{title}} vào {{date}}",
"event_reassigned_subject": "Đã phân công lại: {{title}} vào {{date}}",
"event_request_declined": "Lời mời sự kiện của bạn đã bị từ chối",
"customize_calvideo_settings": "Tùy chỉnh cài đặt Cal Video",
"calvideo_settings_description": "Cấu hình tùy chọn cuộc họp video bao gồm quyền ghi hình cho người chủ trì và người tham dự.",
"disable_recording_for_guests": "Tắt tính năng ghi hình cho khách",
"disable_recording_for_organizer": "Tắt tính năng ghi hình cho người tổ chức",
"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ị hủy",
"event_request_reassigned": "Sự kiện đã lên lịch của bạn đã được phân công lại",
@@ -1599,6 +1603,7 @@
"team_url": "URL nhóm",
"team_members": "Thành viên nhóm",
"more": "Khác",
"and_count_more": "và {{count}} nữa",
"more_page_footer": "Chúng tôi xem ứng dụng di động là mở rộng của ứng dụng web. Nếu bạn sắp thực hiện bất kì thao tác phức tạp nào, vui lòng trở lại ứng dụng web.",
"workflow_example_1": "Gửi lời nhắc SMS cho người tham gia 24 giờ trước lúc bắt đầu sự kiện",
"workflow_example_2": "Gửi SMS tuỳ chỉnh cho người tham gia khi sự kiện được sắp lịch lại",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "Số điện thoại (thông báo SMS)",
"attendee_email_variable": "Email người tham dự",
"attendee_email_info": "Email người tham gia lịch hẹn",
"booking_uid": "Mã UID đặt lịch",
"kbar_search_placeholder": "Nhập một lệnh hoặc tìm kiếm...",
"invalid_credential": "Ôi không! Có vẻ như quyền đã hết hạn hoặc đã bị thu hồi. Vui lòng cài đặt lại.",
"invalid_credential_action": "Cài đặt lại ứng dụng",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "Thêm một câu hỏi",
"identifier": "Mã định danh",
"duplicate_email": "Email bị trùng",
"enter_redirect_url_on_exit_description": "Nhập URL chuyển hướng mà người tham dự sẽ được chuyển đến khi họ rời khỏi cuộc họp.",
"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.",
"booking_with_payment_cancelled_refunded": "Khoản thanh toán lịch hẹn này đã được hoàn tiền.",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "Thời gian đặt lịch",
"routing_form_insights_submitted_at": "Thời gian gửi",
"copy_redirect_url": "Sao chép URL chuyển hướng",
"redirect_url_on_exit": "URL chuyển hướng khi thoát",
"total_bookings_per_period": "Tổng số cuộc hẹn theo kỳ",
"routed_to_per_period": "Được chuyển tiếp theo kỳ",
"per_day": "Mỗi ngày",
@@ -3002,6 +3010,12 @@
"asc": "Tăng dần",
"desc": "Giảm dần",
"verify_email_change": "Xác minh thay đổi email",
"buy_credits": "Mua tín dụng",
"credits": "Tín dụng",
"view_and_manage_credits": "Xem và quản lý tín dụng",
"view_and_manage_credits_description": "Xem và quản lý tín dụng để gửi tin nhắn SMS. Một tín dụng có giá trị 1¢ (USD). <0>Tìm hiểu thêm</0>",
"buy_additional_credits": "Mua thêm tín dụng ($0.01 mỗi tín dụng)",
"overview": "Tổng quan",
"organization_slug_taken": "Slug của tổ chức đã được sử dụng",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "Bạn không thể tạo một tổ chức vì bạn đã là thành viên của một tổ chức khác",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "Bạn cần hoàn thành quá trình hướng dẫn người dùng trước khi tạo một tổ chức",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "Không tìm thấy slug để xuất bản tổ chức",
"picklist": "Danh sách chọn",
"most_cancelled_bookings": "Lịch hẹn bị hủy nhiều nhất",
"interface_language": "Ngôn ngữ giao diện",
"visitors_browser_language": "Ngôn ngữ trình duyệt của khách",
"name_or_email": "Tên hoặc email",
"salesforce_round_robin_skip_fallback_to_lead_owner": "Nếu không tìm thấy liên hệ, chuyển sang chủ sở hữu khách hàng tiềm năng nếu tồn tại",
"credit_purchase_failed": "Mua tín dụng thất bại. Vui lòng thử lại hoặc liên hệ hỗ trợ.",
"minimum_of_credits_required": "Yêu cầu tối thiểu 50 tín dụng",
"enable_delegation_credential": "Bật thông tin xác thực ủy quyền",
"enable_delegation_credential_description": "Cấp cho Cal.com quyền truy cập tự động vào lịch của tất cả thành viên tổ chức bằng cách bật thông tin xác thực ủy quyền.",
"disable_delegation_credential": "Tắt thông tin xác thực ủy quyền",
@@ -3165,6 +3183,20 @@
"results": "Kết quả",
"view_form": "Xem biểu mẫu",
"sms_opt_out_message": "Soạn STOP để hủy đăng ký tin nhắn SMS",
"team_credits_low_warning": "Đội {{teamName}} của bạn sắp hết tín dụng",
"user_credits_low_warning": "Bạn sắp hết tín dụng",
"action_required_out_of_credits": "[Yêu cầu hành động] Đội {{teamName}} của bạn đã hết tín dụng",
"action_required_user_out_of_credits": "[Yêu cầu hành động] Bạn đã hết tín dụng",
"low_credits_warning_message": "Đội Cal.com {{teamName}} của bạn sắp hết tín dụng. Để tránh gián đoạn dịch vụ, vui lòng mua thêm tín dụng. Nếu số dư của bạn hết, tin nhắn SMS sẽ ngừng gửi và thay vào đó sẽ được gửi dưới dạng email.",
"low_credits_warning_message_user": "Tài khoản Cal.com của bạn sắp hết tín dụng. Để tránh gián đoạn dịch vụ, vui lòng mua thêm tín dụng. Nếu số dư của bạn hết, tin nhắn SMS sẽ ngừng gửi và thay vào đó sẽ được gửi dưới dạng email.",
"credit_limit_reached_message": "Đội Cal.com {{teamName}} của bạn đã hết tín dụng. Do đó, tin nhắn SMS hiện đang được gửi qua email. Để tiếp tục gửi SMS, vui lòng mua thêm tín dụng.",
"credit_limit_reached_message_user": "Tài khoản Cal.com của bạn đã hết tín dụng. Do đó, tin nhắn SMS hiện đang được gửi qua email thay thế. Để tiếp tục gửi SMS, vui lòng mua thêm tín dụng.",
"current_credit_balance": "Số dư hiện tại: {{balance}} tín dụng",
"notification_about_your_booking": "Thông báo về lịch hẹn của bạn",
"monthly_credits": "Tín dụng hàng tháng",
"total_credits": "Tổng tín dụng: {{totalCredits}}",
"remaining_credits": "Tín dụng còn lại: {{remainingCredits}}",
"additional_credits": "Tín dụng bổ sung",
"routing_form_next_in_queue": "{{count}} tiếp theo trong hàng đợi",
"routing_form_select_members_to_email": "Gửi phản hồi qua email đến",
"routing_incomplete_booking_tab": "Đặt lịch chưa hoàn thành",
@@ -3172,5 +3204,10 @@
"matching": "Đang khớp",
"event_redirect": "Chuyển hướng sự kiện",
"reset_form": "Đặt lại biểu mẫu",
"requires_credits": "Yêu cầu tín dụng",
"requires_credits_tooltip": "Bạn cần đủ tín dụng trong tài khoản để sử dụng tính năng này",
"available_credits": "Tín dụng khả dụng",
"members_affected_by_disabling_delegation_credential": "Thành viên bị ảnh hưởng",
"no_members_affected_by_disabling_delegation_credential": "Không có thành viên nào bị ảnh hưởng bởi việc tắt thông tin ủy quyền",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "已取消:{{date}} 的 {{title}}",
"event_reassigned_subject": "已重新分配:{{date}}的{{title}}",
"event_request_declined": "您的活动预约请求已被拒绝",
"customize_calvideo_settings": "自定义 Cal 视频设置",
"calvideo_settings_description": "配置视频会议偏好,包括主持人和与会者的录制权限。",
"disable_recording_for_guests": "禁用访客录制",
"disable_recording_for_organizer": "禁用组织者录制",
"event_request_declined_recurring": "您的定期活动请求已被拒绝",
"event_request_cancelled": "您安排的活动已被取消",
"event_request_reassigned": "您预定的活动已被重新分配",
@@ -1599,6 +1603,7 @@
"team_url": "团队链接",
"team_members": "团队成员",
"more": "更多",
"and_count_more": "以及另外 {{count}} 个",
"more_page_footer": "我们将移动应用程序视为 Web 应用程序的扩展。如果您要执行任何复杂操作,请回到 Web 应用程序。",
"workflow_example_1": "在活动开始前 24 小时向参与者发送短信提醒",
"workflow_example_2": "重新安排活动后向参与者发送自定义短信",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "电话号码(短信通知)",
"attendee_email_variable": "参与者电子邮件",
"attendee_email_info": "预约人的电子邮件",
"booking_uid": "预订 UID",
"kbar_search_placeholder": "输入命令或搜索...",
"invalid_credential": "哦不!看起来权限已过期或被撤销。请重新安装。",
"invalid_credential_action": "重新安装应用",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "添加问题",
"identifier": "标识符",
"duplicate_email": "电子邮件重复",
"enter_redirect_url_on_exit_description": "输入一个重定向 URL,参会者离开会议后将被引导至该地址。",
"booking_with_payment_cancelled": "无法再为此活动付费",
"booking_with_payment_cancelled_already_paid": "此预约的退款正在进行中。",
"booking_with_payment_cancelled_refunded": "此预约已退款。",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "预约时间",
"routing_form_insights_submitted_at": "提交时间",
"copy_redirect_url": "复制重定向 URL",
"redirect_url_on_exit": "退出时的重定向 URL",
"total_bookings_per_period": "每时段总预订量",
"routed_to_per_period": "每时段路由数量",
"per_day": "每天",
@@ -3002,6 +3010,12 @@
"asc": "升序",
"desc": "降序",
"verify_email_change": "验证邮箱变更",
"buy_credits": "购买积分",
"credits": "积分",
"view_and_manage_credits": "查看和管理积分",
"view_and_manage_credits_description": "查看和管理发送短信的积分。一个积分价值 1 美分(USD)。<0>了解更多</0>",
"buy_additional_credits": "购买额外积分(每积分 $0.01)",
"overview": "概览",
"organization_slug_taken": "组织短网址已被占用",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "您无法创建组织,因为您已经是某个组织的成员",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "在创建组织之前,您需要完成用户引导流程",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "找不到要发布组织的短链接",
"picklist": "选择列表",
"most_cancelled_bookings": "最多取消的预约",
"interface_language": "界面语言",
"visitors_browser_language": "访客的浏览器语言",
"name_or_email": "姓名或电子邮箱",
"salesforce_round_robin_skip_fallback_to_lead_owner": "如果未找到联系人,则在存在潜在客户所有者的情况下回退到潜在客户所有者",
"credit_purchase_failed": "积分购买失败。请重试或联系支持。",
"minimum_of_credits_required": "最低需要 50 积分",
"enable_delegation_credential": "启用委托凭证",
"enable_delegation_credential_description": "通过启用委托凭证,授予 Cal.com 自动访问所有组织成员日历的权限。",
"disable_delegation_credential": "禁用委托凭证",
@@ -3165,6 +3183,20 @@
"results": "结果",
"view_form": "查看表单",
"sms_opt_out_message": "回复 STOP 以退订短信消息",
"team_credits_low_warning": "您的团队 {{teamName}} 积分不足",
"user_credits_low_warning": "您的积分不足",
"action_required_out_of_credits": "[需要操作] 您的团队 {{teamName}} 积分已用完",
"action_required_user_out_of_credits": "[需要操作] 您的积分已用完",
"low_credits_warning_message": "您的 Cal.com 团队 {{teamName}} 积分不足。为避免服务中断,请购买额外积分。如果余额用完,短信将停止发送并改为通过电子邮件发送。",
"low_credits_warning_message_user": "您的 Cal.com 账户积分不足。为避免服务中断,请购买额外积分。如果余额用完,短信将停止发送并改为通过电子邮件发送。",
"credit_limit_reached_message": "您的 Cal.com 团队 {{teamName}} 积分已用完。因此,短信现已通过电子邮件发送。要恢复发送短信,请购买额外积分。",
"credit_limit_reached_message_user": "您的 Cal.com 账户已用完积分。因此,短信消息现在通过电子邮件发送。要继续发送短信,请购买更多积分。",
"current_credit_balance": "当前余额:{{balance}} 积分",
"notification_about_your_booking": "关于您预订的通知",
"monthly_credits": "每月积分",
"total_credits": "总积分:{{totalCredits}}",
"remaining_credits": "剩余积分:{{remainingCredits}}",
"additional_credits": "额外积分",
"routing_form_next_in_queue": "{{count}} 个排队中",
"routing_form_select_members_to_email": "发送电子邮件回复给",
"routing_incomplete_booking_tab": "未完成的预订",
@@ -3172,5 +3204,10 @@
"matching": "匹配",
"event_redirect": "事件重定向",
"reset_form": "重置表单",
"requires_credits": "需要积分",
"requires_credits_tooltip": "您需要在账户中有足够的积分才能使用此功能",
"available_credits": "可用积分",
"members_affected_by_disabling_delegation_credential": "受影响的成员",
"no_members_affected_by_disabling_delegation_credential": "禁用委托凭据未影响任何成员",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ 在此上方添加您的新字符串 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -44,6 +44,10 @@
"event_cancelled_subject": "已取消:{{date}} 的 {{title}}",
"event_reassigned_subject": "已重新分配:{{date}} 的 {{title}}",
"event_request_declined": "活動請求遭到拒絕",
"customize_calvideo_settings": "自訂 Cal Video 設定",
"calvideo_settings_description": "設定視訊會議偏好,包括主持人和參與者的錄影權限。",
"disable_recording_for_guests": "停用訪客錄影功能",
"disable_recording_for_organizer": "停用組織者錄影功能",
"event_request_declined_recurring": "您的定期活動請求已遭到拒絕",
"event_request_cancelled": "您預定的活動取消了",
"event_request_reassigned": "您預定的活動已被重新分配",
@@ -1599,6 +1603,7 @@
"team_url": "團隊網址",
"team_members": "團隊成員",
"more": "更多",
"and_count_more": "以及另外 {{count}} 項",
"more_page_footer": "我們將行動應用程式視為 Web 應用程式的擴充項目。若要執行任何複雜的動作,請回到 Web 應用程式。",
"workflow_example_1": "活動開始前 24 小時傳送簡訊提醒給與會者",
"workflow_example_2": "重新預定活動時傳送自訂簡訊給與會者",
@@ -1779,6 +1784,7 @@
"number_sms_notifications": "電話號碼 (簡訊通知)",
"attendee_email_variable": "與會者電子郵件",
"attendee_email_info": "預約人電子郵件",
"booking_uid": "預約 UID",
"kbar_search_placeholder": "輸入指令或搜尋…",
"invalid_credential": "糟糕!權限似乎過期或遭到撤銷。請重新安裝。",
"invalid_credential_action": "重新安裝應用程式",
@@ -2004,6 +2010,7 @@
"add_a_booking_question": "新增問題",
"identifier": "識別項",
"duplicate_email": "電子郵件重複",
"enter_redirect_url_on_exit_description": "輸入一個重新導向的 URL,參與者離開會議後將被引導至該網址。",
"booking_with_payment_cancelled": "無法再為此活動付費",
"booking_with_payment_cancelled_already_paid": "此預約付款的退款已在辦理中。",
"booking_with_payment_cancelled_refunded": "此預約付款已退款。",
@@ -2890,6 +2897,7 @@
"routing_form_insights_booking_at": "預約時間",
"routing_form_insights_submitted_at": "提交時間",
"copy_redirect_url": "複製重新導向網址",
"redirect_url_on_exit": "離開時的重新導向 URL",
"total_bookings_per_period": "每期預約總數",
"routed_to_per_period": "每期路由數量",
"per_day": "每日",
@@ -3002,6 +3010,12 @@
"asc": "升序",
"desc": "降序",
"verify_email_change": "驗證電子郵件變更",
"buy_credits": "購買點數",
"credits": "點數",
"view_and_manage_credits": "檢視與管理點數",
"view_and_manage_credits_description": "檢視與管理用於發送 SMS 簡訊的點數。一點數等於 1 美分 (USD)。<0>了解更多</0>",
"buy_additional_credits": "購買額外點數(每點數 $0.01)",
"overview": "概覽",
"organization_slug_taken": "組織簡稱已被使用",
"you_cannot_create_an_organization_as_you_are_already_part_of_an_organization": "您無法創建組織,因為您已經是某個組織的成員",
"you_need_to_complete_user_onboarding_before_creating_an_organization": "在創建組織之前,您需要完成用戶引導流程",
@@ -3093,8 +3107,12 @@
"could_not_find_slug_to_publish_org": "找不到要發布組織的短網址",
"picklist": "選項清單",
"most_cancelled_bookings": "最多取消的預約",
"interface_language": "介面語言",
"visitors_browser_language": "訪客的瀏覽器語言",
"name_or_email": "姓名或電子郵件",
"salesforce_round_robin_skip_fallback_to_lead_owner": "如果找不到聯絡人,則回退到潛在客戶擁有者(如果存在)",
"credit_purchase_failed": "點數購買失敗。請重試或聯繫支援。",
"minimum_of_credits_required": "最低需購買 50 點數",
"enable_delegation_credential": "啟用委派憑證",
"enable_delegation_credential_description": "啟用委派憑證,授予 Cal.com 自動訪問所有組織成員日曆的權限。",
"disable_delegation_credential": "停用委派憑證",
@@ -3165,6 +3183,20 @@
"results": "結果",
"view_form": "檢視表單",
"sms_opt_out_message": "傳送 STOP 以取消接收 SMS 訊息",
"team_credits_low_warning": "您的團隊 {{teamName}} 的點數即將用完",
"user_credits_low_warning": "您的點數即將用完",
"action_required_out_of_credits": "[需要採取行動] 您的團隊 {{teamName}} 的點數已用完",
"action_required_user_out_of_credits": "[需要採取行動] 您的點數已用完",
"low_credits_warning_message": "您的 Cal.com 團隊 {{teamName}} 的點數即將用完。為避免服務中斷,請購買額外點數。如果餘額用完,SMS 簡訊將停止發送,並改為以電子郵件發送。",
"low_credits_warning_message_user": "您的 Cal.com 帳戶的點數即將用完。為避免服務中斷,請購買額外點數。如果餘額用完,SMS 簡訊將停止發送,並改為以電子郵件發送。",
"credit_limit_reached_message": "您的 Cal.com 團隊 {{teamName}} 的點數已用完。因此,SMS 簡訊現在改為以電子郵件發送。若要恢復發送 SMS,請購買額外點數。",
"credit_limit_reached_message_user": "您的 Cal.com 帳戶已用完點數。因此,SMS 短訊現在改以電子郵件方式發送。若要繼續發送 SMS,請購買額外的點數。",
"current_credit_balance": "目前餘額:{{balance}} 點數",
"notification_about_your_booking": "關於您的預約的通知",
"monthly_credits": "每月點數",
"total_credits": "總點數:{{totalCredits}}",
"remaining_credits": "剩餘點數:{{remainingCredits}}",
"additional_credits": "額外點數",
"routing_form_next_in_queue": "{{count}} 位在佇列中",
"routing_form_select_members_to_email": "將電子郵件回覆發送給",
"routing_incomplete_booking_tab": "未完成的預約",
@@ -3172,5 +3204,10 @@
"matching": "匹配",
"event_redirect": "事件重新導向",
"reset_form": "重設表單",
"requires_credits": "需要點數",
"requires_credits_tooltip": "您需要在帳戶中有足夠的點數才能使用此功能",
"available_credits": "可用點數",
"members_affected_by_disabling_delegation_credential": "受影響的成員",
"no_members_affected_by_disabling_delegation_credential": "停用委派憑證未影響任何成員",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ 請在此處新增您的字串 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -60,7 +60,9 @@ async function processReschedule({
booking === null ||
!booking.eventTypeId ||
(booking?.eventTypeId === props.eventData?.id &&
(booking.status !== BookingStatus.CANCELLED || allowRescheduleForCancelledBooking))
(booking.status !== BookingStatus.CANCELLED ||
allowRescheduleForCancelledBooking ||
!!(props.eventData as any)?.allowReschedulingCancelledBookings))
) {
props.booking = booking;
props.rescheduleUid = Array.isArray(rescheduleUid) ? rescheduleUid[0] : rescheduleUid;
@@ -2,6 +2,7 @@ import type { GetServerSidePropsContext } from "next";
import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
import { getDeploymentKey } from "@calcom/features/ee/deployment/lib/getDeploymentKey";
import { DeploymentRepository } from "@calcom/lib/server/repository/deployment";
import prisma from "@calcom/prisma";
import { UserPermissionRole } from "@calcom/prisma/enums";
@@ -17,14 +18,12 @@ export async function getServerSideProps(context: GetServerSidePropsContext) {
notFound: true,
} as const;
}
const deploymentKey = await prisma.deployment.findUnique({
where: { id: 1 },
select: { licenseKey: true },
});
// direct access is intentional.
const deploymentRepo = new DeploymentRepository(prisma);
const licenseKey = await deploymentRepo.getLicenseKeyWithId(1);
// Check existent CALCOM_LICENSE_KEY env var and account for it
if (!!process.env.CALCOM_LICENSE_KEY && !deploymentKey?.licenseKey) {
if (!!process.env.CALCOM_LICENSE_KEY && !licenseKey) {
await prisma.deployment.upsert({
where: { id: 1 },
update: {
@@ -38,7 +37,7 @@ export async function getServerSideProps(context: GetServerSidePropsContext) {
});
}
const isFreeLicense = (await getDeploymentKey(prisma)) === "";
const isFreeLicense = (await getDeploymentKey(deploymentRepo)) === "";
return {
props: {
+1
View File
@@ -27,6 +27,7 @@ vi.mock("@calcom/lib/constants", () => ({
IS_PRODUCTION: true,
WEBAPP_URL: "http://localhost:3000",
RESERVED_SUBDOMAINS: ["auth", "docs"],
SINGLE_ORG_SLUG: "",
}));
describe("getSchedule", () => {
@@ -66,6 +66,7 @@ vi.mock("@calcom/lib/constants", () => ({
WEBAPP_URL: "http://localhost:3000",
RESERVED_SUBDOMAINS: ["auth", "docs"],
ROLLING_WINDOW_PERIOD_MAX_DAYS_TO_CHECK: 61,
SINGLE_ORG_SLUG: "",
}));
describe("getSchedule", () => {
@@ -147,6 +147,7 @@ describe("handleChildrenEventTypes", () => {
userId: 4,
rrSegmentQueryValue: undefined,
assignRRMembersUsingSegment: false,
allowReschedulingCancelledBookings: false,
},
});
expect(result.newUserIds).toEqual([4]);
@@ -206,6 +207,7 @@ describe("handleChildrenEventTypes", () => {
deleteMany: {},
},
instantMeetingScheduleId: undefined,
allowReschedulingCancelledBookings: false,
},
where: {
userId_parentId: {
@@ -315,6 +317,7 @@ describe("handleChildrenEventTypes", () => {
workflows: undefined,
rrSegmentQueryValue: undefined,
assignRRMembersUsingSegment: false,
allowReschedulingCancelledBookings: false,
},
});
expect(result.newUserIds).toEqual([4]);
@@ -371,6 +374,7 @@ describe("handleChildrenEventTypes", () => {
},
lockTimeZoneToggleOnBookingPage: false,
requiresBookerEmailVerification: false,
allowReschedulingCancelledBookings: false,
},
where: {
userId_parentId: {
@@ -476,6 +480,7 @@ describe("handleChildrenEventTypes", () => {
rrSegmentQueryValue: undefined,
assignRRMembersUsingSegment: false,
useEventLevelSelectedCalendars: false,
allowReschedulingCancelledBookings: false,
},
});
const { profileId, rrSegmentQueryValue, ...rest } = evType;
+5 -1
View File
@@ -17679,13 +17679,17 @@
"type": "string",
"example": "John Doe"
},
"username": {
"type": "string",
"example": "john-doe"
},
"avatarUrl": {
"type": "string",
"nullable": true,
"example": "https://cal.com/api/avatar/d95949bc-ccb1-400f-acf6-045c51a16856.png"
}
},
"required": ["userId", "name"]
"required": ["userId", "name", "username"]
},
"EventTypeTeam": {
"type": "object",
@@ -25,6 +25,10 @@ export default function Availability() {
onDeleteSuccess={() => {
console.log("Deleted schedule successfully");
}}
onFormStateChange={(formState) => {
console.log("Form state updated");
// Access form data: formState.name, formState.schedule, formState.timeZone, etc.
}}
/>
</>
)
@@ -63,6 +67,10 @@ export default function Availability() {
onDeleteSuccess={() => {
console.log("Deleted schedule successfully");
}}
onFormStateChange={(formState) => {
console.log("Form state changed:", formState);
// Access form data including dateOverrides: formState.dateOverrides
}}
/>
</>
)
@@ -99,6 +107,7 @@ Below is a list of props that can be passed to the availability settings atom.
| onUpdateError | No | A callback function that gets triggered when the user availability fails to update |
| onDeleteSuccess | No | A callback function that gets triggered when the user availability is deleted successfully |
| onDeleteError | No | A callback function that gets triggered when the user availability fails to delete |
| onFormStateChange | No | A callback function that gets triggered whenever the form state changes, providing real-time access to form data |
| enableOverrides | No | Allows user to enable or disable date overrides display in the atom; defaults to disabled |
| disableEditableHeading | No | Prevents users from editing the heading |
| allowDelete | No | When set to false, this prop hides the delete button |
+37
View File
@@ -46,6 +46,10 @@ checksums:
event_cancelled_subject: 3370b9760bee4fdec5904dc6a823fa99
event_reassigned_subject: e03f9cbbb45fa388e54b6445ff1ea49f
event_request_declined: c9073a992aa0f82ad7059037507632db
customize_calvideo_settings: feeec6034a9e8b07cffcb0eacf1343e4
calvideo_settings_description: ea62d26cbfcad5d0bf4d27a32866dc50
disable_recording_for_guests: d8598c68957f6d46d926adae375d2e95
disable_recording_for_organizer: b58736c25ed97f0b88c4f69cb0346f7d
event_request_declined_recurring: d1cbc5a80ca61e7b15fab0ebd8782bdf
event_request_cancelled: 130fd0087bd535dc755eec339732dcaf
event_request_reassigned: 75288fd880682c0ffe6d1266ac1ff2a6
@@ -1600,6 +1604,7 @@ checksums:
team_url: 29e1dfe4aef6e2ad84f0828ad60b1d3b
team_members: d148d3e9f3d013feddc4f41bb620ec28
more: ee5e035ee328a8947be2ea44e338a57d
and_count_more: 307b4b3b3d8b441b35142907df4197fa
more_page_footer: e2deddfbcc810846fd0cded621687b73
workflow_example_1: 5f72e83ced3d7155fbf3d5bbc86ac868
workflow_example_2: c1153c28e0ec440735b0e19ee680cba9
@@ -1776,6 +1781,7 @@ checksums:
number_sms_notifications: ad31276ea0a7846797a93fcc86d36d11
attendee_email_variable: 31a830ea056b94cd705c86954c3312a9
attendee_email_info: 682f8767c3a870a20fc3b82c3f7ebdb7
booking_uid: b15ff03d1f75a6f45f582a6aec8835c3
kbar_search_placeholder: 1df07536a83ad006b7aafd795e233748
invalid_credential: b250515b8a75c34919a2376a07fcd4cc
invalid_credential_action: 127776c374b77c1b3883d5cb7f9a8817
@@ -2001,6 +2007,7 @@ checksums:
add_a_booking_question: 7db7665e4d56b231b4012b650477672d
identifier: 9e8ed8445c2507ba0f9deac1260dafce
duplicate_email: 5e8280ca94bc03b927f62aa30357f7b9
enter_redirect_url_on_exit_description: ef659b6801aae3a7d42f07ee129c0d41
booking_with_payment_cancelled: 1f2436bb21c864f063a8560d0eef608e
booking_with_payment_cancelled_already_paid: 27e02c756a46e580e60474cf130eacf3
booking_with_payment_cancelled_refunded: ccdfcd6ec8408d23c3edc2d0bcda6730
@@ -2887,6 +2894,7 @@ checksums:
routing_form_insights_booking_at: ca8a804eb7068845bede9adbb6bb7d3b
routing_form_insights_submitted_at: b95063c78796a32900c35743237512c4
copy_redirect_url: fe8a7495a0c603851e00750342721f4e
redirect_url_on_exit: 7cbeb65b589e03d34fa4626c2bf2fac1
total_bookings_per_period: 4ddd62a03c104739a99c23bf60545367
routed_to_per_period: a950330d2a551b4840bf77f044d4dd64
per_day: 861a51979a317ed5ce9e2a584c4d85a3
@@ -2999,6 +3007,12 @@ checksums:
asc: 859eb73e4d1bda5351ca36472efe6492
desc: 55089d006e5eb530227e6f1c41707fc9
verify_email_change: b7a83c7a3100b128e8d1a8f36a8171ba
buy_credits: d5c34a6e8829e3a475dd5cda6d7e10ac
credits: b21b88917ea0c8e2a71888756f71d0be
view_and_manage_credits: 4d483027287e2349b3d68cd0643c96f8
view_and_manage_credits_description: d6cdd13f5eec3810bc0c697d3ca4dd0e
buy_additional_credits: 4a3b39af3e55b16d932bb0b4b3e0f8b1
overview: 30c54e4dc4ce599b87d94be34a8617f5
organization_slug_taken: 492cc9dd76b78c9210c0c7dfafbfd040
you_cannot_create_an_organization_as_you_are_already_part_of_an_organization: f7df69b7f201bdfc1f26eb41006102a2
you_need_to_complete_user_onboarding_before_creating_an_organization: c1489f3a1ddc3859fd07e83b3b07be66
@@ -3090,8 +3104,12 @@ checksums:
could_not_find_slug_to_publish_org: 86399c898effaf4d2b6113e91ffebb95
picklist: 5a3d44808605be31190c9956ecc5e412
most_cancelled_bookings: ad8362bfa418808b784435e1b3f013c8
interface_language: a5c8eaac0640a27d6805c86b3faecd16
visitors_browser_language: bda926411281203feec4334bc43a15f6
name_or_email: d6e1cc7612211a2f7080b5096510f282
salesforce_round_robin_skip_fallback_to_lead_owner: 95ba66cdc5f1422c48d907e9d4d442b9
credit_purchase_failed: a55a743ea071dadcc5e59921c4b303ca
minimum_of_credits_required: 3620f8415aa038110d2529d7fddaa408
enable_delegation_credential: 444d27809dd4b53d6d4159361109fc69
enable_delegation_credential_description: c713439db9cc156b5a381f60b58b83c7
disable_delegation_credential: 3e2100b538dc75842cb06842eec4ac19
@@ -3162,6 +3180,20 @@ checksums:
results: 1a8f50c90d0a0d500624dd3a62aab6ee
view_form: 4c60dbda532d24ff38f8b41333543a3a
sms_opt_out_message: 51959b7ca038e02d867701bfe02e0347
team_credits_low_warning: 3ebc7812714842a0d2ad10b364243f76
user_credits_low_warning: 239f90e2fe4d66e62a97100a59a29e03
action_required_out_of_credits: 93d1fa52db6acb8c4f445052ce73d622
action_required_user_out_of_credits: 112c1ee5e5ae06ad289684ecb3934ee4
low_credits_warning_message: d3194620077e2dfaa1e198c225e767f3
low_credits_warning_message_user: 4c9536a4463fd75fd5c15d8e1e7c9869
credit_limit_reached_message: d12b88a279d619ad18ff3c286ebec2b3
credit_limit_reached_message_user: d5446b226f841605083f7b2dd7b81065
current_credit_balance: 53c4f4d7c65f327c56483735a5df9831
notification_about_your_booking: a98d4c351d6ec6042e488f90b0864d41
monthly_credits: a95229fd9020089dfad6fb6cd92f7952
total_credits: b834a4f211978381eca9bdc33ea5e357
remaining_credits: 60a3f4d78699e2e60c69da9cecde9226
additional_credits: 1c05adf1d03583d8ae1bbdb4ed609687
routing_form_next_in_queue: 47946873f93e70e61476646edc7e5f1e
routing_form_select_members_to_email: be35ce1ba18d8d6ed66c043cfe812a8b
routing_incomplete_booking_tab: 8d30d258714176df4fae2826ebb1973a
@@ -3169,4 +3201,9 @@ checksums:
matching: f46e191931edeb7df0ddfc6d50001851
event_redirect: c7962c0568581ec66d24f799de53356c
reset_form: d4bf98db642dedeaf71f3c18353b2200
requires_credits: 02b9411ac23abf3dac48ff348ca1a89f
requires_credits_tooltip: 4368005e0d2453e8a99a3d3dbc2634bb
available_credits: 943bb58ad49bb2242c61d345565bb28c
members_affected_by_disabling_delegation_credential: 693f7323afd369947660403297a3f1dc
no_members_affected_by_disabling_delegation_credential: 0ec66caddbcbe0c935a75e4114ff6629
ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS: 18323f2f3fabb169a7cb50ff62433850
@@ -1,9 +1,10 @@
import { getLocation, getRichDescription } from "@calcom/lib/CalEventParser";
import { getLocation } from "@calcom/lib/CalEventParser";
import logger from "@calcom/lib/logger";
import prisma from "@calcom/prisma";
import type { BufferedBusyTime } from "@calcom/types/BufferedBusyTime";
import type {
Calendar,
CalendarServiceEvent,
CalendarEvent,
EventBusyDate,
IntegrationCalendar,
@@ -130,7 +131,7 @@ export default class FeishuCalendarService implements Calendar {
});
};
async createEvent(event: CalendarEvent, credentialId: number): Promise<NewCalendarEventType> {
async createEvent(event: CalendarServiceEvent, credentialId: number): Promise<NewCalendarEventType> {
let eventId = "";
let eventRespData;
const mainHostDestinationCalendar = event.destinationCalendar
@@ -200,7 +201,7 @@ export default class FeishuCalendarService implements Calendar {
* @param event
* @returns
*/
async updateEvent(uid: string, event: CalendarEvent, externalCalendarId?: string) {
async updateEvent(uid: string, event: CalendarServiceEvent, externalCalendarId?: string) {
const eventId = uid;
let eventRespData;
const mainHostDestinationCalendar = event.destinationCalendar?.find(
@@ -372,10 +373,10 @@ export default class FeishuCalendarService implements Calendar {
}
};
private translateEvent = (event: CalendarEvent): FeishuEvent => {
private translateEvent = (event: CalendarServiceEvent): FeishuEvent => {
const feishuEvent: FeishuEvent = {
summary: event.title,
description: getRichDescription(event),
description: event.calendarDescription,
start_time: {
timestamp: parseEventTime2Timestamp(event.startTime),
timezone: event.organizer.timeZone,
@@ -12,13 +12,13 @@ import type { FreeBusyArgs } from "@calcom/features/calendar-cache/calendar-cach
import { getTimeMax, getTimeMin } from "@calcom/features/calendar-cache/lib/datesForCache";
import { getLocation, getRichDescription } from "@calcom/lib/CalEventParser";
import { uniqueBy } from "@calcom/lib/array";
import { formatCalEvent } from "@calcom/lib/formatCalendarEvent";
import logger from "@calcom/lib/logger";
import { safeStringify } from "@calcom/lib/safeStringify";
import { SelectedCalendarRepository } from "@calcom/lib/server/repository/selectedCalendar";
import prisma from "@calcom/prisma";
import type {
Calendar,
CalendarServiceEvent,
CalendarEvent,
EventBusyDate,
IntegrationCalendar,
@@ -168,75 +168,70 @@ export default class GoogleCalendarService implements Calendar {
}
async createEvent(
calEventRaw: CalendarEvent,
calEvent: CalendarServiceEvent,
credentialId: number,
externalCalendarId?: string
): Promise<NewCalendarEventType> {
this.log.debug("Creating event");
const formattedCalEvent = formatCalEvent(calEventRaw);
const payload: calendar_v3.Schema$Event = {
summary: formattedCalEvent.title,
description: getRichDescription(formattedCalEvent),
summary: calEvent.title,
description: calEvent.calendarDescription,
start: {
dateTime: formattedCalEvent.startTime,
timeZone: formattedCalEvent.organizer.timeZone,
dateTime: calEvent.startTime,
timeZone: calEvent.organizer.timeZone,
},
end: {
dateTime: formattedCalEvent.endTime,
timeZone: formattedCalEvent.organizer.timeZone,
dateTime: calEvent.endTime,
timeZone: calEvent.organizer.timeZone,
},
attendees: this.getAttendees({ event: formattedCalEvent, hostExternalCalendarId: externalCalendarId }),
attendees: this.getAttendees({ event: calEvent, hostExternalCalendarId: externalCalendarId }),
reminders: {
useDefault: true,
},
guestsCanSeeOtherGuests: !!formattedCalEvent.seatsPerTimeSlot
? formattedCalEvent.seatsShowAttendees
: true,
iCalUID: formattedCalEvent.iCalUID,
guestsCanSeeOtherGuests: !!calEvent.seatsPerTimeSlot ? calEvent.seatsShowAttendees : true,
iCalUID: calEvent.iCalUID,
};
if (calEventRaw.hideCalendarEventDetails) {
if (calEvent.hideCalendarEventDetails) {
payload.visibility = "private";
}
if (formattedCalEvent.location) {
payload["location"] = getLocation(formattedCalEvent);
if (calEvent.location) {
payload["location"] = getLocation(calEvent);
}
if (formattedCalEvent.recurringEvent) {
if (calEvent.recurringEvent) {
const rule = new RRule({
freq: formattedCalEvent.recurringEvent.freq,
interval: formattedCalEvent.recurringEvent.interval,
count: formattedCalEvent.recurringEvent.count,
freq: calEvent.recurringEvent.freq,
interval: calEvent.recurringEvent.interval,
count: calEvent.recurringEvent.count,
});
payload["recurrence"] = [rule.toString()];
}
if (formattedCalEvent.conferenceData && formattedCalEvent.location === MeetLocationType) {
payload["conferenceData"] = formattedCalEvent.conferenceData;
if (calEvent.conferenceData && calEvent.location === MeetLocationType) {
payload["conferenceData"] = calEvent.conferenceData;
}
const calendar = await this.authedCalendar();
// Find in formattedCalEvent.destinationCalendar the one with the same credentialId
const selectedCalendar =
externalCalendarId ??
(formattedCalEvent.destinationCalendar?.find((cal) => cal.credentialId === credentialId)?.externalId ||
(calEvent.destinationCalendar?.find((cal) => cal.credentialId === credentialId)?.externalId ||
"primary");
try {
let event: calendar_v3.Schema$Event | undefined;
let recurringEventId = null;
if (formattedCalEvent.existingRecurringEvent) {
recurringEventId = formattedCalEvent.existingRecurringEvent.recurringEventId;
if (calEvent.existingRecurringEvent) {
recurringEventId = calEvent.existingRecurringEvent.recurringEventId;
const recurringEventInstances = await calendar.events.instances({
calendarId: selectedCalendar,
eventId: formattedCalEvent.existingRecurringEvent.recurringEventId,
eventId: calEvent.existingRecurringEvent.recurringEventId,
});
if (recurringEventInstances.data.items) {
const calComEventStartTime = dayjs(formattedCalEvent.startTime)
.tz(formattedCalEvent.organizer.timeZone)
.format();
const calComEventStartTime = dayjs(calEvent.startTime).tz(calEvent.organizer.timeZone).format();
for (let i = 0; i < recurringEventInstances.data.items.length; i++) {
const instance = recurringEventInstances.data.items[i];
const instanceStartTime = dayjs(instance.start?.dateTime)
@@ -260,10 +255,8 @@ export default class GoogleCalendarService implements Calendar {
calendarId: selectedCalendar,
eventId: event.id || "",
requestBody: {
location: getLocation(formattedCalEvent),
description: getRichDescription({
...formattedCalEvent,
}),
location: getLocation(calEvent),
description: calEvent.calendarDescription,
},
});
}
@@ -290,7 +283,7 @@ export default class GoogleCalendarService implements Calendar {
eventId: event.id || "",
requestBody: {
description: getRichDescription({
...formattedCalEvent,
...calEvent,
additionalInformation: { hangoutLink: event.hangoutLink },
}),
},
@@ -340,43 +333,38 @@ export default class GoogleCalendarService implements Calendar {
}
}
async updateEvent(uid: string, event: CalendarEvent, externalCalendarId: string): Promise<any> {
const formattedCalEvent = formatCalEvent(event);
async updateEvent(uid: string, event: CalendarServiceEvent, externalCalendarId: string): Promise<any> {
const payload: calendar_v3.Schema$Event = {
summary: formattedCalEvent.title,
description: getRichDescription(formattedCalEvent),
summary: event.title,
description: event.calendarDescription,
start: {
dateTime: formattedCalEvent.startTime,
timeZone: formattedCalEvent.organizer.timeZone,
dateTime: event.startTime,
timeZone: event.organizer.timeZone,
},
end: {
dateTime: formattedCalEvent.endTime,
timeZone: formattedCalEvent.organizer.timeZone,
dateTime: event.endTime,
timeZone: event.organizer.timeZone,
},
attendees: this.getAttendees({ event: formattedCalEvent, hostExternalCalendarId: externalCalendarId }),
attendees: this.getAttendees({ event, hostExternalCalendarId: externalCalendarId }),
reminders: {
useDefault: true,
},
guestsCanSeeOtherGuests: !!formattedCalEvent.seatsPerTimeSlot
? formattedCalEvent.seatsShowAttendees
: true,
guestsCanSeeOtherGuests: !!event.seatsPerTimeSlot ? event.seatsShowAttendees : true,
};
if (formattedCalEvent.location) {
payload["location"] = getLocation(formattedCalEvent);
if (event.location) {
payload["location"] = getLocation(event);
}
if (formattedCalEvent.conferenceData && formattedCalEvent.location === MeetLocationType) {
payload["conferenceData"] = formattedCalEvent.conferenceData;
if (event.conferenceData && event.location === MeetLocationType) {
payload["conferenceData"] = event.conferenceData;
}
const calendar = await this.authedCalendar();
const selectedCalendar =
(externalCalendarId
? formattedCalEvent.destinationCalendar?.find((cal) => cal.externalId === externalCalendarId)
?.externalId
? event.destinationCalendar?.find((cal) => cal.externalId === externalCalendarId)?.externalId
: undefined) || "primary";
try {
@@ -401,7 +389,7 @@ export default class GoogleCalendarService implements Calendar {
eventId: evt.data.id || "",
requestBody: {
description: getRichDescription({
...formattedCalEvent,
...event,
additionalInformation: { hangoutLink: evt.data.hangoutLink },
}),
},
@@ -423,7 +411,7 @@ export default class GoogleCalendarService implements Calendar {
} catch (error) {
this.log.error(
"There was an error updating event in google calendar: ",
safeStringify({ error, event: formattedCalEvent, uid })
safeStringify({ error, event, uid })
);
throw error;
}
@@ -51,8 +51,14 @@ export type MockOAuth2Client = {
type: "oauth2";
args: [string, string, string];
setCredentials: typeof setCredentialsMock;
refreshToken: Function;
isTokenExpiring: Function;
refreshToken: () => Promise<{
res: {
data: typeof MOCK_OAUTH2_TOKEN;
status: number;
statusText: string;
};
}>;
isTokenExpiring: () => boolean;
};
export const MOCK_JWT_TOKEN = {
@@ -1,9 +1,10 @@
import { getLocation, getRichDescription } from "@calcom/lib/CalEventParser";
import { getLocation } from "@calcom/lib/CalEventParser";
import logger from "@calcom/lib/logger";
import prisma from "@calcom/prisma";
import type { BufferedBusyTime } from "@calcom/types/BufferedBusyTime";
import type {
Calendar,
CalendarServiceEvent,
CalendarEvent,
EventBusyDate,
IntegrationCalendar,
@@ -130,7 +131,7 @@ export default class LarkCalendarService implements Calendar {
});
};
async createEvent(event: CalendarEvent, credentialId: number): Promise<NewCalendarEventType> {
async createEvent(event: CalendarServiceEvent, credentialId: number): Promise<NewCalendarEventType> {
let eventId = "";
let eventRespData;
const mainHostDestinationCalendar = event.destinationCalendar
@@ -200,7 +201,7 @@ export default class LarkCalendarService implements Calendar {
* @param event
* @returns
*/
async updateEvent(uid: string, event: CalendarEvent, externalCalendarId?: string) {
async updateEvent(uid: string, event: CalendarServiceEvent, externalCalendarId?: string) {
const eventId = uid;
let eventRespData;
const mainHostDestinationCalendar = event.destinationCalendar?.find(
@@ -372,10 +373,10 @@ export default class LarkCalendarService implements Calendar {
}
};
private translateEvent = (event: CalendarEvent): LarkEvent => {
private translateEvent = (event: CalendarServiceEvent): LarkEvent => {
const larkEvent: LarkEvent = {
summary: event.title,
description: getRichDescription(event),
description: event.calendarDescription,
start_time: {
timestamp: parseEventTime2Timestamp(event.startTime),
timezone: event.organizer.timeZone,
@@ -2,18 +2,17 @@ import type { Calendar as OfficeCalendar, User, Event } from "@microsoft/microso
import type { DefaultBodyType } from "msw";
import dayjs from "@calcom/dayjs";
import { getLocation, getRichDescription } from "@calcom/lib/CalEventParser";
import { getLocation } from "@calcom/lib/CalEventParser";
import {
CalendarAppDelegationCredentialInvalidGrantError,
CalendarAppDelegationCredentialConfigurationError,
} from "@calcom/lib/CalendarAppError";
import { handleErrorsJson, handleErrorsRaw } from "@calcom/lib/errors";
import { formatCalEvent } from "@calcom/lib/formatCalendarEvent";
import logger from "@calcom/lib/logger";
import type { BufferedBusyTime } from "@calcom/types/BufferedBusyTime";
import type {
Calendar,
CalendarEvent,
CalendarServiceEvent,
EventBusyDate,
IntegrationCalendar,
NewCalendarEventType,
@@ -240,7 +239,7 @@ export default class Office365CalendarService implements Calendar {
return azureUserId ? `/users/${this.azureUserId}` : "/me";
}
async createEvent(event: CalendarEvent, credentialId: number): Promise<NewCalendarEventType> {
async createEvent(event: CalendarServiceEvent, credentialId: number): Promise<NewCalendarEventType> {
const mainHostDestinationCalendar = event.destinationCalendar
? event.destinationCalendar.find((cal) => cal.credentialId === credentialId) ??
event.destinationCalendar[0]
@@ -250,10 +249,9 @@ export default class Office365CalendarService implements Calendar {
? `${await this.getUserEndpoint()}/calendars/${mainHostDestinationCalendar?.externalId}/events`
: `${await this.getUserEndpoint()}/calendar/events`;
const formattedEvent = formatCalEvent(event);
const response = await this.fetcher(eventsUrl, {
method: "POST",
body: JSON.stringify(this.translateEvent(formattedEvent)),
body: JSON.stringify(this.translateEvent(event)),
});
const responseJson = await handleErrorsJson<NewCalendarEventType & { iCalUId: string }>(response);
@@ -266,7 +264,7 @@ export default class Office365CalendarService implements Calendar {
}
}
async updateEvent(uid: string, event: CalendarEvent): Promise<NewCalendarEventType> {
async updateEvent(uid: string, event: CalendarServiceEvent): Promise<NewCalendarEventType> {
try {
const response = await this.fetcher(`${await this.getUserEndpoint()}/calendar/events/${uid}`, {
method: "PATCH",
@@ -403,12 +401,12 @@ export default class Office365CalendarService implements Calendar {
});
}
private translateEvent = (event: CalendarEvent) => {
private translateEvent = (event: CalendarServiceEvent) => {
const office365Event: Event = {
subject: event.title,
body: {
contentType: "text",
content: getRichDescription(event),
content: event.calendarDescription,
},
start: {
dateTime: dayjs(event.startTime).tz(event.organizer.timeZone).format("YYYY-MM-DDTHH:mm:ss"),
@@ -1,4 +1,5 @@
import type { PrismaClient } from "@calcom/prisma";
import { safeCredentialSelect } from "@calcom/prisma/selects/credential";
import type { TrpcSessionUser } from "@calcom/trpc/server/types";
import { TRPCError } from "@trpc/server";
@@ -20,6 +21,7 @@ const getInCompleteBookingSettingsHandler = async (options: GetIncompleteBooking
input,
} = options;
const { user: _, ...safeCredentialSelectWithoutUser } = safeCredentialSelect;
const [incompleteBookingActions, form] = await Promise.all([
prisma.app_RoutingForms_IncompleteBookingActions.findMany({
where: {
@@ -67,7 +69,14 @@ const getInCompleteBookingSettingsHandler = async (options: GetIncompleteBooking
in: [teamId, ...(orgQuery?.parentId ? [orgQuery.parentId] : [])],
},
},
include: {
select: {
...safeCredentialSelectWithoutUser,
user: {
select: {
email: true,
name: true,
},
},
team: {
select: {
name: true,
@@ -37,7 +37,7 @@ export class SalesforceGraphQLClient {
* 3. If no account is found, then find contacts that match the email domain and find the account that the majority of contacts are connect to
*/
async GetAccountRecordsForRRSkip(email: string): Promise<Contact[]> {
const log = logger.getSubLogger({ prefix: ["[getAccountRecordsForRRSkip]:${email}"] });
const log = logger.getSubLogger({ prefix: [`[getAccountRecordsForRRSkip]:${email}`] });
const emailDomain = email.split("@")[1];
const websites = this.getAllPossibleAccountWebsiteFromEmailDomain(emailDomain);
@@ -1,11 +1,12 @@
import { stringify } from "querystring";
import dayjs from "@calcom/dayjs";
import { getLocation, getRichDescription } from "@calcom/lib/CalEventParser";
import { getLocation } from "@calcom/lib/CalEventParser";
import logger from "@calcom/lib/logger";
import prisma from "@calcom/prisma";
import type {
Calendar,
CalendarServiceEvent,
CalendarEvent,
EventBusyDate,
IntegrationCalendar,
@@ -112,7 +113,7 @@ export default class ZohoCalendarService implements Calendar {
return this.handleData(response, this.log);
};
async createEvent(event: CalendarEvent): Promise<NewCalendarEventType> {
async createEvent(event: CalendarServiceEvent): Promise<NewCalendarEventType> {
let eventId = "";
let eventRespData;
const [mainHostDestinationCalendar] = event.destinationCalendar ?? [];
@@ -158,7 +159,7 @@ export default class ZohoCalendarService implements Calendar {
* @param event
* @returns
*/
async updateEvent(uid: string, event: CalendarEvent, externalCalendarId?: string) {
async updateEvent(uid: string, event: CalendarServiceEvent, externalCalendarId?: string) {
const eventId = uid;
let eventRespData;
const [mainHostDestinationCalendar] = event.destinationCalendar ?? [];
@@ -457,10 +458,10 @@ export default class ZohoCalendarService implements Calendar {
return data;
}
private translateEvent = (event: CalendarEvent) => {
private translateEvent = (event: CalendarServiceEvent) => {
const zohoEvent = {
title: event.title,
description: getRichDescription(event),
description: event.calendarDescription,
dateandtime: {
start: dayjs(event.startTime).format("YYYYMMDDTHHmmssZZ"),
end: dayjs(event.endTime).format("YYYYMMDDTHHmmssZZ"),
@@ -7,6 +7,7 @@ import { LicenseKeySingleton } from "@calcom/ee/common/server/LicenseKeyService"
import { getUserAvatarUrl } from "@calcom/lib/getAvatarUrl";
import logger from "@calcom/lib/logger";
import { safeStringify } from "@calcom/lib/safeStringify";
import { DeploymentRepository } from "@calcom/lib/server/repository/deployment";
import { UserRepository } from "@calcom/lib/server/repository/user";
import prisma from "@calcom/prisma";
@@ -64,7 +65,8 @@ export async function getServerSession(options: {
return null;
}
const licenseKeyService = await LicenseKeySingleton.getInstance();
const deploymentRepo = new DeploymentRepository(prisma);
const licenseKeyService = await LicenseKeySingleton.getInstance(deploymentRepo);
const hasValidLicense = await licenseKeyService.checkLicense();
let upId = token.upId;
@@ -32,6 +32,7 @@ import logger from "@calcom/lib/logger";
import { randomString } from "@calcom/lib/random";
import { safeStringify } from "@calcom/lib/safeStringify";
import { CredentialRepository } from "@calcom/lib/server/repository/credential";
import { DeploymentRepository } from "@calcom/lib/server/repository/deployment";
import { OrganizationRepository } from "@calcom/lib/server/repository/organization";
import { ProfileRepository } from "@calcom/lib/server/repository/profile";
import { UserRepository } from "@calcom/lib/server/repository/user";
@@ -712,7 +713,8 @@ export const getOptions = ({
},
async session({ session, token, user }) {
log.debug("callbacks:session - Session callback called", safeStringify({ session, token, user }));
const licenseKeyService = await LicenseKeySingleton.getInstance();
const deploymentRepo = new DeploymentRepository(prisma);
const licenseKeyService = await LicenseKeySingleton.getInstance(deploymentRepo);
const hasValidLicense = await licenseKeyService.checkLicense();
const profileId = token.profileId;
const calendsoSession: Session = {
@@ -971,7 +973,7 @@ export const getOptions = ({
return true;
}
}
return `auth/error?error=wrong-provider&provider=${existingUserWithEmail.identityProvider}`;
return `/auth/error?error=wrong-provider&provider=${existingUserWithEmail.identityProvider}`;
}
// Associate with organization if enabled by flag and idP is Google (for now)
+4 -2
View File
@@ -78,6 +78,7 @@ const BookerComponent = ({
hashedLink,
confirmButtonDisabled,
timeZones,
eventMetaChildren,
}: BookerProps & WrappedBookerProps) => {
const searchParams = useCompatSearchParams();
const isPlatformBookerEmbed = useIsPlatformBookerEmbed();
@@ -402,8 +403,9 @@ const BookerComponent = ({
isPlatform={isPlatform}
isPrivateLink={!!hashedLink}
locale={userLocale}
timeZones={timeZones}
/>
timeZones={timeZones}>
{eventMetaChildren}
</EventMeta>
{layout !== BookerLayouts.MONTH_VIEW &&
!(layout === "mobile" && bookerState === "booking") && (
<div className="mt-auto px-5 py-3">
@@ -53,6 +53,7 @@ export const EventMeta = ({
classNames,
locale,
timeZones,
children,
}: {
event?: Pick<
BookerEvent,
@@ -83,9 +84,11 @@ export const EventMeta = ({
eventMetaContainer?: string;
eventMetaTitle?: string;
eventMetaTimezoneSelect?: string;
eventMetaChildren?: string;
};
locale?: string | null;
timeZones?: Timezone[];
children?: React.ReactNode;
}) => {
const { timeFormat, timezone } = useBookerTime();
const [setTimezone] = useTimePreferences((state) => [state.setTimezone]);
@@ -250,6 +253,7 @@ export const EventMeta = ({
</EventMetaBlock>
) : null}
</div>
{children && <div className={classNames?.eventMetaChildren}>{children}</div>}
</m.div>
)}
</div>
@@ -1,3 +1,5 @@
import type React from "react";
import type { UseBookerLayoutType } from "@calcom/features/bookings/Booker/components/hooks/useBookerLayout";
import type { UseBookingFormReturnType } from "@calcom/features/bookings/Booker/components/hooks/useBookingForm";
import type { UseBookingsReturnType } from "@calcom/features/bookings/Booker/components/hooks/useBookings";
@@ -24,6 +26,11 @@ export interface BookerProps {
*/
customClassNames?: CustomClassNames;
/**
* Custom React components to render at the bottom of the EventMeta component
*/
eventMetaChildren?: React.ReactNode;
/**
* Whether is a team or org, we gather basic info from both
*/
@@ -152,6 +159,7 @@ export type CustomClassNames = {
eventMetaContainer?: string;
eventMetaTitle?: string;
eventMetaTimezoneSelect?: string;
eventMetaChildren?: string;
};
datePickerCustomClassNames?: {
datePickerContainer?: string;
@@ -2,6 +2,7 @@ import { getCalendar } from "@calcom/app-store/_utils/getCalendar";
import { sendCancelledSeatEmailsAndSMS } from "@calcom/emails";
import sendPayload from "@calcom/features/webhooks/lib/sendOrSchedulePayload";
import type { EventPayloadType, EventTypeInfo } from "@calcom/features/webhooks/lib/sendPayload";
import { getRichDescription } from "@calcom/lib/CalEventParser";
import { getAllDelegationCredentialsForUserIncludeServiceAccountKey } from "@calcom/lib/delegationCredential/server";
import { getDelegationCredentialOrFindRegularCredential } from "@calcom/lib/delegationCredential/server";
import { HttpError } from "@calcom/lib/http-error";
@@ -96,6 +97,7 @@ async function cancelAttendeeSeat(
const updatedEvt = {
...evt,
attendees: evt.attendees.filter((evtAttendee) => attendee.email !== evtAttendee.email),
calendarDescription: getRichDescription(evt),
};
if (reference.type.includes("_video")) {
integrationsToUpdate.push(updateMeeting(credential, updatedEvt, reference));
@@ -140,7 +140,7 @@ export function TimezoneSelectComponent({
),
option: (state) =>
classNames(
"bg-default flex cursor-pointer justify-between py-2.5 px-3 rounded-md text-default ",
"bg-default py-2.5 px-3 rounded-md text-default ",
state.isFocused && "bg-subtle",
state.isDisabled && "bg-muted",
state.isSelected && "bg-emphasis text-default",
@@ -75,6 +75,7 @@ interface DataTableProviderProps {
ctaContainerClassName?: string;
defaultPageSize?: number;
segments?: FilterSegmentOutput[];
preferredSegmentId?: number | null;
}
export function DataTableProvider({
@@ -84,6 +85,7 @@ export function DataTableProvider({
defaultPageSize = DEFAULT_PAGE_SIZE,
ctaContainerClassName = CTA_CONTAINER_CLASS_NAME,
segments: providedSegments,
preferredSegmentId,
}: DataTableProviderProps) {
const filterToOpen = useRef<string | undefined>(undefined);
const [activeFilters, setActiveFilters] = useQueryState("activeFilters", activeFiltersParser);
@@ -93,7 +95,10 @@ export function DataTableProvider({
columnVisibilityParser
);
const [columnSizing, setColumnSizing] = useQueryState<ColumnSizingState>("widths", columnSizingParser);
const [segmentId, setSegmentId] = useQueryState("segment", segmentIdParser);
const [segmentId, setSegmentId] = useQueryState(
"segment",
segmentIdParser.withDefault(preferredSegmentId ?? -1)
);
const [pageIndex, setPageIndex] = useQueryState("page", pageIndexParser);
const [pageSize, setPageSize] = useQueryState("size", pageSizeParser);
const [searchTerm, setSearchTerm] = useQueryState("q", searchTermParser);
@@ -185,6 +190,7 @@ export function DataTableProvider({
setPageIndex,
setSearchTerm,
segments: providedSegments,
preferredSegmentId,
}
);
@@ -5,7 +5,7 @@ import { useCallback, useMemo, useEffect } from "react";
import { trpc } from "@calcom/trpc/react";
import { recalculateDateRange } from "../lib/dateRange";
import { ZSegmentStorage, type UseSegments } from "../lib/types";
import { type UseSegments } from "../lib/types";
import { isDateRangeFilterValue } from "../lib/utils";
export const useSegments: UseSegments = ({
@@ -27,6 +27,7 @@ export const useSegments: UseSegments = ({
setPageIndex,
setSearchTerm,
segments: providedSegments,
preferredSegmentId,
}) => {
const { data: rawSegments, isFetching: isFetchingSegments } = trpc.viewer.filterSegments.list.useQuery(
{
@@ -37,10 +38,11 @@ export const useSegments: UseSegments = ({
}
);
const { mutate: setPreference } = trpc.viewer.filterSegments.setPreference.useMutation();
// Recalculate date ranges based on the current timestamp
const segments = useMemo(() => {
const segmentsSource = providedSegments || rawSegments;
const segmentsSource = providedSegments || rawSegments?.segments;
if (!segmentsSource) return [];
return segmentsSource.map((segment) => ({
@@ -57,10 +59,9 @@ export const useSegments: UseSegments = ({
}));
}, [rawSegments, providedSegments]);
const selectedSegment = useMemo(
() => segments?.find((segment) => segment.id === segmentId),
[segments, segmentId]
);
const selectedSegment = useMemo(() => {
return segments?.find((segment) => segment.id === segmentId);
}, [segments, segmentId]);
useEffect(() => {
if (segments && segmentId > 0 && !isFetchingSegments) {
@@ -74,16 +75,16 @@ export const useSegments: UseSegments = ({
}
}, [segments, segmentId, setSegmentId, isFetchingSegments]);
const memoizedPreferredSegmentId = useMemo(
() => preferredSegmentId ?? rawSegments?.preferredSegmentId,
[preferredSegmentId, rawSegments]
);
useEffect(() => {
// this hook doesn't include segmentId in the dependency array
// because we want to only run this once, when the component mounts
if (segmentId === -1) {
const segments = getSegmentsFromLocalStorage();
if (segments[tableIdentifier]) {
setSegmentId(segments[tableIdentifier].segmentId);
}
if (memoizedPreferredSegmentId) {
setSegmentId(memoizedPreferredSegmentId);
}
}, [tableIdentifier, setSegmentId]);
}, [memoizedPreferredSegmentId, setSegmentId]);
useEffect(() => {
if (selectedSegment) {
@@ -143,9 +144,12 @@ export const useSegments: UseSegments = ({
const setAndPersistSegmentId = useCallback(
(segmentId: number | null) => {
setSegmentId(segmentId);
saveSegmentToLocalStorage({ tableIdentifier, segmentId });
setPreference({
tableIdentifier,
segmentId,
});
},
[tableIdentifier, setSegmentId]
[tableIdentifier, setSegmentId, setPreference]
);
return {
@@ -156,29 +160,3 @@ export const useSegments: UseSegments = ({
isSegmentEnabled: true,
};
};
const LOCAL_STORAGE_KEY = "data-table:segments";
function getSegmentsFromLocalStorage() {
try {
return ZSegmentStorage.parse(JSON.parse(localStorage.getItem(LOCAL_STORAGE_KEY) ?? "{}"));
} catch {
return {};
}
}
function saveSegmentToLocalStorage({
tableIdentifier,
segmentId,
}: {
tableIdentifier: string;
segmentId: number | null;
}) {
const segments = getSegmentsFromLocalStorage();
if (segmentId) {
segments[tableIdentifier] = { segmentId };
} else {
delete segments[tableIdentifier];
}
localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(segments));
}
@@ -255,6 +255,11 @@ export type FilterSegmentOutput = {
team: { id: number; name: string } | null;
};
export type FilterSegmentsListResponse = {
segments: FilterSegmentOutput[];
preferredSegmentId: number | null;
};
export type SegmentStorage = {
[tableIdentifier: string]: {
segmentId: number;
@@ -289,6 +294,7 @@ export type UseSegmentsProps = {
setPageIndex: (pageIndex: number) => void;
setSearchTerm: (searchTerm: string | null) => void;
segments?: FilterSegmentOutput[];
preferredSegmentId?: number | null;
};
export type UseSegmentsReturn = {
@@ -1,10 +1,10 @@
import * as cache from "memory-cache";
import { getDeploymentKey } from "@calcom/features/ee/deployment/lib/getDeploymentKey";
import { CALCOM_PRIVATE_API_ROUTE } from "@calcom/lib/constants";
import logger from "@calcom/lib/logger";
import prisma from "@calcom/prisma";
import type { IDeploymentRepository } from "@calcom/lib/server/repository/deployment.interface";
import { getDeploymentKey } from "../../deployment/lib/getDeploymentKey";
import { generateNonce, createSignature } from "./private-api-utils";
export enum UsageEvent {
@@ -29,8 +29,8 @@ class LicenseKeyService implements ILicenseKeyService {
}
// Static async factory method
public static async create(): Promise<ILicenseKeyService> {
const licenseKey = await getDeploymentKey(prisma);
public static async create(deploymentRepo: IDeploymentRepository): Promise<ILicenseKeyService> {
const licenseKey = await getDeploymentKey(deploymentRepo);
const useNoop = !licenseKey || process.env.NEXT_PUBLIC_IS_E2E === "1";
return !useNoop ? new LicenseKeyService(licenseKey) : new NoopLicenseKeyService();
}
@@ -122,13 +122,9 @@ export class LicenseKeySingleton {
// eslint-disable-next-line @typescript-eslint/no-empty-function -- Private constructor to prevent direct instantiation
private constructor() {}
public static async getInstance(): Promise<ILicenseKeyService> {
public static async getInstance(deploymentRepo: IDeploymentRepository): Promise<ILicenseKeyService> {
if (!LicenseKeySingleton.instance) {
const licenseKey = await getDeploymentKey(prisma);
const useNoop = !licenseKey || process.env.NEXT_PUBLIC_IS_E2E === "1";
LicenseKeySingleton.instance = !useNoop
? await LicenseKeyService.create()
: new NoopLicenseKeyService();
LicenseKeySingleton.instance = await LicenseKeyService.create(deploymentRepo);
}
return LicenseKeySingleton.instance;
}
@@ -1,13 +1,9 @@
import type { PrismaClient } from "@calcom/prisma";
import type { IDeploymentRepository } from "@calcom/lib/server/repository/deployment.interface";
export async function getDeploymentKey(prisma: PrismaClient) {
export async function getDeploymentKey(deploymentRepo: IDeploymentRepository): Promise<string> {
if (process.env.CALCOM_LICENSE_KEY) {
return process.env.CALCOM_LICENSE_KEY;
}
const deployment = await prisma.deployment.findUnique({
where: { id: 1 },
select: { licenseKey: true },
});
return deployment?.licenseKey || "";
const licenseKey = await deploymentRepo.getLicenseKeyWithId(1);
return licenseKey || "";
}
@@ -187,6 +187,7 @@ export default async function handleChildrenEventTypes({
rrSegmentQueryValue: undefined,
assignRRMembersUsingSegment: false,
useEventLevelSelectedCalendars: false,
allowReschedulingCancelledBookings: managedEventTypeValues.allowReschedulingCancelledBookings ?? false,
},
});
})
@@ -259,6 +260,7 @@ export default async function handleChildrenEventTypes({
: {
deleteMany: {},
},
allowReschedulingCancelledBookings: managedEventTypeValues.allowReschedulingCancelledBookings ?? false,
metadata: {
...(eventType.metadata as Prisma.JsonObject),
...(metadata?.multipleDuration && "length" in unlockedFieldProps

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