【问题标题】:Javascript culture always en-usJavascript 文化总是让我们兴奋
【发布时间】:2011-03-01 10:46:02
【问题描述】:

我不确定我是否理解这段代码,或者我是否正确使用它,但我的印象是,在 ASP.NET 2.0 AJAX 网站中我可以像这样运行 javascript:

var c = Sys.CultureInfo.CurrentCulture

它会给我用户在访问时在浏览器中指定的文化/语言设置。但是,对我来说,无论我在 Firefox 或 IE 中选择哪种语言,它总是返回“en-US”。

但是这个服务器端代码:

string[] languages = HttpContext.Current.Request.UserLanguages;

if (languages == null || languages.Length == 0)
   return null;

try
{
   string language = languages[0].ToLowerInvariant().Trim();
   return CultureInfo.CreateSpecificCulture(language);
}
catch (ArgumentException)
{
    return null;
}

返回我当前设置的语言。但我需要做这个客户端,因为我需要在回发之前将字符串解析为日期时间并进行一些验证,并且该字符串可以是 MM/DD/YYYY 或 DD/MM/YYYY,或其他类似的东西。

我错过了什么?

编辑: 好的,我遇到了这个库http://www.datejs.com/。它看起来很可爱,并且它有忍者,所以我已经卖光了。但是在他们的文档中,我注意到您需要包含要包含的特定语言的 js 文件之一。我想你必须在服务器端做出决定并发出正确的脚本包含标签,这让我思考。我应该用 ASP.NET AJAX 的东西来做这个吗?即检查服务器端文化(哪个有效)并基于此在 js 中设置 Sys.CultureInfo.CurrentCulture?我希望它会自动从浏览器客户端获取它。

【问题讨论】:

  • 你不应该使用 CultureInfo.CreateSpecificCulture(language);只需使用 new CultureInfo(language) 代替
  • 好的,但是该服务器代码实际上正在运行。给我带来麻烦的是客户端的东西。

标签: c# asp.net javascript validation localization


【解决方案1】:

Sys.CultureInfo.CurrentCulture 的值基于从服务器发送的值。要让服务器将正确的值发送回客户端,您需要将ScriptManager 对象上的EnableScriptGlobalization 属性设置为true(默认为false)。

【讨论】:

  • 我将其设置为 true,但每次我仍然从 JavaScript 中获得 en-US,并从服务器端代码获得“英语(英国)”。我还有什么需要设置的吗?
  • 另外,还有 EnableScriptGlobalization 和 EnableScriptLocalization。两者似乎都不起作用。
【解决方案2】:

TMK,浏览器不会在第一个请求中将任何时区信息传递给服务器。您需要使用 Javascript 来执行此操作

【讨论】:

  • 浏览器始终发送Accept-Language 标头,ASP.NET 默认使用该标头确定区域信息。
猜你喜欢
  • 1970-01-01
  • 2011-01-17
  • 2016-11-11
  • 2010-12-02
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
相关资源
最近更新 更多