spb/vrai-prix Public
Vrai-Prix — l'évaluation du vrai prix des propriétés résidentielles au Québec.
TypeScript 96.7%
CSS 3.2%
1// Auteur : Simon-Pierre Boucher — contact@spboucher.ai2export type Lang = "fr" | "en";34const dict = {5 fr: {6 tagline: "La vraie valeur de votre propriété, en toute transparence",7 sub: "Estimation basée sur 3,7 millions d'unités d'évaluation et 745 000 ventes réelles au Québec (2021-2026). Pas de boîte noire : on vous montre le calcul.",8 searchPlaceholder: "Entrez une adresse (ex. 861 route Elgin, Saint-Pamphile)",9 estimateBtn: "Estimer",10 manualTitle: "Pas d'adresse ? Décrivez la propriété",11 municipality: "Municipalité",12 propertyType: "Type de propriété",13 floorArea: "Superficie habitable (m²)",14 yearBuilt: "Année de construction",15 landArea: "Superficie du terrain (m²)",16 estimatedValue: "Valeur estimée",17 range: "Fourchette honnête",18 confidence: "Indice de confiance",19 whyTitle: "Pourquoi ce prix ? Le calcul, sans boîte noire",20 modelPart: "Modèle hédonique (LightGBM, 690 000 ventes QC)",21 compsPart: "Comparables ajustés (médiane pondérée)",22 weightModel: "poids du modèle",23 weightComps: "poids des comparables",24 compsTitle: "Comparables utilisés",25 adjTime: "Ajust. marché",26 adjArea: "Ajust. superficie",27 adjAge: "Ajust. âge",28 adjusted: "Prix ajusté",29 sold: "Vendu",30 distance: "Distance",31 weight: "Poids",32 history: "Valeur estimée par année",33 assessed: "Évaluation municipale (rôle 2026)",34 leadTitle: "Recevoir le rapport détaillé (PDF)",35 leadBtn: "M'envoyer le rapport",36 leadOk: "Merci ! Votre rapport sera envoyé sous peu.",37 emailPlaceholder: "votre@courriel.com",38 disclaimer: "Estimation statistique à titre indicatif — ne remplace pas une évaluation professionnelle.",39 unifamilial: "Unifamiliale",40 plex: "Plex (2-5 logements)",41 condo_ou_multi: "Condo / multirésidentiel",42 chalet: "Chalet",43 maison_mobile: "Maison mobile",44 terrain: "Terrain",45 autre: "Autre",46 notFound: "Adresse introuvable",47 dataNote: "Données : rôles d'évaluation foncière du Québec (MAMH) et transactions publiques.",48 confA: "Très fiable",49 confB: "Fiable",50 confC: "Indicative",51 confD: "Peu fiable — marché mince",52 searchNoResult: "Aucun résultat — essayez « numéro rue municipalité »",53 loading: "Calcul en cours…",54 },55 en: {56 tagline: "Your property's true value, fully transparent",57 sub: "Estimates built on 3.7M assessment units and 745k real Québec sales (2021-2026). No black box: we show the math.",58 searchPlaceholder: "Enter an address (e.g. 861 route Elgin, Saint-Pamphile)",59 estimateBtn: "Estimate",60 manualTitle: "No address? Describe the property",61 municipality: "Municipality",62 propertyType: "Property type",63 floorArea: "Living area (m²)",64 yearBuilt: "Year built",65 landArea: "Lot area (m²)",66 estimatedValue: "Estimated value",67 range: "Honest range",68 confidence: "Confidence index",69 whyTitle: "Why this price? The math, no black box",70 modelPart: "Hedonic model (LightGBM, 690k QC sales)",71 compsPart: "Adjusted comparables (weighted median)",72 weightModel: "model weight",73 weightComps: "comparables weight",74 compsTitle: "Comparables used",75 adjTime: "Market adj.",76 adjArea: "Area adj.",77 adjAge: "Age adj.",78 adjusted: "Adjusted price",79 sold: "Sold",80 distance: "Distance",81 weight: "Weight",82 history: "Estimated value by year",83 assessed: "Municipal assessment (2026 roll)",84 leadTitle: "Get the detailed report (PDF)",85 leadBtn: "Send me the report",86 leadOk: "Thanks! Your report is on its way.",87 emailPlaceholder: "you@email.com",88 disclaimer: "Statistical estimate for information only — not a substitute for a professional appraisal.",89 unifamilial: "Single-family",90 plex: "Plex (2-5 units)",91 condo_ou_multi: "Condo / multi-residential",92 chalet: "Cottage",93 maison_mobile: "Mobile home",94 terrain: "Land",95 autre: "Other",96 notFound: "Address not found",97 dataNote: "Data: Québec property assessment rolls (MAMH) and public transactions.",98 confA: "Very reliable",99 confB: "Reliable",100 confC: "Indicative",101 confD: "Low reliability — thin market",102 searchNoResult: "No result — try “number street municipality”",103 loading: "Computing…",104 },105} as const;106107export type TKey = keyof (typeof dict)["fr"];108109export function t(lang: Lang, key: TKey): string {110 return dict[lang][key] ?? dict.fr[key];111}112