feat: added languages
This commit is contained in:
@@ -0,0 +1,258 @@
|
||||
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 für die vollständige Nutzung.',
|
||||
imprintLink: 'Impressum',
|
||||
},
|
||||
home: {
|
||||
portfolioEyebrow: 'Portfolio',
|
||||
heroIntro:
|
||||
'Ich entwickle zuverlässige Systeme, saubere Interfaces und praktische digitale Lösungen, die auch produktiv wirklich halten.',
|
||||
contactTitle: 'Kontakt',
|
||||
viewProjects: 'Projekte ansehen',
|
||||
aboutMe: 'Über mich',
|
||||
nextHighlightAriaLabel: 'Nächstes Highlight-Bild anzeigen',
|
||||
nextHighlightTitle: 'Nächstes Bild anzeigen',
|
||||
singleHighlightTitle: 'Einzelnes Bild',
|
||||
portraitAltSuffix: 'Bild',
|
||||
clickHint: 'Klick mich!',
|
||||
aboutEyebrow: 'Über mich',
|
||||
aboutParagraphs: [
|
||||
'Ich heiße {{firstname}}, die meisten nennen mich Julie. Ich bin {{age}} Jahre alt und komme aus Österreich. Ein großer Teil meines Alltags passiert unterwegs – meistens im Zug, zwischen Terminen, Büros und Zeit mit meiner Familie.',
|
||||
'Digitale Sicherheit und Privatsphäre sind mir sehr wichtig. Ich baue Systeme mit möglichst kleiner Angriffsfläche, sinnvollen Standards und starkem Fokus auf Datenschutz.',
|
||||
'Ich arbeite mit modernen Web-Technologien und an geschäftskritischen Systemen. Mein Fokus liegt auf klaren, stabilen Lösungen, die im Alltag funktionieren und echten Nutzen liefern.',
|
||||
],
|
||||
detailToggleOpen: 'Erweitertes Profil lesen',
|
||||
detailToggleClose: 'Erweitertes Profil ausblenden',
|
||||
detailParagraphs: [
|
||||
'Was mich wirklich interessiert, ist moderner Code: sauber strukturiert, wartbar und mit Blick auf Performance gebaut.',
|
||||
'Abseits von Software ist Tauchen mein größtes Hobby. Die Stille unter Wasser zieht mich immer wieder zurück in Österreichs Seen.',
|
||||
'Hauptsächlich arbeite ich für die SobIT GmbH in Wien, zusätzlich zu Freelance-Projekten für Unternehmen, Organisationen und private Kunden.',
|
||||
],
|
||||
getInTouch: 'Kontakt aufnehmen',
|
||||
projectsEyebrow: 'Aktuelle Jobs & Projekte',
|
||||
openProjectPrefix: 'Projekt öffnen',
|
||||
projectLanguagesAriaLabel: 'Projekt-Technologien',
|
||||
fallbackBioLabel: 'mein Stack',
|
||||
},
|
||||
imprint: {
|
||||
legalEyebrow: 'Rechtliches',
|
||||
title: 'Impressum & Datenschutz',
|
||||
intro:
|
||||
'Rechtliche Informationen zu dieser Website nach österreichischem Recht, inklusive Datenschutzinformationen für Websites von {{firstname}} {{lastname}} (Lechner Systems).',
|
||||
backToPortfolio: 'Zurück zum Portfolio',
|
||||
provider: 'Anbieter',
|
||||
directContact: 'Direkter Kontakt',
|
||||
phone: 'Telefon',
|
||||
contact: 'Kontakt',
|
||||
abuse: 'Missbrauch',
|
||||
scopeEyebrow: 'Geltungsbereich',
|
||||
scopeTitle: 'Geltungsbereich dieser Hinweise',
|
||||
scopeLeft:
|
||||
'Diese Hinweise gelten für diese Website und, sofern dort keine spezielleren Hinweise veröffentlicht sind, auch für andere Websites von Julian Lechner unter dem Namen Lechner Systems.',
|
||||
scopeRight:
|
||||
'Diese Website informiert über Projekte, technische Dienstleistungen, Kontaktmöglichkeiten und berufliche Arbeit in Softwareentwicklung, IT und verwandten digitalen Dienstleistungen.',
|
||||
privacyEyebrow: 'Datenschutz',
|
||||
privacyTitle: 'Datenschutz & Datenverarbeitung',
|
||||
privacyLeftParagraphs: [
|
||||
'Verantwortlicher für die Datenverarbeitung im Sinne der DSGVO ist {{firstname}} {{lastname}}, erreichbar unter {{contactMail}} sowie telefonisch unter {{contactPhone}}.',
|
||||
'In der aktuellen Umsetzung dieses Webprojekts verwendet diese Website kein eigenes Tracking, keine Analyse-Cookies, keine Marketing-Cookies und keine langfristigen persönlichen Nutzungsprofile.',
|
||||
'Beim informatorischen Zugriff auf die Website können technisch notwendige Verbindungs- und Serverdaten für Betrieb, IT-Sicherheit, Missbrauchsprävention und Fehleranalyse verarbeitet werden.',
|
||||
],
|
||||
privacyRightParagraphs: [
|
||||
'Wenn du mich per E-Mail oder Telefon kontaktierst, werden die von dir angegebenen Daten zur Bearbeitung deiner Anfrage und zur Kommunikation verarbeitet.',
|
||||
'Personenbezogene Daten werden nur weitergegeben, wenn es gesetzlich erforderlich ist, zur Durchsetzung rechtlicher Ansprüche benötigt wird oder ausdrücklich von dir veranlasst wurde.',
|
||||
'Daten werden nur so lange gespeichert, wie es für Kommunikation, Bearbeitung von Anfragen und gesetzliche Aufbewahrungspflichten erforderlich ist.',
|
||||
],
|
||||
rightsEyebrow: 'Rechte',
|
||||
rightsTitle: 'Betroffenenrechte & Beschwerden',
|
||||
rightsLeft:
|
||||
'Betroffene Personen haben im Rahmen der gesetzlichen Vorgaben das Recht auf Auskunft, Berichtigung, Löschung, Einschränkung der Verarbeitung, Datenübertragbarkeit und Widerspruch.',
|
||||
rightsRight:
|
||||
'Beschwerden können bei der österreichischen Datenschutzbehörde eingereicht werden: Barichgasse 40-42, 1030 Wien, E-Mail dsb@dsb.gv.at, Website dsb.gv.at.',
|
||||
copyrightEyebrow: 'Urheberrecht',
|
||||
copyrightTitle: 'Urheberrecht, externe Links & anwendbares Recht',
|
||||
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 Ausnahmen benötigt eine vorherige schriftliche Zustimmung des jeweiligen Rechteinhabers.',
|
||||
],
|
||||
copyrightRightParagraphs: [
|
||||
'Diese Website kann Links zu externen Websites enthalten. Für deren Inhalte sind ausschließlich die jeweiligen Betreiber verantwortlich.',
|
||||
'Es gilt ausschließlich österreichisches Recht, sofern keine zwingenden Verbraucherschutzbestimmungen etwas anderes vorgeben.',
|
||||
],
|
||||
},
|
||||
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: 'Deklarativ', value: 'XAML' },
|
||||
{ label: 'Deklarativ', value: 'YAML' },
|
||||
{ label: 'Deklarativ', value: 'Markdown' },
|
||||
],
|
||||
portraitHighlights: [
|
||||
{
|
||||
image: 'assets/optimized/portrait/me.webp',
|
||||
imageSrcset:
|
||||
'assets/optimized/portrait/me-320.webp 320w, assets/optimized/portrait/me-480.webp 480w, assets/optimized/portrait/me.webp 640w',
|
||||
imageSizes:
|
||||
'(max-width: 700px) calc(100vw - 2rem), (max-width: 900px) min(100vw - 6rem, 560px), 560px',
|
||||
imageWidth: 640,
|
||||
imageHeight: 769,
|
||||
text: 'Ich',
|
||||
},
|
||||
{
|
||||
image: 'assets/optimized/portrait/love.webp',
|
||||
imageSrcset:
|
||||
'assets/optimized/portrait/love-320.webp 320w, assets/optimized/portrait/love-480.webp 480w, assets/optimized/portrait/love.webp 640w',
|
||||
imageSizes:
|
||||
'(max-width: 700px) calc(100vw - 2rem), (max-width: 900px) min(100vw - 6rem, 560px), 560px',
|
||||
imageWidth: 640,
|
||||
imageHeight: 710,
|
||||
text: 'Meine Liebe',
|
||||
},
|
||||
{
|
||||
image: 'assets/optimized/portrait/scuba.webp',
|
||||
imageSrcset:
|
||||
'assets/optimized/portrait/scuba-320.webp 320w, assets/optimized/portrait/scuba-480.webp 480w, assets/optimized/portrait/scuba.webp 640w',
|
||||
imageSizes:
|
||||
'(max-width: 700px) calc(100vw - 2rem), (max-width: 900px) min(100vw - 6rem, 560px), 560px',
|
||||
imageWidth: 640,
|
||||
imageHeight: 480,
|
||||
text: 'Tauchen',
|
||||
},
|
||||
{
|
||||
image: 'assets/optimized/portrait/trains.webp',
|
||||
imageSrcset:
|
||||
'assets/optimized/portrait/trains-320.webp 320w, assets/optimized/portrait/trains-480.webp 480w, assets/optimized/portrait/trains.webp 640w',
|
||||
imageSizes:
|
||||
'(max-width: 700px) calc(100vw - 2rem), (max-width: 900px) min(100vw - 6rem, 560px), 560px',
|
||||
imageWidth: 640,
|
||||
imageHeight: 850,
|
||||
text: 'Züge',
|
||||
},
|
||||
{
|
||||
image: 'assets/optimized/portrait/traveling.webp',
|
||||
imageSrcset:
|
||||
'assets/optimized/portrait/traveling-320.webp 320w, assets/optimized/portrait/traveling-480.webp 480w, assets/optimized/portrait/traveling.webp 640w',
|
||||
imageSizes:
|
||||
'(max-width: 700px) calc(100vw - 2rem), (max-width: 900px) min(100vw - 6rem, 560px), 560px',
|
||||
imageWidth: 640,
|
||||
imageHeight: 480,
|
||||
text: 'Reisen',
|
||||
},
|
||||
{
|
||||
image: 'assets/optimized/portrait/culture.webp',
|
||||
imageSrcset:
|
||||
'assets/optimized/portrait/culture-320.webp 320w, assets/optimized/portrait/culture-480.webp 480w, assets/optimized/portrait/culture.webp 640w',
|
||||
imageSizes:
|
||||
'(max-width: 700px) calc(100vw - 2rem), (max-width: 900px) min(100vw - 6rem, 560px), 560px',
|
||||
imageWidth: 640,
|
||||
imageHeight: 482,
|
||||
text: 'Kultur',
|
||||
},
|
||||
],
|
||||
projects: [
|
||||
{
|
||||
title: 'SobIT GmbH',
|
||||
link: 'https://sobit.at/',
|
||||
description:
|
||||
'Ich arbeite aktuell hauptsächlich für die Wiener Firma SobIT GmbH. Das Unternehmen entwickelt Software für den Gesundheitsbereich. - Entwicklung moderner Desktop-, Mobile- und Webanwendungen zur Unterstützung der Gesundheitsversorgung.',
|
||||
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',
|
||||
iconSizes: '(max-width: 700px) 64px, 108px',
|
||||
CircleIcon: false,
|
||||
},
|
||||
{
|
||||
title: 'SynHost',
|
||||
link: 'https://www.synhost.de/',
|
||||
description:
|
||||
'Ein Hosting-Dienstleister unter der Verwaltung von GERLACH SYSTEMS, für den ich Schnittstellen 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',
|
||||
iconSizes: '(max-width: 700px) 64px, 108px',
|
||||
iconWidth: 108,
|
||||
iconHeight: 64,
|
||||
CircleIcon: false,
|
||||
},
|
||||
{
|
||||
title: 'SynRadio',
|
||||
link: 'https://www.synradio.de/',
|
||||
description:
|
||||
'Ein Internetradio-Projekt, bei dem ich die technische Seite der digitalen Präsenz entwickle und betreue — inklusive 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',
|
||||
iconSizes: '(max-width: 700px) 64px, 108px',
|
||||
CircleIcon: true,
|
||||
},
|
||||
{
|
||||
title: 'Discord Audio Stream Library',
|
||||
link: 'https://github.com/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',
|
||||
iconSizes: '(max-width: 700px) 64px, 108px',
|
||||
CircleIcon: true,
|
||||
},
|
||||
{
|
||||
title: 'Portfolio',
|
||||
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',
|
||||
iconSizes: '(max-width: 700px) 64px, 108px',
|
||||
iconWidth: 320,
|
||||
iconHeight: 385,
|
||||
CircleIcon: true,
|
||||
},
|
||||
{
|
||||
title: 'Tauchertreff-Mostviertel',
|
||||
link: 'https://tauchertreff-mostviertel.at/',
|
||||
description:
|
||||
'Ich unterstütze außerdem meinen lokalen Tauchverein, indem ich die digitale Infrastruktur aufbaue und 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',
|
||||
iconSizes: '(max-width: 700px) 64px, 108px',
|
||||
CircleIcon: true,
|
||||
},
|
||||
],
|
||||
};
|
||||
@@ -0,0 +1,258 @@
|
||||
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:
|
||||
'Building reliable systems, clean interfaces, and practical digital solutions that actually hold up in production.',
|
||||
contactTitle: 'Contact me',
|
||||
viewProjects: 'View projects',
|
||||
aboutMe: 'About me',
|
||||
nextHighlightAriaLabel: 'Show next highlight image',
|
||||
nextHighlightTitle: 'Show next image',
|
||||
singleHighlightTitle: 'Single image',
|
||||
portraitAltSuffix: 'Image',
|
||||
clickHint: 'Click me!',
|
||||
aboutEyebrow: 'About me',
|
||||
aboutParagraphs: [
|
||||
'My name is {{firstname}}, though most people call me Julie. I am {{age}} and based in Austria. A large part of my day happens on the move, usually on trains, going between meetings, offices, and time with my family.',
|
||||
'I care deeply about digital security and privacy. I design systems with minimal exposure, sensible defaults, and a strong focus on data protection.',
|
||||
'I work with modern web technologies and on business-critical systems. I focus on clear, stable solutions that hold up in day-to-day use and deliver value.',
|
||||
],
|
||||
detailToggleOpen: 'Read extended profile',
|
||||
detailToggleClose: 'Hide extended profile',
|
||||
detailParagraphs: [
|
||||
'What really interests me is modern code: well-structured, maintainable, and built with performance in mind.',
|
||||
"Outside of software, my main hobby is scuba diving. The silence underwater keeps pulling me back into Austria's lakes.",
|
||||
'I mainly work for SobIT GmbH in Vienna, alongside freelance projects for companies, organizations, and private clients.',
|
||||
],
|
||||
getInTouch: 'Get in touch',
|
||||
projectsEyebrow: 'Current Jobs & Projects',
|
||||
openProjectPrefix: 'Open project',
|
||||
projectLanguagesAriaLabel: 'Project languages',
|
||||
fallbackBioLabel: 'my stack',
|
||||
},
|
||||
imprint: {
|
||||
legalEyebrow: 'Legal',
|
||||
title: 'Imprint & Privacy',
|
||||
intro:
|
||||
'Legal information for this website under Austrian law, including privacy information for websites operated by {{firstname}} {{lastname}} (Lechner Systems).',
|
||||
backToPortfolio: 'Back to portfolio',
|
||||
provider: 'Provider',
|
||||
directContact: 'Direct Contact',
|
||||
phone: 'Phone',
|
||||
contact: 'Contact',
|
||||
abuse: 'Abuse',
|
||||
scopeEyebrow: 'Scope',
|
||||
scopeTitle: 'Scope Of These Notices',
|
||||
scopeLeft:
|
||||
'These notices apply to this website and, unless a more specific notice is published there, to other websites operated by Julian Lechner under the name Lechner Systems.',
|
||||
scopeRight:
|
||||
'This website provides information about projects, technical services, contact options, and professional work in software engineering, IT, and related digital services.',
|
||||
privacyEyebrow: 'Privacy',
|
||||
privacyTitle: 'Privacy And Data Processing',
|
||||
privacyLeftParagraphs: [
|
||||
'The controller for data processing within the meaning of the GDPR is {{firstname}} {{lastname}}, reachable at {{contactMail}} and by phone at {{contactPhone}}.',
|
||||
'As currently implemented in this web project, this website does not use its own tracking, analytics cookies, marketing cookies, or long-term personal usage profiling.',
|
||||
'For informational website access, technically necessary connection and server data may be processed for operation, IT security, abuse prevention, and troubleshooting.',
|
||||
],
|
||||
privacyRightParagraphs: [
|
||||
'If you contact me by email or phone, the data you provide is processed to handle your request and maintain communication.',
|
||||
'Personal data is disclosed only where legally required, needed for legal claims, or explicitly initiated by you.',
|
||||
'Data is stored only as long as required for communication, request handling, and legal retention duties.',
|
||||
],
|
||||
rightsEyebrow: 'Rights',
|
||||
rightsTitle: 'Data Subject Rights And Complaints',
|
||||
rightsLeft:
|
||||
'Subject to statutory requirements, data subjects have the right of access, rectification, erasure, restriction of processing, data portability, and objection.',
|
||||
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.',
|
||||
copyrightEyebrow: 'Copyright',
|
||||
copyrightTitle: 'Copyright, External Links, And Applicable Law',
|
||||
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.',
|
||||
],
|
||||
copyrightRightParagraphs: [
|
||||
'This website may contain links to third-party websites. Their operators are solely responsible for those contents.',
|
||||
'Austrian law applies exclusively, unless mandatory consumer protection provisions require 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' },
|
||||
],
|
||||
portraitHighlights: [
|
||||
{
|
||||
image: 'assets/optimized/portrait/me.webp',
|
||||
imageSrcset:
|
||||
'assets/optimized/portrait/me-320.webp 320w, assets/optimized/portrait/me-480.webp 480w, assets/optimized/portrait/me.webp 640w',
|
||||
imageSizes:
|
||||
'(max-width: 700px) calc(100vw - 2rem), (max-width: 900px) min(100vw - 6rem, 560px), 560px',
|
||||
imageWidth: 640,
|
||||
imageHeight: 769,
|
||||
text: 'ME',
|
||||
},
|
||||
{
|
||||
image: 'assets/optimized/portrait/love.webp',
|
||||
imageSrcset:
|
||||
'assets/optimized/portrait/love-320.webp 320w, assets/optimized/portrait/love-480.webp 480w, assets/optimized/portrait/love.webp 640w',
|
||||
imageSizes:
|
||||
'(max-width: 700px) calc(100vw - 2rem), (max-width: 900px) min(100vw - 6rem, 560px), 560px',
|
||||
imageWidth: 640,
|
||||
imageHeight: 710,
|
||||
text: 'My Love',
|
||||
},
|
||||
{
|
||||
image: 'assets/optimized/portrait/scuba.webp',
|
||||
imageSrcset:
|
||||
'assets/optimized/portrait/scuba-320.webp 320w, assets/optimized/portrait/scuba-480.webp 480w, assets/optimized/portrait/scuba.webp 640w',
|
||||
imageSizes:
|
||||
'(max-width: 700px) calc(100vw - 2rem), (max-width: 900px) min(100vw - 6rem, 560px), 560px',
|
||||
imageWidth: 640,
|
||||
imageHeight: 480,
|
||||
text: 'Scuba Diving',
|
||||
},
|
||||
{
|
||||
image: 'assets/optimized/portrait/trains.webp',
|
||||
imageSrcset:
|
||||
'assets/optimized/portrait/trains-320.webp 320w, assets/optimized/portrait/trains-480.webp 480w, assets/optimized/portrait/trains.webp 640w',
|
||||
imageSizes:
|
||||
'(max-width: 700px) calc(100vw - 2rem), (max-width: 900px) min(100vw - 6rem, 560px), 560px',
|
||||
imageWidth: 640,
|
||||
imageHeight: 850,
|
||||
text: 'Trains',
|
||||
},
|
||||
{
|
||||
image: 'assets/optimized/portrait/traveling.webp',
|
||||
imageSrcset:
|
||||
'assets/optimized/portrait/traveling-320.webp 320w, assets/optimized/portrait/traveling-480.webp 480w, assets/optimized/portrait/traveling.webp 640w',
|
||||
imageSizes:
|
||||
'(max-width: 700px) calc(100vw - 2rem), (max-width: 900px) min(100vw - 6rem, 560px), 560px',
|
||||
imageWidth: 640,
|
||||
imageHeight: 480,
|
||||
text: 'Traveling',
|
||||
},
|
||||
{
|
||||
image: 'assets/optimized/portrait/culture.webp',
|
||||
imageSrcset:
|
||||
'assets/optimized/portrait/culture-320.webp 320w, assets/optimized/portrait/culture-480.webp 480w, assets/optimized/portrait/culture.webp 640w',
|
||||
imageSizes:
|
||||
'(max-width: 700px) calc(100vw - 2rem), (max-width: 900px) min(100vw - 6rem, 560px), 560px',
|
||||
imageWidth: 640,
|
||||
imageHeight: 482,
|
||||
text: 'Culture',
|
||||
},
|
||||
],
|
||||
projects: [
|
||||
{
|
||||
title: 'SobIT GmbH',
|
||||
link: 'https://sobit.at/',
|
||||
description:
|
||||
'I currently work primarily for the viennese company SobIT GmbH. This company develops software for the healthcare industry. - Development of modern desktop, mobile, and web applications to support healthcare delivery.',
|
||||
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',
|
||||
iconSizes: '(max-width: 700px) 64px, 108px',
|
||||
CircleIcon: false,
|
||||
},
|
||||
{
|
||||
title: 'SynHost',
|
||||
link: 'https://www.synhost.de/',
|
||||
description:
|
||||
'A hosting provider operated by GERLACH SYSTEMS, where I develop integrations and handle 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',
|
||||
iconSizes: '(max-width: 700px) 64px, 108px',
|
||||
iconWidth: 108,
|
||||
iconHeight: 64,
|
||||
CircleIcon: false,
|
||||
},
|
||||
{
|
||||
title: 'SynRadio',
|
||||
link: 'https://www.synradio.de/',
|
||||
description:
|
||||
'An online radio project, 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',
|
||||
iconSizes: '(max-width: 700px) 64px, 108px',
|
||||
CircleIcon: true,
|
||||
},
|
||||
{
|
||||
title: 'Discord Audio Stream Library',
|
||||
link: 'https://github.com/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',
|
||||
iconSizes: '(max-width: 700px) 64px, 108px',
|
||||
CircleIcon: true,
|
||||
},
|
||||
{
|
||||
title: 'Portfolio',
|
||||
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',
|
||||
iconSizes: '(max-width: 700px) 64px, 108px',
|
||||
iconWidth: 320,
|
||||
iconHeight: 385,
|
||||
CircleIcon: true,
|
||||
},
|
||||
{
|
||||
title: 'Tauchertreff-Mostviertel',
|
||||
link: 'https://tauchertreff-mostviertel.at/',
|
||||
description:
|
||||
'I also support my local diving club by building and running its digital infrastructure — email, website, cloud services, and everything around 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',
|
||||
iconSizes: '(max-width: 700px) 64px, 108px',
|
||||
CircleIcon: true,
|
||||
},
|
||||
],
|
||||
};
|
||||
@@ -0,0 +1,95 @@
|
||||
export type LanguageCode = 'en' | 'de';
|
||||
|
||||
export interface LanguageProject {
|
||||
title: string;
|
||||
link: string;
|
||||
description: string;
|
||||
skills: string[];
|
||||
icon?: string;
|
||||
iconSrcset?: string;
|
||||
iconSizes?: string;
|
||||
iconWidth?: number;
|
||||
iconHeight?: number;
|
||||
CircleIcon?: boolean;
|
||||
}
|
||||
|
||||
export interface LanguageBioTextEntry {
|
||||
label: string;
|
||||
value: string;
|
||||
}
|
||||
|
||||
export interface LanguagePortraitHighlight {
|
||||
image: string;
|
||||
imageSrcset: string;
|
||||
imageSizes: string;
|
||||
imageWidth: number;
|
||||
imageHeight: number;
|
||||
text: string;
|
||||
}
|
||||
|
||||
export interface LanguagePack {
|
||||
app: {
|
||||
selectorTitle: string;
|
||||
changeLanguage: string;
|
||||
changeLanguageAriaLabel: string;
|
||||
closeSelector: string;
|
||||
languageEnglish: string;
|
||||
languageGerman: string;
|
||||
};
|
||||
footer: {
|
||||
noscriptMessage: string;
|
||||
imprintLink: string;
|
||||
};
|
||||
home: {
|
||||
portfolioEyebrow: string;
|
||||
heroIntro: string;
|
||||
contactTitle: string;
|
||||
viewProjects: string;
|
||||
aboutMe: string;
|
||||
nextHighlightAriaLabel: string;
|
||||
nextHighlightTitle: string;
|
||||
singleHighlightTitle: string;
|
||||
portraitAltSuffix: string;
|
||||
clickHint: string;
|
||||
aboutEyebrow: string;
|
||||
aboutParagraphs: string[];
|
||||
detailToggleOpen: string;
|
||||
detailToggleClose: string;
|
||||
detailParagraphs: string[];
|
||||
getInTouch: string;
|
||||
projectsEyebrow: string;
|
||||
openProjectPrefix: string;
|
||||
projectLanguagesAriaLabel: string;
|
||||
fallbackBioLabel: string;
|
||||
};
|
||||
imprint: {
|
||||
legalEyebrow: string;
|
||||
title: string;
|
||||
intro: string;
|
||||
backToPortfolio: string;
|
||||
provider: string;
|
||||
directContact: string;
|
||||
phone: string;
|
||||
contact: string;
|
||||
abuse: string;
|
||||
scopeEyebrow: string;
|
||||
scopeTitle: string;
|
||||
scopeLeft: string;
|
||||
scopeRight: string;
|
||||
privacyEyebrow: string;
|
||||
privacyTitle: string;
|
||||
privacyLeftParagraphs: string[];
|
||||
privacyRightParagraphs: string[];
|
||||
rightsEyebrow: string;
|
||||
rightsTitle: string;
|
||||
rightsLeft: string;
|
||||
rightsRight: string;
|
||||
copyrightEyebrow: string;
|
||||
copyrightTitle: string;
|
||||
copyrightLeftParagraphs: string[];
|
||||
copyrightRightParagraphs: string[];
|
||||
};
|
||||
bioTextsList: LanguageBioTextEntry[];
|
||||
portraitHighlights: LanguagePortraitHighlight[];
|
||||
projects: LanguageProject[];
|
||||
}
|
||||
Reference in New Issue
Block a user