本地化(全局改变文化)



我尝试在asp.net core中使用razor页面和PageModels(没有控制器)更改语言,但问题是我的本地化仅适用于页面/索引页面。当我试图在另一个页面上切换语言时,它是由他们的OnPost方法处理的,并得到NullPointer。

<div class="dropdown-menu" aria-labelledby="navbarDropdown">

@foreach (var culture in cultureItems)
{

<form id="selectLanguage" asp-page="/" asp-route-returnUrl="@Context.Request.Path"
method="post" class="form-horizontal" role="form">
<input class="dropdown-item  waves-effect waves-light" type="submit" name="culture" value="@culture.Value" />

</form>
}
</div>

我的处理器方法:

public void OnPost(string culture, string returnUrl)
{
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) }
);
return LocalRedirect(returnUrl ?? "/");
}

首先,我强烈建议我们看一下这个

如果所有这些信息让我们不知所措,……那么我想简要地说一下会有帮助的。

全球化和本地化通常旨在为应用程序提供多种语言服务,为了实现这一目标,它使用

  • 一个检测请求语言的方法

Http通信被设计为无状态的,因此,没有内置的方法来跟踪诸如语言之类的东西。它必须是附加到Http请求的某种信息,通常在Accept-Language标头中。如果我们想使用cookie,我们可以使用它。

  • 处理该语言的机制

在我们知道请求语言之后,使用一些东西让应用知道,整个请求的当前文化应该是满足语言的东西。在这种情况下,一个中间件负责确保CurrentCultureCurrentUICulture被设置为我们想要的。

  • 应用程序用来翻译内容的一些资源

通常,使用一些扩展名为resx的资源文件,将其视为字典,我们在其中定义apple,以我们的站点将支持的许多其他语言。然后机制会处理剩下的。

我敢说,这是几乎所有框架都遵循的一般思路。如何实现在上述文件中有明确的表述。给点时间,事情就会好起来的。

相关内容

  • 没有找到相关文章

最新更新