diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/es.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/es.json new file mode 100644 index 0000000000..44ec873da0 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/es.json @@ -0,0 +1,14 @@ +{ + "culture": "es", + "texts": { + "Account": "Cuenta de ABP - Iniciar sesión y registrarse | ABP.IO", + "Welcome": "Bienvenido", + "UseOneOfTheFollowingLinksToContinue": "Usa uno de los siguientes links para continuar", + "FrameworkHomePage": "Página de inicio del framework", + "FrameworkDocumentation": "Documentación del framework", + "OfficialBlog": "Blog Oficial", + "CommercialHomePage": "Página de inicio comercial", + "CommercialSupportWebSite": "Sitio web de soporte comercial", + "CommunityWebSite": "Sitio web comunidad ABP" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/es.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/es.json new file mode 100644 index 0000000000..1cf2e4f365 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/es.json @@ -0,0 +1,199 @@ +{ + "culture": "es", + "texts": { + "Permission:Organizations": "Organizaciones", + "Permission:Manage": "Gestionar organizaciones", + "Permission:DiscountRequests": "Solicitudes de descuento", + "Permission:DiscountManage": "Gestionar solicitudes de descuento", + "Permission:Disable": "Desactivar", + "Permission:Enable": "Activar", + "Permission:EnableSendEmail": "Activar enviar email", + "Permission:SendEmail": "Enviar email", + "Permission:NpmPackages": "Paquetes NPM", + "Permission:NugetPackages": "Paquetes Nuget", + "Permission:Maintenance": "Mantenimiento", + "Permission:Maintain": "Mantener", + "Permission:ClearCaches": "Borrar cachés", + "Permission:Modules": "Módulos", + "Permission:Packages": "Paquetes", + "Permission:Edit": "Editar", + "Permission:Delete": "Borrar", + "Permission:Create": "Crear", + "Permission:Accounting": "Contabilidad", + "Permission:Accounting:Quotation": "Cotización", + "Permission:Accounting:Invoice": "Factura", + "Menu:Organizations": "Organizaciones", + "Menu:Accounting": "Contabilidad", + "Menu:Packages": "Paquetes", + "Menu:DiscountRequests": "Solicitudes de descuento", + "NpmPackageDeletionWarningMessage": "Este NPM paquete será borrado. ¿Quieres confirmar?", + "NugetPackageDeletionWarningMessage": "Este NPM paquete será borrado. ¿Quieres confirmar?", + "ModuleDeletionWarningMessage": "Este NPM paquete será borrado. ¿Quieres confirmar?", + "Name": "Nombre", + "DisplayName": "Nombre para mostrar", + "ShortDescription": "Descripción corta", + "NameFilter": "Nombre", + "CreationTime": "Fecha de creación", + "IsPro": "Es pro", + "ShowOnModuleList": "Mostrar en la lista de módulos", + "EfCoreConfigureMethodName": "configurar nombre de método", + "IsProFilter": "Es pro", + "ApplicationType": "tipo de aplicación", + "Target": "Destino", + "TargetFilter": "Destino", + "ModuleClass": "Módulo de clase", + "NugetPackageTarget.DomainShared": "Dominio compartido", + "NugetPackageTarget.Domain": "Dominio", + "NugetPackageTarget.Application": "Aplicación", + "NugetPackageTarget.ApplicationContracts": "Contratos de aplicación", + "NugetPackageTarget.HttpApi": "Http Api", + "NugetPackageTarget.HttpApiClient": "Cliente Http Api", + "NugetPackageTarget.Web": "Web", + "NugetPackageTarget.EntityFrameworkCore": "Delete todo EntityFramework Core", + "NugetPackageTarget.MongoDB": "MongoDB", + "Edit": "Editar", + "Delete": "Borrar", + "Refresh": "Refrescar", + "NpmPackages": "Paquetes NPM", + "NugetPackages": "Paquetes Nuget", + "NpmPackageCount": "Número de paquetes NPM", + "NugetPackageCount": "Número de paquetes Nuget", + "Module": "Módulos", + "ModuleInfo": "Info de módulo", + "CreateANpmPackage": "Crear un paquete NPM", + "CreateAModule": "Crear un módulo", + "CreateANugetPackage": "Crear un paquete de Nuget", + "AddNew": "Añadir nuevo", + "PackageAlreadyExist{0}": "\"{0}\" paquete ya se encuentra añadido", + "ModuleAlreadyExist{0}": "\"{0}\" módulo ya se encuentra añadido.", + "ClearCache": "Borrar caché", + "SuccessfullyCleared": "Borrado satisfactoriamente", + "Menu:NpmPackages": "Paquetes de NPM", + "Menu:Modules": "Módulos", + "Menu:Maintenance": "Mantenimiento", + "Menu:NugetPackages": "Paquetes Nuget", + "CreateAnOrganization": "Crear una organización", + "Organizations": "Organizaciones", + "LongName": "Nombre largo", + "LicenseType": "Tipo de licencia", + "MissingLicenseTypeField": "El campo tipo de licencia es requerido!", + "LicenseStartTime": "Fecha de inicio de licencia", + "LicenseEndTime": "Fecha de caducidad de licencia", + "AllowedDeveloperCount": "Número de desarrolladores permitidos", + "UserNameOrEmailAddress": "Nombre de usuario o", + "AddOwner": "Añadir propietario", + "UserName": "Nombre de usuario", + "Email": "Email", + "Developers": "Desarrolladores", + "AddDeveloper": "Añadir desarrollador", + "Create": "Crear", + "UserNotFound": "Usuario no encontrado", + "{0}WillBeRemovedFromDevelopers": "{0} será eliminado de desarrolladores, ¿deseas continuar?", + "{0}WillBeRemovedFromOwners": "{0} será eliminado de propietarios, ¿deseas continuar?", + "Computers": "Ordenadores", + "UniqueComputerId": "Id única de ordenador", + "LastSeenDate": "Fecha de visto por última vez", + "{0}Computer{1}WillBeRemovedFromRecords": "El ordenador {0} ({1}) será eliminado de los registros", + "OrganizationDeletionWarningMessage": "La organización será eliminada", + "DeletingLastOwnerWarningMessage": "Una organización debe tener al menos un propietario!. Por lo tanto, tu no puedes eliminar este propietario", + "This{0}AlreadyExistInThisOrganization": "Este/a {0} ya existe en esta organización", + "AreYouSureYouWantToDeleteAllComputers": "Estás seguro tu quieres eliminar todos los ordenadores", + "DeleteAll": "Eliminar todo", + "DoYouWantToCreateNewUser": "¿Quieres crear un nuevo usuario?", + "MasterModules": "Módulos maestros", + "OrganizationName": "Nombre de organización", + "CreationDate": "Fecha de creación", + "LicenseStartDate": "Fecha de inicio de licencia", + "LicenseEndDate": "Fecha de caducidad de licencia", + "OrganizationNamePlaceholder": "Nombre de organización...", + "TotalQuestionCountPlaceholder": "Número total de preguntas...", + "RemainingQuestionCountPlaceholder": "Número de preguntas pendientes", + "LicenseTypePlaceholder": "Tipo de licencia...", + "CreationDatePlaceholder": "Fecha de creación...", + "LicenseStartDatePlaceholder": "Fecha de inicio de licencia...", + "LicenseEndDatePlaceholder": "Fecha de caducidad de licencia...", + "UsernameOrEmail": "Usuario o email", + "UsernameOrEmailPlaceholder": "Usuario o email...", + "Member": "Miembro", + "PurchaseOrderNo": "Número de orden de compra", + "QuotationDate": "", + "CompanyName": "", + "CompanyAddress": "", + "Price": "", + "DiscountText": "", + "DiscountQuantity": "", + "DiscountPrice": "", + "Quotation": "", + "ExtraText": "", + "ExtraAmount": "", + "DownloadQuotation": "", + "Invoice": "", + "TaxNumber": "", + "InvoiceNumber": "", + "InvoiceDate": "", + "InvoiceNote": "", + "Quantity": "", + "AddProduct": "", + "AddProductWarning": "", + "TotalPrice": "", + "Generate": "", + "MissingQuantityField": "", + "MissingPriceField": "", + "CodeUsageStatus": "", + "Country": "", + "DeveloperCount": "", + "RequestCode": "", + "WebSite": "", + "GithubUsername": "", + "PhoneNumber": "", + "ProjectDescription": "", + "Referrer": "", + "DiscountRequests": "", + "Copylink": "", + "Disable": "", + "Enable": "", + "EnableSendEmail": "", + "SendEmail": "", + "SuccessfullyDisabled": "", + "SuccessfullyEnabled": "", + "EmailSent": "", + "SuccessfullySent": "", + "SuccessfullyDeleted": "", + "DiscountRequestDeletionWarningMessage": "", + "BusinessType": "", + "TotalQuestionCount": "", + "RemainingQuestionCount": "", + "TotalQuestionMustBeGreaterWarningMessage": "", + "QuestionCountsMustBeGreaterThanZero": "", + "UnlimitedQuestionCount": "", + "Notes": "", + "Menu:Community": "", + "Menu:Articles": "", + "Wait": "", + "Approve": "", + "Reject": "", + "Details": "", + "Url": "", + "Title": "", + "ContentSource": "", + "Status": "", + "ReadArticle": "", + "ArticleHasBeenWaiting": "", + "ArticleHasBeenApproved": "", + "ArticleHasBeenRejected": "", + "Permission:Community": "", + "Permission:CommunityArticle": "", + "Link": "", + "Enum:ContentSource:0": "", + "Enum:ContentSource:1": "", + "Enum:Status:0": "", + "Enum:Status:1": "", + "Enum:Status:2": "", + "Summary": "", + "AuthorName": "", + "CoverImage": "", + "RemoveCacheConfirmationMessage": "", + "SuccessfullyRemoved": "", + "RemoveCache": "" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/es.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/es.json new file mode 100644 index 0000000000..2b210888c5 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/es.json @@ -0,0 +1,33 @@ +{ + "culture": "es", + "texts": { + "Volo.AbpIo.Domain:010004": "", + "Volo.AbpIo.Domain:010005": "", + "Volo.AbpIo.Domain:010006": "", + "Volo.AbpIo.Domain:010007": "", + "Volo.AbpIo.Domain:010008": "", + "Volo.AbpIo.Domain:010009": "", + "Volo.AbpIo.Domain:010010": "", + "Volo.AbpIo.Domain:010011": "", + "Volo.AbpIo.Domain:010012": "", + "Volo.AbpIo.Domain:020001": "", + "Volo.AbpIo.Domain:020002": "", + "Volo.AbpIo.Domain:020003": "", + "Volo.AbpIo.Domain:020004": "", + "WantToLearn?": "", + "ReadyToGetStarted?": "", + "JoinOurCommunity": "", + "GetStartedUpper": "", + "ForkMeOnGitHub": "", + "Features": "", + "GetStarted": "", + "Documents": "", + "Community": "", + "ContributionGuide": "", + "Blog": "", + "Commercial": "", + "MyAccount": "", + "SeeDocuments": "", + "Samples": "" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json new file mode 100644 index 0000000000..7aa24608d4 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json @@ -0,0 +1,35 @@ +{ + "culture": "es", + "texts": { + "OrganizationManagement": "", + "OrganizationList": "", + "Volo.AbpIo.Commercial:010003": "", + "OrganizationNotFoundMessage": "", + "DeveloperCount": "", + "QuestionCount": "", + "Unlimited": "", + "Owners": "", + "AddMember": "", + "AddOwner": "", + "AddDeveloper": "", + "UserName": "", + "Name": "", + "EmailAddress": "", + "Developers": "", + "LicenseType": "Tipo de licencia", + "Manage": "", + "StartDate": "", + "EndDate": "", + "Modules": "Módulos", + "LicenseExtendMessage": "", + "LicenseUpgradeMessage": "", + "LicenseAddDeveloperMessage": "", + "Volo.AbpIo.Commercial:010004": "", + "MyOrganizations": "", + "ApiKey": "", + "UserNameNotFound": "", + "SuccessfullyAddedToNewsletter": "", + "MyProfile": "", + "EmailNotValid": "" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/es.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/es.json new file mode 100644 index 0000000000..d495720a93 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/es.json @@ -0,0 +1,90 @@ +{ + "culture": "es", + "texts": { + "Permission:CommunityArticle": "", + "Permission:Edit": "", + "Waiting": "", + "Approved": "", + "Rejected": "", + "Wait": "", + "Approve": "", + "Reject": "", + "ReadArticle": "", + "Status": "", + "ContentSource": "", + "Details": "", + "Url": "", + "Title": "", + "CreationTime": "", + "Save": "Guardar", + "SameUrlAlreadyExist": "", + "UrlIsNotValid": "", + "UrlNotFound": "", + "UrlContentNotFound": "", + "Summary": "", + "MostRead": "", + "Latest": "", + "ContributeAbpCommunity": "", + "SubmitYourArticle": "", + "ContributionGuide": "", + "BugReport": "", + "SeeAllArticles": "", + "WelcomeToABPCommunity!": "", + "MyProfile": "", + "MyOrganizations": "", + "EmailNotValid": "", + "FeatureRequest": "", + "CreateArticleTitleInfo": "", + "CreateArticleUrlInfo": "", + "CreateArticleSummaryInfo": "", + "CreateArticleCoverInfo": "", + "ThisExtensionIsNotAllowed": "", + "TheFileIsTooLarge": "", + "GoToTheArticle": "", + "Contribute": "", + "OverallProgress": "", + "Done": "", + "Open": "", + "Closed": "", + "LatestQuestionOnThe": "", + "Stackoverflow": "", + "Votes": "", + "Answer": "", + "Views": "", + "Answered": "", + "WaitingForYourAnswer": "", + "Asked": "", + "AllQuestions": "", + "NextVersion": "", + "MilestoneErrorMessage": "", + "QuestionItemErrorMessage": "", + "Oops": "", + "CreateArticleSuccessMessage": "", + "ChooseCoverImage": "", + "CoverImage": "", + "ShareYourExperiencesWithTheABPFramework": "", + "Optional": "", + "UpdateUserWebSiteInfo": "", + "UpdateUserTwitterInfo": "", + "UpdateUserGithubInfo": "", + "UpdateUserLinkedinInfo": "", + "UpdateUserCompanyInfo": "", + "UpdateUserJobTitleInfo": "", + "UserName": "", + "Company": "", + "PersonalWebsite": "", + "RegistrationDate": "", + "Social": "", + "Biography": "", + "HasNoPublishedArticlesYet": "", + "Author": "", + "LatestGithubAnnouncements": "", + "SeeAllAnnouncements": "", + "LatestBlogPost": "", + "Edit": "", + "ProfileImageChange": "", + "BlogItemErrorMessage": "", + "PlannedReleaseDate": "", + "CommunityArticleRequestErrorMessage": "" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json new file mode 100644 index 0000000000..76132f71ba --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json @@ -0,0 +1,189 @@ +{ + "culture": "es", + "texts": { + "GetStarted": "", + "Create": "", + "NewProject": "", + "DirectDownload": "", + "ProjectName": "", + "ProjectType": "", + "DatabaseProvider": "", + "NTier": "", + "IncludeUserInterface": "", + "CreateNow": "", + "TheStartupProject": "", + "Tutorial": "", + "UsingCLI": "", + "SeeDetails": "", + "AbpShortDescription": "", + "SourceCodeUpper": "", + "LatestReleaseLogs": "", + "Infrastructure": "", + "Architecture": "", + "Modular": "", + "DontRepeatYourself": "", + "DeveloperFocused": "", + "FullStackApplicationInfrastructure": "", + "DomainDrivenDesign": "", + "DomainDrivenDesignExplanation": "", + "Authorization": "", + "AuthorizationExplanation": "", + "MultiTenancy": "", + "MultiTenancyExplanationShort": "", + "CrossCuttingConcerns": "", + "CrossCuttingConcernsExplanationShort": "", + "BuiltInBundlingMinification": "", + "BuiltInBundlingMinificationExplanation": "", + "VirtualFileSystem": "", + "VirtualFileSystemExplanation": "", + "Theming": "", + "ThemingExplanationShort": "", + "BootstrapTagHelpersDynamicForms": "", + "BootstrapTagHelpersDynamicFormsExplanation": "", + "HTTPAPIsDynamicProxies": "", + "HTTPAPIsDynamicProxiesExplanation": "", + "CompleteArchitectureInfo": "", + "DomainDrivenDesignBasedLayeringModelExplanation": "", + "DomainDrivenDesignBasedLayeringModelExplanationCont": "", + "MicroserviceCompatibleModelExplanation": "", + "MicroserviceCompatibleModelExplanationCont": "", + "ModularInfo": "", + "PreBuiltModulesThemes": "", + "PreBuiltModulesThemesExplanation": "", + "NuGetNPMPackages": "", + "NuGetNPMPackagesExplanation": "", + "ExtensibleReplaceable": "", + "ExtensibleReplaceableExplanation": "", + "CrossCuttingConcernsExplanation2": "", + "CrossCuttingConcernsExplanation3": "", + "AuthenticationAuthorization": "", + "ExceptionHandling": "", + "Validation": "", + "DatabaseConnection": "", + "TransactionManagement": "", + "AuditLogging": "", + "Caching": "", + "Multitenancy": "", + "DataFiltering": "", + "ConventionOverConfiguration": "", + "ConventionOverConfigurationExplanation": "", + "ConventionOverConfigurationExplanationList1": "", + "ConventionOverConfigurationExplanationList2": "", + "ConventionOverConfigurationExplanationList3": "", + "ConventionOverConfigurationExplanationList4": "", + "ConventionOverConfigurationExplanationList5": "", + "ConventionOverConfigurationExplanationList6": "", + "BaseClasses": "", + "BaseClassesExplanation": "", + "DeveloperFocusedExplanation": "", + "DeveloperFocusedExplanationCont": "", + "SeeAllFeatures": "", + "CLI_CommandLineInterface": "", + "CLI_CommandLineInterfaceExplanation": "", + "StartupTemplates": "", + "StartupTemplatesExplanation": "", + "BasedOnFamiliarTools": "", + "BasedOnFamiliarToolsExplanation": "", + "ORMIndependent": "", + "ORMIndependentExplanation": "", + "Features": "", + "ABPCLI": "", + "Modularity": "", + "BootstrapTagHelpers": "", + "DynamicForms": "", + "BundlingMinification": "", + "BackgroundJobs": "", + "BackgroundJobsExplanation": "", + "DDDInfrastructure": "", + "DomainDrivenDesignInfrastructure": "", + "AutoRESTAPIs": "", + "DynamicClientProxies": "", + "DistributedEventBus": "", + "DistributedEventBusWithRabbitMQIntegration": "", + "TestInfrastructure": "", + "AuditLoggingEntityHistories": "", + "ObjectToObjectMapping": "", + "ObjectToObjectMappingExplanation": "", + "EmailSMSAbstractions": "", + "EmailSMSAbstractionsWithTemplatingSupport": "", + "Localization": "", + "SettingManagement": "", + "ExtensionMethods": "", + "ExtensionMethodsHelpers": "", + "AspectOrientedProgramming": "", + "DependencyInjection": "", + "DependencyInjectionByConventions": "", + "ABPCLIExplanation": "", + "ModularityExplanation": "", + "MultiTenancyExplanation": "", + "MultiTenancyExplanation2": "", + "MultiTenancyExplanation3": "", + "MultiTenancyExplanation4": "", + "BootstrapTagHelpersExplanation": "", + "DynamicFormsExplanation": "", + "AuthenticationAuthorizationExplanation": "", + "CrossCuttingConcernsExplanation": "", + "DatabaseConnectionTransactionManagement": "", + "CorrelationIdTracking": "", + "BundlingMinificationExplanation": "", + "VirtualFileSystemnExplanation": "", + "ThemingExplanation": "", + "DomainDrivenDesignInfrastructureExplanation": "", + "Specification": "", + "Repository": "", + "DomainService": "", + "ValueObject": "", + "ApplicationService": "", + "DataTransferObject": "", + "AggregateRootEntity": "", + "AutoRESTAPIsExplanation": "", + "DynamicClientProxiesExplanation": "", + "DistributedEventBusWithRabbitMQIntegrationExplanation": "", + "TestInfrastructureExplanation": "", + "AuditLoggingEntityHistoriesExplanation": "", + "EmailSMSAbstractionsWithTemplatingSupportExplanation": "", + "LocalizationExplanation": "", + "SettingManagementExplanation": "", + "ExtensionMethodsHelpersExplanation": "", + "AspectOrientedProgrammingExplanation": "", + "DependencyInjectionByConventionsExplanation": "", + "DataFilteringExplanation": "", + "PublishEvents": "", + "HandleEvents": "", + "AndMore": "", + "Code": "", + "Result": "", + "SeeTheDocumentForMoreInformation": "", + "IndexPageHeroSection": "", + "UiFramework": "", + "EmailAddress": "", + "Mobile": "", + "ReactNative": "", + "Strong": "", + "Complete": "", + "BasedLayeringModel": "", + "Microservice": "", + "Compatible": "", + "MeeTTheABPCommunityInfo": "", + "JoinTheABPCommunityInfo": "", + "AllArticles": "", + "SubmitYourArticle": "", + "DynamicClientProxyDocument": "", + "EmailSMSAbstractionsDocument": "", + "CreateProjectWizard": "", + "TieredOption": "", + "SeparateIdentityServerOption": "", + "UseslatestPreVersion": "", + "ReadTheDocumentation": "", + "Documentation": "", + "GettingStartedTutorial": "", + "ApplicationDevelopmentTutorial": "", + "TheStartupTemplate": "", + "InstallABPCLIInfo": "", + "DifferentLevelOfNamespaces": "", + "ABPCLIExamplesInfo": "", + "SeeCliDocumentForMoreInformation": "", + "Optional": "", + "LocalFrameworkRef": "" + } +} \ No newline at end of file diff --git a/docs/en/UI/Blazor/Message.md b/docs/en/UI/Blazor/Message.md index 8373bd1d82..075e4c7beb 100644 --- a/docs/en/UI/Blazor/Message.md +++ b/docs/en/UI/Blazor/Message.md @@ -1,3 +1,122 @@ # Blazor: UI Message Service -TODO \ No newline at end of file +UI message service is used to show nice-looking messages to the user as a blocking dialog. + +## Quick Example + +Simply inject `IUiMessageService` to your page or component and call the `Success` method to show a success message. + +```csharp +namespace MyProject.Blazor.Pages +{ + public partial class Index + { + public IUiMessageService UiMessageService { get; } + + public Index(IUiMessageService uiMessageService) + { + UiMessageService = uiMessageService; + } + + public async Task SaveAsync() + { + await UiMessageService.Success("Your changes have been successfully saved!", "Congratulations"); + } + } +} +``` + +It will show a dialog on the UI: + +![blazor-message-success](../../images/blazor-message-success.png) + +If you inherit your page or component from `AbpComponentBase` class, you can use the `Message` property to access the `IUiMessageService`. + +```csharp +namespace MyProject.Blazor.Pages +{ + public partial class Index : AbpComponentBase + { + public async Task SaveAsync() + { + await Message.Success("Your changes have been successfully saved!", "Congratulations"); + } + } +} +``` + + +## Informative Messages + +There are four types of informative message functions: + +* `Info(...)` +* `Success(...)` +* `Warn(...)` +* `Error(...)` + +All of these methods get three parameters: + +* `message`: The message (`string`) to be shown. +* `title`: An optional (`string`) title. +* `options`: An optional (`Action`) to configure UI message options. + +**Example: Show an error message** + +````csharp +UiMessageService.Error('Your credit card number is not valid!'); +```` + +![blazor-message-success](../../images/blazor-message-error.png) + + +## Confirmation Message + +`IUiMessageService.Confirm(...)` method can be used to get a confirmation from the user. + +**Example** + +Use the following code to get a confirmation result from the user: + +```csharp +public async Task DeleteAsync() +{ + var confirmed = await UiMessageService.Confirm("Are you sure to delete the 'admin' role?"); + if(confirmed) + { + //Delete the 'admin' role here. + } +} +``` + +The resulting UI will be like shown below: + +![blazor-message-confirm](../../images/blazor-message-confirm.png) + +If the user has clicked the `Yes` button, the `Confirm` method's return value will be `true`. + +## UI Message Configuration + +It is easy to change default UI Message options if you like to customize messages. Provide an `action` to the `options` parameter and change the default values. + +```csharp +await UiMessageService.Success("Your changes have been successfully saved!", "Congratulations", (options) => + { + options.MessageIcon = "msg-icon-new"; + options.CenterMessage = false; + }); +``` + +List of the options that you can change by providing the `action` parameter. + +* `CenterMessage` : (Default: true) If true, the message dialogue will be centered on the screen. +* `ShowMessageIcon` : (Default: true) If true, the message dialogue will show the large icon for the current message type. +* `MessageIcon` : Overrides the build-in message icon. +* `OkButtonText` : Custom text for the Ok button. +* `OkButtonIcon` : Custom icon for the Ok button. +* `ConfirmButtonText` : Custom text for the Confirmation button. +* `ConfirmButtonIcon` : Custom icon for the Confirmation button. +* `CancelButtonText` : Custom text for the Cancel button. +* `CancelButtonIcon` : Custom icon for the Cancel button. + +> "Confirm", "Cancel" and "Yes" texts are automatically localized based on the current language. \ No newline at end of file diff --git a/docs/en/UI/Blazor/Notification.md b/docs/en/UI/Blazor/Notification.md index 09f4eb93bb..24b589b75c 100644 --- a/docs/en/UI/Blazor/Notification.md +++ b/docs/en/UI/Blazor/Notification.md @@ -1,3 +1,103 @@ # Blazor UI: Notification Service -`IUiNotificationService` is used to show toastr style notifications on the user interface. The documentation is in progress... \ No newline at end of file +`IUiNotificationService` is used to show toast style notifications on the user interface. + +## Quick Example + +Simply [inject](../../Dependency-Injection.md) `IUiNotificationService` to your page or component and call the `Success` method to show a success message. + +```csharp +namespace MyProject.Blazor.Pages +{ + public partial class Index + { + private readonly IUiNotificationService _uiNotificationService; + + public Index(IUiNotificationService uiNotificationService) + { + _uiNotificationService = uiNotificationService; + } + + public async Task DeleteAsync() + { + await _uiNotificationService.Success( + "The product 'Acme Atom Re-Arranger' has been successfully deleted." + ); + } + } +} +``` + +![blazor-notification-sucess](../../images/blazor-notification-success.png) + +If you inherit your page or component from the `AbpComponentBase` class, you can use the the `Notify` property to access the `IUiNotificationService` as a pre-injected property. + +```csharp +namespace MyProject.Blazor.Pages +{ + public partial class Index : AbpComponentBase + { + public async Task DeleteAsync() + { + await Notify.Success( + "The product 'Acme Atom Re-Arranger' has been successfully deleted." + ); + } + } +} +``` + +> You typically use `@inherits AbpComponentBase` in the `.razor` file to inherit from the `AbpComponentBase`, instead of inheriting in the code behind file. + +## Notification Types + +There are four types of pre-defined notifications; + +* `Info(...)` +* `Success(...)` +* `Warn(...)` +* `Error(...)` + +All of the methods above gets the following parameters; + +* `message`: The message (`string`) to be shown. +* `title`: An optional (`string`) title. +* `options`: An optional (`Action`) to configure notification options. + +## Configuration + +### Per Notification + +It is easy to change default notification options if you like to customize it per notification. Provide an action to the `options` parameter as shown below: + +```csharp +await UiNotificationService.Success( + "The product 'Acme Atom Re-Arranger' has been successfully deleted.", + options: (options) => + { + options.OkButtonText = + LocalizableString.Create("CustomOK"); + }); +``` + +### Available Options + +Here, the list of all available options; + +* `OkButtonText` : Custom text for the OK button. +* `OkButtonIcon` : Custom icon for the OK button + +### Global Configuration + +You can also configure global notification options to control the it in a single point. Configure the `UiNotificationOptions` [options class](../../Options.md) in the `ConfigureServices` of your [module](../../Module-Development-Basics.md): + +````csharp +Configure(options => +{ + options.OkButtonText = LocalizableString.Create("CustomOK"); +}); +```` + +The same options are available here. + +> *Per notification* configuration overrides the default values. \ No newline at end of file diff --git a/docs/en/images/blazor-message-confirm.png b/docs/en/images/blazor-message-confirm.png new file mode 100644 index 0000000000..fe03620283 Binary files /dev/null and b/docs/en/images/blazor-message-confirm.png differ diff --git a/docs/en/images/blazor-message-error.png b/docs/en/images/blazor-message-error.png new file mode 100644 index 0000000000..5192eae1e9 Binary files /dev/null and b/docs/en/images/blazor-message-error.png differ diff --git a/docs/en/images/blazor-message-success.png b/docs/en/images/blazor-message-success.png new file mode 100644 index 0000000000..592fac8b7d Binary files /dev/null and b/docs/en/images/blazor-message-success.png differ diff --git a/docs/en/images/blazor-notification-success.png b/docs/en/images/blazor-notification-success.png new file mode 100644 index 0000000000..d68dcf47d8 Binary files /dev/null and b/docs/en/images/blazor-notification-success.png differ diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/es.json b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/es.json index 4563876228..a47299924f 100644 --- a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/es.json +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/es.json @@ -1,6 +1,6 @@ { "culture": "es", "texts": { - "MaxResultCountExceededExceptionMessage": "{0} no puede tener ms de {1}! Incremente {2}.{3} en el lado del servidor para obtener ms resultados." + "MaxResultCountExceededExceptionMessage": "{0} no puede ser más de {1}! Aumente {2}. {3} en el lado del servidor para permitir más resultados." } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/es.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/es.json index da1d7fde95..5a2efc3006 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/es.json +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/es.json @@ -1,25 +1,25 @@ { "culture": "es", "texts": { - "DisplayName:Abp.Mailing.DefaultFromAddress": "Direccin de envo", - "DisplayName:Abp.Mailing.DefaultFromDisplayName": "Nombre de envo", + "DisplayName:Abp.Mailing.DefaultFromAddress": "Por defecto desde dirección", + "DisplayName:Abp.Mailing.DefaultFromDisplayName": "Por defecto desde nombre a mostrar", "DisplayName:Abp.Mailing.Smtp.Host": "Host", "DisplayName:Abp.Mailing.Smtp.Port": "Puerto", "DisplayName:Abp.Mailing.Smtp.UserName": "Nombre de usuario", - "DisplayName:Abp.Mailing.Smtp.Password": "Contrasea", + "DisplayName:Abp.Mailing.Smtp.Password": "Contraseña", "DisplayName:Abp.Mailing.Smtp.Domain": "Dominio", "DisplayName:Abp.Mailing.Smtp.EnableSsl": "Habilitar SSL", - "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "Usar las credenciales por defecto", - "Description:Abp.Mailing.DefaultFromAddress": "La direccin de envo por defecto", - "Description:Abp.Mailing.DefaultFromDisplayName": "El nombre de envo por defecto", - "Description:Abp.Mailing.Smtp.Host": "El nombre o direccin del host para transacciones SMTP.", - "Description:Abp.Mailing.Smtp.Port": "El puerto usado para transacciones SMTP.", - "Description:Abp.Mailing.Smtp.UserName": "Nombre de usuario asociado a las credenciales.", - "Description:Abp.Mailing.Smtp.Password": "La contrasea del ususario asociado a las credenciales.", - "Description:Abp.Mailing.Smtp.Domain": "El dominio o equipo que valida las credenciales.", - "Description:Abp.Mailing.Smtp.EnableSsl": "Si SmtpClient usa Secure Sockets Layer (SSL) para encriptar la coneccin.", - "Description:Abp.Mailing.Smtp.UseDefaultCredentials": "Si las credenciales por defecto se envan con los request.", - "TextTemplate:StandardEmailTemplates.Layout": "Plantilla de email por defecto", - "TextTemplate:StandardEmailTemplates.Message": "Plantilla de mensaje simple para emails" + "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "Usar credenciales por defecto", + "Description:Abp.Mailing.DefaultFromAddress": "Por defecto desde dirección", + "Description:Abp.Mailing.DefaultFromDisplayName": "Por defecto desde nombre a mostrar", + "Description:Abp.Mailing.Smtp.Host": "El nombre o dirección IP del host usado para transacciones SMTP.", + "Description:Abp.Mailing.Smtp.Port": "El puerto usado por transacciones SMTP.", + "Description:Abp.Mailing.Smtp.UserName": "Nombre de usuario asociado con los credenciales.", + "Description:Abp.Mailing.Smtp.Password": "La contraseña para el nombre de usuario asociado con los credenciales.", + "Description:Abp.Mailing.Smtp.Domain": "El dominio o nombre de equipo que verifica los credenciales.", + "Description:Abp.Mailing.Smtp.EnableSsl": "Cuando el cliente SMTP usa Secure Sockets Layer (SSL) para encriptar la conexión.", + "Description:Abp.Mailing.Smtp.UseDefaultCredentials": "Cuando los credenciales por defecto son enviados con las peticiones.", + "TextTemplate:StandardEmailTemplates.Layout": "Plantilla de Email por defecto", + "TextTemplate:StandardEmailTemplates.Message": "Simple plantilla de mensaje para emails" } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/es.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/es.json index b4ac4139b1..0a3f8ef7da 100644 --- a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/es.json +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/es.json @@ -1,23 +1,25 @@ { "culture": "es", "texts": { - "InternalServerErrorMessage": "Ocurrió un error interno en su pedido!", - "ValidationErrorMessage": "Su pedido no es válido!", - "ValidationNarrativeErrorMessageTitle": "Los siguientes errores se encontraton durante la validación.", - "DefaultErrorMessage": "Ocurrió un error!", - "DefaultErrorMessageDetail": "El servidor no envió el detalle del error.", - "DefaultErrorMessage401": "Usted no ha iniciado sessión!", - "DefaultErrorMessage401Detail": "Debe iniciar sessión para ejecutar esta operación.", - "DefaultErrorMessage403": "Usted no está autorizado!", - "DefaultErrorMessage403Detail": "Usted no puede hacer esta operación!", - "DefaultErrorMessage404": "No se encontró el recurso!", - "DefaultErrorMessage404Detail": "El recurso solicitado no se encontró en el servidor!", - "EntityNotFoundErrorMessage": "No hay una entidad {0} con el id = {1}!", + "InternalServerErrorMessage": "Un error interno ocurrido durante tu Solicitud!", + "ValidationErrorMessage": "Tu Solicitud no es valida.", + "ValidationNarrativeErrorMessageTitle": "Los siguientes errores fueron detectados durante la validación.", + "DefaultErrorMessage": "Un error ha ocurrido!", + "DefaultErrorMessageDetail": "Detalles del error no enviado por el servidor.", + "DefaultErrorMessage401": "Tu no estás autenticado!", + "DefaultErrorMessage401Detail": "Tu deberías iniciar sesión para realizar esta operación.", + "DefaultErrorMessage403": "Tu no estás autorizado!", + "DefaultErrorMessage403Detail": "No tienes permitido realizar esta operación!", + "DefaultErrorMessage404": "Recurso no encontrado!", + "DefaultErrorMessage404Detail": "El recurso solitiado podría no encontrarse en el servidor!", + "EntityNotFoundErrorMessage": "No hay una entidad {0} con id = {1}!", "Error": "Error", - "UnhandledException": "Excepción no controlada!", + "UnhandledException": "Excepción no manejada!", "401Message": "No autorizado", "403Message": "Prohibido", - "404Message": "La página no existe", - "500Message": "Error interno del servidor" + "404Message": "Página no encuentrada", + "500Message": "Error interno de servidor", + "403MessageDetail": "Tu no estás autorizado para realizar esta operación!", + "404MessageDetail": "Disculpa, no hay nada en esta dirección." } -} +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/es.json b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/es.json index 365856425e..65aa1c68b0 100644 --- a/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/es.json +++ b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/es.json @@ -1,19 +1,15 @@ { "culture": "es", "texts": { - "DisplayName:Abp.Ldap.ServerHost": "Server host", - "Description:Abp.Ldap.ServerHost": "Servidor host", - - "DisplayName:Abp.Ldap.ServerPort": "Server port", - "Description:Abp.Ldap.ServerPort": "Puerto del servidor host", - - "DisplayName:Abp.Ldap.BaseDc": "Base domain component", + "DisplayName:Abp.Ldap.ServerHost": "Host del servidor", + "Description:Abp.Ldap.ServerHost": "Host del servidor", + "DisplayName:Abp.Ldap.ServerPort": "Puerto del servidor", + "Description:Abp.Ldap.ServerPort": "Puerto del servidor", + "DisplayName:Abp.Ldap.BaseDc": "Dominio base", "Description:Abp.Ldap.BaseDc": "Dominio base", - - "DisplayName:Abp.Ldap.UserName": "Username", + "DisplayName:Abp.Ldap.UserName": "Nombre de usuario", "Description:Abp.Ldap.UserName": "Nombre de usuario", - - "DisplayName:Abp.Ldap.Password": "Password", - "Description:Abp.Ldap.Password": "Contrasea" + "DisplayName:Abp.Ldap.Password": "Contraseña", + "Description:Abp.Ldap.Password": "Contraseña" } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/es.json b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/es.json new file mode 100644 index 0000000000..2098bdf26f --- /dev/null +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/es.json @@ -0,0 +1,7 @@ +{ + "culture": "es", + "texts": { + "DisplayName:Abp.Localization.DefaultLanguage": "Idioma predeterminado.", + "Description:Abp.Localization.DefaultLanguage": "El idioma predeterminado de la aplicación" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/es.json b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/es.json index a23fccc1c4..1f36710c14 100644 --- a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/es.json +++ b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/es.json @@ -2,6 +2,6 @@ "culture": "es", "texts": { "DisplayName:Abp.Timing.Timezone": "Zona horaria", - "Description:Abp.Timing.Timezone": "Zona horaria de la Aplicacion" + "Description:Abp.Timing.Timezone": "Zona horaria de aplicación" } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json index 56d6b117cf..4f0906ee3e 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json @@ -1,52 +1,52 @@ { "culture": "es", "texts": { - "Languages": "Lenguajes", - "AreYouSure": "¿Está seguro?", + "Languages": "Idiomas", + "AreYouSure": "¿Estas seguro?", "Cancel": "Cancelar", "Clear": "Limpiar", - "Yes": "Si", + "Yes": "Sí", "No": "No", - "Ok": "Aceptar", + "Ok": "Ok", "Close": "Cerrar", "Save": "Guardar", "SavingWithThreeDot": "Guardando...", - "Actions": "Acciones", - "Delete": "Eliminar", + "Actions": "Actiones", + "Delete": "Borrar", "Edit": "Editar", - "Refresh": "Refrescar", - "Language": "Lenguaje", + "Refresh": "Actualizar", + "Language": "Idioma", "LoadMore": "Cargar más", "ProcessingWithThreeDot": "Procesando...", - "LoadingWithThreeDot": "Cargando...", + "LoadingWithThreeDot": "Cargardo...", "Welcome": "Bienvenido", - "Login": "Iniciar session", + "Login": "Iniciar Sesión", "Register": "Registrarse", - "Logout": "Cerrar sessión", + "Logout": "Cerrar sesión", "Submit": "Enviar", - "Back": "Atrás", + "Back": "Volver", "PagerSearch": "Buscar", "PagerNext": "Siguiente", "PagerPrevious": "Anterior", "PagerFirst": "Primero", "PagerLast": "Último", - "PagerInfo": "Mostrando desde _START_ hasta _END_ total _TOTAL_", - "PagerInfo{0}{1}{2}": "Mostrando desde {0} hasta {1} total {2}", - "PagerInfoEmpty": "Mostrando desde 0 hasta 0 de 0 registros", - "PagerInfoFiltered": "(filtrado de un total de _MAX_ registros)", - "NoDataAvailableInDatatable": "No hay datos", - "Total": "total", - "Selected": "seleccionado", - "PagerShowMenuEntries": "Mostrar _MENU_ registros", + "PagerInfo": "Mostrando de la _START a la _END_ de _TOTAL_ entradas", + "PagerInfo{0}{1}{2}": "Mostrando de la {0} a la {1} de {2} entradas", + "PagerInfoEmpty": "Mostrando de la 0 a la 0 de 0 entradas", + "PagerInfoFiltered": "(filtrado desde _MAX_ entradas totales)", + "NoDataAvailableInDatatable": "No hay datos disponibles", + "Total": "Total", + "Selected": "Seleccionado", + "PagerShowMenuEntries": "Mostrar _MENU_ entradas", "DatatableActionDropdownDefaultText": "Acciones", "ChangePassword": "Cambiar contraseña", - "PersonalInfo": "My perfil", - "AreYouSureYouWantToCancelEditingWarningMessage": "Tiene cambios sin guardar.", + "PersonalInfo": "Mi perfil", + "AreYouSureYouWantToCancelEditingWarningMessage": "Tu tienes cambios sin guardar", "GoHomePage": "Ir a la página principal", - "GoBack": "Atras", + "GoBack": "Volver atrás", "Search": "Buscar", - "ItemWillBeDeletedMessageWithFormat": "Se eliminarán {0}!", - "ItemWillBeDeletedMessage": "Este itém será eliminado!", - "ManageYourAccount": "Administre su cuenta" + "ItemWillBeDeletedMessageWithFormat": "{0} serán borrados!", + "ItemWillBeDeletedMessage": "Este elemento será borrado", + "ManageYourAccount": "Gestiona tu cuenta" } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/es.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/es.json index bb7cb733fe..55884667f6 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/es.json +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/es.json @@ -1,34 +1,34 @@ { "culture": "es", "texts": { - "'{0}' and '{1}' do not match.": "'{0} \" y \"{1} \" no coinciden.", - "The {0} field is not a valid credit card number.": "{0} no es un número de tarjeta de crédito.", - "{0} is not valid.": "{0} no es válido.", - "The {0} field is not a valid e-mail address.": "{0} no es una dirección de correo electrónico válida.", - "The {0} field only accepts files with the following extensions: {1}": "{0} campo sólo acepta archivos con las siguientes extensiones: {1}", - "The field {0} must be a string or array type with a maximum length of '{1}'.": "El campo {0} debe ser una cadena o un array con una longitud máxima de '{1}'.", - "The field {0} must be a string or array type with a minimum length of '{1}'.": "El campo {0} debe ser una cadena o un array con una longitud mínima de '{1}'.", - "The {0} field is not a valid phone number.": "{0} no es un número de teléfono válido.", - "The field {0} must be between {1} and {2}.": "El campo {0} debe ser entre {1} y {2}.", + "'{0}' and '{1}' do not match.": "'{0}' y '{1}' no coinciden.", + "The {0} field is not a valid credit card number.": "El campo {0} no es un número de tarjeta de crédito valido.", + "{0} is not valid.": "{0} no es valido.", + "The {0} field is not a valid e-mail address.": "El campo {0} no es una dirección de e-mail valida.", + "The {0} field only accepts files with the following extensions: {1}": "El campo {0} sólo acepta ficheros con la siguientes extensiones: {1}", + "The field {0} must be a string or array type with a maximum length of '{1}'.": "El campo {0} debe ser de tipo cadena o lista con una longitud máxima de '{1}'.", + "The field {0} must be a string or array type with a minimum length of '{1}'.": "El campo {0} debe ser de tipo cadena o lista con una longitud máxima de '{1}'.", + "The {0} field is not a valid phone number.": "El campo no tiene un número de teléfono valido.", + "The field {0} must be between {1} and {2}.": "El campo {0} debe estar entre {1} y {2}.", "The field {0} must match the regular expression '{1}'.": "El campo {0} no coincide con el formato solicitado.", - "The {0} field is required.": "El {0} campo es obligatorio.", + "The {0} field is required.": "El campo {0} es requerido.", "The field {0} must be a string with a maximum length of {1}.": "El campo {0} debe ser una cadena con una longitud máxima de {1}.", - "The field {0} must be a string with a minimum length of {2} and a maximum length of {1}.": "El campo {0} debe ser una cadena con una longitud mínima de {2} y una longitud máxima de {1}.", - "The {0} field is not a valid fully-qualified http, https, or ftp URL.": "El campo {0} no es una dirección URL válida http, https o ftp.", - "The field {0} is invalid.": "El campo {0} no es válido.", - "ThisFieldIsNotAValidCreditCardNumber.": "Este campo no es un número de tarjeta de crédito.", - "ThisFieldIsNotValid.": "Este campo no es válido.", - "ThisFieldIsNotAValidEmailAddress.": "Este campo no es una dirección de correo electrónico válida.", - "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Este campo sólo acepta archivos con las siguientes extensiones: {0}", - "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Este campo debe ser una cadena o un array con una longitud máxima de '{0}'.", - "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Este campo debe ser una cadena o un array con una longitud mínima de '{0}'.", - "ThisFieldIsNotAValidPhoneNumber.": "Este campo no es un número de teléfono válido.", - "ThisFieldMustBeBetween{0}And{1}": "Este campo debe tener un valor entre {0} y {1}.", + "The field {0} must be a string with a minimum length of {2} and a maximum length of {1}.": "El campo {0} debe ser una cadena con una longitud mínima de {2} y máxima de {1}.", + "The {0} field is not a valid fully-qualified http, https, or ftp URL.": "El campo {0} no es una URL (http, https o ftp) valida.", + "The field {0} is invalid.": "El campo {0} no es valido.", + "ThisFieldIsNotAValidCreditCardNumber.": "El campo no es un número de tarjeta de crédito valido.", + "ThisFieldIsNotValid.": "Este campo no es valido.", + "ThisFieldIsNotAValidEmailAddress.": "Este campo no es una dirección de e-mail valida.", + "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Este campo sólo acepta ficheros con las siguientes extensiones: {0}", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Este campo debe ser una cadena o lista con una longitud máxima de {1}.", + "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Este campo debe ser una cadena o lista con una longitud mínima de {1}.", + "ThisFieldIsNotAValidPhoneNumber.": "Este campo no es un número de teléfono valido.", + "ThisFieldMustBeBetween{0}And{1}": "Este campo debe estar entre {0} y {1}.", "ThisFieldMustMatchTheRegularExpression{0}": "Este campo debe coincidir con la expresión regular '{0}'.", - "ThisFieldIsRequired.": "Este campo es obligatorio.", - "ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "Este campo debe ser una cadena de caracteres con una longitud máxima de {0}.", - "ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "Este campo debe ser una cadena de caracteres con una longitud mínima de {1} y una longitud máxima de {0}.", - "ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "Este campo no es una dirección URL válida http, https o ftp.", - "ThisFieldIsInvalid.": "Este campo no es válido." + "ThisFieldIsRequired.": "Este campo es requerido", + "ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "Este campo debe ser una cadena con una longitud máxima de {1}.", + "ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "Este campo debe ser una cadena con una longitud mínima de {2} y máxima de {1}.", + "ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "El campo {0} no es una URL (http, https o ftp) valida.", + "ThisFieldIsInvalid.": "Este en un campo no valido." } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/es.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/es.json index 43554b2311..9ca4d954b4 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/es.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/es.json @@ -11,12 +11,12 @@ "InvalidUserNameOrPassword": "El nombre de usuario o la contraseña no son válidos", "LoginIsNotAllowed": "No está permitido el inicio de sesión! Usted tendrá que confirmar su correo electrónico o número de teléfono.", "SelfRegistrationDisabledMessage": "El autoregistro de usuario está deshabilitado para esta aplicación. Póngase en contacto con el administrador de la aplicación para registrar un nuevo usuario.", - "LocalLoginDisabledMessage": "No está habilitado el login local para esta aplicación.", + "LocalLoginDisabledMessage": "Inicio de sesión local ha sido deshabilitado para esta aplicación", "Login": "Iniciar sesión", "Cancel": "Cancelar", "Register": "Registrarse", - "AreYouANewUser": "¿Usted es un usuario nuevo?", - "AlreadyRegistered": "¿Está registrado en esta aplicación?", + "AreYouANewUser": "¿Eres un nuevo usuario?", + "AlreadyRegistered": "¿Ya registrado?", "InvalidLoginRequest": "Solicitud de inicio de sesión no válido", "ThereAreNoLoginSchemesConfiguredForThisClient": "No hay ningún esquema de inicio de sesión configurado para este cliente.", "LogInUsingYourProviderAccount": "Inicia sesión con tu cuenta de {0} ", @@ -37,9 +37,26 @@ "NewPasswordConfirmFailed": "Por favor, confirme la nueva contraseña.", "Manage": "Administrar", "ManageYourProfile": "Gestionar su perfil", - "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "Habilitar el registro de usuario", - "Description:Abp.Account.IsSelfRegistrationEnabled": "Si está habilitado los usuarios pueden crear una cuenta mediante el registro automático.", - "DisplayName:Abp.Account.EnableLocalLogin": "Habilitar cuenta local", - "Description:Abp.Account.EnableLocalLogin": "Indica que el servidor permite iniciar sessión con una cuenta local." + "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "¿Está el auto-registro habilitado?", + "Description:Abp.Account.IsSelfRegistrationEnabled": "Cuando un usuario puede registrar la cuenta por él/ ella mismo/a", + "DisplayName:Abp.Account.EnableLocalLogin": "Autenticado con una cuenta local", + "Description:Abp.Account.EnableLocalLogin": "Indica si el servidor permitirá a los usuarios autenticarse con una cuenta local.", + "LoggedOutTitle": "Sesión cerrada", + "LoggedOutText": "La sesión ha sido cerrada y serás redireccionado en breve.", + "ReturnToText": "Haz click aquí para redirigirte a {0}", + "OrLoginWith": "O inicia sesión con;", + "ForgotPassword": "¿Olvidaste la contraseña?", + "SendPasswordResetLink_Information": "Un link para resetear la contraseña será enviado a tu e-mail. Si no recibes el e-mail en unos minutos, por favor re-intenta.", + "PasswordResetMailSentMessage": "Un e-mail para recuperar la cuenta ha sido enviado a tu e-mail. Si no recibes el e-mail en unos minutos, por favor re-intentalo.", + "ResetPassword": "Resetear contraseña", + "ConfirmPassword": "Confirmar la contraseña", + "ResetPassword_Information": "Por favor, introduce tu nueva contraseña.", + "YourPasswordIsSuccessfullyReset": "Tu contraseña ha sido reseteada satisfactoriamente.", + "GoToTheApplication": "Ir a la aplicación", + "BackToLogin": "Volver al inicio de sesión", + "ProfileTab:Password": "Cambiar contraseña", + "ProfileTab:PersonalInfo": "Información personal", + "ReturnToApplication": "Volver a la aplicación", + "Volo.Account:InvalidEmailAddress": "No se puede encontrar la dirección de e-mail solicitada: {0}" } } \ No newline at end of file diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/es.json b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/es.json new file mode 100644 index 0000000000..4cc69f4224 --- /dev/null +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/es.json @@ -0,0 +1,6 @@ +{ + "culture": "es", + "texts": { + "ManageYourProfile": "Administra tu perfil" + } +} \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/es.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/es.json new file mode 100644 index 0000000000..304c3149ec --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/es.json @@ -0,0 +1,58 @@ +{ + "culture": "es", + "texts": { + "Menu:Blogs": "Blogs", + "Menu:BlogManagement": "Blogging", + "Permission:Management": "Gestión", + "Permission:Edit": "Editar", + "Permission:Create": "Crear", + "Permission:Delete": "Borrar", + "Permission:Blogging": "Blog", + "Permission:Blogs": "Blogs", + "Permission:Posts": "Entradas", + "Permission:Tags": "Etiquetas", + "Permission:Comments": "Comentarios", + "Title": "Título", + "Delete": "Borrar", + "Reply": "Respondere", + "ReplyTo": "Responder a {0}", + "ContinueReading": "Continuar leyendo", + "DaysAgo": "Hace {0} días", + "YearsAgo": "Hace {0} años", + "MonthsAgo": "Hace {0} meses", + "WeeksAgo": "Hace {0} semanas", + "MinutesAgo": "Hacer {0} minutos", + "SecondsAgo": "Hace {0} segundos", + "HoursAgo": "Hace {0} horas", + "Now": "Ahora", + "Content": "Contenido", + "SeeAll": "Ver todo", + "PopularTags": "Etiquetas populares", + "WiewsWithCount": "{0} visualizaciones", + "LastPosts": "Última entrada", + "LeaveComment": "Deja un comentario", + "TagsInThisArticle": "Etiquetas en este artículo", + "Posts": "Entradas", + "Edit": "Editar", + "BLOG": "BLOG", + "CommentDeletionWarningMessage": "El comentario será borrado", + "PostDeletionWarningMessage": "La entrada será borrada.", + "BlogDeletionWarningMessage": "El blog será borrado.", + "AreYouSure": "¿Estás seguro?", + "CommentWithCount": "{0} comentarios", + "Comment": "Comentario", + "ShareOnTwitter": "Comparte en Twitter", + "CoverImage": "Imágen de portada", + "CreateANewPost": "Crear una nueva entrada", + "CreateANewBlog": "Crear un nuevo blog", + "WhatIsNew": "Novedades", + "Name": "Nombre", + "ShortName": "Nombre corto", + "CreationTime": "Fecha de creación", + "Description": "Descripción", + "Blogs": "Blogs", + "Tags": "Etiquetas", + "ShareOn": "Compartir en", + "TitleLengthWarning": "Manten el tamaño del título por debajo de 60 caracteres para ser amigable al SEO" + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/es.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/es.json new file mode 100644 index 0000000000..63be06e2c7 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/es.json @@ -0,0 +1,22 @@ +{ + "culture": "es", + "texts": { + "PickYourReaction": "Recoge tu reación", + "YourComment": "Tu comentario", + "YourReply": "Tu respuesta", + "Comments": "Comentarios", + "Send": "Enviar", + "Delete": "Borrar", + "Reply": "Responder", + "Update": "Actualizar", + "Edit": "Editar", + "LoginToAddComment": "Inicia sesión para añadir comentarios", + "LoginToReply": "Inicia sesión para responder", + "MessageDeletionConfirmationMessage": "Este comentario será completamente borrado.", + "CommentAuthorizationExceptionMessage": "Esos comentarios no están permitidos mostrarlos al público.", + "Undo": "Deshacer", + "RatingUndoMessage": "Tu puntuación sera removida.", + "LoginToRate": "Inicia sesión para puntuar", + "Star": "Valoración" + } +} \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/es.json b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/es.json new file mode 100644 index 0000000000..e6bfd1e413 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/es.json @@ -0,0 +1,10 @@ +{ + "culture": "es", + "texts": { + "DocsTitle": "VoloDocs", + "WelcomeVoloDocs": "Bienvenidos a VoloDocs", + "NoProjectWarning": "No hay proyectos definidos todavía!", + "CreateYourFirstProject": "Click aquí para comenzar to primer proyecto", + "NoProject": "No proyecto!" + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/es.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/es.json new file mode 100644 index 0000000000..f09eb5386b --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/es.json @@ -0,0 +1,59 @@ +{ + "culture": "es", + "texts": { + "Permission:DocumentManagement": "Gestión de documentos", + "Permission:Projects": "Proyectos", + "Permission:Edit": "Editar", + "Permission:Delete": "Borrar", + "Permission:Create": "Crear", + "Permission:Documents": "Documentos", + "Menu:Documents": "Documentos", + "Menu:DocumentManagement": "Documentos", + "Menu:ProjectManagement": "Proyectos", + "CreateANewProject": "Crear nuevo proyecto", + "Edit": "Editar", + "Create": "Crear", + "Pull": "Extraer", + "Projects": "Proyectos", + "Name": "Nombre", + "ShortName": "ShortName", + "DocumentStoreType": "DocumentStoreType", + "Format": "Formato", + "ShortNameInfoText": "Será usado para crear una URL única", + "DisplayName:Name": "Nombre", + "DisplayName:ShortName": "Nombre corto", + "DisplayName:Format": "Formato", + "DisplayName:DefaultDocumentName": "Nombre del documento predeterminado", + "DisplayName:NavigationDocumentName": "Nombre del documento de navegación", + "DisplayName:MinimumVersion": "Versión mínima", + "DisplayName:MainWebsiteUrl": "URL principal del sitio web", + "DisplayName:LatestVersionBranchName": "Nombre de la rama de la última versión ", + "DisplayName:GitHubRootUrl": "URL raíz de GitHub", + "DisplayName:GitHubAccessToken": "Token de acceso a GitHub", + "DisplayName:GitHubUserAgent": "Usuario agente de GitHub", + "DisplayName:GithubVersionProviderSource": "Versión del proveedor de Github", + "DisplayName:VersionBranchPrefix": "Prefijo de la rama de la versión", + "DisplayName:All": "Extraer tódo", + "DisplayName:LanguageCode": "Código de idioma", + "DisplayName:Version": "Versión", + "Documents": "Documentos", + "RemoveFromCache": "Borrado de caché", + "Reindex": "Reindexado", + "ReindexCompleted": "Reindexado completado", + "RemovedFromCache": "Borrar la caché", + "RemoveFromCacheConfirmation": "¿Estás seguro que quieres borrar este elemento de la caché?", + "ReIndexDocumentConfirmation": "¿Estás seguro que quieres reindexar este elemento?", + "DeleteFromDatabase": "Eliminado de la base de datos", + "Deleted": "Eliminado", + "Search": "Buscar", + "StartDate": "Fecha de inicio", + "EndDate": "Fecha de fin", + "CreationTime": "Fecha de creación", + "LastUpdateTime": "Última actualización", + "LastSignificantUpdateTime": "Última actualización significativa", + "Version": "Versión", + "LanguageCode": "Código de idioma", + "FileName": "Nombre de fichero", + "LastCachedTime": "Última actualización de caché" + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/es.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/es.json index 700143ad76..c4dd345f5b 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/es.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/es.json @@ -2,18 +2,38 @@ "culture": "es", "texts": { "Documents": "Documentos", - "BackToWebsite": "Regresar al sitio", + "BackToWebsite": "Volver al sitio web", "Contributors": "Contribuidores", - "ShareOn": "Compartilhar no", - "Version": "Versão", + "ShareOn": "Compartir en", + "Version": "Versión", "Edit": "Editar", - "Delete": "Excluir", + "LastEditTime": "Última edición", + "Delete": "Borrar", + "ClearCache": "Borrar caché", + "ClearCacheConfirmationMessage": "Estas seguro que quieres borrar todas las cachés para el proyecto", + "ReIndexAllProjects": "Reindexar todos los proyectos", + "ReIndexProject": "Reindexar proyecto", + "ReIndexProjectConfirmationMessage": "¿Estás seguro que quieres reindexar el proyecto \"{0}\"?", + "SuccessfullyReIndexProject": "La reidexación para el proyecto \"{0}\" se completo correctamente", + "ReIndexAllProjectConfirmationMessage": "¿Estás seguro que quieres reindexar todos los proyectos?", + "SuccessfullyReIndexAllProject": "La reidexación para todos los proyectos se completo correctamente", "InThisDocument": "En este documento", - "GoToTop": "Subir", + "GoToTop": "Ir hacia arriba", "Projects": "Proyecto(s)", - "NoProjectWarning": "Não há projetos ainda!", - "DocumentNotFound": "Ups! O documento solicitado não foi encontrado!", - "NavigationDocumentNotFound": "Esta versão não possui um documento de navegação!", - "DocumentNotFoundInSelectedLanguage": "Documento no idioma desejado não foi encontrado. Documento no idioma padrão é mostrado." + "NoProjectWarning": "No hay proyectos todavía!", + "DocumentNotFound": "Oops, El documento solicitado no fue encontrado!", + "ProjectNotFound": "Oops, El proyecto solicitado no fue encontrado!", + "NavigationDocumentNotFound": "Esta versión no tiene un documento de navegación!", + "DocumentNotFoundInSelectedLanguage": "documento en el idioma que solicitaste no encontrado. El documento será mostrado en el idioma por defecto.", + "FilterTopics": "Filtrar temas ", + "FullSearch": "Buscar en documentos", + "Volo.Docs.Domain:010001": "Búsqueda elástica no habilida", + "MultipleVersionDocumentInfo": "Este documento tiene múltiple versiones. Selecciona las opciones que más te interesan.", + "New": "Nuevo", + "Upd": "Upd", + "NewExplanation": "Creado en las últimas dos semanas.", + "UpdatedExplanation": "Actualizo en las dos últimas semanas", + "Volo.Docs.Domain:010002": "ShortName {ShortName} ya existe.", + "Preview": "Previsualizar" } } \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/es.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/es.json new file mode 100644 index 0000000000..74e51eb9d4 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/es.json @@ -0,0 +1,10 @@ +{ + "culture": "es", + "texts": { + "Features": "Características", + "NoFeatureFoundMessage": "No hay ninguna característica disponible.", + "Permission:FeatureManagement": "Gestión de características", + "Permission:FeatureManagement.ManageHostFeatures": "Gestionar características del Host", + "Volo.Abp.FeatureManagement:InvalidFeatureValue": "{0} valor de característica no es valido!" + } +} \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/es.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/es.json new file mode 100644 index 0000000000..dfc5193e62 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/es.json @@ -0,0 +1,120 @@ +{ + "culture": "es", + "texts": { + "Menu:IdentityManagement": "Gestión de identidades", + "Users": "Usuarios", + "NewUser": "Nuevo Usuario", + "UserName": "Nombre de usuario", + "EmailAddress": "Dirección e-mail", + "PhoneNumber": "Número de teléfono", + "UserInformations": "Información de usuario", + "DisplayName:IsDefault": "Predeterminado", + "DisplayName:IsStatic": "Estático", + "DisplayName:IsPublic": "Público", + "Roles": "Roles", + "Password": "Contraseña", + "PersonalInfo": "Mi perfil", + "PersonalSettings": "Configuración personal", + "UserDeletionConfirmationMessage": "El usuario '{0}' será eliminado. ¿Quieres continuar?", + "RoleDeletionConfirmationMessage": "El role '{0}' será eliminado. ¿Quieres continuar? ", + "DisplayName:RoleName": "Nombre de Role", + "DisplayName:UserName": "Nombre de usuario", + "DisplayName:Name": "Nombre", + "DisplayName:Surname": "Apellido", + "DisplayName:Password": "Contraseña", + "DisplayName:Email": "Dirección de e-mail", + "DisplayName:PhoneNumber": "Número de teléfono", + "DisplayName:TwoFactorEnabled": "Autenticación en dos pasos", + "DisplayName:LockoutEnabled": "Bloquear la cuenta después de intentos de inicio de sesión fallidos", + "NewRole": "Nuevo role", + "RoleName": "Nombre de role", + "CreationTime": "Fecha de creación", + "Permissions": "Permisos", + "DisplayName:CurrentPassword": "Contraseña actual", + "DisplayName:NewPassword": "Nueva contraseña", + "DisplayName:NewPasswordConfirm": "Confirmar nueva contraseña", + "PasswordChangedMessage": "Tu contraseña ha sido cambiada satisfactoriamente.", + "PersonalSettingsSavedMessage": "Tu configuración personal ha sido guardada satisfactoriamente.", + "Volo.Abp.Identity:DefaultError": "Error desconocido.", + "Volo.Abp.Identity:ConcurrencyFailure": "Fallo de concurrencia optimista", + "Volo.Abp.Identity:DuplicateEmail": "E-mail '{0}' está en uso.", + "Volo.Abp.Identity:DuplicateRoleName": "Nombre de role '{0}' está en uso.", + "Volo.Abp.Identity:DuplicateUserName": "Nombre de usuario '{0}' está en uso.", + "Volo.Abp.Identity:InvalidEmail": "E-mail '{0}' no es válido.", + "Volo.Abp.Identity:InvalidPasswordHasherCompatibilityMode": "El PasswordHasherCompatibilityMode proporcionado no es válido.", + "Volo.Abp.Identity:InvalidPasswordHasherIterationCount": "La cuenta iterativa debe ser una entero positivo.", + "Volo.Abp.Identity:InvalidRoleName": "El nombre de role '{0}' no es válido.", + "Volo.Abp.Identity:InvalidToken": "token no válido", + "Volo.Abp.Identity:InvalidUserName": "Nombre de usuario '{0}' no es válido. Sólo puede contener letras o dígitos", + "Volo.Abp.Identity:LoginAlreadyAssociated": "Usuario con este inicio de sesión en uso.", + "Volo.Abp.Identity:PasswordMismatch": "Contraseña incorrecta.", + "Volo.Abp.Identity:PasswordRequiresDigit": "Contraseñas deben tener al menos un dígito ('0'-'9').", + "Volo.Abp.Identity:PasswordRequiresLower": "Contraseñas deben tener al menos un caráctere en minúscula ('a'-'z').", + "Volo.Abp.Identity:PasswordRequiresNonAlphanumeric": "Contraseñas deben tener al menos un carácter no alfanumérico", + "Volo.Abp.Identity:PasswordRequiresUpper": "Contraseñas deben tener al menos un carácter en mayúsculas ('A'-'Z').", + "Volo.Abp.Identity:PasswordTooShort": "Contraseñas deben tener al menos {0} caracteres", + "Volo.Abp.Identity:RoleNotFound": "El role {0} no existe.", + "Volo.Abp.Identity:UserAlreadyHasPassword": "El usuario tiene la contraseña establecida", + "Volo.Abp.Identity:UserAlreadyInRole": "El usuario ya tiene asignado el rol '{0}'´.", + "Volo.Abp.Identity:UserLockedOut": "El usuario está bloqueado.", + "Volo.Abp.Identity:UserLockoutNotEnabled": "El bloqueo no está habilitado para este usuario.", + "Volo.Abp.Identity:UserNameNotFound": "El usuario {0} no existe.", + "Volo.Abp.Identity:UserNotInRole": "El usuario no tiene asignado el rol '{0}'.", + "Volo.Abp.Identity:PasswordConfirmationFailed": "La contraseña no coincide con la confirmación.", + "Volo.Abp.Identity:010001": "Tu no puedes borrar tu propia cuenta!", + "Volo.Abp.Identity:010002": "No puedes establecer más de {MaxUserMembershipCount} unidades organizativas para un usuario!", + "Volo.Abp.Identity:010003": "No puedes cambiar la contraseña de un usuario que inicio sesión desde un servicio externo!", + "Volo.Abp.Identity:010004": "Hay una unidad organizativa con nombre {0}. Dos unidades con el mismo nombre no pueden ser creadas en el mismo nivel.", + "Volo.Abp.Identity:010005": "Roles estáticos no pueden ser renombrados.", + "Volo.Abp.Identity:010006": "Roles estáticos no pueden ser borrados.", + "Volo.Abp.Identity:010007": "No puedes cambiar tu configuración de autentificación de dos pasos.", + "Volo.Abp.Identity:010008": "No está permitido cambiar la configuración de autenticación de dos pasos.", + "Identity.OrganizationUnit.MaxUserMembershipCount": "Número máximo de unidades organizativas por usuario", + "Permission:IdentityManagement": "Gestión de identidades", + "Permission:RoleManagement": "Gestión de roles", + "Permission:Create": "Crear", + "Permission:Edit": "Editar", + "Permission:Delete": "Borrar", + "Permission:ChangePermissions": "Cambiar permisos", + "Permission:UserManagement": "Gestión de usuarios", + "Permission:UserLookup": "Busqueda de usuario", + "Feature:IdentityGroup": "Identidad", + "Feature:TwoFactor": "Autenticatión de dos pasos", + "Feature:TwoFactorDescription": "Establecer autenticación de dos pasos. Valores opcionales: Opcional, Deshabilitado, Obligatorio", + "Feature:TwoFactor.Optional": "Opcional", + "Feature:TwoFactor.Disabled": "Deshabilitado", + "Feature:TwoFactor.Forced": "Obligatorio", + "DisplayName:Abp.Identity.Password.RequiredLength": "Longitud requerida", + "DisplayName:Abp.Identity.Password.RequiredUniqueChars": "Caracteres únicos requeridos", + "DisplayName:Abp.Identity.Password.RequireNonAlphanumeric": "Caracteres no alfanuméricos requeridos", + "DisplayName:Abp.Identity.Password.RequireLowercase": "Carácter en minúsculas requerido", + "DisplayName:Abp.Identity.Password.RequireUppercase": "Carácter en mayúsculas requerido", + "DisplayName:Abp.Identity.Password.RequireDigit": "Dígito requerido", + "DisplayName:Abp.Identity.Lockout.AllowedForNewUsers": "Habilitado para nuevos usuarios", + "DisplayName:Abp.Identity.Lockout.LockoutDuration": "Duración del bloqueo (segundos)", + "DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Número máximo de accesos fallidos", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedEmail": "Confirmación de e-mail requerida", + "DisplayName:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Permitir usuarios confirmar su número de teléfono", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Requerir confirmación de número de teléfono", + "DisplayName:Abp.Identity.User.IsUserNameUpdateEnabled": "Permitir a los usuarios cambiar su nombre de usuario.", + "DisplayName:Abp.Identity.User.IsEmailUpdateEnabled": "Permitir usuarios cambiar sus direcciones de e-mail", + "Description:Abp.Identity.Password.RequiredLength": "La mínima longitud de una contraseña debe ser.", + "Description:Abp.Identity.Password.RequiredUniqueChars": "El mínimo número de caracteres unicos que una contraseña debe contener.", + "Description:Abp.Identity.Password.RequireNonAlphanumeric": "Si las contraseñas deben contener un no alfanumérico carácter.", + "Description:Abp.Identity.Password.RequireLowercase": "Si las contraseñas deben contener un carácter en minúscula.", + "Description:Abp.Identity.Password.RequireUppercase": "Si las contreseñas deben contener un carácter en mayúscula", + "Description:Abp.Identity.Password.RequireDigit": "Si las contraseñas deben contener un dígito", + "Description:Abp.Identity.Lockout.AllowedForNewUsers": "Si un nuevo usuario puede ser bloqueado.", + "Description:Abp.Identity.Lockout.LockoutDuration": "La duración del bloqueo de un usuario cuando el bloqueo ocurre.", + "Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "El número de accessos fallidos permitidos antes de que un usuario sea bloqueado, el bloqueo de usuario debe estar habilitado.", + "Description:Abp.Identity.SignIn.RequireConfirmedEmail": "Si la confirmación de dirección de e-mail es requerida para iniciar sesión.", + "Description:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Si el número de teléfono puede ser confirmado por el usuario. ", + "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Sí un número de teléfono confirmado es requerido para iniciar sesión.", + "Description:Abp.Identity.User.IsUserNameUpdateEnabled": "Si el nombre de usuario puede ser actualizado por el usuario.", + "Description:Abp.Identity.User.IsEmailUpdateEnabled": "Si el e-mail puede ser actualizado por el usuario.", + "DisplayName:Abp.Identity.TwoFactorBehaviour": "Autenticación de dos pasos", + "Description:Abp.Identity.TwoFactorBehaviour": "Autenticación de dos pasos", + "DisplayName:Abp.Identity.UsersCanChange": "Permitir a los usuario cambiar su autenticación de dos pasos.", + "Description:Abp.Identity.UsersCanChange": "Permitir a los usuario cambiar su autenticación de dos pasos." + } +} \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/es.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/es.json new file mode 100644 index 0000000000..2b8507bb13 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/es.json @@ -0,0 +1,14 @@ +{ + "culture": "es", + "texts": { + "Volo.IdentityServer:DuplicateIdentityResourceName": "El nombre de recurso de identidad ya existe: {Name}", + "Volo.IdentityServer:DuplicateApiResourceName": "El nombre de recurso de Api ya existe: {Name}", + "Volo.IdentityServer:DuplicateApiScopeName": "El nombre de ámbito de Api ya existe: {Name}", + "Volo.IdentityServer:DuplicateClientId": "ClientId ya existe: {ClientId}", + "UserLockedOut": "La cuenta de usuario ha sido bloqueada debido a inicios de sesión no validos. Por favor, espera un rato e intentalo de nuevo.", + "InvalidUserNameOrPassword": "Nombre de usuario o contraseña no válido!", + "LoginIsNotAllowed": "No puedes iniciar sesión!, necesitas confirmar tu e-mail/ número de teléfono.", + "InvalidUsername": "", + "TheTargetUserIsNotLinkedToYou": "El usuario de destino no está asociado a tí" + } +} \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/es.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/es.json new file mode 100644 index 0000000000..f523ae1c41 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/es.json @@ -0,0 +1,10 @@ +{ + "culture": "es", + "texts": { + "Permissions": "Permisos", + "OnlyProviderPermissons": "Sólo este proveedor", + "All": "Todos", + "SelectAllInAllTabs": "Condeder todos los permisos", + "SelectAllInThisTab": "Seleccionar todo" + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/es.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/es.json new file mode 100644 index 0000000000..3f0f40c819 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/es.json @@ -0,0 +1,7 @@ +{ + "culture": "es", + "texts": { + "Settings": "Configuraciones", + "SuccessfullySaved": "Guardado correctamente" + } +} \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/es.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/es.json new file mode 100644 index 0000000000..677a936bcf --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/es.json @@ -0,0 +1,23 @@ +{ + "culture": "es", + "texts": { + "Menu:TenantManagement": "Gestión de tenants", + "Tenants": "Inquilinos", + "NewTenant": "Nuevo inquilino", + "TenantName": "Nombre del inquilino", + "DisplayName:TenantName": "Nombre del inquilino", + "TenantDeletionConfirmationMessage": "Se eliminará el inquilino '{0}'. Confirmas eso?", + "ConnectionStrings": "Connection Strings", + "DisplayName:DefaultConnectionString": "Connection String predeterminado", + "DisplayName:UseSharedDatabase": "Usar la base de datos compartida", + "ManageHostFeatures": "Administrar funciones de host", + "Permission:TenantManagement": "Gestión de tenants", + "Permission:Create": "Crear", + "Permission:Edit": "Editar", + "Permission:Delete": "Borrar", + "Permission:ManageConnectionStrings": "Gestión de cadenas de conexión", + "Permission:ManageFeatures": "Gestión de características", + "DisplayName:AdminEmailAddress": "Dirección de e-mail de administrador", + "DisplayName:AdminPassword": "Contraseña de administrador" + } +} \ No newline at end of file diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/es.json b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/es.json new file mode 100644 index 0000000000..e45f76aab0 --- /dev/null +++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/es.json @@ -0,0 +1,14 @@ +{ + "culture": "es", + "texts": { + "VirtualFileExplorer": "Explorador de ficheros virtual", + "VirtualFileType": "Tipo de fichero virtual", + "Menu:VirtualFileExplorer": "explorador de ficheros virtuales", + "LastUpdateTime": "Última fecha de actualización", + "VirtualFileName": "Nombre del fichero virtual", + "FileContent": "Contenido del fichero", + "Size": "Tamaño", + "BackToRoot": "Volver al raíz", + "EmptyFileInfoList": "No hay ficheros virtuales" + } +} \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/es.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/es.json new file mode 100644 index 0000000000..31b4b59e25 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/es.json @@ -0,0 +1,8 @@ +{ + "culture": "es", + "texts": { + "Menu:Home": "Inicio", + "Welcome": "Bienvenido", + "LongWelcomeMessage": "Bienvenido a la aplicación, este es un proyecto base basado en el framework ABP. Para más información, visita abp.io." + } +} \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/IdentityServer/IdentityServerDataSeedContributor.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/IdentityServer/IdentityServerDataSeedContributor.cs index 39cd540f46..d738cb8217 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/IdentityServer/IdentityServerDataSeedContributor.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/IdentityServer/IdentityServerDataSeedContributor.cs @@ -158,7 +158,8 @@ namespace MyCompanyName.MyProjectName.IdentityServer secret: (configurationSection["MyProjectName_Web:ClientSecret"] ?? "1q2w3e*").Sha256(), redirectUri: $"{webClientRootUrl}signin-oidc", postLogoutRedirectUri: $"{webClientRootUrl}signout-callback-oidc", - frontChannelLogoutUri: $"{webClientRootUrl}Account/FrontChannelLogout" + frontChannelLogoutUri: $"{webClientRootUrl}Account/FrontChannelLogout", + corsOrigins: new[] { webClientRootUrl.RemovePostFix("/") } ); } @@ -175,7 +176,8 @@ namespace MyCompanyName.MyProjectName.IdentityServer secret: (configurationSection["MyProjectName_App:ClientSecret"] ?? "1q2w3e*").Sha256(), requireClientSecret: false, redirectUri: webClientRootUrl, - postLogoutRedirectUri: webClientRootUrl + postLogoutRedirectUri: webClientRootUrl, + corsOrigins: new[] { webClientRootUrl.RemovePostFix("/") } ); } @@ -192,7 +194,8 @@ namespace MyCompanyName.MyProjectName.IdentityServer secret: configurationSection["MyProjectName_Blazor:ClientSecret"]?.Sha256(), requireClientSecret: false, redirectUri: $"{blazorRootUrl}/authentication/login-callback", - postLogoutRedirectUri: $"{blazorRootUrl}/authentication/logout-callback" + postLogoutRedirectUri: $"{blazorRootUrl}/authentication/logout-callback", + corsOrigins: new[] { blazorRootUrl.RemovePostFix("/") } ); } @@ -208,7 +211,8 @@ namespace MyCompanyName.MyProjectName.IdentityServer grantTypes: new[] { "authorization_code" }, secret: configurationSection["MyProjectName_Swagger:ClientSecret"]?.Sha256(), requireClientSecret: false, - redirectUri: $"{swaggerRootUrl}/swagger/oauth2-redirect.html" + redirectUri: $"{swaggerRootUrl}/swagger/oauth2-redirect.html", + corsOrigins: new[] { swaggerRootUrl.RemovePostFix("/") } ); } } @@ -223,7 +227,8 @@ namespace MyCompanyName.MyProjectName.IdentityServer string frontChannelLogoutUri = null, bool requireClientSecret = true, bool requirePkce = false, - IEnumerable permissions = null) + IEnumerable permissions = null, + IEnumerable corsOrigins = null) { var client = await _clientRepository.FindByClientIdAsync(name); if (client == null) @@ -302,6 +307,17 @@ namespace MyCompanyName.MyProjectName.IdentityServer ); } + if (corsOrigins != null) + { + foreach (var origin in corsOrigins) + { + if (client.FindCorsOrigin(origin) == null) + { + client.AddCorsOrigin(origin); + } + } + } + return await _clientRepository.UpdateAsync(client); } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index 6a0ee29447..004733e389 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -136,6 +136,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsche", "de")); + options.Languages.Add(new LanguageInfo("es", "es", "Español", "es")); }); } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs index 231544bdbc..512c08ac6b 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs @@ -153,6 +153,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsche", "de")); + options.Languages.Add(new LanguageInfo("es", "es", "Español", "es")); }); } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 45322b2960..1899fbb432 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -71,6 +71,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsche", "de")); + options.Languages.Add(new LanguageInfo("es", "es", "Español", "es")); }); Configure(options => diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index 2db1d47151..12b7ebf1a4 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -169,6 +169,7 @@ namespace MyCompanyName.MyProjectName.Web options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsche", "de")); + options.Languages.Add(new LanguageInfo("es", "es", "Español")); }); } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/IdentityServer/IdentityServerDataSeedContributor.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/IdentityServer/IdentityServerDataSeedContributor.cs index 39cd540f46..d738cb8217 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/IdentityServer/IdentityServerDataSeedContributor.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/IdentityServer/IdentityServerDataSeedContributor.cs @@ -158,7 +158,8 @@ namespace MyCompanyName.MyProjectName.IdentityServer secret: (configurationSection["MyProjectName_Web:ClientSecret"] ?? "1q2w3e*").Sha256(), redirectUri: $"{webClientRootUrl}signin-oidc", postLogoutRedirectUri: $"{webClientRootUrl}signout-callback-oidc", - frontChannelLogoutUri: $"{webClientRootUrl}Account/FrontChannelLogout" + frontChannelLogoutUri: $"{webClientRootUrl}Account/FrontChannelLogout", + corsOrigins: new[] { webClientRootUrl.RemovePostFix("/") } ); } @@ -175,7 +176,8 @@ namespace MyCompanyName.MyProjectName.IdentityServer secret: (configurationSection["MyProjectName_App:ClientSecret"] ?? "1q2w3e*").Sha256(), requireClientSecret: false, redirectUri: webClientRootUrl, - postLogoutRedirectUri: webClientRootUrl + postLogoutRedirectUri: webClientRootUrl, + corsOrigins: new[] { webClientRootUrl.RemovePostFix("/") } ); } @@ -192,7 +194,8 @@ namespace MyCompanyName.MyProjectName.IdentityServer secret: configurationSection["MyProjectName_Blazor:ClientSecret"]?.Sha256(), requireClientSecret: false, redirectUri: $"{blazorRootUrl}/authentication/login-callback", - postLogoutRedirectUri: $"{blazorRootUrl}/authentication/logout-callback" + postLogoutRedirectUri: $"{blazorRootUrl}/authentication/logout-callback", + corsOrigins: new[] { blazorRootUrl.RemovePostFix("/") } ); } @@ -208,7 +211,8 @@ namespace MyCompanyName.MyProjectName.IdentityServer grantTypes: new[] { "authorization_code" }, secret: configurationSection["MyProjectName_Swagger:ClientSecret"]?.Sha256(), requireClientSecret: false, - redirectUri: $"{swaggerRootUrl}/swagger/oauth2-redirect.html" + redirectUri: $"{swaggerRootUrl}/swagger/oauth2-redirect.html", + corsOrigins: new[] { swaggerRootUrl.RemovePostFix("/") } ); } } @@ -223,7 +227,8 @@ namespace MyCompanyName.MyProjectName.IdentityServer string frontChannelLogoutUri = null, bool requireClientSecret = true, bool requirePkce = false, - IEnumerable permissions = null) + IEnumerable permissions = null, + IEnumerable corsOrigins = null) { var client = await _clientRepository.FindByClientIdAsync(name); if (client == null) @@ -302,6 +307,17 @@ namespace MyCompanyName.MyProjectName.IdentityServer ); } + if (corsOrigins != null) + { + foreach (var origin in corsOrigins) + { + if (client.FindCorsOrigin(origin) == null) + { + client.AddCorsOrigin(origin); + } + } + } + return await _clientRepository.UpdateAsync(client); } } diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/es.json b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/es.json new file mode 100644 index 0000000000..2860c3fd3c --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/es.json @@ -0,0 +1,7 @@ +{ + "culture": "es", + "texts": { + "ManageYourProfile": "Gestiona tu perfil", + "SamplePageMessage": "Una página de ejemplo para el módulo MyProjectName " + } +} \ No newline at end of file