Sfoglia il codice sorgente

i18n: Update pt-PT localization (#9473)

* i18n: Update pt-PT localization in feedback.php

- Translate missing strings (resolve TODO comments)
- Fix Brazilian Portuguese terminology to European Portuguese (pt-PT)
- Standardize phrasing according to FreshRSS i18n conventions

* i18n: Update pt-PT localization in admin.php

- Translate missing strings (resolve TODO comments)
- Fix Brazilian Portuguese terminology to European Portuguese (pt-PT)
- Standardize phrasing according to FreshRSS i18n conventions

* i18n: Update pt-PT localization in api.php

- Translate missing strings (resolve TODO comments)
- Fix Brazilian Portuguese terminology to European Portuguese (pt-PT)
- Standardize phrasing according to FreshRSS i18n conventions

* i18n: Update pt-PT localization in conf.php

- Translate missing strings (resolve TODO comments)
- Fix Brazilian Portuguese terminology to European Portuguese (pt-PT)
- Standardize phrasing according to FreshRSS i18n conventions

* i18n: Update pt-PT localization in gen.php

- Translate missing strings (resolve TODO comments)
- Fix Brazilian Portuguese terminology to European Portuguese (pt-PT)
- Standardize phrasing according to FreshRSS i18n conventions

* i18n: Update pt-PT localization in index.php

- Translate missing strings (resolve TODO comments)
- Fix Brazilian Portuguese terminology to European Portuguese (pt-PT)
- Standardize phrasing according to FreshRSS i18n conventions

* i18n: Update pt-PT localization in sub.php

- Translate missing strings (resolve TODO comments)
- Fix Brazilian Portuguese terminology to European Portuguese (pt-PT)
- Standardize phrasing according to FreshRSS i18n conventions

* i18n: Update pt-PT localization in user.php

- Translate missing strings (resolve TODO comments)
- Fix Brazilian Portuguese terminology to European Portuguese (pt-PT)
- Standardize phrasing according to FreshRSS i18n conventions

* i18n: Update pt-PT localization in install.php

- Translate missing strings (resolve TODO comments)
- Fix Brazilian Portuguese terminology to European Portuguese (pt-PT)
- Standardize phrasing according to FreshRSS i18n conventions

* Fixed previous word "Link" not translated

* make fix-all + IGNORE

---------

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
Ricardo Simões 13 ore fa
parent
commit
f84020a5b4

+ 1 - 1
README.fr.md

@@ -259,7 +259,7 @@ Voir le [dépôt dédié à ces extensions](https://github.com/FreshRSS/Extensio
 | Occitan (oc) | ■■■■■■■・・・ 73% | [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) | ■■■■■■■■■・ 99% | [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) | ■■■■■■■■・・ 80% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-PT+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Português (Portugal) (pt-PT) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-PT+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Русский (ru) | ■■■■■■■■■・ 98% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Slovenčina (sk) | ■■■■■■■■・・ 81% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Türkçe (tr) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) |

+ 1 - 1
README.md

@@ -155,7 +155,7 @@ See the [repository dedicated to those extensions](https://github.com/FreshRSS/E
 | Occitan (oc) | ■■■■■■■・・・ 73% | [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) | ■■■■■■■■■・ 99% | [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) | ■■■■■■■■・・ 80% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-PT+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Português (Portugal) (pt-PT) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-PT+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Русский (ru) | ■■■■■■■■■・ 98% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Slovenčina (sk) | ■■■■■■■■・・ 81% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Türkçe (tr) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) |

+ 50 - 50
app/i18n/pt-PT/admin.php

@@ -12,32 +12,32 @@
 
 return array(
 	'auth' => array(
-		'allow_anonymous' => 'Permitir a leitura anônima dos artigos pelo utilizador padrão (%s)',
-		'allow_anonymous_refresh' => 'Permitir atualização anônima dos artigos',
-		'api_enabled' => 'Permitir acesso à <abbr>API</abbr> <small>(É preciso para aplicações móveis e partilha pesquisas personalizadas)</small>',
-		'form' => 'Formulário Web(tradicional, Necessita de JavaScript)',
-		'http' => 'HTTP (advanced: managed by Web server, OIDC, SSO…)',	// TODO
+		'allow_anonymous' => 'Permitir a leitura anónima dos artigos pelo utilizador predefinido (%s)',
+		'allow_anonymous_refresh' => 'Permitir atualização anónima dos artigos',
+		'api_enabled' => 'Permitir acesso à <abbr>API</abbr> <small>(Necessário para aplicações móveis e partilha de pesquisas personalizadas)</small>',
+		'form' => 'Formulário web (tradicional, requer JavaScript)',
+		'http' => 'HTTP (avançado: gerido pelo servidor web, OIDC, SSO…)',
 		'none' => 'Nenhum (Perigoso)',
 		'title' => 'Autenticação',
 		'token' => 'Token de autenticação principal',
-		'token_help' => 'Permite acesso a todos as saídas RSS do utilizador bem como atualização dos feeds sem autenticação:',
+		'token_help' => 'Permite acesso a todas as saídas RSS do utilizador, bem como a atualização dos feeds sem autenticação:',
 		'type' => 'Método de autenticação',
 	),
 	'extensions' => array(
 		'author' => 'Autor',
 		'community' => 'Extensões da comunidade disponíveis',
 		'description' => 'Descrição',
-		'disabled' => 'Desactivado',
+		'disabled' => 'Desativado',
 		'empty_list' => 'Não existem extensões instaladas',
-		'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.',	// TODO
-		'enabled' => 'Habilitada',
-		'is_compatible' => 'Is compatible',	// TODO
+		'empty_list_help' => 'Verifique os registos para determinar o motivo da lista de extensões vazia.',
+		'enabled' => 'Ativado',
+		'is_compatible' => 'É compatível',
 		'latest' => 'Instalado',
 		'name' => 'Nome',
 		'no_configure_view' => 'Esta extensão não pode ser configurada.',
 		'system' => array(
 			'_' => 'Extensões do sistema',
-			'no_rights' => 'Extensões do sistema (Não tem permissões para isto)',
+			'no_rights' => 'Extensões do sistema (não tem permissões para isto)',
 		),
 		'title' => 'Extensões',
 		'update' => 'Atualização disponível',
@@ -48,24 +48,24 @@ return array(
 		'_' => 'Estatísticas',
 		'all_feeds' => 'Todos os feeds',
 		'category' => 'Categoria',
-		'date_published' => 'Publication date',	// TODO
-		'date_received' => 'Received date',	// TODO
-		'entry_count' => 'Contagem de entrada',
+		'date_published' => 'Data de publicação',
+		'date_received' => 'Data de receção',
+		'entry_count' => 'Contagem de entradas',
 		'entry_per_category' => 'Entradas por categoria',
 		'entry_per_day' => 'Entradas por dia (últimos 30 dias)',
-		'entry_per_day_of_week' => 'Por dia da semana(média: %.2f mensagens)',
+		'entry_per_day_of_week' => 'Por dia da semana (média: %.2f mensagens)',
 		'entry_per_hour' => 'Por hora (média: %.2f mensagens)',
-		'entry_per_month' => 'Por mês(média: %.2f mensagens)',
+		'entry_per_month' => 'Por mês (média: %.2f mensagens)',
 		'entry_repartition' => 'Repartição de entradas',
 		'feed' => 'Feed',	// IGNORE
 		'feed_per_category' => 'Feeds por categoria',
 		'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',
@@ -73,8 +73,8 @@ return array(
 		'status_total' => 'Total',	// IGNORE
 		'status_unread' => 'Não lidos',
 		'title' => 'Estatísticas',
-		'top_feed' => 'Top10 Feeds',
-		'unread_dates' => 'Dates with most unread articles',	// TODO
+		'top_feed' => 'Top 10 de Feeds',
+		'unread_dates' => 'Datas com mais artigos não lidos',
 	),
 	'system' => array(
 		'_' => 'Configuração do sistema',
@@ -83,34 +83,34 @@ return array(
 			'_' => 'URL Base',
 			'recommendation' => 'Recomendação automática: <kbd>%s</kbd>',
 		),
-		'closed_registration_message' => 'Message if registrations are closed',	// TODO
+		'closed_registration_message' => 'Mensagem caso os registos estejam encerrados',
 		'cookie-duration' => array(
 			'help' => 'em segundos',
-			'number' => 'Manter seção ativa durante',
+			'number' => 'Manter sessão ativa durante',
 		),
-		'default_closed_registration_message' => 'This server does not accept new registrations at the moment.',	// TODO
-		'force_email_validation' => 'Força verificação do endereço de email',
+		'default_closed_registration_message' => 'Este servidor não aceita novos registos de momento.',
+		'force_email_validation' => 'Forçar verificação do endereço de email',
 		'instance-name' => 'Nome da instância',
 		'internal-host-allowlist' => array(
-			'_' => 'Internal host allowlist',	// TODO
-			'help' => 'One entry per line:<ul><li>A <code>host:port</code>. For instance <code>127.0.0.1:8080</code> or <code>rss-bridge:80</code></li><li>A CIDR notation. For instance <code>0.0.0.0/0</code> to allow any IPv4, <code>::/0</code> to allow any IPv6</li><li>A <code>*</code> to allow any host (unsafe)</li></ul>',	// TODO
+			'_' => 'Lista de permissões de anfitriões internos',
+			'help' => 'Uma entrada por linha:<ul><li>Um <code>host:port</code>. Por exemplo, <code>127.0.0.1:8080</code> ou <code>rss-bridge:80</code></li><li>Uma notação CIDR. Por exemplo, <code>0.0.0.0/0</code> para permitir qualquer IPv4, <code>::/0</code> para permitir qualquer IPv6</li><li>Um <code>*</code> para permitir qualquer anfitrião (inseguro)</li></ul>',
 		),
 		'max-categories' => 'Limite de categorias por utilizador',
-		'max-feeds' => 'Limite de Feeds por utilizador',
-		'override-by-env-var' => 'This setting is set by the environment variable <kbd>%s</kbd>.',	// TODO
+		'max-feeds' => 'Limite de feeds por utilizador',
+		'override-by-env-var' => 'Esta definição é definida pela variável de ambiente <kbd>%s</kbd>.',
 		'registration' => array(
-			'number' => 'Máximo número de contas',
+			'number' => 'Número máximo de contas',
 			'select' => array(
-				'label' => 'Formulário de Registro',
+				'label' => 'Formulário de registo',
 				'option' => array(
-					'noform' => 'Desativado: Sem formulário de registro',
-					'nolimit' => 'Ativado: Sem limites de contas',
-					'setaccountsnumber' => 'Definir o máximo número de contas',
+					'noform' => 'Desativado: sem formulário de registo',
+					'nolimit' => 'Ativado: sem limite de contas',
+					'setaccountsnumber' => 'Definir o número máximo de contas',
 				),
 			),
 			'status' => array(
-				'disabled' => 'Formulário desabilitado',
-				'enabled' => 'Formulário activado',
+				'disabled' => 'Formulário desativado',
+				'enabled' => 'Formulário ativado',
 			),
 			'title' => 'Formulário de registo de utilizador',
 		),
@@ -128,16 +128,16 @@ return array(
 		'_' => 'Atualização do sistema',
 		'apply' => 'Aplicar',
 		'changelog' => 'Registo de alterações',
-		'check' => 'Pesquisar por novas atualizações',
+		'check' => 'Procurar novas atualizações',
 		'copiedFromURL' => 'update.php copiado de %s para ./data',
 		'current_version' => 'Versão',
 		'last' => 'Última verificação',
-		'loading' => 'A fazer atualização…',
-		'none' => 'Nenhuma atualização disponivel',
+		'loading' => 'A atualizar…',
+		'none' => 'Nenhuma atualização disponível',
 		'releaseChannel' => array(
-			'_' => 'Canal de Release',
-			'edge' => 'Release contínua (“edge”)',
-			'latest' => 'Release estável (“latest”)',	// DIRTY
+			'_' => 'Canal de lançamento',
+			'edge' => 'Lançamento contínuo (“edge”)',
+			'latest' => 'Lançamento estável (“latest”)',
 		),
 		'title' => 'Sistema de atualização',
 		'viaGit' => 'Atualização via git e GitHub.com iniciada',
@@ -145,20 +145,20 @@ return array(
 	'user' => array(
 		'admin' => 'Administrador',
 		'article_count' => 'Artigos',
-		'back_to_manage' => '← Voltar para à lista de utilizadores',
+		'back_to_manage' => '← Voltar para a lista de utilizadores',
 		'create' => 'Criar novo utilizador',
-		'database_size' => 'Tamanho do banco de dados',
+		'database_size' => 'Tamanho da base de dados',
 		'email' => 'Endereço de email',
-		'enabled' => 'Activado',
+		'enabled' => 'Ativado',
 		'feed_count' => 'Feeds',	// IGNORE
 		'is_admin' => 'É administrador',
 		'language' => 'Idioma',
-		'last_user_activity' => 'Última Atividade do utilizador',
-		'list' => 'Lista de utilizadors',
-		'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',
+		'last_user_activity' => 'Última atividade do utilizador',
+		'list' => 'Lista de utilizadores',
+		'number' => 'Existe %d conta criada',
+		'numbers' => 'Existem %d contas criadas',
+		'password_form' => 'Palavra-passe<br /><small>(para o início de sessão pelo método de formulário)</small>',
+		'password_format' => 'Pelo menos 7 caracteres',
 		'title' => 'Gerir utilizadores',
 		'username' => 'utilizador',
 	),

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

@@ -12,22 +12,22 @@
 
 return array(
 	'information' => array(
-		'address' => 'Your API address:',	// TODO
+		'address' => 'O 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' => '⚠️ AVISO: sem suporte para <code>%2F</code>, alguns clientes poderão não funcionar!',
+			'invalid-configuration' => '⚠️ AVISO: URL base provavelmente inválido 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 Google Reader:',
 		),
 		'title' => array(
-			'_' => 'FreshRSS API endpoints',	// TODO
-			'extension' => 'API for extensions',	// TODO
-			'fever' => 'Fever compatible API',	// TODO
-			'greader' => 'Google Reader compatible API',	// TODO
+			'_' => 'Pontos de acesso da API do FreshRSS',
+			'extension' => 'API para extensões',
+			'fever' => 'API compatível com Fever',
+			'greader' => 'API compatível com Google Reader',
 		),
 	),
 );

+ 131 - 131
app/i18n/pt-PT/conf.php

@@ -14,7 +14,7 @@ return array(
 	'archiving' => array(
 		'_' => 'Arquivar',
 		'exception' => 'Regras de exceção da limpeza',
-		'help' => 'Mais opções estão disponíveis nas configurações individuais do Feed',
+		'help' => 'Mais opções estão disponíveis nas configurações individuais do feed',
 		'keep_favourites' => 'Nunca apagar os favoritos',
 		'keep_labels' => 'Nunca apagar tags',
 		'keep_max' => 'Número máximo de artigos para manter no feed',
@@ -22,13 +22,13 @@ return array(
 		'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',
+		'optimize' => 'Otimizar base de dados',
+		'optimize_help' => 'Faça ocasionalmente para reduzir o tamanho da base de dados',
 		'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',
+		'ttl' => 'Não atualizar automaticamente com mais frequência do que',
 	),
 	'display' => array(
 		'_' => 'Exibição',
@@ -45,11 +45,11 @@ return array(
 				'none' => 'Nenhum',
 				'with_authors' => 'Com autores e data',
 			),
-			'feed_title' => 'Título do Feed',
+			'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 dos artigos<br /><small>(Apenas na vista de leitura)</small>',
+				'above_title' => 'Acima do título',
+				'with_authors' => 'Na linha de autores e data',
 			),
 			'tags' => array(
 				'_' => 'Tag',
@@ -60,16 +60,16 @@ return array(
 			),
 			'tags_max' => array(
 				'_' => 'Número máximo de tags exibidas',
-				'help' => '0 significa: mostrar todas as tags e não enconde-las',
+				'help' => '0 significa: mostrar todas as tags e não as esconder',
 			),
 		),
 		'darkMode' => array(
-			'_' => 'Modo noturno automático',
+			'_' => 'Modo escuro automático',
 			'auto' => 'Automático',
-			'help' => 'For compatible themes only',	// TODO
+			'help' => 'Apenas para temas compatíveis',
 			'no' => 'Não',
 		),
-		'display_enclosures' => 'Show enclosures',	// TODO
+		'display_enclosures' => 'Mostrar anexos',
 		'headline' => array(
 			'articles_header_footer' => 'Artigos: cabeçalho/rodapé',
 		),
@@ -79,33 +79,33 @@ return array(
 			'entry' => 'Ícones de artigos',
 			'publication_date' => 'Data da publicação',
 			'related_tags' => 'Tags relacionadas',
-			'sharing' => 'Compartilhar',
+			'sharing' => 'Partilhar',
 			'summary' => 'Sumário',
 			'top_line' => 'Linha superior',
 		),
 		'language' => 'Idioma',
 		'notif_html5' => array(
-			'seconds' => 'segundos (0 significa sem timeout)',
-			'timeout' => 'Notificação em HTML5 de timeout',
+			'seconds' => 'segundos (0 significa sem tempo limite)',
+			'timeout' => 'Tempo limite da notificação HTML5',
 		),
 		'show_nav_buttons' => 'Mostrar botões de navegação',
-		'show_title_unread' => 'Show number of unread articles in the title',	// TODO
+		'show_title_unread' => 'Mostrar número de artigos não lidos no título',
 		'show_unread_count' => array(
-			'_' => 'Show unread counts in sidebar',	// TODO
-			'all' => 'For all categories and feeds',	// TODO
-			'important' => 'For important feeds only',	// TODO
-			'important_locked' => 'Important feeds always show their unread count.',	// TODO
-			'none' => 'Never',	// TODO
+			'_' => 'Mostrar contagem de não lidos na barra lateral',
+			'all' => 'Para todas as categorias e feeds',
+			'important' => 'Apenas para feeds importantes',
+			'important_locked' => 'Os feeds importantes mostram sempre a sua contagem de não lidos.',
+			'none' => 'Nunca',
 		),
-		'sidebar_hidden_by_default' => 'Hide sidebar by default',	// TODO
+		'sidebar_hidden_by_default' => 'Ocultar barra lateral por predefinição',
 		'theme' => array(
 			'_' => 'Tema',
 			'deprecated' => array(
-				'_' => 'Depreciado',
-				'description' => 'Este tema não é suportado e não estará novamente disponível em <a href="https://freshrss.github.io/FreshRSS/en/users/05_Configuration.html#theme" target="_blank">uma versão futura do FreshRSS</a>',
+				'_' => 'Descontinuado',
+				'description' => 'Este tema não é suportado e não estará disponível em <a href="https://freshrss.github.io/FreshRSS/en/users/05_Configuration.html#theme" target="_blank">uma versão futura do FreshRSS</a>',
 			),
 		),
-		'theme_not_available' => 'O tema “%s” não está disponível. Por favor escolha outro tema.',
+		'theme_not_available' => 'O tema “%s” não está disponível. Por favor, escolha outro tema.',
 		'thumbnail' => array(
 			'label' => 'Miniatura',
 			'landscape' => 'Modo paisagem',
@@ -127,122 +127,122 @@ return array(
 			'large' => 'Largo',
 			'medium' => 'Médio',
 			'no_limit' => 'Sem limite',
-			'thin' => 'Fino',
+			'thin' => 'Estreito',
 		),
 	),
 	'logs' => array(
 		'loglist' => array(
-			'level' => 'Nivel de Registro',
-			'message' => 'Mensagem de Registro',
-			'timestamp' => 'Data e Hora',
+			'level' => 'Nível de registo',
+			'message' => 'Mensagem de registo',
+			'timestamp' => 'Data e hora',
 		),
 		'pagination' => array(
 			'first' => 'Primeiro',
 			'last' => 'Último',
-			'next' => 'Próximo',
+			'next' => 'Seguinte',
 			'previous' => 'Anterior',
 		),
 	),
 	'mark_read_button' => array(
-		'_' => '“Mark all as read” button',	// TODO
-		'big' => 'Big',	// TODO
-		'none' => 'None',	// TODO
-		'small' => 'Small',	// TODO
+		'_' => 'Botão “Marcar tudo como lido”',
+		'big' => 'Grande',
+		'none' => 'Nenhum',
+		'small' => 'Pequeno',
 	),
 	'notification' => array(
-		'html5_enable_notif' => 'Enable notification',	// TODO
+		'html5_enable_notif' => 'Ativar notificações',
 	),
 	'notification_timeout' => array(
 		'bad' => array(
-			'label' => 'Show warning banner',	// TODO
-			'seconds' => 'seconds (at least 1)',	// TODO
+			'label' => 'Mostrar faixa de aviso',
+			'seconds' => 'segundos (pelo menos 1)',
 		),
 		'good' => array(
-			'label' => 'Show acknowledgement banner',	// TODO
-			'seconds' => 'seconds (0 means not shown)',	// TODO
+			'label' => 'Mostrar faixa de confirmação',
+			'seconds' => 'segundos (0 significa não mostrar)',
 		),
 	),
 	'privacy' => array(
-		'_' => 'Privacy',	// TODO
-		'retrieve_extension_list' => 'Retrieve extension list',	// TODO
-		'send_referrer_allowlist' => 'Sites allowed to see your server address (%s)',	// TODO
+		'_' => 'Privacidade',
+		'retrieve_extension_list' => 'Obter lista de extensões',
+		'send_referrer_allowlist' => 'Sites autorizados a ver o endereço do seu servidor (%s)',
 	),
 	'profile' => array(
 		'_' => 'Gestão 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="https://freshrss.github.io/FreshRSS/en/users/06_Mobile_access.html#access-via-mobile-app" target=_blank>documentation</a>',	// TODO
-			'security_warning' => 'Use HTTPS. The API password is transmitted in clear text and may appear in server logs if sent via GET.',	// TODO
+			'api_not_set' => 'Palavra-passe da API não definida',
+			'api_set' => 'Palavra-passe da API definida',
+			'check_link' => 'Verificar o estado da API através de: <kbd><a href="../api/" target="_blank">%s</a></kbd>',
+			'disabled' => 'O acesso à API está desativado.',
+			'documentation_link' => 'Consulte a <a href="https://freshrss.github.io/FreshRSS/en/users/06_Mobile_access.html#access-via-mobile-app" target="_blank">documentação e a lista de aplicações conhecidas</a>',
+			'help' => 'Consulte a <a href="https://freshrss.github.io/FreshRSS/en/users/06_Mobile_access.html#access-via-mobile-app" target=_blank>documentação</a>',
+			'security_warning' => 'Utilize HTTPS. A palavra-passe da API é transmitida em texto simples e pode aparecer nos registos do servidor se enviada via GET.',
 		),
-		'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 palavra-passe',
+		'confirm_new_password' => 'Confirmar nova palavra-passe',
+		'current_password' => 'Palavra-passe atual<br /><small>(para o método de início de sessão por formulário web)</small>',
 		'delete' => array(
 			'_' => 'Remover conta',
 			'warn' => 'A conta e todos os dados relacionados serão removidos.',
 		),
-		'email' => 'Endereço de e-mail',
-		'new_password' => 'New password',	// TODO
-		'password_api' => 'Senha da API<br /><small>(p.s., para aplicativos móveis)</small>',
-		'password_format' => 'Ao menos 7 caracteres',
+		'email' => 'Endereço de email',
+		'new_password' => 'Nova palavra-passe',
+		'password_api' => 'Palavra-passe da API<br /><small>(p. ex., para aplicações móveis)</small>',
+		'password_format' => 'Pelo menos 7 caracteres',
 		'title' => 'Perfil',
 	),
 	'query' => array(
 		'_' => 'Consultas do utilizador',
-		'create' => 'Create new user query',	// TODO
-		'deprecated' => 'Esta não é válida. A categoria ou feed relacionado foi apagado.',
-		'description' => 'Description',	// TODO
+		'create' => 'Criar nova consulta de utilizador',
+		'deprecated' => 'Esta consulta não é válida. A categoria ou feed relacionado foi apagado.',
+		'description' => 'Descrição',
 		'filter' => array(
 			'_' => 'Filtro aplicado:',
 			'categories' => 'Mostrar por categoria',
 			'feeds' => 'Mostrar por feed',
-			'include_article_tags_label' => 'Include article tags from feeds',	// TODO
-			'include_user_labels_label' => 'Include user labels, with prefix:',	// TODO
+			'include_article_tags_label' => 'Incluir tags de artigos dos feeds',
+			'include_user_labels_label' => 'Incluir rótulos de utilizador, com o prefixo:',
 			'order' => 'Ordenar por data',
 			'search' => 'Expressão',
-			'shareOpml' => 'Activa a partilha por OPML de categorias e feeds correspondentes',
-			'shareRss' => 'Activa o partilha por HTML &amp; RSS',
+			'shareOpml' => 'Ativar a partilha por OPML de categorias e feeds correspondentes',
+			'shareRss' => 'Ativar a partilha por HTML e RSS',
 			'state' => 'Estado',
 			'tags' => 'Mostrar 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 os mostrados na sua categoria',
+		'get_Z' => 'Mostrar todos os feeds, incluindo os arquivados',
 		'get_all' => 'Mostrar todos os artigos',
 		'get_all_labels' => 'Mostrar artigos com qualquer rótulo',
-		'get_category' => 'Visualizar “%s” categoria',
+		'get_category' => 'Visualizar categoria “%s”',
 		'get_favorite' => 'Visualizar artigos favoritos',
-		'get_feed' => 'Visualizar “%s” feed',
+		'get_feed' => 'Visualizar feed “%s”',
 		'get_important' => 'Mostrar artigos de feeds importantes',
-		'get_label' => 'Mostrar artigos com rótulo “%s”',
-		'help' => 'Ver a <a href="https://freshrss.github.io/FreshRSS/en/users/user_queries.html" target="_blank">documentação para consultas de utilozadoes e partilhas por HTML / RSS / OPML</a>.',
-		'image_url' => 'Image URL',	// TODO
+		'get_label' => 'Mostrar artigos com o rótulo “%s”',
+		'help' => 'Consulte a <a href="https://freshrss.github.io/FreshRSS/en/users/user_queries.html" target="_blank">documentação para consultas de utilizador e partilhas por HTML / RSS / OPML</a>.',
+		'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
+			'_' => 'Ainda não existem consultas de utilizador guardadas.',
+			'help' => 'Consulte a <a href="https://freshrss.github.io/FreshRSS/en/users/user_queries.html" target="_blank">documentação</a>',
 		),
-		'number' => 'Consulta n°%d',
+		'number' => 'Consulta n.º %d',
 		'order_asc' => 'Mostrar artigos mais antigos primeiro',
 		'order_desc' => 'Mostrar artigos mais novos primeiro',
 		'search' => 'Pesquisa por “%s”',
 		'share' => array(
-			'_' => 'Compartilhar esta consulta por link',
+			'_' => 'Partilhar esta consulta por link',
 			'disabled' => array(
-				'_' => 'disabled',	// TODO
-				'title' => 'Sharing',	// TODO
+				'_' => 'desativado',
+				'title' => 'Partilha',
 			),
-			'greader' => 'Shareable link to the GReader JSON',	// TODO
+			'greader' => 'Link partilhável para o JSON do GReader',
 			'help' => 'Forneça este link se quiser partilhar esta consulta com alguém',
-			'html' => 'Link compartilhável para a página HTML',
-			'opml' => 'Link compartilhável para a lista de feeds OPML',
-			'rss' => 'Link compartilhável para o feed RSS',
+			'html' => 'Link partilhável para a página HTML',
+			'opml' => 'Link partilhável para a lista de feeds OPML',
+			'rss' => 'Link partilhável para o feed RSS',
 		),
 		'state_all' => 'Mostrar todos os artigos',
 		'state_favorite' => 'Mostrar artigos favoritos',
@@ -253,66 +253,66 @@ return array(
 		'state_unread' => 'Mostrar artigos não lidos',
 		'state_unread_favorite' => 'Mostrar artigos favoritos não lidos',
 		'state_unread_not_favorite' => 'Mostrar artigos que não são favoritos não lidos',
-		'title' => 'Consultas de Utilizadores',
+		'title' => 'Consultas de utilizador',
 	),
 	'reading' => array(
 		'_' => 'Leitura',
-		'after_onread' => 'Depois de “marcar todos como lido”,',
-		'always_show_favorites' => 'Mostrar todos os artigos nos favoritos por padrão',
-		'apply_to_individual_feed' => 'Applies to feeds individually',	// TODO
+		'after_onread' => 'Depois de “marcar tudo como lido”,',
+		'always_show_favorites' => 'Mostrar sempre os artigos favoritos por predefinição',
+		'apply_to_individual_feed' => 'Aplicar aos feeds individualmente',
 		'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' => 'Mostrar uma caixa de diálogo de confirmação quando acionar “marcar todos como lido”',
-		'display_articles_unfolded' => 'Mostrar artigos abertos por padrão',
-		'display_categories_unfolded' => 'Categorias abertas',
+		'auto_load_more' => 'Carregar mais artigos no fundo da página',
+		'auto_remove_article' => 'Ocultar artigos após a leitura',
+		'confirm_enabled' => 'Mostrar uma caixa de diálogo de confirmação ao acionar “marcar tudo como lido”',
+		'display_articles_unfolded' => 'Mostrar artigos expandidos por predefinição',
+		'display_categories_unfolded' => 'Categorias expandidas',
 		'headline' => array(
-			'articles' => 'Artigos: Abrir/Fechar',
+			'articles' => 'Artigos: Expandir/Recolher',
 			'categories' => 'Navegação à esquerda: Categoria',
 			'mark_as_read' => 'Marcar artigo como lido',
 			'misc' => 'Diversos',
 			'view' => 'Visualizaçã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”)',
+		'hide_read_feeds' => 'Ocultar categorias e feeds sem artigos não lidos (não funciona com a configuração “Mostrar todos os artigos”)',
 		'img_with_lazyload' => 'Utilizar o modo <em>lazy load</em> para carregar as imagens',
 		'jump_next' => 'Ir para o próximo não lido',
 		'mark_updated_article_unread' => 'Marcar artigos atualizados como não lidos',
-		'number_divided_when_reader' => 'Dividido por 2 no modo de leitura .',
+		'number_divided_when_reader' => 'Dividido por 2 no modo de leitura.',
 		'read' => array(
 			'article_open_on_website' => 'quando o artigo é aberto no site original',
-			'article_viewed' => 'Quando o artigo é visualizado',
-			'focus' => 'quando focado (exceto por feeds importantes)',
-			'keep_max_n_unread' => 'Número máximo de artigos para manter como não lido',
-			'scroll' => 'enquanto faz a passagem (exceto por feeds importantes)',
-			'upon_gone' => 'Quando não estiver mais no feed de notícias principais',
+			'article_viewed' => 'quando o artigo é visualizado',
+			'focus' => 'quando focado (exceto feeds importantes)',
+			'keep_max_n_unread' => 'Número máximo de artigos a manter como não lidos',
+			'scroll' => 'enquanto faz scroll (exceto feeds importantes)',
+			'upon_gone' => 'quando já não estiver no feed de notícias principal',
 			'upon_reception' => 'ao receber um artigo',
 			'when' => 'Marcar artigo como lido…',
-			'when_same_guid_in_category' => 'if an identical GUID already exists in the top <i>n</i> newest articles of the category',	// TODO
-			'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 (no feed)',
+			'when_same_guid_in_category' => 'se já existir um GUID idêntico nos <i>n</i> artigos mais recentes da categoria',
+			'when_same_title_in_category' => 'se já existir um título idêntico nos <i>n</i> artigos mais recentes da categoria',
+			'when_same_title_in_feed' => 'se um título idêntico já existir nos <i>n</i> artigos mais recentes do feed',
 		),
 		'show' => array(
-			'_' => 'Artigos para Mostrar',
+			'_' => 'Artigos a mostrar',
 			'active_category' => 'Categoria ativa',
-			'adaptive' => 'Show unreads if any, all articles otherwise',	// TODO
+			'adaptive' => 'Mostrar não lidos se existirem, caso contrário mostrar todos os artigos',
 			'all_articles' => 'Mostrar todos os artigos',
 			'all_categories' => 'Mostrar todas as categorias',
-			'no_category' => 'Nenhuma categoria',
-			'remember_categories' => 'lembrar de abrir as categorias',
-			'unread' => 'Mostrar apenas não lido',
-			'unread_or_favorite' => 'Show unreads and favourites',	// TODO
+			'no_category' => 'Sem categoria',
+			'remember_categories' => 'lembrar categorias abertas',
+			'unread' => 'Mostrar apenas não lidos',
+			'unread_or_favorite' => 'Mostrar 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',
+		'sides_close_article' => 'Clicar fora da área de texto do artigo fecha-o',
 		'star' => array(
-			'when' => 'Mark an article as favourite…',	// TODO
+			'when' => 'Marcar um artigo como favorito…',
 		),
-		'sticky_post' => 'Coloque o artigo no topo quando aberto',
+		'sticky_post' => 'Colocar o artigo no topo quando aberto',
 		'sticky_sort' => 'Manter a ordenação manual durante a navegação',
-		'sticky_sort_help' => 'Determina se a última ordenação manual é mantida ativa ou se cada categoria ou fonte usa sempre a sua própria configuração predefinida ou global.',
-		'title' => 'Lendo',
+		'sticky_sort_help' => 'Determina se a última ordenação manual é mantida ativa ou se cada categoria ou fonte utiliza sempre a sua própria configuração predefinida ou global.',
+		'title' => 'Leitura',
 		'view' => array(
-			'default' => 'Visualização padrão',
+			'default' => 'Visualização predefinida',
 			'global' => 'Visualização global',
 			'normal' => 'Visualização normal',
 			'reader' => 'Visualização de leitura',
@@ -322,9 +322,9 @@ return array(
 		'_' => 'Partilha',
 		'add' => 'Adicionar um método de partilha',
 		'bluesky' => 'Bluesky',	// IGNORE
-		'deprecated' => 'Este serviço está obceloeto e será removido do FreshRSS <a href="https://freshrss.github.io/FreshRSS/en/users/08_sharing_services.html" title="Abra este documento para mais informações" target="_blank">em versões futuras</a>.',
+		'deprecated' => 'Este serviço está obsoleto e será removido do FreshRSS <a href="https://freshrss.github.io/FreshRSS/en/users/08_sharing_services.html" title="Abra este documento para mais informações" target="_blank">em versões futuras</a>.',
 		'diaspora' => 'Diaspora*',	// IGNORE
-		'email' => 'E-mail',
+		'email' => 'Email',	// IGNORE
 		'facebook' => 'Facebook',	// IGNORE
 		'more_information' => 'Mais informação',
 		'print' => 'Imprimir',
@@ -332,7 +332,7 @@ return array(
 		'remove' => 'Remover método de partilha',
 		'shaarli' => 'Shaarli',	// IGNORE
 		'share_name' => 'Nome de visualização para partilhar',
-		'share_url' => 'URL utilizada para partilha',
+		'share_url' => 'URL utilizado para partilha',
 		'title' => 'Partilhar',
 		'twitter' => 'X (Twitter)',	// IGNORE
 		'wallabag' => 'wallabag',	// IGNORE
@@ -341,38 +341,38 @@ return array(
 		'_' => 'Atalhos',
 		'article_action' => 'Ações no artigo',
 		'auto_share' => 'Partilhar',
-		'auto_share_help' => 'Se há apenas um modo de partilha, ele é usado. Caso contrário, serão acessíveis pelo seu número.',
+		'auto_share_help' => 'Se houver apenas um modo de partilha, este é utilizado. Caso contrário, serão acessíveis pelo seu número.',
 		'close_menus' => 'Fechar menus',
-		'collapse_article' => 'Fechar',
+		'collapse_article' => 'Recolher',
 		'first_article' => 'Ir para o primeiro artigo',
-		'focus_search' => 'Aceder a caixa de pesquisa',
-		'global_view' => 'Mudar para visualização global',
+		'focus_search' => 'Aceder à caixa de pesquisa',
+		'global_view' => 'Mudar para a visualização global',
 		'help' => 'Mostrar documentação',
-		'javascript' => 'JavaScript deve ser activado para utilizar atalhos',
+		'javascript' => 'O JavaScript deve estar ativado para utilizar atalhos',
 		'last_article' => 'Ir para o último artigo',
 		'load_more' => 'Carregar mais artigos',
 		'mark_favorite' => 'Marcar como favorito',
 		'mark_read' => 'Marcar como lido',
 		'navigation' => 'Navegação',
-		'navigation_help' => 'Com o modificador <kbd>⇧ Shift</kbd>, atalhos de navegação aplicam aos feeds.<br/>Com o <kbd>Alt ⎇</kbd> modificador, atalhos de navegação aplicam as categorias.',
+		'navigation_help' => 'Com o modificador <kbd>⇧ Shift</kbd>, os atalhos de navegação aplicam-se aos feeds.<br/>Com o modificador <kbd>Alt ⎇</kbd>, aplicam-se às categorias.',
 		'navigation_no_mod_help' => 'Os seguintes atalhos de navegação não suportam modificadores.',
-		'next_article' => 'Pule para o próximo artigo',
+		'next_article' => 'Saltar para o próximo artigo',
 		'next_unread_article' => 'Abrir o próximo artigo não lido',
 		'non_standard' => 'Algumas teclas (<kbd>%s</kbd>) podem não funcionar como atalhos.',
 		'normal_view' => 'Mudar para a visualização normal',
 		'other_action' => 'Outras ações',
 		'previous_article' => 'Saltar para o artigo anterior',
 		'reading_view' => 'Mudar para o modo de leitura',
-		'rss_view' => 'Abrir como feed RSS ',
-		'see_on_website' => 'Visualize o site original',
-		'shift_for_all_read' => '+ <kbd>Alt ⎇</kbd> para marcar artigos anteriores como lido<br />+ <kbd>⇧ Shift</kbd> para marcar todos os artigos como lido',
-		'skip_next_article' => 'Focar o próximo sem abri-lo',
-		'skip_previous_article' => 'Focar o anterior sem abri-lo',
+		'rss_view' => 'Abrir como feed RSS',
+		'see_on_website' => 'Ver no site original',
+		'shift_for_all_read' => '+ <kbd>Alt ⎇</kbd> para marcar artigos anteriores como lidos<br />+ <kbd>⇧ Shift</kbd> para marcar todos os artigos como lidos',
+		'skip_next_article' => 'Focar o próximo sem o abrir',
+		'skip_previous_article' => 'Focar o anterior sem o abrir',
 		'title' => 'Atalhos',
-		'toggle_aside' => 'Toggle sidebar',	// TODO
-		'toggle_media' => 'Reproduzir/pausar mídia',
-		'user_filter' => 'Acesse filtros de utilizador',
-		'user_filter_help' => 'Se há apenas um filtro, ele é utilizado. Caso contrário, os filtros serão acessíveis pelos seus números.',
+		'toggle_aside' => 'Alternar barra lateral',
+		'toggle_media' => 'Reproduzir/pausar multimédia',
+		'user_filter' => 'Aceder aos filtros de utilizador',
+		'user_filter_help' => 'Se houver apenas um filtro, este é utilizado. Caso contrário, os filtros serão acessíveis pelos seus números.',
 		'views' => 'Visualizações',
 	),
 	'user' => array(

+ 55 - 55
app/i18n/pt-PT/feedback.php

@@ -12,21 +12,21 @@
 
 return array(
 	'access' => array(
-		'denied' => ' não tem permissão para acessar esta página',
-		'not_found' => ' está a pesquisar por uma página que não existe',
+		'denied' => ' não tem permissão para aceder a esta página',
+		'not_found' => ' está a procurar por uma página que não existe',
 	),
 	'admin' => array(
 		'optimization_complete' => 'Otimização Completa',
 	),
 	'api' => array(
 		'password' => array(
-			'failed' => 'A senha não pode ser modificada',
-			'updated' => 'A senha foi alterada com sucesso',
+			'failed' => 'A palavra-passe não pode ser modificada',
+			'updated' => 'A palavra-passe foi alterada com sucesso',
 		),
 	),
 	'auth' => array(
 		'login' => array(
-			'invalid' => 'Login está incorreto',
+			'invalid' => 'O início de sessão está incorreto',
 			'success' => ' está ligado',
 		),
 		'logout' => array(
@@ -34,40 +34,40 @@ return array(
 		),
 	),
 	'conf' => array(
-		'error' => 'Um erro ocorreu durante o salvamento das configurações',
+		'error' => 'Ocorreu um erro ao guardar a configuração',
 		'query_created' => 'A Query “%s” foi criada.',
-		'shortcuts_updated' => 'Atalhos foram criados',
-		'updated' => 'Configuração foi atualizada',
+		'shortcuts_updated' => 'Os atalhos foram criados',
+		'updated' => 'A configuração foi atualizada',
 	),
 	'extensions' => array(
-		'already_enabled' => '%s já está activado',
+		'already_enabled' => '%s já está ativado',
 		'cannot_remove' => '%s não pode ser removido',
 		'disable' => array(
-			'ko' => '%s não pode ser desactivado. <a href="%s">verifique os logs do FreshRSS</a> para detalhes.',
-			'ok' => '%s agora está desactivado',
+			'ko' => '%s não pode ser desativado. <a href="%s">verifique os registos do FreshRSS</a> para detalhes.',
+			'ok' => '%s agora está desativado',
 		),
 		'enable' => array(
-			'ko' => '%s não pode ser activado. <a href="%s">verifique os logs do FreshRSS</a> para detalhes.',
-			'ok' => '%s agora está activado',
+			'ko' => '%s não pode ser ativado. <a href="%s">verifique os registos do FreshRSS</a> para detalhes.',
+			'ok' => '%s agora está ativado',
 		),
-		'invalid_view_mode' => 'Invalid view mode “%s”! Fall back to “Normal view”.',	// TODO
-		'no_access' => ' não tem acesso ao %s',
+		'invalid_view_mode' => 'Modo de visualização inválido “%s”! A reverter para “Visualização normal”.',
+		'no_access' => ' não tem acesso a %s',
 		'not_enabled' => '%s não está habilitado',
 		'not_found' => '%s não existe',
 		'removed' => '%s removido',
 	),
 	'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 pode clicar no butão<i>atualizar feeds</i>.',
-		'feeds_imported_with_errors' => 'Seus feeds foram importados, mas alguns erros ocorreram Carregue no butã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.',
+		'export_no_zip_extension' => 'a extensão ZIP não está presente no seu servidor. Por favor, tente exportar os ficheiros um a um.',
+		'feeds_imported' => 'Os seus feeds foram importados e serão atualizados, pode clicar no botão <i>atualizar feeds</i>.',
+		'feeds_imported_with_errors' => 'Os seus feeds foram importados, mas ocorreram alguns erros. Clique no botão <i>atualizar feeds</i>.',
+		'file_cannot_be_uploaded' => 'O ficheiro não pôde ser enviado',
+		'no_zip_extension' => 'a extensão ZIP não está presente no seu servidor.',
+		'zip_error' => 'Ocorreu um erro durante a importação do ficheiro ZIP.',
 	),
 	'profile' => array(
-		'error' => 'Seu perfil não pode ser editado',
-		'passwords_dont_match' => 'Passwords don’t match',	// TODO
-		'updated' => 'Seu perfil foi editado com sucesso',
+		'error' => 'O seu perfil não pode ser editado',
+		'passwords_dont_match' => 'As palavras-passe não coincidem',
+		'updated' => 'O seu perfil foi editado com sucesso',
 	),
 	'sub' => array(
 		'actualize' => 'A atualizar…',
@@ -76,45 +76,45 @@ return array(
 			'marked_unread' => 'Os artigos foram marcados como não lidos',
 		),
 		'category' => array(
-			'created' => 'Categoria %s foi criada.',
-			'deleted' => 'Categoria foi apagada.',
-			'emptied' => 'Categoria foi limpa',
-			'error' => 'Categoria não pode ser atualizada',
+			'created' => 'A categoria %s foi criada.',
+			'deleted' => 'A categoria foi apagada.',
+			'emptied' => 'A categoria foi limpa',
+			'error' => 'A categoria não pode ser atualizada',
 			'name_exists' => 'Este nome de categoria já existe.',
-			'no_id' => ' precisa especificar um id para a categoria.',
-			'no_name' => 'Nome da categoria não pode ser vazio.',
-			'not_delete_default' => ' não pode apagar uma categoria vazia!',
+			'no_id' => ' precisa de especificar um id para a categoria.',
+			'no_name' => 'O nome da categoria não pode estar vazio.',
+			'not_delete_default' => ' não pode apagar uma categoria predefinida!',
 			'not_exist' => 'A categoria não existe!',
-			'over_max' => ' atingiu seu limite de categorias (%d)',
-			'updated' => 'Categoria foi atualizada.',
+			'over_max' => ' atingiu o seu limite de categorias (%d)',
+			'updated' => 'A categoria foi atualizada.',
 		),
 		'feed' => array(
 			'actualized' => '<em>%s</em> foi atualizado',
 			'actualizeds' => 'Os feeds RSS foram atualizados',
 			'added' => 'O feed RSS <em>%s</em> foi adicionado',
-			'already_subscribed' => ' já está inscrito no <em>%s</em>',
-			'cache_cleared' => 'O cache do feed <em>%s</em> foi limpo',
-			'deleted' => 'o feed foi apagado',
+			'already_subscribed' => ' já está inscrito em <em>%s</em>',
+			'cache_cleared' => 'A cache do feed <em>%s</em> foi limpa',
+			'deleted' => 'O feed foi apagado',
 			'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 enviado é demasiado grande. O tamanho máximo do ficheiro é <em>%s</em>.',
+				'unsupported_format' => 'Formato de ficheiro 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. Pode forçar a atualização no link <code>#force_feed</code> .',
-			'invalid_url' => 'URL <em>%s</em> é inválida',
+			'internal_problem' => 'O feed RSS não pôde ser adicionado. <a href="%s">Verifique os registos do FreshRSS</a> para detalhes. Pode forçar a atualização no link <code>#force_feed</code>.',
+			'invalid_url' => 'O URL <em>%s</em> é inválido',
 			'n_actualized' => '%d feeds foram atualizados',
 			'n_entries_deleted' => '%d artigos foram apagados',
-			'no_refresh' => 'Não há feed para atualizar…',
+			'no_refresh' => 'Não há feeds para atualizar…',
 			'not_added' => '<em>%s</em> não pode ser atualizado',
 			'not_found' => 'Não foi possível encontrar o feed',
-			'over_max' => ' atingiu seu limite de feeds (%d)',
+			'over_max' => ' atingiu o seu limite de feeds (%d)',
 			'reloaded' => 'O feed <em>%s</em> foi recarregado',
 			'selector_preview' => array(
 				'http_error' => 'Falha ao carregar o conteúdo do site.',
-				'no_entries' => 'Não há nenhuma entrada nesse feed.	precisa de pelo menos um artigo para criar uma pré-visualização',
+				'no_entries' => 'Não há nenhuma entrada nesse feed. Precisa de pelo menos um artigo para criar uma pré-visualização',
 				'no_feed' => 'Erro interno (nenhum feed para verificar).',
-				'no_result' => 'O seletor não teve correspondência. Por isso foi exibido o texto do feed original.',
-				'selector_empty' => 'O seletor está vazio.	precisa definir um para criar uma pré-visualização.',
+				'no_result' => 'O seletor não teve correspondência. Por isso, foi exibido o texto do feed original.',
+				'selector_empty' => 'O seletor está vazio. Precisa de definir um para criar uma pré-visualização.',
 			),
 			'updated' => 'Os feeds foram atualizados',
 		),
@@ -122,31 +122,31 @@ return array(
 	),
 	'tag' => array(
 		'created' => 'A Tag “%s” foi criada.',
-		'error' => 'Etiqueta não pode ser atualizada!',
+		'error' => 'A etiqueta não pode ser atualizada!',
 		'name_exists' => 'O nome da tag já existe.',
 		'renamed' => 'A Tag “%s” foi renomeada para “%s”.',
-		'updated' => 'Etiqueta foi atualizada.',
+		'updated' => 'A etiqueta foi atualizada.',
 	),
 	'update' => array(
 		'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',
+		'file_is_nok' => 'Nova <strong>versão %s</strong> disponível, mas verifique as permissões no diretório <em>%s</em>. O servidor HTTP deve ter direitos de escrita',
 		'finished' => 'Atualização completa!',
 		'none' => 'Nenhuma atualização para aplicar',
-		'server_not_found' => 'Servidor de atualização não pôde ser localizado. [%s]',
+		'server_not_found' => 'O servidor de atualização não pôde ser localizado. [%s]',
 	),
 	'user' => array(
 		'created' => array(
-			'_' => 'Utilizador %s foi criado',
-			'error' => 'Utilizador %s não pode ser criado',
+			'_' => 'O utilizador %s foi criado',
+			'error' => 'O utilizador %s não pode ser criado',
 		),
 		'deleted' => array(
-			'_' => 'Utilizador %s foi deletado',
-			'error' => 'Utilizador %s não pode ser deletado',
+			'_' => 'O utilizador %s foi apagado',
+			'error' => 'O utilizador %s não pode ser apagado',
 		),
 		'updated' => array(
-			'_' => 'O Utilizador %s foi atualizado com sucesso',
-			'error' => 'O Utilizador %s não foi atualizado',
+			'_' => 'O utilizador %s foi atualizado com sucesso',
+			'error' => 'O utilizador %s não foi atualizado',
 		),
 	),
 );

+ 76 - 76
app/i18n/pt-PT/gen.php

@@ -14,31 +14,31 @@ return array(
 	'action' => array(
 		'actualize' => 'Atualizar feeds',
 		'add' => 'Adicionar',
-		'back_to_rss_feeds' => '← Volte para o seu feeds RSS',
+		'back_to_rss_feeds' => '← Voltar para os seus 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_muted_feeds' => 'Excluir feeds silenciados',
+		'delete_all_feeds' => 'Eliminar todos os feeds',
+		'delete_errored_feeds' => 'Eliminar feeds com erros',
+		'delete_muted_feeds' => 'Eliminar feeds silenciados',
 		'demote' => 'Despromover',
-		'disable' => 'Desactivar',
-		'download' => 'Download',	// TODO
+		'disable' => 'Desativar',
+		'download' => 'Transferir',
 		'empty' => 'Vazio',
-		'enable' => 'Activar',
+		'enable' => 'Ativar',
 		'export' => 'Exportar',
 		'filter' => 'Filtrar',
 		'import' => 'Importar',
-		'load_default_shortcuts' => 'Carregar mais atalhos',
+		'load_default_shortcuts' => 'Carregar atalhos predefinidos',
 		'manage' => 'Gerir',
 		'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' => 'Artigo seguinte',
+			'prev' => 'Artigo anterior',
+			'up' => 'Ir para cima',
 		),
 		'open_url' => 'Abrir URL',
 		'promote' => 'Promover',
@@ -46,34 +46,34 @@ return array(
 		'refresh_opml' => 'Atualizar OPML',
 		'remove' => 'Remover',
 		'rename' => 'Renomear',
-		'see_website' => 'Ver o site',
+		'see_website' => 'Ver site',
 		'submit' => 'Enviar',
 		'truncate' => 'Apagar todos os artigos',
 		'update' => 'Atualizar',
 	),
 	'auth' => array(
-		'accept_tos' => 'Eu aceito os <a href="%s">Termos de serviço</a>.',
-		'email' => 'Endereço de e-mail',
-		'keep_logged_in' => 'Mantenha-se ligado por <small>(%s days)</small>',
+		'accept_tos' => 'Aceito os <a href="%s">Termos de serviço</a>.',
+		'email' => 'Endereço de email',
+		'keep_logged_in' => 'Manter sessão iniciada durante <small>(%s dias)</small>',
 		'login' => 'Entrar',
 		'logout' => 'Sair',
 		'password' => array(
-			'_' => 'Senha',
+			'_' => 'Palavra-passe',
 			'format' => '<small>Pelo 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' => 'É necessária reautenticação',
+			'tip' => 'Não lhe será pedido para iniciar sessão novamente durante <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(
 			'_' => 'Utilizador',
-			'format' => '<small>1-39 characters: letters, digits, and <code>. _ @ -</code></small>',	// TODO
+			'format' => '<small>1-39 caracteres: letras, dígitos e <code>. _ @ -</code></small>',
 		),
 	),
 	'date' => array(
@@ -112,7 +112,7 @@ return array(
 		'last_3_year' => 'Últimos três anos',
 		'last_5_year' => 'Últimos cinco anos',
 		'last_6_month' => 'Últimos seis meses',
-		'last_month' => 'Últimos mês',
+		'last_month' => 'Último mês',
 		'last_week' => 'Última semana',
 		'last_year' => 'Último ano',
 		'mar' => 'mar',
@@ -125,7 +125,7 @@ return array(
 		'november' => 'Nov',
 		'oct' => 'out',
 		'october' => 'Out',
-		'sat' => 'Sab',
+		'sat' => 'Sáb',
 		'sep' => 'set',
 		'september' => 'Set',
 		'sun' => 'Dom',
@@ -138,7 +138,7 @@ return array(
 	'dir' => 'ltr',	// IGNORE
 	'freshrss' => array(
 		'_' => 'FreshRSS',	// IGNORE
-		'about' => 'Sobre FreshRSS',
+		'about' => 'Sobre o FreshRSS',
 	),
 	'interval' => array(
 		'day' => array(
@@ -169,25 +169,25 @@ return array(
 	),
 	'js' => array(
 		'category_empty' => 'Categoria vazia',
-		'confirm_action' => 'Tem certeza que deseja efetuar esta ação? Ela não poderá ser revertida!',
-		'confirm_action_feed_cat' => 'Tem certeza que deseja efetuar esta ação ? vai perder favoritos e pesquisas personalizadas. Não poderá ser revertida!',
-		'confirm_exit_slider' => 'Are you sure you want to discard unsaved settings?',	// TODO
+		'confirm_action' => 'Tem a certeza de que deseja efetuar esta ação? Não poderá ser revertida!',
+		'confirm_action_feed_cat' => 'Tem a certeza de que deseja efetuar esta ação? Irá perder os favoritos e as pesquisas personalizadas. Não poderá ser revertida!',
+		'confirm_exit_slider' => 'Tem a certeza de que pretende descartar as definições não guardadas?',
 		'feedback' => array(
 			'body_new_articles' => array(
-				0 => 'Há %d novo artigo para ler no FreshRSS.',	// DIRTY
-				1 => 'Há %d novos artigos para ler no FreshRSS.',	// DIRTY
+				0 => 'Há %d novo artigo para ler no FreshRSS.',
+				1 => 'Há %d novos artigos para ler no FreshRSS.',
 			),
 			'body_unread_articles' => array(
-				0 => '(não lido: %d)',	// DIRTY
-				1 => '(não lido: %d)',	// DIRTY
+				0 => '(não lido: %d)',
+				1 => '(não lidos: %d)',
 			),
-			'request_failed' => 'Uma solicitação falhou, isto pode ter sido causado por problemas de ligação a internet.',
+			'request_failed' => 'Um pedido falhou, isto poderá ter sido causado por problemas de ligação à internet.',
 			'title_new_articles' => 'FreshRSS: novos artigos!',
 		),
-		'labels_empty' => 'No labels',	// TODO
+		'labels_empty' => 'Sem rótulos',
 		'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
+		'should_be_activated' => 'O JavaScript precisa de estar ativo',
+		'unsafe_csp_header' => 'O cabeçalho CSP em utilização não é seguro e o FreshRSS pode estar vulnerável a ataques XSS. <a target="_blank" href="https://freshrss.github.io/FreshRSS/en/admins/10_ServerConfig.html#security">Consultar a documentação</a>',
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
@@ -207,7 +207,7 @@ return array(
 		'it' => 'Italiano',	// IGNORE
 		'ja' => '日本語',	// IGNORE
 		'ko' => '한국어',	// IGNORE
-		'lt' => 'Lietuvių',	// TODO
+		'lt' => 'Lietuvių',	// IGNORE
 		'lv' => 'Latviešu',	// IGNORE
 		'nl' => 'Nederlands',	// IGNORE
 		'oc' => 'Occitan',	// IGNORE
@@ -225,7 +225,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',
@@ -233,11 +233,11 @@ return array(
 		'display' => 'Visualização',
 		'extensions' => 'Extensões',
 		'logs' => 'Logs',	// IGNORE
-		'privacy' => 'Privacy',	// TODO
-		'queries' => 'Queries de utilizador',
+		'privacy' => 'Privacidade',
+		'queries' => 'Consultas de utilizador',
 		'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 <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">parâmetros de pesquisa avançados</a>',
 		'sharing' => 'Partilhar',
 		'shortcuts' => 'Atalhos',
 		'stats' => 'Estatísticas',
@@ -259,32 +259,32 @@ 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_modified' => 'Server Modification Date',	// 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_modified' => 'Data de modificação do servidor',
+		'date_past' => 'No passado',
+		'date_published' => 'Data de publicação',
+		'date_range' => 'Intervalo de datas',
+		'date_received' => 'Data de receção',
+		'date_to' => 'Até',
+		'date_user' => 'Data de modificação do utilizador',
+		'feeds' => 'Feeds',	// IGNORE
+		'free_text' => 'Texto livre',
+		'free_text_help' => 'Pesquisar tanto no título como no conteúdo',
+		'full_documentation' => 'Ver a <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">documentação completa de pesquisa</a>',
+		'labels' => 'Os meus rótulos',
+		'multiple_help' => 'Selecionar um ou mais (manter premido <kbd>Ctrl</kbd> ou <kbd>Cmd</kbd>)',
+		'sources' => 'Fontes',
+		'tags' => 'Tags de artigos',
+		'text' => 'Pesquisa de texto',
+		'text_help' => 'Mú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 de utilizador',
 	),
 	'share' => array(
 		'Known' => 'Sites no Known',
@@ -295,7 +295,7 @@ return array(
 		'buffer' => 'Buffer',	// IGNORE
 		'clipboard' => 'Área de transferência',
 		'diaspora' => 'Diaspora*',	// IGNORE
-		'email' => 'E-mail',
+		'email' => 'Email',	// IGNORE
 		'email-webmail-firefox-fix' => 'Email (webmail - correção para o Firefox)',
 		'facebook' => 'Facebook',	// IGNORE
 		'gnusocial' => 'GNU social',	// IGNORE
@@ -306,7 +306,7 @@ return array(
 		'linkedin' => 'LinkedIn',	// IGNORE
 		'mastodon' => 'Mastodon',	// IGNORE
 		'movim' => 'Movim',	// IGNORE
-		'nextcloud-bookmarks' => 'Nextcloud Marcadores',	// DIRTY
+		'nextcloud-bookmarks' => 'Marcadores Nextcloud',
 		'omnivore' => 'Omnivore',	// IGNORE
 		'pinboard' => 'Pinboard',	// IGNORE
 		'pinterest' => 'Pinterest',	// IGNORE
@@ -318,19 +318,19 @@ return array(
 		'twitter' => 'X (Twitter)',	// IGNORE
 		'wallabag' => 'wallabag v1',	// IGNORE
 		'wallabagv2' => 'wallabag v2',	// IGNORE
-		'web-sharing-api' => 'Sistemas-compartilhados (API)',
-		'whatsapp' => 'Whatsapp',	// IGNORE
+		'web-sharing-api' => 'Partilha web (API)',
+		'whatsapp' => 'WhatsApp',	// IGNORE
 		'xing' => 'Xing',	// IGNORE
 	),
 	'short' => array(
 		'attention' => 'Atenção!',
-		'blank_to_disable' => 'Deixe em branco para desativar',
+		'blank_to_disable' => 'Deixar em branco para desativar',
 		'by_author' => 'Por:',
-		'by_default' => 'Por padrão',
-		'damn' => 'Buumm!',
+		'by_default' => 'Por predefinição',
+		'damn' => 'Droga!',
 		'default_category' => 'Sem categoria',
 		'no' => 'Não',
-		'not_applicable' => 'Não disponível',
+		'not_applicable' => 'Não aplicável',
 		'ok' => 'Ok!',	// IGNORE
 		'or' => 'ou',
 		'yes' => 'Sim',

+ 52 - 52
app/i18n/pt-PT/index.php

@@ -16,18 +16,18 @@ 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ção do sistema',
+				'browser' => 'Navegador',
+				'database' => 'Base 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 Erros',
+		'bugs_reports' => 'Reportar erros',
 		'documentation' => 'Documentação',
-		'freshrss_description' => 'FreshRSS é um RSS feeds aggregator para um host próprio. É leve e fácil de utilizar enquanto é uma ferramenta poderosa e configurável. ',
+		'freshrss_description' => 'O FreshRSS é um agregador de feeds RSS autoalojado. É leve e fácil de utilizar, sendo simultaneamente uma ferramenta poderosa e configurável.',
 		'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">no GitHub</a>',
 		'license' => 'licença',
 		'project_website' => 'Site do projeto',
@@ -37,89 +37,89 @@ 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',
+		'rss_of' => 'Feed RSS de %s',
 		'title' => 'Stream principal',
 		'title_fav' => 'Favoritos',
-		'title_global' => 'Visualização Global',
+		'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 utilizador',
+			'today' => 'Modificado pelo utilizador hoje',
+			'yesterday' => 'Modificado pelo utilizador ontem',
 		),
 	),
 	'log' => array(
 		'_' => 'Logs',	// IGNORE
 		'clear' => 'Limpar logs',
-		'empty' => 'Arquivo de log está vazio',
+		'empty' => 'O ficheiro de log está vazio',
 		'title' => 'Logs',	// IGNORE
 	),
 	'menu' => array(
 		'about' => 'Sobre o FreshRSS',
 		'before_one_day' => 'Antes de um dia',
 		'before_one_week' => 'Antes de uma semana',
-		'bookmark_query' => 'Salvar pesquisa atual',
+		'bookmark_query' => 'Guardar pesquisa atual',
 		'favorites' => 'Favoritos (%s)',
 		'global_view' => 'Visualização global',
 		'important' => 'Feeds importantes',
 		'main_stream' => 'Stream principal',
 		'mark_all_read' => 'Marcar todos como lidos',
 		'mark_cat_read' => 'Marcar categoria como lida',
-		'mark_feed_read' => 'Marcar feed com lido',
+		'mark_feed_read' => 'Marcar feed como lido',
 		'mark_selection_unread' => 'Marcar seleção como não lida',
-		'mylabels' => 'Minhas etiquetas',
+		'mylabels' => 'Os meus rótulos',
 		'non-starred' => 'Mostrar todos, exceto favoritos',
-		'normal_view' => 'visualização normal',
-		'queries' => 'Queries do utilizador',
+		'normal_view' => 'Visualização normal',
+		'queries' => 'Consultas de utilizador',
 		'read' => 'Mostrar apenas lidos',
 		'reader_view' => 'Visualização de leitura',
 		'rss_view' => 'Feed RSS',
 		'search_short' => 'Pesquisar',
 		'sort' => array(
-			'asc' => 'Ascending',	// TODO
+			'asc' => 'Ascendente',
 			'c' => array(
-				'name_asc' => 'Category, feed titles A→Z',	// TODO
-				'name_desc' => 'Category, feed titles Z→A',	// TODO
+				'name_asc' => 'Categoria, títulos de feeds A→Z',
+				'name_desc' => 'Categoria, títulos de feeds Z→A',
 			),
-			'date_asc' => 'Publication date 1→9',	// TODO
-			'date_desc' => 'Publication date 9→1',	// TODO
-			'desc' => 'Descending',	// TODO
+			'date_asc' => 'Data de publicação 1→9',
+			'date_desc' => 'Data de publicação 9→1',
+			'desc' => 'Descendente',
 			'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
+			'id_asc' => 'Recebidos recentemente em último',
+			'id_desc' => 'Recebidos recentemente em primeiro',
+			'length_asc' => 'Tamanho do conteúdo 1→9',
+			'length_desc' => 'Tamanho do conteúdo 9→1',
+			'link_asc' => 'Link A→Z',	// IGNORE
+			'link_desc' => 'Link Z→A',	// IGNORE
 			'primary' => array(
-				'_' => 'Sorting criterion',	// TODO
-				'help' => 'Sorting by <em>received</em> date is recommended in most cases, for consistency and performance',	// TODO
+				'_' => 'Critério de ordenação',
+				'help' => 'Recomenda-se a ordenação por data de <em>receção</em> na maioria dos casos, para consistência e desempenho',
 			),
-			'rand' => 'Random order',	// TODO
+			'rand' => 'Ordem aleatória',
 			'secondary' => array(
-				'_' => 'Secondary sorting criterion',	// TODO
-				'help' => 'Only relevant when the primary sorting criterion is categories or feeds titles',	// TODO
+				'_' => 'Critério de ordenação secundário',
+				'help' => 'Apenas relevante quando o critério de ordenação principal são categorias ou títulos de feeds',
 			),
-			'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
+			'title_asc' => 'Título A→Z',
+			'title_desc' => 'Título Z→A',
+			'user_modified_asc' => 'Modificado pelo utilizador 1→9',
+			'user_modified_desc' => 'Modificado pelo utilizador 9→1',
 		),
 		'starred' => 'Mostrar apenas os favoritos',
 		'stats' => 'Estatísticas',
-		'subscription' => 'Gestão de inscrições',
+		'subscription' => 'Gestão de subscrições',
 		'unread' => 'Mostrar apenas os não lidos',
 	),
 	'share' => 'Partilhar',
@@ -127,6 +127,6 @@ return array(
 		'related' => 'Tags relacionadas',
 	),
 	'tos' => array(
-		'title' => 'Termos do serviço',
+		'title' => 'Termos de serviço',
 	),
 );

+ 63 - 63
app/i18n/pt-PT/install.php

@@ -12,130 +12,130 @@
 
 return array(
 	'action' => array(
-		'finish' => 'Instalação completa',
-		'fix_errors_before' => 'Por favor resolva os erros antes de ir para o próximo passo.',
-		'keep_install' => 'Mantenha as configurações anteriores',
-		'next_step' => 'Vá para o próximo passo',
-		'reinstall' => 'Reinstale o FreshRSS',
+		'finish' => 'Instalação concluída',
+		'fix_errors_before' => 'Por favor, resolva os erros antes de avançar para o passo seguinte.',
+		'keep_install' => 'Manter as configurações anteriores',
+		'next_step' => 'Avançar para o passo seguinte',
+		'reinstall' => 'Reinstalar o FreshRSS',
 	),
 	'bdd' => array(
 		'_' => 'base de dados',
 		'conf' => array(
 			'_' => 'Configuração da base de dados',
-			'ko' => 'Verifique as informações do seu base de dados.',
-			'ok' => 'Configurações do base de dados foram salvas.',
+			'ko' => 'Verifique as informações da sua base de dados.',
+			'ok' => 'As configurações da base de dados foram guardadas.',
 		),
 		'host' => 'Host',	// IGNORE
-		'password' => 'Senha do base de dados',
+		'password' => 'Palavra-passe da base de dados',
 		'prefix' => 'Prefixo da tabela',
-		'type' => 'Tipo do base de dados',
-		'username' => 'Utilizador do base de dados',
+		'type' => 'Tipo de base de dados',
+		'username' => 'Utilizador da base de dados',
 	),
 	'check' => array(
 		'_' => 'Verificações',
-		'already_installed' => 'Verificamos que o FreshRSS já está instalado!',
+		'already_installed' => 'Verificámos que o FreshRSS já está instalado!',
 		'cache' => array(
-			'nok' => 'Verifique as permissões no diretório <em>%s</em>. O servidor HTTP deve ter direitos para escrever dentro desta pasta.',
-			'ok' => 'Permissões no diretório cache estão corretos.',
+			'nok' => 'Verifique as permissões no diretório <em>%s</em>. O servidor HTTP deve ter permissões de escrita nesta pasta.',
+			'ok' => 'As permissões no diretório cache estão corretas.',
 		),
 		'ctype' => array(
-			'nok' => 'Não foi possível encontrar uma biblioteca necessária para verificação do tipo de caractere (php-ctype).',
-			'ok' => 'Tem a biblioteca necessária para verificação do tipo de caractere (ctype).',
+			'nok' => 'Não foi possível encontrar a biblioteca necessária para verificação do tipo de caráter (php-ctype).',
+			'ok' => 'Tem a biblioteca necessária para verificação do tipo de caráter (ctype).',
 		),
 		'curl' => array(
 			'nok' => 'Não foi possível encontrar a biblioteca cURL (php-curl).',
 			'ok' => 'Tem a biblioteca cURL.',
 		),
 		'data' => array(
-			'nok' => 'Verifique as permissões no diretório <em>%s</em>. O servidor HTTP deve ter direitos para escrever dentro desta pasta.',
-			'ok' => 'Permissões no diretório data estão corretos.',
+			'nok' => 'Verifique as permissões no diretório <em>%s</em>. O servidor HTTP deve ter permissões de escrita nesta pasta.',
+			'ok' => 'As permissões no diretório data estão corretas.',
 		),
 		'database-connection' => array(
-			'nok' => 'Database connection error.',	// TODO
-			'ok' => 'Database connection is good.',	// TODO
+			'nok' => 'Erro de ligação à base de dados.',
+			'ok' => 'A ligação à base de dados está boa.',
 		),
 		'database-table' => array(
-			'nok' => 'Database table "%s" is incomplete.',	// TODO
-			'ok' => 'Database table "%s" is good.',	// TODO
+			'nok' => 'A tabela da base de dados "%s" está incompleta.',
+			'ok' => 'A tabela da base de dados "%s" está boa.',
 		),
 		'database-tables' => array(
-			'nok' => 'Some database tables are missing.',	// TODO
-			'ok' => 'All database tables exist.',	// TODO
+			'nok' => 'Faltam algumas tabelas na base de dados.',
+			'ok' => 'Todas as tabelas da base de dados existem.',
 		),
-		'database-title' => 'Database',	// TODO
+		'database-title' => 'Base de dados',
 		'docroot' => array(
-			'nok' => 'Your web server document root does not seem to point to the <code>./p/</code> folder. Other folders such as <code>./data/</code> may be publicly accessible.',	// TODO
-			'ok' => 'Your web server document root correctly points to the <code>./p/</code> folder.',	// TODO
+			'nok' => 'A raiz do documento do seu servidor web não parece apontar para a pasta <code>./p/</code>. Outras pastas, como <code>./data/</code>, poderão estar publicamente acessíveis.',
+			'ok' => 'A raiz do documento do seu servidor web aponta corretamente para a pasta <code>./p/</code>.',
 		),
 		'dom' => array(
-			'nok' => 'Não foi possível encontrar uma biblioteca necessária para navegar pelo DOM (php-xml).',
+			'nok' => 'Não foi possível encontrar a biblioteca necessária para navegar pelo DOM (php-xml).',
 			'ok' => 'Tem a biblioteca necessária para navegar pelo DOM.',
 		),
 		'favicons' => array(
-			'nok' => 'Verifique as permissões no diretório <em>%s</em>. O servidor HTTP deve ter direitos para escrever dentro desta pasta.',
-			'ok' => 'Permissões no diretório favicons estão corretos.',
+			'nok' => 'Verifique as permissões no diretório <em>%s</em>. O servidor HTTP deve ter permissões de escrita nesta pasta.',
+			'ok' => 'As permissões no diretório favicons estão corretas.',
 		),
 		'fileinfo' => array(
 			'nok' => 'Não foi possível encontrar a biblioteca fileinfo do PHP (fileinfo).',
 			'ok' => 'Tem a biblioteca fileinfo.',
 		),
-		'files' => 'Instalação de arquivos',
+		'files' => 'Instalação de ficheiros',
 		'gmp' => array(
-			'nok' => 'Cannot find the required GMP extension for 32-bit PHP (php-gmp package).',	// TODO
-			'ok' => 'You have the GMP extension required for 32-bit PHP.',	// TODO
+			'nok' => 'Não é possível encontrar a extensão GMP necessária para PHP de 32 bits (pacote php-gmp).',
+			'ok' => 'Tem a extensão GMP necessária para PHP de 32 bits.',
 		),
 		'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 é possível encontrar a biblioteca recomendada php-intl para internacionalização.',
+			'ok' => 'Tem a biblioteca recomendada php-intl para internacionalização.',
 		),
 		'json' => array(
 			'nok' => 'Não foi possível encontrar JSON (php-json).',
 			'ok' => 'Tem a extensão JSON.',
 		),
 		'mbstring' => array(
-			'nok' => 'Não foi possível encontrar a biblioteca recomendada para o Unicode (mbstring).',
-			'ok' => 'Tem a biblioteca recomendada para o Unicode (mbstring).',
+			'nok' => 'Não foi possível encontrar a biblioteca recomendada para Unicode (mbstring).',
+			'ok' => 'Tem a biblioteca recomendada para Unicode (mbstring).',
 		),
 		'pcre' => array(
-			'nok' => 'Não foi possível encontrar uma biblioteca necessário para expressões regulares (php-pcre).',
+			'nok' => 'Não foi possível encontrar a biblioteca necessária para expressões regulares (php-pcre).',
 			'ok' => '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 é possível encontrar o controlador PDO necessário para MySQL/MariaDB.',
 		),
 		'pdo-pgsql' => array(
-			'nok' => 'Cannot find the required PDO driver for PostgreSQL.',	// TODO
+			'nok' => 'Não é possível encontrar o controlador 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 é possível encontrar o controlador PDO para SQLite.',
+			'ok' => 'Tem o controlador PDO para SQLite.',
 		),
 		'pdo' => array(
-			'nok' => 'Não foi encontrado o PDO ou um dos drivers suportados (pdo_sqlite, pdo_pgsql, pdo_mysql).',
-			'ok' => 'Tem o PDO e ao menos um dos drivers suportados (pdo_sqlite, pdo_pgsql, pdo_mysql).',
+			'nok' => 'Não foi encontrado o PDO ou nenhum dos controladores suportados (pdo_sqlite, pdo_pgsql, pdo_mysql).',
+			'ok' => 'Tem o PDO e pelo menos um dos controladores suportados (pdo_sqlite, pdo_pgsql, pdo_mysql).',
 		),
 		'php' => array(
-			'_' => 'Instação do PHP',
-			'nok' => 'A versão do PHP é %s mas FreshRSS requer ao menos a versão %s.',
-			'ok' => 'A versão do PHP é %s, que é compatível com o FreshRSS.',
+			'_' => 'Instalação do PHP',
+			'nok' => 'A versão do PHP é a %s, mas o FreshRSS requer pelo menos a versão %s.',
+			'ok' => 'A versão do PHP é a %s, que é compatível com o FreshRSS.',
 		),
-		'reload' => 'Verifique novamente',
+		'reload' => 'Verificar novamente',
 		'tmp' => array(
-			'nok' => 'Verifiquei as permissões no diretório <em>%s</em>. O servidor HTTP deve ter direitos para escrever dentro desta pasta.',
-			'ok' => 'As permissões para o diretório temporário estão certas.',
+			'nok' => 'Verifique as permissões no diretório <em>%s</em>. O servidor HTTP deve ter permissões de escrita nesta pasta.',
+			'ok' => 'As permissões para o diretório temporário estão corretas.',
 		),
 		'tokens' => array(
-			'nok' => 'Verifique as permissões no diretório <em>./data/tokens</em>. O servidor HTTP deve ter direitos para escrever dentro desta pasta.',
-			'ok' => 'Permissões no diretório tokens estão corretos.',
+			'nok' => 'Verifique as permissões no diretório <em>./data/tokens</em>. O servidor HTTP deve ter permissões de escrita nesta pasta.',
+			'ok' => 'As permissões no diretório tokens estão corretas.',
 		),
 		'unknown_process_username' => 'Desconhecido',
 		'users' => array(
-			'nok' => 'Verifiquei as permissões no diretório <em>%s</em>. O servidor HTTP deve ter direitos para escrever dentro desta pasta.',
-			'ok' => 'Permissões no diretório users estão corretos.',
+			'nok' => 'Verifique as permissões no diretório <em>%s</em>. O servidor HTTP deve ter permissões de escrita nesta pasta.',
+			'ok' => 'As permissões no diretório users estão corretas.',
 		),
 		'xml' => array(
-			'nok' => 'Não foi possível encontrar a biblioteca necessária para parse o XML.',
-			'ok' => 'Tem a biblioteca necessária para parse o XML.',
+			'nok' => 'Não foi possível encontrar a biblioteca necessária para analisar XML.',
+			'ok' => 'Tem a biblioteca necessária para analisar XML.',
 		),
 		'zip' => array(
 			'nok' => 'Não foi possível localizar a extensão ZIP (php-zip).',
@@ -144,30 +144,30 @@ return array(
 	),
 	'conf' => array(
 		'_' => 'Configurações gerais',
-		'ok' => 'Configurações gerais foram salvas.',
+		'ok' => 'As configurações gerais foram guardadas.',
 	),
 	'congratulations' => 'Parabéns!',
 	'default_user' => array(
-		'_' => 'Utilizador padrão',
-		'max_char' => '1-39 characters: letters, digits, and <code>. _ @ -</code>',	// TODO
+		'_' => 'Utilizador predefinido',
+		'max_char' => '1-39 caracteres: letras, dígitos e <code>. _ @ -</code>',
 	),
-	'fix_errors_before' => 'Por favor solucione os erros antes de ir para o próximo passo.',
+	'fix_errors_before' => 'Por favor, resolva os erros antes de avançar para o passo seguinte.',
 	'javascript_is_better' => 'O FreshRSS é mais agradável com o JavaScript ativo',
 	'js' => array(
-		'confirm_reinstall' => 'Vai perder suas configurações anteriores ao reinstalar o FreshRSS. Confirma que pretende continuar?',
+		'confirm_reinstall' => 'Irá perder as suas configurações anteriores ao reinstalar o FreshRSS. Confirma que pretende continuar?',
 	),
 	'language' => array(
 		'_' => 'Idioma',
 		'choose' => 'Escolha o idioma para o FreshRSS',
 		'defined' => 'O idioma foi definido.',
 	),
-	'missing_applied_migrations' => 'Algo de errado ocorreu; Tem que criar um arquivo vazio <em>%s</em> manualmente.',
+	'missing_applied_migrations' => 'Algo correu mal; tem de criar um ficheiro vazio <em>%s</em> manualmente.',
 	'ok' => 'O processo de instalação foi um sucesso.',
 	'session' => array(
-		'nok' => 'O servidor parece ter sido configurado incorretamente para os cookies necessários para sessões PHP!',
+		'nok' => 'O servidor parece ter sido configurado incorretamente para os cookies necessários para as sessões PHP!',
 	),
 	'step' => 'passo %d',
 	'steps' => 'Passos',
-	'this_is_the_end' => 'Este é o final',
+	'this_is_the_end' => 'Este é o fim',
 	'title' => 'Instalação · FreshRSS',
 );

+ 120 - 120
app/i18n/pt-PT/sub.php

@@ -12,11 +12,11 @@
 
 return array(
 	'api' => array(
-		'documentation' => 'Copie a seguinte URL para utilizar com uma ferramenta externa',
+		'documentation' => 'Copie o seguinte URL para utilizar com uma ferramenta externa',
 		'title' => 'API',	// IGNORE
 	),
 	'bookmarklet' => array(
-		'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.',
+		'documentation' => 'Arraste este botão para a sua barra de favoritos ou clique com o botão direito e escolha “Adicionar este link aos favoritos”. Depois, clique no link “Inscrever-se” na barra de favoritos em qualquer página a que queira subscrever.',
 		'label' => 'Inscrever-se',
 		'title' => 'Bookmarklet',	// IGNORE
 	),
@@ -25,115 +25,115 @@ return array(
 		'add' => 'Adicionar categoria',
 		'archiving' => 'Arquivar',
 		'dynamic_opml' => array(
-			'_' => 'OPML Dinâmico',
-			'help' => 'Forneça uma URL para <a href="https://opml.org/" target="_blank">o arquivo OPML </a> para preencher dinamicamente esta categoria com feeds',
+			'_' => 'OPML dinâmico',
+			'help' => 'Forneça um URL para <a href="https://opml.org/" target="_blank">o ficheiro OPML</a> para preencher dinamicamente esta categoria com feeds',
 		),
 		'empty' => 'Categoria vazia',
-		'error' => 'This dynamic OPML category has encountered a problem. Check that the OPML URL is still reachable and that the maximum number of feeds per user has not been exceeded.',	// TODO
-		'expand' => 'Expand category',	// TODO
+		'error' => 'Esta categoria OPML dinâmica encontrou um problema. Verifique se o URL OPML ainda está acessível e se o número máximo de feeds por utilizador não foi excedido.',
+		'expand' => 'Expandir categoria',
 		'information' => 'Informações',
-		'open' => 'Open category',	// TODO
-		'opml_url' => 'URL de OPML',
+		'open' => 'Abrir categoria',
+		'opml_url' => 'URL OPML',
 		'position' => 'Posição de visualização',
 		'position_help' => 'Para controlar a ordem de visualização',
 		'title' => 'Título',
 	),
 	'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 do feed defina cookies (armazenados na memória apenas durante o pedido)',
 		'add' => 'Adicionar um feed',
 		'advanced' => 'Avançado',
 		'archiving' => 'Arquivar',
 		'auth' => array(
 			'configuration' => 'Entrar',
-			'help' => 'Permite acesso a feeds RSS protegidos por HTTP',
+			'help' => 'Permite o acesso a feeds RSS protegidos por HTTP',
 			'http' => 'Autenticação HTTP',
-			'password' => 'Senha HTTP',
+			'password' => 'Palavra-passe HTTP',
 			'username' => 'Utilizador HTTP',
 		),
-		'change_favicon' => 'Change…',	// TODO
-		'clear_cache' => 'Sempre limpar o cache',
+		'change_favicon' => 'Alterar…',
+		'clear_cache' => 'Limpar sempre a cache',
 		'content_action' => array(
-			'_' => 'Ações ao buscar pelo conteúdo de artigos',
-			'append' => 'Adicionar depois conteúdo existente',
+			'_' => 'Ações ao obter o conteúdo dos artigos',
+			'append' => 'Adicionar após o conteúdo existente',
 			'prepend' => 'Adicionar antes do conteúdo existente',
 			'replace' => 'Substituir o conteúdo existente',
 		),
-		'content_retrieval' => 'Content retrieval',	// TODO
-		'css_cookie' => 'Usar cookies ao pesquisa pelo conteúdo de artigos',
+		'content_retrieval' => 'Obtenção de conteúdo',
+		'css_cookie' => 'Utilizar cookies ao pesquisar o conteúdo dos 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!)',
-		'css_path' => 'Caminho do CSS do artigo no site original',
+		'css_help' => 'Devolve feeds RSS truncados (atenção: requer mais tempo!)',
+		'css_path' => 'Caminho CSS do artigo no site original',
 		'css_path_filter' => array(
-			'_' => 'Seletor CSS dos elementos a serem removidos',
+			'_' => 'Seletor CSS dos elementos a remover',
 			'help' => 'O seletor CSS pode ser uma lista com: <kbd>footer, aside, p[data-sanitized-class~="menu"]</kbd>',
 		),
 		'description' => 'Descrição',
-		'empty' => 'Este feed está vazio. Por favor verifique ele ainda é mantido.',
-		'error' => 'Este feed encontra-se com problema. Por favor verifique que ainda está disponível.',
+		'empty' => 'Este feed está vazio. Por favor, verifique se ainda é mantido.',
+		'error' => 'Este feed encontra-se com um problema. Por favor, verifique se ainda está disponível.',
 		'export-as-opml' => array(
 			'download' => 'Download',	// IGNORE
-			'help' => 'Arquivo XML (. <a href="https://freshrss.github.io/FreshRSS/en/developers/OPML.html" target="_blank">Ver documentação</a>)',
+			'help' => 'Ficheiro XML (<a href="https://freshrss.github.io/FreshRSS/en/developers/OPML.html" target="_blank">Ver 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',
+			'_' => 'Ações de filtro',
 			'help' => 'Escreva um filtro de pesquisa por linha. <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">Ver documentação</a>.',
-			'view_filter' => 'Preview filters on existing articles (new window)',	// TODO
+			'view_filter' => 'Pré-visualizar filtros em artigos existentes (nova janela)',
 		),
-		'global_hint' => 'Use <a href="%s">the global view</a> to see how many articles in each feed are matching a state or a search expression',	// TODO
-		'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
+		'global_hint' => 'Utilize <a href="%s">a visualização global</a> para ver quantos artigos em cada feed correspondem a um estado ou a uma expressão de pesquisa',
+		'http_headers' => 'Cabeçalhos HTTP',
+		'http_headers_help' => 'Os cabeçalhos são separados por uma mudança de linha, e o nome e o valor de cada cabeçalho são separados por dois pontos (p. ex.: <kbd><code>Accept: application/atom+xml<br />Authorization: Bearer some-token</code></kbd>).',
+		'icon' => 'Ícone',
 		'information' => 'Informações',
-		'keep_adding_feed' => 'Then add more feeds',	// TODO
-		'keep_min' => 'Número mínimo de artigos para manter',
+		'keep_adding_feed' => 'Adicionar mais feeds',
+		'keep_min' => 'Número mínimo de artigos a manter',
 		'kind' => array(
-			'_' => 'Tipo de fonte de alimentação do Feed',
+			'_' => 'Tipo de fonte 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(
 				'_' => 'HTML + XPath (Web scraping)',	// IGNORE
 				'feed_title' => array(
-					'_' => 'Título do Feed',
-					'help' => 'Exemplo: <code>//title</code> ou uma string estática: <code>"Meu feed personalizado"</code>',
+					'_' => 'Título do feed',
+					'help' => 'Exemplo: <code>//title</code> ou uma string estática: <code>"O meu feed personalizado"</code>',
 				),
-				'help' => '<dfn><a href="https://www.w3.org/TR/xpath-10/" target="_blank">XPath 1.0</a></dfn>é uma linguagem de consulta padrão para usuários avançados e que o FreshRSS suporta para habilitar o Web scraping.',
+				'help' => '<dfn><a href="https://www.w3.org/TR/xpath-10/" target="_blank">XPath 1.0</a></dfn> é uma linguagem de consulta padrão para utilizadores avançados que o FreshRSS suporta para permitir web scraping.',
 				'item' => array(
-					'_' => 'encontrar notícias <strong>items</strong><br /><small>(mais importantes)</small>',
+					'_' => 'encontrar os <strong>itens</strong> das notícias<br /><small>(mais importante)</small>',
 					'help' => 'Exemplo: <code>//div[@class="news-item"]</code>',
 				),
 				'item_author' => array(
 					'_' => 'Autor do item',
-					'help' => 'Também pode ser uma string estática. Exemplo: <code>"Anônimo"</code>',
+					'help' => 'Também pode ser uma string estática. Exemplo: <code>"Anónimo"</code>',
 				),
 				'item_categories' => 'Etiquetas do item',
 				'item_content' => array(
 					'_' => 'Conteúdo do item',
-					'help' => 'Exemplo para pegar o item completo: <code>.</code>',
+					'help' => 'Exemplo para obter o item completo: <code>.</code>',
 				),
 				'item_thumbnail' => array(
 					'_' => 'Miniatura do item',
 					'help' => 'Exemplo: <code>descendant::img/@src</code>',
 				),
 				'item_timeFormat' => array(
-					'_' => 'Custom date/time format',	// TODO
-					'help' => 'Optional. A format supported by <a href="https://www.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://www.php.net/datetime.createfromformat" target="_blank"><code>DateTime::createFromFormat()</code></a> tal como <code>d-m-Y H:i:s</code>',
 				),
 				'item_timestamp' => array(
-					'_' => 'Data do Item',
-					'help' => 'O resultado será parecido com: <a href="https://www.php.net/strtotime" target="_blank"><code>strtotime()</code></a>',
+					'_' => 'Data do item',
+					'help' => 'O resultado será analisado por <a href="https://www.php.net/strtotime" target="_blank"><code>strtotime()</code></a>',
 				),
 				'item_title' => array(
-					'_' => 'Titulo do Item',
-					'help' => 'Utilize especialmente <a href="https://developer.mozilla.org/docs/Web/XML/XPath/Reference/Axes" target="_blank">XPath axis</a> <code>descendant::</code> like <code>descendant::h2</code>',
+					'_' => 'Título do item',
+					'help' => 'Utilize especialmente o <a href="https://developer.mozilla.org/docs/Web/XML/XPath/Reference/Axes" target="_blank">eixo XPath</a> <code>descendant::</code> tal como <code>descendant::h2</code>',
 				),
 				'item_uid' => array(
 					'_' => 'ID único do item',
@@ -143,25 +143,25 @@ return array(
 					'_' => 'Link do item (URL)',
 					'help' => 'Exemplo: <code>descendant::a/@href</code>',
 				),
-				'relative' => 'XPath (relativo do item) para:',
+				'relative' => 'XPath (relativo ao item) para:',
 				'xpath' => 'XPath para:',
 			),
 			'json_dotnotation' => array(
 				'_' => 'JSON (notação de ponto)',
 				'feed_title' => array(
 					'_' => 'título do feed',
-					'help' => 'Exemplo: <code>meta.title</code> ou uma string estática: <code>"Meu feed personalizado"</code>',
+					'help' => 'Exemplo: <code>meta.title</code> ou uma string estática: <code>"O meu feed personalizado"</code>',
 				),
-				'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>)',
+				'help' => 'Um JSON em notação de ponto utiliza pontos entre objetos e chavetas/parênteses rectos para matrizes (p. ex., <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>',
+					'_' => 'encontrar os <strong>itens</strong> das notícias<br /><small>(mais importante)</small>',
+					'help' => 'Caminho JSON para a matriz que contém os itens, p. ex., <code>$</code> ou <code>newsItems</code>',
 				),
 				'item_author' => 'autor do item',
 				'item_categories' => 'tags dos itens',
 				'item_content' => array(
 					'_' => 'conteúdo do item',
-					'help' => 'Chave sob na qual o conteúdo é encontrado, e.g. <code>content</code>',
+					'help' => 'Chave sob a qual o conteúdo é encontrado, p. ex., <code>content</code>',
 				),
 				'item_thumbnail' => array(
 					'_' => 'miniatura do item',
@@ -169,11 +169,11 @@ return array(
 				),
 				'item_timeFormat' => array(
 					'_' => 'Formato de data/hora personalizado',
-					'help' => 'Opcional. Um formato suportado por <a href="https://www.php.net/datetime.createfromformat" target="_blank"><code>DateTime::createFromFormat()</code></a> assim como <code>d-m-Y H:i:s</code>',
+					'help' => 'Opcional. Um formato suportado por <a href="https://www.php.net/datetime.createfromformat" target="_blank"><code>DateTime::createFromFormat()</code></a> tal como <code>d-m-Y H:i:s</code>',
 				),
 				'item_timestamp' => array(
 					'_' => 'data do item',
-					'help' => 'The result will be parsed by <a href="https://www.php.net/strtotime" target="_blank"><code>strtotime()</code></a>',	// TODO
+					'help' => 'O resultado será analisado por <a href="https://www.php.net/strtotime" target="_blank"><code>strtotime()</code></a>',
 				),
 				'item_title' => 'título do item',
 				'item_uid' => 'ID único do item',
@@ -185,100 +185,100 @@ return array(
 				'relative' => 'notação de ponto (relativa ao item) para:',
 			),
 			'jsonfeed' => 'JSON Feed',	// IGNORE
-			'rss' => 'RSS / Atom (padrão)',
+			'rss' => 'RSS / Atom (predefinição)',
 			'xml_xpath' => 'XML + XPath',	// IGNORE
 		),
-		'last-entry-publication-date' => 'Last article published <time datetime="%1$s" title="%1$s">%2$s</time>.',	// TODO
-		'last-entry-received-date' => 'Last article received <time datetime="%1$s" title="%1$s">%2$s</time>.',	// TODO
-		'last-error-date' => 'Last erroneous update <time datetime="%1$s" title="%1$s">%2$s</time>.',	// TODO
-		'last-update' => 'Last successful update <time datetime="%1$s" title="%1$s">%2$s</time>.',	// TODO
+		'last-entry-publication-date' => 'Último artigo publicado a <time datetime="%1$s" title="%1$s">%2$s</time>.',
+		'last-entry-received-date' => 'Último artigo recebido a <time datetime="%1$s" title="%1$s">%2$s</time>.',
+		'last-error-date' => 'Última atualização com erro a <time datetime="%1$s" title="%1$s">%2$s</time>.',
+		'last-update' => 'Última atualização bem-sucedida a <time datetime="%1$s" title="%1$s">%2$s</time>.',
 		'maintenance' => array(
-			'clear_cache' => 'Limpar o cache',
-			'clear_cache_help' => 'Limpar o cache em disco deste feed',
+			'clear_cache' => 'Limpar cache',
+			'clear_cache_help' => 'Limpar a cache em disco deste feed',
 			'reload_articles' => 'Recarregar artigos',
-			'reload_articles_help' => 'Recarregar artigos e buscar conteúdo completo',
+			'reload_articles_help' => 'Recarregar artigos e obter o conteúdo completo',
 			'title' => 'Manutenção',
 		),
-		'max_http_redir' => 'Quantidade máxima de redirecionamentos HTTP',
-		'max_http_redir_help' => 'Defina como 0 ou deixe em branco para desactivar, -1 para redirecionamentos ilimitados',
+		'max_http_redir' => 'Número máximo de redirecionamentos HTTP',
+		'max_http_redir_help' => 'Defina como 0 ou deixe em branco para desativar, -1 para redirecionamentos ilimitados',
 		'method' => array(
 			'_' => 'Método HTTP',
 		),
-		'method_help' => 'O conteúdo do POST tem suporte automático para <code>application/x-www-form-urlencoded</code> e <code>application/json</code>',
-		'method_postparams' => 'Conteúdo do POST',
-		'moved_category_deleted' => 'Quando você deleta uma categoria, seus feeds são automaticamente classificados como <em>%s</em>.',
+		'method_help' => 'O conteúdo POST suporta automaticamente <code>application/x-www-form-urlencoded</code> e <code>application/json</code>',
+		'method_postparams' => 'Conteúdo POST',
+		'moved_category_deleted' => 'Quando elimina uma categoria, os 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 a obtençã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',
+			'main_stream' => 'Mostrar na stream 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
+		'proxy' => 'Definir um proxy para obter este feed',
+		'proxy_help' => 'Selecione um protocolo (p. ex.: SOCKS5) e introduza o endereço do proxy (p. ex.: <kbd>127.0.0.1:1080</kbd> ou <kbd>username:password@127.0.0.1:1080</kbd>)',
+		'reset_favicon' => 'Repor predefinição',
 		'selector_preview' => array(
-			'show_raw' => 'Mostrar fonte',
+			'show_raw' => 'Mostrar código-fonte',
 			'show_rendered' => 'Mostrar conteúdo',
 		),
 		'show' => array(
-			'all' => 'Mostrar todos os Feeds',
-			'error' => 'Somente mostrar Feeds com erros',
+			'all' => 'Mostrar todos os feeds',
+			'error' => 'Mostrar apenas feeds com erros',
 		),
 		'showing' => array(
-			'error' => 'Exibir apenas os feeds com erros',
+			'error' => 'Mostrar apenas os feeds com erros',
 		),
 		'ssl_verify' => 'Verificar segurança SSL',
 		'stats' => 'Estatísticas',
-		'think_to_add' => 'Tem adicionar alguns feeds.',
-		'timeout' => 'Timeout em segundos',
+		'think_to_add' => 'Pense em adicionar alguns feeds.',
+		'timeout' => 'Tempo limite (timeout) em segundos',
 		'title' => 'Título',
-		'title_add' => 'Adicionar o RSS feed',
-		'ttl' => 'Não atualize automaticamente mais que',
+		'title_add' => 'Adicionar feed RSS',
+		'ttl' => 'Não atualizar automaticamente com mais frequência do 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érios de unicidade do artigo',
+			'forced' => '<span title="Bloquear os critérios de unicidade, mesmo quando o feed tem artigos duplicados">forçado</span>',
+			'help' => 'Relevante para feeds inválidos.<br />⚠️ Alterar a política criará duplicados.',
+			'id' => 'ID padrão (predefinição)',
+			'link' => 'Ligação',
+			'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 utilizador para pesquisar este feed',
+		'url' => 'URL do feed',
+		'useragent' => 'Definir um agente de utilizador (user agent) para obter este feed',
 		'useragent_help' => 'Exemplo: <kbd>Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)</kbd>',
-		'validator' => 'Verifique a validade do feed',
+		'validator' => 'Verificar a validade do feed',
 		'website' => 'URL do site',
 		'websub' => 'Notificação instantânea com WebSub',
-		'websub_pending' => 'Subscribed to WebSub. Waiting for the first notification.',	// TODO
+		'websub_pending' => 'Subscrito ao WebSub. À espera da primeira notificação.',
 	),
 	'import_export' => array(
 		'export' => array(
 			'_' => 'Exportar',
-			'sqlite' => 'Download user database as SQLite',	// TODO
+			'sqlite' => 'Transferir base de dados do utilizador como SQLite',
 		),
-		'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',
-		'file_to_import' => 'Arquivo para importar<br />(OPML, JSON or ZIP)',
-		'file_to_import_no_zip' => 'Arquivo para importar<br />(OPML or JSON)',
+		'export_labelled' => 'Exportar os seus artigos etiquetados',
+		'export_opml' => 'Exportar a lista de feeds (OPML)',
+		'export_starred' => 'Exportar os seus favoritos',
+		'feed_list' => 'Lista de %s artigos',
+		'file_to_import' => 'Ficheiro a importar<br />(OPML, JSON ou ZIP)',
+		'file_to_import_no_zip' => 'Ficheiro a importar<br />(OPML ou JSON)',
 		'import' => 'Importar',
 		'starred_list' => 'Listar artigos favoritos',
 		'title' => 'Importar / exportar',
@@ -291,27 +291,27 @@ return array(
 			'idle' => 'Feeds inativos',
 			'main' => 'Estatísticas principais',
 			'repartition' => 'Repartição de artigos',
-			'unread_dates' => 'Unread dates',	// TODO
+			'unread_dates' => 'Datas de não lidos',
 		),
-		'subscription_management' => 'Gerir de inscrições',
-		'subscription_tools' => 'Ferramentas de inscrição',
+		'subscription_management' => 'Gerir subscrições',
+		'subscription_tools' => 'Ferramentas de subscrição',
 	),
 	'tag' => array(
-		'auto_label' => 'Adicione esta etiqueta para novos artigos',
+		'auto_label' => 'Adicionar esta etiqueta a novos artigos',
 		'name' => 'Nome',
-		'new_name' => 'Nome novo',
+		'new_name' => 'Novo nome',
 		'old_name' => 'Nome antigo',
 	),
 	'title' => array(
-		'_' => 'Gerir inscrições',
+		'_' => 'Gerir subscrições',
 		'add' => 'Adicionar um feed ou categoria',
 		'add_category' => 'Adicionar uma categoria',
 		'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' => 'Apagar uma etiqueta',
-		'feed_management' => 'Gerir dos RSS feeds',
-		'subscription_tools' => 'Ferramentas de inscrição',
+		'feed_management' => 'Gerir feeds RSS',
+		'subscription_tools' => 'Ferramentas de subscrição',
 	),
 );

+ 14 - 14
app/i18n/pt-PT/user.php

@@ -14,41 +14,41 @@ return array(
 	'email' => array(
 		'feedback' => array(
 			'invalid' => 'Endereço de email inválido',
-			'required' => 'O endereço de email é necessário',
+			'required' => 'O endereço de email é obrigatório',
 		),
 		'validation' => array(
-			'change_email' => '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.',
+			'change_email' => 'Pode alterar o seu endereço de email <a href="%s">na página do perfil</a>.',
+			'email_sent_to' => 'Enviámos um email para <strong>%s</strong>. Por favor, siga as instruções contidas no mesmo para verificar a sua conta.',
 			'feedback' => array(
-				'email_failed' => 'Não foi possível enviar um email devido a um erro de configuração no servidor.',
-				'email_sent' => 'Um email foi enviado para o seu endereço',
+				'email_failed' => 'Não foi possível enviar o email devido a um erro de configuração no servidor.',
+				'email_sent' => 'Foi enviado um email 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.',
-				'unnecessary' => 'Esse endereço de email já foi verificado.',
-				'wrong_token' => 'A verificação do endereço de email falhou por causa do token incorreto.',
+				'unnecessary' => 'Este endereço de email já foi verificado.',
+				'wrong_token' => 'A verificação do endereço de email falhou devido a um token incorreto.',
 			),
-			'need_to' => 'Para poder utilizar o %s, deve verificar seu endereço de email.',
+			'need_to' => 'Para poder utilizar o %s, deve verificar o 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' => 'Registrou no %s. Mas ainda é necessário verificar seu endereço de email. Para isso, basta seguir o link:',
-			'title' => 'Precisa verificar a conta',
-			'welcome' => 'Bem vindo %s,',
+			'body' => 'Registou-se no %s. No entanto, ainda é necessário verificar o seu endereço de email. Para o fazer, basta seguir o link:',
+			'title' => 'Precisa de verificar a conta',
+			'welcome' => 'Bem-vindo, %s,',
 		),
 	),
 	'password' => array(
-		'invalid' => 'Senha incorreta',
+		'invalid' => 'Palavra-passe incorreta',
 	),
 	'tos' => array(
 		'feedback' => array(
-			'invalid' => 'Para se registrar, tem que aceitar os Termos do serviço.',
+			'invalid' => 'Para se registar, tem de aceitar os Termos de serviço.',
 		),
 	),
 	'username' => array(
 		'invalid' => 'Nome de utilizador inválido.',
-		'taken' => 'O nome de utilizador %s já está sendo utilizado',
+		'taken' => 'O nome de utilizador %s já está a ser utilizado',
 	),
 );