【问题标题】:Asp.net core 1.1 localization, doesn't change cultureAsp.net core 1.1 本地化,不改变文化
【发布时间】:2017-09-02 00:33:34
【问题描述】:

我遵循了有关 Asp.Net Core 本地化的 Microsoft 教程,但我遇到了一个问题,除非我更改 Startup.cs 文件中的默认文化,否则文化不会改变。

// Startup.cs - ConfigureServices Method
services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; });

services.AddMvc()
    .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
    .AddDataAnnotationsLocalization();



// Startup.cs - Configure Method
var supportedCultures = new List<CultureInfo>
{            
    new CultureInfo("en-GB"),
    new CultureInfo("fr-FR"),
    ...
};

app.UseRequestLocalization(new RequestLocalizationOptions()
{
    DefaultRequestCulture = new RequestCulture("en-GB"),            
    SupportedCultures = supportedCultures,
    SupportedUICultures = supportedCultures,
    RequestCultureProviders = new List<IRequestCultureProvider>()
});


// HomeController
public IActionResult SetLanguage(string culture, string returnUrl)
    {
        Response.Cookies.Append(
            CookieRequestCultureProvider.DefaultCookieName,
            CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
            new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) }
        );

        return LocalRedirect(returnUrl);
    }

我想使用锚链接更改语言,例如:

&lt;a asp-area="" asp-controller="Home" asp-action="SetLanguage" asp-route-culture="fr-FR" asp-route-returnUrl="@Context.Request.Path"&gt;FR&lt;/a&gt;

当我单击链接成功设置 cookie 时,页面重新加载但本地化文本保持不变。当我在 Startup.cs 文件中更改 DefaultRequestCulture 时,文化看起来很好(这意味着我的 Resx 文件被正确命名等)

那么我怎样才能根据被点击的链接来改变语言呢?

编辑 如果有人可以提供帮助,我仍在寻找解决方案

编辑 2 我做了一个新的解决方案,但问题仍然出现在 VS 2017 中,如果有人可以更好地查看并解释我做错了什么,我将我的 VS 项目上传到 Github 上https://github.com/adonis07/Localization

编辑 3
我能够通过在我的解决方案 Microsoft.AspNetCore.Authentication.Cookies 中添加该 nuget 包来解决问题。现在文化运作正常。

【问题讨论】:

标签: asp.net-core asp.net-core-1.1


【解决方案1】:

您是否正在配置线程以在代码中的某处更改为特定的文化?像这样的东西,无论你在哪里阅读语言 cookie:

CultureInfo ci = new CultureInfo(culture);
        System.Threading.Thread.CurrentThread.CurrentUICulture = ci;
        System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);

【讨论】:

  • 不,教程没有提到类似的东西,我认为文化提供者会通过检查是否在每个请求上设置了 3 个选项(Url、Cookie、Header)中的任何一个来处理这个问题。
  • 这是 ASP.NET Core 1.1 网站中的默认方法吗?到目前为止我还没有做任何事情,我正在等待推荐的更改语言的方法
猜你喜欢
  • 2017-01-06
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 2020-11-29
  • 1970-01-01
相关资源
最近更新 更多