我通过覆盖基页(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中使用覆盖语言?
提前致谢
答案 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");
}