【发布时间】:2018-07-08 20:34:30
【问题描述】:
我在我的 ASP.NET Core 解决方案中创建了一个 Resources 文件夹,并创建了用于翻译的 resx 文件。我有模型、页面和控制器的 resx 文件。当页面模型中有输入模型时,我想知道将 resx 文件放在 Resources 文件夹中的什么位置?
【问题讨论】:
标签: razor asp.net-core localization
我在我的 ASP.NET Core 解决方案中创建了一个 Resources 文件夹,并创建了用于翻译的 resx 文件。我有模型、页面和控制器的 resx 文件。当页面模型中有输入模型时,我想知道将 resx 文件放在 Resources 文件夹中的什么位置?
【问题讨论】:
标签: razor asp.net-core localization
这是一个老问题,现在可能不相关,但我刚刚遇到同样的问题并且能够解决,所以我将添加对我有用的内容。
这实际上只是一个小细节。如果我们想要页面模型的资源,我们将有Resources\Pages\IndexModel.en.resx,对于该页面模型内部的类,我们添加一个+InnerModel,最后是Resources\Pages\IndexModel+InnerModel.en.resx
我在这里创建了一个带有工作示例的 GitHub 存储库 -> https://github.com/joaofbantunes/AspNetCoreRazorPagesInnerModelLocalizationSample
【讨论】:
假设我们在 pages 文件夹下有一个剃须刀页面,如下所示:
页面/MyPage.cshtml
及其模型页面:
页面/MyPage.cshtml.cs
您的资源文件夹位于 Pages 文件夹旁边的项目根目录中,如下所示:
项目根目录
-- 页面
-- 资源
MyPages 输入模型默认为:
我的页面模型
资源文件的命名根据您的 startup.cs 文件中的视图本地化设置而有所不同,
点命名:
如果您使用带有“后缀”选项的每个视图资源文件:
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix);
那么你必须遵循资源文件的点命名:
Resources/Pages.MyPage.en-US.resx // 视图的本地化资源
Resources/Pages.MyPageModel.en-US.resx // 输入模型的本地化资源
子文件夹命名
如果您使用带有“子文件夹”选项的每个视图资源文件:
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddViewLocalization(LanguageViewLocationExpanderFormat.SubFolder);
那么你必须为资源文件创建类似于视图文件夹结构的文件夹结构:
Resources/Pages/MyPage.en-US.resx // 视图的本地化资源
Resources/Pages/MyPageModel.en-US.resx // 输入模型的本地化资源
还有另一种选择,即使用共享资源文件,而不是为每种语言的每个视图创建一个资源,您可以只为每种语言的所有视图创建一个资源文件,如果您对使用共享资源感兴趣,可以访问此博客页面:http://www.ziyad.info/en/articles/10-Developing_Multicultural_Web_Application
【讨论】: