import formatTimeToString from '../utils/formatTimeToString'
const general = {
timeFormats: {
days: {
1: () => `deň`,
2: () => `dni`,
5: () => `dní`,
},
hours: {
1: () => `hodina`,
2: () => `hodiny`,
5: () => `hodín`,
},
minutes: {
1: () => `minúta`,
2: () => `minúty`,
5: () => `minút`,
},
seconds: {
1: () => `sekunda`,
2: () => `sekundy`,
5: () => `sekúnd`,
},
},
dateFormats: {
months: {
[`01`]: () => `január`,
[`02`]: () => `február`,
[`03`]: () => `marec`,
[`04`]: () => `apríl`,
[`05`]: () => `máj`,
[`06`]: () => `jún`,
[`07`]: () => `júl`,
[`08`]: () => `august`,
[`09`]: () => `september`,
[`10`]: () => `október`,
[`11`]: () => `november`,
[`12`]: () => `december`,
}
},
functionWords: {
and: () => `a`,
},
errors: {
turnstile: {
unavailable: () => `nemožno kontaktovať Turnstile. prosím skúste to znova.`,
noToken: () => `Turnstile token nebol poskytnutý. prosím skúste to znova.`,
invalidResponse: () => `neplatná Turnstile odpoveď. prosím skúste to znova.`,
keyUsedOrExpired: () => `Turnstile kľúč už bol použitý alebo vypršal. prosím skúste to znova.`,
},
},
adjectives: () => [
"rozkošný", "dobrodružný", "prijateľný", "ostražitý", "živý", "pobavený",
"nahnevaný", "otrávený", "otravný", "znepokojený", "arogantný", "zahanbený",
"atraktívny", "priemerný", "strašný", "zlý", "krásny", "lepší",
"zmätený", "čierny", "modrý", "modrooký", "červenajúci", "znudený",
"rozumný", "odvážny", "rozbitný", "jasný", "zaneprázdnený", "pokojný", "opatrný",
"obozretný", "pôvabný", "veselý", "čistý", "jasný", "šikovný",
"oblačný", "nemotorný", "farebný", "bojovný", "pohodlný", "ustarostený",
"odsúdený", "zmätený", "spolupracujúci", "odvážny", "bláznivý", "strašidelný",
"preplnený", "zvedavý", "roztomilý", "nebezpečný", "tmavý", "oslnivý",
"nehybný", "nádherný", "ťažký", "odlišný", "rozrušený", "rozosmiaty",
"pochybovačný", "fádny", "nudný", "nedočkavý", "ľahký", "povznesený", "elegantný",
"zahanbený", "očarujúci", "povzbudivý", "energetický", "nadšený",
"závistlivý", "nadšený", "drahý", "bujný", "férový", "verný",
"slávny", "ozdobný", "fantastický", "rýchly", "špinavý", "jemný", "pochabý",
"krehký", "slabý", "zbesilý", "priateľský", "vystrašený", "vtipný",
"jemný", "nadaný", "očarujúci", "žiariaci", "slávny", "dobrý",
"nádherný", "pôvabný", "zarmútený", "bizarný", "mrzutý", "pohľadný",
"šťastný", "zdravý", "užitočný", "bezmocný", "zábavný", "domácky",
"hrozný", "hladný", "zranený", "chorý", "dôležitý", "nemožný",
"lacný", "nevinný", "všímavý", "inteligentný", "zaujatý",
"svrbiaci", "žiarlivý", "nervózny", "veselý", "radostný", "láskavý", "lenivý",
"ľahký", "živý", "osamelý", "dlhý", "pôvabný", "šťastný", "veľkolepý",
"hmlistý", "moderný", "nehybný", "blatistý", "kašovitý", "tajomný",
"odporný", "neposlušný", "nervózny", "milý", "bláznivý", "poslušný", "odporný",
"zvláštny", "otvorený", "poburujúci", "vynikajúci", "spanikárený", "dokonalý",
"prostý", "príjemný", "vyrovnaný", "zdvorilý", "mocný", "vzácny",
"pichľavý", "hrdý", "zmätený", "staromódny", "skutočný", "uľavený", "odpudivý",
"bohatý", "strašidelný", "sebecký", "lesklý", "plachý", "hlúpy", "ospalý", "usmievavý",
"zahmlený", "boľavý", "iskrivý", "veľkolepý", "bezchybný", "búrlivý",
"divný", "hlúpy", "úspešný", "super", "talentovaný", "krotký", "nežný",
"napätý", "hrozný", "vďačný", "premýšľavý", "bezohľadný", "unavený",
"tvrdý", "trápiaci", "nezaujatý", "nevzhľadný", "nezvyčajný", "rozrušený",
"napätý", "rozľahlý", "víťazný", "živý", "túlajúci", "unavený",
"zlý", "udivený", "divoký", "vtipný", "ustarostený", "znepokojujúci", "nesprávny",
"bláznivý", "horlivý"
],
nouns: () => ({
"herec": "m", "lietadlo": "n", "letisko": "n", "alarm": "m", "aligátor": "m", "abeceda": "f",
"sanitka": "f", "zviera": "n", "odpoveď": "f", "mravec": "m", "jablko": "n", "spotrebič": "m",
"zástera": "f", "oblúk": "m", "rameno": "n", "armáda": "f", "šíp": "m", "popolník": "m", "asteroid": "m",
"autor": "m", "avokádo": "n", "dieťa": "n", "chrbát": "m", "balón": "m", "banán": "m", "skupina": "f",
"banka": "f", "holič": "m", "základňa": "f", "košík": "m", "basketbal": "m", "netopier": "m", "kúpeľ": "m",
"pláž": "f", "medveď": "m", "brada": "f", "posteľ": "f", "včela": "f", "hovädzie": "n", "chrobák": "m", "zvonec": "m",
"opasok": "m", "lavička": "f", "bareta": "f", "bobuľa": "f", "bicykel": "m", "bicykel": "m", "vták": "m",
"narodeniny": "m", "hryz": "m", "blok": "m", "čln": "m", "kniha": "f", "topánka": "f", "hranica": "f",
"fľaša": "f", "hranica": "f", "krabica": "f", "chlapec": "m", "brzda": "f", "chlieb": "m", "most": "m",
"divoký kôň": "m", "brat": "m", "kefa": "f", "bublina": "f", "vedro": "n", "budova": "f",
"žiarovka": "f", "zajačik": "m", "autobus": "m", "motýľ": "m", "gombík": "m", "kapusta": "f", "kaktus": "m",
"koláč": "m", "kalkulačka": "f", "kalendár": "m", "ťava": "f", "kamera": "f", "tábor": "m", "sviečka": "f",
"kanoe": "n", "plátno": "n", "čiapka": "f", "titulok": "m", "auto": "n", "karta": "f", "tesár": "m",
"kočiar": "m", "mrkva": "f", "vozík": "m", "hrad": "m", "mačka": "f", "dobytok": "m", "zeler": "m",
"violončelo": "n", "cement": "m", "reťaz": "f", "stolička": "f", "krieda": "f", "kanál": "m", "syr": "m",
"čerešňa": "f", "šach": "m", "kura": "n", "deti": "n", "šimpanz": "m", "brada": "f",
"kostol": "m", "mesto": "n", "mušľa": "f", "hodiny": "f", "látka": "f", "oblak": "m", "ďatelina": "f",
"klub": "m", "tréner": "m", "uhlie": "n", "pobrežie": "n", "kabát": "m", "pavučina": "f", "cievka": "f", "obojok": "m",
"farba": "f", "kométa": "f", "kompas": "m", "počítač": "m", "kondicionér": "m", "šnúra": "f",
"kork": "m", "kukurica": "f", "pohovka": "f", "krajina": "f", "krava": "f", "krab": "m", "trhlina": "f", "debna": "f",
"pastelka": "f", "cvrček": "m", "krokodíl": "m", "vrana": "f", "koruna": "f", "kôrka": "f", "šálka": "f",
"záves": "m", "vankúš": "m", "valec": "m", "pes": "m", "osol": "m", "dvere": "f", "drak": "m",
"odtok": "m", "zásuvka": "f", "šaty": "f", "kvapka": "f", "kačica": "f", "prach": "m", "orol": "m", "ucho": "n",
"zem": "f", "vajce": "n", "baklažán": "m", "lakeť": "m", "slon": "m", "motor": "m", "oko": "n",
"tvár": "f", "továreň": "f", "víla": "f", "rodina": "f", "ventilátor": "m", "farma": "f", "pierko": "n",
"hostina": "f", "plot": "m", "pole": "n", "vlajka": "f", "kvet": "m", "flauta": "f", "mucha": "f", "hmla": "f",
"les": "m", "vidlička": "f", "fontána": "f", "žaba": "f", "ovocie": "n", "nábytok": "m", "garáž": "f",
"záhrada": "f", "brána": "f", "drahokam": "m", "duch": "m", "žirafa": "f", "sklo": "n", "rukavica": "f",
"koza": "f", "zlato": "n", "hus": "f", "gorila": "f", "hrozno": "n", "tráva": "f", "gitara": "f",
"vlasy": "m", "hala": "f", "klobúk": "m", "vrtuľník": "m", "prilba": "f", "med": "m", "roh": "m",
"kôň": "m", "nemocnica": "f", "dom": "m", "ostrov": "m", "bunda": "f", "nádoba": "f", "medúza": "f",
"kengura": "f", "kanvica": "f", "kľúč": "m", "klávesnica": "f", "kráľ": "m", "kuchyňa": "f", "šarkan": "m",
"mačiatko": "n", "lampa": "f", "list": "m", "knižnica": "f", "maják": "m", "lev": "m", "jašterica": "f",
"zámok": "m", "obed": "m", "magnet": "m", "mapa": "f", "maska": "f", "melón": "m", "opica": "f", "mesiac": "m",
"vrch": "m", "myš": "f", "ústa": "n", "klinec": "m", "náhrdelník": "m", "ihla": "f", "hniezdo": "n",
"nos": "m", "zápisník": "m", "oceán": "m", "pomaranč": "m", "sova": "f", "farba": "f", "nohavice": "f",
"papier": "m", "papagáj": "m", "ceruzka": "f", "klavír": "m", "vankúš": "m", "pizza": "f", "planéta": "f",
"rastlina": "f", "vrecko": "n", "zemiak": "m", "väznica": "f", "tekvica": "f", "králik": "m", "dážď": "m",
"dúha": "f", "prsteň": "m", "rieka": "f", "robot": "m", "raketa": "f", "koreň": "m", "lano": "n",
"plachta": "f", "škola": "f", "nožnice": "f", "more": "n", "topánka": "f", "obloha": "f", "slimák": "m", "had": "m",
"sneh": "m", "mydlo": "n", "ponožka": "f", "lyžica": "f", "hviezda": "f", "slnko": "n", "stôl": "m", "tiger": "m",
"paradajka": "f", "zub": "m", "vlak": "m", "strom": "m", "dáždnik": "m", "údolie": "n", "váza": "f",
"vozeň": "m", "stena": "f", "veľryba": "f", "koleso": "n", "okno": "n", "krídlo": "n", "vlk": "m", "červ": "m",
"zebra": "f", "zoo": "f"
}),
generateName: () => {
const adjectives = general.adjectives()
const nouns = Object.keys(general.nouns())
const genders = general.nouns()
const randomAdjective = adjectives[Math.floor(Math.random() * adjectives.length)];
const randomNoun = nouns[Math.floor(Math.random() * nouns.length)];
const gender = genders[randomNoun];
let finalAdjective = randomAdjective;
// Handle Slovak grammar
if (gender === "f") {
finalAdjective = finalAdjective.replace(/[ýí]$/, "á");
finalAdjective = finalAdjective.replace(/[yi]$/, "a");
} else if (gender === "n") {
finalAdjective = finalAdjective.replace(/[ýí]$/, "é");
finalAdjective = finalAdjective.replace(/[yi]$/, "e");
}
// Capitalize first letters and return
const cappedAdjective = finalAdjective.charAt(0).toUpperCase() + finalAdjective.slice(1);
const cappedNoun = randomNoun.charAt(0).toUpperCase() + randomNoun.slice(1);
return `${cappedAdjective} ${cappedNoun}`;
}
}
const icons = {
tempIcon: () => `
`,
pressureIcon: () => `
`,
humidityIcon: () => `
`,
bluetoothConnectionIcon: () => `
`
}
export default {
general,
icons,
emails: {
auth: {
subject: () => `prihlasovací link`,
text: (details) => `
dobrý deň,
môžete sa prihlásiť nasledujúcim kódom: ${details?.code}
alebo nasledujúcim linkom: ${details?.link}
ak ste tento email nevyžiadali, môžete ho kľudne ignorovať.
${process.env.APP_NAME}
`,
},
stations: {
warningAdded: {
subject: () => `nové varovania!`,
text: (details) => `
dobrý deň,
na vašej stanici ${details.stationName} boli aktivované nasledujúce varovania:
${details.warnings.join('\n')}
môžete ich sledovať na nasledujúcom linku: ${details.stationLink}
${process.env.APP_NAME} ${new Date().getFullYear()}
`,
},
warningRemoved: {
subject: () => `varovania zrušené`,
text: (details) => `
dobrý deň,
na vašej stanici ${details.stationName} boli deaktivované nasledujúce varovania:
${details.warnings.join('\n')}
môžete ich sledovať na nasledujúcom linku: ${details.stationLink}
${process.env.APP_NAME} ${new Date().getFullYear()}
`,
}
}
},
auth: {
errors: {
invalidEmail: () => `musíte zadať platný email.`,
noVerificationToken: () => `nebol poskytnutý žiadny verifikačný token. prosím skúste to znova.`,
verificationTokenUsedOrExpired: () => `verifikačný token už bol použitý alebo vypršal. prosím skúste to znova.`,
invalidVerificationCode: () => `neplatný verifikačný kód. prosím skúste to znova.`,
loginNeeded: () => `najprv sa prihláste prosím.`,
ratelimits: {
email: (details) => {
if (!Number.parseInt(details?.duration)) return `príliš veľa žiadostí pre tento email. skúste to znova neskôr.`
return `príliš veľa žiadostí pre tento email. skúste to znova o ${formatTimeToString(general.timeFormats, general.functionWords.and(), details?.duration * 1000)}.`
},
ip: (details) => {
if (!Number.parseInt(details?.duration)) return `poslali ste príliš veľa žiadostí. skúste to znova neskôr.`
return `poslali ste príliš veľa žiadostí. skúste to znova o ${formatTimeToString(general.timeFormats, general.functionWords.and(), details?.duration * 1000)}.`
},
code: () => `zadali ste príliš veľa zlých kódov. musíte požiadať o novú verifikáciu.`,
},
turnstile: general.errors.turnstile,
},
},
settings: {
errors: {
invalidEmail: () => `musíte zadať platný email.`,
emailTaken: (details) => `používateľ so zadaným emailom (${details?.newEmail}) už existuje.`,
turnstile: general.errors.turnstile,
},
},
stations: {
errors: {
noName: () => `musíte zadať meno.`,
invalidOwner: () => `musíte zadať platný email vlastníka.`,
ownerUserNotFound: (details) => `žiadny používateľ so zadaným emailom (${details?.newOwnerEmail}) neexistuje.`,
invalidSubowner: () => `musíte zadať platný email podvlastníka.`,
subownerUserNotFound: (details) => `žiadny používateľ so zadaným emailom (${details?.subownerEmail}) neexistuje.`,
turnstile: general.errors.turnstile,
},
warnings: {
highIndoorTemp: () => `Zistená vysoká vnútorná teplota!`,
highIndoorPressure: () => `Zistený vysoký vnútorný tlak!`,
highIndoorHumidity: () => `Zistená vysoká vnútorná vlhkosť!`,
lowIndoorTemp: () => `Zistená nízka vnútorná teplota!`,
lowIndoorPressure: () => `Zistená nízky vnútorný tlak!`,
lowIndoorHumidity: () => `Zistená nízka vnútorná vlhkosť!`,
highOutdoorTemp: () => `Zistená vysoká vonkajšia teplota!`,
highOutdoorPressure: () => `Zistená vysoký vonkajší tlak!`,
highOutdoorHumidity: () => `Zistená vysoká vonkajšia vlhkosť!`,
lowOutdoorTemp: () => `Zistená nízka vonkajšia teplota!`,
lowOutdoorPressure: () => `Zistená nízky vonkajší tlak!`,
lowOutdoorHumidity: () => `Zistená nízka vonkajšia vlhkosť!`,
},
history: {
properties: {
indoorTemp: () => `${icons.tempIcon()} vnutorná teplota`,
indoorPressure: () => `${icons.pressureIcon()} vnutorný tlak`,
indoorHumidity: () => `${icons.humidityIcon()} vnutorná vlhkosť`,
outdoorConnected: () => `${icons.bluetoothConnectionIcon()} pripojenie externej jednotky`,
outdoorTemp: () => `${icons.tempIcon()} vonkajšia teplota`,
outdoorPressure: () => `${icons.pressureIcon()} vonkajší tlak`,
outdoorHumidity: () => `${icons.humidityIcon()} vonkajšia vlhkosť`,
},
},
},
websocket: {
keepalive: () => `beep`,
dataSaved: (details) => `úspešne uložené dáta pre ${details?.meteostanica?.name}`,
errors: {
missingFields: () => `chýbajú dôležité polia: indoorTemp, indoorPressure, indoorHumidity, indoorAltitude, outdoorConnected, outdoorTemp, outdoorPressure, outdoorHumidity, outdoorAltitude`,
invalidKey: (details) => `zadali ste neplatný websocket kľúč stanice (${details.key})`,
},
}
}