update(Accessability changes):adds aria-label to empty buttons and more accessability changes

This commit is contained in:
SimonGschnell
2025-07-02 14:35:07 +02:00
parent bf1dac3fd9
commit 5ddc4749fa
13 changed files with 532 additions and 33 deletions
+3 -1
View File
@@ -46,7 +46,9 @@
flex-direction: column;
column-gap: 5px;
overflow-y: scroll;
min-height:0;
height: 100%;
min-height:auto;
justify-content: space-evenly;
}
+31 -5
View File
@@ -27,13 +27,39 @@ export default {
'next',
'click'
],
methods:{
modeAriaLabelText(mode) {
switch (mode.toLowerCase()) {
case "day": return this.$p.t('LvPlan', 'modeDay');
case "week": return this.$p.t('LvPlan', 'modeWeek');
case "month": return this.$p.t('LvPlan', 'modeMonth');
}
},
},
computed: {
getHeaderClassSide() {
return this.containerWidth > 780 ? 'col-3' : 'col-12'
},
getHeaderClassMiddle() {
return this.containerWidth > 780 ? 'col-6' : 'col-12'
}
},
previousButtonAriaLabelText(){
switch(this.mode.toLowerCase()){
case "day": return this.$p.t('LvPlan', 'previousDay');
case "week": return this.$p.t('LvPlan', 'previousWeek');
case "weeks": return this.$p.t('LvPlan', 'previousYear');
case "month": return this.$p.t('LvPlan', 'previousMonth');
}
},
nextButtonAriaLabelText() {
switch (this.mode.toLowerCase()) {
case "day": return this.$p.t('LvPlan', 'nextDay');
case "week": return this.$p.t('LvPlan', 'nextWeek');
case "weeks": return this.$p.t('LvPlan', 'nextYear');
case "month": return this.$p.t('LvPlan', 'nextMonth');
}
},
},
template: /*html*/`
<div class="calendar-header card-header w-100">
@@ -44,7 +70,7 @@ export default {
<div :class="getHeaderClassMiddle" :style="{'padding-left':headerPadding}">
<div class="row align-items-center justify-content-center">
<div class="col-auto p-2">
<button class="btn btn-outline-secondary border-0" :class="{'btn-sm':!this.size}" @click="$emit('prev')"><i class="fa fa-chevron-left"></i></button>
<button class="btn btn-outline-secondary border-0" :class="{'btn-sm':!this.size}" @click="$emit('prev')" v-tooltip.top="{ value: previousButtonAriaLabelText, showDelay: 1000}" :aria-label="previousButtonAriaLabelText"><i class="fa fa-chevron-left" aria-hidden="true"></i></button>
</div>
<div class="justify-content-center text-center col-auto">
<div class="d-flex justify-content-center align-items-center">
@@ -55,15 +81,15 @@ export default {
</div>
</div>
<div class="col-auto p-2">
<button class="btn btn-outline-secondary border-0" :class="{'btn-sm': !this.size}" @click="$emit('next')"><i class="fa fa-chevron-right"></i></button>
<button class="btn btn-outline-secondary border-0" :class="{'btn-sm': !this.size}" @click="$emit('next')" v-tooltip.top="{value:nextButtonAriaLabelText, showDelay:1000}" :aria-label="previousButtonAriaLabelText"><i class="fa fa-chevron-right" aria-hide="true"></i></button>
</div>
</div>
</div>
<div ref="viewButtons" v-if="!noWeekView && !noMonthView" :class="getHeaderClassSide" class="d-flex justify-content-center justify-content-md-end align-items-center" style="pointer-events: none;">
<div style="pointer-events: all;">
<div role="group" aria-label="Kalender Modus">
<button type="button" :class="{'active':mode_kurzbz.toLowerCase() === mode.toLowerCase()}" style="margin-right: 4px;" @click.prevent="$emit('updateMode',mode_kurzbz)" class="btn btn-outline-secondary" v-for="({mode_bezeichnung,icon,condition},mode_kurzbz) in modes">
<i v-if="condition" class="fa" :class="icon" ></i>
<button :aria-label="modeAriaLabelText(mode_bezeichnung)" v-tooltip.top="{value:modeAriaLabelText(mode_bezeichnung), showDelay:1000}" type="button" :class="{'active':mode_kurzbz.toLowerCase() === mode.toLowerCase()}" style="margin-right: 4px;" @click.prevent="$emit('updateMode',mode_kurzbz)" class="btn btn-outline-secondary" v-for="({mode_bezeichnung,icon,condition},mode_kurzbz) in modes">
<i aria-hidden="true" v-if="condition" class="fa" :class="icon" ></i>
</button>
</div>
</div>
+1 -1
View File
@@ -326,7 +326,7 @@ export default {
<div class="fhc-calendar-week-page-header d-grid border-2 border-bottom text-center" :style="pageHeaderStyle" >
<div type="button" v-for="day in days" :key="day" class="flex-grow-1" :title="dayText[day]?.heading" @click.prevent="changeToDay(day)">
<div class="fw-bold">{{dayText[day]?.tag}}</div>
<a href="#" class="small text-secondary text-decoration-none" >{{dayText[day]?.datum}}</a>
<a href="#" class="small text-muted text-decoration-none" >{{dayText[day]?.datum}}</a>
</div>
</div>
<div ref="eventcontainer" class="position-relative flex-grow-1" >
+2 -2
View File
@@ -316,9 +316,9 @@ const LvPlan = {
>
<template #calendarDownloads>
<div v-for="{title,icon,link} in downloadLinks">
<a :href="link" :title="title" class="py-1 px-2 m-1 btn btn-outline-secondary">
<a :href="link" :aria-label="title" class="py-1 px-2 m-1 btn btn-outline-secondary">
<div class="d-flex flex-column">
<i :class="icon"></i>
<i aria-hidden="true" :class="icon"></i>
<span class="small">{{title}}</span>
</div>
</a>
+11 -3
View File
@@ -27,6 +27,7 @@ export default {
url:null,
urlMatchRankings:[],
navUserDropdown:null,
menuOpen:true,
};
},
provide(){
@@ -37,6 +38,13 @@ export default {
}
},
computed:{
menuCollapseAriaLabel(){
if(this.menuOpen){
return this.$p.t('global', 'collapseMenu');
}else{
return this.$p.t('global', 'extendMenu');
}
},
highestMatchingUrlCount(){
// gets the hightest ranking inside the array
let highestMatch = Math.max(...this.urlMatchRankings);
@@ -111,7 +119,7 @@ export default {
<div id="nav-logo" class="d-none d-lg-block">
<div class="d-flex h-100">
<a :href="rootUrl">
<img :src="logoUrl" alt="Logo">
<img :src="logoUrl" alt="Corporate Identity Logo">
</a>
<theme-switch></theme-switch>
</div>
@@ -135,8 +143,8 @@ export default {
<nav id="nav-main" class="offcanvas offcanvas-start" tabindex="-1" aria-labelledby="nav-main-btn" data-bs-backdrop="false">
<div id="nav-main-sticky">
<div id="nav-main-toggle" class="position-static d-none d-lg-block ">
<button type="button" class="btn text-light rounded-0 p-1 d-flex align-items-center" data-bs-toggle="collapse" data-bs-target=".nav-menu-collapse" aria-expanded="true" aria-controls="nav-sprachen nav-main-menu">
<i class="fa fa-arrow-circle-left fhc-text"></i>
<button :aria-label="menuCollapseAriaLabel" type="button" @click="menuOpen = !menuOpen" class="btn text-light rounded-0 p-1 d-flex align-items-center" data-bs-toggle="collapse" data-bs-target=".nav-menu-collapse" aria-expanded="true" aria-controls="nav-sprachen nav-main-menu">
<i aria-hidden="true" class="fa fa-arrow-circle-left fhc-text"></i>
</button>
</div>
<div class="offcanvas-body p-0">
+2 -2
View File
@@ -101,13 +101,13 @@ export default {
</div>
<div class="col-auto">
<div class="input-group">
<button class="btn btn-outline-secondary" type="button" :disabled="currentIsFirst" @click="prevSem">
<button :aria-label="$p.t('lehre','previousStudSemester')" v-tooltip.top="{showDelay:1000, value:$p.t('lehre','previousStudSemester')}" class="btn btn-outline-secondary" type="button" :disabled="currentIsFirst" @click="prevSem">
<i class="fa fa-caret-left" aria-hidden="true"></i>
</button>
<select ref="studiensemester" v-model="currentSemester" class="form-select" :aria-label="$p.t('global/studiensemester_auswaehlen')" @change="setHash($event.target.value)">
<option v-for="semester in studiensemester" :key="semester.studiensemester_kurzbz">{{semester.studiensemester_kurzbz}}</option>
</select>
<button class="btn btn-outline-secondary" type="button" :disabled="currentIsLast" @click="nextSem">
<button class="btn btn-outline-secondary" :aria-label="$p.t('lehre','nextStudSemester')" v-tooltip.top="{showDelay:1000, value:$p.t('lehre','nextStudSemester')}" type="button" :disabled="currentIsLast" @click="nextSem">
<i class="fa fa-caret-right" aria-hidden="true"></i>
</button>
</div>
@@ -16,7 +16,7 @@ export default {
{{title}}
</div>
<div class="card-body">
<h6 class="card-title">{{$p.t('profil','mailverteilerMitglied')}}</h6>
<h4 class="card-title">{{$p.t('profil','mailverteilerMitglied')}}</h4>
<div class="card-text row text-break mb-2" v-for="verteiler in data">
<div class="col-12 ">
<div class="row">
@@ -91,7 +91,7 @@ export default {
<div class="col-12 col-sm-6 mb-2">
<div class="row justify-content-center">
<div class="col-auto " style="position:relative">
<img class=" img-thumbnail " style=" max-height:150px; " :src="get_image_base64_src"/>
<img alt="profile picture" class=" img-thumbnail " style=" max-height:150px; " :src="get_image_base64_src"/>
<!-- LOCKING IMAGE FUNCTIONALITY -->
<div v-if="editable" role="button" @click.prevent="sperre_foto_function" class="image-lock">
<i :class="{'fa':true, ...(FotoSperre?{'fa-lock':true}:{'fa-lock-open':true})} "></i>
@@ -48,24 +48,24 @@ export default {
<!-- print semester link -->
<span v-else-if="key == 'semester' && entry.value" class="form-underline-content">
{{ entry.value }}
<a class="ms-auto mb-2" target="_blank" :href="getLinkSemesterListe">
<i class="fa fa-arrow-up-right-from-square me-1 fhc-link-color"></i>
<a :aria-label="$p.t('profil','semesterLink')" class="ms-auto mb-2" target="_blank" :href="getLinkSemesterListe">
<i aria-hidden="true" class="fa fa-arrow-up-right-from-square me-1 fhc-link-color"></i>
</a>
</span>
<!-- print verband link -->
<span v-else-if="key =='verband' && entry.value" class="form-underline-content">
{{ entry.value }}
<a class="ms-auto mb-2" target="_blank" :href="getLinkVerbandListe">
<i class="fa fa-arrow-up-right-from-square me-1 fhc-link-color"></i>
<a :aria-label="$p.t('profil','verbandLink')" class="ms-auto mb-2" target="_blank" :href="getLinkVerbandListe">
<i aria-hidden="true" class="fa fa-arrow-up-right-from-square me-1 fhc-link-color"></i>
</a>
</span>
<!-- print gruppe link -->
<span v-else-if="key == 'gruppe' && entry.value" class="form-underline-content">
{{ entry.value }}
<a class="ms-auto mb-2" target="_blank" :href="getLinkGruppeListe">
<i class="fa fa-arrow-up-right-from-square me-1 fhc-link-color"></i>
<a :aria-label="$p.t('profil','gruppenLink')" class="ms-auto mb-2" target="_blank" :href="getLinkGruppeListe">
<i aria-hidden="true" class="fa fa-arrow-up-right-from-square me-1 fhc-link-color"></i>
</a>
</span>
@@ -40,8 +40,8 @@ export default {
template: /*html*/`
<div class="lehreinheitEventContent h-100 w-100 p-1" >
<div id="lehreinheitEventHeader" class="h-100 " v-if="!event.allDayEvent && event?.beginn && event?.ende" >
<span class="small">{{convertTime(event.beginn.split(":"))}}</span>
<span class="small">{{convertTime(event.ende.split(":"))}}</span>
<span >{{convertTime(event.beginn.split(":"))}}</span>
<span >{{convertTime(event.ende.split(":"))}}</span>
</div>
<div id="lehreinheitEventText" v-tooltip="calendarEventTooltip">
<span id="lehreinheitTopic">{{event.topic}}</span>
+6 -5
View File
@@ -8,7 +8,8 @@ export default {
switchTheme(nextTheme){
this.theme = nextTheme;
this.$theme.switchTheme(this.theme);
}
},
},
computed:{
nextTheme(){
@@ -23,10 +24,10 @@ export default {
},
template:/*html*/`
<button @click="switchTheme(nextTheme)" class="fhc-primary-highlight-bg align-self-center btn btn-secondary rounded-5">
<i v-if="theme == 'light'" class="fa-solid fa-sun fhc-text"></i>
<i v-else-if="theme == 'dark'" class="fa-solid fa-moon fhc-text"></i>
<i v-else-if="theme == 'purple'" class="fa-solid fa-wine-bottle"></i>
<button :aria-label="$p.t('global','switchTheme',[nextTheme])" @click="switchTheme(nextTheme)" class="fhc-primary-highlight-bg align-self-center btn btn-secondary rounded-5">
<i v-if="theme == 'light'" class="fa-solid fa-sun fhc-text" aria-hidden="true"></i>
<i v-else-if="theme == 'dark'" class="fa-solid fa-moon fhc-text" aria-hidden="true"></i>
<i v-else-if="theme == 'purple'" class="fa-solid fa-wine-bottle" aria-hidden="true"></i>
</button>
`
}
+3 -3
View File
@@ -669,13 +669,13 @@ export const CoreFilterCmpt = {
<div class="d-flex gap-1 align-items-baseline flex-grow-1 justify-content-end">
<span v-if="!tableOnly">[ {{ filterName }} ]</span>
<span v-else-if="description">{{ description }}</span>
<a v-if="!tableOnly || $slots.filter" href="#" class="btn btn-link px-0 text-dark" data-bs-toggle="collapse" :data-bs-target="'#collapseFilters' + idExtra">
<a aria-label="filter" v-if="!tableOnly || $slots.filter" href="#" class="btn btn-link px-0 text-dark" data-bs-toggle="collapse" :data-bs-target="'#collapseFilters' + idExtra">
<span class="fa-solid fa-xl fa-filter"></span>
</a>
<a v-if="filterActive" class="btn btn-link px-0 text-dark" :title="$p.t('ui','filterdelete')" @click="clearFilters">
<a aria-label="filter" v-if="filterActive" class="btn btn-link px-0 text-dark" :title="$p.t('ui','filterdelete')" @click="clearFilters">
<span class="fa-solid fa-xl fa-filter-circle-xmark"></span>
</a>
<a href="#" class="btn btn-link px-0 text-dark" data-bs-toggle="collapse" :data-bs-target="'#collapseColumns' + idExtra">
<a aria-label="filter" href="#" class="btn btn-link px-0 text-dark" data-bs-toggle="collapse" :data-bs-target="'#collapseColumns' + idExtra">
<span class="fa-solid fa-xl fa-table-columns"></span>
</a>
<table-download class="btn btn-link px-0 text-dark" :tabulator="tabulator" :config="download"></table-download>
+463 -1
View File
@@ -268,6 +268,106 @@ $phrases = array(
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'collapseMenu',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Menu einklappen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Collapse menu',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'extendMenu',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Menu ausklappen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Extend menu',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'sender',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Sender',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'sender',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'collapseMenu',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Menu einklappen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Collapse menu',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'extendMenu',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Menu ausklappen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Extend menu',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
@@ -27276,6 +27376,86 @@ array(
)
)
),
array(
'app' => 'core',
'category' => 'profil',
'phrase' => 'gruppenLink',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Gruppen Link',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'group link',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'profil',
'phrase' => 'verbandLink',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Verband Link',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Verband link',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'profil',
'phrase' => 'verbandLink',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Verband Link',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Verband link',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'profil',
'phrase' => 'semesterLink',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Semester Link',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Semester link',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'profil',
@@ -28156,7 +28336,229 @@ array(
)
)
),
//Profil Phrasen ende
//Profil Phrasen ende
// LvPlan Phrasen start
array(
'app' => 'core',
'category' => 'LvPlan',
'phrase' => 'previousWeek',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Vorherige Woche',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Previous week',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'LvPlan',
'phrase' => 'previousYear',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Vorheriges Jahr',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Previous year',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'LvPlan',
'phrase' => 'previousMonth',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Vorheriges Monat',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Previous month',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'LvPlan',
'phrase' => 'previousDay',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Vorheriger Tag',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Previous day',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'LvPlan',
'phrase' => 'nextDay',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Nächster Tag',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Next day',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'LvPlan',
'phrase' => 'nextWeek',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Nächste Woche',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Next week',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'LvPlan',
'phrase' => 'nextMonth',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Nächster Monat',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Next month',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'LvPlan',
'phrase' => 'nextYear',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Nächstes Jahr',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Next year',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'LvPlan',
'phrase' => 'modeDay',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Tages Ansicht',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Daily view',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'LvPlan',
'phrase' => 'modeWeek',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Wochen Ansicht',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Week view',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'LvPlan',
'phrase' => 'modeMonth',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Monats Ansicht',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Month view',
'description' => '',
'insertvon' => 'system'
)
)
),
// LvPlan Phrasen ende
//ProfilUpdate Phrasen start
array(
'app' => 'core',
@@ -29661,6 +30063,26 @@ array(
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'switchTheme',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Zum {0} Theme wechseln',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Switch to {0} theme',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
@@ -40144,6 +40566,46 @@ array(
)
)
),
array(
'app' => 'core',
'category' => 'lehre',
'phrase' => 'previousStudSemester',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Vorheriges Studiensemester",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Previous study semester",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'lehre',
'phrase' => 'nextStudSemester',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Nächstes Studiensemester",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Next study semester",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'abgabetool',