feat: Armarium full customization and 4-language i18n (v0.8.0)

Replaces Astro Rocket demo content with Armarium branding and adds
complete DE/FR/IT/EN translations across all pages.

Branding & content (v0.7.0):
- Add horizontal SVG logo to navbar with currentColor dark mode support
- Rewrite homepage with Armarium hero, 6 feature cards, trust bar,
  Zürich coat of arms SVG, and CTA; shared HomePage.astro component
- Add privacy page (/datenschutz) with 6 Infomaniak certification cards
  and 8-section policy (ISO 27001:2022, Swiss Hosting, nDSG/GDPR, etc.)
- Add legal notice page (/impressum)
- Rewrite about, contact, 404 pages with Armarium content
- Add features page (/projects) from projects content collection
- Add language switcher dropdown (LanguageSwitcherDropdown.astro)
- Add single launch blog post; remove all demo blog/project content
- Set up i18n foundation: astro.config.mjs, ui.ts, utils.ts

Full i18n (v0.8.0):
- Add all pages in FR/IT/EN: about, contact, blog, features, privacy,
  legal notice — 28 locale variants total
- Language switcher visible in every layout (PageLayout, BlogLayout,
  ProjectLayout, LandingLayout) with translated nav items
- Locale-aware nav and footer hrefs via nav.*.href keys in ui.ts
- Shared page components (AboutPage, ContactPage, FeaturesIndexPage,
  BlogIndexPage) accept locale prop; locale pages are 4-line wrappers
- Extend content.config.ts locale enum with de and it

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Daniel Krähenbühl
2026-04-13 21:51:21 +02:00
parent 4053bdfbc5
commit d668aa0fdf
75 changed files with 3126 additions and 3619 deletions
+404
View File
@@ -0,0 +1,404 @@
export const languages = {
de: { code: 'de', name: 'Deutsch', flag: '🇩🇪' },
fr: { code: 'fr', name: 'Français', flag: '🇫🇷' },
it: { code: 'it', name: 'Italiano', flag: '🇮🇹' },
en: { code: 'en', name: 'English', flag: '🇬🇧' },
} as const;
export type Locale = keyof typeof languages;
export const defaultLocale: Locale = 'de';
export const ui = {
de: {
// Nav labels
'nav.blog': 'Blog',
'nav.features': 'Features',
'nav.about': 'Über uns',
'nav.contact': 'Kontakt',
// Nav hrefs (locale-aware)
'nav.blog.href': '/blog',
'nav.features.href': '/projects',
'nav.about.href': '/about',
'nav.contact.href': '/contact',
// Hero
'hero.badge': 'Version 1.0 ist da',
'hero.description': 'Behalte den Überblick über deine Finanzen. Erfasse Ausgaben, verwalte Budgets und erreiche deine Sparziele einfach und übersichtlich.',
'hero.register': 'Registrieren',
'hero.login': 'Login',
// Trust bar
'trust.privacy': 'Datenschutz garantiert',
'trust.free': 'Kostenlos starten',
// Features section
'features.badge': 'Features',
'features.title': 'Alles was du brauchst',
'features.description': 'Armarium vereint alle wichtigen Funktionen für ein solides Finanzmanagement in einer übersichtlichen App.',
// Feature cards
'f1.title': 'Budget-Übersicht',
'f1.desc': 'Alle Einnahmen und Ausgaben auf einen Blick. Dein aktueller Kontostand immer im Griff.',
'f2.title': 'Transaktionen erfassen',
'f2.desc': 'Ausgaben und Einnahmen schnell erfassen, kategorisieren und filtern für lückenlosen Überblick.',
'f3.title': 'Kategorien & Berichte',
'f3.desc': 'Eigene Kategorien definieren und Ausgaben analysieren. Verstehe, wohin dein Geld fliesst.',
'f4.title': 'Mehrere Konten',
'f4.desc': 'Verwalte Bankkonto, Kreditkarte und Bargeld getrennt alles in einer App zusammengefasst.',
'f5.title': 'Sparziele',
'f5.desc': 'Setze dir finanzielle Ziele und verfolge deinen Fortschritt Schritt für Schritt zum Ziel.',
'f6.title': 'Sicher & Privat',
'f6.desc': 'Deine Daten gehören dir. Kein Datenverkauf, kein Tracking volle Kontrolle über deine Finanzdaten.',
// CTA
'cta.title': 'Bereit, dein Budget im Griff zu haben?',
'cta.desc': 'Kostenlos registrieren und sofort loslegen. Keine Kreditkarte erforderlich.',
'cta.register': 'Kostenlos registrieren',
'cta.login': 'Bereits registriert? Login',
// Footer
'footer.tagline': 'Dein persönlicher Finanzbegleiter Budget im Blick, Ziele im Fokus. 🇨🇭 Made in Zürich, Switzerland.',
'footer.copyright': '© {year} Armarium. Alle Rechte vorbehalten.',
'footer.app': 'App',
'footer.start': 'Jetzt starten',
'footer.register': 'Registrieren',
'footer.legal': 'Rechtliches',
'footer.privacy': 'Datenschutz',
'footer.privacy.href': '/datenschutz',
'footer.imprint': 'Impressum',
'footer.imprint.href': '/impressum',
// About page
'about.badge': 'Über die App',
'about.title.pre': 'Über ',
'about.title.accent': 'Armarium',
'about.desc': 'Armarium ist ein persönlicher Finanzbegleiter, der dir hilft, den Überblick über deine Finanzen zu behalten einfach, sicher und ohne Ablenkung.',
'about.mission.badge': 'Unsere Mission',
'about.mission.title': 'Finanzen einfach im Griff',
'about.mission.p1': 'Armarium entstand aus dem Wunsch, Finanzen ohne unnötige Komplexität zu verwalten. Keine überladenen Dashboards, kein Datendschungel nur das Wesentliche, klar und übersichtlich.',
'about.mission.p2': 'Deine Daten gehören dir. Kein Datenverkauf, kein Tracking, keine versteckten Kosten. Armarium ist ein Werkzeug, das für dich arbeitet nicht umgekehrt.',
'about.app.label': 'Finanz-App',
'about.app.title': 'Armarium Suite',
'about.app.desc': 'Budget, Transaktionen, Kategorien, Sparziele alles in einer App. Verfügbar als Web-App, optimiert für Desktop und Mobile.',
'about.privacy.label': 'Datenschutz',
'about.privacy.title': 'Deine Daten, deine Kontrolle',
'about.privacy.desc': 'Armarium speichert deine Finanzdaten sicher. Kein Verkauf an Dritte, keine Werbung, kein Tracking.',
'about.values.badge': 'Unsere Werte',
'about.values.title': 'Wofür Armarium steht',
'about.v1.title': 'Transparenz',
'about.v1.desc': 'Klare Übersichten ohne versteckte Kosten oder komplizierte Strukturen.',
'about.v2.title': 'Einfachheit',
'about.v2.desc': 'Funktionen, die du wirklich brauchst ohne unnötigen Ballast.',
'about.v3.title': 'Datenschutz',
'about.v3.desc': 'Deine Finanzdaten sind privat. Punkt.',
'about.v4.title': 'Made in Zürich',
'about.v4.desc': 'Entwickelt in Zürich, Switzerland. Schweizer Qualität und Präzision.',
'about.cta.title': 'Bereit loszulegen?',
'about.cta.desc': 'Kostenlos registrieren und Armarium sofort nutzen.',
'about.cta.back': 'Zurück zur Startseite',
// Contact page
'contact.badge': 'Kontakt',
'contact.title': 'Schreib uns.',
'contact.desc': 'Nutze das Formular oder kontaktiere uns direkt. Wir melden uns innerhalb eines Werktages.',
'contact.form.title': 'Nachricht senden',
'contact.direct.title': 'Direkt erreichen',
'contact.direct.desc': 'Bevorzugst du einen direkten Kanal? Wähle was am besten passt.',
'contact.follow': 'Drop us a line',
// Blog index
'blog.badge': 'Alle Beiträge',
'blog.title': 'Blog',
'blog.desc': 'Neuigkeiten, Tipps und Updates rund um Armarium und persönliche Finanzen.',
'blog.featured': 'Hervorgehoben',
'blog.allposts': 'Alle Beiträge',
'blog.filter.label': 'Filter',
'blog.filter.all': 'Alle Beiträge',
'blog.noposts': 'Keine Beiträge gefunden',
'blog.noposts.tag': 'Keine Beiträge für diesen Tag',
'blog.follow.title': 'Auf dem Laufenden bleiben',
'blog.follow.desc': 'Neue Beiträge, Tipps und Updates direkt von uns.',
'blog.back': 'Zurück zum Blog',
// Features index
'features.cta.title': 'Bereit loszulegen?',
'features.cta.desc': 'Kostenlos registrieren und alle Features sofort nutzen.',
'features.cta.login': 'Login',
'features.back': 'Zurück zu Features',
},
fr: {
'nav.blog': 'Blog',
'nav.features': 'Fonctionnalités',
'nav.about': 'À propos',
'nav.contact': 'Contact',
'nav.blog.href': '/fr/blog',
'nav.features.href': '/fr/features',
'nav.about.href': '/fr/about',
'nav.contact.href': '/fr/contact',
'hero.badge': 'Version 1.0 disponible',
'hero.description': 'Gardez le contrôle de vos finances. Enregistrez vos dépenses, gérez vos budgets et atteignez vos objectifs d\'épargne simplement et clairement.',
'hero.register': 'S\'inscrire',
'hero.login': 'Connexion',
'trust.privacy': 'Protection des données garantie',
'trust.free': 'Commencer gratuitement',
'features.badge': 'Fonctionnalités',
'features.title': 'Tout ce qu\'il vous faut',
'features.description': 'Armarium réunit toutes les fonctions essentielles pour une gestion financière solide dans une application claire.',
'f1.title': 'Vue d\'ensemble',
'f1.desc': 'Toutes les recettes et dépenses en un coup d\'œil. Votre solde actuel toujours sous contrôle.',
'f2.title': 'Saisir des transactions',
'f2.desc': 'Enregistrez rapidement dépenses et recettes, catégorisez et filtrez pour une vue complète.',
'f3.title': 'Catégories & rapports',
'f3.desc': 'Définissez vos propres catégories et analysez vos dépenses. Comprenez où va votre argent.',
'f4.title': 'Plusieurs comptes',
'f4.desc': 'Gérez compte bancaire, carte de crédit et espèces séparément tout regroupé dans une seule app.',
'f5.title': 'Objectifs d\'épargne',
'f5.desc': 'Fixez-vous des objectifs financiers et suivez votre progression pas à pas vers le but.',
'f6.title': 'Sûr & privé',
'f6.desc': 'Vos données vous appartiennent. Pas de vente, pas de tracking contrôle total sur vos données financières.',
'cta.title': 'Prêt à maîtriser votre budget?',
'cta.desc': 'Inscrivez-vous gratuitement et commencez immédiatement. Aucune carte de crédit requise.',
'cta.register': 'S\'inscrire gratuitement',
'cta.login': 'Déjà inscrit? Connexion',
'footer.tagline': 'Votre assistant financier personnel budget maîtrisé, objectifs en vue. 🇨🇭 Made in Zürich, Switzerland.',
'footer.copyright': '© {year} Armarium. Tous droits réservés.',
'footer.app': 'App',
'footer.start': 'Commencer',
'footer.register': 'S\'inscrire',
'footer.legal': 'Légal',
'footer.privacy': 'Confidentialité',
'footer.privacy.href': '/fr/privacy',
'footer.imprint': 'Mentions légales',
'footer.imprint.href': '/fr/impressum',
'about.badge': 'À propos de l\'app',
'about.title.pre': 'À propos d\'',
'about.title.accent': 'Armarium',
'about.desc': 'Armarium est votre assistant financier personnel simple, sécurisé et sans distraction.',
'about.mission.badge': 'Notre mission',
'about.mission.title': 'Vos finances simplement maîtrisées',
'about.mission.p1': 'Armarium est né du souhait de gérer les finances sans complexité inutile. Pas de tableaux de bord surchargés, pas de jungle de données seulement l\'essentiel, clair et structuré.',
'about.mission.p2': 'Vos données vous appartiennent. Pas de vente de données, pas de tracking, pas de frais cachés. Armarium est un outil qui travaille pour vous pas l\'inverse.',
'about.app.label': 'Application financière',
'about.app.title': 'Armarium Suite',
'about.app.desc': 'Budget, transactions, catégories, objectifs d\'épargne tout en une app. Disponible en web, optimisé pour desktop et mobile.',
'about.privacy.label': 'Protection des données',
'about.privacy.title': 'Vos données, votre contrôle',
'about.privacy.desc': 'Armarium stocke vos données financières en toute sécurité. Pas de vente à des tiers, pas de publicité, pas de tracking.',
'about.values.badge': 'Nos valeurs',
'about.values.title': 'Ce que représente Armarium',
'about.v1.title': 'Transparence',
'about.v1.desc': 'Des aperçus clairs sans frais cachés ni structures compliquées.',
'about.v2.title': 'Simplicité',
'about.v2.desc': 'Les fonctionnalités dont vous avez vraiment besoin sans superflu.',
'about.v3.title': 'Protection des données',
'about.v3.desc': 'Vos données financières sont privées. Point final.',
'about.v4.title': 'Made in Zürich',
'about.v4.desc': 'Développé à Zürich, Suisse. Qualité et précision helvétiques.',
'about.cta.title': 'Prêt à commencer?',
'about.cta.desc': 'Inscrivez-vous gratuitement et utilisez Armarium immédiatement.',
'about.cta.back': 'Retour à l\'accueil',
'contact.badge': 'Contact',
'contact.title': 'Écrivez-nous.',
'contact.desc': 'Utilisez le formulaire ou contactez-nous directement. Nous répondons dans un jour ouvrable.',
'contact.form.title': 'Envoyer un message',
'contact.direct.title': 'Nous rejoindre directement',
'contact.direct.desc': 'Vous préférez un canal direct? Choisissez ce qui vous convient le mieux.',
'contact.follow': 'Envoyez-nous un message',
'blog.badge': 'Tous les articles',
'blog.title': 'Blog',
'blog.desc': 'Actualités, conseils et mises à jour sur Armarium et les finances personnelles.',
'blog.featured': 'En vedette',
'blog.allposts': 'Tous les articles',
'blog.filter.label': 'Filtrer',
'blog.filter.all': 'Tous les articles',
'blog.noposts': 'Aucun article trouvé',
'blog.noposts.tag': 'Aucun article pour ce tag',
'blog.follow.title': 'Restez informé',
'blog.follow.desc': 'Nouveaux articles, conseils et mises à jour directement de nous.',
'blog.back': 'Retour au blog',
'features.cta.title': 'Prêt à commencer?',
'features.cta.desc': 'Inscrivez-vous gratuitement et utilisez toutes les fonctionnalités immédiatement.',
'features.cta.login': 'Connexion',
'features.back': 'Retour aux fonctionnalités',
},
it: {
'nav.blog': 'Blog',
'nav.features': 'Funzionalità',
'nav.about': 'Chi siamo',
'nav.contact': 'Contatto',
'nav.blog.href': '/it/blog',
'nav.features.href': '/it/features',
'nav.about.href': '/it/about',
'nav.contact.href': '/it/contact',
'hero.badge': 'Versione 1.0 disponibile',
'hero.description': 'Tieni sotto controllo le tue finanze. Registra le spese, gestisci i budget e raggiungi i tuoi obiettivi di risparmio in modo semplice e chiaro.',
'hero.register': 'Registrarsi',
'hero.login': 'Accedi',
'trust.privacy': 'Privacy garantita',
'trust.free': 'Inizia gratuitamente',
'features.badge': 'Funzionalità',
'features.title': 'Tutto ciò di cui hai bisogno',
'features.description': 'Armarium riunisce tutte le funzioni essenziali per una gestione finanziaria solida in un\'app chiara.',
'f1.title': 'Panoramica del budget',
'f1.desc': 'Tutte le entrate e le uscite in un colpo d\'occhio. Il tuo saldo attuale sempre sotto controllo.',
'f2.title': 'Registrare transazioni',
'f2.desc': 'Registra rapidamente spese ed entrate, categorizza e filtra per una panoramica completa.',
'f3.title': 'Categorie & report',
'f3.desc': 'Definisci le tue categorie e analizza le spese. Capisce dove vanno i tuoi soldi.',
'f4.title': 'Più conti',
'f4.desc': 'Gestisci conto bancario, carta di credito e contanti separatamente tutto in un\'unica app.',
'f5.title': 'Obiettivi di risparmio',
'f5.desc': 'Fissa obiettivi finanziari e monitora i tuoi progressi passo dopo passo verso il traguardo.',
'f6.title': 'Sicuro & privato',
'f6.desc': 'I tuoi dati sono tuoi. Nessuna vendita, nessun tracking pieno controllo sui tuoi dati finanziari.',
'cta.title': 'Pronto a gestire il tuo budget?',
'cta.desc': 'Registrati gratuitamente e inizia subito. Nessuna carta di credito richiesta.',
'cta.register': 'Registrarsi gratuitamente',
'cta.login': 'Già registrato? Accedi',
'footer.tagline': 'Il tuo assistente finanziario personale budget sotto controllo, obiettivi in vista. 🇨🇭 Made in Zürich, Switzerland.',
'footer.copyright': '© {year} Armarium. Tutti i diritti riservati.',
'footer.app': 'App',
'footer.start': 'Inizia',
'footer.register': 'Registrarsi',
'footer.legal': 'Legale',
'footer.privacy': 'Privacy',
'footer.privacy.href': '/it/privacy',
'footer.imprint': 'Note legali',
'footer.imprint.href': '/it/impressum',
'about.badge': 'Sull\'app',
'about.title.pre': 'Chi siamo — ',
'about.title.accent': 'Armarium',
'about.desc': 'Armarium è il tuo assistente finanziario personale semplice, sicuro e senza distrazioni.',
'about.mission.badge': 'La nostra missione',
'about.mission.title': 'Finanze semplici e chiare',
'about.mission.p1': 'Armarium è nato dal desiderio di gestire le finanze senza complessità inutili. Niente dashboard sovraccariche, niente giungla di dati solo l\'essenziale, chiaro e ordinato.',
'about.mission.p2': 'I tuoi dati sono tuoi. Nessuna vendita di dati, nessun tracking, nessun costo nascosto. Armarium è uno strumento che lavora per te non il contrario.',
'about.app.label': 'App finanziaria',
'about.app.title': 'Armarium Suite',
'about.app.desc': 'Budget, transazioni, categorie, obiettivi di risparmio tutto in un\'unica app. Disponibile come web app, ottimizzata per desktop e mobile.',
'about.privacy.label': 'Privacy',
'about.privacy.title': 'I tuoi dati, il tuo controllo',
'about.privacy.desc': 'Armarium archivia i tuoi dati finanziari in modo sicuro. Nessuna vendita a terzi, nessuna pubblicità, nessun tracking.',
'about.values.badge': 'I nostri valori',
'about.values.title': 'I valori di Armarium',
'about.v1.title': 'Trasparenza',
'about.v1.desc': 'Panoramiche chiare senza costi nascosti o strutture complicate.',
'about.v2.title': 'Semplicità',
'about.v2.desc': 'Le funzionalità di cui hai davvero bisogno senza inutile complessità.',
'about.v3.title': 'Privacy',
'about.v3.desc': 'I tuoi dati finanziari sono privati. Punto.',
'about.v4.title': 'Made in Zürich',
'about.v4.desc': 'Sviluppato a Zurigo, Svizzera. Qualità e precisione svizzere.',
'about.cta.title': 'Pronto per iniziare?',
'about.cta.desc': 'Registrati gratuitamente e usa Armarium subito.',
'about.cta.back': 'Torna alla home',
'contact.badge': 'Contatto',
'contact.title': 'Scrivici.',
'contact.desc': 'Usa il modulo o contattaci direttamente. Rispondiamo entro un giorno lavorativo.',
'contact.form.title': 'Invia un messaggio',
'contact.direct.title': 'Contattaci direttamente',
'contact.direct.desc': 'Preferisci un canale diretto? Scegli quello che ti conviene di più.',
'contact.follow': 'Scrivici',
'blog.badge': 'Tutti gli articoli',
'blog.title': 'Blog',
'blog.desc': 'Notizie, suggerimenti e aggiornamenti su Armarium e le finanze personali.',
'blog.featured': 'In evidenza',
'blog.allposts': 'Tutti gli articoli',
'blog.filter.label': 'Filtra',
'blog.filter.all': 'Tutti gli articoli',
'blog.noposts': 'Nessun articolo trovato',
'blog.noposts.tag': 'Nessun articolo per questo tag',
'blog.follow.title': 'Rimani aggiornato',
'blog.follow.desc': 'Nuovi articoli, suggerimenti e aggiornamenti direttamente da noi.',
'blog.back': 'Torna al blog',
'features.cta.title': 'Pronto per iniziare?',
'features.cta.desc': 'Registrati gratuitamente e usa tutte le funzionalità subito.',
'features.cta.login': 'Accedi',
'features.back': 'Torna alle funzionalità',
},
en: {
'nav.blog': 'Blog',
'nav.features': 'Features',
'nav.about': 'About',
'nav.contact': 'Contact',
'nav.blog.href': '/en/blog',
'nav.features.href': '/en/features',
'nav.about.href': '/en/about',
'nav.contact.href': '/en/contact',
'hero.badge': 'Version 1.0 is here',
'hero.description': 'Keep track of your finances. Record expenses, manage budgets and reach your savings goals simply and clearly.',
'hero.register': 'Sign up',
'hero.login': 'Login',
'trust.privacy': 'Privacy guaranteed',
'trust.free': 'Start for free',
'features.badge': 'Features',
'features.title': 'Everything you need',
'features.description': 'Armarium brings together all the essential functions for solid financial management in one clear app.',
'f1.title': 'Budget Overview',
'f1.desc': 'All income and expenses at a glance. Your current balance always under control.',
'f2.title': 'Record Transactions',
'f2.desc': 'Quickly record income and expenses, categorize and filter for a complete overview.',
'f3.title': 'Categories & Reports',
'f3.desc': 'Define your own categories and analyze spending. Understand where your money goes.',
'f4.title': 'Multiple Accounts',
'f4.desc': 'Manage bank account, credit card and cash separately all combined in one app.',
'f5.title': 'Savings Goals',
'f5.desc': 'Set financial goals and track your progress step by step towards the target.',
'f6.title': 'Secure & Private',
'f6.desc': 'Your data belongs to you. No data selling, no tracking full control over your financial data.',
'cta.title': 'Ready to take control of your budget?',
'cta.desc': 'Sign up for free and get started immediately. No credit card required.',
'cta.register': 'Sign up for free',
'cta.login': 'Already registered? Login',
'footer.tagline': 'Your personal finance companion budget in check, goals in focus. 🇨🇭 Made in Zürich, Switzerland.',
'footer.copyright': '© {year} Armarium. All rights reserved.',
'footer.app': 'App',
'footer.start': 'Get started',
'footer.register': 'Sign up',
'footer.legal': 'Legal',
'footer.privacy': 'Privacy Policy',
'footer.privacy.href': '/en/privacy',
'footer.imprint': 'Legal Notice',
'footer.imprint.href': '/en/impressum',
'about.badge': 'About the app',
'about.title.pre': 'About ',
'about.title.accent': 'Armarium',
'about.desc': 'Armarium is your personal finance companion simple, secure and distraction-free.',
'about.mission.badge': 'Our mission',
'about.mission.title': 'Finances made simple',
'about.mission.p1': 'Armarium was born from the desire to manage finances without unnecessary complexity. No overloaded dashboards, no data jungle just the essentials, clear and structured.',
'about.mission.p2': 'Your data belongs to you. No data selling, no tracking, no hidden costs. Armarium is a tool that works for you not the other way around.',
'about.app.label': 'Finance App',
'about.app.title': 'Armarium Suite',
'about.app.desc': 'Budget, transactions, categories, savings goals all in one app. Available as a web app, optimized for desktop and mobile.',
'about.privacy.label': 'Privacy',
'about.privacy.title': 'Your data, your control',
'about.privacy.desc': 'Armarium stores your financial data securely. No selling to third parties, no advertising, no tracking.',
'about.values.badge': 'Our values',
'about.values.title': 'What Armarium stands for',
'about.v1.title': 'Transparency',
'about.v1.desc': 'Clear overviews without hidden costs or complicated structures.',
'about.v2.title': 'Simplicity',
'about.v2.desc': 'The features you actually need without unnecessary ballast.',
'about.v3.title': 'Privacy',
'about.v3.desc': 'Your financial data is private. Period.',
'about.v4.title': 'Made in Zürich',
'about.v4.desc': 'Developed in Zürich, Switzerland. Swiss quality and precision.',
'about.cta.title': 'Ready to get started?',
'about.cta.desc': 'Sign up for free and start using Armarium right away.',
'about.cta.back': 'Back to home',
'contact.badge': 'Contact',
'contact.title': 'Write to us.',
'contact.desc': 'Use the form or contact us directly. We respond within one business day.',
'contact.form.title': 'Send a message',
'contact.direct.title': 'Reach us directly',
'contact.direct.desc': 'Prefer a direct channel? Choose what works best for you.',
'contact.follow': 'Drop us a line',
'blog.badge': 'All posts',
'blog.title': 'Blog',
'blog.desc': 'News, tips and updates about Armarium and personal finance.',
'blog.featured': 'Featured',
'blog.allposts': 'All posts',
'blog.filter.label': 'Filter',
'blog.filter.all': 'All posts',
'blog.noposts': 'No posts found',
'blog.noposts.tag': 'No posts found for this tag',
'blog.follow.title': 'Stay in the loop',
'blog.follow.desc': 'New articles, tips and updates directly from us.',
'blog.back': 'Back to Blog',
'features.cta.title': 'Ready to get started?',
'features.cta.desc': 'Sign up for free and use all features right away.',
'features.cta.login': 'Login',
'features.back': 'Back to Features',
},
} as const satisfies Record<Locale, Record<string, string>>;
+28
View File
@@ -0,0 +1,28 @@
import { ui, defaultLocale, type Locale } from './ui';
export function useTranslations(locale: Locale) {
return function t(key: keyof typeof ui[typeof defaultLocale]): string {
const localeUi = ui[locale] as Record<string, string>;
const defaultUi = ui[defaultLocale] as Record<string, string>;
return localeUi[key] ?? defaultUi[key] ?? key;
};
}
/** Returns the path for the given locale, stripping/adding the locale prefix. */
export function getLocalePath(targetLocale: Locale, currentPath: string): string {
const nonDefaultLocales: Locale[] = ['fr', 'it', 'en'];
let basePath = currentPath;
for (const locale of nonDefaultLocales) {
if (currentPath.startsWith(`/${locale}/`)) {
basePath = currentPath.slice(locale.length + 1);
break;
} else if (currentPath === `/${locale}`) {
basePath = '/';
break;
}
}
if (targetLocale === defaultLocale) return basePath || '/';
return basePath === '/' ? `/${targetLocale}/` : `/${targetLocale}${basePath}`;
}