diff --git a/src/components/ui/ResourceViewer.tsx b/src/components/ui/ResourceViewer.tsx index 0a8d76d..ea6c85a 100644 --- a/src/components/ui/ResourceViewer.tsx +++ b/src/components/ui/ResourceViewer.tsx @@ -2,7 +2,9 @@ import dynamic from 'next/dynamic' import Image from 'next/image' -import type { ResourceDTO } from '@/lib/api/types' +import { RESOURCE_ORIGIN_GENERATED, type ResourceDTO } from '@/lib/api/types' +import { ui } from '@/lib/i18n' +import { useVisitor } from '@/context/VisitorContext' // Même stratégie que PdfSection : react-pdf a besoin de `window`. const PdfViewer = dynamic(() => import('@/components/sections/pdf/PdfViewer'), { ssr: false }) @@ -44,6 +46,8 @@ interface Props { * Parent must have: position relative, explicit width & height (or fill via flex). */ export default function ResourceViewer({ resource, alt = '', objectFit = 'contain' }: Props) { + // La mention IA suit la langue de visite, comme le reste des libellés d'interface. + const { language } = useVisitor() const { url, type } = resource if (!url) return null @@ -98,12 +102,32 @@ export default function ResourceViewer({ resource, alt = '', objectFit = 'contai // Image, ImageUrl, or unknown → render as image (safe default) return ( - {alt} + <> + {alt} + {resource.origin === RESOURCE_ORIGIN_GENERATED && ( + + {ui('aiGeneratedImage', language)} + + )} + ) } diff --git a/src/lib/api/types.ts b/src/lib/api/types.ts index 9ac05a0..0d6c68b 100644 --- a/src/lib/api/types.ts +++ b/src/lib/api/types.ts @@ -7,8 +7,13 @@ export interface ResourceDTO { id?: string url?: string type?: string + /** ResourceOrigin cote backend : 0 televersee, 1 generee par le Studio, 2 derivee. */ + origin?: number } +/** Une image generee porte la mention IA ; une image televersee, jamais. */ +export const RESOURCE_ORIGIN_GENERATED = 1 + export interface ContentDTO { order: number title?: TranslationDTO[] diff --git a/src/lib/i18n.ts b/src/lib/i18n.ts index bdc4b4a..4208a32 100644 --- a/src/lib/i18n.ts +++ b/src/lib/i18n.ts @@ -11,6 +11,19 @@ export function t(translations: AnyTranslation[] | undefined, lang: string): str } const UI_STRINGS: Record> = { + aiGeneratedImage: { + FR: 'Image générée par IA', + NL: 'Beeld gegenereerd door AI', + EN: 'AI-generated image', + DE: 'KI-generiertes Bild', + ES: 'Imagen generada por IA', + IT: 'Immagine generata dall’IA', + PL: 'Obraz wygenerowany przez SI', + CN: '人工智能生成的图像', + AR: 'صورة من إنتاج الذكاء الاصطناعي', + UK: 'Зображення, створене ШІ', + LB: 'Bild generéiert vun der KI', + }, noEventsThisMonth: { FR: 'Aucun événement ce mois-ci', NL: 'Geen evenementen deze maand',