在 .net core 的全球化中,我应该将本地化程序传递给 ViewData 吗?

3
@using Microsoft.AspNetCore.Mvc.Localization

@inject IViewLocalizer Localizer

@{
    ViewData["Title"] = Localizer["HomeTitle"];
}

<h1 class="page-header">@ViewData["HomeTitle"]</h1>

这是微软关于全球化和本地化教程的摘录。
我觉得奇怪的是,我必须将Localizer传递给ViewData,而不是直接使用。
<h1 class="page-head">@Localizer["HomeTitle"]</h1>

这个有什么特殊用途吗?还是只是由Microsoft制造出来的麻烦?


1
您可以简单地使用语法@Localizer["StringToTranslate"],无需将其传递给ViewData - Métoule
未来请写源代码而不是使用截图。 - Métoule
@Métoule 是的,我的想法和你一样。但是我是 .net core 的初学者,所以不确定我能否像这样做。 - Melon NG
@Métoule 好的,谢谢。 - Melon NG
你可以查看https://learn.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-2.1#view-localization获取有关全球化的更多信息。 - Métoule
1个回答

2
我认为这个例子过于复杂了:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-2.1#view-localization 可能他们的想法是:在布局中使用ViewData["Title"]来设置html头部中的<title/>
因此,在视图中放置ViewData["Title"] = Localizer["HomeTitle"];,主布局就可以使用ViewData["Title"]
所以你可以有一个layout.cshtml:
<head><title>@ViewData["Title"]</title></head>

homepage.cshtml:

ViewData["Title"] = Localizer["HomeTitle"];

contact.cshtml:

ViewData["Title"] = Localizer["ContactTitle"];

因此,您可以设置不同的标题,但仍然在layout.cshtml文件中定义页面布局/ html(从而抽象地重复使用代码)。

结论

 ViewData["Title"] = Localizer["HomeTitle"];

这不是必需的,但它是为布局页面提供信息/特定翻译的一种方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接