Browse Source

Merge branch 'dev' into entity-cache

pull/14055/head
Halil İbrahim Kalkan 4 years ago
parent
commit
6c2d978afa
  1. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
  2. 60
      abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/tr.json
  3. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json
  4. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hu.json
  5. 125
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/tr.json
  6. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json
  7. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/tr.json
  8. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
  9. 364
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json
  10. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
  11. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
  12. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hu.json
  13. 52
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/tr.json
  14. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json
  15. 5
      abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/AbpIoDocsResource.cs
  16. 1
      abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/en.json
  17. 93
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json
  18. 1
      docs/en/Audit-Logging.md
  19. 8
      docs/en/Blog-Posts/2022-07-26 v6_0_Preview/POST.md
  20. 76
      docs/en/Blog-Posts/2022-09-21 v6_0_Release_Stable/POST.md
  21. 4
      docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/How-To-Add-Custom-Property-To-The-User-Entity.md
  22. 4
      docs/en/Community-Articles/2022-07-19-How-To-Add-Custom-Property-To-The-User-Entity/How-To-Add-Custom-Property-To-The-User-Entity.md
  23. 26
      docs/en/Community-Articles/2022-09-15-Grpc-Demo/POST.md
  24. 121
      docs/en/Community-Articles/2022-09-18-Grpc-Demo-Part-2/POST.md
  25. BIN
      docs/en/Community-Articles/2022-09-18-Grpc-Demo-Part-2/blazor-product-list.png
  26. 10
      docs/en/Migration-Guides/OpenIddict-Angular.md
  27. 10
      docs/en/Migration-Guides/OpenIddict-Blazor-Server.md
  28. 10
      docs/en/Migration-Guides/OpenIddict-Blazor.md
  29. 27
      docs/en/Migration-Guides/OpenIddict-Mvc.md
  30. 20
      docs/en/Migration-Guides/OpenIddict-Step-by-Step.md
  31. 25
      docs/en/UI/Angular/Dynamic-Form-Extensions.md
  32. 3
      docs/en/UI/Angular/Theme-Configurations.md
  33. 1
      docs/zh-Hans/Audit-Logging.md
  34. 8
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs
  35. 10
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/AbpAspNetCoreMvcUiPackagesModule.cs
  36. 21
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/BootstrapDaterangepicker/BootstrapDaterangepickerScriptContributor.cs
  37. 12
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/BootstrapDaterangepicker/BootstrapDaterangepickerStyleContributor.cs
  38. 28
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/Moment/MomentScriptContributor.cs
  39. 4
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalScriptContributor.cs
  40. 4
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalStyleContributor.cs
  41. 42
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js
  42. 24
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Auditing/AbpAuditActionFilter.cs
  43. 24
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Auditing/AbpAuditPageFilter.cs
  44. 6
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpLanguagesController.cs
  45. 7
      framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AbpAuditingOptions.cs
  46. 30
      framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingInterceptor.cs
  47. 8
      framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj
  48. 2
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DefaultDotNetProjectBuilder.cs
  49. 14
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs
  50. 1
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliPaths.cs
  51. 34
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs
  52. 5
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GetSourceCommand.cs
  53. 3
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/Services/SourceCodeDownloadService.cs
  54. 21
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/GitHub/GithubRelease.cs
  55. 50
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Memory/MemoryService.cs
  56. 32
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs
  57. 16
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveFilesStep.cs
  58. 2
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/TemplateCodeDeleteStep.cs
  59. 6
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateProjectBuilder.cs
  60. 15
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs
  61. 6
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs
  62. 14
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs
  63. 2
      framework/src/Volo.Abp.Cli/Volo.Abp.Cli.csproj
  64. 3
      framework/src/Volo.Abp.Cli/Volo/Abp/Cli/Program.cs
  65. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Localization/CultureHelper.cs
  66. 2
      framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/AspNetCore/ExceptionHandling/DefaultExceptionToErrorInfoConverter.cs
  67. 7
      framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/Http/RemoteServiceErrorInfo.cs
  68. 11
      framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionHttpClientProxyExtensions.cs
  69. 24
      framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityClientConfiguration.cs
  70. 4
      framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs
  71. 4
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationResourceContributorBase.cs
  72. 3
      framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs
  73. 5
      framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/ModuleExtensionConfigurationHelper.cs
  74. 2
      framework/src/Volo.Abp.Swashbuckle/Volo/Abp/Swashbuckle/AbpSwashbuckleDocumentFilter.cs
  75. 2
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fr.json
  76. 2
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/is.json
  77. 4
      framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/tr.json
  78. 13
      framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs
  79. 13
      framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestPage_Tests.cs
  80. 63
      framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs
  81. 2
      framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/tr.json
  82. 1
      framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/tr.json
  83. 24
      modules/account/Volo.Abp.Account.abpmdl.json
  84. 12
      modules/account/src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.abppkg.analyze.json
  85. 235
      modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.abppkg.analyze.json
  86. 54
      modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/AccountManage.razor
  87. 17
      modules/account/src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.abppkg.analyze.json
  88. 22
      modules/account/src/Volo.Abp.Account.HttpApi/Volo.Abp.Account.HttpApi.abppkg.analyze.json
  89. 3
      modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLoginModel.cs
  90. 24
      modules/account/src/Volo.Abp.Account.Web.IdentityServer/Volo.Abp.Account.Web.IdentityServer.abppkg.analyze.json
  91. 3
      modules/account/src/Volo.Abp.Account.Web.OpenIddict/Pages/Account/OpenIddictSupportedLoginModel.cs
  92. 24
      modules/account/src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.abppkg.analyze.json
  93. 52
      modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/Default.cshtml
  94. 32
      modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.abppkg.analyze.json
  95. 8
      modules/audit-logging/Volo.Abp.AuditLogging.abpmdl.json
  96. 12
      modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.abppkg.analyze.json
  97. 130
      modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo.Abp.AuditLogging.Domain.abppkg.analyze.json
  98. 32
      modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.abppkg.analyze.json
  99. 23
      modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo.Abp.AuditLogging.MongoDB.abppkg.analyze.json
  100. 46
      modules/background-jobs/Volo.Abp.BackgroundJobs.abpmdl.json

3
abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json

@ -399,6 +399,7 @@
"AllowFeatureUpgradeOnLicenseExpire": "Allow feature upgrade on license expire",
"Deleted{0}": "[Deleted {0}]",
"Tags": "Tags",
"SetTagsInfo": "Tags should be comma-separated. Eg: CSharp, Entity Framework"
"SetTagsInfo": "Tags should be comma-separated. Eg: CSharp, Entity Framework",
"RejectTrialLicenseWarningMessage": "Are you sure you want to reject this trial license request?"
}
}

60
abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/tr.json

@ -354,6 +354,64 @@
"SendWelcomeEmailWarningMessage": "Organizasyon üyelerine hoşgeldin emaili göndermek istediğinden emin misin?",
"SendWelcomeEmailSuccessMessage": "Hoşgeldin emaili başarıyla gönderilmiştir!",
"AdditionalDeveloperCount": "Ekstra geliştirici sayısı",
"LicensePrice": "Lisans ücreti"
"LicensePrice": "Lisans ücreti",
"FirstName": "Adı",
"Activate": "Aktif",
"ActivateTrialLicenseWarningMessage": "Bir deneme lisansını etkinleştirdiğinizde, kullanıcıya bir karşılama e-postası gönderilecektir. Etkinleştirmek istiyor musunuz?",
"ActivateTrialLicenseSuccessMessage": "Deneme lisansı başarıyla etkinleştirildi!",
"PaymentRequestId": "Ödeme talep kimliği",
"PurchaseDate": "Satın alma tarihi",
"IsAbpBookDownloaded": "Abp kitabı indirildi",
"IsMasteringAbpBookDownloadEnabled": "Abp kitabı indirme etkinleştirildi",
"Permission:Accounting:CustomPaymentLinkGenerator": "Özel Ödeme Bağlantısı",
"CustomPaymentLink": "Özel Ödeme Bağlantısı",
"Menu:CustomPaymentLink": "Özel Ödeme Bağlantısı",
"Amount": "Miktar",
"GenerateCustomPaymentLink": "Özel Ödeme Bağlantısı Oluştur",
"GeneratedPaymentLink": "Oluşturulan Ödeme Bağlantısı",
"CopyText": "Metni kopyala",
"Permission:CommunityEvents": "Etkinlikler",
"Menu:Events": "Etkinlikler",
"Events": "Etkinlikler",
"EventType": "Etkinlik türü",
"Number": "Numara",
"RegistrationURL": "Kayıt URL",
"URL": "URL",
"EventDeletionConfirmationMessage": "Etkinliği silmek istediğinizden emin misiniz?",
"Enum:EventType:0": "Topluluk Konuşmaları",
"CreateAnEvent": "Etkinlik Oluştur",
"Permission:CommunitySpeakers": "Konuşmacılar",
"CreateASpeaker": "Konuşmacı Oluştur",
"Speakers": "Konuşmacılar",
"Image": "Resim",
"GithubURL": "Github URL",
"SpeakerDeletionConfirmationMessage": "Konuşmacıyı silmek istediğinizden emin misiniz?",
"Menu:Speakers": "Konuşmacılar",
"ChooseSpeakerImage": "Konuşmacı resmi seç ...",
"SpeakerImage": "Konuşmacı resmi",
"AddSpeaker": "Konuşmacı Ekle",
"ShowPurchaseItemsOfOrganizations": "Satın alınan öğeler",
"Enum:OrganizationPurchaseState:0": "Teslim edilmedi",
"Enum:OrganizationPurchaseState:1": "Teslim edildi",
"PurchaseItems": "Satın alınan öğeler",
"SuccessfullyUpdated": "Başarıyla güncellendi",
"SuccessfullyAdded": "Başarıyla eklendi",
"PurchaseState": "Satın alma durumu",
"ShowBetweenDayCount": "Gün sayısını göster",
"PurchaseOrder": "Satın alma siparişi",
"ShowCreateInvoiceOfOrganization": "Fatura oluştur",
"ShowCreateQuotationOfOrganization": "Teklif oluştur",
"BookDiscounts": "Kitap indirimleri",
"Menu:BookDiscounts": "Kitap indirimleri",
"BookType": "Kitap türü",
"PurchasePlatform": "Satın alma platformu",
"StartTime": "Başlangıç zamanı",
"EndTime": "Bitiş zamanı",
"CreateABookDiscount": "Kitap indirimi oluştur",
"BookDiscountDeletionConfirmationMessage": "Kitap indirimini silmek istediğinizden emin misiniz?",
"CustomPaymentFlexSwitchDescription": "Lisanslı",
"AllowFeatureUpgradeOnLicenseExpire": "Lisans süresi dolunca özellik yükseltmesine izin ver",
"Deleted{0}": "[{0} silindi]",
"Permission:BookDiscount": "Kitap indirimleri"
}
}

2
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json

@ -142,7 +142,7 @@
"DomainDrivenDesign": "Domain Driven Design",
"CrossCuttingConcerns": "Cross Cutting Concerns",
"AbpCommunity": "ABP Community",
"Footer_GithubStarCount": "{0} Star on GitHub",
"Footer_GithubStarCount": "{0} Stars on GitHub",
"Footer_NugetDownloadCount": "{0} Downloads on NuGet",
"AbpDescription": "ABP is an open source application framework focused on AspNet Core based web application development. Don't repeat yourself, focus on your own business code.",
"Layout_AbpFramework_MetaTitle": "ABP Framework - Open Source Web Application Framework",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hu.json

@ -142,7 +142,7 @@
"DomainDrivenDesign": "Domainvezérelt tervezés",
"CrossCuttingConcerns": "Cross Cutting Concerns",
"AbpCommunity": "ABP közösség",
"Footer_GithubStarCount": "{0} Csillag a GitHubon",
"Footer_GithubStarCount": "{0} csillagok a GitHubon",
"Footer_NugetDownloadCount": "{0} Letöltések a NuGeten",
"AbpDescription": "Az ABP egy nyílt forráskódú alkalmazás keretrendszer, amely az AspNet Core alapú webalkalmazások fejlesztésére összpontosít. Ne ismételje magát, összpontosítson saját üzleti kódjára.",
"Layout_AbpFramework_MetaTitle": "ABP Framework – Nyílt forráskódú webalkalmazás-keretrendszer",

125
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/tr.json

@ -40,6 +40,131 @@
"TrialLicensePeriodWillExpire": "Deneme lisansınızın süresi {0} gün içinde dolacak.",
"TrialLicensePeriodExpireToday": "Deneme lisans süreniz bugün sona erecek.",
"PurchaseNow": "Şimdi satın al!",
"Volo.AbpIo.Domain:030000": "Deneme sürenizi çoktan tamamladınız.",
"Volo.AbpIo.Domain:030001": "Bu kuruluş adı zaten mevcut.",
"Volo.AbpIo.Domain:030002": "Bir kez etkinleştirildiğinde, deneme lisansını -requested- duruma değiştiremezsiniz!",
"Volo.AbpIo.Domain:030003": "Böyle bir durum yok!",
"Volo.AbpIo.Domain:030004": "Beklenmeyen bir hata nedeniyle durum değiştirilemedi!",
"Volo.AbpIo.Domain:030005": "Deneme lisansı -activated- durumundayken başlangıç ve bitiş tarihi güncellenebilir!",
"Volo.AbpIo.Domain:030006": "Bitiş tarihi, başlangıç tarihinden büyük olmalıdır!",
"Volo.AbpIo.Domain:030007": "Bu deneme lisansı zaten etkinleştirildi!",
"Volo.AbpIo.Domain:030008": "Satın alma tarihi ancak durum -purchased- olduğunda ayarlanabilir!",
"Volo.AbpIo.Domain:030009": "Kullanıcı bulunamadı!",
"Volo.AbpIo.Domain:030010": "Deneme lisansını satın almak için önce deneme lisansınızı etkinleştirmeniz gerekir!",
"Volo.AbpIo.Domain:030011": "Satın alınan bir deneme lisansını silemezsiniz!",
"Volo.AbpIo.Domain:070000": "Kuruluş adı yalnızca latin harfleri, sayıları, noktaları ve kısa çizgileri içerebilir!",
"Volo.AbpIo.Domain:070001": "Şirket adı yalnızca latin harfleri, sayıları, noktaları, boşlukları ve kısa çizgileri içerebilir!",
"LatestReleaseLogs": "Son Sürüm Logları",
"RoadMap": "Yol Haritası",
"FAQ": "SSS",
"SourceCode": "Kaynak Kodu",
"SeeAllPosts": "Tüm Gönderileri Gör",
"Contribute": "Katkıda Bulun",
"LiveDemo": "Canlı Demo",
"GetLicense": "Lisans Al",
"OpenSource": "Açık Kaynak",
"WebApplication": "Web Uygulaması",
"MeetTheABP": "ABP'yi Tanıyın",
"CompleteWebDevelopment": "Eksiksiz Bir Web Geliştirme",
"Platform": "Platform",
"ABPDescription": "ABP Framework, en iyi yazılım geliştirme uygulamalarını ve kurallarını takip ederek modern web uygulamaları oluşturmak için eksiksiz bir altyapıdır.",
"StrongInfrastructure": "Güçlü Altyapı",
"CompleteArchitecture": "Eksiksiz Mimari",
"DeveloperFocused": "Geliştirici Odaklı",
"ShareYourExperiences": "ABP Çerçevesi ile ilgili deneyimlerinizi paylaşın",
"LatestPosts": "Son Gönderiler",
"Views": "Görüntülenme",
"LearnLatestNewsAboutABPFramework": "Yeni sürümler, ücretsiz kaynaklar, gönderiler ve daha fazlası gibi ABP'de olup bitenler hakkında bilgi alın.",
"DeveloperTools": "Geliştirici Araçları",
"StartupTemplates": "Başlangıç Şablonları",
"ApplicationModules": "Uygulama Modülleri",
"UI": "Kullanıcı Arayüzü",
"Themes": "Temalar",
"Premium": "Premium",
"PrivacyPolicy": "Gizlilik Politikası",
"TermsAndConditions": "Şartlar ve Koşullar",
"WouldLikeToReceiveMarketingMaterials": "Ürün fırsatları ve özel teklifler gibi pazarlama materyalleri almak istiyorum.",
"JoinOurMarketingNewsletter": "Pazarlama bültenimize katılın",
"CommunityPrivacyPolicyConfirmation": "Şartları, Koşulları ve <a class=\"text-white fw-6 text-decoration-underline opacity-50\" href=\"https://commercial.abp.io/Privacy\">Gizlilik Politikasını</a> kabul ediyorum.",
"WouldLikeToReceiveNotification": "abp.io web sitelerinden en son haberleri almak istiyorum.",
"CommercialNewsletterConfirmationMessage": "<a class=\"text-white fw-6 text-decoration-underline opacity-50\" href=\"https://commercial.abp.io/TermsConditions\">Şartlar ve Koşulları</a> ve <a class=\"text-white fw-6 text-decoration-underline opacity-50\" href=\"https://commercial.abp.io/Privacy\">Gizlilik Politikasını</a> kabul ediyorum.",
"FreeDDDEBook": "Ücretsiz DDD E-Kitabı",
"AdditionalServices": "Ek Hizmetler",
"Learn": "Öğren",
"AccountOverview": "Hesap Özeti",
"MyOrganizations": "Kuruluşlarım",
"MySupportQuestions": "Destek Sorularım",
"MyProfile": "Profilim",
"Logout": "Çıkış Yap",
"Home": "Ev",
"Posts": "Gönderiler",
"JoinTheABPCommunity": "ABP Topluluğuna Katılın",
"SubmitYourPost": "Gönderinizi Gönderin",
"Modules": "Modüller",
"Tools": "Araçlar",
"Pricing": "Fiyatlandırma",
"ChangeLogs": "Değişiklik Logları",
"SubscribeToNewsletter": "Bültenimize Abone Olun",
"SubscribeToNewsletterDescription": "Yeni sürümler, ücretsiz kaynaklar, gönderiler ve daha fazlası gibi ABP'de olup bitenler hakkında bilgi alın.",
"EmailAddress": "E-posta Adresi",
"Subscribe": "Abone Ol",
"WelcomeToABP": "ABP'ye Hoşgeldiniz",
"EULA": "SKLA",
"ABPCommercialIntroductionMessage": "Önceden oluşturulmuş uygulama modülleri, gelişmiş başlangıç şablonları, hızlı uygulama geliştirme araçları, profesyonel kullanıcı arayüzü temaları ve premium destek.",
"MasteringAbpFrameworkEBook": "Mastering ABP Framework",
"MasteringTheABPFrameworkExplanation": "ABP Çerçevesinin yaratıcısı tarafından yazılan bu kitap, çerçeveyi ve modern web uygulaması geliştirme tekniklerini tam olarak anlamanıza yardımcı olacaktır.",
"Speakers": "Konuşmacılar",
"PreviousEvents": "Önceki Etkinlikler",
"WatchTheEvent": "Etkinliği İzle",
"RegisterNow": "Şimdi Kaydol",
"ThereIsNoEvent": "Etkinlik yok",
"Events": "Etkinlikler",
"Volo.AbpIo.Domain:080000": "\"{name}\" adlı bir satın alma öğesi zaten var",
"MasteringAbpFrameworkBook": "Kitap: Mastering ABP Framework",
"ABPIO-CommonPreferenceDefinition": "Yeni gönderiler, etkinlikler ve daha fazlası gibi ABP Platformu hakkındaki en son haberleri alın.",
"BuiltOn": "Üzerinde inşa edildi",
"AbpFramework": "ABP Çerçevesi",
"Volo.AbpIo.Domain:080001": "Başlangıç Zamanı Bitiş Zamanından büyük olamaz",
"Enum:BookType:0": "Mastering ABP Framework",
"Enum:PurchasePlatform:0": "Amazon",
"Enum:PurchasePlatform:1": "Paket",
"Copied": "Kopyalandı!",
"CouldNotCopy": "Kopyalanamadı!",
"CopyNotSupportByYourBrowser": "Tarayıcınız kopyalamayı desteklemiyor",
"City": "Şehir",
"ZipCode": "Posta Kodu",
"Address": "Adres",
"Homepage": "Anasayfa",
"Year": "Yıl",
"Copyright": "Telif hakkı © <a href=\"{0}\" target=\"_blank\">{1}</a>",
"DomainDrivenDesign": "Alan Odaklı Tasarım",
"CrossCuttingConcerns": "Cross Cutting Concerns",
"AbpCommunity": "ABP Topluluğu",
"Footer_GithubStarCount": "Github'da {0} Yıldız",
"Footer_NugetDownloadCount": "{0} NuGet indirme",
"AbpDescription": "ABP, AspNet Core tabanlı web uygulaması geliştirmeye odaklanan açık kaynaklı bir uygulama çerçevesidir. Kendinizi tekrar etmeyin, kendi iş kodunuza odaklanın.",
"Layout_AbpFramework_MetaTitle": "ABP Framework - Açık Kaynak Web Uygulama Çerçevesi",
"CommunityTalks_CountdownDays": "Gün",
"CommunityTalks_CountdownHours": "Saat",
"CommunityTalks_CountdownMinutes": "Dk",
"CommunityTalks_CountdownSeconds": "Sn",
"SeePreviousEvents": "Önceki Etkinlikleri Gör",
"CookieConsent_Accept": "Kabul Et",
"CookieConsent_Explanation_1": "Web sitemizde size en iyi deneyimi sunmak için çerezleri kullanıyoruz.",
"CookieConsent_Explanation_2": "Göz atmaya devam ederseniz, <a href=\"@Url.Page(\"/Privacy\")\">Gizlilik politikamızı ve çerez politikamızı kabul etmiş olursunuz.</a>.",
"Error_Page_400_Title": "İstenen sayfa sunulurken bir sorun oluştu.",
"Error_Page_400_Description_1": "Genellikle bu, isteğiniz işlenirken beklenmedik bir hata oluştuğu anlamına gelir.",
"Error_Page_400_Description_2": "Sorun devam ederse, <a href=\"mailto:info@abp.io\">info@abp.io</a> adresinden bizimle iletişime geçin, size yardımcı olalım.",
"GoToHomepage": "Anasayfaya git",
"Error_Page_404_Title": "Sayfa bulunamadı!",
"Error_Page_404_Description_1": "Aradığınız web sayfası bu değil.",
"Error_Page_500_Title": "Görünüşe göre bir şeyler ters gitti!",
"Error_Page_500_Description_1": "Bu hataları otomatik olarak takip ediyoruz, ancak sorun devam ederse <br /> bizimle iletişime geçmekten çekinmeyin. Bu arada, yenilemeyi deneyin.",
"Error_Page_500_Description_2": "Bizimle <a href=\"mailto:info@abp.io\" target=\"_blank\">info@abp.io</a> adresinden iletişime geçin.",
"Books": "Kitaplar",
"ABPDiscordServer": "ABP Discord Sunucusu",
"ABPCommunityTalks": "ABP Topluluk Konuşmaları",
"ABPCommunityPosts": "ABP Topluluk Gönderileri",
"WelcomeFallCampaign": "Hoş Geldin Sonbahar Kampanyası!",
"GiveAwayForNewPurchases": "Yeni alımlar için Uygulama Geliştirme Sınıfı Eğitimi hediye edilecektir!"
}

2
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json

@ -142,7 +142,7 @@
"DomainDrivenDesign": "领域驱动设计",
"CrossCuttingConcerns": "横切关注点",
"AbpCommunity": "ABP 社区",
"Footer_GithubStarCount": "{0} GitHub Stars",
"Footer_GithubStarCount": "{0} GitHub 上的星星",
"Footer_NugetDownloadCount": "{0} NuGet 下载量",
"AbpDescription": "ABP 是一个开源应用程序框架,专注于基于 AspNet Core 的 Web 应用程序开发。 Don't repeat yourself,专注于自己的业务代码。",
"Layout_AbpFramework_MetaTitle": "ABP 框架 - 开源 Web 应用程序框架",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/tr.json

@ -1,5 +1,7 @@
{
"culture": "tr",
"texts": {
"AbpTitle": "ABP Framework - Açık Kaynak Web Uygulama Çerçevesi",
"AbpDescription": "ABP, AspNet Core tabanlı web uygulaması geliştirmeye odaklanan açık kaynaklı bir uygulama çerçevesidir. Kendinizi tekrar etmeyin, kendi iş kodunuza odaklanın."
}
}

8
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json

@ -268,7 +268,7 @@
"SeeABPSuiteDocument": "Check out the ABP Suite document to learn the usage of ABP Suite.",
"AskQuestionsOnSupport": "You can ask questions on ABP Commercial Support.",
"Documentation": "Documentation",
"SeeModulesDocument": "Check out the modules document for a list of all the commercial(pro) modules and their documents.",
"SeeModulesDocument": "See the modules page for a list of all the PRO modules.",
"Pricing": "Pricing",
"PricingExplanation": "Choose the features and functionality your business needs today. Easily upgrade as your business grows.",
"Team": "Team",
@ -370,8 +370,8 @@
"PurposeOfUsage": "Purpose of usage",
"Industry": "Industry",
"Choose": "- Choose -",
"CompanyOrganizationName": "Company / Organization Name",
"CompanySize": "Company Size",
"CompanyOrganizationName": "Company / Organization name",
"CompanySize": "Company size",
"Next": "Next",
"StartTrial": "Start My Free Trial",
"ContactUsQuestions": "Contact us if you have any questions",
@ -660,7 +660,7 @@
"Landing_Page_PreBuiltApplicationModules": "Pre-Built Application Modules which include most common web application requirements.",
"Landing_Page_ChatModule": "Chat",
"Landing_Page_DocsModule": "Docs",
"Landing_Page_FileManagementModule": "Docs",
"Landing_Page_FileManagementModule": "File Management",
"Landing_Page_CustomerStory_1": "ABP Commercial allowed SC Ventures to deliver a bank-grade multi-tenant silo-database SaaS platform in 9 months to support the accounts receivable / accounts payable supply chain financing of significant value invoices from multiple integrated anchors. The modularity of ABP made it possible for the team to deliver in record time, pass all VAPT, and deploy the containerized microservices stack via full CI/CD and pipelines into production.",
"Landing_Page_CustomerStory_2": "We are seeing the value of using ABP Commercial to reduce the overhead of custom development projects. And the team is able to unify the code pattern in different project streams. We see more potential in the framework for us to build new features faster than before. We trust we will be constantly seeing the value of leveraging ABP Commercial.",
"Landing_Page_CustomerStory_3": "We love ABP. We don't have to write everything from scratch. We start from out-of-the-box features and just focus on what we really need to write. Also, ABP is well-architected and the code is high quality with fewer bugs. If we would have to write everything we needed on our own, we might have to spend years. Once more things we like is that the new version, or issue fixing, or improvement come out very soon\n every other week. We don't wait too long.",

364
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json

