all repos — caroster @ 392f026c797ca85247bf71cdef9b86c274532e60

[Octree] Group carpool to your event https://caroster.io

chore: ⚗️ Implement Tolgee
Simon Mulquin simon@octree.ch
Tue, 09 Jul 2024 09:53:20 +0000
commit

392f026c797ca85247bf71cdef9b86c274532e60

parent

52ad6be503528baa3feff0e610b44f0f82ffc2a3

M CONTRIBUTING.mdCONTRIBUTING.md

@@ -22,6 +22,10 @@ - Read and accept the contributor agreement.

- Refer to [Weblate documentation](https://docs.weblate.org/en/latest/user/translating.html) to learn how to use Weblate. +- You can also ask us for a [Tolgee access](https://tolgee.io/) which enables in context translation of the frontend app. Be aware we are not yet able to credit contributions made trough Tolgee which is entended for internal use at the moment. + +- In the other hand, you can setup your own development instance with your own Tolgee Project by simply importing locales files with the namespace "translation", the application supports Tolgee configuration using NEXT_PUBLIC_TOLGEE_API_KEY and NEXT_PUBLIC_TOLGEE_API_URL env variables located in the frontend folder. This way you can contribute to translations on your computer and commit the updated locales files. See [Tolgee documentation](https://tolgee.io/platform/) for that. + #### **Do you intend to add a new feature or change an existing one?** - Suggest your proposal by creating a [new issue](https://git.octree.ch/p/caroster/-/issues/new).
M frontend/.env.examplefrontend/.env.example

@@ -15,11 +15,14 @@ # Other configs

SENTRY_SERVER_INIT_PATH=.next/server/sentry/initServerSDK.js +# Geo features MAPBOX_TOKEN= MAPBOX_URL=https://api.mapbox.com/ - #TOKEN_FREE_TILES_URL=https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png #TOKEN_FREE_TILES_LAYER_ATTRIBUTION=© <a target="_blank" href="https://www.openstreetmap.org/copyright/en">OpenStreetMap</a> contributors; -# FALLBACK_LANGUAGE=en +# Translation +#NEXT_PUBLIC_TOLGEE_API_URL=https://app.tolgee.io +#NEXT_PUBLIC_TOLGEE_API_KEY=TOLGEE_API_KEY +#FALLBACK_LANGUAGE=en
M frontend/lib/i18n.tsfrontend/lib/i18n.ts

@@ -2,31 +2,45 @@ import i18n from 'i18next';

import {initReactI18next} from 'react-i18next'; import 'moment/min/locales'; import moment from 'moment'; +import {InContextTools} from '@tolgee/web/tools'; +import {withTolgee, Tolgee, I18nextPlugin, BackendFetch} from '@tolgee/i18next'; import {Enum_Userspermissionsuser_Lang as SupportedLocales} from '../generated/graphql'; import translationFr from '../locales/fr.json'; import translationEn from '../locales/en.json'; import translationNl from '../locales/nl.json'; const resources = { + en: { + translation: translationEn, + }, fr: { translation: translationFr, }, - en: { - translation: translationEn, - }, + nl: { translation: translationNl, }, }; +const tolgee = Tolgee() + .use(InContextTools()) + .use(I18nextPlugin()) + .init({ + // for development + apiUrl: process.env.NEXT_PUBLIC_TOLGEE_API_URL, + apiKey: process.env.NEXT_PUBLIC_TOLGEE_API_KEY, + ns: ['translation'], + }); + export const initI18Next = (locale: SupportedLocales) => { - i18n + withTolgee(i18n, tolgee) .use(initReactI18next) // passes i18n down to react-i18next .init({ resources, lng: locale, supportedLngs: ['fr', 'en', 'nl'], fallbackLng: 'en', + defaultNS: 'translation', interpolation: { escapeValue: false, // react already safes from xss },
M frontend/package.jsonfrontend/package.json

@@ -21,6 +21,7 @@ "@mui/lab": "^5.0.0-alpha.140",

"@mui/material": "^5.14.5", "@mui/styles": "^5.14.5", "@mui/x-date-pickers": "^6.11.2", + "@tolgee/i18next": "^5.28.2", "cookies": "^0.9.1", "crypto-js": "^4.1.1", "deepmerge": "^4.3.1",
M frontend/public/sw.jsfrontend/public/sw.js

@@ -1,1 +1,1 @@

-if(!self.define){let e,s={};const a=(a,c)=>(a=new URL(a+".js",c).href,s[a]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=a,e.onload=s,document.head.appendChild(e)}else e=a,importScripts(a),s()})).then((()=>{let e=s[a];if(!e)throw new Error(`Module ${a} didn’t register its module`);return e})));self.define=(c,i)=>{const n=e||("document"in self?document.currentScript.src:"")||location.href;if(s[n])return;let t={};const r=e=>a(e,n),d={module:{uri:n},exports:t,require:r};s[n]=Promise.all(c.map((e=>d[e]||r(e)))).then((e=>(i(...e),t)))}}define(["./workbox-9b4d2a02"],(function(e){"use strict";importScripts(),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"/_next/static/Yw4KH4iTM2LFotFA3dT8A/_buildManifest.js",revision:"1880517baaa9fedf4cae18799eb718ce"},{url:"/_next/static/Yw4KH4iTM2LFotFA3dT8A/_ssgManifest.js",revision:"b6652df95db52feb4daf4eca35380933"},{url:"/_next/static/chunks/0b7b90cd.5bfb8e73dff615d1.js",revision:"5bfb8e73dff615d1"},{url:"/_next/static/chunks/185-1355daceb1533183.js",revision:"1355daceb1533183"},{url:"/_next/static/chunks/220-415a6c8e95d14ad2.js",revision:"415a6c8e95d14ad2"},{url:"/_next/static/chunks/284.89a9b9ddf4b08605.js",revision:"89a9b9ddf4b08605"},{url:"/_next/static/chunks/303-78b44e7f73495863.js",revision:"78b44e7f73495863"},{url:"/_next/static/chunks/321-2e141b1fa4b79781.js",revision:"2e141b1fa4b79781"},{url:"/_next/static/chunks/362-13756f8e3dc98be3.js",revision:"13756f8e3dc98be3"},{url:"/_next/static/chunks/399-804e9682133a0d2c.js",revision:"804e9682133a0d2c"},{url:"/_next/static/chunks/570-c260346bfd57da80.js",revision:"c260346bfd57da80"},{url:"/_next/static/chunks/572.0805ca84c9d9f944.js",revision:"0805ca84c9d9f944"},{url:"/_next/static/chunks/619-efab244c4e675a2e.js",revision:"efab244c4e675a2e"},{url:"/_next/static/chunks/644-6cb1f2738296bd69.js",revision:"6cb1f2738296bd69"},{url:"/_next/static/chunks/664-5af51080742797e4.js",revision:"5af51080742797e4"},{url:"/_next/static/chunks/689-319c1d2f60479f2a.js",revision:"319c1d2f60479f2a"},{url:"/_next/static/chunks/713-7f8573e86cf4cd88.js",revision:"7f8573e86cf4cd88"},{url:"/_next/static/chunks/746-44a6d0ccc5f54aa5.js",revision:"44a6d0ccc5f54aa5"},{url:"/_next/static/chunks/770-dbb714c9b3a4e0a0.js",revision:"dbb714c9b3a4e0a0"},{url:"/_next/static/chunks/775-eaef37e2164398ef.js",revision:"eaef37e2164398ef"},{url:"/_next/static/chunks/801-818fea2c6506ced2.js",revision:"818fea2c6506ced2"},{url:"/_next/static/chunks/875-fcdbb252a0d832e9.js",revision:"fcdbb252a0d832e9"},{url:"/_next/static/chunks/88-93c63a9e4f3795ce.js",revision:"93c63a9e4f3795ce"},{url:"/_next/static/chunks/889.8b98a5d2151b2e99.js",revision:"8b98a5d2151b2e99"},{url:"/_next/static/chunks/899-3433dcdfd173e39e.js",revision:"3433dcdfd173e39e"},{url:"/_next/static/chunks/framework-18c7e6fcf99e5daa.js",revision:"18c7e6fcf99e5daa"},{url:"/_next/static/chunks/main-d3b520dc426e7b2d.js",revision:"d3b520dc426e7b2d"},{url:"/_next/static/chunks/pages/_app-4afe003c66c2fd5d.js",revision:"4afe003c66c2fd5d"},{url:"/_next/static/chunks/pages/_error-6d3a95536fddff17.js",revision:"6d3a95536fddff17"},{url:"/_next/static/chunks/pages/auth/confirm-682a49cee213fe61.js",revision:"682a49cee213fe61"},{url:"/_next/static/chunks/pages/auth/confirm/google-9bf9ecf89e2412b1.js",revision:"9bf9ecf89e2412b1"},{url:"/_next/static/chunks/pages/auth/login-e1f7be927806e982.js",revision:"e1f7be927806e982"},{url:"/_next/static/chunks/pages/auth/lost-password-66a9c20a02bef767.js",revision:"66a9c20a02bef767"},{url:"/_next/static/chunks/pages/auth/register-28d0a0ce674a0144.js",revision:"28d0a0ce674a0144"},{url:"/_next/static/chunks/pages/auth/register/mail-a029140af3e135f9.js",revision:"a029140af3e135f9"},{url:"/_next/static/chunks/pages/auth/reset-3ab80b2eacba4ddc.js",revision:"3ab80b2eacba4ddc"},{url:"/_next/static/chunks/pages/dashboard-b97e9242970ada9f.js",revision:"b97e9242970ada9f"},{url:"/_next/static/chunks/pages/e/%5Buuid%5D-233a10f2914c43ce.js",revision:"233a10f2914c43ce"},{url:"/_next/static/chunks/pages/e/%5Buuid%5D/alerts-82c42eb507f46322.js",revision:"82c42eb507f46322"},{url:"/_next/static/chunks/pages/e/%5Buuid%5D/assign/%5BpassengerId%5D-42197d02856eb923.js",revision:"42197d02856eb923"},{url:"/_next/static/chunks/pages/e/%5Buuid%5D/details-7b9f86210860fc78.js",revision:"7b9f86210860fc78"},{url:"/_next/static/chunks/pages/e/%5Buuid%5D/options-dfca3d51a0209f5b.js",revision:"dfca3d51a0209f5b"},{url:"/_next/static/chunks/pages/e/%5Buuid%5D/waitingList-4beedf69db34913a.js",revision:"4beedf69db34913a"},{url:"/_next/static/chunks/pages/index-74e99f777a556b3b.js",revision:"74e99f777a556b3b"},{url:"/_next/static/chunks/pages/profile-132e073a99166296.js",revision:"132e073a99166296"},{url:"/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js",revision:"79330112775102f91e1010318bae2bd3"},{url:"/_next/static/chunks/webpack-caa532df1831bcbe.js",revision:"caa532df1831bcbe"},{url:"/_next/static/css/209b782d1a2e630e.css",revision:"209b782d1a2e630e"},{url:"/_next/static/css/be71e1e74069890e.css",revision:"be71e1e74069890e"},{url:"/_next/static/media/layers-2x.9859cd12.png",revision:"9859cd12"},{url:"/_next/static/media/layers.ef6db872.png",revision:"ef6db872"},{url:"/_next/static/media/marker-icon.d577052a.png",revision:"d577052a"},{url:"/assets/Caroster_Octree_Social.jpg",revision:"563fc10a4ec83e735943c5f67d417a6e"},{url:"/assets/Caroster_beta.png",revision:"86c6259620aee306a019b2a611eaf21d"},{url:"/assets/Logo_in_beta.svg",revision:"cdde8d69adbfdbaf7c903e155419b12c"},{url:"/assets/android-chrome-192x192.png",revision:"b288769d936ad5f9a87944e027d0096c"},{url:"/assets/android-chrome-512x512.png",revision:"c789c009674fc4a2087a8b71c24a12b7"},{url:"/assets/apple-touch-icon.png",revision:"573a4bc22886d3ef3f6c3aa0eab64d44"},{url:"/assets/car.png",revision:"0c95a91895d437b7ea06db071aa8f68f"},{url:"/assets/favicon-16x16.png",revision:"9f98c22a36ec0001995797d29a7583b1"},{url:"/assets/favicon-32x32.png",revision:"562ff70a6694a29302644d4f85b2e920"},{url:"/assets/favicon.ico",revision:"45004f0a61722a526ca688bddc4955c4"},{url:"/assets/google-icon.svg",revision:"81ad048ed858673aaca6cc2227076b8a"},{url:"/assets/icon.png",revision:"ac122f40fd4c9fd7f1831b0dd406c950"},{url:"/assets/logo.png",revision:"d685d6b49c3aedcf4819d5cbbc873d60"},{url:"/assets/logo.svg",revision:"bf83592cc1865c5c492b7ab09bb18f59"},{url:"/assets/site.webmanifest",revision:"053100cb84a50d2ae7f5492f7dd7f25e"},{url:"/favicon.ico",revision:"8eb6dd187ac1c4e26f8df8062bb42e09"},{url:"/leaflet_reset.css",revision:"6f4d8f15afd38d42b34a51581d8e90ce"},{url:"/manifest.json",revision:"e76480838d8eb8908456941dcb59275e"}],{ignoreURLParametersMatching:[]}),e.cleanupOutdatedCaches(),e.registerRoute("/",new e.NetworkFirst({cacheName:"start-url",plugins:[{cacheWillUpdate:async({request:e,response:s,event:a,state:c})=>s&&"opaqueredirect"===s.type?new Response(s.body,{status:200,statusText:"OK",headers:s.headers}):s}]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:gstatic)\.com\/.*/i,new e.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:31536e3})]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:googleapis)\.com\/.*/i,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,new e.StaleWhileRevalidate({cacheName:"static-font-assets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,new e.StaleWhileRevalidate({cacheName:"static-image-assets",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/image\?url=.+$/i,new e.StaleWhileRevalidate({cacheName:"next-image",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp3|wav|ogg)$/i,new e.CacheFirst({cacheName:"static-audio-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp4)$/i,new e.CacheFirst({cacheName:"static-video-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:js)$/i,new e.StaleWhileRevalidate({cacheName:"static-js-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:css|less)$/i,new e.StaleWhileRevalidate({cacheName:"static-style-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/data\/.+\/.+\.json$/i,new e.StaleWhileRevalidate({cacheName:"next-data",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:json|xml|csv)$/i,new e.NetworkFirst({cacheName:"static-data-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>{if(!(self.origin===e.origin))return!1;const s=e.pathname;return!s.startsWith("/api/auth/")&&!!s.startsWith("/api/")}),new e.NetworkFirst({cacheName:"apis",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:16,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>{if(!(self.origin===e.origin))return!1;return!e.pathname.startsWith("/api/")}),new e.NetworkFirst({cacheName:"others",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>!(self.origin===e.origin)),new e.NetworkFirst({cacheName:"cross-origin",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:3600})]}),"GET")})); +if(!self.define){let e,s={};const a=(a,c)=>(a=new URL(a+".js",c).href,s[a]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=a,e.onload=s,document.head.appendChild(e)}else e=a,importScripts(a),s()})).then((()=>{let e=s[a];if(!e)throw new Error(`Module ${a} didn’t register its module`);return e})));self.define=(c,n)=>{const i=e||("document"in self?document.currentScript.src:"")||location.href;if(s[i])return;let t={};const r=e=>a(e,i),d={module:{uri:i},exports:t,require:r};s[i]=Promise.all(c.map((e=>d[e]||r(e)))).then((e=>(n(...e),t)))}}define(["./workbox-9b4d2a02"],(function(e){"use strict";importScripts(),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"/_next/static/chunks/0b7b90cd.5bfb8e73dff615d1.js",revision:"5bfb8e73dff615d1"},{url:"/_next/static/chunks/220-98bd797d800b78ec.js",revision:"98bd797d800b78ec"},{url:"/_next/static/chunks/284.cfb48be275a76061.js",revision:"cfb48be275a76061"},{url:"/_next/static/chunks/303-aa5a7b1bb24439df.js",revision:"aa5a7b1bb24439df"},{url:"/_next/static/chunks/321-f0b2bc9c13535088.js",revision:"f0b2bc9c13535088"},{url:"/_next/static/chunks/362-33a3fbd4a12d8a3a.js",revision:"33a3fbd4a12d8a3a"},{url:"/_next/static/chunks/399-804e9682133a0d2c.js",revision:"804e9682133a0d2c"},{url:"/_next/static/chunks/459-5d9e8ec50d7c0e70.js",revision:"5d9e8ec50d7c0e70"},{url:"/_next/static/chunks/5-c2417380a3c9a3d2.js",revision:"c2417380a3c9a3d2"},{url:"/_next/static/chunks/572.3c61a9657f272d04.js",revision:"3c61a9657f272d04"},{url:"/_next/static/chunks/585-6d36547ff4fe7cba.js",revision:"6d36547ff4fe7cba"},{url:"/_next/static/chunks/619-efab244c4e675a2e.js",revision:"efab244c4e675a2e"},{url:"/_next/static/chunks/644-e75fcdedaa708750.js",revision:"e75fcdedaa708750"},{url:"/_next/static/chunks/664-5af51080742797e4.js",revision:"5af51080742797e4"},{url:"/_next/static/chunks/746-5e2bd1af4ab4a1a0.js",revision:"5e2bd1af4ab4a1a0"},{url:"/_next/static/chunks/770-17b00fd601cec323.js",revision:"17b00fd601cec323"},{url:"/_next/static/chunks/775-6537eb4fe2c94cbe.js",revision:"6537eb4fe2c94cbe"},{url:"/_next/static/chunks/787-dd283253874d7d68.js",revision:"dd283253874d7d68"},{url:"/_next/static/chunks/88-e376ac10fdfa2cb6.js",revision:"e376ac10fdfa2cb6"},{url:"/_next/static/chunks/889.762fdac4f4b7a970.js",revision:"762fdac4f4b7a970"},{url:"/_next/static/chunks/899-922ef5fcc9a60943.js",revision:"922ef5fcc9a60943"},{url:"/_next/static/chunks/913-1a05aa0cb47123bf.js",revision:"1a05aa0cb47123bf"},{url:"/_next/static/chunks/975-5dcc9cc3b9e3d631.js",revision:"5dcc9cc3b9e3d631"},{url:"/_next/static/chunks/framework-18c7e6fcf99e5daa.js",revision:"18c7e6fcf99e5daa"},{url:"/_next/static/chunks/main-d3b520dc426e7b2d.js",revision:"d3b520dc426e7b2d"},{url:"/_next/static/chunks/pages/_app-e4b21e5e48f9e63b.js",revision:"e4b21e5e48f9e63b"},{url:"/_next/static/chunks/pages/_error-ed99fdd605d0db40.js",revision:"ed99fdd605d0db40"},{url:"/_next/static/chunks/pages/auth/confirm-4710116c18c08314.js",revision:"4710116c18c08314"},{url:"/_next/static/chunks/pages/auth/confirm/google-096b131994926240.js",revision:"096b131994926240"},{url:"/_next/static/chunks/pages/auth/login-ba9b755e295e41cc.js",revision:"ba9b755e295e41cc"},{url:"/_next/static/chunks/pages/auth/lost-password-859d7f9a8d4f9934.js",revision:"859d7f9a8d4f9934"},{url:"/_next/static/chunks/pages/auth/register-269a48088b34ac6b.js",revision:"269a48088b34ac6b"},{url:"/_next/static/chunks/pages/auth/register/mail-b1b97894f1732fef.js",revision:"b1b97894f1732fef"},{url:"/_next/static/chunks/pages/auth/reset-d4d9dc3d787c4f1a.js",revision:"d4d9dc3d787c4f1a"},{url:"/_next/static/chunks/pages/dashboard-d14c826d5cba4363.js",revision:"d14c826d5cba4363"},{url:"/_next/static/chunks/pages/e/%5Buuid%5D-4b54ffaac7224921.js",revision:"4b54ffaac7224921"},{url:"/_next/static/chunks/pages/e/%5Buuid%5D/alerts-9a3bcdfbfa6d0dec.js",revision:"9a3bcdfbfa6d0dec"},{url:"/_next/static/chunks/pages/e/%5Buuid%5D/assign/%5BpassengerId%5D-18bb84eaf1f3cb8c.js",revision:"18bb84eaf1f3cb8c"},{url:"/_next/static/chunks/pages/e/%5Buuid%5D/details-4dda0cbc49df8a07.js",revision:"4dda0cbc49df8a07"},{url:"/_next/static/chunks/pages/e/%5Buuid%5D/options-8f998ed35f2acee1.js",revision:"8f998ed35f2acee1"},{url:"/_next/static/chunks/pages/e/%5Buuid%5D/waitingList-e9770263b7e06f45.js",revision:"e9770263b7e06f45"},{url:"/_next/static/chunks/pages/index-566a20eefb2c48bf.js",revision:"566a20eefb2c48bf"},{url:"/_next/static/chunks/pages/new-0f80f6ac909e4715.js",revision:"0f80f6ac909e4715"},{url:"/_next/static/chunks/pages/profile-9af8e2720b7c5835.js",revision:"9af8e2720b7c5835"},{url:"/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js",revision:"79330112775102f91e1010318bae2bd3"},{url:"/_next/static/chunks/webpack-ba060bf0e186b376.js",revision:"ba060bf0e186b376"},{url:"/_next/static/css/0742d73c3229e134.css",revision:"0742d73c3229e134"},{url:"/_next/static/css/209b782d1a2e630e.css",revision:"209b782d1a2e630e"},{url:"/_next/static/media/layers-2x.9859cd12.png",revision:"9859cd12"},{url:"/_next/static/media/layers.ef6db872.png",revision:"ef6db872"},{url:"/_next/static/media/marker-icon.d577052a.png",revision:"d577052a"},{url:"/_next/static/xfKayYGSRXx8uLfNxQ7Qa/_buildManifest.js",revision:"0f8bcdbc8cba72ea9f69e155eb2f56a8"},{url:"/_next/static/xfKayYGSRXx8uLfNxQ7Qa/_ssgManifest.js",revision:"b6652df95db52feb4daf4eca35380933"},{url:"/assets/Caroster_Octree_Social.jpg",revision:"563fc10a4ec83e735943c5f67d417a6e"},{url:"/assets/Caroster_beta.png",revision:"86c6259620aee306a019b2a611eaf21d"},{url:"/assets/Logo_in_beta.svg",revision:"cdde8d69adbfdbaf7c903e155419b12c"},{url:"/assets/android-chrome-192x192.png",revision:"b288769d936ad5f9a87944e027d0096c"},{url:"/assets/android-chrome-512x512.png",revision:"c789c009674fc4a2087a8b71c24a12b7"},{url:"/assets/apple-touch-icon.png",revision:"573a4bc22886d3ef3f6c3aa0eab64d44"},{url:"/assets/car.png",revision:"0c95a91895d437b7ea06db071aa8f68f"},{url:"/assets/favicon-16x16.png",revision:"9f98c22a36ec0001995797d29a7583b1"},{url:"/assets/favicon-32x32.png",revision:"562ff70a6694a29302644d4f85b2e920"},{url:"/assets/favicon.ico",revision:"45004f0a61722a526ca688bddc4955c4"},{url:"/assets/google-icon.svg",revision:"81ad048ed858673aaca6cc2227076b8a"},{url:"/assets/icon.png",revision:"ac122f40fd4c9fd7f1831b0dd406c950"},{url:"/assets/logo.png",revision:"d685d6b49c3aedcf4819d5cbbc873d60"},{url:"/assets/logo.svg",revision:"bf83592cc1865c5c492b7ab09bb18f59"},{url:"/assets/site.webmanifest",revision:"053100cb84a50d2ae7f5492f7dd7f25e"},{url:"/favicon.ico",revision:"8eb6dd187ac1c4e26f8df8062bb42e09"},{url:"/leaflet_reset.css",revision:"0936d7c0f04ef89fe3c337decb621909"},{url:"/manifest.json",revision:"e76480838d8eb8908456941dcb59275e"}],{ignoreURLParametersMatching:[]}),e.cleanupOutdatedCaches(),e.registerRoute("/",new e.NetworkFirst({cacheName:"start-url",plugins:[{cacheWillUpdate:async({request:e,response:s,event:a,state:c})=>s&&"opaqueredirect"===s.type?new Response(s.body,{status:200,statusText:"OK",headers:s.headers}):s}]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:gstatic)\.com\/.*/i,new e.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:31536e3})]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:googleapis)\.com\/.*/i,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,new e.StaleWhileRevalidate({cacheName:"static-font-assets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,new e.StaleWhileRevalidate({cacheName:"static-image-assets",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/image\?url=.+$/i,new e.StaleWhileRevalidate({cacheName:"next-image",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp3|wav|ogg)$/i,new e.CacheFirst({cacheName:"static-audio-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp4)$/i,new e.CacheFirst({cacheName:"static-video-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:js)$/i,new e.StaleWhileRevalidate({cacheName:"static-js-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:css|less)$/i,new e.StaleWhileRevalidate({cacheName:"static-style-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/data\/.+\/.+\.json$/i,new e.StaleWhileRevalidate({cacheName:"next-data",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:json|xml|csv)$/i,new e.NetworkFirst({cacheName:"static-data-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>{if(!(self.origin===e.origin))return!1;const s=e.pathname;return!s.startsWith("/api/auth/")&&!!s.startsWith("/api/")}),new e.NetworkFirst({cacheName:"apis",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:16,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>{if(!(self.origin===e.origin))return!1;return!e.pathname.startsWith("/api/")}),new e.NetworkFirst({cacheName:"others",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>!(self.origin===e.origin)),new e.NetworkFirst({cacheName:"cross-origin",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:3600})]}),"GET")}));
M frontend/yarn.lockfrontend/yarn.lock

