feat(content): update translations, skills list and imprint texts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c8af80cee3
commit
9ede5c02c1
4 files changed
+156
-194
No files matched your search
+61
-85
@@ -1,27 +1,11 @@
|
||||
import type { LanguagePack } from './language.types';
|
||||
|
||||
export const deLanguage: LanguagePack = {
|
||||
app: {
|
||||
selectorTitle: 'Sprache auswählen',
|
||||
changeLanguage: 'Sprache',
|
||||
changeLanguageAriaLabel: 'Sprache ändern',
|
||||
closeSelector: 'Sprachauswahl schließen',
|
||||
languageEnglish: 'Englisch',
|
||||
languageGerman: 'Deutsch',
|
||||
},
|
||||
footer: {
|
||||
noscriptMessage: 'Bitte aktiviere JavaScript um alles zu sehen.',
|
||||
imprintLink: 'Impressum',
|
||||
},
|
||||
home: {
|
||||
portfolioEyebrow: 'Portfolio',
|
||||
heroIntro:
|
||||
'Ich entwickle zuverlässige Systeme, übersichtliche Benutzeroberflächen und praktische digitale Lösungen, die sich in realen Kundensystemen bewähren.',
|
||||
contactTitle: 'Kontaktiere mich',
|
||||
openPgpTitle: 'OpenPGP',
|
||||
openPgpDescription: 'Verwende meinen Public Key für verschlüsselte Kommunikation.',
|
||||
openPgpDownload: 'Public Key herunterladen',
|
||||
openPgpFingerprintLabel: 'Fingerprint',
|
||||
viewProjects: 'Projekte',
|
||||
aboutMe: 'Über mich',
|
||||
nextHighlightAriaLabel: 'Nächstes Bild anzeigen',
|
||||
@@ -45,79 +29,87 @@ export const deLanguage: LanguagePack = {
|
||||
getInTouch: 'Kontaktiere mich!',
|
||||
projectsEyebrow: 'Aktuelle Jobs & Projekte',
|
||||
openProjectPrefix: 'Projekt öffnen',
|
||||
projectLanguagesAriaLabel: 'Projekt-Technologien',
|
||||
fallbackBioLabel: 'Tech Stack',
|
||||
projectIconAltSuffix: 'Logo',
|
||||
mailAriaLabel: 'E-Mail senden',
|
||||
phoneAriaLabel: 'Telefonnummer anrufen',
|
||||
signalAriaLabel: 'Nachricht über Signal',
|
||||
giteaAriaLabel: 'Gitea-Profil',
|
||||
linkedinAriaLabel: 'LinkedIn-Profil',
|
||||
skillsLabel: 'Kenntnisse',
|
||||
skillsLinkAriaLabel: 'Alle Kenntnisse auf LinkedIn ansehen',
|
||||
},
|
||||
imprint: {
|
||||
legalEyebrow: 'Rechtliches',
|
||||
title: 'Impressum & Datenschutz',
|
||||
intro:
|
||||
'Rechtliche Informationen nach österreichischem Recht sowie Datenschutzinformationen gemäß DSGVO für diese Website von {{firstname}} {{lastname}}, handelnd unter Lechner Systems.',
|
||||
'Rechtliche Informationen nach österreichischem Recht sowie Datenschutzinformationen gemäß DSGVO für alle Websites von {{firstname}} {{lastname}}.',
|
||||
backToPortfolio: 'Zurück zum Portfolio',
|
||||
provider: 'Anbieter',
|
||||
directContact: 'Direkter Kontakt',
|
||||
phone: 'Telefon',
|
||||
contact: 'E-Mail',
|
||||
abuse: 'Abuse E-Mail',
|
||||
scopeEyebrow: 'Geltungsbereich',
|
||||
scopeTitle: 'Geltungsbereich dieser Hinweise',
|
||||
scopeLeft:
|
||||
'Diese Angaben gelten für diese Portfolio-Website und für Inhalte, die unmittelbar über diese Domain bereitgestellt werden. Für verlinkte externe Websites gelten die Hinweise der jeweiligen Betreiber.',
|
||||
scopeRight:
|
||||
'Die Website dient der Darstellung von Projekten, technischen Dienstleistungen und Kontaktmöglichkeiten im Bereich Softwareentwicklung, IT und digitale Systeme. Ein Vertragsabschluss erfolgt nicht automatisch über diese Website.',
|
||||
privacyEyebrow: 'Datenschutz',
|
||||
privacyTitle: 'Datenschutz & Datenverarbeitung',
|
||||
privacyLeftParagraphs: [
|
||||
'Verantwortlicher für die Datenverarbeitung im Sinne der Datenschutz-Grundverordnung (DSGVO) ist {{firstname}} {{lastname}}, erreichbar unter {{contactMail}} sowie telefonisch unter {{contactPhone}}.',
|
||||
'Diese Website verwendet nach aktuellem Stand kein eigenes Tracking, keine Analyse-Cookies, keine Marketing-Cookies und keine langfristigen persönlichen Nutzungsprofile.',
|
||||
'Beim Aufruf der Website können technisch notwendige Server- und Verbindungsdaten verarbeitet werden, insbesondere IP-Adresse, Datum und Uhrzeit des Zugriffs, angeforderte Ressource, übertragene Datenmenge, Browser- und Betriebssysteminformationen sowie Referrer, soweit diese Daten vom Browser übermittelt werden.',
|
||||
],
|
||||
privacyRightParagraphs: [
|
||||
'Die Verarbeitung erfolgt zur Bereitstellung der Website, zur Sicherstellung der technischen Stabilität und Sicherheit, zur Missbrauchsprävention, zur Fehleranalyse sowie zur Bearbeitung von Kontaktanfragen. Rechtsgrundlagen sind insbesondere Art. 6 Abs. 1 lit. f DSGVO und, bei vorvertraglicher Kommunikation, Art. 6 Abs. 1 lit. b DSGVO.',
|
||||
'Wenn du per E-Mail oder Telefon Kontakt aufnimmst, werden die von dir übermittelten Angaben zur Bearbeitung der Anfrage und zur weiteren Kommunikation verarbeitet. Eine Weitergabe personenbezogener Daten erfolgt nur, wenn sie gesetzlich erforderlich ist, zur Rechtsdurchsetzung benötigt wird oder von dir veranlasst wurde.',
|
||||
'Personenbezogene Daten werden nur so lange gespeichert, wie es für die genannten Zwecke, gesetzliche Aufbewahrungspflichten oder die Abwehr und Durchsetzung rechtlicher Ansprüche erforderlich ist.',
|
||||
],
|
||||
privacyTitle: 'Keine Datensammlung',
|
||||
privacyLeft:
|
||||
'Diese Website sammelt und verarbeitet keine personenbezogenen Daten. Ausgenommen sind nur Informationen, die beim Aufruf einer Website technisch bedingt übermittelt werden, etwa IP-Adresse, Datum und Uhrzeit, aufgerufene Seite, Referrer sowie Browser- und Betriebssysteminformationen (User-Agent).',
|
||||
privacyRight:
|
||||
'Diese Daten dienen ausschließlich dem sicheren und stabilen Betrieb der Website (Art. 6 Abs. 1 lit. f DSGVO). Es gibt kein Tracking und keine Cookies. Die gewählte Sprache wird nur lokal in deinem Browser gespeichert.',
|
||||
rightsEyebrow: 'Rechte',
|
||||
rightsTitle: 'Betroffenenrechte & Beschwerden',
|
||||
rightsTitle: 'Deine Rechte nach der DSGVO',
|
||||
rightsLeft:
|
||||
'Betroffene Personen haben im Rahmen der gesetzlichen Voraussetzungen Rechte auf Auskunft, Berichtigung, Löschung, Einschränkung der Verarbeitung, Datenübertragbarkeit und Widerspruch. Soweit eine Verarbeitung auf Einwilligung beruht, kann diese Einwilligung jederzeit mit Wirkung für die Zukunft widerrufen werden.',
|
||||
'Du hast das Recht auf Auskunft, Berichtigung, Löschung, Einschränkung der Verarbeitung, Datenübertragbarkeit und Widerspruch. Anfragen richtest du an die oben genannte E-Mail-Adresse.',
|
||||
rightsRight:
|
||||
'Beschwerden können bei der österreichischen Datenschutzbehörde eingebracht werden: Barichgasse 40-42, 1030 Wien, E-Mail dsb@dsb.gv.at, Website dsb.gv.at.',
|
||||
'Beschwerden richtest du an die Österreichische Datenschutzbehörde, Barichgasse 40-42, 1030 Wien, dsb@dsb.gv.at.',
|
||||
copyrightEyebrow: 'Urheberrecht',
|
||||
copyrightTitle: 'Urheberrecht, externe Links & anwendbares Recht',
|
||||
copyrightTitle: 'Urheberrecht & Haftung',
|
||||
copyrightLeftParagraphs: [
|
||||
'Alle Inhalte dieser Website, einschließlich Texte, Bilder, Grafiken, Fotos, Layouts, Quellcode und sonstige Werke, sind urheberrechtlich geschützt, sofern nicht anders angegeben.',
|
||||
'Jede Nutzung außerhalb der gesetzlichen Schranken des Urheberrechts benötigt eine vorherige schriftliche Zustimmung des jeweiligen Rechteinhabers.',
|
||||
'Alle Inhalte aller Websites von {{firstname}} {{lastname}}, insbesondere Texte, Bilder, Fotos, Grafiken und Design, sind urheberrechtlich geschützt. Alle Rechte vorbehalten.',
|
||||
'Jede Vervielfältigung, Bearbeitung, Verbreitung oder sonstige Nutzung ist ohne meine vorherige schriftliche Zustimmung untersagt. Für den Quellcode gilt ausschließlich die im Repository angegebene Lizenz.',
|
||||
],
|
||||
copyrightRightParagraphs: [
|
||||
'Diese Website kann Links zu externen Websites enthalten. Für deren Inhalte, Datenschutzpraxis und technische Sicherheit sind ausschließlich die jeweiligen Betreiber verantwortlich.',
|
||||
'Es gilt ausschließlich österreichisches Recht, sofern keine zwingenden Verbraucherschutzbestimmungen etwas anderes vorgeben.',
|
||||
'Für Inhalte verlinkter externer Websites übernehme ich keine Haftung. Dafür sind ausschließlich deren Betreiber verantwortlich.',
|
||||
'Es gilt österreichisches Recht, soweit zwingende Verbraucherschutzvorschriften nichts anderes vorsehen.',
|
||||
],
|
||||
},
|
||||
bioTextsList: [
|
||||
{ label: 'Sprachen', value: 'C#' },
|
||||
{ label: 'Sprachen', value: 'TypeScript' },
|
||||
{ label: 'Sprachen', value: 'Bash' },
|
||||
{ label: 'Frontend', value: 'Angular' },
|
||||
{ label: 'Frontend', value: 'WPF' },
|
||||
{ label: 'Frontend', value: 'Avalonia' },
|
||||
{ label: 'Backend', value: '.NET' },
|
||||
{ label: 'Backend', value: 'ASP.NET Core' },
|
||||
{ label: 'Backend', value: 'Entity Framework Core' },
|
||||
{ label: 'Backend', value: 'Node.js' },
|
||||
{ label: 'Backend', value: 'REST' },
|
||||
{ label: 'Backend', value: 'Swagger' },
|
||||
{ label: 'Datenbank', value: 'Microsoft SQL' },
|
||||
{ label: 'Datenbank', value: 'MariaDB' },
|
||||
{ label: 'DevOps', value: 'Git' },
|
||||
{ label: 'DevOps', value: 'GitHub & GitLab' },
|
||||
{ label: 'DevOps', value: 'Azure DevOps' },
|
||||
{ label: 'DevOps', value: 'Docker' },
|
||||
{ label: 'DevOps', value: 'Ubuntu' },
|
||||
{ label: 'DevOps', value: 'Arch' },
|
||||
{ label: 'Deklarative Sprachen', value: 'XAML' },
|
||||
{ label: 'Deklarative Sprachen', value: 'YAML' },
|
||||
{ label: 'Deklarative Sprachen', value: 'Markdown' },
|
||||
'C#',
|
||||
'TypeScript',
|
||||
'JavaScript',
|
||||
'Java',
|
||||
'SQL',
|
||||
'Bash',
|
||||
'Windows PowerShell',
|
||||
'.NET Core',
|
||||
'.NET-Framework',
|
||||
'ASP.NET',
|
||||
'Entity Framework (EF) Core',
|
||||
'Windows Presentation Foundation (WPF)',
|
||||
'Model View ViewModel (MVVM)',
|
||||
'Model View Controller (MVC)',
|
||||
'Webentwicklung',
|
||||
'AngularJS',
|
||||
'Node.js',
|
||||
'Microsoft SQL Server',
|
||||
'MariaDB',
|
||||
'Git',
|
||||
'GitHub',
|
||||
'GitLab',
|
||||
'Azure DevOps',
|
||||
'Continuous Integration und Continuous Delivery (CI/CD)',
|
||||
'Systemadministration',
|
||||
'Linux-Server',
|
||||
'Windows-Server',
|
||||
'Proxmox',
|
||||
'E-Mail-Sicherheit & Authentifizierung: SPF, DKIM, DMARC, DNSSEC/DANE & MTA-STS',
|
||||
'Künstliche Intelligenz (KI)',
|
||||
'KI-Agenten',
|
||||
'Anthropic Claude',
|
||||
'OpenAI Codex',
|
||||
'Agile',
|
||||
'Scrum',
|
||||
'Projektmanagement',
|
||||
'Projektkommunikation',
|
||||
],
|
||||
portraitHighlights: [
|
||||
{
|
||||
@@ -170,24 +162,13 @@ export const deLanguage: LanguagePack = {
|
||||
imageHeight: 480,
|
||||
text: 'Reisen',
|
||||
},
|
||||
{
|
||||
image: 'assets/optimized/portrait/culture.webp',
|
||||
imageSrcset:
|
||||
'assets/optimized/portrait/culture-320.webp 320w, assets/optimized/portrait/culture-384.webp 384w, assets/optimized/portrait/culture-480.webp 480w, assets/optimized/portrait/culture.webp 640w',
|
||||
imageSizes:
|
||||
'(max-width: 700px) calc(100vw - 4rem), (max-width: 900px) min(calc(100vw - 9rem), 560px), 320px',
|
||||
imageWidth: 640,
|
||||
imageHeight: 482,
|
||||
text: 'Kultur',
|
||||
},
|
||||
],
|
||||
projects: [
|
||||
{
|
||||
title: 'SobIT GmbH',
|
||||
link: 'https://sobit.at/',
|
||||
description:
|
||||
'Ich arbeite hauptsächlich für das wiener Unternehmen namens SobIT GmbH. Die Firma ist ein Tochter-Unternehmen des Wiener Sozialdienste. Wir entwickeln Software für den Gesundheitsbereich. - Entwicklung moderner Desktop-, Mobile- und Webanwendungen zur Unterstützung der Mobilen Pflege.',
|
||||
skills: ['TypeScript', 'C#', 'Microsoft SQL', 'WPF', 'YML/XML'],
|
||||
'Ich arbeite hauptsächlich für die SobIT GmbH aus Wien, ein Tochterunternehmen der Wiener Sozialdienste. Wir entwickeln Software für den Gesundheitsbereich: moderne Desktop-, Mobile- und Webanwendungen zur Unterstützung der mobilen Pflege.',
|
||||
icon: 'assets/optimized/logos/sobit.webp',
|
||||
iconSrcset:
|
||||
'assets/optimized/logos/sobit-64.webp 64w, assets/optimized/logos/sobit-128.webp 128w, assets/optimized/logos/sobit.webp 216w',
|
||||
@@ -199,7 +180,6 @@ export const deLanguage: LanguagePack = {
|
||||
link: 'https://www.synhost.de/',
|
||||
description:
|
||||
'Ein Hosting-Dienstleister von GERLACH SYSTEMS, für die ich Schnittstellen zwischen einzelnen Systemen entwickle und technischen Support mache.',
|
||||
skills: ['TypeScript', 'MariaDB', 'YML'],
|
||||
icon: 'assets/optimized/logos/synhost.webp',
|
||||
iconSrcset:
|
||||
'assets/optimized/logos/synhost-64.webp 64w, assets/optimized/logos/synhost-128.webp 128w, assets/optimized/logos/synhost.webp 216w',
|
||||
@@ -213,7 +193,6 @@ export const deLanguage: LanguagePack = {
|
||||
link: 'https://www.synradio.de/',
|
||||
description:
|
||||
'Ein Internetradio, auch unter der Verwaltung von GERLACH SYSTEMS, für den ich die technische Umsetzung und Betreuung der digitalen Plattformen übernehme — Website, Bots und Plugins für Sprachchats und Spiele.',
|
||||
skills: ['TypeScript', 'Angular', 'FFmpeg', 'YML'],
|
||||
icon: 'assets/optimized/logos/synradio.webp',
|
||||
iconSrcset:
|
||||
'assets/optimized/logos/synradio-64.webp 64w, assets/optimized/logos/synradio-128.webp 128w, assets/optimized/logos/synradio.webp 216w',
|
||||
@@ -225,7 +204,6 @@ export const deLanguage: LanguagePack = {
|
||||
link: 'https://git.lechner-systems.at/fraujulian/Discord-Audio-Stream',
|
||||
description:
|
||||
'Eine TypeScript-Library für Discord, die Audiowiedergabe einfacher macht, mit Fokus auf stabile 24/7-Streams ohne Unterbrechungen.',
|
||||
skills: ['TypeScript', 'YML'],
|
||||
icon: 'assets/optimized/logos/discord.webp',
|
||||
iconSrcset:
|
||||
'assets/optimized/logos/discord-64.webp 64w, assets/optimized/logos/discord-128.webp 128w, assets/optimized/logos/discord.webp 216w',
|
||||
@@ -237,10 +215,9 @@ export const deLanguage: LanguagePack = {
|
||||
link: '#',
|
||||
description:
|
||||
'Diese Portfolio-Website, die du gerade anschaust, ist eines meiner aktiv gepflegten Projekte. 😁',
|
||||
skills: ['TypeScript', 'Angular', 'YML'],
|
||||
icon: 'assets/optimized/portrait/me.webp',
|
||||
iconSrcset:
|
||||
'assets/optimized/portrait/me-64.webp 64w, assets/optimized/portrait/me-128.webp 128w, assets/optimized/portrait/me.webp 216w',
|
||||
'assets/optimized/portrait/me-128.webp 128w, assets/optimized/portrait/me-320.webp 320w',
|
||||
iconSizes: '(max-width: 700px) 64px, 108px',
|
||||
iconWidth: 320,
|
||||
iconHeight: 385,
|
||||
@@ -251,7 +228,6 @@ export const deLanguage: LanguagePack = {
|
||||
link: 'https://tauchertreff-mostviertel.at/',
|
||||
description:
|
||||
'Ich unterstütze außerdem meinen lokalen Tauchverein, indem ich die digitale Infrastruktur entwickle, aufbaue und auch betreibe — E-Mail, Website, Cloud-Dienste und alles, was dazugehört.',
|
||||
skills: ['TypeScript', 'MariaDB', 'Angular', 'YML'],
|
||||
icon: 'assets/optimized/logos/tauchertreff.webp',
|
||||
iconSrcset:
|
||||
'assets/optimized/logos/tauchertreff-64.webp 64w, assets/optimized/logos/tauchertreff-128.webp 128w, assets/optimized/logos/tauchertreff.webp 216w',
|
||||
|
||||
+60
-84
@@ -1,27 +1,11 @@
|
||||
import type { LanguagePack } from './language.types';
|
||||
|
||||
export const enLanguage: LanguagePack = {
|
||||
app: {
|
||||
selectorTitle: 'Select language',
|
||||
changeLanguage: 'Language',
|
||||
changeLanguageAriaLabel: 'Change language',
|
||||
closeSelector: 'Close language selection',
|
||||
languageEnglish: 'English',
|
||||
languageGerman: 'German',
|
||||
},
|
||||
footer: {
|
||||
noscriptMessage: 'Please enable JavaScript for the full experience.',
|
||||
imprintLink: 'Imprint',
|
||||
},
|
||||
home: {
|
||||
portfolioEyebrow: 'Portfolio',
|
||||
heroIntro:
|
||||
'I build reliable systems, clean interfaces, and practical digital solutions that actually hold up in production.',
|
||||
contactTitle: 'Contact me',
|
||||
openPgpTitle: 'OpenPGP',
|
||||
openPgpDescription: 'Download my public key for encrypted communication.',
|
||||
openPgpDownload: 'Download public key',
|
||||
openPgpFingerprintLabel: 'Fingerprint',
|
||||
viewProjects: 'View projects',
|
||||
aboutMe: 'About me',
|
||||
nextHighlightAriaLabel: 'Show next image',
|
||||
@@ -45,79 +29,87 @@ export const enLanguage: LanguagePack = {
|
||||
getInTouch: 'Get in touch!',
|
||||
projectsEyebrow: 'Current Jobs & Projects',
|
||||
openProjectPrefix: 'Open project',
|
||||
projectLanguagesAriaLabel: 'Project languages',
|
||||
fallbackBioLabel: 'my stack',
|
||||
projectIconAltSuffix: 'logo',
|
||||
mailAriaLabel: 'Send an email',
|
||||
phoneAriaLabel: 'Call phone number',
|
||||
signalAriaLabel: 'Message on Signal',
|
||||
giteaAriaLabel: 'Gitea profile',
|
||||
linkedinAriaLabel: 'LinkedIn profile',
|
||||
skillsLabel: 'Skills',
|
||||
skillsLinkAriaLabel: 'View all skills on LinkedIn',
|
||||
},
|
||||
imprint: {
|
||||
legalEyebrow: 'Legal',
|
||||
title: 'Imprint & Privacy',
|
||||
intro:
|
||||
'Legal information under Austrian law and privacy information under the GDPR for this website operated by {{firstname}} {{lastname}}, trading as Lechner Systems.',
|
||||
'Legal information under Austrian law and privacy information under the GDPR for all websites operated by {{firstname}} {{lastname}}.',
|
||||
backToPortfolio: 'Back to portfolio',
|
||||
provider: 'Provider',
|
||||
directContact: 'Direct Contact',
|
||||
phone: 'Phone',
|
||||
contact: 'Email',
|
||||
abuse: 'Abuse Email',
|
||||
scopeEyebrow: 'Scope',
|
||||
scopeTitle: 'Scope Of These Notices',
|
||||
scopeLeft:
|
||||
'These notices apply to this portfolio website and to content made available directly through this domain. Linked third-party websites are subject to the notices of their respective operators.',
|
||||
scopeRight:
|
||||
'The website presents projects, technical services, and contact options in the field of software engineering, IT, and digital systems. No contract is concluded automatically through this website.',
|
||||
privacyEyebrow: 'Privacy',
|
||||
privacyTitle: 'Privacy And Data Processing',
|
||||
privacyLeftParagraphs: [
|
||||
'The controller for data processing within the meaning of the General Data Protection Regulation (GDPR) is {{firstname}} {{lastname}}, reachable at {{contactMail}} and by phone at {{contactPhone}}.',
|
||||
'As currently implemented, this website does not use its own tracking, analytics cookies, marketing cookies, or long-term personal usage profiling.',
|
||||
'When the website is accessed, technically necessary server and connection data may be processed, especially IP address, access date and time, requested resource, transferred data volume, browser and operating system information, and referrer where this data is transmitted by the browser.',
|
||||
],
|
||||
privacyRightParagraphs: [
|
||||
'Processing takes place to provide the website, maintain technical stability and security, prevent abuse, analyze errors, and handle contact requests. The legal bases include Art. 6(1)(f) GDPR and, for pre-contractual communication, Art. 6(1)(b) GDPR.',
|
||||
'If you contact me by email or phone, the information you provide is processed to handle your request and continue communication. Personal data is disclosed only where legally required, needed for legal claims, or initiated by you.',
|
||||
'Personal data is stored only as long as necessary for the stated purposes, statutory retention duties, or the establishment, exercise, or defense of legal claims.',
|
||||
],
|
||||
privacyTitle: 'No Data Collection',
|
||||
privacyLeft:
|
||||
'This website does not collect or process personal data. The only exception is information that is technically transmitted when a website is accessed, such as IP address, date and time, requested page, referrer, and browser and operating system information (user agent).',
|
||||
privacyRight:
|
||||
'This data is used solely to operate the website securely and reliably (Art. 6(1)(f) GDPR). There is no tracking and there are no cookies. Your chosen language is stored only locally in your browser.',
|
||||
rightsEyebrow: 'Rights',
|
||||
rightsTitle: 'Data Subject Rights And Complaints',
|
||||
rightsTitle: 'Your Rights Under The GDPR',
|
||||
rightsLeft:
|
||||
'Subject to statutory requirements, data subjects have rights of access, rectification, erasure, restriction of processing, data portability, and objection. Where processing is based on consent, that consent may be withdrawn at any time with effect for the future.',
|
||||
'You have the right of access, rectification, erasure, restriction of processing, data portability, and objection. Send requests to the email address listed above.',
|
||||
rightsRight:
|
||||
'Complaints can be submitted to the Austrian Data Protection Authority: Barichgasse 40-42, 1030 Vienna, email dsb@dsb.gv.at, website dsb.gv.at.',
|
||||
'Complaints can be filed with the Austrian Data Protection Authority, Barichgasse 40-42, 1030 Vienna, dsb@dsb.gv.at.',
|
||||
copyrightEyebrow: 'Copyright',
|
||||
copyrightTitle: 'Copyright, External Links, And Applicable Law',
|
||||
copyrightTitle: 'Copyright & Liability',
|
||||
copyrightLeftParagraphs: [
|
||||
'All content on this website, including texts, images, graphics, photographs, layouts, source code, and other works, is protected by copyright unless stated otherwise.',
|
||||
'Any use beyond statutory exceptions requires prior written consent of the respective rights holder.',
|
||||
'All content on all websites operated by {{firstname}} {{lastname}}, in particular texts, images, photographs, graphics, and design, is protected by copyright. All rights reserved.',
|
||||
'Any reproduction, modification, distribution, or other use without my prior written consent is prohibited. The source code is governed solely by the license stated in its repository.',
|
||||
],
|
||||
copyrightRightParagraphs: [
|
||||
'This website may contain links to third-party websites. Their operators are solely responsible for their contents, privacy practices, and technical security.',
|
||||
'Austrian law applies exclusively, unless mandatory consumer protection provisions require otherwise.',
|
||||
'I accept no liability for the content of linked external websites. Their operators are solely responsible for it.',
|
||||
'Austrian law applies, unless mandatory consumer protection provisions provide otherwise.',
|
||||
],
|
||||
},
|
||||
bioTextsList: [
|
||||
{ label: 'Languages', value: 'C#' },
|
||||
{ label: 'Languages', value: 'TypeScript' },
|
||||
{ label: 'Languages', value: 'Bash' },
|
||||
{ label: 'Frontend', value: 'Angular' },
|
||||
{ label: 'Frontend', value: 'WPF' },
|
||||
{ label: 'Frontend', value: 'Avalonia' },
|
||||
{ label: 'Backend', value: '.NET' },
|
||||
{ label: 'Backend', value: 'ASP.NET Core' },
|
||||
{ label: 'Backend', value: 'Entity Framework Core' },
|
||||
{ label: 'Backend', value: 'Node.js' },
|
||||
{ label: 'Backend', value: 'REST' },
|
||||
{ label: 'Backend', value: 'Swagger' },
|
||||
{ label: 'Database', value: 'Microsoft SQL' },
|
||||
{ label: 'Database', value: 'MariaDB' },
|
||||
{ label: 'DevOps', value: 'Git' },
|
||||
{ label: 'DevOps', value: 'GitHub & GitLab' },
|
||||
{ label: 'DevOps', value: 'Azure DevOps' },
|
||||
{ label: 'DevOps', value: 'Docker' },
|
||||
{ label: 'DevOps', value: 'Ubuntu' },
|
||||
{ label: 'DevOps', value: 'Arch' },
|
||||
{ label: 'Declarative Languages', value: 'XAML' },
|
||||
{ label: 'Declarative Languages', value: 'YAML' },
|
||||
{ label: 'Declarative Languages', value: 'Markdown' },
|
||||
'C#',
|
||||
'TypeScript',
|
||||
'JavaScript',
|
||||
'Java',
|
||||
'SQL',
|
||||
'Bash',
|
||||
'Windows PowerShell',
|
||||
'.NET Core',
|
||||
'.NET Framework',
|
||||
'ASP.NET',
|
||||
'Entity Framework (EF) Core',
|
||||
'Windows Presentation Foundation (WPF)',
|
||||
'Model View ViewModel (MVVM)',
|
||||
'Model View Controller (MVC)',
|
||||
'Web Development',
|
||||
'AngularJS',
|
||||
'Node.js',
|
||||
'Microsoft SQL Server',
|
||||
'MariaDB',
|
||||
'Git',
|
||||
'GitHub',
|
||||
'GitLab',
|
||||
'Azure DevOps',
|
||||
'Continuous Integration and Continuous Delivery (CI/CD)',
|
||||
'System Administration',
|
||||
'Linux Server',
|
||||
'Windows Server',
|
||||
'Proxmox',
|
||||
'Email Security & Authentication: SPF, DKIM, DMARC, DNSSEC/DANE & MTA-STS',
|
||||
'Artificial Intelligence (AI)',
|
||||
'AI Agents',
|
||||
'Anthropic Claude',
|
||||
'OpenAI Codex',
|
||||
'Agile',
|
||||
'Scrum',
|
||||
'Project Management',
|
||||
'Project Communication',
|
||||
],
|
||||
portraitHighlights: [
|
||||
{
|
||||
@@ -170,16 +162,6 @@ export const enLanguage: LanguagePack = {
|
||||
imageHeight: 480,
|
||||
text: 'Traveling',
|
||||
},
|
||||
{
|
||||
image: 'assets/optimized/portrait/culture.webp',
|
||||
imageSrcset:
|
||||
'assets/optimized/portrait/culture-320.webp 320w, assets/optimized/portrait/culture-384.webp 384w, assets/optimized/portrait/culture-480.webp 480w, assets/optimized/portrait/culture.webp 640w',
|
||||
imageSizes:
|
||||
'(max-width: 700px) calc(100vw - 4rem), (max-width: 900px) min(calc(100vw - 9rem), 560px), 320px',
|
||||
imageWidth: 640,
|
||||
imageHeight: 482,
|
||||
text: 'Culture',
|
||||
},
|
||||
],
|
||||
projects: [
|
||||
{
|
||||
@@ -187,7 +169,6 @@ export const enLanguage: LanguagePack = {
|
||||
link: 'https://sobit.at/',
|
||||
description:
|
||||
'I primarily work for SobIT GmbH, a Vienna-based subsidiary of Wiener Sozialdienste. We develop software for the healthcare sector, focusing on modern desktop, mobile, and web applications that support mobile care services.',
|
||||
skills: ['TypeScript', 'C#', 'Microsoft SQL', 'WPF', 'YML/XML'],
|
||||
icon: 'assets/optimized/logos/sobit.webp',
|
||||
iconSrcset:
|
||||
'assets/optimized/logos/sobit-64.webp 64w, assets/optimized/logos/sobit-128.webp 128w, assets/optimized/logos/sobit.webp 216w',
|
||||
@@ -199,7 +180,6 @@ export const enLanguage: LanguagePack = {
|
||||
link: 'https://www.synhost.de/',
|
||||
description:
|
||||
'A hosting service provider of GERLACH SYSTEMS, for whom I develop interfaces between individual systems and provide technical support.',
|
||||
skills: ['TypeScript', 'MariaDB', 'YML'],
|
||||
icon: 'assets/optimized/logos/synhost.webp',
|
||||
iconSrcset:
|
||||
'assets/optimized/logos/synhost-64.webp 64w, assets/optimized/logos/synhost-128.webp 128w, assets/optimized/logos/synhost.webp 216w',
|
||||
@@ -213,7 +193,6 @@ export const enLanguage: LanguagePack = {
|
||||
link: 'https://www.synradio.de/',
|
||||
description:
|
||||
'An online radio project, also operated by GERLACH SYSTEMS, where I build and maintain the technical side of its digital presence — including the website, bots, and plugins for voice chats and games.',
|
||||
skills: ['TypeScript', 'Angular', 'FFmpeg', 'YML'],
|
||||
icon: 'assets/optimized/logos/synradio.webp',
|
||||
iconSrcset:
|
||||
'assets/optimized/logos/synradio-64.webp 64w, assets/optimized/logos/synradio-128.webp 128w, assets/optimized/logos/synradio.webp 216w',
|
||||
@@ -225,7 +204,6 @@ export const enLanguage: LanguagePack = {
|
||||
link: 'https://git.lechner-systems.at/fraujulian/Discord-Audio-Stream',
|
||||
description:
|
||||
'A TypeScript library for Discord that simplifies audio playback, with a focus on stable 24/7 streaming without interruptions.',
|
||||
skills: ['TypeScript', 'YML'],
|
||||
icon: 'assets/optimized/logos/discord.webp',
|
||||
iconSrcset:
|
||||
'assets/optimized/logos/discord-64.webp 64w, assets/optimized/logos/discord-128.webp 128w, assets/optimized/logos/discord.webp 216w',
|
||||
@@ -237,10 +215,9 @@ export const enLanguage: LanguagePack = {
|
||||
link: '',
|
||||
description:
|
||||
'This portfolio website you’re currently viewing is one of my actively maintained projects. 😁',
|
||||
skills: ['TypeScript', 'Angular', 'YML'],
|
||||
icon: 'assets/optimized/portrait/me.webp',
|
||||
iconSrcset:
|
||||
'assets/optimized/portrait/me-64.webp 64w, assets/optimized/portrait/me-128.webp 128w, assets/optimized/portrait/me.webp 216w',
|
||||
'assets/optimized/portrait/me-128.webp 128w, assets/optimized/portrait/me-320.webp 320w',
|
||||
iconSizes: '(max-width: 700px) 64px, 108px',
|
||||
iconWidth: 320,
|
||||
iconHeight: 385,
|
||||
@@ -251,7 +228,6 @@ export const enLanguage: LanguagePack = {
|
||||
link: 'https://tauchertreff-mostviertel.at/',
|
||||
description:
|
||||
'I also support my local diving club by developing, setting up, and operating its digital infrastructure — including email, the website, cloud services, and everything that comes with it.',
|
||||
skills: ['TypeScript', 'MariaDB', 'Angular', 'YML'],
|
||||
icon: 'assets/optimized/logos/tauchertreff.webp',
|
||||
iconSrcset:
|
||||
'assets/optimized/logos/tauchertreff-64.webp 64w, assets/optimized/logos/tauchertreff-128.webp 128w, assets/optimized/logos/tauchertreff.webp 216w',
|
||||
|
||||
@@ -4,7 +4,6 @@ export interface LanguageProject {
|
||||
title: string;
|
||||
link: string;
|
||||
description: string;
|
||||
skills: string[];
|
||||
icon?: string;
|
||||
iconSrcset?: string;
|
||||
iconSizes?: string;
|
||||
@@ -13,11 +12,6 @@ export interface LanguageProject {
|
||||
circleIcon?: boolean;
|
||||
}
|
||||
|
||||
export interface LanguageBioTextEntry {
|
||||
label: string;
|
||||
value: string;
|
||||
}
|
||||
|
||||
export interface LanguagePortraitHighlight {
|
||||
image: string;
|
||||
imageSrcset: string;
|
||||
@@ -27,7 +21,7 @@ export interface LanguagePortraitHighlight {
|
||||
text: string;
|
||||
}
|
||||
|
||||
export interface LanguagePack {
|
||||
export interface LanguageShellPack {
|
||||
app: {
|
||||
selectorTitle: string;
|
||||
changeLanguage: string;
|
||||
@@ -37,17 +31,21 @@ export interface LanguagePack {
|
||||
languageGerman: string;
|
||||
};
|
||||
footer: {
|
||||
noscriptMessage: string;
|
||||
imprintLink: string;
|
||||
homeLink: string;
|
||||
};
|
||||
meta: {
|
||||
description: string;
|
||||
homeTitle: string;
|
||||
imprintTitle: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface LanguagePack {
|
||||
home: {
|
||||
portfolioEyebrow: string;
|
||||
heroIntro: string;
|
||||
contactTitle: string;
|
||||
openPgpTitle: string;
|
||||
openPgpDescription: string;
|
||||
openPgpDownload: string;
|
||||
openPgpFingerprintLabel: string;
|
||||
viewProjects: string;
|
||||
aboutMe: string;
|
||||
nextHighlightAriaLabel: string;
|
||||
@@ -63,8 +61,14 @@ export interface LanguagePack {
|
||||
getInTouch: string;
|
||||
projectsEyebrow: string;
|
||||
openProjectPrefix: string;
|
||||
projectLanguagesAriaLabel: string;
|
||||
fallbackBioLabel: string;
|
||||
projectIconAltSuffix: string;
|
||||
mailAriaLabel: string;
|
||||
phoneAriaLabel: string;
|
||||
signalAriaLabel: string;
|
||||
giteaAriaLabel: string;
|
||||
linkedinAriaLabel: string;
|
||||
skillsLabel: string;
|
||||
skillsLinkAriaLabel: string;
|
||||
};
|
||||
imprint: {
|
||||
legalEyebrow: string;
|
||||
@@ -76,14 +80,10 @@ export interface LanguagePack {
|
||||
phone: string;
|
||||
contact: string;
|
||||
abuse: string;
|
||||
scopeEyebrow: string;
|
||||
scopeTitle: string;
|
||||
scopeLeft: string;
|
||||
scopeRight: string;
|
||||
privacyEyebrow: string;
|
||||
privacyTitle: string;
|
||||
privacyLeftParagraphs: string[];
|
||||
privacyRightParagraphs: string[];
|
||||
privacyLeft: string;
|
||||
privacyRight: string;
|
||||
rightsEyebrow: string;
|
||||
rightsTitle: string;
|
||||
rightsLeft: string;
|
||||
@@ -93,9 +93,7 @@ export interface LanguagePack {
|
||||
copyrightLeftParagraphs: string[];
|
||||
copyrightRightParagraphs: string[];
|
||||
};
|
||||
bioTextsList: LanguageBioTextEntry[];
|
||||
bioTextsList: string[];
|
||||
portraitHighlights: LanguagePortraitHighlight[];
|
||||
projects: LanguageProject[];
|
||||
}
|
||||
|
||||
export type LanguageShellPack = Pick<LanguagePack, 'app' | 'footer'>;
|
||||
+14
-2
@@ -10,8 +10,14 @@ export const enShellLanguage: LanguageShellPack = {
|
||||
languageGerman: 'German',
|
||||
},
|
||||
footer: {
|
||||
noscriptMessage: 'Please enable JavaScript for the full experience.',
|
||||
imprintLink: 'Imprint',
|
||||
homeLink: 'Portfolio',
|
||||
},
|
||||
meta: {
|
||||
description:
|
||||
'Full-stack developer building reliable, high-performance systems and clean, maintainable code. Focused on practical solutions that actually hold up in production.',
|
||||
homeTitle: 'Julian Lechner – Full-Stack Developer',
|
||||
imprintTitle: 'Imprint & Privacy – Julian Lechner',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -25,7 +31,13 @@ export const deShellLanguage: LanguageShellPack = {
|
||||
languageGerman: 'Deutsch',
|
||||
},
|
||||
footer: {
|
||||
noscriptMessage: 'Bitte aktiviere JavaScript um alles zu sehen.',
|
||||
imprintLink: 'Impressum',
|
||||
homeLink: 'Portfolio',
|
||||
},
|
||||
meta: {
|
||||
description:
|
||||
'Full-Stack-Entwickler für zuverlässige, performante Systeme und sauberen, wartbaren Code. Fokus auf praktische Lösungen, die sich im Produktivbetrieb bewähren.',
|
||||
homeTitle: 'Julian Lechner – Full-Stack-Entwickler',
|
||||
imprintTitle: 'Impressum & Datenschutz – Julian Lechner',
|
||||
},
|
||||
};
|
||||
Reference in new issue
Block a user