Browse Source

various fixes

olinox14 5 months ago
parent
commit
64d4f2bb95

+ 5 - 2
components/Contact.vue

@@ -83,6 +83,9 @@
 
 <script setup lang="ts">
 import type { Ref } from '@vue/reactivity'
+import { ref } from 'vue'
+import { useI18n } from 'vue-i18n'
+
 
 const appStore = useAppStore()
 
@@ -127,7 +130,7 @@ const submit = async (): Promise<void> => {
     return
   }
 
-  const url = 'https://api.ogene.fr/api/contact';
+  const url = 'https://api.ogene.fr/api/contact?recipient=sauvagerie';
   const headers = {
     'Content-Type': 'application/ld+json'
   };
@@ -187,4 +190,4 @@ const submit = async (): Promise<void> => {
     display: none;
   }
 }
-</style>
+</style>

+ 4 - 2
components/Footer.vue

@@ -1,15 +1,17 @@
 <template>
   <v-footer no-gutters :height="36" class="footer">
     <div class="footer-content">
-      <span>© La Sauvagerie 2024 - Location de vacances en Normandie</span>
+      <span>{{ $t('footer_copyright', { year: new Date().getFullYear() }) }}</span>
       <span class="divider">|</span>
-      <NuxtLink to="/mentions-legales" class="legal-link">Mentions légales</NuxtLink>
+      <NuxtLink to="/mentions-legales" class="legal-link">{{ $t('footer_legal') }}</NuxtLink>
     </div>
   </v-footer>
 </template>
 
 <script setup lang="ts">
+import { useI18n } from 'vue-i18n'
 
+const { t } = useI18n()
 </script>
 
 <style scoped lang="scss">

+ 4 - 1
components/LanguageSelector.vue

@@ -23,6 +23,9 @@
 </template>
 
 <script setup lang="ts">
+  import { ref, watch } from 'vue'
+  import { useI18n } from 'vue-i18n'
+
   const items = [
     { value: 'fr', title: 'FR', logo: '/images/logos/french_flag.svg' },
     { value: 'en', title: 'EN', logo: '/images/logos/us-uk_flag.svg' },
@@ -64,4 +67,4 @@
     height: 18px;
   }
 }
-</style>
+</style>

+ 21 - 9
components/Topbar.vue

@@ -2,8 +2,8 @@
   <div class="topbar">
     <NuxtLink to="/" class="logo-link">
       <div class="logo-container">
-        <h1 class="site-title">La Sauvagerie</h1>
-        <p class="site-subtitle">Location de vacances en Normandie</p>
+        <h1 class="site-title">{{ $t('site_title') }}</h1>
+        <p class="site-subtitle">{{ $t('site_subtitle') }}</p>
       </div>
     </NuxtLink>
 
@@ -14,13 +14,13 @@
 
       <ThemeSwitcher />
 
-      <v-btn
-          variant="text"
-          class="contact-btn"
-          prepend-icon="fas fa-phone"
+      <a 
+          href="#contact" 
+          class="contact-btn v-btn v-btn--text"
       >
-        Contact
-      </v-btn>
+        <i class="fas fa-phone mr-2"></i>
+        {{ $t('contact_button') }}
+      </a>
     </div>
   </div>
 </template>
@@ -28,6 +28,7 @@
 <script setup lang="ts">
   import ThemeSwitcher from "~/components/ThemeSwitcher.vue";
   import { useDisplay } from 'vuetify'
+  import { useI18n } from 'vue-i18n'
 
   const i18n = useI18n()
 
@@ -92,7 +93,18 @@
     color: rgb(var(--v-theme-on-primary)) !important;
     font-weight: 500;
     border-radius: 4px;
