diff --git a/frontend/src/app/shared/components/app-locations/app-locations.component.ts b/frontend/src/app/shared/components/app-locations/app-locations.component.ts
index 83f69bd..c1a0d4b 100644
--- a/frontend/src/app/shared/components/app-locations/app-locations.component.ts
+++ b/frontend/src/app/shared/components/app-locations/app-locations.component.ts
@@ -1,7 +1,8 @@
-import { Component } from '@angular/core';
+import { Component, inject } from '@angular/core';
import { CommonModule } from '@angular/common';
import { TranslateModule } from '@ngx-translate/core';
import { RouterLink } from '@angular/router';
+import { LanguageService } from '../../../core/services/language.service';
import {
AppToggleSelectorComponent,
ToggleOption,
@@ -20,6 +21,7 @@ import {
styleUrl: './app-locations.component.scss',
})
export class AppLocationsComponent {
+ readonly languageService = inject(LanguageService);
selectedLocation: 'ticino' | 'bienne' = 'ticino';
locationOptions: ToggleOption[] = [
diff --git a/frontend/src/assets/i18n/de.json b/frontend/src/assets/i18n/de.json
index 640bc79..38792a7 100644
--- a/frontend/src/assets/i18n/de.json
+++ b/frontend/src/assets/i18n/de.json
@@ -39,6 +39,72 @@
"TERMS": "AGB",
"CONTACT": "Kontakt"
},
+ "SEO": {
+ "DEFAULT": {
+ "TITLE": "3D fab | 3D-Druck nach Maß",
+ "DESCRIPTION": "3D-Druckservice nach Maß, technischer Shop und CAD-Support für Prototypen, Ersatzteile und Kleinserien."
+ },
+ "ROUTES": {
+ "HOME": {
+ "TITLE": "3D-Druck in Zürich | Prototypen, Ersatzteile und Kleinserien - 3D fab",
+ "DESCRIPTION": "3D-Druckservice in Zürich für Prototypen, Ersatzteile und Kleinserien. Technischer Shop und CAD-Service, mit schneller Angebotsanfrage aus STL-Dateien."
+ },
+ "CALCULATOR": {
+ "TITLE": "3D-Druck-Angebotsrechner | 3D fab",
+ "DESCRIPTION": "Laden Sie Ihre 3D-Datei hoch und erhalten Sie Preis und Lieferzeit in Sekunden mit echtem Slicing.",
+ "BASIC": {
+ "TITLE": "Einfacher 3D-Druck-Rechner | 3D fab",
+ "DESCRIPTION": "Berechnen Sie den Preis Ihres 3D-Drucks schnell mit dem Basis-Workflow."
+ },
+ "ADVANCED": {
+ "TITLE": "Erweiterter 3D-Druck-Rechner | 3D fab",
+ "DESCRIPTION": "Konfigurieren Sie erweiterte Druckparameter und erhalten Sie ein präzises Angebot mit echtem Slicing."
+ }
+ },
+ "SHOP": {
+ "TITLE": "3D fab Shop",
+ "DESCRIPTION": "Katalog mit 3D-gedruckten Produkten, technischem Zubehör und sofort einsatzbereiten Lösungen.",
+ "CATEGORY_TITLE": "Shop-Kategorie | 3D fab",
+ "CATEGORY_DESCRIPTION": "Entdecken Sie Produkte dieser Kategorie, verfügbare Varianten und technische 3D-Druck-Lösungen.",
+ "PRODUCT_TITLE": "Produkt | 3D fab",
+ "PRODUCT_DESCRIPTION": "Entdecken Sie Details, Materialien, Varianten und Verfügbarkeit des ausgewählten Produkts im 3D fab Shop."
+ },
+ "MATERIALS": {
+ "TITLE": "Qualität und Materialien | 3D fab",
+ "DESCRIPTION": "Vergleichen Sie 3D-Druckmaterialien mit interaktiven Radar-Charts, technischen Eigenschaften und referenzierten Quellen."
+ },
+ "ABOUT": {
+ "TITLE": "Über uns | 3D fab",
+ "DESCRIPTION": "Lernen Sie das Team von 3D fab und unser 3D-Druck-Labor für Prototypen, Ersatzteile und maßgeschneiderte Produktionen kennen."
+ },
+ "CONTACT": {
+ "TITLE": "Kontakt | 3D fab",
+ "DESCRIPTION": "Fordern Sie Informationen, individuelle Angebote oder technischen Support für Ihr 3D-Druck-Projekt an."
+ },
+ "LEGAL": {
+ "PRIVACY": {
+ "TITLE": "Datenschutz | 3D fab",
+ "DESCRIPTION": "Datenschutzerklärung von 3D fab: Datenverarbeitung, Zwecke und Kontaktangaben."
+ },
+ "TERMS": {
+ "TITLE": "AGB | 3D fab",
+ "DESCRIPTION": "Allgemeine Geschäftsbedingungen für den 3D-Druck-Service und den Angebotsrechner."
+ }
+ },
+ "CHECKOUT": {
+ "TITLE": "Checkout | 3D fab",
+ "DESCRIPTION": "Schließen Sie Ihre Anfrage ab und bestätigen Sie die Daten Ihrer 3D-Druck-Bestellung."
+ },
+ "ORDER": {
+ "TITLE": "Bestellung | 3D fab",
+ "DESCRIPTION": "Prüfen Sie die Zusammenfassung Ihrer Bestellung und den Status Ihrer 3D-Druck-Anfrage."
+ },
+ "ADMIN": {
+ "TITLE": "Admin | 3D fab",
+ "DESCRIPTION": "Geschützter Administrationsbereich von 3D fab."
+ }
+ }
+ },
"CALC": {
"TITLE": "3D-Angebot berechnen",
"SUBTITLE": "Laden Sie Ihre 3D-Datei (STL, 3MF, STEP) hoch, stellen Sie Qualität und Farbe ein und berechnen Sie sofort Preis und Lieferzeit.",
@@ -99,6 +165,7 @@
"SHOP": {
"TITLE": "Technische Lösungen",
"SUBTITLE": "Fertige Produkte, die praktische Probleme lösen",
+ "HERO_EYEBROW": "Technischer Shop",
"WIP_EYEBROW": "Work in progress",
"WIP_TITLE": "Shop im Aufbau",
"WIP_SUBTITLE": "Wir bereiten einen Shop mit ausgewählten Produkten und Funktionen zur automatischen Erstellung vor!",
@@ -109,6 +176,7 @@
"CUSTOM_PART_FOOTER_TEXT": "Kontaktieren Sie uns für individuelle Teile.",
"ADD_CART": "In den Warenkorb",
"ADDING": "Wird hinzugefügt",
+ "ADD_SUCCESS": "Produkt zum Warenkorb hinzugefügt.",
"BACK": "Zurück zum Shop",
"NOT_FOUND": "Produkt nicht gefunden.",
"DETAILS": "Details",
@@ -116,14 +184,39 @@
"SUCCESS_TITLE": "Zum Warenkorb hinzugefügt",
"SUCCESS_DESC": "Das Produkt wurde erfolgreich zum Warenkorb hinzugefügt.",
"CONTINUE": "Weiter",
+ "VIEW_ALL": "Gesamten Shop ansehen",
+ "CATALOG_LABEL": "Katalog",
+ "CATALOG_TITLE": "Alle Produkte",
+ "CATALOG_META_DESCRIPTION": "Entdecken Sie 3D-gedruckte Produkte, technisches Zubehör und einsatzbereite Lösungen mit demselben Checkout wie im Rechner.",
+ "CUSTOM_PART_CTA": "Nicht gefunden, was Sie suchen? Fordern Sie ein individuelles Teil an.",
+ "CATEGORY_META": "{{count}} Produkte in dieser Kategorie verfügbar",
+ "CATEGORY_PANEL_KICKER": "Navigation",
+ "CATEGORY_PANEL_TITLE": "Kategorien",
+ "SELECTED_CATEGORY": "Ausgewählte Kategorie",
+ "ITEMS_FOUND": "Produkte",
+ "EMPTY_CATEGORY": "Derzeit sind in dieser Kategorie keine Produkte verfügbar.",
+ "FEATURED_KICKER": "Empfohlen",
+ "FEATURED_TITLE": "Produkte, die sich lohnen",
+ "FEATURED_BADGE": "Empfohlen",
+ "HIGHLIGHT_PRODUCTS": "Produkte",
+ "HIGHLIGHT_CART": "Im Warenkorb",
+ "HIGHLIGHT_READY": "Vorschau",
+ "PRICE_FROM": "Preis ab",
"MODEL_OPEN": "3D-Ansicht öffnen",
"MODEL_CLOSE": "3D-Ansicht schließen",
+ "MODEL_3D": "3D-Vorschau",
+ "MODEL_TITLE": "Modellvorschau",
+ "MODEL_LOADING": "Das 3D-Modell wird geladen.",
+ "MODEL_UNAVAILABLE": "3D-Vorschau nicht verfügbar.",
"PREVIOUS_IMAGE": "Vorheriges Bild",
"NEXT_IMAGE": "Nächstes Bild",
+ "BREADCRUMB_ROOT": "Shop",
"PRICE_LABEL": "Preis",
+ "EXCERPT_FALLBACK": "Produktseite in Vorbereitung.",
"SELECT_MATERIAL": "Material",
"SELECT_COLOR": "Farbe",
"MATERIAL_COLOR_COUNT": "{{count}} Farben verfügbar",
+ "VARIANT": "Variante",
"PROPERTY_UV": "UV-Beständigkeit",
"PROPERTY_WEATHER": "Außeneinsatz",
"PROPERTY_RIGIDITY": "Steifigkeit",
@@ -132,6 +225,21 @@
"PROPERTY_LOW": "Niedrig",
"PROPERTY_RIGID": "Steif",
"PROPERTY_FLEXIBLE": "Flexibel",
+ "QUANTITY": "Menge",
+ "GO_TO_CHECKOUT": "Zum Checkout",
+ "IN_CART_SHORT": "Im Warenkorb x{{count}}",
+ "IN_CART_LONG": "Bereits im Warenkorb x{{count}}",
+ "DESCRIPTION_TITLE": "Beschreibung",
+ "CART_TITLE": "Warenkorb",
+ "CART_SUMMARY_TITLE": "Aktuelle Übersicht",
+ "CART_LOADING": "Warenkorb wird geladen.",
+ "CART_EMPTY": "Der Warenkorb ist leer. Fügen Sie ein Produkt hinzu.",
+ "CART_SUBTOTAL": "Zwischensumme Produkte",
+ "CART_SHIPPING": "Versand",
+ "CART_TOTAL": "Geschätzte Gesamtsumme",
+ "CLEAR_CART": "Leeren",
+ "REMOVE": "Entfernen",
+ "CART_UPDATE_ERROR": "Der Warenkorb konnte nicht aktualisiert werden. Bitte erneut versuchen.",
"ALL_CATEGORIES": "Alle Kategorien",
"CATEGORIES": {
"FILAMENTS": "Filamente",
@@ -400,6 +508,8 @@
"CHECKOUT": {
"TITLE": "Checkout",
"SUBTITLE": "Schließen Sie Ihre Bestellung ab, indem Sie Versand- und Zahlungsdetails eingeben.",
+ "CAD_SERVICE": "CAD-Service",
+ "CAD_REQUEST_REF": "bezogen auf Kontaktanfrage #{{id}}",
"CONTACT_INFO": "Kontaktinformationen",
"BILLING_ADDR": "Rechnungsadresse",
"SHIPPING_ADDR": "Lieferadresse",
@@ -553,6 +663,13 @@
"ERR_ID_NOT_FOUND": "Bestell-ID nicht gefunden.",
"ERR_LOAD_ORDER": "Bestelldetails konnten nicht geladen werden.",
"ERR_REPORT_PAYMENT": "Zahlung konnte nicht gemeldet werden. Bitte erneut versuchen.",
+ "CAD_SERVICE": "CAD-Service ({{hours}}h)",
+ "ITEMS_TITLE": "Bestellartikel",
+ "ORDER_TYPE_LABEL": "Bestelltyp",
+ "ITEM_COUNT": "Positionen",
+ "TYPE_SHOP": "Shop",
+ "TYPE_CALCULATOR": "Rechner",
+ "TYPE_MIXED": "Gemischt",
"NOT_AVAILABLE": "N/V"
},
"DROPZONE": {
diff --git a/frontend/src/assets/i18n/en.json b/frontend/src/assets/i18n/en.json
index def294f..b447eac 100644
--- a/frontend/src/assets/i18n/en.json
+++ b/frontend/src/assets/i18n/en.json
@@ -39,6 +39,72 @@
"TERMS": "Terms & Conditions",
"CONTACT": "Contact Us"
},
+ "SEO": {
+ "DEFAULT": {
+ "TITLE": "3D fab | Custom 3D Printing",
+ "DESCRIPTION": "Custom 3D printing service, technical shop and CAD support for prototypes, spare parts and short runs."
+ },
+ "ROUTES": {
+ "HOME": {
+ "TITLE": "Custom 3D Printing in Switzerland | Prototypes, Spare Parts & Short Runs - 3D fab",
+ "DESCRIPTION": "Swiss-based 3D printing service for prototypes, spare parts and short production runs. Technical shop and CAD support, with fast quotes from STL files."
+ },
+ "CALCULATOR": {
+ "TITLE": "3D Printing Quote Calculator | 3D fab",
+ "DESCRIPTION": "Upload your 3D file and get price and lead time in seconds with real slicing.",
+ "BASIC": {
+ "TITLE": "Basic 3D Printing Calculator | 3D fab",
+ "DESCRIPTION": "Quickly estimate the price of your 3D print with the basic workflow."
+ },
+ "ADVANCED": {
+ "TITLE": "Advanced 3D Printing Calculator | 3D fab",
+ "DESCRIPTION": "Configure advanced print settings and get a precise quote based on real slicing."
+ }
+ },
+ "SHOP": {
+ "TITLE": "3D fab Shop",
+ "DESCRIPTION": "Catalog of 3D printed products, technical accessories and practical ready-to-use solutions.",
+ "CATEGORY_TITLE": "Shop Category | 3D fab",
+ "CATEGORY_DESCRIPTION": "Browse products in this category, available variants and technical 3D printed solutions.",
+ "PRODUCT_TITLE": "Product | 3D fab",
+ "PRODUCT_DESCRIPTION": "Discover details, materials, variants and availability for the selected product in the 3D fab shop."
+ },
+ "MATERIALS": {
+ "TITLE": "Quality and Materials | 3D fab",
+ "DESCRIPTION": "Compare 3D printing materials with interactive radar charts, technical properties and cited sources."
+ },
+ "ABOUT": {
+ "TITLE": "About Us | 3D fab",
+ "DESCRIPTION": "Learn more about the 3D fab team and our 3D printing lab for prototypes, spare parts and custom production."
+ },
+ "CONTACT": {
+ "TITLE": "Contact | 3D fab",
+ "DESCRIPTION": "Request information, custom quotes or technical support for your 3D printing project."
+ },
+ "LEGAL": {
+ "PRIVACY": {
+ "TITLE": "Privacy Policy | 3D fab",
+ "DESCRIPTION": "3D fab privacy policy: data processing, purposes and contact details."
+ },
+ "TERMS": {
+ "TITLE": "Terms and Conditions | 3D fab",
+ "DESCRIPTION": "Terms and conditions for the 3D printing service and instant quote calculator."
+ }
+ },
+ "CHECKOUT": {
+ "TITLE": "Checkout | 3D fab",
+ "DESCRIPTION": "Complete your request and confirm the details for your 3D printing order."
+ },
+ "ORDER": {
+ "TITLE": "Order | 3D fab",
+ "DESCRIPTION": "Review your order summary and the status of your 3D printing request."
+ },
+ "ADMIN": {
+ "TITLE": "Admin | 3D fab",
+ "DESCRIPTION": "Restricted 3D fab administration area."
+ }
+ }
+ },
"CALC": {
"TITLE": "3D Print Calculator",
"SUBTITLE": "Upload your 3D file (STL, 3MF, STEP...) and get an instant estimate of costs and print time.",
@@ -99,6 +165,7 @@
"SHOP": {
"TITLE": "Technical solutions",
"SUBTITLE": "Ready-made products solving practical problems",
+ "HERO_EYEBROW": "Technical shop",
"WIP_EYEBROW": "Work in progress",
"WIP_TITLE": "Shop under construction",
"WIP_SUBTITLE": "We are building a curated technical shop with products that are genuinely useful and field-tested.",
@@ -109,6 +176,7 @@
"CUSTOM_PART_FOOTER_TEXT": "Contact us for custom parts.",
"ADD_CART": "Add to Cart",
"ADDING": "Adding to cart",
+ "ADD_SUCCESS": "Product added to cart.",
"BACK": "Back to Shop",
"NOT_FOUND": "Product not found.",
"DETAILS": "Details",
@@ -116,14 +184,39 @@
"SUCCESS_TITLE": "Added to cart",
"SUCCESS_DESC": "The product has been added to the cart.",
"CONTINUE": "Continue",
+ "VIEW_ALL": "View the full shop",
+ "CATALOG_LABEL": "Catalog",
+ "CATALOG_TITLE": "All products",
+ "CATALOG_META_DESCRIPTION": "Discover 3D printed products, technical accessories, and ready-to-use solutions with the same checkout as the calculator.",
+ "CUSTOM_PART_CTA": "Can't find what you're looking for? Request a custom part.",
+ "CATEGORY_META": "{{count}} products available in this category",
+ "CATEGORY_PANEL_KICKER": "Navigation",
+ "CATEGORY_PANEL_TITLE": "Categories",
+ "SELECTED_CATEGORY": "Selected category",
+ "ITEMS_FOUND": "products",
+ "EMPTY_CATEGORY": "No products are currently available in this category.",
+ "FEATURED_KICKER": "Featured",
+ "FEATURED_TITLE": "Products worth watching",
+ "FEATURED_BADGE": "Featured",
+ "HIGHLIGHT_PRODUCTS": "Products",
+ "HIGHLIGHT_CART": "In cart",
+ "HIGHLIGHT_READY": "Preview",
+ "PRICE_FROM": "Price from",
"MODEL_OPEN": "Open 3D view",
"MODEL_CLOSE": "Close 3D view",
+ "MODEL_3D": "3D preview",
+ "MODEL_TITLE": "Model preview",
+ "MODEL_LOADING": "Loading the 3D model.",
+ "MODEL_UNAVAILABLE": "3D preview unavailable.",
"PREVIOUS_IMAGE": "Previous image",
"NEXT_IMAGE": "Next image",
+ "BREADCRUMB_ROOT": "Shop",
"PRICE_LABEL": "Price",
+ "EXCERPT_FALLBACK": "Product page coming soon.",
"SELECT_MATERIAL": "Material",
"SELECT_COLOR": "Color",
"MATERIAL_COLOR_COUNT": "{{count}} colors available",
+ "VARIANT": "Variant",
"PROPERTY_UV": "UV resistance",
"PROPERTY_WEATHER": "Outdoor use",
"PROPERTY_RIGIDITY": "Rigidity",
@@ -132,6 +225,21 @@
"PROPERTY_LOW": "Low",
"PROPERTY_RIGID": "Rigid",
"PROPERTY_FLEXIBLE": "Flexible",
+ "QUANTITY": "Quantity",
+ "GO_TO_CHECKOUT": "Go to checkout",
+ "IN_CART_SHORT": "In cart x{{count}}",
+ "IN_CART_LONG": "Already in cart x{{count}}",
+ "DESCRIPTION_TITLE": "Description",
+ "CART_TITLE": "Cart",
+ "CART_SUMMARY_TITLE": "Current summary",
+ "CART_LOADING": "Loading cart.",
+ "CART_EMPTY": "Your cart is empty. Add a product.",
+ "CART_SUBTOTAL": "Products subtotal",
+ "CART_SHIPPING": "Shipping",
+ "CART_TOTAL": "Estimated total",
+ "CLEAR_CART": "Clear",
+ "REMOVE": "Remove",
+ "CART_UPDATE_ERROR": "We couldn't update the cart. Please try again.",
"ALL_CATEGORIES": "All categories",
"CATEGORIES": {
"FILAMENTS": "Filaments",
@@ -400,6 +508,8 @@
"CHECKOUT": {
"TITLE": "Checkout",
"SUBTITLE": "Complete your order by entering the shipping and payment details.",
+ "CAD_SERVICE": "CAD service",
+ "CAD_REQUEST_REF": "related to contact request #{{id}}",
"CONTACT_INFO": "Contact Information",
"BILLING_ADDR": "Billing Address",
"SHIPPING_ADDR": "Shipping Address",
@@ -553,6 +663,13 @@
"ERR_ID_NOT_FOUND": "Order ID not found.",
"ERR_LOAD_ORDER": "Failed to load order details.",
"ERR_REPORT_PAYMENT": "Failed to report payment. Please try again.",
+ "CAD_SERVICE": "CAD service ({{hours}}h)",
+ "ITEMS_TITLE": "Order items",
+ "ORDER_TYPE_LABEL": "Order type",
+ "ITEM_COUNT": "Lines",
+ "TYPE_SHOP": "Shop",
+ "TYPE_CALCULATOR": "Calculator",
+ "TYPE_MIXED": "Mixed",
"NOT_AVAILABLE": "N/A"
},
"DROPZONE": {
diff --git a/frontend/src/assets/i18n/fr.json b/frontend/src/assets/i18n/fr.json
index 88cf993..49b9d4e 100644
--- a/frontend/src/assets/i18n/fr.json
+++ b/frontend/src/assets/i18n/fr.json
@@ -13,6 +13,72 @@
"TERMS": "Conditions générales",
"CONTACT": "Contactez-nous"
},
+ "SEO": {
+ "DEFAULT": {
+ "TITLE": "3D fab | Impression 3D sur mesure",
+ "DESCRIPTION": "Service d'impression 3D sur mesure, boutique technique et support CAD pour prototypes, pièces et petites séries."
+ },
+ "ROUTES": {
+ "HOME": {
+ "TITLE": "Impression 3D à Bienne | Prototypes, pièces et petites séries - 3D fab",
+ "DESCRIPTION": "Service d'impression 3D à Bienne pour prototypes, pièces de rechange et petites séries. Boutique technique et support CAD, avec devis rapide depuis un fichier STL."
+ },
+ "CALCULATOR": {
+ "TITLE": "Calculateur de devis impression 3D | 3D fab",
+ "DESCRIPTION": "Chargez votre fichier 3D et obtenez prix et délais en quelques secondes avec un vrai slicing.",
+ "BASIC": {
+ "TITLE": "Calculateur impression 3D de base | 3D fab",
+ "DESCRIPTION": "Calculez rapidement le prix de votre impression 3D avec le parcours de base."
+ },
+ "ADVANCED": {
+ "TITLE": "Calculateur impression 3D avancé | 3D fab",
+ "DESCRIPTION": "Configurez des paramètres avancés et obtenez un devis précis basé sur un vrai slicing."
+ }
+ },
+ "SHOP": {
+ "TITLE": "Boutique 3D fab",
+ "DESCRIPTION": "Catalogue de produits imprimés en 3D, accessoires techniques et solutions pratiques prêtes à l'emploi.",
+ "CATEGORY_TITLE": "Catégorie boutique | 3D fab",
+ "CATEGORY_DESCRIPTION": "Parcourez les produits de cette catégorie, les variantes disponibles et les solutions techniques imprimées en 3D.",
+ "PRODUCT_TITLE": "Produit | 3D fab",
+ "PRODUCT_DESCRIPTION": "Découvrez les détails, matériaux, variantes et disponibilités du produit sélectionné dans la boutique 3D fab."
+ },
+ "MATERIALS": {
+ "TITLE": "Qualité et matériaux | 3D fab",
+ "DESCRIPTION": "Comparez les matériaux d'impression 3D avec des radar charts interactifs, des propriétés techniques et des sources citées."
+ },
+ "ABOUT": {
+ "TITLE": "Qui sommes-nous | 3D fab",
+ "DESCRIPTION": "Découvrez l'équipe de 3D fab et notre atelier d'impression 3D pour prototypes, pièces et productions sur mesure."
+ },
+ "CONTACT": {
+ "TITLE": "Contact | 3D fab",
+ "DESCRIPTION": "Demandez des informations, des devis personnalisés ou un support technique pour votre projet d'impression 3D."
+ },
+ "LEGAL": {
+ "PRIVACY": {
+ "TITLE": "Politique de confidentialité | 3D fab",
+ "DESCRIPTION": "Politique de confidentialité de 3D fab : traitement des données, finalités et contacts."
+ },
+ "TERMS": {
+ "TITLE": "Conditions générales | 3D fab",
+ "DESCRIPTION": "Conditions générales du service d'impression 3D et du calculateur de devis."
+ }
+ },
+ "CHECKOUT": {
+ "TITLE": "Checkout | 3D fab",
+ "DESCRIPTION": "Finalisez votre demande et confirmez les détails de votre commande d'impression 3D."
+ },
+ "ORDER": {
+ "TITLE": "Commande | 3D fab",
+ "DESCRIPTION": "Consultez le récapitulatif de votre commande et l'état de votre demande d'impression 3D."
+ },
+ "ADMIN": {
+ "TITLE": "Admin | 3D fab",
+ "DESCRIPTION": "Espace d'administration restreint de 3D fab."
+ }
+ }
+ },
"HOME": {
"HERO_EYEBROW": "Impression 3D technique pour entreprises, freelances et makers",
"HERO_TITLE": "Service d'impression 3D. Du fichier à la pièce finie.",
@@ -163,6 +229,7 @@
"SHOP": {
"TITLE": "Solutions techniques",
"SUBTITLE": "Produits prêts à l'emploi qui résolvent des problèmes pratiques",
+ "HERO_EYEBROW": "Boutique technique",
"WIP_EYEBROW": "Work in progress",
"WIP_TITLE": "Boutique en préparation",
"WIP_SUBTITLE": "Nous préparons une boutique avec des produits sélectionnés et des fonctionnalités de création automatique !",
@@ -173,6 +240,7 @@
"CUSTOM_PART_FOOTER_TEXT": "Contactez-nous pour des pièces personnalisées.",
"ADD_CART": "Ajouter au panier",
"ADDING": "Ajout en cours",
+ "ADD_SUCCESS": "Produit ajouté au panier.",
"BACK": "Retour à la boutique",
"NOT_FOUND": "Produit introuvable.",
"DETAILS": "Détails",
@@ -180,14 +248,39 @@
"SUCCESS_TITLE": "Ajouté au panier",
"SUCCESS_DESC": "Le produit a été ajouté au panier avec succès.",
"CONTINUE": "Continuer",
+ "VIEW_ALL": "Voir toute la boutique",
+ "CATALOG_LABEL": "Catalogue",
+ "CATALOG_TITLE": "Tous les produits",
+ "CATALOG_META_DESCRIPTION": "Découvrez des produits imprimés en 3D, des accessoires techniques et des solutions prêtes à l'emploi avec le même checkout que le calculateur.",
+ "CUSTOM_PART_CTA": "Vous ne trouvez pas ce que vous cherchez ? Demandez une pièce personnalisée.",
+ "CATEGORY_META": "{{count}} produits disponibles dans cette catégorie",
+ "CATEGORY_PANEL_KICKER": "Navigation",
+ "CATEGORY_PANEL_TITLE": "Catégories",
+ "SELECTED_CATEGORY": "Catégorie sélectionnée",
+ "ITEMS_FOUND": "produits",
+ "EMPTY_CATEGORY": "Aucun produit n'est disponible dans cette catégorie pour le moment.",
+ "FEATURED_KICKER": "À la une",
+ "FEATURED_TITLE": "Produits à surveiller",
+ "FEATURED_BADGE": "À la une",
+ "HIGHLIGHT_PRODUCTS": "Produits",
+ "HIGHLIGHT_CART": "Dans le panier",
+ "HIGHLIGHT_READY": "Aperçu",
+ "PRICE_FROM": "Prix à partir de",
"MODEL_OPEN": "Ouvrir la vue 3D",
"MODEL_CLOSE": "Fermer la vue 3D",
+ "MODEL_3D": "Aperçu 3D",
+ "MODEL_TITLE": "Aperçu du modèle",
+ "MODEL_LOADING": "Chargement du modèle 3D.",
+ "MODEL_UNAVAILABLE": "Aperçu 3D indisponible.",
"PREVIOUS_IMAGE": "Image précédente",
"NEXT_IMAGE": "Image suivante",
+ "BREADCRUMB_ROOT": "Boutique",
"PRICE_LABEL": "Prix",
+ "EXCERPT_FALLBACK": "Fiche produit en préparation.",
"SELECT_MATERIAL": "Matériau",
"SELECT_COLOR": "Couleur",
"MATERIAL_COLOR_COUNT": "{{count}} couleurs disponibles",
+ "VARIANT": "Variante",
"PROPERTY_UV": "Résistance UV",
"PROPERTY_WEATHER": "Usage extérieur",
"PROPERTY_RIGIDITY": "Rigidité",
@@ -196,6 +289,21 @@
"PROPERTY_LOW": "Faible",
"PROPERTY_RIGID": "Rigide",
"PROPERTY_FLEXIBLE": "Flexible",
+ "QUANTITY": "Quantité",
+ "GO_TO_CHECKOUT": "Aller au checkout",
+ "IN_CART_SHORT": "Dans le panier x{{count}}",
+ "IN_CART_LONG": "Déjà dans le panier x{{count}}",
+ "DESCRIPTION_TITLE": "Description",
+ "CART_TITLE": "Panier",
+ "CART_SUMMARY_TITLE": "Récapitulatif actuel",
+ "CART_LOADING": "Chargement du panier.",
+ "CART_EMPTY": "Le panier est vide. Ajoutez un produit.",
+ "CART_SUBTOTAL": "Sous-total produits",
+ "CART_SHIPPING": "Expédition",
+ "CART_TOTAL": "Total estimé",
+ "CLEAR_CART": "Vider",
+ "REMOVE": "Supprimer",
+ "CART_UPDATE_ERROR": "Nous n'avons pas réussi à mettre à jour le panier. Réessayez.",
"ALL_CATEGORIES": "Toutes les catégories",
"CATEGORIES": {
"FILAMENTS": "Filaments",
@@ -464,6 +572,8 @@
"CHECKOUT": {
"TITLE": "Checkout",
"SUBTITLE": "Complétez votre commande en saisissant les détails de livraison et de paiement.",
+ "CAD_SERVICE": "Service CAD",
+ "CAD_REQUEST_REF": "lié à la demande de contact #{{id}}",
"CONTACT_INFO": "Informations de contact",
"BILLING_ADDR": "Adresse de facturation",
"SHIPPING_ADDR": "Adresse de livraison",
@@ -559,6 +669,13 @@
"ERR_ID_NOT_FOUND": "ID de commande introuvable.",
"ERR_LOAD_ORDER": "Impossible de charger les détails de la commande.",
"ERR_REPORT_PAYMENT": "Impossible de signaler le paiement. Réessayez.",
+ "CAD_SERVICE": "Service CAD ({{hours}}h)",
+ "ITEMS_TITLE": "Articles de la commande",
+ "ORDER_TYPE_LABEL": "Type de commande",
+ "ITEM_COUNT": "Lignes",
+ "TYPE_SHOP": "Boutique",
+ "TYPE_CALCULATOR": "Calculateur",
+ "TYPE_MIXED": "Mixte",
"NOT_AVAILABLE": "N/D"
},
"DROPZONE": {
diff --git a/frontend/src/assets/i18n/it.json b/frontend/src/assets/i18n/it.json
index 13ccb71..371531a 100644
--- a/frontend/src/assets/i18n/it.json
+++ b/frontend/src/assets/i18n/it.json
@@ -13,6 +13,72 @@
"TERMS": "Termini & Condizioni",
"CONTACT": "Contattaci"
},
+ "SEO": {
+ "DEFAULT": {
+ "TITLE": "3D fab | Stampa 3D su misura",
+ "DESCRIPTION": "Servizio di stampa 3D su misura, shop tecnico e supporto CAD per prototipi, ricambi e piccole serie."
+ },
+ "ROUTES": {
+ "HOME": {
+ "TITLE": "Stampa 3D su misura in Ticino | Prototipi, ricambi e piccole serie - 3D fab",
+ "DESCRIPTION": "Servizio di stampa 3D in Ticino per prototipi, pezzi di ricambio e piccole serie. Shop tecnico e supporto CAD, con preventivo rapido da file STL."
+ },
+ "CALCULATOR": {
+ "TITLE": "Calcolatore preventivo stampa 3D | 3D fab",
+ "DESCRIPTION": "Carica il file 3D e ottieni prezzo e tempi in pochi secondi con slicing reale.",
+ "BASIC": {
+ "TITLE": "Calcolatore stampa 3D base | 3D fab",
+ "DESCRIPTION": "Calcola rapidamente il prezzo della tua stampa 3D in modalita base."
+ },
+ "ADVANCED": {
+ "TITLE": "Calcolatore stampa 3D avanzato | 3D fab",
+ "DESCRIPTION": "Configura parametri avanzati e ottieni un preventivo preciso con slicing reale."
+ }
+ },
+ "SHOP": {
+ "TITLE": "Shop 3D fab",
+ "DESCRIPTION": "Catalogo prodotti stampati in 3D e soluzioni tecniche pronte all uso.",
+ "CATEGORY_TITLE": "Categoria Shop | 3D fab",
+ "CATEGORY_DESCRIPTION": "Esplora i prodotti di questa categoria, le varianti disponibili e le soluzioni tecniche stampate in 3D.",
+ "PRODUCT_TITLE": "Prodotto | 3D fab",
+ "PRODUCT_DESCRIPTION": "Scopri dettagli, materiali, varianti e disponibilita del prodotto selezionato nello shop 3D fab."
+ },
+ "MATERIALS": {
+ "TITLE": "Qualita e Materiali | 3D fab",
+ "DESCRIPTION": "Confronta materiali di stampa 3D con radar chart interattivo, proprieta tecniche e fonti citate."
+ },
+ "ABOUT": {
+ "TITLE": "Chi siamo | 3D fab",
+ "DESCRIPTION": "Scopri il team 3D fab e il laboratorio di stampa 3D per prototipi, ricambi e produzioni su misura."
+ },
+ "CONTACT": {
+ "TITLE": "Contatti | 3D fab",
+ "DESCRIPTION": "Richiedi informazioni, preventivi personalizzati o supporto tecnico per il tuo progetto di stampa 3D."
+ },
+ "LEGAL": {
+ "PRIVACY": {
+ "TITLE": "Privacy Policy | 3D fab",
+ "DESCRIPTION": "Informativa privacy di 3D fab: trattamento dati, finalita e contatti."
+ },
+ "TERMS": {
+ "TITLE": "Termini e condizioni | 3D fab",
+ "DESCRIPTION": "Termini e condizioni del servizio di stampa 3D e del calcolatore preventivi."
+ }
+ },
+ "CHECKOUT": {
+ "TITLE": "Checkout | 3D fab",
+ "DESCRIPTION": "Completa la richiesta e conferma i dati del tuo ordine di stampa 3D."
+ },
+ "ORDER": {
+ "TITLE": "Ordine | 3D fab",
+ "DESCRIPTION": "Consulta il riepilogo del tuo ordine e lo stato della richiesta di stampa 3D."
+ },
+ "ADMIN": {
+ "TITLE": "Admin | 3D fab",
+ "DESCRIPTION": "Area amministrativa riservata di 3D fab."
+ }
+ }
+ },
"HOME": {
"HERO_EYEBROW": "Stampa 3D tecnica per aziende, freelance e maker",
"HERO_TITLE": "Servizio di stampa 3D. Dal file al pezzo finito.",
@@ -506,6 +572,8 @@
"CHECKOUT": {
"TITLE": "Checkout",
"SUBTITLE": "Completa il tuo ordine inserendo i dettagli per la spedizione e il pagamento.",
+ "CAD_SERVICE": "Servizio CAD",
+ "CAD_REQUEST_REF": "riferito alla richiesta contatto #{{id}}",
"CONTACT_INFO": "Informazioni di Contatto",
"BILLING_ADDR": "Indirizzo di Fatturazione",
"SHIPPING_ADDR": "Indirizzo di Spedizione",
@@ -601,6 +669,7 @@
"ERR_ID_NOT_FOUND": "ID ordine non trovato.",
"ERR_LOAD_ORDER": "Impossibile caricare i dettagli dell'ordine.",
"ERR_REPORT_PAYMENT": "Impossibile segnalare il pagamento. Riprova.",
+ "CAD_SERVICE": "Servizio CAD ({{hours}}h)",
"ITEMS_TITLE": "Articoli dell'ordine",
"ORDER_TYPE_LABEL": "Tipo ordine",
"ITEM_COUNT": "Righe",