Browse Source

Merge branch 'dev' into issue-#3459

pull/18703/head
honurbu 3 years ago
parent
commit
44f39621e1
  1. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
  2. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ar.json
  3. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/cs.json
  4. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/de.json
  5. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en-GB.json
  6. 6
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json
  7. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/es.json
  8. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fi.json
  9. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fr.json
  10. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hi.json
  11. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hr.json
  12. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hu.json
  13. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/is.json
  14. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/it.json
  15. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/nl.json
  16. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/pl-PL.json
  17. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/pt-BR.json
  18. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ro-RO.json
  19. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ru.json
  20. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sk.json
  21. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sl.json
  22. 7
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/tr.json
  23. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/vi.json
  24. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json
  25. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hant.json
  26. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ar.json
  27. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/cs.json
  28. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/de.json
  29. 17
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
  30. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/es.json
  31. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fi.json
  32. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fr.json
  33. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hi.json
  34. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hr.json
  35. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hu.json
  36. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/is.json
  37. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/it.json
  38. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/nl.json
  39. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pl-PL.json
  40. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pt-BR.json
  41. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json
  42. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ru.json
  43. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sk.json
  44. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sl.json
  45. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/vi.json
  46. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json
  47. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hant.json
  48. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json
  49. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json
  50. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json
  51. 32
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
  52. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json
  53. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json
  54. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json
  55. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json
  56. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hr.json
  57. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json
  58. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json
  59. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json
  60. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json
  61. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json
  62. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json
  63. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json
  64. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json
  65. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json
  66. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json
  67. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json
  68. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json
  69. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json
  70. 28
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json
  71. 1
      docs/en/Audit-Logging.md
  72. BIN
      docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/1.jpg
  73. BIN
      docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/2.jpg
  74. BIN
      docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/3.jpg
  75. BIN
      docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/4.jpg
  76. BIN
      docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/5.jpg
  77. BIN
      docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/51.jpg
  78. BIN
      docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/6.jpg
  79. BIN
      docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/8.jpg
  80. BIN
      docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/9.jpg
  81. 20
      docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/POST.md
  82. 170
      docs/en/Community-Articles/2024-01-15-Abp-Supports-NET8/Post.md
  83. BIN
      docs/en/Community-Articles/2024-01-15-Abp-Supports-NET8/cover.png
  84. 10
      docs/en/Migration-Guides/Abp-8_0.md
  85. 4
      docs/en/Startup-Templates/Application.md
  86. 2
      docs/en/Startup-Templates/Module.md
  87. 2
      docs/en/Testing.md
  88. 2
      docs/en/Tutorials/Part-4.md
  89. 2
      docs/en/UI/Angular/Permission-Management.md
  90. 4
      docs/en/UI/Blazor/Basic-Theme.md
  91. 2
      docs/pt-BR/Startup-Templates/Application.md
  92. 2
      docs/pt-BR/Startup-Templates/Module.md
  93. 4
      docs/zh-Hans/Startup-Templates/Application.md
  94. 2
      docs/zh-Hans/Startup-Templates/Module.md
  95. 2
      docs/zh-Hans/Testing.md
  96. 114
      docs/zh-Hans/Tutorials/Part-10.md
  97. 78
      docs/zh-Hans/Tutorials/Part-4.md
  98. 139
      docs/zh-Hans/Tutorials/Part-8.md
  99. 46
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs
  100. 52
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelperService.cs

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

@ -564,6 +564,7 @@
"AllowAbpStudioBetaAccess": "Allow ABP Studio Beta Access",
"TotalQuestionCanNotBeNullMessage": "Total Question can not be null",
"Permission:EditWinners": "Edit Winners",
"Permission:ChangeDrawingStatus": "Change Drawing Status"
"Permission:ChangeDrawingStatus": "Change Drawing Status",
"RemoveAllWinnersConfirmationMessage": "Are you sure you want to remove all winners?"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ar.json

@ -230,7 +230,7 @@
"CommunityProfile": "ملف تعريف المجتمع",
"BlogProfile": "الملف الشخصي للمدونة",
"Tickets": "التذاكر",
"MeetTheABPCommunity": "ABP <span class=\"gradient-community\">المجتمع</span> معرفة"
"MeetTheABPCommunity": "ABP <span class=\"gradient-community\">المجتمع</span> معرفة",
"DisplayName:CommunityIndexPagePoll": "استطلاع"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/cs.json

@ -230,7 +230,7 @@
"CommunityProfile": "Profil komunity",
"BlogProfile": "Profil blogu",
"Tickets": "Vstupenky",
"MeetTheABPCommunity": "ABP <span class=\"gradient-community\">Komunita</span> poznat"
"MeetTheABPCommunity": "ABP <span class=\"gradient-community\">Komunita</span> poznat",
"DisplayName:CommunityIndexPagePoll": "Anketa na stránce s indexem komunity"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/de.json

@ -229,7 +229,7 @@
"CommunityProfile": "Community-Profil",
"BlogProfile": "Blog-Profil",
"Tickets": "Tickets",
"MeetTheABPCommunity": "ABP <span class=\"gradient-community\">Community</span> kennenlernen"
"MeetTheABPCommunity": "ABP <span class=\"gradient-community\">Community</span> kennenlernen",
"DisplayName:CommunityIndexPagePoll": "Community-Indexseite-Umfrage"
}
}

3
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en-GB.json

@ -33,6 +33,7 @@
"Samples": "Samples",
"FreeDDDBook": "Free DDD E-book",
"New": "New",
"Volo.AbpIo.Domain:020005": "License extend year can not be lower than {MinExtendLicenseYear} year and greater than {MaxExtendLicenseYear} years "
"Volo.AbpIo.Domain:020005": "License extend year can not be lower than {MinExtendLicenseYear} year and greater than {MaxExtendLicenseYear} years ",
"DisplayName:CommunityIndexPagePoll": "Community Index Page Poll"
}
}

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

@ -236,7 +236,7 @@
"Video Courses": "Video Courses",
"Packages": "Packages",
"Trainings": "Trainings",
"MeetTheABPCommunity": "Meet the ABP <span class=\"gradient-community\">Community</span>"
"MeetTheABPCommunity": "Meet the ABP <span class=\"gradient-community\">Community</span>",
"DisplayName:CommunityIndexPagePoll": "Community Index Page Poll"
}
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/es.json

@ -229,7 +229,7 @@
"CommunityProfile": "Perfil de la comunidad",
"BlogProfile": "Perfil del blog",
"Tickets": "Entradas",
"MeetTheABPCommunity": "Conozca la ABP<span class=\"gradient-community\">Comunidad</span>"
"MeetTheABPCommunity": "Conozca la ABP<span class=\"gradient-community\">Comunidad</span>",
"DisplayName:CommunityIndexPagePoll": "Encuesta de la página de índice de la comunidad"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fi.json

@ -230,7 +230,7 @@
"CommunityProfile": "Yhteisön profiili",
"BlogProfile": "Blogin profiili",
"Tickets": "Liput",
"MeetTheABPCommunity": "Tutustu ABP<span class=\"gradient-community\">Yhteisö</span>:n kanssa"
"MeetTheABPCommunity": "Tutustu ABP<span class=\"gradient-community\">Yhteisö</span>:n kanssa",
"DisplayName:CommunityIndexPagePoll": "Yhteisön indeksointisivun kysely"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fr.json

@ -230,7 +230,7 @@
"CommunityProfile": "Profil de la communauté",
"BlogProfile": "Profil du blog",
"Tickets": "Des billets",
"MeetTheABPCommunity": "Découvrez ABP avec la <span class=\"gradient-community\">Communauté</span>"
"MeetTheABPCommunity": "Découvrez ABP avec la <span class=\"gradient-community\">Communauté</span>",
"DisplayName:CommunityIndexPagePoll": "Sondage de la page d&#39;accueil de la communauté"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hi.json

@ -230,7 +230,7 @@
"CommunityProfile": "सामुदायिक प्रोफ़ाइल",
"BlogProfile": "ब्लॉग प्रोफ़ाइल",
"Tickets": "टिकट",
"MeetTheABPCommunity": "ABP से मिलें <span class=\"gradient-community\">समुदाय</span>"
"MeetTheABPCommunity": "ABP से मिलें <span class=\"gradient-community\">समुदाय</span>",
"DisplayName:CommunityIndexPagePoll": "सामुदायिक अनुभाग मतदान"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hr.json

@ -230,7 +230,7 @@
"CommunityProfile": "Profil zajednice",
"BlogProfile": "Blog profil",
"Tickets": "Ulaznice",
"MeetTheABPCommunity": "Upoznaj ABP <span class=\"gradient-community\">Zajednicu</span>"
"MeetTheABPCommunity": "Upoznaj ABP <span class=\"gradient-community\">Zajednicu</span>",
"DisplayName:CommunityIndexPagePoll": "Anketa na stranici indeksa zajednice"
}
}

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

@ -230,7 +230,7 @@
"CommunityProfile": "Közösségi profil",
"BlogProfile": "Blog profil",
"Tickets": "Jegyek",
"MeetTheABPCommunity": "Ismerd meg az ABP-t a <span class=\"gradient-community\">Közösséggel</span>"
"MeetTheABPCommunity": "Ismerd meg az ABP-t a <span class=\"gradient-community\">Közösséggel</span>",
"DisplayName:CommunityIndexPagePoll": "Közösségi Indexoldal Szavazás"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/is.json

@ -230,7 +230,7 @@
"CommunityProfile": "Samfélagssnið",
"BlogProfile": "Bloggprófíll",
"Tickets": "Miðar",
"MeetTheABPCommunity": "Kynnistuðu ABP <span class=\"gradient-community\">Samfélagið</span>"
"MeetTheABPCommunity": "Kynnistuðu ABP <span class=\"gradient-community\">Samfélagið</span>",
"DisplayName:CommunityIndexPagePoll": "Samfélagssnið"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/it.json

@ -230,7 +230,7 @@
"CommunityProfile": "Profilo della comunità",
"BlogProfile": "Profilo del blog",
"Tickets": "Biglietti",
"MeetTheABPCommunity": "Incontra la ABP<span class=\"gradient-community\">comunità</span>"
"MeetTheABPCommunity": "Incontra la ABP<span class=\"gradient-community\">comunità</span>",
"DisplayName:CommunityIndexPagePoll": "Sondaggio della pagina indice della comunità"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/nl.json

@ -230,7 +230,7 @@
"CommunityProfile": "Gemeenschapsprofiel",
"BlogProfile": "Blogprofiel",
"Tickets": "Kaartjes",
"MeetTheABPCommunity": "Maak kennis met ABP <span class=\"gradient-community\">Gemeenschap</span>"
"MeetTheABPCommunity": "Maak kennis met ABP <span class=\"gradient-community\">Gemeenschap</span>",
"DisplayName:CommunityIndexPagePoll": "Gemeenschapsindexpagina-enquête"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/pl-PL.json

@ -230,7 +230,7 @@
"CommunityProfile": "Profil społeczności",
"BlogProfile": "Profil bloga",
"Tickets": "Bilety",
"MeetTheABPCommunity": "Maak kennis met ABP <span class=\"gradient-community\">Gemeenschap</span>"
"MeetTheABPCommunity": "Maak kennis met ABP <span class=\"gradient-community\">Gemeenschap</span>",
"DisplayName:CommunityIndexPagePoll": "Ankieta na stronie głównej społeczności"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/pt-BR.json

@ -230,7 +230,7 @@
"CommunityProfile": "Perfil da comunidade",
"BlogProfile": "Perfil do blog",
"Tickets": "Ingressos",
"MeetTheABPCommunity": "Conheça a ABP com a <span class=\"gradient-community\">Comunidade</span>"
"MeetTheABPCommunity": "Conheça a ABP com a <span class=\"gradient-community\">Comunidade</span>",
"DisplayName:CommunityIndexPagePoll": "Enquete da página inicial da comunidade"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ro-RO.json

@ -230,7 +230,7 @@
"CommunityProfile": "Profilul comunității",
"BlogProfile": "Profil blog",
"Tickets": "bilete",
"MeetTheABPCommunity": "Cunoaște ABP cu <span class=\"gradient-community\">Comunitatea</span>"
"MeetTheABPCommunity": "Cunoaște ABP cu <span class=\"gradient-community\">Comunitatea</span>",
"DisplayName:CommunityIndexPagePoll": "Sondajul de pe pagina de index a comunității"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ru.json

@ -236,7 +236,7 @@
"Video Courses": "Видео курсы",
"Packages": "Пакеты",
"Trainings": "Тренинги",
"MeetTheABPCommunity": "Познакомьтесь с ABP с <span class=\"gradient-community\">Сообществом</span>"
"MeetTheABPCommunity": "Познакомьтесь с ABP с <span class=\"gradient-community\">Сообществом</span>",
"DisplayName:CommunityIndexPagePoll": "Опрос на главной странице сообщества"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sk.json

@ -230,7 +230,7 @@
"CommunityProfile": "Profil komunity",
"BlogProfile": "Profil blogu",
"Tickets": "Vstupenky",
"MeetTheABPCommunity": "Spoznajte ABP s <span class=\"gradient-community\">Komunitou</span>"
"MeetTheABPCommunity": "Spoznajte ABP s <span class=\"gradient-community\">Komunitou</span>",
"DisplayName:CommunityIndexPagePoll": "Anketa na stránke indexu komunity"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sl.json

@ -230,7 +230,7 @@
"CommunityProfile": "Profil skupnosti",
"BlogProfile": "Blog profil",
"Tickets": "Vstopnice",
"MeetTheABPCommunity": "Spoznajte ABP z <span class=\"gradient-community\">Skupnostjo</span>"
"MeetTheABPCommunity": "Spoznajte ABP z <span class=\"gradient-community\">Skupnostjo</span>",
"DisplayName:CommunityIndexPagePoll": "Anketa na strani z indeksom skupnosti"
}
}

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

@ -175,10 +175,7 @@
"Organizations": "Organizasyonlar",
"ManageAccount": "Hesabı Yönet",
"CommunityProfile": "Topluluk Profili",
"MeetTheABPCommunity": "ABP <span class=\"gradient-community\">Community</span> ile tanışın"
"MeetTheABPCommunity": "ABP <span class=\"gradient-community\">Community</span> ile tanışın",
"DisplayName:CommunityIndexPagePoll": "Topluluk Anasayfası Anketi"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/vi.json

@ -229,7 +229,7 @@
"CommunityProfile": "Hồ sơ cộng đồng",
"BlogProfile": "Hồ sơ blog",
"Tickets": "Vé",
"MeetTheABPCommunity": "Gặp gỡ ABP với <span class=\"gradient-community\">Cộng đồng</span>"
"MeetTheABPCommunity": "Gặp gỡ ABP với <span class=\"gradient-community\">Cộng đồng</span>",
"DisplayName:CommunityIndexPagePoll": "Bình chọn trang chủ cộng đồng"
}
}

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

@ -230,7 +230,7 @@
"CommunityProfile": "社区概况",
"BlogProfile": "博客简介",
"Tickets": "门票",
"MeetTheABPCommunity": "与 ABP 一起认识 <span class=\"gradient-community\">社区</span>"
"MeetTheABPCommunity": "与 ABP 一起认识 <span class=\"gradient-community\">社区</span>",
"DisplayName:CommunityIndexPagePoll": "社区首页投票"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hant.json

@ -230,7 +230,7 @@
"CommunityProfile": "社區簡介",
"BlogProfile": "部落格簡介",
"Tickets": "門票",
"MeetTheABPCommunity": "與 ABP 一起認識 <span class=\"gradient-community\">社群</span>"
"MeetTheABPCommunity": "與 ABP 一起認識 <span class=\"gradient-community\">社群</span>",
"DisplayName:CommunityIndexPagePoll": "社區首頁調查"
}
}

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

@ -223,7 +223,7 @@
"AllAttendees": "جميع الحضور",
"SeeRaffleDetail": "انظر تفاصيل السحب",
"SeeRaffle": "انظر السحب",
"ParticipationIsComplete!": "المشاركة كاملة!",
"ParticipationIsComplete": "المشاركة كامل.",
"ABPCoreDevelopmentTeam": "فريق التطوير الأساسي لبرنامج ABP",
"RegisterTheEvent": "سجل الحدث",
"GoToConferencePage": "انتقل إلى صفحة المؤتمر",

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

@ -223,7 +223,7 @@
"AllAttendees": "Všichni účastníci",
"SeeRaffleDetail": "Viz Detail tomboly",
"SeeRaffle": "Viz Tombola",
"ParticipationIsComplete!": "Účast je dokončena!",
"ParticipationIsComplete": "Účast je dokončena.",
"ABPCoreDevelopmentTeam": "Základní vývojový tým ABP",
"RegisterTheEvent": "Zaregistrujte událost",
"GoToConferencePage": "Přejděte na stránku konference",

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

@ -223,7 +223,7 @@
"AllAttendees": "Alle Teilnehmer",
"SeeRaffleDetail": "Siehe Details zur Verlosung",
"SeeRaffle": "Siehe Tombola",
"ParticipationIsComplete!": "Die Teilnahme ist abgeschlossen!",
"ParticipationIsComplete": "Die Teilnahme ist abgeschlossen.",
"ABPCoreDevelopmentTeam": "ABP-Kernentwicklungsteam",
"RegisterTheEvent": "Registrieren Sie die Veranstaltung",
"GoToConferencePage": "Gehen Sie zur Konferenzseite",

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

