fix: rename retried-wrapped fetch to make caching work again

This commit is contained in:
Simon Emanuelsson
2024-08-28 10:47:57 +02:00
parent 08529e6398
commit 93526ce693
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"
export { generateMetadata } from "@/utils/generateMetadata"
export default async function MyPages({
params,
}: PageArgs<LangParams & { path: string[] }>) {

View File

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

View File

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

View File

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

View File

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

View File

@@ -6,7 +6,7 @@ import BedSelection from "@/components/HotelReservation/SelectRate/BedSelection"
import BreakfastSelection from "@/components/HotelReservation/SelectRate/BreakfastSelection"
import FlexibilitySelection from "@/components/HotelReservation/SelectRate/FlexibilitySelection"
import RoomSelection from "@/components/HotelReservation/SelectRate/RoomSelection"
import { getLang, setLang } from "@/i18n/serverContext"
import { setLang } from "@/i18n/serverContext"
import styles from "./page.module.css"
@@ -18,7 +18,7 @@ export default async function SelectRate({ params }: PageArgs<LangParams>) {
// TODO: Use real endpoint.
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
hotelId: "1",
})

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,6 +1,7 @@
{
"A photo of the room": "Et foto af værelset",
"Activities": "Aktiviteter",
"Add code": "Tilføj kode",
"Add new card": "Tilføj nyt kort",
"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.",
@@ -8,18 +9,24 @@
"Already a friend?": "Allerede en ven?",
"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.",
"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.",
"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",
"as of today": "fra idag",
"As our": "Som vores {level}",
"As our Close Friend": "Som vores nære ven",
"At latest": "Senest",
"At the hotel": "På hotellet",
"Book": "Book",
"Book reward night": "Book bonusnat",
"Booking codes and vouchers": "Bookingkoder og vouchers",
"Booking number": "Bookingnummer",
"Breakfast": "Morgenmad",
"by": "inden",
"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.",
"Choose room": "Vælg rum",
"Choose type of bed": "Vælg type seng",
@@ -35,28 +42,35 @@
"Country": "Land",
"Country code": "Landekode",
"Credit card deleted successfully": "Kreditkort blev slettet",
"Your current level": "Dit nuværende niveau",
"Current password": "Nuværende kodeord",
"characters": "tegn",
"Date of Birth": "Fødselsdato",
"Day": "Dag",
"Description": "Beskrivelse",
"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?",
"Download the Scandic app": "Download Scandic-appen",
"Edit": "Redigere",
"Edit profile": "Rediger profil",
"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",
"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.",
"Find booking": "Find booking",
"Find hotels": "Find hotel",
"Flexibility": "Fleksibilitet",
"Former Scandic Hotel": "Tidligere Scandic Hotel",
"From": "Fra",
"from your member profile?": "fra din medlemsprofil?",
"Get inspired": "Bliv inspireret",
"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 2": "Niveau 2",
"Level 3": "Niveau 3",
@@ -64,16 +78,11 @@
"Level 5": "Niveau 5",
"Level 6": "Niveau 6",
"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",
"Log in": "Log på",
"Log in here": "Log ind her",
"Log out": "Log ud",
"Manage preferences": "Administrer præferencer",
"Meetings & Conferences": "Møder & Konferencer",
"Members": "Medlemmer",
"Membership cards": "Medlemskort",
@@ -87,13 +96,13 @@
"New password": "Nyt kodeord",
"Next": "Næste",
"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",
"nights": "nætter",
"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",
"On your journey": "På din rejse",
"Open": "Åben",
@@ -104,21 +113,22 @@
"Phone is required": "Telefonnummer er påkrævet",
"Phone number": "Telefonnummer",
"Please enter a valid phone number": "Indtast venligst et gyldigt telefonnummer",
"Points": "Point",
"points": "Point",
"Points": "Point",
"Points being calculated": "Point udregnes",
"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 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",
"spendable points expiring by": "{points} Brugbare point udløber den {date}",
"Previous victories": "Tidligere sejre",
"Read more": "Læs mere",
"Read more about the hotel": "Læs mere om hotellet",
"Remove card from member profile": "Fjern kortet fra medlemsprofilen",
"Restaurant & Bar": "Restaurant & Bar",
"Retype new password": "Gentag den nye adgangskode",
"Room facilities": "Værelsesfaciliteter",
"Rooms": "Værelser",
"Rooms & Guests": "Værelser & gæster",
"Save": "Gemme",
"Scandic Friends Mastercard": "Scandic Friends Mastercard",
"Scandic Friends Point Shop": "Scandic Friends Point Shop",
@@ -126,66 +136,58 @@
"Select country of residence": "Vælg bopælsland",
"Select date of birth": "Vælg fødselsdato",
"Select language": "Vælg sprog",
"Show less": "Vis mindre",
"Show more": "Vis mere",
"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",
"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 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",
"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",
"Your points to spend": "Dine brugbare point",
"Transaction date": "Overførselsdato",
"Transactions": "Transaktioner",
"Tripadvisor reviews": "{rating} ({count} anmeldelser på Tripadvisor)",
"to": "til",
"TUI Points": "TUI Points",
"User information": "Brugeroplysninger",
"Type of bed": "Sengtype",
"Type of room": "Værelsestype",
"uppercase letter": "stort bogstav",
"Use bonus cheque": "Brug Bonus Cheque",
"User information": "Brugeroplysninger",
"View your booking": "Se din booking",
"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 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 to": "Velkommen til",
"Wellness & Exercise": "Velvære & Motion",
"When": "Hvornår",
"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",
"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",
"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 upcoming stays.": "Du har ingen kommende ophold.",
"Your card was successfully removed!": "Dit kort blev fjernet!",
"Your card was successfully saved!": "Dit kort blev gemt!",
"Your Challenges Conquer & Earn!": "Dine udfordringer Overvind og tjen!",
"Your current level": "Dit nuværende niveau",
"Your level": "Dit niveau",
"Zip code": "Postnummer",
"Room facilities": "Værelsesfaciliteter",
"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"
}
"Your points to spend": "Dine brugbare point",
"Zip code": "Postnummer"
}