@ -178,7 +178,7 @@
"HowManyDevelopers": "ABP Commercial'da kaç geliştirici çalışabilir?",
"HowManyDevelopersExplanation": "ABP Ticari lisansları geliştirici başınadır. Farklı lisans türlerinin farklı geliştirici sınırları vardır. Ancak, ihtiyacınız olduğunda herhangi bir lisans türüne daha fazla geliştirici ekleyebilirsiniz. Lisans türleri, geliştirici sınırları ve ek geliştirici maliyetleri için <a href=\"{0}\">fiyatlar</a> sayfasına bakın.",
"ChangingLicenseType": "Lisans türümü daha sonra yükseltebilir miyim?",
"ChangingLicenseTypeExplanation": "Aktif lisans süreniz içerisinde aradaki farkı ödeyerek bir üst lisansa geçebilirsiniz. Daha yüksek bir lisans planına yükselttiğinizde, yeni planın avantajlarından yararlanırsınız, ancak lisans yükseltmesi, lisansın sona erme tarihini değiştirmez. Ayrıca, mevcut lisansınıza yeni geliştirici lisansları da ekleyebilirsiniz, bkz. \"ABP Ticari üzerinde kaç geliştirici çalışabilir?\"",
"ChangingLicenseTypeExplanation": "Aktif lisans süreniz içerisinde aradaki farkı ödeyerek bir üst lisansa geçebilirsiniz. Daha yüksek bir lisans planına yükselttiğinizde, yeni planın avantajlarından yararlanırsınız, ancak lisans yükseltmesi, lisansın sona erme tarihini değiştirmez. Ayrıca, mevcut lisansınıza yeni geliştirici koltukları da ekleyebilirsiniz, bkz. \"ABP Ticari üzerinde kaç geliştirici çalışabilir?\"",
"LicenseExtendUpgradeDiff": "Lisans uzatma ve yükseltme arasındaki fark nedir?",
"LicenseExtendUpgradeDiffExplanation": "<strong>Uzatma:</strong> Lisansınızı uzatarak/yenileyerek, premium destek almaya ve modüller ve temalar için major veya minor güncellemeler almaya devam edeceksiniz. Ayrıca, yeni projeler oluşturmaya devam edebileceksiniz. Ve geliştirmenizi hızlandıran ABP Suite'i kullanmaya devam edebileceksiniz.<hr/><strong>Yükseltme:</strong> Lisansınızı yükselterek, ek avantajlar elde etmenizi sağlayacak daha yüksek bir lisans planına terfi edeceksiniz. . Lisans planları arasındaki farkları kontrol etmek için <a href=\"/pricing\">lisans karşılaştırma tablosuna</a> bakın.<strong>Öte yandan, yükseltme yaptığınızda lisans geçerlilik bitiş tarihiniz değişmez!</strong >Lisans bitiş tarihinizi uzatmak için lisansınızı uzatmanız gerekir.",
"LicenseRenewalCost": "1 yıl sonra ehliyet yenileme ücreti ne kadardır?",
@ -385,6 +385,366 @@
"RemoveCurrentUserFromOrganizationWarningMessage": "Organizasyondan kendinizi kaldırıyorsunuz. Artık bu organizasyonu yönetemeyeceksiniz, onaylıyor musunuz? ",
"RenewExistingOrganizationOrCreateNewOneMessage": "Aşağıdaki \"Şimdi Uzat\" buton(lar)una tıklayarak organizasyon(lar)ınızın lisansını yenileyebilir ve böylece lisans geçerlilik süresini 1 yıl uzatabilirsiniz. Ödemeye devam ederseniz, yeni bir organizasyonunuz olacak. Yeni bir organizasyonla devam etmek istiyor musunuz? ",
"ExtendNow": "Şimdi Uzat",
"ContinueWithNewOrganization": "Yeni bir organizasyon ile devam et"
"ContinueWithNewOrganization": "Yeni bir organizasyon ile devam et",
"Owner": "sahip",
"AddNewOwner": "Yeni sahip ekle",
"AddNewDeveloper": "Yeni geliştirici ekle",
"FirstNameField": "Ad",
"LastNameField": "Soyad",
"AbpCommercialMetaTitle": "ABP Commercial - Eksiksiz Web Geliştirme Platformu : {0} | ABP Commercial",
"AbpCommercialMetaDescription": "ABP Commercial, açık kaynaklı ABP çerçevesinin üzerine inşa edilmiş önceden oluşturulmuş uygulama modülleri, hızlı geliştirme araçları, kullanıcı arayüzü temaları ve hizmetlerinden oluşan bir settir.",
"WhatHappensWhenLicenseEnds": "Lisans sürem sona erdiğinde ne olacak?",
"WhatHappensWhenLicenseEndsExplanation1": "ABP Ticari lisansı <a href=\"{0}\" target=\"_blank\">kalıcı bir lisanstır</a>. Lisansınızın süresi dolduktan sonra projenizi geliştirmeye devam edebilirsiniz. Ve lisansınızı yenilemek zorunda değilsiniz. Lisansınız kutudan bir yıllık güncelleme ve destek planı ile birlikte gelir. Yeni özellikler, performans geliştirmeleri, hata düzeltmeleri, destek almaya devam etmek ve ABP Suite'i kullanmaya devam etmek için lisansınızı yenilemeniz gerekir. Lisansınızın süresi dolduğunda aşağıdaki avantajlardan yararlanamazsınız:",
"WhatHappensWhenLicenseEndsExplanation2": "ABP Ticari'yi kullanarak yeni çözümler oluşturamazsınız, ancak mevcut uygulamalarınızı sonsuza kadar geliştirmeye devam edebilirsiniz.",
"WhatHappensWhenLicenseEndsExplanation3": "MINOR sürümünüzdeki modüller ve temalar için güncellemeleri alabileceksiniz (RC veya Önizleme sürümleri hariç). Örneğin: bir modülün v3.2.0 sürümünü kullanıyorsanız, bu modülün v3.2.x (v3.2.1, v3.2.5... vb.) sürümleri için güncellemeleri almaya devam edebilirsiniz. Ancak bir sonraki büyük veya küçük sürüm için güncelleme alamazsınız (v3.3.0, v3.3.3, 4.x.x... gibi). Örneğin, lisansınızın süresi dolduğunda, en son sürüm v4.4.3 idi ve daha sonra hem 4.4.4 sürümünü hem de 4.5.0 sürümünü yayınladı, v4.4.X'e erişebilirsiniz, ancak v4.5.X'e erişemezsiniz.",
"WhatHappensWhenLicenseEndsExplanation4": "Lisansınız sona erdikten sonra ABP Ticari platformuna eklenen yeni modülleri ve temaları yükleyemezsiniz.",
"WhatHappensWhenLicenseEndsExplanation5": "ABP Suite'i kullanamazsınız.",
"WhatHappensWhenLicenseEndsExplanation6": "Artık <a href=\"{0}\">premium desteği</a> alamazsınız.",
"WhatHappensWhenLicenseEndsExplanation7": "Bu avantajlardan yararlanmaya devam etmek istiyorsanız lisansınızı uzatabilirsiniz (yenileyebilirsiniz). Lisansınızın süresi dolduktan sonra <strong>1 ay</strong> içinde lisansınızı uzatırsanız, aşağıdaki indirimler uygulanacaktır: Takım Lisansı {0} % indirim, İşletme Lisansı %{1} indirim, Kurumsal Lisans %{2} indirim.",
"WhatHappensWhenLicenseEndsExplanation8": "Oluşturduğunuz ABP projeleri sunucularımızda saklanmamaktadır. Bu nedenle indirdiğiniz kaynak kodunu saklamak sizin sorumluluğunuzdadır. Lisansınızın süresi dolduğunda, oluşturulan ABP proje kaynak kodunuzu almanın bir yolu yoktur.",
"TrialPlanExplanation": "ABP Ticari takım lisansı için 14 günlük deneme süresi var. Daha fazla bilgi için <a href={0} target='_blank'>burayı</a> ziyaret edin. Ayrıca, Takım lisansları için 30 günlük para iade garantisi veriyoruz. Sadece ilk 30 gün içinde geri ödeme talebinde bulunabilirsiniz. İşletme ve Kurumsal lisansları için 30 gün içinde %60 geri ödeme sağlıyoruz. Bunun nedeni, İşletme ve Kurumsal lisanslarının tüm modüllerin ve temaların tam kaynak kodunu içermesidir.",
"ContactUsQuestions": "Herhangi bir sorunuz varsa bizimle iletişime geçin",
"ActivationRequirement": "Denemenizi başlatmanıza son bir adım kaldı.<br>Bilgilerinizi kontrol ettikten sonra lisansınızı etkinleştireceğiz. Lisansınız etkinleştirildiğinde, <b>{0}</b> adresine bir e-posta göndereceğiz. Merak etmeyin bu süreç uzun sürmeyecek!",
"PurchaseNow": "Şimdi satın al",
"DowngradeLicensePlan": "Gelecekte daha düşük bir lisans planına geçebilir miyim?",
"DowngradeLicensePlanExplanation": "Mevcut lisans planınızı düşüremezsiniz. Ancak yeni bir daha düşük lisans planı satın alabilir ve yeni lisans üzerinde geliştirmenize devam edebilirsiniz. Daha düşük bir lisans satın aldıktan sonra, ABP CLI komutu ile yeni lisans planınıza giriş yapmanız yeterlidir: ` abp login <username> -o <organization> `.",
"LicenseTransfer": "Lisans bir geliştiriciden diğerine aktarılabilir mi?",
"LicenseTransferExplanation": "Evet! Bir lisans satın aldığınızda, lisans sahibi olursunuz, dolayısıyla kuruluş yönetim sayfasına erişiminiz olur. Bir kuruluşun sahip ve geliştirici rolleri vardır. Sahipler geliştirici lisanslarını yönetebilir ve geliştiriciler atayabilir. Atanan her geliştirici, ABP CLI komutu sisteme girecek ve geliştirme ve destek izinlerine sahip olacaktır.",
"UserOwnerDescription": "Kuruluşun 'Sahibi' bu hesabın yöneticisidir. Lisansları satın alarak ve geliştiricileri tahsis ederek organizasyonu yönetir. Bir 'Sahip' ABP Ticari projelerine kod yazamaz, ABP örnek projelerini indiremez ve destek web sitesinde soru soramaz. Tüm bunları yapmak istiyorsanız, kendinizi de geliştirici olarak eklemeniz gerekir.",
"UserDeveloperDescription": "'Geliştiriciler' ABP Ticari projelerinde kod yazabilir, ABP örnek projelerini indirebilir ve destek web sitesinde sorular sorabilir. Öte yandan, 'Geliştiriciler' bu organizasyonu yönetemezler.",
"PurchaseTrialOrganizationOrCreateNewOneMessage": "Deneme lisansınız var. Deneme lisansınızı satın almak için Şimdi Satın Al düğmesine tıklayın. Ödeme işlemine devam ederseniz, yeni bir kuruluşunuz olacak. Yeni bir organizasyon ile devam etmek istiyor musunuz?",
"CreateNewOrganization": "Yeni bir organizasyon oluştur",
"RenewLicenseEarly": "Lisansımı erken yenilersem, tüm yılı alacak mıyım?",
"RenewLicenseEarylExplanation": "Lisansınızı lisans bitiş tarihinizden önce yenilediğinizde, lisans bitiş tarihinize 1 yıl eklenecektir. Örneğin, lisansınızın süresi {0}-06-06 tarihinde doluyorsa ve lisansınızı {0}-01-01 tarihinde yenilediyseniz, yeni lisans bitiş tarihiniz {1}-06-06 olacaktır.",
"OpenSourceWebApplication": "Açık Kaynak Web Uygulaması",
"CompleteWebDevelopment": "Tam Web Geliştirme",
"ABPFrameworkDescription": "ABP Framework, yazılım geliştirme ve sözleşmelerin en iyi uygulamalarını takip ederek modern web uygulamaları oluşturmak için eksiksiz bir altyapıdır.",
"CommunityDescription": "ABP Çerçevesi ile ilgili deneyimlerinizi paylaşın!",
"GetStarted": "Başlayın",
"Views": "Görünümler",
"LatestPosts": "Son Gönderiler",
"PreBuiltApplication": "Önceden Oluşturulmuş Uygulama",
"DatabaseProviders": "Veritabanı Sağlayıcıları",
"UIFrameworks": "UI Çerçeveleri",
"UsefulLinks": "Faydalı Bağlantılar",
"Platform": "Platform",
"CoolestCompaniesUseABPCommercial": "En havalı şirketler zaten <span class=\"fw-6\">ABP Commercial</span> kullanıyor.",
"UserInterface": "Kullanıcı Arayüzü",
"APIGateway": "API Ağ Geçidi",
"Microservice": "Mikro Hizmet",
"Database": "Veritabanı",
"Architecture": "Mimari",
"MicroserviceArchitectureExplanation": "Bu, en son teknolojilerle ölçeklenebilir bir mikro hizmet çözümü oluşturmak için birden çok uygulama, API ağ geçidi, mikro hizmet ve veritabanlarından oluşan eksiksiz bir çözüm mimarisidir.",
"BusinessLogic": "İş Mantığı",
"DataAccessLayer": "Veri Erişim Katmanı",
"Monolith": "Monolit",
"ModularArchitectureExplanation": "Bu başlangıç şablonu, temiz ve sürdürülebilir bir kod tabanı oluşturmak için katmanlı, modüler ve DDD tabanlı bir çözüm mimarisi sağlar.",
"SeeDetails": "Ayrıntıları Gör",
"SeeDocumentation": "Belgelere göz atın",
"Bs5Compatible": "Bootstrap 5 uyumlu profesyonel tema, yönetici web siteniz için mükemmel.",
"LeptonXTheme": "LeptonX Tema",
"LeptonXDark": "LeptonX Koyu",
"LeptonXLight": "LeptonX Açık",
"LeptonXSemiDark": "LeptonX Yarı Koyu",
"BuiltOnBs5Library": "Bootstrap 5 kütüphanesi üzerine inşa edilmiştir.",
"FullyCompatibleWithBs5": "Bootstrap 5 HTML yapısı ve CSS sınıfları ile %100 uyumlu",
"ResponsiveAndMobileCompatible": "Responsive, mobil uyumlu, RTL desteği",
"ProvidesStylesForDatatables": "Datatables için stil sağlar",
"MultipleLayoutOptions": "Çoklu düzen seçenekleri",
"EasilyInstallAndUpgrade": "Kolay kurulum ve yükseltme",
"SupportForum": "Destek Forumu",
"TrustedBy": "Güvenenler",
"OurPricing": "<span class=\"gradient-commercial\">Fiyatlandırmamız</span>",
"Plans": "Planlar",
"NameSurname": "Ad Soyad",
"Unspecified": "Belirtilmemiş",
"LicenceType": "Lisans Türü",
"LicenseDiscountWarning": "BU İNDİRİM SAYFASI VARSAYILAN İNDİRİM KODU VE VOLOSOFT GELİŞTİRİCİLERİ İÇİN KULLANILMAKTADIR. AŞAĞIDAKİ SATIN ALMA LİNKLERİ ÇALIŞMAZ.",
"DiscountedLicenseExplanation": "Bu lisans fiyatları küçük girişimler, bireysel geliştiriciler, öğrenciler, kar amacı gütmeyen kuruluşlar ve projeler içindir!",
"General": "Genel",
"License": "Lisans",
"Development": "Geliştirme",
"Payment": "Ödeme",
"WatchExplainerVideo": "Hadi Tanışalım! Açıklayıcı Videoyu İzleyin",
"LightDarkAndSemiDarkThemes": "Açık, koyu ve yarı koyu temalar",
"LeptonXThemeExplanation": "Lepton Teması, temanızı sistem ayarlarınıza göre değiştirebilir.",
"PRO": "PRO",
"WelcomeToABPCommercial": "<span class=\"gradient-commercial\">ABP Commercial</span>'a hoş geldiniz!",
"YourAccountDetails": "Hesap bilgileriniz",
"OrganizationName": "Organizasyon Adı",
"AddDevelopers": "Geliştiriciler Ekle",
"StartDevelopment": "Geliştirmeye Başla",
"CreateAndRunApplicationUsingStartupTemplate": "ABP Ticari başlangıç şablonunu kullanarak yeni bir web uygulamasının nasıl oluşturulacağını ve çalıştırılacağını öğrenin.",
"CommunityDescription2": "<span class=\"fw-6\">community.abp.io</span>, insanların ABP ile ilgili makaleleri paylaşabileceği bir yerdir. Makaleler, öğreticiler, kod örnekleri, vaka çalışmaları arayın ve sizinle aynı kulvarda olan insanlarla tanışın.",
"UseABPSuiteExplanation": "Modüllerin ve temaların kaynak kodunu indirmek için ABP Suite'i kullanın.",
"ManageModulesWithSuite": "ABP modüllerinizi Suite ile de yönetebilirsiniz.",
"LearnHowToInstallSuite": "ABP Suite'in nasıl kurulacağını ve kullanılacağını öğrenin.",
"SeeMore": "Daha fazla göster",
"SeeLess": "Daha az göster",
"LayeredSolutionStructure": "Katmanlı Çözüm Yapısı",
"LayeredSolutionStructureExplanation": "Çözüm, iş mantığınızı altyapıdan ve entegrasyonlardan izole etmek ve kodun sürdürülebilirliğini ve yeniden kullanılabilirliğini en üst düzeye çıkarmak için Etki Alanı Güdümlü Tasarım ilkelerine ve modellerine dayalı olarak katmanlandırılmıştır. ABP Framework, uygulamanız için DDD'yi gerçekten uygulamak üzere soyutlamalar, temel sınıflar ve kılavuzlar sağlamaktadır.",
"MultipleUIOptions": "Çoklu UI Seçenekleri",
"MultipleUIOptionsExplanation": "Kullanıcı Arayüzü oluşturmanın farklı yollarını seviyoruz. Bu başlangıç çözümü, iş uygulamanız için üç farklı UI çerçeve seçeneği sunuyor.",
"MultipleDatabaseOptions": "Çoklu Veritabanı Seçenekleri",
"MultipleDatabaseOptionsExplanation": "İki veritabanı sağlayıcısı seçeneğiniz var (her ikisini de tek bir uygulamada kullanmanın yanı sıra). Herhangi bir ilişkisel veritabanıyla çalışmak için Entity Framework Core'u kullanın ve daha iyi bir performans için düşük seviyeli sorgular yazmanız gerektiğinde isteğe bağlı olarak Dapper'ı kullanın. Belge tabanlı bir NoSQL veritabanı kullanmanız gerekiyorsa MongoDB başka bir seçenektir. Bu sağlayıcılar iyi entegre edilmiş, soyutlanmış ve önceden yapılandırılmış olsa da, .NET ile kullanabileceğiniz herhangi bir veritabanı sistemiyle etkileşime girebilirsiniz. ",
"ModularArchitectureExplanation2": "Modülerlik, ABP.IO platformunda birinci sınıf bir vatandaştır. Uygulamalardaki tüm işlevler iyi izole edilmiş opsiyonel modüllere ayrılmıştır. Başlangıç çözümü zaten temel <a href=\"@Url.Page(\"/Modules\")\" class=\"text-primary\">ABP Ticari modülleri</a> önceden yüklenmiş olarak gelir. Kendi uygulamanız için modüler bir sistem oluşturmak üzere kendi modüllerinizi de oluşturabilirsiniz.",
"MultiTenancyForSaasBusiness": "Saas İşletmeleri için Çoklu Kiralama",
"MultiTenancyForSaasBusinessExplanation": "ABP Commercial, SaaS (Hizmet Olarak Yazılım) sistemlerinizi oluşturmak için eksiksiz, uçtan uca çoklu kiracılık sistemi sağlar. Anında veritabanı oluşturma ve taşıma sistemi ile kiracıların kendi veritabanlarını paylaşmalarına veya sahip olmalarına olanak tanır.",
"MicroserviceStartupSolution": "Mikro Hizmet Başlangıç Çözümü",
"MicroserviceArchitectureExplanation2": "Önceden oluşturulmuş temel çözümden ve damıtılmış deneyimden yararlanmak için bir sonraki mikro hizmet sisteminiz için alabilirsiniz.",
"PreIntegratedTools": "Popüler araçlara önceden entegre edilmiş",
"PreIntegratedToolsExplanation": "Çözüm halihazırda endüstri standardı araçlara ve teknolojilere entegre edilmiş durumda, ancak siz bunları her zaman değiştirebilir ve favori araçlarınıza entegre edebilirsiniz.",
"SingleSignOnAuthenticationServer": "Tek Oturum Açma Kimlik Doğrulama Sunucusu",
"SingleSignOnAuthenticationServerExplanation": "Çözüm, API erişim yönetimi özelliklerine sahip tek oturum açma sunucusu olarak diğer uygulamalar tarafından kullanılan bir kimlik doğrulama sunucusu uygulamasına sahiptir. IdentityServer tabanlıdır.",
"WebAppsWithGateways": "2 API Ağ Geçidi ile 2 Web Uygulaması",
"WebAppsWithGatewaysExplanation": "Çözüm, her biri özel bir API ağ geçidine sahip iki web uygulaması içeriyor (BFF - Backend For Frontend modeli).",
"BackOfficeApplication": "Back Office Uygulaması",
"BackOfficeApplicationExplanation": "Birden fazla UI çerçeve seçeneği ile sisteminizin gerçek web uygulaması. Her türlü iş uygulamasını oluşturabilirsiniz.",
"LandingWebsite": "Açılış Web Sitesi",
"LandingWebsiteExplanation": "Şirketinizi tanıtmak, ürünlerinizi satmak gibi çeşitli amaçlar için kullanılabilecek genel bir açılış/genel web sitesi.",
"ABPFrameworkEBook": "Mastering ABP Framework e-kitabı",
"MasteringAbpFrameworkEBookDescription": "ABP Ticari lisansınıza dahildir",
"FullName": "Tam Ad",
"LicenseTypeNotCorrect": "Lisans tipi doğru değil.",
"Trainings": "Eğitimler",
"ChooseTrainingPlaceholder": "Eğitim seçin ...",
"DoYouNeedTrainings": "Bu eğitimlerden birine ihtiyacınız var mı?",
"DoYouNeedTraining": "{0} eğitimine ihtiyacınız var mı?",
"GetInTouchUs": "Bize Ulaşın",
"ForMoreInformationClickHere": "Daha fazla bilgi için <a href='{0}'>buraya tıklayın.</a>",
"IsGetOnboardingTraining": "İşe alım ve web uygulaması geliştirme eğitimi almak ister misiniz?",
"OnboardingWebApplicationDevelopmentTrainingMessage": "Eğitim takviminizi planlamak için lütfen organizasyonu oluşturduktan sonra {0} ile iletişime geçin",
"CustomPurchaseMessage": "Bir sonraki adım için, bizimle iletişime geçmek üzere {0}'a tıklayın.",
"Note": "Not",
"AdditionalNote": "Ek Not",
"OnboardingTrainingFaqTitle": "ABP onboarding eğitiminiz var mı?",
"OnboardingTrainingFaqExplanation": " Evet, ABP projenizi hızlı bir şekilde başlatmanıza yardımcı olacak ABP Eğitim Hizmetlerimiz var. Bir ABP çekirdek ekip üyesinden ABP hakkında bilgi edinecek ve ABP projenize başlamak için gereken becerileri edineceksiniz. İlk katılım eğitiminde, geliştirme ortamınızı nasıl kuracağınızı, gerekli araçları nasıl yükleyeceğinizi ve tamamen işlevsel bir CRUD sayfasını nasıl oluşturacağınızı açıklayacağız. Eğitim canlı olacak ve Zoom uygulaması kullanılacaktır, ancak diğer çevrimiçi toplantı platformlarını kullanmaya da açığız. Eğitim dili İngilizce olacaktır. ABP ile ilgili sorularınızı oturumlar sırasında da sorabilirsiniz. Her iki taraf için de uygun bir zaman ve tarih planlanacaktır. Daha fazla bilgi almak için <a href=\"mailto:info@abp.io\">info@abp.io</a> adresinden bizimle iletişime geçebilirsiniz.",
"AddBasket": "Sepete Ekle",
"SendTrainingRequest": "Eğitim Talebi Gönder",
"OnlyEnglishVersionOfThisDocumentIsTheRecentAndValid": "* Bu belgenin İngilizce versiyonu en güncel olanıdır ve herhangi bir anlaşmazlıkta İngilizce versiyonu geçerli olacaktır.",
"Pricing_Page_Title": "Planlar ve Fiyatlandırma",
"Pricing_Page_Description": "İşletmenizin bugün ihtiyaç duyduğu özellikleri ve işlevselliği seçin. Bir ABP Ticari lisansı satın alın ve sınırsız proje oluşturun.",
"Pricing_Page_HurryUp": "Acele edin!",
"Pricing_Page_BuyLicense": "16 Ocak'a kadar <strong>2021 fiyatlarıyla</strong> lisans satın alın!",
"Pricing_Page_ValidForExistingCustomers": "Mevcut müşteriler ve lisans yenilemeleri için de geçerlidir.",
"Pricing_Page_Hint1": "Lisans fiyatına belirli sayıda geliştirici koltuğu dahildir. Daha fazla geliştiriciniz varsa, her zaman ek koltuk satın alabilirsiniz.",
"Pricing_Page_Hint2": "Şimdi veya gelecekte daha fazla geliştirici koltuğu satın alabilirsiniz. Lisanlar koltuk bazlıdır, bu nedenle bir koltuğu bir geliştiriciden diğerine aktarabilirsiniz.",
"Pricing_Page_Hint3": "Lisansınız ile sınırsız sayıda farklı ürün geliştirebilirsiniz.",
"Pricing_Page_Hint4": "ABP Suite, üretkenliğinizi artırmak için geliştirmenize yardımcı olacak bir araçtır. CRUD sayfaları oluşturmayı ve yeni projeler oluşturmayı destekler.",
"Pricing_Page_Hint5": "Önceden oluşturulmuş tüm modülleri uygulamalarınızda kullanabilirsiniz.",
"Pricing_Page_Hint6": "Önceden oluşturulmuş tüm temaları uygulamalarınızda kullanabilirsiniz.",
"Pricing_Page_Hint7": "Başlangıç şablonu, projenize hızlı bir başlangıç yapmanızı sağlayan bir Visual Studio çözümüdür. Tüm temel modüller eklenir ve sizin için önceden yapılandırılır.",
"Pricing_Page_Hint8": "Mastering ABP Framework e-kitabı, .NET çözümlerinin en iyi uygulamalarla nasıl hayata geçirileceğini anlatıyor. Amazon.com'da satılmaktadır ve kitabı lisansınız dahilinde ücretsiz olarak indirebilirsiniz.",
"Pricing_Page_Hint9": "Herhangi bir modülün kaynak kodunu indirebilirsiniz. Köklü değişiklikler yapmak için kaynak kodunu çözümünüze eklemek veya güvenlik nedeniyle kendinize saklamak isteyebilirsiniz.",
"Pricing_Page_Hint10": "Lisanslar ömür boyu geçerlidir. Bu, uygulamanızı sonsuza kadar geliştirmeye devam edebileceğiniz anlamına gelir. En son sürüme erişim ve destek alma lisans süresi içinde (yenilemediğiniz sürece 1 yıl) verilir.",
"Pricing_Page_Hint11": "Dağıtım konusunda kısıtlama yok! Bulut hizmetleri veya şirket içi dahil olmak üzere istediğiniz kadar sunucuya dağıtabilirsiniz.",
"Pricing_Page_Hint12": "Aktif lisans süreniz içinde modülleri, temaları ve araçları en son sürüme güncelleyebilirsiniz. Lisansınızın süresi dolduktan sonra, hata düzeltmeleri, yeni özellikler ve geliştirmelerle ilgili güncellemeleri almaya devam etmek için lisansınızı yenilemeniz gerekir.",
"Pricing_Page_Hint13": "Premium desteği bir yıl boyunca alabilirsiniz (uzatmak için lisansınızı yenileyebilirsiniz).",
"Pricing_Page_Hint14": "Ekip ve İşletme lisanslarının olay/soru sayısı limiti vardır. Ek geliştirici lisansları satın alırsanız, olay limitiniz geliştirici başına {0} (Ekip Lisansı için) veya {1} (İşletme Lisansı için) artar.",
"Pricing_Page_Hint15": "Sadece Kurumsal Lisans özel destek içerir. Özel bilet seçeneği ile doğrudan ABP Ekibine e-posta gönderebilir veya support.abp.io adresinden soru sorabilirsiniz. Özel biletler herkese açık değildir.",
"Pricing_Page_Hint16": "Tüm ABP temalarının kaynak kodunu indirebilirsiniz. Köklü değişiklikler yapmak için kaynak kodunu çözümünüze eklemek isteyebilir veya güvenlik nedeniyle kendiniz için saklayabilirsiniz.",
"Pricing_Page_Testimonial_1": "ABP Commercial, SC Ventures'ın 9 ay içinde banka sınıfı çok kiracılı bir silo-veritabanı SaaS platformu sunmasını ve birden fazla entegre çapadan gelen önemli değerdeki faturaların alacak / borç hesapları tedarik zinciri finansmanını desteklemesini sağladı. ABP'nin modülerliği, ekibin rekor sürede teslimat yapmasını, tüm VAPT'leri geçmesini ve konteynerleştirilmiş mikro hizmet yığınını tam CI/CD ve boru hatları aracılığıyla üretime dağıtmasını mümkün kıldı.",
"Pricing_Page_Testimonial_2": "Özel geliştirme projelerinin ek yükünü azaltmak için ABP Commercial kullanmanın değerini görüyoruz. Ekip, farklı proje akışlarında kod modelini birleştirebiliyor. Yeni özellikleri eskisinden daha hızlı oluşturabilmemiz için çerçevede daha fazla potansiyel görüyoruz. ABP Commercial'dan yararlanmanın değerini sürekli olarak göreceğimize inanıyoruz.",
"Pricing_Page_Testimonial_3": "ABP'yi seviyoruz. Her şeyi sıfırdan yazmak zorunda kalmıyoruz. Kullanıma hazır özelliklerden başlıyoruz ve sadece gerçekten yazmamız gerekenlere odaklanıyoruz. Ayrıca, ABP iyi tasarlanmış ve kod daha az hata ile yüksek kalitede. İhtiyaç duyduğumuz her şeyi kendi başımıza yazmak zorunda kalsaydık, yıllarımızı harcamak zorunda kalabilirdik. Hoşumuza giden bir diğer şey de yeni sürümün, sorun düzeltmenin ya da iyileştirmenin iki haftada bir çıkması. Çok uzun süre beklemiyoruz.",
"Pricing_Page_Testimonial_4": "ABP Commercial harika bir ürün, tavsiye ederim. Müşterilerimiz için ticari ürünleri tek bir yapılandırılabilir platformda pazara sunuyor. Çerçeve ve araçların herhangi bir ekibe sağladığı hızlı başlangıç her kuruşa değer. ABP Commercial ihtiyaçlarımız için en uygun üründü.",
"Pricing_Page_Testimonial_5": "ABP Framework sadece bir framework değil, aynı zamanda bir proje geliştirme/yönetme rehberi, çünkü DDD, GenericRepository, DI, Microservice ve Modularity eğitimleri veriyor. Framework'ün kendisini kullanmayacak olsanız bile, iyi ve profesyonelce hazırlanmış docs.abp.io ile kendinizi geliştirebilirsiniz (OpenIddict, Redis, Quartz vb.). Birçok şey önceden hazır olduğu için proje geliştirme süresini önemli ölçüde kısaltıyor (Giriş sayfası, istisna işleme, veri filtreleme, tohumlama, denetim günlüğü, yerelleştirme, otomatik API denetleyicisi vb.) Uygulamamızdan bir örnek olarak, stok kontrolü için Local Event Bus kullandım. Böylece stok işleyicisi yazarak sipariş hareketlerini yönetebiliyorum. CreationTime, CreatorId için zaman kaybetmemek harika. Bunlar otomatik olarak dolduruluyor.",
"AbpBookDownloadArea_ClaimYourEBook": "<span class='gradient-framework'>Mastering ABP Framework</span> E-Kitabınızı talep edin",
"AddMemberModal_Warning_1": "Eklemeye çalıştığınız <strong>kullanıcı adı</strong> sistemde yoksa, lütfen ekip üyenizden <a href='{0}/Account/Register'>{0}</a> adresine kaydolmasını ve hesabının kullanıcı adını sizinle paylaşmasını isteyin.",
"MyOrganizations_Detail_WelcomeMessage": "Organizasyonunuza hoş geldiniz, {0}",
"MyOrganizations_Detail_OrganizationManagement": "Organizasyon <span class=\"gradient-commercial\">Yönetimi</span>",
"OrganizationDisplayName": "Organizasyon Görünür Adı",
"MyOrganizations_Detail_EditDisplayName": "Görünür adı düzenle",
"MyOrganizations_Detail_LicenseStartAndExpiryDate": "Lisans Başlangıç Tarihi - Sona Erme Tarihi",
"MyOrganizations_Detail_OwnerRightInfo": "{1} sahiplik hakkınızın {0}'ını kullanıyorsunuz.",
"MyOrganizations_Detail_CopyApiKey": "Anahtarı Kopyala",
"MyOrganizations_Detail_ApiKeyDescription": "API Anahtarı, <a href=\"{0}\" target=\"_blank\" class=\"text-primary\" rel=\"noopener\">{1}</a> üzerinde barındırılan PRO paketlerinin belirtecidir.",
"MyOrganizations_Detail_YourPrivateNugetSource": "Özel NuGet kaynağınız <a href=\"{0}\" arget=\"_blank\" class=\"text-primary\" rel=\"noopener\">{0}</a>",
"MyOrganizations_Detail_PrivateNugetSourceWarning": "Bu, ABP çözümünüzdeki NuGet.Config'inize otomatik olarak bir besleme olarak eklenir. Özel anahtarınızı yetkisiz kullanıcılarla paylaşmayın!",
"MyOrganizations_Detail_DeveloperSeatInfo": "{1} geliştirici koltuğunuzun {0} tanesini kullanıyorsunuz.",
"NeedMoreSeatsForYourTeam": "Takımınız için daha fazla geliştirici koltuğu gerekiyor mu?",
"MyOrganizations_Detail_PricePerYear": "{0} / per year",
"MyOrganizations_Detail_UpgradeYourLicense": "Lisansınızı yükseltin",
"MyOrganizations_Detail_PurchaseDeveloperSeats": "Geliştirici Koltuğu Satın Alın",
"Invoices": "Faturalar",
"RequestInvoice": "Fatura Talep Et",
"OrderNumber": "Sipariş Numarası",
"Date": "Tarih",
"Products": "Ürünler",
"TotalPrice": "Toplam Fiyat",
"ThereIsNoInvoice": "Fatura yok",
"MyOrganizations_Detail_PaymentProviderInfo": "Lisansınızı <i>{0}</i> ağ geçidi üzerinden satın aldıysanız, PDF faturasını e-posta adresinize gönderir, bkz. <a href=\"{1}\" target=\"_blank\"> {0} faturalandırma.</a>",
"MyOrganizations_Detail_PayUInfo": "If you have purchased through the <i>PayU</i> gateway, click the \"Request Invoice\" button and fill in the billing information.",
"MyOrganizations_Detail_ConclusionInfo": "Fatura talebiniz {0} iş günü içerisinde sonuçlandırılacaktır.",
"ExtendYourLicense": "{0} lisansınızı uzatın",
"Continue": "Devam et",
"DownloadInvoiceModal_DownloadInvoice": "Faturayı İndir",
"DownloadInvoiceModal_SaveInformationOnlyOnce": "Fatura bilgilerinizi yalnızca bir kez kaydedebilirsiniz.",
"InvoiceModal_EnterCompanyName": "Yasal şirket adınızı girin...",
"InvoiceModal_EnterCompanyAddress": "Yasal şirket adresinizi girin...",
"InvoiceModal_EnterTaxNumber": "Varsa VERGİ/KDV numaranızı girin...",
"RequestInvoiceModal_EnterNotes": "Faturanızla ilgili ekstra mesajınızı girin...",
"PrePayment_PayWithIyzico": "Iyzico ile ödeyeceksiniz",
"ContinueToCheckout": "Ödeme ekranına git",
"PrePayment_IyzicoRedirectionInfo": "Satın alma işleminizi güvenli bir şekilde tamamlamak için Iyzico Ödeme Geçidine yönlendirileceksiniz.",
"PrePayment_IyzicoAcceptVisaAndMasterCard": "Iyzico Visa ve MasterCard kabul etmektedir.",
"Purchase": "Satın al",
"AcceptTermsAndConditions": "<a href=\"{0}\" target=\"_blank\" class=\"text-primary\" rel=\"noopener\">Gizlilik politikasını</a>, <a href=\"{1}\" target=\"_blank\" class=\"text-primary\" rel=\"noopener\">hüküm ve koşulları</a> ve <a href=\"{2}\" target=\"_blank\" class=\"text-primary\">EULA</a>'yı okudum, anladım ve kabul ediyorum.",
"AcceptTermsAndConditionsWarningMessage": "Lütfen gizlilik politikasını ve hüküm ve koşulları kabul edin",
"SelectGatewayToContinue": "Devam etmek için lütfen bir Ağ Geçidi seçin!",
"GatewaySelection_SelectGateway": "Bir Ödeme Ağ Geçidi Seçin",
"GatewaySelection_RedirectionMessage": "Sonrasında, işlem için seçilen ödeme ağ geçidinin web sitesine yönlendirileceksiniz.",
"PaymentSucceed_PaymentSuccessMessage": "Ödeme Başarılı",
"PaymentSucceed_ThanksForPurchase": "Satın aldığınız için teşekkür ederiz!",
"PaymentSucceed_CreateYourOrganization": "Organizasyonunuzu oluşturun",
"PaymentSucceed_AddMeAsDeveloper": "Ben de bir geliştiriciyim, beni organizasyonuma bir geliştirici olarak ekleyin.",
"PaymentSucceed_CreateOrganization": "Organizasyon Oluştur",
"PaymentSucceed_OrganizationDescription": "Bir organizasyon geliştiriciler ve sahiplerden oluşur. Geliştiriciler, ABP projesinde kod yazan ve <a href=\"{0}\" target=\"_blank\">{1}</a> web sitesinden yararlanacak olan kullanıcılardır. Sahipler ise geliştirici koltuklarını tahsis eden ve lisanslamayı yöneten kullanıcılardır.",
"PaymentSucceed_ViewOrganization": "Organizasyonu görüntülemek için buraya tıklayın",
"Purchase_TotalAnnualPrice": "TOPLAM <small class=\"opacity-50\">(yıllık ücret)</small>",
"Purchase_TrainingPrice": "Eğitim Fiyatı",
"Purchase_OnboardingTraining": "ABP Onboarding & Web Uygulama Geliştirme Canlı Eğitimi",
"TotalDeveloperPrice": "Toplam Geliştirici Fiyatı",
"Purchase_PricePerDeveloper": "<span>{0} {1}</span> geliştirici başına",
"Purchase_IncludedDeveloperInfo": "{0} {1} dahil.",
"Purchase_LicenseExtraDeveloperPurchaseMessage": "<span class=\"fw-6\">{0} lisansı</span> {1} geliştirici(ler) içerir. Şimdi veya daha sonra ek geliştiriciler ekleyebilirsiniz.",
"StartupTemplates_Page_Title": "Başlangıç Şablonları",
"StartupTemplates_Page_Description": "ABP Commercial, her düzeyde karmaşıklığa sahip çözümler oluşturmanıza olanak tanır. Önceden oluşturulmuş iki ana başlangıç çözümü sunar. Gereksinimlerinize yakın olanı seçebilir ve bunun üzerine kendi özel çözümünüzü oluşturabilirsiniz.",
"MicroserviceStartupSolutionForDotnet": ".NET için Mikro Hizmet Başlatma Çözümü",
"MonolithSolutionForDotnet": ".NET için Monolith (modüler) Çözüm",
"TrainingDetailsHeaderInfo_TrainingHour": "{0} saat(ler)",
"Trainings_Content": "Eğitim İçeriği",
"Trial_Page_StartYourFreeTrial": "<span class=\"gradient-commercial\">Ücretsiz Denemenizi</span> Başlatın",
"TrialLicenseFeatures": "Tüm ABP ticari özelliklerinden yararlanabileceksiniz",
"TrialPeriodDays": "{0} günlük Takım Lisansınız olacak",
"TrialForumSupportIncident": "{0} forum destek olayınız olacak",
"Contact_Page_Title": "ABP Geliştirme Ekibi ile İletişime Geçin",
"Contact_Page_Description": "Herhangi bir yardıma ihtiyacınız olursa veya düşüncelerinizi ve görüşlerinizi paylaşırsanız ABP Geliştirme ekibi ile iletişime geçin! ABP Destek Ekibi yardıma hazır.",
"Demo_Page_Title": "Demo Oluştur",
"Demo_Page_Description": "ABP Ticari başlangıç şablonu kullanılarak oluşturulan örnek bir uygulamayı görmek için ücretsiz bir demo oluşturun. Ortak uygulama gereksinimleri için kendinizi tekrar etmeyin.",
"Discounted_Page_Title": "İndirimli fiyatlandırma",
"Discounted_Page_Description": "İşletmenizin bugün ihtiyaç duyduğu özellikleri ve işlevselliği seçin. Bir ABP Ticari lisansı satın alın ve sınırsız proje oluşturun",
"Faq_Page_Title": "Sıkça Sorulan Sorular (SSS)",
"Faq_Page_Description": "Herhangi bir sorunuz var mı? Sıkça sorulan soruları arayın veya iletişim formunu kullanarak bize bir soru sorun.",
"Faq_Page_SwiftCode": "SWIFT Kodu",
"Faq_Page_BankName": "Banka Adı",
"Faq_Page_AccountName": "Hesap Adı",
"Faq_Page_AccountNumber": "Hesap Numarası",
"Faq_Page_Currency": "Para Birimi",
"Faq_Page_VatNumber": "Vergi Numarası",
"Faq_Page_OtherCurrenciesInfo": "Diğer para birimleri için <a href='{0}'>tüm hesaplar</a> bölümüne bakınız",
"ModuleDetail_Page_Title": "Modül Detayı - {0}",
"ProjectCreatedSuccess_Page_Title": "Projeniz oluşturuldu",
"ProjectCreatedSuccess_Page_Description": "ABP projeniz başarıyla oluşturuldu!",
"Suite_Page_Title": "ABP Suite - CRUD Sayfaları Oluşturun",
"Suite_Page_Description": "ABP Commercial, geliştirici verimliliğini artırmak için hızlı uygulama geliştirme araçları sağlar. ABP Suite, CRUD sayfalarını kolayca oluşturmanızı sağlar.",
"Themes_Page_Title": "Modern ve İşlevsel Kullanıcı Arayüzü Temaları",
"Themes_Page_Description": "ABP Commercial birden fazla profesyonel, modern kullanıcı arayüzü teması sunar. Kullanıcı arayüzünün neye benzediğini hızlıca görmek için ücretsiz bir demo oluşturun.",
"Tools_Page_Title": "Hızlı Uygulama Geliştirme Araçları",
"Tools_Page_Description": "ABP Commercial, geliştirici verimliliğini artırmak için hızlı uygulama geliştirme araçları sağlar. ABP Suite, CRUD sayfalarını kolayca oluşturmanızı sağlar.",
"DeveloperPrice": "Geliştirici Fiyatı",
"AdditionalDeveloperPaymentInfoSection_AdditionalDevelopers": "{0} <small>geliştiriciler</small>",
"LicenseRemainingDays": "<span> {0} </span> gün boyunca",
"ExtendPaymentInfoSection_Description": "Lisansınızı uzatarak/yenileyerek <a href=\"{0}\" target=\"_blank\">premium destek</a> almaya devam edeceksiniz. You will also be able to get major or minor updates for modules and themes. You will be able to continue creating new projects. Ve gelişiminizi hızlandıran <a href=\"{1}\" target=\"_blank\">ABP Suite</a>'i kullanmaya devam edebileceksiniz.",
"LicenseRenewalPrice": "Lisans yenileme fiyatı",
"LicensePrice": "Lisans fiyatı",
"TrialLicensePaymentInfoSection_Description": "<strong>Lisans satın alma:</strong> Bir lisans satın alarak <a href=\"{0}\" target=\"_blank\" rel=\"noopener\">premium destek</a> almaya devam edeceksiniz. Ayrıca modüller ve temalar için büyük veya küçük güncellemeler alabileceksiniz. Yeni projeler oluşturmaya devam edebileceksiniz. Ve gelişiminizi hızlandıran <a href=\"{1}\" target=\"_blank\" rel=\"noopener\">ABP Suite</a>'i kullanmaya devam edebileceksiniz. Lisans türleri arasındaki farkları kontrol etmek için <a href=\"{2}\" target=\"_blank\" rel=\"noopener\">lisans karşılaştırma tablosu</a>na bakın.",
"SelectTargetLicense": "Hedef Lisansı Seçin",
"UpgradePaymentInfoSection_ExtendMyLicenseForOneYear": "Evet, lisansımın geçerlilik süresini 1 yıl uzatın.",
"UpgradePaymentInfoSection_WantToExtendLicense": "Lisansınızı {0} yıl daha uzatmak istiyor musunuz?",
"UpgradePaymentInfoSection_UpgradingWillNotExtendLicense": "Yükseltme işlemi lisansınızın son kullanma tarihini uzatmayacaktır!",
"UpgradePaymentInfoSection_LicenseUpgradeDescription": "Lisansınızı yükselterek, ek avantajlar elde etmenizi sağlayacak daha yüksek bir lisans türüne terfi edeceksiniz. Lisans türleri arasındaki farkları kontrol etmek için <a href=\"/Pricing\" target=\"_blank\">lisans karşılaştırma tablosuna</a> bakın.",
"Landing_Page_CustomerStories": "Müşteri Hikayeleri",
"Landing_Page_OurGreatCustomers": "Büyük Müşterilerimiz",
"Landing_Page_WebApplicationFramework": "Web Uygulama Çerçevesi",
"Landing_Page_WebDevelopmentPlatform": "Web Geliştirme Platformu",
"Landing_Page_CompleteWebDevelopmentPlatform": "Tam Web Geliştirme Platformu",
"Landing_Page_TryFreeDemo": "Ücretsiz Demo Dene",
"Landing_Page_StartingPointForWebApplications": "ASP.NET Core tabanlı web uygulamaları için başlangıç noktası! En iyi web geliştirme için ABP Framework'ü temel alır.",
"Landing_Page_AbpProvidesSoftwareInfrastructure": "ABP Framework, en iyi uygulamalarla mükemmel web uygulamaları geliştirmek için bir yazılım altyapısı sağlar.",
"Landing_Page_MicroserviceCompatibleArchitecture": "Mikroservis Uyumlu Mimari",
"Landing_Page_PreBuiltApplicationModulesAndThemes": "Önceden Oluşturulmuş Uygulama Modülleri ve Temaları",
"Landing_Page_MultiTenantArchitecture": "Çoklu Kiracı Mimari",
"Landing_Page_MultiTenancyDescription": "SaaS uygulamaları artık çok kolay! Veritabanından kullanıcı arayüzüne kadar entegre çoklu kiracılık.",
"Landing_Page_DDDIntroduction": "DDD kalıpları ve ilkeleri temel alınarak tasarlanmış ve geliştirilmiştir. Uygulamanız için katmanlı bir model sağlar.",
"Landing_Page_CrossCuttingConcernsInfo": "Yetkilendirme, doğrulama, istisna işleme, önbelleğe alma, denetim kaydı, işlem yönetimi ve daha fazlası için eksiksiz altyapı.",
"Landing_Page_PreBuiltApplicationModules": "En yaygın web uygulaması gereksinimlerini içeren Önceden Oluşturulmuş Uygulama Modülleri.",
"Landing_Page_ChatModule": "Sohbet",
"Landing_Page_DocsModule": "Belgeler",
"Landing_Page_FileManagementModule": "Dosya Yönetimi",
"Landing_Page_CustomerStory_1": "ABP Commercial, SC Ventures'ın 9 ay içinde banka sınıfı çok kiracılı bir silo-veritabanı SaaS platformu sunmasını ve birden fazla entegre çapadan gelen önemli değerdeki faturaların alacak / borç hesapları tedarik zinciri finansmanını desteklemesini sağladı. ABP'nin modülerliği, ekibin rekor sürede teslimat yapmasını, tüm VAPT'leri geçmesini ve konteynerleştirilmiş mikro hizmet yığınını tam CI/CD ve boru hatları aracılığıyla üretime dağıtmasını mümkün kıldı.",
"Landing_Page_CustomerStory_2": "Özel geliştirme projelerinin ek yükünü azaltmak için ABP Commercial kullanmanın değerini görüyoruz. Ekip, farklı proje akışlarında kod modelini birleştirebiliyor. Yeni özellikleri eskisinden daha hızlı oluşturabilmemiz için çerçevede daha fazla potansiyel görüyoruz. ABP Commercial'dan yararlanmanın değerini sürekli olarak göreceğimize inanıyoruz.",
"Landing_Page_CustomerStory_3": "ABP'yi seviyoruz. Her şeyi sıfırdan yazmak zorunda kalmıyoruz. Kullanıma hazır özelliklerden başlıyoruz ve sadece gerçekten yazmamız gerekenlere odaklanıyoruz. Ayrıca, ABP iyi tasarlanmış ve kod daha az hata ile yüksek kalitede. İhtiyacımız olan her şeyi kendi başımıza yazmak zorunda kalsaydık, yıllarımızı harcamak zorunda kalabilirdik. Hoşumuza giden bir diğer şey de yeni sürümün, sorun düzeltmenin ya da iyileştirmenin çok kısa bir süre içinde\nher iki haftada bir çıkması. Çok uzun süre beklemiyoruz.",
"Landing_Page_CustomerStory_4": "ABP Commercial harika bir ürün, tavsiye ederim. Müşterilerimiz için ticari ürünleri tek bir yapılandırılabilir platformda pazara sunuyor. Çerçeve ve araçların herhangi bir ekibe sağladığı hızlı başlangıç her kuruşa değer. ABP Commercial ihtiyaçlarımız için en uygun üründü.",
"Landing_Page_AdditionalServices": "Özel veya toplu lisans, işe alım, canlı eğitim ve destek, özel proje geliştirme, mevcut projeleri taşıma ve daha fazlası...",
"Landing_Page_IncludedDeveloperLicenses": "<strong>{0}</strong> geliştirici lisansı dahil",
"Landing_Page_SeeOnDemo": "Demo'da göster",
"Landing_Page_LeptonThemes": "Lepton Temaları",
"Landing_Page_AccountModuleDescription_1": "Bu modül bir uygulama için kimlik doğrulama sistemini uygular;",
"Landing_Page_AccountModuleDescription_2": "Kullanıcı adı ve şifre ile bir <strong>giriş</strong> sayfası sağlar",
"Landing_Page_AccountModuleDescription_3": "Yeni bir hesap oluşturmak için bir <strong>kayıt</strong> sayfası sağlar.",
"Landing_Page_AccountModuleDescription_4": "Bir <strong>şifre sıfırlama</strong> bağlantısını e-posta olarak göndermek için bir <strong>şifremi unuttum</strong> sayfası sağlar.",
"Landing_Page_AccountModuleDescription_5": "UI ile <strong>e-posta onayı</strong> işlevselliği sağlar.",
"Landing_Page_AccountModuleDescription_6": "<strong>İki faktörlü</strong> kimlik doğrulama uygular (SMS ve e-posta).",
"Landing_Page_AccountModuleDescription_7": "<strong>Kullanıcı kilitleme</strong> uygular (belirli bir zaman aralığında geçersiz kimlik bilgileri nedeniyle belirli sayıda başarısız oturum açıldığında hesabı belirlenen süre boyunca kilitler).",
"Landing_Page_AccountModuleDescription_8": "<strong>Identity Server</strong> kimlik doğrulama sunucusu kullanıcı arayüzünü ve işlevselliğini uygular.",
"Landing_Page_AccountModuleDescription_9": "Allows to <strong>switch between tenants</strong> in a multi-tenant environment.",
"Landing_Page_AccountModuleDescription_10": "Uygulamanın <strong>UI dilini</strong> değiştirmeye izin verir.",
"Landing_Page_AuditLoggingModuleDescription_1": "Bu modül, denetim altyapısı için denetim günlüğü raporlama kullanıcı arayüzü sağlar. Denetim günlüğü girdilerini ve varlık değişikliği günlüklerini aramaya, filtrelemeye ve göstermeye izin verir.",
"Landing_Page_AuditLoggingModuleDescription_2": "Bir denetim günlüğü girdisi, her bir müşteri talebi hakkında kritik verilerden oluşur:",
"Landing_Page_AuditLoggingModuleDescription_3": "URL, Tarayıcı, IP adresi, istemci adı",
"Landing_Page_AuditLoggingModuleDescription_4": "Kullanıcı",
"Landing_Page_AuditLoggingModuleDescription_5": "HTTP yöntemi, HTTP dönüş durum kodu",
"Landing_Page_AuditLoggingModuleDescription_6": "Başarı/başarısızlık, varsa istisna ayrıntıları",
"Landing_Page_AuditLoggingModuleDescription_7": "İstek yürütme süresi",
"Landing_Page_AuditLoggingModuleDescription_8": "Bu talepte varlıklar oluşturuldu, silindi veya güncellendi (değişen özelliklerle).",
"Landing_Page_BloggingModuleDescription_1": "Bu modül ABP uygulamanıza basit bir blog ekler;",
"Landing_Page_BloggingModuleDescription_2": "Tek bir uygulamada birden çok blog oluşturmaya izin verir.",
"Landing_Page_BloggingModuleDescription_3": "Markdown formatını destekler.",
"Landing_Page_BloggingModuleDescription_4": "Bir gönderi için yorum yazmaya izin verir.",
"Landing_Page_BloggingModuleDescription_5": "Blog yazılarına etiket atamaya izin verir.",
"Landing_Page_BloggingModuleDescription_6": "Blog modülünün canlı bir örneği olarak <a href=\"blog.abp.io\">blog.abp.io</a> web sitesine bakın.",
"Landing_Page_ChatModuleDescription_1": "Bu modül, uygulamadaki kullanıcılar arasında gerçek zamanlı mesajlaşma için kullanılır.",
"Landing_Page_ChatModuleDescription_2": "Sohbet sayfasında gerçek zamanlı mesajlaşma.",
"Landing_Page_ChatModuleDescription_3": "Yeni konuşmalar için uygulamadaki kullanıcıları arayın.",
"Landing_Page_ChatModuleDescription_4": "Son konuşmalar için kişi listesi.",
"Landing_Page_ChatModuleDescription_5": "Kullanıcı başka bir sayfaya bakarken yeni mesaj bildirimleri.",
"Landing_Page_ChatModuleDescription_6": "Menü simgesindeki toplam okunmamış mesaj sayısı rozeti.",
"Landing_Page_ChatModuleDescription_7": "Her konuşma için okunmamış mesaj sayısı.",
"Landing_Page_ChatModuleDescription_8": "Tembel yüklü konuşmalar.",
"Landing_Page_DocsModuleDescription_1": "Bu modül teknik dokümantasyon web siteleri oluşturmak için kullanılır;",
"Landing_Page_DocsModuleDescription_2": "Yerleşik <strong>GitHub entegrasyonu</strong>: GitHub'da doğrudan belge yazın ve yönetin.",
"Landing_Page_DocsModuleDescription_3": "<strong>Sürüm oluşturma</strong> desteği, GitHub sürümlerine doğrudan entegre edilmiştir.",
"Landing_Page_DocsModuleDescription_4": "<strong>Çoklu dili</strong> destekler (varsayılan dile geri dönüş desteği ile).",
"Landing_Page_DocsModuleDescription_5": "<strong>Markdown</strong> ve HTML formatlarını destekler.",
"Landing_Page_DocsModuleDescription_6": "Bir <strong>navigasyon</strong> ve bir <strong>ana hat</strong> bölümü sağlar.",
"Landing_Page_DocsModuleDescription_7": "Tek bir uygulamada <strong>birden çok proje</strong> belgesinin barındırılmasına izin verir.",
"Landing_Page_DocsModuleDescription_8": "GitHub'daki dosyaya bağlantı verir, böylece herkes <strong>Düzenle</strong> bağlantısına tıklayarak kolayca katkıda bulunabilir.",
"Landing_Page_DocsModuleDescription_9": "GitHub kaynağına ek olarak, dokümantasyon kaynağı olarak bir klasörün kullanılmasına izin verir.",
"Landing_Page_FileManagementModuleDescription_1": "Dosyaları hiyerarşik bir klasör yapısı içinde yükleyin, indirin ve düzenleyin.",
"Landing_Page_FileManagementModuleDescription_2": "Bu modül, dosyaları hiyerarşik bir klasör yapısında yüklemek, indirmek ve düzenlemek için kullanılır. Ayrıca çoklu kiracılığa uyumludur ve kiracılarınız için toplam boyut sınırını belirleyebilirsiniz.",
"Landing_Page_FileManagementModuleDescription_3": "Bu modül <a href=\"https://docs.abp.io/en/abp/latest/Blob-Storing\">BLOB Depolama</a> sistemine dayanmaktadır, bu nedenle dosya içeriklerini depolamak için farklı depolama sağlayıcıları kullanabilir.",
"Landing_Page_IdentityModuleDescription_1": "Bu modül bir uygulamanın Kullanıcı ve Rol sistemini uygular;",
"Landing_Page_IdentityModuleDescription_2": "<a href=\"https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity\">Microsoft'un ASP.NET Core Identity</a> kütüphanesi üzerine inşa edilmiştir.",
"Landing_Page_IdentityModuleDescription_3": "Sistemdeki <strong>rolleri</strong> ve <strong>kullanıcıları</strong> yönetin. Bir kullanıcının <strong>birden çok role</strong> sahip olmasına izin verilir.",
"Landing_Page_IdentityModuleDescription_4": "Rol ve kullanıcı düzeylerinde <strong>izinleri</strong> ayarlayın.",
"Landing_Page_IdentityModuleDescription_5": "Kullanıcı başına <strong>iki faktörlü kimlik doğrulamayı</strong> ve kullanıcı <strong>kilitlemeyi</strong> etkinleştirin/devre dışı bırakın.",
"Landing_Page_IdentityModuleDescription_6": "Temel <strong>kullanıcı profili</strong>ni ve <strong>parolayı</strong> yönetin.",
"Landing_Page_IdentityModuleDescription_7": "Sistemdeki <strong>talep türlerini</strong> yönetin, rollere ve kullanıcılara talepler ayarlayın.",
"Landing_Page_IdentityModuleDescription_8": "<strong>Parola karmaşıklığı</strong>, kullanıcı oturum açma, hesap ve kilitlemeyi yönetmek için ayar sayfası.",
"Landing_Page_IdentityModuleDescription_9": "<strong>LDAP</strong> kimlik doğrulamasını destekler.",
"Landing_Page_IdentityModuleDescription_10": "<strong>E-posta &amp; telefon numarası</strong> doğrulaması sağlar.",
"Landing_Page_IdentityModuleDescription_11": "Kullanıcılar için <strong>parola sıfırlama</strong> desteği.",
"Landing_Page_IdentityModuleDescription_12": "Sistemdeki <strong>organizasyon birimlerini</strong> yönetin.",
"Landing_Page_PaymentModuleDescription_1": "Farklı ödeme ağ geçitleri için entegrasyon sağlar.",
"Landing_Page_PaymentModuleDescription_2": "Bu modül ödeme ağ geçitleri için entegrasyon sağlar, böylece müşterilerinizden kolayca ödeme alabilirsiniz.",
"Landing_Page_PaymentModuleDescription_3": "Bu modül aşağıdaki ödeme ağ geçitlerini destekler",
"Welcome_Page_UseSameCredentialForCommercialWebsites": "Hem <a href=\"https://commercial.abp.io\" class=\"text-primary\">commercial.abp.io</a> hem de <a href=\"https://support.abp.io\" class=\"text-primary\">support.abp.io</a> için aynı kimlik bilgilerini kullanın.",
"WatchCrudPagesVideo": "\"ABP Suite ile CRUD Sayfaları Oluşturma\" Videosunu İzleyin!",
"WatchGeneratingFromDatabaseVideo": "\"ABP Suite: Mevcut Veritabanı Tablolarından CRUD Sayfaları Oluşturma\" Videosunu izleyin!",
"WatchTakeCloserLookVideo": "\"Kod üretimine daha yakından bakın: ABP Suite\" videosunu izleyin!",
"ConfirmedEmailAddressRequiredToStartTrial": "Deneme lisansı başlatmak için onaylanmış bir e -posta adresiniz olmalı.",
"EmailVerificationMailNotSent": "E-posta doğrulama postası gönderilemedi.",
"GetConfirmationEmail": "Daha önce bir onay e-postası almadıysanız <a href=\"javascript:void(0);\" id=\"{0}\"> almak için buraya tıklayın.</a>",
"WhichLicenseTypeYouAreInterestedIn": "Hangi lisans türüyle ilgileniyorsunuz?"
}
}

