diff --git a/.gitignore b/.gitignore
index 34ea5b38ad..cd63ac2e6c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -279,4 +279,9 @@ abp_io/src/Volo.AbpWebSite.Web/Logs/*
abp_io/src/Volo.AbpWebSite.Web/wwwroot/files/*
templates/service/host/MyCompanyName.MyProjectName.Host/Logs/logs.txt
templates/service/host/IdentityServerHost/Logs/logs.txt
-abp_io/src/Volo.AbpWebSite.Web/TemplateFiles/*.zip
\ No newline at end of file
+abp_io/src/Volo.AbpWebSite.Web/TemplateFiles/*.zip
+framework/test/Volo\.Abp\.AspNetCore\.Mvc\.UI\.Bootstrap\.Demo/package-lock\.json
+
+modules/blogging/app/Volo\.BloggingTestApp/package-lock\.json
+
+templates/mvc/src/MyCompanyName\.MyProjectName\.Web/package-lock\.json
diff --git a/modules/account/src/Volo.Abp.Account.Web/Localization/Resources/AbpAccount/Web/pt-BR.json b/modules/account/src/Volo.Abp.Account.Web/Localization/Resources/AbpAccount/Web/pt-BR.json
new file mode 100644
index 0000000000..45eb49d2ca
--- /dev/null
+++ b/modules/account/src/Volo.Abp.Account.Web/Localization/Resources/AbpAccount/Web/pt-BR.json
@@ -0,0 +1,15 @@
+{
+ "culture": "pt-BR",
+ "texts": {
+ "UserName": "Usuário",
+ "EmailAddress": "E-mail",
+ "UserNameOrEmailAddress": "Utilize seu nome de usuário ou e-mail",
+ "Password": "Senha",
+ "RememberMe": "Lembrar",
+ "UseAnotherServiceToLogin": "Usar outro serviço para entrar",
+ "UserLockedOutMessage": "Esta conta de usuário está bloqueada devido a muitas tentativas de entrar. Por favor, espero alguns instantes e tente novamente.",
+ "InvalidUserNameOrPassword": "Usuário ou senha estão incorretos!",
+ "LoginIsNotAllowed": "Você não possui permissão para entrar! Você deveconfirmar seu e-mail ou número de telefone.",
+ "SelfRegistrationDisabledMessage": "Não é permitido que você crie uma nova conta neste site. Contate um administrador para que ele crie uma conta para você."
+ }
+}
\ No newline at end of file
diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.csproj b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.csproj
index 3cc06d0c09..5daa33dfde 100644
--- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.csproj
+++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.csproj
@@ -11,10 +11,12 @@
+
+
diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/pt-BR.json b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/pt-BR.json
new file mode 100644
index 0000000000..a3a4b1fa39
--- /dev/null
+++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/pt-BR.json
@@ -0,0 +1,14 @@
+{
+ "culture": "pt-BR",
+ "texts": {
+ "Permission:Blogging": "Blog",
+ "Permission:Blogs": "Blogs",
+ "Permission:Posts": "Postagens",
+ "Permission:Tags": "Etiquetas",
+ "Permission:Comments": "Comentários",
+ "Permission:Management": "Gerencimento",
+ "Permission:Edit": "Editar",
+ "Permission:Create": "Criar",
+ "Permission:Delete": "Excluir"
+ }
+}
\ No newline at end of file
diff --git a/modules/blogging/src/Volo.Blogging.Web/Localization/Resources/Blogging/Web/pt-BR.json b/modules/blogging/src/Volo.Blogging.Web/Localization/Resources/Blogging/Web/pt-BR.json
new file mode 100644
index 0000000000..81740c65db
--- /dev/null
+++ b/modules/blogging/src/Volo.Blogging.Web/Localization/Resources/Blogging/Web/pt-BR.json
@@ -0,0 +1,41 @@
+{
+ "culture": "pt-BR",
+ "texts": {
+ "Menu:Blogs": "Blog",
+ "Menu:BlogManagement": "Gerenciar Blog",
+ "Title": "Título",
+ "Delete": "Excluir",
+ "Reply": "Responder",
+ "ReplyTo": "Responder para {0}",
+ "ContinueReading": "Continue lendo",
+ "DaysAgo": "{0} dias",
+ "YearsAgo": "{0} anos",
+ "MonthsAgo": "{0} meses",
+ "WeeksAgo": "{0} semanas",
+ "MinutesAgo": "{0} minutos",
+ "SecondsAgo": "{0} segundos",
+ "HoursAgo": "{0} horas",
+ "Now": "agora",
+ "Content": "Conteúdo",
+ "SeeAll": "Ver Tudo",
+ "PopularTags": "Etiquetas Populares",
+ "WiewsWithCount": "{0} visualizações",
+ "LastPosts": "Últimos Posts",
+ "LeaveComment": "Deixe um comentário",
+ "TagsInThisArticle": "Etiquetas neste artigo",
+ "Posts": "Postagens",
+ "Edit": "Editar",
+ "BLOG": "BLOG",
+ "CommentDeletionWarningMessage": "O comentário será excluído.",
+ "PostDeletionWarningMessage": "O post será excluído.",
+ "BlogDeletionWarningMessage": "O Blog será excluído.",
+ "AreYouSure": "Você tem certeza?",
+ "CommentWithCount": "{0} comentários",
+ "Comment": "Comente",
+ "ShareOnTwitter": "Compartilhar no Twitter",
+ "CoverImage": "Imagem de Capa",
+ "CreateANewPost": "Criar uma nova Postagem",
+ "CreateANewBlog": "Criar um novo Blog",
+ "WhatIsNew": "O que há de novo?"
+ }
+}
\ No newline at end of file
diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj
index 8550b20c3e..1cc2db0ba0 100644
--- a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj
+++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj
@@ -17,6 +17,10 @@
+
+
+
+
diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/Localization/ApplicationContracts/pt-BR.json b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/Localization/ApplicationContracts/pt-BR.json
new file mode 100644
index 0000000000..f4c1627252
--- /dev/null
+++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/Localization/ApplicationContracts/pt-BR.json
@@ -0,0 +1,12 @@
+{
+ "culture": "pt-BR",
+ "texts": {
+ "Permission:IdentityManagement": "Gerenciamento de Acessos",
+ "Permission:RoleManagement": "Gerenciamento de Perfis",
+ "Permission:Create": "Criar",
+ "Permission:Edit": "Editar",
+ "Permission:Delete": "Excluir",
+ "Permission:ChangePermissions": "Alterar Permissões",
+ "Permission:UserManagement": "Gerenciamento de Usuários"
+ }
+}
\ No newline at end of file
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj b/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj
index a151c385b9..6cc72b3779 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj
+++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj
@@ -17,6 +17,10 @@
+
+
+
+
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/Localization/Domain/pt-BR.json b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/Localization/Domain/pt-BR.json
new file mode 100644
index 0000000000..6b0f7949e2
--- /dev/null
+++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/Localization/Domain/pt-BR.json
@@ -0,0 +1,33 @@
+{
+ "culture": "pt-BR",
+ "texts": {
+ "Identity.DefaultError": "Ocorreu uma falha desconhecida.",
+ "Identity.ConcurrencyFailure": "Falha de concorrência otimista, o objeto foi modificado.",
+ "Identity.DuplicateEmail": "O e-mail '{0}' já está em uso.",
+ "Identity.DuplicateRoleName": "O nome de perfil '{0}' já está em uso.",
+ "Identity.DuplicateUserName": "O usuário '{0}' já está em uso.",
+ "Identity.InvalidEmail": "E-mail '{0}' inválido.",
+ "Identity.InvalidPasswordHasherCompatibilityMode": "O PasswordHasherCompatibilityMode é inválido.",
+ "Identity.InvalidPasswordHasherIterationCount": "A contagem de iterações deve ser um inteiro positivo.",
+ "Identity.InvalidRoleName": "Perfil '{0}' inválido.",
+ "Identity.InvalidToken": "Token inválido.",
+ "Identity.InvalidUserName": "Usuário '{0}' é inválido, somente pode conter letras ou números.",
+ "Identity.LoginAlreadyAssociated": "Um usuário com este login já existe.",
+ "Identity.PasswordMismatch": "Senha incorreta.",
+ "Identity.PasswordRequiresDigit": "Senhas devem possuir pelo menos um dígito ('0'-'9').",
+ "Identity.PasswordRequiresLower": "Senhas devem possuir pelo menos uma letra minúscula ('a'-'z').",
+ "Identity.PasswordRequiresNonAlphanumeric": "Senhas devem possuir pelo menos um caractere especial.",
+ "Identity.PasswordRequiresUpper": "Senhas devem possuir pelo menos uma letra maiúscula ('A'-'Z').",
+ "Identity.PasswordTooShort": "Senhas devem possuir pelo menos {0} caracteres.",
+ "Identity.RoleNotFound": "Perfil {0} não existe.",
+ "Identity.UserAlreadyHasPassword": "O usuário já possui uma senha.",
+ "Identity.UserAlreadyInRole": "Usuário já possui o perfil '{0}'.",
+ "Identity.UserLockedOut": "O usuário está bloqueado.",
+ "Identity.UserLockoutNotEnabled": "Este usuário não pode ser bloqueado.",
+ "Identity.UserNameNotFound": "Usuário {0} não existe.",
+ "Identity.UserNotInRole": "Usuário não está no perfil '{0}'.",
+ "Identity.PasswordConfirmationFailed": "A senha não confere com a confirmação de senha.",
+ "Identity.StaticRoleRenamingErrorMessage": "Perfis estáticos não podem ser renomeados.",
+ "Identity.StaticRoleDeletionErrorMessage": "Perfis estáticos não podem ser excluídos."
+ }
+}
\ No newline at end of file
diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Localization/Resources/AbpIdentity/pt-BR.json b/modules/identity/src/Volo.Abp.Identity.Web/Localization/Resources/AbpIdentity/pt-BR.json
new file mode 100644
index 0000000000..b60b4345f6
--- /dev/null
+++ b/modules/identity/src/Volo.Abp.Identity.Web/Localization/Resources/AbpIdentity/pt-BR.json
@@ -0,0 +1,39 @@
+{
+ "culture": "pt-BR",
+ "texts": {
+ "Menu:IdentityManagement": "Gerenciamento de Acessos",
+ "Users": "Usuários",
+ "NewUser": "Novo Usuário",
+ "UserName": "Usuário",
+ "EmailAddress": "E-mail",
+ "PhoneNumber": "Telefone",
+ "UserInformations": "Informações do Usuário",
+ "DisplayName:IsDefault": "Padrão",
+ "DisplayName:IsStatic": "Estático",
+ "DisplayName:IsPublic": "Público",
+ "Roles": "Perfis",
+ "Password": "Senha",
+ "PersonalInfo": "Meu Perfil",
+ "PersonalSettings": "Configurações Pessoais",
+ "UserDeletionConfirmationMessage": "O Usuário '{0}' será excluído. Você tem certeza?",
+ "RoleDeletionConfirmationMessage": "O Perfil '{0}' será excluído. Você tem certeza?",
+ "DisplayName:RoleName": "Perfil",
+ "DisplayName:UserName": "Usuário",
+ "DisplayName:Name": "Nome",
+ "DisplayName:Surname": "Sobrenome",
+ "DisplayName:Password": "Senha",
+ "DisplayName:EmailAddress": "E-mail",
+ "DisplayName:PhoneNumber": "Telefone",
+ "DisplayName:TwoFactorEnabled": "Verificação em dois fatores",
+ "DisplayName:LockoutEnabled": "Bloquear conta após falhas ao entrar",
+ "NewRole": "Novo Perfil",
+ "RoleName": "Perfil",
+ "CreationTime": "Data de Criação",
+ "Permissions": "Permissões",
+ "DisplayName:CurrentPassword": "Senha Atual",
+ "DisplayName:NewPassword": "Nova Senha",
+ "DisplayName:NewPasswordConfirm": "Confirmar nova senha",
+ "PasswordChangedMessage": "Sua senha foi alterada com sucesso.",
+ "PersonalSettingsSavedMessage": "Suas configurações pessoais foram salvas com sucesso."
+ }
+}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Localization/Resources/AbpPermissionManagement/pt-BR.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Localization/Resources/AbpPermissionManagement/pt-BR.json
new file mode 100644
index 0000000000..7783fff8f9
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Localization/Resources/AbpPermissionManagement/pt-BR.json
@@ -0,0 +1,7 @@
+
+{
+ "culture": "pt-BR",
+ "texts": {
+ "Permissions": "Permissões"
+ }
+}
\ No newline at end of file
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.csproj
index 393c22258c..76b3a3d8cb 100644
--- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.csproj
+++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.csproj
@@ -23,4 +23,8 @@
+
+
+
+
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/pt-BR.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/pt-BR.json
new file mode 100644
index 0000000000..ca967a9bea
--- /dev/null
+++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/pt-BR.json
@@ -0,0 +1,9 @@
+{
+ "culture": "pt-BR",
+ "texts": {
+ "Permission:TenantManagement": "Gerenciamento de Inquilinos",
+ "Permission:Create": "Criar",
+ "Permission:Edit": "Editar",
+ "Permission:Delete": "Excluir"
+ }
+}
\ No newline at end of file
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/pt-BR.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/pt-BR.json
new file mode 100644
index 0000000000..44ea338604
--- /dev/null
+++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/pt-BR.json
@@ -0,0 +1,11 @@
+{
+ "culture": "pt-BR",
+ "texts": {
+ "Menu:TenantManagement": "Gerencimento de Inquilinos",
+ "Tenants": "Inquilinos",
+ "NewTenant": "Novo Inquilino",
+ "TenantName": "Inquilino",
+ "DisplayName:TenantName": "Inquilino",
+ "TenantDeletionConfirmationMessage": "Inquilino '{0}' será excluído. Tem certeza?"
+ }
+}
\ No newline at end of file
diff --git a/templates/module/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj b/templates/module/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj
index 317662c6ac..a43dd21542 100644
--- a/templates/module/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj
+++ b/templates/module/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj
@@ -20,4 +20,8 @@
+
+
+
+
diff --git a/templates/module/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName/MyProjectName/Localization/ApplicationContracts/pt-BR.json b/templates/module/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName/MyProjectName/Localization/ApplicationContracts/pt-BR.json
new file mode 100644
index 0000000000..958055dcd5
--- /dev/null
+++ b/templates/module/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName/MyProjectName/Localization/ApplicationContracts/pt-BR.json
@@ -0,0 +1,6 @@
+{
+ "culture": "pt-BR",
+ "texts": {
+ "Permission:MyProjectName": "MyProjectName"
+ }
+}
\ No newline at end of file
diff --git a/templates/module/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj b/templates/module/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj
index 59e1709df7..861d0ac377 100644
--- a/templates/module/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj
+++ b/templates/module/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj
@@ -20,4 +20,8 @@
+
+
+
+
diff --git a/templates/module/src/MyCompanyName.MyProjectName.Domain/MyCompanyName/MyProjectName/Localization/Domain/pt-BR.json b/templates/module/src/MyCompanyName.MyProjectName.Domain/MyCompanyName/MyProjectName/Localization/Domain/pt-BR.json
new file mode 100644
index 0000000000..6d746df04c
--- /dev/null
+++ b/templates/module/src/MyCompanyName.MyProjectName.Domain/MyCompanyName/MyProjectName/Localization/Domain/pt-BR.json
@@ -0,0 +1,6 @@
+{
+ "culture": "pt-BR",
+ "texts": {
+
+ }
+}
\ No newline at end of file
diff --git a/templates/module/src/MyCompanyName.MyProjectName.Web/Localization/Resources/MyProjectName/pt-BR.json b/templates/module/src/MyCompanyName.MyProjectName.Web/Localization/Resources/MyProjectName/pt-BR.json
new file mode 100644
index 0000000000..6d746df04c
--- /dev/null
+++ b/templates/module/src/MyCompanyName.MyProjectName.Web/Localization/Resources/MyProjectName/pt-BR.json
@@ -0,0 +1,6 @@
+{
+ "culture": "pt-BR",
+ "texts": {
+
+ }
+}
\ No newline at end of file