// German translations
window.LANG_DE = {
  // Common
  common: {
    save: "Speichern",
    cancel: "Abbrechen",
    confirm: "Bestätigen",
    loading: "Laden...",
    success: "Erfolgreich",
    failed: "Fehlgeschlagen",
    delete: "Löschen",
    edit: "Bearbeiten",
    add: "Hinzufügen",
    enable: "Aktivieren",
    disable: "Deaktivieren",
    enabled: "Aktiviert",
    disabled: "Deaktiviert",
    yes: "Ja",
    no: "Nein",
    on: "Ein",
    off: "Aus",
    apply: "Anwenden",
    reset: "Zurücksetzen",
    refresh: "Aktualisieren",
    close: "Schließen",
    back: "Zurück",
    next: "Weiter",
    previous: "Zurück",
    submit: "Absenden",
    action: "Aktion",
    chinese: "中文",
    traditionalChinese: "繁體中文",
    english: "English",
    spanish: "Español",
    japanese: "日本語",
    korean: "한국어",
    german: "Deutsch",
    french: "Français",
    portuguese: "Português",
    russian: "Русский",
    italian: "Italiano",
    turkish: "Türkçe",
    continue: "Fortfahren",
    copy: "Kopieren",
    copied: "Kopiert"
  },

  preview: {
    flvRequired: "Bitte aktivieren Sie den FLV-Stream.",
    flvOrHlsRequired: "Bitte aktivieren Sie mindestens einen Live-Stream: FLV oder HLS.",
    hlsUnsupportedEnableFlv: "Die HLS-Vorschau wird in diesem Browser nicht unterstützt. Bitte aktivieren Sie FLV."
  },

  // Page titles
  title: {
    encoder: "H.265/H.264 Encoder",
    status: "Status",
    mainStream: "Hauptstream",
    subStream1: "Substream 1",
    subStream2: "Substream 2",
    subStream3: "Substream 3",
    videoSettings: "Videoeinstellungen",
    audioSettings: "Audioeinstellungen",
    advancedSettings: "Erweiterte Einstellungen",
    osdMain: "OSD - Hauptstream",
    osdSub1: "OSD - Substream 1",
    osdSub2: "OSD - Substream 2",
    osdSub3: "OSD - Substream 3",
    logoUpload: "Logo-Upload",
    network: "Netzwerkeinstellungen",
    record: "Aufnahmeeinstellungen",
    gb28181: "GB28181",
    wifi: "WLAN-Einstellungen",
    g4: "4G/5G-Einstellungen",
    password: "Passworteinstellungen",
    serial: "Serielle Übertragung",
    update: "Upgrade und Backup",
    reboot: "Gerät neustarten",
    timedReboot: "Geplanter Neustart",
    factoryReset: "Werkseinstellungen",
    recordFiles: "Aufnahmedateien",
    netTest: "Netzwerktest",
    recordSet: "Aufnahmeeinstellungen"
  },

  // Menu
  menu: {
    status: "Status",
    port: "Port {0}",
    allPorts: "Alle Ports",
    encoder: "Encoder",
    mainStream: "Hauptstream",
    subStream1: "Substream 1",
    subStream2: "Substream 2",
    subStream3: "Substream 3",
    videoSettings: "Videoeinstellungen",
    audioSettings: "Audioeinstellungen",
    advancedSettings: "Erweiterte Einstellungen",
    osd: "OSD",
    logoUpload: "Logo-Upload",
    system: "System",
    network: "Netzwerk",
    record: "Aufnahme",
    gb28181: "GB28181",
    wifi: "WLAN",
    g4: "4G/5G",
    password: "Passwort",
    serial: "Serielle Übertragung",
    update: "Upgrade und Backup",
    reboot: "Neustart",
    timedReboot: "Geplanter Neustart",
    factoryReset: "Werkseinstellungen"
  },

  // Status page
  status: {
    // Device status
    deviceStatus: "Gerätestatus",
    runningTime: "Laufzeit: ",
    runtimeDayWithTime: "{0}T {1}",
    deviceTime: "Gerätezeit: ",
    syncTime: " (Zeit mit Gerät synchronisieren)",
    cpuUsage: "CPU-Auslastung: ",
    cpuTemp: "CPU-Temperatur: ",
    memoryUsage: "Speicherauslastung: ",
    memoryWarning: " (Bei hoher Speicherauslastung nach 1 Minute Betrieb bitte einige HLS-Streams deaktivieren oder Bitrate reduzieren)",
    cpuWarning: " (Bei CPU-Auslastung über 85% bitte einige Streams deaktivieren oder Substream-Auflösung reduzieren)",
    networkStatus: "Netzwerkstatus: ",
    inputVideo: "Eingangsvideo: ",
    vgaAutoAdjust: " (VGA Auto-Anpassung)",
    capturedFrames: "Erfasste Videobilder: ",
    lostFrames: "Verlorene Videobilder: ",
    audioSampleRate: "Audio-Abtastrate Eingang: ",
    capturedAudioFrames: "Erfasste Audiobilder: ",
    packetsSent: "Gesendete Pakete: ",
    netTestLink: " (Netzwerktest & Systemprotokoll)",
    packetsDropped: "Verworfene Pakete: ",
    canAccessInternet: "Internetzugang",
    canAccessInternetIP: "Internet-IP-Zugang",
    lanOnly: "Nur LAN",
    localNetwork: "Lokales Netzwerk",

    // Recording status
    recordStatus: "Aufnahmestatus",
    recordType: "Aufnahmetyp: ",
    diskStatus: "Festplattenstatus: ",
    diskNotExist: "Nicht gefunden",
    mountStatus: "Mount-Status: ",
    notMounted: "Nicht gemountet",
    mounted: "Gemountet",
    totalSpace: "Gesamtspeicher: ",
    freeSpace: "Freier Speicher: ",
    recordingStatus: "Aufnahmestatus: ",
    diskFull: "Festplatte voll",
    diskSlow: "Festplatte zu langsam",
    recordFileList: "Aufnahmedateiliste",
    notRecording: "Keine Aufnahme",
    recording: "Aufnahme läuft",
    recordingNoVideo: " (Dateien werden ohne Videoeingabe möglicherweise nicht gespeichert)",
    startRecord: "(Aufnahme starten)",
    stopRecord: "(Aufnahme stoppen)",
    usbTfCard: "USB/TF-Karte",

    // DHCP status
    dhcpStatus: "DHCP-Status",
    ip: "IP: ",
    subnetMask: "Subnetzmaske: ",
    gateway: "Gateway: ",

    // WIFI status
    wifiStatus: "WLAN-Status",
    wifiDisabled: "WLAN: Deaktiviert",
    wifiState: "WLAN-Status: ",
    wifiSSID: "WLAN-SSID: ",
    wifiIP: "WLAN-IP: ",
    wifiMAC: "WLAN-MAC: ",
    wifiRSSI: "WLAN-Signal (RSSI): ",
    wifiFreq: "WLAN-Frequenz: ",
    wifiConnected: "Verbunden",
    wifiDisconnected: "Getrennt",
    wifiConnecting: "Verbinden (Bei langer Verbindungszeit bitte WLAN-Einstellungen prüfen)",

    // 4G/5G status
    g4Status: "4G/5G-Status",
    g4Disabled: "4G/5G: Deaktiviert",
    status: "Status: ",
    imei: "IMEI: ",
    mode: "Modus: ",
    signalStrength: "Signalstärke: ",
    noSignal: "Kein Signal",
    gpsTime: "GPS-Zeit: ",
    gpsLocation: "GPS-Position: ",
    gpsHeight: "GPS-Höhe: ",
    onlineTime: "Online-Zeit: ",
    receivedBytes: "Empfangen: ",
    sentBytes: "Gesendet: ",
    g4Connected: "Verbunden",
    g4Connecting: "Verbinden",
    g4Disconnected: "Getrennt",
    timeHour: "Std",
    timeMinute: "Min",
    timeSecond: "Sek",

    // Streams
    mainStream: "Hauptstream",
    subStream1: "Substream 1",
    subStream2: "Substream 2",
    subStream3: "Substream 3",
    streamDisabled: "Deaktiviert (Substreams werden bei Hauptstream-Bildrate 31-60 fps deaktiviert)",
    codecType: "Codec: ",
    encodeResolution: "Kodierauflösung: ",
    videoBitrate: "Video-Bitrate: ",
    realTimeBitrate: "Echtzeit-Bitrate: ",
    realTimeFps: "Echtzeit-FPS: ",
    videoEncoded: "Video kodiert: ",
    reconnect: " (Neu verbinden)",
	    previewWebRTC: "Videovorschau (WebRTC)",
	    previewHTML5: "Videovorschau (HTML5)",

    // URL related
    disabled: "Deaktiviert",
    connected: "Verbunden",
    disconnected: "Getrennt",
    bufferPackets: "Pufferpakete",
    bufferPacketsLabel: "Pufferpakete: ",
    pushSpeed: "Push-Geschwindigkeit",
    pushSpeedLabel: "Push-Geschwindigkeit: ",
    pushed: "Gepusht",
    pushedLabel: "Gepusht: ",
    memoryUsed: "Speicher verwendet",
    memoryUsedLabel: "Speicher verwendet: ",
    cacheFiles: "Cache-Dateien",
    cacheFilesLabel: "Cache-Dateien: ",
    multicastUrl: "Multicast-URL: ",
    mjpgUrl: "MJPG-Stream-URL: ",
    jpgUrl: "JPG-Stream-URL: ",
    tsUrl: "TS-Stream-URL: ",
    flvUrl: "FLV-Stream-URL: ",
    hlsTsUrl: "HLS-TS-Stream-URL: ",
    hlsMp4Url: "HLS-MP4-Stream-URL: ",
    mp4Url: "MP4-Stream-URL: ",
    rtspUrl: "RTSP-Stream-URL: ",
    rtmpUrl: "RTMP-Stream-URL: ",
    srtListenerUrl: "SRT-Listener-URL: ",
    webrtcP2pUrl: "WebRTC P2P-Stream-URL: ",
    rtmpPushUrlAny: "RTMP(S)/RTSP Publish-URL {0}: ",
    rtmpPushUrlAny0: "RTMP(S)/RTSP Publish-URL 0: ",
    rtmpPushUrlAny1: "RTMP(S)/RTSP Publish-URL 1: ",
    rtmpPushUrlAny2: "RTMP(S)/RTSP Publish-URL 2: ",
    rtmpPushUrl: "RTMP(S) Publish-URL {0}: ",
    rtspPushUrl: "RTSP Publish-URL {0}: ",
    srtCallerUrl: "SRT-Caller-URL: ",
    hlsPushUrl: "HLS-PUSH-URL: ",
    icecastPushUrl: "ICECAST-PUSH-URL: ",
    shoutcastPushUrl: "Shoutcast-PUSH-URL: ",
    whipLabel: "WHIP: ",
    viewers: "Zuschauer",
    viewersLabel: "Zuschauer: ",

    // TRTC status
    trtcRoomId: "TRTC-Raum-ID: ",
    inRoom: "Im Raum",
    notInRoom: "Nicht im Raum",
    initializingServer: "Serververbindung wird initialisiert",
    serverDisconnected: "Server getrennt",
    connectingServer: "Verbindung zum Server",
    serverConnected: "Mit Server verbunden",
    networkUnknown: "Netzwerkstatus unbekannt",
    networkExcellent: "Ausgezeichnetes Netzwerk",
    networkGood: "Gutes Netzwerk",
    networkNormal: "Normales Netzwerk",
    networkPoor: "Schlechtes Netzwerk",
    networkBad: "Sehr schlechtes Netzwerk",
    networkNotMeet: "Netzwerk erfüllt TRTC-Mindestanforderungen nicht",
    errorCode: "Fehlercode",
    errorCodeLabel: "Fehlercode: ",
    trtcError1: "Allgemeiner Fehler, Protokolldateien prüfen",
    trtcError100: "Geschäftslogikfehler: ungültiger Aufruf",
    trtcError101: "Geschäftslogikfehler: ungültiger Parameter",
    trtcError102: "Kann momentan nicht lesen, bitte erneut versuchen",
    trtcError103: "Keine Netzwerkverbindung möglich",
    trtcError200: "Raumzutritt fehlgeschlagen",
    trtcError201: "Ungültiger user_sig Parameter",
    trtcError202: "Ungültiges Raum-ID-Format",
    trtcError203: "Ungültige sdk_app_id",
    trtcError204: "Dienst nicht verfügbar. Prüfen Sie, ob Paketminuten > 0 und Tencent Cloud-Konto nicht überfällig ist",
    trtcError205: "Benutzer wurde vom Server aus dem Raum entfernt",

    // WHIP status
    whipInitializing: "Initialisierung",
    whipConnected: "Verbunden",
    whipDisconnected: "Getrennt",
    whipUnknown: "Unbekannter Status",

    // GB28181
    gb28181: "GB28181: ",
    gb28181Online: "Online",
    gb28181Offline: "Offline"
  },

  // Reboot page
  reboot: {
    title: "Gerät neustarten",
    description: "Klicken Sie auf diese Schaltfläche, um den Encoder neu zu starten.",
    button: "Neustart",
    success: "Neustart-Befehl gesendet!",
    failed: "Neustart fehlgeschlagen!",
    confirm: "Möchten Sie das Gerät wirklich neu starten?"
  },

  // Factory reset page
  reset: {
    title: "Werkseinstellungen",
    description: "Klicken Sie auf diese Schaltfläche, um alle Encoder-Einstellungen auf Werkseinstellungen zurückzusetzen.",
    button: "Zurücksetzen",
    success: "Werksreset erfolgreich! Das System wird automatisch neu gestartet, bitte warten.",
    failed: "Werksreset fehlgeschlagen!",
    confirm: "Möchten Sie wirklich auf Werkseinstellungen zurücksetzen?"
  },

  // Scheduled reboot page
  timedReboot: {
    title: "Geplanter Neustart",
    enable: "Geplanter Neustart",
    enableLabel: "Geplanter Neustart:",
    timeLabel: "Neustartzeit:",
    enabled: "Aktivieren",
    disabled: "Deaktivieren",
    time: "Neustartzeit",
    weekdays: "Neustarttage",
    everyday: "Jeden Tag",
    monday: "Montag",
    tuesday: "Dienstag",
    wednesday: "Mittwoch",
    thursday: "Donnerstag",
    friday: "Freitag",
    saturday: "Samstag",
    sunday: "Sonntag",
    save: "Speichern",
    saveSuccess: "Einstellungen gespeichert!",
    saveFailed: "Einstellungen fehlgeschlagen!",
    invalidTime: "Ungültiger Zeitwert!"
  },

  // Network test page
  netTest: {
    title: "Netzwerktest & Systemprotokoll",
    command: "Befehl:",
    run: "Ausführen",
    address: "Adresse:",
    result: "Ergebnis:",
    invalidAddr: "Bitte geben Sie eine gültige Adresse ein!"
  },

  // Record files page
  recordFiles: {
    title: "Dateiliste",
    fileName: "Dateiname",
    time: "Zeit",
    fileSize: "Dateigröße",
    action: "Aktion",
    delete: "Löschen",
    confirmDelete: "Möchten Sie wirklich löschen",
    deleteSuccess: "Löschbefehl erfolgreich gesendet!",
    deleteFailed: "Löschen fehlgeschlagen!",
    noFiles: "Keine Aufnahmedateien",
    loadError: "Laden fehlgeschlagen"
  },

  // Password settings page
  password: {
    title: "Passworteinstellungen",
    oldPassword: "Altes Passwort",
    oldPasswordLabel: "Altes Passwort:",
    newPassword: "Neues Passwort",
    newPasswordLabel: "Neues Passwort:",
    confirmPassword: "Passwort bestätigen",
    confirmPasswordLabel: "Passwort bestätigen:",
    save: "Speichern",
    success: "Einstellungen gespeichert!",
    failed: "Passworteinstellung fehlgeschlagen, bitte prüfen Sie das alte Passwort!",
    mismatch: "Neue Passwörter stimmen nicht überein!",
    empty: "Passwort darf nicht leer sein!"
  },

  // Encoding common (only actually used keys)
  encoding: {
    sameAsInput: "Wie Eingangsauflösung",
    mp3Required: "Bitte Audio-Kodierung auf MP3 setzen!",
    choosePrimaryColor: "Primärfarbe wählen",
    toggleTheme: "Thema wechseln"
  },

  // OSD settings
  osd: {
    title: "OSD-Einstellungen",
    globalSettings: "Globale OSD-Einstellungen",
    followVideoTransformLabel: "Videodrehung/-spiegelung folgen:",
    mainStream: "Hauptstream OSD",
    subStream1: "Substream 1 OSD",
    subStream2: "Substream 2 OSD",
    subStream3: "Substream 3 OSD",
    alpha: "Transparenz",
    alphaLabel: "Transparenz:",
    alphaRange: "[0-255]",
    alphaError: "Transparenz muss eine Ganzzahl zwischen 0-255 sein!",
    region: "Bereich",
    regionLabel: "Bereich:",
    region1: "Bereich 1",
    region2: "Bereich 2",
    region3: "Bereich 3",
    region4: "Bereich 4",
    type: "Typ",
    typeLabel: "Typ:",
    typeText: "Text",
    typeImage: "Bild",
    typeScroll: "Lauftext",
    typeTime: "Zeit",
    position: "Position",
    positionLabel: "Position:",
    speed: "Geschwindigkeit",
    speedLabel: "Geschwindigkeit:",
    xLabel: "X:",
    yLabel: "Y:",
    textLabel: "Text:",
    fontSize: "Schriftgröße",
    fontSizeLabel: "Schriftgröße:",
    fontSizeRange: "[8-72]",
    backgroundColor: "Hintergrundfarbe",
    backgroundLabel: "Hintergrundfarbe:",
    bgTransparent: "Transparent",
    bgWhite: "Weiß",
    bgBlack: "Schwarz",
    fontColor: "Schriftfarbe",
    fontColorLabel: "Schriftfarbe:",
    pickColor: "Farbe wählen",
    closeColor: "Schließen",
    logoLabel: "LOGO:",
    success: "Einstellungen erfolgreich gespeichert!",
    failed: "Einstellungen fehlgeschlagen!",
    xRangeError: "{0} X-Wert muss eine Ganzzahl zwischen 0-{1} sein!",
    yRangeError: "{0} Y-Wert muss eine Ganzzahl zwischen 0-{1} sein!",
    textEmpty: "{0} Text darf nicht leer sein!",
    fontSizeError: "{0} Schriftgröße muss eine Ganzzahl zwischen 8-72 sein!",
    speedRangeError: "{0} Geschwindigkeit muss eine Ganzzahl zwischen 0-30 sein!",
    positionRangeError: "{0} Position muss eine Ganzzahl zwischen 0-{1} sein!",
    selectLogo: "Bitte wählen Sie ein LOGO für {0}!",
    webrtcPreview: "Video-Vorschau"
  },

  // LOGO upload
  logo: {
    title: "Logo-Upload",
    logoLabel: "LOGO:",
    upload: "Hochladen",
    hint: "Bitte laden Sie ein PNG-Bild oder 24-Bit BMP-Bild unter 500KB hoch (0xF1F1F1 ist transparent),",
    hint2: "Dateiname: logo1.bmp ~ logo16.bmp,",
    hint3: "oder logo1.png ~ logo16.png",
    noFileSelected: "Bitte wählen Sie eine Datei zum Hochladen!",
    invalidFile: "Bitte laden Sie Bilder gemäß den Anforderungen hoch!",
    uploadSuccess: "Upload erfolgreich!",
    uploadFailed: "Upload fehlgeschlagen!",
    imageSizeExceeded: "Bilddateigröße überschreitet Limit!",
    imageResolutionExceeded: "Bildauflösung überschreitet Limit!",
    storageInsufficient: "Upgrade-Datei zu groß, nicht genügend Speicherplatz!"
  },

  // WIFI settings
  wifi: {
    title: "WLAN-Einstellungen",
    mode: "Modus",
    ap: "Access Point",
    sta: "Client-Modus",
    ssid: "SSID",
    password: "Passwort",
    security: "Sicherheit",
    channel: "Kanal",
    scan: "Scannen",
    connect: "Verbinden",
    disconnect: "Trennen",
    status: "Status",
    connected: "Verbunden",
    disconnected: "Getrennt",
    signalStrength: "Signalstärke",
    basicSettings: "Grundeinstellungen",
    wifiModule: "WLAN-Modul:",
    wifiMode: "WLAN-Modus:",
    staMode: "STA-Modus",
    apMode: "AP-Modus",
    mainConfig: "WLAN-Hauptkonfiguration",
    backupConfig1: "WLAN-Backup-Konfiguration 1",
    backupConfig2: "WLAN-Backup-Konfiguration 2",
    apModeSettings: "AP-Modus",
    wifiList: "WLAN-Liste:",
    wifiEssid: "WLAN-ESSID:",
    wifiPassword: "WLAN-Passwort:",
    wifiDhcp: "WLAN-DHCP:",
    wifiIp: "WLAN-IP:",
    wifiNetmask: "WLAN-Netzmaske:",
    wifiGateway: "WLAN-Gateway:",
    backupEnable1: "Backup-Konfiguration 1:",
    backupEnable2: "Backup-Konfiguration 2:",
    wifiBand: "WLAN-Band:",
    wifiChannel: "WLAN-Kanal:",
    refresh: "Aktualisieren",
    success: "Einstellungen erfolgreich gespeichert!",
    failed: "Einstellungen speichern fehlgeschlagen!",
    mainConfigEmpty: "WLAN-Hauptkonfiguration: {0} darf nicht leer sein!",
    mainConfigInvalid: "WLAN-Hauptkonfiguration: {0} Format ist ungültig!",
    backupConfigEmpty: "WLAN {0}: {1} darf nicht leer sein!",
    backupConfigInvalid: "WLAN {0}: {1} Format ist ungültig!",
    ipAddr: "IP-Adresse",
    netmask: "Netzmaske",
    gateway: "Gateway",
    essidEmpty: "WLAN-Name darf nicht leer sein!",
    passwordTooShort: "WLAN-Passwort muss mindestens 8 Zeichen haben!"
  },

  // 4G/5G settings
  cellular: {
    title: "4G/5G-Einstellungen",
    enable: "Aktivieren",
    apn: "APN",
    username: "Benutzername",
    password: "Passwort",
    status: "Status",
    signalStrength: "Signalstärke",
    operator: "Anbieter",
    connected: "Verbunden",
    disconnected: "Getrennt",
    connecting: "Verbinden...",
    module: "4G/5G-Modul:",
    apnLabel: "APN:",
    usernameLabel: "Benutzername:",
    passwordLabel: "Passwort:",
    authType: "Authentifizierungstyp:",
    dnsOrder: "4G/5G DNS-Reihenfolge:",
    authNone: "Keine",
    authPap: "PAP",
    authChap: "CHAP",
    authChapPap: "CHAP+PAP",
    success: "Einstellungen erfolgreich gespeichert!",
    failed: "Einstellungen speichern fehlgeschlagen!"
  },

  // Upgrade and backup
  updateBackup: {
    title: "System-Upgrade",
    uploadTitle: "Firmware und Konfiguration hochladen",
    backupTitle: "Firmware und Konfiguration sichern",
    systemVersion: "Systemversion",
    systemVersionLabel: "Systemversion: ",
    hardware: "Hardware",
    hardwareLabel: "Hardware: ",
    selectFile: "Datei auswählen",
    selectFileLabel: "Datei auswählen:",
    uploadHint: "Upload-Dateiname: up.rar oder box.ini",
    uploadWarning: "Nicht gleichzeitig hochladen. Während des Uploads nicht ausschalten.",
    upload: "Hochladen",
    backupFirmware: "Firmware sichern",
    backupConfig: "Konfiguration sichern",
    noFileSelected: "Bitte wählen Sie eine Datei zum Hochladen!",
    uploadSuccess: "Upload erfolgreich, bitte starten Sie das System neu!",
    uploadFailed: "Upload fehlgeschlagen!",
    kernelUpdating: "Das Kernel-Update dauert einige Minuten. Bitte starten Sie das System nicht neu. Das Gerät startet nach Abschluss automatisch neu.",
    kernelUpdatingBin: "Das Kernel-Update dauert einige Minuten. Bitte starten Sie das System nicht neu. Das Gerät startet nach Abschluss automatisch neu!",
    imageSizeExceeded: "Bilddateigröße überschreitet Limit!",
    imageResolutionExceeded: "Bildauflösung überschreitet Limit!",
    storageInsufficient: "Upgrade-Datei zu groß, nicht genügend Speicherplatz!"
  },

  // Serial transport settings
  serial: {
    title: "Serielle Übertragung",
    frpTitle: "FRP-Client-Einstellungen",
    serialTitle: "Serieller Port-Durchgang",
    enable: "Aktivieren",
    disable: "Deaktivieren",
    enableLabel: "Aktivieren:",
    serverAddr: "Serveradresse",
    serverAddrLabel: "Serveradresse:",
    serverPort: "Serverport",
    serverPortLabel: "Serverport:",
    serverToken: "Server-Token",
    serverTokenLabel: "Server-Token:",
    channel: "Kanal",
    channel1: "Kanal 1",
    channel2: "Kanal 2",
    channel3: "Kanal 3",
    channel4: "Kanal 4",
    protocolLabel: "Protokoll:",
    localPort: "Lokaler Port",
    localPortLabel: "Lokaler Port:",
    remotePort: "Remote-Port",
    remotePortLabel: "Remote-Port:",
    serialMode: "Serieller Modus",
    serialModeLabel: "Modus:",
    server: "Server",
    client: "Client",
    baudRate: "Baudrate",
    baudRateLabel: "Baudrate:",
    listenPort: "Listen-Port",
    listenPortLabel: "Listen-Port:",
    save: "Speichern",
    success: "Einstellungen gespeichert, bitte Gerät neu starten!",
    failed: "Einstellungen fehlgeschlagen!",
    emptyError: "Einstellungen dürfen nicht leer sein!",
    portRangeError: "TCP Listen-Port muss eine Ganzzahl zwischen 1-65500 sein!",
    frpAddrEmpty: "FRP-Serveradresse darf nicht leer sein!",
    frpPortError: "FRP-Serverport muss eine Ganzzahl zwischen 1-65500 sein!"
  },

  // Advanced Settings
  advanced: {
    title: "Erweiterte Einstellungen",
    // Section titles
    videoInput: "Videoeingang",
    avTransmission: "A/V-Übertragung",
    recordSettings: "Aufnahmeeinstellungen",
    hlsSettings: "HLS-Einstellungen",
    networkTransmission: "Stream-Übertragung",
    serviceSettings: "Diensteinstellungen",
    logSettings: "Protokolleinstellungen",
    portNameSettings: "Portnamen",
    encoderParams: "Encoder-Parameter",
    imageEnhancement: "Bildverbesserung",
    autoRestart: "Auto-Neustart",
    // Video Input
    edidSelect: "EDID-Auswahl:",
    colorGamut: "Farbraum:",
    colorRange: "Farbbereich:",
    interlaceMode: "Interlace-Modus:",
    noSignal: "Kein Signal:",
    vgaAutoAdjust: "VGA Auto-Anpassung beim Start:",
    interlaceWeaving: "Weaving (Felder zusammenführen)",
    interlaceBottom: "Nur unteres Feld",
    interlaceTop: "Nur oberes Feld",
    interlaceBobbing: "Bobbing (Feld zu Frame)",
    noSignalHide: "Ausblenden",
    noSignalImage: "Bild anzeigen",
    noSignalColor: "Einfarbig anzeigen",
    // A/V Transmission
    videoOnly: "Nur Video:",
    audioOnly: "Nur Audio:",
    avSync: "A/V-Synchronisation:",
    audioDelay: "Audio-Verzögerung (ms):",
    syncAuto: "Auto",
    syncResample: "Resampling",
    audioDelayHint: "Negative Werte machen Audio früher, positive später. Nur für A/V-Sync-Abstimmung verwenden.",
    // Recording Settings
    recordType: "Aufnahmetyp:",
    cycleRecord: "Zyklische Aufnahme:",
    recordSplitTime: "Aufnahme-Teilungszeit (Sek):",
    // HLS Settings
    hlsSplitTime: "HLS-Segmentzeit (Sek):",
    hlsBufferNum: "HLS-Segmentanzahl:",
    hlsIndexUri: "HLS-Global-Index-URI:",
    // Network Transmission
    tsMuxer: "TS-Muxer:",
    netDropThreshold: "Paket-Drop-Schwelle:",
    tsOnce: "TS-Pakete pro Sendung:",
    rtspPackType: "RTSP-Kapselung:",
    multicastType: "Multicast-Typ:",
    enableSap: "SAP aktivieren:",

    ethSpeed: "Ethernet-Geschwindigkeit:",
    mtuSize: "MTU-Größe:",
    udpTtl: "UDP-TTL:",
    udpSockBuf: "UDP SOCKET_BUF_SIZE:",
    rtpH264PacketMode: "RTP H264 Packetization:",
    packetizeByAccessUnit: "packetize_by_access_unit",
    packetizeByNalu: "packetize_by_nalu",
    vlcCompat: "VLC-kompatibel",
    ffmpegCompat: "FFMPEG-kompatibel",
    esStream: "ES-Stream",
    tsStream: "TS-Stream",
    // Service Settings
    tsRtspAuth: "TS/RTSP-Authentifizierung erforderlich:",
    httpNoAuth: "Web-Zugang ohne Authentifizierung:",
    netCheck: "Netzwerkstatus-Prüfung:",
    telnetService: "Telnet-Dienst:",
    sambaService: "Samba-Dienst:",
    onvifService: "ONVIF-Dienst:",
    onvifLocation: "ONVIF Location:",
    rtspDefaultStream: "RTSP-Standardstream:",
    vmixCompat: "VMix-kompatibel:",
    telnetLan: "Nur LAN",
    // Log Settings
    localLog: "Lokaler Protokolldienst:",
    lokiAddr: "Loki-Serveradresse:",
    lokiPort: "Loki-Serverport:",
    // Encoder Parameters
    sliceSplit: "SLICE-Teilung:",
    sliceBytes: "SLICE-Bytes:",
    minQp: "MIN_QP:",
    maxQp: "MAX_QP:",
    debreath: "Debreathing:",
    sar: "SAR:",
    cbrOnlyHint: "Nur wirksam, wenn Ratensteuerungsmodus auf CBR gesetzt ist",
    // Image Enhancement
    contrastEnhance: "Kontrastverstärkung:",
    sharpnessEnhance: "Schärfeverstärkung:",
    lumaSfStrength: "Luma räumliche Rauschunterdrückung:",
    lumaTfStrength: "Luma zeitliche Rauschunterdrückung:",
    chromaSfStrength: "Chroma räumliche Rauschunterdrückung:",
    chromaTfStrength: "Chroma zeitliche Rauschunterdrückung:",
    // Auto Restart
    kickAllOnChange: "Benutzer bei Eingangsänderung trennen:",
    noVideoReboot: "Auto-Neustart bei fehlendem Video:",
    noAudioReboot: "Auto-Neustart bei fehlendem Audio:",
    // Button
    save: "Speichern",
    // Messages
    success: "Einstellungen gespeichert, bitte Gerät neu starten!",
    failed: "Einstellungen fehlgeschlagen!",
    emptyError: "Einstellungen dürfen nicht leer sein!",
    netDropError: "Paket-Drop-Schwelle muss eine Ganzzahl zwischen 50-50000 sein!",
    tsOnceError: "TS-Pakete pro Sendung muss eine Ganzzahl zwischen 1-128 sein!",
    sliceError: "SLICE-Bytes muss eine Ganzzahl zwischen 128-65535 sein!",
    minQpError: "MIN_QP muss eine Ganzzahl zwischen 1-35 sein!",
    maxQpError: "MAX_QP muss größer als MIN_QP und maximal 50 sein!",
    udpTtlError: "UDP-TTL muss eine Ganzzahl zwischen 1-254 sein!",
    contrastError: "Kontrastverstärkung muss eine Ganzzahl zwischen 0-63 sein!",
    sharpnessError: "Schärfeverstärkung muss eine Ganzzahl zwischen 0-16 sein!",
    lumaSfError: "Luma räumliche Rauschunterdrückung muss eine Ganzzahl zwischen 0-255 sein!",
    lumaTfError: "Luma zeitliche Rauschunterdrückung muss eine Ganzzahl zwischen 0-63 sein!",
    chromaSfError: "Chroma räumliche Rauschunterdrückung muss eine Ganzzahl zwischen 0-255 sein!",
    chromaTfError: "Chroma zeitliche Rauschunterdrückung muss eine Ganzzahl zwischen 0-32 sein!",
    hlsSplitError: "HLS-Segmentzeit muss eine Ganzzahl zwischen 3-20 sein!",
    hlsBufferError: "HLS-Segmentanzahl muss eine Ganzzahl zwischen 3-20 sein!",
    hlsUriError: "HLS-Global-Index-URI-Format ist ungültig!",
    udpSockBufError: "UDP SOCKET_BUF_SIZE muss eine Ganzzahl zwischen 0-20971520 sein!",
    mtuError: "MTU-Größe muss eine Ganzzahl zwischen 500-1500 sein!",
    audioCacheError: "Audio-Verzögerung muss eine Ganzzahl zwischen -2000 und 2000 sein!",
    recordSplitError: "Aufnahme-Teilungszeit muss eine Ganzzahl zwischen 60-7200 sein!",
    lokiPortError: "Loki-Serverport muss zwischen 1-65500 sein"
  },

  // Audio Encoding Settings
  audioEnc: {
    title: "Audioeinstellungen",
    // Tabs
    tabAudio: "Audioeinstellungen",
    tabOnvif: "ONVIF-Audio",
    // Tips
    tipAudio: "Stellen Sie die digitale Lautstärkeverstärkung nicht zu hoch ein, da dies zu Verzerrungen oder Rauschen führen kann.<br>In den meisten Fällen setzen Sie die Verstärkung auf 0.<br>Passen Sie die Gesamtlautstärke über die Frontend-Regler an.",
    tipOnvif: "Für NVR-Verbindung setzen Sie RTSP G711-Kodierung auf 'Aktivieren und auf 8K resamplen'",
    // Audio Settings
    audioInput: "Audioeingang:",
    sampleRate: "Abtastrate:",
    codec: "Codec:",
    channel: "Kanäle:",
    bitrate: "Bitrate:",
    digitalGain: "Digitale Lautstärkeverstärkung:",
    analogGain: "Analoge Lautstärkeverstärkung:",
    denoise: "Rauschunterdrückung:",
    denoiseStrength: "Rauschunterdrückungsstärke (dB):",
    pteG711: "PTE-Stream G711:",
    // Audio Input Options
    inputDigital: "Digital",
    inputAnalog: "Analog",
    inputMixed: "Gemischt",

    inputMute: "Stumm",
    // Sample Rate Options
    sampleSameAsInput: "Wie Eingang",
    // ONVIF Audio
    rtspG711: "RTSP G711-Kodierung:",
    rtspG711Resample: "Aktivieren und auf 8K resamplen",
    g711Codec: "G711-Codec:",
    // Buttons and Messages
    save: "Speichern",
    success: "Einstellungen gespeichert!",
    failed: "Einstellungen fehlgeschlagen!",
    emptyError: "Einstellungen dürfen nicht leer sein!",
    bitrateError: "Bitrate muss eine Ganzzahl zwischen {0}-{1} sein!",
    gainError: "Digitale Lautstärkeverstärkung muss eine Ganzzahl zwischen -50 und 50 sein!",
    denoiseError: "Rauschunterdrückungsstärke muss eine Ganzzahl zwischen 1-100 sein!",
    analogVolEmpty: "Analoge Lautstärkeverstärkung darf nicht leer sein!",
    analogVolError: "Analoge Lautstärkeverstärkung muss eine Ganzzahl zwischen {0} und {1} sein!"
  },

  // Recording Settings Page
  recordSet: {
    title: "Aufnahmeeinstellungen",
    // Card Titles
    statusTitle: "Aufnahmestatus",
    settingsTitle: "Aufnahmeeinstellungen",
    // Status
    recordType: "Aufnahmetyp:",
    diskStatus: "Festplattenstatus:",
    currentAddr: "Aktuelle Adresse:",
    mountDevice: "Mount-Gerät:",
    mountStatus: "Mount-Status:",
    totalSpace: "Gesamtspeicher:",
    freeSpace: "Freier Speicher:",
    recordStatus: "Aufnahmestatus:",
    recordFiles: "Aufnahmedateien:",
    fileList: "Dateiliste",
    // Disk Status
    diskNotExist: "Nicht vorhanden",
    diskFull: "Festplatte voll",
    diskSlow: "Festplatte zu langsam",
    mounted: "Gemountet",
    unmounted: "Nicht gemountet",
    notRecording: "Keine Aufnahme",
    recording: "Aufnahme läuft",
    noVideoWarning: " (Dateien werden ohne Videoeingabe möglicherweise nicht gespeichert)",
    // Action Links
    startRecord: "(Aufnahme starten)",
    stopRecord: "(Aufnahme stoppen)",
    mountDisk: "(Festplatte mounten)",
    unmountDisk: "(Festplatte unmounten)",
    deleteAll: "(Alle Aufnahmen löschen)",
    // Settings
    storageType: "Speichertyp:",
    partition: "Partition:",
    partitionInfo: "Partitionsinfo:",
    diskInfo: "Festplatteninfo:",
    formatDisk: "(Festplatte neu formatieren)",
    exampleAddr: "Beispieladresse:",
    storageAddr: "Speicheradresse:",
    username: "Benutzername:",
    password: "Passwort:",
    // Storage Type Options
    storageDisabled: "Deaktiviert",
    storageUsb: "USB/TF-Karte",
    storageNfs: "NFS",
    storageSamba: "SAMBA/CIFS",
    // Format Dialog
    formatTitle: "Festplatteninformation",
    formatDevice: "Gerät:",
    formatType: "Typ:",
    formatModel: "Modell:",
    formatRemovable: "Wechselmedium:",
    formatPartTable: "Partitionstabelle:",
    formatCapacity: "Kapazität:",
    formatPartitions: "Partitionsinformation",
    formatPartition: "Partition",
    formatAvailable: "(verfügbar)",
    formatTotal: "(gesamt)",
    formatConfirm: "Mit Festplattenformatierung fortfahren?",
    formatDanger: "Warnung: Formatierung wird neu partitionieren und alle Daten gehen verloren. Fortfahren?",
    formatContinue: "Fortfahren",
    formatCancel: "Abbrechen",
    formatConfirmBtn: "Bestätigen",
    formatting: "Formatierung...",
    // Buttons and Messages
    save: "Speichern",
    yes: "Ja",
    no: "Nein",
    success: "Einstellungen gespeichert!",
    failed: "Einstellungen fehlgeschlagen!",
    formatSuccess: "Formatierung erfolgreich!",
    formatFailed: "Formatierung fehlgeschlagen!",
    deleteSuccess: "Löschbefehl gesendet!",
    deleteFailed: "Löschen fehlgeschlagen!",
    confirmDeleteAll: "Alle Aufnahmedateien löschen?",
    recordingWarning: "Aufnahme läuft. Stoppen Sie die Aufnahme vor dem Unmounten.",
    diskMountedWarning: "Festplatte ist gemountet. Vor Formatierung unmounten.",
    diskMountedSettingWarning: "Festplatte ist gemountet. Vor Änderung der Einstellungen unmounten.",
    partitionNotExist: "Partition existiert nicht",
    partitionRemoved: " (Entfernt)",
    // Address Validation
    addrEmpty: "Speicheradresse darf nicht leer sein!",
    addrNfsFormat: "Ungültiges Adressformat, muss ':'-Trennzeichen enthalten",
    addrIpError: "Ungültiges IP-Adressformat",
    addrPathSlash: "Pfad muss mit '/' beginnen",
    addrPathInvalid: "Pfad enthält ungültige Zeichen",
    addrSambaStart: "Adresse muss mit '\\\\' beginnen",
    addrSambaFormat: "Ungültige Adresse, muss IP und Pfad durch '\\' getrennt enthalten",
    addrPathEmpty: "Pfad darf nicht leer sein",
    addrPathChars: "Pfad enthält ungültige Zeichen, nur Buchstaben, Zahlen, Unterstriche und Bindestriche erlaubt",
    // Disk size info "{available} / {total}"
    diskSizeInfo: "{0} (verfügbar) / {1} (gesamt)"
  },
  // GB28181 Settings
  gb28181: {
    title: "GB28181-Einstellungen",
    basicSettings: "Grundeinstellungen",
    heartbeatSettings: "Heartbeat-Einstellungen",
    sipServerSettings: "SIP-Server-Einstellungen",
    authSettings: "Authentifizierungseinstellungen",
    enable: "Aktivieren:",
    disabled: "Deaktiviert",
    enabled: "Aktiviert",
    localSipPort: "Lokaler SIP-Port:",
    videoChannelId: "Video-Kanal-ID:",
    streamSelect: "Stream-Auswahl:",
    mainStream: "Hauptstream",
    subStream1: "Substream 1",
    subStream2: "Substream 2",
    subStream3: "Substream 3",
    regExpiry: "Registrierungsablauf:",
    heartbeatCycle: "Heartbeat-Zyklus:",
    maxHeartbeatTimeout: "Max Heartbeat-Timeout:",
    sipServerId: "SIP-Server-ID:",
    sipServerDomain: "SIP-Server-Domain:",
    sipServerAddr: "SIP-Serveradresse:",
    sipServerPort: "SIP-Serverport:",
    sipUserId: "SIP-Benutzer-ID:",
    sipPassword: "SIP-Passwort:",
    emptyError: "Einstellungen dürfen nicht leer sein!",
    localPortError: "Lokaler SIP-Port muss eine Ganzzahl zwischen 1-65500 sein!",
    serverPortError: "SIP-Serverport muss eine Ganzzahl zwischen 1-65500 sein!",
    regExpiryError: "Registrierungsablauf muss eine Ganzzahl zwischen 100-100000 sein!",
    heartbeatError: "Heartbeat-Zyklus muss eine Ganzzahl zwischen 5-3600 sein!",
    maxTimeoutError: "Max Heartbeat-Timeout muss eine Ganzzahl zwischen 3-255 sein!",
    success: "Einstellungen erfolgreich gespeichert!",
    failed: "Einstellungen fehlgeschlagen!"
  },
  // Video Source Settings
  videoSource: {
    title: "Videoquellen-Einstellungen",
    videoInput: "Videoeingangseinstellungen",
    brightAdjust: "Eingangshelligkeit-Anpassung",
    videoOutput: "Videoausgangseinstellungen",
    inputFormat: "Videoeingangsformat:",
    globalParam: "Globaler Parameter",
    yuv422: "YUV422",
    yuv420: "YUV420 (Rotation unterstützt)",
    rotation: "Rotationswinkel:",
    flipMirror: "Flip/Spiegeln:",
    flipDisable: "Deaktiviert",
    mirror: "Spiegeln",
    flip: "Flip",
    flipAndMirror: "Spiegeln und Flip",
    cropEnable: "Video-Zuschnitt:",
    cropLeft: "Zuschnitt-Startpunkt (Links):",
    cropTop: "Zuschnitt-Startpunkt (Oben):",
    cropWidth: "Zuschnittbreite:",
    cropHeight: "Zuschnitthöhe:",
    colorMode: "Eingangs-Farbmodus:",
    unknown: "Unbekannt",
    brightEnable: "Helligkeitsanpassung:",
    gain: "Verstärkung:",
    gainHint: "[10-1000], Standard 100",
    offset: "Offset:",
    offsetHint: "[0-100], Standard 0",
    note: "Hinweis:",
    brightNote1: "1. Helligkeit = (Originalhelligkeit * Verstärkung / 100) + Offset",
    brightNote2: "2. Helligkeitsanpassung funktioniert nur im RGB-Eingangs-Farbmodus",
    outputRes: "Videoausgangsauflösung:",
    auto: "Auto",
    cscEnable: "CSC-Anpassung:",
    luminance: "Luminanz:",
    contrast: "Kontrast:",
    hue: "Farbton:",
    saturation: "Sättigung:",
    cscHint: "[0-100], Standard 50",
    rotateHint: "Rotation wird nur unterstützt, wenn Videoeingangsformat YUV420 ist.",
    emptyError: "Einstellungen dürfen nicht leer sein!",
    gainError: "Verstärkung muss eine Ganzzahl zwischen 10-1000 sein!",
    offsetError: "Offset muss eine Ganzzahl zwischen 0-100 sein!",
    leftError: "Links-Wert muss eine Ganzzahl zwischen 0-{0} sein!",
    topError: "Oben-Wert muss eine Ganzzahl zwischen 0-{0} sein!",
    widthError: "Breitenwert muss eine Ganzzahl zwischen 400-{0} sein!",
    heightError: "Höhenwert muss eine Ganzzahl zwischen 400-{0} sein!",
    luminanceError: "Luminanz muss eine Ganzzahl zwischen 0-100 sein!",
    contrastError: "Kontrast muss eine Ganzzahl zwischen 0-100 sein!",
    hueError: "Farbton muss eine Ganzzahl zwischen 0-100 sein!",
    saturationError: "Sättigung muss eine Ganzzahl zwischen 0-100 sein!",
    success: "Einstellungen erfolgreich gespeichert!",
    failed: "Einstellungen fehlgeschlagen!"
  },
  // Network Settings
  network: {
    title: "Netzwerkeinstellungen",
    ipv4Title: "IPv4-Einstellungen",
    managementPortTitle: "Management-Port",
    ipv6Status: "IPv6-Status",
    ipv6Title: "IPv6-Einstellungen",
    ipv6TypeGlobal: "Globale IP",
    ipv6TypeLinkLocal: "Link-lokale IP",
    ipv6TypeUniqueLocal: "Lokale IP",
    ipv6TypeMulticast: "Multicast-IP",
    ipv6TypeGeneric: "IP",
    ipv6StatusGateway: "Gateway",
    dnsTitle: "DNS-Einstellungen",
    ntpTitle: "NTP-Einstellungen",
    portTitle: "Port-Einstellungen",
    httpsTitle: "HTTPS-Einstellungen",
    hostnameTitle: "HOSTNAME-Einstellungen",
    dhcp: "DHCP:",
    dhcpHint: "Nach Aktivierung von DHCP kann das Gerät von ONVIF-kompatiblen Suchtools gefunden werden.",
    ipAddr: "IP-Adresse:",
    netmask: "Subnetzmaske:",
    gateway: "Kabel-Gateway:",
    macAddr: "MAC-Adresse:",
    defaultGateway: "Standard-Gateway:",
    lanFirst: "Kabel zuerst",
    wifiFirst: "WLAN zuerst",
    g4First: "4G/5G zuerst",
    ipv6Mode: "Modus:",
    ipv6Disable: "Deaktiviert",
    ipv6Auto: "Auto-Konfiguration",
    ipv6Manual: "Manuelle Konfiguration",
    ipv6Addr: "IPv6-Adresse:",
    ipv6Prefix: "IPv6-Präfixlänge:",
    ipv6Gateway: "IPv6-Standard-Gateway:",
    dns1: "DNS1:",
    dns2: "DNS2:",
    ntpSync: "NTP-Synchronisation:",
    ntpServer: "Server:",
    timezone: "Zeitzone:",
    httpPort1: "HTTP-Port 1:",
    httpPort2: "HTTP-Port 2:",
    rtspPort1: "RTSP-Port 1:",
    rtspPort2: "RTSP-Port 2:",
    onvifPort: "ONVIF-Port:",
    httpsService: "HTTPS-Dienst:",
    httpsPort1: "HTTPS-Port 1:",
    httpsPort2: "HTTPS-Port 2:",
    httpsPrivatePass: "HTTPS-Privatschlüssel-Passwort:",
    privatePassHint: "(Leer lassen, wenn kein Passwort)",
    uploadCert: "Zertifikat hochladen:",
    uploadCertHint: "(Dateiname muss private.key oder public.crt sein. Nicht gleichzeitig hochladen oder während Upload ausschalten)",
    uploadBtn: "Zertifikat hochladen",
    deleteCert: "Zertifikat löschen",
    hostname: "HOSTNAME:",
    mdnsService: "mDNS-Dienst:",
    mdnsAddr: "mDNS-Zugriffsadresse:",

    virtualIpTitle: "Virtuelle IP-Einstellungen",

    onvifVirtualIp: "ONVIF Virtuelle IP:",

    virtualIp1: "Virtuelle IP 1:",

    virtualIp2: "Virtuelle IP 2:",

    virtualIp3: "Virtuelle IP 3:",

    virtualIp4: "Virtuelle IP 4:",
    portRange: "[1-65500]",
    prefixRange: "[0-128]",
    emptyError: "Einstellungen dürfen nicht leer sein!",
    ipError: "Ungültiges IP-Adressformat!",
    netmaskError: "Ungültiges Subnetzmaskenformat!",
    gatewayError: "Ungültiges Gateway-Format!",
    dns1Error: "Ungültiges primäres DNS-Format!",
    dns2Error: "Ungültiges sekundäres DNS-Format!",
    macError: "Ungültiges MAC-Adressformat!",
    httpPort1Error: "HTTP-Port 1 muss eine Ganzzahl zwischen 1-65500 sein!",
    httpPort2Error: "HTTP-Port 2 muss eine Ganzzahl zwischen 1-65500 sein!",
    rtspPort1Error: "RTSP-Port 1 muss eine Ganzzahl zwischen 1-65500 sein!",
    rtspPort2Error: "RTSP-Port 2 muss eine Ganzzahl zwischen 1-65500 sein!",
    httpsPort1Error: "HTTPS-Port 1 muss eine Ganzzahl zwischen 1-65500 sein!",
    httpsPort2Error: "HTTPS-Port 2 muss eine Ganzzahl zwischen 1-65500 sein!",
    onvifPortError: "ONVIF-Port muss eine Ganzzahl zwischen 1-65500 sein!",
    httpBothDisableError: "HTTP-Port 1 und Port 2 können nicht beide deaktiviert sein!",
    httpsBothDisableError: "Bei aktiviertem HTTPS können Port 1 und Port 2 nicht beide deaktiviert sein!",
    ntpEmptyError: "NTP-Server darf nicht leer sein!",
    ntpFormatError: "Ungültige NTP-Serveradresse!",
    hostnameEmptyError: "HOSTNAME darf nicht leer sein!",
    hostnameFormatError: "Ungültiger HOSTNAME!\n\n1. HOSTNAME darf maximal 63 Zeichen haben!\n2. Nur Buchstaben (a-z), Zahlen (0-9), Bindestriche (-) und Unterstriche (_) erlaubt!\n3. '-' und '_' dürfen nicht aufeinanderfolgend, allein oder am Anfang/Ende stehen!",
    deleteCertConfirm: "Möchten Sie das hochgeladene HTTPS-Zertifikat wirklich löschen?",
    selectFile: "Bitte wählen Sie eine Datei zum Hochladen!",
    uploadSuccess: "Upload erfolgreich!",
    uploadFailed: "Upload fehlgeschlagen!",
    fileSizeError: "Bilddateigröße überschreitet Limit!",
    fileResError: "Bildauflösung überschreitet Limit!",
    spaceError: "Upgrade-Datei zu groß, nicht genügend Speicherplatz!",
    deleteSuccess: "Erfolgreich gelöscht!",
    deleteFailed: "Löschen fehlgeschlagen!",
    successReboot: "Einstellungen gespeichert, bitte Gerät neu starten!",
    failed: "Einstellungen fehlgeschlagen!"
  },

  // Output Settings Page (Stream Settings)
  output: {
    // Tab names
    tabs: {
      encode: "Kodierung",
      ts: "TS/Multicast",
      rtsp: "RTSP",
      rtmp: "RTMP",
      srt: "SRT",
      webrtc: "WebRTC",
      trtc: "TRTC",
      hls: "HLS",
      other: "MP4/FLV/Andere"
    },

    // Encoding settings
    encode: {
      codecType: "Codec-Typ:",
      frameRate: "Bildrate:",
      sameAsInput: "Wie Eingangsbildrate",
      auto: "Auto",
      customFrameRate: "Benutzerdefinierte Bildrate",
      customFrameRateLabel: "Benutzerdefinierte Bildrate:",
      gopInterval: "GOP-Intervall (Bilder):",
      bitrate: "Bitrate (kbit):",
      qualityRange: "Qualitätsbereich:",
      qualityStrict: "Streng (Hoch)",
      qualityTight: "Eng (Fast-Hoch~Hoch)",
      qualityNormal: "Normal (Mittel~Hoch)",
      qualityLoose: "Locker (Fast-Niedrig~Hoch)",
      qualityWide: "Weit (Niedrig~Hoch)",
      mjpegQuality: "MJPEG-Qualität:",
      outputResolution: "Ausgangsauflösung:",
      h264Profile: "H.264-Profil:",
      bitrateControl: "Bitratenkontrolle:",
      // Tips
      tipCodec: "H.265 bietet bessere Videoqualität als H.264. Verwenden Sie H.265, wenn Ihr Decoder es unterstützt.",
      tipVbr: "Im VBR-Modus wird die Bitrate durch \"Qualitätsbereich\" reguliert; Qualitätsbereich begrenzt QP-Werte;<br>Die Auswahl von \"Fast-Hoch~Hoch\" oder \"Hoch\" führt zu sehr hoher tatsächlicher Bitrate, wodurch die eingestellte Bitrate bedeutungslos wird;<br>Nur wenn Qualitätsbereich \"Fast-Niedrig~Hoch\" ist, hat die Bitrate Referenzwert;",
      tipCbr: "\"Starkes CBR\" wird für CATV-Systeme verwendet, um stabile TS-Bitrate zu gewährleisten. Bei \"Starkem CBR\" bei 1080P sollte die Bitrate nicht unter 5000kbit/s liegen, 8000kbit/s empfohlen.",
      tipGop: "Angenommen Eingangs-Videobildrate ist n, übliche Werte sind 60, 50, 30, 25;<br>GOP-Intervall wird typischerweise auf n * 2 gesetzt, übliche Werte sind 120, 100, 60, 50;<br>Bei Bildrate auf Auto, wenn n > 30, ist Kodierungsbildrate n / 2, sonst gleich n"
    },

    // TS/Multicast settings
    ts: {
      tsUri: "TS-Stream-URL:",
      multicastIp: "Multicast-IP:",
      multicastPort: "Multicast-Port:",
      sapName: "SAP-Name:",
      tsVideoPid: "TS-Video-PID:",
      tsAudioPid: "TS-Audio-PID:",
      tsTransportStreamId: "TS Transport Stream ID:",
      tsOriginalNetworkId: "TS Original Network ID:",
      tsPmtStartPid: "TS PMT Start PID:",
      tsStartPid: "TS Start PID:",
      tsTablesVersion: "TS Tables Version:",
      tsServiceId: "TS Service ID:",
      tsServiceName: "TS Service Name:",
      tsProviderName: "TS Provider Name:",
      tsPcrPeriod: "TS PCR Period (ms):",
      conformSystemB: "Konform zu System B (DVB):",
      tsNullPacket: "TS-Leer-Pakete:",
      noInsert: "Nicht einfügen",
      insert12: "Einfügen (1.2x)",
      insert13: "Einfügen (1.3x)",
      insert15: "Einfügen (1.5x)",
      insert20: "Einfügen (2x)",
      insert25: "Einfügen (2.5x)",
      tsTdt: "TS TDT:",
      // Tips
      tipMulticast: "Multicast-Adresse kann auch Broadcast- oder Unicast-Adressen akzeptieren, das System erkennt automatisch.",
      tipVlc: "Wenn VLC Multicast nicht abspielen kann, prüfen Sie, ob Ihr Computer mehrere Netzwerkadapter hat, versuchen Sie einen anderen Adapter.",
      tipSap: "SAP-Name kann auf unterstützten Geräten angezeigt werden, z.B. VLCs Playlist -> Lokales Netzwerk.",
      tipAdvanced: "TS-erweiterte Einstellungen müssen normalerweise nicht angepasst werden.",
      tipIptv: "Bei Verbindung mit IPTV-Systemen sollten TS-Leer-Pakete auf 1.3x eingestellt werden, das Gerät fügt automatisch Leer-Pakete ein, um stabile Bitrate zu gewährleisten;<br>Diese Einstellung gilt nur für \"Starkes CBR\"-Modus."
    },

    // RTSP settings
    rtsp: {
      rtspUri: "RTSP-Stream-URL:",
      enableMulticast: "Aktivieren (Multicast)",
      enableTcpOnly: "Aktivieren (Nur TCP)",
      multicastIp: "RTSP-Multicast-IP:",
      multicastPort: "RTSP-Multicast-Port:",
      // Tips
      tipEnable: "Bei Auswahl von Aktivieren wird der tatsächliche Transport (UDP oder TCP) vom Client bestimmt. In VLC können Sie z.B. \"RTP over RTSP(TCP)\" aktivieren, um TCP zu verwenden.",
      tipTcpOnly: "Auswahl von Aktivieren (Nur TCP) zwingt das Gerät, TCP zu verwenden.",
      tipUdp: "UDP kann aufgrund von Netzwerkproblemen gelegentlich Pakete verlieren. Wenn alle Clients es unterstützen, wird TCP empfohlen.",
      tipMulticast: "Auswahl von Aktivieren (Multicast) verwendet 4 aufeinanderfolgende Ports ab dem \"RTSP-Multicast-Port\"."
    },

    // RTMP settings
    rtmp: {
      rtmpUri: "RTMP-Stream-URL:",
      publishUri0: "RTMP(S)/RTSP Publish-URL 0:",
      publishUri1: "RTMP(S)/RTSP Publish-URL 1:",
      publishUri2: "RTMP(S)/RTSP Publish-URL 2:",
      mode: "RTMP-Stream-Modus:",
      modeStandard: "Standard (Enhanced RTMP)",
      modeLegacy: "Legacy (CodecID 12)",
      // Tips
      tipPublish: "Publish-URLs 0-2 dienen zum Pushen von Streams zu anderen LAN- oder öffentlichen RTMP/RTSP-Servern, unterstützen H.265/H.264.",
      tipBuiltin: "Dieses Gerät hat einen eingebauten RTMP-Server, der H.264/H.265-Pull-Streaming unterstützt;<br>Wenn die RTMP-Stream-URL auf \"/live/0\" gesetzt ist, kann PotPlayer über http://Geräte-IP/live/0 abspielen.",
      tipMode: "Der RTMP-Stream-Modus gilt nur für H.265 und wirkt sich auch auf den FLV-Stream aus;"
    },

    // SRT settings
    srt: {
      listenerUri: "SRT-Listener-URL:",
      callerUri: "SRT-Caller-URL:",
      // Tips
      tipListener: "SRT-Listener-Modus lauscht auf einem lokalen Port, damit Player den Stream abrufen können.<br>Beispiel: srt://0.0.0.0:9000 setzen;<br>VLC kann dann \"srt://Geräte-IP:9000\" abspielen.<br>Streamid-Beispiel:<br>srt://0.0.0.0:9000?streamid=channel100<br>Passwort-Beispiel (mindestens 10 Zeichen):<br>srt://0.0.0.0:9000?passphrase=0123456789<br>Streamid und Passwort:<br>srt://0.0.0.0:9000?streamid=channel100&passphrase=0123456789",
      tipCaller: "SRT-Caller-Modus pusht den Stream zu einem anderen Server, z.B.:<br>srt://live.example.com:9000?streamid=channel100&latency=120&maxbw=8000000",
      tipParams: "Unterstützte SRT-Parameter (siehe SRT-Protokoll für Details):<br>streamid - Stream-Kennung für Multiplexing<br>passphrase - Verschlüsselungspasswort, SRT erfordert 10-79 Zeichen<br>pbkeylen - Schlüssellänge: 16 (AES-128), 24 (AES-192), 32 (AES-256)<br>latency - Latenz in ms (20-8000ms)<br>maxbw - max. Bandbreite in Bytes/Sek<br>rcvbuf - Empfangspuffergröße<br>sndbuf - Sendepuffergröße<br>ipttl - IP-TTL-Wert<br>conntimeo - Verbindungstimeout in ms"
    },

    // WebRTC settings
    webrtc: {
      preview: "WebRTC-Vorschau:",
      whipServer: "WHIP-Server:",
      whipToken: "WHIP-Bearer-Token:",
      p2pServer: "P2P-Server:",
      p2pUuid: "P2P-UUID:",
      p2pToken: "P2P-Auth-Token:",
      p2pAuthToken: "P2P-Auth-Token:",
      regenerate: "Neu generieren",
      // Tips
      tipPreview: "WebRTC-Vorschau in gängigen Browsern unterstützt H.264-Video und Opus/G.711-Audio-Kodierung.<br>Audio auf Opus zu setzen liefert bessere Ergebnisse. Wenn nicht auf Opus gesetzt, Standard G.711 8K.",
      tipWhip: "WHIP-Streaming verbindet sich mit Standard-WHIP-Servern. Kopieren Sie die Adresse von Ihrem Server.<br>Bearer-Token kann leer sein.",
      tipP2p: "Nach Aktivierung des P2P-Servers wird die Betrachtungs-URL auf der Statusseite angezeigt.<br>P2P-Auth-Token kann leer sein.",
      tipP2pNote: "P2P kann in komplexen Intranet-Umgebungen möglicherweise keine Verbindung herstellen."
    },

    // TRTC settings
    trtc: {
      roomId: "TRTC-Raum-ID:",
      userId: "TRTC-Benutzername:",
      roomKey: "TRTC-Raum-Key:",
      userSig: "TRTC UserSig:",
      sdkAppId: "TRTC SDKAppID:",
      roomIdType: "TRTC-Raum-ID-Typ:",
      roomIdNumber: "Zahl",
      roomIdString: "Zeichenkette",
      // Short enum labels for template use
      number: "Zahl",
      string: "Zeichenkette",
      // Tips
      tipTrtc: "Pusht Streams zum Tencent TRTC-Server. Kopieren Sie die Adresse vom Server.<br>Tencent TRTC unterstützt derzeit nur H.264."
    },

    // HLS settings
    hls: {
      hlsTsUri: "HLS-TS-Stream-URL:",
      hlsMp4Uri: "HLS-MP4-Stream-URL:",
      hlsPushUri: "HLS-PUSH-URL:",
      hlsPushUrl: "HLS-PUSH-URL:",
      // Tips
      tipHls: "Wenn HLS TS/MP4 aktiviert ist, puffert das Gerät Daten im Speicher basierend auf Segmentzeit und -anzahl in den erweiterten Einstellungen.<br>Segmentzeit und -anzahl auf 3 zu setzen reduziert Speicherverbrauch.",
      tipPush: "HLS-Publish-URL dient zum Pushen zu Servern wie YouTube."
    },

    // MP4/FLV/Other settings
    other: {
      mp4Uri: "MP4-Stream-URL:",
      flvUri: "FLV-Stream-URL:",
      icecastUri: "ICECAST-PUSH-URL:",
      icecastPushUrl: "ICECAST-PUSH-URL:",
      shoutcastUri: "Shoutcast-PUSH-URL:",
      shoutcastPushUrl: "Shoutcast-PUSH-URL:",
      // Tips
      tipMp4: "Wenn MP4-Stream aktiviert ist, kann er direkt im Browser abgespielt werden.<br>FLV-Stream unterstützt H.265/H.264 auf diesem Gerät, aber VLC und andere Player unterstützen derzeit nur H.264.<br>ICECAST/Shoutcast unterstützt nur MP3, zum Pushen zu Audio-Servern.",
      tipShoutcast: "Shoutcast unterstützt v1 und v2;<br>Beispiele:<br>http://passwort@shoutcast_server:8000<br>http://passwort@shoutcast_server:8000?sid=100<br>http://passwort@shoutcast_server:8000?icy-name=Stream&icy-genre=Pop<br>Format:<br>http://passwort@Server-IP:Listen-Port[?Parameter...]; Benutzername kann weggelassen werden (Standard \"source\").<br>Verwenden Sie den \"Listen-Port\" des Servers, das Gerät verbindet sich automatisch mit dem Quellport (Listen-Port + 1).<br>Unterstützte Parameter:<br>sid: Shoutcast v2 Stream-ID (Standard 1)<br>icy-name: Streamname (optional)<br>icy-genre: Genre (optional)<br>icy-url: Website-URL (optional)<br>icy-pub: öffentlich 0/1 (optional)"
    },

    // Common
    common: {
      save: "Speichern",
      disabled: "Deaktiviert",
      enabled: "Aktiviert"
    },

    // Error and success messages
    messages: {
      success: "Einstellungen gespeichert!",
      failed: "Einstellungen fehlgeschlagen!",
      emptyError: "Einstellungen dürfen nicht leer sein!",
      trtcH264Only: "Bei aktiviertem TRTC wird nur H.264-Kodierung unterstützt. Automatisch geändert.",
      mp3Required: "Bitte setzen Sie Audio-Kodierung auf MP3!",
      // Encoding validation
      frameRateError: "Bildrate muss eine Ganzzahl zwischen 5-60 sein!",
      gopError: "GOP-Intervall muss eine Ganzzahl zwischen 5-300 sein!",
      mjpegQualityError: "MJPEG-Qualität muss eine Ganzzahl zwischen 10-99 sein!",
      hlsBitrateWarning: "Bitrate nicht im Bereich 32~8000, HLS TS/MP4/PUSH-Streams deaktiviert.",
      trtcCodecWarning: "Codec ist nicht H.264, TRTC deaktiviert.",
      hlsBitrateError: "Bitrate nicht im Bereich 32~8000, kann HLS TS/MP4/PUSH-Streams nicht aktivieren",
      // SRT validation
      srtListenerPortError: "SRT-Listener-Port muss eine Ganzzahl zwischen 1-65535 sein!",
      srtListenerFormatError: "Ungültiges SRT-Listener-URL-Format!",
      srtCallerFormatError: "Ungültiges SRT-Caller-URL-Format!",
      srtPasswordLengthError: "SRT-Passwortlänge muss zwischen 10-32 sein!",
      srtLatencyError: "SRT-Latenz muss eine Ganzzahl zwischen 1-10000 sein!",
      srtBandwidthError: "SRT-Bandbreite muss eine Ganzzahl zwischen 0-102400 sein!",
      // RTMP validation
      rtmpFormatError: "RTMP(S)/RTSP-Publish-URL muss mit rtmp://, rtmps:// oder rtsp:// beginnen",
      // HLS validation
      hlsFormatError: "Ungültiges HLS-Publish-URL-Format!",
      // RTSP validation
      rtspMulticastIpError: "Ungültiges RTSP-Multicast-IP-Format!",
      rtspMulticastPortError: "RTSP-Multicast-Port muss eine Ganzzahl zwischen 1-65535 sein!",
      // TS validation
      multicastIpError: "Ungültiges Multicast-IP-Format!",
      multicastPortError: "Multicast-Port muss eine Ganzzahl zwischen 1-65535 sein!",
      tsTransportIdError: "TS Transport Stream ID muss eine Ganzzahl zwischen 1-65535 sein!",
      tsNetworkIdError: "TS Original Network ID muss eine Ganzzahl zwischen 1-65535 sein!",
      tsPmtPidError: "TS PMT Start PID muss eine Ganzzahl zwischen 16-7936 sein!",
      tsStartPidError: "TS Start PID muss eine Ganzzahl zwischen 32-3840 sein!",
      tsPidConflict: "TS Start PID und TS PMT Start PID müssen unterschiedlich sein!",
      tsVersionError: "TS Tables Version muss eine Ganzzahl zwischen 0-31 sein!",
      tsServiceIdError: "TS Service ID muss eine Ganzzahl zwischen 1-65535 sein!",
      tsVideoPidError: "TS-Video-PID muss eine Ganzzahl zwischen 16-8190 sein!",
      tsAudioPidError: "TS-Audio-PID muss eine Ganzzahl zwischen 16-8190 sein!",
      tsVideoPidConflict: "TS-Video-PID und TS-Audio-PID müssen unterschiedlich sein!",
      tsAudioPmtConflict: "TS-Audio-PID und TS PMT Start PID müssen unterschiedlich sein!",
      tsVideoPmtConflict: "TS-Video-PID und TS PMT Start PID müssen unterschiedlich sein!",
      // Other validation
      icecastFormatError: "Ungültiges Icecast-Publish-URL-Format!",
      shoutcastFormatError: "Ungültiges Shoutcast-Publish-URL-Format!"
    }
  }
};
