about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--app/assets/javascripts/components/containers/mastodon.jsx2
-rw-r--r--app/assets/javascripts/components/locales/index.jsx2
-rw-r--r--app/assets/javascripts/components/locales/pt-br.jsx125
-rw-r--r--app/assets/javascripts/components/locales/pt.jsx191
-rw-r--r--app/helpers/settings_helper.rb1
-rw-r--r--config/application.rb1
-rw-r--r--config/locales/devise.pt-BR.yml61
-rw-r--r--config/locales/devise.pt.yml76
-rw-r--r--config/locales/doorkeeper.pt-BR.yml112
-rw-r--r--config/locales/doorkeeper.pt.yml22
-rw-r--r--config/locales/pt-BR.yml198
-rw-r--r--config/locales/pt.yml168
-rw-r--r--config/locales/simple_form.pt-BR.yml30
-rw-r--r--config/locales/simple_form.pt.yml47
14 files changed, 794 insertions, 242 deletions
diff --git a/app/assets/javascripts/components/containers/mastodon.jsx b/app/assets/javascripts/components/containers/mastodon.jsx
index 08576913e..735e827a3 100644
--- a/app/assets/javascripts/components/containers/mastodon.jsx
+++ b/app/assets/javascripts/components/containers/mastodon.jsx
@@ -57,6 +57,7 @@ import uk from 'react-intl/locale-data/uk';
 import zh from 'react-intl/locale-data/zh';
 import bg from 'react-intl/locale-data/bg';
 import { localeData as zh_hk } from '../locales/zh-hk';
+import { localeData as pt_br } from '../locales/pt-br';
 import getMessagesForLocale from '../locales';
 import { hydrateStore } from '../actions/store';
 import createStream from '../stream';
