使用ASP.NET表达式

时间:2015-06-18 08:03:37

标签: c# asp.net webforms localization globalization

我正在尝试在ASP.NET Web窗体应用程序(.NET 4.0)中使用资源文件。我正在使用VS2012。我在App_GlobalResources文件夹中有以下文件:

  • Address.resx(默认语言,英语)
  • Address.ja-JP.resx(日文)

问题是当我尝试在ASP.NET页面(* .aspx文件)中显示日语文本时。如果我使用以下语法,一切正常:

<%= Resources.Address.Street1 %>

但是当我尝试将它绑定到asp:Label控件的属性时,将显示默认文本(英语)而不是日语:

<asp:Label ID="lblStreet1" runat="server" Text='<%$ Resources:Address,Street1 %>'></asp:Label>

BTW文化正在会话变量中设置,然后在母版页中我有这样的东西:

Thread.CurrentThread.CurrentCulture = (CultureInfo) Session["ci"];
Thread.CurrentThread.CurrentUICulture = (CultureInfo) Session["uci"];

另外,我不知道这是否相关,但我在Visual Studio外部生成Address.ja-JP.resx(使用Notepad ++),然后将文件移动到App_GlobalResources文件夹并将文件包含在解决方案。

我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:1)

我能够找到解决问题的方法。在后面的代码中,我必须覆盖InitializeCulture方法,我做了类似的事情:

protected override void InitializeCulture()
{
    Thread.CurrentThread.CurrentCulture = (CultureInfo) Session["ci"];
    Thread.CurrentThread.CurrentUICulture = (CultureInfo) Session["uci"];

    base.InitializeCulture();
}

答案 1 :(得分:0)

我建议您在标签控件上使用meta:resourcekey。在您的情况下,您可以使用:

import Cocoa
import XCPlayground

class MyView: NSView {

override init(frame: NSRect) {
    super.init(frame: frame)

    wantsLayer = true   //if commented change centerX & centerY accordingly
    layerContentsRedrawPolicy = .OnSetNeedsDisplay
    layer!.backgroundColor = CGColorCreateGenericRGB(0.0, 0.0, 0.0, 0.5)
}

required init?(coder: NSCoder) {
    super.init(coder: coder)
}

}

let containerView: NSView = NSView(frame: CGRectMake(0, 0, 150, 165))
let myView: MyView = MyView(frame: containerView.frame)
let label: NSTextField = NSTextField(frame: NSRect(x: 0.0, y: 0.0, width: 100, height: 22))
label.stringValue = "Please wait..."
label.drawsBackground = false
label.bordered = false
label.selectable = false
label.textColor = NSColor.whiteColor()

//containerView.addSubview(myView)
containerView.addSubview(myView)
containerView.addSubview(label, positioned: .Above, relativeTo: myView)

XCPShowView("view", containerView)

您的resx文件中的资源键将如下所示:

<asp:Label ID="lblStreet1" runat="server" meta:resourcekey="myStreet1Label"></asp:Label>