1
0
mirror of https://github.com/hrfee/jfa-go.git synced 2024-11-10 04:10:10 +00:00

Compare commits

..

No commits in common. "d3c5feaf1b0c7eda98f05f6df4d56d6dfdb407ee" and "726acb9c295086526de87a4a00bd457456a00767" have entirely different histories.

138 changed files with 484 additions and 829 deletions

3
.gitignore vendored
View File

@ -21,6 +21,3 @@ cl.md
mautrix/ mautrix/
tempts/ tempts/
matacc.txt matacc.txt
scripts/langmover/lang
scripts/langmover/lang2
scripts/langmover/out

View File

@ -2,23 +2,6 @@ package main
import "github.com/gin-gonic/gin" import "github.com/gin-gonic/gin"
// @Summary Returns the logged-in user's Jellyfin ID & Username. func (app *appContext) HelloWorld(gc *gin.Context) {
// @Produce json gc.JSON(200, stringResponse{"It worked!", "none"})
// @Success 200 {object} MyDetailsDTO
// @Router /my/details [get]
// @tags User Page
func (app *appContext) MyDetails(gc *gin.Context) {
resp := MyDetailsDTO{
Id: gc.GetString("jfId"),
}
user, status, err := app.jf.UserByID(resp.Id, false)
if status != 200 || err != nil {
app.err.Printf("Failed to get Jellyfin user (%d): %+v\n", status, err)
respond(500, "Failed to get user", gc)
return
}
resp.Username = user.Name
gc.JSON(200, resp)
} }

View File

@ -44,7 +44,7 @@
{{ template "login-modal.html" . }} {{ template "login-modal.html" . }}
<div class="page-container"> <div class="page-container">
<div class="card @low dark:~d_neutral mb-4" id="card-user"> <div class="card @low dark:~d_neutral mb-4" id="card-user">
<span class="heading"></span> Not logged in.
</div> </div>
</div> </div>
<script src="{{ .urlBase }}/js/user.js" type="module"></script> <script src="{{ .urlBase }}/js/user.js" type="module"></script>

View File

