navidrome/resources/i18n/pt-br.json
Deluan Quintão 28d5299ffc
Some checks are pending
Pipeline: Test, Lint, Build / Test Go code (push) Waiting to run
Pipeline: Test, Lint, Build / Test JS code (push) Waiting to run
Pipeline: Test, Lint, Build / Lint i18n files (push) Waiting to run
Pipeline: Test, Lint, Build / Check Docker configuration (push) Waiting to run
Pipeline: Test, Lint, Build / Build (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Get version info (push) Waiting to run
Pipeline: Test, Lint, Build / Lint Go code (push) Waiting to run
Pipeline: Test, Lint, Build / Build-1 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-2 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-3 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-4 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-5 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-6 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-7 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-8 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-9 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Push Docker manifest (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build Windows installers (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Package/Release (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Upload Linux PKG (push) Blocked by required conditions
feat(scanner): implement selective folder scanning and file system watcher improvements (#4674)
* feat: Add selective folder scanning capability

Implement targeted scanning of specific library/folder pairs without
full recursion. This enables efficient rescanning of individual folders
when changes are detected, significantly reducing scan time for large
libraries.

Key changes:
- Add ScanTarget struct and ScanFolders API to Scanner interface
- Implement CLI flag --targets for specifying libraryID:folderPath pairs
- Add FolderRepository.GetByPaths() for batch folder info retrieval
- Create loadSpecificFolders() for non-recursive directory loading
- Scope GC operations to affected libraries only (with TODO for full impl)
- Add comprehensive tests for selective scanning behavior

The selective scan:
- Only processes specified folders (no subdirectory recursion)
- Maintains library isolation
- Runs full maintenance pipeline scoped to affected libraries
- Supports both full and quick scan modes

Examples:
  navidrome scan --targets "1:Music/Rock,1:Music/Jazz"
  navidrome scan --full --targets "2:Classical"

* feat(folder): replace GetByPaths with GetFolderUpdateInfo for improved folder updates retrieval

Signed-off-by: Deluan <deluan@navidrome.org>

* test: update parseTargets test to handle folder names with spaces

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(folder): remove unused LibraryPath struct and update GC logging message

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(folder): enhance external scanner to support target-specific scanning

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(scanner): simplify scanner methods

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(watcher): implement folder scanning notifications with deduplication

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(watcher): add resolveFolderPath function for testability

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(watcher): implement path ignoring based on .ndignore patterns

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(scanner): implement IgnoreChecker for managing .ndignore patterns

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(ignore_checker): rename scanner to lineScanner for clarity

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(scanner): enhance ScanTarget struct with String method for better target representation

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(scanner): validate library ID to prevent negative values

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(scanner): simplify GC method by removing library ID parameter

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(scanner): update folder scanning to include all descendants of specified folders

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(subsonic): allow selective scan in the /startScan endpoint

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(scanner): update CallScan to handle specific library/folder pairs

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(scanner): streamline scanning logic by removing scanAll method

Signed-off-by: Deluan <deluan@navidrome.org>

* test: enhance mockScanner for thread safety and improve test reliability

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(scanner): move scanner.ScanTarget to model.ScanTarget

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor: move scanner types to model,implement MockScanner

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(scanner): update scanner interface and implementations to use model.Scanner

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(folder_repository): normalize target path handling by using filepath.Clean

Signed-off-by: Deluan <deluan@navidrome.org>

* test(folder_repository): add comprehensive tests for folder retrieval and child exclusion

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(scanner): simplify selective scan logic using slice.Filter

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(scanner): streamline phase folder and album creation by removing unnecessary library parameter

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(scanner): move initialization logic from phase_1 to the scanner itself

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(tests): rename selective scan test file to scanner_selective_test.go

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(configuration): add DevSelectiveWatcher configuration option

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(watcher): enhance .ndignore handling for folder deletions and file changes

Signed-off-by: Deluan <deluan@navidrome.org>

* docs(scanner): comments

Signed-off-by: Deluan <deluan@navidrome.org>

* refactor(scanner): enhance walkDirTree to support target folder scanning

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(scanner, watcher): handle errors when pushing ignore patterns for folders

Signed-off-by: Deluan <deluan@navidrome.org>

* Update scanner/phase_1_folders.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* refactor(scanner): replace parseTargets function with direct call to scanner.ParseTargets

Signed-off-by: Deluan <deluan@navidrome.org>

* test(scanner): add tests for ScanBegin and ScanEnd functionality

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(library): update PRAGMA optimize to check table sizes without ANALYZE

Signed-off-by: Deluan <deluan@navidrome.org>

* test(scanner): refactor tests

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(ui): add selective scan options and update translations

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(ui): add quick and full scan options for individual libraries

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(ui): add Scan buttonsto the LibraryList

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(scan): update scanning parameters from 'path' to 'target' for selective scans.

* refactor(scan): move ParseTargets function to model package

* test(scan): suppress unused return value from SetUserLibraries in tests

* feat(gc): enhance garbage collection to support selective library purging

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(scanner): prevent race condition when scanning deleted folders

When the watcher detects changes in a folder that gets deleted before
the scanner runs (due to the 10-second delay), the scanner was
prematurely removing these folders from the tracking map, preventing
them from being marked as missing.

The issue occurred because `newFolderEntry` was calling `popLastUpdate`
before verifying the folder actually exists on the filesystem.

Changes:
- Move fs.Stat check before newFolderEntry creation in loadDir to
  ensure deleted folders remain in lastUpdates for finalize() to handle
- Add early existence check in walkDirTree to skip non-existent target
  folders with a warning log
- Add unit test verifying non-existent folders aren't removed from
  lastUpdates prematurely
- Add integration test for deleted folder scenario with ScanFolders

Fixes the issue where deleting entire folders (e.g., /music/AC_DC)
wouldn't mark tracks as missing when using selective folder scanning.

* refactor(scan): streamline folder entry creation and update handling

Signed-off-by: Deluan <deluan@navidrome.org>

* feat(scan): add '@Recycle' (QNAP) to ignored directories list

Signed-off-by: Deluan <deluan@navidrome.org>

* fix(log): improve thread safety in logging level management

* test(scan): move unit tests for ParseTargets function

Signed-off-by: Deluan <deluan@navidrome.org>

* review

Signed-off-by: Deluan <deluan@navidrome.org>

---------

Signed-off-by: Deluan <deluan@navidrome.org>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: deluan <deluan.quintao@mechanical-orchard.com>
2025-11-14 22:15:43 -05:00

634 lines
24 KiB
JSON

{
"languageName": "Português (Brasil)",
"resources": {
"song": {
"name": "Música |||| Músicas",
"fields": {
"albumArtist": "Artista",
"duration": "Duração",
"trackNumber": "#",
"playCount": "Execuções",
"title": "Título",
"artist": "Artista",
"album": "Álbum",
"path": "Arquivo",
"libraryName": "Biblioteca",
"genre": "Gênero",
"compilation": "Coletânea",
"year": "Ano",
"size": "Tamanho",
"updatedAt": "Últ. Atualização",
"bitRate": "Bitrate",
"discSubtitle": "Sub-título do disco",
"starred": "Favorita",
"comment": "Comentário",
"rating": "Classificação",
"quality": "Qualidade",
"bpm": "BPM",
"playDate": "Últ. Execução",
"channels": "Canais",
"createdAt": "Adiconado em",
"grouping": "Agrupamento",
"mood": "Mood",
"participants": "Outros Participantes",
"tags": "Outras Tags",
"mappedTags": "Tags mapeadas",
"rawTags": "Tags originais",
"bitDepth": "Profundidade de bits",
"sampleRate": "Taxa de amostragem",
"missing": "Ausente"
},
"actions": {
"addToQueue": "Adicionar à fila",
"playNow": "Tocar agora",
"addToPlaylist": "Adicionar à playlist",
"shuffleAll": "Aleatório",
"download": "Baixar",
"playNext": "Toca a seguir",
"info": "Detalhes",
"showInPlaylist": "Ir para playlist"
}
},
"album": {
"name": "Álbum |||| Álbuns",
"fields": {
"albumArtist": "Artista",
"artist": "Artista",
"duration": "Duração",
"songCount": "Músicas",
"playCount": "Execuções",
"name": "Nome",
"libraryName": "Biblioteca",
"genre": "Gênero",
"compilation": "Coletânea",
"year": "Ano",
"updatedAt": "Últ. Atualização",
"comment": "Comentário",
"rating": "Classificação",
"createdAt": "Adicionado em",
"size": "Tamanho",
"originalDate": "Original",
"releaseDate": "Data de Lançamento",
"releases": "Versão||||Versões",
"released": "Lançado",
"recordLabel": "Selo",
"catalogNum": "Nr. Catálogo",
"releaseType": "Tipo",
"grouping": "Agrupamento",
"media": "Mídia",
"mood": "Mood",
"date": "Data de Lançamento",
"missing": "Ausente"
},
"actions": {
"playAll": "Tocar",
"playNext": "Tocar em seguida",
"addToQueue": "Adicionar à fila",
"shuffle": "Aleatório",
"addToPlaylist": "Adicionar à playlist",
"download": "Baixar",
"info": "Detalhes",
"share": "Compartilhar"
},
"lists": {
"all": "Todos",
"random": "Aleatório",
"recentlyAdded": "Recém-adicionados",
"recentlyPlayed": "Recém-tocados",
"mostPlayed": "Mais tocados",
"starred": "Favoritos",
"topRated": "Melhor classificados"
}
},
"artist": {
"name": "Artista |||| Artistas",
"fields": {
"name": "Nome",
"albumCount": "Total de Álbuns",
"songCount": "Total de Músicas",
"playCount": "Execuções",
"rating": "Classificação",
"genre": "Gênero",
"size": "Tamanho",
"role": "Role",
"missing": "Ausente"
},
"roles": {
"albumartist": "Artista do Álbum |||| Artistas do Álbum",
"artist": "Artista |||| Artistas",
"composer": "Compositor |||| Compositores",
"conductor": "Maestro |||| Maestros",
"lyricist": "Letrista |||| Letristas",
"arranger": "Arranjador |||| Arranjadores",
"producer": "Produtor |||| Produtores",
"director": "Diretor |||| Diretores",
"engineer": "Engenheiro |||| Engenheiros",
"mixer": "Mixador |||| Mixadores",
"remixer": "Remixador |||| Remixadores",
"djmixer": "DJ Mixer |||| DJ Mixers",
"performer": "Músico |||| Músicos",
"maincredit": "Artista do Álbum ou Artista |||| Artistas do Álbum ou Artistas"
},
"actions": {
"topSongs": "Mais tocadas",
"shuffle": "Aleatório",
"radio": "Rádio"
}
},
"user": {
"name": "Usuário |||| Usuários",
"fields": {
"userName": "Usuário",
"isAdmin": "Admin?",
"lastLoginAt": "Últ. Login",
"updatedAt": "Últ. Atualização",
"name": "Nome",
"password": "Senha",
"createdAt": "Data de Criação",
"changePassword": "Trocar Senha?",
"currentPassword": "Senha Atual",
"newPassword": "Nova Senha",
"token": "Token",
"lastAccessAt": "Últ. Acesso",
"libraries": "Bibliotecas"
},
"helperTexts": {
"name": "Alterações no seu nome só serão refletidas no próximo login",
"libraries": "Selecione bibliotecas específicas para este usuário, ou deixe vazio para usar bibliotecas padrão"
},
"notifications": {
"created": "Novo usuário criado",
"updated": "Usuário atualizado com sucesso",
"deleted": "Usuário deletado com sucesso"
},
"validation": {
"librariesRequired": "Pelo menos uma biblioteca deve ser selecionada para usuários não-administradores"
},
"message": {
"listenBrainzToken": "Entre seu token do ListenBrainz",
"clickHereForToken": "Clique aqui para obter seu token",
"selectAllLibraries": "Selecionar todas as bibliotecas",
"adminAutoLibraries": "Usuários administradores têm acesso automático a todas as bibliotecas"
}
},
"player": {
"name": "Tocador |||| Tocadores",
"fields": {
"name": "Nome",
"transcodingId": "Conversão",
"maxBitRate": "Bitrate máx",
"client": "Cliente",
"userName": "Usuário",
"lastSeen": "Últ. acesso",
"reportRealPath": "Use paths reais",
"scrobbleEnabled": "Enviar scrobbles para serviços externos"
}
},
"transcoding": {
"name": "Conversão |||| Conversões",
"fields": {
"name": "Nome",
"targetFormat": "Formato",
"defaultBitRate": "Bitrate padrão",
"command": "Comando"
}
},
"playlist": {
"name": "Playlist |||| Playlists",
"fields": {
"name": "Nome",
"duration": "Duração",
"ownerName": "Dono",
"public": "Pública",
"updatedAt": "Últ. Atualização",
"createdAt": "Data de Criação",
"songCount": "Músicas",
"comment": "Comentário",
"sync": "Auto-importar",
"path": "Importar de"
},
"actions": {
"selectPlaylist": "Selecione a playlist:",
"addNewPlaylist": "Criar \"%{name}\"",
"export": "Exportar",
"makePublic": "Pública",
"makePrivate": "Pessoal",
"saveQueue": "Salvar fila em nova Playlist",
"searchOrCreate": "Buscar playlists ou criar nova...",
"pressEnterToCreate": "Pressione Enter para criar nova playlist",
"removeFromSelection": "Remover da seleção"
},
"message": {
"duplicate_song": "Adicionar músicas duplicadas",
"song_exist": "Algumas destas músicas já existem na playlist. Você quer adicionar as duplicadas ou ignorá-las?",
"noPlaylistsFound": "Nenhuma playlist encontrada",
"noPlaylists": "Nenhuma playlist disponível"
}
},
"radio": {
"name": "Rádio |||| Rádios",
"fields": {
"name": "Nome",
"streamUrl": "Endereço de stream",
"homePageUrl": "Home Page",
"updatedAt": "Últ. Atualização",
"createdAt": "Data de Criação"
},
"actions": {
"playNow": "Tocar agora"
}
},
"share": {
"name": "Compartilhamento |||| Compartilhamentos",
"fields": {
"username": "Compartilhado por",
"url": "Link",
"description": "Descrição",
"contents": "Conteúdo",
"expiresAt": "Dt. Expiração",
"lastVisitedAt": "Última visita",
"visitCount": "Visitas",
"format": "Formato",
"maxBitRate": "Bitrate máx",
"updatedAt": "Últ. Atualização",
"createdAt": "Data de Criação",
"downloadable": "Permitir Baixar?"
}
},
"missing": {
"name": "Arquivo ausente |||| Arquivos ausentes",
"fields": {
"path": "Caminho",
"size": "Tamanho",
"libraryName": "Biblioteca",
"updatedAt": "Desaparecido em"
},
"actions": {
"remove": "Remover",
"remove_all": "Remover todos"
},
"notifications": {
"removed": "Arquivo(s) ausente(s) removido(s)"
},
"empty": "Nenhum arquivo ausente"
},
"library": {
"name": "Biblioteca |||| Bibliotecas",
"fields": {
"name": "Nome",
"path": "Caminho",
"remotePath": "Caminho Remoto",
"lastScanAt": "Último Scan",
"songCount": "Músicas",
"albumCount": "Álbuns",
"artistCount": "Artistas",
"totalSongs": "Músicas",
"totalAlbums": "Álbuns",
"totalArtists": "Artistas",
"totalFolders": "Pastas",
"totalFiles": "Arquivos",
"totalMissingFiles": "Arquivos Ausentes",
"totalSize": "Tamanho Total",
"totalDuration": "Duração",
"defaultNewUsers": "Padrão para Novos Usuários",
"createdAt": "Data de Criação",
"updatedAt": "Últ. Atualização"
},
"sections": {
"basic": "Informações Básicas",
"statistics": "Estatísticas"
},
"actions": {
"scan": "Scanear Biblioteca",
"quickScan": "Scan Rápido",
"fullScan": "Scan Completo",
"manageUsers": "Gerenciar Acesso do Usuário",
"viewDetails": "Ver Detalhes"
},
"notifications": {
"created": "Biblioteca criada com sucesso",
"updated": "Biblioteca atualizada com sucesso",
"deleted": "Biblioteca excluída com sucesso",
"scanStarted": "Scan da biblioteca iniciada",
"quickScanStarted": "Scan rápido iniciado",
"fullScanStarted": "Scan completo iniciado",
"scanError": "Erro ao iniciar o scan. Verifique os logs",
"scanCompleted": "Scan da biblioteca concluída"
},
"validation": {
"nameRequired": "Nome da biblioteca é obrigatório",
"pathRequired": "Caminho da biblioteca é obrigatório",
"pathNotDirectory": "Caminho da biblioteca deve ser um diretório",
"pathNotFound": "Caminho da biblioteca não encontrado",
"pathNotAccessible": "Caminho da biblioteca não está acessível",
"pathInvalid": "Caminho da biblioteca inválido"
},
"messages": {
"deleteConfirm": "Tem certeza que deseja excluir esta biblioteca? Isso removerá todos os dados associados.",
"scanInProgress": "Scan em progresso...",
"noLibrariesAssigned": "Nenhuma biblioteca atribuída a este usuário"
}
}
},
"ra": {
"auth": {
"welcome1": "Obrigado por instalar Navidrome!",
"welcome2": "Para iniciar, crie um usuário admin",
"confirmPassword": "Confirme a senha",
"buttonCreateAdmin": "Criar Admin",
"auth_check_error": "Por favor, faça login para continuar",
"user_menu": "Perfil",
"username": "Usuário",
"password": "Senha",
"sign_in": "Entrar",
"sign_in_error": "Erro na autenticação, tente novamente.",
"logout": "Sair",
"insightsCollectionNote": "Navidrome coleta dados de uso anônimos para\najudar a melhorar o projeto. Clique [aqui] para\nsaber mais e para desativar se desejar"
},
"validation": {
"invalidChars": "Somente use letras e numeros",
"passwordDoesNotMatch": "Senha não confere",
"required": "Obrigatório",
"minLength": "Deve ser ter no mínimo %{min} caracteres",
"maxLength": "Deve ter no máximo %{max} caracteres",
"minValue": "Deve ser %{min} ou maior",
"maxValue": "Deve ser %{max} ou menor",
"number": "Deve ser um número",
"email": "Deve ser um email válido",
"oneOf": "Deve ser uma das seguintes opções: %{options}",
"regex": "Deve ter o formato específico (regexp): %{pattern}",
"unique": "Deve ser único",
"url": "URL inválida"
},
"action": {
"add_filter": "Adicionar Filtro",
"add": "Adicionar",
"back": "Voltar",
"bulk_actions": "1 item selecionado |||| %{smart_count} itens selecionados",
"cancel": "Cancelar",
"clear_input_value": "Limpar campo",
"clone": "Duplicar",
"confirm": "Confirmar",
"create": "Novo",
"delete": "Deletar",
"edit": "Editar",
"export": "Exportar",
"list": "Listar",
"refresh": "Atualizar",
"remove_filter": "Cancelar filtro",
"remove": "Remover",
"save": "Salvar",
"search": "Buscar",
"show": "Exibir",
"sort": "Ordenar",
"undo": "Desfazer",
"expand": "Expandir",
"close": "Fechar",
"open_menu": "Abrir menu",
"close_menu": "Fechar menu",
"unselect": "Deselecionar",
"skip": "Ignorar",
"bulk_actions_mobile": "1 |||| %{smart_count}",
"share": "Compartilhar",
"download": "Baixar"
},
"boolean": {
"true": "Sim",
"false": "Não"
},
"page": {
"create": "Criar %{name}",
"dashboard": "Painel de Controle",
"edit": "%{name} #%{id}",
"error": "Um erro ocorreu",
"list": "Listar %{name}",
"loading": "Carregando",
"not_found": "Não encontrado",
"show": "%{name} #%{id}",
"empty": "Ainda não há nenhum registro em %{name}",
"invite": "Gostaria de criar um novo?"
},
"input": {
"file": {
"upload_several": "Arraste alguns arquivos para fazer o upload, ou clique para selecioná-los.",
"upload_single": "Arraste o arquivo para fazer o upload, ou clique para selecioná-lo."
},
"image": {
"upload_several": "Arraste algumas imagens para fazer o upload ou clique para selecioná-las",
"upload_single": "Arraste um arquivo para upload ou clique em selecionar arquivo."
},
"references": {
"all_missing": "Não foi possível encontrar os dados das referencias.",
"many_missing": "Pelo menos uma das referências passadas não está mais disponível.",
"single_missing": "A referência passada aparenta não estar mais disponível."
},
"password": {
"toggle_visible": "Esconder senha",
"toggle_hidden": "Mostrar senha"
}
},
"message": {
"about": "Sobre",
"are_you_sure": "Tem certeza?",
"bulk_delete_content": "Você tem certeza que deseja excluir %{name}? |||| Você tem certeza que deseja excluir estes %{smart_count} itens?",
"bulk_delete_title": "Excluir %{name} |||| Excluir %{smart_count} %{name} itens",
"delete_content": "Você tem certeza que deseja excluir?",
"delete_title": "Excluir %{name} #%{id}",
"details": "Detalhes",
"error": "Um erro ocorreu e a sua requisição não pôde ser completada.",
"invalid_form": "Este formulário não está valido. Certifique-se de corrigir os erros",
"loading": "A página está carregando. Um momento, por favor",
"no": "Não",
"not_found": "Foi digitada uma URL inválida, ou o link pode estar quebrado.",
"yes": "Sim",
"unsaved_changes": "Algumas das suas mudanças não foram salvas, deseja realmente ignorá-las?"
},
"navigation": {
"no_results": "Nenhum resultado encontrado",
"no_more_results": "A página numero %{page} está fora dos limites. Tente a página anterior.",
"page_out_of_boundaries": "Página %{page} fora do limite",
"page_out_from_end": "Não é possível ir após a última página",
"page_out_from_begin": "Não é possível ir antes da primeira página",
"page_range_info": "%{offsetBegin}-%{offsetEnd} de %{total}",
"page_rows_per_page": "Resultados por página:",
"next": "Próximo",
"prev": "Anterior",
"skip_nav": "Pular para o conteúdo"
},
"notification": {
"updated": "Item atualizado com sucesso |||| %{smart_count} itens foram atualizados com sucesso",
"created": "Item criado com sucesso",
"deleted": "Item removido com sucesso! |||| %{smart_count} itens foram removidos com sucesso",
"bad_item": "Item incorreto",
"item_doesnt_exist": "Esse item não existe mais",
"http_error": "Erro na comunicação com servidor",
"data_provider_error": "Erro interno do servidor. Entre em contato",
"i18n_error": "Não foi possível carregar as traduções para o idioma especificado",
"canceled": "Ação cancelada",
"logged_out": "Sua sessão foi encerrada. Por favor, reconecte",
"new_version": "Nova versão disponível! Por favor recarregue esta janela."
},
"toggleFieldsMenu": {
"columnsToDisplay": "Colunas visíveis",
"layout": "Layout",
"grid": "Grade",
"table": "Tabela"
}
},
"message": {
"note": "ATENÇÃO",
"transcodingDisabled": "Por questão de segurança, esta tela de configuração está desabilitada. Se você quiser alterar estas configurações, reinicie o servidor com a opção %{config}",
"transcodingEnabled": "Navidrome está sendo executado com a opção %{config}. Isto permite que potencialmente se execute comandos do sistema pela interface Web. É recomendado que vc mantenha esta opção desabilitada, e só a habilite quando precisar configurar opções de Conversão",
"songsAddedToPlaylist": "Música adicionada à playlist |||| %{smart_count} músicas adicionadas à playlist",
"noSimilarSongsFound": "Nenhuma música semelhante encontrada",
"noTopSongsFound": "Nenhuma música mais tocada encontrada",
"noPlaylistsAvailable": "Nenhuma playlist",
"delete_user_title": "Excluir usuário '%{name}'",
"delete_user_content": "Você tem certeza que deseja excluir o usuário e todos os seus dados (incluindo suas playlists e preferências)?",
"notifications_blocked": "Você bloqueou notificações para este site nas configurações do seu browser",
"notifications_not_available": "Este navegador não suporta notificações",
"lastfmLinkSuccess": "Sua conta no Last.fm foi conectada com sucesso",
"lastfmLinkFailure": "Sua conta no Last.fm não pode ser conectada",
"lastfmUnlinkSuccess": "Sua conta no Last.fm foi desconectada",
"lastfmUnlinkFailure": "Sua conta no Last.fm não pode ser desconectada",
"openIn": {
"lastfm": "Abrir em Last.fm",
"musicbrainz": "Abrir em MusicBrainz"
},
"lastfmLink": "Leia mais",
"listenBrainzLinkSuccess": "Sua conta no ListenBrainz foi conectada com sucesso",
"listenBrainzLinkFailure": "Sua conta no ListenBrainz não pode ser conectada",
"listenBrainzUnlinkSuccess": "Sua conta no ListenBrainz foi desconectada",
"listenBrainzUnlinkFailure": "Sua conta no ListenBrainz não pode ser desconectada",
"downloadOriginalFormat": "Baixar no formato original",
"shareOriginalFormat": "Compartilhar no formato original",
"shareDialogTitle": "Compartilhar %{resource} '%{name}'",
"shareBatchDialogTitle": "Compartilhar 1 %{resource} |||| Compartilhar %{smart_count} %{resource}",
"shareSuccess": "Link copiado para o clipboard : %{url}",
"shareFailure": "Erro ao copiar o link %{url} para o clipboard",
"downloadDialogTitle": "Baixar %{resource} '%{name}' (%{size})",
"shareCopyToClipboard": "Copie para o clipboard: Ctrl+C, Enter",
"remove_missing_title": "Remover arquivos ausentes",
"remove_missing_content": "Você tem certeza que deseja remover os arquivos selecionados do banco de dados? Isso removerá permanentemente qualquer referência a eles, incluindo suas contagens de reprodução e classificações.",
"remove_all_missing_title": "Remover todos os arquivos ausentes",
"remove_all_missing_content": "Você tem certeza que deseja remover todos os arquivos ausentes do banco de dados? Isso removerá permanentemente qualquer referência a eles, incluindo suas contagens de reprodução e classificações."
},
"menu": {
"library": "Biblioteca",
"librarySelector": {
"allLibraries": "Todas as Bibliotecas (%{count})",
"multipleLibraries": "%{selected} de %{total} Bibliotecas",
"selectLibraries": "Selecionar Bibliotecas",
"none": "Nenhuma"
},
"settings": "Configurações",
"version": "Versão",
"theme": "Tema",
"personal": {
"name": "Pessoal",
"options": {
"theme": "Tema",
"language": "Língua",
"defaultView": "Tela inicial",
"desktop_notifications": "Notificações",
"lastfmScrobbling": "Enviar scrobbles para Last.fm",
"listenBrainzScrobbling": "Enviar scrobbles para ListenBrainz",
"replaygain": "Modo ReplayGain",
"preAmp": "PreAmp ReplayGain (dB)",
"gain": {
"none": "Desligado",
"album": "Usar ganho do álbum",
"track": "Usar ganho do faixa"
},
"lastfmNotConfigured": "A API-Key do Last.fm não está configurada"
}
},
"albumList": "Álbuns",
"about": "Info",
"playlists": "Playlists",
"sharedPlaylists": "Compartilhadas"
},
"player": {
"playListsText": "Fila de Execução",
"openText": "Abrir",
"closeText": "Fechar",
"notContentText": "Nenhum música",
"clickToPlayText": "Clique para tocar",
"clickToPauseText": "Clique para pausar",
"nextTrackText": "Próxima faixa",
"previousTrackText": "Faixa anterior",
"reloadText": "Recarregar",
"volumeText": "Volume",
"toggleLyricText": "Letra",
"toggleMiniModeText": "Minimizar",
"destroyText": "Destruir",
"downloadText": "Baixar",
"removeAudioListsText": "Limpar fila de execução",
"clickToDeleteText": "Clique para remover %{name}",
"emptyLyricText": "Letra não disponível",
"playModeText": {
"order": "Em ordem",
"orderLoop": "Repetir tudo",
"singleLoop": "Repetir",
"shufflePlay": "Aleatório"
}
},
"about": {
"links": {
"homepage": "Website",
"source": "Código fonte",
"featureRequests": "Solicitar funcionalidade",
"lastInsightsCollection": "Última coleta de dados",
"insights": {
"disabled": "Desligado",
"waiting": "Aguardando"
}
},
"tabs": {
"about": "Sobre",
"config": "Configuração"
},
"config": {
"configName": "Nome da Configuração",
"environmentVariable": "Variável de Ambiente",
"currentValue": "Valor Atual",
"configurationFile": "Arquivo de Configuração",
"exportToml": "Exportar Configuração (TOML)",
"exportSuccess": "Configuração exportada para o clipboard em formato TOML",
"exportFailed": "Falha ao copiar configuração",
"devFlagsHeader": "Flags de Desenvolvimento (sujeitas a mudança/remoção)",
"devFlagsComment": "Estas são configurações experimentais e podem ser removidas em versões futuras"
}
},
"activity": {
"title": "Atividade",
"totalScanned": "Total de pastas scaneadas",
"quickScan": "Rápido",
"fullScan": "Completo",
"selectiveScan": "Seletivo",
"serverUptime": "Uptime do servidor",
"serverDown": "DESCONECTADO",
"scanType": "Último Scan",
"status": "Erro",
"elapsedTime": "Duração"
},
"nowPlaying": {
"title": "Tocando agora",
"empty": "Nada tocando",
"minutesAgo": "%{smart_count} minuto atrás |||| %{smart_count} minutos atrás"
},
"help": {
"title": "Teclas de atalho",
"hotkeys": {
"show_help": "Mostra esta janela",
"toggle_menu": "Mostra o menu lateral",
"toggle_play": "Tocar / pausar",
"prev_song": "Música anterior",
"next_song": "Próxima música",
"vol_up": "Aumenta volume",
"vol_down": "Diminui volume",
"toggle_love": "Marcar/desmarcar favorita",
"current_song": "Vai para música atual"
}
}
}