MVC4本地化.从视图中访问resx

Kas*_*kov 14 localization resx razor asp.net-mvc-4 razor-2

在我看来,我想从该文件上的特定本地资源访问资源字符串..正如您从网络表单中知道的那样:

(string)GetLocalResource("Title");
Run Code Online (Sandbox Code Playgroud)

无痛而顺畅.框架处理从文化信息代码扩展(.en-EN.resx)获取的.resx文件.

这是可能的MVC4与Razore视图?如何?

我注意到我可以Custom Tool在.resx文件上设置属性PublicResXFileCodeGenerator.这样我就可以从视图中访问它了.示例:我已经为index.cshtml创建了丹麦语和英语的2个资源文件.就像我在网络表单中一样.这是我希望我能写的(Custom Tool Name属性设置为'ViewResource'):

@ViewResource.Title
Run Code Online (Sandbox Code Playgroud)

巴姆.如果现在的文化是丹麦语,标题将是"Forside",如果是英语,它将是"Home".但相反,我给出的唯一选择是选择一个特定的文件.然后从中选择所需的字符串:

@ViewResource.Index_cshtml_en-EN_resx.Title
Run Code Online (Sandbox Code Playgroud)

那不是动态的.所以我想我可以制作一个以某种方式取代en-EN/da-DK的扩展类.但对于那些"简单"并且已经很好并且易于集成到网络表单中的东西来说,这似乎相当多.必须有另一种方式.当然,mvc团队为我们提供了一些智能机制,就像其他一切:)

Mau*_*rez 36

我使用了特殊的.NET文件夹App_LocalResources.

这是步骤

.resx文件添加到该文件夹​​(即:Resource.resx,Resource.es-ES.resx)

右键单击每个.resx文件,然后选择properties并确保选中以下内容

Build Action: Embedded Resource 
Custom Tool: PublicResXFileCodeGenerator
Custom Tool Namespace: Resources
Run Code Online (Sandbox Code Playgroud)

然后在您的视图中,您可以使用Resources名称空间来访问.resx文件中的文本

<h2>@Resources.Resource.Global_Title<h2>
Run Code Online (Sandbox Code Playgroud)

@Resources因为这是你在给了名Custom Tool Namespace,并.Resource因为这是名.resx文件

还要确保将资源设置为 Public

要从任何模型访问资源,只需添加一行

using Resources;  //<<-- This line

namespace Concordia_CRM.Models
{
    public class SolicitudDemo
    {
        [Required]
        [Display(Name = "SD_NombreEmpresa", ResourceType = typeof(Resource))]
        public string NombreEmpresa { get; set; }

...
}
Run Code Online (Sandbox Code Playgroud)

更多细节可以在这篇文章中找到.

  • 我意识到这已经过时了,但这个页面帮助了我的开发工具,我想补充一点,如果你想在你的值中有html标签,那么将@ Resources.Resource.PropertyName放在@Html.Raw()中是有帮助的.这样,如果您的值有标签(例如<b> </ b>),它将相应地呈现html,而不仅仅是文本.另一点需要注意的是,如果要将这些值放在data-foo属性中,并且值具有空格,则应将整行括在引号中,使其读为:data-foo ="@ Html.Raw( Resources.Resource.PropertyName)" (3认同)

小智 9

在Visual Studio的Resources Designer中,我们有一个带有标签的Combo Box:Access Modifier,通常设置为:internal,使其工作设置为:Public.


ter*_*tyl 7

如果您创建一个名为f.ex的文件夹."资源"并添加2个文件Index.resx和Index.da-DK.resx您应该能够在剃刀视图中以这样的方式访问它们.

@Resources.Index.Title
Run Code Online (Sandbox Code Playgroud)

然后根据当前的线程文化,它将从正确的文件中选择文本

  • 不.我无法访问它们.我是否需要在视图中导入某些内容? (4认同)
  • 也许您需要使用完整的命名空间路径MyApp.Resources.Index.Title.我将资源文件放在一个单独的项目中,通过将资源访问器设置为public,我可以直接从我的razor视图访问它们 (2认同)