@ -26,9 +26,8 @@ func (ls *adminLangs) getOptions() [][2]string {
type commonLangs map[string]commonLang type commonLangs map[string]commonLang
type commonLang struct { type commonLang struct {
Meta langMeta `json:"meta"` Meta langMeta `json:"meta"`
Strings langSection `json:"strings"` Strings langSection `json:"strings"`
Notifications langSection `json:"notifications"`
} }
type adminLang struct { type adminLang struct {
@ -58,7 +57,6 @@ type userLang struct {
notificationsJSON string notificationsJSON string
ValidationStrings map[string]quantityString `json:"validationStrings"` ValidationStrings map[string]quantityString `json:"validationStrings"`
validationStringsJSON string validationStringsJSON string
JSON string
} }
type pwrLangs map[string]pwrLang type pwrLangs map[string]pwrLang

View File

@ -15,6 +15,8 @@
"warning": "Advarsel", "warning": "Advarsel",
"inviteInfiniteUsesWarning": "invitationer med uendelig brug kan blive misbrugt", "inviteInfiniteUsesWarning": "invitationer med uendelig brug kan blive misbrugt",
"inviteSendToEmail": "Send til", "inviteSendToEmail": "Send til",
"login": "Log på",
"logout": "Log ud",
"create": "Opret", "create": "Opret",
"apply": "Anvend", "apply": "Anvend",
"delete": "Slet", "delete": "Slet",
@ -126,9 +128,13 @@
"updateAppliedRefresh": "Opdatering anvendt, genindlæs venligst siden.", "updateAppliedRefresh": "Opdatering anvendt, genindlæs venligst siden.",
"telegramVerified": "Telegram konto verificeret.", "telegramVerified": "Telegram konto verificeret.",
"accountConnected": "Konto tilsluttet.", "accountConnected": "Konto tilsluttet.",
"errorConnection": "Kunne ikke oprette forbindelse til jfa-go.",
"error401Unauthorized": "Adgang nægtet. Prøv at genindlæse siden.",
"errorSettingsAppliedNoHomescreenLayout": "Indstillingerne blev anvendt, men anvendelse af startskærmens layout mislykkedes muligvis.", "errorSettingsAppliedNoHomescreenLayout": "Indstillingerne blev anvendt, men anvendelse af startskærmens layout mislykkedes muligvis.",
"errorHomescreenAppliedNoSettings": "Startskærmens layout blev anvendt, men anvendelsen af indstillingerne mislykkedes muligvis.", "errorHomescreenAppliedNoSettings": "Startskærmens layout blev anvendt, men anvendelsen af indstillingerne mislykkedes muligvis.",
"errorSettingsFailed": "Ansøgningen mislykkedes.", "errorSettingsFailed": "Ansøgningen mislykkedes.",
"errorLoginBlank": "Brugernavnet og/eller adgangskoden blev efterladt tomme.",
"errorUnknown": "Ukendt fejl.",
"errorSaveEmail": "Kunne ikke gemme e-mail.", "errorSaveEmail": "Kunne ikke gemme e-mail.",
"errorBlankFields": "Felter blev efterladt tomme", "errorBlankFields": "Felter blev efterladt tomme",
"errorDeleteProfile": "Kunne ikke slette profilen {n}", "errorDeleteProfile": "Kunne ikke slette profilen {n}",

View File

@ -13,6 +13,8 @@
"warning": "Warnung", "warning": "Warnung",
"inviteInfiniteUsesWarning": "Invites mit unendlich vielen Verwendungen können missbräuchlich verwendet werden", "inviteInfiniteUsesWarning": "Invites mit unendlich vielen Verwendungen können missbräuchlich verwendet werden",
"inviteSendToEmail": "Senden an", "inviteSendToEmail": "Senden an",
"login": "Anmelden",
"logout": "Abmelden",
"create": "Erstellen", "create": "Erstellen",
"apply": "Anwenden", "apply": "Anwenden",
"delete": "Löschen", "delete": "Löschen",
@ -120,9 +122,13 @@
"createProfile": "Profil {n} erstellt.", "createProfile": "Profil {n} erstellt.",
"saveSettings": "Einstellungen wurden gespeichert", "saveSettings": "Einstellungen wurden gespeichert",
"setOmbiDefaults": "Ombi-Standardeinstellungen gespeichert.", "setOmbiDefaults": "Ombi-Standardeinstellungen gespeichert.",
"errorConnection": "Konnte keine Verbindung zu jfa-go herstellen.",
"error401Unauthorized": "Unberechtigt. Versuch, die Seite zu aktualisieren.",
"errorSettingsAppliedNoHomescreenLayout": "Einstellungen wurden angewendet, aber die Anwendung des Startbildschirmlayouts ist möglicherweise fehlgeschlagen.", "errorSettingsAppliedNoHomescreenLayout": "Einstellungen wurden angewendet, aber die Anwendung des Startbildschirmlayouts ist möglicherweise fehlgeschlagen.",
"errorHomescreenAppliedNoSettings": "Startbildschirmlayout wurde angewendet, aber die Anwendung der Einstellungen ist möglicherweise fehlgeschlagen.", "errorHomescreenAppliedNoSettings": "Startbildschirmlayout wurde angewendet, aber die Anwendung der Einstellungen ist möglicherweise fehlgeschlagen.",
"errorSettingsFailed": "Anwendung ist fehlgeschlagen.", "errorSettingsFailed": "Anwendung ist fehlgeschlagen.",
"errorLoginBlank": "Der Benutzername und/oder das Passwort wurden nicht ausgefüllt.",
"errorUnknown": "Unbekannter Fehler.",
"errorBlankFields": "Felder wurden nicht ausgefüllt", "errorBlankFields": "Felder wurden nicht ausgefüllt",
"errorDeleteProfile": "Fehler beim Löschen des Profils {n}", "errorDeleteProfile": "Fehler beim Löschen des Profils {n}",
"errorLoadProfiles": "Fehler beim Laden der Profile.", "errorLoadProfiles": "Fehler beim Laden der Profile.",

View File

@ -13,6 +13,8 @@
"warning": "Προσοχή", "warning": "Προσοχή",
"inviteInfiniteUsesWarning": "μπορεί να γίνει κατάχρηση των προσκλήσεων με άπειρες χρήσεις", "inviteInfiniteUsesWarning": "μπορεί να γίνει κατάχρηση των προσκλήσεων με άπειρες χρήσεις",
"inviteSendToEmail": "Αποστολή σε", "inviteSendToEmail": "Αποστολή σε",
"login": "Σύνδεση",
"logout": "Αποσύνδεση",
"create": "Δημιουργία", "create": "Δημιουργία",
"apply": "Εφαρμογή", "apply": "Εφαρμογή",
"delete": "Διαγραφή", "delete": "Διαγραφή",
@ -96,9 +98,13 @@
"createProfile": "Δημιουργήθηκε το {n} προφίλ.", "createProfile": "Δημιουργήθηκε το {n} προφίλ.",
"saveSettings": "Οι ρυθμίσεις αποθηκεύτηκαν", "saveSettings": "Οι ρυθμίσεις αποθηκεύτηκαν",
"setOmbiDefaults": "Αποθηκεύτηκαν οι προκαθορισμένες ρυθμίσεις του ombi.", "setOmbiDefaults": "Αποθηκεύτηκαν οι προκαθορισμένες ρυθμίσεις του ombi.",
"errorConnection": "Δεν μπόρεσε να συνδεθεί με το jfa-go.",
"error401Unauthorized": "Ανεξουσιοδότητος. Προσπαθήστε να κάνετε επαναφόρτωση την σελίδα.",
"errorSettingsAppliedNoHomescreenLayout": "Οι ρυθμίσεις αποθηκεύτηκαν, αλλά η καταχώρηση δομής αρχικής οθόνης ίσως απέτυχε.", "errorSettingsAppliedNoHomescreenLayout": "Οι ρυθμίσεις αποθηκεύτηκαν, αλλά η καταχώρηση δομής αρχικής οθόνης ίσως απέτυχε.",
"errorHomescreenAppliedNoSettings": "Η δομή αρχικής οθόνης εφαρμόστηκε, αλλά οι ρυθμίσεις ίσως απέτυχαν.", "errorHomescreenAppliedNoSettings": "Η δομή αρχικής οθόνης εφαρμόστηκε, αλλά οι ρυθμίσεις ίσως απέτυχαν.",
"errorSettingsFailed": "Η εφαρμογή απέτυχε.", "errorSettingsFailed": "Η εφαρμογή απέτυχε.",
"errorLoginBlank": "Το όνομα χρήστη και/ή ο κωδικός ήταν κενά.",
"errorUnknown": "Άγνωστο σφάλμα.",
"errorBlankFields": "Τα πεφία ήταν κενά", "errorBlankFields": "Τα πεφία ήταν κενά",
"errorDeleteProfile": "Αποτυχία διαγραφής του προφίλ {n}", "errorDeleteProfile": "Αποτυχία διαγραφής του προφίλ {n}",
"errorLoadProfiles": "Αποτυχία φόρτωσης των προφίλ.", "errorLoadProfiles": "Αποτυχία φόρτωσης των προφίλ.",

View File

@ -68,6 +68,8 @@
"inviteHours": "Hours", "inviteHours": "Hours",
"inviteInfiniteUsesWarning": "invites with infinite uses can be used abusively", "inviteInfiniteUsesWarning": "invites with infinite uses can be used abusively",
"inviteSendToEmail": "Send to", "inviteSendToEmail": "Send to",
"login": "Login",
"logout": "Logout",
"apply": "Apply", "apply": "Apply",
"delete": "Delete", "delete": "Delete",
"updates": "Updates", "updates": "Updates",
@ -173,7 +175,9 @@
}, },
"notifications": { "notifications": {
"errorSettingsFailed": "Application failed.", "errorSettingsFailed": "Application failed.",
"errorLoginBlank": "The username and/or password was left blank.",
"errorLoadSettings": "Failed to load settings.", "errorLoadSettings": "Failed to load settings.",
"errorUnknown": "Unknown error.",
"errorDeleteProfile": "Failed to delete profile {n}", "errorDeleteProfile": "Failed to delete profile {n}",
"sentAnnouncement": "Announcement sent.", "sentAnnouncement": "Announcement sent.",
"savedAnnouncement": "Announcement saved.", "savedAnnouncement": "Announcement saved.",
@ -182,6 +186,7 @@
"updateAppliedRefresh": "Update applied, please refresh.", "updateAppliedRefresh": "Update applied, please refresh.",
"telegramVerified": "Telegram account verified.", "telegramVerified": "Telegram account verified.",
"accountConnected": "Account connected.", "accountConnected": "Account connected.",
"error401Unauthorized": "Unauthorised. Try refreshing the page.",
"errorSettingsAppliedNoHomescreenLayout": "Settings were applied, but applying homescreen layout may have failed.", "errorSettingsAppliedNoHomescreenLayout": "Settings were applied, but applying homescreen layout may have failed.",
"errorSaveEmail": "Failed to save email.", "errorSaveEmail": "Failed to save email.",
"errorLoadProfiles": "Failed to load profiles.", "errorLoadProfiles": "Failed to load profiles.",
@ -202,6 +207,7 @@
"saveEmail": "Email saved.", "saveEmail": "Email saved.",
"createProfile": "Created profile {n}.", "createProfile": "Created profile {n}.",
"saveSettings": "Settings were saved", "saveSettings": "Settings were saved",
"errorConnection": "Couldn't connect to jfa-go.",
"errorHomescreenAppliedNoSettings": "Homescreen layout was applied, but applying settings may have failed.", "errorHomescreenAppliedNoSettings": "Homescreen layout was applied, but applying settings may have failed.",
"errorBlankFields": "Fields were left blank", "errorBlankFields": "Fields were left blank",
"errorSetDefaultProfile": "Failed to set default profile.", "errorSetDefaultProfile": "Failed to set default profile.",

View File

@ -15,6 +15,8 @@
"warning": "Warning", "warning": "Warning",
"inviteInfiniteUsesWarning": "invites with infinite uses can be used abusively", "inviteInfiniteUsesWarning": "invites with infinite uses can be used abusively",
"inviteSendToEmail": "Send to", "inviteSendToEmail": "Send to",
"login": "Login",
"logout": "Logout",
"create": "Create", "create": "Create",
"apply": "Apply", "apply": "Apply",
"delete": "Delete", "delete": "Delete",
@ -137,9 +139,13 @@
"updateAppliedRefresh": "Update applied, please refresh.", "updateAppliedRefresh": "Update applied, please refresh.",
"telegramVerified": "Telegram account verified.", "telegramVerified": "Telegram account verified.",
"accountConnected": "Account connected.", "accountConnected": "Account connected.",
"errorConnection": "Couldn't connect to jfa-go.",
"error401Unauthorized": "Unauthorized. Try refreshing the page.",
"errorSettingsAppliedNoHomescreenLayout": "Settings were applied, but applying homescreen layout may have failed.", "errorSettingsAppliedNoHomescreenLayout": "Settings were applied, but applying homescreen layout may have failed.",
"errorHomescreenAppliedNoSettings": "Homescreen layout was applied, but applying settings may have failed.", "errorHomescreenAppliedNoSettings": "Homescreen layout was applied, but applying settings may have failed.",
"errorSettingsFailed": "Application failed.", "errorSettingsFailed": "Application failed.",
"errorLoginBlank": "The username and/or password were left blank.",
"errorUnknown": "Unknown error.",
"errorSaveEmail": "Failed to save email.", "errorSaveEmail": "Failed to save email.",
"errorBlankFields": "Fields were left blank", "errorBlankFields": "Fields were left blank",
"errorDeleteProfile": "Failed to delete profile {n}", "errorDeleteProfile": "Failed to delete profile {n}",

View File

@ -15,6 +15,8 @@
"warning": "Advertencia", "warning": "Advertencia",
"inviteInfiniteUsesWarning": "Las invitaciones con usos infinitos se pueden usar de forma abusiva", "inviteInfiniteUsesWarning": "Las invitaciones con usos infinitos se pueden usar de forma abusiva",
"inviteSendToEmail": "Enviar a", "inviteSendToEmail": "Enviar a",
"login": "Acceso",
"logout": "Cerrar sesión",
"create": "Crear", "create": "Crear",
"apply": "Aplicar", "apply": "Aplicar",
"delete": "Eliminar", "delete": "Eliminar",
@ -123,9 +125,13 @@
"sentAnnouncement": "Anuncio enviado.", "sentAnnouncement": "Anuncio enviado.",
"setOmbiDefaults": "Valores predeterminados de ombi almacenados.", "setOmbiDefaults": "Valores predeterminados de ombi almacenados.",
"updateApplied": "Actualización aplicada, por favor reinicie.", "updateApplied": "Actualización aplicada, por favor reinicie.",
"errorConnection": "No se pudo conectar a jfa-go.",
"error401Unauthorized": "No autorizado. Intente actualizar la página.",
"errorSettingsAppliedNoHomescreenLayout": "Se aplicó la configuración, pero es posible que no se haya aplicado el diseño de la pantalla de inicio.", "errorSettingsAppliedNoHomescreenLayout": "Se aplicó la configuración, pero es posible que no se haya aplicado el diseño de la pantalla de inicio.",
"errorHomescreenAppliedNoSettings": "Se aplicó el diseño de la pantalla de inicio, pero es posible que la aplicación de la configuración haya fallado.", "errorHomescreenAppliedNoSettings": "Se aplicó el diseño de la pantalla de inicio, pero es posible que la aplicación de la configuración haya fallado.",
"errorSettingsFailed": "La aplicación falló.", "errorSettingsFailed": "La aplicación falló.",
"errorLoginBlank": "El nombre de usuario y/o la contraseña se dejaron en blanco.",
"errorUnknown": "Error desconocido.",
"errorSaveEmail": "No se pudo guardar el correo electrónico.", "errorSaveEmail": "No se pudo guardar el correo electrónico.",
"errorBlankFields": "Los campos se dejaron en blanco", "errorBlankFields": "Los campos se dejaron en blanco",
"errorDeleteProfile": "No se pudo borrar el perfil {n}", "errorDeleteProfile": "No se pudo borrar el perfil {n}",

View File

@ -15,6 +15,8 @@
"warning": "Attention", "warning": "Attention",
"inviteInfiniteUsesWarning": "les invitations infinies peuvent être utilisées abusivement", "inviteInfiniteUsesWarning": "les invitations infinies peuvent être utilisées abusivement",
"inviteSendToEmail": "Envoyer à", "inviteSendToEmail": "Envoyer à",
"login": "S'identifier",
"logout": "Se déconnecter",
"create": "Créer", "create": "Créer",
"apply": "Appliquer", "apply": "Appliquer",
"delete": "Effacer", "delete": "Effacer",
@ -121,9 +123,13 @@
"createProfile": "Profil créé {n}.", "createProfile": "Profil créé {n}.",
"saveSettings": "Les paramètres ont été enregistrés", "saveSettings": "Les paramètres ont été enregistrés",
"setOmbiDefaults": "Valeurs par défaut de Ombi.", "setOmbiDefaults": "Valeurs par défaut de Ombi.",
"errorConnection": "Impossible de se connecter à jfa-go.",
"error401Unauthorized": "Non autorisé. Essayez d'actualiser la page.",
"errorSettingsAppliedNoHomescreenLayout": "Les paramètres ont été appliqués, mais l'application de la disposition de l'écran d'accueil a peut-être échoué.", "errorSettingsAppliedNoHomescreenLayout": "Les paramètres ont été appliqués, mais l'application de la disposition de l'écran d'accueil a peut-être échoué.",
"errorHomescreenAppliedNoSettings": "La disposition de l'écran d'accueil a été appliquée, mais l'application des paramètres a peut-être échoué.", "errorHomescreenAppliedNoSettings": "La disposition de l'écran d'accueil a été appliquée, mais l'application des paramètres a peut-être échoué.",
"errorSettingsFailed": "L'application a échoué.", "errorSettingsFailed": "L'application a échoué.",
"errorLoginBlank": "Le nom d'utilisateur et/ou le mot de passe sont vides.",
"errorUnknown": "Erreur inconnue.",
"errorBlankFields": "Les champs sont vides", "errorBlankFields": "Les champs sont vides",
"errorDeleteProfile": "Échec de la suppression du profil {n}", "errorDeleteProfile": "Échec de la suppression du profil {n}",
"errorLoadProfiles": "Échec du chargement des profils.", "errorLoadProfiles": "Échec du chargement des profils.",

View File

@ -15,6 +15,8 @@
"warning": "Figyelmeztetés", "warning": "Figyelmeztetés",
"inviteInfiniteUsesWarning": "a végtelen felhasználású meghívókkal visszaélhetnek", "inviteInfiniteUsesWarning": "a végtelen felhasználású meghívókkal visszaélhetnek",
"inviteSendToEmail": "Címzett", "inviteSendToEmail": "Címzett",
"login": "Belépés",
"logout": "Kijelentkezés",
"create": "Létrehozás", "create": "Létrehozás",
"apply": "Alkalmaz", "apply": "Alkalmaz",
"delete": "Törlés", "delete": "Törlés",
@ -124,9 +126,13 @@
"updateAppliedRefresh": "", "updateAppliedRefresh": "",
"telegramVerified": "", "telegramVerified": "",
"accountConnected": "", "accountConnected": "",
"errorConnection": "",
"error401Unauthorized": "",
"errorSettingsAppliedNoHomescreenLayout": "", "errorSettingsAppliedNoHomescreenLayout": "",
"errorHomescreenAppliedNoSettings": "", "errorHomescreenAppliedNoSettings": "",
"errorSettingsFailed": "", "errorSettingsFailed": "",
"errorLoginBlank": "",
"errorUnknown": "",
"errorSaveEmail": "", "errorSaveEmail": "",
"errorBlankFields": "", "errorBlankFields": "",
"errorDeleteProfile": "", "errorDeleteProfile": "",

View File

@ -13,6 +13,8 @@
"warning": "Peringatan", "warning": "Peringatan",
"inviteInfiniteUsesWarning": "Undangan dalam jumlah tak terbatas dapat disalahgunakan", "inviteInfiniteUsesWarning": "Undangan dalam jumlah tak terbatas dapat disalahgunakan",
"inviteSendToEmail": "Dikirim kepada", "inviteSendToEmail": "Dikirim kepada",
"login": "Masuk",
"logout": "Keluar",
"create": "Buat", "create": "Buat",
"apply": "Terapkan", "apply": "Terapkan",
"delete": "Hapus", "delete": "Hapus",
@ -80,9 +82,13 @@
"createProfile": "Membuat profil {n}.", "createProfile": "Membuat profil {n}.",
"saveSettings": "Pengaturan telah disimpan", "saveSettings": "Pengaturan telah disimpan",
"setOmbiDefaults": "Default ombi tersimpan.", "setOmbiDefaults": "Default ombi tersimpan.",
"errorConnection": "Tidak dapat terhubung ke jfa-go.",
"error401Unauthorized": "Tidak ter-otorisasi. Coba segarkan halaman.",
"errorSettingsAppliedNoHomescreenLayout": "Pengaturan telah diterapkan, tetapi menerapkan tata letak layar utama mungkin gagal.", "errorSettingsAppliedNoHomescreenLayout": "Pengaturan telah diterapkan, tetapi menerapkan tata letak layar utama mungkin gagal.",
"errorHomescreenAppliedNoSettings": "Tata letak layar beranda diterapkan, tetapi menerapkan pengaturan mungkin gagal.", "errorHomescreenAppliedNoSettings": "Tata letak layar beranda diterapkan, tetapi menerapkan pengaturan mungkin gagal.",
"errorSettingsFailed": "Aplikasi gagal.", "errorSettingsFailed": "Aplikasi gagal.",
"errorLoginBlank": "Nama pengguna dan / atau sandi kosong.",
"errorUnknown": "Kesalahan yang tidak diketahui.",
"errorBlankFields": "Isian dibiarkan kosong", "errorBlankFields": "Isian dibiarkan kosong",
"errorDeleteProfile": "Gagal menghapus profil {n}", "errorDeleteProfile": "Gagal menghapus profil {n}",
"errorLoadProfiles": "Gagal memuat profil.", "errorLoadProfiles": "Gagal memuat profil.",

View File

@ -13,6 +13,8 @@
"warning": "Waarschuwing", "warning": "Waarschuwing",
"inviteInfiniteUsesWarning": "ongelimiteerde uitnodigingen kunnen misbruikt worden", "inviteInfiniteUsesWarning": "ongelimiteerde uitnodigingen kunnen misbruikt worden",
"inviteSendToEmail": "Stuur naar", "inviteSendToEmail": "Stuur naar",
"login": "Inloggen",
"logout": "Uitloggen",
"create": "Aanmaken", "create": "Aanmaken",
"apply": "Toepassen", "apply": "Toepassen",
"delete": "Verwijderen", "delete": "Verwijderen",
@ -120,9 +122,13 @@
"createProfile": "Profiel {n} aangemaakt.", "createProfile": "Profiel {n} aangemaakt.",
"saveSettings": "De instellingen zijn opgeslagen", "saveSettings": "De instellingen zijn opgeslagen",
"setOmbiDefaults": "De ombi standaardinstellingen zijn opgeslagen.", "setOmbiDefaults": "De ombi standaardinstellingen zijn opgeslagen.",
"errorConnection": "Kon geen verbinding maken met jfa-go.",
"error401Unauthorized": "Geen toegang. Probeer de pagina te vernieuwen.",
"errorSettingsAppliedNoHomescreenLayout": "De instellingen zijn toegepast, maar wijzigen van de startpaginaindeling is misschien mislukt.", "errorSettingsAppliedNoHomescreenLayout": "De instellingen zijn toegepast, maar wijzigen van de startpaginaindeling is misschien mislukt.",
"errorHomescreenAppliedNoSettings": "Startpaginaindeling toegepast, maar opslaan van instellingen is misschien mislukt.", "errorHomescreenAppliedNoSettings": "Startpaginaindeling toegepast, maar opslaan van instellingen is misschien mislukt.",
"errorSettingsFailed": "Opslaan mislukt.", "errorSettingsFailed": "Opslaan mislukt.",
"errorLoginBlank": "De gebruikersnaam en/of wachtwoord is leeg.",
"errorUnknown": "Onbekende fout.",
"errorBlankFields": "Velden leeggelaten", "errorBlankFields": "Velden leeggelaten",
"errorDeleteProfile": "Verwijderen van profiel {n} mislukt", "errorDeleteProfile": "Verwijderen van profiel {n} mislukt",
"errorLoadProfiles": "Fout bij het laden van profielen.", "errorLoadProfiles": "Fout bij het laden van profielen.",

View File

@ -15,6 +15,8 @@
"warning": "Ostrzeżenie", "warning": "Ostrzeżenie",
"inviteInfiniteUsesWarning": "", "inviteInfiniteUsesWarning": "",
"inviteSendToEmail": "", "inviteSendToEmail": "",
"login": "",
"logout": "",
"create": "", "create": "",
"apply": "", "apply": "",
"delete": "", "delete": "",
@ -126,9 +128,13 @@
"updateAppliedRefresh": "Aktualizacja zastosowana, odśwież.", "updateAppliedRefresh": "Aktualizacja zastosowana, odśwież.",
"telegramVerified": "Konto telegramu zweryfikowane.", "telegramVerified": "Konto telegramu zweryfikowane.",
"accountConnected": "Konto połączone.", "accountConnected": "Konto połączone.",
"errorConnection": "Nie udało się połączyć z jfa-go.",
"error401Unauthorized": "Nieautoryzowany. Spróbuj odświeżyć stronę.",
"errorSettingsAppliedNoHomescreenLayout": "Zastosowano ustawienia, ale zastosowanie układu ekranu głównego mogło się nie powieść.", "errorSettingsAppliedNoHomescreenLayout": "Zastosowano ustawienia, ale zastosowanie układu ekranu głównego mogło się nie powieść.",
"errorHomescreenAppliedNoSettings": "", "errorHomescreenAppliedNoSettings": "",
"errorSettingsFailed": "", "errorSettingsFailed": "",
"errorLoginBlank": "",
"errorUnknown": "Nieznany błąd.",
"errorSaveEmail": "", "errorSaveEmail": "",
"errorBlankFields": "", "errorBlankFields": "",
"errorDeleteProfile": "", "errorDeleteProfile": "",

View File

@ -13,6 +13,8 @@
"warning": "Aviso", "warning": "Aviso",
"inviteInfiniteUsesWarning": "convites infinitos podem ser usados de forma abusiva", "inviteInfiniteUsesWarning": "convites infinitos podem ser usados de forma abusiva",
"inviteSendToEmail": "Enviar para", "inviteSendToEmail": "Enviar para",
"login": "Login",
"logout": "Sair",
"create": "Criar", "create": "Criar",
"apply": "Aplicar", "apply": "Aplicar",
"delete": "Deletar", "delete": "Deletar",
@ -120,9 +122,13 @@
"createProfile": "Perfil {n} criado.", "createProfile": "Perfil {n} criado.",
"saveSettings": "As configurações foram salvas", "saveSettings": "As configurações foram salvas",
"setOmbiDefaults": "Padrões do ombi armazenados.", "setOmbiDefaults": "Padrões do ombi armazenados.",
"errorConnection": "Não foi possível conectar ao jfa-go.",
"error401Unauthorized": "Não autorizado. Tente atualizar a página.",
"errorSettingsAppliedNoHomescreenLayout": "As configurações foram aplicadas, mas a aplicação do layout da tela inicial pode ter falhado.", "errorSettingsAppliedNoHomescreenLayout": "As configurações foram aplicadas, mas a aplicação do layout da tela inicial pode ter falhado.",
"errorHomescreenAppliedNoSettings": "O layout da tela inicial foi aplicado, mas a aplicação das configurações pode ter falhado.", "errorHomescreenAppliedNoSettings": "O layout da tela inicial foi aplicado, mas a aplicação das configurações pode ter falhado.",
"errorSettingsFailed": "Falha na aplicação.", "errorSettingsFailed": "Falha na aplicação.",
"errorLoginBlank": "O nome de usuário e/ou senha foram deixados em branco.",
"errorUnknown": "Erro desconhecido.",
"errorBlankFields": "Os campos foram deixados em branco", "errorBlankFields": "Os campos foram deixados em branco",
"errorDeleteProfile": "Falha ao excluir perfil {n}", "errorDeleteProfile": "Falha ao excluir perfil {n}",
"errorLoadProfiles": "Falha ao carregar perfis.", "errorLoadProfiles": "Falha ao carregar perfis.",

View File

@ -13,6 +13,8 @@
"warning": "Varning", "warning": "Varning",
"inviteInfiniteUsesWarning": "inbjudningar med oändligt antal användningar kan missbrukas", "inviteInfiniteUsesWarning": "inbjudningar med oändligt antal användningar kan missbrukas",
"inviteSendToEmail": "Skicka till", "inviteSendToEmail": "Skicka till",
"login": "Logga in",
"logout": "Logga ut",
"create": "Skapa", "create": "Skapa",
"apply": "Tillämpa", "apply": "Tillämpa",
"delete": "Radera", "delete": "Radera",
@ -90,9 +92,13 @@
"saveEmail": "E-post sparad.", "saveEmail": "E-post sparad.",
"sentAnnouncement": "Meddelande skickat.", "sentAnnouncement": "Meddelande skickat.",
"setOmbiDefaults": "Lagrade ombi-standardvärden.", "setOmbiDefaults": "Lagrade ombi-standardvärden.",
"errorConnection": "Det gick inte att ansluta till jfa-go.",
"error401Unauthorized": "Obehörig. Prova att uppdatera sidan.",
"errorSettingsAppliedNoHomescreenLayout": "Inställningarna tillämpades, men tillämpningen av hemskärmslayout kan ha misslyckats.", "errorSettingsAppliedNoHomescreenLayout": "Inställningarna tillämpades, men tillämpningen av hemskärmslayout kan ha misslyckats.",
"errorHomescreenAppliedNoSettings": "Hemskärmslayout tillämpades, men tillämpningen av inställningar kan ha misslyckats.", "errorHomescreenAppliedNoSettings": "Hemskärmslayout tillämpades, men tillämpningen av inställningar kan ha misslyckats.",
"errorSettingsFailed": "Tillämpning misslyckades.", "errorSettingsFailed": "Tillämpning misslyckades.",
"errorLoginBlank": "Användarnamnet och/eller lösenordet lämnades tomt.",
"errorUnknown": "Okänt fel.",
"errorSaveEmail": "Det gick inte att spara e-postmeddelandet.", "errorSaveEmail": "Det gick inte att spara e-postmeddelandet.",
"errorBlankFields": "Fält lämnades tomma", "errorBlankFields": "Fält lämnades tomma",
"errorDeleteProfile": "Det gick inte att ta bort profilen {n}", "errorDeleteProfile": "Det gick inte att ta bort profilen {n}",

View File

@ -15,6 +15,8 @@
"warning": "Cảnh báo", "warning": "Cảnh báo",
"inviteInfiniteUsesWarning": "các lời mời không giới hạn số lần sử dụng có thể bị lạm dụng", "inviteInfiniteUsesWarning": "các lời mời không giới hạn số lần sử dụng có thể bị lạm dụng",
"inviteSendToEmail": "Gửi tới", "inviteSendToEmail": "Gửi tới",
"login": "Đăng nhập",
"logout": "Đăng xuất",
"create": "Tạo mới", "create": "Tạo mới",
"apply": "Áp dụng", "apply": "Áp dụng",
"delete": "Xóa", "delete": "Xóa",
@ -125,9 +127,13 @@
"updateAppliedRefresh": "Cập nhật mới đã được áp dụng, vui lòng làm mới lại trang.", "updateAppliedRefresh": "Cập nhật mới đã được áp dụng, vui lòng làm mới lại trang.",
"telegramVerified": "Tài khoản Telegram đã được xác thực.", "telegramVerified": "Tài khoản Telegram đã được xác thực.",
"accountConnected": "Tài khoản đã được kết nối.", "accountConnected": "Tài khoản đã được kết nối.",
"errorConnection": "Không thể kết nối với jfa-go.",
"error401Unauthorized": "Không được phép. Hãy thử làm mới trang.",
"errorSettingsAppliedNoHomescreenLayout": "Cài đặt đã được áp dụng, nhưng việc áp dụng bố cục màn hình chính có thể không thành công.", "errorSettingsAppliedNoHomescreenLayout": "Cài đặt đã được áp dụng, nhưng việc áp dụng bố cục màn hình chính có thể không thành công.",
"errorHomescreenAppliedNoSettings": "", "errorHomescreenAppliedNoSettings": "",
"errorSettingsFailed": "", "errorSettingsFailed": "",
"errorLoginBlank": "",
"errorUnknown": "",
"errorSaveEmail": "", "errorSaveEmail": "",
"errorBlankFields": "", "errorBlankFields": "",
"errorDeleteProfile": "", "errorDeleteProfile": "",

View File

@ -15,6 +15,8 @@
"warning": "警告", "warning": "警告",
"inviteInfiniteUsesWarning": "無限使用次數的邀請碼可能被濫用", "inviteInfiniteUsesWarning": "無限使用次數的邀請碼可能被濫用",
"inviteSendToEmail": "發送到", "inviteSendToEmail": "發送到",
"login": "登錄",
"logout": "登出",
"create": "創建", "create": "創建",
"apply": "應用", "apply": "應用",
"delete": "刪除", "delete": "刪除",
@ -126,9 +128,13 @@
"updateAppliedRefresh": "更新已應用,請重新整理。", "updateAppliedRefresh": "更新已應用,請重新整理。",
"telegramVerified": "Telegram 帳戶已驗證。", "telegramVerified": "Telegram 帳戶已驗證。",
"accountConnected": "帳戶已連接。", "accountConnected": "帳戶已連接。",
"errorConnection": "無法連接到 jfa-go。",
"error401Unauthorized": "未經授權。嘗試重新整理頁面。",
"errorSettingsAppliedNoHomescreenLayout": "已應用設置,但應用主螢幕佈局可能失敗。", "errorSettingsAppliedNoHomescreenLayout": "已應用設置,但應用主螢幕佈局可能失敗。",
"errorHomescreenAppliedNoSettings": "已應用主螢幕佈局,但應用設置可能失敗。", "errorHomescreenAppliedNoSettings": "已應用主螢幕佈局,但應用設置可能失敗。",
"errorSettingsFailed": "應用失敗。", "errorSettingsFailed": "應用失敗。",
"errorLoginBlank": "帳戶名稱和/或密碼留空。",
"errorUnknown": "未知的錯誤。",
"errorSaveEmail": "無法儲存電子郵件。", "errorSaveEmail": "無法儲存電子郵件。",
"errorBlankFields": "欄位留空", "errorBlankFields": "欄位留空",
"errorDeleteProfile": "無法刪除設置文件 {n}", "errorDeleteProfile": "無法刪除設置文件 {n}",

View File

@ -15,6 +15,8 @@
"warning": "警告", "warning": "警告",
"inviteInfiniteUsesWarning": "无限使用次数的邀请码可能被滥用", "inviteInfiniteUsesWarning": "无限使用次数的邀请码可能被滥用",
"inviteSendToEmail": "发送到", "inviteSendToEmail": "发送到",
"login": "登录",
"logout": "登出",
"create": "创建", "create": "创建",
"apply": "申请", "apply": "申请",
"delete": "删除", "delete": "删除",
@ -127,9 +129,13 @@
"updateAppliedRefresh": "已应用更新,请刷新。", "updateAppliedRefresh": "已应用更新,请刷新。",
"telegramVerified": "Telegram账户已验证。", "telegramVerified": "Telegram账户已验证。",
"accountConnected": "帐户已连接。", "accountConnected": "帐户已连接。",
"errorConnection": "无法连接到 jfa-go。",
"error401Unauthorized": "无授权。尝试刷新页面。",
"errorSettingsAppliedNoHomescreenLayout": "已应用设置,但应用主屏幕布局可能失败。", "errorSettingsAppliedNoHomescreenLayout": "已应用设置,但应用主屏幕布局可能失败。",
"errorHomescreenAppliedNoSettings": "已应用主屏幕布局,但应用设置可能失败。", "errorHomescreenAppliedNoSettings": "已应用主屏幕布局,但应用设置可能失败。",
"errorSettingsFailed": "应用失败。", "errorSettingsFailed": "应用失败。",
"errorLoginBlank": "用户名/密码留空。",
"errorUnknown": "未知错误。",
"errorSaveEmail": "电子邮箱保存失败。", "errorSaveEmail": "电子邮箱保存失败。",
"errorBlankFields": "字段留空", "errorBlankFields": "字段留空",
"errorDeleteProfile": "删除配置文件{n}失败", "errorDeleteProfile": "删除配置文件{n}失败",

View File

@ -1,7 +0,0 @@
{
"meta": {
"name": "العربية (AR)"
},
"strings": {},
"notifications": {}
}

View File

@ -24,14 +24,6 @@
"contactDiscord": "Kontakt gennem Discord", "contactDiscord": "Kontakt gennem Discord",
"theme": "Tema", "theme": "Tema",
"refresh": "Opdater", "refresh": "Opdater",
"required": "Påkrævet", "required": "Påkrævet"
"login": "Log på",
"logout": "Log ud"
},
"notifications": {
"errorLoginBlank": "Brugernavnet og/eller adgangskoden blev efterladt tomme.",
"errorConnection": "Kunne ikke oprette forbindelse til jfa-go.",
"errorUnknown": "Ukendt fejl.",
"error401Unauthorized": "Adgang nægtet. Prøv at genindlæse siden."
} }
} }

