mirror of
https://github.com/rjNemo/vf-site
synced 2026-06-10 03:06:39 +00:00
feat(policies): add FR/EN policy pages and i18n routes; update footer and consent links to localized URLs
This commit is contained in:
parent
4c4224eb46
commit
ed80223e92
12 changed files with 164 additions and 8 deletions
|
|
@ -9,7 +9,11 @@ export type RouteKey =
|
|||
| 'location'
|
||||
| 'rates'
|
||||
| 'contact'
|
||||
| 'thank_you';
|
||||
| 'thank_you'
|
||||
| 'terms'
|
||||
| 'privacy'
|
||||
| 'cancellation'
|
||||
| 'house_rules';
|
||||
|
||||
export const routes: Record<RouteKey, Record<Locale, string>> = {
|
||||
home: { fr: '/fr/', en: '/en/' },
|
||||
|
|
@ -21,6 +25,10 @@ export const routes: Record<RouteKey, Record<Locale, string>> = {
|
|||
rates: { fr: '/fr/tarifs-disponibilites/', en: '/en/rates-availability/' },
|
||||
contact: { fr: '/fr/contact/', en: '/en/contact/' },
|
||||
thank_you: { fr: '/fr/merci/', en: '/en/thank-you/' },
|
||||
terms: { fr: '/fr/politiques/conditions/', en: '/en/policies/terms/' },
|
||||
privacy: { fr: '/fr/politiques/confidentialite/', en: '/en/policies/privacy/' },
|
||||
cancellation: { fr: '/fr/politiques/annulation/', en: '/en/policies/cancellation/' },
|
||||
house_rules: { fr: '/fr/politiques/reglement/', en: '/en/policies/house-rules/' },
|
||||
};
|
||||
|
||||
const normalize = (p: string) => {
|
||||
|
|
@ -68,4 +76,3 @@ export function navFor(locale: Locale): Array<{ label: string; href: string }> {
|
|||
export function ctaLabelFor(locale: Locale): string {
|
||||
return locale === 'en' ? 'Send a Request' : 'Envoyer une demande';
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -49,10 +49,21 @@ const homeHref = hrefFor('home', lang);
|
|||
<p class="mt-1">© VillaFleurie</p>
|
||||
</div>
|
||||
<ul class="flex gap-4">
|
||||
<li><a class="underline" href="/fr/politiques/conditions/">Conditions</a></li>
|
||||
<li><a class="underline" href="/fr/politiques/confidentialite/">Confidentialité</a></li>
|
||||
<li><a class="underline" href="/fr/politiques/annulation/">Annulation</a></li>
|
||||
<li><a class="underline" href="/fr/politiques/reglement/">Règlement intérieur</a></li>
|
||||
{lang === 'en' ? (
|
||||
<>
|
||||
<li><a class="underline" href={hrefFor('terms','en')}>Terms</a></li>
|
||||
<li><a class="underline" href={hrefFor('privacy','en')}>Privacy</a></li>
|
||||
<li><a class="underline" href={hrefFor('cancellation','en')}>Cancellation</a></li>
|
||||
<li><a class="underline" href={hrefFor('house_rules','en')}>House Rules</a></li>
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<li><a class="underline" href={hrefFor('terms','fr')}>Conditions</a></li>
|
||||
<li><a class="underline" href={hrefFor('privacy','fr')}>Confidentialité</a></li>
|
||||
<li><a class="underline" href={hrefFor('cancellation','fr')}>Annulation</a></li>
|
||||
<li><a class="underline" href={hrefFor('house_rules','fr')}>Règlement intérieur</a></li>
|
||||
</>
|
||||
)}
|
||||
</ul>
|
||||
</div>
|
||||
</footer>
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ const thankHref = hrefFor('thank_you', 'en');
|
|||
</label>
|
||||
<label class="md:col-span-2 flex items-start gap-2 text-sm">
|
||||
<input type="checkbox" required name="consent_privacy" />
|
||||
<span>I agree to the use of my data to process my request in accordance with the <a class="underline" href="/fr/politiques/confidentialite/">Privacy Policy</a>.</span>
|
||||
<span>I agree to the use of my data to process my request in accordance with the <a class="underline" href={hrefFor('privacy','en')}>Privacy Policy</a>.</span>
|
||||
</label>
|
||||
<div class="md:col-span-2">
|
||||
<button class="rounded-lg bg-brand px-4 py-2 text-white hover:bg-brand-600">Send</button>
|
||||
|
|
|
|||
15
src/pages/en/policies/cancellation.astro
Normal file
15
src/pages/en/policies/cancellation.astro
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
import BaseLayout from '../../../layouts/BaseLayout.astro';
|
||||
---
|
||||
<BaseLayout title="Cancellation" lang="en">
|
||||
<div class="mx-auto max-w-3xl px-6 py-10 prose">
|
||||
<h1>Cancellation Policy</h1>
|
||||
<ul>
|
||||
<li>Late cancellation: 50% fee if cancelled within 14 days before arrival.</li>
|
||||
<li>No‑show: treated as late cancellation.</li>
|
||||
<li>Security deposit: none.</li>
|
||||
<li>Cleaning fee: €20 if left dirty; free otherwise.</li>
|
||||
</ul>
|
||||
<p class="text-sm">Last updated: {new Date().toISOString().slice(0,10)}</p>
|
||||
</div>
|
||||
</BaseLayout>
|
||||
15
src/pages/en/policies/house-rules.astro
Normal file
15
src/pages/en/policies/house-rules.astro
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
import BaseLayout from '../../../layouts/BaseLayout.astro';
|
||||
---
|
||||
<BaseLayout title="House Rules" lang="en">
|
||||
<div class="mx-auto max-w-3xl px-6 py-10 prose">
|
||||
<h1>House Rules</h1>
|
||||
<ul>
|
||||
<li>No smoking, no parties, no pets.</li>
|
||||
<li>Respect neighbors and quiet hours.</li>
|
||||
<li>Check‑in 14:00 · Check‑out 11:00.</li>
|
||||
<li>Normal use of amenities; report any damage.</li>
|
||||
</ul>
|
||||
<p class="text-sm">Last updated: {new Date().toISOString().slice(0,10)}</p>
|
||||
</div>
|
||||
</BaseLayout>
|
||||
19
src/pages/en/policies/privacy.astro
Normal file
19
src/pages/en/policies/privacy.astro
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
---
|
||||
import BaseLayout from '../../../layouts/BaseLayout.astro';
|
||||
---
|
||||
<BaseLayout title="Privacy" lang="en">
|
||||
<div class="mx-auto max-w-3xl px-6 py-10 prose">
|
||||
<h1>Privacy Policy</h1>
|
||||
<p>We collect data submitted via the form (name, email, dates, etc.) to respond to your request.</p>
|
||||
<ul>
|
||||
<li>Legal basis: pre‑contractual measures.</li>
|
||||
<li>Retention: as needed for processing and legal obligations.</li>
|
||||
<li>Sharing: owner notification email; no resale.</li>
|
||||
<li>Analytics: Plausible (cookie‑free by default).</li>
|
||||
<li>Hosting: Netlify (form data processed by Netlify).</li>
|
||||
<li>Data rights: access, rectification, deletion — contact us.</li>
|
||||
</ul>
|
||||
<p>Contact: location.villafleurie@gmail.com</p>
|
||||
<p class="text-sm">Last updated: {new Date().toISOString().slice(0,10)}</p>
|
||||
</div>
|
||||
</BaseLayout>
|
||||
20
src/pages/en/policies/terms.astro
Normal file
20
src/pages/en/policies/terms.astro
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
import BaseLayout from '../../../layouts/BaseLayout.astro';
|
||||
---
|
||||
<BaseLayout title="Terms" lang="en">
|
||||
<div class="mx-auto max-w-3xl px-6 py-10 prose">
|
||||
<h1>Terms & Conditions</h1>
|
||||
<p><strong>Legal name:</strong> VillaFleurie (Jacques Gordien)</p>
|
||||
<p><strong>Contact:</strong> location.villafleurie@gmail.com · +33 6 58 96 12 79</p>
|
||||
<p><strong>Hosting:</strong> Netlify · <strong>Jurisdiction:</strong> France</p>
|
||||
<h2>Bookings</h2>
|
||||
<ul>
|
||||
<li>Minimum stay: 3 nights.</li>
|
||||
<li>Check‑in: 14:00 · Check‑out: 11:00.</li>
|
||||
<li>Payments and confirmations communicated by email.</li>
|
||||
</ul>
|
||||
<h2>Liability</h2>
|
||||
<p>Guest is responsible for damages during the stay. We are not liable for lost items.</p>
|
||||
<p class="text-sm">Last updated: {new Date().toISOString().slice(0,10)}</p>
|
||||
</div>
|
||||
</BaseLayout>
|
||||
|
|
@ -46,7 +46,7 @@ const thankHref = hrefFor('thank_you', 'fr');
|
|||
</label>
|
||||
<label class="md:col-span-2 flex items-start gap-2 text-sm">
|
||||
<input type="checkbox" required name="consent_privacy" />
|
||||
<span>J’accepte que mes données soient utilisées pour traiter ma demande conformément à la <a class="underline" href="/fr/politiques/confidentialite/">Politique de Confidentialité</a>.</span>
|
||||
<span>J’accepte que mes données soient utilisées pour traiter ma demande conformément à la <a class="underline" href={hrefFor('privacy','fr')}>Politique de Confidentialité</a>.</span>
|
||||
</label>
|
||||
<div class="md:col-span-2">
|
||||
<button class="rounded-lg bg-brand px-4 py-2 text-white hover:bg-brand-600">Envoyer</button>
|
||||
|
|
|
|||
15
src/pages/fr/politiques/annulation.astro
Normal file
15
src/pages/fr/politiques/annulation.astro
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
import BaseLayout from '../../../layouts/BaseLayout.astro';
|
||||
---
|
||||
<BaseLayout title="Annulation" lang="fr">
|
||||
<div class="mx-auto max-w-3xl px-6 py-10 prose">
|
||||
<h1>Politique d’Annulation</h1>
|
||||
<ul>
|
||||
<li>Annulation tardive: 50% des frais si annulé dans les 14 jours avant l’arrivée.</li>
|
||||
<li>No‑show: traité comme une annulation tardive.</li>
|
||||
<li>Caution: aucune.</li>
|
||||
<li>Frais de ménage: 20 € si laissé sale, gratuit sinon.</li>
|
||||
</ul>
|
||||
<p class="text-sm">Dernière mise à jour: {new Date().toISOString().slice(0,10)}</p>
|
||||
</div>
|
||||
</BaseLayout>
|
||||
20
src/pages/fr/politiques/conditions.astro
Normal file
20
src/pages/fr/politiques/conditions.astro
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
import BaseLayout from '../../../layouts/BaseLayout.astro';
|
||||
---
|
||||
<BaseLayout title="Conditions" lang="fr">
|
||||
<div class="mx-auto max-w-3xl px-6 py-10 prose">
|
||||
<h1>Conditions Générales</h1>
|
||||
<p><strong>Nom légal:</strong> VillaFleurie (Jacques Gordien)</p>
|
||||
<p><strong>Contact:</strong> location.villafleurie@gmail.com · +33 6 58 96 12 79</p>
|
||||
<p><strong>Hébergement:</strong> Netlify · <strong>Juridiction:</strong> France</p>
|
||||
<h2>Réservations</h2>
|
||||
<ul>
|
||||
<li>Séjour minimum: 3 nuits.</li>
|
||||
<li>Arrivée: 14:00 · Départ: 11:00.</li>
|
||||
<li>Paiements et confirmations communiqués par email.</li>
|
||||
</ul>
|
||||
<h2>Responsabilités</h2>
|
||||
<p>Le client est responsable des dommages causés pendant le séjour. Nous déclinons toute responsabilité pour les objets perdus.</p>
|
||||
<p class="text-sm">Dernière mise à jour: {new Date().toISOString().slice(0,10)}</p>
|
||||
</div>
|
||||
</BaseLayout>
|
||||
19
src/pages/fr/politiques/confidentialite.astro
Normal file
19
src/pages/fr/politiques/confidentialite.astro
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
---
|
||||
import BaseLayout from '../../../layouts/BaseLayout.astro';
|
||||
---
|
||||
<BaseLayout title="Confidentialité" lang="fr">
|
||||
<div class="mx-auto max-w-3xl px-6 py-10 prose">
|
||||
<h1>Politique de Confidentialité</h1>
|
||||
<p>Nous collectons les données soumises via le formulaire (nom, email, dates, etc.) pour répondre à votre demande.</p>
|
||||
<ul>
|
||||
<li>Base légale: exécution de mesures précontractuelles.</li>
|
||||
<li>Conservation: durée nécessaire au traitement et obligations légales.</li>
|
||||
<li>Partage: email de notification (propriétaire), pas de revente.</li>
|
||||
<li>Analytics: Plausible (sans cookie par défaut).</li>
|
||||
<li>Hébergement: Netlify (données de formulaire hébergées chez Netlify).</li>
|
||||
<li>Droits RGPD: accès, rectification, suppression — contactez-nous.</li>
|
||||
</ul>
|
||||
<p>Contact: location.villafleurie@gmail.com</p>
|
||||
<p class="text-sm">Dernière mise à jour: {new Date().toISOString().slice(0,10)}</p>
|
||||
</div>
|
||||
</BaseLayout>
|
||||
15
src/pages/fr/politiques/reglement.astro
Normal file
15
src/pages/fr/politiques/reglement.astro
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
import BaseLayout from '../../../layouts/BaseLayout.astro';
|
||||
---
|
||||
<BaseLayout title="Règlement intérieur" lang="fr">
|
||||
<div class="mx-auto max-w-3xl px-6 py-10 prose">
|
||||
<h1>Règlement Intérieur</h1>
|
||||
<ul>
|
||||
<li>Non‑fumeur, pas de fêtes, pas d’animaux.</li>
|
||||
<li>Respect du voisinage et du calme.</li>
|
||||
<li>Check‑in 14:00 · Check‑out 11:00.</li>
|
||||
<li>Utilisation normale des équipements; signaler tout dommage.</li>
|
||||
</ul>
|
||||
<p class="text-sm">Dernière mise à jour: {new Date().toISOString().slice(0,10)}</p>
|
||||
</div>
|
||||
</BaseLayout>
|
||||
Loading…
Reference in a new issue