我设法通过语言下拉列表的部分视图来做到这一点。
这是我的_Languages.cshtml 部分视图:
@using Microsoft.AspNetCore.Builder
@using Microsoft.Extensions.Options
@inject IOptions<RequestLocalizationOptions> LocOps
@{
var requestCulture = CultureInfo.CurrentCulture;
var supportedCultures = LocOps.Value.SupportedUICultures
.Select(c => new SelectListItem
{
Value = $"{c.Name}",
Text = $"{c.DisplayName}"
}).ToList();
var routeData = new Dictionary<string, string>();
foreach (var r in ViewContext.RouteData.Values)
{
routeData.Add(r.Key, r.Value.ToString());
}
foreach(var qs in Context.Request.Query)
{
routeData.Add(qs.Key, qs.Value);
}
}
<div class="dropdown">
<a class="btn-sm btn-default border border-secondary dropdown-toggle" href="#" role="button" id="dropdownLang" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@($"{requestCulture.DisplayName}")
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownLang">
@foreach (var culture in supportedCultures)
{
if (culture.Value.ToLower() != requestCulture.Name.ToLower())
{
// replace {culture} value with the one from the list
routeData["culture"] = culture.Value;
<a class="dropdown-item small"
asp-all-route-data="@routeData">
@culture.Text
</a>
}
}
</div>
</div>
顺便说一句,我正在使用引导程序 4。
更新
我创建了一个 nuget 包,它用一行代码创建了一个语言导航菜单:)
PM > Install-Package LazZiya.RazorLibrary -Version 1.0.1
<partial name="/Areas/LazZiya/Pages/_LanguageMenu.cshtml" />
与 .NetCote 2.1 或更高版本以及 bootstrap 4 兼容
更新 2 (14.04.2019)
我创建了一个标签助手,它支持当前 dotnet 核心框架的所有版本,以根据支持的文化或手动选择的文化列表创建语言导航。
安装 nuget 包(它还包含另一个有用的标签助手):
Install-Package LazZiya.TagHelpers -Version 2.0.0
将标签助手添加到 _ViewImports.cshtml
@addTagHelper *, LazZiya.TagHelpers
创建语言导航:
<language-nav view-context="ViewContext"></language-nav>
更多详情请访问project website,见live demos