Update interface text to be displayed in German
Translate Slovenian text to German across various components, pages, and API error messages, including video cards, modals, live page error handling, and AI service responses. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 401e2ec0-e00d-4f10-9d0e-60f3d479f9a5 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 1f3f88aa-7796-4167-865f-faff8fe770e1 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/60d372ff-2c10-46c7-b01b-10c3435136b0/401e2ec0-e00d-4f10-9d0e-60f3d479f9a5/g0TFDck
This commit is contained in:
parent
b1eeb2b9fb
commit
bd01ca5e3c
BIN
attached_assets/image_1768214683798.png
Normal file
BIN
attached_assets/image_1768214683798.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 192 KiB |
@ -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"
|
className="ml-1 text-blue-400 hover:text-blue-300 text-sm transition-colors duration-200 flex-shrink-0"
|
||||||
>
|
>
|
||||||
preberi več
|
mehr anzeigen
|
||||||
</button>
|
</button>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
@ -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"
|
className="mt-2 text-blue-400 hover:text-blue-300 text-sm transition-colors duration-200"
|
||||||
>
|
>
|
||||||
pokaži manj
|
weniger anzeigen
|
||||||
</button>
|
</button>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -38,16 +38,16 @@ export default function VideoEditModal({ video, isOpen, onClose }: VideoEditModa
|
|||||||
},
|
},
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
toast({
|
toast({
|
||||||
title: "Thumbnail uspešno shranjen!",
|
title: "Thumbnail erfolgreich gespeichert!",
|
||||||
description: "Spremembe so shranjene lokalno"
|
description: "Änderungen wurden lokal gespeichert"
|
||||||
});
|
});
|
||||||
queryClient.invalidateQueries({ queryKey: ["/api/videos"] });
|
queryClient.invalidateQueries({ queryKey: ["/api/videos"] });
|
||||||
onClose();
|
onClose();
|
||||||
},
|
},
|
||||||
onError: () => {
|
onError: () => {
|
||||||
toast({
|
toast({
|
||||||
title: "Napaka pri shranjevanju",
|
title: "Fehler beim Speichern",
|
||||||
description: "Poskusite znova",
|
description: "Bitte erneut versuchen",
|
||||||
variant: "destructive"
|
variant: "destructive"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -67,7 +67,7 @@ export default function VideoEditModal({ video, isOpen, onClose }: VideoEditModa
|
|||||||
setThumbnailPreview(thumbnailDataUrl);
|
setThumbnailPreview(thumbnailDataUrl);
|
||||||
setCustomThumbnail(null); // Clear file input since we're using generated thumbnail
|
setCustomThumbnail(null); // Clear file input since we're using generated thumbnail
|
||||||
setShowThumbnailGenerator(false);
|
setShowThumbnailGenerator(false);
|
||||||
toast({ title: "Thumbnail ustvarjen iz videoposnetka!" });
|
toast({ title: "Thumbnail aus Video erstellt!" });
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleSave = () => {
|
const handleSave = () => {
|
||||||
|
|||||||
@ -174,8 +174,8 @@ export default function VideoModal({ video, isOpen, onClose, enableAds = true }:
|
|||||||
// Quality level monitoring with detailed stats
|
// Quality level monitoring with detailed stats
|
||||||
hls.on(Hls.Events.LEVEL_SWITCHED, (event, data) => {
|
hls.on(Hls.Events.LEVEL_SWITCHED, (event, data) => {
|
||||||
const level = hls.levels[data.level];
|
const level = hls.levels[data.level];
|
||||||
console.log(`PREKLOPIL KAKOVOST: ${level.height}p @ ${Math.round(level.bitrate/1000)}kbps`);
|
console.log(`Quality switched: ${level.height}p @ ${Math.round(level.bitrate/1000)}kbps`);
|
||||||
console.log('Razlog preklopa: adaptivni algoritem na podlagi omrežne hitrosti');
|
console.log('Switch reason: adaptive algorithm based on network speed');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Fragment loading stats - fixed error handling
|
// 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 stats = data.frag.stats;
|
||||||
const loadTime = stats.loading.end - stats.loading.start;
|
const loadTime = stats.loading.end - stats.loading.start;
|
||||||
const speed = (stats.total * 8) / loadTime; // bits per ms = kbps
|
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) {
|
} catch (error) {
|
||||||
// Ignore stats errors, they don't affect playback
|
// 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) {
|
if (buffered.length > 0) {
|
||||||
const bufferLevel = buffered.end(buffered.length - 1) - videoElement.currentTime;
|
const bufferLevel = buffered.end(buffered.length - 1) - videoElement.currentTime;
|
||||||
if (bufferLevel < 2) {
|
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
|
// Network error handling with retries
|
||||||
hls.on(Hls.Events.ERROR, (event, data) => {
|
hls.on(Hls.Events.ERROR, (event, data) => {
|
||||||
console.error('HLS napaka:', data);
|
console.error('HLS error:', data);
|
||||||
if (data.fatal) {
|
if (data.fatal) {
|
||||||
switch (data.type) {
|
switch (data.type) {
|
||||||
case Hls.ErrorTypes.NETWORK_ERROR:
|
case Hls.ErrorTypes.NETWORK_ERROR:
|
||||||
console.log('Omrežna napaka, poskušam obnoviti...');
|
console.log('Network error, attempting recovery...');
|
||||||
// Try to downgrade quality first
|
// Try to downgrade quality first
|
||||||
if (hls.currentLevel > 0) {
|
if (hls.currentLevel > 0) {
|
||||||
hls.currentLevel = hls.currentLevel - 1;
|
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();
|
hls.startLoad();
|
||||||
break;
|
break;
|
||||||
case Hls.ErrorTypes.MEDIA_ERROR:
|
case Hls.ErrorTypes.MEDIA_ERROR:
|
||||||
console.log('Medijska napaka, poskušam obnoviti...');
|
console.log('Media error, attempting recovery...');
|
||||||
hls.recoverMediaError();
|
hls.recoverMediaError();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
console.log('Kritična napaka, uničujem HLS instanco...');
|
console.log('Critical error, destroying HLS instance...');
|
||||||
hls.destroy();
|
hls.destroy();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -142,7 +142,7 @@ export default function LivePage() {
|
|||||||
console.log('✅ Auto-play started successfully');
|
console.log('✅ Auto-play started successfully');
|
||||||
}).catch((e) => {
|
}).catch((e) => {
|
||||||
console.log('⚠️ Auto-play blocked, user interaction required:', 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) {
|
switch (data.type) {
|
||||||
case window.Hls.ErrorTypes.NETWORK_ERROR:
|
case window.Hls.ErrorTypes.NETWORK_ERROR:
|
||||||
console.log('🔄 Network error, attempting recovery...');
|
console.log('🔄 Network error, attempting recovery...');
|
||||||
setError('Napaka pri povezavi s streamom - poskušam znova...');
|
setError('Verbindungsfehler - Erneuter Versuch...');
|
||||||
hls.startLoad();
|
hls.startLoad();
|
||||||
break;
|
break;
|
||||||
case window.Hls.ErrorTypes.MEDIA_ERROR:
|
case window.Hls.ErrorTypes.MEDIA_ERROR:
|
||||||
console.log('🔄 Media error, attempting recovery...');
|
console.log('🔄 Media error, attempting recovery...');
|
||||||
setError('Napaka pri predvajanju - poskušam znova...');
|
setError('Wiedergabefehler - Erneuter Versuch...');
|
||||||
hls.recoverMediaError();
|
hls.recoverMediaError();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
console.error('💥 Fatal error, cannot recover:', data);
|
console.error('💥 Fatal error, cannot recover:', data);
|
||||||
setError(`Napaka pri streamingu: ${data.details}`);
|
setError(`Streaming-Fehler: ${data.details}`);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -198,12 +198,12 @@ export default function LivePage() {
|
|||||||
|
|
||||||
video.addEventListener('error', (e) => {
|
video.addEventListener('error', (e) => {
|
||||||
console.error('❌ Native video error:', e);
|
console.error('❌ Native video error:', e);
|
||||||
setError('Napaka pri nalaganju streama');
|
setError('Fehler beim Laden des Streams');
|
||||||
});
|
});
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
console.error('❌ HLS not supported in this browser');
|
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);
|
setIsLoading(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,12 +237,12 @@ export default function LivePage() {
|
|||||||
|
|
||||||
video.addEventListener('error', (e) => {
|
video.addEventListener('error', (e) => {
|
||||||
console.error('❌ Video element error:', e);
|
console.error('❌ Video element error:', e);
|
||||||
setError('Napaka video elementa');
|
setError('Video-Element-Fehler');
|
||||||
});
|
});
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('💥 Failed to initialize live stream player:', error);
|
console.error('💥 Failed to initialize live stream player:', error);
|
||||||
setError('Napaka pri inicializaciji playerja');
|
setError('Fehler bei der Player-Initialisierung');
|
||||||
setIsLoading(false);
|
setIsLoading(false);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -254,7 +254,7 @@ export default function LivePage() {
|
|||||||
} else {
|
} else {
|
||||||
videoRef.current.play().catch((e) => {
|
videoRef.current.play().catch((e) => {
|
||||||
console.log('Play failed:', 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"
|
className="mt-4 bg-red-600 hover:bg-red-700"
|
||||||
data-testid="button-retry"
|
data-testid="button-retry"
|
||||||
>
|
>
|
||||||
Poskusite znova
|
Erneut versuchen
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -353,14 +353,14 @@ function EditVideoDialog({
|
|||||||
}
|
}
|
||||||
|
|
||||||
toast({
|
toast({
|
||||||
title: "Uspeh!",
|
title: "Erfolg!",
|
||||||
description: `AI opis je bil ustvarjen in shranjen (${data.characterCount || data.description.length}/500 znakov)`,
|
description: `KI-Beschreibung wurde erstellt und gespeichert (${data.characterCount || data.description.length}/500 Zeichen)`,
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
console.error("No description in response:", data);
|
console.error("No description in response:", data);
|
||||||
toast({
|
toast({
|
||||||
title: "Napaka",
|
title: "Fehler",
|
||||||
description: "AI ni vrnil opisa",
|
description: "KI hat keine Beschreibung zurückgegeben",
|
||||||
variant: "destructive",
|
variant: "destructive",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -133,7 +133,7 @@ Schreibe nur die Beschreibung, keine zusätzlichen Erklärungen.${avoidRepetitio
|
|||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
console.error("Error generating video description:", error);
|
console.error("Error generating video description:", error);
|
||||||
console.error("Error details:", error?.message || error); // More detailed error logging
|
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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -195,7 +195,7 @@ app.use((req, res, next) => {
|
|||||||
<meta name="twitter:player:height" content="630">
|
<meta name="twitter:player:height" content="630">
|
||||||
<meta name="twitter:creator" content="@go4video">
|
<meta name="twitter:creator" content="@go4video">
|
||||||
|
|
||||||
<!-- Strukturirani podatki za Google -->
|
<!-- Structured data for Google -->
|
||||||
<script type="application/ld+json">
|
<script type="application/ld+json">
|
||||||
{
|
{
|
||||||
"@context": "https://schema.org",
|
"@context": "https://schema.org",
|
||||||
@ -223,12 +223,12 @@ app.use((req, res, next) => {
|
|||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error rendering video page for social bot:', error);
|
console.error('Error rendering video page for social bot:', error);
|
||||||
// Če se zgodi napaka, nadaljujemo z običajno SPA
|
// If an error occurs, continue with normal SPA
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Za običajne uporabnike nadaljujemo z SPA
|
// For regular users, continue with SPA
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -1483,8 +1483,8 @@ export async function registerRoutes(app: Express): Promise<Server> {
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h1>Preusmerjanje...</h1>
|
<h1>Weiterleitung...</h1>
|
||||||
<p>Če se ne preusmeri avtomatično, <a href="${videoUrl}">kliknite tukaj</a>.</p>
|
<p>Falls keine automatische Weiterleitung erfolgt, <a href="${videoUrl}">hier klicken</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
<script>window.location.href = "${videoUrl}";</script>
|
<script>window.location.href = "${videoUrl}";</script>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user