ASP.NET Core 区域本地化

4

大家好,我正在参与一个本地化项目。我们正在处理不同的区域,需要为支持的语言创建资源文件。 默认结构(Resources/Controllers/controllername.culture.resx)与微软文档一样工作得很好。 我们想知道其余区域的目录结构。我们查阅了一些文档,但没有找到相关内容。 感谢大家。


欢迎来到 Stack Overflow,请花些时间阅读 Stack Overflow 新手指南如何提出好问题?。同时请提供您编写的与问题相关的代码(您也可以阅读 如何创建一个最小、完整且可验证的示例)。 - Dipiks
3个回答

8

对于C#对象(而不是视图)的资源文件,它们的解析是通过其所在的命名空间进行的。它们相对于MVC本地化初始化期间设置的ResourcePath

假设您已将ResourcesPath设置为“ Resources”,则您可以这样设置:

services.AddLocalization(s => s.ResourcesPath = "Resources");

并且您有一个没有领域的HomeController,如下所示:

namespace WebApp.Controllers
{
   public class HomeController : Controller
   {
     ...
   }
}

如果您的资源文件位于文件夹 Resources>Controllers>HomeController.{culture}.resx 中,则将选择它们。

对于区域中的控制器,您可以像这样更改不同的命名空间:

namespace WebApp.Admin.Controllers
{
   [Area("admin")]
   public class HomeController : Controller
   {
     ...
   }
}

注意,这是管理区域的HomeController
在这种情况下,此特定控制器的资源文件可以位于以下文件夹中: Resources>Admin>Controllers>HomeController.{culture}.resx 或者可以具有以下命名:
Admin.Controllers.HomeController.{culture}.resx 这适用于ASP.NET Core 1.1.0。我已经通过区域更新了AspNetCore.Identity.Localization项目。

1
如果您正在使用区域功能,只需将controllername.culture.resx文件放在Controllers目录中(确切地说是与controllername.cs文件相同的位置,不要在任何地方创建“Resources”目录)。
我建议您先使用简单的resx文件(controllername.resx)进行测试。如果可以正常工作,再扩展为controllername.culture.resx文件。

1

也许这个答案有点晚了,但我还是想参与一下。首先,将主路径设置为 Resource 是不足以进行配置的。如果你有区域,必须按照以下步骤操作:

  1. 将主目录设置为 Resource(或者你自己定义的名称)
  2. 在 Resource 中创建与 Resources/Areas/Identity/Pages/ 相同深度的文件夹路径,并在此处放置你的 resx 文件。
  3. 不要忘记本地化是基于模型层次结构工作的,因此在创建文件夹层次结构时,请使用模型命名空间路径。

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