【问题标题】:ASP.NET core razor pages localization for inputmodel inside pagemodelASP.NET 核心剃须刀页面本地化,用于 pagemodel 内的 inputmodel
【发布时间】:2018-07-08 20:34:30
【问题描述】:

我在我的 ASP.NET Core 解决方案中创建了一个 Resources 文件夹,并创建了用于翻译的 resx 文件。我有模型、页面和控制器的 resx 文件。当页面模型中有输入模型时,我想知道将 resx 文件放在 Resources 文件夹中的什么位置?

【问题讨论】:

    标签: razor asp.net-core localization


    【解决方案1】:

    这是一个老问题,现在可能不相关,但我刚刚遇到同样的问题并且能够解决,所以我将添加对我有用的内容。

    这实际上只是一个小细节。如果我们想要页面模型的资源,我们将有Resources\Pages\IndexModel.en.resx,对于该页面模型内部的类,我们添加一个+InnerModel,最后是Resources\Pages\IndexModel+InnerModel.en.resx

    我在这里创建了一个带有工作示例的 GitHub 存储库 -> https://github.com/joaofbantunes/AspNetCoreRazorPagesInnerModelLocalizationSample

    【讨论】:

    • + 符号非常愚蠢,但它确实有效。谢谢
    【解决方案2】:

    假设我们在 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

    【讨论】:

    • 感谢您的描述性回答,但它没有回答问题。
    • 好吧,我想我误解了这个问题,据我现在的理解,你不想使用共享资源文件,对吧?
    • 是的,我想知道,是否有可能将 DataAnnotation 本地化用于内部类。喜欢 PageModel > InputModel
    • resx-files 的路径对于 Dotted 命名和 SubFolder 命名是相同的,这是正确的吗?我希望子文件夹命名的路径是 Resources/Pages/en-US/MyPage.resx
    • @GuidoNeele 是的,唯一的区别是您使用点 ( . ) 或斜线 ( / ),其余部分相同。有关更多详细信息,请参阅resource naming in the docs
    猜你喜欢
    • 2019-01-19
    • 2020-11-09
    • 2019-06-13
    • 2021-10-07
    • 2021-01-05
    • 2020-12-08
    • 1970-01-01
    • 2019-05-29
    • 2021-04-08
    相关资源
    最近更新 更多