From 695dd24cc7b5f0fb8bb49247bc521e0cd8913c2d82e1d8c3b7b55ceae4606b77 Mon Sep 17 00:00:00 2001 From: Techognito Date: Tue, 26 Aug 2025 11:14:50 +0200 Subject: [PATCH] Updated card buttons, and added Danish translation Tested danish translation, it works :O --- src/GarageApp/.i18n.js.swp | Bin 0 -> 12288 bytes src/GarageApp/App.tsx | 38 ---- src/GarageApp/i18n.js | 2 +- src/GarageApp/locales/da/translation.json | 231 ++++++++++++++++++++ src/GarageApp/locales/index.tsx | 1 + src/GarageApp/modules/.VehicleCards.tsx.swp | Bin 0 -> 12288 bytes src/GarageApp/modules/VehicleCards.tsx | 23 +- src/GarageApp/modules/icons/Expense.tsx | 7 + src/GarageApp/modules/icons/gasFillup.tsx | 7 + 9 files changed, 263 insertions(+), 46 deletions(-) create mode 100644 src/GarageApp/.i18n.js.swp create mode 100644 src/GarageApp/locales/da/translation.json create mode 100644 src/GarageApp/modules/.VehicleCards.tsx.swp create mode 100644 src/GarageApp/modules/icons/Expense.tsx create mode 100644 src/GarageApp/modules/icons/gasFillup.tsx diff --git a/src/GarageApp/.i18n.js.swp b/src/GarageApp/.i18n.js.swp new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..9746ab6bf79e806378f8b394b7dee4dbef0582325e7b895f43dad87bbe797d64 GIT binary patch literal 12288 zcmeI2&uSAv9LJ|QDN-vH{Bv?tWE*g^sRfDYK@>r%RYa&4@i5t)O}3rPEVHvVC9Hh` z@dX6mKzj8B^x(;ZkKo0(@VlE$XoB@B%5TY+AG5!|^SOon_1Z7Cp71-Zb%y60V~-9# z4i1mLH@<#eVRFwVnM;Juq%PejJ^OxVquusn85t{13c~w0#|sAcMQC)WOdbWdTRf7l zr84PIY8O~3Lg%MS9Q3WpbrfVa3?2$A`tn|y2FZFyw|28XG$I!fAOiCQau@rZWwvo^ zyLyA#T{HZ+W4%OAEF>k|6>_ zfCvx)B0vO)01+SpM1Tko0U|&I{y_pFV(k4gV`t7{czpk#{{R26!q_M1E%X?=3|)dQ zLaR^%`iY!x&==?k`T)IycA%%wUC4uOKv$r$$0>*&B0vO)01+SpM1Tko0U|&IhyW4z zI|SrNN;yjLGuB}fI~KWeyj-(poEObab{dv*opt$3&spq)E8!BOy;s$HrTbm(MZ&vT z9gB(KTp1BP6K(+KvF&YTLZM_9jK|0;3Rs;L1@^g7ugdR -// -// {vehicles.map((vehicle, index) => ( -// -// -// -// ))} -// -// -// -// -// {vehicles.map((vehicle, index) => ( -// -// ))} -// -// -//

{t ('yourvehicles')}

