Преглед изворни кода

Update and fix pt-br translation (#2833)

* Update and fix pt-br translation

* Update app/i18n/pt-br/install.php
* Update app/i18n/pt-br/conf.php
* Update app/i18n/pt-br/sub.php
* Update app/i18n/pt-br/index.php

Co-authored-by: Fabianski <yes@its.me>
Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
fabianski7 пре 6 година
родитељ
комит
c03e097dae

+ 27 - 27
app/i18n/pt-br/admin.php

@@ -2,10 +2,10 @@
 
 return array(
 	'auth' => array(
-		'allow_anonymous' => 'Permitir a leitura anónima dos artidos pelo usuário padrão (%s)',
+		'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)</small>',
-		'form' => 'Formulário Web(traditional, Necessita de JavaScript)',
+		'form' => 'Formulário Web(tradicional, Necessita de JavaScript)',
 		'http' => 'HTTP (Para usuários avançados com HTTPS)',
 		'none' => 'Nenhum (Perigoso)',
 		'title' => 'Autenticação',
@@ -67,8 +67,8 @@ return array(
 			'ok' => 'Você tem a extensão JSON.',
 		),
 		'mbstring' => array(
-			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	// TODO - Translation
-			'ok' => 'You have the recommended library mbstring for Unicode.',	// TODO - Translation
+			'nok' => 'Não foi possível encontrar a biblioteca recomendada para Unicode (mbstring).',
+			'ok' => 'Você tem a biblioteca recomendada para Unicode (mbstring).',
 		),
 		'minz' => array(
 			'nok' => 'Não foi possível encontrar o framework Minz.',
@@ -106,23 +106,23 @@ return array(
 		),
 	),
 	'extensions' => array(
-		'author' => 'Author',	// TODO - Translation
-		'community' => 'Available community extensions',	// TODO - Translation
-		'description' => 'Description',	// TODO - Translation
+		'author' => 'Autor',
+		'community' => 'Extensões da comunidade disponíveis',
+		'description' => 'Descrição',
 		'disabled' => 'Desabilitado',
 		'empty_list' => 'Não há extensões instaladas',
 		'enabled' => 'Habilitada',
-		'latest' => 'Installed',	// TODO - Translation
-		'name' => 'Name',	// TODO - Translation
+		'latest' => 'Instalado',
+		'name' => 'Nome',
 		'no_configure_view' => 'Esta extensão não pode ser configurada.',
 		'system' => array(
 			'no_rights' => 'Extensões do sistema (Você não tem direitos para isto)',
 			'_' => 'Extensões do sistema',
 		),
 		'title' => 'Extensões',
-		'update' => 'Update available',	// TODO - Translation
+		'update' => 'Atualização disponível',
 		'user' => 'Extensões do usuário',
-		'version' => 'Version',	// TODO - Translation
+		'version' => 'Versão',
 	),
 	'stats' => array(
 		'all_feeds' => 'Todos os feeds',
@@ -134,7 +134,7 @@ return array(
 		'entry_per_hour' => 'Por hora (média: %.2f mensagens)',
 		'entry_per_month' => 'Por mês(média: %.2f mensagens)',
 		'entry_repartition' => 'Repartição de entradas',
-		'feed' => 'Feed',	// TODO - Translation
+		'feed' => 'Feed',
 		'feed_per_category' => 'Feeds por categoria',
 		'idle' => 'Feeds inativos',
 		'main' => 'Estatísticas principais',
@@ -150,7 +150,7 @@ return array(
 		'repartition' => 'Repartição de artigos',
 		'status_favorites' => 'Favoritos',
 		'status_read' => 'Lido',
-		'status_total' => 'Total',	// TODO - Translation
+		'status_total' => 'Total',
 		'status_unread' => 'Não lidos',
 		'title' => 'Estatísticas',
 		'top_feed' => 'Top10 feeds',
@@ -159,10 +159,10 @@ return array(
 	'system' => array(
 		'auto-update-url' => 'URL do servidor para atualização automática',
 		'cookie-duration' => array(
-			'help' => 'in seconds',	// TODO - Translation
-			'number' => 'Duration to keep logged in',	// TODO - Translation
+			'help' => 'em segundos',
+			'number' => 'Manter seção ativa durante',
 		),
-		'force_email_validation' => 'Force email addresses validation',	// TODO - Translation
+		'force_email_validation' => 'Força verificação do endereço de email',
 		'instance-name' => 'Nome da instância',
 		'max-categories' => 'Limite de categorias por usuário',
 		'max-feeds' => 'Limite de Feeds por usuário',
@@ -182,25 +182,25 @@ return array(
 		'_' => 'Atualização do sistema',
 	),
 	'user' => array(
-		'admin' => 'Administrator',	// TODO - Translation
+		'admin' => 'Administrador',
 		'articles_and_size' => '%s artigos (%s)',
-		'article_count' => 'Articles',	// TODO - Translation
-		'back_to_manage' => '← Return to user list',	// TODO - Translation
+		'article_count' => 'Artigos',
+		'back_to_manage' => '← Voltar para à lista de usuários',
 		'create' => 'Criar novo usuário',
-		'database_size' => 'Database size',	// TODO - Translation
-		'delete_users' => 'Delete user',	// TODO - Translation
-		'email' => 'Email address',	// TODO - Translation
-		'feed_count' => 'Feeds',	// TODO - Translation
-		'is_admin' => 'Is admin',	// TODO - Translation
+		'database_size' => 'Tamanho do banco de dados',
+		'delete_users' => 'Deletar usuário',
+		'email' => 'Endereço de email',
+		'feed_count' => 'Feeds',
+		'is_admin' => 'É administrador',
 		'language' => 'Idioma',
-		'list' => 'User list',	// TODO - Translation
+		'list' => 'Lista de usuários',
 		'number' => 'Há %d conta criada',
 		'numbers' => 'Há %d contas criadas',
 		'password_form' => 'Senha<br /><small>(para o login pelo método do formulário)</small>',
 		'password_format' => 'Ao menos 7 caracteres',
-		'selected' => 'Selected user',	// TODO - Translation
+		'selected' => 'Usuário selecionado',
 		'title' => 'Gerenciar usuários',
-		'update_users' => 'Update user',	// TODO - Translation
+		'update_users' => 'Atualizar usuário',
 		'username' => 'Usuário',
 		'users' => 'Usuários',
 		'user_list' => 'Lista de usuários',

+ 39 - 39
app/i18n/pt-br/conf.php

@@ -3,20 +3,20 @@
 return array(
 	'archiving' => array(
 		'delete_after' => 'Remover artigos depois',
-		'exception' => 'Purge exception',	// TODO - Translation
-		'help' => 'Mais opções estão disponíveis nas configurações individuais do feed',
-		'keep_favourites' => 'Never delete favourites',	// TODO - Translation
-		'keep_labels' => 'Never delete labels',	// TODO - Translation
-		'keep_max' => 'Maximum number of articles to keep',	// TODO - Translation
+		'exception' => 'Regras de exceção da limpeza',
+		'help' => 'Mais opções estão disponíveis nas configurações individuais do Feed',
+		'keep_favourites' => 'Nunca deletar os favoritos',
+		'keep_labels' => 'Nunca deletar etiquetas',
+		'keep_max' => 'Número máximo de artigos para manter',
 		'keep_min_by_feed' => 'Número mínimo de artigos para deixar no feed',
-		'keep_period' => 'Maximum age of articles to keep',	// TODO - Translation
-		'keep_unreads' => 'Never delete unreads',	// TODO - Translation
-		'maintenance' => 'Maintenance',	// TODO - Translation
+		'keep_period' => 'Idade máxima dos artigos a serem mantidos',
+		'keep_unreads' => 'Nunca apagar os não lidos',
+		'maintenance' => 'Manutenção',
 		'optimize' => 'Otimizar banco de dados',
 		'optimize_help' => 'Faça ocasionalmente para reduzir o tamanho do banco de dados',
-		'policy' => 'Purge policy',	// TODO - Translation
-		'policy_warning' => 'If no purge policy is selected, every article will be kept.',	// TODO - Translation
-		'purge_now' => 'Purge agora',
+		'policy' => 'Política de limpeza',
+		'policy_warning' => 'Se nenhuma política de limpeza for selecionada, todos os artigos serão mantidos.',
+		'purge_now' => 'Limpar agora',
 		'title' => 'Arquivar',
 		'ttl' => 'Não atualize automaticamente mais frequente que',
 		'_' => 'Arquivar',
@@ -24,32 +24,32 @@ return array(
 	'display' => array(
 		'icon' => array(
 			'bottom_line' => 'Linha inferior',
-			'display_authors' => 'Authors',	// TODO - Translation
+			'display_authors' => 'Autores',
 			'entry' => 'Ícones de artigos',
 			'publication_date' => 'Data da publicação',
 			'related_tags' => 'Tags relacionadas',
 			'sharing' => 'Compartilhar',
 			'top_line' => 'Linha superior',
 		),
-		'language' => 'Ídioma',
+		'language' => 'Idioma',
 		'notif_html5' => array(
 			'seconds' => 'segundos (0 significa sem timeout)',
 			'timeout' => 'Notificação em HTML5 de timeout',
 		),
-		'show_nav_buttons' => 'Show the navigation buttons',	// TODO - Translation
+		'show_nav_buttons' => 'Mostrar botões de navegação',
 		'theme' => 'Tema',
 		'title' => 'Exibição',
 		'width' => array(
 			'content' => 'Largura do conteúdo',
 			'large' => 'Largo',
 			'medium' => 'Médio',
-			'no_limit' => 'Sem lmite',
+			'no_limit' => 'Sem limite',
 			'thin' => 'Fino',
 		),
 		'_' => 'Exibição',
 	),
 	'profile' => array(
-		'api' => 'API management',	// TODO - Translation
+		'api' => 'Administração da API',
 		'delete' => array(
 			'warn' => 'Sua conta e todos os dados relacionados serão removidos.',
 			'_' => 'Remover conta',
@@ -63,7 +63,7 @@ return array(
 	),
 	'query' => array(
 		'deprecated' => 'Esta não é mais válida. A categoria ou feed relacionado foi deletado.',
-		'display' => 'Display user query results',	// TODO - Translation
+		'display' => 'Exibir resultados da query do usuário',
 		'filter' => 'Filtro aplicado:',
 		'get_all' => 'Mostrar todos os artigos',
 		'get_category' => 'Visualizar "%s" categoria',
@@ -71,10 +71,10 @@ return array(
 		'get_feed' => 'Visualizar "%s" feed',
 		'none' => 'Você não criou nenhuma query de usuário ainda.',
 		'no_filter' => 'Sem filtro',
-		'number' => 'Query n°%d',	// TODO - Translation
+		'number' => 'Query n°%d',
 		'order_asc' => 'Exibir artigos mais antigos primeiro',
 		'order_desc' => 'Exibir artigos mais novos primeiro',
-		'remove' => 'Remove user query',	// TODO - Translation
+		'remove' => 'Remover query do usuário',
 		'search' => 'Busca por "%s"',
 		'state_0' => 'Exibir todos os artigos',
 		'state_1' => 'Exibir artigos lidos',
@@ -97,12 +97,12 @@ return array(
 	),
 	'reading' => array(
 		'after_onread' => 'Depois de "marcar todos como lido",',
-		'always_show_favorites' => 'Show all articles in favorites by default',	// TODO - Translation
+		'always_show_favorites' => 'Mostrar todos os artivos nos favoritos por padrão',
 		'articles_per_page' => 'Número de artigos por página',
 		'auto_load_more' => 'Carregar mais artigos no final da página',
 		'auto_remove_article' => 'Esconder artigos depois de lidos',
 		'confirm_enabled' => 'Exibir uma caixa de diálogo de confirmação quando acionar "marcar todos como lido"',
-		'display_articles_unfolded' => 'Mostrar aritogs abertos por padrão',
+		'display_articles_unfolded' => 'Mostrar artigos abertos por padrão',
 		'display_categories_unfolded' => 'Mostrar artigos abertos por padrão',
 		'hide_read_feeds' => 'Esconder categorias e feeds com nenhum artigo não lido (não funciona com a configuração "Mostrar todos os artigos”)',
 		'img_with_lazyload' => 'Utilizar o modo "lazy load" para carregar as imagens',
@@ -112,7 +112,7 @@ return array(
 		'read' => array(
 			'article_open_on_website' => 'quando o artigo é aberto no site original',
 			'article_viewed' => 'Quando o artigo é visualizado',
-			'scroll' => 'enquando scrolling',
+			'scroll' => 'enquanto scrolling',
 			'upon_reception' => 'ao receber um artigo',
 			'when' => 'Marcar artigo como lido…',
 		),
@@ -139,20 +139,20 @@ return array(
 		'_' => 'Leitura',
 	),
 	'sharing' => array(
-		'add' => 'Add a sharing method',	// TODO - Translation
-		'blogotext' => 'Blogotext',	// TODO - Translation
-		'diaspora' => 'Diaspora*',	// TODO - Translation
-		'email' => 'Email',	// TODO - Translation
-		'facebook' => 'Facebook',	// TODO - Translation
+		'add' => 'Adicionar um método de compartilhamento',
+		'blogotext' => 'Blogotext',
+		'diaspora' => 'Diaspora*',
+		'email' => 'Email',
+		'facebook' => 'Facebook',
 		'more_information' => 'Mais informação',
 		'print' => 'Imprimir',
-		'remove' => 'Remove sharing method',	// TODO - Translation
-		'shaarli' => 'Shaarli',	// TODO - Translation
+		'remove' => 'Remover método de compartilhamento',
+		'shaarli' => 'Shaarli',
 		'share_name' => 'Nome de visualização para compartilhar',
 		'share_url' => 'URL utilizada para compartilhar',
 		'title' => 'Compartilhando',
-		'twitter' => 'Twitter',	// TODO - Translation
-		'wallabag' => 'wallabag',	// TODO - Translation
+		'twitter' => 'Twitter',
+		'wallabag' => 'wallabag',
 		'_' => 'Compartilhando',
 	),
 	'shortcut' => array(
@@ -163,7 +163,7 @@ return array(
 		'collapse_article' => 'Fechar',
 		'first_article' => 'Ir para o primeiro artigo',
 		'focus_search' => 'Acessar a caixa de busca',
-		'global_view' => 'Switch to global view',	// TODO - Translation
+		'global_view' => 'Mudar para visualização global',
 		'help' => 'Mostrar documentação',
 		'javascript' => 'JavaScript deve ser habilitado para utilizar atalhos',
 		'last_article' => 'Ir para o último artigo',
@@ -172,21 +172,21 @@ return array(
 		'mark_read' => 'Marcar como lido',
 		'navigation' => 'Navegação',
 		'navigation_help' => 'Com o modificador "Shift", atalhos de navegação aplicam aos feeds.<br/>Com o "Alt" modificador, atalhos de navegação aplicam as categorias.',
-		'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.',	// TODO - Translation
+		'navigation_no_mod_help' => 'Os seguintes atalhos de navegação não suportam modificadores.',
 		'next_article' => 'Pule para o próximo artigo',
-		'normal_view' => 'Switch to normal view',	// TODO - Translation
+		'normal_view' => 'Mudar para a visualização normal',
 		'other_action' => 'Outras ações',
 		'previous_article' => 'Pule para o artigo anterior',
-		'reading_view' => 'Switch to reading view',	// TODO - Translation
-		'rss_view' => 'Open RSS view in a new tab',	// TODO - Translation
+		'reading_view' => 'Mudar para o modo de leitura',
+		'rss_view' => 'Abrir visualização de RSS em uma nova aba',
 		'see_on_website' => 'Visualize o site original',
 		'shift_for_all_read' => '+ <code>shift</code> para marcar todos os artigos como lido',
-		'skip_next_article' => 'Focus next without opening',	// TODO - Translation
-		'skip_previous_article' => 'Focus previous without opening',	// TODO - Translation
+		'skip_next_article' => 'Focar o próximo sem abri-lo',
+		'skip_previous_article' => 'Focar o anterior sem abri-lo',
 		'title' => 'Atalhos',
 		'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.',
-		'views' => 'Views',	// TODO - Translation
+		'views' => 'Visualizações',
 		'_' => 'Atalhos',
 	),
 	'user' => array(

+ 24 - 24
app/i18n/pt-br/feedback.php

@@ -3,15 +3,15 @@
 return array(
 	'access' => array(
 		'denied' => 'Você não tem permissão para acessar esta página',
-		'not_found' => 'VocÊ está buscando por uma página que não existe',
+		'not_found' => 'Você está buscando por uma página que não existe',
 	),
 	'admin' => array(
 		'optimization_complete' => 'Otimização Completa',
 	),
 	'api' => array(
 		'password' => array(
-			'failed' => 'Your password cannot be modified',	// TODO - Translation
-			'updated' => 'Your password has been modified',	// TODO - Translation
+			'failed' => 'Sua senha não pode ser modificada',
+			'updated' => 'Sua senha foi alterada com sucesso',
 		),
 	),
 	'auth' => array(
@@ -21,7 +21,7 @@ return array(
 		),
 		'login' => array(
 			'invalid' => 'Login está incorreto',
-			'success' => 'Vocé está conectado',
+			'success' => 'Você está conectado',
 		),
 		'logout' => array(
 			'success' => 'Você está desconectado',
@@ -30,7 +30,7 @@ return array(
 	),
 	'conf' => array(
 		'error' => 'Um erro ocorreu durante o salvamento das configurações',
-		'query_created' => 'Query "%s" foi criada.',
+		'query_created' => 'A query "%s" foi criada.',
 		'shortcuts_updated' => 'Atalhos foram criados',
 		'updated' => 'Configuração foi atualizada',
 	),
@@ -57,14 +57,14 @@ return array(
 		'zip_error' => 'Um erro ocorreu durante a importação do arquivo ZIP.',
 	),
 	'profile' => array(
-		'error' => 'Your profile cannot be modified',	// TODO - Translation
-		'updated' => 'Your profile has been modified',	// TODO - Translation
+		'error' => 'Seu perfil não pode ser editado',
+		'updated' => 'Seu perfil foi editado com sucesso',
 	),
 	'sub' => array(
 		'actualize' => 'Atualizando',
 		'articles' => array(
-			'marked_read' => 'The selected articles have been marked as read.',	// TODO - Translation
-			'marked_unread' => 'The articles have been marked as unread.',	// TODO - Translation
+			'marked_read' => 'Os artigos selecionados foram marcados como lidos.',
+			'marked_unread' => 'Os artigos foram marcados como não lidos',
 		),
 		'category' => array(
 			'created' => 'Categoria %s foi criada.',
@@ -81,34 +81,34 @@ return array(
 		),
 		'feed' => array(
 			'actualized' => '<em>%s</em> foi atualizado',
-			'actualizeds' => 'RSS feeds foi atualizado',
-			'added' => 'RSS feed <em>%s</em> foi adicionado',
+			'actualizeds' => 'Os feeds RSS foram atualizados',
+			'added' => 'O feed RSS <em>%s</em> foi adicionado',
 			'already_subscribed' => 'Você já está inscrito no <em>%s</em>',
-			'cache_cleared' => '<em>%s</em> cache has been cleared',	// TODO - Translation
+			'cache_cleared' => 'O cache do feed <em>%s</em> foi limpo',
 			'deleted' => 'o Feed foi deletado',
 			'error' => 'O feed não pode ser atualizado',
-			'internal_problem' => 'O RSS feed não pôde ser adicionado. <a href="%s">Verifique os FreshRSS logs</a> para detalhes.',
+			'internal_problem' => 'O feed RSS não pôde ser adicionado. <a href="%s">Verifique os logs do FreshRSS</a> para detalhes.',
 			'invalid_url' => 'URL <em>%s</em> é inválida',
 			'not_added' => '<em>%s</em> não pode ser atualizado',
-			'not_found' => 'Feed cannot be found',	// TODO - Translation
+			'not_found' => 'Não foi possível encontrar o feed',
 			'no_refresh' => 'Não há feed para atualizar…',
 			'n_actualized' => '%d feeds foram atualizados',
 			'n_entries_deleted' => '%d artigos foram deletados',
 			'over_max' => 'Você atingiu seu limite de feeds (%d)',
-			'reloaded' => '<em>%s</em> has been reloaded',	// TODO - Translation
+			'reloaded' => 'O feed <em>%s</em> foi recarregado',
 			'selector_preview' => array(
-				'http_error' => 'Failed to load website content.',	// TODO - Translation
-				'no_entries' => 'There is no entries in your feed. You need at least one entry to create a preview.',	// TODO - Translation
-				'no_feed' => 'Internal error (no feed to entry).',	// TODO - Translation
-				'no_result' => 'The selector didn\'t match anything. As a fallback the original feed text will be displayed instead.',	// TODO - Translation
-				'selector_empty' => 'The selector is empty. You need to define one to create a preview.',	// TODO - Translation
+				'http_error' => 'Falha ao carregar o conteúdo do site.',
+				'no_entries' => 'Não há nenhuma entrada nesse feed. Você precisa de pelo menos um artigo para criar uma pré-visualização',
+				'no_feed' => 'Erro interno (nenhum feed para verificar).',
+				'no_result' => 'The selector didn\'t match anything. As a fallback the original feed text will be displayed instead.',	// TODO - Translation - didn\'t?
+				'selector_empty' => 'O seletor está vazio. Você precisa definir um para criar uma pré-visualização.',
 			),
-			'updated' => 'Feed foram atualizados',
+			'updated' => 'Os feeds foram atualizados',
 		),
 		'purge_completed' => 'Limpeza completa (%d artigos deletados)',
 	),
 	'update' => array(
-		'can_apply' => 'FreshRSS será atualizado para a <strong>versão %s</strong>.',
+		'can_apply' => 'O FreshRSS será atualizado para a <strong>versão %s</strong>.',
 		'error' => 'O processo de atualização encontrou um erro: %s',
 		'file_is_nok' => 'Nova <strong>versão %s</strong> disponível, mas verifique as permissões no diretório <em>%s</em>. Servidor HTTP deve ter direitos para escrever dentro',
 		'finished' => 'Atualização completa!',
@@ -125,8 +125,8 @@ return array(
 			'_' => 'Usuário %s foi deletado',
 		),
 		'updated' => array(
-			'error' => 'User %s has not been updated',	// TODO - Translation
-			'_' => 'User %s has been updated',	// TODO - Translation
+			'error' => 'O usuário %s não foi atualizado',
+			'_' => 'O usuário %s foi atualizado com sucesso',
 		),
 	),
 );

+ 50 - 53
app/i18n/pt-br/gen.php

@@ -3,11 +3,11 @@
 return array(
 	'action' => array(
 		'actualize' => 'Atualizar',
-		'back' => '← Go back',	// TODO - Translation
+		'back' => '← Voltar',
 		'back_to_rss_feeds' => '← Volte para o seu feeds RSS',
 		'cancel' => 'Cancelar',
 		'create' => 'Criar',
-		'demote' => 'Demote',	// TODO - Translation
+		'demote' => 'Despromover',
 		'disable' => 'Desabilitar',
 		'empty' => 'Vazio',
 		'enable' => 'Habilitar',
@@ -17,20 +17,20 @@ return array(
 		'manage' => 'Gerenciar',
 		'mark_favorite' => 'Marcar como favorito',
 		'mark_read' => 'Marcar como lido',
-		'promote' => 'Promote',	// TODO - Translation
-		'purge' => 'Purge',	// TODO - Translation
+		'promote' => 'Promover',
+		'purge' => 'Limpar',
 		'remove' => 'Remover',
 		'see_website' => 'Ver o site',
 		'submit' => 'Enviar',
 		'truncate' => 'Deletar todos os artigos',
-		'update' => 'Update',	// TODO - Translation
+		'update' => 'Atualizar',
 	),
 	'auth' => array(
-		'accept_tos' => 'I accept the <a href="%s">Terms of Service</a>.',	// TODO - Translation
+		'accept_tos' => 'Eu aceito os <a href="%s">Termos de serviço</a>.',
 		'email' => 'Endereço de e-mail',
 		'keep_logged_in' => 'Mantenha logado por <small>(%s days)</small>',
-		'login' => 'Login',	// TODO - Translation
-		'logout' => 'Logout',	// TODO - Translation
+		'login' => 'Entrar',
+		'logout' => 'Sair',
 		'password' => array(
 			'format' => '<small>Ao menos 7 caracteres</small>',
 			'_' => 'Senha',
@@ -73,10 +73,7 @@ return array(
 		'Jun' => '\\J\\u\\n\\h\\o',
 		'jun' => 'jun',
 		'june' => 'Jun',
-		'last_2_year' => 'Last two years',	// TODO - Translation
 		'last_3_month' => 'Últimos três meses',
-		'last_3_year' => 'Last three years',	// TODO - Translation
-		'last_5_year' => 'Last five years',	// TODO - Translation
 		'last_6_month' => 'Últimos seis meses',
 		'last_month' => 'Últimos mês',
 		'last_week' => 'Última semana',
@@ -109,7 +106,7 @@ return array(
 	'dir' => 'ltr',
 	'freshrss' => array(
 		'about' => 'Sobre FreshRSS',
-		'_' => 'FreshRSS',	// TODO - Translation
+		'_' => 'FreshRSS',
 	),
 	'js' => array(
 		'category_empty' => 'Categoria vazia',
@@ -121,24 +118,24 @@ return array(
 			'title_new_articles' => 'FreshRSS: novos artigos!',
 		),
 		'new_article' => 'Há novos artigos disponíveis, clique para atualizar a página.',
-		'should_be_activated' => 'JavaScript precisa estar ativo',
+		'should_be_activated' => 'O JavaScript precisa estar ativo',
 	),
 	'lang' => array(
-		'cz' => 'Čeština',	// TODO - Translation
-		'de' => 'Deutsch',	// TODO - Translation
-		'en' => 'English',	// TODO - Translation
-		'es' => 'Español',	// TODO - Translation
-		'fr' => 'Français',	// TODO - Translation
-		'he' => 'עברית',	// TODO - Translation
-		'it' => 'Italiano',	// TODO - Translation
-		'kr' => '한국어',	// TODO - Translation
-		'nl' => 'Nederlands',	// TODO - Translation
-		'oc' => 'Occitan',	// TODO - Translation
-		'pt-br' => 'Português (Brasil)',	// TODO - Translation
-		'ru' => 'Русский',	// TODO - Translation
-		'sk' => 'Slovenčina',	// TODO - Translation
-		'tr' => 'Türkçe',	// TODO - Translation
-		'zh-cn' => '简体中文',	// TODO - Translation
+		'cz' => 'Čeština',
+		'de' => 'Deutsch',
+		'en' => 'English',
+		'es' => 'Español',
+		'fr' => 'Français',
+		'he' => 'עברית',
+		'it' => 'Italiano',
+		'kr' => '한국어',
+		'nl' => 'Nederlands',
+		'oc' => 'Occitan',
+		'pt-br' => 'Português (Brasil)',
+		'ru' => 'Русский',
+		'sk' => 'Slovenčina',
+		'tr' => 'Türkçe',
+		'zh-cn' => '简体中文',
 	),
 	'menu' => array(
 		'about' => 'Sobre',
@@ -149,7 +146,7 @@ return array(
 		'configuration' => 'Configuração',
 		'display' => 'Visualização',
 		'extensions' => 'Extensões',
-		'logs' => 'Logs',	// TODO - Translation
+		'logs' => 'Logs',
 		'queries' => 'Queries de usuário',
 		'reading' => 'Leitura',
 		'search' => 'Procurar por palavras ou #tags',
@@ -171,34 +168,34 @@ return array(
 		'previous' => 'Anterior',
 	),
 	'period' => array(
-		'days' => 'days',	// TODO - Translation
-		'hours' => 'hours',	// TODO - Translation
-		'months' => 'months',	// TODO - Translation
-		'weeks' => 'weeks',	// TODO - Translation
-		'years' => 'years',	// TODO - Translation
+		'days' => 'dias',
+		'hours' => 'horas',
+		'months' => 'meses',
+		'weeks' => 'semanas',
+		'years' => 'anos',
 	),
 	'share' => array(
-		'blogotext' => 'Blogotext',	// TODO - Translation
-		'diaspora' => 'Diaspora*',	// TODO - Translation
-		'email' => 'Email',	// TODO - Translation
-		'facebook' => 'Facebook',	// TODO - Translation
-		'gnusocial' => 'GNU social',	// TODO - Translation
-		'jdh' => 'Journal du hacker',	// TODO - Translation
-		'Known' => 'Known based sites',	// TODO - Translation
-		'lemmy' => 'Lemmy',	// TODO - Translation
-		'linkedin' => 'LinkedIn',	// TODO - Translation
-		'mastodon' => 'Mastodon',	// TODO - Translation
-		'movim' => 'Movim',	// TODO - Translation
-		'pinboard' => 'Pinboard',	// TODO - Translation
-		'pocket' => 'Pocket',	// TODO - Translation
+		'blogotext' => 'Blogotext',
+		'diaspora' => 'Diaspora*',
+		'email' => 'Email',
+		'facebook' => 'Facebook',
+		'gnusocial' => 'GNU social',
+		'jdh' => 'Journal du hacker',
+		'Known' => 'Known based sites',
+		'lemmy' => 'Lemmy',
+		'linkedin' => 'LinkedIn',
+		'mastodon' => 'Mastodon',
+		'movim' => 'Movim',
+		'pinboard' => 'Pinboard',
+		'pocket' => 'Pocket',
 		'print' => 'Imprimir',
-		'shaarli' => 'Shaarli',	// TODO - Translation
-		'twitter' => 'Twitter',	// TODO - Translation
-		'wallabag' => 'wallabag v1',	// TODO - Translation
-		'wallabagv2' => 'wallabag v2',	// TODO - Translation
+		'shaarli' => 'Shaarli',
+		'twitter' => 'Twitter',
+		'wallabag' => 'wallabag v1',
+		'wallabagv2' => 'wallabag v2',
 	),
 	'short' => array(
-		'attention' => 'Atencão!',
+		'attention' => 'Atenção!',
 		'blank_to_disable' => 'Deixe em branco para desativar',
 		'by_author' => 'Por:',
 		'by_default' => 'Por padrão',
@@ -206,7 +203,7 @@ return array(
 		'default_category' => 'Sem categoria',
 		'no' => 'Não',
 		'not_applicable' => 'Não disponível',
-		'ok' => 'Ok!',	// TODO - Translation
+		'ok' => 'Ok!',
 		'or' => 'ou',
 		'yes' => 'Sim',
 	),

+ 7 - 7
app/i18n/pt-br/index.php

@@ -2,7 +2,7 @@
 
 return array(
 	'about' => array(
-		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',	// TODO - Translation
+		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
 		'bugs_reports' => 'Reportar Bugs',
 		'credits' => 'Créditos',
 		'credits_content' => 'Alguns elementos de design vieram do <a href="http://twitter.github.io/bootstrap/">Bootstrap</a> Embora FreshRRS não utiliza este framework. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Ícones</a> vieram do <a href="https://www.gnome.org/">GNOME project</a>. <em>Open Sans</em> font police foi criada por <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS é baseado no <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, um framework PHP.',
@@ -26,8 +26,8 @@ return array(
 	'log' => array(
 		'clear' => 'Limpar logs',
 		'empty' => 'Arquivo de log está vazio',
-		'title' => 'Logs',	// TODO - Translation
-		'_' => 'Logs',	// TODO - Translation
+		'title' => 'Logs',
+		'_' => 'Logs',
 	),
 	'menu' => array(
 		'about' => 'Sobre o FreshRSS',
@@ -40,7 +40,7 @@ return array(
 		'mark_all_read' => 'Marcar todos como lidos',
 		'mark_cat_read' => 'Marcar categoria como lida',
 		'mark_feed_read' => 'Marcar feed com lido',
-		'mark_selection_unread' => 'Mark selection as unread',	// TODO - Translation
+		'mark_selection_unread' => 'Marcar seleção como não lida',
 		'newer_first' => 'Novos primeiro',
 		'non-starred' => 'Mostrar todos, exceto favoritos',
 		'normal_view' => 'visualização normal',
@@ -48,12 +48,12 @@ return array(
 		'queries' => 'Queries do usuário',
 		'read' => 'Mostrar apenas lidos',
 		'reader_view' => 'Visualização de leitura',
-		'rss_view' => 'RSS feed',	// TODO - Translation
+		'rss_view' => 'Feed RSS',
 		'search_short' => 'Buscar',
 		'starred' => 'Mostrar apenas os favoritos',
 		'stats' => 'Estatísticas',
 		'subscription' => 'Gerenciamento de inscrições',
-		'tags' => 'My labels',	// TODO - Translation
+		'tags' => 'Minhas etiquetas',
 		'unread' => 'Mostrar apenas os não lidos',
 	),
 	'share' => 'Compartilhar',
@@ -61,6 +61,6 @@ return array(
 		'related' => 'Tags relacionadas',
 	),
 	'tos' => array(
-		'title' => 'Terms of Service',	// TODO - Translation
+		'title' => 'Termos do serviço',
 	),
 );

+ 9 - 9
app/i18n/pt-br/install.php

@@ -22,7 +22,7 @@ return array(
 			'ok' => 'Configurações do banco de dados foram salvas.',
 			'_' => 'Configuração do banco de dados',
 		),
-		'host' => 'Host',	// TODO - Translation
+		'host' => 'Host',
 		'password' => 'Senha do banco de dados',
 		'prefix' => 'Prefixo da tabela',
 		'type' => 'Tipo do banco de dados',
@@ -60,16 +60,16 @@ return array(
 			'ok' => 'Você tem a biblioteca fileinfo.',
 		),
 		'http_referer' => array(
-			'nok' => 'Por favor verifique se você não está alterando seu HTTP REFERER.',
-			'ok' => 'Seu HTTP REFERER é conhecido e corresponde ao seu servidor.',
+			'nok' => 'Por favor verifique se você não está alterando o cabeçalho HTTP REFERER.',
+			'ok' => 'O cabeçalho HTTP REFERER é conhecido e corresponde ao seu servidor.',
 		),
 		'json' => array(
 			'nok' => 'Não foi possível encontrar JSON (php-json).',
 			'ok' => 'Você tem a extensão JSON.',
 		),
 		'mbstring' => array(
-			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	// TODO - Translation
-			'ok' => 'You have the recommended library mbstring for Unicode.',	// TODO - Translation
+			'nok' => 'Não foi possível encontrar a biblioteca recomendada para o Unicode (mbstring).',
+			'ok' => 'Você tem a biblioteca recomendada para o Unicode (mbstring).',
 		),
 		'minz' => array(
 			'nok' => 'Não foi possível encontrar o framework Minz.',
@@ -102,16 +102,16 @@ return array(
 		'_' => 'Configurações gerais',
 	),
 	'congratulations' => 'Parabéns!',
-	'default_user' => 'Usuário do usuário padrão <small>(máximo de 16 caracteres alphanumericos)</small>',
+	'default_user' => 'Usuário do usuário padrão <small>(máximo de 16 caracteres alfanuméricos)</small>',
 	'delete_articles_after' => 'Remover artigos depois',
 	'fix_errors_before' => 'Por favor solucione os erros antes de ir para o próximo passo.',
-	'javascript_is_better' => 'FreshRSS é mais agradável com o JavaScript ativo',
+	'javascript_is_better' => 'O FreshRSS é mais agradável com o JavaScript ativo',
 	'js' => array(
 		'confirm_reinstall' => 'Você irá perder suas configurações anteriores ao reinstalar o FreshRSS. Você está certo que deseja continuar?',
 	),
 	'language' => array(
-		'choose' => 'Escolhar o idioma para o FreshRSS',
-		'defined' => 'Idioma foi definido.',
+		'choose' => 'Escolha o idioma para o FreshRSS',
+		'defined' => 'O idioma foi definido.',
 		'_' => 'Idioma',
 	),
 	'not_deleted' => 'Algo deu errado; você deve deletar o arquivo <em>%s</em> manualmente.',

+ 35 - 35
app/i18n/pt-br/sub.php

@@ -2,13 +2,13 @@
 
 return array(
 	'api' => array(
-		'documentation' => 'Copy the following URL to use it within an external tool.',	// TODO - Translation
-		'title' => 'API',	// TODO - Translation
+		'documentation' => 'Copie a seguinte URL para utilizar com uma ferramenta externa',
+		'title' => 'API',
 	),
 	'bookmarklet' => array(
-		'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click "Subscribe" button in any page you want to subscribe to.',	// TODO - Translation
-		'label' => 'Subscribe',	// TODO - Translation
-		'title' => 'Bookmarklet',	// TODO - Translation
+		'documentation' => 'Arraste este botão para sua barra de favoritos ou clique com o botão direito e escolha "Adicionar este link aos favoritos". Depois clique no no link da barra de favoritos "Inscrever-se" em qualquer página que você queira se inscrever.',
+		'label' => 'Inscrever-se',
+		'title' => 'Bookmarklet',	// TODO? - Translation
 	),
 	'category' => array(
 		'add' => 'Adicionar uma categoria',
@@ -16,8 +16,8 @@ return array(
 		'empty' => 'Categoria vazia',
 		'information' => 'Informações',
 		'new' => 'Nova categoria',
-		'position' => 'Display position',	// TODO - Translation
-		'position_help' => 'To control category sort order',	// TODO - Translation
+		'position' => 'Posição de exibição',
+		'position_help' => 'Para controlar a ordem de exibição',
 		'title' => 'Título',
 		'_' => 'Categoria',
 	),
@@ -26,72 +26,72 @@ return array(
 		'advanced' => 'Avançado',
 		'archiving' => 'Arquivar',
 		'auth' => array(
-			'configuration' => 'Login',	// TODO - Translation
+			'configuration' => 'Entrar',
 			'help' => 'Permite acesso a feeds RSS protegidos por HTTP',
 			'http' => 'Autenticação HTTP',
 			'password' => 'Senha HTTP',
 			'username' => 'Usuário HTTP',
 		),
-		'clear_cache' => 'Always clear cache',	// TODO - Translation
+		'clear_cache' => 'Sempre limpar o cache',
 		'css_help' => 'Retorna RSS feeds truncados (atenção, requer mais tempo!)',
 		'css_path' => 'Caminho do CSS do artigo no site original',
 		'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 e atualize-o.',
 		'filteractions' => array(
-			'help' => 'Write one search filter per line.',	// TODO - Translation
-			'_' => 'Filter actions',	// TODO - Translation
+			'help' => 'Escreva um filtro de pesquisa por linha.',
+			'_' => 'Ações do filtro',
 		),
 		'information' => 'Informações',
 		'keep_min' => 'Número mínimo de artigos para manter',
 		'maintenance' => array(
-			'clear_cache' => 'Clear cache',	// TODO - Translation
-			'clear_cache_help' => 'Clear the cache of this feed on disk',	// TODO - Translation
-			'reload_articles' => 'Reload articles',	// TODO - Translation
-			'reload_articles_help' => 'Reload articles and fetch complete content',	// TODO - Translation
-			'title' => 'Maintenance',	// TODO - Translation
+			'clear_cache' => 'Limpar o cache',
+			'clear_cache_help' => 'Limpar o cache em disco deste feed',
+			'reload_articles' => 'Recarregar artigos',
+			'reload_articles_help' => 'Recarregar artigos e buscar conteúdo completo',
+			'title' => 'Manutenção',
 		),
 		'moved_category_deleted' => 'Quando você deleta uma categoria, seus feeds são automaticamente classificados como <em>%s</em>.',
-		'mute' => 'mute',	// TODO - Translation
+		'mute' => 'silenciar',
 		'no_selected' => 'Nenhum feed selecionado.',
 		'number_entries' => '%d artigos',
 		'priority' => array(
-			'archived' => 'Do not show (archived)',	// TODO - Translation
+			'archived' => 'Não exibir (arquivado)',
 			'main_stream' => 'Mostrar na tela principal',
-			'normal' => 'Show in its category',	// TODO - Translation
-			'_' => 'Visibility',	// TODO - Translation
+			'normal' => 'Mostrar na sua categoria',
+			'_' => 'Visibilidade',
 		),
 		'selector_preview' => array(
-			'show_raw' => 'Show source',	// TODO - Translation
-			'show_rendered' => 'Show content',	// TODO - Translation
+			'show_raw' => 'Mostrar fonte',
+			'show_rendered' => 'Mostrar conteúdo',
 		),
 		'show' => array(
-			'all' => 'Show all feeds',	// TODO - Translation
-			'error' => 'Show only feeds with error',	// TODO - Translation
+			'all' => 'Mostrar todos os Feeds',
+			'error' => 'Somente mostrar Feeds com erros',
 		),
 		'showing' => array(
-			'error' => 'Showing only feeds with error',	// TODO - Translation
+			'error' => 'Exibir apenas os feeds com erros',
 		),
-		'ssl_verify' => 'Verify SSL security',	// TODO - Translation
+		'ssl_verify' => 'Verificar segurança SSL',
 		'stats' => 'Estatísticas',
 		'think_to_add' => 'Você deve adicionar alguns feeds.',
-		'timeout' => 'Timeout in seconds',	// TODO - Translation
+		'timeout' => 'Timeout em segundos',
 		'title' => 'Título',
 		'title_add' => 'Adicionar o RSS feed',
-		'ttl' => 'Não atualize automáticamente mais que',
-		'url' => 'Feed URL',	// TODO - Translation
+		'ttl' => 'Não atualize automaticamente mais que',
+		'url' => 'URL do Feed',
 		'validator' => 'Verifique a validade do feed',
 		'website' => 'URL do site',
 		'websub' => 'Notificação instantânea com WebSub',
 	),
 	'firefox' => array(
-		'documentation' => 'Follow the steps described <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">here</a> to add FreshRSS to Firefox feed reader list.',	// TODO - Translation
-		'obsolete_63' => 'From version 63 and onwards, Firefox has removed the ability to add your own subscription services that are not standalone programs.',	// TODO - Translation
-		'title' => 'Firefox feed reader',	// TODO - Translation
+		'documentation' => 'Siga as instruções descritas em <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">here</a> para adicionar o FreshRSS para o seu leitor de Feed do Firefox.',
+		'obsolete_63' => 'A partir da versão 63, o Firefox removeu a capacidade de adicionar seus próprios serviços de assinatura que não são programas autônomos.',
+		'title' => 'Leitor de feed do Firefox',
 	),
 	'import_export' => array(
 		'export' => 'Exportar',
-		'export_labelled' => 'Export your labelled articles',	// TODO - Translation
+		'export_labelled' => 'Exportar seus artigos etiquetados',
 		'export_opml' => 'Exporta a lista dos feeds (OPML)',
 		'export_starred' => 'Exportar seus favoritos',
 		'feed_list' => 'Lista dos %s artigos',
@@ -105,11 +105,11 @@ return array(
 		'bookmark' => 'Inscreva-se (FreshRSS favoritos)',
 		'import_export' => 'Importar / exportar',
 		'subscription_management' => 'Gerenciamento de inscrições',
-		'subscription_tools' => 'Subscription tools',	// TODO - Translation
+		'subscription_tools' => 'Ferramentas de inscrição',
 	),
 	'title' => array(
 		'feed_management' => 'Gerenciamento dos RSS feeds',
-		'subscription_tools' => 'Subscription tools',	// TODO - Translation
+		'subscription_tools' => 'Ferramentas de inscrição',
 		'_' => 'Gerenciamento de inscrições',
 	),
 );

+ 20 - 20
app/i18n/pt-br/user.php

@@ -3,42 +3,42 @@
 return array(
 	'email' => array(
 		'feedback' => array(
-			'invalid' => 'The email address is invalid.',	// TODO - Translation
-			'required' => 'The email address is required.',	// TODO - Translation
+			'invalid' => 'Endereço de email inválido',
+			'required' => 'O endereço de email é necessário',
 		),
 		'validation' => array(
-			'change_email' => 'You can change your email address <a href="%s">on the profile page</a>.',	// TODO - Translation
-			'email_sent_to' => 'We sent you an email at <strong>%s</strong>, please follow its indications to validate your address.',	// TODO - Translation
+			'change_email' => 'Você pode mudar seu endereço de email <a href="%s">na página do perfil</a>.',
+			'email_sent_to' => 'Enviamos um email para <strong>%s</strong>. Por favor, siga as instruções contidas nele para verificar sua conta.',
 			'feedback' => array(
-				'email_failed' => 'We couldn’t send you an email because of a misconfiguration of the server.',	// TODO - Translation
-				'email_sent' => 'An email has been sent to your address.',	// TODO - Translation
-				'error' => 'The email address failed to be validated.',	// TODO - Translation
-				'ok' => 'The email address has been validated.',	// TODO - Translation
-				'unneccessary' => 'The email address was already validated.',	// TODO - Translation
-				'wrong_token' => 'The email address failed to be validated due to a wrong token.',	// TODO - Translation
+				'email_failed' => 'Não foi possível enviar um email para você devido a um erro de configuração no servidor.',
+				'email_sent' => 'Um email foi enviado para o seu endereço',
+				'error' => 'Falha na verificação do endereço de email',
+				'ok' => 'O endereço de email foi verificado com sucesso.',
+				'unneccessary' => 'Esse endereço de email já foi verificado.',
+				'wrong_token' => 'A verificação do endereço de email falhou por causa do token incorreto.',
 			),
-			'need_to' => 'You need to validate your email address before being able to use %s.',	// TODO - Translation
-			'resend_email' => 'Resend the email',	// TODO - Translation
-			'title' => 'Email address validation',	// TODO - Translation
+			'need_to' => 'Para poder utilizar o %s, você deve verificar seu endereço de email.',
+			'resend_email' => 'Reenviar o email',
+			'title' => 'Validação do endereço de email',
 		),
 	),
 	'mailer' => array(
 		'email_need_validation' => array(
-			'body' => 'You’ve just registered on %s but you still need to validate your email. For that, just follow the link:',	// TODO - Translation
-			'title' => 'You need to validate your account',	// TODO - Translation
-			'welcome' => 'Welcome %s,',	// TODO - Translation
+			'body' => 'Você se registrou no %s. Mas ainda é necessário verificar seu endereço de email. Para isso, basta seguir o link:',
+			'title' => 'Você precisa verificar sua conta',
+			'welcome' => 'Bem vindo %s,',
 		),
 	),
 	'password' => array(
-		'invalid' => 'The password is invalid.',	// TODO - Translation
+		'invalid' => 'Senha incorreta',
 	),
 	'tos' => array(
 		'feedback' => array(
-			'invalid' => 'You must accept the Terms of Service to be able to register.',	// TODO - Translation
+			'invalid' => 'Para se registrar, você deve aceitar os Termos do serviço.',
 		),
 	),
 	'username' => array(
-		'invalid' => 'The username is invalid.',	// TODO - Translation
-		'taken' => 'The username %s is taken.',	// TODO - Translation
+		'invalid' => 'Nome de usuário inválido.',
+		'taken' => 'O nome de usuário %s já está sendo utilizado',
 	),
 );