如何将HTML代码放入.resx资源文件?

时间:2015-02-17 09:14:43

标签: c# html asp.net internationalization resx

奇怪的是,之前没有人问过这个......

我正在为4种语言创建模板化的HTML电子邮件。我想将HTML模板放入我的.resx文件中,以便通过代码轻松,国际化地访问它们。像这样:

.resx文件:

<data name="BodyTemplate" xml:space="preserve">
    <value><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
        <html>
        <head>
            <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
            <title>Title</title>
            ...
        </body>
        </html>
    </value>
</data>

但是,显然,编译器会抱怨.resx文件中的HTML。 有没有办法在.resx文件中使用HTML(或XML)。怎么样?

我使用.NET版本4和dotLiquid作为模板引擎,如果这很重要的话。

4 个答案:

答案 0 :(得分:8)

建议:创建您想要的文件,按照您想要的方式命名,例如&#34; my_template.html&#34; 然后将此文件添加到您的项目中。

单击它,然后在属性窗口中选择&#34; Build Action&#34;并将其设置为&#34; Embedded Resource&#34;。

每当您想要访问此文件时,您都可以使用类似的内容( no with proper block

    public static string ReadTextResourceFromAssembly(string name)
    {
        using ( var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream( name ) )
        {
            return new StreamReader( stream ).ReadToEnd();
        }
    }

根据您的需求量身定制。上面的方法获取资源,比如说你已将资源放在项目MyProject中的子目录&#34; HtmlTemplates中并调用它&#34; my_template.html&#34;然后你可以通过名称 MyProject.HtmlTemplates.my_template.html

然后您可以将其写入文件或直接使用,等等。

这有一些主要的好处:您在项目中看到 项目中的html文件,它具有html扩展名,因此在Visual Studio中对其进行编辑时会突出显示语法并将所有工具应用于.html文件。< / p>

我有一堆用于单元测试的方法,这个方法将数据提取到文件中:

    public static void WriteResourceToFile(string name, string destination)
    {
        using ( var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream( name ) )
        {
            if ( stream == null )
            {
                throw new ArgumentException( string.Format( "Resource '{0}' not found", name), "name" );
            }

            using ( var fs = new FileStream( destination, FileMode.Create ) )
            {
                stream.CopyTo( fs );
            }
        }
    }

答案 1 :(得分:5)

encoded html放入.resx文件,然后使用

取回html
@Html.Raw(Server.HtmlDecode(...resource...));

答案 2 :(得分:2)

这就形成了我的作品

 <td class="red" colspan="2" align="center">
                    <span style="color: #b01c1c;">
                        <strong>@Html.Raw(Resources.Listino.Cassette</strong>
                    </span>
 </td>
Listino资源文件中的

Resource File

答案 3 :(得分:1)

好吧,我找到了这样的方式:

首先,我使用多种语言创建了部分视图,并将此部分视图的路径放入.resx个文件中。接下来,我使用Resource字符串调用@Html.Partial()方法。

请参阅以下图片:

Views

Resx file