在页面加载时设置meta:resourcekey

7 c# asp.net localization

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

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

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

谢谢.

Chr*_*oll 7

我认为你想要的代码背后的程序化本地化就像这样简单:

ctrl.Text = (string)GetLocalResourceObject(“myCtrlKey.Text”);
ctrl.AnotherAttribute = (string)GetLocalResourceObject(“myCtrlKey.AnotherAttribute”);
Run Code Online (Sandbox Code Playgroud)

使用LocalResource意味着对于名为MyPage.aspx的页面,您在特殊目录App_LocalResource中创建了名为MyPage.aspx.resx和/或MyPage.aspx.{culturename} .resx的资源文件.

如果您喜欢Global Resources而不是local,请使用特殊目录App_GlobalResource 来保存名为MyResourceFileName.resx的资源文件并调用:

ctrl.Text= (string)GetGlobalResourceObject(“MyResourceFileName”, “myGlobalKey”);
Run Code Online (Sandbox Code Playgroud)

从博客中复制后面的代码中的本地化

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


wom*_*omp 3

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

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

<asp:Label ID="MyLabel" meta:resource-key="MyResourceKey" />
Run Code Online (Sandbox Code Playgroud)

相当于:

<asp:Label ID="MyLabel" Text="<%$ Resources: myResXFile, MyResourceKey %>" />
Run Code Online (Sandbox Code Playgroud)

相当于代码:

MyLabel.Text = Resources.MyResXFile.MyResourceKey;
Run Code Online (Sandbox Code Playgroud)

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