【问题标题】:Globalization and links in sentences全球化和句子中的链接
【发布时间】:2009-08-11 20:39:32
【问题描述】:
我正在使用 C# 作为后端对 asp.net 应用程序进行全球化/本地化。我们正在将字符串提取到资源文件中,但遇到了问题。我们试图将句子放在一起,以便它们可以翻译,但链接无法做到这一点。例如:
<%= Strings.BeginningOfSentence %>
<asp:HyperLink id="exampleLink" runat="server"><%= Strings.MiddleOfSentence %></asp:HyperLink>
<%= Strings.EndOfSentence %>
字符串是资源文件。如果这是链接的普通 html,我可以使用 String.Format 并将句子放在一起,将 html 作为两个参数添加,但这会破坏它。关于如何完成这项工作的任何想法?
【问题讨论】:
标签:
c#
asp.net
localization
globalization
hyperlink
【解决方案1】:
您不必为此使用超链接控件吗?如果您需要动态链接,则可以将锚标记存储在参数化字符串中,并使用 string.Format 添加必要的属性值,就像您建议的那样。像这样的:
代码:
myLiteral.Text = string.Format("{0} <a href=\"{1}\">{2}</a> {3}", Strings.BeginningOfSentence, myUrl, Strings.MiddleOfSentence, Strings.EndOfSentence);
ASPX:
<asp:Literal id="myLiteral" runat="server" />
【解决方案2】:
我发现参数化字符串极大地简化了与动态内容混合的翻译。例如,您可以在已翻译的字符串中包含可以插入 link-html 的占位符。不过,这可能会排除使用服务器端超链接控件。示例字符串:
英语:
"The <a href=\"http://images.google.se/images?q=house&tab=wi\">house</a> in which we lived"
瑞典语:
"<a href=\"http://images.google.se/images?q=hus&tab=wi\">huset</a> som vi bodde i"
请注意链接在句子中相对于链接的移动方式(瑞典语版本中链接之前没有文字)。
如果你不想在翻译中包含标记,我猜它本身可以用作参数化模板:
string googleSearchTemplate = "<a href=\"http://images.google.se/images?q={0}&tab=wi\">{1}</a>"
然后你可以将翻译后的片段解析为链接html,然后将该片段插入到最终的字符串中:
string.Format("The {0} in which we lived", string.Format(googleSearchTemplate, "house", "house"));
然后你只需要将生成的字符串插入到页面中。