View File

@ -4,34 +4,26 @@
}, },
"strings": { "strings": {
"username": "Benutzername", "username": "Benutzername",
"name": "Name",
"password": "Passwort", "password": "Passwort",
"emailAddress": "E-Mail Adresse", "emailAddress": "E-Mail Adresse",
"name": "Name",
"submit": "Absenden", "submit": "Absenden",
"send": "Senden",
"success": "Erfolgreich", "success": "Erfolgreich",
"continue": "Weiter", "continue": "Weiter",
"error": "Fehler", "error": "Fehler",
"copy": "Kopieren", "copy": "Kopieren",
"copied": "Kopiert", "theme": "Thema",
"time24h": "24h-Format", "time24h": "24h-Format",
"time12h": "12h-Format", "time12h": "12h-Format",
"copied": "Kopiert",
"linkTelegram": "Link Telegram", "linkTelegram": "Link Telegram",
"contactEmail": "Kontakt über E-Mail", "contactEmail": "Kontakt über E-Mail",
"contactTelegram": "Kontakt über Telegram", "contactTelegram": "Kontakt über Telegram",
"linkDiscord": "Link Discord", "linkDiscord": "Link Discord",
"linkMatrix": "Link Matrix", "linkMatrix": "Link Matrix",
"send": "Senden",
"contactDiscord": "Kontakt über Discord", "contactDiscord": "Kontakt über Discord",
"theme": "Thema",
"refresh": "Aktualisieren", "refresh": "Aktualisieren",
"required": "Erforderlich", "required": "Erforderlich"
"login": "Anmelden",
"logout": "Abmelden"
},
"notifications": {
"errorLoginBlank": "Der Benutzername und/oder das Passwort wurden nicht ausgefüllt.",
"errorConnection": "Konnte keine Verbindung zu jfa-go herstellen.",
"errorUnknown": "Unbekannter Fehler.",
"error401Unauthorized": "Unberechtigt. Versuch, die Seite zu aktualisieren."
} }
} }