View File

@@ -1,5 +1,6 @@
{
"A photo of the room": "Ein Foto des Zimmers",
"Add code": "Code hinzufügen",
"Add new card": "Neue Karte hinzufügen",
"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.",
@@ -7,18 +8,24 @@
"Already a friend?": "Sind wir schon Freunde?",
"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.",
"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.",
"Are you sure you want to remove the card ending with": "Möchten Sie die Karte mit der Endung",
"Arrival date": "Ankunftsdatum",
"as of today": "Stand heute",
"As our": "Als unser {level}",
"As our Close Friend": "Als unser enger Freund",
"At latest": "Spätestens",
"At the hotel": "Im Hotel",
"Book": "Buchen",
"Book reward night": "Bonusnacht buchen",
"Booking codes and vouchers": "Buchungscodes und Gutscheine",
"Booking number": "Buchungsnummer",
"Breakfast": "Frühstück",
"by": "bis",
"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.",
"Choose room": "Zimmer wählen",
"Choose type of bed": "Wählen Sie den Bettentyp",
@@ -34,28 +41,35 @@
"Country": "Land",
"Country code": "Landesvorwahl",
"Credit card deleted successfully": "Kreditkarte erfolgreich gelöscht",
"Your current level": "Ihr aktuelles Level",
"Current password": "Aktuelles Passwort",
"characters": "figuren",
"Date of Birth": "Geburtsdatum",
"Day": "Tag",
"Description": "Beschreibung",
"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?",
"Download the Scandic app": "Laden Sie die Scandic-App herunter",
"Edit": "Bearbeiten",
"Edit profile": "Profil bearbeiten",
"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",
"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.",
"Find booking": "Buchung finden",
"Find hotels": "Hotels finden",
"Flexibility": "Flexibilität",
"Former Scandic Hotel": "Ehemaliges Scandic Hotel",
"From": "Fromm",
"from your member profile?": "wirklich aus Ihrem Mitgliedsprofil entfernen?",
"Get inspired": "Lassen Sie sich inspieren",
"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 2": "Level 2",
"Level 3": "Level 3",
@@ -63,16 +77,11 @@
"Level 5": "Level 5",
"Level 6": "Level 6",
"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",
"Log in": "Anmeldung",
"Log in here": "Hier einloggen",
"Log out": "Ausloggen",
"Manage preferences": "Verwalten von Voreinstellungen",
"Members": "Mitglieder",
"Membership cards": "Mitgliedskarten",
"Membership ID": "Mitglieds-ID",
@@ -85,13 +94,13 @@
"New password": "Neues Kennwort",
"Next": "Nächste",
"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",
"nights": "Nächte",
"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",
"On your journey": "Auf deiner Reise",
"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 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",
"spendable points expiring by": "{points} Einlösbare punkte verfallen bis zum {date}",
"Previous victories": "Bisherige Siege",
"Read more": "Mehr lesen",
"Read more about the hotel": "Lesen Sie mehr über das Hotel",
"Remove card from member profile": "Karte aus dem Mitgliedsprofil entfernen",
"Retype new password": "Neues Passwort erneut eingeben",
"Room facilities": "Zimmerausstattung",
"Rooms & Guests": "Zimmer & Gäste",
"Save": "Speichern",
"Scandic Friends Mastercard": "Scandic Friends Mastercard",
"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 date of birth": "Geburtsdatum auswählen",
"Select language": "Sprache auswählen",
"Show less": "Weniger anzeigen",
"Show more": "Mehr 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",
"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 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",
"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",
"Your points to spend": "Meine Punkte",
"Transaction date": "Transaktionsdatum",
"Transactions": "Transaktionen",
"Tripadvisor reviews": "{rating} ({count} Bewertungen auf Tripadvisor)",
"to": "zu",
"TUI Points": "TUI Points",
"User information": "Nutzerinformation",
"Type of bed": "Bettentyp",
"Type of room": "Zimmerart",
"uppercase letter": "großbuchstabe",
"Use bonus cheque": "Bonusscheck nutzen",
"User information": "Nutzerinformation",
"View your booking": "Ihre Buchung ansehen",
"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.",
"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 to": "Willkommen zu",
"When": "Wann",
"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?",
"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",
"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 upcoming stays.": "Sie haben keine bevorstehenden Aufenthalte.",
"Your card was successfully removed!": "Ihre Karte wurde erfolgreich entfernt!",
"Your card was successfully saved!": "Ihre Karte wurde erfolgreich gespeichert!",
"Your Challenges Conquer & Earn!": "Meistern Sie Ihre Herausforderungen und verdienen Sie Geld!",
"Your current level": "Ihr aktuelles Level",
"Your level": "Dein level",
"Zip code": "PLZ",
"Room facilities": "Zimmerausstattung",
"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"
}
"Your points to spend": "Meine Punkte",
"Zip code": "PLZ"
}

View File

