- DateTime & Project : locale dayjs dynamique selon la langue active
- Images : bouton "Ajouter une ou plusieurs images" via t()
- ImagesEditPanel : placeholder, legend tags et bouton ajout via t()
- DynamicView : clé PHP "Autres pistes" traduite via t()
- Nouvelles clés : forms.selectTags, buttons.addSelectedImages, virtualSample.otherTracks
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Projets utilisant default.txt au lieu de project.txt retournent
des Field objects au lieu de tableaux pour steps et notifications.
Ajout de Array.isArray() pour éviter que ces projets cassent
l'ensemble des notifications, avec console.error pour les identifier.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 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>
- Brief.vue masque les boutons d'ajout pour extended-brief
- Éditable uniquement en back-office pour cette étape
- ClientBrief → Brief dans ProjectStep.vue
Ref #3
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Blueprint : ajout champs moodboard et description
- Kanban : utilise ClientBrief au lieu de SimpleDocument
- Validation : support extended-brief depuis PDF et page images
- Navigation : paths dynamiques basés sur step.slug
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Virtual sample variations now display correctly when loading from URL hash.
Old URLs with underscores are normalized to hyphens on load. URL hash
updates automatically when navigating between variations.
Refactored both DynamicView and Selector components with explicit function
names, removed unnecessary comments, and improved code organization.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Problème : L'URL avec hash (#serumwc_lasertone_empty) n'ouvrait pas la bonne
piste/variation mais toujours la première.
Cause : Incohérence entre les underscores du hash et les tirets du slug backend.
slugify convertit les underscores en tirets, mais les slugs Kirby peuvent
varier.
Solution : Comparer le hash de 3 façons :
1. Comparaison directe
2. Hash avec underscores → tirets
3. Slug avec tirets → underscores
Cela gère tous les cas de figure.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Problème : Dans le kanban, la carte du brief client custom (Images) affichait
aussi le nombre de commentaires du PDF, alors qu'il n'y a pas de système de
commentaires pour les images du brief custom.
Solution : Filtrer pour ne compter que les commentaires des fichiers de type
'image', et non tous les fichiers du step.
Bonus : Suppression du paramètre obsolète ?step=images dans ClientBrief.vue
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Ces composants faisaient partie de l'ancien système de steps du Brief
qui a été supprimé. Ils ne sont plus utilisés.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>