View File

@ -12,17 +12,9 @@
"continue": "Συνέχεια", "continue": "Συνέχεια",
"error": "Σφάλμα", "error": "Σφάλμα",
"copy": "Αντιγραφή", "copy": "Αντιγραφή",
"copied": "Αντιγράφηκε", "theme": "Θέμα",
"time24h": "24 Ώρες", "time24h": "24 Ώρες",
"time12h": "12 Ώρες", "time12h": "12 Ώρες",
"theme": "Θέμα", "copied": "Αντιγράφηκε"
"login": "Σύνδεση",
"logout": "Αποσύνδεση"
},
"notifications": {
"errorLoginBlank": "Το όνομα χρήστη και/ή ο κωδικός ήταν κενά.",
"errorConnection": "Δεν μπόρεσε να συνδεθεί με το jfa-go.",
"errorUnknown": "Άγνωστο σφάλμα.",
"error401Unauthorized": "Ανεξουσιοδότητος. Προσπαθήστε να κάνετε επαναφόρτωση την σελίδα."
} }
} }

View File

@ -3,35 +3,27 @@
"name": "English (GB)" "name": "English (GB)"
}, },
"strings": { "strings": {
"username": "Username",
"password": "Password",
"emailAddress": "Email Address",
"name": "Name",
"submit": "Submit",
"send": "Send",
"success": "Success",
"continue": "Continue", "continue": "Continue",
"error": "Error",
"copy": "Copy",
"copied": "Copied",
"time24h": "24h Time", "time24h": "24h Time",
"time12h": "12h Time",
"linkTelegram": "Link Telegram", "linkTelegram": "Link Telegram",
"contactEmail": "Contact through Email", "send": "Send",
"contactTelegram": "Contact through Telegram",
"linkDiscord": "Link Discord", "linkDiscord": "Link Discord",
"linkMatrix": "Link Matrix", "linkMatrix": "Link Matrix",
"contactDiscord": "Contact through Discord", "contactDiscord": "Contact through Discord",
"username": "Username",
"password": "Password",
"emailAddress": "Email Address",
"copy": "Copy",
"copied": "Copied",
"submit": "Submit",
"success": "Success",
"error": "Error",
"time12h": "12h Time",
"theme": "Theme", "theme": "Theme",
"contactEmail": "Contact through Email",
"contactTelegram": "Contact through Telegram",
"name": "Name",
"refresh": "Refresh", "refresh": "Refresh",
"required": "Required", "required": "Required"
"login": "Login",
"logout": "Logout"
},
"notifications": {
"errorLoginBlank": "The username and/or password was left blank.",
"errorConnection": "Couldn't connect to jfa-go.",
"errorUnknown": "Unknown error.",
"error401Unauthorized": "Unauthorised. Try refreshing the page."
} }
} }

View File

@ -24,14 +24,6 @@
"contactDiscord": "Contact through Discord", "contactDiscord": "Contact through Discord",
"theme": "Theme", "theme": "Theme",
"refresh": "Refresh", "refresh": "Refresh",
"required": "Required", "required": "Required"
"login": "Login",
"logout": "Logout"
},
"notifications": {
"errorLoginBlank": "The username and/or password were left blank.",
"errorConnection": "Couldn't connect to jfa-go.",
"errorUnknown": "Unknown error.",
"error401Unauthorized": "Unauthorized. Try refreshing the page."
} }
} }

View File

@ -8,7 +8,6 @@
"emailAddress": "Correo electrónico", "emailAddress": "Correo electrónico",
"name": "Nombre", "name": "Nombre",
"submit": "Enviar", "submit": "Enviar",
"send": "Enviar",
"success": "Éxito", "success": "Éxito",
"continue": "Continuar", "continue": "Continuar",
"error": "Error", "error": "Error",
@ -16,22 +15,15 @@
"copied": "Copiado", "copied": "Copiado",
"time24h": "Formato de 24 horas", "time24h": "Formato de 24 horas",
"time12h": "Formato de 12 horas", "time12h": "Formato de 12 horas",
"linkTelegram": "Enlace Telegram", "theme": "Tema",
"send": "Enviar",
"contactDiscord": "Contactar por Discord",
"contactEmail": "Contactar por correo electrónico", "contactEmail": "Contactar por correo electrónico",
"contactTelegram": "Contactar por Telegram", "contactTelegram": "Contactar por Telegram",
"linkDiscord": "Enlace Discord",
"linkMatrix": "Enlace Matrix", "linkMatrix": "Enlace Matrix",
"contactDiscord": "Contactar por Discord", "linkDiscord": "Enlace Discord",
"theme": "Tema", "linkTelegram": "Enlace Telegram",
"refresh": "Refrescar", "refresh": "Refrescar",
"required": "Requerido", "required": "Requerido"
"login": "Acceso",
"logout": "Cerrar sesión"
},
"notifications": {
"errorLoginBlank": "El nombre de usuario y/o la contraseña se dejaron en blanco.",
"errorConnection": "No se pudo conectar a jfa-go.",
"errorUnknown": "Error desconocido.",
"error401Unauthorized": "No autorizado. Intente actualizar la página."
} }
} }

View File

@ -23,6 +23,5 @@
"linkMatrix": "پیوند ماتریکس", "linkMatrix": "پیوند ماتریکس",
"contactDiscord": "از طریق دیسکورد تماس بگیرید", "contactDiscord": "از طریق دیسکورد تماس بگیرید",
"theme": "موضوع" "theme": "موضوع"
}, }
"notifications": {}
} }

View File

@ -1,37 +1,30 @@
{ {
"meta": { "meta": {
"name": "Français (FR)" "name": "Français (FR)",
"author": "https://github.com/Killianbe"
}, },
"strings": { "strings": {
"username": "Nom d'utilisateur", "username": "Nom d'utilisateur",
"name": "Nom",
"password": "Mot de passe", "password": "Mot de passe",
"emailAddress": "Adresse e-mail", "emailAddress": "Adresse e-mail",
"name": "Nom",
"submit": "Soumettre", "submit": "Soumettre",
"send": "Envoyer",
"success": "Succès", "success": "Succès",
"continue": "Continuer", "continue": "Continuer",
"error": "Erreur", "error": "Erreur",
"copy": "Copier", "copy": "Copier",
"copied": "Copié",
"time24h": "Temps 24h", "time24h": "Temps 24h",
"time12h": "Temps 12h", "time12h": "Temps 12h",
"theme": "Thème",
"copied": "Copié",
"linkTelegram": "Lien Telegram", "linkTelegram": "Lien Telegram",
"contactEmail": "Contact par e-mail", "contactEmail": "Contact par e-mail",
"contactTelegram": "Contact par Telegram", "contactTelegram": "Contact par Telegram",
"linkDiscord": "Lier Discord", "linkDiscord": "Lier Discord",
"linkMatrix": "Lier Matrix", "linkMatrix": "Lier Matrix",
"send": "Envoyer",
"contactDiscord": "Contacter par Discord", "contactDiscord": "Contacter par Discord",
"theme": "Thème",
"refresh": "Actualiser", "refresh": "Actualiser",
"required": "Requis", "required": "Requis"
"login": "S'identifier",
"logout": "Se déconnecter"
},
"notifications": {
"errorLoginBlank": "Le nom d'utilisateur et/ou le mot de passe sont vides.",
"errorConnection": "Impossible de se connecter à jfa-go.",
"errorUnknown": "Erreur inconnue.",
"error401Unauthorized": "Non autorisé. Essayez d'actualiser la page."
} }
} }

View File

@ -1,10 +0,0 @@
{
"meta": {
"name": "English (US)"
},
"strings": {
"login": "Belépés",
"logout": "Kijelentkezés"
},
"notifications": {}
}

View File

@ -8,7 +8,6 @@
"emailAddress": "Alamat Email", "emailAddress": "Alamat Email",
"name": "Nama", "name": "Nama",
"submit": "Submit", "submit": "Submit",
"send": "Kirim",
"success": "Sukses", "success": "Sukses",
"continue": "Lanjut", "continue": "Lanjut",
"error": "Error", "error": "Error",
@ -16,13 +15,6 @@
"time24h": "Waktu 24 jam", "time24h": "Waktu 24 jam",
"time12h": "Waktu 12 jam", "time12h": "Waktu 12 jam",
"theme": "Tema", "theme": "Tema",
"login": "Masuk", "send": "Kirim"
"logout": "Keluar"
},
"notifications": {
"errorLoginBlank": "Nama pengguna dan / atau sandi kosong.",
"errorConnection": "Tidak dapat terhubung ke jfa-go.",
"errorUnknown": "Kesalahan yang tidak diketahui.",
"error401Unauthorized": "Tidak ter-otorisasi. Coba segarkan halaman."
} }
} }

View File

@ -25,6 +25,5 @@
"theme": "Tema", "theme": "Tema",
"refresh": "Aggiorna", "refresh": "Aggiorna",
"required": "Richiesto" "required": "Richiesto"
}, }
"notifications": {}
} }

View File

@ -4,34 +4,26 @@
}, },
"strings": { "strings": {
"username": "Gebruikersnaam", "username": "Gebruikersnaam",
"name": "Naam",
"password": "Wachtwoord", "password": "Wachtwoord",
"emailAddress": "E-mailadres", "emailAddress": "E-mailadres",
"name": "Naam",
"submit": "Verstuur", "submit": "Verstuur",
"send": "Verstuur",
"success": "Succes", "success": "Succes",
"continue": "Doorgaan", "continue": "Doorgaan",
"error": "Fout", "error": "Fout",
"copy": "Kopiëer", "copy": "Kopiëer",
"copied": "Gekopieerd", "theme": "Thema",
"time24h": "24u-formaat", "time24h": "24u-formaat",
"time12h": "12u-formaat", "time12h": "12u-formaat",
"copied": "Gekopieerd",
"linkTelegram": "Koppel Telegram", "linkTelegram": "Koppel Telegram",
"contactEmail": "Stuur e-mailbericht", "contactEmail": "Stuur e-mailbericht",
"contactTelegram": "Stuur Telegram-bericht", "contactTelegram": "Stuur Telegram-bericht",
"send": "Verstuur",
"linkDiscord": "Koppel Discord", "linkDiscord": "Koppel Discord",
"linkMatrix": "Koppel Matrix", "linkMatrix": "Koppel Matrix",
"contactDiscord": "Stuur Discord bericht", "contactDiscord": "Stuur Discord bericht",
"theme": "Thema",
"refresh": "Ververs", "refresh": "Ververs",
"required": "Verplicht", "required": "Verplicht"
"login": "Inloggen",
"logout": "Uitloggen"
},
"notifications": {
"errorLoginBlank": "De gebruikersnaam en/of wachtwoord is leeg.",
"errorConnection": "Kon geen verbinding maken met jfa-go.",
"errorUnknown": "Onbekende fout.",
"error401Unauthorized": "Geen toegang. Probeer de pagina te vernieuwen."
} }
} }

View File

@ -25,10 +25,5 @@
"theme": "Motyw", "theme": "Motyw",
"refresh": "Odśwież", "refresh": "Odśwież",
"required": "Wymagane" "required": "Wymagane"
},
"notifications": {
"errorConnection": "Nie udało się połączyć z jfa-go.",
"errorUnknown": "Nieznany błąd.",
"error401Unauthorized": "Nieautoryzowany. Spróbuj odświeżyć stronę."
} }
} }

View File

@ -4,34 +4,26 @@
}, },
"strings": { "strings": {
"username": "Nome do Usuário", "username": "Nome do Usuário",
"name": "Nome",
"password": "Senha", "password": "Senha",
"emailAddress": "Endereço de e-mail", "emailAddress": "Endereço de e-mail",
"name": "Nome",
"submit": "Enviar", "submit": "Enviar",
"send": "Enviar",
"success": "Sucesso", "success": "Sucesso",
"continue": "Continuar", "continue": "Continuar",
"error": "Erro", "error": "Erro",
"copy": "Copiar", "copy": "Copiar",
"copied": "Copiado", "theme": "Tema",
"time24h": "Horário 24h", "time24h": "Horário 24h",
"time12h": "Horário 12h", "time12h": "Horário 12h",
"copied": "Copiado",
"linkTelegram": "Link do Telegram", "linkTelegram": "Link do Telegram",
"contactEmail": "Contato por Email", "contactEmail": "Contato por Email",
"contactTelegram": "Contato pelo Telegram", "contactTelegram": "Contato pelo Telegram",
"send": "Enviar",
"linkDiscord": "Link do Discord", "linkDiscord": "Link do Discord",
"linkMatrix": "Link do Matrix", "linkMatrix": "Link do Matrix",
"contactDiscord": "Contato através do Discord", "contactDiscord": "Contato através do Discord",
"theme": "Tema",
"refresh": "Atualizar", "refresh": "Atualizar",
"required": "Requeridos", "required": "Requeridos"
"login": "Login",
"logout": "Sair"
},
"notifications": {
"errorLoginBlank": "O nome de usuário e/ou senha foram deixados em branco.",
"errorConnection": "Não foi possível conectar ao jfa-go.",
"errorUnknown": "Erro desconhecido.",
"error401Unauthorized": "Não autorizado. Tente atualizar a página."
} }
} }

View File

@ -1,7 +0,0 @@
{
"meta": {
"name": "Română (ROU)"
},
"strings": {},
"notifications": {}
}

View File

