1
0
Fork 0

Added some finishing touches here and there

This commit is contained in:
Techognito 2025-08-26 18:02:25 +02:00
parent ddd77d9f82
commit 656b1ba417
42 changed files with 9344 additions and 30 deletions

View file

@ -2,6 +2,8 @@ import { APITester } from "../APITester";
import "./index.css";
import { useTranslation, withTranslation, Trans } from 'react-i18next';
import AppBar from './modules/MenuBar';
import logo from "./logo.svg";
import reactLogo from "./react.svg";
@ -9,28 +11,18 @@ import Button from '@mui/material/Button';
import Box from '@mui/material/Box';
import Grid from '@mui/material/Grid';
import VehicleCard from "./modules/VehicleCards";
import YourVehicleList from "./modules/YourVehicles";
import MenuLanguages from "./modules/MenuLanguages";
import StatisticsView from "./modules/StatisticsView"
export function App() {
const { t, i18n } = useTranslation();
return (
<div className="app">
<div className="logo-container">
<img src={logo} alt="Bun Logo" className="logo bun-logo" />
<img src={reactLogo} alt="React Logo" className="logo react-logo" />
</div>
<h1>Bun + React | GarageApp</h1>
<p>
Edit <code>src/App.tsx</code> and save to test HMR
</p>
<h1>{t ('statistics')}</h1>
<AppBar position="static">
</AppBar>
<StatisticsView />
<YourVehicleList></YourVehicleList>
<h1>test</h1>
</div>
);
}

View file

@ -15,7 +15,7 @@ i18n
backend: {
loadPath: '/GarageApp/locales/{{lng}}/{{ns}}.json'
},
lng: 'da',
lng: 'en',
ns: ['translation']
});

View file

