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

@@ -947,6 +947,14 @@ export default {
return;
}
this.activeTab = 'exercises';
this.$nextTick(() => {
const scrollEl = document.querySelector('.app-content__scroll.contentscroll');
if (scrollEl) {
scrollEl.scrollTop = 0;
} else {
window.scrollTo(0, 0);
}
});
},
updateExerciseUnlockState() {
if (this.exercisePreparationCompleted) {
@@ -2353,10 +2361,12 @@ export default {
.btn-back {
padding: 8px 16px;
border: 1px solid #ddd;
border: 1px solid var(--color-border);
border-radius: 4px;
background: white;
background: rgba(255, 255, 255, 0.92);
color: var(--color-text-primary);
cursor: pointer;
box-shadow: none;
}
.lesson-description {
@@ -2447,18 +2457,20 @@ export default {
.exercise-item button {
padding: 10px 20px;
background: #4CAF50;
color: white;
border: none;
background: var(--color-primary);
color: #2b1f14;
border: 1px solid transparent;
border-radius: 4px;
cursor: pointer;
font-size: 1em;
margin-top: 10px;
transition: background-color 0.2s;
transition: background-color 0.2s, box-shadow 0.2s;
box-shadow: 0 6px 14px rgba(248, 162, 43, 0.18);
}
.exercise-item button:hover:not(:disabled) {
background: #45a049;
background: var(--color-primary-hover);
box-shadow: 0 10px 18px rgba(248, 162, 43, 0.22);
}
.exercise-item button:disabled {
@@ -2513,24 +2525,26 @@ export default {
.tab-button {
padding: 10px 20px;
border: none;
background: transparent;
border: 1px solid transparent;
background: rgba(255, 255, 255, 0.72);
cursor: pointer;
font-size: 1em;
color: #666;
color: var(--color-text-secondary);
border-bottom: 2px solid transparent;
margin-bottom: -2px;
transition: all 0.2s;
box-shadow: none;
}
.tab-button:hover:not(:disabled) {
color: #333;
background: #f5f5f5;
color: var(--color-text-primary);
background: rgba(255, 255, 255, 0.92);
}
.tab-button.active {
color: #007bff;
border-bottom-color: #007bff;
color: #2b1f14;
background: var(--color-primary);
border-bottom-color: var(--color-primary);
font-weight: bold;
}
@@ -2687,17 +2701,18 @@ export default {
.btn-start-trainer {
padding: 10px 20px;
background: #4CAF50;
color: white;
border: none;
background: var(--color-primary);
color: #2b1f14;
border: 1px solid transparent;
border-radius: 4px;
cursor: pointer;
font-size: 1em;
margin-top: 10px;
box-shadow: 0 6px 14px rgba(248, 162, 43, 0.18);
}
.btn-start-trainer:hover {
background: #45a049;
background: var(--color-primary-hover);
}
.vocab-trainer-stats {
@@ -2733,8 +2748,8 @@ export default {
}
.mode-badge.mode-active {
background: #007bff;
color: white;
background: var(--color-primary);
color: #2b1f14;
font-weight: bold;
}
@@ -2745,16 +2760,16 @@ export default {
.btn-stop-trainer {
padding: 5px 15px;
background: #dc3545;
background: rgba(177, 59, 53, 0.92);
color: white;
border: none;
border: 1px solid transparent;
border-radius: 4px;
cursor: pointer;
font-size: 0.9em;
}
.btn-stop-trainer:hover {
background: #c82333;
background: var(--color-danger-hover);
}
.vocab-question {
@@ -2802,20 +2817,20 @@ export default {
.btn-switch-mode {
padding: 8px 16px;
background: var(--color-primary-orange);
color: #000000;
border: 1px solid var(--color-primary-orange);
background: rgba(255, 255, 255, 0.92);
color: var(--color-text-primary);
border: 1px solid var(--color-border);
border-radius: 4px;
cursor: pointer;
font-size: 0.9em;
font-weight: 500;
transition: background 0.05s;
transition: background 0.2s, border-color 0.2s;
box-shadow: none;
}
.btn-switch-mode:hover {
background: var(--color-primary-orange-light);
color: var(--color-text-secondary);
border: 1px solid var(--color-text-secondary);
background: rgba(255, 255, 255, 0.98);
border: 1px solid var(--color-border-strong);
}
.vocab-answer-area.multiple-choice {
@@ -2842,14 +2857,14 @@ export default {
}
.choice-button:hover {
border-color: #007bff;
background: #f0f8ff;
border-color: var(--color-primary);
background: rgba(248, 162, 43, 0.08);
}
.choice-button.selected {
border-color: #007bff;
background: #007bff;
color: white;
border-color: var(--color-primary);
background: var(--color-primary);
color: #2b1f14;
}
.vocab-input {
@@ -2862,16 +2877,16 @@ export default {
.btn-check {
padding: 10px 20px;
background: #4CAF50;
color: white;
border: none;
background: var(--color-primary);
color: #2b1f14;
border: 1px solid transparent;
border-radius: 4px;
cursor: pointer;
font-size: 1em;
}
.btn-check:hover:not(:disabled) {
background: #45a049;
background: var(--color-primary-hover);
}
.btn-check:disabled {
@@ -2903,16 +2918,16 @@ export default {
.vocab-next button {
padding: 10px 20px;
background: #007bff;
color: white;
border: none;
background: var(--color-primary);
color: #2b1f14;
border: 1px solid transparent;
border-radius: 4px;
cursor: pointer;
font-size: 1em;
}
.vocab-next button:hover {
background: #0056b3;
background: var(--color-primary-hover);
}
.vocab-info-text {
@@ -2936,9 +2951,9 @@ export default {
.btn-continue {
padding: 12px 24px;
background: #007bff;
color: white;
border: none;
background: var(--color-primary);
color: #2b1f14;
border: 1px solid transparent;
border-radius: 4px;
font-size: 1.1em;
cursor: pointer;
@@ -2946,7 +2961,7 @@ export default {
}
.btn-continue:hover {
background: #0056b3;
background: var(--color-primary-hover);
}
/* Reading Aloud & Speaking From Memory Styles */
@@ -2981,12 +2996,12 @@ export default {
}
.btn-record {
background: #28a745;
color: white;
background: var(--color-primary);
color: #2b1f14;
}
.btn-record:hover:not(:disabled) {
background: #218838;
background: var(--color-primary-hover);
}
.btn-record:disabled {
@@ -2995,26 +3010,26 @@ export default {
}
.btn-stop-record {
background: #dc3545;
background: rgba(177, 59, 53, 0.92);
color: white;
}
.btn-stop-record:hover {
background: #c82333;
background: var(--color-danger-hover);
}
.btn-check {
padding: 10px 20px;
background: #007bff;
color: white;
border: none;
background: var(--color-primary);
color: #2b1f14;
border: 1px solid transparent;
border-radius: 6px;
cursor: pointer;
margin-top: 15px;
}
.btn-check:hover {
background: #0056b3;
background: var(--color-primary-hover);
}
.recording-status {
@@ -3150,16 +3165,16 @@ export default {
.dialog-button {
padding: 8px 16px;
background: #007bff;
color: white;
border: none;
background: var(--color-primary);
color: #2b1f14;
border: 1px solid transparent;
border-radius: 4px;
cursor: pointer;
font-size: 1em;
}
.dialog-button:hover {
background: #0056b3;
background: var(--color-primary-hover);
}
@media (max-width: 900px) {