fix: special requests
This commit is contained in:
@@ -9,11 +9,7 @@
|
||||
width: min(100%, 600px);
|
||||
}
|
||||
|
||||
.header,
|
||||
.country,
|
||||
.email,
|
||||
.signup,
|
||||
.phone {
|
||||
.fullWidth {
|
||||
grid-column: 1/-1;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,10 +10,17 @@ import Button from "@/components/TempDesignSystem/Button"
|
||||
import CountrySelect from "@/components/TempDesignSystem/Form/Country"
|
||||
import Input from "@/components/TempDesignSystem/Form/Input"
|
||||
import Phone from "@/components/TempDesignSystem/Form/Phone"
|
||||
import Select from "@/components/TempDesignSystem/Form/Select"
|
||||
import TextArea from "@/components/TempDesignSystem/Form/TextArea"
|
||||
import Footnote from "@/components/TempDesignSystem/Text/Footnote"
|
||||
|
||||
import JoinScandicFriendsCard from "./JoinScandicFriendsCard"
|
||||
import { guestDetailsSchema, signedInDetailsSchema } from "./schema"
|
||||
import {
|
||||
ElevatorPreference,
|
||||
FloorPreference,
|
||||
guestDetailsSchema,
|
||||
signedInDetailsSchema,
|
||||
} from "./schema"
|
||||
import Signup from "./Signup"
|
||||
|
||||
import styles from "./details.module.css"
|
||||
@@ -71,7 +78,7 @@ export default function Details({ user, memberPrice }: DetailsProps) {
|
||||
color="uiTextHighContrast"
|
||||
textTransform="uppercase"
|
||||
type="label"
|
||||
className={styles.header}
|
||||
className={styles.fullWidth}
|
||||
>
|
||||
{intl.formatMessage({ id: "Guest information" })}
|
||||
</Footnote>
|
||||
@@ -90,31 +97,92 @@ export default function Details({ user, memberPrice }: DetailsProps) {
|
||||
registerOptions={{ required: true }}
|
||||
/>
|
||||
<CountrySelect
|
||||
className={styles.country}
|
||||
className={styles.fullWidth}
|
||||
label={intl.formatMessage({ id: "Country" })}
|
||||
name="countryCode"
|
||||
readOnly={!!user}
|
||||
registerOptions={{ required: true }}
|
||||
/>
|
||||
<Input
|
||||
className={styles.email}
|
||||
className={styles.fullWidth}
|
||||
label={intl.formatMessage({ id: "Email address" })}
|
||||
name="email"
|
||||
readOnly={!!user}
|
||||
registerOptions={{ required: true }}
|
||||
/>
|
||||
<Phone
|
||||
className={styles.phone}
|
||||
className={styles.fullWidth}
|
||||
label={intl.formatMessage({ id: "Phone number" })}
|
||||
name="phoneNumber"
|
||||
readOnly={!!user}
|
||||
registerOptions={{ required: true }}
|
||||
/>
|
||||
{user ? null : (
|
||||
<div className={styles.signup}>
|
||||
<div className={styles.fullWidth}>
|
||||
<Signup name="join" />
|
||||
</div>
|
||||
)}
|
||||
<Footnote
|
||||
color="uiTextHighContrast"
|
||||
textTransform="uppercase"
|
||||
type="label"
|
||||
className={styles.fullWidth}
|
||||
>
|
||||
{intl.formatMessage({ id: "Special requests" })}
|
||||
</Footnote>
|
||||
<Select
|
||||
className={styles.fullWidth}
|
||||
label={intl.formatMessage({ id: "Floor preference" })}
|
||||
name="specialRequests.floorPreference"
|
||||
items={[
|
||||
{
|
||||
value: "",
|
||||
label: intl.formatMessage({
|
||||
id: "No preference",
|
||||
}),
|
||||
},
|
||||
{
|
||||
value: FloorPreference.HIGH,
|
||||
label: intl.formatMessage({ id: FloorPreference.HIGH }),
|
||||
},
|
||||
{
|
||||
value: FloorPreference.LOW,
|
||||
label: intl.formatMessage({ id: FloorPreference.LOW }),
|
||||
},
|
||||
]}
|
||||
/>
|
||||
<Select
|
||||
className={styles.fullWidth}
|
||||
label={intl.formatMessage({ id: "Elevator preference" })}
|
||||
name="specialRequests.elevatorPreference"
|
||||
items={[
|
||||
{
|
||||
value: "",
|
||||
label: intl.formatMessage({
|
||||
id: "No preference",
|
||||
}),
|
||||
},
|
||||
{
|
||||
value: ElevatorPreference.AWAY_FROM_ELEVATOR,
|
||||
label: intl.formatMessage({
|
||||
id: ElevatorPreference.AWAY_FROM_ELEVATOR,
|
||||
}),
|
||||
},
|
||||
{
|
||||
value: ElevatorPreference.NEAR_ELEVATOR,
|
||||
label: intl.formatMessage({
|
||||
id: ElevatorPreference.NEAR_ELEVATOR,
|
||||
}),
|
||||
},
|
||||
]}
|
||||
/>
|
||||
<TextArea
|
||||
label={intl.formatMessage({
|
||||
id: "Is there anything else you would like us to know before your arrival?",
|
||||
})}
|
||||
name="specialRequests.comments"
|
||||
className={styles.fullWidth}
|
||||
/>
|
||||
</div>
|
||||
<footer className={styles.footer}>
|
||||
<Button
|
||||
|
||||
@@ -8,6 +8,24 @@ const stringMatcher =
|
||||
|
||||
const isValidString = (key: string) => stringMatcher.test(key)
|
||||
|
||||
export enum FloorPreference {
|
||||
LOW = "Low level",
|
||||
HIGH = "High level",
|
||||
}
|
||||
|
||||
export enum ElevatorPreference {
|
||||
AWAY_FROM_ELEVATOR = "Away from elevator",
|
||||
NEAR_ELEVATOR = "Near elevator",
|
||||
}
|
||||
|
||||
const specialRequestsSchema = z
|
||||
.object({
|
||||
floorPreference: z.nativeEnum(FloorPreference).optional(),
|
||||
elevatorPreference: z.nativeEnum(ElevatorPreference).optional(),
|
||||
comments: z.string().optional(),
|
||||
})
|
||||
.optional()
|
||||
|
||||
export const baseDetailsSchema = z.object({
|
||||
countryCode: z.string().min(1, { message: "Country is required" }),
|
||||
email: z.string().email({ message: "Email address is required" }),
|
||||
@@ -24,6 +42,7 @@ export const baseDetailsSchema = z.object({
|
||||
message: "Last name can't contain any special characters",
|
||||
}),
|
||||
phoneNumber: phoneValidator(),
|
||||
specialRequests: specialRequestsSchema,
|
||||
})
|
||||
|
||||
export const notJoinDetailsSchema = baseDetailsSchema.merge(
|
||||
@@ -78,4 +97,5 @@ export const signedInDetailsSchema = z.object({
|
||||
.transform((_) => false),
|
||||
dateOfBirth: z.string().default(""),
|
||||
zipCode: z.string().default(""),
|
||||
specialRequests: specialRequestsSchema,
|
||||
})
|
||||
|
||||
@@ -46,3 +46,26 @@ input:placeholder-shown:active ~ .label {
|
||||
input:disabled ~ .label {
|
||||
color: var(--Main-Grey-40);
|
||||
}
|
||||
|
||||
textarea:active ~ .label,
|
||||
textarea:not(:placeholder-shown) ~ .label {
|
||||
display: block;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
textarea:focus ~ .label {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
textarea:placeholder-shown ~ .label {
|
||||
grid-row: 1/-1;
|
||||
}
|
||||
|
||||
textarea:placeholder-shown:focus ~ .label,
|
||||
textarea:placeholder-shown:active ~ .label {
|
||||
margin-bottom: var(--Spacing-x-half);
|
||||
}
|
||||
|
||||
textarea:disabled ~ .label {
|
||||
color: var(--Main-Grey-40);
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import ReactAriaSelect from "@/components/TempDesignSystem/Select"
|
||||
import type { SelectProps } from "./select"
|
||||
|
||||
export default function Select({
|
||||
className,
|
||||
items,
|
||||
label,
|
||||
name,
|
||||
@@ -21,6 +22,7 @@ export default function Select({
|
||||
|
||||
return (
|
||||
<ReactAriaSelect
|
||||
className={className}
|
||||
defaultSelectedKey={field.value}
|
||||
disabled={field.disabled}
|
||||
items={items}
|
||||
|
||||
90
components/TempDesignSystem/Form/TextArea/index.tsx
Normal file
90
components/TempDesignSystem/Form/TextArea/index.tsx
Normal file
@@ -0,0 +1,90 @@
|
||||
"use client"
|
||||
import {
|
||||
Label as AriaLabel,
|
||||
Text,
|
||||
TextArea as AriaTextArea,
|
||||
TextField,
|
||||
} from "react-aria-components"
|
||||
import { Controller, useFormContext } from "react-hook-form"
|
||||
|
||||
import { CheckIcon, InfoCircleIcon } from "@/components/Icons"
|
||||
import Label from "@/components/TempDesignSystem/Form/Label"
|
||||
import Caption from "@/components/TempDesignSystem/Text/Caption"
|
||||
|
||||
import Body from "../../Text/Body"
|
||||
|
||||
import styles from "./textarea.module.css"
|
||||
|
||||
import type { HTMLAttributes, WheelEvent } from "react"
|
||||
|
||||
import type { TextAreaProps } from "./input"
|
||||
|
||||
export default function TextArea({
|
||||
"aria-label": ariaLabel,
|
||||
className = "",
|
||||
disabled = false,
|
||||
helpText = "",
|
||||
label,
|
||||
name,
|
||||
placeholder = "",
|
||||
readOnly = false,
|
||||
registerOptions = {},
|
||||
type = "text",
|
||||
}: TextAreaProps) {
|
||||
const { control } = useFormContext()
|
||||
let numberAttributes: HTMLAttributes<HTMLTextAreaElement> = {}
|
||||
if (type === "number") {
|
||||
numberAttributes.onWheel = function (evt: WheelEvent<HTMLTextAreaElement>) {
|
||||
evt.currentTarget.blur()
|
||||
}
|
||||
}
|
||||
return (
|
||||
<Controller
|
||||
disabled={disabled}
|
||||
control={control}
|
||||
name={name}
|
||||
rules={registerOptions}
|
||||
render={({ field, fieldState }) => (
|
||||
<TextField
|
||||
aria-label={ariaLabel}
|
||||
className={className}
|
||||
isDisabled={field.disabled}
|
||||
isRequired={!!registerOptions.required}
|
||||
onBlur={field.onBlur}
|
||||
onChange={field.onChange}
|
||||
validationBehavior="aria"
|
||||
value={field.value}
|
||||
>
|
||||
<AriaLabel className={styles.container} htmlFor={name}>
|
||||
<Body asChild fontOnly>
|
||||
<AriaTextArea
|
||||
{...field}
|
||||
aria-labelledby={field.name}
|
||||
id={name}
|
||||
placeholder={placeholder}
|
||||
readOnly={readOnly}
|
||||
required={!!registerOptions.required}
|
||||
className={styles.textarea}
|
||||
/>
|
||||
</Body>
|
||||
<Label required={!!registerOptions.required}>{label}</Label>
|
||||
</AriaLabel>
|
||||
{helpText && !fieldState.error ? (
|
||||
<Caption asChild color="black">
|
||||
<Text className={styles.helpText} slot="description">
|
||||
<CheckIcon height={20} width={30} />
|
||||
{helpText}
|
||||
</Text>
|
||||
</Caption>
|
||||
) : null}
|
||||
{fieldState.error ? (
|
||||
<Caption className={styles.error} fontOnly>
|
||||
<InfoCircleIcon color="red" />
|
||||
{fieldState.error.message}
|
||||
</Caption>
|
||||
) : null}
|
||||
</TextField>
|
||||
)}
|
||||
/>
|
||||
)
|
||||
}
|
||||
9
components/TempDesignSystem/Form/TextArea/input.ts
Normal file
9
components/TempDesignSystem/Form/TextArea/input.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import type { RegisterOptions } from "react-hook-form"
|
||||
|
||||
export interface TextAreaProps
|
||||
extends React.InputHTMLAttributes<HTMLTextAreaElement> {
|
||||
helpText?: string
|
||||
label: string
|
||||
name: string
|
||||
registerOptions?: RegisterOptions
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
.helpText {
|
||||
align-items: flex-start;
|
||||
display: flex;
|
||||
gap: var(--Spacing-x-half);
|
||||
}
|
||||
|
||||
.error {
|
||||
align-items: center;
|
||||
color: var(--Scandic-Red-60);
|
||||
display: flex;
|
||||
gap: var(--Spacing-x-half);
|
||||
margin: var(--Spacing-x1) 0 0;
|
||||
}
|
||||
|
||||
.container {
|
||||
background-color: var(--Main-Grey-White);
|
||||
border-color: var(--Scandic-Beige-40);
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-radius: var(--Corner-radius-Medium);
|
||||
display: grid;
|
||||
min-width: 0; /* allow shrinkage */
|
||||
grid-template-rows: auto 1fr;
|
||||
height: 138px;
|
||||
padding: var(--Spacing-x3) var(--Spacing-x2) 0 var(--Spacing-x2);
|
||||
transition: border-color 200ms ease;
|
||||
}
|
||||
|
||||
.container:has(.textarea:active, .textarea:focus) {
|
||||
border-color: var(--Scandic-Blue-90);
|
||||
}
|
||||
|
||||
.container:has(.textarea:disabled) {
|
||||
background-color: var(--Main-Grey-10);
|
||||
border: none;
|
||||
color: var(--Main-Grey-40);
|
||||
}
|
||||
|
||||
.container:has(.textarea[data-invalid="true"], .textarea[aria-invalid="true"]) {
|
||||
border-color: var(--Scandic-Red-60);
|
||||
}
|
||||
|
||||
.textarea {
|
||||
background: none;
|
||||
border: none;
|
||||
color: var(--Main-Grey-100);
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
order: 2;
|
||||
overflow: visible;
|
||||
padding: 0;
|
||||
resize: none;
|
||||
}
|
||||
|
||||
.textarea:not(:active, :focus):placeholder-shown {
|
||||
height: 88px;
|
||||
transition: height 150ms ease;
|
||||
}
|
||||
|
||||
.textarea:focus,
|
||||
.textarea:focus:placeholder-shown,
|
||||
.textarea:active,
|
||||
.textarea:active:placeholder-shown {
|
||||
height: 94px;
|
||||
transition: height 150ms ease;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.textarea:disabled {
|
||||
color: var(--Main-Grey-40);
|
||||
}
|
||||
@@ -25,6 +25,7 @@ import type {
|
||||
} from "./select"
|
||||
|
||||
export default function Select({
|
||||
className = "",
|
||||
"aria-label": ariaLabel,
|
||||
defaultSelectedKey,
|
||||
items,
|
||||
@@ -54,7 +55,7 @@ export default function Select({
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={styles.container} ref={setRef}>
|
||||
<div className={`${styles.container} ${className}`} ref={setRef}>
|
||||
<ReactAriaSelect
|
||||
aria-label={ariaLabel}
|
||||
className={`${styles.select} ${discreet && styles.discreet}`}
|
||||
@@ -68,11 +69,26 @@ export default function Select({
|
||||
<Body asChild fontOnly>
|
||||
<Button className={styles.input} data-testid={name}>
|
||||
<span className={styles.inputContentWrapper} tabIndex={tabIndex}>
|
||||
<Label required={required} size={discreet ? "discreet" : "small"}>
|
||||
{label}
|
||||
{discreet && `:`}
|
||||
</Label>
|
||||
<SelectValue />
|
||||
<SelectValue>
|
||||
{({ isPlaceholder, selectedText }) => (
|
||||
<>
|
||||
<Label
|
||||
required={required}
|
||||
size={discreet ? "discreet" : "small"}
|
||||
>
|
||||
{label}
|
||||
{discreet && `:`}
|
||||
</Label>
|
||||
{isPlaceholder ? (
|
||||
placeholder ? (
|
||||
<Body color="uiTextPlaceholder"> {placeholder}</Body>
|
||||
) : null
|
||||
) : (
|
||||
selectedText
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
</SelectValue>
|
||||
</span>
|
||||
<SelectChevron
|
||||
{...(discreet ? { color: "baseButtonTextOnFillNormal" } : {})}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { Key, SelectProps as AriaSelectProps } from "react-aria-components"
|
||||
import type { Key } from "react-aria-components"
|
||||
|
||||
export interface SelectProps
|
||||
extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, "onSelect"> {
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
"Add Room": "Tilføj værelse",
|
||||
"Add code": "Tilføj kode",
|
||||
"Add new card": "Tilføj nyt kort",
|
||||
"Add to calendar": "Tilføj til kalender",
|
||||
"Address": "Adresse",
|
||||
"Adults": "voksne",
|
||||
"Age": "Alder",
|
||||
@@ -41,6 +42,7 @@
|
||||
"At latest": "Senest",
|
||||
"At the hotel": "På hotellet",
|
||||
"Attractions": "Attraktioner",
|
||||
"Away from elevator": "Væk fra elevator",
|
||||
"Back to scandichotels.com": "Tilbage til scandichotels.com",
|
||||
"Back to top": "Tilbage til top",
|
||||
"Bar": "Bar",
|
||||
@@ -120,11 +122,13 @@
|
||||
"Distance to hotel": "Afstand til hotel: {distance} m",
|
||||
"Do you want to start the day with Scandics famous breakfast buffé?": "Vil du starte dagen med Scandics berømte morgenbuffet?",
|
||||
"Done": "Færdig",
|
||||
"Download invoice": "Download faktura",
|
||||
"Download the Scandic app": "Download Scandic-appen",
|
||||
"Driving directions": "Kørselsanvisning",
|
||||
"Earn bonus nights & points": "Optjen bonusnætter og point",
|
||||
"Edit": "Redigere",
|
||||
"Edit profile": "Rediger profil",
|
||||
"Elevator preference": "Elevatorpræference",
|
||||
"Email": "E-mail",
|
||||
"Email address": "E-mailadresse",
|
||||
"Email address is required": "Email address is required",
|
||||
@@ -148,6 +152,7 @@
|
||||
"First name can't contain any special characters": "Fornavn kan ikke indeholde specielle tegn",
|
||||
"First name is required": "Fornavn er påkrævet",
|
||||
"Flexibility": "Fleksibilitet",
|
||||
"Floor preferences": "Etagepræferencer",
|
||||
"Follow us": "Følg os",
|
||||
"Food options": "Madvalg",
|
||||
"Former Scandic Hotel": "Tidligere Scandic Hotel",
|
||||
@@ -167,10 +172,12 @@
|
||||
"Guests & Rooms": "Gæster & værelser",
|
||||
"Gym": "Fitnesscenter",
|
||||
"Hi": "Hei",
|
||||
"High level": "Højt niveau",
|
||||
"Highest level": "Højeste niveau",
|
||||
"Home": "Hjem",
|
||||
"Hospital": "Hospital",
|
||||
"Hotel": "Hotel",
|
||||
"Hotel details": "Hoteloplysninger",
|
||||
"Hotel facilities": "Hotel faciliteter",
|
||||
"Hotel reservation": "Hotel reservation",
|
||||
"Hotel surroundings": "Hotel omgivelser",
|
||||
@@ -189,6 +196,7 @@
|
||||
"In extra bed": "i ekstra seng",
|
||||
"Included": "Inkluderet",
|
||||
"IndoorPool": "Indendørs pool",
|
||||
"Is there anything else you would like us to know before your arrival?": "Er der andet, du gerne vil have os til at vide, før din ankomst?",
|
||||
"It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.": "Det er ikke muligt at administrere dine kommunikationspræferencer lige nu, prøv venligst igen senere eller kontakt support, hvis problemet fortsætter.",
|
||||
"Jacuzzi": "Jacuzzi",
|
||||
"Join Scandic Friends": "Tilmeld dig Scandic Friends",
|
||||
@@ -217,6 +225,9 @@
|
||||
"Log in here": "Log ind her",
|
||||
"Log in/Join": "Log på/Tilmeld dig",
|
||||
"Log out": "Log ud",
|
||||
"Long {long} ∙ Lat {lat}": "Long {long} ∙ Lat {lat}",
|
||||
"Longitude": "Længde {long}",
|
||||
"Low floor": "Lav etage",
|
||||
"MY SAVED CARDS": "MINE SAVEDE KORT",
|
||||
"Main menu": "Hovedmenu",
|
||||
"Manage preferences": "Administrer præferencer",
|
||||
@@ -243,6 +254,7 @@
|
||||
"My payment cards": "Mine betalingskort",
|
||||
"My wishes": "Mine ønsker",
|
||||
"Name": "Navn",
|
||||
"Near elevator": "Tæt på elevator",
|
||||
"Nearby": "I nærheden",
|
||||
"Nearby companies": "Nærliggende virksomheder",
|
||||
"New password": "Nyt kodeord",
|
||||
@@ -377,6 +389,8 @@
|
||||
"Something went wrong and we couldn't remove your card. Please try again later.": "Noget gik galt, og vi kunne ikke fjerne dit kort. Prøv venligst igen senere.",
|
||||
"Something went wrong!": "Noget gik galt!",
|
||||
"Sort by": "Sorter efter",
|
||||
"Special requests": "Specielle ønsker",
|
||||
"Spice things up": "Krydre tingene",
|
||||
"Sports": "Sport",
|
||||
"Standard price": "Standardpris",
|
||||
"Stay at HOTEL_NAME | Hotel in DESTINATION": "Bo på {hotelName} | Hotel i {destination}",
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
"Add Room": "Zimmer hinzufügen",
|
||||
"Add code": "Code hinzufügen",
|
||||
"Add new card": "Neue Karte hinzufügen",
|
||||
"Add to calendar": "Zum Kalender hinzufügen",
|
||||
"Address": "Adresse",
|
||||
"Adults": "Erwachsene",
|
||||
"Age": "Alter",
|
||||
@@ -41,6 +42,7 @@
|
||||
"At latest": "Spätestens",
|
||||
"At the hotel": "Im Hotel",
|
||||
"Attraction": "Attraktion",
|
||||
"Away from elevator": "Weg vom Aufzug",
|
||||
"Back to scandichotels.com": "Zurück zu scandichotels.com",
|
||||
"Back to top": "Zurück zur Spitze",
|
||||
"Bar": "Bar",
|
||||
@@ -120,11 +122,13 @@
|
||||
"Distance to hotel": "Entfernung zum Hotel: {distance} m",
|
||||
"Do you want to start the day with Scandics famous breakfast buffé?": "Möchten Sie den Tag mit Scandics berühmtem Frühstücksbuffet beginnen?",
|
||||
"Done": "Fertig",
|
||||
"Download invoice": "Rechnung herunterladen",
|
||||
"Download the Scandic app": "Laden Sie die Scandic-App herunter",
|
||||
"Driving directions": "Anfahrtsbeschreibung",
|
||||
"Earn bonus nights & points": "Sammeln Sie Bonusnächte und -punkte",
|
||||
"Edit": "Bearbeiten",
|
||||
"Edit profile": "Profil bearbeiten",
|
||||
"Elevator preference": "Aufzugpräferenz",
|
||||
"Email": "Email",
|
||||
"Email address": "E-Mail-Adresse",
|
||||
"Email address is required": "E-Mail-Adresse ist erforderlich",
|
||||
@@ -148,6 +152,7 @@
|
||||
"First name can't contain any special characters": "Der Vorname darf keine Sonderzeichen enthalten",
|
||||
"First name is required": "Vorname ist erforderlich",
|
||||
"Flexibility": "Flexibilität",
|
||||
"Floor preferences": "Etagenpräferenzen",
|
||||
"Follow us": "Folgen Sie uns",
|
||||
"Food options": "Speisen & Getränke",
|
||||
"Former Scandic Hotel": "Ehemaliges Scandic Hotel",
|
||||
@@ -167,10 +172,12 @@
|
||||
"Guests & Rooms": "Gäste & Zimmer",
|
||||
"Gym": "Fitnessstudio",
|
||||
"Hi": "Hallo",
|
||||
"High level": "Hohes Level",
|
||||
"Highest level": "Höchstes Level",
|
||||
"Home": "Heim",
|
||||
"Hospital": "Krankenhaus",
|
||||
"Hotel": "Hotel",
|
||||
"Hotel details": "Hotelinformationen",
|
||||
"Hotel facilities": "Hotel-Infos",
|
||||
"Hotel reservation": "Hotelreservierung",
|
||||
"Hotel surroundings": "Umgebung des Hotels",
|
||||
@@ -189,6 +196,7 @@
|
||||
"In extra bed": "im zusätzlichen Bett",
|
||||
"Included": "Iinklusive",
|
||||
"IndoorPool": "Innenpool",
|
||||
"Is there anything else you would like us to know before your arrival?": "Gibt es noch etwas, das Sie uns vor Ihrer Ankunft mitteilen möchten?",
|
||||
"It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.": "Es ist derzeit nicht möglich, Ihre Kommunikationseinstellungen zu verwalten. Bitte versuchen Sie es später erneut oder wenden Sie sich an den Support, wenn das Problem weiterhin besteht.",
|
||||
"Jacuzzi": "Whirlpool",
|
||||
"Join Scandic Friends": "Treten Sie Scandic Friends bei",
|
||||
@@ -217,6 +225,9 @@
|
||||
"Log in here": "Hier einloggen",
|
||||
"Log in/Join": "Log in/Anmelden",
|
||||
"Log out": "Ausloggen",
|
||||
"Long {long} ∙ Lat {lat}": "Long {long} ∙ Lat {lat}",
|
||||
"Longitude": "Länge {long}",
|
||||
"Low floor": "Niedrige Etage",
|
||||
"MY SAVED CARDS": "MEINE SAVEDEN KARTEN",
|
||||
"Main menu": "Hauptmenü",
|
||||
"Manage preferences": "Verwalten von Voreinstellungen",
|
||||
@@ -242,6 +253,7 @@
|
||||
"My payment cards": "Meine Zahlungskarten",
|
||||
"My wishes": "Meine Wünsche",
|
||||
"Name": "Name",
|
||||
"Near elevator": "In der Nähe des Aufzugs",
|
||||
"Nearby": "In der Nähe",
|
||||
"Nearby companies": "Nahe gelegene Unternehmen",
|
||||
"New password": "Neues Kennwort",
|
||||
@@ -377,6 +389,8 @@
|
||||
"Something went wrong and we couldn't remove your card. Please try again later.": "Ein Fehler ist aufgetreten und wir konnten Ihre Karte nicht entfernen. Bitte versuchen Sie es später noch einmal.",
|
||||
"Something went wrong!": "Etwas ist schief gelaufen!",
|
||||
"Sort by": "Sortieren nach",
|
||||
"Special requests": "Spezielle Anfragen",
|
||||
"Spice things up": "Würzen Sie die Dinge auf",
|
||||
"Sports": "Sport",
|
||||
"Standard price": "Standardpreis",
|
||||
"Stay at HOTEL_NAME | Hotel in DESTINATION": "Übernachten Sie im {hotelName} | Hotel in {destination}",
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
"At latest": "At latest",
|
||||
"At the hotel": "At the hotel",
|
||||
"Attractions": "Attractions",
|
||||
"Away from elevator": "Away from elevator",
|
||||
"Back to scandichotels.com": "Back to scandichotels.com",
|
||||
"Back to top": "Back to top",
|
||||
"Bar": "Bar",
|
||||
@@ -135,6 +136,7 @@
|
||||
"Earn bonus nights & points": "Earn bonus nights & points",
|
||||
"Edit": "Edit",
|
||||
"Edit profile": "Edit profile",
|
||||
"Elevator preference": "Elevator preference",
|
||||
"Email": "Email",
|
||||
"Email address": "Email address",
|
||||
"Email address is required": "Email address is required",
|
||||
@@ -158,6 +160,7 @@
|
||||
"First name can't contain any special characters": "First name can't contain any special characters",
|
||||
"First name is required": "First name is required",
|
||||
"Flexibility": "Flexibility",
|
||||
"Floor preferences": "Floor preferences",
|
||||
"Follow us": "Follow us",
|
||||
"Food options": "Food options",
|
||||
"Former Scandic Hotel": "Former Scandic Hotel",
|
||||
@@ -183,6 +186,7 @@
|
||||
"Guests & Rooms": "Guests & Rooms",
|
||||
"Gym": "Gym",
|
||||
"Hi": "Hi",
|
||||
"High level": "High level",
|
||||
"Highest level": "Highest level",
|
||||
"Home": "Home",
|
||||
"Hospital": "Hospital",
|
||||
@@ -206,6 +210,7 @@
|
||||
"In extra bed": "In extra bed",
|
||||
"Included": "Included",
|
||||
"IndoorPool": "Indoor pool",
|
||||
"Is there anything else you would like us to know before your arrival?": "Is there anything else you would like us to know before your arrival?",
|
||||
"It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.": "It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.",
|
||||
"Jacuzzi": "Jacuzzi",
|
||||
"Join Scandic Friends": "Join Scandic Friends",
|
||||
@@ -237,6 +242,7 @@
|
||||
"Log out": "Log out",
|
||||
"Long {long} ∙ Lat {lat}": "Long {long} ∙ Lat {lat}",
|
||||
"Longitude": "Longitude {long}",
|
||||
"Low floor": "Low floor",
|
||||
"MY SAVED CARDS": "MY SAVED CARDS",
|
||||
"Main guest": "Main guest",
|
||||
"Main menu": "Main menu",
|
||||
@@ -268,6 +274,7 @@
|
||||
"My payment cards": "My payment cards",
|
||||
"My wishes": "My wishes",
|
||||
"Name": "Name",
|
||||
"Near elevator": "Near elevator",
|
||||
"Nearby": "Nearby",
|
||||
"Nearby companies": "Nearby companies",
|
||||
"New password": "New password",
|
||||
@@ -419,6 +426,7 @@
|
||||
"Something went wrong and we couldn't remove your card. Please try again later.": "Something went wrong and we couldn't remove your card. Please try again later.",
|
||||
"Something went wrong!": "Something went wrong!",
|
||||
"Sort by": "Sort by",
|
||||
"Special requests": "Special requests",
|
||||
"Spice things up": "Spice things up",
|
||||
"Sports": "Sports",
|
||||
"Standard price": "Standard price",
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
"Add Room": "Lisää huone",
|
||||
"Add code": "Lisää koodi",
|
||||
"Add new card": "Lisää uusi kortti",
|
||||
"Add to calendar": "Lisää kalenteriin",
|
||||
"Address": "Osoite",
|
||||
"Adults": "Aikuista",
|
||||
"Age": "Ikä",
|
||||
@@ -41,6 +42,7 @@
|
||||
"At latest": "Viimeistään",
|
||||
"At the hotel": "Hotellissa",
|
||||
"Attractions": "Nähtävyydet",
|
||||
"Away from elevator": "Kaukana hissistä",
|
||||
"Back to scandichotels.com": "Takaisin scandichotels.com",
|
||||
"Back to top": "Takaisin ylös",
|
||||
"Bar": "Bar",
|
||||
@@ -120,11 +122,13 @@
|
||||
"Distance to hotel": "Etäisyys hotelliin: {distance} m",
|
||||
"Do you want to start the day with Scandics famous breakfast buffé?": "Haluatko aloittaa päiväsi Scandicsin kuuluisalla aamiaisbuffella?",
|
||||
"Done": "Valmis",
|
||||
"Download invoice": "Lataa lasku",
|
||||
"Download the Scandic app": "Lataa Scandic-sovellus",
|
||||
"Driving directions": "Ajo-ohjeet",
|
||||
"Earn bonus nights & points": "Ansaitse bonusöitä ja -pisteitä",
|
||||
"Edit": "Muokata",
|
||||
"Edit profile": "Muokkaa profiilia",
|
||||
"Elevator preference": "Hissitoive",
|
||||
"Email": "Sähköposti",
|
||||
"Email address": "Sähköpostiosoite",
|
||||
"Email address is required": "Sähköpostiosoite vaaditaan",
|
||||
@@ -148,6 +152,7 @@
|
||||
"First name can't contain any special characters": "Etunimi ei voi sisältää erikoismerkkejä",
|
||||
"First name is required": "Etunimi vaaditaan",
|
||||
"Flexibility": "Joustavuus",
|
||||
"Floor preferences": "Kerrostasotoive",
|
||||
"Follow us": "Seuraa meitä",
|
||||
"Food options": "Ruokavalio",
|
||||
"Former Scandic Hotel": "Entinen Scandic-hotelli",
|
||||
@@ -167,10 +172,12 @@
|
||||
"Guests & Rooms": "Vieraat & Huoneet",
|
||||
"Gym": "Kuntosali",
|
||||
"Hi": "Hi",
|
||||
"High level": "Korkea taso",
|
||||
"Highest level": "Korkein taso",
|
||||
"Home": "Kotiin",
|
||||
"Hospital": "Sairaala",
|
||||
"Hotel": "Hotelli",
|
||||
"Hotel details": "Hotellin tiedot",
|
||||
"Hotel facilities": "Hotellin palvelut",
|
||||
"Hotel reservation": "Hotellivaraukset",
|
||||
"Hotel surroundings": "Hotellin ympäristö",
|
||||
@@ -189,6 +196,7 @@
|
||||
"In extra bed": "Oma vuodepaikka",
|
||||
"Included": "Sisälly hintaan",
|
||||
"IndoorPool": "Sisäuima-allas",
|
||||
"Is there anything else you would like us to know before your arrival?": "Onko jotain muuta, mitä haluaisit meidän tietävän ennen saapumistasi?",
|
||||
"It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.": "Viestintäasetuksiasi ei voi hallita juuri nyt. Yritä myöhemmin uudelleen tai ota yhteyttä tukeen, jos ongelma jatkuu.",
|
||||
"Jacuzzi": "Poreallas",
|
||||
"Join Scandic Friends": "Liity jäseneksi",
|
||||
@@ -217,6 +225,9 @@
|
||||
"Log in here": "Kirjaudu sisään",
|
||||
"Log in/Join": "Kirjaudu sisään/Liittyä",
|
||||
"Log out": "Kirjaudu ulos",
|
||||
"Long {long} ∙ Lat {lat}": "Long {long} ∙ Lat {lat}",
|
||||
"Longitude": "Pituusaste {long}",
|
||||
"Low floor": "Alhainen kerros",
|
||||
"MY SAVED CARDS": "MINUN SAVED CARDS",
|
||||
"Main menu": "Päävalikko",
|
||||
"Manage preferences": "Asetusten hallinta",
|
||||
@@ -243,6 +254,7 @@
|
||||
"My payment cards": "Minun maksukortit",
|
||||
"My wishes": "Toiveeni",
|
||||
"Name": "Nimi",
|
||||
"Near elevator": "Lähellä hissiä",
|
||||
"Nearby": "Lähistöllä",
|
||||
"Nearby companies": "Läheiset yritykset",
|
||||
"New password": "Uusi salasana",
|
||||
@@ -378,6 +390,8 @@
|
||||
"Something went wrong and we couldn't remove your card. Please try again later.": "Jotain meni pieleen, emmekä voineet poistaa korttiasi. Yritä myöhemmin uudelleen.",
|
||||
"Something went wrong!": "Jotain meni pieleen!",
|
||||
"Sort by": "Lajitteluperuste",
|
||||
"Special requests": "Erityistoiveet",
|
||||
"Spice things up": "Mausta asioita",
|
||||
"Sports": "Urheilu",
|
||||
"Standard price": "Normaali hinta",
|
||||
"Stay at HOTEL_NAME | Hotel in DESTINATION": "Majoitu kohteessa {hotelName} | Hotelli kohteessa {destination}",
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
"Add Room": "Legg til rom",
|
||||
"Add code": "Legg til kode",
|
||||
"Add new card": "Legg til nytt kort",
|
||||
"Add to calendar": "Legg til i kalenderen",
|
||||
"Address": "Adresse",
|
||||
"Adults": "Voksne",
|
||||
"Age": "Alder",
|
||||
@@ -41,6 +42,7 @@
|
||||
"At latest": "Senest",
|
||||
"At the hotel": "På hotellet",
|
||||
"Attractions": "Attraksjoner",
|
||||
"Away from elevator": "Bort fra heisen",
|
||||
"Back to scandichotels.com": "Tilbake til scandichotels.com",
|
||||
"Back to top": "Tilbake til toppen",
|
||||
"Bar": "Bar",
|
||||
@@ -119,11 +121,13 @@
|
||||
"Distance to hotel": "Avstand til hotell: {distance} m",
|
||||
"Do you want to start the day with Scandics famous breakfast buffé?": "Vil du starte dagen med Scandics berømte frokostbuffé?",
|
||||
"Done": "Ferdig",
|
||||
"Download invoice": "Last ned faktura",
|
||||
"Download the Scandic app": "Last ned Scandic-appen",
|
||||
"Driving directions": "Veibeskrivelser",
|
||||
"Earn bonus nights & points": "Tjen bonusnetter og poeng",
|
||||
"Edit": "Redigere",
|
||||
"Edit profile": "Rediger profil",
|
||||
"Elevator preference": "Heispreferanse",
|
||||
"Email": "E-post",
|
||||
"Email address": "E-postadresse",
|
||||
"Email address is required": "E-postadresse kreves",
|
||||
@@ -147,6 +151,7 @@
|
||||
"First name can't contain any special characters": "Fornavn kan ikke inneholde spesielle tegn",
|
||||
"First name is required": "Fornavn kreves",
|
||||
"Flexibility": "Fleksibilitet",
|
||||
"Floor preferences": "Etasjepreferanser",
|
||||
"Follow us": "Følg oss",
|
||||
"Food options": "Matvalg",
|
||||
"Former Scandic Hotel": "Tidligere Scandic-hotell",
|
||||
@@ -166,10 +171,12 @@
|
||||
"Guests & Rooms": "Gjester & rom",
|
||||
"Gym": "Treningsstudio",
|
||||
"Hi": "Hei",
|
||||
"High level": "Høy nivå",
|
||||
"Highest level": "Høyeste nivå",
|
||||
"Home": "Hjem",
|
||||
"Hospital": "Sykehus",
|
||||
"Hotel": "Hotel",
|
||||
"Hotel details": "Detaljer om hotellet",
|
||||
"Hotel facilities": "Hotelfaciliteter",
|
||||
"Hotel reservation": "Hotellreservasjon",
|
||||
"Hotel surroundings": "Hotellomgivelser",
|
||||
@@ -181,12 +188,14 @@
|
||||
"Hurry up and use them before they expire!": "Skynd deg og bruk dem før de utløper!",
|
||||
"I accept": "Jeg aksepterer",
|
||||
"I accept the terms and conditions": "Jeg aksepterer vilkårene",
|
||||
"I would like to get my booking confirmation via sms": "Jeg vil gjerne motta bekreftelsen av bestillingen min via sms",
|
||||
"Image gallery": "{name} - Bildegalleri",
|
||||
"In adults bed": "i voksnes seng",
|
||||
"In crib": "i sprinkelseng",
|
||||
"In extra bed": "i ekstraseng",
|
||||
"Included": "Inkludert",
|
||||
"IndoorPool": "Innendørs basseng",
|
||||
"Is there anything else you would like us to know before your arrival?": "Er det noe annet du vil at vi skal vite før ankomsten din?",
|
||||
"It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.": "Det er ikke mulig å administrere kommunikasjonspreferansene dine akkurat nå, prøv igjen senere eller kontakt support hvis problemet vedvarer.",
|
||||
"Jacuzzi": "Boblebad",
|
||||
"Join Scandic Friends": "Bli med i Scandic Friends",
|
||||
@@ -215,6 +224,9 @@
|
||||
"Log in here": "Logg inn her",
|
||||
"Log in/Join": "Logg på/Bli med",
|
||||
"Log out": "Logg ut",
|
||||
"Long {long} ∙ Lat {lat}": "Long {long} ∙ Lat {lat}",
|
||||
"Longitude": "Lengde {long}",
|
||||
"Low floor": "Lav posisjon",
|
||||
"MY SAVED CARDS": "MINE SAVEDE KORT",
|
||||
"Main menu": "Hovedmeny",
|
||||
"Manage preferences": "Administrer preferanser",
|
||||
@@ -241,6 +253,7 @@
|
||||
"My payment cards": "Mine betalingskort",
|
||||
"My wishes": "Mine ønsker",
|
||||
"Name": "Navn",
|
||||
"Near elevator": "Nær heisen",
|
||||
"Nearby": "I nærheten",
|
||||
"Nearby companies": "Nærliggende selskaper",
|
||||
"New password": "Nytt passord",
|
||||
@@ -375,6 +388,8 @@
|
||||
"Something went wrong and we couldn't remove your card. Please try again later.": "Noe gikk galt, og vi kunne ikke fjerne kortet ditt. Vennligst prøv igjen senere.",
|
||||
"Something went wrong!": "Noe gikk galt!",
|
||||
"Sort by": "Sorter etter",
|
||||
"Special requests": "Spesielle ønsker",
|
||||
"Spice things up": "Krydre tingene",
|
||||
"Sports": "Sport",
|
||||
"Standard price": "Standardpris",
|
||||
"Stay at HOTEL_NAME | Hotel in DESTINATION": "Bo på {hotelName} | Hotell i {destination}",
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
"Add Room": "Lägg till rum",
|
||||
"Add code": "Lägg till kod",
|
||||
"Add new card": "Lägg till nytt kort",
|
||||
"Add to calendar": "Lägg till i kalendern",
|
||||
"Address": "Adress",
|
||||
"Adults": "Vuxna",
|
||||
"Age": "Ålder",
|
||||
@@ -41,6 +42,7 @@
|
||||
"At latest": "Senast",
|
||||
"At the hotel": "På hotellet",
|
||||
"Attractions": "Sevärdheter",
|
||||
"Away from elevator": "Bort från hissen",
|
||||
"Back to scandichotels.com": "Tillbaka till scandichotels.com",
|
||||
"Back to top": "Tillbaka till toppen",
|
||||
"Bar": "Bar",
|
||||
@@ -119,11 +121,13 @@
|
||||
"Distance to hotel": "Avstånd till hotell: {distance} m",
|
||||
"Do you want to start the day with Scandics famous breakfast buffé?": "Vill du starta dagen med Scandics berömda frukostbuffé?",
|
||||
"Done": "Klar",
|
||||
"Download invoice": "Ladda ner faktura",
|
||||
"Download the Scandic app": "Ladda ner Scandic-appen",
|
||||
"Driving directions": "Vägbeskrivningar",
|
||||
"Earn bonus nights & points": "Tjäna bonusnätter och poäng",
|
||||
"Edit": "Redigera",
|
||||
"Edit profile": "Redigera profil",
|
||||
"Elevator preference": "Hisspreferencer",
|
||||
"Email": "E-post",
|
||||
"Email address": "E-postadress",
|
||||
"Email address is required": "E-postadress är obligatorisk",
|
||||
@@ -147,6 +151,7 @@
|
||||
"First name can't contain any special characters": "Förnamn får inte innehålla några specialtecken",
|
||||
"First name is required": "Förnamn är obligatoriskt",
|
||||
"Flexibility": "Flexibilitet",
|
||||
"Floor preferences": "Våningpreferenser",
|
||||
"Follow us": "Följ oss",
|
||||
"Food options": "Matval",
|
||||
"Former Scandic Hotel": "Tidigare Scandichotell",
|
||||
@@ -166,10 +171,12 @@
|
||||
"Guests & Rooms": "Gäster & rum",
|
||||
"Gym": "Gym",
|
||||
"Hi": "Hej",
|
||||
"High level": "Högt upp",
|
||||
"Highest level": "Högsta nivå",
|
||||
"Home": "Hem",
|
||||
"Hospital": "Sjukhus",
|
||||
"Hotel": "Hotell",
|
||||
"Hotel details": "Detaljer om hotellet",
|
||||
"Hotel facilities": "Hotellfaciliteter",
|
||||
"Hotel reservation": "Hotellbokning",
|
||||
"Hotel surroundings": "Hotellomgivning",
|
||||
@@ -188,6 +195,7 @@
|
||||
"In extra bed": "Egen sängplats",
|
||||
"Included": "Inkluderad",
|
||||
"IndoorPool": "Inomhuspool",
|
||||
"Is there anything else you would like us to know before your arrival?": "Är det något mer du vill att vi ska veta innan din ankomst?",
|
||||
"It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.": "Det gick inte att hantera dina kommunikationsinställningar just nu, försök igen senare eller kontakta supporten om problemet kvarstår.",
|
||||
"Jacuzzi": "Jacuzzi",
|
||||
"Join Scandic Friends": "Gå med i Scandic Friends",
|
||||
@@ -216,6 +224,9 @@
|
||||
"Log in here": "Logga in här",
|
||||
"Log in/Join": "Logga in/Gå med",
|
||||
"Log out": "Logga ut",
|
||||
"Long {long} ∙ Lat {lat}": "Long {long} ∙ Lat {lat}",
|
||||
"Longitude": "Longitud {long}",
|
||||
"Low floor": "Lågt läge",
|
||||
"MY SAVED CARDS": "MINE SAVEDE KORT",
|
||||
"Main menu": "Huvudmeny",
|
||||
"Manage preferences": "Hantera inställningar",
|
||||
@@ -242,6 +253,7 @@
|
||||
"My payment cards": "Mina betalningskort",
|
||||
"My wishes": "Mina önskningar",
|
||||
"Name": "Namn",
|
||||
"Near elevator": "Nära hissen",
|
||||
"Nearby": "I närheten",
|
||||
"Nearby companies": "Närliggande företag",
|
||||
"New password": "Nytt lösenord",
|
||||
@@ -376,6 +388,8 @@
|
||||
"Something went wrong and we couldn't remove your card. Please try again later.": "Något gick fel och vi kunde inte ta bort ditt kort. Försök igen senare.",
|
||||
"Something went wrong!": "Något gick fel!",
|
||||
"Sort by": "Sortera efter",
|
||||
"Special requests": "Särskilda önskemål",
|
||||
"Spice things up": "Krydda upp saker och ting",
|
||||
"Sports": "Sport",
|
||||
"Standard price": "Standardpris",
|
||||
"Stay at HOTEL_NAME | Hotel in DESTINATION": "Bo på {hotelName} | Hotell i {destination}",
|
||||
|
||||
Reference in New Issue
Block a user