sk.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. import formatTimeToString from '../utils/formatTimeToString'
  2. const general = {
  3. timeFormats: {
  4. days: {
  5. 1: () => `deň`,
  6. 2: () => `dni`,
  7. 5: () => `dní`,
  8. },
  9. hours: {
  10. 1: () => `hodina`,
  11. 2: () => `hodiny`,
  12. 5: () => `hodín`,
  13. },
  14. minutes: {
  15. 1: () => `minúta`,
  16. 2: () => `minúty`,
  17. 5: () => `minút`,
  18. },
  19. seconds: {
  20. 1: () => `sekunda`,
  21. 2: () => `sekundy`,
  22. 5: () => `sekúnd`,
  23. },
  24. },
  25. dateFormats: {
  26. months: {
  27. [`01`]: () => `január`,
  28. [`02`]: () => `február`,
  29. [`03`]: () => `marec`,
  30. [`04`]: () => `apríl`,
  31. [`05`]: () => `máj`,
  32. [`06`]: () => `jún`,
  33. [`07`]: () => `júl`,
  34. [`08`]: () => `august`,
  35. [`09`]: () => `september`,
  36. [`10`]: () => `október`,
  37. [`11`]: () => `november`,
  38. [`12`]: () => `december`,
  39. }
  40. },
  41. functionWords: {
  42. and: () => `a`,
  43. },
  44. errors: {
  45. turnstile: {
  46. unavailable: () => `nemožno kontaktovať Turnstile. prosím skúste to znova.`,
  47. noToken: () => `Turnstile token nebol poskytnutý. prosím skúste to znova.`,
  48. invalidResponse: () => `neplatná Turnstile odpoveď. prosím skúste to znova.`,
  49. keyUsedOrExpired: () => `Turnstile kľúč už bol použitý alebo vypršal. prosím skúste to znova.`,
  50. },
  51. },
  52. }
  53. const icons = {
  54. tempIcon: () => `
  55. <svg class="icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
  56. <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 4v10.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0" />
  57. </svg>
  58. `,
  59. pressureIcon: () => `
  60. <svg class="icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
  61. <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m12 14l4-4M3.34 19a10 10 0 1 1 17.32 0" />
  62. </svg>
  63. `,
  64. humidityIcon: () => `
  65. <svg class="icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
  66. <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5S5 13 5 15a7 7 0 0 0 7 7" />
  67. </svg>
  68. `,
  69. bluetoothConnectionIcon: () => `
  70. <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
  71. <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m7 7l10 10l-5 5V2l5 5L7 17m11-5h3M3 12h3" />
  72. </svg>
  73. `
  74. }
  75. export default {
  76. general,
  77. icons,
  78. emails: {
  79. auth: {
  80. subject: () => `prihlasovací link`,
  81. text: (details) => `
  82. dobrý deň,
  83. môžete sa prihlásiť nasledujúcim kódom: ${details?.code}
  84. alebo nasledujúcim linkom: ${details?.link}
  85. ak ste tento email nevyžiadali, môžete ho kľudne ignorovať.
  86. ${process.env.APP_NAME}
  87. `,
  88. },
  89. },
  90. auth: {
  91. errors: {
  92. invalidEmail: () => `musíte zadať platný email.`,
  93. noVerificationToken: () => `nebol poskytnutý žiadny verifikačný token. prosím skúste to znova.`,
  94. verificationTokenUsedOrExpired: () => `verifikačný token už bol použitý alebo vypršal. prosím skúste to znova.`,
  95. invalidVerificationCode: () => `neplatný verifikačný kód. prosím skúste to znova.`,
  96. loginNeeded: () => `najprv sa prihláste prosím.`,
  97. ratelimits: {
  98. email: (details) => {
  99. if (!Number.parseInt(details?.duration)) return `príliš veľa žiadostí pre tento email. skúste to znova neskôr.`
  100. return `príliš veľa žiadostí pre tento email. skúste to znova o ${formatTimeToString(general.timeFormats, general.functionWords.and(), details?.duration * 1000)}.`
  101. },
  102. ip: (details) => {
  103. if (!Number.parseInt(details?.duration)) return `poslali ste príliš veľa žiadostí. skúste to znova neskôr.`
  104. return `poslali ste príliš veľa žiadostí. skúste to znova o ${formatTimeToString(general.timeFormats, general.functionWords.and(), details?.duration * 1000)}.`
  105. },
  106. code: () => `zadali ste príliš veľa zlých kódov. musíte požiadať o novú verifikáciu.`,
  107. },
  108. turnstile: general.errors.turnstile,
  109. },
  110. },
  111. settings: {
  112. errors: {
  113. invalidEmail: () => `musíte zadať platný email.`,
  114. emailTaken: (details) => `používateľ so zadaným emailom (${details?.newEmail}) už existuje.`,
  115. turnstile: general.errors.turnstile,
  116. },
  117. },
  118. stations: {
  119. errors: {
  120. noName: () => `musíte zadať meno.`,
  121. invalidOwner: () => `musíte zadať platný email vlastníka.`,
  122. ownerUserNotFound: (details) => `používateľ so zadaným emailom (${details?.newOwnerEmail}) neexistuje.`,
  123. turnstile: general.errors.turnstile,
  124. },
  125. history: {
  126. properties: {
  127. indoorTemp: () => `${icons.tempIcon()} vnutorná teplota`,
  128. indoorPressure: () => `${icons.pressureIcon()} vnutorný tlak`,
  129. indoorHumidity: () => `${icons.humidityIcon()} vnutorná vlhkosť`,
  130. outdoorConnected: () => `${icons.bluetoothConnectionIcon()} pripojenie externej jednotky`,
  131. outdoorTemp: () => `${icons.tempIcon()} vonkajšia teplota`,
  132. outdoorPressure: () => `${icons.pressureIcon()} vonkajší tlak`,
  133. outdoorHumidity: () => `${icons.humidityIcon()} vonkajšia vlhkosť`,
  134. },
  135. },
  136. },
  137. websocket: {
  138. keepalive: () => `beep`,
  139. dataSaved: (details) => `úspešne uložené dáta pre ${details?.meteostanica?.name}`,
  140. errors: {
  141. missingFields: () => `chýbajú dôležité polia: indoorTemp, indoorPressure, indoorHumidity, indoorAltitude, outdoorConnected, outdoorTemp, outdoorPressure, outdoorHumidity, outdoorAltitude`,
  142. invalidKey: (details) => `zadali ste neplatný websocket kľúč stanice (${details.key})`,
  143. },
  144. }
  145. }