@@ -2204,6 +2204,25 @@ integrity sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==

dependencies: tslib "^2.4.0" +"@tolgee/core@5.28.2": + version "5.28.2" + resolved "https://registry.yarnpkg.com/@tolgee/core/-/core-5.28.2.tgz#d3be5753b04b53f3bfb0082d7ff83a8a8cd93f81" + integrity sha512-9gFhzT5V7IA4ndAABgbbCVZ92o7S+H1rfjgWT6amCSaQ2ZWlDHZh5dc3bPEHPXHQD2ebqJLgDr/X80ZNU6xKBg== + +"@tolgee/i18next@^5.28.2": + version "5.28.2" + resolved "https://registry.yarnpkg.com/@tolgee/i18next/-/i18next-5.28.2.tgz#1cb790bded4109b70d5057e5446feea54076eeac" + integrity sha512-eYhKF2W+D1Ex360QosasKe1KsPWQxpPCkIZx19yl+I7JaV6eY0ckRWyKLyP9scoiz6RbbWhtspS15me9+uKCSA== + dependencies: + "@tolgee/web" "5.28.2" + +"@tolgee/web@5.28.2": + version "5.28.2" + resolved "https://registry.yarnpkg.com/@tolgee/web/-/web-5.28.2.tgz#113c3959de4a48bc9ecc6728e7aafb862cc794e7" + integrity sha512-7t8A9JgOSoJcKRsvKHJpODDCbP64JN7ulDiFtvu5pVnRzVx7cDzY6eczUC3Ab7uCSUio7C5+9GanD91KnzxjWA== + dependencies: + "@tolgee/core" "5.28.2" + "@tsconfig/node10@^1.0.7": version "1.0.11" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2"