首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SupportedUICultures不会显示所有区域性

SupportedUICultures不会显示所有区域性
EN

Stack Overflow用户
提问于 2018-08-30 03:59:46
回答 1查看 1.5K关注 0票数 6

我遵循this文档在我的ASP.NET Core应用程序中实现本地化,并尝试在页脚中显示一个select,其中包含我的应用程序支持的所有语言。

因此,我按照文档的建议创建了一个名为_SelectLanguagepartial的文件:

代码语言:javascript
复制
@using Microsoft.AspNetCore.Builder
@using Microsoft.AspNetCore.Http.Features
@using Microsoft.AspNetCore.Localization
@using Microsoft.AspNetCore.Mvc.Localization
@using Microsoft.Extensions.Options

@inject IViewLocalizer Localizer
@inject IOptions<RequestLocalizationOptions> LocOptions

@{
    var requestCulture = Context.Features.Get<IRequestCultureFeature>();
    var cultureItems = LocOptions.Value.SupportedUICultures
        .Select(c => new SelectListItem { Value = c.Name, Text = c.DisplayName })
        .ToList();
    var returnUrl = string.IsNullOrEmpty(Context.Request.Path) ? "~/" : $"~{Context.Request.Path.Value}";
}

<div title="@Localizer["Request culture provider:"] @requestCulture?.Provider?.GetType().Name">
    <form id="selectLanguage" asp-controller="Language"
          asp-action="SetLanguage" asp-route-returnUrl="@returnUrl"
          method="post" class="form-horizontal" role="form">
        <label asp-for="@requestCulture.RequestCulture.UICulture.Name">@Localizer["Language:"]</label>
        <select name="culture" onchange="this.form.submit();"
                asp-for="@requestCulture.RequestCulture.UICulture.Name"
                asp-items="cultureItems"></select>
    </form>
</div>

我用下面的方式把它加载到页脚:

代码语言:javascript
复制
@await  Html.PartialAsync("_SelectLanguagePartial")

这很有效,但问题是我只得到了italian语言,但我应该也得到英语,实际上,在我指定这些语言的Configure方法中:

代码语言:javascript
复制
var supportedCultures = new[]
{
    new CultureInfo("it-IT"),
    new CultureInfo("en-EN")
};

app.UseRequestLocalization(new RequestLocalizationOptions
{
    DefaultRequestCulture = new RequestCulture("it-IT"),
    SupportedCultures = supportedCultures,
    SupportedUICultures = supportedCultures
});

正如您所看到的,我将italian设置为默认语言,但我也有english语言,我还尝试在en-US中进行编辑,但在select中我只能得到italian语言。

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-30 09:36:42

对于@inject IOptions<RequestLocalizationOptions> LocOptions,它从RequestLocalizationOptions检索区域性,您需要在ConfigureServices中配置RequestLocalizationOptions,如下所示:

代码语言:javascript
复制
        public void ConfigureServices(IServiceCollection services)
    {
        services.AddLocalization(options => options.ResourcesPath = "Resources");
        services.Configure<CookiePolicyOptions>(options =>
        {
            //rest code

        services.AddMvc()
                .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        services.Configure<RequestLocalizationOptions>(options =>
        {
            var supportedCultures = new[]
            {
                new CultureInfo("en-US"),
                new CultureInfo("fr"),
                new CultureInfo("ar-YE")
            };

            // State what the default culture for your application is. This will be used if no specific culture
            // can be determined for a given request.
            options.DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US");

            // You must explicitly state which cultures your application supports.
            // These are the cultures the app supports for formatting numbers, dates, etc.
            options.SupportedCultures = supportedCultures;

            // These are the cultures the app supports for UI strings, i.e. we have localized resources for.
            options.SupportedUICultures = supportedCultures;
        });
    }

您可以通过RequestLocalizationOptions进行配置,然后在Configure中使用它,如下所示,以避免重复代码。

代码语言:javascript
复制
var locOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
        app.UseRequestLocalization(locOptions.Value);
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52085239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档