This commit is contained in:
Philipp Dormann 2024-12-02 12:56:43 +01:00
parent 0acda07eb5
commit 048edfba89
Signed by: philipp
GPG Key ID: 3BB9ADD52DCA4314
8 changed files with 88 additions and 55 deletions

View File

@ -3,5 +3,8 @@
"src/locales"
],
"i18n-ally.keystyle": "nested",
"i18n-ally.extract.keygenStyle": "snake_case"
"i18n-ally.extract.keygenStyle": "snake_case",
"i18n-ally.enabledFrameworks": [
"vue"
]
}

View File

@ -1,5 +1,6 @@
{
"access_is_only_provided_via_your_email_link": "Der Zugang erfolgt über den Link, den Sie bei der Registrierung erhalten haben.",
"already_registered": "bereits registriert...",
"amount_per_kilometer_in_eur": "Betrag pro Kilometer (in €)",
"apartment_suite_etc": "Addresszeile 2",
"buergerlauf": "Bürgerlauf",
@ -14,12 +15,16 @@
"download_registrationcode": "Registrierungscode herunterladen",
"e_mail_adress": "E-Mail Adresse",
"error-loading-privacy-policy": "Fehler beim Laden der Datenschutzerklärung",
"error_requesting_the_login_link": "Fehler beim Anfordern des Login-Links...",
"i_accept": "Ich habe die ",
"i_accept_end": "gelesen und akzeptiert.",
"if_you_are_the_system_administrator_please_refer_to_the_official_product_documentation_readme_for_configuration_guidance": "Wenn Sie der Systemadministrator sind, finden Sie Konfigurationsanweisungen in der offiziellen Produktdokumentation / README.",
"imprint": "Impressum",
"invalid_input_phone_number_should_be_international_format": "ungültige Eingabe... Die Telefonnummer sollte ein internationales Format haben",
"lap_time": "Rundenzeit",
"lap_times": "Rundenzeiten",
"login_link_gesendet_an_user_email_value": "Login-Link gesendet an",
"login_link_is_requested": "Login-Link wird angefordert...",
"lost_your_registration_mail": "Brauchen Sie einen neuen Login-Link?",
"main_page_text": "Hier können Sie sich für den Lauf Für Kaya! registrieren oder ihr Läuferprofil verwalten.",
"mittelname": "Mittelname",
@ -29,7 +34,7 @@
"not_registered_yet": "Noch nicht registriert?",
"organization": "Organisation",
"ort": "Ort",
"phone_number": "Telefonnummer",
"phone_number": "Telefonnummer (international formatiert)",
"please_provide_a_valid_zipcode": "Bitte geben Sie eine gültige Postleitzahl an...",
"please_provide_valid_mail": "Bitte geben Sie eine gültige E-Mail Adresse an",
"plz": "PLZ",
@ -44,6 +49,7 @@
"registration_running": "Registrierung läuft...",
"registrationcode": "Registrierungscode",
"registrieren": "Registrieren",
"registriert": "Registriert",
"resend_the_registration_mail": "Login-Link anfordern",
"sponsoring": "Sponsoring",
"strasse": "Straße",

View File

@ -1,5 +1,7 @@
{
"access_is_only_provided_via_your_email_link": "Access is only provided via the link you received upon registration.",
"alle_daten_geloescht": "Alle Daten gelöscht!",
"already_registered": "already registered...",
"amount_per_kilometer_in_eur": "Amount per kilometer (in €)",
"apartment_suite_etc": "Apartment, suite, etc.",
"buergerlauf": "Public Run",
@ -14,12 +16,17 @@
"download_registrationcode": "Download registrationcode",
"e_mail_adress": "mail address",
"error-loading-privacy-policy": "Error loading Privacy Policy",
"error_loading_imprint": "Error loading Imprint",
"error_requesting_the_login_link": "Error requesting the login link...",
"i_accept": "I have read and accepted the ",
"i_accept_end": "",
"if_you_are_the_system_administrator_please_refer_to_the_official_product_documentation_readme_for_configuration_guidance": "If you are the system administrator, please refer to the official product documentation/ README for configuration guidance.",
"imprint": "Imprint",
"invalid_input_phone_number_should_be_international_format": "invalid input... phone number should be international format",
"lap_time": "Lap time",
"lap_times": "Lap times",
"login_link_gesendet_an_user_email_value": "Login-Link sent to",
"login_link_is_requested": "Login link is requested...",
"lost_your_registration_mail": "Lost your registration mail?",
"main_page_text": "Here you can register for the Lauf Für Kaya! or manage your runner profile.",
"mittelname": "Middlename",
@ -29,11 +36,14 @@
"not_registered_yet": "Not registered yet?",
"organization": "Organization",
"ort": "City",
"phone_number": "Phone Number",
"phone_number": "Phone Number (international format)",
"please_provide_a_valid_zipcode": "Please provide a valid zipcode...",
"please_provide_valid_mail": "Please provide a valid mail address.",
"plz": "zipcode",
"privacy_policy": "Privacy Policy",
"profil_konnte_nicht_geladen_werden": "Profil konnte nicht geladen werden...",
"profil_konnte_nicht_geloescht_werden": "Profil konnte nicht gelöscht werden...",
"profil_wird_geloescht": "Profil wird gelöscht...",
"profile": "Profile",
"provide_address": "Provide a postal address?",
"register": {
@ -44,12 +54,17 @@
"registration_running": "registration is running...",
"registrationcode": "Registration Code",
"registrieren": "Register Now",
"registriert": "Registered",
"registrierungscode_generiert": "Registrierungscode generiert!",
"registrierungscode_wird_generiert": "Registrierungscode wird generiert...",
"resend_the_registration_mail": "Send me a login link",
"sponsoring": "Sponsoring",
"strasse": "Street/ Block",
"the_system_is_not_properly_configured_please_contact_the_system_administrator_for_help": "The system is not properly configured. Please contact the system administrator for help.",
"this_is_not_a_valid_international_phone_number": "This is not a valid international phone number",
"total": "Total",
"urkunde_konnte_nicht_generiert_werden": "Urkunde konnte nicht generiert werden...",
"urkunde_wird_generiert": "Urkunde wird generiert...",
"view_my_data": "View my data",
"vorname": "Firstname"
}

View File

@ -24,5 +24,4 @@
<script setup>
import background_base64 from "../assets/background.jpg?inline";
import Footer from "@/components/Footer.vue";
console.log(config);
</script>

View File

@ -31,7 +31,7 @@ export default {
try {
md = await fetch(`/imprint_en.md`);
} catch (error) {
md = "Error loading Imprint";
md = t('error_loading_imprint');
}
}
this.content = marked(await md.text());

View File

@ -475,6 +475,8 @@ import { TYPE, useToast } from "vue-toastification";
import axios from "redaxios";
import bwipjs from "bwip-js";
import Footer from "@/components/Footer.vue";
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
function textToBase64Barcode(text) {
const canvas = document.createElement("canvas");
@ -531,7 +533,7 @@ axios
})
.catch((error) => {
toast.clear();
toast.error("Profil konnte nicht geladen werden...");
toast.error(t('profil_konnte_nicht_geladen_werden'));
});
axios
.get(`${config.baseurl}api/runners/me/${accesstoken}/scans`)
@ -553,26 +555,26 @@ axios
state.scans = data;
})
.catch((error) => {
toast.error("Profil konnte nicht geladen werden...");
toast.error(t('profil_konnte_nicht_geladen_werden'));
});
function delete_me() {
toast.clear();
toast("Profil wird gelöscht...");
toast(t('profil_wird_geloescht'));
let url = `${config.baseurl}api/runners/me/${accesstoken}?force=true`;
axios
.delete(url)
.then(() => {
toast.clear();
toast("Alle Daten gelöscht!");
toast(t('alle_daten_geloescht'));
location.replace(`${config.baseurl_selfservice}`);
})
.catch((error) => {
toast.clear();
toast.error("Profil konnte nicht gelöscht werden...");
toast.error(t('profil_konnte_nicht_geloescht_werden'));
});
}
function get_certificate() {
toast("Urkunde wird generiert...");
toast(t('urkunde_wird_generiert'));
const browserlocale = (
(navigator.languages && navigator.languages[0]) ||
""
@ -590,7 +592,7 @@ function get_certificate() {
.then((response) => {
console.log(response);
if (response.status != "200") {
toast.error("Urkunde konnte nicht generiert werden...");
toast.error(t('urkunde_konnte_nicht_generiert_werden'));
} else {
var fileURL = window.URL.createObjectURL(
new Blob([response.data], { type: "application/pdf" })
@ -610,17 +612,17 @@ function get_certificate() {
.catch((err) => {
console.error(err);
toast.clear();
toast.error("Urkunde konnte nicht generiert werden...");
toast.error(t('urkunde_konnte_nicht_generiert_werden'));
});
}
function get_registration() {
toast.clear();
toast("Registrierungscode wird generiert...");
toast(t('registrierungscode_wird_generiert'));
var a = document.createElement("a");
a.href = state.barcode;
a.download = "LfK25_Registrierungscode.png";
a.click();
toast.clear();
toast("Registrierungscode generiert!", { type: TYPE.SUCCESS });
toast(t('registrierungscode_generiert'), { type: TYPE.SUCCESS });
}
</script>

View File

@ -63,6 +63,8 @@ import axios from "redaxios";
import isEmail from 'validator/es/lib/isEmail';
import { TYPE, useToast } from "vue-toastification";
import Footer from "@/components/Footer.vue";
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
let user_email = ref("");
//
@ -74,16 +76,16 @@ const state = reactive({
const toast = useToast();
function resendMail() {
if (isEmail(user_email.value)) {
toast("Login-Link wird angefordert...");
toast(t('login_link_is_requested'));
const browserlocale = ((navigator.languages && navigator.languages[0]) || '').substr(0, 2);
axios.post(`${config.baseurl}api/runners/login?mail=${user_email.value}&locale=${browserlocale}`)
.then(({ data }) => {
console.log(data);
toast("Login-Link gesendet an " + user_email.value + "!");
toast(t('login_link_gesendet_an_user_email_value') + user_email.value);
})
.catch((error) => {
console.log(error);
toast("Fehler beim Anfordern des Login-Links...", { type: TYPE.ERROR });
toast(t('error_requesting_the_login_link'), { type: TYPE.ERROR });
});
}
}

View File

@ -3,7 +3,7 @@
<div class="max-w-md w-full py-12 px-6">
<img class="mx-auto h-24 w-auto" src="/favicon-lfk.png" alt />
<h1 class="sm:text-3xl text-2xl font-medium title-font mb-4 text-center">
Lauf für Kaya! - Registriert
Lauf für Kaya! - {{ $t('registriert') }}
</h1>
<p class="mx-auto leading-relaxed text-base text-center">
Bitte klicken Sie zum Fortfahren auf den Link, den wir an
@ -439,7 +439,13 @@ function login() {
.catch((error) => {
console.log(error);
if (error.data.message === "E-Mail already registered") {
toast("bereits registriert...", { type: TYPE.ERROR });
toast(t('already_registered'), { type: TYPE.ERROR });
} else if (error.data.message === "Invalid body, check 'errors' property for more info.") {
error.data.errors.forEach(e => {
if (e.property === "phone") {
toast(t('invalid_input_phone_number_should_be_international_format'), { type: TYPE.ERROR });
}
});
}
});
}