fix offline state, update label

This commit is contained in:
_Bastler 2023-12-15 13:00:25 +01:00
parent 30bed7245f
commit 86af84c7a5
4 changed files with 620 additions and 83 deletions

View File

@ -12,7 +12,7 @@
<a mat-raised-button color="primary" (click)="retry()">
{{'service-unavailable.retry' | i18n}}
</a>
<a mat-raised-button href="https://wiki.bstly.de/help#Support">
<a mat-raised-button href="https://wiki.bstly.de/help#support">
{{'service-unavailable.support' | i18n}}
</a>
</mat-card-actions>

View File

@ -11,7 +11,7 @@ import { ActivatedRoute } from '@angular/router';
export class I18nService {
locale: string = "de-informal";
locales: any = [ "de-informal" ];
locales: any = ["en", "de-informal"];
i18n: any;
constructor(private http: HttpClient,
@ -30,8 +30,11 @@ export class I18nService {
}
async fetch() {
try {
this.locales = await firstValueFrom(this.http.get(environment.apiUrl + "/i18n"));
} catch {
this.locales = ["en", "de-informal"];
}
let browserLocale = window.navigator.language || window.parent.navigator.language;
if (browserLocale.indexOf("-") != -1) {

View File

@ -5,10 +5,92 @@
".": "Erweitert"
}
},
"borrow": {
".": "Ausleihen",
"items": {
".": "Verleihbare Items",
"actions": "Aktionen",
"autoAccept": "Automatisch akzeptieren",
"availability": {
".": "Verfügbarkeit",
"ALWAYS": "Immer",
"MANUAL": "Manuel",
"PERIOD": "Periodisch"
},
"create": "Neues Item erstellen",
"confirmDelete": "Bist du sicher, dass du das Item '{0}' löschen möchtest?",
"delete": "Item löschen",
"description": "Beschreibung",
"edit": "Item bearbeiten",
"email": "E-Mail",
"emailNotification": "E-Mail Benachrichtigungen",
"error": {
"availability": "Bitte Verfügbarkeit auswählen.",
"description": "Bitte eine Beschreibung eintragen.",
"email": "Bitte eine gültige E-Mail Addresse eintragen.",
"name": "Bitte einen Namen eintragen.",
"maxDuration": "Max. Dauer muss größer als die min. Dauer sein.",
"minDuration": "Min. Dauer muss kleiner als die max. Dauer sein.",
"slot": {
"end": "Ende muss nach dem Beginn sein.",
"endDay": "Wochentag muss größer oder gleich dem Beginn sein.",
"endTime": "Ende muss nach dem Beginn sein.",
"start": "Beginn muss kleiner dem Ende sein.",
"startDay": "Wochentag muss kleiner oder gleich dem Ende sein.",
"startTime": "Beginn muss vor dem Ende sein."
},
"url": "Bitte eine gültige Url eintragen."
},
"maxDuration": "Max. Dauer",
"minDuration": "Min. Dauer",
"mine": "Meine",
"name": "Name",
"save": "Item speichern",
"search": "Suche",
"slot": {
".": "Slot",
"addManual": "Manuellen Slot hinzufügen",
"addPeriod": "Periodischen Slot hinzufügen",
"day": {
".": "Tag",
"MONDAY": "Montag",
"TUESDAY": "Dienstag",
"WEDNESDAY": "Mittwoch",
"THURSDAY": "Donnerstag",
"FRIDAY": "Freitag",
"SATURDAY": "Samstag",
"SUNDAY": "Sonntag"
},
"delete": "Slot entfernen",
"end": "Ende",
"endDay": "Wochentag Ende",
"endTime": "Ende",
"MANUAL": "Manuelle Slots",
"PERIOD": "Periodische Slots",
"start": "Beginn",
"startDay": "Wochentag Beginn",
"startTime": "Beginn"
},
"url": "Url"
},
"proving": {
".": "Proving",
"camera": "Camera",
"flash": "Flash"
},
"requests": {
".": "Requests"
}
},
"cancel": "Abbrechen",
"close": "Schließen",
"confirm": "Bestätigen",
"delete": "Löschen",
"durationpicker": {
"days": "Tage",
"hours": "Stunden",
"minutes": "Minuten"
},
"email": {
".": "E-Mail Adresse",
"invalid": "ungültige E-Mail Adresse",
@ -18,8 +100,8 @@
}
},
"format": {
"date": "dd.MM.yyyy",
"datetime": "dd.MM.yyyy HH:mm",
"date": "DD.MM.YYYY",
"datetime": "DD.MM.YYYY HH:mm",
"time": "HH:mm:ss"
},
"greet": "Hallo {0}",
@ -31,6 +113,7 @@
},
"invite": {
".": "Einleidung",
"actions": "Aktionen",
"create": "Einladung erstellen",
"expires": "Gültig bis",
"link": "Link",
@ -43,10 +126,21 @@
},
"invites": {
".": "Einladungen",
"info": "Hier kannst du neue Einladungen erstellen. Um die Einladung zu bearbeiten klicke einfach auf den Link. Wenn du authoriziert bist, kannst du dort direkt den persönlichen Einladungstext bearbeiten oder eine Notiz hinzufügen. Danach kannst du denselben Link einfach an die einzuladene Person verschicken oder die Seite für eine analoge Einladung ausdrucken. Wird der Link ohne Authorizierung aufgerufen, erscheint unten auf der Seite ein Formular zur Registrierung!",
"edit": {
".": "Edit Invite",
"save": "Save Invite"
},
"info": "Hier kannst du neue Einladungen erstellen. Um die Einladung zu bearbeiten klicke einfach auf den Bearbeiten-Button. Wenn du authoriziert bist, kannst du den persönlichen Einladungstext auch direkt unter dem Einladungslink bearbeiten oder eine Notiz hinzufügen. Danach kannst du denselben Link einfach an die einzuladene Person verschicken. Wird der Link ohne Authorizierung aufgerufen, erscheint unten auf der Seite ein Formular zur Registrierung!",
"left": "Du kannst noch {0} Einladungen erstellen.",
"noQuota": "Deine Quota für Einladungen ist leider aufgebraucht.",
"others": "Einladungen anderer Mitglieder",
"quota": {
"pubquiz": {
".": "Pubquiz",
"icon": "quiz",
"text": "Einladung zum Pubquiz."
}
},
"redeemed": {
"filter": {
".": "Einglöst-Filter",
@ -55,6 +149,22 @@
"true": "Eingelöst"
}
},
"register": {
".": "Einladung einlösen",
"error": {
"ALREADY_REDEEMED": "Der Einladungscode wurde bereits eingelöst.",
"EXPIRED": "Der Einladungscode ist abgelaufen!",
"INVALID_CODE": "Der Einladungscode ist ungültig!",
"NO_CODE": "Kein Einladungscode mitgegeben!"
},
"login": "Login",
"success": {
".": "Finished registration",
"text": "Successfully registered your Account. You can login now!"
},
"time": "Invite valid from {0} till {1}",
"url": "Mehr Informationen"
},
"search": "Suche"
},
"jitsi": {
@ -104,6 +214,32 @@
}
}
},
"jukebox": {
".": "Jukebox",
"addToQueue": {
".": "Zur Warteliste hinzufügen",
"confirm": "Möchtest du '{0} - {1}' zur Warteliste hinzufügen?",
"error": "Fehler",
"success": "Erfolg"
},
"current": "Aktueller Titel",
"forbidden": {
".": "Keine Berechtigungen",
"hint": "Dir fehlen dir nötigen Berechtigungen die Jukebox zu verwenden."
},
"search": {
".": "Suche",
"icon": "search",
"more": "Mehr anzeigen",
"submit": "Abschicken"
},
"timeout": "Bitte warte {0} Sekunden bis zu deiner nächsten Anfrage.",
"unavailable": {
".": "Nicht verfügbar",
"hint": "Aktuell ist die Jukebox ausgestellt."
},
"wait": "Bitte warten."
},
"locale": {
"de-informal": {
"long": "Deutsch",
@ -142,8 +278,40 @@
"text": "Diese Seite wurde nicht gefunden."
},
"ok": "Ok",
"paginator": {
"empty": "Keine Ergebnisse",
"firstPage": "Erste Seite",
"itemsPerPage": "Einträge pro Seite:",
"lastPage": "Letzte Seite",
"nextPage": "Nächste Seite",
"previousPage": "Vorherige Seite",
"range": "Seite {0} von {1}"
},
"partey": {
".": "Partey",
"tag": {
".": "Partey Tag",
"access-storage": {
".": "Zugang Lagerraum",
"hint": "Zugang zum Lagerraum im Erdgeschoss."
},
"admin": {
".": "Administrator",
"hint": "Sende Nachrichten an Räume."
},
"cinema-mod": {
".": "Moderator Kinosaal",
"hint": "Im Kinosaal: Zugang zur Bühne, Festlegen der Stream-Url, Moderationsrechte im Chatraum."
},
"disco-mod": {
".": "Moderator Disco",
"hint": "In der Disco: Zugang zur Bühne, Festlegen des Bühnenlayouts, Moderationsrechte im Chatraum."
},
"game-mod": {
".": "Spielezimmer Moderator",
"hint": "Im Spielezimmer: Festlegen der Tischbezeichungen, Moderationsrechte im Chatraum."
}
},
"tags": {
".": "Partey Tags",
"none": "Keine"
@ -154,7 +322,9 @@
"create": {
".": "Neuen Sendplatz erstellen",
"AUDIO": "Neuer Audio Sendplatz",
"VIDEO": "Neuer Video Sendplatz"
"AUDIO_STREAM": "Neuer Audio Stream Sendplatz",
"VIDEO": "Neuer Video Sendplatz",
"VIDEO_STREAM": "Neuer Video Stream Sendplatz"
},
"delete": "Löschen",
"description": "Beschreibung",
@ -178,7 +348,9 @@
".": "Typ",
"all": "Alle",
"AUDIO": "Audio",
"VIDEO": "Video"
"AUDIO_STREAM": "Audio Stream",
"VIDEO": "Video",
"VIDEO_STREAM": "Video Stream"
}
},
"info": "Info",
@ -190,6 +362,10 @@
"copied": "In die Zwischenablage kopiert",
"copy": "Audio Stream Secret kopieren"
},
"share": {
".": "Freigabe",
"placeholder": "Dateiname der Freigabe"
},
"starts": "Beginn",
"stream": {
".": "Stream",
@ -201,10 +377,18 @@
".": "Typ",
"AUDIO": {
".": "Audio",
"icon": "library_music"
},
"AUDIO_STREAM": {
".": "Audio Stream",
"icon": "music_note"
},
"VIDEO": {
".": "Video",
"icon": "movie"
},
"VIDEO_STREAM": {
".": "Video Stream",
"icon": "live_tv"
}
}
@ -368,18 +552,30 @@
"text": "Deine Registrierung war erfolgreich. Du kannst dich nun einloggen!",
"title": "Registrierung abgeschlossen"
},
"token.missing": "Du benötigst leider ein gültiges Token!"
"token": {
"locked": {
".": "Benötigst einen Account um dieses Token einzulösen!",
"action": "Bitte logge dich ein."
},
"missing": {
".": "Du benötigst leider ein gültiges Token!",
"action": "Token einlösen"
}
}
},
"save": "Speichern",
"security": {
".": "Sicherheit",
"2fa": {
".": "Zwei-Faktor-Authentifizierung (2FA)",
"code": "Code",
"external": "2FA erforderlich",
"info": "Du kannst hier einen zweiten Faktor zusätzlich zu deinem Passwort hinzufügen. Beachte, dass dies nur den Login in deinen we.bstly-Account betrifft. 2FA gilt nicht für deinen E-Mail Account. Aktuell wird nur TOTP (bekannt als Google Authenticator) unterstützt.",
"invalid": "Ungültiger Code",
"keepSession": "2FA für dieses Gerät merken",
"login": "Code prüfen",
"missing": "Bitte 2FA Code angeben",
"provider": "Provider",
"totp": {
".": "2FA (TOTP)",
"activate": "Um TOTP als 2FA zu aktivieren, gebe bitte deinen aktuellen Code ein.",
@ -389,12 +585,20 @@
"external": "2FA (TOTP)",
"hint": "Um TOTP als zweiten Faktor beim Login zu verwenden, scanne den QRCode mit deiner TOTP App.",
"invalid": "TOTP Code ist ungültig",
"keepSession": "2FA (TOTP) für dieses Gerät merken",
"login": "Code verfizieren",
"missing": "Bitte TOTP Code eingeben",
"remove": "2FA (TOTP) deaktivieren"
}
},
"oidc": {
".": "OpenID Connect Login",
"alias": "Alias auswählen",
"authorize": {
".": "Authorisieren",
"hint": "Authorisiere die Application auf Teile deines Profile zuzugreifen um dich zu authentifizieren."
},
"login": "Login"
},
"status": {
".": "Status",
"change": "Status aktualisieren",
@ -432,11 +636,29 @@
"text": "Du kannst zusätzlich zu deinem Usernamen noch alternative Namen anlegen.",
"title": "Alternative Namen"
},
"bstlboard": {
"icon": "code",
"subtitle": "Message Board und Link Aggregator",
"text": "Poste Links, diskutiere, teile oder frage die Community.",
"title": "bstlboard"
},
"category": {
"we-tools": "we.bstly Tools",
"ztools": "Tools"
},
"dyndns": {
"icon": "public",
"subtitle": "Dynamischer DNS Service",
"text": "Erreiche dein Heimnetzwerk von überall aus über deine we.bstly.de-Domain",
"title": "DynDns"
},
"empty": "Du hast aktuell keine Berechtigungen zur Nutzung von Diensten.",
"funkwhale_access": {
"icon": "account_box",
"subtitle": "Funkwhale Account erstellen",
"text": "Erstelle Account für Funkwhale",
"title": "Funkwhale Account"
},
"gitea": {
"icon": "code",
"subtitle": "Git-Repositories",
@ -450,6 +672,12 @@
"text": "Hier kannst du Einladungen für die Eröffnungs-Partey erstellen.",
"title": "Partey-Einladung"
},
"invite_pubquiz": {
"icon": "sports_bar",
"subtitle": "Einladungen zum Pubquiz",
"text": "Hier kannst du Einladungen für das Pubquiz erstellen.",
"title": "Pubquiz-Einladungen"
},
"jitsi": {
"icon": "video_call",
"subtitle": "Video Konferenzen",
@ -462,6 +690,12 @@
"text": "Catch-All an @{username}.we.bstly.de, lernender Spam-Filter und PGP Verschlüsselung.",
"title": "E-Mail Postfach"
},
"mastodon": {
"icon": "rss_feed",
"subtitle": "Mikroblogging Dienst im Fediverse",
"text": "Mastodon ist eine dezentrale und datenschutzfreundliche Twitter-Alternative angesiedelt im Fediverse.",
"title": "Mastodon"
},
"matrix": {
"icon": "question_answer",
"subtitle": "Messenger Plattform",
@ -480,6 +714,12 @@
"text": "Erstelle Account(s) für Minetest",
"title": "Minetest Accounts"
},
"mobilizon": {
"icon": "event",
"subtitle": "Dezentraler Veranstaltungsmanager",
"text": "Mobilizon ist ein Werkzeug zur Erstellung und Organisation von Veranstaltungen.",
"title": "Mobilizon"
},
"monitoring": {
"icon": "check",
"subtitle": "System Status",
@ -592,10 +832,16 @@
"enter": "Token einlösen",
"get": "Mitgliedschaft",
"invalid": "Das Token ist leider nicht gültig.",
"login": "Du hast schon einen Account? Dann logge dich ein um das Token für deinem Account einzulösen.",
"loginRequired": "Für dieses Token ist ein Account erforderlich. Bitte logge dich ein um das Token für deinem Account einzulösen.",
"provide-valid": "Bitte gebe ein gültiges Token ein.",
"redeem": "Tokens einlösen",
"redeemed": "Das Token wurde bereits eingelöst.",
"validate": "Prüfen"
"register": "Du bist neu hier? Dann registriere jetzt deinen Account um das Token einzulösen.",
"validate": {
".": "Token prüfen",
"other": "Neues Token prüfen"
}
},
"urlshortener": {
".": "Urlshortener",
@ -671,6 +917,18 @@
},
"validated": "Validiert"
},
"dyndns": {
".": "DynDns",
"create": "Erstelle DynDns Token",
"new": "Erstelle neues DynDns Token",
"token": {
".": "DynDns Token",
"copied": "In die Zwischenablage kopiert",
"copy": "Token in die Zwischenablage kopieren",
"exists": "Du hast aktuell ein aktives DynDns Token. Wenn du ein neues Token generierst, wird das aktuelle Token gelöscht.",
"store": "Bitte speichere das Token sicher ab. Nach Verlassen der Seite wird es nicht mehr angezeigt."
}
},
"unavailable": {
".": "Zugriff verweigert",
"text": "Dieser Benutzer existiert nicht oder du hast keine Berechtigungen, um auf das Profil zuzugreifen."
@ -703,9 +961,15 @@
},
"vouchers": {
".": "Gutscheincodes",
"add-on": "Add-On",
"info": "Hier kannst du Gutscheincodes für Add-Ons und Registrierung generieren.",
"registration": "Registrierung",
"addon": {
".": "Add-On",
"text": "Dieser Gutscheincode ist für verschiedene Erweiterungen für deinen Account."
},
"info": "Hier kannst du verschiedene Gutscheincodes generieren.",
"registration": {
".": "Registrierung",
"text": "Dieser Gutscheincode ist für die Registrierung eines neuen Accounts."
},
"stored-safely": {
".": "Da wir keine Verbindungen von Gutscheincodes zu deinem Account speichern, speichere diesen Code bitte selber sicher ab. Falls du die Seite verlässt oder neu lädst ist der Code nicht mehr verfügbar!",
"confirm": "Ich habe den Code sicher abgespeichert!"

View File

@ -5,10 +5,92 @@
".": "Advanced"
}
},
"borrow": {
".": "Borrow",
"items": {
".": "Borrow Items",
"actions": "Actions",
"autoAccept": "Accept automatically",
"availability": {
".": "Availability",
"ALWAYS": "Always",
"MANUAL": "Manual",
"PERIOD": "Period"
},
"create": "Create new item",
"confirmDelete": "Are you sure you want to delete item '{0}'?",
"delete": "Delete Item",
"description": "Description",
"edit": "Edit Item",
"email": "Email",
"emailNotification": "Email Notifications",
"error": {
"availability": "Please select a availability.",
"description": "Please provide a valid description.",
"email": "Please provide a valid email adress.",
"name": "Please provide a name.",
"maxDuration": "Max. Duration must be greater than min. Duration.",
"minDuration": "Min. Duration must be lower than max. Duration.",
"slot": {
"end": "End must be after start.",
"endDay": "End day must be equal or after start day.",
"endTime": "End time must be after start time.",
"start": "Start must be before end.",
"startDay": "Start day must be equal or before end day.",
"startTime": "Start time must be before end time."
},
"url": "Please provide a valid url."
},
"maxDuration": "Max. Duration",
"minDuration": "Min. Duration",
"mine": "Mine",
"name": "Name",
"save": "Save Item",
"search": "Search",
"slot": {
".": "Slot",
"addManual": "Add manual slot",
"addPeriod": "Add period slot",
"day": {
".": "Day",
"MONDAY": "Monday",
"TUESDAY": "Tuesday",
"WEDNESDAY": "Wednesday",
"THURSDAY": "Thursday",
"FRIDAY": "Friday",
"SATURDAY": "Saturday",
"SUNDAY": "Sunday"
},
"delete": "Remove slot",
"end": "End date",
"endDay": "End day",
"endTime": "End time",
"MANUAL": "Manual slots",
"PERIOD": "Period slots",
"start": "Start date",
"startDay": "Start day",
"startTime": "Start time"
},
"url": "Url"
},
"proving": {
".": "Proving",
"camera": "Camera",
"flash": "Flash"
},
"requests": {
".": "Requests"
}
},
"cancel": "Cancel",
"close": "Close",
"confirm": "Confirm",
"delete": "Delete",
"durationpicker": {
"days": "Days",
"hours": "Hours",
"minutes": "Minutes"
},
"email": {
".": "Email address",
"invalid": "invalid email address",
@ -18,8 +100,8 @@
}
},
"format": {
"date": "MM/dd/yyy",
"datetime": "MM/dd/yyy h:mm a",
"date": "MM/DD/YYYY",
"datetime": "MM/DD/YYYY h:mm a",
"time": "h:mm:ss a"
},
"greet": "Hello {0}",
@ -31,6 +113,7 @@
},
"invite": {
".": "Invite",
"actions": "Actions",
"create": "Create Invite",
"expires": "Expires",
"link": "Link",
@ -43,10 +126,21 @@
},
"invites": {
".": "Invites",
"info": "You can create new invites here. To edit an invite like adding a note or change the personal invite message just click on the invite link. If you are authorized, you can change the texts directly on the invite page. Afterwards just send the same link to the person to invite or print out for an analog invite. If not authorized, a registration formular will be shown on bottom of page.",
"edit": {
".": "Edit Invite",
"save": "Save Invite"
},
"info": "You can create new invites here. To edit an invite like adding a note or change the personal invite message just click on the edit button. If you are authorized, you can also change the texts directly on the invite page. Afterwards just send the same link to the person to invite. If not authorized, a registration formular will be shown on bottom of page.",
"left": "You have {0} invites left.",
"noQuota": "Your quota for invites is depleted.",
"others": "Other's invites",
"quota": {
"pubquiz": {
".": "Pubquiz",
"icon": "quiz",
"text": "Invite to Pubquiz."
}
},
"redeemed": {
"filter": {
".": "Filter redeemed status",
@ -55,6 +149,22 @@
"true": "Redeemed"
}
},
"register": {
".": "Redeem Invite",
"error": {
"ALREADY_REDEEMED": "The provided code is already redeemed!",
"EXPIRED": "The provided code is expired!",
"INVALID_CODE": "The provided code is invalid.",
"NO_CODE": "No code provided!"
},
"login": "Login",
"success": {
".": "Finished registration",
"text": "Successfully registered your Account. You can login now!"
},
"time": "Invite valid from {0} till {1}",
"url": "More information"
},
"search": "Search"
},
"jitsi": {
@ -104,6 +214,32 @@
}
}
},
"jukebox": {
".": "Jukebox",
"addToQueue": {
".": "Add to queue",
"confirm": "Add '{0} - {1}' to queue?",
"error": "Error",
"success": "Sucess"
},
"current": "Current track",
"forbidden": {
".": "Forbidden",
"hint": "You are not allowed to use the Jukebox."
},
"search": {
".": "Search",
"icon": "search",
"more": "Show more",
"submit": "Submit"
},
"timeout": "Please wait {0} seconds before next request.",
"unavailable": {
".": "unavailable",
"hint": "Currently the Jukebox is turned off."
},
"wait": "Please wait."
},
"locale": {
"de-informal": {
"long": "Deutsch",
@ -142,8 +278,40 @@
"text": "This page was not found."
},
"ok": "Ok",
"paginator": {
"empty": "No results",
"firstPage": "first page",
"itemsPerPage": "items per page:",
"lastPage": "last page",
"nextPage": "next page",
"previousPage": "previous page",
"range": "page {0} of {1}"
},
"partey": {
".": "Partey",
"tag": {
".": "Partey Tag",
"access-storage": {
".": "Access Storage",
"hint": "Access to storage room in ground floor."
},
"admin": {
".": "Administrator",
"hint": "Send room messages."
},
"cinema-mod": {
".": "Cinema Moderator",
"hint": "In cinema: Enter stage, set stream url, moderate chat room."
},
"disco-mod": {
".": "Disco Moderator",
"hint": "In cinema: Enter stage, change stage layer, moderate chat room."
},
"game-mod": {
".": "Game Moderator",
"hint": "In game room: Set table label, moderate chat room."
}
},
"tags": {
".": "Partey Tags",
"none": "None"
@ -154,7 +322,9 @@
"create": {
".": "Create new Timeslot",
"AUDIO": "New Audio Timeslot",
"VIDEO": "New Video Timeslot"
"AUDIO_STREAM": "New Audio Stream Timeslot",
"VIDEO": "New Video Timeslot",
"VIDEO_STREAM": "New Video Stream Timeslot"
},
"delete": "Delete",
"description": "Description",
@ -178,7 +348,9 @@
".": "Type",
"all": "All",
"AUDIO": "Audio",
"VIDEO": "Video"
"AUDIO_STREAM": "Audio Stream",
"VIDEO": "Video",
"VIDEO_STREAM": "Video Stream"
}
},
"info": "You can create new timeslots for Partey here. The number is limited due to a quota.",
@ -190,6 +362,10 @@
"copied": "Copied to clipboard",
"copy": "Copy Audio Stream Secret"
},
"share": {
".": "Share",
"placeholder": "Filename of share"
},
"starts": "Starts",
"stream": {
".": "Stream",
@ -201,10 +377,18 @@
".": "Type",
"AUDIO": {
".": "Audio",
"icon": "library_music"
},
"AUDIO_STREAM": {
".": "Audio Stream",
"icon": "music_note"
},
"VIDEO": {
".": "Video",
"icon": "movie"
},
"VIDEO_STREAM": {
".": "Video Stream",
"icon": "live_tv"
}
}
@ -279,6 +463,9 @@
"DATE": {
".": "Invalid date"
},
"DATETIME": {
".": "Invalid date or time"
},
"EMAIL": {
".": "Invalid email address"
},
@ -317,6 +504,9 @@
"DATE": {
".": "Date"
},
"DATETIME": {
".": "Date with time"
},
"EMAIL": {
".": "Email"
},
@ -356,18 +546,30 @@
"text": "Successfully registered your Account. You can login now!",
"title": "Finished registration"
},
"token.missing": "You need a valid token!"
"token": {
"locked": {
".": "You need an account to redeem this token!",
"action": "Please login."
},
"missing": {
".": "You need a valid token!",
"action": "Provide token"
}
}
},
"save": "Save",
"security": {
".": "Security",
"2fa": {
".": "Two-Factor-Authentication (2FA)",
"code": "Code",
"external": "2FA required",
"info": "You can additionally add a second factor to your password. Please keep in mind, that this only affects your we.bstly-Account and not your email login. Currently only TOTP (also known as Google Authenticator) is supported as 2FA method.",
"invalid": "Invalid code",
"keepSession": "Remember 2FA for this device",
"login": "Verify code",
"missing": "Please enter 2FA code",
"provider": "Provider",
"totp": {
".": "2FA (TOTP)",
"activate": "Please enter your current code to enable TOTP as your 2FA.",
@ -375,10 +577,18 @@
"create": "2FA (TOTP) create",
"enable": "Enable 2FA (TOTP)",
"hint": "To use TOP as second factor, please scan the shown QR-Code with your TOTP App.",
"keepSession": "Remember 2FA (TOTP) for this device",
"remove": "Disable 2FA (TOTP)"
}
},
"oidc": {
".": "OpenID Connect Login",
"alias": "Choose alias",
"authorize": {
".": "Authorize",
"hint": "Authorize this application to access parts of your profile for authentication."
},
"login": "Login"
},
"status": {
".": "Status",
"change": "Change status",
@ -416,11 +626,29 @@
"text": "You can add additional aliases besides your username.",
"title": "Aliases"
},
"bstlboard": {
"icon": "code",
"subtitle": "message board and link aggregator",
"text": "Post links, discuss, share or ask the community.",
"title": "bstlboard"
},
"category": {
"we-tools": "we.bstly tools",
"ztools": "Tools"
},
"dyndns": {
"icon": "public",
"subtitle": "Dynamic DNS Service",
"text": "Reach your home-network from everywhere with your we.bstly.de-domain",
"title": "DynDns"
},
"empty": "You have insufficient permissions to use any services.",
"funkwhale_access": {
"icon": "account_box",
"subtitle": "Funkwhale account creation",
"text": "Create Account for Funkwhale",
"title": "Funkwhale Account"
},
"gitea": {
"icon": "code",
"subtitle": "Git-Repositories",
@ -434,6 +662,12 @@
"text": "Create Invites for Opening Partey.",
"title": "Partey-Invites"
},
"invite_pubquiz": {
"icon": "sports_bar",
"subtitle": "Invite to Pubquiz",
"text": "Create Invites for Pubquiz.",
"title": "Pubquiz-Invites"
},
"jitsi": {
"icon": "video_call",
"subtitle": "Video conferencing",
@ -446,6 +680,12 @@
"text": "Catch-All to @{username}.we.bstly.de, learning spam-filter and PGP encryption.",
"title": "Email Account"
},
"mastodon": {
"icon": "rss_feed",
"subtitle": "federated microblogging service",
"text": "Mastodon is a Twitter-like plattform, but as part of the fediverse a privacy, decentralized alternative.",
"title": "Mastodon"
},
"matrix": {
"icon": "question_answer",
"subtitle": "Messenger",
@ -464,6 +704,12 @@
"text": "Create Account(s) for Minetest",
"title": "Minetest Accounts"
},
"mobilizon": {
"icon": "event",
"subtitle": "federated event manager",
"text": "Mobilizon is a tool that for creating and organizing events.",
"title": "Mobilizon"
},
"monitoring": {
"icon": "check",
"subtitle": "System Status",
@ -576,10 +822,16 @@
"enter": "Enter token",
"get": "Membership",
"invalid": "The provided token is invalid.",
"login": "You already have an account? Please login to redeem token with your account.",
"loginRequired": "You need an Account for this token. Please login to redeem token with your account.",
"provide-valid": "Please provide a valid token.",
"redeem": "Redeem token",
"redeemed": "The provided token has already been redeemed.",
"validate": "Validate"
"register": "New here and need an account? Register a new account to redeem token.",
"validate": {
".": "Validate token",
"other": "Valiate new token"
}
},
"urlshortener": {
".": "Urlshortener",
@ -654,6 +906,18 @@
},
"validated": "Validated"
},
"dyndns": {
".": "DynDns",
"create": "Create DynDns Token",
"new": "Create new DynDns Token",
"token": {
".": "DynDns Token",
"copied": "Copied to clipboard",
"copy": "Copy Token to clipboard",
"exists": "You currently have an active Token. If you create a new token, the old one will be deleted.",
"store": "Please store this token carefully. It will not be available after leaving this site."
}
},
"unavailable": {
".": "Access denied",
"text": "The provided user does not exists or you have insufficient privileges to access profile."
@ -686,9 +950,15 @@
},
"vouchers": {
".": "Vouchers",
"add-on": "Add-On",
"info": "Generate vouchers for Add-Ons and registration.",
"registration": "Registration",
"addon": {
".": "Add-On",
"text": "This voucher is for different extension of your account."
},
"info": "Generate different vouchers.",
"registration": {
".": "Registration",
"text": "This voucher is for a registration of a new account."
},
"stored-safely": {
".": "Please store the provided voucher code securely, since we do not store any relation of vouchers to your account. If you leave page or reload the code won't be shown up again!",
"confirm": "I securely stored the given voucher!"