@ -25,6 +25,5 @@
"theme": "Tema", "theme": "Tema",
"refresh": "Osveži", "refresh": "Osveži",
"required": "Obvezno" "required": "Obvezno"
}, }
"notifications": {}
} }

View File

@ -14,14 +14,6 @@
"copy": "Kopiera", "copy": "Kopiera",
"time24h": "24 timmarsklocka", "time24h": "24 timmarsklocka",
"time12h": "12 timmarsklocka", "time12h": "12 timmarsklocka",
"theme": "Tema", "theme": "Tema"
"login": "Logga in",
"logout": "Logga ut"
},
"notifications": {
"errorLoginBlank": "Användarnamnet och/eller lösenordet lämnades tomt.",
"errorConnection": "Det gick inte att ansluta till jfa-go.",
"errorUnknown": "Okänt fel.",
"error401Unauthorized": "Obehörig. Prova att uppdatera sidan."
} }
} }

View File

@ -1,13 +0,0 @@
{
"meta": {
"name": "Tiếng Anh (Mỹ)"
},
"strings": {
"login": "Đăng nhập",
"logout": "Đăng xuất"
},
"notifications": {
"errorConnection": "Không thể kết nối với jfa-go.",
"error401Unauthorized": "Không được phép. Hãy thử làm mới trang."
}
}

View File

@ -24,14 +24,6 @@
"contactDiscord": "通過 Discord 聯繫", "contactDiscord": "通過 Discord 聯繫",
"theme": "主題", "theme": "主題",
"refresh": "重新整理", "refresh": "重新整理",
"required": "必填", "required": "必填"
"login": "登錄",
"logout": "登出"
},
"notifications": {
"errorLoginBlank": "帳戶名稱和/或密碼留空。",
"errorConnection": "無法連接到 jfa-go。",
"errorUnknown": "未知的錯誤。",
"error401Unauthorized": "未經授權。嘗試重新整理頁面。"
} }
} }

View File

@ -24,14 +24,6 @@
"contactDiscord": "通过Discord联系", "contactDiscord": "通过Discord联系",
"theme": "主题", "theme": "主题",
"refresh": "刷新", "refresh": "刷新",
"required": "必需的", "required": "必需的"
"login": "登录",
"logout": "登出"
},
"notifications": {
"errorLoginBlank": "用户名/密码留空。",
"errorConnection": "无法连接到 jfa-go。",
"errorUnknown": "未知错误。",
"error401Unauthorized": "无授权。尝试刷新页面。"
} }
} }

View File

