2012-06-03 1 views
2

я использую элемент управления ASP.NET AJAX на моем сайте и включили следующие параметры на ScriptManager:ASP.NET AJAX не делает объект __cultureInfo JS для EN-US локалей

scriptManager.EnableScriptGlobalization = true; 
scriptManager.EnableScriptLocalization = true; 

Когда я переключаю язык браузера, скажем, на французский, я получаю богатый объект JavaScript, который отображается на странице с именем __cultureInfo, который содержит все полезные вещи, которые мне нужны, чтобы инициализировать сборщики дат и правильно форматировать строки даты.

Однако, если локаль является английским, то объект __cultureInfo не отображается.

Есть ли способ заставить ASP.NET AJAX визуализировать эту переменную/объект JavaScript для всех локалей? Я хочу инициализировать все элементы управления, поддерживающие язык, без специального английского английского языка.

+0

Ну, а я жду окончательного ответ, я пошел вперед и сделал обертку для членов, которых не хватает в «en-US»: locale.getFirstDayOfWeek(), locale.getName() и locale.getLongDatePattern(). Я проверяю, есть ли "typeof (__ cultureInfo) === 'undefined'". Если это так, я возвращаю жестко заданные значения для английского языка. Это работает, но на самом деле klunky. –

+0

я встречаю этот вопрос сегодня также, и стоило мне несколько часов: "ClientCultureInfo.GetClientCultureScriptBlock (CultureInfo CultureInfo)" имеют следующий код надрез: 'Тип Тип = (cultureInfo.DateTimeFormat == NULL)? null: cultureInfo.DateTimeFormat.Calendar.GetType(); if (cultureInfo.Equals (enUS) && (type == typeof (GregorianCalendar))) { return null; } '}' Если культура текущего потока является «en-US», кажется, что «var __cultureInfo =» не будет отображаться ScriptManager, я не уверен, почему MS делает это так. –

ответ

0

клоны Microsoft культуральной Invarient к ан-США, так что даже несмотря на __cultureInfo не загружен, вы должны иметь все, что вам нужно в Sys.CultureInfo.CurrentCulture

switch(typeof(cultureInfo)) { 
case "string": 
    // this is true when the server is 3.5 
    cultureInfo = window.eval("(" + cultureInfo + ")"); 
    // allow fallthrough to object 
case "object": 
    this.CurrentCulture = this._parse(cultureInfo); 
    delete __cultureInfo; 
    break; 
default: 
    cultureInfo = clone(invariant); 
    // fix up the differences 
    cultureInfo.name = "en-US"; 
    cultureInfo.numberFormat.CurrencySymbol = "$"; 
    var dtf = cultureInfo.dateTimeFormat; 
    dtf.FullDatePattern = "dddd, MMMM dd, yyyy h:mm:ss tt"; 
    dtf.LongDatePattern = "dddd, MMMM dd, yyyy"; 
    dtf.LongTimePattern = "h:mm:ss tt"; 
    dtf.ShortDatePattern = "M/d/yyyy"; 
    dtf.ShortTimePattern = "h:mm tt"; 
    dtf.YearMonthPattern = "MMMM, yyyy"; 
    this.CurrentCulture = this._parse(cultureInfo); 
    break; 
}