在页面加载时设置meta:resourcekey

时间:2009-08-13 20:33:54

标签: c# asp.net localization

我在页面上有一个标签,通过meta:resourcekey属性获取本地化文本。我的问题是我希望它根据他们所在的多视图的哪个视图显示不同的文本。

我尝试通过label.Attributes.Add("meta:resourcekey", "label")添加属性,但似乎没有加载任何文本。我在PreRender和同样的交易上试了一下。查看源时会显示该属性,但不显示任何文本。

这可能吗?另一种选择是拥有2个标签并改变页面加载的可见性,但这似乎不太优雅。

感谢。

2 个答案:

答案 0 :(得分:7)

我认为您在代码背后的编程本地化所需的内容就像这样简单:

ctrl.Text = (string)GetLocalResourceObject(“myCtrlKey.Text”);
ctrl.AnotherAttribute = (string)GetLocalResourceObject(“myCtrlKey.AnotherAttribute”);

使用LocalResource意味着对于名为MyPage.aspx的页面,您在特殊目录 App_LocalResource

如果您喜欢全球资源而非本地资源,请使用特殊目录 App_GlobalResource 保存名为MyResourceFileName.resx的资源文件并调用:

ctrl.Text= (string)GetGlobalResourceObject(“MyResourceFileName”, “myGlobalKey”);

copied from a blog about localization in the code behind

- PS。Attributes.Add(“meta:resourcekey”,“label”)不起作用的原因是“meta:resourcekey”不是真正的属性,它在aspx中的使用并不是真正有效的aspx标记 - 而是它的一个预处理指令,它使编译器根据您放入资源文件中的内容将其转换为更长的属性名称/值对列表。

答案 1 :(得分:3)

尝试分配meta:resourcekey属性的方法不会起作用,因为它们由页面解析器专门处理,并在页面生命周期代码甚至真正开始之前被替换。

但是meta:resourcekey基本上是代替访问本地资源文件的代码的声明性替代。换句话说:

<asp:Label ID="MyLabel" meta:resource-key="MyResourceKey" />

相当于:

<asp:Label ID="MyLabel" Text="<%$ Resources: myResXFile, MyResourceKey %>" />

等同于代码:

MyLabel.Text = Resources.MyResXFile.MyResourceKey;

如果您尝试为其分配属性,您似乎已经在代码中处理了您的标签。为什么不在代码中设置它的值?