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) => {
-
+