URL 中包含文化代码的 Blazor 应用本地化失败

问题描述 投票:0回答:1

对于 Blazor Server 项目,我尝试启用浏览到 URL 如下的本地化页面:

https://example.com/en/counter
(英语)
https://example.com/fr/counter
(法语)
https://example.com/es/counter
(西班牙语)

我的项目中的页面已成功本地化为 URL 中的文化,但我不断收到图像中显示的错误。

enter image description here

此错误似乎导致计数器按钮不响应单击事件。

该项目可以在以下位置找到:

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 路径进行本地化

asp.net-mvc asp.net-mvc-4 blazor localization blazor-server-side
1个回答
0
投票

此错误似乎导致计数器按钮无响应 到点击事件。

您已在此处设置了 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();
不会被执行 您可以按照文档的这一部分来切换语言

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.