mirror of https://github.com/abpframework/abp.git
2396 changed files with 369727 additions and 15928 deletions
@ -0,0 +1,13 @@ |
|||
{ |
|||
"culture": "pt-BR", |
|||
"texts": { |
|||
"Account": "Conta", |
|||
"Welcome": "Bem-vindo", |
|||
"UseOneOfTheFollowingLinksToContinue": "Use um dos seguintes links para continuar", |
|||
"FrameworkHomePage": "Página inicial do Framework", |
|||
"FrameworkDocumentation": " Documentação do Framework", |
|||
"OfficialBlog": "Blog oficial", |
|||
"CommercialHomePage": "Página inicial comercial", |
|||
"CommercialSupportWebSite": "Site de suporte comercial" |
|||
} |
|||
} |
|||
@ -0,0 +1,60 @@ |
|||
{ |
|||
"culture": "pt-BR", |
|||
"texts": { |
|||
"Permission:NpmPackages": "Pacotes NPM", |
|||
"Permission:NugetPackages": "Pacotes Nuget", |
|||
"Permission:Maintenance": "Manutenção", |
|||
"Permission:Maintain": "Manter", |
|||
"Permission:ClearCaches": "Limpar caches", |
|||
"Permission:Modules": "Módulos", |
|||
"Permission:Packages": "Pacotes", |
|||
"Permission:Edit": "Editar", |
|||
"Permission:Delete": "Excluir", |
|||
"Permission:Create": "Criar", |
|||
"Menu:Packages": "Pacotes", |
|||
"NpmPackageDeletionWarningMessage": "Este pacote NPM será excluído. Você confirma isso?", |
|||
"NugetPackageDeletionWarningMessage": "Este pacote Nuget será excluído. Você confirma isso?", |
|||
"ModuleDeletionWarningMessage": "Este módulo será excluído. Você confirma isso?", |
|||
"Name": "Nome", |
|||
"DisplayName": "Mostrar nome", |
|||
"ShortDescription": "Breve descrição", |
|||
"NameFilter": "Nome", |
|||
"CreationTime": "Hora da criação", |
|||
"IsPro": "É profissional", |
|||
"EfCoreConfigureMethodName": "Configurar nome do método", |
|||
"IsProFilter": "É profissional", |
|||
"ApplicationType": "Tipo de aplicativo", |
|||
"Target": "Objetivo", |
|||
"TargetFilter": "Objetivo", |
|||
"ModuleClass": "Classe do módulo", |
|||
"NugetPackageTarget.DomainShared": "Domínio compartilhado", |
|||
"NugetPackageTarget.Domain": "Domínio", |
|||
"NugetPackageTarget.Application": "Aplicativo", |
|||
"NugetPackageTarget.ApplicationContracts": "Contratos de aplicativos", |
|||
"NugetPackageTarget.HttpApi": "Http Api", |
|||
"NugetPackageTarget.HttpApiClient": "Cliente HTTP da API", |
|||
"NugetPackageTarget.Web": "Web", |
|||
"NugetPackageTarget.EntityFrameworkCore": "EntityFramework Core", |
|||
"NugetPackageTarget.MongoDB": "MongoDB", |
|||
"Edit": "Editar", |
|||
"Delete": "Excluir", |
|||
"Refresh": "Atualizar", |
|||
"NpmPackages": "Pacotes NPM", |
|||
"NugetPackages": "Pacotes Nuget", |
|||
"NpmPackageCount": "Contagem de pacotes NPM", |
|||
"NugetPackageCount": "Contagem de pacotes Nuget", |
|||
"Module": "Módulos", |
|||
"ModuleInfo": "Informações do módulo", |
|||
"CreateANpmPackage": "Criar um pacote NPM", |
|||
"CreateAModule": "Criar um módulo", |
|||
"CreateANugetPackage": "Criar um pacote Nuget", |
|||
"AddNew": "Adicionar novo", |
|||
"PackageAlreadyExist{0}": "\"{0}\" o pacote já foi adicionado.", |
|||
"ClearCache": "Limpar cache", |
|||
"SuccessfullyCleared": "Limpo com sucesso", |
|||
"Menu:NpmPackages": "Pacotes NPM", |
|||
"Menu:Modules": "Módulos", |
|||
"Menu:Maintenance": "Manutenção", |
|||
"Menu:NugetPackages": "Pacotes Nuget" |
|||
} |
|||
} |
|||
@ -0,0 +1,31 @@ |
|||
{ |
|||
"culture": "pt-BR", |
|||
"texts": { |
|||
"Volo.AbpIo.Domain:010004": "Número máximo de membros atingido!", |
|||
"Volo.AbpIo.Domain:010005": "Número máximo de proprietários atingido!", |
|||
"Volo.AbpIo.Domain:010006": "Este usuário já é proprietário desta organização!", |
|||
"Volo.AbpIo.Domain:010007": "Este usuário já é desenvolvedor desta organização!", |
|||
"Volo.AbpIo.Domain:010008": "A contagem permitida de desenvolvedores não pode ser inferior à contagem atual de desenvolvedores!", |
|||
"Volo.AbpIo.Domain:010009": "A contagem permitida de desenvolvedores não pode ser inferior a 0!", |
|||
"Volo.AbpIo.Domain:010010": "A contagem máxima de endereços mac foi excedida!", |
|||
"Volo.AbpIo.Domain:010011": "A licença pessoal não pode ter mais de um desenvolvedor!", |
|||
"Volo.AbpIo.Domain:010012": "A licença não pode ser estendida um mês após a expiração da licença!", |
|||
"Volo.AbpIo.Domain:020001": "Não foi possível excluir este pacote NPM porque \"{NugetPackages}\" Os pacotes Nuget dependem deste pacote.", |
|||
"Volo.AbpIo.Domain:020002": "Não foi possível excluir este pacote NPM porque \"{Modules}\" Módulos estão usando este pacote.", |
|||
"Volo.AbpIo.Domain:020003": "Não foi possível excluir este pacote NPM porque \"{Modules}\" Módulos estão usando este pacote e \"{NugetPackages}\" Os pacotes Nuget dependem deste pacote.", |
|||
"Volo.AbpIo.Domain:020004": "Não foi possível excluir este pacote Nuget porque \"{Modules}\" Módulos estão usando este pacote.", |
|||
"WantToLearn?": "Quer aprender?", |
|||
"ReadyToGetStarted?": "Pronto para começar?", |
|||
"JoinOurCommunity": "Participe da nossa comunidade", |
|||
"GetStartedUpper": "INICIAR", |
|||
"ForkMeOnGitHub": "Bifurque-me no GitHub", |
|||
"Features": "Recursos", |
|||
"GetStarted": "Introdução", |
|||
"Documents": "Documentos", |
|||
"Community": "Comunidade", |
|||
"ContributionGuide": "Guia de contribuição", |
|||
"Blog": "Blog", |
|||
"Commercial": "Comercial", |
|||
"SeeDocuments": "Ver documentos" |
|||
} |
|||
} |
|||
@ -0,0 +1,5 @@ |
|||
{ |
|||
"culture": "pt-BR", |
|||
"texts": { |
|||
} |
|||
} |
|||
@ -0,0 +1,30 @@ |
|||
{ |
|||
"culture": "pt-BR", |
|||
"texts": { |
|||
"OrganizationManagement": "Gerenciamento da organização", |
|||
"OrganizationList": "Lista de organização", |
|||
"Volo.AbpIo.Commercial:010003": "Você não é proprietário desta organização!", |
|||
"OrganizationNotFoundMessage": "Nenhuma organização encontrada!", |
|||
"DeveloperCount": "Número de desenvolvedores", |
|||
"Owners": "Proprietários", |
|||
"AddMember": "Adicionar membro", |
|||
"AddOwner": "Adicionar proprietário", |
|||
"AddDeveloper": "Adicionar desenvolvedor", |
|||
"UserName": "Nome de usuário", |
|||
"Name": "Nome", |
|||
"EmailAddress": "Endereço de email", |
|||
"Developers": "Desenvolvedores", |
|||
"LicenseType": "Tipo de licença", |
|||
"Manage": "Gerenciar", |
|||
"StartDate": "Data de início", |
|||
"EndDate": "Data final", |
|||
"Modules": "Módulos", |
|||
"LicenseExtendMessage": "A data de término da sua licença foi estendida para {0}", |
|||
"LicenseUpgradeMessage": "Sua licença foi atualizada para {0}", |
|||
"LicenseAddDeveloperMessage": "{0} desenvolvedores adicionados à sua licença", |
|||
"Volo.AbpIo.Commercial:010004": "Não foi possível encontrar o usuário especificado! O usuário já deve ter se registrado.", |
|||
"MyOrganizations": "Minhas organizações", |
|||
"ApiKey": "Chave da API", |
|||
"UserNameNotFound": "Não há usuário com nome de usuário {0}" |
|||
} |
|||
} |
|||
@ -0,0 +1,5 @@ |
|||
{ |
|||
"culture": "pt-BR", |
|||
"texts": { |
|||
} |
|||
} |
|||
@ -0,0 +1,5 @@ |
|||
{ |
|||
"culture": "pt-BR", |
|||
"texts": { |
|||
} |
|||
} |
|||
@ -0,0 +1,160 @@ |
|||
{ |
|||
"culture": "pt-BR", |
|||
"texts": { |
|||
"GetStarted": "Introdução", |
|||
"Create": "Criar", |
|||
"NewProject": "Novo projeto", |
|||
"DirectDownload": "Download direto", |
|||
"ProjectName": "Nome do projeto", |
|||
"ProjectType": "Tipo de projeto", |
|||
"DatabaseProvider": "Provedor de banco de dados", |
|||
"NTier": "N-Tier", |
|||
"IncludeUserInterface": "Incluir interface do usuário", |
|||
"CreateNow": "Criar agora", |
|||
"TheStartupProject": "O projeto de inicialização", |
|||
"Tutorial": "Tutorial", |
|||
"UsingCLI": "Usando CLI", |
|||
"SeeDetails": "Ver detalhes", |
|||
"AbpShortDescription": "ABP é uma arquitetura completa e uma forte infraestrutura para criar aplicativos da web modernos! Segue as melhores práticas e convenções para fornecer uma sólida experiência de desenvolvimento.", |
|||
"SourceCodeUpper": "CÓDIGO FONTE", |
|||
"LatestReleaseLogs": "Últimos registros de lançamento", |
|||
"Infrastructure": "Infra-estrutura", |
|||
"Architecture": "Arquitetura", |
|||
"Modular": "Modular", |
|||
"DontRepeatYourself": "Não se repita", |
|||
"DeveloperFocused": "Desenvolvedor focado", |
|||
"FullStackApplicationInfrastructure": "Infraestrutura de aplicativos full stack.", |
|||
"DomainDrivenDesign": "Design Orientado a Domínio", |
|||
"DomainDrivenDesignExplanation": "Projetado e desenvolvido com base nos padrões e princípios DDD. Fornece um modelo em camadas para seu aplicativo.", |
|||
"Authorization": "Autorização", |
|||
"AuthorizationExplanation": "Autorização avançada com usuário, função e sistema de permissão refinado. Criada na biblioteca Microsoft Identity.", |
|||
"MultiTenancy": "Múltiplos inquilinos", |
|||
"MultiTenancyExplanation": "Aplicativos SaaS facilitados! Multilocação integrada do banco de dados à interface do usuário.", |
|||
"CrossCuttingConcerns": "Preocupações transversais", |
|||
"CrossCuttingConcernsExplanation": "Infraestrutura completa para autorização, validação, tratamento de exceções, armazenamento em cache, log de auditoria, gerenciamento de transações e assim por diante.", |
|||
"BuiltInBundlingMinification": "Pacote & Minificação Integrados", |
|||
"BuiltInBundlingMinificationExplanation": "Pare de usar ferramentas externas para empacotamento e minificação. O ABP oferece uma maneira mais simples, dinâmica, poderosa, modular e integrada!", |
|||
"VirtualFileSystem": "Sistema de arquivos virtual", |
|||
"VirtualFileSystemExplanation": "Incorpore visualizações, scripts, estilos, imagens ... aos pacotes/bibliotecas e reutilize-os em diferentes aplicativos.", |
|||
"Theming": "Theming", |
|||
"ThemingExplanation": "Use e personalize o tema da interface do usuário padrão baseado em bootstrap-based ou crie o seu próprio.", |
|||
"BootstrapTagHelpersDynamicForms": "Bootstrap Tag Helpers & Dynamic Forms", |
|||
"BootstrapTagHelpersDynamicFormsExplanation": "Sistema de tarefas em segundo plano integrado que pode ser integrado ao Hangfire, RabbitMQ ou a qualquer ferramenta que você desejar.", //TODO explanation doesn't match. |
|||
"HTTPAPIsDynamicProxies": "APIs HTTP e proxies dinâmicos", |
|||
"HTTPAPIsDynamicProxiesExplanation": "Exponha automaticamente os serviços de aplicativo como APIs HTTP do estilo REST e consuma com proxies JavaScript & C # dinâmicos.", |
|||
"CompleteArchitectureInfo": "Arquitetura moderna para criar soluções de software sustentáveis.", |
|||
"DomainDrivenDesignBasedLayeringModelExplanation": "Ajuda você a implementar uma arquitetura em camadas baseada em DDD e a construir uma base de código sustentável.", |
|||
"DomainDrivenDesignBasedLayeringModelExplanationCont": "Fornece modelos de inicialização, abstrações, classes base, serviços, documentação e guias para ajudá-lo a desenvolver seu aplicativo com base nos padrões e princípios DDD.", |
|||
"MicroserviceCompatibleModelExplanation": "O framework principal e os módulos de pré-construção foram projetados para a arquitetura de microsserviço.", |
|||
"MicroserviceCompatibleModelExplanationCont": "Fornece infraestrutura, integrações, amostras e documentação para implementar soluções de microsserviço mais facilmente, enquanto isso não traga complexidade adicional se você quiser um aplicativo monolítico.", |
|||
"ModularInfo": "O ABP fornece um sistema completo de modularidade para permitir o desenvolvimento de módulos de aplicativos reutilizáveis.", |
|||
"PreBuiltModulesThemes": "Módulos pré-construídos & Temas", |
|||
"PreBuiltModulesThemesExplanation": "Módulos e temas de código aberto e comerciais estão prontos para uso em seu aplicativo de negócios.", |
|||
"NuGetNPMPackages": "Pacotes NuGet & NPM", |
|||
"NuGetNPMPackagesExplanation": "Distribuído como pacotes NuGet & NPM. Fácil de instalar e atualizar.", |
|||
"ExtensibleReplaceable": "Extensível/Substituível", |
|||
"ExtensibleReplaceableExplanation": "Todos os serviços e módulos são projetados para extensibilidade. Você pode substituir serviços, páginas, estilos, componentes...", |
|||
"CrossCuttingConcernsExplanation2": "Mantenha seu código mais limpo e concentre-se em seu próprio código comercial.", |
|||
"CrossCuttingConcernsExplanation3": "Não perca tempo para implementar requisitos de aplicativos comuns repetidamente.", |
|||
"AuthenticationAuthorization": "Autenticação & Autorização", |
|||
"ExceptionHandling": "Manipulação de exceção", |
|||
"Validation": "Validação", |
|||
"DatabaseConnection": "Conexão com o Banco de Dados", |
|||
"TransactionManagement": "Gerenciamento de transações", |
|||
"AuditLogging": "Log de auditoria", |
|||
"Caching": "Armazenamento em cache", |
|||
"Multitenancy": "Múltiplos inquilinos", |
|||
"DataFiltering": "Filtragem de dados", |
|||
"ConventionOverConfiguration": "Convenção sobre configuração", |
|||
"ConventionOverConfigurationExplanation": "O ABP implementa convenções comuns de aplicativos por padrão com uma configuração mínima ou zero.", |
|||
"ConventionOverConfigurationExplanationList1": "Registra automaticamente serviços conhecidos na injeção de dependência.", |
|||
"ConventionOverConfigurationExplanationList2": "Expõe os serviços de aplicativos como APIs HTTP, nomeando convenções.", |
|||
"ConventionOverConfigurationExplanationList3": "Cria proxies de clientes HTTP dinâmicos para C # e JavaScript.", |
|||
"ConventionOverConfigurationExplanationList4": "Fornece repositórios padrão para suas entidades.", |
|||
"ConventionOverConfigurationExplanationList5": "Gerencia a unidade de trabalho por solicitação da Web ou método de serviço de aplicativo.", |
|||
"ConventionOverConfigurationExplanationList6": "Publica, cria, atualiza e exclui eventos para suas entidades.", |
|||
"BaseClasses": "Classes base", |
|||
"BaseClassesExplanation": "Classes base pré-criadas para padrões de aplicativos comuns.", |
|||
"DeveloperFocusedExplanation": "O ABP é para desenvolvedores.", |
|||
"DeveloperFocusedExplanationCont": "Tem como objetivo simplificar o desenvolvimento diário de seu software, sem restringir o trabalho de baixo nível quando necessário.", |
|||
"SeeAllFeatures": "Veja todos os recursos", |
|||
"CLI_CommandLineInterface": "CLI (Command Line Interface)", |
|||
"CLI_CommandLineInterfaceExplanation": "A CLI é automatizada para criar novos projetos e adicionar módulos ao seu aplicativo.", |
|||
"StartupTemplates": "Modelos de inicialização", |
|||
"StartupTemplatesExplanation": "Vários modelos de inicialização fornecem uma solução totalmente configurada para iniciar rapidamente seu desenvolvimento.", |
|||
"BasedOnFamiliarTools": "Baseado em ferramentas familiares", |
|||
"BasedOnFamiliarToolsExplanation": "Construído e integrado a ferramentas populares que você já conhece. Baixa curva de aprendizado, fácil adaptação, desenvolvimento confortável.", |
|||
"ORMIndependent": "ORM Independente", |
|||
"ORMIndependentExplanation": "O framework principal é independente do ORM/banco de dados e pode funcionar com qualquer fonte de dados. Os provedores Entity Framework Core e MongoDB já estão disponíveis.", |
|||
"Features": "Recursos", |
|||
"ABPCLI": "ABP CLI", |
|||
"Modularity": "Modularidade", |
|||
"BootstrapTagHelpers": "Bootstrap Tag Helpers", |
|||
"DynamicForms": "Formulários dinâmicos", |
|||
"BundlingMinification": "Empacotamento e Minificação", |
|||
"BackgroundJobs": "Trabalhos em segundo plano", |
|||
"DDDInfrastructure": "Infraestrutura DDD", |
|||
"DomainDrivenDesignInfrastructure": "Infraestrutura de Design Orientada a Domínio", |
|||
"AutoRESTAPIs": "APIs REST automáticas", |
|||
"DynamicClientProxies": "Proxies de cliente dinâmicos", |
|||
"DistributedEventBus": "Barramento de Eventos Distribuídos", |
|||
"DistributedEventBusWithRabbitMQIntegration": "Barramento de Eventos Distribuídos com Integração RabbitMQ", |
|||
"TestInfrastructure": "Infraestrutura de Teste", |
|||
"AuditLogging": "Log de auditoria", |
|||
"AuditLoggingEntityHistories": "Log de auditoria e históricos de entidades", |
|||
"ObjectToObjectMapping": "Objeto para Mapeamento de Objetos", |
|||
"EmailSMSAbstractions": "Abstrações de E-mail e SMS", |
|||
"EmailSMSAbstractionsWithTemplatingSupport": "Abstrações de e-mail e SMS com suporte a modelos", |
|||
"Localization": "Localização", |
|||
"SettingManagement": "Gerenciamento de configurações", |
|||
"ExtensionMethods": "Métodos de extensão", |
|||
"ExtensionMethodsHelpers": "Métodos de extensão & Helpers", |
|||
"AspectOrientedProgramming": "Programação Orientada a Aspectos", |
|||
"DependencyInjection": "Injeção de dependência", |
|||
"DependencyInjectionByConventions": "Injeção de dependência por convenções", |
|||
"ABPCLIExplanation": "O ABP CLI (Command Line Interface) é uma ferramenta de linha de comando para executar algumas operações comuns em soluções baseadas em ABP.", |
|||
"ModularityExplanation": "O ABP fornece uma infraestrutura completa para criar seus próprios módulos de aplicativos, que podem ter entidades, serviços, integração de banco de dados, APIs, componentes de interface do usuário e assim por diante ...", //TODO: strong "your own application modules",- |
|||
"MultiTenancyExplanation": "ABP framework não apenas suporta o desenvolvimento de aplicativos com vários inquilinos, mas também faz com que seu código desconheça a multilocação.", |
|||
"MultiTenancyExplanation2": "Pode determinar automaticamente o inquilino atual, isolar os dados de inquilinos diferentes um do outro.", |
|||
"MultiTenancyExplanation3": "Suporta abordagens de banco de dados único, banco de dados por inquilino e híbrido.", |
|||
"MultiTenancyExplanation4": "Você se concentra no seu código comercial e deixa o framework lidar com a multilocação em seu nome.", |
|||
"BootstrapTagHelpersExplanation": "Em vez de escrever manualmente os detalhes repetidos dos componentes do bootstrap, use os tag helpers da ABP para simplificá-lo e tirar proveito do intellisense. Você pode definitivamente usar o Bootstrap sempre que precisar.", |
|||
"DynamicFormsExplanation": "Formulário dinâmico e entrada de tag helpers pode criar o formulário completo a partir de uma classe C# como modelo.", |
|||
"AuthenticationAuthorizationExplanation": "Opções avançadas de autenticação e autorização integradas ao ASP.NET Core Identity & IdentityServer4. Fornece um sistema de permissões extensível e detalhado.", |
|||
"CrossCuttingConcernsExplanation": "Não se repita para implementar todas essas coisas comuns repetidamente. Concentre-se no seu código comercial e permita que a ABP os automatize por convenções.", |
|||
"DatabaseConnectionTransactionManagement": "Gerenciamento de conexão e transação de banco de dados", |
|||
"CorrelationIdTracking": "Rastreamento de ID de correlação", |
|||
"BundlingMinificationExplanation": "A ABP oferece um sistema de empacotamento e minificação simples, dinâmico, poderoso, modular e embutido.", |
|||
"VirtualFileSystemnExplanation": "O Sistema de Arquivos Virtual possibilita gerenciar arquivos que não existem fisicamente no sistema de arquivos (disco). É usado principalmente para incorporar arquivos (js, css, image, cshtml ...) em assemblies e usar como arquivos físicos em tempo de execução.", |
|||
"ThemingExplanation": "O sistema Theming permite o desenvolvimento independente do tema do aplicativo e dos módulos, definindo um conjunto de bibliotecas e layouts básicos comuns, com base na estrutura mais recente do Bootstrap.", |
|||
"DomainDrivenDesignInfrastructureExplanation": "Uma infraestrutura completa para criar aplicativos em camadas com base nos padrões e princípios de Design Orientado a Domínio;", |
|||
"Specification": "Especificação", |
|||
"Repository": "Repositório", |
|||
"DomainService": "Serviço de Domínio", |
|||
"ValueObject": "Value Object", |
|||
"ApplicationService": "Serviço de Aplicativo", |
|||
"DataTransferObject": "Objeto de transferência de dados", |
|||
"AggregateRootEntity": "Raiz agregada, entidade", |
|||
"AutoRESTAPIsExplanation": "O ABP pode configurar automaticamente seus serviços de aplicativo como controladores de API por convenção.", |
|||
"DynamicClientProxiesExplanation": "Consumir facilmente suas APIs de JavaScript e C # clientes.", |
|||
"DistributedEventBusWithRabbitMQIntegrationExplanation": "Publique e consuma facilmente eventos distribuídos usando o Barramento de Eventos Distribuídos interno com a integração RabbitMQ disponível.", |
|||
"TestInfrastructureExplanation": "A estrutura foi desenvolvida para testes de unidade e integração. Fornece classes básicas para facilitar. Os modelos de inicialização são pré-configurados para teste.", |
|||
"AuditLoggingEntityHistoriesExplanation": "Registro de auditoria interno para aplicativos críticos para os negócios. Solicitação, serviço, log de auditoria no nível do método e histórico de entidades com detalhes no nível da propriedade.", |
|||
"EmailSMSAbstractionsWithTemplatingSupportExplanation": "As abstrações IEmailSender e ISmsSender dissociam sua lógica de aplicativo da infraestrutura. O sistema avançado de modelo de email permite criar e localizar modelos de email e usá-lo facilmente sempre que necessário.", |
|||
"LocalizationExplanation": "O sistema de localização permite criar recursos em arquivos JSON simples e usá-los para localizar sua interface do usuário. Ele suporta cenários avançados como herança, extensões e integração de JavaScript, enquanto é totalmente compatível com o sistema de localização do AspNet Core.", |
|||
"SettingManagementExplanation": "Defina as configurações do seu aplicativo e obtenha valores no tempo de execução com base na configuração atual, inquilino e usuário.", |
|||
"ExtensionMethodsHelpersExplanation": "Não se repita, mesmo em partes triviais do código. Extensões e helpers para tipos padrão tornam seu código muito mais limpo e fácil de escrever.", |
|||
"AspectOrientedProgrammingExplanation": "Fornece uma infraestrutura confortável para criar proxies dinâmicos e implementar a Programação Orientada a Aspectos. Intercepte qualquer classe e execute seu código antes e depois de cada execução de método.", |
|||
"DependencyInjectionByConventionsExplanation": "Não há necessidade de registrar suas classes na injeção de dependência manualmente. Registra automaticamente tipos de serviço comuns por convenção. Para outros tipos de serviços, você pode usar interfaces e atributos para facilitar e colocar no local.", |
|||
"DataFilteringExplanation": "Defina e use filtros de dados que serão aplicados automaticamente quando você consultar entidades do banco de dados. Os filtros Soft Delete e MultiTenant são fornecidos imediatamente quando você implementa interfaces simples.", |
|||
"PublishEvents": "Publicar eventos", |
|||
"HandleEvents": "Manipular Eventos", |
|||
"AndMore": "e mais...", |
|||
"Code": "Código", |
|||
"Result": "Resultado", |
|||
"SeeTheDocumentForMoreInformation": "Consulte o <a href=\"{1}\">{0} documento</a> para obter mais informações", |
|||
"IndexPageHeroSection": "<span class=\"first-line shine\"><strong>código aberto</strong></span><span class=\"second-line text-uppercase\">Aplicativo da Web<br />Framework </span><span class=\"third-line shine2\"><strong>para o ASP.NET Core</strong></span>", |
|||
"UiFramework": "UI Framework", |
|||
"EmailAddress": "Endereço de email" |
|||
} |
|||
} |
|||
@ -0,0 +1,10 @@ |
|||
<Project> |
|||
<PropertyGroup> |
|||
<LangVersion>latest</LangVersion> |
|||
<NoWarn>$(NoWarn);CS1591</NoWarn> |
|||
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> |
|||
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> |
|||
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> |
|||
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> |
|||
</PropertyGroup> |
|||
</Project> |
|||
@ -0,0 +1,27 @@ |
|||
{ |
|||
"iisSettings": { |
|||
"windowsAuthentication": false, |
|||
"anonymousAuthentication": true, |
|||
"iisExpress": { |
|||
"applicationUrl": "http://localhost:53450/", |
|||
"sslPort": 0 |
|||
} |
|||
}, |
|||
"profiles": { |
|||
"IIS Express": { |
|||
"commandName": "IISExpress", |
|||
"launchBrowser": true, |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
} |
|||
}, |
|||
"Volo.Abp.AspNetCore.Authentication.OAuth": { |
|||
"commandName": "Project", |
|||
"launchBrowser": true, |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
}, |
|||
"applicationUrl": "http://localhost:53451/" |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
{ |
|||
"iisSettings": { |
|||
"windowsAuthentication": false, |
|||
"anonymousAuthentication": true, |
|||
"iisExpress": { |
|||
"applicationUrl": "http://localhost:53760/", |
|||
"sslPort": 0 |
|||
} |
|||
}, |
|||
"profiles": { |
|||
"IIS Express": { |
|||
"commandName": "IISExpress", |
|||
"launchBrowser": true, |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
} |
|||
}, |
|||
"Volo.Abp.AspNetCore.MultiTenancy": { |
|||
"commandName": "Project", |
|||
"launchBrowser": true, |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
}, |
|||
"applicationUrl": "http://localhost:53763/" |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
{ |
|||
"iisSettings": { |
|||
"windowsAuthentication": false, |
|||
"anonymousAuthentication": true, |
|||
"iisExpress": { |
|||
"applicationUrl": "http://localhost:52302/", |
|||
"sslPort": 0 |
|||
} |
|||
}, |
|||
"profiles": { |
|||
"IIS Express": { |
|||
"commandName": "IISExpress", |
|||
"launchBrowser": true, |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
} |
|||
}, |
|||
"Volo.Abp.AspNetCore.Mvc.Client": { |
|||
"commandName": "Project", |
|||
"launchBrowser": true, |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
}, |
|||
"applicationUrl": "http://localhost:52303/" |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,116 @@ |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
using Microsoft.AspNetCore.Http; |
|||
using Microsoft.Extensions.Caching.Distributed; |
|||
using Volo.Abp.AspNetCore.Mvc.MultiTenancy; |
|||
using Volo.Abp.Caching; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.Http.Client.DynamicProxying; |
|||
using Volo.Abp.MultiTenancy; |
|||
using Volo.Abp.Threading; |
|||
|
|||
namespace Volo.Abp.AspNetCore.Mvc.Client |
|||
{ |
|||
public class RemoteTenantStore : ITenantStore, ITransientDependency |
|||
{ |
|||
protected IHttpClientProxy<IAbpTenantAppService> Proxy { get; } |
|||
protected IHttpContextAccessor HttpContextAccessor { get; } |
|||
protected IDistributedCache<TenantConfiguration> Cache { get; } |
|||
|
|||
public RemoteTenantStore( |
|||
IHttpClientProxy<IAbpTenantAppService> proxy, |
|||
IHttpContextAccessor httpContextAccessor, |
|||
IDistributedCache<TenantConfiguration> cache) |
|||
{ |
|||
Proxy = proxy; |
|||
HttpContextAccessor = httpContextAccessor; |
|||
Cache = cache; |
|||
} |
|||
|
|||
public async Task<TenantConfiguration> FindAsync(string name) |
|||
{ |
|||
var cacheKey = CreateCacheKey(name); |
|||
var httpContext = HttpContextAccessor?.HttpContext; |
|||
|
|||
if (httpContext != null && httpContext.Items[cacheKey] is TenantConfiguration tenantConfiguration) |
|||
{ |
|||
return tenantConfiguration; |
|||
} |
|||
|
|||
tenantConfiguration = await Cache.GetOrAddAsync( |
|||
cacheKey, |
|||
async () => CreateTenantConfiguration(await Proxy.Service.FindTenantByNameAsync(name)), |
|||
() => new DistributedCacheEntryOptions |
|||
{ |
|||
AbsoluteExpirationRelativeToNow = |
|||
TimeSpan.FromMinutes(5) //TODO: Should be configurable.
|
|||
} |
|||
); |
|||
|
|||
if (httpContext != null) |
|||
{ |
|||
httpContext.Items[cacheKey] = tenantConfiguration; |
|||
} |
|||
|
|||
return tenantConfiguration; |
|||
} |
|||
|
|||
public async Task<TenantConfiguration> FindAsync(Guid id) |
|||
{ |
|||
var cacheKey = CreateCacheKey(id); |
|||
var httpContext = HttpContextAccessor?.HttpContext; |
|||
|
|||
if (httpContext != null && httpContext.Items[cacheKey] is TenantConfiguration tenantConfiguration) |
|||
{ |
|||
return tenantConfiguration; |
|||
} |
|||
|
|||
tenantConfiguration = await Cache.GetOrAddAsync( |
|||
cacheKey, |
|||
async () => CreateTenantConfiguration(await Proxy.Service.FindTenantByIdAsync(id)), |
|||
() => new DistributedCacheEntryOptions |
|||
{ |
|||
AbsoluteExpirationRelativeToNow = |
|||
TimeSpan.FromMinutes(5) //TODO: Should be configurable.
|
|||
} |
|||
); |
|||
|
|||
if (httpContext != null) |
|||
{ |
|||
httpContext.Items[cacheKey] = tenantConfiguration; |
|||
} |
|||
|
|||
return tenantConfiguration; |
|||
} |
|||
|
|||
public TenantConfiguration Find(string name) |
|||
{ |
|||
return AsyncHelper.RunSync(() => FindAsync(name)); |
|||
} |
|||
|
|||
public TenantConfiguration Find(Guid id) |
|||
{ |
|||
return AsyncHelper.RunSync(() => FindAsync(id)); |
|||
} |
|||
|
|||
protected virtual TenantConfiguration CreateTenantConfiguration(FindTenantResultDto tenantResultDto) |
|||
{ |
|||
if (!tenantResultDto.Success || tenantResultDto.TenantId == null) |
|||
{ |
|||
return null; |
|||
} |
|||
|
|||
return new TenantConfiguration(tenantResultDto.TenantId.Value, tenantResultDto.Name); |
|||
} |
|||
|
|||
protected virtual string CreateCacheKey(string tenantName) |
|||
{ |
|||
return $"RemoteTenantStore_Name_{tenantName}"; |
|||
} |
|||
|
|||
protected virtual string CreateCacheKey(Guid tenantId) |
|||
{ |
|||
return $"RemoteTenantStore_Id_{tenantId:N}"; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,14 @@ |
|||
using System; |
|||
|
|||
namespace Volo.Abp.AspNetCore.Mvc.MultiTenancy |
|||
{ |
|||
[Serializable] |
|||
public class FindTenantResultDto |
|||
{ |
|||
public bool Success { get; set; } |
|||
|
|||
public Guid? TenantId { get; set; } |
|||
|
|||
public string Name { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Application.Services; |
|||
|
|||
namespace Volo.Abp.AspNetCore.Mvc.MultiTenancy |
|||
{ |
|||
public interface IAbpTenantAppService : IApplicationService |
|||
{ |
|||
Task<FindTenantResultDto> FindTenantByNameAsync(string name); |
|||
|
|||
Task<FindTenantResultDto> FindTenantByIdAsync(Guid id); |
|||
} |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
{ |
|||
"iisSettings": { |
|||
"windowsAuthentication": false, |
|||
"anonymousAuthentication": true, |
|||
"iisExpress": { |
|||
"applicationUrl": "http://localhost:53762/", |
|||
"sslPort": 0 |
|||
} |
|||
}, |
|||
"profiles": { |
|||
"IIS Express": { |
|||
"commandName": "IISExpress", |
|||
"launchBrowser": true, |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
} |
|||
}, |
|||
"Volo.Abp.AspNetCore.Mvc.UI.Bundling": { |
|||
"commandName": "Project", |
|||
"launchBrowser": true, |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
}, |
|||
"applicationUrl": "http://localhost:53765/" |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,52 @@ |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Application.Services; |
|||
using Volo.Abp.AspNetCore.Mvc.MultiTenancy; |
|||
using Volo.Abp.MultiTenancy; |
|||
|
|||
namespace Pages.Abp.MultiTenancy |
|||
{ |
|||
public class AbpTenantAppService : ApplicationService, IAbpTenantAppService |
|||
{ |
|||
protected ITenantStore TenantStore { get; } |
|||
|
|||
public AbpTenantAppService(ITenantStore tenantStore) |
|||
{ |
|||
TenantStore = tenantStore; |
|||
} |
|||
|
|||
public async Task<FindTenantResultDto> FindTenantByNameAsync(string name) |
|||
{ |
|||
var tenant = await TenantStore.FindAsync(name); |
|||
|
|||
if (tenant == null) |
|||
{ |
|||
return new FindTenantResultDto { Success = false }; |
|||
} |
|||
|
|||
return new FindTenantResultDto |
|||
{ |
|||
Success = true, |
|||
TenantId = tenant.Id, |
|||
Name = tenant.Name |
|||
}; |
|||
} |
|||
|
|||
public async Task<FindTenantResultDto> FindTenantByIdAsync(Guid id) |
|||
{ |
|||
var tenant = await TenantStore.FindAsync(id); |
|||
|
|||
if (tenant == null) |
|||
{ |
|||
return new FindTenantResultDto { Success = false }; |
|||
} |
|||
|
|||
return new FindTenantResultDto |
|||
{ |
|||
Success = true, |
|||
TenantId = tenant.Id, |
|||
Name = tenant.Name |
|||
}; |
|||
} |
|||
} |
|||
} |
|||
@ -1,37 +1,34 @@ |
|||
using System.Threading.Tasks; |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Volo.Abp.AspNetCore.Mvc; |
|||
using Volo.Abp.MultiTenancy; |
|||
using Volo.Abp.AspNetCore.Mvc.MultiTenancy; |
|||
|
|||
namespace Pages.Abp.MultiTenancy |
|||
{ |
|||
[Route("api/abp/multi-tenancy")] |
|||
public class AbpTenantController : AbpController |
|||
public class AbpTenantController : AbpController, IAbpTenantAppService |
|||
{ |
|||
private readonly IAbpTenantAppService _abpTenantAppService; |
|||
|
|||
protected ITenantStore TenantStore { get; } |
|||
|
|||
public AbpTenantController(ITenantStore tenantStore) |
|||
public AbpTenantController(IAbpTenantAppService abpTenantAppService) |
|||
{ |
|||
TenantStore = tenantStore; |
|||
_abpTenantAppService = abpTenantAppService; |
|||
} |
|||
|
|||
[HttpGet] |
|||
[Route("find-tenant/{name}")] |
|||
public async Task<FindTenantResult> FindTenantAsync(string name) |
|||
[Route("find-tenant/{name}")] //TODO: Remove on v1.0
|
|||
[Route("tenants/by-name/{name}")] |
|||
public async Task<FindTenantResultDto> FindTenantByNameAsync(string name) |
|||
{ |
|||
var tenant = await TenantStore.FindAsync(name); |
|||
|
|||
if (tenant == null) |
|||
{ |
|||
return new FindTenantResult{Success = false}; |
|||
} |
|||
return await _abpTenantAppService.FindTenantByNameAsync(name); |
|||
} |
|||
|
|||
return new FindTenantResult |
|||
{ |
|||
Success = true, |
|||
TenantId = tenant.Id |
|||
}; |
|||
[HttpGet] |
|||
[Route("tenants/by-id/{id}")] |
|||
public async Task<FindTenantResultDto> FindTenantByIdAsync(Guid id) |
|||
{ |
|||
return await _abpTenantAppService.FindTenantByIdAsync(id); |
|||
} |
|||
} |
|||
} |
|||
|
|||
@ -1,11 +0,0 @@ |
|||
using System; |
|||
|
|||
namespace Pages.Abp.MultiTenancy |
|||
{ |
|||
public class FindTenantResult |
|||
{ |
|||
public bool Success { get; set; } |
|||
|
|||
public Guid? TenantId { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,12 @@ |
|||
{ |
|||
"culture": "es-MX", |
|||
"texts": { |
|||
"GivenTenantIsNotAvailable": "El inquilino {0} no está disponible", |
|||
"Tenant": "Inquilino", |
|||
"Switch": "cambiar", |
|||
"Name": "Nombre", |
|||
"SwitchTenant": "Cambiar inquilino", |
|||
"SwitchTenantHint": "Deje en blanco el campo nombre para cambiar el lado del host.", |
|||
"NotSelected": "No seleccionado" |
|||
} |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
{ |
|||
"iisSettings": { |
|||
"windowsAuthentication": false, |
|||
"anonymousAuthentication": true, |
|||
"iisExpress": { |
|||
"applicationUrl": "http://localhost:53766/", |
|||
"sslPort": 0 |
|||
} |
|||
}, |
|||
"profiles": { |
|||
"IIS Express": { |
|||
"commandName": "IISExpress", |
|||
"launchBrowser": true, |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
} |
|||
}, |
|||
"Volo.Abp.AspNetCore.Mvc.UI.Packages": { |
|||
"commandName": "Project", |
|||
"launchBrowser": true, |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
}, |
|||
"applicationUrl": "http://localhost:53768/" |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
{ |
|||
"iisSettings": { |
|||
"windowsAuthentication": false, |
|||
"anonymousAuthentication": true, |
|||
"iisExpress": { |
|||
"applicationUrl": "http://localhost:53761/", |
|||
"sslPort": 0 |
|||
} |
|||
}, |
|||
"profiles": { |
|||
"IIS Express": { |
|||
"commandName": "IISExpress", |
|||
"launchBrowser": true, |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
} |
|||
}, |
|||
"Volo.Abp.AspNetCore.Mvc.UI.Widgets": { |
|||
"commandName": "Project", |
|||
"launchBrowser": true, |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
}, |
|||
"applicationUrl": "http://localhost:53764/" |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
{ |
|||
"iisSettings": { |
|||
"windowsAuthentication": false, |
|||
"anonymousAuthentication": true, |
|||
"iisExpress": { |
|||
"applicationUrl": "http://localhost:53767/", |
|||
"sslPort": 0 |
|||
} |
|||
}, |
|||
"profiles": { |
|||
"IIS Express": { |
|||
"commandName": "IISExpress", |
|||
"launchBrowser": true, |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
} |
|||
}, |
|||
"Volo.Abp.AspNetCore.Mvc": { |
|||
"commandName": "Project", |
|||
"launchBrowser": true, |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
}, |
|||
"applicationUrl": "http://localhost:53769/" |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
{ |
|||
"iisSettings": { |
|||
"windowsAuthentication": false, |
|||
"anonymousAuthentication": true, |
|||
"iisExpress": { |
|||
"applicationUrl": "http://localhost:53783/", |
|||
"sslPort": 0 |
|||
} |
|||
}, |
|||
"profiles": { |
|||
"IIS Express": { |
|||
"commandName": "IISExpress", |
|||
"launchBrowser": true, |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
} |
|||
}, |
|||
"Volo.Abp.AspNetCore.TestBase": { |
|||
"commandName": "Project", |
|||
"launchBrowser": true, |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
}, |
|||
"applicationUrl": "http://localhost:53784/" |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
{ |
|||
"iisSettings": { |
|||
"windowsAuthentication": false, |
|||
"anonymousAuthentication": true, |
|||
"iisExpress": { |
|||
"applicationUrl": "http://localhost:53374/", |
|||
"sslPort": 0 |
|||
} |
|||
}, |
|||
"profiles": { |
|||
"IIS Express": { |
|||
"commandName": "IISExpress", |
|||
"launchBrowser": true, |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
} |
|||
}, |
|||
"Volo.Abp.AspNetCore": { |
|||
"commandName": "Project", |
|||
"launchBrowser": true, |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
}, |
|||
"applicationUrl": "http://localhost:53375/" |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,9 @@ |
|||
using System; |
|||
|
|||
namespace Volo.Abp.Domain.Entities |
|||
{ |
|||
public class DisableIdGenerationAttribute : Attribute |
|||
{ |
|||
|
|||
} |
|||
} |
|||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue