Merged in fix/fetch-variable-interfering-with-fetch (pull request #526)

fix: rename retried-wrapped fetch and add “force-cache” to make caching work again

Approved-by: Michael Zetterberg
This commit is contained in:
Simon.Emanuelsson
2024-08-28 13:34:17 +00:00
committed by Michael Zetterberg
41 changed files with 728 additions and 575 deletions

View File

@@ -10,6 +10,8 @@ import styles from "./page.module.css"
import type { LangParams, PageArgs } from "@/types/params" import type { LangParams, PageArgs } from "@/types/params"
export { generateMetadata } from "@/utils/generateMetadata"
export default async function MyPages({ export default async function MyPages({
params, params,
}: PageArgs<LangParams & { path: string[] }>) { }: PageArgs<LangParams & { path: string[] }>) {

View File

@@ -1,3 +1,5 @@
import ProfilePage from "../page" import ProfilePage from "../page"
export { generateMetadata } from "@/utils/generateMetadata"
export default ProfilePage export default ProfilePage

View File

@@ -7,6 +7,8 @@ import { setLang } from "@/i18n/serverContext"
import { LangParams, PageArgs } from "@/types/params" import { LangParams, PageArgs } from "@/types/params"
export { generateMetadata } from "@/utils/generateMetadata"
export default async function ProfilePage({ params }: PageArgs<LangParams>) { export default async function ProfilePage({ params }: PageArgs<LangParams>) {
setLang(params.lang) setLang(params.lang)
const accountPage = await serverClient().contentstack.accountPage.get() const accountPage = await serverClient().contentstack.accountPage.get()

View File

@@ -12,6 +12,8 @@ import {
UIDParams, UIDParams,
} from "@/types/params" } from "@/types/params"
export { generateMetadata } from "@/utils/generateMetadata"
export default async function ContentTypePage({ export default async function ContentTypePage({
params, params,
}: PageArgs<LangParams & ContentTypeParams & UIDParams, {}>) { }: PageArgs<LangParams & ContentTypeParams & UIDParams, {}>) {

View File

@@ -23,7 +23,7 @@ export default async function SelectHotelPage({
const hotel = tempHotelData.data.attributes const hotel = tempHotelData.data.attributes
const hotels = [hotel] const hotels = [hotel]
const hotelFilters = await serverClient().hotel.getFilters({ const hotelFilters = await serverClient().hotel.filters.get({
hotelId: "879", hotelId: "879",
}) })

View File

@@ -6,7 +6,7 @@ import BedSelection from "@/components/HotelReservation/SelectRate/BedSelection"
import BreakfastSelection from "@/components/HotelReservation/SelectRate/BreakfastSelection" import BreakfastSelection from "@/components/HotelReservation/SelectRate/BreakfastSelection"
import FlexibilitySelection from "@/components/HotelReservation/SelectRate/FlexibilitySelection" import FlexibilitySelection from "@/components/HotelReservation/SelectRate/FlexibilitySelection"
import RoomSelection from "@/components/HotelReservation/SelectRate/RoomSelection" import RoomSelection from "@/components/HotelReservation/SelectRate/RoomSelection"
import { getLang, setLang } from "@/i18n/serverContext" import { setLang } from "@/i18n/serverContext"
import styles from "./page.module.css" import styles from "./page.module.css"
@@ -18,7 +18,7 @@ export default async function SelectRate({ params }: PageArgs<LangParams>) {
// TODO: Use real endpoint. // TODO: Use real endpoint.
const hotel = tempHotelData.data.attributes const hotel = tempHotelData.data.attributes
const rooms = await serverClient().hotel.getRates({ const rooms = await serverClient().hotel.rates.get({
// TODO: pass the correct hotel ID and all other parameters that should be included in the search // TODO: pass the correct hotel ID and all other parameters that should be included in the search
hotelId: "1", hotelId: "1",
}) })

View File

@@ -1,11 +1,17 @@
import Header from "@/components/Current/Header" import Header from "@/components/Current/Header"
import { setLang } from "@/i18n/serverContext"
import type { LangParams, LayoutArgs } from "@/types/params"
export default function HeaderLayout({ export default function HeaderLayout({
languageSwitcher, languageSwitcher,
myPagesMobileDropdown, myPagesMobileDropdown,
}: { params,
}: LayoutArgs<LangParams> & {
languageSwitcher: React.ReactNode languageSwitcher: React.ReactNode
} & { myPagesMobileDropdown: React.ReactNode }) { myPagesMobileDropdown: React.ReactNode
}) {
setLang(params.lang)
return ( return (
<Header <Header
myPagesMobileDropdown={myPagesMobileDropdown} myPagesMobileDropdown={myPagesMobileDropdown}

View File

@@ -1,3 +1,8 @@
export default function EmptyHeaderPage() { import { setLang } from "@/i18n/serverContext"
import type { LangParams, PageArgs } from "@/types/params"
export default function EmptyHeaderPage({ params }: PageArgs<LangParams>) {
setLang(params.lang)
return null return null
} }

View File

@@ -17,8 +17,6 @@ import { getLang, setLang } from "@/i18n/serverContext"
import type { LangParams, LayoutArgs } from "@/types/params" import type { LangParams, LayoutArgs } from "@/types/params"
export { generateMetadata } from "@/utils/generateMetadata"
export default async function RootLayout({ export default async function RootLayout({
children, children,
params, params,

View File

@@ -6,7 +6,7 @@ import { request } from "@/lib/graphql/request"
import ContentPage from "@/components/Current/ContentPage" import ContentPage from "@/components/Current/ContentPage"
import Tracking from "@/components/Current/Tracking" import Tracking from "@/components/Current/Tracking"
import { getLang, setLang } from "@/i18n/serverContext" import { setLang } from "@/i18n/serverContext"
import type { LangParams, PageArgs, UriParams } from "@/types/params" import type { LangParams, PageArgs, UriParams } from "@/types/params"
import type { GetCurrentBlockPageData } from "@/types/requests/currentBlockPage" import type { GetCurrentBlockPageData } from "@/types/requests/currentBlockPage"
@@ -26,10 +26,10 @@ export default async function CurrentContentPage({
const response = await request<GetCurrentBlockPageData>( const response = await request<GetCurrentBlockPageData>(
GetCurrentBlockPage, GetCurrentBlockPage,
{ {
locale: getLang(), locale: params.lang,
url: searchParams.uri, url: searchParams.uri,
}, },
{ tags: [`${searchParams.uri}-${getLang()}`] } { cache: "no-store" }
) )
if (!response.data?.all_current_blocks_page?.total) { if (!response.data?.all_current_blocks_page?.total) {
@@ -43,13 +43,13 @@ export default async function CurrentContentPage({
const pageDataForTracking = await request<TrackingData>( const pageDataForTracking = await request<TrackingData>(
GetCurrentBlockPageTrackingData, GetCurrentBlockPageTrackingData,
{ uid: response.data.all_current_blocks_page.items[0].system.uid }, { uid: response.data.all_current_blocks_page.items[0].system.uid },
{ tags: [`${searchParams.uri}-en`] } { cache: "no-store" }
) )
const pageData = response.data.all_current_blocks_page.items[0] const pageData = response.data.all_current_blocks_page.items[0]
const trackingData = { const trackingData = {
lang: getLang(), lang: params.lang,
publishedDate: pageData.system.updated_at, publishedDate: pageData.system.updated_at,
createdDate: pageData.system.created_at, createdDate: pageData.system.created_at,
pageId: pageData.system.uid, pageId: pageData.system.uid,

View File

@@ -19,7 +19,7 @@ export default async function HotelPage() {
} }
const lang = getLang() const lang = getLang()
const hotelData = await serverClient().hotel.getHotel({ const hotelData = await serverClient().hotel.get({
hotelId: hotelPageIdentifierData.hotel_page_id, hotelId: hotelPageIdentifierData.hotel_page_id,
language: lang, language: lang,
include: ["RoomCategories"], include: ["RoomCategories"],

View File

@@ -1,6 +1,7 @@
{ {
"A photo of the room": "Et foto af værelset", "A photo of the room": "Et foto af værelset",
"Activities": "Aktiviteter", "Activities": "Aktiviteter",
"Add code": "Tilføj kode",
"Add new card": "Tilføj nyt kort", "Add new card": "Tilføj nyt kort",
"Address": "Adresse", "Address": "Adresse",
"All our beds are from Bliss, allowing you to adjust the firmness for your perfect comfort.": "Alle vores senge er fra Bliss, så du kan justere fastheden til din perfekte komfort.", "All our beds are from Bliss, allowing you to adjust the firmness for your perfect comfort.": "Alle vores senge er fra Bliss, så du kan justere fastheden til din perfekte komfort.",
@@ -8,18 +9,24 @@
"Already a friend?": "Allerede en ven?", "Already a friend?": "Allerede en ven?",
"Amenities": "Faciliteter", "Amenities": "Faciliteter",
"An error occurred when adding a credit card, please try again later.": "Der opstod en fejl under tilføjelse af et kreditkort. Prøv venligst igen senere.", "An error occurred when adding a credit card, please try again later.": "Der opstod en fejl under tilføjelse af et kreditkort. Prøv venligst igen senere.",
"Are you sure you want to remove the card ending with": "Er du sikker på, at du vil fjerne kortet, der slutter med",
"An error occurred when trying to update profile.": "Der opstod en fejl under forsøg på at opdatere profilen.", "An error occurred when trying to update profile.": "Der opstod en fejl under forsøg på at opdatere profilen.",
"Are you sure you want to remove the card ending with": "Er du sikker på, at du vil fjerne kortet, der slutter med",
"Arrival date": "Ankomstdato", "Arrival date": "Ankomstdato",
"as of today": "fra idag", "as of today": "fra idag",
"As our": "Som vores {level}", "As our": "Som vores {level}",
"As our Close Friend": "Som vores nære ven", "As our Close Friend": "Som vores nære ven",
"At latest": "Senest",
"At the hotel": "På hotellet", "At the hotel": "På hotellet",
"Book": "Book", "Book": "Book",
"Book reward night": "Book bonusnat",
"Booking codes and vouchers": "Bookingkoder og vouchers",
"Booking number": "Bookingnummer", "Booking number": "Bookingnummer",
"Breakfast": "Morgenmad", "Breakfast": "Morgenmad",
"by": "inden", "by": "inden",
"Cancel": "Afbestille", "Cancel": "Afbestille",
"characters": "tegn",
"Check in": "Check ind",
"Check out": "Check ud",
"Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Tjek de kreditkort, der er gemt på din profil. Betal med et gemt kort, når du er logget ind for en mere jævn weboplevelse.", "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Tjek de kreditkort, der er gemt på din profil. Betal med et gemt kort, når du er logget ind for en mere jævn weboplevelse.",
"Choose room": "Vælg rum", "Choose room": "Vælg rum",
"Choose type of bed": "Vælg type seng", "Choose type of bed": "Vælg type seng",
@@ -35,28 +42,35 @@
"Country": "Land", "Country": "Land",
"Country code": "Landekode", "Country code": "Landekode",
"Credit card deleted successfully": "Kreditkort blev slettet", "Credit card deleted successfully": "Kreditkort blev slettet",
"Your current level": "Dit nuværende niveau",
"Current password": "Nuværende kodeord", "Current password": "Nuværende kodeord",
"characters": "tegn",
"Date of Birth": "Fødselsdato", "Date of Birth": "Fødselsdato",
"Day": "Dag", "Day": "Dag",
"Description": "Beskrivelse", "Description": "Beskrivelse",
"Discard changes": "Kassér ændringer", "Discard changes": "Kassér ændringer",
"Do you want to start the day with Scandics famous breakfast buffé?": "Vil du starte dagen med Scandics berømte morgenbuffet?", "Do you want to start the day with Scandics famous breakfast buffé?": "Vil du starte dagen med Scandics berømte morgenbuffet?",
"Download the Scandic app": "Download Scandic-appen",
"Edit": "Redigere", "Edit": "Redigere",
"Edit profile": "Rediger profil", "Edit profile": "Rediger profil",
"Email": "E-mail", "Email": "E-mail",
"Extras to your booking": "Tillæg til din booking",
"There are no transactions to display": "Der er ingen transaktioner at vise",
"Explore all levels and benefits": "Udforsk alle niveauer og fordele", "Explore all levels and benefits": "Udforsk alle niveauer og fordele",
"Extras to your booking": "Tillæg til din booking",
"Failed to delete credit card, please try again later.": "Kunne ikke slette kreditkort. Prøv venligst igen senere.", "Failed to delete credit card, please try again later.": "Kunne ikke slette kreditkort. Prøv venligst igen senere.",
"Find booking": "Find booking", "Find booking": "Find booking",
"Find hotels": "Find hotel",
"Flexibility": "Fleksibilitet", "Flexibility": "Fleksibilitet",
"Former Scandic Hotel": "Tidligere Scandic Hotel", "Former Scandic Hotel": "Tidligere Scandic Hotel",
"From": "Fra", "From": "Fra",
"from your member profile?": "fra din medlemsprofil?", "from your member profile?": "fra din medlemsprofil?",
"Get inspired": "Bliv inspireret", "Get inspired": "Bliv inspireret",
"Go back to overview": "Gå tilbage til oversigten", "Go back to overview": "Gå tilbage til oversigten",
"Highest level": "Højeste niveau",
"Hotel facilities": "Hotel faciliteter",
"Hotel surroundings": "Hotel omgivelser",
"How do you want to sleep?": "Hvordan vil du sove?",
"How it works": "Hvordan det virker",
"Join Scandic Friends": "Tilmeld dig Scandic Friends",
"Language": "Sprog",
"Level": "Niveau",
"Level 1": "Niveau 1", "Level 1": "Niveau 1",
"Level 2": "Niveau 2", "Level 2": "Niveau 2",
"Level 3": "Niveau 3", "Level 3": "Niveau 3",
@@ -64,16 +78,11 @@
"Level 5": "Niveau 5", "Level 5": "Niveau 5",
"Level 6": "Niveau 6", "Level 6": "Niveau 6",
"Level 7": "Niveau 7", "Level 7": "Niveau 7",
"Highest level": "Højeste niveau",
"How do you want to sleep?": "Hvordan vil du sove?",
"How it works": "Hvordan det virker",
"Join Scandic Friends": "Tilmeld dig Scandic Friends",
"Language": "Sprog",
"Level": "Niveau",
"Level up to unlock": "Stig i niveau for at låse op", "Level up to unlock": "Stig i niveau for at låse op",
"Log in": "Log på", "Log in": "Log på",
"Log in here": "Log ind her", "Log in here": "Log ind her",
"Log out": "Log ud", "Log out": "Log ud",
"Manage preferences": "Administrer præferencer",
"Meetings & Conferences": "Møder & Konferencer", "Meetings & Conferences": "Møder & Konferencer",
"Members": "Medlemmer", "Members": "Medlemmer",
"Membership cards": "Medlemskort", "Membership cards": "Medlemskort",
@@ -87,13 +96,13 @@
"New password": "Nyt kodeord", "New password": "Nyt kodeord",
"Next": "Næste", "Next": "Næste",
"next level:": "Næste niveau:", "next level:": "Næste niveau:",
"No content published": "Intet indhold offentliggjort",
"No, keep card": "Nej, behold kortet",
"No transactions available": "Ingen tilgængelige transaktioner",
"Not found": "Ikke fundet",
"night": "nat", "night": "nat",
"nights": "nætter", "nights": "nætter",
"Nights needed to level up": "Nætter nødvendige for at komme i niveau", "Nights needed to level up": "Nætter nødvendige for at komme i niveau",
"No content published": "Intet indhold offentliggjort",
"No transactions available": "Ingen tilgængelige transaktioner",
"No, keep card": "Nej, behold kortet",
"Not found": "Ikke fundet",
"number": "nummer", "number": "nummer",
"On your journey": "På din rejse", "On your journey": "På din rejse",
"Open": "Åben", "Open": "Åben",
@@ -104,21 +113,22 @@
"Phone is required": "Telefonnummer er påkrævet", "Phone is required": "Telefonnummer er påkrævet",
"Phone number": "Telefonnummer", "Phone number": "Telefonnummer",
"Please enter a valid phone number": "Indtast venligst et gyldigt telefonnummer", "Please enter a valid phone number": "Indtast venligst et gyldigt telefonnummer",
"Points": "Point",
"points": "Point", "points": "Point",
"Points": "Point",
"Points being calculated": "Point udregnes", "Points being calculated": "Point udregnes",
"Points earned prior to May 1, 2021": "Point optjent inden 1. maj 2021", "Points earned prior to May 1, 2021": "Point optjent inden 1. maj 2021",
"Points may take up to 10 days to be displayed.": "Det kan tage op til 10 dage at få vist point.", "Points may take up to 10 days to be displayed.": "Det kan tage op til 10 dage at få vist point.",
"Points needed to level up": "Point nødvendige for at stige i niveau", "Points needed to level up": "Point nødvendige for at stige i niveau",
"Points needed to stay on level": "Point nødvendige for at holde sig på niveau", "Points needed to stay on level": "Point nødvendige for at holde sig på niveau",
"spendable points expiring by": "{points} Brugbare point udløber den {date}",
"Previous victories": "Tidligere sejre", "Previous victories": "Tidligere sejre",
"Read more": "Læs mere", "Read more": "Læs mere",
"Read more about the hotel": "Læs mere om hotellet", "Read more about the hotel": "Læs mere om hotellet",
"Remove card from member profile": "Fjern kortet fra medlemsprofilen", "Remove card from member profile": "Fjern kortet fra medlemsprofilen",
"Restaurant & Bar": "Restaurant & Bar", "Restaurant & Bar": "Restaurant & Bar",
"Retype new password": "Gentag den nye adgangskode", "Retype new password": "Gentag den nye adgangskode",
"Room facilities": "Værelsesfaciliteter",
"Rooms": "Værelser", "Rooms": "Værelser",
"Rooms & Guests": "Værelser & gæster",
"Save": "Gemme", "Save": "Gemme",
"Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Mastercard": "Scandic Friends Mastercard",
"Scandic Friends Point Shop": "Scandic Friends Point Shop", "Scandic Friends Point Shop": "Scandic Friends Point Shop",
@@ -126,66 +136,58 @@
"Select country of residence": "Vælg bopælsland", "Select country of residence": "Vælg bopælsland",
"Select date of birth": "Vælg fødselsdato", "Select date of birth": "Vælg fødselsdato",
"Select language": "Vælg sprog", "Select language": "Vælg sprog",
"Show less": "Vis mindre",
"Show more": "Vis mere",
"Show all amenities": "Vis alle faciliteter", "Show all amenities": "Vis alle faciliteter",
"Skip to main content": "Spring over og gå til hovedindhold", "Show less": "Vis mindre",
"Show map": "Vis kort",
"Show more": "Vis mere",
"Sign up bonus": "Velkomstbonus", "Sign up bonus": "Velkomstbonus",
"Something went wrong!": "Noget gik galt!", "Skip to main content": "Spring over og gå til hovedindhold",
"Something went wrong and we couldn't add your card. Please try again later.": "Noget gik galt, og vi kunne ikke tilføje dit kort. Prøv venligst igen senere.", "Something went wrong and we couldn't add your card. Please try again later.": "Noget gik galt, og vi kunne ikke tilføje dit kort. Prøv venligst igen senere.",
"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 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!",
"special character": "speciel karakter",
"spendable points expiring by": "{points} Brugbare point udløber den {date}",
"Street": "Gade", "Street": "Gade",
"Successfully updated profile!": "Profilen er opdateret med succes!", "Successfully updated profile!": "Profilen er opdateret med succes!",
"special character": "speciel karakter", "Summary": "Opsummering",
"Tell us what information and updates you'd like to receive, and how, by clicking the link below.": "Fortæl os, hvilke oplysninger og opdateringer du gerne vil modtage, og hvordan, ved at klikke på linket nedenfor.",
"Thank you": "Tak",
"There are no transactions to display": "Der er ingen transaktioner at vise",
"to": "til",
"Total Points": "Samlet antal point", "Total Points": "Samlet antal point",
"Your points to spend": "Dine brugbare point",
"Transaction date": "Overførselsdato", "Transaction date": "Overførselsdato",
"Transactions": "Transaktioner", "Transactions": "Transaktioner",
"Tripadvisor reviews": "{rating} ({count} anmeldelser på Tripadvisor)", "Tripadvisor reviews": "{rating} ({count} anmeldelser på Tripadvisor)",
"to": "til",
"TUI Points": "TUI Points", "TUI Points": "TUI Points",
"User information": "Brugeroplysninger", "Type of bed": "Sengtype",
"Type of room": "Værelsestype",
"uppercase letter": "stort bogstav", "uppercase letter": "stort bogstav",
"Use bonus cheque": "Brug Bonus Cheque",
"User information": "Brugeroplysninger",
"View your booking": "Se din booking",
"Visiting address": "Besøgsadresse", "Visiting address": "Besøgsadresse",
"We could not add a card right now, please try again later.": "Vi kunne ikke tilføje et kort lige nu. Prøv venligst igen senere.", "We could not add a card right now, please try again later.": "Vi kunne ikke tilføje et kort lige nu. Prøv venligst igen senere.",
"We have sent a detailed confirmation of your booking to your email:": "Vi har sendt en detaljeret bekræftelse af din booking til din email:",
"We look forward to your visit!": "Vi ser frem til dit besøg!",
"Weekdays": "Hverdage",
"Weekends": "Weekender",
"Welcome": "Velkommen", "Welcome": "Velkommen",
"Welcome to": "Velkommen til", "Welcome to": "Velkommen til",
"Wellness & Exercise": "Velvære & Motion", "Wellness & Exercise": "Velvære & Motion",
"When": "Hvornår",
"Where should you go next?": "Find inspiration til dit næste ophold", "Where should you go next?": "Find inspiration til dit næste ophold",
"Where to": "Hvor",
"Which room class suits you the best?": "Hvilken rumklasse passer bedst til dig", "Which room class suits you the best?": "Hvilken rumklasse passer bedst til dig",
"Year": "År", "Year": "År",
"You canceled adding a new credit card.": "Du har annulleret tilføjelsen af et nyt kreditkort.",
"Yes, remove my card": "Ja, fjern mit kort", "Yes, remove my card": "Ja, fjern mit kort",
"You canceled adding a new credit card.": "Du har annulleret tilføjelsen af et nyt kreditkort.",
"You have no previous stays.": "Du har ingen tidligere ophold.", "You have no previous stays.": "Du har ingen tidligere ophold.",
"You have no upcoming stays.": "Du har ingen kommende ophold.", "You have no upcoming stays.": "Du har ingen kommende ophold.",
"Your card was successfully removed!": "Dit kort blev fjernet!", "Your card was successfully removed!": "Dit kort blev fjernet!",
"Your card was successfully saved!": "Dit kort blev gemt!", "Your card was successfully saved!": "Dit kort blev gemt!",
"Your Challenges Conquer & Earn!": "Dine udfordringer Overvind og tjen!", "Your Challenges Conquer & Earn!": "Dine udfordringer Overvind og tjen!",
"Your current level": "Dit nuværende niveau",
"Your level": "Dit niveau", "Your level": "Dit niveau",
"Zip code": "Postnummer", "Your points to spend": "Dine brugbare point",
"Room facilities": "Værelsesfaciliteter", "Zip code": "Postnummer"
"Hotel facilities": "Hotel faciliteter",
"Hotel surroundings": "Hotel omgivelser",
"Show map": "Vis kort",
"Check in": "Check ind",
"Check out": "Check ud",
"Summary": "Opsummering",
"Thank you": "Tak",
"We look forward to your visit!": "Vi ser frem til dit besøg!",
"We have sent a detailed confirmation of your booking to your email:": "Vi har sendt en detaljeret bekræftelse af din booking til din email:",
"Download the Scandic app": "Download Scandic-appen",
"View your booking": "Se din booking",
"At latest": "Senest",
"Type of room": "Værelsestype",
"Type of bed": "Sengtype",
"Weekdays": "Hverdage",
"Weekends": "Weekender",
"Where to": "Hvor",
"When": "Hvornår",
"Rooms & Guests": "Værelser & gæster",
"Booking codes and vouchers": "Bookingkoder og vouchers",
"Add code": "Tilføj kode",
"Use bonus cheque": "Brug Bonus Cheque",
"Book reward night": "Book bonusnat",
"Find hotels": "Find hotel"
} }

View File

@@ -1,5 +1,6 @@
{ {
"A photo of the room": "Ein Foto des Zimmers", "A photo of the room": "Ein Foto des Zimmers",
"Add code": "Code hinzufügen",
"Add new card": "Neue Karte hinzufügen", "Add new card": "Neue Karte hinzufügen",
"Address": "Adresse", "Address": "Adresse",
"All our beds are from Bliss, allowing you to adjust the firmness for your perfect comfort.": "Alle unsere Betten sind von Bliss, sodass Sie die Festigkeit für Ihren perfekten Komfort anpassen können.", "All our beds are from Bliss, allowing you to adjust the firmness for your perfect comfort.": "Alle unsere Betten sind von Bliss, sodass Sie die Festigkeit für Ihren perfekten Komfort anpassen können.",
@@ -7,18 +8,24 @@
"Already a friend?": "Sind wir schon Freunde?", "Already a friend?": "Sind wir schon Freunde?",
"Amenities": "Annehmlichkeiten", "Amenities": "Annehmlichkeiten",
"An error occurred when adding a credit card, please try again later.": "Beim Hinzufügen einer Kreditkarte ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.", "An error occurred when adding a credit card, please try again later.": "Beim Hinzufügen einer Kreditkarte ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.",
"Are you sure you want to remove the card ending with": "Möchten Sie die Karte mit der Endung",
"An error occurred when trying to update profile.": "Beim Versuch, das Profil zu aktualisieren, ist ein Fehler aufgetreten.", "An error occurred when trying to update profile.": "Beim Versuch, das Profil zu aktualisieren, ist ein Fehler aufgetreten.",
"Are you sure you want to remove the card ending with": "Möchten Sie die Karte mit der Endung",
"Arrival date": "Ankunftsdatum", "Arrival date": "Ankunftsdatum",
"as of today": "Stand heute", "as of today": "Stand heute",
"As our": "Als unser {level}", "As our": "Als unser {level}",
"As our Close Friend": "Als unser enger Freund", "As our Close Friend": "Als unser enger Freund",
"At latest": "Spätestens",
"At the hotel": "Im Hotel", "At the hotel": "Im Hotel",
"Book": "Buchen", "Book": "Buchen",
"Book reward night": "Bonusnacht buchen",
"Booking codes and vouchers": "Buchungscodes und Gutscheine",
"Booking number": "Buchungsnummer", "Booking number": "Buchungsnummer",
"Breakfast": "Frühstück", "Breakfast": "Frühstück",
"by": "bis", "by": "bis",
"Cancel": "Stornieren", "Cancel": "Stornieren",
"characters": "figuren",
"Check in": "Einchecken",
"Check out": "Auschecken",
"Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Sehen Sie sich die in Ihrem Profil gespeicherten Kreditkarten an. Bezahlen Sie mit einer gespeicherten Karte, wenn Sie angemeldet sind, für ein reibungsloseres Web-Erlebnis.", "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Sehen Sie sich die in Ihrem Profil gespeicherten Kreditkarten an. Bezahlen Sie mit einer gespeicherten Karte, wenn Sie angemeldet sind, für ein reibungsloseres Web-Erlebnis.",
"Choose room": "Zimmer wählen", "Choose room": "Zimmer wählen",
"Choose type of bed": "Wählen Sie den Bettentyp", "Choose type of bed": "Wählen Sie den Bettentyp",
@@ -34,28 +41,35 @@
"Country": "Land", "Country": "Land",
"Country code": "Landesvorwahl", "Country code": "Landesvorwahl",
"Credit card deleted successfully": "Kreditkarte erfolgreich gelöscht", "Credit card deleted successfully": "Kreditkarte erfolgreich gelöscht",
"Your current level": "Ihr aktuelles Level",
"Current password": "Aktuelles Passwort", "Current password": "Aktuelles Passwort",
"characters": "figuren",
"Date of Birth": "Geburtsdatum", "Date of Birth": "Geburtsdatum",
"Day": "Tag", "Day": "Tag",
"Description": "Beschreibung", "Description": "Beschreibung",
"Discard changes": "Änderungen verwerfen", "Discard changes": "Änderungen verwerfen",
"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?", "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?",
"Download the Scandic app": "Laden Sie die Scandic-App herunter",
"Edit": "Bearbeiten", "Edit": "Bearbeiten",
"Edit profile": "Profil bearbeiten", "Edit profile": "Profil bearbeiten",
"Email": "Email", "Email": "Email",
"Extras to your booking": "Extras zu Ihrer Buchung",
"There are no transactions to display": "Es sind keine Transaktionen zum Anzeigen vorhanden",
"Explore all levels and benefits": "Entdecken Sie alle Levels und Vorteile", "Explore all levels and benefits": "Entdecken Sie alle Levels und Vorteile",
"Extras to your booking": "Extras zu Ihrer Buchung",
"Failed to delete credit card, please try again later.": "Kreditkarte konnte nicht gelöscht werden. Bitte versuchen Sie es später noch einmal.", "Failed to delete credit card, please try again later.": "Kreditkarte konnte nicht gelöscht werden. Bitte versuchen Sie es später noch einmal.",
"Find booking": "Buchung finden", "Find booking": "Buchung finden",
"Find hotels": "Hotels finden",
"Flexibility": "Flexibilität", "Flexibility": "Flexibilität",
"Former Scandic Hotel": "Ehemaliges Scandic Hotel", "Former Scandic Hotel": "Ehemaliges Scandic Hotel",
"From": "Fromm", "From": "Fromm",
"from your member profile?": "wirklich aus Ihrem Mitgliedsprofil entfernen?", "from your member profile?": "wirklich aus Ihrem Mitgliedsprofil entfernen?",
"Get inspired": "Lassen Sie sich inspieren", "Get inspired": "Lassen Sie sich inspieren",
"Go back to overview": "Zurück zur Übersicht", "Go back to overview": "Zurück zur Übersicht",
"Highest level": "Höchstes Level",
"Hotel facilities": "Hotel-Infos",
"Hotel surroundings": "Umgebung des Hotels",
"How do you want to sleep?": "Wie möchtest du schlafen?",
"How it works": "Wie es funktioniert",
"Join Scandic Friends": "Treten Sie Scandic Friends bei",
"Language": "Sprache",
"Level": "Level",
"Level 1": "Level 1", "Level 1": "Level 1",
"Level 2": "Level 2", "Level 2": "Level 2",
"Level 3": "Level 3", "Level 3": "Level 3",
@@ -63,16 +77,11 @@
"Level 5": "Level 5", "Level 5": "Level 5",
"Level 6": "Level 6", "Level 6": "Level 6",
"Level 7": "Level 7", "Level 7": "Level 7",
"Highest level": "Höchstes Level",
"How do you want to sleep?": "Wie möchtest du schlafen?",
"How it works": "Wie es funktioniert",
"Join Scandic Friends": "Treten Sie Scandic Friends bei",
"Language": "Sprache",
"Level": "Level",
"Level up to unlock": "Zum Freischalten aufsteigen", "Level up to unlock": "Zum Freischalten aufsteigen",
"Log in": "Anmeldung", "Log in": "Anmeldung",
"Log in here": "Hier einloggen", "Log in here": "Hier einloggen",
"Log out": "Ausloggen", "Log out": "Ausloggen",
"Manage preferences": "Verwalten von Voreinstellungen",
"Members": "Mitglieder", "Members": "Mitglieder",
"Membership cards": "Mitgliedskarten", "Membership cards": "Mitgliedskarten",
"Membership ID": "Mitglieds-ID", "Membership ID": "Mitglieds-ID",
@@ -85,13 +94,13 @@
"New password": "Neues Kennwort", "New password": "Neues Kennwort",
"Next": "Nächste", "Next": "Nächste",
"next level:": "Nächstes Level:", "next level:": "Nächstes Level:",
"No content published": "Kein Inhalt veröffentlicht",
"No, keep card": "Nein, Karte behalten",
"No transactions available": "Keine Transaktionen verfügbar",
"Not found": "Nicht gefunden",
"night": "nacht", "night": "nacht",
"nights": "Nächte", "nights": "Nächte",
"Nights needed to level up": "Nächte, die zum Levelaufstieg benötigt werden", "Nights needed to level up": "Nächte, die zum Levelaufstieg benötigt werden",
"No content published": "Kein Inhalt veröffentlicht",
"No transactions available": "Keine Transaktionen verfügbar",
"No, keep card": "Nein, Karte behalten",
"Not found": "Nicht gefunden",
"number": "nummer", "number": "nummer",
"On your journey": "Auf deiner Reise", "On your journey": "Auf deiner Reise",
"Open": "Offen", "Open": "Offen",
@@ -108,12 +117,13 @@
"Points may take up to 10 days to be displayed.": "Es kann bis zu 10 Tage dauern, bis Punkte angezeigt werden.", "Points may take up to 10 days to be displayed.": "Es kann bis zu 10 Tage dauern, bis Punkte angezeigt werden.",
"Points needed to level up": "Punkte, die zum Levelaufstieg benötigt werden", "Points needed to level up": "Punkte, die zum Levelaufstieg benötigt werden",
"Points needed to stay on level": "Erforderliche Punkte, um auf diesem Level zu bleiben", "Points needed to stay on level": "Erforderliche Punkte, um auf diesem Level zu bleiben",
"spendable points expiring by": "{points} Einlösbare punkte verfallen bis zum {date}",
"Previous victories": "Bisherige Siege", "Previous victories": "Bisherige Siege",
"Read more": "Mehr lesen", "Read more": "Mehr lesen",
"Read more about the hotel": "Lesen Sie mehr über das Hotel", "Read more about the hotel": "Lesen Sie mehr über das Hotel",
"Remove card from member profile": "Karte aus dem Mitgliedsprofil entfernen", "Remove card from member profile": "Karte aus dem Mitgliedsprofil entfernen",
"Retype new password": "Neues Passwort erneut eingeben", "Retype new password": "Neues Passwort erneut eingeben",
"Room facilities": "Zimmerausstattung",
"Rooms & Guests": "Zimmer & Gäste",
"Save": "Speichern", "Save": "Speichern",
"Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Mastercard": "Scandic Friends Mastercard",
"Scandic Friends Point Shop": "Scandic Friends Point Shop", "Scandic Friends Point Shop": "Scandic Friends Point Shop",
@@ -121,65 +131,57 @@
"Select country of residence": "Wählen Sie das Land Ihres Wohnsitzes aus", "Select country of residence": "Wählen Sie das Land Ihres Wohnsitzes aus",
"Select date of birth": "Geburtsdatum auswählen", "Select date of birth": "Geburtsdatum auswählen",
"Select language": "Sprache auswählen", "Select language": "Sprache auswählen",
"Show less": "Weniger anzeigen",
"Show more": "Mehr anzeigen",
"Show all amenities": "Alle Annehmlichkeiten anzeigen", "Show all amenities": "Alle Annehmlichkeiten anzeigen",
"Skip to main content": "Direkt zum Inhalt", "Show less": "Weniger anzeigen",
"Show map": "Karte anzeigen",
"Show more": "Mehr anzeigen",
"Sign up bonus": "Anmelde-Bonus", "Sign up bonus": "Anmelde-Bonus",
"Something went wrong!": "Etwas ist schief gelaufen!", "Skip to main content": "Direkt zum Inhalt",
"Something went wrong and we couldn't add your card. Please try again later.": "Ein Fehler ist aufgetreten und wir konnten Ihre Karte nicht hinzufügen. Bitte versuchen Sie es später erneut.", "Something went wrong and we couldn't add your card. Please try again later.": "Ein Fehler ist aufgetreten und wir konnten Ihre Karte nicht hinzufügen. Bitte versuchen Sie es später erneut.",
"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 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!",
"special character": "sonderzeichen",
"spendable points expiring by": "{points} Einlösbare punkte verfallen bis zum {date}",
"Street": "Straße", "Street": "Straße",
"Successfully updated profile!": "Profil erfolgreich aktualisiert!", "Successfully updated profile!": "Profil erfolgreich aktualisiert!",
"special character": "sonderzeichen", "Summary": "Zusammenfassung",
"Tell us what information and updates you'd like to receive, and how, by clicking the link below.": "Teilen Sie uns mit, welche Informationen und Updates Sie wie erhalten möchten, indem Sie auf den unten stehenden Link klicken.",
"Thank you": "Danke",
"There are no transactions to display": "Es sind keine Transaktionen zum Anzeigen vorhanden",
"to": "zu",
"Total Points": "Gesamtpunktzahl", "Total Points": "Gesamtpunktzahl",
"Your points to spend": "Meine Punkte",
"Transaction date": "Transaktionsdatum", "Transaction date": "Transaktionsdatum",
"Transactions": "Transaktionen", "Transactions": "Transaktionen",
"Tripadvisor reviews": "{rating} ({count} Bewertungen auf Tripadvisor)", "Tripadvisor reviews": "{rating} ({count} Bewertungen auf Tripadvisor)",
"to": "zu",
"TUI Points": "TUI Points", "TUI Points": "TUI Points",
"User information": "Nutzerinformation", "Type of bed": "Bettentyp",
"Type of room": "Zimmerart",
"uppercase letter": "großbuchstabe", "uppercase letter": "großbuchstabe",
"Use bonus cheque": "Bonusscheck nutzen",
"User information": "Nutzerinformation",
"View your booking": "Ihre Buchung ansehen",
"Visiting address": "Besuchsadresse", "Visiting address": "Besuchsadresse",
"We could not add a card right now, please try again later.": "Wir konnten momentan keine Karte hinzufügen. Bitte versuchen Sie es später noch einmal.", "We could not add a card right now, please try again later.": "Wir konnten momentan keine Karte hinzufügen. Bitte versuchen Sie es später noch einmal.",
"Welcome to": "Willkommen zu", "We have sent a detailed confirmation of your booking to your email:": "Wir haben eine detaillierte Bestätigung Ihrer Buchung an Ihre E-Mail gesendet:",
"We look forward to your visit!": "Wir freuen uns auf Ihren Besuch!",
"Weekdays": "Wochentage",
"Weekends": "Wochenenden",
"Welcome": "Willkommen", "Welcome": "Willkommen",
"Welcome to": "Willkommen zu",
"When": "Wann",
"Where should you go next?": "Wo geht es als Nächstes hin?", "Where should you go next?": "Wo geht es als Nächstes hin?",
"Where to": "Wohin",
"Which room class suits you the best?": "Welche Zimmerklasse passt am besten zu Ihnen?", "Which room class suits you the best?": "Welche Zimmerklasse passt am besten zu Ihnen?",
"Year": "Jahr", "Year": "Jahr",
"You canceled adding a new credit card.": "Sie haben das Hinzufügen einer neuen Kreditkarte abgebrochen.",
"Yes, remove my card": "Ja, meine Karte entfernen", "Yes, remove my card": "Ja, meine Karte entfernen",
"You canceled adding a new credit card.": "Sie haben das Hinzufügen einer neuen Kreditkarte abgebrochen.",
"You have no previous stays.": "Sie haben keine vorherigen Aufenthalte.", "You have no previous stays.": "Sie haben keine vorherigen Aufenthalte.",
"You have no upcoming stays.": "Sie haben keine bevorstehenden Aufenthalte.", "You have no upcoming stays.": "Sie haben keine bevorstehenden Aufenthalte.",
"Your card was successfully removed!": "Ihre Karte wurde erfolgreich entfernt!", "Your card was successfully removed!": "Ihre Karte wurde erfolgreich entfernt!",
"Your card was successfully saved!": "Ihre Karte wurde erfolgreich gespeichert!", "Your card was successfully saved!": "Ihre Karte wurde erfolgreich gespeichert!",
"Your Challenges Conquer & Earn!": "Meistern Sie Ihre Herausforderungen und verdienen Sie Geld!", "Your Challenges Conquer & Earn!": "Meistern Sie Ihre Herausforderungen und verdienen Sie Geld!",
"Your current level": "Ihr aktuelles Level",
"Your level": "Dein level", "Your level": "Dein level",
"Zip code": "PLZ", "Your points to spend": "Meine Punkte",
"Room facilities": "Zimmerausstattung", "Zip code": "PLZ"
"Hotel facilities": "Hotel-Infos",
"Hotel surroundings": "Umgebung des Hotels",
"Show map": "Karte anzeigen",
"Check in": "Einchecken",
"Check out": "Auschecken",
"Summary": "Zusammenfassung",
"Thank you": "Danke",
"We look forward to your visit!": "Wir freuen uns auf Ihren Besuch!",
"We have sent a detailed confirmation of your booking to your email:": "Wir haben eine detaillierte Bestätigung Ihrer Buchung an Ihre E-Mail gesendet:",
"Download the Scandic app": "Laden Sie die Scandic-App herunter",
"View your booking": "Ihre Buchung ansehen",
"At latest": "Spätestens",
"Type of room": "Zimmerart",
"Type of bed": "Bettentyp",
"Weekdays": "Wochentage",
"Weekends": "Wochenenden",
"Where to": "Wohin",
"When": "Wann",
"Rooms & Guests": "Zimmer & Gäste",
"Booking codes and vouchers": "Buchungscodes und Gutscheine",
"Add code": "Code hinzufügen",
"Use bonus cheque": "Bonusscheck nutzen",
"Book reward night": "Bonusnacht buchen",
"Find hotels": "Hotels finden"
} }

View File

@@ -1,6 +1,7 @@
{ {
"A photo of the room": "A photo of the room", "A photo of the room": "A photo of the room",
"Activities": "Activities", "Activities": "Activities",
"Add code": "Add code",
"Add new card": "Add new card", "Add new card": "Add new card",
"Address": "Address", "Address": "Address",
"All our beds are from Bliss, allowing you to adjust the firmness for your perfect comfort.": "All our beds are from Bliss, allowing you to adjust the firmness for your perfect comfort.", "All our beds are from Bliss, allowing you to adjust the firmness for your perfect comfort.": "All our beds are from Bliss, allowing you to adjust the firmness for your perfect comfort.",
@@ -8,18 +9,24 @@
"Already a friend?": "Already a friend?", "Already a friend?": "Already a friend?",
"Amenities": "Amenities", "Amenities": "Amenities",
"An error occurred when adding a credit card, please try again later.": "An error occurred when adding a credit card, please try again later.", "An error occurred when adding a credit card, please try again later.": "An error occurred when adding a credit card, please try again later.",
"Are you sure you want to remove the card ending with": "Are you sure you want to remove the card ending with",
"An error occurred when trying to update profile.": "An error occurred when trying to update profile.", "An error occurred when trying to update profile.": "An error occurred when trying to update profile.",
"Are you sure you want to remove the card ending with": "Are you sure you want to remove the card ending with",
"Arrival date": "Arrival date", "Arrival date": "Arrival date",
"as of today": "as of today", "as of today": "as of today",
"As our": "As our {level}", "As our": "As our {level}",
"As our Close Friend": "As our Close Friend", "As our Close Friend": "As our Close Friend",
"At latest": "At latest",
"At the hotel": "At the hotel", "At the hotel": "At the hotel",
"Book": "Book", "Book": "Book",
"Book reward night": "Book reward night",
"Booking codes and vouchers": "Booking codes and vouchers",
"Booking number": "Booking number", "Booking number": "Booking number",
"Breakfast": "Breakfast", "Breakfast": "Breakfast",
"by": "by", "by": "by",
"Cancel": "Cancel", "Cancel": "Cancel",
"characters": "characters",
"Check in": "Check in",
"Check out": "Check out",
"Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.", "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.",
"Choose room": "Choose room", "Choose room": "Choose room",
"Choose type of bed": "Choose type of bed", "Choose type of bed": "Choose type of bed",
@@ -34,34 +41,41 @@
"Could not find requested resource": "Could not find requested resource", "Could not find requested resource": "Could not find requested resource",
"Country": "Country", "Country": "Country",
"Country code": "Country code", "Country code": "Country code",
"Your current level": "Your current level",
"Current password": "Current password",
"characters": "characters",
"Credit card deleted successfully": "Credit card deleted successfully", "Credit card deleted successfully": "Credit card deleted successfully",
"Current password": "Current password",
"Date of Birth": "Date of Birth", "Date of Birth": "Date of Birth",
"Day": "Day", "Day": "Day",
"Description": "Description", "Description": "Description",
"Discard changes": "Discard changes", "Discard changes": "Discard changes",
"Distance to city centre": "{number}km to city centre", "Distance to city centre": "{number}km to city centre",
"Do you want to start the day with Scandics famous breakfast buffé?": "Do you want to start the day with Scandics famous breakfast buffé?", "Do you want to start the day with Scandics famous breakfast buffé?": "Do you want to start the day with Scandics famous breakfast buffé?",
"Download the Scandic app": "Download the Scandic app",
"Edit": "Edit", "Edit": "Edit",
"Edit profile": "Edit profile", "Edit profile": "Edit profile",
"Email": "Email", "Email": "Email",
"There are no transactions to display": "There are no transactions to display",
"Explore all levels and benefits": "Explore all levels and benefits", "Explore all levels and benefits": "Explore all levels and benefits",
"Failed to delete credit card, please try again later.": "Failed to delete credit card, please try again later.",
"Extras to your booking": "Extras to your booking", "Extras to your booking": "Extras to your booking",
"Failed to delete credit card, please try again later.": "Failed to delete credit card, please try again later.",
"FAQ": "FAQ", "FAQ": "FAQ",
"Find booking": "Find booking", "Find booking": "Find booking",
"Former Scandic Hotel": "Former Scandic Hotel", "Find hotels": "Find hotels",
"Flexibility": "Flexibility", "Flexibility": "Flexibility",
"Former Scandic Hotel": "Former Scandic Hotel",
"From": "From", "From": "From",
"from your member profile?": "from your member profile?", "from your member profile?": "from your member profile?",
"Get inspired": "Get inspired", "Get inspired": "Get inspired",
"Go back to overview": "Go back to overview", "Go back to overview": "Go back to overview",
"Highest level": "Highest level",
"Hotel facilities": "Hotel facilities",
"Hotel surroundings": "Hotel surroundings",
"hotelPages.rooms.roomCard.person": "person", "hotelPages.rooms.roomCard.person": "person",
"hotelPages.rooms.roomCard.persons": "persons", "hotelPages.rooms.roomCard.persons": "persons",
"hotelPages.rooms.roomCard.seeRoomDetails": "See room details", "hotelPages.rooms.roomCard.seeRoomDetails": "See room details",
"How do you want to sleep?": "How do you want to sleep?",
"How it works": "How it works",
"Join Scandic Friends": "Join Scandic Friends",
"Language": "Language",
"Level": "Level",
"Level 1": "Level 1", "Level 1": "Level 1",
"Level 2": "Level 2", "Level 2": "Level 2",
"Level 3": "Level 3", "Level 3": "Level 3",
@@ -69,16 +83,11 @@
"Level 5": "Level 5", "Level 5": "Level 5",
"Level 6": "Level 6", "Level 6": "Level 6",
"Level 7": "Level 7", "Level 7": "Level 7",
"Highest level": "Highest level",
"How do you want to sleep?": "How do you want to sleep?",
"How it works": "How it works",
"Join Scandic Friends": "Join Scandic Friends",
"Language": "Language",
"Level": "Level",
"Level up to unlock": "Level up to unlock", "Level up to unlock": "Level up to unlock",
"Log in": "Log in", "Log in": "Log in",
"Log in here": "Log in here", "Log in here": "Log in here",
"Log out": "Log out", "Log out": "Log out",
"Manage preferences": "Manage preferences",
"Meetings & Conferences": "Meetings & Conferences", "Meetings & Conferences": "Meetings & Conferences",
"Members": "Members", "Members": "Members",
"Membership cards": "Membership cards", "Membership cards": "Membership cards",
@@ -92,13 +101,13 @@
"New password": "New password", "New password": "New password",
"Next": "Next", "Next": "Next",
"next level:": "next level:", "next level:": "next level:",
"No content published": "No content published",
"No, keep card": "No, keep card",
"No transactions available": "No transactions available",
"Not found": "Not found",
"night": "night", "night": "night",
"nights": "nights", "nights": "nights",
"Nights needed to level up": "Nights needed to level up", "Nights needed to level up": "Nights needed to level up",
"No content published": "No content published",
"No transactions available": "No transactions available",
"No, keep card": "No, keep card",
"Not found": "Not found",
"number": "number", "number": "number",
"On your journey": "On your journey", "On your journey": "On your journey",
"Open": "Open", "Open": "Open",
@@ -109,89 +118,82 @@
"Phone is required": "Phone is required", "Phone is required": "Phone is required",
"Phone number": "Phone number", "Phone number": "Phone number",
"Please enter a valid phone number": "Please enter a valid phone number", "Please enter a valid phone number": "Please enter a valid phone number",
"Points": "Points",
"points": "Points", "points": "Points",
"Points": "Points",
"Points being calculated": "Points being calculated", "Points being calculated": "Points being calculated",
"Points earned prior to May 1, 2021": "Points earned prior to May 1, 2021", "Points earned prior to May 1, 2021": "Points earned prior to May 1, 2021",
"Points may take up to 10 days to be displayed.": "Points may take up to 10 days to be displayed.", "Points may take up to 10 days to be displayed.": "Points may take up to 10 days to be displayed.",
"Points needed to level up": "Points needed to level up", "Points needed to level up": "Points needed to level up",
"Points needed to stay on level": "Points needed to stay on level", "Points needed to stay on level": "Points needed to stay on level",
"spendable points expiring by": "{points} spendable points expiring by {date}",
"Previous victories": "Previous victories", "Previous victories": "Previous victories",
"Read more": "Read more", "Read more": "Read more",
"Read more about the hotel": "Read more about the hotel", "Read more about the hotel": "Read more about the hotel",
"Remove card from member profile": "Remove card from member profile", "Remove card from member profile": "Remove card from member profile",
"Restaurant & Bar": "Restaurant & Bar", "Restaurant & Bar": "Restaurant & Bar",
"Retype new password": "Retype new password", "Retype new password": "Retype new password",
"Room facilities": "Room facilities",
"Rooms": "Rooms", "Rooms": "Rooms",
"Rooms & Guests": "Rooms & Guests",
"Save": "Save", "Save": "Save",
"See room details": "See room details",
"Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Mastercard": "Scandic Friends Mastercard",
"Scandic Friends Point Shop": "Scandic Friends Point Shop", "Scandic Friends Point Shop": "Scandic Friends Point Shop",
"See room details": "See room details",
"Select a country": "Select a country", "Select a country": "Select a country",
"Select country of residence": "Select country of residence", "Select country of residence": "Select country of residence",
"Select date of birth": "Select date of birth", "Select date of birth": "Select date of birth",
"Select language": "Select language", "Select language": "Select language",
"Show less": "Show less",
"Show more": "Show more",
"Show all amenities": "Show all amenities", "Show all amenities": "Show all amenities",
"Skip to main content": "Skip to main content", "Show less": "Show less",
"Show map": "Show map",
"Show more": "Show more",
"Sign up bonus": "Sign up bonus", "Sign up bonus": "Sign up bonus",
"Something went wrong!": "Something went wrong!", "Skip to main content": "Skip to main content",
"Something went wrong and we couldn't add your card. Please try again later.": "Something went wrong and we couldn't add your card. Please try again later.", "Something went wrong and we couldn't add your card. Please try again later.": "Something went wrong and we couldn't add your card. Please try again later.",
"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 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!",
"special character": "special character",
"spendable points expiring by": "{points} spendable points expiring by {date}",
"Street": "Street", "Street": "Street",
"Successfully updated profile!": "Successfully updated profile!", "Successfully updated profile!": "Successfully updated profile!",
"special character": "special character", "Summary": "Summary",
"Tell us what information and updates you'd like to receive, and how, by clicking the link below.": "Tell us what information and updates you'd like to receive, and how, by clicking the link below.",
"Thank you": "Thank you",
"There are no transactions to display": "There are no transactions to display",
"to": "to",
"Total Points": "Total Points", "Total Points": "Total Points",
"Your points to spend": "Your points to spend",
"You canceled adding a new credit card.": "You canceled adding a new credit card.",
"Transaction date": "Transaction date", "Transaction date": "Transaction date",
"Transactions": "Transactions", "Transactions": "Transactions",
"Tripadvisor reviews": "{rating} ({count} reviews on Tripadvisor)", "Tripadvisor reviews": "{rating} ({count} reviews on Tripadvisor)",
"to": "to",
"TUI Points": "TUI Points", "TUI Points": "TUI Points",
"User information": "User information", "Type of bed": "Type of bed",
"Type of room": "Type of room",
"uppercase letter": "uppercase letter", "uppercase letter": "uppercase letter",
"Use bonus cheque": "Use bonus cheque",
"User information": "User information",
"View your booking": "View your booking",
"Visiting address": "Visiting address", "Visiting address": "Visiting address",
"We could not add a card right now, please try again later.": "We could not add a card right now, please try again later.", "We could not add a card right now, please try again later.": "We could not add a card right now, please try again later.",
"We have sent a detailed confirmation of your booking to your email: ": "We have sent a detailed confirmation of your booking to your email: ",
"We look forward to your visit!": "We look forward to your visit!",
"Weekdays": "Weekdays",
"Weekends": "Weekends",
"Welcome": "Welcome", "Welcome": "Welcome",
"Welcome to": "Welcome to", "Welcome to": "Welcome to",
"Wellness & Exercise": "Wellness & Exercise", "Wellness & Exercise": "Wellness & Exercise",
"When": "When",
"Where should you go next?": "Where should you go next?", "Where should you go next?": "Where should you go next?",
"Where to": "Where to",
"Which room class suits you the best?": "Which room class suits you the best?", "Which room class suits you the best?": "Which room class suits you the best?",
"Year": "Year", "Year": "Year",
"Yes, remove my card": "Yes, remove my card", "Yes, remove my card": "Yes, remove my card",
"You canceled adding a new credit card.": "You canceled adding a new credit card.",
"You have no previous stays.": "You have no previous stays.", "You have no previous stays.": "You have no previous stays.",
"You have no upcoming stays.": "You have no upcoming stays.", "You have no upcoming stays.": "You have no upcoming stays.",
"Your card was successfully removed!": "Your card was successfully removed!", "Your card was successfully removed!": "Your card was successfully removed!",
"Your card was successfully saved!": "Your card was successfully saved!", "Your card was successfully saved!": "Your card was successfully saved!",
"Your Challenges Conquer & Earn!": "Your Challenges Conquer & Earn!", "Your Challenges Conquer & Earn!": "Your Challenges Conquer & Earn!",
"Your current level": "Your current level",
"Your level": "Your level", "Your level": "Your level",
"Zip code": "Zip code", "Your points to spend": "Your points to spend",
"Room facilities": "Room facilities", "Zip code": "Zip code"
"Hotel facilities": "Hotel facilities",
"Hotel surroundings": "Hotel surroundings",
"Show map": "Show map",
"Check in": "Check in",
"Check out": "Check out",
"Summary": "Summary",
"Thank you": "Thank you",
"We look forward to your visit!": "We look forward to your visit!",
"We have sent a detailed confirmation of your booking to your email: ": "We have sent a detailed confirmation of your booking to your email: ",
"Download the Scandic app": "Download the Scandic app",
"View your booking": "View your booking",
"At latest": "At latest",
"Type of room": "Type of room",
"Type of bed": "Type of bed",
"Weekdays": "Weekdays",
"Weekends": "Weekends",
"Where to": "Where to",
"When": "When",
"Rooms & Guests": "Rooms & Guests",
"Booking codes and vouchers": "Booking codes and vouchers",
"Add code": "Add code",
"Use bonus cheque": "Use bonus cheque",
"Book reward night": "Book reward night",
"Find hotels": "Find hotels"
} }

View File

@@ -1,6 +1,7 @@
{ {
"A photo of the room": "Kuva huoneesta", "A photo of the room": "Kuva huoneesta",
"Activities": "Aktiviteetit", "Activities": "Aktiviteetit",
"Add code": "Lisää koodi",
"Add new card": "Lisää uusi kortti", "Add new card": "Lisää uusi kortti",
"Address": "Osoite", "Address": "Osoite",
"All our beds are from Bliss, allowing you to adjust the firmness for your perfect comfort.": "Kaikki sänkymme ovat Bliss, joten voit säätää kiinteyttä täydelliseen mukavuuteen.", "All our beds are from Bliss, allowing you to adjust the firmness for your perfect comfort.": "Kaikki sänkymme ovat Bliss, joten voit säätää kiinteyttä täydelliseen mukavuuteen.",
@@ -8,18 +9,24 @@
"Already a friend?": "Oletko jo ystävä?", "Already a friend?": "Oletko jo ystävä?",
"Amenities": "Mukavuudet", "Amenities": "Mukavuudet",
"An error occurred when adding a credit card, please try again later.": "Luottokorttia lisättäessä tapahtui virhe. Yritä myöhemmin uudelleen.", "An error occurred when adding a credit card, please try again later.": "Luottokorttia lisättäessä tapahtui virhe. Yritä myöhemmin uudelleen.",
"Are you sure you want to remove the card ending with": "Haluatko varmasti poistaa kortin, joka päättyy numeroon",
"An error occurred when trying to update profile.": "Profiilia päivitettäessä tapahtui virhe.", "An error occurred when trying to update profile.": "Profiilia päivitettäessä tapahtui virhe.",
"Are you sure you want to remove the card ending with": "Haluatko varmasti poistaa kortin, joka päättyy numeroon",
"Arrival date": "Saapumispäivä", "Arrival date": "Saapumispäivä",
"as of today": "tänään", "as of today": "tänään",
"As our": "{level}-etu", "As our": "{level}-etu",
"As our Close Friend": "Läheisenä ystävänämme", "As our Close Friend": "Läheisenä ystävänämme",
"At latest": "Viimeistään",
"At the hotel": "Hotellissa", "At the hotel": "Hotellissa",
"Book": "Varaa", "Book": "Varaa",
"Book reward night": "Kirjapalkinto-ilta",
"Booking codes and vouchers": "Varauskoodit ja kupongit",
"Booking number": "Varausnumero", "Booking number": "Varausnumero",
"Breakfast": "Aamiainen", "Breakfast": "Aamiainen",
"by": "mennessä", "by": "mennessä",
"Cancel": "Peruuttaa", "Cancel": "Peruuttaa",
"characters": "hahmoja",
"Check in": "Sisäänkirjautuminen",
"Check out": "Uloskirjautuminen",
"Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Tarkista profiiliisi tallennetut luottokortit. Maksa tallennetulla kortilla kirjautuneena, jotta verkkokokemus on sujuvampi.", "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Tarkista profiiliisi tallennetut luottokortit. Maksa tallennetulla kortilla kirjautuneena, jotta verkkokokemus on sujuvampi.",
"Choose room": "Valitse huone", "Choose room": "Valitse huone",
"Choose type of bed": "Valitse sänkytyyppi", "Choose type of bed": "Valitse sänkytyyppi",
@@ -35,28 +42,35 @@
"Country": "Maa", "Country": "Maa",
"Country code": "Maatunnus", "Country code": "Maatunnus",
"Credit card deleted successfully": "Luottokortti poistettu onnistuneesti", "Credit card deleted successfully": "Luottokortti poistettu onnistuneesti",
"Your current level": "Nykyinen tasosi",
"Current password": "Nykyinen salasana", "Current password": "Nykyinen salasana",
"characters": "hahmoja",
"Date of Birth": "Syntymäaika", "Date of Birth": "Syntymäaika",
"Day": "Päivä", "Day": "Päivä",
"Description": "Kuvaus", "Description": "Kuvaus",
"Discard changes": "Hylkää muutokset", "Discard changes": "Hylkää muutokset",
"Do you want to start the day with Scandics famous breakfast buffé?": "Haluatko aloittaa päiväsi Scandicsin kuuluisalla aamiaisbuffella?", "Do you want to start the day with Scandics famous breakfast buffé?": "Haluatko aloittaa päiväsi Scandicsin kuuluisalla aamiaisbuffella?",
"Download the Scandic app": "Lataa Scandic-sovellus",
"Edit": "Muokata", "Edit": "Muokata",
"Edit profile": "Muokkaa profiilia", "Edit profile": "Muokkaa profiilia",
"Email": "Sähköposti", "Email": "Sähköposti",
"Extras to your booking": "Varauksessa lisäpalveluita",
"There are no transactions to display": "Näytettäviä tapahtumia ei ole",
"Explore all levels and benefits": "Tutustu kaikkiin tasoihin ja etuihin", "Explore all levels and benefits": "Tutustu kaikkiin tasoihin ja etuihin",
"Extras to your booking": "Varauksessa lisäpalveluita",
"Failed to delete credit card, please try again later.": "Luottokortin poistaminen epäonnistui, yritä myöhemmin uudelleen.", "Failed to delete credit card, please try again later.": "Luottokortin poistaminen epäonnistui, yritä myöhemmin uudelleen.",
"Find booking": "Etsi varaus", "Find booking": "Etsi varaus",
"Find hotels": "Etsi hotelleja",
"Flexibility": "Joustavuus", "Flexibility": "Joustavuus",
"Former Scandic Hotel": "Entinen Scandic-hotelli", "Former Scandic Hotel": "Entinen Scandic-hotelli",
"From": "From", "From": "From",
"from your member profile?": "jäsenprofiilistasi?", "from your member profile?": "jäsenprofiilistasi?",
"Get inspired": "Inspiroidu", "Get inspired": "Inspiroidu",
"Go back to overview": "Palaa yleiskatsaukseen", "Go back to overview": "Palaa yleiskatsaukseen",
"Highest level": "Korkein taso",
"Hotel facilities": "Hotellin palvelut",
"Hotel surroundings": "Hotellin ympäristö",
"How do you want to sleep?": "Kuinka haluat nukkua?",
"How it works": "Kuinka se toimii",
"Join Scandic Friends": "Liity jäseneksi",
"Language": "Kieli",
"Level": "Level",
"Level 1": "Taso 1", "Level 1": "Taso 1",
"Level 2": "Taso 2", "Level 2": "Taso 2",
"Level 3": "Taso 3", "Level 3": "Taso 3",
@@ -64,16 +78,11 @@
"Level 5": "Taso 5", "Level 5": "Taso 5",
"Level 6": "Taso 6", "Level 6": "Taso 6",
"Level 7": "Taso 7", "Level 7": "Taso 7",
"Highest level": "Korkein taso",
"How do you want to sleep?": "Kuinka haluat nukkua?",
"How it works": "Kuinka se toimii",
"Join Scandic Friends": "Liity jäseneksi",
"Language": "Kieli",
"Level": "Level",
"Level up to unlock": "Nouse seuraavalle tasolle ja avaat seuraavan edun", "Level up to unlock": "Nouse seuraavalle tasolle ja avaat seuraavan edun",
"Log in": "Kirjaudu sisään", "Log in": "Kirjaudu sisään",
"Log in here": "Kirjaudu sisään", "Log in here": "Kirjaudu sisään",
"Log out": "Kirjaudu ulos", "Log out": "Kirjaudu ulos",
"Manage preferences": "Asetusten hallinta",
"Meetings & Conferences": "Kokoukset & Konferenssit", "Meetings & Conferences": "Kokoukset & Konferenssit",
"Members": "Jäsenet", "Members": "Jäsenet",
"Membership cards": "Jäsenkortit", "Membership cards": "Jäsenkortit",
@@ -87,13 +96,13 @@
"New password": "Uusi salasana", "New password": "Uusi salasana",
"Next": "Seuraava", "Next": "Seuraava",
"next level:": "pistettä tasolle:", "next level:": "pistettä tasolle:",
"No content published": "Ei julkaistua sisältöä",
"No, keep card": "Ei, pidä kortti",
"No transactions available": "Ei tapahtumia saatavilla",
"Not found": "Ei löydetty",
"night": "yö", "night": "yö",
"nights": "yötä", "nights": "yötä",
"Nights needed to level up": "Yöt, joita tarvitaan tasolle", "Nights needed to level up": "Yöt, joita tarvitaan tasolle",
"No content published": "Ei julkaistua sisältöä",
"No transactions available": "Ei tapahtumia saatavilla",
"No, keep card": "Ei, pidä kortti",
"Not found": "Ei löydetty",
"number": "määrä", "number": "määrä",
"On your journey": "Matkallasi", "On your journey": "Matkallasi",
"Open": "Avata", "Open": "Avata",
@@ -111,14 +120,14 @@
"Points may take up to 10 days to be displayed.": "Pisteiden näyttäminen voi kestää jopa 10 päivää.", "Points may take up to 10 days to be displayed.": "Pisteiden näyttäminen voi kestää jopa 10 päivää.",
"Points needed to level up": "Tarvitset vielä", "Points needed to level up": "Tarvitset vielä",
"Points needed to stay on level": "Tällä tasolla pysymiseen tarvittavat pisteet", "Points needed to stay on level": "Tällä tasolla pysymiseen tarvittavat pisteet",
"spendable points expiring by": "{points} pistettä vanhenee {date} mennessä",
"Previous victories": "Edelliset voitot",
"Read more": "Lue lisää", "Read more": "Lue lisää",
"Read more about the hotel": "Lue lisää hotellista", "Read more about the hotel": "Lue lisää hotellista",
"Remove card from member profile": "Poista kortti jäsenprofiilista", "Remove card from member profile": "Poista kortti jäsenprofiilista",
"Restaurant & Bar": "Ravintola & Baari", "Restaurant & Bar": "Ravintola & Baari",
"Retype new password": "Kirjoita uusi salasana uudelleen", "Retype new password": "Kirjoita uusi salasana uudelleen",
"Room facilities": "Huoneen varustelu",
"Rooms": "Huoneet", "Rooms": "Huoneet",
"Rooms & Guestss": "Huoneet & Vieraat",
"Save": "Tallentaa", "Save": "Tallentaa",
"Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Mastercard": "Scandic Friends Mastercard",
"Scandic Friends Point Shop": "Scandic Friends Point Shop", "Scandic Friends Point Shop": "Scandic Friends Point Shop",
@@ -126,66 +135,58 @@
"Select country of residence": "Valitse asuinmaa", "Select country of residence": "Valitse asuinmaa",
"Select date of birth": "Valitse syntymäaika", "Select date of birth": "Valitse syntymäaika",
"Select language": "Valitse kieli", "Select language": "Valitse kieli",
"Show less": "Näytä vähemmän",
"Show more": "Näytä lisää",
"Show all amenities": "Näytä kaikki mukavuudet", "Show all amenities": "Näytä kaikki mukavuudet",
"Skip to main content": "Siirry pääsisältöön", "Show less": "Näytä vähemmän",
"Show map": "Näytä kartta",
"Show more": "Näytä lisää",
"Sign up bonus": "Liittymisbonus", "Sign up bonus": "Liittymisbonus",
"Something went wrong!": "Jotain meni pieleen!", "Skip to main content": "Siirry pääsisältöön",
"Something went wrong and we couldn't add your card. Please try again later.": "Jotain meni pieleen, emmekä voineet lisätä korttiasi. Yritä myöhemmin uudelleen.", "Something went wrong and we couldn't add your card. Please try again later.": "Jotain meni pieleen, emmekä voineet lisätä korttiasi. Yritä myöhemmin uudelleen.",
"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 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!",
"special character": "erikoishahmo",
"spendable points expiring by": "{points} pistettä vanhenee {date} mennessä",
"Street": "Katu", "Street": "Katu",
"Successfully updated profile!": "Profiilin päivitys onnistui!", "Successfully updated profile!": "Profiilin päivitys onnistui!",
"special character": "erikoishahmo", "Summary": "Yhteenveto",
"Tell us what information and updates you'd like to receive, and how, by clicking the link below.": "Kerro meille, mitä tietoja ja päivityksiä haluat saada ja miten, napsauttamalla alla olevaa linkkiä.",
"Thank you": "Kiitos",
"There are no transactions to display": "Näytettäviä tapahtumia ei ole",
"to": "to",
"Total Points": "Kokonaispisteet", "Total Points": "Kokonaispisteet",
"Your points to spend": "Käytettävissä olevat pisteesi",
"Transaction date": "Tapahtuman päivämäärä", "Transaction date": "Tapahtuman päivämäärä",
"Transactions": "Tapahtumat", "Transactions": "Tapahtumat",
"Tripadvisor reviews": "{rating} ({count} arvostelua TripAdvisorissa)", "Tripadvisor reviews": "{rating} ({count} arvostelua TripAdvisorissa)",
"to": "to",
"TUI Points": "TUI Points", "TUI Points": "TUI Points",
"User information": "Käyttäjän tiedot", "Type of bed": "Vuodetyyppi",
"Type of room": "Huonetyyppi",
"uppercase letter": "iso kirjain", "uppercase letter": "iso kirjain",
"Use bonus cheque": "Käytä bonussekkiä",
"User information": "Käyttäjän tiedot",
"View your booking": "Näytä varauksesi",
"Visiting address": "Käyntiosoite", "Visiting address": "Käyntiosoite",
"We could not add a card right now, please try again later.": "Emme voineet lisätä korttia juuri nyt. Yritä myöhemmin uudelleen.", "We could not add a card right now, please try again later.": "Emme voineet lisätä korttia juuri nyt. Yritä myöhemmin uudelleen.",
"We have sent a detailed confirmation of your booking to your email:": "Olemme lähettäneet yksityiskohtaisen varausvahvistuksen sähköpostiisi:",
"We look forward to your visit!": "Odotamme innolla vierailuasi!",
"Weekdays": "Arkisin",
"Weekends": "Viikonloppuisin",
"Welcome": "Tervetuloa", "Welcome": "Tervetuloa",
"Welcome to": "Tervetuloa", "Welcome to": "Tervetuloa",
"Wellness & Exercise": "Hyvinvointi & Liikunta", "Wellness & Exercise": "Hyvinvointi & Liikunta",
"When": "Kun",
"Where should you go next?": "Mihin menisit seuraavaksi?", "Where should you go next?": "Mihin menisit seuraavaksi?",
"Where to": "Minne",
"Which room class suits you the best?": "Mikä huoneluokka sopii sinulle parhaiten?", "Which room class suits you the best?": "Mikä huoneluokka sopii sinulle parhaiten?",
"Year": "Vuosi", "Year": "Vuosi",
"Yes, remove my card": "Kyllä, poista korttini", "Yes, remove my card": "Kyllä, poista korttini",
"You canceled adding a new credit card.": "Peruutit uuden luottokortin lisäämisen.",
"You have no previous stays.": "Sinulla ei ole aiempia majoituksia.", "You have no previous stays.": "Sinulla ei ole aiempia majoituksia.",
"You have no upcoming stays.": "Sinulla ei ole tulevia majoituksia.", "You have no upcoming stays.": "Sinulla ei ole tulevia majoituksia.",
"Your card was successfully removed!": "Korttisi poistettiin onnistuneesti!", "Your card was successfully removed!": "Korttisi poistettiin onnistuneesti!",
"Your card was successfully saved!": "Korttisi tallennettu onnistuneesti!", "Your card was successfully saved!": "Korttisi tallennettu onnistuneesti!",
"You canceled adding a new credit card.": "Peruutit uuden luottokortin lisäämisen.",
"Your Challenges Conquer & Earn!": "Voita ja ansaitse haasteesi!", "Your Challenges Conquer & Earn!": "Voita ja ansaitse haasteesi!",
"Your current level": "Nykyinen tasosi",
"Your level": "Tasosi", "Your level": "Tasosi",
"Zip code": "Postinumero", "Your points to spend": "Käytettävissä olevat pisteesi",
"Room facilities": "Huoneen varustelu", "Zip code": "Postinumero"
"Hotel facilities": "Hotellin palvelut",
"Hotel surroundings": "Hotellin ympäristö",
"Show map": "Näytä kartta",
"Check in": "Sisäänkirjautuminen",
"Check out": "Uloskirjautuminen",
"Summary": "Yhteenveto",
"Thank you": "Kiitos",
"We look forward to your visit!": "Odotamme innolla vierailuasi!",
"We have sent a detailed confirmation of your booking to your email:": "Olemme lähettäneet yksityiskohtaisen varausvahvistuksen sähköpostiisi:",
"Download the Scandic app": "Lataa Scandic-sovellus",
"View your booking": "Näytä varauksesi",
"At latest": "Viimeistään",
"Type of room": "Huonetyyppi",
"Type of bed": "Vuodetyyppi",
"Weekdays": "Arkisin",
"Weekends": "Viikonloppuisin",
"Where to": "Minne",
"When": "Kun",
"Rooms & Guestss": "Huoneet & Vieraat",
"Booking codes and vouchers": "Varauskoodit ja kupongit",
"Add code": "Lisää koodi",
"Use bonus cheque": "Käytä bonussekkiä",
"Book reward night": "Kirjapalkinto-ilta",
"Find hotels": "Etsi hotelleja"
} }

View File

@@ -1,6 +1,7 @@
{ {
"A photo of the room": "Et bilde av rommet", "A photo of the room": "Et bilde av rommet",
"Activities": "Aktiviteter", "Activities": "Aktiviteter",
"Add code": "Legg til kode",
"Add new card": "Legg til nytt kort", "Add new card": "Legg til nytt kort",
"Address": "Adresse", "Address": "Adresse",
"All our beds are from Bliss, allowing you to adjust the firmness for your perfect comfort.": "Alle sengene våre er fra Bliss, slik at du kan justere fastheten for din perfekte komfort.", "All our beds are from Bliss, allowing you to adjust the firmness for your perfect comfort.": "Alle sengene våre er fra Bliss, slik at du kan justere fastheten for din perfekte komfort.",
@@ -8,18 +9,24 @@
"Already a friend?": "Allerede Friend?", "Already a friend?": "Allerede Friend?",
"Amenities": "Fasiliteter", "Amenities": "Fasiliteter",
"An error occurred when adding a credit card, please try again later.": "Det oppstod en feil ved å legge til et kredittkort. Prøv igjen senere.", "An error occurred when adding a credit card, please try again later.": "Det oppstod en feil ved å legge til et kredittkort. Prøv igjen senere.",
"Are you sure you want to remove the card ending with": "Er du sikker på at du vil fjerne kortet som slutter på",
"An error occurred when trying to update profile.": "Det oppstod en feil under forsøk på å oppdatere profilen.", "An error occurred when trying to update profile.": "Det oppstod en feil under forsøk på å oppdatere profilen.",
"Are you sure you want to remove the card ending with": "Er du sikker på at du vil fjerne kortet som slutter på",
"Arrival date": "Ankomstdato", "Arrival date": "Ankomstdato",
"as of today": "per idag", "as of today": "per idag",
"As our": "Som vår {level}", "As our": "Som vår {level}",
"As our Close Friend": "Som vår nære venn", "As our Close Friend": "Som vår nære venn",
"At latest": "Senest",
"At the hotel": "På hotellet", "At the hotel": "På hotellet",
"Book": "Bestill", "Book": "Bestill",
"Book reward night": "Bestill belønningskveld",
"Booking codes and vouchers": "Bestillingskoder og kuponger",
"Booking number": "Bestillingsnummer", "Booking number": "Bestillingsnummer",
"Breakfast": "Frokost", "Breakfast": "Frokost",
"by": "innen", "by": "innen",
"Cancel": "Avbryt", "Cancel": "Avbryt",
"characters": "tegn",
"Check in": "Sjekk inn",
"Check out": "Sjekk ut",
"Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Sjekk ut kredittkortene som er lagret på profilen din. Betal med et lagret kort når du er pålogget for en jevnere nettopplevelse.", "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Sjekk ut kredittkortene som er lagret på profilen din. Betal med et lagret kort når du er pålogget for en jevnere nettopplevelse.",
"Choose room": "Velg rom", "Choose room": "Velg rom",
"Choose type of bed": "Velg type seng", "Choose type of bed": "Velg type seng",
@@ -34,29 +41,36 @@
"Could not find requested resource": "Kunne ikke finne den forespurte ressursen", "Could not find requested resource": "Kunne ikke finne den forespurte ressursen",
"Country": "Land", "Country": "Land",
"Country code": "Landskode", "Country code": "Landskode",
"Your current level": "Ditt nåværende nivå",
"Current password": "Nåværende passord",
"characters": "tegn",
"Credit card deleted successfully": "Kredittkort slettet", "Credit card deleted successfully": "Kredittkort slettet",
"Current password": "Nåværende passord",
"Date of Birth": "Fødselsdato", "Date of Birth": "Fødselsdato",
"Day": "Dag", "Day": "Dag",
"Description": "Beskrivelse", "Description": "Beskrivelse",
"Discard changes": "Forkaste endringer", "Discard changes": "Forkaste endringer",
"Do you want to start the day with Scandics famous breakfast buffé?": "Vil du starte dagen med Scandics berømte frokostbuffé?", "Do you want to start the day with Scandics famous breakfast buffé?": "Vil du starte dagen med Scandics berømte frokostbuffé?",
"Download the Scandic app": "Last ned Scandic-appen",
"Edit": "Redigere", "Edit": "Redigere",
"Edit profile": "Rediger profil", "Edit profile": "Rediger profil",
"Email": "E-post", "Email": "E-post",
"Extras to your booking": "Tilvalg til bestillingen din",
"There are no transactions to display": "Det er ingen transaksjoner å vise",
"Explore all levels and benefits": "Utforsk alle nivåer og fordeler", "Explore all levels and benefits": "Utforsk alle nivåer og fordeler",
"Extras to your booking": "Tilvalg til bestillingen din",
"Failed to delete credit card, please try again later.": "Kunne ikke slette kredittkortet, prøv igjen senere.", "Failed to delete credit card, please try again later.": "Kunne ikke slette kredittkortet, prøv igjen senere.",
"Find booking": "Finn booking", "Find booking": "Finn booking",
"Find hotels": "Finn hotell",
"Flexibility": "Fleksibilitet", "Flexibility": "Fleksibilitet",
"Former Scandic Hotel": "Tidligere Scandic-hotell", "Former Scandic Hotel": "Tidligere Scandic-hotell",
"From": "Fra", "From": "Fra",
"from your member profile?": "fra medlemsprofilen din?", "from your member profile?": "fra medlemsprofilen din?",
"Get inspired": "Bli inspirert", "Get inspired": "Bli inspirert",
"Go back to overview": "Gå tilbake til oversikten", "Go back to overview": "Gå tilbake til oversikten",
"Highest level": "Høyeste nivå",
"Hotel facilities": "Hotelfaciliteter",
"Hotel surroundings": "Hotellomgivelser",
"How do you want to sleep?": "Hvordan vil du sove?",
"How it works": "Hvordan det fungerer",
"Join Scandic Friends": "Bli med i Scandic Friends",
"Language": "Språk",
"Level": "Nivå",
"Level 1": "Nivå 1", "Level 1": "Nivå 1",
"Level 2": "Nivå 2", "Level 2": "Nivå 2",
"Level 3": "Nivå 3", "Level 3": "Nivå 3",
@@ -64,16 +78,11 @@
"Level 5": "Nivå 5", "Level 5": "Nivå 5",
"Level 6": "Nivå 6", "Level 6": "Nivå 6",
"Level 7": "Nivå 7", "Level 7": "Nivå 7",
"Highest level": "Høyeste nivå",
"How do you want to sleep?": "Hvordan vil du sove?",
"How it works": "Hvordan det fungerer",
"Join Scandic Friends": "Bli med i Scandic Friends",
"Language": "Språk",
"Level": "Nivå",
"Level up to unlock": "Nivå opp for å låse opp", "Level up to unlock": "Nivå opp for å låse opp",
"Log in": "Logg Inn", "Log in": "Logg Inn",
"Log in here": "Logg inn her", "Log in here": "Logg inn her",
"Log out": "Logg ut", "Log out": "Logg ut",
"Manage preferences": "Administrer preferanser",
"Meetings & Conferences": "Møter & Konferanser", "Meetings & Conferences": "Møter & Konferanser",
"Members": "Medlemmer", "Members": "Medlemmer",
"Membership cards": "Medlemskort", "Membership cards": "Medlemskort",
@@ -87,13 +96,13 @@
"New password": "Nytt passord", "New password": "Nytt passord",
"Next": "Neste", "Next": "Neste",
"next level:": "Neste nivå:", "next level:": "Neste nivå:",
"No content published": "Ingen innhold publisert",
"No, keep card": "Nei, behold kortet",
"No transactions available": "Ingen transaksjoner tilgjengelig",
"Not found": "Ikke funnet",
"night": "natt", "night": "natt",
"nights": "netter", "nights": "netter",
"Nights needed to level up": "Netter som trengs for å komme opp i nivå", "Nights needed to level up": "Netter som trengs for å komme opp i nivå",
"No content published": "Ingen innhold publisert",
"No transactions available": "Ingen transaksjoner tilgjengelig",
"No, keep card": "Nei, behold kortet",
"Not found": "Ikke funnet",
"number": "antall", "number": "antall",
"On your journey": "På reisen din", "On your journey": "På reisen din",
"Open": "Åpen", "Open": "Åpen",
@@ -111,14 +120,15 @@
"Points may take up to 10 days to be displayed.": "Det kan ta opptil 10 dager før poeng vises.", "Points may take up to 10 days to be displayed.": "Det kan ta opptil 10 dager før poeng vises.",
"Points needed to level up": "Poeng som trengs for å komme opp i nivå", "Points needed to level up": "Poeng som trengs for å komme opp i nivå",
"Points needed to stay on level": "Poeng som trengs for å holde seg på nivå", "Points needed to stay on level": "Poeng som trengs for å holde seg på nivå",
"spendable points expiring by": "{points} Brukbare poeng utløper innen {date}",
"Previous victories": "Tidligere seire", "Previous victories": "Tidligere seire",
"Read more": "Les mer", "Read more": "Les mer",
"Read more about the hotel": "Les mer om hotellet", "Read more about the hotel": "Les mer om hotellet",
"Remove card from member profile": "Fjern kortet fra medlemsprofilen", "Remove card from member profile": "Fjern kortet fra medlemsprofilen",
"Restaurant & Bar": "Restaurant & Bar", "Restaurant & Bar": "Restaurant & Bar",
"Retype new password": "Skriv inn nytt passord på nytt", "Retype new password": "Skriv inn nytt passord på nytt",
"Room facilities": "Romfasiliteter",
"Rooms": "Rom", "Rooms": "Rom",
"Rooms & Guests": "Rom og gjester",
"Save": "Lagre", "Save": "Lagre",
"Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Mastercard": "Scandic Friends Mastercard",
"Scandic Friends Point Shop": "Scandic Friends Point Shop", "Scandic Friends Point Shop": "Scandic Friends Point Shop",
@@ -126,66 +136,58 @@
"Select country of residence": "Velg bostedsland", "Select country of residence": "Velg bostedsland",
"Select date of birth": "Velg fødselsdato", "Select date of birth": "Velg fødselsdato",
"Select language": "Velg språk", "Select language": "Velg språk",
"Show less": "Vis mindre",
"Show more": "Vis mer",
"Show all amenities": "Vis alle fasiliteter", "Show all amenities": "Vis alle fasiliteter",
"Skip to main content": "Gå videre til hovedsiden", "Show less": "Vis mindre",
"Show map": "Vis kart",
"Show more": "Vis mer",
"Sign up bonus": "Velkomstbonus", "Sign up bonus": "Velkomstbonus",
"Something went wrong!": "Noe gikk galt!", "Skip to main content": "Gå videre til hovedsiden",
"Something went wrong and we couldn't add your card. Please try again later.": "Noe gikk galt, og vi kunne ikke legge til kortet ditt. Prøv igjen senere.", "Something went wrong and we couldn't add your card. Please try again later.": "Noe gikk galt, og vi kunne ikke legge til kortet ditt. Prøv igjen senere.",
"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 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!",
"special character": "spesiell karakter",
"spendable points expiring by": "{points} Brukbare poeng utløper innen {date}",
"Street": "Gate", "Street": "Gate",
"Successfully updated profile!": "Vellykket oppdatert profil!", "Successfully updated profile!": "Vellykket oppdatert profil!",
"special character": "spesiell karakter", "Summary": "Sammendrag",
"Tell us what information and updates you'd like to receive, and how, by clicking the link below.": "Fortell oss hvilken informasjon og hvilke oppdateringer du ønsker å motta, og hvordan, ved å klikke på lenken nedenfor.",
"Thank you": "Takk",
"There are no transactions to display": "Det er ingen transaksjoner å vise",
"to": "til",
"Total Points": "Totale poeng", "Total Points": "Totale poeng",
"Your points to spend": "Dine brukbare poeng",
"Transaction date": "Transaksjonsdato", "Transaction date": "Transaksjonsdato",
"Transactions": "Transaksjoner", "Transactions": "Transaksjoner",
"Tripadvisor reviews": "{rating} ({count} anmeldelser på Tripadvisor)", "Tripadvisor reviews": "{rating} ({count} anmeldelser på Tripadvisor)",
"to": "til",
"TUI Points": "TUI Points", "TUI Points": "TUI Points",
"User information": "Brukerinformasjon", "Type of bed": "Sengtype",
"Type of room": "Romtype",
"uppercase letter": "stor bokstav", "uppercase letter": "stor bokstav",
"Use bonus cheque": "Bruk bonussjekk",
"User information": "Brukerinformasjon",
"View your booking": "Se din bestilling",
"Visiting address": "Besøksadresse", "Visiting address": "Besøksadresse",
"We could not add a card right now, please try again later.": "Vi kunne ikke legge til et kort akkurat nå. Prøv igjen senere.", "We could not add a card right now, please try again later.": "Vi kunne ikke legge til et kort akkurat nå. Prøv igjen senere.",
"We have sent a detailed confirmation of your booking to your email:": "Vi har sendt en detaljert bekreftelse av din bestilling til din e-post:",
"We look forward to your visit!": "Vi ser frem til ditt besøk!",
"Weekdays": "Hverdager",
"Weekends": "Helger",
"Welcome": "Velkommen", "Welcome": "Velkommen",
"Welcome to": "Velkommen til", "Welcome to": "Velkommen til",
"Wellness & Exercise": "Velvære & Trening", "Wellness & Exercise": "Velvære & Trening",
"When": "Når",
"Where should you go next?": "Hvor ønsker du å reise neste gang?", "Where should you go next?": "Hvor ønsker du å reise neste gang?",
"Where to": "Hvor skal du",
"Which room class suits you the best?": "Hvilken romklasse passer deg best?", "Which room class suits you the best?": "Hvilken romklasse passer deg best?",
"Year": "År", "Year": "År",
"You canceled adding a new credit card.": "Du kansellerte å legge til et nytt kredittkort.",
"Yes, remove my card": "Ja, fjern kortet mitt", "Yes, remove my card": "Ja, fjern kortet mitt",
"You canceled adding a new credit card.": "Du kansellerte å legge til et nytt kredittkort.",
"You have no previous stays.": "Du har ingen tidligere opphold.", "You have no previous stays.": "Du har ingen tidligere opphold.",
"You have no upcoming stays.": "Du har ingen kommende opphold.", "You have no upcoming stays.": "Du har ingen kommende opphold.",
"Your card was successfully removed!": "Kortet ditt ble fjernet!", "Your card was successfully removed!": "Kortet ditt ble fjernet!",
"Your card was successfully saved!": "Kortet ditt ble lagret!", "Your card was successfully saved!": "Kortet ditt ble lagret!",
"Your Challenges Conquer & Earn!": "Dine utfordringer Erobre og tjen!", "Your Challenges Conquer & Earn!": "Dine utfordringer Erobre og tjen!",
"Your current level": "Ditt nåværende nivå",
"Your level": "Ditt nivå", "Your level": "Ditt nivå",
"Zip code": "Post kode", "Your points to spend": "Dine brukbare poeng",
"Room facilities": "Romfasiliteter", "Zip code": "Post kode"
"Hotel facilities": "Hotelfaciliteter",
"Hotel surroundings": "Hotellomgivelser",
"Show map": "Vis kart",
"Check in": "Sjekk inn",
"Check out": "Sjekk ut",
"Summary": "Sammendrag",
"Thank you": "Takk",
"We look forward to your visit!": "Vi ser frem til ditt besøk!",
"We have sent a detailed confirmation of your booking to your email:": "Vi har sendt en detaljert bekreftelse av din bestilling til din e-post:",
"Download the Scandic app": "Last ned Scandic-appen",
"View your booking": "Se din bestilling",
"At latest": "Senest",
"Type of room": "Romtype",
"Type of bed": "Sengtype",
"Weekdays": "Hverdager",
"Weekends": "Helger",
"Where to": "Hvor skal du",
"When": "Når",
"Rooms & Guests": "Rom og gjester",
"Booking codes and vouchers": "Bestillingskoder og kuponger",
"Add code": "Legg til kode",
"Use bonus cheque": "Bruk bonussjekk",
"Book reward night": "Bestill belønningskveld",
"Find hotels": "Finn hotell"
} }

View File

@@ -1,6 +1,7 @@
{ {
"A photo of the room": "Ett foto av rummet", "A photo of the room": "Ett foto av rummet",
"Activities": "Aktiviteter", "Activities": "Aktiviteter",
"Add code": "Lägg till kod",
"Add new card": "Lägg till nytt kort", "Add new card": "Lägg till nytt kort",
"Address": "Adress", "Address": "Adress",
"All our beds are from Bliss, allowing you to adjust the firmness for your perfect comfort.": "Alla våra sängar är från Bliss, med möjlighet att justera fastheten för perfekt komfort.", "All our beds are from Bliss, allowing you to adjust the firmness for your perfect comfort.": "Alla våra sängar är från Bliss, med möjlighet att justera fastheten för perfekt komfort.",
@@ -8,18 +9,24 @@
"Already a friend?": "Är du redan en vän?", "Already a friend?": "Är du redan en vän?",
"Amenities": "Bekvämligheter", "Amenities": "Bekvämligheter",
"An error occurred when adding a credit card, please try again later.": "Ett fel uppstod när ett kreditkort lades till, försök igen senare.", "An error occurred when adding a credit card, please try again later.": "Ett fel uppstod när ett kreditkort lades till, försök igen senare.",
"Are you sure you want to remove the card ending with": "Är du säker på att du vill ta bort kortet som slutar med",
"An error occurred when trying to update profile.": "Ett fel uppstod när du försökte uppdatera profilen.", "An error occurred when trying to update profile.": "Ett fel uppstod när du försökte uppdatera profilen.",
"Are you sure you want to remove the card ending with": "Är du säker på att du vill ta bort kortet som slutar med",
"Arrival date": "Ankomstdatum", "Arrival date": "Ankomstdatum",
"as of today": "från och med idag", "as of today": "från och med idag",
"As our": "Som vår {level}", "As our": "Som vår {level}",
"As our Close Friend": "Som vår nära vän", "As our Close Friend": "Som vår nära vän",
"At latest": "Senast",
"At the hotel": "På hotellet", "At the hotel": "På hotellet",
"Book": "Boka", "Book": "Boka",
"Book reward night": "Boka frinatt",
"Booking codes and vouchers": "Bokningskoder och kuponger",
"Booking number": "Bokningsnummer", "Booking number": "Bokningsnummer",
"Breakfast": "Frukost", "Breakfast": "Frukost",
"by": "innan", "by": "innan",
"Cancel": "Avbryt", "Cancel": "Avbryt",
"characters": "tecken",
"Check in": "Checka in",
"Check out": "Checka ut",
"Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Kolla in kreditkorten som sparats i din profil. Betala med ett sparat kort när du är inloggad för en smidigare webbupplevelse.", "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Kolla in kreditkorten som sparats i din profil. Betala med ett sparat kort när du är inloggad för en smidigare webbupplevelse.",
"Choose room": "Välj rum", "Choose room": "Välj rum",
"Choose type of bed": "Välj typ av säng", "Choose type of bed": "Välj typ av säng",
@@ -35,28 +42,37 @@
"Country": "Land", "Country": "Land",
"Country code": "Landskod", "Country code": "Landskod",
"Credit card deleted successfully": "Kreditkort har tagits bort", "Credit card deleted successfully": "Kreditkort har tagits bort",
"Your current level": "Din nuvarande nivå",
"Current password": "Nuvarande lösenord", "Current password": "Nuvarande lösenord",
"characters": "tecken",
"Date of Birth": "Födelsedatum", "Date of Birth": "Födelsedatum",
"Day": "Dag", "Day": "Dag",
"Description": "Beskrivning", "Description": "Beskrivning",
"Discard changes": "Ignorera ändringar", "Discard changes": "Ignorera ändringar",
"Do you want to start the day with Scandics famous breakfast buffé?": "Vill du starta dagen med Scandics berömda frukostbuffé?", "Do you want to start the day with Scandics famous breakfast buffé?": "Vill du starta dagen med Scandics berömda frukostbuffé?",
"Download the Scandic app": "Ladda ner Scandic-appen",
"Edit": "Redigera", "Edit": "Redigera",
"Edit profile": "Redigera profil", "Edit profile": "Redigera profil",
"Email": "E-post", "Email": "E-post",
"Extras to your booking": "Extra tillval till din bokning",
"There are no transactions to display": "Det finns inga transaktioner att visa",
"Explore all levels and benefits": "Utforska alla nivåer och fördelar", "Explore all levels and benefits": "Utforska alla nivåer och fördelar",
"Extras to your booking": "Extra tillval till din bokning",
"Failed to delete credit card, please try again later.": "Det gick inte att ta bort kreditkortet, försök igen senare.", "Failed to delete credit card, please try again later.": "Det gick inte att ta bort kreditkortet, försök igen senare.",
"Find booking": "Hitta bokning", "Find booking": "Hitta bokning",
"Find hotels": "Hitta hotell",
"Flexibility": "Flexibilitet", "Flexibility": "Flexibilitet",
"Former Scandic Hotel": "Tidigare Scandichotell", "Former Scandic Hotel": "Tidigare Scandichotell",
"From": "Från", "From": "Från",
"from your member profile?": "från din medlemsprofil?", "from your member profile?": "från din medlemsprofil?",
"Get inspired": "Bli inspirerad", "Get inspired": "Bli inspirerad",
"Go back to overview": "Gå tillbaka till översikten", "Go back to overview": "Gå tillbaka till översikten",
"Highest level": "Högsta nivå",
"Hotel facilities": "Hotellfaciliteter",
"Hotel surroundings": "Hotellomgivning",
"hotelPages.rooms.roomCard.person": "person",
"hotelPages.rooms.roomCard.persons": "personer",
"How do you want to sleep?": "Hur vill du sova?",
"How it works": "Hur det fungerar",
"Join Scandic Friends": "Gå med i Scandic Friends",
"Language": "Språk",
"Level": "Nivå",
"Level 1": "Nivå 1", "Level 1": "Nivå 1",
"Level 2": "Nivå 2", "Level 2": "Nivå 2",
"Level 3": "Nivå 3", "Level 3": "Nivå 3",
@@ -64,19 +80,11 @@
"Level 5": "Nivå 5", "Level 5": "Nivå 5",
"Level 6": "Nivå 6", "Level 6": "Nivå 6",
"Level 7": "Nivå 7", "Level 7": "Nivå 7",
"Highest level": "Högsta nivå",
"How do you want to sleep?": "Hur vill du sova?",
"How it works": "Hur det fungerar",
"hotelPages.rooms.roomCard.person": "person",
"hotelPages.rooms.roomCard.persons": "personer",
"See room details": "Se rumsdetaljer",
"Join Scandic Friends": "Gå med i Scandic Friends",
"Language": "Språk",
"Level": "Nivå",
"Level up to unlock": "Levla upp för att låsa upp", "Level up to unlock": "Levla upp för att låsa upp",
"Log in": "Logga in", "Log in": "Logga in",
"Log in here": "Logga in här", "Log in here": "Logga in här",
"Log out": "Logga ut", "Log out": "Logga ut",
"Manage preferences": "Hantera inställningar",
"Meetings & Conferences": "Möten & Konferenser", "Meetings & Conferences": "Möten & Konferenser",
"Members": "Medlemmar", "Members": "Medlemmar",
"Membership cards": "Medlemskort", "Membership cards": "Medlemskort",
@@ -90,13 +98,13 @@
"New password": "Nytt lösenord", "New password": "Nytt lösenord",
"Next": "Nästa", "Next": "Nästa",
"next level:": "Nästa nivå:", "next level:": "Nästa nivå:",
"No content published": "Inget innehåll publicerat",
"No, keep card": "Nej, behåll kortet",
"No transactions available": "Inga transaktioner tillgängliga",
"Not found": "Hittades inte",
"night": "natt", "night": "natt",
"nights": "nätter", "nights": "nätter",
"Nights needed to level up": "Nätter som behövs för att gå upp i nivå", "Nights needed to level up": "Nätter som behövs för att gå upp i nivå",
"No content published": "Inget innehåll publicerat",
"No transactions available": "Inga transaktioner tillgängliga",
"No, keep card": "Nej, behåll kortet",
"Not found": "Hittades inte",
"number": "nummer", "number": "nummer",
"On your journey": "På din resa", "On your journey": "På din resa",
"Open": "Öppna", "Open": "Öppna",
@@ -114,80 +122,73 @@
"Points may take up to 10 days to be displayed.": "Det kan ta upp till 10 dagar innan poäng visas.", "Points may take up to 10 days to be displayed.": "Det kan ta upp till 10 dagar innan poäng visas.",
"Points needed to level up": "Poäng som behövs för att gå upp i nivå", "Points needed to level up": "Poäng som behövs för att gå upp i nivå",
"Points needed to stay on level": "Poäng som behövs för att hålla sig på nivå", "Points needed to stay on level": "Poäng som behövs för att hålla sig på nivå",
"spendable points expiring by": "{points} poäng förfaller {date}",
"Previous victories": "Tidigare segrar", "Previous victories": "Tidigare segrar",
"Read more": "Läs mer", "Read more": "Läs mer",
"Read more about the hotel": "Läs mer om hotellet", "Read more about the hotel": "Läs mer om hotellet",
"Remove card from member profile": "Ta bort kortet från medlemsprofilen", "Remove card from member profile": "Ta bort kortet från medlemsprofilen",
"Restaurant & Bar": "Restaurang & Bar", "Restaurant & Bar": "Restaurang & Bar",
"Retype new password": "Upprepa nytt lösenord", "Retype new password": "Upprepa nytt lösenord",
"Room facilities": "Rumfaciliteter",
"Rooms": "Rum", "Rooms": "Rum",
"Rooms & Guests": "Rum och gäster",
"Save": "Spara", "Save": "Spara",
"Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Mastercard": "Scandic Friends Mastercard",
"Scandic Friends Point Shop": "Scandic Friends Point Shop", "Scandic Friends Point Shop": "Scandic Friends Point Shop",
"See room details": "Se rumsdetaljer",
"Select a country": "Välj ett land", "Select a country": "Välj ett land",
"Select country of residence": "Välj bosättningsland", "Select country of residence": "Välj bosättningsland",
"Select date of birth": "Välj födelsedatum", "Select date of birth": "Välj födelsedatum",
"Select language": "Välj språk", "Select language": "Välj språk",
"Show less": "Visa mindre",
"Show more": "Visa mer",
"Show all amenities": "Visa alla bekvämligheter", "Show all amenities": "Visa alla bekvämligheter",
"Skip to main content": "Fortsätt till huvudinnehåll", "Show less": "Visa mindre",
"Show map": "Visa karta",
"Show more": "Visa mer",
"Sign up bonus": "Välkomstbonus", "Sign up bonus": "Välkomstbonus",
"Something went wrong!": "Något gick fel!", "Skip to main content": "Fortsätt till huvudinnehåll",
"Something went wrong and we couldn't add your card. Please try again later.": "Något gick fel och vi kunde inte lägga till ditt kort. Försök igen senare.", "Something went wrong and we couldn't add your card. Please try again later.": "Något gick fel och vi kunde inte lägga till ditt kort. Försök igen senare.",
"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 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!",
"special character": "speciell karaktär",
"spendable points expiring by": "{points} poäng förfaller {date}",
"Street": "Gata", "Street": "Gata",
"Successfully updated profile!": "Profilen har uppdaterats framgångsrikt!", "Successfully updated profile!": "Profilen har uppdaterats framgångsrikt!",
"special character": "speciell karaktär", "Summary": "Sammanfattning",
"Tell us what information and updates you'd like to receive, and how, by clicking the link below.": "Berätta för oss vilken information och vilka uppdateringar du vill få och hur genom att klicka på länken nedan.",
"Thank you": "Tack",
"There are no transactions to display": "Det finns inga transaktioner att visa",
"to": "till",
"Total Points": "Poäng totalt", "Total Points": "Poäng totalt",
"Your points to spend": "Poäng att använda",
"Transaction date": "Transaktionsdatum",
"Transactions": "Transaktioner", "Transactions": "Transaktioner",
"Tripadvisor reviews": "{rating} ({count} recensioner på Tripadvisor)", "Tripadvisor reviews": "{rating} ({count} recensioner på Tripadvisor)",
"to": "till",
"TUI Points": "TUI Points", "TUI Points": "TUI Points",
"User information": "Användar information", "Type of bed": "Sängtyp",
"Type of room": "Rumstyp",
"uppercase letter": "stor bokstav", "uppercase letter": "stor bokstav",
"Use bonus cheque": "Use bonus cheque",
"User information": "Användar information",
"View your booking": "Visa din bokning",
"Visiting address": "Besöksadress", "Visiting address": "Besöksadress",
"We could not add a card right now, please try again later.": "Vi kunde inte lägga till ett kort just nu, vänligen försök igen senare.", "We could not add a card right now, please try again later.": "Vi kunde inte lägga till ett kort just nu, vänligen försök igen senare.",
"We have sent a detailed confirmation of your booking to your email:": "Vi har skickat en detaljerad bekräftelse av din bokning till din e-post:",
"We look forward to your visit!": "Vi ser fram emot ditt besök!",
"Weekdays": "Vardagar",
"Weekends": "Helger",
"Welcome": "Välkommen", "Welcome": "Välkommen",
"Wellness & Exercise": "Hälsa & Träning", "Wellness & Exercise": "Hälsa & Träning",
"When": "När",
"Where should you go next?": "Låter inte en spontanweekend härligt?", "Where should you go next?": "Låter inte en spontanweekend härligt?",
"Where to": "Vart",
"Which room class suits you the best?": "Vilken rumsklass passar dig bäst?", "Which room class suits you the best?": "Vilken rumsklass passar dig bäst?",
"Year": "År", "Year": "År",
"You canceled adding a new credit card.": "Du avbröt att lägga till ett nytt kreditkort.",
"Yes, remove my card": "Ja, ta bort mitt kort", "Yes, remove my card": "Ja, ta bort mitt kort",
"You canceled adding a new credit card.": "Du avbröt att lägga till ett nytt kreditkort.",
"You have no previous stays.": "Du har inga tidigare vistelser.", "You have no previous stays.": "Du har inga tidigare vistelser.",
"You have no upcoming stays.": "Du har inga planerade resor.", "You have no upcoming stays.": "Du har inga planerade resor.",
"Your card was successfully removed!": "Ditt kort har tagits bort!", "Your card was successfully removed!": "Ditt kort har tagits bort!",
"Your card was successfully saved!": "Ditt kort har sparats!", "Your card was successfully saved!": "Ditt kort har sparats!",
"Your Challenges Conquer & Earn!": "Dina utmaningar Erövra och tjäna!", "Your Challenges Conquer & Earn!": "Dina utmaningar Erövra och tjäna!",
"Your current level": "Din nuvarande nivå",
"Your level": "Din nivå", "Your level": "Din nivå",
"Zip code": "Postnummer", "Your points to spend": "Dina spenderbara poäng",
"Room facilities": "Rumfaciliteter", "Zip code": "Postnummer"
"Hotel facilities": "Hotellfaciliteter",
"Hotel surroundings": "Hotellomgivning",
"Show map": "Visa karta",
"Check in": "Checka in",
"Check out": "Checka ut",
"Summary": "Sammanfattning",
"Thank you": "Tack",
"We look forward to your visit!": "Vi ser fram emot ditt besök!",
"We have sent a detailed confirmation of your booking to your email:": "Vi har skickat en detaljerad bekräftelse av din bokning till din e-post:",
"Download the Scandic app": "Ladda ner Scandic-appen",
"View your booking": "Visa din bokning",
"At latest": "Senast",
"Type of room": "Rumstyp",
"Type of bed": "Sängtyp",
"Weekdays": "Vardagar",
"Weekends": "Helger",
"Where to": "Vart",
"When": "När",
"Rooms & Guests": "Rum och gäster",
"Booking codes and vouchers": "Bokningskoder och kuponger",
"Add code": "Add code",
"Use bonus cheque": "Use bonus cheque",
"Book reward night": "Book reward night",
"Find hotels": "Hitta hotell"
} }

View File

@@ -1,20 +0,0 @@
#import "../Image.graphql"
fragment LoyaltyPageMetaData on LoyaltyPage {
web {
seo_metadata {
title
description
imageConnection {
edges {
node {
...Image
}
}
}
}
breadcrumbs {
title
}
}
}

View File

@@ -1,20 +0,0 @@
#import "../Image.graphql"
fragment MyPagesMetaData on AccountPage {
web {
seo_metadata {
title
description
imageConnection {
edges {
node {
...Image
}
}
}
}
breadcrumbs {
title
}
}
}

View File

@@ -1,12 +1,25 @@
#import "../Fragments/LoyaltyPage/MetaData.graphql" #import "../Fragments/Image.graphql"
query GetLoyaltyPageMetaData($locale: String!, $url: String!) { query GetLoyaltyPageMetaData($locale: String!, $uid: String!) {
all_loyalty_page(locale: $locale, where: { url: $url }) { loyalty_page(locale: $locale, uid: $uid) {
items {
...LoyaltyPageMetaData
system { system {
uid uid
} }
web {
seo_metadata {
description
title
imageConnection {
edges {
node {
...Image
}
}
}
}
breadcrumbs {
title
}
} }
} }
} }

View File

@@ -1,12 +1,25 @@
#import "../Fragments/MyPages/MetaData.graphql" #import "../Fragments/Image.graphql"
query GetMyPagesMetaData($locale: String!, $url: String!) { query GetMyPagesMetaData($locale: String!, $uid: String!) {
all_account_page(locale: $locale, where: { url: $url }) { account_page(locale: $locale, uid: $uid) {
items {
...MyPagesMetaData
system { system {
uid uid
} }
web {
breadcrumbs {
title
}
seo_metadata {
description
title
imageConnection {
edges {
node {
...Image
}
}
}
}
} }
} }
} }

View File

@@ -12,11 +12,17 @@ export async function request<T>(
client: GraphQLClient, client: GraphQLClient,
query: string | DocumentNode, query: string | DocumentNode,
variables?: {}, variables?: {},
next?: NextFetchRequestConfig params?: RequestInit
): Promise<Data<T>> { ): Promise<Data<T>> {
try { try {
if (next) { if (params?.cache) {
client.requestConfig.next = next client.requestConfig.cache = params.cache
}
if (params?.headers) {
client.requestConfig.headers = params.headers
}
if (params?.next) {
client.requestConfig.next = params.next
} }
if (env.PRINT_QUERY) { if (env.PRINT_QUERY) {

View File

@@ -7,12 +7,12 @@ import type { BatchRequestDocument } from "graphql-request"
import type { Data } from "@/types/request" import type { Data } from "@/types/request"
export async function batchRequest<T>( export async function batchRequest<T>(
queries: (BatchRequestDocument & NextFetchRequestConfig)[] queries: (BatchRequestDocument & { options?: RequestInit })[]
): Promise<Data<T>> { ): Promise<Data<T>> {
try { try {
const response = await Promise.allSettled( const response = await Promise.allSettled(
queries.map((query) => queries.map((query) =>
request<T>(query.document, query.variables, { tags: query.tags }) request<T>(query.document, query.variables, query.options)
) )
) )

View File

@@ -14,7 +14,7 @@ const client = new GraphQLClient(env.CMS_URL, {
export async function edgeRequest<T>( export async function edgeRequest<T>(
query: string | DocumentNode, query: string | DocumentNode,
variables?: {}, variables?: {},
next?: NextFetchRequestConfig params?: RequestInit
): Promise<Data<T>> { ): Promise<Data<T>> {
return _request(client, query, variables, next) return _request(client, query, variables, params)
} }

View File

@@ -14,20 +14,20 @@ const client = new GraphQLClient(env.CMS_URL, {
url: URL | RequestInfo, url: URL | RequestInfo,
params: RequestInit | undefined params: RequestInit | undefined
) { ) {
const fetch = fetchRetry(global.fetch, { const wrappedFetch = fetchRetry(global.fetch, {
retries: 3, retries: 3,
retryDelay: function (attempt, error, response) { retryDelay: function (attempt, error, response) {
return Math.pow(2, attempt) * 150 // 150, 300, 600 return Math.pow(2, attempt) * 150 // 150, 300, 600
}, },
}) })
return fetch(url, params) return wrappedFetch(url, params)
}), }),
}) })
export async function request<T>( export async function request<T>(
query: string | DocumentNode, query: string | DocumentNode,
variables?: {}, variables?: {},
next?: NextFetchRequestConfig params?: RequestInit
): Promise<Data<T>> { ): Promise<Data<T>> {
return _request(client, query, variables, next) return _request(client, query, variables, params)
} }

View File

@@ -4,12 +4,19 @@ import { hotelReservation } from "@/constants/routes/hotelReservation"
import { findLang } from "@/utils/languages" import { findLang } from "@/utils/languages"
import { getDefaultRequestHeaders } from "./utils"
import type { NextMiddleware } from "next/server" import type { NextMiddleware } from "next/server"
import type { MiddlewareMatcher } from "@/types/middleware" import type { MiddlewareMatcher } from "@/types/middleware"
export const middleware: NextMiddleware = () => { export const middleware: NextMiddleware = (request) => {
return NextResponse.next() const headers = getDefaultRequestHeaders(request)
return NextResponse.next({
request: {
headers,
},
})
} }
export const matcher: MiddlewareMatcher = (request) => { export const matcher: MiddlewareMatcher = (request) => {

View File

@@ -71,7 +71,10 @@ export const accountPageQueryRouter = router({
uid, uid,
}, },
{ {
cache: "force-cache",
next: {
tags: [generateRefsResponseTag(lang, uid)], tags: [generateRefsResponseTag(lang, uid)],
},
} }
) )
@@ -132,7 +135,12 @@ export const accountPageQueryRouter = router({
locale: lang, locale: lang,
uid, uid,
}, },
{ tags } {
cache: "force-cache",
next: {
tags,
},
}
) )
if (!response.data) { if (!response.data) {

View File

@@ -13,7 +13,11 @@ import { request } from "@/lib/graphql/request"
import { notFound } from "@/server/errors/trpc" import { notFound } from "@/server/errors/trpc"
import { contentstackBaseProcedure, router } from "@/server/trpc" import { contentstackBaseProcedure, router } from "@/server/trpc"
import { generateTag } from "@/utils/generateTag" import {
generateRefsResponseTag,
generateRefTag,
generateTag,
} from "@/utils/generateTag"
import { langInput } from "./input" import { langInput } from "./input"
import { import {
@@ -82,9 +86,18 @@ export const baseQueryRouter = router({
"contentstack.contactConfig start", "contentstack.contactConfig start",
JSON.stringify({ query: { lang } }) JSON.stringify({ query: { lang } })
) )
const response = await request<ContactConfigData>(GetContactConfig, { const response = await request<ContactConfigData>(
GetContactConfig,
{
locale: lang, locale: lang,
}) },
{
cache: "force-cache",
next: {
tags: [`${lang}:contact`],
},
}
)
if (!response.data) { if (!response.data) {
const notFoundError = notFound(response) const notFoundError = notFound(response)
@@ -137,9 +150,18 @@ export const baseQueryRouter = router({
"contentstack.header.ref start", "contentstack.header.ref start",
JSON.stringify({ query: { lang: input.lang } }) JSON.stringify({ query: { lang: input.lang } })
) )
const responseRef = await request<HeaderRefDataRaw>(GetCurrentHeaderRef, { const responseRef = await request<HeaderRefDataRaw>(
GetCurrentHeaderRef,
{
locale: input.lang, locale: input.lang,
}) },
{
cache: "force-cache",
next: {
tags: [generateRefsResponseTag(input.lang, "current_header")],
},
}
)
getHeaderCounter.add(1, { lang: input.lang }) getHeaderCounter.add(1, { lang: input.lang })
console.info( console.info(
"contentstack.header start", "contentstack.header start",
@@ -148,17 +170,17 @@ export const baseQueryRouter = router({
}) })
) )
const currentHeaderUID =
responseRef.data.all_current_header.items[0].system.uid
// There's currently no error handling/validation for the responseRef, should it be added? // There's currently no error handling/validation for the responseRef, should it be added?
const response = await request<HeaderDataRaw>( const response = await request<HeaderDataRaw>(
GetCurrentHeader, GetCurrentHeader,
{ locale: input.lang }, { locale: input.lang },
{ {
tags: [ cache: "force-cache",
generateTag( next: {
input.lang, tags: [generateTag(input.lang, currentHeaderUID)],
responseRef.data.all_current_header.items[0].system.uid },
),
],
} }
) )
@@ -226,9 +248,18 @@ export const baseQueryRouter = router({
"contentstack.footer.ref start", "contentstack.footer.ref start",
JSON.stringify({ query: { lang: input.lang } }) JSON.stringify({ query: { lang: input.lang } })
) )
const responseRef = await request<FooterRefDataRaw>(GetCurrentFooterRef, { const responseRef = await request<FooterRefDataRaw>(
GetCurrentFooterRef,
{
locale: input.lang, locale: input.lang,
}) },
{
cache: "force-cache",
next: {
tags: [generateRefsResponseTag(input.lang, "current_footer")],
},
}
)
// There's currently no error handling/validation for the responseRef, should it be added? // There's currently no error handling/validation for the responseRef, should it be added?
getFooterCounter.add(1, { lang: input.lang }) getFooterCounter.add(1, { lang: input.lang })
console.info( console.info(
@@ -239,18 +270,18 @@ export const baseQueryRouter = router({
}, },
}) })
) )
const currentFooterUID =
responseRef.data.all_current_footer.items[0].system.uid
const response = await request<FooterDataRaw>( const response = await request<FooterDataRaw>(
GetCurrentFooter, GetCurrentFooter,
{ {
locale: input.lang, locale: input.lang,
}, },
{ {
tags: [ cache: "force-cache",
generateTag( next: {
input.lang, tags: [generateTag(input.lang, currentFooterUID)],
responseRef.data.all_current_footer.items[0].system.uid },
),
],
} }
) )

View File

@@ -68,7 +68,10 @@ export type Variables = {
export async function getRefsResponse<T>(query: string, variables: Variables) { export async function getRefsResponse<T>(query: string, variables: Variables) {
const refsResponse = await request<T>(query, variables, { const refsResponse = await request<T>(query, variables, {
cache: "force-cache",
next: {
tags: [generateRefsResponseTag(variables.locale, variables.url, affix)], tags: [generateRefsResponseTag(variables.locale, variables.url, affix)],
},
}) })
if (!refsResponse.data) { if (!refsResponse.data) {
throw notFound(refsResponse) throw notFound(refsResponse)
@@ -89,7 +92,10 @@ export async function getResponse<T>(
variables: Variables, variables: Variables,
tags: string[] tags: string[]
) { ) {
const response = await request<T>(query, variables, { tags }) const response = await request<T>(query, variables, {
cache: "force-cache",
next: { tags },
})
if (!response.data) { if (!response.data) {
throw notFound(response) throw notFound(response)
} }

View File

@@ -31,7 +31,12 @@ export const contentPageQueryRouter = router({
locale: lang, locale: lang,
uid, uid,
}, },
{ tags: [generateTag(lang, uid)] } {
cache: "force-cache",
next: {
tags: [generateTag(lang, uid)],
},
}
) )
if (!response.data) { if (!response.data) {

View File

@@ -3,7 +3,9 @@ import { metrics } from "@opentelemetry/api"
import { GetHotelPage } from "@/lib/graphql/Query/HotelPage.graphql" import { GetHotelPage } from "@/lib/graphql/Query/HotelPage.graphql"
import { request } from "@/lib/graphql/request" import { request } from "@/lib/graphql/request"
import { notFound } from "@/server/errors/trpc" import { notFound } from "@/server/errors/trpc"
import { contentstackBaseProcedure, router } from "@/server/trpc" import { contentstackExtendedProcedureUID, router } from "@/server/trpc"
import { generateTag } from "@/utils/generateTag"
import { HotelPage, HotelPageDataRaw, validateHotelPageSchema } from "./output" import { HotelPage, HotelPageDataRaw, validateHotelPageSchema } from "./output"
@@ -20,7 +22,7 @@ const getHotelPageFailCounter = meter.createCounter(
) )
export const hotelPageQueryRouter = router({ export const hotelPageQueryRouter = router({
get: contentstackBaseProcedure.query(async ({ ctx }) => { get: contentstackExtendedProcedureUID.query(async ({ ctx }) => {
const { lang, uid } = ctx const { lang, uid } = ctx
getHotelPageCounter.add(1, { lang, uid: `${uid}` }) getHotelPageCounter.add(1, { lang, uid: `${uid}` })
console.info( console.info(
@@ -29,10 +31,19 @@ export const hotelPageQueryRouter = router({
query: { lang, uid }, query: { lang, uid },
}) })
) )
const response = await request<HotelPageDataRaw>(GetHotelPage, { const response = await request<HotelPageDataRaw>(
GetHotelPage,
{
locale: lang, locale: lang,
uid, uid,
}) },
{
cache: "force-cache",
next: {
tags: [generateTag(lang, uid)],
},
}
)
if (!response.data) { if (!response.data) {
const notFoundError = notFound(response) const notFoundError = notFound(response)
getHotelPageFailCounter.add(1, { getHotelPageFailCounter.add(1, {

View File

@@ -71,65 +71,115 @@ async function getLanguageSwitcher(options: LanguageSwitcherVariables) {
{ {
document: GetDaDeEnUrlsAccountPage, document: GetDaDeEnUrlsAccountPage,
variables, variables,
options: {
cache: "force-cache",
next: {
tags: tagsDaDeEn, tags: tagsDaDeEn,
}, },
},
},
{ {
document: GetFiNoSvUrlsAccountPage, document: GetFiNoSvUrlsAccountPage,
variables, variables,
options: {
cache: "force-cache",
next: {
tags: tagsFiNoSv, tags: tagsFiNoSv,
}, },
},
},
]) ])
case PageTypeEnum.currentBlocksPage: case PageTypeEnum.currentBlocksPage:
return await batchRequest<LanguageSwitcherQueryDataRaw>([ return await batchRequest<LanguageSwitcherQueryDataRaw>([
{ {
document: GetDaDeEnUrlsCurrentBlocksPage, document: GetDaDeEnUrlsCurrentBlocksPage,
variables, variables,
options: {
cache: "force-cache",
next: {
tags: tagsDaDeEn, tags: tagsDaDeEn,
}, },
},
},
{ {
document: GetFiNoSvUrlsCurrentBlocksPage, document: GetFiNoSvUrlsCurrentBlocksPage,
variables, variables,
options: {
cache: "force-cache",
next: {
tags: tagsFiNoSv, tags: tagsFiNoSv,
}, },
},
},
]) ])
case PageTypeEnum.loyaltyPage: case PageTypeEnum.loyaltyPage:
return await batchRequest<LanguageSwitcherQueryDataRaw>([ return await batchRequest<LanguageSwitcherQueryDataRaw>([
{ {
document: GetDaDeEnUrlsLoyaltyPage, document: GetDaDeEnUrlsLoyaltyPage,
variables, variables,
options: {
cache: "force-cache",
next: {
tags: tagsDaDeEn, tags: tagsDaDeEn,
}, },
},
},
{ {
document: GetFiNoSvUrlsLoyaltyPage, document: GetFiNoSvUrlsLoyaltyPage,
variables, variables,
options: {
cache: "force-cache",
next: {
tags: tagsFiNoSv, tags: tagsFiNoSv,
}, },
},
},
]) ])
case PageTypeEnum.hotelPage: case PageTypeEnum.hotelPage:
return await batchRequest<LanguageSwitcherQueryDataRaw>([ return await batchRequest<LanguageSwitcherQueryDataRaw>([
{ {
document: GetDaDeEnUrlsHotelPage, document: GetDaDeEnUrlsHotelPage,
variables, variables,
options: {
cache: "force-cache",
next: {
tags: tagsDaDeEn, tags: tagsDaDeEn,
}, },
},
},
{ {
document: GetFiNoSvUrlsHotelPage, document: GetFiNoSvUrlsHotelPage,
variables, variables,
options: {
cache: "force-cache",
next: {
tags: tagsFiNoSv, tags: tagsFiNoSv,
}, },
},
},
]) ])
case PageTypeEnum.contentPage: case PageTypeEnum.contentPage:
return await batchRequest<LanguageSwitcherQueryDataRaw>([ return await batchRequest<LanguageSwitcherQueryDataRaw>([
{ {
document: GetDaDeEnUrlsContentPage, document: GetDaDeEnUrlsContentPage,
variables, variables,
options: {
cache: "force-cache",
next: {
tags: tagsDaDeEn, tags: tagsDaDeEn,
}, },
},
},
{ {
document: GetFiNoSvUrlsContentPage, document: GetFiNoSvUrlsContentPage,
variables, variables,
options: {
cache: "force-cache",
next: {
tags: tagsFiNoSv, tags: tagsFiNoSv,
}, },
},
},
]) ])
default: default:

View File

@@ -73,7 +73,10 @@ export const loyaltyPageQueryRouter = router({
uid, uid,
}, },
{ {
cache: "force-cache",
next: {
tags: [generateRefsResponseTag(lang, uid)], tags: [generateRefsResponseTag(lang, uid)],
},
} }
) )
@@ -146,7 +149,12 @@ export const loyaltyPageQueryRouter = router({
locale: lang, locale: lang,
uid, uid,
}, },
{ tags } {
cache: "force-cache",
next: {
tags,
},
}
) )
if (!response.data) { if (!response.data) {

View File

@@ -45,12 +45,8 @@ const page = z.object({
export type Page = z.infer<typeof page> export type Page = z.infer<typeof page>
const metaDataItems = z.object({
items: z.array(page),
})
export const validateMyPagesMetaDataContentstackSchema = z.object({ export const validateMyPagesMetaDataContentstackSchema = z.object({
all_account_page: metaDataItems, account_page: page,
}) })
export type GetMyPagesMetaDataData = z.infer< export type GetMyPagesMetaDataData = z.infer<
@@ -58,7 +54,7 @@ export type GetMyPagesMetaDataData = z.infer<
> >
export const validateLoyaltyPageMetaDataContentstackSchema = z.object({ export const validateLoyaltyPageMetaDataContentstackSchema = z.object({
all_loyalty_page: metaDataItems, loyalty_page: page,
}) })
export type GetLoyaltyPageMetaDataData = z.infer< export type GetLoyaltyPageMetaDataData = z.infer<

View File

@@ -1,6 +1,6 @@
import { GetLoyaltyPageMetaData } from "@/lib/graphql/Query/MetaDataLoyaltyPage.graphql" import { GetLoyaltyPageMetaData } from "@/lib/graphql/Query/MetaDataLoyaltyPage.graphql"
import { GetMyPagesMetaData } from "@/lib/graphql/Query/MetaDataMyPages.graphql" import { GetMyPagesMetaData } from "@/lib/graphql/Query/MetaDataMyPages.graphql"
import { contentstackBaseProcedure, router } from "@/server/trpc" import { contentstackExtendedProcedureUID, router } from "@/server/trpc"
import { import {
type GetLoyaltyPageMetaDataData, type GetLoyaltyPageMetaDataData,
@@ -8,7 +8,7 @@ import {
validateLoyaltyPageMetaDataContentstackSchema, validateLoyaltyPageMetaDataContentstackSchema,
validateMyPagesMetaDataContentstackSchema, validateMyPagesMetaDataContentstackSchema,
} from "./output" } from "./output"
import { getMetaData, getResponse, Variables } from "./utils" import { getMetaData, getResponse, type Variables } from "./utils"
import { PageTypeEnum } from "@/types/requests/pageType" import { PageTypeEnum } from "@/types/requests/pageType"
@@ -23,13 +23,13 @@ async function getLoyaltyPageMetaData(variables: Variables) {
if (!validatedMetaDataData.success) { if (!validatedMetaDataData.success) {
console.error( console.error(
`Failed to validate Loyaltypage MetaData Data - (url: ${variables.url})` `Failed to validate Loyaltypage MetaData Data - (uid: ${variables.uid})`
) )
console.error(validatedMetaDataData.error) console.error(validatedMetaDataData.error)
return null return null
} }
return getMetaData(validatedMetaDataData.data.all_loyalty_page.items[0]) return getMetaData(validatedMetaDataData.data.loyalty_page)
} }
async function getMyPagesMetaData(variables: Variables) { async function getMyPagesMetaData(variables: Variables) {
@@ -43,24 +43,20 @@ async function getMyPagesMetaData(variables: Variables) {
if (!validatedMetaDataData.success) { if (!validatedMetaDataData.success) {
console.error( console.error(
`Failed to validate My Page MetaData Data - (url: ${variables.url})` `Failed to validate My Page MetaData Data - (uid: ${variables.uid})`
) )
console.error(validatedMetaDataData.error) console.error(validatedMetaDataData.error)
return null return null
} }
return getMetaData(validatedMetaDataData.data.all_account_page.items[0]) return getMetaData(validatedMetaDataData.data.account_page)
} }
export const metaDataQueryRouter = router({ export const metaDataQueryRouter = router({
get: contentstackBaseProcedure.query(async ({ ctx }) => { get: contentstackExtendedProcedureUID.query(async ({ ctx }) => {
if (!ctx.uid) {
return []
}
const variables = { const variables = {
locale: ctx.lang, locale: ctx.lang,
url: ctx.pathname, uid: ctx.uid,
} }
switch (ctx.contentType) { switch (ctx.contentType) {
@@ -69,7 +65,7 @@ export const metaDataQueryRouter = router({
case PageTypeEnum.loyaltyPage: case PageTypeEnum.loyaltyPage:
return await getLoyaltyPageMetaData(variables) return await getLoyaltyPageMetaData(variables)
default: default:
return [] return null
} }
}), }),
}) })

View File

@@ -2,15 +2,22 @@ import { Lang } from "@/constants/languages"
import { request } from "@/lib/graphql/request" import { request } from "@/lib/graphql/request"
import { internalServerError, notFound } from "@/server/errors/trpc" import { internalServerError, notFound } from "@/server/errors/trpc"
import { generateTag } from "@/utils/generateTag"
import { getMetaDataSchema, Page } from "./output" import { getMetaDataSchema, Page } from "./output"
export type Variables = { export type Variables = {
locale: Lang locale: Lang
url: string uid: string
} }
export async function getResponse<T>(query: string, variables: Variables) { export async function getResponse<T>(query: string, variables: Variables) {
const response = await request<T>(query, variables) const response = await request<T>(query, variables, {
cache: "force-cache",
next: {
tags: [generateTag(variables.locale, variables.uid)],
},
})
if (!response.data) { if (!response.data) {
throw notFound(response) throw notFound(response)
} }

View File

@@ -13,19 +13,15 @@ import {
generateTag, generateTag,
generateTags, generateTags,
} from "@/utils/generateTag" } from "@/utils/generateTag"
import { removeMultipleSlashes } from "@/utils/url"
import { import {
type GetNavigationMyPagesData, type GetNavigationMyPagesData,
type GetNavigationMyPagesRefsData, type GetNavigationMyPagesRefsData,
getNavigationSchema, getNavigationSchema,
type MenuItems,
navigationPayloadSchema, navigationPayloadSchema,
navigationRefsPayloadSchema, navigationRefsPayloadSchema,
} from "./output" } from "./output"
import { getConnections } from "./utils" import { getConnections, mapMenuItems } from "./utils"
import { PageLinkEnum } from "@/types/requests/pageLinks"
const meter = metrics.getMeter("trpc.navigationMyPages") const meter = metrics.getMeter("trpc.navigationMyPages")
const getNavigationMyPagesRefsCounter = meter.createCounter( const getNavigationMyPagesRefsCounter = meter.createCounter(
@@ -47,39 +43,6 @@ const getNavigationMyPagesFailCounter = meter.createCounter(
"trpc.contentstack.navigationMyPages.get-fail" "trpc.contentstack.navigationMyPages.get-fail"
) )
export function mapMenuItems(menuItems: MenuItems) {
return menuItems.map((menuItem) => {
return {
...menuItem,
links: menuItem.links
.filter((link) => {
// If content is unpublished or in other way inaccessible in Contentstack
// there will be no edges, filter out those links.
return !!link.page.edges[0]
})
.map((link) => {
const page = link.page.edges[0].node
let originalUrl = undefined
if (
page.__typename === PageLinkEnum.ContentPage ||
page.__typename === PageLinkEnum.LoyaltyPage
) {
if (page.web.original_url) {
originalUrl = page.web.original_url
}
}
return {
lang: page.system.locale,
linkText: link.link_text ? link.link_text : page.title,
uid: page.system.uid,
url: removeMultipleSlashes(`/${page.system.locale}/${page.url}`),
originalUrl,
}
}),
}
})
}
export const navigationQueryRouter = router({ export const navigationQueryRouter = router({
get: contentstackBaseProcedure.query(async function ({ ctx }) { get: contentstackBaseProcedure.query(async function ({ ctx }) {
const { lang } = ctx const { lang } = ctx
@@ -92,7 +55,10 @@ export const navigationQueryRouter = router({
GetNavigationMyPagesRefs, GetNavigationMyPagesRefs,
{ locale: lang }, { locale: lang },
{ {
cache: "force-cache",
next: {
tags: [generateRefsResponseTag(lang, "navigation_my_pages")], tags: [generateRefsResponseTag(lang, "navigation_my_pages")],
},
} }
) )
@@ -157,7 +123,10 @@ export const navigationQueryRouter = router({
const response = await request<GetNavigationMyPagesData>( const response = await request<GetNavigationMyPagesData>(
GetNavigationMyPages, GetNavigationMyPages,
{ locale: lang }, { locale: lang },
{ tags } {
cache: "force-cache",
next: { tags },
}
) )
if (!response.data) { if (!response.data) {

View File

@@ -1,6 +1,9 @@
import { removeMultipleSlashes } from "@/utils/url"
import { PageLinkEnum } from "@/types/requests/pageLinks"
import type { Edges } from "@/types/requests/utils/edges" import type { Edges } from "@/types/requests/utils/edges"
import type { NodeRefs } from "@/types/requests/utils/refs" import type { NodeRefs } from "@/types/requests/utils/refs"
import type { GetNavigationMyPagesRefsData } from "./output" import type { GetNavigationMyPagesRefsData, MenuItems } from "./output"
export function getConnections(refs: GetNavigationMyPagesRefsData) { export function getConnections(refs: GetNavigationMyPagesRefsData) {
const connections: Edges<NodeRefs>[] = [] const connections: Edges<NodeRefs>[] = []
@@ -14,3 +17,36 @@ export function getConnections(refs: GetNavigationMyPagesRefsData) {
return connections return connections
} }
export function mapMenuItems(menuItems: MenuItems) {
return menuItems.map((menuItem) => {
return {
...menuItem,
links: menuItem.links
.filter((link) => {
// If content is unpublished or in other way inaccessible in Contentstack
// there will be no edges, filter out those links.
return !!link.page.edges[0]
})
.map((link) => {
const page = link.page.edges[0].node
let originalUrl = undefined
if (
page.__typename === PageLinkEnum.ContentPage ||
page.__typename === PageLinkEnum.LoyaltyPage
) {
if (page.web.original_url) {
originalUrl = page.web.original_url
}
}
return {
lang: page.system.locale,
linkText: link.link_text ? link.link_text : page.title,
uid: page.system.uid,
url: removeMultipleSlashes(`/${page.system.locale}/${page.url}`),
originalUrl,
}
}),
}
})
}

View File

@@ -25,7 +25,7 @@ const getHotelSuccessCounter = meter.createCounter("trpc.hotel.get-success")
const getHotelFailCounter = meter.createCounter("trpc.hotel.get-fail") const getHotelFailCounter = meter.createCounter("trpc.hotel.get-fail")
export const hotelQueryRouter = router({ export const hotelQueryRouter = router({
getHotel: serviceProcedure get: serviceProcedure
.input(getHotelInputSchema) .input(getHotelInputSchema)
.query(async ({ ctx, input }) => { .query(async ({ ctx, input }) => {
const { hotelId, language, include } = input const { hotelId, language, include } = input
@@ -152,7 +152,8 @@ export const hotelQueryRouter = router({
roomCategories: roomCategories, roomCategories: roomCategories,
} }
}), }),
getRates: publicProcedure rates: router({
get: publicProcedure
.input(getRatesInputSchema) .input(getRatesInputSchema)
.query(async ({ input, ctx }) => { .query(async ({ input, ctx }) => {
// TODO: Do a real API call when the endpoint is ready // TODO: Do a real API call when the endpoint is ready
@@ -167,7 +168,10 @@ export const hotelQueryRouter = router({
const validatedHotelData = getRatesSchema.safeParse(tempRatesData) const validatedHotelData = getRatesSchema.safeParse(tempRatesData)
if (!tempRatesData) { if (!tempRatesData) {
console.error("api.hotels.rates error", JSON.stringify({ error: null })) console.error(
"api.hotels.rates error",
JSON.stringify({ error: null })
)
//Can't return null here since consuming component does not handle null yet //Can't return null here since consuming component does not handle null yet
// return null // return null
} }
@@ -183,7 +187,9 @@ export const hotelQueryRouter = router({
console.info("api.hotels.rates success", JSON.stringify({})) console.info("api.hotels.rates success", JSON.stringify({}))
return validatedHotelData.data return validatedHotelData.data
}), }),
getFilters: publicProcedure }),
filters: router({
get: publicProcedure
.input(getFiltersInputSchema) .input(getFiltersInputSchema)
.query(async ({ input, ctx }) => { .query(async ({ input, ctx }) => {
console.info("api.hotels.filters start", JSON.stringify({})) console.info("api.hotels.filters start", JSON.stringify({}))
@@ -210,4 +216,5 @@ export const hotelQueryRouter = router({
console.info("api.hotels.rates success", JSON.stringify({})) console.info("api.hotels.rates success", JSON.stringify({}))
return validateFilterData.data return validateFilterData.data
}), }),
}),
}) })

View File

@@ -13,7 +13,9 @@ export async function resolve(url: string, lang = Lang.en) {
url, url,
}, },
{ {
next: {
revalidate: 3600, revalidate: 3600,
},
} }
) )

View File

@@ -1,14 +1,9 @@
import { Metadata } from "next"
import { serverClient } from "@/lib/trpc/server" import { serverClient } from "@/lib/trpc/server"
import { MetaData } from "@/types/components/metadata" export async function generateMetadata() {
const metaData = await serverClient().contentstack.metaData.get()
export async function generateMetadata(): Promise<Metadata> { if (!metaData) {
const metaData: MetaData | never[] | null =
await serverClient().contentstack.metaData.get()
if (Array.isArray(metaData)) {
return { return {
title: "", title: "",
description: "", description: "",