@@ -1,6 +1,7 @@
{
"A photo of the room": "A photo of the room",
"Activities": "Activities",
"Add code": "Add code",
"Add new card": "Add new card",
"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.",
@@ -8,18 +9,24 @@
"Already a friend?": "Already a friend?",
"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.",
"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.",
"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",
"as of today": "as of today",
"As our": "As our {level}",
"As our Close Friend": "As our Close Friend",
"At latest": "At latest",
"At the hotel": "At the hotel",
"Book": "Book",
"Book reward night": "Book reward night",
"Booking codes and vouchers": "Booking codes and vouchers",
"Booking number": "Booking number",
"Breakfast": "Breakfast",
"by": "by",
"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.",
"Choose room": "Choose room",
"Choose type of bed": "Choose type of bed",
@@ -34,34 +41,41 @@
"Could not find requested resource": "Could not find requested resource",
"Country": "Country",
"Country code": "Country code",
"Your current level": "Your current level",
"Current password": "Current password",
"characters": "characters",
"Credit card deleted successfully": "Credit card deleted successfully",
"Current password": "Current password",
"Date of Birth": "Date of Birth",
"Day": "Day",
"Description": "Description",
"Discard changes": "Discard changes",
"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é?",
"Download the Scandic app": "Download the Scandic app",
"Edit": "Edit",
"Edit profile": "Edit profile",
"Email": "Email",
"There are no transactions to display": "There are no transactions to display",
"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",
"Failed to delete credit card, please try again later.": "Failed to delete credit card, please try again later.",
"FAQ": "FAQ",
"Find booking": "Find booking",
"Former Scandic Hotel": "Former Scandic Hotel",
"Find hotels": "Find hotels",
"Flexibility": "Flexibility",
"Former Scandic Hotel": "Former Scandic Hotel",
"From": "From",
"from your member profile?": "from your member profile?",
"Get inspired": "Get inspired",
"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.persons": "persons",
"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 2": "Level 2",
"Level 3": "Level 3",
@@ -69,16 +83,11 @@
"Level 5": "Level 5",
"Level 6": "Level 6",
"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",
"Log in": "Log in",
"Log in here": "Log in here",
"Log out": "Log out",
"Manage preferences": "Manage preferences",
"Meetings & Conferences": "Meetings & Conferences",
"Members": "Members",
"Membership cards": "Membership cards",
@@ -92,13 +101,13 @@
"New password": "New password",
"Next": "Next",
"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",
"nights": "nights",
"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",
"On your journey": "On your journey",
"Open": "Open",
@@ -109,89 +118,82 @@
"Phone is required": "Phone is required",
"Phone number": "Phone number",
"Please enter a valid phone number": "Please enter a valid phone number",
"Points": "Points",
"points": "Points",
"Points": "Points",
"Points being calculated": "Points being calculated",
"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 needed to level up": "Points needed to level up",
"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",
"Read more": "Read more",
"Read more about the hotel": "Read more about the hotel",
"Remove card from member profile": "Remove card from member profile",
"Restaurant & Bar": "Restaurant & Bar",
"Retype new password": "Retype new password",
"Room facilities": "Room facilities",
"Rooms": "Rooms",
"Rooms & Guests": "Rooms & Guests",
"Save": "Save",
"See room details": "See room details",
"Scandic Friends Mastercard": "Scandic Friends Mastercard",
"Scandic Friends Point Shop": "Scandic Friends Point Shop",
"See room details": "See room details",
"Select a country": "Select a country",
"Select country of residence": "Select country of residence",
"Select date of birth": "Select date of birth",
"Select language": "Select language",
"Show less": "Show less",
"Show more": "Show more",
"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",
"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 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",
"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",
"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",
"Transactions": "Transactions",
"Tripadvisor reviews": "{rating} ({count} reviews on Tripadvisor)",
"to": "to",
"TUI Points": "TUI Points",
"User information": "User information",
"Type of bed": "Type of bed",
"Type of room": "Type of room",
"uppercase letter": "uppercase letter",
"Use bonus cheque": "Use bonus cheque",
"User information": "User information",
"View your booking": "View your booking",
"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 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 to": "Welcome to",
"Wellness & Exercise": "Wellness & Exercise",
"When": "When",
"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?",
"Year": "Year",
"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 upcoming stays.": "You have no upcoming stays.",
"Your card was successfully removed!": "Your card was successfully removed!",
"Your card was successfully saved!": "Your card was successfully saved!",
"Your Challenges Conquer & Earn!": "Your Challenges Conquer & Earn!",
"Your current level": "Your current level",
"Your level": "Your level",
"Zip code": "Zip code",
"Room facilities": "Room facilities",
"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"
}
"Your points to spend": "Your points to spend",
"Zip code": "Zip code"
}

View File