@ -193,7 +193,7 @@
"AbpCommunityTitleContent": "ABP Community - Open Source ABP Framework",
"CommunitySlogan": "A unique community platform for <span class=\"{0}\">ABP Lovers</span>",
"RaffleIsNotActive": "Raffle is not active",
"YouAreAlreadyJoinedToThisRaffle": "You are already joined to this raffle",
"YouAreAlreadyJoinedToThisRaffle": "You already joined to this raffle!",
"InvalidSubscriptionCode": "Invalid subscription code",
"Raffle:{0}": "Raffle: {0}",
"Join": "Join",
@ -206,7 +206,7 @@
"min": "min",
"sec": "sec",
"Winners": "Winners",
"To{0}LuckyWinners": "to {0} lucky winner(s)",
"To{0}LuckyWinners": "to {0} lucky winners",
"ActiveRaffles": "Active <span class=\"gradient-community\">Raffles</span>",
"UpcomingRaffles": "Upcoming <span class=\"gradient-community\">Raffles</span>",
"CompletedRaffles": "Completed <span class=\"gradient-community\">Raffles</span>",
@ -216,14 +216,14 @@
"RaffleSubscriptionCodeInputErrorMessage": "The registration code is incorrect. Please try again.",
"GoodJob!": "Good Job!",
"RaffleJoinSuccessMessage": "You are successfully registered for the raffle. You will be informed via email if you win the prize!",
"RaffleLoginAndRegisterMessage": "You should sign in to join a raffle. You can create an account for free if you haven't registered yet.",
"RaffleLoginAndRegisterMessage": "You must sign in to join this raffle! If you haven't registered yet, create an account for free now.",
"Ok": "Ok",
"SeeDetails": "See Details",
"WaitingForTheDraw": "Waiting for the draw",
"WaitingForTheDraw": "Wait for the draw!",
"AllAttendees": "All Attendees",
"SeeRaffleDetail": "See Raffle Detail",
"SeeRaffle": "See Raffle",
"ParticipationIsComplete!": "Participation is complete!",
"ParticipationIsComplete": "Participation is complete.",
"ABPCoreDevelopmentTeam": "ABP Core Development Team",
"RegisterTheEvent": "Register the Event",
"GoToConferencePage": "Go to Conference Page",
@ -254,7 +254,8 @@
"Videos({0})": "Videos ({0})",
"LatestArticles": "Latest Articles",
"RaffleHeader": "Hello ABP Community Member!",
"RafflesInfo": "<br>This is the raffle page dedicated to show our appreciation towards you for being an active Community Member. We do <a class=\"fw-6 \" href=\"https://community.abp.io/events\">ABP Community Talks,</a> <a target=\"_blank\" class=\"fw-6\" href=\"https://abp.io/conference/2023\">ABP .NET Conference</a>, attend or sponsor to the .NET-related events in which we give away some gifts. <br><br>You can follow this page to see the upcoming raffles, attend them, or see previous raffles we draw including the winners. <br><br>Thank you for being an active member! See you in the upcoming raffles.",
"RafflesInfoTitle": "ABP Community <span class=\"gradient-community\">Raffles</span>"
"RafflesInfo": "<br>This is the raffle page dedicated to show our appreciation towards you for being an active Community Member. We do <a class=\"fw-6 \" href=\"https://community.abp.io/events\">ABP Community Talks</a> <a target=\"_blank\" class=\"fw-6\" href=\"https://abp.io/conference/2023\">,ABP .NET Conference</a>, attend or sponsor to the .NET-related events in which we give away some gifts. <br><br>You can follow this page to see the upcoming raffles, attend them, or see previous raffles we draw including the winners. <br><br>Thank you for being an active member! See you in the upcoming raffles.",
"RafflesInfoTitle": "ABP Community <span class=\"gradient-community\">Raffles</span>",
"ToLuckyWinner": "to 1 lucky winner"
}
}
}

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

@ -223,7 +223,7 @@
"AllAttendees": "Todos los asistentes",
"SeeRaffleDetail": "Ver Detalle del Sorteo",
"SeeRaffle": "Ver Sorteo",
"ParticipationIsComplete!": "¡La participación está completa!",
"ParticipationIsComplete": "¡La participación está completa.",
"ABPCoreDevelopmentTeam": "Equipo de desarrollo central de ABP",
"RegisterTheEvent": "Registra el evento",
"GoToConferencePage": "Ir a la página de la conferencia",

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

@ -223,7 +223,7 @@
"AllAttendees": "Kaikki osallistujat",
"SeeRaffleDetail": "Katso arpajaiset",
"SeeRaffle": "Katso Arpajaiset",
"ParticipationIsComplete!": "Osallistuminen on valmis!",
"ParticipationIsComplete": "Osallistuminen on valmis.",
"ABPCoreDevelopmentTeam": "ABP:n ydinkehitystiimi",
"RegisterTheEvent": "Ilmoittaudu tapahtumaan",
"GoToConferencePage": "Siirry konferenssisivulle",

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

@ -223,7 +223,7 @@
"AllAttendees": "Tous les participants",
"SeeRaffleDetail": "Voir les détails du tirage au sort",
"SeeRaffle": "Voir le tirage au sort",
"ParticipationIsComplete!": "La participation est terminée !",
"ParticipationIsComplete": "La participation est terminée.",
"ABPCoreDevelopmentTeam": "Équipe de développement de base ABP",
"RegisterTheEvent": "Enregistrez l&#39;événement",
"GoToConferencePage": "Aller à la page de la conférence",

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

@ -223,7 +223,7 @@
"AllAttendees": "सभी उपस्थितगण",
"SeeRaffleDetail": "रैफ़ल विवरण देखें",
"SeeRaffle": "रैफ़ल देखें",
"ParticipationIsComplete!": "भागीदारी पूरी हो गई है!",
"ParticipationIsComplete": "भागीदारी पूरी हो गई है.",
"ABPCoreDevelopmentTeam": "एबीपी कोर डेवलपमेंट टीम",
"RegisterTheEvent": "ईवेंट पंजीकृत करें",
"GoToConferencePage": "कॉन्फ़्रेंस पृष्ठ पर जाएँ",

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

@ -223,7 +223,7 @@
"AllAttendees": "Svi Prisutni",
"SeeRaffleDetail": "Pogledajte detalje nagradne igre",
"SeeRaffle": "Vidi Raffle",
"ParticipationIsComplete!": "Sudjelovanje je završeno!",
"ParticipationIsComplete": "Sudjelovanje je završeno.",
"ABPCoreDevelopmentTeam": "ABP glavni razvojni tim",
"RegisterTheEvent": "Prijavite događaj",
"GoToConferencePage": "Idite na stranicu konferencije",

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

@ -223,7 +223,7 @@
"AllAttendees": "Minden résztvevő",
"SeeRaffleDetail": "Lásd a nyereményjáték részleteit",
"SeeRaffle": "Lásd: Tombola",
"ParticipationIsComplete!": "A részvétel teljes!",
"ParticipationIsComplete": "A részvétel teljes.",
"ABPCoreDevelopmentTeam": "ABP Core Development Team",
"RegisterTheEvent": "Regisztrálja az Eseményt",
"GoToConferencePage": "Menjen a konferencia oldalára",

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

@ -223,7 +223,7 @@
"AllAttendees": "Allir fundarmenn",
"SeeRaffleDetail": "Sjá upplýsingar um happdrætti",
"SeeRaffle": "Sjá Happdrætti",
"ParticipationIsComplete!": "Þátttöku er lokið!",
"ParticipationIsComplete": "Þátttöku er lokið.",
"ABPCoreDevelopmentTeam": "ABP Core Development Team",
"RegisterTheEvent": "Skráðu viðburðinn",
"GoToConferencePage": "Farðu á ráðstefnusíðu",

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

@ -223,7 +223,7 @@
"AllAttendees": "Tutti i partecipanti",
"SeeRaffleDetail": "Vedi i dettagli della lotteria",
"SeeRaffle": "Vedi Lotteria",
"ParticipationIsComplete!": "La partecipazione è completa!",
"ParticipationIsComplete": "La partecipazione è completa.",
"ABPCoreDevelopmentTeam": "Team di sviluppo principale dell&#39;ABP",
"RegisterTheEvent": "Registra l&#39;Evento",
"GoToConferencePage": "Vai alla pagina della conferenza",

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

@ -223,7 +223,7 @@
"AllAttendees": "Alle aanwezigen",
"SeeRaffleDetail": "Zie loterijdetails",
"SeeRaffle": "Zie loterij",
"ParticipationIsComplete!": "Deelname is voltooid!",
"ParticipationIsComplete": "Deelname is voltooid.",
"ABPCoreDevelopmentTeam": "Kernontwikkelingsteam van ABP",
"RegisterTheEvent": "Registreer het evenement",
"GoToConferencePage": "Ga naar de conferentiepagina",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pl-PL.json

@ -223,7 +223,7 @@
"AllAttendees": "Wszyscy Uczestnicy",
"SeeRaffleDetail": "Zobacz szczegóły loterii",
"SeeRaffle": "Zobacz Loterię",
"ParticipationIsComplete!": "Udział jest zakończony!",
"ParticipationIsComplete": "Udział jest zakończony.",
"ABPCoreDevelopmentTeam": "Główny zespół programistów ABP",
"RegisterTheEvent": "Zarejestruj wydarzenie",
"GoToConferencePage": "Przejdź do strony konferencji",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pt-BR.json

@ -223,7 +223,7 @@
"AllAttendees": "Todos os participantes",
"SeeRaffleDetail": "Veja detalhes do sorteio",
"SeeRaffle": "Ver sorteio",
"ParticipationIsComplete!": "A participação está completa!",
"ParticipationIsComplete": "A participação está completa.",
"ABPCoreDevelopmentTeam": "Equipe principal de desenvolvimento da ABP",
"RegisterTheEvent": "Registre o Evento",
"GoToConferencePage": "Ir para a página da conferência",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json

@ -223,7 +223,7 @@
"AllAttendees": "Toți participanții",
"SeeRaffleDetail": "Vezi Detaliul Tombolei",
"SeeRaffle": "Vezi tombola",
"ParticipationIsComplete!": "Participarea este completă!",
"ParticipationIsComplete": "Participarea este completă.",
"ABPCoreDevelopmentTeam": "Echipa de dezvoltare principală ABP",
"RegisterTheEvent": "Înregistrați evenimentul",
"GoToConferencePage": "Accesați pagina conferinței",

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

@ -226,7 +226,7 @@
"AllAttendees": "Все участники",
"SeeRaffleDetail": "См. подробную информацию о розыгрыше",
"SeeRaffle": "Посмотреть лотерею",
"ParticipationIsComplete!": "Участие завершено!",
"ParticipationIsComplete": "Участие завершено.",
"ABPCoreDevelopmentTeam": "Основная группа разработчиков ABP",
"RegisterTheEvent": "Зарегистрировать мероприятие",
"GoToConferencePage": "Перейти на страницу конференции",

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

@ -223,7 +223,7 @@
"AllAttendees": "Všetci účastníci",
"SeeRaffleDetail": "Pozrite si detail tomboly",
"SeeRaffle": "Pozri Tombola",
"ParticipationIsComplete!": "Účasť je dokončená!",
"ParticipationIsComplete": "Účasť je dokončená.",
"ABPCoreDevelopmentTeam": "ABP Core Development Team",
"RegisterTheEvent": "Zaregistrujte udalosť",
"GoToConferencePage": "Prejdite na stránku konferencie",

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

@ -223,7 +223,7 @@
"AllAttendees": "Vsi udeleženci",
"SeeRaffleDetail": "Oglejte si podrobnosti žrebanja",
"SeeRaffle": "Glej nagradna igra",
"ParticipationIsComplete!": "Sodelovanje je zaključeno!",
"ParticipationIsComplete": "Sodelovanje je zaključeno.",
"ABPCoreDevelopmentTeam": "ABP Core Development Team",
"RegisterTheEvent": "Prijavite dogodek",
"GoToConferencePage": "Pojdite na stran konference",

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

@ -223,7 +223,7 @@
"AllAttendees": "Tất cả người tham dự",
"SeeRaffleDetail": "Xem chi tiết xổ số",
"SeeRaffle": "Xem xổ số",
"ParticipationIsComplete!": "Việc tham gia đã hoàn tất!",
"ParticipationIsComplete": "Việc tham gia đã hoàn tất.",
"ABPCoreDevelopmentTeam": "Nhóm phát triển cốt lõi của ABP",
"RegisterTheEvent": "Đăng ký sự kiện",
"GoToConferencePage": "Tới trang hội nghị",

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

@ -223,7 +223,7 @@
"AllAttendees": "所有与会者",
"SeeRaffleDetail": "查看抽奖详情",
"SeeRaffle": "参见抽奖",
"ParticipationIsComplete!": "参与已完成!",
"ParticipationIsComplete.": "参与已完成.",
"ABPCoreDevelopmentTeam": "ABP 核心开发团队",
"RegisterTheEvent": "注册活动",
"GoToConferencePage": "转至会议页面",

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

@ -223,7 +223,7 @@
"AllAttendees": "所有與會者",
"SeeRaffleDetail": "看抽獎詳情",
"SeeRaffle": "查看抽獎活動",
"ParticipationIsComplete!": "參與完畢",
"ParticipationIsComplete": "參與完畢.",
"ABPCoreDevelopmentTeam": "ABP核心開發團隊",
"RegisterTheEvent": "註冊活動",
"GoToConferencePage": "進入會議頁面",

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "إطار عمل ABP ليس مجرد إطار عمل، بل هو أيضًا دليل لتطوير/إدارة المشروع، لأنه يوفر تدريبات DDD وGenericRepository وDI وMicroservice وModularity. حتى لو كنت لن تستخدم إطار العمل نفسه، يمكنك تطوير نفسك باستخدام docs.abp.io الذي تم إعداده جيدًا واحترافيًا. (OpenIddict، وRedis، وQuartz، وما إلى ذلك) \n نظرًا لأن العديد من الأشياء تم إنشاؤها مسبقًا، فإنها تقلل من وقت تطوير المشروع بشكل كبير. (مثل صفحة تسجيل الدخول، ومعالجة الاستثناءات، وتصفية البيانات، وتسجيل التدقيق، والترجمة، ووحدة التحكم التلقائية في API وما إلى ذلك) \n كمثال من تطبيقنا، استخدمت ناقل الأحداث المحلي للتحكم في المخزون. لذلك، أنا قادر على إدارة حركات الطلب عن طريق كتابة معالج الأسهم. \n إنه لأمر رائع ألا نضيع الوقت في CreationTime، CreatorId. يتم ملؤها تلقائيًا.",
"VideosLoginAndRegisterMessage": "يجب عليك تسجيل الدخول لمشاهدة مقاطع الفيديو. يمكنك إنشاء حساب للمشاهدة إذا لم تقم بذلك.",
"Filter": "منقي",
"VideoCourses": "دورات الفيديو"
"VideoCourses": "دورات الفيديو",
"TestimonialText": "شهادتك",
"Position": "الوظيفة",
"ExperienceYear": "سنوات الخبرة",
"FullName": "الاسم الكامل",
"CompanySize": "حجم الشركة",
"Image": "صورتك الشخصية",
"TestimonialTitle": "لنسمع شهادتك",
"TestimonialInfo": "رأي عملائنا يهم! أخبرنا عن تجربتك مع منتجنا وخدمتنا.",
"Country": "البلد",
"TestimonialTextPlaceholder": "اكتب قصة موجزة حول كيف ساعدك ABP في بناء وتسليم مشروعك.",
"PositionPlaceholder": "وظيفتك في شركتك.",
"SelectExperienceYearPlaceholder": "كم عدد سنوات خبرتك في مجال البرمجيات؟",
"FullNamePlaceholder": "اسمك الكامل.",
"CompanyNamePlaceholder": "اسم شركتك.",
"SelectCompanySizePlaceholder": "عدد الموظفين",
"ImagePlaceholder": "صورتك.",
"SelectCountryPlaceholder": "بلدك.",
"YouAreNotAuthorizedToWriteTestimonial": "لا يُسمح لك بكتابة الشهادة إلا إذا قمت بتسجيل الدخول.",
"UnAuthorizeTestimonialInfo": "رأيك مهم! قم بتسجيل الدخول لمشاركته.",
"TheFileIsTooLargeForImage": "لا يمكن أن تكون صورتك الشخصية أكبر من 1 ميغابايت.",
"ThisExtensionIsNotAllowedForImage": "هذا الامتداد غير مسموح به.",
"FileUploadError": "خطأ في تحميل الملف",
"TestimonialSend": "شكرًا لك! لقد تلقينا شهادتك. سنقوم بمراجعتها واتخاذ الخطوة التالية قريبًا.",
"Title": "العنوان",
"TitlePlaceholder": "مطور برامج، مدير تكنولوجيا المعلومات، إلخ.",
"Characters": "الأحرف"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "ABP Framework není jen rámec, je to také návod pro vývoj/řízení projektů, protože poskytuje školení DDD, GenericRepository, DI, Microservice, Modularity. I když se nechystáte používat samotný framework, můžete se vyvíjet s docs.abp.io, který je dobře a profesionálně připraven. (OpenIddict, Redis, Quartz atd.) \n Protože je mnoho věcí předpřipravených, výrazně to zkracuje dobu vývoje projektu. (Jako přihlašovací stránka, zpracování výjimek, filtrování dat-seedování, protokolování auditu, lokalizace, automatický api řadič atd.) \n Jako příklad z naší aplikace jsem pro řízení zásob použil místní sběrnici událostí. Takže jsem schopen řídit pohyby objednávek psaním skladového manipulátoru. \n Je skvělé neztrácet čas pro CreationTime, CreatorId. Vyplňují se automaticky.",
"VideosLoginAndRegisterMessage": "Chcete-li sledovat videa, musíte se přihlásit. Můžete si vytvořit účet pro hodinky, pokud ještě nemáte.",
"Filter": "Filtr",
"VideoCourses": "Video kurzy"
"VideoCourses": "Video kurzy",
"TestimonialText": "Vaše hodnocení",
"Position": "Pozice",
"ExperienceYear": "Roky zkušeností",
"FullName": "Celé jméno",
"CompanySize": "Velikost společnosti",
"Image": "Vaše profilová fotografie",
"TestimonialTitle": "Pojďme slyšet vaše hodnocení",
"TestimonialInfo": "To, co naši zákazníci říkají, má význam! Dejte nám vědět o své zkušenosti s naším produktem a servisem.",
"Country": "Země",
"TestimonialTextPlaceholder": "Napište stručný příběh o tom, jak vám ABP pomohlo stavět a dodávat váš projekt.",
"PositionPlaceholder": "Vaše pozice ve vaší společnosti.",
"SelectExperienceYearPlaceholder": "Kolik let jste ve softwarovém odvětví?",
"FullNamePlaceholder": "Vaše celé jméno.",
"CompanyNamePlaceholder": "Název vaší společnosti.",
"SelectCompanySizePlaceholder": "Počet zaměstnanců",
"ImagePlaceholder": "Vaše fotka.",
"SelectCountryPlaceholder": "Vaše země.",
"YouAreNotAuthorizedToWriteTestimonial": "Chcete-li napsat svědectví, musíte se přihlásit.",
"UnAuthorizeTestimonialInfo": "Vaše názor je důležitý! Přihlaste se pro sdílení.",
"TheFileIsTooLargeForImage": "Vaše profilová fotografie nesmí být větší než 1 MB",
"ThisExtensionIsNotAllowedForImage": "Tento typ souboru není povolen.",
"FileUploadError": "Chyba při nahrávání souboru",
"TestimonialSend": "Děkujeme! Obdrželi jsme vaše svědectví. Brzy to zkontrolujeme a přijmeme další kroky.",
"Title": "Titul",
"TitlePlaceholder": "Vývojář softwaru, CTO atd.",
"Characters": "znaky"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "ABP Framework ist nicht nur ein Framework, sondern auch eine Anleitung für die Projektentwicklung/-verwaltung, da es DDD-, GenericRepository-, DI-, Microservice- und Modularitätsschulungen bereitstellt. Auch wenn Sie das Framework selbst nicht verwenden, können Sie sich mit docs.abp.io selbst entwickeln, das gut und professionell vorbereitet ist. (OpenIddict, Redis, Quartz usw.) \n Da viele Dinge vorgefertigt sind, verkürzt es die Projektentwicklungszeit erheblich. (Zum Beispiel Anmeldeseite, Ausnahmebehandlung, Datenfilterung/Seeding, Audit-Protokollierung, Lokalisierung, automatischer API-Controller usw.) \n Als Beispiel aus unserer App habe ich Local Event Bus für die Bestandskontrolle verwendet. Daher bin ich in der Lage, Auftragsbewegungen zu verwalten, indem ich „Stock Handler“ schreibe. \n Es ist wunderbar, keine Zeit für CreationTime und CreatorId zu verlieren. Sie werden automatisch ausgefüllt.",
"VideosLoginAndRegisterMessage": "Sie müssen sich anmelden, um Videos anzusehen. Sie können ein Konto für die Uhr erstellen, wenn Sie noch kein Konto haben.",
"Filter": "Filter",
"VideoCourses": "Videokurse"
"VideoCourses": "Videokurse",
"TestimonialText": "Ihre Bewertung",
"Position": "Position",
"ExperienceYear": "Jahre Erfahrung",
"FullName": "Vollständiger Name",
"CompanySize": "Firmengröße",
"Image": "Ihr Profilbild",
"TestimonialTitle": "Lassen Sie uns Ihre Bewertung hören",
"TestimonialInfo": "Was unsere Kunden sagen, ist wichtig! Erzählen Sie uns von Ihrer Erfahrung mit unserem Produkt und Service.",
"Country": "Land",
"TestimonialTextPlaceholder": "Schreiben Sie eine kurze Geschichte darüber, wie Ihnen ABP geholfen hat, Ihr Projekt zu entwickeln und zu liefern.",
"PositionPlaceholder": "Ihre Position in Ihrem Unternehmen.",
"SelectExperienceYearPlaceholder": "Wie viele Jahre haben Sie Erfahrung in der Softwarebranche?",
"FullNamePlaceholder": "Ihr vollständiger Name.",
"CompanyNamePlaceholder": "Der Name Ihres Unternehmens.",
"SelectCompanySizePlaceholder": "Anzahl der Mitarbeiter",
"ImagePlaceholder": "Ihr Bild.",
"SelectCountryPlaceholder": "Ihr Land.",
"YouAreNotAuthorizedToWriteTestimonial": "Um eine Bewertung zu schreiben, müssen Sie angemeldet sein.",
"UnAuthorizeTestimonialInfo": "Ihre Meinung ist wichtig! Melden Sie sich an, um sie zu teilen.",
"TheFileIsTooLargeForImage": "Ihr Profilbild darf nicht größer als 1 MB sein.",
"ThisExtensionIsNotAllowedForImage": "Diese Erweiterung ist nicht erlaubt.",
"FileUploadError": "Fehler beim Hochladen der Datei",
"TestimonialSend": "Vielen Dank! Wir haben Ihre Bewertung erhalten. Wir werden sie bald überprüfen und den nächsten Schritt unternehmen.",
"Title": "Titel",
"TitlePlaceholder": "Softwareentwickler, CTO usw.",
"Characters": "zeichen"
}
}

