对于 Blazor Server 项目,我尝试启用浏览到 URL 如下的本地化页面:
https://example.com/en/counter
(英语)
https://example.com/fr/counter
(法语)
https://example.com/es/counter
(西班牙语)
我的项目中的页面已成功本地化为 URL 中的文化,但我不断收到图像中显示的错误。
此错误似乎导致计数器按钮不响应单击事件。
该项目可以在以下位置找到:
https://github.com/tsutomua/blazor/tree/main/LocalizationTestApp
由于 CultureTemplatePageRouteModelConvention 动态添加的区域性名称,Blazor 文件似乎未正确加载。
// Add services to the container.
builder.Services.AddRazorPages(options =>
{
// decorate all page routes with {culture} e.g. @page "/{culture}..."
// https://www.learnrazorpages.com/razor-pages/routing#register-additional-routes
// Commenting out the following line causes pages not to be localized, but the bottom error message disappears.
options.Conventions.Add(new CultureTemplatePageRouteModelConvention());
});
如果有一个好的方法来加载 Blazor 文件、CSS 文件和其他代码文件,同时为常规页面(例如计数器页面)添加文化标签,问题可能会得到解决。任何帮助将不胜感激。
我参考的页面: .NET core Razor 中基于 URL 的本地化 - 如何操作? 在 Razor + Blazor 组件中使用 URL 路径进行本地化
此错误似乎导致计数器按钮无响应 到点击事件。
您已在此处设置了 ServerPrerender 模式
<component type="typeof(App)" render-mode="ServerPrerendered" />
静态渲染是可以的,但是在交互服务端渲染时无法建立signalr连接,更多详情,请参阅这个文档
如果有加载Blazor文件、CSS文件和其他代码的好方法 文件,同时为常规页面添加文化标签(例如 柜台页面)
您可以将路由约束应用于您的razor页面/razor组件,以避免路由模式与静态文件冲突
例如:
public class CultureTemplatePageRouteModelConvention: IPageRouteModelConvention
{
public void Apply(PageRouteModel model)
{
foreach (SelectorModel selector in model.Selectors)
{
string template = selector.AttributeRouteModel.Template;
if (template.StartsWith("MicrosoftIdentity")) continue; // Skip MicrosoftIdentity pages
// Prepend {culture}/ to the page routes allow for route-based localization
selector.AttributeRouteModel.Order = -1;
//selector.AttributeRouteModel.Template = AttributeRouteModel.CombineTemplates("{culture:cultureConstraint}", template);
// Prepend the /{culture?}/ route value to allow for route-based localization
selector.AttributeRouteModel.Template = AttributeRouteModel.CombineTemplates("{culture:cultureConstraint}", template);
}
}
}
index.razor:
@page "/{culture:nonfile?}"
另外,当你点击导航栏时,文化不会改变,因为不会发送http请求,中间件
app.UseRequestLocalization();
不会被执行
您可以按照文档的这一部分来切换语言