-// -// -// {vehicles.map((vehicle, index) => ( -// -// -// -// ))} -// -// -// export function App() { const { t, i18n } = useTranslation(); return ( diff --git a/src/GarageApp/i18n.js b/src/GarageApp/i18n.js index d0ca8cbd..dabb551c 100644 --- a/src/GarageApp/i18n.js +++ b/src/GarageApp/i18n.js @@ -15,7 +15,7 @@ i18n backend: { loadPath: '/GarageApp/locales/{{lng}}/{{ns}}.json' }, - lng: 'en', + lng: 'da', ns: ['translation'] }); diff --git a/src/GarageApp/locales/da/translation.json b/src/GarageApp/locales/da/translation.json new file mode 100644 index 00000000..16b72b4b --- /dev/null +++ b/src/GarageApp/locales/da/translation.json @@ -0,0 +1,231 @@ +{ + "quickentry": "Ingen hurtige indtastninger | Hurtig indtastning | Hurtige indtastninger", + "statistics": "Statistik", + "thisweek": "Denne uge", + "thismonth": "Denne måned", + "pastxdays": "Forrige en dag | Forrige {count} dage", + "pastxmonths": "Forrige en måned | Forrige {count} måneder", + "thisyear": "Dette år", + "alltime": "Hele tiden", + "noattachments": "Ingen vedhæftede filer indtil videre", + "attachments": "Vedhæftede filer", + "choosefile": "Vælg fil", + "addattachment": "Tilføj vedhæftning", + "sharedwith": "Delt med", + "share": "Del", + "you": "Du", + "addfillup": "Tilføj påfyldning", + "createfillup": "Opret påfyldning", + "deletefillup": "Slet denne påfyldning", + "addexpense": "Tilføj udgift", + "createexpense": "Opret udgift", + "deleteexpense": "Slet denne udgift", + "nofillups": "Ingen påfyldninger indtil videre", + "transfervehicle": "Overfør køretøj", + "settingssaved": "Indstillingerne er gemt", + "yoursettings": "Dine indstillinger", + "settings": "Indstillinger", + "changepassword": "Skift adgangskode", + "oldpassword": "Gammel adgangskode", + "newpassword": "Ny adgangskode", + "repeatnewpassword": "Gentag ny adgangskode", + "passworddontmatch": "Adgangskoderne stemmer ikke overens", + "save": "Gem", + "supportthedeveloper": "Støt udvikleren", + "buyhimabeer": "Køb ham en øl!", + "featurerequest": "Ønske om funktion", + "foundabug": "Fundet en fejl", + "currentversion": "Nuværende version", + "moreinfo": "Mere info", + "currency": "Valuta", + "distanceunit": "Afstandsenhed", + "dateformat": "Datoformat", + "createnow": "Opret nu", + "yourvehicles": "Dine køretøjer", + "menu": { + "quickentries": "Hurtige indtastninger", + "logout": "Log ud", + "import": "Import", + "home": "Hjem", + "settings": "Indstillinger", + "admin": "Admin", + "sitesettings": "Webstedsindstillinger", + "users": "Brugere", + "login": "Log ind" + }, + "enterusername": "Indtast dit brugernavn", + "enterpassword": "Indtast din adgangskode", + "email": "E-mail", + "password": "Adgangskode", + "login": "Log ind", + "totalexpenses": "Samlede udgifter", + "fillupcost": "Tankningsomkostninger", + "otherexpenses": "Andre udgifter", + "addvehicle": "Tilføj køretøj", + "editvehicle": "Rediger køretøj", + "deletevehicle": "Slet køretøj", + "sharevehicle": "Del køretøj", + "makeowner": "Gør til ejer", + "lastfillup": "Seneste tankning", + "quickentrydesc": "Tag et billede af fakturaen eller brændstofpumpens display for at foretage en indtastning senere.", + "quickentrycreatedsuccessfully": "Hurtig indtastning oprettet med succes", + "uploadfile": "Upload fil", + "uploadphoto": "Upload foto", + "details": "Detaljer", + "odometer": "Kilometertæller", + "language": "Sprog", + "date": "Dato", + "pastfillups": "Tidligere tankninger", + "fuelsubtype": "Brændstoftype", + "fueltype": "Brændstoftype", + "quantity": "Mængde", + "gasstation": "Tankstation", + "fuel": { + "petrol": "Benzin", + "diesel": "Diesel", + "cng": "CNG", + "lpg": "LPG", + "electric": "Elektrisk", + "ethanol": "Ethanol" + }, + "unit": { + "long": { + "litre": "Liter", + "gallon": "Gallon", + "kilowatthour": "Kilowatt-time", + "kilogram": "Kilogram", + "usgallon": "US Gallon", + "minutes": "Minutter", + "kilometers": "Kilometer", + "miles": "Miles" + }, + "short": { + "litre": "L", + "gallon": "Gal", + "kilowatthour": "KwH", + "kilogram": "Kg", + "usgallon": "US Gal", + "minutes": "Min", + "kilometers": "Km", + "miles": "Mi" + } + }, + "avgfillupqty": "Gns. påfyldningsmængde", + "avgfillupexpense": "Gns. påfyldningsudgift", + "avgfuelcost": "Gns. brændstofpris", + "per": "{0} per {1}", + "price": "Pris", + "total": "Total", + "fulltank": "Tank fuld", + "partialfillup": "Delvis påfyldning", + "getafulltank": "Fik du en fuld tank?", + "tankpartialfull": "Hvad sporer du?", + "by": "Ved", + "expenses": "Udgifter", + "expensetype": "Udgiftstype", + "noexpenses": "Ingen udgifter indtil videre", + "download": "Download", + "title": "Titel", + "name": "Navn", + "delete": "Slet", + "importdata": "Importer data til Hammond", + "importdatadesc": "Vælg en af følgende muligheder for at importere data til Hammond", + "import": "Importer", + "importcsv": "Hvis du har brugt {name} til at gemme dine køretøjsdata, skal du eksportere CSV-filen fra {name} og klikke her for at importere.", + "importgeneric": "Generisk påfyldningsimport", + "importgenericdesc": "CSV-import af påfyldninger.", + "choosecsv": "Vælg CSV", + "choosephoto": "Vælg foto", + "importsuccessfull": "Data importeret med succes", + "importerror": "Der opstod et problem med at importere filen. Kontrollér fejlmeddelelsen", + "importfrom": "Importer fra {0}", + "stepstoimport": "Trin til import af data fra {name}", + "choosecsvimport": "Vælg {name} CSV-filen og klik på importknappen.", + "choosedatafile": "Vælg CSV-filen og klik derefter på importknappen.", + "dontimportagain": "Sørg for ikke at importere filen igen, da det vil skabe gentagne indtastninger.", + "checkpointsimportcsv": "Når du har kontrolleret alle disse punkter, kan du blot importere CSV'en nedenfor.", + "importhintunits": "På samme måde skal du sørge for, at Brændstofenhed og Brændstoftype er korrekt indstillet for køretøjet.", + "importhintcurrdist": "Sørg for, at Valuta og Afstandsenhed er korrekt indstillet i Hammond. Importen vil ikke automatisk registrere valutaen fra filen, men bruge den valuta, der er indstillet for brugeren.", + "importhintnickname": "Sørg for, at køretøjets kaldenavn i Hammond er præcis det samme som navnet i Fuelly CSV-filen, ellers vil importen ikke fungere.", + "importhintvehiclecreated": "Sørg for, at du allerede har oprettet køretøjerne i Hammond-platformen.", + "importhintcreatecsv": "Eksportér dine data fra {name} i CSV-format. Instruktioner til at gøre dette kan findes", + "importgenerichintdata": "Data skal være i CSV-format.", + "here": "her", + "unprocessedquickentries": "Du har en hurtig indtastning, der skal behandles. | Du har {0} hurtige indtastninger, der venter på at blive behandlet.", + "show": "Vis", + "loginerror": "Der opstod en fejl ved login til din konto. {msg}", + "showunprocessed": "Vis kun ubehandlede", + "unprocessed": "ubehandlede", + "sitesettingdesc": "Opdater indstillinger på webstedsniveau. Disse vil blive brugt som standardværdier for nye brugere.", + "settingdesc": "Disse vil blive brugt som standardværdier, når du opretter en ny påfyldning eller udgift.", + "areyousure": "Er du sikker på, at du vil fortsætte med dette?", + "adduser": "Tilføj bruger", + "usercreatedsuccessfully": "Bruger oprettet med succes", + "userdisabledsuccessfully": "Bruger deaktiveret med succes", + "userenabledsuccessfully": "Bruger aktiveret med succes", + "role": "Rolle", + "created": "Oprettet", + "createnewuser": "Opret ny bruger", + "cancel": "Annuller", + "novehicles": "Det ser ud til, at du endnu ikke har oprettet et køretøj i systemet. Begynd med at oprette en indtastning for et af de køretøjer, du gerne vil spore.", + "processed": "Marker som behandlet", + "notfound": "Ikke fundet", + "timeout": "Siden fik en timeout under indlæsningen. Er du stadig forbundet til internettet?", + "clicktoselect": "Klik for at vælge...", + "expenseby": "Udgift af", + "selectvehicle": "Vælg et køretøj", + "expensedate": "Udgiftsdato", + "totalamountpaid": "Samlet betalt beløb", + "fillmoredetails": "Udfyld flere oplysninger", + "markquickentryprocessed": "Marker valgt hurtig indtastning som behandlet", + "referquickentry": "Henvis hurtig indtastning", + "deletequickentry": "Dette vil slette denne hurtige indtastning. Dette trin kan ikke fortrydes. Er du sikker?", + "fuelunit": "Brændstofenhed", + "fillingstation": "Navn på tankstation", + "comments": "Kommentarer", + "missfillupbefore": "Glemte du at indtaste påfyldningen før denne?", + "missedfillup": "Glemt påfyldning", + "fillupdate": "Påfyldningsdato", + "fillupsavedsuccessfully": "Påfyldning gemt med succes", + "expensesavedsuccessfully": "Udgift gemt med succes", + "vehiclesavedsuccessfully": "Køretøj gemt med succes", + "settingssavedsuccessfully": "Indstillinger gemt med succes", + "back": "Tilbage", + "nickname": "Kælenavn", + "registration": "Registrering", + "createvehicle": "Opret køretøj", + "make": "Mærke / Firma", + "model": "Model", + "yearmanufacture": "Produktionsår", + "enginesize": "Motorsize (i cc)", + "mysqlconnstr": "MySQL-forbindelsesstreng", + "testconn": "Test forbindelse", + "migrate": "Migrer", + "init": { + "migrateclarkson": "Migrer fra Clarkson", + "migrateclarksondesc": "Hvis du har en eksisterende Clarkson-installation, og du vil migrere dine data fra den, skal du trykke på følgende knap.", + "freshinstall": "Ny installation", + "freshinstalldesc": "Hvis du vil have en ny installation af Hammond, skal du trykke på følgende knap.", + "clarkson": { + "desc": "

