Merged in feat/lokalise-rebuild (pull request #2993)

Feat/lokalise rebuild

* chore(lokalise): update translation ids

* chore(lokalise): easier to switch between projects

* chore(lokalise): update translation ids

* .

* .

* .

* .

* .

* .

* chore(lokalise): update translation ids

* chore(lokalise): update translation ids

* .

* .

* .

* chore(lokalise): update translation ids

* chore(lokalise): update translation ids

* .

* .

* chore(lokalise): update translation ids

* chore(lokalise): update translation ids

* chore(lokalise): new translations

* merge

* switch to errors for missing id's

* merge

* sync translations


Approved-by: Linus Flood
This commit is contained in:
Joakim Jäderberg
2025-10-22 11:00:03 +00:00
parent bdfe2ab213
commit aafad9781f
499 changed files with 93363 additions and 99164 deletions

View File

@@ -50,9 +50,11 @@ export default function ActionButtons({
const intl = useIntl()
const isConfirmStep = currentStep === AncillaryStepEnum.confirmation
const confirmLabel = intl.formatMessage({
id: "common.confirm",
defaultMessage: "Confirm",
})
const continueLabel = intl.formatMessage({
id: "common.continue",
defaultMessage: "Continue",
})
const quantityWithCard = useWatch<AncillaryQuantityFormData>({
@@ -99,6 +101,7 @@ export default function ActionButtons({
className={styles.priceButton}
>
{intl.formatMessage({
id: "common.priceDetails",
defaultMessage: "Price details",
})}
<MaterialIcon
@@ -120,6 +123,7 @@ export default function ActionButtons({
onPress={isMobile ? prevStepMobile : prevStep}
>
{intl.formatMessage({
id: "common.back",
defaultMessage: "Back",
})}
</Button>

View File

@@ -37,6 +37,7 @@ export default function PriceSummary({
<Typography variant="Body/Paragraph/mdBold">
<h2>
{intl.formatMessage({
id: "common.summary",
defaultMessage: "Summary",
})}
</h2>
@@ -50,6 +51,7 @@ export default function PriceSummary({
title={item.title}
quantity={item.quantityWithCard}
label={intl.formatMessage({
id: "booking.priceIncludingVat",
defaultMessage: "Price including VAT",
})}
value={formatPrice(intl, item.totalPrice, item.currency)}
@@ -60,11 +62,17 @@ export default function PriceSummary({
title={item.title}
quantity={item.quantityWithPoints}
label={intl.formatMessage({
id: "common.points",
defaultMessage: "Points",
})}
value={`${item.points} ${intl.formatMessage({
defaultMessage: "points",
})}`}
value={intl.formatMessage(
{
id: "common.numberOfPoints",
defaultMessage:
"{points, plural, one {# point} other {# points}}",
},
{ points: item.points }
)}
/>
)}
<Divider />
@@ -76,9 +84,11 @@ export default function PriceSummary({
<p>
{hasTotalPrice
? intl.formatMessage({
id: "priceSummary.totalPriceIncludingVat",
defaultMessage: "Total price including VAT",
})
: intl.formatMessage({
id: "common.totalPoints",
defaultMessage: "Total points",
})}
</p>
@@ -93,10 +103,14 @@ export default function PriceSummary({
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
{hasTotalPoints && hasTotalPrice ? " + " : null}
{hasTotalPoints
? // eslint-disable-next-line formatjs/no-literal-string-in-jsx
`${totalPoints} ${intl.formatMessage({
defaultMessage: "points",
})}`
? intl.formatMessage(
{
id: "common.numberOfPoints",
defaultMessage:
"{points, plural, one {# point} other {# points}}",
},
{ points: totalPoints }
)
: null}
</p>
</Typography>

View File

@@ -77,6 +77,7 @@ export default function PriceDetails({
const items = [
{
title: `${selectedAncillary.title} / ${intl.formatMessage({
id: "common.adult",
defaultMessage: "adult",
})}`,
totalPrice: breakfastData.priceAdult,
@@ -88,6 +89,7 @@ export default function PriceDetails({
if (breakfastData.nrOfPayingChildren > 0) {
items.push({
title: `${selectedAncillary.title} / ${intl.formatMessage({
id: "common.children",
defaultMessage: "Children",
})} 4-12`,
totalPrice: breakfastData.priceChild,
@@ -101,6 +103,7 @@ export default function PriceDetails({
items.push({
title: `${selectedAncillary.title} / ${intl.formatMessage(
{
id: "common.childrenUnderAge",
defaultMessage: "Children under {age}",
},
{ age: 4 }
@@ -135,6 +138,7 @@ export default function PriceDetails({
<Typography variant="Body/Paragraph/mdBold">
<p>
{intl.formatMessage({
id: "common.total",
defaultMessage: "Total",
})}
</p>
@@ -144,6 +148,7 @@ export default function PriceDetails({
<p className={styles.vatText}>
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
{`(${intl.formatMessage({
id: "common.inclVAT",
defaultMessage: "Incl. VAT",
})})`}
</p>
@@ -154,6 +159,7 @@ export default function PriceDetails({
<p className={styles.hideOnDesktop}>
{intl.formatMessage(
{
id: "booking.numberOfNights",
defaultMessage:
"{totalNights, plural, one {# night} other {# nights}}",
},
@@ -165,6 +171,7 @@ export default function PriceDetails({
" / " +
intl.formatMessage(
{
id: "common.numberOfGuests",
defaultMessage:
"{value, plural, one {# guest} other {# guests}}",
},
@@ -186,6 +193,7 @@ export default function PriceDetails({
<p className={styles.showOnDesktop}>
{intl.formatMessage(
{
id: "booking.numberOfNights",
defaultMessage:
"{totalNights, plural, one {# night} other {# nights}}",
},
@@ -197,6 +205,7 @@ export default function PriceDetails({
" / " +
intl.formatMessage(
{
id: "common.numberOfGuests",
defaultMessage:
"{value, plural, one {# guest} other {# guests}}",
},
@@ -231,14 +240,14 @@ export default function PriceDetails({
</div>
<Typography variant="Body/Paragraph/mdBold">
<p>
{totalPoints}
{
/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */
" "
}
{intl.formatMessage({
defaultMessage: "points",
})}
{intl.formatMessage(
{
id: "common.numberOfPoints",
defaultMessage:
"{points, plural, one {# point} other {# points}}",
},
{ points: totalPoints }
)}
</p>
</Typography>
</div>

View File

@@ -54,6 +54,7 @@ export default function ConfirmationStep({
<p>
{intl.formatMessage(
{
id: "addAncillary.confirmationStep.refundPolicy",
defaultMessage:
"All ancillaries are fully refundable until {date}. Time selection and special requests are also modifiable.",
},
@@ -66,6 +67,7 @@ export default function ConfirmationStep({
<Typography variant="Title/Subtitle/md">
<h2>
{intl.formatMessage({
id: "addAncillary.confirmationStep.pointsToBeDeducted",
defaultMessage: "Points to be deducted now",
})}
</h2>
@@ -77,9 +79,11 @@ export default function ConfirmationStep({
<h2>
{intl.formatMessage(
{
defaultMessage: "{amount} points",
id: "common.numberOfPoints",
defaultMessage:
"{points, plural, one {# point} other {# points}}",
},
{ amount: totalPoints }
{ points: totalPoints }
)}
</h2>
</Typography>
@@ -88,6 +92,7 @@ export default function ConfirmationStep({
<p>
{intl.formatMessage(
{
id: "addAncillary.confirmationStep.pointsAvailable",
defaultMessage: "{amount} points available",
},
{ amount: currentPoints }
@@ -103,6 +108,7 @@ export default function ConfirmationStep({
<Typography variant="Title/Subtitle/md">
<h2>
{intl.formatMessage({
id: "addAncillary.confirmationStep.reserveWithCard",
defaultMessage: "Reserve with Card",
})}
</h2>
@@ -111,6 +117,7 @@ export default function ConfirmationStep({
<Typography variant="Body/Supporting text (caption)/smRegular">
<p>
{intl.formatMessage({
id: "addAncillary.confirmationStep.paymentAtCheckInInfo",
defaultMessage:
"Payment will be made on check-in. The card will be only used to guarantee the ancillary in case of no-show.",
})}
@@ -122,6 +129,7 @@ export default function ConfirmationStep({
value={PaymentMethodEnum.card}
cardNumber={guaranteeInfo.maskedCard.slice(-4)}
label={intl.formatMessage({
id: "common.creditCard",
defaultMessage: "Credit card",
})}
/>
@@ -131,6 +139,7 @@ export default function ConfirmationStep({
<Alert
type={AlertTypeEnum.Info}
text={intl.formatMessage({
id: "addAncillary.confirmationStep.guaranteeAddCard",
defaultMessage:
"By adding a card you also guarantee your room booking for late arrival.",
})}
@@ -151,15 +160,19 @@ export default function ConfirmationStep({
name="paymentMethod"
label={
savedCreditCards?.length
? intl.formatMessage({
defaultMessage: "OTHER",
})
? intl
.formatMessage({
id: "common.other",
defaultMessage: "Other",
})
.toUpperCase()
: undefined
}
>
<PaymentOption
value={PaymentMethodEnum.card}
label={intl.formatMessage({
id: "common.creditCard",
defaultMessage: "Credit card",
})}
/>
@@ -174,6 +187,7 @@ export default function ConfirmationStep({
<p>
{intl.formatMessage(
{
id: "addAncillary.confirmationStep.termsAndConditionsNotice",
defaultMessage:
"Yes, I accept the general <termsAndConditionsLink>Booking & Cancellation Terms</termsAndConditionsLink>, and understand that Scandic will process my personal data in accordance with <privacyPolicyLink>Scandic's Privacy policy</privacyPolicyLink>. There you can learn more about what data we process, your rights and where to turn if you have questions.",
},
@@ -209,6 +223,7 @@ export default function ConfirmationStep({
<Typography variant="Body/Supporting text (caption)/smRegular">
<span>
{intl.formatMessage({
id: "booking.acceptBookingTerms",
defaultMessage: "I accept the booking and cancellation terms",
})}
</span>

View File

@@ -18,6 +18,7 @@ export default function DeliveryMethodStep() {
<Typography variant="Body/Supporting text (caption)/smBold">
<h3>
{intl.formatMessage({
id: "ancillaries.deliveredAt",
defaultMessage: "Delivered at:",
})}
</h3>
@@ -33,6 +34,7 @@ export default function DeliveryMethodStep() {
<Typography variant="Body/Supporting text (caption)/smRegular">
<p>
{intl.formatMessage({
id: "addAncillary.deliveryDetailsStep.deliveryTimeDescription",
defaultMessage:
"All extras are delivered together. Changes to delivery times will affect previously ordered extras.",
})}
@@ -41,6 +43,7 @@ export default function DeliveryMethodStep() {
<div className={styles.select}>
<Input
label={intl.formatMessage({
id: "addAncillary.deliveryDetailsStep.optionalTextLabel",
defaultMessage: "Other Requests",
})}
name="optionalText"
@@ -48,6 +51,7 @@ export default function DeliveryMethodStep() {
<Typography variant="Body/Supporting text (caption)/smRegular">
<h3>
{intl.formatMessage({
id: "common.optional",
defaultMessage: "Optional",
})}
</h3>

View File

@@ -35,6 +35,7 @@ export default function SelectAncillaryStep() {
{categoryName
? categoryName
: intl.formatMessage({
id: "common.other",
defaultMessage: "Other",
})}
</p>

View File

@@ -58,6 +58,7 @@ export default function SelectQuantityStep({ user }: SelectQuantityStepProps) {
<Typography variant="Title/Subtitle/md">
<h2 className={styles.selectTitle}>
{intl.formatMessage({
id: "addAncillary.selectQuantityStep.payWithPoints",
defaultMessage: "Pay with points",
})}
</h2>
@@ -68,6 +69,7 @@ export default function SelectQuantityStep({ user }: SelectQuantityStepProps) {
<Typography variant="Title/Overline/sm">
<h2>
{intl.formatMessage({
id: "common.totalPoints",
defaultMessage: "Total points",
})}
</h2>
@@ -81,6 +83,7 @@ export default function SelectQuantityStep({ user }: SelectQuantityStepProps) {
<Typography variant="Body/Supporting text (caption)/smRegular">
<h2 className={styles.insufficientPoints}>
{intl.formatMessage({
id: "addAncillary.selectQuantityStep.insufficientPoints",
defaultMessage: "Insufficient points",
})}
</h2>
@@ -89,6 +92,7 @@ export default function SelectQuantityStep({ user }: SelectQuantityStepProps) {
<Select
name="quantityWithPoints"
label={intl.formatMessage({
id: "addAncillary.selectQuantityStep.selectQuantityLabel",
defaultMessage: "Select quantity",
})}
items={pointsQuantityOptions}
@@ -100,11 +104,8 @@ export default function SelectQuantityStep({ user }: SelectQuantityStepProps) {
<div className={styles.select}>
<Typography variant="Title/Subtitle/md">
<h2 className={styles.selectTitle}>
{
/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */
" "
}
{intl.formatMessage({
id: "addAncillary.selectQuantityStep.payWithCard",
defaultMessage: "Pay with card at the hotel",
})}
</h2>
@@ -112,6 +113,7 @@ export default function SelectQuantityStep({ user }: SelectQuantityStepProps) {
<Select
name="quantityWithCard"
label={intl.formatMessage({
id: "addAncillary.selectQuantityStep.selectQuantityLabel",
defaultMessage: "Select quantity",
})}
items={cardQuantityOptions}
@@ -136,6 +138,7 @@ function BreakfastInfo() {
if (!breakfastData) {
return intl.formatMessage({
id: "ancillaries.unableToDisplayBreakfastPrices",
defaultMessage: "Unable to display breakfast prices.",
})
}
@@ -145,6 +148,7 @@ function BreakfastInfo() {
<Alert
type={AlertTypeEnum.Info}
text={intl.formatMessage({
id: "addAncillary.selectQuantityStep.breakfastInfoMessage",
defaultMessage:
"Breakfast can only be added for the entire duration of the stay and for all guests.",
})}
@@ -158,6 +162,7 @@ function BreakfastInfo() {
<dt>
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
{`${breakfastData.nrOfAdults} × ${intl.formatMessage({
id: "common.adults",
defaultMessage: "Adults",
})}`}
</dt>
@@ -177,6 +182,7 @@ function BreakfastInfo() {
<dt>
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
{`${breakfastData.nrOfPayingChildren} × ${intl.formatMessage({
id: "common.ages",
defaultMessage: "ages",
})} 4-12`}
</dt>
@@ -198,12 +204,14 @@ function BreakfastInfo() {
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
{`${breakfastData.nrOfFreeChildren} × ${intl.formatMessage({
defaultMessage: "under",
id: "common.under",
})} 4`}
</dt>
<dd>
<Body>
{intl.formatMessage({
defaultMessage: "Free",
id: "common.free",
})}
</Body>
</dd>

View File

@@ -110,6 +110,7 @@ export default function AddAncillaryFlowModal({
const ancillaryErrorMessage = intl.formatMessage(
{
id: "addAncillaryFlowModal.errorMessage.ancillary",
defaultMessage:
"Something went wrong. {ancillary} could not be added to your booking!",
},
@@ -170,6 +171,7 @@ export default function AddAncillaryFlowModal({
toast.success(
intl.formatMessage(
{
id: "addAncillaryFlowModal.ancillaryAdded",
defaultMessage: "{ancillary} added to your booking!",
},
{ ancillary: selectedAncillary?.title }
@@ -274,6 +276,7 @@ export default function AddAncillaryFlowModal({
if (isBreakfast && !breakfastData) {
toast.error(
intl.formatMessage({
id: "errorMessage.somethingWentWrong",
defaultMessage: "Something went wrong!",
})
)
@@ -352,6 +355,7 @@ export default function AddAncillaryFlowModal({
const modalTitle =
currentStep === AncillaryStepEnum.selectAncillary
? intl.formatMessage({
id: "ancillaries.upgradeYourStay",
defaultMessage: "Upgrade your stay",
})
: selectedAncillary?.title
@@ -392,10 +396,12 @@ export default function AddAncillaryFlowModal({
<p>
{intl.formatMessage(
{
defaultMessage: "{value} points",
id: "common.numberOfPoints",
defaultMessage:
"{points, plural, one {# point} other {# points}}",
},
{
value: selectedAncillary.points,
points: selectedAncillary.points,
}
)}
</p>
@@ -450,6 +456,7 @@ function BreakfastPriceList() {
if (!breakfastData) {
return intl.formatMessage({
id: "ancillaries.unableToDisplayBreakfastPrices",
defaultMessage: "Unable to display breakfast prices.",
})
}
@@ -461,6 +468,7 @@ function BreakfastPriceList() {
<span>
{intl.formatMessage(
{
id: "addAncillaryFlowModal.pricePerNightPerAdult",
defaultMessage: "{price}/night per adult",
},
{
@@ -480,6 +488,7 @@ function BreakfastPriceList() {
<span>
{intl.formatMessage(
{
id: "addAncillaryFlowModal.pricePerNightPerKids",
defaultMessage: "{price}/night for kids (ages 412)",
},
{
@@ -500,6 +509,7 @@ function BreakfastPriceList() {
<Typography variant="Body/Paragraph/mdBold">
<span>
{intl.formatMessage({
id: "addAncillaryFlowModal.freeBreakfastForKids",
defaultMessage: "Free for kids (under 4)",
})}
</span>

View File

@@ -39,22 +39,27 @@ export default function RemoveButton({
return (
<Dialog
bodyText={intl.formatMessage({
id: "myStay.removeAncillary.confirmationText",
defaultMessage: "Are you sure you want to remove this product?",
})}
proceedText={intl.formatMessage({
id: "common.remove",
defaultMessage: "Remove",
})}
proceedIsPending={removePackage.isPending}
cancelButtonText={intl.formatMessage({
id: "common.cancel",
defaultMessage: "Cancel",
})}
titleText={`${intl.formatMessage({
id: "common.remove",
defaultMessage: "Remove",
})} ${title}`}
trigger={
<Button intent="text" size="small" variant="icon" theme="base">
<MaterialIcon icon="delete" color="CurrentColor" />
{intl.formatMessage({
id: "common.remove",
defaultMessage: "Remove",
})}
</Button>
@@ -87,6 +92,7 @@ export default function RemoveButton({
onError: () => {
toast.error(
intl.formatMessage({
id: "errorMessage.somethingWentWrong",
defaultMessage: "Something went wrong!",
})
)

View File

@@ -42,6 +42,7 @@ export function AddedAncillaries({
<Subtitle>
{intl.formatMessage({
defaultMessage: "My extras",
id: "myStay.addedAncillaries.title",
})}
</Subtitle>
@@ -49,6 +50,7 @@ export function AddedAncillaries({
<div className={styles.deliveryTime}>
<Body color="baseTextHighContrast" textTransform="bold">
{intl.formatMessage({
id: "ancillaries.deliveredAt",
defaultMessage: "Delivered at:",
})}
</Body>
@@ -63,6 +65,7 @@ export function AddedAncillaries({
const ancillaryTitle = `${
ancillary.code === BreakfastPackageEnum.ANCILLARY_REGULAR_BREAKFAST
? intl.formatMessage({
id: "common.breakfast",
defaultMessage: "Breakfast",
})
: (ancillaries?.find(
@@ -89,6 +92,7 @@ export function AddedAncillaries({
<div className={styles.commentMobile}>
<Body textTransform="bold">
{intl.formatMessage({
id: "common.otherRequests",
defaultMessage: "Other requests",
})}
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
@@ -104,15 +108,22 @@ export function AddedAncillaries({
<div className={styles.paymentMobile}>
<Body>
{intl.formatMessage({
id: "common.total",
defaultMessage: "Total",
})}
</Body>
<Body textTransform="bold">
{ancillary.currency.toLowerCase() === "points"
? // eslint-disable-next-line formatjs/no-literal-string-in-jsx
`${ancillary.totalPrice} ${intl.formatMessage({
defaultMessage: "Points",
})}`
? intl.formatMessage(
{
id: "common.numberOfPoints",
defaultMessage:
"{points, plural, one {# point} other {# points}}",
},
{
points: ancillary.totalPrice,
}
)
: formatPrice(
intl,
ancillary.totalPrice,
@@ -156,15 +167,22 @@ export function AddedAncillaries({
<div className={styles.payment}>
<Body>
{intl.formatMessage({
id: "common.total",
defaultMessage: "Total",
})}
</Body>
<Body textTransform="bold">
{ancillary.currency.toLowerCase() === "points"
? // eslint-disable-next-line formatjs/no-literal-string-in-jsx
`${ancillary.totalPrice} ${intl.formatMessage({
defaultMessage: "Points",
})}`
? intl.formatMessage(
{
id: "common.numberOfPoints",
defaultMessage:
"{points, plural, one {# point} other {# points}}",
},
{
points: ancillary.totalPrice,
}
)
: formatPrice(
intl,
ancillary.totalPrice,
@@ -182,6 +200,7 @@ export function AddedAncillaries({
<>
<Body textTransform="bold">
{intl.formatMessage({
id: "common.otherRequests",
defaultMessage: "Other requests",
})}
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}

View File

@@ -17,6 +17,7 @@ export default function ViewAllAncillaries() {
onClick={openModal}
>
{intl.formatMessage({
id: "common.seeAll",
defaultMessage: "See all",
})}
<MaterialIcon icon="chevron_right" size={20} color="CurrentColor" />

View File

@@ -58,10 +58,12 @@ export function Ancillaries({
breakfastPackageAdults
? {
description: intl.formatMessage({
id: "common.buffet",
defaultMessage: "Buffet",
}),
id: breakfastPackageAdults.code,
title: intl.formatMessage({
id: "common.breakfast",
defaultMessage: "Breakfast",
}),
price: {
@@ -76,6 +78,7 @@ export function Ancillaries({
hotelId: Number(bookedRoom.hotelId),
internalCategoryName: "Food",
translatedCategoryName: intl.formatMessage({
id: "common.food",
defaultMessage: "Food",
}),
}
@@ -102,6 +105,7 @@ export function Ancillaries({
<div className={styles.title}>
<Title as="h5">
{intl.formatMessage({
id: "ancillaries.upgradeYourStay",
defaultMessage: "Upgrade your stay",
})}
</Title>

View File

@@ -82,13 +82,19 @@ export function mapAncillaries(
ancillaries ?? [],
breakfastAncillary,
"Popular",
intl.formatMessage({ defaultMessage: "Popular" })
intl.formatMessage({
defaultMessage: "Popular",
id: "myStay.ancillaries.popularCategory",
})
)
const withBreakfastFood = addBreakfastPackage(
withBreakfastPopular,
breakfastAncillary,
"Food",
intl.formatMessage({ defaultMessage: "Food" })
intl.formatMessage({
id: "common.food",
defaultMessage: "Food",
})
)
return filterPoints(withBreakfastFood, user)

View File

@@ -29,6 +29,7 @@ export default function BookingSummary({ hotel }: BookingSummaryProps) {
<Typography variant="Title/sm">
<h2 className={styles.title}>
{intl.formatMessage({
id: "common.practicalInformation",
defaultMessage: "Practical information",
})}
</h2>
@@ -50,6 +51,7 @@ export default function BookingSummary({ hotel }: BookingSummaryProps) {
]}
supportingText={intl.formatMessage(
{
id: "myStay.bookingSummary.coordinates",
defaultMessage: "Long {long} ∙ Lat {lat}",
},
{
@@ -61,6 +63,7 @@ export default function BookingSummary({ hotel }: BookingSummaryProps) {
{
href: directionsUrl,
text: intl.formatMessage({
id: "common.directions",
defaultMessage: "Directions",
}),
icon: (
@@ -75,6 +78,7 @@ export default function BookingSummary({ hotel }: BookingSummaryProps) {
{
href: `mailto:${hotel.contactInformation.email}`,
text: intl.formatMessage({
id: "common.email",
defaultMessage: "Email",
}),
icon: (
@@ -89,6 +93,7 @@ export default function BookingSummary({ hotel }: BookingSummaryProps) {
{
href: hotel.contactInformation.websiteUrl,
text: intl.formatMessage({
id: "myStay.bookingSummary.homepage",
defaultMessage: "Homepage",
}),
icon: (

View File

@@ -83,6 +83,7 @@ export default function GuestDetails({
toast.success(
intl.formatMessage({
id: "myStay.guestDetails.updatedSuccess",
defaultMessage: "Guest details updated",
})
)
@@ -91,6 +92,7 @@ export default function GuestDetails({
} else {
toast.error(
intl.formatMessage({
id: "myStay.guestDetails.updatedError",
defaultMessage: "Failed to update guest details",
})
)
@@ -99,6 +101,7 @@ export default function GuestDetails({
onError: () => {
toast.error(
intl.formatMessage({
id: "myStay.guestDetails.updatedError",
defaultMessage: "Failed to update guest details",
})
)
@@ -140,6 +143,7 @@ export default function GuestDetails({
<Typography variant="Title/Overline/sm">
<p>
{intl.formatMessage({
id: "myStay.yourMemberLevel",
defaultMessage: "Your member level",
})}
</p>
@@ -160,6 +164,7 @@ export default function GuestDetails({
<Typography variant="Title/Overline/sm">
<p>
{intl.formatMessage({
id: "myStay.myTotalPoints",
defaultMessage: "My total points",
})}
</p>
@@ -183,6 +188,7 @@ export default function GuestDetails({
<p className={styles.memberNumber}>
{intl.formatMessage(
{
id: "myStay.membershipId",
defaultMessage: "Membership ID: {nr}",
},
{
@@ -228,6 +234,7 @@ export default function GuestDetails({
<Typography variant="Body/Paragraph/mdRegular">
<span>
{intl.formatMessage({
id: "myStay.guestDetails.modifyGuestDetails",
defaultMessage: "Modify guest details",
})}
</span>
@@ -257,6 +264,7 @@ export default function GuestDetails({
<Typography variant="Body/Paragraph/mdRegular">
<span>
{intl.formatMessage({
id: "myStay.guestDetails.modifyGuestDetails",
defaultMessage: "Modify guest details",
})}
</span>
@@ -271,6 +279,7 @@ export default function GuestDetails({
>
<Dialog
aria-label={intl.formatMessage({
id: "myStay.guestDetails.modifyGuestDetails",
defaultMessage: "Modify guest details",
})}
>
@@ -278,6 +287,7 @@ export default function GuestDetails({
<FormProvider {...form}>
<ModalContentWithActions
title={intl.formatMessage({
id: "myStay.guestDetails.modifyGuestDetails",
defaultMessage: "Modify guest details",
})}
onClose={() => setIsModifyGuestDetailsOpen(false)}
@@ -292,9 +302,11 @@ export default function GuestDetails({
primaryAction={{
label: isFirstStep
? intl.formatMessage({
id: "myStay.modifyContact.saveUpdates",
defaultMessage: "Save updates",
})
: intl.formatMessage({
id: "common.confirm",
defaultMessage: "Confirm",
}),
onClick: isFirstStep
@@ -306,9 +318,11 @@ export default function GuestDetails({
secondaryAction={{
label: isFirstStep
? intl.formatMessage({
id: "common.back",
defaultMessage: "Back",
})
: intl.formatMessage({
id: "common.cancel",
defaultMessage: "Cancel",
}),
onClick: () => {

View File

@@ -17,6 +17,7 @@ export async function Header({
<Title as="h2" color="white" className={styles.title} textAlign="center">
<BiroScript type="two" tilted="medium">
{intl.formatMessage({
id: "myStay.header.myStayAt",
defaultMessage: "My stay at",
})}
{

View File

@@ -49,6 +49,7 @@ export default function ModifyContact({
<div className={`${styles.row} ${styles.gridEqual}`}>
<Input
label={intl.formatMessage({
id: "common.firstName",
defaultMessage: "First name",
})}
maxLength={30}
@@ -57,6 +58,7 @@ export default function ModifyContact({
/>
<Input
label={intl.formatMessage({
id: "common.lastName",
defaultMessage: "Last name",
})}
maxLength={30}
@@ -72,6 +74,7 @@ export default function ModifyContact({
errors.countryCode?.message?.toString()
)}
label={intl.formatMessage({
id: "common.country",
defaultMessage: "Country",
})}
lang={lang}
@@ -81,6 +84,7 @@ export default function ModifyContact({
<div className={styles.row}>
<Input
label={intl.formatMessage({
id: "common.email",
defaultMessage: "Email",
})}
name="email"
@@ -91,6 +95,7 @@ export default function ModifyContact({
<div className={styles.row}>
<Phone
countryLabel={intl.formatMessage({
id: "common.countryCode",
defaultMessage: "Country code",
})}
countriesWithTranslatedName={getFormattedCountryList(intl)}
@@ -100,6 +105,7 @@ export default function ModifyContact({
errors.phoneNumber?.message?.toString()
)}
label={intl.formatMessage({
id: "common.phoneNumber",
defaultMessage: "Phone number",
})}
name="phoneNumber"
@@ -111,6 +117,7 @@ export default function ModifyContact({
<>
<Body color="uiTextHighContrast">
{intl.formatMessage({
id: "myStay.modifyContact.confirmationMessage",
defaultMessage:
"Are you sure you want to change your guest details?",
})}

View File

@@ -26,6 +26,7 @@ export default async function Footer({ booking, room }: FooterProps) {
<Typography variant="Body/Supporting text (caption)/smRegular">
<dt>
{intl.formatMessage({
id: "common.bookingNumber",
defaultMessage: "Booking number",
})}
</dt>
@@ -39,6 +40,7 @@ export default async function Footer({ booking, room }: FooterProps) {
<Typography variant="Body/Supporting text (caption)/smRegular">
<dt>
{intl.formatMessage({
id: "common.room",
defaultMessage: "Room",
})}
</dt>
@@ -52,6 +54,7 @@ export default async function Footer({ booking, room }: FooterProps) {
<Typography variant="Body/Supporting text (caption)/smRegular">
<dt>
{intl.formatMessage({
id: "myStay.receipt.rate",
defaultMessage: "Rate",
})}
</dt>
@@ -65,6 +68,7 @@ export default async function Footer({ booking, room }: FooterProps) {
<Typography variant="Body/Supporting text (caption)/smRegular">
<dt>
{intl.formatMessage({
id: "common.checkIn",
defaultMessage: "Check-in",
})}
</dt>
@@ -82,6 +86,7 @@ export default async function Footer({ booking, room }: FooterProps) {
<Typography variant="Body/Supporting text (caption)/smRegular">
<dt>
{intl.formatMessage({
id: "common.checkOut",
defaultMessage: "Check-out",
})}
</dt>
@@ -101,6 +106,7 @@ export default async function Footer({ booking, room }: FooterProps) {
<Typography variant="Body/Supporting text (caption)/smRegular">
<dt>
{intl.formatMessage({
id: "myStay.receipt.numberOfNights",
defaultMessage: "Number of nights",
})}
</dt>
@@ -116,6 +122,7 @@ export default async function Footer({ booking, room }: FooterProps) {
<Typography variant="Body/Supporting text (caption)/smRegular">
<dt>
{intl.formatMessage({
id: "myStay.receipt.numberOfGuests",
defaultMessage: "Number of guests",
})}
</dt>
@@ -124,6 +131,7 @@ export default async function Footer({ booking, room }: FooterProps) {
<dd>
{intl.formatMessage(
{
id: "booking.numberOfAdults",
defaultMessage:
"{adults, plural, one {# adult} other {# adults}}",
},
@@ -134,6 +142,7 @@ export default async function Footer({ booking, room }: FooterProps) {
{", "}
{intl.formatMessage(
{
id: "booking.numberOfChildren",
defaultMessage:
"{children, plural, one {# child} other {# children}}",
},
@@ -149,6 +158,7 @@ export default async function Footer({ booking, room }: FooterProps) {
<Typography variant="Body/Supporting text (caption)/smRegular">
<dt>
{intl.formatMessage({
id: "myStay.receipt.bedType",
defaultMessage: "Bed type",
})}
</dt>
@@ -163,6 +173,7 @@ export default async function Footer({ booking, room }: FooterProps) {
<Typography variant="Body/Supporting text (caption)/smRegular">
<dt>
{intl.formatMessage({
id: "booking.roomClassification",
defaultMessage: "Room classification",
})}
</dt>
@@ -170,6 +181,7 @@ export default async function Footer({ booking, room }: FooterProps) {
<Typography variant="Body/Supporting text (caption)/smRegular">
<dd>
{intl.formatMessage({
id: "common.petFriendly",
defaultMessage: "Pet-friendly",
})}
</dd>
@@ -181,6 +193,7 @@ export default async function Footer({ booking, room }: FooterProps) {
<Typography variant="Body/Supporting text (caption)/smRegular">
<dt>
{intl.formatMessage({
id: "common.breakfast",
defaultMessage: "Breakfast",
})}
</dt>
@@ -189,9 +202,11 @@ export default async function Footer({ booking, room }: FooterProps) {
<dd>
{booking.rateDefinition.breakfastIncluded
? intl.formatMessage({
id: "common.included",
defaultMessage: "Included",
})
: intl.formatMessage({
id: "common.notIncluded",
defaultMessage: "Not included",
})}
</dd>

View File

@@ -41,9 +41,13 @@ export default async function Specification({
: ""
const breakfastPointsString =
breakfastTotalPriceInPoints > 0
? `${breakfastTotalPriceInPoints} ${intl.formatMessage({
defaultMessage: "Points",
})}`
? intl.formatMessage(
{
id: "common.numberOfPoints",
defaultMessage: "{points, plural, one {# point} other {# points}}",
},
{ points: breakfastTotalPriceInPoints }
)
: ""
const breakfastPlusString =
breakfastMoneyString && breakfastPointsString ? " + " : ""
@@ -64,12 +68,14 @@ export default async function Specification({
<Typography variant="Body/Supporting text (caption)/smBold">
<span>
{intl.formatMessage({
id: "myStay.receipt.accommodation",
defaultMessage: "Accommodation",
})}
{!booking.rateDefinition.mustBeGuaranteed && (
<>
{" - "}
{intl.formatMessage({
id: "myStay.receipt.prepaidRoom",
defaultMessage: "Room is prepaid",
})}
</>
@@ -80,6 +86,7 @@ export default async function Specification({
<Typography variant="Body/Supporting text (caption)/smRegular">
<dt>
{intl.formatMessage({
id: "booking.priceIncludingVat",
defaultMessage: "Price including VAT",
})}
</dt>
@@ -89,6 +96,7 @@ export default async function Specification({
{!booking.rateDefinition.mustBeGuaranteed
? // eslint-disable-next-line formatjs/no-literal-string-in-jsx
`(${intl.formatMessage({
id: "myStay.receipt.prepaid",
defaultMessage: "PREPAID",
})}) `
: null}
@@ -102,6 +110,7 @@ export default async function Specification({
<Typography variant="Body/Supporting text (caption)/smRegular">
<dt>
{intl.formatMessage({
id: "myStay.receipt.petRoomChargeIncludingVat",
defaultMessage: "Pet room charge including VAT",
})}
</dt>
@@ -116,6 +125,7 @@ export default async function Specification({
<Typography variant="Body/Supporting text (caption)/smRegular">
<dt className={styles.tertiary}>
{intl.formatMessage({
id: "booking.priceExcludingVat",
defaultMessage: "Price excluding VAT",
})}
</dt>
@@ -130,6 +140,7 @@ export default async function Specification({
<Typography variant="Body/Supporting text (caption)/smRegular">
<dt className={styles.tertiary}>
{intl.formatMessage({
id: "common.vat",
defaultMessage: "VAT",
})}
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
@@ -161,6 +172,7 @@ export default async function Specification({
)
)[0]?.title ??
intl.formatMessage({
id: "myStay.receipt.unknownItem",
defaultMessage: "Unknown item",
})}
</span>
@@ -178,9 +190,11 @@ export default async function Specification({
<dt>
{ancillary.currency !== CurrencyEnum.POINTS
? intl.formatMessage({
id: "booking.priceIncludingVat",
defaultMessage: "Price including VAT",
})
: intl.formatMessage({
id: "common.price",
defaultMessage: "Price",
})}
</dt>
@@ -205,6 +219,7 @@ export default async function Specification({
<Typography variant="Body/Supporting text (caption)/smBold">
<span>
{intl.formatMessage({
id: "common.breakfast",
defaultMessage: "Breakfast",
})}
</span>
@@ -220,9 +235,11 @@ export default async function Specification({
<dt>
{breakfastTotalPriceInMoney > 0
? intl.formatMessage({
id: "booking.priceIncludingVat",
defaultMessage: "Price including VAT",
})
: intl.formatMessage({
id: "common.price",
defaultMessage: "Price",
})}
</dt>

View File

@@ -22,9 +22,13 @@ export default async function Total({ booking, currency }: TotalProps) {
totalPriceInMoney > 0 ? `${totalPriceInMoney} ${currency}` : ""
const pointsString =
totalPriceInPoints > 0
? `${totalPriceInPoints} ${intl.formatMessage({
defaultMessage: "Points",
})}`
? intl.formatMessage(
{
id: "common.numberOfPoints",
defaultMessage: "{points, plural, one {# point} other {# points}}",
},
{ points: totalPriceInPoints }
)
: ""
const plusString = moneyString && pointsString ? " + " : ""
@@ -36,11 +40,13 @@ export default async function Total({ booking, currency }: TotalProps) {
<div>
<span className={styles.title}>
{intl.formatMessage({
id: "receipt.preliminaryReceipt",
defaultMessage: "Preliminary receipt",
})}
</span>
<span className={styles.titleSubtext}>
{intl.formatMessage({
id: "myStay.receipt.finalVatBreakdownInfo",
defaultMessage:
"Final VAT breakdown will be provided at check-out.",
})}
@@ -53,6 +59,7 @@ export default async function Total({ booking, currency }: TotalProps) {
<Typography>
<dt>
{intl.formatMessage({
id: "receipt.totalIncludingVat",
defaultMessage: "Total including VAT",
})}
</dt>
@@ -67,6 +74,7 @@ export default async function Total({ booking, currency }: TotalProps) {
<Typography>
<dt className={styles.tertiary}>
{intl.formatMessage({
id: "receipt.totalExcludingVat",
defaultMessage: "Total excluding VAT",
})}
</dt>
@@ -85,6 +93,7 @@ export default async function Total({ booking, currency }: TotalProps) {
<Typography>
<dt className={styles.tertiary}>
{intl.formatMessage({
id: "common.vat",
defaultMessage: "VAT",
})}
</dt>

View File

@@ -152,6 +152,7 @@ export async function Receipt({ refId }: { refId: string }) {
<Typography variant="Body/Supporting text (caption)/smRegular">
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
<div>{`${intl.formatMessage({
id: "myStay.receipt.member",
defaultMessage: "Member",
})} ${maskedBooking.guest.membershipNumber}`}</div>
</Typography>
@@ -204,6 +205,7 @@ export async function Receipt({ refId }: { refId: string }) {
<Typography variant="Title/md">
<h1>
{intl.formatMessage({
id: "myStay.accessDenied.loginRequired",
defaultMessage: "You need to be logged in to view your booking",
})}
</h1>
@@ -211,6 +213,7 @@ export async function Receipt({ refId }: { refId: string }) {
<Typography variant="Body/Lead text">
<p>
{intl.formatMessage({
id: "myStay.accessDenied.loginRequiredMessage",
defaultMessage:
"And you need to be logged in with the same member account that made the booking.",
})}

View File

@@ -12,7 +12,10 @@ export default function CustomerSupport() {
return (
<DialogTrigger>
<Button fullWidth intent="secondary" size="small">
{intl.formatMessage({ defaultMessage: "Customer Support" })}
{intl.formatMessage({
id: "common.customerSupport",
defaultMessage: "Customer support",
})}
</Button>
<CustomerSupportModal />
</DialogTrigger>

View File

@@ -18,7 +18,10 @@ export default function Cancelled() {
{/* (S) TODO - Link to where?? */}
{!isWebview(pathname) && (
<Link className={styles.link} href="#">
{intl.formatMessage({ defaultMessage: "Rebook" })}
{intl.formatMessage({
defaultMessage: "Rebook",
id: "myStay.referenceCard.actions.rebook",
})}
</Link>
)}

View File

@@ -19,9 +19,13 @@ export default function CustomerSupportModal() {
phone: state.hotel.contactInformation.phoneNumber,
}))
const title = intl.formatMessage({ defaultMessage: "Customer service" })
const title = intl.formatMessage({
id: "common.customerService",
defaultMessage: "Customer service",
})
const contact = intl.formatMessage(
{
id: "myStay.referenceCard.actions.customerSupport.contactInfo",
defaultMessage:
"Please call {phone} or email us at {email} for assistance with your order.",
},
@@ -45,6 +49,7 @@ export default function CustomerSupportModal() {
<Typography variant="Title/Subtitle/md">
<span>
{intl.formatMessage({
id: "myStay.referenceCard.actions.customerSupport.makeCall",
defaultMessage: "Make a call",
})}
</span>
@@ -55,6 +60,7 @@ export default function CustomerSupportModal() {
<Typography variant="Title/Subtitle/md">
<span>
{intl.formatMessage({
id: "myStay.referenceCard.actions.customerSupport.sendEmail",
defaultMessage: "Send an email",
})}
</span>
@@ -64,10 +70,16 @@ export default function CustomerSupportModal() {
</Modal.Content.Body>
<Modal.Content.Footer>
<Modal.Content.Footer.Secondary onClick={close}>
{intl.formatMessage({ defaultMessage: "Back" })}
{intl.formatMessage({
id: "common.back",
defaultMessage: "Back",
})}
</Modal.Content.Footer.Secondary>
<Modal.Content.Footer.Primary intent="secondary" onClick={close}>
{intl.formatMessage({ defaultMessage: "Close" })}
{intl.formatMessage({
id: "common.close",
defaultMessage: "Close",
})}
</Modal.Content.Footer.Primary>
</Modal.Content.Footer>
</Modal.Content>

View File

@@ -34,6 +34,7 @@ export default function AddToCalendarButton({
<Typography variant="Body/Paragraph/mdBold">
<span className={styles.text}>
{intl.formatMessage({
id: "common.addToCalendar",
defaultMessage: "Add to calendar",
})}
</span>

View File

@@ -17,7 +17,10 @@ export default function Alerts({ children, closeModal }: AlertsProps) {
const mainRoom = useMyStayStore((state) => state.bookedRoom)
if (!mainRoom) {
const title = intl.formatMessage({ defaultMessage: "Cancel stay" })
const title = intl.formatMessage({
id: "booking.cancelStay",
defaultMessage: "Cancel stay",
})
return (
<Modal.Content>
<Modal.Content.Header handleClose={closeModal} title={title} />
@@ -25,9 +28,11 @@ export default function Alerts({ children, closeModal }: AlertsProps) {
<Alert
type={AlertTypeEnum.Info}
heading={intl.formatMessage({
id: "myStay.actions.contactBooker",
defaultMessage: "Contact the person who booked the stay",
})}
text={intl.formatMessage({
id: "myStay.actions.contactBooker.multiroom.cancel",
defaultMessage:
"As this is a multiroom stay, the cancellation has to be done by the person who made the booking. Please call 08-517 517 00 to talk to our customer service if you would need further assistance.",
})}
@@ -35,7 +40,10 @@ export default function Alerts({ children, closeModal }: AlertsProps) {
</Modal.Content.Body>
<Modal.Content.Footer>
<Modal.Content.Footer.Secondary onClick={closeModal}>
{intl.formatMessage({ defaultMessage: "Back" })}
{intl.formatMessage({
id: "common.back",
defaultMessage: "Back",
})}
</Modal.Content.Footer.Secondary>
</Modal.Content.Footer>
</Modal.Content>

View File

@@ -46,19 +46,21 @@ export default function CancelStayPriceContainer() {
const adultsText = intl.formatMessage(
{
defaultMessage: "{totalAdults, plural, one {# adult} other {# adults}}",
id: "booking.numberOfAdults",
defaultMessage: "{adults, plural, one {# adult} other {# adults}}",
},
{ totalAdults: totalAdults }
{ adults: totalAdults }
)
const childrenText = intl.formatMessage(
{
defaultMessage:
"{totalChildren, plural, one {# child} other {# children}}",
id: "booking.numberOfChildren",
defaultMessage: "{children, plural, one {# child} other {# children}}",
},
{ totalChildren: totalChildren }
{ children: totalChildren }
)
const nightsText = intl.formatMessage(
{
id: "booking.numberOfNights",
defaultMessage: "{totalNights, plural, one {# night} other {# nights}}",
},
{ totalNights: nights }
@@ -70,7 +72,10 @@ export default function CancelStayPriceContainer() {
childrenText={childrenText}
nightsText={nightsText}
price={formatPrice(intl, 0, bookedRoom.currencyCode)}
text={intl.formatMessage({ defaultMessage: "Total due" })}
text={intl.formatMessage({
id: "booking.totalDue",
defaultMessage: "Total due",
})}
totalChildren={totalChildren}
/>
)

View File

@@ -21,11 +21,16 @@ export default function Multiroom() {
return null
}
const myRooms = intl.formatMessage({ defaultMessage: "My rooms" })
const myRooms = intl.formatMessage({
defaultMessage: "My rooms",
id: "myStay.cancelStay.myRooms",
})
const selectRoom = intl.formatMessage({
id: "booking.selectRoom",
defaultMessage: "Select room",
})
const cannotBeCancelled = intl.formatMessage({
id: "myStay.cancelStay.cannotBeCancelled",
defaultMessage: "Cannot be cancelled",
})
@@ -35,6 +40,7 @@ export default function Multiroom() {
<Typography variant="Body/Supporting text (caption)/smBold">
<p>
{intl.formatMessage({
id: "myStay.cancelStay.multipleTermsNotice",
defaultMessage: "This stay has multiple terms.",
})}
</p>
@@ -58,7 +64,10 @@ interface ListProps {
function List({ disabled = false, rooms, title }: ListProps) {
const intl = useIntl()
const refMsg = intl.formatMessage({ defaultMessage: "Ref" })
const refMsg = intl.formatMessage({
id: "myStay.cancelStay.ref",
defaultMessage: "Ref",
})
return (
<div className={styles.rooms}>
<Typography variant="Title/Overline/sm">
@@ -81,6 +90,7 @@ function List({ disabled = false, rooms, title }: ListProps) {
<p className={styles.chipText}>
{intl.formatMessage(
{
id: "booking.roomIndex",
defaultMessage: "Room {roomIndex}",
},
{

View File

@@ -49,16 +49,22 @@ export default function CancelStayConfirmation({
.locale(lang)
.format(longDateWithYearFormat[lang])
const title = intl.formatMessage({ defaultMessage: "Cancel booking" })
const title = intl.formatMessage({
id: "common.cancelBooking",
defaultMessage: "Cancel booking",
})
const primaryLabel = intl.formatMessage({
id: "booking.cancelStay",
defaultMessage: "Cancel stay",
})
const secondaryLabel = intl.formatMessage({
id: "common.back",
defaultMessage: "Back",
})
const notCancelableText = intl.formatMessage(
{
id: "myStay.referenceCard.actions.cancelStay.notCancelableText",
defaultMessage:
"Your stay has been booked with <strong>{rate}</strong> terms which unfortunately doesnt allow for cancellation.",
},
@@ -70,6 +76,7 @@ export default function CancelStayConfirmation({
const text = intl.formatMessage(
{
id: "myStay.referenceCard.actions.cancelStay.confirmationText",
defaultMessage:
"Are you sure you want to cancel your stay at <strong>{hotel}</strong> from <strong>{checkInDate}</strong> to <strong>{checkOutDate}?</strong> This can't be reversed.",
},
@@ -123,7 +130,10 @@ export default function CancelStayConfirmation({
</Modal.Content.Footer.Primary>
) : (
<Modal.Content.Footer.Primary intent="secondary" onClick={closeModal}>
{intl.formatMessage({ defaultMessage: "Close" })}
{intl.formatMessage({
id: "common.close",
defaultMessage: "Close",
})}
</Modal.Content.Footer.Primary>
)}
</Modal.Content.Footer>

View File

@@ -36,9 +36,11 @@ export default function FinalConfirmation({
}))
const cancelledStayMsg = intl.formatMessage({
id: "myStay.cancelStay.stayCancelledToastMessage",
defaultMessage: "Your stay was cancelled",
})
const sorryMsg = intl.formatMessage({
id: "myStay.cancelStay.sorryMessage",
defaultMessage: "Were sorry that things didnt work out.",
})
@@ -86,7 +88,10 @@ export default function FinalConfirmation({
<span className={styles.textDefault}>
<strong>
{intl.formatMessage(
{ defaultMessage: "{roomName} room was cancelled" },
{
id: "myStay.cancelStay.roomCancelledToastMessage",
defaultMessage: "{roomName} room was cancelled",
},
{ roomName: cancelledRoom.roomName }
)}
</strong>
@@ -95,6 +100,7 @@ export default function FinalConfirmation({
<Typography variant="Body/Supporting text (caption)/smRegular">
<span className={styles.textDefault}>
{intl.formatMessage({
id: "myStay.cancelStay.stayStillActiveToastMessage",
defaultMessage:
"Your Stay is still active with the other room",
})}
@@ -107,6 +113,7 @@ export default function FinalConfirmation({
} else {
toast.warning(
intl.formatMessage({
id: "myStay.cancelStay.partialCancellationErrorMessage",
defaultMessage:
"Some rooms were cancelled successfully, but we encountered issues with others. Please contact customer service for assistance.",
})
@@ -125,6 +132,7 @@ export default function FinalConfirmation({
onError() {
toast.error(
intl.formatMessage({
id: "myStay.cancelStay.cancellationErrorMessage",
defaultMessage: "Something went wrong. Please try again later.",
})
)
@@ -145,6 +153,7 @@ export default function FinalConfirmation({
} else {
toast.error(
intl.formatMessage({
id: "myStay.cancelStay.cancellationErrorMessage",
defaultMessage: "Something went wrong. Please try again later.",
})
)
@@ -152,15 +161,19 @@ export default function FinalConfirmation({
}
const confirm = intl.formatMessage({
id: "myStay.cancelStay.confirmCancellation",
defaultMessage: "Confirm cancellation",
})
const dontCancel = intl.formatMessage({
id: "myStay.cancelStay.dontCancel",
defaultMessage: "Don't cancel",
})
const text = intl.formatMessage({
id: "myStay.cancelStay.finalConfirmationText",
defaultMessage: "Are you sure you want to continue with the cancellation?",
})
const title = intl.formatMessage({
id: "common.cancelBooking",
defaultMessage: "Cancel booking",
})

View File

@@ -20,7 +20,10 @@ export default function CancelStay() {
return (
<DialogTrigger>
<Modal.Button icon="cancel" onClick={trackCancelStay}>
{intl.formatMessage({ defaultMessage: "Cancel stay" })}
{intl.formatMessage({
id: "booking.cancelStay",
defaultMessage: "Cancel stay",
})}
</Modal.Button>
<Modal>
<Dialog className={styles.dialog}>

View File

@@ -17,6 +17,7 @@ export default function CannotChangeDate({
<Modal.Content.Header
handleClose={closeModal}
title={intl.formatMessage({
id: "myStay.actions.changeDates",
defaultMessage: "New dates for the stay",
})}
/>
@@ -24,9 +25,11 @@ export default function CannotChangeDate({
<Alert
type={AlertTypeEnum.Info}
heading={intl.formatMessage({
id: "myStay.referenceCard.actions.changeDates.contactCustomerService",
defaultMessage: "Contact customer service",
})}
text={intl.formatMessage({
id: "myStay.referenceCard.actions.changeDates.contactCustomerService.text",
defaultMessage:
"Please contact customer service to update the dates.",
})}
@@ -34,7 +37,7 @@ export default function CannotChangeDate({
</Modal.Content.Body>
<Modal.Content.Footer>
<Modal.Content.Footer.Secondary onClick={closeModal}>
{intl.formatMessage({ defaultMessage: "Back" })}
{intl.formatMessage({ defaultMessage: "Back", id: "common.back" })}
</Modal.Content.Footer.Secondary>
</Modal.Content.Footer>
</Modal.Content>

View File

@@ -17,6 +17,7 @@ export default function MultiRoomBooking({
<Modal.Content.Header
handleClose={closeModal}
title={intl.formatMessage({
id: "myStay.actions.changeDates",
defaultMessage: "New dates for the stay",
})}
/>
@@ -24,9 +25,11 @@ export default function MultiRoomBooking({
<Alert
type={AlertTypeEnum.Info}
heading={intl.formatMessage({
id: "myStay.referenceCard.actions.changeDates.contactCustomerService",
defaultMessage: "Contact customer service",
})}
text={intl.formatMessage({
id: "myStay.actions.contactBooker.multiroom.update",
defaultMessage:
"As this is a multiroom stay, any dates changes are applicable to all rooms. Please contact customer service to update the dates.",
})}
@@ -34,7 +37,7 @@ export default function MultiRoomBooking({
</Modal.Content.Body>
<Modal.Content.Footer>
<Modal.Content.Footer.Secondary onClick={closeModal}>
{intl.formatMessage({ defaultMessage: "Back" })}
{intl.formatMessage({ defaultMessage: "Back", id: "common.back" })}
</Modal.Content.Footer.Secondary>
</Modal.Content.Footer>
</Modal.Content>

View File

@@ -17,6 +17,7 @@ export default function NotMainRoom({
<Modal.Content.Header
handleClose={closeModal}
title={intl.formatMessage({
id: "myStay.actions.changeDates",
defaultMessage: "New dates for the stay",
})}
/>
@@ -24,9 +25,11 @@ export default function NotMainRoom({
<Alert
type={AlertTypeEnum.Info}
heading={intl.formatMessage({
id: "myStay.actions.contactBooker",
defaultMessage: "Contact the person who booked the stay",
})}
text={intl.formatMessage({
id: "myStay.actions.contactBooker.multiroom.updateDates",
defaultMessage:
"As this is a multiroom stay, any dates changes are applicable to all rooms. Please ask the person who booked the stay to contact customer service.",
})}
@@ -34,7 +37,7 @@ export default function NotMainRoom({
</Modal.Content.Body>
<Modal.Content.Footer>
<Modal.Content.Footer.Secondary onClick={closeModal}>
{intl.formatMessage({ defaultMessage: "Back" })}
{intl.formatMessage({ defaultMessage: "Back", id: "common.back" })}
</Modal.Content.Footer.Secondary>
</Modal.Content.Footer>
</Modal.Content>

View File

@@ -23,9 +23,11 @@ export default function PriceAndDate({
const intl = useIntl()
const checkInMsg = intl.formatMessage({
id: "common.checkIn",
defaultMessage: "Check-in",
})
const checkOutMsg = intl.formatMessage({
id: "common.checkOut",
defaultMessage: "Check-out",
})

View File

@@ -64,6 +64,7 @@ export default function Confirmation({
toast.success(
intl.formatMessage({
id: "myStay.changeDates.stayUpdatedToastMessage",
defaultMessage: "Your stay was updated",
})
)
@@ -72,6 +73,7 @@ export default function Confirmation({
} else {
toast.error(
intl.formatMessage({
id: "myStay.changeDates.stayUpdateFailedToastMessage",
defaultMessage: "Failed to update your stay",
})
)
@@ -80,6 +82,7 @@ export default function Confirmation({
onError: () => {
toast.error(
intl.formatMessage({
id: "myStay.changeDates.stayUpdateFailedToastMessage",
defaultMessage: "Failed to update your stay",
})
)
@@ -106,34 +109,40 @@ export default function Confirmation({
const nightsText = intl.formatMessage(
{
id: "booking.numberOfNights",
defaultMessage: "{totalNights, plural, one {# night} other {# nights}}",
},
{ totalNights: nights }
)
const newDatesLabel = intl.formatMessage({
id: "myStay.changeDates.newDatesLabel",
defaultMessage: "New dates",
})
const oldDatesLabel = intl.formatMessage({
id: "myStay.changeDates.oldDatesLabel",
defaultMessage: "Old dates",
})
const title = intl.formatMessage({
id: "myStay.changeDates.confirmationTitle",
defaultMessage: "Confirm date change",
})
const totalDueMsg = intl.formatMessage({
id: "myStay.changeDates.payAtHotelMessage",
defaultMessage: "Pay at the hotel",
})
const adultsText = intl.formatMessage(
{
defaultMessage: "{totalAdults, plural, one {# adult} other {# adults}}",
id: "booking.numberOfAdults",
defaultMessage: "{adults, plural, one {# adult} other {# adults}}",
},
{ totalAdults: totalAdults }
{ adults: totalAdults }
)
const childrenText = intl.formatMessage(
{
defaultMessage:
"{totalChildren, plural, one {# child} other {# children}}",
id: "booking.numberOfChildren",
defaultMessage: "{children, plural, one {# child} other {# children}}",
},
{ totalChildren: totalChildren }
{ children: totalChildren }
)
return (
@@ -172,13 +181,16 @@ export default function Confirmation({
</Modal.Content.Body>
<Modal.Content.Footer>
<Modal.Content.Footer.Secondary onClick={closeModal}>
{intl.formatMessage({ defaultMessage: "Back" })}
{intl.formatMessage({ defaultMessage: "Back", id: "common.back" })}
</Modal.Content.Footer.Secondary>
<Modal.Content.Footer.Primary
disabled={updateBooking.isPending}
onClick={handleModifyStay}
>
{intl.formatMessage({ defaultMessage: "Confirm" })}
{intl.formatMessage({
defaultMessage: "Confirm",
id: "common.confirm",
})}
</Modal.Content.Footer.Primary>
</Modal.Content.Footer>
</Modal.Content>

View File

@@ -10,9 +10,11 @@ export default function NoAvailability() {
<Alert
type={AlertTypeEnum.Info}
heading={intl.formatMessage({
id: "booking.noAvailability",
defaultMessage: "No availability",
})}
text={intl.formatMessage({
id: "myStay.referenceCard.actions.changeDates.noAvailability.text",
defaultMessage: "No single rooms are available on these dates",
})}
/>

View File

@@ -62,8 +62,14 @@ export default function NewDates({ checkInDate, checkOutDate }: NewDatesProps) {
}
}
const checkInLabel = intl.formatMessage({ defaultMessage: "Check-in" })
const checkOutLabel = intl.formatMessage({ defaultMessage: "Check-out" })
const checkInLabel = intl.formatMessage({
id: "common.checkIn",
defaultMessage: "Check-in",
})
const checkOutLabel = intl.formatMessage({
id: "common.checkOut",
defaultMessage: "Check-out",
})
const checkInText = dt(fromDate)
.locale(lang)

View File

@@ -45,6 +45,7 @@ export default function Form({
} else {
toast.error(
intl.formatMessage({
id: "myStay.actions.changeDates.selectDate.errorMessage",
defaultMessage: "Please select dates",
})
)
@@ -58,6 +59,7 @@ export default function Form({
<Modal.Content.Header
handleClose={closeModal}
title={intl.formatMessage({
id: "myStay.actions.changeDates",
defaultMessage: "New dates for the stay",
})}
/>
@@ -67,7 +69,10 @@ export default function Form({
</Modal.Content.Body>
<Modal.Content.Footer>
<Modal.Content.Footer.Secondary onClick={closeModal}>
{intl.formatMessage({ defaultMessage: "Back" })}
{intl.formatMessage({
defaultMessage: "Back",
id: "common.back",
})}
</Modal.Content.Footer.Secondary>
<Modal.Content.Footer.Primary
disabled={methods.formState.isSubmitting}
@@ -75,6 +80,7 @@ export default function Form({
type="submit"
>
{intl.formatMessage({
id: "myStay.actions.changeDates.checkAvailability",
defaultMessage: "Check availability",
})}
</Modal.Content.Footer.Primary>

View File

@@ -34,7 +34,10 @@ export default function ChangeDates() {
trackMyStayPageLink("modify dates")
}
const text = intl.formatMessage({ defaultMessage: "Change dates" })
const text = intl.formatMessage({
defaultMessage: "Change dates",
id: "myStay.referenceCard.actions.changeDates",
})
return (
<DialogTrigger>
<Modal.Button

View File

@@ -16,7 +16,10 @@ export default function CustomerSupport() {
return (
<DialogTrigger>
<Modal.Button icon="support_agent" onClick={trackCustomerSupport}>
{intl.formatMessage({ defaultMessage: "Customer support" })}
{intl.formatMessage({
id: "common.customerSupport",
defaultMessage: "Customer support",
})}
</Modal.Button>
<CustomerSupportModal />
</DialogTrigger>

View File

@@ -109,6 +109,7 @@ export default function Form() {
handleGuaranteeError("No confirmation number")
toast.error(
intl.formatMessage({
id: "errorMessage.somethingWentWrong",
defaultMessage: "Something went wrong!",
})
)
@@ -117,6 +118,7 @@ export default function Form() {
const guaranteeMsg = intl.formatMessage(
{
id: "myStay.gla.termsAndConditionsMessage",
defaultMessage:
"I accept the terms for this stay and the general <termsAndConditionsLink>Booking & Cancellation Terms</termsAndConditionsLink>, and understand Scandic will process my personal data for this stay in accordance with <privacyPolicyLink>Scandic's Privacy Policy</privacyPolicyLink>. ",
},
@@ -169,9 +171,12 @@ export default function Form() {
name="paymentMethod"
label={
savedCreditCards?.length
? intl.formatMessage({
defaultMessage: "OTHER",
})
? intl
.formatMessage({
id: "common.other",
defaultMessage: "Other",
})
.toUpperCase()
: undefined
}
onChange={(method) => {
@@ -181,6 +186,7 @@ export default function Form() {
<PaymentOption
value={PaymentMethodEnum.card}
label={intl.formatMessage({
id: "common.creditCard",
defaultMessage: "Credit card",
})}
/>
@@ -197,6 +203,7 @@ export default function Form() {
<Typography variant="Body/Supporting text (caption)/smBold">
<span className={styles.textDefault}>
{intl.formatMessage({
id: "booking.totalDue",
defaultMessage: "Total due",
})}
</span>
@@ -204,6 +211,7 @@ export default function Form() {
<Typography variant="Body/Supporting text (caption)/smRegular">
<span className={styles.textDefault}>
{intl.formatMessage({
id: "myStay.gla.chargeInfo",
defaultMessage:
"Your card will only be charged in the event of a no-show",
})}

View File

@@ -43,10 +43,12 @@ export default function GuaranteeLateArrival() {
}
const arriveLateMsg = intl.formatMessage({
id: "myStay.gla.arriveLateMessage",
defaultMessage:
"Planning to arrive after 18.00? Secure your room by guaranteeing it with a credit card. Without the guarantee and in case of no-show, the room might be reallocated after 18:00.",
})
const text = intl.formatMessage({
id: "myStay.gla.heading",
defaultMessage: "Guarantee late arrival",
})
@@ -69,10 +71,16 @@ export default function GuaranteeLateArrival() {
</Modal.Content.Body>
<Modal.Content.Footer>
<Modal.Content.Footer.Secondary onClick={close}>
{intl.formatMessage({ defaultMessage: "Back" })}
{intl.formatMessage({
id: "common.back",
defaultMessage: "Back",
})}
</Modal.Content.Footer.Secondary>
<Modal.Content.Footer.Primary form="guarantee" type="submit">
{intl.formatMessage({ defaultMessage: "Guarantee" })}
{intl.formatMessage({
id: "myStay.gla.guarantee",
defaultMessage: "Guarantee",
})}
</Modal.Content.Footer.Primary>
</Modal.Content.Footer>
</Modal.Content>

View File

@@ -35,6 +35,7 @@ export default function ViewAndPrintReceipt() {
}
const printMsg = intl.formatMessage({
id: "myStay.manageStay.viewReceipt",
defaultMessage: "View and print receipt",
})

View File

@@ -9,7 +9,10 @@ import styles from "./info.module.css"
export default function Info() {
const intl = useIntl()
const text = intl.formatMessage({ defaultMessage: "Booking number" })
const text = intl.formatMessage({
id: "common.bookingNumber",
defaultMessage: "Booking number",
})
const { address, confirmationNumber, hotelName, phoneNumber } =
useMyStayStore((state) => ({

View File

@@ -29,6 +29,7 @@ export default function ManageStay() {
: "Icon/Inverted"
const manageStay = intl.formatMessage({
id: "myStay.manageStay.manageStay",
defaultMessage: "Manage stay",
})

View File

@@ -25,6 +25,7 @@ export default function NotCancelled() {
<Typography variant="Body/Supporting text (caption)/smBold">
<span>
{intl.formatMessage({
id: "myStay.referenceCard.actions.findUs",
defaultMessage: "Find us",
})}
</span>

View File

@@ -22,6 +22,7 @@ export default function BookingCode() {
<Typography variant="Body/Supporting text (caption)/smRegular">
<p>
{intl.formatMessage({
id: "booking.bookingCode",
defaultMessage: "Booking code",
})}
</p>

View File

@@ -19,6 +19,7 @@ export default function Cancellations() {
const totalRoomsMsg = intl.formatMessage(
{
id: "booking.numberOfRooms",
defaultMessage: "{totalRooms, plural, one {# room} other {# rooms}}",
},
{ totalRooms: cancelledRooms }
@@ -30,7 +31,10 @@ export default function Cancellations() {
<MaterialIcon icon="cancel" />
<Typography variant="Body/Paragraph/mdRegular">
<p className={styles.textDefault}>
{intl.formatMessage({ defaultMessage: "Cancellations" })}
{intl.formatMessage({
id: "common.cancellations",
defaultMessage: "Cancellations",
})}
</p>
</Typography>
</div>

View File

@@ -37,6 +37,7 @@ export default function Dates() {
<Typography variant="Body/Paragraph/mdRegular">
<p className={styles.textDefault}>
{intl.formatMessage({
id: "dates",
defaultMessage: "Dates",
})}
</p>

View File

@@ -30,6 +30,7 @@ export default function GuaranteeInfo() {
<Typography variant="Body/Paragraph/mdRegular">
<p className={styles.textDefault}>
{intl.formatMessage({
id: "myStay.lateArrival",
defaultMessage: "Late arrival",
})}
</p>
@@ -38,6 +39,7 @@ export default function GuaranteeInfo() {
<Typography variant="Body/Paragraph/mdRegular">
<p>
{intl.formatMessage({
id: "myStay.checkInAfter18",
defaultMessage: "Check-in after 18:00",
})}
</p>

View File

@@ -21,6 +21,7 @@ export default function Guests() {
const adultsMsg = intl.formatMessage(
{
id: "booking.numberOfAdults",
defaultMessage: "{adults, plural, one {# adult} other {# adults}}",
},
{ adults }
@@ -28,6 +29,7 @@ export default function Guests() {
const childrenMsg = intl.formatMessage(
{
id: "booking.numberOfChildren",
defaultMessage: "{children, plural, one {# child} other {# children}}",
},
{ children }
@@ -49,7 +51,10 @@ export default function Guests() {
<MaterialIcon icon="person" />
<Typography variant="Body/Paragraph/mdRegular">
<p className={styles.textDefault}>
{intl.formatMessage({ defaultMessage: "Guests" })}
{intl.formatMessage({
id: "booking.guests",
defaultMessage: "Guests",
})}
</p>
</Typography>
</div>

View File

@@ -24,9 +24,11 @@ export default function Reference() {
const title = isCancelled
? intl.formatMessage({
id: "myStay.cancellationNumber",
defaultMessage: "Cancellation number",
})
: intl.formatMessage({
id: "common.bookingNumber",
defaultMessage: "Booking number",
})

View File

@@ -16,9 +16,11 @@ export default function Room() {
}))
const roomMsg = intl.formatMessage({
id: "common.room",
defaultMessage: "Room",
})
const roomsMsg = intl.formatMessage({
id: "common.rooms",
defaultMessage: "Rooms",
})

View File

@@ -35,6 +35,7 @@ export function ReferenceCard() {
<Typography variant="Body/Lead text">
<p>
{intl.formatMessage({
id: "common.total",
defaultMessage: "Total",
})}
</p>

View File

@@ -63,6 +63,7 @@ export default function Room({ booking, roomNr, user }: RoomProps) {
const adultsMsg = intl.formatMessage(
{
id: "booking.numberOfAdults",
defaultMessage: "{adults, plural, one {# adult} other {# adults}}",
},
{
@@ -72,6 +73,7 @@ export default function Room({ booking, roomNr, user }: RoomProps) {
const childrenMsg = intl.formatMessage(
{
id: "booking.numberOfChildren",
defaultMessage: "{children, plural, one {# child} other {# children}}",
},
{
@@ -85,10 +87,12 @@ export default function Room({ booking, roomNr, user }: RoomProps) {
const formattedTotalPrice = formatPrice(intl, totalPrice, currencyCode)
let breakfastPrice = intl.formatMessage({
id: "common.noBreakfast",
defaultMessage: "No breakfast",
})
if (rateDefinition.breakfastIncluded) {
breakfastPrice = intl.formatMessage({
id: "common.included",
defaultMessage: "Included",
})
} else if (breakfast) {
@@ -132,6 +136,7 @@ export default function Room({ booking, roomNr, user }: RoomProps) {
<Typography variant="Body/Supporting text (caption)/smBold">
<span>
{intl.formatMessage({
id: "common.cancelled",
defaultMessage: "Cancelled",
})}
</span>
@@ -143,6 +148,7 @@ export default function Room({ booking, roomNr, user }: RoomProps) {
<span>
{intl.formatMessage(
{
id: "booking.roomIndex",
defaultMessage: "Room {roomIndex}",
},
{
@@ -158,6 +164,7 @@ export default function Room({ booking, roomNr, user }: RoomProps) {
{isCancelled ? (
<span>
{intl.formatMessage({
id: "booking.cancellationNo",
defaultMessage: "Cancellation no",
})}
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
@@ -166,6 +173,7 @@ export default function Room({ booking, roomNr, user }: RoomProps) {
) : (
<span>
{intl.formatMessage({
id: "common.bookingNumber",
defaultMessage: "Booking number",
})}
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
@@ -227,6 +235,7 @@ export default function Room({ booking, roomNr, user }: RoomProps) {
<Typography variant="Body/Paragraph/mdBold">
<p>
{intl.formatMessage({
id: "booking.guests",
defaultMessage: "Guests",
})}
</p>
@@ -242,6 +251,7 @@ export default function Room({ booking, roomNr, user }: RoomProps) {
<Typography variant="Body/Paragraph/mdBold">
<p>
{intl.formatMessage({
id: "booking.terms",
defaultMessage: "Terms",
})}
</p>
@@ -290,6 +300,7 @@ export default function Room({ booking, roomNr, user }: RoomProps) {
<Typography variant="Body/Paragraph/mdBold">
<p>
{intl.formatMessage({
id: "myStay.modifyBy",
defaultMessage: "Modify By",
})}
</p>
@@ -306,6 +317,7 @@ export default function Room({ booking, roomNr, user }: RoomProps) {
<Typography variant="Body/Paragraph/mdBold">
<p>
{intl.formatMessage({
id: "common.breakfast",
defaultMessage: "Breakfast",
})}
</p>
@@ -321,6 +333,7 @@ export default function Room({ booking, roomNr, user }: RoomProps) {
<Typography variant="Body/Lead text">
<p>
{intl.formatMessage({
id: "booking.roomTotal",
defaultMessage: "Room total",
})}
</p>

View File

@@ -33,6 +33,7 @@ export default function MultiRoom(props: MultiRoomProps) {
<Typography variant="Title/sm">
<h2 className={styles.title}>
{intl.formatMessage({
id: "myStay.yourRooms",
defaultMessage: "Your rooms",
})}
</h2>
@@ -54,6 +55,7 @@ export default function MultiRoom(props: MultiRoomProps) {
<Typography variant="Body/Lead text">
<p>
{intl.formatMessage({
id: "myStay.bookingTotal",
defaultMessage: "Booking total",
})}
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}

View File

@@ -24,6 +24,7 @@ export default function BookingCode() {
>
{intl.formatMessage(
{
id: "booking.bookingCodeWithValue",
defaultMessage: "<strong>Booking code</strong>: {value}",
},
{

View File

@@ -40,6 +40,7 @@ export default function PriceDetails() {
<Typography variant="Body/Lead text">
<p>
{intl.formatMessage({
id: "booking.roomTotal",
defaultMessage: "Room total",
})}
</p>

View File

@@ -15,6 +15,7 @@ export default function BedPreference() {
const mainBedWidthValueMsg = intl.formatMessage(
{
id: "room.bedSize",
defaultMessage: "{value} cm",
},
{
@@ -24,7 +25,8 @@ export default function BedPreference() {
const mainBedWidthRangeMsg = intl.formatMessage(
{
defaultMessage: "{min}{max} cm",
id: "room.bedSizeRange",
defaultMessage: "{min}-{max} cm",
},
{
min: bedType.mainBed.widthRange.min,
@@ -42,6 +44,7 @@ export default function BedPreference() {
icon="bed"
text={text}
title={intl.formatMessage({
id: "booking.bedPreference",
defaultMessage: "Bed preference",
})}
/>

View File

@@ -19,10 +19,12 @@ export default function Breakfast() {
)
let breakfastPrice = intl.formatMessage({
id: "common.noBreakfast",
defaultMessage: "No breakfast",
})
if (rateDefinition.breakfastIncluded) {
breakfastPrice = intl.formatMessage({
id: "common.included",
defaultMessage: "Included",
})
} else if (breakfast) {
@@ -34,6 +36,9 @@ export default function Breakfast() {
)
}
const title = intl.formatMessage({ defaultMessage: "Breakfast" })
const title = intl.formatMessage({
id: "common.breakfast",
defaultMessage: "Breakfast",
})
return <Row icon="coffee" text={breakfastPrice} title={title} />
}

View File

@@ -14,6 +14,7 @@ export default function Guests() {
const adultsMsg = intl.formatMessage(
{
id: "booking.numberOfAdults",
defaultMessage: "{adults, plural, one {# adult} other {# adults}}",
},
{
@@ -23,6 +24,7 @@ export default function Guests() {
const childrenMsg = intl.formatMessage(
{
id: "booking.numberOfChildren",
defaultMessage: "{children, plural, one {# child} other {# children}}",
},
{
@@ -38,6 +40,7 @@ export default function Guests() {
icon="person"
text={childrenAges.length > 0 ? adultsAndChildrenMsg : adultsOnlyMsg}
title={intl.formatMessage({
id: "booking.guests",
defaultMessage: "Guests",
})}
/>

View File

@@ -29,6 +29,7 @@ export default function ModifyBy() {
const text = intl.formatMessage(
{
id: "common.untilWithTimeAndDate",
defaultMessage: "Until {time}, {date}",
},
{
@@ -42,6 +43,7 @@ export default function ModifyBy() {
icon="refresh"
text={text}
title={intl.formatMessage({
id: "booking.changeOrCancel",
defaultMessage: "Change or cancel",
})}
/>

View File

@@ -32,6 +32,7 @@ export default function Packages() {
icon="meeting_room"
text={packages.join(", ")}
title={intl.formatMessage({
id: "booking.roomClassification",
defaultMessage: "Room classification",
})}
/>

View File

@@ -42,6 +42,7 @@ export default function Terms() {
icon="contract"
text={rateTerm.title}
title={intl.formatMessage({
id: "booking.terms",
defaultMessage: "Terms",
})}
>

View File

@@ -27,6 +27,7 @@ export default function Header({ user }: { user: SafeUser }) {
<span>
{intl.formatMessage(
{
id: "booking.roomIndex",
defaultMessage: "Room {roomIndex}",
},
{
@@ -40,6 +41,7 @@ export default function Header({ user }: { user: SafeUser }) {
<Typography variant="Body/Paragraph/mdBold">
<span>
{intl.formatMessage({
id: "common.bookingNumber",
defaultMessage: "Booking number",
})}
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}

View File

@@ -43,7 +43,10 @@ export default function RoomDetailsSidePeek({
})
}}
>
{intl.formatMessage({ defaultMessage: "See room details" })}
{intl.formatMessage({
id: "hotel.seeRoomDetails",
defaultMessage: "See room details",
})}
<MaterialIcon icon="chevron_right" size={14} color="CurrentColor" />
</Button>
<SidePeekSelfControlled

View File

@@ -250,13 +250,16 @@ export default async function MyStay(props: {
{!isWebview && (
<Promo
title={intl.formatMessage({
id: "booking.bookNextStay.title",
defaultMessage: "Book your next stay",
})}
text={intl.formatMessage({
id: "booking.bookAnotherStayDescription",
defaultMessage:
"Get inspired and start dreaming beyond your next trip. Explore more Scandic destinations.",
})}
buttonText={intl.formatMessage({
id: "myStay.promo.bookNextStay.buttonText",
defaultMessage: "Explore Scandic hotels",
})}
href={promoUrl.toString()}
@@ -289,6 +292,7 @@ export default async function MyStay(props: {
<Typography variant="Title/md">
<h1>
{intl.formatMessage({
id: "myStay.accessDenied.loginRequired",
defaultMessage: "You need to be logged in to view your booking",
})}
</h1>
@@ -296,6 +300,7 @@ export default async function MyStay(props: {
<Typography variant="Body/Lead text">
<p>
{intl.formatMessage({
id: "myStay.accessDenied.loginRequiredMessage",
defaultMessage:
"And you need to be logged in with the same member account that made the booking.",
})}