diff --git a/app/assets/javascripts/components/locales/pt.jsx b/app/assets/javascripts/components/locales/pt.jsx
index 0fba15f2c7fec7c3784d5ea4d3022691f4ab9f85..e1b28df2fcb1a61397f0c65f3cda90150904aa6d 100644
--- a/app/assets/javascripts/components/locales/pt.jsx
+++ b/app/assets/javascripts/components/locales/pt.jsx
@@ -1,49 +1,53 @@
-const pt = {
-  "column_back_button.label": "Voltar",
-  "lightbox.close": "Fechar",
-  "loading_indicator.label": "Carregando...",
-  "status.mention": "Menção",
-  "status.delete": "Deletar",
-  "status.reply": "Responder",
-  "status.reblog": "Reblogar",
-  "status.favourite": "Favoritar",
-  "status.reblogged_by": "{name} reblogou",
-  "video_player.toggle_sound": "Alterar som",
-  "account.mention": "Menção",
-  "account.edit_profile": "Editar perfil",
-  "account.unblock": "Desbloquear",
-  "account.unfollow": "Unfollow",
-  "account.block": "Bloquear",
-  "account.follow": "Seguir",
-  "account.block": "Bloquear",
-  "account.posts": "Posts",
-  "account.follows": "Segue",
-  "account.followers": "Seguidoress",
-  "account.follows_you": "Segue você",
-  "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 entrando 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": "O desenvolvedor desse projeto pode ser seguido em Gargron@mastodon.social",
-  "column.home": "Home",
-  "column.mentions": "Menções",
-  "column.public": "Público",
-  "tabs_bar.compose": "Compôr",
-  "tabs_bar.home": "Home",
-  "tabs_bar.mentions": "Menções",
-  "tabs_bar.public": "Público",
-  "compose_form.placeholder": "Que estás pensando?",
-  "compose_form.publish": "Publicar",
-  "compose_form.sensitive": null,
-  "compose_form.unlisted": null,
-  "navigation_bar.settings": "Configurações",
-  "navigation_bar.public_timeline": "Timeline Pública",
-  "navigation_bar.logout": "Logout",
-  "reply_indicator.cancel": "Cancelar",
-  "search.placeholder": "Busca",
-  "search.account": "Conta",
-  "search.hashtag": "Hashtag",
-  "upload_button.label": "Adicionar media",
-  "upload_form.undo": "Desfazer"
-};
-
-export default pt;
+const pt = {
+  "column_back_button.label": "Voltar",
+  "lightbox.close": "Fechar",
+  "loading_indicator.label": "Carregando...",
+  "status.mention": "Menção",
+  "status.delete": "Deletar",
+  "status.reply": "Responder",
+  "status.reblog": "Reblogar",
+  "status.favourite": "Favoritar",
+  "status.reblogged_by": "{name} reblogou",
+  "video_player.toggle_sound": "Alterar som",
+  "account.mention": "Menção",
+  "account.edit_profile": "Editar perfil",
+  "account.unblock": "Desbloquear",
+  "account.unfollow": "Unfollow",
+  "account.block": "Bloquear",
+  "account.follow": "Seguir",
+  "account.block": "Bloquear",
+  "account.posts": "Posts",
+  "account.follows": "Segue",
+  "account.followers": "Seguidores",
+  "account.follows_you": "Segue você",
+  "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 entrando 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": "O desenvolvedor desse projeto pode ser seguido em Gargron@mastodon.social",
+  "column.home": "Home",
+  "column.mentions": "Menções",
+  "column.public": "Público",
+  "tabs_bar.compose": "Compôr",
+  "tabs_bar.home": "Home",
+  "tabs_bar.mentions": "Menções",
+  "tabs_bar.public": "Público",
+  "tabs_bar.notifications": "Notificações",
+  "compose_form.placeholder": "Que estás pensando?",
+  "compose_form.publish": "Publicar",
+  "compose_form.sensitive": "Marcar conteúdo como sensível",
+  "navigation_bar.settings": "Configurações",
+  "navigation_bar.public_timeline": "Timeline Pública",
+  "navigation_bar.logout": "Logout",
+  "reply_indicator.cancel": "Cancelar",
+  "search.placeholder": "Busca",
+  "search.account": "Conta",
+  "search.hashtag": "Hashtag",
+  "upload_button.label": "Adicionar media",
+  "upload_form.undo": "Desfazer",
+  "notification.follow": "{name} seguiu você",
+  "notification.favourite": "{name} favoritou  seu post",
+  "notification.reblog": "{name} reblogou o seu post",
+  "notification.mention": "{name} mecionou você"
+};
+
+export default pt;
diff --git a/config/locales/devise.pt.yml b/config/locales/devise.pt.yml
new file mode 100644
index 0000000000000000000000000000000000000000..6c6f3d4d292413d1c05acc871e595e0149c57a12
--- /dev/null
+++ b/config/locales/devise.pt.yml
@@ -0,0 +1,61 @@
+---
+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.
+    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/doorkeeper.pt.yml b/config/locales/doorkeeper.pt.yml
new file mode 100644
index 0000000000000000000000000000000000000000..2b0568d8a87ece62bf5f62a73be21da57f51a82a
--- /dev/null
+++ b/config/locales/doorkeeper.pt.yml
@@ -0,0 +1,112 @@
+---
+pt:
+  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
\ No newline at end of file
diff --git a/config/locales/pt.yml b/config/locales/pt.yml
new file mode 100644
index 0000000000000000000000000000000000000000..2d74c7c8513a270c12226b80a580babb8950510c
--- /dev/null
+++ b/config/locales/pt.yml
@@ -0,0 +1,60 @@
+---
+pt:
+  about:
+    about_instance: "<em>%{instance}</em> é uma instância de Mastodon."
+    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. Qualquer um pode ter uma instância Mastodon e assim participar na <em>rede social federada</em> sem problemas.
+    get_started: Como começar
+    source_code: Source code
+    terms: Termos
+  accounts:
+    follow: Seguir
+    followers: Seguidores
+    following: Following
+    nothing_here: Não há nada aqui!
+    people_followed_by: Pessoas seguidas por %{name}
+    people_who_follow: Pessoas que seguem %{name}
+    posts: Posts
+    unfollow: Unfollow
+  application_mailer:
+    signature: notificações Mastodon de %{instance}
+  auth:
+    change_password: Mudar password
+    didnt_get_confirmation: Não recebeu instruções de confirmação?
+    forgot_password: Esqueceu a password?
+    login: Entrar
+    register: Registar
+    resend_confirmation: Reenviar instruções de confirmação
+    reset_password: Reset password
+    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
+  stream_entries:
+    favourited: favoritou um post por
+    is_now_following: agora segue
+  will_paginate:
+    page_gap: "&hellip;"
diff --git a/config/locales/simple_form.pt.yml b/config/locales/simple_form.pt.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b4e7108dd9ec7b4455352393cbeddc8ff9f25466
--- /dev/null
+++ b/config/locales/simple_form.pt.yml
@@ -0,0 +1,31 @@
+---
+pt:
+  simple_form:
+    labels:
+      defaults:
+        avatar: Avatar
+        confirm_new_password: Confirme nova password
+        confirm_password: Confirme a password
+        current_password: Password atual
+        display_name: Nome
+        email: Endereço de email
+        header: Header
+        locale: Linguagem
+        new_password: Nova password
+        note: Biografia
+        password: Password
+        silenced: Modo não-listado
+        username: Username
+      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'