32
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json

@ -260,7 +260,7 @@
"TellUsAboutYourself": "Tell us a little bit about yourself",
"Name": "Name",
"Surname": "Surname",
"CompanyName": "Company Name",
"CompanyName": "Company name",
"DoYouAgreePrivacyPolicy": "I agree to the <a href=\"https://account.abp.io/Account/TermsConditions\">Terms & Conditions</a> and <a href=\"https://account.abp.io/Account/Privacy\">Privacy Policy</a>.",
"Free": "Free",
"DDDEBook": "DDD E-Book",
@ -443,26 +443,30 @@
"VideoCourses": "Video Courses",
"TestimonialText": "Your testimonial",
"Position": "Position",
"ExperienceYear": "Years of Experience",
"FullName": "Full Name",
"CompanySize": "Company Size",
"Image": "Your profile picture",
"ExperienceYear": "Years of experience",
"FullName": "Full name",
"CompanySize": "Company size",
"TestimonialTitle": "Let's hear your testimonial",
"TestimonialInfo": "What our customers say matters! Tell us about your experience with our product and service.",
"Country": "Country",
"TestimonialTextPlaceholder": "Write a brief story about how ABP helped you build and deliver your project. ",
"PositionPlaceholder": "Your position at your company.",
"TestimonialTextPlaceholder": "Write a brief story about how ABP helped you build and deliver your project.",
"PositionPlaceholder": "Your position at your company",
"SelectExperienceYearPlaceholder": "How many years have you been in software stuff",
"FullNamePlaceholder": "Your full name.",
"CompanyNamePlaceholder": "Your company name.",
"FullNamePlaceholder": "Your full name",
"CompanyNamePlaceholder": "Your company name",
"SelectCompanySizePlaceholder": "Employee count",
"ImagePlaceholder": "Your image.",
"SelectCountryPlaceholder": "Your country.",
"ImagePlaceholder": "Your image",
"SelectCountryPlaceholder": "Your country",
"YouAreNotAuthorizedToWriteTestimonial": "To be able to write testimonial letter, you must be sign in.",
"UnAuthorizeTestimonialInfo": "If you want to share your opinion, you must be <a id='signin-btn'>sign in</a>",
"TheFileIsTooLargeForImage": "Your profile picture cannot be more than 1 MB",
"UnAuthorizeTestimonialInfo": "Your opinion matters! Log in to share it.",
"TheFileIsTooLargeForImage": "Your profile picture cannot be more than {0} MB",
"ThisExtensionIsNotAllowedForImage": "This extension is not allowed.",
"FileUploadError": "File upload error"
"FileUploadError": "File upload error",
"TestimonialSend": "Thank you! We've received your testimonial. <br> We'll review and take the next step soon.",
"Title": "Title",
"TitlePlaceholder": "Software Developer, CTO etc.",
"Characters": "characters",
"Testimonial_YourProfilePicture": "Your profile picture (only {0})"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "ABP Framework no es solo un marco, también es una guía para el desarrollo/gestión de proyectos, porque proporciona capacitaciones sobre DDD, GenericRepository, DI, Microservice y Modularity. Incluso si no va a utilizar el marco en sí, puede desarrollarlo usted mismo con docs.abp.io, que está bien preparado y profesionalmente. (OpenIddict, Redis, Quartz, etc.) \n Debido a que muchos elementos están prediseñados, acorta significativamente el tiempo de desarrollo del proyecto. (Como página de inicio de sesión, manejo de excepciones, filtrado y siembra de datos, registro de auditoría, localización, controlador de API automático, etc.) \n Como ejemplo de nuestra aplicación, he utilizado Local Event Bus para el control de existencias. Por lo tanto, puedo gestionar los movimientos de pedidos escribiendo el controlador de stock. \n Es maravilloso no perder tiempo con CreationTime, CreatorId. Se llenan automáticamente.",
"VideosLoginAndRegisterMessage": "Debes iniciar sesión para ver videos. Puedes crear una cuenta para ver si aún no lo has hecho.",
"Filter": "Filtrar",
"VideoCourses": "Cursos en vídeo"
"VideoCourses": "Cursos en vídeo",
"TestimonialText": "Tu testimonio",
"Position": "Cargo",
"ExperienceYear": "Años de experiencia",
"FullName": "Nombre completo",
"CompanySize": "Tamaño de la empresa",
"Image": "Tu foto de perfil",
"TestimonialTitle": "Escuchemos tu testimonio",
"TestimonialInfo": "¡Lo que dicen nuestros clientes es importante! Cuéntanos tu experiencia con nuestro producto y servicio.",
"Country": "País",
"TestimonialTextPlaceholder": "Escribe una breve historia sobre cómo ABP te ayudó a construir y entregar tu proyecto.",
"PositionPlaceholder": "Tu posición en tu empresa.",
"SelectExperienceYearPlaceholder": "¿Cuántos años llevas en el campo del software?",
"FullNamePlaceholder": "Tu nombre completo.",
"CompanyNamePlaceholder": "Nombre de tu empresa.",
"SelectCompanySizePlaceholder": "Cantidad de empleados",
"ImagePlaceholder": "Tu imagen.",
"SelectCountryPlaceholder": "Tu país.",
"YouAreNotAuthorizedToWriteTestimonial": "Para poder escribir un testimonio, debes iniciar sesión.",
"UnAuthorizeTestimonialInfo": "¡Tu opinión es importante! Inicia sesión para compartirla.",
"TheFileIsTooLargeForImage": "Tu foto de perfil no puede superar 1 MB.",
"ThisExtensionIsNotAllowedForImage": "Esta extensión no está permitida.",
"FileUploadError": "Error al cargar el archivo",
"TestimonialSend": "¡Gracias! Hemos recibido tu testimonio. Lo revisaremos y daremos el próximo paso pronto.",
"Title": "Título",
"TitlePlaceholder": "Desarrollador de software, CTO, etc.",
"Characters": "caracteres"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "ABP Framework ei ole vain viitekehys, se on myös opastus projektien kehittämiseen/hallintaan, koska se tarjoaa DDD-, GenericRepository-, DI-, Microservice- ja Modularity-koulutuksia. Vaikka et itse käyttäisikään kehystä, voit kehittää itseäsi docs.abp.io:lla, joka on hyvin ja ammattimaisesti valmisteltu. (OpenIddict, Redis, Quartz jne.) \n Koska monet asiat on rakennettu valmiiksi, se lyhentää projektin kehitysaikaa merkittävästi. (Kuten kirjautumissivu, poikkeusten käsittely, tietojen suodatus-kylvö, tarkastusloki, lokalisointi, automaattinen api-ohjain jne.) \n Esimerkkinä sovelluksestamme, olen käyttänyt Local Event Busia varaston hallintaan. Pystyn siis hallitsemaan tilausliikkeitä kirjoittamalla varastokäsittelijäksi. \n On hienoa olla hukkaamatta aikaa CreationTime, CreatorId. Ne täytetään automaattisesti.",
"VideosLoginAndRegisterMessage": "Sinun on kirjauduttava sisään katsoaksesi videoita. Voit luoda tilin kellolle, jos et ole vielä tehnyt sitä.",
"Filter": "Suodattaa",
"VideoCourses": "Videokurssit"
"VideoCourses": "Videokurssit",
"TestimonialText": "Arvostelusi",
"Position": "Asema",
"ExperienceYear": "Vuoden kokemus",
"FullName": "Koko nimi",
"CompanySize": "Yrityksen koko",
"Image": "Profiilikuvasi",
"TestimonialTitle": "Kuunnellaan arvosteluasi",
"TestimonialInfo": "Mitä asiakkaamme sanovat, on tärkeää! Kerro meille kokemuksestasi tuotteemme ja palvelumme parissa.",
"Country": "Maa",
"TestimonialTextPlaceholder": "Kirjoita lyhyt tarina siitä, miten ABP auttoi sinua rakentamaan ja toimittamaan projektisi.",
"PositionPlaceholder": "Asemasi yrityksessäsi.",
"SelectExperienceYearPlaceholder": "Kuinka monta vuotta olet työskennellyt ohjelmistoteollisuudessa?",
"FullNamePlaceholder": "Koko nimesi.",
"CompanyNamePlaceholder": "Yrityksesi nimi.",
"SelectCompanySizePlaceholder": "Työntekijöiden määrä",
"ImagePlaceholder": "Kuvasi.",
"SelectCountryPlaceholder": "Maasi.",
"YouAreNotAuthorizedToWriteTestimonial": "Voit kirjoittaa arvostelun vain kirjautuneena sisään.",
"UnAuthorizeTestimonialInfo": "Mielipiteesi on tärkeä! Kirjaudu sisään jakaaaksesi sen.",
"TheFileIsTooLargeForImage": "Profiilikuvasi ei saa olla yli 1 Mt.",
"ThisExtensionIsNotAllowedForImage": "Tätä tiedostotyyppiä ei sallita.",
"FileUploadError": "Tiedoston latausvirhe",
"TestimonialSend": "Kiitos! Olemme vastaanottaneet arvostelusi. Käymme sen läpi ja otamme seuraavan askeleen pian.",
"Title": "Titteli",
"TitlePlaceholder": "Ohjelmistokehittäjä, CTO, jne.",
"Characters": "hahmot"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "ABP Framework n&#39;est pas seulement un framework, c&#39;est aussi un guide pour le développement/gestion de projets, car il propose des formations DDD, GenericRepository, DI, Microservice, Modularité. Même si vous n&#39;utilisez pas le framework lui-même, vous pouvez vous développer avec docs.abp.io qui est bien préparé de manière professionnelle. (OpenIddict, Redis, Quartz, etc.) \n Parce que de nombreux éléments sont pré-construits, cela réduit considérablement le temps de développement du projet. (Tels que la page de connexion, la gestion des exceptions, le filtrage-ensemencement des données, la journalisation d&#39;audit, la localisation, le contrôleur API automatique, etc.) \n À titre d&#39;exemple de notre application, j&#39;ai utilisé Local Event Bus pour le contrôle des stocks. Ainsi, je suis capable de gérer les mouvements de commandes en écrivant stock handler. \n C&#39;est merveilleux de ne pas perdre de temps pour CreationTime, CreatorId. Ils sont remplis automatiquement.",
"VideosLoginAndRegisterMessage": "Vous devez vous connecter pour regarder des vidéos. Vous pouvez créer un compte pour regarder si vous ne l&#39;avez pas encore fait.",
"Filter": "Filtre",
"VideoCourses": "Cours vidéo"
"VideoCourses": "Cours vidéo",
"TestimonialText": "Votre témoignage",
"Position": "Poste",
"ExperienceYear": "Années d'expérience",
"FullName": "Nom complet",
"CompanySize": "Taille de l'entreprise",
"Image": "Votre photo de profil",
"TestimonialTitle": "Écoutons votre témoignage",
"TestimonialInfo": "Ce que disent nos clients est important ! Parlez-nous de votre expérience avec notre produit et notre service.",
"Country": "Pays",
"TestimonialTextPlaceholder": "Rédigez une brève histoire sur la manière dont ABP vous a aidé à construire et livrer votre projet.",
"PositionPlaceholder": "Votre poste dans votre entreprise.",
"SelectExperienceYearPlaceholder": "Combien d'années avez-vous d'expérience dans le domaine du logiciel ?",
"FullNamePlaceholder": "Votre nom complet.",
"CompanyNamePlaceholder": "Nom de votre entreprise.",
"SelectCompanySizePlaceholder": "Nombre d'employés",
"ImagePlaceholder": "Votre image.",
"SelectCountryPlaceholder": "Votre pays.",
"YouAreNotAuthorizedToWriteTestimonial": "Pour pouvoir écrire un témoignage, vous devez être connecté(e).",
"UnAuthorizeTestimonialInfo": "Votre avis compte ! Connectez-vous pour le partager.",
"TheFileIsTooLargeForImage": "Votre photo de profil ne peut pas dépasser 1 Mo.",
"ThisExtensionIsNotAllowedForImage": "Cette extension n'est pas autorisée.",
"FileUploadError": "Erreur lors du téléchargement du fichier",
"TestimonialSend": "Merci ! Nous avons bien reçu votre témoignage. Nous le passerons en revue et prendrons la prochaine étape bientôt.",
"Title": "Titre",
"TitlePlaceholder": "Développeur de logiciels, CTO, etc.",
"Characters": "caractères"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "एबीपी फ्रेमवर्क न केवल एक ढांचा है, यह परियोजना विकास/प्रबंधन के लिए एक मार्गदर्शन भी है, क्योंकि यह डीडीडी, जेनेरिक रिपोजिटरी, डीआई, माइक्रोसर्विस, मॉड्यूलरिटी प्रशिक्षण प्रदान करता है। भले ही आप स्वयं फ्रेमवर्क का उपयोग नहीं करने जा रहे हैं, आप docs.abp.io के साथ स्वयं को विकसित कर सकते हैं जो अच्छी तरह से और पेशेवर रूप से तैयार है। (OpenIddict, Redis, Quartz आदि) \n चूंकि कई चीजें पहले से निर्मित होती हैं, इसलिए यह परियोजना के विकास के समय को काफी कम कर देता है। (जैसे लॉगिन पेज, अपवाद हैंडलिंग, डेटा फ़िल्टरिंग-सीडिंग, ऑडिट लॉगिंग, स्थानीयकरण, ऑटो एपीआई नियंत्रक इत्यादि) \n हमारे ऐप से एक उदाहरण के रूप में, मैंने स्टॉक नियंत्रण के लिए स्थानीय इवेंट बस का उपयोग किया है। इसलिए, मैं स्टॉक हैंडलर लिखकर ऑर्डर मूवमेंट को प्रबंधित करने में सक्षम हूं। \n CreationTime, CreatorId के लिए समय न बर्बाद करना अद्भुत है। वे स्वचालित रूप से भर जाते हैं.",
"VideosLoginAndRegisterMessage": "वीडियो देखने के लिए आपको साइन इन करना होगा. यदि आपने नहीं बनाया है तो आप घड़ी के लिए एक खाता बना सकते हैं।",
"Filter": "फ़िल्टर",
"VideoCourses": "वीडियो पाठ्यक्रम"
"VideoCourses": "वीडियो पाठ्यक्रम",
"TestimonialText": "आपका साक्षात्कार",
"Position": "पद",
"ExperienceYear": "अनुभव के वर्ष",
"FullName": "पूरा नाम",
"CompanySize": "कंपनी का आकार",
"Image": "आपकी प्रोफ़ाइल तस्वीर",
"TestimonialTitle": "हम आपका साक्षात्कार सुनें",
"TestimonialInfo": "हमारे ग्राहकों की कहानियाँ महत्वपूर्ण हैं! हमें अपने उत्पाद और सेवा के साथ अपने अनुभव के बारे में बताएं।",
"Country": "देश",
"TestimonialTextPlaceholder": "एक संक्षेप कहानी लिखें कि ABP ने आपको अपने परियोजना को बनाने और पहुंचाने में कैसे मदद की।",
"PositionPlaceholder": "आपका पद आपकी कंपनी में।",
"SelectExperienceYearPlaceholder": "आप सॉफ़्टवेयर क्षेत्र में कितने वर्षों से हैं?",
"FullNamePlaceholder": "आपका पूरा नाम।",
"CompanyNamePlaceholder": "आपकी कंपनी का नाम।",
"SelectCompanySizePlaceholder": "कर्मचारी संख्या",
"ImagePlaceholder": "आपकी छवि।",
"SelectCountryPlaceholder": "आपका देश।",
"YouAreNotAuthorizedToWriteTestimonial": "एक साक्षात्कार लिखने के लिए, आपको लॉग इन करना होगा।",
"UnAuthorizeTestimonialInfo": "आपकी राय महत्वपूर्ण है! इसे साझा करने के लिए लॉग इन करें।",
"TheFileIsTooLargeForImage": "आपकी प्रोफ़ाइल तस्वीर 1 MB से अधिक नहीं हो सकती।",
"ThisExtensionIsNotAllowedForImage": "यह एक्सटेंशन अनुमति नहीं है।",
"FileUploadError": "फ़ाइल अपलोड की गई में त्रुटि",
"TestimonialSend": "धन्यवाद! हमने आपका साक्षात्कार प्राप्त किया है। हम इसे समीक्षा करेंगे और शीघ्र अगला कदम उठाएंगे।",
"Title": "शीर्षक",
"TitlePlaceholder": "सॉफ़्टवेयर डेवेलपर, सीटीओ, आदि।",
"Characters": "अक्षर"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hr.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "ABP Framework nije samo okvir, već je i smjernica za razvoj/upravljanje projektom, jer pruža DDD, GenericRepository, DI, Microservice, Modularity treninge. Čak i ako nećete koristiti sam framework, možete se razvijati s docs.abp.io koji je dobro i profesionalno pripremljen. (OpenIddict, Redis, Quartz itd.) \n Budući da su mnoge stvari unaprijed izgrađene, značajno skraćuje vrijeme razvoja projekta. (Kao što je stranica za prijavu, rukovanje iznimkama, filtriranje-sijanje podataka, bilježenje revizije, lokalizacija, automatski API kontroler itd.) \n Kao primjer iz naše aplikacije, koristio sam lokalnu sabirnicu događaja za kontrolu zaliha. Dakle, mogu upravljati kretanjem narudžbi pisanjem rukovatelja zalihama. \n Divno je ne gubiti vrijeme za CreationTime, CreatorId. Pune se automatski.",
"VideosLoginAndRegisterMessage": "Morate se prijaviti za gledanje videa. Možete stvoriti račun za sat ako niste.",
"Filter": "filtar",
"VideoCourses": "Video tečajevi"
"VideoCourses": "Video tečajevi",
"TestimonialText": "Vaša preporuka",
"Position": "Pozicija",
"ExperienceYear": "Godine iskustva",
"FullName": "Puno ime",
"CompanySize": "Veličina tvrtke",
"Image": "Vaša profilna slika",
"TestimonialTitle": "Poslušajmo vašu preporuku",
"TestimonialInfo": "Ono što naši klijenti kažu važno je! Podijelite s nama svoje iskustvo s našim proizvodom i uslugom.",
"Country": "Država",
"TestimonialTextPlaceholder": "Napišite kratku priču o tome kako vam je ABP pomogao izgraditi i isporučiti vaš projekt.",
"PositionPlaceholder": "Vaša pozicija u tvrtki.",
"SelectExperienceYearPlaceholder": "Koliko godina imate iskustva u području softvera?",
"FullNamePlaceholder": "Vaše puno ime.",
"CompanyNamePlaceholder": "Naziv vaše tvrtke.",
"SelectCompanySizePlaceholder": "Broj zaposlenika",
"ImagePlaceholder": "Vaša slika.",
"SelectCountryPlaceholder": "Vaša država.",
"YouAreNotAuthorizedToWriteTestimonial": "Da biste mogli napisati preporuku, morate biti prijavljeni.",
"UnAuthorizeTestimonialInfo": "Vaše mišljenje je važno! Prijavite se kako biste ga podijelili.",
"TheFileIsTooLargeForImage": "Vaša profilna slika ne smije biti veća od 1 MB.",
"ThisExtensionIsNotAllowedForImage": "Ovo proširenje nije dopušteno.",
"FileUploadError": "Pogreška prilikom prijenosa datoteke",
"TestimonialSend": "Hvala vam! Primili smo vašu preporuku. Provjerit ćemo je i uskoro poduzeti sljedeći korak.",
"Title": "Naslov",
"TitlePlaceholder": "Razvojni inženjer, CTO, itd.",
"Characters": "znakovi"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "Az ABP Framework nem csak keretrendszer, hanem útmutató is a projektfejlesztéshez/menedzsmenthez, mert DDD, GenericRepository, DI, Microservice, Modularity képzéseket biztosít. Még ha nem is magát a keretrendszert használja, fejlesztheti magát a docs.abp.io segítségével, amely jól és szakmailag felkészült. (OpenIddict, Redis, Quartz stb.) \n Mivel sok minden előre be van építve, jelentősen lerövidíti a projektfejlesztési időt. (Például bejelentkezési oldal, kivételkezelés, adatszűrés-seeding, audit naplózás, lokalizáció, automatikus api-vezérlő stb.) \n Alkalmazásunkból példaként a Local Event Bus-t használtam készletkezelésre. Így a rendelési mozgásokat készletkezelő írással tudom kezelni. \n Csodálatos, hogy nem veszít időt a CreationTime, CreatorId használatára. Automatikusan kitöltődnek.",
"VideosLoginAndRegisterMessage": "A videók megtekintéséhez be kell jelentkeznie. Ha még nem tette meg, létrehozhat fiókot az órához.",
"Filter": "Szűrő",
"VideoCourses": "Videó tanfolyamok"
"VideoCourses": "Videó tanfolyamok",
"TestimonialText": "Ajánlásod",
"Position": "Pozíció",
"ExperienceYear": "Tapasztalati év",
"FullName": "Teljes név",
"CompanySize": "Cég mérete",
"Image": "Profilképed",
"TestimonialTitle": "Halljuk ajánlásod",
"TestimonialInfo": "Ami ügyfeleinktől származik, az fontos! Mesélj nekünk tapasztalataidról a termékünkkel és szolgáltatásunkkal kapcsolatban.",
"Country": "Ország",
"TestimonialTextPlaceholder": "Írj rövid történetet arról, hogyan segített neked az ABP projektépítésben és szállításban.",
"PositionPlaceholder": "Pozíciód a vállalatodban.",
"SelectExperienceYearPlaceholder": "Mennyi éves tapasztalatod van a szoftverek területén?",
"FullNamePlaceholder": "Teljes neved.",
"CompanyNamePlaceholder": "Céged neve.",
"SelectCompanySizePlaceholder": "Alkalmazottak száma",
"ImagePlaceholder": "Profilképed.",
"SelectCountryPlaceholder": "Országod.",
"YouAreNotAuthorizedToWriteTestimonial": "Ahhoz, hogy ajánlást írhass, be kell jelentkezned.",
"UnAuthorizeTestimonialInfo": "A véleménye számít! Jelentkezzen be, hogy megossza.",
"TheFileIsTooLargeForImage": "A profilképed nem lehet nagyobb, mint 1 MB.",
"ThisExtensionIsNotAllowedForImage": "Ez a kiterjesztés nem engedélyezett.",
"FileUploadError": "Hiba történt a fájl feltöltése közben",
"TestimonialSend": "Köszönjük! Megkaptuk az ajánlásod. Hamarosan átnézzük és következő lépéseket teszünk.",
"Title": "Cím",
"TitlePlaceholder": "Szoftvertervező, CTO, stb.",
"Characters": "karakterek"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "ABP Framework er ekki aðeins rammi, það er líka leiðsögn fyrir þróun/stjórnun verkefna, vegna þess að það veitir DDD, GenericRepository, DI, Microservice, Modularity þjálfun. Jafnvel þó þú ætlir ekki að nota ramma sjálfan þig geturðu þróað sjálfan þig með docs.abp.io sem er vel og faglega undirbúið. (OpenIddict, Redis, Quartz o.s.frv.) \n Þar sem margt er forsmíðað styttir það þróunartíma verkefna verulega. (Svo sem innskráningarsíðu, undantekningarmeðferð, gagnasíun-sáningu, endurskoðunarskráningu, staðfærslu, sjálfvirkan API stjórnandi o.s.frv.) \n Sem dæmi úr appinu okkar hef ég notað Local Event Bus fyrir lagerstýringu. Þannig að ég get stjórnað pöntunarhreyfingum með því að skrifa lager meðhöndlun. \n Það er dásamlegt að missa ekki tíma fyrir CreationTime, CreatorId. Þau fyllast sjálfkrafa.",
"VideosLoginAndRegisterMessage": "Þú verður að skrá þig inn til að horfa á myndbönd. Þú getur búið til reikning fyrir úrið ef þú hefur ekki gert það.",
"Filter": "Sía",
"VideoCourses": "Vídeónámskeið"
"VideoCourses": "Vídeónámskeið",
"TestimonialText": "Viðmiðun þín",
"Position": "Staða",
"ExperienceYear": "Reynsluár",
"FullName": "Fullt Nafn",
"CompanySize": "Fyrirtækisstærð",
"Image": "Prófílmynd þín",
"TestimonialTitle": "Hlýtur að heyra viðmiðu þína",
"TestimonialInfo": "Það sem viðskiptavinir okkar segja skiptir máli! Segið okkur frá reynslu þinni með vörum okkar og þjónustu.",
"Country": "Land",
"TestimonialTextPlaceholder": "Skrifið stutta sögu um hvernig ABP hjálpaði yður að byggja og afhenda verkefnið ykkar.",
"PositionPlaceholder": "Staða þín í fyrirtækinu þínu.",
"SelectExperienceYearPlaceholder": "Hversu mörg ár hefur þú starfað í hugbúnaðarverkfræði?",
"FullNamePlaceholder": "Fullt nafn þitt.",
"CompanyNamePlaceholder": "Nafn fyrirtækisins þíns.",
"SelectCompanySizePlaceholder": "Fjöldi starfsmanna",
"ImagePlaceholder": "Prófílmynd þín.",
"SelectCountryPlaceholder": "Landið þitt.",
"YouAreNotAuthorizedToWriteTestimonial": "Til að geta skrifað viðmiðun, verður þú að skrá þig inn.",
"UnAuthorizeTestimonialInfo": "Þín skoðun er mikilvæg! Skráðu þig inn til að deila henni.",
"TheFileIsTooLargeForImage": "Prófílmynd þín má ekki vera stærri en 1 MB.",
"ThisExtensionIsNotAllowedForImage": "Þessi viðbót er ekki leyfð.",
"FileUploadError": "Villa við upphleðslu skráar",
"TestimonialSend": "Þakka þér! Við höfum fengið viðmiðuna þína. Við munum fara yfir hana fljótt og taka næsta skref.",
"Title": "Titill",
"TitlePlaceholder": "Hugbúnaðarþróunarmiðill, CTO o.s.frv.",
"Characters": "stafir"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "ABP Framework non è solo un framework, è anche una guida per lo sviluppo/gestione del progetto, poiché fornisce corsi di formazione su DDD, GenericRepository, DI, Microservice e Modularità. Anche se non utilizzerai il framework stesso, puoi svilupparti con docs.abp.io che è ben preparato e professionalmente. (OpenIddict, Redis, Quartz ecc.) \n Poiché molte cose sono precostruite, riduce significativamente i tempi di sviluppo del progetto. (Come pagina di accesso, gestione delle eccezioni, seeding del filtraggio dei dati, registrazione di controllo, localizzazione, controller API automatico ecc.) \n Come esempio tratto dalla nostra app, ho utilizzato Local Event Bus per il controllo delle scorte. Quindi, sono in grado di gestire i movimenti degli ordini scrivendo stock handler. \n È meraviglioso non perdere tempo con CreationTime, CreatorId. Si riempiono automaticamente.",
"VideosLoginAndRegisterMessage": "Devi accedere per guardare i video. Se non lo hai già fatto, puoi creare un account per Watch.",
"Filter": "Filtro",
"VideoCourses": "Videocorsi"
"VideoCourses": "Videocorsi",
"TestimonialText": "La tua testimonianza",
"Position": "Posizione",
"ExperienceYear": "Anni di esperienza",
"FullName": "Nome e cognome",
"CompanySize": "Dimensione aziendale",
"Image": "La tua immagine del profilo",
"TestimonialTitle": "Ascoltiamo la tua testimonianza",
"TestimonialInfo": "Ciò che dicono i nostri clienti è importante! ",
"Country": "Paese",
"TestimonialTextPlaceholder": "Scrivi una breve storia su come ABP ti ha aiutato a costruire e realizzare il tuo progetto. ",
"PositionPlaceholder": "La tua posizione nella tua azienda.",
"SelectExperienceYearPlaceholder": "Da quanti anni ti occupi di software?",
"FullNamePlaceholder": "Il tuo nome completo.",
"CompanyNamePlaceholder": "Il nome della tua azienda.",
"SelectCompanySizePlaceholder": "Conteggio dei dipendenti",
"ImagePlaceholder": "La tua immagine.",
"SelectCountryPlaceholder": "Il tuo paese.",
"YouAreNotAuthorizedToWriteTestimonial": "Per poter scrivere una lettera di testimonianza, devi effettuare l'accesso.",
"UnAuthorizeTestimonialInfo": "La tua opinione conta! Accedi per condividerla.",
"TheFileIsTooLargeForImage": "La tua immagine del profilo non può essere più di 1 MB",
"ThisExtensionIsNotAllowedForImage": "Questa estensione non è consentita.",
"FileUploadError": "Errore nel caricamento del file",
"TestimonialSend": "Grazie! ",
"Title": "Titolo",
"TitlePlaceholder": "Sviluppatore di software, CTO ecc.",
"Characters": "caratteri"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "ABP Framework is niet alleen een raamwerk, het is ook een leidraad voor projectontwikkeling/management, omdat het DDD, GenericRepository, DI, Microservice, Modularity trainingen biedt. Zelfs als je het framework zelf niet gaat gebruiken, kun je jezelf ontwikkelen met docs.abp.io dat goed en professioneel is voorbereid. (OpenIddict, Redis, Quartz etc.) \n Omdat veel dingen vooraf zijn gebouwd, verkort dit de projectontwikkelingstijd aanzienlijk. (Zoals inlogpagina, afhandeling van uitzonderingen, gegevensfiltering-zaaien, auditlogboekregistratie, lokalisatie, automatische API-controller enz.) \n Als voorbeeld uit onze app heb ik Local Event Bus gebruikt voor voorraadbeheer. Ik kan dus orderbewegingen beheren door voorraadbeheer te schrijven. \n Het is geweldig om geen tijd te verliezen voor CreationTime, CreatorId. Ze worden automatisch gevuld.",
"VideosLoginAndRegisterMessage": "Je moet inloggen om video&#39;s te bekijken. Als u dat nog niet heeft gedaan, kunt u een account voor Watch aanmaken.",
"Filter": "Filter",
"VideoCourses": "Videocursussen"
"VideoCourses": "Videocursussen",
"TestimonialText": "Jouw getuigenis",
"Position": "Positie",
"ExperienceYear": "Jarenlange ervaring",
"FullName": "Voor-en achternaam",
"CompanySize": "Bedrijfsomvang",
"Image": "Jouw profiel foto",
"TestimonialTitle": "Laten we uw getuigenis horen",
"TestimonialInfo": "Wat onze klanten zeggen, doet ertoe! ",
"Country": "Land",
"TestimonialTextPlaceholder": "Schrijf een kort verhaal over hoe ABP u heeft geholpen bij het opzetten en opleveren van uw project. ",
"PositionPlaceholder": "Jouw functie binnen jouw bedrijf.",
"SelectExperienceYearPlaceholder": "Hoeveel jaar ben je al bezig met softwaredingen?",
"FullNamePlaceholder": "Je volledige naam.",
"CompanyNamePlaceholder": "Je bedrijfsnaam.",
"SelectCompanySizePlaceholder": "Aantal medewerkers",
"ImagePlaceholder": "Jou foto.",
"SelectCountryPlaceholder": "Jouw land.",
"YouAreNotAuthorizedToWriteTestimonial": "Om een getuigenisbrief te kunnen schrijven, moet u ingelogd zijn.",
"UnAuthorizeTestimonialInfo": "Jouw mening is belangrijk! Log in om het te delen.",
"TheFileIsTooLargeForImage": "Je profielfoto mag niet groter zijn dan 1 MB",
"ThisExtensionIsNotAllowedForImage": "Deze verlenging is niet toegestaan.",
"FileUploadError": "Fout bij het uploaden van bestanden",
"TestimonialSend": "Bedankt! ",
"Title": "Titel",
"TitlePlaceholder": "Softwareontwikkelaar, CTO enz.",
"Characters": "tekens"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "ABP Framework to nie tylko framework, to także wytyczne dotyczące opracowywania/zarządzania projektami, ponieważ zapewnia szkolenia z DDD, GenericRepository, DI, Microservice, Modularity. Nawet jeśli nie będziesz korzystał z samego frameworka, możesz rozwijać się dzięki dobrze i profesjonalnie przygotowanemu docs.abp.io. (OpenIddict, Redis, Quartz itp.) \n Ponieważ wiele rzeczy jest gotowych, znacznie skraca to czas opracowywania projektu. (Takie jak strona logowania, obsługa wyjątków, filtrowanie danych, rejestrowanie audytu, lokalizacja, automatyczny kontroler API itp.) \n Jako przykład z naszej aplikacji użyłem lokalnej magistrali zdarzeń do kontroli zapasów. Mogę więc zarządzać ruchami zamówień, pisząc moduł obsługi zapasów. \n Wspaniale jest nie tracić czasu na CreationTime, CreatorId. Są one wypełniane automatycznie.",
"VideosLoginAndRegisterMessage": "Aby oglądać filmy, musisz się zalogować. Jeśli jeszcze tego nie zrobiłeś, możesz utworzyć konto na zegarku.",
"Filter": "Filtr",
"VideoCourses": "Kursy wideo"
"VideoCourses": "Kursy wideo",
"TestimonialText": "Twoje świadectwo",
"Position": "Pozycja",
"ExperienceYear": "lata doświadczenia",
"FullName": "Pełne imię i nazwisko",
"CompanySize": "Rozmiar firmy",
"Image": "Twoje zdjęcie profilowe",
"TestimonialTitle": "Posłuchajmy Twojej opinii",
"TestimonialInfo": "To, co mówią nasi klienci, ma znaczenie! ",
"Country": "Kraj",
"TestimonialTextPlaceholder": "Napisz krótką historię o tym, jak firma ABP pomogła Ci w budowie i realizacji projektu. ",
"PositionPlaceholder": "Twoje stanowisko w Twojej firmie.",
"SelectExperienceYearPlaceholder": "Ile lat zajmujesz się oprogramowaniem?",
"FullNamePlaceholder": "Twoje pełne imię.",
"CompanyNamePlaceholder": "Nazwa Twojej firmy.",
"SelectCompanySizePlaceholder": "Liczba pracowników",
"ImagePlaceholder": "Twój obraz.",
"SelectCountryPlaceholder": "Twój kraj.",
"YouAreNotAuthorizedToWriteTestimonial": "Aby móc napisać list referencyjny, musisz się zalogować.",
"UnAuthorizeTestimonialInfo": "Twoja opinia ma znaczenie. Zaloguj się, aby ją udostępnić.",
"TheFileIsTooLargeForImage": "Twoje zdjęcie profilowe nie może przekraczać 1 MB",
"ThisExtensionIsNotAllowedForImage": "To rozszerzenie jest niedozwolone.",
"FileUploadError": "Błąd przesyłania pliku",
"TestimonialSend": "Dziękuję! ",
"Title": "Tytuł",
"TitlePlaceholder": "Programista, CTO itp.",
"Characters": "znaki"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "O ABP Framework não é apenas um framework, é também uma orientação para desenvolvimento/gerenciamento de projetos, pois fornece treinamentos em DDD, GenericRepository, DI, Microservice, Modularidade. Mesmo que você não vá usar o framework em si, você pode se desenvolver com o docs.abp.io que está bem preparado e profissionalmente. (OpenIddict, Redis, Quartz etc.) \n Como muitas coisas são pré-construídas, ele reduz significativamente o tempo de desenvolvimento do projeto. (Como página de login, tratamento de exceções, propagação de filtragem de dados, registro de auditoria, localização, controlador automático de API, etc.) \n Como exemplo de nosso aplicativo, usei o Local Event Bus para controle de estoque. Portanto, sou capaz de gerenciar os movimentos dos pedidos escrevendo o gerenciador de estoque. \n É maravilhoso não perder tempo com CreationTime, CreatorId. Eles são preenchidos automaticamente.",
"VideosLoginAndRegisterMessage": "Você deve fazer login para assistir aos vídeos. Você pode criar uma conta para assistir, caso ainda não o tenha feito.",
"Filter": "Filtro",
"VideoCourses": "Cursos em vídeo"
"VideoCourses": "Cursos em vídeo",
"TestimonialText": "Seu depoimento",
"Position": "Posição",
"ExperienceYear": "anos de experiência",
"FullName": "Nome completo",
"CompanySize": "Tamanho da empresa",
"Image": "Sua foto de perfil",
"TestimonialTitle": "Vamos ouvir seu depoimento",
"TestimonialInfo": "O que nossos clientes dizem é importante! ",
"Country": "País",
"TestimonialTextPlaceholder": "Escreva uma breve história sobre como a ABP ajudou você a construir e entregar seu projeto. ",
"PositionPlaceholder": "Sua posição na sua empresa.",
"SelectExperienceYearPlaceholder": "Há quantos anos você trabalha com software",
"FullNamePlaceholder": "Seu nome completo.",
"CompanyNamePlaceholder": "O nome da sua empresa.",
"SelectCompanySizePlaceholder": "Contagem de funcionários",
"ImagePlaceholder": "Sua imagem.",
"SelectCountryPlaceholder": "Seu país.",
"YouAreNotAuthorizedToWriteTestimonial": "Para poder escrever uma carta de depoimento, você deve estar logado.",
"UnAuthorizeTestimonialInfo": "Sua opinião é importante, faça login para compartilhá-la.",
"TheFileIsTooLargeForImage": "Sua foto de perfil não pode ter mais de 1 MB",
"ThisExtensionIsNotAllowedForImage": "Esta extensão não é permitida.",
"FileUploadError": "Erro no upload do arquivo",
"TestimonialSend": "Obrigado! ",
"Title": "Título",
"TitlePlaceholder": "Desenvolvedor de software, CTO etc.",
"Characters": "caracteres"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "ABP Framework nu este doar un cadru, este și un ghid pentru dezvoltarea/managementul proiectelor, deoarece oferă cursuri DDD, GenericRepository, DI, Microservice, Modularity. Chiar dacă nu veți folosi framework-ul în sine, vă puteți dezvolta cu docs.abp.io, care este bine și pregătit profesional. (OpenIddict, Redis, Quartz etc.) \n Deoarece multe lucruri pre-construite, scurtează semnificativ timpul de dezvoltare a proiectului. (De exemplu, pagina de autentificare, gestionarea excepțiilor, filtrarea datelor, înregistrarea auditului, localizarea, controlerul auto api etc.) \n Ca exemplu din aplicația noastră, am folosit Local Event Bus pentru controlul stocurilor. Așadar, pot gestiona mișcările comenzilor scriind handler de stoc. \n Este minunat să nu pierzi timp pentru CreationTime, CreatorId. Acestea sunt completate automat.",
"VideosLoginAndRegisterMessage": "Trebuie să vă conectați pentru a viziona videoclipuri. Puteți crea un cont pentru ceas dacă nu ați făcut-o.",
"Filter": "Filtru",
"VideoCourses": "Cursuri video"
"VideoCourses": "Cursuri video",
"TestimonialText": "Marturia ta",
"Position": "Poziţie",
"ExperienceYear": "Ani de experienta",
"FullName": "Numele complet",
"CompanySize": "Marimea companiei",
"Image": "Fotografia de profil",
"TestimonialTitle": "Să auzim mărturia ta",
"TestimonialInfo": "Ceea ce spun clienții noștri contează! ",
"Country": "Țară",
"TestimonialTextPlaceholder": "Scrieți o scurtă poveste despre modul în care ABP v-a ajutat să vă construiți și să vă livrați proiectul. ",
"PositionPlaceholder": "Poziția ta la compania ta.",
"SelectExperienceYearPlaceholder": "Câți ani ai fost în chestii de software",
"FullNamePlaceholder": "Numele tău complet.",
"CompanyNamePlaceholder": "Numele companiei tale.",
"SelectCompanySizePlaceholder": "Numărul de angajați",
"ImagePlaceholder": "Imaginea ta.",
"SelectCountryPlaceholder": "Tara ta.",
"YouAreNotAuthorizedToWriteTestimonial": "Pentru a putea scrie o scrisoare de mărturie, trebuie să vă conectați.",
"UnAuthorizeTestimonialInfo": "Părerea ta contează, conectează-te pentru a o împărtăși.",
"TheFileIsTooLargeForImage": "Fotografia dvs. de profil nu poate depăși 1 MB",
"ThisExtensionIsNotAllowedForImage": "Această extensie nu este permisă.",
"FileUploadError": "Eroare de încărcare a fișierului",
"TestimonialSend": "Mulțumesc! ",
"Title": "Titlu",
"TitlePlaceholder": "Dezvoltator software, CTO etc.",
"Characters": "caractere"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json

