一个本地的.resx字符串可以引用另一个本地的.resx字符串吗?

3
我正在试图确定是否可以将连接字符串添加到我的本地.resx文件中。以下示例应该会澄清:
假设我有一个简单的ASP.NET网页,由以下组成:(1)一个标签,其文本是一个重要关键词;(2)一个具有必填字段验证的输入框;(3)一个按钮,导致验证发生:
(lblMyInput)
(txtMyInput)
(rfvMyInput)
(btnSubmit)

现在,在此页面的资源文件中,我们希望本地化页面控件的字符串。但是,对于我们的错误消息,我们想使用输入标签的字面名称。这就是我的问题所在。

PSEUDOCODE: myPage.resx

(1) lblMyInput.Text = "Name"
(2) rfvMyInput.ErrorMessage = "The " + lblMyInput.Text + " field may not be left blank."
(3) btnSubmit.Text = "Submit/Validate"

有没有办法在同一个文件中将一个资源文件的字符串连接到另一个字符串中?谢谢!

resx文件只是XML文件,据我所知并没有这种复杂的功能。 - Greg
2个回答

4

一种方法是拥有两个resx字符串并按如下方式工作:

Resource1: "你好,这是一个 {0}" Resource2: "饼干"

使用字符串解析器将Resource2插入到Resource1中。这是一种标准的解决方案,但不是很好的解决方案,因为它要求开发人员了解{0}的含义。如果需要进行本地化翻译,则可能会出现本地化问题...并非所有语言都按照英语单词的顺序排列。


1
+1,这就是我的做法。不过需要注意的是,如果他向翻译公司提供一个简短的解释,说明 {0} 实际上是一个占位符(并告知占位符的用途),那么他们应该能够相对容易地处理它。 - Brandon
你能具体说明一下字符串解析器的使用方式吗?你是在代码后台页面还是在.aspx页面中处理它?或者这是由“Resource1... Resource2”顺序命名方案引起的固有行为? - Buffalo

1

在 .aspx 代码或代码后台中应使用 GetGlobalResourceObject 方法,并以以下方式保存字符串资源:

{0} 字段不能为空。

例如,在 .aspx 代码中,您可以尝试使用以下代码:

<asp:RequiredFieldValidator ruant="server" ID="rfvMyInput" ErrorMessage="<%= String.Format((string)GetGlobalResourceObject("GlobalResourceBaseName", "GlobalResourceKey"), lblMyInput.Text) %>" />

或者在代码后台:

rfvMyInput.ErrorMessage=String.Format((string)GetGlobalResourceObject("GlobalResourceBaseName", "GlobalResourceKey"), lblMyInput.Text);

通过更改GlobalResourceBaseNameGlobalResourceKey字符串,但使用您自己的字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接