2
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json

@ -660,7 +660,7 @@
"Landing_Page_PreBuiltApplicationModules": "预建应用程序模块,其中包括最常见的 Web 应用程序要求。",
"Landing_Page_ChatModule": "聊天",
"Landing_Page_DocsModule": "文档",
"Landing_Page_FileManagementModule": "文",
"Landing_Page_FileManagementModule": "文件管理",
"Landing_Page_CustomerStory_1": "ABP 商业版 允许 SC Ventures 在 9 个月内交付银行级多租户silo数据库 SaaS 平台,以支持来自多个集成锚点的大额发票的应收账款/应付账款供应链融资。 ABP 的模块化使团队能够在创纪录的时间内交付,通过所有 VAPT,并通过完整的 CI/CD 和管道将容器化的微服务码部署到生产中。",
"Landing_Page_CustomerStory_2": "我们看到了使用 ABP 商业版 来减少定制开发项目开销的价值。 并且团队能够在不同的项目流中统一代码模式。 我们在框架中看到了比以前更快地构建新功能的更多潜力。 我们相信我们将不断看到使用 ABP 商业版 的价值。",
"Landing_Page_CustomerStory_3": "我们很爱 ABP。 我们不必从头开始编写所有内容。 我们从\"开箱即用\"的功能开始,只关注我们真正需要编写的内容。 此外,ABP 架构良好,代码质量高,错误少。 如果我们必须自己编写所需的一切,我们可能需要花费数年时间。 另一件事是我们喜欢的是新版本、问题修复或改进每隔一周就很快会出现\n。 我们不会等太久。",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json