@ -438,6 +438,32 @@
"Index_Page_Testimonial_2": "ABP Framework — это не только платформа, но и руководство по разработке/управлению проектами, поскольку оно обеспечивает обучение DDD, GenericRepository, DI, Microservice и Modularity. ",
"VideosLoginAndRegisterMessage": "Чтобы иметь возможность смотреть видео, вам необходимо войти в систему.",
"Filter": "Фильтр",
"VideoCourses": "Видео курсы"
"VideoCourses": "Видео курсы",
"TestimonialText": "Ваш отзыв",
"Position": "Позиция",
"ExperienceYear": "Годы опыта",
"FullName": "Полное имя",
"CompanySize": "Размер компании",
"Image": "Изображение вашего профиля",
"TestimonialTitle": "Давайте послушаем ваше свидетельство",
"TestimonialInfo": "То, что говорят наши клиенты, имеет значение! ",
"Country": "Страна",
"TestimonialTextPlaceholder": "Напишите краткую историю о том, как ABP помогла вам создать и реализовать ваш проект. ",
"PositionPlaceholder": "Ваша должность в вашей компании.",
"SelectExperienceYearPlaceholder": "Сколько лет вы занимаетесь программным обеспечением?",
"FullNamePlaceholder": "Ваше полное имя.",
"CompanyNamePlaceholder": "Название вашей компании.",
"SelectCompanySizePlaceholder": "Количество сотрудников",
"ImagePlaceholder": "Ваш имидж.",
"SelectCountryPlaceholder": "Твоя страна.",
"YouAreNotAuthorizedToWriteTestimonial": "Чтобы иметь возможность написать рекомендательное письмо, вам необходимо войти в систему.",
"UnAuthorizeTestimonialInfo": "Ваше мнение имеет значение. Войдите, чтобы поделиться им.",
"TheFileIsTooLargeForImage": "Размер изображения вашего профиля не может превышать 1 МБ.",
"ThisExtensionIsNotAllowedForImage": "Это расширение не разрешено.",
"FileUploadError": "Ошибка загрузки файла",
"TestimonialSend": "Спасибо! ",
"Title": "Заголовок",
"TitlePlaceholder": "Разработчик программного обеспечения, технический директор и т. д.",
"Characters": "Символы"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "ABP Framework nie je len rámec, je to aj návod na vývoj/riadenie projektov, pretože poskytuje školenia DDD, GenericRepository, DI, Microservice, Modularity. Aj keď samotný framework nebudete používať, môžete sa rozvíjať pomocou docs.abp.io, ktoré je dobre a profesionálne pripravené. (OpenIddict, Redis, Quartz atď.) \n Pretože je veľa vecí vopred vytvorených, výrazne to skracuje čas vývoja projektu. (Ako prihlasovacia stránka, spracovanie výnimiek, filtrovanie údajov, zaznamenávanie auditov, lokalizácia, automatický api ovládač atď.) \n Ako príklad z našej aplikácie som použil lokálnu zbernicu udalostí na riadenie zásob. Takže som schopný riadiť pohyby objednávok napísaním skladového manipulátora. \n Je úžasné nestrácať čas pre CreationTime, CreatorId. Plnia sa automaticky.",
"VideosLoginAndRegisterMessage": "Ak chcete pozerať videá, musíte sa prihlásiť. Ak ešte nemáte účet pre hodinky, môžete si ho vytvoriť.",
"Filter": "Filter",
"VideoCourses": "Video kurzy"
"VideoCourses": "Video kurzy",
"TestimonialText": "Tvoje svedectvo",
"Position": "pozícia",
"ExperienceYear": "roky skúseností",
"FullName": "Celé meno",
"CompanySize": "Veľkosť spoločnosti",
"Image": "Váš profilový obrázok",
"TestimonialTitle": "Vypočujme si vaše svedectvo",
"TestimonialInfo": "Záleží na tom, čo hovoria naši zákazníci! ",
"Country": "Krajina",
"TestimonialTextPlaceholder": "Napíšte krátky príbeh o tom, ako vám ABP pomohla vybudovať a zrealizovať váš projekt. ",
"PositionPlaceholder": "Vaša pozícia vo vašej spoločnosti.",
"SelectExperienceYearPlaceholder": "Koľko rokov sa venuješ softvérovým veciam",
"FullNamePlaceholder": "Tvoje celé meno.",
"CompanyNamePlaceholder": "Názov vašej spoločnosti.",
"SelectCompanySizePlaceholder": "Počet zamestnancov",
"ImagePlaceholder": "Váš obraz.",
"SelectCountryPlaceholder": "Tvoja krajina.",
"YouAreNotAuthorizedToWriteTestimonial": "Aby ste mohli napísať posudkový list, musíte sa prihlásiť.",
"UnAuthorizeTestimonialInfo": "Váš názor je dôležitý! ",
"TheFileIsTooLargeForImage": "Váš profilový obrázok nemôže byť väčší ako 1 MB",
"ThisExtensionIsNotAllowedForImage": "Toto rozšírenie nie je povolené.",
"FileUploadError": "Chyba pri nahrávaní súboru",
"TestimonialSend": "Ďakujem! ",
"Title": "Názov",
"TitlePlaceholder": "Vývojár softvéru, CTO atď.",
"Characters": "znaky"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "Ogrodje ABP ni le ogrodje, je tudi vodilo za razvoj/upravljanje projektov, saj zagotavlja usposabljanja DDD, GenericRepository, DI, Microservice, Modularity. Tudi če ne boste uporabljali samega ogrodja, se lahko razvijate z docs.abp.io, ki je dobro in strokovno pripravljen. (OpenIddict, Redis, Quartz itd.) \n Ker je veliko stvari vnaprej zgrajenih, znatno skrajša čas razvoja projekta. (Kot so prijavna stran, obravnavanje izjem, filtriranje-sejanje podatkov, revizijsko beleženje, lokalizacija, samodejni krmilnik api itd.) \n Kot primer iz naše aplikacije sem za nadzor zalog uporabil lokalno vodilo dogodkov. Tako lahko upravljam premike naročil s pisanjem programa za obdelavo zalog. \n Čudovito je ne izgubljati časa za CreationTime, CreatorId. Polnijo se samodejno.",
"VideosLoginAndRegisterMessage": "Za ogled videoposnetkov se morate prijaviti. Če ga še niste, lahko ustvarite račun za uro.",
"Filter": "Filter",
"VideoCourses": "Video tečaji"
"VideoCourses": "Video tečaji",
"TestimonialText": "Vaše pričevanje",
"Position": "Položaj",
"ExperienceYear": "leta izkušenj",
"FullName": "Polno ime",
"CompanySize": "Velikost podjetja",
"Image": "Vaša profilna slika",
"TestimonialTitle": "Slišimo vaše pričevanje",
"TestimonialInfo": "Pomembno je, kaj pravijo naše stranke! ",
"Country": "Država",
"TestimonialTextPlaceholder": "Napišite kratko zgodbo o tem, kako vam je ABP pomagal zgraditi in izvesti vaš projekt. ",
"PositionPlaceholder": "Vaš položaj v vašem podjetju.",
"SelectExperienceYearPlaceholder": "Koliko let se že ukvarjate s programsko opremo",
"FullNamePlaceholder": "Tvoje polno ime.",
"CompanyNamePlaceholder": "Ime vašega podjetja.",
"SelectCompanySizePlaceholder": "Število zaposlenih",
"ImagePlaceholder": "Vaša slika.",
"SelectCountryPlaceholder": "Tvoja država.",
"YouAreNotAuthorizedToWriteTestimonial": "Če želite napisati izjavno pismo, se morate prijaviti.",
"UnAuthorizeTestimonialInfo": "Vaše mnenje je pomembno! ",
"TheFileIsTooLargeForImage": "Vaša profilna slika ne sme biti večja od 1 MB",
"ThisExtensionIsNotAllowedForImage": "Ta razširitev ni dovoljena.",
"FileUploadError": "Napaka pri nalaganju datoteke",
"TestimonialSend": "Hvala vam! ",
"Title": "Naslov",
"TitlePlaceholder": "Razvijalec programske opreme, tehnični direktor itd.",
"Characters": "znaki"
}
}

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

