diff --git a/project.inlang/settings.json b/project.inlang/settings.json index e7b6a92c..4cc57fa0 100644 --- a/project.inlang/settings.json +++ b/project.inlang/settings.json @@ -1,7 +1,7 @@ { "$schema": "https://inlang.com/schema/project-settings", "sourceLanguageTag": "en", - "languageTags": ["ca", "en", "fr", "it", "pt-BR", "pt-PT"], + "languageTags": ["ca", "de", "en", "fr", "it", "pt-BR", "pt-PT"], "modules": [ "https://cdn.jsdelivr.net/npm/@inlang/plugin-json@latest/dist/index.js", "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-empty-pattern@latest/dist/index.js", diff --git a/src/localize/languages/de.json b/src/localize/languages/de.json new file mode 100644 index 00000000..8208a79b --- /dev/null +++ b/src/localize/languages/de.json @@ -0,0 +1,435 @@ +{ + "actions": { + "abort": "Aktion abbrechen", + "confirmation": "Bist du sicher, dass die Aktion durchgeführt werden soll?" + }, + "common": { + "advanced_camera_card": "Erweiterte Kamera-Karte", + "advanced_camera_card_description": "Eine Erweiterte Kamera-Karte", + "folder": "Ordner", + "no_folder": "Keine Ordner" + }, + "config": { + "cameras": { + "always_error_if_entity_unavailable": "Nicht verfügbare Entität immer als Fehler behandeln", + "capabilities": { + "capabilities": { + "clips": "Clips", + "favorite-events": "Favorisierte Ereignisse", + "favorite-recordings": "Favorisierte Aufzeichnungen", + "live": "Live", + "menu": "Menü", + "ptz": "PTZ", + "recordings": "Aufzeichnungen", + "seek": "Suche", + "snapshots": "Schnappschüsse", + "substream": "Substream" + }, + "disable": "Deaktivieren", + "disable_except": "Deaktivieren außer", + "editor_label": "Kamera Features" + }, + "cast": { + "dashboard": { + "dashboard_path": "Dashboard Pfad", + "view_path": "Zeige Pfad" + }, + "editor_label": "Sende Optionen", + "method": "Sende Methode", + "methods": { + "standard": "Standart" + } + }, + "dimensions": { + "aspect_ratio": "Fixes Seitenverhältnis", + "editor_label": "Kamera Abmessungen", + "layout": { + "editor_label": "Kamera Layout", + "pan": { + "x": "Verschiebe um horizontal Prozente", + "y": "Verschiebe um vertikal Prozente" + }, + "position": { + "editor_label": "Layout Abdeckung Position" + }, + "view_box": { + "bottom": "Untere inset Prozente", + "editor_label": "Layout Anzeige Box", + "left": "Linke inset Prozente", + "right": "Rechte inset Prozente", + "top": "Obere inset Prozente" + }, + "zoom": "Zoom Faktor" + }, + "rotation": "Rotation", + "rotations": { + "0": "Keine Rotation", + "90": "90 Grad im Uhrzeigersinn", + "180": "180 Grad im Uhrzeigersinn", + "270": "270 Grad im Uhrzeigersinn" + } + }, + "go2rtc": { + "url": "go2rtc URL" + }, + "proxy": { + "dynamic": "Dynamischer Proxy", + "editor_label": "Kamera Proxy", + "live": "Live Proxy", + "media": "Medien Proxy", + "modes": { + "auto": "Proxy automatisch konfigurieren", + "false": "Proxy deaktiviert", + "true": "Proxy aktiviert" + }, + "ssl_ciphers": { + "auto": "SSL ciphers automatisch konfiguriert", + "default": "Standard SSL ciphers", + "editor_label": "SSL ciphers", + "insecure": "Unsichere SSL ciphers", + "intermediate": "Zwischen SSL ciphers", + "modern": "Moderne SSL ciphers" + }, + "ssl_verification": { + "auto": "SSL Überprüfung automatisch konfiguriert", + "editor_label": "SSL Überprüfung", + "false": "SSL Überprüfung deaktiviert", + "true": "SSL Überprüfung aktiviert" + } + }, + "reolink": { + "editor_label": "Reolink Optionen", + "media_resolution": { + "editor_label": "Medien Auflösung", + "high": "Hohe Auflösung", + "low": "Niedrige Auflösung" + }, + "url": "Reolink UI URL" + }, + "triggers": { + "events": { + "clips": "Ereignisse mit neuen Clips", + "editor_label": "Auslöser Ereignisse", + "events": "Alle Ereignisse", + "snapshots": "Ereiggnisse mit neuen Schnappschüssen" + } + } + }, + "common": { + "controls": { + "builtin": "Eingebettete Video Bedienelemente", + "thumbnails": { + "media_type": "Ob Vorschau von Ereignissen oder Aufzeichnungen angezeigt werden", + "media_types": { + "events": "Ereignisse", + "recordings": "Aufzeichnungen" + } + }, + "timeline": { + "format": { + "24h": "24h Uhr", + "editor_label": "Datums & Zeitformat" + }, + "pan_mode": "Standard Pan Modus", + "pan_modes": { + "pan": "Pan", + "seek": "Pan durchsucht alle Medien", + "seek-in-camera": "Pan durchsucht nur die ausgewählte Kamera", + "seek-in-media": "Pan durchsucht nur im ausgewählten Medien-Eintrag" + } + }, + "wheel": "Laufrad bedient Medien-Karussel" + }, + "display": { + "editor_label": "Anzeige", + "grid_columns": "Genaue Nummer der Gitterspalten", + "grid_max_columns": "Maximale Nummer der Gitterspalten", + "grid_selected_position": "Position des ausgewählten Mediums im Gitter", + "grid_selected_positions": { + "default": "Standardposition des ausgewählten Eintrags", + "first": "Ausgewählter Eintrag als erstes im Gitter", + "last": "Ausgewählter Eintrag als letztes im Gitter" + }, + "grid_selected_width_factor": "Breite für ausgewähltes Medium um diesen Faktor vergrößern", + "mode": "Modus" + }, + "image": { + "entity": "Entität für Entitäts-Modus", + "entity_parameters": "Abfrage-Parameter für Entitäts-basierende Photo URLs (z.B. width=1920&height=1080)", + "modes": { + "entity": "Entität mit entity_picture Attribut", + "screensaver": "Eingebettetes Bild für Bildschirmschoner" + } + }, + "media_action_conditions": { + "microphone_mute": "Bei Mikrofon Stummschaltung", + "microphone_unmute": "Bei Mikrofon Reaktivierung" + }, + "timeline": { + "style": "Zeitleisten Stil", + "styles": { + "ribbon": "Ereignisse auf einer einzigen Schleife", + "stack": "Gestapelte & gruppierte Ereignisse" + } + } + }, + "dimensions": { + "height": "Kartenhöhe in CSS Einheiten (z.B. '500px')" + }, + "folders": { + "ha": { + "editor_label": "Home Assistant Medien Ordner Optionen", + "path_info": "Zusätzliche Pfad-Vergleichs-Funktionalität wird über den Texteditor bereitgestellt", + "url": "URL des Medienordners" + }, + "icon": "Icon für diesen Ordner", + "id": "Einzigartige ID für diesen Ordner in dieser Karte", + "title": "Bezeichnung für diesen Ordner", + "type": "Ordnertyp", + "types": { + "ha": "Home Assistant Medien Ordner" + } + }, + "live": { + "controls": { + "ptz": { + "editor_label": "PTZ", + "hide_home": "Verstecke Start & Vorlagen Bedienung", + "hide_pan_tilt": "Verstecke Pan & Tilt Steuerung", + "hide_zoom": "Verstecke Zoom-Steuerung", + "mode": "Modus", + "modes": { + "off": "Aus", + "on": "An" + }, + "orientation": "Ausrichtung", + "orientations": { + "horizontal": "Horizontal", + "vertical": "Vertikal" + }, + "position": "Position", + "positions": { + "bottom-left": "Unten links", + "bottom-right": "Oben rechts", + "top-left": "Unten links", + "top-right": "Oben rechts" + } + } + }, + "microphone": { + "always_connected": "Mikrofon immer verbunden lassen", + "disconnect_seconds": "Sekunden nach denen das Mikrofon getrennt wird (0=niemals)", + "editor_label": "Mikrofon", + "enabled": "Mikrofon aktivieren", + "mute_after_microphone_mute_seconds": "Sekunden nach denen das Mikrofon stumm geschalten wird, um eingehendes Audio stumm zu schalten" + }, + "zoomable": "Live-Kameras können gezoomt / gepant werden" + }, + "media_viewer": { + "snapshot_click_plays_clip": "Auf einen Schnappschuss klicken gibt den Clip wieder", + "zoomable": "Medien Betrachter kann gezoomt / gepannt werden" + }, + "menu": { + "buttons": { + "display_mode": "Anzeige-Modus", + "folders": "Ordner", + "iris": "Iris / Standard Ansicht / Menü anzeigen", + "microphone": "Mikrofon", + "mute": "Stummschalten / Aufheben", + "permanent": "Zeige wenn das Menü versteckt ist", + "play": "Wiedergabe / Pause", + "ptz_controls": "Zeige PTZ Steuerung", + "ptz_home": "PTZ Start", + "recordings": "Aufzeichnungen", + "screenshot": "Bildschirmfoto", + "type": "Schalter-Typ", + "types": { + "momentary": "Momentan", + "toggle": "Umschalten" + } + }, + "styles": { + "hover-card": "Hover-Menü (ganze Karte)" + } + }, + "performance": { + "features": { + "card_loading_effects": "Karten-Ladeeffekt", + "card_loading_indicator": "Karten-Ladeanzeige", + "max_simultaneous_engine_requests": "Maximal gleichzeitige Anfragen an Kamera-Backend" + } + }, + "profiles": { + "casting": "Sende", + "editor_label": "Einstellungsprofile", + "low-performance": "Niedrige Leistung", + "scrubbing": "Video durchstöbern" + }, + "remote_control": { + "entities": { + "camera": "Entität um Kamera zu steuern", + "editor_label": "Entität für Fernsteuerung" + } + }, + "status_bar": { + "height": "Statusleisten-Höhe in Pixel", + "items": { + "enabled": "Eintrag aktiviert", + "engine": "Kamera-Backend", + "live_provider": "Live-Anbieter", + "priority": "Eintrags-Priorität", + "resolution": "Auflösung", + "technology": "Technologie", + "title": "Titel" + }, + "popup_seconds": "Statusleiste Popup in Sekunden", + "position": "Statusleiste Position", + "positions": { + "bottom": "Unten ausgerichtet", + "top": "Oben ausgerichtet" + }, + "style": "Statusleiste Stil", + "styles": { + "hover": "Hover Statusleiste", + "hover-card": "Hover Statusleiste (ganze Karte)", + "none": "Keine Statusleiste", + "outside": "Außerhalb Statusleiste", + "overlay": "Über Statusleiste", + "popup": "Statusleiste Popup" + } + }, + "view": { + "default_reset": { + "after_interaction": "Zurücksetzen auf Standardansicht nach Ende der Benutzerinteraktion", + "editor_label": "Verhalten Zurücksetzen auf Standardansicht", + "entities": "Nach Zustandsänderung der Entität Zurücksetzen auf Standardansicht", + "interaction_mode": "Wie der Standard-Reset bei Benutzerinteraktion verhalten soll", + "interaction_modes": { + "active": "Zeige nur wenn Karte Nutzerinteraktion erfährt", + "all": "Zurücksetzen unabhängig von Benutzerinteraktion", + "inactive": "Nur zurücksetzen wenn keine Nutzerinteraktion" + } + }, + "dim": "Abdimmen wenn keine Interaktion", + "interaction_seconds": "Sekunden nach der Interaktion aktiv bleiben (0=niemals)", + "keyboard_shortcuts": { + "editor_label": "Tastenkürzel", + "enabled": "Tastenkürzel aktiviert", + "ptz_down": "PTZ unten", + "ptz_home": "PTZ Start", + "ptz_left": "PTZ Links", + "ptz_right": "PTZ Rechts", + "ptz_up": "PTZ Oben", + "ptz_zoom_in": "PTZ Hereinzoomen", + "ptz_zoom_out": "PTZ Herauszoomen" + }, + "theme": { + "themes": { + "dark": "Dunkel", + "editor_label": "Farbschema", + "ha": "Home Assistant", + "light": "Links", + "traditional": "Traditionell" + } + }, + "triggers": { + "actions": { + "editor_label": "Auslöseaktion", + "interaction_mode": "Wie Aktion verarbeiten, wenn Karte Nutzerinteraktion hat", + "interaction_modes": { + "active": "Nur auslösen, wenn Karte Nutzerinteraktion hat", + "all": "Auslösen unabhängig von Nutzerinteraktion", + "inactive": "Nur auslösen wenn Karte keine Nutzerinteraktion hat" + }, + "trigger": "Auslöseaktion", + "triggers": { + "default": "Wechseln in oder Anpassen der Standardansicht", + "live": "Wechseln in oder Anpassen der Live-Ansicht", + "media": "Wechseln in oder Anpassen der Medienansicht", + "none": "Keine Aktion" + }, + "untrigger": "Aktion für deaktivieren", + "untriggers": { + "default": "Wechseln auf Standardansicht / Kamera", + "none": "Keine Aktion" + } + }, + "editor_label": "Auslöser-Verhalten", + "filter_selected_camera": "Nur auslösen bei ausgewählter Kamera" + }, + "views": { + "folder": "Medienordner", + "folders": "Ordner-Gallerie", + "recording": "Neueste Aufzeichnungen", + "recordings": "Aufzeichnungsgallerie" + } + } + }, + "display_modes": { + "grid": "Zeige Medienansicht für jede Kamera in einem Gitter", + "single": "Zeige einzelne Medienansicht" + }, + "editor": { + "add_new_folder": "Neuen Ordner hinzufügen", + "dimensions": "Karten-Abmessungen", + "dimensions_secondary": "Karten-Abmessungen & Form Optionen", + "folders": "Ordner", + "folders_secondary": "Welche Ordner auf dieser Karte darstellen", + "performance": "Leistung", + "performance_secondary": "Optionen für Leistung der Karte", + "profiles": "Konfigurationsprofile", + "profiles_secondary": "Wähle Voreinstellungen der Standardeinstellungen", + "remote_control": "Fernsteuerung", + "remote_control_secondary": "Optionen für Fernsteuerung der Karte", + "status_bar": "Statusleiste", + "status_bar_secondary": "Statusleiste look & feel Optionen" + }, + "elements": { + "ptz": { + "presets": "Voreinstellung" + } + }, + "error": { + "awaiting_folder": "Warte auf Laden des Ordners", + "awaiting_live": "Warte auf Live-Stream ...", + "awaiting_media": "Warte auf Medium ...", + "camera_initialization": "Kamera-Initialisierung fehlgeschlagen", + "camera_initialization_reolink": "Konnte Reolink-Kamera nicht initialisieren", + "configuration": "Konfiguration überprüfen", + "duplicate_folder_id": "Doppelte Ordner-ID für den folgen Ordner, benutzte Parameter 'id' um Ordner eindeutig zu identifizieren", + "failed_proxy": "Konnte mich nicht über Home Assistant verbinden", + "fetching_diagnostics": "Rufe Diagnosedaten ab", + "invalid_configuration_override": "Ungültige Konfiguration für Ersetzung", + "no_camera_or_media_for_timeline": "Keine Kamera oder Medium für Zeitleiste", + "no_dashboard_or_view": "Beide Prameter 'dashboard_path' und 'view_path' sind für die Sende-Methode 'dashboard' erforderlich", + "no_supported_camera": "Die ausgewählte Kamera unterstützt diese Ansicht nicht", + "no_supported_cameras": "Keine Kameras unterstützen diese Ansicht", + "stream_not_loading": "Der Videostream wurde nicht geladen. Dafür kann es verschiedene Gründe geben. Wenn konfiguriert (Standard), wird ein Bild jede Sekunde angezeigt, bis der Steam richtig lädt", + "too_many_automations": "Zu viele automatisierte Anfragen, bitte prüfe deine Konfiguration auf etwaige Schleifen" + }, + "key_assigner": { + "assign": "Zuweisen", + "modifiers": { + "alt": "Alt", + "ctrl": "Ctrl", + "meta": "Meta", + "shift": "Shift" + }, + "unassign": "Nicht zuweisen" + }, + "media_filter": { + "select_tag": "Tag auswählen ...", + "tag": "Tag", + "whens": { + "custom": "Angepasst" + } + }, + "media_viewer": { + "unseekable": "Suchzeit nicht im Medium gefunden" + }, + "thumbnail": { + "download": "Medium herunterladen", + "tag": "Tag", + "title": "Titel" + } +} diff --git a/src/localize/localize.ts b/src/localize/localize.ts index c8495eb7..5857f7a3 100644 --- a/src/localize/localize.ts +++ b/src/localize/localize.ts @@ -56,14 +56,16 @@ export const loadLanguages = async (hass: HomeAssistant): Promise => { const lang = getLanguage(hass); if (lang === 'ca') { languages[lang] = await import('./languages/ca.json'); + } else if (lang === 'de') { + languages[lang] = await import('./languages/de.json'); + } else if (lang === 'fr') { + languages[lang] = await import('./languages/fr.json'); } else if (lang === 'it') { languages[lang] = await import('./languages/it.json'); } else if (lang === 'pt') { languages[lang] = await import('./languages/pt-PT.json'); } else if (lang === 'pt_BR') { languages[lang] = await import('./languages/pt-BR.json'); - } else if (lang === 'fr') { - languages[lang] = await import('./languages/fr.json'); } if (lang) {