@ -43,7 +43,7 @@
"Done": "Done",
"Open": "Open",
"Closed": "Closed",
"RecentQuestionFrom": "Recent question from ",
"RecentQuestionFrom": "Recent question from {0}",
"Stackoverflow": "Stackoverflow",
"Votes": "votes",
"Answer": "Answer",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hu.json

@ -43,7 +43,7 @@
"Done": "Kész",
"Open": "Nyisd ki",
"Closed": "Zárva",
"RecentQuestionFrom": "Friss kérdés tőle",
"RecentQuestionFrom": "Friss kérdés tőle {0}",
"Stackoverflow": "Stackoverflow",
"Votes": "szavazatokat",
"Answer": "Válasz",

52
abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/tr.json

@ -36,7 +36,6 @@
"FeatureRequest": "Özellik isteği",
"CreatePostTitleInfo": "Gönderi listesinde gösterilecek gönderinin başlığı.",
"CreatePostSummaryInfo": "Gönderi listesinde gösterilecek gönderinin kısa bir özeti.",
"CreatePostCoverInfo": "Etkili bir makale oluşturmak için bir kapak fotoğrafı ekleyin. En iyi görünüm için 16:9 en boy oranlı resimler yükleyin. Maksimum dosya boyutu: 1MB.",
"ThisExtensionIsNotAllowed": "Bu uzantıya izin verilmiyor.",
"TheFileIsTooLarge": "Dosya çok büyük.",
"GoToThePost": "Makaleye git",
@ -46,7 +45,7 @@
"Open": "Açık",
"Closed": "Kapalı",
"LatestQuestionOnThe": "Son Soru",
"Stackoverflow": "yığın akışı",
"Stackoverflow": "Stackoverflow",
"Votes": "oy",
"Answer": "Cevap",
"Views": "Görüntüleme",
@ -143,6 +142,53 @@
"Volo.AbpIo.Domain:060001": "Kaynak URL (\"{PostUrl}\") Github URL'si değil",
"Volo.AbpIo.Domain:060002": "Makale İçeriği Github(\"{PostUrl}\") kaynağında mevcut değil.",
"Volo.AbpIo.Domain:060003": "Makale içeriği bulunamadı!",
"MemberNotPublishedPostYet": "Bu üye henüz bir gönderi yayınlamadı."
"MemberNotPublishedPostYet": "Bu üye henüz bir gönderi yayınlamadı.",
"WelcomeToABP": "ABP'ye Hoşgeldiniz",
"Browse": "Göz at",
"ArticleRequestsDescription": "Burada belirli bir içerik mi görmek istiyorsunuz? Topluluktan bunu oluşturmasını isteyebilirsiniz!",
"LatestContentRequests": "Son İçerik Talepleri",
"SeeMore": "Daha fazla göster",
"JoinTheABPCommunity": "ABP Topluluğuna Katılın",
"ABPCommunityTalks": "ABP Topluluk Konuşmaları",
"LiveDemo": "Canlı Demo",
"GetLicense": "Lisans Al",
"GetStarted": "Başlayın",
"SourceCode": "Kaynak Kodu",
"LeaveComment": "Yorum bırak",
"RecentQuestionFrom": "{0}' dan son soru",
"ReadMore": "Daha fazla oku",
"ShowMore": "Daha fazla göster",
"NoPublishedPostsYet": "Henüz yayınlanmış bir gönderi yok.",
"Name": "İsim",
"Surname": "Soyisim",
"WebSite": "Web Sitesi",
"FullURL": "Tam URL",
"JobTitle": "Meslek İsmi",
"Prev": "Önceki",
"Previous": "Önceki",
"Next": "Sonraki",
"Share": "Paylaş",
"SortBy": "Sırala",
"NoPublishedEventsYet": "Henüz yayınlanmış bir etkinlik yok.",
"SubscribeYoutubeChannel": "Youtube Kanalına Abone Ol",
"Enum:EventType:0": "Konuşma",
"TimeAgo": "{0} önce",
"Discord_Page_JoinCommunityMessage": "ABP Discord Topluluğuna Katılın",
"Discord_Page_Announce": "ABP Topluluk Discord Sunucusunu duyurmaktan mutluluk duyuyoruz!",
"Discord_Page_Description_1": "ABP Topluluğu ilk günden beri büyüyor. Resmi bir ABP Discord sunucusu oluşturarak bunu bir sonraki adıma taşımak istedik, böylece ABP Topluluğu anlık mesajlaşmanın harikalarını kullanarak birbirleriyle etkileşime geçebilir.",
"Discord_Page_Description_2": "ABP Topluluğu Discord Sunucusu, ABP Framework kullanarak yarattıklarınızı sergileyebileceğiniz, işinize yarayan ipuçlarını paylaşabileceğiniz, ABP Framework ile ilgili en son haberleri ve duyuruları takip edebileceğiniz, fikir alışverişinde bulunmak ve eğlenmek için topluluk üyeleriyle sohbet edebileceğiniz bir yerdir!",
"Discord_Page_Description_3": "Bu ABP Topluluk Discord Sunucusu, ABP Çekirdek Ekibinin sunucuda izlenmesi için mevcut olduğu resmi sunucudur.",
"Discord_Page_JoinToServer": "ABP Discord Sunucusuna Katılın",
"Events_Page_MetaTitle": "ABP Topluluk Etkinlikleri",
"Events_Page_MetaDescription": "ABP Ekibi tarafından düzenlenen canlı programlar, topluluk içeriği, demolar, Soru-Cevap ve ABP'de neler olup bittiğine dair tartışmalarla dolu rahat oturumlardır.",
"Events_Page_Title": "ABP<span class=\"gradient-community\"> Topluluk</span> Konuşmaları",
"Events_Page_WritingFromUser": "ABP Topluluğunda {0} adlı kişiden gelen yazıları okuyun.",
"Post_Create_Page_MetaTitle": "Yeni Gönderi",
"Post_Create_Page_MetaDescription": "ABP çerçevesi hakkındaki deneyimlerinizi paylaşmak ve ABP Topluluğuna katkıda bulunmak için gönderinizi oluşturun.",
"Post_Create_Page_CreateNewPost": "Yeni Gönderi Oluştur",
"Post_Index_Page_MetaDescription": "ABP Topluluğu'nun amacı, ABP çerçevesini kullanan geliştiriciler için bir katkı ortamı yaratmaktır.",
"Layout_Title": "{0} | ABP Topluluğu",
"Layout_MetaDescription": "ABP Topluluğu, insanların ABP çerçevesi hakkında paylaşımlarda bulunabileceği ve projeleri takip edebileceği bir ortamdır.",
"Index_Page_CommunityIntroduction": "Burası ABP Çerçevesi, .NET ve yazılım geliştirme için bir merkezdir. Makaleleri okuyabilir, eğitim videolarını izleyebilir, ABP'nin gelişim süreci ve ABP ile ilgili etkinlikler hakkında bilgi alabilir, diğer geliştiricilere yardımcı olabilir ve uzmanlığınızı ABP topluluğu ile paylaşabilirsiniz."
}
}

2
abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json

@ -43,7 +43,7 @@
"Done": "完成",
"Open": "打开",
"Closed": "关闭",
"RecentQuestionFrom": "最近的问题来自",
"RecentQuestionFrom": "最近的问题来自 {0}",
"Stackoverflow": "Stackoverflow",
"Votes": "票数",
"Answer": "回答",

5
abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/AbpIoDocsResource.cs

@ -1,5 +1,8 @@
namespace AbpIoLocalization.Docs.Localization
using Volo.Abp.Localization;
namespace AbpIoLocalization.Docs.Localization
{
[LocalizationResourceName("AbpIoDocs")]
public class AbpIoDocsResource
{

1
abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/en.json

@ -1,5 +1,6 @@
{
"culture": "en",
"texts": {
"Buy": "Buy"
}
}

93
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json

@ -280,6 +280,99 @@
"FirstEdition": "İlk Baskı",
"ThankYou": "Teşekkürler!",
"CheckboxMandatory": "Devam etmek için bunu kontrol etmeniz gerekiyor!",
"UserInterface": "Kullanıcı Arayüzü",
"APIGateway": "API Ağ Geçidi",
"Database": "Veritabanı",
"Saas": "Saas",
"OpenSourceWebApp": " Açık <span class=\"forever\">kaynak </span> <br/> web uygulaması",
"Framework": "Çerçeve",
"AuditLoggingExplanation": "Sisteminizdeki tüm işlemleri ve veri değişikliklerini otomatik olarak izleyin.",
"AbpNewCommandExplanation": "ABP başlangıç şablonlarını kullanarak yeni çözümler oluşturur.",
"AbpAddModuleCommandExplanation": "Çözümünüze önceden oluşturulmuş uygulama modülleri yükler",
"ExploreAllCLICommands": "Tüm CLI komutlarını keşfedin",
"ExploreDocumentationAndGuides": "Kapsamlı belge ve kılavuzları keşfedin.",
"Documentations": "Belgeler",
"Views": "Görünümler",
"ReadMore": "Daha fazla oku",
"EnterYouEmailToGetNews": "ABP Çerçevesi hakkında en son haberleri almak için e-postanızı girin",
"Tiered": "Katmanlı",
"SeparateIdentityServer": "Ayrı Kimlik Sunucusu",
"Preview": "Önizleme",
"CreateANewSolution": "Yeni bir çözüm oluşturun",
"ABPFrameworkFeatures": "ABP Çerçevesi <span class=\"gradient-framework\">Özellikleri</span>",
"Commercial": "Ticari",
"ThirdPartyTools": "Üçüncü taraf araçlar",
"Back": "Geri",
"Community": "Topluluk",
"SeeMore": "Daha fazla göster",
"DetailsOfTheEBook": "E-kitap detayları",
"JoinOurMarketingNewsletter": "Pazarlama bültenimize katılın",
"FrameworkNewsletterConfirmationMessage": "<a class=\"text-white fw-6 text-decoration-underline opacity-50\" href=\"https://commercial.abp.io/TermsConditions\">Şartlar ve Koşulları</a> ve <a class=\"text-white fw-6 text-decoration-underline opacity-50\" href=\"https://commercial.abp.io/Privacy\">Gizlilik Politikasını</a> kabul ediyorum.",
"GetYourFreeEBook": "<span class=\"gradient-framework d-block\">Ücretsiz DDD E-kitabınızı</span> Alın ",
"EverythingYouNeedToKnow": "Bilmeniz gereken her şey",
"PreOrderNow": "Şimdi Ön sipariş verin",
"UITheming": "Arayüz Teması",
"UIThemingExplanation": "Yeniden kullanılabilir UI temaları ve düzenleri oluşturun veya önceden oluşturulmuş UI temalarından birini kullanın.",
"DataFilteringExplanation2": "Soft-delete ve çoklu kiracılık gibi modelleri kolayca uygulamak için veritabanından sorgulama yaparken otomatik olarak filtreleme yapın.",
"AbpUpdateCommandExplanation": "Çözümünüzdeki ABP ile ilgili tüm NuGet ve NPM paketlerini otomatik olarak günceller.",
"NeedHelp": "Yardıma ihtiyacınız var mı?",
"GiveYourProjectAName": "Projenize bir isim verin",
"SelectProjectType": "Proje türünü seçin",
"SelectUIFramework": "Arayüz çerçevesini seçin",
"SelectDatabaseProvider": "Veritabanı sağlayıcısını seçin",
"SelectDatabaseManagementSystem": "Veritabanı yönetim sisteminizi seçin",
"InstallingTheABPCLI": "ABP CLI yükleniyor",
"CreateYourProjectNow": "Projenizi şimdi oluşturun",
"OrderOn": "{0} numaralı sipariş",
"DownloadFreeDDDBook": "DDD E-kitabını Ücretsiz İndirin",
"WhatIsABPFramework": "ABP Çerçevesi nedir?",
"TenantDatabase": "Kiracı {0} Veritabanı",
"SharedDatabase": "Paylaşımlı Veritabanı",
"ConnectionResolver": "Bağlantı Çözücü",
"TenantBasedDataFilter": "Kiracı Tabanlı Veri Filtresi",
"ApplicationCode": "Uygulama Kodu",
"TenantResolution": "Kiracı Çözümü",
"TenantUser": "Kiracı {0} Kullanıcı",
"CardTitle": "Kart Başlığı",
"View": "Görünüm",
"Model": "Model",
"Email": "E-posta",
"Password": "Şifre",
"Address": "Adres",
"Gender": "Cinsiyet",
"Male": "Erkek",
"Female": "Kadın",
"Submit": "Gönder",
"Unspecified": "Belirtilmemiş",
"StaticFileMiddleware": "Statik Dosya Ara Yazılımı",
"RazorViewEngine": "Razor Görünüm Motoru",
"PhysicalFiles": "Fiziksel Dosyalar (wwwroot)",
"EmbeddedFiles": "Gömülü Dosyalar (DLL)",
"DynamicFiles": "Dinamik Dosyalar (Bellek)",
"BuildSolutionsWithAbp": "ABP kullanarak en iyi yazılım geliştirme uygulamalarını takip ederek sürdürülebilir .NET çözümleri oluşturun.",
"BuyOnAmazon": "Amazon'dan satın alın",
"BuyOnPackt": "Packt'ten satın alın",
"Discounted": "İndirimli",
"MasteringAbpFramework_Book_KeyFeatures": "Anahtar Özellikler",
"MasteringAbpFramework_Book_Key_Features_Description_1": "ABP Çerçevesini kullanarak sağlam, sürdürülebilir, modüler ve ölçeklenebilir yazılım çözümleri oluşturun.",
"MasteringAbpFramework_Book_Key_Features_Description_2": "Web uygulamalarınızda SOLID ilkelerini ve etki alanı odaklı tasarımı nasıl uygulayacağınızı öğrenin.",
"MasteringAbpFramework_Book_Key_Features_Description_3": "ABP Çerçevesinin tekrar eden görevleri otomatikleştirerek geliştirme döngünüzü nasıl hızlandırdığını keşfedin.",
"MasteringAbpFramework_Book_Description": "Kitap Açıklaması",
"MasteringAbpFramework_Book_Description_Details_1": "ABP Çerçevesi, yazılım geliştirme en iyi uygulamalarını ve kurallarını izleyerek modern web uygulamaları oluşturmak \n için eksiksiz bir altyapıdır. ABP'nin üst düzey çerçevesi ve ekosistemi ile Kendinizi Tekrar Etmeyin (DRY) ilkesini uygulayabilir ve iş kodunuza odaklanabilirsiniz.",
"MasteringAbpFramework_Book_Description_Details_2": "ABP Çerçevesinin yaratıcısı tarafından yazılan bu kitap,çerçevesini ve modern web uygulaması geliştirme\n tekniklerini tam olarak anlamanıza yardımcı olacaktır. Temel kavramların adım adım açıklamaları ve\n pratik örneklerle, modern bir web çözümünün gereksinimlerini ve ABP Çerçevesinin kendi çözümlerinizi\n geliştirmeyi nasıl keyifli hale getirdiğini anlayacaksınız. Kurumsal web uygulaması geliştirmenin ortak gereksinimlerini\n keşfedecek ve ABP tarafından sağlanan altyapıyı keşfedeceksiniz. Kitap boyunca, sürdürülebilir ve\n modüler web çözümleri oluşturmak için en iyi yazılım geliştirme uygulamalarını öğreneceksiniz.",
"MasteringAbpFramework_Book_Description_Details_3": "Bu kitabın sonunda, geliştirilmesi, bakımı ve test edilmesi kolay eksiksiz bir web çözümü\n oluşturabileceksiniz.",
"MasteringAbpFramework_Book_WhatYouWillLearn": "Ne Öğreneceksiniz",
"MasteringAbpFramework_Book_What_You_Will_Learn_1": "Geliştirme ortamını kurun ve ABP Çerçevesi ile çalışmaya başlayın.",
"MasteringAbpFramework_Book_What_You_Will_Learn_2": "Veri erişim katmanınızı geliştirmek için Entity Framework Core ve MongoDB ile çalışın.",
"MasteringAbpFramework_Book_What_You_Will_Learn_3": "Birbiriyle kesişen endişeleri ve ABP'nin tekrarlayan görevleri nasıl otomatikleştirdiğini anlayın.",
"MasteringAbpFramework_Book_What_You_Will_Learn_4": "ABP Çerçevesi ile etki alanı odaklı tasarımın uygulanmasını öğrenin.",
"MasteringAbpFramework_Book_What_You_Will_Learn_5": "ASP.NET Core MVC (Razor Pages) ve Blazor ile UI sayfaları ve bileşenleri oluşturun.",
"MasteringAbpFramework_Book_What_You_Will_Learn_6": "Modüler web uygulamaları oluşturmak için çoklu kiracılık ile çalışın.",
"MasteringAbpFramework_Book_What_You_Will_Learn_7": "Modülerliği anlayın ve yeniden kullanılabilir uygulama modülleri oluşturun.",
"MasteringAbpFramework_Book_What_You_Will_Learn_8": "ABP Çerçevesini kullanarak birim, entegrasyon ve UI testleri yazın.",
"MasteringAbpFramework_Book_WhoIsThisBookFor": "Bu kitap kimler için?",
"MasteringAbpFramework_Book_WhoIsThisBookFor_Description": "Bu kitap, Microsoft teknolojilerini ve ABP Çerçevesini kullanarak sürdürülebilir web tabanlı çözümler\n oluşturmak için yazılım mimarilerini ve en iyi uygulamaları öğrenmek isteyen web geliştiricileri içindir.\n Bu kitaba başlamak için temel C# ve ASP.NET Core bilgisi gereklidir.",
"ComputersAndTechnology": "Bilgisayar ve Teknoloji",
"ThisBookIsInDraftStageAndIsNotCompletedYet": "Bu kitap taslak aşamasındadır ve henüz tamamlanmamıştır."
}
}

1
docs/en/Audit-Logging.md

@ -41,6 +41,7 @@ Here, a list of the options you can configure:
* `IsEnabledForAnonymousUsers` (default: `true`): If you want to write audit logs only for the authenticated users, set this to `false`. If you save audit logs for anonymous users, you will see `null` for `UserId` values for these users.
* `AlwaysLogOnException` (default: `true`): If you set to true, it always saves the audit log on an exception/error case without checking other options (except `IsEnabled`, which completely disables the audit logging).
* `IsEnabledForGetRequests` (default: `false`): HTTP GET requests should not make any change in the database normally and audit log system doesn't save audit log objects for GET request. Set this to `true` to enable it also for the GET requests.
* `DisableLogActionInfo` (default: `false`):If you set to true, Will no longer log `AuditLogActionInfo`.
* `ApplicationName`: If multiple applications saving audit logs into a single database, set this property to your application name, so you can distinguish the logs of different applications.
* `IgnoredTypes`: A list of `Type`s to be ignored for audit logging. If this is an entity type, changes for this type of entities will not be saved. This list is also used while serializing the action parameters.
* `EntityHistorySelectors`: A list of selectors those are used to determine if an entity type is selected for saving the entity change. See the section below for details.

8
docs/en/Blog-Posts/2022-07-26 v6_0_Preview/POST.md

