feat(bisaya-course): enhance German course content and localization support
All checks were successful
Deploy to production / deploy (push) Successful in 2m47s

- Updated the create-german-for-bisaya-course-content.js script to improve lesson pattern retrieval by introducing a new function for generating a lesson pattern pool.
- Added new exercises for various topics including 'Wohnung & Nachbarn', 'Besuch empfangen', 'Arzt, Apotheke, Termin', and 'Amt, Dokumente, Anmeldung', enhancing practical language skills for learners.
- Improved localization by integrating translation keys for various UI elements and error messages across multiple components, ensuring a consistent user experience in both German and Bisaya.
- Enhanced the main.js file to recognize Bisaya language preferences in browser settings, improving accessibility for users.
This commit is contained in:
Torsten Schulz (local)
2026-03-31 17:40:03 +02:00
parent b1990334b9
commit c6caeefb5f
49 changed files with 3468 additions and 262 deletions

View File

@@ -4,8 +4,8 @@
<div class="form-field">
<label for="password-reset-email">{{ $t("passwordReset.email") }}</label>
<input id="password-reset-email" type="email" v-model="email" required :class="{ 'field-error': emailTouched && !isEmailValid }" />
<span class="form-hint">Wir senden den Link an die hinterlegte E-Mail-Adresse.</span>
<span v-if="emailTouched && !isEmailValid" class="form-error">Bitte eine gültige E-Mail-Adresse eingeben.</span>
<span class="form-hint">{{ $t("passwordReset.emailHint") }}</span>
<span v-if="emailTouched && !isEmailValid" class="form-error">{{ $t("passwordReset.validation.invalidEmail") }}</span>
</div>
</div>
</DialogWidget>

View File

@@ -6,23 +6,23 @@
<div class="form-field">
<label for="register-email">{{ $t("register.email") }}</label>
<input id="register-email" type="email" v-model="email" :class="{ 'field-error': emailTouched && !isEmailValid }" />
<span v-if="emailTouched && !isEmailValid" class="form-error">Bitte eine gültige E-Mail-Adresse eingeben.</span>
<span v-if="emailTouched && !isEmailValid" class="form-error">{{ $t("register.validation.invalidEmail") }}</span>
</div>
<div class="form-field">
<label for="register-username">{{ $t("register.username") }}</label>
<input id="register-username" type="text" v-model="username" :class="{ 'field-error': usernameTouched && !isUsernameValid }" />
<span v-if="usernameTouched && !isUsernameValid" class="form-error">Der Benutzername sollte mindestens 3 Zeichen haben.</span>
<span v-if="usernameTouched && !isUsernameValid" class="form-error">{{ $t("register.validation.usernameTooShort") }}</span>
</div>
<div class="form-field">
<label for="register-password">{{ $t("register.password") }}</label>
<input id="register-password" type="password" v-model="password" :class="{ 'field-error': passwordTouched && !isPasswordValid }" />
<span class="form-hint">Mindestens 8 Zeichen.</span>
<span v-if="passwordTouched && !isPasswordValid" class="form-error">Das Passwort ist noch zu kurz.</span>
<span class="form-hint">{{ $t("register.validation.passwordHint") }}</span>
<span v-if="passwordTouched && !isPasswordValid" class="form-error">{{ $t("register.validation.passwordTooShort") }}</span>
</div>
<div class="form-field">
<label for="register-repeat-password">{{ $t("register.repeatPassword") }}</label>
<input id="register-repeat-password" type="password" v-model="repeatPassword" :class="{ 'field-error': repeatPasswordTouched && !doPasswordsMatch }" />
<span v-if="repeatPasswordTouched && !doPasswordsMatch" class="form-error">Die Passwörter stimmen nicht überein.</span>
<span v-if="repeatPasswordTouched && !doPasswordsMatch" class="form-error">{{ $t("register.passwordMismatch") }}</span>
</div>
<SelectDropdownWidget labelTr="settings.personal.label.language" :v-model="language"
tooltipTr="settings.personal.tooltip.language" :list="languages" :value="language" />
@@ -104,7 +104,9 @@ export default {
async getBrowserLanguage() {
const browserLanguage = navigator.language || navigator.languages[0];
let short = '';
if (browserLanguage.startsWith('de')) {
if (browserLanguage.startsWith('ceb') || browserLanguage.startsWith('bis')) {
short = 'ceb';
} else if (browserLanguage.startsWith('de')) {
short = 'de';
} else {
short = 'en';