@@ -1,6 +1,7 @@
{
"A photo of the room": "Kuva huoneesta",
"Activities": "Aktiviteetit",
"Add code": "Lisää koodi",
"Add new card": "Lisää uusi kortti",
"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.",
@@ -8,18 +9,24 @@
"Already a friend?": "Oletko jo ystävä?",
"Amenities": "Mukavuudet",
"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.",
"Are you sure you want to remove the card ending with": "Haluatko varmasti poistaa kortin, joka päättyy numeroon",
"Arrival date": "Saapumispäivä",
"as of today": "tänään",
"As our": "{level}-etu",
"As our Close Friend": "Läheisenä ystävänämme",
"At latest": "Viimeistään",
"At the hotel": "Hotellissa",
"Book": "Varaa",
"Book reward night": "Kirjapalkinto-ilta",
"Booking codes and vouchers": "Varauskoodit ja kupongit",
"Booking number": "Varausnumero",
"Breakfast": "Aamiainen",
"by": "mennessä",
"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.",
"Choose room": "Valitse huone",
"Choose type of bed": "Valitse sänkytyyppi",
@@ -35,28 +42,35 @@
"Country": "Maa",
"Country code": "Maatunnus",
"Credit card deleted successfully": "Luottokortti poistettu onnistuneesti",
"Your current level": "Nykyinen tasosi",
"Current password": "Nykyinen salasana",
"characters": "hahmoja",
"Date of Birth": "Syntymäaika",
"Day": "Päivä",
"Description": "Kuvaus",
"Discard changes": "Hylkää muutokset",
"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 profile": "Muokkaa profiilia",
"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",
"Extras to your booking": "Varauksessa lisäpalveluita",
"Failed to delete credit card, please try again later.": "Luottokortin poistaminen epäonnistui, yritä myöhemmin uudelleen.",
"Find booking": "Etsi varaus",
"Find hotels": "Etsi hotelleja",
"Flexibility": "Joustavuus",
"Former Scandic Hotel": "Entinen Scandic-hotelli",
"From": "From",
"from your member profile?": "jäsenprofiilistasi?",
"Get inspired": "Inspiroidu",
"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 2": "Taso 2",
"Level 3": "Taso 3",
@@ -64,16 +78,11 @@
"Level 5": "Taso 5",
"Level 6": "Taso 6",
"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",
"Log in": "Kirjaudu sisään",
"Log in here": "Kirjaudu sisään",
"Log out": "Kirjaudu ulos",
"Manage preferences": "Asetusten hallinta",
"Meetings & Conferences": "Kokoukset & Konferenssit",
"Members": "Jäsenet",
"Membership cards": "Jäsenkortit",
@@ -87,13 +96,13 @@
"New password": "Uusi salasana",
"Next": "Seuraava",
"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ö",
"nights": "yötä",
"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ä",
"On your journey": "Matkallasi",
"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 needed to level up": "Tarvitset vielä",
"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 about the hotel": "Lue lisää hotellista",
"Remove card from member profile": "Poista kortti jäsenprofiilista",
"Restaurant & Bar": "Ravintola & Baari",
"Retype new password": "Kirjoita uusi salasana uudelleen",
"Room facilities": "Huoneen varustelu",
"Rooms": "Huoneet",
"Rooms & Guestss": "Huoneet & Vieraat",
"Save": "Tallentaa",
"Scandic Friends Mastercard": "Scandic Friends Mastercard",
"Scandic Friends Point Shop": "Scandic Friends Point Shop",
@@ -126,66 +135,58 @@
"Select country of residence": "Valitse asuinmaa",
"Select date of birth": "Valitse syntymäaika",
"Select language": "Valitse kieli",
"Show less": "Näytä vähemmän",
"Show more": "Näytä lisää",
"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",
"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 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",
"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",
"Your points to spend": "Käytettävissä olevat pisteesi",
"Transaction date": "Tapahtuman päivämäärä",
"Transactions": "Tapahtumat",
"Tripadvisor reviews": "{rating} ({count} arvostelua TripAdvisorissa)",
"to": "to",
"TUI Points": "TUI Points",
"User information": "Käyttäjän tiedot",
"Type of bed": "Vuodetyyppi",
"Type of room": "Huonetyyppi",
"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",
"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 to": "Tervetuloa",
"Wellness & Exercise": "Hyvinvointi & Liikunta",
"When": "Kun",
"Where should you go next?": "Mihin menisit seuraavaksi?",
"Where to": "Minne",
"Which room class suits you the best?": "Mikä huoneluokka sopii sinulle parhaiten?",
"Year": "Vuosi",
"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 upcoming stays.": "Sinulla ei ole tulevia majoituksia.",
"Your card was successfully removed!": "Korttisi poistettiin 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 current level": "Nykyinen tasosi",
"Your level": "Tasosi",
"Zip code": "Postinumero",
"Room facilities": "Huoneen varustelu",
"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"
}
"Your points to spend": "Käytettävissä olevat pisteesi",
"Zip code": "Postinumero"
}

View File

