¿Cómo cambiar CurrentCulture en tiempo de ejecución?

Necesito cambiar culturas en tiempo de ejecución de acuerdo con los archivos de recursos para cada cultura.

Necesito cambiar los atributos de los controles en mi forma, de acuerdo con dos culturas que han designado archivos .resx

resorces1.aspx.resx // default resorces1.aspx.he-IL.resx // hebrew culture 

Puedo cargar la página con el recurso alternativo, o en la carga de la página, dar el valor UICulture = "he-IL" y se carga bien con los recursos deseados.

El problema es que necesito hacer estos cambios en tiempo de ejecución.

1 .. después de cambiar el valor de un botón, haga clic en evento

  btn_change_Click(....) { UICulture = "he-IL" ; } 

Todavía vuelve al valor inicializado de “en-US”

¿Cómo puedo enviar un cambio a la UICulture en tiempo de ejecución?

2 .. ¿Cómo puedo hacer referencia al archivo de recurso alternativo si, por ejemplo, no sé si es “en-US”?

Cambiar la cultura de UI actual:

 System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("he-IL"); 

o mejor, recupere una instancia de solo lectura en caché de la cultura he-IL:

 System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("he-IL"); 

En tiempo de ejecución, ASP.NET utiliza el archivo de recursos que es la mejor coincidencia para la configuración de la propiedad CurrentUICulture. La cultura de la interfaz de usuario para el hilo se establece de acuerdo con la cultura de la interfaz de usuario de la página. Por ejemplo, si la cultura de UI actual es el español, ASP.NET usa la versión comstackda del archivo WebResources.es.resx. Si no existe una coincidencia para la cultura de IU actual, ASP.NET utiliza la recuperación de recursos. Comienza buscando recursos para una cultura específica. Si no están disponibles, busca los recursos para una cultura neutral. Si no se encuentran, ASP.NET carga el archivo de recursos predeterminado. En este ejemplo, el archivo de recursos predeterminado es WebResource.resx.

No he podido obtener el “repliegue” como se describe aquí para que funcione. Estoy usando los archivos de recursos globales para el idioma y cuando la etiqueta falta en el archivo de cultura seleccionado por el usuario, ¿no vuelve a una etiqueta por defecto en la cultura predeterminada? Terminé creando un método para realizar el repliegue. Estaba buscando mejores formas de cambiar la cultura temporalmente (cuando no se encuentra la etiqueta) y me tropecé con esta publicación, así que pensé que sí y algo de contenido.

En una clase de utilidad mía: public String getLabelResource (String sLabelID, String sLangCd) {

  cLogger oLogger = new cLogger(); try { Object sLabel; sLabel = HttpContext.GetGlobalResourceObject("{filename}", sLabelID); if (sLabel.ToString() == "") //label was not found in selected lang { //default to US language resource label Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US"); sLabel = HttpContext.GetGlobalResourceObject("{filename}", sLabelID); //switch global lang back to selected Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(sLangCd); } return sLabel.ToString(); } catch (Exception ex) { oLogger.LogWrite("cUtils.cs", "getLabelResource", ex.Message, false); return String.Empty; } } 

max me puso en el camino correcto, nada que no haya encontrado antes, pero sí me ayudó a hacer un pequeño ajuste a la documentación de msdn sobre el asunto:

http://msdn.microsoft.com/en-us/library/bz9tc508.aspx

  string defaultLanguage = Thread.CurrentThread.CurrentUICulture.ToString(); protected void Page_Load(object sender, EventArgs e) { } protected override void InitializeCulture() { if (Request.Form["ListBox1"] != null) { String selectedLanguage = Request.Form["ListBox1"]; UICulture = selectedLanguage; Culture = selectedLanguage; Thread.CurrentThread.CurrentCulture = new CultureInfo(selectedLanguage); Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage); } else { Thread.CurrentThread.CurrentCulture = new CultureInfo(defaultLanguage); Thread.CurrentThread.CurrentUICulture = new CultureInfo(defaultLanguage); } base.InitializeCulture(); } 

el cuadro de lista contiene culturas diferentes, la primera y la seleccionada también es la cultura predeterminada, que guardo en la carga de la página, en otras la carga como sin efecto porque la lista ya es un valor.