asp.net .net

asp.net - ¿Funciona el atributo enableClientBasedCulture en Web.config?



(3)

Es posible que desee probar:

<globalization uiCulture="auto:da-DK" culture="auto:da-DK" requestEncoding="utf-8" responseEncoding="utf-8" />

Creo que esto utilizará la cultura del primer encabezado AcceptLanguage si está disponible, de lo contrario, volverá al valor predeterminado especificado.

Buscando en la web, veo muchas instancias en las que se utiliza la siguiente combinación de atributos en la sección de globalización: culture = "auto", uiCulture = "auto", enableClientBasedCulture = "true", por ejemplo:

<globalization uiCulture="auto" culture="auto" requestEncoding="utf-8" responseEncoding="utf-8" enableClientBasedCulture="true"/>

La documentación dice: http://msdn.microsoft.com/en-us/library/system.web.configuration.globalizationsection.enableclientbasedculture(v=VS.90).aspx

Cuando la propiedad EnableClientBasedCulture está habilitada, las propiedades Cultura y Cultura se basan en el valor del campo del encabezado AcceptLanguage que envía el navegador del cliente. Si el valor del encabezado AcceptLanguage no se puede asignar a una cultura específica, se utilizan los valores Cultura y UICulture. El valor predeterminado es falso.

Para los atributos de cultura y cultura, "auto" significa http://msdn.microsoft.com/en-us/library/bz9tc508(v=VS.90).aspx

Para que ASP.NET establezca la cultura de la interfaz de usuario y la cultura en el primer idioma que se especifica en la configuración actual del navegador, establezca UICulture and Culture en auto. Alternativamente, puede establecer este valor en auto: culture_info_name, donde culture_info_name es un nombre de cultura. Para una lista de nombres de cultura, vea CultureInfo. Puede realizar esta configuración en la directiva @ Page o en el archivo Web.config.

Supongamos que el navegador envía un nombre de cultura no válido o no en el valor del campo del encabezado AcceptLanguage. Debido a enableClientBasedCulture = "true", se supone que el servidor de aplicaciones intenta usar lo que está en el campo de encabezado AcceptLanguage, pero con un nombre de cultura no válido, no lo hace y recurre a culture = "auto" y uiCulture = "auto ", pero las configuraciones automáticas / automáticas en sí mismas no podrán hacer uso alguno de los datos no válidos.

Ahora supongamos que enviamos al servidor un nombre de cultura válido, por ejemplo, "de-DE". Se sigue diciendo al servidor de aplicaciones que haga uso del valor del campo del encabezado AcceptLanguage porque enableClientBasedCulture = "true", pero como cultura y cultura están configuradas en "auto", de todos modos habrían usado ese valor.

Mi primera pregunta es : ¿cuál es el punto de combinar auto / auto con true? Mi creencia es que si culture = "auto" y uiCulture = "auto", usar enableClientBasedCulture = "true" sería redundante. Mis propias pruebas han demostrado que auto / auto funciona tan bien solo como lo hacen cuando se combinan con el atributo enableClientBasedCulture, pero como veo que la combinación auto / auto / true se sugiere en muchos ejemplos en la web, me pregunto si He pasado por alto algo.

He intentado usar enableClientBasedCulture = "true" sin la configuración automática / automática, por ejemplo,

<globalization requestEncoding="utf-8" responseEncoding="utf-8" enableClientBasedCulture="true"/>

Esto no parece funcionar en absoluto; parece que el cliente se alimenta a la fuerza de la cultura y las configuraciones de uiCulture del servidor, aunque se supone que enableClientBasedCulture = "true" (¿de forma implícita?) se encarga de establecer esas propiedades al valor del campo del encabezado AcceptLanguage.

Luego intenté combinar enableClientBasedCulture con un cultivo específico para cultura y cultura, por ejemplo

<globalization uiCulture="da-DK" culture="da-DK" requestEncoding="utf-8" responseEncoding="utf-8" enableClientBasedCulture="true"/>

En este caso, el navegador del cliente se vio obligado a usar "da-DK", independientemente de su configuración de idioma.

Viendo http://msdn.microsoft.com/en-us/library/hy4kkhe0(v=VS.90).aspx veo esto para enableClientBasedCulture:

Este atributo no está en uso en este momento.

Usando .NET Reflector, he descompilado todos los ensamblados de .NET 3.5 Framework y busqué enabledClientBasedCulture. He encontrado algún código en System.Web.Configuration / GlobalizationSection que lee el valor y lo pone a disposición a través de una propiedad, pero por lo demás no hace nada con él.

En Hosting / HostingEnvironment, encuentro un método llamado SetCultures que toma los valores de cultura y uiCulture de un parámetro GlobalizationSection, pero todavía tengo que encontrar cualquier código que haga uso del atributo enableClientBasedCulture.

Entonces, mi segunda pregunta es : ¿el atributo enableClientBasedCulture realmente se está utilizando en algún lugar y, de ser así, cómo debo configurar un programa de prueba para demostrarme que tiene algún efecto?


Tendrá que implementar su propia detección Accept-Lang y cambiar a las culturas que proporcione en consecuencia.

.NET no admite el cambio "auto-mágico".

enableClientBasedCulture no hace nada.

Poner la cultura en auto tampoco hace nada. Puede ver que al configurar "auto: en" en ambos y al eliminar el danés de los idiomas de su navegador, notará que, de todos modos, el idioma predeterminado será el danés.

Buena suerte.


MSDN dice que enableClientBasedCulture no se utiliza.

"enableClientBasedCulture - atributo opcional. Este atributo no está en uso en este momento".