在 Blazor 应用中如何使用 Bootstrap 下拉菜单来选择本地化?

Zhi Lv - MSFT 32,021 信誉分 Microsoft 供应商
2024-03-19T02:08:24.9333333+00:00

我看过大量的教程和博客文章,但它们都建议使用选择控件来更改语言。它们都没有解释如何使用 HREF 实现本地化。 您能否至少给我提示或链接,以帮助我弄清楚如何使用 <a href=“de/page”>German</a>更改语言? 除了这个功能之外,我已经实现了与本地化有关的所有内容。 谢谢

注意: 此问题总结整理于:Localization in Blazor using bootstrap dropdown menu.

ASP.NET Core
ASP.NET Core
.NET Framework 中一套用于生成 Web 应用程序和 XML Web 服务的技术。
22 个问题
Blazor
Blazor
一个免费的开源 Web 框架,使开发人员能够使用 Microsoft 开发的 C# 和 HTML 创建 Web 应用。
15 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. XuDong Peng-MSFT 10,176 信誉分 Microsoft 供应商
    2024-03-19T06:12:18.88+00:00

    你好,

    基于这篇文章,我写了一个示例:

    注册相关服务器,并在program.cs中添加中间件:

    builder.Services.AddRazorComponents()
        .AddInteractiveServerComponents();
    builder.Services.AddLocalization();
    builder.Services.AddControllers();
    builder.Services.AddBlazorBootstrap();
    .........
    var supportedCultures = new[] { "en-US", "es-CL" };
    var localizationOptions = new RequestLocalizationOptions()
        .SetDefaultCulture(supportedCultures[0])
        .AddSupportedCultures(supportedCultures)
        .AddSupportedUICultures(supportedCultures);
    app.UseRequestLocalization(localizationOptions);
    app.MapControllers();
    

    添加控制器:

    [Route("[controller]/[action]")]
    public class CultureController : Controller
    {
        public IActionResult Set(string culture, string redirectUri)
        {
            if (culture != null)
            {
                HttpContext.Response.Cookies.Append(
                    CookieRequestCultureProvider.DefaultCookieName,
                    CookieRequestCultureProvider.MakeCookieValue(
                        new RequestCulture(culture, culture)));
            }
            return LocalRedirect(redirectUri);
        }
    }
    

    添加CultureSelector 组件:

    @using System.Globalization
    @inject NavigationManager Navigation
    
    <Dropdown>
        <DropdownToggleButton Color="ButtonColor.Secondary"> Select your locale</DropdownToggleButton>
        <DropdownMenu>
            @foreach (var culture in supportedCultures)
            {
                if (CultureInfo.CurrentCulture.Name!=culture.Name)
                {
                    <DropdownItem Type="ButtonType.Link" To="@CultureUri[culture.Name]">@culture.DisplayName</DropdownItem>
                }
                else
                {
                    <DropdownItem Type="ButtonType.Button" Active=true>@culture.DisplayName</DropdownItem>
                }
            }
        </DropdownMenu>
    </Dropdown>
    
    @code
    {
        private CultureInfo[] supportedCultures = new[]
        {
            new CultureInfo("en-US"),
            new CultureInfo("es-CL"),
        };
        private string redirecturi { get; set; }
        private Dictionary<string, string> CultureUri { get; set; } = new();
        protected override void OnInitialized()
        {
            redirecturi  = Uri.EscapeDataString(new Uri(Navigation.Uri)
                        .GetComponents(UriComponents.PathAndQuery, UriFormat.Unescaped));
            foreach (var culture in supportedCultures)
            {
                var cultureEscaped = Uri.EscapeDataString(culture.Name);
                CultureUri.Add(culture.Name, $"Culture/Set?culture={cultureEscaped}&redirectUri={redirecturi}");
            }
        }
    }
    

    将组件添加到 MainLayout 组件中(注意,该组件应该是一个静态页面,以便您使用 href 实现本地化):

    <main>        
        <div class="top-row px-4">
            <CultureSelector/>
        </div>
        <article class="content px-4">
            @Body
        </article>
    </main>
    

    按照本文档添加所需的 css/js 文件。 修改 Home 组件并添加资源文件:

    @using Microsoft.Extensions.Localization
    @inject IStringLocalizer<Home> Loc
    <PageTitle>Home</PageTitle>
    <h1>@Loc["Hi"]</h1>
    Welcome to your new app.
    

    现在,当我第一次看到组件时: User's image

    选择西班牙语后:

    User's image

    对于 Blazor WebAssembly应用,可以参考文档的这一部分。


    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。 注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    1 个人认为此答案很有帮助。
    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助