@ -10,16 +10,16 @@ Try this version and provide feedback for the stable ABP v6.0! Thank you to all.
Follow the steps below to try version 6.0.0 RC today:
1) **Upgrade** the ABP CLI to version `6.0.0-rc.1` using a command line terminal:
1) **Upgrade** the ABP CLI to version `6.0.0-rc.5` using a command line terminal:
````bash
dotnet tool update Volo.Abp.Cli -g --version 6.0.0-rc.1
dotnet tool update Volo.Abp.Cli -g --version 6.0.0-rc.5
````
**or install** it if you haven't before:
````bash
dotnet tool install Volo.Abp.Cli -g --version 6.0.0-rc.1
dotnet tool install Volo.Abp.Cli -g --version 6.0.0-rc.5
````
2) Create a **new application** with the `--preview` option:
@ -199,7 +199,7 @@ The following improvements have been made on [eShopOnAbp project](https://github
* Performance Improvements have been made in the **Settings Module** and tabs on the *Settings* page are lazy loading now.
* Some improvements have been made in the CMS Kit Module. You can see the improvements from [here](https://github.com/abpframework/abp/issues/11965).
If you want to see more details, you can check [the release on GitHub](https://github.com/abpframework/abp/releases/tag/6.0.0-rc.1), which contains a list of all the issues and pull requests closed in this version.
If you want to see more details, you can check [the release on GitHub](https://github.com/abpframework/abp/releases/tag/6.0.0-rc.5), which contains a list of all the issues and pull requests closed in this version.

76
docs/en/Blog-Posts/2022-09-21 v6_0_Release_Stable/POST.md

@ -0,0 +1,76 @@
# ABP.IO Platform 6.0 Final Has Been Released!
[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 6.0 versions have been released today.
## What's New With 6.0?
Since all the new features are already explained in details with the [6.0 RC Announcement Post](https://blog.abp.io/abp/ABP.IO-Platform-6.0-RC-Has-Been-Published), I will not repeat all the details again. See the [RC Blog Post](https://blog.abp.io/abp/ABP.IO-Platform-6.0-RC-Has-Been-Published) for all the features and enhancements.
## Getting Started with 6.0
### Creating New Solutions
You can create a new solution with the ABP Framework version 6.0 by either using the `abp new` command or using the **direct download** tab on the [get started page](https://abp.io/get-started).
> See the [getting started document](https://docs.abp.io/en/abp/latest/Getting-Started) for more.
### How to Upgrade an Existing Solution
#### Install/Update the ABP CLI
First of all, install the ABP CLI or upgrade to the latest version.
If you haven't installed it yet:
```bash
dotnet tool install -g Volo.Abp.Cli
```
To update an existing installation:
```bash
dotnet tool update -g Volo.Abp.Cli
```
#### Upgrading Existing Solutions with the ABP Update Command
[ABP CLI](https://docs.abp.io/en/abp/latest/CLI) provides a handy command to update all the ABP related NuGet and NPM packages in your solution with a single command:
```bash
abp update
```
Run this command in the root folder of your solution.
## Migration Guides
Check the following migration guides for the applications with version 5.3 that are upgrading to version 6.0.
* [ABP Framework 5.3 to 6.0 Migration Guide](https://docs.abp.io/en/abp/6.0/Migration-Guides/Abp-6_0)
* [ABP Commercial 5.3 to 6.0 Migration Guide](https://docs.abp.io/en/commercial/6.0/migration-guides/v6_0)
## Community News
### New ABP Community Posts
Here are some of the recent posts added to the [ABP Community](https://community.abp.io/):
* [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan) has created two new community articles:
* [Consuming gRPC Services from Blazor WebAssembly Application Using gRPC-Web](https://community.abp.io/posts/consuming-grpc-services-from-blazor-webassembly-application-using-grpcweb-dqjry3rv)
* [Using gRPC with the ABP Framework](https://community.abp.io/posts/using-grpc-with-the-abp-framework-2dgaxzw3)
* [Malik Masis](https://twitter.com/malikmasis) also has created two new community articles:
* [Consuming HTTP APIs from a .NET Client Using ABP's Client Proxy System](https://community.abp.io/posts/consuming-http-apis-from-a-.net-client-using-abps-client-proxy-system-xriqarrm)
* [Using MassTransit via eShopOnAbp](https://community.abp.io/posts/using-masstransit-via-eshoponabp-8amok6h8)
* [Xeevis](https://community.abp.io/members/Xeevis) has created her/his first community article, that shows [Prerendering in Blazor WASM applications](https://community.abp.io/posts/prerendering-blazor-wasm-application-with-abp-6.x-2v8590g3).
* [Don Boutwell](https://community.abp.io/members/dboutwell) has created two new community articles:
* [Logging to Datadog from ABP framework](https://community.abp.io/posts/logging-to-datadog-from-abp-framework-fm4ozds4)
* [Configuring Multiple DbContexts in an ABP Framework Project](https://community.abp.io/posts/configuring-multiple-dbcontexts-in-an-abp-framework-project-uoz5is3o)
* [Kirti Kulkarni](https://twitter.com/kirtimkulkarni) has created a new community article: [Deploying ABP angular application to Azure and App Insights integration](https://community.abp.io/posts/deploying-abp-angular-application-to-azure-and-app-insights-integration-4jrhtp01)
Thanks to the ABP Community for all the contents they have published. You can also [post your ABP related (text or video) contents](https://community.abp.io/articles/submit) to the ABP Community.
## About the Next Version
The next feature version will be 7.0. It is planned to release the 7.0 RC (Release Candidate) on November 15 and the final version on December 13, 2022. You can follow the [release planning here](https://github.com/abpframework/abp/milestones).
Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version.

4
docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/How-To-Add-Custom-Property-To-The-User-Entity.md

@ -1,12 +1,12 @@
# How to Add Custom Properties to the User Entity
> **Note:** If your application is greater than version 4.3.3, please follow [this article](../2022-07-19-How-To-Add-Custom-Property-To-The-User-Entity/How-To-Add-Custom-Property-To-The-User-Entity.md).
> **Note:** If your application is greater than version 4.3.3, please follow [this article](https://community.abp.io/posts/how-to-add-custom-properties-to-the-user-entity-rixchoha).
## Introduction
In this step-by-step article, I will explain how you can customize the user entity class, which is available in every web application you create using the ABP framework, according to your needs. When you read this article, you will learn how to override the services of built-in modules, extend the entities, extend data transfer objects and customize the user interface in the applications you develop using the ABP framework.
> **Note:** This article is not about customizing the `Login` page. If you have such a need, please follow [this article](../2020-05-09-Customize-the-Login-Page-for-MVC-Razor-Page-Applications/POST.md).
> **Note:** This article is not about customizing the `Login` page. If you have such a need, please follow [this article](https://community.abp.io/posts/how-to-customize-the-login-page-for-mvc-razor-page-applications-9a40f3cd).
You can see the screenshots below which we will reach at the end of the article.

4
docs/en/Community-Articles/2022-07-19-How-To-Add-Custom-Property-To-The-User-Entity/How-To-Add-Custom-Property-To-The-User-Entity.md

@ -1,12 +1,12 @@
# How to Add Custom Properties to the User Entity
> **Note:** If your application is less than version 4.4.x, please follow [this article](../2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/How-To-Add-Custom-Property-To-The-User-Entity.md).
> **Note:** If your application is less than version 4.4.x, please follow [this article](https://community.abp.io/posts/how-to-add-custom-property-to-the-user-entity-6ggxiddr).
## Introduction
In this step-by-step article, I will explain how you can customize the user entity class, which is available in every web application you create using the ABP framework, according to your needs. When you read this article, you will learn how to override the services of built-in modules, extend the entities, extend data transfer objects and customize the user interface in the applications you develop using the ABP framework.
> **Note:** This article is not about customizing the `Login` page. If you have such a need, please follow [this article](../2020-05-09-Customize-the-Login-Page-for-MVC-Razor-Page-Applications/POST.md).
> **Note:** This article is not about customizing the `Login` page. If you have such a need, please follow [this article](https://community.abp.io/posts/how-to-customize-the-login-page-for-mvc-razor-page-applications-9a40f3cd).
You can see the screenshots below which we will reach at the end of the article.

26
docs/en/Community-Articles/2022-09-15-Grpc-Demo/POST.md

@ -8,7 +8,7 @@ In this article, I will show you how to create a gRPC service and consume it fro
## Creating the Application
> I will use the ABP version 6.0 for this article. I am using the 6.0.0-rc.4 version since the stable version hasn't been published at the time I am writing this article. If it is released while you're reading this, do not specify the `--version` and `--preview` parameters in the following commands.
> I will use ABP version 6.0 for this article. I am using the 6.0.0-rc.4 version since the stable version hasn't been published at the time I am writing this article. If it is released while you're reading this, do not specify the `--version` and `--preview` parameters in the following commands.
Install the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI) if you haven't installed it yet:
@ -16,7 +16,7 @@ Install the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI) if you haven't inst
dotnet tool install -g Volo.Abp.Cli --version 6.0.0-rc.4
````
or update to the version 6.0.0-rc.4 if you've already installed a previous version:
or update to version 6.0.0-rc.4 if you've already installed a previous version:
````bash
dotnet tool update Volo.Abp.Cli -g --version 6.0.0-rc.4
@ -40,7 +40,7 @@ Run the `ProductManagement.DbMigrator` project (a console application) to create
## Defining the Service Contract
We are starting by defining the service contract and DTO classes those will be shared between the server and the client applications.
We are starting by defining the service contract and DTO classes that will be shared between the server and the client applications.
Create a `Products` folder in the `ProductManagement.Application.Contracts` project and add a new interface named `IProductAppService`:
@ -67,7 +67,7 @@ Your IDE will complain about the `[ServiceContract]` attribute, but it is necess
Or you can use your IDE to find and add that NuGet package, it is up to you.
I've also used `ProductDto` class, but not defined yet. Create a new class in the same folder with the `IProductAppService` file:
I've also used the `ProductDto` class, but haven't defined it yet. Create a new class in the same folder with the `IProductAppService` file:
````csharp
using System;
@ -86,13 +86,13 @@ public class ProductDto
}
````
`[DataContract]` and `[DataMember]` properties are needed for serialization. In gRPC, property serialization orders are important, because property names are not transferred to the target application, to keep the serialized data small.
The `[DataContract]` and `[DataMember]` properties are needed for serialization. In gRPC, property serialization orders are important, because property names are not transferred to the target application, to keep the serialized data small.
After adding these classes, `ProductManagement.Application.Contracts` project should look like in the following figure:
After adding these classes, the `ProductManagement.Application.Contracts` project should look as in the following figure:
![contracts](contracts.png)
Contracts part is over. We actually didn't have any dependency to gRPC at that point. Our service and DTOs are pretty plain classes, except a few standard attributes, which are already defined in the .NET Core framework. Now, we can implement the `IProductAppService`.
The contracts part is over. We actually didn't have any dependency to gRPC at that point. Our service and DTOs are pretty plain classes, except a few standard attributes, which are already defined in the .NET Core framework. Now, we can implement the `IProductAppService`.
## Implementing the Service
@ -118,11 +118,11 @@ public class ProductAppService : ProductManagementAppService, IProductAppService
}
````
This is a pretty standard, plain [application service ](https://docs.abp.io/en/abp/latest/Application-Services)class. All the ABP application service features (validation, audit logging, unit of work, etc.) are available. You can inject [repositories](https://docs.abp.io/en/abp/latest/Repositories) and perform database queries. To keep this article simple, I am returning a hard-coded data from here.
This is a pretty standard, plain [application service ](https://docs.abp.io/en/abp/latest/Application-Services)class. All the ABP application service features (validation, audit logging, unit of work, etc.) are available. You can inject [repositories](https://docs.abp.io/en/abp/latest/Repositories) and perform database queries. To keep this article simple, I am returning hard-coded data from here.
> `ProductManagementAppService` is a base class coming in the ABP startup template. While you don't have to inherit from it, it provides useful base properties and methods you typically need in an application service.
Application service part is over. Again, we didn't write any gRPC specific code. Don't worry, we will write in the next section.
The application service part is over. Again, we didn't write any gRPC specific code. Don't worry, we will write in the next section.
## Configuring the gRPC Server
@ -153,7 +153,7 @@ We've configured the `IProductAppService` to handle gRPC requests to that servic
![host-changes-1](host-changes-1.png)
gRPC handles request with the HTTP/2 protocol and should listen an endpoint other than the default HTTP endpoint used by the application. We can easily configure the Kestrel server to listen two endpoints, one for our HTTP APIs, the other one for gRPC services. Add the following configuration inside the `appsettings.json` file of the `ProductManagement.HttpApi.Host` project:
gRPC handles requests with the HTTP/2 protocol and should listen an endpoint other than the default HTTP endpoint used by the application. We can easily configure the Kestrel server to listen two endpoints, one for our HTTP APIs, the other one for gRPC services. Add the following configuration inside the `appsettings.json` file of the `ProductManagement.HttpApi.Host` project:
````json
"Kestrel": {
@ -170,6 +170,8 @@ gRPC handles request with the HTTP/2 protocol and should listen an endpoint othe
}
````
Note that `https://localhost:44388` may be different for your case, since ABP CLI assignes a random port while you're creating a new solution. You can check your port by running the `ProductManagement.HttpApi.Host` project and looking at the address bar on your browser.
The server-side configuration is done. It is ready to receive gRPC requests. Now, we can change the client to consume the gRPC service we've created.
## Implementing the Client Side
@ -223,7 +225,7 @@ First run the `ProductManagement.HttpApi.Host` application. It should show a Swa
If you see that page, it means your server-side is up and running. Now, you can run the `ProductManagement.HttpApi.Client.ConsoleTestApp` console application to call the gRPC service defined on the server.
Test console application should produce an output like shown below:
The test console application should produce an output as shown below:
![client-application](client-application.png)
@ -239,4 +241,4 @@ gRPC on .NET has different approaches, features, configurations and more details
* You can find the completed source code here: https://github.com/abpframework/abp-samples/tree/master/GrpcDemo2
* You can also see all the changes I've done in this article here: https://github.com/abpframework/abp-samples/pull/200/files
* You can also see all the changes I've done in this article here: https://github.com/abpframework/abp-samples/pull/200/files

121
docs/en/Community-Articles/2022-09-18-Grpc-Demo-Part-2/POST.md

@ -0,0 +1,121 @@
# Consuming gRPC Services from Blazor WebAssembly Application Using gRPC-Web
> **WARNING: I've demonstrated [Using gRPC with the ABP Framework](https://community.abp.io/posts/using-grpc-with-the-abp-framework-2dgaxzw3) in my latest post. If you haven't seen it, you should read it before this article, since this is a continuation of that article.**
In this second part, I will show how to consume the gRPC service from the Blazor WebAssembly application, using the gRPC-Web technology.
This will be a short article, based on Microsoft's [gRPC-Web in ASP.NET Core gRPC apps](https://learn.microsoft.com/en-us/aspnet/core/grpc/grpcweb) and [Code-first gRPC services and clients with .NET](https://learn.microsoft.com/en-us/aspnet/core/grpc/code-first) documents. For more information, I suggest to check these documents. Let's get started...
## Configuring the Server Side
First of all, the server-side should support gRPC-Web. Follow the steps below to enable it:
### Add Grpc.AspNetCore.Web Package
Add [Grpc.AspNetCore.Web](https://www.nuget.org/packages/Grpc.AspNetCore.Web) NuGet package to the `ProductManagement.HttpApi.Host` project.
### Add GrpcWeb Middleware
Add the following line just before the `app.UseConfiguredEndpoints(...)` line to add the GrpcWeb middleware to your ASP.NET Core request pipeline:
````csharp
app.UseGrpcWeb(new GrpcWebOptions { DefaultEnabled = true });
````
### Configure Cors
ABP's startup template already configures Cors when you create a new solution. However, we need to allow some extra headers in our Cors configuration.
Add the following line just after the `.WithAbpExposedHeaders()` line in the `OnApplicationInitialization` method of the `ProductManagementHttpApiHostModule` class:
````csharp
.WithExposedHeaders("Grpc-Status", "Grpc-Message", "Grpc-Encoding", "Grpc-Accept-Encoding")
````
Finally, call `RequireCors` extension method just after the `MapGrpcService` calls:
````csharp
app.UseConfiguredEndpoints(endpoints =>
{
endpoints
.MapGrpcService<IProductAppService>()
.RequireCors("__DefaultCorsPolicy"); // Configure Cors for the product service
});
````
`__DefaultCorsPolicy` may seem a magic string here. Let me explain it: ABP startup template configures the default Cors policy with the `context.Services.AddCors(...)` method (you can see it in the source code). If we define a named policy, we should use the same name here. However, when we don't specify, ASP.NET Core uses `__DefaultCorsPolicy` as the policy name by default. If you don't want to use the magic string, you can resolve the `IOptions<CorsOptions>` service and get the `DefaultPolicyName` from the `CorsOption` object.
Anyway, that's all on the server-side. We can work on he client now.
## Configuring the Client Side
`ProductManagement.Blazor` is the Blazor WebAssembly application in the solution I'd created in the [first article](https://community.abp.io/posts/using-grpc-with-the-abp-framework-2dgaxzw3). We will configure that project to be able to consume the server-side gRPC services from our Blazor application.
### Add Client-side Nuget Packages
Add [Grpc.Net.Client](https://www.nuget.org/packages/Grpc.Net.Client), [Grpc.Net.Client.Web](https://www.nuget.org/packages/Grpc.Net.Client.Web) and [protobuf-net.Grpc](https://www.nuget.org/packages/protobuf-net.Grpc) NuGet packages to the `ProductManagement.Blazor` project. We are ready to consume the gRPC services.
### Consume the Product Service
Change the `Pages/Index.razor.cs` file's content with the following code block:
````csharp
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using Grpc.Net.Client;
using Grpc.Net.Client.Web;
using ProductManagement.Products;
using ProtoBuf.Grpc.Client;
namespace ProductManagement.Blazor.Pages;
public partial class Index
{
private List<ProductDto> Products { get; set; } = new();
protected override async Task OnInitializedAsync()
{
var channel = GrpcChannel.ForAddress("https://localhost:10042", new GrpcChannelOptions
{
HttpHandler = new GrpcWebHandler(new HttpClientHandler())
});
var productAppService = channel.CreateGrpcService<IProductAppService>();
Products = await productAppService.GetListAsync();
}
}
````
* We've created a gRPC channel for the server-side endpoint (surely, you get the address from a configuration) with channel options by specifying that we will use the `GrpcWebHandler`.
* We've created a service proxy object using the `CreateGrpcService` extension method that is defined by the [protobuf-net.Grpc](https://www.nuget.org/packages/protobuf-net.Grpc) NuGet package.
* We've used the service proxy object, `productAppService`, to consume remote endpoint just like a local service.
That's all. If we want to show the products on the page, we can add the following markup into the `Pages/Index.razor` view:
````xml
<h2>A list of products:</h2>
<ul class="list-group">
@foreach(var product in Products)
{
<li class="list-group-item">
@product.Name <br/>
<small>@product.Id.ToString()</small>
</li>
}
</ul>
````
Run the applications (first run the `ProductManagement.HttpApi.Host` project, then run the `ProductManagement.Blazor` project in the solution) to see it in action:
![blazor-product-list](blazor-product-list.png)
## Conclusion
In the first part of this article, I'd demonstrated how to implement a gRPC service and consume it in a client application, using the [code-first approach](https://docs.microsoft.com/en-us/aspnet/core/grpc/code-first). In this article, I've demonstrated how to consume the same gRPC service from a Blazor WebAssembly application, using the [gRPC-Web](https://learn.microsoft.com/en-us/aspnet/core/grpc/grpcweb) technology. As you see in these two articles, using gRPC with the ABP Framework is straightforward.
## The Source Code
- You can find the completed source code here: https://github.com/abpframework/abp-samples/tree/master/GrpcDemo2
- You can also see all the changes I've done in this article here: https://github.com/abpframework/abp-samples/pull/201/files

BIN
docs/en/Community-Articles/2022-09-18-Grpc-Demo-Part-2/blazor-product-list.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

10
docs/en/Migration-Guides/OpenIddict-Angular.md

@ -16,14 +16,14 @@
- In **MyApplication.HttpApi.Host.csproj** replace **project references**:
```csharp
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="6.0.0-rc.5" />
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="6.0.0-rc.5" />
```
with
```csharp
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="6.0.0-rc.5" />
```
- In the **MyApplicationHttpApiHostModule.cs** replace usings and **module dependencies**:
@ -117,13 +117,13 @@ This project is renamed to **AuthServer** after v6.0.0-rc1. You can also refacto
- In **MyApplication.IdentityServer.csproj** replace **project references**:
```csharp
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="6.0.0-rc.5" />
```
with
```csharp
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="6.0.0-rc.5" />
```
- In the **MyApplicationIdentityServerModule.cs** replace usings and **module dependencies**:

10
docs/en/Migration-Guides/OpenIddict-Blazor-Server.md

@ -5,14 +5,14 @@
- In the **MyApplication.Blazor.csproj** replace **project references**:
```csharp
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="6.0.0-rc.5" />
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="6.0.0-rc.5" />
```
with
```csharp
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="6.0.0-rc.5" />
```
- In the **MyApplicationBlazorModule.cs** replace usings and **module dependencies**:
@ -108,13 +108,13 @@ This project is renamed to **AuthServer** after v6.0.0-rc1. You can also refacto
- In **MyApplication.IdentityServer.csproj** replace **project references**:
```csharp
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="6.0.0-rc.5" />
```
with
```csharp
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="6.0.0-rc.5" />
```
- In **MyApplicationIdentityServerModule.cs** replace usings and **module dependencies**:

10
docs/en/Migration-Guides/OpenIddict-Blazor.md

@ -34,14 +34,14 @@
- In the **MyApplication.HttpApi.Host.csproj** replace **project references**:
```csharp
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="6.0.0-rc.5" />
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="6.0.0-rc.5" />
```
with
```csharp
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="6.0.0-rc.5" />
```
- In the **MyApplicationHttpApiHostModule.cs** replace usings and **module dependencies**:
@ -136,13 +136,13 @@ This project is renamed to **AuthServer** after v6.0.0-rc1. You can also refacto
- In **MyApplication.IdentityServer.csproj** replace **project references**:
```csharp
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="6.0.0-rc.5" />
```
with
```csharp
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="6.0.0-rc.5" />
```
- In the **MyApplicationIdentityServerModule.cs** replace usings and **module dependencies**:

27
docs/en/Migration-Guides/OpenIddict-Mvc.md

@ -5,14 +5,14 @@
- In **MyApplication.Web.csproj** replace **project references**:
```csharp
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="6.0.0-rc.5" />
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="6.0.0-rc.5" />
```
with
```csharp
<PackageReference Include="Volo.Abp.Account.Web" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="6.0.0-rc.5" />
```
- In **MyApplicationWebModule.cs** replace usings and **module dependencies**:
@ -50,6 +50,23 @@
context.Services.ForwardIdentityAuthenticationForBearer(OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme);
}
```
- In the **MyApplicationWebModule.cs** add `PreConfigureServices` like below with your application name as the audience:
```csharp
public override void PreConfigureServices(ServiceConfigurationContext context)
{
PreConfigure<OpenIddictBuilder>(builder =>
{
builder.AddValidation(options =>
{
options.AddAudiences("MyApplication"); // Replace with your application name
options.UseLocalServer();
options.UseAspNetCore();
});
});
}
```
- In **MyApplicationWebModule.cs** `OnApplicationInitialization` method **replace IdentityServer and JwtToken midwares**:
@ -99,13 +116,13 @@ This project is renamed to **AuthServer** after v6.0.0-rc1. You can also refacto
- In **MyApplication.IdentityServer.csproj** replace **project references**:
```csharp
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="6.0.0-rc.5" />
```
with
```csharp
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="6.0.0-rc.5" />
```
- In **MyApplicationIdentityServerModule.cs** replace usings and **module dependencies**:

20
docs/en/Migration-Guides/OpenIddict-Step-by-Step.md

@ -20,11 +20,11 @@ Use the `abp update` command to update your existing application. See [Upgrading
- In **MyApplication.Domain.Shared.csproj** replace **project reference**:
```csharp
<PackageReference Include="Volo.Abp.IdentityServer.Domain.Shared" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.IdentityServer.Domain.Shared" Version="6.0.0-rc.5" />
```
with
```csharp
<PackageReference Include="Volo.Abp.OpenIddict.Domain.Shared" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.OpenIddict.Domain.Shared" Version="6.0.0-rc.5" />
```
- In **MyApplicationDomainSharedModule.cs** replace usings and **module dependencies:**
@ -45,15 +45,15 @@ Use the `abp update` command to update your existing application. See [Upgrading
- In **MyApplication.Domain.csproj** replace **project references**:
```csharp
<PackageReference Include="Volo.Abp.IdentityServer.Domain" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.PermissionManagement.Domain.IdentityServer" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.IdentityServer.Domain" Version="6.0.0-rc.5" />
<PackageReference Include="Volo.Abp.PermissionManagement.Domain.IdentityServer" Version="6.0.0-rc.5" />
```
with
```csharp
<PackageReference Include="Volo.Abp.OpenIddict.Domain" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.PermissionManagement.Domain.OpenIddict" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.OpenIddict.Domain" Version="6.0.0-rc.5" />
<PackageReference Include="Volo.Abp.PermissionManagement.Domain.OpenIddict" Version="6.0.0-rc.5" />
```
- In **MyApplicationDomainModule.cs** replace usings and **module dependencies**:
@ -90,13 +90,13 @@ If you are using MongoDB, skip this step and check the *MongoDB* layer section.
- In **MyApplication.EntityFrameworkCore.csproj** replace **project reference**:
```csharp
<PackageReference Include="Volo.Abp.IdentityServer.EntityFrameworkCore" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.IdentityServer.EntityFrameworkCore" Version="6.0.0-rc.5" />
```
with
```csharp
<PackageReference Include="Volo.Abp.OpenIddict.EntityFrameworkCore" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.OpenIddict.EntityFrameworkCore" Version="6.0.0-rc.5" />
```
- In **MyApplicationEntityFrameworkCoreModule.cs** replace usings and **module dependencies**:
@ -154,13 +154,13 @@ If you are using EntityFrameworkCore, skip this step and check the *EntityFramew
- In **MyApplication.MongoDB.csproj** replace **project reference**:
```csharp
<PackageReference Include="Volo.Abp.IdentityServer.MongoDB" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.IdentityServer.MongoDB" Version="6.0.0-rc.5" />
```
with
```csharp
<PackageReference Include="Volo.Abp.OpenIddict.MongoDB" Version="6.0.0-rc.1" />
<PackageReference Include="Volo.Abp.OpenIddict.MongoDB" Version="6.0.0-rc.5" />
```
- In **MyApplicationMongoDbModule.cs** replace usings and **module dependencies**:

25
docs/en/UI/Angular/Dynamic-Form-Extensions.md

@ -235,10 +235,35 @@ const options: FormPropOptions<IdentityUserDto> = {
},
autocomplete: 'off',
isExtra: true,
template: undefined | Type<any> // Custom angular component
};
const prop = new FormProp(options);
```
FormProp has the template option since version 6.0. it can accept custom angular component.
The component can access PropData and Prop.
Example of the custom prop component.
```js
import {
EXTENSIBLE_FORM_VIEW_PROVIDER,
EXTENSIONS_FORM_PROP,
EXTENSIONS_FORM_PROP_DATA,
} from '@abp/ng.theme.shared/extensions';
@Component({
selector: 'my-custom-custom-prop',
templateUrl: './my-custom-custom-prop.component.html',
viewProviders: [EXTENSIBLE_FORM_VIEW_PROVIDER], //you should add this, otherwise form-group doesn't work.
})
export class MyCustomPropComponent {
constructor(
@Inject(EXTENSIONS_FORM_PROP) private formProp: FormProp,
@Inject(EXTENSIONS_FORM_PROP_DATA) private propData: ProfileDto,
...)
...
}
```
It also has two static methods to create its instances:

3
docs/en/UI/Angular/Theme-Configurations.md

@ -0,0 +1,3 @@
# Angular UI: Theme Configurations
> This document is in draft version.

1
docs/zh-Hans/Audit-Logging.md

@ -42,6 +42,7 @@ Configure<AbpAuditingOptions>(options =>
* `AlwaysLogOnException`(默认值: `true`): 如果设置为 `true`,将始终在异常/错误情况下保存审计日志,不检查其他选项(`IsEnabled` 除外,它完全禁用了审计日志).
* `IsEnabledForGetRequests` (默认值: `false`): HTTP GET请求通常不应该在数据库进行任何更改,审计日志系统不会为GET请求保存审计日志对象. 将此值设置为 `true` 可为GET请求启用审计日志系统.
* `ApplicationName`: 如果有多个应用程序保存审计日志到单一的数据库,使用此属性设置为你的应用程序名称区分不同的应用程序日志.
* `DisableLogActionInfo` (默认值: `false`): 如果设置为 `true`, 将不再记录 `AuditLogActionInfo`.
* `IgnoredTypes`: 审计日志系统忽略的 `Type` 列表. 如果它是实体类型,则不会保存此类型实体的更改. 在序列化操作参数时也使用此列表.
* `EntityHistorySelectors`:选择器列表,用于确定是否选择了用于保存实体更改的实体类型. 有关详细信息请参阅下面的部分.
* `Contributors`: `AuditLogContributor` 实现的列表. 贡献者是扩展审计日志系统的一种方式. 有关详细信息请参阅下面的"审计日志贡献者"部分.

8
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs

@ -118,6 +118,12 @@ public class MultiTenancyMiddleware : IMiddleware, ITransientDependency
uiCulture = defaultLanguage;
}
return new RequestCulture(culture, uiCulture);
if (CultureHelper.IsValidCultureCode(culture) &&
CultureHelper.IsValidCultureCode(uiCulture))
{
return new RequestCulture(culture, uiCulture);
}
return null;
}
}

10
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/AbpAspNetCoreMvcUiPackagesModule.cs

@ -1,6 +1,7 @@
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.BootstrapDatepicker;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQueryValidation;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.Moment;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.Timeago;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
@ -25,6 +26,15 @@ public class AbpAspNetCoreMvcUiPackagesModule : AbpModule
options.AddLanguageFilesMapOrUpdate(BootstrapDatepickerScriptContributor.PackageName,
new NameValue("zh-Hans", "zh-CN"),
new NameValue("zh-Hant", "zh-TW"));
//moment
options.AddLanguagesMapOrUpdate(MomentScriptContributor.PackageName,
new NameValue("zh-Hans", "zh-CN"),
new NameValue("zh-Hant", "zh-TW"));
options.AddLanguageFilesMapOrUpdate(MomentScriptContributor.PackageName,
new NameValue("zh-Hans", "zh-CN"),
new NameValue("zh-Hant", "zh-TW"));
//Timeago
options.AddLanguageFilesMapOrUpdate(TimeagoScriptContributor.PackageName,

21
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/BootstrapDaterangepicker/BootstrapDaterangepickerScriptContributor.cs

@ -0,0 +1,21 @@
using System.Collections.Generic;
using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQuery;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.Moment;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.BootstrapDaterangepicker;
[DependsOn(typeof(JQueryScriptContributor))]
[DependsOn(typeof(MomentScriptContributor))]
public class BootstrapDaterangepickerScriptContributor : BundleContributor
{
public const string PackageName = "bootstrap-daterangepicker";
public override void ConfigureBundle(BundleConfigurationContext context)
{
context.Files.AddIfNotContains("/libs/bootstrap-daterangepicker/daterangepicker.js");
}
}

12
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/BootstrapDaterangepicker/BootstrapDaterangepickerStyleContributor.cs

@ -0,0 +1,12 @@
using System.Collections.Generic;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.BootstrapDaterangepicker;
public class BootstrapDaterangepickerStyleContributor : BundleContributor
{
public override void ConfigureBundle(BundleConfigurationContext context)
{
context.Files.AddIfNotContains("/libs/bootstrap-daterangepicker/daterangepicker.css");
}
}

28
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/Moment/MomentScriptContributor.cs

@ -0,0 +1,28 @@
using System.Collections.Generic;
using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQuery;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.Moment;
public class MomentScriptContributor : BundleContributor
{
public const string PackageName = "moment";
public override void ConfigureBundle(BundleConfigurationContext context)
{
context.Files.AddIfNotContains("/libs/moment/moment.min.js");
}
public override void ConfigureDynamicResources(BundleConfigurationContext context)
{
var fileName = context.LazyServiceProvider.LazyGetRequiredService<IOptions<AbpLocalizationOptions>>().Value.GetCurrentUICultureLanguageFilesMap(PackageName);
var filePath = $"/libs/moment/locale/{fileName}.js";
if (context.FileProvider.GetFileInfo(filePath).Exists)
{
context.Files.AddIfNotContains(filePath);
}
}
}

4
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalScriptContributor.cs

@ -1,6 +1,7 @@
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.Bootstrap;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.BootstrapDatepicker;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.BootstrapDaterangepicker;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.DatatablesNetBs5;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQuery;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQueryForm;
@ -29,7 +30,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Bundling;
typeof(MalihuCustomScrollbarPluginScriptBundleContributor),
typeof(LuxonScriptContributor),
typeof(TimeagoScriptContributor),
typeof(BootstrapDatepickerScriptContributor)
typeof(BootstrapDatepickerScriptContributor),
typeof(BootstrapDaterangepickerScriptContributor)
)]
public class SharedThemeGlobalScriptContributor : BundleContributor
{

4
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalStyleContributor.cs

@ -1,6 +1,7 @@
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.Bootstrap;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.BootstrapDatepicker;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.BootstrapDaterangepicker;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.Core;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.DatatablesNetBs5;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.FontAwesome;
@ -19,7 +20,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Bundling;
typeof(Select2StyleContributor),
typeof(MalihuCustomScrollbarPluginStyleBundleContributor),
typeof(DatatablesNetBs5StyleContributor),
typeof(BootstrapDatepickerStyleContributor)
typeof(BootstrapDatepickerStyleContributor),
typeof(BootstrapDaterangepickerStyleContributor)
)]
public class SharedThemeGlobalStyleContributor : BundleContributor
{

42
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js

@ -99,7 +99,7 @@
// add unchecked checkboxes because serializeArray ignores them
$(this).find("input[type=checkbox]").each(function () {
if (!$(this).is(':checked')) {
data.push({name: this.name, value: this.checked});
data.push({ name: this.name, value: this.checked });
}
});
@ -118,26 +118,7 @@
});
//map to object
var getVarName = function (v) {
return v.toString().replace(/\(\)\s?=\>\s?/, '');
}
var getNames = function (index, variable) {
var name = '';
for (var i = 0; i <= index; i++) {
if (i == 0) {
name = variable + '[' + i + ']'
} else {
name += '][' + variable + '[' + i + ']'
}
}
return name;
}
var obj = {};
var objName = getVarName(() => obj);
if (camelCase !== undefined ? camelCase : true) {
data.forEach(function (d) {
d.name = toCamelCase(d.name);
@ -146,18 +127,19 @@
data.map(function (x) {
var names = x.name.split(".");
var xName = getVarName(() => x);
var namesName = getVarName(() => names);
for (var i = 0; i < names.length; i++) {
var o = obj;
for (var j = 0; j <= i; j++) {
if ($.isEmptyObject(o[names[j]])) {
o[names[j]] = {};
}
var i = obj ? 0 : 1;
for (i = 0; i < names.length; i++) {
if (eval('!' + objName + '[' + getNames(i, '' + namesName + '') + ']')) {
eval('' + objName + '[' + getNames(i, '' + namesName + '') + '] = {}');
}
}
if (i == names.length - 1 && j == i) {
o[names[j]] = x.value;
}
if ($.isEmptyObject(eval('' + objName + '[' + getNames(names.length - 1, '' + namesName + '') + ']'))) {
eval('' + objName + '[' + getNames(names.length - 1, '' + namesName + '') + '] = ' + xName + '.value');
o = o[names[j]]
}
}
});

24
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Auditing/AbpAuditActionFilter.cs

@ -41,8 +41,12 @@ public class AbpAuditActionFilter : IAsyncActionFilter, ITransientDependency
finally
{
stopwatch.Stop();
auditLogAction.ExecutionDuration = Convert.ToInt32(stopwatch.Elapsed.TotalMilliseconds);
auditLog.Actions.Add(auditLogAction);
if (auditLogAction != null)
{
auditLogAction.ExecutionDuration = Convert.ToInt32(stopwatch.Elapsed.TotalMilliseconds);
auditLog.Actions.Add(auditLogAction);
}
}
}
}
@ -78,12 +82,16 @@ public class AbpAuditActionFilter : IAsyncActionFilter, ITransientDependency
}
auditLog = auditLogScope.Log;
auditLogAction = auditingHelper.CreateAuditLogAction(
auditLog,
context.ActionDescriptor.AsControllerActionDescriptor().ControllerTypeInfo.AsType(),
context.ActionDescriptor.AsControllerActionDescriptor().MethodInfo,
context.ActionArguments
);
if (!options.DisableLogActionInfo)
{
auditLogAction = auditingHelper.CreateAuditLogAction(
auditLog,
context.ActionDescriptor.AsControllerActionDescriptor().ControllerTypeInfo.AsType(),
context.ActionDescriptor.AsControllerActionDescriptor().MethodInfo,
context.ActionArguments
);
}
return true;
}

24
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Auditing/AbpAuditPageFilter.cs

@ -46,8 +46,12 @@ public class AbpAuditPageFilter : IAsyncPageFilter, ITransientDependency
finally
{
stopwatch.Stop();
auditLogAction.ExecutionDuration = Convert.ToInt32(stopwatch.Elapsed.TotalMilliseconds);
auditLog.Actions.Add(auditLogAction);
if (auditLogAction != null)
{
auditLogAction.ExecutionDuration = Convert.ToInt32(stopwatch.Elapsed.TotalMilliseconds);
auditLog.Actions.Add(auditLogAction);
}
}
}
}
@ -81,12 +85,16 @@ public class AbpAuditPageFilter : IAsyncPageFilter, ITransientDependency
}
auditLog = auditLogScope.Log;
auditLogAction = auditingHelper.CreateAuditLogAction(
auditLog,
context.HandlerMethod.MethodInfo.DeclaringType,
context.HandlerMethod.MethodInfo,
context.HandlerArguments
);
if (!options.DisableLogActionInfo)
{
auditLogAction = auditingHelper.CreateAuditLogAction(
auditLog,
context.HandlerMethod.MethodInfo.DeclaringType,
context.HandlerMethod.MethodInfo,
context.HandlerArguments
);
}
return true;
}

6
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpLanguagesController.cs

@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Globalization;
using System.Threading.Tasks;
using Microsoft.AspNetCore.RequestLocalization;
using Volo.Abp.Auditing;
@ -30,6 +31,11 @@ public class AbpLanguagesController : AbpController
throw new AbpException("The selected culture is not valid! Make sure you enter a valid culture code.");
}
if (!CultureHelper.IsValidCultureCode(uiCulture))
{
throw new AbpException("The selected uiCulture is not valid! Make sure you enter a valid culture code.");
}
AbpRequestCultureCookieHelper.SetCultureCookie(
HttpContext,
new RequestCulture(culture, uiCulture)

7
framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AbpAuditingOptions.cs

@ -37,7 +37,7 @@ public class AbpAuditingOptions
/// Default: true.
/// </summary>
public bool AlwaysLogOnException { get; set; }
/// <summary>
/// Disables/enables audit logging for integration services.
/// Default: false.
@ -58,6 +58,11 @@ public class AbpAuditingOptions
/// </summary>
public bool IsEnabledForGetRequests { get; set; }
/// <summary>
/// Default: false.
/// </summary>
public bool DisableLogActionInfo { get; set; }
public AbpAuditingOptions()
{
IsEnabled = true;

30
framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingInterceptor.cs

@ -37,7 +37,7 @@ public class AuditingInterceptor : AbpInterceptor, ITransientDependency
var auditingManager = serviceScope.ServiceProvider.GetRequiredService<IAuditingManager>();
if (auditingManager.Current != null)
{
await ProceedByLoggingAsync(invocation, auditingHelper, auditingManager.Current);
await ProceedByLoggingAsync(invocation, auditingOptions, auditingHelper, auditingManager.Current);
}
else
{
@ -74,16 +74,22 @@ public class AuditingInterceptor : AbpInterceptor, ITransientDependency
private static async Task ProceedByLoggingAsync(
IAbpMethodInvocation invocation,
AbpAuditingOptions options,
IAuditingHelper auditingHelper,
IAuditLogScope auditLogScope)
{
var auditLog = auditLogScope.Log;
var auditLogAction = auditingHelper.CreateAuditLogAction(
auditLog,
invocation.TargetObject.GetType(),
invocation.Method,
invocation.Arguments
);
AuditLogActionInfo auditLogAction = null;
if (!options.DisableLogActionInfo)
{
auditLogAction = auditingHelper.CreateAuditLogAction(
auditLog,
invocation.TargetObject.GetType(),
invocation.Method,
invocation.Arguments
);
}
var stopwatch = Stopwatch.StartNew();
@ -99,8 +105,12 @@ public class AuditingInterceptor : AbpInterceptor, ITransientDependency
finally
{
stopwatch.Stop();
auditLogAction.ExecutionDuration = Convert.ToInt32(stopwatch.Elapsed.TotalMilliseconds);
auditLog.Actions.Add(auditLogAction);
if (auditLogAction != null)
{
auditLogAction.ExecutionDuration = Convert.ToInt32(stopwatch.Elapsed.TotalMilliseconds);
auditLog.Actions.Add(auditLogAction);
}
}
}
@ -117,7 +127,7 @@ public class AuditingInterceptor : AbpInterceptor, ITransientDependency
{
try
{
await ProceedByLoggingAsync(invocation, auditingHelper, auditingManager.Current);
await ProceedByLoggingAsync(invocation, options, auditingHelper, auditingManager.Current);
Debug.Assert(auditingManager.Current != null);
if (auditingManager.Current.Log.Exceptions.Any())

8
framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj

@ -14,10 +14,10 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Blazorise" Version="1.0.4" />
<PackageReference Include="Blazorise.DataGrid" Version="1.0.4" />
<PackageReference Include="Blazorise.Snackbar" Version="1.0.4" />
<PackageReference Include="Blazorise.Components" Version="1.0.4" />
<PackageReference Include="Blazorise" Version="1.0.6" />
<PackageReference Include="Blazorise.DataGrid" Version="1.0.6" />
<PackageReference Include="Blazorise.Snackbar" Version="1.0.6" />
<PackageReference Include="Blazorise.Components" Version="1.0.6" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DefaultDotNetProjectBuilder.cs

@ -76,7 +76,7 @@ public class DefaultDotNetProjectBuilder : IDotNetProjectBuilder, ITransientDepe
Console.WriteLine("Executing...: dotnet build " + project.CsProjPath + " " + buildArguments);
var output = CmdHelper.RunCmdAndGetOutput(
"dotnet build " + project.CsProjPath + " " + buildArguments,
"dotnet build \"" + project.CsProjPath + "\" " + buildArguments,
out int buildStatus
);

14
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs

@ -1,11 +1,4 @@
using System.Collections.Generic;
using System.Security.Policy;
using Volo.Abp.Cli.ProjectBuilding.Templates.App;
using Volo.Abp.Cli.ProjectBuilding.Templates.Microservice;
using Volo.Abp.Cli.ProjectBuilding.Templates.Module;
using Volo.Abp.Cli.ProjectBuilding.Templates.MvcModule;
namespace Volo.Abp.Cli;
namespace Volo.Abp.Cli;
public static class CliConsts
{
@ -24,4 +17,9 @@ public static class CliConsts
public const string AppSettingsJsonFileName = "appsettings.json";
public const string AppSettingsSecretJsonFileName = "appsettings.secrets.json";
public static class MemoryKeys
{
public const string LatestCliVersionCheckDate = "LatestCliVersionCheckDate";
}
}

1
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliPaths.cs

@ -10,6 +10,7 @@ public static class CliPaths
public static string Log => Path.Combine(AbpRootPath, "cli", "logs");
public static string Root => Path.Combine(AbpRootPath, "cli");
public static string AccessToken => Path.Combine(AbpRootPath, "cli", "access-token.bin");
public static string Memory => Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)!, "memory.bin");
public static string Build => Path.Combine(AbpRootPath, "build");
public static string Lic => Path.Combine(Path.GetTempPath(), Encoding.ASCII.GetString(new byte[] { 65, 98, 112, 76, 105, 99, 101, 110, 115, 101, 46, 98, 105, 110 }));

34
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs

@ -4,6 +4,7 @@ using Microsoft.Extensions.Logging.Abstractions;
using NuGet.Versioning;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
@ -11,14 +12,17 @@ using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.Commands;
using Volo.Abp.Cli.Memory;
using Volo.Abp.Cli.NuGet;
using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection;
using Volo.Abp.IO;
namespace Volo.Abp.Cli;
public class CliService : ITransientDependency
{
private readonly MemoryService _memoryService;
public ILogger<CliService> Logger { get; set; }
protected ICommandLineArgumentParser CommandLineArgumentParser { get; }
protected ICommandSelector CommandSelector { get; }
@ -31,8 +35,10 @@ public class CliService : ITransientDependency
ICommandSelector commandSelector,
IServiceScopeFactory serviceScopeFactory,
NuGetService nugetService,
ICmdHelper cmdHelper)
ICmdHelper cmdHelper,
MemoryService memoryService)
{
_memoryService = memoryService;
CommandLineArgumentParser = commandLineArgumentParser;
CommandSelector = commandSelector;
ServiceScopeFactory = serviceScopeFactory;
@ -164,6 +170,11 @@ public class CliService : ITransientDependency
private async Task CheckCliVersionAsync()
{
if (!await IsLatestVersionCheckExpiredAsync())
{
return;
}
var assembly = typeof(CliService).Assembly;
var toolPath = GetToolPath(assembly);
var currentCliVersion = await GetCurrentCliVersionInternalAsync(assembly);
@ -187,6 +198,27 @@ public class CliService : ITransientDependency
}
}
private async Task<bool> IsLatestVersionCheckExpiredAsync()
{
try
{
var latestTime = await _memoryService.GetAsync(CliConsts.MemoryKeys.LatestCliVersionCheckDate);
if (latestTime != null && DateTime.Now - DateTime.Parse(latestTime, CultureInfo.InvariantCulture) < TimeSpan.FromDays(1))
{
return false;
}
await _memoryService.SetAsync(CliConsts.MemoryKeys.LatestCliVersionCheckDate, DateTime.Now.ToString(CultureInfo.InvariantCulture));
return true;
}
catch (Exception)
{
return true;
}
}
private string GetToolPath(Assembly assembly)
{
if (!assembly.Location.Contains(".store"))

5
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GetSourceCommand.cs

@ -39,13 +39,8 @@ public class GetSourceCommand : IConsoleCommand, ITransientDependency
}
var version = commandLineArgs.Options.GetOrNull(Options.Version.Short, Options.Version.Long);
if (version != null)
{
Logger.LogInformation("Version: " + version);
}
var outputFolder = GetOutPutFolder(commandLineArgs);
Logger.LogInformation("Output folder: " + outputFolder);
var gitHubAbpLocalRepositoryPath = commandLineArgs.Options.GetOrNull(Options.GitHubAbpLocalRepositoryPath.Long);
if (gitHubAbpLocalRepositoryPath != null)

3
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/Services/SourceCodeDownloadService.cs

@ -33,8 +33,7 @@ public class SourceCodeDownloadService : ITransientDependency
public async Task DownloadModuleAsync(string moduleName, string outputFolder, string version, string gitHubAbpLocalRepositoryPath, string gitHubVoloLocalRepositoryPath, AbpCommandLineOptions options)
{
Logger.LogInformation("Downloading source code of " + moduleName);
Logger.LogInformation("Version: " + (version ?? "Latest"));
Logger.LogInformation($"Downloading source code of {moduleName} (v{version ?? "Latest"})");
Logger.LogInformation("Output folder: " + outputFolder);
var result = await ModuleProjectBuilder.BuildAsync(

21
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/GitHub/GithubRelease.cs

@ -0,0 +1,21 @@
using System;
using Newtonsoft.Json;
namespace Volo.Abp.Cli.GitHub;
[JsonObject]
[Serializable]
public class GithubRelease
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("prerelease")]
public bool IsPrerelease { get; set; }
[JsonProperty("published_at")]
public DateTime PublishTime { get; set; }
}

50
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Memory/MemoryService.cs

@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using JetBrains.Annotations;
using Volo.Abp.DependencyInjection;
using Volo.Abp.IO;
namespace Volo.Abp.Cli.Memory;
public class MemoryService : ITransientDependency
{
private const string KeyValueSeparator = "|||";
[ItemCanBeNull]
public async Task<string> GetAsync(string key)
{
if (!File.Exists(CliPaths.Memory))
{
return null;
}
return (await FileHelper.ReadAllTextAsync(CliPaths.Memory))
.Split(new[] { Environment.NewLine, "\n" }, StringSplitOptions.None)
.FirstOrDefault(x => x.StartsWith($"{key} "))?.Split(KeyValueSeparator).Last().Trim();
}
public async Task SetAsync(string key, string value)
{
if (!File.Exists(CliPaths.Memory))
{
File.WriteAllText(CliPaths.Memory,
$"{key} {KeyValueSeparator} {value}"
);
return;
}
var memoryContentLines = (await FileHelper.ReadAllTextAsync(CliPaths.Memory))
.Split(new[] { Environment.NewLine, "\n" }, StringSplitOptions.None)
.ToList();
memoryContentLines.RemoveAll(x => x.StartsWith(key));
memoryContentLines.Add($"{key} {KeyValueSeparator} {value}");
File.WriteAllText(CliPaths.Memory,
memoryContentLines.JoinAsString(Environment.NewLine)
);
}
}

32
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs

@ -8,9 +8,11 @@ using System.Linq;
using System.Net.Http;
using System.Reflection;
using System.Text;
using System.Text.Json;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Cli.GitHub;
using Volo.Abp.Cli.Http;
using Volo.Abp.Cli.ProjectBuilding.Templates.App;
using Volo.Abp.Cli.ProjectBuilding.Templates.Console;
@ -85,7 +87,7 @@ public class AbpIoSourceCodeStore : ISourceCodeStore, ITransientDependency
}
else
{
if (!await IsVersionExists(version))
if (!await IsVersionExists(name, version))
{
throw new Exception("There is no version found with given version: " + version);
}
@ -201,9 +203,9 @@ public class AbpIoSourceCodeStore : ISourceCodeStore, ITransientDependency
}
}
private async Task<bool> IsVersionExists(string version)
private async Task<bool> IsVersionExists(string templateName, string version)
{
var url = $"{CliUrls.WwwAbpIo}api/download/versions?includePreReleases=true";
var url = $"{CliUrls.WwwAbpIo}api/download/all-versions?includePreReleases=true";
try
{
@ -214,15 +216,15 @@ public class AbpIoSourceCodeStore : ISourceCodeStore, ITransientDependency
{
await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response);
var result = await response.Content.ReadAsStringAsync();
var versions = JsonSerializer.Deserialize<List<GithubRelease>>(result);
var versions = JsonSerializer.Deserialize<GithubReleaseVersions>(result);
return versions.Any(v => v.Name == version);
return templateName.Contains("LeptonX") ?
versions.LeptonXVersions.Any(v => v.Name == version) :
versions.FrameworkAndCommercialVersions.Any(v => v.Name == version);
}
}
catch (Exception ex)
catch (Exception)
{
Logger.LogWarning($"Error occured while getting the versions from {url} : {ex.Message}");
// The remote service is currently unavailable, try to work offline.
return true;
}
}
@ -324,14 +326,10 @@ public class AbpIoSourceCodeStore : ISourceCodeStore, ITransientDependency
public string Version { get; set; }
}
public class GithubRelease
public class GithubReleaseVersions
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsPrerelease { get; set; }
public DateTime PublishTime { get; set; }
public List<GithubRelease> FrameworkAndCommercialVersions { get; set; }
public List<GithubRelease> LeptonXVersions { get; set; }
}
}
}

16
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveFilesStep.cs

@ -0,0 +1,16 @@
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps;
public class RemoveFilesStep : ProjectBuildPipelineStep
{
private readonly string _filePath;
public RemoveFilesStep(string filePath)
{
_filePath = filePath;
}
public override void Execute(ProjectBuildContext context)
{
context.Files.RemoveAll(file => file.Name.Contains(_filePath));
}
}

2
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/TemplateCodeDeleteStep.cs

@ -19,7 +19,7 @@ public class TemplateCodeDeleteStep : ProjectBuildPipelineStep
file.Name.EndsWith(".ps1") ||
file.Name.EndsWith(".html") ||
file.Name.EndsWith(".ts") ||
file.Name.EndsWith(".scss"))
file.Name.EndsWith(".css"))
{
file.RemoveTemplateCode(context.Symbols);
file.RemoveTemplateCodeMarkers();

6
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateProjectBuilder.cs

@ -235,6 +235,12 @@ public class TemplateProjectBuilder : IProjectBuilder, ITransientDependency
if (args.Theme.HasValue)
{
Logger.LogInformation("Theme: " + args.Theme);
if (args.UiFramework == UiFramework.Angular && (args.Theme != AppTemplate.DefaultTheme || args.Theme != AppProTemplate.DefaultTheme))
{
Logger.LogWarning("You may need to make some additional changes for this theme. " +
"See the documentation for more information: https://docs.abp.io/en/abp/latest/UI/Angular/Theme-Configurations");
}
}
if(args.ThemeStyle.HasValue)

15
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs

@ -204,6 +204,8 @@ public abstract class AppTemplateBase : TemplateInfo
steps.Add(new ChangeThemeStyleStep());
}
RemoveThemeLogoFolders(context, steps);
if (IsDefaultThemeForTemplate(context.BuildArgs.Theme.Value))
{
return;
@ -213,6 +215,19 @@ public abstract class AppTemplateBase : TemplateInfo
RemoveLeptonXThemePackagesFromPackageJsonFiles(steps, isProTemplate: IsPro(), uiFramework: context.BuildArgs.UiFramework);
}
private void RemoveThemeLogoFolders(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
{
if (context.BuildArgs.Theme != Theme.Lepton && IsPro())
{
steps.Add(new RemoveFilesStep("/wwwroot/images/logo/lepton/"));
}
if (context.BuildArgs.Theme != Theme.LeptonX && context.BuildArgs.Theme != Theme.LeptonXLite)
{
steps.Add(new RemoveFilesStep("/wwwroot/images/logo/leptonx/"));
}
}
private static bool IsDefaultThemeForTemplate(Theme theme)
{
var defaultThemesForTemplates = new[]

6
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs

@ -51,7 +51,7 @@ public class SolutionFileModifier : ITransientDependency
var srcFolderId = await AddNewFolderAndGetIdOrGetExistingIdAsync(solutionFile, "src");
var solutionFileContent = File.ReadAllText(solutionFile);
var lines = solutionFileContent.Split(Environment.NewLine).ToList();
var lines = solutionFileContent.Split(new[] { Environment.NewLine, "\n" }, StringSplitOptions.None).ToList();
if (lines.Any(l => l.Contains($"\"{package.Name}\"")))
{
@ -140,7 +140,7 @@ public class SolutionFileModifier : ITransientDependency
await AddNewFolderAndGetIdOrGetExistingIdAsync(solutionFile, "test"));
var file = File.ReadAllText(solutionFile);
var lines = file.Split(Environment.NewLine).ToList();
var lines = file.Split(new[] { Environment.NewLine, "\n" }, StringSplitOptions.None).ToList();
var projectsUnderModule = Directory.GetFiles(
Path.Combine(Path.GetDirectoryName(solutionFile), "modules", module.Name),
@ -206,7 +206,7 @@ public class SolutionFileModifier : ITransientDependency
string parentFolderId = null)
{
var file = File.ReadAllText(solutionFile);
var lines = file.Split(Environment.NewLine).ToList();
var lines = file.Split(new[] { Environment.NewLine, "\n" }, StringSplitOptions.None).ToList();
string folderId;
var folderLineIndex = lines.FindIndex(l =>

14
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs

@ -293,7 +293,19 @@ public class CSharpServiceProxyGenerator : ServiceProxyGeneratorBase<CSharpServi
private bool ShouldGenerateMethod(string appServiceTypeName, ActionApiDescriptionModel action)
{
return action.ImplementFrom.StartsWith(AppServicePrefix) || action.ImplementFrom.StartsWith(appServiceTypeName);
var shouldGenerateMethod = action.ImplementFrom.StartsWith(AppServicePrefix) || action.ImplementFrom.StartsWith(appServiceTypeName);
if (!shouldGenerateMethod)
{
shouldGenerateMethod = IsAppServiceInterface(GetRealTypeName(action.ImplementFrom));
}
return shouldGenerateMethod;
}
private bool IsAppServiceInterface(string typeName)
{
return typeName.StartsWith("I") && ServicePostfixes.Any(typeName.EndsWith);
}
private string GetTypeNamespace(string typeFullName)

2
framework/src/Volo.Abp.Cli/Volo.Abp.Cli.csproj

@ -17,7 +17,7 @@
<PackageReference Include="NETStandard.Library" Version="2.0.3" />
<PackageReference Include="Serilog.Extensions.Logging" Version="3.1.0" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="4.0.1" />
<PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="$(MicrosoftPackageVersion)" />
</ItemGroup>

3
framework/src/Volo.Abp.Cli/Volo/Abp/Cli/Program.cs

@ -2,6 +2,7 @@
using Microsoft.Extensions.DependencyInjection;
using Serilog;
using Serilog.Events;
using Serilog.Sinks.SystemConsole.Themes;
using System.IO;
using System.Threading.Tasks;
@ -26,7 +27,7 @@ public class Program
#endif
.Enrich.FromLogContext()
.WriteTo.File(Path.Combine(CliPaths.Log, "abp-cli-logs.txt"))
.WriteTo.Console()
.WriteTo.Console(theme: AnsiConsoleTheme.Sixteen)
.CreateLogger();
using (var application = AbpApplicationFactory.Create<AbpCliModule>(

2
framework/src/Volo.Abp.Core/Volo/Abp/Localization/CultureHelper.cs

@ -47,7 +47,7 @@ public static class CultureHelper
try
{
CultureInfo.GetCultureInfo(cultureCode);
_ = CultureInfo.GetCultureInfo(cultureCode);
return true;
}
catch (CultureNotFoundException)

2
framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/AspNetCore/ExceptionHandling/DefaultExceptionToErrorInfoConverter.cs

@ -219,7 +219,7 @@ public class DefaultExceptionToErrorInfoConverter : IExceptionToErrorInfoConvert
AddExceptionToDetails(exception, detailBuilder, sendStackTraceToClients);
var errorInfo = new RemoteServiceErrorInfo(exception.Message, detailBuilder.ToString());
var errorInfo = new RemoteServiceErrorInfo(exception.Message, detailBuilder.ToString(), data: exception.Data);
if (exception is AbpValidationException)
{

7
framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/Http/RemoteServiceErrorInfo.cs

@ -24,6 +24,9 @@ public class RemoteServiceErrorInfo
/// </summary>
public string Details { get; set; }
/// <summary>
/// Error data.
/// </summary>
public IDictionary Data { get; set; }
/// <summary>
@ -45,10 +48,12 @@ public class RemoteServiceErrorInfo
/// <param name="code">Error code</param>
/// <param name="details">Error details</param>
/// <param name="message">Error message</param>
public RemoteServiceErrorInfo(string message, string details = null, string code = null)
/// <param name="data">Error data</param>
public RemoteServiceErrorInfo(string message, string details = null, string code = null, IDictionary data = null)
{
Message = message;
Details = details;
Code = code;
Data = data;
}
}

11
framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionHttpClientProxyExtensions.cs

@ -2,6 +2,7 @@
using System.Linq;
using System.Net.Http;
using System.Reflection;
using System.Runtime.InteropServices;
using Castle.DynamicProxy;
using JetBrains.Annotations;
using Volo.Abp;
@ -213,9 +214,14 @@ public static class ServiceCollectionHttpClientProxyExtensions
{
clientBuildAction(remoteServiceConfigurationName, provider, client);
}
}).ConfigurePrimaryHttpMessageHandler((provider) =>
}).ConfigurePrimaryHttpMessageHandler(provider =>
{
var handler = new HttpClientHandler { UseCookies = false };
var handler = new HttpClientHandler();
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Create("BROWSER")))
{
handler.UseCookies = false;
}
foreach (var handlerAction in preOptions.ProxyClientHandlerActions)
{
@ -243,6 +249,7 @@ public static class ServiceCollectionHttpClientProxyExtensions
/// Currently the type is checked statically against some fixed conditions.
/// </summary>
/// <param name="type">Type to check</param>
/// <param name="applicationServiceTypes">Option to filter application service types</param>
/// <returns>True, if the type is suitable for proxying. Otherwise false.</returns>
private static bool IsSuitableForClientProxying(
Type type,

24
framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityClientConfiguration.cs

@ -83,6 +83,24 @@ public class IdentityClientConfiguration : Dictionary<string, string>
get => this.GetOrDefault(nameof(CacheAbsoluteExpiration))?.To<int>() ?? 60 * 30;
set => this[nameof(CacheAbsoluteExpiration)] = value.ToString(CultureInfo.InvariantCulture);
}
/// <summary>
/// ValidateIssuerName.
/// Default: true.
/// </summary>
public bool ValidateIssuerName {
get => this.GetOrDefault(nameof(ValidateIssuerName))?.To<bool>() ?? true;
set => this[nameof(ValidateIssuerName)] = value.ToString().ToLowerInvariant();
}
/// <summary>
/// ValidateEndpoints.
/// Default: true.
/// </summary>
public bool ValidateEndpoints {
get => this.GetOrDefault(nameof(ValidateEndpoints))?.To<bool>() ?? true;
set => this[nameof(ValidateEndpoints)] = value.ToString().ToLowerInvariant();
}
public IdentityClientConfiguration()
{
@ -98,7 +116,9 @@ public class IdentityClientConfiguration : Dictionary<string, string>
string userName = null,
string userPassword = null,
bool requireHttps = true,
int cacheAbsoluteExpiration = 60 * 30)
int cacheAbsoluteExpiration = 60 * 30,
bool validateIssuerName = true,
bool validateEndpoints = true)
{
this[nameof(Authority)] = authority;
this[nameof(Scope)] = scope;
@ -109,5 +129,7 @@ public class IdentityClientConfiguration : Dictionary<string, string>
this[nameof(UserPassword)] = userPassword;
this[nameof(RequireHttps)] = requireHttps.ToString().ToLowerInvariant();
this[nameof(CacheAbsoluteExpiration)] = cacheAbsoluteExpiration.ToString(CultureInfo.InvariantCulture);
this[nameof(ValidateIssuerName)] = validateIssuerName.ToString().ToLowerInvariant();
this[nameof(ValidateEndpoints)] = validateEndpoints.ToString().ToLowerInvariant();
}
}

4
framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs

@ -127,7 +127,9 @@ public class IdentityModelAuthenticationService : IIdentityModelAuthenticationSe
Address = configuration.Authority,
Policy =
{
RequireHttps = configuration.RequireHttps
RequireHttps = configuration.RequireHttps,
ValidateIssuerName = configuration.ValidateIssuerName,
ValidateEndpoints = configuration.ValidateEndpoints
}
};
IdentityModelHttpRequestMessageOptions.ConfigureHttpRequestMessage?.Invoke(request);

4
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationResourceContributorBase.cs

@ -19,6 +19,7 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza
private Dictionary<string, ILocalizationDictionary> _dictionaries;
private bool _subscribedForChanges;
private readonly object _syncObj = new object();
private LocalizationResourceBase _resource;
protected VirtualFileLocalizationResourceContributorBase(string virtualPath)
{
@ -27,6 +28,7 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza
public virtual void Initialize(LocalizationResourceInitializationContext context)
{
_resource = context.Resource;
_virtualFileProvider = context.ServiceProvider.GetRequiredService<IVirtualFileProvider>();
}
@ -98,7 +100,7 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza
var dictionary = CreateDictionaryFromFile(file);
if (dictionaries.ContainsKey(dictionary.CultureName))
{
throw new AbpException($"{file.GetVirtualOrPhysicalPathOrNull()} dictionary has a culture name '{dictionary.CultureName}' which is already defined!");
throw new AbpException($"{file.GetVirtualOrPhysicalPathOrNull()} dictionary has a culture name '{dictionary.CultureName}' which is already defined! Localization resource: {_resource.ResourceName}");
}
dictionaries[dictionary.CultureName] = dictionary;

3
framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs

@ -8,6 +8,7 @@ using MailKit.Security;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using MimeKit;
using MimeKit.Utils;
using SmtpClient = MailKit.Net.Smtp.SmtpClient;
namespace Volo.Abp.MailKit;
@ -33,6 +34,8 @@ public class MailKitSmtpEmailSender : EmailSenderBase, IMailKitSmtpEmailSender
using (var client = await BuildClientAsync())
{
var message = MimeMessage.CreateFromMailMessage(mail);
message.MessageId = MimeUtils.GenerateMessageId();
message.Headers.Add(HeaderId.MessageId, message.MessageId);
await client.SendAsync(message);
await client.DisconnectAsync(true);
}

5
framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/ModuleExtensionConfigurationHelper.cs

@ -174,6 +174,11 @@ public static class ModuleExtensionConfigurationHelper
property.DefaultValue = propertyConfig.DefaultValue;
property.DefaultValueFactory = propertyConfig.DefaultValueFactory;
property.Lookup = propertyConfig.UI.Lookup;
property.Configuration.Clear();
foreach (var configuration in propertyConfig.Configuration)
{
property.Configuration[configuration.Key] = configuration.Value;
}
}
);
}

2
framework/src/Volo.Abp.Swashbuckle/Volo/Abp/Swashbuckle/AbpSwashbuckleDocumentFilter.cs

@ -17,7 +17,7 @@ public class AbpSwashbuckleDocumentFilter : IDocumentFilter
.Where(actionDescriptor => !string.IsNullOrEmpty(actionDescriptor.DisplayName) &&
ActionUrlPrefixes.Any(actionUrlPrefix => !actionDescriptor.DisplayName.Contains(actionUrlPrefix)))
.DistinctBy(actionDescriptor => actionDescriptor.AttributeRouteInfo?.Template)
.Select(actionDescriptor => actionDescriptor.AttributeRouteInfo?.Template.EnsureStartsWith('/'))
.Select(actionDescriptor => actionDescriptor.AttributeRouteInfo?.Template?.EnsureStartsWith('/').Replace("?", ""))
.Where(actionUrl => !string.IsNullOrEmpty(actionUrl))
.ToList();

2
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fr.json

@ -27,7 +27,7 @@
"Submit": "Envoyer",
"Back": "Précédent",
"PagerSearch": "Recherche",
"PagerNext": "prochain",
"PagerNext": "Suivant",
"PagerPrevious": "Précédent",
"PagerFirst": "Première",
"PagerLast": "Dernier",

2
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/is.json

@ -38,7 +38,7 @@
"NoDataAvailableInDatatable": "Engar upplýsingar fáanlegar",
"Total": "Samtals",
"Selected": "valið",
"PagerShowMenuEntries": "Sýna færslur _Aðalvalmyndar_",
"PagerShowMenuEntries": "Sýna færslur _MENU_",
"DatatableActionDropdownDefaultText": "Aðgerðir",
"ChangePassword": "Breyta lykilorði",
"PersonalInfo": "Prófílinn minn",

4
framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/tr.json

@ -29,6 +29,8 @@
"ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "Bu alan en fazla {0} uzunluğunda bir metin olmalıdır.",
"ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "Bu alan en az {1}, en fazla {0} uzunluğunda bir metin olmalıdır.",
"ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "Bu alan geçerli bir http, https, ya da ftp adresi olmalıdır.",
"ThisFieldIsInvalid.": "Bu alan geçerli değil."
"ThisFieldIsInvalid.": "Bu alan geçerli değil.",
"ThisFieldMustBeGreaterThanOrEqual{0}": "Bu alan {0}'dan büyük veya eşit olmalıdır.",
"ThisFieldMustBeLessOrEqual{0}": "Bu alan {0}'dan küçük veya eşit olmalıdır."
}
}

13
framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs

@ -1,10 +1,12 @@
using System.Linq;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using NSubstitute;
using System.Threading.Tasks;
using Shouldly;
using Volo.Abp.Auditing;
using Xunit;
@ -98,4 +100,13 @@ public class AuditTestController_Tests : AspNetCoreMvcTestBase
await _auditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x => x.Exceptions.Any()));
}
[Fact]
public async Task Should_DisableLogActionInfo()
{
_options.IsEnabledForGetRequests = true;
_options.DisableLogActionInfo = true;
await GetResponseAsync("/api/audit-test/");
await _auditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x => x.Actions.IsNullOrEmpty()));
}
}

13
framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestPage_Tests.cs

@ -1,4 +1,5 @@
using System.Linq;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
@ -97,4 +98,14 @@ public class AuditTestPage_Tests : AspNetCoreMvcTestBase
await _auditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x => x.Exceptions.Any()));
}
[Fact]
public async Task Should_DisableLogActionInfo()
{
_options.IsEnabledForGetRequests = true;
_options.DisableLogActionInfo = true;
await GetResponseAsync("/Auditing/AuditTestPage");
await _auditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x => x.Actions.IsNullOrEmpty()));
}
}

