14

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

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

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

下一个最好的方法是拆分段落,使本地化内容永远不会包含标记。在上面的示例中,我将有 4 个段落片段: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)我可以创建可以减少耦合影响的抽象。

但是,我该怎么处理链接 URL?谢谢,

斯特凡

4

6 回答 6

3

不要将 HTML 视为“格式”,而是将其视为结构,并将其全部保存到资源数据存储(例如 resx,或数据库,或 xml 文件或其他东西)中。然后你就可以不用再担心段落中的小段文字了。取而代之的是,您将根据语言环境对名为“paragraph_energyd_with_coffee”或其他名称的资源进行一些引用,并且您用于编辑资源的任何软件都将决定编辑器在构建每个资源中的 html 时具有何种灵活性。

于 2009-03-08T23:45:54.490 回答
1

I was having the same problem. If I'm reading your question correctly this is what I was able to do to solve it:

In my resources, I added the following text:

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

And in my ASP.NET view (using a Razor view), I added the following:

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

Doing this gave me all the word-specific formatting I needed for the proper effect.

于 2012-06-18T02:42:57.683 回答
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> 
于 2011-11-23T14:47:54.627 回答
0

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

于 2009-03-09T22:32:30.303 回答
0

我站在 Rahuls 一边——我会考虑内容的 html/css ......只是那个......内容。

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

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

谢谢!

于 2009-03-09T15:58:13.560 回答
-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>
于 2011-09-21T18:42:33.787 回答