diff --git a/src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj b/src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj
index fa78fb8d6f8..f7a080fcc5d 100644
--- a/src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj
+++ b/src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj
@@ -66,6 +66,7 @@
+
diff --git a/src/BootstrapBlazor.Server/Components/Samples/Regions.razor b/src/BootstrapBlazor.Server/Components/Samples/Regions.razor
new file mode 100644
index 00000000000..672066d9d88
--- /dev/null
+++ b/src/BootstrapBlazor.Server/Components/Samples/Regions.razor
@@ -0,0 +1,14 @@
+@page "/region"
+@inject IStringLocalizer Localizer
+
+@Localizer["RegionTitle"]
+
+@Localizer["RegionDescription"]
+
+
+
+
+
+
diff --git a/src/BootstrapBlazor.Server/Components/Samples/Regions.razor.cs b/src/BootstrapBlazor.Server/Components/Samples/Regions.razor.cs
new file mode 100644
index 00000000000..7cbe5fd6d81
--- /dev/null
+++ b/src/BootstrapBlazor.Server/Components/Samples/Regions.razor.cs
@@ -0,0 +1,14 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the Apache 2.0 License
+// See the LICENSE file in the project root for more information.
+// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone
+
+namespace BootstrapBlazor.Server.Components.Samples;
+
+///
+/// 行政区域选择器示例
+///
+public partial class Regions
+{
+ private string _value = "";
+}
diff --git a/src/BootstrapBlazor.Server/Extensions/MenusLocalizerExtensions.cs b/src/BootstrapBlazor.Server/Extensions/MenusLocalizerExtensions.cs
index c9125636c8e..fecbb33fd98 100644
--- a/src/BootstrapBlazor.Server/Extensions/MenusLocalizerExtensions.cs
+++ b/src/BootstrapBlazor.Server/Extensions/MenusLocalizerExtensions.cs
@@ -451,6 +451,12 @@ void AddForm(DemoMenuItem item)
Url = "floating-label"
},
new()
+ {
+ IsNew = true,
+ Text = Localizer["Region"],
+ Url = "region"
+ },
+ new()
{
Text = Localizer["ListGroup"],
Url = "list-group"
diff --git a/src/BootstrapBlazor.Server/Extensions/ServiceCollectionSharedExtensions.cs b/src/BootstrapBlazor.Server/Extensions/ServiceCollectionSharedExtensions.cs
index b23d3171495..14971debe08 100644
--- a/src/BootstrapBlazor.Server/Extensions/ServiceCollectionSharedExtensions.cs
+++ b/src/BootstrapBlazor.Server/Extensions/ServiceCollectionSharedExtensions.cs
@@ -94,6 +94,9 @@ public static IServiceCollection AddBootstrapBlazorServices(this IServiceCollect
// 增加 JuHe 定位服务
services.AddBootstrapBlazorJuHeIpLocatorService();
+ // 增加 IRegionService
+ services.AddBootstrapBlazorRegionService();
+
// 增加 PetaPoco ORM 数据服务操作类
// 需要时打开下面代码
//services.AddPetaPoco(option =>
diff --git a/src/BootstrapBlazor.Server/Locales/en-US.json b/src/BootstrapBlazor.Server/Locales/en-US.json
index e115937e170..80661b6c3d2 100644
--- a/src/BootstrapBlazor.Server/Locales/en-US.json
+++ b/src/BootstrapBlazor.Server/Locales/en-US.json
@@ -4872,7 +4872,8 @@
"OpcDaService": "OpcDaServer",
"Navbar": "Navbar",
"TaskDashBoard": "TaskDashBoard",
- "Dom2ImageService": "IDom2HtmlService"
+ "Dom2ImageService": "IDom2HtmlService",
+ "Region": "Region Selector"
},
"BootstrapBlazor.Server.Components.Samples.Table.TablesHeader": {
"TablesHeaderTitle": "Header grouping function",
@@ -7220,5 +7221,11 @@
"Dom2ImageButtonText": "Convert",
"Dom2ImageDownloadText": "Download",
"Dom2ImageFullText": "Capture"
+ },
+ "BootstrapBlazor.Server.Components.Samples.Regions": {
+ "RegionTitle": "Region",
+ "RegionDescription": "A simple region cascade selector, provide 4 levels Chinese administrative division data",
+ "RegionNormalTitle": "Basic usage",
+ "RegionNormalIntro": "Use grouping to switch the selection mode for displaying administrative areas"
}
}
diff --git a/src/BootstrapBlazor.Server/Locales/zh-CN.json b/src/BootstrapBlazor.Server/Locales/zh-CN.json
index a427eff475c..aee8048bebd 100644
--- a/src/BootstrapBlazor.Server/Locales/zh-CN.json
+++ b/src/BootstrapBlazor.Server/Locales/zh-CN.json
@@ -4872,7 +4872,8 @@
"OpcDaService": "OpcDaServer 服务",
"Navbar": "导航栏 Navbar",
"TaskDashBoard": "任务管理器 TaskDashBoard",
- "Dom2ImageService": "节点转图片服务 IDom2HtmlService"
+ "Dom2ImageService": "节点转图片服务 IDom2HtmlService",
+ "Region": "行政区域选择器 Region"
},
"BootstrapBlazor.Server.Components.Samples.Table.TablesHeader": {
"TablesHeaderTitle": "表头分组功能",
@@ -7220,5 +7221,11 @@
"Dom2ImageButtonText": "转换",
"Dom2ImageDownloadText": "下载",
"Dom2ImageFullText": "长截图"
+ },
+ "BootstrapBlazor.Server.Components.Samples.Regions": {
+ "RegionTitle": "Region 行政区域选择器",
+ "RegionDescription": "提供 4 级行政区划选择器",
+ "RegionNormalTitle": "基本用法",
+ "RegionNormalIntro": "使用分组切换显示行政区域的选择模式"
}
}
diff --git a/src/BootstrapBlazor.Server/docs.json b/src/BootstrapBlazor.Server/docs.json
index a8dc7c870d7..9da3d392a1f 100644
--- a/src/BootstrapBlazor.Server/docs.json
+++ b/src/BootstrapBlazor.Server/docs.json
@@ -255,7 +255,8 @@
"navbar": "Navbars",
"task-board": "TaskBoard",
"modbus-factory": "Modbus\\ModbusFactories",
- "serial-port-factory": "SerialPorts\\SerialPortFactories"
+ "serial-port-factory": "SerialPorts\\SerialPortFactories",
+ "region": "Regions"
},
"video": {
"table": "BV1ap4y1x7Qn?p=1",
diff --git a/src/BootstrapBlazor/Components/DateTimePicker/PopoverDropdownBase.cs b/src/BootstrapBlazor/Components/DateTimePicker/PopoverDropdownBase.cs
index 63ba34323a2..d7042b9a125 100644
--- a/src/BootstrapBlazor/Components/DateTimePicker/PopoverDropdownBase.cs
+++ b/src/BootstrapBlazor/Components/DateTimePicker/PopoverDropdownBase.cs
@@ -39,6 +39,7 @@ public abstract class PopoverDropdownBase : ValidateBase
/// 获得 CustomClass 字符串
///
protected virtual string? CustomClassString => CssBuilder.Default(CustomClass)
+ .AddClass("popover-region")
.AddClass("shadow", ShowShadow)
.Build();
}
diff --git a/src/BootstrapBlazor/Localization/Json/JsonStringLocalizer.cs b/src/BootstrapBlazor/Localization/Json/JsonStringLocalizer.cs
index 90b642d3ded..dec2d53af79 100644
--- a/src/BootstrapBlazor/Localization/Json/JsonStringLocalizer.cs
+++ b/src/BootstrapBlazor/Localization/Json/JsonStringLocalizer.cs
@@ -107,7 +107,7 @@ public override LocalizedString this[string name]
private string? GetStringFromJson(string name)
{
// get string from json localization file
- var localizerStrings = MegerResolveLocalizers(CacheManager.GetAllStringsByTypeName(Assembly, typeName));
+ var localizerStrings = MergeResolveLocalizers(CacheManager.GetAllStringsByTypeName(Assembly, typeName));
var cacheKey = $"name={name}&culture={CultureInfo.CurrentUICulture.Name}";
string? ret = null;
if (!_missingManifestCache.ContainsKey(cacheKey))
@@ -143,7 +143,7 @@ public override LocalizedString this[string name]
if (baseType != type)
{
var baseAssembly = baseType.Assembly;
- var localizerStrings = MegerResolveLocalizers(CacheManager.GetAllStringsByTypeName(baseAssembly, baseType.FullName!));
+ var localizerStrings = MergeResolveLocalizers(CacheManager.GetAllStringsByTypeName(baseAssembly, baseType.FullName!));
var l = localizerStrings.Find(i => i.Name == name);
if (l is { ResourceNotFound: false })
{
@@ -154,7 +154,7 @@ public override LocalizedString this[string name]
return ret;
}
- private List MegerResolveLocalizers(IEnumerable? localizerStrings)
+ private List MergeResolveLocalizers(IEnumerable? localizerStrings)
{
var localizers = new List(CacheManager.GetTypeStringsFromResolve(typeName));
if (localizerStrings != null)
@@ -174,7 +174,7 @@ private void HandleMissingResourceItem(string name)
_missingManifestCache.TryAdd($"name={name}&culture={CultureInfo.CurrentUICulture.Name}", null);
}
- private List? _allLocalizerdStrings;
+ private List? _allLocalizedStrings;
///
/// 获取当前语言的所有资源信息
@@ -183,15 +183,15 @@ private void HandleMissingResourceItem(string name)
///
public override IEnumerable GetAllStrings(bool includeParentCultures)
{
- if (_allLocalizerdStrings == null)
+ if (_allLocalizedStrings == null)
{
var items = GetAllStringsFromService()
?? GetAllStringsFromBase()
?? GetAllStringsFromJson();
- _allLocalizerdStrings = MegerResolveLocalizers(items);
+ _allLocalizedStrings = MergeResolveLocalizers(items);
}
- return _allLocalizerdStrings;
+ return _allLocalizedStrings;
// 1. 从注入服务中获取所有资源信息
// get all strings from the other inject service