-    padding: 0 16px;
+    padding: 8px 16px;
+    text-decoration: none;
+    display: inline-flex;
+    align-items: center;
+    justify-content: center;
+    line-height: 1;
+    cursor: pointer;
+    transition: background-color 0.2s;
+
+    &:hover {
+      opacity: 0.9;
+    }
   }
 
   .icon-links {

+ 32 - 20
i18n/i18n.config.ts

@@ -1,23 +1,35 @@
-export default defineI18nConfig({
-  langDir: './lang',
-  lazy: true,
-  locales: [
-    {
-      code: 'en',
-      iso: 'en-US',
-      file: 'en.json',
-      name: 'English',
+import { defineI18nConfig } from '#i18n'
+
+export default defineI18nConfig(() => ({
+  legacy: false,
+  datetimeFormats: {
+    fr: {
+      short: {
+        year: 'numeric',
+        month: 'numeric',
+        day: 'numeric',
+      },
+      long: {
+        year: 'numeric',
+        month: 'numeric',
+        day: 'numeric',
+        hour: 'numeric',
+        minute: 'numeric',
+      },
     },
-    {
-      code: 'fr',
-      iso: 'fr-FR',
-      file: 'fr.json',
-      name: 'Français',
+    en: {
+      short: {
+        year: 'numeric',
+        month: 'numeric',
+        day: 'numeric',
+      },
+      long: {
+        year: 'numeric',
+        month: 'numeric',
+        day: 'numeric',
+        hour: 'numeric',
+        minute: 'numeric',
+      },
     },
-  ],
-  compilation: {
-    strictMessage: false,
   },
-  defaultLocale: 'fr',
-  detectBrowserLanguage: true,
-})
+}))

+ 75 - 1
i18n/lang/en.json

@@ -8,5 +8,79 @@
   "contact_name": "Name",
   "contact_message": "Message",
   "contact_submit": "Send",
-  "contact_confirmation": "Your message has been sent. We will get back to you soon."
+  "contact_confirmation": "Your message has been sent. We will get back to you soon.",
+  "contact_button": "Contact",
+  "home": "Back home",
+
+  "page_title": "La Sauvagerie - Holiday Rental",
+  "page_description": "Holiday home for 6 people near the sea in Normandy",
+
+  "site_title": "La Sauvagerie",
+  "site_subtitle": "Holiday rental in Normandy",
+
+  "welcome_heading": "Welcome to La Sauvagerie",
+  "welcome_description": "Welcome to La Sauvagerie, a 95m² holiday home, ideal for family or friends getaways. Located in a green and peaceful setting, this house offers three bedrooms that can accommodate up to six people. Enjoy the peaceful surroundings and the proximity of a pedestrian and cycling path that will easily lead you to the village shops 1.5 km away, or to the beach and sea only 3 km away.",
+
+  "features_heading": "Features",
+  "general_info_heading": "General Information",
+  "equipment_heading": "Equipment",
+  "location_heading": "Location",
+  "contact_heading": "Contact",
+
+  "general_info_item_1": "Holiday home for 6 people",
+  "general_info_item_2": "Weekly rental from Saturday to Saturday, €700 per week",
+  "general_info_item_3": "Arrival between 5pm and 7pm, departure before noon",
+  "general_info_item_4": "Area: 95m²",
+  "general_info_item_5": "2 parking spaces",
+
+  "equipment_item_1": "3 bedrooms (capacity 6 people)",
+  "equipment_item_2": "1 bathroom with shower",
+  "equipment_item_3": "2 toilets",
+  "equipment_item_4": "Living room / equipped kitchen",
+  "equipment_item_5": "Enclosed wooden terrace of 30m²",
+  "equipment_item_6": "Complete household appliances (washing machine, dishwasher, etc.)",
+
+  "location_item_1": "Access to the sea at 3 km",
+  "location_item_2": "Village shops at 1.5 km",
+  "location_item_3": "Pedestrian and cycling path nearby",
+  "location_item_4": "Green and peaceful setting",
+
+  "conditions_heading": "Conditions",
+  "conditions_item_1": "House rented from Saturday to Saturday between June 15 and September 30",
+  "conditions_item_2": "Minimum 3 days for the rest of the year",
+  "conditions_item_3": "Rented for maximum 6 people",
+  "conditions_item_4": "No pets",
+  "conditions_item_5": "No parties",
+  "conditions_item_6": "No smoking or vaping inside",
+
+  "main_image_alt": "La Sauvagerie - Main view",
+  "thumbnail_alt_main": "Main view",
+  "thumbnail_alt_exterior": "Exterior view",
+  "thumbnail_alt_interior": "Interior",
+
+  "image_loaded": "Image loaded",
+  "image_error": "Image error",
+
+  "footer_copyright": "© La Sauvagerie {year} - Holiday rental in Normandy",
+  "footer_legal": "Legal notices",
+
+  "legal_page_title": "La Sauvagerie - Legal Notices",
+  "legal_page_description": "Legal notices of La Sauvagerie, holiday rental in Normandy",
+  "legal_heading": "Legal Notices",
+  "legal_publisher_heading": "Website Publisher",
+  "legal_publisher_text": "The La Sauvagerie website is published by \"LMNP La Sauvagerie\", located at \"10 Village Sauvage, 50290 BREHAL\". SIREN: 942 629 700.",
+  "legal_publisher_phone": "",
+  "legal_publisher_email": "",
+  "legal_hosting_heading": "Hosting",
+  "legal_hosting_text": "This site is hosted by IONOS SARL, 7, place de la Gare, BP 70109, 57200 Sarreguemines Cedex, France.",
+  "legal_hosting_phone": "",
+  "legal_hosting_email": "",
+  "legal_intellectual_property_heading": "Intellectual Property",
+  "legal_intellectual_property_text1": "This entire site is subject to French and international legislation on copyright and intellectual property. All reproduction rights are reserved, including for downloadable documents and iconographic and photographic representations.",
+  "legal_intellectual_property_text2": "The reproduction of all or part of this site on any electronic medium whatsoever is formally prohibited except with the express authorization of the publication director.",
+  "legal_data_protection_heading": "Personal Data Protection",
+  "legal_data_protection_text1": "In accordance with the amended \"Informatique et Libertés\" law of January 6, 1978, you have the right to access, modify, rectify and delete data concerning you. To exercise this right, please contact us by email at the address indicated above.",
+  "legal_data_protection_text2": "The information collected on this site is intended exclusively for LMNP La Sauvagerie and will not be transmitted to third parties under any circumstances.",
+  "legal_cookies_heading": "Cookies",
+  "legal_cookies_text": "This site uses cookies to improve the user experience. By browsing this site, you accept the use of cookies in accordance with our privacy policy."
 }

+ 75 - 1
i18n/lang/fr.json

@@ -8,5 +8,79 @@
   "contact_name": "Nom",
   "contact_message": "Message",
   "contact_submit": "Envoyer",
-  "contact_confirmation": "Votre message a été envoyé. Nous vous répondrons bientôt."
+  "contact_confirmation": "Votre message a été envoyé. Nous vous répondrons bientôt.",
+  "contact_button": "Contact",
+  "home": "Retour à l'accueil",
+
+  "page_title": "La Sauvagerie - Location de vacances",
+  "page_description": "Maison de vacances pour 6 personnes à proximité de la mer en Normandie",
+
+  "site_title": "La Sauvagerie",
+  "site_subtitle": "Location de vacances en Normandie",
+
+  "welcome_heading": "Bienvenue à La Sauvagerie",
+  "welcome_description": "Bienvenue à la Sauvagerie, maison de vacances de 95m², idéale pour des séjours en famille ou entre amis. Située dans un cadre verdoyant et paisible, cette maison offre trois chambres pouvant accueillir jusqu'à six personnes. Profitez de la tranquillité ambiante, et de la proximité d'une voie pédestre et cyclable qui vous mènera facilement aux commerces du bourg à 1,5 km, ou à la plage et la mer à seulement 3 km.",
+
+  "features_heading": "Caractéristiques",
+  "general_info_heading": "Informations générales",
+  "equipment_heading": "Équipements",
+  "location_heading": "Situation",
+  "contact_heading": "Contact",
+
+  "general_info_item_1": "Maison de vacances pour 6 personnes",
+  "general_info_item_2": "Location semaine du samedi au samedi, 700€ la semaine",
+  "general_info_item_3": "Arrivée entre 17h et 19h, départ avant midi",
+  "general_info_item_4": "Surface: 95m²",
+  "general_info_item_5": "2 places de parking",
+
+  "equipment_item_1": "3 chambres (capacité 6 personnes)",
+  "equipment_item_2": "1 salle de bain avec douche",
+  "equipment_item_3": "2 WC",
+  "equipment_item_4": "Salon / cuisine équipée",
+  "equipment_item_5": "Terrasse en bois fermée de 30m²",
+  "equipment_item_6": "Électroménager complet (lave-linge, lave-vaisselle, etc.)",
+
+  "location_item_1": "Accès à la mer à 3 km",
+  "location_item_2": "Commerces du bourg à 1,5 km",
+  "location_item_3": "Voie pédestre et cyclable à proximité",
+  "location_item_4": "Cadre verdoyant et paisible",
+
+  "conditions_heading": "Conditions",
+  "conditions_item_1": "Maison louée du samedi au samedi entre le 15 juin et le 30 septembre",
+  "conditions_item_2": "Minimum 3 jours le reste de l'année",
+  "conditions_item_3": "Maximum 6 personnes",
+  "conditions_item_4": "Animaux non acceptés",
+  "conditions_item_5": "Pas de fêtes",
+  "conditions_item_6": "Interdiction de fumer et de vapoter à l'intérieur",
+
+  "main_image_alt": "La Sauvagerie - Vue principale",
+  "thumbnail_alt_main": "Vue principale",
+  "thumbnail_alt_exterior": "Vue extérieure",
+  "thumbnail_alt_interior": "Intérieur",
+
+  "image_loaded": "Image chargée",
+  "image_error": "Erreur image",
+
+  "footer_copyright": "© La Sauvagerie {year} - Location de vacances en Normandie",
+  "footer_legal": "Mentions légales",
+
+  "legal_page_title": "La Sauvagerie - Mentions Légales",
+  "legal_page_description": "Mentions légales de La Sauvagerie, location de vacances en Normandie",
+  "legal_heading": "Mentions Légales",
+  "legal_publisher_heading": "Éditeur du site",
+  "legal_publisher_text": "Le site La Sauvagerie est édité par la société LMNP La Sauvagerie, domiciliée à BREHAL. SIREN : 942 629 700.",
+  "legal_publisher_phone": "",
+  "legal_publisher_email": "",
+  "legal_hosting_heading": "Hébergement",
+  "legal_hosting_text": "Ce site est hébergé par la société IONOS SARL, 7, place de la Gare, BP 70109, 57200 Sarreguemines Cedex, France.",
+  "legal_hosting_phone": "",
+  "legal_hosting_email": "",
+  "legal_intellectual_property_heading": "Propriété intellectuelle",
+  "legal_intellectual_property_text1": "L'ensemble de ce site relève de la législation française et internationale sur le droit d'auteur et la propriété intellectuelle. Tous les droits de reproduction sont réservés, y compris pour les documents téléchargeables et les représentations iconographiques et photographiques.",
+  "legal_intellectual_property_text2": "La reproduction de tout ou partie de ce site sur un support électronique quel qu'il soit est formellement interdite sauf autorisation expresse du directeur de la publication.",
+  "legal_data_protection_heading": "Protection des données personnelles",
+  "legal_data_protection_text1": "Conformément à la loi « Informatique et Libertés » du 6 janvier 1978 modifiée, vous disposez d'un droit d'accès, de modification, de rectification et de suppression des données vous concernant. Pour exercer ce droit, veuillez nous contacter par email à l'adresse indiquée ci-dessus.",
+  "legal_data_protection_text2": "Les informations recueillies sur ce site sont destinées exclusivement à LMNP La Sauvagerie et ne seront en aucun cas transmises à des tiers.",
+  "legal_cookies_heading": "Cookies",
+  "legal_cookies_text": "Ce site utilise des cookies pour améliorer l'expérience utilisateur. En naviguant sur ce site, vous acceptez l'utilisation de cookies conformément à notre politique de confidentialité."
 }

+ 29 - 2
nuxt.config.ts

@@ -18,7 +18,7 @@ export default defineNuxtConfig({
         { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' },
       ],
       htmlAttrs: {
-        lang: 'en-US'
+        lang: 'fr-FR'
       }
     },
   },
@@ -52,7 +52,12 @@ export default defineNuxtConfig({
     'nuxt-lodash',
     '@nuxt/devtools',
     '@nuxtjs/sitemap',
-    '@nuxtjs/i18n',
+    [
+      '@nuxtjs/i18n',
+      {
+        vueI18n: './i18n/i18n.config.ts'
+      }
+    ],
     '@nuxtjs/google-fonts',
     '@pinia/nuxt',
   ],
@@ -74,6 +79,28 @@ export default defineNuxtConfig({
       },
     },
   },
+  i18n: {
+    langDir: 'lang',
+    lazy: true,
+    strategy: 'no_prefix',
+    locales: [
+      {
+        code: 'en',
+        iso: 'en-US',
+        file: 'en.json',
+        name: 'English',
+      },
+      {
+        code: 'fr',
+        iso: 'fr-FR',
+        file: 'fr.json',
+        name: 'Français',
+      },
+    ],
+    defaultLocale: 'fr',
+    detectBrowserLanguage: false,
+    vueI18n: './i18n.config.ts',
+  },
   router: {
     options: {
       scrollBehaviorType: 'smooth',

+ 53 - 69
pages/index.vue

@@ -1,7 +1,7 @@
 <template>
   <PageMeta
-      title="La Sauvagerie - Location de vacances"
-      description="Maison de vacances pour 6 personnes à proximité de la mer en Normandie"
+      :title="$t('page_title')"
+      :description="$t('page_description')"
   />
 
   <div class="rental-container">
@@ -9,15 +9,13 @@
     <div class="main-image-container">
       <v-img
         src="/images/photos/IMG_2216.min.JPG"
-        alt="La Sauvagerie - Vue principale"
+        :alt="$t('main_image_alt')"
         cover
         eager
         height="500"
         class="main-image rounded-lg"
         :loading="loading"
-        @click="selectImage('/images/photos/IMG_2216.min.png')"
-        @load="onImageLoad"
-        @error="onImageError"
+        @click="selectImage('/images/photos/IMG_2216.min.JPG')"
         style="cursor: pointer;"
       ></v-img>
     </div>
@@ -25,7 +23,7 @@
     <!-- Thumbnails Section -->
     <div class="thumbnails-container mt-4">
       <v-row>
-        <v-col v-for="(image, index) in thumbnailImages" :key="index" cols="12" sm="6" md="3">
+        <v-col v-for="(image, index) in thumbnailImages" :key="index" cols="12" sm="6" md="4">
           <v-img
             :src="image.src"
             :alt="image.alt"
@@ -34,8 +32,6 @@
             eager
             class="thumbnail rounded-lg"
             @click="selectImage(image.src)"
-            @load="onImageLoad"
-            @error="onImageError"
           ></v-img>
         </v-col>
       </v-row>
@@ -43,43 +39,40 @@
 
     <!-- Description Section -->
     <div class="description-container mt-8">
-      <h2>Bienvenue à La Sauvagerie</h2>
+      <h2>{{ $t('welcome_heading') }}</h2>
       <v-card class="pa-4">
         <p class="text-body-1">
-          Bienvenue à la Sauvagerie, maison de vacances de 95m², idéale pour des séjours en famille ou entre amis. 
-          Située dans un cadre verdoyant et paisible, cette maison offre trois chambres pouvant accueillir jusqu'à six personnes. 
-          Profitez de la tranquillité ambiante, et de la proximité d'une voie pédestre et cyclable qui vous mènera facilement 
-          aux commerces du bourg à 1,5 km, ou à la plage et la mer à seulement 3 km.
+          {{ $t('welcome_description') }}
         </p>
       </v-card>
     </div>
 
     <!-- Features Summary Section -->
     <div class="features-container mt-8">
-      <h2>Caractéristiques</h2>
+      <h2>{{ $t('features_heading') }}</h2>
       <v-row>
         <v-col cols="12" md="6">
           <v-card class="pa-4 h-100">
-            <h3 class="text-h6 mb-4">Informations générales</h3>
+            <h3 class="text-h6 mb-4">{{ $t('general_info_heading') }}</h3>
             <ul class="feature-list">
-              <li>Maison de vacances pour 6 personnes</li>
-              <li>Location semaine du samedi au samedi, 700€ la semaine</li>
-              <li>Arrivée entre 17h et 19h, départ avant midi</li>
-              <li>Surface: 95m²</li>
-              <li>2 places de parking</li>
+              <li>{{ $t('general_info_item_1') }}</li>
+              <li>{{ $t('general_info_item_2') }}</li>
+              <li>{{ $t('general_info_item_3') }}</li>
+              <li>{{ $t('general_info_item_4') }}</li>
+              <li>{{ $t('general_info_item_5') }}</li>
             </ul>
           </v-card>
         </v-col>
         <v-col cols="12" md="6">
           <v-card class="pa-4 h-100">
-            <h3 class="text-h6 mb-4">Équipements</h3>
+            <h3 class="text-h6 mb-4">{{ $t('equipment_heading') }}</h3>
             <ul class="feature-list">
-              <li>3 chambres (capacité 6 personnes)</li>
-              <li>1 salle de bain avec douche</li>
-              <li>2 WC</li>
-              <li>Salon / cuisine équipée</li>
-              <li>Terrasse en bois fermée de 30m²</li>
-              <li>Électroménager complet (lave-linge, lave-vaisselle, etc.)</li>
+              <li>{{ $t('equipment_item_1') }}</li>
+              <li>{{ $t('equipment_item_2') }}</li>
+              <li>{{ $t('equipment_item_3') }}</li>
+              <li>{{ $t('equipment_item_4') }}</li>
+              <li>{{ $t('equipment_item_5') }}</li>
+              <li>{{ $t('equipment_item_6') }}</li>
             </ul>
           </v-card>
         </v-col>
@@ -88,20 +81,35 @@
 
     <!-- Location Section -->
     <div class="location-container mt-8">
-      <h2>Situation</h2>
+      <h2>{{ $t('location_heading') }}</h2>
       <v-card class="pa-4">
         <ul class="feature-list">
-          <li>Accès à la mer à 3 km</li>
-          <li>Commerces du bourg à 1,5 km</li>
-          <li>Voie pédestre et cyclable à proximité</li>
-          <li>Cadre verdoyant et paisible</li>
+          <li>{{ $t('location_item_1') }}</li>
+          <li>{{ $t('location_item_2') }}</li>
+          <li>{{ $t('location_item_3') }}</li>
+          <li>{{ $t('location_item_4') }}</li>
+        </ul>
+      </v-card>
+    </div>
+
+    <!-- Conditions Section -->
+    <div class="conditions-container mt-8">
+      <h2>{{ $t('conditions_heading') }}</h2>
+      <v-card class="pa-4">
+        <ul class="feature-list">
+          <li>{{ $t('conditions_item_1') }}</li>
+          <li>{{ $t('conditions_item_2') }}</li>
+          <li>{{ $t('conditions_item_3') }}</li>
+          <li>{{ $t('conditions_item_4') }}</li>
+          <li>{{ $t('conditions_item_5') }}</li>
+          <li>{{ $t('conditions_item_6') }}</li>
         </ul>
       </v-card>
     </div>
 
     <!-- Contact Section -->
-    <div class="contact-container mt-8">
-      <h2>Contact</h2>
+    <div id="contact" class="contact-container mt-8">
+      <h2>{{ $t('contact_heading') }}</h2>
       <v-card class="pa-4">
         <Contact />
       </v-card>
@@ -118,7 +126,6 @@
             :src="selectedImageSrc"
             class="enlarged-image"
             :loading="loading"
-            cover
           >
             <template v-slot:placeholder>
               <div class="d-flex align-center justify-center" style="height: 300px;">
@@ -136,12 +143,11 @@
 import { useDisplay, useTheme } from 'vuetify'
 import type { Ref } from '@vue/reactivity'
 import { ref } from 'vue'
+import { useI18n } from 'vue-i18n'
 
 const i18n = useI18n()
 const theme = useTheme()
 
-// Variables de débogage
-const showDebug = ref(true)
 const loading = ref(true)
 const imageErrors = ref<string[]>([])
 const imagesLoaded = ref<string[]>([])
@@ -152,14 +158,12 @@ const selectedImageSrc = ref('')
 
 // List of thumbnail images
 const thumbnailImages = ref([
-  { src: '/images/photos/IMG_2216.min.JPG', alt: 'Vue principale' },
-  { src: '/images/photos/IMG_2217.min.JPG', alt: 'Vue extérieure' },
-  { src: '/images/photos/IMG_2219.min.JPG', alt: 'Intérieur' },
-  { src: '/images/photos/IMG_2220.min.JPG', alt: 'Intérieur' },
-  { src: '/images/photos/IMG_2222.min.JPG', alt: 'Intérieur' },
-  { src: '/images/photos/IMG_2223.min.JPG', alt: 'Intérieur' },
-  { src: '/images/photos/IMG_2224.min.JPG', alt: 'Intérieur' },
-  { src: '/images/photos/IMG_2225.min.JPG', alt: 'Intérieur' },
+  { src: '/images/photos/IMG_2219.min.JPG', alt: i18n.t('thumbnail_alt_interior') },
+  { src: '/images/photos/IMG_2220.min.JPG', alt: i18n.t('thumbnail_alt_interior') },
+  { src: '/images/photos/IMG_2222.min.JPG', alt: i18n.t('thumbnail_alt_interior') },
+  { src: '/images/photos/IMG_2223.min.JPG', alt: i18n.t('thumbnail_alt_interior') },
+  { src: '/images/photos/IMG_2224.min.JPG', alt: i18n.t('thumbnail_alt_interior') },
+  { src: '/images/photos/IMG_2225.min.JPG', alt: i18n.t('thumbnail_alt_interior') },
 ])
 
 // Function to select an image and show it in the modal
@@ -168,27 +172,6 @@ const selectImage = (src: string) => {
   selectedImageSrc.value = src
   showImageModal.value = true
 }
-
-// Fonctions de débogage
-const onImageLoad = (event: Event) => {
-  const target = event.target as HTMLImageElement
-  console.log('✅ Image chargée:', target.src)
-  imagesLoaded.value.push(target.src)
-  loading.value = false
-}
-
-const onImageError = (event: Event) => {
-  const target = event.target as HTMLImageElement
-  console.error('❌ Erreur image:', target.src)
-  imageErrors.value.push(target.src)
-  loading.value = false
-}
-
-// Masquer le debug après 10 secondes
-setTimeout(() => {
-  showDebug.value = false
-}, 10000)
-
 </script>
 
 <style scoped lang="scss">
@@ -250,8 +233,9 @@ h3 {
   width: auto;
 }
 
-.image-modal-dialog {
-  background: rgba(0, 0, 0, 0.2);
+:deep(.image-modal-dialog) {
+  background-color: rgba(0, 0, 0, 0.9);
+  padding: 6px;
 }
 
 .image-modal-card {

+ 22 - 24
pages/mentions-legales.vue

@@ -1,77 +1,75 @@
 <template>
   <PageMeta
-      title="La Sauvagerie - Mentions Légales"
-      description="Mentions légales de La Sauvagerie, location de vacances en Normandie"
+      :title="$t('legal_page_title')"
+      :description="$t('legal_page_description')"
   />
 
   <div class="legal-container">
-    <h1 class="text-h4 mb-6">Mentions Légales</h1>
+    <h1 class="text-h4 mb-6">{{ $t('legal_heading') }}</h1>
 
     <v-card class="mb-6" variant="outlined">
       <v-card-text>
-        <h2>Éditeur du site</h2>
+        <h2>{{ $t('legal_publisher_heading') }}</h2>
         <p class="text-body-1">
-          Le site La Sauvagerie est édité par [Nom du propriétaire ou de la société], domicilié à [Adresse complète].
-        </p>
-        <p class="text-body-1">
-          Téléphone : [Numéro de téléphone]<br>
-          Email : [Adresse email]
+          {{ $t('legal_publisher_text') }}
         </p>
       </v-card-text>
     </v-card>
 
     <v-card class="mb-6" variant="outlined">
       <v-card-text>
-        <h2>Hébergement</h2>
+        <h2>{{ $t('legal_hosting_heading') }}</h2>
         <p class="text-body-1">
-          Ce site est hébergé par [Nom de l'hébergeur], [Forme juridique], [Capital social], dont le siège social est situé [Adresse de l'hébergeur].
-        </p>
-        <p class="text-body-1">
-          Téléphone : [Numéro de téléphone de l'hébergeur]<br>
-          Email : [Email de l'hébergeur]
+          {{ $t('legal_hosting_text') }}
         </p>
       </v-card-text>
     </v-card>
 
     <v-card class="mb-6" variant="outlined">
       <v-card-text>
-        <h2>Propriété intellectuelle</h2>
+        <h2>{{ $t('legal_intellectual_property_heading') }}</h2>
         <p class="text-body-1">
-          L'ensemble de ce site relève de la législation française et internationale sur le droit d'auteur et la propriété intellectuelle. Tous les droits de reproduction sont réservés, y compris pour les documents téléchargeables et les représentations iconographiques et photographiques.
+          {{ $t('legal_intellectual_property_text1') }}
         </p>
         <p class="text-body-1">
-          La reproduction de tout ou partie de ce site sur un support électronique quel qu'il soit est formellement interdite sauf autorisation expresse du directeur de la publication.
+          {{ $t('legal_intellectual_property_text2') }}
         </p>
       </v-card-text>
     </v-card>
 
     <v-card class="mb-6" variant="outlined">
       <v-card-text>
-        <h2>Protection des données personnelles</h2>
+        <h2>{{ $t('legal_data_protection_heading') }}</h2>
         <p class="text-body-1">
-          Conformément à la loi « Informatique et Libertés » du 6 janvier 1978 modifiée, vous disposez d'un droit d'accès, de modification, de rectification et de suppression des données vous concernant. Pour exercer ce droit, veuillez nous contacter par email à l'adresse indiquée ci-dessus.
+          {{ $t('legal_data_protection_text1') }}
         </p>
         <p class="text-body-1">
-          Les informations recueillies sur ce site sont destinées exclusivement à [Nom du propriétaire ou de la société] et ne seront en aucun cas transmises à des tiers.
+          {{ $t('legal_data_protection_text2') }}
         </p>
       </v-card-text>
     </v-card>
 
     <v-card variant="outlined">
       <v-card-text>
-        <h2>Cookies</h2>
+        <h2>{{ $t('legal_cookies_heading') }}</h2>
         <p class="text-body-1">
-          Ce site utilise des cookies pour améliorer l'expérience utilisateur. En naviguant sur ce site, vous acceptez l'utilisation de cookies conformément à notre politique de confidentialité.
+          {{ $t('legal_cookies_text') }}
         </p>
       </v-card-text>
     </v-card>
+
+    <div class="d-flex justify-center py-4">
+      <v-btn to="/">{{ $t('home') }}</v-btn>
+    </div>
   </div>
 </template>
 
 <script setup lang="ts">
 import { useTheme } from 'vuetify'
+import { useI18n } from 'vue-i18n'
 
 const theme = useTheme()
+const { t } = useI18n()
 </script>
 
 <style scoped lang="scss">
@@ -92,4 +90,4 @@ h2 {
   font-weight: 600;
   margin-bottom: 1rem;
 }
-</style>
+</style>