Du skal sørge for, at denne installation af Hammond kan få adgang til MySQL-databasen, der bruges af Clarkson.

Hvis det ikke er direkte muligt, kan du lave en kopi af den database et sted, der er tilgængeligt fra denne instans.

Når det er gjort, skal du indtaste forbindelsesstrengen til MySQL-instansen i følgende format.

Alle brugerne importeret fra Clarkson vil have deres brugernavn som deres e-mail i Clarkson-databasen, og adgangskoden er indstillet tilhammond

bruger:adgangskode@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local

", + "success": "Vi har migreret dataene fra Clarkson med succes. Du vil snart blive omdirigeret til login-siden, hvor du kan logge ind med din eksisterende e-mail og adgangskode: hammond" + }, + "fresh": { + "setupadminuser": "Opsætning af administratorbrugere", + "yourpassword": "Din adgangskode", + "youremail": "Din e-mail", + "yourname": "Dit navn", + "success": "Du er blevet registreret med succes. Du vil snart blive omdirigeret til login-siden, hvor du kan logge ind og begynde at bruge systemet." + } + }, + "roles": { + "ADMIN": "ADMIN", + "USER": "BRUGER" + }, + "profile": "Profil", + "processedon": "Behandlet den", + "enable": "Aktivér", + "disable": "Deaktiver", + "confirm": "Fortsæt", + "labelforfile": "Mærke for denne fil" +} \ No newline at end of file diff --git a/src/GarageApp/locales/index.tsx b/src/GarageApp/locales/index.tsx index f3a44e40..061cdda2 100644 --- a/src/GarageApp/locales/index.tsx +++ b/src/GarageApp/locales/index.tsx @@ -2,5 +2,6 @@ export const LANGUAGES = [ { label: "Spanish", code: "es" }, { label: "English", code: "en" }, { label: "Italian", code: "it" }, + { label: "Danish", code: "da" }, ]; diff --git a/src/GarageApp/modules/.VehicleCards.tsx.swp b/src/GarageApp/modules/.VehicleCards.tsx.swp new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..5588ab0d43af091759a6e981bcd3122abcb6b82bfae55be5b1ec6e5e12508f1b GIT binary patch literal 12288 zcmeI2O^g&p6vt~3)Kw6~M7@|4BXMSQW_or}vhMDz!e&8KqHzHe31MreYi1hyE8W#Q zyJ-jUr~&n$ClbA=35mp@A(}|^;8#rarZ*0R#DgA8IGA|!-&NhyJuoZi!GzG0{Fs^U z_g=mCuh&(xp%&{0_UxsP*Tx85n+Ta*I@4*K`FYI)Z*3&}sAu@XV7AZg==N%_ZgpZ? zyyJyPPq!WMeZ z=KVLhD0%t00=WXY0=WXY0=WXY0=WXY0ymce!W|*6pyV}i*+=5{kt^QgulZZ9K(0Wp zK(0WpK(0WpK(0WpK(0WpK(0WpK(4?Ir~uOm`5b@zFRw-N`2YXp@BfP%2{{X12QPw$ zz~#FLIS)>PMZmyz@W%#1z5s86H^6>S0Kcv$o59^+6S#0EAwPic!FS+W za1yk^EU1C|!KFJ0`52rAr@%YF0Sll39tBlU1O!|jCFDo&H8>AG1D}AifP)#Z4y*+i zZztp%@D=zHdjP1pIX?A-{mr;BD|4SO8Ch zC%_|MBlv9{Y6c&GQ{WirfO&8q7y-XyPJROCz`NiCI1WOv0-`zVf_bnHYz2SbasxJD zp7Q^!K#x#bp29zrPHWKtni=_7esfHdxjs*>;2QZC=CHjU^XoFoq#%==b!>t2LFwfv z-+e2t)ApF#S;=0fbZ*&Yw$63RaGdDU@ektyWy!;QrXv}y7-4!g7K0jgBjjA&N^Gy=Wh6!+>E%5*7e%$yCH+KE zjKQiVTjXY=;CGxZwGgL}sZAOrnPzg%m^k*VX*7>E!VUy7xf)nrism_asTji|WKt!g z)7s8J2*;iwqm+h%mWoW*;mdJotXNJ1PAfC&3+9Qa!bTXyiOf)I5AH)FwG7h?+-n8e z&HQ=6BBfONC)>bGjjDd~C0f%mJEOJ|vAWu1gmBlq^SHk>9Dm+z3P3L#I&caS?bnEfIX~sb$RP zLNzkiOIuX$a$PQQNZ%Lqs$QoJS}N1V3=N|w%IIL?SfQDChhX|bbR@AB_&n+}UTQJZ z=ZHS4{6Z=!)EJwvX%Dur+UMcWq$!0h!3<#?PvDHBY!})JY*}$4MYQsiLYhoYh4$yL zf>JYcRF0DEm1S9nDpH)DdV>zh2TC!ew%>9*Ymyc{MX5Ak~C5;T&- z#uAkxRpNfkwtZNu)f^alJv4u8}79Wy?tYr--tdllx5cbfKB#MCqkcJVWWd z=c6f08dz?*D)J;S8eY-I z71}jKXJ6Xb6)L|V|CZ-i=rnn1H+l*Xy*Skmgp}nfudHgC5mg!Of^v&UhRZDBgNAM9 z?^2sUVmh$yDB~xsz)*p!7A6y2V`_;RQi)4S#f$2W(;nuU8m7+k9sH2EhM%-aU3Rf0 z$HPW(4X?y3qgjZS()-HF6#I2G9nbROtzxFd3rl_i4syvI$HgzCP*f9aM;u* zjT7(bnK|eWt8QgV+Ofp2^$$%^-Acpue{~HDoZQTqWBE+B`Jo=^{XwT$^?Pz?PMKeW ygHCb>Ue!h39duAT*{UAu_MpqE#;I8tuMDd+iCi`^P4X~hzS_j%*z##bxW55S$vO`J literal 0 HcmV?d00001 diff --git a/src/GarageApp/modules/VehicleCards.tsx b/src/GarageApp/modules/VehicleCards.tsx index 823deb41..77e37ebc 100644 --- a/src/GarageApp/modules/VehicleCards.tsx +++ b/src/GarageApp/modules/VehicleCards.tsx @@ -7,13 +7,21 @@ import CardContent from '@mui/material/CardContent'; import CardActions from '@mui/material/CardActions'; import Collapse from '@mui/material/Collapse'; import Avatar from '@mui/material/Avatar'; + +import Button from '@mui/material/Button'; import IconButton, { IconButtonProps } from '@mui/material/IconButton'; import Typography from '@mui/material/Typography'; import { red } from '@mui/material/colors'; + import FavoriteIcon from '@mui/icons-material/Favorite'; import ShareIcon from '@mui/icons-material/Share'; import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; import MoreVertIcon from '@mui/icons-material/MoreVert'; +import GasStation from './icons/gasFillup' +import Expense from './icons/Expense' + +import { useTranslation, withTranslation, Trans } from 'react-i18next'; + interface ExpandMoreProps extends IconButtonProps { expand: boolean; @@ -45,6 +53,7 @@ const ExpandMore = styled((props: ExpandMoreProps) => { })); export default function VehicleCard({ nickname, makemodel, registration}) { + const { t, i18n } = useTranslation(); const [expanded, setExpanded] = React.useState(false); const handleExpandClick = () => { @@ -55,7 +64,7 @@ export default function VehicleCard({ nickname, makemodel, registration}) { + } @@ -69,12 +78,12 @@ export default function VehicleCard({ nickname, makemodel, registration}) { alt="" /> - - - - - - + + ) { + return (); +} diff --git a/src/GarageApp/modules/icons/gasFillup.tsx b/src/GarageApp/modules/icons/gasFillup.tsx new file mode 100644 index 00000000..8f35e0e9 --- /dev/null +++ b/src/GarageApp/modules/icons/gasFillup.tsx @@ -0,0 +1,7 @@ +import React from 'react'; +import type { SVGProps } from 'react'; +// Icon by 480 Design provided by Iconify +// License: CC_BY_4.0 +export default function SolarGasStationBroken(props: SVGProps) { + return (); +}