Implement personal section in navigation: Add a new 'personal' menu item with sub-items for language learning and calendar. Update localization files for English and German to include translations for the new section. Integrate personal routes into the router configuration for navigation.
This commit is contained in:
@@ -50,20 +50,6 @@ const menuStructure = {
|
|||||||
visible: ["all"],
|
visible: ["all"],
|
||||||
path: "/socialnetwork/gallery"
|
path: "/socialnetwork/gallery"
|
||||||
},
|
},
|
||||||
sprachenlernen: {
|
|
||||||
visible: ["all"],
|
|
||||||
children: {
|
|
||||||
vocabtrainer: {
|
|
||||||
visible: ["all"],
|
|
||||||
path: "/socialnetwork/vocab",
|
|
||||||
showVocabLanguages: 1 // Flag für dynamische Sprachen-Liste
|
|
||||||
},
|
|
||||||
sprachkurse: {
|
|
||||||
visible: ["all"],
|
|
||||||
path: "/socialnetwork/vocab/courses"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
blockedUsers: {
|
blockedUsers: {
|
||||||
visible: ["all"],
|
visible: ["all"],
|
||||||
path: "/socialnetwork/blocked"
|
path: "/socialnetwork/blocked"
|
||||||
@@ -192,6 +178,30 @@ const menuStructure = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
personal: {
|
||||||
|
visible: ["all"],
|
||||||
|
icon: "profile16.png",
|
||||||
|
children: {
|
||||||
|
sprachenlernen: {
|
||||||
|
visible: ["all"],
|
||||||
|
children: {
|
||||||
|
vocabtrainer: {
|
||||||
|
visible: ["all"],
|
||||||
|
path: "/socialnetwork/vocab",
|
||||||
|
showVocabLanguages: 1 // Flag für dynamische Sprachen-Liste
|
||||||
|
},
|
||||||
|
sprachkurse: {
|
||||||
|
visible: ["all"],
|
||||||
|
path: "/socialnetwork/vocab/courses"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
calendar: {
|
||||||
|
visible: ["all"],
|
||||||
|
path: "/personal/calendar"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
settings: {
|
settings: {
|
||||||
visible: ["all"],
|
visible: ["all"],
|
||||||
icon: "settings16.png",
|
icon: "settings16.png",
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import enPasswordReset from './locales/en/passwordReset.json';
|
|||||||
import enBlog from './locales/en/blog.json';
|
import enBlog from './locales/en/blog.json';
|
||||||
import enMinigames from './locales/en/minigames.json';
|
import enMinigames from './locales/en/minigames.json';
|
||||||
import enMessage from './locales/en/message.json';
|
import enMessage from './locales/en/message.json';
|
||||||
|
import enPersonal from './locales/en/personal.json';
|
||||||
|
|
||||||
import deGeneral from './locales/de/general.json';
|
import deGeneral from './locales/de/general.json';
|
||||||
import deHeader from './locales/de/header.json';
|
import deHeader from './locales/de/header.json';
|
||||||
@@ -36,6 +37,7 @@ import dePasswordReset from './locales/de/passwordReset.json';
|
|||||||
import deBlog from './locales/de/blog.json';
|
import deBlog from './locales/de/blog.json';
|
||||||
import deMinigames from './locales/de/minigames.json';
|
import deMinigames from './locales/de/minigames.json';
|
||||||
import deMessage from './locales/de/message.json';
|
import deMessage from './locales/de/message.json';
|
||||||
|
import dePersonal from './locales/de/personal.json';
|
||||||
|
|
||||||
const messages = {
|
const messages = {
|
||||||
en: {
|
en: {
|
||||||
@@ -56,6 +58,7 @@ const messages = {
|
|||||||
...enBlog,
|
...enBlog,
|
||||||
...enMinigames,
|
...enMinigames,
|
||||||
...enMessage,
|
...enMessage,
|
||||||
|
...enPersonal,
|
||||||
},
|
},
|
||||||
de: {
|
de: {
|
||||||
'Ok': 'Ok',
|
'Ok': 'Ok',
|
||||||
@@ -76,6 +79,7 @@ const messages = {
|
|||||||
...deBlog,
|
...deBlog,
|
||||||
...deMinigames,
|
...deMinigames,
|
||||||
...deMessage,
|
...deMessage,
|
||||||
|
...dePersonal,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
"chats": "Chats",
|
"chats": "Chats",
|
||||||
"falukant": "Falukant",
|
"falukant": "Falukant",
|
||||||
"minigames": "Minispiele",
|
"minigames": "Minispiele",
|
||||||
|
"personal": "Persönliches",
|
||||||
"settings": "Einstellungen",
|
"settings": "Einstellungen",
|
||||||
"administration": "Verwaltung",
|
"administration": "Verwaltung",
|
||||||
"m-chats": {
|
"m-chats": {
|
||||||
@@ -41,6 +42,17 @@
|
|||||||
"match3": "Match 3 - Juwelen",
|
"match3": "Match 3 - Juwelen",
|
||||||
"taxi": "Taxi Simulator"
|
"taxi": "Taxi Simulator"
|
||||||
},
|
},
|
||||||
|
"m-personal": {
|
||||||
|
"sprachenlernen": "Sprachen lernen",
|
||||||
|
"calendar": "Kalender",
|
||||||
|
"m-sprachenlernen": {
|
||||||
|
"vocabtrainer": "Vokabeltrainer",
|
||||||
|
"sprachkurse": "Sprachkurse",
|
||||||
|
"m-vocabtrainer": {
|
||||||
|
"newLanguage": "Neue Sprache"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"m-settings": {
|
"m-settings": {
|
||||||
"homepage": "Startseite",
|
"homepage": "Startseite",
|
||||||
"account": "Account",
|
"account": "Account",
|
||||||
|
|||||||
8
frontend/src/i18n/locales/de/personal.json
Normal file
8
frontend/src/i18n/locales/de/personal.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"personal": {
|
||||||
|
"calendar": {
|
||||||
|
"title": "Kalender",
|
||||||
|
"comingSoon": "Der Kalender wird bald verfügbar sein. Hier können Sie zukünftig Ihre Termine und Ereignisse verwalten."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
"chats": "Chats",
|
"chats": "Chats",
|
||||||
"falukant": "Falukant",
|
"falukant": "Falukant",
|
||||||
"minigames": "Mini games",
|
"minigames": "Mini games",
|
||||||
|
"personal": "Personal",
|
||||||
"settings": "Settings",
|
"settings": "Settings",
|
||||||
"administration": "Administration",
|
"administration": "Administration",
|
||||||
"m-chats": {
|
"m-chats": {
|
||||||
@@ -41,6 +42,17 @@
|
|||||||
"match3": "Match 3 - Jewels",
|
"match3": "Match 3 - Jewels",
|
||||||
"taxi": "Taxi Simulator"
|
"taxi": "Taxi Simulator"
|
||||||
},
|
},
|
||||||
|
"m-personal": {
|
||||||
|
"sprachenlernen": "Learn Languages",
|
||||||
|
"calendar": "Calendar",
|
||||||
|
"m-sprachenlernen": {
|
||||||
|
"vocabtrainer": "Vocabulary trainer",
|
||||||
|
"sprachkurse": "Language courses",
|
||||||
|
"m-vocabtrainer": {
|
||||||
|
"newLanguage": "New language"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"m-settings": {
|
"m-settings": {
|
||||||
"homepage": "Homepage",
|
"homepage": "Homepage",
|
||||||
"account": "Account",
|
"account": "Account",
|
||||||
|
|||||||
8
frontend/src/i18n/locales/en/personal.json
Normal file
8
frontend/src/i18n/locales/en/personal.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"personal": {
|
||||||
|
"calendar": {
|
||||||
|
"title": "Calendar",
|
||||||
|
"comingSoon": "The calendar will be available soon. Here you will be able to manage your appointments and events."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,6 +8,7 @@ import adminRoutes from './adminRoutes';
|
|||||||
import falukantRoutes from './falukantRoutes';
|
import falukantRoutes from './falukantRoutes';
|
||||||
import blogRoutes from './blogRoutes';
|
import blogRoutes from './blogRoutes';
|
||||||
import minigamesRoutes from './minigamesRoutes';
|
import minigamesRoutes from './minigamesRoutes';
|
||||||
|
import personalRoutes from './personalRoutes';
|
||||||
|
|
||||||
const routes = [
|
const routes = [
|
||||||
{
|
{
|
||||||
@@ -22,6 +23,7 @@ const routes = [
|
|||||||
...falukantRoutes,
|
...falukantRoutes,
|
||||||
...blogRoutes,
|
...blogRoutes,
|
||||||
...minigamesRoutes,
|
...minigamesRoutes,
|
||||||
|
...personalRoutes,
|
||||||
];
|
];
|
||||||
|
|
||||||
const router = createRouter({
|
const router = createRouter({
|
||||||
|
|||||||
12
frontend/src/router/personalRoutes.js
Normal file
12
frontend/src/router/personalRoutes.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
const CalendarView = () => import('../views/personal/CalendarView.vue');
|
||||||
|
|
||||||
|
const personalRoutes = [
|
||||||
|
{
|
||||||
|
path: '/personal/calendar',
|
||||||
|
name: 'Calendar',
|
||||||
|
component: CalendarView,
|
||||||
|
meta: { requiresAuth: true }
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
export default personalRoutes;
|
||||||
51
frontend/src/views/personal/CalendarView.vue
Normal file
51
frontend/src/views/personal/CalendarView.vue
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
<template>
|
||||||
|
<div class="calendar-view">
|
||||||
|
<h2>{{ $t('personal.calendar.title') }}</h2>
|
||||||
|
|
||||||
|
<div class="coming-soon">
|
||||||
|
<img src="/images/icons/coming-soon.png" alt="Coming Soon" class="coming-soon-icon" />
|
||||||
|
<p>{{ $t('personal.calendar.comingSoon') }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'CalendarView',
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.calendar-view {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
color: var(--color-text-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.coming-soon {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 60px 20px;
|
||||||
|
background: #f9f9f9;
|
||||||
|
border: 1px dashed #ccc;
|
||||||
|
border-radius: 8px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.coming-soon-icon {
|
||||||
|
width: 64px;
|
||||||
|
height: 64px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.coming-soon p {
|
||||||
|
font-size: 1.2em;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Reference in New Issue
Block a user