Sfoglia il codice sorgente

feat(i18n): Added missing translations and fix others (#8411)

* feat(i18n): Added missing translations and fix others

* feat(i18n): Fix #8401 proposed

* IGNORE

* make fix-all

* feat(i18n): Fix missing TODO

* make fix-all

---------

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
Ciro Mota 2 mesi fa
parent
commit
0a4dc87f0f

+ 1 - 1
README.fr.md

@@ -245,7 +245,7 @@ Voir le [dépôt dédié à ces extensions](https://github.com/FreshRSS/Extensio
 | Nederlands (nl) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Occitan (oc) | ■■■■■■■・・・ 76% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Polski (pl) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Português (Brasil) (pt-BR) | ■■■■■■■■・・ 83% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-BR+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Português (Brasil) (pt-BR) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-BR+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Português (Portugal) (pt-PT) | ■■■■■■■■・・ 83% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-PT+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Русский (ru) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Slovenčina (sk) | ■■■■■■■■・・ 84% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) |

+ 1 - 1
README.md

@@ -141,7 +141,7 @@ See the [repository dedicated to those extensions](https://github.com/FreshRSS/E
 | Nederlands (nl) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Occitan (oc) | ■■■■■■■・・・ 76% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Polski (pl) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Português (Brasil) (pt-BR) | ■■■■■■■■・・ 83% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-BR+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Português (Brasil) (pt-BR) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-BR+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Português (Portugal) (pt-PT) | ■■■■■■■■・・ 83% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-PT+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Русский (ru) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Slovenčina (sk) | ■■■■■■■■・・ 84% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) |

+ 9 - 9
app/i18n/pt-BR/admin.php

@@ -14,9 +14,9 @@ return array(
 	'auth' => array(
 		'allow_anonymous' => 'Permitir a leitura anônima dos artigos pelo usuário padrão (%s)',
 		'allow_anonymous_refresh' => 'Permitir atualização anônima dos artigos',
-		'api_enabled' => 'Permitir acesso à <abbr>API</abbr> <small>(Necessáiro para aplicativos móveis and sharing user queries)</small>',	// DIRTY
+		'api_enabled' => 'Permitir acesso à <abbr>API</abbr> <small>(Necessário para aplicativos móveis e compartilhamento de consultas de usuários)</small>',
 		'form' => 'Formulário Web(tradicional, Necessita de JavaScript)',
-		'http' => 'HTTP (advanced: managed by Web server, OIDC, SSO…)',	// TODO
+		'http' => 'HTTP (avançado: gerenciado por servidor web, OIDC, SSO…)',
 		'none' => 'Nenhum (Perigoso)',
 		'title' => 'Autenticação',
 		'token' => 'Token de autenticação principal',
@@ -29,9 +29,9 @@ return array(
 		'description' => 'Descrição',
 		'disabled' => 'Desabilitado',
 		'empty_list' => 'Não há extensões instaladas',
-		'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.',	// TODO
+		'empty_list_help' => 'Verifique os registros para determinar o motivo da lista de extensões estar vazia.',
 		'enabled' => 'Habilitada',
-		'is_compatible' => 'Is compatible',	// TODO
+		'is_compatible' => 'É compatível',
 		'latest' => 'Instalado',
 		'name' => 'Nome',
 		'no_configure_view' => 'Esta extensão não pode ser configurada.',
@@ -48,8 +48,8 @@ return array(
 		'_' => 'Estatísticas',
 		'all_feeds' => 'Todos os feeds',
 		'category' => 'Categoria',
-		'date_published' => 'Publication date',	// TODO
-		'date_received' => 'Received date',	// TODO
+		'date_published' => 'Data de publicação',
+		'date_received' => 'Data de recebimento',
 		'entry_count' => 'Contagem de entrada',
 		'entry_per_category' => 'Entradas por categoria',
 		'entry_per_day' => 'Entradas por dia (últimos 30 dias)',
@@ -62,10 +62,10 @@ return array(
 		'idle' => 'Feeds inativos',
 		'main' => 'Estatísticas principais',
 		'main_stream' => 'Stream principal',
-		'nb_unreads' => 'Number of unread articles',	// TODO
+		'nb_unreads' => 'Número de artigos não lidos',
 		'no_idle' => 'Não há nenhum feed inativo!',
 		'number_entries' => '%d artigos',
-		'overview' => 'Overview',	// TODO
+		'overview' => 'Visão geral',
 		'percent_of_total' => '% do total',
 		'repartition' => 'Repartição de artigos: %s',
 		'status_favorites' => 'Favoritos',
@@ -74,7 +74,7 @@ return array(
 		'status_unread' => 'Não lidos',
 		'title' => 'Estatísticas',
 		'top_feed' => 'Top10 Feeds',
-		'unread_dates' => 'Dates with most unread articles',	// TODO
+		'unread_dates' => 'Datas com mais artigos não lidos',
 	),
 	'system' => array(
 		'_' => 'Configuração do sistema',

+ 11 - 11
app/i18n/pt-BR/api.php

@@ -12,22 +12,22 @@
 
 return array(
 	'information' => array(
-		'address' => 'Your API address:',	// TODO
+		'address' => 'Seu endereço de API:',
 		'output' => array(
-			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
-			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
-			'pass' => '✔️ PASS',	// TODO
-			'unknown-error' => '❌ ',	// TODO
+			'encoding-support' => '⚠️ WARN: Sem suporte para <code>%2F</code>, alguns clientes podem não funcionar!',
+			'invalid-configuration' => '⚠️ WARN: URL base provavelmente inválida em ./data/config.php',
+			'pass' => '✔️ Sucesso',
+			'unknown-error' => '❌ ',	// IGNORE
 		),
 		'test' => array(
-			'fever' => 'Fever API configuration test:',	// TODO
-			'greader' => 'Google Reader API configuration test:',	// TODO
+			'fever' => 'Teste de configuração da API Fever:',
+			'greader' => 'Teste de configuração da API do Google Reader:',
 		),
 		'title' => array(
-			'_' => 'FreshRSS API endpoints',	// TODO
-			'extension' => 'API for extensions',	// TODO
-			'fever' => 'Fever compatible API',	// TODO
-			'greader' => 'Google Reader compatible API',	// TODO
+			'_' => 'Endpoints da API do FreshRSS',
+			'extension' => 'API para extensões',
+			'fever' => 'API compatível com Fever',
+			'greader' => 'API compatível com Google Reader',
 		),
 	),
 );

+ 44 - 44
app/i18n/pt-BR/conf.php

@@ -35,7 +35,7 @@ return array(
 		'darkMode' => array(
 			'_' => 'Modo noturno automático',
 			'auto' => 'Automático',
-			'help' => 'For compatible themes only',	// TODO
+			'help' => 'Somente para temas compatíveis',
 			'no' => 'Não',
 		),
 		'icon' => array(
@@ -88,7 +88,7 @@ return array(
 	),
 	'logs' => array(
 		'loglist' => array(
-			'level' => 'Nivel de Registro',
+			'level' => 'Nível de Registro',
 			'message' => 'Mensagem de Registro',
 			'timestamp' => 'Data e Hora',
 		),
@@ -100,45 +100,45 @@ return array(
 		),
 	),
 	'mark_read_button' => array(
-		'_' => '“marcar todos como lido” button',	// DIRTY
-		'big' => 'Big',	// TODO
-		'none' => 'None',	// TODO
-		'small' => 'Small',	// TODO
+		'_' => 'Botão “Marcar tudo como lido”',
+		'big' => 'Grande',
+		'none' => 'Nenhum',
+		'small' => 'Pequeno',
 	),
 	'notification_timeout' => array(
 		'bad' => array(
-			'label' => 'Show warning banner',	// TODO
-			'seconds' => 'seconds (at least 1)',	// TODO
+			'label' => 'Mostrar banner de aviso',
+			'seconds' => 'segundos (pelo menos 1)',
 		),
 		'good' => array(
-			'label' => 'Show acknowledgement banner',	// TODO
-			'seconds' => 'seconds (0 means not shown)',	// TODO
+			'label' => 'Mostrar banner de confirmação',
+			'seconds' => 'segundos (0 significa não mostrado)',
 		),
 	),
 	'privacy' => array(
-		'_' => 'Privacy',	// TODO
-		'retrieve_extension_list' => 'Retrieve extension list',	// TODO
+		'_' => 'Privacidade',
+		'retrieve_extension_list' => 'Recuperar lista de extensões',
 	),
 	'profile' => array(
 		'_' => 'Gerenciamento de perfil',
 		'api' => array(
 			'_' => 'Administração da API',
-			'api_not_set' => 'API password not set',	// TODO
-			'api_set' => 'API password set',	// TODO
-			'check_link' => 'Check API status via: <kbd><a href="../api/" target="_blank">%s</a></kbd>',	// TODO
-			'disabled' => 'The API access is disabled.',	// TODO
-			'documentation_link' => 'See the <a href="https://freshrss.github.io/FreshRSS/en/users/06_Mobile_access.html#access-via-mobile-app" target="_blank">documentation and list of known apps</a>',	// TODO
-			'help' => 'See <a href="http://freshrss.github.io/FreshRSS/en/users/06_Mobile_access.html#access-via-mobile-app" target=_blank>documentation</a>',	// TODO
+			'api_not_set' => 'Senha da API não definida',
+			'api_set' => 'Senha da API definida',
+			'check_link' => 'Verificar status da API via: <kbd><a href="../api/" target="_blank">%s</a></kbd>',
+			'disabled' => 'O acesso à API está desativado.',
+			'documentation_link' => 'Veja a <a href="https://freshrss.github.io/FreshRSS/en/users/06_Mobile_access.html#access-via-mobile-app" target="_blank">documentação e lista de aplicativos conhecidos</a>',
+			'help' => 'Veja a <a href="http://freshrss.github.io/FreshRSS/en/users/06_Mobile_access.html#access-via-mobile-app" target=_blank>documentação</a>',
 		),
-		'change_password' => 'Change password',	// TODO
-		'confirm_new_password' => 'Confirm new password',	// TODO
-		'current_password' => 'Current password<br /><small>(for the Web-form login method)</small>',	// TODO
+		'change_password' => 'Alterar senha',
+		'confirm_new_password' => 'Confirmar nova senha',
+		'current_password' => 'Senha atual<br /><small>(para o método de login via formulário Web)</small>',
 		'delete' => array(
 			'_' => 'Remover conta',
 			'warn' => 'Sua conta e todos os dados relacionados serão removidos.',
 		),
 		'email' => 'Endereço de e-mail',
-		'new_password' => 'New password',	// TODO
+		'new_password' => 'Nova senha',
 		'password_api' => 'Senha da API<br /><small>(p.s., para aplicativos móveis)</small>',
 		'password_format' => 'Ao menos 7 caracteres',
 		'title' => 'Perfil',
@@ -146,13 +146,13 @@ return array(
 	'query' => array(
 		'_' => 'Consultas do usuário',
 		'deprecated' => 'Esta não é mais válida. A categoria ou feed relacionado foi deletado.',
-		'description' => 'Description',	// TODO
+		'description' => 'Descrição',
 		'filter' => array(
 			'_' => 'Filtro aplicado:',
 			'categories' => 'Exibir por categoria',
 			'feeds' => 'Exibir por feed',
 			'order' => 'Ordenar por data',
-			'publish_labels_instead_of_tags' => 'Replace <i>feed tags</i> by <i>user labels</i> in the shared RSS',	// TODO
+			'publish_labels_instead_of_tags' => 'Substitua <i>tags de feed</i> por <i>rótulos de usuário</i> no RSS compartilhado.',
 			'search' => 'Expressão',
 			'shareOpml' => 'Habilita o compartilhamento por OPML de categorias e feeds correspondentes',
 			'shareRss' => 'Habilita o compartilhamento por HTML &amp; RSS',
@@ -160,8 +160,8 @@ return array(
 			'tags' => 'Exibir por tag',
 			'type' => 'Tipo',
 		),
-		'get_A' => 'Show all feeds, also those shown in their category',	// TODO
-		'get_Z' => 'Show all feeds, also archived ones',	// TODO
+		'get_A' => 'Mostrar todos os feeds, incluindo aqueles exibidos em sua categoria.',
+		'get_Z' => 'Mostrar todos os feeds, incluindo os arquivados',
 		'get_all' => 'Mostrar todos os artigos',
 		'get_all_labels' => 'Exibir artigos com qualquer rótulo',
 		'get_category' => 'Visualizar “%s” categoria',
@@ -170,12 +170,12 @@ return array(
 		'get_important' => 'Exibir artigos de feeds importantes',
 		'get_label' => 'Exibir artigos com rótulo “%s”',
 		'help' => 'Veja a <a href="https://freshrss.github.io/FreshRSS/en/users/user_queries.html" target="_blank">documentação para consultas de usuários e recompartilhamentos por HTML / RSS / OPML</a>.',
-		'image_url' => 'Image URL',	// TODO
+		'image_url' => 'URL da imagem',
 		'name' => 'Nome',
 		'no_filter' => 'Sem filtro',
 		'no_queries' => array(
-			'_' => 'No user queries are saved yet.',	// TODO
-			'help' => 'See <a href="https://freshrss.github.io/FreshRSS/en/users/user_queries.html" target="_blank">documentation</a>',	// TODO
+			'_' => 'Nenhuma consulta de usuário foi salva ainda.',
+			'help' => 'Veja a <a href="https://freshrss.github.io/FreshRSS/en/users/user_queries.html" target="_blank">documentação</a>',
 		),
 		'number' => 'Consulta n°%d',
 		'order_asc' => 'Exibir artigos mais antigos primeiro',
@@ -184,10 +184,10 @@ return array(
 		'share' => array(
 			'_' => 'Compartilhar esta consulta por link',
 			'disabled' => array(
-				'_' => 'disabled',	// TODO
-				'title' => 'Sharing',	// TODO
+				'_' => 'desativado',
+				'title' => 'Compartilhamento',
 			),
-			'greader' => 'Shareable link to the GReader JSON',	// TODO
+			'greader' => 'Link compartilhável para o JSON do GReader',
 			'help' => 'Forneça este link se quiser compartilhar esta consulta com alguém',
 			'html' => 'Link compartilhável para a página HTML',
 			'opml' => 'Link compartilhável para a lista de feeds OPML',
@@ -214,8 +214,8 @@ return array(
 	'reading' => array(
 		'_' => 'Leitura',
 		'after_onread' => 'Depois de “marcar todos como lido”,',
-		'always_show_favorites' => 'Mostrar todos os artivos nos favoritos por padrão',
-		'apply_to_individual_feed' => 'Applies to feeds individually',	// TODO
+		'always_show_favorites' => 'Mostrar todos os artigos nos favoritos por padrão',
+		'apply_to_individual_feed' => 'Aplica-se a feeds individualmente',
 		'article' => array(
 			'authors_date' => array(
 				'_' => 'Autores e Data',
@@ -231,9 +231,9 @@ return array(
 			),
 			'feed_title' => 'Título do Feed',
 			'icons' => array(
-				'_' => 'Article icons position<br /><small>(Reading view only)</small>',	// TODO
-				'above_title' => 'Above title',	// TODO
-				'with_authors' => 'In authors and date row',	// TODO
+				'_' => 'Posição dos ícones do artigo<br /><small>(Apenas na visualização de leitura)</small>',
+				'above_title' => 'Acima do título',
+				'with_authors' => 'Na linha de autores e data',
 			),
 			'tags' => array(
 				'_' => 'Tag',
@@ -275,19 +275,19 @@ return array(
 			'upon_gone' => 'Quando não estiver mais no feed de notícias principais',
 			'upon_reception' => 'ao receber um artigo',
 			'when' => 'Marcar artigo como lido…',
-			'when_same_title_in_category' => 'if an identical title already exists in the top <i>n</i> newest articles of the category',	// TODO
-			'when_same_title_in_feed' => 'Se um título idêntico já existir nos últimos <i>n</i> artigos mais novos (of the feed)',	// DIRTY
+			'when_same_title_in_category' => 'se um título idêntico já existir entre os <i>n</i> artigos mais recentes da categoria',
+			'when_same_title_in_feed' => 'Se um título idêntico já existir nos últimos <i>n</i> artigos mais novos (do feed)',
 		),
 		'show' => array(
 			'_' => 'Artigos para exibir',
 			'active_category' => 'Categoria ativa',
-			'adaptive' => 'Show unreads if any, all articles otherwise',	// TODO
+			'adaptive' => 'Mostrar artigos não lidos, se houver; caso contrário, mostrar todos os artigos.',
 			'all_articles' => 'Exibir todos os artigos',
 			'all_categories' => 'Exibir todas as categorias',
 			'no_category' => 'Nenhuma categoria',
 			'remember_categories' => 'lembrar de abrir as categorias',
-			'unread' => 'Exibir apenas não lido',
-			'unread_or_favorite' => 'Show unreads and favourites',	// TODO
+			'unread' => 'Exibir não lido',
+			'unread_or_favorite' => 'Exibir não lidos e favoritos',
 		),
 		'show_fav_unread_help' => 'Aplicar também nas tags',
 		'sides_close_article' => 'Clicando fora da área do texto do artigo fecha o mesmo',
@@ -297,7 +297,7 @@ return array(
 			'older_first' => 'Antigos primeiro',
 		),
 		'star' => array(
-			'when' => 'Mark an article as favourite…',	// TODO
+			'when' => 'Marque um artigo como favorito…',
 		),
 		'sticky_post' => 'Coloque o artigo no topo quando aberto',
 		'title' => 'Lendo',
@@ -359,7 +359,7 @@ return array(
 		'skip_next_article' => 'Focar o próximo sem abri-lo',
 		'skip_previous_article' => 'Focar o anterior sem abri-lo',
 		'title' => 'Atalhos',
-		'toggle_aside' => 'Toggle sidebar',	// TODO
+		'toggle_aside' => 'Alternar barra lateral',
 		'toggle_media' => 'Reproduzir/pausar mídia',
 		'user_filter' => 'Acesse filtros de usuário',
 		'user_filter_help' => 'Se há apenas um filtro, ele é utilizado. Caso contrário, os filtros serão acessíveis pelos seus números.',

+ 7 - 7
app/i18n/pt-BR/feedback.php

@@ -50,7 +50,7 @@ return array(
 			'ko' => '%s não pode ser habilitado. <a href="%s">verifique os logs do FreshRSS</a> para detalhes.',
 			'ok' => '%s agora está habilitado',
 		),
-		'invalid_view_mode' => 'Invalid view mode “%s”! Fall back to “Normal view”.',	// TODO
+		'invalid_view_mode' => 'Modo de visualização inválido “%s”! Retornando ao modo de visualização “Normal”.',
 		'no_access' => 'Você não tem acesso ao %s',
 		'not_enabled' => '%s não está habilitado',
 		'not_found' => '%s não existe',
@@ -58,15 +58,15 @@ return array(
 	),
 	'import_export' => array(
 		'export_no_zip_extension' => 'extensão ZIP não está presente em seu servidor. Por favor tente exportar os arquivos um por vez.',
-		'feeds_imported' => 'Seus feeds foram importados e serão atualizados agora / Your feeds have been imported. If you are done importing, you can now click the <i>Update feeds</i> button.',	// DIRTY
-		'feeds_imported_with_errors' => 'Seus feeds foram importados, mas alguns erros ocorreram / Your feeds have been imported, but some errors occurred. If you are done importing, you can now click the <i>Update feeds</i> button.',	// DIRTY
+		'feeds_imported' => 'Seus feeds foram importados e serão atualizados agora. Se você terminou de importar, pode clicar no botão <i>Atualizar feeds</i>.',
+		'feeds_imported_with_errors' => 'Seus feeds foram importados, mas alguns erros ocorreram. Se você terminou de importar, pode clicar no botão <i>Atualizar feeds</i>.',
 		'file_cannot_be_uploaded' => 'Arquivo não pôde ser enviado',
 		'no_zip_extension' => 'extensão ZIP não está presente em seu servidor.',
 		'zip_error' => 'Um erro ocorreu durante a importação do arquivo ZIP.',
 	),
 	'profile' => array(
 		'error' => 'Seu perfil não pode ser editado',
-		'passwords_dont_match' => 'Passwords don’t match',	// TODO
+		'passwords_dont_match' => 'As senhas não coincidem',
 		'updated' => 'Seu perfil foi editado com sucesso',
 	),
 	'sub' => array(
@@ -97,10 +97,10 @@ return array(
 			'deleted' => 'o feed foi deletado',
 			'error' => 'O feed não pode ser atualizado',
 			'favicon' => array(
-				'too_large' => 'Uploaded icon is too large. The maximum file size is <em>%s</em>.',	// TODO
-				'unsupported_format' => 'Unsupported image file format!',	// TODO
+				'too_large' => 'O ícone carregado é muito grande. O tamanho máximo do arquivo é <em>%s</em>.',
+				'unsupported_format' => 'Formato de arquivo de imagem não suportado!',
 			),
-			'internal_problem' => 'O feed RSS não pôde ser adicionado. <a href="%s">Verifique os logs do FreshRSS</a> para detalhes. You can try force adding by appending <code>#force_feed</code> to the URL.',	// DIRTY
+			'internal_problem' => 'O feed RSS não pôde ser adicionado. <a href="%s">Verifique os logs do FreshRSS</a> para detalhes. Você pode tentar forçar a adição anexando <code>#force_feed</code> à URL.',
 			'invalid_url' => 'URL <em>%s</em> é inválida',
 			'n_actualized' => '%d feeds foram atualizados',
 			'n_entries_deleted' => '%d artigos foram deletados',

+ 44 - 44
app/i18n/pt-BR/gen.php

@@ -16,14 +16,14 @@ return array(
 		'add' => 'Adicionar',
 		'back_to_rss_feeds' => '← Volte para o seu feeds RSS',
 		'cancel' => 'Cancelar',
-		'close' => 'Close',	// TODO
+		'close' => 'Fechar',
 		'create' => 'Criar',
-		'delete_all_feeds' => 'Delete all feeds',	// TODO
-		'delete_errored_feeds' => 'Delete feeds with errors',	// TODO
+		'delete_all_feeds' => 'Excluir todos os feeds',
+		'delete_errored_feeds' => 'Excluir feeds com erros',
 		'delete_muted_feeds' => 'Excluir feeds silenciados',
 		'demote' => 'Despromover',
 		'disable' => 'Desabilitar',
-		'download' => 'Download',	// TODO
+		'download' => 'Baixar',
 		'empty' => 'Vazio',
 		'enable' => 'Habilitar',
 		'export' => 'Exportar',
@@ -33,12 +33,12 @@ return array(
 		'manage' => 'Gerenciar',
 		'mark_read' => 'Marcar como lido',
 		'menu' => array(
-			'open' => 'Open menu',	// TODO
+			'open' => 'Abrir menu',
 		),
 		'nav_buttons' => array(
-			'next' => 'Next article',	// TODO
-			'prev' => 'Previous article',	// TODO
-			'up' => 'Go up',	// TODO
+			'next' => 'Próximo artigo',
+			'prev' => 'Artigo anterior',
+			'up' => 'Ir para cima',
 		),
 		'open_url' => 'Abrir URL',
 		'promote' => 'Promover',
@@ -62,18 +62,18 @@ return array(
 			'format' => '<small>Ao menos 7 caracteres</small>',
 		),
 		'reauth' => array(
-			'header' => 'Reauthentication is required',	// TODO
-			'tip' => 'You won’t be asked to sign in again for <u>%d minutes</u>',	// TODO
-			'title' => 'Reauthentication',	// TODO
+			'header' => 'Reautenticação é necessária',
+			'tip' => 'Você não será solicitado a entrar novamente por <u>%d minutos</u>',
+			'title' => 'Reautenticação',
 		),
 		'registration' => array(
 			'_' => 'Nova conta',
-			'ask' => 'Criar novoa conta?',
+			'ask' => 'Criar nova conta?',
 			'title' => 'Criação de conta',
 		),
 		'username' => array(
 			'_' => 'Usuário',
-			'format' => '<small>Máximo 16 caracteres alphanumericos</small>',
+			'format' => '<small>Máximo 16 caracteres alfanuméricos</small>',
 		),
 	),
 	'date' => array(
@@ -144,17 +144,17 @@ return array(
 		'category_empty' => 'Categoria vazia',
 		'confirm_action' => 'Você tem certeza que deseja efetuar esta ação? Ela não poderá ser cancelada!',
 		'confirm_action_feed_cat' => 'Você tem certeza que deseja efetuar esta ação ? Você irá perder favoritos e queries de usuários. Não poderá ser cancelado!',
-		'confirm_exit_slider' => 'Are you sure you want to discard unsaved settings?',	// TODO
+		'confirm_exit_slider' => 'Tem certeza de que deseja descartar as configurações não salvas?',
 		'feedback' => array(
 			'body_new_articles' => 'Há %%d novos artigos para ler no FreshRSS.',
 			'body_unread_articles' => '(não lido: %%d)',
 			'request_failed' => 'Uma solicitação falhou, isto pode ter sido causado por problemas de conexão com a internet.',
 			'title_new_articles' => 'FreshRSS: novos artigos!',
 		),
-		'labels_empty' => 'No labels',	// TODO
+		'labels_empty' => 'Sem etiquetas',
 		'new_article' => 'Há novos artigos disponíveis, clique para atualizar a página.',
 		'should_be_activated' => 'O JavaScript precisa estar ativo',
-		'unsafe_csp_header' => 'The CSP header in use is unsafe and FreshRSS may be vulnerable to XSS attacks. <a target="_blank" href="https://freshrss.github.io/FreshRSS/en/admins/10_ServerConfig.html#security">See documentation</a>',	// TODO
+		'unsafe_csp_header' => 'O cabeçalho CSP em uso é inseguro e o FreshRSS pode ser vulnerável a ataques XSS. <a target="_blank" href="https://freshrss.github.io/FreshRSS/en/admins/10_ServerConfig.html#security">Consulte a documentação</a>',
 	),
 	'lang' => array(
 		'cs' => 'Čeština',	// IGNORE
@@ -189,7 +189,7 @@ return array(
 		'about' => 'Sobre',
 		'account' => 'Conta',
 		'admin' => 'Administração',
-		'advanced_search' => 'Advanced Search',	// TODO
+		'advanced_search' => 'Pesquisa Avançada',
 		'archiving' => 'Arquivar',
 		'authentication' => 'Autenticação',
 		'check_install' => 'Verificação de instalação',
@@ -197,11 +197,11 @@ return array(
 		'display' => 'Visualização',
 		'extensions' => 'Extensões',
 		'logs' => 'Logs',	// IGNORE
-		'privacy' => 'Privacy',	// TODO
+		'privacy' => 'Privacidade',
 		'queries' => 'Queries de usuário',
 		'reading' => 'Leitura',
 		'search' => 'Procurar por palavras ou #tags',
-		'search_help' => 'See documentation for advanced <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">search parameters</a>',	// TODO
+		'search_help' => 'Consulte a documentação para parâmetros avançados de <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">pesquisa</a>',
 		'sharing' => 'Compartilhamento',
 		'shortcuts' => 'Atalhos',
 		'stats' => 'Estatísticas',
@@ -223,31 +223,31 @@ return array(
 		'translated' => 'Progress',	// IGNORE
 	),
 	'search' => array(
-		'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.',	// TODO
-		'authors' => 'Authors',	// TODO
-		'categories' => 'Categories',	// TODO
-		'content' => 'Content',	// TODO
-		'date_from' => 'From',	// TODO
-		'date_past' => 'In the past',	// TODO
-		'date_published' => 'Publication Date',	// TODO
-		'date_range' => 'Date Range',	// TODO
-		'date_received' => 'Received Date',	// TODO
-		'date_to' => 'To',	// TODO
-		'date_user' => 'User Modification Date',	// TODO
-		'feeds' => 'Feeds',	// TODO
-		'free_text' => 'Free Text',	// TODO
-		'free_text_help' => 'Search both in title and content',	// TODO
-		'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>',	// TODO
-		'labels' => 'My Labels',	// TODO
-		'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)',	// TODO
-		'sources' => 'Sources',	// TODO
-		'tags' => 'Article Tags',	// TODO
-		'text' => 'Text Search',	// TODO
-		'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.',	// TODO
-		'text_placeholder' => 'Keyword',	// TODO
-		'title' => 'Title',	// TODO
-		'url' => 'URL',	// TODO
-		'user_queries' => 'User Queries',	// TODO
+		'advanced_search_help' => 'Este formulário ajuda a construir consultas de pesquisa, mas as consultas manuais são ainda mais poderosas.',
+		'authors' => 'Autores',
+		'categories' => 'Categorias',
+		'content' => 'Conteúdo',
+		'date_from' => 'De',
+		'date_past' => 'No passado',
+		'date_published' => 'Data de publicação',
+		'date_range' => 'Intervalo de datas',
+		'date_received' => 'Data de recebimento',
+		'date_to' => 'Até',
+		'date_user' => 'Data de modificação pelo usuário',
+		'feeds' => 'Feeds',	// IGNORE
+		'free_text' => 'Texto livre',
+		'free_text_help' => 'Pesquisar tanto no título quanto no conteúdo',
+		'full_documentation' => 'Ver <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">documentação completa da pesquisa</a>',
+		'labels' => 'Minhas etiquetas',
+		'multiple_help' => 'Selecione um ou mais (segure <kbd>Ctrl</kbd> ou <kbd>Cmd</kbd>)',
+		'sources' => 'Fontes',
+		'tags' => 'Etiquetas de artigos',
+		'text' => 'Pesquisa de texto',
+		'text_help' => 'últiplas linhas são combinadas por um <i>ou</i> lógico. Também suporta <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">expressões regulares</a>.',
+		'text_placeholder' => 'Palavra-chave',
+		'title' => 'Título',
+		'url' => 'URL',	// IGNORE
+		'user_queries' => 'Consultas do usuário',
 	),
 	'share' => array(
 		'Known' => 'Sites no Known',

+ 39 - 39
app/i18n/pt-BR/index.php

@@ -16,13 +16,13 @@ return array(
 		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',	// IGNORE
 		'bug_reports' => array(
 			'environment_information' => array(
-				'_' => 'System information',	// TODO
-				'browser' => 'Browser',	// TODO
-				'database' => 'Database',	// TODO
-				'server_software' => 'Server software',	// TODO
-				'version_curl' => 'cURL version',	// TODO
-				'version_frss' => 'FreshRSS version',	// TODO
-				'version_php' => 'PHP version',	// TODO
+				'_' => 'Informações do sistema',
+				'browser' => 'Navegador',
+				'database' => 'Banco de dados',
+				'server_software' => 'Software do servidor',
+				'version_curl' => 'Versão do cURL',
+				'version_frss' => 'Versão do FreshRSS',
+				'version_php' => 'Versão do PHP',
 			),
 		),
 		'bugs_reports' => 'Reportar Bugs',
@@ -37,24 +37,24 @@ return array(
 	'feed' => array(
 		'empty' => 'Não há nenhum artigo para mostrar.',
 		'published' => array(
-			'_' => 'Published',	// TODO
-			'future' => 'Published in the future',	// TODO
-			'today' => 'Published today',	// TODO
-			'yesterday' => 'Published yesterday',	// TODO
+			'_' => 'Publicado',
+			'future' => 'Publicado no futuro',
+			'today' => 'Publicado hoje',
+			'yesterday' => 'Publicado ontem',
 		),
 		'received' => array(
-			'_' => 'Received',	// TODO
-			'today' => 'Received today',	// TODO
-			'yesterday' => 'Received yesterday',	// TODO
+			'_' => 'Recebido',
+			'today' => 'Recebido hoje',
+			'yesterday' => 'Recebido ontem',
 		),
 		'rss_of' => 'RSS feed do %s',
 		'title' => 'Stream principal',
 		'title_fav' => 'Favoritos',
 		'title_global' => 'Visualização Global',
 		'userModified' => array(
-			'_' => 'Modified by user',	// TODO
-			'today' => 'Modified by user today',	// TODO
-			'yesterday' => 'Modified by user yesterday',	// TODO
+			'_' => 'Modificado pelo usuário',
+			'today' => 'Modificado pelo usuário hoje',
+			'yesterday' => 'Modificado pelo usuário ontem',
 		),
 	),
 	'log' => array(
@@ -78,42 +78,42 @@ return array(
 		'mark_selection_unread' => 'Marcar seleção como não lida',
 		'mylabels' => 'Minhas etiquetas',
 		'newer_first' => 'Novos primeiro',
-		'non-starred' => 'Mostrar todos, exceto favoritos',
+		'non-starred' => 'Mostrar itens que não são favoritos',
 		'normal_view' => 'visualização normal',
 		'older_first' => 'Antigos primeiro',
 		'queries' => 'Queries do usuário',
-		'read' => 'Mostrar apenas lidos',
+		'read' => 'Mostrar leitura',
 		'reader_view' => 'Visualização de leitura',
 		'rss_view' => 'Feed RSS',
 		'search_short' => 'Buscar',
 		'sort' => array(
-			'_' => 'Sorting criteria',	// TODO
+			'_' => 'Critérios de ordenação',
 			'c' => array(
-				'name_asc' => 'Category, feed titles A→Z',	// TODO
-				'name_desc' => 'Category, feed titles Z→A',	// TODO
+				'name_asc' => 'Categoria, títulos dos feeds A→Z',
+				'name_desc' => 'Categoria, títulos dos feeds Z→A',
 			),
-			'date_asc' => 'Publication date 1→9',	// TODO
-			'date_desc' => 'Publication date 9→1',	// TODO
+			'date_asc' => 'Data de publicação 1→9',
+			'date_desc' => 'Data de publicação 9→1',
 			'f' => array(
-				'name_asc' => 'Feed title A→Z',	// TODO
-				'name_desc' => 'Feed title Z→A',	// TODO
+				'name_asc' => 'Título do feed A→Z',
+				'name_desc' => 'Título do feed Z→A',
 			),
-			'id_asc' => 'Freshly received last',	// TODO
-			'id_desc' => 'Freshly received first',	// TODO
-			'length_asc' => 'Content length 1→9',	// TODO
-			'length_desc' => 'Content length 9→1',	// TODO
-			'link_asc' => 'Link A→Z',	// TODO
-			'link_desc' => 'Link Z→A',	// TODO
-			'rand' => 'Random order',	// TODO
-			'title_asc' => 'Title A→Z',	// TODO
-			'title_desc' => 'Title Z→A',	// TODO
-			'user_modified_asc' => 'User modified 1→9',	// TODO
-			'user_modified_desc' => 'User modified 9→1',	// TODO
+			'id_asc' => 'Recebido recentemente por último',
+			'id_desc' => 'Recebido recentemente primeiro',
+			'length_asc' => 'Comprimento do conteúdo 1→9',
+			'length_desc' => 'Comprimento do conteúdo 9→1',
+			'link_asc' => 'Link A→Z',	// IGNORE
+			'link_desc' => 'Link Z→A',	// IGNORE
+			'rand' => 'Ordem aleatória',
+			'title_asc' => 'Título A→Z',
+			'title_desc' => 'Título Z→A',
+			'user_modified_asc' => 'Modificado pelo usuário 1→9',
+			'user_modified_desc' => 'Modificado pelo usuário 9→1',
 		),
-		'starred' => 'Mostrar apenas os favoritos',
+		'starred' => 'Mostrar favoritos',
 		'stats' => 'Estatísticas',
 		'subscription' => 'Gerenciamento de inscrições',
-		'unread' => 'Mostrar apenas os não lidos',
+		'unread' => 'Mostrar não lido',
 	),
 	'share' => 'Compartilhar',
 	'tag' => array(

+ 7 - 7
app/i18n/pt-BR/install.php

@@ -64,8 +64,8 @@ return array(
 		),
 		'files' => 'Instalação de arquivos',
 		'intl' => array(
-			'nok' => 'Cannot find the recommended library php-intl for internationalisation.',	// TODO
-			'ok' => 'You have the recommended library php-intl for internationalisation.',	// TODO
+			'nok' => 'Não foi possível encontrar a biblioteca recomendada php-intl para internacionalização.',
+			'ok' => 'Você tem a biblioteca recomendada php-intl para internacionalização.',
 		),
 		'json' => array(
 			'nok' => 'Não foi possível encontrar JSON (php-json).',
@@ -80,21 +80,21 @@ return array(
 			'ok' => 'Você tem a biblioteca necessária para expressões regulares (php-pcre).',
 		),
 		'pdo-mysql' => array(
-			'nok' => 'Cannot find the required PDO driver for MySQL/MariaDB.',	// TODO
+			'nok' => 'Não foi possível encontrar o driver PDO necessário para MySQL/MariaDB.',
 		),
 		'pdo-pgsql' => array(
-			'nok' => 'Cannot find the required PDO driver for PostgreSQL.',	// TODO
+			'nok' => 'Não foi possível encontrar o driver PDO necessário para PostgreSQL.',
 		),
 		'pdo-sqlite' => array(
-			'nok' => 'Cannot find the PDO driver for SQLite.',	// TODO
-			'ok' => 'You have the PDO driver for SQLite.',	// TODO
+			'nok' => 'Não foi possível encontrar o driver PDO necessário para SQLite.',
+			'ok' => 'Você tem o driver PDO para SQLite.',
 		),
 		'pdo' => array(
 			'nok' => 'Não foi encontrado o PDO ou um dos drivers suportados (pdo_sqlite, pdo_pgsql, pdo_mysql).',
 			'ok' => 'Você tem o PDO e ao menos um dos drivers suportados (pdo_sqlite, pdo_pgsql, pdo_mysql).',
 		),
 		'php' => array(
-			'_' => 'Instação do PHP',
+			'_' => 'Instalação do PHP',
 			'nok' => 'Sua versão do PHP é %s mas FreshRSS requer ao menos a versão %s.',
 			'ok' => 'Sua versão do PHP é %s, que é compatível com o FreshRSS.',
 		),

+ 43 - 43
app/i18n/pt-BR/sub.php

@@ -29,9 +29,9 @@ return array(
 			'help' => 'Forneça uma URL para <a href="http://opml.org/" target="_blank">o arquivo OPML </a> para preencher dinamicamente esta categoria com feeds',
 		),
 		'empty' => 'Categoria vazia',
-		'expand' => 'Expand category',	// TODO
+		'expand' => 'Expandir categoria',
 		'information' => 'Informações',
-		'open' => 'Open category',	// TODO
+		'open' => 'Abrir categoria',
 		'opml_url' => 'URL de OPML',
 		'position' => 'Posição de exibição',
 		'position_help' => 'Para controlar a ordem de exibição',
@@ -39,7 +39,7 @@ return array(
 	),
 	'feed' => array(
 		'accept_cookies' => 'Aceitar cookies',
-		'accept_cookies_help' => 'Permitir que o servidor de Feed defina os cookies (sarmazenados na memória apenas durante a solicitação)',
+		'accept_cookies_help' => 'Permitir que o servidor de Feed defina os cookies (armazenados na memória apenas durante a solicitação)',
 		'add' => 'Adicionar um feed',
 		'advanced' => 'Avançado',
 		'archiving' => 'Arquivar',
@@ -50,7 +50,7 @@ return array(
 			'password' => 'Senha HTTP',
 			'username' => 'Usuário HTTP',
 		),
-		'change_favicon' => 'Change…',	// TODO
+		'change_favicon' => 'Alterar…',
 		'clear_cache' => 'Sempre limpar o cache',
 		'content_action' => array(
 			'_' => 'Ações ao buscar pelo conteúdo de artigos',
@@ -58,7 +58,7 @@ return array(
 			'prepend' => 'Adicionar antes do conteúdo existente',
 			'replace' => 'Substituir o conteúdo existente',
 		),
-		'content_retrieval' => 'Content retrieval',	// TODO
+		'content_retrieval' => 'Recuperação de conteúdo',
 		'css_cookie' => 'Usar cookies ao buscar pelo conteúdo de artigos',
 		'css_cookie_help' => 'Exemplo: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>',
 		'css_help' => 'Retorna RSS feeds truncados (atenção, requer mais tempo!)',
@@ -69,31 +69,31 @@ return array(
 		),
 		'description' => 'Descrição',
 		'empty' => 'Este feed está vazio. Por favor verifique ele ainda é mantido.',
-		'error' => 'Este feed encontra-se com problema. Por favor verifique se ele ainda está disponível.',	// DIRTY
+		'error' => 'Este feed encontrou um problema. Se a situação persistir, verifique se ainda é possível acessá-lo.',
 		'export-as-opml' => array(
 			'download' => 'Download',	// IGNORE
-			'help' => 'Arquivo XML (data subset. <a href="https://freshrss.github.io/FreshRSS/en/developers/OPML.html" target="_blank">See documentation</a>)',	// DIRTY
+			'help' => 'Arquivo XML (subconjunto de dados. <a href="https://freshrss.github.io/FreshRSS/en/developers/OPML.html" target="_blank">Consulte a documentação</a>)',
 			'label' => 'Exportar como OPML',
 		),
-		'ext_favicon' => 'Set automatically',	// TODO
-		'favicon_changed_by_ext' => 'The icon has been set by the <b>%s</b> extension.',	// TODO
+		'ext_favicon' => 'Definir automaticamente',
+		'favicon_changed_by_ext' => 'O ícone foi definido pela extensão <b>%s</b>.',
 		'filteractions' => array(
 			'_' => 'Ações do filtro',
-			'help' => 'Escreva um filtro de pesquisa por linha. Operators <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">see documentation</a>.',	// DIRTY
-			'view_filter' => 'Preview filters on existing articles (new window)',	// TODO
+			'help' => 'Escreva um filtro de pesquisa por linha. Operadores <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">consulte a documentação</a>.',
+			'view_filter' => 'Visualizar filtros em artigos existentes (nova janela)',
 		),
-		'http_headers' => 'HTTP Headers',	// TODO
-		'http_headers_help' => 'Headers are separated by a newline, and the name and value of a header are separated by a colon (e.g: <kbd><code>Accept: application/atom+xml<br />Authorization: Bearer some-token</code></kbd>).',	// TODO
-		'icon' => 'Icon',	// TODO
+		'http_headers' => 'Cabeçalhos HTTP',
+		'http_headers_help' => 'Os cabeçalhos são separados por uma nova linha, e o nome e o valor de um cabeçalho são separados por dois pontos (ex: <kbd><code>Accept: application/atom+xml<br />Authorization: Bearer some-token</code></kbd>).',
+		'icon' => 'Ícone',
 		'information' => 'Informações',
 		'keep_min' => 'Número mínimo de artigos para manter',
 		'kind' => array(
 			'_' => 'Tipo de fonte de alimentação do Feed',
 			'html_json' => array(
-				'_' => 'HTML + XPath + JSON dot notation (JSON in HTML)',	// TODO
+				'_' => 'HTML + XPath + notação de ponto JSON (JSON em HTML)',
 				'xpath' => array(
-					'_' => 'XPath for JSON in HTML',	// TODO
-					'help' => 'Example: <code>normalize-space(//script[@type="application/json"])</code> (single JSON)<br />or: <code>//script[@type="application/ld+json"]</code> (one JSON object per article)',	// TODO
+					'_' => 'XPath para JSON em HTML',
+					'help' => 'Exemplo: <code>normalize-space(//script[@type="application/json"])</code> (JSON único)<br />ou: <code>//script[@type="application/ld+json"]</code> (um objeto JSON por artigo)',
 				),
 			),
 			'html_xpath' => array(
@@ -121,8 +121,8 @@ return array(
 					'help' => 'Exemplo: <code>descendant::img/@src</code>',
 				),
 				'item_timeFormat' => array(
-					'_' => 'Custom date/time format',	// TODO
-					'help' => 'Optional. A format supported by <a href="https://php.net/datetime.createfromformat" target="_blank"><code>DateTime::createFromFormat()</code></a> such as <code>d-m-Y H:i:s</code>',	// TODO
+					'_' => 'Formato de data/hora personalizado',
+					'help' => 'Opcional. Um formato suportado por <a href="https://php.net/datetime.createfromformat" target="_blank"><code>DateTime::createFromFormat()</code></a> assim como <code>d-m-Y H:i:s</code>',
 				),
 				'item_timestamp' => array(
 					'_' => 'Data do Item',
@@ -152,7 +152,7 @@ return array(
 				'help' => 'Um JSON na notação de ponto usa pontos entre os objetos e colchetes para arrays (e.g. <code>data.items[0].title</code>)',
 				'item' => array(
 					'_' => 'encontrando novidades <strong>itens</strong><br /><small>(mais importante)</small>',
-					'help' => 'Caminho do JSON para o array contendo os itens, e.g. <code>$</code> or <code>newsItems</code>',	// DIRTY
+					'help' => 'Caminho do JSON para o array contendo os itens, e.g. <code>$</code> ou <code>newsItems</code>',
 				),
 				'item_author' => 'autor do item',
 				'item_categories' => 'tags dos itens',
@@ -170,7 +170,7 @@ return array(
 				),
 				'item_timestamp' => array(
 					'_' => 'data do item',
-					'help' => 'The result will be parsed by <a href="https://php.net/strtotime" target="_blank"><code>strtotime()</code></a>',	// TODO
+					'help' => 'O resultado será analisado por <a href="https://php.net/strtotime" target="_blank"><code>strtotime()</code></a>',
 				),
 				'item_title' => 'título do item',
 				'item_uid' => 'ID único do item',
@@ -202,23 +202,23 @@ return array(
 		'moved_category_deleted' => 'Quando você deleta uma categoria, seus feeds são automaticamente classificados como <em>%s</em>.',
 		'mute' => array(
 			'_' => 'silenciar',
-			'state_is_muted' => 'This feed is muted',	// TODO
+			'state_is_muted' => 'Este feed está silenciado',
 		),
 		'no_selected' => 'Nenhum feed selecionado.',
 		'number_entries' => '%d artigos',
-		'open_feed' => 'Open feed %s',	// TODO
-		'path_entries_conditions' => 'Conditions for content retrieval',	// TODO
+		'open_feed' => 'Abrir feed %s',
+		'path_entries_conditions' => 'Condições para recuperação de conteúdo',
 		'priority' => array(
 			'_' => 'Visibilidade',
 			'category' => 'Mostrar na sua categoria',
-			'feed' => 'Show in its feed',	// TODO
+			'feed' => 'Mostrar no seu feed',
 			'hidden' => 'Não exibir',
 			'important' => 'Mostrar feeds importantes',
 			'main_stream' => 'Mostrar na tela principal',
 		),
 		'proxy' => 'Defina um proxy para buscar esse feed',
 		'proxy_help' => 'Selecione um protocolo (e.g: SOCKS5) e digite o endereço do proxy (e.g: <kbd>127.0.0.1:1080</kbd> or <kbd>username:password@127.0.0.1:1080</kbd>)',
-		'reset_favicon' => 'Reset to default',	// TODO
+		'reset_favicon' => 'Redefinir para o padrão',
 		'selector_preview' => array(
 			'show_raw' => 'Mostrar fonte',
 			'show_rendered' => 'Mostrar conteúdo',
@@ -238,20 +238,20 @@ return array(
 		'title_add' => 'Adicionar o RSS feed',
 		'ttl' => 'Não atualize automaticamente mais que',
 		'unicityCriteria' => array(
-			'_' => 'Article unicity criteria',	// TODO
-			'forced' => '<span title="Block the unicity criteria, even when the feed has duplicate articles">forced</span>',	// TODO
-			'help' => 'Relevant for invalid feeds.<br />⚠️ Changing the policy will create duplicates.',	// TODO
-			'id' => 'Standard ID (default)',	// TODO
-			'link' => 'Link',	// TODO
-			'sha1:content' => 'Content',	// TODO
-			'sha1:content_published' => 'Content + Date',	// TODO
-			'sha1:link_published' => 'Link + Date',	// TODO
-			'sha1:link_published_title' => 'Link + Date + Title',	// TODO
-			'sha1:link_published_title_content' => 'Link + Date + Title + Content',	// TODO
-			'sha1:published' => 'Date',	// TODO
-			'sha1:title' => 'Title',	// TODO
-			'sha1:title_published' => 'Title + Date',	// TODO
-			'sha1:title_published_content' => 'Title + Date + Content',	// TODO
+			'_' => 'Critério de unicidade do artigo',
+			'forced' => '<span title="Bloquear os critérios de unicidade, mesmo quando o feed tiver artigos duplicados">forçado</span>',
+			'help' => 'Relevante para feeds inválidos.<br />⚠️ Alterar a política criará duplicatas.',
+			'id' => 'ID padrão (padrão)',
+			'link' => 'Link',	// IGNORE
+			'sha1:content' => 'Conteúdo',
+			'sha1:content_published' => 'Conteúdo + Data',
+			'sha1:link_published' => 'Link + Data',
+			'sha1:link_published_title' => 'Link + Data + Título',
+			'sha1:link_published_title_content' => 'Link + Data + Título + Conteúdo',
+			'sha1:published' => 'Data',
+			'sha1:title' => 'Título',
+			'sha1:title_published' => 'Título + Data',
+			'sha1:title_published_content' => 'Título + Data + Conteúdo',
 		),
 		'url' => 'URL do Feed',
 		'useragent' => 'Defina um usuário para buscar este feed',
@@ -263,7 +263,7 @@ return array(
 	'import_export' => array(
 		'export' => array(
 			'_' => 'Exportar',
-			'sqlite' => 'Download user database as SQLite',	// TODO
+			'sqlite' => 'Baixar banco de dados do usuário como SQLite',
 		),
 		'export_labelled' => 'Exportar seus artigos etiquetados',
 		'export_opml' => 'Exporta a lista dos feeds (OPML)',
@@ -283,7 +283,7 @@ return array(
 			'idle' => 'Feeds inativos',
 			'main' => 'Estatísticas principais',
 			'repartition' => 'Repartição de artigos',
-			'unread_dates' => 'Unread dates',	// TODO
+			'unread_dates' => 'Datas não lidas',
 		),
 		'subscription_management' => 'Gerenciamento de inscrições',
 		'subscription_tools' => 'Ferramentas de inscrição',
@@ -301,7 +301,7 @@ return array(
 		'add_dynamic_opml' => 'Adicionar OPML dinâmico',
 		'add_feed' => 'Adicionar um feed',
 		'add_label' => 'Adicionar uma etiqueta',
-		'add_opml_category' => 'OPML category name',	// TODO
+		'add_opml_category' => 'Nome da categoria OPML',
 		'delete_label' => 'Deletar uma etiqueta',
 		'feed_management' => 'Gerenciamento dos RSS feeds',
 		'subscription_tools' => 'Ferramentas de inscrição',