@recras/online-booking-js
Version:
JS library for easy integration of Recras online booking and voucher sales
465 lines (449 loc) • 25.7 kB
JavaScript
class RecrasLanguageHelper {
static validLocales = ['de_DE', 'en_GB', 'nl_NL', 'sv_SE'];
constructor() {
this.defaultLocale = 'nl_NL';
this.locale = this.defaultLocale;
this.options = null;
//TODO: what is the best way to handle multiple locales?
this.i18n = {
de_DE: {
AGREE_ATTACHMENTS: 'Ich stimme den folgenden Unterlagen zu:',
ATTR_REQUIRED: 'Erforderlich',
BOOKING_DISABLED_AGREEMENT: 'Sie haben den Bedingungen noch nicht zugestimmt',
BOOKING_DISABLED_AMOUNTS_INVALID: 'Programmbeträge sind ungültig',
BOOKING_DISABLED_CONTACT_FORM_INVALID: 'Das Kontaktformular ist nicht korrekt ausgefüllt',
BOOKING_DISABLED_INVALID_DATE: 'Kein Datum ausgewählt',
BOOKING_DISABLED_INVALID_TIME: 'Keine Zeit ausgewählt',
BOOKING_DISABLED_REQUIRED_PRODUCT: 'Erforderliches Produkt noch nicht ausgewählt',
BUTTON_BOOK_NOW: 'Jetzt buchen',
BUTTON_BUY_NOW: 'Jetzt kaufen',
BUTTON_SUBMIT_CONTACT_FORM: 'Senden',
CONTACT_FORM_CHECKBOX_REQUIRED: 'Es muss mindestens eine Option aktiviert sein',
CONTACT_FORM_FIELD_INVALID: '"{FIELD_NAME}" ist ungültig',
CONTACT_FORM_FIELD_REQUIRED: '"{FIELD_NAME}" ist ein erforderliches Feld',
CONTACT_FORM_SUBMIT_FAILED: 'Das Kontaktformular konnte nicht gesendet werden. Bitte versuchen Sie es später noch einmal.',
CONTACT_FORM_SUBMIT_SUCCESS: 'Das Kontaktformular wurde erfolgreich gesendet.',
DATE: 'Datum',
DATE_FORMAT: 'TT-MM-JJJJ',
DATE_INVALID: 'Ungültiges datum',
DATE_PICKER_NEXT_MONTH: 'Nächsten Monat',
DATE_PICKER_PREVIOUS_MONTH: 'Vorheriger Monat',
DATE_PICKER_MONTH_JANUARY: 'Januar',
DATE_PICKER_MONTH_FEBRUARY: 'Februar',
DATE_PICKER_MONTH_MARCH: 'März',
DATE_PICKER_MONTH_APRIL: 'April',
DATE_PICKER_MONTH_MAY: 'Mai',
DATE_PICKER_MONTH_JUNE: 'Juni',
DATE_PICKER_MONTH_JULY: 'Juli',
DATE_PICKER_MONTH_AUGUST: 'August',
DATE_PICKER_MONTH_SEPTEMBER: 'September',
DATE_PICKER_MONTH_OCTOBER: 'Oktober',
DATE_PICKER_MONTH_NOVEMBER: 'November',
DATE_PICKER_MONTH_DECEMBER: 'Dezember',
DATE_PICKER_DAY_MONDAY_LONG: 'Montag',
DATE_PICKER_DAY_MONDAY_SHORT: 'Mo',
DATE_PICKER_DAY_TUESDAY_LONG: 'Dienstag',
DATE_PICKER_DAY_TUESDAY_SHORT: 'Di',
DATE_PICKER_DAY_WEDNESDAY_LONG: 'Mittwoch',
DATE_PICKER_DAY_WEDNESDAY_SHORT: 'Mi',
DATE_PICKER_DAY_THURSDAY_LONG: 'Donnerstag',
DATE_PICKER_DAY_THURSDAY_SHORT: 'Do',
DATE_PICKER_DAY_FRIDAY_LONG: 'Freitag',
DATE_PICKER_DAY_FRIDAY_SHORT: 'Fr',
DATE_PICKER_DAY_SATURDAY_LONG: 'Samstag',
DATE_PICKER_DAY_SATURDAY_SHORT: 'Sa',
DATE_PICKER_DAY_SUNDAY_LONG: 'Sonntag',
DATE_PICKER_DAY_SUNDAY_SHORT: 'So',
DISCOUNT_APPLIED: 'Rabatt eingelöst',
DISCOUNT_CHECK: 'Überprüfen',
DISCOUNT_TITLE: 'Rabattcode oder Gutschein',
DISCOUNT_INVALID: 'Ungültiger Rabattcode oder Gutschein',
ERR_AMOUNTS_NO_PACKAGE: 'Die Option "productAmounts" ist gesetzt, aber "package_id" ist nicht gesetzt',
ERR_CONTACT_FORM_EMPTY: 'Das Kontaktformular ist nicht ausgefüllt',
ERR_DATE_NO_SINGLE_PACKAGE: 'Die Option "date" erfordert ein einzelnes vorgefülltes Arrangement ("package_id")',
ERR_DATE_PAST: 'Option "date" ist ein Datum in der Vergangenheit',
ERR_GENERAL: 'Etwas ist schief gelaufen:',
ERR_INVALID_DATE: 'Die Option "date" ist keine gültige ISO 8601-Datumszeichenfolge (z. B. "2019-06-28")',
ERR_INVALID_ELEMENT: 'Option "Element" ist kein gültiges Element',
ERR_INVALID_HOSTNAME: 'Option "recras_hostname" ist ungültig.',
ERR_INVALID_LOCALE: 'Ungültiges Gebietsschema. Gültige Optionen sind: {LOCALES}',
ERR_INVALID_REDIRECT_URL: 'Ungültige redirect URL. Stellen Sie sicher, dass es mit http:// or https:// beginnt',
ERR_INVALID_TIME: 'Die Option "time" ist keine gültige Zeitzeichenfolge (z. B. "16:15")',
ERR_NO_ELEMENT: 'Option "element" nicht eingestellt.',
ERR_NO_FORM: 'Option "form_id" nicht eingestellt.',
ERR_NO_HOSTNAME: 'Option "recras_hostname" nicht eingestellt.',
ERR_NO_TIMES_FOR_DATE: 'Für diese Mengen sind an diesem Datum keine Zeiten mehr verfügbar. Versuchen Sie es mit einem anderen Datum.',
ERR_OPTIONS_INVALID: 'Options is not a "RecrasOptions" object',
GENDER_UNKNOWN: 'Unbekannte',
GENDER_MALE: 'Mann',
GENDER_FEMALE: 'Frau',
HEADING_PRICE: 'Preis',
HEADING_QUANTITY: 'Anzahl',
LOADING: 'Wird geladen...',
NO_PRODUCTS: 'Kein Produkt ausgewählt',
PRICE_TOTAL: 'Insgesamt',
PRICE_TOTAL_WITH_DISCOUNT: 'Insgesamt inklusive Rabatt',
PRODUCT_MAXIMUM: '(höchstens {MAXIMUM})',
PRODUCT_MINIMUM: '(mindestens {MINIMUM})',
PRODUCT_REQUIRED: '{NUM} {PRODUCT} benötigt {REQUIRED_AMOUNT} {REQUIRED_PRODUCT} um auch gebucht zu werden.',
TIME: 'Zeit',
TIME_FORMAT: 'UU:MM',
VOUCHER_ALREADY_APPLIED: 'Gutschein bereits eingelöst',
VOUCHER_APPLIED: 'Gutschein eingelöst',
VOUCHER_EMPTY: 'Leerer Gutscheincode',
VOUCHER_QUANTITY: 'Anzahl der Gutscheine',
VOUCHERS_DISCOUNT: 'Rabatt von Gutschein(en)',
},
en_GB: {
AGREE_ATTACHMENTS: 'I agree with the following documents:',
ATTR_REQUIRED: 'Required',
BOOKING_DISABLED_AGREEMENT: 'You have not agreed to the terms yet',
BOOKING_DISABLED_AMOUNTS_INVALID: 'Programme amounts are invalid',
BOOKING_DISABLED_CONTACT_FORM_INVALID: 'Contact form is not filled in correctly',
BOOKING_DISABLED_INVALID_DATE: 'No date selected',
BOOKING_DISABLED_INVALID_TIME: 'No time selected',
BOOKING_DISABLED_REQUIRED_PRODUCT: 'Required product not yet selected',
BUTTON_BOOK_NOW: 'Book now',
BUTTON_BUY_NOW: 'Buy now',
BUTTON_SUBMIT_CONTACT_FORM: 'Submit',
CONTACT_FORM_CHECKBOX_REQUIRED: 'At least one option must be checked',
CONTACT_FORM_FIELD_INVALID: '"{FIELD_NAME}" is invalid',
CONTACT_FORM_FIELD_REQUIRED: '"{FIELD_NAME}" is a required field',
CONTACT_FORM_SUBMIT_FAILED: 'The contact form could not be sent. Please try again later.',
CONTACT_FORM_SUBMIT_SUCCESS: 'The contact form was sent successfully.',
DATE: 'Date',
DATE_FORMAT: 'DD-MM-YYYY',
DATE_INVALID: 'Invalid date',
DATE_PICKER_NEXT_MONTH: 'Next month',
DATE_PICKER_PREVIOUS_MONTH: 'Previous month',
DATE_PICKER_MONTH_JANUARY: 'January',
DATE_PICKER_MONTH_FEBRUARY: 'February',
DATE_PICKER_MONTH_MARCH: 'March',
DATE_PICKER_MONTH_APRIL: 'April',
DATE_PICKER_MONTH_MAY: 'May',
DATE_PICKER_MONTH_JUNE: 'June',
DATE_PICKER_MONTH_JULY: 'July',
DATE_PICKER_MONTH_AUGUST: 'August',
DATE_PICKER_MONTH_SEPTEMBER: 'September',
DATE_PICKER_MONTH_OCTOBER: 'October',
DATE_PICKER_MONTH_NOVEMBER: 'November',
DATE_PICKER_MONTH_DECEMBER: 'December',
DATE_PICKER_DAY_MONDAY_LONG: 'Monday',
DATE_PICKER_DAY_MONDAY_SHORT: 'Mon',
DATE_PICKER_DAY_TUESDAY_LONG: 'Tuesday',
DATE_PICKER_DAY_TUESDAY_SHORT: 'Tue',
DATE_PICKER_DAY_WEDNESDAY_LONG: 'Wednesday',
DATE_PICKER_DAY_WEDNESDAY_SHORT: 'Wed',
DATE_PICKER_DAY_THURSDAY_LONG: 'Thursday',
DATE_PICKER_DAY_THURSDAY_SHORT: 'Thu',
DATE_PICKER_DAY_FRIDAY_LONG: 'Friday',
DATE_PICKER_DAY_FRIDAY_SHORT: 'Fri',
DATE_PICKER_DAY_SATURDAY_LONG: 'Saturday',
DATE_PICKER_DAY_SATURDAY_SHORT: 'Sat',
DATE_PICKER_DAY_SUNDAY_LONG: 'Sunday',
DATE_PICKER_DAY_SUNDAY_SHORT: 'Sun',
DISCOUNT_APPLIED: 'Discount applied',
DISCOUNT_CHECK: 'Check',
DISCOUNT_TITLE: 'Discount code or voucher',
DISCOUNT_INVALID: 'Invalid discount code or voucher',
ERR_AMOUNTS_NO_PACKAGE: 'Option "productAmounts" is set, but "package_id" is not set',
ERR_CONTACT_FORM_EMPTY: 'Contact form is not filled in',
ERR_DATE_NO_SINGLE_PACKAGE: 'Option "date" requires a single pre-filled package ("package_id")',
ERR_DATE_PAST: 'Option "date" is a date in the past',
ERR_GENERAL: 'Something went wrong:',
ERR_INVALID_DATE: 'Option "date" is not a valid ISO 8601 date string (e.g. "2019-06-28")',
ERR_INVALID_ELEMENT: 'Option "element" is not a valid Element',
ERR_INVALID_HOSTNAME: 'Option "recras_hostname" is invalid.',
ERR_INVALID_LOCALE: 'Invalid locale. Valid options are: {LOCALES}',
ERR_INVALID_REDIRECT_URL: 'Invalid redirect URL. Make sure you it starts with http:// or https://',
ERR_INVALID_TIME: 'Option "time" is not a valid time string (e.g. "16:15")',
ERR_NO_ELEMENT: 'Option "element" not set.',
ERR_NO_FORM: 'Option "form_id" not set.',
ERR_NO_HOSTNAME: 'Option "recras_hostname" not set.',
ERR_NO_TIMES_FOR_DATE: 'There are no more times available on this date for these quantities. Try a different date.',
ERR_OPTIONS_INVALID: 'Options is not a "RecrasOptions" object',
GENDER_UNKNOWN: 'Unknown',
GENDER_MALE: 'Male',
GENDER_FEMALE: 'Female',
HEADING_PRICE: 'Price',
HEADING_QUANTITY: 'Quantity',
LOADING: 'Loading...',
NO_PRODUCTS: 'No product selected',
PRICE_TOTAL: 'Total',
PRICE_TOTAL_WITH_DISCOUNT: 'Total including discount',
PRODUCT_MAXIMUM: '(at most {MAXIMUM})',
PRODUCT_MINIMUM: '(at least {MINIMUM})',
PRODUCT_REQUIRED: '{NUM} {PRODUCT} requires {REQUIRED_AMOUNT} {REQUIRED_PRODUCT} to also be booked.',
TIME: 'Time',
TIME_FORMAT: 'HH:MM',
VOUCHER_ALREADY_APPLIED: 'Voucher already applied',
VOUCHER_APPLIED: 'Voucher applied',
VOUCHER_EMPTY: 'Empty voucher code',
VOUCHER_QUANTITY: 'Number of vouchers',
VOUCHERS_DISCOUNT: 'Discount from voucher(s)',
},
nl_NL: {
AGREE_ATTACHMENTS: 'Ik ga akkoord met de volgende gegevens:',
ATTR_REQUIRED: 'Vereist',
BOOKING_DISABLED_AGREEMENT: 'Je bent nog niet akkoord met de voorwaarden',
BOOKING_DISABLED_AMOUNTS_INVALID: 'Aantallen in programma zijn ongeldig',
BOOKING_DISABLED_CONTACT_FORM_INVALID: 'Contactformulier is niet correct ingevuld',
BOOKING_DISABLED_INVALID_DATE: 'Geen datum geselecteerd',
BOOKING_DISABLED_INVALID_TIME: 'Geen tijd geselecteerd',
BOOKING_DISABLED_REQUIRED_PRODUCT: 'Vereist product nog niet geselecteerd',
BUTTON_BOOK_NOW: 'Nu boeken',
BUTTON_BUY_NOW: 'Nu kopen',
BUTTON_SUBMIT_CONTACT_FORM: 'Versturen',
CONTACT_FORM_CHECKBOX_REQUIRED: 'Ten minste één optie moet aangevinkt worden',
CONTACT_FORM_FIELD_INVALID: '"{FIELD_NAME}" is ongeldig',
CONTACT_FORM_FIELD_REQUIRED: '"{FIELD_NAME}" is een verplicht veld',
CONTACT_FORM_SUBMIT_FAILED: 'Het contactformulier kon niet worden verstuurd. Probeer het later nog eens.',
CONTACT_FORM_SUBMIT_SUCCESS: 'Het contactformulier is succesvol verstuurd.',
DATE: 'Datum',
DATE_FORMAT: 'DD-MM-JJJJ',
DATE_INVALID: 'Ongeldige datum',
DATE_PICKER_NEXT_MONTH: 'Volgende maand',
DATE_PICKER_PREVIOUS_MONTH: 'Vorige maand',
DATE_PICKER_MONTH_JANUARY: 'Januari',
DATE_PICKER_MONTH_FEBRUARY: 'Februari',
DATE_PICKER_MONTH_MARCH: 'Maart',
DATE_PICKER_MONTH_APRIL: 'April',
DATE_PICKER_MONTH_MAY: 'Mei',
DATE_PICKER_MONTH_JUNE: 'Juni',
DATE_PICKER_MONTH_JULY: 'Juli',
DATE_PICKER_MONTH_AUGUST: 'Augustus',
DATE_PICKER_MONTH_SEPTEMBER: 'September',
DATE_PICKER_MONTH_OCTOBER: 'Oktober',
DATE_PICKER_MONTH_NOVEMBER: 'November',
DATE_PICKER_MONTH_DECEMBER: 'December',
DATE_PICKER_DAY_MONDAY_LONG: 'Maandag',
DATE_PICKER_DAY_MONDAY_SHORT: 'Ma',
DATE_PICKER_DAY_TUESDAY_LONG: 'Dinsdag',
DATE_PICKER_DAY_TUESDAY_SHORT: 'Di',
DATE_PICKER_DAY_WEDNESDAY_LONG: 'Woensdag',
DATE_PICKER_DAY_WEDNESDAY_SHORT: 'Wo',
DATE_PICKER_DAY_THURSDAY_LONG: 'Donderdag',
DATE_PICKER_DAY_THURSDAY_SHORT: 'Do',
DATE_PICKER_DAY_FRIDAY_LONG: 'Vrijdag',
DATE_PICKER_DAY_FRIDAY_SHORT: 'Vr',
DATE_PICKER_DAY_SATURDAY_LONG: 'Zaterdag',
DATE_PICKER_DAY_SATURDAY_SHORT: 'Za',
DATE_PICKER_DAY_SUNDAY_LONG: 'Zondag',
DATE_PICKER_DAY_SUNDAY_SHORT: 'Zo',
DISCOUNT_APPLIED: 'Kortingscode toegepast',
DISCOUNT_CHECK: 'Controleren',
DISCOUNT_TITLE: 'Kortingscode of tegoedbon',
DISCOUNT_INVALID: 'Ongeldige kortingscode of tegoedbon',
ERR_AMOUNTS_NO_PACKAGE: 'Optie "productAmounts" is ingesteld, maar "package_id" is niet ingesteld',
ERR_CONTACT_FORM_EMPTY: 'Contactformulier is niet ingevuld',
ERR_DATE_NO_SINGLE_PACKAGE: 'Optie "date" vereist een enkel vooraf ingevuld arrangement ("package_id")',
ERR_DATE_PAST: 'Optie "date" is een datum in het verleden',
ERR_GENERAL: 'Er ging iets mis:',
ERR_INVALID_DATE: 'Optie "date" is geen geldige ISO 8601-datumstring (bijv. "2019-06-28")',
ERR_INVALID_ELEMENT: 'Optie "element" is geen geldig Element',
ERR_INVALID_HOSTNAME: 'Optie "recras_hostname" is ongeldig.',
ERR_INVALID_LOCALE: 'Ongeldige locale. Geldige opties zijn: {LOCALES}',
ERR_INVALID_REDIRECT_URL: 'Ongeldige redirect-URL. Zorg ervoor dat deze begint met http:// of https://',
ERR_INVALID_TIME: 'Optie "time" is geen geldige tijd-string (bijv. "16:15")',
ERR_NO_ELEMENT: 'Optie "element" niet ingesteld.',
ERR_NO_FORM: 'Optie "form_id" niet ingesteld.',
ERR_NO_HOSTNAME: 'Optie "recras_hostname" niet ingesteld.',
ERR_NO_TIMES_FOR_DATE: 'Er zijn geen tijden meer beschikbaar op deze datum voor deze aantallen. Probeer een andere datum.',
ERR_OPTIONS_INVALID: 'Opties is geen "RecrasOptions"-object',
GENDER_UNKNOWN: 'Onbekend',
GENDER_MALE: 'Man',
GENDER_FEMALE: 'Vrouw',
HEADING_PRICE: 'Prijs',
HEADING_QUANTITY: 'Aantal',
LOADING: 'Laden...',
NO_PRODUCTS: 'Geen product gekozen',
PRICE_TOTAL: 'Totaal',
PRICE_TOTAL_WITH_DISCOUNT: 'Totaal inclusief korting',
PRODUCT_MAXIMUM: '(maximaal {MAXIMUM})',
PRODUCT_MINIMUM: '(minimaal {MINIMUM})',
PRODUCT_REQUIRED: '{NUM} {PRODUCT} vereist dat ook {REQUIRED_AMOUNT} {REQUIRED_PRODUCT} geboekt wordt.',
TIME: 'Tijd',
TIME_FORMAT: 'UU:MM',
VOUCHER_ALREADY_APPLIED: 'Tegoedbon al toegepast',
VOUCHER_APPLIED: 'Tegoedbon toegepast',
VOUCHER_EMPTY: 'Lege tegoedbon',
VOUCHER_QUANTITY: 'Aantal tegoedbonnen',
VOUCHERS_DISCOUNT: 'Korting uit tegoedbon(nen)',
},
sv_SE: {
AGREE_ATTACHMENTS: 'Jag håller med följande information:',
ATTR_REQUIRED: "Obligatoriskt",
BOOKING_DISABLED_AGREEMENT: 'Du håller inte med villkoren ännu',
BOOKING_DISABLED_AMOUNTS_INVALID: 'Siffrorna i programmet är ogiltiga',
BOOKING_DISABLED_CONTACT_FORM_INVALID: 'Kontaktformuläret är inte korrekt ifyllt',
BOOKING_DISABLED_INVALID_DATE: 'Inget datum valt',
BOOKING_DISABLED_INVALID_TIME: 'Ingen tid vald',
BOOKING_DISABLED_REQUIRED_PRODUCT: "Nödvändig produkt har ännu inte valts",
BUTTON_BOOK_NOW: 'Boka nu',
BUTTON_BUY_NOW: 'Köp nu',
BUTTON_SUBMIT_CONTACT_FORM: 'Skicka',
CONTACT_FORM_CHECKBOX_REQUIRED: 'Minst ett alternativ måste markeras',
CONTACT_FORM_FIELD_INVALID: '"{FIELD_NAME}" är ogiltig',
CONTACT_FORM_FIELD_REQUIRED: '"{FIELD_NAME}" är ett obligatoriskt fält',
CONTACT_FORM_SUBMIT_FAILED: 'Kontaktformuläret kunde inte skickas. Vänligen försök igen senare.',
CONTACT_FORM_SUBMIT_SUCCESS: 'Kontaktformuläret har skickats.',
DATUM: 'Datum',
DATE_FORMAT: 'DD-MM-ÅÅÅÅ',
DATE_INVALID: "Ogiltigt datum",
DATE_PICKER_NEXT_MONTH: "Nästa månad",
DATE_PICKER_PREVIOUS_MONTH: "Förra månaden",
DATE_PICKER_MONTH_JANUARI: "januari",
DATE_PICKER_MONTH_FEBRUARY: "februari",
DATE_PICKER_MONTH_MARCH: "mars",
DATE_PICKER_MONTH_APRIL: "april",
DATE_PICKER_MONTH_MAY: "aaj",
DATE_PICKER_MONTH_JUNE: "juni",
DATE_PICKER_MONTH_JULY: "Juli",
DATE_PICKER_MONTH_AUGUST: "augusti",
DATE_PICKER_MONTH_SEPTEMBER: "september",
DATE_PICKER_MONTH_OCTOBER: "oktober",
DATE_PICKER_MONTH_NOVEMBER: "november",
DATE_PICKER_MONTH_DECEMBER: "december",
DATE_PICKER_DAY_MONDAY_LONG: "Måndag",
DATE_PICKER_DAY_MONDAY_SHORT: 'Mån',
DATE_PICKER_DAY_TUESDAY_LONG: "Tisdag",
DATE_PICKER_DAY_TUESDAY_SHORT: 'Tis',
DATE_PICKER_DAY_WEDNESDAY_LONG: "Onsdag",
DATE_PICKER_DAY_WEDNESDAY_SHORT: "Ons",
DATE_PICKER_DAY_THURSDAY_LONG: "Torsdag",
DATE_PICKER_DAY_THURSDAY_SHORT: "Tors",
DATE_PICKER_DAY_FRIDAY_LONG: "Fredag",
DATE_PICKER_DAY_FRIDAY_SHORT: "Fre",
DATE_PICKER_DAY_SATURDAY_LONG: 'Lördag',
DATE_PICKER_DAY_SATURDAY_SHORT: 'Lör',
DATE_PICKER_DAY_SUNDAY_LONG: "Söndag",
DATE_PICKER_DAY_SUNDAY_SHORT: "Sön",
DISCOUNT_APPLIED: 'Rabattkod tillämpas',
DISCOUNT_CHECK: "Kontrollera",
DISCOUNT_TITLE: "Rabattkod eller kupong",
DISCOUNT_INVALID: "Ogiltig rabattkod eller kupong",
ERR_AMOUNTS_NO_PACKAGE: 'Alternativ "productAmounts" är inställt, men "package_id" är inte inställt',
ERR_CONTACT_FORM_EMPTY: 'Kontaktformuläret är inte ifyllt',
ERR_DATE_NO_SINGLE_PACKAGE: 'Alternativ "date" kräver ett enda förfyllt paket ("package_id")',
ERR_DATE_PAST: 'Alternativ "date" är ett datum tidigare',
ERR_GENERAL: 'Något gick fel:',
ERR_INVALID_DATE: 'Alternativ "date" är inte en giltig ISO 8601-datumsträng (t.ex. "2019-06-28")',
ERR_INVALID_ELEMENT: 'Alternativet "element" är inte ett giltigt element',
ERR_INVALID_HOSTNAME: 'Alternativet "recras_hostname" är ogiltigt.',
ERR_INVALID_LOCALE: 'Ogiltig land-språkkombination. Giltiga alternativ är: {LOCALES} ',
ERR_INVALID_REDIRECT_URL: 'Ogiltig omdirigerings-URL. Se till att det börjar med http:// eller https:// ',
ERR_INVALID_TIME: 'Alternativ "time" är inte en giltig tidsnotation (t.ex. "16:15")',
ERR_NO_ELEMENT: 'Alternativet "element" är inte inställt.',
ERR_NO_FORM: 'Alternativ "form_id" inte inställt.',
ERR_NO_HOSTNAME: 'Alternativ "recras_hostname" inte inställt.',
ERR_NO_TIMES_FOR_DATE: 'Det finns inga fler tillgängliga tider på detta datum för dessa nummer. Prova ett annat datum. ',
ERR_OPTIONS_INVALID: 'Alternativ är inte ett "RecrasOptions"-objekt',
GENDER_UNKNOWN: "Okänd",
GENDER_MALE: "Man",
GENDER_FEMALE: "Kvinna",
HEADING_PRICE: "Pris",
HEADING_QUANTITY: "Antal",
LOADING: 'Laddar ...',
NO_PRODUCTS: 'Ingen produkt vald',
PRICE_TOTAL: 'Totalt',
PRICE_TOTAL_WITH_DISCOUNT: "Totalt inklusive rabatt",
PRODUCT_MAXIMUM: '(maximalt {MAXIMUM})',
PRODUCT_MINIMUM: '(minimalt {MINIMUM})',
PRODUCT_REQUIRED: '{NUM} {PRODUCT} kräver att {REQUIRED_AMOUNT} {REQUIRED_PRODUCT} också bokas.',
TIME: 'Tid',
TIME_FORMAT: 'TT:MM',
VOUCHER_ALREADY_APPLIED: 'Kupongen är redan inlöst',
VOUCHER_APPLIED: 'Kupong inlöst',
VOUCHER_EMPTY: "Tom kupong",
VOUCHER_QUANTITY: 'Antal kuponger',
VOUCHERS_DISCOUNT: 'Rabatt från kupong(er)',
}
};
}
error(msg) {
console.log('Error', msg); //TODO
}
extractTags(msg) {
const alphanumericWithUnderscore = '[a-zA-Z0-9_]';
const regexPartMulticolumn = '((?:\\((?:\\w+)(?::[^)]*)?\\))*)';
const regex = new RegExp('{' + alphanumericWithUnderscore + '+' + regexPartMulticolumn + '}', 'g');
let tags = msg.match(regex);
if (!Array.isArray(tags)) {
return [];
}
return tags.map(tag => tag.substring(1, tag.length - 1)); // Strip { and }
}
filterTags(msg, packageID) {
let tags = this.extractTags(msg);
if (tags.length === 0) {
return Promise.resolve(msg);
}
return RecrasHttpHelper.postJson(
this.options.getApiBase() + 'tagfilter',
{
tags: tags,
context: {
packageID: packageID,
},
},
this.error
)
.then(filtered => {
Object.keys(filtered).forEach(tag => {
msg = msg.split('{' + tag + '}').join(filtered[tag]);
});
return msg;
});
}
formatLocale(what) {
switch (what) {
case 'currency':
return this.locale.replace('_', '-').toUpperCase();
default:
return this.locale;
}
}
formatPrice(price) {
return parseFloat(price).toLocaleString(this.formatLocale('currency'), {
currency: this.currency,
style: 'currency',
});
}
static isValid(locale) {
return (this.validLocales.indexOf(locale) > -1);
}
setCurrency() {
const errorHandler = err => {
this.currency = 'eur';
this.error(err);
};
return RecrasHttpHelper.fetchJson(this.options.getApiBase() + 'instellingen/currency', errorHandler)
.then(setting => {
this.currency = setting.waarde;
});
}
setLocale(locale) {
this.locale = locale;
}
setOptions(options) {
this.options = options;
return this.setCurrency();
}
translate(string, vars = {}) {
let translated;
if (this.i18n[this.locale] && this.i18n[this.locale][string]) {
translated = this.i18n[this.locale][string];
} else if (this.i18n.en_GB[string]) {
translated = this.i18n.en_GB[string];
} else {
translated = string;
console.warn('String not translated: ' + string);
}
if (Object.keys(vars).length > 0) {
Object.keys(vars).forEach(key => {
translated = translated.replace('{' + key + '}', vars[key]);
});
}
return translated;
}
}