@ -387,6 +387,32 @@
"ApplicationModuleExplanation2": "Modüler uygulamanız için modüller oluşturmak üzere bu seçeneği kullanabilirsiniz.",
"LeptonXLiteThemeInfo": " Modern ve şık bir Bootstrap UI teması. Üretime hazır bir UI temasına sahip olmak istiyorsanız idealdir. Bu en yeni temadır ve varsayılandır.",
"BasicThemeInfo": "Sade Bootstrap renkleri ve stilleri ile minimalist UI teması. Kendi UI temanızı oluşturacaksanız idealdir.",
"Details": "Detaylar"
"Details": "Detaylar",
"TestimonialText": "Referans yazısı",
"Position": "Ünvan",
"ExperienceYear": "Sektörel deneyim",
"FullName": "Ad soyad",
"CompanySize": "Şirket büyüklüğü",
"Image": "Profil resmi",
"TestimonialTitle": "Referanslarınızı paylaşın",
"TestimonialInfo": "Müşterilerimizin ne dediği önemlidir!",
"Country": "Ülke",
"TestimonialTextPlaceholder": "ABP'nin projenizi oluşturmanıza nasıl yardımcı olduğu hakkında kısa bir hikaye yazın.",
"PositionPlaceholder": "Şirketinizdeki pozisyonunuz",
"SelectExperienceYearPlaceholder": "Yazılım sektöründe kaç yıllık tecrübeye sahipsiniz?",
"FullNamePlaceholder": "Tam adınız",
"CompanyNamePlaceholder": "Şirketinizin ismi",
"SelectCompanySizePlaceholder": "Şirketinizin çalışan sayısı",
"ImagePlaceholder": "Profil resminiz",
"SelectCountryPlaceholder": "Ülkeniz",
"YouAreNotAuthorizedToWriteTestimonial": "Referans mektubu yazabilmek için giriş yapmalısınız.",
"UnAuthorizeTestimonialInfo": "Fikriniz bizim için önemli! Paylaşmak için giriş yapınız.",
"TheFileIsTooLargeForImage": "Profil resminiz 1 MB'tan fazla olamaz.",
"ThisExtensionIsNotAllowedForImage": "Bu dosya uzantısınız izin verilmiyor.",
"FileUploadError": "Dosya yükleme hatası",
"TestimonialSend": "Referansınızı paylaştığınız için teşekkürler!",
"Title": "Başlık",
"TitlePlaceholder": "Yazılım Geliştiricisi, CTO vb.",
"Characters": "karakter"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "ABP Framework không chỉ là một framework mà còn là một hướng dẫn để phát triển/quản lý dự án vì nó cung cấp các khóa đào tạo về DDD, GenericRepository, DI, Microservice, moduleity. Ngay cả khi bạn không sử dụng framework, bạn vẫn có thể tự phát triển với docs.abp.io được chuẩn bị kỹ lưỡng và chuyên nghiệp. (OpenIddict, Redis, Quartz, v.v.) \n Bởi vì có nhiều thứ được xây dựng sẵn nên nó rút ngắn đáng kể thời gian phát triển dự án. (Chẳng hạn như trang đăng nhập, xử lý ngoại lệ, lọc dữ liệu, ghi nhật ký kiểm tra, bản địa hóa, bộ điều khiển api tự động, v.v.) \n Là một ví dụ từ ứng dụng của chúng tôi, tôi đã sử dụng Local Event Bus để kiểm soát hàng tồn kho. Vì vậy, tôi có thể quản lý việc di chuyển đơn hàng bằng cách viết trình xử lý hàng tồn kho. \n Thật tuyệt vời khi không lãng phí thời gian cho CreationTime, CreatorId. Chúng được điền tự động.",
"VideosLoginAndRegisterMessage": "Bạn phải đăng nhập để xem video. Bạn có thể tạo một tài khoản để xem nếu chưa có.",
"Filter": "Lọc",
"VideoCourses": "Khóa học video"
"VideoCourses": "Khóa học video",
"TestimonialText": "Lời chứng thực của bạn",
"Position": "Chức vụ",
"ExperienceYear": "Số năm kinh nghiệm",
"FullName": "Họ và tên",
"CompanySize": "Quy mô công ty",
"Image": "Hình ảnh cá nhân của bạn",
"TestimonialTitle": "Hãy nghe lời chứng thực của bạn",
"TestimonialInfo": "Những gì khách hàng của chúng tôi nói là quan trọng! ",
"Country": "Quốc gia",
"TestimonialTextPlaceholder": "Viết một câu chuyện ngắn gọn về cách ABP đã giúp bạn xây dựng và thực hiện dự án của mình. ",
"PositionPlaceholder": "Vị trí của bạn tại công ty của bạn.",
"SelectExperienceYearPlaceholder": "Bạn đã làm việc trong lĩnh vực phần mềm được bao nhiêu năm",
"FullNamePlaceholder": "Tên đầy đủ của bạn.",
"CompanyNamePlaceholder": "Tên công ty của bạn.",
"SelectCompanySizePlaceholder": "Số nhân viên",
"ImagePlaceholder": "Hình ảnh của bạn.",
"SelectCountryPlaceholder": "Quốc gia của bạn.",
"YouAreNotAuthorizedToWriteTestimonial": "Để có thể viết thư chứng thực, bạn phải đăng nhập.",
"UnAuthorizeTestimonialInfo": "Ý kiến của bạn rất quan trọng! ",
"TheFileIsTooLargeForImage": "Ảnh hồ sơ của bạn không thể lớn hơn 1 MB",
"ThisExtensionIsNotAllowedForImage": "Phần mở rộng này không được phép.",
"FileUploadError": "Lỗi tải tập tin lên",
"TestimonialSend": "Cảm ơn! ",
"Title": "Tiêu đề",
"TitlePlaceholder": "Nhà phát triển phần mềm, CTO, v.v.",
"Characters": "Ký tự"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "ABP Framework 不仅仅是一个框架,它还是项目开发/管理的指南,因为它提供了 DDD、GenericRepository、DI、Microservice、Modularity 培训。即使你不打算使用框架本身,你也可以通过 docs.abp.io 进行自我开发,它为你提供了精心准备的专业培训。(OpenIddict、Redis、Quartz 等)。\n因为很多东西都是预置的,所以大大缩短了项目开发时间。(如登录页面、异常处理、数据过滤-播种、审计日志、本地化、自动 api 控制器等)。\n以我们的应用程序为例,我将本地事件总线用于库存控制。因此,我可以通过编写库存处理程序来管理订单的变动。\n创建时间、CreatorId 不会浪费时间,它们会自动填入。它们会自动填充。",
"VideosLoginAndRegisterMessage": "您必须登录后才能观看视频。如果您还没有注册,可以创建一个账户进行观看。",
"Filter": "筛选",
"VideoCourses": "视频课程"
"VideoCourses": "视频课程",
"TestimonialText": "您的感言",
"Position": "位置",
"ExperienceYear": "多年经验",
"FullName": "全名",
"CompanySize": "公司规模",
"Image": "你的头像",
"TestimonialTitle": "让我们听听您的感言",
"TestimonialInfo": "客户的评价很重要!",
"Country": "国家",
"TestimonialTextPlaceholder": "写一个关于 ABP 如何帮助您构建和交付项目的简短故事。 ",
"PositionPlaceholder": "您在公司的职位。",
"SelectExperienceYearPlaceholder": "你从事软件工作多少年了",
"FullNamePlaceholder": "你的全名。",
"CompanyNamePlaceholder": "你的公司名称。",
"SelectCompanySizePlaceholder": "员工人数",
"ImagePlaceholder": "你的形象。",
"SelectCountryPlaceholder": "你的国家。",
"YouAreNotAuthorizedToWriteTestimonial": "为了能够撰写推荐信,您必须登录。",
"UnAuthorizeTestimonialInfo": "您的意见很重要,登录即可分享。",
"TheFileIsTooLargeForImage": "您的个人资料图片不能超过 1 MB",
"ThisExtensionIsNotAllowedForImage": "不允许此扩展。",
"FileUploadError": "文件上传错误",
"TestimonialSend": "谢谢你!",
"Title": "标题",
"TitlePlaceholder": "软件开发人员、CTO等",
"Characters": "字符"
}
}