63
framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs

@ -16,7 +16,7 @@ namespace Volo.Abp.Auditing;
public class Auditing_Tests : AbpAuditingTestBase
{
private IAuditingStore _auditingStore;
protected IAuditingStore AuditingStore;
private IAuditingManager _auditingManager;
private IUnitOfWorkManager _unitOfWorkManager;
@ -28,8 +28,8 @@ public class Auditing_Tests : AbpAuditingTestBase
protected override void AfterAddApplication(IServiceCollection services)
{
_auditingStore = Substitute.For<IAuditingStore>();
services.Replace(ServiceDescriptor.Singleton(_auditingStore));
AuditingStore = Substitute.For<IAuditingStore>();
services.Replace(ServiceDescriptor.Singleton(AuditingStore));
}
[Fact]
@ -43,7 +43,7 @@ public class Auditing_Tests : AbpAuditingTestBase
await scope.SaveAsync();
}
await _auditingStore.Received().SaveAsync(Arg.Any<AuditLogInfo>());
await AuditingStore.Received().SaveAsync(Arg.Any<AuditLogInfo>());
}
[Fact]
@ -53,9 +53,9 @@ public class Auditing_Tests : AbpAuditingTestBase
await myAuditedObject1.DoItAsync(new InputObject { Value1 = "forty-two", Value2 = 42 });
await _auditingStore.Received().SaveAsync(Arg.Any<AuditLogInfo>());
await AuditingStore.Received().SaveAsync(Arg.Any<AuditLogInfo>());
}
[Fact]
public async Task Should_Not_Write_AuditLog_For_Classes_With_IntegrationService_Attribute()
{
@ -63,7 +63,7 @@ public class Auditing_Tests : AbpAuditingTestBase
await myAuditedObject1.DoItAsync(new InputObject { Value1 = "forty-two", Value2 = 42 });
await _auditingStore.DidNotReceive().SaveAsync(Arg.Any<AuditLogInfo>());
await AuditingStore.DidNotReceive().SaveAsync(Arg.Any<AuditLogInfo>());
}
public interface IMyAuditedObject : ITransientDependency, IAuditingEnabled
@ -82,7 +82,7 @@ public class Auditing_Tests : AbpAuditingTestBase
});
}
}
/* Integration services should not be audited by default */
[IntegrationService]
public class MyNotAuditedIntegrationService1 : IMyAuditedObject
@ -122,7 +122,7 @@ public class Auditing_Tests : AbpAuditingTestBase
}
#pragma warning disable 4014
_auditingStore.Received().SaveAsync(Arg.Any<AuditLogInfo>());
AuditingStore.Received().SaveAsync(Arg.Any<AuditLogInfo>());
#pragma warning restore 4014
}
@ -137,7 +137,7 @@ public class Auditing_Tests : AbpAuditingTestBase
}
#pragma warning disable 4014
_auditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x =>
AuditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x =>
x.EntityChanges.Count == 1 &&
!(x.EntityChanges[0].PropertyChanges.Any(p =>
p.PropertyName == nameof(AppEntityWithDisableAuditingAndPropertyHasAudited.Name2)))));
@ -155,7 +155,7 @@ public class Auditing_Tests : AbpAuditingTestBase
}
#pragma warning disable 4014
_auditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(a => !a.EntityChanges.Any()));
AuditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(a => !a.EntityChanges.Any()));
#pragma warning restore 4014
}
@ -170,7 +170,7 @@ public class Auditing_Tests : AbpAuditingTestBase
}
#pragma warning disable 4014
_auditingStore.Received().SaveAsync(Arg.Any<AuditLogInfo>());
AuditingStore.Received().SaveAsync(Arg.Any<AuditLogInfo>());
#pragma warning restore 4014
}
@ -185,7 +185,7 @@ public class Auditing_Tests : AbpAuditingTestBase
}
#pragma warning disable 4014
_auditingStore.Received().SaveAsync(Arg.Any<AuditLogInfo>());
AuditingStore.Received().SaveAsync(Arg.Any<AuditLogInfo>());
#pragma warning restore 4014
}
@ -200,7 +200,7 @@ public class Auditing_Tests : AbpAuditingTestBase
}
#pragma warning disable 4014
_auditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x =>
AuditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x =>
x.EntityChanges.Count == 1 && x.EntityChanges[0].PropertyChanges.Count == 2 &&
x.EntityChanges[0].PropertyChanges[0].PropertyName == nameof(AppEntityWithDisableAuditingAndPropertyHasAudited.Name) &&
x.EntityChanges[0].PropertyChanges[1].PropertyName == nameof(AppEntityWithDisableAuditingAndPropertyHasAudited.Name3)));
@ -230,7 +230,7 @@ public class Auditing_Tests : AbpAuditingTestBase
}
#pragma warning disable 4014
_auditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x =>
AuditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x =>
x.EntityChanges.Count == 1 && x.EntityChanges[0].PropertyChanges.Count == 1 &&
x.EntityChanges[0].PropertyChanges[0].PropertyName == nameof(AppEntityWithDisableAuditingAndPropertyHasAudited.Name)));
#pragma warning restore 4014
@ -245,7 +245,7 @@ public class Auditing_Tests : AbpAuditingTestBase
}
#pragma warning disable 4014
_auditingStore.Received().SaveAsync(Arg.Any<AuditLogInfo>());
AuditingStore.Received().SaveAsync(Arg.Any<AuditLogInfo>());
#pragma warning restore 4014
}
@ -274,7 +274,7 @@ public class Auditing_Tests : AbpAuditingTestBase
}
#pragma warning disable 4014
_auditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x => x.EntityChanges.Count == 1
AuditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x => x.EntityChanges.Count == 1
&& x.EntityChanges[0].PropertyChanges.Any(y =>
!GetBaseAuditPropertyNames().Contains(y.PropertyName))));
#pragma warning restore 4014
@ -300,7 +300,7 @@ public class Auditing_Tests : AbpAuditingTestBase
}
#pragma warning disable 4014
_auditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x => x.EntityChanges.Count == 1
AuditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x => x.EntityChanges.Count == 1
&& x.EntityChanges[0].PropertyChanges
.Where(y => y.PropertyName != nameof(AppEntityWithAuditedAndHasCustomAuditingProperties
.ExtraProperties))
@ -333,7 +333,7 @@ public class Auditing_Tests : AbpAuditingTestBase
}
#pragma warning disable 4014
_auditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x => x.EntityChanges.Count == 1
AuditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x => x.EntityChanges.Count == 1
&& x.EntityChanges[0].PropertyChanges.Count == 1
&& x.EntityChanges[0].PropertyChanges[0].PropertyName == nameof(AppEntityWithAudited.Name)));
#pragma warning restore 4014
@ -354,10 +354,33 @@ public class Auditing_Tests : AbpAuditingTestBase
}
#pragma warning disable 4014
_auditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x => x.EntityChanges.Count == 1 &&
AuditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x => x.EntityChanges.Count == 1 &&
x.EntityChanges[0].ChangeType == EntityChangeType.Deleted &&
x.EntityChanges[0].PropertyChanges.Count == 0));
#pragma warning restore 4014
}
}
public class Auditing_DisableLogActionInfo_Tests : Auditing_Tests
{
protected override void AfterAddApplication(IServiceCollection services)
{
services.Configure<AbpAuditingOptions>(options =>
{
options.DisableLogActionInfo = true;
});
base.AfterAddApplication(services);
}
[Fact]
public async Task Should_DisableLogActionInfo()
{
var myAuditedObject1 = GetRequiredService<MyAuditedObject1>();
await myAuditedObject1.DoItAsync(new InputObject { Value1 = "forty-two", Value2 = 42 });
await AuditingStore.Received().SaveAsync(Arg.Is<AuditLogInfo>(x => x.Actions.IsNullOrEmpty()));
}
}