@ -19,8 +19,7 @@
"yourAccountIsValidUntil": "Your account will be valid until {date}.", "yourAccountIsValidUntil": "Your account will be valid until {date}.",
"sendPIN": "Send the PIN below to the bot, then come back here to link your account.", "sendPIN": "Send the PIN below to the bot, then come back here to link your account.",
"sendPINDiscord": "Type {command} in {server_channel} on Discord, then send the PIN below.", "sendPINDiscord": "Type {command} in {server_channel} on Discord, then send the PIN below.",
"matrixEnterUser": "Enter your User ID, press submit, and a PIN will be sent to you. Enter it here to continue.", "matrixEnterUser": "Enter your User ID, press submit, and a PIN will be sent to you. Enter it here to continue."
"welcomeUser": "Welcome, {user}"
}, },
"notifications": { "notifications": {
"errorUserExists": "User already exists.", "errorUserExists": "User already exists.",

View File

@ -651,9 +651,6 @@ func flagPassed(name string) (found bool) {
// @tag.name Auth // @tag.name Auth
// @tag.description -Get a token here if running swagger UI locally.- // @tag.description -Get a token here if running swagger UI locally.-
// @tag.name User Page
// @tag.description User-page related routes.
// @tag.name Users // @tag.name Users
// @tag.description Jellyfin user related operations. // @tag.description Jellyfin user related operations.

View File

@ -373,9 +373,3 @@ type ReCaptchaResponseDTO struct {
Hostname string `json:"hostname"` Hostname string `json:"hostname"`
ErrorCodes []string `json:"error-codes"` ErrorCodes []string `json:"error-codes"`
} }
// MyDetailsDTO is sent to the user page to personalize it for the user.
type MyDetailsDTO struct {
Id string `json:"id"`
Username string `json:"username"`
}

366
package-lock.json generated
View File

@ -15,7 +15,7 @@
"any-date-parser": "^1.5.4", "any-date-parser": "^1.5.4",
"browserslist": "^4.21.7", "browserslist": "^4.21.7",
"cheerio": "^1.0.0-rc.12", "cheerio": "^1.0.0-rc.12",
"esbuild": "^0.18.4", "esbuild": "^0.18.3",
"fs-cheerio": "^3.0.0", "fs-cheerio": "^3.0.0",
"inline-source": "^8.0.2", "inline-source": "^8.0.2",
"jsdom": "^22.1.0", "jsdom": "^22.1.0",
@ -57,9 +57,9 @@
} }
}, },
"node_modules/@esbuild/android-arm": { "node_modules/@esbuild/android-arm": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.3.tgz",
"integrity": "sha512-yKmQC9IiuvHdsNEbPHSprnMHg6OhL1cSeQZLzPpgzJBJ9ppEg9GAZN8MKj1TcmB4tZZUrq5xjK7KCmhwZP8iDA==", "integrity": "sha512-QOn3VIlL6Qv1eHBpQB/s7simaZgGss2ASyxDOwYSLmc6vD0uuizZkuYawHmuLjWEm5wPwp0JQWhbpaYwwGevYw==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@ -72,9 +72,9 @@
} }
}, },
"node_modules/@esbuild/android-arm64": { "node_modules/@esbuild/android-arm64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.3.tgz",
"integrity": "sha512-yQVgO+V307hA2XhzELQ6F91CBGX7gSnlVGAj5YIqjQOxThDpM7fOcHT2YLJbE6gNdPtgRSafQrsK8rJ9xHCaZg==", "integrity": "sha512-PgabCsoaEEnnOiF6rUhOBXgYoLFIrHWP6mfLOzuQ1oZ1lwBdTL0hp5ivC4K3Kvz3BD8EipjeQo6l0aty3nr4qQ==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -87,9 +87,9 @@
} }
}, },
"node_modules/@esbuild/android-x64": { "node_modules/@esbuild/android-x64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.3.tgz",
"integrity": "sha512-yLKXMxQg6sk1ntftxQ5uwyVgG4/S2E7UoOCc5N4YZW7fdkfRiYEXqm7CMuIfY2Vs3FTrNyKmSfNevIuIvJnMww==", "integrity": "sha512-1OkJf8wNX1W5ucbp5HrK+z42b9DINb4ix59oJH/PIsh9cyFMqjgRKtCBXg0zEWhkmP1k3egdfrnS7cDTpLH43g==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -102,9 +102,9 @@
} }
}, },
"node_modules/@esbuild/darwin-arm64": { "node_modules/@esbuild/darwin-arm64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.3.tgz",
"integrity": "sha512-MVPEoZjZpk2xQ1zckZrb8eQuQib+QCzdmMs3YZAYEQPg+Rztk5pUxGyk8htZOC8Z38NMM29W+MqY9Sqo/sDGKw==", "integrity": "sha512-57aofORpY7wDAuMs6DeqpmgSnVfZ63RgGbR/BHdOSTqJgYvHDCMY7/o1myFntl3k0YxtLE3WAm56nMf4qy3UDw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -117,9 +117,9 @@
} }
}, },
"node_modules/@esbuild/darwin-x64": { "node_modules/@esbuild/darwin-x64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.3.tgz",
"integrity": "sha512-uEsRtYRUDsz7i2tXg/t/SyF+5gU1cvi9B6B8i5ebJgtUUHJYWyIPIesmIOL4/+bywjxsDMA/XrNFMgMffLnh5A==", "integrity": "sha512-NVBqMnxT9qvgu7Z322LUDlwjh4GDk6wEePyAQnHF9noxik/WvLFmr5v3Vgz5LSvqFducLCxsdmLztKhdpFW0Gg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -132,9 +132,9 @@
} }
}, },
"node_modules/@esbuild/freebsd-arm64": { "node_modules/@esbuild/freebsd-arm64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.3.tgz",
"integrity": "sha512-I8EOigqWnOHRin6Zp5Y1cfH3oT54bd7Sdz/VnpUNksbOtfp8IWRTH4pgkgO5jWaRQPjCpJcOpdRjYAMjPt8wXg==", "integrity": "sha512-XiLK1AsCk2wKxN7j8h9GXXCs8FPZhp07U0rnpwRkAVSVGgLaIWYSqpTRzKjAfqJiZlp+XKo1HwsmDdICEKB3Dg==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -147,9 +147,9 @@
} }
}, },
"node_modules/@esbuild/freebsd-x64": { "node_modules/@esbuild/freebsd-x64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.3.tgz",
"integrity": "sha512-1bHfgMz/cNMjbpsYxjVgMJ1iwKq+NdDPlACBrWULD7ZdFmBQrhMicMaKb5CdmdVyvIwXmasOuF4r6Iq574kUTA==", "integrity": "sha512-xyITfrF0G3l1gwR79hvNCCWKQ/16uK14xNNPFgzjbIqF4EpBvhO6l3jrWxXFUW51z6dVIl2Szh3x3uIbBWzH1Q==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -162,9 +162,9 @@
} }
}, },
"node_modules/@esbuild/linux-arm": { "node_modules/@esbuild/linux-arm": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.3.tgz",
"integrity": "sha512-4XCGqM/Ay1LCXUBH59bL4JbSbbTK1K22dWHymWMGaEh2sQCDOUw+OQxozYV/YdBb91leK2NbuSrE2BRamwgaYw==", "integrity": "sha512-fc/T0QHMzvmnlF+kfD6bHLB8u+17gg13260p/E86yYjVoKNFjonL/+Y0GGQjMbFUas9QijqOa7pcR00a9RNkwg==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@ -177,9 +177,9 @@
} }
}, },
"node_modules/@esbuild/linux-arm64": { "node_modules/@esbuild/linux-arm64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.3.tgz",
"integrity": "sha512-J42vLHaYREyiBwH0eQE4/7H1DTfZx8FuxyWSictx4d7ezzuKE3XOkIvOg+SQzRz7T9HLVKzq2tvbAov4UfufBw==", "integrity": "sha512-lsKUYVd8L/j2uNs8dhMjMsKC5MHYh77gR9EThu7YCeeFz1XpIkx1I4a7mhoVfPS2VPVD1pMCh+PgxuAHUcEmXw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -192,9 +192,9 @@
} }
}, },
"node_modules/@esbuild/linux-ia32": { "node_modules/@esbuild/linux-ia32": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.3.tgz",
"integrity": "sha512-4ksIqFwhq7OExty7Sl1n0vqQSCqTG4sU6i99G2yuMr28CEOUZ/60N+IO9hwI8sIxBqmKmDgncE1n5CMu/3m0IA==", "integrity": "sha512-EyfGWeOwRqK5Xj18vok0qv8IFBZ1/+hKV+cqD44oVhGsxHo9TmPtoSiDrWn8Sa2swq/VuO5Aiog6YPDj81oIkA==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
@ -207,9 +207,9 @@
} }
}, },
"node_modules/@esbuild/linux-loong64": { "node_modules/@esbuild/linux-loong64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.3.tgz",
"integrity": "sha512-bsWtoVHkGQgAsFXioDueXRiUIfSGrVkJjBBz4gcBJxXcD461cWFQFyu8Fxdj9TP+zEeqJ8C/O4LFFMBNi6Fscw==", "integrity": "sha512-PwXkcl3t0kSeYH5RuJIeh/fHOzKZd+ZdifAWzpVO+9TLWArutTFBJvOSkTZ3CcqQqNrTj1Qyo6nqE8MQj/a7cQ==",
"cpu": [ "cpu": [
"loong64" "loong64"
], ],
@ -222,9 +222,9 @@
} }
}, },
"node_modules/@esbuild/linux-mips64el": { "node_modules/@esbuild/linux-mips64el": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.3.tgz",
"integrity": "sha512-LRD9Fu8wJQgIOOV1o3nRyzrheFYjxA0C1IVWZ93eNRRWBKgarYFejd5WBtrp43cE4y4D4t3qWWyklm73Mrsd/g==", "integrity": "sha512-CRVkkSXf5GQcq7Am2a2tdIn85oqi/bkjuPvhNqcdeTgI0xgNbqLnEPRy2AEGkRuaJWB5uCX1IC4sqnY8ET14Yg==",
"cpu": [ "cpu": [
"mips64el" "mips64el"
], ],
@ -237,9 +237,9 @@
} }
}, },
"node_modules/@esbuild/linux-ppc64": { "node_modules/@esbuild/linux-ppc64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.3.tgz",
"integrity": "sha512-jtQgoZjM92gauVRxNaaG/TpL3Pr4WcL3Pwqi9QgdrBGrEXzB+twohQiWNSTycs6lUygakos4mm2h0B9/SHveng==", "integrity": "sha512-t7zK1Cheh0xvzfZbimztiE0wGnpV+YRsBg3tefcEBN3O4GzgLu6fFpA5HxEyVm3hHZW1jAC4OhoGEp7C5Ii6Eg==",
"cpu": [ "cpu": [
"ppc64" "ppc64"
], ],
@ -252,9 +252,9 @@
} }
}, },
"node_modules/@esbuild/linux-riscv64": { "node_modules/@esbuild/linux-riscv64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.3.tgz",
"integrity": "sha512-7WaU/kRZG0VCV09Xdlkg6LNAsfU9SAxo6XEdaZ8ffO4lh+DZoAhGTx7+vTMOXKxa+r2w1LYDGxfJa2rcgagMRA==", "integrity": "sha512-fUZPtyCYih6y4lDYdSM4Yoax4nS7aH0/XixJStys+9tfp5cAlIAZhEVKOOdeGXmQn0IEyiUtlIsPnfObbeDQfQ==",
"cpu": [ "cpu": [
"riscv64" "riscv64"
], ],
@ -267,9 +267,9 @@
} }
}, },
"node_modules/@esbuild/linux-s390x": { "node_modules/@esbuild/linux-s390x": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.3.tgz",
"integrity": "sha512-D19ed0xreKQvC5t+ArE2njSnm18WPpE+1fhwaiJHf+Xwqsq+/SUaV8Mx0M27nszdU+Atq1HahrgCOZCNNEASUg==", "integrity": "sha512-oIcK2LqHWqfMERqjvaKJ3QJmycHn723HsXIv5gH4iGfmePfSj+gi0ZQv2h4bHUg2bs2gJtV0DlIjGhEuvdgxLw==",
"cpu": [ "cpu": [
"s390x" "s390x"
], ],
@ -282,9 +282,9 @@
} }
}, },
"node_modules/@esbuild/linux-x64": { "node_modules/@esbuild/linux-x64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.3.tgz",
"integrity": "sha512-Rx3AY1sxyiO/gvCGP00nL69L60dfmWyjKWY06ugpB8Ydpdsfi3BHW58HWC24K3CAjAPSwxcajozC2PzA9JBS1g==", "integrity": "sha512-RW9lpfZ6XZ6f5to2DJPvt0f/4RXEW229Xf++quVoW+YbnPrcapIJChtD/AmZ8cK3hglO/hXxJjs21pV0/l7L5w==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -297,9 +297,9 @@
} }
}, },
"node_modules/@esbuild/netbsd-x64": { "node_modules/@esbuild/netbsd-x64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.3.tgz",
"integrity": "sha512-AaShPmN9c6w1mKRpliKFlaWcSkpBT4KOlk93UfFgeI3F3cbjzdDKGsbKnOZozmYbE1izZKLmNJiW0sFM+A5JPA==", "integrity": "sha512-piZ2oBoaq58pKZvhgdV6PemlL30Uhd9GmmOkIGZYgChwNcyVSSl6iMEJxMzU7x44Lk9q+hJ6a343M/iVEMEvxA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -312,9 +312,9 @@
} }
}, },
"node_modules/@esbuild/openbsd-x64": { "node_modules/@esbuild/openbsd-x64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.3.tgz",
"integrity": "sha512-tRGvGwou3BrvHVvF8HxTqEiC5VtPzySudS9fh2jBIKpLX7HCW8jIkW+LunkFDNwhslx4xMAgh0jAHsx/iCymaQ==", "integrity": "sha512-vaMfouYTz/4tKdQsXDccqhV6wgPEr+hfuxdNU5Pl/vQxYTsqcXv5DYEa5Z1RAxCoua5aEB+Uj5V7VT/bM92wxw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -327,9 +327,9 @@
} }
}, },
"node_modules/@esbuild/sunos-x64": { "node_modules/@esbuild/sunos-x64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.3.tgz",
"integrity": "sha512-acORFDI95GKhmAnlH8EarBeuqoy/j3yxIU+FDB91H3+ZON+8HhTadtT450YkaMzX6lEWbhi+mjVUCj00M5yyOQ==", "integrity": "sha512-Fa3rNQQ9q1qwy9u2cdDvuGKy3jmPnPPMDdyy/qbn5d395Pb9hjLYiPzX9BozXMPJDlCNofSY7jN3miM9gyAdHA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -342,9 +342,9 @@
} }
}, },
"node_modules/@esbuild/win32-arm64": { "node_modules/@esbuild/win32-arm64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.3.tgz",
"integrity": "sha512-1NxP+iOk8KSvS1L9SSxEvBAJk39U0GiGZkiiJGbuDF9G4fG7DSDw6XLxZMecAgmvQrwwx7yVKdNN3GgNh0UfKg==", "integrity": "sha512-LPJC8ub+9uzyC6ygVmp00dAqet1q1DsZ/OldGIIBt+y+Ctd1OfnKNlzQgXK8nxwY1G8fAhklFSeSRRgAUJnR0w==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -357,9 +357,9 @@
} }
}, },
"node_modules/@esbuild/win32-ia32": { "node_modules/@esbuild/win32-ia32": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.3.tgz",
"integrity": "sha512-OKr8jze93vbgqZ/r23woWciTixUwLa976C9W7yNBujtnVHyvsL/ocYG61tsktUfJOpyIz5TsohkBZ6Lo2+PCcQ==", "integrity": "sha512-WtUyRspyxZR6NTc2HG4xd9Wvz8lP4C6OUY1gAqisrf151HvXIxsK0mfAacFJNS7EN2wvPTgjP+SM8vgBOx5+zA==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
@ -372,9 +372,9 @@
} }
}, },
"node_modules/@esbuild/win32-x64": { "node_modules/@esbuild/win32-x64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.3.tgz",
"integrity": "sha512-qJr3wVvcLjPFcV4AMDS3iquhBfTef2zo/jlm8RMxmiRp3Vy2HY8WMxrykJlcbCnqLXZPA0YZxZGND6eug85ogg==", "integrity": "sha512-Z8qCK4BkBm40j5KUM4NrkxYQS0R12cBO1NBVtI4vws6uwh1n/VaNu31Hm+n2cJUWdFbfH57PBghkhm9yLgmPfw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -1647,9 +1647,9 @@
} }
}, },
"node_modules/esbuild": { "node_modules/esbuild": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.4.tgz", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.3.tgz",
"integrity": "sha512-9rxWV/Cb2DMUXfe9aUsYtqg0KTlw146ElFH22kYeK9KVV1qT082X4lpmiKsa12ePiCcIcB686TQJxaGAa9TFvA==", "integrity": "sha512-eadWJC4CRpj93+miO5ZBlvCv+m2x6pzyNBznTvUeLFObMmxs1IMd8cCf6qiDVEZuDL6W8W7u+ZNW3GKEfOdDsA==",
"hasInstallScript": true, "hasInstallScript": true,
"bin": { "bin": {
"esbuild": "bin/esbuild" "esbuild": "bin/esbuild"
@ -1658,28 +1658,28 @@
"node": ">=12" "node": ">=12"
}, },
"optionalDependencies": { "optionalDependencies": {
"@esbuild/android-arm": "0.18.4", "@esbuild/android-arm": "0.18.3",
"@esbuild/android-arm64": "0.18.4", "@esbuild/android-arm64": "0.18.3",
"@esbuild/android-x64": "0.18.4", "@esbuild/android-x64": "0.18.3",
"@esbuild/darwin-arm64": "0.18.4", "@esbuild/darwin-arm64": "0.18.3",
"@esbuild/darwin-x64": "0.18.4", "@esbuild/darwin-x64": "0.18.3",
"@esbuild/freebsd-arm64": "0.18.4", "@esbuild/freebsd-arm64": "0.18.3",
"@esbuild/freebsd-x64": "0.18.4", "@esbuild/freebsd-x64": "0.18.3",
"@esbuild/linux-arm": "0.18.4", "@esbuild/linux-arm": "0.18.3",
"@esbuild/linux-arm64": "0.18.4", "@esbuild/linux-arm64": "0.18.3",
"@esbuild/linux-ia32": "0.18.4", "@esbuild/linux-ia32": "0.18.3",
"@esbuild/linux-loong64": "0.18.4", "@esbuild/linux-loong64": "0.18.3",
"@esbuild/linux-mips64el": "0.18.4", "@esbuild/linux-mips64el": "0.18.3",
"@esbuild/linux-ppc64": "0.18.4", "@esbuild/linux-ppc64": "0.18.3",
"@esbuild/linux-riscv64": "0.18.4", "@esbuild/linux-riscv64": "0.18.3",
"@esbuild/linux-s390x": "0.18.4", "@esbuild/linux-s390x": "0.18.3",
"@esbuild/linux-x64": "0.18.4", "@esbuild/linux-x64": "0.18.3",
"@esbuild/netbsd-x64": "0.18.4", "@esbuild/netbsd-x64": "0.18.3",
"@esbuild/openbsd-x64": "0.18.4", "@esbuild/openbsd-x64": "0.18.3",
"@esbuild/sunos-x64": "0.18.4", "@esbuild/sunos-x64": "0.18.3",
"@esbuild/win32-arm64": "0.18.4", "@esbuild/win32-arm64": "0.18.3",
"@esbuild/win32-ia32": "0.18.4", "@esbuild/win32-ia32": "0.18.3",
"@esbuild/win32-x64": "0.18.4" "@esbuild/win32-x64": "0.18.3"
} }
}, },
"node_modules/escalade": { "node_modules/escalade": {
@ -6797,135 +6797,135 @@
} }
}, },
"@esbuild/android-arm": { "@esbuild/android-arm": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.3.tgz",
"integrity": "sha512-yKmQC9IiuvHdsNEbPHSprnMHg6OhL1cSeQZLzPpgzJBJ9ppEg9GAZN8MKj1TcmB4tZZUrq5xjK7KCmhwZP8iDA==", "integrity": "sha512-QOn3VIlL6Qv1eHBpQB/s7simaZgGss2ASyxDOwYSLmc6vD0uuizZkuYawHmuLjWEm5wPwp0JQWhbpaYwwGevYw==",
"optional": true "optional": true
}, },
"@esbuild/android-arm64": { "@esbuild/android-arm64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.3.tgz",
"integrity": "sha512-yQVgO+V307hA2XhzELQ6F91CBGX7gSnlVGAj5YIqjQOxThDpM7fOcHT2YLJbE6gNdPtgRSafQrsK8rJ9xHCaZg==", "integrity": "sha512-PgabCsoaEEnnOiF6rUhOBXgYoLFIrHWP6mfLOzuQ1oZ1lwBdTL0hp5ivC4K3Kvz3BD8EipjeQo6l0aty3nr4qQ==",
"optional": true "optional": true
}, },
"@esbuild/android-x64": { "@esbuild/android-x64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.3.tgz",
"integrity": "sha512-yLKXMxQg6sk1ntftxQ5uwyVgG4/S2E7UoOCc5N4YZW7fdkfRiYEXqm7CMuIfY2Vs3FTrNyKmSfNevIuIvJnMww==", "integrity": "sha512-1OkJf8wNX1W5ucbp5HrK+z42b9DINb4ix59oJH/PIsh9cyFMqjgRKtCBXg0zEWhkmP1k3egdfrnS7cDTpLH43g==",
"optional": true "optional": true
}, },
"@esbuild/darwin-arm64": { "@esbuild/darwin-arm64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.3.tgz",
"integrity": "sha512-MVPEoZjZpk2xQ1zckZrb8eQuQib+QCzdmMs3YZAYEQPg+Rztk5pUxGyk8htZOC8Z38NMM29W+MqY9Sqo/sDGKw==", "integrity": "sha512-57aofORpY7wDAuMs6DeqpmgSnVfZ63RgGbR/BHdOSTqJgYvHDCMY7/o1myFntl3k0YxtLE3WAm56nMf4qy3UDw==",
"optional": true "optional": true
}, },
"@esbuild/darwin-x64": { "@esbuild/darwin-x64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.3.tgz",
"integrity": "sha512-uEsRtYRUDsz7i2tXg/t/SyF+5gU1cvi9B6B8i5ebJgtUUHJYWyIPIesmIOL4/+bywjxsDMA/XrNFMgMffLnh5A==", "integrity": "sha512-NVBqMnxT9qvgu7Z322LUDlwjh4GDk6wEePyAQnHF9noxik/WvLFmr5v3Vgz5LSvqFducLCxsdmLztKhdpFW0Gg==",
"optional": true "optional": true
}, },
"@esbuild/freebsd-arm64": { "@esbuild/freebsd-arm64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.3.tgz",
"integrity": "sha512-I8EOigqWnOHRin6Zp5Y1cfH3oT54bd7Sdz/VnpUNksbOtfp8IWRTH4pgkgO5jWaRQPjCpJcOpdRjYAMjPt8wXg==", "integrity": "sha512-XiLK1AsCk2wKxN7j8h9GXXCs8FPZhp07U0rnpwRkAVSVGgLaIWYSqpTRzKjAfqJiZlp+XKo1HwsmDdICEKB3Dg==",
"optional": true "optional": true
}, },
"@esbuild/freebsd-x64": { "@esbuild/freebsd-x64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.3.tgz",
"integrity": "sha512-1bHfgMz/cNMjbpsYxjVgMJ1iwKq+NdDPlACBrWULD7ZdFmBQrhMicMaKb5CdmdVyvIwXmasOuF4r6Iq574kUTA==", "integrity": "sha512-xyITfrF0G3l1gwR79hvNCCWKQ/16uK14xNNPFgzjbIqF4EpBvhO6l3jrWxXFUW51z6dVIl2Szh3x3uIbBWzH1Q==",
"optional": true "optional": true
}, },
"@esbuild/linux-arm": { "@esbuild/linux-arm": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.3.tgz",
"integrity": "sha512-4XCGqM/Ay1LCXUBH59bL4JbSbbTK1K22dWHymWMGaEh2sQCDOUw+OQxozYV/YdBb91leK2NbuSrE2BRamwgaYw==", "integrity": "sha512-fc/T0QHMzvmnlF+kfD6bHLB8u+17gg13260p/E86yYjVoKNFjonL/+Y0GGQjMbFUas9QijqOa7pcR00a9RNkwg==",
"optional": true "optional": true
}, },
"@esbuild/linux-arm64": { "@esbuild/linux-arm64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.3.tgz",
"integrity": "sha512-J42vLHaYREyiBwH0eQE4/7H1DTfZx8FuxyWSictx4d7ezzuKE3XOkIvOg+SQzRz7T9HLVKzq2tvbAov4UfufBw==", "integrity": "sha512-lsKUYVd8L/j2uNs8dhMjMsKC5MHYh77gR9EThu7YCeeFz1XpIkx1I4a7mhoVfPS2VPVD1pMCh+PgxuAHUcEmXw==",
"optional": true "optional": true
}, },
"@esbuild/linux-ia32": { "@esbuild/linux-ia32": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.3.tgz",
"integrity": "sha512-4ksIqFwhq7OExty7Sl1n0vqQSCqTG4sU6i99G2yuMr28CEOUZ/60N+IO9hwI8sIxBqmKmDgncE1n5CMu/3m0IA==", "integrity": "sha512-EyfGWeOwRqK5Xj18vok0qv8IFBZ1/+hKV+cqD44oVhGsxHo9TmPtoSiDrWn8Sa2swq/VuO5Aiog6YPDj81oIkA==",
"optional": true "optional": true
}, },
"@esbuild/linux-loong64": { "@esbuild/linux-loong64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.3.tgz",
"integrity": "sha512-bsWtoVHkGQgAsFXioDueXRiUIfSGrVkJjBBz4gcBJxXcD461cWFQFyu8Fxdj9TP+zEeqJ8C/O4LFFMBNi6Fscw==", "integrity": "sha512-PwXkcl3t0kSeYH5RuJIeh/fHOzKZd+ZdifAWzpVO+9TLWArutTFBJvOSkTZ3CcqQqNrTj1Qyo6nqE8MQj/a7cQ==",
"optional": true "optional": true
}, },
"@esbuild/linux-mips64el": { "@esbuild/linux-mips64el": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.3.tgz",
"integrity": "sha512-LRD9Fu8wJQgIOOV1o3nRyzrheFYjxA0C1IVWZ93eNRRWBKgarYFejd5WBtrp43cE4y4D4t3qWWyklm73Mrsd/g==", "integrity": "sha512-CRVkkSXf5GQcq7Am2a2tdIn85oqi/bkjuPvhNqcdeTgI0xgNbqLnEPRy2AEGkRuaJWB5uCX1IC4sqnY8ET14Yg==",
"optional": true "optional": true
}, },
"@esbuild/linux-ppc64": { "@esbuild/linux-ppc64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.3.tgz",
"integrity": "sha512-jtQgoZjM92gauVRxNaaG/TpL3Pr4WcL3Pwqi9QgdrBGrEXzB+twohQiWNSTycs6lUygakos4mm2h0B9/SHveng==", "integrity": "sha512-t7zK1Cheh0xvzfZbimztiE0wGnpV+YRsBg3tefcEBN3O4GzgLu6fFpA5HxEyVm3hHZW1jAC4OhoGEp7C5Ii6Eg==",
"optional": true "optional": true
}, },
"@esbuild/linux-riscv64": { "@esbuild/linux-riscv64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.3.tgz",
"integrity": "sha512-7WaU/kRZG0VCV09Xdlkg6LNAsfU9SAxo6XEdaZ8ffO4lh+DZoAhGTx7+vTMOXKxa+r2w1LYDGxfJa2rcgagMRA==", "integrity": "sha512-fUZPtyCYih6y4lDYdSM4Yoax4nS7aH0/XixJStys+9tfp5cAlIAZhEVKOOdeGXmQn0IEyiUtlIsPnfObbeDQfQ==",
"optional": true "optional": true
}, },
"@esbuild/linux-s390x": { "@esbuild/linux-s390x": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.3.tgz",
"integrity": "sha512-D19ed0xreKQvC5t+ArE2njSnm18WPpE+1fhwaiJHf+Xwqsq+/SUaV8Mx0M27nszdU+Atq1HahrgCOZCNNEASUg==", "integrity": "sha512-oIcK2LqHWqfMERqjvaKJ3QJmycHn723HsXIv5gH4iGfmePfSj+gi0ZQv2h4bHUg2bs2gJtV0DlIjGhEuvdgxLw==",
"optional": true "optional": true
}, },
"@esbuild/linux-x64": { "@esbuild/linux-x64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.3.tgz",
"integrity": "sha512-Rx3AY1sxyiO/gvCGP00nL69L60dfmWyjKWY06ugpB8Ydpdsfi3BHW58HWC24K3CAjAPSwxcajozC2PzA9JBS1g==", "integrity": "sha512-RW9lpfZ6XZ6f5to2DJPvt0f/4RXEW229Xf++quVoW+YbnPrcapIJChtD/AmZ8cK3hglO/hXxJjs21pV0/l7L5w==",
"optional": true "optional": true
}, },
"@esbuild/netbsd-x64": { "@esbuild/netbsd-x64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.3.tgz",
"integrity": "sha512-AaShPmN9c6w1mKRpliKFlaWcSkpBT4KOlk93UfFgeI3F3cbjzdDKGsbKnOZozmYbE1izZKLmNJiW0sFM+A5JPA==", "integrity": "sha512-piZ2oBoaq58pKZvhgdV6PemlL30Uhd9GmmOkIGZYgChwNcyVSSl6iMEJxMzU7x44Lk9q+hJ6a343M/iVEMEvxA==",
"optional": true "optional": true
}, },
"@esbuild/openbsd-x64": { "@esbuild/openbsd-x64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.3.tgz",
"integrity": "sha512-tRGvGwou3BrvHVvF8HxTqEiC5VtPzySudS9fh2jBIKpLX7HCW8jIkW+LunkFDNwhslx4xMAgh0jAHsx/iCymaQ==", "integrity": "sha512-vaMfouYTz/4tKdQsXDccqhV6wgPEr+hfuxdNU5Pl/vQxYTsqcXv5DYEa5Z1RAxCoua5aEB+Uj5V7VT/bM92wxw==",
"optional": true "optional": true
}, },
"@esbuild/sunos-x64": { "@esbuild/sunos-x64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.3.tgz",
"integrity": "sha512-acORFDI95GKhmAnlH8EarBeuqoy/j3yxIU+FDB91H3+ZON+8HhTadtT450YkaMzX6lEWbhi+mjVUCj00M5yyOQ==", "integrity": "sha512-Fa3rNQQ9q1qwy9u2cdDvuGKy3jmPnPPMDdyy/qbn5d395Pb9hjLYiPzX9BozXMPJDlCNofSY7jN3miM9gyAdHA==",
"optional": true "optional": true
}, },
"@esbuild/win32-arm64": { "@esbuild/win32-arm64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.3.tgz",
"integrity": "sha512-1NxP+iOk8KSvS1L9SSxEvBAJk39U0GiGZkiiJGbuDF9G4fG7DSDw6XLxZMecAgmvQrwwx7yVKdNN3GgNh0UfKg==", "integrity": "sha512-LPJC8ub+9uzyC6ygVmp00dAqet1q1DsZ/OldGIIBt+y+Ctd1OfnKNlzQgXK8nxwY1G8fAhklFSeSRRgAUJnR0w==",
"optional": true "optional": true
}, },
"@esbuild/win32-ia32": { "@esbuild/win32-ia32": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.3.tgz",
"integrity": "sha512-OKr8jze93vbgqZ/r23woWciTixUwLa976C9W7yNBujtnVHyvsL/ocYG61tsktUfJOpyIz5TsohkBZ6Lo2+PCcQ==", "integrity": "sha512-WtUyRspyxZR6NTc2HG4xd9Wvz8lP4C6OUY1gAqisrf151HvXIxsK0mfAacFJNS7EN2wvPTgjP+SM8vgBOx5+zA==",
"optional": true "optional": true
}, },
"@esbuild/win32-x64": { "@esbuild/win32-x64": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.4.tgz", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.3.tgz",
"integrity": "sha512-qJr3wVvcLjPFcV4AMDS3iquhBfTef2zo/jlm8RMxmiRp3Vy2HY8WMxrykJlcbCnqLXZPA0YZxZGND6eug85ogg==", "integrity": "sha512-Z8qCK4BkBm40j5KUM4NrkxYQS0R12cBO1NBVtI4vws6uwh1n/VaNu31Hm+n2cJUWdFbfH57PBghkhm9yLgmPfw==",
"optional": true "optional": true
}, },
"@jridgewell/gen-mapping": { "@jridgewell/gen-mapping": {
@ -7896,32 +7896,32 @@
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
}, },
"esbuild": { "esbuild": {
"version": "0.18.4", "version": "0.18.3",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.4.tgz", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.3.tgz",
"integrity": "sha512-9rxWV/Cb2DMUXfe9aUsYtqg0KTlw146ElFH22kYeK9KVV1qT082X4lpmiKsa12ePiCcIcB686TQJxaGAa9TFvA==", "integrity": "sha512-eadWJC4CRpj93+miO5ZBlvCv+m2x6pzyNBznTvUeLFObMmxs1IMd8cCf6qiDVEZuDL6W8W7u+ZNW3GKEfOdDsA==",
"requires": { "requires": {
"@esbuild/android-arm": "0.18.4", "@esbuild/android-arm": "0.18.3",
"@esbuild/android-arm64": "0.18.4", "@esbuild/android-arm64": "0.18.3",
"@esbuild/android-x64": "0.18.4", "@esbuild/android-x64": "0.18.3",
"@esbuild/darwin-arm64": "0.18.4", "@esbuild/darwin-arm64": "0.18.3",
"@esbuild/darwin-x64": "0.18.4", "@esbuild/darwin-x64": "0.18.3",
"@esbuild/freebsd-arm64": "0.18.4", "@esbuild/freebsd-arm64": "0.18.3",
"@esbuild/freebsd-x64": "0.18.4", "@esbuild/freebsd-x64": "0.18.3",
"@esbuild/linux-arm": "0.18.4", "@esbuild/linux-arm": "0.18.3",
"@esbuild/linux-arm64": "0.18.4", "@esbuild/linux-arm64": "0.18.3",
"@esbuild/linux-ia32": "0.18.4", "@esbuild/linux-ia32": "0.18.3",
"@esbuild/linux-loong64": "0.18.4", "@esbuild/linux-loong64": "0.18.3",
"@esbuild/linux-mips64el": "0.18.4", "@esbuild/linux-mips64el": "0.18.3",
"@esbuild/linux-ppc64": "0.18.4", "@esbuild/linux-ppc64": "0.18.3",
"@esbuild/linux-riscv64": "0.18.4", "@esbuild/linux-riscv64": "0.18.3",
"@esbuild/linux-s390x": "0.18.4", "@esbuild/linux-s390x": "0.18.3",
"@esbuild/linux-x64": "0.18.4", "@esbuild/linux-x64": "0.18.3",
"@esbuild/netbsd-x64": "0.18.4", "@esbuild/netbsd-x64": "0.18.3",
"@esbuild/openbsd-x64": "0.18.4", "@esbuild/openbsd-x64": "0.18.3",
"@esbuild/sunos-x64": "0.18.4", "@esbuild/sunos-x64": "0.18.3",
"@esbuild/win32-arm64": "0.18.4", "@esbuild/win32-arm64": "0.18.3",
"@esbuild/win32-ia32": "0.18.4", "@esbuild/win32-ia32": "0.18.3",
"@esbuild/win32-x64": "0.18.4" "@esbuild/win32-x64": "0.18.3"
} }
}, },
"escalade": { "escalade": {

View File

@ -23,7 +23,7 @@
"any-date-parser": "^1.5.4", "any-date-parser": "^1.5.4",
"browserslist": "^4.21.7", "browserslist": "^4.21.7",
"cheerio": "^1.0.0-rc.12", "cheerio": "^1.0.0-rc.12",
"esbuild": "^0.18.4", "esbuild": "^0.18.3",
"fs-cheerio": "^3.0.0", "fs-cheerio": "^3.0.0",
"inline-source": "^8.0.2", "inline-source": "^8.0.2",
"jsdom": "^22.1.0", "jsdom": "^22.1.0",

View File

@ -226,7 +226,7 @@ func (app *appContext) loadRoutes(router *gin.Engine) {
api.POST(p+"/matrix/login", app.MatrixLogin) api.POST(p+"/matrix/login", app.MatrixLogin)
if userPageEnabled { if userPageEnabled {
user.GET(p+"/details", app.MyDetails) user.GET(p+"/hello", app.HelloWorld)
} }
} }
} }

