chore: remove deprecated metamask and rainbow (#9299)
* Remove deprecated code related to rainbow * Remove translations for rainbow specific features * Remove english translations for metamask * Remove translations for metamask * Fix lint issues * Fix prettier issues * update yarn lock * Generated yarn.lock with submodules * Added auth submodule deps --------- Co-authored-by: Peer Richelsen <peeroke@gmail.com> Co-authored-by: alannnc <alannnc@gmail.com> Co-authored-by: Alex van Andel <me@alexvanandel.com>
This commit is contained in:
parent
8bc8a045b6
commit
fbbc573f33
|
@ -106,12 +106,6 @@ LARK_OPEN_APP_ID=""
|
||||||
LARK_OPEN_APP_SECRET=""
|
LARK_OPEN_APP_SECRET=""
|
||||||
LARK_OPEN_VERIFICATION_TOKEN=""
|
LARK_OPEN_VERIFICATION_TOKEN=""
|
||||||
|
|
||||||
# - WEB3
|
|
||||||
# Used for the Web3 plugin
|
|
||||||
# @see https://github.com/calcom/cal.com/blob/main/packages/app-store/rainbow/README.md
|
|
||||||
ALCHEMY_API_KEY=""
|
|
||||||
INFURA_API_KEY=""
|
|
||||||
|
|
||||||
# - SALESFORCE
|
# - SALESFORCE
|
||||||
# Used for the Salesforce (Sales Cloud) app
|
# Used for the Salesforce (Sales Cloud) app
|
||||||
SALESFORCE_CONSUMER_KEY=""
|
SALESFORCE_CONSUMER_KEY=""
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
import dynamic from "next/dynamic";
|
|
||||||
import type { Dispatch } from "react";
|
|
||||||
import { useState, useEffect } from "react";
|
|
||||||
import type { JSONObject } from "superjson/dist/types";
|
|
||||||
|
|
||||||
export type Gate = undefined | "rainbow"; // Add more like ` | "geolocation" | "payment"`
|
|
||||||
|
|
||||||
export type GateState = {
|
|
||||||
rainbowToken?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
type GateProps = {
|
|
||||||
children: React.ReactNode;
|
|
||||||
gates: Gate[];
|
|
||||||
appData: JSONObject;
|
|
||||||
dispatch: Dispatch<Partial<GateState>>;
|
|
||||||
};
|
|
||||||
|
|
||||||
const RainbowGate = dynamic(() => import("@calcom/app-store/rainbow/components/RainbowKit"));
|
|
||||||
|
|
||||||
// To add a new Gate just add the gate logic to the switch statement
|
|
||||||
const Gates: React.FC<GateProps> = ({ children, gates, appData, dispatch }) => {
|
|
||||||
const [rainbowToken, setRainbowToken] = useState<string>();
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
dispatch({ rainbowToken });
|
|
||||||
}, [rainbowToken, dispatch]);
|
|
||||||
|
|
||||||
let gateWrappers = <>{children}</>;
|
|
||||||
|
|
||||||
// Recursively wraps the `gateWrappers` with new gates allowing for multiple gates
|
|
||||||
for (const gate of gates) {
|
|
||||||
switch (gate) {
|
|
||||||
case "rainbow":
|
|
||||||
if (appData.blockchainId && appData.smartContractAddress && !rainbowToken) {
|
|
||||||
gateWrappers = (
|
|
||||||
<RainbowGate
|
|
||||||
setToken={setRainbowToken}
|
|
||||||
chainId={appData.blockchainId as number}
|
|
||||||
tokenAddress={appData.smartContractAddress as string}>
|
|
||||||
{gateWrappers}
|
|
||||||
</RainbowGate>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return gateWrappers;
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Gates;
|
|
|
@ -28,7 +28,6 @@ type AvailableTimesProps = {
|
||||||
bookingAttendees?: number | null;
|
bookingAttendees?: number | null;
|
||||||
slots?: Slot[];
|
slots?: Slot[];
|
||||||
isLoading: boolean;
|
isLoading: boolean;
|
||||||
ethSignature?: string;
|
|
||||||
duration: number;
|
duration: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -43,7 +42,6 @@ const AvailableTimes: FC<AvailableTimesProps> = ({
|
||||||
onTimeFormatChange,
|
onTimeFormatChange,
|
||||||
seatsPerTimeSlot,
|
seatsPerTimeSlot,
|
||||||
bookingAttendees,
|
bookingAttendees,
|
||||||
ethSignature,
|
|
||||||
duration,
|
duration,
|
||||||
}) => {
|
}) => {
|
||||||
const reserveSlotMutation = trpc.viewer.public.slots.reserveSlot.useMutation();
|
const reserveSlotMutation = trpc.viewer.public.slots.reserveSlot.useMutation();
|
||||||
|
@ -119,7 +117,6 @@ const AvailableTimes: FC<AvailableTimesProps> = ({
|
||||||
timeFormat,
|
timeFormat,
|
||||||
/** Treat as recurring only when a count exist and it's not a rescheduling workflow */
|
/** Treat as recurring only when a count exist and it's not a rescheduling workflow */
|
||||||
count: recurringCount && !rescheduleUid ? recurringCount : undefined,
|
count: recurringCount && !rescheduleUid ? recurringCount : undefined,
|
||||||
...(ethSignature ? { ethSignature } : {}),
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,6 @@ export const SlotPicker = ({
|
||||||
seatsPerTimeSlot,
|
seatsPerTimeSlot,
|
||||||
bookingAttendees,
|
bookingAttendees,
|
||||||
weekStart = 0,
|
weekStart = 0,
|
||||||
ethSignature,
|
|
||||||
}: {
|
}: {
|
||||||
eventType: Pick<
|
eventType: Pick<
|
||||||
EventType & { metadata: z.infer<typeof EventTypeMetaDataSchema> },
|
EventType & { metadata: z.infer<typeof EventTypeMetaDataSchema> },
|
||||||
|
@ -94,7 +93,6 @@ export const SlotPicker = ({
|
||||||
recurringEventCount?: number;
|
recurringEventCount?: number;
|
||||||
users: string[];
|
users: string[];
|
||||||
weekStart?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
weekStart?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
||||||
ethSignature?: string;
|
|
||||||
}) => {
|
}) => {
|
||||||
const [selectedDate, setSelectedDate] = useState<Dayjs>();
|
const [selectedDate, setSelectedDate] = useState<Dayjs>();
|
||||||
const [browsingDate, setBrowsingDate] = useState<Dayjs>();
|
const [browsingDate, setBrowsingDate] = useState<Dayjs>();
|
||||||
|
@ -193,7 +191,6 @@ export const SlotPicker = ({
|
||||||
seatsPerTimeSlot={seatsPerTimeSlot}
|
seatsPerTimeSlot={seatsPerTimeSlot}
|
||||||
bookingAttendees={bookingAttendees}
|
bookingAttendees={bookingAttendees}
|
||||||
recurringCount={recurringEventCount}
|
recurringCount={recurringEventCount}
|
||||||
ethSignature={ethSignature}
|
|
||||||
duration={parseInt(duration)}
|
duration={parseInt(duration)}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
import dynamic from "next/dynamic";
|
import dynamic from "next/dynamic";
|
||||||
import { useRouter } from "next/router";
|
import { useRouter } from "next/router";
|
||||||
import { useEffect, useMemo, useReducer, useState } from "react";
|
import { useEffect, useMemo, useState } from "react";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import BookingPageTagManager from "@calcom/app-store/BookingPageTagManager";
|
import BookingPageTagManager from "@calcom/app-store/BookingPageTagManager";
|
||||||
import { getEventTypeAppData } from "@calcom/app-store/utils";
|
|
||||||
import dayjs from "@calcom/dayjs";
|
import dayjs from "@calcom/dayjs";
|
||||||
import {
|
import {
|
||||||
useEmbedNonStylesConfig,
|
useEmbedNonStylesConfig,
|
||||||
|
@ -27,8 +26,6 @@ import { CreditCard, User, RefreshCcw } from "@calcom/ui/components/icon";
|
||||||
|
|
||||||
import { timeZone as localStorageTimeZone } from "@lib/clock";
|
import { timeZone as localStorageTimeZone } from "@lib/clock";
|
||||||
|
|
||||||
import type { Gate, GateState } from "@components/Gates";
|
|
||||||
import Gates from "@components/Gates";
|
|
||||||
import BookingDescription from "@components/booking/BookingDescription";
|
import BookingDescription from "@components/booking/BookingDescription";
|
||||||
import { SlotPicker } from "@components/booking/SlotPicker";
|
import { SlotPicker } from "@components/booking/SlotPicker";
|
||||||
|
|
||||||
|
@ -89,14 +86,6 @@ const AvailabilityPage = ({ profile, eventType, ...restProps }: Props) => {
|
||||||
setIs24hClockInLocalStorage(is24Hours);
|
setIs24hClockInLocalStorage(is24Hours);
|
||||||
};
|
};
|
||||||
|
|
||||||
const [gateState, gateDispatcher] = useReducer(
|
|
||||||
(state: GateState, newState: Partial<GateState>) => ({
|
|
||||||
...state,
|
|
||||||
...newState,
|
|
||||||
}),
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setTimeZone(localStorageTimeZone() || dayjs.tz.guess());
|
setTimeZone(localStorageTimeZone() || dayjs.tz.guess());
|
||||||
}, []);
|
}, []);
|
||||||
|
@ -124,20 +113,11 @@ const AvailabilityPage = ({ profile, eventType, ...restProps }: Props) => {
|
||||||
);
|
);
|
||||||
const paymentAppData = getPaymentAppData(eventType);
|
const paymentAppData = getPaymentAppData(eventType);
|
||||||
|
|
||||||
const rainbowAppData = getEventTypeAppData(eventType, "rainbow") || {};
|
|
||||||
const rawSlug = profile.slug ? profile.slug.split("/") : [];
|
const rawSlug = profile.slug ? profile.slug.split("/") : [];
|
||||||
if (rawSlug.length > 1) rawSlug.pop(); //team events have team name as slug, but user events have [user]/[type] as slug.
|
if (rawSlug.length > 1) rawSlug.pop(); //team events have team name as slug, but user events have [user]/[type] as slug.
|
||||||
|
|
||||||
const showEventTypeDetails = (isEmbed && !embedUiConfig.hideEventTypeDetails) || !isEmbed;
|
const showEventTypeDetails = (isEmbed && !embedUiConfig.hideEventTypeDetails) || !isEmbed;
|
||||||
|
|
||||||
// Define conditional gates here
|
|
||||||
const gates = [
|
|
||||||
// Rainbow gate is only added if the event has both a `blockchainId` and a `smartContractAddress`
|
|
||||||
rainbowAppData && rainbowAppData.blockchainId && rainbowAppData.smartContractAddress
|
|
||||||
? ("rainbow" as Gate)
|
|
||||||
: undefined,
|
|
||||||
];
|
|
||||||
|
|
||||||
const { data: bookingAttendees } = trpc.viewer.bookings.getBookingAttendees.useQuery(
|
const { data: bookingAttendees } = trpc.viewer.bookings.getBookingAttendees.useQuery(
|
||||||
{
|
{
|
||||||
seatReferenceUid: rescheduleUid,
|
seatReferenceUid: rescheduleUid,
|
||||||
|
@ -148,7 +128,7 @@ const AvailabilityPage = ({ profile, eventType, ...restProps }: Props) => {
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Gates gates={gates} appData={rainbowAppData} dispatch={gateDispatcher}>
|
<>
|
||||||
<HeadSeo
|
<HeadSeo
|
||||||
title={`${rescheduleUid ? t("reschedule") : ""} ${eventType.title} | ${profile.name}`}
|
title={`${rescheduleUid ? t("reschedule") : ""} ${eventType.title} | ${profile.name}`}
|
||||||
description={`${rescheduleUid ? t("reschedule") : ""} ${eventType.title}`}
|
description={`${rescheduleUid ? t("reschedule") : ""} ${eventType.title}`}
|
||||||
|
@ -296,7 +276,6 @@ const AvailabilityPage = ({ profile, eventType, ...restProps }: Props) => {
|
||||||
seatsPerTimeSlot={eventType.seatsPerTimeSlot || undefined}
|
seatsPerTimeSlot={eventType.seatsPerTimeSlot || undefined}
|
||||||
bookingAttendees={bookingAttendees || undefined}
|
bookingAttendees={bookingAttendees || undefined}
|
||||||
recurringEventCount={recurringEventCount}
|
recurringEventCount={recurringEventCount}
|
||||||
ethSignature={gateState.rainbowToken}
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -306,7 +285,7 @@ const AvailabilityPage = ({ profile, eventType, ...restProps }: Props) => {
|
||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
<Toaster position="bottom-right" />
|
<Toaster position="bottom-right" />
|
||||||
</Gates>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import { useSession } from "next-auth/react";
|
||||||
import dynamic from "next/dynamic";
|
import dynamic from "next/dynamic";
|
||||||
import Head from "next/head";
|
import Head from "next/head";
|
||||||
import { useRouter } from "next/router";
|
import { useRouter } from "next/router";
|
||||||
import { useEffect, useMemo, useReducer, useState } from "react";
|
import { useEffect, useMemo, useState } from "react";
|
||||||
import { useForm, useFormContext } from "react-hook-form";
|
import { useForm, useFormContext } from "react-hook-form";
|
||||||
import { v4 as uuidv4 } from "uuid";
|
import { v4 as uuidv4 } from "uuid";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
@ -12,7 +12,6 @@ import { z } from "zod";
|
||||||
import BookingPageTagManager from "@calcom/app-store/BookingPageTagManager";
|
import BookingPageTagManager from "@calcom/app-store/BookingPageTagManager";
|
||||||
import type { EventLocationType } from "@calcom/app-store/locations";
|
import type { EventLocationType } from "@calcom/app-store/locations";
|
||||||
import { createPaymentLink } from "@calcom/app-store/stripepayment/lib/client";
|
import { createPaymentLink } from "@calcom/app-store/stripepayment/lib/client";
|
||||||
import { getEventTypeAppData } from "@calcom/app-store/utils";
|
|
||||||
import type { LocationObject } from "@calcom/core/location";
|
import type { LocationObject } from "@calcom/core/location";
|
||||||
import dayjs from "@calcom/dayjs";
|
import dayjs from "@calcom/dayjs";
|
||||||
import {
|
import {
|
||||||
|
@ -51,8 +50,6 @@ import { AlertTriangle, Calendar, RefreshCw, User } from "@calcom/ui/components/
|
||||||
import { timeZone } from "@lib/clock";
|
import { timeZone } from "@lib/clock";
|
||||||
import useRouterQuery from "@lib/hooks/useRouterQuery";
|
import useRouterQuery from "@lib/hooks/useRouterQuery";
|
||||||
|
|
||||||
import type { Gate, GateState } from "@components/Gates";
|
|
||||||
import Gates from "@components/Gates";
|
|
||||||
import BookingDescription from "@components/booking/BookingDescription";
|
import BookingDescription from "@components/booking/BookingDescription";
|
||||||
|
|
||||||
import type { BookPageProps } from "../../../pages/[user]/book";
|
import type { BookPageProps } from "../../../pages/[user]/book";
|
||||||
|
@ -224,13 +221,6 @@ const BookingPage = ({
|
||||||
const { data: session } = useSession();
|
const { data: session } = useSession();
|
||||||
const isBackgroundTransparent = useIsBackgroundTransparent();
|
const isBackgroundTransparent = useIsBackgroundTransparent();
|
||||||
const telemetry = useTelemetry();
|
const telemetry = useTelemetry();
|
||||||
const [gateState, gateDispatcher] = useReducer(
|
|
||||||
(state: GateState, newState: Partial<GateState>) => ({
|
|
||||||
...state,
|
|
||||||
...newState,
|
|
||||||
}),
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
|
|
||||||
const { timezone } = useTimePreferences();
|
const { timezone } = useTimePreferences();
|
||||||
|
|
||||||
|
@ -488,7 +478,6 @@ const BookingPage = ({
|
||||||
metadata,
|
metadata,
|
||||||
hasHashedBookingLink,
|
hasHashedBookingLink,
|
||||||
hashedLink,
|
hashedLink,
|
||||||
ethSignature: gateState.rainbowToken,
|
|
||||||
}));
|
}));
|
||||||
recurringMutation.mutate(recurringBookings);
|
recurringMutation.mutate(recurringBookings);
|
||||||
} else {
|
} else {
|
||||||
|
@ -506,25 +495,15 @@ const BookingPage = ({
|
||||||
metadata,
|
metadata,
|
||||||
hasHashedBookingLink,
|
hasHashedBookingLink,
|
||||||
hashedLink,
|
hashedLink,
|
||||||
ethSignature: gateState.rainbowToken,
|
|
||||||
seatReferenceUid: router.query.seatReferenceUid as string,
|
seatReferenceUid: router.query.seatReferenceUid as string,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const showEventTypeDetails = (isEmbed && !embedUiConfig.hideEventTypeDetails) || !isEmbed;
|
const showEventTypeDetails = (isEmbed && !embedUiConfig.hideEventTypeDetails) || !isEmbed;
|
||||||
const rainbowAppData = getEventTypeAppData(eventType, "rainbow") || {};
|
|
||||||
|
|
||||||
// Define conditional gates here
|
|
||||||
const gates = [
|
|
||||||
// Rainbow gate is only added if the event has both a `blockchainId` and a `smartContractAddress`
|
|
||||||
rainbowAppData && rainbowAppData.blockchainId && rainbowAppData.smartContractAddress
|
|
||||||
? ("rainbow" as Gate)
|
|
||||||
: undefined,
|
|
||||||
];
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Gates gates={gates} appData={rainbowAppData} dispatch={gateDispatcher}>
|
<>
|
||||||
<Head>
|
<Head>
|
||||||
<title>
|
<title>
|
||||||
{rescheduleUid
|
{rescheduleUid
|
||||||
|
@ -686,7 +665,7 @@ const BookingPage = ({
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
<Toaster position="bottom-right" />
|
<Toaster position="bottom-right" />
|
||||||
</Gates>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
import ethRouter from "@calcom/app-store/rainbow/trpc/router";
|
|
||||||
import { createNextApiHandler } from "@calcom/trpc/server/createNextApiHandler";
|
|
||||||
|
|
||||||
export default createNextApiHandler(ethRouter);
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "تم إنشاء نوع الحدث {{eventTypeTitle}} بنجاح",
|
"event_type_created_successfully": "تم إنشاء نوع الحدث {{eventTypeTitle}} بنجاح",
|
||||||
"event_type_updated_successfully": "تم تحديث نوع الحدث {{eventTypeTitle}} بنجاح",
|
"event_type_updated_successfully": "تم تحديث نوع الحدث {{eventTypeTitle}} بنجاح",
|
||||||
"event_type_deleted_successfully": "تم حذف نوع الحدث بنجاح",
|
"event_type_deleted_successfully": "تم حذف نوع الحدث بنجاح",
|
||||||
"web3_metamask_added": "تمت إضافة Metamask بنجاح",
|
|
||||||
"web3_metamask_disconnected": "تم فصل Metamask بنجاح",
|
|
||||||
"hours": "الساعات",
|
"hours": "الساعات",
|
||||||
"your_email": "بريدك الإلكتروني",
|
"your_email": "بريدك الإلكتروني",
|
||||||
"change_avatar": "تغيير الصورة الرمزية",
|
"change_avatar": "تغيير الصورة الرمزية",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "تم التثبيت",
|
"installed_one": "تم التثبيت",
|
||||||
"installed_other": "{{count}} مثبت",
|
"installed_other": "{{count}} مثبت",
|
||||||
"verify_wallet": "تأكيد المحفظة",
|
"verify_wallet": "تأكيد المحفظة",
|
||||||
"connect_metamask": "توصيل Metamask",
|
|
||||||
"create_events_on": "إنشاء أحداث في",
|
"create_events_on": "إنشاء أحداث في",
|
||||||
"enterprise_license": "هذه هي ميزة للمؤسسات",
|
"enterprise_license": "هذه هي ميزة للمؤسسات",
|
||||||
"enterprise_license_description": "لتمكين هذه الميزة، احصل على مفتاح نشر في وحدة التحكم {{consoleUrl}} وأضفه إلى وحدة التحكم الخاصة بك. nv باسم CALCOM_LICENSE_KEY. إذا كان لدى فريقك بالفعل ترخيص، يرجى الاتصال بـ {{supportMail}} للحصول على المساعدة.",
|
"enterprise_license_description": "لتمكين هذه الميزة، احصل على مفتاح نشر في وحدة التحكم {{consoleUrl}} وأضفه إلى وحدة التحكم الخاصة بك. nv باسم CALCOM_LICENSE_KEY. إذا كان لدى فريقك بالفعل ترخيص، يرجى الاتصال بـ {{supportMail}} للحصول على المساعدة.",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "تحميل",
|
"upload": "تحميل",
|
||||||
"add_profile_photo": "إضافة صورة الملف الشخصي",
|
"add_profile_photo": "إضافة صورة الملف الشخصي",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "يتم فتح هذا النوع من الأحداث برمز مميز.",
|
|
||||||
"rainbow_connect_wallet_gate": "قم بربط محفظتك إذا كنت تملك <1>{{name}}</1> (<3>{{symbol}}</3>).",
|
|
||||||
"rainbow_insufficient_balance": "لا تحتوي محفظتك المربوطة على ما يكفي من <1>{{symbol}}</1>.",
|
|
||||||
"rainbow_sign_message_request": "قم بتوقيع طلب الرسالة على محفظتك.",
|
|
||||||
"rainbow_signature_error": "خطأ في طلب التوقيع من محفظتك.",
|
|
||||||
"token_address": "عنوان الرمز المميز",
|
"token_address": "عنوان الرمز المميز",
|
||||||
"blockchain": "سلسلة الكتل",
|
"blockchain": "سلسلة الكتل",
|
||||||
"old_password": "كلمة مرور قديمة",
|
"old_password": "كلمة مرور قديمة",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "تم تحديث كلمة المرور!",
|
"password_updated": "تم تحديث كلمة المرور!",
|
||||||
"pending_payment": "في انتظار الدفع",
|
"pending_payment": "في انتظار الدفع",
|
||||||
"pending_invites": "دعوات معلقة",
|
"pending_invites": "دعوات معلقة",
|
||||||
"confirmation_page_rainbow": "قم بتعيين رمز مميز لفتح الحدث الخاص بك باستخدام الرموز أو NFTs على Ethereum وPolygon وغيرها.",
|
|
||||||
"not_on_cal": "غير موجود على {{appName}}",
|
"not_on_cal": "غير موجود على {{appName}}",
|
||||||
"no_calendar_installed": "لا يوجد تقويم مثبت",
|
"no_calendar_installed": "لا يوجد تقويم مثبت",
|
||||||
"no_calendar_installed_description": "لم تقم بربط أي من التقويمات الخاصة بك",
|
"no_calendar_installed_description": "لم تقم بربط أي من التقويمات الخاصة بك",
|
||||||
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "Typ události {{eventTypeTitle}} byl úspěšně vytvořen",
|
"event_type_created_successfully": "Typ události {{eventTypeTitle}} byl úspěšně vytvořen",
|
||||||
"event_type_updated_successfully": "Typ události {{eventTypeTitle}} byl úspěšně aktualizován",
|
"event_type_updated_successfully": "Typ události {{eventTypeTitle}} byl úspěšně aktualizován",
|
||||||
"event_type_deleted_successfully": "Typ události byl úspěšně smazán",
|
"event_type_deleted_successfully": "Typ události byl úspěšně smazán",
|
||||||
"web3_metamask_added": "Metamask úspěšně přidán",
|
|
||||||
"web3_metamask_disconnected": "Metamask úspěšně odpojen",
|
|
||||||
"hours": "Hodiny",
|
"hours": "Hodiny",
|
||||||
"your_email": "Váš e-mail",
|
"your_email": "Váš e-mail",
|
||||||
"change_avatar": "Změnit avatar",
|
"change_avatar": "Změnit avatar",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "Nainstalováno",
|
"installed_one": "Nainstalováno",
|
||||||
"installed_other": "Nainstalováno: {{count}}",
|
"installed_other": "Nainstalováno: {{count}}",
|
||||||
"verify_wallet": "Ověřit peněženku",
|
"verify_wallet": "Ověřit peněženku",
|
||||||
"connect_metamask": "Připojit Metamask",
|
|
||||||
"create_events_on": "Vytvořit události v:",
|
"create_events_on": "Vytvořit události v:",
|
||||||
"enterprise_license": "Jedná se o firemní funkci",
|
"enterprise_license": "Jedná se o firemní funkci",
|
||||||
"enterprise_license_description": "Pokud chcete povolit tuto funkci, získejte klíč pro nasazení v konzoli {{consoleUrl}} a přidejte ho do souboru .env jako CALCOM_LICENSE_KEY. Pokud váš tým již licenci má, kontaktujte prosím {{supportMail}} a požádejte o pomoc.",
|
"enterprise_license_description": "Pokud chcete povolit tuto funkci, získejte klíč pro nasazení v konzoli {{consoleUrl}} a přidejte ho do souboru .env jako CALCOM_LICENSE_KEY. Pokud váš tým již licenci má, kontaktujte prosím {{supportMail}} a požádejte o pomoc.",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "Nahrát",
|
"upload": "Nahrát",
|
||||||
"add_profile_photo": "Přidat profilovou fotku",
|
"add_profile_photo": "Přidat profilovou fotku",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "Tento typ události je uzamčený tokenem.",
|
|
||||||
"rainbow_connect_wallet_gate": "Propojte svoji peněženku, pokud vlastníte <1>{{name}}</1> (<3>{{symbol}}</3>).",
|
|
||||||
"rainbow_insufficient_balance": "Vaše propojená peněženka neobsahuje dostatek <1>{{symbol}}</1>.",
|
|
||||||
"rainbow_sign_message_request": "Podepište zprávu s požadavkem ve své peněžence.",
|
|
||||||
"rainbow_signature_error": "Chyba při vyžádání podpisu z vaší peněženky.",
|
|
||||||
"token_address": "Adresa tokenu",
|
"token_address": "Adresa tokenu",
|
||||||
"blockchain": "Blockchain",
|
"blockchain": "Blockchain",
|
||||||
"old_password": "Staré heslo",
|
"old_password": "Staré heslo",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "Heslo bylo úspěšně změněno!",
|
"password_updated": "Heslo bylo úspěšně změněno!",
|
||||||
"pending_payment": "Čeká se na platbu",
|
"pending_payment": "Čeká se na platbu",
|
||||||
"pending_invites": "Čekající pozvánky",
|
"pending_invites": "Čekající pozvánky",
|
||||||
"confirmation_page_rainbow": "Zamkněte svoji událost pomocí tokenů nebo NFT na platformách Ethereum, Polygon a dalších.",
|
|
||||||
"not_on_cal": "Nenachází se na {{appName}}",
|
"not_on_cal": "Nenachází se na {{appName}}",
|
||||||
"no_calendar_installed": "Není nainstalován kalendář",
|
"no_calendar_installed": "Není nainstalován kalendář",
|
||||||
"no_calendar_installed_description": "Ještě jste nepropojili žádný ze svých kalendářů",
|
"no_calendar_installed_description": "Ještě jste nepropojili žádný ze svých kalendářů",
|
||||||
|
|
|
@ -601,8 +601,6 @@
|
||||||
"event_type_created_successfully": "{{eventTypeTitle}} begivenhedstype blev oprettet",
|
"event_type_created_successfully": "{{eventTypeTitle}} begivenhedstype blev oprettet",
|
||||||
"event_type_updated_successfully": "{{eventTypeTitle}} begivenhedstype blev opdateret",
|
"event_type_updated_successfully": "{{eventTypeTitle}} begivenhedstype blev opdateret",
|
||||||
"event_type_deleted_successfully": "Begivenhedstypen blev slettet",
|
"event_type_deleted_successfully": "Begivenhedstypen blev slettet",
|
||||||
"web3_metamask_added": "Metamask tilføjet",
|
|
||||||
"web3_metamask_disconnected": "Metamask blev afbrudt",
|
|
||||||
"hours": "Timer",
|
"hours": "Timer",
|
||||||
"your_email": "Din E-Mail",
|
"your_email": "Din E-Mail",
|
||||||
"change_avatar": "Skift Avatar",
|
"change_avatar": "Skift Avatar",
|
||||||
|
@ -834,7 +832,6 @@
|
||||||
"installed_one": "Installeret",
|
"installed_one": "Installeret",
|
||||||
"installed_other": "{{count}} installeret",
|
"installed_other": "{{count}} installeret",
|
||||||
"verify_wallet": "Verificér Wallet",
|
"verify_wallet": "Verificér Wallet",
|
||||||
"connect_metamask": "Forbind Metamask",
|
|
||||||
"create_events_on": "Opret begivenheder på",
|
"create_events_on": "Opret begivenheder på",
|
||||||
"enterprise_license": "Dette er en virksomhedsfunktion",
|
"enterprise_license": "Dette er en virksomhedsfunktion",
|
||||||
"enterprise_license_description": "For at aktivere denne funktion, skal du gå til {{setupUrl}} for at indtaste en licensnøgle. Hvis en licensnøgle allerede er på plads, bedes du kontakte {{supportMail}} for hjælp.",
|
"enterprise_license_description": "For at aktivere denne funktion, skal du gå til {{setupUrl}} for at indtaste en licensnøgle. Hvis en licensnøgle allerede er på plads, bedes du kontakte {{supportMail}} for hjælp.",
|
||||||
|
@ -1181,11 +1178,6 @@
|
||||||
"upload": "Upload",
|
"upload": "Upload",
|
||||||
"add_profile_photo": "Tilføj profilbillede",
|
"add_profile_photo": "Tilføj profilbillede",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "Denne begivenhedstype er token gated.",
|
|
||||||
"rainbow_connect_wallet_gate": "Forbind din wallet, hvis du ejer <1>{{name}}</1> (<3>{{symbol}}</3>).",
|
|
||||||
"rainbow_insufficient_balance": "Din tilsluttede wallet indeholder ikke nok <1>{{symbol}}</1>.",
|
|
||||||
"rainbow_sign_message_request": "Signér beskedanmodningen på din wallet.",
|
|
||||||
"rainbow_signature_error": "Fejl ved anmodning om signatur fra din wallet.",
|
|
||||||
"token_address": "Token Adresse",
|
"token_address": "Token Adresse",
|
||||||
"blockchain": "Blockchain",
|
"blockchain": "Blockchain",
|
||||||
"old_password": "Gammel adgangskode",
|
"old_password": "Gammel adgangskode",
|
||||||
|
@ -1317,7 +1309,6 @@
|
||||||
"password_updated": "Adgangskode opdateret!",
|
"password_updated": "Adgangskode opdateret!",
|
||||||
"pending_payment": "Afventer betaling",
|
"pending_payment": "Afventer betaling",
|
||||||
"pending_invites": "Afventende Invitationer",
|
"pending_invites": "Afventende Invitationer",
|
||||||
"confirmation_page_rainbow": "Token gate din begivenhed med tokens eller NFTs på Ethereum, Polygon og flere.",
|
|
||||||
"not_on_cal": "Ikke på {{appName}}",
|
"not_on_cal": "Ikke på {{appName}}",
|
||||||
"no_calendar_installed": "Ingen kalender installeret",
|
"no_calendar_installed": "Ingen kalender installeret",
|
||||||
"no_calendar_installed_description": "Du har endnu ikke tilsluttet nogen af dine kalendere",
|
"no_calendar_installed_description": "Du har endnu ikke tilsluttet nogen af dine kalendere",
|
||||||
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "{{eventTypeTitle}} Ereignistyp erfolgreich erstellt",
|
"event_type_created_successfully": "{{eventTypeTitle}} Ereignistyp erfolgreich erstellt",
|
||||||
"event_type_updated_successfully": "{{eventTypeTitle}} Ereignistyp erfolgreich aktualisiert",
|
"event_type_updated_successfully": "{{eventTypeTitle}} Ereignistyp erfolgreich aktualisiert",
|
||||||
"event_type_deleted_successfully": "Termintyp erfolgreich gelöscht",
|
"event_type_deleted_successfully": "Termintyp erfolgreich gelöscht",
|
||||||
"web3_metamask_added": "Metamask erfolgreich hinzugefügt",
|
|
||||||
"web3_metamask_disconnected": "Metamask erfolgreich getrennt",
|
|
||||||
"hours": "Stunden",
|
"hours": "Stunden",
|
||||||
"your_email": "Ihre E-Mail-Adresse",
|
"your_email": "Ihre E-Mail-Adresse",
|
||||||
"change_avatar": "Profilbild ändern",
|
"change_avatar": "Profilbild ändern",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "Installiert",
|
"installed_one": "Installiert",
|
||||||
"installed_other": "{{count}} installiert",
|
"installed_other": "{{count}} installiert",
|
||||||
"verify_wallet": "Wallet verifizieren",
|
"verify_wallet": "Wallet verifizieren",
|
||||||
"connect_metamask": "Metamask verbinden",
|
|
||||||
"create_events_on": "Erstelle Termine in:",
|
"create_events_on": "Erstelle Termine in:",
|
||||||
"enterprise_license": "Das ist eine Enterprise-Funktion",
|
"enterprise_license": "Das ist eine Enterprise-Funktion",
|
||||||
"enterprise_license_description": "Um diese Funktion zu aktivieren, holen Sie sich einen Deployment-Schlüssel von der {{consoleUrl}}-Konsole und fügen Sie ihn als CALCOM_LICENSE_KEY zu Ihrer .env hinzu. Wenn Ihr Team bereits eine Lizenz hat, wenden Sie sich bitte an {{supportMail}} für Hilfe.",
|
"enterprise_license_description": "Um diese Funktion zu aktivieren, holen Sie sich einen Deployment-Schlüssel von der {{consoleUrl}}-Konsole und fügen Sie ihn als CALCOM_LICENSE_KEY zu Ihrer .env hinzu. Wenn Ihr Team bereits eine Lizenz hat, wenden Sie sich bitte an {{supportMail}} für Hilfe.",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "Upload",
|
"upload": "Upload",
|
||||||
"add_profile_photo": "Profilbild hinzufügen",
|
"add_profile_photo": "Profilbild hinzufügen",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "Dieser Ereignistyp ist durch einen Token geschützt.",
|
|
||||||
"rainbow_connect_wallet_gate": "Verbinden Sie Ihre Wallet, falls Sie <1>{{name}}</1> (<3>{{symbol}}</3>) besitzen.",
|
|
||||||
"rainbow_insufficient_balance": "Ihre verbundene Wallet enthält nicht genug <1>{{symbol}}</1>.",
|
|
||||||
"rainbow_sign_message_request": "Unterschreiben Sie die Nachrichtenanfrage in Ihrem Wallet.",
|
|
||||||
"rainbow_signature_error": "Fehler beim Anfordern der Signatur von Ihrer Wallet.",
|
|
||||||
"token_address": "Adresse des Token",
|
"token_address": "Adresse des Token",
|
||||||
"blockchain": "Blockchain",
|
"blockchain": "Blockchain",
|
||||||
"old_password": "Altes Passwort",
|
"old_password": "Altes Passwort",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "Passwort aktualisiert!",
|
"password_updated": "Passwort aktualisiert!",
|
||||||
"pending_payment": "Zahlung ausstehend",
|
"pending_payment": "Zahlung ausstehend",
|
||||||
"pending_invites": "Offene Einladungen",
|
"pending_invites": "Offene Einladungen",
|
||||||
"confirmation_page_rainbow": "Sperren Sie Ihr Ereignis hinter Tokens oder NFTs auf Ethereum, Polygon und mehr.",
|
|
||||||
"not_on_cal": "Nicht auf {{appName}}",
|
"not_on_cal": "Nicht auf {{appName}}",
|
||||||
"no_calendar_installed": "Kein Kalender installiert",
|
"no_calendar_installed": "Kein Kalender installiert",
|
||||||
"no_calendar_installed_description": "Sie haben noch keinen Ihrer Kalender verbunden",
|
"no_calendar_installed_description": "Sie haben noch keinen Ihrer Kalender verbunden",
|
||||||
|
|
|
@ -634,8 +634,6 @@
|
||||||
"event_type_created_successfully": "{{eventTypeTitle}} event type created successfully",
|
"event_type_created_successfully": "{{eventTypeTitle}} event type created successfully",
|
||||||
"event_type_updated_successfully": "{{eventTypeTitle}} event type updated successfully",
|
"event_type_updated_successfully": "{{eventTypeTitle}} event type updated successfully",
|
||||||
"event_type_deleted_successfully": "Event type deleted successfully",
|
"event_type_deleted_successfully": "Event type deleted successfully",
|
||||||
"web3_metamask_added": "Metamask added successfully",
|
|
||||||
"web3_metamask_disconnected": "Metamask disconnected successfully",
|
|
||||||
"hours": "Hours",
|
"hours": "Hours",
|
||||||
"your_email": "Your Email",
|
"your_email": "Your Email",
|
||||||
"change_avatar": "Change Avatar",
|
"change_avatar": "Change Avatar",
|
||||||
|
@ -876,7 +874,6 @@
|
||||||
"installed_one": "Installed",
|
"installed_one": "Installed",
|
||||||
"installed_other": "{{count}} installed",
|
"installed_other": "{{count}} installed",
|
||||||
"verify_wallet": "Verify Wallet",
|
"verify_wallet": "Verify Wallet",
|
||||||
"connect_metamask": "Connect Metamask",
|
|
||||||
"create_events_on": "Create events on",
|
"create_events_on": "Create events on",
|
||||||
"enterprise_license": "This is an enterprise feature",
|
"enterprise_license": "This is an enterprise feature",
|
||||||
"enterprise_license_description": "To enable this feature, have an administrator go to {{setupUrl}} to enter a license key. If a license key is already in place, please contact {{supportMail}} for help.",
|
"enterprise_license_description": "To enable this feature, have an administrator go to {{setupUrl}} to enter a license key. If a license key is already in place, please contact {{supportMail}} for help.",
|
||||||
|
@ -1232,11 +1229,6 @@
|
||||||
"upload": "Upload",
|
"upload": "Upload",
|
||||||
"add_profile_photo": "Add profile photo",
|
"add_profile_photo": "Add profile photo",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "This event type is token gated.",
|
|
||||||
"rainbow_connect_wallet_gate": "Connect your wallet if you own <1>{{name}}</1> (<3>{{symbol}}</3>).",
|
|
||||||
"rainbow_insufficient_balance": "Your connected wallet doesn't contain enough <1>{{symbol}}</1>.",
|
|
||||||
"rainbow_sign_message_request": "Sign the message request on your wallet.",
|
|
||||||
"rainbow_signature_error": "Error requesting signature from your wallet.",
|
|
||||||
"token_address": "Token Address",
|
"token_address": "Token Address",
|
||||||
"blockchain": "Blockchain",
|
"blockchain": "Blockchain",
|
||||||
"old_password": "Old password",
|
"old_password": "Old password",
|
||||||
|
@ -1382,7 +1374,6 @@
|
||||||
"password_updated": "Password updated!",
|
"password_updated": "Password updated!",
|
||||||
"pending_payment": "Pending payment",
|
"pending_payment": "Pending payment",
|
||||||
"pending_invites": "Pending Invites",
|
"pending_invites": "Pending Invites",
|
||||||
"confirmation_page_rainbow": "Token gate your event with tokens or NFTs on Ethereum, Polygon, and more.",
|
|
||||||
"not_on_cal": "Not on {{appName}}",
|
"not_on_cal": "Not on {{appName}}",
|
||||||
"no_calendar_installed": "No calendar installed",
|
"no_calendar_installed": "No calendar installed",
|
||||||
"no_calendar_installed_description": "You have not yet connected any of your calendars",
|
"no_calendar_installed_description": "You have not yet connected any of your calendars",
|
||||||
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "{{eventTypeTitle}} tipo de evento creado con éxito",
|
"event_type_created_successfully": "{{eventTypeTitle}} tipo de evento creado con éxito",
|
||||||
"event_type_updated_successfully": "{{eventTypeTitle}} tipo de evento actualizado con éxito",
|
"event_type_updated_successfully": "{{eventTypeTitle}} tipo de evento actualizado con éxito",
|
||||||
"event_type_deleted_successfully": "Tipo de evento eliminado con éxito",
|
"event_type_deleted_successfully": "Tipo de evento eliminado con éxito",
|
||||||
"web3_metamask_added": "Metamask ha sido añadido exitosamente",
|
|
||||||
"web3_metamask_disconnected": "Metamask ha sido removido exitosamente",
|
|
||||||
"hours": "Horas",
|
"hours": "Horas",
|
||||||
"your_email": "Tu Email",
|
"your_email": "Tu Email",
|
||||||
"change_avatar": "Cambiar Avatar",
|
"change_avatar": "Cambiar Avatar",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "Instalada",
|
"installed_one": "Instalada",
|
||||||
"installed_other": "{{count}} instaladas",
|
"installed_other": "{{count}} instaladas",
|
||||||
"verify_wallet": "Verificar billetera",
|
"verify_wallet": "Verificar billetera",
|
||||||
"connect_metamask": "Conectar Metamask",
|
|
||||||
"create_events_on": "Crear eventos en",
|
"create_events_on": "Crear eventos en",
|
||||||
"enterprise_license": "Esta es una función empresarial",
|
"enterprise_license": "Esta es una función empresarial",
|
||||||
"enterprise_license_description": "Para habilitar esta función, obtenga una clave de despliegue en la consola {{consoleUrl}} y añádala a su .env como CALCOM_LICENSE_KEY. Si su equipo ya tiene una licencia, póngase en contacto con {{supportMail}} para obtener ayuda.",
|
"enterprise_license_description": "Para habilitar esta función, obtenga una clave de despliegue en la consola {{consoleUrl}} y añádala a su .env como CALCOM_LICENSE_KEY. Si su equipo ya tiene una licencia, póngase en contacto con {{supportMail}} para obtener ayuda.",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "Cargar",
|
"upload": "Cargar",
|
||||||
"add_profile_photo": "Agregar foto de perfil",
|
"add_profile_photo": "Agregar foto de perfil",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "Este tipo de evento tiene acceso cerrado por token.",
|
|
||||||
"rainbow_connect_wallet_gate": "Conecta tu billetera si posees <1>{{name}}</1> (<3>{{symbol}}</3>).",
|
|
||||||
"rainbow_insufficient_balance": "Tu billetera conectada no contiene suficiente <1>{{symbol}}</1>.",
|
|
||||||
"rainbow_sign_message_request": "Firma la solicitud de mensaje en tu billetera.",
|
|
||||||
"rainbow_signature_error": "Error al solicitar la firma desde tu billetera.",
|
|
||||||
"token_address": "Dirección del token",
|
"token_address": "Dirección del token",
|
||||||
"blockchain": "Blockchain",
|
"blockchain": "Blockchain",
|
||||||
"old_password": "Contraseña anterior",
|
"old_password": "Contraseña anterior",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "¡Contraseña actualizada!",
|
"password_updated": "¡Contraseña actualizada!",
|
||||||
"pending_payment": "Pago pendiente",
|
"pending_payment": "Pago pendiente",
|
||||||
"pending_invites": "Invitaciones pendientes",
|
"pending_invites": "Invitaciones pendientes",
|
||||||
"confirmation_page_rainbow": "Cierra el acceso a tu evento con tokens o NFTs en Ethereum, Polygon, etc.",
|
|
||||||
"not_on_cal": "No estás en {{appName}}",
|
"not_on_cal": "No estás en {{appName}}",
|
||||||
"no_calendar_installed": "No hay ningún calendario instalado",
|
"no_calendar_installed": "No hay ningún calendario instalado",
|
||||||
"no_calendar_installed_description": "Aún no has conectado ninguno de tus calendarios",
|
"no_calendar_installed_description": "Aún no has conectado ninguno de tus calendarios",
|
||||||
|
|
|
@ -634,8 +634,6 @@
|
||||||
"event_type_created_successfully": "Type d'événement {{eventTypeTitle}} créé avec succès",
|
"event_type_created_successfully": "Type d'événement {{eventTypeTitle}} créé avec succès",
|
||||||
"event_type_updated_successfully": "Type d'événement {{eventTypeTitle}} mis à jour avec succès",
|
"event_type_updated_successfully": "Type d'événement {{eventTypeTitle}} mis à jour avec succès",
|
||||||
"event_type_deleted_successfully": "Type d'événement supprimé avec succès",
|
"event_type_deleted_successfully": "Type d'événement supprimé avec succès",
|
||||||
"web3_metamask_added": "MetaMask ajouté avec succès",
|
|
||||||
"web3_metamask_disconnected": "MetaMask déconnecté avec succès",
|
|
||||||
"hours": "heures",
|
"hours": "heures",
|
||||||
"your_email": "Votre adresse e-mail",
|
"your_email": "Votre adresse e-mail",
|
||||||
"change_avatar": "Changer d'avatar",
|
"change_avatar": "Changer d'avatar",
|
||||||
|
@ -873,7 +871,6 @@
|
||||||
"installed_one": "Installée",
|
"installed_one": "Installée",
|
||||||
"installed_other": "{{count}} installation(s)",
|
"installed_other": "{{count}} installation(s)",
|
||||||
"verify_wallet": "Vérifier le portefeuille",
|
"verify_wallet": "Vérifier le portefeuille",
|
||||||
"connect_metamask": "Connecter MetaMask",
|
|
||||||
"create_events_on": "Créer des événements dans :",
|
"create_events_on": "Créer des événements dans :",
|
||||||
"enterprise_license": "Il s'agit d'une fonctionnalité d'entreprise",
|
"enterprise_license": "Il s'agit d'une fonctionnalité d'entreprise",
|
||||||
"enterprise_license_description": "Pour activer cette fonctionnalité, demandez à un administrateur d'accéder à {{setupUrl}} pour saisir une clé de licence. Si une clé de licence est déjà en place, veuillez contacter {{supportMail}} pour obtenir de l'aide.",
|
"enterprise_license_description": "Pour activer cette fonctionnalité, demandez à un administrateur d'accéder à {{setupUrl}} pour saisir une clé de licence. Si une clé de licence est déjà en place, veuillez contacter {{supportMail}} pour obtenir de l'aide.",
|
||||||
|
@ -1229,11 +1226,6 @@
|
||||||
"upload": "Télécharger",
|
"upload": "Télécharger",
|
||||||
"add_profile_photo": "Ajouter une photo de profil",
|
"add_profile_photo": "Ajouter une photo de profil",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "Ce type d'événement est protégé par un token.",
|
|
||||||
"rainbow_connect_wallet_gate": "Connectez votre portefeuille si vous possédez <1>{{name}}</1> (<3>{{symbol}}</3>).",
|
|
||||||
"rainbow_insufficient_balance": "Votre portefeuille connecté ne contient pas assez de <1>{{symbol}}</1>.",
|
|
||||||
"rainbow_sign_message_request": "Signez la demande de message sur votre portefeuille.",
|
|
||||||
"rainbow_signature_error": "Erreur lors de la demande de signature de votre portefeuille.",
|
|
||||||
"token_address": "Adresse du token",
|
"token_address": "Adresse du token",
|
||||||
"blockchain": "Blockchain",
|
"blockchain": "Blockchain",
|
||||||
"old_password": "Ancien mot de passe",
|
"old_password": "Ancien mot de passe",
|
||||||
|
@ -1379,7 +1371,6 @@
|
||||||
"password_updated": "Mot de passe mis à jour !",
|
"password_updated": "Mot de passe mis à jour !",
|
||||||
"pending_payment": "Paiement en attente",
|
"pending_payment": "Paiement en attente",
|
||||||
"pending_invites": "Invitations en attente",
|
"pending_invites": "Invitations en attente",
|
||||||
"confirmation_page_rainbow": "Le token protège votre événement avec des tokens ou des NFT sur Ethereum, Polygon et plus encore.",
|
|
||||||
"not_on_cal": "Pas sur {{appName}}",
|
"not_on_cal": "Pas sur {{appName}}",
|
||||||
"no_calendar_installed": "Aucun calendrier installé",
|
"no_calendar_installed": "Aucun calendrier installé",
|
||||||
"no_calendar_installed_description": "Vous n'avez pas encore connecté vos calendriers.",
|
"no_calendar_installed_description": "Vous n'avez pas encore connecté vos calendriers.",
|
||||||
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "יצירת האירוע מסוג {{eventTypeTitle}} בוצעה בהצלחה",
|
"event_type_created_successfully": "יצירת האירוע מסוג {{eventTypeTitle}} בוצעה בהצלחה",
|
||||||
"event_type_updated_successfully": "עדכון האירוע מסוג {{eventTypeTitle}} בוצע בהצלחה",
|
"event_type_updated_successfully": "עדכון האירוע מסוג {{eventTypeTitle}} בוצע בהצלחה",
|
||||||
"event_type_deleted_successfully": "מחיקת סוג האירוע בוצעה בהצלחה",
|
"event_type_deleted_successfully": "מחיקת סוג האירוע בוצעה בהצלחה",
|
||||||
"web3_metamask_added": "הוספת ה-Metamask בוצעה בהצלחה",
|
|
||||||
"web3_metamask_disconnected": "ניתוק ה-Metamask בוצע בהצלחה",
|
|
||||||
"hours": "שעות",
|
"hours": "שעות",
|
||||||
"your_email": "הדוא\"ל שלך",
|
"your_email": "הדוא\"ל שלך",
|
||||||
"change_avatar": "שינוי אווטאר",
|
"change_avatar": "שינוי אווטאר",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "מותקן",
|
"installed_one": "מותקן",
|
||||||
"installed_other": "{{count}} התקנות",
|
"installed_other": "{{count}} התקנות",
|
||||||
"verify_wallet": "אימות הארנק",
|
"verify_wallet": "אימות הארנק",
|
||||||
"connect_metamask": "קישור Metamask",
|
|
||||||
"create_events_on": "ליצור אירועים ב-",
|
"create_events_on": "ליצור אירועים ב-",
|
||||||
"enterprise_license": "תכונה זו זמינה רק במינוי Enterprise",
|
"enterprise_license": "תכונה זו זמינה רק במינוי Enterprise",
|
||||||
"enterprise_license_description": "כדי להפעיל את יכולת זו, בקש ממנהל לגשת אל הקישור {{setupUrl}} והקלדת הרישיון. אם כבר יש רישיון מוגדר, צור קשר עם {{supportMail}} לעזרה.",
|
"enterprise_license_description": "כדי להפעיל את יכולת זו, בקש ממנהל לגשת אל הקישור {{setupUrl}} והקלדת הרישיון. אם כבר יש רישיון מוגדר, צור קשר עם {{supportMail}} לעזרה.",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "העלאה",
|
"upload": "העלאה",
|
||||||
"add_profile_photo": "הוספת תמונת פרופיל",
|
"add_profile_photo": "הוספת תמונת פרופיל",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "סוג אירוע זה מוגן באמצעות טוקן.",
|
|
||||||
"rainbow_connect_wallet_gate": "קשר/י את הארנק שלך אם בבעלותך <1>{{name}}</1> (<3>{{symbol}}</3>).",
|
|
||||||
"rainbow_insufficient_balance": "אין בארנק שלך מספיק <1>{{symbol}}</1>.",
|
|
||||||
"rainbow_sign_message_request": "חתום/י על בקשת ההודעה בארנק.",
|
|
||||||
"rainbow_signature_error": "שגיאה בעת בקשת חתימה מהארנק.",
|
|
||||||
"token_address": "כתובת הטוקן",
|
"token_address": "כתובת הטוקן",
|
||||||
"blockchain": "בלוקצ'יין",
|
"blockchain": "בלוקצ'יין",
|
||||||
"old_password": "סיסמה ישנה",
|
"old_password": "סיסמה ישנה",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "הסיסמה עודכנה!",
|
"password_updated": "הסיסמה עודכנה!",
|
||||||
"pending_payment": "המתנה לתשלום",
|
"pending_payment": "המתנה לתשלום",
|
||||||
"pending_invites": "הזמנות ממתינות",
|
"pending_invites": "הזמנות ממתינות",
|
||||||
"confirmation_page_rainbow": "הגן/י על האירוע שלך באמצעות טוקנים או אסימוני NFT במטבע Ethereum, Polygon ועוד.",
|
|
||||||
"not_on_cal": "לא ב-{{appName}}",
|
"not_on_cal": "לא ב-{{appName}}",
|
||||||
"no_calendar_installed": "לא מותקן לוח שנה",
|
"no_calendar_installed": "לא מותקן לוח שנה",
|
||||||
"no_calendar_installed_description": "לא קישרת אף אחד מלוחות השנה שלך",
|
"no_calendar_installed_description": "לא קישרת אף אחד מלוחות השנה שלך",
|
||||||
|
|
|
@ -189,7 +189,6 @@
|
||||||
"remove": "Ektávolítás",
|
"remove": "Ektávolítás",
|
||||||
"add": "Hozzáadás",
|
"add": "Hozzáadás",
|
||||||
"installed_one": "Telepített",
|
"installed_one": "Telepített",
|
||||||
"connect_metamask": "Metamask csatlakoztatása",
|
|
||||||
"error_404": "404-es hiba",
|
"error_404": "404-es hiba",
|
||||||
"default": "Alapértelmezett",
|
"default": "Alapértelmezett",
|
||||||
"24_hour_short": "0-24",
|
"24_hour_short": "0-24",
|
||||||
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "{{eventTypeTitle}} tipo di evento creato con successo",
|
"event_type_created_successfully": "{{eventTypeTitle}} tipo di evento creato con successo",
|
||||||
"event_type_updated_successfully": "{{eventTypeTitle}} tipo di evento aggiornato con successo",
|
"event_type_updated_successfully": "{{eventTypeTitle}} tipo di evento aggiornato con successo",
|
||||||
"event_type_deleted_successfully": "Tipo di evento eliminato con successo",
|
"event_type_deleted_successfully": "Tipo di evento eliminato con successo",
|
||||||
"web3_metamask_added": "Metamask aggiunto",
|
|
||||||
"web3_metamask_disconnected": "Metamask disconnesso",
|
|
||||||
"hours": "Ore",
|
"hours": "Ore",
|
||||||
"your_email": "La Tua Email",
|
"your_email": "La Tua Email",
|
||||||
"change_avatar": "Cambia Avatar",
|
"change_avatar": "Cambia Avatar",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "Installata",
|
"installed_one": "Installata",
|
||||||
"installed_other": "{{count}} installate",
|
"installed_other": "{{count}} installate",
|
||||||
"verify_wallet": "Verifica Wallet",
|
"verify_wallet": "Verifica Wallet",
|
||||||
"connect_metamask": "Connetti Metamask",
|
|
||||||
"create_events_on": "Crea eventi su:",
|
"create_events_on": "Crea eventi su:",
|
||||||
"enterprise_license": "Questa è una funzione Enterprise",
|
"enterprise_license": "Questa è una funzione Enterprise",
|
||||||
"enterprise_license_description": "Per abilitare questa funzione, ottenere una chiave di distribuzione presso la console {{consoleUrl}} e aggiungerla al proprio .env come CALCOM_LICENSE_KEY. Nel caso il team possieda già una licenza, contattare {{supportMail}} per assistenza.",
|
"enterprise_license_description": "Per abilitare questa funzione, ottenere una chiave di distribuzione presso la console {{consoleUrl}} e aggiungerla al proprio .env come CALCOM_LICENSE_KEY. Nel caso il team possieda già una licenza, contattare {{supportMail}} per assistenza.",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "Carica",
|
"upload": "Carica",
|
||||||
"add_profile_photo": "Aggiungi foto del profilo",
|
"add_profile_photo": "Aggiungi foto del profilo",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "Questo tipo di evento è protetto da token.",
|
|
||||||
"rainbow_connect_wallet_gate": "Collega il tuo portafoglio se possiedi <1>{{name}}</1> (<3>{{symbol}}</3>).",
|
|
||||||
"rainbow_insufficient_balance": "Il portafoglio collegato non contiene abbastanza <1>{{symbol}}</1>.",
|
|
||||||
"rainbow_sign_message_request": "Firma la richiesta di messaggio sul tuo portafoglio.",
|
|
||||||
"rainbow_signature_error": "Errore durante la richiesta di firma al tuo portafoglio.",
|
|
||||||
"token_address": "Indirizzo token",
|
"token_address": "Indirizzo token",
|
||||||
"blockchain": "Blockchain",
|
"blockchain": "Blockchain",
|
||||||
"old_password": "Vecchia password",
|
"old_password": "Vecchia password",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "Password aggiornata!",
|
"password_updated": "Password aggiornata!",
|
||||||
"pending_payment": "Pagamento in sospeso",
|
"pending_payment": "Pagamento in sospeso",
|
||||||
"pending_invites": "Inviti in sospeso",
|
"pending_invites": "Inviti in sospeso",
|
||||||
"confirmation_page_rainbow": "Proteggi i tuoi eventi con token o NFT su Ethereum, Polygon e altri.",
|
|
||||||
"not_on_cal": "Non presente su {{appName}}",
|
"not_on_cal": "Non presente su {{appName}}",
|
||||||
"no_calendar_installed": "Nessun calendario installato",
|
"no_calendar_installed": "Nessun calendario installato",
|
||||||
"no_calendar_installed_description": "Non hai ancora collegato alcun calendario",
|
"no_calendar_installed_description": "Non hai ancora collegato alcun calendario",
|
||||||
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "{{eventTypeTitle}} イベント種別が正常に作成されました",
|
"event_type_created_successfully": "{{eventTypeTitle}} イベント種別が正常に作成されました",
|
||||||
"event_type_updated_successfully": "{{eventTypeTitle}} イベント種別が正常に更新されました",
|
"event_type_updated_successfully": "{{eventTypeTitle}} イベント種別が正常に更新されました",
|
||||||
"event_type_deleted_successfully": "イベント種別が正常に削除されました",
|
"event_type_deleted_successfully": "イベント種別が正常に削除されました",
|
||||||
"web3_metamask_added": "メタマスクが正常に追加されました",
|
|
||||||
"web3_metamask_disconnected": "メタマスクの接続が正常に解除されました",
|
|
||||||
"hours": "時間",
|
"hours": "時間",
|
||||||
"your_email": "あなたのメールアドレス",
|
"your_email": "あなたのメールアドレス",
|
||||||
"change_avatar": "アバターを変更",
|
"change_avatar": "アバターを変更",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "インストール済み",
|
"installed_one": "インストール済み",
|
||||||
"installed_other": "{{count}} 回インストールしました",
|
"installed_other": "{{count}} 回インストールしました",
|
||||||
"verify_wallet": "ウォレットを確認する",
|
"verify_wallet": "ウォレットを確認する",
|
||||||
"connect_metamask": "メタマスクを接続する",
|
|
||||||
"create_events_on": "以下にイベントを作成する:",
|
"create_events_on": "以下にイベントを作成する:",
|
||||||
"enterprise_license": "これは企業向けの機能です",
|
"enterprise_license": "これは企業向けの機能です",
|
||||||
"enterprise_license_description": "この機能を有効にするには、{{consoleUrl}} コンソールでデプロイメントキーを入手して .env に CALCOM_LICENSE_KEY として追加してください。既にチームがライセンスを持っている場合は {{supportMail}} にお問い合わせください。",
|
"enterprise_license_description": "この機能を有効にするには、{{consoleUrl}} コンソールでデプロイメントキーを入手して .env に CALCOM_LICENSE_KEY として追加してください。既にチームがライセンスを持っている場合は {{supportMail}} にお問い合わせください。",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "アップロード",
|
"upload": "アップロード",
|
||||||
"add_profile_photo": "プロフィール写真を追加",
|
"add_profile_photo": "プロフィール写真を追加",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "このイベントの種類は、トークンの所有者にのみに解放されています。",
|
|
||||||
"rainbow_connect_wallet_gate": "<1>{{name}}</1>(<3>{{symbol}}</3>)を所有している場合には、ウォレットを接続してください。",
|
|
||||||
"rainbow_insufficient_balance": "接続されているウォレットには十分な <1>{{symbol}}</1> がありません。",
|
|
||||||
"rainbow_sign_message_request": "ウォレットのメッセージリクエストに署名をしてください。",
|
|
||||||
"rainbow_signature_error": "ウォレットからの署名のリクエスト中にエラーが発生しました。",
|
|
||||||
"token_address": "トークンアドレス",
|
"token_address": "トークンアドレス",
|
||||||
"blockchain": "ブロックチェーン",
|
"blockchain": "ブロックチェーン",
|
||||||
"old_password": "古いパスワード",
|
"old_password": "古いパスワード",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "パスワードが更新されました!",
|
"password_updated": "パスワードが更新されました!",
|
||||||
"pending_payment": "支払い待ち",
|
"pending_payment": "支払い待ち",
|
||||||
"pending_invites": "保留中の招待",
|
"pending_invites": "保留中の招待",
|
||||||
"confirmation_page_rainbow": "Ethereum や Polygon などのトークンや NFT を使用してイベントに参加しましょう。",
|
|
||||||
"not_on_cal": "{{appName}} にはいません",
|
"not_on_cal": "{{appName}} にはいません",
|
||||||
"no_calendar_installed": "カレンダーがインストールされていません",
|
"no_calendar_installed": "カレンダーがインストールされていません",
|
||||||
"no_calendar_installed_description": "まだどのカレンダーも接続していません",
|
"no_calendar_installed_description": "まだどのカレンダーも接続していません",
|
||||||
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "{{eventTypeTitle}} 이벤트 타입이 성공적으로 생성되었습니다.",
|
"event_type_created_successfully": "{{eventTypeTitle}} 이벤트 타입이 성공적으로 생성되었습니다.",
|
||||||
"event_type_updated_successfully": "{{eventTypeTitle}} 이벤트 타입이 성공적으로 업데이트되었습니다.",
|
"event_type_updated_successfully": "{{eventTypeTitle}} 이벤트 타입이 성공적으로 업데이트되었습니다.",
|
||||||
"event_type_deleted_successfully": "이벤트 타입이 성공적으로 삭제되었습니다.",
|
"event_type_deleted_successfully": "이벤트 타입이 성공적으로 삭제되었습니다.",
|
||||||
"web3_metamask_added": "메타마스크가 성공적으로 추가되었습니다",
|
|
||||||
"web3_metamask_disconnected": "메타마스크가 성공적으로 연결 해제되었습니다",
|
|
||||||
"hours": "시간",
|
"hours": "시간",
|
||||||
"your_email": "이메일 주소",
|
"your_email": "이메일 주소",
|
||||||
"change_avatar": "아바타 변경하기",
|
"change_avatar": "아바타 변경하기",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "설치됨",
|
"installed_one": "설치됨",
|
||||||
"installed_other": "{{count}}개 설치됨",
|
"installed_other": "{{count}}개 설치됨",
|
||||||
"verify_wallet": "지갑 인증",
|
"verify_wallet": "지갑 인증",
|
||||||
"connect_metamask": "메타마스크 연결",
|
|
||||||
"create_events_on": "이벤트 생성일:",
|
"create_events_on": "이벤트 생성일:",
|
||||||
"enterprise_license": "엔터프라이즈 기능입니다",
|
"enterprise_license": "엔터프라이즈 기능입니다",
|
||||||
"enterprise_license_description": "이 기능을 활성화하려면 {{consoleUrl}} 콘솔에서 배포 키를 가져와 .env에 CALCOM_LICENSE_KEY로 추가하세요. 팀에 이미 라이선스가 있는 경우 {{supportMail}}에 문의하여 도움을 받으세요.",
|
"enterprise_license_description": "이 기능을 활성화하려면 {{consoleUrl}} 콘솔에서 배포 키를 가져와 .env에 CALCOM_LICENSE_KEY로 추가하세요. 팀에 이미 라이선스가 있는 경우 {{supportMail}}에 문의하여 도움을 받으세요.",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "업로드",
|
"upload": "업로드",
|
||||||
"add_profile_photo": "프로필 사진 추가",
|
"add_profile_photo": "프로필 사진 추가",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "이 이벤트 유형은 토큰 게이트식입니다.",
|
|
||||||
"rainbow_connect_wallet_gate": "<1>{{name}}</1> 소유 시 사용자 지갑을 연결합니다(<3>{{symbol}}</3>).",
|
|
||||||
"rainbow_insufficient_balance": "연결된 지갑에 <1>{{symbol}}</1>이(가) 부족합니다.",
|
|
||||||
"rainbow_sign_message_request": "지갑에서 메시지 요청에 서명합니다.",
|
|
||||||
"rainbow_signature_error": "지갑에서 서명을 요청하는 중 오류가 발생했습니다.",
|
|
||||||
"token_address": "토큰 주소",
|
"token_address": "토큰 주소",
|
||||||
"blockchain": "블록체인",
|
"blockchain": "블록체인",
|
||||||
"old_password": "이전 비밀번호",
|
"old_password": "이전 비밀번호",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "비밀번호가 업데이트되었습니다!",
|
"password_updated": "비밀번호가 업데이트되었습니다!",
|
||||||
"pending_payment": "진행 중인 결제",
|
"pending_payment": "진행 중인 결제",
|
||||||
"pending_invites": "보류 중인 초대",
|
"pending_invites": "보류 중인 초대",
|
||||||
"confirmation_page_rainbow": "이더리움, 폴리곤 등의 토큰 또는 NFT를 사용하여 이벤트를 토큰 게이트합니다.",
|
|
||||||
"not_on_cal": "{{appName}}에 없음",
|
"not_on_cal": "{{appName}}에 없음",
|
||||||
"no_calendar_installed": "설치된 캘린더 없음",
|
"no_calendar_installed": "설치된 캘린더 없음",
|
||||||
"no_calendar_installed_description": "아직 연결된 캘린더가 없습니다",
|
"no_calendar_installed_description": "아직 연결된 캘린더가 없습니다",
|
||||||
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "{{eventTypeTitle}} evenement met succes aangemaakt",
|
"event_type_created_successfully": "{{eventTypeTitle}} evenement met succes aangemaakt",
|
||||||
"event_type_updated_successfully": "Evenement is bijgewerkt",
|
"event_type_updated_successfully": "Evenement is bijgewerkt",
|
||||||
"event_type_deleted_successfully": "Evenement is verwijderd",
|
"event_type_deleted_successfully": "Evenement is verwijderd",
|
||||||
"web3_metamask_added": "Metamasker toegevoegd",
|
|
||||||
"web3_metamask_disconnected": "Verbindig met metamasker verbroken",
|
|
||||||
"hours": "Uren",
|
"hours": "Uren",
|
||||||
"your_email": "Uw E-mailadres",
|
"your_email": "Uw E-mailadres",
|
||||||
"change_avatar": "Wijzig avatar",
|
"change_avatar": "Wijzig avatar",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "Geïnstalleerd",
|
"installed_one": "Geïnstalleerd",
|
||||||
"installed_other": "{{count}} keer geïnstalleerd",
|
"installed_other": "{{count}} keer geïnstalleerd",
|
||||||
"verify_wallet": "Wallet verifiëren",
|
"verify_wallet": "Wallet verifiëren",
|
||||||
"connect_metamask": "Metamasker verbinden",
|
|
||||||
"create_events_on": "Maak gebeurtenissen aan in de",
|
"create_events_on": "Maak gebeurtenissen aan in de",
|
||||||
"enterprise_license": "Dit is een bedrijfsfunctie",
|
"enterprise_license": "Dit is een bedrijfsfunctie",
|
||||||
"enterprise_license_description": "Om deze functie in te schakelen, krijgt u een implementatiesleutel op de {{consoleUrl}}-console en voegt u deze toe aan uw .env als CALCOM_LICENSE_KEY. Als uw team al een licentie heeft, neem dan contact op met {{supportMail}} voor hulp.",
|
"enterprise_license_description": "Om deze functie in te schakelen, krijgt u een implementatiesleutel op de {{consoleUrl}}-console en voegt u deze toe aan uw .env als CALCOM_LICENSE_KEY. Als uw team al een licentie heeft, neem dan contact op met {{supportMail}} voor hulp.",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "Uploaden",
|
"upload": "Uploaden",
|
||||||
"add_profile_photo": "Profielfoto toevoegen",
|
"add_profile_photo": "Profielfoto toevoegen",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "Dit type gebeurtenis vereist een token.",
|
|
||||||
"rainbow_connect_wallet_gate": "Koppel uw wallet als u in het bezit bent van <1>{{name}}</1> (<3>{{symbol}}</3>).",
|
|
||||||
"rainbow_insufficient_balance": "Uw gekoppelde wallet bevat niet genoeg <1>{{symbol}}</1>.",
|
|
||||||
"rainbow_sign_message_request": "Onderteken het berichtverzoek in uw wallet.",
|
|
||||||
"rainbow_signature_error": "Fout bij het aanvragen van ondertekening in uw wallet.",
|
|
||||||
"token_address": "Tokenadres",
|
"token_address": "Tokenadres",
|
||||||
"blockchain": "Blockchain",
|
"blockchain": "Blockchain",
|
||||||
"old_password": "Oude wachtwoord",
|
"old_password": "Oude wachtwoord",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "Wachtwoord bijgewerkt!",
|
"password_updated": "Wachtwoord bijgewerkt!",
|
||||||
"pending_payment": "In afwachting van betaling",
|
"pending_payment": "In afwachting van betaling",
|
||||||
"pending_invites": "Openstaande uitnodigingen",
|
"pending_invites": "Openstaande uitnodigingen",
|
||||||
"confirmation_page_rainbow": "Scherm uw gebeurtenis af met tokens of NFT's op Ethereum, Polygon en meer.",
|
|
||||||
"not_on_cal": "Niet op {{appName}}",
|
"not_on_cal": "Niet op {{appName}}",
|
||||||
"no_calendar_installed": "Geen agenda geïnstalleerd",
|
"no_calendar_installed": "Geen agenda geïnstalleerd",
|
||||||
"no_calendar_installed_description": "U heeft nog geen agenda's gekoppeld",
|
"no_calendar_installed_description": "U heeft nog geen agenda's gekoppeld",
|
||||||
|
|
|
@ -591,8 +591,6 @@
|
||||||
"event_type_created_successfully": "{{eventTypeTitle}} hendelsestype opprettet",
|
"event_type_created_successfully": "{{eventTypeTitle}} hendelsestype opprettet",
|
||||||
"event_type_updated_successfully": "{{eventTypeTitle}} hendelsestype ble oppdatert",
|
"event_type_updated_successfully": "{{eventTypeTitle}} hendelsestype ble oppdatert",
|
||||||
"event_type_deleted_successfully": "Hendelsestypen ble slettet",
|
"event_type_deleted_successfully": "Hendelsestypen ble slettet",
|
||||||
"web3_metamask_added": "Metamask ble lagt til",
|
|
||||||
"web3_metamask_disconnected": "Metamask'en ble koblet fra",
|
|
||||||
"hours": "Timer",
|
"hours": "Timer",
|
||||||
"your_email": "Din E-post",
|
"your_email": "Din E-post",
|
||||||
"change_avatar": "Endre Avatar",
|
"change_avatar": "Endre Avatar",
|
||||||
|
@ -819,7 +817,6 @@
|
||||||
"installed_one": "Installert",
|
"installed_one": "Installert",
|
||||||
"installed_other": "{{count}} er installert",
|
"installed_other": "{{count}} er installert",
|
||||||
"verify_wallet": "Verifiser Lommebok",
|
"verify_wallet": "Verifiser Lommebok",
|
||||||
"connect_metamask": "Koble til Metamask",
|
|
||||||
"create_events_on": "Opprett hendelser på",
|
"create_events_on": "Opprett hendelser på",
|
||||||
"enterprise_license": "Dette er en bedriftsfunksjon",
|
"enterprise_license": "Dette er en bedriftsfunksjon",
|
||||||
"enterprise_license_description": "For å aktivere denne funksjonen, skaff deg en distribusjonsnøkkel på {{consoleUrl}}-konsollen og legg den til i .env som CALCOM_LICENSE_KEY. Hvis teamet ditt allerede har en lisens, vennligst kontakt {{supportMail}} for å få hjelp.",
|
"enterprise_license_description": "For å aktivere denne funksjonen, skaff deg en distribusjonsnøkkel på {{consoleUrl}}-konsollen og legg den til i .env som CALCOM_LICENSE_KEY. Hvis teamet ditt allerede har en lisens, vennligst kontakt {{supportMail}} for å få hjelp.",
|
||||||
|
@ -1160,11 +1157,6 @@
|
||||||
"upload": "Last opp",
|
"upload": "Last opp",
|
||||||
"add_profile_photo": "Legg til profilbilde",
|
"add_profile_photo": "Legg til profilbilde",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "Denne hendelsestypen er token-gated.",
|
|
||||||
"rainbow_connect_wallet_gate": "Koble til lommeboken din hvis du eier <1>{{name}}</1> (<3>{{symbol}}</3>).",
|
|
||||||
"rainbow_insufficient_balance": "Den tilkoblede lommeboken din inneholder ikke nok <1>{{symbol}}</1>.",
|
|
||||||
"rainbow_sign_message_request": "Signer meldingsforespørselen i lommeboken din.",
|
|
||||||
"rainbow_signature_error": "Feil ved forespørsel om signatur fra lommeboken.",
|
|
||||||
"token_address": "Token Adresse",
|
"token_address": "Token Adresse",
|
||||||
"blockchain": "Blockchain",
|
"blockchain": "Blockchain",
|
||||||
"old_password": "Gammelt passord",
|
"old_password": "Gammelt passord",
|
||||||
|
@ -1291,7 +1283,6 @@
|
||||||
"password_reset_leading": "Hvis du ikke mottar en e-post snart, sjekk at e-postadressen du skrev inn er riktig, sjekk søppelpost-mappen eller ta kontakt med kundeservice hvis problemet vedvarer.",
|
"password_reset_leading": "Hvis du ikke mottar en e-post snart, sjekk at e-postadressen du skrev inn er riktig, sjekk søppelpost-mappen eller ta kontakt med kundeservice hvis problemet vedvarer.",
|
||||||
"password_updated": "Passord oppdatert!",
|
"password_updated": "Passord oppdatert!",
|
||||||
"pending_payment": "Venter på betaling",
|
"pending_payment": "Venter på betaling",
|
||||||
"confirmation_page_rainbow": "Token vokter hendelsen din med tokens eller NFT-er på Ethereum, Polygon og mer.",
|
|
||||||
"not_on_cal": "Ikke på {{appName}}",
|
"not_on_cal": "Ikke på {{appName}}",
|
||||||
"no_calendar_installed": "Ingen kalender installert",
|
"no_calendar_installed": "Ingen kalender installert",
|
||||||
"no_calendar_installed_description": "Du har ikke koblet til noen av kalenderne dine ennå",
|
"no_calendar_installed_description": "Du har ikke koblet til noen av kalenderne dine ennå",
|
||||||
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "Utworzono {{eventTypeTitle}} typ wydarzenia pomyślnie",
|
"event_type_created_successfully": "Utworzono {{eventTypeTitle}} typ wydarzenia pomyślnie",
|
||||||
"event_type_updated_successfully": "{{eventTypeTitle}} typ wydarzenia został pomyślnie zaktualizowany",
|
"event_type_updated_successfully": "{{eventTypeTitle}} typ wydarzenia został pomyślnie zaktualizowany",
|
||||||
"event_type_deleted_successfully": "Typ wydarzenia usunięty pomyślnie",
|
"event_type_deleted_successfully": "Typ wydarzenia usunięty pomyślnie",
|
||||||
"web3_metamask_added": "Metamask został pomyślnie dodany",
|
|
||||||
"web3_metamask_disconnected": "Metamask został pomyślnie rozłączony",
|
|
||||||
"hours": "Godziny",
|
"hours": "Godziny",
|
||||||
"your_email": "Twój e-mail",
|
"your_email": "Twój e-mail",
|
||||||
"change_avatar": "Zmień Awatar",
|
"change_avatar": "Zmień Awatar",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "Zainstalowane",
|
"installed_one": "Zainstalowane",
|
||||||
"installed_other": "Zainstalowano {{count}}",
|
"installed_other": "Zainstalowano {{count}}",
|
||||||
"verify_wallet": "Zweryfikuj portfel",
|
"verify_wallet": "Zweryfikuj portfel",
|
||||||
"connect_metamask": "Podłącz Metamask",
|
|
||||||
"create_events_on": "Utwórz wydarzenia w",
|
"create_events_on": "Utwórz wydarzenia w",
|
||||||
"enterprise_license": "To funkcja dla przedsiębiorstw",
|
"enterprise_license": "To funkcja dla przedsiębiorstw",
|
||||||
"enterprise_license_description": "Aby włączyć tę funkcję, uzyskaj klucz wdrożenia na konsoli {{consoleUrl}} i dodaj go do swojego pliku .env jako CALCOM_LICENSE_KEY. Jeśli Twój zespół ma już licencję, napisz na adres {{supportMail}}, aby uzyskać pomoc.",
|
"enterprise_license_description": "Aby włączyć tę funkcję, uzyskaj klucz wdrożenia na konsoli {{consoleUrl}} i dodaj go do swojego pliku .env jako CALCOM_LICENSE_KEY. Jeśli Twój zespół ma już licencję, napisz na adres {{supportMail}}, aby uzyskać pomoc.",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "Prześlij",
|
"upload": "Prześlij",
|
||||||
"add_profile_photo": "Dodaj zdjęcie profilowe",
|
"add_profile_photo": "Dodaj zdjęcie profilowe",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "Ten typ wydarzenia jest dostępny tylko dla posiadaczy tokenów.",
|
|
||||||
"rainbow_connect_wallet_gate": "Połącz swój portfel, jeśli posiadasz <1>{{name}}</1> (<3>{{symbol}}</3>).",
|
|
||||||
"rainbow_insufficient_balance": "Połączony portfel nie zawiera wystarczającej ilości <1>{{symbol}}</1>.",
|
|
||||||
"rainbow_sign_message_request": "Podpisz prośbę o wiadomość w Twoim portfelu.",
|
|
||||||
"rainbow_signature_error": "Podczas żądania podpisu z Twojego portfela wystąpił błąd.",
|
|
||||||
"token_address": "Adres tokena",
|
"token_address": "Adres tokena",
|
||||||
"blockchain": "Blockchain",
|
"blockchain": "Blockchain",
|
||||||
"old_password": "Stare hasło",
|
"old_password": "Stare hasło",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "Hasło zostało zaktualizowane!",
|
"password_updated": "Hasło zostało zaktualizowane!",
|
||||||
"pending_payment": "Płatność w toku",
|
"pending_payment": "Płatność w toku",
|
||||||
"pending_invites": "Oczekujące zaproszenia",
|
"pending_invites": "Oczekujące zaproszenia",
|
||||||
"confirmation_page_rainbow": "Udostępnij Twoje wydarzenie tylko posiadaczom tokenów lub NFT w blockchainach Ethereum, Polygon i innych.",
|
|
||||||
"not_on_cal": "Niedostępne na {{appName}}",
|
"not_on_cal": "Niedostępne na {{appName}}",
|
||||||
"no_calendar_installed": "Brak zainstalowanego kalendarza",
|
"no_calendar_installed": "Brak zainstalowanego kalendarza",
|
||||||
"no_calendar_installed_description": "Nie połączono jeszcze żadnego kalendarza.",
|
"no_calendar_installed_description": "Nie połączono jeszcze żadnego kalendarza.",
|
||||||
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "{{eventTypeTitle}} evento criado com sucesso",
|
"event_type_created_successfully": "{{eventTypeTitle}} evento criado com sucesso",
|
||||||
"event_type_updated_successfully": "Tipo de evento atualizado com sucesso",
|
"event_type_updated_successfully": "Tipo de evento atualizado com sucesso",
|
||||||
"event_type_deleted_successfully": "Tipo de evento removido com sucesso",
|
"event_type_deleted_successfully": "Tipo de evento removido com sucesso",
|
||||||
"web3_metamask_added": "Metamask adicionado com êxito",
|
|
||||||
"web3_metamask_disconnected": "Metamask desconectado com êxito",
|
|
||||||
"hours": "Horas",
|
"hours": "Horas",
|
||||||
"your_email": "Seu Email",
|
"your_email": "Seu Email",
|
||||||
"change_avatar": "Alterar Avatar",
|
"change_avatar": "Alterar Avatar",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "Instalado",
|
"installed_one": "Instalado",
|
||||||
"installed_other": "{{count}} instalado(s)",
|
"installed_other": "{{count}} instalado(s)",
|
||||||
"verify_wallet": "Verificar carteira",
|
"verify_wallet": "Verificar carteira",
|
||||||
"connect_metamask": "Conecte o Metamask",
|
|
||||||
"create_events_on": "Criar eventos em",
|
"create_events_on": "Criar eventos em",
|
||||||
"enterprise_license": "Este não é um recurso corporativo",
|
"enterprise_license": "Este não é um recurso corporativo",
|
||||||
"enterprise_license_description": "Para ativar este recurso, obtenha uma chave de desenvolvimento no console {{consoleUrl}} e adicione ao seu .env como CALCOM_LICENSE_KEY. Caso sua equipe já tenha uma licença, entre em contato com {{supportMail}} para obter ajuda.",
|
"enterprise_license_description": "Para ativar este recurso, obtenha uma chave de desenvolvimento no console {{consoleUrl}} e adicione ao seu .env como CALCOM_LICENSE_KEY. Caso sua equipe já tenha uma licença, entre em contato com {{supportMail}} para obter ajuda.",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "Enviar",
|
"upload": "Enviar",
|
||||||
"add_profile_photo": "Adicionar foto do perfil",
|
"add_profile_photo": "Adicionar foto do perfil",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "Este tipo de evento é o token escolhido.",
|
|
||||||
"rainbow_connect_wallet_gate": "Conectar sua carteira se você tiver <1>{{name}}</1> (<3>{{symbol}}</3>).",
|
|
||||||
"rainbow_insufficient_balance": "Sua carteira conectada não contém <1>{{symbol}}</1> suficiente.",
|
|
||||||
"rainbow_sign_message_request": "Assine a solicitação de mensagem na sua carteira.",
|
|
||||||
"rainbow_signature_error": "Erro ao solicitar a assinatura da sua carteira.",
|
|
||||||
"token_address": "Endereço do Token",
|
"token_address": "Endereço do Token",
|
||||||
"blockchain": "Blockchain",
|
"blockchain": "Blockchain",
|
||||||
"old_password": "Senha antiga",
|
"old_password": "Senha antiga",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "Senha atualizada!",
|
"password_updated": "Senha atualizada!",
|
||||||
"pending_payment": "Pagamento pendente",
|
"pending_payment": "Pagamento pendente",
|
||||||
"pending_invites": "Convites pendentes",
|
"pending_invites": "Convites pendentes",
|
||||||
"confirmation_page_rainbow": "Proteja seu evento com tokens ou NFTs no Ethereum, Polygon e muito mais.",
|
|
||||||
"not_on_cal": "Não está na {{appName}}",
|
"not_on_cal": "Não está na {{appName}}",
|
||||||
"no_calendar_installed": "Nenhum calendário instalado",
|
"no_calendar_installed": "Nenhum calendário instalado",
|
||||||
"no_calendar_installed_description": "Você ainda não conectou nenhum de seus calendários",
|
"no_calendar_installed_description": "Você ainda não conectou nenhum de seus calendários",
|
||||||
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "Tipo de evento {{eventTypeTitle}} criado com sucesso",
|
"event_type_created_successfully": "Tipo de evento {{eventTypeTitle}} criado com sucesso",
|
||||||
"event_type_updated_successfully": "Tipo de evento atualizado com sucesso",
|
"event_type_updated_successfully": "Tipo de evento atualizado com sucesso",
|
||||||
"event_type_deleted_successfully": "Tipo de evento eliminado com sucesso",
|
"event_type_deleted_successfully": "Tipo de evento eliminado com sucesso",
|
||||||
"web3_metamask_added": "Metamask adicionada com sucesso",
|
|
||||||
"web3_metamask_disconnected": "Metamask desligada com sucesso",
|
|
||||||
"hours": "Horas",
|
"hours": "Horas",
|
||||||
"your_email": "Seu Email",
|
"your_email": "Seu Email",
|
||||||
"change_avatar": "Alterar Avatar",
|
"change_avatar": "Alterar Avatar",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "Instalado",
|
"installed_one": "Instalado",
|
||||||
"installed_other": "{{count}} instaladas",
|
"installed_other": "{{count}} instaladas",
|
||||||
"verify_wallet": "Verificar carteira",
|
"verify_wallet": "Verificar carteira",
|
||||||
"connect_metamask": "Ligar Metamask",
|
|
||||||
"create_events_on": "Criar eventos em:",
|
"create_events_on": "Criar eventos em:",
|
||||||
"enterprise_license": "Esta é uma funcionalidade empresarial",
|
"enterprise_license": "Esta é uma funcionalidade empresarial",
|
||||||
"enterprise_license_description": "Para ativar esta funcionalidade, obtenha uma chave de instalação na consola {{consoleUrl}} e adicione-a ao seu .env como CALCOM_LICENSE_KEY. Se a sua equipa já tem uma licença, entre em contacto com {{supportMail}} para obter ajuda.",
|
"enterprise_license_description": "Para ativar esta funcionalidade, obtenha uma chave de instalação na consola {{consoleUrl}} e adicione-a ao seu .env como CALCOM_LICENSE_KEY. Se a sua equipa já tem uma licença, entre em contacto com {{supportMail}} para obter ajuda.",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "Carregar",
|
"upload": "Carregar",
|
||||||
"add_profile_photo": "Adicionar imagem de perfil",
|
"add_profile_photo": "Adicionar imagem de perfil",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "Este tipo de evento é protegido por token.",
|
|
||||||
"rainbow_connect_wallet_gate": "Associe a sua carteira se possuir <1>{{name}}</1> (<3>{{symbol}}</3>).",
|
|
||||||
"rainbow_insufficient_balance": "A sua carteira associada não contém <1>{{symbol}}</1> suficientes.",
|
|
||||||
"rainbow_sign_message_request": "Assine o pedido de mensagem na sua carteira.",
|
|
||||||
"rainbow_signature_error": "Erro ao solicitar a assinatura da sua carteira.",
|
|
||||||
"token_address": "Endereço do Token",
|
"token_address": "Endereço do Token",
|
||||||
"blockchain": "Blockchain",
|
"blockchain": "Blockchain",
|
||||||
"old_password": "Palavra-passe antiga",
|
"old_password": "Palavra-passe antiga",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "Palavra-passe atualizada!",
|
"password_updated": "Palavra-passe atualizada!",
|
||||||
"pending_payment": "Pagamento pendente",
|
"pending_payment": "Pagamento pendente",
|
||||||
"pending_invites": "Convites pendentes",
|
"pending_invites": "Convites pendentes",
|
||||||
"confirmation_page_rainbow": "Controle o acesso ao seu evento com tokens ou NFT na Ethereum, Polygon e muito mais.",
|
|
||||||
"not_on_cal": "Não existe em {{appName}}",
|
"not_on_cal": "Não existe em {{appName}}",
|
||||||
"no_calendar_installed": "Nenhum calendário instalado",
|
"no_calendar_installed": "Nenhum calendário instalado",
|
||||||
"no_calendar_installed_description": "Ainda não associou nenhum dos seus calendários",
|
"no_calendar_installed_description": "Ainda não associou nenhum dos seus calendários",
|
||||||
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "{{eventTypeTitle}} tip de eveniment creat cu succes",
|
"event_type_created_successfully": "{{eventTypeTitle}} tip de eveniment creat cu succes",
|
||||||
"event_type_updated_successfully": "{{eventTypeTitle}} tip de eveniment actualizat cu succes",
|
"event_type_updated_successfully": "{{eventTypeTitle}} tip de eveniment actualizat cu succes",
|
||||||
"event_type_deleted_successfully": "Tipul de eveniment șters cu succes",
|
"event_type_deleted_successfully": "Tipul de eveniment șters cu succes",
|
||||||
"web3_metamask_added": "Metamask adăugat cu succes",
|
|
||||||
"web3_metamask_disconnected": "Metamask deconectat cu succes",
|
|
||||||
"hours": "Ore",
|
"hours": "Ore",
|
||||||
"your_email": "E-mailul tău",
|
"your_email": "E-mailul tău",
|
||||||
"change_avatar": "Schimbă avatarul",
|
"change_avatar": "Schimbă avatarul",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "Instalat",
|
"installed_one": "Instalat",
|
||||||
"installed_other": "{{count}} instalată/instalate",
|
"installed_other": "{{count}} instalată/instalate",
|
||||||
"verify_wallet": "Verificați portofelul",
|
"verify_wallet": "Verificați portofelul",
|
||||||
"connect_metamask": "Conectați Metamask",
|
|
||||||
"create_events_on": "Creați evenimente în",
|
"create_events_on": "Creați evenimente în",
|
||||||
"enterprise_license": "Aceasta este o caracteristică de întreprindere",
|
"enterprise_license": "Aceasta este o caracteristică de întreprindere",
|
||||||
"enterprise_license_description": "Pentru a activa această caracteristică, obține o cheie de implementare la consola {{consoleUrl}} și adaug-o la .env ca CALCOM_LICENSE_KEY. Dacă echipa ta are deja o licență, te rugăm să contactezi {{supportMail}} pentru ajutor.",
|
"enterprise_license_description": "Pentru a activa această caracteristică, obține o cheie de implementare la consola {{consoleUrl}} și adaug-o la .env ca CALCOM_LICENSE_KEY. Dacă echipa ta are deja o licență, te rugăm să contactezi {{supportMail}} pentru ajutor.",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "Încărcare",
|
"upload": "Încărcare",
|
||||||
"add_profile_photo": "Adăugați poză de profil",
|
"add_profile_photo": "Adăugați poză de profil",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "Accesul la acest tip de eveniment este posibil cu tokenuri.",
|
|
||||||
"rainbow_connect_wallet_gate": "Conectați-vă portofelul dacă dețineți <1>{{name}}</1> (<3>{{symbol}}</3>).",
|
|
||||||
"rainbow_insufficient_balance": "Portofelul dvs. conectat nu conține suficient <1>{{symbol}}</1>.",
|
|
||||||
"rainbow_sign_message_request": "Semnați solicitarea de mesaj în portofel.",
|
|
||||||
"rainbow_signature_error": "Eroare la solicitarea semnăturii din portofel.",
|
|
||||||
"token_address": "Adresă token",
|
"token_address": "Adresă token",
|
||||||
"blockchain": "Blockchain",
|
"blockchain": "Blockchain",
|
||||||
"old_password": "Parola veche",
|
"old_password": "Parola veche",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "Parolă actualizată!",
|
"password_updated": "Parolă actualizată!",
|
||||||
"pending_payment": "Plată în așteptare",
|
"pending_payment": "Plată în așteptare",
|
||||||
"pending_invites": "Invitații în așteptare",
|
"pending_invites": "Invitații în așteptare",
|
||||||
"confirmation_page_rainbow": "Restricționați accesul la evenimentul dvs. cu tokenuri sau NFT-uri pe Ethereum, Polygon și altele.",
|
|
||||||
"not_on_cal": "Nu este pe {{appName}}",
|
"not_on_cal": "Nu este pe {{appName}}",
|
||||||
"no_calendar_installed": "Niciun calendar instalat",
|
"no_calendar_installed": "Niciun calendar instalat",
|
||||||
"no_calendar_installed_description": "Încă nu v-ați conectat niciunul dintre calendare",
|
"no_calendar_installed_description": "Încă nu v-ați conectat niciunul dintre calendare",
|
||||||
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "{{eventTypeTitle}} тип мероприятия успешно создан",
|
"event_type_created_successfully": "{{eventTypeTitle}} тип мероприятия успешно создан",
|
||||||
"event_type_updated_successfully": "Тип события {{eventTypeTitle}} успешно обновлен",
|
"event_type_updated_successfully": "Тип события {{eventTypeTitle}} успешно обновлен",
|
||||||
"event_type_deleted_successfully": "Тип события успешно удален",
|
"event_type_deleted_successfully": "Тип события успешно удален",
|
||||||
"web3_metamask_added": "Metamask успешно добавлен",
|
|
||||||
"web3_metamask_disconnected": "Metamask успешно отключен",
|
|
||||||
"hours": "Часы",
|
"hours": "Часы",
|
||||||
"your_email": "Ваш адрес электронной почты",
|
"your_email": "Ваш адрес электронной почты",
|
||||||
"change_avatar": "Изменить аватар",
|
"change_avatar": "Изменить аватар",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "Установлено",
|
"installed_one": "Установлено",
|
||||||
"installed_other": "Установок: {{count}}",
|
"installed_other": "Установок: {{count}}",
|
||||||
"verify_wallet": "Подтвердить кошелек",
|
"verify_wallet": "Подтвердить кошелек",
|
||||||
"connect_metamask": "Подключить Metamask",
|
|
||||||
"create_events_on": "Создавать события в календаре:",
|
"create_events_on": "Создавать события в календаре:",
|
||||||
"enterprise_license": "Это функция корпоративного тарифного плана",
|
"enterprise_license": "Это функция корпоративного тарифного плана",
|
||||||
"enterprise_license_description": "Чтобы включить эту функцию, получите ключ развертывания на консоли {{consoleUrl}} и добавьте его в .env как CALCOM_LICENSE_KEY. Если у вашей команды уже есть лицензия, пожалуйста, обратитесь за помощью в {{supportMail}}.",
|
"enterprise_license_description": "Чтобы включить эту функцию, получите ключ развертывания на консоли {{consoleUrl}} и добавьте его в .env как CALCOM_LICENSE_KEY. Если у вашей команды уже есть лицензия, пожалуйста, обратитесь за помощью в {{supportMail}}.",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "Загрузить",
|
"upload": "Загрузить",
|
||||||
"add_profile_photo": "Добавить фото профиля",
|
"add_profile_photo": "Добавить фото профиля",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "Этот тип событий использует токены для контроля доступа.",
|
|
||||||
"rainbow_connect_wallet_gate": "Подключите кошелек, если у вас есть <1>{{name}}</1> (<3>{{symbol}}</3>).",
|
|
||||||
"rainbow_insufficient_balance": "В подключенном кошельке недостаточное количество <1>{{symbol}}</1>.",
|
|
||||||
"rainbow_sign_message_request": "Подпишите сообщение с запросом, используя свой кошелек.",
|
|
||||||
"rainbow_signature_error": "Ошибка при запросе подписи от вашего кошелька.",
|
|
||||||
"token_address": "Адрес токена",
|
"token_address": "Адрес токена",
|
||||||
"blockchain": "Блокчейн",
|
"blockchain": "Блокчейн",
|
||||||
"old_password": "Старый пароль",
|
"old_password": "Старый пароль",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "Пароль обновлен.",
|
"password_updated": "Пароль обновлен.",
|
||||||
"pending_payment": "Ожидает оплаты",
|
"pending_payment": "Ожидает оплаты",
|
||||||
"pending_invites": "Приглашения, ожидающие ответа",
|
"pending_invites": "Приглашения, ожидающие ответа",
|
||||||
"confirmation_page_rainbow": "Используйте токены или NFT в Ethereum, Polygon и других сетях для ограничения доступа к мероприятиям.",
|
|
||||||
"not_on_cal": "Не является пользователем {{appName}}",
|
"not_on_cal": "Не является пользователем {{appName}}",
|
||||||
"no_calendar_installed": "Нет установленных календарей",
|
"no_calendar_installed": "Нет установленных календарей",
|
||||||
"no_calendar_installed_description": "Вы еще не подключили ни один календарь",
|
"no_calendar_installed_description": "Вы еще не подключили ни один календарь",
|
||||||
|
|
|
@ -634,8 +634,6 @@
|
||||||
"event_type_created_successfully": "{{eventTypeTitle}} tip događaja uspešno napravljen",
|
"event_type_created_successfully": "{{eventTypeTitle}} tip događaja uspešno napravljen",
|
||||||
"event_type_updated_successfully": "{{eventTypeTitle}} tip događaja uspešno ažuriran",
|
"event_type_updated_successfully": "{{eventTypeTitle}} tip događaja uspešno ažuriran",
|
||||||
"event_type_deleted_successfully": "Tip događaja uspešno obrisan",
|
"event_type_deleted_successfully": "Tip događaja uspešno obrisan",
|
||||||
"web3_metamask_added": "Metamask uspešno dodat",
|
|
||||||
"web3_metamask_disconnected": "Metamask uspešno diskonektovan",
|
|
||||||
"hours": "Sati",
|
"hours": "Sati",
|
||||||
"your_email": "Vaša E-pošta",
|
"your_email": "Vaša E-pošta",
|
||||||
"change_avatar": "Promenite Avatara",
|
"change_avatar": "Promenite Avatara",
|
||||||
|
@ -876,7 +874,6 @@
|
||||||
"installed_one": "Instalirano",
|
"installed_one": "Instalirano",
|
||||||
"installed_other": "Instalirano {{count}} puta",
|
"installed_other": "Instalirano {{count}} puta",
|
||||||
"verify_wallet": "Verifikuj Wallet",
|
"verify_wallet": "Verifikuj Wallet",
|
||||||
"connect_metamask": "Poveži Metamask",
|
|
||||||
"create_events_on": "Kreiraj događaje na",
|
"create_events_on": "Kreiraj događaje na",
|
||||||
"enterprise_license": "Ovo je enterprise funkcija",
|
"enterprise_license": "Ovo je enterprise funkcija",
|
||||||
"enterprise_license_description": "Da biste omogućili ovu funkciju, nabavite ključ za primenu na {{consoleUrl}} konzoli i dodajte ga u svoj .env kao CALCOM_LICENCE_KEY. Ako vaš tim već ima licencu, obratite se na {{supportMail}} za pomoć.",
|
"enterprise_license_description": "Da biste omogućili ovu funkciju, nabavite ključ za primenu na {{consoleUrl}} konzoli i dodajte ga u svoj .env kao CALCOM_LICENCE_KEY. Ako vaš tim već ima licencu, obratite se na {{supportMail}} za pomoć.",
|
||||||
|
@ -1232,11 +1229,6 @@
|
||||||
"upload": "Otpremi",
|
"upload": "Otpremi",
|
||||||
"add_profile_photo": "Dodajte profilnu fotografiju",
|
"add_profile_photo": "Dodajte profilnu fotografiju",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "Za ovaj tip događaja je potreban token.",
|
|
||||||
"rainbow_connect_wallet_gate": "Povežite svoj novčanik, ako ga imate <1>{{name}}</1> (<3>{{symbol}}</3>).",
|
|
||||||
"rainbow_insufficient_balance": "Vaš povezani novčanik ne sadrži dovoljno <1>{{symbol}}</1>.",
|
|
||||||
"rainbow_sign_message_request": "Potpišite poruku sa zahtevom u vašem novčaniku.",
|
|
||||||
"rainbow_signature_error": "Greška prilikom zahteva potpisa iz vašeg novčanika.",
|
|
||||||
"token_address": "Adresa tokena",
|
"token_address": "Adresa tokena",
|
||||||
"blockchain": "Lanac blokova",
|
"blockchain": "Lanac blokova",
|
||||||
"old_password": "Stara lozinka",
|
"old_password": "Stara lozinka",
|
||||||
|
@ -1382,7 +1374,6 @@
|
||||||
"password_updated": "Lozinka je ažurirana!",
|
"password_updated": "Lozinka je ažurirana!",
|
||||||
"pending_payment": "Čeka se na plaćanje",
|
"pending_payment": "Čeka se na plaćanje",
|
||||||
"pending_invites": "Pozivi na čekanju",
|
"pending_invites": "Pozivi na čekanju",
|
||||||
"confirmation_page_rainbow": "Zaštitite vaš događaj tokenom ili NFT-om na Ethereum-u, Polygon-u, itd.",
|
|
||||||
"not_on_cal": "Nije na {{appName}}",
|
"not_on_cal": "Nije na {{appName}}",
|
||||||
"no_calendar_installed": "Nije instaliran kalendar",
|
"no_calendar_installed": "Nije instaliran kalendar",
|
||||||
"no_calendar_installed_description": "Još niste povezali nijedan od svojih kalendara",
|
"no_calendar_installed_description": "Još niste povezali nijedan od svojih kalendara",
|
||||||
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "{{eventTypeTitle}} har skapats",
|
"event_type_created_successfully": "{{eventTypeTitle}} har skapats",
|
||||||
"event_type_updated_successfully": "{{eventTypeTitle}} har uppdaterats",
|
"event_type_updated_successfully": "{{eventTypeTitle}} har uppdaterats",
|
||||||
"event_type_deleted_successfully": "Händelsetypen har raderats",
|
"event_type_deleted_successfully": "Händelsetypen har raderats",
|
||||||
"web3_metamask_added": "Metamask tillagd",
|
|
||||||
"web3_metamask_disconnected": "Metamask bortkopplad",
|
|
||||||
"hours": "Timmar",
|
"hours": "Timmar",
|
||||||
"your_email": "Din e-postadress",
|
"your_email": "Din e-postadress",
|
||||||
"change_avatar": "Ändra avatar",
|
"change_avatar": "Ändra avatar",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "Installerad",
|
"installed_one": "Installerad",
|
||||||
"installed_other": "{{count}} installerade",
|
"installed_other": "{{count}} installerade",
|
||||||
"verify_wallet": "Verifiera plånbok",
|
"verify_wallet": "Verifiera plånbok",
|
||||||
"connect_metamask": "Anslut Metamask",
|
|
||||||
"create_events_on": "Skapa händelser i",
|
"create_events_on": "Skapa händelser i",
|
||||||
"enterprise_license": "Det här är en företagsfunktion",
|
"enterprise_license": "Det här är en företagsfunktion",
|
||||||
"enterprise_license_description": "För att aktivera den här funktionen hämtar du en distributionsnyckel i konsolen {{consoleUrl}} och lägger till den i din .env som CALCOM_LICENSE_KEY. Om ditt team redan har en licens kan du kontakta {{supportMail}} för att få hjälp.",
|
"enterprise_license_description": "För att aktivera den här funktionen hämtar du en distributionsnyckel i konsolen {{consoleUrl}} och lägger till den i din .env som CALCOM_LICENSE_KEY. Om ditt team redan har en licens kan du kontakta {{supportMail}} för att få hjälp.",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "Ladda upp",
|
"upload": "Ladda upp",
|
||||||
"add_profile_photo": "Lägg till profilfoto",
|
"add_profile_photo": "Lägg till profilfoto",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "Denna händelsetyp kräver token.",
|
|
||||||
"rainbow_connect_wallet_gate": "Anslut din plånbok om du äger <1>{{name}}</1> (<3>{{symbol}}</3>).",
|
|
||||||
"rainbow_insufficient_balance": "Din anslutna plånbok innehåller inte tillräckligt med <1>{{symbol}}</1>.",
|
|
||||||
"rainbow_sign_message_request": "Signera meddelandebegäran på din plånbok.",
|
|
||||||
"rainbow_signature_error": "Fel vid begäran av signatur från din plånbok.",
|
|
||||||
"token_address": "Tokenadress",
|
"token_address": "Tokenadress",
|
||||||
"blockchain": "Blockkedja",
|
"blockchain": "Blockkedja",
|
||||||
"old_password": "Gammalt lösenord",
|
"old_password": "Gammalt lösenord",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "Lösenord uppdaterat!",
|
"password_updated": "Lösenord uppdaterat!",
|
||||||
"pending_payment": "Väntande betalning",
|
"pending_payment": "Väntande betalning",
|
||||||
"pending_invites": "Väntande inbjudningar",
|
"pending_invites": "Väntande inbjudningar",
|
||||||
"confirmation_page_rainbow": "Tokenskydda din händelse med tokens eller NFT:er på Ethereum, Polygon med mera.",
|
|
||||||
"not_on_cal": "Inte på {{appName}}",
|
"not_on_cal": "Inte på {{appName}}",
|
||||||
"no_calendar_installed": "Ingen kalender installerad",
|
"no_calendar_installed": "Ingen kalender installerad",
|
||||||
"no_calendar_installed_description": "Du har ännu inte anslutit någon av dina kalendrar",
|
"no_calendar_installed_description": "Du har ännu inte anslutit någon av dina kalendrar",
|
||||||
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "{{eventTypeTitle}} etkinlik türü başarıyla oluşturuldu",
|
"event_type_created_successfully": "{{eventTypeTitle}} etkinlik türü başarıyla oluşturuldu",
|
||||||
"event_type_updated_successfully": "{{eventTypeTitle}} etkinlik türü başarıyla güncellendi",
|
"event_type_updated_successfully": "{{eventTypeTitle}} etkinlik türü başarıyla güncellendi",
|
||||||
"event_type_deleted_successfully": "Etkinlik türü başarıyla silindi",
|
"event_type_deleted_successfully": "Etkinlik türü başarıyla silindi",
|
||||||
"web3_metamask_added": "Metamask başarıyla eklendi",
|
|
||||||
"web3_metamask_disconnected": "Metamask bağlantısı başarıyla kesildi",
|
|
||||||
"hours": "Saat",
|
"hours": "Saat",
|
||||||
"your_email": "E-postanız",
|
"your_email": "E-postanız",
|
||||||
"change_avatar": "Avatarı değiştir",
|
"change_avatar": "Avatarı değiştir",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "Yüklendi",
|
"installed_one": "Yüklendi",
|
||||||
"installed_other": "{{count}} yüklü",
|
"installed_other": "{{count}} yüklü",
|
||||||
"verify_wallet": "Cüzdanı Doğrula",
|
"verify_wallet": "Cüzdanı Doğrula",
|
||||||
"connect_metamask": "MetaMask'i Bağla",
|
|
||||||
"create_events_on": "Şurada etkinlik oluşturun:",
|
"create_events_on": "Şurada etkinlik oluşturun:",
|
||||||
"enterprise_license": "Bu bir kurumsal özelliktir",
|
"enterprise_license": "Bu bir kurumsal özelliktir",
|
||||||
"enterprise_license_description": "Bu özelliği etkinleştirmek için {{consoleUrl}} konsolundan bir dağıtım anahtarı alın ve bunu .env dosyanıza CALCOM_LICENSE_KEY olarak ekleyin. Ekibinizin zaten bir lisansı varsa yardım için lütfen {{supportMail}} adresinden iletişime geçin.",
|
"enterprise_license_description": "Bu özelliği etkinleştirmek için {{consoleUrl}} konsolundan bir dağıtım anahtarı alın ve bunu .env dosyanıza CALCOM_LICENSE_KEY olarak ekleyin. Ekibinizin zaten bir lisansı varsa yardım için lütfen {{supportMail}} adresinden iletişime geçin.",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "Yükle",
|
"upload": "Yükle",
|
||||||
"add_profile_photo": "Profil fotoğrafı ekleyin",
|
"add_profile_photo": "Profil fotoğrafı ekleyin",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "Bu etkinlik türü token korumalıdır.",
|
|
||||||
"rainbow_connect_wallet_gate": "<1>{{name}}</1> (<3>{{symbol}}</3>) sahibiyseniz cüzdanınızı bağlayın.",
|
|
||||||
"rainbow_insufficient_balance": "Bağlı cüzdanınızda yeterli <1>{{symbol}}</1> yok.",
|
|
||||||
"rainbow_sign_message_request": "Cüzdanınızdaki mesaj isteğini imzalayın.",
|
|
||||||
"rainbow_signature_error": "Cüzdanınızdan imza istenirken bir hata oluştu.",
|
|
||||||
"token_address": "Token Adresi",
|
"token_address": "Token Adresi",
|
||||||
"blockchain": "Blok zinciri",
|
"blockchain": "Blok zinciri",
|
||||||
"old_password": "Eski şifre",
|
"old_password": "Eski şifre",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "Şifre güncellendi!",
|
"password_updated": "Şifre güncellendi!",
|
||||||
"pending_payment": "Bekleyen ödeme",
|
"pending_payment": "Bekleyen ödeme",
|
||||||
"pending_invites": "Bekleyen Davetler",
|
"pending_invites": "Bekleyen Davetler",
|
||||||
"confirmation_page_rainbow": "Ethereum, Polygon ve diğer token'lar veya NFT ile etkinliğinize token kapısı ekleyin.",
|
|
||||||
"not_on_cal": "{{appName}}'da değil",
|
"not_on_cal": "{{appName}}'da değil",
|
||||||
"no_calendar_installed": "Yüklü takvim yok",
|
"no_calendar_installed": "Yüklü takvim yok",
|
||||||
"no_calendar_installed_description": "Henüz hiçbir takviminizi bağlamadınız",
|
"no_calendar_installed_description": "Henüz hiçbir takviminizi bağlamadınız",
|
||||||
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "Тип заходу «{{eventTypeTitle}}» створено",
|
"event_type_created_successfully": "Тип заходу «{{eventTypeTitle}}» створено",
|
||||||
"event_type_updated_successfully": "Тип заходу «{{eventTypeTitle}}» оновлено",
|
"event_type_updated_successfully": "Тип заходу «{{eventTypeTitle}}» оновлено",
|
||||||
"event_type_deleted_successfully": "Тип заходу видалено",
|
"event_type_deleted_successfully": "Тип заходу видалено",
|
||||||
"web3_metamask_added": "Metamask додано",
|
|
||||||
"web3_metamask_disconnected": "Metamask від’єднано",
|
|
||||||
"hours": "Години",
|
"hours": "Години",
|
||||||
"your_email": "Ваша ел. адреса",
|
"your_email": "Ваша ел. адреса",
|
||||||
"change_avatar": "Змінити аватар",
|
"change_avatar": "Змінити аватар",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "Установлено",
|
"installed_one": "Установлено",
|
||||||
"installed_other": "Установлено {{count}}",
|
"installed_other": "Установлено {{count}}",
|
||||||
"verify_wallet": "Пройдіть перевірку гаманця",
|
"verify_wallet": "Пройдіть перевірку гаманця",
|
||||||
"connect_metamask": "Підключіть Metamask",
|
|
||||||
"create_events_on": "Створюйте заходи в календарі",
|
"create_events_on": "Створюйте заходи в календарі",
|
||||||
"enterprise_license": "Це корпоративна функція",
|
"enterprise_license": "Це корпоративна функція",
|
||||||
"enterprise_license_description": "Щоб увімкнути цю функцію, отримайте ключ розгортання в консолі {{consoleUrl}} і додайте його у свій файл .env як CALCOM_LICENSE_KEY. Якщо у вашої команди вже є ліцензія, зверніться по допомогу за адресою {{supportMail}}.",
|
"enterprise_license_description": "Щоб увімкнути цю функцію, отримайте ключ розгортання в консолі {{consoleUrl}} і додайте його у свій файл .env як CALCOM_LICENSE_KEY. Якщо у вашої команди вже є ліцензія, зверніться по допомогу за адресою {{supportMail}}.",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "Передати",
|
"upload": "Передати",
|
||||||
"add_profile_photo": "Додати фото профілю",
|
"add_profile_photo": "Додати фото профілю",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "Цей тип заходу доступний тільки для власників токенів.",
|
|
||||||
"rainbow_connect_wallet_gate": "Якщо у вас є <1>{{name}}</1> (<3>{{symbol}}</3>), підключіть свій гаманець.",
|
|
||||||
"rainbow_insufficient_balance": "У вашому підключеному гаманці бракує <1>{{symbol}}</1>.",
|
|
||||||
"rainbow_sign_message_request": "Підпишіть запит повідомлення у своєму гаманці.",
|
|
||||||
"rainbow_signature_error": "Не вдалося надіслати запит підпису з вашого гаманця.",
|
|
||||||
"token_address": "Адреса токена",
|
"token_address": "Адреса токена",
|
||||||
"blockchain": "Блокчейн",
|
"blockchain": "Блокчейн",
|
||||||
"old_password": "Старий пароль",
|
"old_password": "Старий пароль",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "Пароль оновлено!",
|
"password_updated": "Пароль оновлено!",
|
||||||
"pending_payment": "Очікується оплата",
|
"pending_payment": "Очікується оплата",
|
||||||
"pending_invites": "Нерозглянуті запрошення",
|
"pending_invites": "Нерозглянуті запрошення",
|
||||||
"confirmation_page_rainbow": "Увімкніть доступ до свого заходу тільки для власників звичайних або невзаємозамінних токенів Ethereum, Polygon тощо.",
|
|
||||||
"not_on_cal": "Не на {{appName}}",
|
"not_on_cal": "Не на {{appName}}",
|
||||||
"no_calendar_installed": "Немає встановлених календарів",
|
"no_calendar_installed": "Немає встановлених календарів",
|
||||||
"no_calendar_installed_description": "Ви ще не підключили свої календарі",
|
"no_calendar_installed_description": "Ви ще не підключили свої календарі",
|
||||||
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "Đã tạo thành công loại sự kiện {{eventTypeTitle}}",
|
"event_type_created_successfully": "Đã tạo thành công loại sự kiện {{eventTypeTitle}}",
|
||||||
"event_type_updated_successfully": "Đã cập nhật thành công loại sự kiện {{eventTypeTitle}}",
|
"event_type_updated_successfully": "Đã cập nhật thành công loại sự kiện {{eventTypeTitle}}",
|
||||||
"event_type_deleted_successfully": "Đã xóa thành công loại sự kiện",
|
"event_type_deleted_successfully": "Đã xóa thành công loại sự kiện",
|
||||||
"web3_metamask_added": "Đã thêm thành công Metamask",
|
|
||||||
"web3_metamask_disconnected": "Đã ngắt kết nối thành công Metamask",
|
|
||||||
"hours": "Giờ",
|
"hours": "Giờ",
|
||||||
"your_email": "Email của bạn",
|
"your_email": "Email của bạn",
|
||||||
"change_avatar": "Thay đổi hình đại diện",
|
"change_avatar": "Thay đổi hình đại diện",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "Đã cài đặt",
|
"installed_one": "Đã cài đặt",
|
||||||
"installed_other": "Đã cài đặt {{count}} lần",
|
"installed_other": "Đã cài đặt {{count}} lần",
|
||||||
"verify_wallet": "Xác minh Ví",
|
"verify_wallet": "Xác minh Ví",
|
||||||
"connect_metamask": "Kết nối Metamask",
|
|
||||||
"create_events_on": "Tạo sự kiện trên",
|
"create_events_on": "Tạo sự kiện trên",
|
||||||
"enterprise_license": "Đây là tính năng doanh nghiệp",
|
"enterprise_license": "Đây là tính năng doanh nghiệp",
|
||||||
"enterprise_license_description": "Để bật tính năng này, nhận khoá triển khai tại console {{consoleUrl}} và thêm nó vào .env của bạn ở dạng CALCOM_LICENSE_KEY. Nếu nhóm của bạn đã có giấy phép, vui lòng liên hệ {{supportMail}} để được trợ giúp.",
|
"enterprise_license_description": "Để bật tính năng này, nhận khoá triển khai tại console {{consoleUrl}} và thêm nó vào .env của bạn ở dạng CALCOM_LICENSE_KEY. Nếu nhóm của bạn đã có giấy phép, vui lòng liên hệ {{supportMail}} để được trợ giúp.",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "Tải lên",
|
"upload": "Tải lên",
|
||||||
"add_profile_photo": "Thêm ảnh hồ sơ",
|
"add_profile_photo": "Thêm ảnh hồ sơ",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "Loại sự kiện này yêu cầu token để truy cập.",
|
|
||||||
"rainbow_connect_wallet_gate": "Kết nối ví của bạn nếu bạn sở hữu <1>{{name}}</1> (<3>{{symbol}}</3>).",
|
|
||||||
"rainbow_insufficient_balance": "Ví được kết nối của bạn không chứa đủ <1>{{symbol}}</1>.",
|
|
||||||
"rainbow_sign_message_request": "Kí vào một yêu cầu tin nhắn trên ví của bạn.",
|
|
||||||
"rainbow_signature_error": "Lỗi khi gửi chữ kí từ ví của bạn.",
|
|
||||||
"token_address": "Địa chỉ token",
|
"token_address": "Địa chỉ token",
|
||||||
"blockchain": "Chuỗi khối",
|
"blockchain": "Chuỗi khối",
|
||||||
"old_password": "Mật khẩu cũ",
|
"old_password": "Mật khẩu cũ",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "Mật khẩu đã được cập nhật!",
|
"password_updated": "Mật khẩu đã được cập nhật!",
|
||||||
"pending_payment": "Thanh toán đang chờ xử lí",
|
"pending_payment": "Thanh toán đang chờ xử lí",
|
||||||
"pending_invites": "Lời mời đang chờ xử lý",
|
"pending_invites": "Lời mời đang chờ xử lý",
|
||||||
"confirmation_page_rainbow": "Yêu cầu token để truy cập sự kiện của bạn, với các token hoặc NFT trên Ethereum, Polygon, v.v.",
|
|
||||||
"not_on_cal": "Không phải trên {{appName}}",
|
"not_on_cal": "Không phải trên {{appName}}",
|
||||||
"no_calendar_installed": "Chưa cài đặt lịch nào",
|
"no_calendar_installed": "Chưa cài đặt lịch nào",
|
||||||
"no_calendar_installed_description": "Bạn chưa kết nối lịch nào của bạn",
|
"no_calendar_installed_description": "Bạn chưa kết nối lịch nào của bạn",
|
||||||
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "{{eventTypeTitle}} 活动类型创建成功",
|
"event_type_created_successfully": "{{eventTypeTitle}} 活动类型创建成功",
|
||||||
"event_type_updated_successfully": "{{eventTypeTitle}} 活动类型更新成功",
|
"event_type_updated_successfully": "{{eventTypeTitle}} 活动类型更新成功",
|
||||||
"event_type_deleted_successfully": "活动类型删除成功",
|
"event_type_deleted_successfully": "活动类型删除成功",
|
||||||
"web3_metamask_added": "元掩码添加成功",
|
|
||||||
"web3_metamask_disconnected": "元掩码已成功断开连接",
|
|
||||||
"hours": "小时数",
|
"hours": "小时数",
|
||||||
"your_email": "您的邮箱",
|
"your_email": "您的邮箱",
|
||||||
"change_avatar": "修改头像",
|
"change_avatar": "修改头像",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "已安装",
|
"installed_one": "已安装",
|
||||||
"installed_other": "已安装 {{count}} 次",
|
"installed_other": "已安装 {{count}} 次",
|
||||||
"verify_wallet": "验证钱包",
|
"verify_wallet": "验证钱包",
|
||||||
"connect_metamask": "连接元掩码",
|
|
||||||
"create_events_on": "活动创建于:",
|
"create_events_on": "活动创建于:",
|
||||||
"enterprise_license": "这是企业版功能",
|
"enterprise_license": "这是企业版功能",
|
||||||
"enterprise_license_description": "要启用此功能,请在 {{consoleUrl}} 控制台获取一个部署密钥,并将其添加到您的 .env 中作为 CALCOM_LICENSE_KEY。如果您的团队已经有许可证,请联系 {{supportMail}} 获取帮助。",
|
"enterprise_license_description": "要启用此功能,请在 {{consoleUrl}} 控制台获取一个部署密钥,并将其添加到您的 .env 中作为 CALCOM_LICENSE_KEY。如果您的团队已经有许可证,请联系 {{supportMail}} 获取帮助。",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "上传",
|
"upload": "上传",
|
||||||
"add_profile_photo": "添加个人资料照片",
|
"add_profile_photo": "添加个人资料照片",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "此活动类型采用代币门控。",
|
|
||||||
"rainbow_connect_wallet_gate": "如果您拥有 <1>{{name}}</1> (<3>{{symbol}}</3>),请连接您的钱包。",
|
|
||||||
"rainbow_insufficient_balance": "您的已连接钱包未包含足够的 <1>{{symbol}}</1>。",
|
|
||||||
"rainbow_sign_message_request": "使用您的钱包签署消息请求。",
|
|
||||||
"rainbow_signature_error": "从您的钱包请求签名时出错。",
|
|
||||||
"token_address": "代币地址",
|
"token_address": "代币地址",
|
||||||
"blockchain": "区块链",
|
"blockchain": "区块链",
|
||||||
"old_password": "旧密码",
|
"old_password": "旧密码",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "密码已更新!",
|
"password_updated": "密码已更新!",
|
||||||
"pending_payment": "待付款",
|
"pending_payment": "待付款",
|
||||||
"pending_invites": "待定邀请",
|
"pending_invites": "待定邀请",
|
||||||
"confirmation_page_rainbow": "使用 Ethereum、Polygon 等平台的代币或 NFT 对您的活动进行代币门控。",
|
|
||||||
"not_on_cal": "不在 {{appName}} 上",
|
"not_on_cal": "不在 {{appName}} 上",
|
||||||
"no_calendar_installed": "未安装任何日历",
|
"no_calendar_installed": "未安装任何日历",
|
||||||
"no_calendar_installed_description": "您尚未连接任何日历",
|
"no_calendar_installed_description": "您尚未连接任何日历",
|
||||||
|
|
|
@ -630,8 +630,6 @@
|
||||||
"event_type_created_successfully": "成功新增活動類型 {{eventTypeTitle}}",
|
"event_type_created_successfully": "成功新增活動類型 {{eventTypeTitle}}",
|
||||||
"event_type_updated_successfully": "成功更新活動類型 {{eventTypeTitle}}",
|
"event_type_updated_successfully": "成功更新活動類型 {{eventTypeTitle}}",
|
||||||
"event_type_deleted_successfully": "成功刪除活動類型",
|
"event_type_deleted_successfully": "成功刪除活動類型",
|
||||||
"web3_metamask_added": "成功新增 Metamask",
|
|
||||||
"web3_metamask_disconnected": "成功中斷 Metamask",
|
|
||||||
"hours": "小時",
|
"hours": "小時",
|
||||||
"your_email": "電子郵件",
|
"your_email": "電子郵件",
|
||||||
"change_avatar": "更換大頭照",
|
"change_avatar": "更換大頭照",
|
||||||
|
@ -872,7 +870,6 @@
|
||||||
"installed_one": "已安裝",
|
"installed_one": "已安裝",
|
||||||
"installed_other": "已安裝 {{count}} 個",
|
"installed_other": "已安裝 {{count}} 個",
|
||||||
"verify_wallet": "驗證錢包",
|
"verify_wallet": "驗證錢包",
|
||||||
"connect_metamask": "連接 Metamask",
|
|
||||||
"create_events_on": "建立活動時間:",
|
"create_events_on": "建立活動時間:",
|
||||||
"enterprise_license": "此為企業版功能",
|
"enterprise_license": "此為企業版功能",
|
||||||
"enterprise_license_description": "若要啟用此功能,請在 {{consoleUrl}} 主控台取得部署金鑰,並在您的 .env 中新增為 CALCOM_LICENSE_KEY。如果您的團隊已經取得授權,請聯絡 {{supportMail}} 取得協助。",
|
"enterprise_license_description": "若要啟用此功能,請在 {{consoleUrl}} 主控台取得部署金鑰,並在您的 .env 中新增為 CALCOM_LICENSE_KEY。如果您的團隊已經取得授權,請聯絡 {{supportMail}} 取得協助。",
|
||||||
|
@ -1228,11 +1225,6 @@
|
||||||
"upload": "上傳",
|
"upload": "上傳",
|
||||||
"add_profile_photo": "新增個人資料相片",
|
"add_profile_photo": "新增個人資料相片",
|
||||||
"web3": "Web3",
|
"web3": "Web3",
|
||||||
"rainbow_token_gated": "此活動類型是以代幣管制。",
|
|
||||||
"rainbow_connect_wallet_gate": "如果您擁有 <1>{{name}}</1> (<3>{{symbol}}</3>),請連接您的錢包。",
|
|
||||||
"rainbow_insufficient_balance": "您的已連接錢包未包含足夠的 <1>{{symbol}}</1>。",
|
|
||||||
"rainbow_sign_message_request": "在您的錢包上簽署訊息請求。",
|
|
||||||
"rainbow_signature_error": "請求您的錢包簽章時發生錯誤。",
|
|
||||||
"token_address": "代幣地址",
|
"token_address": "代幣地址",
|
||||||
"blockchain": "區塊鏈",
|
"blockchain": "區塊鏈",
|
||||||
"old_password": "舊密碼",
|
"old_password": "舊密碼",
|
||||||
|
@ -1378,7 +1370,6 @@
|
||||||
"password_updated": "密碼已更新!",
|
"password_updated": "密碼已更新!",
|
||||||
"pending_payment": "待付款",
|
"pending_payment": "待付款",
|
||||||
"pending_invites": "待回應的邀請",
|
"pending_invites": "待回應的邀請",
|
||||||
"confirmation_page_rainbow": "使用 Ethereum、Polygon 等的 Token 或 NFT 來以代幣管制您的活動。",
|
|
||||||
"not_on_cal": "不在 {{appName}} 上",
|
"not_on_cal": "不在 {{appName}} 上",
|
||||||
"no_calendar_installed": "未安裝行事曆",
|
"no_calendar_installed": "未安裝行事曆",
|
||||||
"no_calendar_installed_description": "您尚未連接任何行事曆",
|
"no_calendar_installed_description": "您尚未連接任何行事曆",
|
||||||
|
|
|
@ -36,11 +36,6 @@ export const getEventTypeAppData = <T extends EventTypeAppsList>(
|
||||||
currency: eventType.currency,
|
currency: eventType.currency,
|
||||||
paymentOption: "ON_BOOKING",
|
paymentOption: "ON_BOOKING",
|
||||||
},
|
},
|
||||||
rainbow: {
|
|
||||||
enabled: !!(eventType.metadata?.smartContractAddress && eventType.metadata?.blockchainId),
|
|
||||||
smartContractAddress: eventType.metadata?.smartContractAddress || "",
|
|
||||||
blockchainId: eventType.metadata?.blockchainId || 0,
|
|
||||||
},
|
|
||||||
giphy: {
|
giphy: {
|
||||||
enabled: !!eventType.metadata?.giphyThankYouPage,
|
enabled: !!eventType.metadata?.giphyThankYouPage,
|
||||||
thankYouPage: eventType.metadata?.giphyThankYouPage || "",
|
thankYouPage: eventType.metadata?.giphyThankYouPage || "",
|
||||||
|
|
|
@ -27,7 +27,6 @@ export const EventTypeAddonMap = {
|
||||||
metapixel: dynamic(() => import("./metapixel/components/EventTypeAppCardInterface")),
|
metapixel: dynamic(() => import("./metapixel/components/EventTypeAppCardInterface")),
|
||||||
plausible: dynamic(() => import("./plausible/components/EventTypeAppCardInterface")),
|
plausible: dynamic(() => import("./plausible/components/EventTypeAppCardInterface")),
|
||||||
qr_code: dynamic(() => import("./qr_code/components/EventTypeAppCardInterface")),
|
qr_code: dynamic(() => import("./qr_code/components/EventTypeAppCardInterface")),
|
||||||
rainbow: dynamic(() => import("./rainbow/components/EventTypeAppCardInterface")),
|
|
||||||
stripepayment: dynamic(() => import("./stripepayment/components/EventTypeAppCardInterface")),
|
stripepayment: dynamic(() => import("./stripepayment/components/EventTypeAppCardInterface")),
|
||||||
"booking-pages-tag": dynamic(() =>
|
"booking-pages-tag": dynamic(() =>
|
||||||
import("./templates/booking-pages-tag/components/EventTypeAppCardInterface")
|
import("./templates/booking-pages-tag/components/EventTypeAppCardInterface")
|
||||||
|
|
|
@ -16,7 +16,6 @@ import { appKeysSchema as office365calendar_zod_ts } from "./office365calendar/z
|
||||||
import { appKeysSchema as office365video_zod_ts } from "./office365video/zod";
|
import { appKeysSchema as office365video_zod_ts } from "./office365video/zod";
|
||||||
import { appKeysSchema as plausible_zod_ts } from "./plausible/zod";
|
import { appKeysSchema as plausible_zod_ts } from "./plausible/zod";
|
||||||
import { appKeysSchema as qr_code_zod_ts } from "./qr_code/zod";
|
import { appKeysSchema as qr_code_zod_ts } from "./qr_code/zod";
|
||||||
import { appKeysSchema as rainbow_zod_ts } from "./rainbow/zod";
|
|
||||||
import { appKeysSchema as routing_forms_zod_ts } from "./routing-forms/zod";
|
import { appKeysSchema as routing_forms_zod_ts } from "./routing-forms/zod";
|
||||||
import { appKeysSchema as salesforce_zod_ts } from "./salesforce/zod";
|
import { appKeysSchema as salesforce_zod_ts } from "./salesforce/zod";
|
||||||
import { appKeysSchema as stripepayment_zod_ts } from "./stripepayment/zod";
|
import { appKeysSchema as stripepayment_zod_ts } from "./stripepayment/zod";
|
||||||
|
@ -46,7 +45,6 @@ export const appKeysSchemas = {
|
||||||
office365video: office365video_zod_ts,
|
office365video: office365video_zod_ts,
|
||||||
plausible: plausible_zod_ts,
|
plausible: plausible_zod_ts,
|
||||||
qr_code: qr_code_zod_ts,
|
qr_code: qr_code_zod_ts,
|
||||||
rainbow: rainbow_zod_ts,
|
|
||||||
"routing-forms": routing_forms_zod_ts,
|
"routing-forms": routing_forms_zod_ts,
|
||||||
salesforce: salesforce_zod_ts,
|
salesforce: salesforce_zod_ts,
|
||||||
stripe: stripepayment_zod_ts,
|
stripe: stripepayment_zod_ts,
|
||||||
|
|
|
@ -35,7 +35,6 @@ import ping_config_json from "./ping/config.json";
|
||||||
import pipedream_config_json from "./pipedream/config.json";
|
import pipedream_config_json from "./pipedream/config.json";
|
||||||
import plausible_config_json from "./plausible/config.json";
|
import plausible_config_json from "./plausible/config.json";
|
||||||
import qr_code_config_json from "./qr_code/config.json";
|
import qr_code_config_json from "./qr_code/config.json";
|
||||||
import rainbow_config_json from "./rainbow/config.json";
|
|
||||||
import raycast_config_json from "./raycast/config.json";
|
import raycast_config_json from "./raycast/config.json";
|
||||||
import riverside_config_json from "./riverside/config.json";
|
import riverside_config_json from "./riverside/config.json";
|
||||||
import routing_forms_config_json from "./routing-forms/config.json";
|
import routing_forms_config_json from "./routing-forms/config.json";
|
||||||
|
@ -101,7 +100,6 @@ export const appStoreMetadata = {
|
||||||
pipedream: pipedream_config_json,
|
pipedream: pipedream_config_json,
|
||||||
plausible: plausible_config_json,
|
plausible: plausible_config_json,
|
||||||
qr_code: qr_code_config_json,
|
qr_code: qr_code_config_json,
|
||||||
rainbow: rainbow_config_json,
|
|
||||||
raycast: raycast_config_json,
|
raycast: raycast_config_json,
|
||||||
riverside: riverside_config_json,
|
riverside: riverside_config_json,
|
||||||
"routing-forms": routing_forms_config_json,
|
"routing-forms": routing_forms_config_json,
|
||||||
|
|
|
@ -16,7 +16,6 @@ import { appDataSchema as office365calendar_zod_ts } from "./office365calendar/z
|
||||||
import { appDataSchema as office365video_zod_ts } from "./office365video/zod";
|
import { appDataSchema as office365video_zod_ts } from "./office365video/zod";
|
||||||
import { appDataSchema as plausible_zod_ts } from "./plausible/zod";
|
import { appDataSchema as plausible_zod_ts } from "./plausible/zod";
|
||||||
import { appDataSchema as qr_code_zod_ts } from "./qr_code/zod";
|
import { appDataSchema as qr_code_zod_ts } from "./qr_code/zod";
|
||||||
import { appDataSchema as rainbow_zod_ts } from "./rainbow/zod";
|
|
||||||
import { appDataSchema as routing_forms_zod_ts } from "./routing-forms/zod";
|
import { appDataSchema as routing_forms_zod_ts } from "./routing-forms/zod";
|
||||||
import { appDataSchema as salesforce_zod_ts } from "./salesforce/zod";
|
import { appDataSchema as salesforce_zod_ts } from "./salesforce/zod";
|
||||||
import { appDataSchema as stripepayment_zod_ts } from "./stripepayment/zod";
|
import { appDataSchema as stripepayment_zod_ts } from "./stripepayment/zod";
|
||||||
|
@ -46,7 +45,6 @@ export const appDataSchemas = {
|
||||||
office365video: office365video_zod_ts,
|
office365video: office365video_zod_ts,
|
||||||
plausible: plausible_zod_ts,
|
plausible: plausible_zod_ts,
|
||||||
qr_code: qr_code_zod_ts,
|
qr_code: qr_code_zod_ts,
|
||||||
rainbow: rainbow_zod_ts,
|
|
||||||
"routing-forms": routing_forms_zod_ts,
|
"routing-forms": routing_forms_zod_ts,
|
||||||
salesforce: salesforce_zod_ts,
|
salesforce: salesforce_zod_ts,
|
||||||
stripe: stripepayment_zod_ts,
|
stripe: stripepayment_zod_ts,
|
||||||
|
|
|
@ -35,7 +35,6 @@ export const apiHandlers = {
|
||||||
pipedream: import("./pipedream/api"),
|
pipedream: import("./pipedream/api"),
|
||||||
plausible: import("./plausible/api"),
|
plausible: import("./plausible/api"),
|
||||||
qr_code: import("./qr_code/api"),
|
qr_code: import("./qr_code/api"),
|
||||||
rainbow: import("./rainbow/api"),
|
|
||||||
raycast: import("./raycast/api"),
|
raycast: import("./raycast/api"),
|
||||||
riverside: import("./riverside/api"),
|
riverside: import("./riverside/api"),
|
||||||
"routing-forms": import("./routing-forms/api"),
|
"routing-forms": import("./routing-forms/api"),
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
---
|
|
||||||
items:
|
|
||||||
- 1.jpg
|
|
||||||
- 2.jpg
|
|
||||||
- 3.jpg
|
|
||||||
---
|
|
||||||
|
|
||||||
Token gate bookings based on NFTs, DAO tokens, and ERC-20 tokens. Rainbow supports dozens of trusted Ethereum wallet apps to verify token ownership. Available blockchains are Ethereum mainnet, Arbitrum, Optimism, and Polygon mainnet.
|
|
|
@ -1,12 +0,0 @@
|
||||||
# Rainbow App
|
|
||||||
|
|
||||||
> Intended for developer information
|
|
||||||
|
|
||||||
The web3 app uses [RainbowKit](https://www.rainbowkit.com/) to authenticate Ethereum users.
|
|
||||||
|
|
||||||
When deploying, the app requires either a `ALCHEMY_API_KEY` or `INFURA_API_KEY` (or both) which can be obtained by creating an Alchemy or Infura project respectively.
|
|
||||||
|
|
||||||
<img width="901" alt="Find your Alchemy API key" src="https://user-images.githubusercontent.com/8162609/187499278-e5f03c3f-b4a5-430a-9121-f30207802d4c.png">
|
|
||||||
<img width="932" alt="Find your Infura API key" src="https://user-images.githubusercontent.com/8162609/187499759-425b4fc4-621b-4753-b77f-257b5055408a.png">
|
|
||||||
|
|
||||||
Available blockchains are Ethereum mainnet, Arbitrum, Optimism, and Polygon mainnet.
|
|
|
@ -1,16 +0,0 @@
|
||||||
import type { AppDeclarativeHandler } from "@calcom/types/AppHandler";
|
|
||||||
|
|
||||||
import { createDefaultInstallation } from "../../_utils/installation";
|
|
||||||
import appConfig from "../config.json";
|
|
||||||
|
|
||||||
const handler: AppDeclarativeHandler = {
|
|
||||||
appType: appConfig.type,
|
|
||||||
slug: appConfig.slug,
|
|
||||||
variant: appConfig.slug,
|
|
||||||
supportsMultipleInstalls: false,
|
|
||||||
handlerType: "add",
|
|
||||||
createCredential: ({ appType, user, slug }) =>
|
|
||||||
createDefaultInstallation({ appType, userId: user.id, slug, key: {} }),
|
|
||||||
};
|
|
||||||
|
|
||||||
export default handler;
|
|
|
@ -1 +0,0 @@
|
||||||
export { default as add } from "./add";
|
|
|
@ -1,35 +0,0 @@
|
||||||
import React, { useState } from "react";
|
|
||||||
|
|
||||||
import { useAppContextWithSchema } from "@calcom/app-store/EventTypeAppContext";
|
|
||||||
import AppCard from "@calcom/app-store/_components/AppCard";
|
|
||||||
import RainbowInstallForm from "@calcom/app-store/rainbow/components/RainbowInstallForm";
|
|
||||||
import type { EventTypeAppCardComponent } from "@calcom/app-store/types";
|
|
||||||
|
|
||||||
import type { appDataSchema } from "../zod";
|
|
||||||
|
|
||||||
const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ app }) {
|
|
||||||
const [getAppData, setAppData] = useAppContextWithSchema<typeof appDataSchema>();
|
|
||||||
const blockchainId = getAppData("blockchainId");
|
|
||||||
const smartContractAddress = getAppData("smartContractAddress");
|
|
||||||
const [showRainbowSection, setShowRainbowSection] = useState(getAppData("enabled"));
|
|
||||||
|
|
||||||
return (
|
|
||||||
<AppCard
|
|
||||||
setAppData={setAppData}
|
|
||||||
app={app}
|
|
||||||
switchOnClick={(e) => {
|
|
||||||
setShowRainbowSection(e);
|
|
||||||
}}
|
|
||||||
switchChecked={showRainbowSection}>
|
|
||||||
{showRainbowSection && (
|
|
||||||
<RainbowInstallForm
|
|
||||||
setAppData={setAppData}
|
|
||||||
blockchainId={blockchainId}
|
|
||||||
smartContractAddress={(smartContractAddress as string) || ""}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</AppCard>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default EventTypeAppCard;
|
|
|
@ -1,63 +0,0 @@
|
||||||
import type { z } from "zod";
|
|
||||||
|
|
||||||
import type { SetAppDataGeneric } from "@calcom/app-store/EventTypeAppContext";
|
|
||||||
import { useLocale } from "@calcom/lib/hooks/useLocale";
|
|
||||||
import { SUPPORTED_CHAINS_FOR_FORM } from "@calcom/rainbow/utils/ethereum";
|
|
||||||
import { Select } from "@calcom/ui";
|
|
||||||
|
|
||||||
import type { appDataSchema } from "../zod";
|
|
||||||
|
|
||||||
type RainbowInstallFormProps = {
|
|
||||||
setAppData: SetAppDataGeneric<typeof appDataSchema>;
|
|
||||||
} & Pick<z.infer<typeof appDataSchema>, "smartContractAddress" | "blockchainId">;
|
|
||||||
|
|
||||||
const RainbowInstallForm: React.FC<RainbowInstallFormProps> = ({
|
|
||||||
setAppData,
|
|
||||||
blockchainId,
|
|
||||||
smartContractAddress,
|
|
||||||
}) => {
|
|
||||||
const { t } = useLocale();
|
|
||||||
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<div className="mt-5 block items-center sm:flex">
|
|
||||||
<div className="min-w-48 mb-4 sm:mb-0">
|
|
||||||
<label htmlFor="blockchainId" className="text-default flex text-sm font-medium">
|
|
||||||
{t("Blockchain")}
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<Select
|
|
||||||
isSearchable={false}
|
|
||||||
className="block w-full min-w-0 flex-1 rounded-sm text-sm"
|
|
||||||
onChange={(e) => {
|
|
||||||
setAppData("blockchainId", (e && e.value) || 1);
|
|
||||||
}}
|
|
||||||
defaultValue={SUPPORTED_CHAINS_FOR_FORM.find((e) => e.value === blockchainId)}
|
|
||||||
options={SUPPORTED_CHAINS_FOR_FORM || [{ value: 1, label: "Ethereum" }]}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="mt-5 block items-center pb-4 sm:flex">
|
|
||||||
<div className="min-w-48 mb-4 sm:mb-0">
|
|
||||||
<label htmlFor="smartContractAddress" className="text-default flex text-sm font-medium">
|
|
||||||
{t("token_address")}
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div className="w-full">
|
|
||||||
<div className="relative mt-1 rounded-sm">
|
|
||||||
<input
|
|
||||||
type="text"
|
|
||||||
className="border-default block w-full rounded-sm text-sm"
|
|
||||||
placeholder={t("Example: 0x71c7656ec7ab88b098defb751b7401b5f6d8976f")}
|
|
||||||
defaultValue={(smartContractAddress || "") as string}
|
|
||||||
onChange={(e) => {
|
|
||||||
setAppData("smartContractAddress", e.target.value);
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default RainbowInstallForm;
|
|
|
@ -1,175 +0,0 @@
|
||||||
import {
|
|
||||||
ConnectButton,
|
|
||||||
darkTheme,
|
|
||||||
getDefaultWallets,
|
|
||||||
lightTheme,
|
|
||||||
RainbowKitProvider,
|
|
||||||
} from "@rainbow-me/rainbowkit";
|
|
||||||
import "@rainbow-me/rainbowkit/styles.css";
|
|
||||||
import { useTheme } from "next-themes";
|
|
||||||
import { useRouter } from "next/router";
|
|
||||||
import { useEffect, useState } from "react";
|
|
||||||
import { Trans } from "react-i18next";
|
|
||||||
import { configureChains, createClient, useAccount, useSignMessage, WagmiConfig } from "wagmi";
|
|
||||||
|
|
||||||
import { useLocale } from "@calcom/lib/hooks/useLocale";
|
|
||||||
import { trpc } from "@calcom/trpc/react";
|
|
||||||
import { showToast, SkeletonText } from "@calcom/ui";
|
|
||||||
import { AlertTriangle, Loader } from "@calcom/ui/components/icon";
|
|
||||||
|
|
||||||
import { ETH_MESSAGE, getProviders, SUPPORTED_CHAINS } from "../utils/ethereum";
|
|
||||||
|
|
||||||
const { chains, provider } = configureChains(SUPPORTED_CHAINS, getProviders());
|
|
||||||
|
|
||||||
const { connectors } = getDefaultWallets({
|
|
||||||
appName: "Cal.com",
|
|
||||||
chains,
|
|
||||||
});
|
|
||||||
|
|
||||||
const wagmiClient = createClient({
|
|
||||||
autoConnect: true,
|
|
||||||
connectors,
|
|
||||||
provider,
|
|
||||||
});
|
|
||||||
|
|
||||||
type RainbowGateProps = {
|
|
||||||
children: React.ReactNode;
|
|
||||||
setToken: (_: string) => void;
|
|
||||||
chainId: number;
|
|
||||||
tokenAddress: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
const RainbowGate: React.FC<RainbowGateProps> = (props) => {
|
|
||||||
const { resolvedTheme: theme } = useTheme();
|
|
||||||
const [rainbowTheme, setRainbowTheme] = useState(theme === "dark" ? darkTheme() : lightTheme());
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
theme === "dark" ? setRainbowTheme(darkTheme()) : setRainbowTheme(lightTheme());
|
|
||||||
}, [theme]);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<WagmiConfig client={wagmiClient}>
|
|
||||||
<RainbowKitProvider chains={chains.filter((chain) => chain.id === props.chainId)} theme={rainbowTheme}>
|
|
||||||
<BalanceCheck {...props} />
|
|
||||||
</RainbowKitProvider>
|
|
||||||
</WagmiConfig>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
// The word "token" is used for two differenct concepts here: `setToken` is the token for
|
|
||||||
// the Gate while `useToken` is a hook used to retrieve the Ethereum token.
|
|
||||||
const BalanceCheck: React.FC<RainbowGateProps> = ({ chainId, setToken, tokenAddress }) => {
|
|
||||||
const { t } = useLocale();
|
|
||||||
const { address } = useAccount();
|
|
||||||
const {
|
|
||||||
data: signedMessage,
|
|
||||||
isLoading: isSignatureLoading,
|
|
||||||
isError: isSignatureError,
|
|
||||||
signMessage,
|
|
||||||
} = useSignMessage({
|
|
||||||
message: ETH_MESSAGE,
|
|
||||||
});
|
|
||||||
const { data: contractData, isLoading: isContractLoading } = trpc.viewer.eth.contract.useQuery({
|
|
||||||
address: tokenAddress,
|
|
||||||
chainId,
|
|
||||||
});
|
|
||||||
const { data: balanceData, isLoading: isBalanceLoading } = trpc.viewer.eth.balance.useQuery(
|
|
||||||
{ address: address || "", tokenAddress, chainId },
|
|
||||||
{
|
|
||||||
enabled: !!address,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
// The token may have already been set in the query params, so we can extract it here
|
|
||||||
const router = useRouter();
|
|
||||||
const { ethSignature, ...routerQuery } = router.query;
|
|
||||||
|
|
||||||
const isLoading = isContractLoading || isBalanceLoading;
|
|
||||||
|
|
||||||
// Any logic here will unlock the gate by setting the token to the user's wallet signature
|
|
||||||
useEffect(() => {
|
|
||||||
// If the `ethSignature` is found, remove it from the URL bar and propogate back up
|
|
||||||
if (ethSignature !== undefined) {
|
|
||||||
// Remove the `ethSignature` param but keep all others
|
|
||||||
router.replace({ query: { ...routerQuery } });
|
|
||||||
setToken(ethSignature as string);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (balanceData && balanceData.data) {
|
|
||||||
if (balanceData.data.hasBalance) {
|
|
||||||
if (signedMessage) {
|
|
||||||
showToast("Wallet verified.", "success");
|
|
||||||
setToken(signedMessage);
|
|
||||||
} else if (router.isReady && !ethSignature) {
|
|
||||||
signMessage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
||||||
}, [router.isReady, balanceData, setToken, signedMessage, signMessage]);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<main className="mx-auto max-w-3xl py-24 px-4">
|
|
||||||
<div className="rounded-md border border-neutral-200 dark:border-neutral-700 dark:hover:border-neutral-600">
|
|
||||||
<div className="hover:border-brand-default dark:bg-darkgray-100 bg-default hover:bg-default flex min-h-[120px] grow flex-col border-b border-neutral-200 p-6 text-center first:rounded-t-md last:rounded-b-md last:border-b-0 dark:border-neutral-700 dark:hover:border-neutral-600 md:flex-row md:text-left">
|
|
||||||
<span className="mb-4 grow md:mb-0">
|
|
||||||
<h2 className="text-emphasis dark:text-inverted mb-2 grow font-semibold">Token Gate</h2>
|
|
||||||
{isLoading && (
|
|
||||||
<>
|
|
||||||
<SkeletonText className="mb-3 h-1 w-full" />
|
|
||||||
<SkeletonText className="h-1 w-full" />
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
{!isLoading && contractData && contractData.data && (
|
|
||||||
<>
|
|
||||||
<p className="dark:text-inverted text-gray-300">
|
|
||||||
<Trans i18nKey="rainbow_connect_wallet_gate" t={t}>
|
|
||||||
Connect your wallet if you own {contractData.data.name} ({contractData.data.symbol}) .
|
|
||||||
</Trans>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
{balanceData && balanceData.data && (
|
|
||||||
<>
|
|
||||||
{!balanceData.data.hasBalance && (
|
|
||||||
<div className="mt-2 flex flex-row items-center">
|
|
||||||
<AlertTriangle className="h-5 w-5 text-red-600" />
|
|
||||||
<p className="ml-2 text-red-600">
|
|
||||||
<Trans i18nKey="rainbow_insufficient_balance" t={t}>
|
|
||||||
Your connected wallet doesn't contain enough {contractData.data.symbol}.
|
|
||||||
</Trans>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{balanceData.data.hasBalance && isSignatureLoading && (
|
|
||||||
<div className="mt-2 flex flex-row items-center">
|
|
||||||
<Loader className="h-5 w-5 text-green-600" />
|
|
||||||
<p className="ml-2 text-green-600">{t("rainbow_sign_message_request")}</p>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{isSignatureError && (
|
|
||||||
<div className="mt-2 flex flex-row items-center">
|
|
||||||
<AlertTriangle className="h-5 w-5 text-red-600" />
|
|
||||||
<p className="ml-2 text-red-600">
|
|
||||||
<Trans i18nKey="rainbow_signature_error" t={t}>
|
|
||||||
{t("rainbow_signature_error")}
|
|
||||||
</Trans>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
</span>
|
|
||||||
<span className="ml-10 min-w-[170px] self-center">
|
|
||||||
<ConnectButton chainStatus="icon" showBalance={false} />
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default RainbowGate;
|
|
|
@ -1,15 +0,0 @@
|
||||||
{
|
|
||||||
"/*": "Don't modify slug - If required, do it using cli edit command",
|
|
||||||
"name": "Rainbow",
|
|
||||||
"slug": "rainbow",
|
|
||||||
"type": "rainbow_web3",
|
|
||||||
"logo": "icon.svg",
|
|
||||||
"url": "https://github.com/hexcowboy",
|
|
||||||
"variant": "web3",
|
|
||||||
"categories": ["web3"],
|
|
||||||
"extendsFeature": "EventType",
|
|
||||||
"publisher": "hexcowboy",
|
|
||||||
"email": "",
|
|
||||||
"description": "Web3 integration for token gating on Fungible Tokens, NFTs, and DAOs.",
|
|
||||||
"__createdUsingCli": true
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
export * as api from "./api";
|
|
|
@ -1,17 +0,0 @@
|
||||||
{
|
|
||||||
"$schema": "https://json.schemastore.org/package.json",
|
|
||||||
"private": true,
|
|
||||||
"name": "@calcom/rainbow",
|
|
||||||
"version": "0.0.0",
|
|
||||||
"main": "./index.ts",
|
|
||||||
"description": "Web3 integration for token gating on Fungible Tokens, NFTs, and DAOs.",
|
|
||||||
"dependencies": {
|
|
||||||
"@calcom/lib": "*",
|
|
||||||
"@rainbow-me/rainbowkit": "^0.5.0",
|
|
||||||
"ethers": "^5.7.0",
|
|
||||||
"wagmi": "^0.6.4"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@calcom/types": "*"
|
|
||||||
}
|
|
||||||
}
|
|
Binary file not shown.
Before Width: | Height: | Size: 60 KiB |
Binary file not shown.
Before Width: | Height: | Size: 83 KiB |
Binary file not shown.
Before Width: | Height: | Size: 89 KiB |
|
@ -1,54 +0,0 @@
|
||||||
<svg width="120" height="120" viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<rect width="120" height="120" fill="url(#paint0_linear_62_329)"/>
|
|
||||||
<path d="M20 38H26C56.9279 38 82 63.0721 82 94V100H94C97.3137 100 100 97.3137 100 94C100 53.1309 66.8691 20 26 20C22.6863 20 20 22.6863 20 26V38Z" fill="url(#paint1_radial_62_329)"/>
|
|
||||||
<path d="M84 94H100C100 97.3137 97.3137 100 94 100H84V94Z" fill="url(#paint2_linear_62_329)"/>
|
|
||||||
<path d="M26 20L26 36H20L20 26C20 22.6863 22.6863 20 26 20Z" fill="url(#paint3_linear_62_329)"/>
|
|
||||||
<path d="M20 36H26C58.0325 36 84 61.9675 84 94V100H66V94C66 71.9086 48.0914 54 26 54H20V36Z" fill="url(#paint4_radial_62_329)"/>
|
|
||||||
<path d="M68 94H84V100H68V94Z" fill="url(#paint5_linear_62_329)"/>
|
|
||||||
<path d="M20 52L20 36L26 36L26 52H20Z" fill="url(#paint6_linear_62_329)"/>
|
|
||||||
<path d="M20 62C20 65.3137 22.6863 68 26 68C40.3594 68 52 79.6406 52 94C52 97.3137 54.6863 100 58 100H68V94C68 70.804 49.196 52 26 52H20V62Z" fill="url(#paint7_radial_62_329)"/>
|
|
||||||
<path d="M52 94H68V100H58C54.6863 100 52 97.3137 52 94Z" fill="url(#paint8_radial_62_329)"/>
|
|
||||||
<path d="M26 68C22.6863 68 20 65.3137 20 62L20 52L26 52L26 68Z" fill="url(#paint9_radial_62_329)"/>
|
|
||||||
<defs>
|
|
||||||
<linearGradient id="paint0_linear_62_329" x1="60" y1="0" x2="60" y2="120" gradientUnits="userSpaceOnUse">
|
|
||||||
<stop stop-color="#174299"/>
|
|
||||||
<stop offset="1" stop-color="#001E59"/>
|
|
||||||
</linearGradient>
|
|
||||||
<radialGradient id="paint1_radial_62_329" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(26 94) rotate(-90) scale(74)">
|
|
||||||
<stop offset="0.770277" stop-color="#FF4000"/>
|
|
||||||
<stop offset="1" stop-color="#8754C9"/>
|
|
||||||
</radialGradient>
|
|
||||||
<linearGradient id="paint2_linear_62_329" x1="83" y1="97" x2="100" y2="97" gradientUnits="userSpaceOnUse">
|
|
||||||
<stop stop-color="#FF4000"/>
|
|
||||||
<stop offset="1" stop-color="#8754C9"/>
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient id="paint3_linear_62_329" x1="23" y1="20" x2="23" y2="37" gradientUnits="userSpaceOnUse">
|
|
||||||
<stop stop-color="#8754C9"/>
|
|
||||||
<stop offset="1" stop-color="#FF4000"/>
|
|
||||||
</linearGradient>
|
|
||||||
<radialGradient id="paint4_radial_62_329" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(26 94) rotate(-90) scale(58)">
|
|
||||||
<stop offset="0.723929" stop-color="#FFF700"/>
|
|
||||||
<stop offset="1" stop-color="#FF9901"/>
|
|
||||||
</radialGradient>
|
|
||||||
<linearGradient id="paint5_linear_62_329" x1="68" y1="97" x2="84" y2="97" gradientUnits="userSpaceOnUse">
|
|
||||||
<stop stop-color="#FFF700"/>
|
|
||||||
<stop offset="1" stop-color="#FF9901"/>
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient id="paint6_linear_62_329" x1="23" y1="52" x2="23" y2="36" gradientUnits="userSpaceOnUse">
|
|
||||||
<stop stop-color="#FFF700"/>
|
|
||||||
<stop offset="1" stop-color="#FF9901"/>
|
|
||||||
</linearGradient>
|
|
||||||
<radialGradient id="paint7_radial_62_329" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(26 94) rotate(-90) scale(42)">
|
|
||||||
<stop offset="0.59513" stop-color="#00AAFF"/>
|
|
||||||
<stop offset="1" stop-color="#01DA40"/>
|
|
||||||
</radialGradient>
|
|
||||||
<radialGradient id="paint8_radial_62_329" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(51 97) scale(17 45.3333)">
|
|
||||||
<stop stop-color="#00AAFF"/>
|
|
||||||
<stop offset="1" stop-color="#01DA40"/>
|
|
||||||
</radialGradient>
|
|
||||||
<radialGradient id="paint9_radial_62_329" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(23 69) rotate(-90) scale(17 322.37)">
|
|
||||||
<stop stop-color="#00AAFF"/>
|
|
||||||
<stop offset="1" stop-color="#01DA40"/>
|
|
||||||
</radialGradient>
|
|
||||||
</defs>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 3.3 KiB |
|
@ -1,25 +0,0 @@
|
||||||
import { checkBalance } from "../utils/ethereum";
|
|
||||||
import type { TBalanceInputSchema } from "./balance.schema";
|
|
||||||
|
|
||||||
interface BalanceHandlerOptions {
|
|
||||||
input: TBalanceInputSchema;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const balanceHandler = async ({ input }: BalanceHandlerOptions) => {
|
|
||||||
const { address, tokenAddress, chainId } = input;
|
|
||||||
try {
|
|
||||||
const hasBalance = await checkBalance(address, tokenAddress, chainId);
|
|
||||||
|
|
||||||
return {
|
|
||||||
data: {
|
|
||||||
hasBalance,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
} catch (e) {
|
|
||||||
return {
|
|
||||||
data: {
|
|
||||||
hasBalance: false,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,19 +0,0 @@
|
||||||
import z from "zod";
|
|
||||||
|
|
||||||
export const ZBalanceInputSchema = z.object({
|
|
||||||
address: z.string(),
|
|
||||||
tokenAddress: z.string(),
|
|
||||||
chainId: z.number(),
|
|
||||||
});
|
|
||||||
|
|
||||||
export const ZBalanceOutputSchema = z.object({
|
|
||||||
data: z
|
|
||||||
.object({
|
|
||||||
hasBalance: z.boolean(),
|
|
||||||
})
|
|
||||||
.nullish(),
|
|
||||||
error: z.string().nullish(),
|
|
||||||
});
|
|
||||||
|
|
||||||
export type TBalanceOutputSchema = z.infer<typeof ZBalanceOutputSchema>;
|
|
||||||
export type TBalanceInputSchema = z.infer<typeof ZBalanceInputSchema>;
|
|
|
@ -1,42 +0,0 @@
|
||||||
import { ethers } from "ethers";
|
|
||||||
import { configureChains, createClient } from "wagmi";
|
|
||||||
|
|
||||||
import abi from "../utils/abi.json";
|
|
||||||
import { getProviders, SUPPORTED_CHAINS } from "../utils/ethereum";
|
|
||||||
import type { TContractInputSchema } from "./contract.schema";
|
|
||||||
|
|
||||||
interface ContractHandlerOptions {
|
|
||||||
input: TContractInputSchema;
|
|
||||||
}
|
|
||||||
export const contractHandler = async ({ input }: ContractHandlerOptions) => {
|
|
||||||
const { address, chainId } = input;
|
|
||||||
const { provider } = configureChains(
|
|
||||||
SUPPORTED_CHAINS.filter((chain) => chain.id === chainId),
|
|
||||||
getProviders()
|
|
||||||
);
|
|
||||||
|
|
||||||
const client = createClient({
|
|
||||||
provider,
|
|
||||||
});
|
|
||||||
|
|
||||||
const contract = new ethers.Contract(address, abi, client.provider);
|
|
||||||
|
|
||||||
try {
|
|
||||||
const name = await contract.name();
|
|
||||||
const symbol = await contract.symbol();
|
|
||||||
|
|
||||||
return {
|
|
||||||
data: {
|
|
||||||
name,
|
|
||||||
symbol: `$${symbol}`,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
} catch (e) {
|
|
||||||
return {
|
|
||||||
data: {
|
|
||||||
name: address,
|
|
||||||
symbol: "$UNKNOWN",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,19 +0,0 @@
|
||||||
import z from "zod";
|
|
||||||
|
|
||||||
export const ZContractInputSchema = z.object({
|
|
||||||
address: z.string(),
|
|
||||||
chainId: z.number(),
|
|
||||||
});
|
|
||||||
|
|
||||||
export const ZContractOutputSchema = z.object({
|
|
||||||
data: z
|
|
||||||
.object({
|
|
||||||
name: z.string(),
|
|
||||||
symbol: z.string(),
|
|
||||||
})
|
|
||||||
.nullish(),
|
|
||||||
error: z.string().nullish(),
|
|
||||||
});
|
|
||||||
|
|
||||||
export type TContractInputSchema = z.infer<typeof ZContractInputSchema>;
|
|
||||||
export type TContractOutputSchema = z.infer<typeof ZContractOutputSchema>;
|
|
|
@ -1,55 +0,0 @@
|
||||||
import publicProcedure from "@calcom/trpc/server/procedures/publicProcedure";
|
|
||||||
import { router } from "@calcom/trpc/server/trpc";
|
|
||||||
|
|
||||||
import { ZBalanceInputSchema, ZBalanceOutputSchema } from "./balance.schema";
|
|
||||||
import { ZContractInputSchema, ZContractOutputSchema } from "./contract.schema";
|
|
||||||
|
|
||||||
interface EthRouterHandlersCache {
|
|
||||||
contract?: typeof import("./contract.handler").contractHandler;
|
|
||||||
balance?: typeof import("./balance.handler").balanceHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
const UNSTABLE_HANDLER_CACHE: EthRouterHandlersCache = {};
|
|
||||||
|
|
||||||
const ethRouter = router({
|
|
||||||
// Fetch contract `name` and `symbol` or error
|
|
||||||
contract: publicProcedure
|
|
||||||
.input(ZContractInputSchema)
|
|
||||||
.output(ZContractOutputSchema)
|
|
||||||
.query(async ({ input }) => {
|
|
||||||
if (!UNSTABLE_HANDLER_CACHE.contract) {
|
|
||||||
UNSTABLE_HANDLER_CACHE.contract = await import("./contract.handler").then(
|
|
||||||
(mod) => mod.contractHandler
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unreachable code but required for type safety
|
|
||||||
if (!UNSTABLE_HANDLER_CACHE.contract) {
|
|
||||||
throw new Error("Failed to load handler");
|
|
||||||
}
|
|
||||||
|
|
||||||
return UNSTABLE_HANDLER_CACHE.contract({
|
|
||||||
input,
|
|
||||||
});
|
|
||||||
}),
|
|
||||||
// Fetch user's `balance` of either ERC-20 or ERC-721 compliant token or error
|
|
||||||
balance: publicProcedure
|
|
||||||
.input(ZBalanceInputSchema)
|
|
||||||
.output(ZBalanceOutputSchema)
|
|
||||||
.query(async ({ input }) => {
|
|
||||||
if (!UNSTABLE_HANDLER_CACHE.balance) {
|
|
||||||
UNSTABLE_HANDLER_CACHE.balance = await import("./balance.handler").then((mod) => mod.balanceHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unreachable code but required for type safety
|
|
||||||
if (!UNSTABLE_HANDLER_CACHE.balance) {
|
|
||||||
throw new Error("Failed to load handler");
|
|
||||||
}
|
|
||||||
|
|
||||||
return UNSTABLE_HANDLER_CACHE.balance({
|
|
||||||
input,
|
|
||||||
});
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
|
|
||||||
export default ethRouter;
|
|
|
@ -1,49 +0,0 @@
|
||||||
[
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "name",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"stateMutability": "view",
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "symbol",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"stateMutability": "view",
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "owner",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "balanceOf",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "balance",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"stateMutability": "view",
|
|
||||||
"type": "function"
|
|
||||||
}
|
|
||||||
]
|
|
|
@ -1,116 +0,0 @@
|
||||||
import type { Prisma } from "@prisma/client";
|
|
||||||
import { utils, Contract } from "ethers";
|
|
||||||
import { chain, configureChains, createClient } from "wagmi";
|
|
||||||
import { alchemyProvider } from "wagmi/providers/alchemy";
|
|
||||||
import { infuraProvider } from "wagmi/providers/infura";
|
|
||||||
import { publicProvider } from "wagmi/providers/public";
|
|
||||||
|
|
||||||
import { HttpError } from "@calcom/lib/http-error";
|
|
||||||
|
|
||||||
import abi from "./abi.json";
|
|
||||||
|
|
||||||
export const ETH_MESSAGE = "Connect to Cal.com";
|
|
||||||
export const SUPPORTED_CHAINS = [chain.mainnet, chain.polygon, chain.optimism, chain.arbitrum];
|
|
||||||
|
|
||||||
export const SUPPORTED_CHAINS_FOR_FORM = SUPPORTED_CHAINS.map((chain) => {
|
|
||||||
return { value: chain.id, label: chain.name };
|
|
||||||
});
|
|
||||||
|
|
||||||
// Optionally grabs Alchemy, Infura, in addition to public providers
|
|
||||||
export const getProviders = () => {
|
|
||||||
let providers = []; // eslint-disable-line prefer-const
|
|
||||||
|
|
||||||
if (process.env.ALCHEMY_API_KEY) {
|
|
||||||
providers.push(alchemyProvider({ apiKey: process.env.ALCHEMY_API_KEY }));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (process.env.INFURA_API_KEY) {
|
|
||||||
providers.push(infuraProvider({ apiKey: process.env.INFURA_API_KEY }));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Public provider will always be available as fallback, but having at least
|
|
||||||
// on of either Infura or Alchemy providers is highly recommended
|
|
||||||
providers.push(publicProvider());
|
|
||||||
|
|
||||||
return providers;
|
|
||||||
};
|
|
||||||
|
|
||||||
type VerifyResult = {
|
|
||||||
hasBalance: boolean;
|
|
||||||
address: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Checks balance for any contract that implements the abi (NFT, ERC20, etc)
|
|
||||||
export const checkBalance = async (
|
|
||||||
walletAddress: string,
|
|
||||||
tokenAddress: string,
|
|
||||||
chainId: number
|
|
||||||
): Promise<boolean> => {
|
|
||||||
const { provider } = configureChains(
|
|
||||||
SUPPORTED_CHAINS.filter((chain) => chain.id === chainId),
|
|
||||||
getProviders()
|
|
||||||
);
|
|
||||||
|
|
||||||
const client = createClient({
|
|
||||||
provider,
|
|
||||||
});
|
|
||||||
|
|
||||||
const contract = new Contract(tokenAddress, abi, client.provider);
|
|
||||||
const userAddress = utils.getAddress(walletAddress);
|
|
||||||
const balance = await contract.balanceOf(userAddress);
|
|
||||||
|
|
||||||
return !balance.isZero();
|
|
||||||
};
|
|
||||||
|
|
||||||
// Extracts wallet address from a signed message and checks balance
|
|
||||||
export const verifyEthSig = async (
|
|
||||||
sig: string,
|
|
||||||
tokenAddress: string,
|
|
||||||
chainId: number
|
|
||||||
): Promise<VerifyResult> => {
|
|
||||||
const address = utils.verifyMessage(ETH_MESSAGE, sig);
|
|
||||||
const hasBalance = await checkBalance(address, tokenAddress, chainId);
|
|
||||||
|
|
||||||
return {
|
|
||||||
address,
|
|
||||||
hasBalance,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
type HandleEthSignatureInput = {
|
|
||||||
smartContractAddress?: string;
|
|
||||||
blockchainId?: number;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Handler used in `/book/event` API
|
|
||||||
export const handleEthSignature = async (
|
|
||||||
_metadata: Prisma.JsonValue,
|
|
||||||
ethSignature?: string
|
|
||||||
): Promise<string | undefined> => {
|
|
||||||
if (!_metadata) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const metadata = _metadata as HandleEthSignatureInput;
|
|
||||||
|
|
||||||
if (metadata) {
|
|
||||||
if (metadata.blockchainId && metadata.smartContractAddress) {
|
|
||||||
if (!ethSignature) {
|
|
||||||
throw new HttpError({ statusCode: 400, message: "Ethereum signature required." });
|
|
||||||
}
|
|
||||||
|
|
||||||
const { address, hasBalance } = await verifyEthSig(
|
|
||||||
ethSignature,
|
|
||||||
metadata.smartContractAddress as string,
|
|
||||||
metadata.blockchainId as number
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!hasBalance) {
|
|
||||||
throw new HttpError({ statusCode: 400, message: "The wallet doesn't contain enough tokens." });
|
|
||||||
} else {
|
|
||||||
return address;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return undefined;
|
|
||||||
};
|
|
|
@ -1,12 +0,0 @@
|
||||||
import { z } from "zod";
|
|
||||||
|
|
||||||
import { eventTypeAppCardZod } from "../eventTypeAppCardZod";
|
|
||||||
|
|
||||||
export const appDataSchema = eventTypeAppCardZod.merge(
|
|
||||||
z.object({
|
|
||||||
smartContractAddress: z.string().optional(),
|
|
||||||
blockchainId: z.number().optional(),
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
export const appKeysSchema = z.object({});
|
|
|
@ -13,7 +13,6 @@ import { metadata as GoogleMeetMetadata } from "@calcom/app-store/googlevideo/_m
|
||||||
import type { LocationObject } from "@calcom/app-store/locations";
|
import type { LocationObject } from "@calcom/app-store/locations";
|
||||||
import { getLocationValueForDB } from "@calcom/app-store/locations";
|
import { getLocationValueForDB } from "@calcom/app-store/locations";
|
||||||
import { MeetLocationType } from "@calcom/app-store/locations";
|
import { MeetLocationType } from "@calcom/app-store/locations";
|
||||||
import { handleEthSignature } from "@calcom/app-store/rainbow/utils/ethereum";
|
|
||||||
import type { EventTypeAppsList } from "@calcom/app-store/utils";
|
import type { EventTypeAppsList } from "@calcom/app-store/utils";
|
||||||
import { getAppFromSlug, getEventTypeAppData } from "@calcom/app-store/utils";
|
import { getAppFromSlug, getEventTypeAppData } from "@calcom/app-store/utils";
|
||||||
import { cancelScheduledJobs, scheduleTrigger } from "@calcom/app-store/zapier/lib/nodeScheduler";
|
import { cancelScheduledJobs, scheduleTrigger } from "@calcom/app-store/zapier/lib/nodeScheduler";
|
||||||
|
@ -817,12 +816,6 @@ async function handler(
|
||||||
users = [...availableUsers.filter((user) => user.isFixed), ...luckyUsers];
|
users = [...availableUsers.filter((user) => user.isFixed), ...luckyUsers];
|
||||||
}
|
}
|
||||||
|
|
||||||
const rainbowAppData = getEventTypeAppData(eventType, "rainbow") || {};
|
|
||||||
|
|
||||||
// @TODO: use the returned address somewhere in booking creation?
|
|
||||||
// const address: string | undefined = await ...
|
|
||||||
await handleEthSignature(rainbowAppData, reqBody.ethSignature);
|
|
||||||
|
|
||||||
const [organizerUser] = users;
|
const [organizerUser] = users;
|
||||||
const tOrganizer = await getTranslation(organizerUser?.locale ?? "en", "common");
|
const tOrganizer = await getTranslation(organizerUser?.locale ?? "en", "common");
|
||||||
// use host default
|
// use host default
|
||||||
|
|
|
@ -257,7 +257,6 @@ export default async function getEventTypeById({
|
||||||
)?.default_currency || "usd",
|
)?.default_currency || "usd",
|
||||||
},
|
},
|
||||||
giphy: getEventTypeAppData(eventTypeWithParsedMetadata, "giphy", true),
|
giphy: getEventTypeAppData(eventTypeWithParsedMetadata, "giphy", true),
|
||||||
rainbow: getEventTypeAppData(eventTypeWithParsedMetadata, "rainbow", true),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO: How to extract metadata schema from _EventTypeModel to be able to parse it?
|
// TODO: How to extract metadata schema from _EventTypeModel to be able to parse it?
|
||||||
|
|
|
@ -42,12 +42,6 @@
|
||||||
"slug": "campfire",
|
"slug": "campfire",
|
||||||
"type": "campfire_video"
|
"type": "campfire_video"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"dirName": "rainbow",
|
|
||||||
"categories": ["web3"],
|
|
||||||
"slug": "rainbow",
|
|
||||||
"type": "rainbow_web3"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"dirName": "raycast",
|
"dirName": "raycast",
|
||||||
"categories": ["other"],
|
"categories": ["other"],
|
||||||
|
|
|
@ -174,7 +174,6 @@ export const bookingCreateBodySchema = z.object({
|
||||||
metadata: z.record(z.string()),
|
metadata: z.record(z.string()),
|
||||||
hasHashedBookingLink: z.boolean().optional(),
|
hasHashedBookingLink: z.boolean().optional(),
|
||||||
hashedLink: z.string().nullish(),
|
hashedLink: z.string().nullish(),
|
||||||
ethSignature: z.string().optional(),
|
|
||||||
seatReferenceUid: z.string().optional(),
|
seatReferenceUid: z.string().optional(),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,6 @@ const ENDPOINTS = [
|
||||||
"availability",
|
"availability",
|
||||||
"bookings",
|
"bookings",
|
||||||
"deploymentSetup",
|
"deploymentSetup",
|
||||||
"eth",
|
|
||||||
"eventTypes",
|
"eventTypes",
|
||||||
"features",
|
"features",
|
||||||
"insights",
|
"insights",
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import ethRouter from "@calcom/app-store/rainbow/trpc/router";
|
|
||||||
import app_RoutingForms from "@calcom/app-store/routing-forms/trpc-router";
|
import app_RoutingForms from "@calcom/app-store/routing-forms/trpc-router";
|
||||||
import { userAdminRouter } from "@calcom/features/ee/users/server/trpc-router";
|
import { userAdminRouter } from "@calcom/features/ee/users/server/trpc-router";
|
||||||
import { featureFlagRouter } from "@calcom/features/flags/server/router";
|
import { featureFlagRouter } from "@calcom/features/flags/server/router";
|
||||||
|
@ -43,7 +42,6 @@ export const viewerRouter = mergeRouters(
|
||||||
// NOTE: Add all app related routes in the bottom till the problem described in @calcom/app-store/trpc-routers.ts is solved.
|
// NOTE: Add all app related routes in the bottom till the problem described in @calcom/app-store/trpc-routers.ts is solved.
|
||||||
// After that there would just one merge call here for all the apps.
|
// After that there would just one merge call here for all the apps.
|
||||||
appRoutingForms: app_RoutingForms,
|
appRoutingForms: app_RoutingForms,
|
||||||
eth: ethRouter,
|
|
||||||
features: featureFlagRouter,
|
features: featureFlagRouter,
|
||||||
appsRouter,
|
appsRouter,
|
||||||
users: userAdminRouter,
|
users: userAdminRouter,
|
||||||
|
|
|
@ -174,7 +174,6 @@
|
||||||
},
|
},
|
||||||
"globalDependencies": ["yarn.lock"],
|
"globalDependencies": ["yarn.lock"],
|
||||||
"globalEnv": [
|
"globalEnv": [
|
||||||
"ALCHEMY_API_KEY",
|
|
||||||
"ANALYZE",
|
"ANALYZE",
|
||||||
"API_KEY_PREFIX",
|
"API_KEY_PREFIX",
|
||||||
"APP_USER_NAME",
|
"APP_USER_NAME",
|
||||||
|
@ -202,7 +201,6 @@
|
||||||
"HEROKU_APP_NAME",
|
"HEROKU_APP_NAME",
|
||||||
"HUBSPOT_CLIENT_ID",
|
"HUBSPOT_CLIENT_ID",
|
||||||
"HUBSPOT_CLIENT_SECRET",
|
"HUBSPOT_CLIENT_SECRET",
|
||||||
"INFURA_API_KEY",
|
|
||||||
"INTEGRATION_TEST_MODE",
|
"INTEGRATION_TEST_MODE",
|
||||||
"IP_BANLIST",
|
"IP_BANLIST",
|
||||||
"LARK_OPEN_APP_ID",
|
"LARK_OPEN_APP_ID",
|
||||||
|
|
Loading…
Reference in New Issue
Block a user