diff --git a/attached_assets/image_1768214683798.png b/attached_assets/image_1768214683798.png new file mode 100644 index 0000000..4b9af38 Binary files /dev/null and b/attached_assets/image_1768214683798.png differ diff --git a/client/src/components/video-card.tsx b/client/src/components/video-card.tsx index 497680b..42aa0e7 100644 --- a/client/src/components/video-card.tsx +++ b/client/src/components/video-card.tsx @@ -446,7 +446,7 @@ export default function VideoCard({ video, onClick, className = "", hideOverlay }} className="ml-1 text-blue-400 hover:text-blue-300 text-sm transition-colors duration-200 flex-shrink-0" > - preberi več + mehr anzeigen )} @@ -459,7 +459,7 @@ export default function VideoCard({ video, onClick, className = "", hideOverlay }} className="mt-2 text-blue-400 hover:text-blue-300 text-sm transition-colors duration-200" > - pokaži manj + weniger anzeigen )} diff --git a/client/src/components/video-edit-modal.tsx b/client/src/components/video-edit-modal.tsx index 65afbf7..b2f6887 100644 --- a/client/src/components/video-edit-modal.tsx +++ b/client/src/components/video-edit-modal.tsx @@ -38,16 +38,16 @@ export default function VideoEditModal({ video, isOpen, onClose }: VideoEditModa }, onSuccess: () => { toast({ - title: "Thumbnail uspešno shranjen!", - description: "Spremembe so shranjene lokalno" + title: "Thumbnail erfolgreich gespeichert!", + description: "Änderungen wurden lokal gespeichert" }); queryClient.invalidateQueries({ queryKey: ["/api/videos"] }); onClose(); }, onError: () => { toast({ - title: "Napaka pri shranjevanju", - description: "Poskusite znova", + title: "Fehler beim Speichern", + description: "Bitte erneut versuchen", variant: "destructive" }); } @@ -67,7 +67,7 @@ export default function VideoEditModal({ video, isOpen, onClose }: VideoEditModa setThumbnailPreview(thumbnailDataUrl); setCustomThumbnail(null); // Clear file input since we're using generated thumbnail setShowThumbnailGenerator(false); - toast({ title: "Thumbnail ustvarjen iz videoposnetka!" }); + toast({ title: "Thumbnail aus Video erstellt!" }); }; const handleSave = () => { diff --git a/client/src/components/video-modal.tsx b/client/src/components/video-modal.tsx index ae95c46..c0d98d9 100644 --- a/client/src/components/video-modal.tsx +++ b/client/src/components/video-modal.tsx @@ -174,8 +174,8 @@ export default function VideoModal({ video, isOpen, onClose, enableAds = true }: // Quality level monitoring with detailed stats hls.on(Hls.Events.LEVEL_SWITCHED, (event, data) => { const level = hls.levels[data.level]; - console.log(`PREKLOPIL KAKOVOST: ${level.height}p @ ${Math.round(level.bitrate/1000)}kbps`); - console.log('Razlog preklopa: adaptivni algoritem na podlagi omrežne hitrosti'); + console.log(`Quality switched: ${level.height}p @ ${Math.round(level.bitrate/1000)}kbps`); + console.log('Switch reason: adaptive algorithm based on network speed'); }); // Fragment loading stats - fixed error handling @@ -185,7 +185,7 @@ export default function VideoModal({ video, isOpen, onClose, enableAds = true }: const stats = data.frag.stats; const loadTime = stats.loading.end - stats.loading.start; const speed = (stats.total * 8) / loadTime; // bits per ms = kbps - console.log(`Fragment naložen v ${loadTime}ms, hitrost: ${Math.round(speed)} kbps`); + console.log(`Fragment loaded in ${loadTime}ms, speed: ${Math.round(speed)} kbps`); } } catch (error) { // Ignore stats errors, they don't affect playback @@ -198,31 +198,31 @@ export default function VideoModal({ video, isOpen, onClose, enableAds = true }: if (buffered.length > 0) { const bufferLevel = buffered.end(buffered.length - 1) - videoElement.currentTime; if (bufferLevel < 2) { - console.log('Nizek buffer zaznan, lahko zmanjšam kakovost'); + console.log('Low buffer detected, may reduce quality'); } } }); // Network error handling with retries hls.on(Hls.Events.ERROR, (event, data) => { - console.error('HLS napaka:', data); + console.error('HLS error:', data); if (data.fatal) { switch (data.type) { case Hls.ErrorTypes.NETWORK_ERROR: - console.log('Omrežna napaka, poskušam obnoviti...'); + console.log('Network error, attempting recovery...'); // Try to downgrade quality first if (hls.currentLevel > 0) { hls.currentLevel = hls.currentLevel - 1; - console.log('Zmanjšujem kakovost zaradi omrežnih težav'); + console.log('Reducing quality due to network issues'); } hls.startLoad(); break; case Hls.ErrorTypes.MEDIA_ERROR: - console.log('Medijska napaka, poskušam obnoviti...'); + console.log('Media error, attempting recovery...'); hls.recoverMediaError(); break; default: - console.log('Kritična napaka, uničujem HLS instanco...'); + console.log('Critical error, destroying HLS instance...'); hls.destroy(); break; } diff --git a/client/src/pages/LivePage.tsx b/client/src/pages/LivePage.tsx index b4a3b48..ed11ac5 100644 --- a/client/src/pages/LivePage.tsx +++ b/client/src/pages/LivePage.tsx @@ -142,7 +142,7 @@ export default function LivePage() { console.log('✅ Auto-play started successfully'); }).catch((e) => { console.log('⚠️ Auto-play blocked, user interaction required:', e); - setError('Kliknite play za zagon streama'); + setError('Klicken Sie auf Play, um den Stream zu starten'); }); }); @@ -168,17 +168,17 @@ export default function LivePage() { switch (data.type) { case window.Hls.ErrorTypes.NETWORK_ERROR: console.log('🔄 Network error, attempting recovery...'); - setError('Napaka pri povezavi s streamom - poskušam znova...'); + setError('Verbindungsfehler - Erneuter Versuch...'); hls.startLoad(); break; case window.Hls.ErrorTypes.MEDIA_ERROR: console.log('🔄 Media error, attempting recovery...'); - setError('Napaka pri predvajanju - poskušam znova...'); + setError('Wiedergabefehler - Erneuter Versuch...'); hls.recoverMediaError(); break; default: console.error('💥 Fatal error, cannot recover:', data); - setError(`Napaka pri streamingu: ${data.details}`); + setError(`Streaming-Fehler: ${data.details}`); break; } } @@ -198,12 +198,12 @@ export default function LivePage() { video.addEventListener('error', (e) => { console.error('❌ Native video error:', e); - setError('Napaka pri nalaganju streama'); + setError('Fehler beim Laden des Streams'); }); } else { console.error('❌ HLS not supported in this browser'); - setError('HLS ni podprt v tem brskalniku'); + setError('HLS wird in diesem Browser nicht unterstützt'); setIsLoading(false); } @@ -237,12 +237,12 @@ export default function LivePage() { video.addEventListener('error', (e) => { console.error('❌ Video element error:', e); - setError('Napaka video elementa'); + setError('Video-Element-Fehler'); }); } catch (error) { console.error('💥 Failed to initialize live stream player:', error); - setError('Napaka pri inicializaciji playerja'); + setError('Fehler bei der Player-Initialisierung'); setIsLoading(false); } }; @@ -254,7 +254,7 @@ export default function LivePage() { } else { videoRef.current.play().catch((e) => { console.log('Play failed:', e); - setError('Napaka pri predvajanju'); + setError('Wiedergabefehler'); }); } } @@ -440,7 +440,7 @@ export default function LivePage() { className="mt-4 bg-red-600 hover:bg-red-700" data-testid="button-retry" > - Poskusite znova + Erneut versuchen diff --git a/client/src/pages/admin.tsx b/client/src/pages/admin.tsx index 5f9a5c7..d15bc6b 100644 --- a/client/src/pages/admin.tsx +++ b/client/src/pages/admin.tsx @@ -353,14 +353,14 @@ function EditVideoDialog({ } toast({ - title: "Uspeh!", - description: `AI opis je bil ustvarjen in shranjen (${data.characterCount || data.description.length}/500 znakov)`, + title: "Erfolg!", + description: `KI-Beschreibung wurde erstellt und gespeichert (${data.characterCount || data.description.length}/500 Zeichen)`, }); } else { console.error("No description in response:", data); toast({ - title: "Napaka", - description: "AI ni vrnil opisa", + title: "Fehler", + description: "KI hat keine Beschreibung zurückgegeben", variant: "destructive", }); } diff --git a/server/aiService.ts b/server/aiService.ts index b429f1d..fae5fc9 100644 --- a/server/aiService.ts +++ b/server/aiService.ts @@ -133,7 +133,7 @@ Schreibe nur die Beschreibung, keine zusätzlichen Erklärungen.${avoidRepetitio } catch (error: any) { console.error("Error generating video description:", error); console.error("Error details:", error?.message || error); // More detailed error logging - throw new Error("Napaka pri generiranju opisa s strani AI"); + throw new Error("Fehler bei der KI-Beschreibungsgenerierung"); } } diff --git a/server/index.ts b/server/index.ts index 3c35319..b5385c3 100644 --- a/server/index.ts +++ b/server/index.ts @@ -195,7 +195,7 @@ app.use((req, res, next) => { - +