2
framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/tr.json

@ -1,6 +1,6 @@
{
"culture": "tr",
"texts": {
"Volo.Abp.Http.DynamicProxying:10001": "Verilerle ilgili iş istisnası: {0}"
}
}

1
framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/tr.json

@ -1,6 +1,5 @@
{
"culture": "tr",
"texts": {
}
}

24
modules/account/Volo.Abp.Account.abpmdl.json

@ -6,28 +6,32 @@
}
},
"packages": {
"Volo.Abp.Account.Web": {
"path": "src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.abppkg.json",
"Volo.Abp.Account.Web.OpenIddict": {
"path": "src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.abppkg.json",
"folder": "src"
},
"Volo.Abp.Account.Web.IdentityServer": {
"path": "src/Volo.Abp.Account.Web.IdentityServer/Volo.Abp.Account.Web.IdentityServer.abppkg.json",
"folder": "src"
},
"Volo.Abp.Account.Application": {
"path": "src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.abppkg.json",
"Volo.Abp.Account.Web": {
"path": "src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.abppkg.json",
"folder": "src"
},
"Volo.Abp.Account.Application.Contracts": {
"path": "src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.abppkg.json",
"Volo.Abp.Account.HttpApi.Client": {
"path": "src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.abppkg.json",
"folder": "src"
},
"Volo.Abp.Account.HttpApi": {
"path": "src/Volo.Abp.Account.HttpApi/Volo.Abp.Account.HttpApi.abppkg.json",
"folder": "src"
},
"Volo.Abp.Account.HttpApi.Client": {
"path": "src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.abppkg.json",
"Volo.Abp.Account.Application": {
"path": "src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.abppkg.json",
"folder": "src"
},
"Volo.Abp.Account.Application.Contracts": {
"path": "src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.abppkg.json",
"folder": "src"
},
"Volo.Abp.Account.Application.Tests": {
@ -37,10 +41,6 @@
"Volo.Abp.Account.Blazor": {
"path": "src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.abppkg.json",
"folder": "src"
},
"Volo.Abp.Account.Web.OpenIddict": {
"path": "src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.abppkg.json",
"folder": "src"
}
}
}

12
modules/account/src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.abppkg.analyze.json

@ -1,11 +1,19 @@
{
"name": "Volo.Abp.Account.Application.Contracts",
"hash": "63eee204db33a361b137b2cff508e53f",
"hash": "69e95bc0327222d63521d4a5eebc0f08",
"contents": [
{
"namespace": "Volo.Abp.Account",
"dependsOnModules": [
{
"declaringAssemblyName": "Volo.Abp.Identity.Application.Contracts",
"namespace": "Volo.Abp.Identity",
"name": "AbpIdentityApplicationContractsModule"
}
],
"contentType": "abpModule",
"name": "AbpAccountApplicationContractsModule"
"name": "AbpAccountApplicationContractsModule",
"summary": null
}
]
}

235
modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.abppkg.analyze.json

@ -1,29 +1,248 @@
{
"name": "Volo.Abp.Account.Application",
"hash": "9607ce81498fab564ea4a3681c15f72d",
"hash": "c95864b3ff1b05d0dd660125cccea539",
"contents": [
{
"namespace": "Volo.Abp.Account",
"dependsOnModules": [
{
"declaringAssemblyName": "Volo.Abp.Account.Application.Contracts",
"namespace": "Volo.Abp.Account",
"name": "AbpAccountApplicationContractsModule"
},
{
"declaringAssemblyName": "Volo.Abp.Identity.Application",
"namespace": "Volo.Abp.Identity",
"name": "AbpIdentityApplicationModule"
},
{
"declaringAssemblyName": "Volo.Abp.UI.Navigation",
"namespace": "Volo.Abp.UI.Navigation",
"name": "AbpUiNavigationModule"
},
{
"declaringAssemblyName": "Volo.Abp.Emailing",
"namespace": "Volo.Abp.Emailing",
"name": "AbpEmailingModule"
}
],
"contentType": "abpModule",
"name": "AbpAccountApplicationModule"
"name": "AbpAccountApplicationModule",
"summary": null
},
{
"namespace": "Volo.Abp.Account",
"summary": null,
"baseClass": {
"name": "ApplicationService",
"namespace": "Volo.Abp.Application.Services",
"declaringAssemblyName": "Volo.Abp.Ddd.Application"
},
"implementingInterfaces": [
"Volo.Abp.Account.IAccountAppService"
{
"name": "IApplicationService",
"namespace": "Volo.Abp.Application.Services",
"declaringAssemblyName": "Volo.Abp.Ddd.Application.Contracts"
},
{
"name": "IRemoteService",
"namespace": "Volo.Abp",
"declaringAssemblyName": "Volo.Abp.Core"
},
{
"name": "IAvoidDuplicateCrossCuttingConcerns",
"namespace": "Volo.Abp.Aspects",
"declaringAssemblyName": "Volo.Abp.Core"
},
{
"name": "IValidationEnabled",
"namespace": "Volo.Abp.Validation",
"declaringAssemblyName": "Volo.Abp.Validation"
},
{
"name": "IUnitOfWorkEnabled",
"namespace": "Volo.Abp.Uow",
"declaringAssemblyName": "Volo.Abp.Uow"
},
{
"name": "IAuditingEnabled",
"namespace": "Volo.Abp.Auditing",
"declaringAssemblyName": "Volo.Abp.Auditing.Contracts"
},
{
"name": "IGlobalFeatureCheckingEnabled",
"namespace": "Volo.Abp.GlobalFeatures",
"declaringAssemblyName": "Volo.Abp.GlobalFeatures"
},
{
"name": "ITransientDependency",
"namespace": "Volo.Abp.DependencyInjection",
"declaringAssemblyName": "Volo.Abp.Core"
},
{
"name": "IAccountAppService",
"namespace": "Volo.Abp.Account",
"declaringAssemblyName": "Volo.Abp.Account.Application.Contracts"
}
],
"methods": [
{
"returnType": "IdentityUserDto",
"isAsync": true,
"name": "RegisterAsync",
"summary": null,
"parameters": [
{
"type": "RegisterDto",
"name": "input",
"isOptional": false
}
]
},
{
"returnType": "Void",
"isAsync": true,
"name": "SendPasswordResetCodeAsync",
"summary": null,
"parameters": [
{
"type": "SendPasswordResetCodeDto",
"name": "input",
"isOptional": false
}
]
},
{
"returnType": "Void",
"isAsync": true,
"name": "ResetPasswordAsync",
"summary": null,
"parameters": [
{
"type": "ResetPasswordDto",
"name": "input",
"isOptional": false
}
]
}
],
"contentType": "applicationService",
"name": "AccountAppService"
"name": "AccountAppService",
"summary": null
},
{
"namespace": "Volo.Abp.Account",
"summary": null,
"baseClass": {
"name": "IdentityAppServiceBase",
"namespace": "Volo.Abp.Identity",
"declaringAssemblyName": "Volo.Abp.Identity.Application"
},
"implementingInterfaces": [
"Volo.Abp.Account.IProfileAppService"
{
"name": "IApplicationService",
"namespace": "Volo.Abp.Application.Services",
"declaringAssemblyName": "Volo.Abp.Ddd.Application.Contracts"
},
{
"name": "IRemoteService",
"namespace": "Volo.Abp",
"declaringAssemblyName": "Volo.Abp.Core"
},
{
"name": "IAvoidDuplicateCrossCuttingConcerns",
"namespace": "Volo.Abp.Aspects",
"declaringAssemblyName": "Volo.Abp.Core"
},
{
"name": "IValidationEnabled",
"namespace": "Volo.Abp.Validation",
"declaringAssemblyName": "Volo.Abp.Validation"
},
{
"name": "IUnitOfWorkEnabled",
"namespace": "Volo.Abp.Uow",
"declaringAssemblyName": "Volo.Abp.Uow"
},
{
"name": "IAuditingEnabled",
"namespace": "Volo.Abp.Auditing",
"declaringAssemblyName": "Volo.Abp.Auditing.Contracts"
},
{
"name": "IGlobalFeatureCheckingEnabled",
"namespace": "Volo.Abp.GlobalFeatures",
"declaringAssemblyName": "Volo.Abp.GlobalFeatures"
},
{
"name": "ITransientDependency",
"namespace": "Volo.Abp.DependencyInjection",
"declaringAssemblyName": "Volo.Abp.Core"
},
{
"name": "IProfileAppService",
"namespace": "Volo.Abp.Account",
"declaringAssemblyName": "Volo.Abp.Account.Application.Contracts"
}
],
"methods": [
{
"returnType": "ProfileDto",
"isAsync": true,
"name": "GetAsync",
"summary": null,
"parameters": []
},
{
"returnType": "ProfileDto",
"isAsync": true,
"name": "UpdateAsync",
"summary": null,
"parameters": [
{
"type": "UpdateProfileDto",
"name": "input",
"isOptional": false
}
]
},
{
"returnType": "Void",
"isAsync": true,
"name": "ChangePasswordAsync",
"summary": null,
"parameters": [
{
"type": "ChangePasswordInput",
"name": "input",
"isOptional": false
}
]
}
],
"contentType": "applicationService",
"name": "ProfileAppService"
"name": "ProfileAppService",
"summary": null
},
{
"defaultValue": "true",
"displayName": "Is self-registration enabled",
"description": "Whether a user can register the account by him or herself.",
"isVisibleToClient": true,
"isInherited": true,
"isEncrypted": false,
"contentType": "setting",
"name": "Abp.Account.IsSelfRegistrationEnabled",
"summary": null
},
{
"defaultValue": "true",
"displayName": "Authenticate with a local account",
"description": "Indicates if the server will allow users to authenticate with a local account.",
"isVisibleToClient": true,
"isInherited": true,
"isEncrypted": false,
"contentType": "setting",
"name": "Abp.Account.EnableLocalLogin",
"summary": null
}
]
}

54
modules/account/src/Volo.Abp.Account.Blazor/Pages/Account/AccountManage.razor

@ -1,8 +1,11 @@
@page "/account/manage-profile"
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Forms
@using Volo.Abp.Account.Localization
@using Volo.Abp.AspNetCore.Components.Web
@using Volo.Abp.BlazoriseUI.Components.ObjectExtending
@using Volo.Abp.ObjectExtending
@using Volo.Abp.Data
@inject AbpBlazorMessageLocalizerHelper<AccountResource> LH
@inherits AbpAccountComponentBase
@ -20,15 +23,15 @@
<EditForm id="ChangePasswordForm" Model="@ChangePasswordModel" OnValidSubmit="ChangePasswordAsync">
<Field>
<FieldLabel>@L["DisplayName:CurrentPassword"]</FieldLabel>
<TextEdit Role="@TextRole.Password" @bind-Text="@ChangePasswordModel.CurrentPassword"/>
<TextEdit Role="@TextRole.Password" @bind-Text="@ChangePasswordModel.CurrentPassword" />
</Field>
<Field>
<FieldLabel>@L["DisplayName:NewPassword"]</FieldLabel>
<TextEdit Role="@TextRole.Password" @bind-Text="@ChangePasswordModel.NewPassword"/>
<TextEdit Role="@TextRole.Password" @bind-Text="@ChangePasswordModel.NewPassword" />
</Field>
<Field>
<FieldLabel>@L["DisplayName:NewPasswordConfirm"]</FieldLabel>
<TextEdit Role="@TextRole.Password" @bind-Text="@ChangePasswordModel.NewPasswordConfirm"/>
<TextEdit Role="@TextRole.Password" @bind-Text="@ChangePasswordModel.NewPasswordConfirm" />
</Field>
<Field>
<SubmitButton Form="ChangePasswordForm" Clicked="@ChangePasswordAsync" />
@ -42,27 +45,58 @@
<EditForm id="UpdatePersonalInfoForm" Model="@PersonalInfoModel" OnValidSubmit="UpdatePersonalInfoAsync">
<Field>
<FieldLabel>@L["DisplayName:UserName"]</FieldLabel>
<TextEdit @bind-Text="@PersonalInfoModel.UserName"/>
<TextEdit @bind-Text="@PersonalInfoModel.UserName" />
</Field>
<Fields>
<Field ColumnSize="ColumnSize.Is6">
<FieldLabel>@L["DisplayName:Name"]</FieldLabel>
<TextEdit @bind-Text="@PersonalInfoModel.Name"/>
<TextEdit @bind-Text="@PersonalInfoModel.Name" />
</Field>
<Field ColumnSize="ColumnSize.Is6">
<FieldLabel>@L["DisplayName:Surname"]</FieldLabel>
<TextEdit @bind-Text="@PersonalInfoModel.Surname"/>
<TextEdit @bind-Text="@PersonalInfoModel.Surname" />
</Field>
</Fields>
<Field>
<FieldLabel>@L["DisplayName:Email"]</FieldLabel>
<TextEdit @bind-Text="@PersonalInfoModel.Email"/>
<TextEdit @bind-Text="@PersonalInfoModel.Email" />
</Field>
<Field>
<FieldLabel>@L["DisplayName:PhoneNumber"]</FieldLabel>
<TextEdit @bind-Text="@PersonalInfoModel.PhoneNumber"/>
<TextEdit @bind-Text="@PersonalInfoModel.PhoneNumber" />
</Field>
<ExtensionProperties TEntityType="PersonalInfoModel" TResourceType="AccountResource" Entity="@PersonalInfoModel" LH="@LH"/>
// TODO: Move this logic to 'ExtensionProperties' component.
@foreach (var propertyInfo in ObjectExtensionManager.Instance.GetProperties<PersonalInfoModel>())
{
var isAllowed = propertyInfo.Configuration.GetOrDefault(IdentityModuleExtensionConsts.ConfigurationNames.AllowUserToEdit);
if (isAllowed == null || !isAllowed.Equals(true))
{
continue;
}
if (!propertyInfo.Name.EndsWith("_Text"))
{
if (propertyInfo.Type.IsEnum)
{
<SelectExtensionProperty PropertyInfo="@propertyInfo" Entity="@PersonalInfoModel" TEntity="PersonalInfoModel" TResourceType="AccountResource" LH="@LH" />
}
else if (!propertyInfo.Lookup.Url.IsNullOrEmpty())
{
<LookupExtensionProperty PropertyInfo="@propertyInfo" Entity="@PersonalInfoModel" TEntity="PersonalInfoModel" TResourceType="AccountResource" LH="@LH" />
}
else
{
var inputType = propertyInfo.GetInputType();
__builder.OpenComponent(0, inputType.MakeGenericType(new[] { typeof(PersonalInfoModel), typeof(AccountResource) }));
__builder.AddAttribute(1, "PropertyInfo", propertyInfo);
__builder.AddAttribute(2, "Entity", PersonalInfoModel);
__builder.AddAttribute(3, "LH", LH);
__builder.CloseComponent();
}
}
}
<Field>
<SubmitButton Form="UpdatePersonalInfoForm" Clicked="@UpdatePersonalInfoAsync" />
</Field>

17
modules/account/src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.abppkg.analyze.json

@ -1,11 +1,24 @@
{
"name": "Volo.Abp.Account.HttpApi.Client",
"hash": "62165afd5965b8041a9ac1f1356ad2e8",
"hash": "f8b3c1d3f7ef4b4070b10d1adbf07697",
"contents": [
{
"namespace": "Volo.Abp.Account",
"dependsOnModules": [
{
"declaringAssemblyName": "Volo.Abp.Account.Application.Contracts",
"namespace": "Volo.Abp.Account",
"name": "AbpAccountApplicationContractsModule"
},
{
"declaringAssemblyName": "Volo.Abp.Http.Client",
"namespace": "Volo.Abp.Http.Client",
"name": "AbpHttpClientModule"
}
],
"contentType": "abpModule",
"name": "AbpAccountHttpApiClientModule"
"name": "AbpAccountHttpApiClientModule",
"summary": null
}
]
}

22
modules/account/src/Volo.Abp.Account.HttpApi/Volo.Abp.Account.HttpApi.abppkg.analyze.json

@ -1,11 +1,29 @@
{
"name": "Volo.Abp.Account.HttpApi",
"hash": "c789b459a83b26349ca6f0fcab82a244",
"hash": "4bbe4cd74f3e0b75d32217e6be0abec8",
"contents": [
{
"namespace": "Volo.Abp.Account",
"dependsOnModules": [
{
"declaringAssemblyName": "Volo.Abp.Account.Application.Contracts",
"namespace": "Volo.Abp.Account",
"name": "AbpAccountApplicationContractsModule"
},
{
"declaringAssemblyName": "Volo.Abp.Identity.HttpApi",
"namespace": "Volo.Abp.Identity",
"name": "AbpIdentityHttpApiModule"
},
{
"declaringAssemblyName": "Volo.Abp.AspNetCore.Mvc",
"namespace": "Volo.Abp.AspNetCore.Mvc",
"name": "AbpAspNetCoreMvcModule"
}
],
"contentType": "abpModule",
"name": "AbpAccountHttpApiModule"
"name": "AbpAccountHttpApiModule",
"summary": null
}
]
}

3
modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLoginModel.cs

@ -54,7 +54,8 @@ public class IdentityServerSupportedLoginModel : LoginModel
if (context != null)
{
ShowCancelButton = true;
// TODO: Find a proper cancel way.
// ShowCancelButton = true;
LoginInput.UserNameOrEmailAddress = context.LoginHint;

24
modules/account/src/Volo.Abp.Account.Web.IdentityServer/Volo.Abp.Account.Web.IdentityServer.abppkg.analyze.json

@ -0,0 +1,24 @@
{
"name": "Volo.Abp.Account.Web.IdentityServer",
"hash": "03edebc655e0b3deed4a6f61b2975c8e",
"contents": [
{
"namespace": "Volo.Abp.Account.Web",
"dependsOnModules": [
{
"declaringAssemblyName": "Volo.Abp.Account.Web",
"namespace": "Volo.Abp.Account.Web",
"name": "AbpAccountWebModule"
},
{
"declaringAssemblyName": "Volo.Abp.IdentityServer.Domain",
"namespace": "Volo.Abp.IdentityServer",
"name": "AbpIdentityServerDomainModule"
}
],
"contentType": "abpModule",
"name": "AbpAccountWebIdentityServerModule",
"summary": null
}
]
}

3
modules/account/src/Volo.Abp.Account.Web.OpenIddict/Pages/Account/OpenIddictSupportedLoginModel.cs

@ -34,7 +34,8 @@ public class OpenIddictSupportedLoginModel : LoginModel
var request = await OpenIddictRequestHelper.GetFromReturnUrlAsync(ReturnUrl);
if (request?.ClientId != null)
{
ShowCancelButton = true;
// TODO: Find a proper cancel way.
// ShowCancelButton = true;
LoginInput.UserNameOrEmailAddress = request.LoginHint;

24
modules/account/src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.abppkg.analyze.json

@ -0,0 +1,24 @@
{
"name": "Volo.Abp.Account.Web.OpenIddict",
"hash": "cb0116e7d5287266425d337b9e29d5cf",
"contents": [
{
"namespace": "Volo.Abp.Account.Web",
"dependsOnModules": [
{
"declaringAssemblyName": "Volo.Abp.Account.Web",
"namespace": "Volo.Abp.Account.Web",
"name": "AbpAccountWebModule"
},
{
"declaringAssemblyName": "Volo.Abp.OpenIddict.AspNetCore",
"namespace": "Volo.Abp.OpenIddict",
"name": "AbpOpenIddictAspNetCoreModule"
}
],
"contentType": "abpModule",
"name": "AbpAccountWebOpenIddictModule",
"summary": null
}
]
}

52
modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/Default.cshtml

@ -28,28 +28,36 @@
StringComparison.OrdinalIgnoreCase);
}
<h4>@L["PersonalSettings"]</h4><hr/>
<h4>@L["PersonalSettings"]</h4>
<hr />
<form method="post" id="PersonalSettingsForm">
<input asp-for="ConcurrencyStamp"/>
<input asp-for="ConcurrencyStamp" />
<abp-input asp-for="UserName" readonly="!isUserNameUpdateEnabled"/>
<abp-input asp-for="UserName" readonly="!isUserNameUpdateEnabled" />
<abp-row>
<abp-column size-md="_6">
<abp-input asp-for="Name"/>
<abp-input asp-for="Name" />
</abp-column>
<abp-column size-md="_6">
<abp-input asp-for="Surname"/>
<abp-input asp-for="Surname" />
</abp-column>
</abp-row>
<abp-input asp-for="Email" readonly="!isEmailUpdateEnabled"/>
<abp-input asp-for="Email" readonly="!isEmailUpdateEnabled" />
<abp-input asp-for="PhoneNumber"/>
<abp-input asp-for="PhoneNumber" />
@foreach (var propertyInfo in ObjectExtensionManager.Instance.GetProperties<AccountProfilePersonalInfoManagementGroupViewComponent.PersonalInfoModel>())
{
var isAllowed = propertyInfo.Configuration.GetOrDefault(IdentityModuleExtensionConsts.ConfigurationNames.AllowUserToEdit);
if (isAllowed == null || !isAllowed.Equals(true))
{
continue;
}
if (!propertyInfo.Name.EndsWith("_Text"))
{
if (propertyInfo.Type.IsEnum || !propertyInfo.Lookup.Url.IsNullOrEmpty())
@ -59,28 +67,28 @@
Model.ExtraProperties.ToEnum(propertyInfo.Name, propertyInfo.Type);
}
<abp-select asp-for="ExtraProperties[propertyInfo.Name]"
name="ExtraProperties.@propertyInfo.Name"
label="@propertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)"
autocomplete-api-url="@propertyInfo.Lookup.Url"
autocomplete-selected-item-name="@Model.GetProperty(propertyInfo.Name + "_Text")"
autocomplete-selected-item-value="@Model.GetProperty(propertyInfo.Name)"
autocomplete-filter-param-name="@propertyInfo.Lookup.FilterParamName"
autocomplete-items-property-name="@propertyInfo.Lookup.ResultListPropertyName"
autocomplete-display-property-name="@propertyInfo.Lookup.DisplayPropertyName"
autocomplete-value-property-name="@propertyInfo.Lookup.ValuePropertyName">
name="ExtraProperties.@propertyInfo.Name"
label="@propertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)"
autocomplete-api-url="@propertyInfo.Lookup.Url"
autocomplete-selected-item-name="@Model.GetProperty(propertyInfo.Name + "_Text")"
autocomplete-selected-item-value="@Model.GetProperty(propertyInfo.Name)"
autocomplete-filter-param-name="@propertyInfo.Lookup.FilterParamName"
autocomplete-items-property-name="@propertyInfo.Lookup.ResultListPropertyName"
autocomplete-display-property-name="@propertyInfo.Lookup.DisplayPropertyName"
autocomplete-value-property-name="@propertyInfo.Lookup.ValuePropertyName">
</abp-select>
}
else
{
<abp-input type="@propertyInfo.GetInputType()"
asp-for="ExtraProperties[propertyInfo.Name]"
name="ExtraProperties.@propertyInfo.Name"
label="@propertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)"
asp-format="@propertyInfo.GetInputFormatOrNull()"
value="@propertyInfo.GetInputValueOrNull(Model.GetProperty(propertyInfo.Name))"/>
asp-for="ExtraProperties[propertyInfo.Name]"
name="ExtraProperties.@propertyInfo.Name"
label="@propertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)"
asp-format="@propertyInfo.GetInputFormatOrNull()"
value="@propertyInfo.GetInputValueOrNull(Model.GetProperty(propertyInfo.Name))" />
}
}
}
<abp-button type="submit" button-type="Primary" text="@L["Submit"].Value"/>
<abp-button type="submit" button-type="Primary" text="@L["Submit"].Value" />
</form>

32
modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.abppkg.analyze.json

@ -1,11 +1,39 @@
{
"name": "Volo.Abp.Account.Web",
"hash": "56ee8c43448399a621216b5e54008a54",
"hash": "9a19d1170e6ea5e601e7f61686d245de",
"contents": [
{
"namespace": "Volo.Abp.Account.Web",
"dependsOnModules": [
{
"declaringAssemblyName": "Volo.Abp.Account.Application.Contracts",
"namespace": "Volo.Abp.Account",
"name": "AbpAccountApplicationContractsModule"
},
{
"declaringAssemblyName": "Volo.Abp.Identity.AspNetCore",
"namespace": "Volo.Abp.Identity.AspNetCore",
"name": "AbpIdentityAspNetCoreModule"
},
{
"declaringAssemblyName": "Volo.Abp.AutoMapper",
"namespace": "Volo.Abp.AutoMapper",
"name": "AbpAutoMapperModule"
},
{
"declaringAssemblyName": "Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared",
"namespace": "Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared",
"name": "AbpAspNetCoreMvcUiThemeSharedModule"
},
{
"declaringAssemblyName": "Volo.Abp.ExceptionHandling",
"namespace": "Volo.Abp.ExceptionHandling",
"name": "AbpExceptionHandlingModule"
}
],
"contentType": "abpModule",
"name": "AbpAccountWebModule"
"name": "AbpAccountWebModule",
"summary": null
}
]
}

8
modules/audit-logging/Volo.Abp.AuditLogging.abpmdl.json

@ -6,14 +6,14 @@
}
},
"packages": {
"Volo.Abp.AuditLogging.Domain.Shared": {
"path": "src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.abppkg.json",
"folder": "src"
},
"Volo.Abp.AuditLogging.Domain": {
"path": "src/Volo.Abp.AuditLogging.Domain/Volo.Abp.AuditLogging.Domain.abppkg.json",
"folder": "src"
},
"Volo.Abp.AuditLogging.Domain.Shared": {
"path": "src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.abppkg.json",
"folder": "src"
},
"Volo.Abp.AuditLogging.EntityFrameworkCore": {
"path": "src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.abppkg.json",
"folder": "src"

12
modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.abppkg.analyze.json

@ -1,11 +1,19 @@
{
"name": "Volo.Abp.AuditLogging.Domain.Shared",
"hash": "91305b5b9fa1cd0a8a9adc6a0e54877b",
"hash": "e6804aee981e73c0bf60780e69c001ac",
"contents": [
{
"namespace": "Volo.Abp.AuditLogging",
"dependsOnModules": [
{
"declaringAssemblyName": "Volo.Abp.Validation",
"namespace": "Volo.Abp.Validation",
"name": "AbpValidationModule"
}
],
"contentType": "abpModule",
"name": "AbpAuditLoggingDomainSharedModule"
"name": "AbpAuditLoggingDomainSharedModule",
"summary": null
}
]
}

130
modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo.Abp.AuditLogging.Domain.abppkg.analyze.json

@ -1,41 +1,133 @@
{
"name": "Volo.Abp.AuditLogging.Domain",
"hash": "df19d27b7da103de2da1826c6ba8e161",
"hash": "9acd8ed269385ff15150449590c209fe",
"contents": [
{
"namespace": "Volo.Abp.AuditLogging",
"dependsOnModules": [
{
"declaringAssemblyName": "Volo.Abp.Auditing",
"namespace": "Volo.Abp.Auditing",
"name": "AbpAuditingModule"
},
{
"declaringAssemblyName": "Volo.Abp.Ddd.Domain",
"namespace": "Volo.Abp.Domain",
"name": "AbpDddDomainModule"
},
{
"declaringAssemblyName": "Volo.Abp.AuditLogging.Domain.Shared",
"namespace": "Volo.Abp.AuditLogging",
"name": "AbpAuditLoggingDomainSharedModule"
},
{
"declaringAssemblyName": "Volo.Abp.ExceptionHandling",
"namespace": "Volo.Abp.ExceptionHandling",
"name": "AbpExceptionHandlingModule"
},
{
"declaringAssemblyName": "Volo.Abp.Json",
"namespace": "Volo.Abp.Json",
"name": "AbpJsonModule"
}
],
"contentType": "abpModule",
"name": "AbpAuditLoggingDomainModule"
"name": "AbpAuditLoggingDomainModule",
"summary": null
},
{
"baseClass": {
"name": "AggregateRoot<Guid>",
"namespace": "Volo.Abp.Domain.Entities",
"declaringAssemblyName": "Volo.Abp.Ddd.Domain"
},
"implementingInterfaces": [
{
"name": "IEntity",
"namespace": "Volo.Abp.Domain.Entities",
"declaringAssemblyName": "Volo.Abp.Ddd.Domain"
},
{
"name": "IEntity<Guid>",
"namespace": "Volo.Abp.Domain.Entities",
"declaringAssemblyName": "Volo.Abp.Ddd.Domain"
},
{
"name": "IAggregateRoot<Guid>",
"namespace": "Volo.Abp.Domain.Entities",
"declaringAssemblyName": "Volo.Abp.Ddd.Domain"
},
{
"name": "IAggregateRoot",
"namespace": "Volo.Abp.Domain.Entities",
"declaringAssemblyName": "Volo.Abp.Ddd.Domain"
},
{
"name": "IGeneratesDomainEvents",
"namespace": "Volo.Abp.Domain.Entities",
"declaringAssemblyName": "Volo.Abp.Ddd.Domain"
},
{
"name": "IHasExtraProperties",
"namespace": "Volo.Abp.Data",
"declaringAssemblyName": "Volo.Abp.ObjectExtending"
},
{
"name": "IHasConcurrencyStamp",
"namespace": "Volo.Abp.Domain.Entities",
"declaringAssemblyName": "Volo.Abp.Data"
},
{
"name": "IMultiTenant",
"namespace": "Volo.Abp.MultiTenancy",
"declaringAssemblyName": "Volo.Abp.MultiTenancy"
}
],
"methods": [],
"namespace": "Volo.Abp.AuditLogging",
"primaryKeyType": "Guid",
"summary": null,
"collectionProperties": [
"Volo.Abp.AuditLogging.EntityChange",
"Volo.Abp.AuditLogging.AuditLogAction"
],
"navigationProperties": [],
"collectionProperties": {
"entityChanges": {
"name": "EntityChange",
"namespace": "Volo.Abp.AuditLogging",
"declaringAssemblyName": "Volo.Abp.AuditLogging.Domain"
},
"actions": {
"name": "AuditLogAction",
"namespace": "Volo.Abp.AuditLogging",
"declaringAssemblyName": "Volo.Abp.AuditLogging.Domain"
}
},
"navigationProperties": {},
"contentType": "aggregateRoot",
"name": "AuditLog"
"name": "AuditLog",
"summary": null
},
{
"namespace": "Volo.Abp.AuditLogging",
"summary": null,
"entityModel": {
"entityAnalyzeModel": {
"namespace": "Volo.Abp.AuditLogging",
"primaryKeyType": "Guid",
"summary": null,
"collectionProperties": [
"Volo.Abp.AuditLogging.EntityChange",
"Volo.Abp.AuditLogging.AuditLogAction"
],
"navigationProperties": [],
"collectionProperties": {
"entityChanges": {
"name": "EntityChange",
"namespace": "Volo.Abp.AuditLogging",
"declaringAssemblyName": "Volo.Abp.AuditLogging.Domain"
},
"actions": {
"name": "AuditLogAction",
"namespace": "Volo.Abp.AuditLogging",
"declaringAssemblyName": "Volo.Abp.AuditLogging.Domain"
}
},
"navigationProperties": {},
"contentType": "entity",
"name": "AuditLog"
"name": "AuditLog",
"summary": null
},
"contentType": "repositoryInterface",
"name": "IAuditLogRepository"
"name": "IAuditLogRepository",
"summary": null
}
]
}

32
modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.abppkg.analyze.json

@ -1,11 +1,24 @@
{
"name": "Volo.Abp.AuditLogging.EntityFrameworkCore",
"hash": "0495e8cfba68a55319b3774882939845",
"hash": "37dc1d81b4b99ad5eb7afa239c8ef43f",
"contents": [
{
"namespace": "Volo.Abp.AuditLogging.EntityFrameworkCore",
"dependsOnModules": [
{
"declaringAssemblyName": "Volo.Abp.AuditLogging.Domain",
"namespace": "Volo.Abp.AuditLogging",
"name": "AbpAuditLoggingDomainModule"
},
{
"declaringAssemblyName": "Volo.Abp.EntityFrameworkCore",
"namespace": "Volo.Abp.EntityFrameworkCore",
"name": "AbpEntityFrameworkCoreModule"
}
],
"contentType": "abpModule",
"name": "AbpAuditLoggingEntityFrameworkCoreModule"
"name": "AbpAuditLoggingEntityFrameworkCoreModule",
"summary": null
},
{
"namespace": "Volo.Abp.AuditLogging.EntityFrameworkCore",
@ -14,26 +27,31 @@
{
"entityFullName": "Volo.Abp.AuditLogging.AuditLog",
"contentType": "databaseTable",
"name": "AbpAuditLogs"
"name": "AbpAuditLogs",
"summary": null
},
{
"entityFullName": "Volo.Abp.AuditLogging.AuditLogAction",
"contentType": "databaseTable",
"name": "AbpAuditLogActions"
"name": "AbpAuditLogActions",
"summary": null
},
{
"entityFullName": "Volo.Abp.AuditLogging.EntityChange",
"contentType": "databaseTable",
"name": "AbpEntityChanges"
"name": "AbpEntityChanges",
"summary": null
},
{
"entityFullName": "Volo.Abp.AuditLogging.EntityPropertyChange",
"contentType": "databaseTable",
"name": "AbpEntityPropertyChanges"
"name": "AbpEntityPropertyChanges",
"summary": null
}
],
"contentType": "efCoreDbContext",
"name": "AbpAuditLoggingDbContext"
"name": "AbpAuditLoggingDbContext",
"summary": null
}
]
}

23
modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo.Abp.AuditLogging.MongoDB.abppkg.analyze.json

@ -1,11 +1,24 @@
{
"name": "Volo.Abp.AuditLogging.MongoDB",
"hash": "e87142d2a7e24741c98d02daa9005ac1",
"hash": "482d735c586fc845551e14d2c62324e0",
"contents": [
{
"namespace": "Volo.Abp.AuditLogging.MongoDB",
"dependsOnModules": [
{
"declaringAssemblyName": "Volo.Abp.AuditLogging.Domain",
"namespace": "Volo.Abp.AuditLogging",
"name": "AbpAuditLoggingDomainModule"
},
{
"declaringAssemblyName": "Volo.Abp.MongoDB",
"namespace": "Volo.Abp.MongoDB",
"name": "AbpMongoDbModule"
}
],
"contentType": "abpModule",
"name": "AbpAuditLoggingMongoDbModule"
"name": "AbpAuditLoggingMongoDbModule",
"summary": null
},
{
"namespace": "Volo.Abp.AuditLogging.MongoDB",
@ -14,11 +27,13 @@
{
"entityFullName": "Volo.Abp.AuditLogging.AuditLog",
"contentType": "databaseCollection",
"name": "AbpAuditLogs"
"name": "AbpAuditLogs",
"summary": null
}
],
"contentType": "mongoDbContext",
"name": "AuditLoggingMongoDbContext"
"name": "AuditLoggingMongoDbContext",
"summary": null
}
]
}

46
modules/background-jobs/Volo.Abp.BackgroundJobs.abpmdl.json

@ -7,14 +7,34 @@
}
},
"packages": {
"Volo.Abp.BackgroundJobs.Domain.Shared": {
"path": "src/Volo.Abp.BackgroundJobs.Domain.Shared/Volo.Abp.BackgroundJobs.Domain.Shared.abppkg.json",
"folder": "src"
"Volo.Abp.BackgroundJobs.DemoApp": {
"path": "app/Volo.Abp.BackgroundJobs.DemoApp/Volo.Abp.BackgroundJobs.DemoApp.abppkg.json",
"folder": "app"
},
"Volo.Abp.BackgroundJobs.DemoApp.RabbitMq": {
"path": "app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq.abppkg.json",
"folder": "app"
},
"Volo.Abp.BackgroundJobs.DemoApp.Quartz": {
"path": "app/Volo.Abp.BackgroundJobs.DemoApp.Quartz/Volo.Abp.BackgroundJobs.DemoApp.Quartz.abppkg.json",
"folder": "app"
},
"Volo.Abp.BackgroundJobs.DemoApp.HangFire": {
"path": "app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/Volo.Abp.BackgroundJobs.DemoApp.HangFire.abppkg.json",
"folder": "app"
},
"Volo.Abp.BackgroundJobs.DemoApp.Shared": {
"path": "app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Volo.Abp.BackgroundJobs.DemoApp.Shared.abppkg.json",
"folder": "app"
},
"Volo.Abp.BackgroundJobs.Domain": {
"path": "src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.abppkg.json",
"folder": "src"
},
"Volo.Abp.BackgroundJobs.Domain.Shared": {
"path": "src/Volo.Abp.BackgroundJobs.Domain.Shared/Volo.Abp.BackgroundJobs.Domain.Shared.abppkg.json",
"folder": "src"
},
"Volo.Abp.BackgroundJobs.EntityFrameworkCore": {
"path": "src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.abppkg.json",
"folder": "src"
@ -38,26 +58,6 @@
"Volo.Abp.BackgroundJobs.MongoDB.Tests": {
"path": "test/Volo.Abp.BackgroundJobs.MongoDB.Tests/Volo.Abp.BackgroundJobs.MongoDB.Tests.abppkg.json",
"folder": "test"
},
"Volo.Abp.BackgroundJobs.DemoApp": {
"path": "app/Volo.Abp.BackgroundJobs.DemoApp/Volo.Abp.BackgroundJobs.DemoApp.abppkg.json",
"folder": "app"
},
"Volo.Abp.BackgroundJobs.DemoApp.Shared": {
"path": "app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Volo.Abp.BackgroundJobs.DemoApp.Shared.abppkg.json",
"folder": "app"
},
"Volo.Abp.BackgroundJobs.DemoApp.HangFire": {
"path": "app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/Volo.Abp.BackgroundJobs.DemoApp.HangFire.abppkg.json",
"folder": "app"
},
"Volo.Abp.BackgroundJobs.DemoApp.RabbitMq": {
"path": "app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq.abppkg.json",
"folder": "app"
},
"Volo.Abp.BackgroundJobs.DemoApp.Quartz": {
"path": "app/Volo.Abp.BackgroundJobs.DemoApp.Quartz/Volo.Abp.BackgroundJobs.DemoApp.Quartz.abppkg.json",
"folder": "app"
}
}
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save