diff --git a/README.md b/README.md
index e7d4f89b..2e0b1ae5 100644
--- a/README.md
+++ b/README.md
@@ -192,6 +192,27 @@ Email [info@worklenz.com](mailto:info@worklenz.com) to disclose any security vul
This project is licensed under the [MIT License](LICENSE).
+## Analytics
+
+Worklenz uses Google Analytics to understand how the application is being used. This helps us improve the application and make better decisions about future development.
+
+### What We Track
+- Anonymous usage statistics
+- Page views and navigation patterns
+- Feature usage
+- Browser and device information
+
+### Privacy
+- Analytics is opt-in only
+- No personal information is collected
+- Users can opt-out at any time
+- Data is stored according to Google's privacy policy
+
+### How to Opt-Out
+If you've previously opted in and want to opt-out:
+1. Clear your browser's local storage for the Worklenz domain
+2. Or click the "Decline" button in the analytics notice if it appears
+
## Screenshots
diff --git a/docker-compose.yml b/docker-compose.yml
index e7d074ad..363f2006 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -7,8 +7,8 @@ services:
ports:
- "5000:5000"
depends_on:
- backend:
- condition: service_started
+ - backend
+ restart: unless-stopped
env_file:
- ./worklenz-frontend/.env.production
networks:
@@ -26,6 +26,7 @@ services:
condition: service_healthy
minio:
condition: service_started
+ restart: unless-stopped
env_file:
- ./worklenz-backend/.env
networks:
@@ -37,6 +38,7 @@ services:
ports:
- "9000:9000"
- "9001:9001"
+ restart: unless-stopped
environment:
MINIO_ROOT_USER: ${S3_ACCESS_KEY_ID:-minioadmin}
MINIO_ROOT_PASSWORD: ${S3_SECRET_ACCESS_KEY:-minioadmin}
@@ -52,13 +54,14 @@ services:
container_name: worklenz_createbuckets
depends_on:
- minio
+ restart: on-failure
entrypoint: >
/bin/sh -c '
echo "Waiting for MinIO to start...";
sleep 15;
for i in 1 2 3 4 5; do
echo "Attempt $i to connect to MinIO...";
- if /usr/bin/mc config host add myminio http://minio:9000 minioadmin minioadmin; then
+ if /usr/bin/mc alias set myminio http://minio:9000 minioadmin minioadmin; then
echo "Successfully connected to MinIO!";
/usr/bin/mc mb --ignore-existing myminio/worklenz-bucket;
/usr/bin/mc policy set public myminio/worklenz-bucket;
@@ -84,6 +87,7 @@ services:
interval: 10s
timeout: 5s
retries: 5
+ restart: unless-stopped
networks:
- worklenz
volumes:
diff --git a/worklenz-backend/.dockerignore b/worklenz-backend/.dockerignore
index 263e9ac4..fdfab06a 100644
--- a/worklenz-backend/.dockerignore
+++ b/worklenz-backend/.dockerignore
@@ -1,5 +1,9 @@
node_modules
npm-debug.log
-build
.scannerwork
coverage
+.dockerignore
+.git
+*.md
+tests
+
diff --git a/worklenz-backend/Dockerfile b/worklenz-backend/Dockerfile
index f381e37e..244b7cf8 100644
--- a/worklenz-backend/Dockerfile
+++ b/worklenz-backend/Dockerfile
@@ -1,26 +1,39 @@
-# Use the official Node.js 20 image as a base
-FROM node:20
+# --- Stage 1: Build ---
+FROM node:20-slim AS builder
+
+ARG RELEASE_VERSION
+RUN apt-get update && apt-get install -y \
+ python3 \
+ make \
+ g++ \
+ curl \
+ postgresql-server-dev-all \
+ && rm -rf /var/lib/apt/lists/*
-# Create and set the working directory
WORKDIR /usr/src/app
-# Install global dependencies
-RUN npm install -g ts-node typescript grunt grunt-cli
-
-# Copy package.json and package-lock.json (if available)
COPY package*.json ./
-
-# Install app dependencies
RUN npm ci
-# Copy the rest of the application code
COPY . .
-
-# Run the build script to compile TypeScript to JavaScript
RUN npm run build
-# Expose the port the app runs on
-EXPOSE 3000
+RUN echo "$RELEASE_VERSION" > release
+
+# --- Stage 2: Production Image ---
+FROM node:20-slim
+
+RUN apt-get update && apt-get install -y libpq5 && rm -rf /var/lib/apt/lists/*
+
+WORKDIR /app
+
+COPY --from=builder /usr/src/app/package*.json ./
+COPY --from=builder /usr/src/app/build ./build
+COPY --from=builder /usr/src/app/node_modules ./node_modules
+COPY --from=builder /usr/src/app/release ./release
+COPY --from=builder /usr/src/app/worklenz-email-templates ./worklenz-email-templates
+
+
+EXPOSE 3000
+CMD ["node", "build/bin/www"]
-# Start the application
-CMD ["npm", "start"]
\ No newline at end of file
diff --git a/worklenz-frontend/.dockerignore b/worklenz-frontend/.dockerignore
new file mode 100644
index 00000000..6a9920e7
--- /dev/null
+++ b/worklenz-frontend/.dockerignore
@@ -0,0 +1,6 @@
+node_modules
+npm-debug.log
+.git
+.gitignore
+.dockerignore
+README.md
diff --git a/worklenz-frontend/README.md b/worklenz-frontend/README.md
index 02c573fc..46c4a267 100644
--- a/worklenz-frontend/README.md
+++ b/worklenz-frontend/README.md
@@ -8,6 +8,7 @@ Worklenz is a project management application built with React, TypeScript, and A
- [Project Structure](#project-structure)
- [Contributing](#contributing)
- [Learn More](#learn-more)
+- [License](#license)
## Getting Started
@@ -93,3 +94,7 @@ To learn more about the technologies used in this project:
- [TypeScript Documentation](https://www.typescriptlang.org/docs/)
- [Ant Design Documentation](https://ant.design/docs/react/introduce)
- [Vite Documentation](https://vitejs.dev/guide/)
+
+## License
+
+Worklenz is open source and released under the [GNU Affero General Public License Version 3 (AGPLv3)](LICENSE).
diff --git a/worklenz-frontend/index.html b/worklenz-frontend/index.html
index ba93ca2c..27481702 100644
--- a/worklenz-frontend/index.html
+++ b/worklenz-frontend/index.html
@@ -1,5 +1,95 @@
+
+
+
+
+
+
+
+
+ Worklenz
+
+
+
+
+
diff --git a/worklenz-frontend/public/locales/alb/404-page.json b/worklenz-frontend/public/locales/alb/404-page.json
new file mode 100644
index 00000000..a5e803fe
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/404-page.json
@@ -0,0 +1,4 @@
+{
+ "doesNotExistText": "Na vjen keq, faqja që kërkoni nuk ekziston.",
+ "backHomeButton": "Kthehu në Faqen Kryesore"
+}
diff --git a/worklenz-frontend/public/locales/alb/account-setup.json b/worklenz-frontend/public/locales/alb/account-setup.json
new file mode 100644
index 00000000..d5f624b3
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/account-setup.json
@@ -0,0 +1,31 @@
+{
+ "continue": "Vazhdo",
+
+ "setupYourAccount": "Konfiguro Llogarinë Tënde në Worklenz.",
+ "organizationStepTitle": "Emërtoni Organizatën Tuaj",
+ "organizationStepLabel": "Zgjidhni një emër për llogarinë tuaj në Worklenz.",
+
+ "projectStepTitle": "Krijoni projektin tuaj të parë",
+ "projectStepLabel": "Në cilin projekt po punoni aktualisht?",
+ "projectStepPlaceholder": "p.sh. Plani i Marketingut",
+
+ "tasksStepTitle": "Krijoni detyrat tuaja të para",
+ "tasksStepLabel": "Shkruani disa detyra që do të kryeni në",
+ "tasksStepAddAnother": "Shto një tjetër",
+
+ "emailPlaceholder": "Adresa email",
+ "invalidEmail": "Ju lutemi vendosni një adresë email të vlefshme",
+ "or": "ose",
+ "templateButton": "Importo nga shablloni",
+ "goBack": "Kthehu Mbrapa",
+ "cancel": "Anulo",
+ "create": "Krijo",
+ "templateDrawerTitle": "Zgjidh nga shabllonet",
+ "step3InputLabel": "Fto me email",
+ "addAnother": "Shto një tjetër",
+ "skipForNow": "Kalo tani për tani",
+ "formTitle": "Krijoni detyrën tuaj të parë.",
+ "step3Title": "Fto ekipin tënd të punojë me",
+ "maxMembers": " (Mund të ftoni deri në 5 anëtarë)",
+ "maxTasks": " (Mund të krijoni deri në 5 detyra)"
+}
diff --git a/worklenz-frontend/public/locales/alb/admin-center/current-bill.json b/worklenz-frontend/public/locales/alb/admin-center/current-bill.json
new file mode 100644
index 00000000..1f76f32b
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/admin-center/current-bill.json
@@ -0,0 +1,113 @@
+{
+ "title": "Faturimet",
+ "currentBill": "Fatura Aktuale",
+ "configuration": "Konfigurimi",
+ "currentPlanDetails": "Detajet e Planit Aktual",
+ "upgradePlan": "Përmirëso Planin",
+ "cardBodyText01": "Provë falas",
+ "cardBodyText02": "(Plani juaj i provës skadon në 1 muaj 19 ditë)",
+ "redeemCode": "Kodi i Zbritjes",
+ "accountStorage": "Depozita e Llogarisë",
+ "used": "Përdorur:",
+ "remaining": "E mbetur:",
+ "charges": "Tarifat",
+ "tooltip": "Tarifat për ciklin aktual të faturimit",
+ "description": "Përshkrimi",
+ "billingPeriod": "Periudha e Faturimit",
+ "billStatus": "Statusi i Faturës",
+ "perUserValue": "Vlera për Përdorues",
+ "users": "Përdoruesit",
+
+ "amount": "Shuma",
+ "invoices": "Faturat",
+ "transactionId": "ID e Transaksionit",
+ "transactionDate": "Data e Transaksionit",
+ "paymentMethod": "Metoda e Pagesës",
+ "status": "Statusi",
+ "ltdUsers": "Mund të shtoni deri në {{ltd_users}} përdorues.",
+
+ "totalSeats": "Vende totale",
+ "availableSeats": "Vende të disponueshme",
+ "addMoreSeats": "Shto më shumë vende",
+
+ "drawerTitle": "Kodi i Zbritjes",
+ "label": "Kodi i Zbritjes",
+ "drawerPlaceholder": "Vendosni kodin tuaj të zbritjes",
+ "redeemSubmit": "Paraqit",
+
+ "modalTitle": "Zgjidhni planin më të mirë për ekipin tuaj",
+ "seatLabel": "Numri i vendeve",
+ "freePlan": "Plan Falas",
+ "startup": "Startup",
+ "business": "Biznes",
+ "tag": "Më i Popullarizuar",
+ "enterprise": "Ndërmarrje",
+
+ "freeSubtitle": "falas përgjithmonë",
+ "freeUsers": "Më e mira për përdorim personal",
+ "freeText01": "100MB depozitë",
+ "freeText02": "3 projekte",
+ "freeText03": "5 anëtarë të ekipit",
+
+ "startupSubtitle": "ÇMIM I RASTËSISHËM / muaj",
+ "startupUsers": "Deri në 15 përdorues",
+ "startupText01": "25GB depozitë",
+ "startupText02": "Projekte të pakufizuara aktive",
+ "startupText03": "Orar",
+ "startupText04": "Raportim",
+ "startupText05": "Abonohu në projekte",
+
+ "businessSubtitle": "përdorues / muaj",
+ "businessUsers": "16 - 200 përdorues",
+
+ "enterpriseUsers": "200 - 500+ përdorues",
+
+ "footerTitle": "Ju lutemi na jepni një numër kontakti që mund të përdorim për t'ju kontaktuar.",
+ "footerLabel": "Numri i Kontaktit",
+ "footerButton": "Na kontaktoni",
+
+ "redeemCodePlaceHolder": "Vendosni kodin tuaj të zbritjes",
+ "submit": "Paraqit",
+
+ "trialPlan": "Provë Falas",
+ "trialExpireDate": "E vlefshme deri më {{trial_expire_date}}",
+ "trialExpired": "Provat tuaja falas skaduan {{trial_expire_string}}",
+ "trialInProgress": "Provat tuaja falas skadojnë {{trial_expire_string}}",
+
+ "required": "Kjo fushë është e detyrueshme",
+ "invalidCode": "Kod i pavlefshëm",
+
+ "selectPlan": "Zgjidhni planin më të mirë për ekipin tuaj",
+ "changeSubscriptionPlan": "Ndryshoni planin tuaj të abonimit",
+ "noOfSeats": "Numri i vendeve",
+ "annualPlan": "Pro - Vjetor",
+ "monthlyPlan": "Pro - Mujor",
+ "freeForever": "Falas Përgjithmonë",
+ "bestForPersonalUse": "Më e mira për përdorim personal",
+ "storage": "Depozitë",
+ "projects": "Projekte",
+ "teamMembers": "Anëtarët e Ekipit",
+ "unlimitedTeamMembers": "Anëtarë të pakufizuar të ekipit",
+ "unlimitedActiveProjects": "Projekte të pakufizuara aktive",
+ "schedule": "Orar",
+ "reporting": "Raportim",
+ "subscribeToProjects": "Abonohu në projekte",
+ "billedAnnually": "Faturuar çdo vit",
+ "billedMonthly": "Faturuar çdo muaj",
+
+ "pausePlan": "Pauzë Planin",
+ "resumePlan": "Rifillo Planin",
+ "changePlan": "Ndrysho Planin",
+ "cancelPlan": "Anulo Planin",
+
+ "perMonthPerUser": "për përdorues/muaj",
+ "viewInvoice": "Shiko Faturën",
+ "switchToFreePlan": "Kalo në Planin Falas",
+
+ "expirestoday": "sot",
+ "expirestomorrow": "nesër",
+ "expiredDaysAgo": "{{days}} ditë më parë",
+
+ "continueWith": "Vazhdo me {{plan}}",
+ "changeToPlan": "Ndrysho në {{plan}}"
+}
diff --git a/worklenz-frontend/public/locales/alb/admin-center/overview.json b/worklenz-frontend/public/locales/alb/admin-center/overview.json
new file mode 100644
index 00000000..296eae4c
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/admin-center/overview.json
@@ -0,0 +1,8 @@
+{
+ "overview": "Përmbledhje",
+ "name": "Emri i Organizatës",
+ "owner": "Pronari i Organizatës",
+ "admins": "Administruesit e Organizatës",
+ "contactNumber": "Shto Numrin e Kontaktit",
+ "edit": "Redakto"
+}
diff --git a/worklenz-frontend/public/locales/alb/admin-center/projects.json b/worklenz-frontend/public/locales/alb/admin-center/projects.json
new file mode 100644
index 00000000..356aaec9
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/admin-center/projects.json
@@ -0,0 +1,12 @@
+{
+ "membersCount": "Numri i Anëtarëve",
+ "createdAt": "Krijuar më",
+ "projectName": "Emri i Projektit",
+ "teamName": "Emri i Ekipit",
+ "refreshProjects": "Rifresko Projektet",
+ "searchPlaceholder": "Kërkoni sipas emrit të projektit",
+ "deleteProject": "Jeni i sigurt që dëshironi të fshini këtë projekt?",
+ "confirm": "Konfirmo",
+ "cancel": "Anulo",
+ "delete": "Fshi Projektin"
+}
diff --git a/worklenz-frontend/public/locales/alb/admin-center/sidebar.json b/worklenz-frontend/public/locales/alb/admin-center/sidebar.json
new file mode 100644
index 00000000..584a9a10
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/admin-center/sidebar.json
@@ -0,0 +1,8 @@
+{
+ "overview": "Përmbledhje",
+ "users": "Përdoruesit",
+ "teams": "Ekipet",
+ "billing": "Faturimi",
+ "projects": "Projektet",
+ "adminCenter": "Qendra Administrative"
+}
diff --git a/worklenz-frontend/public/locales/alb/admin-center/teams.json b/worklenz-frontend/public/locales/alb/admin-center/teams.json
new file mode 100644
index 00000000..de37bf7a
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/admin-center/teams.json
@@ -0,0 +1,33 @@
+{
+ "title": "Ekipet",
+ "subtitle": "ekipet",
+ "tooltip": "Rifresko ekipet",
+ "placeholder": "Kërko sipas emrit",
+ "addTeam": "Shto Ekip",
+ "team": "Ekipi",
+ "membersCount": "Numri i Anëtarëve",
+ "members": "Anëtarët",
+ "drawerTitle": "Krijo Ekip të Ri",
+ "label": "Emri i Ekipit",
+ "drawerPlaceholder": "Emri",
+ "create": "Krijo",
+ "delete": "Fshi",
+ "settings": "Cilësimet",
+ "popTitle": "Jeni i sigurt?",
+ "message": "Ju lutemi shkruani një Emër",
+ "teamSettings": "Cilësimet e Ekipit",
+ "teamName": "Emri i Ekipit",
+ "teamDescription": "Përshkrimi i Ekipit",
+ "teamMembers": "Anëtarët e Ekipit",
+ "teamMembersCount": "Numri i Anëtarëve të Ekipit",
+ "teamMembersPlaceholder": "Kërko sipas emrit",
+ "addMember": "Shto Anëtar",
+ "add": "Shto",
+ "update": "Përditëso",
+ "teamNamePlaceholder": "Emri i ekipit",
+ "user": "Përdoruesi",
+ "role": "Roli",
+ "owner": "Pronari",
+ "admin": "Administruesi",
+ "member": "Anëtari"
+}
diff --git a/worklenz-frontend/public/locales/alb/admin-center/users.json b/worklenz-frontend/public/locales/alb/admin-center/users.json
new file mode 100644
index 00000000..9cfe7956
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/admin-center/users.json
@@ -0,0 +1,9 @@
+{
+ "title": "Përdoruesit",
+ "subTitle": "përdoruesit",
+ "placeholder": "Kërko sipas emrit",
+ "user": "Përdoruesi",
+ "email": "Email",
+ "lastActivity": "Aktiviteti i Fundit",
+ "refresh": "Rifresko përdoruesit"
+}
diff --git a/worklenz-frontend/public/locales/alb/all-project-list.json b/worklenz-frontend/public/locales/alb/all-project-list.json
new file mode 100644
index 00000000..0e090edb
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/all-project-list.json
@@ -0,0 +1,23 @@
+{
+ "name": "Emri",
+ "client": "Klienti",
+ "category": "Kategoria",
+ "status": "Statusi",
+ "tasksProgress": "Progresi i Detyrave",
+ "updated_at": "Përditësuar Së Fundi",
+ "members": "Anëtarët",
+ "setting": "Cilësimet",
+ "projects": "Projektet",
+ "refreshProjects": "Rifresko projektet",
+ "all": "Të Gjitha",
+ "favorites": "Të Preferuarat",
+ "archived": "Të Arkivuara",
+ "placeholder": "Kërko sipas emrit",
+ "archive": "Arkivo",
+ "unarchive": "Ç'arkivo",
+ "archiveConfirm": "Jeni i sigurt që doni ta arkivoni këtë projekt?",
+ "unarchiveConfirm": "Jeni i sigurt që doni ta çarkivoni këtë projekt?",
+ "clickToFilter": "Klikoni për të filtruar sipas",
+ "noProjects": "Nuk u gjetën projekte",
+ "addToFavourites": "Shto në të preferuarat"
+}
diff --git a/worklenz-frontend/public/locales/alb/auth/auth-common.json b/worklenz-frontend/public/locales/alb/auth/auth-common.json
new file mode 100644
index 00000000..5f687234
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/auth/auth-common.json
@@ -0,0 +1,5 @@
+{
+ "loggingOut": "Po dilni...",
+ "authenticating": "Po autentikoheni...",
+ "gettingThingsReady": "Po përgatiten gjërat për ju..."
+}
diff --git a/worklenz-frontend/public/locales/alb/auth/forgot-password.json b/worklenz-frontend/public/locales/alb/auth/forgot-password.json
new file mode 100644
index 00000000..2ee64388
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/auth/forgot-password.json
@@ -0,0 +1,12 @@
+{
+ "headerDescription": "Rivendosni fjalëkalimin tuaj",
+ "emailLabel": "Email",
+ "emailPlaceholder": "Vendosni email-in tuaj",
+ "emailRequired": "Ju lutemi vendosni Email-in tuaj!",
+ "resetPasswordButton": "Rivendos Fjalëkalimin",
+ "returnToLoginButton": "Kthehu te Hyrja",
+ "passwordResetSuccessMessage": "Një lidhje për rivendosjen e fjalëkalimit është dërguar në email-in tuaj.",
+ "orText": "OSE",
+ "successTitle": "U dërguan udhëzimet për rivendosje!",
+ "successMessage": "Informacioni për rivendosje është dërguar në email-in tuaj. Ju lutemi kontrolloni email-in."
+}
diff --git a/worklenz-frontend/public/locales/alb/auth/login.json b/worklenz-frontend/public/locales/alb/auth/login.json
new file mode 100644
index 00000000..668b4fdc
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/auth/login.json
@@ -0,0 +1,27 @@
+{
+ "headerDescription": "Hyni në llogarinë tuaj",
+ "emailLabel": "Email",
+ "emailPlaceholder": "Vendosni email-in tuaj",
+ "emailRequired": "Ju lutemi vendosni Email-in tuaj!",
+ "passwordLabel": "Fjalëkalimi",
+ "passwordPlaceholder": "Vendosni fjalëkalimin",
+ "passwordRequired": "Ju lutemi vendosni Fjalëkalimin!",
+ "rememberMe": "Më mbaj mend",
+ "loginButton": "Hyr",
+ "signupButton": "Regjistrohu",
+ "forgotPasswordButton": "Keni harruar fjalëkalimin?",
+ "signInWithGoogleButton": "Hyr me Google",
+ "dontHaveAccountText": "Nuk keni llogari?",
+ "orText": "OSE",
+ "successMessage": "Jeni futur me sukses!",
+ "loginError": "Hyrja dështoi",
+ "googleLoginError": "Hyrja përmes Google dështoi",
+ "validationMessages": {
+ "email": "Ju lutemi vendosni një adresë email të vlefshme",
+ "password": "Fjalëkalimi duhet të jetë së paku 8 karaktere"
+ },
+ "errorMessages": {
+ "loginErrorTitle": "Hyrja dështoi",
+ "loginErrorMessage": "Ju lutemi kontrolloni email-in dhe fjalëkalimin dhe provoni përsëri"
+ }
+}
diff --git a/worklenz-frontend/public/locales/alb/auth/signup.json b/worklenz-frontend/public/locales/alb/auth/signup.json
new file mode 100644
index 00000000..1dac7a39
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/auth/signup.json
@@ -0,0 +1,29 @@
+{
+ "headerDescription": "Regjistrohuni për të filluar",
+ "nameLabel": "Emri i Plotë",
+ "namePlaceholder": "Shkruani emrin tuaj të plotë",
+ "nameRequired": "Ju lutemi shkruani emrin tuaj të plotë!",
+ "nameMinCharacterRequired": "Emri duhet të jetë së paku 4 karaktere!",
+ "emailLabel": "Email",
+ "emailPlaceholder": "Shkruani email-in tuaj",
+ "emailRequired": "Ju lutemi shkruani Email-in tuaj!",
+ "passwordLabel": "Fjalëkalimi",
+ "passwordPlaceholder": "Krijoni një fjalëkalim",
+ "passwordRequired": "Ju lutemi krijoni një Fjalëkalim!",
+ "passwordMinCharacterRequired": "Fjalëkalimi duhet të jetë së paku 8 karaktere!",
+ "passwordPatternRequired": "Fjalëkalimi nuk plotëson kërkesat!",
+ "strongPasswordPlaceholder": "Vendosni një fjalëkalim më të fortë",
+ "passwordValidationAltText": "Fjalëkalimi duhet të përmbajë së paku 8 karaktere me shkronja të mëdha dhe të vogla, një numër dhe një simbol.",
+ "signupSuccessMessage": "Jeni regjistruar me sukses!",
+ "privacyPolicyLink": "Politika e Privatësisë",
+ "termsOfUseLink": "Kushtet e Përdorimit",
+ "bySigningUpText": "Duke u regjistruar, ju pranoni",
+ "andText": "dhe",
+ "signupButton": "Regjistrohu",
+ "signInWithGoogleButton": "Hyr me Google",
+ "alreadyHaveAccountText": "Keni tashmë një llogari?",
+ "loginButton": "Hyr",
+ "orText": "OSE",
+ "reCAPTCHAVerificationError": "Gabim në Verifikimin e reCAPTCHA",
+ "reCAPTCHAVerificationErrorMessage": "Nuk mundëm të verifikojmë reCAPTCHA-n tuaj. Ju lutemi provoni përsëri."
+}
diff --git a/worklenz-frontend/public/locales/alb/auth/verify-reset-email.json b/worklenz-frontend/public/locales/alb/auth/verify-reset-email.json
new file mode 100644
index 00000000..16017318
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/auth/verify-reset-email.json
@@ -0,0 +1,14 @@
+{
+ "title": "Verifikoni Email-in për Rivendosje",
+ "description": "Vendosni fjalëkalimin tuaj të ri",
+ "placeholder": "Vendosni fjalëkalimin tuaj të ri",
+ "confirmPasswordPlaceholder": "Konfirmoni fjalëkalimin e ri",
+ "passwordHint": "Të paktën 8 karaktere, me shkronja të mëdha dhe të vogla, një numër dhe një simbol.",
+ "resetPasswordButton": "Rivendos fjalëkalimin",
+ "orText": "Ose",
+ "resendResetEmail": "Dërgo përsëri email-in e rivendosjes",
+ "passwordRequired": "Ju lutemi vendosni fjalëkalimin e ri",
+ "returnToLoginButton": "Kthehu te Hyrja",
+ "confirmPasswordRequired": "Ju lutemi konfirmoni fjalëkalimin e ri",
+ "passwordMismatch": "Fjalëkalimet nuk përputhen"
+}
diff --git a/worklenz-frontend/public/locales/alb/common.json b/worklenz-frontend/public/locales/alb/common.json
new file mode 100644
index 00000000..5af25f69
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/common.json
@@ -0,0 +1,9 @@
+{
+ "login-success": "Hyrja u krye me sukses!",
+ "login-failed": "Hyrja dështoi. Ju lutemi kontrolloni kredencialet dhe provoni përsëri.",
+ "signup-success": "Regjistrimi u krye me sukses! Mirë se erdhët.",
+ "signup-failed": "Regjistrimi dështoi. Ju lutemi sigurohuni që të gjitha fushat e nevojshme janë plotësuar dhe provoni përsëri.",
+ "reconnecting": "Jeni shkëputur nga serveri.",
+ "connection-lost": "Lidhja me serverin dështoi. Ju lutemi kontrolloni lidhjen tuaj me internet.",
+ "connection-restored": "U lidhët me serverin me sukses"
+}
diff --git a/worklenz-frontend/public/locales/alb/create-first-project-form.json b/worklenz-frontend/public/locales/alb/create-first-project-form.json
new file mode 100644
index 00000000..80c3bb86
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/create-first-project-form.json
@@ -0,0 +1,13 @@
+{
+ "formTitle": "Krijoni projektin tuaj të parë",
+ "inputLabel": "Në cilin projekt po punoni aktualisht?",
+ "or": "ose",
+ "templateButton": "Importo nga shablloni",
+ "createFromTemplate": "Krijo nga shablloni",
+ "goBack": "Kthehu Mbrapa",
+ "continue": "Vazhdo",
+ "cancel": "Anulo",
+ "create": "Krijo",
+ "templateDrawerTitle": "Zgjidh nga shabllonet",
+ "createProject": "Krijo Projekt"
+}
diff --git a/worklenz-frontend/public/locales/alb/create-first-tasks.json b/worklenz-frontend/public/locales/alb/create-first-tasks.json
new file mode 100644
index 00000000..5e74d7d4
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/create-first-tasks.json
@@ -0,0 +1,7 @@
+{
+ "formTitle": "Krijo detyrën tënde të parë.",
+ "inputLabel": "Shkruaj disa detyra që do të kryesh në",
+ "addAnother": "Shto një tjetër",
+ "goBack": "Kthehu mbrapa",
+ "continue": "Vazhdo"
+}
diff --git a/worklenz-frontend/public/locales/alb/home.json b/worklenz-frontend/public/locales/alb/home.json
new file mode 100644
index 00000000..58d26e0b
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/home.json
@@ -0,0 +1,46 @@
+{
+ "todoList": {
+ "title": "Lista e Detyrave",
+ "refreshTasks": "Rifresko detyrat",
+ "addTask": "+ Shto Detyrë",
+ "noTasks": "Asnjë detyrë",
+ "pressEnter": "Shtyp",
+ "toCreate": "për të krijuar.",
+ "markAsDone": "Shëno si të përfunduar"
+ },
+ "projects": {
+ "title": "Projektet",
+ "refreshProjects": "Rifresko projektet",
+ "noRecentProjects": "Aktualisht nuk jeni caktuar në asnjë projekt.",
+ "noFavouriteProjects": "Asnjë projekt i shënuar si i preferuar.",
+ "recent": "Të Fundit",
+ "favourites": "Të Preferuarat"
+ },
+ "tasks": {
+ "assignedToMe": "Më janë caktuar",
+ "assignedByMe": "I kam caktuar",
+ "all": "Të Gjitha",
+ "today": "Sot",
+ "upcoming": "Ardhj",
+ "overdue": "Të vonuara",
+ "noDueDate": "Pa afat",
+ "noTasks": "Asnjë detyrë për të shfaqur.",
+ "addTask": "+ Shto detyrë",
+ "name": "Emri",
+ "project": "Projekti",
+ "status": "Statusi",
+ "dueDate": "Afati",
+ "dueDatePlaceholder": "Cakto Afatin",
+ "tomorrow": "Nesër",
+ "nextWeek": "Javën e Ardhshme",
+ "nextMonth": "Muajin e Ardhshëm",
+ "projectRequired": "Ju lutemi zgjidhni një projekt",
+ "pressTabToSelectDueDateAndProject": "Shtyp Tab për të zgjedhur afatin dhe projektin",
+ "dueOn": "Detyrat me afat më",
+ "taskRequired": "Ju lutemi shtoni një detyrë",
+ "list": "Listë",
+ "calendar": "Kalendar",
+ "tasks": "Detyrat",
+ "refresh": "Rifresko"
+ }
+}
diff --git a/worklenz-frontend/public/locales/alb/invite-initial-team-members.json b/worklenz-frontend/public/locales/alb/invite-initial-team-members.json
new file mode 100644
index 00000000..c86da726
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/invite-initial-team-members.json
@@ -0,0 +1,8 @@
+{
+ "formTitle": "Fto ekipin tënd të punojë me",
+ "inputLabel": "Fto me email",
+ "addAnother": "Shto një tjetër",
+ "goBack": "Kthehu mbrapa",
+ "continue": "Vazhdo",
+ "skipForNow": "Anashkalo tani për tani"
+}
diff --git a/worklenz-frontend/public/locales/alb/kanban-board.json b/worklenz-frontend/public/locales/alb/kanban-board.json
new file mode 100644
index 00000000..e14f338b
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/kanban-board.json
@@ -0,0 +1,23 @@
+{
+ "rename": "Riemërto",
+ "delete": "Fshi",
+ "addTask": "Shto Detyrë",
+ "addSectionButton": "Shto Seksion",
+ "changeCategory": "Ndrysho kategorinë",
+
+ "deleteTooltip": "Fshi",
+ "deleteConfirmationTitle": "Jeni i sigurt?",
+ "deleteConfirmationOk": "Po",
+ "deleteConfirmationCancel": "Anulo",
+
+ "dueDate": "Data e përfundimit",
+ "cancel": "Anulo",
+
+ "today": "Sot",
+ "tomorrow": "Nesër",
+ "assignToMe": "Cakto mua",
+ "archive": "Arkivo",
+
+ "newTaskNamePlaceholder": "Shkruaj emrin e detyrës",
+ "newSubtaskNamePlaceholder": "Shkruaj emrin e nëndetyrës"
+}
diff --git a/worklenz-frontend/public/locales/alb/license-expired.json b/worklenz-frontend/public/locales/alb/license-expired.json
new file mode 100644
index 00000000..94abf5ae
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/license-expired.json
@@ -0,0 +1,6 @@
+{
+ "title": "Prova juaj e Worklenz ka skaduar!",
+ "subtitle": "Ju lutemi përmirësoni tani.",
+ "button": "Përmirëso tani",
+ "checking": "Po kontrollohet statusi i abonimit..."
+}
diff --git a/worklenz-frontend/public/locales/alb/navbar.json b/worklenz-frontend/public/locales/alb/navbar.json
new file mode 100644
index 00000000..88c53de4
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/navbar.json
@@ -0,0 +1,31 @@
+{
+ "logoAlt": "Logoja e Worklenz",
+ "home": "Kryefaqja",
+ "projects": "Projektet",
+ "schedule": "Orari",
+ "reporting": "Raportimi",
+ "clients": "Klientët",
+ "teams": "Ekipet",
+ "labels": "Etiketa",
+ "jobTitles": "Tituj Pune",
+ "upgradePlan": "Përmirëso Abonimin",
+ "upgradePlanTooltip": "Përmirëso abonimin",
+ "invite": "Fto",
+ "inviteTooltip": "Fto anëtarë të ekipit të bashkohen",
+ "switchTeamTooltip": "Ndrysho ekipin",
+ "help": "Ndihmë",
+ "notificationTooltip": "Shiko njoftimet",
+ "profileTooltip": "Shiko profilin",
+ "adminCenter": "Qendra Administrative",
+ "settings": "Cilësimet",
+ "logOut": "Dil",
+ "notificationsDrawer": {
+ "read": "Lexuara e njoftimet ",
+ "unread": "Njoftimet e palexuara",
+ "markAsRead": "Shëno si të lexuara",
+ "readAndJoin": "Lexo & Bashkohu",
+ "accept": "Prano",
+ "acceptAndJoin": "Prano & Bashkohu",
+ "noNotifications": "Asnjë njoftim"
+ }
+}
diff --git a/worklenz-frontend/public/locales/alb/organization-name-form.json b/worklenz-frontend/public/locales/alb/organization-name-form.json
new file mode 100644
index 00000000..d01b09c8
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/organization-name-form.json
@@ -0,0 +1,5 @@
+{
+ "nameYourOrganization": "Emërtoni organizatën tuaj.",
+ "worklenzAccountTitle": "Zgjidhni një emër për llogarinë tuaj në Worklenz.",
+ "continue": "Vazhdo"
+}
diff --git a/worklenz-frontend/public/locales/alb/phases-drawer.json b/worklenz-frontend/public/locales/alb/phases-drawer.json
new file mode 100644
index 00000000..de34c740
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/phases-drawer.json
@@ -0,0 +1,7 @@
+{
+ "configurePhases": "Konfiguro Fazat",
+ "phaseLabel": "Etiketa e Fazës",
+ "enterPhaseName": "Vendosni një emër për etiketën e fazës",
+ "addOption": "Shto Opsion",
+ "phaseOptions": "Opsionet e Fazës:"
+}
diff --git a/worklenz-frontend/public/locales/alb/project-drawer.json b/worklenz-frontend/public/locales/alb/project-drawer.json
new file mode 100644
index 00000000..952dba7e
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/project-drawer.json
@@ -0,0 +1,42 @@
+{
+ "createProject": "Krijo Projekt",
+ "editProject": "Modifiko Projektin",
+ "enterCategoryName": "Vendosni emër për kategorinë",
+ "hitEnterToCreate": "Shtyp Enter për të krijuar!",
+ "enterNotes": "Shënime",
+ "youCanManageClientsUnderSettings": "Mund të menaxhoni klientët nën Cilësimet",
+ "addCategory": "Shto kategori projektit",
+ "newCategory": "Kategori e Re",
+ "notes": "Shënime",
+ "startDate": "Data e Fillimit",
+ "endDate": "Data e Përfundimit",
+ "estimateWorkingDays": "Vlerëso ditët e punës",
+ "estimateManDays": "Vlerëso ditët e punëtorëve",
+ "hoursPerDay": "Orë në ditë",
+ "create": "Krijo",
+ "update": "Përditëso",
+ "delete": "Fshi",
+ "typeToSearchClients": "Shkruani për të kërkuar klientë",
+ "projectColor": "Ngjyra e Projektit",
+ "pleaseEnterAName": "Ju lutemi vendosni një emër",
+ "enterProjectName": "Vendosni emrin e projektit",
+ "name": "Emri",
+ "status": "Statusi",
+ "health": "Gjendja",
+ "category": "Kategoria",
+ "projectManager": "Menaxheri i Projektit",
+ "client": "Klienti",
+ "deleteConfirmation": "Jeni i sigurt që doni të fshini?",
+ "deleteConfirmationDescription": "Kjo do të fshijë të gjitha të dhënat e lidhura dhe nuk mund të zhbëhet.",
+ "yes": "Po",
+ "no": "Jo",
+ "createdAt": "Krijuar më",
+ "updatedAt": "Përditësuar më",
+ "by": "nga",
+ "add": "Shto",
+ "asClient": "si klient",
+ "createClient": "Krijo klient",
+ "searchInputPlaceholder": "Kërko sipas emrit ose emailit",
+ "hoursPerDayValidationMessage": "Orët në ditë duhet të jenë një numër midis 1 dhe 24",
+ "noPermission": "Nuk ka leje"
+}
diff --git a/worklenz-frontend/public/locales/alb/project-view-files.json b/worklenz-frontend/public/locales/alb/project-view-files.json
new file mode 100644
index 00000000..1a49c36a
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/project-view-files.json
@@ -0,0 +1,14 @@
+{
+ "nameColumn": "Emri",
+ "attachedTaskColumn": "Detyra e Bashkangjitur",
+ "sizeColumn": "Madhësia",
+ "uploadedByColumn": "Ngarkuar Nga",
+ "uploadedAtColumn": "Ngarkuar Më",
+ "fileIconAlt": "Ikona e skedarit",
+ "titleDescriptionText": "Të gjitha bashkëngjitjet e detyrave në këtë projekt do të shfahen këtu.",
+ "deleteConfirmationTitle": "Jeni i sigurt?",
+ "deleteConfirmationOk": "Po",
+ "deleteConfirmationCancel": "Anulo",
+ "segmentedTooltip": "Së shpejti! Kaloni midis pamjes listë dhe pamjes miniaturash.",
+ "emptyText": "Nuk ka bashkëngjitje në projekt."
+}
diff --git a/worklenz-frontend/public/locales/alb/project-view-insights.json b/worklenz-frontend/public/locales/alb/project-view-insights.json
new file mode 100644
index 00000000..c7714578
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/project-view-insights.json
@@ -0,0 +1,41 @@
+{
+ "overview": {
+ "title": "Përmbledhje",
+ "statusOverview": "Përmbledhje Statusi",
+ "priorityOverview": "Përmbledhje Prioriteti",
+ "lastUpdatedTasks": "Detyrat e Përditësuara Së Fundi"
+ },
+ "members": {
+ "title": "Anëtarët",
+ "tooltip": "Anëtarët",
+ "tasksByMembers": "Detyrat sipas anëtarëve",
+ "tasksByMembersTooltip": "Detyrat sipas anëtarëve",
+ "name": "Emri",
+ "taskCount": "Numri i Detyrave",
+ "contribution": "Kontributi",
+ "completed": "Të Përfunduara",
+ "incomplete": "Të Papërfunduara",
+ "overdue": "Të Vonuara",
+ "progress": "Progresi"
+ },
+ "tasks": {
+ "overdueTasks": "Detyrat e Vonuara",
+ "overLoggedTasks": "Detyrat me regjistrim të tepërt",
+ "tasksCompletedEarly": "Detyrat e përfunduara para afatit",
+ "tasksCompletedLate": "Detyrat e përfunduara pas afatit",
+ "overLoggedTasksTooltip": "Detyrat me kohë të regjistruar mbi kohën e vlerësuar",
+ "overdueTasksTooltip": "Detyrat që kanë kaluar afatin e tyre"
+ },
+ "common": {
+ "seeAll": "Shiko të gjitha",
+ "totalLoggedHours": "Orët totale të regjistruara",
+ "totalEstimation": "Vlerësimi total",
+ "completedTasks": "Detyrat e përfunduara",
+ "incompleteTasks": "Detyrat e papërfunduara",
+ "overdueTasks": "Detyrat e vonuara",
+ "overdueTasksTooltip": "Detyrat që kanë kaluar afatin e tyre",
+ "totalLoggedHoursTooltip": "Vlerësimi dhe koha e regjistruar për detyrat.",
+ "includeArchivedTasks": "Përfshi Detyrat e Arkivuara",
+ "export": "Eksporto"
+ }
+}
diff --git a/worklenz-frontend/public/locales/alb/project-view-members.json b/worklenz-frontend/public/locales/alb/project-view-members.json
new file mode 100644
index 00000000..239b77e9
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/project-view-members.json
@@ -0,0 +1,17 @@
+{
+ "nameColumn": "Emri",
+ "jobTitleColumn": "Titulli i Punës",
+ "emailColumn": "Email",
+ "tasksColumn": "Detyrat",
+ "taskProgressColumn": "Progresi i Detyrave",
+ "accessColumn": "Qasja",
+ "fileIconAlt": "Ikona e skedarit",
+ "deleteConfirmationTitle": "Jeni i sigurt?",
+ "deleteConfirmationOk": "Po",
+ "deleteConfirmationCancel": "Anulo",
+ "refreshButtonTooltip": "Rifresko anëtarët",
+ "deleteButtonTooltip": "Hiq nga projekti",
+ "memberCount": "Anëtar",
+ "membersCountPlural": "Anëtarë",
+ "emptyText": "Nuk ka bashkëngjitje në projekt."
+}
diff --git a/worklenz-frontend/public/locales/alb/project-view-updates.json b/worklenz-frontend/public/locales/alb/project-view-updates.json
new file mode 100644
index 00000000..15a4ec1c
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/project-view-updates.json
@@ -0,0 +1,6 @@
+{
+ "inputPlaceholder": "Shto një koment..",
+ "addButton": "Shto",
+ "cancelButton": "Anulo",
+ "deleteButton": "Fshi"
+}
diff --git a/worklenz-frontend/public/locales/alb/project-view/import-task-templates.json b/worklenz-frontend/public/locales/alb/project-view/import-task-templates.json
new file mode 100644
index 00000000..fab0381b
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/project-view/import-task-templates.json
@@ -0,0 +1,11 @@
+{
+ "importTaskTemplate": "Importo Shabllon Detyrash",
+ "templateName": "Emri i Shabllonit",
+ "templateDescription": "Përshkrimi i Shabllonit",
+ "selectedTasks": "Detyrat e Përzgjedhura",
+ "tasks": "Detyrat",
+ "templates": "Shabllonet",
+ "remove": "Hiq",
+ "cancel": "Anulo",
+ "import": "Importo"
+}
diff --git a/worklenz-frontend/public/locales/alb/project-view/project-member-drawer.json b/worklenz-frontend/public/locales/alb/project-view/project-member-drawer.json
new file mode 100644
index 00000000..aa6637e1
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/project-view/project-member-drawer.json
@@ -0,0 +1,7 @@
+{
+ "title": "Anëtarët e Projektit",
+ "searchLabel": "Shtoni anëtarë duke shkruar emrin ose email-in e tyre",
+ "searchPlaceholder": "Shkruani emrin ose email-in",
+ "inviteAsAMember": "Fto si anëtar",
+ "inviteNewMemberByEmail": "Fto anëtar të ri me email"
+}
diff --git a/worklenz-frontend/public/locales/alb/project-view/project-view-header.json b/worklenz-frontend/public/locales/alb/project-view/project-view-header.json
new file mode 100644
index 00000000..8d7b9d39
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/project-view/project-view-header.json
@@ -0,0 +1,13 @@
+{
+ "importTasks": "Importo detyra",
+ "createTask": "Krijo detyrë",
+ "settings": "Cilësimet",
+ "subscribe": "Abonohu",
+ "unsubscribe": "Ç'abonohu",
+ "deleteProject": "Fshi projektin",
+ "startDate": "Data e fillimit",
+ "endDate": "Data e përfundimit",
+ "projectSettings": "Cilësimet e projektit",
+ "projectSummary": "Përmbledhja e projektit",
+ "receiveProjectSummary": "Merrni një përmbledhje të projektit çdo mbrëmje."
+}
diff --git a/worklenz-frontend/public/locales/alb/project-view/save-as-template.json b/worklenz-frontend/public/locales/alb/project-view/save-as-template.json
new file mode 100644
index 00000000..63d7ace8
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/project-view/save-as-template.json
@@ -0,0 +1,27 @@
+{
+ "title": "Ruaj si Shabllon",
+ "templateName": "Emri i Shabllonit",
+ "includes": "Çfarë duhet të përfshihet në shabllon nga projekti?",
+ "includesOptions": {
+ "statuses": "Statuset",
+ "phases": "Fazat",
+ "labels": "Etiketat"
+ },
+ "taskIncludes": "Çfarë duhet të përfshihet në shabllon nga detyrat?",
+ "taskIncludesOptions": {
+ "statuses": "Statuset",
+ "phases": "Fazat",
+ "labels": "Etiketat",
+ "name": "Emri",
+ "priority": "Prioriteti",
+ "status": "Statusi",
+ "phase": "Faza",
+ "label": "Etiketa",
+ "timeEstimate": "Vlerësimi i Kohës",
+ "description": "Përshkrimi",
+ "subTasks": "Nëndetyrat"
+ },
+ "cancel": "Anulo",
+ "save": "Ruaj",
+ "templateNamePlaceholder": "Shkruani emrin e shabllonit"
+}
diff --git a/worklenz-frontend/public/locales/alb/reporting-members-drawer.json b/worklenz-frontend/public/locales/alb/reporting-members-drawer.json
new file mode 100644
index 00000000..899e590e
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/reporting-members-drawer.json
@@ -0,0 +1,90 @@
+{
+ "exportButton": "Eksporto",
+ "timeLogsButton": "Regjistrimet e Kohës",
+ "activityLogsButton": "Regjistrimet e Aktivitetit",
+ "tasksButton": "Detyrat",
+ "searchByNameInputPlaceholder": "Kërko sipas emrit",
+
+ "overviewTab": "Përmbledhje",
+ "timeLogsTab": "Regjistrimet e Kohës",
+ "activityLogsTab": "Regjistrimet e Aktivitetit",
+ "tasksTab": "Detyrat",
+
+ "projectsText": "Projektet",
+ "totalTasksText": "Detyrat Gjithsej",
+ "assignedTasksText": "Detyrat e Caktuara",
+ "completedTasksText": "Detyrat e Përfunduara",
+ "ongoingTasksText": "Detyrat në Vazhdim",
+ "overdueTasksText": "Detyrat e Vonuara",
+ "loggedHoursText": "Orët e Regjistruara",
+
+ "tasksText": "Detyrat",
+ "allText": "Të Gjitha",
+
+ "tasksByProjectsText": "Detyrat Sipas Projekteve",
+ "tasksByStatusText": "Detyrat Sipas Statusit",
+ "tasksByPriorityText": "Detyrat Sipas Prioritetit",
+
+ "todoText": "Për Të Bërë",
+ "doingText": "Duke bërë",
+ "doneText": "E Përfunduar",
+ "lowText": "I Ulët",
+ "mediumText": "I Mesëm",
+ "highText": "I Lartë",
+
+ "billableButton": "Fakturueshme",
+ "billableText": "Fakturueshme",
+ "nonBillableText": "Jo Fakturueshme",
+
+ "timeLogsEmptyPlaceholder": "Asnjë regjistrim kohe për të shfaqur",
+ "loggedText": "Regjistruar",
+ "forText": "për",
+ "inText": "në",
+ "updatedText": "Përditësuar",
+ "fromText": "Nga",
+ "toText": "në",
+ "withinText": "brenda",
+
+ "activityLogsEmptyPlaceholder": "Asnjë regjistrim aktiviteti për të shfaqur",
+
+ "filterByText": "Filtro sipas:",
+ "selectProjectPlaceholder": "Zgjidh Projektin",
+
+ "taskColumn": "Detyra",
+ "nameColumn": "Emri",
+ "projectColumn": "Projekti",
+ "statusColumn": "Statusi",
+ "priorityColumn": "Prioriteti",
+ "dueDateColumn": "Afati",
+ "completedDateColumn": "Data e Përfundimit",
+ "estimatedTimeColumn": "Koha e Vlerësuar",
+ "loggedTimeColumn": "Koha e Regjistruar",
+ "overloggedTimeColumn": "Koha e Tepërt",
+ "daysLeftColumn": "Ditë të Mbetura/Vonuar",
+ "startDateColumn": "Data e Fillimit",
+ "endDateColumn": "Data e Përfundimit",
+ "actualTimeColumn": "Koha Aktuale",
+ "projectHealthColumn": "Gjendja e Projektit",
+ "categoryColumn": "Kategoria",
+ "projectManagerColumn": "Menaxheri i Projektit",
+
+ "tasksStatsOverviewDrawerTitle": "Detyrat e ",
+ "projectsStatsOverviewDrawerTitle": "Projektet e ",
+
+ "cancelledText": "Anuluar",
+ "blockedText": "E Bllokuar",
+ "onHoldText": "Në Pritje",
+ "proposedText": "E Propozuar",
+ "inPlanningText": "Në Planifikim",
+ "inProgressText": "Në Progres",
+ "completedText": "E Përfunduar",
+ "continuousText": "E Vazhdueshme",
+
+ "daysLeftText": "ditë të mbetura",
+ "daysOverdueText": "ditë vonuar",
+
+ "notSetText": "Pa Caktuar",
+ "needsAttentionText": "Kërkon Vëmendje",
+ "atRiskText": "Në Rrezik",
+ "goodText": "Në Rregull"
+}
diff --git a/worklenz-frontend/public/locales/alb/reporting-members.json b/worklenz-frontend/public/locales/alb/reporting-members.json
new file mode 100644
index 00000000..d88f0662
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/reporting-members.json
@@ -0,0 +1,35 @@
+{
+ "yesterdayText": "Dje",
+ "lastSevenDaysText": "7 Ditët e Fundit",
+ "lastWeekText": "Javën e Kaluar",
+ "lastThirtyDaysText": "30 Ditët e Fundit",
+ "lastMonthText": "Muajin e Kaluar",
+ "lastThreeMonthsText": "3 Muajt e Fundit",
+ "allTimeText": "Të Gjitha",
+ "customRangeText": "Interval i Përshtatur",
+ "startDateInputPlaceholder": "Data e fillimit",
+ "EndDateInputPlaceholder": "Data e përfundimit",
+ "filterButton": "Filtro",
+
+ "membersTitle": "Anëtarët",
+ "includeArchivedButton": "Përfshij Projektet e Arkivuara",
+ "exportButton": "Eksporto",
+ "excelButton": "Excel",
+ "searchByNameInputPlaceholder": "Kërko sipas emrit",
+
+ "memberColumn": "Anëtari",
+ "tasksProgressColumn": "Progresi i Detyrave",
+ "tasksAssignedColumn": "Detyrat e Caktuara",
+ "completedTasksColumn": "Detyrat e Përfunduara",
+ "overdueTasksColumn": "Detyrat e Vonuara",
+ "ongoingTasksColumn": "Detyrat në Vazhdim",
+
+ "tasksAssignedColumnTooltip": "Detyrat e caktuara në intervalin e zgjedhur",
+ "overdueTasksColumnTooltip": "Detyrat e vonuara deri në fund të intervalit të zgjedhur",
+ "completedTasksColumnTooltip": "Detyrat e përfunduara në intervalin e zgjedhur",
+ "ongoingTasksColumnTooltip": "Detyrat e filluara por jo të përfunduara ende",
+
+ "todoText": "Për Të Bërë",
+ "doingText": "Duke bërë",
+ "doneText": "E Përfunduar"
+}
diff --git a/worklenz-frontend/public/locales/alb/reporting-overview-drawer.json b/worklenz-frontend/public/locales/alb/reporting-overview-drawer.json
new file mode 100644
index 00000000..9e4d9186
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/reporting-overview-drawer.json
@@ -0,0 +1,39 @@
+{
+ "exportButton": "Eksporto",
+ "projectsButton": "Projektet",
+ "membersButton": "Anëtarët",
+ "searchByNameInputPlaceholder": "Kërko sipas emrit",
+
+ "overviewTab": "Përmbledhje",
+ "projectsTab": "Projektet",
+ "membersTab": "Anëtarët",
+
+ "projectsByStatusText": "Projektet Sipas Statusit",
+ "projectsByCategoryText": "Projektet Sipas Kategorisë",
+ "projectsByHealthText": "Projektet Sipas Gjendjes",
+
+ "projectsText": "Projektet",
+ "allText": "Të Gjitha",
+
+ "cancelledText": "Anuluar",
+ "blockedText": "E Bllokuar",
+ "onHoldText": "Në Pritje",
+ "proposedText": "E Propozuar",
+ "inPlanningText": "Në Planifikim",
+ "inProgressText": "Në Progres",
+ "completedText": "E Përfunduar",
+ "continuousText": "E Vazhdueshme",
+
+ "notSetText": "Pa Caktuar",
+ "needsAttentionText": "Kërkon Vëmendje",
+ "atRiskText": "Në Rrezik",
+ "goodText": "Në Rregull",
+
+ "nameColumn": "Emri",
+ "emailColumn": "Email",
+ "projectsColumn": "Projektet",
+ "tasksColumn": "Detyrat",
+ "overdueTasksColumn": "Detyrat e Vonuara",
+ "completedTasksColumn": "Detyrat e Përfunduara",
+ "ongoingTasksColumn": "Detyrat në Vazhdim"
+}
diff --git a/worklenz-frontend/public/locales/alb/reporting-overview.json b/worklenz-frontend/public/locales/alb/reporting-overview.json
new file mode 100644
index 00000000..b8977912
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/reporting-overview.json
@@ -0,0 +1,25 @@
+{
+ "overviewTitle": "Përmbledhje",
+ "includeArchivedButton": "Përfshij Projektet e Arkivuara",
+
+ "teamCount": "Ekip",
+ "teamCountPlural": "Ekipe",
+ "projectCount": "Projekt",
+ "projectCountPlural": "Projekte",
+ "memberCount": "Anëtar",
+ "memberCountPlural": "Anëtarë",
+ "activeProjectCount": "Projekt Aktiv",
+ "activeProjectCountPlural": "Projekte Aktive",
+ "overdueProjectCount": "Projekt i Vonuar",
+ "overdueProjectCountPlural": "Projekte të Vonuara",
+ "unassignedMemberCount": "Anëtar i Pacaktuar",
+ "unassignedMemberCountPlural": "Anëtarë të Pacaktuar",
+ "memberWithOverdueTaskCount": "Anëtar me Detyrë të Vonuar",
+ "memberWithOverdueTaskCountPlural": "Anëtarë me Detyra të Vonuara",
+
+ "teamsText": "Ekipet",
+
+ "nameColumn": "Emri",
+ "projectsColumn": "Projektet",
+ "membersColumn": "Anëtarët"
+}
diff --git a/worklenz-frontend/public/locales/alb/reporting-projects-drawer.json b/worklenz-frontend/public/locales/alb/reporting-projects-drawer.json
new file mode 100644
index 00000000..fd3a380c
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/reporting-projects-drawer.json
@@ -0,0 +1,59 @@
+{
+ "exportButton": "Eksporto",
+ "membersButton": "Anëtarët",
+ "tasksButton": "Detyrat",
+ "searchByNameInputPlaceholder": "Kërko sipas emrit",
+
+ "overviewTab": "Përmbledhje",
+ "membersTab": "Anëtarët",
+ "tasksTab": "Detyrat",
+
+ "completedTasksText": "Detyrat e Përfunduara",
+ "incompleteTasksText": "Detyrat e Papërfunduara",
+ "overdueTasksText": "Detyrat e Vonuara",
+ "allocatedHoursText": "Orët e Alokuara",
+ "loggedHoursText": "Orët e Regjistruara",
+
+ "tasksText": "Detyrat",
+ "allText": "Të Gjitha",
+
+ "tasksByStatusText": "Detyrat Sipas Statusit",
+ "tasksByPriorityText": "Detyrat Sipas Prioritetit",
+ "tasksByDueDateText": "Detyrat Sipas Afatit",
+
+ "todoText": "Për Të Bërë",
+ "doingText": "Duke bërë",
+ "doneText": "E Përfunduar",
+ "lowText": "I Ulët",
+ "mediumText": "I Mesëm",
+ "highText": "I Lartë",
+ "completedText": "E Përfunduar",
+ "upcomingText": "Në Ardhje",
+ "overdueText": "E Vonuar",
+ "noDueDateText": "Pa Afat",
+
+ "nameColumn": "Emri",
+ "tasksCountColumn": "Numri i Detyrave",
+ "completedTasksColumn": "Detyrat e Përfunduara",
+ "incompleteTasksColumn": "Detyrat e Papërfunduara",
+ "overdueTasksColumn": "Detyrat e Vonuara",
+ "contributionColumn": "Kontributi",
+ "progressColumn": "Progresi",
+ "loggedTimeColumn": "Koha e Regjistruar",
+ "taskColumn": "Detyra",
+ "projectColumn": "Projekti",
+ "statusColumn": "Statusi",
+ "priorityColumn": "Prioriteti",
+ "phaseColumn": "Faza",
+ "dueDateColumn": "Afati",
+ "completedDateColumn": "Data e Përfundimit",
+ "estimatedTimeColumn": "Koha e Vlerësuar",
+ "overloggedTimeColumn": "Koha e Tepërt",
+ "completedOnColumn": "Përfunduar Më",
+ "daysOverdueColumn": "Ditë vonim",
+
+ "groupByText": "Grupo Sipas:",
+ "statusText": "Statusi",
+ "priorityText": "Prioriteti",
+ "phaseText": "Faza"
+}
diff --git a/worklenz-frontend/public/locales/alb/reporting-projects-filters.json b/worklenz-frontend/public/locales/alb/reporting-projects-filters.json
new file mode 100644
index 00000000..614d57f3
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/reporting-projects-filters.json
@@ -0,0 +1,35 @@
+{
+ "searchByNamePlaceholder": "Kërko sipas emrit",
+ "searchByCategoryPlaceholder": "Kërko sipas kategorisë",
+
+ "statusText": "Statusi",
+ "healthText": "Gjendja",
+ "categoryText": "Kategoria",
+ "projectManagerText": "Menaxheri i Projektit",
+ "showFieldsText": "Shfaq fushat",
+
+ "cancelledText": "Anuluar",
+ "blockedText": "E bllokuar",
+ "onHoldText": "Në pritje",
+ "proposedText": "E propozuar",
+ "inPlanningText": "Në planifikim",
+ "inProgressText": "Në progres",
+ "completedText": "E përfunduar",
+ "continuousText": "E vazhdueshme",
+
+ "notSetText": "Pa caktuar",
+ "needsAttentionText": "Kërkon vëmendje",
+ "atRiskText": "Në rrezik",
+ "goodText": "Në rregull",
+
+ "nameText": "Projekti",
+ "estimatedVsActualText": "Vlerësuar vs Aktual",
+ "tasksProgressText": "Progresi i detyrave",
+ "lastActivityText": "Aktiviteti i fundit",
+ "datesText": "Datat e Fillimit/Përfundimit",
+ "daysLeftText": "Ditë të mbetura/vonuar",
+ "projectHealthText": "Gjendja e projektit",
+ "projectUpdateText": "Përditësimi i projektit",
+ "clientText": "Klienti",
+ "teamText": "Ekipi"
+}
diff --git a/worklenz-frontend/public/locales/alb/reporting-projects.json b/worklenz-frontend/public/locales/alb/reporting-projects.json
new file mode 100644
index 00000000..c10e8f7a
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/reporting-projects.json
@@ -0,0 +1,52 @@
+{
+ "projectCount": "Projekt",
+ "projectCountPlural": "Projekte",
+ "includeArchivedButton": "Përfshij Projektet e Arkivuara",
+ "exportButton": "Eksporto",
+ "excelButton": "Excel",
+
+ "projectColumn": "Projekti",
+ "estimatedVsActualColumn": "Vlerësuar vs Aktual",
+ "tasksProgressColumn": "Progresi i Detyrave",
+ "lastActivityColumn": "Aktiviteti i Fundit",
+ "statusColumn": "Statusi",
+ "datesColumn": "Data e Fillimit/Përfundimit",
+ "daysLeftColumn": "Ditë të Mbetura/Vonuar",
+ "projectHealthColumn": "Gjendja e Projektit",
+ "categoryColumn": "Kategoria",
+ "projectUpdateColumn": "Përditësimi i Projektit",
+ "clientColumn": "Klienti",
+ "teamColumn": "Ekipi",
+ "projectManagerColumn": "Menaxheri i Projektit",
+
+ "openButton": "Hap",
+
+ "estimatedText": "Vlerësuar",
+ "actualText": "Aktual",
+
+ "todoText": "Për të Bërë",
+ "doingText": "duke bërë",
+ "doneText": "E Përfunduar",
+
+ "cancelledText": "Anuluar",
+ "blockedText": "E Bllokuar",
+ "onHoldText": "Në Pritje",
+ "proposedText": "E Propozuar",
+ "inPlanningText": "Në Planifikim",
+ "inProgressText": "Në Progres",
+ "completedText": "E Përfunduar",
+ "continuousText": "E Vazhdueshme",
+
+ "daysLeftText": "ditë të mbetura",
+ "dayLeftText": "ditë e mbetur",
+ "daysOverdueText": "ditë vonuar",
+
+ "notSetText": "Pa Caktuar",
+ "needsAttentionText": "Kërkon Vëmendje",
+ "atRiskText": "Në Rrezik",
+ "goodText": "Në Rregull",
+
+ "setCategoryText": "Cakto Kategorinë",
+ "searchByNameInputPlaceholder": "Kërko sipas emrit",
+ "todayText": "Sot"
+}
diff --git a/worklenz-frontend/public/locales/alb/reporting-sidebar.json b/worklenz-frontend/public/locales/alb/reporting-sidebar.json
new file mode 100644
index 00000000..a8c14e68
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/reporting-sidebar.json
@@ -0,0 +1,8 @@
+{
+ "overview": "Përmbledhje",
+ "projects": "Projektet",
+ "members": "Anëtarët",
+ "timeReports": "Raportet e Kohës",
+ "estimateVsActual": "Vlerësimi vs Aktual",
+ "currentOrganizationTooltip": "Organizata aktuale"
+}
diff --git a/worklenz-frontend/public/locales/alb/schedule.json b/worklenz-frontend/public/locales/alb/schedule.json
new file mode 100644
index 00000000..a5670aaa
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/schedule.json
@@ -0,0 +1,39 @@
+{
+ "today": "Sot",
+ "week": "Javë",
+ "month": "Muaj",
+
+ "settings": "Cilësimet",
+ "workingDays": "Ditët e punës",
+ "monday": "E hënë",
+ "tuesday": "E martë",
+ "wednesday": "E mërkurë",
+ "thursday": "E enjte",
+ "friday": "E premte",
+ "saturday": "E shtunë",
+ "sunday": "E diel",
+ "workingHours": "Orët e punës",
+ "hours": "Orë",
+ "saveButton": "Ruaj",
+
+ "totalAllocation": "Alokimi Total",
+ "timeLogged": "Koha e Regjistruar",
+ "remainingTime": "Koha e Mbetur",
+ "total": "Total",
+ "perDay": "Në Ditë",
+ "tasks": "detyra",
+ "startDate": "Data e Fillimit",
+ "endDate": "Data e Përfundimit",
+
+ "hoursPerDay": "Orë Në Ditë",
+ "totalHours": "Orë Totale",
+ "deleteButton": "Fshi",
+ "cancelButton": "Anulo",
+
+ "tabTitle": "Detyra pa Data Fillimi & Përfundimi",
+
+ "allocatedTime": "Koha e alokuar",
+ "totalLogged": "Total i Regjistruar",
+ "loggedBillable": "Regjistruar Fakturueshme",
+ "loggedNonBillable": "Regjistruar Jo Fakturueshme"
+}
diff --git a/worklenz-frontend/public/locales/alb/settings/categories.json b/worklenz-frontend/public/locales/alb/settings/categories.json
new file mode 100644
index 00000000..62eb60d5
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/settings/categories.json
@@ -0,0 +1,10 @@
+{
+ "categoryColumn": "Kategoria",
+ "deleteConfirmationTitle": "Jeni të sigurt?",
+ "deleteConfirmationOk": "Po",
+ "deleteConfirmationCancel": "Anulo",
+ "associatedTaskColumn": "Projektet e Lidhura",
+ "searchPlaceholder": "Kërko sipas emrit",
+ "emptyText": "Kategoritë mund të krijohen gjatë përditësimit ose krijimit të projekteve.",
+ "colorChangeTooltip": "Klikoni për të ndryshuar ngjyrën"
+}
diff --git a/worklenz-frontend/public/locales/alb/settings/change-password.json b/worklenz-frontend/public/locales/alb/settings/change-password.json
new file mode 100644
index 00000000..ac1500bd
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/settings/change-password.json
@@ -0,0 +1,15 @@
+{
+ "title": "Ndrysho Fjalëkalimin",
+ "currentPassword": "Fjalëkalimi Aktual",
+ "newPassword": "Fjalëkalimi i Ri",
+ "confirmPassword": "Konfirmo Fjalëkalimin",
+ "currentPasswordPlaceholder": "Vendosni fjalëkalimin aktual",
+ "newPasswordPlaceholder": "Fjalëkalimi i Ri",
+ "confirmPasswordPlaceholder": "Konfirmo Fjalëkalimin",
+ "currentPasswordRequired": "Ju lutemi vendosni fjalëkalimin aktual!",
+ "newPasswordRequired": "Ju lutemi vendosni fjalëkalimin e ri!",
+ "passwordValidationError": "Fjalëkalimi duhet të përmbajë të paktën 8 karaktere, me një shkronjë të madhe, një numër dhe një simbol.",
+ "passwordMismatch": "Fjalëkalimet nuk përputhen!",
+ "passwordRequirements": "Fjalëkalimi i ri duhet të jetë së paku 8 karaktere, me një shkronjë të madhe, një numër dhe një simbol.",
+ "updateButton": "Përditëso Fjalëkalimin"
+}
diff --git a/worklenz-frontend/public/locales/alb/settings/clients.json b/worklenz-frontend/public/locales/alb/settings/clients.json
new file mode 100644
index 00000000..72407a5e
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/settings/clients.json
@@ -0,0 +1,22 @@
+{
+ "nameColumn": "Emri",
+ "projectColumn": "Projekti",
+ "noProjectsAvailable": "Nuk ka projekte të disponueshme",
+ "deleteConfirmationTitle": "Jeni i sigurt?",
+ "deleteConfirmationOk": "Po",
+ "deleteConfirmationCancel": "Anulo",
+ "searchPlaceholder": "Kërko sipas emrit",
+ "createClient": "Krijo Klient",
+ "pinTooltip": "Klikoni për ta fiksuar në menynë kryesore",
+ "createClientDrawerTitle": "Krijo Klient",
+ "updateClientDrawerTitle": "Përditëso Klientin",
+ "nameLabel": "Emri",
+ "namePlaceholder": "Emri",
+ "nameRequiredError": "Ju lutemi shkruani një Emër",
+ "createButton": "Krijo",
+ "updateButton": "Përditëso",
+ "createClientSuccessMessage": "Klienti u krijua me sukses!",
+ "createClientErrorMessage": "Krijimi i klientit dështoi!",
+ "updateClientSuccessMessage": "Klienti u përditësua me sukses!",
+ "updateClientErrorMessage": "Përditësimi i klientit dështoi!"
+}
diff --git a/worklenz-frontend/public/locales/alb/settings/job-titles.json b/worklenz-frontend/public/locales/alb/settings/job-titles.json
new file mode 100644
index 00000000..a464716a
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/settings/job-titles.json
@@ -0,0 +1,20 @@
+{
+ "nameColumn": "Emri",
+ "deleteConfirmationTitle": "Jeni i sigurt?",
+ "deleteConfirmationOk": "Po",
+ "deleteConfirmationCancel": "Anulo",
+ "searchPlaceholder": "Kërko sipas emrit",
+ "createJobTitleButton": "Krijo Titull Pune",
+ "pinTooltip": "Klikoni për ta fiksuar në menynë kryesore",
+ "createJobTitleDrawerTitle": "Krijo Titull Pune",
+ "updateJobTitleDrawerTitle": "Përditëso Titullin e Punës",
+ "nameLabel": "Emri",
+ "namePlaceholder": "Emri",
+ "nameRequiredError": "Ju lutemi shkruani një Emër",
+ "createButton": "Krijo",
+ "updateButton": "Përditëso",
+ "createJobTitleSuccessMessage": "Titulli i punës u krijua me sukses!",
+ "createJobTitleErrorMessage": "Krijimi i titullit të punës dështoi!",
+ "updateJobTitleSuccessMessage": "Titulli i punës u përditësua me sukses!",
+ "updateJobTitleErrorMessage": "Përditësimi i titullit të punës dështoi!"
+}
diff --git a/worklenz-frontend/public/locales/alb/settings/labels.json b/worklenz-frontend/public/locales/alb/settings/labels.json
new file mode 100644
index 00000000..40e6361b
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/settings/labels.json
@@ -0,0 +1,11 @@
+{
+ "labelColumn": "Etiketa",
+ "deleteConfirmationTitle": "Jeni i sigurt?",
+ "deleteConfirmationOk": "Po",
+ "deleteConfirmationCancel": "Anulo",
+ "associatedTaskColumn": "Numri i Detyrave të Lidhura",
+ "searchPlaceholder": "Kërko sipas emrit",
+ "emptyText": "Etiketat mund të krijohen gjatë përditësimit ose krijimit të detyrave.",
+ "pinTooltip": "Klikoni për ta fiksuar në menynë kryesore",
+ "colorChangeTooltip": "Klikoni për të ndryshuar ngjyrën"
+}
diff --git a/worklenz-frontend/public/locales/alb/settings/language.json b/worklenz-frontend/public/locales/alb/settings/language.json
new file mode 100644
index 00000000..7c0d3756
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/settings/language.json
@@ -0,0 +1,7 @@
+{
+ "language": "Gjuha",
+ "language_required": "Gjuha është e detyrueshme",
+ "time_zone": "Zona kohore",
+ "time_zone_required": "Zona kohore është e detyrueshme",
+ "save_changes": "Ruaj Ndryshimet"
+}
diff --git a/worklenz-frontend/public/locales/alb/settings/notifications.json b/worklenz-frontend/public/locales/alb/settings/notifications.json
new file mode 100644
index 00000000..4bfd55b2
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/settings/notifications.json
@@ -0,0 +1,11 @@
+{
+ "title": "Cilësimet e Njoftimeve",
+ "emailTitle": "Më dërgo njoftime me email",
+ "emailDescription": "Kjo përfshin caktimet e reja të detyrave",
+ "dailyDigestTitle": "Më dërgo një përmbledhje ditore",
+ "dailyDigestDescription": "Çdo mbrëmje, do të merrni një përmbledhje të aktivitetit të fundit në detyra.",
+ "popupTitle": "Shfaq njoftimet në kompjuterin tim kur Worklenz është i hapur",
+ "popupDescription": "Njoftimet e shfaqura mund të çaktivizohen nga shfletuesi juaj. Ndryshoni cilësimet e shfletuesit për t'i lejuar ato.",
+ "unreadItemsTitle": "Shfaq numrin e artikujve të palexuar",
+ "unreadItemsDescription": "Do të shihni numërimin për çdo njoftim."
+}
diff --git a/worklenz-frontend/public/locales/alb/settings/profile.json b/worklenz-frontend/public/locales/alb/settings/profile.json
new file mode 100644
index 00000000..c3ad210d
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/settings/profile.json
@@ -0,0 +1,13 @@
+{
+ "uploadError": "Mund të ngarkoni vetëm skedarë JPG/PNG!",
+ "uploadSizeError": "Imazhi duhet të jetë më i vogël se 2MB!",
+ "upload": "Ngarko",
+ "nameLabel": "Emri",
+ "nameRequiredError": "Emri është i detyrueshëm",
+ "emailLabel": "Email",
+ "emailRequiredError": "Email-i është i detyrueshëm",
+ "saveChanges": "Ruaj Ndryshimet",
+ "profileJoinedText": "U bashkua një muaj më parë",
+ "profileLastUpdatedText": "Përditësuar një muaj më parë",
+ "avatarTooltip": "Klikoni për të ngarkuar një avatar"
+}
diff --git a/worklenz-frontend/public/locales/alb/settings/project-templates.json b/worklenz-frontend/public/locales/alb/settings/project-templates.json
new file mode 100644
index 00000000..ac0a87ef
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/settings/project-templates.json
@@ -0,0 +1,8 @@
+{
+ "nameColumn": "Emri",
+ "editToolTip": "Modifiko",
+ "deleteToolTip": "Fshi",
+ "confirmText": "Jeni i sigurt?",
+ "okText": "Po",
+ "cancelText": "Anulo"
+}
diff --git a/worklenz-frontend/public/locales/alb/settings/sidebar.json b/worklenz-frontend/public/locales/alb/settings/sidebar.json
new file mode 100644
index 00000000..a2b6dd2e
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/settings/sidebar.json
@@ -0,0 +1,14 @@
+{
+ "profile": "Profili",
+ "notifications": "Njoftimet",
+ "clients": "Klientët",
+ "job-titles": "Tituj Pune",
+ "labels": "Etiketa",
+ "categories": "Kategoritë",
+ "project-templates": "Shabllonet e Projekteve",
+ "task-templates": "Shabllonet e Detyrave",
+ "team-members": "Anëtarët e Ekipit",
+ "teams": "Ekipet",
+ "change-password": "Ndrysho Fjalëkalimin",
+ "language-and-region": "Gjuha dhe Rajoni"
+}
diff --git a/worklenz-frontend/public/locales/alb/settings/task-templates.json b/worklenz-frontend/public/locales/alb/settings/task-templates.json
new file mode 100644
index 00000000..b053027c
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/settings/task-templates.json
@@ -0,0 +1,9 @@
+{
+ "nameColumn": "Emri",
+ "createdColumn": "Krijuar",
+ "editToolTip": "Redakto",
+ "deleteToolTip": "Fshi",
+ "confirmText": "Jeni i sigurt?",
+ "okText": "Po",
+ "cancelText": "Anulo"
+}
diff --git a/worklenz-frontend/public/locales/alb/settings/team-members.json b/worklenz-frontend/public/locales/alb/settings/team-members.json
new file mode 100644
index 00000000..0ebdb3b5
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/settings/team-members.json
@@ -0,0 +1,44 @@
+{
+ "nameColumn": "Emri",
+ "projectsColumn": "Projektet",
+ "emailColumn": "Email",
+ "teamAccessColumn": "Qasja në Ekip",
+ "memberCount": "Anëtar",
+ "membersCountPlural": "Anëtarë",
+ "searchPlaceholder": "Kërko anëtarë sipas emrit",
+ "pinTooltip": "Rifresko listën e anëtarëve",
+ "addMemberButton": "Shto Anëtar të Ri",
+ "editTooltip": "Modifiko anëtarin",
+ "deactivateTooltip": "Çaktivizo anëtarin",
+ "activateTooltip": "Aktivizo anëtarin",
+ "deleteTooltip": "Fshi anëtarin",
+ "confirmDeleteTitle": "Jeni i sigurt që doni të fshini këtë anëtar?",
+ "confirmActivateTitle": "Jeni i sigurt që doni të ndryshoni statusin e këtij anëtari?",
+ "okText": "Po, vazhdo",
+ "cancelText": "Jo, anulo",
+ "deactivatedText": "(Aktualisht i çaktivizuar)",
+ "pendingInvitationText": "(Ftesë në pritje)",
+ "addMemberDrawerTitle": "Shto Anëtar të Ri në Ekip",
+ "updateMemberDrawerTitle": "Përditëso Anëtarin e Ekipit",
+ "addMemberEmailHint": "Anëtarët do të shtohen në ekip pavarësisht nga statusi i pranimit të ftesës",
+ "memberEmailLabel": "Email(o)",
+ "memberEmailPlaceholder": "Vendos adresën email të anëtarit të ekipit",
+ "memberEmailRequiredError": "Ju lutemi vendosni një adresë email të vlefshme",
+ "jobTitleLabel": "Titulli i Punës",
+ "jobTitlePlaceholder": "Zgjidh ose kërko titull pune (Opsionale)",
+ "memberAccessLabel": "Niveli i Qasjes",
+ "addToTeamButton": "Shto Anëtar në Ekip",
+ "updateButton": "Ruaj Ndryshimet",
+ "resendInvitationButton": "Dërgo Përsëri Email-in e Ftesës",
+ "invitationSentSuccessMessage": "Ftesa për ekip u dërgua me sukses!",
+ "createMemberSuccessMessage": "Anëtari i ri i ekipit u shtua me sukses!",
+ "createMemberErrorMessage": "Dështoi shtimi i anëtarit të ri. Ju lutemi provoni përsëri.",
+ "updateMemberSuccessMessage": "Anëtari i ekipit u përditësua me sukses!",
+ "updateMemberErrorMessage": "Dështoi përditësimi i anëtarit. Ju lutemi provoni përsëri.",
+ "memberText": "Anëtar",
+ "adminText": "Administrues",
+ "ownerText": "Pronar i Ekipit",
+ "addedText": "Shtuar",
+ "updatedText": "Përditësuar",
+ "noResultFound": "Shkruani një adresë email dhe shtypni Enter..."
+}
diff --git a/worklenz-frontend/public/locales/alb/task-drawer/task-drawer-info-tab.json b/worklenz-frontend/public/locales/alb/task-drawer/task-drawer-info-tab.json
new file mode 100644
index 00000000..75e1226a
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/task-drawer/task-drawer-info-tab.json
@@ -0,0 +1,29 @@
+{
+ "details": {
+ "task-key": "Çelësi i Detyrës",
+ "phase": "Faza",
+ "assignees": "Përgjegjësit",
+ "due-date": "Data e Përfundimit",
+ "time-estimation": "Vlerësimi i Kohës",
+ "priority": "Prioriteti",
+ "labels": "Etiketa",
+ "billable": "Fakturueshme",
+ "notify": "Njofto",
+ "when-done-notify": "Kur të përfundojë, njofto",
+ "start-date": "Data e Fillimit",
+ "end-date": "Data e Përfundimit",
+ "hide-start-date": "Fshih Datën e Fillimit",
+ "show-start-date": "Shfaq Datën e Fillimit",
+ "hours": "Orë",
+ "minutes": "Minuta"
+ },
+ "description": {
+ "title": "Përshkrimi",
+ "placeholder": "Shtoni një përshkrim më të detajuar..."
+ },
+ "subTasks": {
+ "title": "Nën-Detyrat",
+ "add-sub-task": "+ Shto Nën-Detyrë",
+ "refresh-sub-tasks": "Rifresko Nën-Detyrat"
+ }
+}
diff --git a/worklenz-frontend/public/locales/alb/task-drawer/task-drawer.json b/worklenz-frontend/public/locales/alb/task-drawer/task-drawer.json
new file mode 100644
index 00000000..d2f7ef99
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/task-drawer/task-drawer.json
@@ -0,0 +1,78 @@
+{
+ "taskHeader": {
+ "taskNamePlaceholder": "Shkruani detyrën tuaj",
+ "deleteTask": "Fshi Detyrën"
+ },
+ "taskInfoTab": {
+ "title": "Info",
+ "details": {
+ "title": "Detajet",
+ "task-key": "Çelësi i Detyrës",
+ "phase": "Faza",
+ "assignees": "Përgjegjësit",
+ "due-date": "Afati i Përfundimit",
+ "time-estimation": "Vlerësimi i Kohës",
+ "priority": "Prioriteti",
+ "labels": "Etiketa",
+ "billable": "Fakturueshme",
+ "notify": "Njofto",
+ "when-done-notify": "Kur të përfundojë, njofto",
+ "start-date": "Data e Fillimit",
+ "end-date": "Data e Përfundimit",
+ "hide-start-date": "Fshih Datën e Fillimit",
+ "show-start-date": "Shfaq Datën e Fillimit",
+ "hours": "Orë",
+ "minutes": "Minuta"
+ },
+ "labels": {
+ "labelInputPlaceholder": "Kërko ose krijo",
+ "labelsSelectorInputTip": "Shtyp Enter për të krijuar"
+ },
+ "description": {
+ "title": "Përshkrimi",
+ "placeholder": "Shtoni një përshkrim më të detajuar..."
+ },
+ "subTasks": {
+ "title": "Nën-Detyrat",
+ "addSubTask": "+ Shto Nën-Detyrë",
+ "addSubTaskInputPlaceholder": "Shkruani detyrën dhe shtypni Enter",
+ "refreshSubTasks": "Rifresko Nën-Detyrat",
+ "edit": "Modifiko",
+ "delete": "Fshi",
+ "confirmDeleteSubTask": "Jeni i sigurt që doni të fshini këtë nën-detyrë?",
+ "deleteSubTask": "Fshi Nën-Detyrën"
+ },
+ "dependencies": {
+ "title": "Varësitë",
+ "addDependency": "+ Shto varësi të re",
+ "blockedBy": "I bllokuar nga",
+ "searchTask": "Shkruani për të kërkuar detyra",
+ "noTasksFound": "Asnjë detyrë nuk u gjet",
+ "confirmDeleteDependency": "Jeni i sigurt që doni të fshini?"
+ },
+ "attachments": {
+ "title": "Bashkëngjitjet",
+ "chooseOrDropFileToUpload": "Zgjidhni ose lëshoni skedar për ngarkim",
+ "uploading": "Po ngarkohet..."
+ },
+ "comments": {
+ "title": "Komentet",
+ "addComment": "+ Shto koment të ri",
+ "noComments": "Asnjë koment ende. Bëhu i pari që komenton!",
+ "delete": "Fshi",
+ "confirmDeleteComment": "Jeni i sigurt që doni të fshini këtë koment?"
+ },
+ "searchInputPlaceholder": "Kërko sipas emrit",
+ "pendingInvitation": "Ftesë në Pritje"
+ },
+ "taskTimeLogTab": {
+ "title": "Regjistri i Kohës",
+ "addTimeLog": "Shto regjistrim të ri kohe",
+ "totalLogged": "Koha totale e regjistruar",
+ "exportToExcel": "Eksporto në Excel",
+ "noTimeLogsFound": "Asnjë regjistrim kohe nuk u gjet"
+ },
+ "taskActivityLogTab": {
+ "title": "Regjistri i Aktivitetit"
+ }
+}
diff --git a/worklenz-frontend/public/locales/alb/task-list-filters.json b/worklenz-frontend/public/locales/alb/task-list-filters.json
new file mode 100644
index 00000000..1e1b649d
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/task-list-filters.json
@@ -0,0 +1,59 @@
+{
+ "searchButton": "Kërko",
+ "resetButton": "Rivendos",
+ "searchInputPlaceholder": "Kërko sipas emrit",
+
+ "sortText": "Rendit",
+ "statusText": "Statusi",
+ "phaseText": "Faza",
+ "memberText": "Anëtarët",
+ "assigneesText": "Përgjegjësit",
+ "priorityText": "Prioriteti",
+ "labelsText": "Etiketa",
+ "membersText": "Anëtarët",
+ "groupByText": "Grupo sipas",
+ "showArchivedText": "Shfaq të arkivuara",
+ "showFieldsText": "Shfaq fushat",
+ "keyText": "Çelësi",
+ "taskText": "Detyra",
+ "descriptionText": "Përshkrimi",
+ "phasesText": "Fazat",
+ "listText": "Listë",
+ "progressText": "Progresi",
+ "timeTrackingText": "Gjurmimi i Kohës",
+ "timetrackingText": "Gjurmimi i Kohës",
+ "estimationText": "Vlerësimi",
+ "startDateText": "Data e Fillimit",
+ "startdateText": "Data e Fillimit",
+ "endDateText": "Data e Përfundimit",
+ "dueDateText": "Afati",
+ "duedateText": "Afati",
+ "completedDateText": "Data e Përfundimit",
+ "completeddateText": "Data e Përfundimit",
+ "createdDateText": "Data e Krijimit",
+ "createddateText": "Data e Krijimit",
+ "lastUpdatedText": "Përditësuar Së Fundi",
+ "lastupdatedText": "Përditësuar Së Fundi",
+ "reporterText": "Raportuesi",
+ "dueTimeText": "Koha e Afatit",
+ "duetimeText": "Koha e Afatit",
+
+ "lowText": "I ulët",
+ "mediumText": "I mesëm",
+ "highText": "I lartë",
+
+ "createStatusButtonTooltip": "Cilësimet e statusit",
+ "configPhaseButtonTooltip": "Cilësimet e fazës",
+ "noLabelsFound": "Nuk u gjetën etiketa",
+
+ "addStatusButton": "Shto Status",
+ "addPhaseButton": "Shto Fazë",
+
+ "createStatus": "Krijo Status",
+ "name": "Emri",
+ "category": "Kategoria",
+ "selectCategory": "Zgjidh një kategori",
+ "pleaseEnterAName": "Ju lutemi vendosni një emër",
+ "pleaseSelectACategory": "Ju lutemi zgjidhni një kategori",
+ "create": "Krijo"
+}
diff --git a/worklenz-frontend/public/locales/alb/task-list-table.json b/worklenz-frontend/public/locales/alb/task-list-table.json
new file mode 100644
index 00000000..cfb2d398
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/task-list-table.json
@@ -0,0 +1,63 @@
+{
+ "keyColumn": "Çelësi",
+ "taskColumn": "Detyra",
+ "descriptionColumn": "Përshkrimi",
+ "progressColumn": "Progresi",
+ "membersColumn": "Anëtarët",
+ "assigneesColumn": "Përgjegjësit",
+ "labelsColumn": "Etiketa",
+ "phasesColumn": "Fazat",
+ "phaseColumn": "Faza",
+ "statusColumn": "Statusi",
+ "priorityColumn": "Prioriteti",
+ "timeTrackingColumn": "Gjurmimi i Kohës",
+ "timetrackingColumn": "Gjurmimi i Kohës",
+ "estimationColumn": "Vlerësimi",
+ "startDateColumn": "Data e Fillimit",
+ "startdateColumn": "Data e Fillimit",
+ "dueDateColumn": "Data e Afatit",
+ "duedateColumn": "Data e Afatit",
+ "completedDateColumn": "Data e Përfundimit",
+ "completeddateColumn": "Data e Përfundimit",
+ "createdDateColumn": "Data e Krijimit",
+ "createddateColumn": "Data e Krijimit",
+ "lastUpdatedColumn": "Përditësuar Së Fundi",
+ "lastupdatedColumn": "Përditësuar Së Fundi",
+ "reporterColumn": "Raportuesi",
+ "dueTimeColumn": "Koha e Afatit",
+ "todoSelectorText": "Për të Bërë",
+ "doingSelectorText": "Duke bërë",
+ "doneSelectorText": "E Përfunduar",
+
+ "lowSelectorText": "I ulët",
+ "mediumSelectorText": "I mesëm",
+ "highSelectorText": "I lartë",
+
+ "selectText": "Zgjidh",
+ "labelsSelectorInputTip": "Shtyp Enter për të krijuar!",
+
+ "addTaskText": "+ Shto Detyrë",
+ "addSubTaskText": "+ Shto Nën-Detyrë",
+ "addTaskInputPlaceholder": "Shkruaj detyrën dhe shtyp Enter",
+
+ "openButton": "Hap",
+ "okButton": "Në rregull",
+
+ "noLabelsFound": "Nuk u gjetën etiketa",
+ "searchInputPlaceholder": "Kërko ose krijo",
+ "assigneeSelectorInviteButton": "Fto një anëtar të ri me email",
+ "labelInputPlaceholder": "Kërko ose krijo",
+
+ "pendingInvitation": "Ftesë në Pritje",
+
+ "contextMenu": {
+ "assignToMe": "Cakto mua",
+ "moveTo": "Zhvendos në",
+ "unarchive": "Ç'arkivizo",
+ "archive": "Arkivizo",
+ "convertToSubTask": "Shndërro në Nën-Detyrë",
+ "convertToTask": "Shndërro në Detyrë",
+ "delete": "Fshi",
+ "searchByNameInputPlaceholder": "Kërko sipas emrit"
+ }
+}
diff --git a/worklenz-frontend/public/locales/alb/task-template-drawer.json b/worklenz-frontend/public/locales/alb/task-template-drawer.json
new file mode 100644
index 00000000..034ac916
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/task-template-drawer.json
@@ -0,0 +1,11 @@
+{
+ "createTaskTemplate": "Krijo Shabllon Detyre",
+ "editTaskTemplate": "Modifiko Shabllon Detyre",
+ "cancelText": "Anulo",
+ "saveText": "Ruaj",
+ "templateNameText": "Emri i Shabllonit",
+ "selectedTasks": "Detyrat e Përzgjedhura",
+ "removeTask": "Hiq",
+ "cancelButton": "Anulo",
+ "saveButton": "Ruaj"
+}
diff --git a/worklenz-frontend/public/locales/alb/tasks/task-table-bulk-actions.json b/worklenz-frontend/public/locales/alb/tasks/task-table-bulk-actions.json
new file mode 100644
index 00000000..cb433bf9
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/tasks/task-table-bulk-actions.json
@@ -0,0 +1,24 @@
+{
+ "taskSelected": "detyrë e zgjedhur",
+ "tasksSelected": "detyra të zgjedhura",
+ "changeStatus": "Ndrysho Statusin/ Prioritetin/ Fazat",
+ "changeLabel": "Ndrysho Etiketën",
+ "assignToMe": "Cakto mua",
+ "changeAssignees": "Ndrysho Përgjegjësit",
+ "archive": "Arkivo",
+ "unarchive": "Ç'arkivo",
+ "delete": "Fshi",
+ "moreOptions": "Më shumë opsione",
+ "deselectAll": "Zgjidhja të gjitha",
+ "status": "Statusi",
+ "priority": "Prioriteti",
+ "phase": "Faza",
+ "member": "Anëtar",
+ "createTaskTemplate": "Krijo Shabllon Detyre",
+ "apply": "Apliko",
+ "createLabel": "+ Krijo Etiketë",
+ "hitEnterToCreate": "Shtyp Enter për të krijuar",
+ "pendingInvitation": "Ftesë në Pritje",
+ "noMatchingLabels": "Asnjë etiketë që përputhet",
+ "noLabels": "Asnjë etiketë"
+}
diff --git a/worklenz-frontend/public/locales/alb/template-drawer.json b/worklenz-frontend/public/locales/alb/template-drawer.json
new file mode 100644
index 00000000..e6174c10
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/template-drawer.json
@@ -0,0 +1,19 @@
+{
+ "title": "Modifiko Shabllon Detyre",
+ "cancelText": "Anulo",
+ "saveText": "Ruaj",
+ "templateNameText": "Emri i Shabllonit",
+ "selectedTasks": "Detyrat e Përzgjedhura",
+ "removeTask": "Hiq",
+ "description": "Përshkrimi",
+ "phase": "Faza",
+ "statuses": "Statuset",
+ "priorities": "Prioritetet",
+ "labels": "Etiketa",
+ "tasks": "Detyrat",
+ "noTemplateSelected": "Asnjë shabllon i përzgjedhur",
+ "noDescription": "Pa përshkrim",
+ "worklenzTemplates": "Shabllonet Worklenz",
+ "yourTemplatesLibrary": "Biblioteka Juaj",
+ "searchTemplates": "Kërko Shabllone"
+}
diff --git a/worklenz-frontend/public/locales/alb/templateDrawer.json b/worklenz-frontend/public/locales/alb/templateDrawer.json
new file mode 100644
index 00000000..6b2cd828
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/templateDrawer.json
@@ -0,0 +1,23 @@
+{
+ "bugTracking": "Gjurmimi i Gabimeve",
+ "construction": "Ndërtim",
+ "designCreative": "Dizajn & Kreativ",
+ "education": "Arsim",
+ "finance": "Financë",
+ "hrRecruiting": "Burime Njerëzore & Rekrutim",
+ "informationTechnology": "Teknologji Informacioni",
+ "legal": "Juridik",
+ "manufacturing": "Prodhim",
+ "marketing": "Marketing",
+ "nonprofit": "Jo-fitimprurës",
+ "personalUse": "Përdorim Personal",
+ "salesCRM": "Shitje & CRM",
+ "serviceConsulting": "Shërbime & Këshillim",
+ "softwareDevelopment": "Zhvillim Softueri",
+ "description": "Përshkrimi",
+ "phase": "Faza",
+ "statuses": "Statuset",
+ "priorities": "Prioritetet",
+ "labels": "Etiketa",
+ "tasks": "Detyrat"
+}
diff --git a/worklenz-frontend/public/locales/alb/time-report.json b/worklenz-frontend/public/locales/alb/time-report.json
new file mode 100644
index 00000000..8a0bb69b
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/time-report.json
@@ -0,0 +1,44 @@
+{
+ "includeArchivedProjects": "Përfshij Projektet e Arkivuara",
+ "export": "Eksporto",
+ "timeSheet": "Fletë Kohore",
+
+ "searchByName": "Kërko sipas emrit",
+ "selectAll": "Zgjidh të Gjitha",
+ "teams": "Ekipet",
+
+ "searchByProject": "Kërko sipas emrit të projektit",
+ "projects": "Projektet",
+
+ "searchByCategory": "Kërko sipas emrit të kategorisë",
+ "categories": "Kategoritë",
+
+ "billable": "Fakturueshme",
+ "nonBillable": "Jo Fakturueshme",
+
+ "total": "Total",
+
+ "projectsTimeSheet": "Fletë Kohore e Projekteve",
+
+ "loggedTime": "Koha e Regjistruar(orë)",
+
+ "exportToExcel": "Eksporto në Excel",
+ "logged": "regjistruar",
+ "for": "për",
+
+ "membersTimeSheet": "Fletë Kohore e Anëtarëve",
+ "member": "Anëtar",
+
+ "estimatedVsActual": "Vlerësuar vs Aktual",
+ "workingDays": "Ditë Pune",
+ "manDays": "Ditë Njeri",
+ "days": "Ditë",
+ "estimatedDays": "Ditë të Vlerësuara",
+ "actualDays": "Ditë Aktuale",
+
+ "noCategories": "Nuk u gjetën kategori",
+ "noCategory": "Pa Kategori",
+ "noProjects": "Nuk u gjetën projekte",
+ "noTeams": "Nuk u gjetën ekipe",
+ "noData": "Nuk u gjetën të dhëna"
+}
diff --git a/worklenz-frontend/public/locales/alb/unauthorized.json b/worklenz-frontend/public/locales/alb/unauthorized.json
new file mode 100644
index 00000000..a731e676
--- /dev/null
+++ b/worklenz-frontend/public/locales/alb/unauthorized.json
@@ -0,0 +1,5 @@
+{
+ "title": "E paautorizuar!",
+ "subtitle": "Nuk jeni të autorizuar të hyni në këtë faqe",
+ "button": "Kthehu në Faqen Kryesore"
+}
diff --git a/worklenz-frontend/public/locales/de/404-page.json b/worklenz-frontend/public/locales/de/404-page.json
new file mode 100644
index 00000000..641a1847
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/404-page.json
@@ -0,0 +1,4 @@
+{
+ "doesNotExistText": "Entschuldigung, die von Ihnen besuchte Seite existiert nicht.",
+ "backHomeButton": "Zurück zur Startseite"
+}
diff --git a/worklenz-frontend/public/locales/de/account-setup.json b/worklenz-frontend/public/locales/de/account-setup.json
new file mode 100644
index 00000000..ddfb7b80
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/account-setup.json
@@ -0,0 +1,31 @@
+{
+ "continue": "Weiter",
+
+ "setupYourAccount": "Richten Sie Ihr Worklenz-Konto ein.",
+ "organizationStepTitle": "Organisation benennen",
+ "organizationStepLabel": "Wählen Sie einen Namen für Ihr Worklenz-Konto.",
+
+ "projectStepTitle": "Erstellen Sie Ihr erstes Projekt",
+ "projectStepLabel": "An welchem Projekt arbeiten Sie gerade?",
+ "projectStepPlaceholder": "z.B. Marketingplan",
+
+ "tasksStepTitle": "Erstellen Sie Ihre ersten Aufgaben",
+ "tasksStepLabel": "Geben Sie einige Aufgaben ein, die Sie in",
+ "tasksStepAddAnother": "Weitere hinzufügen",
+
+ "emailPlaceholder": "E-Mail-Adresse",
+ "invalidEmail": "Bitte geben Sie eine gültige E-Mail-Adresse ein",
+ "or": "oder",
+ "templateButton": "Aus Vorlage importieren",
+ "goBack": "Zurück",
+ "cancel": "Abbrechen",
+ "create": "Erstellen",
+ "templateDrawerTitle": "Aus Vorlagen auswählen",
+ "step3InputLabel": "Per E-Mail einladen",
+ "addAnother": "Weitere hinzufügen",
+ "skipForNow": "Jetzt überspringen",
+ "formTitle": "Erstellen Sie Ihre erste Aufgabe.",
+ "step3Title": "Laden Sie Ihr Team zur Zusammenarbeit ein",
+ "maxMembers": " (Sie können bis zu 5 Mitglieder einladen)",
+ "maxTasks": " (Sie können bis zu 5 Aufgaben erstellen)"
+}
diff --git a/worklenz-frontend/public/locales/de/admin-center/current-bill.json b/worklenz-frontend/public/locales/de/admin-center/current-bill.json
new file mode 100644
index 00000000..fcf2c636
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/admin-center/current-bill.json
@@ -0,0 +1,113 @@
+{
+ "title": "Abrechnungen",
+ "currentBill": "Aktuelle Rechnung",
+ "configuration": "Konfiguration",
+ "currentPlanDetails": "Aktuelle Plan Details",
+ "upgradePlan": "Plan upgraden",
+ "cardBodyText01": "Kostenlose Testversion",
+ "cardBodyText02": "(Ihr Testplan läuft in 1 Monat 19 Tagen ab)",
+ "redeemCode": "Gutscheincode einlösen",
+ "accountStorage": "Kontospeicher",
+ "used": "Verwendet:",
+ "remaining": "Verbleibend:",
+ "charges": "Gebühren",
+ "tooltip": "Gebühren für den aktuellen Abrechnungszeitraum",
+ "description": "Beschreibung",
+ "billingPeriod": "Abrechnungszeitraum",
+ "billStatus": "Rechnungsstatus",
+ "perUserValue": "Pro Benutzer Wert",
+ "users": "Benutzer",
+
+ "amount": "Betrag",
+ "invoices": "Rechnungen",
+ "transactionId": "Transaktions-ID",
+ "transactionDate": "Transaktionsdatum",
+ "paymentMethod": "Zahlungsmethode",
+ "status": "Status",
+ "ltdUsers": "Sie können bis zu {{ltd_users}} Benutzer hinzufügen.",
+
+ "totalSeats": "Gesamte Plätze",
+ "availableSeats": "Verfügbare Plätze",
+ "addMoreSeats": "Weitere Plätze hinzufügen",
+
+ "drawerTitle": "Gutscheincode einlösen",
+ "label": "Gutscheincode",
+ "drawerPlaceholder": "Geben Sie Ihren Gutscheincode ein",
+ "redeemSubmit": "Einreichen",
+
+ "modalTitle": "Wählen Sie den besten Plan für Ihr Team",
+ "seatLabel": "Anzahl der Plätze",
+ "freePlan": "Kostenloser Plan",
+ "startup": "Startup",
+ "business": "Business",
+ "tag": "Am beliebtesten",
+ "enterprise": "Enterprise",
+
+ "freeSubtitle": "kostenlos für immer",
+ "freeUsers": "Ideal für die persönliche Nutzung",
+ "freeText01": "100MB Speicher",
+ "freeText02": "3 Projekte",
+ "freeText03": "5 Teammitglieder",
+
+ "startupSubtitle": "PAUSCHALPREIS / Monat",
+ "startupUsers": "Bis zu 15 Benutzer",
+ "startupText01": "25GB Speicher",
+ "startupText02": "Unbegrenzte aktive Projekte",
+ "startupText03": "Zeitplan",
+ "startupText04": "Berichterstattung",
+ "startupText05": "Projekte abonnieren",
+
+ "businessSubtitle": "Benutzer / Monat",
+ "businessUsers": "16 - 200 Benutzer",
+
+ "enterpriseUsers": "200 - 500+ Benutzer",
+
+ "footerTitle": "Bitte geben Sie uns eine Kontaktnummer, unter der wir Sie erreichen können.",
+ "footerLabel": "Kontaktnummer",
+ "footerButton": "Kontaktieren Sie uns",
+
+ "redeemCodePlaceHolder": "Geben Sie Ihren Gutscheincode ein",
+ "submit": "Einreichen",
+
+ "trialPlan": "Kostenlose Testversion",
+ "trialExpireDate": "Gültig bis {{trial_expire_date}}",
+ "trialExpired": "Ihre kostenlose Testversion ist {{trial_expire_string}} abgelaufen",
+ "trialInProgress": "Ihre kostenlose Testversion läuft {{trial_expire_string}} ab",
+
+ "required": "Dieses Feld ist erforderlich",
+ "invalidCode": "Ungültiger Code",
+
+ "selectPlan": "Wählen Sie den besten Plan für Ihr Team",
+ "changeSubscriptionPlan": "Ändern Sie Ihren Abonnementplan",
+ "noOfSeats": "Anzahl der Plätze",
+ "annualPlan": "Pro - Jährlich",
+ "monthlyPlan": "Pro - Monatlich",
+ "freeForever": "Kostenlos für immer",
+ "bestForPersonalUse": "Ideal für die persönliche Nutzung",
+ "storage": "Speicher",
+ "projects": "Projekte",
+ "teamMembers": "Teammitglieder",
+ "unlimitedTeamMembers": "Unbegrenzte Teammitglieder",
+ "unlimitedActiveProjects": "Unbegrenzte aktive Projekte",
+ "schedule": "Zeitplan",
+ "reporting": "Berichterstattung",
+ "subscribeToProjects": "Projekte abonnieren",
+ "billedAnnually": "Jährlich abgerechnet",
+ "billedMonthly": "Monatlich abgerechnet",
+
+ "pausePlan": "Plan pausieren",
+ "resumePlan": "Plan fortsetzen",
+ "changePlan": "Plan ändern",
+ "cancelPlan": "Plan kündigen",
+
+ "perMonthPerUser": "pro Benutzer/Monat",
+ "viewInvoice": "Rechnung anzeigen",
+ "switchToFreePlan": "Wechsel zum kostenlosen Plan",
+
+ "expirestoday": "heute",
+ "expirestomorrow": "morgen",
+ "expiredDaysAgo": "vor {{days}} Tagen",
+
+ "continueWith": "Fortfahren mit {{plan}}",
+ "changeToPlan": "Wechseln zu {{plan}}"
+}
diff --git a/worklenz-frontend/public/locales/de/admin-center/overview.json b/worklenz-frontend/public/locales/de/admin-center/overview.json
new file mode 100644
index 00000000..0330d788
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/admin-center/overview.json
@@ -0,0 +1,8 @@
+{
+ "overview": "Übersicht",
+ "name": "Organisationsname",
+ "owner": "Organisationsinhaber",
+ "admins": "Organisationsadministratoren",
+ "contactNumber": "Kontaktnummer hinzufügen",
+ "edit": "Bearbeiten"
+}
diff --git a/worklenz-frontend/public/locales/de/admin-center/projects.json b/worklenz-frontend/public/locales/de/admin-center/projects.json
new file mode 100644
index 00000000..2d4f3534
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/admin-center/projects.json
@@ -0,0 +1,12 @@
+{
+ "membersCount": "Mitgliederanzahl",
+ "createdAt": "Erstellt am",
+ "projectName": "Projektname",
+ "teamName": "Teamname",
+ "refreshProjects": "Projekte aktualisieren",
+ "searchPlaceholder": "Nach Projektname suchen",
+ "deleteProject": "Sind Sie sicher, dass Sie dieses Projekt löschen möchten?",
+ "confirm": "Bestätigen",
+ "cancel": "Abbrechen",
+ "delete": "Projekt löschen"
+}
diff --git a/worklenz-frontend/public/locales/de/admin-center/sidebar.json b/worklenz-frontend/public/locales/de/admin-center/sidebar.json
new file mode 100644
index 00000000..670595a3
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/admin-center/sidebar.json
@@ -0,0 +1,8 @@
+{
+ "overview": "Übersicht",
+ "users": "Benutzer",
+ "teams": "Teams",
+ "billing": "Abrechnung",
+ "projects": "Projekte",
+ "adminCenter": "Admin-Center"
+}
diff --git a/worklenz-frontend/public/locales/de/admin-center/teams.json b/worklenz-frontend/public/locales/de/admin-center/teams.json
new file mode 100644
index 00000000..7ab2831f
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/admin-center/teams.json
@@ -0,0 +1,33 @@
+{
+ "title": "Teams",
+ "subtitle": "Teams",
+ "tooltip": "Teams aktualisieren",
+ "placeholder": "Nach Namen suchen",
+ "addTeam": "Team hinzufügen",
+ "team": "Team",
+ "membersCount": "Mitgliederanzahl",
+ "members": "Mitglieder",
+ "drawerTitle": "Neues Team erstellen",
+ "label": "Teamname",
+ "drawerPlaceholder": "Name",
+ "create": "Erstellen",
+ "delete": "Löschen",
+ "settings": "Einstellungen",
+ "popTitle": "Sind Sie sicher?",
+ "message": "Bitte geben Sie einen Namen ein",
+ "teamSettings": "Team-Einstellungen",
+ "teamName": "Teamname",
+ "teamDescription": "Teambeschreibung",
+ "teamMembers": "Teammitglieder",
+ "teamMembersCount": "Anzahl der Teammitglieder",
+ "teamMembersPlaceholder": "Nach Namen suchen",
+ "addMember": "Mitglied hinzufügen",
+ "add": "Hinzufügen",
+ "update": "Aktualisieren",
+ "teamNamePlaceholder": "Name des Teams",
+ "user": "Benutzer",
+ "role": "Rolle",
+ "owner": "Besitzer",
+ "admin": "Administrator",
+ "member": "Mitglied"
+}
diff --git a/worklenz-frontend/public/locales/de/admin-center/users.json b/worklenz-frontend/public/locales/de/admin-center/users.json
new file mode 100644
index 00000000..47de9a59
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/admin-center/users.json
@@ -0,0 +1,9 @@
+{
+ "title": "Benutzer",
+ "subTitle": "Benutzer",
+ "placeholder": "Nach Namen suchen",
+ "user": "Benutzer",
+ "email": "E-Mail",
+ "lastActivity": "Letzte Aktivität",
+ "refresh": "Benutzer aktualisieren"
+}
diff --git a/worklenz-frontend/public/locales/de/all-project-list.json b/worklenz-frontend/public/locales/de/all-project-list.json
new file mode 100644
index 00000000..b11fbbcd
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/all-project-list.json
@@ -0,0 +1,23 @@
+{
+ "name": "Name",
+ "client": "Kunde",
+ "category": "Kategorie",
+ "status": "Status",
+ "tasksProgress": "Aufgabenfortschritt",
+ "updated_at": "Zuletzt aktualisiert",
+ "members": "Mitglieder",
+ "setting": "Einstellungen",
+ "projects": "Projekte",
+ "refreshProjects": "Projekte aktualisieren",
+ "all": "Alle",
+ "favorites": "Favoriten",
+ "archived": "Archiviert",
+ "placeholder": "Nach Namen suchen",
+ "archive": "Archivieren",
+ "unarchive": "Dearchivieren",
+ "archiveConfirm": "Sind Sie sicher, dass Sie dieses Projekt archivieren möchten?",
+ "unarchiveConfirm": "Sind Sie sicher, dass Sie dieses Projekt dearchivieren möchten?",
+ "clickToFilter": "Zum Filtern klicken nach",
+ "noProjects": "Keine Projekte gefunden",
+ "addToFavourites": "Zu Favoriten hinzufügen"
+}
diff --git a/worklenz-frontend/public/locales/de/auth/auth-common.json b/worklenz-frontend/public/locales/de/auth/auth-common.json
new file mode 100644
index 00000000..dab26d10
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/auth/auth-common.json
@@ -0,0 +1,5 @@
+{
+ "loggingOut": "Abmelden...",
+ "authenticating": "Authentifizierung läuft...",
+ "gettingThingsReady": "Bereite alles für Sie vor..."
+}
diff --git a/worklenz-frontend/public/locales/de/auth/forgot-password.json b/worklenz-frontend/public/locales/de/auth/forgot-password.json
new file mode 100644
index 00000000..a94c7463
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/auth/forgot-password.json
@@ -0,0 +1,12 @@
+{
+ "headerDescription": "Passwort zurücksetzen",
+ "emailLabel": "E-Mail",
+ "emailPlaceholder": "Ihre E-Mail eingeben",
+ "emailRequired": "Bitte geben Sie Ihre E-Mail-Adresse ein!",
+ "resetPasswordButton": "Passwort zurücksetzen",
+ "returnToLoginButton": "Zurück zum Login",
+ "passwordResetSuccessMessage": "Ein Link zum Zurücksetzen des Passworts wurde an Ihre E-Mail gesendet.",
+ "orText": "ODER",
+ "successTitle": "Anweisung zum Zurücksetzen gesendet!",
+ "successMessage": "Die Informationen zum Zurücksetzen wurden an Ihre E-Mail gesendet. Bitte überprüfen Sie Ihr E-Mail-Postfach."
+}
diff --git a/worklenz-frontend/public/locales/de/auth/login.json b/worklenz-frontend/public/locales/de/auth/login.json
new file mode 100644
index 00000000..f42d0db9
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/auth/login.json
@@ -0,0 +1,27 @@
+{
+ "headerDescription": "Melden Sie sich an",
+ "emailLabel": "E-Mail",
+ "emailPlaceholder": "Ihre E-Mail-Adresse eingeben",
+ "emailRequired": "Bitte geben Sie Ihre E-Mail-Adresse ein!",
+ "passwordLabel": "Passwort",
+ "passwordPlaceholder": "Ihr Passwort eingeben",
+ "passwordRequired": "Bitte geben Sie Ihr Passwort ein!",
+ "rememberMe": "Erinnere dich an mich",
+ "loginButton": "Anmelden",
+ "signupButton": "Registrieren",
+ "forgotPasswordButton": "Passwort vergessen?",
+ "signInWithGoogleButton": "Mit Google anmelden",
+ "dontHaveAccountText": "Noch kein Konto?",
+ "orText": "ODER",
+ "successMessage": "Sie haben sich erfolgreich angemeldet!",
+ "loginError": "Anmeldung fehlgeschlagen",
+ "googleLoginError": "Google-Anmeldung fehlgeschlagen",
+ "validationMessages": {
+ "email": "Bitte geben Sie eine gültige E-Mail-Adresse ein",
+ "password": "Das Passwort muss mindestens 8 Zeichen lang sein"
+ },
+ "errorMessages": {
+ "loginErrorTitle": "Anmeldung fehlgeschlagen",
+ "loginErrorMessage": "Bitte überprüfen Sie Ihre E-Mail-Adresse und Ihr Passwort und versuchen Sie es erneut"
+ }
+}
diff --git a/worklenz-frontend/public/locales/de/auth/signup.json b/worklenz-frontend/public/locales/de/auth/signup.json
new file mode 100644
index 00000000..55a63a23
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/auth/signup.json
@@ -0,0 +1,29 @@
+{
+ "headerDescription": "Registrieren Sie sich, um loszulegen",
+ "nameLabel": "Vollständiger Name",
+ "namePlaceholder": "Ihren vollständigen Namen eingeben",
+ "nameRequired": "Bitte geben Sie Ihren vollständigen Namen ein!",
+ "nameMinCharacterRequired": "Der Name muss mindestens 4 Zeichen lang sein!",
+ "emailLabel": "E-Mail",
+ "emailPlaceholder": "Ihre E-Mail-Adresse eingeben",
+ "emailRequired": "Bitte geben Sie Ihre E-Mail-Adresse ein!",
+ "passwordLabel": "Passwort",
+ "passwordPlaceholder": "Ihr Passwort eingeben",
+ "passwordRequired": "Bitte geben Sie Ihr Passwort ein!",
+ "passwordMinCharacterRequired": "Das Passwort muss mindestens 8 Zeichen lang sein!",
+ "passwordPatternRequired": "Das Passwort erfüllt nicht die Anforderungen!",
+ "strongPasswordPlaceholder": "Ein stärkeres Passwort eingeben",
+ "passwordValidationAltText": "Das Passwort muss mindestens 8 Zeichen enthalten, mit Groß- und Kleinbuchstaben, einer Zahl und einem Sonderzeichen.",
+ "signupSuccessMessage": "Sie haben sich erfolgreich registriert!",
+ "privacyPolicyLink": "Datenschutzrichtlinie",
+ "termsOfUseLink": "Nutzungsbedingungen",
+ "bySigningUpText": "Mit der Registrierung stimmen Sie unseren",
+ "andText": "und",
+ "signupButton": "Registrieren",
+ "signInWithGoogleButton": "Mit Google anmelden",
+ "alreadyHaveAccountText": "Sie haben bereits ein Konto?",
+ "loginButton": "Anmelden",
+ "orText": "ODER",
+ "reCAPTCHAVerificationError": "reCAPTCHA-Verifizierungsfehler",
+ "reCAPTCHAVerificationErrorMessage": "Wir konnten Ihre reCAPTCHA nicht verifizieren. Bitte versuchen Sie es erneut."
+}
diff --git a/worklenz-frontend/public/locales/de/auth/verify-reset-email.json b/worklenz-frontend/public/locales/de/auth/verify-reset-email.json
new file mode 100644
index 00000000..323c685f
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/auth/verify-reset-email.json
@@ -0,0 +1,14 @@
+{
+ "title": "E-Mail zurücksetzen bestätigen",
+ "description": "Geben Sie Ihr neues Passwort ein",
+ "placeholder": "Neues Passwort eingeben",
+ "confirmPasswordPlaceholder": "Neues Passwort bestätigen",
+ "passwordHint": "Mindestens 8 Zeichen, mit Groß- und Kleinbuchstaben, einer Zahl und einem Sonderzeichen.",
+ "resetPasswordButton": "Passwort zurücksetzen",
+ "orText": "Oder",
+ "resendResetEmail": "Zurücksetz-E-Mail erneut senden",
+ "passwordRequired": "Bitte geben Sie Ihr neues Passwort ein",
+ "returnToLoginButton": "Zurück zur Anmeldung",
+ "confirmPasswordRequired": "Bitte bestätigen Sie Ihr neues Passwort",
+ "passwordMismatch": "Die beiden Passwörter stimmen nicht überein"
+}
diff --git a/worklenz-frontend/public/locales/de/common.json b/worklenz-frontend/public/locales/de/common.json
new file mode 100644
index 00000000..937ad4a9
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/common.json
@@ -0,0 +1,9 @@
+{
+ "login-success": "Anmeldung erfolgreich!",
+ "login-failed": "Anmeldung fehlgeschlagen. Bitte überprüfen Sie Ihre Anmeldedaten und versuchen Sie es erneut.",
+ "signup-success": "Registrierung erfolgreich! Willkommen an Bord.",
+ "signup-failed": "Registrierung fehlgeschlagen. Bitte füllen Sie alle erforderlichen Felder aus und versuchen Sie es erneut.",
+ "reconnecting": "Vom Server getrennt.",
+ "connection-lost": "Verbindung zum Server fehlgeschlagen. Bitte überprüfen Sie Ihre Internetverbindung.",
+ "connection-restored": "Erfolgreich mit dem Server verbunden"
+}
diff --git a/worklenz-frontend/public/locales/de/create-first-project-form.json b/worklenz-frontend/public/locales/de/create-first-project-form.json
new file mode 100644
index 00000000..02ce495e
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/create-first-project-form.json
@@ -0,0 +1,13 @@
+{
+ "formTitle": "Erstellen Sie Ihr erstes Projekt",
+ "inputLabel": "An welchem Projekt arbeiten Sie gerade?",
+ "or": "oder",
+ "templateButton": "Aus Vorlage importieren",
+ "createFromTemplate": "Aus Vorlage erstellen",
+ "goBack": "Zurück",
+ "continue": "Weitermachen",
+ "cancel": "Abbrechen",
+ "create": "Erstellen",
+ "templateDrawerTitle": "Aus Vorlagen auswählen",
+ "createProject": "Projekt erstellen"
+}
diff --git a/worklenz-frontend/public/locales/de/create-first-tasks.json b/worklenz-frontend/public/locales/de/create-first-tasks.json
new file mode 100644
index 00000000..ae7a4256
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/create-first-tasks.json
@@ -0,0 +1,7 @@
+{
+ "formTitle": "Erstellen Sie Ihre erste Aufgabe.",
+ "inputLabel": "Geben Sie einige Aufgaben ein, die Sie erledigen werden in",
+ "addAnother": "Einen weiteren hinzufügen",
+ "goBack": "Zurück",
+ "continue": "Weiter"
+}
diff --git a/worklenz-frontend/public/locales/de/home.json b/worklenz-frontend/public/locales/de/home.json
new file mode 100644
index 00000000..cc868952
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/home.json
@@ -0,0 +1,46 @@
+{
+ "todoList": {
+ "title": "Aufgabenliste",
+ "refreshTasks": "Aufgaben aktualisieren",
+ "addTask": "+ Aufgabe hinzufügen",
+ "noTasks": "Keine Aufgaben",
+ "pressEnter": "Drücken Sie",
+ "toCreate": "zum Erstellen.",
+ "markAsDone": "Als erledigt markieren"
+ },
+ "projects": {
+ "title": "Projekte",
+ "refreshProjects": "Projekte aktualisieren",
+ "noRecentProjects": "Sie sind aktuell keinem Projekt zugewiesen.",
+ "noFavouriteProjects": "Keine Projekte als Favoriten markiert.",
+ "recent": "Kürzlich",
+ "favourites": "Favoriten"
+ },
+ "tasks": {
+ "assignedToMe": "Mir zugewiesen",
+ "assignedByMe": "Von mir zugewiesen",
+ "all": "Alle",
+ "today": "Heute",
+ "upcoming": "Bevorstehend",
+ "overdue": "Überfällig",
+ "noDueDate": "Kein Fälligkeitsdatum",
+ "noTasks": "Keine Aufgaben zum Anzeigen.",
+ "addTask": "+ Aufgabe hinzufügen",
+ "name": "Name",
+ "project": "Projekt",
+ "status": "Status",
+ "dueDate": "Fälligkeitsdatum",
+ "dueDatePlaceholder": "Fälligkeitsdatum festlegen",
+ "tomorrow": "Morgen",
+ "nextWeek": "Nächste Woche",
+ "nextMonth": "Nächster Monat",
+ "projectRequired": "Bitte wählen Sie ein Projekt aus",
+ "pressTabToSelectDueDateAndProject": "Drücken Sie Tab, um ein Fälligkeitsdatum und ein Projekt auszuwählen",
+ "dueOn": "Fällige Aufgaben am",
+ "taskRequired": "Bitte fügen Sie eine Aufgabe hinzu",
+ "list": "Liste",
+ "calendar": "Kalender",
+ "tasks": "Aufgaben",
+ "refresh": "Aktualisieren"
+ }
+}
diff --git a/worklenz-frontend/public/locales/de/invite-initial-team-members.json b/worklenz-frontend/public/locales/de/invite-initial-team-members.json
new file mode 100644
index 00000000..e3ba64ae
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/invite-initial-team-members.json
@@ -0,0 +1,8 @@
+{
+ "formTitle": "Laden Sie Ihr Team zur Zusammenarbeit ein",
+ "inputLabel": "Per E-Mail einladen",
+ "addAnother": "Weitere hinzufügen",
+ "goBack": "Zurück",
+ "continue": "Weitermachen",
+ "skipForNow": "Vorerst überspringen"
+}
diff --git a/worklenz-frontend/public/locales/de/kanban-board.json b/worklenz-frontend/public/locales/de/kanban-board.json
new file mode 100644
index 00000000..47f8bef4
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/kanban-board.json
@@ -0,0 +1,23 @@
+{
+ "rename": "Umbenennen",
+ "delete": "Löschen",
+ "addTask": "Aufgabe hinzufügen",
+ "addSectionButton": "Abschnitt hinzufügen",
+ "changeCategory": "Kategorie ändern",
+
+ "deleteTooltip": "Löschen",
+ "deleteConfirmationTitle": "Sind Sie sicher?",
+ "deleteConfirmationOk": "Ja",
+ "deleteConfirmationCancel": "Abbrechen",
+
+ "dueDate": "Fälligkeitsdatum",
+ "cancel": "Abbrechen",
+
+ "today": "Heute",
+ "tomorrow": "Morgen",
+ "assignToMe": "Mir zuweisen",
+ "archive": "Archivieren",
+
+ "newTaskNamePlaceholder": "Aufgabenname eingeben",
+ "newSubtaskNamePlaceholder": "Unteraufgabenname eingeben"
+}
diff --git a/worklenz-frontend/public/locales/de/license-expired.json b/worklenz-frontend/public/locales/de/license-expired.json
new file mode 100644
index 00000000..437ddeb2
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/license-expired.json
@@ -0,0 +1,6 @@
+{
+ "title": "Ihre Worklenz-Testversion ist abgelaufen!",
+ "subtitle": "Bitte führen Sie jetzt ein Upgrade durch.",
+ "button": "Jetzt upgraden",
+ "checking": "Überprüfen des Abonnementstatus..."
+}
diff --git a/worklenz-frontend/public/locales/de/navbar.json b/worklenz-frontend/public/locales/de/navbar.json
new file mode 100644
index 00000000..c84912e4
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/navbar.json
@@ -0,0 +1,31 @@
+{
+ "logoAlt": "Worklenz-Logo",
+ "home": "Startseite",
+ "projects": "Projekte",
+ "schedule": "Zeitplan",
+ "reporting": "Berichterstattung",
+ "clients": "Kunden",
+ "teams": "Teams",
+ "labels": "Labels",
+ "jobTitles": "Jobtitel",
+ "upgradePlan": "Plan upgraden",
+ "upgradePlanTooltip": "Plan upgraden",
+ "invite": "Einladen",
+ "inviteTooltip": "Teammitglieder zur Teilnahme einladen",
+ "switchTeamTooltip": "Team wechseln",
+ "help": "Hilfe",
+ "notificationTooltip": "Benachrichtigungen anzeigen",
+ "profileTooltip": "Profil anzeigen",
+ "adminCenter": "Admin-Center",
+ "settings": "Einstellungen",
+ "logOut": "Abmelden",
+ "notificationsDrawer": {
+ "read": "Gelesene Benachrichtigungen",
+ "unread": "Ungelesene Benachrichtigungen",
+ "markAsRead": "Als gelesen markieren",
+ "readAndJoin": "Lesen & Beitreten",
+ "accept": "Annehmen",
+ "acceptAndJoin": "Annehmen & Beitreten",
+ "noNotifications": "Keine Benachrichtigungen"
+ }
+}
diff --git a/worklenz-frontend/public/locales/de/organization-name-form.json b/worklenz-frontend/public/locales/de/organization-name-form.json
new file mode 100644
index 00000000..06d3efcf
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/organization-name-form.json
@@ -0,0 +1,5 @@
+{
+ "nameYourOrganization": "Benennen Sie Ihre Organisation.",
+ "worklenzAccountTitle": "Wählen Sie einen Namen für Ihr Worklenz-Konto.",
+ "continue": "Weiter"
+}
diff --git a/worklenz-frontend/public/locales/de/phases-drawer.json b/worklenz-frontend/public/locales/de/phases-drawer.json
new file mode 100644
index 00000000..d06e3d05
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/phases-drawer.json
@@ -0,0 +1,7 @@
+{
+ "configurePhases": "Phasen konfigurieren",
+ "phaseLabel": "Phasenbezeichnung",
+ "enterPhaseName": "Namen für Phasenbezeichnung eingeben",
+ "addOption": "Option hinzufügen",
+ "phaseOptions": "Phasenoptionen:"
+}
diff --git a/worklenz-frontend/public/locales/de/project-drawer.json b/worklenz-frontend/public/locales/de/project-drawer.json
new file mode 100644
index 00000000..d20f220b
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/project-drawer.json
@@ -0,0 +1,42 @@
+{
+ "createProject": "Projekt erstellen",
+ "editProject": "Projekt bearbeiten",
+ "enterCategoryName": "Namen für die Kategorie eingeben",
+ "hitEnterToCreate": "Enter drücken zum Erstellen!",
+ "enterNotes": "Notizen",
+ "youCanManageClientsUnderSettings": "Kunden können Sie unter Einstellungen verwalten",
+ "addCategory": "Kategorie zum Projekt hinzufügen",
+ "newCategory": "Neue Kategorie",
+ "notes": "Notizen",
+ "startDate": "Startdatum",
+ "endDate": "Enddatum",
+ "estimateWorkingDays": "Arbeitstage schätzen",
+ "estimateManDays": "Personentage schätzen",
+ "hoursPerDay": "Stunden pro Tag",
+ "create": "Erstellen",
+ "update": "Aktualisieren",
+ "delete": "Löschen",
+ "typeToSearchClients": "Kundensuche",
+ "projectColor": "Projektfarbe",
+ "pleaseEnterAName": "Bitte geben Sie einen Namen ein",
+ "enterProjectName": "Projektnamen eingeben",
+ "name": "Name",
+ "status": "Status",
+ "health": "Gesundheit",
+ "category": "Kategorie",
+ "projectManager": "Projektleiter",
+ "client": "Kunde",
+ "deleteConfirmation": "Sind Sie sicher, dass Sie löschen möchten?",
+ "deleteConfirmationDescription": "Dies entfernt alle zugehörigen Daten und kann nicht rückgängig gemacht werden.",
+ "yes": "Ja",
+ "no": "Nein",
+ "createdAt": "Erstellt am",
+ "updatedAt": "Aktualisiert am",
+ "by": "von",
+ "add": "Hinzufügen",
+ "asClient": "als Kunde",
+ "createClient": "Kunde erstellen",
+ "searchInputPlaceholder": "Nach Name oder E-Mail suchen",
+ "hoursPerDayValidationMessage": "Stunden pro Tag müssen zwischen 1 und 24",
+ "noPermission": "Keine Berechtigung"
+}
diff --git a/worklenz-frontend/public/locales/de/project-view-files.json b/worklenz-frontend/public/locales/de/project-view-files.json
new file mode 100644
index 00000000..8408df16
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/project-view-files.json
@@ -0,0 +1,14 @@
+{
+ "nameColumn": "Name",
+ "attachedTaskColumn": "Zugehörige Aufgabe",
+ "sizeColumn": "Größe",
+ "uploadedByColumn": "Hochgeladen von",
+ "uploadedAtColumn": "Hochgeladen am",
+ "fileIconAlt": "Dateisymbol",
+ "titleDescriptionText": "Alle Anhänge zu Aufgaben in diesem Projekt werden hier angezeigt.",
+ "deleteConfirmationTitle": "Sind Sie sicher?",
+ "deleteConfirmationOk": "Ja",
+ "deleteConfirmationCancel": "Abbrechen",
+ "segmentedTooltip": "Demnächst verfügbar! Wechseln zwischen Listenansicht und Miniaturansicht.",
+ "emptyText": "Es gibt keine Anhänge in diesem Projekt."
+}
diff --git a/worklenz-frontend/public/locales/de/project-view-insights.json b/worklenz-frontend/public/locales/de/project-view-insights.json
new file mode 100644
index 00000000..5f11df54
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/project-view-insights.json
@@ -0,0 +1,41 @@
+{
+ "overview": {
+ "title": "Übersicht",
+ "statusOverview": "Statusübersicht",
+ "priorityOverview": "Prioritätenübersicht",
+ "lastUpdatedTasks": "Zuletzt aktualisierte Aufgaben"
+ },
+ "members": {
+ "title": "Mitglieder",
+ "tooltip": "Mitglieder",
+ "tasksByMembers": "Aufgaben nach Mitgliedern",
+ "tasksByMembersTooltip": "Aufgaben nach Mitgliedern",
+ "name": "Name",
+ "taskCount": "Anzahl Aufgaben",
+ "contribution": "Beitrag",
+ "completed": "Abgeschlossen",
+ "incomplete": "Unvollständig",
+ "overdue": "Überfällig",
+ "progress": "Fortschritt"
+ },
+ "tasks": {
+ "overdueTasks": "Überfällige Aufgaben",
+ "overLoggedTasks": "Aufgaben mit zu viel erfasster Zeit",
+ "tasksCompletedEarly": "Vorzeitig abgeschlossene Aufgaben",
+ "tasksCompletedLate": "Verspätet abgeschlossene Aufgaben",
+ "overLoggedTasksTooltip": "Aufgaben, bei denen mehr Zeit erfasst wurde als geschätzt",
+ "overdueTasksTooltip": "Aufgaben, deren Fälligkeitsdatum überschritten wurde"
+ },
+ "common": {
+ "seeAll": "Alle anzeigen",
+ "totalLoggedHours": "Gesamterfasste Stunden",
+ "totalEstimation": "Gesamtschätzung",
+ "completedTasks": "Abgeschlossene Aufgaben",
+ "incompleteTasks": "Unvollständige Aufgaben",
+ "overdueTasks": "Überfällige Aufgaben",
+ "overdueTasksTooltip": "Aufgaben, deren Fälligkeitsdatum überschritten wurde",
+ "totalLoggedHoursTooltip": "Zeitschätzung und erfasste Zeit für Aufgaben.",
+ "includeArchivedTasks": "Archivierte Aufgaben einbeziehen",
+ "export": "Exportieren"
+ }
+}
diff --git a/worklenz-frontend/public/locales/de/project-view-members.json b/worklenz-frontend/public/locales/de/project-view-members.json
new file mode 100644
index 00000000..eee5d0a1
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/project-view-members.json
@@ -0,0 +1,17 @@
+{
+ "nameColumn": "Name",
+ "jobTitleColumn": "Jobtitel",
+ "emailColumn": "E-Mail",
+ "tasksColumn": "Aufgaben",
+ "taskProgressColumn": "Aufgabenfortschritt",
+ "accessColumn": "Zugriff",
+ "fileIconAlt": "Dateisymbol",
+ "deleteConfirmationTitle": "Sind Sie sicher?",
+ "deleteConfirmationOk": "Ja",
+ "deleteConfirmationCancel": "Abbrechen",
+ "refreshButtonTooltip": "Mitglieder aktualisieren",
+ "deleteButtonTooltip": "Aus Projekt entfernen",
+ "memberCount": "Mitglied",
+ "membersCountPlural": "Mitglieder",
+ "emptyText": "Es gibt keine Anhänge in diesem Projekt."
+}
diff --git a/worklenz-frontend/public/locales/de/project-view-updates.json b/worklenz-frontend/public/locales/de/project-view-updates.json
new file mode 100644
index 00000000..d32cf352
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/project-view-updates.json
@@ -0,0 +1,6 @@
+{
+ "inputPlaceholder": "Kommentar hinzufügen..",
+ "addButton": "Hinzufügen",
+ "cancelButton": "Abbrechen",
+ "deleteButton": "Löschen"
+}
diff --git a/worklenz-frontend/public/locales/de/project-view/import-task-templates.json b/worklenz-frontend/public/locales/de/project-view/import-task-templates.json
new file mode 100644
index 00000000..c5af50a0
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/project-view/import-task-templates.json
@@ -0,0 +1,11 @@
+{
+ "importTaskTemplate": "Aufgabenvorlage importieren",
+ "templateName": "Vorlagenname",
+ "templateDescription": "Vorlagenbeschreibung",
+ "selectedTasks": "Ausgewählte Aufgaben",
+ "tasks": "Aufgaben",
+ "templates": "Vorlagen",
+ "remove": "Entfernen",
+ "cancel": "Abbrechen",
+ "import": "Importieren"
+}
diff --git a/worklenz-frontend/public/locales/de/project-view/project-member-drawer.json b/worklenz-frontend/public/locales/de/project-view/project-member-drawer.json
new file mode 100644
index 00000000..cb391b2c
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/project-view/project-member-drawer.json
@@ -0,0 +1,7 @@
+{
+ "title": "Projektmitglieder",
+ "searchLabel": "Mitglieder hinzufügen durch Eingabe von Name oder E-Mail",
+ "searchPlaceholder": "Name oder E-Mail eingeben",
+ "inviteAsAMember": "Als Mitglied einladen",
+ "inviteNewMemberByEmail": "Neues Mitglied per E-Mail einladen"
+}
diff --git a/worklenz-frontend/public/locales/de/project-view/project-view-header.json b/worklenz-frontend/public/locales/de/project-view/project-view-header.json
new file mode 100644
index 00000000..ad236a04
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/project-view/project-view-header.json
@@ -0,0 +1,13 @@
+{
+ "importTasks": "Aufgaben importieren",
+ "createTask": "Aufgabe erstellen",
+ "settings": "Einstellungen",
+ "subscribe": "Abonnieren",
+ "unsubscribe": "Abbestellen",
+ "deleteProject": "Projekt löschen",
+ "startDate": "Startdatum",
+ "endDate": "Enddatum",
+ "projectSettings": "Projekteinstellungen",
+ "projectSummary": "Projektzusammenfassung",
+ "receiveProjectSummary": "Erhalten Sie jeden Abend eine Projektzusammenfassung."
+}
diff --git a/worklenz-frontend/public/locales/de/project-view/save-as-template.json b/worklenz-frontend/public/locales/de/project-view/save-as-template.json
new file mode 100644
index 00000000..7b732962
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/project-view/save-as-template.json
@@ -0,0 +1,27 @@
+{
+ "title": "Als Vorlage speichern",
+ "templateName": "Vorlagenname",
+ "includes": "Was soll aus dem Projekt in die Vorlage aufgenommen werden?",
+ "includesOptions": {
+ "statuses": "Status",
+ "phases": "Phasen",
+ "labels": "Labels"
+ },
+ "taskIncludes": "Was soll aus den Aufgaben in die Vorlage aufgenommen werden?",
+ "taskIncludesOptions": {
+ "statuses": "Status",
+ "phases": "Phasen",
+ "labels": "Labels",
+ "name": "Name",
+ "priority": "Priorität",
+ "status": "Status",
+ "phase": "Phase",
+ "label": "Label",
+ "timeEstimate": "Zeitschätzung",
+ "description": "Beschreibung",
+ "subTasks": "Unteraufgaben"
+ },
+ "cancel": "Abbrechen",
+ "save": "Speichern",
+ "templateNamePlaceholder": "Vorlagennamen eingeben"
+}
diff --git a/worklenz-frontend/public/locales/de/reporting-members-drawer.json b/worklenz-frontend/public/locales/de/reporting-members-drawer.json
new file mode 100644
index 00000000..807f43c7
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/reporting-members-drawer.json
@@ -0,0 +1,90 @@
+{
+ "exportButton": "Exportieren",
+ "timeLogsButton": "Zeiterfassungen",
+ "activityLogsButton": "Aktivitätsprotokolle",
+ "tasksButton": "Aufgaben",
+ "searchByNameInputPlaceholder": "Nach Namen suchen",
+
+ "overviewTab": "Übersicht",
+ "timeLogsTab": "Zeiterfassungen",
+ "activityLogsTab": "Aktivitätsprotokolle",
+ "tasksTab": "Aufgaben",
+
+ "projectsText": "Projekte",
+ "totalTasksText": "Gesamtaufgaben",
+ "assignedTasksText": "Zugewiesene Aufgaben",
+ "completedTasksText": "Abgeschlossene Aufgaben",
+ "ongoingTasksText": "Laufende Aufgaben",
+ "overdueTasksText": "Überfällige Aufgaben",
+ "loggedHoursText": "Erfasste Stunden",
+
+ "tasksText": "Aufgaben",
+ "allText": "Alle",
+
+ "tasksByProjectsText": "Aufgaben nach Projekten",
+ "tasksByStatusText": "Aufgaben nach Status",
+ "tasksByPriorityText": "Aufgaben nach Priorität",
+
+ "todoText": "Zu erledigen",
+ "doingText": "Tun",
+ "doneText": "Erledigt",
+ "lowText": "Niedrig",
+ "mediumText": "Mittel",
+ "highText": "Hoch",
+
+ "billableButton": "Abrechenbar",
+ "billableText": "Abrechenbar",
+ "nonBillableText": "Nicht abrechenbar",
+
+ "timeLogsEmptyPlaceholder": "Keine Zeiterfassungen vorhanden",
+ "loggedText": "Erfasst",
+ "forText": "für",
+ "inText": "in",
+ "updatedText": "Aktualisiert",
+ "fromText": "Von",
+ "toText": "bis",
+ "withinText": "innerhalb",
+
+ "activityLogsEmptyPlaceholder": "Keine Aktivitätsprotokolle vorhanden",
+
+ "filterByText": "Filtern nach:",
+ "selectProjectPlaceholder": "Projekt auswählen",
+
+ "taskColumn": "Aufgabe",
+ "nameColumn": "Name",
+ "projectColumn": "Projekt",
+ "statusColumn": "Status",
+ "priorityColumn": "Priorität",
+ "dueDateColumn": "Fälligkeitsdatum",
+ "completedDateColumn": "Abschlussdatum",
+ "estimatedTimeColumn": "Geschätzte Zeit",
+ "loggedTimeColumn": "Erfasste Zeit",
+ "overloggedTimeColumn": "Übererfasste Zeit",
+ "daysLeftColumn": "Tage übrig/überfällig",
+ "startDateColumn": "Startdatum",
+ "endDateColumn": "Enddatum",
+ "actualTimeColumn": "Tatsächliche Zeit",
+ "projectHealthColumn": "Projektstatus",
+ "categoryColumn": "Kategorie",
+ "projectManagerColumn": "Projektleiter",
+
+ "tasksStatsOverviewDrawerTitle": "Aufgaben von",
+ "projectsStatsOverviewDrawerTitle": "Projekte von",
+
+ "cancelledText": "Abgebrochen",
+ "blockedText": "Blockiert",
+ "onHoldText": "Pausiert",
+ "proposedText": "Vorgeschlagen",
+ "inPlanningText": "In Planung",
+ "inProgressText": "In Bearbeitung",
+ "completedText": "Abgeschlossen",
+ "continuousText": "Kontinuierlich",
+
+ "daysLeftText": "Tage übrig",
+ "daysOverdueText": "Tage überfällig",
+
+ "notSetText": "Nicht festgelegt",
+ "needsAttentionText": "Benötigt Aufmerksamkeit",
+ "atRiskText": "Gefährdet",
+ "goodText": "Gut"
+}
diff --git a/worklenz-frontend/public/locales/de/reporting-members.json b/worklenz-frontend/public/locales/de/reporting-members.json
new file mode 100644
index 00000000..5454d2a8
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/reporting-members.json
@@ -0,0 +1,35 @@
+{
+ "yesterdayText": "Gestern",
+ "lastSevenDaysText": "Letzte 7 Tage",
+ "lastWeekText": "Letzte Woche",
+ "lastThirtyDaysText": "Letzte 30 Tage",
+ "lastMonthText": "Letzter Monat",
+ "lastThreeMonthsText": "Letzte 3 Monate",
+ "allTimeText": "Gesamter Zeitraum",
+ "customRangeText": "Benutzerdefinierter Bereich",
+ "startDateInputPlaceholder": "Startdatum",
+ "EndDateInputPlaceholder": "Enddatum",
+ "filterButton": "Filtern",
+
+ "membersTitle": "Mitglieder",
+ "includeArchivedButton": "Archivierte Projekte einschließen",
+ "exportButton": "Exportieren",
+ "excelButton": "Excel",
+ "searchByNameInputPlaceholder": "Nach Namen suchen",
+
+ "memberColumn": "Mitglied",
+ "tasksProgressColumn": "Aufgabenfortschritt",
+ "tasksAssignedColumn": "Zugewiesene Aufgaben",
+ "completedTasksColumn": "Abgeschlossene Aufgaben",
+ "overdueTasksColumn": "Überfällige Aufgaben",
+ "ongoingTasksColumn": "Laufende Aufgaben",
+
+ "tasksAssignedColumnTooltip": "Im ausgewählten Zeitraum zugewiesene Aufgaben",
+ "overdueTasksColumnTooltip": "Zum Ende des ausgewählten Zeitraums überfällige Aufgaben",
+ "completedTasksColumnTooltip": "Im ausgewählten Zeitraum abgeschlossene Aufgaben",
+ "ongoingTasksColumnTooltip": "Begonnene, aber noch nicht abgeschlossene Aufgaben",
+
+ "todoText": "Zu erledigen",
+ "doingText": "Tun",
+ "doneText": "Erledigt"
+}
diff --git a/worklenz-frontend/public/locales/de/reporting-overview-drawer.json b/worklenz-frontend/public/locales/de/reporting-overview-drawer.json
new file mode 100644
index 00000000..6bf4678a
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/reporting-overview-drawer.json
@@ -0,0 +1,39 @@
+{
+ "exportButton": "Exportieren",
+ "projectsButton": "Projekte",
+ "membersButton": "Mitglieder",
+ "searchByNameInputPlaceholder": "Nach Namen suchen",
+
+ "overviewTab": "Übersicht",
+ "projectsTab": "Projekte",
+ "membersTab": "Mitglieder",
+
+ "projectsByStatusText": "Projekte nach Status",
+ "projectsByCategoryText": "Projekte nach Kategorie",
+ "projectsByHealthText": "Projekte nach Gesundheit",
+
+ "projectsText": "Projekte",
+ "allText": "Alle",
+
+ "cancelledText": "Abgebrochen",
+ "blockedText": "Blockiert",
+ "onHoldText": "Pausiert",
+ "proposedText": "Vorgeschlagen",
+ "inPlanningText": "In Planung",
+ "inProgressText": "In Bearbeitung",
+ "completedText": "Abgeschlossen",
+ "continuousText": "Kontinuierlich",
+
+ "notSetText": "Nicht festgelegt",
+ "needsAttentionText": "Benötigt Aufmerksamkeit",
+ "atRiskText": "Gefährdet",
+ "goodText": "Gut",
+
+ "nameColumn": "Name",
+ "emailColumn": "E-Mail",
+ "projectsColumn": "Projekte",
+ "tasksColumn": "Aufgaben",
+ "overdueTasksColumn": "Überfällige Aufgaben",
+ "completedTasksColumn": "Abgeschlossene Aufgaben",
+ "ongoingTasksColumn": "Laufende Aufgaben"
+}
diff --git a/worklenz-frontend/public/locales/de/reporting-overview.json b/worklenz-frontend/public/locales/de/reporting-overview.json
new file mode 100644
index 00000000..411ec83a
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/reporting-overview.json
@@ -0,0 +1,25 @@
+{
+ "overviewTitle": "Übersicht",
+ "includeArchivedButton": "Archivierte Projekte einschließen",
+
+ "teamCount": "Team",
+ "teamCountPlural": "Teams",
+ "projectCount": "Projekt",
+ "projectCountPlural": "Projekte",
+ "memberCount": "Mitglied",
+ "memberCountPlural": "Mitglieder",
+ "activeProjectCount": "Aktives Projekt",
+ "activeProjectCountPlural": "Aktive Projekte",
+ "overdueProjectCount": "Überfälliges Projekt",
+ "overdueProjectCountPlural": "Überfällige Projekte",
+ "unassignedMemberCount": "Nicht zugewiesenes Mitglied",
+ "unassignedMemberCountPlural": "Nicht zugewiesene Mitglieder",
+ "memberWithOverdueTaskCount": "Mitglied mit überfälliger Aufgabe",
+ "memberWithOverdueTaskCountPlural": "Mitglieder mit überfälligen Aufgaben",
+
+ "teamsText": "Teams",
+
+ "nameColumn": "Name",
+ "projectsColumn": "Projekte",
+ "membersColumn": "Mitglieder"
+}
diff --git a/worklenz-frontend/public/locales/de/reporting-projects-drawer.json b/worklenz-frontend/public/locales/de/reporting-projects-drawer.json
new file mode 100644
index 00000000..3f335a6c
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/reporting-projects-drawer.json
@@ -0,0 +1,59 @@
+{
+ "exportButton": "Exportieren",
+ "membersButton": "Mitglieder",
+ "tasksButton": "Aufgaben",
+ "searchByNameInputPlaceholder": "Nach Namen suchen",
+
+ "overviewTab": "Übersicht",
+ "membersTab": "Mitglieder",
+ "tasksTab": "Aufgaben",
+
+ "completedTasksText": "Abgeschlossene Aufgaben",
+ "incompleteTasksText": "Unvollständige Aufgaben",
+ "overdueTasksText": "Überfällige Aufgaben",
+ "allocatedHoursText": "Zugewiesene Stunden",
+ "loggedHoursText": "Erfasste Stunden",
+
+ "tasksText": "Aufgaben",
+ "allText": "Alle",
+
+ "tasksByStatusText": "Aufgaben nach Status",
+ "tasksByPriorityText": "Aufgaben nach Priorität",
+ "tasksByDueDateText": "Aufgaben nach Fälligkeit",
+
+ "todoText": "Zu erledigen",
+ "doingText": "Tun",
+ "doneText": "Erledigt",
+ "lowText": "Niedrig",
+ "mediumText": "Mittel",
+ "highText": "Hoch",
+ "completedText": "Abgeschlossen",
+ "upcomingText": "Bevorstehend",
+ "overdueText": "Überfällig",
+ "noDueDateText": "Kein Fälligkeitsdatum",
+
+ "nameColumn": "Name",
+ "tasksCountColumn": "Anzahl Aufgaben",
+ "completedTasksColumn": "Abgeschlossene Aufgaben",
+ "incompleteTasksColumn": "Unvollständige Aufgaben",
+ "overdueTasksColumn": "Überfällige Aufgaben",
+ "contributionColumn": "Beitrag",
+ "progressColumn": "Fortschritt",
+ "loggedTimeColumn": "Erfasste Zeit",
+ "taskColumn": "Aufgabe",
+ "projectColumn": "Projekt",
+ "statusColumn": "Status",
+ "priorityColumn": "Priorität",
+ "phaseColumn": "Phase",
+ "dueDateColumn": "Fälligkeitsdatum",
+ "completedDateColumn": "Abschlussdatum",
+ "estimatedTimeColumn": "Geschätzte Zeit",
+ "overloggedTimeColumn": "Übererfasste Zeit",
+ "completedOnColumn": "Abgeschlossen am",
+ "daysOverdueColumn": "Tage überfällig",
+
+ "groupByText": "Gruppieren nach:",
+ "statusText": "Status",
+ "priorityText": "Priorität",
+ "phaseText": "Phase"
+}
diff --git a/worklenz-frontend/public/locales/de/reporting-projects-filters.json b/worklenz-frontend/public/locales/de/reporting-projects-filters.json
new file mode 100644
index 00000000..c48fa256
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/reporting-projects-filters.json
@@ -0,0 +1,35 @@
+{
+ "searchByNamePlaceholder": "Nach Namen suchen",
+ "searchByCategoryPlaceholder": "Nach Kategorie suchen",
+
+ "statusText": "Status",
+ "healthText": "Gesundheit",
+ "categoryText": "Kategorie",
+ "projectManagerText": "Projektleiter",
+ "showFieldsText": "Felder anzeigen",
+
+ "cancelledText": "Abgebrochen",
+ "blockedText": "Blockiert",
+ "onHoldText": "Pausiert",
+ "proposedText": "Vorgeschlagen",
+ "inPlanningText": "In Planung",
+ "inProgressText": "In Bearbeitung",
+ "completedText": "Abgeschlossen",
+ "continuousText": "Kontinuierlich",
+
+ "notSetText": "Nicht festgelegt",
+ "needsAttentionText": "Benötigt Aufmerksamkeit",
+ "atRiskText": "Gefährdet",
+ "goodText": "Gut",
+
+ "nameText": "Projekt",
+ "estimatedVsActualText": "Geplant vs. Tatsächlich",
+ "tasksProgressText": "Aufgabenfortschritt",
+ "lastActivityText": "Letzte Aktivität",
+ "datesText": "Start-/Enddatum",
+ "daysLeftText": "Tage übrig/überfällig",
+ "projectHealthText": "Projektstatus",
+ "projectUpdateText": "Projektupdate",
+ "clientText": "Kunde",
+ "teamText": "Team"
+}
diff --git a/worklenz-frontend/public/locales/de/reporting-projects.json b/worklenz-frontend/public/locales/de/reporting-projects.json
new file mode 100644
index 00000000..0f63310b
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/reporting-projects.json
@@ -0,0 +1,52 @@
+{
+ "projectCount": "Projekt",
+ "projectCountPlural": "Projekte",
+ "includeArchivedButton": "Archivierte Projekte einschließen",
+ "exportButton": "Exportieren",
+ "excelButton": "Excel",
+
+ "projectColumn": "Projekt",
+ "estimatedVsActualColumn": "Geschätzt vs. Tatsächlich",
+ "tasksProgressColumn": "Aufgabenfortschritt",
+ "lastActivityColumn": "Letzte Aktivität",
+ "statusColumn": "Status",
+ "datesColumn": "Start-/Enddatum",
+ "daysLeftColumn": "Tage übrig/überfällig",
+ "projectHealthColumn": "Projektzustand",
+ "categoryColumn": "Kategorie",
+ "projectUpdateColumn": "Projektupdate",
+ "clientColumn": "Kunde",
+ "teamColumn": "Team",
+ "projectManagerColumn": "Projektleiter",
+
+ "openButton": "Öffnen",
+
+ "estimatedText": "Geschätzt",
+ "actualText": "Tatsächlich",
+
+ "todoText": "Zu erledigen",
+ "doingText": "Tun",
+ "doneText": "Erledigt",
+
+ "cancelledText": "Abgebrochen",
+ "blockedText": "Blockiert",
+ "onHoldText": "Pausiert",
+ "proposedText": "Vorgeschlagen",
+ "inPlanningText": "In Planung",
+ "inProgressText": "In Bearbeitung",
+ "completedText": "Abgeschlossen",
+ "continuousText": "Kontinuierlich",
+
+ "daysLeftText": "Tage übrig",
+ "dayLeftText": "Tag übrig",
+ "daysOverdueText": "Tage überfällig",
+
+ "notSetText": "Nicht festgelegt",
+ "needsAttentionText": "Benötigt Aufmerksamkeit",
+ "atRiskText": "Gefährdet",
+ "goodText": "Gut",
+
+ "setCategoryText": "Kategorie festlegen",
+ "searchByNameInputPlaceholder": "Nach Namen suchen",
+ "todayText": "Heute"
+}
diff --git a/worklenz-frontend/public/locales/de/reporting-sidebar.json b/worklenz-frontend/public/locales/de/reporting-sidebar.json
new file mode 100644
index 00000000..74d6bfb9
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/reporting-sidebar.json
@@ -0,0 +1,8 @@
+{
+ "overview": "Übersicht",
+ "projects": "Projekte",
+ "members": "Mitglieder",
+ "timeReports": "Zeitberichte",
+ "estimateVsActual": "Schätzen vs. Tatsächlich",
+ "currentOrganizationTooltip": "Aktuelle Organisation"
+}
diff --git a/worklenz-frontend/public/locales/de/schedule.json b/worklenz-frontend/public/locales/de/schedule.json
new file mode 100644
index 00000000..046c7bb0
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/schedule.json
@@ -0,0 +1,39 @@
+{
+ "today": "Heute",
+ "week": "Woche",
+ "month": "Monat",
+
+ "settings": "Einstellungen",
+ "workingDays": "Arbeitstage",
+ "monday": "Montag",
+ "tuesday": "Dienstag",
+ "wednesday": "Mittwoch",
+ "thursday": "Donnerstag",
+ "friday": "Freitag",
+ "saturday": "Samstag",
+ "sunday": "Sonntag",
+ "workingHours": "Arbeitsstunden",
+ "hours": "Stunden",
+ "saveButton": "Speichern",
+
+ "totalAllocation": "Gesamtzuteilung",
+ "timeLogged": "Zeiterfassung",
+ "remainingTime": "Verbleibende Zeit",
+ "total": "Gesamt",
+ "perDay": "Pro Tag",
+ "tasks": "Aufgaben",
+ "startDate": "Startdatum",
+ "endDate": "Enddatum",
+
+ "hoursPerDay": "Stunden pro Tag",
+ "totalHours": "Gesamtstunden",
+ "deleteButton": "Löschen",
+ "cancelButton": "Abbrechen",
+
+ "tabTitle": "Aufgaben ohne Start- & Enddatum",
+
+ "allocatedTime": "Zugewiesene Zeit",
+ "totalLogged": "Gesamterfasst",
+ "loggedBillable": "Abrechenbar erfasst",
+ "loggedNonBillable": "Nicht abrechenbar erfasst"
+}
diff --git a/worklenz-frontend/public/locales/de/settings/categories.json b/worklenz-frontend/public/locales/de/settings/categories.json
new file mode 100644
index 00000000..5694d11d
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/settings/categories.json
@@ -0,0 +1,10 @@
+{
+ "categoryColumn": "Kategorie",
+ "deleteConfirmationTitle": "Sind Sie sicher?",
+ "deleteConfirmationOk": "Ja",
+ "deleteConfirmationCancel": "Abbrechen",
+ "associatedTaskColumn": "Zugehörige Projekte",
+ "searchPlaceholder": "Nach Namen suchen",
+ "emptyText": "Kategorien können beim Aktualisieren oder Erstellen von Projekten angelegt werden.",
+ "colorChangeTooltip": "Zum Farbwechsel klicken"
+}
diff --git a/worklenz-frontend/public/locales/de/settings/change-password.json b/worklenz-frontend/public/locales/de/settings/change-password.json
new file mode 100644
index 00000000..6b65a8cf
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/settings/change-password.json
@@ -0,0 +1,15 @@
+{
+ "title": "Passwort ändern",
+ "currentPassword": "Aktuelles Passwort",
+ "newPassword": "Neues Passwort",
+ "confirmPassword": "Passwort bestätigen",
+ "currentPasswordPlaceholder": "Aktuelles Passwort eingeben",
+ "newPasswordPlaceholder": "Neues Passwort",
+ "confirmPasswordPlaceholder": "Passwort bestätigen",
+ "currentPasswordRequired": "Bitte geben Sie Ihr aktuelles Passwort ein!",
+ "newPasswordRequired": "Bitte geben Sie Ihr neues Passwort ein!",
+ "passwordValidationError": "Das Passwort muss mindestens 8 Zeichen lang sein und einen Großbuchstaben, eine Zahl und ein Sonderzeichen enthalten.",
+ "passwordMismatch": "Die Passwörter stimmen nicht überein!",
+ "passwordRequirements": "Das neue Passwort muss mindestens 8 Zeichen lang sein und einen Großbuchstaben, eine Zahl und ein Sonderzeichen enthalten.",
+ "updateButton": "Passwort aktualisieren"
+}
diff --git a/worklenz-frontend/public/locales/de/settings/clients.json b/worklenz-frontend/public/locales/de/settings/clients.json
new file mode 100644
index 00000000..d2982bdb
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/settings/clients.json
@@ -0,0 +1,22 @@
+{
+ "nameColumn": "Name",
+ "projectColumn": "Projekt",
+ "noProjectsAvailable": "Keine Projekte verfügbar",
+ "deleteConfirmationTitle": "Sind Sie sicher?",
+ "deleteConfirmationOk": "Ja",
+ "deleteConfirmationCancel": "Abbrechen",
+ "searchPlaceholder": "Nach Namen suchen",
+ "createClient": "Kunde anlegen",
+ "pinTooltip": "Zum Anheften an das Hauptmenü klicken",
+ "createClientDrawerTitle": "Kunde anlegen",
+ "updateClientDrawerTitle": "Kunde aktualisieren",
+ "nameLabel": "Name",
+ "namePlaceholder": "Name",
+ "nameRequiredError": "Bitte geben Sie einen Namen ein",
+ "createButton": "Anlegen",
+ "updateButton": "Aktualisieren",
+ "createClientSuccessMessage": "Kunde erfolgreich angelegt!",
+ "createClientErrorMessage": "Anlegen des Kunden fehlgeschlagen!",
+ "updateClientSuccessMessage": "Kunde erfolgreich aktualisiert!",
+ "updateClientErrorMessage": "Aktualisierung des Kunden fehlgeschlagen!"
+}
diff --git a/worklenz-frontend/public/locales/de/settings/job-titles.json b/worklenz-frontend/public/locales/de/settings/job-titles.json
new file mode 100644
index 00000000..f4403ad1
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/settings/job-titles.json
@@ -0,0 +1,20 @@
+{
+ "nameColumn": "Name",
+ "deleteConfirmationTitle": "Sind Sie sicher?",
+ "deleteConfirmationOk": "Ja",
+ "deleteConfirmationCancel": "Abbrechen",
+ "searchPlaceholder": "Nach Namen suchen",
+ "createJobTitleButton": "Jobtitel erstellen",
+ "pinTooltip": "Zum Anheften an das Hauptmenü klicken",
+ "createJobTitleDrawerTitle": "Jobtitel erstellen",
+ "updateJobTitleDrawerTitle": "Jobtitel aktualisieren",
+ "nameLabel": "Name",
+ "namePlaceholder": "Name",
+ "nameRequiredError": "Bitte geben Sie einen Namen ein",
+ "createButton": "Erstellen",
+ "updateButton": "Aktualisieren",
+ "createJobTitleSuccessMessage": "Jobtitel erfolgreich erstellt!",
+ "createJobTitleErrorMessage": "Erstellung des Jobtitels fehlgeschlagen!",
+ "updateJobTitleSuccessMessage": "Jobtitel erfolgreich aktualisiert!",
+ "updateJobTitleErrorMessage": "Aktualisierung des Jobtitels fehlgeschlagen!"
+}
diff --git a/worklenz-frontend/public/locales/de/settings/labels.json b/worklenz-frontend/public/locales/de/settings/labels.json
new file mode 100644
index 00000000..18b6a021
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/settings/labels.json
@@ -0,0 +1,11 @@
+{
+ "labelColumn": "Label",
+ "deleteConfirmationTitle": "Sind Sie sicher?",
+ "deleteConfirmationOk": "Ja",
+ "deleteConfirmationCancel": "Abbrechen",
+ "associatedTaskColumn": "Zugeordnete Aufgabenanzahl",
+ "searchPlaceholder": "Nach Name suchen",
+ "emptyText": "Labels können beim Aktualisieren oder Erstellen von Aufgaben erstellt werden.",
+ "pinTooltip": "Zum Anheften an das Hauptmenü klicken",
+ "colorChangeTooltip": "Zum Ändern der Farbe klicken"
+}
diff --git a/worklenz-frontend/public/locales/de/settings/language.json b/worklenz-frontend/public/locales/de/settings/language.json
new file mode 100644
index 00000000..9e6bc27d
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/settings/language.json
@@ -0,0 +1,7 @@
+{
+ "language": "Sprache",
+ "language_required": "Sprache ist erforderlich",
+ "time_zone": "Zeitzone",
+ "time_zone_required": "Zeitzone ist erforderlich",
+ "save_changes": "Änderungen speichern"
+}
diff --git a/worklenz-frontend/public/locales/de/settings/notifications.json b/worklenz-frontend/public/locales/de/settings/notifications.json
new file mode 100644
index 00000000..272542a0
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/settings/notifications.json
@@ -0,0 +1,11 @@
+{
+ "title": "Benachrichtigungseinstellungen",
+ "emailTitle": "E-Mail-Benachrichtigungen erhalten",
+ "emailDescription": "Dies beinhaltet neue Aufgaben-Zuweisungen",
+ "dailyDigestTitle": "Tägliche Übersicht erhalten",
+ "dailyDigestDescription": "Jeden Abend erhalten Sie eine Zusammenfassung der letzten Aktivitäten in Aufgaben.",
+ "popupTitle": "Popup-Benachrichtigungen auf meinem Computer anzeigen, wenn Worklenz geöffnet ist",
+ "popupDescription": "Popup-Benachrichtigungen können von Ihrem Browser blockiert werden. Ändern Sie Ihre Browser-Einstellungen, um diese zu erlauben.",
+ "unreadItemsTitle": "Anzahl ungelesener Elemente anzeigen",
+ "unreadItemsDescription": "Sie sehen Zähler für jede Benachrichtigung."
+}
diff --git a/worklenz-frontend/public/locales/de/settings/profile.json b/worklenz-frontend/public/locales/de/settings/profile.json
new file mode 100644
index 00000000..f896e1f8
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/settings/profile.json
@@ -0,0 +1,13 @@
+{
+ "uploadError": "Sie können nur JPG/PNG-Dateien hochladen!",
+ "uploadSizeError": "Bilder müssen kleiner als 2MB sein!",
+ "upload": "Hochladen",
+ "nameLabel": "Name",
+ "nameRequiredError": "Name ist erforderlich",
+ "emailLabel": "E-Mail",
+ "emailRequiredError": "E-Mail ist erforderlich",
+ "saveChanges": "Änderungen speichern",
+ "profileJoinedText": "Vor einem Monat beigetreten",
+ "profileLastUpdatedText": "Vor einem Monat aktualisiert",
+ "avatarTooltip": "Klicken Sie zum Hochladen eines Avatars"
+}
diff --git a/worklenz-frontend/public/locales/de/settings/project-templates.json b/worklenz-frontend/public/locales/de/settings/project-templates.json
new file mode 100644
index 00000000..6c6e23ca
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/settings/project-templates.json
@@ -0,0 +1,8 @@
+{
+ "nameColumn": "Name",
+ "editToolTip": "Bearbeiten",
+ "deleteToolTip": "Löschen",
+ "confirmText": "Sind Sie sicher?",
+ "okText": "Ja",
+ "cancelText": "Abbrechen"
+}
diff --git a/worklenz-frontend/public/locales/de/settings/sidebar.json b/worklenz-frontend/public/locales/de/settings/sidebar.json
new file mode 100644
index 00000000..d4d8754d
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/settings/sidebar.json
@@ -0,0 +1,14 @@
+{
+ "profile": "Profil",
+ "notifications": "Benachrichtigungen",
+ "clients": "Kunden",
+ "job-titles": "Jobbezeichnungen",
+ "labels": "Labels",
+ "categories": "Kategorien",
+ "project-templates": "Projektvorlagen",
+ "task-templates": "Aufgabenvorlagen",
+ "team-members": "Teammitglieder",
+ "teams": "Teams",
+ "change-password": "Passwort ändern",
+ "language-and-region": "Sprache und Region"
+}
diff --git a/worklenz-frontend/public/locales/de/settings/task-templates.json b/worklenz-frontend/public/locales/de/settings/task-templates.json
new file mode 100644
index 00000000..ffe93318
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/settings/task-templates.json
@@ -0,0 +1,9 @@
+{
+ "nameColumn": "Name",
+ "createdColumn": "Erstellt",
+ "editToolTip": "Bearbeiten",
+ "deleteToolTip": "Löschen",
+ "confirmText": "Sind Sie sicher?",
+ "okText": "Ja",
+ "cancelText": "Abbrechen"
+}
diff --git a/worklenz-frontend/public/locales/de/settings/team-members.json b/worklenz-frontend/public/locales/de/settings/team-members.json
new file mode 100644
index 00000000..6f2add12
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/settings/team-members.json
@@ -0,0 +1,44 @@
+{
+ "nameColumn": "Name",
+ "projectsColumn": "Projekte",
+ "emailColumn": "E-Mail",
+ "teamAccessColumn": "Team-Zugriff",
+ "memberCount": "Mitglied",
+ "membersCountPlural": "Mitglieder",
+ "searchPlaceholder": "Mitglieder nach Namen suchen",
+ "pinTooltip": "Mitgliederliste aktualisieren",
+ "addMemberButton": "Neues Mitglied hinzufügen",
+ "editTooltip": "Mitglied bearbeiten",
+ "deactivateTooltip": "Mitglied deaktivieren",
+ "activateTooltip": "Mitglied aktivieren",
+ "deleteTooltip": "Mitglied löschen",
+ "confirmDeleteTitle": "Sind Sie sicher, dass Sie dieses Mitglied löschen möchten?",
+ "confirmActivateTitle": "Sind Sie sicher, dass Sie den Status dieses Mitglieds ändern möchten?",
+ "okText": "Ja, fortfahren",
+ "cancelText": "Nein, abbrechen",
+ "deactivatedText": "(Aktuell deaktiviert)",
+ "pendingInvitationText": "(Einladung ausstehend)",
+ "addMemberDrawerTitle": "Neues Teammitglied hinzufügen",
+ "updateMemberDrawerTitle": "Teammitglied aktualisieren",
+ "addMemberEmailHint": "Mitglieder werden dem Team hinzugefügt, unabhängig vom Status der Einladungsannahme",
+ "memberEmailLabel": "E-Mail(s)",
+ "memberEmailPlaceholder": "E-Mail-Adresse des Teammitglieds eingeben",
+ "memberEmailRequiredError": "Bitte geben Sie eine gültige E-Mail-Adresse ein",
+ "jobTitleLabel": "Jobtitel",
+ "jobTitlePlaceholder": "Jobtitel auswählen oder suchen (optional)",
+ "memberAccessLabel": "Zugriffslevel",
+ "addToTeamButton": "Mitglied zum Team hinzufügen",
+ "updateButton": "Änderungen speichern",
+ "resendInvitationButton": "Einladungs-E-Mail erneut senden",
+ "invitationSentSuccessMessage": "Team-Einladung erfolgreich versendet!",
+ "createMemberSuccessMessage": "Neues Teammitglied erfolgreich hinzugefügt!",
+ "createMemberErrorMessage": "Hinzufügen des Teammitglieds fehlgeschlagen. Bitte versuchen Sie es erneut.",
+ "updateMemberSuccessMessage": "Teammitglied erfolgreich aktualisiert!",
+ "updateMemberErrorMessage": "Aktualisierung des Teammitglieds fehlgeschlagen. Bitte versuchen Sie es erneut.",
+ "memberText": "Mitglied",
+ "adminText": "Administrator",
+ "ownerText": "Team-Besitzer",
+ "addedText": "Hinzugefügt",
+ "updatedText": "Aktualisiert",
+ "noResultFound": "Geben Sie eine E-Mail-Adresse ein und drücken Sie Enter..."
+}
diff --git a/worklenz-frontend/public/locales/de/task-drawer/task-drawer-info-tab.json b/worklenz-frontend/public/locales/de/task-drawer/task-drawer-info-tab.json
new file mode 100644
index 00000000..ed79d6bf
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/task-drawer/task-drawer-info-tab.json
@@ -0,0 +1,29 @@
+{
+ "details": {
+ "task-key": "Aufgabenschlüssel",
+ "phase": "Phase",
+ "assignees": "Zugewiesene",
+ "due-date": "Fälligkeitsdatum",
+ "time-estimation": "Zeitschätzung",
+ "priority": "Priorität",
+ "labels": "Labels",
+ "billable": "Abrechenbar",
+ "notify": "Benachrichtigen",
+ "when-done-notify": "Bei Fertigstellung benachrichtigen",
+ "start-date": "Startdatum",
+ "end-date": "Enddatum",
+ "hide-start-date": "Startdatum ausblenden",
+ "show-start-date": "Startdatum anzeigen",
+ "hours": "Stunden",
+ "minutes": "Minuten"
+ },
+ "description": {
+ "title": "Beschreibung",
+ "placeholder": "Fügen Sie eine detailliertere Beschreibung hinzu..."
+ },
+ "subTasks": {
+ "title": "Unteraufgaben",
+ "add-sub-task": "+ Unteraufgabe hinzufügen",
+ "refresh-sub-tasks": "Unteraufgaben aktualisieren"
+ }
+}
\ No newline at end of file
diff --git a/worklenz-frontend/public/locales/de/task-drawer/task-drawer.json b/worklenz-frontend/public/locales/de/task-drawer/task-drawer.json
new file mode 100644
index 00000000..b4aa0525
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/task-drawer/task-drawer.json
@@ -0,0 +1,78 @@
+{
+ "taskHeader": {
+ "taskNamePlaceholder": "Aufgabe eingeben",
+ "deleteTask": "Aufgabe löschen"
+ },
+ "taskInfoTab": {
+ "title": "Info",
+ "details": {
+ "title": "Details",
+ "task-key": "Aufgaben-Schlüssel",
+ "phase": "Phase",
+ "assignees": "Zugewiesene",
+ "due-date": "Fälligkeitsdatum",
+ "time-estimation": "Zeitschätzung",
+ "priority": "Priorität",
+ "labels": "Labels",
+ "billable": "Abrechenbar",
+ "notify": "Benachrichtigen",
+ "when-done-notify": "Bei Fertigstellung benachrichtigen",
+ "start-date": "Startdatum",
+ "end-date": "Enddatum",
+ "hide-start-date": "Startdatum ausblenden",
+ "show-start-date": "Startdatum anzeigen",
+ "hours": "Stunden",
+ "minutes": "Minuten"
+ },
+ "labels": {
+ "labelInputPlaceholder": "Suchen oder erstellen",
+ "labelsSelectorInputTip": "Enter drücken zum Erstellen"
+ },
+ "description": {
+ "title": "Beschreibung",
+ "placeholder": "Detaillierte Beschreibung hinzufügen..."
+ },
+ "subTasks": {
+ "title": "Unteraufgaben",
+ "addSubTask": "+ Unteraufgabe hinzufügen",
+ "addSubTaskInputPlaceholder": "Aufgabe eingeben und Enter drücken",
+ "refreshSubTasks": "Unteraufgaben aktualisieren",
+ "edit": "Bearbeiten",
+ "delete": "Löschen",
+ "confirmDeleteSubTask": "Sind Sie sicher, dass Sie diese Unteraufgabe löschen möchten?",
+ "deleteSubTask": "Unteraufgabe löschen"
+ },
+ "dependencies": {
+ "title": "Abhängigkeiten",
+ "addDependency": "+ Neue Abhängigkeit hinzufügen",
+ "blockedBy": "Blockiert durch",
+ "searchTask": "Aufgabe suchen",
+ "noTasksFound": "Keine Aufgaben gefunden",
+ "confirmDeleteDependency": "Sind Sie sicher, dass Sie dies löschen möchten?"
+ },
+ "attachments": {
+ "title": "Anhänge",
+ "chooseOrDropFileToUpload": "Datei auswählen oder zum Hochladen ablegen",
+ "uploading": "Wird hochgeladen..."
+ },
+ "comments": {
+ "title": "Kommentare",
+ "addComment": "+ Neuen Kommentar hinzufügen",
+ "noComments": "Noch keine Kommentare. Seien Sie der Erste!",
+ "delete": "Löschen",
+ "confirmDeleteComment": "Sind Sie sicher, dass Sie diesen Kommentar löschen möchten?"
+ },
+ "searchInputPlaceholder": "Nach Namen suchen",
+ "pendingInvitation": "Einladung ausstehend"
+ },
+ "taskTimeLogTab": {
+ "title": "Zeiterfassung",
+ "addTimeLog": "Neuen Zeiteintrag hinzufügen",
+ "totalLogged": "Gesamt erfasst",
+ "exportToExcel": "Nach Excel exportieren",
+ "noTimeLogsFound": "Keine Zeiterfassungen gefunden"
+ },
+ "taskActivityLogTab": {
+ "title": "Aktivitätsprotokoll"
+ }
+}
diff --git a/worklenz-frontend/public/locales/de/task-list-filters.json b/worklenz-frontend/public/locales/de/task-list-filters.json
new file mode 100644
index 00000000..4cc157c8
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/task-list-filters.json
@@ -0,0 +1,59 @@
+{
+ "searchButton": "Suchen",
+ "resetButton": "Zurücksetzen",
+ "searchInputPlaceholder": "Nach Namen suchen",
+
+ "sortText": "Sortieren",
+ "statusText": "Status",
+ "phaseText": "Phase",
+ "memberText": "Mitglieder",
+ "assigneesText": "Zugewiesene",
+ "priorityText": "Priorität",
+ "labelsText": "Labels",
+ "membersText": "Mitglieder",
+ "groupByText": "Gruppieren nach",
+ "showArchivedText": "Archivierte anzeigen",
+ "showFieldsText": "Felder anzeigen",
+ "keyText": "Schlüssel",
+ "taskText": "Aufgabe",
+ "descriptionText": "Beschreibung",
+ "phasesText": "Phasen",
+ "listText": "Liste",
+ "progressText": "Fortschritt",
+ "timeTrackingText": "Zeiterfassung",
+ "timetrackingText": "Zeiterfassung",
+ "estimationText": "Schätzung",
+ "startDateText": "Startdatum",
+ "startdateText": "Startdatum",
+ "endDateText": "Enddatum",
+ "dueDateText": "Fälligkeitsdatum",
+ "duedateText": "Fälligkeitsdatum",
+ "completedDateText": "Abschlussdatum",
+ "completeddateText": "Abschlussdatum",
+ "createdDateText": "Erstellungsdatum",
+ "createddateText": "Erstellungsdatum",
+ "lastUpdatedText": "Zuletzt aktualisiert",
+ "lastupdatedText": "Zuletzt aktualisiert",
+ "reporterText": "Melder",
+ "dueTimeText": "Fällige Zeit",
+ "duetimeText": "Fällige Zeit",
+
+ "lowText": "Niedrig",
+ "mediumText": "Mittel",
+ "highText": "Hoch",
+
+ "createStatusButtonTooltip": "Status-Einstellungen",
+ "configPhaseButtonTooltip": "Phasen-Einstellungen",
+ "noLabelsFound": "Keine Labels gefunden",
+
+ "addStatusButton": "Status hinzufügen",
+ "addPhaseButton": "Phase hinzufügen",
+
+ "createStatus": "Status erstellen",
+ "name": "Name",
+ "category": "Kategorie",
+ "selectCategory": "Kategorie auswählen",
+ "pleaseEnterAName": "Bitte geben Sie einen Namen ein",
+ "pleaseSelectACategory": "Bitte wählen Sie eine Kategorie aus",
+ "create": "Erstellen"
+}
diff --git a/worklenz-frontend/public/locales/de/task-list-table.json b/worklenz-frontend/public/locales/de/task-list-table.json
new file mode 100644
index 00000000..d399dea4
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/task-list-table.json
@@ -0,0 +1,63 @@
+{
+ "keyColumn": "Schlüssel",
+ "taskColumn": "Aufgabe",
+ "descriptionColumn": "Beschreibung",
+ "progressColumn": "Fortschritt",
+ "membersColumn": "Mitglieder",
+ "assigneesColumn": "Zugewiesene",
+ "labelsColumn": "Labels",
+ "phasesColumn": "Phasen",
+ "phaseColumn": "Phase",
+ "statusColumn": "Status",
+ "priorityColumn": "Priorität",
+ "timeTrackingColumn": "Zeiterfassung",
+ "timetrackingColumn": "Zeiterfassung",
+ "estimationColumn": "Schätzung",
+ "startDateColumn": "Startdatum",
+ "startdateColumn": "Startdatum",
+ "dueDateColumn": "Fälligkeitsdatum",
+ "duedateColumn": "Fälligkeitsdatum",
+ "completedDateColumn": "Abschlussdatum",
+ "completeddateColumn": "Abschlussdatum",
+ "createdDateColumn": "Erstellungsdatum",
+ "createddateColumn": "Erstellungsdatum",
+ "lastUpdatedColumn": "Zuletzt aktualisiert",
+ "lastupdatedColumn": "Zuletzt aktualisiert",
+ "reporterColumn": "Melder",
+ "dueTimeColumn": "Fällige Zeit",
+ "todoSelectorText": "Zu erledigen",
+ "doingSelectorText": "Tun",
+ "doneSelectorText": "Erledigt",
+
+ "lowSelectorText": "Niedrig",
+ "mediumSelectorText": "Mittel",
+ "highSelectorText": "Hoch",
+
+ "selectText": "Auswählen",
+ "labelsSelectorInputTip": "Enter drücken zum Erstellen!",
+
+ "addTaskText": "+ Aufgabe hinzufügen",
+ "addSubTaskText": "+ Unteraufgabe hinzufügen",
+ "addTaskInputPlaceholder": "Aufgabe eingeben und Enter drücken",
+
+ "openButton": "Öffnen",
+ "okButton": "OK",
+
+ "noLabelsFound": "Keine Labels gefunden",
+ "searchInputPlaceholder": "Suchen oder erstellen",
+ "assigneeSelectorInviteButton": "Neues Mitglied per E-Mail einladen",
+ "labelInputPlaceholder": "Suchen oder erstellen",
+
+ "pendingInvitation": "Einladung ausstehend",
+
+ "contextMenu": {
+ "assignToMe": "Mir zuweisen",
+ "moveTo": "Verschieben nach",
+ "unarchive": "Dearchivieren",
+ "archive": "Archivieren",
+ "convertToSubTask": "In Unteraufgabe umwandeln",
+ "convertToTask": "In Aufgabe umwandeln",
+ "delete": "Löschen",
+ "searchByNameInputPlaceholder": "Nach Namen suchen"
+ }
+}
diff --git a/worklenz-frontend/public/locales/de/task-template-drawer.json b/worklenz-frontend/public/locales/de/task-template-drawer.json
new file mode 100644
index 00000000..21dbe369
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/task-template-drawer.json
@@ -0,0 +1,11 @@
+{
+ "createTaskTemplate": "Aufgabenvorlage erstellen",
+ "editTaskTemplate": "Aufgabenvorlage bearbeiten",
+ "cancelText": "Abbrechen",
+ "saveText": "Speichern",
+ "templateNameText": "Vorlagenname",
+ "selectedTasks": "Ausgewählte Aufgaben",
+ "removeTask": "Entfernen",
+ "cancelButton": "Abbrechen",
+ "saveButton": "Speichern"
+}
diff --git a/worklenz-frontend/public/locales/de/tasks/task-table-bulk-actions.json b/worklenz-frontend/public/locales/de/tasks/task-table-bulk-actions.json
new file mode 100644
index 00000000..3c2d7132
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/tasks/task-table-bulk-actions.json
@@ -0,0 +1,24 @@
+{
+ "taskSelected": "Aufgabe ausgewählt",
+ "tasksSelected": "Aufgaben ausgewählt",
+ "changeStatus": "Status/Priorität/Phase ändern",
+ "changeLabel": "Label ändern",
+ "assignToMe": "Mir zuweisen",
+ "changeAssignees": "Zuständige ändern",
+ "archive": "Archivieren",
+ "unarchive": "Dearchivieren",
+ "delete": "Löschen",
+ "moreOptions": "Weitere Optionen",
+ "deselectAll": "Alle abwählen",
+ "status": "Status",
+ "priority": "Priorität",
+ "phase": "Phase",
+ "member": "Mitglied",
+ "createTaskTemplate": "Aufgabenvorlage erstellen",
+ "apply": "Anwenden",
+ "createLabel": "+ Label erstellen",
+ "hitEnterToCreate": "Enter drücken zum Erstellen",
+ "pendingInvitation": "Einladung ausstehend",
+ "noMatchingLabels": "Keine passenden Labels",
+ "noLabels": "Keine Labels"
+}
diff --git a/worklenz-frontend/public/locales/de/template-drawer.json b/worklenz-frontend/public/locales/de/template-drawer.json
new file mode 100644
index 00000000..8655504d
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/template-drawer.json
@@ -0,0 +1,19 @@
+{
+ "title": "Aufgabenvorlage bearbeiten",
+ "cancelText": "Abbrechen",
+ "saveText": "Speichern",
+ "templateNameText": "Vorlagenname",
+ "selectedTasks": "Ausgewählte Aufgaben",
+ "removeTask": "Entfernen",
+ "description": "Beschreibung",
+ "phase": "Phase",
+ "statuses": "Status",
+ "priorities": "Prioritäten",
+ "labels": "Labels",
+ "tasks": "Aufgaben",
+ "noTemplateSelected": "Keine Vorlage ausgewählt",
+ "noDescription": "Keine Beschreibung",
+ "worklenzTemplates": "Worklenz-Vorlagen",
+ "yourTemplatesLibrary": "Ihre Bibliothek",
+ "searchTemplates": "Vorlagen durchsuchen"
+}
diff --git a/worklenz-frontend/public/locales/de/templateDrawer.json b/worklenz-frontend/public/locales/de/templateDrawer.json
new file mode 100644
index 00000000..571ed15f
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/templateDrawer.json
@@ -0,0 +1,23 @@
+{
+ "bugTracking": "Fehlerverfolgung",
+ "construction": "Bauwesen",
+ "designCreative": "Design & Kreatives",
+ "education": "Bildung",
+ "finance": "Finanzen",
+ "hrRecruiting": "Personalwesen & Recruiting",
+ "informationTechnology": "Informationstechnologie",
+ "legal": "Rechtliches",
+ "manufacturing": "Produktion",
+ "marketing": "Marketing",
+ "nonprofit": "Gemeinnützig",
+ "personalUse": "Persönliche Nutzung",
+ "salesCRM": "Vertrieb & CRM",
+ "serviceConsulting": "Dienstleistungen & Beratung",
+ "softwareDevelopment": "Softwareentwicklung",
+ "description": "Beschreibung",
+ "phase": "Phase",
+ "statuses": "Status",
+ "priorities": "Prioritäten",
+ "labels": "Labels",
+ "tasks": "Aufgaben"
+}
diff --git a/worklenz-frontend/public/locales/de/time-report.json b/worklenz-frontend/public/locales/de/time-report.json
new file mode 100644
index 00000000..efadbb8a
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/time-report.json
@@ -0,0 +1,44 @@
+{
+ "includeArchivedProjects": "Archivierte Projekte einschließen",
+ "export": "Exportieren",
+ "timeSheet": "Stundenzettel",
+
+ "searchByName": "Nach Namen suchen",
+ "selectAll": "Alle auswählen",
+ "teams": "Teams",
+
+ "searchByProject": "Nach Projektnamen suchen",
+ "projects": "Projekte",
+
+ "searchByCategory": "Nach Kategorienamen suchen",
+ "categories": "Kategorien",
+
+ "billable": "Abrechenbar",
+ "nonBillable": "Nicht abrechenbar",
+
+ "total": "Gesamt",
+
+ "projectsTimeSheet": "Projekt-Zeiterfassung",
+
+ "loggedTime": "Erfasste Zeit (Stunden)",
+
+ "exportToExcel": "Nach Excel exportieren",
+ "logged": "erfasst",
+ "for": "für",
+
+ "membersTimeSheet": "Mitglieder-Zeiterfassung",
+ "member": "Mitglied",
+
+ "estimatedVsActual": "Geschätzt vs. Tatsächlich",
+ "workingDays": "Arbeitstage",
+ "manDays": "Manntage",
+ "days": "Tage",
+ "estimatedDays": "Geschätzt Tage",
+ "actualDays": "Tatsächliche Tage",
+
+ "noCategories": "Keine Kategorien gefunden",
+ "noCategory": "Keine Kategorie",
+ "noProjects": "Keine Projekte gefunden",
+ "noTeams": "Keine Teams gefunden",
+ "noData": "Keine Daten gefunden"
+}
diff --git a/worklenz-frontend/public/locales/de/unauthorized.json b/worklenz-frontend/public/locales/de/unauthorized.json
new file mode 100644
index 00000000..4384ad80
--- /dev/null
+++ b/worklenz-frontend/public/locales/de/unauthorized.json
@@ -0,0 +1,5 @@
+{
+ "title": "Unbefugt!",
+ "subtitle": "Sie sind nicht berechtigt, auf diese Seite zuzugreifen",
+ "button": "Zur Startseite"
+}
diff --git a/worklenz-frontend/src/features/i18n/language-selector.tsx b/worklenz-frontend/src/features/i18n/language-selector.tsx
index aa3bdc9f..7af61f85 100644
--- a/worklenz-frontend/src/features/i18n/language-selector.tsx
+++ b/worklenz-frontend/src/features/i18n/language-selector.tsx
@@ -15,12 +15,16 @@ const LanguageSelector = () => {
{ key: 'en', label: 'English' },
{ key: 'es', label: 'Español' },
{ key: 'pt', label: 'Português' },
+ { key: 'alb', label: 'Shqip' },
+ { key: 'de', label: 'Deutsch' },
];
const languageLabels = {
en: 'En',
es: 'Es',
pt: 'Pt',
+ alb: 'Sq',
+ de: 'de',
};
return (
diff --git a/worklenz-frontend/src/features/i18n/localesSlice.ts b/worklenz-frontend/src/features/i18n/localesSlice.ts
index d6810845..045f385e 100644
--- a/worklenz-frontend/src/features/i18n/localesSlice.ts
+++ b/worklenz-frontend/src/features/i18n/localesSlice.ts
@@ -5,6 +5,8 @@ export enum Language {
EN = 'en',
ES = 'es',
PT = 'pt',
+ ALB = 'alb',
+ DE = 'de',
}
export type ILanguageType = `${Language}`;
diff --git a/worklenz-frontend/src/pages/settings/language-and-region/language-and-region-settings.tsx b/worklenz-frontend/src/pages/settings/language-and-region/language-and-region-settings.tsx
index 68afcb60..a043ac95 100644
--- a/worklenz-frontend/src/pages/settings/language-and-region/language-and-region-settings.tsx
+++ b/worklenz-frontend/src/pages/settings/language-and-region/language-and-region-settings.tsx
@@ -47,6 +47,14 @@ const LanguageAndRegionSettings = () => {
value: Language.PT,
label: 'Português',
},
+ {
+ value: Language.ALB,
+ label: 'Shqip',
+ },
+ {
+ value: Language.DE,
+ label: 'Deutsch',
+ },
];
const handleLanguageChange = async (values: { language?: ILanguageType; timezone?: string }) => {
diff --git a/worklenz-frontend/src/utils/greetingString.ts b/worklenz-frontend/src/utils/greetingString.ts
index 0cc763b4..1e122f6a 100644
--- a/worklenz-frontend/src/utils/greetingString.ts
+++ b/worklenz-frontend/src/utils/greetingString.ts
@@ -29,6 +29,18 @@ export const greetingString = (name: string): string => {
morning = 'manhã';
afternoon = 'tarde';
evening = 'noite';
+ } else if (language === 'alb') {
+ greetingPrefix = 'Përshëndetje';
+ greetingSuffix = 'të mbarë';
+ morning = 'mëngjesi';
+ afternoon = 'pasdite';
+ evening = 'mbrëmja';
+ } else if (language === 'de') {
+ greetingPrefix = 'Hallo';
+ greetingSuffix = 'Guten';
+ morning = 'Morgen';
+ afternoon = 'Tag';
+ evening = 'Abend';
}
return `${greetingPrefix} ${name}, ${greetingSuffix} ${greet}!`;