如何在静态Webmethod字符串中获取覆盖文化

时间:2015-02-09 12:25:37

标签: c# asp.net

我通过覆盖基页(TEST.cs)中的当前文化来测试Aspx页面的当前语言,如下所示:

protected override void InitializeCulture()
{
Page.Culture = "French"
Page.UICulture = "fr";
}

我还在App_GlobalResources中创建了4种不同的语言,包括法语。

现在任何包含以下代码的aspx页面,并以TEST.cs为基础页面显示法语文本,尽管浏览器语言设置是否为法语。

<asp:Label ID="Label" Runat="server" Text="<%$ Resources:LocalizedText, language %>"></asp:Label>

到目前为止一切顺利。现在在其中一个aspx页面上,我使用一个用户控件,在后面的代码中使用Ajax和Webmethod的组合创建HTML DOM字符串,如下所示。

function language() {
   $.ajax({
    type: "POST",
    url: "/testing.aspx/language",
    data: "{ }",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
    $("#language").html(data.d);            
}
})

[WebMethod]
public static string language()
{   
StringBuilder language_sb = new StringBuilder();
language_sb.Append(Resources.LocalizedText.language);
return language_sb.ToString();
}

问题是Resources.LocalizedText.language仅返回基于浏览器语言设置的语言,并且它不识别基页中的InitializeCulture()的覆盖功能。

如何解决此问题并在静态Webmethod中使用覆盖语言?

提前致谢

1 个答案:

答案 0 :(得分:2)

在InitializeCulture中尝试设置Thread Culture,如下所示:

protected override void InitializeCulture()
{
    Page.Culture = "French"
    Page.UICulture = "fr";

    System.Threading.Thread.CurrentThread.CurrentCulture =
        System.Globalization.CultureInfo.CreateSpecificCulture("fr");
    System.Threading.Thread.CurrentThread.CurrentUICulture =
        System.Globalization.CultureInfo.CreateSpecificCulture("fr-FR");
}