簡體   English   中英

使用<a>元素或按鈕而不是</a>本地化<select>

[英]Localization using <a> element or button instead of <select>

我的網站有一個本地化例程,用於兩種語言,使用下拉選擇元素來選擇工作正常的語言。 我想使用標簽或按鈕而不是下拉選擇元素。 我一直在試圖弄清楚如何將文化參數傳遞給操作方法以設置文化 cookie,該 cookie 是使用選擇元素的名稱標簽助手完成的。 使用標簽或按鈕設置語言的最佳方法是什么。 您的幫助將不勝感激。

 public class HomeController : Controller
 {
        private readonly IHtmlLocalizer<HomeController> _localizer;
        private readonly ILogger<HomeController> _logger;

        public HomeController(ILogger<HomeController> logger, IHtmlLocalizer<HomeController> localizer)
        {
            _logger = logger;
            _localizer = localizer;
        }
       
        public IActionResult Index()
        {
            ViewData["Home"] = _localizer["Home"];
            return View();
        }

        [HttpPost]
        public IActionResult CultureManagement(string culture, string returnUrl)
        {
            Response.Cookies.Append(CookieRequestCultureProvider.DefaultCookieName, CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
                new CookieOptions { Expires = DateTimeOffset.Now.AddDays(30) });

            return LocalRedirect(returnUrl);
        }
 }

使用選擇下拉菜單

@using Microsoft.AspNetCore.Localization
@inject Microsoft.Extensions.Options.IOptions<Microsoft.AspNetCore.Builder.RequestLocalizationOptions> locOptions

@{
    
    var culture = Context.Features.Get<Microsoft.AspNetCore.Localization.IRequestCultureFeature>();
    var cultureList = locOptions.Value.SupportedUICultures!.Select(x => new SelectListItem { Value = x.Name, Text = localizer.GetString(x.Name) }).ToList();
    var returnUrl = string.IsNullOrWhiteSpace(Context.Request.Path) ? "~/" : $"~{Context.Request.Path.Value}{Context.Request.QueryString}";
}
<div>
    <form asp-action="CultureManagement" asp-controller="Home" method="post" asp-route-returnUrl="@returnUrl">
        <i class="fa fa-globe"></i>
        <select id="DropDownList" class="selectLang" name="culture" asp-for="@culture!.RequestCulture.UICulture.Name" asp-items="cultureList" onchange="this.form.submit();"></select>
    </form>
</div>

使用 Button 或元素

<div>
    <form id="cultureform" asp-controller="Home" asp-action="CultureManagement" asp-route-returnUrl="@returnUrl" method="post" >
        @if (culture!.RequestCulture.UICulture.Name == "en-US")
        {
            
            <button type="button" class="btn btn-link" name="culture" asp-for="@culture.RequestCulture.UICulture.Name" onclick="this.form.submit();">Fr</button>
        }
        else
        {
           
            <button type="button" class="btn btn-link" name="culture" asp-for="@culture.RequestCulture.UICulture.Name" onclick="this.form.submit();">En</button>
        }
    </form>
</div>

為什么使用post請求來設置文化? 只需讓它get並使用<a><button>

    public IActionResult OnGetCultureManagement(string culture, string returnUrl)
    {
        // ...
    }

使用<a>

<a herf="/?handler=CultureManagement&culture=en&returnUrl=returnUrl">EN</a>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM