ASP.NET:使用混合HTML格式本地化内容

时间:2009-03-08 23:00:50

标签: asp.net html localization resx

在我的应用程序中,我的段落包含混合静态文本和HTML格式和链接。我正在寻找一个良好的本地化解决方案,以保持资源与标记分离。假设我们有以下段落:

<p>Let's have a <a href="someURL">cup of coffee</a> and get <b>energized</b>.</p>

使用标准的resx解决方案迫使我在resx字符串中嵌入HTML标记和链接目标。这很糟糕,因为它将标记/ CSS / app结构与资源结合在一起。

下一个最好的方法是拆分段落,使本地化内容永远不会包含标记。在上面的例子中,我将有4个para片段: 1)“让我们有一个”作为纯文本 2)“一杯咖啡”作为链接 3)“并获得”作为纯文本 4)“通电”为粗体文字

这个解决方案的问题在于,碎片会使资源的维护成为一场彻头彻尾的噩梦,而且它会强制段落片段的某个顺序,这可能不符合所有文化的语法。例如,在翻译的语言中,正确的翻译可能是

<p>Let's get <b>energized</b> with a <a href="someURL">cup of coffee</a>.</p>

我认为我不能完全没有将标记嵌入资源中,这可能不是什么大不了的事。使用适当的标记/ CSS(span,div,id,class),我可以创建可以减少耦合影响的抽象。

虽然我如何处理链接网址?谢谢,

的Stefan

6 个答案:

答案 0 :(得分:4)

不要将HTML视为“格式化”,而是将其视为结构,并将其全部保存到资源数据存储(例如resx,数据库或xml文件等)。然后你可以不再担心段落中的一些文本了。相反,您将对每个区域设置引用一个名为“paragraph_energized_with_coffee”的资源,而您用于编辑资源的任何软件都将决定编辑器在构建每个资源中的html时具有的灵活性。

答案 1 :(得分:1)

这样做:

<%= String.Format("Resources.MyResource.mydata","someURL") %>

并将其用作资源字符串:

<p>Let's have a <a href="{0}">cup of coffee</a> and get <b>energized</b>.</p> 

答案 2 :(得分:1)

我遇到了同样的问题。如果我正确地阅读了您的问题,这就是我能够解决的问题:

在我的资源中,我添加了以下文字:

<p>Let's get <b>energized</b> with a <a href="{0}">cup of coffee</a>.</p>

在我的ASP.NET视图中(使用Razor视图),我添加了以下内容:

@Html.Raw(String.Format(ShopSavvy.Retailers.Web.Resources.Home.Index.perksReachShoppersBody1, "someURL"))

这样做给了我正确的效果所需的所有特定于字的格式。

答案 3 :(得分:0)

我在Rahuls方面 - 我会考虑内容的html / css ...只是......内容。

主要原因是,当您想要对网站进行批量内容更新时,您只需将粘贴从提供的html / css复制到resx文件中。从html / css到asp.net进行原始模板制作也要快得多。

还有一些折射工具在选择内容时可以“导出到resx文件”选项,这可能会加快速度。

谢谢!

答案 4 :(得分:0)

我在谷歌搜索完全相同的问题。这是故意的,因为如果您将资源文件发送给翻译人员,他/她可能不会理解HTML并且可能会损坏您的代码。我也不喜欢这样。

答案 5 :(得分:-1)

默认的Visual Studio示例网站包含:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" 
       AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>Welcome to ASP.NET!</h2>
    <p>To learn more about ASP.NET visit <a href="http://www.asp.net" title="ASP.NET
          Website">www.asp.net</a>.
    </p>
    <p>
        You can also find <a href="http://go.microsoft.com/fwlink/?LinkID=152368&amp;clcid=0x409"
            title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.
    </p>
</asp:Content>

您如何本地化这些:

  1. <h2>Welcome to ASP.NET!</h2>

  2. <p>To learn more about ASP.NET visit <a href="http://www.asp.net" title="ASP.NET Website">www.asp.net</a>.</p>

  3. <p>You can also find <a href="http://go.microsoft.com/fwlink/?LinkID=152368&amp;clcid=0x409" title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.</p>