28
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json

@ -440,6 +440,32 @@
"Index_Page_Testimonial_2": "ABP Framework不只是一個框架,它也是專案開發/管理的指南,因為它提供了DDD、GenericRepository、DI、Microservice、Modularity培訓。即使您不打算使用框架本身,您也可以使用經過充分專業準備的 docs.abp.io 進行開發。 (OpenIddict、Redis、Quartz 等) \n由於許多東西是預先建造的,因此它大大縮短了專案開發時間。 (例如登入頁面、異常處理、資料過濾播種、審核日誌記錄、本地化、自動 api 控制器等) \n作為我們應用程式的範例,我使用本地事件總線進行庫存控制。因此,我可以透過編寫庫存處理程序來管理訂單變更。 \n不浪費時間給CreationTime、CreatorId真是太好了。它們會自動填充。",
"VideosLoginAndRegisterMessage": "您必須登入才能觀看影片。如果您還沒有,您可以建立手錶帳戶。",
"Filter": "篩選",
"VideoCourses": "視訊課程"
"VideoCourses": "視訊課程",
"TestimonialText": "您的感言",
"Position": "位置",
"ExperienceYear": "多年经验",
"FullName": "全名",
"CompanySize": "公司规模",
"Image": "你的头像",
"TestimonialTitle": "让我们听听您的感言",
"TestimonialInfo": "客户的评价很重要!",
"Country": "国家",
"TestimonialTextPlaceholder": "写一个关于 ABP 如何帮助您构建和交付项目的简短故事。 ",
"PositionPlaceholder": "您在公司的职位。",
"SelectExperienceYearPlaceholder": "你从事软件工作多少年了",
"FullNamePlaceholder": "你的全名。",
"CompanyNamePlaceholder": "你的公司名称。",
"SelectCompanySizePlaceholder": "员工人数",
"ImagePlaceholder": "你的形象。",
"SelectCountryPlaceholder": "你的国家。",
"YouAreNotAuthorizedToWriteTestimonial": "为了能够撰写推荐信,您必须登录。",
"UnAuthorizeTestimonialInfo": "您的意见很重要,登录即可分享。",
"TheFileIsTooLargeForImage": "您的个人资料图片不能超过 1 MB",
"ThisExtensionIsNotAllowedForImage": "不允许此扩展。",
"FileUploadError": "文件上传错误",
"TestimonialSend": "谢谢你!",
"Title": "标题",
"TitlePlaceholder": "软件开发人员、CTO等",
"Characters": "字符"
}
}

1
docs/en/Audit-Logging.md

@ -46,6 +46,7 @@ Here, a list of the options you can configure:
* `ApplicationName`: If multiple applications are saving audit logs into a single database, set this property to your application name, so you can distinguish the logs of different applications. If you don't set, it will set from the `IApplicationInfoAccessor.ApplicationName` value, which is the entry assembly name by default.
* `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.
* `SaveEntityHistoryWhenNavigationChanges` (default: `true`): If you set to true, it will save entity changes to audit log when any navigation property changes.
* `Contributors`: A list of `AuditLogContributor` implementations. A contributor is a way of extending the audit log system. See the "Audit Log Contributors" section below.
* `AlwaysLogSelectors`: A list of selectors to save the audit logs for the matched criteria.

BIN
docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 KiB

BIN
docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/2.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 KiB

BIN
docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/3.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

BIN
docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/4.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

BIN
docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/5.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

BIN
docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/51.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/6.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB

BIN
docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/8.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

BIN
docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/9.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

20
docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/POST.md

@ -0,0 +1,20 @@
# 2024 First Community Event.
The first .NET community event in 2024 was successfully held in Shenzhen on January 14, 2024.
This event is co-organized by **Microsoft MVP China Team**, **Microsoft Reactor**, **China .NET Community** and **Shenzhen .NET Club**.
**ABP.IO** continues to strongly support the community, and we have prepared exquisite gifts for participants.
The event includes four wonderful technical lectures to reveal big data and AI's potential opportunities and innovations. It is a transfer of knowledge and a platform for communication and cooperation among technology enthusiasts.
![](1.jpg)
![](2.jpg)
![](3.jpg)
![](4.jpg)
![](51.jpg)
![](5.jpg)
![](6.jpg)
![](8.jpg)
![](9.jpg)
**See you at the next community event!**

170
docs/en/Community-Articles/2024-01-15-Abp-Supports-NET8/Post.md

@ -0,0 +1,170 @@
![cover](cover.png)
# ABP now supports .NET 8
Recently we have published ABP v8 and with this version The ABP Framework and ABP Commercial both supports for .NET 8, aligning itself with the latest enhancements and new features of the ASP.NET's new version 8. This update ensures that developers using ABP can leverage the new features and improvements of .NET 8, enhancing the capability and performance of their applications. With .NET 8 support, ABP 8.0 likely offers improved performance, enhanced security, and greater efficiency, making it a robust choice for building modern web applications. Here's the summary of .NET 8 features and enhancements:
## What's new in .NET 8
### .NET Aspire
[.NET Aspire](https://learn.microsoft.com/en-us/dotnet/aspire/) is a tool to observe and manage distributed web applications. It's still preview version. You can manage your containers, executables, logs, traces and metrics of your running web application. For more information see this article https://devblogs.microsoft.com/dotnet/introducing-dotnet-aspire-simplifying-cloud-native-development-with-dotnet-8/
### Serialization
12 features have been implemented for [System.Text.Json](https://learn.microsoft.com/en-us/dotnet/api/system.text.json) serialization and deserialization library with .NET 8. See these enhancements
* [Built-in support for additional types](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#built-in-support-for-additional-types)
* [Source generator](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#source-generator)
* [Interface hierarchies](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#interface-hierarchies)
* [Naming policies](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#naming-policies)
* [Read-only properties](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#read-only-properties)
* [Disable reflection-based default](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#disable-reflection-based-default)
* [New JsonNode API methods](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#new-jsonnode-api-methods)
* [Non-public members](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#non-public-members)
* [Streaming deserialization APIs](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#streaming-deserialization-apis)
* [WithAddedModifier extension method](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#withaddedmodifier-extension-method)
* [New JsonContent.Create overloads](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#new-jsoncontentcreate-overloads)
* [Freeze a JsonSerializerOptions instance](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#freeze-a-jsonserializeroptions-instance)
### Time abstraction
You may mock time in test scenarios with the new [TimeProvider class](https://learn.microsoft.com/en-us/dotnet/api/system.timeprovider?view=net-8.0) and [ITimer interface](https://learn.microsoft.com/en-us/dotnet/api/system.threading.itimer?view=net-8.0), which add time abstraction functionality.
### UTF8 improvements
The new [IUtf8SpanFormattable](https://learn.microsoft.com/en-us/dotnet/api/system.iutf8spanformattable) interface targets `UTF8` and `Span<byte>` instead of `UTF16` and `Span<char>`. Also the new [Utf8.TryWrite](https://learn.microsoft.com/en-us/dotnet/api/system.text.unicode.utf8.trywrite) methods provide a `UTF8` based counterpart to the existing [MemoryExtensions.TryWrite](https://learn.microsoft.com/en-us/dotnet/api/system.memoryextensions.trywrite) methods, which are UTF16-based.
### Data validation
There are new validation attributes for cloud-native services. The new properties were added to the [RangeAttribute](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.rangeattribute) and [RequiredAttribute](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.requiredattribute) types. See the list below for the new validation attributes:
| New Data Attribute | Description |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [MinimumIsExclusive](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.rangeattribute.minimumisexclusive#system-componentmodel-dataannotations-rangeattribute-minimumisexclusive), [MaximumIsExclusive](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.rangeattribute.maximumisexclusive#system-componentmodel-dataannotations-rangeattribute-maximumisexclusive) | Checks whether bounds are included in the allowable range |
| [Length](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.lengthattribute) | Checks both lower and upper bounds for strings or collections. For example, `[Length(5, 10)]` requires at least 5 elements and at most 10 elements in a collection |
| [Base64String](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.base64stringattribute) | Checks that a string is a valid Base64 format |
| [AllowedValues](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.allowedvaluesattribute), [DeniedValues](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.deniedvaluesattribute) | Checks if values are from the allowed or disallowed list eg: `[AllowedValues("man", "woman", "child")]` |
### Randomness methods
The [System.Random](https://learn.microsoft.com/en-us/dotnet/api/system.random) and [System.Security.Cryptography.RandomNumberGenerator](https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.randomnumbergenerator) types present 2 new approaches to handling randomness.
### Performance-focused types
* The new [System.Collections.Frozen](https://learn.microsoft.com/en-us/dotnet/api/system.collections.frozen) namespace includes the collection types [FrozenDictionary](https://learn.microsoft.com/en-us/dotnet/api/system.collections.frozen.frozendictionary-2) and [FrozenSet](https://learn.microsoft.com/en-us/dotnet/api/system.collections.frozen.frozenset-1).
* Methods like [MemoryExtensions.IndexOfAny](https://learn.microsoft.com/en-us/dotnet/api/system.memoryextensions.indexofany) look for the first occurrence of *any value in the passed collection*.
* The new [System.Text.CompositeFormat](https://learn.microsoft.com/en-us/dotnet/api/system.text.compositeformat) type is useful for optimizing format strings that aren't known at compile time (for example, if the format string is loaded from a resource file).
* New [System.IO.Hashing.XxHash3](https://learn.microsoft.com/en-us/dotnet/api/system.io.hashing.xxhash3) and [System.IO.Hashing.XxHash128](https://learn.microsoft.com/en-us/dotnet/api/system.io.hashing.xxhash128) types provide implementations of the fast XXH3 and XXH128 hash algorithms.
### System.Numerics and System.Runtime.Intrinsics
The [System.Numerics](https://learn.microsoft.com/en-us/dotnet/api/system.numerics) and [System.Runtime.Intrinsics](https://learn.microsoft.com/en-us/dotnet/api/system.runtime.intrinsics) namespaces introduces some hardware improvements with .NET 8. The following structs reimplemented for running with the best performance on ARM64.
[Vector256](https://learn.microsoft.com/en-us/dotnet/api/system.runtime.intrinsics.vector256-1), [Matrix3x2](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix3x2), and [Matrix4x4](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix4x4) have improved
### Metrics
New APIs let you attach key-value pair tags to [Meter](https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.metrics.meter) and [Instrument](https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.metrics.instrument) objects when you create them. Aggregators of published metric measurements can use the tags to differentiate the aggregated values.
### Cryptography
[SHA-3](https://en.wikipedia.org/wiki/SHA-3) (Secure Hash Algorithm 3) is the latest member of the Secure Hash Algorithm family of standards. With .NET 8 SHA-3 is being supported.
### HTTPS proxy support
Before [HttpClient](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient) allows hackers to make [man-in-the-middle attack](https://en.wikipedia.org/wiki/Man-in-the-middle_attack) with .NET 8, it creates an encrypted channel between the client and the proxy so all requests can be handled with full privacy.
### Stream-based ZipFile methods
The new [ZipFile.ExtractToDirectory](https://learn.microsoft.com/en-us/dotnet/api/system.io.compression.zipfile.extracttodirectory) provides a stream containing a zipped file and extract its contents into the filesystem.
### Hosted lifecycle services
Hosted services now have more options for execution during the application lifecycle. [IHostedService](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.ihostedservice) provided `StartAsync` and `StopAsync`, and now [IHostedLifecycleService](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.ihostedlifecycleservice) provides these additional methods:
- [StartingAsync(CancellationToken)](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.ihostedlifecycleservice.startingasync#microsoft-extensions-hosting-ihostedlifecycleservice-startingasync(system-threading-cancellationtoken))
- [StartedAsync(CancellationToken)](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.ihostedlifecycleservice.startedasync#microsoft-extensions-hosting-ihostedlifecycleservice-startedasync(system-threading-cancellationtoken))
- [StoppingAsync(CancellationToken)](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.ihostedlifecycleservice.stoppingasync#microsoft-extensions-hosting-ihostedlifecycleservice-stoppingasync(system-threading-cancellationtoken))
- [StoppedAsync(CancellationToken)](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.ihostedlifecycleservice.stoppedasync#microsoft-extensions-hosting-ihostedlifecycleservice-stoppedasync(system-threading-cancellationtoken))
### Native AOT support
The option to [publish as Native AOT](https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/) was first introduced in .NET 7. Publishing an app with Native AOT creates a fully self-contained version of your app that doesn't need a runtime—everything is included in a single file. .NET 8 brings the following improvements to Native AOT publishing:
| Operating system | .NET 7 | .NET 8 |
| :-------------------------------------- | :------ | :------ |
| Linux x64 (with `-p:StripSymbols=true`) | 3.76 MB | 1.84 MB |
| Windows x64 | 2.85 MB | 1.77 MB |
### Target iOS-like platforms with Native AOT
.NET 8 starts the work to enable Native AOT support for iOS-like platforms. You can now build and run .NET iOS and .NET MAUI applications with Native AOT on the following platforms:
- `ios`
- `iossimulator`
- `maccatalyst`
- `tvos`
- `tvossimulator`
### Performance improvements
.NET 8 includes improvements to code generation and just-in time (JIT) compilation:
- Arm64 performance improvements
- SIMD improvements
- Support for AVX-512 ISA extensions (see [Vector512 and AVX-512](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#vector512-and-avx-512))
- Cloud-native improvements
- JIT throughput improvements
- Loop and general optimizations
- Optimized access for fields marked with [ThreadStaticAttribute](https://learn.microsoft.com/en-us/dotnet/api/system.threadstaticattribute)
- Consecutive register allocation. Arm64 has two instructions for table vector lookup, which require that all entities in their tuple operands are present in consecutive registers.
- JIT/NativeAOT can now unroll and auto-vectorize some memory operations with SIMD, such as comparison, copying, and zeroing, if it can determine their sizes at compile time.
### .NET SDK
This section contains the following subtopics:
- [CLI-based project evaluation](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#cli-based-project-evaluation)
- [Terminal build output](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#terminal-build-output)
- [Simplified output paths](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#simplified-output-paths)
- ['dotnet workload clean' command](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#dotnet-workload-clean-command)
- ['dotnet publish' and 'dotnet pack' assets](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#dotnet-publish-and-dotnet-pack-assets)
- [Template engine](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#template-engine)
- [Source Link](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#source-link)
- [Source-build SDK](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#source-build-sdk)
### ASP.NET composite images
As part of an effort to improve containerization performance, new ASP.NET Docker images are available that have a composite version of the runtime. This composite is built by compiling multiple MSIL assemblies into a single ready-to-run (R2R) output binary. Because these assemblies are embedded into a single image, jitting takes less time, and the startup performance of apps improves. The other big advantage of the composite over the regular ASP.NET image is that the composite images have a smaller size on disk.
### Source-generated COM interop
.NET 8 includes a new source generator that supports interoperating with COM interfaces.
### Minimum support baselines for Linux
The minimum support baselines for Linux have been updated for .NET 8. .NET is built targeting Ubuntu 16.04, for all architectures.
### AOT compilation for Android apps
To decrease app size, .NET and .NET MAUI apps that target Android use *profiled* ahead-of-time (AOT) compilation mode when they're built in Release mode. Profiled AOT compilation affects fewer methods than regular AOT compilation. .NET 8 introduces the `<AndroidStripILAfterAOT>` property that lets you opt-in to further AOT compilation for Android apps to decrease app size even more.
### Code analysis
.NET 8 includes several new code analyzers and fixers to help verify that you're using .NET library APIs correctly and efficiently. The following table summarizes the new analyzers.
### NuGet
Starting in .NET 8, NuGet verifies signed packages on Linux by default. NuGet continues to verify signed packages on Windows as well.
### C# Hot Reload supports modifying generics
Starting in .NET 8, C# Hot Reload [supports modifying generic types and generic methods](https://devblogs.microsoft.com/dotnet/hot-reload-generics/). When you debug console, desktop, mobile, or WebAssembly applications with Visual Studio, you can apply changes to generic classes and generic methods in C# code or Razor pages. For more information, see the [full list of edits supported by Roslyn](https://github.com/dotnet/roslyn/blob/main/docs/wiki/EnC-Supported-Edits.md)
*References:*
* https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8

BIN
docs/en/Community-Articles/2024-01-15-Abp-Supports-NET8/cover.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

10
docs/en/Migration-Guides/Abp-8_0.md

@ -125,9 +125,17 @@ From this version on, instead of injecting the `DaprClient` directly, using the
The documentation is already updated according to this suggestion and can be found at https://docs.abp.io/en/abp/8.0/Dapr/Index. So, if you want to learn more you can check the documentation or see the PR: https://github.com/abpframework/abp/pull/18117.
## Use Newer Versions of the SQL Server (SQL Server 14+)
Starting with EF Core 8.0, EF now generates SQL that is more efficient, but is unsupported on SQL Server 2014 and below. Therefore, if your database provider is SQL Server, then ensure that it's newer than SQL Server 2014. Otherwise, you may get errors due to database creation or while seeding initial data.
The error is similar to: `Microsoft.Data.SqlClient.SqlException (0x80131904)`.
> Check the [Entity Framework Core's Breaking Changes](https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-8.0/breaking-changes#high-impact-changes) documentation for more info.
## Angular UI
# Guards
### Guards
From Angular Documentation;

4
docs/en/Startup-Templates/Application.md

@ -197,7 +197,7 @@ In addition, `.HttpApi.Client.ConsoleTestApp` is a console application (not an a
Test projects are prepared for integration testing;
* It is fully integrated into the ABP framework and all services in your application.
* It uses SQLite in-memory database for EF Core. For MongoDB, it uses the [Mongo2Go](https://github.com/Mongo2Go/Mongo2Go) library.
* It uses SQLite in-memory database for EF Core. For MongoDB, it uses the [EphemeralMongo](https://github.com/asimmon/ephemeral-mongo) library.
* Authorization is disabled, so any application service can be easily used in tests.
You can still create unit tests for your classes which will be harder to write (because you will need to prepare mock/fake objects), but faster to run (because it only tests a single class and skips all the initialization processes).
@ -329,7 +329,7 @@ You should add `routes` property in the `data` object to add a link on the menu
```
In the above example;
* If the user is not logged in, authGuard blocks access and redirects to the login page.
* PermissionGuard checks the user's permission with the `requiredPolicy` property of the `routes` object. If the user is not authorized to access the page, the 403 page appears.
* permissionGuard checks the user's permission with the `requiredPolicy` property of the `routes` object. If the user is not authorized to access the page, the 403 page appears.
* The `name` property of `routes` is the menu link label. A localization key can be defined.
* The `iconClass` property of the `routes` object is the menu link icon class.
* The `requiredPolicy` property of the `routes` object is the required policy key to access the page.