@@ -1,6 +1,7 @@
{
"A photo of the room": "Et bilde av rommet",
"Activities": "Aktiviteter",
"Add code": "Legg til kode",
"Add new card": "Legg til nytt kort",
"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.",
@@ -8,18 +9,24 @@
"Already a friend?": "Allerede Friend?",
"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.",
"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.",
"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",
"as of today": "per idag",
"As our": "Som vår {level}",
"As our Close Friend": "Som vår nære venn",
"At latest": "Senest",
"At the hotel": "På hotellet",
"Book": "Bestill",
"Book reward night": "Bestill belønningskveld",
"Booking codes and vouchers": "Bestillingskoder og kuponger",
"Booking number": "Bestillingsnummer",
"Breakfast": "Frokost",
"by": "innen",
"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.",
"Choose room": "Velg rom",
"Choose type of bed": "Velg type seng",
@@ -34,29 +41,36 @@
"Could not find requested resource": "Kunne ikke finne den forespurte ressursen",
"Country": "Land",
"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",
"Current password": "Nåværende passord",
"Date of Birth": "Fødselsdato",
"Day": "Dag",
"Description": "Beskrivelse",
"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é?",
"Download the Scandic app": "Last ned Scandic-appen",
"Edit": "Redigere",
"Edit profile": "Rediger profil",
"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",
"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.",
"Find booking": "Finn booking",
"Find hotels": "Finn hotell",
"Flexibility": "Fleksibilitet",
"Former Scandic Hotel": "Tidligere Scandic-hotell",
"From": "Fra",
"from your member profile?": "fra medlemsprofilen din?",
"Get inspired": "Bli inspirert",
"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 2": "Nivå 2",
"Level 3": "Nivå 3",
@@ -64,16 +78,11 @@
"Level 5": "Nivå 5",
"Level 6": "Nivå 6",
"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",
"Log in": "Logg Inn",
"Log in here": "Logg inn her",
"Log out": "Logg ut",
"Manage preferences": "Administrer preferanser",
"Meetings & Conferences": "Møter & Konferanser",
"Members": "Medlemmer",
"Membership cards": "Medlemskort",
@@ -87,13 +96,13 @@
"New password": "Nytt passord",
"Next": "Neste",
"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",
"nights": "netter",
"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",
"On your journey": "På reisen din",
"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 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å",
"spendable points expiring by": "{points} Brukbare poeng utløper innen {date}",
"Previous victories": "Tidligere seire",
"Read more": "Les mer",
"Read more about the hotel": "Les mer om hotellet",
"Remove card from member profile": "Fjern kortet fra medlemsprofilen",
"Restaurant & Bar": "Restaurant & Bar",
"Retype new password": "Skriv inn nytt passord på nytt",
"Room facilities": "Romfasiliteter",
"Rooms": "Rom",
"Rooms & Guests": "Rom og gjester",
"Save": "Lagre",
"Scandic Friends Mastercard": "Scandic Friends Mastercard",
"Scandic Friends Point Shop": "Scandic Friends Point Shop",
@@ -126,66 +136,58 @@
"Select country of residence": "Velg bostedsland",
"Select date of birth": "Velg fødselsdato",
"Select language": "Velg språk",
"Show less": "Vis mindre",
"Show more": "Vis mer",
"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",
"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 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",
"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",
"Your points to spend": "Dine brukbare poeng",
"Transaction date": "Transaksjonsdato",
"Transactions": "Transaksjoner",
"Tripadvisor reviews": "{rating} ({count} anmeldelser på Tripadvisor)",
"to": "til",
"TUI Points": "TUI Points",
"User information": "Brukerinformasjon",
"Type of bed": "Sengtype",
"Type of room": "Romtype",
"uppercase letter": "stor bokstav",
"Use bonus cheque": "Bruk bonussjekk",
"User information": "Brukerinformasjon",
"View your booking": "Se din bestilling",
"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 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 to": "Velkommen til",
"Wellness & Exercise": "Velvære & Trening",
"When": "Når",
"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?",
"Year": "År",
"You canceled adding a new credit card.": "Du kansellerte å legge til et nytt kredittkort.",
"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 upcoming stays.": "Du har ingen kommende opphold.",
"Your card was successfully removed!": "Kortet ditt ble fjernet!",
"Your card was successfully saved!": "Kortet ditt ble lagret!",
"Your Challenges Conquer & Earn!": "Dine utfordringer Erobre og tjen!",
"Your current level": "Ditt nåværende nivå",
"Your level": "Ditt nivå",
"Zip code": "Post kode",
"Room facilities": "Romfasiliteter",
"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"
}
"Your points to spend": "Dine brukbare poeng",
"Zip code": "Post kode"
}

View File

