- 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>
44 lines
1.2 KiB
Vue
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>
|