View File

@ -1,33 +0,0 @@
# *langmover*
* Makes moving strings between language files a little easier.
# Usage
You'll need to create a template file. See example `template.json`:
```json
{
"meta": {
"explanation": "values here can either be folder, folder:section, or folder:section:subkey, and then either nothing, or /keyname. It all depends on whether the sections and keys match up, or if you want to pull a plural/singular only or not."
},
"strings": {
"inviteInfiniteUsesWarning": "admin", // Resolves to admin/strings/inviteInfiniteUsesWarning
"emailAddress": "form:strings/emailAddress", // Resolves to form/strings/emailAddress
"modifySettingsFor": "admin:quantityStrings:plural/", // Resolves to admin/quantityStrings/modifySettingsFor/plural
"deleteNUsers": "admin:quantityStrings:singular/deleteNUsers" // Resolves to admin/quantityStrings/deleteNUsers/singular
},
"quantityStrings": {
"reEnableUsers": "admin" // Resolves to admin/quantityStrings/reEnableUsers
}
}
```
Args:
* `--source`: Source `lang/` directory. **Always run on a copy, to avoid data loss**
* `--template`: Template JSON file.
* `--output`: Output directory. Will be filled with lang files (e.g. "en-us.json", "fa-ir.json", ...).
* `--extract`: Passing will remove the templated strings from their source file. **Modifies the source directory**.

View File

