diff --git a/config/language.php b/config/language.php
index d30a102eb..7d109ad65 100644
--- a/config/language.php
+++ b/config/language.php
@@ -115,7 +115,7 @@ return [
|
*/
- 'allowed' => ['en-GB', 'ar-SA', 'bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'es-ES', 'es-MX', 'fa-IR', 'fr-FR', 'he-IL', 'hr-HR', 'id-ID', 'it-IT', 'nb-NO', 'nl-NL', 'pt-BR', 'ro-RO', 'ru-RU', 'sq-AL', 'sv-SE', 'th-TH', 'tr-TR', 'uk-UA', 'vi-VN', 'zh-TW'],
+ 'allowed' => ['en-GB', 'ar-SA', 'bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'es-ES', 'es-MX', 'fa-IR', 'fr-FR', 'he-IL', 'hr-HR', 'id-ID', 'it-IT', 'nb-NO', 'nl-NL', 'pt-BR', 'pt-PT', 'ro-RO', 'ru-RU', 'sq-AL', 'sv-SE', 'th-TH', 'tr-TR', 'uk-UA', 'vi-VN', 'zh-TW'],
/*
|--------------------------------------------------------------------------
diff --git a/resources/lang/pt-PT/accounts.php b/resources/lang/pt-PT/accounts.php
new file mode 100644
index 000000000..ea1a5afe5
--- /dev/null
+++ b/resources/lang/pt-PT/accounts.php
@@ -0,0 +1,14 @@
+ 'Nome',
+ 'number' => 'Número',
+ 'opening_balance' => 'Saldo Inicial',
+ 'current_balance' => 'Saldo Atual',
+ 'bank_name' => 'Nome do Banco',
+ 'bank_phone' => 'Telefone',
+ 'bank_address' => 'Endereço',
+ 'default_account' => 'Conta Padrão',
+
+];
diff --git a/resources/lang/pt-PT/auth.php b/resources/lang/pt-PT/auth.php
new file mode 100644
index 000000000..873a6a706
--- /dev/null
+++ b/resources/lang/pt-PT/auth.php
@@ -0,0 +1,39 @@
+ 'Perfil',
+ 'logout' => 'Sair',
+ 'login' => 'Entrar',
+ 'login_to' => 'Entre para iniciar sessão',
+ 'remember_me' => 'Lembrar-me',
+ 'forgot_password' => 'Esqueci-me da senha',
+ 'reset_password' => 'Redefinir Senha',
+ 'enter_email' => 'Insira o seu e-mail',
+ 'current_email' => 'E-mail atual',
+ 'reset' => 'Redefinir',
+ 'never' => 'nunca',
+
+ 'password' => [
+ 'current' => 'Senha',
+ 'current_confirm' => 'Confirmação da Senha',
+ 'new' => 'Nova senha',
+ 'new_confirm' => 'Confirmação da Nova Senha',
+ ],
+
+ 'error' => [
+ 'self_delete' => 'Erro: Não pode se excluir!',
+ 'no_company' => 'Erro: Nenhuma empresa atribuída à sua conta. Por favor, contacte o administrador do sistema.',
+ ],
+
+ 'failed' => 'As credenciais indicadas não coincidem com as registadas no sistema.',
+ 'disabled' => 'Esta conta está desativada. Por favor, contacte o administrador do sistema.',
+ 'throttle' => 'O limite de tentativas para entrar na sua conta foi atingido. Por favor tente novamente dentro de :seconds segundos.',
+
+ 'notification' => [
+ 'message_1' => 'Recebeu este e-mail porque foi-nos feito uma solicitação de redefinição de senha para a sua conta.',
+ 'message_2' => 'Se não solicitou uma redefinição de senha, nenhuma ação adicional é necessária.',
+ 'button' => 'Redefinir Senha',
+ ],
+
+];
diff --git a/resources/lang/pt-PT/bills.php b/resources/lang/pt-PT/bills.php
new file mode 100644
index 000000000..95e55744e
--- /dev/null
+++ b/resources/lang/pt-PT/bills.php
@@ -0,0 +1,46 @@
+ 'Conta nº',
+ 'bill_date' => 'Data de Emissão',
+ 'total_price' => 'Valor Total',
+ 'due_date' => 'Data de vencimento',
+ 'order_number' => 'Encomenda nº',
+ 'bill_from' => 'Conta de',
+
+ 'quantity' => 'Quantidade',
+ 'price' => 'Preço',
+ 'sub_total' => 'Subtotal',
+ 'discount' => 'Desconto',
+ 'tax_total' => 'Imposto',
+ 'total' => 'Total',
+
+ 'item_name' => 'Nome do Item | Nome dos Items',
+
+ 'show_discount' => ':discount% de desconto',
+ 'add_discount' => 'Adicionar desconto',
+ 'discount_desc' => 'do subtotal',
+
+ 'payment_due' => 'Valor Devido',
+ 'amount_due' => 'Total Devido',
+ 'paid' => 'Pago',
+ 'histories' => 'Histórico',
+ 'payments' => 'Pagamentos',
+ 'add_payment' => 'Pagar Conta',
+ 'mark_received' => 'Marcar como Recebida',
+ 'download_pdf' => 'Descarregar em PDF',
+ 'send_mail' => 'Enviar e-mail',
+
+ 'status' => [
+ 'draft' => 'Rascunho',
+ 'received' => 'Recebido',
+ 'partial' => 'Parcial',
+ 'paid' => 'Pago',
+ ],
+
+ 'messages' => [
+ 'received' => 'Conta marcada como recebida com sucesso!',
+ ],
+
+];
diff --git a/resources/lang/pt-PT/companies.php b/resources/lang/pt-PT/companies.php
new file mode 100644
index 000000000..b2db7a47b
--- /dev/null
+++ b/resources/lang/pt-PT/companies.php
@@ -0,0 +1,13 @@
+ 'Domínio',
+ 'logo' => 'Logotipo',
+ 'manage' => 'Gerir empresas',
+ 'all' => 'Todas as empresas',
+ 'error' => [
+ 'delete_active' => 'Erro: Não é possível excluir a empresa em atividade, por favor altere o registo!',
+ ],
+
+];
diff --git a/resources/lang/pt-PT/currencies.php b/resources/lang/pt-PT/currencies.php
new file mode 100644
index 000000000..1a235bdd9
--- /dev/null
+++ b/resources/lang/pt-PT/currencies.php
@@ -0,0 +1,18 @@
+ 'Código',
+ 'rate' => 'Taxa',
+ 'default' => 'Moeda Padrão',
+ 'decimal_mark' => 'Separador de decimal',
+ 'thousands_separator' => 'Separador de milhar',
+ 'precision' => 'Precisão',
+ 'symbol' => [
+ 'symbol' => 'Símbolo',
+ 'position' => 'Posição do símbolo',
+ 'before' => 'Antes do Valor',
+ 'after' => 'Depois do Valor',
+ ]
+
+];
diff --git a/resources/lang/pt-PT/customers.php b/resources/lang/pt-PT/customers.php
new file mode 100644
index 000000000..6935b470a
--- /dev/null
+++ b/resources/lang/pt-PT/customers.php
@@ -0,0 +1,11 @@
+ 'Permitir Acesso?',
+ 'user_created' => 'Utilizador criado',
+
+ 'error' => [
+ 'email' => 'Este e-mail já foi registado.'
+ ]
+];
diff --git a/resources/lang/pt-PT/dashboard.php b/resources/lang/pt-PT/dashboard.php
new file mode 100644
index 000000000..7c2e90d4b
--- /dev/null
+++ b/resources/lang/pt-PT/dashboard.php
@@ -0,0 +1,24 @@
+ 'Rendimentos totais',
+ 'receivables' => 'A Receber',
+ 'open_invoices' => 'Faturas em Aberto',
+ 'overdue_invoices' => 'Faturas Vencidas',
+ 'total_expenses' => 'Despesas totais',
+ 'payables' => 'A Pagar',
+ 'open_bills' => 'Contas Abertas',
+ 'overdue_bills' => 'Contas Vencidas',
+ 'total_profit' => 'Lucro Total',
+ 'open_profit' => 'Lucro em Aberto',
+ 'overdue_profit' => 'Lucro Vencido',
+ 'cash_flow' => 'Fluxo de Caixa',
+ 'no_profit_loss' => 'Sem perda de lucro',
+ 'incomes_by_category' => 'Rendimento por Categoria',
+ 'expenses_by_category' => 'Despesa por Categoria',
+ 'account_balance' => 'Saldo da Conta',
+ 'latest_incomes' => 'Últimas Receitas',
+ 'latest_expenses' => 'Últimas Despesas',
+
+];
diff --git a/resources/lang/pt-PT/demo.php b/resources/lang/pt-PT/demo.php
new file mode 100644
index 000000000..59f8889aa
--- /dev/null
+++ b/resources/lang/pt-PT/demo.php
@@ -0,0 +1,16 @@
+ 'Dinheiro',
+ 'categories_deposit' => 'Depósito',
+ 'categories_sales' => 'Vendas',
+ 'currencies_usd' => 'Dólar Americano',
+ 'currencies_eur' => 'Euro',
+ 'currencies_gbp' => 'Libra Esterlina',
+ 'currencies_try' => 'Lira Turca',
+ 'taxes_exempt' => 'Isento de Imposto',
+ 'taxes_normal' => 'Imposto padrão',
+ 'taxes_sales' => 'Imposto sobre vendas',
+
+];
diff --git a/resources/lang/pt-PT/footer.php b/resources/lang/pt-PT/footer.php
new file mode 100644
index 000000000..b8759b05e
--- /dev/null
+++ b/resources/lang/pt-PT/footer.php
@@ -0,0 +1,9 @@
+ 'Versão',
+ 'powered' => 'Desenvolvido por Akaunting',
+ 'software' => 'Software de contabilidade gratuito',
+
+];
diff --git a/resources/lang/pt-PT/general.php b/resources/lang/pt-PT/general.php
new file mode 100644
index 000000000..8f539f24e
--- /dev/null
+++ b/resources/lang/pt-PT/general.php
@@ -0,0 +1,121 @@
+ 'Item|Itens',
+ 'incomes' => 'Rendimento|Rendimentos',
+ 'invoices' => 'Factura|Facturas',
+ 'revenues' => 'Receita|Receitas',
+ 'customers' => 'Cliente|Clientes',
+ 'expenses' => 'Despesa|Despesas',
+ 'bills' => 'Conta|Contas',
+ 'payments' => 'Pagamento|Pagamentos',
+ 'vendors' => 'Fornecedor|Fornecedores',
+ 'accounts' => 'Conta|Contas',
+ 'transfers' => 'Transferência|Transferências',
+ 'transactions' => 'Transação|Transações',
+ 'reports' => 'Relatório|Relatórios',
+ 'settings' => 'Configuração|Configurações',
+ 'categories' => 'Categoria|Categorias',
+ 'currencies' => 'Moeda|Moedas',
+ 'tax_rates' => 'Taxa de Imposto|Taxas de Imposto',
+ 'users' => 'Utilizador|Utilizadores',
+ 'roles' => 'Regra|Regras',
+ 'permissions' => 'Permissão|Permissões',
+ 'modules' => 'Aplicação|Aplicações',
+ 'companies' => 'Empresa|Empresas',
+ 'profits' => 'Lucro|Lucros',
+ 'taxes' => 'Imposto|Impostos',
+ 'logos' => 'Logotipo|Logotipos',
+ 'pictures' => 'Imagem|Imagens',
+ 'types' => 'Tipo|Tipos',
+ 'payment_methods' => 'Método de Pagamento|Métodos de Pagamento',
+ 'compares' => 'Receita vs Despesa|Receitas vs Despesas',
+ 'notes' => 'Nota|Notas',
+ 'totals' => 'Total|Totais',
+ 'languages' => 'Idioma|Idiomas',
+ 'updates' => 'Atualização|Atualizações',
+ 'numbers' => 'Número|Números',
+ 'statuses' => 'Estado|Estados',
+ 'others' => 'Outro|Outros',
+
+ 'dashboard' => 'Painel de Controlo',
+ 'banking' => 'Banco',
+ 'general' => 'Geral',
+ 'no_records' => 'Sem Registos.',
+ 'date' => 'Data',
+ 'amount' => 'Montante',
+ 'enabled' => 'Activado',
+ 'disabled' => 'Desativado',
+ 'yes' => 'Sim',
+ 'no' => 'Não',
+ 'na' => 'N/D',
+ 'daily' => 'Diário',
+ 'monthly' => 'Mensal',
+ 'quarterly' => 'Trimestral',
+ 'yearly' => 'Anual',
+ 'add' => 'Adicionar',
+ 'add_new' => 'Novo',
+ 'show' => 'Visualizar',
+ 'edit' => 'Editar',
+ 'delete' => 'Excluir',
+ 'send' => 'Enviar',
+ 'download' => 'Descarregar',
+ 'delete_confirm' => 'Confirmar a exclusão :name :type?',
+ 'name' => 'Nome',
+ 'email' => 'E-mail',
+ 'tax_number' => 'Número de identificação fiscal',
+ 'phone' => 'Telefone',
+ 'address' => 'Endereço',
+ 'website' => 'Website',
+ 'actions' => 'Ações',
+ 'description' => 'Descrição',
+ 'manage' => 'Gerir',
+ 'code' => 'Código',
+ 'alias' => 'Alias',
+ 'balance' => 'Saldo',
+ 'reference' => 'Referência',
+ 'attachment' => 'Anexo',
+ 'change' => 'Alterar',
+ 'switch' => 'Mudar',
+ 'color' => 'Côr',
+ 'save' => 'Guardar',
+ 'cancel' => 'Cancelar',
+ 'from' => 'De',
+ 'to' => 'Para',
+ 'print' => 'Imprimir',
+ 'search' => 'Procurar',
+ 'search_placeholder' => 'Digite para procurar..',
+ 'filter' => 'Filtrar',
+ 'help' => 'Ajuda',
+ 'all' => 'Todos',
+ 'all_type' => 'Todos os :type',
+ 'upcoming' => 'Próximo',
+ 'created' => 'Criado',
+ 'id' => 'ID',
+ 'more_actions' => 'Mais ações',
+ 'duplicate' => 'Duplicar',
+ 'unpaid' => 'Por Pagar',
+ 'paid' => 'Pago',
+ 'overdue' => 'Vencido',
+ 'partially' => 'Parcialmente',
+ 'partially_paid' => 'Parcialmente Pago',
+ 'export' => 'Exportar',
+ 'enable' => 'Ativado',
+ 'disable' => 'Desativado',
+
+ 'title' => [
+ 'new' => 'Novo :type',
+ 'edit' => 'Editar :type',
+ ],
+
+ 'form' => [
+ 'enter' => 'Digite :field',
+ 'select' => [
+ 'field' => '- Selecionar :field -',
+ 'file' => 'Selecionar ficheiro',
+ ],
+ 'no_file_selected' => 'Nenhum ficheiro selecionado...',
+ ],
+
+];
diff --git a/resources/lang/pt-PT/header.php b/resources/lang/pt-PT/header.php
new file mode 100644
index 000000000..c10597745
--- /dev/null
+++ b/resources/lang/pt-PT/header.php
@@ -0,0 +1,15 @@
+ 'Alterar Idioma',
+ 'last_login' => 'Último Login :time',
+ 'notifications' => [
+ 'counter' => '{0} Não tem notificações|{1} Tem :count notificação|[2,*] Tem :count notificações',
+ 'overdue_invoices' => '{1} :count factura vencida|[2,*] :count faturas vencidas',
+ 'upcoming_bills' => '{1} :count próxima conta|[2,*] :count próximas contas',
+ 'items_stock' => '{1} :count Item não disponível|[2,*] :count Itens não disponíveis',
+ 'view_all' => 'Visualizar todos'
+ ],
+
+];
diff --git a/resources/lang/pt-PT/import.php b/resources/lang/pt-PT/import.php
new file mode 100644
index 000000000..e3e10331c
--- /dev/null
+++ b/resources/lang/pt-PT/import.php
@@ -0,0 +1,9 @@
+ 'Importar',
+ 'title' => 'Importar :type',
+ 'message' => 'Tipos de ficheiro permitidos: XLS, XLSX. Por favor, descarregue o ficheiro de amostra.',
+
+];
diff --git a/resources/lang/pt-PT/install.php b/resources/lang/pt-PT/install.php
new file mode 100644
index 000000000..517e91910
--- /dev/null
+++ b/resources/lang/pt-PT/install.php
@@ -0,0 +1,44 @@
+ 'Próximo',
+ 'refresh' => 'Atualizar',
+
+ 'steps' => [
+ 'requirements' => 'Por favor, verifique os seguintes pré-requisitos!',
+ 'language' => 'Passo 1/3: Selecionar idioma',
+ 'database' => 'Passo 2/3: Configuração da base de dados',
+ 'settings' => 'Passo 3/3: Detalhes da empresa e do administrador',
+ ],
+
+ 'language' => [
+ 'select' => 'Selecionar Idioma',
+ ],
+
+ 'requirements' => [
+ 'enabled' => ':feature precisa estar ativada!',
+ 'disabled' => ':feature precisa estar desativada!',
+ 'extension' => ':extension precisa estar carregada!',
+ 'directory' => 'O diretório :directory precisa de permissão para escrita!',
+ ],
+
+ 'database' => [
+ 'hostname' => 'Nome do servidor',
+ 'username' => 'Nome de utilizador',
+ 'password' => 'Senha',
+ 'name' => 'Base de Dados',
+ ],
+
+ 'settings' => [
+ 'company_name' => 'Nome da empresa',
+ 'company_email' => 'E-mail da empresa',
+ 'admin_email' => 'E-mail do Administrador',
+ 'admin_password' => 'Senha do Administrador',
+ ],
+
+ 'error' => [
+ 'connection' => 'Erro: Não foi possível ligar à base de dados! Por favor, verifique se a informação que inseriu está correcta.',
+ ],
+
+];
diff --git a/resources/lang/pt-PT/invoices.php b/resources/lang/pt-PT/invoices.php
new file mode 100644
index 000000000..d7316327c
--- /dev/null
+++ b/resources/lang/pt-PT/invoices.php
@@ -0,0 +1,55 @@
+ 'Fatura nº',
+ 'invoice_date' => 'Data de Emissão',
+ 'total_price' => 'Valor total',
+ 'due_date' => 'Data de Vencimento',
+ 'order_number' => 'Encomenda nº',
+ 'bill_to' => 'Cobrar a',
+
+ 'quantity' => 'Quantidade',
+ 'price' => 'Preço',
+ 'sub_total' => 'Subtotal',
+ 'discount' => 'Desconto',
+ 'tax_total' => 'Total de imposto',
+ 'total' => 'Total',
+
+ 'item_name' => 'Nome do Item|Nome dos Itens',
+
+ 'show_discount' => ':discount% de desconto',
+ 'add_discount' => 'Adicionar Desconto',
+ 'discount_desc' => 'do subtotal',
+
+ 'payment_due' => 'Pagamento vencido',
+ 'paid' => 'Pago',
+ 'histories' => 'Histórico',
+ 'payments' => 'Pagamentos',
+ 'add_payment' => 'Novo Pagamento',
+ 'mark_paid' => 'Marcar como Pago',
+ 'mark_sent' => 'Marcar como Enviada',
+ 'download_pdf' => 'Descarregar em PDF',
+ 'send_mail' => 'Enviar E-mail',
+
+ 'status' => [
+ 'draft' => 'Rascunho',
+ 'sent' => 'Enviado',
+ 'viewed' => 'Visto',
+ 'approved' => 'Aprovado',
+ 'partial' => 'Parcial',
+ 'paid' => 'Pago',
+ ],
+
+ 'messages' => [
+ 'email_sent' => 'O e-mail foi enviado com sucesso!',
+ 'marked_sent' => 'Fatura marcada como enviada com sucesso!',
+ 'email_required' => 'Nenhum endereço de e-mail para este cliente!',
+ ],
+
+ 'notification' => [
+ 'message' => 'Recebeu este e-mail porque tem uma próxima fatura com o valor de :amount para o cliente :customer.',
+ 'button' => 'Pagar agora',
+ ],
+
+];
diff --git a/resources/lang/pt-PT/items.php b/resources/lang/pt-PT/items.php
new file mode 100644
index 000000000..57e664796
--- /dev/null
+++ b/resources/lang/pt-PT/items.php
@@ -0,0 +1,15 @@
+ 'Quantidade|Quantidades',
+ 'sales_price' => 'Preço de Venda',
+ 'purchase_price' => 'Preço de Compra',
+ 'sku' => 'SKU',
+
+ 'notification' => [
+ 'message' => 'Recebeu este e-mail porque o item :name está quase indesponível.',
+ 'button' => 'Visualizar agora',
+ ],
+
+];
diff --git a/resources/lang/pt-PT/messages.php b/resources/lang/pt-PT/messages.php
new file mode 100644
index 000000000..d4e8df3c9
--- /dev/null
+++ b/resources/lang/pt-PT/messages.php
@@ -0,0 +1,27 @@
+ [
+ 'added' => ':type adicionado!',
+ 'updated' => ':type atualizado!',
+ 'deleted' => ':type excluído!',
+ 'duplicated' => ':type duplicado!',
+ 'imported' => ':type importado!',
+ 'enabled' => ':type ativado!',
+ 'disabled' => ': type desativado!',
+ ],
+ 'error' => [
+ 'over_payment' => 'Erro: Pagamento não adicionado! O valor passa o total.',
+ 'not_user_company' => 'Erro: Não tem permissão para gerir esta empresa!',
+ 'customer' => 'Erro: O utilizador não foi criado! :name já está a usar este e-mail.',
+ 'no_file' => 'Erro: Nenhum ficheiro selecionado!',
+ 'last_category' => 'Erro: Não pode excluir a última :type categoria!',
+ 'invalid_token' => 'Erro: O token inserido é inválido!',
+ ],
+ 'warning' => [
+ 'deleted' => 'Aviso: Não está autorizado a excluir :name porque está relacionado com :text.',
+ 'disabled' => 'Aviso: Não está autorizado a desativar :name porque está relacionado com :text.',
+ ],
+
+];
diff --git a/resources/lang/pt-PT/modules.php b/resources/lang/pt-PT/modules.php
new file mode 100644
index 000000000..6d1e92056
--- /dev/null
+++ b/resources/lang/pt-PT/modules.php
@@ -0,0 +1,58 @@
+ 'Token de API',
+ 'api_token' => 'Token',
+ 'my_apps' => 'Minhas Aplicações',
+ 'top_paid' => 'Melhores Pagamentos',
+ 'new' => 'Novo',
+ 'top_free' => 'Melhores Grátis',
+ 'free' => 'GRÁTIS',
+ 'search' => 'Pesquisar',
+ 'install' => 'Instalar',
+ 'buy_now' => 'Comprar Agora',
+ 'token_link' => 'Clique aqui para obter o token de API.',
+ 'no_apps' => 'Ainda não existem aplicações nesta categoria.',
+ 'developer' => 'É um programador? Aqui pode aprender como criar uma aplicação e começar a vendê-la hoje mesmo!',
+
+ 'about' => 'Sobre',
+
+ 'added' => 'Adicionado',
+ 'updated' => 'Atualizado',
+ 'compatibility' => 'Compatibilidade',
+
+ 'installed' => ':module instalado',
+ 'uninstalled' => ':module desinstalado',
+ //'updated' => ':module updated',
+ 'enabled' => ':module ativado',
+ 'disabled' => ':module disativado',
+
+ 'tab' => [
+ 'installation' => 'Instalação',
+ 'faq' => 'Perguntas Frequentes',
+ 'changelog' => 'Registo de alterações',
+ ],
+
+ 'installation' => [
+ 'header' => 'Instalação de aplicação',
+ 'download' => 'A descarregar ficheiros do módulo :module.',
+ 'unzip' => 'A extrair ficheiros do módulo :module.',
+ 'install' => 'A instalar ficheiros do modulo :module.',
+ ],
+
+ 'badge' => [
+ 'installed' => 'Instalado',
+ ],
+
+ 'button' => [
+ 'uninstall' => 'Desinstalar',
+ 'disable' => 'Desactivar',
+ 'enable' => 'Activar',
+ ],
+
+ 'my' => [
+ 'purchased' => 'Compradas',
+ 'installed' => 'Instaladas',
+ ],
+];
diff --git a/resources/lang/pt-PT/pagination.php b/resources/lang/pt-PT/pagination.php
new file mode 100644
index 000000000..8cb02524b
--- /dev/null
+++ b/resources/lang/pt-PT/pagination.php
@@ -0,0 +1,9 @@
+ '« Anterior',
+ 'next' => 'Próxima »',
+ 'showing' => 'A mostrar :first de :last de :total :type',
+
+];
diff --git a/resources/lang/pt-PT/passwords.php b/resources/lang/pt-PT/passwords.php
new file mode 100644
index 000000000..e710f9b45
--- /dev/null
+++ b/resources/lang/pt-PT/passwords.php
@@ -0,0 +1,22 @@
+ 'A senha deve conter no mínimo 6 caracteres e ser igual à confirmação.',
+ 'reset' => 'A senha foi redefinida!',
+ 'sent' => 'O link para redefinição de senha foi enviado para o seu e-mail!',
+ 'token' => 'Token para recuperação de senha inválido.',
+ 'user' => "Não encontramos nenhum utilizador com esse endereço de e-mail.",
+
+];
diff --git a/resources/lang/pt-PT/recurring.php b/resources/lang/pt-PT/recurring.php
new file mode 100644
index 000000000..853887dd0
--- /dev/null
+++ b/resources/lang/pt-PT/recurring.php
@@ -0,0 +1,20 @@
+ 'Repetir',
+ 'every' => 'A cada',
+ 'period' => 'Período',
+ 'times' => 'Vezes',
+ 'daily' => 'Diariamente',
+ 'weekly' => 'Semanalmente',
+ 'monthly' => 'Mensalmente',
+ 'yearly' => 'Anualmente',
+ 'custom' => 'Personalizado',
+ 'days' => 'Dia(s)',
+ 'weeks' => 'Semana(s)',
+ 'months' => 'Mês(es)',
+ 'years' => 'Ano(s)',
+ 'message' => 'This is a recurring :type and the next :type will be automatically generated at :date',
+
+];
diff --git a/resources/lang/pt-PT/reports.php b/resources/lang/pt-PT/reports.php
new file mode 100644
index 000000000..6b22f638c
--- /dev/null
+++ b/resources/lang/pt-PT/reports.php
@@ -0,0 +1,30 @@
+ 'Este Ano',
+ 'previous_year' => 'Ano Anterior',
+ 'this_quarter' => 'Este Trimestre',
+ 'previous_quarter' => 'Trimestre Anterior',
+ 'last_12_months' => 'Últimos 12 Meses',
+ 'profit_loss' => 'Lucro & Perda',
+ 'gross_profit' => 'Lucro Bruto',
+ 'net_profit' => 'Lucro Líquido',
+ 'total_expenses' => 'Despesas Totais',
+ 'net' => 'Líquido',
+
+ 'summary' => [
+ 'income' => 'Resumo das Receitas',
+ 'expense' => 'Resumo das Despesas',
+ 'income_expense' => 'Receita vs Despesa',
+ 'tax' => 'Resumo de imposto',
+ ],
+
+ 'quarter' => [
+ '1' => 'Jan-Mar',
+ '2' => 'Abr-Jun',
+ '3' => 'Jul-Set',
+ '4' => 'Out-Dez',
+ ],
+
+];
diff --git a/resources/lang/pt-PT/settings.php b/resources/lang/pt-PT/settings.php
new file mode 100644
index 000000000..a659c33e3
--- /dev/null
+++ b/resources/lang/pt-PT/settings.php
@@ -0,0 +1,90 @@
+ [
+ 'name' => 'Nome',
+ 'email' => 'E-mail',
+ 'phone' => 'Telefone',
+ 'address' => 'Endereço',
+ 'logo' => 'Logotipo',
+ ],
+ 'localisation' => [
+ 'tab' => 'Localização',
+ 'date' => [
+ 'format' => 'Formato da Data',
+ 'separator' => 'Separador da Data',
+ 'dash' => 'Traço (-)',
+ 'dot' => 'Ponto (.)',
+ 'comma' => 'Vírgula (,)',
+ 'slash' => 'Barra (/)',
+ 'space' => 'Espaço ( )',
+ ],
+ 'timezone' => 'Fuso Horário',
+ 'percent' => [
+ 'title' => 'Posição do símbolo de percentagem (%)',
+ 'before' => 'Antes do Número',
+ 'after' => 'Depois do Número',
+ ],
+ ],
+ 'invoice' => [
+ 'tab' => 'Faturas',
+ 'prefix' => 'Prefixo',
+ 'digit' => 'Quantidade de dígitos',
+ 'next' => 'Próximo Número',
+ 'logo' => 'Logotipo',
+ ],
+ 'default' => [
+ 'tab' => 'Padrões',
+ 'account' => 'Conta Padrão',
+ 'currency' => 'Moeda Padrão',
+ 'tax' => 'Imposto Padrão',
+ 'payment' => 'Método de Pagamento Padrão',
+ 'language' => 'Idioma Padrão',
+ ],
+ 'email' => [
+ 'protocol' => 'Protocolo',
+ 'php' => 'PHP Mail',
+ 'smtp' => [
+ 'name' => 'SMTP',
+ 'host' => 'Servidor SMTP',
+ 'port' => 'Porta SMTP',
+ 'username' => 'Utilizador SMTP',
+ 'password' => 'Senha SMTP',
+ 'encryption' => 'Encriptação SMTP',
+ 'none' => 'Nenhum',
+ ],
+ 'sendmail' => 'Sendmail',
+ 'sendmail_path' => 'Localização Sendmail',
+ 'log' => 'Registo de e-mails',
+ ],
+ 'scheduling' => [
+ 'tab' => 'Agendamento',
+ 'send_invoice' => 'Enviar lembrete de faturas',
+ 'invoice_days' => 'Enviar após dias de vencimento',
+ 'send_bill' => 'Enviar lembrete de Conta',
+ 'bill_days' => 'Enviar antes de vencer',
+ 'cron_command' => 'Comando Cron',
+ 'schedule_time' => 'Iniciar Cron',
+ ],
+ 'appearance' => [
+ 'tab' => 'Aparência',
+ 'theme' => 'Tema',
+ 'light' => 'Claro',
+ 'dark' => 'Escuro',
+ 'list_limit' => 'Resultados por Página',
+ 'use_gravatar' => 'Usar Gravatar',
+ ],
+ 'system' => [
+ 'tab' => 'Sistema',
+ 'session' => [
+ 'lifetime' => 'Fechar sessão (Minutos)',
+ 'handler' => 'Gestor de Sessão',
+ 'file' => 'Ficheiro',
+ 'database' => 'Base de Dados',
+ ],
+ 'file_size' => 'Tamanho máximo do ficheiro (MB)',
+ 'file_types' => 'Tipos de ficheiros permitidos',
+ ],
+
+];
diff --git a/resources/lang/pt-PT/taxes.php b/resources/lang/pt-PT/taxes.php
new file mode 100644
index 000000000..82414896b
--- /dev/null
+++ b/resources/lang/pt-PT/taxes.php
@@ -0,0 +1,8 @@
+ 'Taxa',
+ 'rate_percent' => 'Taxa (%)',
+
+];
diff --git a/resources/lang/pt-PT/transfers.php b/resources/lang/pt-PT/transfers.php
new file mode 100644
index 000000000..96890491f
--- /dev/null
+++ b/resources/lang/pt-PT/transfers.php
@@ -0,0 +1,12 @@
+ 'Da Conta',
+ 'to_account' => 'Para a Conta',
+
+ 'messages' => [
+ 'delete' => ':from para :to (:amount)',
+ ],
+
+];
diff --git a/resources/lang/pt-PT/updates.php b/resources/lang/pt-PT/updates.php
new file mode 100644
index 000000000..418246c92
--- /dev/null
+++ b/resources/lang/pt-PT/updates.php
@@ -0,0 +1,15 @@
+ 'Versão Instalada',
+ 'latest_version' => 'Última Versão',
+ 'update' => 'Atualizar o Akaunting para a versão :version',
+ 'changelog' => 'Registo de Alterações',
+ 'check' => 'Verificar',
+ 'new_core' => 'Está disponível uma nova versão do Akaunting.',
+ 'latest_core' => 'Parabéns! Tem a versão mais recente do Akaunting. Futuras atualizações de segurança serão aplicadas automaticamente.',
+ 'success' => 'O processo de atualização foi concluído com sucesso.',
+ 'error' => 'O processo de atualização falhou, por favor, tente novamente.',
+
+];
diff --git a/resources/lang/pt-PT/validation.php b/resources/lang/pt-PT/validation.php
new file mode 100644
index 000000000..0208bd1d3
--- /dev/null
+++ b/resources/lang/pt-PT/validation.php
@@ -0,0 +1,119 @@
+ 'O campo :attribute deverá ser aceite.',
+ 'active_url' => 'O campo :attribute não contém um URL válido.',
+ 'after' => 'O campo :attribute deverá conter uma data posterior a :date.',
+ 'after_or_equal' => 'O campo :attribute deverá conter uma data posterior ou igual a :date.',
+ 'alpha' => 'O campo :attribute deverá conter apenas letras.',
+ 'alpha_dash' => 'O campo :attribute deverá conter apenas letras, números e traços.',
+ 'alpha_num' => 'O campo :attribute deverá conter apenas letras e números .',
+ 'array' => 'O campo :attribute deverá conter uma coleção de elementos.',
+ 'before' => 'O campo :attribute deverá conter uma data anterior a :date.',
+ 'before_or_equal' => 'O Campo :attribute deverá conter uma data anterior ou igual a :date.',
+ 'between' => [
+ 'numeric' => 'O campo :attribute deverá ter um valor entre :min - :max.',
+ 'file' => 'O campo :attribute deverá ter um tamanho entre :min - :max kilobytes.',
+ 'string' => 'O campo :attribute deverá conter entre :min - :max caracteres.',
+ 'array' => 'O campo :attribute deverá conter entre :min - :max itens.',
+ ],
+ 'boolean' => 'O campo :attribute deverá conter um valor verdadeiro ou falso.',
+ 'confirmed' => 'A confirmação para o campo :attribute não coincide.',
+ 'date' => 'O campo :attribute não contém uma data válida.',
+ 'date_format' => 'A data indicada para o campo :attribute não respeita o formato :format.',
+ 'different' => 'Os campos :attribute e :other deverão conter valores diferentes.',
+ 'digits' => 'O campo :attribute deverá conter :digits caracteres.',
+ 'digits_between' => 'O campo :attribute deverá conter entre :min a :max caracteres.',
+ 'dimensions' => 'O campo :attribute deverá conter um tamanho de imagem válida.',
+ 'distinct' => 'O campo :attribute contém um valor duplicado.',
+ 'email' => 'O campo :attribute não contém um endereço de e-mail válido.',
+ 'exists' => 'O valor selecionado para o campo :attribute é inválido.',
+ 'file' => 'O campo :attribute deverá conter um ficheiro.',
+ 'filled' => 'É obrigatória a indicação de um valor para o campo :attribute.',
+ 'image' => 'O campo :attribute deverá conter uma imagem.',
+ 'in' => 'O campo :attribute selecionado não contém um valor válido.',
+ 'in_array' => 'O campo :attribute não existe em :other.',
+ 'integer' => 'O campo :attribute deverá conter um número inteiro.',
+ 'ip' => 'O campo :attribute deverá conter um IP válido.',
+ 'json' => 'O campo :attribute deverá conter uma string JSON válida.',
+ 'max' => [
+ 'numeric' => 'O campo :attribute não deverá conter um valor superior a :max.',
+ 'file' => 'O campo :attribute não deverá ter um tamanho superior a :max kilobytes.',
+ 'string' => 'O campo :attribute não deverá conter mais de :max caracteres.',
+ 'array' => 'O campo :attribute não deverá conter mais de :max itens.',
+ ],
+ 'mimes' => 'O campo :attribute deverá conter um ficheiro do tipo: :values.',
+ 'mimetypes' => 'O campo :attribute deverá conter um ficheiro do tipo: :values.',
+ 'min' => [
+ 'numeric' => 'O campo :attribute deverá ter um valor superior ou igual a :min.',
+ 'file' => 'O campo :attribute deverá ter no mínimo :min kilobytes.',
+ 'string' => 'O campo :attribute deverá conter no mínimo :min caracteres.',
+ 'array' => 'O campo :attribute deverá conter no mínimo :min itens.',
+ ],
+ 'not_in' => 'O campo :attribute selecionado contém um valor inválido.',
+ 'numeric' => 'O campo :attribute deverá conter um valor numérico.',
+ 'present' => 'O campo :attribute deverá estar presente.',
+ 'regex' => 'O formato do valor para o campo :attribute é inválido.',
+ 'required' => 'É obrigatória a indicação de um valor para o campo :attribute.',
+ 'required_if' => 'É obrigatória a indicação de um valor para o campo :attribute quando o valor do campo :other é igual a :value.',
+ 'required_unless' => 'É obrigatória a indicação de um valor para o campo :attribute a menos que :other esteja presente em :values.',
+ 'required_with' => 'É obrigatória a indicação de um valor para o campo :attribute quando :values está presente.',
+ 'required_with_all' => 'É obrigatória a indicação de um valor para o campo :attribute quando um dos :values está presente.',
+ 'required_without' => 'É obrigatória a indicação de um valor para o campo :attribute quando :values não está presente.',
+ 'required_without_all' => 'É obrigatória a indicação de um valor para o campo :attribute quando nenhum dos :values está presente.',
+ 'same' => 'Os campos :attribute e :other deverão conter valores iguais.',
+ 'size' => [
+ 'numeric' => 'O campo :attribute deverá conter o valor :size.',
+ 'file' => 'O campo :attribute deverá ter o tamanho de :size kilobytes.',
+ 'string' => 'O campo :attribute deverá conter :size caracteres.',
+ 'array' => 'O campo :attribute deverá conter :size itens.',
+ ],
+ 'string' => 'O campo :attribute deverá conter uma string.',
+ 'timezone' => 'O campo :attribute deverá ter um fuso horário válido.',
+ 'unique' => 'O valor indicado para o campo :attribute já se encontra registado.',
+ 'uploaded' => 'O upload do ficheiro :attribute falhou.',
+ 'url' => 'O formato do URL indicado para o campo :attribute é inválido.',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Custom Validation Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify custom validation messages for attributes using the
+ | convention "attribute.rule" to name the lines. This makes it quick to
+ | specify a specific custom language line for a given attribute rule.
+ |
+ */
+
+ 'custom' => [
+ 'attribute-name' => [
+ 'rule-name' => 'mensagem personalizada',
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Custom Validation Attributes
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used to swap attribute place-holders
+ | with something more reader friendly such as E-Mail Address instead
+ | of "email". This simply helps us make messages a little cleaner.
+ |
+ */
+
+ 'attributes' => [],
+
+];