diff --git a/src/localize/languages/pt-PT.json b/src/localize/languages/pt-PT.json new file mode 100644 index 00000000..58e28c96 --- /dev/null +++ b/src/localize/languages/pt-PT.json @@ -0,0 +1,470 @@ +{ + "common": { + "frigate_card": "Cartão Frigate", + "frigate_card_description": "Um cartão da Lovelace para usar com Frigate", + "live": "Ao Vivo", + "no_media": "Sem média", + "recordings": "Gravações", + "version": "Versão" + }, + "config": { + "cameras": { + "camera_entity": "Entidade da Câmera", + "dependencies": { + "all_cameras": "Mostrar eventos para todas as câmeras nesta câmera", + "cameras": "Mostrar eventos para câmeras específicas nesta câmera", + "editor_label": "Opções de dependência" + }, + "engines": { + "editor_label": "Editor de etiquetas" + }, + "frigate": { + "camera_name": "Nome da câmera do Frigate (detectado automaticamente pela entidade)", + "client_id": "ID do cliente do Frigate (para >1 servidor Frigate)", + "editor_label": "Opções do Frigate", + "labels": "Etiquetas", + "url": "URL do servidor Frigate", + "zones": "Zonas" + }, + "go2rtc": { + "editor_label": "Editor de etiquetas", + "modes": { + "editor_label": "Editor de etiquetas", + "mjpeg": "Mjpeg", + "mp4": "Mp4", + "mse": "Mse", + "webrtc": "Webrtc" + }, + "stream": "Stream" + }, + "hide": "Esconder", + "icon": "Ícone para esta câmera (detectado automaticamente pela entidade)", + "id": "ID exclusivo para esta câmera nesse cartão", + "image": { + "editor_label": "Editor etiquetas", + "refresh_seconds": "Atualizar em segundos", + "url": "Link" + }, + "live_provider": "Fonte de visualização ao vivo para esta câmera", + "live_provider_options": { + "editor_label": "Editor de etiquetas" + }, + "live_providers": { + "auto": "Automatico", + "go2rtc": "Go2rtc", + "ha": "Ha", + "image": "Imagem", + "jsmpeg": "JSMpeg", + "webrtc-card": "Cartão WebRTC (de @AlexxIT)" + }, + "motioneye": { + "editor_label": "Directoria pre-definido", + "images": { + "directory_pattern": "Directoria pre-definido", + "file_pattern": "Ficheiro pre-definido" + }, + "movies": { + "directory_pattern": "Directoria pre-definida", + "file_pattern": "Ficheiro pre-definido" + }, + "url": "Link" + }, + "title": "Título para esta câmera (detectado automaticamente pela entidade)", + "triggers": { + "editor_label": "Opções de activação", + "entities": "Activar a partir de outras entidades", + "motion": "Activar detectando automaticamente o sensor de movimento", + "occupancy": "Activar detectando automaticamente o sensor de ocupação" + }, + "webrtc_card": { + "editor_label": "Opções do cartão WebRTC", + "entity": "Entidade de câmera de cartão WebRTC (não é uma câmera Frigate)", + "url": "URL da câmera do cartão WebRTC" + } + }, + "common": { + "controls": { + "filter": { + "editor_label": "Editor de titulos", + "mode": "Modo", + "modes": { + "left": "Esquerda", + "none": "Nenhum", + "right": "Direita" + } + }, + "next_previous": { + "editor_label": "Editor de titulos", + "size": "Tamanho de controle próximo e anterior", + "style": "Estilo do controle próximo e anterior", + "styles": { + "chevrons": "Setas", + "icons": "Ícones", + "none": "Nenhum", + "thumbnails": "Miniaturas" + } + }, + "thumbnails": { + "editor_label": "Editor de titulos", + "media": "Mostrar miniaturas de clipes ou snapshots", + "medias": { + "clips": "Miniaturas de clipes", + "snapshots": "Miniaturas de Snapshots" + }, + "mode": "Modos", + "modes": { + "above": "Miniaturas acima da mídia", + "below": "Miniaturas abaixo da mídia", + "left": "Miniaturas em uma gaveta à esquerda", + "none": "Sem miniaturas", + "right": "Miniaturas em uma gaveta à direita" + }, + "show_details": "Mostrar detalhes", + "show_download_control": "Mostrar o botão de download", + "show_favorite_control": "Mostrar o botão de favorito nas miniaturas", + "show_timeline_control": "Mostrar a linha do tempo nas miniaturas", + "size": "Tamanho das miniaturas em pixels" + }, + "timeline": { + "editor_label": "Controles de linha do tempo", + "mode": "Modo", + "modes": { + "above": "Por cima", + "below": "Abaixo", + "none": "Nenhum" + } + }, + "title": { + "duration_seconds": "Segundos para exibir o pop-up (0 = para sempre)", + "editor_label": "Editor de titulos", + "mode": "Modo de exibição de título de mídia", + "modes": { + "none": "Sem exibição de título", + "popup-bottom-left": "Pop-up no canto inferior esquerdo", + "popup-bottom-right": "Pop-up no canto inferior direito", + "popup-top-left": "Pop-up no canto superior esquerdo", + "popup-top-right": "Pop-up no canto superior direito" + } + } + }, + "layout": { + "fit": "Fit", + "fits": { + "contain": "Conter", + "cover": "Tapar", + "fill": "Preencher" + }, + "position": { + "x": "Percentagem da localização horizontal", + "y": "Percentagem da localização vertical" + } + }, + "media_action_conditions": { + "all": "Todas as oportunidades", + "hidden": "Ao ocultar o navegador/aba", + "never": "Nunca", + "selected": "Ao selecionar", + "unselected": "Ao desselecionar", + "visible": "Ao mostrar o navegador/aba" + }, + "timeline": { + "clustering_threshold": "A contagem de eventos nos quais eles são agrupados (0 = sem agrupamento)", + "media": "A mídia que a linha do tempo exibe", + "medias": { + "all": "Todos os tipos de mídia", + "clips": "Clipes", + "snapshots": "Instantâneos" + }, + "show_recordings": "Mostrar gravações", + "window_seconds": "A duração padrão da visualização da linha do tempo em segundos" + } + }, + "dimensions": { + "aspect_ratio": "Proporção padrão (e.g. '16:9')", + "aspect_ratio_mode": "Modo de proporção", + "aspect_ratio_modes": { + "dynamic": "A proporção se ajusta à mídia", + "static": "Proporção estática", + "unconstrained": "Proporção irrestrita" + } + }, + "image": { + "layout": "Layout", + "mode": "Modo de visualização de imagem", + "modes": { + "camera": "Instantâneo da câmera do Home Assistant, da entidade de câmera", + "screensaver": "Logo Frigate embutido", + "url": "Imagem arbitrária especificada por URL" + }, + "refresh_seconds": "Número de segundos após o qual atualizar (0 = nunca)", + "url": "Imagem arbitrária especificada por URL" + }, + "live": { + "auto_mute": "Silenciar câmeras ao vivo automaticamente", + "auto_pause": "Parar câmeras ao vivo automaticamente", + "auto_play": "Reproduzir câmeras ao vivo automaticamente", + "auto_unmute": "Ativar automaticamente o som das câmeras ao vivo", + "controls": { + "editor_label": "Controles da visualização ao vivo" + }, + "draggable": "A visualização ao vivo das câmeras pode ser arrastada/deslizada", + "layout": "layout", + "lazy_load": "As câmeras ao vivo são carregadas lentamente", + "lazy_unload": "As câmeras ao vivo são descarregadas preguiçosamente", + "preload": "Pré-carregar a visualização ao vivo em segundo plano", + "show_image_during_load": "Mostar imagem durante o carregamento", + "transition_effect": "Efeito de transição de câmera ao vivo" + }, + "media_viewer": { + "auto_mute": "Silenciar mídia automaticamente", + "auto_pause": "Parar mídia automaticamente", + "auto_play": "Reproduzir mídia automaticamente", + "auto_unmute": "Ativar mídia automaticamente", + "controls": { + "editor_label": "Controles do visualizador de mídia" + }, + "draggable": "Visualizador de eventos pode ser arrastado/deslizado", + "layout": "Layout", + "lazy_load": "A mídia do Visualizador de eventos é carregada lentamente no carrossel", + "transition_effect": "Efeito de transição do Visualizador de eventos", + "transition_effects": { + "none": "Sem transição", + "slide": "Transição de slides" + } + }, + "menu": { + "alignment": "Alinhamento do menu", + "alignments": { + "bottom": "Alinhado à parte inferior", + "left": "Alinhado à esquerda", + "right": "Alinhado à direita", + "top": "Alinhado ao topo" + }, + "button_size": "Tamanho do botão de menu (e.g. '40px')", + "buttons": { + "alignment": "Alinhamento do botão", + "alignments": { + "matching": "Mesmo alinhamento do menu", + "opposing": "Opor-se ao alinhamento do menu" + }, + "camera_ui": "Camera", + "cameras": "Selecionar câmera", + "clips": "Clipes", + "download": "Descarregar mídia do evento", + "enabled": "Botão ativado", + "expand": "Expandir", + "frigate": "Frigate menu / Visualização padrão", + "fullscreen": "Tela cheia", + "icon": "Ícone", + "image": "Imagem", + "live": "Ao vivo", + "media_player": "Enviar para o reprodutor de mídia", + "priority": "Prioridade", + "snapshots": "Instantâneos", + "substreams": "substreams", + "timeline": "Linha do tempo" + }, + "position": "Posição do menu", + "positions": { + "bottom": "Posicionado na parte inferior", + "left": "Posicionado à esquerda", + "right": "Posicionado à direita", + "top": "Posicionado no topo" + }, + "style": "Estilo do menu", + "styles": { + "hidden": "Menu oculto", + "hover": "Menu suspenso", + "none": "Sem menu", + "outside": "Menu externo", + "overlay": "Menu sobreposto" + } + }, + "overrides": { + "info": "Esta configuração do cartão especificou manualmente as substituições configuradas que podem substituir os valores mostrados no editor visual, consulte o editor de código para visualizar/modificar essas substituições" + }, + "performance": { + "features": { + "animated_progress_indicator": "Animação na barra de progresso", + "editor_label": "Editor de etiquetas", + "media_chunk_size": "Tamanho do ficheiro" + }, + "profile": "Perfil", + "profiles": { + "high": "Alto", + "low": "Baixo" + }, + "style": { + "border_radius": "Tamanho do bordo", + "box_shadow": "Caixa de Fundo", + "editor_label": "Editor de etiquetas" + }, + "warning": "Avisos" + }, + "view": { + "camera_select": "Visualização de câmeras recém-selecionadas", + "dark_mode": "Modo escuro", + "dark_modes": { + "auto": "Automático", + "off": "Desligado", + "on": "Ligado" + }, + "default": "Visualização padrão", + "scan": { + "enabled": "Modo scan ativado", + "scan_mode": "Modo scan", + "show_trigger_status": "Exibir estado do gatilho", + "untrigger_reset": "Redefinir a visualização para o padrão após desacionar", + "untrigger_seconds": "Segundos após a mudar para o estado inativo para desacionar" + }, + "timeout_seconds": "Redefinir para a visualização padrão X segundos após a ação do usuário (0 = nunca)", + "update_cycle_camera": "Percorrer as câmeras quando a visualização padrão for atualizada", + "update_force": "Forçar atualizações do cartão (ignore a interação do Utilizador)", + "update_seconds": "Atualize a visualização padrão a cada X segundos (0 = nunca)", + "views": { + "clip": "Clipe mais recente", + "clips": "Galeria de clipes", + "current": "Visualização atual", + "image": "Imagem estática", + "live": "Visualização ao vivo", + "snapshot": "Snapshot mais recente", + "snapshots": "Galeria de Snapshots", + "timeline": "Visualização da linha do tempo" + } + } + }, + "editor": { + "add_new_camera": "Adicionar nova câmera", + "button": "Botão", + "camera": "Câmera", + "cameras": "Câmeras", + "cameras_secondary": "Câmeras para renderizar neste cartão", + "delete": "Excluir", + "dimensions": "Dimensões", + "dimensions_secondary": "Dimensões e opções de forma", + "image": "Imagem", + "image_secondary": "Opções de visualização de imagem estática", + "live": "Ao vivo", + "live_secondary": "Opções de visualização da câmera ao vivo", + "media_gallery": "Galeria", + "media_gallery_secondary": "Galeria Secundaria", + "media_viewer": "Visualizador de eventos", + "media_viewer_secondary": "Opções do visualizador de Snapshots e clipes", + "menu": "Menu", + "menu_secondary": "Opções de aparência do menu", + "move_down": "Descer", + "move_up": "Subir", + "overrides": "As substituições estão ativas", + "overrides_secondary": "Substituições de configuração dinâmica detectadas", + "timeline": "Linha do tempo", + "timeline_secondary": "Opções do evento da linha do tempo", + "upgrade": "Actualização", + "upgrade_available": "Está disponível uma atualização automática do cartão", + "view": "Visualizar", + "view_secondary": "O que deve ser mostrado neste cartão" + }, + "elements": { + "ptz": { + "down": "Baixo", + "home": "Origem", + "left": "Esquerda", + "right": "Direira", + "up": "Cima", + "zoom_in": "Ampliar", + "zoom_out": "Reduzir" + } + }, + "error": { + "could_not_render_elements": "Não foi possível renderizar os elementos da imagem", + "could_not_resolve": "Não foi possível resolver o URL de mídia", + "diagnostics": "Diagnósticos do cartão. Reveja as informações confidenciais antes de partilhar", + "download_no_media": "Nenhuma mídia para download", + "download_sign_failed": "Não foi possível assinar o URL de mídia para download", + "duplicate_camera_id": "Duplique o ID da câmera Frigate para a câmera a seguir, use o parâmetro 'id' para identificar exclusivamente as câmeras", + "empty_response": "Sem resposta do Home Assistant para a solicitação", + "failed_response": "Falha ao receber resposta do Home Assistant para solicitação", + "failed_retain": "Não foi possível reter o evento", + "failed_sign": "Não foi possível assinar a URL do Home Assistant", + "image_load_error": "A imagem não pôde ser carregada", + "invalid_configuration": "Configuração inválida", + "invalid_configuration_no_hint": "Nenhuma dica de local disponível (tipo incorreto ou ausente?)", + "invalid_elements_config": "Configuração de elementos de imagem inválida", + "invalid_response": "Resposta inválida recebida do Home Assistant para a solicitação", + "jsmpeg_no_player": "Não foi possível iniciar o player JSMPEG", + "live_camera_no_endpoint": "Nenhuma câmera ao vivo", + "live_camera_not_found": "Nenhuma câmera ao vivo não foi encontrada", + "live_camera_unavailable": "Câmera ao vivo indisponivel", + "no_camera_engine": "Não existe câmera", + "no_camera_entity": "Não existe uma entidade câmera", + "no_camera_entity_for_triggers": "Não existe camera para a acção", + "no_camera_id": "Não foi possível determinar o ID da câmera para a câmera a seguir, pode ser necessário definir o parâmetro 'id' manualmente", + "no_camera_name": "Não foi possível determinar o nome da câmera da Frigate, especifique 'camera_entity' ou 'camera_name' para a câmera a seguir", + "no_live_camera": "O parâmetro camera_entity deve ser definido e válido para este serviço ativo", + "no_visible_cameras": "Sem camaras visiveis", + "reconnecting": "A voltar a ligar", + "timeline_no_cameras": "Nenhuma câmera do Frigate para mostrar na linha do tempo", + "troubleshooting": "Verifique a solução de problemas", + "unknown": "Erro desconhecido", + "upgrade_available": "Uma atualização automatizada da configuração do cartão está disponível, visite o editor visual do cartão", + "webrtc_card_reported_error": "O cartão WebRTC relatou um erro", + "webrtc_card_waiting": "Aguardar o cartão WebRTC carregar ..." + }, + "event": { + "camera": "Camera", + "duration": "Duração", + "in_progress": "Em andamento", + "score": "Pontuação", + "seek": "Procurar", + "start": "Início", + "what": "O quê", + "where": "Onde" + }, + "media_filter": { + "all": "Todos", + "camera": "Camera", + "favorite": "Favoritos", + "media_type": "Tipos de media", + "media_types": { + "clips": "Clips", + "recordings": "Gravações", + "snapshots": "Imagens" + }, + "not_favorite": "Não favorito", + "select_camera": "Seleciona a camara", + "select_favorite": "Seleciona o favorito", + "select_media_type": "Seleciona o tipo de media", + "select_what": "Seleciona", + "select_when": "Seleciona quando", + "select_where": "Seleciona onde", + "what": "O que", + "when": "Quando", + "whens": { + "past_month": "O mes passado", + "past_week": "A semana passada", + "today": "Hoje", + "yesterday": "Ontem" + }, + "where": "Onde" + }, + "recording": { + "camera": "Camera", + "duration": "Duração", + "events": "Eventos", + "in_progress": "Em andamento", + "seek": "Procurar", + "start": "Começar" + }, + "thumbnail": { + "no_thumbnail": "Nenhuma miniatura disponível", + "retain_indefinitely": "Evento será retido por tempo indeterminado", + "timeline": "Ver evento na linha do tempo" + }, + "timeline": { + "pan_behavior": { + "pan": "Pan", + "seek": "Pan seeks across all media", + "seek-in-media": "Pan seeks within selected media item only" + }, + "select_date": "Selecionar a data" + } +} \ No newline at end of file diff --git a/src/localize/localize.ts b/src/localize/localize.ts index cd41f2b0..75d10059 100644 --- a/src/localize/localize.ts +++ b/src/localize/localize.ts @@ -56,6 +56,8 @@ export const loadLanguages = async (hass: HomeAssistant): Promise => { const lang = getLanguage(hass); 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'); }