@ -8,7 +8,7 @@
body {
margin: 0;
display: grid;
place-items: center;
place-items: stretch;
min-width: 320px;
min-height: 100vh;
position: relative;
@ -34,9 +34,7 @@ body::before {
}
}
.app {
max-width: 1280px;
margin: 0 auto;
padding: 2rem;
text-align: center;
position: relative;
z-index: 1;
@ -48,8 +46,20 @@ body::before {
gap: 2rem;
margin-bottom: 2rem;
}
.menu-logo-container {
display: flex;
justify-content: left;
align-items: center;
gap: 0.4em;
}
.menu-logo {
height: 2em;
padding: 1em
will-change: filter;
transition: filter 0.3s;
}
.logo {
height: 6em;
height: 2em;
padding: 1.5em;
will-change: filter;
transition: filter 0.3s;

View file

@ -0,0 +1,217 @@
{
"quickentry": "Keine Schnelleinträge | Schnelleintrag | Schnelleinträge",
"statistics": "Statistiken",
"thisweek": "Diese Woche",
"thismonth": "Dieser Monat",
"pastxdays": "Letzter Tag | Letzte {count} Tage",
"pastxmonths": "Letzter Monat | Letzte {count} Monate",
"thisyear": "Dieses Jahr",
"alltime": "Gesamt",
"noattachments": "Keine Anhänge",
"attachments": "Anhänge",
"choosefile": "Datei auswählen",
"addattachment": "Anhang hinzufügen",
"sharedwith": "Geteilt mit",
"share": "Teile",
"you": "du",
"addfillup": "Tankfüllung erfassen",
"createfillup": "Erfasse Tankfüllung",
"deletefillup": "Lösche diese Tankfüllung",
"addexpense": "Ausgabe erfassen",
"createexpense": "Erfasse Ausgabe",
"deleteexpense": "Lösche diese Ausgabe",
"nofillups": "Keine Tankfüllungen",
"transfervehicle": "Fahrzeug übertragen",
"settingssaved": "Einstellungen erfolgreich gespeichert",
"yoursettings": "Deine Einstellungen",
"settings": "Einstellungen",
"changepassword": "Passwort ändern",
"oldpassword": "Bisheriges Passwort",
"newpassword": "Neues Passwort",
"repeatnewpassword": "Neues Passwort wiederholen",
"passworddontmatch": "Passwörter stimmen nicht überein",
"save": "Speichern",
"supportthedeveloper": "Unterstütze den Entwickler",
"buyhimabeer": "Kauf ihm ein Bier!",
"moreinfo": "Mehr Info",
"currency": "Währung",
"distanceunit": "Entfernungseinheit",
"dateformat": "Datumsformat",
"createnow": "Jetzt erstellen",
"yourvehicles": "Deine Fahrzeuge",
"menu": {
"quickentries": "Schnellinträge",
"logout": "Abmelden",
"import": "Import",
"home": "Start",
"settings": "Einstellungen",
"admin": "Verwalten",
"sitesettings": "Globale Einstellungen",
"users": "Benutzer",
"login": "Anmelden"
},
"enterusername": "E-Mail eingeben",
"enterpassword": "Passwort eingeben",
"email": "E-Mail",
"password": "Passwort",
"login": "Anmelden",
"totalexpenses": "Gesamtausgaben",
"fillupcost": "Tank-Ausgaben",
"otherexpenses": "Andere Ausgaben",
"addvehicle": "Fahrzeug hinzufügen",
"editvehicle": "Fahrzeug bearbeiten",
"deletevehicle": "Fahrzeug löschen",
"sharevehicle": "Fahrzeug teilen",
"makeowner": "zum Besitzer machen",
"lastfillup": "Letztes Tanken",
"quickentrydesc": "Mach ein Foto deiner Rechnung oder der Zapfsäule um den Eintrag später zu ergänzen.",
"quickentrycreatedsuccessfully": "Schnelleintrag erfolgreich erstellt",
"uploadfile": "Datei hochladen",
"uploadphoto": "Foto hochladen",
"details": "Details",
"odometer": "Kilometerzähler",
"language": "Sprache",
"date": "Datum",
"pastfillups": "Tankfüllungen",
"fuelsubtype": "Kraftstofftyp",
"fueltype": "Kraftstoff",
"quantity": "Menge",
"gasstation": "Tankstelle",
"fuel": {
"petrol": "Benzin",
"diesel": "Diesel",
"cng": "CNG",
"lpg": "LPG",
"electric": "Strom",
"ethanol": "Ethanol"
},
"unit": {
"long": {
"litre": "Liter",
"gallon": "Gallone",
"kilowatthour": "Kilowattstunde",
"kilogram": "Kilogramm",
"usgallon": "US-Gallone",
"minutes": "Minuten",
"kilometers": "Kilometer",
"miles": "Meilen"
},
"short": {
"litre": "L",
"gallon": "Gal",
"kilowatthour": "KwH",
"kilogram": "Kg",
"usgallon": "US-Gal",
"minutes": "Min",
"kilometers": "Km",
"miles": "Mi"
}
},
"avgfillupqty": "Ø Tankmenge",
"avgfillupexpense": "Ø Tankwert",
"avgfuelcost": "Ø Spritpreis",
"per": "{0} pro {1}",
"price": "Preis",
"total": "Gesamt",
"fulltank": "Voller Tank",
"getafulltank": "Hast du vollgetankt?",
"by": "Von",
"expenses": "Ausgaben",
"expensetype": "Ausgaben Typ",
"noexpenses": "Keine Ausgaben",
"download": "Herunterladen",
"title": "Titel",
"name": "Name",
"delete": "Löschen",
"importdata": "Importiere Daten in Hammond",
"importdatadesc": "Wähle eine der folgenden Optionen, um Daten in Hammond zu importieren",
"import": "Importieren",
"importcsv": "Wenn du {name} nutzt, um deine Fahrzeugdaten zu verwalten, exportiere die CSV Datei aus {name} und klicke hier, um zu importieren.",
"choosecsv": "CSV auswählen",
"choosephoto": "Foto auswählen",
"importsuccessfull": "Daten erfolgreich importiert",
"importerror": "Beim Importieren der Datei ist ein Fehler aufgetreten. Details findest du in der Fehlermeldung",
"importfrom": "Importiere von {name}",
"stepstoimport": "Schritte, um Daten aus {name} zu importieren",
"choosecsvimport": "Wähle die {name} CSV aus und klicke den Button, um zu importieren.",
"dontimportagain": "Achte darauf, dass du die Datei nicht erneut importierst, da dies zu mehrfachen Einträgen führen würde.",
"checkpointsimportcsv": "Wenn du alle diese Punkte überprüft hast kannst du unten die CSV importieren.",
"importhintunits": "Vergewissere dich ebenfalls, dass die <u>Kraftstoffeinheit</u> und der <u>Kraftstofftyp</u> im Fahrzeug richtig eingestellt sind.",
"importhintcurrdist": "Stelle sicher, dass die <u>Währung</u> und die <u>Entfernungseinheit</u> in Hammond korrekt eingestellt sind. Der Import erkennt die Währung nicht automatisch aus der datei, sondern verwendet die für den Benutzer eingestellte Währung.",
"importhintnickname": "Vergewissere dich, dass der Fahrzeugname in Hammond genau mit dem Namen in der Fuelly-CSV-Datei übereinstimmt, sonst funktioniert der Import nicht.",
"importhintvehiclecreated": "Vergewissere dich, dass du die Fahrzeuge bereits in Hammond erstellt hast.",
"importhintcreatecsv": "Exportiere deine Daten aus {name} im CSV-Format. Die Schritte dazu findest du",
"here": "hier",
"unprocessedquickentries": "Du hast einen Schnelleintrag zum bearbeiten. | Du hast {0} Schnelleinträge zum bearbeiten.",
"show": "Anzeigen",
"loginerror": "Bei der Anmeldung ist ein Fehler aufgetreten. {msg}",
"showunprocessed": "Zeige unbearbeitete",
"unprocessed": "unbearbeitet",
"sitesettingdesc": "Ändere die globalen Einstellungen. Diese werden als Standard für neue Benutzer verwendet.",
"settingdesc": "Diese Einstellungen werden als Standard verwendet wenn du eine neue Ausgabe oder eine Tankfüllung erfasst.",
"areyousure": "Bist du dir sicher?",
"adduser": "Benutzer hinzufügen",
"usercreatedsuccessfully": "Benutzer erfolgreich gespeichert",
"role": "Rolle",
"created": "Erstellt",
"createnewuser": "Erstelle neuen Benutzer",
"cancel": "Abbrechen",
"novehicles": "Du hast noch kein Fahrzeug erstellt. Lege jetzt einen Eintrag für das zu verwaltende Fahrzeug an.",
"processed": "Bearbeitet",
"notfound": "Nicht gefunden",
"timeout": "Das Laden der Seite hat eine Zeitüberschreitung verursacht. Bist du sicher, dass du noch mit dem Internet verbunden bist?",
"clicktoselect": "Klicke, um auszuwählen...",
"expenseby": "Ausgabe von",
"selectvehicle": "Wähle ein Fahrzeug aus",
"expensedate": "Datum der Ausgabe",
"totalamountpaid": "Gezahlter Gesamtbetrag",
"fillmoredetails": "Weitere Details ausfüllen",
"markquickentryprocessed": "Markiere gewählten Schnelleintrag als bearbeitet",
"referquickentry": "Wähle Schnelleintrag",
"deletequickentry": "Willst du diesen Schnelleintrag wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden!",
"fuelunit": "Kraftstoffeinheit",
"fillingstation": "Tankstelle",
"comments": "Kommentare",
"missfillupbefore": "Hast du vergessen, die vorherige Tankfüllung zu erfassen?",
"fillupdate": "Tankdatum",
"fillupsavedsuccessfully": "Tankfüllung erfolgreich gespeichert",
"expensesavedsuccessfully": "Ausgabe erfolgreich gespeichert",
"vehiclesavedsuccessfully": "Fahrzeug erfolgreich gespeichert",
"back": "Zurück",
"nickname": "Bezeichnung",
"registration": "Nummernschild",
"createvehicle": "Fahrzeug erstellen",
"make": "Marke",
"model": "Modell",
"yearmanufacture": "Jahr der Erstzulassung",
"enginesize": "Hubraum (in ccm)",
"testconn": "Teste Verbindung",
"migrate": "Migrieren",
"init": {
"migrateclarkson": "Migriere von Clarkson",
"migrateclarksondesc": "Wenn du bereits eine Instanz von Clarkson verwendest und die Daten migrieren möchtest, klicke hier.",
"freshinstall": "Frische Installation",
"freshinstalldesc": "Wenn du eine neue Installation von Hammond starten möchtest, klicke hier.",
"clarkson": {
"desc": "<p>Zuerst musst du sicherstellen, dass das Deployment von Hammond die von Clarkson verwendete MySQL Datenbank erreichen kann.</p><p>Wenn dies nicht möglich ist kannst du eine Kopie erstellen die für Hammond erreichbar ist.</p><p>Wenn das erledigt ist, füge hier den Connection String im folgenden Format ein.</p><p>Alle aus Clarkson importierten Nutzer bekommen ihren Benutzernamen als E-Mail und das Passwort wird geändert zu <span class='' style='font-weight:bold'>hammond</span></p><code>user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local</code><br/><br/>",
"success": "Deine Daten wurden erfolgreich von Clarkson migriert. Du wirst in kürze zur Anmeldung weitergeleitet wo du dich mit deiner E-Mail und dem passwort `hammond` anmelden kannst."
},
"fresh": {
"setupadminuser": "Erstelle einen Administrator",
"yourpassword": "Dein Passwort",
"youremail": "Deine E-Mail-Adresse",
"yourname": "Dein Name",
"success": "Du hast dich erfolgreich registriert. Du wirst in kürze zur Anmeldung weitergeleitet und kannst Anfangen Hammond zu verwenden."
}
},
"roles": {
"ADMIN": "Adminstrator",
"USER": "Benutzer"
},
"profile": "Profil",
"processedon": "Bearbeitet am",
"enable": "Entsperren",
"disable": "Sperren",
"confirm": "Bestätigen",
"labelforfile": "Bezeichnung für diese Datei"
}

View file

@ -0,0 +1,231 @@
{
"quickentry": "Pas d'entrée rapide | Entrée rapide | Entrées rapides",
"statistics": "Statistiques",
"thisweek": "Cette semaine",
"thismonth": "Ce mois",
"pastxdays": "Dernier jour | Derniers {count} jours",
"pastxmonths": "Dernier mois | Derniers {count} mois",
"thisyear": "Cette année",
"alltime": "Tout le temps",
"noattachments": "Pas de piece jointe",
"attachments": "Pièces jointes",
"choosefile": "Choose File",
"addattachment": "Ajouter une pièce jointe",
"sharedwith": "Partager avec",
"share": "Partager",
"you": "Vous",
"addfillup": "Ajouter un plein",
"createfillup": "Créer un plein",
"deletefillup": "Supprimer ce plein",
"addexpense": "Ajouter une dépense",
"createexpense": "Créer une dépense",
"deleteexpense": "Supprimer cette dépense",
"nofillups": "Pas de plein",
"transfervehicle": "Transferer le Véhicule",
"settingssaved": "Paramètres sauvegardés avec succès",
"yoursettings": "Vos paramètres",
"settings": "Paramètres",
"changepassword": "Changer votre mot de passe",
"oldpassword": "Ancien mot de passe",
"newpassword": "Nouveau mot de passe",
"repeatnewpassword": "Répéter votre nouveau mot de passe",
"passworddontmatch": "Les mots de passe ne correspondent pas",
"save": "Sauvegarder",
"supportthedeveloper": "Supporter le développeur",
"buyhimabeer": "Acheter lui un café!",
"featurerequest": "Demande de fonctionnalité",
"foundabug": "Trouvé un bug",
"currentversion": "Version actuelle",
"moreinfo": "Plus d'informations",
"currency": "Monnaie",
"distanceunit": "Unité de distance",
"dateformat": "Format de data",
"createnow": "Créer Maintenant",
"yourvehicles": "Vos Véhicules",
"menu": {
"quickentries": "Entrée rapide",
"logout": "Se déconnecter",
"import": "Importer",
"home": "Accueil",
"settings": "Paramètres",
"admin": "Admin",
"sitesettings": "Paramètres du site",
"users": "Utilisateurs",
"login": "Connexion"
},
"enterusername": "Entrez votre nom d'utilisateur",
"enterpassword": "Entrez votre mot de passe",
"email": "Email",
"password": "Mot de passe",
"login": "connexion",
"totalexpenses": "Dépenses totales",
"fillupcost": "Coût des pleins",
"otherexpenses": "Autres dépenses",
"addvehicle": "Ajouter un Véhicule",
"editvehicle": "Editer un Véhicule",
"deletevehicle": "Supprimer un Véhicule",
"sharevehicle": "Partager un Véhicule",
"makeowner": "Changer le propriétaire",
"lastfillup": "Dernier plein",
"quickentrydesc": "Prendre une photo de la facture ou de l'écran de la pompe à essence pour créer une entrée plus tard.",
"quickentrycreatedsuccessfully": "Entrée rapide créée avec succès",
"uploadfile": "Téléverser un fichier",
"uploadphoto": "Téléverser une photo",
"details": "Détails",
"odometer": "Odomètre",
"language": "Langue",
"date": "Date",
"pastfillups": "Derniers pleins",
"fuelsubtype": "Sous-type de combustible",
"fueltype": "Type de combustible",
"quantity": "Quantité",
"gasstation": "Station service",
"fuel": {
"petrol": "Pétrol",
"diesel": "Diesel",
"cng": "CNG",
"lpg": "LPG",
"electric": "Electrique",
"ethanol": "Éthanol"
},
"unit": {
"long": {
"litre": "Litre",
"gallon": "Gallon",
"kilowatthour": "Kilowatt Heure",
"kilogram": "Kilogram",
"usgallon": "US Gallon",
"minutes": "Minutes",
"kilometers": "Kilometres",
"miles": "Miles"
},
"short": {
"litre": "Lt",
"gallon": "Gal",
"kilowatthour": "KwH",
"kilogram": "Kg",
"usgallon": "US Gal",
"minutes": "Mins",
"kilometers": "Km",
"miles": "Mi"
}
},
"avgfillupqty": "Qté de plein moyen",
"avgfillupexpense": "Prix du plein moyen",
"avgfuelcost": "Prix de l'essence moyen",
"per": "{0} par {1}",
"price": "Prix",
"total": "Total",
"fulltank": "Reservoir complet",
"partialfillup": "Plein partiel",
"getafulltank": "Est-ce que vous avez rempli tout votre reservoir?",
"tankpartialfull": "Le quel traquez-vous?",
"by": "Par",
"expenses": "Dépenses",
"expensetype": "Type de dépense",
"noexpenses": "Pas de dépense",
"download": "Télécharger",
"title": "Titre",
"name": "Nom",
"delete": "Supprimer",
"importdata": "Importer des données dans Hammond",
"importdatadesc": "Choisissez une option pour importer des données dans Hammond",
"import": "Importer",
"importcsv": "Si vous utilisiez {name} pour stocker les données de vos véhicules, exportez les données en format CSV depuis {name} et cliquez ici pour importer.",
"importgeneric": "Importation de plein générique",
"importgenericdesc": "Importation de plein avec un SVC.",
"choosecsv": "Choisir un CSV",
"choosephoto": "Choisir une Photo",
"importsuccessfull": "Données importée avec succès",
"importerror": "Il y a eu un problème lors de l'importation. Veuillez regarder le message d'erreur",
"importfrom": "Importer depuis {0}",
"stepstoimport": "Étapes pour importer des données depuis {name}",
"choosecsvimport": "Choisissez le fichier CSV de {name} et appuyez sur le bouton pour importer.",
"choosedatafile": "Choisissez le fichier CSV et appuyez sur le bouton pour importer.",
"dontimportagain": "Faites attention à ne pas importer le fichier à nouveau car cela va créer des entrées dupliquées.",
"checkpointsimportcsv": "Dès que vous avez vérifié tous ces points, importez le CSV ci-dessous.",
"importhintunits": "De la même manière, make sure that the <u>Fuel Unit</u> and <u>Fuel Type</u> are correctly set in the Vehicle.",
"importhintcurrdist": "Soyez sûre que la <u>Monnaie</u> et l'<u>Unité de distance</u> sont mises correctement dans Hammond. L'importation ne detectera pas automatiquement la Monnaie du fichier mais utilisera les valeurs de l'utilisateur.",
"importhintnickname": "Soyez sûre que le nom du véhicule dans Hammon est exactement le même que le nom dans Fuelly, sinon, l'importation ne fonctionnera pas.",
"importhintvehiclecreated": "Soyez sûre d'avoir déjà créé le véhicule dans la plate-forme Hammond.",
"importhintcreatecsv": "Exportez vos données depuis {name} en format CSV. Les étapes pour faire ceci peuvent être trouvées",
"importgenerichintdata": "Les données doivent être au format CSV.",
"here": "ici",
"unprocessedquickentries": "Vous avez 1 entrée rapide en attente d'être traîtée. | Vous avez {0} entrée rapide en attente d'être traîtée.",
"show": "montrer",
"loginerror": "Il y a eu une erreur lors de la connexion a votre compte: {msg}",
"showunprocessed": "Montrer seulement les non-traîtées",
"unprocessed": "non-traîtée",
"sitesettingdesc": "Mettre à jour les paramètres du site. Ces valeurs seront utilisées par défaut pour les nouveaux utilisateurs.",
"settingdesc": "Ces valeurs seront utilisées par défaut lorsque vous créez un nouveau plein ou une nouvelle dépense.",
"areyousure": "Êtes-vous sûre de vouloir faire ceci?",
"adduser": "Ajouter un utilisateur",
"usercreatedsuccessfully": "Utilisateur créé avec succès",
"userdisabledsuccessfully": "Utilisateur désactivé avec succès",
"userenabledsuccessfully": "Utilisateur activé avec succès",
"role": "Rôle",
"created": "Créé",
"createnewuser": "Créer un nouvel utilisateur",
"cancel": "Annuler",
"novehicles": "Il semble que vous n'avez pas encore créé de véhicule dans le système pour le moment. Commencez par créer une entrée pour un des véhicule que vous voulez traquer.",
"processed": "Marquer en tant que traîté",
"notfound": "Non Trouvé",
"timeout": "La page a expiré lors du chargement. Êtes-vous sûre d'être toujours connecté à Internet?",
"clicktoselect": "Cliquer pour sélectionner...",
"expenseby": "Dépense par",
"selectvehicle": "Selectionner un véhicule",
"expensedate": "Date de la dépense",
"totalamountpaid": "Montant payé total",
"fillmoredetails": "Entrer plus de détails",
"markquickentryprocessed": "Marquer l'entrée rapide séléctionnée en tant que traîtée",
"referquickentry": "Faire référence à une entrée rapide",
"deletequickentry": "Ceci va supprimer l'entrée rapide. Cette action ne peut pas être annulée. Êtes-vous sûre?",
"fuelunit": "Unité de combustible",
"fillingstation": "Nom de la station service",
"comments": "Commentaires",
"missfillupbefore": "Est-ce que vous avez manqué un plein avant celui-ci?",
"missedfillup": "Plein manqué",
"fillupdate": "Date du plein",
"fillupsavedsuccessfully": "Plein sauvegardé avec succès",
"expensesavedsuccessfully": "Dépense sauvegardé avec succès",
"vehiclesavedsuccessfully": "Véhicule sauvegardé avec succès",
"settingssavedsuccessfully": "Paramètres sauvegardés avec succès",
"back": "Retour",
"nickname": "Surnom",
"registration": "Immatriculation",
"createvehicle": "Créer un Véhicule",
"make": "Marque",
"model": "Modèle",
"yearmanufacture": "Année de production",
"enginesize": "Taille du moteur (en chevaux)",
"mysqlconnstr": "Chaîne de caractère pour la connexion MySQL",
"testconn": "Tester la Connexion",
"migrate": "Migrer",
"init": {
"migrateclarkson": "Migrer depuis Clarkson",
"migrateclarksondesc": "Si vous avez un déploiement Clarkson existant et que vous souhaitez migrer vos données à partir de celui-ci, appuyez sur le bouton suivant.",
"freshinstall": "Nouvelle Installation",
"freshinstalldesc": "Si vous voulez une nouvelle installation de Hammond, appuyez sur le bouton suivant.",
"clarkson": {
"desc": "<p>Vous devez vous assurer que ce déploiement de Hammond peut accéder à la base de données MySQL utilisée par Clarkson.</p><p>Si ce n'est pas directement possible, vous pouvez faire une copie de cette base de données autre part qui est accessible à partir de cette instance.</p><p>Une fois cela fait, entrez la chaîne de connexion à l'instance MySQL au format suivant.</p><p>Tous les utilisateurs importés de Clarkson auront leur nom d'utilisateur comme e-mail dans la base de données Clarkson et le mot de passe défini sur <span class='' style='font-weight:bold'>hammond</span></p><code>user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local</code><br/><br/>",
"success": "Nous avons migré avec succès les données depuis Clarkson. Vous serez bientôt redirigé vers l'écran de connexion où vous pourrez vous connecter en utilisant votre adresse e-mail et votre mot de passe existants : hammond"
},
"fresh": {
"setupadminuser": "Configurer le compte administrateur",
"yourpassword": "Votre Mot de passe",
"youremail": "Votre Email",
"yourname": "Votre Nom",
"success": "Vous avez été inscrit avec succès. Vous allez être redirigé vers la page de connexion très bientôt, vous pourrez vous connecter et commencer à utiliser le système."
}
},
"roles": {
"ADMIN": "ADMIN",
"USER": "USER"
},
"profile": "Profile",
"processedon": "Traîté le",
"enable": "Activer",
"disable": "Désactiver",
"confirm": "Continuer",
"labelforfile": "Label pour ce fichier"
}

View file

@ -0,0 +1,231 @@
{
"quickentry": "Nincs gyors bejegyzés | Gyors bejegyzés | Gyors bejegyzések",
"statistics": "Statisztikák",
"thisweek": "Ez a hét",
"thismonth": "Ez a hónap",
"pastxdays": "Elmúlt 1 nap | Elmúlt {count} nap",
"pastxmonths": "Elmúlt 1 hónap | Past {count} hónap",
"thisyear": "Ez az év",
"alltime": "Összes",
"noattachments": "Nincs csatolmány eddig",
"attachments": "Csatolmányok",
"choosefile": "Válassz fájlt",
"addattachment": "Csatolmány hozzáadása",
"sharedwith": "Megosztva vele",
"share": "Megosztás",
"you": "Te",
"addfillup": "Tankolás hozzáadása",
"createfillup": "Tankolás létrehozása",
"deletefillup": "Tankolás törlése",
"addexpense": "Kiadás hozzáadása",
"createexpense": "Kiadás létrehozása",
"deleteexpense": "Kiads törlése",
"nofillups": "Nincs tankolás eddig",
"transfervehicle": "Jármű átruházása",
"settingssaved": "Beállítások sikeresen mentve",
"yoursettings": "Beállításaid",
"settings": "Beállítások",
"changepassword": "Jelszó megváltoztatása",
"oldpassword": "Régi jelszó",
"newpassword": "Új jelszó",
"repeatnewpassword": "Jelszó mégegyszer",
"passworddontmatch": "Jelszavak nem egyeznek",
"save": "Mentés",
"supportthedeveloper": "Támogsad a fejlesztőt",
"buyhimabeer": "Vegyél neki egy sört!",
"featurerequest": "Funkció kérése",
"foundabug": "Hibát találtam",
"currentversion": "Aktuális verzió",
"moreinfo": "Több információ",
"currency": "Pénznem",
"distanceunit": "Távolság mértékegysége",
"dateformat": "Dátum formátuma",
"createnow": "Létrehozás most",
"yourvehicles": "Járműveid",
"menu": {
"quickentries": "Gyors bejegyzések",
"logout": "Kijelentkezés",
"import": "Betöltés",
"home": "Kezdőlap",
"settings": "Beállítások",
"admin": "Adminisztrátor",
"sitesettings": "Oldal beállításai",
"users": "Felhasználók",
"login": "Bejelentkezés"
},
"enterusername": "Írd be a felhasználó neved",
"enterpassword": "Írd be a jelszavad",
"email": "Email",
"password": "Jelszó",
"login": "bejelentkezés",
"totalexpenses": "Összeskiadás",
"fillupcost": "Tankolás költsége",
"otherexpenses": "Egyéb kiadás",
"addvehicle": "Jármű hozzáadása",
"editvehicle": "Jármű szerkesztése",
"deletevehicle": "Jármű törlése",
"sharevehicle": "Jármű megosztása",
"makeowner": "Tulajdonosnak jelölés",
"lastfillup": "Utolsó tankolás",
"quickentrydesc": "Csinálj képet a blokkról/számláról vagy a tankoló mérőóráról hogy fel tudd vinni később az adatokat.",
"quickentrycreatedsuccessfully": "Gyors bejegyzés sikeresen létrehozva",
"uploadfile": "Fájl feltöltése",
"uploadphoto": "Fotó feltöltése",
"details": "Részletek",
"odometer": "Kilóméter óra",
"language": "Nyelv",
"date": "Dátum",
"pastfillups": "Előző tankolások",
"fuelsubtype": "Üzemanyag altípus",
"fueltype": "Üzemanyag típus",
"quantity": "Mennyiség",
"gasstation": "Benzinkút",
"fuel": {
"petrol": "Benzin",
"diesel": "Dízel",
"cng": "CNG",
"lpg": "LPG",
"electric": "Elektromos",
"ethanol": "Etanol"
},
"unit": {
"long": {
"litre": "Liter",
"gallon": "Gallon",
"kilowatthour": "Kilowattóra",
"kilogram": "Kilogram",
"usgallon": "US Gallon",
"minutes": "Perc",
"kilometers": "Kilóméter",
"miles": "Mérföld"
},
"short": {
"litre": "L",
"gallon": "Gal",
"kilowatthour": "KwH",
"kilogram": "Kg",
"usgallon": "US Gal",
"minutes": "P",
"kilometers": "Km",
"miles": "Mérf"
}
},
"avgfillupqty": "Átl. tankolási menny.",
"avgfillupexpense": "Átl. tankolási kiadás",
"avgfuelcost": "Átl. üzemanyag ár",
"per": "{0} per {1}",
"price": "Ár",
"total": "Összesen",
"fulltank": "Tele tank",
"partialfillup": "Részleges tankolás",
"getafulltank": "Teletankoltál?",
"tankpartialfull": "Which do you track?",
"by": "által",
"expenses": "Kiadások",
"expensetype": "Kiadás típusa",
"noexpenses": "Nincs kiadás eddig",
"download": "Letöltés",
"title": "Címe",
"name": "Neve",
"delete": "Törlés",
"importdata": "Adata betöltésa Hammondba",
"importdatadesc": "Válassz az alábbi lehetőségek közül, hogy betöltsd az adatokat",
"import": "Betöltés",
"importcsv": "Ha már használtad {name}-t hogy tárold a jármű adatait, exportáld CSV-be {name}-ból/ből majd kattints it a Betöltésre.",
"importgeneric": "Általános tanoklások betöltése",
"importgenericdesc": "Tankolás CSV betöltés.",
"choosecsv": "CSV választása",
"choosephoto": "Fotó választása",
"importsuccessfull": "Adat sikeresen betöltve",
"importerror": "Betöltés közben hiba lépett fel. Kérem ellenőrizze a hibaüzenetet.",
"importfrom": "Betöltés innen: {0}",
"stepstoimport": "Lépések az adat betöltéséhez {name}-ból/ből",
"choosecsvimport": "Válassza a/az {name} CSV-t és nyomja meg a betöltés gombot.",
"choosedatafile": "Válassza a CSV fájlt majd nyomja meg az importálás gombot.",
"dontimportagain": "Legyen biztos benne, hogy nem importálja újra ugyan azt a fájlt. Dublikált bejegyzéseket eredményez.",
"checkpointsimportcsv": "Amikor végzett az összes ponttal, töltse be a CSV-t lejjebb.",
"importhintunits": "Hasonlóan, legyen biztos benne, hogy az <u>Üzemanyag egysége</u> és az <u>Üzemanyag Típúsa</u> helyesek a Jármű beállításaiban.",
"importhintcurrdist": "Ellenőrizze, hogy a <u>Pénznem</u> és a <u>Távolság mértékegysége</u> be lettek állítva a Hammond-ban. A betöltés automatikusan nem ismeri fel a bejegyzések Pénznemét, helyette a felhaszáló alapértlemzett beállítása lesz alkalmazva.",
"importhintnickname": "Ellenőrizze, hogy a Jármű neve Hammond-ban megegyezik a Fuelly CSV-ben használttal vagy a betöltés nem fog működni.",
"importhintvehiclecreated": "Ellenőrizze, hogy a Járművek már léteznek a Hammond rendszerében.",
"importhintcreatecsv": "Mentse adatát {name}-ból/ből CSV formátumba. Steps to do that can be found",
"importgenerichintdata": "Az adatnak CSV formátumban kell lennie.",
"here": "itt",
"unprocessedquickentries": "Egy gyors bejegyzés feldolgozva. | {0} gyorsbejegyzés vár feldolgozásra.",
"show": "Mutasd",
"loginerror": "Hiba történt a bejelentkezés során. {msg}",
"showunprocessed": "Csak nem feldolgozottak",
"unprocessed": "feldolgozatlan",
"sitesettingdesc": "Oldal beállításainak módosítása. Ezek lesznek használva új felhazsnálók létrehozásakor.",
"settingdesc": "Ezek lesznak alkalmazva alapértelmezett értékként, tankolásnál vagy kiadásnál.",
"areyousure": "Biztos hogy ezt akarja?",
"adduser": "Felhasználó hozzáadása",
"usercreatedsuccessfully": "Felhasználó sikeresen létrehozva",
"userdisabledsuccessfully": "Felhasználó sikeresen letiltva",
"userenabledsuccessfully": "Felhasználó sikeresen engedélyezve",
"role": "Szerepkör",
"created": "Létrehozva",
"createnewuser": "Új felhasználó létrehozása",
"cancel": "Mégsem",
"novehicles": "Eddig nem hozott létre járművet a rendszerében. Hozzon létre egyet amelynek adatait követni szeretné.",
"processed": "Megjelölés feldolgozottnak",
"notfound": "Nem talált",
"timeout": "A lap túl sokáig nem töltött be. Biztos benne, hogy még mindig van \ninternet elérése?",
"clicktoselect": "Válasszon...",
"expenseby": "Kiadások ez szerint",
"selectvehicle": "Válassz járművet",
"expensedate": "Kiadás dátuma",
"totalamountpaid": "Összes kifizetés",
"fillmoredetails": "Több részlet kitöltése",
"markquickentryprocessed": "Kiválasztott gyorsbejegyzések megjelölése feldolgozottként",
"referquickentry": "Gzorsbejegzy;s referencia",
"deletequickentry": "Ez kitörli ezt a gyorsbejegyzést. Ez a lépés visszafordíthatatlan. Biztos benne?",
"fuelunit": "Üzemenyag egység",
"fillingstation": "Benzinkút neve",
"comments": "Komment",
"missfillupbefore": "Nem töltötte ki az előző tankolást?",
"missedfillup": "Kihagyott tankolás",
"fillupdate": "Tankolás dátuma",
"fillupsavedsuccessfully": "Tankolás sikeresen mentve",
"expensesavedsuccessfully": "Kiadás sikeresen mentve",
"vehiclesavedsuccessfully": "Jármű sikeresen mentve",
"settingssavedsuccessfully": "Beállítások sikeresen mentve",
"back": "Vissza",
"nickname": "Becenév",
"registration": "Rendszám",
"createvehicle": "Jármű létrehozása",
"make": "Gyártó",
"model": "Model",
"yearmanufacture": "Gyártás éve",
"enginesize": "Motorméret (cm3)",
"mysqlconnstr": "Mysql Connection String",
"testconn": "Kapcsolat tesztelése",
"migrate": "Migrálás",
"init": {
"migrateclarkson": "Migrálás Clarkson-ból",
"migrateclarksondesc": "Ha van egy meglévő Clarkson telepítése, és szeretné adatait átmozgatni onnan, nyomja meg a következő gombot.",
"freshinstall": "Tiszta telepítés",
"freshinstalldesc": "Ha szeretné a Hammond tiszta telepítését, nyomja meg a következő gombot.",
"clarkson": {
"desc": "<p>Biztosítania kell, hogy ez a Hammond telepítés el tudja érni a Clarkson által készített MySQL adatbázist.</p><p>Ha ez nem megoldható, készíthet egy másolatot az adatbázisról, és elhelyzheti olyan helyre amely elérhető innen.</p><p>Amikor ezzel kész van, Állítsa me a connection String-et a MySQL-hez a következő formátumban.</p><p>Az összes Clarkson-ból migrált felhasználónak az e-mail címük lesz a felhasználó nevük, és a jelszavuk <span class='' style='font-weight:bold'>hammond</span> lesz</p><code>user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local</code><br/><br/>",
"success": "Sikeresen migráltuk az adatot Clarkson-ból. Hamarosan át lesz irányítva a bejelentkezési oldalra, ahol használhatja a meglévő fiókját, és jelszavát: hammond"
},
"fresh": {
"setupadminuser": "Adminisztrátor felhasználó beállítása",
"yourpassword": "Ön jelszava",
"youremail": "Ön e-mailcíme",
"yourname": "Ön neve",
"success": "Ön sikeresen regisztrált. Át lesz irányítva a bejelentkezési képernyőre, ahol be tud jelentkezni és elkezdheti használni a rendszert."
}
},
"roles": {
"ADMIN": "ADMIN",
"USER": "FELHASZNÁLÓ"
},
"profile": "Profil",
"processedon": "Felfdolgozva ekkor",
"enable": "Engedélyezve",
"disable": "Letiltva",
"confirm": "Megerősítés",
"labelforfile": "Címke ehheza fájlhoz"
}

View file

@ -1,7 +1,10 @@
export const LANGUAGES = [
{ label: "Spanish", code: "es" },
{ label: "English", code: "en" },
{ label: "Italian", code: "it" },
{ label: "Danish", code: "da" },
{ label: "english | english", code: "en" },
{ label: "danish | dansk", code: "da" },
{ label: "german | deutch", code: "de" },
{ label: "frensh | français", code: "fr" },
{ label: "hungarian | magyar", code: "hu" },
{ label: "slovenian | slovenski", code: "sl" },
{ label: "Chinese (simplified) | 简体中文", code: "zh" },
];

View file

@ -0,0 +1,231 @@
{
"quickentry": "Ni hitrih vnosov | Hiter vnos | Hitri vnosi",
"statistics": "Statistika",
"thisweek": "Ta teden",
"thismonth": "Ta mesec",
"pastxdays": "Zadnji dan | Zadnjih {count} dni",
"pastxmonths": "Zadnji mesec | Zadnji {count} mesecev",
"thisyear": "To leto",
"alltime": "Celoten čas",
"noattachments": "Zaenkrat še ni priponk",
"attachments": "Priloge",
"choosefile": "Izberi datoteko",
"addattachment": "Dodaj prilogo",
"sharedwith": "V skupni rabi z",
"share": "Deli",
"you": "Ti",
"addfillup": "Dodaj polnjenje",
"createfillup": "Ustvarite polnjenje",
"deletefillup": "Izbriši to polnjenje",
"addexpense": "Dodaj strošek",
"createexpense": "Ustvari strošek",
"deleteexpense": "Izbriši ta strošek",
"nofillups": "Zaenkrat še brez polnjenja",
"transfervehicle": "Prevozno sredstvo",
"settingssaved": "Nastavitve so uspešno shranjene",
"yoursettings": "Vaše nastavitve",
"settings": "Nastavitve",
"changepassword": "Spremeni geslo",
"oldpassword": "Staro geslo",
"newpassword": "Novo geslo",
"repeatnewpassword": "Ponovite novo geslo",
"passworddontmatch": "Vrednosti gesel se ne ujemajo",
"save": "Shrani",
"supportthedeveloper": "Podprite razvijalca",
"buyhimabeer": "Kupi mu pivo!",
"featurerequest": "Nova funkcionalnost",
"foundabug": "Našel sem hrošča",
"currentversion": "Trenutna verzija",
"moreinfo": "Več informacij",
"currency": "Valuta",
"distanceunit": "Enota razdalje",
"dateformat": "Format datuma",
"createnow": "Ustvari zdaj",
"yourvehicles": "Vaša vozila",
"menu": {
"quickentries": "Hitri vnosi",
"logout": "Odjava",
"import": "Uvoz",
"home": "Domov",
"settings": "Nastavitve",
"admin": "Skrbnik",
"sitesettings": "Nastavitve spletnega mesta",
"users": "Uporabniki",
"login": "Vpiši se"
},
"enterusername": "Vnesite svoje uporabniško ime",
"enterpassword": "Vnesite vaše geslo",
"email": "E-naslov",
"password": "Geslo",
"login": "Vpiši se",
"totalexpenses": "Skupni stroški",
"fillupcost": "Stroški polnjenja",
"otherexpenses": "Drugi stroški",
"addvehicle": "Dodaj vozilo",
"editvehicle": "Uredi vozilo",
"deletevehicle": "Izbriši vozilo",
"sharevehicle": "Deli vozilo",
"makeowner": "Postani lastnik",
"lastfillup": "Zadnje polnjenje",
"quickentrydesc": "Posnemite sliko računa ali zaslona črpalke za gorivo, da ju lahko vnesete pozneje.",
"quickentrycreatedsuccessfully": "Hitri vnos je bil uspešno ustvarjen",
"uploadfile": "Naloži datoteko",
"uploadphoto": "Naloži fotografijo",
"details": "Podrobnosti",
"odometer": "Odometer",
"language": "Jezik",
"date": "Datum",
"pastfillups": "Prejšnja polnjenja",
"fuelsubtype": "Podvrsta goriva",
"fueltype": "Vrsta goriva",
"quantity": "Količina",
"gasstation": "Bencinska črpalka",
"fuel": {
"petrol": "Bencin",
"diesel": "Dizelsko gorivo",
"cng": "CNG",
"lpg": "LPG",
"electric": "Elektrika",
"ethanol": "Etanol"
},
"unit": {
"long": {
"litre": "Liter",
"gallon": "Galon",
"kilowatthour": "Kilovatna ura",
"kilogram": "Kilogram",
"usgallon": "Ameriška galona",
"minutes": "Minute",
"kilometers": "Kilometri",
"miles": "Milje"
},
"short": {
"litre": "Lit",
"gallon": "Gal",
"kilowatthour": "KwH",
"kilogram": "Kg",
"usgallon": "US Gal",
"minutes": "Min",
"kilometers": "Km",
"miles": "Mi"
}
},
"avgfillupqty": "Povprečna količina polnjenja",
"avgfillupexpense": "Povprečni stroški polnjenja",
"avgfuelcost": "Povprečni strošek goriva",
"per": "{0} na {1}",
"price": "Cena",
"total": "Skupaj",
"fulltank": "Rezervoar poln",
"partialfillup": "Delno polnjenje",
"getafulltank": "Ste dobili poln rezervoar?",
"tankpartialfull": "Kateremu sledite?",
"by": "Od",
"expenses": "Stroški",
"expensetype": "Vrsta stroška",
"noexpenses": "Zaenkrat ni bilo stroškov",
"download": "Prenesi",
"title": "Naslov",
"name": "Ime",
"delete": "Izbriši",
"importdata": "Uvozite podatke v Hammond",
"importdatadesc": "Za uvoz podatkov v Hammond izberite med naslednjimi možnostmi",
"import": "Uvozi",
"importcsv": "Če ste za shranjevanje podatkov o vozilu uporabljali {name}, izvozite datoteko CSV iz {name} in kliknite tukaj za uvoz.",
"importgeneric": "Generični uvoz polnjenja",
"importgenericdesc": "CSV uvoz poljenja.",
"choosecsv": "Izberite CSV",
"choosephoto": "Izberite fotografijo",
"importsuccessfull": "Podatki so bili uspešno uvoženi",
"importerror": "Pri uvozu datoteke je prišlo do težave. ",
"importfrom": "Uvoz iz {0}",
"stepstoimport": "Koraki za uvoz podatkov iz {name}",
"choosecsvimport": "Izberite {name} CSV in pritisnite gumb za uvoz.",
"choosedatafile": "Izberite datoteko CSV in pritisnite gumb za uvoz.",
"dontimportagain": "Prepričajte se, da datoteke ne uvozite znova, ker boste s tem ustvarili ponavljajoče se vnose.",
"checkpointsimportcsv": "Ko preverite vse te točke, preprosto uvozite spodnji CSV.",
"importhintunits": "Podobno se prepričajte, da sta <u>Enota za gorivo</u> in <u>Vrsta goriva</u> pravilno nameščeni pod Vozilo.",
"importhintcurrdist": "Prepričajte se, da sta <u>Valuta</u> in <u>Enota razdalje</u> pri Hammondu uporabniku pravilno nastavljeni.",
"importhintnickname": "Prepričajte se, da je vzdevek vozila v Hammondu popolnoma enak imenu v CSV datoteki polnjenj, sicer uvoz ne bo deloval.",
"importhintvehiclecreated": "Prepričajte se, da ste že ustvarili vozila na platformi Hammond.",
"importhintcreatecsv": "Izvozite svoje podatke iz {name} v formatu CSV. ",
"importgenerichintdata": "Podatki morajo biti v formatu CSV.",
"here": "tukaj",
"unprocessedquickentries": "Za obdelavo imate en hiter vnos. | Za obdelavo imate {0} hitrih vnosov.",
"show": "Prikaži",
"loginerror": "Pri prijavi v vaš račun je prišlo do napake. ",
"showunprocessed": "Pokaži samo neobdelano",
"unprocessed": "neobdelano",
"sitesettingdesc": "Posodobite nastavitve na ravni aplikacije. Te bodo uporabljene kot privzete vrednosti za nove uporabnike.",
"settingdesc": "Te bodo uporabljene kot privzete vrednosti vsakič, ko ustvarite novo polnjenje ali strošek.",
"areyousure": "Ste prepričani, da želite to narediti?",
"adduser": "Dodaj uporabnika",
"usercreatedsuccessfully": "Uporabnik je bil uspešno ustvarjen",
"userdisabledsuccessfully": "Uporabnik uspešno onemogočen",
"userenabledsuccessfully": "Uporabnik je uspešno omogočen",
"role": "Vloga",
"created": "Ustvarjeno",
"createnewuser": "Ustvari novega uporabnika",
"cancel": "Prekliči",
"novehicles": "Videti je, da še niste ustvarili vozila v sistemu. ",
"processed": "Označi obdelano",
"notfound": "Ni najdeno",
"timeout": "Med nalaganjem strani je potekla časovna omejitev. ",
"clicktoselect": "Kliknite za izbiro ...",
"expenseby": "Stroški po",
"selectvehicle": "Izberite vozilo",
"expensedate": "Datum izdatka",
"totalamountpaid": "Skupni plačani znesek",
"fillmoredetails": "Izpolnite več podrobnosti",
"markquickentryprocessed": "Označi izbrani hitri vnos kot obdelan",
"referquickentry": "Oglejte si hiter vnos",
"deletequickentry": "S tem boste izbrisali ta hitri vnos. ",
"fuelunit": "Enota za gorivo",
"fillingstation": "Ime bencinske postaje",
"comments": "Komentarji",
"missfillupbefore": "Ste pred tem zamudili vnos zapolnitve?",
"missedfillup": "Zamujeno polnjenje",
"fillupdate": "Datum polnjenja",
"fillupsavedsuccessfully": "Polnjenje je bil uspešno shranjeno",
"expensesavedsuccessfully": "Stroški so uspešno shranjeni",
"vehiclesavedsuccessfully": "Vozilo je uspešno shranjeno",
"settingssavedsuccessfully": "Nastavitve so uspešno shranjene",
"back": "Nazaj",
"nickname": "Vzdevek",
"registration": "Registracija",
"createvehicle": "Ustvarite vozilo",
"make": "Znamka / Podjetje",
"model": "Model",
"yearmanufacture": "Leto izdelave",
"enginesize": "Prostornina motorja (v cc)",
"mysqlconnstr": "Niz povezave Mysql",
"testconn": "Testna povezava",
"migrate": "Preseli",
"init": {
"migrateclarkson": "Selitev iz Clarksona",
"migrateclarksondesc": "Če imate obstoječo Clarkson namestitev in želite iz nje preseliti svoje podatke, pritisnite naslednji gumb.",
"freshinstall": "Sveža namestitev",
"freshinstalldesc": "Če želite novo namestitev Hammonda, pritisnite naslednji gumb.",
"clarkson": {
"desc": "<p>Zagotoviti morate, da lahko ta uvedba Hammonda dostopa do baze podatkov MySQL, ki jo uporablja Clarkson.</p><p>Če to ni neposredno mogoče, lahko naredite kopijo te zbirke podatkov nekje, kjer je dostopna iz tega primerka.</p><p>Ko je to storjeno, vnesite povezovalni niz v primerek MySQL v naslednji obliki.</p><p>Vsi uporabniki, uvoženi iz Clarksona, bodo imeli svoje uporabniško ime kot e-pošto v bazi podatkov Clarkson in geslo nastavljeno na<span class='' style='font-weight:bold'>hammond</span></p><code>uporabnik:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4</code><br/><br/>",
"success": "Uspešno smo prenesli podatke iz Clarksona. "
},
"fresh": {
"setupadminuser": "Nastavitev skrbniških uporabnikov",
"yourpassword": "Vaše geslo",
"youremail": "Vaš e-poštni naslov",
"yourname": "Vaše ime",
"success": "Uspešno ste se registrirali. "
}
},
"roles": {
"ADMIN": "SKRBNIK",
"USER": "UPORABNIK"
},
"profile": "Profil",
"processedon": "Obdelano dne",
"enable": "Omogoči",
"disable": "Onemogoči",
"confirm": "Kar daj",
"labelforfile": "Oznaka za to datoteko"
}

View file

@ -0,0 +1,231 @@
{
"quickentry": "没有速记 | 速记 | 速记",
"statistics": "统计数据",
"thisweek": "本周",
"thismonth": "本月",
"pastxdays": "过去一天 | 过去 {count} 天",
"pastxmonths": "过去一个月 | 过去 {count} 个月",
"thisyear": "今年",
"alltime": "所有时间",
"noattachments": "目前还没有附件",
"attachments": "附件",
"choosefile": "选择文件",
"addattachment": "添加附件",
"sharedwith": "共享给",
"share": "分享",
"you": "您",
"addfillup": "添加加注记录",
"createfillup": "创建加注记录",
"deletefillup": "删除此加注记录",
"addexpense": "添加支出",
"createexpense": "创建支出记录",
"deleteexpense": "删除此支出",
"nofillups": "目前还没有加注记录",
"transfervehicle": "转让车辆",
"settingssaved": "设置保存成功",
"yoursettings": "您的设置",
"settings": "设置",
"changepassword": "更改密码",
"oldpassword": "旧密码",
"newpassword": "新密码",
"repeatnewpassword": "重复新密码",
"passworddontmatch": "密码不匹配",
"save": "保存",
"supportthedeveloper": "支持开发者",
"buyhimabeer": "请他喝杯啤酒!",
"featurerequest": "功能请求",
"foundabug": "发现了错误",
"currentversion": "当前版本",
"moreinfo": "更多信息",
"currency": "货币",
"distanceunit": "长度单位",
"dateformat": "日期格式",
"createnow": "立即创建",
"yourvehicles": "您的车辆",
"menu": {
"quickentries": "速记",
"logout": "退出登录",
"import": "导入",
"home": "主页",
"settings": "设置",
"admin": "管理",
"sitesettings": "全局设置",
"users": "用户",
"login": "登录"
},
"enterusername": "输入您的用户名",
"enterpassword": "输入您的密码",
"email": "邮箱",
"password": "密码",
"login": "登录",
"totalexpenses": "总支出",
"fillupcost": "加注花费",
"otherexpenses": "其它支出",
"addvehicle": "添加车辆",
"editvehicle": "编辑车辆",
"deletevehicle": "删除车辆",
"sharevehicle": "共享车辆",
"makeowner": "设为车主",
"lastfillup": "上次加注记录",
"quickentrydesc": "拍摄发票或加油机显示屏的照片,以便稍后进行记录。",
"quickentrycreatedsuccessfully": "速记创建成功",
"uploadfile": "上传文件",
"uploadphoto": "上传照片",
"details": "详情",
"odometer": "里程表",
"language": "语言",
"date": "日期",
"pastfillups": "历史加注记录",
"fuelsubtype": "燃油型号",
"fueltype": "燃油类型",
"quantity": "加注量",
"gasstation": "加油站",
"fuel": {
"petrol": "汽油",
"diesel": "柴油",
"cng": "压缩天然气",
"lpg": "液化石油气",
"electric": "电力",
"ethanol": "乙醇"
},
"unit": {
"long": {
"litre": "升",
"gallon": "加仑",
"kilowatthour": "千瓦时",
"kilogram": "千克",
"usgallon": "美制加仑",
"minutes": "分钟",
"kilometers": "千米",
"miles": "英里"
},
"short": {
"litre": "升",
"gallon": "加仑",
"kilowatthour": "度",
"kilogram": "千克",
"usgallon": "美加仑",
"minutes": "分",
"kilometers": "千米",
"miles": "英里"
}
},
"avgfillupqty": "平均加注量",
"avgfillupexpense": "平均加注费用",
"avgfuelcost": "平均燃油成本",
"per": "每{1}的{0}",
"price": "价格",
"total": "总价",
"fulltank": "加满油箱",
"partialfillup": "部分加注",
"getafulltank": "您是否加满油箱?",
"tankpartialfull": "油箱状态如何标记?",
"by": "来自",
"expenses": "支出记录",
"expensetype": "支出类型",
"noexpenses": "目前还没有支出记录",
"download": "下载",
"title": "文件说明",
"name": "文件名",
"delete": "删除",
"importdata": "将数据导入 Hammond",
"importdatadesc": "从以下选项中进行选择以将数据导入 Hammond",
"import": "导入",
"importcsv": "如果您此前使用 {name} 存储车辆数据,请从 {name} 导出 CSV 文件,然后单击此处进行导入。",
"importgeneric": "通用导入",
"importgenericdesc": "导入加注信息的 CSV 文件。",
"choosecsv": "选择 CSV",
"choosephoto": "选择照片",
"importsuccessfull": "数据导入成功",
"importerror": "导入文件时出现问题,请检查错误信息。",
"importfrom": "从 {0} 导入",
"stepstoimport": "从 {name} 导入数据的步骤",
"choosecsvimport": "选择 {name} 的 CSV 文件,并单击导入按钮。",
"choosedatafile": "选择 CSV 文件,然后单击导入按钮。",
"dontimportagain": "确保不要再次导入文件,因为这样会产生重复数据。",
"checkpointsimportcsv": "检查完所有这些要点后,就在下面导入 CSV。",
"importhintunits": "同样,请确保车辆中的<u>燃油单位</u>和<u>燃油类型</u>设置正确。",
"importhintcurrdist": "确保在 Hammond 中正确设置了<u>货币</u>和<u>距离单位</u>。导入时不会从文件中自动检测货币,而是直接使用用户设置的货币。",
"importhintnickname": "确保 Hammond 中的车辆昵称与 CSV 中的名称完全相同,否则导入将不起作用。",
"importhintvehiclecreated": "确保已在 Hammond 中创建车辆。",
"importhintcreatecsv": "以 CSV 格式从 {name} 导出数据。可以在这里找到执行此操作的步骤:",
"importgenerichintdata": "数据必须为 CSV 格式。",
"here": "(文档)",
"unprocessedquickentries": "您有一条速记等待处理。 | 您有 {0} 条速记等待处理。",
"show": "显示",
"loginerror": "登录您的帐户时出错。{msg}",
"showunprocessed": "仅显示未处理的",
"unprocessed": "未处理的",
"sitesettingdesc": "更新全局设置,这些设置将作为新用户的默认值。",
"settingdesc": "当您创建新的加注或支出记录时,这些值将作为默认值使用。",
"areyousure": "您确定要这样做吗?",
"adduser": "添加用户",
"usercreatedsuccessfully": "用户创建成功",
"userdisabledsuccessfully": "用户禁用成功",
"userenabledsuccessfully": "用户启用成功",
"role": "角色",
"created": "创建",
"createnewuser": "创建新用户",
"cancel": "取消",
"novehicles": "您似乎尚未在系统中创建车辆,请先添加一辆。",
"processed": "标记为已处理",
"notfound": "未找到",
"timeout": "页面加载时超时,您确定仍连接到互联网吗?",
"clicktoselect": "单击以选择…",
"expenseby": "支出由",
"selectvehicle": "选择车辆",
"expensedate": "支出日期",
"totalamountpaid": "支付总额",
"fillmoredetails": "填写更多详细信息",
"markquickentryprocessed": "将选定的速记标记为已处理",
"referquickentry": "关联速记",
"deletequickentry": "此操作将删除这条速记。删除后无法恢复,您确定要继续吗?",
"fuelunit": "燃油单位",
"fillingstation": "加油站名称",
"comments": "注释",
"missfillupbefore": "您是否遗漏了之前的一次加注记录?",
"missedfillup": "遗漏的加注记录",
"fillupdate": "加注日期",
"fillupsavedsuccessfully": "加注记录保存成功",
"expensesavedsuccessfully": "支出记录保存成功",
"vehiclesavedsuccessfully": "车辆保存成功",
"settingssavedsuccessfully": "设置保存成功",
"back": "返回",
"nickname": "昵称",
"registration": "车牌号",
"createvehicle": "创建车辆",
"make": "品牌 / 制造商",
"model": "型号",
"yearmanufacture": "生产年份",
"enginesize": "发动机排量单位cc",
"mysqlconnstr": "MySQL 连接字符串",
"testconn": "测试连接",
"migrate": "迁移",
"init": {
"migrateclarkson": "从 Clarkson 迁移",
"migrateclarksondesc": "如果您已有 Clarkson 部署,并希望从中迁移数据,请单击以下按钮。",
"freshinstall": "全新安装",
"freshinstalldesc": "如果您想全新安装 Hammond请单击以下按钮。",
"clarkson": {
"desc": "<p>您需要此确保 Hammond 的部署可以访问 Clarkson 使用的 MySQL 数据库。</p><p>如果无法直接访问,可以在本实例可访问的地方复制该数据库。</p><p><完成后,按以下格式输入与 MySQL 实例的连接字符串。/p><p>所有从 Clarkson 导入的用户将使用原邮箱作为用户名,密码设置为<span class='' style='font-weight:bold'>hammond</span></p><code>user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local</code><br/><br/>",
"success": "我们已成功从 Clarkson 迁移数据。您将很快被重定向到登录界面在那里您可以使用现有的邮箱和密码hammond登录。"
},
"fresh": {
"setupadminuser": "设置管理员用户",
"yourpassword": "您的密码",
"youremail": "您的邮箱",
"yourname": "您的姓名",
"success": "您已注册成功。您将很快被重定向到登录界面,登录后即可开始使用。"
}
},
"roles": {
"ADMIN": "管理员",
"USER": "普通用户"
},
"profile": "配置文件",
"processedon": "处理于",
"enable": "启用",
"disable": "禁用",
"confirm": "继续",
"labelforfile": "文件说明"
}

View file

@ -0,0 +1,176 @@
import * as React from 'react';
import AppBar from '@mui/material/AppBar';
import Box from '@mui/material/Box';
import Toolbar from '@mui/material/Toolbar';
import IconButton from '@mui/material/IconButton';
import Typography from '@mui/material/Typography';
import Menu from '@mui/material/Menu';
import MenuIcon from '@mui/icons-material/Menu';
import Container from '@mui/material/Container';
import Avatar from '@mui/material/Avatar';
import Button from '@mui/material/Button';
import Tooltip from '@mui/material/Tooltip';
import MenuItem from '@mui/material/MenuItem';
import AdbIcon from '@mui/icons-material/Adb';
import MenuLanguages from './MenuLanguages';
import logo from '../logo.svg'
import reactLogo from '../react.svg'
//translation
import { useTranslation } from 'react-i18next';
import { LANGUAGES } from '../locales'
// a test to see if this will work in menu
import ListItemButton from '@mui/material/ListItemButton';
import ListItemText from '@mui/material/ListItemText';
function GarageAppLogo() {
return (
<div className="menu-logo-container">
<div className="menu-logo-image">
<img src={logo} alt="Bun Logo" className="menu-logo bun-logo" />
<img src={reactLogo} alt="React Logo" className="menu-logo react-logo" />
</div>
<div className="menu-logo-text">
<h2>
GarageApp
</h2>
</div>
</div>
)
}
const pages = ['Home', 'Quick Entries', 'Import'];
const settings = ['Profile', 'Admin', 'Logout'];
function ResponsiveAppBar() {
//translation
const { t, i18n } = useTranslation();
//MaterialUI stuff
const [anchorElNav, setAnchorElNav] = React.useState<null | HTMLElement>(null);
const [anchorElUser, setAnchorElUser] = React.useState<null | HTMLElement>(null);
const handleOpenNavMenu = (event: React.MouseEvent<HTMLElement>) => {
setAnchorElNav(event.currentTarget);
};
const handleOpenUserMenu = (event: React.MouseEvent<HTMLElement>) => {
setAnchorElUser(event.currentTarget);
};
const handleCloseNavMenu = () => {
setAnchorElNav(null);
};
const handleCloseUserMenu = () => {
setAnchorElUser(null);
};
return (
<AppBar position="static">
<Container>
<Toolbar disableGutters>
<GarageAppLogo sx={{ display: { xs: 'none', md: 'flex' }, mr: 1 }} />
<Box sx={{ flexGrow: 1, display: { xs: 'end', md: 'none' } }}>
<IconButton
size="large"
aria-label="account of current user"
aria-controls="menu-appbar"
aria-haspopup="true"
onClick={handleOpenNavMenu}
color="inherit"
>
<MenuIcon />
</IconButton>
<Menu
id="menu-appbar"
anchorEl={anchorElNav}
anchorOrigin={{
vertical: 'bottom',
horizontal: 'left',
}}
keepMounted
transformOrigin={{
vertical: 'top',
horizontal: 'left',
}}
open={Boolean(anchorElNav)}
onClose={handleCloseNavMenu}
sx={{ display: { xs: 'block', md: 'none' } }}
>
{pages.map((page) => (
<MenuItem key={page} onClick={handleCloseNavMenu}>
<Typography sx={{ textAlign: 'right' }}>{page}</Typography>
</MenuItem>
))}
</Menu>
</Box>
<AdbIcon sx={{ display: { xs: 'flex', md: 'none' }, mr: 1 }} />
<Typography
variant="h5"
noWrap
component="a"
href="#app-bar-with-responsive-menu"
sx={{
mr: 2,
display: { xs: 'flex', md: 'none' },
flexGrow: 1,
fontFamily: 'monospace',
fontWeight: 700,
letterSpacing: '.3rem',
color: 'inherit',
textDecoration: 'none',
}}
>
LOGO
</Typography>
<Box sx={{ flexGrow: 1, display: { xs: 'none', md: 'flex' } }}>
{pages.map((page) => (
<Button
key={page}
onClick={handleCloseNavMenu}
sx={{ my: 2, color: 'white', display: 'block' }}
>
{page}
</Button>
))}
</Box>
<Box sx={{ flexGrow: 0 }}>
<Tooltip title="Open settings">
<IconButton onClick={handleOpenUserMenu} sx={{ p: 0 }}>
<Avatar alt="Remy Sharp" src="/static/images/avatar/2.jpg" />
</IconButton>
</Tooltip>
<Menu
sx={{ mt: '45px' }}
id="menu-appbar"
anchorEl={anchorElUser}
anchorOrigin={{
vertical: 'top',
horizontal: 'right',
}}
keepMounted
transformOrigin={{
vertical: 'top',
horizontal: 'right',
}}
open={Boolean(anchorElUser)}
onClose={handleCloseUserMenu}
>
{settings.map((setting) => (
<MenuItem key={setting} onClick={handleCloseUserMenu}>
<Typography sx={{ textAlign: 'center' }}>{setting}</Typography>
</MenuItem>
))}
<MenuItem>
<MenuLanguages onClose={handleCloseUserMenu} />
</MenuItem>
</Menu>
</Box>
</Toolbar>
</Container>
</AppBar>
);
}
export default ResponsiveAppBar;

View file

@ -0,0 +1,89 @@
import * as React from 'react';
import Paper from '@mui/material/Paper';
import MenuList from '@mui/material/MenuList';
import MenuItem from '@mui/material/MenuItem';
import ListItemText from '@mui/material/ListItemText';
import ListItemIcon from '@mui/material/ListItemIcon';
import ListItemButton from '@mui/material/ListItemButton';
import { LANGUAGES } from '../locales'
import { Icon } from "@iconify/react";
import { useTranslation } from 'react-i18next';
import Menu from '@mui/material/Menu';
export default function LanguageMenu( {closeAction} ) {
const { t, i18n } = useTranslation();
const handleLanguageChange = (lang: any) => {
try {
i18n.changeLanguage(lang.code);
} catch (error) {
console.error(`Error changing language to ${lang.code}:`, error);
}
};
const [anchorElUser, setAnchorElUser] = React.useState<null | HTMLElement>(null);
const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
const [selectedIndex, setSelectedIndex] = React.useState(1);
const open = Boolean(anchorEl);
const handleClickListItem = (event: React.MouseEvent<HTMLElement>) => {
setAnchorEl(event.currentTarget);
};
const handleLanguageSelect = (
event: React.MouseEvent<HTMLElement>,
index: number,
) => {
setSelectedIndex(index);
handleLanguageChange(LANGUAGES[index]);
closeAction;
setAnchorEl(null);
setAnchorElUser(null);
};
const handleClose = () => {
setAnchorEl(null);
};
return (
<Paper sx={{ minWidth: 320, maxWidth: '100%' }}>
<ListItemButton
id="language-button"
aria-haspopup="listbox"
aria-controls="language-menu"
aria-label="Language"
aria-expanded={open ? 'true' : undefined}
onClick={handleClickListItem}
>
<ListItemText
primary={t ('language')}
secondary={i18n.resolvedLanguage}
/>
</ListItemButton>
<Menu
id="language-menu"
anchorEl={anchorEl}
open={open}
onClose={handleClose}
slotProps={{
list: {
'aria-labelledby': 'language-button',
role: 'listbox',
},
}}
>
{LANGUAGES.map((lang, index) =>
<MenuItem key={index} onClick={() => handleLanguageSelect(event, index)}>
<ListItemIcon>
<Icon icon={"circle-flags:" + lang.code} />
</ListItemIcon>
<ListItemText>{lang.label}</ListItemText>
</MenuItem>
)}
</Menu>
</Paper>
)
}

View file

@ -0,0 +1,13 @@
import { useTranslation, withTranslation, Trans } from 'react-i18next';
export default function StatisticsView() {
const { t, i18n } = useTranslation();
return (
<h1>{t ('statistics')}</h1>
)
}

View file

@ -13,8 +13,6 @@ 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'

View file

@ -6,10 +6,10 @@ import Button from '@mui/material/Button';
import { useTranslation, withTranslation, Trans } from 'react-i18next';
const response = await fetch("/GarageApp/api/vehicles");
console.log(response)
const vehicles = await response.json();
console.log(vehicles)
const response = await fetch("/GarageApp/api/vehicles");
// console.log(response)
const vehicles = await response.json();
// console.log(vehicles)
export default function YourVehicleList() {
const { t, i18n } = useTranslation();
// const response = await fetch("/GarageApp/api/vehicles");