// Auteur : Simon-Pierre Boucher — contact@spboucher.ai export type Lang = "fr" | "en"; const dict = { fr: { tagline: "La vraie valeur de votre plex, porte par porte", sub: "ValoPlex est le moteur d'évaluation spécialisé plex du Québec : 393 865 immeubles de 2 logements et plus, 94 000 ventes réelles de plex (2021-2026), un modèle hédonique avancé dédié. Pas de boîte noire : on vous montre le calcul.", searchPlaceholder: "Entrez l'adresse du plex (ex. 4562 rue Chabot, Montréal)", estimateBtn: "Évaluer", manualTitle: "Pas d'adresse ? Décrivez le plex", municipality: "Municipalité", propertyType: "Type de propriété", portes: "Nombre de logements (portes)", floorArea: "Superficie habitable (m²)", yearBuilt: "Année de construction", landArea: "Superficie du terrain (m²)", estimatedValue: "Valeur estimée", valeurParPorte: "Valeur par porte", range: "Fourchette calibrée (80 %)", confidence: "Indice de confiance", whyTitle: "Pourquoi ce prix ? Le calcul, sans boîte noire", modelPart: "Modèle hédonique plex en ratio (LightGBM, 91 000 ventes)", compsPart: "Plex comparables ajustés (médiane pondérée)", weightModel: "poids du modèle", weightComps: "poids des comparables", compsTitle: "Ventes de plex comparables", adjTime: "Ajust. marché", adjArea: "Ajust. superficie", adjAge: "Ajust. âge", adjPortes: "Ajust. portes", adjusted: "Prix ajusté", sold: "Vendu", distance: "Distance", weight: "Poids", history: "Valeur estimée par année", assessed: "Évaluation municipale (rôle 2026)", leadTitle: "Recevoir le rapport détaillé (PDF)", leadBtn: "M'envoyer le rapport", leadOk: "Merci ! Votre rapport sera envoyé sous peu.", emailPlaceholder: "votre@courriel.com", disclaimer: "Estimation statistique à titre indicatif — ne remplace pas une évaluation professionnelle.", unifamilial: "Unifamiliale", plex: "Plex", condo_ou_multi: "Condo / multirésidentiel", chalet: "Chalet", maison_mobile: "Maison mobile", terrain: "Terrain", autre: "Autre", notFound: "Plex introuvable", dataNote: "Données : rôles d'évaluation foncière du Québec (MAMH) et ventes de plex publiées.", confA: "Très fiable", confB: "Fiable", confC: "Indicative", confD: "Peu fiable — marché mince", searchNoResult: "Aucun plex trouvé — essayez « numéro rue municipalité »", loading: "Calcul en cours…", }, en: { tagline: "Your plex's true value, door by door", sub: "ValoPlex is Québec's plex-specialized valuation engine: 393,865 buildings of 2+ dwellings, 94,000 real plex sales (2021-2026), a dedicated advanced hedonic model. No black box: we show the math.", searchPlaceholder: "Enter the plex address (e.g. 4562 rue Chabot, Montréal)", estimateBtn: "Value it", manualTitle: "No address? Describe the plex", municipality: "Municipality", propertyType: "Property type", portes: "Number of dwellings (doors)", floorArea: "Living area (m²)", yearBuilt: "Year built", landArea: "Lot area (m²)", estimatedValue: "Estimated value", valeurParPorte: "Value per door", range: "Calibrated range (80%)", confidence: "Confidence index", whyTitle: "Why this price? The math, no black box", modelPart: "Ratio-based plex hedonic model (LightGBM, 91k sales)", compsPart: "Adjusted comparable plexes (weighted median)", weightModel: "model weight", weightComps: "comparables weight", compsTitle: "Comparable plex sales", adjTime: "Market adj.", adjArea: "Area adj.", adjAge: "Age adj.", adjPortes: "Doors adj.", adjusted: "Adjusted price", sold: "Sold", distance: "Distance", weight: "Weight", history: "Estimated value by year", assessed: "Municipal assessment (2026 roll)", leadTitle: "Get the detailed report (PDF)", leadBtn: "Send me the report", leadOk: "Thanks! Your report is on its way.", emailPlaceholder: "you@email.com", disclaimer: "Statistical estimate for information only — not a substitute for a professional appraisal.", unifamilial: "Single-family", plex: "Plex", condo_ou_multi: "Condo / multi-residential", chalet: "Cottage", maison_mobile: "Mobile home", terrain: "Land", autre: "Other", notFound: "Plex not found", dataNote: "Data: Québec property assessment rolls (MAMH) and published plex sales.", confA: "Very reliable", confB: "Reliable", confC: "Indicative", confD: "Low reliability — thin market", searchNoResult: "No plex found — try “number street municipality”", loading: "Computing…", }, } as const; export type TKey = keyof (typeof dict)["fr"]; export function t(lang: Lang, key: TKey): string { return dict[lang][key] ?? dict.fr[key]; }