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

@@ -53,9 +53,7 @@ export function SelectedRoomPanel({ roomIndex }: { roomIndex: number }) {
<div className={styles.content}>
<Caption color="uiTextHighContrast">
{intl.formatMessage(
{
defaultMessage: "Room {roomIndex}",
},
{ id: "booking.roomIndex", defaultMessage: "Room {roomIndex}" },
{ roomIndex: roomNr }
)}
</Caption>
@@ -90,6 +88,7 @@ export function SelectedRoomPanel({ roomIndex }: { roomIndex: number }) {
icon="edit_square"
/>
{intl.formatMessage({
id: "common.change",
defaultMessage: "Change",
})}
</Chip>
@@ -112,6 +111,7 @@ function useSelectedProductTitle({ roomIndex }: { roomIndex: number }) {
const selectedRate = selectedRates.forRoom(roomIndex)
const night = intl.formatMessage({
id: "common.night",
defaultMessage: "night",
})
@@ -171,18 +171,23 @@ function useSelectedProductTitle({ roomIndex }: { roomIndex: number }) {
function useRateTitle(rate: RateEnum | undefined) {
const intl = useIntl()
const freeCancelation = intl.formatMessage({
id: "booking.freeCancellation",
defaultMessage: "Free cancellation",
})
const nonRefundable = intl.formatMessage({
id: "booking.nonRefundable",
defaultMessage: "Non-refundable",
})
const freeBooking = intl.formatMessage({
id: "booking.freeRebooking",
defaultMessage: "Free rebooking",
})
const payLater = intl.formatMessage({
id: "booking.payLater",
defaultMessage: "Pay later",
})
const payNow = intl.formatMessage({
id: "booking.payNow",
defaultMessage: "Pay now",
})

View File

@@ -33,14 +33,13 @@ export function MultiRoomWrapper({ children, isMultiRoom, roomIndex }: Props) {
const isActiveRoom = activeRoomIndex === roomIndex
const roomMsg = intl.formatMessage(
{
defaultMessage: "Room {roomIndex}",
},
{ id: "booking.roomIndex", defaultMessage: "Room {roomIndex}" },
{ roomIndex: roomNr }
)
const adultsMsg = intl.formatMessage(
{
id: "booking.numberOfAdults",
defaultMessage: "{adults, plural, one {# adult} other {# adults}}",
},
{ adults: adultCount }
@@ -48,6 +47,7 @@ export function MultiRoomWrapper({ children, isMultiRoom, roomIndex }: Props) {
const childrenMsg = intl.formatMessage(
{
id: "booking.numberOfChildren",
defaultMessage: "{children, plural, one {# child} other {# children}}",
},
{
@@ -112,6 +112,7 @@ export function MultiRoomWrapper({ children, isMultiRoom, roomIndex }: Props) {
variant="icon"
>
{intl.formatMessage({
id: "common.close",
defaultMessage: "Close",
})}
<MaterialIcon

View File

@@ -37,6 +37,7 @@ export default function NoAvailabilityAlert({
(input.data?.booking.rooms.at(roomIndex)?.packages ?? []).length === 0
? {
title: intl.formatMessage({
id: "booking.seeAlternativeHotels",
defaultMessage: "See alternative hotels",
}),
url: `${alternativeHotels(lang)}`,
@@ -46,6 +47,7 @@ export default function NoAvailabilityAlert({
if (noAvailableRooms) {
const text = intl.formatMessage({
id: "booking.noRoomsAvailable",
defaultMessage: "There are no rooms available that match your request.",
})
return (
@@ -53,6 +55,7 @@ export default function NoAvailabilityAlert({
<Alert
type={AlertTypeEnum.Info}
heading={intl.formatMessage({
id: "booking.noAvailability",
defaultMessage: "No availability",
})}
text={text}
@@ -81,6 +84,7 @@ export default function NoAvailabilityAlert({
if (input.bookingCode && noAvailableBookingCodeRooms) {
const bookingCodeText = intl.formatMessage(
{
id: "selectHotel.noAvailabilityForBookingCode",
defaultMessage:
"We found no available rooms using this booking code ({bookingCode}). See available rates below.",
},
@@ -92,6 +96,7 @@ export default function NoAvailabilityAlert({
<Alert
type={AlertTypeEnum.Info}
heading={intl.formatMessage({
id: "booking.noAvailability",
defaultMessage: "No availability",
})}
text={bookingCodeText}

View File

@@ -23,6 +23,7 @@ export default function PetRoomMessage({
<p className={styles.additionalInformation}>
{intl.formatMessage(
{
id: "selectRate.petRoom.feeMessage",
defaultMessage:
"Pet-friendly rooms include a charge of approx. <b>{price}/stay</b>",
},

View File

@@ -57,7 +57,10 @@ export function RoomPackagesForm({
<div className={styles.buttonContainer}>
<Typography variant="Body/Supporting text (caption)/smBold">
<Button variant="Tertiary" size="Small" type="submit">
{intl.formatMessage({ defaultMessage: "Apply" })}
{intl.formatMessage({
id: "common.apply",
defaultMessage: "Apply",
})}
</Button>
</Typography>
<Typography variant="Body/Supporting text (caption)/smBold">
@@ -67,6 +70,7 @@ export function RoomPackagesForm({
variant="Text"
>
{intl.formatMessage({
id: "common.clear",
defaultMessage: "Clear",
})}
</Button>

View File

@@ -37,7 +37,10 @@ export function RoomPackageFilterModal({
return (
<DialogTrigger isOpen={isOpen} onOpenChange={setIsOpen}>
<ChipButton variant="Outlined">
{intl.formatMessage({ defaultMessage: "Special needs" })}
{intl.formatMessage({
id: "booking.specialNeeds",
defaultMessage: "Special needs",
})}
<MaterialIcon
icon="keyboard_arrow_down"
size={20}
@@ -51,7 +54,10 @@ export function RoomPackageFilterModal({
<div className={styles.header}>
<Typography variant="Title/Subtitle/md">
<h3>
{intl.formatMessage({ defaultMessage: "Special needs" })}
{intl.formatMessage({
id: "booking.specialNeeds",
defaultMessage: "Special needs",
})}
</h3>
</Typography>
<IconButton

View File

@@ -30,7 +30,10 @@ export function RoomPackageFilterPopover({
return (
<DialogTrigger isOpen={isOpen} onOpenChange={setIsOpen}>
<ChipButton variant="Outlined">
{intl.formatMessage({ defaultMessage: "Special needs" })}
{intl.formatMessage({
id: "booking.specialNeeds",
defaultMessage: "Special needs",
})}
<MaterialIcon
icon="keyboard_arrow_down"
size={20}

View File

@@ -7,12 +7,15 @@ export const usePackageLabels = () => {
const labels: Record<RoomPackageCodeEnum, string> = {
[RoomPackageCodeEnum.ALLERGY_ROOM]: intl.formatMessage({
id: "roomPackage.allergyFriendlyRoom",
defaultMessage: "Allergy-friendly room",
}),
[RoomPackageCodeEnum.PET_ROOM]: intl.formatMessage({
id: "roomPackage.petFriendlyRoom",
defaultMessage: "Pet-friendly room",
}),
[RoomPackageCodeEnum.ACCESSIBILITY_ROOM]: intl.formatMessage({
id: "roomPackage.accessibleRoom",
defaultMessage: "Accessible room",
}),
}

View File

@@ -48,6 +48,7 @@ function AvailableRoomCount({ roomIndex }: { roomIndex: number }) {
const notAllRoomsAvailableText = intl.formatMessage(
{
id: "selectRate.availableRooms.partial",
defaultMessage:
"{availableRooms}/{numberOfRooms, plural, one {# room type} other {# room types}} available",
},
@@ -59,6 +60,7 @@ function AvailableRoomCount({ roomIndex }: { roomIndex: number }) {
const allRoomsAvailableText = intl.formatMessage(
{
id: "selectRate.availableRooms.all",
defaultMessage:
"{numberOfRooms, plural, one {# room type} other {# room types}} available",
},

View File

@@ -30,6 +30,7 @@ export default function RoomSize({ roomSize }: RoomSizeProps) {
<h4>
{intl.formatMessage(
{
id: "common.roomSize",
defaultMessage: "{roomSize} m²",
},
{ roomSize: roomSize.min }
@@ -49,6 +50,7 @@ export default function RoomSize({ roomSize }: RoomSizeProps) {
<h4>
{intl.formatMessage(
{
id: "selectRate.roomSizeMinToMax",
defaultMessage: "{roomSizeMin}{roomSizeMax} m²",
},
{

View File

@@ -27,6 +27,7 @@ export default function Details({ roomInfo }: Props) {
{occupancy.max === occupancy.min
? intl.formatMessage(
{
id: "selectRate.guests",
defaultMessage:
"{guests, plural, one {# guest} other {# guests}}",
},
@@ -34,6 +35,7 @@ export default function Details({ roomInfo }: Props) {
)
: intl.formatMessage(
{
id: "selectRate.minMaxGuests",
defaultMessage: "{min}-{max} guests",
},
{

View File

@@ -34,15 +34,19 @@ export function BreakfastMessage({
const breakfastMessages = {
included: intl.formatMessage({
id: "selectRate.breakfastIsIncluded",
defaultMessage: "Breakfast is included.",
}),
notIncluded: intl.formatMessage({
id: "selectRate.breakfastExcludedAdd",
defaultMessage: "Breakfast excluded, add in next step.",
}),
noSelection: intl.formatMessage({
id: "selectRate.selectARate",
defaultMessage: "Select a rate",
}),
scandicgo: intl.formatMessage({
id: "selectRate.breakfastDealCanBePurchased",
defaultMessage: "Breakfast deal can be purchased at the hotel.",
}),
}

View File

@@ -88,15 +88,18 @@ function Inner({
const intl = useIntl()
const night = intl
.formatMessage({
id: "common.night",
defaultMessage: "night",
})
.toUpperCase()
const standardPriceMsg = intl.formatMessage({
id: "booking.standardPrice",
defaultMessage: "Standard price",
})
const memberPriceMsg = intl.formatMessage({
id: "booking.memberPrice",
defaultMessage: "Member price",
})
@@ -142,6 +145,7 @@ function Inner({
})
let bannerText = intl.formatMessage({
id: "booking.campaign",
defaultMessage: "Campaign",
})
if (product.bookingCode) {
@@ -150,10 +154,12 @@ function Inner({
if (product.rateDefinition.breakfastIncluded) {
bannerText = `${bannerText}${intl.formatMessage({
id: "booking.breakfastIncluded",
defaultMessage: "Breakfast included",
})}`
} else {
bannerText = `${bannerText}${intl.formatMessage({
id: "booking.breakfastExcluded",
defaultMessage: "Breakfast excluded",
})}`
}
@@ -198,6 +204,7 @@ function Inner({
approximateRatePrice && product.public.requestedPrice
? {
label: intl.formatMessage({
id: "booking.approx",
defaultMessage: "Approx.",
}),
price: approximateRatePrice,
@@ -273,6 +280,7 @@ function Inner({
? {
label: intl
.formatMessage({
id: "booking.lowestPrice",
defaultMessage: "Lowest price (last 30 days)",
})
.toUpperCase(),

View File

@@ -141,10 +141,12 @@ function useBannerText({
if (breakfastIncluded) {
return `${bookingCode}${intl.formatMessage({
id: "booking.breakfastIncluded",
defaultMessage: "Breakfast included",
})}`
} else {
return `${bookingCode}${intl.formatMessage({
id: "booking.breakfastExcluded",
defaultMessage: "Breakfast excluded",
})}`
}
@@ -199,7 +201,10 @@ function CorporateChequeCode({
if (additionalPrice > 0) {
approximateRate = {
label: intl.formatMessage({ defaultMessage: "Approx." }),
label: intl.formatMessage({
id: "booking.approx",
defaultMessage: "Approx.",
}),
price: `${base} CC + ${additionalPrice}`,
unit: requestedPrice.currency,
}
@@ -260,6 +265,7 @@ function PublicCode({
const night = intl
.formatMessage({
id: "common.night",
defaultMessage: "night",
})
.toUpperCase()
@@ -277,6 +283,7 @@ function PublicCode({
pricePerNight.totalRequestedPrice && requestedPrice?.currency
? {
label: intl.formatMessage({
id: "booking.approx",
defaultMessage: "Approx.",
}),
price: pricePerNight.totalRequestedPrice,
@@ -348,6 +355,7 @@ function VoucherCode({
const voucherMsg = intl.formatMessage(
{
id: "price.numberOfVouchers",
defaultMessage:
"{numberOfVouchers, plural, one {Voucher} other {Vouchers}}",
},

View File

@@ -48,14 +48,17 @@ export default function Redemptions({
}
const rewardNight = intl.formatMessage({
id: "booking.rewardNight",
defaultMessage: "Reward night",
})
const pkgsSum = sumPackages(selectedPackages)
const breakfastIncluded = intl.formatMessage({
id: "booking.breakfastIncluded",
defaultMessage: "Breakfast included",
})
const breakfastExcluded = intl.formatMessage({
id: "booking.breakfastExcluded",
defaultMessage: "Breakfast excluded",
})
@@ -127,6 +130,7 @@ export default function Redemptions({
selectedRate={selectedRateCode}
isNotEnoughPoints={notEnoughPoints}
notEnoughPointsText={intl.formatMessage({
id: "booking.notEnoughPoints",
defaultMessage: "Not enough points",
})}
/>

View File

@@ -90,6 +90,7 @@ function Inner({
const night = intl
.formatMessage({
id: "common.night",
defaultMessage: "night",
})
.toUpperCase()
@@ -97,14 +98,17 @@ function Inner({
const pkgsSumRequested = sumPackagesRequestedPrice(selectedPackages)
const standardPriceMsg = intl.formatMessage({
id: "booking.standardPrice",
defaultMessage: "Standard price",
})
const memberPriceMsg = intl.formatMessage({
id: "booking.memberPrice",
defaultMessage: "Member price",
})
const approxMsg = intl.formatMessage({
id: "booking.approx",
defaultMessage: "Approx.",
})

View File

@@ -5,6 +5,7 @@ export function useRateTitles() {
const intl = useIntl()
const payNow = intl.formatMessage({
id: "booking.payNow",
defaultMessage: "Pay now",
})
@@ -12,24 +13,29 @@ export function useRateTitles() {
change: {
paymentTerm: payNow,
title: intl.formatMessage({
id: "booking.freeRebooking",
defaultMessage: "Free rebooking",
}),
},
flex: {
paymentTerm: intl.formatMessage({
id: "booking.payLater",
defaultMessage: "Pay later",
}),
title: intl.formatMessage({
id: "booking.freeCancellation",
defaultMessage: "Free cancellation",
}),
},
save: {
paymentTerm: payNow,
title: intl.formatMessage({
id: "booking.nonRefundable",
defaultMessage: "Non-refundable",
}),
},
noPriceAvailable: intl.formatMessage({
id: "booking.noPricesAvailable",
defaultMessage: "No prices available",
}),
}

View File

@@ -62,6 +62,7 @@ const RoomImage = memo(function RoomImage({
room={room}
roomTypeCode={roomTypeCode}
triggerLabel={intl.formatMessage({
id: "hotel.seeRoomDetails",
defaultMessage: "See room details",
})}
buttonVariant="secondary"
@@ -88,6 +89,7 @@ function LowInventoryTag({ roomsLeft }: { roomsLeft: number }) {
<p className={styles.inventory}>
{intl.formatMessage(
{
id: "selectRate.roomsLeft",
defaultMessage: "{amount, number} left",
},
{ amount: roomsLeft }

View File

@@ -18,6 +18,7 @@ export default function RoomNotAvailable() {
/>
<Caption color="uiTextHighContrast" type="bold">
{intl.formatMessage({
id: "selectRate.thisRoomIsNotAvailable",
defaultMessage: "This room is not available",
})}
</Caption>