@@ -1,6 +1,7 @@
{
"A photo of the room": "Ett foto av rummet",
"Activities": "Aktiviteter",
"Add code": "Lägg till kod",
"Add new card": "Lägg till nytt kort",
"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.",
@@ -8,18 +9,24 @@
"Already a friend?": "Är du redan en vän?",
"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.",
"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.",
"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",
"as of today": "från och med idag",
"As our": "Som vår {level}",
"As our Close Friend": "Som vår nära vän",
"At latest": "Senast",
"At the hotel": "På hotellet",
"Book": "Boka",
"Book reward night": "Boka frinatt",
"Booking codes and vouchers": "Bokningskoder och kuponger",
"Booking number": "Bokningsnummer",
"Breakfast": "Frukost",
"by": "innan",
"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.",
"Choose room": "Välj rum",
"Choose type of bed": "Välj typ av säng",
@@ -35,28 +42,37 @@
"Country": "Land",
"Country code": "Landskod",
"Credit card deleted successfully": "Kreditkort har tagits bort",
"Your current level": "Din nuvarande nivå",
"Current password": "Nuvarande lösenord",
"characters": "tecken",
"Date of Birth": "Födelsedatum",
"Day": "Dag",
"Description": "Beskrivning",
"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é?",
"Download the Scandic app": "Ladda ner Scandic-appen",
"Edit": "Redigera",
"Edit profile": "Redigera profil",
"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",
"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.",
"Find booking": "Hitta bokning",
"Find hotels": "Hitta hotell",
"Flexibility": "Flexibilitet",
"Former Scandic Hotel": "Tidigare Scandichotell",
"From": "Från",
"from your member profile?": "från din medlemsprofil?",
"Get inspired": "Bli inspirerad",
"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 2": "Nivå 2",
"Level 3": "Nivå 3",
@@ -64,19 +80,11 @@
"Level 5": "Nivå 5",
"Level 6": "Nivå 6",
"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",
"Log in": "Logga in",
"Log in here": "Logga in här",
"Log out": "Logga ut",
"Manage preferences": "Hantera inställningar",
"Meetings & Conferences": "Möten & Konferenser",
"Members": "Medlemmar",
"Membership cards": "Medlemskort",
@@ -90,13 +98,13 @@
"New password": "Nytt lösenord",
"Next": "Nästa",
"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",
"nights": "nätter",
"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",
"On your journey": "På din resa",
"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 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å",
"spendable points expiring by": "{points} poäng förfaller {date}",
"Previous victories": "Tidigare segrar",
"Read more": "Läs mer",
"Read more about the hotel": "Läs mer om hotellet",
"Remove card from member profile": "Ta bort kortet från medlemsprofilen",
"Restaurant & Bar": "Restaurang & Bar",
"Retype new password": "Upprepa nytt lösenord",
"Room facilities": "Rumfaciliteter",
"Rooms": "Rum",
"Rooms & Guests": "Rum och gäster",
"Save": "Spara",
"Scandic Friends Mastercard": "Scandic Friends Mastercard",
"Scandic Friends Point Shop": "Scandic Friends Point Shop",
"See room details": "Se rumsdetaljer",
"Select a country": "Välj ett land",
"Select country of residence": "Välj bosättningsland",
"Select date of birth": "Välj födelsedatum",
"Select language": "Välj språk",
"Show less": "Visa mindre",
"Show more": "Visa mer",
"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",
"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 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",
"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",
"Your points to spend": "Poäng att använda",
"Transaction date": "Transaktionsdatum",
"Transactions": "Transaktioner",
"Tripadvisor reviews": "{rating} ({count} recensioner på Tripadvisor)",
"to": "till",
"TUI Points": "TUI Points",
"User information": "Användar information",
"Type of bed": "Sängtyp",
"Type of room": "Rumstyp",
"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",
"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",
"Wellness & Exercise": "Hälsa & Träning",
"When": "När",
"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?",
"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",
"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 upcoming stays.": "Du har inga planerade resor.",
"Your card was successfully removed!": "Ditt kort har tagits bort!",
"Your card was successfully saved!": "Ditt kort har sparats!",
"Your Challenges Conquer & Earn!": "Dina utmaningar Erövra och tjäna!",
"Your current level": "Din nuvarande nivå",
"Your level": "Din nivå",
"Zip code": "Postnummer",
"Room facilities": "Rumfaciliteter",
"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"
}
"Your points to spend": "Dina spenderbara poäng",
"Zip code": "Postnummer"
}

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,11 +1,24 @@
#import "../Fragments/LoyaltyPage/MetaData.graphql"
#import "../Fragments/Image.graphql"
query GetLoyaltyPageMetaData($locale: String!, $url: String!) {
all_loyalty_page(locale: $locale, where: { url: $url }) {
items {
...LoyaltyPageMetaData
system {
uid
query GetLoyaltyPageMetaData($locale: String!, $uid: String!) {
loyalty_page(locale: $locale, uid: $uid) {
system {
uid
}
web {
seo_metadata {
description
title
imageConnection {
edges {
node {
...Image
}
}
}
}
breadcrumbs {
title
}
}
}

View File

@@ -1,11 +1,24 @@
#import "../Fragments/MyPages/MetaData.graphql"
#import "../Fragments/Image.graphql"
query GetMyPagesMetaData($locale: String!, $url: String!) {
all_account_page(locale: $locale, where: { url: $url }) {
items {
...MyPagesMetaData
system {
uid
query GetMyPagesMetaData($locale: String!, $uid: String!) {
account_page(locale: $locale, uid: $uid) {
system {
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,
query: string | DocumentNode,
variables?: {},
next?: NextFetchRequestConfig
params?: RequestInit
): Promise<Data<T>> {
try {
if (next) {
client.requestConfig.next = next
if (params?.cache) {
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) {

View File

@@ -7,12 +7,12 @@ import type { BatchRequestDocument } from "graphql-request"
import type { Data } from "@/types/request"
export async function batchRequest<T>(
queries: (BatchRequestDocument & NextFetchRequestConfig)[]
queries: (BatchRequestDocument & { options?: RequestInit })[]
): Promise<Data<T>> {
try {
const response = await Promise.allSettled(
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>(
query: string | DocumentNode,
variables?: {},
next?: NextFetchRequestConfig
params?: RequestInit
): 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,
params: RequestInit | undefined
) {
const fetch = fetchRetry(global.fetch, {
const wrappedFetch = fetchRetry(global.fetch, {
retries: 3,
retryDelay: function (attempt, error, response) {
return Math.pow(2, attempt) * 150 // 150, 300, 600
},
})
return fetch(url, params)
return wrappedFetch(url, params)
}),
})
export async function request<T>(
query: string | DocumentNode,
variables?: {},
next?: NextFetchRequestConfig
params?: RequestInit
): 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 { getDefaultRequestHeaders } from "./utils"
import type { NextMiddleware } from "next/server"
import type { MiddlewareMatcher } from "@/types/middleware"
export const middleware: NextMiddleware = () => {
return NextResponse.next()
export const middleware: NextMiddleware = (request) => {
const headers = getDefaultRequestHeaders(request)
return NextResponse.next({
request: {
headers,
},
})
}
export const matcher: MiddlewareMatcher = (request) => {

View File

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

View File

@@ -13,7 +13,11 @@ import { request } from "@/lib/graphql/request"
import { notFound } from "@/server/errors/trpc"
import { contentstackBaseProcedure, router } from "@/server/trpc"
import { generateTag } from "@/utils/generateTag"
import {
generateRefsResponseTag,
generateRefTag,
generateTag,
} from "@/utils/generateTag"
import { langInput } from "./input"
import {
@@ -82,9 +86,18 @@ export const baseQueryRouter = router({
"contentstack.contactConfig start",
JSON.stringify({ query: { lang } })
)
const response = await request<ContactConfigData>(GetContactConfig, {
locale: lang,
})
const response = await request<ContactConfigData>(
GetContactConfig,
{
locale: lang,
},
{
cache: "force-cache",
next: {
tags: [`${lang}:contact`],
},
}
)
if (!response.data) {
const notFoundError = notFound(response)
@@ -137,9 +150,18 @@ export const baseQueryRouter = router({
"contentstack.header.ref start",
JSON.stringify({ query: { lang: input.lang } })
)
const responseRef = await request<HeaderRefDataRaw>(GetCurrentHeaderRef, {
locale: input.lang,
})
const responseRef = await request<HeaderRefDataRaw>(
GetCurrentHeaderRef,
{
locale: input.lang,
},
{
cache: "force-cache",
next: {
tags: [generateRefsResponseTag(input.lang, "current_header")],
},
}
)
getHeaderCounter.add(1, { lang: input.lang })
console.info(
"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?
const response = await request<HeaderDataRaw>(
GetCurrentHeader,
{ locale: input.lang },
{
tags: [
generateTag(
input.lang,
responseRef.data.all_current_header.items[0].system.uid
),
],
cache: "force-cache",
next: {
tags: [generateTag(input.lang, currentHeaderUID)],
},
}
)
@@ -226,9 +248,18 @@ export const baseQueryRouter = router({
"contentstack.footer.ref start",
JSON.stringify({ query: { lang: input.lang } })
)
const responseRef = await request<FooterRefDataRaw>(GetCurrentFooterRef, {
locale: input.lang,
})
const responseRef = await request<FooterRefDataRaw>(
GetCurrentFooterRef,
{
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?
getFooterCounter.add(1, { lang: input.lang })
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>(
GetCurrentFooter,
{
locale: input.lang,
},
{
tags: [
generateTag(
input.lang,
responseRef.data.all_current_footer.items[0].system.uid
),
],
cache: "force-cache",
next: {
tags: [generateTag(input.lang, currentFooterUID)],
},
}
)

View File

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

View File

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

View File

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

View File

@@ -71,12 +71,22 @@ async function getLanguageSwitcher(options: LanguageSwitcherVariables) {
{
document: GetDaDeEnUrlsAccountPage,
variables,
tags: tagsDaDeEn,
options: {
cache: "force-cache",
next: {
tags: tagsDaDeEn,
},
},
},
{
document: GetFiNoSvUrlsAccountPage,
variables,
tags: tagsFiNoSv,
options: {
cache: "force-cache",
next: {
tags: tagsFiNoSv,
},
},
},
])
case PageTypeEnum.currentBlocksPage:
@@ -84,12 +94,22 @@ async function getLanguageSwitcher(options: LanguageSwitcherVariables) {
{
document: GetDaDeEnUrlsCurrentBlocksPage,
variables,
tags: tagsDaDeEn,
options: {
cache: "force-cache",
next: {
tags: tagsDaDeEn,
},
},
},
{
document: GetFiNoSvUrlsCurrentBlocksPage,
variables,
tags: tagsFiNoSv,
options: {
cache: "force-cache",
next: {
tags: tagsFiNoSv,
},
},
},
])
case PageTypeEnum.loyaltyPage:
@@ -97,12 +117,22 @@ async function getLanguageSwitcher(options: LanguageSwitcherVariables) {
{
document: GetDaDeEnUrlsLoyaltyPage,
variables,
tags: tagsDaDeEn,
options: {
cache: "force-cache",
next: {
tags: tagsDaDeEn,
},
},
},
{
document: GetFiNoSvUrlsLoyaltyPage,
variables,
tags: tagsFiNoSv,
options: {
cache: "force-cache",
next: {
tags: tagsFiNoSv,
},
},
},
])
case PageTypeEnum.hotelPage:
@@ -110,12 +140,22 @@ async function getLanguageSwitcher(options: LanguageSwitcherVariables) {
{
document: GetDaDeEnUrlsHotelPage,
variables,
tags: tagsDaDeEn,
options: {
cache: "force-cache",
next: {
tags: tagsDaDeEn,
},
},
},
{
document: GetFiNoSvUrlsHotelPage,
variables,
tags: tagsFiNoSv,
options: {
cache: "force-cache",
next: {
tags: tagsFiNoSv,
},
},
},
])
case PageTypeEnum.contentPage:
@@ -123,12 +163,22 @@ async function getLanguageSwitcher(options: LanguageSwitcherVariables) {
{
document: GetDaDeEnUrlsContentPage,
variables,
tags: tagsDaDeEn,
options: {
cache: "force-cache",
next: {
tags: tagsDaDeEn,
},
},
},
{
document: GetFiNoSvUrlsContentPage,
variables,
tags: tagsFiNoSv,
options: {
cache: "force-cache",
next: {
tags: tagsFiNoSv,
},
},
},
])

View File

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

View File

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

View File

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

View File

@@ -2,15 +2,22 @@ import { Lang } from "@/constants/languages"
import { request } from "@/lib/graphql/request"
import { internalServerError, notFound } from "@/server/errors/trpc"
import { generateTag } from "@/utils/generateTag"
import { getMetaDataSchema, Page } from "./output"
export type Variables = {
locale: Lang
url: string
uid: string
}
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) {
throw notFound(response)
}

View File

@@ -13,19 +13,15 @@ import {
generateTag,
generateTags,
} from "@/utils/generateTag"
import { removeMultipleSlashes } from "@/utils/url"
import {
type GetNavigationMyPagesData,
type GetNavigationMyPagesRefsData,
getNavigationSchema,
type MenuItems,
navigationPayloadSchema,
navigationRefsPayloadSchema,
} from "./output"
import { getConnections } from "./utils"
import { PageLinkEnum } from "@/types/requests/pageLinks"
import { getConnections, mapMenuItems } from "./utils"
const meter = metrics.getMeter("trpc.navigationMyPages")
const getNavigationMyPagesRefsCounter = meter.createCounter(
@@ -47,39 +43,6 @@ const getNavigationMyPagesFailCounter = meter.createCounter(
"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({
get: contentstackBaseProcedure.query(async function ({ ctx }) {
const { lang } = ctx
@@ -92,7 +55,10 @@ export const navigationQueryRouter = router({
GetNavigationMyPagesRefs,
{ locale: lang },
{
tags: [generateRefsResponseTag(lang, "navigation_my_pages")],
cache: "force-cache",
next: {
tags: [generateRefsResponseTag(lang, "navigation_my_pages")],
},
}
)
@@ -157,7 +123,10 @@ export const navigationQueryRouter = router({
const response = await request<GetNavigationMyPagesData>(
GetNavigationMyPages,
{ locale: lang },
{ tags }
{
cache: "force-cache",
next: { tags },
}
)
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 { NodeRefs } from "@/types/requests/utils/refs"
import type { GetNavigationMyPagesRefsData } from "./output"
import type { GetNavigationMyPagesRefsData, MenuItems } from "./output"
export function getConnections(refs: GetNavigationMyPagesRefsData) {
const connections: Edges<NodeRefs>[] = []
@@ -14,3 +17,36 @@ export function getConnections(refs: GetNavigationMyPagesRefsData) {
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")
export const hotelQueryRouter = router({
getHotel: serviceProcedure
get: serviceProcedure
.input(getHotelInputSchema)
.query(async ({ ctx, input }) => {
const { hotelId, language, include } = input
@@ -152,62 +152,69 @@ export const hotelQueryRouter = router({
roomCategories: roomCategories,
}
}),
getRates: publicProcedure
.input(getRatesInputSchema)
.query(async ({ input, ctx }) => {
// TODO: Do a real API call when the endpoint is ready
// const { hotelId } = input
rates: router({
get: publicProcedure
.input(getRatesInputSchema)
.query(async ({ input, ctx }) => {
// TODO: Do a real API call when the endpoint is ready
// const { hotelId } = input
// const params = new URLSearchParams()
// const apiLang = toApiLang(language)
// params.set("hotelId", hotelId.toString())
// params.set("language", apiLang)
// const params = new URLSearchParams()
// const apiLang = toApiLang(language)
// params.set("hotelId", hotelId.toString())
// params.set("language", apiLang)
console.info("api.hotels.rates start", JSON.stringify({}))
const validatedHotelData = getRatesSchema.safeParse(tempRatesData)
console.info("api.hotels.rates start", JSON.stringify({}))
const validatedHotelData = getRatesSchema.safeParse(tempRatesData)
if (!tempRatesData) {
console.error("api.hotels.rates error", JSON.stringify({ error: null }))
//Can't return null here since consuming component does not handle null yet
// return null
}
if (!validatedHotelData.success) {
console.error(
"api.hotels.rates validation error",
JSON.stringify({
error: validatedHotelData.error,
})
)
throw badRequestError()
}
console.info("api.hotels.rates success", JSON.stringify({}))
return validatedHotelData.data
}),
getFilters: publicProcedure
.input(getFiltersInputSchema)
.query(async ({ input, ctx }) => {
console.info("api.hotels.filters start", JSON.stringify({}))
if (!tempRatesData) {
console.error(
"api.hotels.rates error",
JSON.stringify({ error: null })
)
//Can't return null here since consuming component does not handle null yet
// return null
}
if (!validatedHotelData.success) {
console.error(
"api.hotels.rates validation error",
JSON.stringify({
error: validatedHotelData.error,
})
)
throw badRequestError()
}
console.info("api.hotels.rates success", JSON.stringify({}))
return validatedHotelData.data
}),
}),
filters: router({
get: publicProcedure
.input(getFiltersInputSchema)
.query(async ({ input, ctx }) => {
console.info("api.hotels.filters start", JSON.stringify({}))
if (!tempFilterData) {
console.error(
"api.hotels.filters error",
JSON.stringify({ error: null })
)
//Can't return null here since consuming component does not handle null yet
// return null
}
const validateFilterData = getFiltersSchema.safeParse(tempFilterData)
if (!tempFilterData) {
console.error(
"api.hotels.filters error",
JSON.stringify({ error: null })
)
//Can't return null here since consuming component does not handle null yet
// return null
}
const validateFilterData = getFiltersSchema.safeParse(tempFilterData)
if (!validateFilterData.success) {
console.error(
"api.hotels.filters validation error",
JSON.stringify({
error: validateFilterData.error,
})
)
throw badRequestError()
}
console.info("api.hotels.rates success", JSON.stringify({}))
return validateFilterData.data
}),
if (!validateFilterData.success) {
console.error(
"api.hotels.filters validation error",
JSON.stringify({
error: validateFilterData.error,
})
)
throw badRequestError()
}
console.info("api.hotels.rates success", JSON.stringify({}))
return validateFilterData.data
}),
}),
})

View File

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

View File

@@ -1,14 +1,9 @@
import { Metadata } from "next"
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> {
const metaData: MetaData | never[] | null =
await serverClient().contentstack.metaData.get()
if (Array.isArray(metaData)) {
if (!metaData) {
return {
title: "",
description: "",