@@ -79,6 +80,7 @@ addLocaleData([
   ...hu,
   ...ja,
   ...pt,
+  ...pt_br,
   ...nl,
   ...no,
   ...ru,
diff --git a/app/assets/javascripts/components/locales/index.jsx b/app/assets/javascripts/components/locales/index.jsx
index 1163d9109..7abb315da 100644
--- a/app/assets/javascripts/components/locales/index.jsx
+++ b/app/assets/javascripts/components/locales/index.jsx
@@ -7,6 +7,7 @@ import fr from './fr';
 import nl from './nl';
 import no from './no';
 import pt from './pt';
+import pt_br from './pt-br';
 import uk from './uk';
 import fi from './fi';
 import eo from './eo';
@@ -25,6 +26,7 @@ const locales = {
   nl,
   no,
   pt,
+  'pt-BR': pt_br,
   uk,
   fi,
   eo,
diff --git a/app/assets/javascripts/components/locales/pt-br.jsx b/app/assets/javascripts/components/locales/pt-br.jsx
new file mode 100644
index 000000000..724c5f1ce
--- /dev/null
+++ b/app/assets/javascripts/components/locales/pt-br.jsx
@@ -0,0 +1,125 @@
+const pt_br = {
+  "account.block": "Bloquear @{name}",
+  "account.disclaimer": "Essa conta está localizado em outra instância. Os nomes podem ser maiores.",
+  "account.edit_profile": "Editar perfil",
+  "account.follow": "Seguir",
+  "account.followers": "Seguidores",
+  "account.follows_you": "É teu seguidor",
+  "account.follows": "Segue",
+  "account.mention": "Mencionar @{name}",
+  "account.mute": "Silenciar @{name}",
+  "account.posts": "Posts",
+  "account.report": "Denunciar @{name}",
+  "account.requested": "A aguardar aprovação",
+  "account.unblock": "Não bloquear @{name}",
+  "account.unfollow": "Deixar de seguir",
+  "account.unmute": "Não silenciar @{name}",
+  "boost_modal.combo": "Pode clicar {combo} para não voltar a ver",
+  "column_back_button.label": "Voltar",
+  "column.blocks": "Utilizadores Bloqueados",
+  "column.community": "Local",
+  "column.favourites": "Favoritos",
+  "column.follow_requests": "Seguidores Pendentes",
+  "column.home": "Home",
+  "column.mutes": "Utilizadores silenciados",
+  "column.notifications": "Notificações",
+  "column.public": "Global",
+  "compose_form.placeholder": "Em que estás a pensar?",
+  "compose_form.privacy_disclaimer": "O teu conteúdo privado vai ser partilhado com os utilizadores do {domains}. Confias {domainsCount, plural, one {neste servidor} other {nestes servidores}}? A privacidade só funciona em instâncias do Mastodon. Se {domains} {domainsCount, plural, one {não é uma instância} other {não são instâncias}}, não existem indicadores da privacidade da tua partilha, e podem ser partilhados com outros.",
+  "compose_form.publish": "Publicar",
+  "compose_form.sensitive": "Marcar media como conteúdo sensível",
+  "compose_form.spoiler_placeholder": "Aviso de conteúdo",
+  "compose_form.spoiler": "Esconder texto com aviso",
+  "emoji_button.label": "Inserir Emoji",
+  "empty_column.community": "Ainda não existem conteúdo local para mostrar!",
+  "empty_column.hashtag": "Ainda não existe qualquer conteúdo com essa hashtag",
+  "empty_column.home.public_timeline": "global",
+  "empty_column.home": "Ainda não segues qualquer utilizador. Visita {public} ou utiliza a pesquisa para procurar outros utilizadores.",
+  "empty_column.notifications": "Não tens notificações. Interage com outros utilizadores para iniciar uma conversa.",
+  "empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para ver aqui os conteúdos públicos.",
+  "follow_request.authorize": "Autorizar",
+  "follow_request.reject": "Rejeitar",
+  "getting_started.apps": "Existem várias aplicações disponíveis",
+  "getting_started.heading": "Primeiros passos",
+  "getting_started.open_source_notice": "Mastodon é software de fonte aberta. Podes contribuir ou repostar problemas no GitHub do projecto: {github}. {apps}.",
+  "home.column_settings.advanced": "Avançado",
+  "home.column_settings.basic": "Básico",
+  "home.column_settings.filter_regex": "Filtrar com uma expressão regular",
+  "home.column_settings.show_reblogs": "Mostrar as partilhas",
+  "home.column_settings.show_replies": "Mostrar as respostas",
+  "home.settings": "Parâmetros da listagem Home",
+  "lightbox.close": "Fechar",
+  "loading_indicator.label": "Carregando...",
+  "media_gallery.toggle_visible": "Esconder/Mostrar",
+  "missing_indicator.label": "Não encontrado",
+  "navigation_bar.blocks": "Utilizadores bloqueados",
+  "navigation_bar.community_timeline": "Local",
+  "navigation_bar.edit_profile": "Editar perfil",
+  "navigation_bar.favourites": "Favoritos",
+  "navigation_bar.follow_requests": "Seguidores pendentes",
+  "navigation_bar.info": "Mais informações",
+  "navigation_bar.logout": "Sair",
+  "navigation_bar.mutes": "Utilizadores silenciados",
+  "navigation_bar.preferences": "Preferências",
+  "navigation_bar.public_timeline": "Global",
+  "notification.favourite": "{name} adicionou o teu post aos favoritos",
+  "notification.follow": "{name} seguiu-te",
+  "notification.mention": "{name} mencionou-te",
+  "notification.reblog": "{name} partilhou o teu post",
+  "notifications.clear_confirmation": "Queres mesmo limpar todas as notificações?",
+  "notifications.clear": "Limpar notificações",
+  "notifications.column_settings.alert": "Notificações no computador",
+  "notifications.column_settings.favourite": "Favoritos:",
+  "notifications.column_settings.follow": "Novos seguidores:",
+  "notifications.column_settings.mention": "Menções:",
+  "notifications.column_settings.reblog": "Partilhas:",
+  "notifications.column_settings.show": "Mostrar nas colunas",
+  "notifications.column_settings.sound": "Reproduzir som",
+  "notifications.settings": "Parâmetros da listagem de Notificações",
+  "privacy.change": "Ajustar a privacidade da mensagem",
+  "privacy.direct.long": "Apenas para utilizadores mencionados",
+  "privacy.direct.short": "Directo",
+  "privacy.private.long": "Apenas para os seguidores",
+  "privacy.private.short": "Privado",
+  "privacy.public.long": "Publicar em todos os feeds",
+  "privacy.public.short": "Público",
+  "privacy.unlisted.long": "Não publicar nos feeds públicos",
+  "privacy.unlisted.short": "Não listar",
+  "reply_indicator.cancel": "Cancelar",
+  "report.heading": "Nova denúncia",
+  "report.placeholder": "Comentários adicionais",
+  "report.submit": "Enviar",
+  "report.target": "Denunciar",
+  "search_results.total": "{count} {count, plural, one {resultado} other {resultados}}",
+  "search.placeholder": "Pesquisar",
+  "search.status_by": "Post de {name}",
+  "status.delete": "Eliminar",
+  "status.favourite": "Adicionar aos favoritos",
+  "status.load_more": "Carregar mais",
+  "status.media_hidden": "Media escondida",
+  "status.mention": "Mencionar @{name}",
+  "status.open": "Expandir",
+  "status.reblog": "Partilhar",
+  "status.reblogged_by": "{name} partilhou",
+  "status.reply": "Responder",
+  "status.report": "Denúnciar @{name}",
+  "status.sensitive_toggle": "Clique para ver",
+  "status.sensitive_warning": "Conteúdo sensível",
+  "status.show_less": "Mostrar menos",
+  "status.show_more": "Mostrar mais",
+  "tabs_bar.compose": "Criar",
+  "tabs_bar.federated_timeline": "Global",
+  "tabs_bar.home": "Home",
+  "tabs_bar.local_timeline": "Local",
+  "tabs_bar.notifications": "Notificações",
+  "upload_area.title": "Arraste e solte para enviar",
+  "upload_button.label": "Adicionar media",
+  "upload_form.undo": "Anular",
+  "upload_progress.label": "A gravar...",
+  "video_player.toggle_sound": "Ligar/Desligar som",
+  "video_player.toggle_visible": "Ligar/Desligar vídeo",
+  "video_player.expand": "Expandir vídeo",
+  "video_player.video_error": "Não é possível ver o vídeo",
+};
+
+export default pt_br;
diff --git a/app/assets/javascripts/components/locales/pt.jsx b/app/assets/javascripts/components/locales/pt.jsx
index cd345a585..88729c94c 100644
--- a/app/assets/javascripts/components/locales/pt.jsx
+++ b/app/assets/javascripts/components/locales/pt.jsx
@@ -1,128 +1,125 @@
 const pt = {
-  "column_back_button.label": "Voltar",
-  "lightbox.close": "Fechar",
-  "loading_indicator.label": "Carregando...",
-  "status.mention": "Mencionar @{name}",
-  "status.delete": "Eliminar",
-  "status.reply": "Responder",
-  "status.reblog": "Partilhar",
-  "status.favourite": "Adicionar aos favoritos",
-  "status.reblogged_by": "{name} partilhou",
-  "status.sensitive_warning": "Conteúdo sensível",
-  "status.sensitive_toggle": "Clique para ver",
-  "status.show_more": "Mostrar mais",
-  "status.show_less": "Mostrar menos",
-  "status.open": "Expandir",
-  "status.report": "Reportar @{name}",
-  "status.load_more": "Carregar mais",
-  "status.media_hidden": "Media escondida",
-  "video_player.toggle_sound": "Ligar/Desligar som",
-  "video_player.toggle_visible": "Ligar/Desligar vídeo",
-  "account.mention": "Mencionar @{name}",
-  "account.edit_profile": "Editar perfil",
-  "account.unblock": "Não bloquear @{name}",
-  "account.unfollow": "Não seguir",
   "account.block": "Bloquear @{name}",
-  "account.mute": "Mute",
-  "account.unmute": "Remover Mute",
+  "account.disclaimer": "Essa conta está localizado em outra instância. Os nomes podem ser maiores.",
+  "account.edit_profile": "Editar perfil",
   "account.follow": "Seguir",
-  "account.posts": "Posts",
-  "account.follows": "Segue",
   "account.followers": "Seguidores",
   "account.follows_you": "É teu seguidor",
+  "account.follows": "Segue",
+  "account.mention": "Mencionar @{name}",
+  "account.mute": "Silenciar @{name}",
+  "account.posts": "Posts",
+  "account.report": "Denunciar @{name}",
   "account.requested": "A aguardar aprovação",
-  "account.report": "Denunciar",
-  "account.disclaimer": "Essa conta está localizado em outra instância. Os nomes podem ser maiores.",
-  "getting_started.heading": "Primeiros passos",
-  "getting_started.about_addressing": "Podes seguir pessoas se sabes o nome de usuário deles e o domínio em que estão colocando um endereço similar a e-mail no campo no topo da barra lateral.",
-  "getting_started.about_shortcuts": "Se o usuário alvo está no mesmo domínio, só o nome funcionará. A mesma regra se aplica a mencionar pessoas nas postagens.",
-  "getting_started.about_developer": "Pode seguir o developer deste projecto em Gargron@mastodon.social",
-  "getting_started.open_source_notice": "Mastodon é software de fonte aberta. Podes contribuir ou repostar problemas no GitHub do projecto: {github}. {apps}.",
-  "column.home": "Home",
-  "column.community": "Local",
-  "column.public": "Global",
-  "column.notifications": "Notificações",
+  "account.unblock": "Não bloquear @{name}",
+  "account.unfollow": "Deixar de seguir",
+  "account.unmute": "Não silenciar @{name}",
+  "boost_modal.combo": "Pode clicar {combo} para não voltar a ver",
+  "column_back_button.label": "Voltar",
   "column.blocks": "Utilizadores Bloqueados",
+  "column.community": "Local",
   "column.favourites": "Favoritos",
   "column.follow_requests": "Seguidores Pendentes",
-  "empty_column.notifications": "Não tens notificações. Interage com outros utilizadores para iniciar uma conversa.",
-  "empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para ver aqui os conteúdos públicos.",
-  "empty_column.home": "Ainda não segues qualquer utilizador. Visita {public} ou utiliza a pesquisa para procurar outros utilizadores.",
-  "empty_column.home.public_timeline": "global",
-  "empty_column.community": "Ainda não existem conteúdo local para mostrar!",
-  "empty_column.hashtag": "Não existe qualquer conteúdo com essa hashtag",
-  "tabs_bar.compose": "Criar",
-  "tabs_bar.home": "Home",
-  "tabs_bar.mentions": "Menções",
-  "tabs_bar.public": "Público",
-  "tabs_bar.notifications": "Notificações",
-  "tabs_bar.local_timeline": "Local",
-  "tabs_bar.federated_timeline": "Global",
+  "column.home": "Home",
+  "column.mutes": "Utilizadores silenciados",
+  "column.notifications": "Notificações",
+  "column.public": "Global",
   "compose_form.placeholder": "Em que estás a pensar?",
+  "compose_form.privacy_disclaimer": "O teu conteúdo privado vai ser partilhado com os utilizadores do {domains}. Confias {domainsCount, plural, one {neste servidor} other {nestes servidores}}? A privacidade só funciona em instâncias do Mastodon. Se {domains} {domainsCount, plural, one {não é uma instância} other {não são instâncias}}, não existem indicadores da privacidade da tua partilha, e podem ser partilhados com outros.",
   "compose_form.publish": "Publicar",
   "compose_form.sensitive": "Marcar media como conteúdo sensível",
+  "compose_form.spoiler_placeholder": "Aviso de conteúdo",
   "compose_form.spoiler": "Esconder texto com aviso",
-  "compose_form.spoiler_placeholder": "Aviso",
-  "compose_form.private": "Tornar privado",
-  "compose_form.privacy_disclaimer": "O teu conteúdo privado vai ser partilhado com os utilizadores do {domains}. Confias {domainsCount, plural, one {neste servidor} other {nestes servidores}}? A privacidade só funciona em instâncias do Mastodon. Se {domains} {domainsCount, plural, one {não é uma instância} other {não são instâncias}}, não existem indicadores da privacidade da tua partilha, e podem ser partilhados com outros.",
-  "compose_form.unlisted": "Não mostrar na listagem pública",
   "emoji_button.label": "Inserir Emoji",
-  "navigation_bar.edit_profile": "Editar perfil",
-  "navigation_bar.preferences": "Preferências",
-  "navigation_bar.community_timeline": "Local",
-  "navigation_bar.public_timeline": "Global",
+  "empty_column.community": "Ainda não existem conteúdo local para mostrar!",
+  "empty_column.hashtag": "Ainda não existe qualquer conteúdo com essa hashtag",
+  "empty_column.home.public_timeline": "global",
+  "empty_column.home": "Ainda não segues qualquer utilizador. Visita {public} ou utiliza a pesquisa para procurar outros utilizadores.",
+  "empty_column.notifications": "Não tens notificações. Interage com outros utilizadores para iniciar uma conversa.",
+  "empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para ver aqui os conteúdos públicos.",
+  "follow_request.authorize": "Autorizar",
+  "follow_request.reject": "Rejeitar",
+  "getting_started.apps": "Existem várias aplicações disponíveis",
+  "getting_started.heading": "Primeiros passos",
+  "getting_started.open_source_notice": "Mastodon é software de fonte aberta. Podes contribuir ou repostar problemas no GitHub do projecto: {github}. {apps}.",
+  "home.column_settings.advanced": "Avançado",
+  "home.column_settings.basic": "Básico",
+  "home.column_settings.filter_regex": "Filtrar com uma expressão regular",
+  "home.column_settings.show_reblogs": "Mostrar as partilhas",
+  "home.column_settings.show_replies": "Mostrar as respostas",
+  "home.settings": "Parâmetros da listagem Home",
+  "lightbox.close": "Fechar",
+  "loading_indicator.label": "Carregando...",
+  "media_gallery.toggle_visible": "Esconder/Mostrar",
+  "missing_indicator.label": "Não encontrado",
   "navigation_bar.blocks": "Utilizadores bloqueados",
+  "navigation_bar.community_timeline": "Local",
+  "navigation_bar.edit_profile": "Editar perfil",
   "navigation_bar.favourites": "Favoritos",
+  "navigation_bar.follow_requests": "Seguidores pendentes",
   "navigation_bar.info": "Mais informações",
   "navigation_bar.logout": "Sair",
-  "navigation_bar.follow_requests": "Seguidores pendentes",
-  "reply_indicator.cancel": "Cancelar",
-  "search.placeholder": "Pesquisar",
-  "search.account": "Conta",
-  "search.hashtag": "Hashtag",
-  "search_results.total": "{count} {count, plural, one {resultado} other {resultados}}",
-  "search.status_by": "Post de {name}",
-  "upload_button.label": "Adicionar media",
-  "upload_form.undo": "Anular",
-  "upload_progress.label": "A gravar…",
-  "upload_area.title": "Arraste e solte para enviar",
-  "notification.follow": "{name} seguiu-te",
+  "navigation_bar.mutes": "Utilizadores silenciados",
+  "navigation_bar.preferences": "Preferências",
+  "navigation_bar.public_timeline": "Global",
   "notification.favourite": "{name} adicionou o teu post aos favoritos",
-  "notification.reblog": "{name} partilhou o teu post",
+  "notification.follow": "{name} seguiu-te",
   "notification.mention": "{name} mencionou-te",
+  "notification.reblog": "{name} partilhou o teu post",
+  "notifications.clear_confirmation": "Queres mesmo limpar todas as notificações?",
+  "notifications.clear": "Limpar notificações",
   "notifications.column_settings.alert": "Notificações no computador",
-  "notifications.column_settings.show": "Mostrar nas colunas",
-  "notifications.column_settings.sound": "Reproduzir som",
-  "notifications.column_settings.follow": "Novos seguidores:",
   "notifications.column_settings.favourite": "Favoritos:",
+  "notifications.column_settings.follow": "Novos seguidores:",
   "notifications.column_settings.mention": "Menções:",
   "notifications.column_settings.reblog": "Partilhas:",
-  "notifications.clear": "Limpar notificações",
-  "notifications.clear_confirmation": "Queres mesmo limpar todas as notificações?",
-  "notifications.settings": "Parâmetros da lista de Notificações",
-  "privacy.public.short": "Público",
+  "notifications.column_settings.show": "Mostrar nas colunas",
+  "notifications.column_settings.sound": "Reproduzir som",
+  "notifications.settings": "Parâmetros da listagem de Notificações",
+  "privacy.change": "Ajustar a privacidade da mensagem",
+  "privacy.direct.long": "Apenas para utilizadores mencionados",
+  "privacy.direct.short": "Directo",
+  "privacy.private.long": "Apenas para os seguidores",
+  "privacy.private.short": "Privado",
   "privacy.public.long": "Publicar em todos os feeds",
-  "privacy.unlisted.short": "Não listar",
+  "privacy.public.short": "Público",
   "privacy.unlisted.long": "Não publicar nos feeds públicos",
-  "privacy.private.short": "Privado",
-  "privacy.private.long": "Apenas para os seguidores",
-  "privacy.direct.short": "Directo",
-  "privacy.direct.long": "Apenas para utilizadores mencionados",
-  "privacy.change": "Ajustar a privacidade da mensagem",
-  "media_gallery.toggle_visible": "Modificar a visibilidade",
-  "missing_indicator.label": "Não encontrado",
-  "follow_request.authorize": "Autorizar",
-  "follow_request.reject": "Rejeitar",
-  "home.settings": "Parâmetros da coluna Home",
-  "home.column_settings.basic": "Básico",
-  "home.column_settings.show_reblogs": "Mostrar as partilhas",
-  "home.column_settings.show_replies": "Mostrar as respostas",
-  "home.column_settings.advanced": "Avançadas",
-  "home.column_settings.filter_regex": "Filtrar com uma expressão regular",
-  "report.heading": "Nova denuncia",
+  "privacy.unlisted.short": "Não listar",
+  "reply_indicator.cancel": "Cancelar",
+  "report.heading": "Nova denúncia",
   "report.placeholder": "Comentários adicionais",
   "report.submit": "Enviar",
-  "report.target": "Denunciar"
+  "report.target": "Denunciar",
+  "search_results.total": "{count} {count, plural, one {resultado} other {resultados}}",
+  "search.placeholder": "Pesquisar",
+  "search.status_by": "Post de {name}",
+  "status.delete": "Eliminar",
+  "status.favourite": "Adicionar aos favoritos",
+  "status.load_more": "Carregar mais",
+  "status.media_hidden": "Media escondida",
+  "status.mention": "Mencionar @{name}",
+  "status.open": "Expandir",
+  "status.reblog": "Partilhar",
+  "status.reblogged_by": "{name} partilhou",
+  "status.reply": "Responder",
+  "status.report": "Denúnciar @{name}",
+  "status.sensitive_toggle": "Clique para ver",
+  "status.sensitive_warning": "Conteúdo sensível",
+  "status.show_less": "Mostrar menos",
+  "status.show_more": "Mostrar mais",
+  "tabs_bar.compose": "Criar",
+  "tabs_bar.federated_timeline": "Global",
+  "tabs_bar.home": "Home",
+  "tabs_bar.local_timeline": "Local",
+  "tabs_bar.notifications": "Notificações",
+  "upload_area.title": "Arraste e solte para enviar",
+  "upload_button.label": "Adicionar media",
+  "upload_form.undo": "Anular",
+  "upload_progress.label": "A gravar...",
+  "video_player.toggle_sound": "Ligar/Desligar som",
+  "video_player.toggle_visible": "Ligar/Desligar vídeo",
+  "video_player.expand": "Expandir vídeo",
+  "video_player.video_error": "Não é possível ver o vídeo",
 };
 
 export default pt;
diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb
index ebbea77e9..01900b87f 100644
--- a/app/helpers/settings_helper.rb
+++ b/app/helpers/settings_helper.rb
@@ -13,6 +13,7 @@ module SettingsHelper
     nl: 'Nederlands',
     no: 'Norsk',
     pt: 'Português',
+    'pt-BR': 'Português do Brasil',
     fi: 'Suomi',
     ru: 'Русский',
     uk: 'Українська',
diff --git a/config/application.rb b/config/application.rb
index 58fb69b62..396ac33f1 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -39,6 +39,7 @@ module Mastodon
       :nl,
       :no,
       :pt,
+      :'pt-BR',
       :ru,
       :uk,
       'zh-CN',
diff --git a/config/locales/devise.pt-BR.yml b/config/locales/devise.pt-BR.yml
new file mode 100644
index 000000000..c647fabbd
--- /dev/null
+++ b/config/locales/devise.pt-BR.yml
@@ -0,0 +1,61 @@
+---
+pt-BR:
+  devise:
+    confirmations:
+      confirmed: O seu endereço de email foi confirmado.
+      send_instructions: Você irá receber um email com instruções em como confirmar o seu endereço de email dentro de alguns minutos.
+      send_paranoid_instructions: Se o seu endereço de email já existir na nossa base de dados, irá receber um email com instruções em como confirmá-lo dentro de alguns minutos.
+    failure:
+      already_authenticated: A sua sessão já está aberta.
+      inactive: A sua contra ainda não está ativada.
+      invalid: "%{authentication_keys} ou password inválidos."
+      last_attempt: Tem mais uma tentativa antes de a sua conta ser protegida.
+      locked: A sua conta está protegida
+      not_found_in_database: "%{authentication_keys} ou password inválidos."
+      timeout: A sua sessão expirou. Por favore entre de novo para continuar.
+      unauthenticated: Você precsa de entrar ou registar-se antes de continuar.
+      unconfirmed: Você tem de confirmar o seu endereço de email antes de continuar.
+    mailer:
+      confirmation_instructions:
+        subject: 'Mastodon: Instruções de confirmação'
+      password_change:
+        subject: 'Mastodon: Password nova'
+      reset_password_instructions:
+        subject: 'Mastodon: Instruções para editar a password'
+      unlock_instructions:
+        subject: 'Mastodon: Instruções para desproteger a sua conta'
+    omniauth_callbacks:
+      failure: Could not authenticate you from %{kind} because "%{reason}".
+      success: Successfully authenticated from %{kind} account.
+    passwords:
+      no_token: Você não pode aceder a esta página sem ter vindo de um email para mudar a password. Se este for o case, por favor faça questão de verificar que usou o URL no email.
+      send_instructions: Irá receber um email com instruções em como mudar a sua password dentro de algns minutos.
+      send_paranoid_instructions: Se  seu endereço de email existe na nossa base de dados, irá receber um link para recuperar a sua password dentro de alguns minutos.
+      updated: A sua password foi alterada. A sua sessão está aberta.
+      updated_not_active: A sua password foi alterada.
+    registrations:
+      destroyed: Adeus! A sua conta foi cancelada. Esperamos vê-lo em breve.
+      signed_up: Bem vindo! A sua conta foi registada com sucesso.
+      signed_up_but_inactive: A sua conta foi registada. No entanto, não abrimos a sua sessão porque a sua conta ainda não foi ativada.
+      signed_up_but_locked: A sua conta foi registada. No entanto, não abrimos a sua sessão porque a sua conta está protegida.
+      signed_up_but_unconfirmed: Uma mensagem com um link de confirmação foi enviada para o seu email. Por favor siga o link para ativar a sua conta.
+      update_needs_confirmation: Você mudou o seu endereço de email ou password, mas é necessário confirmar a mudança. Por favor siga o link que foi enviado para o seu novo endereço de email.
+      updated: A sua conta foi alterada com sucesso.
+    sessions:
+      already_signed_out: Sessão fechada.
+      signed_in: Sessão iniciada.
+      signed_out: Sessão fechada.
+    unlocks:
+      send_instructions: Irá receber um email com instruções para desproteger a sua conta dentro de alguns minutos.
+      send_paranoid_instructions: Se a sua conta existe, irá receber um email com instruções a detalhar como a desproteger dentro de alguns minutos.
+      unlocked: A sua conta foi desprotegida. Por favor inicie sessão para continuar.
+  errors:
+    messages:
+      already_confirmed: já foi confirmado, por favor tente iniciar sessão
+      confirmation_period_expired: tem de ser confirmado dentro de %{period}, por favor tente outra vez
+      expired: expirou, por favor tente outra vez
+      not_found: não encontrado
+      not_locked: não está protegido
+      not_saved:
+        one: '1 erro impediu este %{resource} de ser guardado:'
+        other: "%{count} erros impediram este %{resource} de ser guardado:"
diff --git a/config/locales/devise.pt.yml b/config/locales/devise.pt.yml
index 8c049ce8b..dc87cefdd 100644
--- a/config/locales/devise.pt.yml
+++ b/config/locales/devise.pt.yml
@@ -2,60 +2,60 @@
 pt:
   devise:
     confirmations:
-      confirmed: O seu endereço de email foi confirmado.
-      send_instructions: Você irá receber um email com instruções em como confirmar o seu endereço de email dentro de alguns minutos.
-      send_paranoid_instructions: Se o seu endereço de email já existir na nossa base de dados, irá receber um email com instruções em como confirmá-lo dentro de alguns minutos.
+      confirmed: O teu endereço de email foi confirmado.
+      send_instructions: Vais receber um email com as instruções para confirmar o teu endereço de email dentro de alguns minutos.
+      send_paranoid_instructions: Se o teu endereço de email já existir na nossa base de dados, vais receber um email com as instruções de confirmação dentro de alguns minutos.
     failure:
-      already_authenticated: A sua sessão já está aberta.
-      inactive: A sua contra ainda não está ativada.
-      invalid: "%{authentication_keys} ou password inválidos."
-      last_attempt: Tem mais uma tentativa antes de a sua conta ser protegida.
-      locked: A sua conta está protegida
-      not_found_in_database: "%{authentication_keys} ou password inválidos."
-      timeout: A sua sessão expirou. Por favore entre de novo para continuar.
-      unauthenticated: Você precsa de entrar ou registar-se antes de continuar.
-      unconfirmed: Você tem de confirmar o seu endereço de email antes de continuar.
+      already_authenticated: A tua sessão já está aberta.
+      inactive: A tua conta ainda não está ativada.
+      invalid: "%{authentication_keys} ou palavra-passe não válida."
+      last_attempt: Tens mais uma tentativa antes de a tua conta ficar bloqueada.
+      locked: A tua conta está bloqueada
+      not_found_in_database: "%{authentication_keys} ou palavra-passe não válida."
+      timeout: A tua sessão expirou. Por favor, entra de novo para continuares.
+      unauthenticated: Precisas de entrar na tua conta ou registares-te antes de continuar.
+      unconfirmed: Tens de confirmar o teu endereço de email antes de continuar.
     mailer:
       confirmation_instructions:
-        subject: 'Mastodon: Instruções de confirmação'
+        subject: 'Mastodon: Instruções de confirmação %{instance}'
       password_change:
-        subject: 'Mastodon: Password nova'
+        subject: 'Mastodon: Nova palavra-passe'
       reset_password_instructions:
-        subject: 'Mastodon: Instruções para editar a password'
+        subject: 'Mastodon: Instruções para editar a palavra-passe'
       unlock_instructions:
-        subject: 'Mastodon: Instruções para desproteger a sua conta'
+        subject: 'Mastodon: Instruções para desbloquear a tua conta'
     omniauth_callbacks:
-      failure: Could not authenticate you from %{kind} because "%{reason}".
-      success: Successfully authenticated from %{kind} account.
+      failure: Não foi possível autenticar %{kind} porque "%{reason}".
+      success: Autenticado com sucesso na conta %{kind}.
     passwords:
-      no_token: Você não pode aceder a esta página sem ter vindo de um email para mudar a password. Se este for o case, por favor faça questão de verificar que usou o URL no email.
-      send_instructions: Irá receber um email com instruções em como mudar a sua password dentro de algns minutos.
-      send_paranoid_instructions: Se  seu endereço de email existe na nossa base de dados, irá receber um link para recuperar a sua password dentro de alguns minutos.
-      updated: A sua password foi alterada. A sua sessão está aberta.
-      updated_not_active: A sua password foi alterada.
+      no_token: Não pode aceder a esta página se não vier através do link enviado por email para alteração da sua palavra-passe. Se usaste esse link para chegar aqui, por favor verifica que o endereço URL actual é o mesmo do que foi enviado no email.
+      send_instructions: Vais receber um email com instruções para alterar a palavra-passe dentro de algns minutos.
+      send_paranoid_instructions: Se o teu endereço de email existe na nossa base de dados, vais receber um link para recuperar a palavra-passe dentro de alguns minutos.
+      updated: A tua palavra-passe foi alterada. Estás agora autenticado na tua conta.
+      updated_not_active: A tua palavra-passe foi alterada.
     registrations:
-      destroyed: Adeus! A sua conta foi cancelada. Esperamos vê-lo em breve.
-      signed_up: Bem vindo! A sua conta foi registada com sucesso.
-      signed_up_but_inactive: A sua conta foi registada. No entanto, não abrimos a sua sessão porque a sua conta ainda não foi ativada.
-      signed_up_but_locked: A sua conta foi registada. No entanto, não abrimos a sua sessão porque a sua conta está protegida.
-      signed_up_but_unconfirmed: Uma mensagem com um link de confirmação foi enviada para o seu email. Por favor siga o link para ativar a sua conta.
-      update_needs_confirmation: Você mudou o seu endereço de email ou password, mas é necessário confirmar a mudança. Por favor siga o link que foi enviado para o seu novo endereço de email.
-      updated: A sua conta foi alterada com sucesso.
+      destroyed: Adeus! A tua conta foi cancelada. Esperamos ver-te em breve.
+      signed_up: Bem-vindo! A tua conta foi registada com sucesso.
+      signed_up_but_inactive: A tua conta foi registada. No entanto ainda não está activa.
+      signed_up_but_locked: A tua conta foi registada. No entanto está bloqueada.
+      signed_up_but_unconfirmed: Uma mensagem com um link de confirmação foi enviada para o teu email. Por favor segue esse link para activar a tua conta.
+      update_needs_confirmation: Alteraste o teu endereço de email ou palavra-passe, mas é necessário confirmar essa alteração. Por favor vai ao teu email e segue link que te enviámos.
+      updated: A tua conta foi actualizada com sucesso.
     sessions:
-      already_signed_out: Sessão fechada.
+      already_signed_out: Sessão encerrada.
       signed_in: Sessão iniciada.
-      signed_out: Sessão fechada.
+      signed_out: Sessão encerrada.
     unlocks:
-      send_instructions: Irá receber um email com instruções para desproteger a sua conta dentro de alguns minutos.
-      send_paranoid_instructions: Se a sua conta existe, irá receber um email com instruções a detalhar como a desproteger dentro de alguns minutos.
-      unlocked: A sua conta foi desprotegida. Por favor inicie sessão para continuar.
+      send_instructions: Vais receber um email com instruções para desbloquear a tua conta dentro de alguns minutos.
+      send_paranoid_instructions: Se a tua conta existe, vais receber um email com instruções a detalhar como a desbloquear dentro de alguns minutos.
+      unlocked: A sua conta foi desbloqueada. Por favor inica uma nova sessão para continuar.
   errors:
     messages:
-      already_confirmed: já foi confirmado, por favor tente iniciar sessão
-      confirmation_period_expired: tem de ser confirmado dentro de %{period}, por favor tente outra vez
+      already_confirmed: já confirmado, por favor tente iniciar sessão
+      confirmation_period_expired: tem de ser confirmado durante %{period}, por favor tenta outra vez
       expired: expirou, por favor tente outra vez
       not_found: não encontrado
-      not_locked: não está protegido
+      not_locked: não estava bloqueada
       not_saved:
         one: '1 erro impediu este %{resource} de ser guardado:'
         other: "%{count} erros impediram este %{resource} de ser guardado:"
diff --git a/config/locales/doorkeeper.pt-BR.yml b/config/locales/doorkeeper.pt-BR.yml
new file mode 100644
index 000000000..85ea3bfcc
--- /dev/null
+++ b/config/locales/doorkeeper.pt-BR.yml
@@ -0,0 +1,112 @@
+---
+pt-BR:
+  activerecord:
+    attributes:
+      doorkeeper/application:
+        name: Nome
+        redirect_uri: Redirect URI
+    errors:
+      models:
+        doorkeeper/application:
+          attributes:
+            redirect_uri:
+              fragment_present: não pode conter um fragmento.
+              invalid_uri: tem de ser um URI válido.
+              relative_uri: tem de ser um URI absoluto.
+              secured_uri: tem de ser um HTTPS/SSL URI.
+  doorkeeper:
+    applications:
+      buttons:
+        authorize: Autorizar
+        cancel: Cancelar
+        destroy: Destruir
+        edit: Editar
+        submit: Submeter
+      confirmations:
+        destroy: Tem a certeza?
+      edit:
+        title: Editar aplicação
+      form:
+        error: Oops! Verifique que o formulário não tem erros
+      help:
+        native_redirect_uri: Use %{native_redirect_uri} para testes locais
+        redirect_uri: Utilize uma linha por URI
+        scopes: Separate scopes with spaces. Leave blank to use the default scopes.
+      index:
+        callback_url: Callback URL
+        name: Nome
+        new: Nova Aplicação
+        title: As suas aplicações
+      new:
+        title: Nova aplicação
+      show:
+        actions: Ações
+        application_id: Id de Aplicação
+        callback_urls: Callback urls
+        scopes: Scopes
+        secret: Segredo
+        title: 'Aplicação: %{name}'
+    authorizations:
+      buttons:
+        authorize: Autorize
+        deny: Não autorize
+      error:
+        title: Ocorreu um erro
+      new:
+        able_to: Vai poder
+        prompt: Aplicação %{client_name} requisita acesso à sua conta
+        title: Autorização é necessária
+      show:
+        title: Código de autorização
+    authorized_applications:
+      buttons:
+        revoke: Revogar
+      confirmations:
+        revoke: Tem a certeza?
+      index:
+        application: Aplicação
+        created_at: Criada em
+        date_format: "%Y-%m-%d %H:%M:%S"
+        title: As suas aplicações autorizadas
+    errors:
+      messages:
+        access_denied: The resource owner or authorization server denied the request.
+        credential_flow_not_configured: Resource Owner Password Credentials flow failed due to Doorkeeper.configure.resource_owner_from_credentials being unconfigured.
+        invalid_client: Client authentication failed due to unknown client, no client authentication included, or unsupported authentication method.
+        invalid_grant: The provided authorization grant is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.
+        invalid_redirect_uri: The redirect uri included is not valid.
+        invalid_request: The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed.
+        invalid_resource_owner: The provided resource owner credentials are not valid, or resource owner cannot be found
+        invalid_scope: The requested scope is invalid, unknown, or malformed.
+        invalid_token:
+          expired: O token de acesso expirou
+          revoked: O token de acesso foi revogado
+          unknown: O token de acesso é inválido
+        resource_owner_authenticator_not_configured: Resource Owner find failed due to Doorkeeper.configure.resource_owner_authenticator being unconfiged.
+        server_error: The authorization server encountered an unexpected condition which prevented it from fulfilling the request.
+        temporarily_unavailable: The authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server.
+        unauthorized_client: The client is not authorized to perform this request using this method.
+        unsupported_grant_type: The authorization grant type is not supported by the authorization server.
+        unsupported_response_type: The authorization server does not support this response type.
+    flash:
+      applications:
+        create:
+          notice: Aplicação criada.
+        destroy:
+          notice: Aplicação eliminada.
+        update:
+          notice: Aplicação alterada.
+      authorized_applications:
+        destroy:
+          notice: Aplicação revogada.
+    layouts:
+      admin:
+        nav:
+          applications: Aplicações
+          oauth2_provider: OAuth2 Provider
+      application:
+        title: Autorização OAuth necessária
+    scopes:
+      follow: siga, bloqueie, desbloqueie, e deixe de seguir contas
+      read: tenha acesso aos dados da sua conta
+      write: públique por si
diff --git a/config/locales/doorkeeper.pt.yml b/config/locales/doorkeeper.pt.yml
index 2709856e8..87e01ba94 100644
--- a/config/locales/doorkeeper.pt.yml
+++ b/config/locales/doorkeeper.pt.yml
@@ -23,20 +23,20 @@ pt:
         edit: Editar
         submit: Submeter
       confirmations:
-        destroy: Tem a certeza?
+        destroy: Tens a certeza?
       edit:
         title: Editar aplicação
       form:
-        error: Oops! Verifique que o formulário não tem erros
+        error: Oops! Verifica que o formulário não tem erros
       help:
-        native_redirect_uri: Use %{native_redirect_uri} para testes locais
-        redirect_uri: Utilize uma linha por URI
+        native_redirect_uri: Usa %{native_redirect_uri} para testes locais
+        redirect_uri: Utiliza uma linha por URI
         scopes: Separate scopes with spaces. Leave blank to use the default scopes.
       index:
         callback_url: Callback URL
         name: Nome
         new: Nova Aplicação
-        title: As suas aplicações
+        title: As tuas aplicações
       new:
         title: Nova aplicação
       show:
@@ -54,7 +54,7 @@ pt:
         title: Ocorreu um erro
       new:
         able_to: Vai poder
-        prompt: Aplicação %{client_name} requisita acesso à sua conta
+        prompt: Aplicação %{client_name} pede acesso à tua conta
         title: Autorização é necessária
       show:
         title: Código de autorização
@@ -62,12 +62,12 @@ pt:
       buttons:
         revoke: Revogar
       confirmations:
-        revoke: Tem a certeza?
+        revoke: Tens a certeza?
       index:
         application: Aplicação
         created_at: Criada em
         date_format: "%Y-%m-%d %H:%M:%S"
-        title: As suas aplicações autorizadas
+        title: As tuas aplicações autorizadas
     errors:
       messages:
         access_denied: The resource owner or authorization server denied the request.
@@ -107,6 +107,6 @@ pt:
       application:
         title: Autorização OAuth necessária
     scopes:
-      follow: siga, bloqueie, desbloqueie, e deixe de seguir contas
-      read: tenha acesso aos dados da sua conta
-      write: públique por si
\ No newline at end of file
+      follow: siga, bloqueie, desbloqueie, e deixa de seguir contas
+      read: tenha acesso aos dados da tua conta
+      write: públique por ti
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
new file mode 100644
index 000000000..269a1a99b
--- /dev/null
+++ b/config/locales/pt-BR.yml
@@ -0,0 +1,198 @@
+---
+pt-BR:
+  about:
+    about_mastodon: Mastodon é um servidor de rede social <em>grátis, e open-source</em>. Uma alternativa <em>descentralizada</em> ás plataformas comerciais, que evita o risco de uma única empresa monopolizar a sua comunicação. Escolha um servidor que você confie &mdash; qualquer um que escolher, você poderá interagir com todo o resto. Qualquer um pode ter uma instância Mastodon e assim participar na <em>rede social federada</em> sem problemas.
+    about_this: Sobre essa instância
+    apps: Aplicações
+    business_email: 'Email comercial:'
+    closed_registrations: Registros estão fechadas para essa instância.
+    contact: Contato
+    description_headline: O que é %{domain}?
+    domain_count_after: outras instâncias
+    domain_count_before: Conectado a
+    features:
+      api: Aberto para API de aplicações e serviços
+      blocks: Bloqueos e ferramentas para mudar
+      characters: 500 caracteres por post
+      chronology: Timeline são cronologicas
+      ethics: 'Design ético: sem propaganda, sem tracking'
+      gifv: GIFV e vídeos curtos
+      privacy: Granular, privacidade setada por post
+      public: Timelines públicas
+    features_headline: O que torna Mastodon diferente
+    get_started: Comece aqui
+    links: Links
+    source_code: Source code
+    other_instances: Outras instâncias
+    terms: Termos
+    user_count_after: usuários
+    user_count_before: Lugar de
+  accounts:
+    follow: Seguir
+    followers: Seguidores
+    following: Seguindo
+    nothing_here: Não há nada aqui!
+    people_followed_by: Pessoas seguidas por %{name}
+    people_who_follow: Pessoas que seguem %{name}
+    posts: Posts
+    remote_follow: Acesso remoto
+    unfollow: Unfollow
+  admin:
+    accounts:
+      are_you_sure: Você tem certeza?
+      display_name: Nome mostrado
+      domain: Domain
+      edit: Editar
+      email: E-mail
+      feed_url: URL do Feed
+      followers: Seguidores
+      follows: Seguindo
+      location:
+        all: Todos
+        local: Local
+        remote: Remoto
+        title: Local
+      media_attachments: Mídia anexadas
+      moderation:
+        all: Todos
+        silenced: Silenciado
+        suspended: Supenso
+        title: Moderação
+      most_recent_activity: Atividade mais recente
+      most_recent_ip: IP mais recente
+      not_subscribed: Não inscrito
+      order:
+        alphabetic: Alfabética
+        most_recent: Mais recente
+        title: Ordem
+      perform_full_suspension: Fazer suspensão completa
+      profile_url: URL do perfil
+      public: Público
+      push_subscription_expires: PuSH subscription expires
+      salmon_url: Salmon URL
+      silence: Silêncio
+      statuses: Status
+      title: Contas
+      undo_silenced: Desfazer silenciar
+      undo_suspension: Desfazer supensão
+      username: Usuário
+      web: Web
+    domain_blocks:
+      add_new: Adicionar nova
+      created_msg: Bloqueio do domínio está sendo processado
+      destroyed_msg: Bloqueio de domínio está sendo desfeito
+      domain: Domínio
+      new:
+        create: Criar bloqueio
+        hint: O bloqueio de dominio não vai previnir a criação de entradas no banco de dados, mas irá, retroativamente e automaticamente aplicar métodos de moderação específica nessas contas.
+        severity:
+          desc_html: "<strong>Silenciar</strong> irá fazer com que os posts dessas contas sejam invisíveis para todos que não a seguem. <strong>Supender</strong> irá remover todos o conteúdo das contas, mídia e dados do perfil."
+          silence: Silenciar
+          suspend: Suspender
+        title: Novo bloqueio de domínio
+      reject_media: Rejeitar arquivos de mídia
+      reject_media_hint: Remove localmente arquivos armazenados e rejeita fazer o download de novos no futuro. Irrelevante em suspensões.
+      severities:
+        silence: Silenciar
+        suspend: Suspender
+      severity: Severidade
+      show:
+        affected_accounts:
+          one: Uma conta no banco de dados afetada
+          other: "%{count} contas no banco de dados afetada"
+        retroactive:
+          silence: Desilenciar todas as contas existentes nesse domínio
+          suspend: Desuspender todas as contas existentes nesse domínio
+        title: Desfazer bloqueio de domínio para %{domain}
+      title: Bloqueio de domínio
+      undo: Desfazer
+    pubsubhubbub:
+      callback_url: URL de Callback
+      confirmed: Confirmado
+      expires_in: Expira em
+      last_delivery: Última entrega
+      title: PubSubHubbub
+      topic: Tópico
+    reports:
+      comment:
+        label: Commentário
+        none: None
+      delete: Deletar
+      id: ID
+      mark_as_resolved: Marque como resolvido
+      report: 'Report #%{id}'
+      reported_account: Conta reportada
+      reported_by: Reportado por
+      resolved: Resolvido
+      silence_account: Conta silenciada
+      status: Status
+      suspend_account: Conta suspensa
+      target: Target
+      title: Reports
+      unresolved: Unresolved
+      view: View
+    settings:
+      click_to_edit: Clique para editar
+      contact_information:
+        email: Entre um endereço de email público
+        label: Informação de contato
+        username: Entre com usuário
+      registrations:
+        closed_message:
+          desc_html: Mostrar na página inicial quando registros estão fecados<br/>Você pode usar tags HTML
+          title: Mensagem de registro fechados
+        open:
+          disabled: Desabilitado
+          enabled: Habilitado
+          title: Aberto para registro
+      setting: Preferências
+      site_description:
+        desc_html: Mostrar como parágrafo e usado como meta tag.<br/>Vôce pode usar tags HTML, em particular <code>&lt;a&gt;</code> e <code>&lt;em&gt;</code>.
+        title: Descrição do site
+      site_description_extended:
+        desc_html: Mostrar na página de informação extendiada <br/>Você pode usar tags HTML
+        title: Descrição extendida do site
+      site_title: Título do site
+      title: Preferências do site
+    title: Administração
+  application_mailer:
+    settings: 'Mudar preferências de email: %{link}'
+    signature: notificações Mastodon de %{instance}
+    view: 'View:'
+  applications:
+    invalid_url: URL dada é inválida
+  auth:
+    change_password: Mudar senha
+    didnt_get_confirmation: Não recebeu instruções de confirmação?
+    forgot_password: Esqueceu a senha?
+    login: Entrar
+    register: Registar
+    resend_confirmation: Reenviar instruções de confirmação
+    reset_password: Resetar senha
+    set_new_password: Editar password
+  generic:
+    changes_saved_msg: Mudanças guardadas!
+    powered_by: powered by %{link}
+    save_changes: Guardar alterações
+    validation_errors:
+      one: Algo não está correto. Por favor reveja o erro abaixo
+      other: Algo não está correto. Por favor reveja os %{count} erros abaixo
+  notification_mailer:
+    favourite:
+      body: 'O seu post foi favoritado por %{name}:'
+      subject: "%{name} favouritou o seu post"
+    follow:
+      body: "%{name} seguiu você!"
+      subject: "%{name} segue você"
+    mention:
+      body: 'Você foi mencionado por %{name} em:'
+      subject: Foi mencionado por %{name}
+    reblog:
+      body: 'O seu post foi reblogado por %{name}:'
+      subject: "%{name} reblogou o seu post"
+  pagination:
+    next: Next
+    prev: Prev
+  settings:
+    edit_profile: Editar perfil
+    preferences: Preferências
diff --git a/config/locales/pt.yml b/config/locales/pt.yml
index dc9beae7b..735bc14ba 100644
--- a/config/locales/pt.yml
+++ b/config/locales/pt.yml
@@ -1,64 +1,66 @@
 ---
 pt:
   about:
-    about_mastodon: Mastodon é um servidor de rede social <em>grátis, e open-source</em>. Uma alternativa <em>descentralizada</em> ás plataformas comerciais, que evita o risco de uma única empresa monopolizar a sua comunicação. Escolha um servidor que você confie &mdash; qualquer um que escolher, você poderá interagir com todo o resto. Qualquer um pode ter uma instância Mastodon e assim participar na <em>rede social federada</em> sem problemas.
-    about_this: Sobre essa instância
+    about_mastodon: Mastodon é uma rede social <em>grátis e em código aberto</em>. Uma alternativa <em>descentralizada</em> às plataformas comerciais, que evita o risco de uma única empresa monopolizar a tua comunicação. Escolhe um servidor que confies, não importa qual, pois vais poder comunicar com todos os outros. Qualquer um pode criar uma instância Mastodon e participar nesta <em>rede social</em>.
+    about_this: Sobre esta instância
     apps: Aplicações
     business_email: 'Email comercial:'
-    closed_registrations: Registros estão fechadas para essa instância.
-    contact: Contato
-    description_headline: O que é %{domain}?
+    closed_registrations: Novos registos estão fechados nesta instância.
+    contact: Contacto
+    description_headline: O que é o %{domain}?
     domain_count_after: outras instâncias
-    domain_count_before: Conectado a
+    domain_count_before: Ligado a
     features:
-      api: Aberto para API de aplicações e serviços
-      blocks: Bloqueos e ferramentas para mudar
+      api: API aberta para aplicações e serviços
+      blocks: Ferramentas para silenciar e bloquear
       characters: 500 caracteres por post
-      chronology: Timeline são cronologicas
-      ethics: 'Design ético: sem propaganda, sem tracking'
-      gifv: GIFV e vídeos curtos
-      privacy: Granular, privacidade setada por post
+      chronology: Timelines cronológicas
+      ethics: 'Design ético: sem públicidade ou tracking'
+      gifv: GIFV e pequenos vídeos
+      privacy: Privacidade granular por post
       public: Timelines públicas
     features_headline: O que torna Mastodon diferente
-    get_started: Comece aqui
+    get_started: Começar
     links: Links
-    source_code: Source code
     other_instances: Outras instâncias
+    source_code: Código fonte
+    status_count_after: publicações
+    status_count_before: Que fizeram
     terms: Termos
-    user_count_after: usuários
-    user_count_before: Lugar de
+    user_count_after: utilizadores
+    user_count_before: Casa para
   accounts:
     follow: Seguir
     followers: Seguidores
-    following: Seguindo
+    following: A seguir
     nothing_here: Não há nada aqui!
     people_followed_by: Pessoas seguidas por %{name}
     people_who_follow: Pessoas que seguem %{name}
     posts: Posts
-    remote_follow: Acesso remoto
-    unfollow: Unfollow
+    remote_follow: Seguir remotamente
+    unfollow: Deixar de seguir
   admin:
     accounts:
-      are_you_sure: Você tem certeza?
-      display_name: Nome mostrado
-      domain: Domain
+      are_you_sure: Tens a certeza?
+      display_name: Nome a mostrar
+      domain: Domínio
       edit: Editar
       email: E-mail
       feed_url: URL do Feed
       followers: Seguidores
-      follows: Seguindo
+      follows: A seguir
       location:
         all: Todos
         local: Local
         remote: Remoto
         title: Local
-      media_attachments: Mídia anexadas
+      media_attachments: Media anexa
       moderation:
         all: Todos
-        silenced: Silenciado
-        suspended: Supenso
+        silenced: Silenciados
+        suspended: Supensos
         title: Moderação
-      most_recent_activity: Atividade mais recente
+      most_recent_activity: Actividade mais recente
       most_recent_ip: IP mais recente
       not_subscribed: Não inscrito
       order:
@@ -69,6 +71,7 @@ pt:
       profile_url: URL do perfil
       public: Público
       push_subscription_expires: PuSH subscription expires
+      reset_password: Reset palavra-passe
       salmon_url: Salmon URL
       silence: Silêncio
       statuses: Status
@@ -78,34 +81,35 @@ pt:
       username: Usuário
       web: Web
     domain_blocks:
-      add_new: Adicionar nova
-      created_msg: Bloqueio do domínio está sendo processado
-      destroyed_msg: Bloqueio de domínio está sendo desfeito
+      add_new: Adicionar novo
+      created_msg: Bloqueio do domínio está a ser processado
+      destroyed_msg: Bloqueio de domínio está a ser removido
       domain: Domínio
       new:
         create: Criar bloqueio
-        hint: O bloqueio de dominio não vai previnir a criação de entradas no banco de dados, mas irá, retroativamente e automaticamente aplicar métodos de moderação específica nessas contas.
+        hint: O bloqueio de dominio não vai previnir a criação de entradas na base de dados, mas irá retroativamente e automaticamente aplicar métodos de moderação específica nessas contas.
         severity:
-          desc_html: "<strong>Silenciar</strong> irá fazer com que os posts dessas contas sejam invisíveis para todos que não a seguem. <strong>Supender</strong> irá remover todos o conteúdo das contas, mídia e dados do perfil."
+          desc_html: "<strong>Silenciar</strong> irá fazer com que os posts dessas contas sejam invisíveis para todos que não a seguem. <strong>Supender</strong> irá eliminar todo o conteúdo guardado dessa conta, mídia e informação de perfil."
           silence: Silenciar
           suspend: Suspender
         title: Novo bloqueio de domínio
-      reject_media: Rejeitar arquivos de mídia
-      reject_media_hint: Remove localmente arquivos armazenados e rejeita fazer o download de novos no futuro. Irrelevante em suspensões.
+      reject_media: Rejeitar ficheiros de mídia
+      reject_media_hint: Remove localmente arquivos armazenados e rejeita fazer guardar novos no futuro. Irrelevante na suspensão.
       severities:
         silence: Silenciar
         suspend: Suspender
       severity: Severidade
       show:
         affected_accounts:
-          one: Uma conta no banco de dados afetada
-          other: "%{count} contas no banco de dados afetada"
+          one: Uma conta na base de dados afectada
+          other: "%{count} contas na base de dados afectadas"
         retroactive:
-          silence: Desilenciar todas as contas existentes nesse domínio
-          suspend: Desuspender todas as contas existentes nesse domínio
-        title: Desfazer bloqueio de domínio para %{domain}
+          silence: Não silenciar todas as contas existentes nesse domínio
+          suspend: Não suspender todas as contas existentes nesse domínio
+        title: Remover o bloqueio de domínio de %{domain}
+        undo: Anular
       title: Bloqueio de domínio
-      undo: Desfazer
+      undo: Anular
     pubsubhubbub:
       callback_url: URL de Callback
       confirmed: Confirmado
@@ -115,84 +119,84 @@ pt:
       topic: Tópico
     reports:
       comment:
-        label: Commentário
-        none: None
-      delete: Deletar
+        label: Comentário
+        none: Nenhum
+      delete: Eliminar
       id: ID
-      mark_as_resolved: Marque como resolvido
-      report: 'Report #%{id}'
-      reported_account: Conta reportada
-      reported_by: Reportado por
+      mark_as_resolved: Marcar como resolvido
+      report: 'Denúncia #%{id}'
+      reported_account: Conta denunciada
+      reported_by: Denúnciada por
       resolved: Resolvido
       silence_account: Conta silenciada
-      status: Status
+      status: Estado
       suspend_account: Conta suspensa
       target: Target
-      title: Reports
-      unresolved: Unresolved
-      view: View
+      title: Denúncias
+      unresolved: Por resolver
+      view: Ver
     settings:
       click_to_edit: Clique para editar
       contact_information:
-        email: Entre um endereço de email público
-        label: Informação de contato
-        username: Entre com usuário
+        email: Inserir um endereço de email para tornar público
+        label: Informação de contacto
+        username: Insira um nome de utilizador
       registrations:
         closed_message:
-          desc_html: Mostrar na página inicial quando registros estão fecados<br/>Você pode usar tags HTML
-          title: Mensagem de registro fechados
+          desc_html: Mostrar na página inicial quando registos estão encerrados<br/>Podes usar tags HTML
+          title: Mensagem de registos encerrados
         open:
           disabled: Desabilitado
           enabled: Habilitado
-          title: Aberto para registro
+          title: Aceitar novos registos
       setting: Preferências
       site_description:
-        desc_html: Mostrar como parágrafo e usado como meta tag.<br/>Vôce pode usar tags HTML, em particular <code>&lt;a&gt;</code> e <code>&lt;em&gt;</code>.
+        desc_html: Mostrar como parágrafo na página inicial e usado como meta tag.<br/>Podes usar tags HTML, em particular <code>&lt;a&gt;</code> e <code>&lt;em&gt;</code>.
         title: Descrição do site
       site_description_extended:
-        desc_html: Mostrar na página de informação extendiada <br/>Você pode usar tags HTML
-        title: Descrição extendida do site
+        desc_html: Mostrar na página de mais informações<br/>Podes usar tags HTML
+        title: Página de mais informações
       site_title: Título do site
       title: Preferências do site
     title: Administração
   application_mailer:
-    settings: 'Mudar preferências de email: %{link}'
-    signature: notificações Mastodon de %{instance}
-    view: 'View:'
+    settings: 'Alterar preferências de email: %{link}'
+    signature: notificações Mastodon do %{instance}
+    view: 'Ver:'
   applications:
-    invalid_url: URL dada é inválida
+    invalid_url: O URL é inválido
   auth:
-    change_password: Mudar senha
-    didnt_get_confirmation: Não recebeu instruções de confirmação?
-    forgot_password: Esqueceu a senha?
+    change_password: Alterar palavra-passe
+    didnt_get_confirmation: Não recebeu o email de confirmação?
+    forgot_password: Esqueceste a palavra-passe?
     login: Entrar
     register: Registar
     resend_confirmation: Reenviar instruções de confirmação
-    reset_password: Resetar senha
-    set_new_password: Editar password
+    reset_password: Criar nova palavra-passe
+    set_new_password: Editar palavra-passe
   generic:
-    changes_saved_msg: Mudanças guardadas!
+    changes_saved_msg: Alteraçes guardadas!
     powered_by: powered by %{link}
     save_changes: Guardar alterações
     validation_errors:
-      one: Algo não está correto. Por favor reveja o erro abaixo
-      other: Algo não está correto. Por favor reveja os %{count} erros abaixo
+      one: Algo não está correcto. Por favor vê o erro abaixo
+      other: Algo não está correto. Por favor vê os %{count} erros abaixo
   notification_mailer:
     favourite:
-      body: 'O seu post foi favoritado por %{name}:'
-      subject: "%{name} favouritou o seu post"
+      body: 'O teu post foi adicionado aos favoritos por %{name}:'
+      subject: "%{name} adicionou o teu post aos favoritos"
     follow:
-      body: "%{name} seguiu você!"
-      subject: "%{name} segue você"
+      body: "%{name} é teu seguidor!"
+      subject: "%{name} começou a seguir-te"
     mention:
-      body: 'Você foi mencionado por %{name} em:'
-      subject: Foi mencionado por %{name}
+      body: 'Foste mencionado por %{name}:'
+      subject: "%{name} mencionou-te"
     reblog:
-      body: 'O seu post foi reblogado por %{name}:'
-      subject: "%{name} reblogou o seu post"
+      body: 'O teu post foi partilhado por %{name}:'
+      subject: "%{name} partilhou o teu post"
   pagination:
-    next: Next
-    prev: Prev
+    next: Seguinte
+    prev: Anterior
   settings:
     edit_profile: Editar perfil
     preferences: Preferências
diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml
new file mode 100644
index 000000000..28f7eeea8
--- /dev/null
+++ b/config/locales/simple_form.pt-BR.yml
@@ -0,0 +1,30 @@
+---
+pt-BR:
+  simple_form:
+    labels:
+      defaults:
+        avatar: Avatar
+        confirm_new_password: Confirme nova senha
+        confirm_password: Confirme a senha
+        current_password: Senha atual
+        display_name: Nome
+        email: Endereço de email
+        header: Header
+        locale: Linguagem
+        new_password: Nova senha
+        note: Biografia
+        password: Senha
+        username: Usuário
+      interactions:
+        must_be_follower: Bloquear notificações de não-seguidores
+        must_be_following: Bloquear notificações de pessoas que você
+      notification_emails:
+        favourite: Enviar email quando alguém favorita um post seu
+        follow: Enviar email quando alguém seguir você
+        mention: Enviar email quando alguém mencionar você
+        reblog: Enviar email quando alguém reblogar um post seu
+    'no': 'Não'
+    required:
+      mark: "*"
+      text: necessário
+    'yes': 'Sim'
diff --git a/config/locales/simple_form.pt.yml b/config/locales/simple_form.pt.yml
index e8b5e2d7f..ba3326b23 100644
--- a/config/locales/simple_form.pt.yml
+++ b/config/locales/simple_form.pt.yml
@@ -1,28 +1,47 @@
 ---
 pt:
   simple_form:
+    hints:
+      defaults:
+        avatar: PNG, GIF ou JPG. No máximo 2MB. Vai ser reduzido para 120x120px
+        display_name: No máximo 30 caracteres
+        header: PNG, GIF or JPG. No máximo 2MB. Vai ser reduzido para 700x335px
+        locked: Requer que manualmente aproves seguidores e torna o default dos teus posts para privados (apenas seguidores)
+        note: No máximo 160 caracteres
+      imports:
+        data: Ficheiro CSV exportado de outra instância do Mastodon
+      sessions:
+        otp: Insere o código o código de autenticação de dois fatores do teu telefone ou utiliza um código de recuperação de acesso.
     labels:
       defaults:
-        avatar: Avatar
-        confirm_new_password: Confirme nova senha
-        confirm_password: Confirme a senha
-        current_password: Senha atual
+        avatar: Imagem de Perfil
+        confirm_new_password: Confirme nova palavra-passe
+        confirm_password: Confirme a palavra-passe
+        current_password: Palavra-passe actual
+        data: Data
         display_name: Nome
         email: Endereço de email
-        header: Header
-        locale: Linguagem
-        new_password: Nova senha
+        header: Cabeçalho
+        locale: Língua
+        locked: Tornar conta privada
+        new_password: Nova palavra-passe
         note: Biografia
-        password: Senha
-        username: Usuário
+        otp_attempt: Código de autenticação de dois fatores
+        password: Palavra-passe
+        setting_boost_modal: Pedir confirmação antes de partilhar um post
+        setting_default_privacy: Privacidade padrão de posts
+        severity: Severity
+        type: Import type
+        username: Utilizador
       interactions:
         must_be_follower: Bloquear notificações de não-seguidores
-        must_be_following: Bloquear notificações de pessoas que você
+        must_be_following: Bloquear notificações de pessoas que não segues
       notification_emails:
-        favourite: Enviar email quando alguém favorita um post seu
-        follow: Enviar email quando alguém seguir você
-        mention: Enviar email quando alguém mencionar você
-        reblog: Enviar email quando alguém reblogar um post seu
+        digest: Enviar um email da actividade nesta instância
+        favourite: Enviar email quando alguém adiciona um post teu aos favoritos
+        follow: Enviar email quando alguém te segue
+        mention: Enviar email quando alguém te menciona
+        reblog: Enviar email quando alguém partilhar um post teu
     'no': 'Não'
     required:
       mark: "*"