fix: remove duplicate value i18n (#8547)

* fix: remove duplicate value i18n

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

* feat: add duplicate check in next config

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

* fix: remove more duplicates

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

* fix: description on two factor page

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

* Update apps/web/next.config.js

* Update apps/web/next.config.js

---------

Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
This commit is contained in:
Udit Takkar 2023-06-08 19:07:54 +05:30 committed by GitHub
parent 4417097f97
commit 9b28b7f78a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
33 changed files with 57 additions and 91 deletions

View File

@ -24,7 +24,7 @@ export function AvailableEventLocations({ locations }: { locations: Props["event
}
const translateAbleKeys = [
"attendee_in_person",
"in_person_attendee_address",
"in_person",
"attendee_phone_number",
"link_meeting",

View File

@ -55,7 +55,7 @@ export const RescheduleDialog = (props: IRescheduleDialog) => {
</p>
<TextArea
data-testid="reschedule_reason"
name={t("reschedule_reason")}
name={t("reason_for_reschedule")}
value={rescheduleReason}
onChange={(e) => setRescheduleReason(e.target.value)}
className="mb-5 sm:mb-6"

View File

@ -185,7 +185,7 @@ function EventTypeSingleLayout({
info:
isManagedEventType || isChildrenManagedEventType
? eventType.schedule === null
? "member_default_schedule"
? "members_default_schedule"
: isChildrenManagedEventType
? `${
eventType.scheduleName

View File

@ -2,7 +2,7 @@ require("dotenv").config({ path: "../../.env" });
const CopyWebpackPlugin = require("copy-webpack-plugin");
const os = require("os");
const glob = require("glob");
const englishTranslation = require("./public/static/locales/en/common.json");
const { withAxiom } = require("next-axiom");
const { i18n } = require("./next-i18next.config");
@ -57,6 +57,20 @@ if (process.env.GOOGLE_API_CREDENTIALS && !validJson(process.env.GOOGLE_API_CRED
);
}
const informAboutDuplicateTranslations = () => {
const valueSet = new Set();
for (const key in englishTranslation) {
if (valueSet.has(englishTranslation[key])) {
console.warn("\x1b[33mDuplicate value found in:", "\x1b[0m", key);
} else {
valueSet.add(englishTranslation[key]);
}
}
};
informAboutDuplicateTranslations();
const plugins = [];
if (process.env.ANALYZE === "true") {
// only load dependency if env `ANALYZE` was set

View File

@ -182,7 +182,7 @@ const IntegrationsList = ({ data, handleDisconnect, variant }: IntegrationsListP
setBulkUpdateModal(true);
}
}}>
{t("change_default_conferencing_app")}
{t("set_as_default")}
</DropdownItem>
</DropdownMenuItem>
)}

View File

@ -363,7 +363,7 @@ export default function Success(props: SuccessProps) {
id="modal-headline">
{needsConfirmation && !isCancelled
? props.recurringBookings
? t("submitted_recurring")
? t("booking_submitted_recurring")
: t("booking_submitted")
: isCancelled
? seatReferenceUid

View File

@ -25,7 +25,7 @@ const Heading = () => {
return (
<div className="min-w-52 hidden md:block">
<h3 className="font-cal max-w-28 sm:max-w-72 md:max-w-80 text-emphasis truncate text-xl font-semibold tracking-wide xl:max-w-full">
{t("analytics_for_organisation")}
{t("insights")}
</h3>
<p className="text-default hidden text-sm md:block">{t("subtitle_analytics")}</p>
</div>

View File

@ -47,15 +47,13 @@ const BillingView = () => {
<>
<Meta title={t("billing")} description={t("manage_billing_description")} />
<div className="space-y-6 text-sm sm:space-y-8">
<CtaRow
title={t("billing_manage_details_title")}
description={t("billing_manage_details_description")}>
<CtaRow title={t("view_and_manage_billing_details")} description={t("view_and_edit_billing_details")}>
<Button color="primary" href={billingHref} target="_blank" EndIcon={ExternalLink}>
{t("billing_portal")}
</Button>
</CtaRow>
<CtaRow title={t("billing_help_title")} description={t("billing_help_description")}>
<CtaRow title={t("need_anything_else")} description={t("further_billing_help")}>
<Button color="secondary" onClick={onContactSupportClick}>
{t("contact_support")}
</Button>

View File

@ -129,14 +129,14 @@ const AppearanceView = () => {
<ThemeLabel
variant="light"
value="light"
label={t("theme_light")}
label={t("light")}
defaultChecked={user.theme === "light"}
register={formMethods.register}
/>
<ThemeLabel
variant="dark"
value="dark"
label={t("theme_dark")}
label={t("dark")}
defaultChecked={user.theme === "dark"}
register={formMethods.register}
/>

View File

@ -149,7 +149,7 @@ const ConferencingLayout = () => {
});
}
}}>
{t("change_default_conferencing_app")}
{t("set_as_default")}
</DropdownItem>
</DropdownMenuItem>
)}

View File

@ -36,7 +36,7 @@ const TwoFactorAuthView = () => {
const isCalProvider = user?.identityProvider === "CAL";
return (
<>
<Meta title={t("2fa")} description={t("2fa_description")} />
<Meta title={t("2fa")} description={t("set_up_two_factor_authentication")} />
{!isCalProvider && <Alert severity="neutral" message={t("2fa_disabled")} />}
<div className="mt-6 flex items-start space-x-4">
<Switch

View File

@ -15,7 +15,6 @@
"check_your_email": "Check your email",
"verify_email_page_body": "We've sent an email to {{email}}. It is important to verify your email address to guarantee the best email and calendar deliverability from {{appName}}.",
"verify_email_banner_body": "Please verify your email adress to guarantee the best email and calendar deliverability from {{appName}}.",
"verify_email_banner_button": "Send email",
"verify_email_email_header": "Verify your email address",
"verify_email_email_button": "Verify email",
"verify_email_email_body": "Please verify your email address by clicking the button below.",
@ -87,13 +86,11 @@
"your_meeting_has_been_booked": "Your meeting has been booked",
"event_type_has_been_rescheduled_on_time_date": "Your {{title}} has been rescheduled to {{date}}.",
"event_has_been_rescheduled": "Updated - Your event has been rescheduled",
"request_reschedule_title_attendee": "Request to reschedule your booking",
"request_reschedule_subtitle": "{{organizer}} has cancelled the booking and requested you to pick another time.",
"request_reschedule_title_organizer": "You have requested {{attendee}} to reschedule",
"request_reschedule_subtitle_organizer": "You have cancelled the booking and {{attendee}} should pick a new booking time with you.",
"rescheduled_event_type_subject": "Request for reschedule sent: {{eventType}} with {{name}} at {{date}}",
"requested_to_reschedule_subject_attendee": "Action Required Reschedule: Please book a new time for {{eventType}} with {{name}}",
"reschedule_reason": "Reason for reschedule",
"hi_user_name": "Hi {{name}}",
"ics_event_title": "{{eventType}} with {{name}}",
"new_event_subject": "New event: {{attendeeName}} - {{date}} - {{eventType}}",
@ -262,7 +259,6 @@
"welcome_to_calcom": "Welcome to {{appName}}",
"welcome_instructions": "Tell us what to call you and let us know what timezone youre in. Youll be able to edit this later.",
"connect_caldav": "Connect to CalDav (Beta)",
"credentials_stored_and_encrypted": "Your credentials will be stored and encrypted.",
"connect": "Connect",
"try_for_free": "Try it for free",
"create_booking_link_with_calcom": "Create your own booking link with {{appName}}",
@ -283,7 +279,6 @@
"user_needs_to_confirm_or_reject_booking_recurring": "{{user}} still needs to confirm or reject each booking of the recurring meeting.",
"meeting_is_scheduled": "This meeting is scheduled",
"meeting_is_scheduled_recurring": "The recurring events are scheduled",
"submitted_recurring": "Your recurring meeting has been submitted",
"booking_submitted": "Your booking has been submitted",
"booking_submitted_recurring": "Your recurring meeting has been submitted",
"booking_confirmed": "Your booking has been confirmed",
@ -341,7 +336,6 @@
"booking_already_accepted_rejected": "This booking was already accepted or rejected",
"go_back_home": "Go back home",
"or_go_back_home": "Or go back home",
"no_availability": "Unavailable",
"no_meeting_found": "No Meeting Found",
"no_meeting_found_description": "This meeting does not exist. Contact the meeting owner for an updated link.",
"no_status_bookings_yet": "No {{status}} bookings",
@ -473,7 +467,6 @@
"invalid_password_hint": "The password must be a minimum of {{passwordLength}} characters long containing at least one number and have a mixture of uppercase and lowercase letters",
"incorrect_password": "Password is incorrect.",
"incorrect_username_password": "Username or password is incorrect.",
"24_h": "24h",
"use_setting": "Use setting",
"am_pm": "am/pm",
"time_options": "Time options",
@ -516,15 +509,11 @@
"booking_confirmation": "Confirm your {{eventTypeTitle}} with {{profileName}}",
"booking_reschedule_confirmation": "Reschedule your {{eventTypeTitle}} with {{profileName}}",
"in_person_meeting": "In-person meeting",
"attendee_in_person": "In Person (Attendee Address)",
"in_person": "In Person (Organizer Address)",
"link_meeting": "Link meeting",
"phone_call": "Attendee Phone Number",
"your_number": "Your phone number",
"phone_number": "Phone Number",
"attendee_phone_number": "Attendee Phone Number",
"organizer_phone_number": "Organizer Phone Number",
"host_phone_number": "Your Phone Number",
"enter_phone_number": "Enter phone number",
"reschedule": "Reschedule",
"reschedule_this": "Reschedule instead",
@ -650,9 +639,6 @@
"new_event_type_btn": "New event type",
"new_event_type_heading": "Create your first event type",
"new_event_type_description": "Event types enable you to share links that show available times on your calendar and allow people to make bookings with you.",
"new_event_title": "Add a new event type",
"new_team_event": "Add a new team event type",
"new_event_description": "Create a new event type for people to book times with.",
"event_type_created_successfully": "{{eventTypeTitle}} event type created successfully",
"event_type_updated_successfully": "{{eventTypeTitle}} event type updated successfully",
"event_type_deleted_successfully": "Event type deleted successfully",
@ -821,7 +807,6 @@
"automation": "Automation",
"configure_how_your_event_types_interact": "Configure how your event types should interact with your calendars.",
"toggle_calendars_conflict": "Toggle the calendars you want to check for conflicts to prevent double bookings.",
"select_destination_calendar": "Create events on",
"connect_additional_calendar": "Connect additional calendar",
"calendar_updated_successfully": "Calendar updated successfully",
"conferencing": "Conferencing",
@ -855,7 +840,6 @@
"number_apps_other": "{{count}} Apps",
"trending_apps": "Trending Apps",
"most_popular": "Most Popular",
"explore_apps": "{{category}} apps",
"installed_apps": "Installed Apps",
"free_to_use_apps": "Free",
"no_category_apps": "No {{category}} apps",
@ -867,7 +851,6 @@
"no_category_apps_description_other": "Add any other type of app to do all sorts of things",
"no_category_apps_description_web3": "Add a web3 app for your booking pages",
"installed_app_calendar_description": "Set the calendars to check for conflicts to prevent double bookings.",
"installed_app_conferencing_description": "Add your favourite video conferencing apps for your meetings",
"installed_app_payment_description": "Configure which payment processing services to use when charging your clients.",
"installed_app_analytics_description": "Configure which analytics apps to use for your booking pages",
"installed_app_other_description": "All your installed apps from other categories.",
@ -893,7 +876,6 @@
"terms_of_service": "Terms of Service",
"remove": "Remove",
"add": "Add",
"installed_one": "Installed",
"installed_other": "{{count}} installed",
"verify_wallet": "Verify Wallet",
"create_events_on": "Create events on",
@ -921,7 +903,6 @@
"availability_updated_successfully": "{{scheduleName}} schedule updated successfully",
"schedule_deleted_successfully": "Schedule deleted successfully",
"default_schedule_name": "Working Hours",
"member_default_schedule":"Member's default schedule",
"new_schedule_heading": "Create an availability schedule",
"new_schedule_description": "Creating availability schedules allows you to manage availability across event types. They can be applied to one or more event types.",
"requires_ownership_of_a_token": "Requires ownership of a token belonging to the following address:",
@ -958,8 +939,6 @@
"api_key_no_note": "Nameless API key",
"api_key_never_expires": "This API key has no expiration date",
"edit_api_key": "Edit API key",
"never_expire_key": "Never expires",
"delete_api_key": "Revoke API key",
"success_api_key_created": "API key created successfully",
"success_api_key_edited": "API key updated successfully",
"create": "Create",
@ -1000,7 +979,6 @@
"event_location_changed": "Updated - Your event changed the location",
"location_changed_event_type_subject": "Location Changed: {{eventType}} with {{name}} at {{date}}",
"current_location": "Current Location",
"user_phone": "Your phone number",
"new_location": "New Location",
"session": "Session",
"session_description": "Control your account session",
@ -1026,7 +1004,6 @@
"zapier_setup_instructions": "<0>Log into your Zapier account and create a new Zap.</0><1>Select Cal.com as your Trigger app. Also choose a Trigger event.</1><2>Choose your account and then enter your Unique API Key.</2><3>Test your Trigger.</3><4>You're set!</4>",
"install_zapier_app": "Please first install the Zapier App in the app store.",
"connect_apple_server": "Connect to Apple Server",
"connect_caldav_server": "Connect to CalDav (Beta)",
"calendar_url": "Calendar URL",
"apple_server_generate_password": "Generate an app specific password to use with {{appName}} at",
"credentials_stored_encrypted": "Your credentials will be stored and encrypted.",
@ -1058,7 +1035,6 @@
"go_to": "Go to: ",
"zapier_invite_link": "Zapier Invite Link",
"meeting_url_provided_after_confirmed": "A Meeting URL will be created once the event is confirmed.",
"attendees_name": "Attendee's name",
"dynamically_display_attendee_or_organizer": "Dynamically display the name of your attendee for you, or your name if it's viewed by your attendee",
"event_location": "Event's location",
"reschedule_optional": "Reason for rescheduling (optional)",
@ -1133,7 +1109,6 @@
"add_exchange2016": "Connect Exchange 2016 Server",
"custom_template": "Custom template",
"email_body": "Email body",
"subject": "Email subject",
"text_message": "Text message",
"specific_issue": "Have a specific issue?",
"browse_our_docs": "browse our docs",
@ -1161,12 +1136,9 @@
"new_seat_title": "Someone has added themselves to an event",
"variable": "Variable",
"event_name_variable": "Event name",
"organizer_name_variable": "Organizer",
"attendee_name_variable": "Attendee",
"event_date_variable": "Event date",
"event_time_variable": "Event time",
"location_variable": "Location",
"additional_notes_variable": "Additional notes",
"app_upgrade_description": "In order to use this feature, you need to upgrade to a Pro account.",
"invalid_number": "Invalid phone number",
"navigate": "Navigate",
@ -1260,7 +1232,6 @@
"recurring_event_tab_description": "Set up a repeating schedule",
"today": "today",
"appearance": "Appearance",
"appearance_subtitle": "Manage settings for your booking appearance",
"my_account": "My account",
"general": "General",
"calendars": "Calendars",
@ -1280,7 +1251,7 @@
"conferencing_description": "Add your favourite video conferencing apps for your meetings",
"add_conferencing_app": "Add Conferencing App",
"password_description": "Manage settings for your account passwords",
"2fa_description": "Manage settings for your account passwords",
"set_up_two_factor_authentication": "Set up your Two-factor authentication",
"we_just_need_basic_info": "We just need some basic info to get your profile setup.",
"skip": "Skip",
"do_this_later": "Do this later",
@ -1304,7 +1275,6 @@
"event_date_info": "The event date",
"event_time_info": "The event start time",
"location_info": "The location of the event",
"organizer_name_info": "Your name",
"additional_notes_info": "The additional notes of booking",
"attendee_name_info": "The person booking's name",
"to": "To",
@ -1369,8 +1339,6 @@
"copy_link_to_form": "Copy link to form",
"theme": "Theme",
"theme_applies_note": "This only applies to your public booking pages",
"theme_light": "Light",
"theme_dark": "Dark",
"theme_system": "System default",
"add_a_team": "Add a team",
"add_webhook_description": "Receive meeting data in real-time when something happens in {{appName}}",
@ -1379,7 +1347,6 @@
"enable_webhook": "Enable Webhook",
"add_webhook": "Add Webhook",
"webhook_edited_successfully": "Webhook saved",
"webhooks_description": "Receive meeting data in real-time when something happens in {{appName}}",
"api_keys_description": "Generate API keys for accessing your own account",
"new_api_key": "New API key",
"active": "active",
@ -1421,11 +1388,7 @@
"billing_freeplan_title": "You're currently on the FREE plan",
"billing_freeplan_description": "We work better in teams. Extend your workflows with round-robin and collective events and make advanced routing forms",
"billing_freeplan_cta": "Try now",
"billing_manage_details_title": "View and manage your billing details",
"billing_manage_details_description": "View and edit your billing details, as well as cancel your subscription.",
"billing_portal": "Billing portal",
"billing_help_title": "Need anything else?",
"billing_help_description": "If you need any further help with billing, our support team are here to help.",
"billing_help_cta": "Contact support",
"ignore_special_characters_booking_questions": "Ignore special characters in your booking question identifier. Use only letters and numbers",
"retry": "Retry",
@ -1433,7 +1396,6 @@
"calendar_connection_fail": "Calendar connection failed",
"booking_confirmation_success": "Booking confirmation succeeded",
"booking_rejection_success": "Booking rejection succeeded",
"booking_confirmation_fail": "Booking confirmation failed",
"booking_tentative": "This booking is tentative",
"booking_accept_intent": "Oops, I want to accept",
"we_wont_show_again": "We won't show this again",
@ -1456,7 +1418,6 @@
"new_event_type_availability": "{{eventTypeTitle}} Availability",
"error_editing_availability": "Error editing availability",
"dont_have_permission": "You don't have permission to access this resource.",
"saml_config": "Single Sign-On",
"saml_configuration_placeholder": "Please paste the SAML metadata from your Identity Provider here",
"saml_email_required": "Please enter an email so we can find your SAML Identity Provider",
"saml_sp_title": "Service Provider Details",
@ -1465,7 +1426,6 @@
"saml_sp_entity_id": "SP Entity ID",
"saml_sp_acs_url_copied": "ACS URL copied!",
"saml_sp_entity_id_copied": "SP Entity ID copied!",
"saml_btn_configure": "Configure",
"add_calendar": "Add Calendar",
"limit_future_bookings": "Limit future bookings",
"limit_future_bookings_description": "Limit how far in the future this event can be booked",
@ -1648,7 +1608,6 @@
"delete_sso_configuration_confirmation": "Yes, delete {{connectionType}} configuration",
"delete_sso_configuration_confirmation_description": "Are you sure you want to delete the {{connectionType}} configuration? Your team members who use {{connectionType}} login will no longer be able to access Cal.com.",
"organizer_timezone": "Organizer timezone",
"email_no_user_cta": "Create your account",
"email_user_cta": "View Invitation",
"email_no_user_invite_heading": "Youve been invited to join a team on {{appName}}",
"email_no_user_invite_subheading": "{{invitedBy}} has invited you to join their team on {{appName}}. {{appName}} is the event-juggling scheduler that enables you and your team to schedule meetings without the email tennis.",
@ -1678,7 +1637,6 @@
"create_event_on": "Create event on",
"default_app_link_title": "Set a default app link",
"default_app_link_description": "Setting a default app link allows all newly created event types to use the app link you set.",
"change_default_conferencing_app": "Set as default",
"organizer_default_conferencing_app": "Organizer's default app",
"under_maintenance": "Down for maintenance",
"under_maintenance_description": "The {{appName}} team are performing scheduled maintenance. If you have any questions, please contact support.",
@ -1694,8 +1652,7 @@
"booking_confirmation_failed": "Booking confirmation failed",
"not_enough_seats": "Not enough seats",
"form_builder_field_already_exists": "A field with this name already exists",
"form_builder_field_add_subtitle": "Customize the questions asked on the booking page",
"show_on_booking_page": "Show on booking page",
"show_on_booking_page":"Show on booking page",
"get_started_zapier_templates": "Get started with Zapier templates",
"team_is_unpublished": "{{team}} is unpublished",
"team_is_unpublished_description": "This team link is currently not available. Please contact the team owner or ask them publish it.",
@ -1747,7 +1704,6 @@
"verification_code": "Verification code",
"can_you_try_again": "Can you try again with a different time?",
"verify": "Verify",
"timezone_variable": "Timezone",
"timezone_info": "The timezone of the person receiving",
"event_end_time_variable": "Event end time",
"event_end_time_info": "The event end time",
@ -1796,7 +1752,6 @@
"events_rescheduled": "Events Rescheduled",
"from_last_period": "from last period",
"from_to_date_period": "From: {{startDate}} To: {{endDate}}",
"analytics_for_organisation": "Insights",
"subtitle_analytics": "Learn more about your team's activity",
"redirect_url_warning": "Adding a redirect will disable the success page. Make sure to mention \"Booking Confirmed\" on your custom success page.",
"event_trends": "Event Trends",
@ -1836,7 +1791,6 @@
"one_day": "1 day",
"seven_days": "7 days",
"thirty_days": "30 days",
"never_expire": "Never expires",
"team_invite_received": "You have been invited to join {{teamName}}",
"currency_string": "{{amount, currency}}",
"charge_card_dialog_body": "You are about to charge the attendee {{amount, currency}}. Are you sure you want to continue?",

View File

@ -33,7 +33,7 @@ export default function CalDavCalendarSetup() {
/>
</div>
<div className="flex w-10/12 flex-col">
<h1 className="text-default">{t("connect_caldav_server")}</h1>
<h1 className="text-default">{t("connect_caldav")}</h1>
<div className="mt-1 text-sm">{t("credentials_stored_encrypted")}</div>
<div className="my-2 mt-3">
<Form

View File

@ -74,7 +74,7 @@ export const defaultLocations: DefaultEventLocationType[] = [
{
default: true,
type: DefaultEventLocationTypeEnum.AttendeeInPerson,
label: "attendee_in_person",
label: "in_person_attendee_address",
variable: "address",
organizerInputType: null,
messageForOrganizer: "Cal will ask your invitee to enter an address before scheduling.",

View File

@ -8,7 +8,7 @@ export const AttendeeWasRequestedToRescheduleEmail = (
return (
<OrganizerScheduledEmail
t={t}
title="request_reschedule_title_attendee"
title="request_reschedule_booking"
subtitle={
<>
{t("request_reschedule_subtitle", {

View File

@ -67,7 +67,7 @@ export const BaseScheduledEmail = (
<Info
label={t(
props.calEvent.cancellationReason.startsWith("$RCH$")
? "reschedule_reason"
? "reason_for_reschedule"
: "cancellation_reason"
)}
description={

View File

@ -59,7 +59,7 @@ export const TeamInviteEmail = (
</p>
<div style={{ display: "flex", justifyContent: "center" }}>
<CallToAction
label={props.language(props.isCalcomMember ? "email_user_cta" : "email_not_cal_member_cta")}
label={props.language(props.isCalcomMember ? "email_user_cta" : "create_your_account")}
href={props.joinLink}
endIconName="linkIcon"
/>

View File

@ -86,7 +86,7 @@ export default class AttendeeWasRequestedToRescheduleEmail extends OrganizerSche
protected getTextBody(): string {
return `
${this.t("request_reschedule_title_attendee")}
${this.t("request_reschedule_booking")}
${this.t("request_reschedule_subtitle", {
organizer: this.calEvent.organizer.name,
})},

View File

@ -241,7 +241,7 @@ export const ensureBookingInputsHaveSystemFields = ({
],
},
{
defaultLabel: "reschedule_reason",
defaultLabel: "reason_for_reschedule",
type: "textarea",
editable: "system-but-optional",
name: "rescheduleReason",

View File

@ -66,7 +66,7 @@ const DestinationCalendarSelector = ({
width: "100%",
display: "flex",
":before": {
content: `'${t("select_destination_calendar")}:'`,
content: `'${t("create_events_on")}:'`,
display: "block",
marginRight: 8,
},
@ -121,12 +121,12 @@ const DestinationCalendarSelector = ({
const queryDestinationCalendar = query.data.destinationCalendar;
return (
<div className="relative" title={`${t("select_destination_calendar")}: ${selectedOption?.label || ""}`}>
<div className="relative" title={`${t("create_events_on")}: ${selectedOption?.label || ""}`}>
<Select
name="primarySelectedCalendar"
placeholder={
!hidePlaceholder ? (
`${t("select_destination_calendar")}`
`${t("create_events_on")}`
) : (
<span className="text-default min-w-0 overflow-hidden truncate whitespace-nowrap">
{t("default_calendar_selected")}{" "}

View File

@ -81,7 +81,7 @@ export default function ApiKeyDialogForm({
</div>
<span className="text-muted text-sm">
{apiKeyDetails.neverExpires
? t("never_expire_key")
? t("never_expires")
: `${t("expires")} ${apiKeyDetails?.expiresAt?.toLocaleDateString()}`}
</span>
</div>
@ -140,7 +140,7 @@ export default function ApiKeyDialogForm({
control={form.control}
render={({ field: { onChange, value } }) => (
<Switch
label={t("never_expire_key")}
label={t("never_expires")}
onCheckedChange={onChange}
checked={value}
disabled={!!defaultValues}

View File

@ -28,7 +28,7 @@ export default function SSOConfiguration({ teamId }: { teamId: number | null })
if (errorMessage) {
return (
<>
<Meta title={t("saml_config")} description={t("saml_description")} />
<Meta title={t("sso_configuration")} description={t("saml_description")} />
<Alert severity="warning" message={t(errorMessage)} className="mb-4 " />
</>
);

View File

@ -49,7 +49,7 @@ export default function InviteLinkSettingsModal(props: InvitationLinkSettingsMod
{ value: 1, label: t("one_day") },
{ value: 7, label: t("seven_days") },
{ value: 30, label: t("thirty_days") },
{ value: undefined, label: t("never_expire") },
{ value: undefined, label: t("never_expires") },
];
}, [t]);

View File

@ -105,7 +105,7 @@ export default function TeamList(props: Props) {
icon={<Edit className="h-5 w-5 text-purple-700" />}
variant="basic"
title={t("appearance")}
description={t("appearance_subtitle")}
description={t("appearance_description")}
actionButton={{
href: "/settings/teams/" + team.id + "/appearance",
child: t("edit"),

View File

@ -120,14 +120,14 @@ const ProfileView = () => {
<ThemeLabel
variant="light"
value="light"
label={t("theme_light")}
label={t("light")}
defaultChecked={team.theme === "light"}
register={form.register}
/>
<ThemeLabel
variant="dark"
value="dark"
label={t("theme_dark")}
label={t("dark")}
defaultChecked={team.theme === "dark"}
register={form.register}
/>

View File

@ -17,8 +17,8 @@ const BillingView = () => {
<Meta title={t("team_billing")} description={t("team_billing_description")} />
<div className="text-default flex flex-col text-sm sm:flex-row">
<div>
<h2 className="font-medium">{t("billing_manage_details_title")}</h2>
<p>{t("billing_manage_details_description")}</p>
<h2 className="font-medium">{t("view_and_manage_billing_details")}</h2>
<p>{t("view_and_edit_billing_details")}</p>
</div>
<div className="flex-shrink-0 pt-3 sm:ml-auto sm:pt-0 sm:pl-3">
<Button color="primary" href={billingHref} target="_blank" EndIcon={ExternalLink}>

View File

@ -86,7 +86,7 @@ const WorkflowListItem = (props: ItemProps) => {
workflow.steps.forEach((step) => {
switch (step.action) {
case WorkflowActions.EMAIL_HOST:
sendTo.add(t("organizer_name_variable"));
sendTo.add(t("organizer"));
break;
case WorkflowActions.EMAIL_ATTENDEE:
sendTo.add(t("attendee_name_variable"));

View File

@ -674,7 +674,7 @@ export default function WorkflowStepContainer(props: WorkflowStepProps) {
<div className="mb-6">
<div className="flex items-center">
<Label className={classNames("flex-none", props.readOnly ? "mb-2" : "mb-0")}>
{t("subject")}
{t("email_subject")}
</Label>
{!props.readOnly && (
<div className="flex-grow text-right">

View File

@ -425,10 +425,10 @@ export const FormBuilder = function FormBuilder({
})
}>
<DialogContent className="max-h-none p-0" data-testid="edit-field-dialog">
<div className="h-auto max-h-[85vh] overflow-auto px-8 pt-8 pb-10">
<div className="h-auto max-h-[85vh] overflow-auto px-8 pt-8 pb-7">
<DialogHeader
title={t("add_a_booking_question")}
subtitle={t("form_builder_field_add_subtitle")}
subtitle={t("booking_questions_description")}
/>
<Form
id="form-builder"

View File

@ -98,7 +98,7 @@ const tabs: VerticalTabItemProps[] = [
tabs.find((tab) => {
// Add "SAML SSO" to the tab
if (tab.name === "security" && !HOSTED_CAL_FEATURES) {
tab.children?.push({ name: "saml_config", href: "/settings/security/sso" });
tab.children?.push({ name: "sso_configuration", href: "/settings/security/sso" });
}
});
@ -321,7 +321,7 @@ const SettingsSidebarContainer = ({
/>
{HOSTED_CAL_FEATURES && (
<VerticalTabItem
name={t("saml_config")}
name={t("sso_configuration")}
href={`/settings/teams/${team.id}/sso`}
textClassNames="px-3 text-emphasis font-medium text-sm"
disableChevron

View File

@ -25,7 +25,7 @@ function VerifyEmailBanner() {
mutation.mutate();
showToast(t("email_sent"), "success");
}}>
{t("verify_email_banner_button")}
{t("send_email")}
</Button>
}
/>

View File

@ -39,7 +39,7 @@ const WebhooksView = () => {
<>
<Meta
title="Webhooks"
description={t("webhooks_description", { appName: APP_NAME })}
description={t("add_webhook_description", { appName: APP_NAME })}
CTA={data && data.webhookGroups.length > 0 ? <NewWebhookButton profiles={profiles} /> : <></>}
/>
<div>

View File

@ -70,7 +70,7 @@ function CategoryTab({ selectedCategory, categories, searchText }: CategoryTabPr
<h2 className="text-emphasis hidden text-base font-semibold leading-none sm:block">
{searchText
? t("search")
: t("explore_apps", {
: t("category_apps", {
category:
(selectedCategory && selectedCategory[0].toUpperCase() + selectedCategory.slice(1)) ||
t("all_apps"),