2
docs/en/Startup-Templates/Module.md

@ -110,7 +110,7 @@ In addition, `.HttpApi.Client.ConsoleTestApp` is a console application (not an a
Test projects are prepared for integration testing;
- It is fully integrated to ABP framework and all services in your application.
- It uses SQLite in-memory database for EF Core. For MongoDB, it uses the [Mongo2Go](https://github.com/Mongo2Go/Mongo2Go) library.
- It uses SQLite in-memory database for EF Core. For MongoDB, it uses the [EphemeralMongo](https://github.com/asimmon/ephemeral-mongo) library.
- Authorization is disabled, so any application service can be easily used in tests.
You can still create unit tests for your classes which will be harder to write (because you will need to prepare mock/fake objects), but faster to run (because it only tests a single class and skips all initialization process).

2
docs/en/Testing.md

@ -431,7 +431,7 @@ ABP Provides a complete infrastructure to write integration tests. All the ABP i
#### The Database
The startup template is configured to use **in-memory SQLite** database for the EF Core (for MongoDB, it uses [Mongo2Go](https://github.com/Mongo2Go/Mongo2Go) library). So, all the configuration and queries are performed against a real database and you can even test database transactions.
The startup template is configured to use **in-memory SQLite** database for the EF Core (for MongoDB, it uses [EphemeralMongo](https://github.com/asimmon/ephemeral-mongo) library). So, all the configuration and queries are performed against a real database and you can even test database transactions.
Using in-memory SQLite database has two main advantages;

2
docs/en/Tutorials/Part-4.md

@ -64,7 +64,7 @@ Each project is used to test the related project. Test projects use the followin
{{else if DB=="Mongo"}}
> **[Mongo2Go](https://github.com/Mongo2Go/Mongo2Go)** library is used to mock the MongoDB database. A separate database instance is created and seeded (with the [data seed system](../Data-Seeding.md)) to prepare a fresh database for every test.
> **[EphemeralMongo](https://github.com/asimmon/ephemeral-mongo)** library is used to mock the MongoDB database. A separate database instance is created and seeded (with the [data seed system](../Data-Seeding.md)) to prepare a fresh database for every test.
{{end}}

2
docs/en/UI/Angular/Permission-Management.md

@ -56,7 +56,7 @@ As shown above you can remove elements from DOM with `abpPermission` structural
You can use `permissionGuard` if you want to control authenticated user's permission to access to the route during navigation.
* Import the PermissionGuard from @abp/ng.core.
* Import the permissionGuard from @abp/ng.core.
* Add `canActivate: [permissionGuard]` to your route object.
* Add `requiredPolicy` to the `data` property of your route in your routing module.

4
docs/en/UI/Blazor/Basic-Theme.md

@ -86,10 +86,10 @@ You can simply override the styles in the Global Styles file of your application
See the [Customization / Overriding Components](Customization-Overriding-Components.md) to learn how you can replace components, customize and extend the user interface.
### Overriding the Menu Item
Basic theme supports overriding a single menu item with a custom component. You can create a custom component and call `UseComponent` extension method of Basic Theme in the **MenuContributor**.
Basic theme supports overriding a single menu item with a custom component. You can create a custom component and call `UseComponent` extension method in the **MenuContributor**.
```csharp
using Volo.Abp.AspNetCore.Components.Web.BasicTheme.Navigation;
using Volo.Abp.UI.Navigation;
//...

2
docs/pt-BR/Startup-Templates/Application.md

@ -192,7 +192,7 @@ Além disso, `.HttpApi.Client.ConsoleTestApp`é um aplicativo de console (não u
Projetos de teste são preparados para testes de integração;
- É totalmente integrado à estrutura ABP e a todos os serviços em sua aplicação.
- Ele usa o banco de dados SQLite na memória para o EF Core. Para o MongoDB, ele usa a biblioteca [Mongo2Go](https://github.com/Mongo2Go/Mongo2Go) .
- Ele usa o banco de dados SQLite na memória para o EF Core. Para o MongoDB, ele usa a biblioteca [EphemeralMongo](https://github.com/asimmon/ephemeral-mongo) .
- A autorização está desabilitada, portanto, qualquer serviço de aplicativo pode ser facilmente usado em testes.
Você ainda pode criar testes de unidade para suas classes, que serão mais difíceis de escrever (porque você precisará preparar objetos simulados / falsos), mas mais rápidos de executar (porque apenas testa uma única classe e ignora todo o processo de inicialização).

2
docs/pt-BR/Startup-Templates/Module.md

@ -110,7 +110,7 @@ Além disso, `.HttpApi.Client.ConsoleTestApp`é um aplicativo de console (não u
Projetos de teste são preparados para testes de integração;
- É totalmente integrado à estrutura ABP e a todos os serviços em sua aplicação.
- Ele usa o banco de dados SQLite na memória para o EF Core. Para o MongoDB, ele usa a biblioteca [Mongo2Go](https://github.com/Mongo2Go/Mongo2Go) .
- Ele usa o banco de dados SQLite na memória para o EF Core. Para o MongoDB, ele usa a biblioteca [EphemeralMongo](https://github.com/asimmon/ephemeral-mongo) .
- A autorização está desabilitada, portanto, qualquer serviço de aplicativo pode ser facilmente usado em testes.
Você ainda pode criar testes de unidade para suas classes, que serão mais difíceis de escrever (porque você precisará preparar objetos simulados / falsos), mas mais rápidos de executar (porque apenas testa uma única classe e ignora todo o processo de inicialização).

4
docs/zh-Hans/Startup-Templates/Application.md

@ -209,7 +209,7 @@ ABP有[动态 C# API 客户端](../API/Dynamic-CSharp-API-Clients.md)功能,所
测试项目是用于做集成测试的:
* 它完全集成到ABP框架和应用程序的所有服务.
* 如果数据库提供程序是EF Core,测试项目会使用SQLite内存数据库,如果是MongoDB,它使用[Mongo2Go](https://github.com/Mongo2Go/Mongo2Go)库.
* 如果数据库提供程序是EF Core,测试项目会使用SQLite内存数据库,如果是MongoDB,它使用[EphemeralMongo](https://github.com/asimmon/ephemeral-mongo)库.
* 授权被禁用,任何的应用服务都可以在测试中轻松调用.
你依然可以编写单元测试,只不过它很难写(因为你需要准备mock/fake对象),但它的运行速度更快(因为只测试单个类并跳过所有初始化过程).
@ -314,7 +314,7 @@ ABP 配置模块也已经导入到 `AppModule` 中, 以满足可延迟加载 ABP
}
```
在上面的例子中;
* 如果用户没有登录, AuthGuard 会阻塞访问并重定向到登录页面.
* 如果用户没有登录, authGuard 会阻塞访问并重定向到登录页面.
* permissionGuard 使用 `rotues` 对象的 `requiredPolicy` 属性检查用户的权限. 如果用户未被授权访问该页, 则显示403页.
* `routes``name` 属性是菜单链接标签. 可以定义本地化 key.
* `routes` 对象的 `iconClass` 属性是菜单链接图标类.

2
docs/zh-Hans/Startup-Templates/Module.md

@ -110,7 +110,7 @@ abp new Acme.IssueManagement -t module --no-ui
测试项目是用于做集成测试的:
* 它完全集成到ABP框架和应用程序的所有服务.
* 如果数据库提供程序是EF Core,测试项目会使用SQLite内存数据库,如果是MongoDB,它使用[Mongo2Go](https://github.com/Mongo2Go/Mongo2Go)库.
* 如果数据库提供程序是EF Core,测试项目会使用SQLite内存数据库,如果是MongoDB,它使用[EphemeralMongo](https://github.com/asimmon/ephemeral-mongo)库.
* 授权被禁用,任何的应用服务都可以在测试中轻松调用.
你依然可以编写单元测试,只不过它很难写(因为你需要准备mock/fake对象),但它的运行速度更快(因为只测试单个类并跳过所有初始化过程).

2
docs/zh-Hans/Testing.md

@ -431,7 +431,7 @@ ABP为编写集成测试提供了完整的基础设施. 所有ABP基础设施和
#### 数据库
启动模板使用EF Core配置**内存中的SQLite**数据库(对于MongoDB, 它使用[Mongo2Go](https://github.com/Mongo2Go/Mongo2Go)). 因此, 所有配置和查询都是针对真实数据库执行的, 你甚至可以测试数据库事务.
启动模板使用EF Core配置**内存中的SQLite**数据库(对于MongoDB, 它使用[EphemeralMongo](https://github.com/asimmon/ephemeral-mongo)). 因此, 所有配置和查询都是针对真实数据库执行的, 你甚至可以测试数据库事务.
使用内存中的SQLite数据库有两个主要优点:

114
docs/zh-Hans/Tutorials/Part-10.md

@ -622,79 +622,79 @@ using System.Threading.Tasks;
using Acme.BookStore.Authors;
using Shouldly;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Modularity;
using Volo.Abp.Validation;
using Xunit;
namespace Acme.BookStore.Books
{ {{if DB=="Mongo"}}
[Collection(BookStoreTestConsts.CollectionDefinitionName)]{{end}}
public class BookAppService_Tests : BookStoreApplicationTestBase
namespace Acme.BookStore.Books;
public abstract class BookAppService_Tests<TStartupModule> : BookStoreApplicationTestBase<TStartupModule>
where TStartupModule : IAbpModule
{
private readonly IBookAppService _bookAppService;
private readonly IAuthorAppService _authorAppService;
protected BookAppService_Tests()
{
private readonly IBookAppService _bookAppService;
private readonly IAuthorAppService _authorAppService;
_bookAppService = GetRequiredService<IBookAppService>();
_authorAppService = GetRequiredService<IAuthorAppService>();
}
public BookAppService_Tests()
{
_bookAppService = GetRequiredService<IBookAppService>();
_authorAppService = GetRequiredService<IAuthorAppService>();
}
[Fact]
public async Task Should_Get_List_Of_Books()
{
//Act
var result = await _bookAppService.GetListAsync(
new PagedAndSortedResultRequestDto()
);
//Assert
result.TotalCount.ShouldBeGreaterThan(0);
result.Items.ShouldContain(b => b.Name == "1984" &&
b.AuthorName == "George Orwell");
}
[Fact]
public async Task Should_Get_List_Of_Books()
{
//Act
var result = await _bookAppService.GetListAsync(
new PagedAndSortedResultRequestDto()
);
[Fact]
public async Task Should_Create_A_Valid_Book()
{
var authors = await _authorAppService.GetListAsync(new GetAuthorListDto());
var firstAuthor = authors.Items.First();
//Assert
result.TotalCount.ShouldBeGreaterThan(0);
result.Items.ShouldContain(b => b.Name == "1984" &&
b.AuthorName == "George Orwell");
}
//Act
var result = await _bookAppService.CreateAsync(
new CreateUpdateBookDto
{
AuthorId = firstAuthor.Id,
Name = "New test book 42",
Price = 10,
PublishDate = System.DateTime.Now,
Type = BookType.ScienceFiction
}
);
[Fact]
public async Task Should_Create_A_Valid_Book()
{
var authors = await _authorAppService.GetListAsync(new GetAuthorListDto());
var firstAuthor = authors.Items.First();
//Assert
result.Id.ShouldNotBe(Guid.Empty);
result.Name.ShouldBe("New test book 42");
}
//Act
var result = await _bookAppService.CreateAsync(
[Fact]
public async Task Should_Not_Create_A_Book_Without_Name()
{
var exception = await Assert.ThrowsAsync<AbpValidationException>(async () =>
{
await _bookAppService.CreateAsync(
new CreateUpdateBookDto
{
AuthorId = firstAuthor.Id,
Name = "New test book 42",
Name = "",
Price = 10,
PublishDate = System.DateTime.Now,
PublishDate = DateTime.Now,
Type = BookType.ScienceFiction
}
);
});
//Assert
result.Id.ShouldNotBe(Guid.Empty);
result.Name.ShouldBe("New test book 42");
}
[Fact]
public async Task Should_Not_Create_A_Book_Without_Name()
{
var exception = await Assert.ThrowsAsync<AbpValidationException>(async () =>
{
await _bookAppService.CreateAsync(
new CreateUpdateBookDto
{
Name = "",
Price = 10,
PublishDate = DateTime.Now,
Type = BookType.ScienceFiction
}
);
});
exception.ValidationErrors
.ShouldContain(err => err.MemberNames.Any(m => m == "Name"));
}
exception.ValidationErrors
.ShouldContain(err => err.MemberNames.Any(m => m == "Name"));
}
}
```

78
docs/zh-Hans/Tutorials/Part-4.md

@ -67,7 +67,7 @@
{{else if DB=="Mongo"}}
> **[Mongo2Go](https://github.com/Mongo2Go/Mongo2Go)**库用于模拟MongoDB数据库. 创建一个单独的数据库实例并使用[数据种子系统](../Data-Seeding.md)初始化种子数据,为每个测试准备一个新的数据库.
> **[EphemeralMongo](https://github.com/asimmon/ephemeral-mongo)**库用于模拟MongoDB数据库. 创建一个单独的数据库实例并使用[数据种子系统](../Data-Seeding.md)初始化种子数据,为每个测试准备一个新的数据库.
{{end}}
@ -85,36 +85,70 @@ using System.Linq;
using System.Threading.Tasks;
using Shouldly;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Modularity;
using Volo.Abp.Validation;
using Xunit;
namespace Acme.BookStore.Books
{ {{if DB=="Mongo"}}
[Collection(BookStoreTestConsts.CollectionDefinitionName)]{{end}}
public class BookAppService_Tests : BookStoreApplicationTestBase
{
private readonly IBookAppService _bookAppService;
namespace Acme.BookStore.Books;
public BookAppService_Tests()
{
_bookAppService = GetRequiredService<IBookAppService>();
}
public abstract class BookAppService_Tests<TStartupModule> : BookStoreApplicationTestBase<TStartupModule>
where TStartupModule : IAbpModule
{
private readonly IBookAppService _bookAppService;
[Fact]
public async Task Should_Get_List_Of_Books()
{
//Act
var result = await _bookAppService.GetListAsync(
new PagedAndSortedResultRequestDto()
);
protected BookAppService_Tests()
{
_bookAppService = GetRequiredService<IBookAppService>();
}
//Assert
result.TotalCount.ShouldBeGreaterThan(0);
result.Items.ShouldContain(b => b.Name == "1984");
}
[Fact]
public async Task Should_Get_List_Of_Books()
{
//Act
var result = await _bookAppService.GetListAsync(
new PagedAndSortedResultRequestDto()
);
//Assert
result.TotalCount.ShouldBeGreaterThan(0);
result.Items.ShouldContain(b => b.Name == "1984");
}
}
````
{{if DB == "EF"}}
添加 `BookAppService_Tests` 的实现类,命名为 `EfCoreBookAppService_Tests` ,并放置在 `EntityFrameworkCore\Applications\Books` 命名空间 (文件夹)下,在 `Acme.BookStore.EntityFrameworkCore.Tests` 项目中:
````csharp
using Acme.BookStore.Books;
using Xunit;
namespace Acme.BookStore.EntityFrameworkCore.Applications.Books;
[Collection(BookStoreTestConsts.CollectionDefinitionName)]
public class EfCoreBookAppService_Tests : BookAppService_Tests<BookStoreEntityFrameworkCoreTestModule>
{
}
````
{{end}}
{{if DB == "Mongo"}}
添加 `BookAppService_Tests` 的实现类,命名为`MongoDBBookAppService_Tests` ,并放置在 `MongoDb\Applications\Books` 命名空间 (文件夹)下,在 `Acme.BookStore.MongoDB.Tests` 项目中:
````csharp
using Acme.BookStore.MongoDB;
using Acme.BookStore.Books;
using Xunit;
namespace Acme.BookStore.MongoDb.Applications.Books;
[Collection(BookStoreTestConsts.CollectionDefinitionName)]
public class MongoDBBookAppService_Tests : BookAppService_Tests<BookStoreMongoDbTestModule>
{
}
````
{{end}}
* 测试方法 `Should_Get_List_Of_Books` 直接使用 `BookAppService.GetListAsync` 方法来获取用户列表,并执行检查.
* 我们可以安全地检查 "1984" 这本书的名称,因为我们知道这本书可以在数据库中找到,我们已将其添加到种子数据中.

139
docs/zh-Hans/Tutorials/Part-8.md

@ -497,77 +497,112 @@ namespace Acme.BookStore
using System;
using System.Threading.Tasks;
using Shouldly;
using Volo.Abp.Modularity;
using Xunit;
namespace Acme.BookStore.Authors
{ {{if DB=="Mongo"}}
[Collection(BookStoreTestConsts.CollectionDefinitionName)]{{end}}
public class AuthorAppService_Tests : BookStoreApplicationTestBase
namespace Acme.BookStore.Authors;
public abstract class AuthorAppService_Tests<TStartupModule> : BookStoreApplicationTestBase<TStartupModule>
where TStartupModule : IAbpModule
{
private readonly IAuthorAppService _authorAppService;
protected AuthorAppService_Tests()
{
private readonly IAuthorAppService _authorAppService;
_authorAppService = GetRequiredService<IAuthorAppService>();
}
public AuthorAppService_Tests()
{
_authorAppService = GetRequiredService<IAuthorAppService>();
}
[Fact]
public async Task Should_Get_All_Authors_Without_Any_Filter()
{
var result = await _authorAppService.GetListAsync(new GetAuthorListDto());
[Fact]
public async Task Should_Get_All_Authors_Without_Any_Filter()
{
var result = await _authorAppService.GetListAsync(new GetAuthorListDto());
result.TotalCount.ShouldBeGreaterThanOrEqualTo(2);
result.Items.ShouldContain(author => author.Name == "George Orwell");
result.Items.ShouldContain(author => author.Name == "Douglas Adams");
}
result.TotalCount.ShouldBeGreaterThanOrEqualTo(2);
result.Items.ShouldContain(author => author.Name == "George Orwell");
result.Items.ShouldContain(author => author.Name == "Douglas Adams");
}
[Fact]
public async Task Should_Get_Filtered_Authors()
{
var result = await _authorAppService.GetListAsync(
new GetAuthorListDto {Filter = "George"});
[Fact]
public async Task Should_Get_Filtered_Authors()
{
var result = await _authorAppService.GetListAsync(
new GetAuthorListDto {Filter = "George"});
result.TotalCount.ShouldBeGreaterThanOrEqualTo(1);
result.Items.ShouldContain(author => author.Name == "George Orwell");
result.Items.ShouldNotContain(author => author.Name == "Douglas Adams");
}
result.TotalCount.ShouldBeGreaterThanOrEqualTo(1);
result.Items.ShouldContain(author => author.Name == "George Orwell");
result.Items.ShouldNotContain(author => author.Name == "Douglas Adams");
}
[Fact]
public async Task Should_Create_A_New_Author()
{
var authorDto = await _authorAppService.CreateAsync(
new CreateAuthorDto
{
Name = "Edward Bellamy",
BirthDate = new DateTime(1850, 05, 22),
ShortBio = "Edward Bellamy was an American author..."
}
);
authorDto.Id.ShouldNotBe(Guid.Empty);
authorDto.Name.ShouldBe("Edward Bellamy");
}
[Fact]
public async Task Should_Create_A_New_Author()
[Fact]
public async Task Should_Not_Allow_To_Create_Duplicate_Author()
{
await Assert.ThrowsAsync<AuthorAlreadyExistsException>(async () =>
{
var authorDto = await _authorAppService.CreateAsync(
await _authorAppService.CreateAsync(
new CreateAuthorDto
{
Name = "Edward Bellamy",
BirthDate = new DateTime(1850, 05, 22),
ShortBio = "Edward Bellamy was an American author..."
Name = "Douglas Adams",
BirthDate = DateTime.Now,
ShortBio = "..."
}
);
});
}
authorDto.Id.ShouldNotBe(Guid.Empty);
authorDto.Name.ShouldBe("Edward Bellamy");
}
//TODO: Test other methods...
}
````
[Fact]
public async Task Should_Not_Allow_To_Create_Duplicate_Author()
{
await Assert.ThrowsAsync<AuthorAlreadyExistsException>(async () =>
{
await _authorAppService.CreateAsync(
new CreateAuthorDto
{
Name = "Douglas Adams",
BirthDate = DateTime.Now,
ShortBio = "..."
}
);
});
}
{{if DB == "EF"}}
添加 `AuthorAppService_Tests` 的实现类,命名为 `EfCoreAuthorAppService_Tests` ,并放置在 `EntityFrameworkCore\Applications\Authors` 命名空间 (文件夹)下,在 `Acme.BookStore.EntityFrameworkCore.Tests` 项目中:
````csharp
using Acme.BookStore.Authors;
using Xunit;
namespace Acme.BookStore.EntityFrameworkCore.Applications.Authors;
[Collection(BookStoreTestConsts.CollectionDefinitionName)]
public class EfCoreAuthorAppService_Tests : AuthorAppService_Tests<BookStoreEntityFrameworkCoreTestModule>
{
//TODO: Test other methods...
}
}
````
{{end}}
{{if DB == "Mongo"}}
添加 `AuthorAppService_Tests` 的实现类,命名为 `MongoDBAuthorAppService_Tests` ,并放置在 `MongoDb\Applications\Authors` 命名空间 (文件夹)下,在 `Acme.BookStore.MongoDB.Tests` 项目中:
````csharp
using Acme.BookStore.MongoDB;
using Acme.BookStore.Authors;
using Xunit;
namespace Acme.BookStore.MongoDb.Applications.Authors;
[Collection(BookStoreTestConsts.CollectionDefinitionName)]
public class MongoDBAuthorAppService_Tests : AuthorAppService_Tests<BookStoreMongoDbTestModule>
{
}
````
{{end}}
完成应用服务方法的测试, 它们应该很容易理解.

46
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs

@ -22,11 +22,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form;
public class AbpDynamicFormTagHelperService : AbpTagHelperService<AbpDynamicFormTagHelper>
{
private readonly HtmlEncoder _htmlEncoder;
private readonly IHtmlGenerator _htmlGenerator;
private readonly IServiceProvider _serviceProvider;
private readonly IStringLocalizer<AbpUiResource> _localizer;
private List<ModelExpression> _models = new();
protected HtmlEncoder HtmlEncoder { get; }
protected IHtmlGenerator HtmlGenerator { get; }
protected IServiceProvider _serviceProvider { get; }
protected IStringLocalizer<AbpUiResource> Localizer { get; }
protected List<ModelExpression> Models = new();
public AbpDynamicFormTagHelperService(
HtmlEncoder htmlEncoder,
@ -34,15 +34,15 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService<AbpDynamicForm
IServiceProvider serviceProvider,
IStringLocalizer<AbpUiResource> localizer)
{
_htmlEncoder = htmlEncoder;
_htmlGenerator = htmlGenerator;
HtmlEncoder = htmlEncoder;
HtmlGenerator = htmlGenerator;
_serviceProvider = serviceProvider;
_localizer = localizer;
Localizer = localizer;
}
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
_models = GetModels(context, output);
Models = GetModels(context, output);
var list = InitilizeFormGroupContentsContext(context, output);
NormalizeTagMode(context, output);
@ -64,7 +64,7 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService<AbpDynamicForm
protected virtual async Task ConvertToMvcForm(TagHelperContext context, TagHelperOutput output)
{
var formTagHelper = new FormTagHelper(_htmlGenerator)
var formTagHelper = new FormTagHelper(HtmlGenerator)
{
Action = TagHelper.Action,
Controller = TagHelper.Controller,
@ -159,7 +159,7 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService<AbpDynamicForm
protected virtual async Task ProcessFieldsAsync(TagHelperContext context, TagHelperOutput output)
{
foreach (var model in _models)
foreach (var model in Models)
{
if (IsSelectGroup(context, model))
{
@ -176,21 +176,21 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService<AbpDynamicForm
}
}
private async Task ProcessDateGroupAsync(TagHelperContext context, TagHelperOutput output, ModelExpression model)
protected virtual async Task ProcessDateGroupAsync(TagHelperContext context, TagHelperOutput output, ModelExpression model)
{
var abpDateTagHelper = GetDateGroupTagHelper(context, output, model);
await abpDateTagHelper.RenderAsync(new TagHelperAttributeList(), context, _htmlEncoder, "div", TagMode.StartTagAndEndTag);
await abpDateTagHelper.RenderAsync(new TagHelperAttributeList(), context, HtmlEncoder, "div", TagMode.StartTagAndEndTag);
}
private AbpTagHelper GetDateGroupTagHelper(TagHelperContext context, TagHelperOutput output, ModelExpression model)
protected virtual AbpTagHelper GetDateGroupTagHelper(TagHelperContext context, TagHelperOutput output, ModelExpression model)
{
return IsDateRangeGroup(model.ModelExplorer)
? GetAbpDateRangeInputTagHelper(context, output, model)
: GetAbpDateInputTagHelper(model);
}
private AbpTagHelper GetAbpDateInputTagHelper(ModelExpression model)
protected virtual AbpTagHelper GetAbpDateInputTagHelper(ModelExpression model)
{
var abpDateInputTagHelper = _serviceProvider.GetRequiredService<AbpDatePickerTagHelper>();
abpDateInputTagHelper.AspFor = model;
@ -199,7 +199,7 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService<AbpDynamicForm
return abpDateInputTagHelper;
}
private AbpTagHelper GetAbpDateRangeInputTagHelper(TagHelperContext context, TagHelperOutput output, ModelExpression model)
protected virtual AbpTagHelper GetAbpDateRangeInputTagHelper(TagHelperContext context, TagHelperOutput output, ModelExpression model)
{
var modelAttribute = model.ModelExplorer.GetAttribute<DateRangePickerAttribute>()!;
@ -223,13 +223,13 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService<AbpDynamicForm
return abpDateRangeInputTagHelper;
}
private bool TryToGetOtherDateModel(ModelExpression model, string pickerId, out ModelExplorer? otherModel)
protected virtual bool TryToGetOtherDateModel(ModelExpression model, string pickerId, out ModelExplorer? otherModel)
{
otherModel = _models.Select(x => x.ModelExplorer).SingleOrDefault(x => x != model.ModelExplorer && x.GetAttribute<DateRangePickerAttribute>()?.PickerId == pickerId);
otherModel = Models.Select(x => x.ModelExplorer).SingleOrDefault(x => x != model.ModelExplorer && x.GetAttribute<DateRangePickerAttribute>()?.PickerId == pickerId);
return otherModel != null;
}
private static bool IsDateRangeGroup(ModelExplorer modelModelExplorer)
protected virtual bool IsDateRangeGroup(ModelExplorer modelModelExplorer)
{
return modelModelExplorer.GetAttribute<DateRangePickerAttribute>() != null;
}
@ -245,7 +245,7 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService<AbpDynamicForm
{
var abpSelectTagHelper = GetSelectGroupTagHelper(context, output, model);
await abpSelectTagHelper.RenderAsync(new TagHelperAttributeList(), context, _htmlEncoder, "div", TagMode.StartTagAndEndTag);
await abpSelectTagHelper.RenderAsync(new TagHelperAttributeList(), context, HtmlEncoder, "div", TagMode.StartTagAndEndTag);
}
protected virtual AbpTagHelper GetSelectGroupTagHelper(TagHelperContext context, TagHelperOutput output, ModelExpression model)
@ -280,10 +280,10 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService<AbpDynamicForm
{
var abpButtonTagHelper = _serviceProvider.GetRequiredService<AbpButtonTagHelper>();
var attributes = new TagHelperAttributeList { new TagHelperAttribute("type", "submit") };
abpButtonTagHelper.Text = _localizer["Submit"];
abpButtonTagHelper.Text = Localizer["Submit"];
abpButtonTagHelper.ButtonType = AbpButtonType.Primary;
return await abpButtonTagHelper.RenderAsync(attributes, context, _htmlEncoder, "button", TagMode.StartTagAndEndTag);
return await abpButtonTagHelper.RenderAsync(attributes, context, HtmlEncoder, "button", TagMode.StartTagAndEndTag);
}
protected virtual async Task ProcessInputGroupAsync(TagHelperContext context, TagHelperOutput output, ModelExpression model)
@ -293,7 +293,7 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService<AbpDynamicForm
abpInputTagHelper.ViewContext = TagHelper.ViewContext;
abpInputTagHelper.DisplayRequiredSymbol = TagHelper.RequiredSymbols ?? true;
await abpInputTagHelper.RenderAsync(new TagHelperAttributeList(), context, _htmlEncoder, "div", TagMode.StartTagAndEndTag);
await abpInputTagHelper.RenderAsync(new TagHelperAttributeList(), context, HtmlEncoder, "div", TagMode.StartTagAndEndTag);
}
protected virtual List<ModelExpression> GetModels(TagHelperContext context, TagHelperOutput output)

52
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelperService.cs

@ -68,7 +68,6 @@ public abstract class AbpDatePickerBaseTagHelperService<TTagHelper> : AbpTagHelp
protected readonly IAbpTagHelperLocalizer TagHelperLocalizer;
protected virtual string TagName { get; set; } = "abp-date-picker";
protected IStringLocalizer<AbpUiResource> L { get; }
protected InputTagHelper InputTagHelper { get; set; }
protected abstract TagHelperOutput TagHelperOutput { get; set; }
protected AbpDatePickerBaseTagHelperService(IJsonSerializer jsonSerializer, IHtmlGenerator generator,
@ -81,8 +80,6 @@ public abstract class AbpDatePickerBaseTagHelperService<TTagHelper> : AbpTagHelp
ServiceProvider = serviceProvider;
L = l;
TagHelperLocalizer = tagHelperLocalizer;
InputTagHelper = new InputTagHelper(Generator) { InputTypeName = "text" };
}
protected virtual T? GetAttribute<T>() where T : Attribute
@ -95,19 +92,7 @@ public abstract class AbpDatePickerBaseTagHelperService<TTagHelper> : AbpTagHelp
public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
TagHelperOutput = new TagHelperOutput("input", GetInputAttributes(context, output), (_, _) => Task.FromResult<TagHelperContent>(new DefaultTagHelperContent()));
InputTagHelper.ViewContext = TagHelper.ViewContext;
if (!TagHelper.Name.IsNullOrEmpty())
{
InputTagHelper.Name = TagHelper.Name;
}
if (!TagHelper.Value.IsNullOrEmpty())
{
InputTagHelper.Value = TagHelper.Value;
}
TagHelperOutput = TagHelperOutput = new TagHelperOutput("input", GetInputAttributes(context, output), (_, _) => Task.FromResult<TagHelperContent>(new DefaultTagHelperContent()));
AddDisabledAttribute(TagHelperOutput);
AddAutoFocusAttribute(TagHelperOutput);
@ -131,7 +116,7 @@ public abstract class AbpDatePickerBaseTagHelperService<TTagHelper> : AbpTagHelp
var labelContent = await GetLabelAsHtmlAsync(context, output, TagHelperOutput);
var infoContent = GetInfoAsHtml(context, output, TagHelperOutput);
var validationContent = await GetValidationAsHtmlAsync(context, output);
var validationContent = await GetValidationAsHtmlAsync(context, TagHelperOutput);
var inputGroup = new TagHelperOutput("div",
new TagHelperAttributeList(new[] { new TagHelperAttribute("class", "input-group") }),
@ -270,12 +255,12 @@ public abstract class AbpDatePickerBaseTagHelperService<TTagHelper> : AbpTagHelp
if (options.MinDate != null)
{
attrList.Add("data-min-date", options.MinDate);
attrList.Add("data-min-date", options.MinDate?.ToString("O"));
}
if (options.MaxDate != null)
{
attrList.Add("data-max-date", options.MaxDate);
attrList.Add("data-max-date", options.MaxDate?.ToString("O"));
}
if (options.MaxSpan != null)
@ -754,16 +739,37 @@ public abstract class AbpDatePickerBaseTagHelperService<TTagHelper> : AbpTagHelp
};
}
protected abstract Task<string> GetValidationAsHtmlAsync(TagHelperContext context, TagHelperOutput output);
protected virtual Task<string> GetValidationAsHtmlAsync(TagHelperContext context, TagHelperOutput output)
{
var @for = GetModelExpression();
if (@for == null)
{
return Task.FromResult(string.Empty);
}
return GetValidationAsHtmlByInputAsync(context, output, @for);
}
protected virtual async Task<string> GetValidationAsHtmlByInputAsync(TagHelperContext context,
TagHelperOutput output,
[NotNull]InputTagHelper inputTag)
[NotNull]ModelExpression @for)
{
var validationMessageTagHelper =
new ValidationMessageTagHelper(Generator) { For = inputTag.For, ViewContext = TagHelper.ViewContext };
new ValidationMessageTagHelper(Generator) { For = @for, ViewContext = TagHelper.ViewContext };
var attributeList = new TagHelperAttributeList { { "class", "text-danger col-auto" } };
var attributeList = new TagHelperAttributeList { { "class", "text-danger" } };
if(!output.Attributes.TryGetAttribute("name", out var nameAttribute) || nameAttribute == null || nameAttribute.Value == null)
{
if (nameAttribute != null)
{
output.Attributes.Remove(nameAttribute);
}
nameAttribute = new TagHelperAttribute("name", "date_" + Guid.NewGuid().ToString("N"));
output.Attributes.Add(nameAttribute);
}
attributeList.Add("data-valmsg-for", nameAttribute.Value);
return await validationMessageTagHelper.RenderAsync(attributeList, context, Encoder, "span",
TagMode.StartTagAndEndTag);

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

Loading…
Cancel
Save