diff --git a/README.md b/README.md
index 3a4f8fb2..defa280d 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@ But we already support to [import your timesheets](var/docs/migration_v1.md) fro
It is developed with modern frameworks like [Symfony v4](https://github.com/symfony/symfony), [Doctrine](https://github.com/doctrine/),
[AdminLTE](https://github.com/kevinpapst/AdminLTEBundle/) and [many](composer.json) [more](package.json).
-Kimai is a multi-language application and already translated to: English, German, Italian, French, Spanish, Russian, Arabic and Hungarian.
+Kimai is a multi-language application and already translated to: English, German, Italian, French, Spanish, Russian, Arabic, Hungarian and Portuguese.
If you want to support us in translating Kimai, please [read this documentation](var/docs/translations.md).
### Requirements
diff --git a/config/packages/kimai.yaml b/config/packages/kimai.yaml
index 3145037a..d4152ee6 100644
--- a/config/packages/kimai.yaml
+++ b/config/packages/kimai.yaml
@@ -92,6 +92,10 @@ kimai:
date_short: 'Y-m-d'
duration: '%%h:%%m hours'
duration_short: '%%h:%%m h'
+ pt_BR:
+ date_short: 'd-m-Y'
+ duration: '%%h:%%m horas'
+ duration_short: '%%h:%%m h'
it:
date_short: 'd.m.Y'
duration: '%%h:%%m h'
diff --git a/config/services.yaml b/config/services.yaml
index f5865be7..2c3a2e2f 100644
--- a/config/services.yaml
+++ b/config/services.yaml
@@ -2,7 +2,7 @@
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:
locale: en
- app_locales: en|de|it|fr|es|ru|ar|hu
+ app_locales: en|de|it|fr|es|ru|ar|hu|pt_BR
services:
# default configuration for services in *this* file
diff --git a/translations/about.pt_BR.xliff b/translations/about.pt_BR.xliff
new file mode 100644
index 00000000..34e499cf
--- /dev/null
+++ b/translations/about.pt_BR.xliff
@@ -0,0 +1,15 @@
+
+
+
+
+
+ about.title
+ Sobre o Kimai
+
+
+ about.subtitle
+ Informação do Sistema
+
+
+
+
diff --git a/translations/exceptions.pt_BR.xliff b/translations/exceptions.pt_BR.xliff
new file mode 100644
index 00000000..90cdfc79
--- /dev/null
+++ b/translations/exceptions.pt_BR.xliff
@@ -0,0 +1,52 @@
+
+
+
+
+
+ access.denied
+ Acesso Negado
+
+
+ stacktrace
+ Um problema ocorreu
+
+
+ http_error.title
+ Erro
+
+
+ http_error.description
+ Oops! Um erro ocorreu.
+
+
+ http_error.suggestion
+
+ Um erro inesperado aconteceu, favor tente novamente.
+ Você se deparou com um bug, favor contatar o administrador caso o problema se repita novamente.
+
+
+
+ http_error_404.description
+ Oops! Página não encontrada.
+
+
+ http_error_404.suggestion
+
+ Não conseguimos encontrar a página que você está buscando.
+ Enquanto isso, você deve retornar ao dashboard e começar novamente.
+
+
+
+ http_error_403.description
+ Esta página é restrita.
+
+
+ http_error_403.suggestion
+
+ Desculpe, você não tem permissões suficientes para visualizar esta página.
+ Por favor, fale com seu administrador se você acha que isso é um erro.
+
+
+
+
+
diff --git a/translations/flashmessages.pt_BR.xliff b/translations/flashmessages.pt_BR.xliff
new file mode 100644
index 00000000..3594c391
--- /dev/null
+++ b/translations/flashmessages.pt_BR.xliff
@@ -0,0 +1,43 @@
+
+
+
+
+
+ timesheet.stop.success
+ A gravação de tempo foi interrompida
+
+
+ timesheet.stop.error
+ A gravação de tempo não pôde ser interrompida: %reason%
+
+
+ timesheet.start.success
+ A gravação de tempo foi iniciada
+
+
+ timesheet.start.error
+ A gravação de tempo não pôde ser iniciada: %reason%
+
+
+ action.update.success
+ Alterações salvas com sucesso
+
+
+ action.update.error
+ As alterações não puderam ser salvas: %reason%
+
+
+ action.delete.success
+ A entrada foi excluída com sucesso
+
+
+ action.delete.error
+ A entrada não pode ser excluída: %reason%
+
+
+ invoice.first_template
+ Você precisa criar sua primeira fatura modelo antes de prosseguir
+
+
+
+
diff --git a/translations/invoice-calculator.pt_BR.xliff b/translations/invoice-calculator.pt_BR.xliff
new file mode 100644
index 00000000..13fe9414
--- /dev/null
+++ b/translations/invoice-calculator.pt_BR.xliff
@@ -0,0 +1,27 @@
+
+
+
+
+
+ label.invoice_calculator
+ Cálculo da soma
+
+
+ default
+ Baseado em entrada - uma entrada por medição de tempo (padrão)
+
+
+ short
+ Horas adicionadas - apenas uma entrada
+
+
+ user
+ Agrupado pelo usuário - uma entrada por usuário
+
+
+ activity
+ Atividade agrupada - uma entrada por atividade
+
+
+
+
diff --git a/translations/invoice-numbergenerator.pt_BR.xliff b/translations/invoice-numbergenerator.pt_BR.xliff
new file mode 100644
index 00000000..4ae42486
--- /dev/null
+++ b/translations/invoice-numbergenerator.pt_BR.xliff
@@ -0,0 +1,15 @@
+
+
+
+
+
+ label.invoice_number_generator
+ Gerador de Números de Fatura
+
+
+ default
+ Data (Padrão)
+
+
+
+
diff --git a/translations/invoice-renderer.pt_BR.xliff b/translations/invoice-renderer.pt_BR.xliff
new file mode 100644
index 00000000..c1560ca7
--- /dev/null
+++ b/translations/invoice-renderer.pt_BR.xliff
@@ -0,0 +1,39 @@
+
+
+
+
+
+ label.invoice_renderer
+ Documento de fatura
+
+
+ default
+ Fatura (Padrão)
+
+
+ timesheet
+ Planilha de horário
+
+
+ freelancer
+ Freelancer
+
+
+ open-spreadsheet
+ Planilha de Cálculo
+
+
+ spreadsheet
+ Excel
+
+
+ export
+ Exportação de dados
+
+
+ company
+ Fatura da empresa
+
+
+
+
diff --git a/translations/messages.pt_BR.xliff b/translations/messages.pt_BR.xliff
new file mode 100644
index 00000000..a0491427
--- /dev/null
+++ b/translations/messages.pt_BR.xliff
@@ -0,0 +1,914 @@
+
+
+
+
+
+
+ browser.title
+ Kimai - Time Tracking
+
+
+ yes
+ Sim
+
+
+ no
+ Não
+
+
+ both
+ Ambos
+
+
+ subtitle.amount
+ (total %count%)
+
+
+ This is a mandatory field
+ Mandatório
+
+
+ create
+ Criar
+
+
+ confirm.delete
+ Você realmente quer deletar?
+
+
+ confirm.delete_message
+
+ Você precisa confirmar a exclusão, pois há objetos vinculados que também serão excluídos.
+
+
+
+
+
+ label.password
+ Senha
+
+
+ label.password_repeat
+ Repita a Senha
+
+
+ label.logout
+ Sair
+
+
+ label.user_profile
+ Meu Perfil
+
+
+ label.api_token
+ Senha API
+
+
+ label.api_token_repeat
+ Repita Senha da API
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ error.no_entries_found
+ Nenhuma entrada existente
+
+
+
+
+ label.date
+ Data
+
+
+ label.starttime
+ Início
+
+
+ label.endtime
+ Fim
+
+
+ label.duration
+ Duração
+
+
+ label.user
+ Usuário
+
+
+ label.username
+ Nome de usuário
+
+
+ label.description
+ Descrição
+
+
+ label.name
+ Nome
+
+
+
+ label.id
+ ID
+
+
+ label.visible
+ Visível
+
+
+ label.budget
+ Despesas
+
+
+ label.activity
+ Atividade
+
+
+ label.project
+ Projeto
+
+
+ label.hourly_rate
+ Taxa horária
+
+
+ label.skin
+ Tema Kimai
+
+
+ label.hours
+ Horas
+
+
+ label.rate
+ Taxa
+
+
+ label.language
+ Linguagem
+
+
+ label.customer
+ Cliente
+
+
+ label.email
+ E-mail
+
+
+ label.create_more
+ Criar outras entradas
+
+
+
+
+ label.actions
+ Ações
+
+
+ action.edit
+ Editar
+
+
+ action.delete
+ Deletar
+
+
+ action.save
+ Salvar
+
+
+ action.back
+ Voltar
+
+
+ action.close
+ Fechar
+
+
+
+
+ dashboard.title
+ Dashboard
+
+
+ dashboard.subtitle
+ Bem vindo!
+
+
+ dashboard.you
+ Minhas Estatísticas
+
+
+ dashboard.all
+ Todos usuários
+
+
+ dashboard.admin
+ Administrador
+
+
+
+
+ more.info.link
+ Mais Informações
+
+
+ badge.visible
+ Sim
+
+
+ badge.invisible
+ Não
+
+
+ label.toggle_dropdown
+ Mostrar menu
+
+
+
+
+ timesheet.title
+ Meus Tempos
+
+
+ timesheet.subtitle
+ Administrar minhas gravações de tempo
+
+
+ timesheet.edit
+ Editar Gravação
+
+
+ label.begin
+ De
+
+
+ label.end
+ Para
+
+
+ modal.columns.title
+ Alterar a visibilidade da coluna
+
+
+ modal.columns.description
+ Ao salvar, as colunas desmarcadas serão ocultadas e essa configuração será armazenada em um cookie do navegador. Se você excluir seus cookies, as configurações serão invertidas.
+
+
+ label.fixed_rate
+ Taxa fixa
+
+
+
+
+ profile.title
+ Perfil do Usuário
+
+
+ profile.subtitle
+ Editar minhas configurações
+
+
+ profile.about_me
+ Sobre mim
+
+
+ profile.first_entry
+ Trabalhando desde
+
+
+ profile.tab_monthly
+ Estatística anual
+
+
+ profile.settings
+ Perfil
+
+
+ profile.password
+ Senha
+
+
+ profile.api-token
+ API
+
+
+ profile.roles
+ Papéis
+
+
+ profile.preferences
+ Preferências
+
+
+ label.theme.fixed_layout
+ Ative o layout fixo. Você não pode usar layouts fixos e encaixados juntos.
+
+
+ label.theme.boxed_layout
+ Ativar o layout em caixa (melhor em telas grandes)
+
+
+
+
+ label.calendar.initial_view
+ Vista inicial do calendário
+
+
+
+ month
+ Mês
+
+
+ agendaWeek
+ Semana
+
+
+ agendaDay
+ Dia
+
+
+
+
+ help.title
+ Ajuda
+
+
+ help.subtitle
+ Instruções para usar e configurar o Kimai
+
+
+
+
+ admin_timesheet.title
+ Quadro de Horários
+
+
+ admin_timesheet.subtitle
+ Registros de todos os usuários
+
+
+
+
+ admin_project.title
+ Projetos
+
+
+ admin_project.subtitle
+ Um projeto combina atividades para um cliente em um grupo
+
+
+ admin_project.delete_confirm
+
+ Atualmente o %project% para o cliente %customer% tem %activities%
+ atividades e %records% registros de tempo, que contam até um total de %duration%.
+ Essas atividades e registros de tempo serão excluídos também!
+ Alternativamente, você pode selecionar um projeto para o qual todas as atividades e entradas existentes são transferidas:
+
+
+
+
+
+ admin_activity.title
+ Atividades
+
+
+ admin_activity.subtitle
+ Tarefas que podem ser escolhidas para registros de tempo
+
+
+ admin_activity.delete_confirm
+
+ Atualmente o %project% para o cliente %customer% tem %activities%
+ atividades e %records% registros de tempo, que contam até um total de %duration%.
+ Essas atividades e registros de tempo serão excluídos também!
+ Alternativamente, você pode selecionar um projeto para o qual todas as atividades e entradas existentes são transferidas:
+
+
+
+
+
+ admin_customer.title
+ Cliente
+
+
+ admin_customer.subtitle
+ Seu cliente é a base para criar projetos e atividades
+
+
+ label.customer_number
+ Conta
+
+
+ label.company
+ Nome da Empresa
+
+
+ label.vat
+ Imposto
+
+
+ label.contact
+ Contato
+
+
+ label.address
+ Endereço
+
+
+ label.country
+ País
+
+
+ label.phone
+ Telefone
+
+
+ label.fax
+ Fax
+
+
+ label.mobile
+ Celular
+
+
+ label.homepage
+ Pagina inicial
+
+
+ label.timezone
+ Fuso horário
+
+
+ label.currency
+ Moeda
+
+
+ admin_customer.delete_confirm
+
+ Atualmente o %project% para o cliente %customer% tem %activities%
+ atividades e %records% registros de tempo, que contam até um total de %duration%.
+ Essas atividades e registros de tempo serão excluídos também!
+ Alternativamente, você pode selecionar um projeto para o qual todas as atividades e entradas existentes são transferidas:
+
+
+
+
+
+ admin_user.title
+ Usuário
+
+
+ admin_user.subtitle
+ Todos os usuários registrados da sua instalação do Kimai
+
+
+ label.alias
+ Nome
+
+
+ label.title
+ Título
+
+
+ label.avatar
+ Imagem de perfil
+
+
+ label.active
+ Ativo
+
+
+ label.roles
+ Função
+
+
+ admin_user.delete_confirm
+
+ Atualmente o usuário %user% possuí %records% registros de tempo, que contam até um total de %duration%.
+ Essas atividades e registros de tempo serão excluídos também!
+
+
+
+
+
+ ROLE_SUPER_ADMIN
+ Administrador do Sistema
+
+
+ ROLE_ADMIN
+ Administrador
+
+
+ ROLE_TEAMLEAD
+ Líder da equipe
+
+
+ ROLE_USER
+ Usuário
+
+
+ ROLE_CUSTOMER
+ Cliente
+
+
+
+
+ stats.durationToday
+ Horas de trabalho hoje
+
+
+ stats.durationWeek
+ Horas de trabalho esta semana
+
+
+ stats.durationMonth
+ Horas de trabalho este mês
+
+
+ stats.durationYear
+ Horas de trabalho este ano
+
+
+ stats.durationTotal
+ Total de horas de trabalho
+
+
+ stats.amountToday
+ Receita hoje
+
+
+ stats.amountWeek
+ Receita esta semana
+
+
+ stats.amountMonth
+ Receita este mês
+
+
+ stats.amountYear
+ Receita este ano
+
+
+ stats.amountTotal
+ Receita total
+
+
+ stats.userActiveToday
+ Usuários ativos hoje
+
+
+ stats.userActiveWeek
+ Active users this week
+
+
+ stats.userActiveMonth
+ Usuários ativos este mês
+
+
+ stats.userActiveYear
+ Usuários ativos este ano
+
+
+ stats.userActiveTotal
+ Usuários ativos total
+
+
+ stats.activeRecordings
+ Registros ativos
+
+
+ stats.userTotal
+ Quantidade de usuários
+
+
+ stats.activityTotal
+ Quantidade de atividades
+
+
+ stats.projectTotal
+ Quantidade de projetos
+
+
+ stats.customerTotal
+ Quantidade de clientes
+
+
+
+
+ admin_invoice_template.title
+ Modelo de fatura
+
+
+ admin_invoice_template.subtitle
+ Administrar seus modelos de fatura que podem ser usados para exportar dados.
+
+
+ invoice.title
+ Faturas
+
+
+ invoice.subtitle
+ Criar faturas a partir de suas entradas de quadro de horários registradas.
+
+
+ invoice.select_filter
+ Nenhuma entrada de fatura foi encontrada com base nos filtros selecionados.
+
+
+ invoice.preview
+ Esta é uma prévia dos dados que serão exibidos no documento da fatura
+.
+
+
+ button.print
+ Imprimir
+
+
+ invoice_print
+ Fatura
+
+
+ label.template
+ Modelo
+
+
+ label.due_days
+ Prazo de pagamento em dias
+
+
+ invoice.due_days
+ Alvo de pagamento
+
+
+ invoice.from
+ De
+
+
+ invoice.to
+ Para
+
+
+ invoice.number
+ Número da Fatura
+
+
+ invoice.subtotal
+ Subtotal
+
+
+ invoice.tax
+ Imposto
+
+
+ invoice.total
+ Total
+
+
+ invoice.service_date
+ Data de serviço
+
+
+ invoice.amount
+ Quantidade
+
+
+ invoice.total_rate
+ Preço Total
+
+
+ invoice.unit_price
+ Preço unitário
+
+
+ label.payment_terms
+ Termos de pagamento
+
+
+ invoice.signature_user
+ Confirmação: Data / Nome do Consultor / Assinatura
+
+
+ invoice.signature_customer
+ Confirmação: Data / Nome do Cliente / Assinatura
+
+
+ invoice.total_working_time
+ Duração Total
+
+
+ label.order_number
+ Número do pedido
+
+
+ label.invoice_tax_number
+ VAT no. (Imposto Britânico):
+
+
+ label.invoice_bank_account
+ Conta Bancária
+
+
+ label.invoice_salutation
+
+ Senhoras e senhores,
+
+ Agradeço pelo seu pedido e cobro pelos meus serviços:
+
+
+
+
+
+ month.1
+ Janeiro
+
+
+ month.2
+ Fevereiro
+
+
+ month.3
+ Março
+
+
+ month.4
+ Abril
+
+
+ month.5
+ Maio
+
+
+ month.6
+ Junho
+
+
+ month.7
+ Julho
+
+
+ month.8
+ Agosto
+
+
+ month.9
+ Setembro
+
+
+ month.10
+ Outubro
+
+
+ month.11
+ Novembro
+
+
+ month.12
+ Dezembro
+
+
+
+
+ active.entries
+ Você tem %count% registros ativos|Você tem %count% registros ativos
+
+
+ timesheet.all
+ Mostrar todos os registros
+
+
+ recent.activities
+
+ Reinicie a sua última atividade registrada|Reinicie uma de suas %count% últimas atividades
+
+
+
+ recent.activities.format
+ %activity% no %project% para %customer%
+
+
+ timesheet.start
+ Criar novo registro de tempo
+
+
+
+
+ label.pageSize
+ Tamanho do papel
+
+
+ label.entryState
+ Registros
+
+
+ entryState.all
+ Tudo
+
+
+ entryState.running
+ Ativos
+
+
+ entryState.stopped
+ Parado
+
+
+
+
diff --git a/translations/pagerfanta.pt_BR.xliff b/translations/pagerfanta.pt_BR.xliff
new file mode 100644
index 00000000..d3462ef7
--- /dev/null
+++ b/translations/pagerfanta.pt_BR.xliff
@@ -0,0 +1,15 @@
+
+
+
+
+
+ previous
+
+
+
+ next
+
+
+
+
+
diff --git a/translations/sidebar.pt_BR.xliff b/translations/sidebar.pt_BR.xliff
new file mode 100644
index 00000000..77ff8219
--- /dev/null
+++ b/translations/sidebar.pt_BR.xliff
@@ -0,0 +1,24 @@
+
+
+
+
+
+ home.betainfo
+
+
+
+ home.github
+ Kimai - Project website
+
+
+ home.website
+ Homepage
+
+
+
+
diff --git a/translations/validators.pt_BR.xliff b/translations/validators.pt_BR.xliff
new file mode 100644
index 00000000..69c11587
--- /dev/null
+++ b/translations/validators.pt_BR.xliff
@@ -0,0 +1,15 @@
+
+
+
+
+
+ This value is not a valid role.
+ Este valor não é um papel válido.
+
+
+ End date must not be earlier then start date.
+ A data de conclusão não pode ser anterior à data de início.
+
+
+
+
diff --git a/var/docs/translations.md b/var/docs/translations.md
index b2283206..e1d96084 100644
--- a/var/docs/translations.md
+++ b/var/docs/translations.md
@@ -43,3 +43,11 @@ parameters:
locale: en
app_locales: en|de|ru|it|xx
```
+
+## Check for missing translations
+
+When you search for missing keys, please use this command:
+```bash
+bin/console debug:translation --only-missing de
+```
+and replace `de` with your locale.
\ No newline at end of file