Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 在ASP.Net Core 2.2中更改语言后,url中的区域性名称不会更改_Asp.net Core_Model View Controller_Localization_Asp.net Core 2.1 - Fatal编程技术网

Asp.net core 在ASP.Net Core 2.2中更改语言后,url中的区域性名称不会更改

Asp.net core 在ASP.Net Core 2.2中更改语言后,url中的区域性名称不会更改,asp.net-core,model-view-controller,localization,asp.net-core-2.1,Asp.net Core,Model View Controller,Localization,Asp.net Core 2.1,我按照教程为我的应用程序添加语言开关 我的问题是,在使用“选择”框切换到另一种语言后,浏览器URL中的区域性名称不会更改 逐步: 我运行应用程序,它以默认的匈牙利语(hu)打开 我使用选择框将语言更改为英语,页面内容更改为英语,但在浏览器url中我再次看到/hu hu/。它没有变为“/en US/” 我的清除代码: Startup.cs 公共类启动 { public void配置服务(IServiceCollection服务) { #区域Cookies 配置(选项=> { options.c

我按照教程为我的应用程序添加语言开关

我的问题是,在使用“选择”框切换到另一种语言后,浏览器URL中的区域性名称不会更改

逐步:

  • 我运行应用程序,它以默认的匈牙利语(hu)打开
  • 我使用选择框将语言更改为英语,页面内容更改为英语,但在浏览器url中我再次看到/hu hu/。它没有变为“/en US/”
我的清除代码:

Startup.cs

公共类启动
{
public void配置服务(IServiceCollection服务)
{
#区域Cookies
配置(选项=>
{
options.checkApprovered=context=>true;
options.MinimumSameSitePolicy=SameSiteMode.None;
});
#端区
#区域定位
services.AddLocalization(options=>options.ResourcesPath=“”);
services.TryAddSingleton();
服务。配置(
选项=>
{
var supportedCultures=新列表
{
新文化信息(“美国”),
新文化资讯(“hu hu”),
};
options.DefaultRequestCulture=新的RequestCulture(区域性:“hu-hu”,ui区域性:“hu-hu”);
options.SupportedCultures=SupportedCultures;
options.supportedCultures=supportedCultures;
服务。AddSingleton(选项);
});
#端区
services.AddMvc()
#区域定位
.AddViewLocalization(LanguageViewLocationExpanderFormat.后缀)
.AddDataAnnotationsLocalization(o=>
{
o、 DataAnnotationLocalizerProvider=(类型,工厂)=>
{
返回工厂。创建(typeof(SharedResources));
};
})
#端区
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
公共无效配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{
app.UseCookiePolicy();
#区域多语言
var localizationOptions=app.ApplicationServices.GetService();
app.UseRequestLocalization(localizationOptions.Value);
#端区
//围绕UseMvc的多语言和文化注入
app.UseRouter(路由=>
{
routes.mapmidlewarerout(“{culture=hu}/{*mvcRoute}”,subApp=>
{
#区域多语言
子应用程序UseRequestLocalization(localizationOptions.Value);
#端区
子应用程序使用MVC(mvcRoutes=>
{
mvcRoutes.MapRoute(
姓名:“隐居处”,
模板:“{culture=hu}/{action=Index}/{id?}”,
默认值:新建{controller=“Home”}
);
mvcRoutes.MapRoute(
名称:“默认”,
模板:“{culture=hu}/{controller=Home}/{action=Index}/{id?}”);
});
});
});
}
}
局部视图

@using System.Globalization;
@using Microsoft.AspNetCore.Builder;
@using Microsoft.Extensions.Options;
@using Microsoft.AspNetCore.Localization;

@inject IOptions<RequestLocalizationOptions> LocOps

@{
    var requestCulture = Context.Features.Get<IRequestCultureFeature>();
    var cultureItems = LocOps.Value.SupportedUICultures
        .Select(c => new SelectListItem { Value = c.Name, Text = c.DisplayName })
        .ToList();
}

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



问题在哪里?谢谢你的帮助

这里的文章作者:我想你实际上需要转到另一个URL,它不会为你更改它。好的,但如果我导航到任何其他链接(锚定标记、按钮),默认语言(“hu-hu”)将出现在浏览器链接中,页面内容将为英语。我不知道我该怎么做。这不仅仅是一个路由问题?或者您必须在每个链接中指定区域性?我只是想它不会自动拾取它(尽管如果它会更好),如果它不能自动拾取,我会感到惊讶。文章作者:我猜你需要实际转到另一个URL,它不会为你更改它。好的,但是如果我导航到任何其他链接(锚定标记,按钮)默认语言('hu-hu')将显示在浏览器链接中,页面内容将为英语。我不知道我该怎么做。这不仅仅是一个路由问题?或者您必须在每个链接中指定区域性?我只是在想,它不是自动拾取的(尽管这样会更好),如果它不能自动拾取,我会感到惊讶。