@ -1,138 +0,0 @@
import json, argparse, os
from pathlib import Path
ROOT = "en-us.json"
# Tree structure: <lang-code.json>/<folder>/<json content>
def generateTree(src: Path):
tree = {}
langs = {}
directories = []
def readLangFile(path: Path):
with open(path, 'r') as f:
content = json.load(f)
return content
for directory in os.scandir(src):
if not directory.is_dir(): continue
directories.append(directory.name)
# tree[directory.name] = {}
for lang in os.scandir(directory.path):
if not lang.is_file(): continue
if not ".json" in lang.name: continue
if lang.name not in langs:
langs[lang.name] = True
if lang.name.lower() not in tree:
tree[lang.name.lower()] = {}
for lang in langs:
for directory in directories:
filepath = Path(src) / Path(directory) / Path(lang)
if not filepath.exists(): continue
tree[lang.lower()][directory] = readLangFile(filepath)
return tree
def parseKey(langTree, currentSection: str, fieldName: str, key: str, extract=False):
temp = key.split("/")
loc = temp[0]
k = ""
if len(temp) > 1:
k = temp[1]
sections = loc.split(":")
# folder, folder:section or folder:section:subkey
folder = sections[0]
section = currentSection
subkey = None
if len(sections) > 1:
section = sections[1]
if len(sections) > 2:
subkey = sections[2]
if k == '':
k = fieldName
value = ""
if folder in langTree and section in langTree[folder] and k in langTree[folder][section]:
value = langTree[folder][section][k]
if extract:
s = langTree[folder][section]
del s[k]
langTree[folder][section] = s
if subkey is not None and subkey in value:
value = value[subkey]
return (langTree, folder, value)
def generate(templ: Path, source: Path, output: Path, extract: str, tree):
with open(templ, "r") as f:
template = json.load(f)
if not output.exists():
output.mkdir()
for lang in tree:
out = {}
for section in template:
if section == "meta":
# grab a meta section from the first file we find
for file in tree[lang]:
out["meta"] = tree[lang][file]["meta"]
break
continue
folder = ""
out[section] = {}
for key in template[section]:
(tree[lang], folder, val) = parseKey(tree[lang], section, key, template[section][key], extract)
if val != "":
out[section][key] = val
# if extract and val != "":
# with open(source / folder / lang, "w") as f:
# json.dump(modifiedTree[folder], f, indent=4, ensure_ascii=False)
with open(output / Path(lang), "w") as f:
json.dump(out, f, indent=4, ensure_ascii=False)
if extract and extract != "":
ex = Path(extract)
if not ex.exists():
ex.mkdir()
for lang in tree:
for folder in tree[lang]:
if not (ex / folder).exists():
(ex / folder).mkdir()
with open(ex / folder / lang, "w") as f:
json.dump(tree[lang][folder], f, indent=4, ensure_ascii=False)
parser = argparse.ArgumentParser()
parser.add_argument("--source", help="source \"lang/\" folder.")
parser.add_argument("--template", help="template file. see template.json for an example of how it works.")
parser.add_argument("--output", help="output directory for new files.")
parser.add_argument("--extract", help="put copies of original files with strings removed in this directory")
args = parser.parse_args()
source = Path(args.source)
tree = generateTree(source)
generate(Path(args.template), source, Path(args.output), args.extract, tree)
# print(json.dumps(tree, sort_keys=True, indent=4))

View File

@ -1,35 +0,0 @@
{
"meta": {},
"strings": {
"username": "common",
"password": "common",
"emailAddress": "common",
"name": "common",
"submit": "common",
"send": "common",
"success": "common",
"continue": "common",
"error": "common",
"copy": "common",
"copied": "common",
"time24h": "common",
"time12h": "common",
"linkTelegram": "common",
"contactEmail": "common",
"contactTelegram": "common",
"linkDiscord": "common",
"linkMatrix": "common",
"contactDiscord": "common",
"theme": "common",
"refresh": "common",
"required": "common",
"login": "admin",
"logout": "admin"
},
"notifications": {
"errorLoginBlank": "admin",
"errorConnection": "admin",
"errorUnknown": "admin",
"error401Unauthorized": "admin"
}
}

View File

@ -1,15 +0,0 @@
{
"meta": {
"explanation": "values here can either be folder, folder:section, or folder:section:subkey, and then either nothing, or /keyname. It all depends on whether the sections and keys match up, or if you want to pull a plural/singular only or not."
},
"strings": {
"inviteInfiniteUsesWarning": "admin",
"emailAddress": "form:strings/emailAddress",
"modifySettingsFor": "admin:quantityStrings:plural/",
"deleteNUsers": "admin:quantityStrings:singular/deleteNUsers"
},
"quantityStrings": {
"reEnableUsers": "admin"
}
}

View File

@ -111,8 +111,7 @@ func (st *Storage) loadLangSetup(filesystems ...fs.FS) error {
if err != nil { if err != nil {
return err return err
} }
st.lang.Common.patchCommonStrings(&lang.Strings, index) st.lang.Common.patchCommon(&lang.Strings, index)
st.lang.Common.patchCommonNotifications(&lang.Notifications, index)
if fname != "en-us.json" { if fname != "en-us.json" {
if lang.Meta.Fallback != "" { if lang.Meta.Fallback != "" {
fallback, ok := st.lang.Setup[lang.Meta.Fallback] fallback, ok := st.lang.Setup[lang.Meta.Fallback]

View File

@ -164,7 +164,7 @@ func (st *Storage) loadLang(filesystems ...fs.FS) (err error) {
// from a list of other sources in a preferred order. // from a list of other sources in a preferred order.
// languages to patch from should be in decreasing priority, // languages to patch from should be in decreasing priority,
// E.g: If to = fr-be, from = [fr-fr, en-us]. // E.g: If to = fr-be, from = [fr-fr, en-us].
func (common *commonLangs) patchCommonStrings(to *langSection, from ...string) { func (common *commonLangs) patchCommon(to *langSection, from ...string) {
if *to == nil { if *to == nil {
*to = langSection{} *to = langSection{}
} }
@ -183,25 +183,6 @@ func (common *commonLangs) patchCommonStrings(to *langSection, from ...string) {
} }
} }
func (common *commonLangs) patchCommonNotifications(to *langSection, from ...string) {
if *to == nil {
*to = langSection{}
}
for n, ev := range (*common)[from[len(from)-1]].Notifications {
if v, ok := (*to)[n]; !ok || v == "" {
i := 0
for i < len(from)-1 {
ev, ok = (*common)[from[i]].Notifications[n]
if ok && ev != "" {
break
}
i++
}
(*to)[n] = ev
}
}
}
func patchLang(to *langSection, from ...*langSection) { func patchLang(to *langSection, from ...*langSection) {
if *to == nil { if *to == nil {
*to = langSection{} *to = langSection{}
@ -348,8 +329,7 @@ func (st *Storage) loadLangAdmin(filesystems ...fs.FS) error {
if err != nil { if err != nil {
return err return err
} }
st.lang.Common.patchCommonStrings(&lang.Strings, index) st.lang.Common.patchCommon(&lang.Strings, index)
st.lang.Common.patchCommonNotifications(&lang.Notifications, index)
if fname != "en-us.json" { if fname != "en-us.json" {
if lang.Meta.Fallback != "" { if lang.Meta.Fallback != "" {
fallback, ok := st.lang.Admin[lang.Meta.Fallback] fallback, ok := st.lang.Admin[lang.Meta.Fallback]
@ -435,8 +415,7 @@ func (st *Storage) loadLangUser(filesystems ...fs.FS) error {
if err != nil { if err != nil {
return err return err
} }
st.lang.Common.patchCommonStrings(&lang.Strings, index) st.lang.Common.patchCommon(&lang.Strings, index)
st.lang.Common.patchCommonNotifications(&lang.Notifications, index)
if fname != "en-us.json" { if fname != "en-us.json" {
if lang.Meta.Fallback != "" { if lang.Meta.Fallback != "" {
fallback, ok := st.lang.User[lang.Meta.Fallback] fallback, ok := st.lang.User[lang.Meta.Fallback]
@ -466,13 +445,8 @@ func (st *Storage) loadLangUser(filesystems ...fs.FS) error {
if err != nil { if err != nil {
return err return err
} }
userJSON, err := json.Marshal(lang)
if err != nil {
return err
}
lang.notificationsJSON = string(notifications) lang.notificationsJSON = string(notifications)
lang.validationStringsJSON = string(validationStrings) lang.validationStringsJSON = string(validationStrings)
lang.JSON = string(userJSON)
st.lang.User[index] = lang st.lang.User[index] = lang
return nil return nil
} }
@ -532,7 +506,7 @@ func (st *Storage) loadLangPWR(filesystems ...fs.FS) error {
if err != nil { if err != nil {
return err return err
} }
st.lang.Common.patchCommonStrings(&lang.Strings, index) st.lang.Common.patchCommon(&lang.Strings, index)
if fname != "en-us.json" { if fname != "en-us.json" {
if lang.Meta.Fallback != "" { if lang.Meta.Fallback != "" {
fallback, ok := st.lang.PasswordReset[lang.Meta.Fallback] fallback, ok := st.lang.PasswordReset[lang.Meta.Fallback]
@ -608,7 +582,7 @@ func (st *Storage) loadLangEmail(filesystems ...fs.FS) error {
if err != nil { if err != nil {
return err return err
} }
st.lang.Common.patchCommonStrings(&lang.Strings, index) st.lang.Common.patchCommon(&lang.Strings, index)
if fname != "en-us.json" { if fname != "en-us.json" {
if lang.Meta.Fallback != "" { if lang.Meta.Fallback != "" {
fallback, ok := st.lang.Email[lang.Meta.Fallback] fallback, ok := st.lang.Email[lang.Meta.Fallback]
@ -705,7 +679,7 @@ func (st *Storage) loadLangTelegram(filesystems ...fs.FS) error {
if err != nil { if err != nil {
return err return err
} }
st.lang.Common.patchCommonStrings(&lang.Strings, index) st.lang.Common.patchCommon(&lang.Strings, index)
if fname != "en-us.json" { if fname != "en-us.json" {
if lang.Meta.Fallback != "" { if lang.Meta.Fallback != "" {
fallback, ok := st.lang.Telegram[lang.Meta.Fallback] fallback, ok := st.lang.Telegram[lang.Meta.Fallback]

View File

@ -4,13 +4,6 @@ import { Modal } from "./modules/modal.js";
import { _get, _post, notificationBox, whichAnimationEvent } from "./modules/common.js"; import { _get, _post, notificationBox, whichAnimationEvent } from "./modules/common.js";
import { Login } from "./modules/login.js"; import { Login } from "./modules/login.js";
interface userWindow extends Window {
jellyfinID: string;
username: string;
}
declare var window: userWindow;
const theme = new ThemeManager(document.getElementById("button-theme")); const theme = new ThemeManager(document.getElementById("button-theme"));
window.lang = new lang(window.langFile as LangFile); window.lang = new lang(window.langFile as LangFile);
@ -29,20 +22,14 @@ window.modals = {} as Modals;
window.notifications = new notificationBox(document.getElementById('notification-box') as HTMLDivElement, 5); window.notifications = new notificationBox(document.getElementById('notification-box') as HTMLDivElement, 5);
var rootCard = document.getElementById("card-user");
const login = new Login(window.modals.login as Modal, "/my/"); const login = new Login(window.modals.login as Modal, "/my/");
login.onLogin = () => { login.onLogin = () => {
console.log("Logged in."); console.log("Logged in.");
_get("/my/details", null, (req: XMLHttpRequest) => { document.getElementById("card-user").textContent = "Logged In!";
_get("/my/hello", null, (req: XMLHttpRequest) => {
if (req.readyState == 4) { if (req.readyState == 4) {
if (req.status != 200) { const card = document.getElementById("card-user");
window.notifications.customError("myDetailsError", req.response["error"]); card.textContent = card.textContent + " got response " + req.response["response"];
return;
}
window.jellyfinID = req.response["id"];
window.username = req.response["username"];
rootCard.querySelector(".heading").textContent = window.lang.strings("welcomeUser").replace("{user}", window.username);
} }
}); });
}; };

View File

@ -166,22 +166,22 @@ func (app *appContext) MyUserPage(gc *gin.Context) {
notificationsEnabled, _ := app.config.Section("notifications").Key("enabled").Bool() notificationsEnabled, _ := app.config.Section("notifications").Key("enabled").Bool()
ombiEnabled := app.config.Section("ombi").Key("enabled").MustBool(false) ombiEnabled := app.config.Section("ombi").Key("enabled").MustBool(false)
gcHTML(gc, http.StatusOK, "user.html", gin.H{ gcHTML(gc, http.StatusOK, "user.html", gin.H{
"urlBase": app.getURLBase(gc), "urlBase": app.getURLBase(gc),
"cssClass": app.cssClass, "cssClass": app.cssClass,
"cssVersion": cssVersion, "cssVersion": cssVersion,
"contactMessage": app.config.Section("ui").Key("contact_message").String(), "contactMessage": app.config.Section("ui").Key("contact_message").String(),
"emailEnabled": emailEnabled, "emailEnabled": emailEnabled,
"telegramEnabled": telegramEnabled, "telegramEnabled": telegramEnabled,
"discordEnabled": discordEnabled, "discordEnabled": discordEnabled,
"matrixEnabled": matrixEnabled, "matrixEnabled": matrixEnabled,
"ombiEnabled": ombiEnabled, "ombiEnabled": ombiEnabled,
"linkResetEnabled": app.config.Section("password_resets").Key("link_reset").MustBool(false), "linkResetEnabled": app.config.Section("password_resets").Key("link_reset").MustBool(false),
"notifications": notificationsEnabled, "notifications": notificationsEnabled,
"username": !app.config.Section("email").Key("no_username").MustBool(false), "username": !app.config.Section("email").Key("no_username").MustBool(false),
"strings": app.storage.lang.User[lang].Strings, "strings": app.storage.lang.Admin[lang].Strings,
"validationStrings": app.storage.lang.User[lang].ValidationStrings, "quantityStrings": app.storage.lang.Admin[lang].QuantityStrings,
"language": app.storage.lang.User[lang].JSON, "language": app.storage.lang.Admin[lang].JSON,
"langName": lang, "langName": lang,
}) })
} }