designtopack/src/components/project/cards/VirtualSample.vue
isUnknown 82eb8d88cc Implémentation complète du multilingue FR/EN
- Installation vue-i18n v11 et création des fichiers de traduction (fr.json, en.json)
- Création store locale avec détection hiérarchique (URL > localStorage > navigator)
- Modification des routes avec préfixe /:locale? optionnel
- Toggle FR/EN dans Menu.vue avec synchronisation immédiate
- Traduction de ~200 textes dans 27 composants Vue
- Suppression des labels hardcodés en français côté backend
- Ajout route Kirby catch-all en/(:all?) pour /en/ URLs
- Helper addLocalePrefix() pour préserver locale dans liens dialogs
- Traduction pseudo-élément CSS via data attribute

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 18:31:37 +01:00

44 lines
1.2 KiB
Vue

<template>
<Images
v-if="step.files.dynamic || step.files.static"
:step="step"
:images="images"
:uri="uri"
/>
</template>
<script setup>
import Images from './Images.vue';
import { computed } from 'vue';
import { storeToRefs } from 'pinia';
import { useVirtualSampleStore } from '../../../stores/virtualSample';
import { addLocalePrefix } from '../../../utils/router';
const { step } = defineProps({ step: Object });
const { allVariations } = storeToRefs(useVirtualSampleStore());
const images = computed(() => {
if (!step.files.dynamic) {
return [
{
url: step.files.static.rawGlass.cover,
},
];
}
return allVariations.value.map((variation) => getFrontView(variation)) ?? [];
});
const uri = addLocalePrefix(step.uri);
function getFrontView(variation) {
if (variation.files.length === 1) return variation.files[0];
const xMax = parseInt(
variation.files[variation.files.length - 1].name.split('_')[1].split('.')[0]
);
const xFrontView = (xMax + 1) / 2;
const extension = variation.files[0].name.split('.')[1];
const frontViewName = '0_' + xFrontView + '.' + extension;
const frontView = variation.files.find((file) => file.name === frontViewName);
return frontView;
}
</script>